From fa6ab2400e4e336b429264085f4087724cb5b55c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 12 Aug 2007 08:11:31 +0000 Subject: site/avr32-common: add more entries --- site/avr32-common | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/site/avr32-common b/site/avr32-common index 5bce901caa..5f44f0ac89 100644 --- a/site/avr32-common +++ b/site/avr32-common @@ -1,3 +1,18 @@ glib_cv_stack_grows=${glib_cv_stack_grows=no} ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=yes} glib_cv_uscore=${glib_cv_uscore=no} +ac_cv_func_setpgrp_void=${ac_cv_func_setpgrp_void=yes} + +#dbus-glib +ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=yes} + +# set MALLOC_GLIBC_COMPAT=y in your uclibc .config for this +ac_cv_func_malloc_0_nonnull=${ac_cv_func_malloc_0_nonnull=yes} + +#gstreamer +as_cv_unaligned_access=${as_cv_unaligned_access=no} + +#readline +bash_cv_have_mbstate_t=${bash_cv_have_mbstate_t=yes} + + -- cgit v1.2.3 From a48bd637aa3b73f0da3bdcbef32606b34820ed81 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 12 Aug 2007 08:19:40 +0000 Subject: avr32-gcc, avr32-gcc-cross: add 4.1.2 --- packages/gcc/avr32-gcc-cross_4.1.2.bb | 22 ++++++++++++++++++++++ packages/gcc/avr32-gcc_4.1.2.bb | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 packages/gcc/avr32-gcc-cross_4.1.2.bb create mode 100644 packages/gcc/avr32-gcc_4.1.2.bb diff --git a/packages/gcc/avr32-gcc-cross_4.1.2.bb b/packages/gcc/avr32-gcc-cross_4.1.2.bb new file mode 100644 index 0000000000..e34098f840 --- /dev/null +++ b/packages/gcc/avr32-gcc-cross_4.1.2.bb @@ -0,0 +1,22 @@ +require avr32-gcc_${PV}.bb +# path mangling, needed by the cross packaging +require gcc-paths-cross.inc +inherit cross +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}" +# NOTE: split PR. If the main .oe changes something that affects its *build* +# remember to increment this one too. +PR = "r0" + +DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native" +PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++" + +# cross build +require gcc3-build-cross.inc +# cross packaging +require gcc-package-cross.inc + +SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 " + +EXTRA_OECONF += " --disable-libmudflap \ + --disable-libunwind-exceptions \ + --with-mpfr=${STAGING_DIR}/${BUILD_SYS}" diff --git a/packages/gcc/avr32-gcc_4.1.2.bb b/packages/gcc/avr32-gcc_4.1.2.bb new file mode 100644 index 0000000000..60254db87e --- /dev/null +++ b/packages/gcc/avr32-gcc_4.1.2.bb @@ -0,0 +1,22 @@ +require gcc_${PV}.bb + +FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/gcc-4.1.2', '${FILE_DIRNAME}/gcc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}" + +SRC_URI = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.0.0.tar.gz \ +# file://100-uclibc-conf.patch;patch=1 \ +# file://200-uclibc-locale.patch;patch=1 \ +# file://300-libstdc++-pic.patch;patch=1 \ + file://301-missing-execinfo_h.patch;patch=1 \ + file://302-c99-snprintf.patch;patch=1 \ + file://303-c99-complex-ugly-hack.patch;patch=1 \ + file://304-index_macro.patch;patch=1 \ + file://602-sdk-libstdc++-includes.patch;patch=1 \ + file://gcc41-configure.in.patch;patch=1 \ + file://ldflags.patch;patch=1 \ + file://zecke-xgcc-cpp.patch;patch=1 \ + file://cache-amnesia.patch;patch=1 \ + " + +do_compile_prepend() { +ln -sf ${S}/libstdc++-v3/config/os/uclibc/ ${S}/libstdc++-v3/config/os/uclibc-linux +} -- cgit v1.2.3 From 2469659e28c8a96adf778ede7b8f796bb3d2f390 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 12 Aug 2007 08:25:49 +0000 Subject: uclibc: massively improve avr32 support, courtesy Stelios Koroneos --- .../uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch | 2135 ++++++++++ .../avr32/avr32-linkrelax-option.patch | 40 + .../uclibc-0.9.28/avr32/avr32-string-ops.patch | 1139 ++++++ .../fix-__libc_fcntl64-varargs-prototype.patch | 24 + .../avr32/fix-broken-__libc_open-declaration.patch | 30 + .../avr32/fix-getrusage-argument-type.patch | 19 + .../uclibc-0.9.28/avr32/ldd-avr32-support.patch | 25 + .../avr32/ldso-always-inline-_dl_memcpy.patch | 24 + .../avr32/ldso-always-inline-syscalls.patch | 107 + .../uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch | 526 +++ ...dso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch | 23 + .../avr32/ldso-avr32-startup-hack.patch | 40 + ...optimized-stringops-override-default-ones.patch | 28 + .../uclibc-0.9.28/avr32/libpthread-avr32.patch | 105 + .../avr32/no-create_module-on-avr32.patch | 27 + ...ack-and-just-use-asm-generic-if-it-exists.patch | 48 + .../avr32/sync-fcntl-h-with-linux-kernel.patch | 54 + .../avr32/uClibc-0.9.28-avr32-20060621.patch | 4322 ++++++++++++++++++++ .../avr32/uClibc-0.9.28-avr32-20061019.patch | 4080 ++++++++++++++++++ packages/uclibc/uclibc-0.9.28/avr32/uClibc.config | 31 +- .../avr32/uclibc-avr32-kernheaders.spec | 41 + .../avr32/uclibc-avr32-no-msoft-float.patch | 14 + .../uclibc-0.9.28/avr32/uclibc-makefile.patch | 16 + packages/uclibc/uclibc.inc | 15 +- packages/uclibc/uclibc/.mtn2git_empty | 0 packages/uclibc/uclibc_0.9.28.bb | 30 +- 26 files changed, 12913 insertions(+), 30 deletions(-) create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch create mode 100644 packages/uclibc/uclibc/.mtn2git_empty diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch new file mode 100644 index 0000000000..0e8c2a1c02 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch @@ -0,0 +1,2135 @@ +Subject: [PATCH] AVR32 Architecture support + +Add support for the AVR32 architecture in the core libc and build system. +This also adds AVR32-ELF definitions to elf.h + +--- + + Rules.mak | 4 + extra/Configs/Config.avr32 | 38 +++++ + extra/Configs/Config.in | 7 + + include/elf.h | 51 +++++++ + libc/sysdeps/linux/avr32/Makefile | 93 +++++++++++++ + libc/sysdeps/linux/avr32/__longjmp.S | 17 ++ + libc/sysdeps/linux/avr32/_mmap.c | 33 ++++ + libc/sysdeps/linux/avr32/bits/atomicity.h | 86 ++++++++++++ + libc/sysdeps/linux/avr32/bits/byteswap.h | 80 +++++++++++ + libc/sysdeps/linux/avr32/bits/endian.h | 7 + + libc/sysdeps/linux/avr32/bits/fcntl.h | 167 +++++++++++++++++++++++++ + libc/sysdeps/linux/avr32/bits/kernel_stat.h | 63 +++++++++ + libc/sysdeps/linux/avr32/bits/kernel_types.h | 56 ++++++++ + libc/sysdeps/linux/avr32/bits/machine-gmon.h | 69 ++++++++++ + libc/sysdeps/linux/avr32/bits/mman.h | 95 ++++++++++++++ + libc/sysdeps/linux/avr32/bits/profil-counter.h | 26 +++ + libc/sysdeps/linux/avr32/bits/setjmp.h | 21 +++ + libc/sysdeps/linux/avr32/bits/syscalls.h | 143 +++++++++++++++++++++ + libc/sysdeps/linux/avr32/bits/wordsize.h | 1 + libc/sysdeps/linux/avr32/brk.c | 23 +++ + libc/sysdeps/linux/avr32/bsd-_setjmp.S | 12 + + libc/sysdeps/linux/avr32/bsd-setjmp.S | 12 + + libc/sysdeps/linux/avr32/clone.c | 37 +++++ + libc/sysdeps/linux/avr32/crt1.S | 93 +++++++++++++ + libc/sysdeps/linux/avr32/crti.S | 17 ++ + libc/sysdeps/linux/avr32/crtn.S | 14 ++ + libc/sysdeps/linux/avr32/mmap.c | 31 ++++ + libc/sysdeps/linux/avr32/setjmp.S | 43 ++++++ + libc/sysdeps/linux/avr32/sigaction.c | 49 +++++++ + libc/sysdeps/linux/avr32/sigrestorer.S | 11 + + libc/sysdeps/linux/avr32/sys/elf.h | 26 +++ + libc/sysdeps/linux/avr32/sys/io.h | 48 +++++++ + libc/sysdeps/linux/avr32/sys/procfs.h | 123 ++++++++++++++++++ + libc/sysdeps/linux/avr32/sys/ucontext.h | 94 ++++++++++++++ + libc/sysdeps/linux/avr32/sys/user.h | 46 ++++++ + libc/sysdeps/linux/avr32/syscall.S | 81 ++++++++++++ + libc/sysdeps/linux/avr32/vfork.S | 55 ++++++++ + 37 files changed, 1872 insertions(+) + +Index: uClibc-0.9.28/extra/Configs/Config.avr32 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/extra/Configs/Config.avr32 2006-05-05 09:27:17.000000000 +0200 +@@ -0,0 +1,38 @@ ++# ++# For a description of the syntax of this configuration file, ++# see extra/config/Kconfig-language.txt ++# ++ ++config HAVE_ELF ++ bool ++ default y ++ ++config TARGET_ARCH ++ default "avr32" ++ ++config ARCH_CFLAGS ++ string ++ ++config ARCH_LDFLAGS ++ string ++ ++config LIBGCC_CFLAGS ++ string ++ ++config ARCH_SUPPORTS_BIG_ENDIAN ++ bool ++ default y ++ ++config UCLIBC_COMPLETELY_PIC ++ select FORCE_SHAREABLE_TEXT_SEGMENTS ++ bool ++ default y ++ ++choice ++ prompt "Target CPU Type" ++ default CONFIG_AP7000 ++ ++config CONFIG_AP7000 ++ bool "AP7000" ++ ++endchoice +Index: uClibc-0.9.28/extra/Configs/Config.in +=================================================================== +--- uClibc-0.9.28.orig/extra/Configs/Config.in 2006-04-19 12:47:48.000000000 +0200 ++++ uClibc-0.9.28/extra/Configs/Config.in 2006-04-19 12:48:33.000000000 +0200 +@@ -16,6 +16,9 @@ config TARGET_alpha + config TARGET_arm + bool "arm" + ++config TARGET_avr32 ++ bool "avr32" ++ + config TARGET_bfin + bool "bfin" + +@@ -83,6 +86,10 @@ if TARGET_arm + source "extra/Configs/Config.arm" + endif + ++if TARGET_avr32 ++source "extra/Configs/Config.avr32" ++endif ++ + if TARGET_bfin + source "extra/Configs/Config.bfin" + endif +Index: uClibc-0.9.28/include/elf.h +=================================================================== +--- uClibc-0.9.28.orig/include/elf.h 2006-04-19 12:47:48.000000000 +0200 ++++ uClibc-0.9.28/include/elf.h 2006-05-05 09:28:38.000000000 +0200 +@@ -261,6 +261,8 @@ typedef struct + #define EM_NIOS32 0xfebb /* Altera Nios 32 */ + #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */ + ++#define EM_AVR32 0x18ad ++ + /* V850 backend magic number. Written in the absense of an ABI. */ + #define EM_CYGNUS_V850 0x9080 + +@@ -2687,6 +2689,55 @@ typedef Elf32_Addr Elf32_Conflict; + /* Keep this the last entry. */ + #define R_V850_NUM 25 + ++/* Atmel AVR32 relocations. */ ++#define R_AVR32_NONE 0 ++#define R_AVR32_32 1 ++#define R_AVR32_16 2 ++#define R_AVR32_8 3 ++#define R_AVR32_32_PCREL 4 ++#define R_AVR32_16_PCREL 5 ++#define R_AVR32_8_PCREL 6 ++#define R_AVR32_DIFF32 7 ++#define R_AVR32_DIFF16 8 ++#define R_AVR32_DIFF8 9 ++#define R_AVR32_GOT32 10 ++#define R_AVR32_GOT16 11 ++#define R_AVR32_GOT8 12 ++#define R_AVR32_21S 13 ++#define R_AVR32_16U 14 ++#define R_AVR32_16S 15 ++#define R_AVR32_8S 16 ++#define R_AVR32_8S_EXT 17 ++#define R_AVR32_22H_PCREL 18 ++#define R_AVR32_18W_PCREL 19 ++#define R_AVR32_16B_PCREL 20 ++#define R_AVR32_16N_PCREL 21 ++#define R_AVR32_14UW_PCREL 22 ++#define R_AVR32_11H_PCREL 23 ++#define R_AVR32_10UW_PCREL 24 ++#define R_AVR32_9H_PCREL 25 ++#define R_AVR32_9UW_PCREL 26 ++#define R_AVR32_HI16 27 ++#define R_AVR32_LO16 28 ++#define R_AVR32_GOTPC 29 ++#define R_AVR32_GOTCALL 30 ++#define R_AVR32_LDA_GOT 31 ++#define R_AVR32_GOT21S 32 ++#define R_AVR32_GOT18SW 33 ++#define R_AVR32_GOT16S 34 ++#define R_AVR32_GOT7UW 35 ++#define R_AVR32_32_CPENT 36 ++#define R_AVR32_CPCALL 37 ++#define R_AVR32_16_CP 38 ++#define R_AVR32_9W_CP 39 ++#define R_AVR32_RELATIVE 40 ++#define R_AVR32_GLOB_DAT 41 ++#define R_AVR32_JMP_SLOT 42 ++#define R_AVR32_ALIGN 43 ++#define R_AVR32_NUM 44 ++ ++/* AVR32 dynamic tags */ ++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ + + #define R_H8_NONE 0 + #define R_H8_DIR32 1 +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,93 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../../ ++include $(TOPDIR)Rules.mak ++ASFLAGS=$(CFLAGS) ++ ++CRT_SRC = crt1.S ++CRT_OBJ = crt1.o ++SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ)) ++CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o ++ ++SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \ ++ bsd-_setjmp.S sigrestorer.S syscall.S ++SOBJS=$(patsubst %.S,%.o, $(SSRC)) ++ ++CSRC=clone.c brk.c sigaction.c mmap.c ++COBJS=$(patsubst %.c,%.o, $(CSRC)) ++ ++OBJS=$(SOBJS) $(COBJS) ++ ++OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS) ++ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ ++ ++$(CRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SCRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SOBJS): %.o : %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(COBJS): %.o : %.c ++ $(CC) $(CFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) ++crti.o: crti.S ++ $(CC) $(ASFLAGS) -c crti.S -o crti.o ++ ++$(TOPDIR)lib/crti.o: crti.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crti.o $(TOPDIR)lib/ ++ ++crtn.o: crtn.S ++ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o ++ ++$(TOPDIR)lib/crtn.o: crtn.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crtn.o $(TOPDIR)lib/ ++else ++$(TOPDIR)lib/crti.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o ++$(TOPDIR)lib/crtn.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o ++endif ++ ++ ++headers: ++# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/ ++ ++clean: ++ $(RM) *.[oa] *~ core ++ $(RM) bits/sysnum.h ++ $(RM) gmon-start.S ++ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,17 @@ ++/* longjmp for AVR32 ++ * ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ .global __longjmp ++ .type __longjmp,"function" ++ .align 1 ++__longjmp: ++ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ mov r12, r11 /* get the return value right */ ++ mustr r8 /* restore status register (lower half) */ ++ cp r12, 0 /* can't return zero */ ++ frs ++ moveq r12, 1 ++ mov pc,lr ++ .size __longjmp, . - __longjmp +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++#define __NR_mmap2 __NR_mmap ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,86 @@ ++/* Low-level functions for atomic operations. AVR32 version. ++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _ATOMICITY_H ++#define _ATOMICITY_H 1 ++ ++#include ++ ++static inline int ++__attribute__((unused)) ++exchange_and_add (volatile uint32_t *mem, int val) ++{ ++ int tmp, result; ++ ++ __asm__ __volatile__( ++ "/* Inline exchange and add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " add %1, %0, %4\n" ++ " stcond %2, %1\n" ++ " brne 1b" ++ : "=&r"(result), "=&r"(tmp), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++static inline void ++__attribute__((unused)) ++atomic_add (volatile uin32_t *mem, int val) ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline atomic add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " add %0, %3\n" ++ " stcond %2, %0\n" ++ " brne 1b" ++ : "=&r"(result), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++} ++ ++static inline int ++__attribute__((unused)) ++compare_and_swap(volatile long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* atomicity.h */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* Macros to swap the order of bytes in integer values. ++ Copyright (C) 2005 Atmel Norway. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H ++# error "Never use directly; include instead." ++#endif ++ ++#ifndef _BITS_BYTESWAP_H ++#define _BITS_BYTESWAP_H 1 ++ ++/* Swap bytes in 16 bit value. */ ++#if defined __GNUC__ ++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) ++#else ++/* This is better than nothing. */ ++static __inline unsigned short int ++__bswap_16 (unsigned short int __bsx) ++{ ++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); ++} ++#endif ++ ++/* Swap bytes in 32 bit value. */ ++#if defined __GNUC__ ++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) ++#else ++static __inline unsigned int ++__bswap_32 (unsigned int __bsx) ++{ ++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | ++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); ++} ++#endif ++ ++#if defined __GNUC__ ++/* Swap bytes in 64 bit value. */ ++# define __bswap_constant_64(x) \ ++ ((((x) & 0xff00000000000000ull) >> 56) \ ++ | (((x) & 0x00ff000000000000ull) >> 40) \ ++ | (((x) & 0x0000ff0000000000ull) >> 24) \ ++ | (((x) & 0x000000ff00000000ull) >> 8) \ ++ | (((x) & 0x00000000ff000000ull) << 8) \ ++ | (((x) & 0x0000000000ff0000ull) << 24) \ ++ | (((x) & 0x000000000000ff00ull) << 40) \ ++ | (((x) & 0x00000000000000ffull) << 56)) ++ ++# define __bswap_64(x) \ ++ (__extension__ \ ++ ({ \ ++ union { \ ++ __extension__ unsigned long long int __ll; \ ++ unsigned int __l[2]; \ ++ } __w, __r; \ ++ if (__builtin_constant_p(x)) \ ++ __r.__ll = __bswap_constant_64(x); \ ++ else { \ ++ __w.__ll = (x); \ ++ __r.__l[0] = __bswap_32(__w.__l[1]); \ ++ __r.__l[1] = __bswap_32(__w.__l[0]); \ ++ } \ ++ __r.__ll; \ ++ })) ++#endif ++ ++#endif /* _BITS_BYTESWAP_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,7 @@ ++/* AVR32 is big-endian */ ++ ++#ifndef _ENDIAN_H ++# error "Never use directly; include instead." ++#endif ++ ++#define __BYTE_ORDER __BIG_ENDIAN +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,167 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * This file is part of the Linux kernel ++ */ ++#ifndef _FCNTL_H ++# error "Never use directly; include instead." ++#endif ++ ++#include ++ ++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files ++ located on an ext2 file system */ ++#define O_ACCMODE 0003 ++#define O_RDONLY 00 ++#define O_WRONLY 01 ++#define O_RDWR 02 ++#define O_CREAT 0100 /* not fcntl */ ++#define O_EXCL 0200 /* not fcntl */ ++#define O_NOCTTY 0400 /* not fcntl */ ++#define O_TRUNC 01000 /* not fcntl */ ++#define O_APPEND 02000 ++#define O_NONBLOCK 04000 ++#define O_NDELAY O_NONBLOCK ++#define O_SYNC 010000 ++#define O_ASYNC 020000 ++ ++#ifdef __USE_GNU ++# define O_DIRECTORY 040000 /* must be a directory */ ++# define O_NOFOLLOW 0100000 /* don't follow links */ ++# define O_DIRECT 0200000 /* direct disk access */ ++#endif ++ ++#ifdef __USE_LARGEFILE64 ++# define O_LARGEFILE 0400000 ++#endif ++ ++/* For now Linux has synchronisity options for data and read operations. ++ We define the symbols here but let them do the same as O_SYNC since ++ this is a superset. */ ++#if defined __USE_POSIX199309 || defined __USE_UNIX98 ++# define O_DSYNC O_SYNC /* Synchronize data. */ ++# define O_RSYNC O_SYNC /* Synchronize read operations. */ ++#endif ++ ++#define F_DUPFD 0 /* dup */ ++#define F_GETFD 1 /* get close_on_exec */ ++#define F_SETFD 2 /* set/clear close_on_exec */ ++#define F_GETFL 3 /* get file->f_flags */ ++#define F_SETFL 4 /* set file->f_flags */ ++ ++#ifndef __USE_FILE_OFFSET64 ++# define F_GETLK 5 ++# define F_SETLK 6 ++# define F_SETLKW 7 ++#else ++# define F_GETLK F_GETLK64 ++# define F_SETLK F_SETLK64 ++# define F_SETLKW F_SETLKW64 ++#endif ++#define F_GETLK64 12 /* using 'struct flock64' */ ++#define F_SETLK64 13 ++#define F_SETLKW64 14 ++ ++#if defined __USE_BSD || defined __USE_XOPEN2K ++# define F_SETOWN 8 /* for sockets. */ ++# define F_GETOWN 9 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETSIG 10 /* for sockets. */ ++# define F_GETSIG 11 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETLEASE 1024 /* Set a lease. */ ++# define F_GETLEASE 1025 /* Enquire what lease is active. */ ++# define F_NOTIFY 1026 /* Request notfications on a directory. */ ++#endif ++ ++/* for F_[GET|SET]FL */ ++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++/* for posix fcntl() and lockf() */ ++#define F_RDLCK 0 ++#define F_WRLCK 1 ++#define F_UNLCK 2 ++ ++/* for old implementation of bsd flock () */ ++#define F_EXLCK 4 /* or 3 */ ++#define F_SHLCK 8 /* or 4 */ ++ ++/* for leases */ ++#define F_INPROGRESS 16 ++ ++#ifdef __USE_BSD ++/* operations for bsd flock(), also used by the kernel implementation */ ++# define LOCK_SH 1 /* shared lock */ ++# define LOCK_EX 2 /* exclusive lock */ ++# define LOCK_NB 4 /* or'd with one of the above to prevent ++ blocking */ ++# define LOCK_UN 8 /* remove lock */ ++#endif ++ ++#ifdef __USE_GNU ++# define LOCK_MAND 32 /* This is a mandatory flock */ ++# define LOCK_READ 64 /* ... Which allows concurrent ++ read operations */ ++# define LOCK_WRITE 128 /* ... Which allows concurrent ++ write operations */ ++# define LOCK_RW 192 /* ... Which allows concurrent ++ read & write ops */ ++#endif ++ ++#ifdef __USE_GNU ++/* Types of directory notifications that may be requested with F_NOTIFY. */ ++# define DN_ACCESS 0x00000001 /* File accessed. */ ++# define DN_MODIFY 0x00000002 /* File modified. */ ++# define DN_CREATE 0x00000004 /* File created. */ ++# define DN_DELETE 0x00000008 /* File removed. */ ++# define DN_RENAME 0x00000010 /* File renamed. */ ++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ ++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ ++#endif ++ ++struct flock { ++ short l_type; ++ short l_whence; ++#ifndef __USE_FILE_OFFSET64 ++ __off_t l_start; ++ __off_t l_len; ++#else ++ __off64_t l_start; ++ __off64_t l_len; ++#endif ++ __pid_t l_pid; ++}; ++ ++#ifdef __USE_LARGEFILE64 ++struct flock64 { ++ short l_type; ++ short l_whence; ++ __off64_t l_start; ++ __off64_t l_len; ++ __pid_t l_pid; ++}; ++#endif ++ ++/* Define some more compatibility macros to be backward compatible with ++ * BSD systems which did not managed to hide these kernel macros. */ ++#ifdef __USE_BSD ++# define FAPPEND O_APPEND ++# define FFSYNC O_FSYNC ++# define FASYNC O_ASYNC ++# define FNONBLOCK O_NONBLOCK ++# define FNDELAY O_NDELAY ++#endif /* Use BSD. */ ++ ++/* Advise to `posix_fadvise'. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ ++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ ++#endif +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-05-05 09:28:32.000000000 +0200 +@@ -0,0 +1,63 @@ ++#ifndef _BITS_STAT_STRUCT_H ++#define _BITS_STAT_STRUCT_H ++ ++/* ++ * This file provides struct stat, taken from kernel 2.6.4 ++ * (include/asm-avr32/stat.h revision 1.1). ++ */ ++ ++struct kernel_stat { ++ unsigned long st_dev; ++ unsigned long st_ino; ++ unsigned short st_mode; ++ unsigned short st_nlink; ++ unsigned short st_uid; ++ unsigned short st_gid; ++ unsigned long st_rdev; ++ unsigned long st_size; ++ unsigned long st_blksize; ++ unsigned long st_blocks; ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++#define STAT_HAVE_NSEC 1 ++ ++struct kernel_stat64 { ++ unsigned long long st_dev; ++ ++ unsigned long long st_ino; ++ unsigned int st_mode; ++ unsigned int st_nlink; ++ ++ unsigned long st_uid; ++ unsigned long st_gid; ++ ++ unsigned long long st_rdev; ++ ++ long long st_size; ++ unsigned long __pad1; ++ unsigned long st_blksize; ++ ++ unsigned long long st_blocks; ++ ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++#endif /* _BITS_STAT_STRUCT_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,56 @@ ++/* Note that we use the exact same include guard #define names ++ * as asm/posix_types.h. This will avoid gratuitous conflicts ++ * with the posix_types.h kernel header, and will ensure that ++ * our private content, and not the kernel header, will win. ++ * -Erik ++ */ ++#ifndef __ASM_AVR32_POSIX_TYPES_H ++#define __ASM_AVR32_POSIX_TYPES_H ++ ++/* ++ * This file is generally used by user-level software, so you need to ++ * be a little careful about namespace pollution etc. Also, we cannot ++ * assume GCC is being used. ++ */ ++ ++typedef unsigned long __kernel_dev_t; ++typedef unsigned long __kernel_ino_t; ++typedef unsigned short __kernel_mode_t; ++typedef unsigned short __kernel_nlink_t; ++typedef long __kernel_off_t; ++typedef int __kernel_pid_t; ++typedef unsigned short __kernel_ipc_pid_t; ++typedef unsigned int __kernel_uid_t; ++typedef unsigned int __kernel_gid_t; ++typedef unsigned long __kernel_size_t; ++typedef int __kernel_ssize_t; ++typedef int __kernel_ptrdiff_t; ++typedef long __kernel_time_t; ++typedef long __kernel_suseconds_t; ++typedef long __kernel_clock_t; ++typedef int __kernel_timer_t; ++typedef int __kernel_clockid_t; ++typedef int __kernel_daddr_t; ++typedef char * __kernel_caddr_t; ++typedef unsigned short __kernel_uid16_t; ++typedef unsigned short __kernel_gid16_t; ++typedef unsigned int __kernel_uid32_t; ++typedef unsigned int __kernel_gid32_t; ++ ++typedef unsigned short __kernel_old_uid_t; ++typedef unsigned short __kernel_old_gid_t; ++typedef unsigned short __kernel_old_dev_t; ++ ++#ifdef __GNUC__ ++typedef long long __kernel_loff_t; ++#endif ++ ++typedef struct { ++#if defined(__USE_ALL) ++ int val[2]; ++#else ++ int __val[2]; ++#endif ++} __kernel_fsid_t; ++ ++#endif /* __ASM_AVR32_POSIX_TYPES_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,69 @@ ++/* Machine-dependent definitions for profiling support. AVR32 version. ++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define mcount_internal __mcount_internal ++ ++#define _MCOUNT_DECL(frompc, selfpc) \ ++static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc) ++ ++/* ++ * This mcount implementation expects to get called after the prologue ++ * has been run. It also expects that r7 contains a valid frame ++ * pointer. ++ * ++ * When profiling, the compiler should generate something like this at ++ * each function entry: ++ * ++ * pushm r0-r7,lr // lr mandatory, others optional ++ * mov r7, sp ++ * // rest of prologue goes here ++ * mcall pc[.LC1 - .] ++ * // rest of function goes here ++ * .LC1: ++ * .long mcount ++ * ++ * or for PIC: ++ * ++ * pushm r0-r7,lr ++ * mov r7, sp ++ * // rest of prologue goes here ++ * lddpc r0, .LC1 ++ * .L1: rsub r0, pc ++ * mcall r0[mcount@GOT] ++ * // rest of function goes here ++ * .LC1: ++ * .long .L1 - _GLOBAL_OFFSET_TABLE_ ++ * ++ * This way, when mcount() is called, r7 points to the calling ++ * function's return address. It is guaranteed that calling mcount ++ * will clobber no registers except LR, which is unavoidable. ++ */ ++#define MCOUNT asm( \ ++ " .align 4\n" \ ++ " .global _mcount\n" \ ++ " .type _mcount,@function\n" \ ++ "_mcount:\n" \ ++ " pushm r8-r12,lr\n" \ ++ " mov r11, lr\n" \ ++ " ld.w r12, r7[0]\n" \ ++ " rcall __mcount_internal\n" \ ++ " popm r8-r12,pc\n" \ ++ " .size _mcount, . - _mcount\n" \ ++ " .weak mcount\n" \ ++ " mcount = _mcount"); +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* Definitions for POSIX memory map interface. Linux/AVR32 version. ++ Copyright (C) 1997, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_MMAN_H ++# error "Never include this file directly. Use instead" ++#endif ++ ++/* The following definitions basically come from the kernel headers. ++ But the kernel header is not namespace clean. */ ++ ++ ++/* Protections are chosen from these bits, OR'd together. The ++ implementation does not necessarily support PROT_EXEC or PROT_WRITE ++ without PROT_READ. The only guarantees are that no writing will be ++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ ++ ++#define PROT_READ 0x1 /* Page can be read. */ ++#define PROT_WRITE 0x2 /* Page can be written. */ ++#define PROT_EXEC 0x4 /* Page can be executed. */ ++#define PROT_NONE 0x0 /* Page can not be accessed. */ ++ ++/* Sharing types (must choose one and only one of these). */ ++#define MAP_SHARED 0x01 /* Share changes. */ ++#define MAP_PRIVATE 0x02 /* Changes are private. */ ++#ifdef __USE_MISC ++# define MAP_TYPE 0x0f /* Mask for type of mapping. */ ++#endif ++ ++/* Other flags. */ ++#define MAP_FIXED 0x10 /* Interpret addr exactly. */ ++#ifdef __USE_MISC ++# define MAP_FILE 0 ++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ ++# define MAP_ANON MAP_ANONYMOUS ++#endif ++ ++/* These are Linux-specific. */ ++#ifdef __USE_MISC ++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ ++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ ++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ ++# define MAP_LOCKED 0x2000 /* Lock the mapping. */ ++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ ++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ ++# define MAP_NONBLOCK 0x10000 /* do not block on IO */ ++#endif ++ ++/* Flags to `msync'. */ ++#define MS_ASYNC 1 /* Sync memory asynchronously. */ ++#define MS_SYNC 4 /* Synchronous memory sync. */ ++#define MS_INVALIDATE 2 /* Invalidate the caches. */ ++ ++/* Flags for `mlockall'. */ ++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ ++#define MCL_FUTURE 2 /* Lock all additions to address ++ space. */ ++ ++/* Flags for `mremap'. */ ++#ifdef __USE_GNU ++# define MREMAP_MAYMOVE 1 ++#endif ++ ++/* Advise to `madvise'. */ ++#ifdef __USE_BSD ++# define MADV_NORMAL 0 /* No further special treatment. */ ++# define MADV_RANDOM 1 /* Expect random page references. */ ++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define MADV_WILLNEED 3 /* Will need these pages. */ ++# define MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif ++ ++/* The POSIX people had to invent similar names for the same things. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Low-level statistical profiling support function. Linux/AVR32 version. ++ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include ++ ++void ++profil_counter(int signo, siginfo_t *si, struct sigcontext *sc) ++{ ++ profil_count((void *)sc->pc); ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,21 @@ ++/* ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++#ifndef _SETJMP_H ++# error "Never include directly; use instead." ++#endif ++ ++#ifndef _ASM ++/* ++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are ++ * not saved. ++ */ ++typedef int __jmp_buf[11]; ++#endif ++ ++#define __JMP_BUF_SP 4 ++ ++/* Test if longjmp to JMPBUF would unwind the frame containing a local ++ variable at ADDRESS. */ ++#define _JMPBUF_UNWINDS(jmpbuf, address) \ ++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,143 @@ ++#ifndef _SYSCALL_H ++# error "Never use directly; include instead." ++#endif ++ ++/* ++ * This includes the `__NR_' syscall numbers taken from the ++ * Linux kernel header files. It also defines the traditional ++ * `SYS_' macros for older programs. ++ */ ++#include ++ ++#ifndef __set_errno ++# define __set_errno(val) (*__errno_location()) = (val) ++#endif ++#ifndef SYS_ify ++# define SYS_ify(syscall_name) (__NR_##syscall_name) ++#endif ++ ++#ifndef __ASSEMBLER__ ++ ++#undef _syscall0 ++#define _syscall0(type,name) \ ++ type name(void) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 0)); \ ++ } ++ ++#undef _syscall1 ++#define _syscall1(type,name,type1,arg1) \ ++ type name(type1 arg1) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ ++ } ++ ++#undef _syscall2 ++#define _syscall2(type,name,type1,arg1,type2,arg2) \ ++ type name(type1 arg1, type2 arg2) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ ++ } ++ ++#undef _syscall3 ++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ ++ type name(type1 arg1, type2 arg2, type3 arg3) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 3, arg1, \ ++ arg2, arg3)); \ ++ } ++ ++#undef _syscall4 ++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ ++ arg3, arg4)); \ ++ } ++ ++#undef _syscall5 ++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ ++ arg3, arg4, arg5)); \ ++ } ++ ++#undef _syscall6 ++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5,type6,arg6) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5, type6 arg6) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ ++ arg4, arg5, arg6)); \ ++ } ++ ++#undef unlikely ++#define unlikely(x) __builtin_expect((x), 0) ++ ++#undef INLINE_SYSCALL ++#define INLINE_SYSCALL(name, nr, args...) \ ++ ({ \ ++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ ++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ ++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ ++ _sys_result = (unsigned int) -1; \ ++ } \ ++ (int) _sys_result; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) do { } while(0) ++ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++ ({ \ ++ register int _a1 asm ("r12"); \ ++ register int _scno asm("r8") = SYS_ify(name); \ ++ LOAD_ARGS_##nr (args); \ ++ asm volatile ("scall /* syscall " #name " */" \ ++ : "=r" (_a1) \ ++ : "r"(_scno) ASM_ARGS_##nr \ ++ : "lr", "cc", "memory"); \ ++ _a1; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_ERROR_P ++#define INTERNAL_SYSCALL_ERROR_P(val, err) \ ++ ((unsigned int)(val) >= 0xfffff001U) ++ ++#undef INTERNAL_SYSCALL_ERRNO ++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) ++ ++#define LOAD_ARGS_0() do { } while(0) ++#define ASM_ARGS_0 ++#define LOAD_ARGS_1(a1) \ ++ _a1 = (int) (a1); \ ++ LOAD_ARGS_0() ++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) ++#define LOAD_ARGS_2(a1, a2) \ ++ register int _a2 asm("r11") = (int)(a2); \ ++ LOAD_ARGS_1(a1) ++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) ++#define LOAD_ARGS_3(a1, a2, a3) \ ++ register int _a3 asm("r10") = (int)(a3); \ ++ LOAD_ARGS_2(a1, a2) ++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) ++#define LOAD_ARGS_4(a1, a2, a3, a4) \ ++ register int _a4 asm("r9") = (int)(a4); \ ++ LOAD_ARGS_3(a1, a2, a3) ++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) ++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ ++ register int _a5 asm("r5") = (int)(a5); \ ++ LOAD_ARGS_4(a1, a2, a3, a4) ++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) ++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ ++ register int _a6 asm("r3") = (int)(a6); \ ++ LOAD_ARGS_5(a1, a2, a3, a4, a5) ++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) ++ ++#endif /* __ASSEMBLER__ */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1 @@ ++#define __WORDSIZE 32 +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++ ++void *__curbrk = 0; ++ ++int brk (void *addr) ++{ ++ void *newbrk; ++ ++ newbrk = INLINE_SYSCALL(brk, 1, addr); ++ ++ __curbrk = newbrk; ++ ++ if (newbrk < addr) { ++ __set_errno (ENOMEM); ++ return -1; ++ } ++ ++ return 0; ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-05-05 09:26:42.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 0) */ ++ .global _setjmp ++ .type _setjmp,"function" ++ .align 1 ++_setjmp: ++ mov r11, 0 ++ bral __sigsetjmp_internal ++ .size _setjmp, . - _setjmp +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-05-05 09:26:42.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 1) */ ++ .global setjmp ++ .type setjmp,"function" ++ .align 1 ++setjmp: ++ mov r11, 1 ++ bral __sigsetjmp_internal ++ .size setjmp, . - setjmp +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,37 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++ ++/* ++ * I don't know if we can be absolutely certain that the fn and arg ++ * parameters are preserved when returning as the child. If the ++ * compiler stores them in registers (r0-r7), they should be. ++ */ ++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) ++{ ++ register int (*_fn)(void *arg) = fn; ++ register void *_arg = arg; ++ int err; ++ ++ /* Sanity check the arguments */ ++ err = -EINVAL; ++ if (!fn) ++ goto syscall_error; ++ if (!child_stack) ++ goto syscall_error; ++ ++ err = INLINE_SYSCALL(clone, 2, flags, child_stack); ++ if (err < 0) ++ goto syscall_error; ++ else if (err != 0) ++ return err; ++ ++ _exit(_fn(_arg)); ++ ++syscall_error: ++ __set_errno (-err); ++ return -1; ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S 2006-05-05 09:28:23.000000000 +0200 +@@ -0,0 +1,93 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * When we enter _start, the stack looks like this: ++ * argc argument counter ++ * argv[0] pointer to program name ++ * argv[1..argc-1] pointers to program args ++ * NULL ++ * env[0..N] pointers to environment variables ++ * NULL ++ * ++ * r12 contains a function pointer to be registered with `atexit'. ++ * This is how the dynamic linker arranges to have DT_FINI functions ++ * called for shared libraries that have been loaded before this ++ * code runs. ++ * ++ * We're going to call the following function: ++ * __uClibc_main(int (*main)(int, char **, char **), int argc, ++ * char **argv, void (*app_init)(void), void (*app_fini)(void), ++ * void (*rtld_fini)(void), void *stack_end) ++ * ++ * So we need to set up things as follows: ++ * r12 = address of main ++ * r11 = argc ++ * r10 = &argv[0] ++ * r9 = address of _init ++ * r8 = address of _fini ++ * sp[0] = whatever we got passed in r12 ++ */ ++ ++#include ++ ++ .text ++ .global _start ++ .type _start, @function ++_start: ++ /* Clear the frame pointer and link register since this is the outermost frame. */ ++ mov r7, 0 ++ mov lr, 0 ++ ++ ld.w r11, sp++ /* argc */ ++ mov r10, sp /* &argv[0] */ ++ ++ st.w --sp, r10 /* stack_end */ ++ st.w --sp, r12 /* rtld_fini */ ++ ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++.L_RGOT: ++ rsub r6, pc ++ lda.w r9, _init ++ lda.w r8, _fini ++ lda.w r12, main ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ call __uClibc_main ++ ++ .align 2 ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++ lddpc r9, __init_addr /* app_init */ ++ lddpc r8, __fini_addr /* app_fini */ ++ lddpc r12, __main_addr /* main */ ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ lddpc pc, ___uClibc_main_addr ++ ++ .align 2 ++__init_addr: ++ .long _init ++__fini_addr: ++ .long _fini ++__main_addr: ++ .long main ++___uClibc_main_addr: ++ .long __uClibc_main ++#endif ++ .size _start, . - _start ++ ++ /* ++ * The LSB says we need this. ++ */ ++ .section ".note.ABI-tag", "a" ++ .align 4 ++ .long 2f - 1f /* namesz */ ++ .long 4f - 3f /* descsz */ ++ .long 1 /* type */ ++1: .asciz "GNU" /* name */ ++2: .align 4 ++3: .long 0 /* Linux executable */ ++ .long 2,6,0 /* Earliest compatible kernel */ ++4: .align 4 +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,17 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++_init: ++ /* Use a four-byte instruction to avoid NOPs */ ++ stm --sp, r0-r7,lr ++ .align 2 ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++_fini: ++ stm --sp, r0-r7,lr ++ .align 2 +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,14 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++ ldm sp++, r0-r7,pc ++ .size _init, . - _init ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++ ldm sp++, r0-r7,pc ++ .size _fini, . - _fini +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S 2006-05-05 09:28:28.000000000 +0200 +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#define _SETJMP_H ++#define _ASM ++#include ++ ++ .text ++ ++ .global __sigsetjmp ++ .type __sigsetjmp,"function" ++ ++ /* Create a global, hidden symbol for use by setjmp() and _setjmp(). ++ If it's not hidden, the linker will complain about a relative ++ jump to a dynamic symbol when building a shared library. ++ ++ Also, if a user overrides the __sigsetjmp function, he might not ++ expect the setjmp() and _setjmp() function to effectively be ++ overridden as well. */ ++ .global __sigsetjmp_internal ++ .hidden __sigsetjmp_internal ++ .type __sigsetjmp_internal,"function" ++ .align 1 ++__sigsetjmp: ++__sigsetjmp_internal: ++ mustr r8 ++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ ++ /* Make a tail call to __sigjmp_save; it takes the same args. */ ++#ifdef __PIC__ ++ mov r9, r6 ++ lddpc r6, .LG ++.L1: rsub r6, pc ++ ld.w r8, r6[__sigjmp_save@got] ++ mov r6, r9 ++ mov pc, r8 ++ ++ .align 2 ++.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_ ++#else ++ rjmp __sigjmp_save ++#endif ++ .size __sigsetjmp, . - __sigsetjmp +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++#define SA_RESTORER 0x04000000 ++extern void __default_rt_sa_restorer(void); ++ ++/* ++ * If act is not NULL, change the action for sig to *act. ++ * If oact is not NULL, put the old action for sig in *oact. ++ */ ++int __libc_sigaction(int signum, const struct sigaction *act, ++ struct sigaction *oldact) ++{ ++ struct kernel_sigaction kact, koact; ++ int result; ++ ++ if (act) { ++ kact.k_sa_handler = act->sa_handler; ++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); ++ kact.sa_flags = act->sa_flags; ++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) ++ kact.sa_restorer = act->sa_restorer; ++ else ++ kact.sa_restorer = __default_rt_sa_restorer; ++ kact.sa_flags |= SA_RESTORER; ++ } ++ ++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, ++ oldact ? __ptrvalue(&koact) : NULL, ++ _NSIG / 8); ++ ++ if (oldact && result >= 0) { ++ oldact->sa_handler = koact.k_sa_handler; ++ memcpy(&oldact->sa_mask, &koact.sa_mask, ++ sizeof(oldact->sa_mask)); ++ oldact->sa_flags = koact.sa_flags; ++ oldact->sa_restorer = koact.sa_restorer; ++ } ++ ++ return result; ++} ++ ++weak_alias(__libc_sigaction, sigaction) +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++ ++ .global __default_rt_sa_restorer ++ .type __default_rt_sa_restorer,"function" ++ .align 1 ++__default_rt_sa_restorer: ++ mov r8, __NR_rt_sigreturn ++ scall +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_ELF_H ++#define _SYS_ELF_H 1 ++ ++#warning "This header is obsolete; use instead." ++ ++#include ++ ++#endif /* sys/elf.h */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,48 @@ ++/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_IO_H ++ ++#define _SYS_IO_H 1 ++#include ++ ++__BEGIN_DECLS ++ ++/* If TURN_ON is TRUE, request for permission to do direct i/o on the ++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O ++ permission off for that range. This call requires root privileges. */ ++extern int ioperm (unsigned long int __from, unsigned long int __num, ++ int __turn_on) __THROW; ++ ++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, ++ permission to access any I/O port is granted. This call requires ++ root privileges. */ ++extern int iopl (int __level) __THROW; ++ ++/* The functions that actually perform reads and writes. */ ++extern unsigned char inb (unsigned long int port) __THROW; ++extern unsigned short int inw (unsigned long int port) __THROW; ++extern unsigned long int inl (unsigned long int port) __THROW; ++ ++extern void outb (unsigned char value, unsigned long int port) __THROW; ++extern void outw (unsigned short value, unsigned long int port) __THROW; ++extern void outl (unsigned long value, unsigned long int port) __THROW; ++ ++__END_DECLS ++ ++#endif /* _SYS_IO_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,123 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_PROCFS_H ++#define _SYS_PROCFS_H 1 ++ ++/* This is somewhat modelled after the file of the same name on SVR4 ++ systems. It provides a definition of the core file format for ELF ++ used on Linux. It doesn't have anything to do with the /proc file ++ system, even though Linux has one. ++ ++ Anyway, the whole purpose of this file is for GDB and GDB only. ++ Don't read too much into it. Don't use it for anything other than ++ GDB unless you know what you are doing. */ ++ ++#include ++#include ++#include ++#include ++ ++__BEGIN_DECLS ++ ++/* Type for a general-purpose register. */ ++typedef unsigned long elf_greg_t; ++ ++/* And the whole bunch of them. We could have used `struct ++ user_regs' directly in the typedef, but tradition says that ++ the register set is an array, which does have some peculiar ++ semantics, so leave it that way. */ ++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++/* Register set for the floating-point registers. */ ++typedef struct user_fpregs elf_fpregset_t; ++ ++/* Signal info. */ ++struct elf_siginfo ++ { ++ int si_signo; /* Signal number. */ ++ int si_code; /* Extra code. */ ++ int si_errno; /* Errno. */ ++ }; ++ ++/* Definitions to generate Intel SVR4-like core files. These mostly ++ have the same names as the SVR4 types with "elf_" tacked on the ++ front to prevent clashes with Linux definitions, and the typedef ++ forms have been avoided. This is mostly like the SVR4 structure, ++ but more Linuxy, with things that Linux does not support and which ++ GDB doesn't really use excluded. */ ++ ++struct elf_prstatus ++ { ++ struct elf_siginfo pr_info; /* Info associated with signal. */ ++ short int pr_cursig; /* Current signal. */ ++ unsigned long int pr_sigpend; /* Set of pending signals. */ ++ unsigned long int pr_sighold; /* Set of held signals. */ ++ __pid_t pr_pid; ++ __pid_t pr_ppid; ++ __pid_t pr_pgrp; ++ __pid_t pr_sid; ++ struct timeval pr_utime; /* User time. */ ++ struct timeval pr_stime; /* System time. */ ++ struct timeval pr_cutime; /* Cumulative user time. */ ++ struct timeval pr_cstime; /* Cumulative system time. */ ++ elf_gregset_t pr_reg; /* GP registers. */ ++ int pr_fpvalid; /* True if math copro being used. */ ++ }; ++ ++ ++#define ELF_PRARGSZ (80) /* Number of chars for args. */ ++ ++struct elf_prpsinfo ++ { ++ char pr_state; /* Numeric process state. */ ++ char pr_sname; /* Char for pr_state. */ ++ char pr_zomb; /* Zombie. */ ++ char pr_nice; /* Nice val. */ ++ unsigned long int pr_flag; /* Flags. */ ++ unsigned short int pr_uid; ++ unsigned short int pr_gid; ++ int pr_pid, pr_ppid, pr_pgrp, pr_sid; ++ /* Lots missing */ ++ char pr_fname[16]; /* Filename of executable. */ ++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ ++ }; ++ ++/* The rest of this file provides the types for emulation of the ++ Solaris interfaces that should be implemented by ++ users of libthread_db. */ ++ ++/* Addresses. */ ++typedef void *psaddr_t; ++ ++/* Register sets. Linux has different names. */ ++typedef elf_gregset_t prgregset_t; ++typedef elf_fpregset_t prfpregset_t; ++ ++/* We don't have any differences between processes and threads, ++ therefore have only one PID type. */ ++typedef __pid_t lwpid_t; ++ ++/* Process status and info. In the end we do provide typedefs for them. */ ++typedef struct elf_prstatus prstatus_t; ++typedef struct elf_prpsinfo prpsinfo_t; ++ ++__END_DECLS ++ ++#endif /* sys/procfs.h */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,94 @@ ++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Linux/AVR32 ABI compliant context switching support. */ ++ ++#ifndef _SYS_UCONTEXT_H ++#define _SYS_UCONTEXT_H 1 ++ ++#include ++#include ++#include ++#include ++ ++typedef int greg_t; ++ ++/* Number of general registers. */ ++#define NGREG 16 ++ ++/* Container for all general registers. */ ++typedef elf_gregset_t gregset_t; ++ ++/* Number of each register is the `gregset_t' array. */ ++enum ++{ ++ R0 = 0, ++#define R0 R0 ++ R1 = 1, ++#define R1 R1 ++ R2 = 2, ++#define R2 R2 ++ R3 = 3, ++#define R3 R3 ++ R4 = 4, ++#define R4 R4 ++ R5 = 5, ++#define R5 R5 ++ R6 = 6, ++#define R6 R6 ++ R7 = 7, ++#define R7 R7 ++ R8 = 8, ++#define R8 R8 ++ R9 = 9, ++#define R9 R9 ++ R10 = 10, ++#define R10 R10 ++ R11 = 11, ++#define R11 R11 ++ R12 = 12, ++#define R12 R12 ++ R13 = 13, ++#define R13 R13 ++ R14 = 14, ++#define R14 R14 ++ R15 = 15 ++#define R15 R15 ++}; ++ ++/* Structure to describe FPU registers. */ ++typedef elf_fpregset_t fpregset_t; ++ ++/* Context to describe whole processor state. */ ++typedef struct ++ { ++ gregset_t gregs; ++ fpregset_t fpregs; ++ } mcontext_t; ++ ++/* Userlevel context. */ ++typedef struct ucontext ++{ ++ unsigned long uc_flags; ++ struct ucontext *uc_link; ++ stack_t uc_stack; ++ struct sigcontext uc_mcontext; ++ sigset_t uc_sigmask; /* mask last for extensibility */ ++} ucontext_t; ++ ++#endif /* sys/ucontext.h */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,46 @@ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H ++ ++struct user_fpregs ++{ ++ ++}; ++ ++struct user_regs ++{ ++ unsigned long sr; ++ unsigned long pc; ++ unsigned long lr; ++ unsigned long sp; ++ unsigned long r12; ++ unsigned long r11; ++ unsigned long r10; ++ unsigned long r9; ++ unsigned long r8; ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++ unsigned long r12_orig; ++}; ++ ++struct user ++{ ++ struct user_regs regs; /* general registers */ ++ size_t u_tsize; /* text size (pages) */ ++ size_t u_dsize; /* data size (pages) */ ++ size_t u_ssize; /* stack size (pages) */ ++ unsigned long start_code; /* text starting address */ ++ unsigned long start_data; /* data starting address */ ++ unsigned long start_stack; /* stack starting address */ ++ long int signal; /* signal causing core dump */ ++ struct user_regs * u_ar0; /* help gdb find registers */ ++ unsigned long magic; /* identifies a core file */ ++ char u_comm[32]; /* user command name */ ++}; ++ ++#endif /* _SYS_USER_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,81 @@ ++/* ++ * syscall for AVR32/uClibc ++ * ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU Library 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 Library General Public License ++ * for more details. ++ * ++ * You should have received a copy of the GNU Library General Public License ++ * along with this program; if not, write to the Free Software Foundation, ++ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++#include ++ ++ .text ++ ++ /* ++ * long int syscall(long int sysno, ...) ++ */ ++ .global syscall ++ .type syscall, @function ++ .align 2 ++syscall: ++ stm --sp, r3,r5,lr ++ sub lr, sp, -12 ++ mov r8, r12 ++ ldm lr, r3,r5,r9-r12 ++ scall ++ cp.w r12, -4095 ++ brlo .Ldone ++ ++#ifdef __PIC__ ++ lddpc r5, .Lgot ++.Lgotcalc: ++ rsub r5, pc ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall r5[__errno_location@got] ++ st.w r12[0], r3 ++# else ++ ld.w r3, r5[errno@got] ++ st.w r3[0], r12 ++# endif ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall .Lerrno_location ++ st.w r12[0], r3 ++# else ++ lddpc r3, .Lerrno ++ st.w r3[0], r12 ++# endif ++#endif ++ mov r12, -1 ++ ++.Ldone: ++ ldm sp++, r3,r5,pc ++ ++ .align 2 ++#ifdef __PIC__ ++.Lgot: ++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++.Lerrno_location: ++ .long __errno_location ++# else ++.Lerrno: ++ .long errno ++# endif ++#endif ++ ++ ++ .size syscall, . - syscall +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,55 @@ ++ /* ++ * vfork for uClibc ++ * ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++ /* ++ * Clone the process without copying the address space. The ++ * calling process is suspended until the child either exits ++ * or calls execve. ++ * ++ * This all means that we cannot rely on the stack to store ++ * away registers, since they will be overwritten by the child ++ * as soon as it makes another function call (e.g. execve()). ++ * Fortunately, the Linux kernel preserves LR across system calls. ++ */ ++#include ++#include ++ ++ .global __vfork ++ .type __vfork,@function ++ .align 1 ++__vfork: ++ mov r8, __NR_vfork ++ scall ++ cp.w r12, -4096 ++ retls r12 ++ ++ /* vfork failed, so we may use the stack freely */ ++ pushm r4-r7,lr ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++ rsub r4, r12, 0 ++.L_RGOT: ++ rsub r6, pc ++ mcall r6[__errno_location@got] ++#else ++ rsub r4, r12, 0 ++ mcall .L__errno_location ++#endif ++ st.w r12[0], r4 ++ popm r4-r7,pc,r12=-1 ++ ++ .align 2 ++#ifdef __PIC__ ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++.L__errno_location: ++ .long __errno_location ++#endif ++ .size __vfork, . - __vfork ++ ++ .weak vfork ++ vfork = __vfork +Index: uClibc-0.9.28/Rules.mak +=================================================================== +--- uClibc-0.9.28.orig/Rules.mak 2006-05-05 09:26:01.000000000 +0200 ++++ uClibc-0.9.28/Rules.mak 2006-05-05 09:27:17.000000000 +0200 +@@ -231,6 +231,10 @@ ifeq ($(strip $(TARGET_ARCH)),frv) + UCLIBC_LDSO=ld.so.1 + endif + ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++endif ++ + # Keep the check_gcc from being needlessly executed + ifndef PIEFLAG + ifneq ($(UCLIBC_BUILD_PIE),y) diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch new file mode 100644 index 0000000000..991e3442c7 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch @@ -0,0 +1,40 @@ +From nobody Mon Sep 17 00:00:00 2001 +Subject: [PATCH] Make linkrelax configurable +From: HĂĄvard Skinnemoen +Date: 1133951618 +0100 + +Add a linkrelax option to the configure system which will give +appropriate options to the compiler, assembler and linker to enable +link-time optimizations. + +--- + + Rules.mak | 2 ++ + extra/Configs/Config.avr32 | 4 ++++ + 2 files changed, 6 insertions(+) + +Index: uClibc-0.9.28/Rules.mak +=================================================================== +--- uClibc-0.9.28.orig/Rules.mak 2006-02-08 17:58:53.000000000 +0100 ++++ uClibc-0.9.28/Rules.mak 2006-02-08 17:59:07.000000000 +0100 +@@ -233,6 +233,8 @@ endif + + ifeq ($(strip $(TARGET_ARCH)),avr32) + CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++ CPU_CFLAGS-$(LINKRELAX) += -masm-addr-pseudos -Wa,--pic,--linkrelax ++ CPU_LDFLAGS-$(LINKRELAX) += --relax + endif + + # Keep the check_gcc from being needlessly executed +Index: uClibc-0.9.28/extra/Configs/Config.avr32 +=================================================================== +--- uClibc-0.9.28.orig/extra/Configs/Config.avr32 2006-02-08 17:58:53.000000000 +0100 ++++ uClibc-0.9.28/extra/Configs/Config.avr32 2006-02-08 17:59:07.000000000 +0100 +@@ -36,3 +36,7 @@ config CONFIG_AP7000 + bool "AP7000" + + endchoice ++ ++config LINKRELAX ++ bool "Enable linker optimizations" ++ default n diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch new file mode 100644 index 0000000000..8518ccf664 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch @@ -0,0 +1,1139 @@ +Subject: [PATCH] AVR32-optimized string operations + +Add hand-optimized AVR32-specific string operations. Some of them +need a bit more testing, though. + +--- + + libc/string/avr32/Makefile | 40 +++++++++++ + libc/string/avr32/bcopy.S | 15 ++++ + libc/string/avr32/bzero.S | 12 +++ + libc/string/avr32/memchr.S | 62 +++++++++++++++++ + libc/string/avr32/memcmp.S | 50 +++++++++++++ + libc/string/avr32/memcpy.S | 110 ++++++++++++++++++++++++++++++ + libc/string/avr32/memmove.S | 114 +++++++++++++++++++++++++++++++ + libc/string/avr32/memset.S | 60 ++++++++++++++++ + libc/string/avr32/strcat.S | 95 ++++++++++++++++++++++++++ + libc/string/avr32/strcmp.S | 80 ++++++++++++++++++++++ + libc/string/avr32/strcpy.S | 63 +++++++++++++++++ + libc/string/avr32/stringtest.c | 144 ++++++++++++++++++++++++++++++++++++++++ + libc/string/avr32/strlen.S | 52 ++++++++++++++ + libc/string/avr32/strncpy.S | 77 +++++++++++++++++++++ + libc/string/avr32/test_memcpy.c | 66 ++++++++++++++++++ + 15 files changed, 1040 insertions(+) + +Index: uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,15 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bcopy ++ .type bcopy, @function ++ .align 1 ++bcopy: ++ /* Swap the first two arguments */ ++ eor r11, r12 ++ eor r12, r11 ++ eor r11, r12 ++ rjmp __memmove ++ .size bcopy, . - bcopy +Index: uClibc-0.9.28-avr32/libc/string/avr32/bzero.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/bzero.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bzero ++ .type bzero, @function ++ .align 1 ++bzero: ++ mov r10, r11 ++ mov r11, 0 ++ rjmp __memset +Index: uClibc-0.9.28-avr32/libc/string/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,40 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../ ++include $(TOPDIR)Rules.mak ++ ++SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S ++SSRC += memset.S strcmp.S strlen.S ++# memchr.S, strcat.S, strcpy.S, strncpy.S is broken ++SOBJS := $(patsubst %.S,%.o, $(SSRC)) ++OBJS := $(SOBJS) ++ ++OBJ_LIST:= ../../obj.string.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) ++ echo $(addprefix string/$(TARGET_ARCH)/, $(OBJS)) > $@ ++ ++$(SOBJS): %.o: %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $@ ++ ++clean: ++ $(RM) *.[oa] *~ core +Index: uClibc-0.9.28-avr32/libc/string/avr32/memchr.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memchr.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++#define chr r11 ++#define len r10 ++ ++ .text ++ .global memchr ++ .type memchr, @function ++memchr: ++ or chr, chr, chr << 8 ++ or chr, chr, chr << 16 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: sub len, 4 ++ brlt 2f ++ ld.w r8, str++ ++ psub.b r9, r8, r11 ++ tnbz r9 ++ brne 1b ++ ++ sub str, 4 ++ bfextu r9, r8, 24, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ bfextu r9, r8, 16, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ bfextu r9, r8, 8, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ retal str ++ ++2: sub len, -4 ++ reteq 0 ++ ++3: ld.ub r8, str++ ++ cp.w r8, 0 ++ reteq str ++ sub len, 1 ++ brne 3b ++ ++ retal 0 ++ ++.Lunaligned_str: ++1: sub len, 1 ++ retlt 0 ++ ld.ub r8, str++ ++ cp.b r8, r11 ++ reteq str ++ sub r9, 1 ++ brge 1b ++ ++ rjmp .Laligned_search +Index: uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S 2006-10-20 10:42:09.000000000 +0200 +@@ -0,0 +1,50 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global memcmp ++ .type memcmp, @function ++ .align 1 ++memcmp: ++ sub len, 4 ++ brlt .Lless_than_4 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne .Lfound_word ++ sub len, 4 ++ brge 1b ++ ++.Lless_than_4: ++ sub len, -4 ++ reteq 0 ++ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ sub len, 1 ++ brgt 1b ++ ++ retal 0 ++ ++.Lfound_word: ++ psub.b r9, r8, r9 ++ bfextu r8, r9, 24, 8 ++ retne r8 ++ bfextu r8, r9, 16, 8 ++ retne r8 ++ bfextu r8, r9, 8, 8 ++ retne r8 ++ retal r9 ++ ++ .size memcmp, . - memcmp ++ ++ .weak bcmp ++ bcmp = memcmp +Index: uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++/* Don't use r12 as dst since we must return it unmodified */ ++#define dst r9 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memcpy ++ .type memcpy, @function ++ ++ .global __memcpy ++ .hidden __memcpy ++ .type __memcpy, @function ++memcpy: ++__memcpy: ++ pref src[0] ++ mov dst, r12 ++ ++ /* If we have less than 32 bytes, don't do anything fancy */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, src++ ++ st.b dst++, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, dst ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ ldm src, r0-r7 ++ sub src, -32 ++ stm dst, r0-r7 ++ sub dst, -32 ++ sub len, 32 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ ldm src, r0-r3 ++ sub src, -16 ++ sub len, 16 ++ stm dst, r0-r3 ++ sub dst, -16 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ neg len ++ add pc, pc, len << 2 ++ .rept 15 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ rsub r8, r8, 32 ++ sub len, r8 ++1: ld.ub r0, src++ ++ st.b dst++, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[0] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, src++ ++ st.w dst++, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ .size memcpy, . - memcpy +Index: uClibc-0.9.28-avr32/libc/string/avr32/memmove.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memmove.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,114 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r12 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memmove ++ .type memmove, @function ++ ++ .global __memmove ++ .hidden __memmove ++ .type __memmove, @function ++memmove: ++__memmove: ++ cp.w src, dst ++ brge __memcpy ++ ++ add dst, len ++ add src, len ++ pref src[-1] ++ ++ /* ++ * The rest is basically the same as in memcpy.S except that ++ * the direction is reversed. ++ */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, --src ++ st.b --dst, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, r12 ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ sub src, 32 ++ ldm src, r0-r7 ++ sub dst, 32 ++ sub len, 32 ++ stm dst, r0-r7 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ sub src, 16 ++ ldm src, r0-r3 ++ sub dst, 16 ++ sub len, 16 ++ stm dst, r0-r3 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ sub len, -16 ++ breq 2f ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub len, 1 ++ brne 1b ++ ++2: popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ sub len, r8 ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[-4] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, --src ++ st.w --dst, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, --src ++ st.b --dst, r0 ++ .endr ++ ++ popm r0-r7, pc +Index: uClibc-0.9.28-avr32/libc/string/avr32/memset.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memset.S 2006-10-20 10:42:15.000000000 +0200 +@@ -0,0 +1,60 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s r12 ++#define c r11 ++#define n r10 ++ ++ .text ++ .global memset ++ .type memset, @function ++ ++ .global __memset ++ .hidden __memset ++ .type __memset, @function ++ ++ .align 1 ++memset: ++__memset: ++ cp.w n, 32 ++ mov r9, s ++ brge .Llarge_memset ++ ++ sub n, 1 ++ retlt s ++1: st.b s++, c ++ sub n, 1 ++ brge 1b ++ ++ retal r9 ++ ++.Llarge_memset: ++ mov r8, r11 ++ mov r11, 3 ++ bfins r8, r8, 8, 8 ++ bfins r8, r8, 16, 16 ++ tst s, r11 ++ breq 2f ++ ++1: st.b s++, r8 ++ sub n, 1 ++ tst s, r11 ++ brne 1b ++ ++2: mov r11, r9 ++ mov r9, r8 ++ sub n, 8 ++ ++3: st.d s++, r8 ++ sub n, 8 ++ brge 3b ++ ++ /* If we are done, n == -8 and we'll skip all st.b insns below */ ++ neg n ++ lsl n, 1 ++ add pc, n ++ .rept 7 ++ st.b s++, r8 ++ .endr ++ retal r11 +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcat.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcat.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define s1 r9 ++#define s2 r11 ++ ++ .text ++ .global strcat ++ .type strcat, @function ++ .align 1 ++strcat: ++ mov s1, r12 ++ ++ /* Make sure s1 is word-aligned */ ++ mov r10, s1 ++ andl r10, 3, COH ++ breq 2f ++ ++ add pc, pc, r10 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 2f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 3f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 4f ++ ++ /* Find the end of the first string */ ++5: ld.w r8, s1++ ++ tnbz r8 ++ brne 5b ++ ++ sub s1, 4 ++ ++ bfextu r10, r8, 24, 8 ++ cp.w r10, 0 ++ breq 1f ++ sub s1, -1 ++ bfextu r10, r8, 16, 8 ++ cp.w r10, 0 ++ breq 2f ++ sub s1, -1 ++ bfextu r10, r8, 8, 8 ++ cp.w r10, 0 ++ breq 3f ++ sub s1, -1 ++ rjmp 4f ++ ++ /* Now, append s2 */ ++1: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++2: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++3: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++4: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++ ++ /* Copy one word at a time */ ++ ld.w r8, s2++ ++ tnbz r8 ++ breq 2f ++1: st.w r8, s2++ ++ ld.w r8, s2++ ++ tnbz r8 ++ brne 1b ++ ++ /* Copy the remaining bytes */ ++ bfextu r10, r8, 24, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 16, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 8, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ st.b s1++, r8 ++ retal r12 ++ .size strcat, . - strcat +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global strcmp ++ .type strcmp, @function ++ .align 1 ++strcmp: ++ mov r8, 3 ++ tst s1, r8 ++ brne .Lunaligned_s1 ++ tst s2, r8 ++ brne .Lunaligned_s2 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne 2f ++ tnbz r8 ++ brne 1b ++ retal 0 ++ ++2: bfextu r12, r8, 24, 8 ++ bfextu r11, r9, 24, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 16, 8 ++ bfextu r11, r9, 16, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 8, 8 ++ bfextu r11, r9, 8, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 0, 8 ++ bfextu r11, r9, 0, 8 ++ sub r12, r11 ++ retal r12 ++ ++.Lunaligned_s1: ++3: tst s1, r8 ++ breq 4f ++ ld.ub r10, s1++ ++ ld.ub r9, s2++ ++ sub r10, r9 ++ retne r10 ++ cp.w r9, 0 ++ brne 3b ++ retal r10 ++ ++4: tst s2, r8 ++ breq 1b ++ ++.Lunaligned_s2: ++ /* ++ * s1 and s2 can't both be aligned, and unaligned word loads ++ * can trigger spurious exceptions if we cross a page boundary. ++ * Do it the slow way... ++ */ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ cp.w r9, 0 ++ brne 1b ++ retal 0 ++ ++ .weak strcoll ++ strcoll = strcmp +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,63 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * To reduce the size, this one might simply call strncpy with len = -1. ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strcpy, @function ++strcpy: ++ mov dst, r12 ++ ++ pref src[0] ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ rjmp 1b ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ bfextu r10, r8, 24, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 16, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 8, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ st.b dst++, r8 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ rsub r8, r8, 4 ++ add pc, pc, r8 << 3 ++ nop ++ nop ++ ld.ub r10, src++ ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ ++ rjmp .Laligned_copy +Index: uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,144 @@ ++ ++#include ++#include ++#include ++#include ++ ++#define BUF_SIZE (8 * 1024) ++ ++static char *buf1; ++static char *buf1_ref; ++static char *buf2; ++ ++extern void *optimized_memcpy(void *dest, void *src, size_t len); ++extern void *optimized_memmove(void *dest, void *src, size_t len); ++extern char *optimized_strcpy(char *dest, char *src); ++extern char *optimized_strncpy(char *dest, char *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("%4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++static void test_memcpy(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ int i; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memcpy with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ for (i = 0; i < 8192; i++) ++ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ for ( i = 0; i < 8192; i++) ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++static void test_memmove(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memmove with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ memmove(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf2 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf2"); ++ return 1; ++ } ++ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1"); ++ return 1; ++ } ++ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1_ref == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1_ref"); ++ return 1; ++ } ++ printf("\n === MEMCPY ===\n\n"); ++ ++ test_memcpy(0, 0, BUF_SIZE - 32); ++ test_memcpy(0, 0, 1); ++ test_memcpy(0, 0, 31); ++ test_memcpy(0, 0, 32); ++ test_memcpy(0, 0, 127); ++ test_memcpy(0, 0, 128); ++ test_memcpy(4, 4, BUF_SIZE - 32 - 4); ++ test_memcpy(1, 1, BUF_SIZE - 32 - 1); ++ test_memcpy(1, 1, 126); ++ test_memcpy(0, 3, 128); ++ test_memcpy(1, 4, 128); ++ test_memcpy(0, 0, 0); ++ ++ printf("\n === MEMMOVE ===\n\n"); ++ ++ test_memmove(0, 0, BUF_SIZE - 32); ++ test_memmove(0, 0, 1); ++ test_memmove(0, 0, 31); ++ test_memmove(0, 0, 32); ++ test_memmove(0, 0, BUF_SIZE - 33); ++ test_memmove(0, 0, 128); ++ test_memmove(4, 4, BUF_SIZE - 32 - 4); ++ test_memmove(1, 1, BUF_SIZE - 32 - 1); ++ test_memmove(1, 1, BUF_SIZE - 130); ++ test_memmove(0, 3, BUF_SIZE - 128); ++ test_memmove(1, 4, BUF_SIZE - 128); ++ test_memmove(0, 0, 0); ++ ++ return 0; ++} +Index: uClibc-0.9.28-avr32/libc/string/avr32/strlen.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strlen.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,52 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++ ++ .text ++ .global strlen ++ .type strlen, @function ++strlen: ++ mov r11, r12 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: ld.w r8, str++ ++ tnbz r8 ++ brne 1b ++ ++ sub r12, r11 ++ bfextu r9, r8, 24, 8 ++ cp.w r9, 0 ++ subeq r12, 4 ++ reteq r12 ++ bfextu r9, r8, 16, 8 ++ cp.w r9, 0 ++ subeq r12, 3 ++ reteq r12 ++ bfextu r9, r8, 8, 8 ++ cp.w r9, 0 ++ subeq r12, 2 ++ reteq r12 ++ sub r12, 1 ++ retal r12 ++ ++.Lunaligned_str: ++ add pc, pc, r9 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ brne 1b ++ ++1: sub r12, 1 ++ sub r12, r11 ++ retal r12 +Index: uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,77 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strncpy, @function ++strncpy: ++ mov dst, r12 ++ ++ pref src[0] ++ mov dst, r12 ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++ sub r10, 4 ++ brlt 3f ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ sub r10, 4 ++ brne 1b ++ ++3: sub r10, -4 ++ reteq r12 ++ ++ /* This is safe as long as src is word-aligned and r10 > 0 */ ++ ld.w r8, src++ ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ bfextu r11, r8, 24, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ bfextu r11, r8, 16, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ bfextu r11, r8, 8, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ st.b dst++, r8 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ min r8, r8, r10 ++ sub r10, r8 ++ sub r8, 1 ++ retlt r12 ++1: ld.ub r10, src++ ++ st.b dst++, r10 ++ sub r8, 1 ++ brge 1b ++ ++ rjmp .Laligned_copy +Index: uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,66 @@ ++ ++#include ++#include ++ ++#define BUF_SIZE 32768 ++ ++static char buf1[BUF_SIZE] __attribute__((aligned(32))); ++static char buf1_ref[BUF_SIZE] __attribute__((aligned(32))); ++static char buf2[BUF_SIZE] __attribute__((aligned(32))); ++ ++extern void *new_memcpy(void *dest, void *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("% 4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++void test(int src_offset, int dst_offset, int len) ++{ ++ memset(buf1, 0x55, sizeof(buf1)); ++ memset(buf1_ref, 0x55, sizeof(buf1_ref)); ++ memset(buf2, 0xaa, sizeof(buf2)); ++ ++ printf("Testing with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ ++ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, sizeof(buf1)); ++ } ++} ++ ++int main(int argc, char *argv[]) ++{ ++ test(0, 0, BUF_SIZE); ++ test(0, 0, 1); ++ test(0, 0, 31); ++ test(0, 0, 32); ++ test(0, 0, 127); ++ test(0, 0, 128); ++ test(4, 4, BUF_SIZE - 4); ++ test(1, 1, BUF_SIZE - 1); ++ test(1, 1, 126); ++ test(0, 3, 128); ++ test(1, 4, 128); ++ ++ return 0; ++} diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch new file mode 100644 index 0000000000..3319f98de9 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch @@ -0,0 +1,24 @@ +Subject: [PATCH] Fix __libc_fcntl64 prototype in __syscall_fcntl.c + +__libc_fcntl64 is a varargs function and should be declared as such. +Otherwise, the gcc compiler for AVR32, and perhaps other architectures, +will use the wrong calling convention. + +--- + + libc/sysdeps/linux/common/__syscall_fcntl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c +=================================================================== +--- uClibc-0.9.28.orig/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-02-07 16:48:32.000000000 +0100 ++++ uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-02-07 17:19:09.000000000 +0100 +@@ -12,7 +12,7 @@ + #include + + #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 +-extern int __libc_fcntl64(int fd, int cmd, long arg); ++extern int __libc_fcntl64(int fd, int cmd, ...); + #endif + + #define __NR___syscall_fcntl __NR_fcntl diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch new file mode 100644 index 0000000000..aafdc8cd7f --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch @@ -0,0 +1,30 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Fri Apr 7 17:10:32 2006 +0200 +Subject: [PATCH] Fix broken __libc_open declaration in open64.c + +__libc_open is a vararg function and should therefore be declared as +such. Fixes bug #4190. + +--- + + libc/sysdeps/linux/common/open64.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +70f2c81903327a8a346e370830932b80045ab04e +diff --git a/libc/sysdeps/linux/common/open64.c b/libc/sysdeps/linux/common/open64.c +index 543aa13..d9a27a7 100644 +--- a/libc/sysdeps/linux/common/open64.c ++++ b/libc/sysdeps/linux/common/open64.c +@@ -26,7 +26,7 @@ + #endif + + #ifdef __UCLIBC_HAS_LFS__ +-extern int __libc_open (__const char *file, int oflag, mode_t mode); ++extern int __libc_open (__const char *file, int oflag, ...); + + /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, + a third argument is the file protection. */ +-- +1.2.4 + diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch new file mode 100644 index 0000000000..d68576b9bd --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch @@ -0,0 +1,19 @@ +Subject: [PATCH] Fix getrusage argument type + +The first argument to getrusage is of type __rusage_who_t, not int. +This patch fixes that. +--- + + libc/sysdeps/linux/common/getrusage.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c +=================================================================== +--- uClibc-0.9.28.orig/libc/sysdeps/linux/common/getrusage.c 2006-02-07 17:18:22.000000000 +0100 ++++ uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c 2006-02-07 17:18:31.000000000 +0100 +@@ -10,4 +10,4 @@ + #include "syscalls.h" + #include + #include +-_syscall2(int, getrusage, int, who, struct rusage *, usage); ++_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage); diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch new file mode 100644 index 0000000000..dd61f174a7 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch @@ -0,0 +1,25 @@ +Subject: [PATCH] ldd: AVR32 support + +Add AVR32-specific definitions to ldd. + +--- + + utils/ldd.c | 5 +++++ + 1 file changed, 5 insertions(+) + +Index: uClibc-0.9.28/utils/ldd.c +=================================================================== +--- uClibc-0.9.28.orig/utils/ldd.c 2006-02-07 16:48:02.000000000 +0100 ++++ uClibc-0.9.28/utils/ldd.c 2006-02-07 17:13:00.000000000 +0100 +@@ -56,6 +56,11 @@ + #define ELFCLASSM ELFCLASS32 + #endif + ++#if defined(__avr32__) ++#define MATCH_MACHINE(x) (x == EM_AVR32) ++#define ELFCLASSM ELFCLASS32 ++#endif ++ + #if defined(__s390__) + #define MATCH_MACHINE(x) (x == EM_S390) + #define ELFCLASSM ELFCLASS32 diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch new file mode 100644 index 0000000000..cf0e677ffe --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch @@ -0,0 +1,24 @@ +Subject: [PATCH] ldso: Always inline _dl_memcpy() + +On some gcc versions, inline is merely a hint. AVR32 depends on this +function actually getting inlined, so we need to use __always_inline +instead of just inline. + +--- + + ldso/include/dl-string.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: uClibc-0.9.28/ldso/include/dl-string.h +=================================================================== +--- uClibc-0.9.28.orig/ldso/include/dl-string.h 2006-02-07 17:01:28.000000000 +0100 ++++ uClibc-0.9.28/ldso/include/dl-string.h 2006-02-07 17:03:02.000000000 +0100 +@@ -134,7 +134,7 @@ static inline char * _dl_strstr(const ch + } while (1); + } + +-static inline void * _dl_memcpy(void * dst, const void * src, size_t len) ++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) + { + register char *a = dst-1; + register const char *b = src-1; diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch new file mode 100644 index 0000000000..e6f5c42585 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch @@ -0,0 +1,107 @@ +Subject: [PATCH] ldso: Always inline system calls + +Some versions of gcc consider inline merely a hint. AVR32 depends on +the system calls actually being inlined, so we need to use +__always_inline instead of just inline. + +--- + + ldso/include/dl-syscall.h | 38 +++++++++++++++++++------------------- + 1 file changed, 19 insertions(+), 19 deletions(-) + +Index: uClibc-0.9.28/ldso/include/dl-syscall.h +=================================================================== +--- uClibc-0.9.28.orig/ldso/include/dl-syscall.h 2006-02-07 17:07:06.000000000 +0100 ++++ uClibc-0.9.28/ldso/include/dl-syscall.h 2006-02-07 17:08:47.000000000 +0100 +@@ -60,59 +60,59 @@ + dynamic linking at all, so we cannot return any error codes. + We just punt if there is an error. */ + #define __NR__dl_exit __NR_exit +-static inline _syscall1(void, _dl_exit, int, status); ++static __always_inline _syscall1(void, _dl_exit, int, status); + + #define __NR__dl_close __NR_close +-static inline _syscall1(int, _dl_close, int, fd); ++static __always_inline _syscall1(int, _dl_close, int, fd); + + #define __NR__dl_open __NR_open +-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); ++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); + + #define __NR__dl_write __NR_write +-static inline _syscall3(unsigned long, _dl_write, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_write, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_read __NR_read +-static inline _syscall3(unsigned long, _dl_read, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_read, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_mprotect __NR_mprotect +-static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); ++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); + + #define __NR__dl_stat __NR_stat +-static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); ++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); + + #define __NR__dl_munmap __NR_munmap +-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); ++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); + + #define __NR__dl_getuid __NR_getuid +-static inline _syscall0(uid_t, _dl_getuid); ++static __always_inline _syscall0(uid_t, _dl_getuid); + + #define __NR__dl_geteuid __NR_geteuid +-static inline _syscall0(uid_t, _dl_geteuid); ++static __always_inline _syscall0(uid_t, _dl_geteuid); + + #define __NR__dl_getgid __NR_getgid +-static inline _syscall0(gid_t, _dl_getgid); ++static __always_inline _syscall0(gid_t, _dl_getgid); + + #define __NR__dl_getegid __NR_getegid +-static inline _syscall0(gid_t, _dl_getegid); ++static __always_inline _syscall0(gid_t, _dl_getegid); + + #define __NR__dl_getpid __NR_getpid +-static inline _syscall0(gid_t, _dl_getpid); ++static __always_inline _syscall0(gid_t, _dl_getpid); + + #define __NR__dl_readlink __NR_readlink +-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); ++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); + + #ifdef __NR_mmap + #ifdef MMAP_HAS_6_ARGS + #define __NR__dl_mmap __NR_mmap +-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, ++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, + int, prot, int, flags, int, fd, off_t, offset); + #else + #define __NR__dl_mmap_real __NR_mmap +-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); ++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); + +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + unsigned long buffer[6]; +@@ -128,12 +128,12 @@ static inline void * _dl_mmap(void * add + #endif + #elif defined __NR_mmap2 + #define __NR___syscall_mmap2 __NR_mmap2 +-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, ++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, + size_t, len, int, prot, int, flags, int, fd, off_t, offset); + /*always 12, even on architectures where PAGE_SHIFT != 12 */ + #define MMAP2_PAGE_SHIFT 12 + #define MAP_FAILED ((void *) -1) +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch new file mode 100644 index 0000000000..ddeb84d069 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch @@ -0,0 +1,526 @@ +Subject: [PATCH] ldso: AVR32 support + +This implements the AVR32-specific parts of the dynamic linker. + +--- + + ldso/ldso/avr32/dl-debug.h | 45 +++++++++ + ldso/ldso/avr32/dl-startup.h | 110 ++++++++++++++++++++++++ + ldso/ldso/avr32/dl-syscalls.h | 5 + + ldso/ldso/avr32/dl-sysdep.h | 103 ++++++++++++++++++++++ + ldso/ldso/avr32/elfinterp.c | 191 ++++++++++++++++++++++++++++++++++++++++++ + ldso/ldso/avr32/resolve.S | 28 ++++++ + 6 files changed, 482 insertions(+) + +Index: uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h 2006-05-05 09:30:43.000000000 +0200 +@@ -0,0 +1,45 @@ ++/* ++ * AVR32 ELF shared libary loader support ++ * ++ * Copyright (C) 2005 Atmel Norway ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++static const char *_dl_reltypes_tab[] = { ++ "R_AVR32_NONE", ++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", ++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", ++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", ++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", ++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", ++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", ++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", ++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", ++ "R_AVR32_HI16", "R_AVR32_LO16", ++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", ++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", ++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", ++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", ++ "R_AVR32_ALIGN", ++}; +Index: uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h 2006-05-05 09:29:45.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Architecture specific code used by dl-startup.c ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++/* This is the library loader's main entry point. Let _dl_boot2 do its ++ * initializations and jump to the application's entry point ++ * afterwards. */ ++asm( " .text\n" ++ " .global _start\n" ++ " .type _start,@function\n" ++ "_start:\n" ++ /* All arguments are on the stack initially */ ++ " mov r12, sp\n" ++ " rcall _dl_start\n" ++ /* Returns user entry point in r12. Save it. */ ++ " mov r0, r12\n" ++ /* We're PIC, so get the Global Offset Table */ ++ " lddpc r6, .L_GOT\n" ++ ".L_RGOT:\n" ++ " rsub r6, pc\n" ++ /* Adjust argc and argv according to _dl_skip_args */ ++ " ld.w r1, r6[_dl_skip_args@got]\n" ++ " ld.w r1, r1[0]\n" ++ " ld.w r2, sp++\n" ++ " sub r2, r1\n" ++ " add sp, sp, r1 << 2\n" ++ " st.w --sp, r2\n" ++ /* Load the finalizer function */ ++ " ld.w r12, r6[_dl_fini@got]\n" ++ /* Jump to the user's entry point */ ++ " mov pc, r0\n\n" ++ ++ " .align 2\n" ++ ".L_GOT:" ++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" ++ " .size _start, . - _start\n" ++ " .previous\n"); ++ ++/* Get a pointer to the argv array. On many platforms this can be just ++ * the address if the first argument, on other platforms we need to ++ * do something a little more subtle here. */ ++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) ++ ++ ++/* We can't call functions before the GOT has been initialized */ ++#define NO_FUNCS_BEFORE_BOOTSTRAP ++ ++/* ++ * Relocate the GOT during dynamic loader bootstrap. This will add ++ * the load address to all entries in the GOT, which is necessary ++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the ++ * GOT. ++ */ ++static __always_inline ++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) ++{ ++ Elf32_Addr i, nr_got; ++ register Elf32_Addr *__r6 __asm__("r6"); ++ Elf32_Addr *got = __r6; ++ ++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); ++ for (i = 2; i < nr_got; i++) ++ got[i] += tpnt->loadaddr; ++} ++ ++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) ++ ++/* Handle relocation of the symbols in the dynamic loader. */ ++static __always_inline ++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, ++ unsigned long symbol_addr, ++ unsigned long load_addr, Elf32_Sym *symtab) ++{ ++ switch(ELF32_R_TYPE(rpnt->r_info)) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr; ++ break; ++ case R_AVR32_RELATIVE: ++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); ++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); ++ SEND_STDERR_DEBUG(" + "); ++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); ++ *reloc_addr = load_addr + rpnt->r_addend; ++ break; ++ default: ++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); ++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); ++ SEND_STDERR("REL, SYMBOL, LOAD: "); ++ SEND_ADDRESS_STDERR(reloc_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(symbol_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(load_addr, 1); ++ _dl_exit(1); ++ } ++} ++ ++/* Transfer control to the user's application, once the dynamic loader ++ * is done. This routine has to exit the current function, then call ++ * the _dl_elf_main function. ++ * ++ * Since our _dl_boot will simply call whatever is returned by ++ * _dl_boot2, we can just return the address we're supposed to ++ * call. */ ++#define START() return _dl_elf_main; +Index: uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h 2006-05-05 09:29:25.000000000 +0200 +@@ -0,0 +1,5 @@ ++/* We can't use the real errno in ldso, since it has not yet ++ * been dynamicly linked in yet. */ ++extern int _dl_errno; ++#define __set_errno(X) {(_dl_errno) = (X);} ++#include "sys/syscall.h" +Index: uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h 2006-05-05 09:30:43.000000000 +0200 +@@ -0,0 +1,103 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Various assembly language/system dependent hacks that are required ++ * so that we can minimize the amount of platform specific code. ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++ ++/* Define this if the system uses RELOCA. */ ++#define ELF_USES_RELOCA ++ ++#include ++ ++#define ARCH_NUM 1 ++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) ++ ++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ ++ do { \ ++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ ++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ ++ } while (0) ++ ++/* Initialization sequence for the application/library GOT. */ ++#define INIT_GOT(GOT_BASE,MODULE) \ ++ do { \ ++ unsigned long i, nr_got; \ ++ \ ++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ ++ GOT_BASE[1] = (unsigned long) MODULE; \ ++ \ ++ /* Add load address displacement to all GOT entries */ \ ++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ ++ for (i = 2; i < nr_got; i++) \ ++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ ++ } while (0) ++ ++#define do_rem(result, n, base) ((result) = (n) % (base)) ++ ++/* Here we define the magic numbers that this dynamic loader should accept */ ++#define MAGIC1 EM_AVR32 ++#undef MAGIC2 ++ ++/* Used for error messages */ ++#define ELF_TARGET "AVR32" ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); ++ ++/* 4096 bytes alignment */ ++#define PAGE_ALIGN 0xfffff000 ++#define ADDR_ALIGN 0xfff ++#define OFFS_ALIGN 0x7ffff000 ++ ++#define elf_machine_type_class(type) \ ++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) ++ ++/* AVR32 doesn't need any COPY relocs */ ++#define DL_NO_COPY_RELOCS ++ ++/* Return the link-time address of _DYNAMIC. Conveniently, this is the ++ first element of the GOT. This must be inlined in a function which ++ uses global data. */ ++static inline Elf32_Addr ++elf_machine_dynamic (void) ++{ ++ register Elf32_Addr *got asm ("r6"); ++ return *got; ++} ++ ++/* Return the run-time load address of the shared object. */ ++static inline Elf32_Addr ++elf_machine_load_address (void) ++{ ++ extern void __dl_start asm("_dl_start"); ++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; ++ Elf32_Addr pcrel_addr; ++ ++ asm (" lddpc %0, 2f\n" ++ "1: add %0, pc\n" ++ " rjmp 3f\n" ++ " .align 2\n" ++ "2: .long _dl_start - 1b\n" ++ "3:\n" ++ : "=r"(pcrel_addr) : : "cc"); ++ ++ return pcrel_addr - got_addr; ++} ++ ++/* ++ * Perform any RELATIVE relocations specified by DT_RELCOUNT. ++ * Currently, we don't use that tag, but we might in the future as ++ * this would reduce the startup time somewhat (although probably not by much). ++ */ ++static inline void ++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, ++ Elf32_Word relative_count) ++{ ++ Elf32_Rela *rpnt = (void *)rel_addr; ++ ++ do { ++ Elf32_Addr *reloc_addr; ++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); ++ *reloc_addr = load_off + rpnt->r_addend; ++ } while (--relative_count); ++} +Index: uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c 2006-05-05 09:30:43.000000000 +0200 +@@ -0,0 +1,191 @@ ++/* ++ * AVR32 ELF shared library loader suppport ++ * ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) ++{ ++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; ++ Elf32_Sym *sym; ++ unsigned long local_gotno; ++ unsigned long gotsym; ++ unsigned long new_addr; ++ char *strtab, *symname; ++ unsigned long *entry; ++ unsigned long sym_index = got_offset / 4; ++ ++#if 0 ++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; ++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; ++ ++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) ++ + sym_index; ++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); ++ symname = strtab + sym->st_name; ++ ++#if 0 ++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, ++ tpnt->symbol_scope, tpnt, ++ resolver); ++#endif ++ ++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); ++ *entry = new_addr; ++#endif ++ ++ return new_addr; ++} ++ ++static int ++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ unsigned long rel_addr, unsigned long rel_size, ++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) ++{ ++ Elf32_Sym *symtab; ++ Elf32_Rela *rpnt; ++ char *strtab; ++ int i; ++ ++ rpnt = (Elf32_Rela *)rel_addr; ++ rel_size /= sizeof(Elf32_Rela); ++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; ++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; ++ ++ for (i = 0; i < rel_size; i++, rpnt++) { ++ int symtab_index, res; ++ ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ ++ debug_sym(symtab, strtab, symtab_index); ++ debug_reloc(symtab, strtab, rpnt); ++ ++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); ++ ++ if (res == 0) ++ continue; ++ ++ _dl_dprintf(2, "\n%s: ", _dl_progname); ++ ++ if (symtab_index) ++ _dl_dprintf(2, "symbol '%s': ", ++ strtab + symtab[symtab_index].st_name); ++ ++ if (res < 0) { ++ int reloc_type = ELF32_R_TYPE(rpnt->r_info); ++#if defined(__SUPPORT_LD_DEBUG__) ++ _dl_dprintf(2, "can't handle reloc type %s\n", ++ _dl_reltypes(reloc_type)); ++#else ++ _dl_dprintf(2, "can't handle reloc type %x\n", ++ reloc_type); ++#endif ++ _dl_exit(-res); ++ } else { ++ _dl_dprintf(2, "can't resolve symbol\n"); ++ return res; ++ } ++ } ++ ++ return 0; ++} ++ ++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) ++{ ++ int reloc_type; ++ int symtab_index; ++ char *symname; ++ unsigned long *reloc_addr; ++ unsigned long symbol_addr; ++#if defined(__SUPPORT_LD_DEBUG__) ++ unsigned long old_val; ++#endif ++ ++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); ++ reloc_type = ELF32_R_TYPE(rpnt->r_info); ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ symbol_addr = 0; ++ symname = strtab + symtab[symtab_index].st_name; ++ ++ if (symtab_index) { ++ symbol_addr = (unsigned long) ++ _dl_find_hash(strtab + symtab[symtab_index].st_name, ++ tpnt->symbol_scope, tpnt, ++ elf_machine_type_class(reloc_type)); ++ ++ /* Allow undefined references to weak symbols */ ++ if (!symbol_addr && ++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { ++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", ++ _dl_progname, symname); ++ return 0; ++ } ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ old_val = *reloc_addr; ++#endif ++ switch (reloc_type) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr + rpnt->r_addend; ++ break; ++ case R_AVR32_RELATIVE: ++ *reloc_addr = (unsigned long)tpnt->loadaddr ++ + rpnt->r_addend; ++ break; ++ default: ++ return -1; ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ if (_dl_debug_reloc && _dl_debug_detail) ++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", ++ old_val, *reloc_addr); ++#endif ++ ++ return 0; ++} ++ ++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ /* TODO: Might want to support this in order to get faster ++ * startup times... */ ++} ++ ++int _dl_parse_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, ++ _dl_do_reloc); ++} +Index: uClibc-0.9.28/ldso/ldso/avr32/resolve.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/resolve.S 2006-05-05 09:29:25.000000000 +0200 +@@ -0,0 +1,28 @@ ++/* ++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as ++ * indicated in register r12 and jumps to the resolved address. ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ * ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define ip r5 ++ ++ .text ++ .global _dl_linux_resolve ++ .type _dl_linux_resolve,@function ++_dl_linux_resolve: ++ /* The PLT code pushed r8 for us. It contains the address of this ++ function's GOT entry, that is entry 0. ip contains the address ++ of the GOT entry of the function we wanted to call. */ ++ stm --sp, r9-r12, lr ++ mov r11, r8 ++ sub r12, ip, r8 ++ rcall _dl_linux_resolver ++ mov ip, r12 ++ popm r8-r12,lr ++ mov pc, ip ++ .size _dl_linux_resolve, . - _dl_linux_resolve diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch new file mode 100644 index 0000000000..222749f3c2 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch @@ -0,0 +1,23 @@ +Subject: [PATCH] ldso: AVR32 needs CONSTANT_STRING_GOT_FIXUP + +Add AVR32 to the list of architectures needing CONSTANT_STRING_GOT_FIXUP. + +--- + + ldso/include/dl-string.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Index: uClibc-0.9.28/ldso/include/dl-string.h +=================================================================== +--- uClibc-0.9.28.orig/ldso/include/dl-string.h 2006-02-07 16:58:58.000000000 +0100 ++++ uClibc-0.9.28/ldso/include/dl-string.h 2006-02-07 16:59:28.000000000 +0100 +@@ -271,7 +271,8 @@ static __always_inline char * _dl_simple + /* On some arches constant strings are referenced through the GOT. + * This requires that load_addr must already be defined... */ + #if defined(mc68000) || defined(__arm__) || defined(__mips__) \ +- || defined(__sh__) || defined(__powerpc__) ++ || defined(__sh__) || defined(__powerpc__) \ ++ || defined(__avr32__) + # define CONSTANT_STRING_GOT_FIXUP(X) \ + if ((X) < (const char *) load_addr) (X) += load_addr + # define NO_EARLY_SEND_STDERR diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch new file mode 100644 index 0000000000..0cdc2ccb32 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch @@ -0,0 +1,40 @@ +Subject: [PATCH] ldso: AVR32 startup hack + +AVR32 needs to do both PERFORM_BOOTSTRAP_GOT and a full relocation of +the GOT. I don't quite remember why, but I think it's because some GOT +entries just need the load address added to them, while the rest need +the full relocation code. + +This patch should be revisited to figure out whether we're processing +relocations against undefined symbols and whether that's something we +should be doing... + +--- + + ldso/ldso/dl-startup.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +Index: uClibc-0.9.28/ldso/ldso/dl-startup.c +=================================================================== +--- uClibc-0.9.28.orig/ldso/ldso/dl-startup.c 2006-02-07 16:49:27.000000000 +0100 ++++ uClibc-0.9.28/ldso/ldso/dl-startup.c 2006-02-07 17:12:09.000000000 +0100 +@@ -217,7 +217,9 @@ static void * __attribute_used__ _dl_sta + /* some arches (like MIPS) we have to tweak the GOT before relocations */ + PERFORM_BOOTSTRAP_GOT(tpnt); + +-#else ++#endif ++ ++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) + + /* OK, now do the relocations. We do not do a lazy binding here, so + that once we are done, we have considerably more flexibility. */ +@@ -259,7 +261,7 @@ static void * __attribute_used__ _dl_sta + rel_addr += relative_count * sizeof(ELF_RELOC);; + } + +- rpnt = (ELF_RELOC *) (rel_addr + load_addr); ++ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */); + for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { + reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); + symtab_index = ELF_R_SYM(rpnt->r_info); diff --git a/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch b/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch new file mode 100644 index 0000000000..a383a6e62d --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch @@ -0,0 +1,28 @@ +From 7b2f125425cf777e7937b533217588e27952b87d Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Mon, 7 Aug 2006 11:12:50 +0200 +Subject: [PATCH] Let optimized stringops override default ones + +The default, slow stringops must be archived _before_ the optimized +stringops if there is to be any point doing the optimizations in the +first place. +--- + libc/Makefile | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/libc/Makefile b/libc/Makefile +index 31e4bab..687eac5 100644 +--- a/libc/Makefile ++++ b/libc/Makefile +@@ -59,7 +59,7 @@ # will evaluate to no files :(. + $(AR) dN 2 $(LIBNAME) $$objs && \ + $(AR) dN 2 $(LIBNAME) $$objs + @for objfile in obj.signal \ +- obj.string.generic obj.string.$(TARGET_ARCH) obj.string \ ++ obj.string obj.string.generic obj.string.$(TARGET_ARCH) \ + obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \ + if [ -e $$objfile ] ; then \ + if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \ +-- +1.4.1.1 + diff --git a/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch b/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch new file mode 100644 index 0000000000..5277677ee5 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch @@ -0,0 +1,105 @@ +Subject: [PATCH] libpthread: AVR32 support + +Implement pt-machine.h for AVR32. +--- + + libpthread/linuxthreads/sysdeps/avr32/pt-machine.h | 92 +++++++++++++++++++++ + 1 file changed, 92 insertions(+) + +Index: uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-02-07 17:14:47.000000000 +0100 +@@ -0,0 +1,92 @@ ++/* Machine-dependent pthreads configuration and inline functions. ++ ++ Copyright (C) 2005 Atmel Norway ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If not, ++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#include ++ ++static inline int ++_test_and_set (int *p, int v) __THROW ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline test and set */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " tst %0, %3\n" ++ " breq 2f\n" ++ " stcond %1, %3\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=m"(*p) ++ : "m"(*p), "r"(v) ++ : "memory", "cc"); ++ ++ return result; ++} ++ ++#ifndef PT_EI ++# define PT_EI extern inline ++#endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ return _test_and_set(spinlock, 1); ++} ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME stack_pointer ++register char * stack_pointer __asm__ ("sp"); ++ ++/* Compare-and-swap for semaphores. */ ++ ++#define HAS_COMPARE_AND_SWAP ++PT_EI int ++__compare_and_swap(long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* pt-machine.h */ diff --git a/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch b/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch new file mode 100644 index 0000000000..9bfdc53cfc --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch @@ -0,0 +1,27 @@ +Subject: [PATCH] Don't include create_module() for AVR32 + +The create_module() system call is obsolete in Linux 2.6, so the +AVR32 kernel doesn't even have it. + +Come to think about it, this should be completely unnecessary as the +create_module function is only a stub when __NR_create_module is +undefined. +--- + + libc/sysdeps/linux/common/create_module.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Index: uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c +=================================================================== +--- uClibc-0.9.28.orig/libc/sysdeps/linux/common/create_module.c 2006-02-07 16:48:38.000000000 +0100 ++++ uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c 2006-02-07 17:17:14.000000000 +0100 +@@ -61,7 +61,8 @@ unsigned long create_module(const char * + { + return __create_module(name, size, 0, 0); + } +-#else ++/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */ ++#elif !defined(__avr32__) + /* Sparc, MIPS, etc don't mistake return values for errors. */ + _syscall2(unsigned long, create_module, const char *, name, size_t, size); + #endif diff --git a/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch b/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch new file mode 100644 index 0000000000..9f27f68f0a --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch @@ -0,0 +1,48 @@ +--- a/extra/scripts/fix_includes.sh 2005-08-18 00:49:41.000000000 +0200 ++++ b/extra/scripts/fix_includes.sh 2006-09-27 13:23:12.000000000 +0200 +@@ -78,36 +78,6 @@ if [ ! -d "$KERNEL_SOURCE" ]; then + exit 1; + fi; + +-if [ -f "$KERNEL_SOURCE/Makefile" ] ; then +-# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION +-eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile` +-else +-ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2` +-VERSION=`echo "$ver" | cut -d '.' -f 1` +-PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2` +-if echo "$ver" | grep -q '-' ; then +-SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1` +-EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"` +-else +-SUBLEVEL=`echo "$ver" | cut -d '.' -f 3` +-#EXTRAVERSION= +-fi +-fi +-if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ] +-then +- echo "Unable to determine version for kernel headers" +- echo -e "\tprovided in directory $KERNEL_SOURCE" +- exit 1 +-fi +- +-if [ "$MAKE_IS_SILENT" != "y" ]; then +-echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}" +-echo -e "\n" +-echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'" +-echo -e "\tprovided in directory $KERNEL_SOURCE" +-echo -e "\n" +-fi +- + # Create a symlink to include/asm + + rm -f include/asm* +@@ -172,7 +142,7 @@ fi; + + + # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory +-if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then ++if [ -d $KERNEL_SOURCE/include/asm-generic ] ; then + ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic + fi; + diff --git a/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch b/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch new file mode 100644 index 0000000000..ae6de2b102 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch @@ -0,0 +1,54 @@ +--- + libc/sysdeps/linux/avr32/bits/fcntl.h | 33 +++++++++++++++++---------------- + 1 file changed, 17 insertions(+), 16 deletions(-) + +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-11-23 17:38:30.000000000 +0100 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-11-23 17:52:15.000000000 +0100 +@@ -11,28 +11,29 @@ + + /* open/fcntl - O_SYNC is only implemented on blocks devices and on files + located on an ext2 file system */ +-#define O_ACCMODE 0003 +-#define O_RDONLY 00 +-#define O_WRONLY 01 +-#define O_RDWR 02 +-#define O_CREAT 0100 /* not fcntl */ +-#define O_EXCL 0200 /* not fcntl */ +-#define O_NOCTTY 0400 /* not fcntl */ +-#define O_TRUNC 01000 /* not fcntl */ +-#define O_APPEND 02000 +-#define O_NONBLOCK 04000 ++#define O_ACCMODE 00000003 ++#define O_RDONLY 00000000 ++#define O_WRONLY 00000001 ++#define O_RDWR 00000002 ++#define O_CREAT 00000100 /* not fcntl */ ++#define O_EXCL 00000200 /* not fcntl */ ++#define O_NOCTTY 00000400 /* not fcntl */ ++#define O_TRUNC 00001000 /* not fcntl */ ++#define O_APPEND 00002000 ++#define O_NONBLOCK 00004000 + #define O_NDELAY O_NONBLOCK +-#define O_SYNC 010000 +-#define O_ASYNC 020000 ++#define O_SYNC 00010000 ++#define O_ASYNC 00020000 + + #ifdef __USE_GNU +-# define O_DIRECTORY 040000 /* must be a directory */ +-# define O_NOFOLLOW 0100000 /* don't follow links */ +-# define O_DIRECT 0200000 /* direct disk access */ ++# define O_DIRECT 00040000 /* must be a directory */ ++# define O_DIRECTORY 00200000 /* direct disk access */ ++# define O_NOFOLLOW 00400000 /* don't follow links */ ++# define O_NOATIME 01000000 /* don't set atime */ + #endif + + #ifdef __USE_LARGEFILE64 +-# define O_LARGEFILE 0400000 ++# define O_LARGEFILE 00100000 + #endif + + /* For now Linux has synchronisity options for data and read operations. diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch new file mode 100644 index 0000000000..430b54c1c1 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch @@ -0,0 +1,4322 @@ +diff -Nur uClibc-0.9.28/extra/Configs/Config.avr32 uClibc-0.9.28-avr32-20060621/extra/Configs/Config.avr32 +--- uClibc-0.9.28/extra/Configs/Config.avr32 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/extra/Configs/Config.avr32 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,38 @@ ++# ++# For a description of the syntax of this configuration file, ++# see extra/config/Kconfig-language.txt ++# ++ ++config HAVE_ELF ++ bool ++ default y ++ ++config TARGET_ARCH ++ default "avr32" ++ ++config ARCH_CFLAGS ++ string ++ ++config ARCH_LDFLAGS ++ string ++ ++config LIBGCC_CFLAGS ++ string ++ ++config ARCH_SUPPORTS_BIG_ENDIAN ++ bool ++ default y ++ ++config UCLIBC_COMPLETELY_PIC ++ select FORCE_SHAREABLE_TEXT_SEGMENTS ++ bool ++ default y ++ ++choice ++ prompt "Target CPU Type" ++ default CONFIG_AP7000 ++ ++config CONFIG_AP7000 ++ bool "AP7000" ++ ++endchoice +diff -Nur uClibc-0.9.28/extra/Configs/Config.in uClibc-0.9.28-avr32-20060621/extra/Configs/Config.in +--- uClibc-0.9.28/extra/Configs/Config.in 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/extra/Configs/Config.in 2006-06-21 11:35:56.000000000 +0200 +@@ -16,6 +16,9 @@ + config TARGET_arm + bool "arm" + ++config TARGET_avr32 ++ bool "avr32" ++ + config TARGET_bfin + bool "bfin" + +@@ -83,6 +86,10 @@ + source "extra/Configs/Config.arm" + endif + ++if TARGET_avr32 ++source "extra/Configs/Config.avr32" ++endif ++ + if TARGET_bfin + source "extra/Configs/Config.bfin" + endif +diff -Nur uClibc-0.9.28/include/elf.h uClibc-0.9.28-avr32-20060621/include/elf.h +--- uClibc-0.9.28/include/elf.h 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/include/elf.h 2006-06-21 11:35:56.000000000 +0200 +@@ -261,6 +261,8 @@ + #define EM_NIOS32 0xfebb /* Altera Nios 32 */ + #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */ + ++#define EM_AVR32 0x18ad ++ + /* V850 backend magic number. Written in the absense of an ABI. */ + #define EM_CYGNUS_V850 0x9080 + +@@ -2687,6 +2689,55 @@ + /* Keep this the last entry. */ + #define R_V850_NUM 25 + ++/* Atmel AVR32 relocations. */ ++#define R_AVR32_NONE 0 ++#define R_AVR32_32 1 ++#define R_AVR32_16 2 ++#define R_AVR32_8 3 ++#define R_AVR32_32_PCREL 4 ++#define R_AVR32_16_PCREL 5 ++#define R_AVR32_8_PCREL 6 ++#define R_AVR32_DIFF32 7 ++#define R_AVR32_DIFF16 8 ++#define R_AVR32_DIFF8 9 ++#define R_AVR32_GOT32 10 ++#define R_AVR32_GOT16 11 ++#define R_AVR32_GOT8 12 ++#define R_AVR32_21S 13 ++#define R_AVR32_16U 14 ++#define R_AVR32_16S 15 ++#define R_AVR32_8S 16 ++#define R_AVR32_8S_EXT 17 ++#define R_AVR32_22H_PCREL 18 ++#define R_AVR32_18W_PCREL 19 ++#define R_AVR32_16B_PCREL 20 ++#define R_AVR32_16N_PCREL 21 ++#define R_AVR32_14UW_PCREL 22 ++#define R_AVR32_11H_PCREL 23 ++#define R_AVR32_10UW_PCREL 24 ++#define R_AVR32_9H_PCREL 25 ++#define R_AVR32_9UW_PCREL 26 ++#define R_AVR32_HI16 27 ++#define R_AVR32_LO16 28 ++#define R_AVR32_GOTPC 29 ++#define R_AVR32_GOTCALL 30 ++#define R_AVR32_LDA_GOT 31 ++#define R_AVR32_GOT21S 32 ++#define R_AVR32_GOT18SW 33 ++#define R_AVR32_GOT16S 34 ++#define R_AVR32_GOT7UW 35 ++#define R_AVR32_32_CPENT 36 ++#define R_AVR32_CPCALL 37 ++#define R_AVR32_16_CP 38 ++#define R_AVR32_9W_CP 39 ++#define R_AVR32_RELATIVE 40 ++#define R_AVR32_GLOB_DAT 41 ++#define R_AVR32_JMP_SLOT 42 ++#define R_AVR32_ALIGN 43 ++#define R_AVR32_NUM 44 ++ ++/* AVR32 dynamic tags */ ++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ + + #define R_H8_NONE 0 + #define R_H8_DIR32 1 +diff -Nur uClibc-0.9.28/ldso/include/dl-string.h uClibc-0.9.28-avr32-20060621/ldso/include/dl-string.h +--- uClibc-0.9.28/ldso/include/dl-string.h 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/ldso/include/dl-string.h 2006-06-21 11:35:57.000000000 +0200 +@@ -134,7 +134,7 @@ + } while (1); + } + +-static inline void * _dl_memcpy(void * dst, const void * src, size_t len) ++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) + { + register char *a = dst-1; + register const char *b = src-1; +@@ -271,7 +271,8 @@ + /* On some arches constant strings are referenced through the GOT. + * This requires that load_addr must already be defined... */ + #if defined(mc68000) || defined(__arm__) || defined(__mips__) \ +- || defined(__sh__) || defined(__powerpc__) ++ || defined(__sh__) || defined(__powerpc__) \ ++ || defined(__avr32__) + # define CONSTANT_STRING_GOT_FIXUP(X) \ + if ((X) < (const char *) load_addr) (X) += load_addr + # define NO_EARLY_SEND_STDERR +diff -Nur uClibc-0.9.28/ldso/include/dl-syscall.h uClibc-0.9.28-avr32-20060621/ldso/include/dl-syscall.h +--- uClibc-0.9.28/ldso/include/dl-syscall.h 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/ldso/include/dl-syscall.h 2006-06-21 11:35:57.000000000 +0200 +@@ -60,59 +60,59 @@ + dynamic linking at all, so we cannot return any error codes. + We just punt if there is an error. */ + #define __NR__dl_exit __NR_exit +-static inline _syscall1(void, _dl_exit, int, status); ++static __always_inline _syscall1(void, _dl_exit, int, status); + + #define __NR__dl_close __NR_close +-static inline _syscall1(int, _dl_close, int, fd); ++static __always_inline _syscall1(int, _dl_close, int, fd); + + #define __NR__dl_open __NR_open +-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); ++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); + + #define __NR__dl_write __NR_write +-static inline _syscall3(unsigned long, _dl_write, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_write, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_read __NR_read +-static inline _syscall3(unsigned long, _dl_read, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_read, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_mprotect __NR_mprotect +-static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); ++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); + + #define __NR__dl_stat __NR_stat +-static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); ++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); + + #define __NR__dl_munmap __NR_munmap +-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); ++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); + + #define __NR__dl_getuid __NR_getuid +-static inline _syscall0(uid_t, _dl_getuid); ++static __always_inline _syscall0(uid_t, _dl_getuid); + + #define __NR__dl_geteuid __NR_geteuid +-static inline _syscall0(uid_t, _dl_geteuid); ++static __always_inline _syscall0(uid_t, _dl_geteuid); + + #define __NR__dl_getgid __NR_getgid +-static inline _syscall0(gid_t, _dl_getgid); ++static __always_inline _syscall0(gid_t, _dl_getgid); + + #define __NR__dl_getegid __NR_getegid +-static inline _syscall0(gid_t, _dl_getegid); ++static __always_inline _syscall0(gid_t, _dl_getegid); + + #define __NR__dl_getpid __NR_getpid +-static inline _syscall0(gid_t, _dl_getpid); ++static __always_inline _syscall0(gid_t, _dl_getpid); + + #define __NR__dl_readlink __NR_readlink +-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); ++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); + + #ifdef __NR_mmap + #ifdef MMAP_HAS_6_ARGS + #define __NR__dl_mmap __NR_mmap +-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, ++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, + int, prot, int, flags, int, fd, off_t, offset); + #else + #define __NR__dl_mmap_real __NR_mmap +-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); ++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); + +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + unsigned long buffer[6]; +@@ -128,11 +128,12 @@ + #endif + #elif defined __NR_mmap2 + #define __NR___syscall_mmap2 __NR_mmap2 +-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, ++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, + size_t, len, int, prot, int, flags, int, fd, off_t, offset); + /*always 12, even on architectures where PAGE_SHIFT != 12 */ + #define MMAP2_PAGE_SHIFT 12 +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++#define MAP_FAILED ((void *) -1) ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-debug.h +--- uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-debug.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,45 @@ ++/* ++ * AVR32 ELF shared libary loader support ++ * ++ * Copyright (C) 2005 Atmel Norway ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++static const char *_dl_reltypes_tab[] = { ++ "R_AVR32_NONE", ++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", ++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", ++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", ++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", ++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", ++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", ++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", ++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", ++ "R_AVR32_HI16", "R_AVR32_LO16", ++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", ++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", ++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", ++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", ++ "R_AVR32_ALIGN", ++}; +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-startup.h +--- uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-startup.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Architecture specific code used by dl-startup.c ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++/* This is the library loader's main entry point. Let _dl_boot2 do its ++ * initializations and jump to the application's entry point ++ * afterwards. */ ++asm( " .text\n" ++ " .global _start\n" ++ " .type _start,@function\n" ++ "_start:\n" ++ /* All arguments are on the stack initially */ ++ " mov r12, sp\n" ++ " rcall _dl_start\n" ++ /* Returns user entry point in r12. Save it. */ ++ " mov r0, r12\n" ++ /* We're PIC, so get the Global Offset Table */ ++ " lddpc r6, .L_GOT\n" ++ ".L_RGOT:\n" ++ " rsub r6, pc\n" ++ /* Adjust argc and argv according to _dl_skip_args */ ++ " ld.w r1, r6[_dl_skip_args@got]\n" ++ " ld.w r1, r1[0]\n" ++ " ld.w r2, sp++\n" ++ " sub r2, r1\n" ++ " add sp, sp, r1 << 2\n" ++ " st.w --sp, r2\n" ++ /* Load the finalizer function */ ++ " ld.w r12, r6[_dl_fini@got]\n" ++ /* Jump to the user's entry point */ ++ " mov pc, r0\n\n" ++ ++ " .align 2\n" ++ ".L_GOT:" ++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" ++ " .size _start, . - _start\n" ++ " .previous\n"); ++ ++/* Get a pointer to the argv array. On many platforms this can be just ++ * the address if the first argument, on other platforms we need to ++ * do something a little more subtle here. */ ++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) ++ ++ ++/* We can't call functions before the GOT has been initialized */ ++#define NO_FUNCS_BEFORE_BOOTSTRAP ++ ++/* ++ * Relocate the GOT during dynamic loader bootstrap. This will add ++ * the load address to all entries in the GOT, which is necessary ++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the ++ * GOT. ++ */ ++static __always_inline ++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) ++{ ++ Elf32_Addr i, nr_got; ++ register Elf32_Addr *__r6 __asm__("r6"); ++ Elf32_Addr *got = __r6; ++ ++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); ++ for (i = 2; i < nr_got; i++) ++ got[i] += tpnt->loadaddr; ++} ++ ++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) ++ ++/* Handle relocation of the symbols in the dynamic loader. */ ++static __always_inline ++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, ++ unsigned long symbol_addr, ++ unsigned long load_addr, Elf32_Sym *symtab) ++{ ++ switch(ELF32_R_TYPE(rpnt->r_info)) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr; ++ break; ++ case R_AVR32_RELATIVE: ++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); ++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); ++ SEND_STDERR_DEBUG(" + "); ++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); ++ *reloc_addr = load_addr + rpnt->r_addend; ++ break; ++ default: ++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); ++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); ++ SEND_STDERR("REL, SYMBOL, LOAD: "); ++ SEND_ADDRESS_STDERR(reloc_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(symbol_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(load_addr, 1); ++ _dl_exit(1); ++ } ++} ++ ++/* Transfer control to the user's application, once the dynamic loader ++ * is done. This routine has to exit the current function, then call ++ * the _dl_elf_main function. ++ * ++ * Since our _dl_boot will simply call whatever is returned by ++ * _dl_boot2, we can just return the address we're supposed to ++ * call. */ ++#define START() return _dl_elf_main; +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-syscalls.h +--- uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-syscalls.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,5 @@ ++/* We can't use the real errno in ldso, since it has not yet ++ * been dynamicly linked in yet. */ ++extern int _dl_errno; ++#define __set_errno(X) {(_dl_errno) = (X);} ++#include "sys/syscall.h" +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-sysdep.h +--- uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-sysdep.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,103 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Various assembly language/system dependent hacks that are required ++ * so that we can minimize the amount of platform specific code. ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++ ++/* Define this if the system uses RELOCA. */ ++#define ELF_USES_RELOCA ++ ++#include ++ ++#define ARCH_NUM 1 ++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) ++ ++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ ++ do { \ ++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ ++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ ++ } while (0) ++ ++/* Initialization sequence for the application/library GOT. */ ++#define INIT_GOT(GOT_BASE,MODULE) \ ++ do { \ ++ unsigned long i, nr_got; \ ++ \ ++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ ++ GOT_BASE[1] = (unsigned long) MODULE; \ ++ \ ++ /* Add load address displacement to all GOT entries */ \ ++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ ++ for (i = 2; i < nr_got; i++) \ ++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ ++ } while (0) ++ ++#define do_rem(result, n, base) ((result) = (n) % (base)) ++ ++/* Here we define the magic numbers that this dynamic loader should accept */ ++#define MAGIC1 EM_AVR32 ++#undef MAGIC2 ++ ++/* Used for error messages */ ++#define ELF_TARGET "AVR32" ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); ++ ++/* 4096 bytes alignment */ ++#define PAGE_ALIGN 0xfffff000 ++#define ADDR_ALIGN 0xfff ++#define OFFS_ALIGN 0x7ffff000 ++ ++#define elf_machine_type_class(type) \ ++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) ++ ++/* AVR32 doesn't need any COPY relocs */ ++#define DL_NO_COPY_RELOCS ++ ++/* Return the link-time address of _DYNAMIC. Conveniently, this is the ++ first element of the GOT. This must be inlined in a function which ++ uses global data. */ ++static inline Elf32_Addr ++elf_machine_dynamic (void) ++{ ++ register Elf32_Addr *got asm ("r6"); ++ return *got; ++} ++ ++/* Return the run-time load address of the shared object. */ ++static inline Elf32_Addr ++elf_machine_load_address (void) ++{ ++ extern void __dl_start asm("_dl_start"); ++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; ++ Elf32_Addr pcrel_addr; ++ ++ asm (" lddpc %0, 2f\n" ++ "1: add %0, pc\n" ++ " rjmp 3f\n" ++ " .align 2\n" ++ "2: .long _dl_start - 1b\n" ++ "3:\n" ++ : "=r"(pcrel_addr) : : "cc"); ++ ++ return pcrel_addr - got_addr; ++} ++ ++/* ++ * Perform any RELATIVE relocations specified by DT_RELCOUNT. ++ * Currently, we don't use that tag, but we might in the future as ++ * this would reduce the startup time somewhat (although probably not by much). ++ */ ++static inline void ++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, ++ Elf32_Word relative_count) ++{ ++ Elf32_Rela *rpnt = (void *)rel_addr; ++ ++ do { ++ Elf32_Addr *reloc_addr; ++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); ++ *reloc_addr = load_off + rpnt->r_addend; ++ } while (--relative_count); ++} +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/elfinterp.c +--- uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/elfinterp.c 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,191 @@ ++/* ++ * AVR32 ELF shared library loader suppport ++ * ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) ++{ ++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; ++ Elf32_Sym *sym; ++ unsigned long local_gotno; ++ unsigned long gotsym; ++ unsigned long new_addr; ++ char *strtab, *symname; ++ unsigned long *entry; ++ unsigned long sym_index = got_offset / 4; ++ ++#if 0 ++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; ++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; ++ ++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) ++ + sym_index; ++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); ++ symname = strtab + sym->st_name; ++ ++#if 0 ++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, ++ tpnt->symbol_scope, tpnt, ++ resolver); ++#endif ++ ++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); ++ *entry = new_addr; ++#endif ++ ++ return new_addr; ++} ++ ++static int ++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ unsigned long rel_addr, unsigned long rel_size, ++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) ++{ ++ Elf32_Sym *symtab; ++ Elf32_Rela *rpnt; ++ char *strtab; ++ int i; ++ ++ rpnt = (Elf32_Rela *)rel_addr; ++ rel_size /= sizeof(Elf32_Rela); ++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; ++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; ++ ++ for (i = 0; i < rel_size; i++, rpnt++) { ++ int symtab_index, res; ++ ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ ++ debug_sym(symtab, strtab, symtab_index); ++ debug_reloc(symtab, strtab, rpnt); ++ ++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); ++ ++ if (res == 0) ++ continue; ++ ++ _dl_dprintf(2, "\n%s: ", _dl_progname); ++ ++ if (symtab_index) ++ _dl_dprintf(2, "symbol '%s': ", ++ strtab + symtab[symtab_index].st_name); ++ ++ if (res < 0) { ++ int reloc_type = ELF32_R_TYPE(rpnt->r_info); ++#if defined(__SUPPORT_LD_DEBUG__) ++ _dl_dprintf(2, "can't handle reloc type %s\n", ++ _dl_reltypes(reloc_type)); ++#else ++ _dl_dprintf(2, "can't handle reloc type %x\n", ++ reloc_type); ++#endif ++ _dl_exit(-res); ++ } else { ++ _dl_dprintf(2, "can't resolve symbol\n"); ++ return res; ++ } ++ } ++ ++ return 0; ++} ++ ++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) ++{ ++ int reloc_type; ++ int symtab_index; ++ char *symname; ++ unsigned long *reloc_addr; ++ unsigned long symbol_addr; ++#if defined(__SUPPORT_LD_DEBUG__) ++ unsigned long old_val; ++#endif ++ ++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); ++ reloc_type = ELF32_R_TYPE(rpnt->r_info); ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ symbol_addr = 0; ++ symname = strtab + symtab[symtab_index].st_name; ++ ++ if (symtab_index) { ++ symbol_addr = (unsigned long) ++ _dl_find_hash(strtab + symtab[symtab_index].st_name, ++ tpnt->symbol_scope, tpnt, ++ elf_machine_type_class(reloc_type)); ++ ++ /* Allow undefined references to weak symbols */ ++ if (!symbol_addr && ++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { ++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", ++ _dl_progname, symname); ++ return 0; ++ } ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ old_val = *reloc_addr; ++#endif ++ switch (reloc_type) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr + rpnt->r_addend; ++ break; ++ case R_AVR32_RELATIVE: ++ *reloc_addr = (unsigned long)tpnt->loadaddr ++ + rpnt->r_addend; ++ break; ++ default: ++ return -1; ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ if (_dl_debug_reloc && _dl_debug_detail) ++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", ++ old_val, *reloc_addr); ++#endif ++ ++ return 0; ++} ++ ++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ /* TODO: Might want to support this in order to get faster ++ * startup times... */ ++} ++ ++int _dl_parse_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, ++ _dl_do_reloc); ++} +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/resolve.S uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/resolve.S +--- uClibc-0.9.28/ldso/ldso/avr32/resolve.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/resolve.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,28 @@ ++/* ++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as ++ * indicated in register r12 and jumps to the resolved address. ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ * ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define ip r5 ++ ++ .text ++ .global _dl_linux_resolve ++ .type _dl_linux_resolve,@function ++_dl_linux_resolve: ++ /* The PLT code pushed r8 for us. It contains the address of this ++ function's GOT entry, that is entry 0. ip contains the address ++ of the GOT entry of the function we wanted to call. */ ++ stm --sp, r9-r12, lr ++ mov r11, r8 ++ sub r12, ip, r8 ++ rcall _dl_linux_resolver ++ mov ip, r12 ++ popm r8-r12,lr ++ mov pc, ip ++ .size _dl_linux_resolve, . - _dl_linux_resolve +diff -Nur uClibc-0.9.28/ldso/ldso/dl-startup.c uClibc-0.9.28-avr32-20060621/ldso/ldso/dl-startup.c +--- uClibc-0.9.28/ldso/ldso/dl-startup.c 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/dl-startup.c 2006-06-21 11:35:57.000000000 +0200 +@@ -217,7 +217,9 @@ + /* some arches (like MIPS) we have to tweak the GOT before relocations */ + PERFORM_BOOTSTRAP_GOT(tpnt); + +-#else ++#endif ++ ++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) + + /* OK, now do the relocations. We do not do a lazy binding here, so + that once we are done, we have considerably more flexibility. */ +@@ -259,7 +261,7 @@ + rel_addr += relative_count * sizeof(ELF_RELOC);; + } + +- rpnt = (ELF_RELOC *) (rel_addr + load_addr); ++ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */); + for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { + reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); + symtab_index = ELF_R_SYM(rpnt->r_info); +diff -Nur uClibc-0.9.28/libc/string/avr32/bcopy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/bcopy.S +--- uClibc-0.9.28/libc/string/avr32/bcopy.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/bcopy.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,15 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bcopy ++ .type bcopy, @function ++ .align 1 ++bcopy: ++ /* Swap the first two arguments */ ++ eor r11, r12 ++ eor r12, r11 ++ eor r11, r12 ++ rjmp memmove ++ .size bcopy, . - bcopy +diff -Nur uClibc-0.9.28/libc/string/avr32/bzero.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/bzero.S +--- uClibc-0.9.28/libc/string/avr32/bzero.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/bzero.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bzero ++ .type bzero, @function ++ .align 1 ++bzero: ++ mov r10, r11 ++ mov r11, 0 ++ rjmp memset +diff -Nur uClibc-0.9.28/libc/string/avr32/Makefile uClibc-0.9.28-avr32-20060621/libc/string/avr32/Makefile +--- uClibc-0.9.28/libc/string/avr32/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/Makefile 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,45 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../ ++include $(TOPDIR)Rules.mak ++ ++SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S ++SSRC += memset.S strcmp.S strlen.S ++# memchr.S, strcat.S, strcpy.S, strncpy.S is broken ++SOBJS := $(addprefix __avr32_,$(addsuffix .o,$(basename $(SSRC)))) ++ ++all: $(SOBJS) $(LIBC) ++ ++$(LIBC): ar-target ++ ++ar-target: $(SOBJS) ++ $(AR) $(ARFLAGS) $(LIBC) $(SOBJS) ++ ++$(SOBJS): __avr32_%.o: %.S ++ $(CC) $(ASFLAGS) -D$*=__avr32_$* -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $@ ++ ++clean: ++ $(RM) *.[oa] *~ core ++ ++stringtest.o: stringtest.c ++ $(CC) $(CFLAGS) -c $< -o $@ ++ ++stringtest: stringtest.o $(SOBJS) ++ $(CC) -static -o $@ $^ +diff -Nur uClibc-0.9.28/libc/string/avr32/memchr.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memchr.S +--- uClibc-0.9.28/libc/string/avr32/memchr.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memchr.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++#define chr r11 ++#define len r10 ++ ++ .text ++ .global memchr ++ .type memchr, @function ++memchr: ++ insert.b chr:l, chr ++ insert.h chr:t, chr ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: sub len, 4 ++ brlt 2f ++ ld.w r8, str++ ++ psub.b r9, r8, r11 ++ tnbz r9 ++ brne 1b ++ ++ sub str, 4 ++ extract.b r9, r8:t ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ extract.b r9, r8:u ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ extract.b r9, r8:l ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ retal str ++ ++2: sub len, -4 ++ reteq 0 ++ ++3: ld.ub r8, str++ ++ cp.w r8, 0 ++ reteq str ++ sub len, 1 ++ brne 3b ++ ++ retal 0 ++ ++.Lunaligned_str: ++1: sub len, 1 ++ retlt 0 ++ ld.ub r8, str++ ++ cp.b r8, r11 ++ reteq str ++ sub r9, 1 ++ brge 1b ++ ++ rjmp .Laligned_search +diff -Nur uClibc-0.9.28/libc/string/avr32/memcmp.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcmp.S +--- uClibc-0.9.28/libc/string/avr32/memcmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global memcmp ++ .type memcmp, @function ++ .align 1 ++memcmp: ++ cp.w len, 1 ++ retlt 0 ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ subfne len, 1 ++ brne 1b ++ ++ retal r8 ++ .size memcmp, . - memcmp ++ ++ .weak bcmp ++ bcmp = memcmp +diff -Nur uClibc-0.9.28/libc/string/avr32/memcpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcpy.S +--- uClibc-0.9.28/libc/string/avr32/memcpy.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcpy.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,106 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++/* Don't use r12 as dst since we must return it unmodified */ ++#define dst r9 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memcpy ++ .type memcpy, @function ++memcpy: ++ pref src[0] ++ mov dst, r12 ++ ++ /* If we have less than 32 bytes, don't do anything fancy */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, src++ ++ st.b dst++, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, dst ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ pref src[32] ++ ldm src, r0-r7 ++ sub src, -32 ++ stm dst, r0-r7 ++ sub dst, -32 ++ sub len, 32 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ ldm src, r0-r3 ++ sub src, -16 ++ sub len, 16 ++ stm dst, r0-r3 ++ sub dst, -16 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ neg len ++ add pc, pc, len << 2 ++ .rept 15 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ rsub r8, r8, 32 ++ sub len, r8 ++1: ld.ub r0, src++ ++ st.b dst++, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[0] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, src++ ++ st.w dst++, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ .size memcpy, . - memcpy +diff -Nur uClibc-0.9.28/libc/string/avr32/memmove.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memmove.S +--- uClibc-0.9.28/libc/string/avr32/memmove.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memmove.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,124 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r12 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memmove ++ .type memmove, @function ++memmove: ++ cp.w src, dst ++#ifdef memmove ++ brge optimized_memcpy ++#else ++ brge memcpy ++#endif ++ ++ add dst, len ++ add src, len ++ pref src[-1] ++ ++ /* ++ * The rest is basically the same as in memcpy.S except that ++ * the direction is reversed. ++ */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, --src ++ st.b --dst, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, r12 ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ pref src[-36] ++ sub src, 32 ++ ldm src, r0-r7 ++ sub dst, 32 ++ sub len, 32 ++ stm dst, r0-r7 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ sub src, 16 ++ ldm src, r0-r3 ++ sub dst, 16 ++ sub len, 16 ++ stm dst, r0-r3 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++#if 1 ++ sub len, -16 ++ breq 2f ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub len, 1 ++ brne 1b ++#else ++ neg len ++ add pc, pc, len << 2 ++ .rept 15 ++ ld.ub r0, --src ++ st.b --dst, r0 ++ .endr ++#endif ++ ++2: popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ rsub r8, r8, 32 ++ sub len, r8 ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[-4] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, --src ++ st.w --dst, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, --src ++ st.b --dst, r0 ++ .endr ++ ++ popm r0-r7, pc +diff -Nur uClibc-0.9.28/libc/string/avr32/memset.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memset.S +--- uClibc-0.9.28/libc/string/avr32/memset.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memset.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,54 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s r12 ++#define c r11 ++#define n r10 ++ ++ .text ++ .global memset ++ .type memset, @function ++ .align 1 ++memset: ++ cp.w n, 32 ++ mov r9, s ++ brge .Llarge_memset ++ ++ sub n, 1 ++ retlt s ++1: st.b s++, c ++ sub n, 1 ++ brge 1b ++ ++ retal r9 ++ ++.Llarge_memset: ++ mov r8, r11 ++ mov r11, 3 ++ insert.b r8:l, r8 ++ tst s, r11 ++ insert.h r8:t, r8 ++ breq 2f ++ ++1: st.b s++, r8 ++ sub n, 1 ++ tst s, r11 ++ brne 1b ++ ++2: mov r11, r9 ++ mov r9, r8 ++ sub n, 8 ++ ++3: st.d s++, r8 ++ sub n, 8 ++ brge 3b ++ ++ /* If we are done, n == -8 and we'll skip all st.b insns below */ ++ neg n ++ lsl n, 1 ++ add pc, n ++ .rept 7 ++ st.b s++, r8 ++ .endr ++ retal r11 +diff -Nur uClibc-0.9.28/libc/string/avr32/strcat.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcat.S +--- uClibc-0.9.28/libc/string/avr32/strcat.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcat.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,96 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define s1 r9 ++#define s2 r11 ++ ++ .text ++ .global strcat ++ .type strcat, @function ++ .align 1 ++strcat: ++ mov s1, r12 ++ ++ /* Make sure s1 is word-aligned */ ++ mov r10, s1 ++ andl r10, 3, COH ++ breq 2f ++ ++ add pc, pc, r10 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 2f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 3f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 4f ++ ++ /* Find the end of the first string */ ++5: ld.w r8, s1++ ++ tnbz r8 ++ brne 5b ++ ++ sub s1, 4 ++ ++ extract.b r10, r8:t ++ cp.w r10, 0 ++ breq 1f ++ sub s1, -1 ++ extract.b r10, r8:u ++ cp.w r10, 0 ++ breq 2f ++ sub s1, -1 ++ extract.b r10, r8:l ++ cp.w r10, 0 ++ breq 3f ++ sub s1, -1 ++ rjmp 4f ++ ++ /* Now, append s2 */ ++1: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++2: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++3: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++4: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++ ++ /* Copy one word at a time */ ++ ld.w r8, s2++ ++ tnbz r8 ++ breq 2f ++1: st.w r8, s2++ ++ ld.w r8, s2++ ++ tnbz r8 ++ brne 1b ++ ++ /* Copy the remaining bytes */ ++ extract.b r10, r8:t ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:u ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:l ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:b ++ st.b s1++, r10 ++ retal r12 ++ .size strcat, . - strcat +diff -Nur uClibc-0.9.28/libc/string/avr32/strcmp.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcmp.S +--- uClibc-0.9.28/libc/string/avr32/strcmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcmp.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,77 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global strcmp ++ .type strcmp, @function ++ .align 1 ++strcmp: ++ mov r8, 3 ++ tst s1, r8 ++ brne .Lunaligned_s1 ++ tst s2, r8 ++ brne .Lunaligned_s2 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne 2f ++ tnbz r8 ++ brne 1b ++ retal 0 ++ ++2: extract.b r12, r8:t ++ extract.b r11, r9:t ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ extract.b r12, r8:u ++ extract.b r11, r9:u ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ extract.b r12, r8:l ++ extract.b r11, r9:l ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ extract.b r12, r8:b ++ extract.b r11, r9:b ++ sub r12, r11 ++ retal r12 ++ ++.Lunaligned_s1: ++3: tst s1, r8 ++ breq 4f ++ ld.ub r10, s1++ ++ ld.ub r9, s2++ ++ sub r10, r9 ++ retne r10 ++ cp.w r9, 0 ++ brne 3b ++ retal r10 ++ ++4: tst s2, r8 ++ breq 1b ++ ++.Lunaligned_s2: ++ /* ++ * s1 and s2 can't both be aligned, and unaligned word loads ++ * can trigger spurious exceptions if we cross a page boundary. ++ * Do it the slow way... ++ */ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ cp.w r9, 0 ++ brne 1b ++ retal 0 +diff -Nur uClibc-0.9.28/libc/string/avr32/strcpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcpy.S +--- uClibc-0.9.28/libc/string/avr32/strcpy.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcpy.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,64 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * To reduce the size, this one might simply call strncpy with len = -1. ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strcpy, @function ++strcpy: ++ mov dst, r12 ++ ++ pref src[0] ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ rjmp 1b ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ extract.b r10, r8:t ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:u ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:l ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:b ++ st.b dst++, r10 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ rsub r8, r8, 4 ++ add pc, pc, r8 << 3 ++ nop ++ nop ++ ld.ub r10, src++ ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ ++ rjmp .Laligned_copy +diff -Nur uClibc-0.9.28/libc/string/avr32/stringtest.c uClibc-0.9.28-avr32-20060621/libc/string/avr32/stringtest.c +--- uClibc-0.9.28/libc/string/avr32/stringtest.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/stringtest.c 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,144 @@ ++ ++#include ++#include ++#include ++#include ++ ++#define BUF_SIZE (8 * 1024) ++ ++static char *buf1; ++static char *buf1_ref; ++static char *buf2; ++ ++extern void *optimized_memcpy(void *dest, void *src, size_t len); ++extern void *optimized_memmove(void *dest, void *src, size_t len); ++extern char *optimized_strcpy(char *dest, char *src); ++extern char *optimized_strncpy(char *dest, char *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("%4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++static void test_memcpy(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ int i; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memcpy with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ for (i = 0; i < 8192; i++) ++ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ for ( i = 0; i < 8192; i++) ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++static void test_memmove(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memmove with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ memmove(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf2 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf2"); ++ return 1; ++ } ++ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1"); ++ return 1; ++ } ++ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1_ref == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1_ref"); ++ return 1; ++ } ++ printf("\n === MEMCPY ===\n\n"); ++ ++ test_memcpy(0, 0, BUF_SIZE - 32); ++ test_memcpy(0, 0, 1); ++ test_memcpy(0, 0, 31); ++ test_memcpy(0, 0, 32); ++ test_memcpy(0, 0, 127); ++ test_memcpy(0, 0, 128); ++ test_memcpy(4, 4, BUF_SIZE - 32 - 4); ++ test_memcpy(1, 1, BUF_SIZE - 32 - 1); ++ test_memcpy(1, 1, 126); ++ test_memcpy(0, 3, 128); ++ test_memcpy(1, 4, 128); ++ test_memcpy(0, 0, 0); ++ ++ printf("\n === MEMMOVE ===\n\n"); ++ ++ test_memmove(0, 0, BUF_SIZE - 32); ++ test_memmove(0, 0, 1); ++ test_memmove(0, 0, 31); ++ test_memmove(0, 0, 32); ++ test_memmove(0, 0, BUF_SIZE - 33); ++ test_memmove(0, 0, 128); ++ test_memmove(4, 4, BUF_SIZE - 32 - 4); ++ test_memmove(1, 1, BUF_SIZE - 32 - 1); ++ test_memmove(1, 1, BUF_SIZE - 130); ++ test_memmove(0, 3, BUF_SIZE - 128); ++ test_memmove(1, 4, BUF_SIZE - 128); ++ test_memmove(0, 0, 0); ++ ++ return 0; ++} +diff -Nur uClibc-0.9.28/libc/string/avr32/strlen.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strlen.S +--- uClibc-0.9.28/libc/string/avr32/strlen.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strlen.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,52 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++ ++ .text ++ .global strlen ++ .type strlen, @function ++strlen: ++ mov r11, r12 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: ld.w r8, str++ ++ tnbz r8 ++ brne 1b ++ ++ sub r12, r11 ++ extract.b r9, r8:t ++ cp.w r9, 0 ++ subeq r12, 4 ++ reteq r12 ++ extract.b r9, r8:u ++ cp.w r9, 0 ++ subeq r12, 3 ++ reteq r12 ++ extract.b r9, r8:l ++ cp.w r9, 0 ++ subeq r12, 2 ++ reteq r12 ++ sub r12, 1 ++ retal r12 ++ ++.Lunaligned_str: ++ add pc, pc, r9 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ brne 1b ++ ++1: sub r12, 1 ++ sub r12, r11 ++ retal r12 +diff -Nur uClibc-0.9.28/libc/string/avr32/strncpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strncpy.S +--- uClibc-0.9.28/libc/string/avr32/strncpy.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strncpy.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,78 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strncpy, @function ++strncpy: ++ mov dst, r12 ++ ++ pref src[0] ++ mov dst, r12 ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++ sub r10, 4 ++ brlt 3f ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ sub r10, 4 ++ brne 1b ++ ++3: sub r10, -4 ++ reteq r12 ++ ++ /* This is safe as long as src is word-aligned and r10 > 0 */ ++ ld.w r8, src++ ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ extract.b r11, r8:t ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ extract.b r11, r8:u ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ extract.b r11, r8:l ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ extract.b r10, r8:b ++ st.b dst++, r10 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ min r8, r8, r10 ++ sub r10, r8 ++ sub r8, 1 ++ retlt r12 ++1: ld.ub r10, src++ ++ st.b dst++, r10 ++ sub r8, 1 ++ brge 1b ++ ++ rjmp .Laligned_copy +diff -Nur uClibc-0.9.28/libc/string/avr32/test_memcpy.c uClibc-0.9.28-avr32-20060621/libc/string/avr32/test_memcpy.c +--- uClibc-0.9.28/libc/string/avr32/test_memcpy.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/test_memcpy.c 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,66 @@ ++ ++#include ++#include ++ ++#define BUF_SIZE 32768 ++ ++static char buf1[BUF_SIZE] __attribute__((aligned(32))); ++static char buf1_ref[BUF_SIZE] __attribute__((aligned(32))); ++static char buf2[BUF_SIZE] __attribute__((aligned(32))); ++ ++extern void *new_memcpy(void *dest, void *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("% 4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++void test(int src_offset, int dst_offset, int len) ++{ ++ memset(buf1, 0x55, sizeof(buf1)); ++ memset(buf1_ref, 0x55, sizeof(buf1_ref)); ++ memset(buf2, 0xaa, sizeof(buf2)); ++ ++ printf("Testing with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ ++ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, sizeof(buf1)); ++ } ++} ++ ++int main(int argc, char *argv[]) ++{ ++ test(0, 0, BUF_SIZE); ++ test(0, 0, 1); ++ test(0, 0, 31); ++ test(0, 0, 32); ++ test(0, 0, 127); ++ test(0, 0, 128); ++ test(4, 4, BUF_SIZE - 4); ++ test(1, 1, BUF_SIZE - 1); ++ test(1, 1, 126); ++ test(0, 3, 128); ++ test(1, 4, 128); ++ ++ return 0; ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/atomicity.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,86 @@ ++/* Low-level functions for atomic operations. AVR32 version. ++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _ATOMICITY_H ++#define _ATOMICITY_H 1 ++ ++#include ++ ++static inline int ++__attribute__((unused)) ++exchange_and_add (volatile uint32_t *mem, int val) ++{ ++ int tmp, result; ++ ++ __asm__ __volatile__( ++ "/* Inline exchange and add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " add %1, %0, %4\n" ++ " stcond %2, %1\n" ++ " brne 1b" ++ : "=&r"(result), "=&r"(tmp), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++static inline void ++__attribute__((unused)) ++atomic_add (volatile uin32_t *mem, int val) ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline atomic add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " add %0, %3\n" ++ " stcond %2, %0\n" ++ " brne 1b" ++ : "=&r"(result), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++} ++ ++static inline int ++__attribute__((unused)) ++compare_and_swap(volatile long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* atomicity.h */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/byteswap.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* Macros to swap the order of bytes in integer values. ++ Copyright (C) 2005 Atmel Norway. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H ++# error "Never use directly; include instead." ++#endif ++ ++#ifndef _BITS_BYTESWAP_H ++#define _BITS_BYTESWAP_H 1 ++ ++/* Swap bytes in 16 bit value. */ ++#if defined __GNUC__ ++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) ++#else ++/* This is better than nothing. */ ++static __inline unsigned short int ++__bswap_16 (unsigned short int __bsx) ++{ ++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); ++} ++#endif ++ ++/* Swap bytes in 32 bit value. */ ++#if defined __GNUC__ ++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) ++#else ++static __inline unsigned int ++__bswap_32 (unsigned int __bsx) ++{ ++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | ++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); ++} ++#endif ++ ++#if defined __GNUC__ ++/* Swap bytes in 64 bit value. */ ++# define __bswap_constant_64(x) \ ++ ((((x) & 0xff00000000000000ull) >> 56) \ ++ | (((x) & 0x00ff000000000000ull) >> 40) \ ++ | (((x) & 0x0000ff0000000000ull) >> 24) \ ++ | (((x) & 0x000000ff00000000ull) >> 8) \ ++ | (((x) & 0x00000000ff000000ull) << 8) \ ++ | (((x) & 0x0000000000ff0000ull) << 24) \ ++ | (((x) & 0x000000000000ff00ull) << 40) \ ++ | (((x) & 0x00000000000000ffull) << 56)) ++ ++# define __bswap_64(x) \ ++ (__extension__ \ ++ ({ \ ++ union { \ ++ __extension__ unsigned long long int __ll; \ ++ unsigned int __l[2]; \ ++ } __w, __r; \ ++ if (__builtin_constant_p(x)) \ ++ __r.__ll = __bswap_constant_64(x); \ ++ else { \ ++ __w.__ll = (x); \ ++ __r.__l[0] = __bswap_32(__w.__l[1]); \ ++ __r.__l[1] = __bswap_32(__w.__l[0]); \ ++ } \ ++ __r.__ll; \ ++ })) ++#endif ++ ++#endif /* _BITS_BYTESWAP_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/endian.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/endian.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,7 @@ ++/* AVR32 is big-endian */ ++ ++#ifndef _ENDIAN_H ++# error "Never use directly; include instead." ++#endif ++ ++#define __BYTE_ORDER __BIG_ENDIAN +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/fcntl.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,167 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * This file is part of the Linux kernel ++ */ ++#ifndef _FCNTL_H ++# error "Never use directly; include instead." ++#endif ++ ++#include ++ ++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files ++ located on an ext2 file system */ ++#define O_ACCMODE 0003 ++#define O_RDONLY 00 ++#define O_WRONLY 01 ++#define O_RDWR 02 ++#define O_CREAT 0100 /* not fcntl */ ++#define O_EXCL 0200 /* not fcntl */ ++#define O_NOCTTY 0400 /* not fcntl */ ++#define O_TRUNC 01000 /* not fcntl */ ++#define O_APPEND 02000 ++#define O_NONBLOCK 04000 ++#define O_NDELAY O_NONBLOCK ++#define O_SYNC 010000 ++#define O_ASYNC 020000 ++ ++#ifdef __USE_GNU ++# define O_DIRECTORY 040000 /* must be a directory */ ++# define O_NOFOLLOW 0100000 /* don't follow links */ ++# define O_DIRECT 0200000 /* direct disk access */ ++#endif ++ ++#ifdef __USE_LARGEFILE64 ++# define O_LARGEFILE 0400000 ++#endif ++ ++/* For now Linux has synchronisity options for data and read operations. ++ We define the symbols here but let them do the same as O_SYNC since ++ this is a superset. */ ++#if defined __USE_POSIX199309 || defined __USE_UNIX98 ++# define O_DSYNC O_SYNC /* Synchronize data. */ ++# define O_RSYNC O_SYNC /* Synchronize read operations. */ ++#endif ++ ++#define F_DUPFD 0 /* dup */ ++#define F_GETFD 1 /* get close_on_exec */ ++#define F_SETFD 2 /* set/clear close_on_exec */ ++#define F_GETFL 3 /* get file->f_flags */ ++#define F_SETFL 4 /* set file->f_flags */ ++ ++#ifndef __USE_FILE_OFFSET64 ++# define F_GETLK 5 ++# define F_SETLK 6 ++# define F_SETLKW 7 ++#else ++# define F_GETLK F_GETLK64 ++# define F_SETLK F_SETLK64 ++# define F_SETLKW F_SETLKW64 ++#endif ++#define F_GETLK64 12 /* using 'struct flock64' */ ++#define F_SETLK64 13 ++#define F_SETLKW64 14 ++ ++#if defined __USE_BSD || defined __USE_XOPEN2K ++# define F_SETOWN 8 /* for sockets. */ ++# define F_GETOWN 9 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETSIG 10 /* for sockets. */ ++# define F_GETSIG 11 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETLEASE 1024 /* Set a lease. */ ++# define F_GETLEASE 1025 /* Enquire what lease is active. */ ++# define F_NOTIFY 1026 /* Request notfications on a directory. */ ++#endif ++ ++/* for F_[GET|SET]FL */ ++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++/* for posix fcntl() and lockf() */ ++#define F_RDLCK 0 ++#define F_WRLCK 1 ++#define F_UNLCK 2 ++ ++/* for old implementation of bsd flock () */ ++#define F_EXLCK 4 /* or 3 */ ++#define F_SHLCK 8 /* or 4 */ ++ ++/* for leases */ ++#define F_INPROGRESS 16 ++ ++#ifdef __USE_BSD ++/* operations for bsd flock(), also used by the kernel implementation */ ++# define LOCK_SH 1 /* shared lock */ ++# define LOCK_EX 2 /* exclusive lock */ ++# define LOCK_NB 4 /* or'd with one of the above to prevent ++ blocking */ ++# define LOCK_UN 8 /* remove lock */ ++#endif ++ ++#ifdef __USE_GNU ++# define LOCK_MAND 32 /* This is a mandatory flock */ ++# define LOCK_READ 64 /* ... Which allows concurrent ++ read operations */ ++# define LOCK_WRITE 128 /* ... Which allows concurrent ++ write operations */ ++# define LOCK_RW 192 /* ... Which allows concurrent ++ read & write ops */ ++#endif ++ ++#ifdef __USE_GNU ++/* Types of directory notifications that may be requested with F_NOTIFY. */ ++# define DN_ACCESS 0x00000001 /* File accessed. */ ++# define DN_MODIFY 0x00000002 /* File modified. */ ++# define DN_CREATE 0x00000004 /* File created. */ ++# define DN_DELETE 0x00000008 /* File removed. */ ++# define DN_RENAME 0x00000010 /* File renamed. */ ++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ ++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ ++#endif ++ ++struct flock { ++ short l_type; ++ short l_whence; ++#ifndef __USE_FILE_OFFSET64 ++ __off_t l_start; ++ __off_t l_len; ++#else ++ __off64_t l_start; ++ __off64_t l_len; ++#endif ++ __pid_t l_pid; ++}; ++ ++#ifdef __USE_LARGEFILE64 ++struct flock64 { ++ short l_type; ++ short l_whence; ++ __off64_t l_start; ++ __off64_t l_len; ++ __pid_t l_pid; ++}; ++#endif ++ ++/* Define some more compatibility macros to be backward compatible with ++ * BSD systems which did not managed to hide these kernel macros. */ ++#ifdef __USE_BSD ++# define FAPPEND O_APPEND ++# define FFSYNC O_FSYNC ++# define FASYNC O_ASYNC ++# define FNONBLOCK O_NONBLOCK ++# define FNDELAY O_NDELAY ++#endif /* Use BSD. */ ++ ++/* Advise to `posix_fadvise'. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ ++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ ++#endif +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_stat.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,63 @@ ++#ifndef _BITS_STAT_STRUCT_H ++#define _BITS_STAT_STRUCT_H ++ ++/* ++ * This file provides struct stat, taken from kernel 2.6.4 ++ * (include/asm-avr32/stat.h revision 1.1). ++ */ ++ ++struct kernel_stat { ++ unsigned long st_dev; ++ unsigned long st_ino; ++ unsigned short st_mode; ++ unsigned short st_nlink; ++ unsigned short st_uid; ++ unsigned short st_gid; ++ unsigned long st_rdev; ++ unsigned long st_size; ++ unsigned long st_blksize; ++ unsigned long st_blocks; ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++#define STAT_HAVE_NSEC 1 ++ ++struct kernel_stat64 { ++ unsigned long long st_dev; ++ ++ unsigned long long st_ino; ++ unsigned int st_mode; ++ unsigned int st_nlink; ++ ++ unsigned long st_uid; ++ unsigned long st_gid; ++ ++ unsigned long long st_rdev; ++ ++ long long st_size; ++ unsigned long __pad1; ++ unsigned long st_blksize; ++ ++ unsigned long long st_blocks; ++ ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++#endif /* _BITS_STAT_STRUCT_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_types.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,56 @@ ++/* Note that we use the exact same include guard #define names ++ * as asm/posix_types.h. This will avoid gratuitous conflicts ++ * with the posix_types.h kernel header, and will ensure that ++ * our private content, and not the kernel header, will win. ++ * -Erik ++ */ ++#ifndef __ASM_AVR32_POSIX_TYPES_H ++#define __ASM_AVR32_POSIX_TYPES_H ++ ++/* ++ * This file is generally used by user-level software, so you need to ++ * be a little careful about namespace pollution etc. Also, we cannot ++ * assume GCC is being used. ++ */ ++ ++typedef unsigned long __kernel_dev_t; ++typedef unsigned long __kernel_ino_t; ++typedef unsigned short __kernel_mode_t; ++typedef unsigned short __kernel_nlink_t; ++typedef long __kernel_off_t; ++typedef int __kernel_pid_t; ++typedef unsigned short __kernel_ipc_pid_t; ++typedef unsigned int __kernel_uid_t; ++typedef unsigned int __kernel_gid_t; ++typedef unsigned long __kernel_size_t; ++typedef int __kernel_ssize_t; ++typedef int __kernel_ptrdiff_t; ++typedef long __kernel_time_t; ++typedef long __kernel_suseconds_t; ++typedef long __kernel_clock_t; ++typedef int __kernel_timer_t; ++typedef int __kernel_clockid_t; ++typedef int __kernel_daddr_t; ++typedef char * __kernel_caddr_t; ++typedef unsigned short __kernel_uid16_t; ++typedef unsigned short __kernel_gid16_t; ++typedef unsigned int __kernel_uid32_t; ++typedef unsigned int __kernel_gid32_t; ++ ++typedef unsigned short __kernel_old_uid_t; ++typedef unsigned short __kernel_old_gid_t; ++typedef unsigned short __kernel_old_dev_t; ++ ++#ifdef __GNUC__ ++typedef long long __kernel_loff_t; ++#endif ++ ++typedef struct { ++#if defined(__USE_ALL) ++ int val[2]; ++#else ++ int __val[2]; ++#endif ++} __kernel_fsid_t; ++ ++#endif /* __ASM_AVR32_POSIX_TYPES_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/machine-gmon.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,69 @@ ++/* Machine-dependent definitions for profiling support. AVR32 version. ++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define mcount_internal __mcount_internal ++ ++#define _MCOUNT_DECL(frompc, selfpc) \ ++static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc) ++ ++/* ++ * This mcount implementation expects to get called after the prologue ++ * has been run. It also expects that r7 contains a valid frame ++ * pointer. ++ * ++ * When profiling, the compiler should generate something like this at ++ * each function entry: ++ * ++ * pushm r0-r7,lr // lr mandatory, others optional ++ * mov r7, sp ++ * // rest of prologue goes here ++ * mcall pc[.LC1 - .] ++ * // rest of function goes here ++ * .LC1: ++ * .long mcount ++ * ++ * or for PIC: ++ * ++ * pushm r0-r7,lr ++ * mov r7, sp ++ * // rest of prologue goes here ++ * lddpc r0, .LC1 ++ * .L1: rsub r0, pc ++ * mcall r0[mcount@GOT] ++ * // rest of function goes here ++ * .LC1: ++ * .long .L1 - _GLOBAL_OFFSET_TABLE_ ++ * ++ * This way, when mcount() is called, r7 points to the calling ++ * function's return address. It is guaranteed that calling mcount ++ * will clobber no registers except LR, which is unavoidable. ++ */ ++#define MCOUNT asm( \ ++ " .align 4\n" \ ++ " .global _mcount\n" \ ++ " .type _mcount,@function\n" \ ++ "_mcount:\n" \ ++ " pushm r8-r12,lr\n" \ ++ " mov r11, lr\n" \ ++ " ld.w r12, r7[0]\n" \ ++ " rcall __mcount_internal\n" \ ++ " popm r8-r12,pc\n" \ ++ " .size _mcount, . - _mcount\n" \ ++ " .weak mcount\n" \ ++ " mcount = _mcount"); +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/mman.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/mman.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* Definitions for POSIX memory map interface. Linux/AVR32 version. ++ Copyright (C) 1997, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_MMAN_H ++# error "Never include this file directly. Use instead" ++#endif ++ ++/* The following definitions basically come from the kernel headers. ++ But the kernel header is not namespace clean. */ ++ ++ ++/* Protections are chosen from these bits, OR'd together. The ++ implementation does not necessarily support PROT_EXEC or PROT_WRITE ++ without PROT_READ. The only guarantees are that no writing will be ++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ ++ ++#define PROT_READ 0x1 /* Page can be read. */ ++#define PROT_WRITE 0x2 /* Page can be written. */ ++#define PROT_EXEC 0x4 /* Page can be executed. */ ++#define PROT_NONE 0x0 /* Page can not be accessed. */ ++ ++/* Sharing types (must choose one and only one of these). */ ++#define MAP_SHARED 0x01 /* Share changes. */ ++#define MAP_PRIVATE 0x02 /* Changes are private. */ ++#ifdef __USE_MISC ++# define MAP_TYPE 0x0f /* Mask for type of mapping. */ ++#endif ++ ++/* Other flags. */ ++#define MAP_FIXED 0x10 /* Interpret addr exactly. */ ++#ifdef __USE_MISC ++# define MAP_FILE 0 ++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ ++# define MAP_ANON MAP_ANONYMOUS ++#endif ++ ++/* These are Linux-specific. */ ++#ifdef __USE_MISC ++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ ++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ ++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ ++# define MAP_LOCKED 0x2000 /* Lock the mapping. */ ++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ ++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ ++# define MAP_NONBLOCK 0x10000 /* do not block on IO */ ++#endif ++ ++/* Flags to `msync'. */ ++#define MS_ASYNC 1 /* Sync memory asynchronously. */ ++#define MS_SYNC 4 /* Synchronous memory sync. */ ++#define MS_INVALIDATE 2 /* Invalidate the caches. */ ++ ++/* Flags for `mlockall'. */ ++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ ++#define MCL_FUTURE 2 /* Lock all additions to address ++ space. */ ++ ++/* Flags for `mremap'. */ ++#ifdef __USE_GNU ++# define MREMAP_MAYMOVE 1 ++#endif ++ ++/* Advise to `madvise'. */ ++#ifdef __USE_BSD ++# define MADV_NORMAL 0 /* No further special treatment. */ ++# define MADV_RANDOM 1 /* Expect random page references. */ ++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define MADV_WILLNEED 3 /* Will need these pages. */ ++# define MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif ++ ++/* The POSIX people had to invent similar names for the same things. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/profil-counter.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Low-level statistical profiling support function. Linux/AVR32 version. ++ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include ++ ++void ++profil_counter(int signo, siginfo_t *si, struct sigcontext *sc) ++{ ++ profil_count((void *)sc->pc); ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/setjmp.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,21 @@ ++/* ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++#ifndef _SETJMP_H ++# error "Never include directly; use instead." ++#endif ++ ++#ifndef _ASM ++/* ++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are ++ * not saved. ++ */ ++typedef int __jmp_buf[11]; ++#endif ++ ++#define __JMP_BUF_SP 4 ++ ++/* Test if longjmp to JMPBUF would unwind the frame containing a local ++ variable at ADDRESS. */ ++#define _JMPBUF_UNWINDS(jmpbuf, address) \ ++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/syscalls.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,143 @@ ++#ifndef _SYSCALL_H ++# error "Never use directly; include instead." ++#endif ++ ++/* ++ * This includes the `__NR_' syscall numbers taken from the ++ * Linux kernel header files. It also defines the traditional ++ * `SYS_' macros for older programs. ++ */ ++#include ++ ++#ifndef __set_errno ++# define __set_errno(val) (*__errno_location()) = (val) ++#endif ++#ifndef SYS_ify ++# define SYS_ify(syscall_name) (__NR_##syscall_name) ++#endif ++ ++#ifndef __ASSEMBLER__ ++ ++#undef _syscall0 ++#define _syscall0(type,name) \ ++ type name(void) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 0)); \ ++ } ++ ++#undef _syscall1 ++#define _syscall1(type,name,type1,arg1) \ ++ type name(type1 arg1) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ ++ } ++ ++#undef _syscall2 ++#define _syscall2(type,name,type1,arg1,type2,arg2) \ ++ type name(type1 arg1, type2 arg2) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ ++ } ++ ++#undef _syscall3 ++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ ++ type name(type1 arg1, type2 arg2, type3 arg3) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 3, arg1, \ ++ arg2, arg3)); \ ++ } ++ ++#undef _syscall4 ++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ ++ arg3, arg4)); \ ++ } ++ ++#undef _syscall5 ++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ ++ arg3, arg4, arg5)); \ ++ } ++ ++#undef _syscall6 ++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5,type6,arg6) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5, type6 arg6) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ ++ arg4, arg5, arg6)); \ ++ } ++ ++#undef unlikely ++#define unlikely(x) __builtin_expect((x), 0) ++ ++#undef INLINE_SYSCALL ++#define INLINE_SYSCALL(name, nr, args...) \ ++ ({ \ ++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ ++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ ++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ ++ _sys_result = (unsigned int) -1; \ ++ } \ ++ (int) _sys_result; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) do { } while(0) ++ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++ ({ \ ++ register int _a1 asm ("r12"); \ ++ register int _scno asm("r8") = SYS_ify(name); \ ++ LOAD_ARGS_##nr (args); \ ++ asm volatile ("scall /* syscall " #name " */" \ ++ : "=r" (_a1) \ ++ : "r"(_scno) ASM_ARGS_##nr \ ++ : "lr", "cc", "memory"); \ ++ _a1; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_ERROR_P ++#define INTERNAL_SYSCALL_ERROR_P(val, err) \ ++ ((unsigned int)(val) >= 0xfffff001U) ++ ++#undef INTERNAL_SYSCALL_ERRNO ++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) ++ ++#define LOAD_ARGS_0() do { } while(0) ++#define ASM_ARGS_0 ++#define LOAD_ARGS_1(a1) \ ++ _a1 = (int) (a1); \ ++ LOAD_ARGS_0() ++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) ++#define LOAD_ARGS_2(a1, a2) \ ++ register int _a2 asm("r11") = (int)(a2); \ ++ LOAD_ARGS_1(a1) ++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) ++#define LOAD_ARGS_3(a1, a2, a3) \ ++ register int _a3 asm("r10") = (int)(a3); \ ++ LOAD_ARGS_2(a1, a2) ++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) ++#define LOAD_ARGS_4(a1, a2, a3, a4) \ ++ register int _a4 asm("r9") = (int)(a4); \ ++ LOAD_ARGS_3(a1, a2, a3) ++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) ++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ ++ register int _a5 asm("r5") = (int)(a5); \ ++ LOAD_ARGS_4(a1, a2, a3, a4) ++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) ++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ ++ register int _a6 asm("r3") = (int)(a6); \ ++ LOAD_ARGS_5(a1, a2, a3, a4, a5) ++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) ++ ++#endif /* __ASSEMBLER__ */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/wordsize.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1 @@ ++#define __WORDSIZE 32 +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/brk.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/brk.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++ ++void *__curbrk = 0; ++ ++int brk (void *addr) ++{ ++ void *newbrk; ++ ++ newbrk = INLINE_SYSCALL(brk, 1, addr); ++ ++ __curbrk = newbrk; ++ ++ if (newbrk < addr) { ++ __set_errno (ENOMEM); ++ return -1; ++ } ++ ++ return 0; ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-_setjmp.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 0) */ ++ .global _setjmp ++ .type _setjmp,"function" ++ .align 1 ++_setjmp: ++ mov r11, 0 ++ bral __sigsetjmp_internal ++ .size _setjmp, . - _setjmp +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-setjmp.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 1) */ ++ .global setjmp ++ .type setjmp,"function" ++ .align 1 ++setjmp: ++ mov r11, 1 ++ bral __sigsetjmp_internal ++ .size setjmp, . - setjmp +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/clone.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/clone.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,37 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++ ++/* ++ * I don't know if we can be absolutely certain that the fn and arg ++ * parameters are preserved when returning as the child. If the ++ * compiler stores them in registers (r0-r7), they should be. ++ */ ++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) ++{ ++ register int (*_fn)(void *arg) = fn; ++ register void *_arg = arg; ++ int err; ++ ++ /* Sanity check the arguments */ ++ err = -EINVAL; ++ if (!fn) ++ goto syscall_error; ++ if (!child_stack) ++ goto syscall_error; ++ ++ err = INLINE_SYSCALL(clone, 2, flags, child_stack); ++ if (err < 0) ++ goto syscall_error; ++ else if (err != 0) ++ return err; ++ ++ _exit(_fn(_arg)); ++ ++syscall_error: ++ __set_errno (-err); ++ return -1; ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crt1.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crt1.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,93 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * When we enter _start, the stack looks like this: ++ * argc argument counter ++ * argv[0] pointer to program name ++ * argv[1..argc-1] pointers to program args ++ * NULL ++ * env[0..N] pointers to environment variables ++ * NULL ++ * ++ * r12 contains a function pointer to be registered with `atexit'. ++ * This is how the dynamic linker arranges to have DT_FINI functions ++ * called for shared libraries that have been loaded before this ++ * code runs. ++ * ++ * We're going to call the following function: ++ * __uClibc_main(int (*main)(int, char **, char **), int argc, ++ * char **argv, void (*app_init)(void), void (*app_fini)(void), ++ * void (*rtld_fini)(void), void *stack_end) ++ * ++ * So we need to set up things as follows: ++ * r12 = address of main ++ * r11 = argc ++ * r10 = &argv[0] ++ * r9 = address of _init ++ * r8 = address of _fini ++ * sp[0] = whatever we got passed in r12 ++ */ ++ ++#include ++ ++ .text ++ .global _start ++ .type _start, @function ++_start: ++ /* Clear the frame pointer and link register since this is the outermost frame. */ ++ mov r7, 0 ++ mov lr, 0 ++ ++ ld.w r11, sp++ /* argc */ ++ mov r10, sp /* &argv[0] */ ++ ++ st.w --sp, r10 /* stack_end */ ++ st.w --sp, r12 /* rtld_fini */ ++ ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++.L_RGOT: ++ rsub r6, pc ++ lda.w r9, _init ++ lda.w r8, _fini ++ lda.w r12, main ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ call __uClibc_main ++ ++ .align 2 ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++ lddpc r9, __init_addr /* app_init */ ++ lddpc r8, __fini_addr /* app_fini */ ++ lddpc r12, __main_addr /* main */ ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ lddpc pc, ___uClibc_main_addr ++ ++ .align 2 ++__init_addr: ++ .long _init ++__fini_addr: ++ .long _fini ++__main_addr: ++ .long main ++___uClibc_main_addr: ++ .long __uClibc_main ++#endif ++ .size _start, . - _start ++ ++ /* ++ * The LSB says we need this. ++ */ ++ .section ".note.ABI-tag", "a" ++ .align 4 ++ .long 2f - 1f /* namesz */ ++ .long 4f - 3f /* descsz */ ++ .long 1 /* type */ ++1: .asciz "GNU" /* name */ ++2: .align 4 ++3: .long 0 /* Linux executable */ ++ .long 2,6,0 /* Earliest compatible kernel */ ++4: .align 4 +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crti.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crti.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,17 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++_init: ++ /* Use a four-byte instruction to avoid NOPs */ ++ stm --sp, r0-r7,lr ++ .align 2 ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++_fini: ++ stm --sp, r0-r7,lr ++ .align 2 +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crtn.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crtn.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,14 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++ ldm sp++, r0-r7,pc ++ .size _init, . - _init ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++ ldm sp++, r0-r7,pc ++ .size _fini, . - _fini +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/__longjmp.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/__longjmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,17 @@ ++/* longjmp for AVR32 ++ * ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ .global __longjmp ++ .type __longjmp,"function" ++ .align 1 ++__longjmp: ++ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ mov r12, r11 /* get the return value right */ ++ mustr r8 /* restore status register (lower half) */ ++ cp r12, 0 /* can't return zero */ ++ frs ++ moveq r12, 1 ++ mov pc,lr ++ .size __longjmp, . - __longjmp +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/Makefile +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/Makefile 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,93 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../../ ++include $(TOPDIR)Rules.mak ++ASFLAGS=$(CFLAGS) ++ ++CRT_SRC = crt1.S ++CRT_OBJ = crt1.o ++SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ)) ++CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o ++ ++SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \ ++ bsd-_setjmp.S sigrestorer.S syscall.S ++SOBJS=$(patsubst %.S,%.o, $(SSRC)) ++ ++CSRC=clone.c brk.c sigaction.c mmap.c ++COBJS=$(patsubst %.c,%.o, $(CSRC)) ++ ++OBJS=$(SOBJS) $(COBJS) ++ ++OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS) ++ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ ++ ++$(CRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SCRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SOBJS): %.o : %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(COBJS): %.o : %.c ++ $(CC) $(CFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) ++crti.o: crti.S ++ $(CC) $(ASFLAGS) -c crti.S -o crti.o ++ ++$(TOPDIR)lib/crti.o: crti.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crti.o $(TOPDIR)lib/ ++ ++crtn.o: crtn.S ++ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o ++ ++$(TOPDIR)lib/crtn.o: crtn.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crtn.o $(TOPDIR)lib/ ++else ++$(TOPDIR)lib/crti.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o ++$(TOPDIR)lib/crtn.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o ++endif ++ ++ ++headers: ++# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/ ++ ++clean: ++ $(RM) *.[oa] *~ core ++ $(RM) bits/sysnum.h ++ $(RM) gmon-start.S ++ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/_mmap.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/_mmap.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++#define __NR_mmap2 __NR_mmap ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/mmap.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/mmap.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/setjmp.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/setjmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#define _SETJMP_H ++#define _ASM ++#include ++ ++ .text ++ ++ .global __sigsetjmp ++ .type __sigsetjmp,"function" ++ ++ /* Create a global, hidden symbol for use by setjmp() and _setjmp(). ++ If it's not hidden, the linker will complain about a relative ++ jump to a dynamic symbol when building a shared library. ++ ++ Also, if a user overrides the __sigsetjmp function, he might not ++ expect the setjmp() and _setjmp() function to effectively be ++ overridden as well. */ ++ .global __sigsetjmp_internal ++ .hidden __sigsetjmp_internal ++ .type __sigsetjmp_internal,"function" ++ .align 1 ++__sigsetjmp: ++__sigsetjmp_internal: ++ mustr r8 ++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ ++ /* Make a tail call to __sigjmp_save; it takes the same args. */ ++#ifdef __PIC__ ++ mov r9, r6 ++ lddpc r6, .LG ++.L1: rsub r6, pc ++ ld.w r8, r6[__sigjmp_save@got] ++ mov r6, r9 ++ mov pc, r8 ++ ++ .align 2 ++.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_ ++#else ++ rjmp __sigjmp_save ++#endif ++ .size __sigsetjmp, . - __sigsetjmp +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigaction.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigaction.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++#define SA_RESTORER 0x04000000 ++extern void __default_rt_sa_restorer(void); ++ ++/* ++ * If act is not NULL, change the action for sig to *act. ++ * If oact is not NULL, put the old action for sig in *oact. ++ */ ++int __libc_sigaction(int signum, const struct sigaction *act, ++ struct sigaction *oldact) ++{ ++ struct kernel_sigaction kact, koact; ++ int result; ++ ++ if (act) { ++ kact.k_sa_handler = act->sa_handler; ++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); ++ kact.sa_flags = act->sa_flags; ++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) ++ kact.sa_restorer = act->sa_restorer; ++ else ++ kact.sa_restorer = __default_rt_sa_restorer; ++ kact.sa_flags |= SA_RESTORER; ++ } ++ ++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, ++ oldact ? __ptrvalue(&koact) : NULL, ++ _NSIG / 8); ++ ++ if (oldact && result >= 0) { ++ oldact->sa_handler = koact.k_sa_handler; ++ memcpy(&oldact->sa_mask, &koact.sa_mask, ++ sizeof(oldact->sa_mask)); ++ oldact->sa_flags = koact.sa_flags; ++ oldact->sa_restorer = koact.sa_restorer; ++ } ++ ++ return result; ++} ++ ++weak_alias(__libc_sigaction, sigaction) +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigrestorer.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigrestorer.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++ ++ .global __default_rt_sa_restorer ++ .type __default_rt_sa_restorer,"function" ++ .align 1 ++__default_rt_sa_restorer: ++ mov r8, __NR_rt_sigreturn ++ scall +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/elf.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/elf.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_ELF_H ++#define _SYS_ELF_H 1 ++ ++#warning "This header is obsolete; use instead." ++ ++#include ++ ++#endif /* sys/elf.h */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/io.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/io.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,48 @@ ++/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_IO_H ++ ++#define _SYS_IO_H 1 ++#include ++ ++__BEGIN_DECLS ++ ++/* If TURN_ON is TRUE, request for permission to do direct i/o on the ++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O ++ permission off for that range. This call requires root privileges. */ ++extern int ioperm (unsigned long int __from, unsigned long int __num, ++ int __turn_on) __THROW; ++ ++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, ++ permission to access any I/O port is granted. This call requires ++ root privileges. */ ++extern int iopl (int __level) __THROW; ++ ++/* The functions that actually perform reads and writes. */ ++extern unsigned char inb (unsigned long int port) __THROW; ++extern unsigned short int inw (unsigned long int port) __THROW; ++extern unsigned long int inl (unsigned long int port) __THROW; ++ ++extern void outb (unsigned char value, unsigned long int port) __THROW; ++extern void outw (unsigned short value, unsigned long int port) __THROW; ++extern void outl (unsigned long value, unsigned long int port) __THROW; ++ ++__END_DECLS ++ ++#endif /* _SYS_IO_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/procfs.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/procfs.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,123 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_PROCFS_H ++#define _SYS_PROCFS_H 1 ++ ++/* This is somewhat modelled after the file of the same name on SVR4 ++ systems. It provides a definition of the core file format for ELF ++ used on Linux. It doesn't have anything to do with the /proc file ++ system, even though Linux has one. ++ ++ Anyway, the whole purpose of this file is for GDB and GDB only. ++ Don't read too much into it. Don't use it for anything other than ++ GDB unless you know what you are doing. */ ++ ++#include ++#include ++#include ++#include ++ ++__BEGIN_DECLS ++ ++/* Type for a general-purpose register. */ ++typedef unsigned long elf_greg_t; ++ ++/* And the whole bunch of them. We could have used `struct ++ user_regs' directly in the typedef, but tradition says that ++ the register set is an array, which does have some peculiar ++ semantics, so leave it that way. */ ++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++/* Register set for the floating-point registers. */ ++typedef struct user_fpregs elf_fpregset_t; ++ ++/* Signal info. */ ++struct elf_siginfo ++ { ++ int si_signo; /* Signal number. */ ++ int si_code; /* Extra code. */ ++ int si_errno; /* Errno. */ ++ }; ++ ++/* Definitions to generate Intel SVR4-like core files. These mostly ++ have the same names as the SVR4 types with "elf_" tacked on the ++ front to prevent clashes with Linux definitions, and the typedef ++ forms have been avoided. This is mostly like the SVR4 structure, ++ but more Linuxy, with things that Linux does not support and which ++ GDB doesn't really use excluded. */ ++ ++struct elf_prstatus ++ { ++ struct elf_siginfo pr_info; /* Info associated with signal. */ ++ short int pr_cursig; /* Current signal. */ ++ unsigned long int pr_sigpend; /* Set of pending signals. */ ++ unsigned long int pr_sighold; /* Set of held signals. */ ++ __pid_t pr_pid; ++ __pid_t pr_ppid; ++ __pid_t pr_pgrp; ++ __pid_t pr_sid; ++ struct timeval pr_utime; /* User time. */ ++ struct timeval pr_stime; /* System time. */ ++ struct timeval pr_cutime; /* Cumulative user time. */ ++ struct timeval pr_cstime; /* Cumulative system time. */ ++ elf_gregset_t pr_reg; /* GP registers. */ ++ int pr_fpvalid; /* True if math copro being used. */ ++ }; ++ ++ ++#define ELF_PRARGSZ (80) /* Number of chars for args. */ ++ ++struct elf_prpsinfo ++ { ++ char pr_state; /* Numeric process state. */ ++ char pr_sname; /* Char for pr_state. */ ++ char pr_zomb; /* Zombie. */ ++ char pr_nice; /* Nice val. */ ++ unsigned long int pr_flag; /* Flags. */ ++ unsigned short int pr_uid; ++ unsigned short int pr_gid; ++ int pr_pid, pr_ppid, pr_pgrp, pr_sid; ++ /* Lots missing */ ++ char pr_fname[16]; /* Filename of executable. */ ++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ ++ }; ++ ++/* The rest of this file provides the types for emulation of the ++ Solaris interfaces that should be implemented by ++ users of libthread_db. */ ++ ++/* Addresses. */ ++typedef void *psaddr_t; ++ ++/* Register sets. Linux has different names. */ ++typedef elf_gregset_t prgregset_t; ++typedef elf_fpregset_t prfpregset_t; ++ ++/* We don't have any differences between processes and threads, ++ therefore have only one PID type. */ ++typedef __pid_t lwpid_t; ++ ++/* Process status and info. In the end we do provide typedefs for them. */ ++typedef struct elf_prstatus prstatus_t; ++typedef struct elf_prpsinfo prpsinfo_t; ++ ++__END_DECLS ++ ++#endif /* sys/procfs.h */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/ucontext.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,94 @@ ++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Linux/AVR32 ABI compliant context switching support. */ ++ ++#ifndef _SYS_UCONTEXT_H ++#define _SYS_UCONTEXT_H 1 ++ ++#include ++#include ++#include ++#include ++ ++typedef int greg_t; ++ ++/* Number of general registers. */ ++#define NGREG 16 ++ ++/* Container for all general registers. */ ++typedef elf_gregset_t gregset_t; ++ ++/* Number of each register is the `gregset_t' array. */ ++enum ++{ ++ R0 = 0, ++#define R0 R0 ++ R1 = 1, ++#define R1 R1 ++ R2 = 2, ++#define R2 R2 ++ R3 = 3, ++#define R3 R3 ++ R4 = 4, ++#define R4 R4 ++ R5 = 5, ++#define R5 R5 ++ R6 = 6, ++#define R6 R6 ++ R7 = 7, ++#define R7 R7 ++ R8 = 8, ++#define R8 R8 ++ R9 = 9, ++#define R9 R9 ++ R10 = 10, ++#define R10 R10 ++ R11 = 11, ++#define R11 R11 ++ R12 = 12, ++#define R12 R12 ++ R13 = 13, ++#define R13 R13 ++ R14 = 14, ++#define R14 R14 ++ R15 = 15 ++#define R15 R15 ++}; ++ ++/* Structure to describe FPU registers. */ ++typedef elf_fpregset_t fpregset_t; ++ ++/* Context to describe whole processor state. */ ++typedef struct ++ { ++ gregset_t gregs; ++ fpregset_t fpregs; ++ } mcontext_t; ++ ++/* Userlevel context. */ ++typedef struct ucontext ++{ ++ unsigned long uc_flags; ++ struct ucontext *uc_link; ++ stack_t uc_stack; ++ struct sigcontext uc_mcontext; ++ sigset_t uc_sigmask; /* mask last for extensibility */ ++} ucontext_t; ++ ++#endif /* sys/ucontext.h */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/user.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/user.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,46 @@ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H ++ ++struct user_fpregs ++{ ++ ++}; ++ ++struct user_regs ++{ ++ unsigned long sr; ++ unsigned long pc; ++ unsigned long lr; ++ unsigned long sp; ++ unsigned long r12; ++ unsigned long r11; ++ unsigned long r10; ++ unsigned long r9; ++ unsigned long r8; ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++ unsigned long r12_orig; ++}; ++ ++struct user ++{ ++ struct user_regs regs; /* general registers */ ++ size_t u_tsize; /* text size (pages) */ ++ size_t u_dsize; /* data size (pages) */ ++ size_t u_ssize; /* stack size (pages) */ ++ unsigned long start_code; /* text starting address */ ++ unsigned long start_data; /* data starting address */ ++ unsigned long start_stack; /* stack starting address */ ++ long int signal; /* signal causing core dump */ ++ struct user_regs * u_ar0; /* help gdb find registers */ ++ unsigned long magic; /* identifies a core file */ ++ char u_comm[32]; /* user command name */ ++}; ++ ++#endif /* _SYS_USER_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/syscall.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/syscall.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,81 @@ ++/* ++ * syscall for AVR32/uClibc ++ * ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU Library 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 Library General Public License ++ * for more details. ++ * ++ * You should have received a copy of the GNU Library General Public License ++ * along with this program; if not, write to the Free Software Foundation, ++ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++#include ++ ++ .text ++ ++ /* ++ * long int syscall(long int sysno, ...) ++ */ ++ .global syscall ++ .type syscall, @function ++ .align 2 ++syscall: ++ stm --sp, r3,r5,lr ++ sub lr, sp, -12 ++ mov r8, r12 ++ ldm lr, r3,r5,r9-r12 ++ scall ++ cp.w r12, -4095 ++ brlo .Ldone ++ ++#ifdef __PIC__ ++ lddpc r5, .Lgot ++.Lgotcalc: ++ rsub r5, pc ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall r5[__errno_location@got] ++ st.w r12[0], r3 ++# else ++ ld.w r3, r5[errno@got] ++ st.w r3[0], r12 ++# endif ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall .Lerrno_location ++ st.w r12[0], r3 ++# else ++ lddpc r3, .Lerrno ++ st.w r3[0], r12 ++# endif ++#endif ++ mov r12, -1 ++ ++.Ldone: ++ ldm sp++, r3,r5,pc ++ ++ .align 2 ++#ifdef __PIC__ ++.Lgot: ++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++.Lerrno_location: ++ .long __errno_location ++# else ++.Lerrno: ++ .long errno ++# endif ++#endif ++ ++ ++ .size syscall, . - syscall +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/vfork.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/vfork.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,55 @@ ++ /* ++ * vfork for uClibc ++ * ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++ /* ++ * Clone the process without copying the address space. The ++ * calling process is suspended until the child either exits ++ * or calls execve. ++ * ++ * This all means that we cannot rely on the stack to store ++ * away registers, since they will be overwritten by the child ++ * as soon as it makes another function call (e.g. execve()). ++ * Fortunately, the Linux kernel preserves LR across system calls. ++ */ ++#include ++#include ++ ++ .global __vfork ++ .type __vfork,@function ++ .align 1 ++__vfork: ++ mov r8, __NR_vfork ++ scall ++ cp.w r12, -4096 ++ retls r12 ++ ++ /* vfork failed, so we may use the stack freely */ ++ pushm r4-r7,lr ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++ rsub r4, r12, 0 ++.L_RGOT: ++ rsub r6, pc ++ mcall r6[__errno_location@got] ++#else ++ rsub r4, r12, 0 ++ mcall .L__errno_location ++#endif ++ st.w r12[0], r4 ++ popm r4-r7,pc,r12=-1 ++ ++ .align 2 ++#ifdef __PIC__ ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++.L__errno_location: ++ .long __errno_location ++#endif ++ .size __vfork, . - __vfork ++ ++ .weak vfork ++ vfork = __vfork +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/create_module.c +--- uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c 2005-08-18 00:49:42.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/create_module.c 2006-06-21 11:35:57.000000000 +0200 +@@ -61,7 +61,8 @@ + { + return __create_module(name, size, 0, 0); + } +-#else ++/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */ ++#elif !defined(__avr32__) + /* Sparc, MIPS, etc don't mistake return values for errors. */ + _syscall2(unsigned long, create_module, const char *, name, size_t, size); + #endif +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/getrusage.c +--- uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c 2005-08-18 00:49:42.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/getrusage.c 2006-06-21 11:35:56.000000000 +0200 +@@ -10,4 +10,4 @@ + #include "syscalls.h" + #include + #include +-_syscall2(int, getrusage, int, who, struct rusage *, usage); ++_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage); +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/open64.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/open64.c +--- uClibc-0.9.28/libc/sysdeps/linux/common/open64.c 2005-08-18 00:49:42.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/open64.c 2006-06-21 11:35:56.000000000 +0200 +@@ -26,7 +26,7 @@ + #endif + + #ifdef __UCLIBC_HAS_LFS__ +-extern int __libc_open (__const char *file, int oflag, mode_t mode); ++extern int __libc_open (__const char *file, int oflag, ...); + + /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, + a third argument is the file protection. */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/__syscall_fcntl.c +--- uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c 2005-08-18 00:49:42.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-06-21 11:35:56.000000000 +0200 +@@ -12,7 +12,7 @@ + #include + + #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 +-extern int __libc_fcntl64(int fd, int cmd, long arg); ++extern int __libc_fcntl64(int fd, int cmd, ...); + #endif + + #define __NR___syscall_fcntl __NR_fcntl +diff -Nur uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h uClibc-0.9.28-avr32-20060621/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h +--- uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,92 @@ ++/* Machine-dependent pthreads configuration and inline functions. ++ ++ Copyright (C) 2005 Atmel Norway ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If not, ++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#include ++ ++static inline int ++_test_and_set (int *p, int v) __THROW ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline test and set */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " tst %0, %3\n" ++ " breq 2f\n" ++ " stcond %1, %3\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=m"(*p) ++ : "m"(*p), "r"(v) ++ : "memory", "cc"); ++ ++ return result; ++} ++ ++#ifndef PT_EI ++# define PT_EI extern inline ++#endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ return _test_and_set(spinlock, 1); ++} ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME stack_pointer ++register char * stack_pointer __asm__ ("sp"); ++ ++/* Compare-and-swap for semaphores. */ ++ ++#define HAS_COMPARE_AND_SWAP ++PT_EI int ++__compare_and_swap(long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* pt-machine.h */ +diff -Nur uClibc-0.9.28/Makefile uClibc-0.9.28-avr32-20060621/Makefile +--- uClibc-0.9.28/Makefile 2005-08-18 00:49:49.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/Makefile 2006-06-21 11:35:57.000000000 +0200 +@@ -163,7 +163,7 @@ + else \ + extra_exclude="" ; \ + fi ; \ +- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \ ++ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \ + | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX) + ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y) + # Remove floating point related headers since float support is disabled. +diff -Nur uClibc-0.9.28/Rules.mak uClibc-0.9.28-avr32-20060621/Rules.mak +--- uClibc-0.9.28/Rules.mak 2005-08-18 00:49:49.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/Rules.mak 2006-06-21 11:35:57.000000000 +0200 +@@ -231,6 +231,10 @@ + UCLIBC_LDSO=ld.so.1 + endif + ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++endif ++ + # Keep the check_gcc from being needlessly executed + ifndef PIEFLAG + ifneq ($(UCLIBC_BUILD_PIE),y) +@@ -266,7 +270,11 @@ + # If -msoft-float isn't supported, we want an error anyway. + # Hmm... might need to revisit this for arm since it has 2 different + # soft float encodings. ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++# GCC on avr32 doesn't support -msoft-float, it's the default. ++else + CPU_CFLAGS += -msoft-float ++endif + ifeq ($(strip $(TARGET_ARCH)),arm) + # No longer needed with current toolchains, but leave it here for now. + # If anyone is actually still using gcc 2.95 (say), they can uncomment it. +diff -Nur uClibc-0.9.28/Rules.mak.orig uClibc-0.9.28-avr32-20060621/Rules.mak.orig +--- uClibc-0.9.28/Rules.mak.orig 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/Rules.mak.orig 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,358 @@ ++# Rules.make for uClibc ++# ++# Copyright (C) 2000 by Lineo, inc. ++# Copyright (C) 2000-2002 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++ ++#----------------------------------------------------------- ++# This file contains rules which are shared between multiple ++# Makefiles. All normal configuration options live in the ++# file named ".config". Don't mess with this file unless ++# you know what you are doing. ++ ++ ++#----------------------------------------------------------- ++# If you are running a cross compiler, you will want to set ++# 'CROSS' to something more interesting ... Target ++# architecture is determined by asking the CC compiler what ++# arch it compiles things for, so unless your compiler is ++# broken, you should not need to specify TARGET_ARCH. ++# ++# Most people will set this stuff on the command line, i.e. ++# make CROSS=arm-linux- ++# will build uClibc for 'arm'. ++ ++ifndef CROSS ++CROSS= ++endif ++CC = $(CROSS)gcc ++AR = $(CROSS)ar ++LD = $(CROSS)ld ++NM = $(CROSS)nm ++RANLIB = $(CROSS)ranlib ++STRIPTOOL = $(CROSS)strip ++ ++INSTALL = install ++LN = ln ++RM = rm -f ++ ++# Select the compiler needed to build binaries for your development system ++HOSTCC = gcc ++HOSTCFLAGS = -O2 -Wall ++ ++ ++#--------------------------------------------------------- ++# Nothing beyond this point should ever be touched by mere ++# mortals. Unless you hang out with the gods, you should ++# probably leave all this stuff alone. ++MAJOR_VERSION := 0 ++MINOR_VERSION := 9 ++SUBLEVEL := 28 ++VERSION := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL) ++# Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc. ++LC_ALL := C ++export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION LC_ALL ++ ++SHARED_FULLNAME:=libuClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so ++SHARED_MAJORNAME:=libc.so.$(MAJOR_VERSION) ++UCLIBC_LDSO:=ld-uClibc.so.$(MAJOR_VERSION) ++LIBNAME:=libc.a ++LIBC:=$(TOPDIR)libc/$(LIBNAME) ++ ++# Make sure DESTDIR and PREFIX can be used to install ++# PREFIX is a uClibcism while DESTDIR is a common GNUism ++ifndef PREFIX ++PREFIX = $(DESTDIR) ++endif ++ ++# Pull in the user's uClibc configuration ++ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) ++-include $(TOPDIR).config ++endif ++ ++ifndef CROSS ++CROSS=$(subst ",, $(strip $(CROSS_COMPILER_PREFIX))) ++endif ++ ++# A nifty macro to make testing gcc features easier ++check_gcc=$(shell \ ++ if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ ++ then echo "$(1)"; else echo "$(2)"; fi) ++check_as=$(shell \ ++ if $(CC) -Wa,$(1) -Wa,-Z -c -o /dev/null -xassembler /dev/null > /dev/null 2>&1; \ ++ then echo "-Wa,$(1)"; fi) ++ ++# Setup some shortcuts so that silent mode is silent like it should be ++ifeq ($(subst s,,$(MAKEFLAGS)),$(MAKEFLAGS)) ++export MAKE_IS_SILENT=n ++SECHO=@echo ++SHELL_SET_X=set -x ++else ++export MAKE_IS_SILENT=y ++SECHO=-@false ++SHELL_SET_X=set +x ++endif ++ ++# Make certain these contain a final "/", but no "//"s. ++TARGET_ARCH:=$(shell grep -s ^TARGET_ARCH $(TOPDIR)/.config | sed -e 's/^TARGET_ARCH=//' -e 's/"//g') ++RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(RUNTIME_PREFIX)))))) ++DEVEL_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(DEVEL_PREFIX)))))) ++export RUNTIME_PREFIX DEVEL_PREFIX ++ ++ARFLAGS:=cr ++ ++OPTIMIZATION:= ++PICFLAG:=-fPIC ++PIEFLAG_NAME:=-fPIE ++ ++# Some nice CPU specific optimizations ++ifeq ($(strip $(TARGET_ARCH)),i386) ++ OPTIMIZATION+=$(call check_gcc,-mpreferred-stack-boundary=2,) ++ OPTIMIZATION+=$(call check_gcc,-falign-jumps=0 -falign-loops=0,-malign-jumps=0 -malign-loops=0) ++ CPU_CFLAGS-$(CONFIG_386)+=-march=i386 ++ CPU_CFLAGS-$(CONFIG_486)+=-march=i486 ++ CPU_CFLAGS-$(CONFIG_ELAN)+=-march=i486 ++ CPU_CFLAGS-$(CONFIG_586)+=-march=i586 ++ CPU_CFLAGS-$(CONFIG_586MMX)+=$(call check_gcc,-march=pentium-mmx,-march=i586) ++ CPU_CFLAGS-$(CONFIG_686)+=-march=i686 ++ CPU_CFLAGS-$(CONFIG_PENTIUMII)+=$(call check_gcc,-march=pentium2,-march=i686) ++ CPU_CFLAGS-$(CONFIG_PENTIUMIII)+=$(call check_gcc,-march=pentium3,-march=i686) ++ CPU_CFLAGS-$(CONFIG_PENTIUM4)+=$(call check_gcc,-march=pentium4,-march=i686) ++ CPU_CFLAGS-$(CONFIG_K6)+=$(call check_gcc,-march=k6,-march=i586) ++ CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-malign-functions=4 -march=i686) ++ CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686 -malign-functions=0 -malign-jumps=0 -malign-loops=0 ++ CPU_CFLAGS-$(CONFIG_WINCHIPC6)+=$(call check_gcc,-march=winchip-c6,-march=i586) ++ CPU_CFLAGS-$(CONFIG_WINCHIP2)+=$(call check_gcc,-march=winchip2,-march=i586) ++ CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486) -malign-functions=0 -malign-jumps=0 -malign-loops=0 ++ CPU_CFLAGS-$(CONFIG_NEHEMIAH)+=$(call check_gcc,-march=c3-2,-march=i686) ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),arm) ++ OPTIMIZATION+=-fstrict-aliasing ++ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL ++ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB ++ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-mlittle-endian ++ CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mbig-endian ++ CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+= ++ CPU_CFLAGS-$(CONFIG_ARM610)+=-mtune=arm610 -march=armv3 ++ CPU_CFLAGS-$(CONFIG_ARM710)+=-mtune=arm710 -march=armv3 ++ CPU_CFLAGS-$(CONFIG_ARM720T)+=-mtune=arm7tdmi -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM920T)+=-mtune=arm9tdmi -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM922T)+=-mtune=arm9tdmi -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM926T)+=-mtune=arm9tdmi -march=armv5 ++ CPU_CFLAGS-$(CONFIG_ARM1136JF_S)+=-mtune=arm1136jf-s -march=armv6 ++ CPU_CFLAGS-$(CONFIG_ARM_SA110)+=-mtune=strongarm110 -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110) ++ CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv4 -Wa,-mcpu=xscale ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),mips) ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_1)+=-mips1 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_2)+=-mips2 -mtune=mips2 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_3)+=-mips3 -mtune=mips3 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_4)+=-mips4 -mtune=mips4 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS32)+=-mips32 -mtune=mips32 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64)+=-mips64 -mtune=mips32 ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),sh) ++ OPTIMIZATION+=-fstrict-aliasing ++ OPTIMIZATION+= $(call check_gcc,-mprefergot,) ++ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL ++ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB ++ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-ml ++ CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mb ++ CPU_CFLAGS-$(CONFIG_SH2)+=-m2 ++ CPU_CFLAGS-$(CONFIG_SH3)+=-m3 ++ifeq ($(strip $(UCLIBC_HAS_FLOATS)),y) ++ CPU_CFLAGS-$(CONFIG_SH2A)+=-m2a ++ CPU_CFLAGS-$(CONFIG_SH4)+=-m4 ++else ++ CPU_CFLAGS-$(CONFIG_SH2A)+=-m2a-nofpu ++ CPU_CFLAGS-$(CONFIG_SH4)+=-m4-nofpu ++endif ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),sh64) ++ OPTIMIZATION+=-fstrict-aliasing ++ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN):=-EL ++ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN):=-EB ++ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN):=-ml ++ CPU_CFLAGS-$(ARCH_BIG_ENDIAN):=-mb ++ CPU_CFLAGS-$(CONFIG_SH5)+=-m5-32media ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),h8300) ++ CPU_LDFLAGS-$(CONFIG_H8300H)+= -ms8300h ++ CPU_LDFLAGS-$(CONFIG_H8S) += -ms8300s ++ CPU_CFLAGS-$(CONFIG_H8300H) += -mh -mint32 -fsigned-char ++ CPU_CFLAGS-$(CONFIG_H8S) += -ms -mint32 -fsigned-char ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),cris) ++ CPU_LDFLAGS-$(CONFIG_CRIS)+=-mcrislinux ++ CPU_CFLAGS-$(CONFIG_CRIS)+=-mlinux ++ PICFLAG:=-fpic ++ PIEFLAG_NAME:=-fpie ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),powerpc) ++# PowerPC can hold 8192 entries in its GOT with -fpic which is more than ++# enough. Therefore use -fpic which will reduce code size and generates ++# faster code. ++ PICFLAG:=-fpic ++ PIEFLAG_NAME:=-fpie ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),frv) ++ CPU_LDFLAGS-$(CONFIG_FRV)+=-melf32frvfd ++ CPU_CFLAGS-$(CONFIG_FRV)+=-mfdpic ++ # Using -pie causes the program to have an interpreter, which is ++ # forbidden, so we must make do with -shared. Unfortunately, ++ # -shared by itself would get us global function descriptors ++ # and calls through PLTs, dynamic resolution of symbols, etc, ++ # which would break as well, but -Bsymbolic comes to the rescue. ++ export LDPIEFLAG:=-shared -Bsymbolic ++ UCLIBC_LDSO=ld.so.1 ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++endif ++ ++# Keep the check_gcc from being needlessly executed ++ifndef PIEFLAG ++ifneq ($(UCLIBC_BUILD_PIE),y) ++export PIEFLAG:= ++else ++export PIEFLAG:=$(call check_gcc,$(PIEFLAG_NAME),$(PICFLAG)) ++endif ++endif ++# We need to keep track of both the CC PIE flag (above) as ++# well as the LD PIE flag (below) because we can't rely on ++# gcc passing -pie if we used -fPIE ++ifndef LDPIEFLAG ++ifneq ($(UCLIBC_BUILD_PIE),y) ++export LDPIEFLAG:= ++else ++export LDPIEFLAG:=$(shell $(LD) --help | grep -q pie && echo "-Wl,-pie") ++endif ++endif ++ ++# Use '-Os' optimization if available, else use -O2, allow Config to override ++OPTIMIZATION+=$(call check_gcc,-Os,-O2) ++# Use the gcc 3.4 -funit-at-a-time optimization when available ++OPTIMIZATION+=$(call check_gcc,-funit-at-a-time,) ++ ++# Add a bunch of extra pedantic annoyingly strict checks ++XWARNINGS=$(subst ",, $(strip $(WARNINGS))) -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing ++XARCH_CFLAGS=$(subst ",, $(strip $(ARCH_CFLAGS))) ++CPU_CFLAGS=$(subst ",, $(strip $(CPU_CFLAGS-y))) ++ ++LDADD_LIBFLOAT= ++ifeq ($(strip $(UCLIBC_HAS_SOFT_FLOAT)),y) ++# Add -msoft-float to the CPU_FLAGS since ldso and libdl ignore CFLAGS. ++# If -msoft-float isn't supported, we want an error anyway. ++# Hmm... might need to revisit this for arm since it has 2 different ++# soft float encodings. ++ CPU_CFLAGS += -msoft-float ++ifeq ($(strip $(TARGET_ARCH)),arm) ++# No longer needed with current toolchains, but leave it here for now. ++# If anyone is actually still using gcc 2.95 (say), they can uncomment it. ++# LDADD_LIBFLOAT=-lfloat ++endif ++endif ++ ++SSP_DISABLE_FLAGS:=$(call check_gcc,-fno-stack-protector,) ++ifeq ($(UCLIBC_BUILD_SSP),y) ++SSP_CFLAGS:=$(call check_gcc,-fno-stack-protector-all,) ++SSP_CFLAGS+=$(call check_gcc,-fstack-protector,) ++SSP_ALL_CFLAGS:=$(call check_gcc,-fstack-protector-all,) ++else ++SSP_CFLAGS:=$(SSP_DISABLE_FLAGS) ++endif ++ ++# Some nice CFLAGS to work with ++CFLAGS:=$(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \ ++ -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I. ++LDFLAGS_NOSTRIP:=$(CPU_LDFLAGS-y) -shared --warn-common --warn-once -z combreloc -z defs ++ ++ifeq ($(DODEBUG),y) ++ #CFLAGS += -g3 ++ CFLAGS += -O0 -g3 ++ LDFLAGS := $(LDFLAGS_NOSTRIP) ++ STRIPTOOL:= true -Since_we_are_debugging ++else ++ CFLAGS += $(OPTIMIZATION) $(XARCH_CFLAGS) ++ LDFLAGS := $(LDFLAGS_NOSTRIP) -s ++endif ++ ++ifeq ($(UCLIBC_BUILD_RELRO),y) ++LDFLAGS+=-z relro ++endif ++ ++ifeq ($(UCLIBC_BUILD_NOW),y) ++LDFLAGS+=-z now ++endif ++ ++# Sigh, some stupid versions of gcc can't seem to cope with '-iwithprefix include' ++#CFLAGS+=-iwithprefix include ++CFLAGS+=-isystem $(shell $(CC) -print-file-name=include) ++ ++ifneq ($(DOASSERTS),y) ++ CFLAGS += -DNDEBUG ++endif ++ ++CFLAGS_NOPIC:=$(CFLAGS) ++ifeq ($(DOPIC),y) ++ CFLAGS += $(PICFLAG) ++endif ++ ++ifeq ($(DL_FINI_CRT_COMPAT),y) ++CFLAGS += -D_DL_FINI_CRT_COMPAT ++endif ++ ++# Keep the check_as from being needlessly executed ++ASFLAGS = $(CFLAGS) ++ifndef ASFLAGS_NOEXEC ++ifeq ($(UCLIBC_BUILD_NOEXECSTACK),y) ++export ASFLAGS_NOEXEC := $(call check_as,--noexecstack) ++else ++export ASFLAGS_NOEXEC := ++endif ++endif ++ASFLAGS += $(ASFLAGS_NOEXEC) ++ ++LIBGCC_CFLAGS ?= $(CFLAGS) $(CPU_CFLAGS-y) ++LIBGCC:=$(shell $(CC) $(LIBGCC_CFLAGS) -print-libgcc-file-name) ++LIBGCC_DIR:=$(dir $(LIBGCC)) ++ ++######################################## ++# ++# uClinux shared lib support ++# ++ ++ifeq ($(CONFIG_BINFMT_SHARED_FLAT),y) ++ # For the shared version of this, we specify no stack and its library ID ++ FLTFLAGS += -s 0 ++ LIBID=1 ++ export LIBID FLTFLAGS ++ SHARED_TARGET = lib/libc ++endif ++ ++TARGET_ARCH:=$(strip $(subst ",, $(strip $(TARGET_ARCH)))) +diff -Nur uClibc-0.9.28/utils/ldd.c uClibc-0.9.28-avr32-20060621/utils/ldd.c +--- uClibc-0.9.28/utils/ldd.c 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/utils/ldd.c 2006-06-21 11:35:57.000000000 +0200 +@@ -56,6 +56,11 @@ + #define ELFCLASSM ELFCLASS32 + #endif + ++#if defined(__avr32__) ++#define MATCH_MACHINE(x) (x == EM_AVR32) ++#define ELFCLASSM ELFCLASS32 ++#endif ++ + #if defined(__s390__) + #define MATCH_MACHINE(x) (x == EM_S390) + #define ELFCLASSM ELFCLASS32 diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch new file mode 100644 index 0000000000..6608b4df94 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch @@ -0,0 +1,4080 @@ +Index: uClibc-0.9.28-avr32/Makefile +=================================================================== +--- uClibc-0.9.28-avr32.orig/Makefile 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -163,7 +163,7 @@ install_dev: + else \ + extra_exclude="" ; \ + fi ; \ +- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \ ++ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \ + | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX) + ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y) + # Remove floating point related headers since float support is disabled. +Index: uClibc-0.9.28-avr32/extra/scripts/fix_includes.sh +=================================================================== +--- uClibc-0.9.28-avr32.orig/extra/scripts/fix_includes.sh 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/extra/scripts/fix_includes.sh 2006-10-19 15:05:52.000000000 +0200 +@@ -78,36 +78,6 @@ if [ ! -d "$KERNEL_SOURCE" ]; then + exit 1; + fi; + +-if [ -f "$KERNEL_SOURCE/Makefile" ] ; then +-# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION +-eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile` +-else +-ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2` +-VERSION=`echo "$ver" | cut -d '.' -f 1` +-PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2` +-if echo "$ver" | grep -q '-' ; then +-SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1` +-EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"` +-else +-SUBLEVEL=`echo "$ver" | cut -d '.' -f 3` +-#EXTRAVERSION= +-fi +-fi +-if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ] +-then +- echo "Unable to determine version for kernel headers" +- echo -e "\tprovided in directory $KERNEL_SOURCE" +- exit 1 +-fi +- +-if [ "$MAKE_IS_SILENT" != "y" ]; then +-echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}" +-echo -e "\n" +-echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'" +-echo -e "\tprovided in directory $KERNEL_SOURCE" +-echo -e "\n" +-fi +- + # Create a symlink to include/asm + + rm -f include/asm* +@@ -172,7 +142,7 @@ fi; + + + # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory +-if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then ++if [ -d $KERNEL_SOURCE/include/asm-generic ] ; then + ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic + fi; + +Index: uClibc-0.9.28-avr32/libc/Makefile +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/Makefile 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -59,7 +59,7 @@ $(LIBNAME) shared_$(LIBNAME) ar-target: + $(AR) dN 2 $(LIBNAME) $$objs && \ + $(AR) dN 2 $(LIBNAME) $$objs + @for objfile in obj.signal \ +- obj.string.generic obj.string.$(TARGET_ARCH) obj.string \ ++ obj.string obj.string.generic obj.string.$(TARGET_ARCH) \ + obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \ + if [ -e $$objfile ] ; then \ + if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/getrusage.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/getrusage.c 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/getrusage.c 2006-10-19 15:05:52.000000000 +0200 +@@ -10,4 +10,4 @@ + #include "syscalls.h" + #include + #include +-_syscall2(int, getrusage, int, who, struct rusage *, usage); ++_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage); +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/__syscall_fcntl.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-10-19 15:05:52.000000000 +0200 +@@ -12,7 +12,7 @@ + #include + + #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 +-extern int __libc_fcntl64(int fd, int cmd, long arg); ++extern int __libc_fcntl64(int fd, int cmd, ...); + #endif + + #define __NR___syscall_fcntl __NR_fcntl +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/open64.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/open64.c 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/open64.c 2006-10-19 15:05:52.000000000 +0200 +@@ -26,7 +26,7 @@ + #endif + + #ifdef __UCLIBC_HAS_LFS__ +-extern int __libc_open (__const char *file, int oflag, mode_t mode); ++extern int __libc_open (__const char *file, int oflag, ...); + + /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, + a third argument is the file protection. */ +Index: uClibc-0.9.28-avr32/extra/Configs/Config.avr32 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/extra/Configs/Config.avr32 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,42 @@ ++# ++# For a description of the syntax of this configuration file, ++# see extra/config/Kconfig-language.txt ++# ++ ++config HAVE_ELF ++ bool ++ default y ++ ++config TARGET_ARCH ++ default "avr32" ++ ++config ARCH_CFLAGS ++ string ++ ++config ARCH_LDFLAGS ++ string ++ ++config LIBGCC_CFLAGS ++ string ++ ++config ARCH_SUPPORTS_BIG_ENDIAN ++ bool ++ default y ++ ++config UCLIBC_COMPLETELY_PIC ++ select FORCE_SHAREABLE_TEXT_SEGMENTS ++ bool ++ default y ++ ++choice ++ prompt "Target CPU Type" ++ default CONFIG_AP7000 ++ ++config CONFIG_AP7000 ++ bool "AP7000" ++ ++endchoice ++ ++config LINKRELAX ++ bool "Enable linker optimizations" ++ default n +Index: uClibc-0.9.28-avr32/extra/Configs/Config.in +=================================================================== +--- uClibc-0.9.28-avr32.orig/extra/Configs/Config.in 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/extra/Configs/Config.in 2006-10-19 15:05:52.000000000 +0200 +@@ -16,6 +16,9 @@ config TARGET_alpha + config TARGET_arm + bool "arm" + ++config TARGET_avr32 ++ bool "avr32" ++ + config TARGET_bfin + bool "bfin" + +@@ -83,6 +86,10 @@ if TARGET_arm + source "extra/Configs/Config.arm" + endif + ++if TARGET_avr32 ++source "extra/Configs/Config.avr32" ++endif ++ + if TARGET_bfin + source "extra/Configs/Config.bfin" + endif +Index: uClibc-0.9.28-avr32/include/elf.h +=================================================================== +--- uClibc-0.9.28-avr32.orig/include/elf.h 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/include/elf.h 2006-10-19 15:05:52.000000000 +0200 +@@ -261,6 +261,8 @@ typedef struct + #define EM_NIOS32 0xfebb /* Altera Nios 32 */ + #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */ + ++#define EM_AVR32 0x18ad ++ + /* V850 backend magic number. Written in the absense of an ABI. */ + #define EM_CYGNUS_V850 0x9080 + +@@ -2687,6 +2689,55 @@ typedef Elf32_Addr Elf32_Conflict; + /* Keep this the last entry. */ + #define R_V850_NUM 25 + ++/* Atmel AVR32 relocations. */ ++#define R_AVR32_NONE 0 ++#define R_AVR32_32 1 ++#define R_AVR32_16 2 ++#define R_AVR32_8 3 ++#define R_AVR32_32_PCREL 4 ++#define R_AVR32_16_PCREL 5 ++#define R_AVR32_8_PCREL 6 ++#define R_AVR32_DIFF32 7 ++#define R_AVR32_DIFF16 8 ++#define R_AVR32_DIFF8 9 ++#define R_AVR32_GOT32 10 ++#define R_AVR32_GOT16 11 ++#define R_AVR32_GOT8 12 ++#define R_AVR32_21S 13 ++#define R_AVR32_16U 14 ++#define R_AVR32_16S 15 ++#define R_AVR32_8S 16 ++#define R_AVR32_8S_EXT 17 ++#define R_AVR32_22H_PCREL 18 ++#define R_AVR32_18W_PCREL 19 ++#define R_AVR32_16B_PCREL 20 ++#define R_AVR32_16N_PCREL 21 ++#define R_AVR32_14UW_PCREL 22 ++#define R_AVR32_11H_PCREL 23 ++#define R_AVR32_10UW_PCREL 24 ++#define R_AVR32_9H_PCREL 25 ++#define R_AVR32_9UW_PCREL 26 ++#define R_AVR32_HI16 27 ++#define R_AVR32_LO16 28 ++#define R_AVR32_GOTPC 29 ++#define R_AVR32_GOTCALL 30 ++#define R_AVR32_LDA_GOT 31 ++#define R_AVR32_GOT21S 32 ++#define R_AVR32_GOT18SW 33 ++#define R_AVR32_GOT16S 34 ++#define R_AVR32_GOT7UW 35 ++#define R_AVR32_32_CPENT 36 ++#define R_AVR32_CPCALL 37 ++#define R_AVR32_16_CP 38 ++#define R_AVR32_9W_CP 39 ++#define R_AVR32_RELATIVE 40 ++#define R_AVR32_GLOB_DAT 41 ++#define R_AVR32_JMP_SLOT 42 ++#define R_AVR32_ALIGN 43 ++#define R_AVR32_NUM 44 ++ ++/* AVR32 dynamic tags */ ++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ + + #define R_H8_NONE 0 + #define R_H8_DIR32 1 +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,93 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../../ ++include $(TOPDIR)Rules.mak ++ASFLAGS=$(CFLAGS) ++ ++CRT_SRC = crt1.S ++CRT_OBJ = crt1.o ++SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ)) ++CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o ++ ++SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \ ++ bsd-_setjmp.S sigrestorer.S syscall.S ++SOBJS=$(patsubst %.S,%.o, $(SSRC)) ++ ++CSRC=clone.c brk.c sigaction.c mmap.c ++COBJS=$(patsubst %.c,%.o, $(CSRC)) ++ ++OBJS=$(SOBJS) $(COBJS) ++ ++OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS) ++ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ ++ ++$(CRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SCRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SOBJS): %.o : %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(COBJS): %.o : %.c ++ $(CC) $(CFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) ++crti.o: crti.S ++ $(CC) $(ASFLAGS) -c crti.S -o crti.o ++ ++$(TOPDIR)lib/crti.o: crti.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crti.o $(TOPDIR)lib/ ++ ++crtn.o: crtn.S ++ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o ++ ++$(TOPDIR)lib/crtn.o: crtn.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crtn.o $(TOPDIR)lib/ ++else ++$(TOPDIR)lib/crti.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o ++$(TOPDIR)lib/crtn.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o ++endif ++ ++ ++headers: ++# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/ ++ ++clean: ++ $(RM) *.[oa] *~ core ++ $(RM) bits/sysnum.h ++ $(RM) gmon-start.S ++ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/__longjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/__longjmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,17 @@ ++/* longjmp for AVR32 ++ * ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ .global __longjmp ++ .type __longjmp,"function" ++ .align 1 ++__longjmp: ++ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ mov r12, r11 /* get the return value right */ ++ mustr r8 /* restore status register (lower half) */ ++ cp r12, 0 /* can't return zero */ ++ frs ++ moveq r12, 1 ++ mov pc,lr ++ .size __longjmp, . - __longjmp +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/_mmap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/_mmap.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++#define __NR_mmap2 __NR_mmap ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/atomicity.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,86 @@ ++/* Low-level functions for atomic operations. AVR32 version. ++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _ATOMICITY_H ++#define _ATOMICITY_H 1 ++ ++#include ++ ++static inline int ++__attribute__((unused)) ++exchange_and_add (volatile uint32_t *mem, int val) ++{ ++ int tmp, result; ++ ++ __asm__ __volatile__( ++ "/* Inline exchange and add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " add %1, %0, %4\n" ++ " stcond %2, %1\n" ++ " brne 1b" ++ : "=&r"(result), "=&r"(tmp), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++static inline void ++__attribute__((unused)) ++atomic_add (volatile uin32_t *mem, int val) ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline atomic add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " add %0, %3\n" ++ " stcond %2, %0\n" ++ " brne 1b" ++ : "=&r"(result), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++} ++ ++static inline int ++__attribute__((unused)) ++compare_and_swap(volatile long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* atomicity.h */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/byteswap.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* Macros to swap the order of bytes in integer values. ++ Copyright (C) 2005 Atmel Norway. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H ++# error "Never use directly; include instead." ++#endif ++ ++#ifndef _BITS_BYTESWAP_H ++#define _BITS_BYTESWAP_H 1 ++ ++/* Swap bytes in 16 bit value. */ ++#if defined __GNUC__ ++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) ++#else ++/* This is better than nothing. */ ++static __inline unsigned short int ++__bswap_16 (unsigned short int __bsx) ++{ ++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); ++} ++#endif ++ ++/* Swap bytes in 32 bit value. */ ++#if defined __GNUC__ ++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) ++#else ++static __inline unsigned int ++__bswap_32 (unsigned int __bsx) ++{ ++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | ++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); ++} ++#endif ++ ++#if defined __GNUC__ ++/* Swap bytes in 64 bit value. */ ++# define __bswap_constant_64(x) \ ++ ((((x) & 0xff00000000000000ull) >> 56) \ ++ | (((x) & 0x00ff000000000000ull) >> 40) \ ++ | (((x) & 0x0000ff0000000000ull) >> 24) \ ++ | (((x) & 0x000000ff00000000ull) >> 8) \ ++ | (((x) & 0x00000000ff000000ull) << 8) \ ++ | (((x) & 0x0000000000ff0000ull) << 24) \ ++ | (((x) & 0x000000000000ff00ull) << 40) \ ++ | (((x) & 0x00000000000000ffull) << 56)) ++ ++# define __bswap_64(x) \ ++ (__extension__ \ ++ ({ \ ++ union { \ ++ __extension__ unsigned long long int __ll; \ ++ unsigned int __l[2]; \ ++ } __w, __r; \ ++ if (__builtin_constant_p(x)) \ ++ __r.__ll = __bswap_constant_64(x); \ ++ else { \ ++ __w.__ll = (x); \ ++ __r.__l[0] = __bswap_32(__w.__l[1]); \ ++ __r.__l[1] = __bswap_32(__w.__l[0]); \ ++ } \ ++ __r.__ll; \ ++ })) ++#endif ++ ++#endif /* _BITS_BYTESWAP_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/endian.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/endian.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,7 @@ ++/* AVR32 is big-endian */ ++ ++#ifndef _ENDIAN_H ++# error "Never use directly; include instead." ++#endif ++ ++#define __BYTE_ORDER __BIG_ENDIAN +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,167 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * This file is part of the Linux kernel ++ */ ++#ifndef _FCNTL_H ++# error "Never use directly; include instead." ++#endif ++ ++#include ++ ++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files ++ located on an ext2 file system */ ++#define O_ACCMODE 0003 ++#define O_RDONLY 00 ++#define O_WRONLY 01 ++#define O_RDWR 02 ++#define O_CREAT 0100 /* not fcntl */ ++#define O_EXCL 0200 /* not fcntl */ ++#define O_NOCTTY 0400 /* not fcntl */ ++#define O_TRUNC 01000 /* not fcntl */ ++#define O_APPEND 02000 ++#define O_NONBLOCK 04000 ++#define O_NDELAY O_NONBLOCK ++#define O_SYNC 010000 ++#define O_ASYNC 020000 ++ ++#ifdef __USE_GNU ++# define O_DIRECTORY 040000 /* must be a directory */ ++# define O_NOFOLLOW 0100000 /* don't follow links */ ++# define O_DIRECT 0200000 /* direct disk access */ ++#endif ++ ++#ifdef __USE_LARGEFILE64 ++# define O_LARGEFILE 0400000 ++#endif ++ ++/* For now Linux has synchronisity options for data and read operations. ++ We define the symbols here but let them do the same as O_SYNC since ++ this is a superset. */ ++#if defined __USE_POSIX199309 || defined __USE_UNIX98 ++# define O_DSYNC O_SYNC /* Synchronize data. */ ++# define O_RSYNC O_SYNC /* Synchronize read operations. */ ++#endif ++ ++#define F_DUPFD 0 /* dup */ ++#define F_GETFD 1 /* get close_on_exec */ ++#define F_SETFD 2 /* set/clear close_on_exec */ ++#define F_GETFL 3 /* get file->f_flags */ ++#define F_SETFL 4 /* set file->f_flags */ ++ ++#ifndef __USE_FILE_OFFSET64 ++# define F_GETLK 5 ++# define F_SETLK 6 ++# define F_SETLKW 7 ++#else ++# define F_GETLK F_GETLK64 ++# define F_SETLK F_SETLK64 ++# define F_SETLKW F_SETLKW64 ++#endif ++#define F_GETLK64 12 /* using 'struct flock64' */ ++#define F_SETLK64 13 ++#define F_SETLKW64 14 ++ ++#if defined __USE_BSD || defined __USE_XOPEN2K ++# define F_SETOWN 8 /* for sockets. */ ++# define F_GETOWN 9 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETSIG 10 /* for sockets. */ ++# define F_GETSIG 11 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETLEASE 1024 /* Set a lease. */ ++# define F_GETLEASE 1025 /* Enquire what lease is active. */ ++# define F_NOTIFY 1026 /* Request notfications on a directory. */ ++#endif ++ ++/* for F_[GET|SET]FL */ ++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++/* for posix fcntl() and lockf() */ ++#define F_RDLCK 0 ++#define F_WRLCK 1 ++#define F_UNLCK 2 ++ ++/* for old implementation of bsd flock () */ ++#define F_EXLCK 4 /* or 3 */ ++#define F_SHLCK 8 /* or 4 */ ++ ++/* for leases */ ++#define F_INPROGRESS 16 ++ ++#ifdef __USE_BSD ++/* operations for bsd flock(), also used by the kernel implementation */ ++# define LOCK_SH 1 /* shared lock */ ++# define LOCK_EX 2 /* exclusive lock */ ++# define LOCK_NB 4 /* or'd with one of the above to prevent ++ blocking */ ++# define LOCK_UN 8 /* remove lock */ ++#endif ++ ++#ifdef __USE_GNU ++# define LOCK_MAND 32 /* This is a mandatory flock */ ++# define LOCK_READ 64 /* ... Which allows concurrent ++ read operations */ ++# define LOCK_WRITE 128 /* ... Which allows concurrent ++ write operations */ ++# define LOCK_RW 192 /* ... Which allows concurrent ++ read & write ops */ ++#endif ++ ++#ifdef __USE_GNU ++/* Types of directory notifications that may be requested with F_NOTIFY. */ ++# define DN_ACCESS 0x00000001 /* File accessed. */ ++# define DN_MODIFY 0x00000002 /* File modified. */ ++# define DN_CREATE 0x00000004 /* File created. */ ++# define DN_DELETE 0x00000008 /* File removed. */ ++# define DN_RENAME 0x00000010 /* File renamed. */ ++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ ++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ ++#endif ++ ++struct flock { ++ short l_type; ++ short l_whence; ++#ifndef __USE_FILE_OFFSET64 ++ __off_t l_start; ++ __off_t l_len; ++#else ++ __off64_t l_start; ++ __off64_t l_len; ++#endif ++ __pid_t l_pid; ++}; ++ ++#ifdef __USE_LARGEFILE64 ++struct flock64 { ++ short l_type; ++ short l_whence; ++ __off64_t l_start; ++ __off64_t l_len; ++ __pid_t l_pid; ++}; ++#endif ++ ++/* Define some more compatibility macros to be backward compatible with ++ * BSD systems which did not managed to hide these kernel macros. */ ++#ifdef __USE_BSD ++# define FAPPEND O_APPEND ++# define FFSYNC O_FSYNC ++# define FASYNC O_ASYNC ++# define FNONBLOCK O_NONBLOCK ++# define FNDELAY O_NDELAY ++#endif /* Use BSD. */ ++ ++/* Advise to `posix_fadvise'. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ ++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ ++#endif +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_stat.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,63 @@ ++#ifndef _BITS_STAT_STRUCT_H ++#define _BITS_STAT_STRUCT_H ++ ++/* ++ * This file provides struct stat, taken from kernel 2.6.4 ++ * (include/asm-avr32/stat.h revision 1.1). ++ */ ++ ++struct kernel_stat { ++ unsigned long st_dev; ++ unsigned long st_ino; ++ unsigned short st_mode; ++ unsigned short st_nlink; ++ unsigned short st_uid; ++ unsigned short st_gid; ++ unsigned long st_rdev; ++ unsigned long st_size; ++ unsigned long st_blksize; ++ unsigned long st_blocks; ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++#define STAT_HAVE_NSEC 1 ++ ++struct kernel_stat64 { ++ unsigned long long st_dev; ++ ++ unsigned long long st_ino; ++ unsigned int st_mode; ++ unsigned int st_nlink; ++ ++ unsigned long st_uid; ++ unsigned long st_gid; ++ ++ unsigned long long st_rdev; ++ ++ long long st_size; ++ unsigned long __pad1; ++ unsigned long st_blksize; ++ ++ unsigned long long st_blocks; ++ ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++#endif /* _BITS_STAT_STRUCT_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_types.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,56 @@ ++/* Note that we use the exact same include guard #define names ++ * as asm/posix_types.h. This will avoid gratuitous conflicts ++ * with the posix_types.h kernel header, and will ensure that ++ * our private content, and not the kernel header, will win. ++ * -Erik ++ */ ++#ifndef __ASM_AVR32_POSIX_TYPES_H ++#define __ASM_AVR32_POSIX_TYPES_H ++ ++/* ++ * This file is generally used by user-level software, so you need to ++ * be a little careful about namespace pollution etc. Also, we cannot ++ * assume GCC is being used. ++ */ ++ ++typedef unsigned long __kernel_dev_t; ++typedef unsigned long __kernel_ino_t; ++typedef unsigned short __kernel_mode_t; ++typedef unsigned short __kernel_nlink_t; ++typedef long __kernel_off_t; ++typedef int __kernel_pid_t; ++typedef unsigned short __kernel_ipc_pid_t; ++typedef unsigned int __kernel_uid_t; ++typedef unsigned int __kernel_gid_t; ++typedef unsigned long __kernel_size_t; ++typedef int __kernel_ssize_t; ++typedef int __kernel_ptrdiff_t; ++typedef long __kernel_time_t; ++typedef long __kernel_suseconds_t; ++typedef long __kernel_clock_t; ++typedef int __kernel_timer_t; ++typedef int __kernel_clockid_t; ++typedef int __kernel_daddr_t; ++typedef char * __kernel_caddr_t; ++typedef unsigned short __kernel_uid16_t; ++typedef unsigned short __kernel_gid16_t; ++typedef unsigned int __kernel_uid32_t; ++typedef unsigned int __kernel_gid32_t; ++ ++typedef unsigned short __kernel_old_uid_t; ++typedef unsigned short __kernel_old_gid_t; ++typedef unsigned short __kernel_old_dev_t; ++ ++#ifdef __GNUC__ ++typedef long long __kernel_loff_t; ++#endif ++ ++typedef struct { ++#if defined(__USE_ALL) ++ int val[2]; ++#else ++ int __val[2]; ++#endif ++} __kernel_fsid_t; ++ ++#endif /* __ASM_AVR32_POSIX_TYPES_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/machine-gmon.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,69 @@ ++/* Machine-dependent definitions for profiling support. AVR32 version. ++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define mcount_internal __mcount_internal ++ ++#define _MCOUNT_DECL(frompc, selfpc) \ ++static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc) ++ ++/* ++ * This mcount implementation expects to get called after the prologue ++ * has been run. It also expects that r7 contains a valid frame ++ * pointer. ++ * ++ * When profiling, the compiler should generate something like this at ++ * each function entry: ++ * ++ * pushm r0-r7,lr // lr mandatory, others optional ++ * mov r7, sp ++ * // rest of prologue goes here ++ * mcall pc[.LC1 - .] ++ * // rest of function goes here ++ * .LC1: ++ * .long mcount ++ * ++ * or for PIC: ++ * ++ * pushm r0-r7,lr ++ * mov r7, sp ++ * // rest of prologue goes here ++ * lddpc r0, .LC1 ++ * .L1: rsub r0, pc ++ * mcall r0[mcount@GOT] ++ * // rest of function goes here ++ * .LC1: ++ * .long .L1 - _GLOBAL_OFFSET_TABLE_ ++ * ++ * This way, when mcount() is called, r7 points to the calling ++ * function's return address. It is guaranteed that calling mcount ++ * will clobber no registers except LR, which is unavoidable. ++ */ ++#define MCOUNT asm( \ ++ " .align 4\n" \ ++ " .global _mcount\n" \ ++ " .type _mcount,@function\n" \ ++ "_mcount:\n" \ ++ " pushm r8-r12,lr\n" \ ++ " mov r11, lr\n" \ ++ " ld.w r12, r7[0]\n" \ ++ " rcall __mcount_internal\n" \ ++ " popm r8-r12,pc\n" \ ++ " .size _mcount, . - _mcount\n" \ ++ " .weak mcount\n" \ ++ " mcount = _mcount"); +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/mman.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/mman.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* Definitions for POSIX memory map interface. Linux/AVR32 version. ++ Copyright (C) 1997, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_MMAN_H ++# error "Never include this file directly. Use instead" ++#endif ++ ++/* The following definitions basically come from the kernel headers. ++ But the kernel header is not namespace clean. */ ++ ++ ++/* Protections are chosen from these bits, OR'd together. The ++ implementation does not necessarily support PROT_EXEC or PROT_WRITE ++ without PROT_READ. The only guarantees are that no writing will be ++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ ++ ++#define PROT_READ 0x1 /* Page can be read. */ ++#define PROT_WRITE 0x2 /* Page can be written. */ ++#define PROT_EXEC 0x4 /* Page can be executed. */ ++#define PROT_NONE 0x0 /* Page can not be accessed. */ ++ ++/* Sharing types (must choose one and only one of these). */ ++#define MAP_SHARED 0x01 /* Share changes. */ ++#define MAP_PRIVATE 0x02 /* Changes are private. */ ++#ifdef __USE_MISC ++# define MAP_TYPE 0x0f /* Mask for type of mapping. */ ++#endif ++ ++/* Other flags. */ ++#define MAP_FIXED 0x10 /* Interpret addr exactly. */ ++#ifdef __USE_MISC ++# define MAP_FILE 0 ++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ ++# define MAP_ANON MAP_ANONYMOUS ++#endif ++ ++/* These are Linux-specific. */ ++#ifdef __USE_MISC ++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ ++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ ++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ ++# define MAP_LOCKED 0x2000 /* Lock the mapping. */ ++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ ++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ ++# define MAP_NONBLOCK 0x10000 /* do not block on IO */ ++#endif ++ ++/* Flags to `msync'. */ ++#define MS_ASYNC 1 /* Sync memory asynchronously. */ ++#define MS_SYNC 4 /* Synchronous memory sync. */ ++#define MS_INVALIDATE 2 /* Invalidate the caches. */ ++ ++/* Flags for `mlockall'. */ ++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ ++#define MCL_FUTURE 2 /* Lock all additions to address ++ space. */ ++ ++/* Flags for `mremap'. */ ++#ifdef __USE_GNU ++# define MREMAP_MAYMOVE 1 ++#endif ++ ++/* Advise to `madvise'. */ ++#ifdef __USE_BSD ++# define MADV_NORMAL 0 /* No further special treatment. */ ++# define MADV_RANDOM 1 /* Expect random page references. */ ++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define MADV_WILLNEED 3 /* Will need these pages. */ ++# define MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif ++ ++/* The POSIX people had to invent similar names for the same things. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/profil-counter.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Low-level statistical profiling support function. Linux/AVR32 version. ++ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include ++ ++void ++profil_counter(int signo, siginfo_t *si, struct sigcontext *sc) ++{ ++ profil_count((void *)sc->pc); ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/setjmp.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,21 @@ ++/* ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++#ifndef _SETJMP_H ++# error "Never include directly; use instead." ++#endif ++ ++#ifndef _ASM ++/* ++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are ++ * not saved. ++ */ ++typedef int __jmp_buf[11]; ++#endif ++ ++#define __JMP_BUF_SP 4 ++ ++/* Test if longjmp to JMPBUF would unwind the frame containing a local ++ variable at ADDRESS. */ ++#define _JMPBUF_UNWINDS(jmpbuf, address) \ ++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/syscalls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,143 @@ ++#ifndef _SYSCALL_H ++# error "Never use directly; include instead." ++#endif ++ ++/* ++ * This includes the `__NR_' syscall numbers taken from the ++ * Linux kernel header files. It also defines the traditional ++ * `SYS_' macros for older programs. ++ */ ++#include ++ ++#ifndef __set_errno ++# define __set_errno(val) (*__errno_location()) = (val) ++#endif ++#ifndef SYS_ify ++# define SYS_ify(syscall_name) (__NR_##syscall_name) ++#endif ++ ++#ifndef __ASSEMBLER__ ++ ++#undef _syscall0 ++#define _syscall0(type,name) \ ++ type name(void) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 0)); \ ++ } ++ ++#undef _syscall1 ++#define _syscall1(type,name,type1,arg1) \ ++ type name(type1 arg1) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ ++ } ++ ++#undef _syscall2 ++#define _syscall2(type,name,type1,arg1,type2,arg2) \ ++ type name(type1 arg1, type2 arg2) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ ++ } ++ ++#undef _syscall3 ++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ ++ type name(type1 arg1, type2 arg2, type3 arg3) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 3, arg1, \ ++ arg2, arg3)); \ ++ } ++ ++#undef _syscall4 ++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ ++ arg3, arg4)); \ ++ } ++ ++#undef _syscall5 ++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ ++ arg3, arg4, arg5)); \ ++ } ++ ++#undef _syscall6 ++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5,type6,arg6) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5, type6 arg6) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ ++ arg4, arg5, arg6)); \ ++ } ++ ++#undef unlikely ++#define unlikely(x) __builtin_expect((x), 0) ++ ++#undef INLINE_SYSCALL ++#define INLINE_SYSCALL(name, nr, args...) \ ++ ({ \ ++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ ++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ ++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ ++ _sys_result = (unsigned int) -1; \ ++ } \ ++ (int) _sys_result; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) do { } while(0) ++ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++ ({ \ ++ register int _a1 asm ("r12"); \ ++ register int _scno asm("r8") = SYS_ify(name); \ ++ LOAD_ARGS_##nr (args); \ ++ asm volatile ("scall /* syscall " #name " */" \ ++ : "=r" (_a1) \ ++ : "r"(_scno) ASM_ARGS_##nr \ ++ : "lr", "cc", "memory"); \ ++ _a1; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_ERROR_P ++#define INTERNAL_SYSCALL_ERROR_P(val, err) \ ++ ((unsigned int)(val) >= 0xfffff001U) ++ ++#undef INTERNAL_SYSCALL_ERRNO ++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) ++ ++#define LOAD_ARGS_0() do { } while(0) ++#define ASM_ARGS_0 ++#define LOAD_ARGS_1(a1) \ ++ _a1 = (int) (a1); \ ++ LOAD_ARGS_0() ++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) ++#define LOAD_ARGS_2(a1, a2) \ ++ register int _a2 asm("r11") = (int)(a2); \ ++ LOAD_ARGS_1(a1) ++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) ++#define LOAD_ARGS_3(a1, a2, a3) \ ++ register int _a3 asm("r10") = (int)(a3); \ ++ LOAD_ARGS_2(a1, a2) ++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) ++#define LOAD_ARGS_4(a1, a2, a3, a4) \ ++ register int _a4 asm("r9") = (int)(a4); \ ++ LOAD_ARGS_3(a1, a2, a3) ++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) ++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ ++ register int _a5 asm("r5") = (int)(a5); \ ++ LOAD_ARGS_4(a1, a2, a3, a4) ++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) ++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ ++ register int _a6 asm("r3") = (int)(a6); \ ++ LOAD_ARGS_5(a1, a2, a3, a4, a5) ++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) ++ ++#endif /* __ASSEMBLER__ */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/wordsize.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1 @@ ++#define __WORDSIZE 32 +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/brk.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/brk.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++ ++void *__curbrk = 0; ++ ++int brk (void *addr) ++{ ++ void *newbrk; ++ ++ newbrk = INLINE_SYSCALL(brk, 1, addr); ++ ++ __curbrk = newbrk; ++ ++ if (newbrk < addr) { ++ __set_errno (ENOMEM); ++ return -1; ++ } ++ ++ return 0; ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-_setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 0) */ ++ .global _setjmp ++ .type _setjmp,"function" ++ .align 1 ++_setjmp: ++ mov r11, 0 ++ bral __sigsetjmp_internal ++ .size _setjmp, . - _setjmp +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 1) */ ++ .global setjmp ++ .type setjmp,"function" ++ .align 1 ++setjmp: ++ mov r11, 1 ++ bral __sigsetjmp_internal ++ .size setjmp, . - setjmp +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/clone.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/clone.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,37 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++ ++/* ++ * I don't know if we can be absolutely certain that the fn and arg ++ * parameters are preserved when returning as the child. If the ++ * compiler stores them in registers (r0-r7), they should be. ++ */ ++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) ++{ ++ register int (*_fn)(void *arg) = fn; ++ register void *_arg = arg; ++ int err; ++ ++ /* Sanity check the arguments */ ++ err = -EINVAL; ++ if (!fn) ++ goto syscall_error; ++ if (!child_stack) ++ goto syscall_error; ++ ++ err = INLINE_SYSCALL(clone, 2, flags, child_stack); ++ if (err < 0) ++ goto syscall_error; ++ else if (err != 0) ++ return err; ++ ++ _exit(_fn(_arg)); ++ ++syscall_error: ++ __set_errno (-err); ++ return -1; ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crt1.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crt1.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,93 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * When we enter _start, the stack looks like this: ++ * argc argument counter ++ * argv[0] pointer to program name ++ * argv[1..argc-1] pointers to program args ++ * NULL ++ * env[0..N] pointers to environment variables ++ * NULL ++ * ++ * r12 contains a function pointer to be registered with `atexit'. ++ * This is how the dynamic linker arranges to have DT_FINI functions ++ * called for shared libraries that have been loaded before this ++ * code runs. ++ * ++ * We're going to call the following function: ++ * __uClibc_main(int (*main)(int, char **, char **), int argc, ++ * char **argv, void (*app_init)(void), void (*app_fini)(void), ++ * void (*rtld_fini)(void), void *stack_end) ++ * ++ * So we need to set up things as follows: ++ * r12 = address of main ++ * r11 = argc ++ * r10 = &argv[0] ++ * r9 = address of _init ++ * r8 = address of _fini ++ * sp[0] = whatever we got passed in r12 ++ */ ++ ++#include ++ ++ .text ++ .global _start ++ .type _start, @function ++_start: ++ /* Clear the frame pointer and link register since this is the outermost frame. */ ++ mov r7, 0 ++ mov lr, 0 ++ ++ ld.w r11, sp++ /* argc */ ++ mov r10, sp /* &argv[0] */ ++ ++ st.w --sp, r10 /* stack_end */ ++ st.w --sp, r12 /* rtld_fini */ ++ ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++.L_RGOT: ++ rsub r6, pc ++ lda.w r9, _init ++ lda.w r8, _fini ++ lda.w r12, main ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ call __uClibc_main ++ ++ .align 2 ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++ lddpc r9, __init_addr /* app_init */ ++ lddpc r8, __fini_addr /* app_fini */ ++ lddpc r12, __main_addr /* main */ ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ lddpc pc, ___uClibc_main_addr ++ ++ .align 2 ++__init_addr: ++ .long _init ++__fini_addr: ++ .long _fini ++__main_addr: ++ .long main ++___uClibc_main_addr: ++ .long __uClibc_main ++#endif ++ .size _start, . - _start ++ ++ /* ++ * The LSB says we need this. ++ */ ++ .section ".note.ABI-tag", "a" ++ .align 4 ++ .long 2f - 1f /* namesz */ ++ .long 4f - 3f /* descsz */ ++ .long 1 /* type */ ++1: .asciz "GNU" /* name */ ++2: .align 4 ++3: .long 0 /* Linux executable */ ++ .long 2,6,0 /* Earliest compatible kernel */ ++4: .align 4 +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crti.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crti.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,17 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++_init: ++ /* Use a four-byte instruction to avoid NOPs */ ++ stm --sp, r0-r7,lr ++ .align 2 ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++_fini: ++ stm --sp, r0-r7,lr ++ .align 2 +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crtn.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crtn.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,14 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++ ldm sp++, r0-r7,pc ++ .size _init, . - _init ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++ ldm sp++, r0-r7,pc ++ .size _fini, . - _fini +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/mmap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/mmap.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/setjmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#define _SETJMP_H ++#define _ASM ++#include ++ ++ .text ++ ++ .global __sigsetjmp ++ .type __sigsetjmp,"function" ++ ++ /* Create a global, hidden symbol for use by setjmp() and _setjmp(). ++ If it's not hidden, the linker will complain about a relative ++ jump to a dynamic symbol when building a shared library. ++ ++ Also, if a user overrides the __sigsetjmp function, he might not ++ expect the setjmp() and _setjmp() function to effectively be ++ overridden as well. */ ++ .global __sigsetjmp_internal ++ .hidden __sigsetjmp_internal ++ .type __sigsetjmp_internal,"function" ++ .align 1 ++__sigsetjmp: ++__sigsetjmp_internal: ++ mustr r8 ++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ ++ /* Make a tail call to __sigjmp_save; it takes the same args. */ ++#ifdef __PIC__ ++ mov r9, r6 ++ lddpc r6, .LG ++.L1: rsub r6, pc ++ ld.w r8, r6[__sigjmp_save@got] ++ mov r6, r9 ++ mov pc, r8 ++ ++ .align 2 ++.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_ ++#else ++ rjmp __sigjmp_save ++#endif ++ .size __sigsetjmp, . - __sigsetjmp +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigaction.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigaction.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++#define SA_RESTORER 0x04000000 ++extern void __default_rt_sa_restorer(void); ++ ++/* ++ * If act is not NULL, change the action for sig to *act. ++ * If oact is not NULL, put the old action for sig in *oact. ++ */ ++int __libc_sigaction(int signum, const struct sigaction *act, ++ struct sigaction *oldact) ++{ ++ struct kernel_sigaction kact, koact; ++ int result; ++ ++ if (act) { ++ kact.k_sa_handler = act->sa_handler; ++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); ++ kact.sa_flags = act->sa_flags; ++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) ++ kact.sa_restorer = act->sa_restorer; ++ else ++ kact.sa_restorer = __default_rt_sa_restorer; ++ kact.sa_flags |= SA_RESTORER; ++ } ++ ++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, ++ oldact ? __ptrvalue(&koact) : NULL, ++ _NSIG / 8); ++ ++ if (oldact && result >= 0) { ++ oldact->sa_handler = koact.k_sa_handler; ++ memcpy(&oldact->sa_mask, &koact.sa_mask, ++ sizeof(oldact->sa_mask)); ++ oldact->sa_flags = koact.sa_flags; ++ oldact->sa_restorer = koact.sa_restorer; ++ } ++ ++ return result; ++} ++ ++weak_alias(__libc_sigaction, sigaction) +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigrestorer.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigrestorer.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++ ++ .global __default_rt_sa_restorer ++ .type __default_rt_sa_restorer,"function" ++ .align 1 ++__default_rt_sa_restorer: ++ mov r8, __NR_rt_sigreturn ++ scall +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/elf.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/elf.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_ELF_H ++#define _SYS_ELF_H 1 ++ ++#warning "This header is obsolete; use instead." ++ ++#include ++ ++#endif /* sys/elf.h */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/io.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/io.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,48 @@ ++/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_IO_H ++ ++#define _SYS_IO_H 1 ++#include ++ ++__BEGIN_DECLS ++ ++/* If TURN_ON is TRUE, request for permission to do direct i/o on the ++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O ++ permission off for that range. This call requires root privileges. */ ++extern int ioperm (unsigned long int __from, unsigned long int __num, ++ int __turn_on) __THROW; ++ ++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, ++ permission to access any I/O port is granted. This call requires ++ root privileges. */ ++extern int iopl (int __level) __THROW; ++ ++/* The functions that actually perform reads and writes. */ ++extern unsigned char inb (unsigned long int port) __THROW; ++extern unsigned short int inw (unsigned long int port) __THROW; ++extern unsigned long int inl (unsigned long int port) __THROW; ++ ++extern void outb (unsigned char value, unsigned long int port) __THROW; ++extern void outw (unsigned short value, unsigned long int port) __THROW; ++extern void outl (unsigned long value, unsigned long int port) __THROW; ++ ++__END_DECLS ++ ++#endif /* _SYS_IO_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/procfs.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/procfs.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,123 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_PROCFS_H ++#define _SYS_PROCFS_H 1 ++ ++/* This is somewhat modelled after the file of the same name on SVR4 ++ systems. It provides a definition of the core file format for ELF ++ used on Linux. It doesn't have anything to do with the /proc file ++ system, even though Linux has one. ++ ++ Anyway, the whole purpose of this file is for GDB and GDB only. ++ Don't read too much into it. Don't use it for anything other than ++ GDB unless you know what you are doing. */ ++ ++#include ++#include ++#include ++#include ++ ++__BEGIN_DECLS ++ ++/* Type for a general-purpose register. */ ++typedef unsigned long elf_greg_t; ++ ++/* And the whole bunch of them. We could have used `struct ++ user_regs' directly in the typedef, but tradition says that ++ the register set is an array, which does have some peculiar ++ semantics, so leave it that way. */ ++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++/* Register set for the floating-point registers. */ ++typedef struct user_fpregs elf_fpregset_t; ++ ++/* Signal info. */ ++struct elf_siginfo ++ { ++ int si_signo; /* Signal number. */ ++ int si_code; /* Extra code. */ ++ int si_errno; /* Errno. */ ++ }; ++ ++/* Definitions to generate Intel SVR4-like core files. These mostly ++ have the same names as the SVR4 types with "elf_" tacked on the ++ front to prevent clashes with Linux definitions, and the typedef ++ forms have been avoided. This is mostly like the SVR4 structure, ++ but more Linuxy, with things that Linux does not support and which ++ GDB doesn't really use excluded. */ ++ ++struct elf_prstatus ++ { ++ struct elf_siginfo pr_info; /* Info associated with signal. */ ++ short int pr_cursig; /* Current signal. */ ++ unsigned long int pr_sigpend; /* Set of pending signals. */ ++ unsigned long int pr_sighold; /* Set of held signals. */ ++ __pid_t pr_pid; ++ __pid_t pr_ppid; ++ __pid_t pr_pgrp; ++ __pid_t pr_sid; ++ struct timeval pr_utime; /* User time. */ ++ struct timeval pr_stime; /* System time. */ ++ struct timeval pr_cutime; /* Cumulative user time. */ ++ struct timeval pr_cstime; /* Cumulative system time. */ ++ elf_gregset_t pr_reg; /* GP registers. */ ++ int pr_fpvalid; /* True if math copro being used. */ ++ }; ++ ++ ++#define ELF_PRARGSZ (80) /* Number of chars for args. */ ++ ++struct elf_prpsinfo ++ { ++ char pr_state; /* Numeric process state. */ ++ char pr_sname; /* Char for pr_state. */ ++ char pr_zomb; /* Zombie. */ ++ char pr_nice; /* Nice val. */ ++ unsigned long int pr_flag; /* Flags. */ ++ unsigned short int pr_uid; ++ unsigned short int pr_gid; ++ int pr_pid, pr_ppid, pr_pgrp, pr_sid; ++ /* Lots missing */ ++ char pr_fname[16]; /* Filename of executable. */ ++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ ++ }; ++ ++/* The rest of this file provides the types for emulation of the ++ Solaris interfaces that should be implemented by ++ users of libthread_db. */ ++ ++/* Addresses. */ ++typedef void *psaddr_t; ++ ++/* Register sets. Linux has different names. */ ++typedef elf_gregset_t prgregset_t; ++typedef elf_fpregset_t prfpregset_t; ++ ++/* We don't have any differences between processes and threads, ++ therefore have only one PID type. */ ++typedef __pid_t lwpid_t; ++ ++/* Process status and info. In the end we do provide typedefs for them. */ ++typedef struct elf_prstatus prstatus_t; ++typedef struct elf_prpsinfo prpsinfo_t; ++ ++__END_DECLS ++ ++#endif /* sys/procfs.h */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/ucontext.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,94 @@ ++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Linux/AVR32 ABI compliant context switching support. */ ++ ++#ifndef _SYS_UCONTEXT_H ++#define _SYS_UCONTEXT_H 1 ++ ++#include ++#include ++#include ++#include ++ ++typedef int greg_t; ++ ++/* Number of general registers. */ ++#define NGREG 16 ++ ++/* Container for all general registers. */ ++typedef elf_gregset_t gregset_t; ++ ++/* Number of each register is the `gregset_t' array. */ ++enum ++{ ++ R0 = 0, ++#define R0 R0 ++ R1 = 1, ++#define R1 R1 ++ R2 = 2, ++#define R2 R2 ++ R3 = 3, ++#define R3 R3 ++ R4 = 4, ++#define R4 R4 ++ R5 = 5, ++#define R5 R5 ++ R6 = 6, ++#define R6 R6 ++ R7 = 7, ++#define R7 R7 ++ R8 = 8, ++#define R8 R8 ++ R9 = 9, ++#define R9 R9 ++ R10 = 10, ++#define R10 R10 ++ R11 = 11, ++#define R11 R11 ++ R12 = 12, ++#define R12 R12 ++ R13 = 13, ++#define R13 R13 ++ R14 = 14, ++#define R14 R14 ++ R15 = 15 ++#define R15 R15 ++}; ++ ++/* Structure to describe FPU registers. */ ++typedef elf_fpregset_t fpregset_t; ++ ++/* Context to describe whole processor state. */ ++typedef struct ++ { ++ gregset_t gregs; ++ fpregset_t fpregs; ++ } mcontext_t; ++ ++/* Userlevel context. */ ++typedef struct ucontext ++{ ++ unsigned long uc_flags; ++ struct ucontext *uc_link; ++ stack_t uc_stack; ++ struct sigcontext uc_mcontext; ++ sigset_t uc_sigmask; /* mask last for extensibility */ ++} ucontext_t; ++ ++#endif /* sys/ucontext.h */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/user.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/user.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,46 @@ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H ++ ++struct user_fpregs ++{ ++ ++}; ++ ++struct user_regs ++{ ++ unsigned long sr; ++ unsigned long pc; ++ unsigned long lr; ++ unsigned long sp; ++ unsigned long r12; ++ unsigned long r11; ++ unsigned long r10; ++ unsigned long r9; ++ unsigned long r8; ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++ unsigned long r12_orig; ++}; ++ ++struct user ++{ ++ struct user_regs regs; /* general registers */ ++ size_t u_tsize; /* text size (pages) */ ++ size_t u_dsize; /* data size (pages) */ ++ size_t u_ssize; /* stack size (pages) */ ++ unsigned long start_code; /* text starting address */ ++ unsigned long start_data; /* data starting address */ ++ unsigned long start_stack; /* stack starting address */ ++ long int signal; /* signal causing core dump */ ++ struct user_regs * u_ar0; /* help gdb find registers */ ++ unsigned long magic; /* identifies a core file */ ++ char u_comm[32]; /* user command name */ ++}; ++ ++#endif /* _SYS_USER_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/syscall.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/syscall.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,81 @@ ++/* ++ * syscall for AVR32/uClibc ++ * ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU Library 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 Library General Public License ++ * for more details. ++ * ++ * You should have received a copy of the GNU Library General Public License ++ * along with this program; if not, write to the Free Software Foundation, ++ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++#include ++ ++ .text ++ ++ /* ++ * long int syscall(long int sysno, ...) ++ */ ++ .global syscall ++ .type syscall, @function ++ .align 2 ++syscall: ++ stm --sp, r3,r5,lr ++ sub lr, sp, -12 ++ mov r8, r12 ++ ldm lr, r3,r5,r9-r12 ++ scall ++ cp.w r12, -4095 ++ brlo .Ldone ++ ++#ifdef __PIC__ ++ lddpc r5, .Lgot ++.Lgotcalc: ++ rsub r5, pc ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall r5[__errno_location@got] ++ st.w r12[0], r3 ++# else ++ ld.w r3, r5[errno@got] ++ st.w r3[0], r12 ++# endif ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall .Lerrno_location ++ st.w r12[0], r3 ++# else ++ lddpc r3, .Lerrno ++ st.w r3[0], r12 ++# endif ++#endif ++ mov r12, -1 ++ ++.Ldone: ++ ldm sp++, r3,r5,pc ++ ++ .align 2 ++#ifdef __PIC__ ++.Lgot: ++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++.Lerrno_location: ++ .long __errno_location ++# else ++.Lerrno: ++ .long errno ++# endif ++#endif ++ ++ ++ .size syscall, . - syscall +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/vfork.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/vfork.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,55 @@ ++ /* ++ * vfork for uClibc ++ * ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++ /* ++ * Clone the process without copying the address space. The ++ * calling process is suspended until the child either exits ++ * or calls execve. ++ * ++ * This all means that we cannot rely on the stack to store ++ * away registers, since they will be overwritten by the child ++ * as soon as it makes another function call (e.g. execve()). ++ * Fortunately, the Linux kernel preserves LR across system calls. ++ */ ++#include ++#include ++ ++ .global __vfork ++ .type __vfork,@function ++ .align 1 ++__vfork: ++ mov r8, __NR_vfork ++ scall ++ cp.w r12, -4096 ++ retls r12 ++ ++ /* vfork failed, so we may use the stack freely */ ++ pushm r4-r7,lr ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++ rsub r4, r12, 0 ++.L_RGOT: ++ rsub r6, pc ++ mcall r6[__errno_location@got] ++#else ++ rsub r4, r12, 0 ++ mcall .L__errno_location ++#endif ++ st.w r12[0], r4 ++ popm r4-r7,pc,r12=-1 ++ ++ .align 2 ++#ifdef __PIC__ ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++.L__errno_location: ++ .long __errno_location ++#endif ++ .size __vfork, . - __vfork ++ ++ .weak vfork ++ vfork = __vfork +Index: uClibc-0.9.28-avr32/Rules.mak +=================================================================== +--- uClibc-0.9.28-avr32.orig/Rules.mak 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/Rules.mak 2006-10-19 15:05:52.000000000 +0200 +@@ -231,6 +231,12 @@ ifeq ($(strip $(TARGET_ARCH)),frv) + UCLIBC_LDSO=ld.so.1 + endif + ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++ CPU_CFLAGS-$(LINKRELAX) += -masm-addr-pseudos -Wa,--pic,--linkrelax ++ CPU_LDFLAGS-$(LINKRELAX) += --relax ++endif ++ + # Keep the check_gcc from being needlessly executed + ifndef PIEFLAG + ifneq ($(UCLIBC_BUILD_PIE),y) +Index: uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,15 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bcopy ++ .type bcopy, @function ++ .align 1 ++bcopy: ++ /* Swap the first two arguments */ ++ eor r11, r12 ++ eor r12, r11 ++ eor r11, r12 ++ rjmp __memmove ++ .size bcopy, . - bcopy +Index: uClibc-0.9.28-avr32/libc/string/avr32/bzero.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/bzero.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bzero ++ .type bzero, @function ++ .align 1 ++bzero: ++ mov r10, r11 ++ mov r11, 0 ++ rjmp __memset +Index: uClibc-0.9.28-avr32/libc/string/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,40 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../ ++include $(TOPDIR)Rules.mak ++ ++SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S ++SSRC += memset.S strcmp.S strlen.S ++# memchr.S, strcat.S, strcpy.S, strncpy.S is broken ++SOBJS := $(patsubst %.S,%.o, $(SSRC)) ++OBJS := $(SOBJS) ++ ++OBJ_LIST:= ../../obj.string.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) ++ echo $(addprefix string/$(TARGET_ARCH)/, $(OBJS)) > $@ ++ ++$(SOBJS): %.o: %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $@ ++ ++clean: ++ $(RM) *.[oa] *~ core +Index: uClibc-0.9.28-avr32/libc/string/avr32/memchr.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memchr.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++#define chr r11 ++#define len r10 ++ ++ .text ++ .global memchr ++ .type memchr, @function ++memchr: ++ or chr, chr, chr << 8 ++ or chr, chr, chr << 16 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: sub len, 4 ++ brlt 2f ++ ld.w r8, str++ ++ psub.b r9, r8, r11 ++ tnbz r9 ++ brne 1b ++ ++ sub str, 4 ++ bfextu r9, r8, 24, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ bfextu r9, r8, 16, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ bfextu r9, r8, 8, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ retal str ++ ++2: sub len, -4 ++ reteq 0 ++ ++3: ld.ub r8, str++ ++ cp.w r8, 0 ++ reteq str ++ sub len, 1 ++ brne 3b ++ ++ retal 0 ++ ++.Lunaligned_str: ++1: sub len, 1 ++ retlt 0 ++ ld.ub r8, str++ ++ cp.b r8, r11 ++ reteq str ++ sub r9, 1 ++ brge 1b ++ ++ rjmp .Laligned_search +Index: uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global memcmp ++ .type memcmp, @function ++ .align 1 ++memcmp: ++ cp.w len, 1 ++ retlt 0 ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ subfne len, 1 ++ brne 1b ++ ++ retal r8 ++ .size memcmp, . - memcmp ++ ++ .weak bcmp ++ bcmp = memcmp +Index: uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++/* Don't use r12 as dst since we must return it unmodified */ ++#define dst r9 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memcpy ++ .type memcpy, @function ++ ++ .global __memcpy ++ .hidden __memcpy ++ .type __memcpy, @function ++memcpy: ++__memcpy: ++ pref src[0] ++ mov dst, r12 ++ ++ /* If we have less than 32 bytes, don't do anything fancy */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, src++ ++ st.b dst++, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, dst ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ ldm src, r0-r7 ++ sub src, -32 ++ stm dst, r0-r7 ++ sub dst, -32 ++ sub len, 32 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ ldm src, r0-r3 ++ sub src, -16 ++ sub len, 16 ++ stm dst, r0-r3 ++ sub dst, -16 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ neg len ++ add pc, pc, len << 2 ++ .rept 15 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ rsub r8, r8, 32 ++ sub len, r8 ++1: ld.ub r0, src++ ++ st.b dst++, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[0] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, src++ ++ st.w dst++, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ .size memcpy, . - memcpy +Index: uClibc-0.9.28-avr32/libc/string/avr32/memmove.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memmove.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,114 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r12 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memmove ++ .type memmove, @function ++ ++ .global __memmove ++ .hidden __memmove ++ .type __memmove, @function ++memmove: ++__memmove: ++ cp.w src, dst ++ brge __memcpy ++ ++ add dst, len ++ add src, len ++ pref src[-1] ++ ++ /* ++ * The rest is basically the same as in memcpy.S except that ++ * the direction is reversed. ++ */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, --src ++ st.b --dst, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, r12 ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ sub src, 32 ++ ldm src, r0-r7 ++ sub dst, 32 ++ sub len, 32 ++ stm dst, r0-r7 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ sub src, 16 ++ ldm src, r0-r3 ++ sub dst, 16 ++ sub len, 16 ++ stm dst, r0-r3 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ sub len, -16 ++ breq 2f ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub len, 1 ++ brne 1b ++ ++2: popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ sub len, r8 ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[-4] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, --src ++ st.w --dst, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, --src ++ st.b --dst, r0 ++ .endr ++ ++ popm r0-r7, pc +Index: uClibc-0.9.28-avr32/libc/string/avr32/memset.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memset.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,60 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s r12 ++#define c r11 ++#define n r10 ++ ++ .text ++ .global memset ++ .type memset, @function ++ ++ .global __memset ++ .hidden __memset ++ .type __memset, @function ++ ++ .align 1 ++memset: ++__memset: ++ cp.w n, 32 ++ mov r9, s ++ brge .Llarge_memset ++ ++ sub n, 1 ++ retlt s ++1: st.b s++, c ++ sub n, 1 ++ brge 1b ++ ++ retal r9 ++ ++.Llarge_memset: ++ mov r8, r11 ++ mov r11, 3 ++ or r8, r8, r8 << 8 ++ or r8, r8, r8 << 16 ++ tst s, r11 ++ breq 2f ++ ++1: st.b s++, r8 ++ sub n, 1 ++ tst s, r11 ++ brne 1b ++ ++2: mov r11, r9 ++ mov r9, r8 ++ sub n, 8 ++ ++3: st.d s++, r8 ++ sub n, 8 ++ brge 3b ++ ++ /* If we are done, n == -8 and we'll skip all st.b insns below */ ++ neg n ++ lsl n, 1 ++ add pc, n ++ .rept 7 ++ st.b s++, r8 ++ .endr ++ retal r11 +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcat.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcat.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define s1 r9 ++#define s2 r11 ++ ++ .text ++ .global strcat ++ .type strcat, @function ++ .align 1 ++strcat: ++ mov s1, r12 ++ ++ /* Make sure s1 is word-aligned */ ++ mov r10, s1 ++ andl r10, 3, COH ++ breq 2f ++ ++ add pc, pc, r10 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 2f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 3f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 4f ++ ++ /* Find the end of the first string */ ++5: ld.w r8, s1++ ++ tnbz r8 ++ brne 5b ++ ++ sub s1, 4 ++ ++ bfextu r10, r8, 24, 8 ++ cp.w r10, 0 ++ breq 1f ++ sub s1, -1 ++ bfextu r10, r8, 16, 8 ++ cp.w r10, 0 ++ breq 2f ++ sub s1, -1 ++ bfextu r10, r8, 8, 8 ++ cp.w r10, 0 ++ breq 3f ++ sub s1, -1 ++ rjmp 4f ++ ++ /* Now, append s2 */ ++1: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++2: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++3: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++4: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++ ++ /* Copy one word at a time */ ++ ld.w r8, s2++ ++ tnbz r8 ++ breq 2f ++1: st.w r8, s2++ ++ ld.w r8, s2++ ++ tnbz r8 ++ brne 1b ++ ++ /* Copy the remaining bytes */ ++ bfextu r10, r8, 24, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 16, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 8, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ st.b s1++, r8 ++ retal r12 ++ .size strcat, . - strcat +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global strcmp ++ .type strcmp, @function ++ .align 1 ++strcmp: ++ mov r8, 3 ++ tst s1, r8 ++ brne .Lunaligned_s1 ++ tst s2, r8 ++ brne .Lunaligned_s2 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne 2f ++ tnbz r8 ++ brne 1b ++ retal 0 ++ ++2: bfextu r12, r8, 24, 8 ++ bfextu r11, r9, 24, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 16, 8 ++ bfextu r11, r9, 16, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 8, 8 ++ bfextu r11, r9, 8, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 0, 8 ++ bfextu r11, r9, 0, 8 ++ sub r12, r11 ++ retal r12 ++ ++.Lunaligned_s1: ++3: tst s1, r8 ++ breq 4f ++ ld.ub r10, s1++ ++ ld.ub r9, s2++ ++ sub r10, r9 ++ retne r10 ++ cp.w r9, 0 ++ brne 3b ++ retal r10 ++ ++4: tst s2, r8 ++ breq 1b ++ ++.Lunaligned_s2: ++ /* ++ * s1 and s2 can't both be aligned, and unaligned word loads ++ * can trigger spurious exceptions if we cross a page boundary. ++ * Do it the slow way... ++ */ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ cp.w r9, 0 ++ brne 1b ++ retal 0 ++ ++ .weak strcoll ++ strcoll = strcmp +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,63 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * To reduce the size, this one might simply call strncpy with len = -1. ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strcpy, @function ++strcpy: ++ mov dst, r12 ++ ++ pref src[0] ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ rjmp 1b ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ bfextu r10, r8, 24, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 16, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 8, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ st.b dst++, r8 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ rsub r8, r8, 4 ++ add pc, pc, r8 << 3 ++ nop ++ nop ++ ld.ub r10, src++ ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ ++ rjmp .Laligned_copy +Index: uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,144 @@ ++ ++#include ++#include ++#include ++#include ++ ++#define BUF_SIZE (8 * 1024) ++ ++static char *buf1; ++static char *buf1_ref; ++static char *buf2; ++ ++extern void *optimized_memcpy(void *dest, void *src, size_t len); ++extern void *optimized_memmove(void *dest, void *src, size_t len); ++extern char *optimized_strcpy(char *dest, char *src); ++extern char *optimized_strncpy(char *dest, char *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("%4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++static void test_memcpy(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ int i; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memcpy with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ for (i = 0; i < 8192; i++) ++ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ for ( i = 0; i < 8192; i++) ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++static void test_memmove(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memmove with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ memmove(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf2 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf2"); ++ return 1; ++ } ++ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1"); ++ return 1; ++ } ++ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1_ref == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1_ref"); ++ return 1; ++ } ++ printf("\n === MEMCPY ===\n\n"); ++ ++ test_memcpy(0, 0, BUF_SIZE - 32); ++ test_memcpy(0, 0, 1); ++ test_memcpy(0, 0, 31); ++ test_memcpy(0, 0, 32); ++ test_memcpy(0, 0, 127); ++ test_memcpy(0, 0, 128); ++ test_memcpy(4, 4, BUF_SIZE - 32 - 4); ++ test_memcpy(1, 1, BUF_SIZE - 32 - 1); ++ test_memcpy(1, 1, 126); ++ test_memcpy(0, 3, 128); ++ test_memcpy(1, 4, 128); ++ test_memcpy(0, 0, 0); ++ ++ printf("\n === MEMMOVE ===\n\n"); ++ ++ test_memmove(0, 0, BUF_SIZE - 32); ++ test_memmove(0, 0, 1); ++ test_memmove(0, 0, 31); ++ test_memmove(0, 0, 32); ++ test_memmove(0, 0, BUF_SIZE - 33); ++ test_memmove(0, 0, 128); ++ test_memmove(4, 4, BUF_SIZE - 32 - 4); ++ test_memmove(1, 1, BUF_SIZE - 32 - 1); ++ test_memmove(1, 1, BUF_SIZE - 130); ++ test_memmove(0, 3, BUF_SIZE - 128); ++ test_memmove(1, 4, BUF_SIZE - 128); ++ test_memmove(0, 0, 0); ++ ++ return 0; ++} +Index: uClibc-0.9.28-avr32/libc/string/avr32/strlen.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strlen.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,52 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++ ++ .text ++ .global strlen ++ .type strlen, @function ++strlen: ++ mov r11, r12 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: ld.w r8, str++ ++ tnbz r8 ++ brne 1b ++ ++ sub r12, r11 ++ bfextu r9, r8, 24, 8 ++ cp.w r9, 0 ++ subeq r12, 4 ++ reteq r12 ++ bfextu r9, r8, 16, 8 ++ cp.w r9, 0 ++ subeq r12, 3 ++ reteq r12 ++ bfextu r9, r8, 8, 8 ++ cp.w r9, 0 ++ subeq r12, 2 ++ reteq r12 ++ sub r12, 1 ++ retal r12 ++ ++.Lunaligned_str: ++ add pc, pc, r9 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ brne 1b ++ ++1: sub r12, 1 ++ sub r12, r11 ++ retal r12 +Index: uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,77 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strncpy, @function ++strncpy: ++ mov dst, r12 ++ ++ pref src[0] ++ mov dst, r12 ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++ sub r10, 4 ++ brlt 3f ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ sub r10, 4 ++ brne 1b ++ ++3: sub r10, -4 ++ reteq r12 ++ ++ /* This is safe as long as src is word-aligned and r10 > 0 */ ++ ld.w r8, src++ ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ bfextu r11, r8, 24, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ bfextu r11, r8, 16, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ bfextu r11, r8, 8, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ st.b dst++, r8 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ min r8, r8, r10 ++ sub r10, r8 ++ sub r8, 1 ++ retlt r12 ++1: ld.ub r10, src++ ++ st.b dst++, r10 ++ sub r8, 1 ++ brge 1b ++ ++ rjmp .Laligned_copy +Index: uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,66 @@ ++ ++#include ++#include ++ ++#define BUF_SIZE 32768 ++ ++static char buf1[BUF_SIZE] __attribute__((aligned(32))); ++static char buf1_ref[BUF_SIZE] __attribute__((aligned(32))); ++static char buf2[BUF_SIZE] __attribute__((aligned(32))); ++ ++extern void *new_memcpy(void *dest, void *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("% 4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++void test(int src_offset, int dst_offset, int len) ++{ ++ memset(buf1, 0x55, sizeof(buf1)); ++ memset(buf1_ref, 0x55, sizeof(buf1_ref)); ++ memset(buf2, 0xaa, sizeof(buf2)); ++ ++ printf("Testing with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ ++ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, sizeof(buf1)); ++ } ++} ++ ++int main(int argc, char *argv[]) ++{ ++ test(0, 0, BUF_SIZE); ++ test(0, 0, 1); ++ test(0, 0, 31); ++ test(0, 0, 32); ++ test(0, 0, 127); ++ test(0, 0, 128); ++ test(4, 4, BUF_SIZE - 4); ++ test(1, 1, BUF_SIZE - 1); ++ test(1, 1, 126); ++ test(0, 3, 128); ++ test(1, 4, 128); ++ ++ return 0; ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/create_module.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/create_module.c 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/create_module.c 2006-10-19 15:05:52.000000000 +0200 +@@ -61,7 +61,8 @@ unsigned long create_module(const char * + { + return __create_module(name, size, 0, 0); + } +-#else ++/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */ ++#elif !defined(__avr32__) + /* Sparc, MIPS, etc don't mistake return values for errors. */ + _syscall2(unsigned long, create_module, const char *, name, size_t, size); + #endif +Index: uClibc-0.9.28-avr32/ldso/include/dl-string.h +=================================================================== +--- uClibc-0.9.28-avr32.orig/ldso/include/dl-string.h 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/ldso/include/dl-string.h 2006-10-19 15:05:52.000000000 +0200 +@@ -134,7 +134,7 @@ static inline char * _dl_strstr(const ch + } while (1); + } + +-static inline void * _dl_memcpy(void * dst, const void * src, size_t len) ++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) + { + register char *a = dst-1; + register const char *b = src-1; +@@ -271,7 +271,8 @@ static __always_inline char * _dl_simple + /* On some arches constant strings are referenced through the GOT. + * This requires that load_addr must already be defined... */ + #if defined(mc68000) || defined(__arm__) || defined(__mips__) \ +- || defined(__sh__) || defined(__powerpc__) ++ || defined(__sh__) || defined(__powerpc__) \ ++ || defined(__avr32__) + # define CONSTANT_STRING_GOT_FIXUP(X) \ + if ((X) < (const char *) load_addr) (X) += load_addr + # define NO_EARLY_SEND_STDERR +Index: uClibc-0.9.28-avr32/ldso/include/dl-syscall.h +=================================================================== +--- uClibc-0.9.28-avr32.orig/ldso/include/dl-syscall.h 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/ldso/include/dl-syscall.h 2006-10-19 15:05:52.000000000 +0200 +@@ -60,59 +60,59 @@ + dynamic linking at all, so we cannot return any error codes. + We just punt if there is an error. */ + #define __NR__dl_exit __NR_exit +-static inline _syscall1(void, _dl_exit, int, status); ++static __always_inline _syscall1(void, _dl_exit, int, status); + + #define __NR__dl_close __NR_close +-static inline _syscall1(int, _dl_close, int, fd); ++static __always_inline _syscall1(int, _dl_close, int, fd); + + #define __NR__dl_open __NR_open +-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); ++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); + + #define __NR__dl_write __NR_write +-static inline _syscall3(unsigned long, _dl_write, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_write, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_read __NR_read +-static inline _syscall3(unsigned long, _dl_read, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_read, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_mprotect __NR_mprotect +-static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); ++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); + + #define __NR__dl_stat __NR_stat +-static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); ++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); + + #define __NR__dl_munmap __NR_munmap +-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); ++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); + + #define __NR__dl_getuid __NR_getuid +-static inline _syscall0(uid_t, _dl_getuid); ++static __always_inline _syscall0(uid_t, _dl_getuid); + + #define __NR__dl_geteuid __NR_geteuid +-static inline _syscall0(uid_t, _dl_geteuid); ++static __always_inline _syscall0(uid_t, _dl_geteuid); + + #define __NR__dl_getgid __NR_getgid +-static inline _syscall0(gid_t, _dl_getgid); ++static __always_inline _syscall0(gid_t, _dl_getgid); + + #define __NR__dl_getegid __NR_getegid +-static inline _syscall0(gid_t, _dl_getegid); ++static __always_inline _syscall0(gid_t, _dl_getegid); + + #define __NR__dl_getpid __NR_getpid +-static inline _syscall0(gid_t, _dl_getpid); ++static __always_inline _syscall0(gid_t, _dl_getpid); + + #define __NR__dl_readlink __NR_readlink +-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); ++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); + + #ifdef __NR_mmap + #ifdef MMAP_HAS_6_ARGS + #define __NR__dl_mmap __NR_mmap +-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, ++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, + int, prot, int, flags, int, fd, off_t, offset); + #else + #define __NR__dl_mmap_real __NR_mmap +-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); ++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); + +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + unsigned long buffer[6]; +@@ -128,11 +128,12 @@ static inline void * _dl_mmap(void * add + #endif + #elif defined __NR_mmap2 + #define __NR___syscall_mmap2 __NR_mmap2 +-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, ++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, + size_t, len, int, prot, int, flags, int, fd, off_t, offset); + /*always 12, even on architectures where PAGE_SHIFT != 12 */ + #define MMAP2_PAGE_SHIFT 12 +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++#define MAP_FAILED ((void *) -1) ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-debug.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-debug.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,45 @@ ++/* ++ * AVR32 ELF shared libary loader support ++ * ++ * Copyright (C) 2005 Atmel Norway ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++static const char *_dl_reltypes_tab[] = { ++ "R_AVR32_NONE", ++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", ++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", ++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", ++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", ++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", ++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", ++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", ++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", ++ "R_AVR32_HI16", "R_AVR32_LO16", ++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", ++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", ++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", ++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", ++ "R_AVR32_ALIGN", ++}; +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-startup.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-startup.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Architecture specific code used by dl-startup.c ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++/* This is the library loader's main entry point. Let _dl_boot2 do its ++ * initializations and jump to the application's entry point ++ * afterwards. */ ++asm( " .text\n" ++ " .global _start\n" ++ " .type _start,@function\n" ++ "_start:\n" ++ /* All arguments are on the stack initially */ ++ " mov r12, sp\n" ++ " rcall _dl_start\n" ++ /* Returns user entry point in r12. Save it. */ ++ " mov r0, r12\n" ++ /* We're PIC, so get the Global Offset Table */ ++ " lddpc r6, .L_GOT\n" ++ ".L_RGOT:\n" ++ " rsub r6, pc\n" ++ /* Adjust argc and argv according to _dl_skip_args */ ++ " ld.w r1, r6[_dl_skip_args@got]\n" ++ " ld.w r1, r1[0]\n" ++ " ld.w r2, sp++\n" ++ " sub r2, r1\n" ++ " add sp, sp, r1 << 2\n" ++ " st.w --sp, r2\n" ++ /* Load the finalizer function */ ++ " ld.w r12, r6[_dl_fini@got]\n" ++ /* Jump to the user's entry point */ ++ " mov pc, r0\n\n" ++ ++ " .align 2\n" ++ ".L_GOT:" ++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" ++ " .size _start, . - _start\n" ++ " .previous\n"); ++ ++/* Get a pointer to the argv array. On many platforms this can be just ++ * the address if the first argument, on other platforms we need to ++ * do something a little more subtle here. */ ++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) ++ ++ ++/* We can't call functions before the GOT has been initialized */ ++#define NO_FUNCS_BEFORE_BOOTSTRAP ++ ++/* ++ * Relocate the GOT during dynamic loader bootstrap. This will add ++ * the load address to all entries in the GOT, which is necessary ++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the ++ * GOT. ++ */ ++static __always_inline ++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) ++{ ++ Elf32_Addr i, nr_got; ++ register Elf32_Addr *__r6 __asm__("r6"); ++ Elf32_Addr *got = __r6; ++ ++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); ++ for (i = 2; i < nr_got; i++) ++ got[i] += tpnt->loadaddr; ++} ++ ++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) ++ ++/* Handle relocation of the symbols in the dynamic loader. */ ++static __always_inline ++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, ++ unsigned long symbol_addr, ++ unsigned long load_addr, Elf32_Sym *symtab) ++{ ++ switch(ELF32_R_TYPE(rpnt->r_info)) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr; ++ break; ++ case R_AVR32_RELATIVE: ++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); ++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); ++ SEND_STDERR_DEBUG(" + "); ++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); ++ *reloc_addr = load_addr + rpnt->r_addend; ++ break; ++ default: ++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); ++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); ++ SEND_STDERR("REL, SYMBOL, LOAD: "); ++ SEND_ADDRESS_STDERR(reloc_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(symbol_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(load_addr, 1); ++ _dl_exit(1); ++ } ++} ++ ++/* Transfer control to the user's application, once the dynamic loader ++ * is done. This routine has to exit the current function, then call ++ * the _dl_elf_main function. ++ * ++ * Since our _dl_boot will simply call whatever is returned by ++ * _dl_boot2, we can just return the address we're supposed to ++ * call. */ ++#define START() return _dl_elf_main; +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-syscalls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-syscalls.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,5 @@ ++/* We can't use the real errno in ldso, since it has not yet ++ * been dynamicly linked in yet. */ ++extern int _dl_errno; ++#define __set_errno(X) {(_dl_errno) = (X);} ++#include "sys/syscall.h" +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-sysdep.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-sysdep.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,103 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Various assembly language/system dependent hacks that are required ++ * so that we can minimize the amount of platform specific code. ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++ ++/* Define this if the system uses RELOCA. */ ++#define ELF_USES_RELOCA ++ ++#include ++ ++#define ARCH_NUM 1 ++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) ++ ++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ ++ do { \ ++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ ++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ ++ } while (0) ++ ++/* Initialization sequence for the application/library GOT. */ ++#define INIT_GOT(GOT_BASE,MODULE) \ ++ do { \ ++ unsigned long i, nr_got; \ ++ \ ++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ ++ GOT_BASE[1] = (unsigned long) MODULE; \ ++ \ ++ /* Add load address displacement to all GOT entries */ \ ++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ ++ for (i = 2; i < nr_got; i++) \ ++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ ++ } while (0) ++ ++#define do_rem(result, n, base) ((result) = (n) % (base)) ++ ++/* Here we define the magic numbers that this dynamic loader should accept */ ++#define MAGIC1 EM_AVR32 ++#undef MAGIC2 ++ ++/* Used for error messages */ ++#define ELF_TARGET "AVR32" ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); ++ ++/* 4096 bytes alignment */ ++#define PAGE_ALIGN 0xfffff000 ++#define ADDR_ALIGN 0xfff ++#define OFFS_ALIGN 0x7ffff000 ++ ++#define elf_machine_type_class(type) \ ++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) ++ ++/* AVR32 doesn't need any COPY relocs */ ++#define DL_NO_COPY_RELOCS ++ ++/* Return the link-time address of _DYNAMIC. Conveniently, this is the ++ first element of the GOT. This must be inlined in a function which ++ uses global data. */ ++static inline Elf32_Addr ++elf_machine_dynamic (void) ++{ ++ register Elf32_Addr *got asm ("r6"); ++ return *got; ++} ++ ++/* Return the run-time load address of the shared object. */ ++static inline Elf32_Addr ++elf_machine_load_address (void) ++{ ++ extern void __dl_start asm("_dl_start"); ++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; ++ Elf32_Addr pcrel_addr; ++ ++ asm (" lddpc %0, 2f\n" ++ "1: add %0, pc\n" ++ " rjmp 3f\n" ++ " .align 2\n" ++ "2: .long _dl_start - 1b\n" ++ "3:\n" ++ : "=r"(pcrel_addr) : : "cc"); ++ ++ return pcrel_addr - got_addr; ++} ++ ++/* ++ * Perform any RELATIVE relocations specified by DT_RELCOUNT. ++ * Currently, we don't use that tag, but we might in the future as ++ * this would reduce the startup time somewhat (although probably not by much). ++ */ ++static inline void ++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, ++ Elf32_Word relative_count) ++{ ++ Elf32_Rela *rpnt = (void *)rel_addr; ++ ++ do { ++ Elf32_Addr *reloc_addr; ++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); ++ *reloc_addr = load_off + rpnt->r_addend; ++ } while (--relative_count); ++} +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/elfinterp.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/elfinterp.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,191 @@ ++/* ++ * AVR32 ELF shared library loader suppport ++ * ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) ++{ ++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; ++ Elf32_Sym *sym; ++ unsigned long local_gotno; ++ unsigned long gotsym; ++ unsigned long new_addr; ++ char *strtab, *symname; ++ unsigned long *entry; ++ unsigned long sym_index = got_offset / 4; ++ ++#if 0 ++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; ++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; ++ ++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) ++ + sym_index; ++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); ++ symname = strtab + sym->st_name; ++ ++#if 0 ++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, ++ tpnt->symbol_scope, tpnt, ++ resolver); ++#endif ++ ++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); ++ *entry = new_addr; ++#endif ++ ++ return new_addr; ++} ++ ++static int ++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ unsigned long rel_addr, unsigned long rel_size, ++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) ++{ ++ Elf32_Sym *symtab; ++ Elf32_Rela *rpnt; ++ char *strtab; ++ int i; ++ ++ rpnt = (Elf32_Rela *)rel_addr; ++ rel_size /= sizeof(Elf32_Rela); ++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; ++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; ++ ++ for (i = 0; i < rel_size; i++, rpnt++) { ++ int symtab_index, res; ++ ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ ++ debug_sym(symtab, strtab, symtab_index); ++ debug_reloc(symtab, strtab, rpnt); ++ ++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); ++ ++ if (res == 0) ++ continue; ++ ++ _dl_dprintf(2, "\n%s: ", _dl_progname); ++ ++ if (symtab_index) ++ _dl_dprintf(2, "symbol '%s': ", ++ strtab + symtab[symtab_index].st_name); ++ ++ if (res < 0) { ++ int reloc_type = ELF32_R_TYPE(rpnt->r_info); ++#if defined(__SUPPORT_LD_DEBUG__) ++ _dl_dprintf(2, "can't handle reloc type %s\n", ++ _dl_reltypes(reloc_type)); ++#else ++ _dl_dprintf(2, "can't handle reloc type %x\n", ++ reloc_type); ++#endif ++ _dl_exit(-res); ++ } else { ++ _dl_dprintf(2, "can't resolve symbol\n"); ++ return res; ++ } ++ } ++ ++ return 0; ++} ++ ++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) ++{ ++ int reloc_type; ++ int symtab_index; ++ char *symname; ++ unsigned long *reloc_addr; ++ unsigned long symbol_addr; ++#if defined(__SUPPORT_LD_DEBUG__) ++ unsigned long old_val; ++#endif ++ ++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); ++ reloc_type = ELF32_R_TYPE(rpnt->r_info); ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ symbol_addr = 0; ++ symname = strtab + symtab[symtab_index].st_name; ++ ++ if (symtab_index) { ++ symbol_addr = (unsigned long) ++ _dl_find_hash(strtab + symtab[symtab_index].st_name, ++ tpnt->symbol_scope, tpnt, ++ elf_machine_type_class(reloc_type)); ++ ++ /* Allow undefined references to weak symbols */ ++ if (!symbol_addr && ++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { ++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", ++ _dl_progname, symname); ++ return 0; ++ } ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ old_val = *reloc_addr; ++#endif ++ switch (reloc_type) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr + rpnt->r_addend; ++ break; ++ case R_AVR32_RELATIVE: ++ *reloc_addr = (unsigned long)tpnt->loadaddr ++ + rpnt->r_addend; ++ break; ++ default: ++ return -1; ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ if (_dl_debug_reloc && _dl_debug_detail) ++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", ++ old_val, *reloc_addr); ++#endif ++ ++ return 0; ++} ++ ++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ /* TODO: Might want to support this in order to get faster ++ * startup times... */ ++} ++ ++int _dl_parse_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, ++ _dl_do_reloc); ++} +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/resolve.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/resolve.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,28 @@ ++/* ++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as ++ * indicated in register r12 and jumps to the resolved address. ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ * ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define ip r5 ++ ++ .text ++ .global _dl_linux_resolve ++ .type _dl_linux_resolve,@function ++_dl_linux_resolve: ++ /* The PLT code pushed r8 for us. It contains the address of this ++ function's GOT entry, that is entry 0. ip contains the address ++ of the GOT entry of the function we wanted to call. */ ++ stm --sp, r9-r12, lr ++ mov r11, r8 ++ sub r12, ip, r8 ++ rcall _dl_linux_resolver ++ mov ip, r12 ++ popm r8-r12,lr ++ mov pc, ip ++ .size _dl_linux_resolve, . - _dl_linux_resolve +Index: uClibc-0.9.28-avr32/ldso/ldso/dl-startup.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/ldso/ldso/dl-startup.c 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/ldso/ldso/dl-startup.c 2006-10-19 15:05:52.000000000 +0200 +@@ -217,7 +217,9 @@ static void * __attribute_used__ _dl_sta + /* some arches (like MIPS) we have to tweak the GOT before relocations */ + PERFORM_BOOTSTRAP_GOT(tpnt); + +-#else ++#endif ++ ++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) + + /* OK, now do the relocations. We do not do a lazy binding here, so + that once we are done, we have considerably more flexibility. */ +@@ -259,7 +261,7 @@ static void * __attribute_used__ _dl_sta + rel_addr += relative_count * sizeof(ELF_RELOC);; + } + +- rpnt = (ELF_RELOC *) (rel_addr + load_addr); ++ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */); + for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { + reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); + symtab_index = ELF_R_SYM(rpnt->r_info); +Index: uClibc-0.9.28-avr32/utils/ldd.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/utils/ldd.c 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/utils/ldd.c 2006-10-19 15:05:52.000000000 +0200 +@@ -56,6 +56,11 @@ + #define ELFCLASSM ELFCLASS32 + #endif + ++#if defined(__avr32__) ++#define MATCH_MACHINE(x) (x == EM_AVR32) ++#define ELFCLASSM ELFCLASS32 ++#endif ++ + #if defined(__s390__) + #define MATCH_MACHINE(x) (x == EM_S390) + #define ELFCLASSM ELFCLASS32 +Index: uClibc-0.9.28-avr32/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,92 @@ ++/* Machine-dependent pthreads configuration and inline functions. ++ ++ Copyright (C) 2005 Atmel Norway ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If not, ++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#include ++ ++static inline int ++_test_and_set (int *p, int v) __THROW ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline test and set */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " tst %0, %3\n" ++ " breq 2f\n" ++ " stcond %1, %3\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=m"(*p) ++ : "m"(*p), "r"(v) ++ : "memory", "cc"); ++ ++ return result; ++} ++ ++#ifndef PT_EI ++# define PT_EI extern inline ++#endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ return _test_and_set(spinlock, 1); ++} ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME stack_pointer ++register char * stack_pointer __asm__ ("sp"); ++ ++/* Compare-and-swap for semaphores. */ ++ ++#define HAS_COMPARE_AND_SWAP ++PT_EI int ++__compare_and_swap(long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* pt-machine.h */ diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config index c59defd311..478c713cb8 100644 --- a/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config +++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config @@ -32,23 +32,6 @@ ARCH_SUPPORTS_BIG_ENDIAN=y UCLIBC_COMPLETELY_PIC=y CONFIG_AP7000=y LINKRELAX=y -# CONFIG_GENERIC_386 is not set -# CONFIG_386 is not set -# CONFIG_486 is not set -# CONFIG_586 is not set -# CONFIG_586MMX is not set -# CONFIG_686 is not set -# CONFIG_PENTIUMII is not set -# CONFIG_PENTIUMIII is not set -# CONFIG_PENTIUM4 is not set -# CONFIG_K6 is not set -# CONFIG_K7 is not set -# CONFIG_ELAN is not set -# CONFIG_CRUSOE is not set -# CONFIG_WINCHIPC6 is not set -# CONFIG_WINCHIP2 is not set -# CONFIG_CYRIXIII is not set -# CONFIG_NEHEMIAH is not set # ARCH_LITTLE_ENDIAN is not set ARCH_BIG_ENDIAN=y # ARCH_HAS_NO_MMU is not set @@ -57,7 +40,7 @@ UCLIBC_HAS_FLOATS=y # HAS_FPU is not set UCLIBC_HAS_SOFT_FLOAT=y DO_C99_MATH=y -KERNEL_SOURCE="/usr/src/linux" +KERNEL_SOURCE="/media/hda4/OE/build/tmp-new/angstrom/cross/avr32-angstrom-linux-uclibc" C_SYMBOL_PREFIX="" HAVE_DOT_CONFIG=y @@ -86,7 +69,7 @@ UCLIBC_STATIC_LDCONFIG=y # MALLOC is not set # MALLOC_SIMPLE is not set MALLOC_STANDARD=y -# MALLOC_GLIBC_COMPAT is not set +MALLOC_GLIBC_COMPAT=y UCLIBC_DYNAMIC_ATEXIT=y HAS_SHADOW=y UNIX98PTY_ONLY=y @@ -102,6 +85,7 @@ UCLIBC_TZ_FILE_PATH="/etc/TZ" # UCLIBC_HAS_IPV6=y UCLIBC_HAS_RPC=y +UCLIBC_HAS_FULL_RPC=y # # String and Stdio Support @@ -113,11 +97,10 @@ UCLIBC_HAS_CTYPE_SIGNED=y UCLIBC_HAS_CTYPE_UNSAFE=y # UCLIBC_HAS_CTYPE_CHECKED is not set # UCLIBC_HAS_CTYPE_ENFORCED is not set -# UCLIBC_HAS_WCHAR is not set +UCLIBC_HAS_WCHAR=y # UCLIBC_HAS_LOCALE is not set # UCLIBC_HAS_HEXADECIMAL_FLOATS is not set # UCLIBC_HAS_GLIBC_CUSTOM_PRINTF is not set -# USE_OLD_VFPRINTF is not set UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 # UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set # UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set @@ -155,9 +138,9 @@ UCLIBC_HAS_GLOB=y # # Library Installation Options # -SHARED_LIB_LOADER_PREFIX="$(DEVEL_PREFIX)/lib" -RUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/" -DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/" +SHARED_LIB_LOADER_PREFIX="/lib" +RUNTIME_PREFIX="/" +DEVEL_PREFIX="//usr" # # uClibc security related options diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec new file mode 100644 index 0000000000..7d5541cf5a --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec @@ -0,0 +1,41 @@ +Name: uclibc-avr32-kernheaders +Version: 2.6 +Release: 9 +License: GPL +Group: Development/System +Summary: AVR32 header files from the Linux kernel for use by uClibc +BuildRoot: %{_tmppath}/uclibc-kernheaders-root +Source: linux-2.6.16.tar.bz2 +Source1: linux-dot-config +Patch0: linux-2.6.16.11.patch +Patch1: linux-2.6.16.11-avr32-20060626.patch + +%description +uclibc-avr32-kernheaders contain C header files from the Linux kernel +which are necessary for building the uClibc library. These header +files are also necessary for developing programs which use the standard +C libraries. + +If you are developing programs which wil use the standard C libraries, +you should install uclibc-avr32-kernheaders. + +%prep +%setup -q -n linux-2.6.16 +%patch0 -p1 +%patch1 -p1 +cp %{SOURCE1} .config + +%build +make prepare-all ARCH=avr32 CROSS_COMPILE=avr32-linux- + +%install +mkdir -p %{buildroot}/usr/avr32-linux/include +cp -a include/{linux,asm,asm-avr32,asm-generic} %{buildroot}/usr/avr32-linux/include + + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root) +/usr/avr32-linux/include diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch new file mode 100644 index 0000000000..0813c456b7 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch @@ -0,0 +1,14 @@ +--- uClibc-0.9.28/Rules.mak.orig 2006-03-30 10:23:05.000000000 +0200 ++++ uClibc-0.9.28/Rules.mak 2006-03-30 10:23:07.000000000 +0200 +@@ -272,7 +272,11 @@ + # If -msoft-float isn't supported, we want an error anyway. + # Hmm... might need to revisit this for arm since it has 2 different + # soft float encodings. ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++# GCC on avr32 doesn't support -msoft-float, it's the default. ++else + CPU_CFLAGS += -msoft-float ++endif + ifeq ($(strip $(TARGET_ARCH)),arm) + # No longer needed with current toolchains, but leave it here for now. + # If anyone is actually still using gcc 2.95 (say), they can uncomment it. diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch new file mode 100644 index 0000000000..97ed73471f --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch @@ -0,0 +1,16 @@ +Index: uclibc/Makefile +=================================================================== +RCS file: /disk1/ic_group/design/I9980/REPOSITORY/I7413/source/uclibc/Makefile,v +retrieving revision 1.1.1.3 +diff -u -r1.1.1.3 Makefile +--- uclibc/Makefile 31 Aug 2005 13:08:25 -0000 1.1.1.3 ++++ uclibc/Makefile 7 Dec 2005 06:38:39 -0000 +@@ -163,7 +163,7 @@ + else \ + extra_exclude="" ; \ + fi ; \ +- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \ ++ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \ + | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX) + ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y) + # Remove floating point related headers since float support is disabled. diff --git a/packages/uclibc/uclibc.inc b/packages/uclibc/uclibc.inc index ca6613d315..c513be5090 100644 --- a/packages/uclibc/uclibc.inc +++ b/packages/uclibc/uclibc.inc @@ -134,7 +134,7 @@ do_configure() { echo "# CONFIG_ARM_EABI is not set" >> ${S}/.config fi - oe_runmake oldconfig + yes '' | oe_runmake oldconfig } do_stage() { @@ -144,7 +144,6 @@ do_stage() { RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \ install_dev install_runtime - oe_runmake utils oe_runmake PREFIX= DEVEL_PREFIX=${UCLIBC_PREFIX}/ \ RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \ install_utils @@ -182,8 +181,14 @@ do_stage() { } do_install() { + # Install into the cross dir (this MUST be done first because we + # will install crt1.o in the install_dev stage and gcc needs it) + oe_runmake PREFIX= DEVEL_PREFIX=${UCLIBC_PREFIX}/ \ + RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \ + install_dev install_runtime + oe_runmake PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \ - install_dev install_runtime install_utils + install_dev install_runtime # We don't really need this in ${includedir} rm -f ${D}${prefix}/include/.cvsignore @@ -209,5 +214,9 @@ do_install() { mv ${D}/usr/bin/* ${D}${bindir}/ rmdir ${D}/usr/bin fi + + oe_runmake utils + oe_runmake PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \ + install_utils } diff --git a/packages/uclibc/uclibc/.mtn2git_empty b/packages/uclibc/uclibc/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/uclibc/uclibc_0.9.28.bb b/packages/uclibc/uclibc_0.9.28.bb index 2c557ec606..d5d1bae4be 100644 --- a/packages/uclibc/uclibc_0.9.28.bb +++ b/packages/uclibc/uclibc_0.9.28.bb @@ -1,5 +1,5 @@ DEFAULT_PREFERENCE = "1" -PR = "r9" +PR = "r10" require uclibc.inc @@ -47,6 +47,30 @@ SRC_URI += " ${THUMB_INTERWORK_RESOLVE_PATCH}" DEFAULT_PREFERENCE_avr32 = "6000" -SRC_URI_append_avr32 = " http://avr32linux.org/twiki/pub/Main/MicroClibcPatches/uClibc-0.9.28-avr1.patch.bz2;patch=1 " - +SRC_URI_append_avr32 = " \ + file://uclibc-makefile.patch;patch=1 \ + file://remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch;patch=1 \ + file://let-optimized-stringops-override-default-ones.patch;patch=1 \ + file://fix-getrusage-argument-type.patch;patch=1 \ + file://fix-__libc_fcntl64-varargs-prototype.patch;patch=1 \ + file://fix-broken-__libc_open-declaration.patch;patch=1 \ + file://avr32-arch-2.patch;patch=1 \ + file://avr32-linkrelax-option.patch;patch=1 \ + file://avr32-string-ops.patch;patch=1 \ + file://no-create_module-on-avr32.patch;patch=1 \ + file://ldso-always-inline-_dl_memcpy.patch;patch=1 \ + file://ldso-define-MAP_FAILED.patch;patch=1 \ + file://ldso-always-inline-syscalls.patch;patch=1 \ + file://ldso-avr32-2.patch;patch=1 \ + file://ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch;patch=1 \ + file://ldso-avr32-startup-hack.patch;patch=1 \ + file://ldd-avr32-support.patch;patch=1 \ + file://libpthread-avr32.patch;patch=1 \ + file://sync-fcntl-h-with-linux-kernel.patch;patch=1 \ + " + + +#file://uClibc-0.9.28-avr32-20060621.patch;patch=1 \ +#file://uClibc-0.9.28-avr32-20061019.patch;patch=1 \ +#file://uclibc-avr32-no-msoft-float.patch;patch=1 \ -- cgit v1.2.3 From 76eaaa7854736d16fa4377ea930e34acf0c4a997 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 12 Aug 2007 08:28:18 +0000 Subject: linux 2.6.18: improve avr32 support, courtesy Stelios Koroneos --- packages/linux/linux/atngw100/.mtn2git_empty | 0 packages/linux/linux/atngw100/defconfig | 849 +++++++++++++++++++++++++++ packages/linux/linux_2.6.18.bb | 108 ++++ 3 files changed, 957 insertions(+) create mode 100644 packages/linux/linux/atngw100/.mtn2git_empty create mode 100644 packages/linux/linux/atngw100/defconfig create mode 100644 packages/linux/linux_2.6.18.bb diff --git a/packages/linux/linux/atngw100/.mtn2git_empty b/packages/linux/linux/atngw100/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux/atngw100/defconfig b/packages/linux/linux/atngw100/defconfig new file mode 100644 index 0000000000..290dce50c5 --- /dev/null +++ b/packages/linux/linux/atngw100/defconfig @@ -0,0 +1,849 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.21 +# Sat Jun 2 10:40:44 2007 +# +CONFIG_AVR32=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_TIME=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_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +# CONFIG_TASK_XACCT is not set +# CONFIG_UTS_NS is not set +CONFIG_AUDIT=y +# CONFIG_IKCONFIG is not set +CONFIG_SYSFS_DEPRECATED=y +CONFIG_RELAY=y +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_BASE_FULL is not set +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SHMEM=y +CONFIG_SLAB=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=1 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_KMOD is not set + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" + +# +# System Type and features +# +CONFIG_SUBARCH_AVR32B=y +CONFIG_MMU=y +CONFIG_PERFORMANCE_COUNTERS=y +CONFIG_PLATFORM_AT32AP=y +CONFIG_CPU_AT32AP7000=y +CONFIG_BOARD_ATSTK1002=y +CONFIG_BOARD_ATSTK1000=y +CONFIG_LOADER_U_BOOT=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_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +# CONFIG_OWNERSHIP_TRACE is not set +# 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_CMDLINE="" + +# +# Bus options +# + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +CONFIG_INET_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 + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_IEEE80211 is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +# CONFIG_FW_LOADER is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y + +# +# 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 + +# +# 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 +# CONFIG_MTD_OBSOLETE_CHIPS 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_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP 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_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# Misc devices +# + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_NETLINK is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# +# CONFIG_ATA is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m + +# +# PHY device support +# +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_MACB=y + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=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 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_HW_RANDOM 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_RAW_DRIVER is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB_ARCH_HAS_HCD is not set +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# +# MMC/SD Card support +# +# CONFIG_MMC is not set + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# InfiniBand support +# + +# +# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) +# + +# +# Real Time Clock +# +# CONFIG_RTC_CLASS is not set + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# Auxiliary Display support +# + +# +# Virtualization +# + +# +# File systems +# +CONFIG_EXT2_FS=m +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4DEV_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +CONFIG_MINIX_FS=m +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_DNOTIFY is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=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_RAMFS=y +CONFIG_CONFIGFS_FS=m + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +# CONFIG_NFS_FS is not set +# CONFIG_NFSD is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=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 + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +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_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +CONFIG_FRAME_POINTER=y +CONFIG_FORCED_INLINING=y +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_KPROBES is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y diff --git a/packages/linux/linux_2.6.18.bb b/packages/linux/linux_2.6.18.bb new file mode 100644 index 0000000000..91a89c31f1 --- /dev/null +++ b/packages/linux/linux_2.6.18.bb @@ -0,0 +1,108 @@ +# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved +# Released under the MIT license (see packages/COPYING) + +require linux.inc + +DEFAULT_PREFERENCE_avr32 = "1" + +PR = "r0" + +PARALLEL_MAKE="" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \ + file://defconfig \ + " + +SRC_URI_append_avr32 = " \ + file://atmel-version.patch;patch=1 \ + file://add-flush_buffer-operation-to-uart_ops.patch;patch=1 \ + file://kbuild-add-unifdef.patch;patch=1 \ + file://kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch;patch=1 \ + file://kbuild-use-in-kernel-unifdef.patch;patch=1 \ + file://spi-set-kset-of-master-class-dev-explicitly.patch;patch=1 \ + file://spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch;patch=1 \ + file://usb-ethernet-align-all-descriptors-on-a-word-boundary.patch;patch=1 \ + file://usb-ethernet-define-cdc-capability-for-husb2.patch;patch=1 \ + file://usb-file-storage-align-all-descriptors-on-a-word-boundary.patch;patch=1 \ + file://usb-serial-align-all-descriptors-on-a-word-boundary.patch;patch=1 \ + file://usb-zero-align-all-descriptors-on-a-word-boundary.patch;patch=1 \ + file://dont-include-map-h-from-physmap-h.patch;patch=1 \ + file://mtd-unlock-nor-flash-automatically-where-necessary.patch;patch=1 \ + file://avr32-arch.patch;patch=1 \ + file://avr32-dont-include-asm-delay-h.patch;patch=1 \ + file://avr32-unistd-h-move-ifdef-kernel.patch;patch=1 \ + file://avr32-checkstack.patch;patch=1 \ + file://avr32-oprofile.patch;patch=1 \ + file://avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch;patch=1 \ + file://avr32-move-ethernet-tag-parsing-to-board-specific-code.patch;patch=1 \ + file://avr32-dma-controller-framework.patch;patch=1 \ + file://avr32-arch-neutral-gpio-api.patch;patch=1 \ + file://add-mach-specific-kconfig.patch;patch=1 \ + file://avr32-gpio-dev.patch;patch=1 \ + file://atmel-usart3-driver.patch;patch=1 \ + file://atmel-macb-ethernet-driver.patch;patch=1 \ + file://at32ap7000-dmac-driver.patch;patch=1 \ + file://atmel-mmc-host-driver.patch;patch=1 \ + file://atmel-spi-master-driver.patch;patch=1 \ + file://atmel-twi-driver.patch;patch=1 \ + file://atmel-lcdc-framebuffer-driver.patch;patch=1 \ + file://lcdc-wait-for-vsync.patch;patch=1 \ + file://ltv350qv-lcd-driver.patch;patch=1 \ + file://atmel-husb2-udc-driver.patch;patch=1 \ + file://avr32-sound.patch;patch=1 \ + file://atmel-ac97c-alsa-driver.patch;patch=1 \ + file://at73c213-alsa-driver.patch;patch=1 \ + file://at32-dac-oss-driver.patch;patch=1 \ + file://renumber-usart-devices.patch;patch=1 \ + file://rename-ttyUS-to-ttyS-or-ttyAT.patch;patch=1 \ + file://at32-dac-oss-driver-clk-fix.patch;patch=1 \ + file://add-all-parameters-to-smc-driver.patch;patch=1 \ + file://at32ap7000-platform_device-definitions.patch;patch=1 \ + file://atstk1000-instantiate-devices.patch;patch=1 \ + file://add-hmatrix-support.patch;patch=1 \ + file://add-ide-header.patch;patch=1 \ + file://avr32-network-gateway-support.patch;patch=1 \ + file://ngw-fix-usart-initialization.patch;patch=1 \ + file://avr32-little-endian-read-write-bwl.patch;patch=1 \ + file://gpio-dev-robustness.patch;patch=1 \ + file://add-intc_pending_irq-to-intc.patch;patch=1 \ + file://update-atstk1002_defconfig.patch;patch=1 \ + file://fix-usart3-rx-BUG.patch;patch=1 \ + file://fix-lcd-display-off-by-two-problem.patch;patch=1 \ + file://fix-alpha-color-bitfield.patch;patch=1 \ + file://jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch;patch=1 \ + file://mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch;patch=1 \ + file://fix-gpio-prototypes.patch;patch=1 \ + file://pio-deglitch.patch;patch=1 \ + file://pio-interrupt-controller.patch;patch=1 \ + file://gpio-dev-blocking-read.patch;patch=1 \ + file://add-default-atngw-defconfig.patch;patch=1 \ + file://gpio-define-pio-none.patch;patch=1 \ + file://mmc-add-platform-data.patch;patch=1 \ + file://ngw100-change-spi-clock-on-dataflash.patch;patch=1 \ + file://atstk1000-add-platform-data-for-mmc.patch;patch=1 \ + file://avr32-increment-pointer-when-parsing-for-fbmem_start.patch;patch=1 \ + file://lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch;patch=1 \ + file://avr32-fix-oprofile-interrupts.patch;patch=1 \ + file://avr32-time-add-shared-interrupts.patch;patch=1 \ + file://usart-make-rx-timeout-baudrate-independent.patch;patch=1 \ + file://spi-reduce-dlybs-and-dlybct.patch;patch=1 \ + file://dmac-stopping-idle-channel-is-not-fatal.patch;patch=1 \ + file://mmc-core-dma-fix.patch;patch=1 \ + file://atstk1000-board-fix-fbmem-setup.patch;patch=1 \ + file://lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch;patch=1 \ + file://ltv350qv-add-initial_power_state-param.patch;patch=1 \ + file://atmel-mci-debugfs.patch;patch=1 \ + file://dmac-add-explicit-blockcount-to-dma_request_sg.patch;patch=1 \ + file://atmel-mci-init-nr_blocks-in-dma-request.patch;patch=1 \ + file://mmc-add-bit-manipulating-macros.patch;patch=1 \ + file://mmc-add-detect-card-and-wp-support.patch;patch=1 \ + file://atmel_spi-handle-rx-overrun.patch;patch=1 \ + file://atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch;patch=1 \ + file://husb2_udc-test-mode.patch;patch=1 \ + file://0001-AVR32-Fix-compile-error-with-gcc-4.1.patch;patch=1 \ +" + + +S = "${WORKDIR}/linux-${PV}" + -- cgit v1.2.3 From 37162ccfcde5eadef9635a14219df25aae5456e7 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 12 Aug 2007 08:29:28 +0000 Subject: linux-2.6.18: add avr32 patches, courtes Stelios Koroneos --- packages/linux/linux-2.6.18/.mtn2git_empty | 0 ...0001-AVR32-Fix-compile-error-with-gcc-4.1.patch | 71 + .../add-all-parameters-to-smc-driver.patch | 73 + .../linux-2.6.18/add-default-atngw-defconfig.patch | 975 + .../add-flush_buffer-operation-to-uart_ops.patch | 71 + .../linux/linux-2.6.18/add-hmatrix-support.patch | 414 + packages/linux/linux-2.6.18/add-ide-header.patch | 41 + .../add-intc_pending_irq-to-intc.patch | 10 + .../linux-2.6.18/add-mach-specific-kconfig.patch | 30 + .../linux-2.6.18/at32-dac-oss-driver-clk-fix.patch | 175 + .../linux/linux-2.6.18/at32-dac-oss-driver.patch | 819 + .../linux-2.6.18/at32ap7000-dmac-driver.patch | 855 + .../at32ap7000-platform_device-definitions.patch | 445 + .../linux/linux-2.6.18/at32stk1000/.mtn2git_empty | 0 .../linux/linux-2.6.18/at73c213-alsa-driver.patch | 1485 ++ .../linux-2.6.18/atmel-ac97c-alsa-driver.patch | 1383 ++ .../linux-2.6.18/atmel-husb2-udc-driver.patch | 2488 +++ .../atmel-lcdc-framebuffer-driver.patch | 1192 ++ .../linux-2.6.18/atmel-macb-ethernet-driver.patch | 1614 ++ .../linux/linux-2.6.18/atmel-mci-debugfs.patch | 278 + .../atmel-mci-init-nr_blocks-in-dma-request.patch | 47 + .../linux/linux-2.6.18/atmel-mmc-host-driver.patch | 986 + .../linux-2.6.18/atmel-spi-master-driver.patch | 990 + packages/linux/linux-2.6.18/atmel-twi-driver.patch | 521 + .../linux/linux-2.6.18/atmel-usart3-driver.patch | 1443 ++ packages/linux/linux-2.6.18/atmel-version.patch | 17 + .../linux-2.6.18/atmel_spi-handle-rx-overrun.patch | 200 + ...el_spi-send-zeroes-when-tx_buf-is-not-set.patch | 48 + .../linux/linux-2.6.18/atngw100/.mtn2git_empty | 0 .../atstk1000-add-platform-data-for-mmc.patch | 25 + .../atstk1000-board-fix-fbmem-setup.patch | 14 + .../atstk1000-instantiate-devices.patch | 103 + .../linux-2.6.18/avr32-arch-neutral-gpio-api.patch | 598 + packages/linux/linux-2.6.18/avr32-arch.patch | 19628 +++++++++++++++++++ packages/linux/linux-2.6.18/avr32-checkstack.patch | 35 + .../avr32-dma-controller-framework.patch | 241 + .../avr32-dont-include-asm-delay-h.patch | 47 + ...-drop-GFP_COMP-for-DMA-memory-allocations.patch | 27 + .../avr32-fix-oprofile-interrupts.patch | 109 + packages/linux/linux-2.6.18/avr32-gpio-dev.patch | 548 + ...ment-pointer-when-parsing-for-fbmem_start.patch | 16 + .../avr32-little-endian-read-write-bwl.patch | 128 + ...hernet-tag-parsing-to-board-specific-code.patch | 94 + .../avr32-network-gateway-support.patch | 233 + packages/linux/linux-2.6.18/avr32-oprofile.patch | 610 + packages/linux/linux-2.6.18/avr32-sound.patch | 51 + .../avr32-time-add-shared-interrupts.patch | 30 + .../avr32-unistd-h-move-ifdef-kernel.patch | 39 + packages/linux/linux-2.6.18/avr32_defconfig | 1036 + ...add-explicit-blockcount-to-dma_request_sg.patch | 66 + .../dmac-stopping-idle-channel-is-not-fatal.patch | 93 + .../dont-include-map-h-from-physmap-h.patch | 33 + .../linux-2.6.18/fix-alpha-color-bitfield.patch | 21 + .../linux/linux-2.6.18/fix-gpio-prototypes.patch | 75 + .../fix-lcd-display-off-by-two-problem.patch | 17 + .../linux/linux-2.6.18/fix-usart3-rx-BUG.patch | 25 + .../linux/linux-2.6.18/gpio-define-pio-none.patch | 11 + .../linux-2.6.18/gpio-dev-blocking-read.patch | 187 + .../linux/linux-2.6.18/gpio-dev-robustness.patch | 204 + .../linux/linux-2.6.18/husb2_udc-test-mode.patch | 267 + ...rk_obsolete-should-return-0-for-dataflash.patch | 37 + .../linux/linux-2.6.18/kbuild-add-unifdef.patch | 1020 + ...with-a-dedicated-implmentation-in-unifdef.patch | 30 + .../kbuild-use-in-kernel-unifdef.patch | 56 + ...dc-do-not-clear-mem-if-fbmem_start-is-set.patch | 16 + ...ull-pointer-and-match-guard-time-to-uboot.patch | 38 + .../linux/linux-2.6.18/lcdc-wait-for-vsync.patch | 152 + .../ltv350qv-add-initial_power_state-param.patch | 25 + .../linux/linux-2.6.18/ltv350qv-lcd-driver.patch | 355 + .../mmc-add-bit-manipulating-macros.patch | 321 + .../mmc-add-detect-card-and-wp-support.patch | 159 + .../linux/linux-2.6.18/mmc-add-platform-data.patch | 185 + packages/linux/linux-2.6.18/mmc-core-dma-fix.patch | 33 + ...atmel-pri-for-cmdset-0001-and-cmdset-0002.patch | 99 + ...k-nor-flash-automatically-where-necessary.patch | 75 + .../ngw-fix-usart-initialization.patch | 32 + .../ngw100-change-spi-clock-on-dataflash.patch | 13 + packages/linux/linux-2.6.18/pio-deglitch.patch | 40 + .../linux-2.6.18/pio-interrupt-controller.patch | 108 + .../rename-ttyUS-to-ttyS-or-ttyAT.patch | 74 + .../linux-2.6.18/renumber-usart-devices.patch | 228 + ...spi-busnum-to-master-buffer-and-bus_num-0.patch | 50 + .../linux-2.6.18/spi-reduce-dlybs-and-dlybct.patch | 19 + ...i-set-kset-of-master-class-dev-explicitly.patch | 34 + .../linux-2.6.18/update-atstk1002_defconfig.patch | 563 + ...sart-make-rx-timeout-baudrate-independent.patch | 83 + ...-align-all-descriptors-on-a-word-boundary.patch | 171 + ...-ethernet-define-cdc-capability-for-husb2.patch | 27 + ...-align-all-descriptors-on-a-word-boundary.patch | 107 + ...-align-all-descriptors-on-a-word-boundary.patch | 140 + ...-align-all-descriptors-on-a-word-boundary.patch | 107 + 91 files changed, 45679 insertions(+) create mode 100644 packages/linux/linux-2.6.18/.mtn2git_empty create mode 100755 packages/linux/linux-2.6.18/0001-AVR32-Fix-compile-error-with-gcc-4.1.patch create mode 100644 packages/linux/linux-2.6.18/add-all-parameters-to-smc-driver.patch create mode 100644 packages/linux/linux-2.6.18/add-default-atngw-defconfig.patch create mode 100644 packages/linux/linux-2.6.18/add-flush_buffer-operation-to-uart_ops.patch create mode 100644 packages/linux/linux-2.6.18/add-hmatrix-support.patch create mode 100644 packages/linux/linux-2.6.18/add-ide-header.patch create mode 100644 packages/linux/linux-2.6.18/add-intc_pending_irq-to-intc.patch create mode 100644 packages/linux/linux-2.6.18/add-mach-specific-kconfig.patch create mode 100644 packages/linux/linux-2.6.18/at32-dac-oss-driver-clk-fix.patch create mode 100644 packages/linux/linux-2.6.18/at32-dac-oss-driver.patch create mode 100644 packages/linux/linux-2.6.18/at32ap7000-dmac-driver.patch create mode 100644 packages/linux/linux-2.6.18/at32ap7000-platform_device-definitions.patch create mode 100644 packages/linux/linux-2.6.18/at32stk1000/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.18/at73c213-alsa-driver.patch create mode 100644 packages/linux/linux-2.6.18/atmel-ac97c-alsa-driver.patch create mode 100644 packages/linux/linux-2.6.18/atmel-husb2-udc-driver.patch create mode 100644 packages/linux/linux-2.6.18/atmel-lcdc-framebuffer-driver.patch create mode 100644 packages/linux/linux-2.6.18/atmel-macb-ethernet-driver.patch create mode 100644 packages/linux/linux-2.6.18/atmel-mci-debugfs.patch create mode 100644 packages/linux/linux-2.6.18/atmel-mci-init-nr_blocks-in-dma-request.patch create mode 100644 packages/linux/linux-2.6.18/atmel-mmc-host-driver.patch create mode 100644 packages/linux/linux-2.6.18/atmel-spi-master-driver.patch create mode 100644 packages/linux/linux-2.6.18/atmel-twi-driver.patch create mode 100644 packages/linux/linux-2.6.18/atmel-usart3-driver.patch create mode 100644 packages/linux/linux-2.6.18/atmel-version.patch create mode 100644 packages/linux/linux-2.6.18/atmel_spi-handle-rx-overrun.patch create mode 100644 packages/linux/linux-2.6.18/atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch create mode 100644 packages/linux/linux-2.6.18/atngw100/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.18/atstk1000-add-platform-data-for-mmc.patch create mode 100644 packages/linux/linux-2.6.18/atstk1000-board-fix-fbmem-setup.patch create mode 100644 packages/linux/linux-2.6.18/atstk1000-instantiate-devices.patch create mode 100644 packages/linux/linux-2.6.18/avr32-arch-neutral-gpio-api.patch create mode 100644 packages/linux/linux-2.6.18/avr32-arch.patch create mode 100644 packages/linux/linux-2.6.18/avr32-checkstack.patch create mode 100644 packages/linux/linux-2.6.18/avr32-dma-controller-framework.patch create mode 100644 packages/linux/linux-2.6.18/avr32-dont-include-asm-delay-h.patch create mode 100644 packages/linux/linux-2.6.18/avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch create mode 100644 packages/linux/linux-2.6.18/avr32-fix-oprofile-interrupts.patch create mode 100644 packages/linux/linux-2.6.18/avr32-gpio-dev.patch create mode 100644 packages/linux/linux-2.6.18/avr32-increment-pointer-when-parsing-for-fbmem_start.patch create mode 100644 packages/linux/linux-2.6.18/avr32-little-endian-read-write-bwl.patch create mode 100644 packages/linux/linux-2.6.18/avr32-move-ethernet-tag-parsing-to-board-specific-code.patch create mode 100644 packages/linux/linux-2.6.18/avr32-network-gateway-support.patch create mode 100644 packages/linux/linux-2.6.18/avr32-oprofile.patch create mode 100644 packages/linux/linux-2.6.18/avr32-sound.patch create mode 100644 packages/linux/linux-2.6.18/avr32-time-add-shared-interrupts.patch create mode 100644 packages/linux/linux-2.6.18/avr32-unistd-h-move-ifdef-kernel.patch create mode 100644 packages/linux/linux-2.6.18/avr32_defconfig create mode 100644 packages/linux/linux-2.6.18/dmac-add-explicit-blockcount-to-dma_request_sg.patch create mode 100644 packages/linux/linux-2.6.18/dmac-stopping-idle-channel-is-not-fatal.patch create mode 100644 packages/linux/linux-2.6.18/dont-include-map-h-from-physmap-h.patch create mode 100644 packages/linux/linux-2.6.18/fix-alpha-color-bitfield.patch create mode 100644 packages/linux/linux-2.6.18/fix-gpio-prototypes.patch create mode 100644 packages/linux/linux-2.6.18/fix-lcd-display-off-by-two-problem.patch create mode 100644 packages/linux/linux-2.6.18/fix-usart3-rx-BUG.patch create mode 100644 packages/linux/linux-2.6.18/gpio-define-pio-none.patch create mode 100644 packages/linux/linux-2.6.18/gpio-dev-blocking-read.patch create mode 100644 packages/linux/linux-2.6.18/gpio-dev-robustness.patch create mode 100644 packages/linux/linux-2.6.18/husb2_udc-test-mode.patch create mode 100644 packages/linux/linux-2.6.18/jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch create mode 100644 packages/linux/linux-2.6.18/kbuild-add-unifdef.patch create mode 100644 packages/linux/linux-2.6.18/kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch create mode 100644 packages/linux/linux-2.6.18/kbuild-use-in-kernel-unifdef.patch create mode 100644 packages/linux/linux-2.6.18/lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch create mode 100644 packages/linux/linux-2.6.18/lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch create mode 100644 packages/linux/linux-2.6.18/lcdc-wait-for-vsync.patch create mode 100644 packages/linux/linux-2.6.18/ltv350qv-add-initial_power_state-param.patch create mode 100644 packages/linux/linux-2.6.18/ltv350qv-lcd-driver.patch create mode 100644 packages/linux/linux-2.6.18/mmc-add-bit-manipulating-macros.patch create mode 100644 packages/linux/linux-2.6.18/mmc-add-detect-card-and-wp-support.patch create mode 100644 packages/linux/linux-2.6.18/mmc-add-platform-data.patch create mode 100644 packages/linux/linux-2.6.18/mmc-core-dma-fix.patch create mode 100644 packages/linux/linux-2.6.18/mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch create mode 100644 packages/linux/linux-2.6.18/mtd-unlock-nor-flash-automatically-where-necessary.patch create mode 100644 packages/linux/linux-2.6.18/ngw-fix-usart-initialization.patch create mode 100644 packages/linux/linux-2.6.18/ngw100-change-spi-clock-on-dataflash.patch create mode 100644 packages/linux/linux-2.6.18/pio-deglitch.patch create mode 100644 packages/linux/linux-2.6.18/pio-interrupt-controller.patch create mode 100644 packages/linux/linux-2.6.18/rename-ttyUS-to-ttyS-or-ttyAT.patch create mode 100644 packages/linux/linux-2.6.18/renumber-usart-devices.patch create mode 100644 packages/linux/linux-2.6.18/spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch create mode 100644 packages/linux/linux-2.6.18/spi-reduce-dlybs-and-dlybct.patch create mode 100644 packages/linux/linux-2.6.18/spi-set-kset-of-master-class-dev-explicitly.patch create mode 100644 packages/linux/linux-2.6.18/update-atstk1002_defconfig.patch create mode 100644 packages/linux/linux-2.6.18/usart-make-rx-timeout-baudrate-independent.patch create mode 100644 packages/linux/linux-2.6.18/usb-ethernet-align-all-descriptors-on-a-word-boundary.patch create mode 100644 packages/linux/linux-2.6.18/usb-ethernet-define-cdc-capability-for-husb2.patch create mode 100644 packages/linux/linux-2.6.18/usb-file-storage-align-all-descriptors-on-a-word-boundary.patch create mode 100644 packages/linux/linux-2.6.18/usb-serial-align-all-descriptors-on-a-word-boundary.patch create mode 100644 packages/linux/linux-2.6.18/usb-zero-align-all-descriptors-on-a-word-boundary.patch diff --git a/packages/linux/linux-2.6.18/.mtn2git_empty b/packages/linux/linux-2.6.18/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.18/0001-AVR32-Fix-compile-error-with-gcc-4.1.patch b/packages/linux/linux-2.6.18/0001-AVR32-Fix-compile-error-with-gcc-4.1.patch new file mode 100755 index 0000000000..2b430450d9 --- /dev/null +++ b/packages/linux/linux-2.6.18/0001-AVR32-Fix-compile-error-with-gcc-4.1.patch @@ -0,0 +1,71 @@ +From 8224ca195874525533665bbcd23b6da1e575aa4d Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Fri, 27 Apr 2007 14:21:47 +0200 +Subject: [AVR32] Fix compile error with gcc 4.1 + +gcc 4.1 doesn't seem to like const variables as inline assembly +outputs. Drop support for reading 64-bit values using get_user() so +that we can use an unsigned long to hold the result regardless of the +actual size. This should be safe since many architectures, including +i386, doesn't support reading 64-bit values with get_user(). + +Signed-off-by: Haavard Skinnemoen +--- + include/asm-avr32/uaccess.h | 13 ++++--------- + 1 files changed, 4 insertions(+), 9 deletions(-) + +diff --git a/include/asm-avr32/uaccess.h b/include/asm-avr32/uaccess.h +index 74a679e..ed09239 100644 +--- a/include/asm-avr32/uaccess.h ++++ b/include/asm-avr32/uaccess.h +@@ -181,24 +181,23 @@ extern int __put_user_bad(void); + + #define __get_user_nocheck(x, ptr, size) \ + ({ \ +- typeof(*(ptr)) __gu_val = (typeof(*(ptr)) __force)0; \ ++ unsigned long __gu_val = 0; \ + int __gu_err = 0; \ + \ + switch (size) { \ + case 1: __get_user_asm("ub", __gu_val, ptr, __gu_err); break; \ + case 2: __get_user_asm("uh", __gu_val, ptr, __gu_err); break; \ + case 4: __get_user_asm("w", __gu_val, ptr, __gu_err); break; \ +- case 8: __get_user_asm("d", __gu_val, ptr, __gu_err); break; \ + default: __gu_err = __get_user_bad(); break; \ + } \ + \ +- x = __gu_val; \ ++ x = (typeof(*(ptr)))__gu_val; \ + __gu_err; \ + }) + + #define __get_user_check(x, ptr, size) \ + ({ \ +- typeof(*(ptr)) __gu_val = (typeof(*(ptr)) __force)0; \ ++ unsigned long __gu_val = 0; \ + const typeof(*(ptr)) __user * __gu_addr = (ptr); \ + int __gu_err = 0; \ + \ +@@ -216,10 +215,6 @@ extern int __put_user_bad(void); + __get_user_asm("w", __gu_val, __gu_addr, \ + __gu_err); \ + break; \ +- case 8: \ +- __get_user_asm("d", __gu_val, __gu_addr, \ +- __gu_err); \ +- break; \ + default: \ + __gu_err = __get_user_bad(); \ + break; \ +@@ -227,7 +222,7 @@ extern int __put_user_bad(void); + } else { \ + __gu_err = -EFAULT; \ + } \ +- x = __gu_val; \ ++ x = (typeof(*(ptr)))__gu_val; \ + __gu_err; \ + }) + +-- +1.4.4.4 + diff --git a/packages/linux/linux-2.6.18/add-all-parameters-to-smc-driver.patch b/packages/linux/linux-2.6.18/add-all-parameters-to-smc-driver.patch new file mode 100644 index 0000000000..ec4de30cc8 --- /dev/null +++ b/packages/linux/linux-2.6.18/add-all-parameters-to-smc-driver.patch @@ -0,0 +1,73 @@ +--- linux-2.6.18-orig/arch/avr32/mach-at32ap/hsmc.c 2006-09-26 15:01:28.000000000 +0200 ++++ linux-2.6.18/arch/avr32/mach-at32ap/hsmc.c 2006-10-18 14:03:35.000000000 +0200 +@@ -75,12 +75,35 @@ int smc_set_configuration(int cs, const + return -EINVAL; + } + ++ switch (config->nwait_mode) { ++ case 0: ++ mode |= HSMC_BF(EXNW_MODE, HSMC_EXNW_MODE_DISABLED); ++ break; ++ case 1: ++ mode |= HSMC_BF(EXNW_MODE, HSMC_EXNW_MODE_RESERVED); ++ break; ++ case 2: ++ mode |= HSMC_BF(EXNW_MODE, HSMC_EXNW_MODE_FROZEN); ++ break; ++ case 3: ++ mode |= HSMC_BF(EXNW_MODE, HSMC_EXNW_MODE_READY); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ if (config->tdf_cycles) { ++ mode |= HSMC_BF(TDF_CYCLES, config->tdf_cycles); ++ } ++ + if (config->nrd_controlled) + mode |= HSMC_BIT(READ_MODE); + if (config->nwe_controlled) + mode |= HSMC_BIT(WRITE_MODE); + if (config->byte_write) + mode |= HSMC_BIT(BAT); ++ if (config->tdf_mode) ++ mode |= HSMC_BIT(TDF_MODE); + + pr_debug("smc cs%d: setup/%08x pulse/%08x cycle/%08x mode/%08x\n", + cs, setup, pulse, cycle, mode); +--- linux-2.6.18-orig/include/asm-avr32/arch-at32ap/smc.h 2006-09-26 15:01:30.000000000 +0200 ++++ linux-2.6.18/include/asm-avr32/arch-at32ap/smc.h 2006-10-18 13:36:06.000000000 +0200 +@@ -48,10 +48,32 @@ struct smc_config { + unsigned int nwe_controlled:1; + + /* ++ * 0: NWAIT is disabled ++ * 1: Reserved ++ * 2: NWAIT is frozen mode ++ * 3: NWAIT in ready mode ++ */ ++ unsigned int nwait_mode:2; ++ ++ /* + * 0: Byte select access type + * 1: Byte write access type + */ + unsigned int byte_write:1; ++ ++ /* ++ * Number of clock cycles before data is released after ++ * the rising edge of the read controlling signal ++ * ++ * Total cycles from SMC is tdf_cycles + 1 ++ */ ++ unsigned int tdf_cycles:4; ++ ++ /* ++ * 0: TDF optimization disabled ++ * 1: TDF optimization enabled ++ */ ++ unsigned int tdf_mode:1; + }; + + extern int smc_set_configuration(int cs, const struct smc_config *config); diff --git a/packages/linux/linux-2.6.18/add-default-atngw-defconfig.patch b/packages/linux/linux-2.6.18/add-default-atngw-defconfig.patch new file mode 100644 index 0000000000..233416e0ca --- /dev/null +++ b/packages/linux/linux-2.6.18/add-default-atngw-defconfig.patch @@ -0,0 +1,975 @@ +Index: linux-2.6.18/arch/avr32/configs/atngw_defconfig +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18/arch/avr32/configs/atngw_defconfig 2007-01-10 10:15:54.000000000 +0100 +@@ -0,0 +1,970 @@ ++# ++# Automatically generated make config: don't edit ++# Linux kernel version: 2.6.18-at0 ++# Wed Jan 10 10:13:31 2007 ++# ++CONFIG_AVR32=y ++CONFIG_GENERIC_HARDIRQS=y ++CONFIG_HARDIRQS_SW_RESEND=y ++CONFIG_GENERIC_IRQ_PROBE=y ++CONFIG_RWSEM_GENERIC_SPINLOCK=y ++CONFIG_GENERIC_TIME=y ++CONFIG_GENERIC_HWEIGHT=y ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" ++ ++# ++# Code maturity level options ++# ++CONFIG_EXPERIMENTAL=y ++CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 ++ ++# ++# General setup ++# ++CONFIG_LOCALVERSION="" ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_SWAP=y ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++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_RELAY is not set ++CONFIG_INITRAMFS_SOURCE="" ++CONFIG_CC_OPTIMIZE_FOR_SIZE=y ++CONFIG_EMBEDDED=y ++CONFIG_SYSCTL=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 is not set ++CONFIG_FUTEX=y ++CONFIG_EPOLL=y ++CONFIG_SHMEM=y ++CONFIG_SLAB=y ++CONFIG_VM_EVENT_COUNTERS=y ++CONFIG_RT_MUTEXES=y ++# CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=1 ++# CONFIG_SLOB is not set ++ ++# ++# Loadable module support ++# ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++CONFIG_MODULE_FORCE_UNLOAD=y ++# CONFIG_MODVERSIONS is not set ++# CONFIG_MODULE_SRCVERSION_ALL is not set ++CONFIG_KMOD=y ++ ++# ++# Block layer ++# ++# CONFIG_BLK_DEV_IO_TRACE 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" ++ ++# ++# System Type and features ++# ++CONFIG_SUBARCH_AVR32B=y ++CONFIG_MMU=y ++CONFIG_PERFORMANCE_COUNTERS=y ++CONFIG_PLATFORM_AT32AP=y ++CONFIG_CPU_AT32AP7000=y ++# CONFIG_BOARD_ATSTK1000 is not set ++CONFIG_BOARD_ATNGW=y ++CONFIG_LOADER_U_BOOT=y ++ ++# ++# Atmel AVR32 AP options ++# ++CONFIG_PIO_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_SPLIT_PTLOCK_CPUS=4 ++# CONFIG_RESOURCES_64BIT is not set ++# CONFIG_OWNERSHIP_TRACE is not set ++CONFIG_DW_DMAC=y ++# CONFIG_HZ_100 is not set ++CONFIG_HZ_250=y ++# CONFIG_HZ_1000 is not set ++CONFIG_HZ=250 ++CONFIG_CMDLINE="" ++ ++# ++# Bus options ++# ++ ++# ++# PCCARD (PCMCIA/CardBus) support ++# ++# CONFIG_PCCARD is not set ++ ++# ++# Executable file formats ++# ++CONFIG_BINFMT_ELF=y ++# CONFIG_BINFMT_MISC is not set ++ ++# ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++# CONFIG_NETDEBUG is not set ++CONFIG_PACKET=y ++CONFIG_PACKET_MMAP=y ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++# CONFIG_IP_MULTICAST is not set ++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 is not set ++# CONFIG_IP_ROUTE_MULTIPATH is not set ++# CONFIG_IP_ROUTE_VERBOSE is not set ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++# CONFIG_IP_PNP_BOOTP is not set ++# CONFIG_IP_PNP_RARP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_XFRM_TUNNEL is not set ++# CONFIG_INET_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++ ++# ++# IP: Virtual Server Configuration ++# ++# CONFIG_IP_VS is not set ++# CONFIG_IPV6 is not set ++# CONFIG_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_NETFILTER_XTABLES=y ++# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set ++# CONFIG_NETFILTER_XT_TARGET_MARK is not set ++# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set ++# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set ++# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set ++# CONFIG_NETFILTER_XT_MATCH_DCCP is not set ++# CONFIG_NETFILTER_XT_MATCH_ESP is not set ++# CONFIG_NETFILTER_XT_MATCH_HELPER 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_STATE=y ++# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set ++# CONFIG_NETFILTER_XT_MATCH_STRING is not set ++# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set ++ ++# ++# IP: Netfilter Configuration ++# ++CONFIG_IP_NF_CONNTRACK=y ++# CONFIG_IP_NF_CT_ACCT is not set ++# CONFIG_IP_NF_CONNTRACK_MARK is not set ++# CONFIG_IP_NF_CONNTRACK_EVENTS is not set ++# CONFIG_IP_NF_CT_PROTO_SCTP is not set ++# CONFIG_IP_NF_FTP is not set ++# CONFIG_IP_NF_IRC is not set ++# CONFIG_IP_NF_NETBIOS_NS is not set ++# CONFIG_IP_NF_TFTP is not set ++# CONFIG_IP_NF_AMANDA is not set ++# CONFIG_IP_NF_PPTP is not set ++# CONFIG_IP_NF_H323 is not set ++# CONFIG_IP_NF_SIP is not set ++# CONFIG_IP_NF_QUEUE is not set ++CONFIG_IP_NF_IPTABLES=y ++# CONFIG_IP_NF_MATCH_IPRANGE is not set ++# CONFIG_IP_NF_MATCH_TOS is not set ++# CONFIG_IP_NF_MATCH_RECENT is not set ++# CONFIG_IP_NF_MATCH_ECN is not set ++# CONFIG_IP_NF_MATCH_DSCP is not set ++# CONFIG_IP_NF_MATCH_AH is not set ++# CONFIG_IP_NF_MATCH_TTL is not set ++# CONFIG_IP_NF_MATCH_OWNER is not set ++# CONFIG_IP_NF_MATCH_ADDRTYPE is not set ++# CONFIG_IP_NF_MATCH_HASHLIMIT is not set ++CONFIG_IP_NF_FILTER=y ++CONFIG_IP_NF_TARGET_REJECT=y ++CONFIG_IP_NF_TARGET_LOG=y ++# CONFIG_IP_NF_TARGET_ULOG is not set ++# CONFIG_IP_NF_TARGET_TCPMSS is not set ++CONFIG_IP_NF_NAT=y ++CONFIG_IP_NF_NAT_NEEDED=y ++CONFIG_IP_NF_TARGET_MASQUERADE=y ++CONFIG_IP_NF_TARGET_REDIRECT=y ++# CONFIG_IP_NF_TARGET_NETMAP is not set ++# CONFIG_IP_NF_TARGET_SAME is not set ++# CONFIG_IP_NF_NAT_SNMP_BASIC is not set ++# CONFIG_IP_NF_MANGLE is not set ++# CONFIG_IP_NF_RAW is not set ++# CONFIG_IP_NF_ARPTABLES is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++ ++# ++# TIPC Configuration (EXPERIMENTAL) ++# ++# CONFIG_TIPC is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_STANDALONE=y ++# CONFIG_PREVENT_FIRMWARE_BUILD is not set ++# CONFIG_FW_LOADER is not set ++# CONFIG_DEBUG_DRIVER is not set ++# CONFIG_SYS_HYPERVISOR is not set ++ ++# ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# ++# Memory Technology Devices (MTD) ++# ++CONFIG_MTD=y ++# CONFIG_MTD_DEBUG is not set ++# CONFIG_MTD_CONCAT is not set ++CONFIG_MTD_PARTITIONS=y ++# CONFIG_MTD_REDBOOT_PARTS is not set ++# CONFIG_MTD_CMDLINE_PARTS is not set ++ ++# ++# User Modules And Translation Layers ++# ++CONFIG_MTD_CHAR=y ++CONFIG_MTD_BLOCK=y ++# CONFIG_FTL is not set ++# CONFIG_NFTL is not set ++# CONFIG_INFTL is not set ++# CONFIG_RFD_FTL is not set ++ ++# ++# RAM/ROM/Flash chip drivers ++# ++CONFIG_MTD_CFI=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 ++# CONFIG_MTD_OBSOLETE_CHIPS is not set ++ ++# ++# Mapping drivers for chip access ++# ++# CONFIG_MTD_COMPLEX_MAPPINGS is not set ++CONFIG_MTD_PHYSMAP=y ++CONFIG_MTD_PHYSMAP_START=0x80000000 ++CONFIG_MTD_PHYSMAP_LEN=0x0 ++CONFIG_MTD_PHYSMAP_BANKWIDTH=2 ++# CONFIG_MTD_PLATRAM is not set ++ ++# ++# Self-contained MTD device drivers ++# ++CONFIG_MTD_DATAFLASH=y ++# CONFIG_MTD_M25P80 is not set ++# CONFIG_MTD_SLRAM is not set ++# CONFIG_MTD_PHRAM is not set ++# CONFIG_MTD_MTDRAM is not set ++# CONFIG_MTD_BLOCK2MTD is not set ++ ++# ++# Disk-On-Chip Device Drivers ++# ++# CONFIG_MTD_DOC2000 is not set ++# CONFIG_MTD_DOC2001 is not set ++# CONFIG_MTD_DOC2001PLUS is not set ++ ++# ++# NAND Flash Device Drivers ++# ++# CONFIG_MTD_NAND is not set ++ ++# ++# OneNAND Flash Device Drivers ++# ++# CONFIG_MTD_ONENAND is not set ++ ++# ++# Parallel port support ++# ++# CONFIG_PARPORT is not set ++ ++# ++# Plug and Play support ++# ++ ++# ++# Block devices ++# ++# CONFIG_BLK_DEV_COW_COMMON is not set ++CONFIG_BLK_DEV_LOOP=y ++# CONFIG_BLK_DEV_CRYPTOLOOP is not set ++CONFIG_BLK_DEV_NBD=m ++CONFIG_BLK_DEV_RAM=m ++CONFIG_BLK_DEV_RAM_COUNT=16 ++CONFIG_BLK_DEV_RAM_SIZE=4096 ++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 ++CONFIG_BLK_DEV_INITRD=y ++# CONFIG_CDROM_PKTCDVD is not set ++# CONFIG_ATA_OVER_ETH is not set ++ ++# ++# ATA/ATAPI/MFM/RLL support ++# ++# CONFIG_IDE is not set ++ ++# ++# SCSI device support ++# ++# CONFIG_RAID_ATTRS is not set ++# CONFIG_SCSI is not set ++ ++# ++# Multi-device support (RAID and LVM) ++# ++# CONFIG_MD is not set ++ ++# ++# Fusion MPT device support ++# ++# CONFIG_FUSION is not set ++ ++# ++# IEEE 1394 (FireWire) support ++# ++ ++# ++# I2O device support ++# ++ ++# ++# Network device support ++# ++CONFIG_NETDEVICES=y ++# CONFIG_DUMMY is not set ++# CONFIG_BONDING is not set ++# CONFIG_EQUALIZER is not set ++# CONFIG_TUN is not set ++ ++# ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# ++# Ethernet (10 or 100Mbit) ++# ++CONFIG_NET_ETHERNET=y ++CONFIG_MII=y ++CONFIG_MACB=y ++ ++# ++# Ethernet (1000 Mbit) ++# ++ ++# ++# Ethernet (10000 Mbit) ++# ++ ++# ++# Token Ring devices ++# ++ ++# ++# Wireless LAN (non-hamradio) ++# ++# CONFIG_NET_RADIO is not set ++ ++# ++# Wan interfaces ++# ++# 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 ++ ++# ++# ISDN subsystem ++# ++# CONFIG_ISDN is not set ++ ++# ++# Telephony Support ++# ++# CONFIG_PHONE is not set ++ ++# ++# Input device support ++# ++# CONFIG_INPUT is not set ++ ++# ++# Hardware I/O ports ++# ++# CONFIG_SERIO is not set ++# CONFIG_GAMEPORT is not set ++ ++# ++# Character devices ++# ++# CONFIG_VT is not set ++# CONFIG_SERIAL_NONSTANDARD is not set ++ ++# ++# Serial drivers ++# ++# CONFIG_SERIAL_8250 is not set ++ ++# ++# Non-8250 serial port support ++# ++CONFIG_SERIAL_ATMEL=y ++CONFIG_SERIAL_ATMEL_CONSOLE=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 ++ ++# ++# IPMI ++# ++# CONFIG_IPMI_HANDLER is not set ++ ++# ++# Watchdog Cards ++# ++# CONFIG_WATCHDOG is not set ++# CONFIG_HW_RANDOM is not set ++# CONFIG_RTC is not set ++# CONFIG_GEN_RTC is not set ++# CONFIG_DTLK is not set ++# CONFIG_R3964 is not set ++ ++# ++# Ftape, the floppy tape device driver ++# ++# CONFIG_RAW_DRIVER is not set ++ ++# ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# ++# I2C support ++# ++CONFIG_I2C=m ++CONFIG_I2C_CHARDEV=m ++ ++# ++# I2C Algorithms ++# ++# CONFIG_I2C_ALGOBIT is not set ++# CONFIG_I2C_ALGOPCF is not set ++# CONFIG_I2C_ALGOPCA is not set ++ ++# ++# I2C Hardware Bus support ++# ++CONFIG_I2C_ATMELTWI=m ++CONFIG_I2C_ATMELTWI_BAUDRATE=100000 ++# CONFIG_I2C_OCORES is not set ++# CONFIG_I2C_PARPORT_LIGHT is not set ++# CONFIG_I2C_STUB is not set ++# CONFIG_I2C_PCA_ISA is not set ++ ++# ++# Miscellaneous I2C Chip support ++# ++# CONFIG_SENSORS_DS1337 is not set ++# CONFIG_SENSORS_DS1374 is not set ++# CONFIG_SENSORS_EEPROM is not set ++# CONFIG_SENSORS_PCF8574 is not set ++# CONFIG_SENSORS_PCA9539 is not set ++# CONFIG_SENSORS_PCF8591 is not set ++# CONFIG_SENSORS_MAX6875 is not set ++# CONFIG_I2C_DEBUG_CORE is not set ++# CONFIG_I2C_DEBUG_ALGO is not set ++# CONFIG_I2C_DEBUG_BUS is not set ++# CONFIG_I2C_DEBUG_CHIP is not set ++ ++# ++# SPI support ++# ++CONFIG_SPI=y ++# CONFIG_SPI_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 ++# ++ ++# ++# Dallas's 1-wire bus ++# ++ ++# ++# Hardware Monitoring support ++# ++# CONFIG_HWMON is not set ++# CONFIG_HWMON_VID is not set ++ ++# ++# Misc devices ++# ++ ++# ++# Multimedia devices ++# ++# CONFIG_VIDEO_DEV is not set ++CONFIG_VIDEO_V4L2=y ++ ++# ++# Digital Video Broadcasting Devices ++# ++# CONFIG_DVB is not set ++ ++# ++# Graphics support ++# ++# CONFIG_FIRMWARE_EDID is not set ++# CONFIG_FB is not set ++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set ++ ++# ++# Sound ++# ++# CONFIG_SOUND is not set ++ ++# ++# USB support ++# ++# CONFIG_USB_ARCH_HAS_HCD is not set ++# CONFIG_USB_ARCH_HAS_OHCI is not set ++# CONFIG_USB_ARCH_HAS_EHCI is not set ++ ++# ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' ++# ++ ++# ++# USB Gadget Support ++# ++CONFIG_USB_GADGET=m ++# CONFIG_USB_GADGET_DEBUG_FILES is not set ++CONFIG_USB_GADGET_SELECTED=y ++# CONFIG_USB_GADGET_NET2280 is not set ++# CONFIG_USB_GADGET_PXA2XX is not set ++# CONFIG_USB_GADGET_GOKU is not set ++# CONFIG_USB_GADGET_LH7A40X is not set ++CONFIG_USB_GADGET_HUSB2DEV=y ++CONFIG_USB_HUSB2DEV=m ++# CONFIG_USB_GADGET_OMAP is not set ++# CONFIG_USB_GADGET_AT91 is not set ++# CONFIG_USB_GADGET_DUMMY_HCD is not set ++CONFIG_USB_GADGET_DUALSPEED=y ++# CONFIG_USB_ZERO is not set ++# CONFIG_USB_ETH 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 is not set ++ ++# ++# MMC/SD Card support ++# ++CONFIG_MMC=m ++# CONFIG_MMC_DEBUG is not set ++CONFIG_MMC_BLOCK=m ++CONFIG_MMC_ATMELMCI=m ++ ++# ++# LED devices ++# ++# CONFIG_NEW_LEDS is not set ++ ++# ++# LED drivers ++# ++ ++# ++# LED Triggers ++# ++ ++# ++# InfiniBand support ++# ++ ++# ++# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) ++# ++ ++# ++# Real Time Clock ++# ++# CONFIG_RTC_CLASS is not set ++ ++# ++# DMA Engine support ++# ++# CONFIG_DMA_ENGINE is not set ++ ++# ++# DMA Clients ++# ++ ++# ++# DMA Devices ++# ++ ++# ++# File systems ++# ++CONFIG_EXT2_FS=y ++# CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set ++CONFIG_EXT3_FS=y ++# CONFIG_EXT3_FS_XATTR is not set ++CONFIG_JBD=y ++# CONFIG_JBD_DEBUG is not set ++# CONFIG_REISERFS_FS is not set ++# CONFIG_JFS_FS is not set ++# CONFIG_FS_POSIX_ACL is not set ++# CONFIG_XFS_FS is not set ++# CONFIG_OCFS2_FS is not set ++# CONFIG_MINIX_FS is not set ++# CONFIG_ROMFS_FS is not set ++# CONFIG_INOTIFY is not set ++# CONFIG_QUOTA is not set ++# CONFIG_DNOTIFY is not set ++# CONFIG_AUTOFS_FS is not set ++# CONFIG_AUTOFS4_FS is not set ++CONFIG_FUSE_FS=m ++ ++# ++# CD-ROM/DVD Filesystems ++# ++# CONFIG_ISO9660_FS is not set ++# CONFIG_UDF_FS is not set ++ ++# ++# DOS/FAT/NT Filesystems ++# ++CONFIG_FAT_FS=m ++CONFIG_MSDOS_FS=m ++CONFIG_VFAT_FS=m ++CONFIG_FAT_DEFAULT_CODEPAGE=850 ++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" ++# CONFIG_NTFS_FS is not set ++ ++# ++# Pseudo filesystems ++# ++CONFIG_PROC_FS=y ++# CONFIG_PROC_KCORE is not set ++CONFIG_SYSFS=y ++CONFIG_TMPFS=y ++# CONFIG_HUGETLB_PAGE is not set ++CONFIG_RAMFS=y ++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_JFFS_FS is not set ++CONFIG_JFFS2_FS=y ++CONFIG_JFFS2_FS_DEBUG=0 ++CONFIG_JFFS2_FS_WRITEBUFFER=y ++# CONFIG_JFFS2_SUMMARY is not set ++# CONFIG_JFFS2_FS_XATTR is not set ++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set ++CONFIG_JFFS2_ZLIB=y ++CONFIG_JFFS2_RTIME=y ++# CONFIG_JFFS2_RUBIN is not set ++# CONFIG_CRAMFS is not set ++# CONFIG_VXFS_FS is not set ++# CONFIG_HPFS_FS is not set ++# CONFIG_QNX4FS_FS is not set ++# CONFIG_SYSV_FS is not set ++# CONFIG_UFS_FS is not set ++ ++# ++# Network File Systems ++# ++CONFIG_NFS_FS=y ++# CONFIG_NFS_V3 is not set ++# CONFIG_NFS_V4 is not set ++# CONFIG_NFS_DIRECTIO is not set ++# CONFIG_NFSD is not set ++CONFIG_ROOT_NFS=y ++CONFIG_LOCKD=y ++CONFIG_NFS_COMMON=y ++CONFIG_SUNRPC=y ++# CONFIG_RPCSEC_GSS_KRB5 is not set ++# CONFIG_RPCSEC_GSS_SPKM3 is not set ++CONFIG_SMB_FS=m ++# CONFIG_SMB_NLS_DEFAULT is not set ++CONFIG_CIFS=m ++# CONFIG_CIFS_STATS 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 ++# CONFIG_9P_FS is not set ++ ++# ++# Partition Types ++# ++# CONFIG_PARTITION_ADVANCED is not set ++CONFIG_MSDOS_PARTITION=y ++ ++# ++# Native Language Support ++# ++CONFIG_NLS=y ++CONFIG_NLS_DEFAULT="iso8859-1" ++# CONFIG_NLS_CODEPAGE_437 is not set ++# CONFIG_NLS_CODEPAGE_737 is not set ++# CONFIG_NLS_CODEPAGE_775 is not set ++CONFIG_NLS_CODEPAGE_850=y ++# CONFIG_NLS_CODEPAGE_852 is not set ++# CONFIG_NLS_CODEPAGE_855 is not set ++# CONFIG_NLS_CODEPAGE_857 is not set ++# CONFIG_NLS_CODEPAGE_860 is not set ++# CONFIG_NLS_CODEPAGE_861 is not set ++# CONFIG_NLS_CODEPAGE_862 is not set ++# CONFIG_NLS_CODEPAGE_863 is not set ++# CONFIG_NLS_CODEPAGE_864 is not set ++# CONFIG_NLS_CODEPAGE_865 is not set ++# CONFIG_NLS_CODEPAGE_866 is not set ++# CONFIG_NLS_CODEPAGE_869 is not set ++# CONFIG_NLS_CODEPAGE_936 is not set ++# CONFIG_NLS_CODEPAGE_950 is not set ++# CONFIG_NLS_CODEPAGE_932 is not set ++# CONFIG_NLS_CODEPAGE_949 is not set ++# CONFIG_NLS_CODEPAGE_874 is not set ++# CONFIG_NLS_ISO8859_8 is not set ++# CONFIG_NLS_CODEPAGE_1250 is not set ++# CONFIG_NLS_CODEPAGE_1251 is not set ++# CONFIG_NLS_ASCII is not set ++CONFIG_NLS_ISO8859_1=y ++# CONFIG_NLS_ISO8859_2 is not set ++# CONFIG_NLS_ISO8859_3 is not set ++# CONFIG_NLS_ISO8859_4 is not set ++# CONFIG_NLS_ISO8859_5 is not set ++# CONFIG_NLS_ISO8859_6 is not set ++# CONFIG_NLS_ISO8859_7 is not set ++# CONFIG_NLS_ISO8859_9 is not set ++# CONFIG_NLS_ISO8859_13 is not set ++# CONFIG_NLS_ISO8859_14 is not set ++# CONFIG_NLS_ISO8859_15 is not set ++# CONFIG_NLS_KOI8_R is not set ++# CONFIG_NLS_KOI8_U is not set ++CONFIG_NLS_UTF8=y ++ ++# ++# Profiling support ++# ++# CONFIG_PROFILING is not set ++ ++# ++# Kernel hacking ++# ++CONFIG_TRACE_IRQFLAGS_SUPPORT=y ++# CONFIG_PRINTK_TIME is not set ++CONFIG_MAGIC_SYSRQ=y ++# CONFIG_UNUSED_SYMBOLS is not set ++CONFIG_DEBUG_KERNEL=y ++CONFIG_LOG_BUF_SHIFT=14 ++CONFIG_DETECT_SOFTLOCKUP=y ++# CONFIG_SCHEDSTATS is not set ++# CONFIG_DEBUG_SLAB is not set ++# CONFIG_DEBUG_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_RWSEMS is not set ++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set ++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set ++# CONFIG_DEBUG_KOBJECT is not set ++CONFIG_DEBUG_BUGVERBOSE=y ++# CONFIG_DEBUG_INFO is not set ++# CONFIG_DEBUG_FS is not set ++# CONFIG_DEBUG_VM is not set ++CONFIG_FRAME_POINTER=y ++# CONFIG_UNWIND_INFO is not set ++# CONFIG_FORCED_INLINING is not set ++# CONFIG_RCU_TORTURE_TEST is not set ++# CONFIG_KPROBES is not set ++ ++# ++# Security options ++# ++# CONFIG_KEYS is not set ++# CONFIG_SECURITY is not set ++ ++# ++# Cryptographic options ++# ++# CONFIG_CRYPTO is not set ++ ++# ++# Hardware crypto devices ++# ++ ++# ++# Library routines ++# ++# CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set ++CONFIG_CRC32=y ++# CONFIG_LIBCRC32C is not set ++CONFIG_ZLIB_INFLATE=y ++CONFIG_ZLIB_DEFLATE=y ++CONFIG_PLIST=y diff --git a/packages/linux/linux-2.6.18/add-flush_buffer-operation-to-uart_ops.patch b/packages/linux/linux-2.6.18/add-flush_buffer-operation-to-uart_ops.patch new file mode 100644 index 0000000000..0c9b919900 --- /dev/null +++ b/packages/linux/linux-2.6.18/add-flush_buffer-operation-to-uart_ops.patch @@ -0,0 +1,71 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Thu Feb 2 15:48:50 2006 +0100 +Subject: [PATCH] Add flush_buffer() operation to uart_ops + +Serial drivers using DMA (like the Atmel USART3 driver) tend to get +very confused when the xmit buffer is flushed and nobody told them. +They also tend to spew a lot of garbage since the DMA engine keeps +running after the buffer is flushed and possibly refilled with +unrelated data. + +This patch adds a new flush_buffer operation to the uart_ops struct, +along with a call to it from uart_flush_buffer() right after the xmit +buffer has been cleared. The driver can implement this in order to +syncronize its internal DMA state with the xmit buffer when the buffer +is flushed. + +--- + + Documentation/serial/driver | 11 +++++++++++ + drivers/serial/serial_core.c | 2 ++ + include/linux/serial_core.h | 1 + + 3 files changed, 14 insertions(+) + +Index: linux-2.6.16-avr32/Documentation/serial/driver +=================================================================== +--- linux-2.6.16-avr32.orig/Documentation/serial/driver 2006-03-20 06:53:29.000000000 +0100 ++++ linux-2.6.16-avr32/Documentation/serial/driver 2006-04-03 18:57:11.000000000 +0200 +@@ -186,6 +186,17 @@ hardware. + Locking: port_sem taken. + Interrupts: caller dependent. + ++ flush_buffer(port) ++ Flush any write buffers, reset any DMA state and stop any ++ ongoing DMA transfers. ++ ++ This will be called whenever the port->info->xmit circular ++ buffer is cleared. ++ ++ Locking: port->lock taken. ++ Interrupts: locally disabled. ++ This call must not sleep ++ + set_termios(port,termios,oldtermios) + Change the port parameters, including word length, parity, stop + bits. Update read_status_mask and ignore_status_mask to indicate +Index: linux-2.6.16-avr32/drivers/serial/serial_core.c +=================================================================== +--- linux-2.6.16-avr32.orig/drivers/serial/serial_core.c 2006-03-20 06:53:29.000000000 +0100 ++++ linux-2.6.16-avr32/drivers/serial/serial_core.c 2006-04-03 18:57:11.000000000 +0200 +@@ -556,6 +556,8 @@ static void uart_flush_buffer(struct tty + + spin_lock_irqsave(&port->lock, flags); + uart_circ_clear(&state->info->xmit); ++ if (port->ops->flush_buffer) ++ port->ops->flush_buffer(port); + spin_unlock_irqrestore(&port->lock, flags); + tty_wakeup(tty); + } +Index: linux-2.6.16-avr32/include/linux/serial_core.h +=================================================================== +--- linux-2.6.16-avr32.orig/include/linux/serial_core.h 2006-03-20 06:53:29.000000000 +0100 ++++ linux-2.6.16-avr32/include/linux/serial_core.h 2006-04-03 18:57:11.000000000 +0200 +@@ -164,6 +164,7 @@ struct uart_ops { + void (*break_ctl)(struct uart_port *, int ctl); + int (*startup)(struct uart_port *); + void (*shutdown)(struct uart_port *); ++ void (*flush_buffer)(struct uart_port *); + void (*set_termios)(struct uart_port *, struct termios *new, + struct termios *old); + void (*pm)(struct uart_port *, unsigned int state, diff --git a/packages/linux/linux-2.6.18/add-hmatrix-support.patch b/packages/linux/linux-2.6.18/add-hmatrix-support.patch new file mode 100644 index 0000000000..4387cac0b8 --- /dev/null +++ b/packages/linux/linux-2.6.18/add-hmatrix-support.patch @@ -0,0 +1,414 @@ +--- + arch/avr32/mach-at32ap/hmatrix2.h | 377 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 377 insertions(+) + +Index: linux-2.6.18/arch/avr32/mach-at32ap/hmatrix2.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18/arch/avr32/mach-at32ap/hmatrix2.h 2006-11-03 14:57:10.000000000 +0100 +@@ -0,0 +1,377 @@ ++/* ++ * Register definitions for HMATRIX2 ++ * ++ * AHB Matrix ++ */ ++#ifndef __ASM_AVR32_HMATRIX2_H__ ++#define __ASM_AVR32_HMATRIX2_H__ ++ ++/* HMATRIX2 base address */ ++#define HMATRIX2_BASE (void *)0xfff00800 ++ ++/* HMATRIX2 register offsets */ ++#define HMATRIX2_MCFG0 0x0000 ++#define HMATRIX2_MCFG1 0x0004 ++#define HMATRIX2_MCFG2 0x0008 ++#define HMATRIX2_MCFG3 0x000c ++#define HMATRIX2_MCFG4 0x0010 ++#define HMATRIX2_MCFG5 0x0014 ++#define HMATRIX2_MCFG6 0x0018 ++#define HMATRIX2_MCFG7 0x001c ++#define HMATRIX2_MCFG8 0x0020 ++#define HMATRIX2_MCFG9 0x0024 ++#define HMATRIX2_MCFG10 0x0028 ++#define HMATRIX2_MCFG11 0x002c ++#define HMATRIX2_MCFG12 0x0030 ++#define HMATRIX2_MCFG13 0x0034 ++#define HMATRIX2_MCFG14 0x0038 ++#define HMATRIX2_MCFG15 0x003c ++#define HMATRIX2_SCFG0 0x0040 ++#define HMATRIX2_SCFG1 0x0044 ++#define HMATRIX2_SCFG2 0x0048 ++#define HMATRIX2_SCFG3 0x004c ++#define HMATRIX2_SCFG4 0x0050 ++#define HMATRIX2_SCFG5 0x0054 ++#define HMATRIX2_SCFG6 0x0058 ++#define HMATRIX2_SCFG7 0x005c ++#define HMATRIX2_SCFG8 0x0060 ++#define HMATRIX2_SCFG9 0x0064 ++#define HMATRIX2_SCFG10 0x0068 ++#define HMATRIX2_SCFG11 0x006c ++#define HMATRIX2_SCFG12 0x0070 ++#define HMATRIX2_SCFG13 0x0074 ++#define HMATRIX2_SCFG14 0x0078 ++#define HMATRIX2_SCFG15 0x007c ++#define HMATRIX2_PRAS 0x0080 ++#define HMATRIX2_PRBS 0x0084 ++#define HMATRIX2_PRAS1 0x0088 ++#define HMATRIX2_PRBS1 0x008c ++#define HMATRIX2_PRAS2 0x0090 ++#define HMATRIX2_PRBS2 0x0094 ++#define HMATRIX2_PRAS3 0x0098 ++#define HMATRIX2_PRBS3 0x009c ++#define HMATRIX2_PRAS4 0x00a0 ++#define HMATRIX2_PRBS4 0x00a4 ++#define HMATRIX2_PRAS5 0x00a8 ++#define HMATRIX2_PRBS5 0x00ac ++#define HMATRIX2_PRAS6 0x00b0 ++#define HMATRIX2_PRBS6 0x00b4 ++#define HMATRIX2_PRAS7 0x00b8 ++#define HMATRIX2_PRBS7 0x00bc ++#define HMATRIX2_PRAS8 0x00c0 ++#define HMATRIX2_PRBS8 0x00c4 ++#define HMATRIX2_PRAS9 0x00c8 ++#define HMATRIX2_PRBS9 0x00cc ++#define HMATRIX2_PRAS10 0x00d0 ++#define HMATRIX2_PRBS10 0x00d4 ++#define HMATRIX2_PRAS11 0x00d8 ++#define HMATRIX2_PRBS11 0x00dc ++#define HMATRIX2_PRAS12 0x00e0 ++#define HMATRIX2_PRBS12 0x00e4 ++#define HMATRIX2_PRAS13 0x00e8 ++#define HMATRIX2_PRBS13 0x00ec ++#define HMATRIX2_PRAS14 0x00f0 ++#define HMATRIX2_PRBS14 0x00f4 ++#define HMATRIX2_PRAS15 0x00f8 ++#define HMATRIX2_PRBS15 0x00fc ++#define HMATRIX2_MRCR 0x0100 ++#define HMATRIX2_SFR0 0x0110 ++#define HMATRIX2_SFR1 0x0114 ++#define HMATRIX2_SFR2 0x0118 ++#define HMATRIX2_SFR3 0x011c ++#define HMATRIX2_SFR4 0x0120 ++#define HMATRIX2_SFR5 0x0124 ++#define HMATRIX2_SFR6 0x0128 ++#define HMATRIX2_SFR7 0x012c ++#define HMATRIX2_SFR8 0x0130 ++#define HMATRIX2_SFR9 0x0134 ++#define HMATRIX2_SFR10 0x0138 ++#define HMATRIX2_SFR11 0x013c ++#define HMATRIX2_SFR12 0x0140 ++#define HMATRIX2_SFR13 0x0144 ++#define HMATRIX2_SFR14 0x0148 ++#define HMATRIX2_SFR15 0x014c ++#define HMATRIX2_VERSION 0x01fc ++ ++/* Bitfields in MCFG0 */ ++#define HMATRIX2_ULBT_OFFSET 0 ++#define HMATRIX2_ULBT_SIZE 3 ++ ++/* Bitfields in MCFG1 */ ++ ++/* Bitfields in MCFG2 */ ++ ++/* Bitfields in MCFG3 */ ++ ++/* Bitfields in MCFG4 */ ++ ++/* Bitfields in MCFG5 */ ++ ++/* Bitfields in MCFG6 */ ++ ++/* Bitfields in MCFG7 */ ++ ++/* Bitfields in MCFG8 */ ++ ++/* Bitfields in MCFG9 */ ++ ++/* Bitfields in MCFG10 */ ++ ++/* Bitfields in MCFG11 */ ++ ++/* Bitfields in MCFG12 */ ++ ++/* Bitfields in MCFG13 */ ++ ++/* Bitfields in MCFG14 */ ++ ++/* Bitfields in MCFG15 */ ++ ++/* Bitfields in SCFG0 */ ++#define HMATRIX2_SLOT_CYCLE_OFFSET 0 ++#define HMATRIX2_SLOT_CYCLE_SIZE 8 ++#define HMATRIX2_DEFMSTR_TYPE_OFFSET 16 ++#define HMATRIX2_DEFMSTR_TYPE_SIZE 2 ++#define HMATRIX2_FIXED_DEFMSTR_OFFSET 18 ++#define HMATRIX2_FIXED_DEFMSTR_SIZE 4 ++#define HMATRIX2_ARBT_OFFSET 24 ++#define HMATRIX2_ARBT_SIZE 2 ++ ++/* Bitfields in SCFG1 */ ++ ++/* Bitfields in SCFG2 */ ++ ++/* Bitfields in SCFG3 */ ++ ++/* Bitfields in SCFG4 */ ++ ++/* Bitfields in SCFG5 */ ++ ++/* Bitfields in SCFG6 */ ++ ++/* Bitfields in SCFG7 */ ++ ++/* Bitfields in SCFG8 */ ++ ++/* Bitfields in SCFG9 */ ++ ++/* Bitfields in SCFG10 */ ++ ++/* Bitfields in SCFG11 */ ++ ++/* Bitfields in SCFG12 */ ++ ++/* Bitfields in SCFG13 */ ++ ++/* Bitfields in SCFG14 */ ++ ++/* Bitfields in SCFG15 */ ++ ++/* Bitfields in PRAS */ ++#define HMATRIX2_M0PR_OFFSET 0 ++#define HMATRIX2_M0PR_SIZE 4 ++#define HMATRIX2_M1PR_OFFSET 4 ++#define HMATRIX2_M1PR_SIZE 4 ++#define HMATRIX2_M2PR_OFFSET 8 ++#define HMATRIX2_M2PR_SIZE 4 ++#define HMATRIX2_M3PR_OFFSET 12 ++#define HMATRIX2_M3PR_SIZE 4 ++#define HMATRIX2_M4PR_OFFSET 16 ++#define HMATRIX2_M4PR_SIZE 4 ++#define HMATRIX2_M5PR_OFFSET 20 ++#define HMATRIX2_M5PR_SIZE 4 ++#define HMATRIX2_M6PR_OFFSET 24 ++#define HMATRIX2_M6PR_SIZE 4 ++#define HMATRIX2_M7PR_OFFSET 28 ++#define HMATRIX2_M7PR_SIZE 4 ++ ++/* Bitfields in PRBS */ ++#define HMATRIX2_M8PR_OFFSET 0 ++#define HMATRIX2_M8PR_SIZE 4 ++#define HMATRIX2_M9PR_OFFSET 4 ++#define HMATRIX2_M9PR_SIZE 4 ++#define HMATRIX2_M10PR_OFFSET 8 ++#define HMATRIX2_M10PR_SIZE 4 ++#define HMATRIX2_M11PR_OFFSET 12 ++#define HMATRIX2_M11PR_SIZE 4 ++#define HMATRIX2_M12PR_OFFSET 16 ++#define HMATRIX2_M12PR_SIZE 4 ++#define HMATRIX2_M13PR_OFFSET 20 ++#define HMATRIX2_M13PR_SIZE 4 ++#define HMATRIX2_M14PR_OFFSET 24 ++#define HMATRIX2_M14PR_SIZE 4 ++#define HMATRIX2_M15PR_OFFSET 28 ++#define HMATRIX2_M15PR_SIZE 4 ++ ++/* Bitfields in PRAS1 */ ++ ++/* Bitfields in PRBS1 */ ++ ++/* Bitfields in PRAS2 */ ++ ++/* Bitfields in PRBS2 */ ++ ++/* Bitfields in PRAS3 */ ++ ++/* Bitfields in PRBS3 */ ++ ++/* Bitfields in PRAS4 */ ++ ++/* Bitfields in PRBS4 */ ++ ++/* Bitfields in PRAS5 */ ++ ++/* Bitfields in PRBS5 */ ++ ++/* Bitfields in PRAS6 */ ++ ++/* Bitfields in PRBS6 */ ++ ++/* Bitfields in PRAS7 */ ++ ++/* Bitfields in PRBS7 */ ++ ++/* Bitfields in PRAS8 */ ++ ++/* Bitfields in PRBS8 */ ++ ++/* Bitfields in PRAS9 */ ++ ++/* Bitfields in PRBS9 */ ++ ++/* Bitfields in PRAS10 */ ++ ++/* Bitfields in PRBS10 */ ++ ++/* Bitfields in PRAS11 */ ++ ++/* Bitfields in PRBS11 */ ++ ++/* Bitfields in PRAS12 */ ++ ++/* Bitfields in PRBS12 */ ++ ++/* Bitfields in PRAS13 */ ++ ++/* Bitfields in PRBS13 */ ++ ++/* Bitfields in PRAS14 */ ++ ++/* Bitfields in PRBS14 */ ++ ++/* Bitfields in PRAS15 */ ++ ++/* Bitfields in PRBS15 */ ++ ++/* Bitfields in MRCR */ ++#define HMATRIX2_RBC0_OFFSET 0 ++#define HMATRIX2_RBC0_SIZE 1 ++#define HMATRIX2_RBC1_OFFSET 1 ++#define HMATRIX2_RBC1_SIZE 1 ++#define HMATRIX2_RBC2_OFFSET 2 ++#define HMATRIX2_RBC2_SIZE 1 ++#define HMATRIX2_RBC3_OFFSET 3 ++#define HMATRIX2_RBC3_SIZE 1 ++#define HMATRIX2_RBC4_OFFSET 4 ++#define HMATRIX2_RBC4_SIZE 1 ++#define HMATRIX2_RBC5_OFFSET 5 ++#define HMATRIX2_RBC5_SIZE 1 ++#define HMATRIX2_RBC6_OFFSET 6 ++#define HMATRIX2_RBC6_SIZE 1 ++#define HMATRIX2_RBC7_OFFSET 7 ++#define HMATRIX2_RBC7_SIZE 1 ++#define HMATRIX2_RBC8_OFFSET 8 ++#define HMATRIX2_RBC8_SIZE 1 ++#define HMATRIX2_RBC9_OFFSET 9 ++#define HMATRIX2_RBC9_SIZE 1 ++#define HMATRIX2_RBC10_OFFSET 10 ++#define HMATRIX2_RBC10_SIZE 1 ++#define HMATRIX2_RBC11_OFFSET 11 ++#define HMATRIX2_RBC11_SIZE 1 ++#define HMATRIX2_RBC12_OFFSET 12 ++#define HMATRIX2_RBC12_SIZE 1 ++#define HMATRIX2_RBC13_OFFSET 13 ++#define HMATRIX2_RBC13_SIZE 1 ++#define HMATRIX2_RBC14_OFFSET 14 ++#define HMATRIX2_RBC14_SIZE 1 ++#define HMATRIX2_RBC15_OFFSET 15 ++#define HMATRIX2_RBC15_SIZE 1 ++ ++/* Bitfields in SFR0 */ ++#define HMATRIX2_SFR_OFFSET 0 ++#define HMATRIX2_SFR_SIZE 32 ++ ++/* Bitfields in SFR1 */ ++ ++/* Bitfields in SFR2 */ ++ ++/* Bitfields in SFR3 */ ++ ++/* Bitfields in SFR4 */ ++#define HMATRIX2_CS1A_OFFSET 1 ++#define HMATRIX2_CS1A_SIZE 1 ++#define HMATRIX2_CS3A_OFFSET 3 ++#define HMATRIX2_CS3A_SIZE 1 ++#define HMATRIX2_CS4A_OFFSET 4 ++#define HMATRIX2_CS4A_SIZE 1 ++#define HMATRIX2_CS5A_OFFSET 5 ++#define HMATRIX2_CS5A_SIZE 1 ++#define HMATRIX2_DBPUC_OFFSET 8 ++#define HMATRIX2_DBPUC_SIZE 1 ++ ++/* Bitfields in SFR5 */ ++ ++/* Bitfields in SFR6 */ ++ ++/* Bitfields in SFR7 */ ++ ++/* Bitfields in SFR8 */ ++ ++/* Bitfields in SFR9 */ ++ ++/* Bitfields in SFR10 */ ++ ++/* Bitfields in SFR11 */ ++ ++/* Bitfields in SFR12 */ ++ ++/* Bitfields in SFR13 */ ++ ++/* Bitfields in SFR14 */ ++ ++/* Bitfields in SFR15 */ ++ ++/* Bitfields in VERSION */ ++#define HMATRIX2_VERSION_OFFSET 0 ++#define HMATRIX2_VERSION_SIZE 12 ++#define HMATRIX2_MFN_OFFSET 16 ++#define HMATRIX2_MFN_SIZE 3 ++ ++/* Constants for ULBT */ ++#define HMATRIX2_ULBT_INFINITE 0 ++#define HMATRIX2_ULBT_SINGLE 1 ++#define HMATRIX2_ULBT_FOUR_BEAT 2 ++#define HMATRIX2_ULBT_SIXTEEN_BEAT 4 ++ ++/* Constants for DEFMSTR_TYPE */ ++#define HMATRIX2_DEFMSTR_TYPE_NO_DEFAULT 0 ++#define HMATRIX2_DEFMSTR_TYPE_LAST_DEFAULT 1 ++#define HMATRIX2_DEFMSTR_TYPE_FIXED_DEFAULT 2 ++ ++/* Constants for ARBT */ ++#define HMATRIX2_ARBT_ROUND_ROBIN 0 ++#define HMATRIX2_ARBT_FIXED_PRIORITY 1 ++ ++/* Bit manipulation macros */ ++#define HMATRIX2_BIT(name) (1 << HMATRIX2_##name##_OFFSET) ++#define HMATRIX2_BF(name,value) (((value) & ((1 << HMATRIX2_##name##_SIZE) - 1)) << HMATRIX2_##name##_OFFSET) ++#define HMATRIX2_BFEXT(name,value) (((value) >> HMATRIX2_##name##_OFFSET) & ((1 << HMATRIX2_##name##_SIZE) - 1)) ++#define HMATRIX2_BFINS(name,value,old) (((old) & ~(((1 << HMATRIX2_##name##_SIZE) - 1) << HMATRIX2_##name##_OFFSET)) | HMATRIX2_BF(name,value)) ++ ++/* Register access macros */ ++#define hmatrix2_readl(base,reg) \ ++ __raw_readl(base + HMATRIX2_##reg) ++#define hmatrix2_writel(base,reg,value) \ ++ __raw_writel((value), base + HMATRIX2_##reg) ++ ++#endif /* __ASM_AVR32_HMATRIX2_H__ */ +Index: linux-2.6.18/arch/avr32/mach-at32ap/at32ap7000.c +=================================================================== +--- linux-2.6.18.orig/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-03 14:57:26.000000000 +0100 ++++ linux-2.6.18/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-03 15:25:01.000000000 +0100 +@@ -466,6 +466,15 @@ + .users = 1, + }; + ++static struct clk hmatrix2_clk = { ++ .name = "hmatrix2", ++ .parent = &pbb_clk, ++ .mode = pbb_clk_mode, ++ .get_rate = pbb_clk_get_rate, ++ .users = 1, ++ .index = 2, ++}; ++ + static struct resource dmac0_resource[] = { + { + .start = 0xff200000, +@@ -1096,6 +1096,7 @@ + &pdc_pclk, + &dmac0_hclk, + &pico_clk, ++ &hmatrix2_clk, + &pio0_mck, + &pio1_mck, + &pio2_mck, diff --git a/packages/linux/linux-2.6.18/add-ide-header.patch b/packages/linux/linux-2.6.18/add-ide-header.patch new file mode 100644 index 0000000000..76bd35bfac --- /dev/null +++ b/packages/linux/linux-2.6.18/add-ide-header.patch @@ -0,0 +1,41 @@ +Index: linux-2.6.18/include/asm-avr32/ide.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18/include/asm-avr32/ide.h 2006-10-24 15:12:02.000000000 +0200 +@@ -0,0 +1,36 @@ ++/* ++ * linux/include/asm-arm/ide.h ++ * ++ * Copyright (C) 1994-1996 Linus Torvalds & authors ++ */ ++ ++/* ++ * This file contains the ARM architecture specific IDE code. ++ */ ++ ++#ifndef __ASMAVR32_IDE_H ++#define __ASMAVR32_IDE_H ++ ++#ifdef __KERNEL__ ++ ++#ifndef MAX_HWIFS ++#define MAX_HWIFS 4 ++#endif ++ ++#if !defined(CONFIG_ARCH_L7200) ++# define IDE_ARCH_OBSOLETE_INIT ++# ifdef CONFIG_ARCH_CLPS7500 ++# define ide_default_io_ctl(base) ((base) + 0x206) /* obsolete */ ++# else ++# define ide_default_io_ctl(base) (0) ++# endif ++#endif /* !ARCH_L7200 */ ++ ++#define __ide_mm_insw(port,addr,len) readsw(port,addr,len) ++#define __ide_mm_insl(port,addr,len) readsl(port,addr,len) ++#define __ide_mm_outsw(port,addr,len) writesw(port,addr,len) ++#define __ide_mm_outsl(port,addr,len) writesl(port,addr,len) ++ ++#endif /* __KERNEL__ */ ++ ++#endif /* __ASMAVR32_IDE_H */ diff --git a/packages/linux/linux-2.6.18/add-intc_pending_irq-to-intc.patch b/packages/linux/linux-2.6.18/add-intc_pending_irq-to-intc.patch new file mode 100644 index 0000000000..6d99de84b1 --- /dev/null +++ b/packages/linux/linux-2.6.18/add-intc_pending_irq-to-intc.patch @@ -0,0 +1,10 @@ +--- linux-2.6.18.orig/arch/avr32/mach-at32ap/intc.c 2006-11-06 14:36:50.000000000 +0100 ++++ linux-2.6.18/arch/avr32/mach-at32ap/intc.c 2006-11-06 15:09:39.000000000 +0100 +@@ -131,3 +131,7 @@ + panic("Interrupt controller initialization failed!\n"); + } + ++unsigned long intc_get_pending(int group) ++{ ++ return intc_readl(&intc0, INTREQ0 + 4 * group); ++} diff --git a/packages/linux/linux-2.6.18/add-mach-specific-kconfig.patch b/packages/linux/linux-2.6.18/add-mach-specific-kconfig.patch new file mode 100644 index 0000000000..6f6e8f4833 --- /dev/null +++ b/packages/linux/linux-2.6.18/add-mach-specific-kconfig.patch @@ -0,0 +1,30 @@ +--- + arch/avr32/Kconfig | 2 ++ + arch/avr32/mach-at32ap/Kconfig | 7 +++++++ + 2 files changed, 9 insertions(+) + +Index: linux-2.6.18-avr32/arch/avr32/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/Kconfig 2006-10-24 13:30:29.000000000 +0200 ++++ linux-2.6.18-avr32/arch/avr32/Kconfig 2006-10-24 13:32:07.000000000 +0200 +@@ -107,6 +107,8 @@ config LOADER_U_BOOT + bool "U-Boot (or similar) bootloader" + endchoice + ++source "arch/avr32/mach-at32ap/Kconfig" ++ + config LOAD_ADDRESS + hex + default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/Kconfig +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/Kconfig 2006-10-24 13:46:51.000000000 +0200 +@@ -0,0 +1,7 @@ ++if PLATFORM_AT32AP ++ ++menu "Atmel AVR32 AP options" ++ ++endmenu ++ ++endif diff --git a/packages/linux/linux-2.6.18/at32-dac-oss-driver-clk-fix.patch b/packages/linux/linux-2.6.18/at32-dac-oss-driver-clk-fix.patch new file mode 100644 index 0000000000..927cdc5ece --- /dev/null +++ b/packages/linux/linux-2.6.18/at32-dac-oss-driver-clk-fix.patch @@ -0,0 +1,175 @@ +--- + sound/oss/at32dac.c | 72 +++++++++++++++++++++++++++++++--------------------- + 1 file changed, 43 insertions(+), 29 deletions(-) + +Index: linux-2.6.18-avr32/sound/oss/at32dac.c +=================================================================== +--- linux-2.6.18-avr32.orig/sound/oss/at32dac.c 2006-11-01 14:30:47.000000000 +0100 ++++ linux-2.6.18-avr32/sound/oss/at32dac.c 2006-11-01 14:32:05.000000000 +0100 +@@ -71,6 +71,7 @@ struct at32_dac { + struct dma_request_cyclic req; + + struct clk *mck; ++ struct clk *sample_clk; + struct platform_device *pdev; + int busy; + int playing; +@@ -116,24 +117,6 @@ static void at32dac_update_dma_tail(stru + } + } + +-static int at32dac_start_genclock(struct at32_dac *dac) +-{ +- unsigned int div; +- +- div = ((clk_get_rate(boot_cpu_data.clk) + 256 * dac->dsp_settings.sample_rate) +- / (512 * dac->dsp_settings.sample_rate) - 1); +- pr_debug("Real sample rate: %llu (div=%u)\n", +- boot_cpu_data.cpu_hz / (512 * (div + 1)), div); +- writel((div << 8) | 0x16, (void __iomem *)(0xfff00060 + 4 * 6)); +- +- return 0; +-} +- +-static void at32dac_stop_genclock(struct at32_dac *dac) +-{ +- writel(0, (void __iomem *)(0xfff00060 + 4 * 6)); +-} +- + static int at32dac_start(struct at32_dac *dac) + { + int ret; +@@ -143,13 +126,11 @@ static int at32dac_start(struct at32_dac + + memset(dac->dma.buf, 0, DMA_BUFFER_SIZE); + +- ret = at32dac_start_genclock(dac); +- if (ret) +- return ret; ++ clk_enable(dac->sample_clk); + + ret = dma_prepare_request_cyclic(dac->req.req.dmac, &dac->req); + if (ret) +- goto out_stop_genclock; ++ goto out_stop_clock; + + pr_debug("Starting DMA...\n"); + ret = dma_start_request(dac->req.req.dmac, dac->req.req.channel); +@@ -164,8 +145,8 @@ static int at32dac_start(struct at32_dac + out_stop_request: + dma_stop_request(dac->req.req.dmac, + dac->req.req.channel); +-out_stop_genclock: +- at32dac_stop_genclock(dac); ++out_stop_clock: ++ clk_disable(dac->sample_clk); + return ret; + } + +@@ -176,7 +157,7 @@ static int at32dac_stop(struct at32_dac + dac_writel(dac, DATA, 0); + dac_writel(dac, CTRL, 0); + dac->playing = 0; +- at32dac_stop_genclock(dac); ++ clk_disable(dac->sample_clk); + } + + return 0; +@@ -360,6 +341,26 @@ static int at32dac_set_format(struct at3 + return 0; + } + ++static int at32dac_set_sample_rate(struct at32_dac *dac, unsigned long rate) ++{ ++ unsigned long new_rate; ++ int ret; ++ ++ ret = clk_set_rate(dac->sample_clk, 256 * rate); ++ if (ret < 0) ++ return ret; ++ ++ /* TODO: mplayer seems to have a problem with this */ ++#if 0 ++ new_rate = clk_get_rate(dac->sample_clk); ++ dac->dsp_settings.sample_rate = new_rate / 256; ++#else ++ dac->dsp_settings.sample_rate = rate; ++#endif ++ ++ return 0; ++} ++ + static ssize_t at32dac_dsp_write(struct file *file, + const char __user *buffer, + size_t count, loff_t *ppos) +@@ -449,7 +450,9 @@ static int at32dac_dsp_ioctl(struct inod + return -EFAULT; + if (val >= 0) { + at32dac_stop(dac); +- dac->dsp_settings.sample_rate = val; ++ ret = at32dac_set_sample_rate(dac, val); ++ if (ret) ++ return ret; + } + return put_user(dac->dsp_settings.sample_rate, up); + +@@ -534,10 +537,11 @@ static int at32dac_dsp_open(struct inode + dac->dma.head = dac->dma.tail = 0; + + /* FIXME: What are the correct defaults? */ +- dac->dsp_settings.format = AFMT_S16_BE; + dac->dsp_settings.channels = 2; +- dac->dsp_settings.sample_rate = 8000; +- dac->dsp_settings.input_order = 2; ++ at32dac_set_format(dac, AFMT_S16_BE); ++ ret = at32dac_set_sample_rate(dac, 8000); ++ if (ret) ++ goto out; + + file->private_data = dac; + dac->busy = 1; +@@ -578,6 +582,7 @@ static int __devinit at32dac_probe(struc + struct at32_dac *dac; + struct resource *regs; + struct clk *mck; ++ struct clk *sample_clk; + int irq; + int ret; + +@@ -594,6 +599,11 @@ static int __devinit at32dac_probe(struc + mck = clk_get(&pdev->dev, "mck"); + if (IS_ERR(mck)) + return PTR_ERR(mck); ++ sample_clk = clk_get(&pdev->dev, "sample_clk"); ++ if (IS_ERR(sample_clk)) { ++ ret = PTR_ERR(sample_clk); ++ goto out_put_mck; ++ } + clk_enable(mck); + + ret = -ENOMEM; +@@ -606,6 +616,7 @@ static int __devinit at32dac_probe(struc + init_waitqueue_head(&dac->write_wait); + dac->pdev = pdev; + dac->mck = mck; ++ dac->sample_clk = sample_clk; + + dac->regs = ioremap(regs->start, regs->end - regs->start + 1); + if (!dac->regs) +@@ -658,6 +669,8 @@ out_free_dac: + kfree(dac); + out_disable_clk: + clk_disable(mck); ++ clk_put(sample_clk); ++out_put_mck: + clk_put(mck); + return ret; + } +@@ -673,6 +686,7 @@ static int __devexit at32dac_remove(stru + free_irq(platform_get_irq(pdev, 0), dac); + iounmap(dac->regs); + clk_disable(dac->mck); ++ clk_put(dac->sample_clk); + clk_put(dac->mck); + kfree(dac); + platform_set_drvdata(pdev, NULL); diff --git a/packages/linux/linux-2.6.18/at32-dac-oss-driver.patch b/packages/linux/linux-2.6.18/at32-dac-oss-driver.patch new file mode 100644 index 0000000000..92a17f9af3 --- /dev/null +++ b/packages/linux/linux-2.6.18/at32-dac-oss-driver.patch @@ -0,0 +1,819 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Mon Apr 3 17:38:29 2006 +0200 +Subject: [PATCH] OSS driver for the AT32 on-chip digital DAC + +--- + + sound/oss/Kconfig | 4 + sound/oss/Makefile | 1 + sound/oss/at32dac.c | 707 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + sound/oss/at32dac.h | 65 ++++ + 4 files changed, 777 insertions(+) + +Index: linux-2.6.18-avr32/sound/oss/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/sound/oss/Kconfig 2006-11-02 15:54:18.000000000 +0100 ++++ linux-2.6.18-avr32/sound/oss/Kconfig 2006-11-02 15:56:20.000000000 +0100 +@@ -869,3 +869,7 @@ config SOUND_SH_DAC_AUDIO_CHANNEL + int "DAC channel" + default "1" + depends on SOUND_SH_DAC_AUDIO ++ ++config SOUND_AT32_DAC ++ tristate "Atmel AT32 On-chip DAC support" ++ depends on SOUND_PRIME && AVR32 +Index: linux-2.6.18-avr32/sound/oss/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/sound/oss/Makefile 2006-11-02 15:54:18.000000000 +0100 ++++ linux-2.6.18-avr32/sound/oss/Makefile 2006-11-02 15:56:20.000000000 +0100 +@@ -10,6 +10,7 @@ obj-$(CONFIG_SOUND_CS4232) += cs4232.o a + + # Please leave it as is, cause the link order is significant ! + ++obj-$(CONFIG_SOUND_AT32_DAC) += at32dac.o + obj-$(CONFIG_SOUND_SH_DAC_AUDIO) += sh_dac_audio.o + obj-$(CONFIG_SOUND_HAL2) += hal2.o + obj-$(CONFIG_SOUND_AEDSP16) += aedsp16.o +Index: linux-2.6.18-avr32/sound/oss/at32dac.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/sound/oss/at32dac.c 2006-11-02 15:56:20.000000000 +0100 +@@ -0,0 +1,707 @@ ++/* ++ * OSS Sound Driver for the Atmel AT32 on-chip DAC. ++ * ++ * Copyright (C) 2006 Atmel 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 ++ ++/* We want to use the "bizarre" swap-bytes-in-each-halfword macro */ ++#include ++ ++#include "at32dac.h" ++ ++#define DMA_BUFFER_SIZE 32768 ++#define DMA_PERIOD_SHIFT 10 ++#define DMA_PERIOD_SIZE (1 << DMA_PERIOD_SHIFT) ++#define DMA_WRITE_THRESHOLD DMA_PERIOD_SIZE ++ ++struct sound_settings { ++ unsigned int format; ++ unsigned int channels; ++ unsigned int sample_rate; ++ /* log2(bytes per sample) */ ++ unsigned int input_order; ++}; ++ ++struct at32_dac { ++ spinlock_t lock; ++ void __iomem *regs; ++ ++ /* head and tail refer to number of words */ ++ struct { ++ u32 *buf; ++ int head; ++ int tail; ++ } dma; ++ ++ struct semaphore sem; ++ wait_queue_head_t write_wait; ++ ++ /* ++ * Read at most ucount bytes from ubuf, translate to 2-channel ++ * signed 16-bit big endian format and write to the DMA buffer ++ * as long as there is room left. Return the number of bytes ++ * successfully copied from ubuf, or -EFAULT if the first ++ * sample from ubuf couldn't be read. This function is not ++ * called unless there is room for at least one sample (4 ++ * bytes) in the DMA buffer. ++ */ ++ int (*trans)(struct at32_dac *dac, const char __user *ubuf, ++ size_t ucount); ++ ++ struct sound_settings dsp_settings; ++ struct dma_request_cyclic req; ++ ++ struct clk *mck; ++ struct platform_device *pdev; ++ int busy; ++ int playing; ++ int dev_dsp; ++}; ++static struct at32_dac *the_dac; ++ ++static inline unsigned int at32dac_get_head(struct at32_dac *dac) ++{ ++ return dac->dma.head & ((DMA_BUFFER_SIZE / 4) - 1); ++} ++ ++static inline unsigned int at32dac_get_tail(struct at32_dac *dac) ++{ ++ return dac->dma.tail & ((DMA_BUFFER_SIZE / 4) - 1); ++} ++ ++static inline unsigned int at32dac_dma_space(struct at32_dac *dac) ++{ ++ unsigned int space; ++ ++ space = ((dac->dma.tail - dac->dma.head - 1) ++ & ((DMA_BUFFER_SIZE / 4) - 1)); ++ return space; ++} ++ ++static void at32dac_update_dma_tail(struct at32_dac *dac) ++{ ++ dma_addr_t dma_addr; ++ unsigned int new_tail; ++ ++ if (dac->playing) { ++ dma_addr = dma_get_current_pos(dac->req.req.dmac, ++ dac->req.req.channel); ++ new_tail = (dma_addr - dac->req.buffer_start) / 4; ++ if (new_tail >= dac->dma.head ++ && (dac->dma.tail < dac->dma.head ++ || dac->dma.tail > new_tail)) ++ printk(KERN_NOTICE "at32dac: underrun\n"); ++ dac->dma.tail = new_tail; ++ pr_debug("update tail: 0x%x - 0x%x = %u\n", ++ dma_addr, dac->req.buffer_start, dac->dma.tail); ++ } ++} ++ ++static int at32dac_start_genclock(struct at32_dac *dac) ++{ ++ unsigned int div; ++ ++ div = ((clk_get_rate(boot_cpu_data.clk) + 256 * dac->dsp_settings.sample_rate) ++ / (512 * dac->dsp_settings.sample_rate) - 1); ++ pr_debug("Real sample rate: %llu (div=%u)\n", ++ boot_cpu_data.cpu_hz / (512 * (div + 1)), div); ++ writel((div << 8) | 0x16, (void __iomem *)(0xfff00060 + 4 * 6)); ++ ++ return 0; ++} ++ ++static void at32dac_stop_genclock(struct at32_dac *dac) ++{ ++ writel(0, (void __iomem *)(0xfff00060 + 4 * 6)); ++} ++ ++static int at32dac_start(struct at32_dac *dac) ++{ ++ int ret; ++ ++ if (dac->playing) ++ return 0; ++ ++ memset(dac->dma.buf, 0, DMA_BUFFER_SIZE); ++ ++ ret = at32dac_start_genclock(dac); ++ if (ret) ++ return ret; ++ ++ ret = dma_prepare_request_cyclic(dac->req.req.dmac, &dac->req); ++ if (ret) ++ goto out_stop_genclock; ++ ++ pr_debug("Starting DMA...\n"); ++ ret = dma_start_request(dac->req.req.dmac, dac->req.req.channel); ++ if (ret) ++ goto out_stop_request; ++ ++ dac_writel(dac, CTRL, DAC_BIT(EN)); ++ dac->playing = 1; ++ ++ return 0; ++ ++out_stop_request: ++ dma_stop_request(dac->req.req.dmac, ++ dac->req.req.channel); ++out_stop_genclock: ++ at32dac_stop_genclock(dac); ++ return ret; ++} ++ ++static int at32dac_stop(struct at32_dac *dac) ++{ ++ if (dac->playing) { ++ dma_stop_request(dac->req.req.dmac, dac->req.req.channel); ++ dac_writel(dac, DATA, 0); ++ dac_writel(dac, CTRL, 0); ++ dac->playing = 0; ++ at32dac_stop_genclock(dac); ++ } ++ ++ return 0; ++} ++ ++static int at32dac_dma_prepare(struct at32_dac *dac) ++{ ++ dac->dma.buf = dma_alloc_coherent(&dac->pdev->dev, DMA_BUFFER_SIZE, ++ &dac->req.buffer_start, GFP_KERNEL); ++ if (!dac->dma.buf) ++ return -ENOMEM; ++ ++ dac->dma.head = dac->dma.tail = 0; ++ dac->req.periods = DMA_BUFFER_SIZE / DMA_PERIOD_SIZE; ++ dac->req.buffer_size = DMA_BUFFER_SIZE; ++ ++ return 0; ++} ++ ++static void at32dac_dma_cleanup(struct at32_dac *dac) ++{ ++ if (dac->dma.buf) ++ dma_free_coherent(&dac->pdev->dev, DMA_BUFFER_SIZE, ++ dac->dma.buf, dac->req.buffer_start); ++ dac->dma.buf = NULL; ++} ++ ++static void at32dac_dma_block_complete(struct dma_request *req) ++{ ++ struct dma_request_cyclic *creq = to_dma_request_cyclic(req); ++ struct at32_dac *dac = container_of(creq, struct at32_dac, req); ++ ++ wake_up(&dac->write_wait); ++} ++ ++static void at32dac_dma_error(struct dma_request *req) ++{ ++ printk(KERN_ERR "at32dac: DMA error\n"); ++} ++ ++static irqreturn_t at32dac_interrupt(int irq, void *dev_id, ++ struct pt_regs *regs) ++{ ++ struct at32_dac *dac = dev_id; ++ u32 status; ++ ++ status = dac_readl(dac, INT_STATUS); ++ if (status & DAC_BIT(UNDERRUN)) { ++ printk(KERN_ERR "at32dac: Underrun detected\n"); ++ dac_writel(dac, INT_CLR, DAC_BIT(UNDERRUN)); ++ } else { ++ printk(KERN_ERR "at32dac: Spurious interrupt: status=0x%x\n", ++ status); ++ dac_writel(dac, INT_CLR, status); ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++static ssize_t trans_s16be(struct at32_dac *dac, const char __user *ubuf, ++ size_t ucount) ++{ ++ ssize_t ret; ++ ++ if (dac->dsp_settings.channels == 2) { ++ const u32 __user *up = (const u32 __user *)ubuf; ++ u32 sample; ++ ++ for (ret = 0; ret < (ssize_t)(ucount - 3); ret += 4) { ++ if (!at32dac_dma_space(dac)) ++ break; ++ ++ if (unlikely(__get_user(sample, up++))) { ++ if (ret == 0) ++ ret = -EFAULT; ++ break; ++ } ++ dac->dma.buf[at32dac_get_head(dac)] = sample; ++ dac->dma.head++; ++ } ++ } else { ++ const u16 __user *up = (const u16 __user *)ubuf; ++ u16 sample; ++ ++ for (ret = 0; ret < (ssize_t)(ucount - 1); ret += 2) { ++ if (!at32dac_dma_space(dac)) ++ break; ++ ++ if (unlikely(__get_user(sample, up++))) { ++ if (ret == 0) ++ ret = -EFAULT; ++ break; ++ } ++ dac->dma.buf[at32dac_get_head(dac)] ++ = (sample << 16) | sample; ++ dac->dma.head++; ++ } ++ } ++ ++ return ret; ++} ++ ++static ssize_t trans_s16le(struct at32_dac *dac, const char __user *ubuf, ++ size_t ucount) ++{ ++ ssize_t ret; ++ ++ if (dac->dsp_settings.channels == 2) { ++ const u32 __user *up = (const u32 __user *)ubuf; ++ u32 sample; ++ ++ for (ret = 0; ret < (ssize_t)(ucount - 3); ret += 4) { ++ if (!at32dac_dma_space(dac)) ++ break; ++ ++ if (unlikely(__get_user(sample, up++))) { ++ if (ret == 0) ++ ret = -EFAULT; ++ break; ++ } ++ /* Swap bytes in each halfword */ ++ dac->dma.buf[at32dac_get_head(dac)] = swahb32(sample); ++ dac->dma.head++; ++ } ++ } else { ++ const u16 __user *up = (const u16 __user *)ubuf; ++ u16 sample; ++ ++ for (ret = 0; ret < (ssize_t)(ucount - 1); ret += 2) { ++ if (!at32dac_dma_space(dac)) ++ break; ++ ++ if (unlikely(__get_user(sample, up++))) { ++ if (ret == 0) ++ ret = -EFAULT; ++ break; ++ } ++ sample = swab16(sample); ++ dac->dma.buf[at32dac_get_head(dac)] ++ = (sample << 16) | sample; ++ dac->dma.head++; ++ } ++ } ++ ++ return ret; ++} ++ ++static ssize_t at32dac_dma_translate_from_user(struct at32_dac *dac, ++ const char __user *buffer, ++ size_t count) ++{ ++ /* At least one buffer must be available at this point */ ++ pr_debug("at32dac: Copying %zu bytes from user...\n", count); ++ ++ return dac->trans(dac, buffer, count); ++} ++ ++static int at32dac_set_format(struct at32_dac *dac, int format) ++{ ++ unsigned int order; ++ ++ switch (format) { ++ case AFMT_S16_BE: ++ order = 1; ++ dac->trans = trans_s16be; ++ break; ++ case AFMT_S16_LE: ++ order = 1; ++ dac->trans = trans_s16le; ++ break; ++ default: ++ printk("at32dac: Unsupported format: %d\n", format); ++ return -EINVAL; ++ } ++ ++ if (dac->dsp_settings.channels == 2) ++ order++; ++ ++ dac->dsp_settings.input_order = order; ++ dac->dsp_settings.format = format; ++ return 0; ++} ++ ++static ssize_t at32dac_dsp_write(struct file *file, ++ const char __user *buffer, ++ size_t count, loff_t *ppos) ++{ ++ struct at32_dac *dac = file->private_data; ++ DECLARE_WAITQUEUE(wait, current); ++ unsigned int avail; ++ ssize_t copied; ++ ssize_t ret; ++ ++ /* Avoid address space checking in the translation functions */ ++ if (!access_ok(buffer, count, VERIFY_READ)) ++ return -EFAULT; ++ ++ down(&dac->sem); ++ ++ if (!dac->dma.buf) { ++ ret = at32dac_dma_prepare(dac); ++ if (ret) ++ goto out; ++ } ++ ++ add_wait_queue(&dac->write_wait, &wait); ++ ret = 0; ++ while (count > 0) { ++ do { ++ at32dac_update_dma_tail(dac); ++ avail = at32dac_dma_space(dac); ++ set_current_state(TASK_INTERRUPTIBLE); ++ if (avail >= DMA_WRITE_THRESHOLD) ++ break; ++ ++ if (file->f_flags & O_NONBLOCK) { ++ if (!ret) ++ ret = -EAGAIN; ++ goto out; ++ } ++ ++ pr_debug("Going to wait (avail = %u, count = %zu)\n", ++ avail, count); ++ ++ up(&dac->sem); ++ schedule(); ++ if (signal_pending(current)) { ++ if (!ret) ++ ret = -ERESTARTSYS; ++ goto out_nosem; ++ } ++ down(&dac->sem); ++ } while (1); ++ ++ copied = at32dac_dma_translate_from_user(dac, buffer, count); ++ if (copied < 0) { ++ if (!ret) ++ ret = -EFAULT; ++ goto out; ++ } ++ ++ at32dac_start(dac); ++ ++ count -= copied; ++ ret += copied; ++ } ++ ++out: ++ up(&dac->sem); ++out_nosem: ++ remove_wait_queue(&dac->write_wait, &wait); ++ set_current_state(TASK_RUNNING); ++ return ret; ++} ++ ++static int at32dac_dsp_ioctl(struct inode *inode, struct file *file, ++ unsigned int cmd, unsigned long arg) ++{ ++ struct at32_dac *dac = file->private_data; ++ int __user *up = (int __user *)arg; ++ struct audio_buf_info abinfo; ++ int val, ret; ++ ++ switch (cmd) { ++ case OSS_GETVERSION: ++ return put_user(SOUND_VERSION, up); ++ ++ case SNDCTL_DSP_SPEED: ++ if (get_user(val, up)) ++ return -EFAULT; ++ if (val >= 0) { ++ at32dac_stop(dac); ++ dac->dsp_settings.sample_rate = val; ++ } ++ return put_user(dac->dsp_settings.sample_rate, up); ++ ++ case SNDCTL_DSP_STEREO: ++ if (get_user(val, up)) ++ return -EFAULT; ++ at32dac_stop(dac); ++ if (val && dac->dsp_settings.channels == 1) ++ dac->dsp_settings.input_order++; ++ else if (!val && dac->dsp_settings.channels != 1) ++ dac->dsp_settings.input_order--; ++ dac->dsp_settings.channels = val ? 2 : 1; ++ return 0; ++ ++ case SNDCTL_DSP_CHANNELS: ++ if (get_user(val, up)) ++ return -EFAULT; ++ ++ if (val) { ++ if (val < 0 || val > 2) ++ return -EINVAL; ++ ++ at32dac_stop(dac); ++ dac->dsp_settings.input_order ++ += val - dac->dsp_settings.channels; ++ dac->dsp_settings.channels = val; ++ } ++ return put_user(val, (int *)arg); ++ ++ case SNDCTL_DSP_GETFMTS: ++ return put_user(AFMT_S16_BE | AFMT_S16_BE, up); ++ ++ case SNDCTL_DSP_SETFMT: ++ if (get_user(val, up)) ++ return -EFAULT; ++ ++ if (val == AFMT_QUERY) { ++ val = dac->dsp_settings.format; ++ } else { ++ ret = at32dac_set_format(dac, val); ++ if (ret) ++ return ret; ++ } ++ return put_user(val, up); ++ ++ case SNDCTL_DSP_GETOSPACE: ++ at32dac_update_dma_tail(dac); ++ abinfo.fragsize = ((1 << dac->dsp_settings.input_order) ++ * (DMA_PERIOD_SIZE / 4)); ++ abinfo.bytes = (at32dac_dma_space(dac) ++ << dac->dsp_settings.input_order); ++ abinfo.fragstotal = ((DMA_BUFFER_SIZE * 4) ++ >> (DMA_PERIOD_SHIFT ++ + dac->dsp_settings.input_order)); ++ abinfo.fragments = ((abinfo.bytes ++ >> dac->dsp_settings.input_order) ++ / (DMA_PERIOD_SIZE / 4)); ++ pr_debug("fragments=%d fragstotal=%d fragsize=%d bytes=%d\n", ++ abinfo.fragments, abinfo.fragstotal, abinfo.fragsize, ++ abinfo.bytes); ++ return copy_to_user(up, &abinfo, sizeof(abinfo)) ? -EFAULT : 0; ++ ++ default: ++ printk("at32dac: Unimplemented ioctl cmd: 0x%x\n", cmd); ++ return -EINVAL; ++ } ++} ++ ++static int at32dac_dsp_open(struct inode *inode, struct file *file) ++{ ++ struct at32_dac *dac = the_dac; ++ int ret; ++ ++ if (file->f_mode & FMODE_READ) ++ return -ENXIO; ++ ++ down(&dac->sem); ++ ret = -EBUSY; ++ if (dac->busy) ++ goto out; ++ ++ dac->dma.head = dac->dma.tail = 0; ++ ++ /* FIXME: What are the correct defaults? */ ++ dac->dsp_settings.format = AFMT_S16_BE; ++ dac->dsp_settings.channels = 2; ++ dac->dsp_settings.sample_rate = 8000; ++ dac->dsp_settings.input_order = 2; ++ ++ file->private_data = dac; ++ dac->busy = 1; ++ ++ ret = 0; ++ ++out: ++ up(&dac->sem); ++ return ret; ++} ++ ++static int at32dac_dsp_release(struct inode *inode, struct file *file) ++{ ++ struct at32_dac *dac = file->private_data; ++ ++ down(&dac->sem); ++ ++ at32dac_stop(dac); ++ at32dac_dma_cleanup(dac); ++ dac->busy = 0; ++ ++ up(&dac->sem); ++ ++ return 0; ++} ++ ++static struct file_operations at32dac_dsp_fops = { ++ .owner = THIS_MODULE, ++ .llseek = no_llseek, ++ .write = at32dac_dsp_write, ++ .ioctl = at32dac_dsp_ioctl, ++ .open = at32dac_dsp_open, ++ .release = at32dac_dsp_release, ++}; ++ ++static int __devinit at32dac_probe(struct platform_device *pdev) ++{ ++ struct at32_dac *dac; ++ struct resource *regs; ++ struct clk *mck; ++ int irq; ++ int ret; ++ ++ if (the_dac) ++ return -EBUSY; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) ++ return -ENXIO; ++ irq = platform_get_irq(pdev, 0); ++ if (irq < 0) ++ return irq; ++ ++ mck = clk_get(&pdev->dev, "mck"); ++ if (IS_ERR(mck)) ++ return PTR_ERR(mck); ++ clk_enable(mck); ++ ++ ret = -ENOMEM; ++ dac = kzalloc(sizeof(struct at32_dac), GFP_KERNEL); ++ if (!dac) ++ goto out_disable_clk; ++ ++ spin_lock_init(&dac->lock); ++ init_MUTEX(&dac->sem); ++ init_waitqueue_head(&dac->write_wait); ++ dac->pdev = pdev; ++ dac->mck = mck; ++ ++ dac->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!dac->regs) ++ goto out_free_dac; ++ ++ ret = request_irq(irq, at32dac_interrupt, 0, "dac", dac); ++ if (ret) ++ goto out_unmap_regs; ++ ++ /* FIXME */ ++ dac->req.req.dmac = find_dma_controller(0); ++ if (!dac->req.req.dmac) ++ goto out_free_irq; ++ ++ ret = dma_alloc_channel(dac->req.req.dmac); ++ if (ret < 0) ++ goto out_free_irq; ++ ++ dac->req.req.channel = ret; ++ dac->req.req.block_complete = at32dac_dma_block_complete; ++ dac->req.req.error = at32dac_dma_error; ++ dac->req.data_reg = regs->start + DAC_DATA; ++ dac->req.periph_id = 2; /* FIXME */ ++ dac->req.direction = DMA_DIR_MEM_TO_PERIPH; ++ dac->req.width = DMA_WIDTH_32BIT; ++ ++ /* Make sure the DAC is silent and disabled */ ++ dac_writel(dac, DATA, 0); ++ dac_writel(dac, CTRL, 0); ++ ++ ret = register_sound_dsp(&at32dac_dsp_fops, -1); ++ if (ret < 0) ++ goto out_free_dma; ++ dac->dev_dsp = ret; ++ ++ /* TODO: Register mixer */ ++ ++ the_dac = dac; ++ platform_set_drvdata(pdev, dac); ++ ++ return 0; ++ ++out_free_dma: ++ dma_release_channel(dac->req.req.dmac, dac->req.req.channel); ++out_free_irq: ++ free_irq(irq, dac); ++out_unmap_regs: ++ iounmap(dac->regs); ++out_free_dac: ++ kfree(dac); ++out_disable_clk: ++ clk_disable(mck); ++ clk_put(mck); ++ return ret; ++} ++ ++static int __devexit at32dac_remove(struct platform_device *pdev) ++{ ++ struct at32_dac *dac; ++ ++ dac = platform_get_drvdata(pdev); ++ if (dac) { ++ unregister_sound_dsp(dac->dev_dsp); ++ dma_release_channel(dac->req.req.dmac, dac->req.req.channel); ++ free_irq(platform_get_irq(pdev, 0), dac); ++ iounmap(dac->regs); ++ clk_disable(dac->mck); ++ clk_put(dac->mck); ++ kfree(dac); ++ platform_set_drvdata(pdev, NULL); ++ the_dac = NULL; ++ } ++ ++ return 0; ++} ++ ++static struct platform_driver at32dac_driver = { ++ .probe = at32dac_probe, ++ .remove = __devexit_p(at32dac_remove), ++ .driver = { ++ .name = "dac", ++ }, ++}; ++ ++static int __init at32dac_init(void) ++{ ++ return platform_driver_register(&at32dac_driver); ++} ++module_init(at32dac_init); ++ ++static void __exit at32dac_exit(void) ++{ ++ platform_driver_unregister(&at32dac_driver); ++} ++module_exit(at32dac_exit); ++ ++MODULE_AUTHOR("Haavard Skinnemoen "); ++MODULE_DESCRIPTION("DMA Sound Driver for the Atmel AT32 on-chip DAC"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.18-avr32/sound/oss/at32dac.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/sound/oss/at32dac.h 2006-11-02 15:57:01.000000000 +0100 +@@ -0,0 +1,65 @@ ++/* ++ * Register definitions for the Atmel AT32 on-chip DAC. ++ * ++ * Copyright (C) 2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_DAC_H__ ++#define __ASM_AVR32_DAC_H__ ++ ++/* DAC register offsets */ ++#define DAC_DATA 0x0000 ++#define DAC_CTRL 0x0008 ++#define DAC_INT_MASK 0x000c ++#define DAC_INT_EN 0x0010 ++#define DAC_INT_DIS 0x0014 ++#define DAC_INT_CLR 0x0018 ++#define DAC_INT_STATUS 0x001c ++#define DAC_PDC_DATA 0x0020 ++ ++/* Bitfields in DATA */ ++#define DAC_DATA_OFFSET 0 ++#define DAC_DATA_SIZE 32 ++ ++/* Bitfields in CTRL */ ++#define DAC_SWAP_OFFSET 30 ++#define DAC_SWAP_SIZE 1 ++#define DAC_EN_OFFSET 31 ++#define DAC_EN_SIZE 1 ++ ++/* Bitfields in INT_MASK */ ++ ++/* Bitfields in INT_EN */ ++ ++/* Bitfields in INT_DIS */ ++#define DAC_TX_READY_OFFSET 29 ++#define DAC_TX_READY_SIZE 1 ++#define DAC_TX_BUFFER_EMPTY_OFFSET 30 ++#define DAC_TX_BUFFER_EMPTY_SIZE 1 ++#define DAC_CHANNEL_TX_END_OFFSET 31 ++#define DAC_CHANNEL_TX_END_SIZE 1 ++ ++/* Bitfields in INT_CLR */ ++#define DAC_UNDERRUN_OFFSET 28 ++#define DAC_UNDERRUN_SIZE 1 ++ ++/* Bitfields in INT_STATUS */ ++ ++/* Bitfields in PDC_DATA */ ++ ++/* Bit manipulation macros */ ++#define DAC_BIT(name) (1 << DAC_##name##_OFFSET) ++#define DAC_BF(name,value) (((value) & ((1 << DAC_##name##_SIZE) - 1)) << DAC_##name##_OFFSET) ++#define DAC_BFEXT(name,value) (((value) >> DAC_##name##_OFFSET) & ((1 << DAC_##name##_SIZE) - 1)) ++#define DAC_BFINS(name,value,old) (((old) & ~(((1 << DAC_##name##_SIZE) - 1) << DAC_##name##_OFFSET)) | DAC_BF(name,value)) ++ ++/* Register access macros */ ++#define dac_readl(port,reg) \ ++ __raw_readl((port)->regs + DAC_##reg) ++#define dac_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + DAC_##reg) ++ ++#endif /* __ASM_AVR32_DAC_H__ */ diff --git a/packages/linux/linux-2.6.18/at32ap7000-dmac-driver.patch b/packages/linux/linux-2.6.18/at32ap7000-dmac-driver.patch new file mode 100644 index 0000000000..dfe5f6abd5 --- /dev/null +++ b/packages/linux/linux-2.6.18/at32ap7000-dmac-driver.patch @@ -0,0 +1,855 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Hĺvard Skinnemoen +Date: Fri Dec 2 13:24:24 2005 +0100 +Subject: [PATCH] AVR32: DesignWare DMA Controller + +This patch adds a driver for the Synopsys DesignWare DMA Controller. + +--- + + arch/avr32/Kconfig | 4 + arch/avr32/Makefile | 1 + arch/avr32/drivers/Makefile | 1 + arch/avr32/drivers/dw-dmac.c | 754 +++++++++++++++++++++++++++++++++++++++++++ + arch/avr32/drivers/dw-dmac.h | 42 ++ + 5 files changed, 802 insertions(+) + +Index: linux-2.6.18-avr32/arch/avr32/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/Makefile 2006-11-02 14:17:29.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/Makefile 2006-11-02 15:53:13.000000000 +0100 +@@ -30,6 +30,7 @@ core-$(CONFIG_BOARD_ATSTK1000) += arch/ + core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ + core-y += arch/avr32/kernel/ + core-y += arch/avr32/mm/ ++drivers-y += arch/avr32/drivers/ + drivers-$(CONFIG_OPROFILE) += arch/avr32/oprofile/ + libs-y += arch/avr32/lib/ + +Index: linux-2.6.18-avr32/arch/avr32/drivers/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/drivers/Makefile 2006-11-02 14:17:29.000000000 +0100 +@@ -0,0 +1 @@ ++obj-$(CONFIG_DW_DMAC) += dw-dmac.o +Index: linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c 2006-11-02 15:55:35.000000000 +0100 +@@ -0,0 +1,754 @@ ++/* ++ * Driver for the Synopsys DesignWare DMA Controller ++ * ++ * Copyright (C) 2005-2006 Atmel 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 "dw-dmac.h" ++ ++#define DMAC_NR_CHANNELS 3 ++#define DMAC_MAX_BLOCKSIZE 4095 ++ ++enum { ++ CH_STATE_FREE = 0, ++ CH_STATE_ALLOCATED, ++ CH_STATE_BUSY, ++}; ++ ++struct dw_dma_lli { ++ dma_addr_t sar; ++ dma_addr_t dar; ++ dma_addr_t llp; ++ u32 ctllo; ++ u32 ctlhi; ++ u32 sstat; ++ u32 dstat; ++}; ++ ++struct dw_dma_block { ++ struct dw_dma_lli *lli_vaddr; ++ dma_addr_t lli_dma_addr; ++}; ++ ++struct dw_dma_channel { ++ unsigned int state; ++ int is_cyclic; ++ struct dma_request_sg *req_sg; ++ struct dma_request_cyclic *req_cyclic; ++ unsigned int nr_blocks; ++ int direction; ++ struct dw_dma_block *block; ++}; ++ ++struct dw_dma_controller { ++ spinlock_t lock; ++ void * __iomem regs; ++ struct dma_pool *lli_pool; ++ struct clk *hclk; ++ struct dma_controller dma; ++ struct dw_dma_channel channel[DMAC_NR_CHANNELS]; ++}; ++#define to_dw_dmac(dmac) container_of(dmac, struct dw_dma_controller, dma) ++ ++#define dmac_writel_hi(dmac, reg, value) \ ++ __raw_writel((value), (dmac)->regs + DW_DMAC_##reg + 4) ++#define dmac_readl_hi(dmac, reg) \ ++ __raw_readl((dmac)->regs + DW_DMAC_##reg + 4) ++#define dmac_writel_lo(dmac, reg, value) \ ++ __raw_writel((value), (dmac)->regs + DW_DMAC_##reg) ++#define dmac_readl_lo(dmac, reg) \ ++ __raw_readl((dmac)->regs + DW_DMAC_##reg) ++#define dmac_chan_writel_hi(dmac, chan, reg, value) \ ++ __raw_writel((value), ((dmac)->regs + 0x58 * (chan) \ ++ + DW_DMAC_CHAN_##reg + 4)) ++#define dmac_chan_readl_hi(dmac, chan, reg) \ ++ __raw_readl((dmac)->regs + 0x58 * (chan) + DW_DMAC_CHAN_##reg + 4) ++#define dmac_chan_writel_lo(dmac, chan, reg, value) \ ++ __raw_writel((value), (dmac)->regs + 0x58 * (chan) + DW_DMAC_CHAN_##reg) ++#define dmac_chan_readl_lo(dmac, chan, reg) \ ++ __raw_readl((dmac)->regs + 0x58 * (chan) + DW_DMAC_CHAN_##reg) ++#define set_channel_bit(dmac, reg, chan) \ ++ dmac_writel_lo(dmac, reg, (1 << (chan)) | (1 << ((chan) + 8))) ++#define clear_channel_bit(dmac, reg, chan) \ ++ dmac_writel_lo(dmac, reg, (0 << (chan)) | (1 << ((chan) + 8))) ++ ++static int dmac_alloc_channel(struct dma_controller *_dmac) ++{ ++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac); ++ struct dw_dma_channel *chan; ++ unsigned long flags; ++ int i; ++ ++ spin_lock_irqsave(&dmac->lock, flags); ++ for (i = 0; i < DMAC_NR_CHANNELS; i++) ++ if (dmac->channel[i].state == CH_STATE_FREE) ++ break; ++ ++ if (i < DMAC_NR_CHANNELS) { ++ chan = &dmac->channel[i]; ++ chan->state = CH_STATE_ALLOCATED; ++ } else { ++ i = -EBUSY; ++ } ++ ++ spin_unlock_irqrestore(&dmac->lock, flags); ++ ++ return i; ++} ++ ++static void dmac_release_channel(struct dma_controller *_dmac, int channel) ++{ ++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac); ++ ++ BUG_ON(channel >= DMAC_NR_CHANNELS ++ || dmac->channel[channel].state != CH_STATE_ALLOCATED); ++ ++ dmac->channel[channel].state = CH_STATE_FREE; ++} ++ ++static struct dw_dma_block *allocate_blocks(struct dw_dma_controller *dmac, ++ unsigned int nr_blocks) ++{ ++ struct dw_dma_block *block; ++ void *p; ++ unsigned int i; ++ ++ block = kmalloc(nr_blocks * sizeof(*block), ++ GFP_KERNEL); ++ if (unlikely(!block)) ++ return NULL; ++ ++ for (i = 0; i < nr_blocks; i++) { ++ p = dma_pool_alloc(dmac->lli_pool, GFP_KERNEL, ++ &block[i].lli_dma_addr); ++ block[i].lli_vaddr = p; ++ if (unlikely(!p)) ++ goto fail; ++ } ++ ++ return block; ++ ++fail: ++ for (i = 0; i < nr_blocks; i++) { ++ if (!block[i].lli_vaddr) ++ break; ++ dma_pool_free(dmac->lli_pool, block[i].lli_vaddr, ++ block[i].lli_dma_addr); ++ } ++ kfree(block); ++ return NULL; ++} ++ ++static int dmac_prepare_request_sg(struct dma_controller *_dmac, ++ struct dma_request_sg *req) ++{ ++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac); ++ struct dw_dma_channel *chan; ++ unsigned long ctlhi, ctllo, cfghi, cfglo; ++ unsigned long block_size; ++ int ret, i, nr_blocks, direction; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&dmac->lock, flags); ++ ++ ret = -EINVAL; ++ if (req->req.channel >= DMAC_NR_CHANNELS ++ || dmac->channel[req->req.channel].state != CH_STATE_ALLOCATED ++ || req->block_size > DMAC_MAX_BLOCKSIZE) { ++ spin_unlock_irqrestore(&dmac->lock, flags); ++ return -EINVAL; ++ } ++ ++ chan = &dmac->channel[req->req.channel]; ++ chan->state = CH_STATE_BUSY; ++ chan->req_sg = req; ++ chan->is_cyclic = 0; ++ ++ /* ++ * We have marked the channel as busy, so no need to keep the ++ * lock as long as we only touch the channel-specific ++ * registers ++ */ ++ spin_unlock_irqrestore(&dmac->lock, flags); ++ ++ /* ++ * There may be limitations in the driver and/or the DMA ++ * controller that prevents us from sending a whole ++ * scatterlist item in one go. Taking this into account, ++ * calculate the number of block transfers we need to set up. ++ * ++ * FIXME: Let the peripheral driver know about the maximum ++ * block size we support. We really don't want to use a ++ * different block size than what was suggested by the ++ * peripheral. ++ * ++ * Each block will get its own Linked List Item (LLI) below. ++ */ ++ block_size = req->block_size; ++ pr_debug("block_size = %lu, nr_sg = %u\n", block_size, req->nr_sg); ++ for (i = 0, nr_blocks = 0; i < req->nr_sg; i++) { ++ pr_debug("sg[i].length = %u\n", req->sg[i].length); ++ BUG_ON(req->sg[i].length % block_size); ++ nr_blocks += req->sg[i].length / block_size; ++ } ++ ++ BUG_ON(nr_blocks == 0); ++ chan->nr_blocks = nr_blocks; ++ ++ ret = -EINVAL; ++ cfglo = cfghi = 0; ++ switch (req->direction) { ++ case DMA_DIR_MEM_TO_PERIPH: ++ direction = DMA_TO_DEVICE; ++ cfghi = req->periph_id << (43 - 32); ++ break; ++ ++ case DMA_DIR_PERIPH_TO_MEM: ++ direction = DMA_FROM_DEVICE; ++ cfghi = req->periph_id << (39 - 32); ++ break; ++ default: ++ goto out_unclaim_channel; ++ } ++ ++ chan->direction = direction; ++ ++ dmac_chan_writel_hi(dmac, req->req.channel, CFG, cfghi); ++ dmac_chan_writel_lo(dmac, req->req.channel, CFG, cfglo); ++ ++ ctlhi = block_size >> req->width; ++ ctllo = ((req->direction << 20) ++ // | (1 << 14) | (1 << 11) // source/dest burst trans len ++ | (req->width << 4) | (req->width << 1) ++ | (1 << 0)); // interrupt enable ++ ++ if (nr_blocks == 1) { ++ /* Only one block: No need to use block chaining */ ++ if (direction == DMA_TO_DEVICE) { ++ dmac_chan_writel_lo(dmac, req->req.channel, SAR, ++ req->sg->dma_address); ++ dmac_chan_writel_lo(dmac, req->req.channel, DAR, ++ req->data_reg); ++ ctllo |= 2 << 7; // no dst increment ++ } else { ++ dmac_chan_writel_lo(dmac, req->req.channel, SAR, ++ req->data_reg); ++ dmac_chan_writel_lo(dmac, req->req.channel, DAR, ++ req->sg->dma_address); ++ ctllo |= 2 << 9; // no src increment ++ } ++ dmac_chan_writel_lo(dmac, req->req.channel, CTL, ctllo); ++ dmac_chan_writel_hi(dmac, req->req.channel, CTL, ctlhi); ++ } else { ++ struct dw_dma_lli *lli, *lli_prev = NULL; ++ int j = 0, offset = 0; ++ ++ ret = -ENOMEM; ++ chan->block = allocate_blocks(dmac, nr_blocks); ++ if (!chan->block) ++ goto out_unclaim_channel; ++ ++ if (direction == DMA_TO_DEVICE) ++ ctllo |= 1 << 28 | 1 << 27 | 2 << 7; ++ else ++ ctllo |= 1 << 28 | 1 << 27 | 2 << 9; ++ ++ /* ++ * Map scatterlist items to blocks. One scatterlist ++ * item may need more than one block for the reasons ++ * mentioned above. ++ */ ++ for (i = 0; i < nr_blocks; i++) { ++ lli = chan->block[i].lli_vaddr; ++ if (lli_prev) { ++ lli_prev->llp = chan->block[i].lli_dma_addr; ++ pr_debug("lli[%d] (0x%p/0x%x): 0x%x 0x%x 0x%x 0x%x 0x%x\n", ++ i - 1, chan->block[i - 1].lli_vaddr, ++ chan->block[i - 1].lli_dma_addr, ++ lli_prev->sar, lli_prev->dar, lli_prev->llp, ++ lli_prev->ctllo, lli_prev->ctlhi); ++ } ++ lli->llp = 0; ++ lli->ctllo = ctllo; ++ lli->ctlhi = ctlhi; ++ if (direction == DMA_TO_DEVICE) { ++ lli->sar = req->sg[j].dma_address + offset; ++ lli->dar = req->data_reg; ++ } else { ++ lli->sar = req->data_reg; ++ lli->dar = req->sg[j].dma_address + offset; ++ } ++ lli_prev = lli; ++ ++ offset += block_size; ++ if (offset > req->sg[j].length) { ++ j++; ++ offset = 0; ++ } ++ } ++ ++ pr_debug("lli[%d] (0x%p/0x%x): 0x%x 0x%x 0x%x 0x%x 0x%x\n", ++ i - 1, chan->block[i - 1].lli_vaddr, ++ chan->block[i - 1].lli_dma_addr, lli_prev->sar, ++ lli_prev->dar, lli_prev->llp, ++ lli_prev->ctllo, lli_prev->ctlhi); ++ ++ /* ++ * SAR, DAR and CTL are initialized from the LLI. We ++ * only have to enable the LLI bits in CTL. ++ */ ++ dmac_chan_writel_lo(dmac, req->req.channel, LLP, ++ chan->block[0].lli_dma_addr); ++ dmac_chan_writel_lo(dmac, req->req.channel, CTL, 1 << 28 | 1 << 27); ++ } ++ ++ set_channel_bit(dmac, MASK_XFER, req->req.channel); ++ set_channel_bit(dmac, MASK_ERROR, req->req.channel); ++ if (req->req.block_complete) ++ set_channel_bit(dmac, MASK_BLOCK, req->req.channel); ++ else ++ clear_channel_bit(dmac, MASK_BLOCK, req->req.channel); ++ ++ return 0; ++ ++out_unclaim_channel: ++ chan->state = CH_STATE_ALLOCATED; ++ return ret; ++} ++ ++static int dmac_prepare_request_cyclic(struct dma_controller *_dmac, ++ struct dma_request_cyclic *req) ++{ ++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac); ++ struct dw_dma_channel *chan; ++ unsigned long ctlhi, ctllo, cfghi, cfglo; ++ unsigned long block_size; ++ int ret, i, direction; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&dmac->lock, flags); ++ ++ block_size = (req->buffer_size/req->periods) >> req->width; ++ ++ ret = -EINVAL; ++ if (req->req.channel >= DMAC_NR_CHANNELS ++ || dmac->channel[req->req.channel].state != CH_STATE_ALLOCATED ++ || (req->periods == 0) ++ || block_size > DMAC_MAX_BLOCKSIZE) { ++ spin_unlock_irqrestore(&dmac->lock, flags); ++ return -EINVAL; ++ } ++ ++ chan = &dmac->channel[req->req.channel]; ++ chan->state = CH_STATE_BUSY; ++ chan->is_cyclic = 1; ++ chan->req_cyclic = req; ++ ++ /* ++ * We have marked the channel as busy, so no need to keep the ++ * lock as long as we only touch the channel-specific ++ * registers ++ */ ++ spin_unlock_irqrestore(&dmac->lock, flags); ++ ++ /* ++ Setup ++ */ ++ BUG_ON(req->buffer_size % req->periods); ++ /* printk(KERN_INFO "block_size = %lu, periods = %u\n", block_size, req->periods); */ ++ ++ chan->nr_blocks = req->periods; ++ ++ ret = -EINVAL; ++ cfglo = cfghi = 0; ++ switch (req->direction) { ++ case DMA_DIR_MEM_TO_PERIPH: ++ direction = DMA_TO_DEVICE; ++ cfghi = req->periph_id << (43 - 32); ++ break; ++ ++ case DMA_DIR_PERIPH_TO_MEM: ++ direction = DMA_FROM_DEVICE; ++ cfghi = req->periph_id << (39 - 32); ++ break; ++ default: ++ goto out_unclaim_channel; ++ } ++ ++ chan->direction = direction; ++ ++ dmac_chan_writel_hi(dmac, req->req.channel, CFG, cfghi); ++ dmac_chan_writel_lo(dmac, req->req.channel, CFG, cfglo); ++ ++ ctlhi = block_size; ++ ctllo = ((req->direction << 20) ++ | (req->width << 4) | (req->width << 1) ++ | (1 << 0)); // interrupt enable ++ ++ { ++ struct dw_dma_lli *lli = NULL, *lli_prev = NULL; ++ ++ ret = -ENOMEM; ++ chan->block = allocate_blocks(dmac, req->periods); ++ if (!chan->block) ++ goto out_unclaim_channel; ++ ++ if (direction == DMA_TO_DEVICE) ++ ctllo |= 1 << 28 | 1 << 27 | 2 << 7; ++ else ++ ctllo |= 1 << 28 | 1 << 27 | 2 << 9; ++ ++ /* ++ * Set up a linked list items where each period gets ++ * an item. The linked list item for the last period ++ * points back to the star of the buffer making a ++ * cyclic buffer. ++ */ ++ for (i = 0; i < req->periods; i++) { ++ lli = chan->block[i].lli_vaddr; ++ if (lli_prev) { ++ lli_prev->llp = chan->block[i].lli_dma_addr; ++ /* printk(KERN_INFO "lli[%d] (0x%p/0x%x): 0x%x 0x%x 0x%x 0x%x 0x%x\n", ++ i - 1, chan->block[i - 1].lli_vaddr, ++ chan->block[i - 1].lli_dma_addr, ++ lli_prev->sar, lli_prev->dar, lli_prev->llp, ++ lli_prev->ctllo, lli_prev->ctlhi);*/ ++ } ++ lli->llp = 0; ++ lli->ctllo = ctllo; ++ lli->ctlhi = ctlhi; ++ if (direction == DMA_TO_DEVICE) { ++ lli->sar = req->buffer_start + i*(block_size << req->width); ++ lli->dar = req->data_reg; ++ } else { ++ lli->sar = req->data_reg; ++ lli->dar = req->buffer_start + i*(block_size << req->width); ++ } ++ lli_prev = lli; ++ } ++ lli->llp = chan->block[0].lli_dma_addr; ++ ++ /*printk(KERN_INFO "lli[%d] (0x%p/0x%x): 0x%x 0x%x 0x%x 0x%x 0x%x\n", ++ i - 1, chan->block[i - 1].lli_vaddr, ++ chan->block[i - 1].lli_dma_addr, lli_prev->sar, ++ lli_prev->dar, lli_prev->llp, ++ lli_prev->ctllo, lli_prev->ctlhi); */ ++ ++ /* ++ * SAR, DAR and CTL are initialized from the LLI. We ++ * only have to enable the LLI bits in CTL. ++ */ ++ dmac_chan_writel_lo(dmac, req->req.channel, LLP, ++ chan->block[0].lli_dma_addr); ++ dmac_chan_writel_lo(dmac, req->req.channel, CTL, 1 << 28 | 1 << 27); ++ } ++ ++ clear_channel_bit(dmac, MASK_XFER, req->req.channel); ++ set_channel_bit(dmac, MASK_ERROR, req->req.channel); ++ if (req->req.block_complete) ++ set_channel_bit(dmac, MASK_BLOCK, req->req.channel); ++ else ++ clear_channel_bit(dmac, MASK_BLOCK, req->req.channel); ++ ++ return 0; ++ ++out_unclaim_channel: ++ chan->state = CH_STATE_ALLOCATED; ++ return ret; ++} ++ ++static int dmac_start_request(struct dma_controller *_dmac, ++ unsigned int channel) ++{ ++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac); ++ ++ BUG_ON(channel >= DMAC_NR_CHANNELS); ++ ++ set_channel_bit(dmac, CH_EN, channel); ++ ++ return 0; ++} ++ ++static dma_addr_t dmac_get_current_pos(struct dma_controller *_dmac, ++ unsigned int channel) ++{ ++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac); ++ struct dw_dma_channel *chan; ++ dma_addr_t current_pos; ++ ++ BUG_ON(channel >= DMAC_NR_CHANNELS); ++ ++ chan = &dmac->channel[channel]; ++ ++ switch (chan->direction) { ++ case DMA_TO_DEVICE: ++ current_pos = dmac_chan_readl_lo(dmac, channel, SAR); ++ break; ++ case DMA_FROM_DEVICE: ++ current_pos = dmac_chan_readl_lo(dmac, channel, DAR); ++ break; ++ default: ++ return 0; ++ } ++ ++ ++ if (!current_pos) { ++ if (chan->is_cyclic) { ++ current_pos = chan->req_cyclic->buffer_start; ++ } else { ++ current_pos = chan->req_sg->sg->dma_address; ++ } ++ } ++ ++ return current_pos; ++} ++ ++ ++static void cleanup_channel(struct dw_dma_controller *dmac, ++ struct dw_dma_channel *chan) ++{ ++ unsigned int i; ++ ++ if (chan->nr_blocks > 1) { ++ for (i = 0; i < chan->nr_blocks; i++) ++ dma_pool_free(dmac->lli_pool, chan->block[i].lli_vaddr, ++ chan->block[i].lli_dma_addr); ++ kfree(chan->block); ++ } ++ ++ chan->state = CH_STATE_ALLOCATED; ++} ++ ++static int dmac_stop_request(struct dma_controller *_dmac, ++ unsigned int channel) ++{ ++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac); ++ ++ BUG_ON(channel >= DMAC_NR_CHANNELS); ++ ++ BUG_ON(dmac->channel[channel].state != CH_STATE_BUSY); ++ ++ clear_channel_bit(dmac, CH_EN, channel); ++ ++ cleanup_channel(dmac, &dmac->channel[channel]); ++ ++ return 0; ++} ++ ++ ++static void dmac_block_complete(struct dw_dma_controller *dmac) ++{ ++ struct dw_dma_channel *chan; ++ unsigned long status, chanid; ++ ++ status = dmac_readl_lo(dmac, STATUS_BLOCK); ++ ++ while (status) { ++ struct dma_request *req; ++ chanid = __ffs(status); ++ chan = &dmac->channel[chanid]; ++ ++ if (chan->is_cyclic) { ++ BUG_ON(!chan->req_cyclic ++ || !chan->req_cyclic->req.block_complete); ++ req = &chan->req_cyclic->req; ++ } else { ++ BUG_ON(!chan->req_sg || !chan->req_sg->req.block_complete); ++ req = &chan->req_sg->req; ++ } ++ dmac_writel_lo(dmac, CLEAR_BLOCK, 1 << chanid); ++ req->block_complete(req); ++ status = dmac_readl_lo(dmac, STATUS_BLOCK); ++ } ++} ++ ++static void dmac_xfer_complete(struct dw_dma_controller *dmac) ++{ ++ struct dw_dma_channel *chan; ++ struct dma_request *req; ++ unsigned long status, chanid; ++ ++ status = dmac_readl_lo(dmac, STATUS_XFER); ++ ++ while (status) { ++ chanid = __ffs(status); ++ chan = &dmac->channel[chanid]; ++ ++ dmac_writel_lo(dmac, CLEAR_XFER, 1 << chanid); ++ ++ req = &chan->req_sg->req; ++ BUG_ON(!req); ++ cleanup_channel(dmac, chan); ++ if (req->xfer_complete) ++ req->xfer_complete(req); ++ ++ status = dmac_readl_lo(dmac, STATUS_XFER); ++ } ++} ++ ++static void dmac_error(struct dw_dma_controller *dmac) ++{ ++ struct dw_dma_channel *chan; ++ unsigned long status, chanid; ++ ++ status = dmac_readl_lo(dmac, STATUS_ERROR); ++ ++ while (status) { ++ struct dma_request *req; ++ ++ chanid = __ffs(status); ++ chan = &dmac->channel[chanid]; ++ ++ dmac_writel_lo(dmac, CLEAR_ERROR, 1 << chanid); ++ clear_channel_bit(dmac, CH_EN, chanid); ++ ++ if (chan->is_cyclic) { ++ BUG_ON(!chan->req_cyclic); ++ req = &chan->req_cyclic->req; ++ } else { ++ BUG_ON(!chan->req_sg); ++ req = &chan->req_sg->req; ++ } ++ ++ cleanup_channel(dmac, chan); ++ if (req->error) ++ req->error(req); ++ ++ status = dmac_readl_lo(dmac, STATUS_XFER); ++ } ++} ++ ++static irqreturn_t dmac_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ struct dw_dma_controller *dmac = dev_id; ++ unsigned long status; ++ int ret = IRQ_NONE; ++ ++ spin_lock(&dmac->lock); ++ ++ status = dmac_readl_lo(dmac, STATUS_INT); ++ ++ while (status) { ++ ret = IRQ_HANDLED; ++ if (status & 0x10) ++ dmac_error(dmac); ++ if (status & 0x02) ++ dmac_block_complete(dmac); ++ if (status & 0x01) ++ dmac_xfer_complete(dmac); ++ ++ status = dmac_readl_lo(dmac, STATUS_INT); ++ } ++ ++ spin_unlock(&dmac->lock); ++ return ret; ++} ++ ++static int __devinit dmac_probe(struct platform_device *pdev) ++{ ++ struct dw_dma_controller *dmac; ++ struct resource *regs; ++ int ret; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) ++ return -ENXIO; ++ ++ dmac = kmalloc(sizeof(*dmac), GFP_KERNEL); ++ if (!dmac) ++ return -ENOMEM; ++ memset(dmac, 0, sizeof(*dmac)); ++ ++ dmac->hclk = clk_get(&pdev->dev, "hclk"); ++ if (IS_ERR(dmac->hclk)) { ++ ret = PTR_ERR(dmac->hclk); ++ goto out_free_dmac; ++ } ++ clk_enable(dmac->hclk); ++ ++ ret = -ENOMEM; ++ dmac->lli_pool = dma_pool_create("dmac", &pdev->dev, ++ sizeof(struct dw_dma_lli), 4, 0); ++ if (!dmac->lli_pool) ++ goto out_disable_clk; ++ ++ spin_lock_init(&dmac->lock); ++ dmac->dma.dev = &pdev->dev; ++ dmac->dma.alloc_channel = dmac_alloc_channel; ++ dmac->dma.release_channel = dmac_release_channel; ++ dmac->dma.prepare_request_sg = dmac_prepare_request_sg; ++ dmac->dma.prepare_request_cyclic = dmac_prepare_request_cyclic; ++ dmac->dma.start_request = dmac_start_request; ++ dmac->dma.stop_request = dmac_stop_request; ++ dmac->dma.get_current_pos = dmac_get_current_pos; ++ ++ dmac->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!dmac->regs) ++ goto out_free_pool; ++ ++ ret = request_irq(platform_get_irq(pdev, 0), dmac_interrupt, ++ SA_SAMPLE_RANDOM, pdev->name, dmac); ++ if (ret) ++ goto out_unmap_regs; ++ ++ /* Enable the DMA controller */ ++ dmac_writel_lo(dmac, CFG, 1); ++ ++ register_dma_controller(&dmac->dma); ++ ++ printk(KERN_INFO ++ "dmac%d: DesignWare DMA controller at 0x%p irq %d\n", ++ dmac->dma.id, dmac->regs, platform_get_irq(pdev, 0)); ++ ++ return 0; ++ ++out_unmap_regs: ++ iounmap(dmac->regs); ++out_free_pool: ++ dma_pool_destroy(dmac->lli_pool); ++out_disable_clk: ++ clk_disable(dmac->hclk); ++ clk_put(dmac->hclk); ++out_free_dmac: ++ kfree(dmac); ++ return ret; ++} ++ ++static struct platform_driver dmac_driver = { ++ .probe = dmac_probe, ++ .driver = { ++ .name = "dmac", ++ }, ++}; ++ ++static int __init dmac_init(void) ++{ ++ return platform_driver_register(&dmac_driver); ++} ++subsys_initcall(dmac_init); ++ ++static void __exit dmac_exit(void) ++{ ++ platform_driver_unregister(&dmac_driver); ++} ++module_exit(dmac_exit); ++ ++MODULE_DESCRIPTION("Synopsys DesignWare DMA Controller driver"); ++MODULE_AUTHOR("Haavard Skinnemoen "); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.h 2006-11-02 14:17:29.000000000 +0100 +@@ -0,0 +1,42 @@ ++/* ++ * Driver for the Synopsys DesignWare DMA Controller ++ * ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++#ifndef __AVR32_DW_DMAC_H__ ++#define __AVR32_DW_DMAC_H__ ++ ++#define DW_DMAC_CFG 0x398 ++#define DW_DMAC_CH_EN 0x3a0 ++ ++#define DW_DMAC_STATUS_XFER 0x2e8 ++#define DW_DMAC_STATUS_BLOCK 0x2f0 ++#define DW_DMAC_STATUS_ERROR 0x308 ++ ++#define DW_DMAC_MASK_XFER 0x310 ++#define DW_DMAC_MASK_BLOCK 0x318 ++#define DW_DMAC_MASK_ERROR 0x330 ++ ++#define DW_DMAC_CLEAR_XFER 0x338 ++#define DW_DMAC_CLEAR_BLOCK 0x340 ++#define DW_DMAC_CLEAR_ERROR 0x358 ++ ++#define DW_DMAC_STATUS_INT 0x360 ++ ++#define DW_DMAC_CHAN_SAR 0x000 ++#define DW_DMAC_CHAN_DAR 0x008 ++#define DW_DMAC_CHAN_LLP 0x010 ++#define DW_DMAC_CHAN_CTL 0x018 ++#define DW_DMAC_CHAN_SSTAT 0x020 ++#define DW_DMAC_CHAN_DSTAT 0x028 ++#define DW_DMAC_CHAN_SSTATAR 0x030 ++#define DW_DMAC_CHAN_DSTATAR 0x038 ++#define DW_DMAC_CHAN_CFG 0x040 ++#define DW_DMAC_CHAN_SGR 0x048 ++#define DW_DMAC_CHAN_DSR 0x050 ++ ++#endif /* __AVR32_DW_DMAC_H__ */ +Index: linux-2.6.18-avr32/arch/avr32/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/Kconfig 2006-11-02 14:17:29.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/Kconfig 2006-11-02 15:53:13.000000000 +0100 +@@ -157,6 +157,10 @@ config OWNERSHIP_TRACE + enabling Nexus-compliant debuggers to keep track of the PID of the + currently executing task. + ++config DW_DMAC ++ tristate "Synopsys DesignWare DMA Controller support" ++ default y if CPU_AT32AP7000 ++ + # FPU emulation goes here + + source "kernel/Kconfig.hz" diff --git a/packages/linux/linux-2.6.18/at32ap7000-platform_device-definitions.patch b/packages/linux/linux-2.6.18/at32ap7000-platform_device-definitions.patch new file mode 100644 index 0000000000..6f1e98a70c --- /dev/null +++ b/packages/linux/linux-2.6.18/at32ap7000-platform_device-definitions.patch @@ -0,0 +1,445 @@ +--- + arch/avr32/mach-at32ap/at32ap7000.c | 325 ++++++++++++++++++++++++++++++++-- + include/asm-avr32/arch-at32ap/board.h | 6 + 2 files changed, 313 insertions(+), 18 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-29 16:31:03.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-29 16:44:49.000000000 +0100 +@@ -9,6 +9,8 @@ + #include + #include + ++#include ++ + #include + + #include +@@ -464,6 +466,17 @@ static struct clk pico_clk = { + .users = 1, + }; + ++static struct resource dmac0_resource[] = { ++ { ++ .start = 0xff200000, ++ .end = 0xff20ffff, ++ .flags = IORESOURCE_MEM, ++ }, ++ IRQ(2), ++}; ++DEFINE_DEV(dmac, 0); ++DEV_CLK(hclk, dmac0, hsb, 10); ++ + /* -------------------------------------------------------------------- + * PIO + * -------------------------------------------------------------------- */ +@@ -504,6 +517,7 @@ void __init at32_add_system_devices(void + platform_device_register(&at32_intc0_device); + platform_device_register(&smc0_device); + platform_device_register(&pdc_device); ++ platform_device_register(&dmac0_device); + + platform_device_register(&pio0_device); + platform_device_register(&pio1_device); +@@ -644,6 +658,15 @@ DEFINE_DEV_DATA(macb, 0); + DEV_CLK(hclk, macb0, hsb, 8); + DEV_CLK(pclk, macb0, pbb, 6); + ++static struct eth_platform_data macb1_data; ++static struct resource macb1_resource[] = { ++ PBMEM(0xfff01c00), ++ IRQ(26), ++}; ++DEFINE_DEV_DATA(macb, 1); ++DEV_CLK(hclk, macb1, hsb, 9); ++DEV_CLK(pclk, macb1, pbb, 7); ++ + struct platform_device *__init + at32_add_device_eth(unsigned int id, struct eth_platform_data *data) + { +@@ -677,6 +700,33 @@ at32_add_device_eth(unsigned int id, str + } + break; + ++ case 1: ++ pdev = &macb1_device; ++ ++ select_peripheral(PD(13), PERIPH_B, 0); /* TXD0 */ ++ select_peripheral(PD(14), PERIPH_B, 0); /* TXD1 */ ++ select_peripheral(PD(11), PERIPH_B, 0); /* TXEN */ ++ select_peripheral(PD(12), PERIPH_B, 0); /* TXCK */ ++ select_peripheral(PD(10), PERIPH_B, 0); /* RXD0 */ ++ select_peripheral(PD(6), PERIPH_B, 0); /* RXD1 */ ++ select_peripheral(PD(5), PERIPH_B, 0); /* RXER */ ++ select_peripheral(PD(4), PERIPH_B, 0); /* RXDV */ ++ select_peripheral(PD(3), PERIPH_B, 0); /* MDC */ ++ select_peripheral(PD(2), PERIPH_B, 0); /* MDIO */ ++ ++ if (!data->is_rmii) { ++ select_peripheral(PC(19), PERIPH_B, 0); /* COL */ ++ select_peripheral(PC(23), PERIPH_B, 0); /* CRS */ ++ select_peripheral(PC(26), PERIPH_B, 0); /* TXER */ ++ select_peripheral(PC(27), PERIPH_B, 0); /* TXD2 */ ++ select_peripheral(PC(28), PERIPH_B, 0); /* TXD3 */ ++ select_peripheral(PC(29), PERIPH_B, 0); /* RXD2 */ ++ select_peripheral(PC(30), PERIPH_B, 0); /* RXD3 */ ++ select_peripheral(PC(24), PERIPH_B, 0); /* RXCK */ ++ select_peripheral(PD(15), PERIPH_B, 0); /* SPD */ ++ } ++ break; ++ + default: + return NULL; + } +@@ -688,14 +738,53 @@ at32_add_device_eth(unsigned int id, str + } + + /* -------------------------------------------------------------------- ++ * MMC ++ * -------------------------------------------------------------------- */ ++static struct resource mmci0_resource[] = { ++ PBMEM(0xfff02400), ++ IRQ(28), ++}; ++DEFINE_DEV(mmci, 0); ++DEV_CLK(mck, mmci0, pbb, 9); ++ ++struct platform_device *__init at32_add_device_mmci(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &mmci0_device; ++ select_peripheral(PA(10), PERIPH_A, 0); /* CLK */ ++ select_peripheral(PA(11), PERIPH_A, 0); /* CMD */ ++ select_peripheral(PA(12), PERIPH_A, 0); /* DATA0 */ ++ select_peripheral(PA(13), PERIPH_A, 0); /* DATA1 */ ++ select_peripheral(PA(14), PERIPH_A, 0); /* DATA2 */ ++ select_peripheral(PA(15), PERIPH_A, 0); /* DATA3 */ ++ break; ++ default: ++ return NULL; ++ } ++ ++ platform_device_register(pdev); ++ return pdev; ++} ++ ++/* -------------------------------------------------------------------- + * SPI + * -------------------------------------------------------------------- */ +-static struct resource spi0_resource[] = { ++static struct resource atmel_spi0_resource[] = { + PBMEM(0xffe00000), + IRQ(3), + }; +-DEFINE_DEV(spi, 0); +-DEV_CLK(mck, spi0, pba, 0); ++DEFINE_DEV(atmel_spi, 0); ++DEV_CLK(pclk, atmel_spi0, pba, 0); ++ ++static struct resource atmel_spi1_resource[] = { ++ PBMEM(0xffe00400), ++ IRQ(4), ++}; ++DEFINE_DEV(atmel_spi, 1); ++DEV_CLK(pclk, atmel_spi1, pba, 1); + + struct platform_device *__init at32_add_device_spi(unsigned int id) + { +@@ -703,13 +792,96 @@ struct platform_device *__init at32_add_ + + switch (id) { + case 0: +- pdev = &spi0_device; ++ pdev = &atmel_spi0_device; + select_peripheral(PA(0), PERIPH_A, 0); /* MISO */ + select_peripheral(PA(1), PERIPH_A, 0); /* MOSI */ + select_peripheral(PA(2), PERIPH_A, 0); /* SCK */ +- select_peripheral(PA(3), PERIPH_A, 0); /* NPCS0 */ +- select_peripheral(PA(4), PERIPH_A, 0); /* NPCS1 */ +- select_peripheral(PA(5), PERIPH_A, 0); /* NPCS2 */ ++ ++ /* NPCS[2:0] */ ++ at32_select_gpio(GPIO_PIN_PA(3), ++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); ++ at32_select_gpio(GPIO_PIN_PA(4), ++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); ++ at32_select_gpio(GPIO_PIN_PA(5), ++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); ++ break; ++ ++ case 1: ++ pdev = &atmel_spi1_device; ++ select_peripheral(PB(0), PERIPH_B, 0); /* MISO */ ++ select_peripheral(PB(1), PERIPH_B, 0); /* MOSI */ ++ select_peripheral(PB(5), PERIPH_B, 0); /* SCK */ ++ ++ /* NPCS[2:0] */ ++ at32_select_gpio(GPIO_PIN_PA(2), ++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); ++ at32_select_gpio(GPIO_PIN_PA(3), ++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); ++ at32_select_gpio(GPIO_PIN_PA(4), ++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); ++ ++ default: ++ return NULL; ++ } ++ ++ platform_device_register(pdev); ++ return pdev; ++} ++ ++/* -------------------------------------------------------------------- ++ * USB Device Controller ++ * -------------------------------------------------------------------- */ ++static struct resource usb0_resource[] = { ++ { ++ .start = 0xff300000, ++ .end = 0xff3fffff, ++ .flags = IORESOURCE_MEM, ++ }, ++ PBMEM(0xfff03000), ++ IRQ(31), ++}; ++DEFINE_DEV(usb, 0); ++DEV_CLK(pclk, usb0, pbb, 12); ++DEV_CLK(hclk, usb0, hsb, 6); ++ ++struct platform_device *__init at32_add_device_usb(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &usb0_device; ++ /* USB pads are not multiplexed */ ++ break; ++ default: ++ return NULL; ++ } ++ ++ platform_device_register(pdev); ++ return pdev; ++} ++ ++/* -------------------------------------------------------------------- ++ * TWI ++ * -------------------------------------------------------------------- */ ++ ++static struct resource atmel_twi0_resource[] = { ++ PBMEM(0xffe00800), ++ IRQ(5), ++}; ++DEFINE_DEV(atmel_twi, 0); ++DEV_CLK(pclk,atmel_twi0,pba,2); ++ ++struct platform_device *__init ++at32_add_device_twi(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &atmel_twi0_device; ++ select_peripheral(PA(6), PERIPH_A, 0); /* SDA */ ++ select_peripheral(PA(7), PERIPH_A, 0); /* SCL */ + break; + + default: +@@ -765,16 +937,16 @@ at32_add_device_lcdc(unsigned int id, st + select_peripheral(PC(29), PERIPH_A, 0); /* DATA3 */ + select_peripheral(PC(30), PERIPH_A, 0); /* DATA4 */ + select_peripheral(PC(31), PERIPH_A, 0); /* DATA5 */ +- select_peripheral(PD(0), PERIPH_A, 0); /* DATA6 */ +- select_peripheral(PD(1), PERIPH_A, 0); /* DATA7 */ +- select_peripheral(PD(2), PERIPH_A, 0); /* DATA8 */ +- select_peripheral(PD(3), PERIPH_A, 0); /* DATA9 */ +- select_peripheral(PD(4), PERIPH_A, 0); /* DATA10 */ +- select_peripheral(PD(5), PERIPH_A, 0); /* DATA11 */ +- select_peripheral(PD(6), PERIPH_A, 0); /* DATA12 */ +- select_peripheral(PD(7), PERIPH_A, 0); /* DATA13 */ +- select_peripheral(PD(8), PERIPH_A, 0); /* DATA14 */ +- select_peripheral(PD(9), PERIPH_A, 0); /* DATA15 */ ++ select_peripheral(PD(0), PERIPH_A, 0); /* DATA6 */ ++ select_peripheral(PD(1), PERIPH_A, 0); /* DATA7 */ ++ select_peripheral(PD(2), PERIPH_A, 0); /* DATA8 */ ++ select_peripheral(PD(3), PERIPH_A, 0); /* DATA9 */ ++ select_peripheral(PD(4), PERIPH_A, 0); /* DATA10 */ ++ select_peripheral(PD(5), PERIPH_A, 0); /* DATA11 */ ++ select_peripheral(PD(6), PERIPH_A, 0); /* DATA12 */ ++ select_peripheral(PD(7), PERIPH_A, 0); /* DATA13 */ ++ select_peripheral(PD(8), PERIPH_A, 0); /* DATA14 */ ++ select_peripheral(PD(9), PERIPH_A, 0); /* DATA15 */ + select_peripheral(PD(10), PERIPH_A, 0); /* DATA16 */ + select_peripheral(PD(11), PERIPH_A, 0); /* DATA17 */ + select_peripheral(PD(12), PERIPH_A, 0); /* DATA18 */ +@@ -799,6 +971,111 @@ at32_add_device_lcdc(unsigned int id, st + return pdev; + } + ++/* -------------------------------------------------------------------- ++ * Sound ++ * -------------------------------------------------------------------- */ ++static struct resource ac97c0_resource[] = { ++ PBMEM(0xfff02800), ++ IRQ(29), ++}; ++DEFINE_DEV(ac97c, 0); ++DEV_CLK(mck, ac97c0, pbb, 10); ++ ++struct platform_device *__init ++at32_add_device_ac97c(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &ac97c0_device; ++ select_peripheral(PB(20), PERIPH_B, 0); /* SYNC */ ++ select_peripheral(PB(21), PERIPH_B, 0); /* SDO */ ++ select_peripheral(PB(22), PERIPH_B, 0); /* SDI */ ++ select_peripheral(PB(23), PERIPH_B, 0); /* SCLK */ ++ break; ++ default: ++ return NULL; ++ } ++ ++ platform_device_register(pdev); ++ return pdev; ++} ++ ++static struct spi_board_info at73c2130_data = { ++ .max_speed_hz = 200000, ++ .controller_data = (void *)GPIO_PIN_PA(3), ++ .modalias = "at73c213", ++ .bus_num = 0, ++ .chip_select = 0, ++}; ++static struct resource at73c2130_resource[] = { ++ PBMEM(0xffe01c00), ++ IRQ(10), ++}; ++DEFINE_DEV_DATA(at73c213, 0); ++DEV_CLK(mck, at73c2130, pba, 7); ++ ++struct platform_device *__init ++at32_add_device_at73c213(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &at73c2130_device; ++ select_peripheral(PA(21), PERIPH_A, 0); /* RX_FSYNC */ ++ select_peripheral(PA(22), PERIPH_A, 0); /* RX_CLOCK */ ++ select_peripheral(PA(23), PERIPH_A, 0); /* TX_CLOCK */ ++ select_peripheral(PA(24), PERIPH_A, 0); /* TX_FSYNC */ ++ select_peripheral(PA(25), PERIPH_A, 0); /* TX_DATA */ ++ select_peripheral(PA(26), PERIPH_A, 0); /* RX_DATA */ ++ break; ++ default: ++ return NULL; ++ } ++ ++ platform_device_register(pdev); ++ return pdev; ++} ++ ++static struct resource dac0_resource[] = { ++ PBMEM(0xfff02000), ++ IRQ(27), ++}; ++DEFINE_DEV(dac, 0); ++DEV_CLK(mck, dac0, pbb, 8); ++static struct clk dac0_sample_clk = { ++ .name = "sample_clk", ++ .dev = &dac0_device.dev, ++ .mode = genclk_mode, ++ .get_rate = genclk_get_rate, ++ .set_rate = genclk_set_rate, ++ .set_parent = genclk_set_parent, ++ .index = 6, ++}; ++ ++struct platform_device *__init ++at32_add_device_dac(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &dac0_device; ++ select_peripheral(PB(20), PERIPH_A, 0); /* DATA1 */ ++ select_peripheral(PB(21), PERIPH_A, 0); /* DATA0 */ ++ select_peripheral(PB(22), PERIPH_A, 0); /* DATAN1 */ ++ select_peripheral(PB(23), PERIPH_A, 0); /* DATAN0 */ ++ break; ++ default: ++ return NULL; ++ } ++ ++ platform_device_register(pdev); ++ return pdev; ++} ++ + struct clk *at32_clock_list[] = { + &osc32k, + &osc0, +@@ -817,6 +1094,7 @@ struct clk *at32_clock_list[] = { + &smc0_mck, + &pdc_hclk, + &pdc_pclk, ++ &dmac0_hclk, + &pico_clk, + &pio0_mck, + &pio1_mck, +@@ -828,9 +1106,20 @@ struct clk *at32_clock_list[] = { + &usart3_usart, + &macb0_hclk, + &macb0_pclk, +- &spi0_mck, ++ &macb1_hclk, ++ &macb1_pclk, ++ &atmel_spi0_pclk, ++ &atmel_spi1_pclk, ++ &atmel_twi0_pclk, ++ &mmci0_mck, ++ &usb0_pclk, ++ &usb0_hclk, + &lcdc0_hclk, + &lcdc0_pixclk, ++ &ac97c0_mck, ++ &at73c2130_mck, ++ &dac0_mck, ++ &dac0_sample_clk, + }; + unsigned int at32_nr_clocks = ARRAY_SIZE(at32_clock_list); + +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/board.h 2006-11-29 16:31:03.000000000 +0100 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h 2006-11-29 16:31:42.000000000 +0100 +@@ -24,13 +24,19 @@ struct eth_platform_data { + struct platform_device * + at32_add_device_eth(unsigned int id, struct eth_platform_data *data); + ++struct platform_device *at32_add_device_mmci(unsigned int id); + struct platform_device *at32_add_device_spi(unsigned int id); ++struct platform_device *at32_add_device_twi(unsigned int id); + + struct lcdc_platform_data { + unsigned long fbmem_start; + unsigned long fbmem_size; + }; ++struct platform_device *__init at32_add_device_usb(unsigned int id); + struct platform_device * + at32_add_device_lcdc(unsigned int id, struct lcdc_platform_data *data); ++struct platform_device *__init at32_add_device_dac(unsigned int id); ++struct platform_device *__init at32_add_device_at73c213(unsigned int id); ++struct platform_device *__init at32_add_device_ac97c(unsigned int id); + + #endif /* __ASM_ARCH_BOARD_H */ diff --git a/packages/linux/linux-2.6.18/at32stk1000/.mtn2git_empty b/packages/linux/linux-2.6.18/at32stk1000/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.18/at73c213-alsa-driver.patch b/packages/linux/linux-2.6.18/at73c213-alsa-driver.patch new file mode 100644 index 0000000000..ceb12cc950 --- /dev/null +++ b/packages/linux/linux-2.6.18/at73c213-alsa-driver.patch @@ -0,0 +1,1485 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Hans-Christian Egtvedt +Date: Fri Apr 28 15:30:44 2006 +0200 +Subject: [PATCH] at73c213 ALSA driver + +This driver uses the SSC and SPI modules to communicate with an at73c213 +sound chip on the AT32STK1000. + +--- + + sound/avr32/Kconfig | 20 + sound/avr32/Makefile | 3 + sound/avr32/at73c213.c | 1296 +++++++++++++++++++++++++++++++++++++++++++++++++ + sound/avr32/at73c213.h | 120 ++++ + 4 files changed, 1439 insertions(+) + create mode 100644 sound/avr32/at73c213.c + create mode 100644 sound/avr32/at73c213.h + +859730d5cbe00b7935c4e30d179c5c5b096deb3c +Index: linux-2.6.18-avr32/sound/avr32/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/sound/avr32/Kconfig 2006-11-02 15:56:20.000000000 +0100 ++++ linux-2.6.18-avr32/sound/avr32/Kconfig 2006-11-02 15:56:20.000000000 +0100 +@@ -28,4 +28,24 @@ config SND_ATMEL_AC97C_USE_PDC + Say Y if PDC (Peripheral DMA Controller) is used for DMA transfers + to/from the Atmel AC97C instead of using the generic DMA framework. + ++config SND_AT73C213 ++ tristate "Atmel AT73C213 DAC driver" ++ depends on SND && SPI_ATMEL ++ select SND_PCM ++ help ++ Say Y here if you want to use the Atmel AT73C213 external ++ DAC on the ATSTK1000 development board. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called snd-at73c213. ++ ++config SND_AT73C213_USE_ALSA_MALLOC_CALLS ++ bool "Use the built-in malloc calls in the alsa driver" ++ default n ++ depends on SND_AT73C213 ++ help ++ Say Y if the built-in malloc calls in the alsa driver should be ++ used instead of the native dma_alloc_coherent and dma_free_coherent ++ function calls. Enabling this feature may brake the rmmod feature. ++ + endmenu +Index: linux-2.6.18-avr32/sound/avr32/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/sound/avr32/Makefile 2006-11-02 15:56:20.000000000 +0100 ++++ linux-2.6.18-avr32/sound/avr32/Makefile 2006-11-02 15:56:20.000000000 +0100 +@@ -4,3 +4,6 @@ + + snd-atmel-ac97-objs := ac97c.o + obj-$(CONFIG_SND_ATMEL_AC97) += snd-atmel-ac97.o ++ ++snd-at73c213-objs := at73c213.o ++obj-$(CONFIG_SND_AT73C213) += snd-at73c213.o +Index: linux-2.6.18-avr32/sound/avr32/at73c213.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/sound/avr32/at73c213.c 2006-11-02 16:01:55.000000000 +0100 +@@ -0,0 +1,1296 @@ ++/* ++ * Driver for the at73c213 16-bit stereo DAC on Atmel ATSTK1000 ++ * ++ * Copyright (C) 2006 Atmel Norway ++ * ++ * 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. ++ * ++ * The full GNU General Public License is included in this ++ * distribution in the file called COPYING. ++ */ ++#undef DEBUG ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#ifndef SND_AT73C213_USE_ALSA_MALLOC_CALLS ++#include ++#endif ++ ++#include ++ ++#include ++#include ++ ++#include "at73c213.h" ++ ++/* module parameters */ ++static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; ++static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; ++static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; ++ ++/* Register defines */ ++#define PIOA_BASE 0xFFE02800 ++#define SSC0_BASE 0xFFE01C00 ++#define PM_BASE 0xFFF00000 ++ ++#define PM_CKSEL 0x04 ++#define PM_APBAMASK 0x10 ++#define PM_GCCTRL 0x60 ++ ++#define PIO_PER 0x00 ++#define PIO_PDR 0x04 ++#define PIO_PUER 0x64 ++#define PIO_ASR 0x70 ++#define PIO_BSR 0x74 ++ ++#define SSC_CMR 0x04 ++#define SSC_CR 0x00 ++#define SSC_TCMR 0x18 ++#define SSC_TFMR 0x1C ++ ++/* SSC register definitions */ ++#define SSC_CR 0x00 ++#define SSC_CMR 0x04 ++#define SSC_TCMR 0x18 ++#define SSC_TFMR 0x1C ++#define SSC_THR 0x24 ++#define SSC_SR 0x40 ++#define SSC_IER 0x44 ++#define SSC_IDR 0x48 ++#define SSC_IMR 0x4C ++ ++/* SSC fields definitions */ ++#define SSC_CR_TXEN 0x00000100 ++#define SSC_CR_TXDIS 0x00000200 ++#define SSC_CR_SWRST 0x00008000 ++ ++/* SSC interrupt definitions */ ++#define SSC0_IRQ 10 ++#define SSC_INT_ENDTX 0x00000004 ++#define SSC_INT_TXBUFE 0x00000008 ++ ++/* PDC register definitions */ ++#define PDC_RPR 0x100 ++#define PDC_RCR 0x104 ++#define PDC_TPR 0x108 ++#define PDC_TCR 0x10c ++#define PDC_RNPR 0x110 ++#define PDC_RNCR 0x114 ++#define PDC_TNPR 0x118 ++#define PDC_TNCR 0x11c ++#define PDC_PTCR 0x120 ++#define PDC_PTSR 0x124 ++ ++/* PDC fields definitions */ ++#define PDC_PTCR_RXTEN 0x0001 ++#define PDC_PTCR_RXTDIS 0x0002 ++#define PDC_PTCR_TXTEN 0x0100 ++#define PDC_PTCR_TXTDIS 0x0200 ++ ++static int bitrate; ++static int gclk_div; ++static int ssc_div; ++static int spi = 0; ++static int ssc = 1; ++ ++module_param(spi, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); ++MODULE_PARM_DESC(spi, "Which SPI interface to use to communicate with the at73c213"); ++module_param(ssc, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); ++MODULE_PARM_DESC(ssc, "Which SSC interface to use to communicate with the at73c213"); ++ ++/* Initial AT73C213 register values */ ++static unsigned char snd_at73c213_original_image[18] = ++{ ++ 0x00, /* 00 - CTRL */ ++ 0x05, /* 01 - LLIG */ ++ 0x05, /* 02 - RLIG */ ++ 0x08, /* 03 - LPMG */ ++ 0x08, /* 04 - RPMG */ ++ 0x00, /* 05 - LLOG */ ++ 0x00, /* 06 - RLOG */ ++ 0x22, /* 07 - OLC */ ++ 0x09, /* 08 - MC */ ++ 0x00, /* 09 - CSFC */ ++ 0x00, /* 0A - MISC */ ++ 0x00, /* 0B - */ ++ 0x00, /* 0C - PRECH */ ++ 0x05, /* 0D - AUXG */ ++ 0x00, /* 0E - */ ++ 0x00, /* 0F - */ ++ 0x00, /* 10 - RST */ ++ 0x00, /* 11 - PA_CTRL */ ++}; ++ ++/* chip-specific data */ ++struct snd_at73c213 { ++ snd_card_t *card; ++ snd_pcm_t *pcm; ++ snd_pcm_substream_t *substream; ++ int irq; ++ int period; ++ void __iomem *regs; ++ struct clk *ssc_clk; ++ struct spi_device *spi; ++ u8 spi_wbuffer[2]; ++ u8 spi_rbuffer[2]; ++ /* image of the SPI registers in AT73C213 */ ++ u8 image[18]; ++ spinlock_t lock; ++ struct platform_device *pdev; ++}; ++ ++#define get_chip(card) ((struct snd_at73c213 *)card->private_data) ++ ++static int ++snd_at73c213_write_reg(struct snd_at73c213 *chip, u8 reg, u8 val) ++{ ++ struct spi_message msg; ++ struct spi_transfer msg_xfer = { ++ .len = 2, ++ .cs_change = 0, ++ }; ++ ++ spi_message_init(&msg); ++ ++ chip->spi_wbuffer[0] = reg; ++ chip->spi_wbuffer[1] = val; ++ ++ msg_xfer.tx_buf = chip->spi_wbuffer; ++ msg_xfer.rx_buf = chip->spi_rbuffer; ++ spi_message_add_tail(&msg_xfer, &msg); ++ ++ return spi_sync(chip->spi, &msg); ++} ++ ++#define write_reg(_spi, reg, val) \ ++ do { \ ++ retval = snd_at73c213_write_reg(_spi, reg, val); \ ++ if (retval) \ ++ goto out; \ ++ } while (0) ++ ++static snd_pcm_hardware_t snd_at73c213_playback_hw = { ++ .info = SNDRV_PCM_INFO_INTERLEAVED | ++ SNDRV_PCM_INFO_BLOCK_TRANSFER, ++ .formats = SNDRV_PCM_FMTBIT_S16_BE, ++ .rates = SNDRV_PCM_RATE_CONTINUOUS, ++ .rate_min = 8000, /* This will be overwritten with bitrate */ ++ .rate_max = 50000, /* This will be overwritten with bitrate */ ++ .channels_min = 2, ++ .channels_max = 2, ++ .buffer_bytes_max = 64 * 1024 - 1, ++ .period_bytes_min = 512, ++ .period_bytes_max = 64 * 1024 - 1, ++ .periods_min = 4, ++ .periods_max = 1024, ++}; ++ ++/* calculate and set bitrate and divisions */ ++static int snd_at73c213_set_bitrate_and_div(void) ++{ ++ extern struct avr32_cpuinfo boot_cpu_data; ++ unsigned long pll0_hz, apba_hz; ++ unsigned long apba_realdiv, gclk_realdiv, ssc_realdiv, wanted_bitrate; ++ char cpusel, ahbsel, apbasel; ++ int regval; ++ ++ regval = __raw_readl((void __iomem *)PM_BASE + PM_CKSEL); ++ wanted_bitrate = 48000; ++ ++ cpusel = regval & 0x07; ++ ahbsel = (regval>>8) & 0x07; ++ apbasel = (regval>>16) & 0x07; ++ ++ /* FIXME: Use the clk framework for this */ ++ if ((regval&(1<<7)) != 0) { ++ pll0_hz = clk_get_rate(boot_cpu_data.clk)/(1<<(cpusel+1)); ++ } else { ++ pll0_hz = clk_get_rate(boot_cpu_data.clk); ++ } ++ ++ if ((regval&(1<<23)) != 0) { ++ apba_hz = pll0_hz/(1<<(apbasel+1)); ++ apba_realdiv = (1<<(apbasel+1)); ++ } else { ++ apba_hz = pll0_hz; ++ apba_realdiv = 1; ++ } ++ ++calculate: ++ /* Adjust bitrate as close as possible to 48000 Hz */ ++ gclk_realdiv = pll0_hz/(wanted_bitrate*256); ++ ssc_realdiv = 2 * apba_realdiv * gclk_realdiv; ++ ++ if ((gclk_realdiv % 2) == 0) ++ goto setbitrates; ++ ++ if(wanted_bitrate >= 22050 && wanted_bitrate <= 48000) ++ wanted_bitrate -= 50; ++ else if (wanted_bitrate < 22050) ++ wanted_bitrate = 48050; ++ else if (wanted_bitrate <= 50000) ++ wanted_bitrate += 50; ++ else { ++ printk(KERN_ERR "at73c213 could not set dividers for a valid bitrate\n"); ++ return -EINVAL; ++ } ++ ++ goto calculate; ++ ++setbitrates: ++ bitrate = pll0_hz/(gclk_realdiv*256); ++ gclk_div = (gclk_realdiv/2)-1; ++ ssc_realdiv = 2*apba_realdiv*gclk_realdiv; ++ ssc_div = ssc_realdiv/(2*apba_realdiv); ++ ++ printk(KERN_INFO "at73c213: bitrate is %d Hz\n", bitrate); ++ ++ return 0; ++} ++ ++/* open callback */ ++static int snd_at73c213_pcm_open(snd_pcm_substream_t *substream) ++{ ++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); ++ snd_pcm_runtime_t *runtime = substream->runtime; ++ ++ snd_at73c213_playback_hw.rate_min = bitrate; ++ snd_at73c213_playback_hw.rate_max = bitrate; ++ runtime->hw = snd_at73c213_playback_hw; ++ chip->substream = substream; ++ ++ return 0; ++} ++ ++/* close callback */ ++static int snd_at73c213_pcm_close(snd_pcm_substream_t *substream) ++{ ++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); ++ chip->substream = NULL; ++ return 0; ++} ++ ++/* hw_params callback */ ++static int snd_at73c213_pcm_hw_params(snd_pcm_substream_t *substream, ++ snd_pcm_hw_params_t *hw_params) ++{ ++#ifdef SND_AT73C213_USE_ALSA_MALLOC_CALLS ++ return snd_pcm_lib_malloc_pages(substream, ++ params_buffer_bytes(hw_params)); ++#else ++ int pg; ++ size_t size = params_buffer_bytes(hw_params); ++ struct snd_pcm_runtime *runtime; ++ struct snd_dma_buffer *dmab = NULL; ++ ++ substream->dma_buffer.dev.type = SNDRV_DMA_TYPE_DEV; ++ snd_assert(substream != NULL, return -EINVAL); ++ runtime = substream->runtime; ++ snd_assert(runtime != NULL, return -EINVAL); ++ ++ /* check if buffer is already allocated */ ++ if (runtime->dma_buffer_p) { ++ size_t size_previouse; ++ int pg_previouse; ++ ++ /* new buffer is smaler than previouse allocated buffer */ ++ if (runtime->dma_buffer_p->bytes >= size) { ++ runtime->dma_bytes = size; ++ return 0; /* don't change buffer size */ ++ } ++ ++ size_previouse = runtime->dma_buffer_p->bytes; ++ pg_previouse = get_order(size_previouse); ++ ++ dma_free_coherent(runtime->dma_buffer_p->dev.dev, ++ PAGE_SIZE << pg_previouse, ++ runtime->dma_buffer_p->area, ++ runtime->dma_buffer_p->addr); ++ ++ kfree(runtime->dma_buffer_p); ++ } ++ ++ dmab = kzalloc(sizeof(*dmab), GFP_KERNEL); ++ if (!dmab) ++ return -ENOMEM; ++ ++ dmab->dev = substream->dma_buffer.dev; ++ dmab->bytes = 0; ++ ++ pg = get_order(size); ++ ++ dmab->area = dma_alloc_coherent( ++ substream->dma_buffer.dev.dev, ++ PAGE_SIZE << pg, ++ (dma_addr_t *)&dmab->addr, ++ GFP_KERNEL); ++ ++ if (!dmab->area) { ++ kfree(dmab); ++ return -ENOMEM; ++ } ++ ++ dmab->bytes = size; ++ snd_pcm_set_runtime_buffer(substream, dmab); ++ runtime->dma_bytes = size; ++ return 1; ++#endif ++} ++ ++/* hw_free callback */ ++static int snd_at73c213_pcm_hw_free(snd_pcm_substream_t *substream) ++{ ++#ifdef SND_AT73C213_USE_ALSA_MALLOC_CALLS ++ return snd_pcm_lib_free_pages(substream); ++#else ++ int pg; ++ struct snd_pcm_runtime *runtime; ++ struct snd_dma_buffer *dmab = NULL; ++ ++ snd_assert(substream != NULL, return -EINVAL); ++ runtime = substream->runtime; ++ snd_assert(runtime != NULL, return -EINVAL); ++ dmab = runtime->dma_buffer_p; ++ ++ if (!dmab) ++ return 0; ++ ++ if (!dmab->area) ++ return 0; ++ ++ pg = get_order(dmab->bytes); ++ dma_free_coherent(dmab->dev.dev, PAGE_SIZE << pg, dmab->area, dmab->addr); ++ kfree(runtime->dma_buffer_p); ++ snd_pcm_set_runtime_buffer(substream, NULL); ++ return 0; ++#endif ++} ++ ++/* prepare callback */ ++static int snd_at73c213_pcm_prepare(snd_pcm_substream_t *substream) ++{ ++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); ++ struct platform_device *pdev = chip->pdev; ++ snd_pcm_runtime_t *runtime = substream->runtime; ++ int block_size; ++ ++ block_size = frames_to_bytes(runtime, runtime->period_size); ++ ++ chip->period = 0; ++ ++ /* Make sure that our data are actually readable by the SSC */ ++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr, ++ block_size, DMA_TO_DEVICE); ++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr + block_size, ++ block_size, DMA_TO_DEVICE); ++ ++ __raw_writel(runtime->dma_addr, chip->regs + PDC_TPR); ++ __raw_writel(runtime->period_size * 2, chip->regs + PDC_TCR); ++ __raw_writel(runtime->dma_addr + block_size, chip->regs + PDC_TNPR); ++ __raw_writel(runtime->period_size * 2, chip->regs + PDC_TNCR); ++ ++ return 0; ++} ++ ++/* trigger callback */ ++static int snd_at73c213_pcm_trigger(snd_pcm_substream_t *substream, ++ int cmd) ++{ ++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); ++ int retval = 0; ++ int flags = 0; ++ ++ spin_lock_irqsave(&chip->lock, flags); ++ ++ switch (cmd) { ++ case SNDRV_PCM_TRIGGER_START: ++ __raw_writel(SSC_INT_ENDTX, chip->regs + SSC_IER); ++ __raw_writel(PDC_PTCR_TXTEN, chip->regs + PDC_PTCR); ++ break; ++ case SNDRV_PCM_TRIGGER_STOP: ++ __raw_writel(PDC_PTCR_TXTDIS, chip->regs + PDC_PTCR); ++ __raw_writel(SSC_INT_ENDTX, chip->regs + SSC_IDR); ++ break; ++ default: ++ printk(KERN_WARNING "at73c213: spuriouse command %x\n", cmd); ++ retval = -EINVAL; ++ break; ++ } ++ ++ spin_unlock_irqrestore(&chip->lock, flags); ++ ++ return retval; ++} ++ ++/* pointer callback */ ++static snd_pcm_uframes_t snd_at73c213_pcm_pointer(snd_pcm_substream_t *substream) ++{ ++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); ++ snd_pcm_runtime_t *runtime = substream->runtime; ++ snd_pcm_uframes_t pos; ++ unsigned long bytes; ++ ++ bytes = __raw_readl(chip->regs + PDC_TPR) - runtime->dma_addr; ++ ++ pos = bytes_to_frames(runtime, bytes); ++ if (pos >= runtime->buffer_size) ++ pos -= runtime->buffer_size; ++ ++ return pos; ++} ++ ++/* operators */ ++static snd_pcm_ops_t at73c213_playback_ops = { ++ .open = snd_at73c213_pcm_open, ++ .close = snd_at73c213_pcm_close, ++ .ioctl = snd_pcm_lib_ioctl, ++ .hw_params = snd_at73c213_pcm_hw_params, ++ .hw_free = snd_at73c213_pcm_hw_free, ++ .prepare = snd_at73c213_pcm_prepare, ++ .trigger = snd_at73c213_pcm_trigger, ++ .pointer = snd_at73c213_pcm_pointer, ++}; ++ ++/* free a pcm device */ ++static void snd_at73c213_pcm_free(snd_pcm_t *pcm) ++{ ++ struct snd_at73c213 *chip = snd_pcm_chip(pcm); ++ if (chip->pcm != 0 ) { ++#ifdef SND_AT73C213_USE_ALSA_MALLOC_CALLS ++ snd_pcm_lib_preallocate_free_for_all(chip->pcm); ++#endif ++ chip->pcm = NULL; ++ } ++} ++ ++/* create a new pcm device */ ++static int __devinit snd_at73c213_new_pcm(struct snd_at73c213 *chip, int device) ++{ ++ snd_pcm_t *pcm; ++ int retval; ++ ++ retval = snd_pcm_new(chip->card, chip->card->shortname, device, 1, 0, &pcm); ++ if (retval < 0) ++ return retval; ++ ++ pcm->private_data = chip; ++ pcm->private_free = snd_at73c213_pcm_free; ++ pcm->info_flags = SNDRV_PCM_INFO_BLOCK_TRANSFER; ++ strcpy(pcm->name, "at73c213"); ++ chip->pcm = pcm; ++ ++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &at73c213_playback_ops); ++ ++#ifdef SND_AT73C213_USE_ALSA_MALLOC_CALLS ++ snd_pcm_lib_preallocate_pages_for_all(chip->pcm, SNDRV_DMA_TYPE_DEV, ++ &chip->pdev->dev, 64 * 1024, 64 * 1024); ++#endif ++ ++ return 0; ++} ++ ++static irqreturn_t snd_at73c213_interrupt(int irq, void *dev_id, ++ struct pt_regs *regs) ++{ ++ struct snd_at73c213 *chip = dev_id; ++ struct platform_device *pdev = chip->pdev; ++ snd_pcm_runtime_t *runtime = chip->substream->runtime; ++ u32 status; ++ int offset, next_period, block_size; ++ ++ spin_lock(&chip->lock); ++ ++ block_size = frames_to_bytes(runtime, runtime->period_size); ++ ++ status = __raw_readl(chip->regs + SSC_IMR); ++ ++ if (status & SSC_INT_ENDTX) { ++ chip->period++; ++ if (chip->period == runtime->periods) ++ chip->period = 0; ++ next_period = chip->period + 1; ++ if (next_period == runtime->periods) ++ next_period = 0; ++ ++ offset = block_size * next_period; ++ ++ /* Make sure that our data are actually readable by the SSC */ ++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr + offset, ++ block_size, DMA_TO_DEVICE); ++ __raw_writel(runtime->dma_addr + offset, chip->regs + PDC_TNPR); ++ __raw_writel(runtime->period_size * 2, chip->regs + PDC_TNCR); ++ ++ if (next_period == 0) { ++ (void)__raw_readl(chip->regs + PDC_TPR); ++ (void)__raw_readl(chip->regs + PDC_TCR); ++ } ++ } else { ++ printk(KERN_WARNING ++ "Spurious SSC interrupt, status = 0x%08lx\n", ++ (unsigned long)status); ++ __raw_writel(status, chip->regs + SSC_IDR); ++ } ++ ++ (void)__raw_readl(chip->regs + SSC_IMR); ++ spin_unlock(&chip->lock); ++ ++ if (status & SSC_INT_ENDTX) ++ snd_pcm_period_elapsed(chip->substream); ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Mixer functions ++ */ ++#if 0 /* Function not in use */ ++static int snd_at73c213_mono_info(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_info *uinfo) ++{ ++ unsigned long mask = (kcontrol->private_value >> 16) & 0xff; ++ ++ uinfo->type = (mask == 1) ? ++ SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER; ++ uinfo->count = 1; ++ uinfo->value.integer.min = 0; ++ uinfo->value.integer.max = mask; ++ ++ return 0; ++} ++#endif ++ ++static int snd_at73c213_mono_get(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); ++ unsigned long flags; ++ int reg = kcontrol->private_value & 0xff; ++ int shift = (kcontrol->private_value >> 8) & 0xff; ++ int mask = (kcontrol->private_value >> 16) & 0xff; ++ int invert = (kcontrol->private_value >> 24) & 0xff; ++ ++ spin_lock_irqsave(&chip->lock, flags); ++ ++ ucontrol->value.integer.value[0] = (chip->image[reg] >> shift) & mask; ++ ++ if (invert) ++ ucontrol->value.integer.value[0] = ++ (mask - ucontrol->value.integer.value[0]); ++ ++ spin_unlock_irqrestore(&chip->lock, flags); ++ ++ return 0; ++} ++ ++static int snd_at73c213_mono_put(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); ++ unsigned long flags; ++ int reg = kcontrol->private_value & 0xff; ++ int shift = (kcontrol->private_value >> 8) & 0xff; ++ int mask = (kcontrol->private_value >> 16) & 0xff; ++ int invert = (kcontrol->private_value >> 24) & 0xff; ++ int change, retval; ++ unsigned short val; ++ ++ val = (ucontrol->value.integer.value[0] & mask); ++ if (invert) ++ val = mask - val; ++ val <<= shift; ++ ++ spin_lock_irqsave(&chip->lock, flags); ++ ++ val = (chip->image[reg] & ~(mask << shift)) | val; ++ change = val != chip->image[reg]; ++ write_reg(chip, reg, val); ++ ++ chip->image[reg] = val; ++ ++ spin_unlock_irqrestore(&chip->lock, flags); ++ ++ return change; ++ ++out: ++ return retval; ++} ++ ++static int snd_at73c213_stereo_info(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_info *uinfo) ++{ ++ int mask = (kcontrol->private_value >> 24) & 0xFF; ++ ++ uinfo->type = mask == 1 ? ++ SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER; ++ uinfo->count = 2; ++ uinfo->value.integer.min = 0; ++ uinfo->value.integer.max = mask; ++ ++ return 0; ++} ++ ++static int snd_at73c213_stereo_get(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); ++ unsigned long flags; ++ int left_reg = kcontrol->private_value & 0xff; ++ int right_reg = (kcontrol->private_value >> 8) & 0xff; ++ int shift_left = (kcontrol->private_value >> 16) & 0x07; ++ int shift_right = (kcontrol->private_value >> 19) & 0x07; ++ int mask = (kcontrol->private_value >> 24) & 0xff; ++ int invert = (kcontrol->private_value >> 22) & 1; ++ ++ spin_lock_irqsave(&chip->lock, flags); ++ ++ ucontrol->value.integer.value[0] = ++ (chip->image[left_reg] >> shift_left) & mask; ++ ucontrol->value.integer.value[1] = ++ (chip->image[right_reg] >> shift_right) & mask; ++ ++ if (invert) { ++ ucontrol->value.integer.value[0] = ++ (mask - ucontrol->value.integer.value[0]); ++ ucontrol->value.integer.value[1] = ++ (mask - ucontrol->value.integer.value[1]); ++ } ++ ++ spin_unlock_irqrestore(&chip->lock, flags); ++ ++ return 0; ++} ++ ++static int snd_at73c213_stereo_put(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); ++ unsigned long flags; ++ int left_reg = kcontrol->private_value & 0xff; ++ int right_reg = (kcontrol->private_value >> 8) & 0xff; ++ int shift_left = (kcontrol->private_value >> 16) & 0x07; ++ int shift_right = (kcontrol->private_value >> 19) & 0x07; ++ int mask = (kcontrol->private_value >> 24) & 0xff; ++ int invert = (kcontrol->private_value >> 22) & 1; ++ int change, retval; ++ unsigned short val1, val2; ++ ++ val1 = ucontrol->value.integer.value[0] & mask; ++ val2 = ucontrol->value.integer.value[1] & mask; ++ if (invert) { ++ val1 = mask - val1; ++ val2 = mask - val2; ++ } ++ val1 <<= shift_left; ++ val2 <<= shift_right; ++ ++ spin_lock_irqsave(&chip->lock, flags); ++ ++ val1 = (chip->image[left_reg] & ~(mask << shift_left)) | val1; ++ val2 = (chip->image[right_reg] & ~(mask << shift_right)) | val2; ++ change = val1 != chip->image[left_reg] || val2 != chip->image[right_reg]; ++ write_reg(chip, left_reg, val1); ++ write_reg(chip, right_reg, val2); ++ ++ chip->image[left_reg] = val1; ++ chip->image[right_reg] = val2; ++ ++ spin_unlock_irqrestore(&chip->lock, flags); ++ ++ return change; ++ ++out: ++ return retval; ++} ++ ++static int snd_at73c213_mono_switch_info(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_info *uinfo) ++{ ++ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; ++ uinfo->count = 1; ++ uinfo->value.integer.min = 0; ++ uinfo->value.integer.max = 1; ++ ++ return 0; ++} ++ ++static int snd_at73c213_mono_switch_get(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); ++ unsigned long flags; ++ int reg = kcontrol->private_value & 0xff; ++ int shift = (kcontrol->private_value >> 8) & 0xff; ++ int invert = (kcontrol->private_value >> 24) & 0xff; ++ ++ spin_lock_irqsave(&chip->lock, flags); ++ ++ ucontrol->value.integer.value[0] = (chip->image[reg] >> shift) & 0x01; ++ ++ if (invert) ++ ucontrol->value.integer.value[0] = ++ (0x01 - ucontrol->value.integer.value[0]); ++ ++ spin_unlock_irqrestore(&chip->lock, flags); ++ ++ return 0; ++} ++ ++static int snd_at73c213_mono_switch_put(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); ++ unsigned long flags; ++ int reg = kcontrol->private_value & 0xff; ++ int shift = (kcontrol->private_value >> 8) & 0xff; ++ int mask = (kcontrol->private_value >> 16) & 0xff; ++ int invert = (kcontrol->private_value >> 24) & 0xff; ++ int change, retval; ++ unsigned short val; ++ ++ if (ucontrol->value.integer.value[0]) ++ val = mask; ++ else ++ val = 0; ++ ++ if (invert) ++ val = mask - val; ++ val <<= shift; ++ ++ spin_lock_irqsave(&chip->lock, flags); ++ ++ val |= (chip->image[reg] & ~(mask << shift)); ++ change = val != chip->image[reg]; ++ ++ write_reg(chip, reg, val); ++ ++ chip->image[reg] = val; ++ ++ spin_unlock_irqrestore(&chip->lock, flags); ++ ++ return change; ++ ++out: ++ return retval; ++} ++ ++static int snd_at73c213_pa_volume_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 = ((kcontrol->private_value >> 16) & 0xFF) - 1; ++ ++ return 0; ++} ++ ++static int snd_at73c213_line_capture_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 = 14; ++ uinfo->value.integer.max = 31; ++ ++ return 0; ++} ++ ++static int snd_at73c213_aux_capture_volume_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 = 14; ++ uinfo->value.integer.max = 31; ++ ++ return 0; ++} ++ ++#define AT73C213_MONO(xname, xindex, reg, shift, mask, invert) \ ++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \ ++ .info = snd_at73c213_mono_info, \ ++ .get = snd_at73c213_mono_get, .put = snd_at73c213_mono_put, \ ++ .private_value = reg | (shift << 8) | (mask << 16) | (invert << 24) } ++ ++#define AT73C213_MONO_SWITCH(xname, xindex, reg, shift, mask, invert) \ ++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \ ++ .info = snd_at73c213_mono_switch_info, \ ++ .get = snd_at73c213_mono_switch_get, .put = snd_at73c213_mono_switch_put, \ ++ .private_value = reg | (shift << 8) | (mask << 16) | (invert << 24) } ++ ++#define AT73C213_STEREO(xname, xindex, left_reg, right_reg, shift_left, shift_right, mask, invert) \ ++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \ ++ .info = snd_at73c213_stereo_info, \ ++ .get = snd_at73c213_stereo_get, .put = snd_at73c213_stereo_put, \ ++ .private_value = left_reg | (right_reg << 8) | (shift_left << 16) | (shift_right << 19) | (mask << 24) | (invert << 22) } ++ ++static struct snd_kcontrol_new snd_at73c213_controls[] __devinitdata = { ++AT73C213_STEREO("Master Playback Volume", 0, DAC_LMPG, DAC_RMPG, 0, 0, 0x1F, 1), ++AT73C213_STEREO("Master Playback Switch", 0, DAC_LMPG, DAC_RMPG, 5, 5, 1, 1), ++AT73C213_STEREO("PCM Playback Volume", 0, DAC_LLOG, DAC_RLOG, 0, 0, 0x1F, 1), ++AT73C213_STEREO("PCM Playback Switch", 0, DAC_LLOG, DAC_RLOG, 5, 5, 1, 1), ++AT73C213_MONO_SWITCH("Mono PA Playback Switch", 0, DAC_CTRL, DAC_CTRL_ONPADRV, 0x01, 0), ++{ ++ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, ++ .name = "PA Playback Volume", ++ .index = 0, ++ .info = snd_at73c213_pa_volume_info, ++ .get = snd_at73c213_mono_get, ++ .put = snd_at73c213_mono_put, ++ .private_value = PA_CTRL|(PA_CTRL_APAGAIN<<8)|(0x0F<<16)|(1<<24), ++}, ++AT73C213_MONO_SWITCH("PA High Gain Playback Switch", 0, PA_CTRL, PA_CTRL_APALP, 0x01, 1), ++AT73C213_MONO_SWITCH("PA Playback Switch", 0, PA_CTRL, PA_CTRL_APAON, 0x01, 0), ++{ ++ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, ++ .name = "Aux Capture Volume", ++ .index = 0, ++ .info = snd_at73c213_aux_capture_volume_info, ++ .get = snd_at73c213_mono_get, ++ .put = snd_at73c213_mono_put, ++ .private_value = DAC_AUXG|(0<<8)|(0x1F<<16)|(1<<24), ++}, ++AT73C213_MONO_SWITCH("Aux Capture Switch", 0, DAC_CTRL, DAC_CTRL_ONAUXIN, 0x01, 0), ++{ ++ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, ++ .name = "Line Capture Volume", ++ .index = 0, ++ .info = snd_at73c213_line_capture_volume_info, ++ .get = snd_at73c213_stereo_get, ++ .put = snd_at73c213_stereo_put, ++ .private_value = DAC_LLIG|(DAC_RLIG<<8)|(0<<16)|(0<<19)|(0x1F<<24)|(1<<22), ++}, ++AT73C213_MONO_SWITCH("Line Capture Switch", 0, DAC_CTRL, 0, 0x03, 0), ++}; ++ ++static int __devinit snd_at73c213_mixer(struct snd_at73c213 *chip) ++{ ++ struct snd_card *card; ++ int errval, idx; ++ ++ if (chip == NULL || chip->pcm == NULL) ++ return -EINVAL; ++ ++ card = chip->card; ++ ++ strcpy(card->mixername, chip->pcm->name); ++ ++ for (idx = 0; idx < ARRAY_SIZE(snd_at73c213_controls); idx++) { ++ if ((errval = snd_ctl_add(card, ++ snd_ctl_new1(&snd_at73c213_controls[idx], ++ chip))) < 0) ++ return errval; ++ } ++ ++ return 0; ++} ++ ++/* ++ * Device functions ++ */ ++static int snd_at73c213_chip_init(struct snd_at73c213 *chip) ++{ ++ int retval; ++ unsigned char dac_ctrl = 0; ++ ++ /* XXX: Unmask the APB clock for SSC0 */ ++ __raw_writel(__raw_readl((void __iomem *)PM_BASE + PM_APBAMASK)|(1<<7), ++ (void __iomem *)PM_BASE + PM_APBAMASK); ++ ++ /* Wait for clock to be stable */ ++ msleep(10); ++ ++ retval = snd_at73c213_set_bitrate_and_div(); ++ if (retval) ++ goto out; ++ ++ /* Reset the SSC */ ++ __raw_writel(SSC_CR_SWRST, chip->regs + SSC_CR); ++ ++ /* Enable GCLK0 */ ++ __raw_writel((1<<30), (void __iomem *)(PIOA_BASE + PIO_PDR)); ++ __raw_writel((1<<30), (void __iomem *)(PIOA_BASE + PIO_ASR)); ++ __raw_writel(((gclk_div<<8)|0x10|0x04|0x02), (void __iomem *)(PM_BASE + PM_GCCTRL)); ++ ++ /* Enable SSC and setup for I2S */ ++ __raw_writel(ssc_div, chip->regs + SSC_CMR); ++ ++ /* CKO, START, STTDLY, PERIOD */ ++ __raw_writel((1<<2)|(4<<8)|(1<<16)|(15<<24), chip->regs + SSC_TCMR); ++ ++ /* DATLEN, MSBF, DATNB, FSLEN, FSOS */ ++ __raw_writel((15<<0)|(1<<7)|(1<<8)|(15<<16)|(1<<20), chip->regs + SSC_TFMR); ++ ++ /* Initialize at73c213 on SPI bus */ ++ /* Reset the device */ ++ write_reg(chip, DAC_RST, 0x04); ++ msleep(1); ++ write_reg(chip, DAC_RST, 0x03); ++ ++ /* Turn on precharge */ ++ write_reg(chip, DAC_PRECH, 0xFF); ++ write_reg(chip, PA_CTRL, (1<image[PA_CTRL] = (1<image[DAC_PRECH] = (1<image[DAC_CTRL] = dac_ctrl; ++ ++ /* Mute sound */ ++ write_reg(chip, DAC_LMPG, 0x3F); ++ chip->image[DAC_LMPG] = 0x3F; ++ write_reg(chip, DAC_RMPG, 0x3F); ++ chip->image[DAC_RMPG] = 0x3F; ++ write_reg(chip, DAC_LLOG, 0x3F); ++ chip->image[DAC_LLOG] = 0x3F; ++ write_reg(chip, DAC_RLOG, 0x3F); ++ chip->image[DAC_RLOG] = 0x3F; ++ write_reg(chip, DAC_LLIG, 0x11); ++ chip->image[DAC_LLIG] = 0x11; ++ write_reg(chip, DAC_RLIG, 0x11); ++ chip->image[DAC_RLIG] = 0x11; ++ write_reg(chip, DAC_AUXG, 0x11); ++ chip->image[DAC_AUXG] = 0x11; ++ ++ /* Turn on SSC transmitter */ ++ __raw_writel(SSC_CR_TXEN, chip->regs + SSC_CR); ++ ++out: ++ return retval; ++} ++ ++static int snd_at73c213_dev_free(snd_device_t *device) ++{ ++ struct snd_at73c213 *chip = device->device_data; ++ ++ if (chip->regs) { ++ __raw_writel(SSC_CR_TXDIS, chip->regs + SSC_CR); ++ iounmap(chip->regs); ++ } ++ ++ if (chip->irq >= 0) ++ free_irq(chip->irq, chip); ++ ++ if (chip->ssc_clk) { ++ clk_disable(chip->ssc_clk); ++ clk_put(chip->ssc_clk); ++ } ++ ++ return 0; ++} ++ ++static int __devinit snd_at73c213_create(snd_card_t *card, ++ struct platform_device *pdev) ++{ ++ static snd_device_ops_t ops = { ++ .dev_free = snd_at73c213_dev_free, ++ }; ++ struct snd_at73c213 *chip = get_chip(card); ++ struct resource *regs; ++ struct clk *ssc_clk; ++ int irq, retval; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) ++ return -ENXIO; ++ irq = platform_get_irq(pdev, 0); ++ if (irq < 0) ++ return irq; ++ ++ ssc_clk = clk_get(&pdev->dev, "mck"); ++ if (IS_ERR(ssc_clk)) ++ return PTR_ERR(ssc_clk); ++ clk_enable(ssc_clk); ++ chip->ssc_clk = ssc_clk; ++ ++ spin_lock_init(&chip->lock); ++ chip->card = card; ++ chip->pdev = pdev; ++ chip->irq = -1; ++ ++ retval = -ENOMEM; ++ ++ retval = spi_setup(chip->spi); ++ if (retval) ++ goto out; ++ ++ chip->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!chip->regs) ++ goto out; ++ ++ retval = request_irq(irq, snd_at73c213_interrupt, 0, "at73c213", chip); ++ if (retval) { ++ snd_printk("unable to request IRQ%d\n", irq); ++ goto out; ++ } ++ chip->irq = irq; ++ ++ memcpy(&chip->image, &snd_at73c213_original_image, ++ sizeof(snd_at73c213_original_image)); ++ ++ retval = snd_at73c213_chip_init(chip); ++ if (retval) ++ goto out; ++ ++ retval = snd_at73c213_new_pcm(chip, 0); ++ if (retval) ++ goto out; ++ ++ retval = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); ++ if (retval) ++ goto out; ++ ++ retval = snd_at73c213_mixer(chip); ++ if (retval) ++ goto out; ++ ++ snd_card_set_dev(card, &pdev->dev); ++ ++out: ++ return retval; ++} ++ ++static int __devinit snd_at73c213_probe(struct platform_device *pdev) ++{ ++ static int dev; ++ struct spi_board_info *binfo; ++ struct spi_master *smaster; ++ struct snd_at73c213 *chip; ++ snd_card_t *card; ++ int retval; ++ ++ if (dev >= SNDRV_CARDS) ++ return -ENODEV; ++ if (!enable[dev]) { ++ dev++; ++ return -ENOENT; ++ } ++ ++ if (spi < 0 || ssc < 0) ++ return -ENODEV; ++ ++ retval = -ENOMEM; ++ card = snd_card_new(index[dev], id[dev], THIS_MODULE, ++ sizeof(struct snd_at73c213)); ++ if (!card) ++ goto out; ++ ++ chip = card->private_data; ++ ++ retval = -ENODEV; ++ ++ /* Get the SPI bus */ ++ binfo = pdev->dev.platform_data; ++ if (!binfo) { ++ printk(KERN_WARNING "at73c213: could not get platform data\n"); ++ goto out; ++ } ++ ++ smaster = spi_busnum_to_master(spi); ++ if (!smaster) { ++ request_module("spi1"); ++ smaster = spi_busnum_to_master(spi); ++ if (!smaster) { ++ printk(KERN_WARNING ++ "at73c213: could not get " ++ "SPI bus %d, remembered to load " ++ "the spi_atmel module?\n", spi); ++ goto out; ++ } ++ } ++ ++ chip->spi = spi_new_device(smaster, binfo); ++ if (!chip->spi) { ++ printk(KERN_WARNING "at73c213: could not get SPI device %d\n", spi); ++ goto out; ++ } ++ ++ chip->spi->mode = SPI_MODE_1; ++ chip->spi->bits_per_word = 8; ++ ++ retval = snd_at73c213_create(card, pdev); ++ if (retval) ++ goto out_free_card; ++ ++ strcpy(card->driver, "at73c213"); ++ strcpy(card->shortname, "at73c213 (AVR32 STK1000)"); ++ sprintf(card->longname, "%s at %p (irq %i)", card->shortname, chip->regs, chip->irq); ++ ++ retval = snd_card_register(card); ++ if (retval) ++ goto out_free_card; ++ ++ platform_set_drvdata(pdev, card); ++ dev++; ++ return 0; ++ ++out_free_card: ++ snd_card_free(card); ++out: ++ return retval; ++} ++ ++static int __devexit snd_at73c213_remove(struct platform_device *pdev) ++{ ++ struct snd_card *card = platform_get_drvdata(pdev); ++ struct snd_at73c213 *chip = card->private_data; ++ int retval; ++ ++ /* Stop playback */ ++ __raw_writel(SSC_CR_TXDIS, chip->regs + SSC_CR); ++ ++ /* Stop GLCK0 */ ++ __raw_writel(0, (void __iomem *)PM_BASE + PM_GCCTRL); ++ ++ /* Mute sound */ ++ write_reg(chip, DAC_LMPG, 0x3F); ++ chip->image[DAC_LMPG] = 0x3F; ++ write_reg(chip, DAC_RMPG, 0x3F); ++ chip->image[DAC_RMPG] = 0x3F; ++ write_reg(chip, DAC_LLOG, 0x3F); ++ chip->image[DAC_LLOG] = 0x3F; ++ write_reg(chip, DAC_RLOG, 0x3F); ++ chip->image[DAC_RLOG] = 0x3F; ++ write_reg(chip, DAC_LLIG, 0x11); ++ chip->image[DAC_LLIG] = 0x11; ++ write_reg(chip, DAC_RLIG, 0x11); ++ chip->image[DAC_RLIG] = 0x11; ++ write_reg(chip, DAC_AUXG, 0x11); ++ chip->image[DAC_AUXG] = 0x11; ++ ++ /* Turn off PA */ ++ write_reg(chip, PA_CTRL, (chip->image[PA_CTRL]|0x0F)); ++ chip->image[PA_CTRL] |= 0x0F; ++ msleep(10); ++ write_reg(chip, PA_CTRL, (1<image[PA_CTRL] = (1<image[DAC_CTRL] = 0x0C; ++ msleep(2); ++ write_reg(chip, DAC_CTRL, 0x00); ++ chip->image[DAC_CTRL] = 0x00; ++ ++ /* Turn off master power */ ++ write_reg(chip, DAC_PRECH, 0x00); ++ chip->image[DAC_PRECH] = 0x00; ++ ++ msleep(10); ++ ++out: ++ if (chip->spi) ++ spi_unregister_device(chip->spi); ++ ++ if (card) { ++ snd_card_free(card); ++ platform_set_drvdata(pdev, NULL); ++ } ++ ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int snd_at73c213_suspend(struct platform_device *pdev, pm_message_t state, u32 level) ++{ ++ struct snd_card *card = at32_get_drvdata(pdev); ++ struct snd_at73c213 *chip = card->private_data; ++ ++ printk(KERN_DEBUG "at73c213: suspending\n"); ++ ++ /* Stop SSC and GCLK0 */ ++ ++ spi_suspend(chip->spi, state); ++ ++ return 0; ++} ++ ++static int snd_at73c213_resume(struct platform_device *pdev, u32 level) ++{ ++ struct snd_card *card = at32_get_drvdata(pdev); ++ struct snd_at73c213 *chip = card->private_data; ++ ++ printk(KERN_DEBUG "at73c213: resuming\n"); ++ ++ /* Start GLCK0 and SSC */ ++ ++ spi_resume(chip->spi); ++ ++ return 0; ++} ++#endif /* CONFIG_PM */ ++ ++/* Driver core initialization */ ++static struct platform_driver at73c213_driver = { ++ .probe = snd_at73c213_probe, ++ .remove = __devexit_p(snd_at73c213_remove), ++ .driver = { ++ .name = "at73c213", ++ } ++#ifdef CONFIG_PM ++ .resume = snd_at73c213_resume, ++ .suspend = snd_at73c213_suspend, ++#endif ++}; ++ ++static int __init at73c213_init(void) ++{ ++ return platform_driver_register(&at73c213_driver); ++} ++ ++static void __exit at73c213_exit(void) ++{ ++ platform_driver_unregister(&at73c213_driver); ++} ++ ++MODULE_AUTHOR("Hans-Christian Egtvedt "); ++MODULE_DESCRIPTION("Sound driver for at73c213 on STK1000"); ++MODULE_LICENSE("GPL"); ++ ++module_init(at73c213_init); ++module_exit(at73c213_exit); ++ +Index: linux-2.6.18-avr32/sound/avr32/at73c213.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/sound/avr32/at73c213.h 2006-11-02 15:56:20.000000000 +0100 +@@ -0,0 +1,120 @@ ++/* ++ * Driver for the AT73C213 16-bit stereo DAC on Atmel ATSTK1000 ++ * ++ * Copyright (C) 2006 Atmel Norway ++ * ++ * 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. ++ * ++ * The full GNU General Public License is included in this ++ * distribution in the file called COPYING. ++ */ ++ ++#ifndef _SND_AT73C213_MIXER_H_ ++#define _SND_AT73C213_MIXER_H_ ++ ++/* DAC control register */ ++#define DAC_CTRL 0x00 ++#define DAC_CTRL_ONPADRV 7 ++#define DAC_CTRL_ONAUXIN 6 ++#define DAC_CTRL_ONDACR 5 ++#define DAC_CTRL_ONDACL 4 ++#define DAC_CTRL_ONLNOR 3 ++#define DAC_CTRL_ONLNOL 2 ++#define DAC_CTRL_ONLNIR 1 ++#define DAC_CTRL_ONLNIL 0 ++ ++/* DAC left line in gain register */ ++#define DAC_LLIG 0x01 ++#define DAC_LLIG_LLIG 0 ++ ++/* DAC right line in gain register */ ++#define DAC_RLIG 0x02 ++#define DAC_RLIG_RLIG 0 ++ ++/* DAC Left Master Playback Gain Register */ ++#define DAC_LMPG 0x03 ++#define DAC_LMPG_LMPG 0 ++ ++/* DAC Right Master Playback Gain Register */ ++#define DAC_RMPG 0x04 ++#define DAC_RMPG_RMPG 0 ++ ++/* DAC Left Line Out Gain Register */ ++#define DAC_LLOG 0x05 ++#define DAC_LLOG_LLOG 0 ++ ++/* DAC Right Line Out Gain Register */ ++#define DAC_RLOG 0x06 ++#define DAC_RLOG_RLOG 0 ++ ++/* DAC Output Level Control Register */ ++#define DAC_OLC 0x07 ++#define DAC_OLC_RSHORT 7 ++#define DAC_OLC_ROLC 4 ++#define DAC_OLC_LSHORT 3 ++#define DAC_OLC_LOLC 0 ++ ++/* DAC Mixer Control Register */ ++#define DAC_MC 0x08 ++#define DAC_MC_INVR 5 ++#define DAC_MC_INVL 4 ++#define DAC_MC_RMSMIN2 3 ++#define DAC_MC_RMSMIN1 2 ++#define DAC_MC_LMSMIN2 1 ++#define DAC_MC_LMSMIN1 0 ++ ++/* DAC Clock and Sampling Frequency Control Register */ ++#define DAC_CSFC 0x09 ++#define DAC_CSFC_OVRSEL 4 ++ ++/* DAC Miscellaneous Register */ ++#define DAC_MISC 0x0A ++#define DAC_MISC_VCMCAPSEL 7 ++#define DAC_MISC_DINTSEL 4 ++#define DAC_MISC_DITHEN 3 ++#define DAC_MISC_DEEMPEN 2 ++#define DAC_MISC_NBITS 0 ++ ++/* DAC Precharge Control Register */ ++#define DAC_PRECH 0x0C ++#define DAC_PRECH_PRCHGPDRV 7 ++#define DAC_PRECH_PRCHGAUX1 6 ++#define DAC_PRECH_PRCHGLNOR 5 ++#define DAC_PRECH_PRCHGLNOL 4 ++#define DAC_PRECH_PRCHGLNIR 3 ++#define DAC_PRECH_PRCHGLNIL 2 ++#define DAC_PRECH_PRCHG 1 ++#define DAC_PRECH_ONMSTR 0 ++ ++/* DAC Auxiliary Input Gain Control Register */ ++#define DAC_AUXG 0x0D ++#define DAC_AUXG_AUXG 0 ++ ++/* DAC Reset Register */ ++#define DAC_RST 0x10 ++#define DAC_RST_RESMASK 2 ++#define DAC_RST_RESFILZ 1 ++#define DAC_RST_RSTZ 0 ++ ++/* Power Amplifier Control Register */ ++#define PA_CTRL 0x11 ++#define PA_CTRL_APAON 6 ++#define PA_CTRL_APAPRECH 5 ++#define PA_CTRL_APALP 4 ++#define PA_CTRL_APAGAIN 0 ++ ++#endif ++ diff --git a/packages/linux/linux-2.6.18/atmel-ac97c-alsa-driver.patch b/packages/linux/linux-2.6.18/atmel-ac97c-alsa-driver.patch new file mode 100644 index 0000000000..fe3d2ee209 --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-ac97c-alsa-driver.patch @@ -0,0 +1,1383 @@ +--- + sound/avr32/Kconfig | 25 + + sound/avr32/Makefile | 3 + sound/avr32/ac97c.c | 1250 +++++++++++++++++++++++++++++++++++++++++++++++++++ + sound/avr32/ac97c.h | 71 ++ + 4 files changed, 1349 insertions(+) + +Index: linux-2.6.18-avr32/sound/avr32/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/sound/avr32/Kconfig 2006-11-02 15:56:20.000000000 +0100 ++++ linux-2.6.18-avr32/sound/avr32/Kconfig 2006-11-02 16:02:29.000000000 +0100 +@@ -3,4 +3,29 @@ + menu "ALSA AVR32 devices" + depends on SND != n && AVR32 + ++config SND_ATMEL_AC97 ++ tristate "Atmel AC97 Controller Driver" ++ depends on SND ++ select SND_PCM ++ select SND_AC97_CODEC ++ help ++ ALSA sound driver for the Atmel AC97 controller. ++ ++config SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS ++ bool "Use the built-in malloc calls in the alsa driver" ++ default n ++ depends on SND_ATMEL_AC97 ++ help ++ Say Y if the built-in malloc calls in the alsa driver should be ++ used instead of the native dma_alloc_coherent and dma_free_coherent ++ function calls. Enabling this feature may break the rmmod feature. ++ ++config SND_ATMEL_AC97C_USE_PDC ++ bool "Use PDC for DMA transfers to/from the Atmel AC97 Controller" ++ default n ++ depends on SND_ATMEL_AC97 ++ help ++ Say Y if PDC (Peripheral DMA Controller) is used for DMA transfers ++ to/from the Atmel AC97C instead of using the generic DMA framework. ++ + endmenu +Index: linux-2.6.18-avr32/sound/avr32/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/sound/avr32/Makefile 2006-11-02 15:56:20.000000000 +0100 ++++ linux-2.6.18-avr32/sound/avr32/Makefile 2006-11-02 16:02:29.000000000 +0100 +@@ -1,3 +1,6 @@ + # + # Makefile for ALSA + # ++ ++snd-atmel-ac97-objs := ac97c.o ++obj-$(CONFIG_SND_ATMEL_AC97) += snd-atmel-ac97.o +Index: linux-2.6.18-avr32/sound/avr32/ac97c.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/sound/avr32/ac97c.c 2006-11-02 16:02:56.000000000 +0100 +@@ -0,0 +1,1250 @@ ++/* ++ * Driver for the Atmel AC97 Controller ++ * ++ * Copyright (C) 2005-2006 Atmel 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 ++#ifndef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS ++#include ++#endif ++ ++#include ++ ++#include "ac97c.h" ++ ++static DEFINE_MUTEX(opened_mutex); ++ ++/* module parameters */ ++static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; ++static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; ++static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; ++ ++module_param_array(index, int, NULL, 0444); ++MODULE_PARM_DESC(index, "Index value for AC97 controller"); ++module_param_array(id, charp, NULL, 0444); ++MODULE_PARM_DESC(id, "ID string for AC97 controller"); ++module_param_array(enable, bool, NULL, 0444); ++MODULE_PARM_DESC(enable, "Enable AC97 controller"); ++ ++#ifndef CONFIG_SND_ATMEL_AC97C_USE_PDC ++#include ++ ++struct atmel_ac97_dma_info { ++ struct dma_request_cyclic req_tx; ++ struct dma_request_cyclic req_rx; ++ unsigned short rx_periph_id; ++ unsigned short tx_periph_id; ++}; ++#endif ++ ++ ++typedef struct atmel_ac97 { ++ spinlock_t lock; ++ void __iomem *regs; ++ int period; ++ ++ snd_pcm_substream_t *playback_substream; ++ snd_pcm_substream_t *capture_substream; ++ snd_card_t *card; ++ snd_pcm_t *pcm; ++ ac97_t *ac97; ++ ac97_bus_t *ac97_bus; ++ int irq; ++ int opened; ++ u64 cur_format; ++ unsigned int cur_rate; ++ struct clk *mck; ++ struct platform_device *pdev; ++ struct atmel_ac97_dma_info dma; ++} atmel_ac97_t; ++#define get_chip(card) ((atmel_ac97_t *)(card)->private_data) ++ ++#define ac97c_writel(chip, reg, val) \ ++ __raw_writel((val), (chip)->regs + AC97C_##reg) ++#define ac97c_readl(chip, reg) \ ++ __raw_readl((chip)->regs + AC97C_##reg) ++ ++/* PCM part */ ++ ++static snd_pcm_hardware_t snd_atmel_ac97_playback_hw = { ++ .info = (SNDRV_PCM_INFO_INTERLEAVED ++ |SNDRV_PCM_INFO_MMAP ++ |SNDRV_PCM_INFO_MMAP_VALID ++ |SNDRV_PCM_INFO_BLOCK_TRANSFER ++ |SNDRV_PCM_INFO_JOINT_DUPLEX), ++ .formats = (SNDRV_PCM_FMTBIT_S16_BE|SNDRV_PCM_FMTBIT_S16_LE), ++ .rates = (SNDRV_PCM_RATE_CONTINUOUS), ++ .rate_min = 4000, ++ .rate_max = 48000, ++ .channels_min = 1, ++ .channels_max = 6, ++ .buffer_bytes_max = 64*1024, ++ .period_bytes_min = 512, ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ .period_bytes_max = 64*1024, ++#else ++ .period_bytes_max = 4095, ++#endif ++ .periods_min = 8, ++ .periods_max = 1024, ++}; ++ ++static snd_pcm_hardware_t snd_atmel_ac97_capture_hw = { ++ .info = (SNDRV_PCM_INFO_INTERLEAVED ++ |SNDRV_PCM_INFO_MMAP ++ |SNDRV_PCM_INFO_MMAP_VALID ++ |SNDRV_PCM_INFO_BLOCK_TRANSFER ++ |SNDRV_PCM_INFO_JOINT_DUPLEX), ++ .formats = (SNDRV_PCM_FMTBIT_S16_BE|SNDRV_PCM_FMTBIT_S16_LE), ++ .rates = (SNDRV_PCM_RATE_CONTINUOUS), ++ .rate_min = 4000, ++ .rate_max = 48000, ++ .channels_min = 1, ++ .channels_max = 2, ++ .buffer_bytes_max = 64*1024, ++ .period_bytes_min = 512, ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ .period_bytes_max = 64*1024, ++#else ++ .period_bytes_max = 4095, ++#endif ++ .periods_min = 8, ++ .periods_max = 1024, ++}; ++ ++/* Joint full duplex variables */ ++unsigned int hw_rates[1]; ++unsigned int hw_formats[1]; ++struct snd_pcm_hw_constraint_list hw_constraint_rates; ++struct snd_pcm_hw_constraint_list hw_constraint_formats; ++ ++/* ++ * PCM functions ++ */ ++static int ++snd_atmel_ac97_playback_open(snd_pcm_substream_t *substream) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ snd_pcm_runtime_t *runtime = substream->runtime; ++ ++ mutex_lock(&opened_mutex); ++ chip->opened++; ++ runtime->hw = snd_atmel_ac97_playback_hw; ++ if (chip->cur_rate) { ++ runtime->hw.rate_min = chip->cur_rate; ++ runtime->hw.rate_max = chip->cur_rate; ++ } ++ if (chip->cur_format) ++ runtime->hw.formats = (1ULL<cur_format); ++ mutex_unlock(&opened_mutex); ++ chip->playback_substream = substream; ++ chip->period = 0; ++ return 0; ++} ++ ++static int ++snd_atmel_ac97_capture_open(snd_pcm_substream_t *substream) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ snd_pcm_runtime_t *runtime = substream->runtime; ++ ++ mutex_lock(&opened_mutex); ++ chip->opened++; ++ runtime->hw = snd_atmel_ac97_capture_hw; ++ if (chip->cur_rate) { ++ runtime->hw.rate_min = chip->cur_rate; ++ runtime->hw.rate_max = chip->cur_rate; ++ } ++ if (chip->cur_format) ++ runtime->hw.formats = (1ULL<cur_format); ++ mutex_unlock(&opened_mutex); ++ chip->capture_substream = substream; ++ chip->period = 0; ++ return 0; ++} ++ ++static int snd_atmel_ac97_playback_close(snd_pcm_substream_t *substream) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ mutex_lock(&opened_mutex); ++ chip->opened--; ++ if (!chip->opened) { ++ chip->cur_rate = 0; ++ chip->cur_format = 0; ++ } ++ mutex_unlock(&opened_mutex); ++ return 0; ++} ++ ++static int snd_atmel_ac97_capture_close(snd_pcm_substream_t *substream) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ mutex_lock(&opened_mutex); ++ chip->opened--; ++ if (!chip->opened) { ++ chip->cur_rate = 0; ++ chip->cur_format = 0; ++ } ++ mutex_unlock(&opened_mutex); ++ return 0; ++} ++ ++static int snd_atmel_ac97_playback_hw_params(snd_pcm_substream_t *substream, ++ snd_pcm_hw_params_t *hw_params) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS ++ int err; ++ err = snd_pcm_lib_malloc_pages(substream, ++ params_buffer_bytes(hw_params)); ++ ++ if (err < 0) ++ return err; ++ ++ /* Set restrictions to params */ ++ mutex_lock(&opened_mutex); ++ chip->cur_rate = params_rate(hw_params); ++ chip->cur_format = params_format(hw_params); ++ mutex_unlock(&opened_mutex); ++ ++ return err; ++#else ++ int pg; ++ size_t size = params_buffer_bytes(hw_params); ++ struct snd_pcm_runtime *runtime; ++ struct snd_dma_buffer *dmab = NULL; ++ ++ substream->dma_buffer.dev.type = SNDRV_DMA_TYPE_DEV; ++ snd_assert(substream != NULL, return -EINVAL); ++ runtime = substream->runtime; ++ snd_assert(runtime != NULL, return -EINVAL); ++ ++ /* Set restrictions to params */ ++ mutex_lock(&opened_mutex); ++ chip->cur_rate = params_rate(hw_params); ++ chip->cur_format = params_format(hw_params); ++ mutex_unlock(&opened_mutex); ++ ++ /* check if buffer is already allocated */ ++ if (runtime->dma_buffer_p) { ++ size_t size_previouse; ++ int pg_previouse; ++ ++ /* new buffer is smaler than previouse allocated buffer */ ++ if (runtime->dma_buffer_p->bytes >= size) { ++ runtime->dma_bytes = size; ++ return 0; /* don't change buffer size */ ++ } ++ ++ size_previouse = runtime->dma_buffer_p->bytes; ++ pg_previouse = get_order(size_previouse); ++ ++ dma_free_coherent(runtime->dma_buffer_p->dev.dev, ++ PAGE_SIZE << pg_previouse, ++ runtime->dma_buffer_p->area, ++ runtime->dma_buffer_p->addr); ++ ++ kfree(runtime->dma_buffer_p); ++ } ++ ++ dmab = kzalloc(sizeof(*dmab), GFP_KERNEL); ++ if (!dmab) ++ return -ENOMEM; ++ ++ dmab->dev = substream->dma_buffer.dev; ++ dmab->bytes = 0; ++ ++ pg = get_order(size); ++ ++ dmab->area = dma_alloc_coherent( ++ substream->dma_buffer.dev.dev, ++ PAGE_SIZE << pg, ++ (dma_addr_t *)&dmab->addr, ++ GFP_KERNEL); ++ ++ if (!dmab->area) { ++ kfree(dmab); ++ return -ENOMEM; ++ } ++ ++ dmab->bytes = size; ++ ++ snd_pcm_set_runtime_buffer(substream, dmab); ++ runtime->dma_bytes = size; ++ return 1; ++#endif ++} ++ ++static int snd_atmel_ac97_capture_hw_params(snd_pcm_substream_t *substream, ++ snd_pcm_hw_params_t *hw_params) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS ++ int err; ++ err = snd_pcm_lib_malloc_pages(substream, ++ params_buffer_bytes(hw_params)); ++ ++ if (err < 0) ++ return err; ++ ++ /* Set restrictions to params */ ++ mutex_lock(&opened_mutex); ++ chip->cur_rate = params_rate(hw_params); ++ chip->cur_format = params_format(hw_params); ++ mutex_unlock(&opened_mutex); ++ ++ return err; ++#else ++ int pg; ++ size_t size = params_buffer_bytes(hw_params); ++ struct snd_pcm_runtime *runtime; ++ struct snd_dma_buffer *dmab = NULL; ++ ++ substream->dma_buffer.dev.type = SNDRV_DMA_TYPE_DEV; ++ snd_assert(substream != NULL, return -EINVAL); ++ runtime = substream->runtime; ++ snd_assert(runtime != NULL, return -EINVAL); ++ ++ /* Set restrictions to params */ ++ mutex_lock(&opened_mutex); ++ chip->cur_rate = params_rate(hw_params); ++ chip->cur_format = params_format(hw_params); ++ mutex_unlock(&opened_mutex); ++ ++ /* check if buffer is already allocated */ ++ if (runtime->dma_buffer_p) { ++ size_t size_previouse; ++ int pg_previouse; ++ ++ /* new buffer is smaler than previouse allocated buffer */ ++ if (runtime->dma_buffer_p->bytes >= size) { ++ runtime->dma_bytes = size; ++ return 0; /* don't change buffer size */ ++ } ++ ++ size_previouse = runtime->dma_buffer_p->bytes; ++ pg_previouse = get_order(size_previouse); ++ ++ dma_free_coherent(runtime->dma_buffer_p->dev.dev, ++ PAGE_SIZE << pg_previouse, ++ runtime->dma_buffer_p->area, ++ runtime->dma_buffer_p->addr); ++ ++ kfree(runtime->dma_buffer_p); ++ } ++ ++ dmab = kzalloc(sizeof(*dmab), GFP_KERNEL); ++ if (!dmab) ++ return -ENOMEM; ++ ++ dmab->dev = substream->dma_buffer.dev; ++ dmab->bytes = 0; ++ ++ pg = get_order(size); ++ ++ dmab->area = dma_alloc_coherent( ++ substream->dma_buffer.dev.dev, ++ PAGE_SIZE << pg, ++ (dma_addr_t *)&dmab->addr, ++ GFP_KERNEL); ++ ++ if (!dmab->area) { ++ kfree(dmab); ++ return -ENOMEM; ++ } ++ ++ dmab->bytes = size; ++ ++ snd_pcm_set_runtime_buffer(substream, dmab); ++ runtime->dma_bytes = size; ++ return 1; ++#endif ++} ++ ++static int snd_atmel_ac97_playback_hw_free(snd_pcm_substream_t *substream) ++{ ++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS ++ return snd_pcm_lib_free_pages(substream); ++#else ++ int pg; ++ struct snd_pcm_runtime *runtime; ++ struct snd_dma_buffer *dmab = NULL; ++ ++ snd_assert(substream != NULL, return -EINVAL); ++ runtime = substream->runtime; ++ snd_assert(runtime != NULL, return -EINVAL); ++ dmab = runtime->dma_buffer_p; ++ ++ if (!dmab) ++ return 0; ++ ++ if (!dmab->area) ++ return 0; ++ ++ pg = get_order(dmab->bytes); ++ dma_free_coherent(dmab->dev.dev, PAGE_SIZE << pg, dmab->area, dmab->addr); ++ kfree(runtime->dma_buffer_p); ++ snd_pcm_set_runtime_buffer(substream, NULL); ++ return 0; ++#endif ++} ++ ++static int snd_atmel_ac97_capture_hw_free(snd_pcm_substream_t *substream) ++{ ++ ++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS ++ return snd_pcm_lib_free_pages(substream); ++#else ++ int pg; ++ struct snd_pcm_runtime *runtime; ++ struct snd_dma_buffer *dmab = NULL; ++ ++ snd_assert(substream != NULL, return -EINVAL); ++ runtime = substream->runtime; ++ snd_assert(runtime != NULL, return -EINVAL); ++ dmab = runtime->dma_buffer_p; ++ ++ if (!dmab) ++ return 0; ++ ++ if (!dmab->area) ++ return 0; ++ ++ pg = get_order(dmab->bytes); ++ dma_free_coherent(dmab->dev.dev, PAGE_SIZE << pg, dmab->area, dmab->addr); ++ kfree(runtime->dma_buffer_p); ++ snd_pcm_set_runtime_buffer(substream, NULL); ++ return 0; ++#endif ++} ++ ++static int snd_atmel_ac97_playback_prepare(snd_pcm_substream_t *substream) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ struct platform_device *pdev = chip->pdev; ++ snd_pcm_runtime_t *runtime = substream->runtime; ++ int block_size = frames_to_bytes(runtime, runtime->period_size); ++ unsigned long word = 0; ++ unsigned long buffer_size = 0; ++ ++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr, ++ block_size * 2, DMA_TO_DEVICE); ++ ++ /* Assign slots to channels */ ++ switch (substream->runtime->channels) { ++ case 1: ++ word |= AC97C_CH_ASSIGN(PCM_LEFT, A); ++ break; ++ case 2: ++ /* Assign Left and Right slot to Channel A */ ++ word |= AC97C_CH_ASSIGN(PCM_LEFT, A) ++ | AC97C_CH_ASSIGN(PCM_RIGHT, A); ++ break; ++ default: ++ /* TODO: support more than two channels */ ++ return -EINVAL; ++ break; ++ } ++ ac97c_writel(chip, OCA, word); ++ ++ /* Configure sample format and size */ ++ word = AC97C_CMR_PDCEN | AC97C_CMR_SIZE_16; ++ ++ switch (runtime->format){ ++ case SNDRV_PCM_FORMAT_S16_LE: ++ word |= AC97C_CMR_CEM_LITTLE; ++ break; ++ case SNDRV_PCM_FORMAT_S16_BE: ++ default: ++ word &= ~AC97C_CMR_CEM_LITTLE; ++ break; ++ } ++ ++ ac97c_writel(chip, CAMR, word); ++ ++ /* Set variable rate if needed */ ++ if (runtime->rate != 48000) { ++ word = ac97c_readl(chip, MR); ++ word |= AC97C_MR_VRA; ++ ac97c_writel(chip, MR, word); ++ } else { ++ /* Clear Variable Rate Bit */ ++ word = ac97c_readl(chip, MR); ++ word &= ~AC97C_MR_VRA; ++ ac97c_writel(chip, MR, word); ++ } ++ ++ /* Set rate */ ++ snd_ac97_set_rate(chip->ac97, AC97_PCM_FRONT_DAC_RATE, runtime->rate); ++ ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ /* Initialize and start the PDC */ ++ ac97c_writel(chip, CATPR, runtime->dma_addr); ++ ac97c_writel(chip, CATCR, block_size / 4); ++ ac97c_writel(chip, CATNPR, runtime->dma_addr + block_size); ++ ac97c_writel(chip, CATNCR, block_size / 4); ++ ac97c_writel(chip, PTCR, PDC_PTCR_TXTEN); ++ /* Enable Channel A interrupts */ ++ ac97c_writel(chip, IER, AC97C_SR_CAEVT); ++#else ++ buffer_size = frames_to_bytes(runtime, runtime->period_size) * ++ runtime->periods; ++ ++ chip->dma.req_tx.buffer_size = buffer_size; ++ chip->dma.req_tx.periods = runtime->periods; ++ ++ BUG_ON(chip->dma.req_tx.buffer_size != ++ (chip->dma.req_tx.periods * ++ frames_to_bytes(runtime, runtime->period_size))); ++ ++ chip->dma.req_tx.buffer_start = runtime->dma_addr; ++ chip->dma.req_tx.data_reg = (dma_addr_t)(chip->regs + AC97C_CATHR + 2); ++ chip->dma.req_tx.periph_id = chip->dma.tx_periph_id; ++ chip->dma.req_tx.direction = DMA_DIR_MEM_TO_PERIPH; ++ chip->dma.req_tx.width = DMA_WIDTH_16BIT; ++ chip->dma.req_tx.dev_id = chip; ++#endif ++ ++ return 0; ++} ++ ++static int snd_atmel_ac97_capture_prepare(snd_pcm_substream_t *substream) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ struct platform_device *pdev = chip->pdev; ++ snd_pcm_runtime_t *runtime = substream->runtime; ++ int block_size = frames_to_bytes(runtime, runtime->period_size); ++ unsigned long word = 0; ++ unsigned long buffer_size = 0; ++ ++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr, ++ block_size * 2, DMA_FROM_DEVICE); ++ ++ /* Assign slots to channels */ ++ switch (substream->runtime->channels) { ++ case 1: ++ word |= AC97C_CH_ASSIGN(PCM_LEFT, A); ++ break; ++ case 2: ++ /* Assign Left and Right slot to Channel A */ ++ word |= AC97C_CH_ASSIGN(PCM_LEFT, A) ++ | AC97C_CH_ASSIGN(PCM_RIGHT, A); ++ break; ++ default: ++ /* TODO: support more than two channels */ ++ return -EINVAL; ++ break; ++ } ++ ac97c_writel(chip, ICA, word); ++ ++ /* Configure sample format and size */ ++ word = AC97C_CMR_PDCEN | AC97C_CMR_SIZE_16; ++ ++ switch (runtime->format) { ++ case SNDRV_PCM_FORMAT_S16_LE: ++ word |= AC97C_CMR_CEM_LITTLE; ++ break; ++ case SNDRV_PCM_FORMAT_S16_BE: ++ default: ++ word &= ~(AC97C_CMR_CEM_LITTLE); ++ break; ++ } ++ ++ ac97c_writel(chip, CAMR, word); ++ ++ /* Set variable rate if needed */ ++ if (runtime->rate != 48000) { ++ word = ac97c_readl(chip, MR); ++ word |= AC97C_MR_VRA; ++ ac97c_writel(chip, MR, word); ++ } else { ++ /* Clear Variable Rate Bit */ ++ word = ac97c_readl(chip, MR); ++ word &= ~(AC97C_MR_VRA); ++ ac97c_writel(chip, MR, word); ++ } ++ ++ /* Set rate */ ++ snd_ac97_set_rate(chip->ac97, AC97_PCM_LR_ADC_RATE, runtime->rate); ++ ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ /* Initialize and start the PDC */ ++ ac97c_writel(chip, CARPR, runtime->dma_addr); ++ ac97c_writel(chip, CARCR, block_size / 4); ++ ac97c_writel(chip, CARNPR, runtime->dma_addr + block_size); ++ ac97c_writel(chip, CARNCR, block_size / 4); ++ ac97c_writel(chip, PTCR, PDC_PTCR_RXEN); ++ /* Enable Channel A interrupts */ ++ ac97c_writel(chip, IER, AC97C_SR_CAEVT); ++#else ++ buffer_size = frames_to_bytes(runtime, runtime->period_size) * ++ runtime->periods; ++ ++ chip->dma.req_rx.buffer_size = buffer_size; ++ chip->dma.req_rx.periods = runtime->periods; ++ ++ BUG_ON(chip->dma.req_rx.buffer_size != ++ (chip->dma.req_rx.periods * ++ frames_to_bytes(runtime, runtime->period_size))); ++ ++ chip->dma.req_rx.buffer_start = runtime->dma_addr; ++ chip->dma.req_rx.data_reg = (dma_addr_t)(chip->regs + AC97C_CARHR + 2); ++ chip->dma.req_rx.periph_id = chip->dma.rx_periph_id; ++ chip->dma.req_rx.direction = DMA_DIR_PERIPH_TO_MEM; ++ chip->dma.req_rx.width = DMA_WIDTH_16BIT; ++ chip->dma.req_rx.dev_id = chip; ++#endif ++ ++ return 0; ++} ++ ++static int snd_atmel_ac97_playback_trigger(snd_pcm_substream_t *substream, int cmd) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ unsigned long camr; ++ int flags, err = 0; ++ ++ spin_lock_irqsave(&chip->lock, flags); ++ camr = ac97c_readl(chip, CAMR); ++ ++ switch (cmd) { ++ case SNDRV_PCM_TRIGGER_START: ++ err = dma_prepare_request_cyclic(chip->dma.req_tx.req.dmac, ++ &chip->dma.req_tx); ++ dma_start_request(chip->dma.req_tx.req.dmac, ++ chip->dma.req_tx.req.channel); ++ camr |= (AC97C_CMR_CENA ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ |AC97C_CMR_TXRDY ++#endif ++ ); ++ break; ++ case SNDRV_PCM_TRIGGER_STOP: ++ err = dma_stop_request(chip->dma.req_tx.req.dmac, ++ chip->dma.req_tx.req.channel); ++ if (chip->opened <= 1) { ++ camr &= ~(AC97C_CMR_CENA ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ |AC97C_CMR_TXRDY ++#endif ++ ); ++ } ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ else { ++ camr &= ~(AC97C_CMR_TXRDY); ++ } ++#endif ++ break; ++ default: ++ err = -EINVAL; ++ break; ++ } ++ ++ ac97c_writel(chip, CAMR, camr); ++ ++ spin_unlock_irqrestore(&chip->lock, flags); ++ return err; ++} ++ ++static int snd_atmel_ac97_capture_trigger(snd_pcm_substream_t *substream, int cmd) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ unsigned long camr; ++ int flags, err = 0; ++ ++ spin_lock_irqsave(&chip->lock, flags); ++ camr = ac97c_readl(chip, CAMR); ++ ++ switch (cmd) { ++ case SNDRV_PCM_TRIGGER_START: ++ err = dma_prepare_request_cyclic(chip->dma.req_rx.req.dmac, ++ &chip->dma.req_rx); ++ dma_start_request(chip->dma.req_rx.req.dmac, ++ chip->dma.req_rx.req.channel); ++ camr |= (AC97C_CMR_CENA ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ | AC97C_CMR_RXRDY ++#endif ++ ); ++ break; ++ case SNDRV_PCM_TRIGGER_STOP: ++ err = dma_stop_request(chip->dma.req_rx.req.dmac, ++ chip->dma.req_rx.req.channel); ++ mutex_lock(&opened_mutex); ++ if (chip->opened <= 1) { ++ camr &= ~(AC97C_CMR_CENA ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ | AC97C_CMR_RXRDY ++#endif ++ ); ++ } ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ else { ++ camr &= ~(AC97C_CSR_RXRDY); ++ } ++#endif ++ mutex_unlock(&opened_mutex); ++ break; ++ default: ++ err = -EINVAL; ++ break; ++ } ++ ++ ac97c_writel(chip, CAMR, camr); ++ ++ spin_unlock_irqrestore(&chip->lock, flags); ++ return err; ++} ++ ++static snd_pcm_uframes_t snd_atmel_ac97_playback_pointer(snd_pcm_substream_t *substream) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ snd_pcm_runtime_t *runtime = substream->runtime; ++ snd_pcm_uframes_t pos; ++ unsigned long bytes; ++ ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ bytes = ac97c_readl(chip, CATPR) - runtime->dma_addr; ++#else ++ bytes = (dma_get_current_pos ++ (chip->dma.req_tx.req.dmac, ++ chip->dma.req_tx.req.channel) - runtime->dma_addr); ++#endif ++ pos = bytes_to_frames(runtime, bytes); ++ if (pos >= runtime->buffer_size) ++ pos -= runtime->buffer_size; ++ ++ return pos; ++} ++ ++static snd_pcm_uframes_t snd_atmel_ac97_capture_pointer(snd_pcm_substream_t *substream) ++{ ++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream); ++ snd_pcm_runtime_t *runtime = substream->runtime; ++ snd_pcm_uframes_t pos; ++ unsigned long bytes; ++ ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ bytes = ac97c_readl(chip, CARPR) - runtime->dma_addr; ++#else ++ bytes = (dma_get_current_pos ++ (chip->dma.req_rx.req.dmac,chip->dma.req_rx.req.channel) - ++ runtime->dma_addr); ++#endif ++ pos = bytes_to_frames(runtime, bytes); ++ if (pos >= runtime->buffer_size) ++ pos -= runtime->buffer_size; ++ ++ ++ return pos; ++} ++ ++static snd_pcm_ops_t atmel_ac97_playback_ops = { ++ .open = snd_atmel_ac97_playback_open, ++ .close = snd_atmel_ac97_playback_close, ++ .ioctl = snd_pcm_lib_ioctl, ++ .hw_params = snd_atmel_ac97_playback_hw_params, ++ .hw_free = snd_atmel_ac97_playback_hw_free, ++ .prepare = snd_atmel_ac97_playback_prepare, ++ .trigger = snd_atmel_ac97_playback_trigger, ++ .pointer = snd_atmel_ac97_playback_pointer, ++}; ++ ++static snd_pcm_ops_t atmel_ac97_capture_ops = { ++ .open = snd_atmel_ac97_capture_open, ++ .close = snd_atmel_ac97_capture_close, ++ .ioctl = snd_pcm_lib_ioctl, ++ .hw_params = snd_atmel_ac97_capture_hw_params, ++ .hw_free = snd_atmel_ac97_capture_hw_free, ++ .prepare = snd_atmel_ac97_capture_prepare, ++ .trigger = snd_atmel_ac97_capture_trigger, ++ .pointer = snd_atmel_ac97_capture_pointer, ++}; ++ ++static struct ac97_pcm atmel_ac97_pcm_defs[] __devinitdata = { ++ /* Playback */ ++ { ++ .exclusive = 1, ++ .r = { { ++ .slots = ((1 << AC97_SLOT_PCM_LEFT) ++ | (1 << AC97_SLOT_PCM_RIGHT) ++ | (1 << AC97_SLOT_PCM_CENTER) ++ | (1 << AC97_SLOT_PCM_SLEFT) ++ | (1 << AC97_SLOT_PCM_SRIGHT) ++ | (1 << AC97_SLOT_LFE)), ++ } } ++ }, ++ /* PCM in */ ++ { ++ .stream = 1, ++ .exclusive = 1, ++ .r = { { ++ .slots = ((1 << AC97_SLOT_PCM_LEFT) ++ | (1 << AC97_SLOT_PCM_RIGHT)), ++ } } ++ }, ++ /* Mic in */ ++ { ++ .stream = 1, ++ .exclusive = 1, ++ .r = { { ++ .slots = (1<ac97_bus, ++ ARRAY_SIZE(atmel_ac97_pcm_defs), ++ atmel_ac97_pcm_defs); ++ if (err) ++ return err; ++ ++ err = snd_pcm_new(chip->card, "Atmel-AC97", 0, 1, 1, &pcm); ++ if (err) ++ return err; ++ ++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, ++ &atmel_ac97_playback_ops); ++ ++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, ++ &atmel_ac97_capture_ops); ++ ++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS ++ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, ++ &chip->pdev->dev, ++ 128 * 1024, 128 * 1024); ++#endif ++ ++ pcm->private_data = chip; ++ pcm->info_flags = 0; ++ strcpy(pcm->name, "Atmel-AC97"); ++ chip->pcm = pcm; ++ ++ return 0; ++} ++ ++/* Mixer part */ ++static int snd_atmel_ac97_mixer_new(atmel_ac97_t *chip) ++{ ++ int err; ++ ac97_template_t template; ++ ++ memset(&template, 0, sizeof(template)); ++ template.private_data = chip; ++ err = snd_ac97_mixer(chip->ac97_bus, &template, &chip->ac97); ++ ++ return err; ++} ++ ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++static irqreturn_t snd_atmel_ac97_interrupt(int irq, void *dev_id, ++ struct pt_regs *regs) ++{ ++ atmel_ac97_t *chip = dev_id; ++ unsigned long status; ++ ++ status = ac97c_readl(chip, SR); ++ ++ if (status & AC97C_SR_CAEVT) { ++ snd_pcm_runtime_t *runtime; ++ int offset, next_period, block_size; ++ unsigned long casr; ++ ++ /* FIXME: separate playback from capture */ ++ runtime = chip->playback_substream->runtime; ++ block_size = frames_to_bytes(runtime, runtime->period_size); ++ ++ casr = ac97c_readl(chip, CASR); ++ ++ if (casr & AC97C_CSR_ENDTX) { ++ chip->period++; ++ if (chip->period == runtime->periods) ++ chip->period = 0; ++ next_period = chip->period + 1; ++ if (next_period == runtime->periods) ++ next_period = 0; ++ ++ offset = block_size * next_period; ++ ++ ac97c_writel(chip, CATNPR, ++ runtime->dma_addr + offset); ++ ac97c_writel(chip, CATNCR, block_size / 4); ++ ++ snd_pcm_period_elapsed(chip->playback_substream); ++ } ++ else if (casr & AC97C_CSR_ENDRX) { ++ chip->period++; ++ if (chip->period == runtime->periods) ++ chip->period = 0; ++ next_period = chip->period + 1; ++ if (next_period == runtime->periods) ++ next_period = 0; ++ ++ offset = block_size * next_period; ++ ++ ac97c_writel(chip, CARNPR, ++ runtime->dma_addr + offset); ++ ac97c_writel(chip, CARNCR, block_size / 4); ++ ++ snd_pcm_period_elapsed(chip->capture_substream); ++ } else { ++ snd_printk(KERN_INFO ++ "atmel-ac97: spurious interrupt, status = 0x%08lx\n", ++ (unsigned long)casr); ++ } ++ } else { ++ snd_printk(KERN_INFO ++ "atmel-ac97: spurious interrupt, status = 0x%08lx\n", ++ status); ++ } ++ ++ (volatile int)ac97c_readl(chip, SR); ++ ++ return IRQ_HANDLED; ++} ++ ++#else ++ ++static void atmel_ac97_error(struct dma_request *_req) ++{ ++ struct dma_request_cyclic *req = to_dma_request_cyclic(_req); ++ ++ printk(KERN_WARNING ++ "DMA Controller error, channel %d (AC97C)\n", ++ req->req.channel); ++} ++ ++static void atmel_ac97_block_complete(struct dma_request *_req) ++{ ++ struct dma_request_cyclic *req = to_dma_request_cyclic(_req); ++ atmel_ac97_t *chip = req->dev_id; ++ if (req->periph_id == chip->dma.tx_periph_id) ++ snd_pcm_period_elapsed(chip->playback_substream); ++ else ++ snd_pcm_period_elapsed(chip->capture_substream); ++} ++ ++#endif ++ ++/* CODEC part */ ++ ++static void snd_atmel_ac97_write(ac97_t *ac97, unsigned short reg, ++ unsigned short val) ++{ ++ atmel_ac97_t *chip = ac97->private_data; ++ unsigned long word; ++ int timeout = 40; ++ ++ word = (reg & 0x7f) << 16 | val; ++ ++ do { ++ if (ac97c_readl(chip, COSR) & AC97C_CSR_TXRDY) { ++ ac97c_writel(chip, COTHR, word); ++ return; ++ } ++ udelay(1); ++ } while (--timeout); ++ ++ snd_printk(KERN_WARNING "atmel-ac97: codec write timeout\n"); ++} ++ ++static unsigned short snd_atmel_ac97_read(ac97_t *ac97, ++ unsigned short reg) ++{ ++ atmel_ac97_t *chip = ac97->private_data; ++ unsigned long word; ++ int timeout = 40; ++ int write = 10; ++ ++ word = (0x80 | (reg & 0x7f)) << 16; ++ ++ if ((ac97c_readl(chip, COSR) & AC97C_CSR_RXRDY) != 0) ++ ac97c_readl(chip, CORHR); ++ ++retry_write: ++ timeout = 40; ++ ++ do { ++ if ((ac97c_readl(chip, COSR) & AC97C_CSR_TXRDY) != 0) { ++ ac97c_writel(chip, COTHR, word); ++ goto read_reg; ++ } ++ mdelay(10); ++ } while (--timeout); ++ ++ if (!--write) ++ goto timed_out; ++ goto retry_write; ++ ++read_reg: ++ do { ++ if ((ac97c_readl(chip, COSR) & AC97C_CSR_RXRDY) != 0){ ++ unsigned short val = ac97c_readl(chip, CORHR); ++ return val; ++ } ++ mdelay(10); ++ } while (--timeout); ++ ++ if (!--write) ++ goto timed_out; ++ goto retry_write; ++ ++timed_out: ++ snd_printk(KERN_INFO "atmel-ac97: codec read timeout\n"); ++ return 0xffff; ++} ++ ++static void snd_atmel_ac97_reset(atmel_ac97_t *chip) ++{ ++ /* TODO: Perform hard reset of codec as well */ ++ ac97c_writel(chip, MR, AC97C_MR_WRST); ++ mdelay(1); ++ ac97c_writel(chip, MR, AC97C_MR_ENA); ++} ++ ++static void snd_atmel_ac97_destroy(snd_card_t *card) ++{ ++ atmel_ac97_t *chip = get_chip(card); ++ ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ if (chip->irq != -1) ++ free_irq(chip->irq, chip); ++#endif ++ if (chip->regs) ++ iounmap(chip->regs); ++ ++ if (chip->mck) { ++ clk_disable(chip->mck); ++ clk_put(chip->mck); ++ } ++ ++#ifndef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ if (chip->dma.req_tx.req.dmac){ ++ dma_release_channel(chip->dma.req_tx.req.dmac, ++ chip->dma.req_tx.req.channel); ++ } ++ if (chip->dma.req_rx.req.dmac) { ++ dma_release_channel(chip->dma.req_rx.req.dmac, ++ chip->dma.req_rx.req.channel); ++ } ++#endif ++} ++ ++static int __devinit snd_atmel_ac97_create(snd_card_t *card, ++ struct platform_device *pdev) ++{ ++ static ac97_bus_ops_t ops = { ++ .write = snd_atmel_ac97_write, ++ .read = snd_atmel_ac97_read, ++ }; ++ atmel_ac97_t *chip = get_chip(card); ++ struct resource *regs; ++ struct clk *mck; ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ int irq; ++#endif ++ int err; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) ++ return -ENXIO; ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ irq = platform_get_irq(pdev, 0); ++ if (irq < 0) ++ return irq; ++#endif ++ ++ mck = clk_get(&pdev->dev, "mck"); ++ if (IS_ERR(mck)) ++ return PTR_ERR(mck); ++ clk_enable(mck); ++ chip->mck = mck; ++ ++ card->private_free = snd_atmel_ac97_destroy; ++ ++ spin_lock_init(&chip->lock); ++ chip->card = card; ++ chip->pdev = pdev; ++ chip->irq = -1; ++ ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ err = request_irq(irq, snd_atmel_ac97_interrupt, 0, ++ "ac97", chip); ++ if (err) { ++ snd_printk("unable to request IRQ%d\n", irq); ++ return err; ++ } ++ chip->irq = irq; ++#endif ++ ++ chip->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!chip->regs) ++ return -ENOMEM; ++ ++ snd_card_set_dev(card, &pdev->dev); ++ ++ err = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus); ++ ++ return err; ++} ++ ++static int __devinit snd_atmel_ac97_probe(struct platform_device *pdev) ++{ ++ static int dev; ++ snd_card_t *card; ++ atmel_ac97_t *chip; ++ int err; ++ int ch; ++ ++ if (dev >= SNDRV_CARDS) ++ return -ENODEV; ++ if (!enable[dev]) { ++ dev++; ++ return -ENOENT; ++ } ++ ++ err = -ENOMEM; ++ ++ mutex_init(&opened_mutex); ++ ++ card = snd_card_new(index[dev], id[dev], THIS_MODULE, ++ sizeof(atmel_ac97_t)); ++ if (!card) ++ goto out; ++ chip = get_chip(card); ++ ++ err = snd_atmel_ac97_create(card, pdev); ++ if (err) ++ goto out_free_card; ++ ++ snd_atmel_ac97_reset(chip); ++ ++ err = snd_atmel_ac97_mixer_new(chip); ++ if (err) ++ goto out_free_card; ++ ++ err = snd_atmel_ac97_pcm_new(chip); ++ if (err) ++ goto out_free_card; ++ ++#ifndef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ /* TODO: Get this information from the platform device */ ++ chip->dma.req_tx.req.dmac = find_dma_controller(0); ++ if (!chip->dma.req_tx.req.dmac) { ++ printk(KERN_ERR ++ "atmel-ac97c: No DMA controller for TX, aborting\n"); ++ goto out_free_card; ++ } ++ chip->dma.req_rx.req.dmac = find_dma_controller(0); ++ if (!chip->dma.req_rx.req.dmac) { ++ snd_printk(KERN_ERR ++ "atmel-ac97c: No DMA controller available for RX, aborting\n"); ++ goto out_free_card; ++ } ++ ++ chip->dma.rx_periph_id = 3; ++ chip->dma.tx_periph_id = 4; ++ ++ ch = dma_alloc_channel(chip->dma.req_tx.req.dmac); ++ if (ch < 0) { ++ printk(KERN_ERR ++ "atmel-ac97c: Unable to allocate TX DMA channel, aborting\n"); ++ goto out_free_card; ++ } ++ chip->dma.req_tx.req.channel = ch; ++ chip->dma.req_tx.width = DMA_WIDTH_16BIT; ++ chip->dma.req_tx.req.block_complete = atmel_ac97_block_complete; ++ chip->dma.req_tx.req.error = atmel_ac97_error; ++ ++ ch = dma_alloc_channel(chip->dma.req_rx.req.dmac); ++ if (ch < 0) { ++ snd_printk(KERN_ERR ++ "atmel-ac97c: Unable to allocate RX DMA channel, aborting\n"); ++ goto out_free_card; ++ } ++ chip->dma.req_rx.req.channel = ch; ++ chip->dma.req_rx.width = DMA_WIDTH_16BIT; ++ chip->dma.req_rx.req.block_complete = atmel_ac97_block_complete; ++ chip->dma.req_rx.req.error = atmel_ac97_error; ++#endif ++ ++ strcpy(card->driver, "ac97c"); ++ strcpy(card->shortname, "Atmel-AC97"); ++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC ++ sprintf(card->longname, "Atmel AVR32 AC97 Controller at 0x%p, irq %i", ++ chip->regs, chip->irq); ++#else ++ sprintf(card->longname, "Atmel AVR32 AC97 Controller at 0x%p, dma rx %i and tx %i", ++ chip->regs, chip->dma.rx_periph_id, chip->dma.tx_periph_id); ++#endif ++ ++ err = snd_card_register(card); ++ if (err) ++ goto out_free_card; ++ ++ platform_set_drvdata(pdev, card); ++ dev++; ++ return 0; ++ ++out_free_card: ++ snd_card_free(card); ++out: ++ return err; ++} ++ ++static int __devexit snd_atmel_ac97_remove(struct platform_device *pdev) ++{ ++ snd_card_t *card = platform_get_drvdata(pdev); ++ ++ snd_card_free(card); ++ platform_set_drvdata(pdev, NULL); ++ return 0; ++} ++ ++static struct platform_driver atmel_ac97_driver = { ++ .probe = snd_atmel_ac97_probe, ++ .remove = __devexit_p(snd_atmel_ac97_remove), ++ .driver = { ++ .name = "ac97c", ++ }, ++}; ++ ++static int __init atmel_ac97_init(void) ++{ ++ return platform_driver_register(&atmel_ac97_driver); ++} ++ ++static void __exit atmel_ac97_exit(void) ++{ ++ platform_driver_unregister(&atmel_ac97_driver); ++} ++ ++module_init(atmel_ac97_init); ++module_exit(atmel_ac97_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_DESCRIPTION("Driver for Atmel AC97 Controller"); ++MODULE_AUTHOR("Haavard Skinnemoen "); +Index: linux-2.6.18-avr32/sound/avr32/ac97c.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/sound/avr32/ac97c.h 2006-11-02 15:56:20.000000000 +0100 +@@ -0,0 +1,71 @@ ++/* ++ * Register definitions for the Atmel AC97 Controller. ++ * ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++#ifndef __SOUND_AVR32_AC97C_H ++#define __SOUND_AVR32_AC97C_H ++ ++#define AC97C_MR 0x08 ++#define AC97C_ICA 0x10 ++#define AC97C_OCA 0x14 ++#define AC97C_CARHR 0x20 ++#define AC97C_CATHR 0x24 ++#define AC97C_CASR 0x28 ++#define AC97C_CAMR 0x2c ++#define AC97C_CBRHR 0x30 ++#define AC97C_CBTHR 0x34 ++#define AC97C_CBSR 0x38 ++#define AC97C_CBMR 0x3c ++#define AC97C_CORHR 0x40 ++#define AC97C_COTHR 0x44 ++#define AC97C_COSR 0x48 ++#define AC97C_COMR 0x4c ++#define AC97C_SR 0x50 ++#define AC97C_IER 0x54 ++#define AC97C_IDR 0x58 ++#define AC97C_IMR 0x5c ++#define AC97C_VERSION 0xfc ++ ++#define AC97C_CATPR PDC_TPR ++#define AC97C_CATCR PDC_TCR ++#define AC97C_CATNPR PDC_TNPR ++#define AC97C_CATNCR PDC_TNCR ++#define AC97C_CARPR PDC_RPR ++#define AC97C_CARCR PDC_RCR ++#define AC97C_CARNPR PDC_RNPR ++#define AC97C_CARNCR PDC_RNCR ++#define AC97C_PTCR PDC_PTCR ++ ++#define AC97C_MR_ENA (1 << 0) ++#define AC97C_MR_WRST (1 << 1) ++#define AC97C_MR_VRA (1 << 2) ++ ++#define AC97C_CSR_TXRDY (1 << 0) ++#define AC97C_CSR_UNRUN (1 << 2) ++#define AC97C_CSR_RXRDY (1 << 4) ++#define AC97C_CSR_ENDTX (1 << 10) ++#define AC97C_CSR_ENDRX (1 << 14) ++ ++#define AC97C_CMR_SIZE_20 (0 << 16) ++#define AC97C_CMR_SIZE_18 (1 << 16) ++#define AC97C_CMR_SIZE_16 (2 << 16) ++#define AC97C_CMR_SIZE_10 (3 << 16) ++#define AC97C_CMR_CEM_LITTLE (1 << 18) ++#define AC97C_CMR_CEM_BIG (0 << 18) ++#define AC97C_CMR_CENA (1 << 21) ++#define AC97C_CMR_PDCEN (1 << 22) ++ ++#define AC97C_SR_CAEVT (1 << 3) ++ ++#define AC97C_CH_ASSIGN(slot, channel) \ ++ (AC97C_CHANNEL_##channel << (3 * (AC97_SLOT_##slot - 3))) ++#define AC97C_CHANNEL_NONE 0x0 ++#define AC97C_CHANNEL_A 0x1 ++#define AC97C_CHANNEL_B 0x2 ++ ++#endif /* __SOUND_AVR32_AC97C_H */ diff --git a/packages/linux/linux-2.6.18/atmel-husb2-udc-driver.patch b/packages/linux/linux-2.6.18/atmel-husb2-udc-driver.patch new file mode 100644 index 0000000000..f46a8f1dd8 --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-husb2-udc-driver.patch @@ -0,0 +1,2488 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Fri Nov 18 18:13:25 2005 +0100 +Subject: [PATCH] Driver for the Atmel HUSB2 Device Controller + +This adds the driver for the Atmel HUSB2 Device Controller. + +--- + + drivers/usb/gadget/Kconfig | 10 + drivers/usb/gadget/Makefile | 1 + drivers/usb/gadget/gadget_chips.h | 8 + drivers/usb/gadget/husb2_udc.c | 1998 ++++++++++++++++++++++++++++++++++++++ + drivers/usb/gadget/husb2_udc.h | 406 +++++++ + 5 files changed, 2423 insertions(+) + +Index: linux-2.6.18-avr32/drivers/usb/gadget/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/Kconfig 2006-11-02 15:54:18.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/usb/gadget/Kconfig 2006-11-02 15:56:20.000000000 +0100 +@@ -154,6 +154,16 @@ config USB_LH7A40X + default USB_GADGET + select USB_GADGET_SELECTED + ++config USB_GADGET_HUSB2DEV ++ boolean "Atmel HUSB2DEVICE" ++ select USB_GADGET_DUALSPEED ++ depends on AVR32 ++ ++config USB_HUSB2DEV ++ tristate ++ depends on USB_GADGET_HUSB2DEV ++ default USB_GADGET ++ select USB_GADGET_SELECTED + + config USB_GADGET_OMAP + boolean "OMAP USB Device Controller" +Index: linux-2.6.18-avr32/drivers/usb/gadget/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/Makefile 2006-11-02 15:54:18.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/usb/gadget/Makefile 2006-11-02 15:56:20.000000000 +0100 +@@ -8,6 +8,7 @@ obj-$(CONFIG_USB_GOKU) += goku_udc.o + obj-$(CONFIG_USB_OMAP) += omap_udc.o + obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o + obj-$(CONFIG_USB_AT91) += at91_udc.o ++obj-$(CONFIG_USB_HUSB2DEV) += husb2_udc.o + + # + # USB gadget drivers +Index: linux-2.6.18-avr32/drivers/usb/gadget/gadget_chips.h +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/gadget_chips.h 2006-11-02 15:54:18.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/usb/gadget/gadget_chips.h 2006-11-02 15:56:20.000000000 +0100 +@@ -75,6 +75,12 @@ + #define gadget_is_pxa27x(g) 0 + #endif + ++#ifdef CONFIG_USB_GADGET_HUSB2DEV ++#define gadget_is_husb2dev(g) !strcmp("husb2_udc", (g)->name) ++#else ++#define gadget_is_husb2dev(g) 0 ++#endif ++ + #ifdef CONFIG_USB_GADGET_S3C2410 + #define gadget_is_s3c2410(g) !strcmp("s3c2410_udc", (g)->name) + #else +@@ -169,5 +175,7 @@ static inline int usb_gadget_controller_ + return 0x16; + else if (gadget_is_mpc8272(gadget)) + return 0x17; ++ else if (gadget_is_husb2dev(gadget)) ++ return 0x80; + return -ENOENT; + } +Index: linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.c 2006-11-02 16:06:40.000000000 +0100 +@@ -0,0 +1,1998 @@ ++/* ++ * Driver for the Atmel HUSB2device high speed USB device controller ++ * ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++#undef DEBUG ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include "husb2_udc.h" ++ ++#define DRIVER_VERSION "0.9" ++ ++#define DMA_ADDR_INVALID (~(dma_addr_t)0) ++ ++#define FIFO_IOMEM_ID 0 ++#define CTRL_IOMEM_ID 1 ++ ++#ifdef DEBUG ++#define DBG_ERR 0x0001 /* report all error returns */ ++#define DBG_HW 0x0002 /* debug hardware initialization */ ++#define DBG_GADGET 0x0004 /* calls to/from gadget driver */ ++#define DBG_INT 0x0008 /* interrupts */ ++#define DBG_BUS 0x0010 /* report changes in bus state */ ++#define DBG_QUEUE 0x0020 /* debug request queue processing */ ++#define DBG_FIFO 0x0040 /* debug FIFO contents */ ++#define DBG_DMA 0x0080 /* debug DMA handling */ ++#define DBG_REQ 0x0100 /* print out queued request length */ ++#define DBG_ALL 0xffff ++#define DBG_NONE 0x0000 ++ ++#define DEBUG_LEVEL (DBG_ERR|DBG_REQ) ++#define DBG(level, fmt, ...) \ ++ do { \ ++ if ((level) & DEBUG_LEVEL) \ ++ printk(KERN_DEBUG "udc: " fmt, ## __VA_ARGS__); \ ++ } while (0) ++#else ++#define DBG(level, fmt...) ++#endif ++ ++static struct husb2_udc the_udc; ++ ++#ifdef CONFIG_DEBUG_FS ++#include ++#include ++ ++static int queue_dbg_open(struct inode *inode, struct file *file) ++{ ++ struct husb2_ep *ep = inode->u.generic_ip; ++ struct husb2_request *req, *req_copy; ++ struct list_head *queue_data; ++ ++ queue_data = kmalloc(sizeof(*queue_data), GFP_KERNEL); ++ if (!queue_data) ++ return -ENOMEM; ++ INIT_LIST_HEAD(queue_data); ++ ++ spin_lock_irq(&ep->udc->lock); ++ list_for_each_entry(req, &ep->queue, queue) { ++ req_copy = kmalloc(sizeof(*req_copy), GFP_ATOMIC); ++ if (!req_copy) ++ goto fail; ++ memcpy(req_copy, req, sizeof(*req_copy)); ++ list_add_tail(&req_copy->queue, queue_data); ++ } ++ spin_unlock_irq(&ep->udc->lock); ++ ++ file->private_data = queue_data; ++ return 0; ++ ++fail: ++ spin_unlock_irq(&ep->udc->lock); ++ list_for_each_entry_safe(req, req_copy, queue_data, queue) { ++ list_del(&req->queue); ++ kfree(req); ++ } ++ kfree(queue_data); ++ return -ENOMEM; ++} ++ ++/* ++ * bbbbbbbb llllllll IZS sssss nnnn FDL\n\0 ++ * ++ * b: buffer address ++ * l: buffer length ++ * I/i: interrupt/no interrupt ++ * Z/z: zero/no zero ++ * S/s: short ok/short not ok ++ * s: status ++ * n: nr_packets ++ * F/f: submitted/not submitted to FIFO ++ * D/d: using/not using DMA ++ * L/l: last transaction/not last transaction ++ */ ++static ssize_t queue_dbg_read(struct file *file, char __user *buf, ++ size_t nbytes, loff_t *ppos) ++{ ++ struct list_head *queue = file->private_data; ++ struct husb2_request *req, *tmp_req; ++ size_t len, remaining, actual = 0; ++ char tmpbuf[38]; ++ ++ if (!access_ok(VERIFY_WRITE, buf, nbytes)) ++ return -EFAULT; ++ ++ mutex_lock(&file->f_dentry->d_inode->i_mutex); ++ list_for_each_entry_safe(req, tmp_req, queue, queue) { ++ len = snprintf(tmpbuf, sizeof(tmpbuf), ++ "%8p %08x %c%c%c %5d %4u %c%c%c\n", ++ req->req.buf, req->req.length, ++ req->req.no_interrupt ? 'i' : 'I', ++ req->req.zero ? 'Z' : 'z', ++ req->req.short_not_ok ? 's' : 'S', ++ req->req.status, ++ req->nr_pkts, ++ req->submitted ? 'F' : 'f', ++ req->using_dma ? 'D' : 'd', ++ req->last_transaction ? 'L' : 'l'); ++ len = min(len, sizeof(tmpbuf)); ++ if (len > nbytes) ++ break; ++ ++ list_del(&req->queue); ++ kfree(req); ++ ++ remaining = __copy_to_user(buf, tmpbuf, len); ++ actual += len - remaining; ++ if (remaining) ++ break; ++ ++ nbytes -= len; ++ buf += len; ++ } ++ mutex_unlock(&file->f_dentry->d_inode->i_mutex); ++ ++ return actual; ++} ++ ++static int queue_dbg_release(struct inode *inode, struct file *file) ++{ ++ struct list_head *queue_data = file->private_data; ++ struct husb2_request *req, *tmp_req; ++ ++ list_for_each_entry_safe(req, tmp_req, queue_data, queue) { ++ list_del(&req->queue); ++ kfree(req); ++ } ++ kfree(queue_data); ++ return 0; ++} ++ ++static int regs_dbg_open(struct inode *inode, struct file *file) ++{ ++ struct husb2_udc *udc; ++ unsigned int i; ++ u32 *data; ++ int ret = -ENOMEM; ++ ++ mutex_lock(&inode->i_mutex); ++ udc = inode->u.generic_ip; ++ data = kmalloc(inode->i_size, GFP_KERNEL); ++ if (!data) ++ goto out; ++ ++ spin_lock_irq(&udc->lock); ++ for (i = 0; i < inode->i_size / 4; i++) ++ data[i] = __raw_readl(udc->regs + i * 4); ++ spin_unlock_irq(&udc->lock); ++ ++ file->private_data = data; ++ ret = 0; ++ ++out: ++ mutex_unlock(&inode->i_mutex); ++ ++ return ret; ++} ++ ++static ssize_t regs_dbg_read(struct file *file, char __user *buf, ++ size_t nbytes, loff_t *ppos) ++{ ++ struct inode *inode = file->f_dentry->d_inode; ++ int ret; ++ ++ mutex_lock(&inode->i_mutex); ++ ret = simple_read_from_buffer(buf, nbytes, ppos, ++ file->private_data, ++ file->f_dentry->d_inode->i_size); ++ mutex_unlock(&inode->i_mutex); ++ ++ return ret; ++} ++ ++static int regs_dbg_release(struct inode *inode, struct file *file) ++{ ++ kfree(file->private_data); ++ return 0; ++} ++ ++const struct file_operations queue_dbg_fops = { ++ .owner = THIS_MODULE, ++ .open = queue_dbg_open, ++ .llseek = no_llseek, ++ .read = queue_dbg_read, ++ .release = queue_dbg_release, ++}; ++ ++const struct file_operations regs_dbg_fops = { ++ .owner = THIS_MODULE, ++ .open = regs_dbg_open, ++ .llseek = generic_file_llseek, ++ .read = regs_dbg_read, ++ .release = regs_dbg_release, ++}; ++ ++static void husb2_ep_init_debugfs(struct husb2_udc *udc, ++ struct husb2_ep *ep) ++{ ++ struct dentry *ep_root; ++ ++ ep_root = debugfs_create_dir(ep_name(ep), udc->debugfs_root); ++ if (!ep_root) ++ goto err_root; ++ ep->debugfs_dir = ep_root; ++ ++ ep->debugfs_queue = debugfs_create_file("queue", 0400, ep_root, ++ ep, &queue_dbg_fops); ++ if (!ep->debugfs_queue) ++ goto err_queue; ++ ++ if (ep_can_dma(ep)) { ++ ep->debugfs_dma_status ++ = debugfs_create_u32("dma_status", 0400, ep_root, ++ &ep->last_dma_status); ++ if (!ep->debugfs_dma_status) ++ goto err_dma_status; ++ } ++ ++ return; ++ ++err_dma_status: ++ debugfs_remove(ep->debugfs_queue); ++err_queue: ++ debugfs_remove(ep_root); ++err_root: ++ dev_err(&ep->udc->pdev->dev, ++ "failed to create debugfs directory for %s\n", ep_name(ep)); ++} ++ ++static void husb2_ep_cleanup_debugfs(struct husb2_ep *ep) ++{ ++ debugfs_remove(ep->debugfs_queue); ++ debugfs_remove(ep->debugfs_dma_status); ++ debugfs_remove(ep->debugfs_dir); ++ ep->debugfs_dma_status = NULL; ++ ep->debugfs_dir = NULL; ++} ++ ++static void husb2_init_debugfs(struct husb2_udc *udc) ++{ ++ struct dentry *root, *regs; ++ struct resource *regs_resource; ++ ++ root = debugfs_create_dir(udc->gadget.name, NULL); ++ if (IS_ERR(root) || !root) ++ goto err_root; ++ udc->debugfs_root = root; ++ ++ regs = debugfs_create_file("regs", 0400, root, udc, ®s_dbg_fops); ++ if (!regs) ++ goto err_regs; ++ ++ regs_resource = platform_get_resource(udc->pdev, IORESOURCE_MEM, ++ CTRL_IOMEM_ID); ++ regs->d_inode->i_size = regs_resource->end - regs_resource->start + 1; ++ udc->debugfs_regs = regs; ++ ++ husb2_ep_init_debugfs(udc, to_husb2_ep(udc->gadget.ep0)); ++ ++ return; ++ ++err_regs: ++ debugfs_remove(root); ++err_root: ++ udc->debugfs_root = NULL; ++ dev_err(&udc->pdev->dev, "debugfs is not available\n"); ++} ++ ++static void husb2_cleanup_debugfs(struct husb2_udc *udc) ++{ ++ husb2_ep_cleanup_debugfs(to_husb2_ep(udc->gadget.ep0)); ++ debugfs_remove(udc->debugfs_regs); ++ debugfs_remove(udc->debugfs_root); ++ udc->debugfs_regs = NULL; ++ udc->debugfs_root = NULL; ++} ++#else ++static inline void husb2_ep_init_debugfs(struct husb2_udc *udc, ++ struct husb2_ep *ep) ++{ ++ ++} ++ ++static inline void husb2_ep_cleanup_debugfs(struct husb2_ep *ep) ++{ ++ ++} ++ ++static inline void husb2_init_debugfs(struct husb2_udc *udc) ++{ ++ ++} ++ ++static inline void husb2_cleanup_debugfs(struct husb2_udc *udc) ++{ ++ ++} ++#endif ++ ++static void copy_to_fifo(void __iomem *fifo, void *buf, int len) ++{ ++ unsigned long tmp; ++ ++ DBG(DBG_FIFO, "copy to FIFO (len %d):\n", len); ++ for (; len > 0; len -= 4, buf += 4, fifo += 4) { ++ tmp = *(unsigned long *)buf; ++ if (len >= 4) { ++ DBG(DBG_FIFO, " -> %08lx\n", tmp); ++ __raw_writel(tmp, fifo); ++ } else { ++ do { ++ DBG(DBG_FIFO, " -> %02lx\n", tmp >> 24); ++ __raw_writeb(tmp >> 24, fifo); ++ fifo++; ++ tmp <<= 8; ++ } while (--len); ++ break; ++ } ++ } ++} ++ ++static void copy_from_fifo(void *buf, void __iomem *fifo, int len) ++{ ++ union { ++ unsigned long *w; ++ unsigned char *b; ++ } p; ++ unsigned long tmp; ++ ++ DBG(DBG_FIFO, "copy from FIFO (len %d):\n", len); ++ for (p.w = buf; len > 0; len -= 4, p.w++, fifo += 4) { ++ if (len >= 4) { ++ tmp = __raw_readl(fifo); ++ *p.w = tmp; ++ DBG(DBG_FIFO, " -> %08lx\n", tmp); ++ } else { ++ do { ++ tmp = __raw_readb(fifo); ++ *p.b = tmp; ++ DBG(DBG_FIFO, " -> %02lx\n", tmp); ++ fifo++, p.b++; ++ } while (--len); ++ } ++ } ++} ++ ++static void next_fifo_transaction(struct husb2_ep *ep, ++ struct husb2_request *req) ++{ ++ unsigned int transaction_len; ++ ++ transaction_len = req->req.length - req->req.actual; ++ req->last_transaction = 1; ++ if (transaction_len > ep->ep.maxpacket) { ++ transaction_len = ep->ep.maxpacket; ++ req->last_transaction = 0; ++ } else if (transaction_len == ep->ep.maxpacket ++ && req->req.zero) { ++ req->last_transaction = 0; ++ } ++ DBG(DBG_QUEUE, "%s: submit_transaction, req %p (length %d)%s\n", ++ ep_name(ep), req, transaction_len, ++ req->last_transaction ? ", done" : ""); ++ ++ copy_to_fifo(ep->fifo, req->req.buf + req->req.actual, transaction_len); ++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(TX_PK_RDY)); ++ req->req.actual += transaction_len; ++} ++ ++static void submit_request(struct husb2_ep *ep, struct husb2_request *req) ++{ ++ DBG(DBG_QUEUE, "%s: submit_request: req %p (length %d)\n", ++ ep_name(ep), req, req->req.length); ++ ++ req->req.actual = 0; ++ req->submitted = 1; ++ ++ if (req->using_dma) { ++ if (req->req.length == 0) { ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY)); ++ } else { ++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(TX_PK_RDY)); ++ husb2_dma_writel(ep, NXT_DSC, ++ req->packet[0].desc_dma); ++ husb2_dma_writel(ep, CONTROL, HUSB2_BIT(DMA_LINK)); ++ } ++ } else { ++ next_fifo_transaction(ep, req); ++ if (req->last_transaction) ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_COMPLETE)); ++ else ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY)); ++ } ++} ++ ++static void submit_next_request(struct husb2_ep *ep) ++{ ++ struct husb2_request *req; ++ ++ if (list_empty(&ep->queue)) { ++ husb2_ep_writel(ep, CTL_DIS, (HUSB2_BIT(TX_PK_RDY) ++ | HUSB2_BIT(RX_BK_RDY))); ++ return; ++ } ++ ++ req = list_entry(ep->queue.next, struct husb2_request, queue); ++ if (!req->submitted) ++ submit_request(ep, req); ++} ++ ++static void send_status(struct husb2_udc *udc, struct husb2_ep *ep) ++{ ++ ep->state = STATUS_STAGE_IN; ++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(TX_PK_RDY)); ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_COMPLETE)); ++} ++ ++static void receive_data(struct husb2_ep *ep) ++{ ++ struct husb2_udc *udc = ep->udc; ++ struct husb2_request *req; ++ unsigned long status; ++ unsigned int bytecount, nr_busy; ++ int is_complete = 0; ++ ++ status = husb2_ep_readl(ep, STA); ++ nr_busy = HUSB2_BFEXT(BUSY_BANKS, status); ++ ++ DBG(DBG_QUEUE, "receive data: nr_busy=%u\n", nr_busy); ++ ++ while (nr_busy > 0) { ++ if (list_empty(&ep->queue)) { ++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(RX_BK_RDY)); ++ break; ++ } ++ req = list_entry(ep->queue.next, ++ struct husb2_request, queue); ++ ++ bytecount = HUSB2_BFEXT(BYTE_COUNT, status); ++ ++ if (status & (1 << 31)) ++ is_complete = 1; ++ if (req->req.actual + bytecount >= req->req.length) { ++ is_complete = 1; ++ bytecount = req->req.length - req->req.actual; ++ } ++ ++ copy_from_fifo(req->req.buf + req->req.actual, ++ ep->fifo, bytecount); ++ req->req.actual += bytecount; ++ ++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_BK_RDY)); ++ ++ if (is_complete) { ++ DBG(DBG_QUEUE, "%s: request done\n", ep_name(ep)); ++ req->req.status = 0; ++ list_del_init(&req->queue); ++ req->req.complete(&ep->ep, &req->req); ++ } ++ ++ status = husb2_ep_readl(ep, STA); ++ nr_busy = HUSB2_BFEXT(BUSY_BANKS, status); ++ ++ if (is_complete && ep_is_control(ep)) { ++ BUG_ON(nr_busy != 0); ++ send_status(udc, ep); ++ break; ++ } ++ } ++} ++ ++static void request_complete(struct husb2_ep *ep, ++ struct husb2_request *req, ++ int status) ++{ ++ struct husb2_udc *udc = ep->udc; ++ int i; ++ ++ BUG_ON(!list_empty(&req->queue)); ++ ++ if (req->req.status == -EINPROGRESS) ++ req->req.status = status; ++ ++ if (req->packet) { ++ for (i = 0; i < req->nr_pkts; i++) ++ dma_pool_free(udc->desc_pool, req->packet[i].desc, ++ req->packet[i].desc_dma); ++ kfree(req->packet); ++ req->packet = NULL; ++ dma_unmap_single(&udc->pdev->dev, ++ req->req.dma, req->req.length, ++ (ep_is_in(ep) ++ ? DMA_TO_DEVICE : DMA_FROM_DEVICE)); ++ req->req.dma = DMA_ADDR_INVALID; ++ } ++ ++ DBG(DBG_GADGET | DBG_REQ, ++ "%s: req %p complete: status %d, actual %u\n", ++ ep_name(ep), req, req->req.status, req->req.actual); ++ req->req.complete(&ep->ep, &req->req); ++} ++ ++static void request_complete_list(struct husb2_ep *ep, ++ struct list_head *list, ++ int status) ++{ ++ struct husb2_request *req, *tmp_req; ++ ++ list_for_each_entry_safe(req, tmp_req, list, queue) { ++ list_del_init(&req->queue); ++ request_complete(ep, req, status); ++ } ++} ++ ++static int husb2_ep_enable(struct usb_ep *_ep, ++ const struct usb_endpoint_descriptor *desc) ++{ ++ struct husb2_ep *ep = to_husb2_ep(_ep); ++ struct husb2_udc *udc = ep->udc; ++ unsigned long flags, ept_cfg, maxpacket; ++ ++ DBG(DBG_GADGET, "%s: ep_enable: desc=%p\n", ep_name(ep), desc); ++ ++ maxpacket = le16_to_cpu(desc->wMaxPacketSize); ++ ++ if (ep->index == 0 ++ || desc->bDescriptorType != USB_DT_ENDPOINT ++ || ((desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK) ++ != ep->index) ++ || maxpacket == 0 ++ || maxpacket > ep->fifo_size) { ++ DBG(DBG_ERR, "ep_enable: Invalid argument"); ++ return -EINVAL; ++ } ++ ++ if (((desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ++ == USB_ENDPOINT_XFER_ISOC) ++ && !(ep->capabilities & HUSB2_EP_CAP_ISOC)) { ++ DBG(DBG_ERR, "ep_enable: %s is not isoc capable\n", ++ ep_name(ep)); ++ return -EINVAL; ++ } ++ ++ if (maxpacket <= 8) ++ ept_cfg = HUSB2_BF(EPT_SIZE, HUSB2_EPT_SIZE_8); ++ else ++ /* LSB is bit 1, not 0 */ ++ ept_cfg = HUSB2_BF(EPT_SIZE, fls(maxpacket - 1) - 3); ++ DBG(DBG_HW, "%s: EPT_SIZE = %lu (maxpacket = %lu)\n", ++ ep_name(ep), ept_cfg, maxpacket); ++ ++ if ((desc->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) ++ ept_cfg |= HUSB2_BIT(EPT_DIR); ++ ++ switch (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) { ++ case USB_ENDPOINT_XFER_CONTROL: ++ ept_cfg |= HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_CONTROL); ++ break; ++ case USB_ENDPOINT_XFER_ISOC: ++ ept_cfg |= HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_ISO); ++ break; ++ case USB_ENDPOINT_XFER_BULK: ++ ept_cfg |= HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_BULK); ++ break; ++ case USB_ENDPOINT_XFER_INT: ++ ept_cfg |= HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_INT); ++ break; ++ } ++ ept_cfg |= HUSB2_BF(BK_NUMBER, ep->nr_banks); ++ ++ spin_lock_irqsave(&ep->udc->lock, flags); ++ ++ if (ep->desc) { ++ spin_unlock_irqrestore(&ep->udc->lock, flags); ++ DBG(DBG_ERR, "ep%d already enabled\n", ep->index); ++ return -EBUSY; ++ } ++ ++ ep->desc = desc; ++ ep->ep.maxpacket = maxpacket; ++ ++ husb2_ep_writel(ep, CFG, ept_cfg); ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(EPT_ENABLE)); ++ ++ if (ep_can_dma(ep)) { ++ husb2_writel(udc, INT_ENB, ++ (husb2_readl(udc, INT_ENB) ++ | HUSB2_BF(EPT_INT, 1 << ep->index) ++ | HUSB2_BF(DMA_INT, 1 << ep->index))); ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(AUTO_VALID)); ++ } else { ++ husb2_writel(udc, INT_ENB, ++ (husb2_readl(udc, INT_ENB) ++ | HUSB2_BF(EPT_INT, 1 << ep->index))); ++ } ++ ++ spin_unlock_irqrestore(&udc->lock, flags); ++ ++ DBG(DBG_HW, "EPT_CFG%d after init: %#08lx\n", ep->index, ++ (unsigned long)husb2_ep_readl(ep, CFG)); ++ DBG(DBG_HW, "INT_ENB after init: %#08lx\n", ++ (unsigned long)husb2_readl(udc, INT_ENB)); ++ ++ husb2_ep_init_debugfs(udc, ep); ++ ++ return 0; ++} ++ ++static int husb2_ep_disable(struct usb_ep *_ep) ++{ ++ struct husb2_ep *ep = to_husb2_ep(_ep); ++ struct husb2_udc *udc = ep->udc; ++ LIST_HEAD(req_list); ++ unsigned long flags; ++ ++ DBG(DBG_GADGET, "ep_disable: %s\n", ep_name(ep)); ++ ++ husb2_ep_cleanup_debugfs(ep); ++ ++ spin_lock_irqsave(&udc->lock, flags); ++ ++ if (!ep->desc) { ++ spin_unlock_irqrestore(&udc->lock, flags); ++ DBG(DBG_ERR, "ep_disable: %s not enabled\n", ++ ep_name(ep)); ++ return -EINVAL; ++ } ++ ep->desc = NULL; ++ ++ list_splice_init(&ep->queue, &req_list); ++ if (ep_can_dma(ep)) { ++ husb2_dma_writel(ep, CONTROL, 0); ++ husb2_dma_writel(ep, ADDRESS, 0); ++ husb2_dma_readl(ep, STATUS); ++ } ++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(EPT_ENABLE)); ++ husb2_writel(udc, INT_ENB, (husb2_readl(udc, INT_ENB) ++ & ~HUSB2_BF(EPT_INT, 1 << ep->index))); ++ ++ spin_unlock_irqrestore(&udc->lock, flags); ++ ++ request_complete_list(ep, &req_list, -ESHUTDOWN); ++ ++ return 0; ++} ++ ++static struct usb_request * ++husb2_ep_alloc_request(struct usb_ep *_ep, unsigned gfp_flags) ++{ ++ struct husb2_request *req; ++ ++ DBG(DBG_GADGET, "ep_alloc_request: %p, 0x%x\n", _ep, gfp_flags); ++ ++ req = kzalloc(sizeof(*req), gfp_flags); ++ if (!req) ++ return NULL; ++ ++ INIT_LIST_HEAD(&req->queue); ++ req->req.dma = DMA_ADDR_INVALID; ++ ++ return &req->req; ++} ++ ++static void ++husb2_ep_free_request(struct usb_ep *_ep, struct usb_request *_req) ++{ ++ struct husb2_request *req = to_husb2_req(_req); ++ ++ DBG(DBG_GADGET, "ep_free_request: %p, %p\n", _ep, _req); ++ ++ kfree(req); ++} ++ ++static void *husb2_ep_alloc_buffer(struct usb_ep *_ep, unsigned bytes, ++ dma_addr_t *dma, unsigned gfp_flags) ++{ ++ struct husb2_ep *ep = to_husb2_ep(_ep); ++ void *buf; ++ ++ /* ++ * We depend on kmalloc() returning cache-aligned memory. This ++ * is normally guaranteed as long as we allocate a whole ++ * cacheline or more. ++ * ++ * When CONFIG_DEBUG_SLAB is enabled, however, the slab ++ * allocator inserts red zones and ownership information, ++ * causing the slab objects to be misaligned. ++ * ++ * One alternative would be to use dma_alloc_coherent, but ++ * that would make us unable to allocate anything less than a ++ * page at a time. ++ */ ++#ifdef CONFIG_DEBUG_SLAB ++# error The HUSB2 UDC driver breaks with SLAB debugging enabled ++#endif ++ ++ if (bytes < L1_CACHE_BYTES) ++ bytes = L1_CACHE_BYTES; ++ ++ buf = kmalloc(bytes, gfp_flags); ++ ++ /* ++ * Seems like we have to map the buffer any chance we get. ++ * ether.c wants us to initialize the dma member of a ++ * different request than the one receiving the buffer, so one ++ * never knows... ++ * ++ * Ah, screw it. The ether driver is probably wrong, and this ++ * is not the right place to do the mapping. The driver ++ * shouldn't mess with our DMA mappings anyway. ++ */ ++ *dma = DMA_ADDR_INVALID; ++ ++ DBG(DBG_GADGET, "ep_alloc_buffer: %s, %u, 0x%x -> %p\n", ++ ep_name(ep), bytes, gfp_flags, buf); ++ ++ return buf; ++} ++ ++static void husb2_ep_free_buffer(struct usb_ep *_ep, void *buf, ++ dma_addr_t dma, unsigned bytes) ++{ ++ DBG(DBG_GADGET, "ep_free_buffer: %s, buf %p (size %u)\n", ++ _ep->name, buf, bytes); ++ kfree(buf); ++} ++ ++static int queue_dma(struct husb2_udc *udc, struct husb2_ep *ep, ++ struct husb2_request *req, unsigned int direction, ++ gfp_t gfp_flags) ++{ ++ struct husb2_packet *pkt, *prev_pkt; ++ unsigned int pkt_size, nr_pkts, i; ++ unsigned int residue; ++ dma_addr_t addr; ++ unsigned long flags; ++ u32 ctrl; ++ ++ req->using_dma = 1; ++ ++ if (req->req.length == 0) { ++ if (!req->req.zero) ++ return -EINVAL; ++ req->send_zlp = 1; ++ ++ spin_lock_irqsave(&udc->lock, flags); ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY)); ++ list_add_tail(&req->queue, &ep->queue); ++ spin_unlock_irqrestore(&udc->lock, flags); ++ ++ return 0; ++ } ++ ++ if (req->req.dma == DMA_ADDR_INVALID) ++ req->req.dma = dma_map_single(&udc->pdev->dev, ++ req->req.buf, ++ req->req.length, ++ direction); ++ else ++ dma_sync_single_for_device(&udc->pdev->dev, ++ req->req.dma, ++ req->req.length, ++ direction); ++ ++ pkt_size = ep->ep.maxpacket; ++ nr_pkts = req->req.length / pkt_size; ++ residue = req->req.length % pkt_size; ++ if (residue != 0) ++ nr_pkts++; ++ else if (req->req.zero && ep_is_in(ep)) ++ /* ensure last packet is short */ ++ req->send_zlp = 1; ++ ++ req->nr_pkts = nr_pkts; ++ ++ req->packet = kzalloc(sizeof(*req->packet) * nr_pkts, gfp_flags); ++ if (!req->packet) ++ goto out_of_memory; ++ ++ addr = req->req.dma; ++ ctrl = (HUSB2_BF(DMA_BUF_LEN, pkt_size) ++ | HUSB2_BIT(DMA_CH_EN) | HUSB2_BIT(DMA_LINK) ++ | HUSB2_BIT(DMA_END_TR_EN) | HUSB2_BIT(DMA_END_TR_IE)); ++ prev_pkt = NULL; ++ pkt = NULL; ++ DBG(DBG_DMA, "DMA descriptors:\n"); ++ for (i = 0; i < nr_pkts; i++) { ++ pkt = &req->packet[i]; ++ pkt->desc = dma_pool_alloc(udc->desc_pool, gfp_flags, ++ &pkt->desc_dma); ++ if (!pkt->desc) ++ goto out_of_memory; ++ ++ if (prev_pkt) { ++ prev_pkt->desc->next = pkt->desc_dma; ++ DBG(DBG_DMA, "[%d] n%08x a%08x c%08x\n", ++ i - 1, prev_pkt->desc->next, prev_pkt->desc->addr, ++ prev_pkt->desc->ctrl); ++ } ++ prev_pkt = pkt; ++ ++ pkt->desc->addr = addr; ++ pkt->desc->ctrl = ctrl; ++ addr += pkt_size; ++ } ++ ++ /* special care is needed for the last packet... */ ++ ctrl = (HUSB2_BIT(DMA_CH_EN) ++ | HUSB2_BIT(DMA_END_TR_EN) | HUSB2_BIT(DMA_END_TR_IE) ++ | HUSB2_BIT(DMA_END_BUF_IE)); ++ if (ep_is_in(ep)) ++ ctrl |= HUSB2_BIT(DMA_END_BUF_EN); ++ if (req->req.zero || residue) ++ ctrl |= HUSB2_BF(DMA_BUF_LEN, residue); ++ else ++ ctrl |= HUSB2_BF(DMA_BUF_LEN, pkt_size); ++ pkt->desc->ctrl = ctrl; ++ ++ DBG(DBG_DMA, "[%d] n%08x a%08x c%08x\n", ++ i - 1, prev_pkt->desc->next, prev_pkt->desc->addr, ++ prev_pkt->desc->ctrl); ++ ++ /* Add this request to the queue and try to chain the DMA descriptors */ ++ spin_lock_irqsave(&udc->lock, flags); ++ ++ /* If the DMA controller is idle, start it */ ++ if (list_empty(&ep->queue)) { ++ husb2_dma_writel(ep, NXT_DSC, req->packet[0].desc_dma); ++ husb2_dma_writel(ep, CONTROL, HUSB2_BIT(DMA_LINK)); ++ } ++ ++ list_add_tail(&req->queue, &ep->queue); ++ ++ spin_unlock_irqrestore(&udc->lock, flags); ++ ++ return 0; ++ ++out_of_memory: ++ printk(KERN_ERR "ERROR: Could not allocate DMA memory for endpoint %s\n", ++ ep_name(ep)); ++ if (req->packet) { ++ for (i = 0; i < nr_pkts; i++) ++ if (req->packet[i].desc) ++ dma_pool_free(udc->desc_pool, ++ req->packet[i].desc, ++ req->packet[i].desc_dma); ++ kfree(req->packet); ++ } ++ ++ return -ENOMEM; ++} ++ ++static int husb2_ep_queue(struct usb_ep *_ep, struct usb_request *_req, ++ gfp_t gfp_flags) ++{ ++ struct husb2_request *req = to_husb2_req(_req); ++ struct husb2_ep *ep = to_husb2_ep(_ep); ++ struct husb2_udc *udc = ep->udc; ++ unsigned long flags; ++ int direction_in = 0; ++ ++ DBG(DBG_GADGET | DBG_QUEUE | DBG_REQ, ++ "%s: queue req %p, len %u\n", ep_name(ep), req, _req->length); ++ ++ if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) ++ return -ESHUTDOWN; ++ if (!ep->desc) ++ return -ENODEV; ++ ++ req->nr_pkts = 0; ++ req->submitted = 0; ++ req->using_dma = 0; ++ req->last_transaction = 0; ++ req->send_zlp = 0; ++ ++ BUG_ON(req->packet); ++ ++ if (ep_is_in(ep) ++ || (ep_is_control(ep) && (ep->state == DATA_STAGE_IN ++ || ep->state == STATUS_STAGE_IN))) ++ direction_in = 1; ++ ++ _req->status = -EINPROGRESS; ++ _req->actual = 0; ++ ++ if (ep_can_dma(ep)) { ++ return queue_dma(udc, ep, req, (direction_in ++ ? DMA_TO_DEVICE ++ : DMA_FROM_DEVICE), ++ gfp_flags); ++ } else { ++ spin_lock_irqsave(&udc->lock, flags); ++ list_add_tail(&req->queue, &ep->queue); ++ ++ if (direction_in) ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY)); ++ else ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(RX_BK_RDY)); ++ spin_unlock_irqrestore(&udc->lock, flags); ++ } ++ ++ return 0; ++} ++ ++static void husb2_update_req(struct husb2_ep *ep, struct husb2_request *req, ++ u32 status) ++{ ++ struct husb2_dma_desc *desc; ++ dma_addr_t from; ++ dma_addr_t addr; ++ size_t size; ++ unsigned int i; ++ ++ addr = husb2_dma_readl(ep, ADDRESS); ++ req->req.actual = 0; ++ ++ for (i = 0; i < req->nr_pkts; i++) { ++ desc = req->packet[i].desc; ++ from = desc->addr; ++ size = HUSB2_BFEXT(DMA_BUF_LEN, desc->ctrl); ++ ++ req->req.actual += size; ++ ++ DBG(DBG_DMA, " from=%#08x, size=%#zx\n", from, size); ++ ++ if (from <= addr && (from + size) >= addr) ++ break; ++ } ++ ++ req->req.actual -= HUSB2_BFEXT(DMA_BUF_LEN, status); ++} ++ ++static int stop_dma(struct husb2_ep *ep, u32 *pstatus) ++{ ++ unsigned int timeout; ++ u32 status; ++ ++ /* ++ * Stop the DMA controller. When writing both CH_EN ++ * and LINK to 0, the other bits are not affected. ++ */ ++ husb2_dma_writel(ep, CONTROL, 0); ++ ++ /* Wait for the FIFO to empty */ ++ for (timeout = 40; timeout; --timeout) { ++ status = husb2_dma_readl(ep, STATUS); ++ if (!(status & HUSB2_BIT(DMA_CH_EN))) ++ break; ++ udelay(1); ++ } ++ ++ if (pstatus) ++ *pstatus = status; ++ ++ if (timeout == 0) { ++ dev_err(&ep->udc->pdev->dev, ++ "%s: timed out waiting for DMA FIFO to empty\n", ++ ep_name(ep)); ++ return -ETIMEDOUT; ++ } ++ ++ return 0; ++} ++ ++static int husb2_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req) ++{ ++ struct husb2_ep *ep = to_husb2_ep(_ep); ++ struct husb2_udc *udc = ep->udc; ++ struct husb2_request *req = to_husb2_req(_req); ++ unsigned long flags; ++ u32 status; ++ ++ DBG(DBG_GADGET | DBG_QUEUE, "ep_dequeue: %s, req %p\n", ep_name(ep), req); ++ ++ spin_lock_irqsave(&udc->lock, flags); ++ ++ if (req->using_dma) { ++ /* ++ * If this request is currently being transferred, ++ * stop the DMA controller and reset the FIFO. ++ */ ++ if (ep->queue.next == &req->queue) { ++ status = husb2_dma_readl(ep, STATUS); ++ if (status & HUSB2_BIT(DMA_CH_EN)) ++ stop_dma(ep, &status); ++ ++#ifdef CONFIG_DEBUG_FS ++ ep->last_dma_status = status; ++#endif ++ ++ husb2_writel(udc, EPT_RST, ++ 1 << ep_index(ep)); ++ ++ husb2_update_req(ep, req, status); ++ } ++ } ++ ++ /* ++ * Errors should stop the queue from advancing until the ++ * completion function returns. ++ */ ++ list_del_init(&req->queue); ++ spin_unlock_irqrestore(&udc->lock, flags); ++ ++ request_complete(ep, req, -ECONNRESET); ++ ++ /* Process the next request if any */ ++ spin_lock_irqsave(&udc->lock, flags); ++ submit_next_request(ep); ++ spin_unlock_irqrestore(&udc->lock, flags); ++ ++ return 0; ++} ++ ++static int husb2_ep_set_halt(struct usb_ep *_ep, int value) ++{ ++ struct husb2_ep *ep = to_husb2_ep(_ep); ++ struct husb2_udc *udc = ep->udc; ++ unsigned long flags; ++ int ret = 0; ++ ++ DBG(DBG_GADGET, "endpoint %s: %s HALT\n", ep_name(ep), ++ value ? "set" : "clear"); ++ ++ if (!ep->desc) { ++ DBG(DBG_ERR, "Attempted to halt uninitialized ep %s\n", ++ ep_name(ep)); ++ return -ENODEV; ++ } ++ if (ep_is_isochronous(ep)) { ++ DBG(DBG_ERR, "Attempted to halt isochronous ep %s\n", ++ ep_name(ep)); ++ return -ENOTTY; ++ } ++ ++ spin_lock_irqsave(&udc->lock, flags); ++ ++ /* ++ * We can't halt IN endpoints while there are still data to be ++ * transferred ++ */ ++ if (!list_empty(&ep->queue) ++ || ((value && ep_is_in(ep) ++ && (husb2_ep_readl(ep, STA) ++ & HUSB2_BF(BUSY_BANKS, -1L))))) { ++ ret = -EAGAIN; ++ } else { ++ if (value) ++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(FORCE_STALL)); ++ else ++ husb2_ep_writel(ep, CLR_STA, (HUSB2_BIT(FORCE_STALL) ++ | HUSB2_BIT(TOGGLE_SEQ))); ++ husb2_ep_readl(ep, STA); ++ } ++ ++ spin_unlock_irqrestore(&udc->lock, flags); ++ ++ return ret; ++} ++ ++static int husb2_ep_fifo_status(struct usb_ep *_ep) ++{ ++ struct husb2_ep *ep = to_husb2_ep(_ep); ++ ++ return HUSB2_BFEXT(BYTE_COUNT, husb2_ep_readl(ep, STA)); ++} ++ ++static void husb2_ep_fifo_flush(struct usb_ep *_ep) ++{ ++ struct husb2_ep *ep = to_husb2_ep(_ep); ++ struct husb2_udc *udc = ep->udc; ++ ++ husb2_writel(udc, EPT_RST, 1 << ep->index); ++} ++ ++struct usb_ep_ops husb2_ep_ops = { ++ .enable = husb2_ep_enable, ++ .disable = husb2_ep_disable, ++ .alloc_request = husb2_ep_alloc_request, ++ .free_request = husb2_ep_free_request, ++ .alloc_buffer = husb2_ep_alloc_buffer, ++ .free_buffer = husb2_ep_free_buffer, ++ .queue = husb2_ep_queue, ++ .dequeue = husb2_ep_dequeue, ++ .set_halt = husb2_ep_set_halt, ++ .fifo_status = husb2_ep_fifo_status, ++ .fifo_flush = husb2_ep_fifo_flush, ++}; ++ ++static int husb2_udc_get_frame(struct usb_gadget *gadget) ++{ ++ struct husb2_udc *udc = to_husb2_udc(gadget); ++ ++ return HUSB2_BFEXT(FRAME_NUMBER, husb2_readl(udc, FNUM)); ++} ++ ++struct usb_gadget_ops husb2_udc_ops = { ++ .get_frame = husb2_udc_get_frame, ++}; ++ ++#define EP(nam, type, idx, caps) { \ ++ .ep = { \ ++ .ops = &husb2_ep_ops, \ ++ .name = nam, \ ++ .maxpacket = type##_FIFO_SIZE, \ ++ }, \ ++ .udc = &the_udc, \ ++ .queue = LIST_HEAD_INIT(husb2_ep[idx].queue), \ ++ .fifo_size = type##_FIFO_SIZE, \ ++ .nr_banks = type##_NR_BANKS, \ ++ .index = idx, \ ++ .capabilities = caps, \ ++} ++ ++static struct husb2_ep husb2_ep[] = { ++ EP("ep0", EP0, 0, 0), ++ EP("ep1in-bulk", BULK, 1, HUSB2_EP_CAP_DMA), ++ EP("ep2out-bulk", BULK, 2, HUSB2_EP_CAP_DMA), ++ EP("ep3in-iso", ISO, 3, HUSB2_EP_CAP_DMA | HUSB2_EP_CAP_ISOC), ++ EP("ep4out-iso", ISO, 4, HUSB2_EP_CAP_DMA | HUSB2_EP_CAP_ISOC), ++ EP("ep5in-int", INT, 5, HUSB2_EP_CAP_DMA), ++ EP("ep6out-int", INT, 6, HUSB2_EP_CAP_DMA), ++}; ++#undef EP ++ ++static struct usb_endpoint_descriptor husb2_ep0_desc = { ++ .bLength = USB_DT_ENDPOINT_SIZE, ++ .bDescriptorType = USB_DT_ENDPOINT, ++ .bEndpointAddress = 0, ++ .bmAttributes = USB_ENDPOINT_XFER_CONTROL, ++ .wMaxPacketSize = __constant_cpu_to_le16(64), ++ /* FIXME: I have no idea what to put here */ ++ .bInterval = 1, ++}; ++ ++static void nop_release(struct device *dev) ++{ ++ ++} ++ ++static struct husb2_udc the_udc = { ++ .gadget = { ++ .ops = &husb2_udc_ops, ++ .ep0 = &husb2_ep[0].ep, ++ .ep_list = LIST_HEAD_INIT(the_udc.gadget.ep_list), ++ .is_dualspeed = 1, ++ .name = "husb2_udc", ++ .dev = { ++ .bus_id = "gadget", ++ .release = nop_release, ++ }, ++ }, ++ ++ .lock = SPIN_LOCK_UNLOCKED, ++}; ++ ++static void udc_enable(struct husb2_udc *udc) ++{ ++ struct husb2_ep *ep0 = &husb2_ep[0]; ++ ++ /* Enable the controller */ ++ husb2_writel(udc, CTRL, HUSB2_BIT(EN_HUSB2)); ++ ++ /* Reset all endpoints and enable basic interrupts */ ++ husb2_writel(udc, EPT_RST, ~0UL); ++ husb2_writel(udc, INT_ENB, (HUSB2_BIT(DET_SUSPEND) ++ | HUSB2_BIT(END_OF_RESET) ++ | HUSB2_BIT(END_OF_RESUME))); ++ ++ /* Configure endpoint 0 */ ++ ep0->desc = &husb2_ep0_desc; ++ ++ husb2_writel(udc, EPT_RST, 1 << 0); ++ husb2_ep_writel(ep0, CTL_ENB, HUSB2_BIT(EPT_ENABLE)); ++ husb2_ep_writel(ep0, CFG, (HUSB2_BF(EPT_SIZE, EP0_EPT_SIZE) ++ | HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_CONTROL) ++ | HUSB2_BF(BK_NUMBER, HUSB2_BK_NUMBER_ONE))); ++ ++ husb2_ep_writel(ep0, CTL_ENB, HUSB2_BIT(RX_SETUP)); ++ husb2_writel(udc, INT_ENB, (husb2_readl(udc, INT_ENB) ++ | HUSB2_BF(EPT_INT, 1))); ++ ++ if (!(husb2_ep_readl(ep0, CFG) & HUSB2_BIT(EPT_MAPPED))) ++ dev_warn(&udc->pdev->dev, ++ "WARNING: EP0 configuration is invalid!\n"); ++} ++ ++static void udc_disable(struct husb2_udc *udc) ++{ ++ udc->gadget.speed = USB_SPEED_UNKNOWN; ++ ++ husb2_writel(udc, CTRL, 0); ++} ++ ++/* ++ * Called with interrupts disabled and udc->lock held. ++ */ ++static void reset_all_endpoints(struct husb2_udc *udc) ++{ ++ struct husb2_ep *ep; ++ struct husb2_request *req, *tmp_req; ++ ++ husb2_writel(udc, EPT_RST, ~0UL); ++ ++ ep = to_husb2_ep(udc->gadget.ep0); ++ list_for_each_entry_safe(req, tmp_req, &ep->queue, queue) { ++ list_del_init(&req->queue); ++ request_complete(ep, req, -ECONNRESET); ++ } ++ BUG_ON(!list_empty(&ep->queue)); ++ ++ list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) { ++ if (ep->desc) ++ husb2_ep_disable(&ep->ep); ++ } ++} ++ ++static struct husb2_ep *get_ep_by_addr(struct husb2_udc *udc, u16 wIndex) ++{ ++ struct husb2_ep *ep; ++ ++ if ((wIndex & USB_ENDPOINT_NUMBER_MASK) == 0) ++ return to_husb2_ep(udc->gadget.ep0); ++ ++ list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { ++ u8 bEndpointAddress; ++ ++ if (!ep->desc) ++ continue; ++ bEndpointAddress = ep->desc->bEndpointAddress; ++ if ((wIndex ^ bEndpointAddress) & USB_DIR_IN) ++ continue; ++ if ((wIndex & USB_ENDPOINT_NUMBER_MASK) ++ == (bEndpointAddress & USB_ENDPOINT_NUMBER_MASK)) ++ return ep; ++ } ++ ++ return NULL; ++} ++ ++/* Called with interrupts disabled and udc->lock held */ ++static inline void set_protocol_stall(struct husb2_udc *udc, ++ struct husb2_ep *ep) ++{ ++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(FORCE_STALL)); ++ ep->state = WAIT_FOR_SETUP; ++} ++ ++static inline int is_stalled(struct husb2_udc *udc, struct husb2_ep *ep) ++{ ++ if (husb2_ep_readl(ep, STA) & HUSB2_BIT(FORCE_STALL)) ++ return 1; ++ return 0; ++} ++ ++static inline void set_address(struct husb2_udc *udc, unsigned int addr) ++{ ++ u32 regval; ++ ++ DBG(DBG_BUS, "setting address %u...\n", addr); ++ regval = husb2_readl(udc, CTRL); ++ regval = HUSB2_BFINS(DEV_ADDR, addr, regval); ++ husb2_writel(udc, CTRL, regval); ++} ++ ++static int handle_ep0_setup(struct husb2_udc *udc, struct husb2_ep *ep, ++ struct usb_ctrlrequest *crq) ++{ ++ switch (crq->bRequest) { ++ case USB_REQ_GET_STATUS: { ++ u16 status; ++ ++ if (crq->bRequestType == (USB_DIR_IN | USB_RECIP_DEVICE)) { ++ /* Self-powered, no remote wakeup */ ++ status = __constant_cpu_to_le16(1 << 0); ++ } else if (crq->bRequestType ++ == (USB_DIR_IN | USB_RECIP_INTERFACE)) { ++ status = __constant_cpu_to_le16(0); ++ } else if (crq->bRequestType ++ == (USB_DIR_IN | USB_RECIP_ENDPOINT)) { ++ struct husb2_ep *target; ++ ++ target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); ++ if (!target) ++ goto stall; ++ ++ status = 0; ++ if (is_stalled(udc, target)) ++ status |= __constant_cpu_to_le16(1); ++ } else { ++ goto delegate; ++ } ++ ++ /* Write directly to the FIFO. No queueing is done. */ ++ if(crq->wLength != __constant_cpu_to_le16(sizeof(status))) ++ goto stall; ++ ep->state = DATA_STAGE_IN; ++ __raw_writew(status, ep->fifo); ++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(TX_PK_RDY)); ++ break; ++ } ++ ++ case USB_REQ_CLEAR_FEATURE: { ++ if (crq->bRequestType == USB_RECIP_DEVICE) { ++ /* We don't support TEST_MODE */ ++ goto stall; ++ } else if (crq->bRequestType == USB_RECIP_ENDPOINT) { ++ struct husb2_ep *target; ++ ++ if (crq->wValue != __constant_cpu_to_le16(USB_ENDPOINT_HALT) ++ || crq->wLength != __constant_cpu_to_le16(0)) ++ goto stall; ++ target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); ++ if (!target) ++ goto stall; ++ ++ husb2_ep_writel(target, CLR_STA, (HUSB2_BIT(FORCE_STALL) ++ | HUSB2_BIT(TOGGLE_SEQ))); ++ } else { ++ goto delegate; ++ } ++ ++ send_status(udc, ep); ++ break; ++ } ++ ++ case USB_REQ_SET_FEATURE: { ++ if (crq->bRequestType == USB_RECIP_DEVICE) { ++ /* We don't support TEST_MODE */ ++ goto stall; ++ } else if (crq->bRequestType == USB_RECIP_ENDPOINT) { ++ struct husb2_ep *target; ++ ++ if (crq->wValue != __constant_cpu_to_le16(USB_ENDPOINT_HALT) ++ || crq->wLength != __constant_cpu_to_le16(0)) ++ goto stall; ++ ++ target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); ++ if (!target) ++ goto stall; ++ ++ husb2_ep_writel(target, SET_STA, HUSB2_BIT(FORCE_STALL)); ++ } else ++ goto delegate; ++ ++ send_status(udc, ep); ++ break; ++ } ++ ++ case USB_REQ_SET_ADDRESS: ++ if (crq->bRequestType != (USB_DIR_OUT | USB_RECIP_DEVICE)) ++ goto delegate; ++ ++ set_address(udc, le16_to_cpu(crq->wValue)); ++ send_status(udc, ep); ++ ep->state = STATUS_STAGE_ADDR; ++ break; ++ ++ default: ++ delegate: ++ return udc->driver->setup(&udc->gadget, crq); ++ } ++ ++ return 0; ++ ++stall: ++ printk(KERN_ERR ++ "udc: %s: Invalid setup request: %02x.%02x v%04x i%04x l%d, " ++ "halting endpoint...\n", ++ ep_name(ep), crq->bRequestType, crq->bRequest, ++ le16_to_cpu(crq->wValue), le16_to_cpu(crq->wIndex), ++ le16_to_cpu(crq->wLength)); ++ set_protocol_stall(udc, ep); ++ return -1; ++} ++ ++static void husb2_control_irq(struct husb2_udc *udc, struct husb2_ep *ep) ++{ ++ struct husb2_request *req; ++ u32 epstatus; ++ u32 epctrl; ++ ++restart: ++ epstatus = husb2_ep_readl(ep, STA); ++ epctrl = husb2_ep_readl(ep, CTL); ++ ++ DBG(DBG_INT, "%s: interrupt, status: 0x%08x\n", ++ ep_name(ep), epstatus); ++ ++ req = NULL; ++ if (!list_empty(&ep->queue)) ++ req = list_entry(ep->queue.next, ++ struct husb2_request, queue); ++ ++ if ((epctrl & HUSB2_BIT(TX_PK_RDY)) ++ && !(epstatus & HUSB2_BIT(TX_PK_RDY))) { ++ DBG(DBG_BUS, "tx pk rdy: %d\n", ep->state); ++ ++ if (req->submitted) ++ next_fifo_transaction(ep, req); ++ else ++ submit_request(ep, req); ++ ++ if (req->last_transaction) { ++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(TX_PK_RDY)); ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_COMPLETE)); ++ } ++ goto restart; ++ } ++ if ((epstatus & epctrl) & HUSB2_BIT(TX_COMPLETE)) { ++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(TX_COMPLETE)); ++ DBG(DBG_BUS, "txc: %d\n", ep->state); ++ ++ switch (ep->state) { ++ case DATA_STAGE_IN: ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(RX_BK_RDY)); ++ husb2_ep_writel(ep, CTL_DIS, ++ HUSB2_BIT(TX_COMPLETE)); ++ ep->state = STATUS_STAGE_OUT; ++ break; ++ case STATUS_STAGE_ADDR: ++ /* Activate our new address */ ++ husb2_writel(udc, CTRL, (husb2_readl(udc, CTRL) ++ | HUSB2_BIT(FADDR_EN))); ++ husb2_ep_writel(ep, CTL_DIS, ++ HUSB2_BIT(TX_COMPLETE)); ++ ep->state = WAIT_FOR_SETUP; ++ break; ++ case STATUS_STAGE_IN: ++ if (req) { ++ list_del_init(&req->queue); ++ request_complete(ep, req, 0); ++ submit_next_request(ep); ++ } ++ BUG_ON(!list_empty(&ep->queue)); ++ husb2_ep_writel(ep, CTL_DIS, ++ HUSB2_BIT(TX_COMPLETE)); ++ ep->state = WAIT_FOR_SETUP; ++ break; ++ default: ++ printk(KERN_ERR ++ "udc: %s: TXCOMP: Invalid endpoint state %d, " ++ "halting endpoint...\n", ++ ep_name(ep), ep->state); ++ set_protocol_stall(udc, ep); ++ break; ++ } ++ ++ goto restart; ++ } ++ if ((epstatus & epctrl) & HUSB2_BIT(RX_BK_RDY)) { ++ DBG(DBG_BUS, "rxc: %d\n", ep->state); ++ ++ switch (ep->state) { ++ case STATUS_STAGE_OUT: ++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_BK_RDY)); ++ ++ if (req) { ++ list_del_init(&req->queue); ++ request_complete(ep, req, 0); ++ } ++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(RX_BK_RDY)); ++ ep->state = WAIT_FOR_SETUP; ++ break; ++ ++ case DATA_STAGE_OUT: ++ receive_data(ep); ++ break; ++ ++ default: ++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_BK_RDY)); ++ set_protocol_stall(udc, ep); ++ printk(KERN_ERR ++ "udc: %s: RXRDY: Invalid endpoint state %d, " ++ "halting endpoint...\n", ++ ep_name(ep), ep->state); ++ break; ++ } ++ ++ goto restart; ++ } ++ if (epstatus & HUSB2_BIT(RX_SETUP)) { ++ union { ++ struct usb_ctrlrequest crq; ++ unsigned long data[2]; ++ } crq; ++ unsigned int pkt_len; ++ int ret; ++ ++ if (ep->state != WAIT_FOR_SETUP) { ++ /* ++ * Didn't expect a SETUP packet at this ++ * point. Clean up any pending requests (which ++ * may be successful). ++ */ ++ int status = -EPROTO; ++ ++ /* ++ * RXRDY is dropped when SETUP packets arrive. ++ * Just pretend we received the status packet. ++ */ ++ if (ep->state == STATUS_STAGE_OUT) ++ status = 0; ++ ++ if (req) { ++ list_del_init(&req->queue); ++ request_complete(ep, req, status); ++ } ++ BUG_ON(!list_empty(&ep->queue)); ++ } ++ ++ pkt_len = HUSB2_BFEXT(BYTE_COUNT, husb2_ep_readl(ep, STA)); ++ DBG(DBG_HW, "Packet length: %u\n", pkt_len); ++ BUG_ON(pkt_len != sizeof(crq)); ++ ++ DBG(DBG_FIFO, "Copying ctrl request from 0x%p:\n", ep->fifo); ++ copy_from_fifo(crq.data, ep->fifo, sizeof(crq)); ++ ++ /* Free up one bank in the FIFO so that we can ++ * generate or receive a reply right away. */ ++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_SETUP)); ++ ++ /* printk(KERN_DEBUG "setup: %d: %02x.%02x\n", ++ ep->state, crq.crq.bRequestType, ++ crq.crq.bRequest); */ ++ ++ if (crq.crq.bRequestType & USB_DIR_IN) { ++ /* ++ * The USB 2.0 spec states that "if wLength is ++ * zero, there is no data transfer phase." ++ * However, testusb #14 seems to actually ++ * expect a data phase even if wLength = 0... ++ */ ++ ep->state = DATA_STAGE_IN; ++ } else { ++ if (crq.crq.wLength != __constant_cpu_to_le16(0)) ++ ep->state = DATA_STAGE_OUT; ++ else ++ ep->state = STATUS_STAGE_IN; ++ } ++ ++ ret = -1; ++ if (ep->index == 0) ++ ret = handle_ep0_setup(udc, ep, &crq.crq); ++ else ++ ret = udc->driver->setup(&udc->gadget, &crq.crq); ++ ++ DBG(DBG_BUS, "req %02x.%02x, length %d, state %d, ret %d\n", ++ crq.crq.bRequestType, crq.crq.bRequest, ++ le16_to_cpu(crq.crq.wLength), ep->state, ret); ++ ++ if (ret < 0) { ++ /* Let the host know that we failed */ ++ set_protocol_stall(udc, ep); ++ } ++ } ++} ++ ++static void husb2_ep_irq(struct husb2_udc *udc, struct husb2_ep *ep) ++{ ++ struct husb2_request *req; ++ u32 epstatus; ++ u32 epctrl; ++ ++ epstatus = husb2_ep_readl(ep, STA); ++ epctrl = husb2_ep_readl(ep, CTL); ++ ++ DBG(DBG_INT, "%s: interrupt, status: 0x%08x\n", ++ ep_name(ep), epstatus); ++ ++ while ((epctrl & HUSB2_BIT(TX_PK_RDY)) ++ && !(epstatus & HUSB2_BIT(TX_PK_RDY))) { ++ BUG_ON(!ep_is_in(ep)); ++ ++ DBG(DBG_BUS, "%s: TX PK ready\n", ep_name(ep)); ++ ++ if (list_empty(&ep->queue)) { ++ dev_warn(&udc->pdev->dev, "ep_irq: queue empty\n"); ++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(TX_PK_RDY)); ++ return; ++ } ++ ++ req = list_entry(ep->queue.next, struct husb2_request, queue); ++ ++ if (req->using_dma) { ++ BUG_ON(!req->send_zlp); ++ ++ /* Send a zero-length packet */ ++ husb2_ep_writel(ep, SET_STA, ++ HUSB2_BIT(TX_PK_RDY)); ++ husb2_ep_writel(ep, CTL_DIS, ++ HUSB2_BIT(TX_PK_RDY)); ++ list_del_init(&req->queue); ++ submit_next_request(ep); ++ request_complete(ep, req, 0); ++ } else { ++ if (req->submitted) ++ next_fifo_transaction(ep, req); ++ else ++ submit_request(ep, req); ++ ++ if (req->last_transaction) { ++ list_del_init(&req->queue); ++ submit_next_request(ep); ++ request_complete(ep, req, 0); ++ } ++ } ++ ++ epstatus = husb2_ep_readl(ep, STA); ++ epctrl = husb2_ep_readl(ep, CTL); ++ } ++ if ((epstatus & epctrl) & HUSB2_BIT(RX_BK_RDY)) { ++ BUG_ON(ep_is_in(ep)); ++ ++ DBG(DBG_BUS, "%s: RX data ready\n", ep_name(ep)); ++ receive_data(ep); ++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_BK_RDY)); ++ } ++} ++ ++static void husb2_dma_irq(struct husb2_udc *udc, struct husb2_ep *ep) ++{ ++ struct husb2_request *req; ++ u32 status, control, pending; ++ ++ status = husb2_dma_readl(ep, STATUS); ++ control = husb2_dma_readl(ep, CONTROL); ++#ifdef CONFIG_DEBUG_FS ++ ep->last_dma_status = status; ++#endif ++ pending = status & control; ++ DBG(DBG_INT, "dma irq, status=%#08x, pending=%#08x, control=%#08x\n", ++ status, pending, control); ++ ++ BUG_ON(status & HUSB2_BIT(DMA_CH_EN)); ++ ++ if (list_empty(&ep->queue)) ++ /* Might happen if a reset comes along at the right moment */ ++ return; ++ ++ if (pending & (HUSB2_BIT(DMA_END_TR_ST) | HUSB2_BIT(DMA_END_BUF_ST))) { ++ req = list_entry(ep->queue.next, struct husb2_request, queue); ++ husb2_update_req(ep, req, status); ++ ++ if (req->send_zlp) { ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY)); ++ } else { ++ list_del_init(&req->queue); ++ submit_next_request(ep); ++ request_complete(ep, req, 0); ++ } ++ } ++} ++ ++static irqreturn_t husb2_udc_irq(int irq, void *devid, struct pt_regs *regs) ++{ ++ struct husb2_udc *udc = devid; ++ u32 status; ++ u32 dma_status; ++ u32 ep_status; ++ ++ spin_lock(&udc->lock); ++ ++ status = husb2_readl(udc, INT_STA); ++ DBG(DBG_INT, "irq, status=%#08x\n", status); ++ ++ if (status & HUSB2_BIT(DET_SUSPEND)) { ++ husb2_writel(udc, INT_CLR, HUSB2_BIT(DET_SUSPEND)); ++ //DBG(DBG_BUS, "Suspend detected\n"); ++ if (udc->gadget.speed != USB_SPEED_UNKNOWN ++ && udc->driver && udc->driver->suspend) ++ udc->driver->suspend(&udc->gadget); ++ } ++ ++ if (status & HUSB2_BIT(WAKE_UP)) { ++ husb2_writel(udc, INT_CLR, HUSB2_BIT(WAKE_UP)); ++ //DBG(DBG_BUS, "Wake Up CPU detected\n"); ++ } ++ ++ if (status & HUSB2_BIT(END_OF_RESUME)) { ++ husb2_writel(udc, INT_CLR, HUSB2_BIT(END_OF_RESUME)); ++ DBG(DBG_BUS, "Resume detected\n"); ++ if (udc->gadget.speed != USB_SPEED_UNKNOWN ++ && udc->driver && udc->driver->resume) ++ udc->driver->resume(&udc->gadget); ++ } ++ ++ dma_status = HUSB2_BFEXT(DMA_INT, status); ++ if (dma_status) { ++ int i; ++ ++ for (i = 1; i < HUSB2_NR_ENDPOINTS; i++) ++ if (dma_status & (1 << i)) ++ husb2_dma_irq(udc, &husb2_ep[i]); ++ } ++ ++ ep_status = HUSB2_BFEXT(EPT_INT, status); ++ if (ep_status) { ++ int i; ++ ++ for (i = 0; i < HUSB2_NR_ENDPOINTS; i++) ++ if (ep_status & (1 << i)) { ++ if (ep_is_control(&husb2_ep[i])) ++ husb2_control_irq(udc, &husb2_ep[i]); ++ else ++ husb2_ep_irq(udc, &husb2_ep[i]); ++ } ++ } ++ ++ if (status & HUSB2_BIT(END_OF_RESET)) { ++ husb2_writel(udc, INT_CLR, HUSB2_BIT(END_OF_RESET)); ++ if (status & HUSB2_BIT(HIGH_SPEED)) { ++ DBG(DBG_BUS, "High-speed bus reset detected\n"); ++ udc->gadget.speed = USB_SPEED_HIGH; ++ } else { ++ DBG(DBG_BUS, "Full-speed bus reset detected\n"); ++ udc->gadget.speed = USB_SPEED_FULL; ++ } ++ /* Better start from scratch... */ ++ reset_all_endpoints(udc); ++ husb2_ep[0].state = WAIT_FOR_SETUP; ++ udc_enable(udc); ++ } ++ ++ spin_unlock(&udc->lock); ++ ++ return IRQ_HANDLED; ++} ++ ++int usb_gadget_register_driver(struct usb_gadget_driver *driver) ++{ ++ struct husb2_udc *udc = &the_udc; ++ int ret; ++ ++ spin_lock(&udc->lock); ++ ++ ret = -ENODEV; ++ if (!udc->pdev) ++ goto out; ++ ret = -EBUSY; ++ if (udc->driver) ++ goto out; ++ ++ udc->driver = driver; ++ udc->gadget.dev.driver = &driver->driver; ++ ++ device_add(&udc->gadget.dev); ++ ret = driver->bind(&udc->gadget); ++ if (ret) { ++ DBG(DBG_ERR, "Could not bind to driver %s: error %d\n", ++ driver->driver.name, ret); ++ device_del(&udc->gadget.dev); ++ ++ udc->driver = NULL; ++ udc->gadget.dev.driver = NULL; ++ goto out; ++ } ++ ++ /* TODO: Create sysfs files */ ++ ++ DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name); ++ udc_enable(udc); ++ ++out: ++ spin_unlock(&udc->lock); ++ return ret; ++} ++EXPORT_SYMBOL(usb_gadget_register_driver); ++ ++int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) ++{ ++ struct husb2_udc *udc = &the_udc; ++ int ret; ++ ++ spin_lock(&udc->lock); ++ ++ ret = -ENODEV; ++ if (!udc->pdev) ++ goto out; ++ ret = -EINVAL; ++ if (driver != udc->driver) ++ goto out; ++ ++ local_irq_disable(); ++ udc_disable(udc); ++ local_irq_enable(); ++ ++ driver->unbind(&udc->gadget); ++ udc->driver = NULL; ++ ++ device_del(&udc->gadget.dev); ++ ++ /* TODO: Remove sysfs files */ ++ ++ DBG(DBG_GADGET, "unregistered driver `%s'\n", driver->driver.name); ++ ++out: ++ spin_unlock(&udc->lock); ++ return ret; ++} ++EXPORT_SYMBOL(usb_gadget_unregister_driver); ++ ++static int __devinit husb2_udc_probe(struct platform_device *pdev) ++{ ++ struct resource *regs, *fifo; ++ struct clk *pclk, *hclk; ++ struct husb2_udc *udc = &the_udc; ++ int irq, ret, i; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, CTRL_IOMEM_ID); ++ fifo = platform_get_resource(pdev, IORESOURCE_MEM, FIFO_IOMEM_ID); ++ if (!regs || !fifo) ++ return -ENXIO; ++ ++ irq = platform_get_irq(pdev, 0); ++ if (irq < 0) ++ return irq; ++ ++ pclk = clk_get(&pdev->dev, "pclk"); ++ if (IS_ERR(pclk)) ++ return PTR_ERR(pclk); ++ hclk = clk_get(&pdev->dev, "hclk"); ++ if (IS_ERR(hclk)) { ++ ret = PTR_ERR(hclk); ++ goto out_put_pclk; ++ } ++ ++ clk_enable(pclk); ++ clk_enable(hclk); ++ ++ udc->pdev = pdev; ++ udc->pclk = pclk; ++ udc->hclk = hclk; ++ ++ ret = -ENOMEM; ++ udc->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!udc->regs) { ++ dev_err(&pdev->dev, "Unable to map I/O memory, aborting.\n"); ++ goto out_disable_clocks; ++ } ++ dev_info(&pdev->dev, "MMIO registers at 0x%08lx mapped at %p\n", ++ (unsigned long)regs->start, udc->regs); ++ udc->fifo = ioremap(fifo->start, fifo->end - fifo->start + 1); ++ if (!udc->fifo) { ++ dev_err(&pdev->dev, "Unable to map FIFO, aborting.\n"); ++ goto out_unmap_regs; ++ } ++ dev_info(&pdev->dev, "FIFO at 0x%08lx mapped at %p\n", ++ (unsigned long)fifo->start, udc->fifo); ++ ++ device_initialize(&udc->gadget.dev); ++ udc->gadget.dev.parent = &pdev->dev; ++ udc->gadget.dev.dma_mask = pdev->dev.dma_mask; ++ ++ /* The 3-word descriptors must be 4-word aligned... */ ++ udc->desc_pool = dma_pool_create("husb2-desc", &pdev->dev, ++ sizeof(struct husb2_dma_desc), ++ 16, 0); ++ if (!udc->desc_pool) { ++ dev_err(&pdev->dev, "Cannot create descriptor DMA pool\n"); ++ goto out_unmap_fifo; ++ } ++ ++ platform_set_drvdata(pdev, udc); ++ ++ udc_disable(udc); ++ ++ INIT_LIST_HEAD(&husb2_ep[0].ep.ep_list); ++ husb2_ep[0].ep_regs = udc->regs + HUSB2_EPT_BASE(0); ++ husb2_ep[0].dma_regs = udc->regs + HUSB2_DMA_BASE(0); ++ husb2_ep[0].fifo = udc->fifo + HUSB2_FIFO_BASE(0); ++ for (i = 1; i < ARRAY_SIZE(husb2_ep); i++) { ++ struct husb2_ep *ep = &husb2_ep[i]; ++ ++ ep->ep_regs = udc->regs + HUSB2_EPT_BASE(i); ++ ep->dma_regs = udc->regs + HUSB2_DMA_BASE(i); ++ ep->fifo = udc->fifo + HUSB2_FIFO_BASE(i); ++ ++ list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); ++ } ++ ++ ret = request_irq(irq, husb2_udc_irq, SA_SAMPLE_RANDOM, ++ "husb2_udc", udc); ++ if (ret) { ++ dev_err(&pdev->dev, "Cannot request irq %d (error %d)\n", ++ irq, ret); ++ goto out_free_pool; ++ } ++ udc->irq = irq; ++ ++ husb2_init_debugfs(udc); ++ ++ return 0; ++ ++out_free_pool: ++ dma_pool_destroy(udc->desc_pool); ++out_unmap_fifo: ++ iounmap(udc->fifo); ++out_unmap_regs: ++ iounmap(udc->regs); ++out_disable_clocks: ++ clk_disable(hclk); ++ clk_disable(pclk); ++ clk_put(hclk); ++out_put_pclk: ++ clk_put(pclk); ++ ++ platform_set_drvdata(pdev, NULL); ++ ++ return ret; ++} ++ ++static int __devexit husb2_udc_remove(struct platform_device *pdev) ++{ ++ struct husb2_udc *udc; ++ ++ udc = platform_get_drvdata(pdev); ++ if (!udc) ++ return 0; ++ ++ husb2_cleanup_debugfs(udc); ++ ++ free_irq(udc->irq, udc); ++ dma_pool_destroy(udc->desc_pool); ++ iounmap(udc->fifo); ++ iounmap(udc->regs); ++ clk_disable(udc->hclk); ++ clk_disable(udc->pclk); ++ clk_put(udc->hclk); ++ clk_put(udc->pclk); ++ platform_set_drvdata(pdev, NULL); ++ ++ return 0; ++} ++ ++static struct platform_driver udc_driver = { ++ .probe = husb2_udc_probe, ++ .remove = __devexit_p(husb2_udc_remove), ++ .driver = { ++ .name = "usb", ++ }, ++}; ++ ++static int __init udc_init(void) ++{ ++ printk(KERN_INFO "husb2device: Driver version %s\n", DRIVER_VERSION); ++ return platform_driver_register(&udc_driver); ++} ++module_init(udc_init); ++ ++static void __exit udc_exit(void) ++{ ++ platform_driver_unregister(&udc_driver); ++} ++module_exit(udc_exit); ++ ++MODULE_DESCRIPTION("Atmel HUSB2 Device Controller driver"); ++MODULE_AUTHOR("Haavard Skinnemoen "); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.h 2006-11-02 16:03:44.000000000 +0100 +@@ -0,0 +1,406 @@ ++/* ++ * Driver for the Atmel HUSB2device high speed USB device controller ++ * ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++#ifndef __LINUX_USB_GADGET_HUSB2_UDC_H__ ++#define __LINUX_USB_GADGET_HUSB2_UDC_H__ ++ ++/* USB register offsets */ ++#define HUSB2_CTRL 0x0000 ++#define HUSB2_FNUM 0x0004 ++#define HUSB2_INT_ENB 0x0010 ++#define HUSB2_INT_STA 0x0014 ++#define HUSB2_INT_CLR 0x0018 ++#define HUSB2_EPT_RST 0x001c ++#define HUSB2_TST_SOF_CNT 0x00d0 ++#define HUSB2_TST_CNT_A 0x00d4 ++#define HUSB2_TST_CNT_B 0x00d8 ++#define HUSB2_TST_MODE_REG 0x00dc ++#define HUSB2_TST 0x00f0 ++ ++/* USB endpoint register offsets */ ++#define HUSB2_EPT_CFG 0x0000 ++#define HUSB2_EPT_CTL_ENB 0x0004 ++#define HUSB2_EPT_CTL_DIS 0x0008 ++#define HUSB2_EPT_CTL 0x000c ++#define HUSB2_EPT_SET_STA 0x0014 ++#define HUSB2_EPT_CLR_STA 0x0018 ++#define HUSB2_EPT_STA 0x001c ++ ++/* USB DMA register offsets */ ++#define HUSB2_DMA_NXT_DSC 0x0000 ++#define HUSB2_DMA_ADDRESS 0x0004 ++#define HUSB2_DMA_CONTROL 0x0008 ++#define HUSB2_DMA_STATUS 0x000c ++ ++/* Bitfields in CTRL */ ++#define HUSB2_DEV_ADDR_OFFSET 0 ++#define HUSB2_DEV_ADDR_SIZE 7 ++#define HUSB2_FADDR_EN_OFFSET 7 ++#define HUSB2_FADDR_EN_SIZE 1 ++#define HUSB2_EN_HUSB2_OFFSET 8 ++#define HUSB2_EN_HUSB2_SIZE 1 ++#define HUSB2_DETACH_OFFSET 9 ++#define HUSB2_DETACH_SIZE 1 ++#define HUSB2_REMOTE_WAKE_UP_OFFSET 10 ++#define HUSB2_REMOTE_WAKE_UP_SIZE 1 ++ ++/* Bitfields in FNUM */ ++#define HUSB2_MICRO_FRAME_NUM_OFFSET 0 ++#define HUSB2_MICRO_FRAME_NUM_SIZE 3 ++#define HUSB2_FRAME_NUMBER_OFFSET 3 ++#define HUSB2_FRAME_NUMBER_SIZE 11 ++#define HUSB2_FRAME_NUM_ERROR_OFFSET 31 ++#define HUSB2_FRAME_NUM_ERROR_SIZE 1 ++ ++/* Bitfields in INT_ENB/INT_STA/INT_CLR */ ++#define HUSB2_HIGH_SPEED_OFFSET 0 ++#define HUSB2_HIGH_SPEED_SIZE 1 ++#define HUSB2_DET_SUSPEND_OFFSET 1 ++#define HUSB2_DET_SUSPEND_SIZE 1 ++#define HUSB2_MICRO_SOF_OFFSET 2 ++#define HUSB2_MICRO_SOF_SIZE 1 ++#define HUSB2_SOF_OFFSET 3 ++#define HUSB2_SOF_SIZE 1 ++#define HUSB2_END_OF_RESET_OFFSET 4 ++#define HUSB2_END_OF_RESET_SIZE 1 ++#define HUSB2_WAKE_UP_OFFSET 5 ++#define HUSB2_WAKE_UP_SIZE 1 ++#define HUSB2_END_OF_RESUME_OFFSET 6 ++#define HUSB2_END_OF_RESUME_SIZE 1 ++#define HUSB2_UPSTREAM_RESUME_OFFSET 7 ++#define HUSB2_UPSTREAM_RESUME_SIZE 1 ++#define HUSB2_EPT_INT_OFFSET 8 ++#define HUSB2_EPT_INT_SIZE 16 ++#define HUSB2_DMA_INT_OFFSET 24 ++#define HUSB2_DMA_INT_SIZE 8 ++ ++/* Bitfields in EPT_RST */ ++#define HUSB2_RST_OFFSET 0 ++#define HUSB2_RST_SIZE 16 ++ ++/* Bitfields in TST_SOF_CNT */ ++#define HUSB2_SOF_CNT_MAX_OFFSET 0 ++#define HUSB2_SOF_CNT_MAX_SIZE 7 ++#define HUSB2_SOF_CNT_LOAD_OFFSET 7 ++#define HUSB2_SOF_CNT_LOAD_SIZE 1 ++ ++/* Bitfields in TST_CNT_A */ ++#define HUSB2_CNT_A_MAX_OFFSET 0 ++#define HUSB2_CNT_A_MAX_SIZE 7 ++#define HUSB2_CNT_A_LOAD_OFFSET 7 ++#define HUSB2_CNT_A_LOAD_SIZE 1 ++ ++/* Bitfields in TST_CNT_B */ ++#define HUSB2_CNT_B_MAX_OFFSET 0 ++#define HUSB2_CNT_B_MAX_SIZE 7 ++#define HUSB2_CNT_B_LOAD_OFFSET 7 ++#define HUSB2_CNT_B_LOAD_SIZE 1 ++ ++/* Bitfields in TST_MODE_REG */ ++#define HUSB2_TST_MODE_OFFSET 0 ++#define HUSB2_TST_MODE_SIZE 6 ++ ++/* Bitfields in HUSB2_TST */ ++#define HUSB2_SPEED_CFG_OFFSET 0 ++#define HUSB2_SPEED_CFG_SIZE 2 ++#define HUSB2_TST_J_MODE_OFFSET 2 ++#define HUSB2_TST_J_MODE_SIZE 1 ++#define HUSB2_TST_K_MODE_OFFSET 3 ++#define HUSB2_TST_K_MODE_SIZE 1 ++#define HUSB2_TST_PKT_MODE_OFFSE 4 ++#define HUSB2_TST_PKT_MODE_SIZE 1 ++#define HUSB2_OPMODE2_OFFSET 5 ++#define HUSB2_OPMODE2_SIZE 1 ++ ++/* Bitfields in EPT_CFG */ ++#define HUSB2_EPT_SIZE_OFFSET 0 ++#define HUSB2_EPT_SIZE_SIZE 3 ++#define HUSB2_EPT_DIR_OFFSET 3 ++#define HUSB2_EPT_DIR_SIZE 1 ++#define HUSB2_EPT_TYPE_OFFSET 4 ++#define HUSB2_EPT_TYPE_SIZE 2 ++#define HUSB2_BK_NUMBER_OFFSET 6 ++#define HUSB2_BK_NUMBER_SIZE 2 ++#define HUSB2_NB_TRANS_OFFSET 8 ++#define HUSB2_NB_TRANS_SIZE 2 ++#define HUSB2_EPT_MAPPED_OFFSET 31 ++#define HUSB2_EPT_MAPPED_SIZE 1 ++ ++/* Bitfields in EPT_CTL/EPT_CTL_ENB/EPT_CTL_DIS */ ++#define HUSB2_EPT_ENABLE_OFFSET 0 ++#define HUSB2_EPT_ENABLE_SIZE 1 ++#define HUSB2_AUTO_VALID_OFFSET 1 ++#define HUSB2_AUTO_VALID_SIZE 1 ++#define HUSB2_INT_DIS_DMA_OFFSET 3 ++#define HUSB2_INT_DIS_DMA_SIZE 1 ++#define HUSB2_NYET_DIS_OFFSET 4 ++#define HUSB2_NYET_DIS_SIZE 1 ++#define HUSB2_DATAX_RX_OFFSET 6 ++#define HUSB2_DATAX_RX_SIZE 1 ++#define HUSB2_MDATA_RX_OFFSET 7 ++#define HUSB2_MDATA_RX_SIZE 1 ++/* Bits 8-15 and 31 enable interrupts for respective bits in EPT_STA */ ++#define HUSB2_BUSY_BANK_IE_OFFSET 18 ++#define HUSB2_BUSY_BANK_IE_SIZE 1 ++ ++/* Bitfields in EPT_SET_STA/EPT_CLR_STA/EPT_STA */ ++#define HUSB2_FORCE_STALL_OFFSET 5 ++#define HUSB2_FORCE_STALL_SIZE 1 ++#define HUSB2_TOGGLE_SEQ_OFFSET 6 ++#define HUSB2_TOGGLE_SEQ_SIZE 2 ++#define HUSB2_ERR_OVFLW_OFFSET 8 ++#define HUSB2_ERR_OVFLW_SIZE 1 ++#define HUSB2_RX_BK_RDY_OFFSET 9 ++#define HUSB2_RX_BK_RDY_SIZE 1 ++#define HUSB2_KILL_BANK_OFFSET 9 ++#define HUSB2_KILL_BANK_SIZE 1 ++#define HUSB2_TX_COMPLETE_OFFSET 10 ++#define HUSB2_TX_COMPLETE_SIZE 1 ++#define HUSB2_TX_PK_RDY_OFFSET 11 ++#define HUSB2_TX_PK_RDY_SIZE 1 ++#define HUSB2_ISO_ERR_TRANS_OFFSET 11 ++#define HUSB2_ISO_ERR_TRANS_SIZE 1 ++#define HUSB2_RX_SETUP_OFFSET 12 ++#define HUSB2_RX_SETUP_SIZE 1 ++#define HUSB2_ISO_ERR_FLOW_OFFSET 12 ++#define HUSB2_ISO_ERR_FLOW_SIZE 1 ++#define HUSB2_STALL_SENT_OFFSET 13 ++#define HUSB2_STALL_SENT_SIZE 1 ++#define HUSB2_ISO_ERR_CRC_OFFSET 13 ++#define HUSB2_ISO_ERR_CRC_SIZE 1 ++#define HUSB2_ISO_ERR_NBTRANS_OFFSET 13 ++#define HUSB2_ISO_ERR_NBTRANS_SIZE 1 ++#define HUSB2_NAK_IN_OFFSET 14 ++#define HUSB2_NAK_IN_SIZE 1 ++#define HUSB2_ISO_ERR_FLUSH_OFFSET 14 ++#define HUSB2_ISO_ERR_FLUSH_SIZE 1 ++#define HUSB2_NAK_OUT_OFFSET 15 ++#define HUSB2_NAK_OUT_SIZE 1 ++#define HUSB2_CURRENT_BANK_OFFSET 16 ++#define HUSB2_CURRENT_BANK_SIZE 2 ++#define HUSB2_BUSY_BANKS_OFFSET 18 ++#define HUSB2_BUSY_BANKS_SIZE 2 ++#define HUSB2_BYTE_COUNT_OFFSET 20 ++#define HUSB2_BYTE_COUNT_SIZE 11 ++#define HUSB2_SHORT_PACKET_OFFSET 31 ++#define HUSB2_SHORT_PACKET_SIZE 1 ++ ++/* Bitfields in DMA_CONTROL */ ++#define HUSB2_DMA_CH_EN_OFFSET 0 ++#define HUSB2_DMA_CH_EN_SIZE 1 ++#define HUSB2_DMA_LINK_OFFSET 1 ++#define HUSB2_DMA_LINK_SIZE 1 ++#define HUSB2_DMA_END_TR_EN_OFFSET 2 ++#define HUSB2_DMA_END_TR_EN_SIZE 1 ++#define HUSB2_DMA_END_BUF_EN_OFFSET 3 ++#define HUSB2_DMA_END_BUF_EN_SIZE 1 ++#define HUSB2_DMA_END_TR_IE_OFFSET 4 ++#define HUSB2_DMA_END_TR_IE_SIZE 1 ++#define HUSB2_DMA_END_BUF_IE_OFFSET 5 ++#define HUSB2_DMA_END_BUF_IE_SIZE 1 ++#define HUSB2_DMA_DESC_LOAD_IE_OFFSET 6 ++#define HUSB2_DMA_DESC_LOAD_IE_SIZE 1 ++#define HUSB2_DMA_BURST_LOCK_OFFSET 7 ++#define HUSB2_DMA_BURST_LOCK_SIZE 1 ++#define HUSB2_DMA_BUF_LEN_OFFSET 16 ++#define HUSB2_DMA_BUF_LEN_SIZE 16 ++ ++/* Bitfields in DMA_STATUS */ ++#define HUSB2_DMA_CH_ACTIVE_OFFSET 1 ++#define HUSB2_DMA_CH_ACTIVE_SIZE 1 ++#define HUSB2_DMA_END_TR_ST_OFFSET 4 ++#define HUSB2_DMA_END_TR_ST_SIZE 1 ++#define HUSB2_DMA_END_BUF_ST_OFFSET 5 ++#define HUSB2_DMA_END_BUF_ST_SIZE 1 ++#define HUSB2_DMA_DESC_LOAD_ST_OFFSET 6 ++#define HUSB2_DMA_DESC_LOAD_ST_SIZE 1 ++ ++/* Constants for SPEED_CFG */ ++#define HUSB2_SPEED_CFG_NORMAL 0 ++#define HUSB2_SPEED_CFG_FORCE_HIGH 2 ++#define HUSB2_SPEED_CFG_FORCE_FULL 3 ++ ++/* Constants for EPT_SIZE */ ++#define HUSB2_EPT_SIZE_8 0 ++#define HUSB2_EPT_SIZE_16 1 ++#define HUSB2_EPT_SIZE_32 2 ++#define HUSB2_EPT_SIZE_64 3 ++#define HUSB2_EPT_SIZE_128 4 ++#define HUSB2_EPT_SIZE_256 5 ++#define HUSB2_EPT_SIZE_512 6 ++#define HUSB2_EPT_SIZE_1024 7 ++ ++/* Constants for EPT_TYPE */ ++#define HUSB2_EPT_TYPE_CONTROL 0 ++#define HUSB2_EPT_TYPE_ISO 1 ++#define HUSB2_EPT_TYPE_BULK 2 ++#define HUSB2_EPT_TYPE_INT 3 ++ ++/* Constants for BK_NUMBER */ ++#define HUSB2_BK_NUMBER_ZERO 0 ++#define HUSB2_BK_NUMBER_ONE 1 ++#define HUSB2_BK_NUMBER_DOUBLE 2 ++#define HUSB2_BK_NUMBER_TRIPLE 3 ++ ++/* Bit manipulation macros */ ++#define HUSB2_BIT(name) \ ++ (1 << HUSB2_##name##_OFFSET) ++#define HUSB2_BF(name,value) \ ++ (((value) & ((1 << HUSB2_##name##_SIZE) - 1)) \ ++ << HUSB2_##name##_OFFSET) ++#define HUSB2_BFEXT(name,value) \ ++ (((value) >> HUSB2_##name##_OFFSET) \ ++ & ((1 << HUSB2_##name##_SIZE) - 1)) ++#define HUSB2_BFINS(name,value,old) \ ++ (((old) & ~(((1 << HUSB2_##name##_SIZE) - 1) \ ++ << HUSB2_##name##_OFFSET)) \ ++ | HUSB2_BF(name,value)) ++ ++/* Register access macros */ ++#define husb2_readl(udc,reg) \ ++ __raw_readl((udc)->regs + HUSB2_##reg) ++#define husb2_writel(udc,reg,value) \ ++ __raw_writel((value), (udc)->regs + HUSB2_##reg) ++#define husb2_ep_readl(ep,reg) \ ++ __raw_readl((ep)->ep_regs + HUSB2_EPT_##reg) ++#define husb2_ep_writel(ep,reg,value) \ ++ __raw_writel((value), (ep)->ep_regs + HUSB2_EPT_##reg) ++#define husb2_dma_readl(ep,reg) \ ++ __raw_readl((ep)->dma_regs + HUSB2_DMA_##reg) ++#define husb2_dma_writel(ep,reg,value) \ ++ __raw_writel((value), (ep)->dma_regs + HUSB2_DMA_##reg) ++ ++/* Calculate base address for a given endpoint or DMA controller */ ++#define HUSB2_EPT_BASE(x) (0x100 + (x) * 0x20) ++#define HUSB2_DMA_BASE(x) (0x300 + (x) * 0x10) ++#define HUSB2_FIFO_BASE(x) ((x) << 16) ++ ++/* Synth parameters */ ++#define HUSB2_NR_ENDPOINTS 7 ++ ++#define EP0_FIFO_SIZE 64 ++#define EP0_EPT_SIZE HUSB2_EPT_SIZE_64 ++#define EP0_NR_BANKS 1 ++#define BULK_FIFO_SIZE 512 ++#define BULK_EPT_SIZE HUSB2_EPT_SIZE_512 ++#define BULK_NR_BANKS 2 ++#define ISO_FIFO_SIZE 1024 ++#define ISO_EPT_SIZE HUSB2_EPT_SIZE_1024 ++#define ISO_NR_BANKS 3 ++#define INT_FIFO_SIZE 64 ++#define INT_EPT_SIZE HUSB2_EPT_SIZE_64 ++#define INT_NR_BANKS 3 ++ ++enum husb2_ctrl_state { ++ WAIT_FOR_SETUP, ++ DATA_STAGE_IN, ++ DATA_STAGE_OUT, ++ STATUS_STAGE_IN, ++ STATUS_STAGE_OUT, ++ STATUS_STAGE_ADDR, ++}; ++/* ++ EP_STATE_IDLE, ++ EP_STATE_SETUP, ++ EP_STATE_IN_DATA, ++ EP_STATE_OUT_DATA, ++ EP_STATE_SET_ADDR_STATUS, ++ EP_STATE_RX_STATUS, ++ EP_STATE_TX_STATUS, ++ EP_STATE_HALT, ++*/ ++ ++struct husb2_dma_desc { ++ dma_addr_t next; ++ dma_addr_t addr; ++ u32 ctrl; ++}; ++ ++struct husb2_ep { ++ int state; ++ void __iomem *ep_regs; ++ void __iomem *dma_regs; ++ void __iomem *fifo; ++ struct usb_ep ep; ++ struct husb2_udc *udc; ++ ++ struct list_head queue; ++ const struct usb_endpoint_descriptor *desc; ++ ++ u16 fifo_size; ++ u8 nr_banks; ++ u8 index; ++ u8 capabilities; ++ ++#ifdef CONFIG_DEBUG_FS ++ u32 last_dma_status; ++ struct dentry *debugfs_dir; ++ struct dentry *debugfs_queue; ++ struct dentry *debugfs_dma_status; ++#endif ++}; ++#define HUSB2_EP_CAP_ISOC 0x0001 ++#define HUSB2_EP_CAP_DMA 0x0002 ++ ++struct husb2_packet { ++ struct husb2_dma_desc *desc; ++ dma_addr_t desc_dma; ++}; ++ ++struct husb2_request { ++ struct usb_request req; ++ struct list_head queue; ++ ++ struct husb2_packet *packet; ++ unsigned int nr_pkts; ++ ++ unsigned int submitted:1; ++ unsigned int using_dma:1; ++ unsigned int last_transaction:1; ++ unsigned int send_zlp:1; ++}; ++ ++struct husb2_udc { ++ spinlock_t lock; ++ ++ void __iomem *regs; ++ void __iomem *fifo; ++ ++ struct dma_pool *desc_pool; ++ ++ struct usb_gadget gadget; ++ struct usb_gadget_driver *driver; ++ struct platform_device *pdev; ++ int irq; ++ struct clk *pclk; ++ struct clk *hclk; ++ ++#ifdef CONFIG_DEBUG_FS ++ struct dentry *debugfs_root; ++ struct dentry *debugfs_regs; ++#endif ++}; ++ ++#define to_husb2_ep(x) container_of((x), struct husb2_ep, ep) ++#define to_husb2_req(x) container_of((x), struct husb2_request, req) ++#define to_husb2_udc(x) container_of((x), struct husb2_udc, gadget) ++ ++#define ep_index(ep) ((ep)->index) ++#define ep_can_dma(ep) ((ep)->capabilities & HUSB2_EP_CAP_DMA) ++#define ep_is_in(ep) (((ep)->desc->bEndpointAddress \ ++ & USB_ENDPOINT_DIR_MASK) \ ++ == USB_DIR_IN) ++#define ep_is_isochronous(ep) \ ++ (((ep)->desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) \ ++ == USB_ENDPOINT_XFER_ISOC) ++#define ep_is_control(ep) (ep_index(ep) == 0) ++#define ep_name(ep) ((ep)->ep.name) ++#define ep_is_idle(ep) ((ep)->state == EP_STATE_IDLE) ++ ++#endif /* __LINUX_USB_GADGET_HUSB2_H */ diff --git a/packages/linux/linux-2.6.18/atmel-lcdc-framebuffer-driver.patch b/packages/linux/linux-2.6.18/atmel-lcdc-framebuffer-driver.patch new file mode 100644 index 0000000000..d4c9204059 --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-lcdc-framebuffer-driver.patch @@ -0,0 +1,1192 @@ +--- + drivers/video/Kconfig | 22 + + drivers/video/Makefile | 1 + drivers/video/fbmem.c | 6 + drivers/video/sidsafb.c | 805 ++++++++++++++++++++++++++++++++++++++++ + include/asm-avr32/periph/lcdc.h | 271 +++++++++++++ + include/linux/fb.h | 3 + 6 files changed, 1107 insertions(+), 1 deletion(-) + +Index: linux-2.6.18-avr32/drivers/video/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/video/Kconfig 2006-11-02 15:54:18.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/video/Kconfig 2006-11-02 15:56:20.000000000 +0100 +@@ -271,6 +271,28 @@ config FB_SA1100 + If you plan to use the LCD display with your SA-1100 system, say + Y here. + ++config FB_SIDSA ++ tristate "SIDSA LCDC support" ++ select FB_CFB_FILLRECT ++ select FB_CFB_COPYAREA ++ select FB_CFB_IMAGEBLIT ++ depends on FB && AVR32 ++ help ++ This enables support for the SIDSA LCD Controller. ++ ++config FB_SIDSA_DEFAULT_BPP ++ int "SIDSA LCDC default color depth" ++ default 24 ++ depends on FB_SIDSA ++ help ++ Specify the maximum color depth you want to be able to ++ support. This, together with the resolution of the LCD ++ panel, determines the amount of framebuffer memory allocated ++ when the driver is initialized. ++ ++ Allowable values are 1, 2, 4, 8, 16, 24 and 32. If unsure, ++ say 24. ++ + config FB_IMX + tristate "Motorola i.MX LCD support" + depends on FB && ARM && ARCH_IMX +Index: linux-2.6.18-avr32/drivers/video/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/video/Makefile 2006-11-02 15:54:18.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/video/Makefile 2006-11-02 15:56:20.000000000 +0100 +@@ -75,6 +75,7 @@ obj-$(CONFIG_FB_HP300) += hpf + obj-$(CONFIG_FB_G364) += g364fb.o + obj-$(CONFIG_FB_SA1100) += sa1100fb.o + obj-$(CONFIG_FB_SUN3) += sun3fb.o ++obj-$(CONFIG_FB_SIDSA) += sidsafb.o + obj-$(CONFIG_FB_HIT) += hitfb.o + obj-$(CONFIG_FB_EPSON1355) += epson1355fb.o + obj-$(CONFIG_FB_PVR2) += pvr2fb.o +Index: linux-2.6.18-avr32/drivers/video/fbmem.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/video/fbmem.c 2006-11-02 15:54:18.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/video/fbmem.c 2006-11-02 15:56:20.000000000 +0100 +@@ -1153,6 +1153,7 @@ fb_mmap(struct file *file, struct vm_are + /* frame buffer memory */ + start = info->fix.smem_start; + len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.smem_len); ++ pr_debug("fb_mmap: start = 0x%08lx, len = 0x%08lx\n", start, len); + if (off >= len) { + /* memory mapped io */ + off -= len; +@@ -1168,6 +1169,7 @@ fb_mmap(struct file *file, struct vm_are + if ((vma->vm_end - vma->vm_start + off) > len) + return -EINVAL; + off += start; ++ pr_debug("fb_mmap: off = 0x%08lx\n", off); + vma->vm_pgoff = off >> PAGE_SHIFT; + /* This is an IO map - tell maydump to skip this VMA */ + vma->vm_flags |= VM_IO | VM_RESERVED; +@@ -1198,6 +1200,10 @@ fb_mmap(struct file *file, struct vm_are + pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE; + #elif defined(__arm__) || defined(__sh__) || defined(__m32r__) + vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); ++#elif defined(__avr32__) ++ vma->vm_page_prot = __pgprot((pgprot_val(vma->vm_page_prot) ++ & ~_PAGE_CACHABLE) ++ | (_PAGE_BUFFER | _PAGE_DIRTY)); + #elif defined(__ia64__) + if (efi_range_is_wc(vma->vm_start, vma->vm_end - vma->vm_start)) + vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); +Index: linux-2.6.18-avr32/drivers/video/sidsafb.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/video/sidsafb.c 2006-11-02 16:07:55.000000000 +0100 +@@ -0,0 +1,805 @@ ++/* ++ * Framebuffer Driver for Atmel/SIDSA LCD Controller ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#undef DEBUG ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++ ++/* More or less configurable parameters */ ++#define SIDSAFB_FIFO_SIZE 512 ++#define SIDSAFB_DMA_BURST_LEN 8 ++ ++/* TODO: These should be autogenerated from part description file */ ++#define LCDC_DISTYPE_STN_MONO 0 ++#define LCDC_DISTYPE_STN_COLOR 1 ++#define LCDC_DISTYPE_TFT 2 ++#define LCDC_LUT 0xc00 ++ ++struct sidsafb_info { ++ spinlock_t lock; ++ struct fb_info * info; ++ void __iomem * regs; ++ unsigned long irq_base; ++ wait_queue_head_t vsync_wait; ++ unsigned int guard_time; ++ struct clk *hclk; ++ struct clk *pixclk; ++ struct platform_device *pdev; ++ u32 pseudo_palette[16]; ++}; ++ ++/* ++ * How large framebuffer to allocate if none was provided by the ++ * platform. This default is the smallest we can possibly get away ++ * with. ++ */ ++static unsigned long fb_size = (320 * 240); ++ ++#if 0 ++static struct fb_videomode sony_modes[] = { ++ { ++ .refresh = 48, ++ .xres = 240, .yres = 160, ++ .pixclock = 520833, ++ ++ .left_margin = 7, .right_margin = 9, ++ .upper_margin = 19, .lower_margin = 20, ++ .hsync_len = 9, .vsync_len = 2, ++ ++ .sync = 0, ++ .vmode = FB_VMODE_NONINTERLACED, ++ }, ++}; ++#endif ++ ++#if 0 ++static struct fb_videomode vga_modes[] = { ++ { ++ .refresh = 122, ++ .xres = 320, .yres = 240, ++ .pixclock = 80000, ++ ++ .left_margin = 10, .right_margin = 20, ++ .upper_margin = 30, .lower_margin = 5, ++ .hsync_len = 20, .vsync_len = 3, ++ ++ .sync = 0, ++ .vmode = FB_VMODE_NONINTERLACED, ++ }, ++ { ++ .refresh = 70, ++ .xres = 640, .yres = 480, ++ .pixclock = 40000, ++ ++ .left_margin = 10, .right_margin = 20, ++ .upper_margin = 30, .lower_margin = 5, ++ .hsync_len = 20, .vsync_len = 3, ++ ++ .sync = 0, ++ .vmode = FB_VMODE_NONINTERLACED, ++ }, ++}; ++#else ++static struct fb_videomode samsung_modes[] = { ++ { ++ .refresh = 75, ++ .xres = 320, .yres = 240, ++ .pixclock = 145111, ++ ++ .left_margin = 17, .right_margin = 33, ++ .upper_margin = 8, .lower_margin = 10, ++ .hsync_len = 16, .vsync_len = 1, ++ ++ .sync = FB_SYNC_PCLK_RISING, ++ .vmode = FB_VMODE_NONINTERLACED, ++ }, ++}; ++#endif ++ ++#if 1 ++static struct fb_monspecs default_monspecs = { ++ .modedb = samsung_modes, ++ .manufacturer = "SNG", ++ .monitor = "LCD panel", ++ .serial_no = "xxxx", ++ .ascii = "yyyy", ++ .modedb_len = ARRAY_SIZE(samsung_modes), ++ .hfmin = 14820, ++ .hfmax = 22230, ++ .vfmin = 60, ++ .vfmax = 90, ++ .dclkmax = 30000000, ++}; ++#endif ++ ++#if 0 ++static struct fb_monspecs default_monspecs = { ++ .modedb = sony_modes, ++ .manufacturer = "SNY", /* 4 chars?!? */ ++ .monitor = "LCD panel", ++ .serial_no = "xxxx", ++ .ascii = "yyyy", ++ .modedb_len = ARRAY_SIZE(sony_modes), ++ .hfmin = 7000, ++ .hfmax = 8000, ++ .vfmin = 45, ++ .vfmax = 50, ++}; ++// #else ++static struct fb_monspecs default_monspecs = { ++ .modedb = vga_modes, ++ .manufacturer = "VGA", ++ .monitor = "Generic VGA", ++ .serial_no = "xxxx", ++ .ascii = "yyyy", ++ .modedb_len = ARRAY_SIZE(vga_modes), ++ .hfmin = 30000, ++ .hfmax = 64000, ++ .vfmin = 50, ++ .vfmax = 150, ++}; ++#endif ++ ++/* Driver defaults */ ++static struct fb_fix_screeninfo sidsafb_fix __devinitdata = { ++ .id = "sidsafb", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .xpanstep = 1, ++ .ypanstep = 1, ++ .ywrapstep = 0, ++ .accel = FB_ACCEL_NONE, ++}; ++ ++static void sidsafb_update_dma(struct fb_info *info, ++ struct fb_var_screeninfo *var) ++{ ++ struct sidsafb_info *sinfo = info->par; ++ struct fb_fix_screeninfo *fix = &info->fix; ++ unsigned long dma_addr; ++ unsigned long pixeloff; ++ unsigned long dma2dcfg; ++ ++ dma_addr = (fix->smem_start + var->yoffset * fix->line_length ++ + var->xoffset * var->bits_per_pixel / 8); ++ ++ dma_addr &= ~3UL; ++ pixeloff = LCDC_MKBF(DMA2DCFG_PIXELOFF, var->xoffset * var->bits_per_pixel); ++ ++ /* Set framebuffer DMA base address and pixel offset */ ++ lcdc_writel(sinfo, DMABADDR1, dma_addr); ++ dma2dcfg = lcdc_readl(sinfo, DMA2DCFG); ++ dma2dcfg = LCDC_INSBF(DMA2DCFG_PIXELOFF, pixeloff, dma2dcfg); ++ lcdc_writel(sinfo, DMA2DCFG, dma2dcfg); ++ ++ /* Update configuration */ ++ lcdc_writel(sinfo, DMACON, (lcdc_readl(sinfo, DMACON) ++ | LCDC_BIT(DMACON_DMAUPDT))); ++} ++ ++/** ++ * sidsafb_check_var - Validates a var passed in. ++ * @var: frame buffer variable screen structure ++ * @info: frame buffer structure that represents a single frame buffer ++ * ++ * Checks to see if the hardware supports the state requested by ++ * var passed in. This function does not alter the hardware ++ * state!!! This means the data stored in struct fb_info and ++ * struct sidsafb_info do not change. This includes the var ++ * inside of struct fb_info. Do NOT change these. This function ++ * can be called on its own if we intent to only test a mode and ++ * not actually set it. The stuff in modedb.c is a example of ++ * this. If the var passed in is slightly off by what the ++ * hardware can support then we alter the var PASSED in to what ++ * we can do. If the hardware doesn't support mode change a ++ * -EINVAL will be returned by the upper layers. You don't need ++ * to implement this function then. If you hardware doesn't ++ * support changing the resolution then this function is not ++ * needed. In this case the driver would just provide a var that ++ * represents the static state the screen is in. ++ * ++ * Returns negative errno on error, or zero on success. ++ */ ++static int sidsafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++ unsigned long new_fb_size; ++ ++ pr_debug("sidsafb_check_var:\n"); ++ pr_debug(" resolution: %ux%u\n", var->xres, var->yres); ++ pr_debug(" pixclk: %llu Hz\n", 1000000000000ULL / var->pixclock); ++ pr_debug(" bpp: %u\n", var->bits_per_pixel); ++ ++ new_fb_size = (var->xres_virtual * var->yres_virtual ++ * ((var->bits_per_pixel + 7) / 8)); ++ if (new_fb_size > info->fix.smem_len) { ++ printk(KERN_NOTICE ++ "sidsafb: %uB framebuffer too small for %ux%ux%u\n", ++ info->fix.smem_len, var->xres_virtual, ++ var->yres_virtual, var->bits_per_pixel); ++ return -EINVAL; ++ } ++ ++ /* Force same alignment for each line */ ++ var->xres = (var->xres + 3) & ~3UL; ++ var->xres_virtual = (var->xres_virtual + 3) & ~3UL; ++ ++ var->red.msb_right = var->green.msb_right = var->blue.msb_right = 0; ++ var->transp.offset = var->transp.length = 0; ++ ++ switch (var->bits_per_pixel) { ++ case 2: ++ case 4: ++ case 8: ++ var->red.offset = var->green.offset = var->blue.offset = 0; ++ var->red.length = var->green.length = var->blue.length ++ = var->bits_per_pixel; ++ break; ++ case 15: ++ case 16: ++ /* ++ * Bit 16 is the "intensity" bit, I think. Not sure ++ * what we're going to use that for... ++ */ ++ var->red.offset = 0; ++ var->green.offset = 5; ++ var->blue.offset = 10; ++ var->red.length = 5; ++ var->green.length = 5; ++ var->blue.length = 5; ++ break; ++ case 24: ++ case 32: ++ var->red.offset = 16; ++ var->green.offset = 8; ++ var->blue.offset = 0; ++ var->red.length = var->green.length = var->blue.length = 8; ++ break; ++ default: ++ printk(KERN_NOTICE "sidsafb: color depth %d not supported\n", ++ var->bits_per_pixel); ++ return -EINVAL; ++ } ++ ++ var->xoffset = var->yoffset = 0; ++ var->red.msb_right = var->green.msb_right = var->blue.msb_right = ++ var->transp.msb_right = 0; ++ ++ return 0; ++} ++ ++/** ++ * sidsafb_set_par - Alters the hardware state. ++ * @info: frame buffer structure that represents a single frame buffer ++ * ++ * Using the fb_var_screeninfo in fb_info we set the resolution ++ * of the this particular framebuffer. This function alters the ++ * par AND the fb_fix_screeninfo stored in fb_info. It doesn't ++ * not alter var in fb_info since we are using that data. This ++ * means we depend on the data in var inside fb_info to be ++ * supported by the hardware. sidsafb_check_var is always called ++ * before sidsafb_set_par to ensure this. Again if you can't ++ * change the resolution you don't need this function. ++ * ++ */ ++static int sidsafb_set_par(struct fb_info *info) ++{ ++ struct sidsafb_info *sinfo = info->par; ++ unsigned long value; ++ ++ pr_debug("sidsafb_set_par:\n"); ++ pr_debug(" * resolution: %ux%u (%ux%u virtual)\n", ++ info->var.xres, info->var.yres, ++ info->var.xres_virtual, info->var.yres_virtual); ++ ++ /* Turn off the LCD controller and the DMA controller */ ++ pr_debug("writing 0x%08x to %p\n", ++ LCDC_MKBF(PWRCON_GUARD_TIME, sinfo->guard_time), ++ sinfo->regs + LCDC_PWRCON); ++ lcdc_writel(sinfo, PWRCON, ++ LCDC_MKBF(PWRCON_GUARD_TIME, sinfo->guard_time)); ++ pr_debug("writing 0 to %p\n", sinfo->regs + LCDC_DMACON); ++ lcdc_writel(sinfo, DMACON, 0); ++ ++ info->fix.line_length = (info->var.xres_virtual ++ * (info->var.bits_per_pixel / 8)); ++ ++ if (info->var.bits_per_pixel <= 8) ++ info->fix.visual = FB_VISUAL_PSEUDOCOLOR; ++ else ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ ++ /* Re-initialize the DMA engine... */ ++ pr_debug(" * update DMA engine\n"); ++ sidsafb_update_dma(info, &info->var); ++ ++ /* ...set frame size and burst length = 8 words (?) */ ++ value = LCDC_MKBF(DMAFRMCFG_FRMSIZE, ++ (info->var.yres * info->fix.line_length + 3) / 4); ++ value |= LCDC_MKBF(DMAFRMCFG_BRSTLEN, (SIDSAFB_DMA_BURST_LEN - 1)); ++ lcdc_writel(sinfo, DMAFRMCFG, value); ++ ++ /* ...set 2D configuration (necessary for xres_virtual != xres) */ ++ value = LCDC_MKBF(DMA2DCFG_ADDRINC, ++ info->var.xres_virtual - info->var.xres); ++ lcdc_writel(sinfo, DMA2DCFG, value); ++ ++ /* ...wait for DMA engine to become idle... */ ++ while (lcdc_readl(sinfo, DMACON) & LCDC_BIT(DMACON_DMABUSY)) ++ msleep(10); ++ ++ pr_debug(" * re-enable DMA engine\n"); ++ /* ...and enable it with updated configuration */ ++ lcdc_writel(sinfo, DMACON, (LCDC_BIT(DMACON_DMAEN) ++ | LCDC_BIT(DMACON_DMAUPDT) ++ | LCDC_BIT(DMACON_DMA2DEN))); ++ ++ /* Now, the LCD core... */ ++ ++ /* Set pixel clock. */ ++ value = (clk_get_rate(sinfo->pixclk) / 100000) * info->var.pixclock; ++ value /= 10000000; ++ value = (value + 1) / 2; ++ if (value == 0) { ++ printk("sidsafb: Bypassing lcdc_pclk divider\n"); ++ lcdc_writel(sinfo, LCDCON1, LCDC_BIT(LCDCON1_BYPASS)); ++ } else { ++ lcdc_writel(sinfo, LCDCON1, LCDC_MKBF(LCDCON1_CLKVAL, value - 1)); ++ } ++ ++ /* Initialize control register 2 */ ++ value = (LCDC_BIT(LCDCON2_CLKMOD) ++ | LCDC_MKBF(LCDCON2_DISTYPE, LCDC_DISTYPE_TFT)); ++ if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT)) ++ value |= LCDC_BIT(LCDCON2_INVLINE); ++ if (!(info->var.sync & FB_SYNC_VERT_HIGH_ACT)) ++ value |= LCDC_BIT(LCDCON2_INVFRAME); ++ if (info->var.sync & FB_SYNC_PCLK_RISING) ++ value |= LCDC_BIT(LCDCON2_INVCLK); ++ ++ switch (info->var.bits_per_pixel) { ++ case 1: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 0); break; ++ case 2: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 1); break; ++ case 4: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 2); break; ++ case 8: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 3); break; ++ case 15: /* fall through */ ++ case 16: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 4); break; ++ case 24: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 5); break; ++ case 32: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 6); break; ++ default: BUG(); break; ++ } ++ pr_debug(" * LCDCON2 = %08lx\n", value); ++ lcdc_writel(sinfo, LCDCON2, value); ++ ++ /* Vertical timing */ ++ value = LCDC_MKBF(LCDTIM1_VPW, info->var.vsync_len - 1); ++ value |= LCDC_MKBF(LCDTIM1_VBP, info->var.upper_margin); ++ value |= LCDC_MKBF(LCDTIM1_VFP, info->var.lower_margin); ++ pr_debug(" * LCDTIM1 = %08lx\n", value); ++ lcdc_writel(sinfo, LCDTIM1, value); ++ ++ /* Horizontal timing */ ++ value = LCDC_MKBF(LCDTIM2_HFP, info->var.right_margin - 1); ++ value |= LCDC_MKBF(LCDTIM2_HPW, info->var.hsync_len - 1); ++ value |= LCDC_MKBF(LCDTIM2_HBP, info->var.left_margin - 1); ++ pr_debug(" * LCDTIM2 = %08lx\n", value); ++ lcdc_writel(sinfo, LCDTIM2, value); ++ ++ /* Display size */ ++ value = LCDC_MKBF(LCDFRMCFG_LINESIZE, info->var.xres - 1); ++ value |= LCDC_MKBF(LCDFRMCFG_LINEVAL, info->var.yres - 1); ++ lcdc_writel(sinfo, LCDFRMCFG, value); ++ ++ /* FIFO Threshold: Use formula from data sheet */ ++ value = SIDSAFB_FIFO_SIZE - (2 * SIDSAFB_DMA_BURST_LEN + 3); ++ lcdc_writel(sinfo, LCDFIFO, value); ++ ++ /* Toggle LCD_MODE every frame */ ++ lcdc_writel(sinfo, LCDMVAL, 0); ++ ++ /* Disable all interrupts */ ++ lcdc_writel(sinfo, LCD_IDR, ~0UL); ++ ++ /* Wait for the LCDC core to become idle and enable it */ ++ while(lcdc_readl(sinfo, PWRCON) & LCDC_BIT(PWRCON_LCD_BUSY)) ++ msleep(10); ++ ++ pr_debug(" * re-enable LCD core\n"); ++ lcdc_writel(sinfo, PWRCON, ++ LCDC_MKBF(PWRCON_GUARD_TIME, sinfo->guard_time) ++ | LCDC_BIT(PWRCON_LCD_PWR)); ++ ++ pr_debug(" * DONE\n"); ++ return 0; ++} ++ ++static inline u_int chan_to_field(u_int chan, const struct fb_bitfield *bf) ++{ ++ chan &= 0xffff; ++ chan >>= 16 - bf->length; ++ return chan << bf->offset; ++} ++ ++/** ++ * sidsafb_setcolreg - Optional function. Sets a color register. ++ * @regno: Which register in the CLUT we are programming ++ * @red: The red value which can be up to 16 bits wide ++ * @green: The green value which can be up to 16 bits wide ++ * @blue: The blue value which can be up to 16 bits wide. ++ * @transp: If supported the alpha value which can be up to 16 bits wide. ++ * @info: frame buffer info structure ++ * ++ * Set a single color register. The values supplied have a 16 bit ++ * magnitude which needs to be scaled in this function for the hardware. ++ * Things to take into consideration are how many color registers, if ++ * any, are supported with the current color visual. With truecolor mode ++ * no color palettes are supported. Here a psuedo palette is created ++ * which we store the value in pseudo_palette in struct fb_info. For ++ * pseudocolor mode we have a limited color palette. To deal with this ++ * we can program what color is displayed for a particular pixel value. ++ * DirectColor is similar in that we can program each color field. If ++ * we have a static colormap we don't need to implement this function. ++ * ++ * Returns negative errno on error, or zero on success. In an ++ * ideal world, this would have been the case, but as it turns ++ * out, the other drivers return 1 on failure, so that's what ++ * we're going to do. ++ */ ++static int sidsafb_setcolreg(unsigned int regno, unsigned int red, ++ unsigned int green, unsigned int blue, ++ unsigned int transp, struct fb_info *info) ++{ ++ struct sidsafb_info *sinfo = info->par; ++ unsigned int val; ++ u32 *pal; ++ int ret = 1; ++ ++ if (info->var.grayscale) ++ red = green = blue = (19595 * red + 38470 * green ++ + 7471 * blue) >> 16; ++ ++ switch (info->fix.visual) { ++ case FB_VISUAL_TRUECOLOR: ++ if (regno < 16) { ++ pal = info->pseudo_palette; ++ ++ val = chan_to_field(red, &info->var.red); ++ val |= chan_to_field(green, &info->var.green); ++ val |= chan_to_field(blue, &info->var.blue); ++ ++ pal[regno] = val; ++ ret = 0; ++ } ++ break; ++ ++ case FB_VISUAL_PSEUDOCOLOR: ++ if (regno < 256) { ++ val = ((red >> 11) & 0x001f); ++ val |= ((green >> 6) & 0x03e0); ++ val |= ((blue >> 1) & 0x7c00); ++ ++ /* ++ * TODO: intensity bit. Maybe something like ++ * ~(red[10] ^ green[10] ^ blue[10]) & 1 ++ */ ++ ++ lcdc_writel(sinfo, LUT + regno * 4, val); ++ ret = 0; ++ } ++ break; ++ } ++ ++ return ret; ++} ++ ++static int sidsafb_pan_display(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++ pr_debug("sidsafb_pan_display\n"); ++ ++ sidsafb_update_dma(info, var); ++ ++ return 0; ++} ++ ++static struct fb_ops sidsafb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = sidsafb_check_var, ++ .fb_set_par = sidsafb_set_par, ++ .fb_setcolreg = sidsafb_setcolreg, ++ .fb_pan_display = sidsafb_pan_display, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++}; ++ ++static irqreturn_t sidsafb_interrupt(int irq, void *dev_id, ++ struct pt_regs *regs) ++{ ++ struct fb_info *info = dev_id; ++ struct sidsafb_info *sinfo = info->par; ++ u32 status; ++ ++ status = lcdc_readl(sinfo, LCD_ISR); ++ while (status) { ++ if (status & LCDC_BIT(LCD_ISR_EOFIS)) { ++ pr_debug("sidsafb: DMA End Of Frame interrupt\n"); ++ ++ lcdc_writel(sinfo, LCD_ICR, LCDC_BIT(LCD_ICR_EOFIC)); ++ status &= ~LCDC_BIT(LCD_ISR_EOFIS); ++ wake_up(&sinfo->vsync_wait); ++ } ++ ++ if (status) { ++ printk(KERN_ERR ++ "LCDC: Interrupts still pending: 0x%x\n", ++ status); ++ lcdc_writel(sinfo, LCD_IDR, status); ++ } ++ ++ status = lcdc_readl(sinfo, LCD_ISR); ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++static void __devinit init_pseudo_palette(u32 *palette) ++{ ++ static const u32 init_palette[16] = { ++ 0x000000, ++ 0xaa0000, ++ 0x00aa00, ++ 0xaa5500, ++ 0x0000aa, ++ 0xaa00aa, ++ 0x00aaaa, ++ 0xaaaaaa, ++ 0x555555, ++ 0xff5555, ++ 0x55ff55, ++ 0xffff55, ++ 0x5555ff, ++ 0xff55ff, ++ 0x55ffff, ++ 0xffffff ++ }; ++ ++ memcpy(palette, init_palette, sizeof(init_palette)); ++} ++ ++static int __devinit sidsafb_set_fbinfo(struct sidsafb_info *sinfo) ++{ ++ struct fb_info *info = sinfo->info; ++ ++ init_pseudo_palette(sinfo->pseudo_palette); ++ ++ info->flags = (FBINFO_DEFAULT ++ | FBINFO_PARTIAL_PAN_OK ++ | FBINFO_HWACCEL_XPAN ++ | FBINFO_HWACCEL_YPAN); ++ memcpy(&info->fix, &sidsafb_fix, sizeof(info->fix)); ++ memcpy(&info->monspecs, &default_monspecs, sizeof(info->monspecs)); ++ info->fbops = &sidsafb_ops; ++ info->pseudo_palette = sinfo->pseudo_palette; ++ ++ init_waitqueue_head(&sinfo->vsync_wait); ++ ++ return 0; ++} ++ ++static int __devinit sidsafb_probe(struct platform_device *pdev) ++{ ++ struct lcdc_platform_data *fb_data = pdev->dev.platform_data; ++ struct fb_info *info; ++ struct sidsafb_info *sinfo; ++ const struct resource *mmio_resource; ++ int ret; ++ ++ pr_debug("sidsafb_probe BEGIN\n"); ++ ++ mmio_resource = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!mmio_resource) { ++ dev_err(&pdev->dev, "no MMIO resource found\n"); ++ return -ENXIO; ++ } ++ ++ ret = -ENOMEM; ++ info = framebuffer_alloc(sizeof(struct sidsafb_info), &pdev->dev); ++ if (!info) { ++ dev_err(&pdev->dev, "failed to allocate memory\n"); ++ goto out; ++ } ++ ++ sinfo = info->par; ++ sinfo->info = info; ++ sinfo->pdev = pdev; ++ sinfo->guard_time = 1; ++ ++ spin_lock_init(&sinfo->lock); ++ sidsafb_set_fbinfo(sinfo); ++ info->fix.mmio_start = mmio_resource->start; ++ info->fix.mmio_len = mmio_resource->end - mmio_resource->start + 1; ++ sinfo->irq_base = platform_get_irq(pdev, 0); ++ ++ sinfo->hclk = clk_get(&pdev->dev, "hclk"); ++ if (IS_ERR(sinfo->hclk)) { ++ dev_err(&pdev->dev, "failed to get hclk\n"); ++ ret = PTR_ERR(sinfo->hclk); ++ goto free_info; ++ } ++ sinfo->pixclk = clk_get(&pdev->dev, "pixclk"); ++ if (IS_ERR(sinfo->pixclk)) { ++ dev_err(&pdev->dev, "failed to get pixel clock\n"); ++ ret = PTR_ERR(sinfo->hclk); ++ goto put_hclk; ++ } ++ ++ clk_enable(sinfo->hclk); ++ clk_enable(sinfo->pixclk); ++ ++ /* Use platform-supplied framebuffer memory if available */ ++ if (fb_data && fb_data->fbmem_size != 0) { ++ info->fix.smem_start = fb_data->fbmem_start; ++ info->fix.smem_len = fb_data->fbmem_size; ++ info->screen_base = ioremap(info->fix.smem_start, ++ info->fix.smem_len); ++ } else { ++ dma_addr_t paddr; ++ ++ info->fix.smem_len = fb_size; ++ info->screen_base = dma_alloc_coherent(&pdev->dev, fb_size, ++ &paddr, GFP_KERNEL); ++ info->fix.smem_start = paddr; ++ } ++ ++ if (!info->screen_base) { ++ printk(KERN_ERR "sidsafb: Could not allocate framebuffer\n"); ++ goto disable_clocks; ++ } ++ ++ sinfo->regs = ioremap(info->fix.mmio_start, info->fix.mmio_len); ++ if (!sinfo->regs) { ++ printk(KERN_ERR "sidsafb: Could not map LCDC registers\n"); ++ goto free_fb; ++ } ++ ++ ret = fb_find_mode(&info->var, info, NULL, info->monspecs.modedb, ++ info->monspecs.modedb_len, info->monspecs.modedb, ++ CONFIG_FB_SIDSA_DEFAULT_BPP); ++ if (!ret) { ++ printk(KERN_ERR "sidsafb: No suitable video mode found\n"); ++ goto unmap_regs; ++ } ++ ++ ret = request_irq(sinfo->irq_base, sidsafb_interrupt, 0, ++ "sidsafb", info); ++ if (ret) ++ goto unmap_regs; ++ ++ /* Allocate colormap */ ++ if (fb_alloc_cmap(&info->cmap, 256, 0)) { ++ ret = -ENOMEM; ++ goto unregister_irqs; ++ } ++ ++ /* ++ * Tell the world that we're ready to go ++ */ ++ ret = register_framebuffer(info); ++ if (ret) ++ goto free_cmap; ++ ++ printk("fb%d: Atmel LCDC at 0x%08lx (mapped at %p), irq %lu\n", ++ info->node, info->fix.mmio_start, sinfo->regs, sinfo->irq_base); ++ ++ platform_set_drvdata(pdev, info); ++ ++ memset_io(info->screen_base, 0, info->fix.smem_len); ++ info->var.activate |= FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW; ++ ret = fb_set_var(info, &info->var); ++ if (ret) ++ printk(KERN_WARNING ++ "sidsafb: Unable to set display parameters\n"); ++ info->var.activate &= ~(FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW); ++ ++ pr_debug("sidsafb_probe SUCCESS\n"); ++ return 0; ++ ++ ++free_cmap: ++ fb_dealloc_cmap(&info->cmap); ++unregister_irqs: ++ free_irq(sinfo->irq_base, info); ++unmap_regs: ++ iounmap(sinfo->regs); ++free_fb: ++ if (!fb_data || fb_data->fbmem_size == 0) ++ dma_free_coherent(&pdev->dev, info->fix.smem_len, ++ (void __force *)info->screen_base, ++ info->fix.smem_start); ++disable_clocks: ++ clk_disable(sinfo->pixclk); ++ clk_disable(sinfo->hclk); ++ clk_put(sinfo->pixclk); ++put_hclk: ++ clk_put(sinfo->hclk); ++free_info: ++ framebuffer_release(info); ++out: ++ pr_debug("sidsafb_probe FAILED\n"); ++ return ret; ++} ++ ++static int __devexit sidsafb_remove(struct platform_device *pdev) ++{ ++ struct lcdc_platform_data *fb_data = pdev->dev.platform_data; ++ struct fb_info *info = platform_get_drvdata(pdev); ++ struct sidsafb_info *sinfo; ++ ++ if (!info) ++ return 0; ++ sinfo = info->par; ++ ++ /* TODO: Restore original state */ ++ unregister_framebuffer(info); ++ ++ fb_dealloc_cmap(&info->cmap); ++ free_irq(sinfo->irq_base, info); ++ iounmap(sinfo->regs); ++ if (!fb_data || fb_data->fbmem_size == 0) ++ dma_free_coherent(&pdev->dev, info->fix.smem_len, ++ (void __force *)info->screen_base, ++ info->fix.smem_start); ++ clk_disable(sinfo->hclk); ++ clk_put(sinfo->hclk); ++ platform_set_drvdata(pdev, NULL); ++ framebuffer_release(info); ++ ++ return 0; ++} ++ ++static struct platform_driver sidsafb_driver = { ++ .probe = sidsafb_probe, ++ .remove = __devexit_p(sidsafb_remove), ++ .driver = { ++ .name = "lcdc", ++ }, ++}; ++ ++int __init sidsafb_init(void) ++{ ++ return platform_driver_register(&sidsafb_driver); ++} ++ ++static void __exit sidsafb_exit(void) ++{ ++ platform_driver_unregister(&sidsafb_driver); ++} ++ ++module_init(sidsafb_init); ++module_exit(sidsafb_exit); ++ ++module_param(fb_size, ulong, 0644); ++MODULE_PARM_DESC(fb_size, "Minimum framebuffer size to allocate"); ++ ++MODULE_AUTHOR("Haavard Skinnemoen "); ++MODULE_DESCRIPTION("Atmel/SIDSA LCD Controller framebuffer driver"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.18-avr32/include/asm-avr32/periph/lcdc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/periph/lcdc.h 2006-11-02 16:08:35.000000000 +0100 +@@ -0,0 +1,271 @@ ++/* ++ * Register definitions for Atmel/SIDSA LCD Controller ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_PERIPH_LCDC_H__ ++#define __ASM_AVR32_PERIPH_LCDC_H__ ++ ++#define LCDC_CONTRAST_CTR 0x00000840 ++# define LCDC_CONTRAST_CTR_ENA_OFFSET 3 ++# define LCDC_CONTRAST_CTR_ENA_SIZE 1 ++# define LCDC_CONTRAST_CTR_POL_OFFSET 2 ++# define LCDC_CONTRAST_CTR_POL_SIZE 1 ++# define LCDC_CONTRAST_CTR_PS_OFFSET 0 ++# define LCDC_CONTRAST_CTR_PS_SIZE 2 ++#define LCDC_CONTRAST_VAL 0x00000844 ++# define LCDC_CONTRAST_VAL_CVAL_OFFSET 0 ++# define LCDC_CONTRAST_VAL_CVAL_SIZE 8 ++#define LCDC_DMABADDR1 0x00000000 ++# define LCDC_DMABADDR1_BADDR_U_OFFSET 0 ++# define LCDC_DMABADDR1_BADDR_U_SIZE 32 ++#define LCDC_DMABADDR2 0x00000004 ++# define LCDC_DMABADDR2_BADDR_L_OFFSET 0 ++# define LCDC_DMABADDR2_BADDR_L_SIZE 32 ++#define LCDC_DMACON 0x0000001C ++# define LCDC_DMACON_DMABUSY_OFFSET 2 ++# define LCDC_DMACON_DMABUSY_SIZE 1 ++# define LCDC_DMACON_DMAEN_OFFSET 0 ++# define LCDC_DMACON_DMAEN_SIZE 1 ++# define LCDC_DMACON_DMARST_OFFSET 1 ++# define LCDC_DMACON_DMARST_SIZE 1 ++# define LCDC_DMACON_DMAUPDT_OFFSET 3 ++# define LCDC_DMACON_DMAUPDT_SIZE 1 ++# define LCDC_DMACON_DMA2DEN_OFFSET 4 ++# define LCDC_DMACON_DMA2DEN_SIZE 1 ++#define LCDC_DMAFRMADD1 0x00000010 ++# define LCDC_DMAFRMADD1_FRMADD_U_OFFSET 0 ++# define LCDC_DMAFRMADD1_FRMADD_U_SIZE 32 ++#define LCDC_DMAFRMADD2 0x00000014 ++# define LCDC_DMAFRMADD2_FRMADD_L_OFFSET 0 ++# define LCDC_DMAFRMADD2_FRMADD_L_SIZE 32 ++#define LCDC_DMAFRMCFG 0x00000018 ++# define LCDC_DMAFRMCFG_BRSTLEN_OFFSET 24 ++# define LCDC_DMAFRMCFG_BRSTLEN_SIZE 7 ++# define LCDC_DMAFRMCFG_FRMSIZE_OFFSET 0 ++# define LCDC_DMAFRMCFG_FRMSIZE_SIZE 23 ++#define LCDC_DMAFRMPT1 0x00000008 ++# define LCDC_DMAFRMPT1_FRMPT_U_OFFSET 0 ++# define LCDC_DMAFRMPT1_FRMPT_U_SIZE 23 ++#define LCDC_DMAFRMPT2 0x0000000C ++# define LCDC_DMAFRMPT2_FRMPT_L_OFFSET 0 ++# define LCDC_DMAFRMPT2_FRMPT_L_SIZE 23 ++#define LCDC_DMA2DCFG 0x00000020 ++# define LCDC_DMA2DCFG_ADDRINC_OFFSET 0 ++# define LCDC_DMA2DCFG_ADDRINC_SIZE 16 ++# define LCDC_DMA2DCFG_PIXELOFF_OFFSET 24 ++# define LCDC_DMA2DCFG_PIXELOFF_SIZE 5 ++#define LCDC_DP1_2 0x0000081C ++# define LCDC_DP1_2_DP1_2_OFFSET 0 ++# define LCDC_DP1_2_DP1_2_SIZE 8 ++#define LCDC_DP2_3 0x00000828 ++# define LCDC_DP2_3_DP2_3_OFFSET 0 ++# define LCDC_DP2_3_DP2_3_SIZE 12 ++#define LCDC_DP3_4 0x00000830 ++# define LCDC_DP3_4_DP3_4_OFFSET 0 ++# define LCDC_DP3_4_DP3_4_SIZE 16 ++#define LCDC_DP3_5 0x00000824 ++# define LCDC_DP3_5_DP3_5_OFFSET 0 ++# define LCDC_DP3_5_DP3_5_SIZE 20 ++#define LCDC_DP4_5 0x00000834 ++# define LCDC_DP4_5_DP4_5_OFFSET 0 ++# define LCDC_DP4_5_DP4_5_SIZE 20 ++#define LCDC_DP4_7 0x00000820 ++# define LCDC_DP4_7_DP4_7_OFFSET 0 ++# define LCDC_DP4_7_DP4_7_SIZE 28 ++#define LCDC_DP5_7 0x0000082C ++# define LCDC_DP5_7_DP5_7_OFFSET 0 ++# define LCDC_DP5_7_DP5_7_SIZE 28 ++#define LCDC_DP6_7 0x00000838 ++# define LCDC_DP6_7_DP6_7_OFFSET 0 ++# define LCDC_DP6_7_DP6_7_SIZE 28 ++#define LCDC_LCDCON1 0x00000800 ++# define LCDC_LCDCON1_BYPASS_OFFSET 0 ++# define LCDC_LCDCON1_BYPASS_SIZE 1 ++# define LCDC_LCDCON1_CLKVAL_OFFSET 12 ++# define LCDC_LCDCON1_CLKVAL_SIZE 9 ++# define LCDC_LCDCON1_LINECNT_OFFSET 21 ++# define LCDC_LCDCON1_LINECNT_SIZE 11 ++#define LCDC_LCDCON2 0x00000804 ++# define LCDC_LCDCON2_CLKMOD_OFFSET 15 ++# define LCDC_LCDCON2_CLKMOD_SIZE 1 ++# define LCDC_LCDCON2_DISTYPE_OFFSET 0 ++# define LCDC_LCDCON2_DISTYPE_SIZE 2 ++# define LCDC_LCDCON2_IFWIDTH_OFFSET 3 ++# define LCDC_LCDCON2_IFWIDTH_SIZE 2 ++# define LCDC_LCDCON2_INVCLK_OFFSET 11 ++# define LCDC_LCDCON2_INVCLK_SIZE 1 ++# define LCDC_LCDCON2_INVDVAL_OFFSET 12 ++# define LCDC_LCDCON2_INVDVAL_SIZE 1 ++# define LCDC_LCDCON2_INVFRAME_OFFSET 9 ++# define LCDC_LCDCON2_INVFRAME_SIZE 1 ++# define LCDC_LCDCON2_INVLINE_OFFSET 10 ++# define LCDC_LCDCON2_INVLINE_SIZE 1 ++# define LCDC_LCDCON2_INVVD_OFFSET 8 ++# define LCDC_LCDCON2_INVVD_SIZE 1 ++# define LCDC_LCDCON2_MEMOR_OFFSET 30 ++# define LCDC_LCDCON2_MEMOR_SIZE 2 ++# define LCDC_LCDCON2_PIXELSIZE_OFFSET 5 ++# define LCDC_LCDCON2_PIXELSIZE_SIZE 3 ++# define LCDC_LCDCON2_SCANMOD_OFFSET 2 ++# define LCDC_LCDCON2_SCANMOD_SIZE 1 ++#define LCDC_LCDFIFO 0x00000814 ++# define LCDC_LCDFIFO_FIFOTH_OFFSET 0 ++# define LCDC_LCDFIFO_FIFOTH_SIZE 16 ++#define LCDC_LCDFRMCFG 0x00000810 ++# define LCDC_LCDFRMCFG_LINESIZE_OFFSET 21 ++# define LCDC_LCDFRMCFG_LINESIZE_SIZE 11 ++# define LCDC_LCDFRMCFG_LINEVAL_OFFSET 0 ++# define LCDC_LCDFRMCFG_LINEVAL_SIZE 11 ++#define LCDC_LCDMVAL 0x00000818 ++# define LCDC_LCDMVAL_MMODE_OFFSET 31 ++# define LCDC_LCDMVAL_MMODE_SIZE 1 ++# define LCDC_LCDMVAL_MVAL_OFFSET 0 ++# define LCDC_LCDMVAL_MVAL_SIZE 8 ++#define LCDC_LCDTIM1 0x00000808 ++# define LCDC_LCDTIM1_VBP_OFFSET 8 ++# define LCDC_LCDTIM1_VBP_SIZE 8 ++# define LCDC_LCDTIM1_VFP_OFFSET 0 ++# define LCDC_LCDTIM1_VFP_SIZE 8 ++# define LCDC_LCDTIM1_VHDLY_OFFSET 24 ++# define LCDC_LCDTIM1_VHDLY_SIZE 4 ++# define LCDC_LCDTIM1_VPW_OFFSET 16 ++# define LCDC_LCDTIM1_VPW_SIZE 6 ++#define LCDC_LCDTIM2 0x0000080C ++# define LCDC_LCDTIM2_HBP_OFFSET 0 ++# define LCDC_LCDTIM2_HBP_SIZE 8 ++# define LCDC_LCDTIM2_HFP_OFFSET 21 ++# define LCDC_LCDTIM2_HFP_SIZE 11 ++# define LCDC_LCDTIM2_HPW_OFFSET 8 ++# define LCDC_LCDTIM2_HPW_SIZE 6 ++#define LCDC_LCD_GPR 0x0000085C ++# define LCDC_LCD_GPR_GPRB0_OFFSET 0 ++# define LCDC_LCD_GPR_GPRB0_SIZE 1 ++# define LCDC_LCD_GPR_GPRB1_OFFSET 1 ++# define LCDC_LCD_GPR_GPRB1_SIZE 1 ++# define LCDC_LCD_GPR_GPRB2_OFFSET 2 ++# define LCDC_LCD_GPR_GPRB2_SIZE 1 ++# define LCDC_LCD_GPR_GPRB3_OFFSET 3 ++# define LCDC_LCD_GPR_GPRB3_SIZE 1 ++# define LCDC_LCD_GPR_GPRB4_OFFSET 4 ++# define LCDC_LCD_GPR_GPRB4_SIZE 1 ++# define LCDC_LCD_GPR_GPRB5_OFFSET 5 ++# define LCDC_LCD_GPR_GPRB5_SIZE 1 ++# define LCDC_LCD_GPR_GPRB6_OFFSET 6 ++# define LCDC_LCD_GPR_GPRB6_SIZE 1 ++# define LCDC_LCD_GPR_GPRB7_OFFSET 7 ++# define LCDC_LCD_GPR_GPRB7_SIZE 1 ++#define LCDC_LCD_ICR 0x00000858 ++# define LCDC_LCD_ICR_EOFIC_OFFSET 2 ++# define LCDC_LCD_ICR_EOFIC_SIZE 1 ++# define LCDC_LCD_ICR_LNIC_OFFSET 0 ++# define LCDC_LCD_ICR_LNIC_SIZE 1 ++# define LCDC_LCD_ICR_LSTLNIC_OFFSET 1 ++# define LCDC_LCD_ICR_LSTLNIC_SIZE 1 ++# define LCDC_LCD_ICR_MERIC_OFFSET 6 ++# define LCDC_LCD_ICR_MERIC_SIZE 1 ++# define LCDC_LCD_ICR_OWRIC_OFFSET 5 ++# define LCDC_LCD_ICR_OWRIC_SIZE 1 ++# define LCDC_LCD_ICR_UFLWIC_OFFSET 4 ++# define LCDC_LCD_ICR_UFLWIC_SIZE 1 ++#define LCDC_LCD_IDR 0x0000084C ++# define LCDC_LCD_IDR_EOFID_OFFSET 2 ++# define LCDC_LCD_IDR_EOFID_SIZE 1 ++# define LCDC_LCD_IDR_LNID_OFFSET 0 ++# define LCDC_LCD_IDR_LNID_SIZE 1 ++# define LCDC_LCD_IDR_LSTLNID_OFFSET 1 ++# define LCDC_LCD_IDR_LSTLNID_SIZE 1 ++# define LCDC_LCD_IDR_MERID_OFFSET 6 ++# define LCDC_LCD_IDR_MERID_SIZE 1 ++# define LCDC_LCD_IDR_OWRID_OFFSET 5 ++# define LCDC_LCD_IDR_OWRID_SIZE 1 ++# define LCDC_LCD_IDR_UFLWID_OFFSET 4 ++# define LCDC_LCD_IDR_UFLWID_SIZE 1 ++#define LCDC_LCD_IER 0x00000848 ++# define LCDC_LCD_IER_EOFIE_OFFSET 2 ++# define LCDC_LCD_IER_EOFIE_SIZE 1 ++# define LCDC_LCD_IER_LNIE_OFFSET 0 ++# define LCDC_LCD_IER_LNIE_SIZE 1 ++# define LCDC_LCD_IER_LSTLNIE_OFFSET 1 ++# define LCDC_LCD_IER_LSTLNIE_SIZE 1 ++# define LCDC_LCD_IER_MERIE_OFFSET 6 ++# define LCDC_LCD_IER_MERIE_SIZE 1 ++# define LCDC_LCD_IER_OWRIE_OFFSET 5 ++# define LCDC_LCD_IER_OWRIE_SIZE 1 ++# define LCDC_LCD_IER_UFLWIE_OFFSET 4 ++# define LCDC_LCD_IER_UFLWIE_SIZE 1 ++#define LCDC_LCD_IMR 0x00000850 ++# define LCDC_LCD_IMR_EOFIM_OFFSET 2 ++# define LCDC_LCD_IMR_EOFIM_SIZE 1 ++# define LCDC_LCD_IMR_LNIM_OFFSET 0 ++# define LCDC_LCD_IMR_LNIM_SIZE 1 ++# define LCDC_LCD_IMR_LSTLNIM_OFFSET 1 ++# define LCDC_LCD_IMR_LSTLNIM_SIZE 1 ++# define LCDC_LCD_IMR_MERIM_OFFSET 6 ++# define LCDC_LCD_IMR_MERIM_SIZE 1 ++# define LCDC_LCD_IMR_OWRIM_OFFSET 5 ++# define LCDC_LCD_IMR_OWRIM_SIZE 1 ++# define LCDC_LCD_IMR_UFLWIM_OFFSET 4 ++# define LCDC_LCD_IMR_UFLWIM_SIZE 1 ++#define LCDC_LCD_IRR 0x00000864 ++# define LCDC_LCD_IRR_EOFIR_OFFSET 2 ++# define LCDC_LCD_IRR_EOFIR_SIZE 1 ++# define LCDC_LCD_IRR_LNIR_OFFSET 0 ++# define LCDC_LCD_IRR_LNIR_SIZE 1 ++# define LCDC_LCD_IRR_LSTLNIR_OFFSET 1 ++# define LCDC_LCD_IRR_LSTLNIR_SIZE 1 ++# define LCDC_LCD_IRR_MERIR_OFFSET 6 ++# define LCDC_LCD_IRR_MERIR_SIZE 1 ++# define LCDC_LCD_IRR_OWRIR_OFFSET 5 ++# define LCDC_LCD_IRR_OWRIR_SIZE 1 ++# define LCDC_LCD_IRR_UFLWIR_OFFSET 4 ++# define LCDC_LCD_IRR_UFLWIR_SIZE 1 ++#define LCDC_LCD_ISR 0x00000854 ++# define LCDC_LCD_ISR_EOFIS_OFFSET 2 ++# define LCDC_LCD_ISR_EOFIS_SIZE 1 ++# define LCDC_LCD_ISR_LNIS_OFFSET 0 ++# define LCDC_LCD_ISR_LNIS_SIZE 1 ++# define LCDC_LCD_ISR_LSTLNIS_OFFSET 1 ++# define LCDC_LCD_ISR_LSTLNIS_SIZE 1 ++# define LCDC_LCD_ISR_MERIS_OFFSET 6 ++# define LCDC_LCD_ISR_MERIS_SIZE 1 ++# define LCDC_LCD_ISR_OWRIS_OFFSET 5 ++# define LCDC_LCD_ISR_OWRIS_SIZE 1 ++# define LCDC_LCD_ISR_UFLWIS_OFFSET 4 ++# define LCDC_LCD_ISR_UFLWIS_SIZE 1 ++#define LCDC_LCD_ITR 0x00000860 ++# define LCDC_LCD_ITR_EOFIT_OFFSET 2 ++# define LCDC_LCD_ITR_EOFIT_SIZE 1 ++# define LCDC_LCD_ITR_LNIT_OFFSET 0 ++# define LCDC_LCD_ITR_LNIT_SIZE 1 ++# define LCDC_LCD_ITR_LSTLNIT_OFFSET 1 ++# define LCDC_LCD_ITR_LSTLNIT_SIZE 1 ++# define LCDC_LCD_ITR_MERIT_OFFSET 6 ++# define LCDC_LCD_ITR_MERIT_SIZE 1 ++# define LCDC_LCD_ITR_OWRIT_OFFSET 5 ++# define LCDC_LCD_ITR_OWRIT_SIZE 1 ++# define LCDC_LCD_ITR_UFLWIT_OFFSET 4 ++# define LCDC_LCD_ITR_UFLWIT_SIZE 1 ++#define LCDC_PWRCON 0x0000083C ++# define LCDC_PWRCON_GUARD_TIME_OFFSET 1 ++# define LCDC_PWRCON_GUARD_TIME_SIZE 7 ++# define LCDC_PWRCON_LCD_BUSY_OFFSET 31 ++# define LCDC_PWRCON_LCD_BUSY_SIZE 1 ++# define LCDC_PWRCON_LCD_PWR_OFFSET 0 ++# define LCDC_PWRCON_LCD_PWR_SIZE 1 ++ ++#define LCDC_BIT(name) (1 << LCDC_##name##_OFFSET) ++#define LCDC_MKBF(name,value) (((value) & ((1 << LCDC_##name##_SIZE) - 1)) << LCDC_##name##_OFFSET) ++#define LCDC_GETBF(name,value) (((value) >> LCDC_##name##_OFFSET) & ((1 << LCDC_##name##_SIZE) - 1)) ++#define LCDC_INSBF(name,value,old) (((old) & ~(((1 << LCDC_##name##_SIZE) - 1) << LCDC_##name##_OFFSET)) | LCDC_MKBF(name, value)) ++ ++#define lcdc_readl(port,reg) \ ++ __raw_readl((port)->regs + LCDC_##reg) ++#define lcdc_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + LCDC_##reg) ++ ++#endif /* __ASM_AVR32_PERIPH_LCDC_H__ */ +Index: linux-2.6.18-avr32/include/linux/fb.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/linux/fb.h 2006-11-02 15:54:18.000000000 +0100 ++++ linux-2.6.18-avr32/include/linux/fb.h 2006-11-02 15:56:20.000000000 +0100 +@@ -191,6 +191,7 @@ struct fb_bitfield { + /* vtotal = 144d/288n/576i => PAL */ + /* vtotal = 121d/242n/484i => NTSC */ + #define FB_SYNC_ON_GREEN 32 /* sync on green */ ++#define FB_SYNC_PCLK_RISING 64 /* pixel data sampled on rising pclk */ + + #define FB_VMODE_NONINTERLACED 0 /* non interlaced */ + #define FB_VMODE_INTERLACED 1 /* interlaced */ +@@ -825,7 +826,7 @@ struct fb_info { + #define fb_writeq sbus_writeq + #define fb_memset sbus_memset_io + +-#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || (defined(__sh__) && !defined(__SH5__)) || defined(__powerpc__) ++#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || (defined(__sh__) && !defined(__SH5__)) || defined(__powerpc__) || defined(__avr32__) + + #define fb_readb __raw_readb + #define fb_readw __raw_readw diff --git a/packages/linux/linux-2.6.18/atmel-macb-ethernet-driver.patch b/packages/linux/linux-2.6.18/atmel-macb-ethernet-driver.patch new file mode 100644 index 0000000000..e8c54e141b --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-macb-ethernet-driver.patch @@ -0,0 +1,1614 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Thu, 29 Jun 2006 15:02:49 +0200 +Subject: [PATCH] Atmel MACB ethernet driver + +This is a network device driver for the Atmel MACB interface, which +is present on the AT32AP7000 device from Atmel. I think it's basically +the same as the EMAC interface on AT91, so it should possibly be +merged with the at91_ether driver some time in the future. At the +moment, however, the at91_ether driver has quite a lot of at91- +specific dependencies so it's hard to reuse on AVR32. + +This is basically the same patch as the one distributed with the +AT32STK1000 BSP version 1.0, converted to use platform_device and +struct clk instead of at32_device. + +--- + drivers/net/Kconfig | 11 + drivers/net/Makefile | 2 + drivers/net/macb.c | 1159 +++++++++++++++++++++++++++++++++++++++++++++++++++ + drivers/net/macb.h | 387 +++++++++++++++++ + 4 files changed, 1559 insertions(+) + +Index: linux-2.6.18-avr32/drivers/net/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/net/Kconfig 2006-11-02 14:16:07.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/net/Kconfig 2006-11-02 14:17:29.000000000 +0100 +@@ -185,6 +185,17 @@ config MII + or internal device. It is safe to say Y or M here even if your + ethernet card lack MII. + ++config MACB ++ tristate "Atmel MACB support" ++ depends on NET_ETHERNET && AVR32 ++ select MII ++ help ++ The Atmel MACB ethernet interface is found on many AT32 and AT91 ++ parts. Say Y to include support for the MACB chip. ++ ++ To compile this driver as a module, choose M here: the module ++ will be called macb. ++ + source "drivers/net/arm/Kconfig" + + config MACE +Index: linux-2.6.18-avr32/drivers/net/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/net/Makefile 2006-11-02 14:16:07.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/net/Makefile 2006-11-02 14:17:29.000000000 +0100 +@@ -202,6 +202,8 @@ obj-$(CONFIG_SMC911X) += smc911x.o + obj-$(CONFIG_DM9000) += dm9000.o + obj-$(CONFIG_FEC_8XX) += fec_8xx/ + ++obj-$(CONFIG_MACB) += macb.o ++ + obj-$(CONFIG_ARM) += arm/ + obj-$(CONFIG_DEV_APPLETALK) += appletalk/ + obj-$(CONFIG_TR) += tokenring/ +Index: linux-2.6.18-avr32/drivers/net/macb.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/net/macb.c 2006-11-02 16:33:48.000000000 +0100 +@@ -0,0 +1,1159 @@ ++/* ++ * Atmel MACB Ethernet Controller driver ++ * ++ * Copyright (C) 2004-2006 Atmel 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 "macb.h" ++ ++#define to_net_dev(class) container_of(class, struct net_device, class_dev) ++ ++#define RX_BUFFER_SIZE 128 ++#define RX_RING_SIZE 512 ++#define RX_RING_BYTES (sizeof(struct dma_desc) * RX_RING_SIZE) ++ ++/* Make the IP header word-aligned (the ethernet header is 14 bytes) */ ++#define RX_OFFSET 2 ++ ++#define TX_RING_SIZE 128 ++#define DEF_TX_RING_PENDING (TX_RING_SIZE - 1) ++#define TX_RING_BYTES (sizeof(struct dma_desc) * TX_RING_SIZE) ++ ++#define TX_RING_GAP(bp) \ ++ (TX_RING_SIZE - (bp)->tx_pending) ++#define TX_BUFFS_AVAIL(bp) \ ++ (((bp)->tx_tail <= (bp)->tx_head) ? \ ++ (bp)->tx_tail + (bp)->tx_pending - (bp)->tx_head : \ ++ (bp)->tx_tail - (bp)->tx_head - TX_RING_GAP(bp)) ++#define NEXT_TX(n) (((n) + 1) & (TX_RING_SIZE - 1)) ++ ++#define NEXT_RX(n) (((n) + 1) & (RX_RING_SIZE - 1)) ++ ++/* minimum number of free TX descriptors before waking up TX process */ ++#define MACB_TX_WAKEUP_THRESH (TX_RING_SIZE / 4) ++ ++#define MACB_RX_INT_FLAGS (MACB_BIT(RCOMP) | MACB_BIT(RXUBR) \ ++ | MACB_BIT(ISR_ROVR)) ++ ++static void __macb_set_hwaddr(struct macb *bp) ++{ ++ u32 bottom; ++ u16 top; ++ ++ bottom = cpu_to_le32(*((u32 *)bp->dev->dev_addr)); ++ macb_writel(bp, SA1B, bottom); ++ top = cpu_to_le16(*((u16 *)(bp->dev->dev_addr + 4))); ++ macb_writel(bp, SA1T, top); ++} ++ ++static void macb_enable_mdio(struct macb *bp) ++{ ++ unsigned long flags; ++ u32 reg; ++ ++ spin_lock_irqsave(&bp->lock, flags); ++ reg = macb_readl(bp, NCR); ++ reg |= MACB_BIT(MPE); ++ macb_writel(bp, NCR, reg); ++ macb_writel(bp, IER, MACB_BIT(MFD)); ++ spin_unlock_irqrestore(&bp->lock, flags); ++} ++ ++static void macb_disable_mdio(struct macb *bp) ++{ ++ unsigned long flags; ++ u32 reg; ++ ++ spin_lock_irqsave(&bp->lock, flags); ++ reg = macb_readl(bp, NCR); ++ reg &= ~MACB_BIT(MPE); ++ macb_writel(bp, NCR, reg); ++ macb_writel(bp, IDR, MACB_BIT(MFD)); ++ spin_unlock_irqrestore(&bp->lock, flags); ++} ++ ++static int macb_mdio_read(struct net_device *dev, int phy_id, int location) ++{ ++ struct macb *bp = netdev_priv(dev); ++ int value; ++ ++ mutex_lock(&bp->mdio_mutex); ++ ++ macb_enable_mdio(bp); ++ macb_writel(bp, MAN, (MACB_BF(SOF, MACB_MAN_SOF) ++ | MACB_BF(RW, MACB_MAN_READ) ++ | MACB_BF(PHYA, phy_id) ++ | MACB_BF(REGA, location) ++ | MACB_BF(CODE, MACB_MAN_CODE))); ++ ++ wait_for_completion(&bp->mdio_complete); ++ ++ value = MACB_BFEXT(DATA, macb_readl(bp, MAN)); ++ macb_disable_mdio(bp); ++ mutex_unlock(&bp->mdio_mutex); ++ ++ return value; ++} ++ ++static void macb_mdio_write(struct net_device *dev, int phy_id, ++ int location, int val) ++{ ++ struct macb *bp = netdev_priv(dev); ++ ++ dev_dbg(&bp->pdev->dev, "mdio_write %02x:%02x <- %04x\n", ++ phy_id, location, val); ++ ++ mutex_lock(&bp->mdio_mutex); ++ macb_enable_mdio(bp); ++ ++ macb_writel(bp, MAN, (MACB_BF(SOF, MACB_MAN_SOF) ++ | MACB_BF(RW, MACB_MAN_WRITE) ++ | MACB_BF(PHYA, phy_id) ++ | MACB_BF(REGA, location) ++ | MACB_BF(CODE, MACB_MAN_CODE) ++ | MACB_BF(DATA, val))); ++ ++ wait_for_completion(&bp->mdio_complete); ++ ++ macb_disable_mdio(bp); ++ mutex_unlock(&bp->mdio_mutex); ++} ++ ++static void macb_set_media(struct macb *bp, int media) ++{ ++ u32 reg; ++ ++ spin_lock_irq(&bp->lock); ++ reg = macb_readl(bp, NCFGR); ++ reg &= ~(MACB_BIT(SPD) | MACB_BIT(FD)); ++ if (media & (ADVERTISE_100HALF | ADVERTISE_100FULL)) ++ reg |= MACB_BIT(SPD); ++ if (media & ADVERTISE_FULL) ++ reg |= MACB_BIT(FD); ++ macb_writel(bp, NCFGR, reg); ++ spin_unlock_irq(&bp->lock); ++} ++ ++static void macb_check_media(struct macb *bp, int ok_to_print, int init_media) ++{ ++ struct mii_if_info *mii = &bp->mii; ++ unsigned int old_carrier, new_carrier; ++ int advertise, lpa, media, duplex; ++ ++ /* if forced media, go no further */ ++ if (mii->force_media) ++ return; ++ ++ /* check current and old link status */ ++ old_carrier = netif_carrier_ok(mii->dev) ? 1 : 0; ++ new_carrier = (unsigned int) mii_link_ok(mii); ++ ++ /* if carrier state did not change, assume nothing else did */ ++ if (!init_media && old_carrier == new_carrier) ++ return; ++ ++ /* no carrier, nothing much to do */ ++ if (!new_carrier) { ++ netif_carrier_off(mii->dev); ++ printk(KERN_INFO "%s: link down\n", mii->dev->name); ++ return; ++ } ++ ++ /* ++ * we have carrier, see who's on the other end ++ */ ++ netif_carrier_on(mii->dev); ++ ++ /* get MII advertise and LPA values */ ++ if (!init_media && mii->advertising) { ++ advertise = mii->advertising; ++ } else { ++ advertise = mii->mdio_read(mii->dev, mii->phy_id, MII_ADVERTISE); ++ mii->advertising = advertise; ++ } ++ lpa = mii->mdio_read(mii->dev, mii->phy_id, MII_LPA); ++ ++ /* figure out media and duplex from advertise and LPA values */ ++ media = mii_nway_result(lpa & advertise); ++ duplex = (media & ADVERTISE_FULL) ? 1 : 0; ++ ++ if (ok_to_print) ++ printk(KERN_INFO "%s: link up, %sMbps, %s-duplex, lpa 0x%04X\n", ++ mii->dev->name, ++ media & (ADVERTISE_100FULL | ADVERTISE_100HALF) ? "100" : "10", ++ duplex ? "full" : "half", lpa); ++ ++ mii->full_duplex = duplex; ++ ++ /* Let the MAC know about the new link state */ ++ macb_set_media(bp, media); ++} ++ ++static void macb_update_stats(struct macb *bp) ++{ ++ u32 __iomem *reg = bp->regs + MACB_PFR; ++ u32 *p = &bp->hw_stats.rx_pause_frames; ++ u32 *end = &bp->hw_stats.tx_pause_frames + 1; ++ ++ WARN_ON((unsigned long)(end - p - 1) != (MACB_TPF - MACB_PFR) / 4); ++ ++ for(; p < end; p++, reg++) ++ *p += __raw_readl(reg); ++} ++ ++static void macb_periodic_task(void *arg) ++{ ++ struct macb *bp = arg; ++ ++ macb_update_stats(bp); ++ macb_check_media(bp, 1, 0); ++ ++ schedule_delayed_work(&bp->periodic_task, HZ); ++} ++ ++static void macb_tx(struct macb *bp) ++{ ++ unsigned int tail; ++ unsigned int head; ++ u32 status; ++ ++ status = macb_readl(bp, TSR); ++ macb_writel(bp, TSR, status); ++ ++ dev_dbg(&bp->pdev->dev, "macb_tx status = %02lx\n", ++ (unsigned long)status); ++ ++ if (status & MACB_BIT(UND)) { ++ printk(KERN_ERR "%s: TX underrun, resetting buffers\n", ++ bp->dev->name); ++ bp->tx_head = bp->tx_tail = 0; ++ } ++ ++ if (!(status & MACB_BIT(COMP))) ++ /* ++ * This may happen when a buffer becomes complete ++ * between reading the ISR and scanning the ++ * descriptors. Nothing to worry about. ++ */ ++ return; ++ ++ head = bp->tx_head; ++ for (tail = bp->tx_tail; tail != head; tail = NEXT_TX(tail)) { ++ struct ring_info *rp = &bp->tx_skb[tail]; ++ struct sk_buff *skb = rp->skb; ++ u32 bufstat; ++ ++ BUG_ON(skb == NULL); ++ ++ rmb(); ++ bufstat = bp->tx_ring[tail].ctrl; ++ ++ if (!(bufstat & MACB_BIT(TX_USED))) ++ break; ++ ++ dev_dbg(&bp->pdev->dev, "skb %u (data %p) TX complete\n", ++ tail, skb->data); ++ dma_unmap_single(&bp->pdev->dev, rp->mapping, skb->len, ++ DMA_TO_DEVICE); ++ bp->stats.tx_packets++; ++ bp->stats.tx_bytes += skb->len; ++ rp->skb = NULL; ++ dev_kfree_skb_irq(skb); ++ } ++ ++ bp->tx_tail = tail; ++ if (netif_queue_stopped(bp->dev) && ++ TX_BUFFS_AVAIL(bp) > MACB_TX_WAKEUP_THRESH) ++ netif_wake_queue(bp->dev); ++} ++ ++static int macb_rx_frame(struct macb *bp, unsigned int first_frag, ++ unsigned int last_frag) ++{ ++ unsigned int len; ++ unsigned int frag; ++ unsigned int offset = 0; ++ struct sk_buff *skb; ++ ++ len = MACB_BFEXT(RX_FRMLEN, bp->rx_ring[last_frag].ctrl); ++ ++ dev_dbg(&bp->pdev->dev, "macb_rx_frame frags %u - %u (len %u)\n", ++ first_frag, last_frag, len); ++ ++ skb = dev_alloc_skb(len + RX_OFFSET); ++ if (!skb) { ++ bp->stats.rx_dropped++; ++ for (frag = first_frag; ; frag = NEXT_RX(frag)) { ++ bp->rx_ring[frag].addr &= ~MACB_BIT(RX_USED); ++ if (frag == last_frag) ++ break; ++ } ++ wmb(); ++ return 1; ++ } ++ ++ skb_reserve(skb, RX_OFFSET); ++ skb->dev = bp->dev; ++ skb->ip_summed = CHECKSUM_NONE; ++ skb_put(skb, len); ++ ++ for (frag = first_frag; ; frag = NEXT_RX(frag)) { ++ unsigned int frag_len = RX_BUFFER_SIZE; ++ ++ if (offset + frag_len > len) { ++ BUG_ON(frag != last_frag); ++ frag_len = len - offset; ++ } ++ memcpy(skb->data + offset, ++ bp->rx_buffers + (RX_BUFFER_SIZE * frag), ++ frag_len); ++ offset += RX_BUFFER_SIZE; ++ bp->rx_ring[frag].addr &= ~MACB_BIT(RX_USED); ++ wmb(); ++ ++ if (frag == last_frag) ++ break; ++ } ++ ++ skb->protocol = eth_type_trans(skb, bp->dev); ++ ++ bp->stats.rx_packets++; ++ bp->stats.rx_bytes += len; ++ bp->dev->last_rx = jiffies; ++ dev_dbg(&bp->pdev->dev, "received skb of length %u, csum: %08x\n", ++ skb->len, skb->csum); ++ netif_receive_skb(skb); ++ ++ return 0; ++} ++ ++/* Mark DMA descriptors from begin up to and not including end as unused */ ++static void discard_partial_frame(struct macb *bp, unsigned int begin, ++ unsigned int end) ++{ ++ unsigned int frag; ++ ++ for (frag = begin; frag != end; frag = NEXT_RX(frag)) ++ bp->rx_ring[frag].addr &= ~MACB_BIT(RX_USED); ++ wmb(); ++ ++ /* ++ * When this happens, the hardware stats registers for ++ * whatever caused this is updated, so we don't have to record ++ * anything. ++ */ ++} ++ ++static int macb_rx(struct macb *bp, int budget) ++{ ++ int received = 0; ++ unsigned int tail = bp->rx_tail; ++ int first_frag = -1; ++ ++ for (; budget > 0; tail = NEXT_RX(tail)) { ++ u32 addr, ctrl; ++ ++ rmb(); ++ addr = bp->rx_ring[tail].addr; ++ ctrl = bp->rx_ring[tail].ctrl; ++ ++ if (!(addr & MACB_BIT(RX_USED))) ++ break; ++ ++ if (ctrl & MACB_BIT(RX_SOF)) { ++ if (first_frag != -1) ++ discard_partial_frame(bp, first_frag, tail); ++ first_frag = tail; ++ } ++ ++ if (ctrl & MACB_BIT(RX_EOF)) { ++ int dropped; ++ BUG_ON(first_frag == -1); ++ ++ dropped = macb_rx_frame(bp, first_frag, tail); ++ first_frag = -1; ++ if (!dropped) { ++ received++; ++ budget--; ++ } ++ } ++ } ++ ++ if (first_frag != -1) ++ bp->rx_tail = first_frag; ++ else ++ bp->rx_tail = tail; ++ ++ return received; ++} ++ ++static int macb_poll(struct net_device *dev, int *budget) ++{ ++ struct macb *bp = netdev_priv(dev); ++ int orig_budget, work_done, retval = 0; ++ u32 status; ++ ++ status = macb_readl(bp, RSR); ++ macb_writel(bp, RSR, status); ++ ++ if (!status) { ++ /* ++ * This may happen if an interrupt was pending before ++ * this function was called last time, and no packets ++ * have been received since. ++ */ ++ netif_rx_complete(dev); ++ goto out; ++ } ++ ++ dev_dbg(&bp->pdev->dev, "poll: status = %08lx, budget = %d\n", ++ (unsigned long)status, *budget); ++ ++ if (!(status & MACB_BIT(REC))) { ++ dev_warn(&bp->pdev->dev, ++ "No RX buffers complete, status = %02lx\n", ++ (unsigned long)status); ++ netif_rx_complete(dev); ++ goto out; ++ } ++ ++ orig_budget = *budget; ++ if (orig_budget > dev->quota) ++ orig_budget = dev->quota; ++ ++ work_done = macb_rx(bp, orig_budget); ++ if (work_done < orig_budget) { ++ netif_rx_complete(dev); ++ retval = 0; ++ } else { ++ retval = 1; ++ } ++ ++ /* ++ * We've done what we can to clean the buffers. Make sure we ++ * get notified when new packets arrive. ++ */ ++out: ++ macb_writel(bp, IER, MACB_RX_INT_FLAGS); ++ ++ /* TODO: Handle errors */ ++ ++ return retval; ++} ++ ++static irqreturn_t macb_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ struct net_device *dev = dev_id; ++ struct macb *bp = netdev_priv(dev); ++ u32 status; ++ ++ status = macb_readl(bp, ISR); ++ ++ if (unlikely(!status)) ++ return IRQ_NONE; ++ ++ spin_lock(&bp->lock); ++ ++ /* close possible race with dev_close */ ++ if (unlikely(!netif_running(dev))) { ++ macb_writel(bp, IDR, ~0UL); ++ spin_unlock(&bp->lock); ++ return IRQ_HANDLED; ++ } ++ ++ while (status) { ++ if (status & MACB_BIT(MFD)) ++ complete(&bp->mdio_complete); ++ ++ if (status & MACB_RX_INT_FLAGS) { ++ if (netif_rx_schedule_prep(dev)) { ++ /* ++ * There's no point taking any more interrupts ++ * until we have processed the buffers ++ */ ++ macb_writel(bp, IDR, MACB_RX_INT_FLAGS); ++ dev_dbg(&bp->pdev->dev, "scheduling RX softirq\n"); ++ __netif_rx_schedule(dev); ++ } ++ } ++ ++ if (status & (MACB_BIT(TCOMP) | MACB_BIT(ISR_TUND))) ++ macb_tx(bp); ++ ++ /* ++ * Link change detection isn't possible with RMII, so we'll ++ * add that if/when we get our hands on a full-blown MII PHY. ++ */ ++ ++ if (status & MACB_BIT(HRESP)) { ++ /* ++ * TODO: Reset the hardware, and maybe move the printk ++ * to a lower-priority context as well (work queue?) ++ */ ++ printk(KERN_ERR "%s: DMA bus error: HRESP not OK\n", ++ dev->name); ++ } ++ ++ status = macb_readl(bp, ISR); ++ } ++ ++ spin_unlock(&bp->lock); ++ ++ return IRQ_HANDLED; ++} ++ ++static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev) ++{ ++ struct macb *bp = netdev_priv(dev); ++ dma_addr_t mapping; ++ unsigned int len, entry; ++ u32 ctrl; ++ ++#ifdef DEBUG ++ int i; ++ dev_dbg(&bp->pdev->dev, ++ "start_xmit: len %u head %p data %p tail %p end %p\n", ++ skb->len, skb->head, skb->data, skb->tail, skb->end); ++ dev_dbg(&bp->pdev->dev, ++ "data:"); ++ for (i = 0; i < 16; i++) ++ printk(" %02x", (unsigned int)skb->data[i]); ++ printk("\n"); ++#endif ++ ++ len = skb->len; ++ spin_lock_irq(&bp->lock); ++ ++ /* This is a hard error, log it. */ ++ if (TX_BUFFS_AVAIL(bp) < 1) { ++ netif_stop_queue(dev); ++ spin_unlock_irq(&bp->lock); ++ dev_err(&bp->pdev->dev, ++ "BUG! Tx Ring full when queue awake!\n"); ++ dev_dbg(&bp->pdev->dev, "tx_head = %u, tx_tail = %u\n", ++ bp->tx_head, bp->tx_tail); ++ return 1; ++ } ++ ++ entry = bp->tx_head; ++ dev_dbg(&bp->pdev->dev, "Allocated ring entry %u\n", entry); ++ mapping = dma_map_single(&bp->pdev->dev, skb->data, ++ len, DMA_TO_DEVICE); ++ bp->tx_skb[entry].skb = skb; ++ bp->tx_skb[entry].mapping = mapping; ++ dev_dbg(&bp->pdev->dev, "Mapped skb data %p to DMA addr %08lx\n", ++ skb->data, (unsigned long)mapping); ++ ++ ctrl = MACB_BF(TX_FRMLEN, len); ++ ctrl |= MACB_BIT(TX_LAST); ++ if (entry == (TX_RING_SIZE - 1)) ++ ctrl |= MACB_BIT(TX_WRAP); ++ ++ bp->tx_ring[entry].addr = mapping; ++ bp->tx_ring[entry].ctrl = ctrl; ++ wmb(); ++ ++ entry = NEXT_TX(entry); ++ bp->tx_head = entry; ++ ++ macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(TSTART)); ++ ++ if (TX_BUFFS_AVAIL(bp) < 1) ++ netif_stop_queue(dev); ++ ++ spin_unlock_irq(&bp->lock); ++ ++ dev->trans_start = jiffies; ++ ++ return 0; ++} ++ ++static void macb_free_consistent(struct macb *bp) ++{ ++ if (bp->tx_skb) { ++ kfree(bp->tx_skb); ++ bp->tx_skb = NULL; ++ } ++ if (bp->rx_ring) { ++ dma_free_coherent(&bp->pdev->dev, RX_RING_BYTES, ++ bp->rx_ring, bp->rx_ring_dma); ++ bp->rx_ring = NULL; ++ } ++ if (bp->tx_ring) { ++ dma_free_coherent(&bp->pdev->dev, TX_RING_BYTES, ++ bp->tx_ring, bp->tx_ring_dma); ++ bp->tx_ring = NULL; ++ } ++ if (bp->rx_buffers) { ++ dma_free_coherent(&bp->pdev->dev, ++ RX_RING_SIZE * RX_BUFFER_SIZE, ++ bp->rx_buffers, bp->rx_buffers_dma); ++ bp->rx_buffers = NULL; ++ } ++} ++ ++static int macb_alloc_consistent(struct macb *bp) ++{ ++ int size; ++ ++ size = TX_RING_SIZE * sizeof(struct ring_info); ++ bp->tx_skb = kmalloc(size, GFP_KERNEL); ++ if (!bp->tx_skb) ++ goto out_err; ++ ++ size = RX_RING_BYTES; ++ bp->rx_ring = dma_alloc_coherent(&bp->pdev->dev, size, ++ &bp->rx_ring_dma, GFP_KERNEL); ++ if (!bp->rx_ring) ++ goto out_err; ++ dev_dbg(&bp->pdev->dev, ++ "Allocated RX ring of %d bytes at %08lx (mapped %p)\n", ++ size, (unsigned long)bp->rx_ring_dma, bp->rx_ring); ++ ++ size = TX_RING_BYTES; ++ bp->tx_ring = dma_alloc_coherent(&bp->pdev->dev, size, ++ &bp->tx_ring_dma, GFP_KERNEL); ++ if (!bp->tx_ring) ++ goto out_err; ++ dev_dbg(&bp->pdev->dev, ++ "Allocated TX ring of %d bytes at %08lx (mapped %p)\n", ++ size, (unsigned long)bp->tx_ring_dma, bp->tx_ring); ++ ++ size = RX_RING_SIZE * RX_BUFFER_SIZE; ++ bp->rx_buffers = dma_alloc_coherent(&bp->pdev->dev, size, ++ &bp->rx_buffers_dma, GFP_KERNEL); ++ if (!bp->rx_buffers) ++ goto out_err; ++ dev_dbg(&bp->pdev->dev, ++ "Allocated RX buffers of %d bytes at %08lx (mapped %p)\n", ++ size, (unsigned long)bp->rx_buffers_dma, bp->rx_buffers); ++ ++ return 0; ++ ++out_err: ++ macb_free_consistent(bp); ++ return -ENOMEM; ++} ++ ++static void macb_init_rings(struct macb *bp) ++{ ++ int i; ++ dma_addr_t addr; ++ ++ addr = bp->rx_buffers_dma; ++ for (i = 0; i < RX_RING_SIZE; i++) { ++ bp->rx_ring[i].addr = addr; ++ bp->rx_ring[i].ctrl = 0; ++ addr += RX_BUFFER_SIZE; ++ } ++ bp->rx_ring[RX_RING_SIZE - 1].addr |= MACB_BIT(RX_WRAP); ++ ++ for (i = 0; i < TX_RING_SIZE; i++) { ++ bp->tx_ring[i].addr = 0; ++ bp->tx_ring[i].ctrl = MACB_BIT(TX_USED); ++ } ++ bp->tx_ring[TX_RING_SIZE - 1].ctrl |= MACB_BIT(TX_WRAP); ++ ++ bp->rx_tail = bp->tx_head = bp->tx_tail = 0; ++} ++ ++static void macb_reset_hw(struct macb *bp) ++{ ++ /* Make sure we have the write buffer for ourselves */ ++ wmb(); ++ ++ /* ++ * Disable RX and TX (XXX: Should we halt the transmission ++ * more gracefully?) ++ */ ++ macb_writel(bp, NCR, 0); ++ ++ /* Clear the stats registers (XXX: Update stats first?) */ ++ macb_writel(bp, NCR, MACB_BIT(CLRSTAT)); ++ ++ /* Clear all status flags */ ++ macb_writel(bp, TSR, ~0UL); ++ macb_writel(bp, RSR, ~0UL); ++ ++ /* Disable all interrupts */ ++ macb_writel(bp, IDR, ~0UL); ++ macb_readl(bp, ISR); ++} ++ ++static void macb_init_hw(struct macb *bp) ++{ ++ unsigned long pclk_hz; ++ u32 config; ++ ++ macb_reset_hw(bp); ++ __macb_set_hwaddr(bp); ++ ++ /* Set RMII mode */ ++ macb_writel(bp, USRIO, MACB_BIT(RMII)); ++ ++ /* Initialize Network Configuration Register */ ++ pclk_hz = clk_get_rate(bp->pclk); ++ if (pclk_hz <= 20000000) ++ config = MACB_BF(CLK, MACB_CLK_DIV8); ++ else if (pclk_hz <= 40000000) ++ config = MACB_BF(CLK, MACB_CLK_DIV16); ++ else if (pclk_hz <= 80000000) ++ config = MACB_BF(CLK, MACB_CLK_DIV32); ++ else ++ config = MACB_BF(CLK, MACB_CLK_DIV64); ++ ++ config |= MACB_BIT(PAE); /* PAuse Enable */ ++ config |= MACB_BIT(DRFCS); /* Discard Rx FCS */ ++ if (bp->dev->flags & IFF_PROMISC) ++ config |= MACB_BIT(CAF); /* Copy All Frames */ ++ if (!(bp->dev->flags & IFF_BROADCAST)) ++ config |= MACB_BIT(NBC); /* No BroadCast */ ++ macb_writel(bp, NCFGR, config); ++ ++ /* Initialize TX and RX buffers */ ++ macb_writel(bp, RBQP, bp->rx_ring_dma); ++ macb_writel(bp, TBQP, bp->tx_ring_dma); ++ ++ /* Enable TX and RX */ ++ macb_writel(bp, NCR, MACB_BIT(RE) | MACB_BIT(TE)); ++ ++ /* Enable interrupts */ ++ macb_writel(bp, IER, (MACB_BIT(RCOMP) ++ | MACB_BIT(RXUBR) ++ | MACB_BIT(ISR_TUND) ++ | MACB_BIT(ISR_RLE) ++ | MACB_BIT(TXERR) ++ | MACB_BIT(TCOMP) ++ | MACB_BIT(ISR_ROVR) ++ | MACB_BIT(HRESP))); ++} ++ ++static void macb_init_phy(struct net_device *dev) ++{ ++ struct macb *bp = netdev_priv(dev); ++ ++ /* Set some reasonable default settings */ ++ macb_mdio_write(dev, bp->mii.phy_id, MII_ADVERTISE, ++ ADVERTISE_CSMA | ADVERTISE_ALL); ++ macb_mdio_write(dev, bp->mii.phy_id, MII_BMCR, ++ (BMCR_SPEED100 | BMCR_ANENABLE ++ | BMCR_ANRESTART | BMCR_FULLDPLX)); ++} ++ ++static int macb_open(struct net_device *dev) ++{ ++ struct macb *bp = netdev_priv(dev); ++ int err; ++ ++ dev_dbg(&bp->pdev->dev, "open\n"); ++ ++ err = macb_alloc_consistent(bp); ++ if (err) { ++ printk(KERN_ERR ++ "%s: Unable to allocate DMA memory (error %d)\n", ++ dev->name, err); ++ return err; ++ } ++ ++ macb_init_rings(bp); ++ macb_init_hw(bp); ++ macb_init_phy(dev); ++ ++ macb_check_media(bp, 1, 1); ++ netif_start_queue(dev); ++ ++ schedule_delayed_work(&bp->periodic_task, HZ); ++ ++ return 0; ++} ++ ++static int macb_close(struct net_device *dev) ++{ ++ struct macb *bp = netdev_priv(dev); ++ unsigned long flags; ++ ++ cancel_rearming_delayed_work(&bp->periodic_task); ++ ++ netif_stop_queue(dev); ++ ++ spin_lock_irqsave(&bp->lock, flags); ++ macb_reset_hw(bp); ++ netif_carrier_off(dev); ++ spin_unlock_irqrestore(&bp->lock, flags); ++ ++ macb_free_consistent(bp); ++ ++ return 0; ++} ++ ++static struct net_device_stats *macb_get_stats(struct net_device *dev) ++{ ++ struct macb *bp = netdev_priv(dev); ++ struct net_device_stats *nstat = &bp->stats; ++ struct macb_stats *hwstat = &bp->hw_stats; ++ ++ /* Convert HW stats into netdevice stats */ ++ nstat->rx_errors = (hwstat->rx_fcs_errors + ++ hwstat->rx_align_errors + ++ hwstat->rx_resource_errors + ++ hwstat->rx_overruns + ++ hwstat->rx_oversize_pkts + ++ hwstat->rx_jabbers + ++ hwstat->rx_undersize_pkts + ++ hwstat->sqe_test_errors + ++ hwstat->rx_length_mismatch); ++ nstat->tx_errors = (hwstat->tx_late_cols + ++ hwstat->tx_excessive_cols + ++ hwstat->tx_underruns + ++ hwstat->tx_carrier_errors); ++ nstat->collisions = (hwstat->tx_single_cols + ++ hwstat->tx_multiple_cols + ++ hwstat->tx_excessive_cols); ++ nstat->rx_length_errors = (hwstat->rx_oversize_pkts + ++ hwstat->rx_jabbers + ++ hwstat->rx_undersize_pkts + ++ hwstat->rx_length_mismatch); ++ nstat->rx_over_errors = hwstat->rx_resource_errors; ++ nstat->rx_crc_errors = hwstat->rx_fcs_errors; ++ nstat->rx_frame_errors = hwstat->rx_align_errors; ++ nstat->rx_fifo_errors = hwstat->rx_overruns; ++ /* XXX: What does "missed" mean? */ ++ nstat->tx_aborted_errors = hwstat->tx_excessive_cols; ++ nstat->tx_carrier_errors = hwstat->tx_carrier_errors; ++ nstat->tx_fifo_errors = hwstat->tx_underruns; ++ /* Don't know about heartbeat or window errors... */ ++ ++ return nstat; ++} ++ ++static int macb_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) ++{ ++ struct macb *bp = netdev_priv(dev); ++ int ret; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&bp->lock, flags); ++ ret = mii_ethtool_gset(&bp->mii, cmd); ++ spin_unlock_irqrestore(&bp->lock, flags); ++ ++ return ret; ++} ++ ++static int macb_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) ++{ ++ struct macb *bp = netdev_priv(dev); ++ int ret; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&bp->lock, flags); ++ ret = mii_ethtool_sset(&bp->mii, cmd); ++ spin_unlock_irqrestore(&bp->lock, flags); ++ ++ return ret; ++} ++ ++static void macb_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) ++{ ++ struct macb *bp = netdev_priv(dev); ++ ++ strcpy(info->driver, bp->pdev->dev.driver->name); ++ strcpy(info->version, "$Revision: 1.14 $"); ++ strcpy(info->bus_info, bp->pdev->dev.bus_id); ++} ++ ++static int macb_nway_reset(struct net_device *dev) ++{ ++ struct macb *bp = netdev_priv(dev); ++ return mii_nway_restart(&bp->mii); ++} ++ ++static struct ethtool_ops macb_ethtool_ops = { ++ .get_settings = macb_get_settings, ++ .set_settings = macb_set_settings, ++ .get_drvinfo = macb_get_drvinfo, ++ .nway_reset = macb_nway_reset, ++ .get_link = ethtool_op_get_link, ++}; ++ ++static int macb_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ++{ ++ struct macb *bp = netdev_priv(dev); ++ int ret; ++ unsigned long flags; ++ ++ if (!netif_running(dev)) ++ return -EINVAL; ++ ++ spin_lock_irqsave(&bp->lock, flags); ++ ret = generic_mii_ioctl(&bp->mii, if_mii(rq), cmd, NULL); ++ spin_unlock_irqrestore(&bp->lock, flags); ++ ++ return ret; ++} ++ ++static ssize_t macb_mii_show(const struct class_device *cd, char *buf, ++ unsigned long addr) ++{ ++ struct net_device *dev = to_net_dev(cd); ++ struct macb *bp = netdev_priv(dev); ++ ssize_t ret = -EINVAL; ++ ++ if (netif_running(dev)) { ++ int value; ++ value = macb_mdio_read(dev, bp->mii.phy_id, addr); ++ ret = sprintf(buf, "0x%04x\n", (uint16_t)value); ++ } ++ ++ return ret; ++} ++ ++#define MII_ENTRY(name, addr) \ ++static ssize_t show_##name(struct class_device *cd, char *buf) \ ++{ \ ++ return macb_mii_show(cd, buf, addr); \ ++} \ ++static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL) ++ ++MII_ENTRY(bmcr, MII_BMCR); ++MII_ENTRY(bmsr, MII_BMSR); ++MII_ENTRY(physid1, MII_PHYSID1); ++MII_ENTRY(physid2, MII_PHYSID2); ++MII_ENTRY(advertise, MII_ADVERTISE); ++MII_ENTRY(lpa, MII_LPA); ++MII_ENTRY(expansion, MII_EXPANSION); ++ ++static struct attribute *macb_mii_attrs[] = { ++ &class_device_attr_bmcr.attr, ++ &class_device_attr_bmsr.attr, ++ &class_device_attr_physid1.attr, ++ &class_device_attr_physid2.attr, ++ &class_device_attr_advertise.attr, ++ &class_device_attr_lpa.attr, ++ &class_device_attr_expansion.attr, ++ NULL, ++}; ++ ++static struct attribute_group macb_mii_group = { ++ .name = "mii", ++ .attrs = macb_mii_attrs, ++}; ++ ++static void macb_unregister_sysfs(struct net_device *net) ++{ ++ struct class_device *class_dev = &net->class_dev; ++ ++ sysfs_remove_group(&class_dev->kobj, &macb_mii_group); ++} ++ ++static int macb_register_sysfs(struct net_device *net) ++{ ++ struct class_device *class_dev = &net->class_dev; ++ int ret; ++ ++ ret = sysfs_create_group(&class_dev->kobj, &macb_mii_group); ++ if (ret) ++ printk(KERN_WARNING ++ "%s: sysfs mii attribute registration failed: %d\n", ++ net->name, ret); ++ return ret; ++} ++static int __devinit macb_probe(struct platform_device *pdev) ++{ ++ struct eth_platform_data *pdata; ++ struct resource *regs; ++ struct net_device *dev; ++ struct macb *bp; ++ int err = -ENXIO; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) { ++ dev_err(&pdev->dev, "no mmio resource defined\n"); ++ goto err_out; ++ } ++ ++ err = -ENOMEM; ++ dev = alloc_etherdev(sizeof(*bp)); ++ if (!dev) { ++ dev_err(&pdev->dev, "etherdev alloc failed, aborting.\n"); ++ goto err_out; ++ } ++ ++ SET_MODULE_OWNER(dev); ++ SET_NETDEV_DEV(dev, &pdev->dev); ++ ++ /* TODO: Actually, we have some interesting features... */ ++ dev->features |= 0; ++ ++ bp = netdev_priv(dev); ++ bp->pdev = pdev; ++ bp->dev = dev; ++ ++ spin_lock_init(&bp->lock); ++ ++ bp->pclk = clk_get(&pdev->dev, "pclk"); ++ if (IS_ERR(bp->pclk)) { ++ dev_err(&pdev->dev, "failed to get pclk\n"); ++ goto err_out_free_dev; ++ } ++ bp->hclk = clk_get(&pdev->dev, "hclk"); ++ if (IS_ERR(bp->hclk)) { ++ dev_err(&pdev->dev, "failed to get hclk\n"); ++ goto err_out_put_pclk; ++ } ++ ++ clk_enable(bp->pclk); ++ clk_enable(bp->hclk); ++ ++ bp->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!bp->regs) { ++ dev_err(&pdev->dev, "failed to map registers, aborting.\n"); ++ err = -ENOMEM; ++ goto err_out_disable_clocks; ++ } ++ ++ dev->irq = platform_get_irq(pdev, 0); ++ err = request_irq(dev->irq, macb_interrupt, SA_SAMPLE_RANDOM, ++ dev->name, dev); ++ if (err) { ++ printk(KERN_ERR ++ "%s: Unable to request IRQ %d (error %d)\n", ++ dev->name, dev->irq, err); ++ goto err_out_iounmap; ++ } ++ ++ dev->open = macb_open; ++ dev->stop = macb_close; ++ dev->hard_start_xmit = macb_start_xmit; ++ dev->get_stats = macb_get_stats; ++ dev->do_ioctl = macb_ioctl; ++ dev->poll = macb_poll; ++ dev->weight = 64; ++ dev->ethtool_ops = &macb_ethtool_ops; ++ ++ dev->base_addr = regs->start; ++ ++ INIT_WORK(&bp->periodic_task, macb_periodic_task, bp); ++ mutex_init(&bp->mdio_mutex); ++ init_completion(&bp->mdio_complete); ++ ++ bp->mii.dev = dev; ++ bp->mii.mdio_read = macb_mdio_read; ++ bp->mii.mdio_write = macb_mdio_write; ++ ++ pdata = pdev->dev.platform_data; ++ if (!pdata) { ++ dev_err(&pdev->dev, "Cannot determine hw address\n"); ++ goto err_out_free_irq; ++ } ++ ++ memcpy(dev->dev_addr, pdata->hw_addr, dev->addr_len); ++ bp->mii.phy_id = pdata->mii_phy_addr; ++ bp->mii.phy_id_mask = 0x1f; ++ bp->mii.reg_num_mask = 0x1f; ++ ++ bp->tx_pending = DEF_TX_RING_PENDING; ++ ++ err = register_netdev(dev); ++ if (err) { ++ dev_err(&pdev->dev, "Cannot register net device, aborting.\n"); ++ goto err_out_free_irq; ++ } ++ ++ platform_set_drvdata(pdev, dev); ++ ++ macb_register_sysfs(dev); ++ ++ printk(KERN_INFO "%s: Atmel MACB at 0x%08lx irq %d " ++ "(%02x:%02x:%02x:%02x:%02x:%02x)\n", ++ dev->name, dev->base_addr, dev->irq, ++ dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], ++ dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); ++ ++ return 0; ++ ++err_out_free_irq: ++ free_irq(dev->irq, dev); ++err_out_iounmap: ++ iounmap(bp->regs); ++err_out_disable_clocks: ++ clk_disable(bp->hclk); ++ clk_disable(bp->pclk); ++ clk_put(bp->hclk); ++err_out_put_pclk: ++ clk_put(bp->pclk); ++err_out_free_dev: ++ free_netdev(dev); ++err_out: ++ platform_set_drvdata(pdev, NULL); ++ return err; ++} ++ ++static int __devexit macb_remove(struct platform_device *pdev) ++{ ++ struct net_device *dev; ++ struct macb *bp; ++ ++ dev = platform_get_drvdata(pdev); ++ ++ if (dev) { ++ bp = netdev_priv(dev); ++ macb_unregister_sysfs(dev); ++ unregister_netdev(dev); ++ free_irq(dev->irq, dev); ++ iounmap(bp->regs); ++ clk_disable(bp->hclk); ++ clk_disable(bp->pclk); ++ clk_put(bp->hclk); ++ clk_put(bp->pclk); ++ free_netdev(dev); ++ platform_set_drvdata(pdev, NULL); ++ } ++ ++ return 0; ++} ++ ++static struct platform_driver macb_driver = { ++ .probe = macb_probe, ++ .remove = __devexit_p(macb_remove), ++ .driver = { ++ .name = "macb", ++ }, ++}; ++ ++static int __init macb_init(void) ++{ ++ return platform_driver_register(&macb_driver); ++} ++ ++static void __exit macb_exit(void) ++{ ++ platform_driver_unregister(&macb_driver); ++} ++ ++module_init(macb_init); ++module_exit(macb_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_DESCRIPTION("Atmel MACB Ethernet driver"); ++MODULE_AUTHOR("Haavard Skinnemoen "); +Index: linux-2.6.18-avr32/drivers/net/macb.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/net/macb.h 2006-11-02 16:33:26.000000000 +0100 +@@ -0,0 +1,387 @@ ++/* ++ * Atmel MACB Ethernet Controller driver ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef _MACB_H ++#define _MACB_H ++ ++/* MACB register offsets */ ++#define MACB_NCR 0x0000 ++#define MACB_NCFGR 0x0004 ++#define MACB_NSR 0x0008 ++#define MACB_TSR 0x0014 ++#define MACB_RBQP 0x0018 ++#define MACB_TBQP 0x001c ++#define MACB_RSR 0x0020 ++#define MACB_ISR 0x0024 ++#define MACB_IER 0x0028 ++#define MACB_IDR 0x002c ++#define MACB_IMR 0x0030 ++#define MACB_MAN 0x0034 ++#define MACB_PTR 0x0038 ++#define MACB_PFR 0x003c ++#define MACB_FTO 0x0040 ++#define MACB_SCF 0x0044 ++#define MACB_MCF 0x0048 ++#define MACB_FRO 0x004c ++#define MACB_FCSE 0x0050 ++#define MACB_ALE 0x0054 ++#define MACB_DTF 0x0058 ++#define MACB_LCOL 0x005c ++#define MACB_EXCOL 0x0060 ++#define MACB_TUND 0x0064 ++#define MACB_CSE 0x0068 ++#define MACB_RRE 0x006c ++#define MACB_ROVR 0x0070 ++#define MACB_RSE 0x0074 ++#define MACB_ELE 0x0078 ++#define MACB_RJA 0x007c ++#define MACB_USF 0x0080 ++#define MACB_STE 0x0084 ++#define MACB_RLE 0x0088 ++#define MACB_TPF 0x008c ++#define MACB_HRB 0x0090 ++#define MACB_HRT 0x0094 ++#define MACB_SA1B 0x0098 ++#define MACB_SA1T 0x009c ++#define MACB_SA2B 0x00a0 ++#define MACB_SA2T 0x00a4 ++#define MACB_SA3B 0x00a8 ++#define MACB_SA3T 0x00ac ++#define MACB_SA4B 0x00b0 ++#define MACB_SA4T 0x00b4 ++#define MACB_TID 0x00b8 ++#define MACB_TPQ 0x00bc ++#define MACB_USRIO 0x00c0 ++#define MACB_WOL 0x00c4 ++ ++/* Bitfields in NCR */ ++#define MACB_LB_OFFSET 0 ++#define MACB_LB_SIZE 1 ++#define MACB_LLB_OFFSET 1 ++#define MACB_LLB_SIZE 1 ++#define MACB_RE_OFFSET 2 ++#define MACB_RE_SIZE 1 ++#define MACB_TE_OFFSET 3 ++#define MACB_TE_SIZE 1 ++#define MACB_MPE_OFFSET 4 ++#define MACB_MPE_SIZE 1 ++#define MACB_CLRSTAT_OFFSET 5 ++#define MACB_CLRSTAT_SIZE 1 ++#define MACB_INCSTAT_OFFSET 6 ++#define MACB_INCSTAT_SIZE 1 ++#define MACB_WESTAT_OFFSET 7 ++#define MACB_WESTAT_SIZE 1 ++#define MACB_BP_OFFSET 8 ++#define MACB_BP_SIZE 1 ++#define MACB_TSTART_OFFSET 9 ++#define MACB_TSTART_SIZE 1 ++#define MACB_THALT_OFFSET 10 ++#define MACB_THALT_SIZE 1 ++#define MACB_NCR_TPF_OFFSET 11 ++#define MACB_NCR_TPF_SIZE 1 ++#define MACB_TZQ_OFFSET 12 ++#define MACB_TZQ_SIZE 1 ++ ++/* Bitfields in NCFGR */ ++#define MACB_SPD_OFFSET 0 ++#define MACB_SPD_SIZE 1 ++#define MACB_FD_OFFSET 1 ++#define MACB_FD_SIZE 1 ++#define MACB_BIT_RATE_OFFSET 2 ++#define MACB_BIT_RATE_SIZE 1 ++#define MACB_JFRAME_OFFSET 3 ++#define MACB_JFRAME_SIZE 1 ++#define MACB_CAF_OFFSET 4 ++#define MACB_CAF_SIZE 1 ++#define MACB_NBC_OFFSET 5 ++#define MACB_NBC_SIZE 1 ++#define MACB_NCFGR_MTI_OFFSET 6 ++#define MACB_NCFGR_MTI_SIZE 1 ++#define MACB_UNI_OFFSET 7 ++#define MACB_UNI_SIZE 1 ++#define MACB_BIG_OFFSET 8 ++#define MACB_BIG_SIZE 1 ++#define MACB_EAE_OFFSET 9 ++#define MACB_EAE_SIZE 1 ++#define MACB_CLK_OFFSET 10 ++#define MACB_CLK_SIZE 2 ++#define MACB_RTY_OFFSET 12 ++#define MACB_RTY_SIZE 1 ++#define MACB_PAE_OFFSET 13 ++#define MACB_PAE_SIZE 1 ++#define MACB_RBOF_OFFSET 14 ++#define MACB_RBOF_SIZE 2 ++#define MACB_RLCE_OFFSET 16 ++#define MACB_RLCE_SIZE 1 ++#define MACB_DRFCS_OFFSET 17 ++#define MACB_DRFCS_SIZE 1 ++#define MACB_EFRHD_OFFSET 18 ++#define MACB_EFRHD_SIZE 1 ++#define MACB_IRXFCS_OFFSET 19 ++#define MACB_IRXFCS_SIZE 1 ++ ++/* Bitfields in NSR */ ++#define MACB_NSR_LINK_OFFSET 0 ++#define MACB_NSR_LINK_SIZE 1 ++#define MACB_MDIO_OFFSET 1 ++#define MACB_MDIO_SIZE 1 ++#define MACB_IDLE_OFFSET 2 ++#define MACB_IDLE_SIZE 1 ++ ++/* Bitfields in TSR */ ++#define MACB_UBR_OFFSET 0 ++#define MACB_UBR_SIZE 1 ++#define MACB_COL_OFFSET 1 ++#define MACB_COL_SIZE 1 ++#define MACB_TSR_RLE_OFFSET 2 ++#define MACB_TSR_RLE_SIZE 1 ++#define MACB_TGO_OFFSET 3 ++#define MACB_TGO_SIZE 1 ++#define MACB_BEX_OFFSET 4 ++#define MACB_BEX_SIZE 1 ++#define MACB_COMP_OFFSET 5 ++#define MACB_COMP_SIZE 1 ++#define MACB_UND_OFFSET 6 ++#define MACB_UND_SIZE 1 ++ ++/* Bitfields in RSR */ ++#define MACB_BNA_OFFSET 0 ++#define MACB_BNA_SIZE 1 ++#define MACB_REC_OFFSET 1 ++#define MACB_REC_SIZE 1 ++#define MACB_OVR_OFFSET 2 ++#define MACB_OVR_SIZE 1 ++ ++/* Bitfields in ISR/IER/IDR/IMR */ ++#define MACB_MFD_OFFSET 0 ++#define MACB_MFD_SIZE 1 ++#define MACB_RCOMP_OFFSET 1 ++#define MACB_RCOMP_SIZE 1 ++#define MACB_RXUBR_OFFSET 2 ++#define MACB_RXUBR_SIZE 1 ++#define MACB_TXUBR_OFFSET 3 ++#define MACB_TXUBR_SIZE 1 ++#define MACB_ISR_TUND_OFFSET 4 ++#define MACB_ISR_TUND_SIZE 1 ++#define MACB_ISR_RLE_OFFSET 5 ++#define MACB_ISR_RLE_SIZE 1 ++#define MACB_TXERR_OFFSET 6 ++#define MACB_TXERR_SIZE 1 ++#define MACB_TCOMP_OFFSET 7 ++#define MACB_TCOMP_SIZE 1 ++#define MACB_ISR_LINK_OFFSET 9 ++#define MACB_ISR_LINK_SIZE 1 ++#define MACB_ISR_ROVR_OFFSET 10 ++#define MACB_ISR_ROVR_SIZE 1 ++#define MACB_HRESP_OFFSET 11 ++#define MACB_HRESP_SIZE 1 ++#define MACB_PFR_OFFSET 12 ++#define MACB_PFR_SIZE 1 ++#define MACB_PTZ_OFFSET 13 ++#define MACB_PTZ_SIZE 1 ++ ++/* Bitfields in MAN */ ++#define MACB_DATA_OFFSET 0 ++#define MACB_DATA_SIZE 16 ++#define MACB_CODE_OFFSET 16 ++#define MACB_CODE_SIZE 2 ++#define MACB_REGA_OFFSET 18 ++#define MACB_REGA_SIZE 5 ++#define MACB_PHYA_OFFSET 23 ++#define MACB_PHYA_SIZE 5 ++#define MACB_RW_OFFSET 28 ++#define MACB_RW_SIZE 2 ++#define MACB_SOF_OFFSET 30 ++#define MACB_SOF_SIZE 2 ++ ++/* Bitfields in USRIO */ ++#define MACB_RMII_OFFSET 0 ++#define MACB_RMII_SIZE 1 ++#define MACB_EAM_OFFSET 1 ++#define MACB_EAM_SIZE 1 ++#define MACB_TX_PAUSE_OFFSET 2 ++#define MACB_TX_PAUSE_SIZE 1 ++#define MACB_TX_PAUSE_ZERO_OFFSET 3 ++#define MACB_TX_PAUSE_ZERO_SIZE 1 ++ ++/* Bitfields in WOL */ ++#define MACB_IP_OFFSET 0 ++#define MACB_IP_SIZE 16 ++#define MACB_MAG_OFFSET 16 ++#define MACB_MAG_SIZE 1 ++#define MACB_ARP_OFFSET 17 ++#define MACB_ARP_SIZE 1 ++#define MACB_SA1_OFFSET 18 ++#define MACB_SA1_SIZE 1 ++#define MACB_WOL_MTI_OFFSET 19 ++#define MACB_WOL_MTI_SIZE 1 ++ ++/* Constants for CLK */ ++#define MACB_CLK_DIV8 0 ++#define MACB_CLK_DIV16 1 ++#define MACB_CLK_DIV32 2 ++#define MACB_CLK_DIV64 3 ++ ++/* Constants for MAN register */ ++#define MACB_MAN_SOF 1 ++#define MACB_MAN_WRITE 1 ++#define MACB_MAN_READ 2 ++#define MACB_MAN_CODE 2 ++ ++/* Bit manipulation macros */ ++#define MACB_BIT(name) \ ++ (1 << MACB_##name##_OFFSET) ++#define MACB_BF(name,value) \ ++ (((value) & ((1 << MACB_##name##_SIZE) - 1)) \ ++ << MACB_##name##_OFFSET) ++#define MACB_BFEXT(name,value)\ ++ (((value) >> MACB_##name##_OFFSET) \ ++ & ((1 << MACB_##name##_SIZE) - 1)) ++#define MACB_BFINS(name,value,old) \ ++ (((old) & ~(((1 << MACB_##name##_SIZE) - 1) \ ++ << MACB_##name##_OFFSET)) \ ++ | MACB_BF(name,value)) ++ ++/* Register access macros */ ++#define macb_readl(port,reg) \ ++ __raw_readl((port)->regs + MACB_##reg) ++#define macb_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + MACB_##reg) ++ ++struct dma_desc { ++ u32 addr; ++ u32 ctrl; ++}; ++ ++/* DMA descriptor bitfields */ ++#define MACB_RX_USED_OFFSET 0 ++#define MACB_RX_USED_SIZE 1 ++#define MACB_RX_WRAP_OFFSET 1 ++#define MACB_RX_WRAP_SIZE 1 ++#define MACB_RX_WADDR_OFFSET 2 ++#define MACB_RX_WADDR_SIZE 30 ++ ++#define MACB_RX_FRMLEN_OFFSET 0 ++#define MACB_RX_FRMLEN_SIZE 12 ++#define MACB_RX_OFFSET_OFFSET 12 ++#define MACB_RX_OFFSET_SIZE 2 ++#define MACB_RX_SOF_OFFSET 14 ++#define MACB_RX_SOF_SIZE 1 ++#define MACB_RX_EOF_OFFSET 15 ++#define MACB_RX_EOF_SIZE 1 ++#define MACB_RX_CFI_OFFSET 16 ++#define MACB_RX_CFI_SIZE 1 ++#define MACB_RX_VLAN_PRI_OFFSET 17 ++#define MACB_RX_VLAN_PRI_SIZE 3 ++#define MACB_RX_PRI_TAG_OFFSET 20 ++#define MACB_RX_PRI_TAG_SIZE 1 ++#define MACB_RX_VLAN_TAG_OFFSET 21 ++#define MACB_RX_VLAN_TAG_SIZE 1 ++#define MACB_RX_TYPEID_MATCH_OFFSET 22 ++#define MACB_RX_TYPEID_MATCH_SIZE 1 ++#define MACB_RX_SA4_MATCH_OFFSET 23 ++#define MACB_RX_SA4_MATCH_SIZE 1 ++#define MACB_RX_SA3_MATCH_OFFSET 24 ++#define MACB_RX_SA3_MATCH_SIZE 1 ++#define MACB_RX_SA2_MATCH_OFFSET 25 ++#define MACB_RX_SA2_MATCH_SIZE 1 ++#define MACB_RX_SA1_MATCH_OFFSET 26 ++#define MACB_RX_SA1_MATCH_SIZE 1 ++#define MACB_RX_EXT_MATCH_OFFSET 28 ++#define MACB_RX_EXT_MATCH_SIZE 1 ++#define MACB_RX_UHASH_MATCH_OFFSET 29 ++#define MACB_RX_UHASH_MATCH_SIZE 1 ++#define MACB_RX_MHASH_MATCH_OFFSET 30 ++#define MACB_RX_MHASH_MATCH_SIZE 1 ++#define MACB_RX_BROADCAST_OFFSET 31 ++#define MACB_RX_BROADCAST_SIZE 1 ++ ++#define MACB_TX_FRMLEN_OFFSET 0 ++#define MACB_TX_FRMLEN_SIZE 11 ++#define MACB_TX_LAST_OFFSET 15 ++#define MACB_TX_LAST_SIZE 1 ++#define MACB_TX_NOCRC_OFFSET 16 ++#define MACB_TX_NOCRC_SIZE 1 ++#define MACB_TX_BUF_EXHAUSTED_OFFSET 27 ++#define MACB_TX_BUF_EXHAUSTED_SIZE 1 ++#define MACB_TX_UNDERRUN_OFFSET 28 ++#define MACB_TX_UNDERRUN_SIZE 1 ++#define MACB_TX_ERROR_OFFSET 29 ++#define MACB_TX_ERROR_SIZE 1 ++#define MACB_TX_WRAP_OFFSET 30 ++#define MACB_TX_WRAP_SIZE 1 ++#define MACB_TX_USED_OFFSET 31 ++#define MACB_TX_USED_SIZE 1 ++ ++struct ring_info { ++ struct sk_buff *skb; ++ dma_addr_t mapping; ++}; ++ ++/* ++ * Hardware-collected statistics. Used when updating the network ++ * device stats by a periodic timer. ++ */ ++struct macb_stats { ++ u32 rx_pause_frames; ++ u32 tx_ok; ++ u32 tx_single_cols; ++ u32 tx_multiple_cols; ++ u32 rx_ok; ++ u32 rx_fcs_errors; ++ u32 rx_align_errors; ++ u32 tx_deferred; ++ u32 tx_late_cols; ++ u32 tx_excessive_cols; ++ u32 tx_underruns; ++ u32 tx_carrier_errors; ++ u32 rx_resource_errors; ++ u32 rx_overruns; ++ u32 rx_symbol_errors; ++ u32 rx_oversize_pkts; ++ u32 rx_jabbers; ++ u32 rx_undersize_pkts; ++ u32 sqe_test_errors; ++ u32 rx_length_mismatch; ++ u32 tx_pause_frames; ++}; ++ ++struct macb { ++ void __iomem *regs; ++ ++ unsigned int rx_tail; ++ struct dma_desc *rx_ring; ++ void *rx_buffers; ++ ++ unsigned int tx_head, tx_tail; ++ struct dma_desc *tx_ring; ++ struct ring_info *tx_skb; ++ ++ spinlock_t lock; ++ struct platform_device *pdev; ++ struct clk *pclk; ++ struct clk *hclk; ++ struct net_device *dev; ++ struct net_device_stats stats; ++ struct macb_stats hw_stats; ++ ++ dma_addr_t rx_ring_dma; ++ dma_addr_t tx_ring_dma; ++ dma_addr_t rx_buffers_dma; ++ ++ unsigned int rx_pending, tx_pending; ++ ++ struct work_struct periodic_task; ++ ++ struct mutex mdio_mutex; ++ struct completion mdio_complete; ++ struct mii_if_info mii; ++}; ++ ++#endif /* _MACB_H */ diff --git a/packages/linux/linux-2.6.18/atmel-mci-debugfs.patch b/packages/linux/linux-2.6.18/atmel-mci-debugfs.patch new file mode 100644 index 0000000000..4570bd8e93 --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-mci-debugfs.patch @@ -0,0 +1,278 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Sun, 14 Jan 2007 19:07:06 +0100 +Subject: [ATMEL MCI] Add debugfs support + +Export some of the atmel-mci driver state through debugfs. More +specifically: + * The MCI hardware registers + * The request currently being processed + * Pending and processed event masks + +Signed-off-by: Haavard Skinnemoen +--- + drivers/mmc/atmel-mci.c | 230 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 230 insertions(+) + +Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/mmc/atmel-mci.c 2007-01-15 15:35:45.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.c 2007-01-15 15:38:05.000000000 +0100 +@@ -79,6 +79,14 @@ struct atmel_mci { + struct clk *mck; + struct mmci_platform_data *board; + struct platform_device *pdev; ++ ++#ifdef CONFIG_DEBUG_FS ++ struct dentry *debugfs_root; ++ struct dentry *debugfs_regs; ++ struct dentry *debugfs_req; ++ struct dentry *debugfs_pending_events; ++ struct dentry *debugfs_completed_events; ++#endif + }; + + /* Those printks take an awful lot of time... */ +@@ -90,6 +98,224 @@ static unsigned int fmax = 1000000U; + module_param(fmax, uint, 0444); + MODULE_PARM_DESC(fmax, "Max frequency in Hz of the MMC bus clock"); + ++#ifdef CONFIG_DEBUG_FS ++#include ++ ++#define DBG_REQ_BUF_SIZE (4096 - sizeof(unsigned int)) ++ ++struct req_dbg_data { ++ unsigned int nbytes; ++ char str[DBG_REQ_BUF_SIZE]; ++}; ++ ++static int req_dbg_open(struct inode *inode, struct file *file) ++{ ++ struct atmel_mci *host; ++ struct mmc_request *mrq; ++ struct mmc_command *cmd, *stop; ++ struct mmc_data *data; ++ struct req_dbg_data *priv; ++ char *str; ++ unsigned long n = 0; ++ ++ priv = kzalloc(DBG_REQ_BUF_SIZE, GFP_KERNEL); ++ if (!priv) ++ return -ENOMEM; ++ str = priv->str; ++ ++ mutex_lock(&inode->i_mutex); ++ host = inode->u.generic_ip; ++ ++ spin_lock_irq(&host->mmc->lock); ++ mrq = host->mrq; ++ if (mrq) { ++ cmd = mrq->cmd; ++ data = mrq->data; ++ stop = mrq->stop; ++ n = snprintf(str, DBG_REQ_BUF_SIZE, ++ "CMD%u(0x%x) %x %x %x %x %x (err %u)\n", ++ cmd->opcode, cmd->arg, cmd->flags, ++ cmd->resp[0], cmd->resp[1], cmd->resp[2], ++ cmd->resp[3], cmd->error); ++ if (n < DBG_REQ_BUF_SIZE && data) ++ n += snprintf(str + n, DBG_REQ_BUF_SIZE - n, ++ "DATA %u * %u (%u) %x (err %u)\n", ++ data->blocks, data->blksz, ++ data->bytes_xfered, data->flags, ++ data->error); ++ if (n < DBG_REQ_BUF_SIZE && stop) ++ n += snprintf(str + n, DBG_REQ_BUF_SIZE - n, ++ "CMD%u(0x%x) %x %x %x %x %x (err %u)\n", ++ stop->opcode, stop->arg, stop->flags, ++ stop->resp[0], stop->resp[1], ++ stop->resp[2], stop->resp[3], ++ stop->error); ++ } ++ spin_unlock_irq(&host->mmc->lock); ++ mutex_unlock(&inode->i_mutex); ++ ++ priv->nbytes = min(n, DBG_REQ_BUF_SIZE); ++ file->private_data = priv; ++ ++ return 0; ++} ++ ++static int req_dbg_read(struct file *file, char __user *buf, ++ size_t nbytes, loff_t *ppos) ++{ ++ struct req_dbg_data *priv = file->private_data; ++ ++ return simple_read_from_buffer(buf, nbytes, ppos, ++ priv->str, priv->nbytes); ++} ++ ++static int req_dbg_release(struct inode *inode, struct file *file) ++{ ++ kfree(file->private_data); ++ return 0; ++} ++ ++static const struct file_operations req_dbg_fops = { ++ .owner = THIS_MODULE, ++ .open = req_dbg_open, ++ .llseek = no_llseek, ++ .read = req_dbg_read, ++ .release = req_dbg_release, ++}; ++ ++static int regs_dbg_open(struct inode *inode, struct file *file) ++{ ++ struct atmel_mci *host; ++ unsigned int i; ++ u32 *data; ++ int ret = -ENOMEM; ++ ++ mutex_lock(&inode->i_mutex); ++ host = inode->u.generic_ip; ++ data = kmalloc(inode->i_size, GFP_KERNEL); ++ if (!data) ++ goto out; ++ ++ spin_lock_irq(&host->mmc->lock); ++ for (i = 0; i < inode->i_size / 4; i++) ++ data[i] = __raw_readl(host->regs + i * 4); ++ spin_unlock_irq(&host->mmc->lock); ++ ++ file->private_data = data; ++ ret = 0; ++ ++out: ++ mutex_unlock(&inode->i_mutex); ++ ++ return ret; ++} ++ ++static ssize_t regs_dbg_read(struct file *file, char __user *buf, ++ size_t nbytes, loff_t *ppos) ++{ ++ struct inode *inode = file->f_dentry->d_inode; ++ int ret; ++ ++ mutex_lock(&inode->i_mutex); ++ ret = simple_read_from_buffer(buf, nbytes, ppos, ++ file->private_data, ++ file->f_dentry->d_inode->i_size); ++ mutex_unlock(&inode->i_mutex); ++ ++ return ret; ++} ++ ++static int regs_dbg_release(struct inode *inode, struct file *file) ++{ ++ kfree(file->private_data); ++ return 0; ++} ++ ++static const struct file_operations regs_dbg_fops = { ++ .owner = THIS_MODULE, ++ .open = regs_dbg_open, ++ .llseek = generic_file_llseek, ++ .read = regs_dbg_read, ++ .release = regs_dbg_release, ++}; ++ ++static void atmci_init_debugfs(struct atmel_mci *host) ++{ ++ struct mmc_host *mmc; ++ struct dentry *root, *regs; ++ struct resource *res; ++ ++ mmc = host->mmc; ++ root = debugfs_create_dir(mmc_hostname(mmc), NULL); ++ if (IS_ERR(root) || !root) ++ goto err_root; ++ host->debugfs_root = root; ++ ++ regs = debugfs_create_file("regs", 0400, root, host, ®s_dbg_fops); ++ if (!regs) ++ goto err_regs; ++ ++ res = platform_get_resource(host->pdev, IORESOURCE_MEM, 0); ++ regs->d_inode->i_size = res->end - res->start + 1; ++ host->debugfs_regs = regs; ++ ++ host->debugfs_req = debugfs_create_file("req", 0400, root, ++ host, &req_dbg_fops); ++ if (!host->debugfs_req) ++ goto err_req; ++ ++ host->debugfs_pending_events ++ = debugfs_create_u32("pending_events", 0400, root, ++ (u32 *)&host->pending_events); ++ if (!host->debugfs_pending_events) ++ goto err_pending_events; ++ ++ host->debugfs_completed_events ++ = debugfs_create_u32("completed_events", 0400, root, ++ (u32 *)&host->completed_events); ++ if (!host->debugfs_completed_events) ++ goto err_completed_events; ++ ++ return; ++ ++err_completed_events: ++ debugfs_remove(host->debugfs_pending_events); ++err_pending_events: ++ debugfs_remove(host->debugfs_req); ++err_req: ++ debugfs_remove(host->debugfs_regs); ++err_regs: ++ debugfs_remove(host->debugfs_root); ++err_root: ++ host->debugfs_root = NULL; ++ dev_err(&host->pdev->dev, ++ "failed to initialize debugfs for %s\n", ++ mmc_hostname(mmc)); ++} ++ ++static void atmci_cleanup_debugfs(struct atmel_mci *host) ++{ ++ if (host->debugfs_root) { ++ debugfs_remove(host->debugfs_completed_events); ++ debugfs_remove(host->debugfs_pending_events); ++ debugfs_remove(host->debugfs_req); ++ debugfs_remove(host->debugfs_regs); ++ debugfs_remove(host->debugfs_root); ++ host->debugfs_root = NULL; ++ } ++} ++#else ++static inline void atmci_init_debugfs(struct atmel_mci *host) ++{ ++ ++} ++ ++static inline void atmci_cleanup_debugfs(struct atmel_mci *host) ++{ ++ ++} ++#endif /* CONFIG_DEBUG_FS */ ++ + static inline unsigned int ns_to_clocks(struct atmel_mci *host, + unsigned int ns) + { +@@ -709,6 +935,8 @@ static int __devinit atmci_probe(struct + printk(KERN_INFO "%s: Atmel MCI controller at 0x%08lx irq %d\n", + mmc_hostname(mmc), host->mapbase, irq); + ++ atmci_init_debugfs(host); ++ + return 0; + + out_free_irq: +@@ -734,6 +962,8 @@ static int __devexit atmci_remove(struct + platform_set_drvdata(pdev, NULL); + + if (host) { ++ atmci_cleanup_debugfs(host); ++ + mmc_remove_host(host->mmc); + + mci_writel(host, IDR, ~0UL); diff --git a/packages/linux/linux-2.6.18/atmel-mci-init-nr_blocks-in-dma-request.patch b/packages/linux/linux-2.6.18/atmel-mci-init-nr_blocks-in-dma-request.patch new file mode 100644 index 0000000000..d6d91ae0e8 --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-mci-init-nr_blocks-in-dma-request.patch @@ -0,0 +1,47 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Sun, 14 Jan 2007 19:07:06 +0100 +Subject: [ATMEL MCI] Initialize the nr_blocks member of the dma request + +It seems like the mmc driver might get asked to write less data +than what is available in the associated scatterlist. Previously, +the dmac driver assumed that an sg request should transfer all +the data in the scatterlist, which would break in this case. + +Resolve this by passing the number of blocks to transfer explicitly. +This will probably fix a number of cases where the mmc controller +seemed to be out of sync with the dma controller. + +Signed-off-by: Haavard Skinnemoen +--- + drivers/mmc/atmel-mci.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/mmc/atmel-mci.c 2007-01-15 15:39:13.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.c 2007-01-15 15:39:25.000000000 +0100 +@@ -51,7 +51,6 @@ struct atmel_mci_dma { + struct dma_request_sg req; + unsigned short rx_periph_id; + unsigned short tx_periph_id; +- int blocks_left; + }; + + struct atmel_mci { +@@ -428,6 +427,7 @@ static u32 atmci_prepare_data(struct mmc + mci_writel(host, BLKR, (MCI_BF(BCNT, data->blocks) + | MCI_BF(BLKLEN, data->blksz))); + host->dma.req.block_size = data->blksz; ++ host->dma.req.nr_blocks = data->blocks; + + cmd_flags = MCI_BF(TRCMD, MCI_TRCMD_START_TRANS); + if (data->flags & MMC_DATA_STREAM) +@@ -454,7 +454,6 @@ static u32 atmci_prepare_data(struct mmc + host->dma.req.data_reg = host->mapbase + MCI_TDR; + } + host->dma.req.sg = data->sg; +- host->dma.blocks_left = data->blocks; + + dma_prepare_request_sg(host->dma.req.req.dmac, &host->dma.req); + diff --git a/packages/linux/linux-2.6.18/atmel-mmc-host-driver.patch b/packages/linux/linux-2.6.18/atmel-mmc-host-driver.patch new file mode 100644 index 0000000000..b7d7e8ae3f --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-mmc-host-driver.patch @@ -0,0 +1,986 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Fri Nov 18 17:20:29 2005 +0100 +Subject: [PATCH] AVR32: MMC Host Driver + +--- + + drivers/mmc/Kconfig | 10 + drivers/mmc/Makefile | 1 + drivers/mmc/atmel-mci.c | 738 ++++++++++++++++++++++++++++++++++++++++++++++++ + drivers/mmc/atmel-mci.h | 192 ++++++++++++ + 4 files changed, 941 insertions(+) + +Index: linux-2.6.18-avr32/drivers/mmc/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/mmc/Kconfig 2007-01-15 10:14:40.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/mmc/Kconfig 2007-01-15 10:14:46.000000000 +0100 +@@ -71,6 +71,16 @@ config MMC_OMAP + + If unsure, say N. + ++config MMC_ATMELMCI ++ tristate "Atmel Multimedia Card Interface support" ++ depends on AVR32 && MMC ++ help ++ This selects the Atmel Multimedia Card Interface. If you have ++ a AT91 (ARM) or AT32 (AVR32) platform with a Multimedia Card ++ slot, say Y or M here. ++ ++ If unsure, say N. ++ + config MMC_WBSD + tristate "Winbond W83L51xD SD/MMC Card Interface support" + depends on MMC && ISA_DMA_API +Index: linux-2.6.18-avr32/drivers/mmc/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/mmc/Makefile 2007-01-15 10:14:40.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/mmc/Makefile 2007-01-15 10:14:46.000000000 +0100 +@@ -23,6 +23,7 @@ obj-$(CONFIG_MMC_WBSD) += wbsd.o + obj-$(CONFIG_MMC_AU1X) += au1xmmc.o + obj-$(CONFIG_MMC_OMAP) += omap.o + obj-$(CONFIG_MMC_AT91RM9200) += at91_mci.o ++obj-$(CONFIG_MMC_ATMELMCI) += atmel-mci.o + + mmc_core-y := mmc.o mmc_queue.o mmc_sysfs.o + +Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.c 2007-01-15 10:31:55.000000000 +0100 +@@ -0,0 +1,738 @@ ++/* ++ * Atmel MultiMedia Card Interface driver ++ * ++ * Copyright (C) 2004-2006 Atmel 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 "atmel-mci.h" ++ ++#define DRIVER_NAME "mmci" ++ ++#define MCI_CMD_ERROR_FLAGS (MCI_BIT(RINDE) | MCI_BIT(RDIRE) | \ ++ MCI_BIT(RCRCE) | MCI_BIT(RENDE) | \ ++ MCI_BIT(RTOE)) ++#define MCI_DATA_ERROR_FLAGS (MCI_BIT(DCRCE) | MCI_BIT(DTOE) | \ ++ MCI_BIT(OVRE) | MCI_BIT(UNRE)) ++ ++enum { ++ EVENT_CMD_COMPLETE = 0, ++ EVENT_CMD_ERROR, ++ EVENT_DATA_COMPLETE, ++ EVENT_DATA_ERROR, ++ EVENT_STOP_SENT, ++ EVENT_STOP_COMPLETE, ++ EVENT_STOP_ERROR, ++ EVENT_DMA_ERROR, ++}; ++ ++struct atmel_mci_dma { ++ struct dma_request_sg req; ++ unsigned short rx_periph_id; ++ unsigned short tx_periph_id; ++ int blocks_left; ++}; ++ ++struct atmel_mci { ++ struct mmc_host *mmc; ++ void __iomem *regs; ++ struct atmel_mci_dma dma; ++ ++ struct mmc_request *mrq; ++ struct mmc_command *cmd; ++ struct mmc_data *data; ++ ++ u32 stop_cmdr; ++ u32 stop_iflags; ++ ++ struct tasklet_struct tasklet; ++ unsigned long pending_events; ++ unsigned long completed_events; ++ u32 error_status; ++ ++ unsigned long bus_hz; ++ unsigned long mapbase; ++ struct clk *mck; ++ struct platform_device *pdev; ++}; ++ ++/* Those printks take an awful lot of time... */ ++#ifndef DEBUG ++static unsigned int fmax = 15000000U; ++#else ++static unsigned int fmax = 1000000U; ++#endif ++module_param(fmax, uint, 0444); ++MODULE_PARM_DESC(fmax, "Max frequency in Hz of the MMC bus clock"); ++ ++static inline unsigned int ns_to_clocks(struct atmel_mci *host, ++ unsigned int ns) ++{ ++ return (ns * (host->bus_hz / 1000000) + 999) / 1000; ++} ++ ++static void atmci_set_timeout(struct atmel_mci *host, ++ struct mmc_data *data) ++{ ++ static unsigned dtomul_to_shift[] = { ++ 0, 4, 7, 8, 10, 12, 16, 20 ++ }; ++ unsigned timeout; ++ unsigned dtocyc, dtomul; ++ ++ timeout = ns_to_clocks(host, data->timeout_ns) + data->timeout_clks; ++ ++ for (dtomul = 0; dtomul < 8; dtomul++) { ++ unsigned shift = dtomul_to_shift[dtomul]; ++ dtocyc = (timeout + (1 << shift) - 1) >> shift; ++ if (dtocyc < 15) ++ break; ++ } ++ ++ if (dtomul >= 8) { ++ dtomul = 7; ++ dtocyc = 15; ++ } ++ ++ pr_debug("%s: setting timeout to %u cycles\n", ++ mmc_hostname(host->mmc), ++ dtocyc << dtomul_to_shift[dtomul]); ++ mci_writel(host, DTOR, (MCI_BF(DTOMUL, dtomul) ++ | MCI_BF(DTOCYC, dtocyc))); ++} ++ ++/* ++ * Return mask with interrupt flags to be handled for this command. ++ */ ++static u32 atmci_prepare_command(struct mmc_host *mmc, ++ struct mmc_command *cmd, ++ u32 *cmd_flags) ++{ ++ u32 cmdr; ++ u32 iflags; ++ ++ cmd->error = MMC_ERR_NONE; ++ ++ cmdr = 0; ++ BUG_ON(MCI_BFEXT(CMDNB, cmdr) != 0); ++ cmdr = MCI_BFINS(CMDNB, cmd->opcode, cmdr); ++ ++ if (cmd->flags & MMC_RSP_PRESENT) { ++ if (cmd->flags & MMC_RSP_136) ++ cmdr |= MCI_BF(RSPTYP, MCI_RSPTYP_136_BIT); ++ else ++ cmdr |= MCI_BF(RSPTYP, MCI_RSPTYP_48_BIT); ++ } ++ ++ /* ++ * This should really be MAXLAT_5 for CMD2 and ACMD41, but ++ * it's too difficult to determine whether this is an ACMD or ++ * not. Better make it 64. ++ */ ++ cmdr |= MCI_BIT(MAXLAT); ++ ++ if (mmc->ios.bus_mode == MMC_BUSMODE_OPENDRAIN) ++ cmdr |= MCI_BIT(OPDCMD); ++ ++ iflags = MCI_BIT(CMDRDY) | MCI_CMD_ERROR_FLAGS; ++ if (!(cmd->flags & MMC_RSP_CRC)) ++ iflags &= ~MCI_BIT(RCRCE); ++ ++ pr_debug("%s: cmd: op %02x arg %08x flags %08x, cmdflags %08lx\n", ++ mmc_hostname(mmc), cmd->opcode, cmd->arg, cmd->flags, ++ (unsigned long)cmdr); ++ ++ *cmd_flags = cmdr; ++ return iflags; ++} ++ ++static void atmci_start_command(struct atmel_mci *host, ++ struct mmc_command *cmd, ++ u32 cmd_flags) ++{ ++ WARN_ON(host->cmd); ++ host->cmd = cmd; ++ ++ mci_writel(host, ARGR, cmd->arg); ++ mci_writel(host, CMDR, cmd_flags); ++ ++ if (cmd->data) ++ dma_start_request(host->dma.req.req.dmac, ++ host->dma.req.req.channel); ++} ++ ++/* ++ * Returns a mask of flags to be set in the command register when the ++ * command to start the transfer is to be sent. ++ */ ++static u32 atmci_prepare_data(struct mmc_host *mmc, struct mmc_data *data) ++{ ++ struct atmel_mci *host = mmc_priv(mmc); ++ u32 cmd_flags; ++ ++ WARN_ON(host->data); ++ host->data = data; ++ ++ atmci_set_timeout(host, data); ++ mci_writel(host, BLKR, (MCI_BF(BCNT, data->blocks) ++ | MCI_BF(BLKLEN, data->blksz))); ++ host->dma.req.block_size = data->blksz; ++ ++ cmd_flags = MCI_BF(TRCMD, MCI_TRCMD_START_TRANS); ++ if (data->flags & MMC_DATA_STREAM) ++ cmd_flags |= MCI_BF(TRTYP, MCI_TRTYP_STREAM); ++ else if (data->blocks > 1) ++ cmd_flags |= MCI_BF(TRTYP, MCI_TRTYP_MULTI_BLOCK); ++ else ++ cmd_flags |= MCI_BF(TRTYP, MCI_TRTYP_BLOCK); ++ ++ if (data->flags & MMC_DATA_READ) { ++ cmd_flags |= MCI_BIT(TRDIR); ++ host->dma.req.nr_sg ++ = dma_map_sg(&host->pdev->dev, data->sg, ++ data->sg_len, DMA_FROM_DEVICE); ++ host->dma.req.periph_id = host->dma.rx_periph_id; ++ host->dma.req.direction = DMA_DIR_PERIPH_TO_MEM; ++ host->dma.req.data_reg = host->mapbase + MCI_RDR; ++ } else { ++ host->dma.req.nr_sg ++ = dma_map_sg(&host->pdev->dev, data->sg, ++ data->sg_len, DMA_TO_DEVICE); ++ host->dma.req.periph_id = host->dma.tx_periph_id; ++ host->dma.req.direction = DMA_DIR_MEM_TO_PERIPH; ++ host->dma.req.data_reg = host->mapbase + MCI_TDR; ++ } ++ host->dma.req.sg = data->sg; ++ host->dma.blocks_left = data->blocks; ++ ++ dma_prepare_request_sg(host->dma.req.req.dmac, &host->dma.req); ++ ++ return cmd_flags; ++} ++ ++static void atmci_request(struct mmc_host *mmc, struct mmc_request *mrq) ++{ ++ struct atmel_mci *host = mmc_priv(mmc); ++ struct mmc_data *data = mrq->data; ++ u32 iflags; ++ u32 cmdflags = 0; ++ ++ iflags = mci_readl(host, IMR); ++ if (iflags) ++ printk("WARNING: IMR=0x%08x\n", mci_readl(host, IMR)); ++ ++ WARN_ON(host->mrq != NULL); ++ host->mrq = mrq; ++ host->pending_events = 0; ++ host->completed_events = 0; ++ ++ iflags = atmci_prepare_command(mmc, mrq->cmd, &cmdflags); ++ ++ if (mrq->stop) { ++ BUG_ON(!data); ++ ++ host->stop_iflags = atmci_prepare_command(mmc, mrq->stop, ++ &host->stop_cmdr); ++ host->stop_cmdr |= MCI_BF(TRCMD, MCI_TRCMD_STOP_TRANS); ++ if (!(data->flags & MMC_DATA_WRITE)) ++ host->stop_cmdr |= MCI_BIT(TRDIR); ++ if (data->flags & MMC_DATA_STREAM) ++ host->stop_cmdr |= MCI_BF(TRTYP, MCI_TRTYP_STREAM); ++ else ++ host->stop_cmdr |= MCI_BF(TRTYP, MCI_TRTYP_MULTI_BLOCK); ++ } ++ if (data) { ++ cmdflags |= atmci_prepare_data(mmc, data); ++ iflags |= MCI_DATA_ERROR_FLAGS; ++ } ++ ++ atmci_start_command(host, mrq->cmd, cmdflags); ++ mci_writel(host, IER, iflags); ++} ++ ++static void atmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ++{ ++ struct atmel_mci *host = mmc_priv(mmc); ++ ++ if (ios->clock) { ++ u32 clkdiv; ++ ++ clkdiv = host->bus_hz / (2 * ios->clock) - 1; ++ if (clkdiv > 255) ++ clkdiv = 255; ++ mci_writel(host, MR, (clkdiv ++ | MCI_BIT(WRPROOF) ++ | MCI_BIT(RDPROOF))); ++ } ++ ++ switch (ios->bus_width) { ++ case MMC_BUS_WIDTH_1: ++ mci_writel(host, SDCR, 0); ++ break; ++ case MMC_BUS_WIDTH_4: ++ mci_writel(host, SDCR, MCI_BIT(SDCBUS)); ++ break; ++ } ++ ++ switch (ios->power_mode) { ++ case MMC_POWER_OFF: ++ mci_writel(host, CR, MCI_BIT(MCIDIS)); ++ break; ++ case MMC_POWER_UP: ++ mci_writel(host, CR, MCI_BIT(SWRST)); ++ break; ++ case MMC_POWER_ON: ++ mci_writel(host, CR, MCI_BIT(MCIEN)); ++ break; ++ } ++} ++ ++static struct mmc_host_ops atmci_ops = { ++ .request = atmci_request, ++ .set_ios = atmci_set_ios, ++}; ++ ++static void atmci_request_end(struct mmc_host *mmc, struct mmc_request *mrq) ++{ ++ struct atmel_mci *host = mmc_priv(mmc); ++ ++ WARN_ON(host->cmd || host->data); ++ host->mrq = NULL; ++ ++ mmc_request_done(mmc, mrq); ++} ++ ++static void send_stop_cmd(struct mmc_host *mmc, struct mmc_data *data, ++ u32 flags) ++{ ++ struct atmel_mci *host = mmc_priv(mmc); ++ ++ atmci_start_command(host, data->stop, host->stop_cmdr | flags); ++ mci_writel(host, IER, host->stop_iflags); ++} ++ ++static void atmci_data_complete(struct atmel_mci *host, struct mmc_data *data) ++{ ++ host->data = NULL; ++ dma_unmap_sg(&host->pdev->dev, data->sg, host->dma.req.nr_sg, ++ ((data->flags & MMC_DATA_WRITE) ++ ? DMA_TO_DEVICE : DMA_FROM_DEVICE)); ++ ++ /* ++ * Data might complete before command for very short transfers ++ * (like READ_SCR) ++ */ ++ if (test_bit(EVENT_CMD_COMPLETE, &host->completed_events) ++ && (!data->stop ++ || test_bit(EVENT_STOP_COMPLETE, &host->completed_events))) ++ atmci_request_end(host->mmc, data->mrq); ++} ++ ++static void atmci_command_error(struct mmc_host *mmc, ++ struct mmc_command *cmd, ++ u32 status) ++{ ++ pr_debug("%s: command error: status=0x%08x\n", ++ mmc_hostname(mmc), status); ++ ++ if (status & MCI_BIT(RTOE)) ++ cmd->error = MMC_ERR_TIMEOUT; ++ else if (status & MCI_BIT(RCRCE)) ++ cmd->error = MMC_ERR_BADCRC; ++ else ++ cmd->error = MMC_ERR_FAILED; ++} ++ ++static void atmci_tasklet_func(unsigned long priv) ++{ ++ struct mmc_host *mmc = (struct mmc_host *)priv; ++ struct atmel_mci *host = mmc_priv(mmc); ++ struct mmc_request *mrq = host->mrq; ++ struct mmc_data *data = host->data; ++ ++ pr_debug("atmci_tasklet: pending/completed/mask %lx/%lx/%x\n", ++ host->pending_events, host->completed_events, ++ mci_readl(host, IMR)); ++ ++ if (test_and_clear_bit(EVENT_CMD_ERROR, &host->pending_events)) { ++ struct mmc_command *cmd; ++ ++ set_bit(EVENT_CMD_ERROR, &host->completed_events); ++ clear_bit(EVENT_CMD_COMPLETE, &host->pending_events); ++ cmd = host->mrq->cmd; ++ ++ if (cmd->data) { ++ dma_stop_request(host->dma.req.req.dmac, ++ host->dma.req.req.channel); ++ host->data = NULL; ++ } ++ ++ atmci_command_error(mmc, cmd, host->error_status); ++ atmci_request_end(mmc, cmd->mrq); ++ } ++ if (test_and_clear_bit(EVENT_STOP_ERROR, &host->pending_events)) { ++ set_bit(EVENT_STOP_ERROR, &host->completed_events); ++ clear_bit(EVENT_STOP_COMPLETE, &host->pending_events); ++ atmci_command_error(mmc, host->mrq->stop, ++ host->error_status); ++ if (!host->data) ++ atmci_request_end(mmc, host->mrq); ++ } ++ if (test_and_clear_bit(EVENT_CMD_COMPLETE, &host->pending_events)) { ++ set_bit(EVENT_CMD_COMPLETE, &host->completed_events); ++ if (!mrq->data ++ || test_bit(EVENT_DATA_COMPLETE, &host->completed_events)) ++ atmci_request_end(mmc, mrq); ++ } ++ if (test_and_clear_bit(EVENT_STOP_COMPLETE, &host->pending_events)) { ++ set_bit(EVENT_STOP_COMPLETE, &host->completed_events); ++ if (test_bit(EVENT_DATA_COMPLETE, &host->completed_events)) ++ atmci_request_end(mmc, mrq); ++ } ++ if (test_and_clear_bit(EVENT_DMA_ERROR, &host->pending_events)) { ++ set_bit(EVENT_DMA_ERROR, &host->completed_events); ++ clear_bit(EVENT_DATA_COMPLETE, &host->pending_events); ++ ++ /* DMA controller got bus error => invalid address */ ++ data->error = MMC_ERR_INVALID; ++ ++ printk(KERN_DEBUG "%s: dma error after %u bytes xfered\n", ++ mmc_hostname(mmc), host->data->bytes_xfered); ++ ++ if (data->stop ++ && !test_and_set_bit(EVENT_STOP_SENT, ++ &host->completed_events)) ++ /* TODO: Check if card is still present */ ++ send_stop_cmd(host->mmc, data, 0); ++ ++ atmci_data_complete(host, data); ++ } ++ if (test_and_clear_bit(EVENT_DATA_ERROR, &host->pending_events)) { ++ u32 status = host->error_status; ++ ++ set_bit(EVENT_DATA_ERROR, &host->completed_events); ++ clear_bit(EVENT_DATA_COMPLETE, &host->pending_events); ++ ++ dma_stop_request(host->dma.req.req.dmac, ++ host->dma.req.req.channel); ++ ++ printk(KERN_DEBUG "%s: data error: status=0x%08x\n", ++ mmc_hostname(host->mmc), status); ++ ++ if (status & MCI_BIT(DCRCE)) { ++ printk(KERN_DEBUG "%s: Data CRC error\n", ++ mmc_hostname(host->mmc)); ++ data->error = MMC_ERR_BADCRC; ++ } else if (status & MCI_BIT(DTOE)) { ++ printk(KERN_DEBUG "%s: Data Timeout error\n", ++ mmc_hostname(host->mmc)); ++ data->error = MMC_ERR_TIMEOUT; ++ } else { ++ printk(KERN_DEBUG "%s: Data FIFO error\n", ++ mmc_hostname(host->mmc)); ++ data->error = MMC_ERR_FIFO; ++ } ++ printk(KERN_DEBUG "%s: Bytes xfered: %u\n", ++ mmc_hostname(host->mmc), data->bytes_xfered); ++ ++ if (data->stop ++ && !test_and_set_bit(EVENT_STOP_SENT, &host->completed_events)) ++ /* TODO: Check if card is still present */ ++ send_stop_cmd(host->mmc, data, 0); ++ ++ atmci_data_complete(host, data); ++ } ++ if (test_and_clear_bit(EVENT_DATA_COMPLETE, &host->pending_events)) { ++ set_bit(EVENT_DATA_COMPLETE, &host->completed_events); ++ data->bytes_xfered = data->blocks * data->blksz; ++ atmci_data_complete(host, data); ++ } ++} ++ ++static void atmci_cmd_interrupt(struct mmc_host *mmc, u32 status) ++{ ++ struct atmel_mci *host = mmc_priv(mmc); ++ struct mmc_command *cmd = host->cmd; ++ ++ /* ++ * Read the response now so that we're free to send a new ++ * command immediately. ++ */ ++ cmd->resp[0] = mci_readl(host, RSPR); ++ cmd->resp[1] = mci_readl(host, RSPR); ++ cmd->resp[2] = mci_readl(host, RSPR); ++ cmd->resp[3] = mci_readl(host, RSPR); ++ ++ mci_writel(host, IDR, MCI_BIT(CMDRDY) | MCI_CMD_ERROR_FLAGS); ++ host->cmd = NULL; ++ ++ if (test_bit(EVENT_STOP_SENT, &host->completed_events)) ++ set_bit(EVENT_STOP_COMPLETE, &host->pending_events); ++ else ++ set_bit(EVENT_CMD_COMPLETE, &host->pending_events); ++ ++ tasklet_schedule(&host->tasklet); ++} ++ ++static void atmci_xfer_complete(struct dma_request *_req) ++{ ++ struct dma_request_sg *req = to_dma_request_sg(_req); ++ struct atmel_mci_dma *dma; ++ struct atmel_mci *host; ++ struct mmc_data *data; ++ ++ dma = container_of(req, struct atmel_mci_dma, req); ++ host = container_of(dma, struct atmel_mci, dma); ++ data = host->data; ++ ++ if (data->stop && !test_and_set_bit(EVENT_STOP_SENT, ++ &host->completed_events)) ++ send_stop_cmd(host->mmc, data, 0); ++ ++ if (data->flags & MMC_DATA_READ) { ++ mci_writel(host, IDR, MCI_DATA_ERROR_FLAGS); ++ set_bit(EVENT_DATA_COMPLETE, &host->pending_events); ++ tasklet_schedule(&host->tasklet); ++ } else { ++ /* ++ * For the WRITE case, wait for NOTBUSY. This function ++ * is called when everything has been written to the ++ * controller, not when the card is done programming. ++ */ ++ mci_writel(host, IER, MCI_BIT(NOTBUSY)); ++ } ++} ++ ++static void atmci_dma_error(struct dma_request *_req) ++{ ++ struct dma_request_sg *req = to_dma_request_sg(_req); ++ struct atmel_mci_dma *dma; ++ struct atmel_mci *host; ++ ++ dma = container_of(req, struct atmel_mci_dma, req); ++ host = container_of(dma, struct atmel_mci, dma); ++ ++ mci_writel(host, IDR, (MCI_BIT(NOTBUSY) ++ | MCI_DATA_ERROR_FLAGS)); ++ ++ set_bit(EVENT_DMA_ERROR, &host->pending_events); ++ tasklet_schedule(&host->tasklet); ++} ++ ++static irqreturn_t atmci_interrupt(int irq, void *dev_id, ++ struct pt_regs *regs) ++{ ++ struct mmc_host *mmc = dev_id; ++ struct atmel_mci *host = mmc_priv(mmc); ++ u32 status, mask, pending; ++ ++ spin_lock(&mmc->lock); ++ ++ status = mci_readl(host, SR); ++ mask = mci_readl(host, IMR); ++ pending = status & mask; ++ ++ do { ++ if (pending & MCI_CMD_ERROR_FLAGS) { ++ mci_writel(host, IDR, (MCI_BIT(CMDRDY) ++ | MCI_BIT(NOTBUSY) ++ | MCI_CMD_ERROR_FLAGS ++ | MCI_DATA_ERROR_FLAGS)); ++ host->error_status = status; ++ host->cmd = NULL; ++ if (test_bit(EVENT_STOP_SENT, &host->completed_events)) ++ set_bit(EVENT_STOP_ERROR, &host->pending_events); ++ else ++ set_bit(EVENT_CMD_ERROR, &host->pending_events); ++ tasklet_schedule(&host->tasklet); ++ break; ++ } ++ if (pending & MCI_DATA_ERROR_FLAGS) { ++ mci_writel(host, IDR, (MCI_BIT(NOTBUSY) ++ | MCI_DATA_ERROR_FLAGS)); ++ host->error_status = status; ++ set_bit(EVENT_DATA_ERROR, &host->pending_events); ++ tasklet_schedule(&host->tasklet); ++ break; ++ } ++ if (pending & MCI_BIT(CMDRDY)) ++ atmci_cmd_interrupt(mmc, status); ++ if (pending & MCI_BIT(NOTBUSY)) { ++ mci_writel(host, IDR, (MCI_BIT(NOTBUSY) ++ | MCI_DATA_ERROR_FLAGS)); ++ set_bit(EVENT_DATA_COMPLETE, &host->pending_events); ++ tasklet_schedule(&host->tasklet); ++ } ++ ++ status = mci_readl(host, SR); ++ mask = mci_readl(host, IMR); ++ pending = status & mask; ++ } while (pending); ++ ++ spin_unlock(&mmc->lock); ++ ++ return IRQ_HANDLED; ++} ++ ++static int __devinit atmci_probe(struct platform_device *pdev) ++{ ++ struct atmel_mci *host; ++ struct mmc_host *mmc; ++ struct resource *regs; ++ int irq; ++ int ret; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) ++ return -ENXIO; ++ irq = platform_get_irq(pdev, 0); ++ if (irq < 0) ++ return irq; ++ ++ mmc = mmc_alloc_host(sizeof(struct atmel_mci), &pdev->dev); ++ if (!mmc) ++ return -ENOMEM; ++ ++ host = mmc_priv(mmc); ++ host->pdev = pdev; ++ host->mmc = mmc; ++ ++ host->mck = clk_get(&pdev->dev, "mck"); ++ if (IS_ERR(host->mck)) { ++ ret = PTR_ERR(host->mck); ++ goto out_free_host; ++ } ++ clk_enable(host->mck); ++ ++ ret = -ENOMEM; ++ host->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!host->regs) ++ goto out_disable_clk; ++ ++ host->bus_hz = clk_get_rate(host->mck); ++ host->mapbase = regs->start; ++ ++ mmc->ops = &atmci_ops; ++ mmc->f_min = (host->bus_hz + 511) / 512; ++ mmc->f_max = min((unsigned int)(host->bus_hz / 2), fmax); ++ mmc->ocr_avail = 0x00100000; ++ mmc->caps |= MMC_CAP_4_BIT_DATA; ++ ++ tasklet_init(&host->tasklet, atmci_tasklet_func, (unsigned long)mmc); ++ ++ ret = request_irq(irq, atmci_interrupt, 0, "mmci", mmc); ++ if (ret) ++ goto out_unmap; ++ ++ /* TODO: Get this information from platform data */ ++ ret = -ENOMEM; ++ host->dma.req.req.dmac = find_dma_controller(0); ++ if (!host->dma.req.req.dmac) { ++ printk(KERN_ERR ++ "mmci: No DMA controller available, aborting\n"); ++ goto out_free_irq; ++ } ++ ret = dma_alloc_channel(host->dma.req.req.dmac); ++ if (ret < 0) { ++ printk(KERN_ERR ++ "mmci: Unable to allocate DMA channel, aborting\n"); ++ goto out_free_irq; ++ } ++ host->dma.req.req.channel = ret; ++ host->dma.req.width = DMA_WIDTH_32BIT; ++ host->dma.req.req.xfer_complete = atmci_xfer_complete; ++ host->dma.req.req.block_complete = NULL; // atmci_block_complete; ++ host->dma.req.req.error = atmci_dma_error; ++ host->dma.rx_periph_id = 0; ++ host->dma.tx_periph_id = 1; ++ ++ mci_writel(host, CR, MCI_BIT(SWRST)); ++ mci_writel(host, IDR, ~0UL); ++ mci_writel(host, CR, MCI_BIT(MCIEN)); ++ ++ platform_set_drvdata(pdev, host); ++ ++ mmc_add_host(mmc); ++ ++ printk(KERN_INFO "%s: Atmel MCI controller at 0x%08lx irq %d\n", ++ mmc_hostname(mmc), host->mapbase, irq); ++ ++ return 0; ++ ++out_free_irq: ++ free_irq(irq, mmc); ++out_unmap: ++ iounmap(host->regs); ++out_disable_clk: ++ clk_disable(host->mck); ++ clk_put(host->mck); ++out_free_host: ++ mmc_free_host(mmc); ++ return ret; ++} ++ ++static int __devexit atmci_remove(struct platform_device *pdev) ++{ ++ struct atmel_mci *host = platform_get_drvdata(pdev); ++ ++ platform_set_drvdata(pdev, NULL); ++ ++ if (host) { ++ mmc_remove_host(host->mmc); ++ ++ mci_writel(host, IDR, ~0UL); ++ mci_writel(host, CR, MCI_BIT(MCIDIS)); ++ mci_readl(host, SR); ++ ++ free_irq(platform_get_irq(pdev, 0), host->mmc); ++ iounmap(host->regs); ++ ++ clk_disable(host->mck); ++ clk_put(host->mck); ++ ++ mmc_free_host(host->mmc); ++ } ++ return 0; ++} ++ ++static struct platform_driver atmci_driver = { ++ .probe = atmci_probe, ++ .remove = __devexit_p(atmci_remove), ++ .driver = { ++ .name = DRIVER_NAME, ++ }, ++}; ++ ++static int __init atmci_init(void) ++{ ++ return platform_driver_register(&atmci_driver); ++} ++ ++static void __exit atmci_exit(void) ++{ ++ platform_driver_unregister(&atmci_driver); ++} ++ ++module_init(atmci_init); ++module_exit(atmci_exit); ++ ++MODULE_DESCRIPTION("Atmel Multimedia Card Interface driver"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.h 2007-01-15 10:31:36.000000000 +0100 +@@ -0,0 +1,192 @@ ++/* ++ * Atmel MultiMedia Card Interface driver ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __DRIVERS_MMC_ATMEL_MCI_H__ ++#define __DRIVERS_MMC_ATMEL_MCI_H__ ++ ++/* MCI register offsets */ ++#define MCI_CR 0x0000 ++#define MCI_MR 0x0004 ++#define MCI_DTOR 0x0008 ++#define MCI_SDCR 0x000c ++#define MCI_ARGR 0x0010 ++#define MCI_CMDR 0x0014 ++#define MCI_BLKR 0x0018 ++#define MCI_RSPR 0x0020 ++#define MCI_RSPR1 0x0024 ++#define MCI_RSPR2 0x0028 ++#define MCI_RSPR3 0x002c ++#define MCI_RDR 0x0030 ++#define MCI_TDR 0x0034 ++#define MCI_SR 0x0040 ++#define MCI_IER 0x0044 ++#define MCI_IDR 0x0048 ++#define MCI_IMR 0x004c ++ ++/* Bitfields in CR */ ++#define MCI_MCIEN_OFFSET 0 ++#define MCI_MCIEN_SIZE 1 ++#define MCI_MCIDIS_OFFSET 1 ++#define MCI_MCIDIS_SIZE 1 ++#define MCI_PWSEN_OFFSET 2 ++#define MCI_PWSEN_SIZE 1 ++#define MCI_PWSDIS_OFFSET 3 ++#define MCI_PWSDIS_SIZE 1 ++#define MCI_SWRST_OFFSET 7 ++#define MCI_SWRST_SIZE 1 ++ ++/* Bitfields in MR */ ++#define MCI_CLKDIV_OFFSET 0 ++#define MCI_CLKDIV_SIZE 8 ++#define MCI_PWSDIV_OFFSET 8 ++#define MCI_PWSDIV_SIZE 3 ++#define MCI_RDPROOF_OFFSET 11 ++#define MCI_RDPROOF_SIZE 1 ++#define MCI_WRPROOF_OFFSET 12 ++#define MCI_WRPROOF_SIZE 1 ++#define MCI_DMAPADV_OFFSET 14 ++#define MCI_DMAPADV_SIZE 1 ++#define MCI_BLKLEN_OFFSET 16 ++#define MCI_BLKLEN_SIZE 16 ++ ++/* Bitfields in DTOR */ ++#define MCI_DTOCYC_OFFSET 0 ++#define MCI_DTOCYC_SIZE 4 ++#define MCI_DTOMUL_OFFSET 4 ++#define MCI_DTOMUL_SIZE 3 ++ ++/* Bitfields in SDCR */ ++#define MCI_SDCSEL_OFFSET 0 ++#define MCI_SDCSEL_SIZE 4 ++#define MCI_SDCBUS_OFFSET 7 ++#define MCI_SDCBUS_SIZE 1 ++ ++/* Bitfields in ARGR */ ++#define MCI_ARG_OFFSET 0 ++#define MCI_ARG_SIZE 32 ++ ++/* Bitfields in CMDR */ ++#define MCI_CMDNB_OFFSET 0 ++#define MCI_CMDNB_SIZE 6 ++#define MCI_RSPTYP_OFFSET 6 ++#define MCI_RSPTYP_SIZE 2 ++#define MCI_SPCMD_OFFSET 8 ++#define MCI_SPCMD_SIZE 3 ++#define MCI_OPDCMD_OFFSET 11 ++#define MCI_OPDCMD_SIZE 1 ++#define MCI_MAXLAT_OFFSET 12 ++#define MCI_MAXLAT_SIZE 1 ++#define MCI_TRCMD_OFFSET 16 ++#define MCI_TRCMD_SIZE 2 ++#define MCI_TRDIR_OFFSET 18 ++#define MCI_TRDIR_SIZE 1 ++#define MCI_TRTYP_OFFSET 19 ++#define MCI_TRTYP_SIZE 2 ++ ++/* Bitfields in BLKR */ ++#define MCI_BCNT_OFFSET 0 ++#define MCI_BCNT_SIZE 16 ++ ++/* Bitfields in RSPRn */ ++#define MCI_RSP_OFFSET 0 ++#define MCI_RSP_SIZE 32 ++ ++/* Bitfields in SR/IER/IDR/IMR */ ++#define MCI_CMDRDY_OFFSET 0 ++#define MCI_CMDRDY_SIZE 1 ++#define MCI_RXRDY_OFFSET 1 ++#define MCI_RXRDY_SIZE 1 ++#define MCI_TXRDY_OFFSET 2 ++#define MCI_TXRDY_SIZE 1 ++#define MCI_BLKE_OFFSET 3 ++#define MCI_BLKE_SIZE 1 ++#define MCI_DTIP_OFFSET 4 ++#define MCI_DTIP_SIZE 1 ++#define MCI_NOTBUSY_OFFSET 5 ++#define MCI_NOTBUSY_SIZE 1 ++#define MCI_ENDRX_OFFSET 6 ++#define MCI_ENDRX_SIZE 1 ++#define MCI_ENDTX_OFFSET 7 ++#define MCI_ENDTX_SIZE 1 ++#define MCI_RXBUFF_OFFSET 14 ++#define MCI_RXBUFF_SIZE 1 ++#define MCI_TXBUFE_OFFSET 15 ++#define MCI_TXBUFE_SIZE 1 ++#define MCI_RINDE_OFFSET 16 ++#define MCI_RINDE_SIZE 1 ++#define MCI_RDIRE_OFFSET 17 ++#define MCI_RDIRE_SIZE 1 ++#define MCI_RCRCE_OFFSET 18 ++#define MCI_RCRCE_SIZE 1 ++#define MCI_RENDE_OFFSET 19 ++#define MCI_RENDE_SIZE 1 ++#define MCI_RTOE_OFFSET 20 ++#define MCI_RTOE_SIZE 1 ++#define MCI_DCRCE_OFFSET 21 ++#define MCI_DCRCE_SIZE 1 ++#define MCI_DTOE_OFFSET 22 ++#define MCI_DTOE_SIZE 1 ++#define MCI_OVRE_OFFSET 30 ++#define MCI_OVRE_SIZE 1 ++#define MCI_UNRE_OFFSET 31 ++#define MCI_UNRE_SIZE 1 ++ ++/* Constants for DTOMUL */ ++#define MCI_DTOMUL_1_CYCLE 0 ++#define MCI_DTOMUL_16_CYCLES 1 ++#define MCI_DTOMUL_128_CYCLES 2 ++#define MCI_DTOMUL_256_CYCLES 3 ++#define MCI_DTOMUL_1024_CYCLES 4 ++#define MCI_DTOMUL_4096_CYCLES 5 ++#define MCI_DTOMUL_65536_CYCLES 6 ++#define MCI_DTOMUL_1048576_CYCLES 7 ++ ++/* Constants for RSPTYP */ ++#define MCI_RSPTYP_NO_RESP 0 ++#define MCI_RSPTYP_48_BIT 1 ++#define MCI_RSPTYP_136_BIT 2 ++ ++/* Constants for SPCMD */ ++#define MCI_SPCMD_NO_SPEC_CMD 0 ++#define MCI_SPCMD_INIT_CMD 1 ++#define MCI_SPCMD_SYNC_CMD 2 ++#define MCI_SPCMD_INT_CMD 4 ++#define MCI_SPCMD_INT_RESP 5 ++ ++/* Constants for TRCMD */ ++#define MCI_TRCMD_NO_TRANS 0 ++#define MCI_TRCMD_START_TRANS 1 ++#define MCI_TRCMD_STOP_TRANS 2 ++ ++/* Constants for TRTYP */ ++#define MCI_TRTYP_BLOCK 0 ++#define MCI_TRTYP_MULTI_BLOCK 1 ++#define MCI_TRTYP_STREAM 2 ++ ++/* Bit manipulation macros */ ++#define MCI_BIT(name) \ ++ (1 << MCI_##name##_OFFSET) ++#define MCI_BF(name,value) \ ++ (((value) & ((1 << MCI_##name##_SIZE) - 1)) \ ++ << MCI_##name##_OFFSET) ++#define MCI_BFEXT(name,value) \ ++ (((value) >> MCI_##name##_OFFSET) \ ++ & ((1 << MCI_##name##_SIZE) - 1)) ++#define MCI_BFINS(name,value,old) \ ++ (((old) & ~(((1 << MCI_##name##_SIZE) - 1) \ ++ << MCI_##name##_OFFSET)) \ ++ | MCI_BF(name,value)) ++ ++/* Register access macros */ ++#define mci_readl(port,reg) \ ++ __raw_readl((port)->regs + MCI_##reg) ++#define mci_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + MCI_##reg) ++ ++#endif /* __DRIVERS_MMC_ATMEL_MCI_H__ */ diff --git a/packages/linux/linux-2.6.18/atmel-spi-master-driver.patch b/packages/linux/linux-2.6.18/atmel-spi-master-driver.patch new file mode 100644 index 0000000000..d45f3c50c9 --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-spi-master-driver.patch @@ -0,0 +1,990 @@ +From: Haavard Skinnemoen + +On Mon, 5 Jun 2006 06:49:52 -0700 +David Brownell wrote: + +> Here's an updated version that compiles and partially runs +> in the at91 world. If the avr32 code would switch to standard +> APIs like and it should +> behave there too, somewhat. Ignore the extra debug crap. + +Here's another update which includes most of the fixes in Dave's +version and which has been verified on my STK1000 board. + +I had some trouble getting your version to turn on the display +correctly, so I've reworked it as a series of smaller changes to figure +out what broke it. You should probably verify that I didn't leave out +anything important. + +Also, I didn't find CONFIG_SPI_AT91_MANUAL_CS defined anywhere, nor did +I find cpu_is_at91sam9261() so I left out those changes. + +Can any of you test this on AT91 somehow? I'm not completely up to +speed on my AT91RM9200-EK yet. Anyone else I should Cc? + +I can send you individual patches if you want. Here's the shortlog: + +Atmel SPI Driver +spi_atmel: convert to platform_device framework +spi_atmel: fix broken parameter validation in setup() and transfer() +spi_atmel: Revert core workaround for max_speed_hz=0 +spi_atmel: Divide len by two if bits_per_word > 8 +spi_atmel: Enable ENDRX interrupt when rx_buf is set +spi_atmel: Fix incorrect locking in interrupt routine +spi_atmel: Line up variable declarations +spi_atmel: Add some FIXMEs from David Brownell's patch +spi_atmel: Header file cleanup +spi_atmel: Introduce new_1 flag and use in sck speed setting +spi_atmel: Move SPI_ATMEL above SPI_BITBANG +Make SPI_ATMEL available to AT91 + + +>>From nobody Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Thu Apr 6 10:33:21 2006 +0200 +Subject: [PATCH] Atmel SPI Driver + +SPI master driver for the Atmel AT32/AT91 SPI Controller. + +UPDATED: + - against 2.6.17 + latest kernel.org GIT + - "at32_device" stuff removed from core of driver + - add platform_device glue, so at91 compiles + - use clock framework + - understand "old" (rm9200) vs "new" (sam9261, ap7000) silicon + (only different scbr definition, not csaat etc.) + - remove bogus spi core tweaks + - various fixes and cleanups + +The following changes from atmel-spi-driver-3.patch have been dropped: + - CONFIG_SPI_AT91_MANUAL_CS stuff. I can't find the symbol + anywhere + - DMA IRQ optimization by unmasking TXEMPTY when starting xfer + - All the code setting CSAAT. + +From: Haavard Skinnemoen + +On Mon, 5 Jun 2006 06:49:52 -0700 +David Brownell wrote: + +> Here's an updated version that compiles and partially runs +> in the at91 world. If the avr32 code would switch to standard +> APIs like and it should +> behave there too, somewhat. Ignore the extra debug crap. + +Here's another update which includes most of the fixes in Dave's +version and which has been verified on my STK1000 board. + +I had some trouble getting your version to turn on the display +correctly, so I've reworked it as a series of smaller changes to figure +out what broke it. You should probably verify that I didn't leave out +anything important. + +Also, I didn't find CONFIG_SPI_AT91_MANUAL_CS defined anywhere, nor did +I find cpu_is_at91sam9261() so I left out those changes. + +Can any of you test this on AT91 somehow? I'm not completely up to +speed on my AT91RM9200-EK yet. Anyone else I should Cc? + +I can send you individual patches if you want. Here's the shortlog: + +Atmel SPI Driver +spi_atmel: convert to platform_device framework +spi_atmel: fix broken parameter validation in setup() and transfer() +spi_atmel: Revert core workaround for max_speed_hz=0 +spi_atmel: Divide len by two if bits_per_word > 8 +spi_atmel: Enable ENDRX interrupt when rx_buf is set +spi_atmel: Fix incorrect locking in interrupt routine +spi_atmel: Line up variable declarations +spi_atmel: Add some FIXMEs from David Brownell's patch +spi_atmel: Header file cleanup +spi_atmel: Introduce new_1 flag and use in sck speed setting +spi_atmel: Move SPI_ATMEL above SPI_BITBANG +Make SPI_ATMEL available to AT91 + + +>>From nobody Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Thu Apr 6 10:33:21 2006 +0200 +Subject: [PATCH] Atmel SPI Driver + +SPI master driver for the Atmel AT32/AT91 SPI Controller. + +UPDATED: + - against 2.6.17 + latest kernel.org GIT + - "at32_device" stuff removed from core of driver + - add platform_device glue, so at91 compiles + - use clock framework + - understand "old" (rm9200) vs "new" (sam9261, ap7000) silicon + (only different scbr definition, not csaat etc.) + - remove bogus spi core tweaks + - various fixes and cleanups + +The following changes from atmel-spi-driver-3.patch have been dropped: + - CONFIG_SPI_AT91_MANUAL_CS stuff. I can't find the symbol + anywhere + - DMA IRQ optimization by unmasking TXEMPTY when starting xfer + - All the code setting CSAAT. + +--- + drivers/spi/Kconfig | 7 + drivers/spi/Makefile | 1 + drivers/spi/atmel_spi.c | 648 ++++++++++++++++++++++++++++++++++++++++++++++++ + drivers/spi/atmel_spi.h | 167 ++++++++++++ + 4 files changed, 823 insertions(+) + +Index: linux-2.6.18-avr32/drivers/spi/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/spi/Kconfig 2006-11-29 16:55:10.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/spi/Kconfig 2006-11-29 16:55:59.000000000 +0100 +@@ -51,6 +51,13 @@ config SPI_MASTER + comment "SPI Master Controller Drivers" + depends on SPI_MASTER + ++config SPI_ATMEL ++ tristate "Atmel SPI Controller" ++ depends on (ARCH_AT91 || AVR32) && SPI_MASTER ++ help ++ This selects a driver for the Atmel SPI Controller, present on ++ many AT32 (AVR32) and AT91 (ARM) chips. ++ + config SPI_BITBANG + tristate "Bitbanging SPI master" + depends on SPI_MASTER && EXPERIMENTAL +Index: linux-2.6.18-avr32/drivers/spi/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/spi/Makefile 2006-11-29 16:55:10.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/spi/Makefile 2006-11-29 16:55:59.000000000 +0100 +@@ -12,6 +12,7 @@ obj-$(CONFIG_SPI_MASTER) += spi.o + + # SPI master controller drivers (bus) + obj-$(CONFIG_SPI_BITBANG) += spi_bitbang.o ++obj-$(CONFIG_SPI_ATMEL) += atmel_spi.o + obj-$(CONFIG_SPI_BUTTERFLY) += spi_butterfly.o + obj-$(CONFIG_SPI_PXA2XX) += pxa2xx_spi.o + obj-$(CONFIG_SPI_MPC83xx) += spi_mpc83xx.o +Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.c 2006-11-29 17:10:19.000000000 +0100 +@@ -0,0 +1,648 @@ ++/* ++ * Driver for Atmel AT32 and AT91 SPI Controllers ++ * ++ * Copyright (C) 2006 Atmel 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 "atmel_spi.h" ++ ++/* ++ * The core SPI transfer engine just talks to a register bank to set up ++ * DMA transfers; transfer queue progress is driven by IRQs. The clock ++ * framework provides the base clock, subdivided for each spi_device. ++ * ++ * Newer controllers, marked with "new_1" flag, have: ++ * - CR.LASTXFER ++ * - SPI_MR.DIV32 may become FDIV or must-be-zero (here: always zero) ++ * - SPI_SR.TXEMPTY, SPI_SR.NSSR (and corresponding irqs) ++ * - SPI_CSRx.CSAAT ++ * - SPI_CSRx.SBCR allows faster clocking ++ */ ++struct atmel_spi { ++ spinlock_t lock; ++ ++ void __iomem *regs; ++ int irq; ++ struct clk *clk; ++ struct platform_device *pdev; ++ unsigned new_1:1; ++ ++ u8 stopping; ++ struct list_head queue; ++ struct spi_transfer *current_transfer; ++ unsigned long remaining_bytes; ++ ++ void *buffer; ++ dma_addr_t buffer_dma; ++}; ++ ++#define BUFFER_SIZE PAGE_SIZE ++#define INVALID_DMA_ADDRESS 0xffffffff ++ ++/* ++ * Earlier SPI controllers (e.g. on at91rm9200) have a design bug whereby ++ * they assume that spi slave device state will not change on deselect, so ++ * that automagic deselection is OK. Not so! Workaround uses nCSx pins ++ * as GPIOs; or newer controllers have CSAAT and friends. ++ * ++ * Since the CSAAT functionality is a bit weird on newer controllers ++ * as well, we use GPIO to control nCSx pins on all controllers. ++ */ ++ ++static inline void cs_activate(struct spi_device *spi) ++{ ++ unsigned gpio = (unsigned) spi->controller_data; ++ ++ dev_dbg(&spi->dev, "activate %u\n", gpio); ++ gpio_set_value(gpio, 0); ++} ++ ++static inline void cs_deactivate(struct spi_device *spi) ++{ ++ unsigned gpio = (unsigned) spi->controller_data; ++ ++ dev_dbg(&spi->dev, "DEactivate %u\n", gpio); ++ gpio_set_value(gpio, 1); ++} ++ ++/* ++ * Submit next transfer for DMA. ++ * lock is held, spi irq is blocked ++ */ ++static void atmel_spi_next_xfer(struct spi_master *master, ++ struct spi_message *msg) ++{ ++ struct atmel_spi *as = spi_master_get_devdata(master); ++ struct spi_transfer *xfer; ++ u32 imr = 0; ++ u32 len; ++ dma_addr_t tx_dma, rx_dma; ++ ++ xfer = as->current_transfer; ++ if (!xfer || as->remaining_bytes == 0) { ++ if (xfer) ++ xfer = list_entry(xfer->transfer_list.next, ++ struct spi_transfer, transfer_list); ++ else ++ xfer = list_entry(msg->transfers.next, struct spi_transfer, ++ transfer_list); ++ as->remaining_bytes = xfer->len; ++ as->current_transfer = xfer; ++ } ++ ++ len = as->remaining_bytes; ++ ++ tx_dma = xfer->tx_dma; ++ rx_dma = xfer->rx_dma; ++ ++ if (rx_dma == INVALID_DMA_ADDRESS) { ++ rx_dma = as->buffer_dma; ++ if (len > BUFFER_SIZE) ++ len = BUFFER_SIZE; ++ } ++ if (tx_dma == INVALID_DMA_ADDRESS) { ++ if (xfer->tx_buf) { ++ tx_dma = as->buffer_dma; ++ if (len > BUFFER_SIZE) ++ len = BUFFER_SIZE; ++ memcpy(as->buffer, xfer->tx_buf, len); ++ dma_sync_single_for_device(&as->pdev->dev, ++ as->buffer_dma, len, ++ DMA_TO_DEVICE); ++ } else { ++ /* Send undefined data; rx_dma is handy */ ++ tx_dma = rx_dma; ++ } ++ } ++ ++ spi_writel(as, RPR, rx_dma); ++ spi_writel(as, TPR, tx_dma); ++ ++ as->remaining_bytes -= len; ++ if (msg->spi->bits_per_word > 8) ++ len >>= 1; ++ ++ /* REVISIT: when xfer->delay_usecs == 0, the PDC "next transfer" ++ * mechanism might help avoid the IRQ latency between transfers ++ * ++ * We're also waiting for ENDRX before we start the next ++ * transfer because we need to handle some difficult timing ++ * issues otherwise. If we wait for ENDTX in one transfer and ++ * then starts waiting for ENDRX in the next, it's difficult ++ * to tell the difference between the ENDRX interrupt we're ++ * actually waiting for and the ENDRX interrupt of the ++ * previous transfer. ++ * ++ * It should be doable, though. Just not now... ++ */ ++ spi_writel(as, TNCR, 0); ++ spi_writel(as, RNCR, 0); ++ imr = SPI_BIT(ENDRX); ++ ++ dev_dbg(&msg->spi->dev, ++ "start xfer %p: len %u tx %p/%08x rx %p/%08x imr %08x\n", ++ xfer, xfer->len, xfer->tx_buf, xfer->tx_dma, ++ xfer->rx_buf, xfer->rx_dma, imr); ++ ++ wmb(); ++ spi_writel(as, TCR, len); ++ spi_writel(as, RCR, len); ++ spi_writel(as, PTCR, SPI_BIT(TXTEN) | SPI_BIT(RXTEN)); ++ spi_writel(as, IER, imr); ++} ++ ++static void atmel_spi_next_message(struct spi_master *master) ++{ ++ struct atmel_spi *as = spi_master_get_devdata(master); ++ struct spi_message *msg; ++ u32 mr; ++ ++ BUG_ON(as->current_transfer); ++ ++ msg = list_entry(as->queue.next, struct spi_message, queue); ++ ++ /* Select the chip */ ++ mr = spi_readl(as, MR); ++ mr = SPI_BFINS(PCS, ~(1 << msg->spi->chip_select), mr); ++ spi_writel(as, MR, mr); ++ cs_activate(msg->spi); ++ ++ atmel_spi_next_xfer(master, msg); ++} ++ ++static void atmel_spi_dma_map_xfer(struct atmel_spi *as, ++ struct spi_transfer *xfer) ++{ ++ xfer->tx_dma = xfer->rx_dma = INVALID_DMA_ADDRESS; ++ if (!(xfer->len & (L1_CACHE_BYTES - 1))) { ++ if (xfer->tx_buf ++ && !((unsigned long)xfer->tx_buf & (L1_CACHE_BYTES - 1))) ++ xfer->tx_dma = dma_map_single(&as->pdev->dev, ++ xfer->tx_buf, ++ xfer->len, ++ DMA_TO_DEVICE); ++ if (xfer->rx_buf ++ && !((unsigned long)xfer->rx_buf & (L1_CACHE_BYTES - 1))) ++ xfer->rx_dma = dma_map_single(&as->pdev->dev, ++ xfer->rx_buf, ++ xfer->len, ++ DMA_FROM_DEVICE); ++ } ++} ++ ++static irqreturn_t ++atmel_spi_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ struct spi_master *master = dev_id; ++ struct atmel_spi *as = spi_master_get_devdata(master); ++ struct spi_message *msg; ++ struct spi_transfer *xfer; ++ u32 status, pending, imr; ++ int ret = IRQ_NONE; ++ ++ imr = spi_readl(as, IMR); ++ status = spi_readl(as, SR); ++ pending = status & imr; ++pr_debug("spi irq: stat %05x imr %05x pend %05x\n", status, imr, pending); ++ ++ if (pending & (SPI_BIT(ENDTX) | SPI_BIT(ENDRX))) { ++ ret = IRQ_HANDLED; ++ ++ spi_writel(as, IDR, pending); ++ spin_lock(&as->lock); ++ ++ xfer = as->current_transfer; ++ msg = list_entry(as->queue.next, struct spi_message, queue); ++ ++ /* ++ * If the rx buffer wasn't aligned, we used a bounce ++ * buffer for the transfer. Copy the data back and ++ * make the bounce buffer ready for re-use. ++ */ ++ if (xfer->rx_buf && xfer->rx_dma == INVALID_DMA_ADDRESS) { ++ unsigned int len = xfer->len; ++ if (len > BUFFER_SIZE) ++ len = BUFFER_SIZE; ++ ++ dma_sync_single_for_cpu(&as->pdev->dev, as->buffer_dma, ++ len, DMA_FROM_DEVICE); ++ memcpy((xfer->rx_buf + xfer->len ++ - len - as->remaining_bytes), ++ as->buffer, len); ++ } ++ ++ ++ if (as->remaining_bytes == 0) { ++ msg->actual_length += xfer->len; ++ ++ if (!msg->is_dma_mapped) { ++ if (xfer->tx_dma != INVALID_DMA_ADDRESS) ++ dma_unmap_single(master->cdev.dev, ++ xfer->tx_dma, ++ xfer->len, ++ DMA_TO_DEVICE); ++ if (xfer->rx_dma != INVALID_DMA_ADDRESS) ++ dma_unmap_single(master->cdev.dev, ++ xfer->rx_dma, ++ xfer->len, ++ DMA_FROM_DEVICE); ++ } ++ ++ /* REVISIT: udelay in irq is unfriendly */ ++ if (xfer->delay_usecs) ++ udelay(xfer->delay_usecs); ++ ++ if (msg->transfers.prev == &xfer->transfer_list) { ++ ++ /* report completed message */ ++ cs_deactivate(msg->spi); ++ list_del(&msg->queue); ++ msg->status = 0; ++ ++ dev_dbg(master->cdev.dev, ++ "xfer complete: %u bytes transferred\n", ++ msg->actual_length); ++ ++ spin_unlock(&as->lock); ++ msg->complete(msg->context); ++ spin_lock(&as->lock); ++ ++ as->current_transfer = NULL; ++ ++ /* continue; complete() may have queued requests */ ++ if (list_empty(&as->queue) || as->stopping) ++ spi_writel(as, PTCR, SPI_BIT(RXTDIS) ++ | SPI_BIT(TXTDIS)); ++ else ++ atmel_spi_next_message(master); ++ } else { ++ if (xfer->cs_change) { ++ cs_deactivate(msg->spi); ++ udelay(1); ++ cs_activate(msg->spi); ++ } ++ ++ /* ++ * Not done yet. Submit the next transfer. ++ * ++ * FIXME handle protocol options for xfer ++ */ ++ atmel_spi_next_xfer(master, msg); ++ } ++ } else { ++ /* ++ * Keep going, we still have data to send in ++ * the current transfer. ++ */ ++ atmel_spi_next_xfer(master, msg); ++ } ++ spin_unlock(&as->lock); ++ } ++ ++ return ret; ++} ++ ++static int atmel_spi_setup(struct spi_device *spi) ++{ ++ struct atmel_spi *as; ++ u32 scbr, csr; ++ unsigned int bits = spi->bits_per_word; ++ unsigned long bus_hz, sck_hz; ++ unsigned int npcs_pin; ++ int ret; ++ ++ as = spi_master_get_devdata(spi->master); ++ ++ if (as->stopping) ++ return -ESHUTDOWN; ++ ++ if (spi->chip_select > spi->master->num_chipselect) { ++ dev_dbg(&spi->dev, ++ "setup: invalid chipselect %u (%u defined)\n", ++ spi->chip_select, spi->master->num_chipselect); ++ return -EINVAL; ++ } ++ ++ if (bits == 0) ++ bits = 8; ++ if (bits < 8 || bits > 16) { ++ dev_dbg(&spi->dev, ++ "setup: invalid bits_per_word %u (8 to 16)\n", ++ bits); ++ return -EINVAL; ++ } ++ ++ if (spi->mode & (SPI_CS_HIGH | SPI_LSB_FIRST)) { ++ dev_dbg(&spi->dev, "setup: unsupported mode %u\n", spi->mode); ++ return -EINVAL; ++ } ++ ++ /* speed zero convention is used by some upper layers */ ++ bus_hz = clk_get_rate(as->clk); ++ if (spi->max_speed_hz) { ++ /* assume div32/fdiv/mbz == 0 */ ++ if (!as->new_1) ++ bus_hz /= 2; ++ scbr = ((bus_hz + spi->max_speed_hz - 1) ++ / spi->max_speed_hz); ++ if (scbr >= (1 << SPI_SCBR_SIZE)) { ++ dev_dbg(&spi->dev, "setup: %d Hz too slow, scbr %u\n", ++ spi->max_speed_hz, scbr); ++ return -EINVAL; ++ } ++ } else ++ scbr = 0xff; ++ sck_hz = bus_hz / scbr; ++ ++ csr = SPI_BF(SCBR, scbr) | SPI_BF(BITS, bits - 8); ++ if (spi->mode & SPI_CPOL) ++ csr |= SPI_BIT(CPOL); ++ if (!(spi->mode & SPI_CPHA)) ++ csr |= SPI_BIT(NCPHA); ++ ++ /* TODO: DLYBS and DLYBCT */ ++ csr |= SPI_BF(DLYBS, 10); ++ csr |= SPI_BF(DLYBCT, 10); ++ ++ npcs_pin = (unsigned int)spi->controller_data; ++ if (!spi->controller_state) { ++ ret = gpio_request(npcs_pin, "spi_npcs"); ++ if (ret) ++ return ret; ++ spi->controller_state = (void *)npcs_pin; ++ } ++ ++ gpio_set_value(npcs_pin, 1); ++ ++ dev_dbg(&spi->dev, ++ "setup: %lu Hz bpw %u mode 0x%x -> csr%d %08x\n", ++ sck_hz, bits, spi->mode, spi->chip_select, csr); ++ ++ spi_writel(as, CSR0 + 4 * spi->chip_select, csr); ++ ++ return 0; ++} ++ ++static int atmel_spi_transfer(struct spi_device *spi, struct spi_message *msg) ++{ ++ struct atmel_spi *as; ++ struct spi_transfer *xfer; ++ unsigned long flags; ++ struct device *controller = spi->master->cdev.dev; ++ ++ as = spi_master_get_devdata(spi->master); ++ ++ dev_dbg(controller, "new message %p submitted for %s\n", ++ msg, spi->dev.bus_id); ++ ++ if (unlikely(list_empty(&msg->transfers) ++ || !spi->max_speed_hz)) ++ return -EINVAL; ++ ++ if (as->stopping) ++ return -ESHUTDOWN; ++ ++ list_for_each_entry(xfer, &msg->transfers, transfer_list) { ++ if (!(xfer->tx_buf || xfer->rx_buf)) { ++ dev_dbg(&spi->dev, "missing rx or tx buf\n"); ++ return -EINVAL; ++ } ++ ++ /* FIXME implement these protocol options!! */ ++ if (xfer->bits_per_word || xfer->speed_hz) { ++ dev_dbg(&spi->dev, "no protocol options yet\n"); ++ return -ENOPROTOOPT; ++ } ++ } ++ ++ /* scrub dcache "early" */ ++ if (!msg->is_dma_mapped) { ++ list_for_each_entry(xfer, &msg->transfers, transfer_list) ++ atmel_spi_dma_map_xfer(as, xfer); ++ } ++ ++ list_for_each_entry(xfer, &msg->transfers, transfer_list) { ++ dev_dbg(controller, ++ " xfer %p: len %u tx %p/%08x rx %p/%08x\n", ++ xfer, xfer->len, ++ xfer->tx_buf, xfer->tx_dma, ++ xfer->rx_buf, xfer->rx_dma); ++ } ++ ++ msg->status = -EINPROGRESS; ++ msg->actual_length = 0; ++ ++ spin_lock_irqsave(&as->lock, flags); ++ list_add_tail(&msg->queue, &as->queue); ++ if (!as->current_transfer) ++ atmel_spi_next_message(spi->master); ++ spin_unlock_irqrestore(&as->lock, flags); ++ ++ return 0; ++} ++ ++static void atmel_spi_cleanup(const struct spi_device *spi) ++{ ++ if (spi->controller_state) ++ gpio_free((unsigned int)spi->controller_data); ++} ++ ++/*-------------------------------------------------------------------------*/ ++ ++static int __devinit atmel_spi_probe(struct platform_device *pdev) ++{ ++ struct resource *regs; ++ int irq; ++ struct clk *clk; ++ int ret; ++ struct spi_master *master; ++ struct atmel_spi *as; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) ++ return -ENXIO; ++ ++ irq = platform_get_irq(pdev, 0); ++ if (irq < 0) ++ return irq; ++ ++ clk = clk_get(&pdev->dev, "pclk"); ++ if (IS_ERR(clk)) ++ return PTR_ERR(clk); ++ ++ /* setup spi core then atmel-specific driver state */ ++ ret = -ENOMEM; ++ master = spi_alloc_master(&pdev->dev, sizeof *as); ++ if (!master) ++ goto out_free; ++ ++ master->bus_num = pdev->id; ++ master->num_chipselect = 4; ++ master->setup = atmel_spi_setup; ++ master->transfer = atmel_spi_transfer; ++ master->cleanup = atmel_spi_cleanup; ++ platform_set_drvdata(pdev, master); ++ ++ as = spi_master_get_devdata(master); ++ ++ as->buffer = dma_alloc_coherent(&pdev->dev, BUFFER_SIZE, ++ &as->buffer_dma, GFP_KERNEL); ++ if (!as->buffer) ++ goto out_free; ++ ++ spin_lock_init(&as->lock); ++ INIT_LIST_HEAD(&as->queue); ++ as->pdev = pdev; ++ as->regs = ioremap(regs->start, (regs->end - regs->start) + 1); ++ if (!as->regs) ++ goto out_free_buffer; ++ as->irq = irq; ++ as->clk = clk; ++#if !defined(CONFIG_ARCH_AT91RM9200) ++ /* if (!cpu_is_at91rm9200()) */ ++ as->new_1 = 1; ++#endif ++ ++ ret = request_irq(irq, atmel_spi_interrupt, 0, ++ pdev->dev.bus_id, master); ++ if (ret) ++ goto out_unmap_regs; ++ ++ /* Initialize the hardware */ ++ clk_enable(clk); ++ spi_writel(as, CR, SPI_BIT(SWRST)); ++ spi_writel(as, MR, SPI_BIT(MSTR) | SPI_BIT(MODFDIS)); ++ spi_writel(as, PTCR, SPI_BIT(RXTDIS) | SPI_BIT(TXTDIS)); ++ spi_writel(as, CR, SPI_BIT(SPIEN)); ++ ++ /* go! */ ++ dev_info(&pdev->dev, "Atmel SPI Controller at 0x%08lx (irq %d)\n", ++ (unsigned long)regs->start, irq); ++ ++ ret = spi_register_master(master); ++ if (ret) ++ goto out_reset_hw; ++ ++ return 0; ++ ++out_reset_hw: ++ spi_writel(as, CR, SPI_BIT(SWRST)); ++ clk_disable(clk); ++ free_irq(irq, master); ++out_unmap_regs: ++ iounmap(as->regs); ++out_free_buffer: ++ dma_free_coherent(&pdev->dev, BUFFER_SIZE, as->buffer, ++ as->buffer_dma); ++out_free: ++ clk_put(clk); ++ spi_master_put(master); ++ return ret; ++} ++ ++static int __devexit atmel_spi_remove(struct platform_device *pdev) ++{ ++ struct spi_master *master = platform_get_drvdata(pdev); ++ struct atmel_spi *as = spi_master_get_devdata(master); ++ struct spi_message *msg; ++ ++ /* reset the hardware and block queue progress */ ++ spin_lock_irq(&as->lock); ++ as->stopping = 1; ++ spi_writel(as, CR, SPI_BIT(SWRST)); ++ spi_readl(as, SR); ++ spin_unlock_irq(&as->lock); ++ ++ /* Terminate remaining queued transfers */ ++ list_for_each_entry(msg, &as->queue, queue) { ++ /* REVISIT unmapping the dma is sort of a NOP on ARM, ++ * but we shouldn't depend on that... ++ */ ++ msg->status = -ESHUTDOWN; ++ msg->complete(msg->context); ++ } ++ ++ dma_free_coherent(&pdev->dev, BUFFER_SIZE, as->buffer, ++ as->buffer_dma); ++ ++ clk_disable(as->clk); ++ clk_put(as->clk); ++ free_irq(as->irq, master); ++ iounmap(as->regs); ++ ++ spi_unregister_master(master); ++ ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++ ++static int atmel_spi_suspend(struct platform_device *pdev, pm_message_t mesg) ++{ ++ struct spi_master *master = platform_get_drvdata(pdev); ++ struct atmel_spi *as = spi_master_get_devdata(master); ++ ++ clk_disable(as->clk); ++ return 0; ++} ++ ++static int atmel_spi_resume(struct platform_device *pdev) ++{ ++ struct spi_master *master = platform_get_drvdata(pdev); ++ struct atmel_spi *as = spi_master_get_devdata(master); ++ ++ clk_enable(as->clk); ++ return 0; ++} ++ ++#else ++#define atmel_spi_suspend NULL ++#define atmel_spi_resume NULL ++#endif ++ ++ ++static struct platform_driver atmel_spi_driver = { ++ .driver = { ++ .name = "atmel_spi", ++ .owner = THIS_MODULE, ++ }, ++ .probe = atmel_spi_probe, ++ .suspend = atmel_spi_suspend, ++ .resume = atmel_spi_resume, ++ .remove = __devexit_p(atmel_spi_remove), ++}; ++ ++static int __init atmel_spi_init(void) ++{ ++ return platform_driver_register(&atmel_spi_driver); ++} ++module_init(atmel_spi_init); ++ ++static void __exit atmel_spi_exit(void) ++{ ++ platform_driver_unregister(&atmel_spi_driver); ++} ++module_exit(atmel_spi_exit); ++ ++MODULE_DESCRIPTION("Atmel AT32/AT91 SPI Controller driver"); ++MODULE_AUTHOR("Haavard Skinnemoen "); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.h 2006-11-29 16:55:59.000000000 +0100 +@@ -0,0 +1,167 @@ ++/* ++ * Register definitions for Atmel Serial Peripheral Interface (SPI) ++ * ++ * Copyright (C) 2006 Atmel 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. ++ */ ++#ifndef __ATMEL_SPI_H__ ++#define __ATMEL_SPI_H__ ++ ++/* SPI register offsets */ ++#define SPI_CR 0x0000 ++#define SPI_MR 0x0004 ++#define SPI_RDR 0x0008 ++#define SPI_TDR 0x000c ++#define SPI_SR 0x0010 ++#define SPI_IER 0x0014 ++#define SPI_IDR 0x0018 ++#define SPI_IMR 0x001c ++#define SPI_CSR0 0x0030 ++#define SPI_CSR1 0x0034 ++#define SPI_CSR2 0x0038 ++#define SPI_CSR3 0x003c ++#define SPI_RPR 0x0100 ++#define SPI_RCR 0x0104 ++#define SPI_TPR 0x0108 ++#define SPI_TCR 0x010c ++#define SPI_RNPR 0x0110 ++#define SPI_RNCR 0x0114 ++#define SPI_TNPR 0x0118 ++#define SPI_TNCR 0x011c ++#define SPI_PTCR 0x0120 ++#define SPI_PTSR 0x0124 ++ ++/* Bitfields in CR */ ++#define SPI_SPIEN_OFFSET 0 ++#define SPI_SPIEN_SIZE 1 ++#define SPI_SPIDIS_OFFSET 1 ++#define SPI_SPIDIS_SIZE 1 ++#define SPI_SWRST_OFFSET 7 ++#define SPI_SWRST_SIZE 1 ++#define SPI_LASTXFER_OFFSET 24 ++#define SPI_LASTXFER_SIZE 1 ++ ++/* Bitfields in MR */ ++#define SPI_MSTR_OFFSET 0 ++#define SPI_MSTR_SIZE 1 ++#define SPI_PS_OFFSET 1 ++#define SPI_PS_SIZE 1 ++#define SPI_PCSDEC_OFFSET 2 ++#define SPI_PCSDEC_SIZE 1 ++#define SPI_FDIV_OFFSET 3 ++#define SPI_FDIV_SIZE 1 ++#define SPI_MODFDIS_OFFSET 4 ++#define SPI_MODFDIS_SIZE 1 ++#define SPI_LLB_OFFSET 7 ++#define SPI_LLB_SIZE 1 ++#define SPI_PCS_OFFSET 16 ++#define SPI_PCS_SIZE 4 ++#define SPI_DLYBCS_OFFSET 24 ++#define SPI_DLYBCS_SIZE 8 ++ ++/* Bitfields in RDR */ ++#define SPI_RD_OFFSET 0 ++#define SPI_RD_SIZE 16 ++ ++/* Bitfields in TDR */ ++#define SPI_TD_OFFSET 0 ++#define SPI_TD_SIZE 16 ++ ++/* Bitfields in SR */ ++#define SPI_RDRF_OFFSET 0 ++#define SPI_RDRF_SIZE 1 ++#define SPI_TDRE_OFFSET 1 ++#define SPI_TDRE_SIZE 1 ++#define SPI_MODF_OFFSET 2 ++#define SPI_MODF_SIZE 1 ++#define SPI_OVRES_OFFSET 3 ++#define SPI_OVRES_SIZE 1 ++#define SPI_ENDRX_OFFSET 4 ++#define SPI_ENDRX_SIZE 1 ++#define SPI_ENDTX_OFFSET 5 ++#define SPI_ENDTX_SIZE 1 ++#define SPI_RXBUFF_OFFSET 6 ++#define SPI_RXBUFF_SIZE 1 ++#define SPI_TXBUFE_OFFSET 7 ++#define SPI_TXBUFE_SIZE 1 ++#define SPI_NSSR_OFFSET 8 ++#define SPI_NSSR_SIZE 1 ++#define SPI_TXEMPTY_OFFSET 9 ++#define SPI_TXEMPTY_SIZE 1 ++#define SPI_SPIENS_OFFSET 16 ++#define SPI_SPIENS_SIZE 1 ++ ++/* Bitfields in CSR0 */ ++#define SPI_CPOL_OFFSET 0 ++#define SPI_CPOL_SIZE 1 ++#define SPI_NCPHA_OFFSET 1 ++#define SPI_NCPHA_SIZE 1 ++#define SPI_CSAAT_OFFSET 3 ++#define SPI_CSAAT_SIZE 1 ++#define SPI_BITS_OFFSET 4 ++#define SPI_BITS_SIZE 4 ++#define SPI_SCBR_OFFSET 8 ++#define SPI_SCBR_SIZE 8 ++#define SPI_DLYBS_OFFSET 16 ++#define SPI_DLYBS_SIZE 8 ++#define SPI_DLYBCT_OFFSET 24 ++#define SPI_DLYBCT_SIZE 8 ++ ++/* Bitfields in RCR */ ++#define SPI_RXCTR_OFFSET 0 ++#define SPI_RXCTR_SIZE 16 ++ ++/* Bitfields in TCR */ ++#define SPI_TXCTR_OFFSET 0 ++#define SPI_TXCTR_SIZE 16 ++ ++/* Bitfields in RNCR */ ++#define SPI_RXNCR_OFFSET 0 ++#define SPI_RXNCR_SIZE 16 ++ ++/* Bitfields in TNCR */ ++#define SPI_TXNCR_OFFSET 0 ++#define SPI_TXNCR_SIZE 16 ++ ++/* Bitfields in PTCR */ ++#define SPI_RXTEN_OFFSET 0 ++#define SPI_RXTEN_SIZE 1 ++#define SPI_RXTDIS_OFFSET 1 ++#define SPI_RXTDIS_SIZE 1 ++#define SPI_TXTEN_OFFSET 8 ++#define SPI_TXTEN_SIZE 1 ++#define SPI_TXTDIS_OFFSET 9 ++#define SPI_TXTDIS_SIZE 1 ++ ++/* Constants for BITS */ ++#define SPI_BITS_8_BPT 0 ++#define SPI_BITS_9_BPT 1 ++#define SPI_BITS_10_BPT 2 ++#define SPI_BITS_11_BPT 3 ++#define SPI_BITS_12_BPT 4 ++#define SPI_BITS_13_BPT 5 ++#define SPI_BITS_14_BPT 6 ++#define SPI_BITS_15_BPT 7 ++#define SPI_BITS_16_BPT 8 ++ ++/* Bit manipulation macros */ ++#define SPI_BIT(name) \ ++ (1 << SPI_##name##_OFFSET) ++#define SPI_BF(name,value) \ ++ (((value) & ((1 << SPI_##name##_SIZE) - 1)) << SPI_##name##_OFFSET) ++#define SPI_BFEXT(name,value) \ ++ (((value) >> SPI_##name##_OFFSET) & ((1 << SPI_##name##_SIZE) - 1)) ++#define SPI_BFINS(name,value,old) \ ++ ( ((old) & ~(((1 << SPI_##name##_SIZE) - 1) << SPI_##name##_OFFSET)) \ ++ | SPI_BF(name,value)) ++ ++/* Register access macros */ ++#define spi_readl(port,reg) \ ++ __raw_readl((port)->regs + SPI_##reg) ++#define spi_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + SPI_##reg) ++ ++#endif /* __ATMEL_SPI_H__ */ diff --git a/packages/linux/linux-2.6.18/atmel-twi-driver.patch b/packages/linux/linux-2.6.18/atmel-twi-driver.patch new file mode 100644 index 0000000000..97ede9b65f --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-twi-driver.patch @@ -0,0 +1,521 @@ +rom: Espen Krangnes + +This patch will add support for Atmel TWI for the AVR32 architecture. Atmel's TWI is compatible with Philips' I2C protocol. It supports Master read and write, and has support for different baudrates that can be set by the user. It uses the Linux I2C framework. The driver is based on the main principles of the TWI driver for the Atmel AT91 series. + +Signed-off-by: Espen Krangnes + + +diff -Naur linux-2.6.18.orig/drivers/i2c/busses/atmeltwi.h linux-2.6.18/drivers/i2c/busses/atmeltwi.h +--- linux-2.6.18.orig/drivers/i2c/busses/atmeltwi.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.18/drivers/i2c/busses/atmeltwi.h 2006-12-20 12:42:48.000000000 +0100 +@@ -0,0 +1,117 @@ ++/* ++ * Register definitions for the Atmel Two-Wire Interface ++ */ ++ ++#ifndef __ASM_AVR32_TWI_H__ ++#define __ASM_AVR32_TWI_H__ ++ ++/* TWI register offsets */ ++#define TWI_CR 0x0000 ++#define TWI_MMR 0x0004 ++#define TWI_SMR 0x0008 ++#define TWI_IADR 0x000c ++#define TWI_CWGR 0x0010 ++#define TWI_SR 0x0020 ++#define TWI_IER 0x0024 ++#define TWI_IDR 0x0028 ++#define TWI_IMR 0x002c ++#define TWI_RHR 0x0030 ++#define TWI_THR 0x0034 ++ ++/* Bitfields in CR */ ++#define TWI_START_OFFSET 0 ++#define TWI_START_SIZE 1 ++#define TWI_STOP_OFFSET 1 ++#define TWI_STOP_SIZE 1 ++#define TWI_MSEN_OFFSET 2 ++#define TWI_MSEN_SIZE 1 ++#define TWI_MSDIS_OFFSET 3 ++#define TWI_MSDIS_SIZE 1 ++#define TWI_SVEN_OFFSET 4 ++#define TWI_SVEN_SIZE 1 ++#define TWI_SVDIS_OFFSET 5 ++#define TWI_SVDIS_SIZE 1 ++#define TWI_SWRST_OFFSET 7 ++#define TWI_SWRST_SIZE 1 ++ ++/* Bitfields in MMR */ ++#define TWI_IADRSZ_OFFSET 8 ++#define TWI_IADRSZ_SIZE 2 ++#define TWI_MREAD_OFFSET 12 ++#define TWI_MREAD_SIZE 1 ++#define TWI_DADR_OFFSET 16 ++#define TWI_DADR_SIZE 7 ++ ++/* Bitfields in SMR */ ++#define TWI_SADR_OFFSET 16 ++#define TWI_SADR_SIZE 7 ++ ++/* Bitfields in IADR */ ++#define TWI_IADR_OFFSET 0 ++#define TWI_IADR_SIZE 24 ++ ++/* Bitfields in CWGR */ ++#define TWI_CLDIV_OFFSET 0 ++#define TWI_CLDIV_SIZE 8 ++#define TWI_CHDIV_OFFSET 8 ++#define TWI_CHDIV_SIZE 8 ++#define TWI_CKDIV_OFFSET 16 ++#define TWI_CKDIV_SIZE 3 ++ ++/* Bitfields in SR */ ++#define TWI_TXCOMP_OFFSET 0 ++#define TWI_TXCOMP_SIZE 1 ++#define TWI_RXRDY_OFFSET 1 ++#define TWI_RXRDY_SIZE 1 ++#define TWI_TXRDY_OFFSET 2 ++#define TWI_TXRDY_SIZE 1 ++#define TWI_SVDIR_OFFSET 3 ++#define TWI_SVDIR_SIZE 1 ++#define TWI_SVACC_OFFSET 4 ++#define TWI_SVACC_SIZE 1 ++#define TWI_GCACC_OFFSET 5 ++#define TWI_GCACC_SIZE 1 ++#define TWI_OVRE_OFFSET 6 ++#define TWI_OVRE_SIZE 1 ++#define TWI_UNRE_OFFSET 7 ++#define TWI_UNRE_SIZE 1 ++#define TWI_NACK_OFFSET 8 ++#define TWI_NACK_SIZE 1 ++#define TWI_ARBLST_OFFSET 9 ++#define TWI_ARBLST_SIZE 1 ++ ++/* Bitfields in RHR */ ++#define TWI_RXDATA_OFFSET 0 ++#define TWI_RXDATA_SIZE 8 ++ ++/* Bitfields in THR */ ++#define TWI_TXDATA_OFFSET 0 ++#define TWI_TXDATA_SIZE 8 ++ ++/* Constants for IADRSZ */ ++#define TWI_IADRSZ_NO_ADDR 0 ++#define TWI_IADRSZ_ONE_BYTE 1 ++#define TWI_IADRSZ_TWO_BYTES 2 ++#define TWI_IADRSZ_THREE_BYTES 3 ++ ++/* Bit manipulation macros */ ++#define TWI_BIT(name) \ ++ (1 << TWI_##name##_OFFSET) ++#define TWI_BF(name,value) \ ++ (((value) & ((1 << TWI_##name##_SIZE) - 1)) \ ++ << TWI_##name##_OFFSET) ++#define TWI_BFEXT(name,value) \ ++ (((value) >> TWI_##name##_OFFSET) \ ++ & ((1 << TWI_##name##_SIZE) - 1)) ++#define TWI_BFINS(name,value,old) \ ++ (((old) & ~(((1 << TWI_##name##_SIZE) - 1) \ ++ << TWI_##name##_OFFSET)) \ ++ | TWI_BF(name,value)) ++ ++/* Register access macros */ ++#define twi_readl(port,reg) \ ++ __raw_readl((port)->regs + TWI_##reg) ++#define twi_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + TWI_##reg) ++ ++#endif /* __ASM_AVR32_TWI_H__ */ +diff -Naur linux-2.6.18.orig/drivers/i2c/busses/i2c-atmeltwi.c linux-2.6.18/drivers/i2c/busses/i2c-atmeltwi.c +--- linux-2.6.18.orig/drivers/i2c/busses/i2c-atmeltwi.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.18/drivers/i2c/busses/i2c-atmeltwi.c 2006-12-20 13:30:49.000000000 +0100 +@@ -0,0 +1,348 @@ ++/* ++ * i2c Support for Atmel's Two-Wire Interface (TWI) ++ * ++ * Based on the work of Copyright (C) 2004 Rick Bronson ++ * Converted to 2.6 by Andrew Victor ++ * Ported to AVR32 and heavily modified by Espen Krangnes ++ * ++ * Copyright (C) 2006 Atmel Corporation ++ * ++ * Borrowed heavily from the original work by: ++ * Copyright (C) 2000 Philip Edelbrock ++ * ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "atmeltwi.h" ++ ++static unsigned int baudrate = CONFIG_I2C_ATMELTWI_BAUDRATE; ++module_param(baudrate, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); ++MODULE_PARM_DESC(baudrate, "The TWI baudrate"); ++ ++ ++struct atmel_twi { ++ void __iomem *regs; ++ struct i2c_adapter adapter; ++ struct clk *pclk; ++ spinlock_t lock; ++ struct completion comp; ++ u32 intmask; ++ u8 *buf; ++ u8 len; ++ u8 acks_left; ++ unsigned int irq; ++ ++}; ++#define to_atmel_twi(adap) container_of(adap, struct atmel_twi, adapter) ++ ++/* ++ * Initialize the TWI hardware registers. ++ */ ++static int __devinit twi_hwinit(struct atmel_twi *twi) ++{ ++ unsigned long cdiv, ckdiv=0; ++ ++ twi_writel(twi, IDR, ~0UL); ++ twi_writel(twi, CR, TWI_BIT(SWRST)); /*Reset peripheral*/ ++ twi_readl(twi, SR); ++ ++ cdiv = (clk_get_rate(twi->pclk) / (2 * baudrate)) - 4; ++ ++ while (cdiv > 255) { ++ ckdiv++; ++ cdiv = cdiv >> 1; ++ } ++ ++ if (ckdiv > 7) ++ return -EINVAL; ++ else ++ twi_writel(twi, CWGR, (TWI_BF(CKDIV, ckdiv) ++ | TWI_BF(CHDIV, cdiv) ++ | TWI_BF(CLDIV, cdiv))); ++ return 0; ++} ++ ++/* ++ * Waits for the i2c status register to set the specified bitmask ++ * Returns 0 if timed out (~100ms). ++ */ ++static short twi_wait_for_completion(struct atmel_twi *twi, ++ u32 mask) ++{ ++ int timeout = msecs_to_jiffies(100); ++ ++ twi->intmask = mask; ++ init_completion(&twi->comp); ++ ++ twi_writel(twi, IER, mask); ++ ++ if(!wait_for_completion_timeout(&twi->comp, timeout)) ++ return -ETIMEDOUT; ++ ++ return 0; ++} ++ ++/* ++ * Generic i2c master transfer entrypoint. ++ */ ++static int twi_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) ++{ ++ struct atmel_twi *twi = to_atmel_twi(adap); ++ struct i2c_msg *pmsg; ++ int i; ++ ++ /* get first message */ ++ pmsg = msgs; ++ ++ dev_dbg(&adap->dev, "twi_xfer: processing %d messages:\n", num); ++ ++ for (i = 0; i < num; i++, pmsg++) { ++ ++ twi->len = pmsg->len; ++ twi->buf = pmsg->buf; ++ twi->acks_left = pmsg->len; ++ twi_writel(twi, MMR, TWI_BF(DADR, pmsg->addr) | ++ (pmsg->flags & I2C_M_RD ? TWI_BIT(MREAD) : 0)); ++ twi_writel(twi, IADR, TWI_BF(IADR, pmsg->addr)); ++ ++ dev_dbg(&adap->dev,"#%d: internal addr %d %s byte%s %s 0x%02x\n", ++ i,pmsg->len, pmsg->flags & I2C_M_RD ? "reading" : "writing", ++ pmsg->len > 1 ? "s" : "", ++ pmsg->flags & I2C_M_RD ? "from" : "to", pmsg->addr); ++ ++ /* enable */ ++ twi_writel(twi, CR, TWI_BIT(MSEN)); ++ ++ if (pmsg->flags & I2C_M_RD) { ++ twi_writel(twi, CR, TWI_BIT(START)); ++ if ( twi_wait_for_completion(twi,TWI_BIT(RXRDY))==-ETIMEDOUT ) { ++ dev_dbg(&adap->dev, "RXRDY timeout. Stopped with %d bytes left\n", ++ twi->acks_left); ++ return -ETIMEDOUT; ++ } ++ ++ /* Send Stop, and Wait until transfer is finished */ ++ if ( twi_wait_for_completion(twi,TWI_BIT(TXCOMP))==-ETIMEDOUT ) { ++ dev_dbg(&adap->dev, "TXCOMP timeout\n"); ++ return -ETIMEDOUT; ++ } ++ ++ } else { ++ twi_writel(twi, THR, twi->buf[0]); ++ if ( twi_wait_for_completion(twi,TWI_BIT(TXRDY))==-ETIMEDOUT ) { ++ dev_dbg(&adap->dev, "TXRDY timeout. Stopped with %d bytes left\n", ++ twi->acks_left); ++ return -ETIMEDOUT; ++ } ++ } ++ ++ /* Disable TWI interface */ ++ twi_writel(twi, CR, TWI_BIT(MSDIS)); ++ ++ } /* end cur msg */ ++ ++ return i; ++} ++ ++ ++static irqreturn_t twi_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ struct atmel_twi *twi = dev_id; ++ int status = twi_readl(twi, SR); ++ ++ if (twi->intmask & status){ ++ if (twi->intmask & TWI_BIT(NACK)) { ++ goto nack; ++ } else if (twi->intmask & TWI_BIT(RXRDY)){ ++ twi->buf[twi->len - twi->acks_left] = twi_readl(twi,RHR); ++ if(--twi->acks_left==1) ++ twi_writel(twi, CR, TWI_BIT(STOP)); ++ if (twi->acks_left==0) ++ goto complete; ++ } else if (twi->intmask & TWI_BIT(TXRDY)) { ++ twi->acks_left--; ++ if (twi->acks_left==0) { ++ twi->intmask = TWI_BIT(TXCOMP); ++ twi_writel(twi, IER, TWI_BIT(TXCOMP)); ++ } else ++ twi_writel(twi, THR, twi->buf[twi->len - twi->acks_left]); ++ } else if (twi->intmask & TWI_BIT(TXCOMP)) { ++ goto complete; ++ } ++ } ++ ++ return IRQ_HANDLED; ++ ++nack: ++ printk(KERN_INFO "NACK received!\n"); ++ ++complete: ++ twi_writel(twi, IDR, ~0UL); ++ complete(&twi->comp); ++ ++ return IRQ_HANDLED; ++ ++} ++ ++ ++/* ++ * Return list of supported functionality. ++ */ ++static u32 twi_func(struct i2c_adapter *adapter) ++{ ++ return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL; ++} ++ ++/* For now, we only handle combined mode (smbus) */ ++static struct i2c_algorithm twi_algorithm = { ++ .master_xfer = twi_xfer, ++ .functionality = twi_func, ++}; ++ ++/* ++ * Main initialization routine. ++ */ ++static int __devinit twi_probe(struct platform_device *pdev) ++{ ++ struct atmel_twi *twi; ++ struct resource *regs; ++ struct clk *pclk; ++ struct i2c_adapter *adapter; ++ int rc, irq; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) ++ return -ENXIO; ++ ++ pclk = clk_get(&pdev->dev, "pclk"); ++ if (IS_ERR(pclk)) ++ return PTR_ERR(pclk); ++ clk_enable(pclk); ++ ++ rc = -ENOMEM; ++ twi = kzalloc(sizeof(struct atmel_twi), GFP_KERNEL); ++ if (!twi) { ++ dev_err(&pdev->dev, "can't allocate interface!\n"); ++ goto err_alloc_twi; ++ } ++ ++ twi->pclk = pclk; ++ twi->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!twi->regs) ++ goto err_ioremap; ++ ++ irq = platform_get_irq(pdev,0); ++ rc = request_irq(irq, twi_interrupt, 0, "twi", twi); ++ if (rc) { ++ dev_err(&pdev->dev, "can't bind irq!\n"); ++ goto err_irq; ++ } ++ twi->irq = irq; ++ ++ rc = twi_hwinit(twi); ++ if (rc) { ++ dev_err(&pdev->dev, "Unable to set baudrate\n"); ++ goto err_hw_init; ++ } ++ ++ adapter = &twi->adapter; ++ sprintf(adapter->name, "TWI"); ++ adapter->algo = &twi_algorithm; ++ adapter->class = I2C_CLASS_HWMON; ++ adapter->dev.parent = &pdev->dev; ++ ++ platform_set_drvdata(pdev, twi); ++ ++ rc = i2c_add_adapter(adapter); ++ if (rc) { ++ dev_err(&pdev->dev, "Adapter %s registration failed\n", ++ adapter->name); ++ goto err_register; ++ } ++ ++ dev_info(&pdev->dev, "Atmel TWI i2c bus device (baudrate %dk) at 0x%08lx.\n", ++ baudrate/1000, (unsigned long)regs->start); ++ ++ return 0; ++ ++ ++err_register: ++ platform_set_drvdata(pdev, NULL); ++ ++err_hw_init: ++ free_irq(irq, twi); ++ ++err_irq: ++ iounmap(twi->regs); ++ ++err_ioremap: ++ kfree(twi); ++ ++err_alloc_twi: ++ clk_disable(pclk); ++ clk_put(pclk); ++ ++ return rc; ++} ++ ++static int __devexit twi_remove(struct platform_device *pdev) ++{ ++ struct atmel_twi *twi = platform_get_drvdata(pdev); ++ int res; ++ ++ platform_set_drvdata(pdev, NULL); ++ res = i2c_del_adapter(&twi->adapter); ++ twi_writel(twi, CR, TWI_BIT(MSDIS)); ++ iounmap(twi->regs); ++ clk_disable(twi->pclk); ++ clk_put(twi->pclk); ++ free_irq(twi->irq, twi); ++ kfree(twi); ++ ++ return res; ++} ++ ++static struct platform_driver twi_driver = { ++ .probe = twi_probe, ++ .remove = __devexit_p(twi_remove), ++ .driver = { ++ .name = "atmel_twi", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __init atmel_twi_init(void) ++{ ++ return platform_driver_register(&twi_driver); ++} ++ ++static void __exit atmel_twi_exit(void) ++{ ++ platform_driver_unregister(&twi_driver); ++} ++ ++module_init(atmel_twi_init); ++module_exit(atmel_twi_exit); ++ ++MODULE_AUTHOR("Espen Krangnes"); ++MODULE_DESCRIPTION("I2C driver for Atmel TWI"); ++MODULE_LICENSE("GPL"); +diff -Naur linux-2.6.18.orig/drivers/i2c/busses/Kconfig linux-2.6.18/drivers/i2c/busses/Kconfig +--- linux-2.6.18.orig/drivers/i2c/busses/Kconfig 2006-09-20 05:42:06.000000000 +0200 ++++ linux-2.6.18/drivers/i2c/busses/Kconfig 2006-12-18 22:41:58.000000000 +0100 +@@ -5,6 +5,26 @@ + menu "I2C Hardware Bus support" + depends on I2C + ++config I2C_ATMELTWI ++ tristate "Atmel TWI/I2C" ++ depends on I2C ++ help ++ Atmel on-chip TWI controller. Say Y if you have an AT32 or ++ AT91-based device and want to use its built-in TWI ++ functionality. Atmel's TWI is compatible with Philips' I2C ++ protocol. If in doubt, say NO ++ ++config I2C_ATMELTWI_BAUDRATE ++ prompt "Atmel TWI baudrate" ++ depends on I2C_ATMELTWI ++ int ++ default 100000 ++ help ++ Set the TWI/I2C baudrate. This will alter the default value. A ++ different baudrate can be set by using a module parameter as well. If ++ no parameter is provided when loading, this is the value that will be ++ used. ++ + config I2C_ALI1535 + tristate "ALI 1535" + depends on I2C && PCI +diff -Naur linux-2.6.18.orig/drivers/i2c/busses/Makefile linux-2.6.18/drivers/i2c/busses/Makefile +--- linux-2.6.18.orig/drivers/i2c/busses/Makefile 2006-09-20 05:42:06.000000000 +0200 ++++ linux-2.6.18/drivers/i2c/busses/Makefile 2006-12-18 22:42:14.000000000 +0100 +@@ -43,6 +43,7 @@ + obj-$(CONFIG_I2C_VOODOO3) += i2c-voodoo3.o + obj-$(CONFIG_SCx200_ACB) += scx200_acb.o + obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o ++obj-$(CONFIG_I2C_ATMELTWI) += i2c-atmeltwi.o + + ifeq ($(CONFIG_I2C_DEBUG_BUS),y) + EXTRA_CFLAGS += -DDEBUG diff --git a/packages/linux/linux-2.6.18/atmel-usart3-driver.patch b/packages/linux/linux-2.6.18/atmel-usart3-driver.patch new file mode 100644 index 0000000000..2f1b1cf137 --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-usart3-driver.patch @@ -0,0 +1,1443 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Fri Nov 18 16:31:34 2005 +0100 +Subject: [PATCH] AVR32: USART3 Serial Driver + +--- + + drivers/serial/Kconfig | 21 + drivers/serial/Makefile | 1 + drivers/serial/atmel_usart.c | 1086 +++++++++++++++++++++++++++++++++++++++++++ + drivers/serial/atmel_usart.h | 290 +++++++++++ + 4 files changed, 1398 insertions(+) + +Index: linux-2.6.18-avr32/drivers/serial/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/serial/Kconfig 2006-11-02 14:16:07.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/serial/Kconfig 2006-11-02 15:54:18.000000000 +0100 +@@ -246,6 +246,27 @@ config SERIAL_8250_AU1X00 + + comment "Non-8250 serial port support" + ++config SERIAL_ATMEL ++ tristate "Atmel USART3 serial port support" ++ depends on AVR32 ++ select SERIAL_CORE ++ default y ++ help ++ Support for the Atmel USART3 on-chip USART found in most ++ AT32 and AT91 parts from Atmel. ++ ++ If unsure, say Y. ++ ++config SERIAL_ATMEL_CONSOLE ++ bool "Support for console on Atmel USART3 serial port" ++ depends on SERIAL_ATMEL=y ++ select SERIAL_CORE_CONSOLE ++ help ++ Say Y here if you wish to use an Atmel USART3 serial port as ++ the system console (the system console is the device which ++ receives all kernel messages and warnings and which allows ++ logins in single user mode). ++ + config SERIAL_AMBA_PL010 + tristate "ARM AMBA PL010 serial port support" + depends on ARM_AMBA && (BROKEN || !ARCH_VERSATILE) +Index: linux-2.6.18-avr32/drivers/serial/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/serial/Makefile 2006-11-02 14:16:07.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/serial/Makefile 2006-11-02 14:17:29.000000000 +0100 +@@ -20,6 +20,7 @@ obj-$(CONFIG_SERIAL_8250_BOCA) += 8250_b + obj-$(CONFIG_SERIAL_8250_HUB6) += 8250_hub6.o + obj-$(CONFIG_SERIAL_8250_MCA) += 8250_mca.o + obj-$(CONFIG_SERIAL_8250_AU1X00) += 8250_au1x00.o ++obj-$(CONFIG_SERIAL_ATMEL) += atmel_usart.o + obj-$(CONFIG_SERIAL_AMBA_PL010) += amba-pl010.o + obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o + obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o +Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-11-02 15:54:18.000000000 +0100 +@@ -0,0 +1,1086 @@ ++/* ++ * Driver for Atmel USART3 Serial ports ++ * ++ * Based on AT91RM9200 serial driver by Rick Bronson ++ * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o. ++ * Based on drivers/serial/sa1100.c by Deep Blue Solutions Ltd. ++ * ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++#if defined(CONFIG_SERIAL_ATMEL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) ++#define SUPPORT_SYSRQ ++#include ++#endif ++ ++#include ++ ++#include "atmel_usart.h" ++ ++/* ++ * TODO: Move this definition into linux/serial_core.h ++ */ ++#define PORT_USART3 60 ++ ++/* ++ * Use the same major/minor numbers as the AT91 USART, which is ++ * actually the same chip ++ */ ++#define SERIAL_USART3_MAJOR TTY_MAJOR ++#define MINOR_START 64 ++#define NR_PORTS 4 ++ ++#define ERROR_FLAGS (USART3_BIT(CSR_PARE) \ ++ | USART3_BIT(CSR_FRAME) \ ++ | USART3_BIT(CSR_OVRE)) ++ ++/* Must be a power of two, or everything will break */ ++#define RX_BUFFER_SIZE 32 ++struct usart3_port { ++ void __iomem *regs; ++ int break_active; ++ unsigned int tx_dma_head; ++ int rx_tail; ++ char *rx_buffer; ++ dma_addr_t rx_dma; ++ dma_addr_t tx_dma; ++ struct clk *mck; ++ unsigned long mapsize; ++ struct uart_port uart; ++}; ++#define to_usart3_port(port) container_of(port, struct usart3_port, uart) ++ ++static void tx_dma_sync(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ struct circ_buf *xmit = &port->info->xmit; ++ ++ if (xmit->head < up->tx_dma_head) { ++ dma_sync_single_for_device(port->dev, ++ up->tx_dma + up->tx_dma_head, ++ UART_XMIT_SIZE - up->tx_dma_head, ++ DMA_TO_DEVICE); ++ dma_sync_single_for_device(port->dev, up->tx_dma, ++ xmit->head, DMA_TO_DEVICE); ++ } else { ++ dma_sync_single_for_device(port->dev, ++ up->tx_dma + up->tx_dma_head, ++ xmit->head - up->tx_dma_head, ++ DMA_TO_DEVICE); ++ } ++} ++ ++static void tx_dma_update_tail(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ struct circ_buf *xmit = &port->info->xmit; ++ unsigned long status, remaining; ++ unsigned int new_tail; ++ ++ /* Account for the characters DMA'ed since last update */ ++ remaining = usart3_readl(up, TCR); ++ ++ if (up->tx_dma_head < xmit->tail) { ++ /* ++ * We have wrapped around, and there's a chunk at the ++ * beginning of the buffer that has been submitted for ++ * DMA. If the ENDTX bit is set, it means that the ++ * DMA controller also has wrapped around and copied ++ * TNPR/TNCR into TPR/TCR. ++ */ ++ status = usart3_readl(up, CSR); ++ BUG_ON((up->tx_dma_head != 0) ++ && (usart3_readl(up, TNCR) == 0) ++ && !(status & USART3_BIT(ENDTX))); ++ if (status & USART3_BIT(ENDTX)) { ++ BUG_ON(usart3_readl(up, TNCR) != 0); ++ ++ /* The ENDTX bit might be set after we read TCR */ ++ remaining = usart3_readl(up, TCR); ++ ++ usart3_writel(up, TNCR, 0); ++ port->icount.tx += UART_XMIT_SIZE - xmit->tail; ++ xmit->tail = 0; ++ ++ BUG_ON(remaining > up->tx_dma_head); ++ new_tail = up->tx_dma_head - remaining; ++ } else { ++ /* ++ * The DMA controller hasn't switched yet, so ++ * TCR indicates the number of bytes left ++ * until this happens. ++ */ ++ new_tail = UART_XMIT_SIZE - remaining; ++ } ++ } else { ++ /* No wraparound, move the tail closer to dma_head. */ ++ BUG_ON(remaining > up->tx_dma_head); ++ new_tail = up->tx_dma_head - remaining; ++ } ++ ++ BUG_ON(new_tail < xmit->tail); ++ port->icount.tx += new_tail - xmit->tail; ++ xmit->tail = new_tail; ++} ++ ++static inline void tx_dma_start(struct usart3_port *up) ++{ ++ /* Start the PDC and enable interrupts */ ++ usart3_writel(up, PTCR, USART3_BIT(TXTEN)); ++ usart3_writel(up, IER, USART3_BIT(ENDTX)); ++} ++ ++static inline void tx_dma_stop(struct usart3_port *up) ++{ ++ usart3_writel(up, PTCR, USART3_BIT(TXTDIS)); ++ usart3_writel(up, IDR, USART3_BIT(ENDTX)); ++} ++ ++static inline unsigned int rx_dma_get_head(struct usart3_port *up) ++{ ++ unsigned int head; ++ u32 status; ++ ++ head = RX_BUFFER_SIZE - usart3_readl(up, RCR); ++ status = usart3_readl(up, CSR); ++ if (status & USART3_BIT(ENDRX)) ++ head = RX_BUFFER_SIZE; ++ ++ return head; ++} ++ ++static inline int rx_dma_update_tail(struct usart3_port *up, ++ unsigned int tail) ++{ ++ int again = 0; ++ ++ if (!(tail & (RX_BUFFER_SIZE - 1))) { ++ u32 rnpr = up->rx_dma; ++ ++ tail &= RX_BUFFER_SIZE; ++ if (!tail) ++ rnpr += RX_BUFFER_SIZE; ++ ++ usart3_writel(up, RNPR, rnpr); ++ usart3_writel(up, RNCR, RX_BUFFER_SIZE); ++ ++ again = 1; ++ } else ++ BUG_ON(usart3_readl(up, CSR) & USART3_BIT(ENDRX)); ++ ++ up->rx_tail = tail; ++ ++ return again; ++} ++ ++static void usart3_stop_tx(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ ++ tx_dma_stop(up); ++ tx_dma_update_tail(port); ++} ++ ++static void usart3_start_tx(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ struct circ_buf *xmit = &port->info->xmit; ++ ++ BUG_ON(!irqs_disabled()); ++ ++ /* ++ * Stop the DMA engine so that we don't have to worry about race ++ * conditions when updating the various pointers and counters. ++ */ ++ tx_dma_stop(up); ++ ++ tx_dma_sync(port); ++ tx_dma_update_tail(port); ++ ++ if (uart_circ_empty(xmit)) ++ return; ++ ++ usart3_writel(up, TPR, up->tx_dma + xmit->tail); ++ ++ if (xmit->head > xmit->tail) { ++ usart3_writel(up, TCR, xmit->head - xmit->tail); ++ } else { ++ usart3_writel(up, TCR, UART_XMIT_SIZE - xmit->tail); ++ usart3_writel(up, TNPR, up->tx_dma); ++ usart3_writel(up, TNCR, xmit->head); ++ } ++ ++ /* Keep track of what we've submitted for DMA */ ++ up->tx_dma_head = xmit->head; ++ ++ /* Resume operation of DMA engine. */ ++ tx_dma_start(up); ++} ++ ++static void usart3_stop_rx(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ ++ pr_debug("usart3: stop_rx\n"); ++ ++ usart3_writel(up, PTCR, USART3_BIT(RXTDIS)); ++ usart3_writel(up, IDR, (USART3_BIT(TIMEOUT) ++ | USART3_BIT(ENDRX) ++ | USART3_BIT(RXBRK) ++ | USART3_BIT(OVRE) ++ | USART3_BIT(FRAME) ++ | USART3_BIT(PARE))); ++} ++ ++static void usart3_flush_buffer(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ ++ /* ++ * Reset TX DMA state. Note that we must _always_ update TNCR ++ * before TCR, since the value in TNCR will automatically move ++ * to TCR when TCR is 0. ++ */ ++ usart3_writel(up, TNCR, 0); ++ usart3_writel(up, TCR, 0); ++ up->tx_dma_head = port->info->xmit.tail; ++} ++ ++/* ++ * Enable modem status interrupts ++ */ ++static void usart3_enable_ms(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ ++ pr_debug("usart3: enable_ms\n"); ++ usart3_writel(up, IER, (USART3_BIT(RIIC) ++ | USART3_BIT(DSRIC) ++ | USART3_BIT(DCDIC) ++ | USART3_BIT(CTSIC))); ++} ++ ++static inline void handle_rx_error(struct uart_port *port, u32 status) ++{ ++ /* ++ * FIXME: Errors should affect the flag buffer, but due to the ++ * PDC, we don't really know which char they belong to... ++ */ ++ if (status & USART3_BIT(PARE)) { ++ printk(KERN_NOTICE "usart%u: Parity error\n", port->line); ++ port->icount.parity++; ++ } else if (status & USART3_BIT(FRAME)) { ++ printk(KERN_NOTICE "usart%u: Frame error\n", port->line); ++ port->icount.frame++; ++ } ++ if (status & USART3_BIT(OVRE)) { ++ printk(KERN_NOTICE "usart%u: Overrun\n", port->line); ++ port->icount.overrun++; ++ } ++ ++#ifdef SUPPORT_SYSRQ ++ port->sysrq = 0; ++#endif ++} ++ ++static inline void handle_pdc_endtx(struct uart_port *port, unsigned long status) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ struct circ_buf *xmit = &port->info->xmit; ++ ++ tx_dma_update_tail(port); ++ ++ if (uart_tx_stopped(port)) { ++ usart3_stop_tx(port); ++ printk("usart3: stopped\n"); ++ return; ++ } ++ ++ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) ++ uart_write_wakeup(port); ++ ++ if (uart_circ_empty(xmit)) ++ usart3_stop_tx(port); ++ ++ /* ++ * It could be that xmit is being updated right now. If so, ++ * start_tx() will be called shortly. ++ */ ++ if (status & USART3_BIT(TXBUFE)) ++ usart3_writel(up, IDR, USART3_BIT(ENDTX)); ++} ++ ++static void consume_rx_buffer(struct uart_port *port, struct pt_regs *regs) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ struct tty_struct *tty = port->info->tty; ++ unsigned long head, tail; ++ int len; ++ int again; ++ ++ do { ++ /* ++ * Re-arm the timeout before we decide how many ++ * characters to read. ++ */ ++ usart3_writel(up, CR, USART3_BIT(STTTO)); ++ ++ head = rx_dma_get_head(up); ++ ++ tail = up->rx_tail; ++ if (tail & RX_BUFFER_SIZE) ++ head += RX_BUFFER_SIZE; ++ ++ if (head == tail) ++ break; ++ ++ dma_sync_single_for_cpu(port->dev, up->rx_dma + tail, ++ head - tail, DMA_FROM_DEVICE); ++ ++ if (uart_handle_sysrq_char(port, up->rx_buffer[tail], ++ regs)) { ++ tail++; ++ if (head == tail) ++ goto update_tail; ++ } ++ ++ len = tty_insert_flip_string(tty, up->rx_buffer + tail, ++ head - tail); ++ port->icount.rx += len; ++ tail += len; ++ if (!(head & (RX_BUFFER_SIZE - 1)) && tail != head) { ++ /* ++ * head has wrapped, but there isn't enough ++ * room in the buffer to handle all the ++ * characters. We must recycle this buffer in ++ * order to clear the interrupt. ++ */ ++ tty_insert_flip_char(tty, 0, TTY_OVERRUN); ++ tail = head; ++ } ++ ++ update_tail: ++ again = rx_dma_update_tail(up, tail); ++ } while (again); ++ ++ tty_flip_buffer_push(tty); ++} ++ ++/* ++ * This is the serial driver's interrupt routine ++ */ ++static irqreturn_t usart3_interrupt(int irq, void *dev_id, ++ struct pt_regs *regs) ++{ ++ struct uart_port *port = dev_id; ++ struct usart3_port *up = to_usart3_port(port); ++ u32 status, mask, pending; ++ irqreturn_t ret = IRQ_NONE; ++ ++ spin_lock(&port->lock); ++ ++ status = usart3_readl(up, CSR); ++ mask = usart3_readl(up, IMR); ++ pending = status & mask; ++ if (unlikely(!pending)) ++ goto out; ++ ++ ret = IRQ_HANDLED; ++ ++ do { ++ /* ++ * Consume the buffer and flip buffers if necessary. ++ */ ++ consume_rx_buffer(port, regs); ++ ++ /* Clear any break and error flags */ ++ usart3_writel(up, CR, USART3_BIT(RSTSTA)); ++ ++ if (pending & (USART3_BIT(OVRE) ++ | USART3_BIT(FRAME) ++ | USART3_BIT(PARE))) ++ handle_rx_error(port, status); ++ ++ if (pending & USART3_BIT(RXBRK)) { ++ if (up->break_active) { ++ up->break_active = 0; ++ } else { ++ up->break_active = 1; ++ port->icount.brk++; ++ uart_handle_break(port); ++ } ++ } ++ ++ if (pending & USART3_BIT(RIIC)) ++ port->icount.rng++; ++ if (pending & USART3_BIT(DSRIC)) ++ port->icount.dsr++; ++ if (pending & USART3_BIT(DCDIC)) { ++ port->icount.dcd++; ++ uart_handle_dcd_change ++ (port, status & USART3_BIT(DCD)); ++ } ++ if (pending & USART3_BIT(CTSIC)) { ++ port->icount.cts++; ++ uart_handle_cts_change ++ (port, status & USART3_BIT(CTS)); ++ } ++ if (pending & (USART3_BIT(RIIC) ++ | USART3_BIT(DSRIC) ++ | USART3_BIT(DCDIC) ++ | USART3_BIT(CTSIC))) ++ wake_up_interruptible(&port->info->delta_msr_wait); ++ ++ if (pending & USART3_BIT(ENDTX)) ++ handle_pdc_endtx(port, status); ++ ++ status = usart3_readl(up, CSR); ++ pending = status & usart3_readl(up, IMR); ++ } while (pending); ++ ++out: ++ spin_unlock(&port->lock); ++ return ret; ++} ++ ++/* ++ * Return TIOCSER_TEMT when transmitter is not busy ++ */ ++static unsigned int usart3_tx_empty(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ unsigned int ret = 0; ++ ++ if (usart3_readl(up, CSR) & USART3_BIT(TXEMPTY)) ++ ret = TIOCSER_TEMT; ++ ++ pr_debug("usart3: tx_empty returned %x\n", ret); ++ ++ return ret; ++} ++ ++static unsigned int usart3_get_mctrl(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ unsigned int ret = 0; ++ unsigned int status; ++ ++ status = usart3_readl(up, CSR); ++ if (status & USART3_BIT(DCD)) ++ ret |= TIOCM_CD; ++ if (status & USART3_BIT(CTS)) ++ ret |= TIOCM_CTS; ++ if (status & USART3_BIT(DSR)) ++ ret |= TIOCM_DSR; ++ if (status & USART3_BIT(RI)) ++ ret |= TIOCM_RI; ++ ++ pr_debug("usart3: get_mctrl returned %x\n", ret); ++ ++ return ret; ++} ++ ++static void usart3_set_mctrl(struct uart_port *port, unsigned int mctrl) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ unsigned int control = 0; ++ ++ pr_debug("usart3: set_mctrl %x\n", mctrl); ++ ++ if (mctrl & TIOCM_RTS) ++ control |= USART3_BIT(RTSEN); ++ else ++ control |= USART3_BIT(RTSDIS); ++ ++ if (mctrl & TIOCM_DTR) ++ control |= USART3_BIT(DTREN); ++ else ++ control |= USART3_BIT(DTRDIS); ++ ++ usart3_writel(up, CR, control); ++} ++ ++static void usart3_break_ctl(struct uart_port *port, int break_state) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ ++ pr_debug("usart3: break_ctl %u\n", break_state); ++ if (break_state != 0) ++ usart3_writel(up, CR, USART3_BIT(STTBRK)); ++ else ++ usart3_writel(up, CR, USART3_BIT(STPBRK)); ++} ++ ++static int usart3_startup(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ int ret; ++ ++ pr_debug("usart3: startup\n"); ++ ++ up->break_active = 0; ++ ++ /* Set up interrupt handler */ ++ ret = request_irq(port->irq, usart3_interrupt, 0, ++ port->info->tty->name, port); ++ if (ret) { ++ printk(KERN_ERR "usart3: Unable to request irq %d\n", ++ port->irq); ++ return ret; ++ } ++ ++ up->rx_dma = dma_map_single(port->dev, up->rx_buffer, ++ 2 * RX_BUFFER_SIZE, DMA_FROM_DEVICE); ++ up->tx_dma = dma_map_single(port->dev, port->info->xmit.buf, ++ UART_XMIT_SIZE, DMA_TO_DEVICE); ++ ++ /* Initialize the PDC for RX (TX is done in start_tx) */ ++ up->rx_tail = 0; ++ usart3_writel(up, RPR, up->rx_dma); ++ usart3_writel(up, RCR, RX_BUFFER_SIZE); ++ usart3_writel(up, RNPR, up->rx_dma + RX_BUFFER_SIZE); ++ usart3_writel(up, RNCR, RX_BUFFER_SIZE); ++ usart3_writel(up, PTCR, USART3_BIT(RXTEN)); ++ ++ /* Reset DMA state */ ++ usart3_writel(up, TNCR, 0); ++ usart3_writel(up, TCR, 0); ++ up->tx_dma_head = port->info->xmit.tail; ++ ++ /* ++ * Set a suitable timeout. 2000 bit periods corresponds to ++ * about 17 ms at 115200 bps ++ */ ++ usart3_writel(up, RTOR, 2000); ++ ++ /* Reset and enable receiver and transmitter */ ++ usart3_writel(up, CR, (USART3_BIT(RSTRX) ++ | USART3_BIT(RSTTX) ++ | USART3_BIT(RSTSTA))); ++ usart3_writel(up, CR, (USART3_BIT(RXEN) ++ | USART3_BIT(TXEN))); ++ ++ /* Enable timeout, end of rx, break and error interrupts */ ++ usart3_writel(up, IER, (USART3_BIT(TIMEOUT) ++ | USART3_BIT(ENDRX) ++ | USART3_BIT(RXBRK) ++ | USART3_BIT(OVRE) ++ | USART3_BIT(FRAME) ++ | USART3_BIT(PARE))); ++ ++ /* Arm the timeout counter */ ++ usart3_writel(up, CR, USART3_BIT(STTTO)); ++ ++ return 0; ++} ++ ++static void usart3_shutdown(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ ++ pr_debug("usart3: shutdown\n"); ++ ++ /* Disable all interrupts and reset any error flags */ ++ usart3_writel(up, IDR, -1L); ++ usart3_writel(up, CR, USART3_BIT(RSTSTA)); ++ ++ dma_unmap_single(port->dev, up->rx_dma, 2 * RX_BUFFER_SIZE, ++ DMA_FROM_DEVICE); ++ dma_unmap_single(port->dev, up->tx_dma, UART_XMIT_SIZE, ++ DMA_TO_DEVICE); ++ ++ free_irq(port->irq, port); ++} ++ ++static void usart3_set_termios(struct uart_port *port, struct termios *termios, ++ struct termios *old) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ unsigned int baud, quot, mode = 0; ++ unsigned int imr, flags; ++ ++ pr_debug("usart3: set_termios\n"); ++ ++ switch (termios->c_cflag & CSIZE) { ++ case CS5: ++ mode |= USART3_BF(CHRL, USART3_CHRL_5); ++ break; ++ case CS6: ++ mode |= USART3_BF(CHRL, USART3_CHRL_6); ++ break; ++ case CS7: ++ mode |= USART3_BF(CHRL, USART3_CHRL_7); ++ break; ++ default: ++ mode |= USART3_BF(CHRL, USART3_CHRL_8); ++ break; ++ } ++ ++ if (termios->c_cflag & CSTOPB) ++ mode |= USART3_BF(NBSTOP, USART3_NBSTOP_2); ++ ++ if (termios->c_cflag & PARENB) { ++ if (termios->c_cflag & PARODD) ++ mode |= USART3_BF(PAR, USART3_PAR_ODD); ++ else ++ mode |= USART3_BF(PAR, USART3_PAR_EVEN); ++ } else { ++ mode |= USART3_BF(PAR, USART3_PAR_NONE); ++ } ++ ++ /* ++ * Ask the core to calculate the divisor for us. ++ */ ++ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); ++ quot = uart_get_divisor(port, baud); ++ ++ /* Bits to ignore, timeout, etc. TBD */ ++ ++ /* ++ * Save and disable interrupts ++ */ ++ spin_lock_irqsave(&port->lock, flags); ++ imr = usart3_readl(up, IMR); ++ usart3_writel(up, IDR, -1L); ++ spin_unlock_irqrestore(&port->lock, flags); ++ ++ /* ++ * Make sure transmitter is empty. If BRGR == 0, it is safest ++ * to do a reset, since waiting for the transmitter to be ++ * empty will take forever. ++ */ ++ if (usart3_readl(up, BRGR) != 0) { ++ while (!(usart3_readl(up, CSR) & USART3_BIT(TXRDY))) ++ barrier(); ++ } else { ++ usart3_writel(up, CR, (USART3_BIT(RSTTX) ++ | USART3_BIT(RSTRX))); ++ } ++ ++ pr_debug("usart3: Setting BRGR to %u (baud rate %u)...\n", quot, baud); ++ ++ /* Disable receiver and transmitter */ ++ usart3_writel(up, CR, (USART3_BIT(TXDIS) ++ | USART3_BIT(RXDIS))); ++ ++ /* Set the parity, stop bits and data size */ ++ usart3_writel(up, MR, mode); ++ ++ /* Set the baud rate and enable receiver and transmitter */ ++ usart3_writel(up, BRGR, quot); ++ usart3_writel(up, CR, (USART3_BIT(TXEN) ++ | USART3_BIT(RXEN))); ++ ++ /* Restore interrupts */ ++ usart3_writel(up, IER, imr); ++} ++ ++static const char *usart3_type(struct uart_port *port) ++{ ++ return "USART3"; ++} ++ ++static void usart3_release_port(struct uart_port *port) ++{ ++ pr_debug("usart3: release_port\n"); ++ iounmap(port->membase); ++ port->flags |= UPF_IOREMAP; ++} ++ ++static int usart3_request_port(struct uart_port *port) ++{ ++ struct usart3_port *up = to_usart3_port(port); ++ ++ /* TODO: remove this */ ++ pr_debug("usart3: request_port\n"); ++ if (port->flags & UPF_IOREMAP) { ++ port->membase = ioremap(port->mapbase, up->mapsize); ++ up->regs = port->membase; ++ port->flags &= ~UPF_IOREMAP; ++ } ++ return 0; ++} ++ ++static void usart3_config_port(struct uart_port *port, int flags) ++{ ++ pr_debug("usart3: config_port\n"); ++ if (flags & UART_CONFIG_TYPE) { ++ if (usart3_request_port(port) == 0) ++ port->type = PORT_USART3; ++ } ++} ++ ++static int usart3_verify_port(struct uart_port *port, struct serial_struct *ser) ++{ ++ int ret = 0; ++ ++ if (ser->type != PORT_UNKNOWN && ser->type != PORT_USART3) ++ ret = -EINVAL; ++ if (port->irq != ser->irq) ++ ret = -EINVAL; ++ if (ser->io_type != SERIAL_IO_MEM) ++ ret = -EINVAL; ++ if (port->uartclk / 16 != ser->baud_base) ++ ret = -EINVAL; ++ if ((void *)port->mapbase != ser->iomem_base) ++ ret = -EINVAL; ++ if (ser->hub6 != 0) ++ ret = -EINVAL; ++ ++ pr_debug("usart3_verify_port returned %d\n", ret); ++ ++ return ret; ++} ++ ++static struct uart_ops usart3_pops = { ++ .tx_empty = usart3_tx_empty, ++ .set_mctrl = usart3_set_mctrl, ++ .get_mctrl = usart3_get_mctrl, ++ .stop_tx = usart3_stop_tx, ++ .start_tx = usart3_start_tx, ++ .stop_rx = usart3_stop_rx, ++ .enable_ms = usart3_enable_ms, ++ .break_ctl = usart3_break_ctl, ++ .startup = usart3_startup, ++ .shutdown = usart3_shutdown, ++ .flush_buffer = usart3_flush_buffer, ++ .set_termios = usart3_set_termios, ++ .type = usart3_type, ++ .release_port = usart3_release_port, ++ .request_port = usart3_request_port, ++ .config_port = usart3_config_port, ++ .verify_port = usart3_verify_port, ++}; ++ ++static int __devinit initialize_port(struct usart3_port *up, ++ struct platform_device *pdev) ++{ ++ struct uart_port *port = &up->uart; ++ struct resource *regs; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) ++ return -ENXIO; ++ ++ spin_lock_init(&port->lock); ++ ++ up->mck = clk_get(&pdev->dev, "usart"); ++ if (IS_ERR(up->mck)) ++ return PTR_ERR(up->mck); ++ clk_enable(up->mck); ++ ++ port->mapbase = regs->start; ++ up->mapsize = regs->end - regs->start + 1; ++ port->irq = platform_get_irq(pdev, 0); ++ ++ port->uartclk = clk_get_rate(up->mck); ++ port->iotype = SERIAL_IO_MEM; ++ port->flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP; ++ port->ops = &usart3_pops; ++ port->line = pdev->id; ++ port->dev = &pdev->dev; ++ ++ return 0; ++} ++ ++static struct usart3_port usart3_ports[NR_PORTS]; ++ ++#ifdef CONFIG_SERIAL_ATMEL_CONSOLE ++ ++static void usart3_console_write(struct console *console, const char *string, ++ unsigned int len) ++{ ++ struct usart3_port *up = &usart3_ports[console->index]; ++ unsigned int imr, i; ++ unsigned long flags, ptsr; ++ ++ /* ++ * Save IMR, then disable interrupts ++ */ ++ local_irq_save(flags); ++ imr = usart3_readl(up, IMR); ++ usart3_writel(up, IDR, ~0UL); ++ local_irq_restore(flags); ++ ++ /* ++ * Save PDC state and disable PDC transmission ++ */ ++ ptsr = usart3_readl(up, PTSR); ++ usart3_writel(up, PTCR, USART3_BIT(TXTDIS)); ++ ++ /* ++ * Now, do each character ++ */ ++ for (i = 0; i < len; i++, string++) { ++ char c = *string; ++ ++ /* ++ * If we're sending LF, send CR first... ++ */ ++ if (c == '\n') { ++ while (!(usart3_readl(up, CSR) ++ & USART3_BIT(TXRDY))) ++ ; ++ usart3_writel(up, THR, '\r'); ++ } ++ while (!(usart3_readl(up, CSR) & USART3_BIT(TXRDY))) ++ ; ++ usart3_writel(up, THR, c); ++ } ++ ++ /* ++ * Wait for transmitter to become empty and restore the IMR ++ * and PDC state. ++ */ ++ while (!(usart3_readl(up, CSR) & USART3_BIT(TXRDY))) ++ ; ++ ++ usart3_writel(up, PTCR, ptsr & USART3_BIT(TXTEN)); ++ usart3_writel(up, IER, imr); ++} ++ ++static int __init usart3_console_setup(struct console *console, ++ char *options) ++{ ++ struct platform_device *pdev; ++ struct usart3_port *up; ++ struct uart_port *port; ++ int baud = 115200; ++ int bits = 8; ++ int parity = 'n'; ++ int flow = 'n'; ++ int ret; ++ ++ if (console->index >= NR_PORTS) { ++ printk(KERN_ERR ++ "Can't use USART%u for console: index >= NR_PORTS\n", ++ console->index); ++ return -ENODEV; ++ } ++ ++ pdev = at91_default_console_device; ++ if (!pdev) ++ return -ENXIO; ++ ++ up = &usart3_ports[console->index]; ++ port = &up->uart; ++ ++ ret = initialize_port(up, pdev); ++ if (ret) ++ return ret; ++ ++ port->membase = ioremap(port->mapbase, up->mapsize); ++ ret = -ENOMEM; ++ if (!port->membase) ++ goto out_disable_clk; ++ ++ up->regs = port->membase; ++ ++ /* Set a fixed baud rate for now */ ++ usart3_writel(up, BRGR, 2); ++ ++ /* Make sure all interrupts are disabled and reset/enable the USART */ ++ usart3_writel(up, IDR, -1L); ++ usart3_writel(up, CR, (USART3_BIT(RSTRX) ++ | USART3_BIT(RSTTX) ++ | USART3_BIT(RSTSTA))); ++ usart3_writel(up, CR, (USART3_BIT(RXEN) ++ | USART3_BIT(TXEN))); ++ ++ if (options) ++ uart_parse_options(options, &baud, &parity, &bits, &flow); ++ ++ return uart_set_options(port, console, baud, parity, bits, flow); ++ ++out_disable_clk: ++ clk_disable(up->mck); ++ clk_put(up->mck); ++ return ret; ++} ++ ++static struct uart_driver usart3_reg; ++static struct console usart3_console = { ++ .name = "ttyUS", ++ .write = usart3_console_write, ++ .device = uart_console_device, ++ .setup = usart3_console_setup, ++ .flags = CON_PRINTBUFFER, ++ .index = -1, ++ .data = &usart3_reg, ++}; ++ ++static int __init usart3_console_init(void) ++{ ++ register_console(&usart3_console); ++ return 0; ++} ++console_initcall(usart3_console_init); ++ ++#define USART3_CONSOLE &usart3_console ++ ++#else ++#define USART3_CONSOLE NULL ++#endif ++ ++static struct uart_driver usart3_reg = { ++ .owner = THIS_MODULE, ++ .driver_name = "serial", ++ .dev_name = "ttyUS", ++ .major = SERIAL_USART3_MAJOR, ++ .minor = MINOR_START, ++ .nr = NR_PORTS, ++ .cons = USART3_CONSOLE, ++}; ++ ++static int usart3_serial_suspend(struct platform_device *pdev, ++ pm_message_t state) ++{ ++ struct usart3_port *port = platform_get_drvdata(pdev); ++ int retval = 0; ++ ++ if (port) ++ retval = uart_suspend_port(&usart3_reg, &port->uart); ++ ++ return retval; ++} ++ ++static int usart3_serial_resume(struct platform_device *pdev) ++{ ++ struct usart3_port *port = platform_get_drvdata(pdev); ++ int retval = 0; ++ ++ if (port) ++ retval = uart_resume_port(&usart3_reg, &port->uart); ++ ++ return retval; ++} ++ ++static int __devinit usart3_serial_probe(struct platform_device *pdev) ++{ ++ struct usart3_port *up; ++ int ret; ++ ++ if (pdev->id >= NR_PORTS) { ++ printk(KERN_WARNING ++ "Ignoring USART%u, as NR_PORTS is only %u\n", ++ pdev->id, NR_PORTS); ++ return -ENOMEM; ++ } ++ ++ up = &usart3_ports[pdev->id]; ++ ++ /* ++ * If the port has already been set up as a console, we ++ * shouldn't enable it again. ++ */ ++ if (!up->uart.uartclk) { ++ ret = initialize_port(up, pdev); ++ if (ret) ++ goto out; ++ } ++ ++ /* ++ * The RX buffer must be cacheline aligned. If it's not, ++ * invalidating the cache could be disastrous... ++ * ++ * Fortunately, kmalloc() always returns cache-aligned memory. ++ */ ++ ret = -ENOMEM; ++ up->rx_buffer = kmalloc(2 * RX_BUFFER_SIZE, GFP_KERNEL); ++ if (!up->rx_buffer) ++ goto out_disable_clk; ++ ++ ret = uart_add_one_port(&usart3_reg, &up->uart); ++ if (ret) ++ goto out_free_rx_buffer; ++ ++ platform_set_drvdata(pdev, up); ++ ++ return 0; ++ ++out_free_rx_buffer: ++ kfree(up->rx_buffer); ++out_disable_clk: ++ clk_disable(up->mck); ++ clk_put(up->mck); ++out: ++ return ret; ++} ++ ++static int __devexit usart3_serial_remove(struct platform_device *pdev) ++{ ++ struct usart3_port *port = platform_get_drvdata(pdev); ++ int retval = 0; ++ ++ platform_set_drvdata(pdev, NULL); ++ ++ if (port) { ++ retval = uart_remove_one_port(&usart3_reg, &port->uart); ++ clk_disable(port->mck); ++ clk_put(port->mck); ++ kfree(port->rx_buffer); ++ kfree(port); ++ } ++ ++ return retval; ++} ++ ++static struct platform_driver usart3_serial_driver = { ++ .probe = usart3_serial_probe, ++ .remove = __devexit_p(usart3_serial_remove), ++ .suspend = usart3_serial_suspend, ++ .resume = usart3_serial_resume, ++ .driver = { ++ .name = "usart", ++ }, ++}; ++ ++static int __init usart3_init(void) ++{ ++ int ret; ++ ++ printk(KERN_INFO "Serial: Atmel USART3 driver\n"); ++ ++ ret = uart_register_driver(&usart3_reg); ++ if (ret) ++ return ret; ++ ++ ret = platform_driver_register(&usart3_serial_driver); ++ if (ret) ++ uart_unregister_driver(&usart3_reg); ++ ++ return ret; ++} ++ ++static void __exit usart3_exit(void) ++{ ++ platform_driver_unregister(&usart3_serial_driver); ++ uart_unregister_driver(&usart3_reg); ++} ++ ++module_init(usart3_init); ++module_exit(usart3_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_DESCRIPTION("Atmel USART3 serial driver"); ++MODULE_AUTHOR("Haavard Skinnemoen "); +Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.h 2006-11-02 16:37:02.000000000 +0100 +@@ -0,0 +1,290 @@ ++/* ++ * Register definitions for USART3 ++ * ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_USART3_H__ ++#define __ASM_AVR32_USART3_H__ ++ ++/* USART3 register offsets */ ++#define USART3_CR 0x0000 ++#define USART3_MR 0x0004 ++#define USART3_IER 0x0008 ++#define USART3_IDR 0x000c ++#define USART3_IMR 0x0010 ++#define USART3_CSR 0x0014 ++#define USART3_RHR 0x0018 ++#define USART3_THR 0x001c ++#define USART3_BRGR 0x0020 ++#define USART3_RTOR 0x0024 ++#define USART3_TTGR 0x0028 ++#define USART3_FIDI 0x0040 ++#define USART3_NER 0x0044 ++#define USART3_XXR 0x0048 ++#define USART3_IFR 0x004c ++ ++/* PDC register offsets */ ++#define USART3_RPR 0x100 ++#define USART3_RCR 0x104 ++#define USART3_TPR 0x108 ++#define USART3_TCR 0x10c ++#define USART3_RNPR 0x110 ++#define USART3_RNCR 0x114 ++#define USART3_TNPR 0x118 ++#define USART3_TNCR 0x11c ++#define USART3_PTCR 0x120 ++#define USART3_PTSR 0x124 ++ ++/* Bitfields in CR */ ++#define USART3_RSTRX_OFFSET 2 ++#define USART3_RSTRX_SIZE 1 ++#define USART3_RSTTX_OFFSET 3 ++#define USART3_RSTTX_SIZE 1 ++#define USART3_RXEN_OFFSET 4 ++#define USART3_RXEN_SIZE 1 ++#define USART3_RXDIS_OFFSET 5 ++#define USART3_RXDIS_SIZE 1 ++#define USART3_TXEN_OFFSET 6 ++#define USART3_TXEN_SIZE 1 ++#define USART3_TXDIS_OFFSET 7 ++#define USART3_TXDIS_SIZE 1 ++#define USART3_RSTSTA_OFFSET 8 ++#define USART3_RSTSTA_SIZE 1 ++#define USART3_STTBRK_OFFSET 9 ++#define USART3_STTBRK_SIZE 1 ++#define USART3_STPBRK_OFFSET 10 ++#define USART3_STPBRK_SIZE 1 ++#define USART3_STTTO_OFFSET 11 ++#define USART3_STTTO_SIZE 1 ++#define USART3_SENDA_OFFSET 12 ++#define USART3_SENDA_SIZE 1 ++#define USART3_RSTIT_OFFSET 13 ++#define USART3_RSTIT_SIZE 1 ++#define USART3_RSTNACK_OFFSET 14 ++#define USART3_RSTNACK_SIZE 1 ++#define USART3_RETTO_OFFSET 15 ++#define USART3_RETTO_SIZE 1 ++#define USART3_DTREN_OFFSET 16 ++#define USART3_DTREN_SIZE 1 ++#define USART3_DTRDIS_OFFSET 17 ++#define USART3_DTRDIS_SIZE 1 ++#define USART3_RTSEN_OFFSET 18 ++#define USART3_RTSEN_SIZE 1 ++#define USART3_RTSDIS_OFFSET 19 ++#define USART3_RTSDIS_SIZE 1 ++#define USART3_COMM_TX_OFFSET 30 ++#define USART3_COMM_TX_SIZE 1 ++#define USART3_COMM_RX_OFFSET 31 ++#define USART3_COMM_RX_SIZE 1 ++ ++/* Bitfields in MR */ ++#define USART3_USART_MODE_OFFSET 0 ++#define USART3_USART_MODE_SIZE 4 ++#define USART3_USCLKS_OFFSET 4 ++#define USART3_USCLKS_SIZE 2 ++#define USART3_CHRL_OFFSET 6 ++#define USART3_CHRL_SIZE 2 ++#define USART3_SYNC_OFFSET 8 ++#define USART3_SYNC_SIZE 1 ++#define USART3_PAR_OFFSET 9 ++#define USART3_PAR_SIZE 3 ++#define USART3_NBSTOP_OFFSET 12 ++#define USART3_NBSTOP_SIZE 2 ++#define USART3_CHMODE_OFFSET 14 ++#define USART3_CHMODE_SIZE 2 ++#define USART3_MSBF_OFFSET 16 ++#define USART3_MSBF_SIZE 1 ++#define USART3_MODE9_OFFSET 17 ++#define USART3_MODE9_SIZE 1 ++#define USART3_CLKO_OFFSET 18 ++#define USART3_CLKO_SIZE 1 ++#define USART3_OVER_OFFSET 19 ++#define USART3_OVER_SIZE 1 ++#define USART3_INACK_OFFSET 20 ++#define USART3_INACK_SIZE 1 ++#define USART3_DSNACK_OFFSET 21 ++#define USART3_DSNACK_SIZE 1 ++#define USART3_MAX_ITERATION_OFFSET 24 ++#define USART3_MAX_ITERATION_SIZE 3 ++#define USART3_FILTER_OFFSET 28 ++#define USART3_FILTER_SIZE 1 ++ ++/* Bitfields in CSR */ ++#define USART3_RXRDY_OFFSET 0 ++#define USART3_RXRDY_SIZE 1 ++#define USART3_TXRDY_OFFSET 1 ++#define USART3_TXRDY_SIZE 1 ++#define USART3_RXBRK_OFFSET 2 ++#define USART3_RXBRK_SIZE 1 ++#define USART3_ENDRX_OFFSET 3 ++#define USART3_ENDRX_SIZE 1 ++#define USART3_ENDTX_OFFSET 4 ++#define USART3_ENDTX_SIZE 1 ++#define USART3_OVRE_OFFSET 5 ++#define USART3_OVRE_SIZE 1 ++#define USART3_FRAME_OFFSET 6 ++#define USART3_FRAME_SIZE 1 ++#define USART3_PARE_OFFSET 7 ++#define USART3_PARE_SIZE 1 ++#define USART3_TIMEOUT_OFFSET 8 ++#define USART3_TIMEOUT_SIZE 1 ++#define USART3_TXEMPTY_OFFSET 9 ++#define USART3_TXEMPTY_SIZE 1 ++#define USART3_ITERATION_OFFSET 10 ++#define USART3_ITERATION_SIZE 1 ++#define USART3_TXBUFE_OFFSET 11 ++#define USART3_TXBUFE_SIZE 1 ++#define USART3_RXBUFF_OFFSET 12 ++#define USART3_RXBUFF_SIZE 1 ++#define USART3_NACK_OFFSET 13 ++#define USART3_NACK_SIZE 1 ++#define USART3_RIIC_OFFSET 16 ++#define USART3_RIIC_SIZE 1 ++#define USART3_DSRIC_OFFSET 17 ++#define USART3_DSRIC_SIZE 1 ++#define USART3_DCDIC_OFFSET 18 ++#define USART3_DCDIC_SIZE 1 ++#define USART3_CTSIC_OFFSET 19 ++#define USART3_CTSIC_SIZE 1 ++#define USART3_RI_OFFSET 20 ++#define USART3_RI_SIZE 1 ++#define USART3_DSR_OFFSET 21 ++#define USART3_DSR_SIZE 1 ++#define USART3_DCD_OFFSET 22 ++#define USART3_DCD_SIZE 1 ++#define USART3_CTS_OFFSET 23 ++#define USART3_CTS_SIZE 1 ++ ++/* Bitfields in RHR */ ++#define USART3_RXCHR_OFFSET 0 ++#define USART3_RXCHR_SIZE 9 ++ ++/* Bitfields in THR */ ++#define USART3_TXCHR_OFFSET 0 ++#define USART3_TXCHR_SIZE 9 ++ ++/* Bitfields in BRGR */ ++#define USART3_CD_OFFSET 0 ++#define USART3_CD_SIZE 16 ++ ++/* Bitfields in RTOR */ ++#define USART3_TO_OFFSET 0 ++#define USART3_TO_SIZE 16 ++ ++/* Bitfields in TTGR */ ++#define USART3_TG_OFFSET 0 ++#define USART3_TG_SIZE 8 ++ ++/* Bitfields in FIDI */ ++#define USART3_FI_DI_RATIO_OFFSET 0 ++#define USART3_FI_DI_RATIO_SIZE 11 ++ ++/* Bitfields in NER */ ++#define USART3_NB_ERRORS_OFFSET 0 ++#define USART3_NB_ERRORS_SIZE 8 ++ ++/* Bitfields in XXR */ ++#define USART3_XOFF_OFFSET 0 ++#define USART3_XOFF_SIZE 8 ++#define USART3_XON_OFFSET 8 ++#define USART3_XON_SIZE 8 ++ ++/* Bitfields in IFR */ ++#define USART3_IRDA_FILTER_OFFSET 0 ++#define USART3_IRDA_FILTER_SIZE 8 ++ ++/* Bitfields in PTCR/PTSR (PDC) */ ++#define USART3_RXTEN_OFFSET 0 ++#define USART3_RXTEN_SIZE 1 ++#define USART3_RXTDIS_OFFSET 1 ++#define USART3_RXTDIS_SIZE 1 ++#define USART3_TXTEN_OFFSET 8 ++#define USART3_TXTEN_SIZE 1 ++#define USART3_TXTDIS_OFFSET 9 ++#define USART3_TXTDIS_SIZE 1 ++ ++/* Constants for USART_MODE */ ++#define USART3_USART_MODE_NORMAL 0 ++#define USART3_USART_MODE_RS485 1 ++#define USART3_USART_MODE_HARDWARE 2 ++#define USART3_USART_MODE_MODEM 3 ++#define USART3_USART_MODE_ISO7816_T0 4 ++#define USART3_USART_MODE_ISO7816_T1 6 ++#define USART3_USART_MODE_IRDA 8 ++ ++/* Constants for USCLKS */ ++#define USART3_USCLKS_MCK 0 ++#define USART3_USCLKS_MCK_DIV 1 ++#define USART3_USCLKS_SCK 3 ++ ++/* Constants for CHRL */ ++#define USART3_CHRL_5 0 ++#define USART3_CHRL_6 1 ++#define USART3_CHRL_7 2 ++#define USART3_CHRL_8 3 ++ ++/* Constants for PAR */ ++#define USART3_PAR_EVEN 0 ++#define USART3_PAR_ODD 1 ++#define USART3_PAR_SPACE 2 ++#define USART3_PAR_MARK 3 ++#define USART3_PAR_NONE 4 ++#define USART3_PAR_MULTI 6 ++ ++/* Constants for NBSTOP */ ++#define USART3_NBSTOP_1 0 ++#define USART3_NBSTOP_1_5 1 ++#define USART3_NBSTOP_2 2 ++ ++/* Constants for CHMODE */ ++#define USART3_CHMODE_NORMAL 0 ++#define USART3_CHMODE_ECHO 1 ++#define USART3_CHMODE_LOCAL_LOOP 2 ++#define USART3_CHMODE_REMOTE_LOOP 3 ++ ++/* Constants for MSBF */ ++#define USART3_MSBF_LSBF 0 ++#define USART3_MSBF_MSBF 1 ++ ++/* Constants for OVER */ ++#define USART3_OVER_X16 0 ++#define USART3_OVER_X8 1 ++ ++/* Constants for CD */ ++#define USART3_CD_DISABLE 0 ++#define USART3_CD_BYPASS 1 ++ ++/* Constants for TO */ ++#define USART3_TO_DISABLE 0 ++ ++/* Constants for TG */ ++#define USART3_TG_DISABLE 0 ++ ++/* Constants for FI_DI_RATIO */ ++#define USART3_FI_DI_RATIO_DISABLE 0 ++ ++/* Bit manipulation macros */ ++#define USART3_BIT(name) \ ++ (1 << USART3_##name##_OFFSET) ++#define USART3_BF(name,value) \ ++ (((value) & ((1 << USART3_##name##_SIZE) - 1)) \ ++ << USART3_##name##_OFFSET) ++#define USART3_BFEXT(name,value) \ ++ (((value) >> USART3_##name##_OFFSET) \ ++ & ((1 << USART3_##name##_SIZE) - 1)) ++#define USART3_BFINS(name,value,old) \ ++ (((old) & ~(((1 << USART3_##name##_SIZE) - 1) \ ++ << USART3_##name##_OFFSET)) \ ++ | USART3_BF(name,value)) ++ ++/* Register access macros */ ++#define usart3_readl(port,reg) \ ++ __raw_readl((port)->regs + USART3_##reg) ++#define usart3_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + USART3_##reg) ++ ++#endif /* __ASM_AVR32_USART3_H__ */ diff --git a/packages/linux/linux-2.6.18/atmel-version.patch b/packages/linux/linux-2.6.18/atmel-version.patch new file mode 100644 index 0000000000..e72ff55d27 --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel-version.patch @@ -0,0 +1,17 @@ +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: linux-2.6.18-avr32/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/Makefile 2006-09-20 05:42:06.000000000 +0200 ++++ linux-2.6.18-avr32/Makefile 2006-09-20 13:30:33.000000000 +0200 +@@ -1,7 +1,7 @@ + VERSION = 2 + PATCHLEVEL = 6 + SUBLEVEL = 18 +-EXTRAVERSION = ++EXTRAVERSION = -at0 + NAME=Avast! A bilge rat! + + # *DOCUMENTATION* diff --git a/packages/linux/linux-2.6.18/atmel_spi-handle-rx-overrun.patch b/packages/linux/linux-2.6.18/atmel_spi-handle-rx-overrun.patch new file mode 100644 index 0000000000..3bfbbee9aa --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel_spi-handle-rx-overrun.patch @@ -0,0 +1,200 @@ +--- + drivers/spi/atmel_spi.c | 140 ++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 100 insertions(+), 40 deletions(-) + +Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/spi/atmel_spi.c 2007-01-15 15:35:38.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.c 2007-01-16 13:26:32.000000000 +0100 +@@ -156,7 +156,7 @@ static void atmel_spi_next_xfer(struct s + */ + spi_writel(as, TNCR, 0); + spi_writel(as, RNCR, 0); +- imr = SPI_BIT(ENDRX); ++ imr = SPI_BIT(ENDRX) | SPI_BIT(OVRES); + + dev_dbg(&msg->spi->dev, + "start xfer %p: len %u tx %p/%08x rx %p/%08x imr %08x\n", +@@ -209,6 +209,43 @@ static void atmel_spi_dma_map_xfer(struc + } + } + ++static void atmel_spi_dma_unmap_xfer(struct spi_master *master, ++ struct spi_transfer *xfer) ++{ ++ if (xfer->tx_dma != INVALID_DMA_ADDRESS) ++ dma_unmap_single(master->cdev.dev, xfer->tx_dma, ++ xfer->len, DMA_TO_DEVICE); ++ if (xfer->rx_dma != INVALID_DMA_ADDRESS) ++ dma_unmap_single(master->cdev.dev, xfer->rx_dma, ++ xfer->len, DMA_FROM_DEVICE); ++} ++ ++static void atmel_spi_msg_done(struct spi_master *master, ++ struct atmel_spi *as, ++ struct spi_message *msg, ++ int status) ++{ ++ cs_deactivate(msg->spi); ++ list_del(&msg->queue); ++ msg->status = status; ++ ++ dev_dbg(master->cdev.dev, ++ "xfer complete: %u bytes transferred\n", ++ msg->actual_length); ++ ++ spin_unlock(&as->lock); ++ msg->complete(msg->context); ++ spin_lock(&as->lock); ++ ++ as->current_transfer = NULL; ++ ++ /* continue; complete() may have queued requests */ ++ if (list_empty(&as->queue) || as->stopping) ++ spi_writel(as, PTCR, SPI_BIT(RXTDIS) | SPI_BIT(TXTDIS)); ++ else ++ atmel_spi_next_message(master); ++} ++ + static irqreturn_t + atmel_spi_interrupt(int irq, void *dev_id, struct pt_regs *regs) + { +@@ -219,19 +256,71 @@ atmel_spi_interrupt(int irq, void *dev_i + u32 status, pending, imr; + int ret = IRQ_NONE; + ++ spin_lock(&as->lock); ++ ++ xfer = as->current_transfer; ++ msg = list_entry(as->queue.next, struct spi_message, queue); ++ + imr = spi_readl(as, IMR); + status = spi_readl(as, SR); + pending = status & imr; + pr_debug("spi irq: stat %05x imr %05x pend %05x\n", status, imr, pending); + +- if (pending & (SPI_BIT(ENDTX) | SPI_BIT(ENDRX))) { ++ if (pending & SPI_BIT(OVRES)) { ++ int timeout; ++ + ret = IRQ_HANDLED; + +- spi_writel(as, IDR, pending); +- spin_lock(&as->lock); ++ spi_writel(as, IDR, (SPI_BIT(ENDTX) | SPI_BIT(ENDRX) ++ | SPI_BIT(OVRES))); ++ ++ /* ++ * When we get an overrun, we disregard the current ++ * transfer. Data will not be copied back from any ++ * bounce buffer and msg->actual_len will not be ++ * updated with the last xfer. ++ * ++ * We will also not process any remaning transfers in ++ * the message. ++ * ++ * First, stop the transfer and unmap the DMA buffers. ++ */ ++ spi_writel(as, PTCR, SPI_BIT(RXTDIS) | SPI_BIT(TXTDIS)); ++ if (!msg->is_dma_mapped) ++ atmel_spi_dma_unmap_xfer(master, xfer); ++ ++ /* REVISIT: udelay in irq is unfriendly */ ++ if (xfer->delay_usecs) ++ udelay(xfer->delay_usecs); + +- xfer = as->current_transfer; +- msg = list_entry(as->queue.next, struct spi_message, queue); ++ dev_warn(master->cdev.dev, "fifo overrun (%u/%u remaining)\n", ++ spi_readl(as, TCR), spi_readl(as, RCR)); ++ ++ /* ++ * Clean up DMA registers and make sure the data ++ * registers are empty. ++ */ ++ spi_writel(as, RNCR, 0); ++ spi_writel(as, TNCR, 0); ++ spi_writel(as, RCR, 0); ++ spi_writel(as, TCR, 0); ++ for (timeout = 1000; timeout; timeout--) ++ if (spi_readl(as, SR) & SPI_BIT(TXEMPTY)) ++ break; ++ if (!timeout) ++ dev_warn(master->cdev.dev, ++ "timeout waiting for TXEMPTY"); ++ while (spi_readl(as, SR) & SPI_BIT(RDRF)) ++ spi_readl(as, RDR); ++ ++ /* Clear any overrun happening while cleaning up */ ++ spi_readl(as, SR); ++ ++ atmel_spi_msg_done(master, as, msg, -EIO); ++ } else if (pending & (SPI_BIT(ENDTX) | SPI_BIT(ENDRX))) { ++ ret = IRQ_HANDLED; ++ ++ spi_writel(as, IDR, pending); + + /* + * If the rx buffer wasn't aligned, we used a bounce +@@ -254,46 +343,16 @@ pr_debug("spi irq: stat %05x imr %05x pe + if (as->remaining_bytes == 0) { + msg->actual_length += xfer->len; + +- if (!msg->is_dma_mapped) { +- if (xfer->tx_dma != INVALID_DMA_ADDRESS) +- dma_unmap_single(master->cdev.dev, +- xfer->tx_dma, +- xfer->len, +- DMA_TO_DEVICE); +- if (xfer->rx_dma != INVALID_DMA_ADDRESS) +- dma_unmap_single(master->cdev.dev, +- xfer->rx_dma, +- xfer->len, +- DMA_FROM_DEVICE); +- } ++ if (!msg->is_dma_mapped) ++ atmel_spi_dma_unmap_xfer(master, xfer); + + /* REVISIT: udelay in irq is unfriendly */ + if (xfer->delay_usecs) + udelay(xfer->delay_usecs); + + if (msg->transfers.prev == &xfer->transfer_list) { +- + /* report completed message */ +- cs_deactivate(msg->spi); +- list_del(&msg->queue); +- msg->status = 0; +- +- dev_dbg(master->cdev.dev, +- "xfer complete: %u bytes transferred\n", +- msg->actual_length); +- +- spin_unlock(&as->lock); +- msg->complete(msg->context); +- spin_lock(&as->lock); +- +- as->current_transfer = NULL; +- +- /* continue; complete() may have queued requests */ +- if (list_empty(&as->queue) || as->stopping) +- spi_writel(as, PTCR, SPI_BIT(RXTDIS) +- | SPI_BIT(TXTDIS)); +- else +- atmel_spi_next_message(master); ++ atmel_spi_msg_done(master, as, msg, 0); + } else { + if (xfer->cs_change) { + cs_deactivate(msg->spi); +@@ -315,9 +374,10 @@ pr_debug("spi irq: stat %05x imr %05x pe + */ + atmel_spi_next_xfer(master, msg); + } +- spin_unlock(&as->lock); + } + ++ spin_unlock(&as->lock); ++ + return ret; + } + diff --git a/packages/linux/linux-2.6.18/atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch b/packages/linux/linux-2.6.18/atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch new file mode 100644 index 0000000000..0cf703d3df --- /dev/null +++ b/packages/linux/linux-2.6.18/atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch @@ -0,0 +1,48 @@ +From e9bce56d6d8913505049cde45d800bb69943f166 Mon Sep 17 00:00:00 2001 +From: Nicolas Ferre +Date: Tue, 16 Jan 2007 15:15:36 +0100 +Subject: [ATMEL SPI] Send zeroes when tx_buf is not set + +send zeros when tx_buf is not set (according to the new spi +specification by D.Brownell) cf. + http://lkml.org/lkml/2006/12/22/171 + http://kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4b1badf5d9ddfc46ad075ca5bfc465972c85cc7c + +Signed-off-by: Haavard Skinnemoen +--- + drivers/spi/atmel_spi.c | 21 ++++++++++----------- + 1 file changed, 10 insertions(+), 11 deletions(-) + +Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/spi/atmel_spi.c 2007-01-16 18:20:06.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.c 2007-01-16 18:20:57.000000000 +0100 +@@ -120,18 +120,17 @@ static void atmel_spi_next_xfer(struct s + len = BUFFER_SIZE; + } + if (tx_dma == INVALID_DMA_ADDRESS) { +- if (xfer->tx_buf) { +- tx_dma = as->buffer_dma; +- if (len > BUFFER_SIZE) +- len = BUFFER_SIZE; ++ tx_dma = as->buffer_dma; ++ if (len > BUFFER_SIZE) ++ len = BUFFER_SIZE; ++ if (xfer->tx_buf) + memcpy(as->buffer, xfer->tx_buf, len); +- dma_sync_single_for_device(&as->pdev->dev, +- as->buffer_dma, len, +- DMA_TO_DEVICE); +- } else { +- /* Send undefined data; rx_dma is handy */ +- tx_dma = rx_dma; +- } ++ else ++ /* no tx data: send zeros */ ++ memset(as->buffer, 0, len); ++ dma_sync_single_for_device(&as->pdev->dev, ++ as->buffer_dma, len, ++ DMA_TO_DEVICE); + } + + spi_writel(as, RPR, rx_dma); diff --git a/packages/linux/linux-2.6.18/atngw100/.mtn2git_empty b/packages/linux/linux-2.6.18/atngw100/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.18/atstk1000-add-platform-data-for-mmc.patch b/packages/linux/linux-2.6.18/atstk1000-add-platform-data-for-mmc.patch new file mode 100644 index 0000000000..ed9e0f6c8c --- /dev/null +++ b/packages/linux/linux-2.6.18/atstk1000-add-platform-data-for-mmc.patch @@ -0,0 +1,25 @@ +Index: linux-2.6.18/arch/avr32/boards/atstk1000/atstk1002.c +=================================================================== +--- linux-2.6.18.orig/arch/avr32/boards/atstk1000/atstk1002.c 2006-12-20 12:25:25.000000000 +0100 ++++ linux-2.6.18/arch/avr32/boards/atstk1000/atstk1002.c 2006-12-20 12:26:09.000000000 +0100 +@@ -33,6 +33,11 @@ + }, + }; + ++static struct mmci_platform_data __initdata mmci0_data = { ++ .detect_pin = GPIO_PIO_NONE, ++ .wp_pin = GPIO_PIO_NONE, ++}; ++ + static int __init parse_tag_ethernet(struct tag *tag) + { + int i; +@@ -72,7 +77,7 @@ + + spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); + +- at32_add_device_mmci(0); ++ at32_add_device_mmci(0, &mmci0_data); + at32_add_device_spi(0); + at32_add_device_twi(0); + at32_add_device_usb(0); diff --git a/packages/linux/linux-2.6.18/atstk1000-board-fix-fbmem-setup.patch b/packages/linux/linux-2.6.18/atstk1000-board-fix-fbmem-setup.patch new file mode 100644 index 0000000000..185f7deb93 --- /dev/null +++ b/packages/linux/linux-2.6.18/atstk1000-board-fix-fbmem-setup.patch @@ -0,0 +1,14 @@ +Index: linux-2.6.18/arch/avr32/boards/atstk1000/setup.c +=================================================================== +--- linux-2.6.18.orig/arch/avr32/boards/atstk1000/setup.c 2007-01-11 11:30:42.000000000 +0100 ++++ linux-2.6.18/arch/avr32/boards/atstk1000/setup.c 2007-01-11 13:27:00.000000000 +0100 +@@ -37,7 +37,8 @@ + + for_each_online_pgdat(pgdat) { + if (fbmem_start >= pgdat->bdata->node_boot_start +- && fbmem_start <= pgdat->bdata->node_low_pfn) ++ && fbmem_start <= (pgdat->bdata->node_low_pfn ++ * PAGE_SIZE)) + reserve_bootmem_node(pgdat, fbmem_start, + fbmem_size); + } diff --git a/packages/linux/linux-2.6.18/atstk1000-instantiate-devices.patch b/packages/linux/linux-2.6.18/atstk1000-instantiate-devices.patch new file mode 100644 index 0000000000..9de779bc14 --- /dev/null +++ b/packages/linux/linux-2.6.18/atstk1000-instantiate-devices.patch @@ -0,0 +1,103 @@ +--- + arch/avr32/boards/atstk1000/Makefile | 2 +- + arch/avr32/boards/atstk1000/atstk1002.c | 24 +++++++++++++++++++++++- + arch/avr32/boards/atstk1000/spi.c | 27 --------------------------- + 3 files changed, 24 insertions(+), 29 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/atstk1002.c 2006-11-29 16:31:03.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c 2006-11-29 16:45:43.000000000 +0100 +@@ -7,12 +7,15 @@ + * 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 + +@@ -20,6 +23,16 @@ static struct eth_platform_data __initda + + extern struct lcdc_platform_data atstk1000_fb0_data; + ++static struct spi_board_info spi_board_info[] __initdata = { ++ { ++ .modalias = "ltv350qv", ++ .controller_data = (void *)GPIO_PIN_PA(4), ++ .max_speed_hz = 16000000, ++ .bus_num = 0, ++ .chip_select = 1, ++ }, ++}; ++ + static int __init parse_tag_ethernet(struct tag *tag) + { + int i; +@@ -54,9 +67,18 @@ static int __init atstk1002_init(void) + at32_add_device_usart(2); /* /dev/ttyS1 */ + at32_add_device_usart(3); /* /dev/ttyS2 */ + +- at32_add_device_eth(0, ð0_data); ++ if (eth_data[0].valid) ++ at32_add_device_eth(0, ð_data[0]); ++ ++ spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); ++ ++ at32_add_device_mmci(0); + at32_add_device_spi(0); ++ at32_add_device_twi(0); ++ at32_add_device_usb(0); + at32_add_device_lcdc(0, &atstk1000_fb0_data); ++ at32_add_device_dac(0); ++ at32_add_device_at73c213(0); + + return 0; + } +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/Makefile 2006-11-29 16:21:05.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/Makefile 2006-11-29 16:45:07.000000000 +0100 +@@ -1,2 +1,2 @@ +-obj-y += setup.o spi.o flash.o ++obj-y += setup.o flash.o + obj-$(CONFIG_BOARD_ATSTK1002) += atstk1002.o +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/spi.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/spi.c 2006-11-29 16:21:05.000000000 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 +@@ -1,27 +0,0 @@ +-/* +- * ATSTK1000 SPI devices +- * +- * Copyright (C) 2005 Atmel Norway +- * +- * 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 +- +-static struct spi_board_info spi_board_info[] __initdata = { +- { +- .modalias = "ltv350qv", +- .max_speed_hz = 16000000, +- .bus_num = 0, +- .chip_select = 1, +- }, +-}; +- +-static int board_init_spi(void) +-{ +- spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); +- return 0; +-} +-arch_initcall(board_init_spi); diff --git a/packages/linux/linux-2.6.18/avr32-arch-neutral-gpio-api.patch b/packages/linux/linux-2.6.18/avr32-arch-neutral-gpio-api.patch new file mode 100644 index 0000000000..049d5e3a94 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-arch-neutral-gpio-api.patch @@ -0,0 +1,598 @@ +From 05ac6cbfecf9e9b0ab46ba5f30eec8ea91b2987c Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Mon, 13 Nov 2006 10:23:15 +0100 +Subject: [AVR32] Implement arch-neutral GPIO API + +AVR32 implementation of the arch-neutral GPIO API described by +Documentation/gpio.txt. + +This also contains a few related changes to the irq handling and +pin configuration code, to make this actually usable. + +Signed-off-by: Haavard Skinnemoen +--- + arch/avr32/mach-at32ap/at32ap7000.c | 144 ++++++++++------------ + arch/avr32/mach-at32ap/pio.c | 186 +++++++++++++++++++++++++++-- + include/asm-avr32/arch-at32ap/at32ap7000.h | 26 ++++ + include/asm-avr32/arch-at32ap/gpio.h | 39 ++++++ + include/asm-avr32/arch-at32ap/irq.h | 11 + + include/asm-avr32/arch-at32ap/portmux.h | 16 -- + include/asm-avr32/gpio.h | 6 + include/asm-avr32/irq.h | 8 - + 8 files changed, 333 insertions(+), 103 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-29 16:21:12.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-29 16:22:14.000000000 +0100 +@@ -11,8 +11,9 @@ + + #include + ++#include + #include +-#include ++#include + #include + + #include "clock.h" +@@ -67,17 +68,8 @@ static struct clk devname##_##_name = { + .index = _index, \ + } + +-enum { +- PIOA, +- PIOB, +- PIOC, +- PIOD, +-}; +- +-enum { +- FUNC_A, +- FUNC_B, +-}; ++#define select_peripheral(pin, periph, pullup) \ ++ at32_select_periph(GPIO_PIN_##pin, GPIO_##periph, pullup) + + unsigned long at32ap7000_osc_rates[3] = { + [0] = 32768, +@@ -553,26 +545,26 @@ DEV_CLK(usart, usart3, pba, 6); + + static inline void configure_usart0_pins(void) + { +- portmux_set_func(PIOA, 8, FUNC_B); /* RXD */ +- portmux_set_func(PIOA, 9, FUNC_B); /* TXD */ ++ select_peripheral(PA(8), PERIPH_B, 0); /* RXD */ ++ select_peripheral(PA(9), PERIPH_B, 0); /* TXD */ + } + + static inline void configure_usart1_pins(void) + { +- portmux_set_func(PIOA, 17, FUNC_A); /* RXD */ +- portmux_set_func(PIOA, 18, FUNC_A); /* TXD */ ++ select_peripheral(PA(17), PERIPH_A, 0); /* RXD */ ++ select_peripheral(PA(18), PERIPH_A, 0); /* TXD */ + } + + static inline void configure_usart2_pins(void) + { +- portmux_set_func(PIOB, 26, FUNC_B); /* RXD */ +- portmux_set_func(PIOB, 27, FUNC_B); /* TXD */ ++ select_peripheral(PB(26), PERIPH_B, 0); /* RXD */ ++ select_peripheral(PB(27), PERIPH_B, 0); /* TXD */ + } + + static inline void configure_usart3_pins(void) + { +- portmux_set_func(PIOB, 18, FUNC_B); /* RXD */ +- portmux_set_func(PIOB, 17, FUNC_B); /* TXD */ ++ select_peripheral(PB(18), PERIPH_B, 0); /* RXD */ ++ select_peripheral(PB(17), PERIPH_B, 0); /* TXD */ + } + + static struct platform_device *setup_usart(unsigned int id) +@@ -644,27 +636,27 @@ at32_add_device_eth(unsigned int id, str + case 0: + pdev = &macb0_device; + +- portmux_set_func(PIOC, 3, FUNC_A); /* TXD0 */ +- portmux_set_func(PIOC, 4, FUNC_A); /* TXD1 */ +- portmux_set_func(PIOC, 7, FUNC_A); /* TXEN */ +- portmux_set_func(PIOC, 8, FUNC_A); /* TXCK */ +- portmux_set_func(PIOC, 9, FUNC_A); /* RXD0 */ +- portmux_set_func(PIOC, 10, FUNC_A); /* RXD1 */ +- portmux_set_func(PIOC, 13, FUNC_A); /* RXER */ +- portmux_set_func(PIOC, 15, FUNC_A); /* RXDV */ +- portmux_set_func(PIOC, 16, FUNC_A); /* MDC */ +- portmux_set_func(PIOC, 17, FUNC_A); /* MDIO */ ++ select_peripheral(PC(3), PERIPH_A, 0); /* TXD0 */ ++ select_peripheral(PC(4), PERIPH_A, 0); /* TXD1 */ ++ select_peripheral(PC(7), PERIPH_A, 0); /* TXEN */ ++ select_peripheral(PC(8), PERIPH_A, 0); /* TXCK */ ++ select_peripheral(PC(9), PERIPH_A, 0); /* RXD0 */ ++ select_peripheral(PC(10), PERIPH_A, 0); /* RXD1 */ ++ select_peripheral(PC(13), PERIPH_A, 0); /* RXER */ ++ select_peripheral(PC(15), PERIPH_A, 0); /* RXDV */ ++ select_peripheral(PC(16), PERIPH_A, 0); /* MDC */ ++ select_peripheral(PC(17), PERIPH_A, 0); /* MDIO */ + + if (!data->is_rmii) { +- portmux_set_func(PIOC, 0, FUNC_A); /* COL */ +- portmux_set_func(PIOC, 1, FUNC_A); /* CRS */ +- portmux_set_func(PIOC, 2, FUNC_A); /* TXER */ +- portmux_set_func(PIOC, 5, FUNC_A); /* TXD2 */ +- portmux_set_func(PIOC, 6, FUNC_A); /* TXD3 */ +- portmux_set_func(PIOC, 11, FUNC_A); /* RXD2 */ +- portmux_set_func(PIOC, 12, FUNC_A); /* RXD3 */ +- portmux_set_func(PIOC, 14, FUNC_A); /* RXCK */ +- portmux_set_func(PIOC, 18, FUNC_A); /* SPD */ ++ select_peripheral(PC(0), PERIPH_A, 0); /* COL */ ++ select_peripheral(PC(1), PERIPH_A, 0); /* CRS */ ++ select_peripheral(PC(2), PERIPH_A, 0); /* TXER */ ++ select_peripheral(PC(5), PERIPH_A, 0); /* TXD2 */ ++ select_peripheral(PC(6), PERIPH_A, 0); /* TXD3 */ ++ select_peripheral(PC(11), PERIPH_A, 0); /* RXD2 */ ++ select_peripheral(PC(12), PERIPH_A, 0); /* RXD3 */ ++ select_peripheral(PC(14), PERIPH_A, 0); /* RXCK */ ++ select_peripheral(PC(18), PERIPH_A, 0); /* SPD */ + } + break; + +@@ -695,12 +687,12 @@ struct platform_device *__init at32_add_ + switch (id) { + case 0: + pdev = &spi0_device; +- portmux_set_func(PIOA, 0, FUNC_A); /* MISO */ +- portmux_set_func(PIOA, 1, FUNC_A); /* MOSI */ +- portmux_set_func(PIOA, 2, FUNC_A); /* SCK */ +- portmux_set_func(PIOA, 3, FUNC_A); /* NPCS0 */ +- portmux_set_func(PIOA, 4, FUNC_A); /* NPCS1 */ +- portmux_set_func(PIOA, 5, FUNC_A); /* NPCS2 */ ++ select_peripheral(PA(0), PERIPH_A, 0); /* MISO */ ++ select_peripheral(PA(1), PERIPH_A, 0); /* MOSI */ ++ select_peripheral(PA(2), PERIPH_A, 0); /* SCK */ ++ select_peripheral(PA(3), PERIPH_A, 0); /* NPCS0 */ ++ select_peripheral(PA(4), PERIPH_A, 0); /* NPCS1 */ ++ select_peripheral(PA(5), PERIPH_A, 0); /* NPCS2 */ + break; + + default: +@@ -743,37 +735,37 @@ at32_add_device_lcdc(unsigned int id, st + switch (id) { + case 0: + pdev = &lcdc0_device; +- portmux_set_func(PIOC, 19, FUNC_A); /* CC */ +- portmux_set_func(PIOC, 20, FUNC_A); /* HSYNC */ +- portmux_set_func(PIOC, 21, FUNC_A); /* PCLK */ +- portmux_set_func(PIOC, 22, FUNC_A); /* VSYNC */ +- portmux_set_func(PIOC, 23, FUNC_A); /* DVAL */ +- portmux_set_func(PIOC, 24, FUNC_A); /* MODE */ +- portmux_set_func(PIOC, 25, FUNC_A); /* PWR */ +- portmux_set_func(PIOC, 26, FUNC_A); /* DATA0 */ +- portmux_set_func(PIOC, 27, FUNC_A); /* DATA1 */ +- portmux_set_func(PIOC, 28, FUNC_A); /* DATA2 */ +- portmux_set_func(PIOC, 29, FUNC_A); /* DATA3 */ +- portmux_set_func(PIOC, 30, FUNC_A); /* DATA4 */ +- portmux_set_func(PIOC, 31, FUNC_A); /* DATA5 */ +- portmux_set_func(PIOD, 0, FUNC_A); /* DATA6 */ +- portmux_set_func(PIOD, 1, FUNC_A); /* DATA7 */ +- portmux_set_func(PIOD, 2, FUNC_A); /* DATA8 */ +- portmux_set_func(PIOD, 3, FUNC_A); /* DATA9 */ +- portmux_set_func(PIOD, 4, FUNC_A); /* DATA10 */ +- portmux_set_func(PIOD, 5, FUNC_A); /* DATA11 */ +- portmux_set_func(PIOD, 6, FUNC_A); /* DATA12 */ +- portmux_set_func(PIOD, 7, FUNC_A); /* DATA13 */ +- portmux_set_func(PIOD, 8, FUNC_A); /* DATA14 */ +- portmux_set_func(PIOD, 9, FUNC_A); /* DATA15 */ +- portmux_set_func(PIOD, 10, FUNC_A); /* DATA16 */ +- portmux_set_func(PIOD, 11, FUNC_A); /* DATA17 */ +- portmux_set_func(PIOD, 12, FUNC_A); /* DATA18 */ +- portmux_set_func(PIOD, 13, FUNC_A); /* DATA19 */ +- portmux_set_func(PIOD, 14, FUNC_A); /* DATA20 */ +- portmux_set_func(PIOD, 15, FUNC_A); /* DATA21 */ +- portmux_set_func(PIOD, 16, FUNC_A); /* DATA22 */ +- portmux_set_func(PIOD, 17, FUNC_A); /* DATA23 */ ++ select_peripheral(PC(19), PERIPH_A, 0); /* CC */ ++ select_peripheral(PC(20), PERIPH_A, 0); /* HSYNC */ ++ select_peripheral(PC(21), PERIPH_A, 0); /* PCLK */ ++ select_peripheral(PC(22), PERIPH_A, 0); /* VSYNC */ ++ select_peripheral(PC(23), PERIPH_A, 0); /* DVAL */ ++ select_peripheral(PC(24), PERIPH_A, 0); /* MODE */ ++ select_peripheral(PC(25), PERIPH_A, 0); /* PWR */ ++ select_peripheral(PC(26), PERIPH_A, 0); /* DATA0 */ ++ select_peripheral(PC(27), PERIPH_A, 0); /* DATA1 */ ++ select_peripheral(PC(28), PERIPH_A, 0); /* DATA2 */ ++ select_peripheral(PC(29), PERIPH_A, 0); /* DATA3 */ ++ select_peripheral(PC(30), PERIPH_A, 0); /* DATA4 */ ++ select_peripheral(PC(31), PERIPH_A, 0); /* DATA5 */ ++ select_peripheral(PD(0), PERIPH_A, 0); /* DATA6 */ ++ select_peripheral(PD(1), PERIPH_A, 0); /* DATA7 */ ++ select_peripheral(PD(2), PERIPH_A, 0); /* DATA8 */ ++ select_peripheral(PD(3), PERIPH_A, 0); /* DATA9 */ ++ select_peripheral(PD(4), PERIPH_A, 0); /* DATA10 */ ++ select_peripheral(PD(5), PERIPH_A, 0); /* DATA11 */ ++ select_peripheral(PD(6), PERIPH_A, 0); /* DATA12 */ ++ select_peripheral(PD(7), PERIPH_A, 0); /* DATA13 */ ++ select_peripheral(PD(8), PERIPH_A, 0); /* DATA14 */ ++ select_peripheral(PD(9), PERIPH_A, 0); /* DATA15 */ ++ select_peripheral(PD(10), PERIPH_A, 0); /* DATA16 */ ++ select_peripheral(PD(11), PERIPH_A, 0); /* DATA17 */ ++ select_peripheral(PD(12), PERIPH_A, 0); /* DATA18 */ ++ select_peripheral(PD(13), PERIPH_A, 0); /* DATA19 */ ++ select_peripheral(PD(14), PERIPH_A, 0); /* DATA20 */ ++ select_peripheral(PD(15), PERIPH_A, 0); /* DATA21 */ ++ select_peripheral(PD(16), PERIPH_A, 0); /* DATA22 */ ++ select_peripheral(PD(17), PERIPH_A, 0); /* DATA23 */ + + clk_set_parent(&lcdc0_pixclk, &pll0); + clk_set_rate(&lcdc0_pixclk, clk_get_rate(&pll0)); +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 16:21:12.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-29 16:22:14.000000000 +0100 +@@ -13,10 +13,9 @@ + #include + #include + ++#include + #include + +-#include +- + #include "pio.h" + + #define MAX_NR_PIO_DEVICES 8 +@@ -25,28 +24,191 @@ struct pio_device { + void __iomem *regs; + const struct platform_device *pdev; + struct clk *clk; +- u32 alloc_mask; ++ u32 pinmux_mask; ++ u32 gpio_mask; + char name[32]; + }; + + static struct pio_device pio_dev[MAX_NR_PIO_DEVICES]; + +-void portmux_set_func(unsigned int portmux_id, unsigned int pin_id, +- unsigned int function_id) ++static struct pio_device *gpio_to_pio(unsigned int gpio) + { + struct pio_device *pio; +- u32 mask = 1 << pin_id; ++ unsigned int index; ++ ++ index = gpio >> 5; ++ if (index >= MAX_NR_PIO_DEVICES) ++ return NULL; ++ pio = &pio_dev[index]; ++ if (!pio->regs) ++ return NULL; ++ ++ return pio; ++} ++ ++/* Pin multiplexing API */ + +- BUG_ON(portmux_id >= MAX_NR_PIO_DEVICES); ++void __init at32_select_periph(unsigned int pin, unsigned int periph, ++ int use_pullup) ++{ ++ struct pio_device *pio; ++ unsigned int pin_index = pin & 0x1f; ++ u32 mask = 1 << pin_index; ++ ++ pio = gpio_to_pio(pin); ++ if (unlikely(!pio)) { ++ printk("pio: invalid pin %u\n", pin); ++ goto fail; ++ } + +- pio = &pio_dev[portmux_id]; ++ if (unlikely(test_and_set_bit(pin_index, &pio->pinmux_mask))) { ++ printk("%s: pin %u is busy\n", pio->name, pin_index); ++ goto fail; ++ } + +- if (function_id) ++ pio_writel(pio, PUER, mask); ++ if (periph) + pio_writel(pio, BSR, mask); + else + pio_writel(pio, ASR, mask); ++ + pio_writel(pio, PDR, mask); ++ if (!use_pullup) ++ pio_writel(pio, PUDR, mask); ++ ++ return; ++ ++fail: ++ dump_stack(); ++} ++ ++void __init at32_select_gpio(unsigned int pin, int enable_output, ++ int use_pullup) ++{ ++ struct pio_device *pio; ++ unsigned int pin_index = pin & 0x1f; ++ u32 mask = 1 << pin_index; ++ ++ pio = gpio_to_pio(pin); ++ if (unlikely(!pio)) { ++ printk("pio: invalid pin %u\n", pin); ++ goto fail; ++ } ++ ++ if (unlikely(test_and_set_bit(pin_index, &pio->pinmux_mask))) { ++ printk("%s: pin %u is busy\n", pio->name, pin_index); ++ goto fail; ++ } ++ ++ pio_writel(pio, PUER, mask); ++ if (enable_output) ++ pio_writel(pio, OER, mask); ++ else ++ pio_writel(pio, ODR, mask); ++ ++ pio_writel(pio, PER, mask); ++ if (!use_pullup) ++ pio_writel(pio, PUDR, mask); ++ ++ /* It's now allowed to use request_gpio on this pin */ ++ clear_bit(pin_index, &pio->gpio_mask); ++ ++ return; ++ ++fail: ++ dump_stack(); ++} ++ ++/* GPIO API */ ++ ++int gpio_request(unsigned int gpio, const char *label) ++{ ++ struct pio_device *pio; ++ unsigned int pin; ++ ++ pio = gpio_to_pio(gpio); ++ if (!pio) ++ return -ENODEV; ++ ++ pin = gpio & 0x1f; ++ if (test_and_set_bit(pin, &pio->gpio_mask)) ++ return -EBUSY; ++ ++ return 0; + } ++EXPORT_SYMBOL(gpio_request); ++ ++void gpio_free(unsigned int gpio) ++{ ++ struct pio_device *pio; ++ unsigned int pin; ++ ++ pio = gpio_to_pio(gpio); ++ if (!pio) { ++ printk(KERN_ERR ++ "gpio: attempted to free invalid pin %u\n", gpio); ++ return; ++ } ++ ++ pin = gpio & 0x1f; ++ if (!test_and_clear_bit(pin, &pio->gpio_mask)) ++ printk(KERN_ERR "gpio: freeing already-free pin %s[%u]\n", ++ pio->name, pin); ++} ++EXPORT_SYMBOL(gpio_free); ++ ++int gpio_direction_input(unsigned int gpio) ++{ ++ struct pio_device *pio; ++ unsigned int pin; ++ ++ pio = gpio_to_pio(gpio); ++ if (!pio) ++ return -ENODEV; ++ ++ pin = gpio & 0x1f; ++ pio_writel(pio, ODR, 1 << pin); ++ ++ return 0; ++} ++EXPORT_SYMBOL(gpio_direction_input); ++ ++int gpio_direction_output(unsigned int gpio) ++{ ++ struct pio_device *pio; ++ unsigned int pin; ++ ++ pio = gpio_to_pio(gpio); ++ if (!pio) ++ return -ENODEV; ++ ++ pin = gpio & 0x1f; ++ pio_writel(pio, OER, 1 << pin); ++ ++ return 0; ++} ++EXPORT_SYMBOL(gpio_direction_output); ++ ++int gpio_get_value(unsigned int gpio) ++{ ++ struct pio_device *pio = &pio_dev[gpio >> 5]; ++ ++ return (pio_readl(pio, PDSR) >> (gpio & 0x1f)) & 1; ++} ++EXPORT_SYMBOL(gpio_get_value); ++ ++void gpio_set_value(unsigned int gpio, int value) ++{ ++ struct pio_device *pio = &pio_dev[gpio >> 5]; ++ u32 mask; ++ ++ mask = 1 << (gpio & 0x1f); ++ if (value) ++ pio_writel(pio, SODR, mask); ++ else ++ pio_writel(pio, CODR, mask); ++} ++EXPORT_SYMBOL(gpio_set_value); + + static int __init pio_probe(struct platform_device *pdev) + { +@@ -113,6 +275,12 @@ void __init at32_init_pio(struct platfor + pio->pdev = pdev; + pio->regs = ioremap(regs->start, regs->end - regs->start + 1); + ++ /* ++ * request_gpio() is only valid for pins that have been ++ * configured as GPIO. ++ */ ++ pio->gpio_mask = ~0UL; ++ + pio_writel(pio, ODR, ~0UL); + pio_writel(pio, PER, ~0UL); + } +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at32ap7000.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at32ap7000.h 2006-11-29 16:22:14.000000000 +0100 +@@ -0,0 +1,26 @@ ++#ifndef __ASM_ARCH_AT32AP7000_H ++#define __ASM_ARCH_AT32AP7000_H ++ ++#define GPIO_PERIPH_A 0 ++#define GPIO_PERIPH_B 1 ++ ++#define NR_GPIO_CONTROLLERS 4 ++ ++/* ++ * Pin numbers identifying specific GPIO pins on the chip. They can ++ * also be converted to IRQ numbers by passing them through ++ * gpio_to_irq(). ++ */ ++#define GPIO_PIOA_BASE (0) ++#define GPIO_PIOB_BASE (GPIO_PIOA_BASE + 32) ++#define GPIO_PIOC_BASE (GPIO_PIOB_BASE + 32) ++#define GPIO_PIOD_BASE (GPIO_PIOC_BASE + 32) ++#define GPIO_PIOE_BASE (GPIO_PIOD_BASE + 32) ++ ++#define GPIO_PIN_PA(N) (GPIO_PIOA_BASE + (N)) ++#define GPIO_PIN_PB(N) (GPIO_PIOB_BASE + (N)) ++#define GPIO_PIN_PC(N) (GPIO_PIOC_BASE + (N)) ++#define GPIO_PIN_PD(N) (GPIO_PIOD_BASE + (N)) ++#define GPIO_PIN_PE(N) (GPIO_PIOE_BASE + (N)) ++ ++#endif /* __ASM_ARCH_AT32AP7000_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h 2006-11-29 16:22:14.000000000 +0100 +@@ -0,0 +1,39 @@ ++#ifndef __ASM_AVR32_GPIO_H ++#define __ASM_AVR32_GPIO_H ++ ++#include ++#include ++ ++/* ++ * Set up pin multiplexing, called from board init only. ++ * ++ * The following flags determine the initial state of the pin. ++ */ ++#define AT32_GPIOF_PULLUP 0x00000001 /* Enable pull-up */ ++#define AT32_GPIOF_OUTPUT 0x00000002 /* Enable output driver */ ++#define AT32_GPIOF_HIGH 0x00000004 /* Set output high */ ++ ++void at32_select_periph(unsigned int pin, unsigned int periph, ++ unsigned long flags); ++void at32_select_gpio(unsigned int pin, unsigned long flags); ++ ++/* Arch-neutral GPIO API */ ++int __must_check gpio_request(unsigned int gpio, const char *label); ++void gpio_free(unsigned int gpio); ++ ++int gpio_direction_input(unsigned int gpio); ++int gpio_direction_output(unsigned int gpio); ++int gpio_get_value(unsigned int gpio); ++void gpio_set_value(unsigned int gpio, int value); ++ ++static inline int gpio_to_irq(unsigned int gpio) ++{ ++ return gpio + GPIO_IRQ_BASE; ++} ++ ++static inline int irq_to_gpio(unsigned int irq) ++{ ++ return irq - GPIO_IRQ_BASE; ++} ++ ++#endif /* __ASM_AVR32_GPIO_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/irq.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/irq.h 2006-11-29 16:22:14.000000000 +0100 +@@ -0,0 +1,11 @@ ++#ifndef __ASM_AVR32_ARCH_IRQ_H ++#define __ASM_AVR32_ARCH_IRQ_H ++ ++#define EIM_IRQ_BASE NR_INTERNAL_IRQS ++#define NR_EIM_IRQS 32 ++#define GPIO_IRQ_BASE (EIM_IRQ_BASE + NR_EIM_IRQS) ++#define NR_GPIO_IRQS (4 * 32) ++ ++#define NR_IRQS (GPIO_IRQ_BASE + NR_GPIO_IRQS) ++ ++#endif /* __ASM_AVR32_ARCH_IRQ_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/portmux.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/portmux.h 2006-11-29 16:21:12.000000000 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 +@@ -1,16 +0,0 @@ +-/* +- * AT32 portmux interface. +- * +- * Copyright (C) 2006 Atmel 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. +- */ +-#ifndef __ASM_AVR32_AT32_PORTMUX_H__ +-#define __ASM_AVR32_AT32_PORTMUX_H__ +- +-void portmux_set_func(unsigned int portmux_id, unsigned int pin_id, +- unsigned int function_id); +- +-#endif /* __ASM_AVR32_AT32_PORTMUX_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/gpio.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/gpio.h 2006-11-29 16:22:14.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_GPIO_H ++#define __ASM_AVR32_GPIO_H ++ ++#include ++ ++#endif /* __ASM_AVR32_GPIO_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/irq.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/irq.h 2006-11-29 16:21:12.000000000 +0100 ++++ linux-2.6.18-avr32/include/asm-avr32/irq.h 2006-11-29 16:22:14.000000000 +0100 +@@ -2,8 +2,12 @@ + #define __ASM_AVR32_IRQ_H + + #define NR_INTERNAL_IRQS 64 +-#define NR_EXTERNAL_IRQS 64 +-#define NR_IRQS (NR_INTERNAL_IRQS + NR_EXTERNAL_IRQS) ++ ++#include ++ ++#ifndef NR_IRQS ++#define NR_IRQS (NR_INTERNAL_IRQS) ++#endif + + #define irq_canonicalize(i) (i) + diff --git a/packages/linux/linux-2.6.18/avr32-arch.patch b/packages/linux/linux-2.6.18/avr32-arch.patch new file mode 100644 index 0000000000..76e2b9f492 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-arch.patch @@ -0,0 +1,19628 @@ +From: Haavard Skinnemoen + +This adds support for the Atmel AVR32 architecture as well as the AT32AP7000 +CPU and the AT32STK1000 development board. + +AVR32 is a new high-performance 32-bit RISC microprocessor core, designed for +cost-sensitive embedded applications, with particular emphasis on low power +consumption and high code density. The AVR32 architecture is not binary +compatible with earlier 8-bit AVR architectures. + +The AVR32 architecture, including the instruction set, is described by the +AVR32 Architecture Manual, available from + +http://www.atmel.com/dyn/resources/prod_documents/doc32000.pdf + +The Atmel AT32AP7000 is the first CPU implementing the AVR32 architecture. It +features a 7-stage pipeline, 16KB instruction and data caches and a full +Memory Management Unit. It also comes with a large set of integrated +peripherals, many of which are shared with the AT91 ARM-based controllers from +Atmel. + +Full data sheet is available from + +http://www.atmel.com/dyn/resources/prod_documents/doc32003.pdf + +while the CPU core implementation including caches and MMU is documented by +the AVR32 AP Technical Reference, available from + +http://www.atmel.com/dyn/resources/prod_documents/doc32001.pdf + +Information about the AT32STK1000 development board can be found at + +http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3918 + +including a BSP CD image with an earlier version of this patch, development +tools (binaries and source/patches) and a root filesystem image suitable for +booting from SD card. + +Alternatively, there's a preliminary "getting started" guide available at +http://avr32linux.org/twiki/bin/view/Main/GettingStarted which provides links +to the sources and patches you will need in order to set up a cross-compiling +environment for avr32-linux. + +This patch, as well as the other patches included with the BSP and the +toolchain patches, is actively supported by Atmel Corporation. + +Signed-off-by: Haavard Skinnemoen +Signed-off-by: Andrew Morton +--- + + MAINTAINERS | 17 + arch/avr32/Kconfig | 199 +++++ + arch/avr32/Kconfig.debug | 19 + arch/avr32/Makefile | 89 ++ + arch/avr32/boards/atstk1000/Makefile | 2 + arch/avr32/boards/atstk1000/atstk1002.c | 37 + arch/avr32/boards/atstk1000/flash.c | 95 ++ + arch/avr32/boards/atstk1000/setup.c | 50 + + arch/avr32/boards/atstk1000/spi.c | 27 + arch/avr32/boot/images/Makefile | 60 + + arch/avr32/boot/u-boot/Makefile | 3 + arch/avr32/boot/u-boot/empty.S | 1 + arch/avr32/boot/u-boot/head.S | 60 + + arch/avr32/configs/atstk1002_defconfig | 754 +++++++++++++++++++ + arch/avr32/kernel/Makefile | 18 + arch/avr32/kernel/asm-offsets.c | 25 + arch/avr32/kernel/avr32_ksyms.c | 64 + + arch/avr32/kernel/cpu.c | 327 ++++++++ + arch/avr32/kernel/entry-avr32b.S | 678 +++++++++++++++++ + arch/avr32/kernel/head.S | 42 + + arch/avr32/kernel/init_task.c | 38 + arch/avr32/kernel/irq.c | 71 + + arch/avr32/kernel/kprobes.c | 270 +++++++ + arch/avr32/kernel/module.c | 324 ++++++++ + arch/avr32/kernel/process.c | 283 +++++++ + arch/avr32/kernel/ptrace.c | 371 +++++++++ + arch/avr32/kernel/semaphore.c | 148 +++ + arch/avr32/kernel/setup.c | 335 ++++++++ + arch/avr32/kernel/signal.c | 328 ++++++++ + arch/avr32/kernel/switch_to.S | 35 + arch/avr32/kernel/sys_avr32.c | 51 + + arch/avr32/kernel/syscall-stubs.S | 102 ++ + arch/avr32/kernel/syscall_table.S | 289 +++++++ + arch/avr32/kernel/time.c | 238 ++++++ + arch/avr32/kernel/traps.c | 425 +++++++++++ + arch/avr32/kernel/vmlinux.lds.c | 139 +++ + arch/avr32/lib/Makefile | 11 + arch/avr32/lib/__avr32_asr64.S | 31 + arch/avr32/lib/__avr32_lsl64.S | 31 + arch/avr32/lib/__avr32_lsr64.S | 31 + arch/avr32/lib/clear_user.S | 76 + + arch/avr32/lib/copy_user.S | 119 +++ + arch/avr32/lib/csum_partial.S | 47 + + arch/avr32/lib/csum_partial_copy_generic.S | 99 ++ + arch/avr32/lib/delay.c | 55 + + arch/avr32/lib/findbit.S | 155 ++++ + arch/avr32/lib/io-readsb.S | 49 + + arch/avr32/lib/io-readsl.S | 24 + arch/avr32/lib/io-readsw.S | 43 + + arch/avr32/lib/io-writesb.S | 52 + + arch/avr32/lib/io-writesl.S | 20 + arch/avr32/lib/io-writesw.S | 38 + arch/avr32/lib/libgcc.h | 33 + arch/avr32/lib/longlong.h | 98 ++ + arch/avr32/lib/memcpy.S | 62 + + arch/avr32/lib/memset.S | 72 + + arch/avr32/lib/strncpy_from_user.S | 60 + + arch/avr32/lib/strnlen_user.S | 67 + + arch/avr32/mach-at32ap/Makefile | 2 + arch/avr32/mach-at32ap/at32ap.c | 90 ++ + arch/avr32/mach-at32ap/at32ap7000.c | 876 +++++++++++++++++++++++ + arch/avr32/mach-at32ap/clock.c | 148 +++ + arch/avr32/mach-at32ap/clock.h | 30 + arch/avr32/mach-at32ap/extint.c | 189 ++++ + arch/avr32/mach-at32ap/hsmc.c | 164 ++++ + arch/avr32/mach-at32ap/hsmc.h | 127 +++ + arch/avr32/mach-at32ap/intc.c | 133 +++ + arch/avr32/mach-at32ap/intc.h | 329 ++++++++ + arch/avr32/mach-at32ap/pio.c | 118 +++ + arch/avr32/mach-at32ap/pio.h | 180 ++++ + arch/avr32/mach-at32ap/sm.h | 242 ++++++ + arch/avr32/mm/Makefile | 6 + arch/avr32/mm/cache.c | 150 +++ + arch/avr32/mm/clear_page.S | 25 + arch/avr32/mm/copy_page.S | 28 + arch/avr32/mm/dma-coherent.c | 139 +++ + arch/avr32/mm/fault.c | 315 ++++++++ + arch/avr32/mm/init.c | 481 ++++++++++++ + arch/avr32/mm/ioremap.c | 199 +++++ + arch/avr32/mm/tlb.c | 378 +++++++++ + include/asm-avr32/Kbuild | 3 + include/asm-avr32/a.out.h | 26 + include/asm-avr32/addrspace.h | 43 + + include/asm-avr32/arch-at32ap/at91rm9200_pdc.h | 36 + include/asm-avr32/arch-at32ap/at91rm9200_usart.h | 123 +++ + include/asm-avr32/arch-at32ap/board.h | 35 + include/asm-avr32/arch-at32ap/init.h | 21 + include/asm-avr32/arch-at32ap/portmux.h | 16 + include/asm-avr32/arch-at32ap/sm.h | 27 + include/asm-avr32/arch-at32ap/smc.h | 60 + + include/asm-avr32/asm.h | 102 ++ + include/asm-avr32/atomic.h | 201 +++++ + include/asm-avr32/auxvec.h | 4 + include/asm-avr32/bitops.h | 296 +++++++ + include/asm-avr32/bug.h | 47 + + include/asm-avr32/bugs.h | 15 + include/asm-avr32/byteorder.h | 25 + include/asm-avr32/cache.h | 29 + include/asm-avr32/cachectl.h | 11 + include/asm-avr32/cacheflush.h | 129 +++ + include/asm-avr32/checksum.h | 156 ++++ + include/asm-avr32/cputime.h | 6 + include/asm-avr32/current.h | 15 + include/asm-avr32/delay.h | 26 + include/asm-avr32/div64.h | 6 + include/asm-avr32/dma-mapping.h | 320 ++++++++ + include/asm-avr32/dma.h | 8 + include/asm-avr32/elf.h | 110 ++ + include/asm-avr32/emergency-restart.h | 6 + include/asm-avr32/errno.h | 6 + include/asm-avr32/fcntl.h | 6 + include/asm-avr32/futex.h | 6 + include/asm-avr32/hardirq.h | 34 + include/asm-avr32/hw_irq.h | 9 + include/asm-avr32/intc.h | 128 +++ + include/asm-avr32/io.h | 286 +++++++ + include/asm-avr32/ioctl.h | 6 + include/asm-avr32/ioctls.h | 83 ++ + include/asm-avr32/ipcbuf.h | 29 + include/asm-avr32/irq.h | 10 + include/asm-avr32/irqflags.h | 68 + + include/asm-avr32/kdebug.h | 38 + include/asm-avr32/kmap_types.h | 30 + include/asm-avr32/kprobes.h | 34 + include/asm-avr32/linkage.h | 7 + include/asm-avr32/local.h | 6 + include/asm-avr32/mach/serial_at91.h | 33 + include/asm-avr32/mman.h | 17 + include/asm-avr32/mmu.h | 10 + include/asm-avr32/mmu_context.h | 148 +++ + include/asm-avr32/module.h | 28 + include/asm-avr32/msgbuf.h | 31 + include/asm-avr32/mutex.h | 9 + include/asm-avr32/namei.h | 7 + include/asm-avr32/numnodes.h | 7 + include/asm-avr32/ocd.h | 78 ++ + include/asm-avr32/page.h | 112 ++ + include/asm-avr32/param.h | 23 + include/asm-avr32/pci.h | 8 + include/asm-avr32/percpu.h | 6 + include/asm-avr32/pgalloc.h | 96 ++ + include/asm-avr32/pgtable-2level.h | 47 + + include/asm-avr32/pgtable.h | 408 ++++++++++ + include/asm-avr32/poll.h | 27 + include/asm-avr32/posix_types.h | 129 +++ + include/asm-avr32/processor.h | 147 +++ + include/asm-avr32/ptrace.h | 154 ++++ + include/asm-avr32/resource.h | 6 + include/asm-avr32/scatterlist.h | 21 + include/asm-avr32/sections.h | 6 + include/asm-avr32/semaphore.h | 109 ++ + include/asm-avr32/sembuf.h | 25 + include/asm-avr32/setup.h | 141 +++ + include/asm-avr32/shmbuf.h | 42 + + include/asm-avr32/shmparam.h | 6 + include/asm-avr32/sigcontext.h | 34 + include/asm-avr32/siginfo.h | 6 + include/asm-avr32/signal.h | 168 ++++ + include/asm-avr32/socket.h | 53 + + include/asm-avr32/sockios.h | 12 + include/asm-avr32/stat.h | 79 ++ + include/asm-avr32/statfs.h | 6 + include/asm-avr32/string.h | 17 + include/asm-avr32/sysreg.h | 332 ++++++++ + include/asm-avr32/system.h | 155 ++++ + include/asm-avr32/termbits.h | 173 ++++ + include/asm-avr32/termios.h | 80 ++ + include/asm-avr32/thread_info.h | 106 ++ + include/asm-avr32/timex.h | 40 + + include/asm-avr32/tlb.h | 32 + include/asm-avr32/tlbflush.h | 40 + + include/asm-avr32/topology.h | 6 + include/asm-avr32/traps.h | 23 + include/asm-avr32/types.h | 70 + + include/asm-avr32/uaccess.h | 335 ++++++++ + include/asm-avr32/ucontext.h | 12 + include/asm-avr32/unaligned.h | 25 + include/asm-avr32/unistd.h | 387 ++++++++++ + include/asm-avr32/user.h | 64 + + include/linux/elf-em.h | 1 + lib/Kconfig.debug | 4 + 181 files changed, 18463 insertions(+), 2 deletions(-) + +Index: linux-2.6.18-avr32/MAINTAINERS +=================================================================== +--- linux-2.6.18-avr32.orig/MAINTAINERS 2006-12-04 09:32:57.000000000 +0100 ++++ linux-2.6.18-avr32/MAINTAINERS 2006-12-04 09:33:12.000000000 +0100 +@@ -435,6 +435,23 @@ W: http://people.redhat.com/sgrubb/audit + T: git kernel.org:/pub/scm/linux/kernel/git/dwmw2/audit-2.6.git + S: Maintained + ++AVR32 ARCHITECTURE ++P: Atmel AVR32 Support Team ++M: avr32@atmel.com ++P: Haavard Skinnemoen ++M: hskinnemoen@atmel.com ++W: http://www.atmel.com/products/AVR32/ ++W: http://avr32linux.org/ ++W: http://avrfreaks.net/ ++S: Supported ++ ++AVR32/AT32AP MACHINE SUPPORT ++P: Atmel AVR32 Support Team ++M: avr32@atmel.com ++P: Haavard Skinnemoen ++M: hskinnemoen@atmel.com ++S: Supported ++ + AX.25 NETWORK LAYER + P: Ralf Baechle + M: ralf@linux-mips.org +Index: linux-2.6.18-avr32/arch/avr32/Kconfig +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/Kconfig 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,199 @@ ++# ++# For a description of the syntax of this configuration file, ++# see Documentation/kbuild/kconfig-language.txt. ++# ++ ++mainmenu "Linux Kernel Configuration" ++ ++config AVR32 ++ bool ++ default y ++ # With EMBEDDED=n, we get lots of stuff automatically selected ++ # that we usually don't need on AVR32. ++ select EMBEDDED ++ help ++ AVR32 is a high-performance 32-bit RISC microprocessor core, ++ designed for cost-sensitive embedded applications, with particular ++ emphasis on low power consumption and high code density. ++ ++ There is an AVR32 Linux project with a web page at ++ http://avr32linux.org/. ++ ++config UID16 ++ bool ++ ++config GENERIC_HARDIRQS ++ bool ++ default y ++ ++config HARDIRQS_SW_RESEND ++ bool ++ default y ++ ++config GENERIC_IRQ_PROBE ++ bool ++ default y ++ ++config RWSEM_GENERIC_SPINLOCK ++ bool ++ default y ++ ++config GENERIC_TIME ++ bool ++ default y ++ ++config RWSEM_XCHGADD_ALGORITHM ++ bool ++ ++config GENERIC_BUST_SPINLOCK ++ bool ++ ++config GENERIC_ISA_DMA ++ bool ++ ++config GENERIC_HWEIGHT ++ bool ++ default y ++ ++config GENERIC_CALIBRATE_DELAY ++ bool ++ default y ++ ++source "init/Kconfig" ++ ++menu "System Type and features" ++ ++config SUBARCH_AVR32B ++ bool ++config MMU ++ bool ++config PERFORMANCE_COUNTERS ++ bool ++ ++config PLATFORM_AT32AP ++ bool ++ select SUBARCH_AVR32B ++ select MMU ++ select PERFORMANCE_COUNTERS ++ ++choice ++ prompt "AVR32 CPU type" ++ default CPU_AT32AP7000 ++ ++config CPU_AT32AP7000 ++ bool "AT32AP7000" ++ select PLATFORM_AT32AP ++endchoice ++ ++# ++# CPU Daughterboards for ATSTK1000 ++config BOARD_ATSTK1002 ++ bool ++ ++choice ++ prompt "AVR32 board type" ++ default BOARD_ATSTK1000 ++ ++config BOARD_ATSTK1000 ++ bool "ATSTK1000 evaluation board" ++ select BOARD_ATSTK1002 if CPU_AT32AP7000 ++endchoice ++ ++choice ++ prompt "Boot loader type" ++ default LOADER_U_BOOT ++ ++config LOADER_U_BOOT ++ bool "U-Boot (or similar) bootloader" ++endchoice ++ ++config LOAD_ADDRESS ++ hex ++ default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y ++ ++config ENTRY_ADDRESS ++ hex ++ default 0x90000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y ++ ++config PHYS_OFFSET ++ hex ++ default 0x10000000 if CPU_AT32AP7000=y ++ ++source "kernel/Kconfig.preempt" ++ ++config HAVE_ARCH_BOOTMEM_NODE ++ bool ++ default n ++ ++config ARCH_HAVE_MEMORY_PRESENT ++ bool ++ default n ++ ++config NEED_NODE_MEMMAP_SIZE ++ bool ++ default n ++ ++config ARCH_FLATMEM_ENABLE ++ bool ++ default y ++ ++config ARCH_DISCONTIGMEM_ENABLE ++ bool ++ default n ++ ++config ARCH_SPARSEMEM_ENABLE ++ bool ++ default n ++ ++source "mm/Kconfig" ++ ++config OWNERSHIP_TRACE ++ bool "Ownership trace support" ++ default y ++ help ++ Say Y to generate an Ownership Trace message on every context switch, ++ enabling Nexus-compliant debuggers to keep track of the PID of the ++ currently executing task. ++ ++# FPU emulation goes here ++ ++source "kernel/Kconfig.hz" ++ ++config CMDLINE ++ string "Default kernel command line" ++ default "" ++ help ++ If you don't have a boot loader capable of passing a command line string ++ to the kernel, you may specify one here. As a minimum, you should specify ++ the memory size and the root device (e.g., mem=8M, root=/dev/nfs). ++ ++endmenu ++ ++menu "Bus options" ++ ++config PCI ++ bool ++ ++source "drivers/pci/Kconfig" ++ ++source "drivers/pcmcia/Kconfig" ++ ++endmenu ++ ++menu "Executable file formats" ++source "fs/Kconfig.binfmt" ++endmenu ++ ++source "net/Kconfig" ++ ++source "drivers/Kconfig" ++ ++source "fs/Kconfig" ++ ++source "arch/avr32/Kconfig.debug" ++ ++source "security/Kconfig" ++ ++source "crypto/Kconfig" ++ ++source "lib/Kconfig" +Index: linux-2.6.18-avr32/arch/avr32/Kconfig.debug +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/Kconfig.debug 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,19 @@ ++menu "Kernel hacking" ++ ++config TRACE_IRQFLAGS_SUPPORT ++ bool ++ default y ++ ++source "lib/Kconfig.debug" ++ ++config KPROBES ++ bool "Kprobes" ++ depends on DEBUG_KERNEL ++ help ++ Kprobes allows you to trap at almost any kernel address and ++ execute a callback function. register_kprobe() establishes ++ a probepoint and specifies the callback. Kprobes is useful ++ for kernel debugging, non-intrusive instrumentation and testing. ++ If in doubt, say "N". ++ ++endmenu +Index: linux-2.6.18-avr32/arch/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/Makefile 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,89 @@ ++# ++# 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) 2004-2006 Atmel Corporation. ++ ++# Default target when executing plain make ++.PHONY: all ++all: uImage vmlinux.elf ++ ++KBUILD_DEFCONFIG := atstk1002_defconfig ++ ++CFLAGS += -pipe -fno-builtin -mno-pic ++AFLAGS += -mrelax -mno-pic ++CFLAGS_MODULE += -mno-relax ++LDFLAGS_vmlinux += --relax ++ ++cpuflags-$(CONFIG_CPU_AP7000) += -mcpu=ap7000 ++ ++CFLAGS += $(cpuflags-y) ++AFLAGS += $(cpuflags-y) ++ ++CHECKFLAGS += -D__avr32__ -D__BIG_ENDIAN ++ ++head-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/head.o ++head-y += arch/avr32/kernel/head.o ++core-$(CONFIG_PLATFORM_AT32AP) += arch/avr32/mach-at32ap/ ++core-$(CONFIG_BOARD_ATSTK1000) += arch/avr32/boards/atstk1000/ ++core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ ++core-y += arch/avr32/kernel/ ++core-y += arch/avr32/mm/ ++libs-y += arch/avr32/lib/ ++ ++archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap ++ ++include/asm-avr32/.arch: $(wildcard include/config/platform/*.h) include/config/auto.conf ++ @echo ' SYMLINK include/asm-avr32/arch -> include/asm-avr32/$(archincdir-y)' ++ifneq ($(KBUILD_SRC),) ++ $(Q)mkdir -p include/asm-avr32 ++ $(Q)ln -fsn $(srctree)/include/asm-avr32/$(archincdir-y) include/asm-avr32/arch ++else ++ $(Q)ln -fsn $(archincdir-y) include/asm-avr32/arch ++endif ++ @touch $@ ++ ++archprepare: include/asm-avr32/.arch ++ ++CLEAN_FILES += include/asm-avr32/.arch include/asm-avr32/arch ++ ++BOOT_TARGETS := vmlinux.elf vmlinux.bin uImage uImage.srec ++ ++.PHONY: $(BOOT_TARGETS) install ++ ++boot := arch/$(ARCH)/boot/images ++ ++ KBUILD_IMAGE := $(boot)/uImage ++vmlinux.elf: KBUILD_IMAGE := $(boot)/vmlinux.elf ++vmlinux.cso: KBUILD_IMAGE := $(boot)/vmlinux.cso ++uImage.srec: KBUILD_IMAGE := $(boot)/uImage.srec ++uImage: KBUILD_IMAGE := $(boot)/uImage ++ ++quiet_cmd_listing = LST $@ ++ cmd_listing = avr32-linux-objdump $(OBJDUMPFLAGS) -lS $< > $@ ++quiet_cmd_disasm = DIS $@ ++ cmd_disasm = avr32-linux-objdump $(OBJDUMPFLAGS) -d $< > $@ ++ ++vmlinux.elf vmlinux.bin uImage.srec uImage vmlinux.cso: vmlinux ++ $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ ++ ++install: vmlinux ++ $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@ ++ ++vmlinux.s: vmlinux ++ $(call if_changed,disasm) ++ ++vmlinux.lst: vmlinux ++ $(call if_changed,listing) ++ ++CLEAN_FILES += vmlinux.s vmlinux.lst ++ ++archclean: ++ $(Q)$(MAKE) $(clean)=$(boot) ++ ++define archhelp ++ @echo '* vmlinux.elf - ELF image with load address 0' ++ @echo ' vmlinux.cso - PathFinder CSO image' ++ @echo '* uImage - Create a bootable image for U-Boot' ++endef +Index: linux-2.6.18-avr32/arch/avr32/boot/images/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/boot/images/Makefile 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,60 @@ ++# ++# Copyright (C) 2004-2006 Atmel Corporation ++# ++# 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. ++# ++ ++MKIMAGE := $(srctree)/scripts/mkuboot.sh ++ ++extra-y := vmlinux.bin vmlinux.gz ++ ++OBJCOPYFLAGS_vmlinux.bin := -O binary ++$(obj)/vmlinux.bin: vmlinux FORCE ++ $(call if_changed,objcopy) ++ ++$(obj)/vmlinux.gz: $(obj)/vmlinux.bin FORCE ++ $(call if_changed,gzip) ++ ++quiet_cmd_uimage = UIMAGE $@ ++ cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A avr32 -O linux -T kernel \ ++ -C gzip -a $(CONFIG_LOAD_ADDRESS) -e $(CONFIG_ENTRY_ADDRESS) \ ++ -n 'Linux-$(KERNELRELEASE)' -d $< $@ ++ ++targets += uImage uImage.srec ++$(obj)/uImage: $(obj)/vmlinux.gz ++ $(call if_changed,uimage) ++ @echo ' Image $@ is ready' ++ ++OBJCOPYFLAGS_uImage.srec := -I binary -O srec ++$(obj)/uImage.srec: $(obj)/uImage ++ $(call if_changed,objcopy) ++ ++OBJCOPYFLAGS_vmlinux.elf := --change-section-lma .text-0x80000000 \ ++ --change-section-lma __ex_table-0x80000000 \ ++ --change-section-lma .rodata-0x80000000 \ ++ --change-section-lma .data-0x80000000 \ ++ --change-section-lma .init-0x80000000 \ ++ --change-section-lma .bss-0x80000000 \ ++ --change-section-lma __param-0x80000000 \ ++ --change-section-lma __ksymtab-0x80000000 \ ++ --change-section-lma __ksymtab_gpl-0x80000000 \ ++ --change-section-lma __kcrctab-0x80000000 \ ++ --change-section-lma __kcrctab_gpl-0x80000000 \ ++ --change-section-lma __ksymtab_strings-0x80000000 \ ++ --set-start 0xa0000000 ++$(obj)/vmlinux.elf: vmlinux FORCE ++ $(call if_changed,objcopy) ++ ++quiet_cmd_sfdwarf = SFDWARF $@ ++ cmd_sfdwarf = sfdwarf $< TO $@ GNUAVR IW $(SFDWARF_FLAGS) > $(obj)/sfdwarf.log ++ ++$(obj)/vmlinux.cso: $(obj)/vmlinux.elf FORCE ++ $(call if_changed,sfdwarf) ++ ++install: $(BOOTIMAGE) ++ sh $(srctree)/install-kernel.sh $< ++ ++# Generated files to be removed upon make clean ++clean-files := vmlinux.elf vmlinux.bin vmlinux.gz uImage uImage.srec +Index: linux-2.6.18-avr32/arch/avr32/boot/u-boot/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/boot/u-boot/Makefile 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,3 @@ ++extra-y := head.o ++ ++obj-y := empty.o +Index: linux-2.6.18-avr32/arch/avr32/boot/u-boot/empty.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/boot/u-boot/empty.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1 @@ ++/* Empty file */ +Index: linux-2.6.18-avr32/arch/avr32/boot/u-boot/head.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/boot/u-boot/head.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,60 @@ ++/* ++ * Startup code for use with the u-boot bootloader. ++ * ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++ /* ++ * The kernel is loaded where we want it to be and all caches ++ * have just been flushed. We get two parameters from u-boot: ++ * ++ * r12 contains a magic number (ATAG_MAGIC) ++ * r11 points to a tag table providing information about ++ * the system. ++ */ ++ .section .init.text,"ax" ++ .global _start ++_start: ++ /* Check if the boot loader actually provided a tag table */ ++ lddpc r0, magic_number ++ cp.w r12, r0 ++ brne no_tag_table ++ ++ /* Initialize .bss */ ++ lddpc r2, bss_start_addr ++ lddpc r3, end_addr ++ mov r0, 0 ++ mov r1, 0 ++1: st.d r2++, r0 ++ cp r2, r3 ++ brlo 1b ++ ++ /* ++ * Save the tag table address for later use. This must be done ++ * _after_ .bss has been initialized... ++ */ ++ lddpc r0, tag_table_addr ++ st.w r0[0], r11 ++ ++ /* Jump to loader-independent setup code */ ++ rjmp kernel_entry ++ ++ .align 2 ++magic_number: ++ .long ATAG_MAGIC ++tag_table_addr: ++ .long bootloader_tags ++bss_start_addr: ++ .long __bss_start ++end_addr: ++ .long _end ++ ++no_tag_table: ++ sub r12, pc, (. - 2f) ++ bral panic ++2: .asciz "Boot loader didn't provide correct magic number\n" +Index: linux-2.6.18-avr32/arch/avr32/kernel/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/Makefile 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,18 @@ ++# ++# Makefile for the Linux/AVR32 kernel. ++# ++ ++extra-y := head.o vmlinux.lds ++ ++obj-$(CONFIG_SUBARCH_AVR32B) += entry-avr32b.o ++obj-y += syscall_table.o syscall-stubs.o irq.o ++obj-y += setup.o traps.o semaphore.o ptrace.o ++obj-y += signal.o sys_avr32.o process.o time.o ++obj-y += init_task.o switch_to.o cpu.o ++obj-$(CONFIG_MODULES) += module.o avr32_ksyms.o ++obj-$(CONFIG_KPROBES) += kprobes.o ++ ++USE_STANDARD_AS_RULE := true ++ ++%.lds: %.lds.c FORCE ++ $(call if_changed_dep,cpp_lds_S) +Index: linux-2.6.18-avr32/arch/avr32/kernel/asm-offsets.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/asm-offsets.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,25 @@ ++/* ++ * Generate definitions needed by assembly language modules. ++ * This code generates raw asm output which is post-processed ++ * to extract and format the required data. ++ */ ++ ++#include ++ ++#define DEFINE(sym, val) \ ++ asm volatile("\n->" #sym " %0 " #val : : "i" (val)) ++ ++#define BLANK() asm volatile("\n->" : : ) ++ ++#define OFFSET(sym, str, mem) \ ++ DEFINE(sym, offsetof(struct str, mem)); ++ ++void foo(void) ++{ ++ OFFSET(TI_task, thread_info, task); ++ OFFSET(TI_exec_domain, thread_info, exec_domain); ++ OFFSET(TI_flags, thread_info, flags); ++ OFFSET(TI_cpu, thread_info, cpu); ++ OFFSET(TI_preempt_count, thread_info, preempt_count); ++ OFFSET(TI_restart_block, thread_info, restart_block); ++} +Index: linux-2.6.18-avr32/arch/avr32/kernel/avr32_ksyms.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/avr32_ksyms.c 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,64 @@ ++/* ++ * Export AVR32-specific functions for loadable modules. ++ * ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++/* ++ * GCC functions ++ */ ++extern unsigned long long __avr32_lsl64(unsigned long long u, unsigned long b); ++extern unsigned long long __avr32_lsr64(unsigned long long u, unsigned long b); ++extern unsigned long long __avr32_asr64(unsigned long long u, unsigned long b); ++EXPORT_SYMBOL(__avr32_lsl64); ++EXPORT_SYMBOL(__avr32_lsr64); ++EXPORT_SYMBOL(__avr32_asr64); ++ ++/* ++ * String functions ++ */ ++EXPORT_SYMBOL(memset); ++EXPORT_SYMBOL(memcpy); ++ ++/* ++ * Userspace access stuff. ++ */ ++EXPORT_SYMBOL(copy_from_user); ++EXPORT_SYMBOL(copy_to_user); ++EXPORT_SYMBOL(__copy_user); ++EXPORT_SYMBOL(strncpy_from_user); ++EXPORT_SYMBOL(__strncpy_from_user); ++EXPORT_SYMBOL(clear_user); ++EXPORT_SYMBOL(__clear_user); ++EXPORT_SYMBOL(csum_partial); ++EXPORT_SYMBOL(csum_partial_copy_generic); ++ ++/* Delay loops (lib/delay.S) */ ++EXPORT_SYMBOL(__ndelay); ++EXPORT_SYMBOL(__udelay); ++EXPORT_SYMBOL(__const_udelay); ++ ++/* Bit operations (lib/findbit.S) */ ++EXPORT_SYMBOL(find_first_zero_bit); ++EXPORT_SYMBOL(find_next_zero_bit); ++EXPORT_SYMBOL(find_first_bit); ++EXPORT_SYMBOL(find_next_bit); ++EXPORT_SYMBOL(generic_find_next_zero_le_bit); ++ ++/* I/O primitives (lib/io-*.S) */ ++EXPORT_SYMBOL(__raw_readsb); ++EXPORT_SYMBOL(__raw_readsw); ++EXPORT_SYMBOL(__raw_readsl); ++EXPORT_SYMBOL(__raw_writesb); ++EXPORT_SYMBOL(__raw_writesw); ++EXPORT_SYMBOL(__raw_writesl); +Index: linux-2.6.18-avr32/arch/avr32/kernel/cpu.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/cpu.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,327 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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 ++ ++static DEFINE_PER_CPU(struct cpu, cpu_devices); ++ ++#ifdef CONFIG_PERFORMANCE_COUNTERS ++ ++/* ++ * XXX: If/when a SMP-capable implementation of AVR32 will ever be ++ * made, we must make sure that the code executes on the correct CPU. ++ */ ++static ssize_t show_pc0event(struct sys_device *dev, char *buf) ++{ ++ unsigned long pccr; ++ ++ pccr = sysreg_read(PCCR); ++ return sprintf(buf, "0x%lx\n", (pccr >> 12) & 0x3f); ++} ++static ssize_t store_pc0event(struct sys_device *dev, const char *buf, ++ size_t count) ++{ ++ unsigned long val; ++ char *endp; ++ ++ val = simple_strtoul(buf, &endp, 0); ++ if (endp == buf || val > 0x3f) ++ return -EINVAL; ++ val = (val << 12) | (sysreg_read(PCCR) & 0xfffc0fff); ++ sysreg_write(PCCR, val); ++ return count; ++} ++static ssize_t show_pc0count(struct sys_device *dev, char *buf) ++{ ++ unsigned long pcnt0; ++ ++ pcnt0 = sysreg_read(PCNT0); ++ return sprintf(buf, "%lu\n", pcnt0); ++} ++static ssize_t store_pc0count(struct sys_device *dev, const char *buf, ++ size_t count) ++{ ++ unsigned long val; ++ char *endp; ++ ++ val = simple_strtoul(buf, &endp, 0); ++ if (endp == buf) ++ return -EINVAL; ++ sysreg_write(PCNT0, val); ++ ++ return count; ++} ++ ++static ssize_t show_pc1event(struct sys_device *dev, char *buf) ++{ ++ unsigned long pccr; ++ ++ pccr = sysreg_read(PCCR); ++ return sprintf(buf, "0x%lx\n", (pccr >> 18) & 0x3f); ++} ++static ssize_t store_pc1event(struct sys_device *dev, const char *buf, ++ size_t count) ++{ ++ unsigned long val; ++ char *endp; ++ ++ val = simple_strtoul(buf, &endp, 0); ++ if (endp == buf || val > 0x3f) ++ return -EINVAL; ++ val = (val << 18) | (sysreg_read(PCCR) & 0xff03ffff); ++ sysreg_write(PCCR, val); ++ return count; ++} ++static ssize_t show_pc1count(struct sys_device *dev, char *buf) ++{ ++ unsigned long pcnt1; ++ ++ pcnt1 = sysreg_read(PCNT1); ++ return sprintf(buf, "%lu\n", pcnt1); ++} ++static ssize_t store_pc1count(struct sys_device *dev, const char *buf, ++ size_t count) ++{ ++ unsigned long val; ++ char *endp; ++ ++ val = simple_strtoul(buf, &endp, 0); ++ if (endp == buf) ++ return -EINVAL; ++ sysreg_write(PCNT1, val); ++ ++ return count; ++} ++ ++static ssize_t show_pccycles(struct sys_device *dev, char *buf) ++{ ++ unsigned long pccnt; ++ ++ pccnt = sysreg_read(PCCNT); ++ return sprintf(buf, "%lu\n", pccnt); ++} ++static ssize_t store_pccycles(struct sys_device *dev, const char *buf, ++ size_t count) ++{ ++ unsigned long val; ++ char *endp; ++ ++ val = simple_strtoul(buf, &endp, 0); ++ if (endp == buf) ++ return -EINVAL; ++ sysreg_write(PCCNT, val); ++ ++ return count; ++} ++ ++static ssize_t show_pcenable(struct sys_device *dev, char *buf) ++{ ++ unsigned long pccr; ++ ++ pccr = sysreg_read(PCCR); ++ return sprintf(buf, "%c\n", (pccr & 1)?'1':'0'); ++} ++static ssize_t store_pcenable(struct sys_device *dev, const char *buf, ++ size_t count) ++{ ++ unsigned long pccr, val; ++ char *endp; ++ ++ val = simple_strtoul(buf, &endp, 0); ++ if (endp == buf) ++ return -EINVAL; ++ if (val) ++ val = 1; ++ ++ pccr = sysreg_read(PCCR); ++ pccr = (pccr & ~1UL) | val; ++ sysreg_write(PCCR, pccr); ++ ++ return count; ++} ++ ++static SYSDEV_ATTR(pc0event, 0600, show_pc0event, store_pc0event); ++static SYSDEV_ATTR(pc0count, 0600, show_pc0count, store_pc0count); ++static SYSDEV_ATTR(pc1event, 0600, show_pc1event, store_pc1event); ++static SYSDEV_ATTR(pc1count, 0600, show_pc1count, store_pc1count); ++static SYSDEV_ATTR(pccycles, 0600, show_pccycles, store_pccycles); ++static SYSDEV_ATTR(pcenable, 0600, show_pcenable, store_pcenable); ++ ++#endif /* CONFIG_PERFORMANCE_COUNTERS */ ++ ++static int __init topology_init(void) ++{ ++ int cpu; ++ ++ for_each_possible_cpu(cpu) { ++ struct cpu *c = &per_cpu(cpu_devices, cpu); ++ ++ register_cpu(c, cpu); ++ ++#ifdef CONFIG_PERFORMANCE_COUNTERS ++ sysdev_create_file(&c->sysdev, &attr_pc0event); ++ sysdev_create_file(&c->sysdev, &attr_pc0count); ++ sysdev_create_file(&c->sysdev, &attr_pc1event); ++ sysdev_create_file(&c->sysdev, &attr_pc1count); ++ sysdev_create_file(&c->sysdev, &attr_pccycles); ++ sysdev_create_file(&c->sysdev, &attr_pcenable); ++#endif ++ } ++ ++ return 0; ++} ++ ++subsys_initcall(topology_init); ++ ++static const char *cpu_names[] = { ++ "Morgan", ++ "AP7000", ++}; ++#define NR_CPU_NAMES ARRAY_SIZE(cpu_names) ++ ++static const char *arch_names[] = { ++ "AVR32A", ++ "AVR32B", ++}; ++#define NR_ARCH_NAMES ARRAY_SIZE(arch_names) ++ ++static const char *mmu_types[] = { ++ "No MMU", ++ "ITLB and DTLB", ++ "Shared TLB", ++ "MPU" ++}; ++ ++void __init setup_processor(void) ++{ ++ unsigned long config0, config1; ++ unsigned cpu_id, cpu_rev, arch_id, arch_rev, mmu_type; ++ unsigned tmp; ++ ++ config0 = sysreg_read(CONFIG0); /* 0x0000013e; */ ++ config1 = sysreg_read(CONFIG1); /* 0x01f689a2; */ ++ cpu_id = config0 >> 24; ++ cpu_rev = (config0 >> 16) & 0xff; ++ arch_id = (config0 >> 13) & 0x07; ++ arch_rev = (config0 >> 10) & 0x07; ++ mmu_type = (config0 >> 7) & 0x03; ++ ++ boot_cpu_data.arch_type = arch_id; ++ boot_cpu_data.cpu_type = cpu_id; ++ boot_cpu_data.arch_revision = arch_rev; ++ boot_cpu_data.cpu_revision = cpu_rev; ++ boot_cpu_data.tlb_config = mmu_type; ++ ++ tmp = (config1 >> 13) & 0x07; ++ if (tmp) { ++ boot_cpu_data.icache.ways = 1 << ((config1 >> 10) & 0x07); ++ boot_cpu_data.icache.sets = 1 << ((config1 >> 16) & 0x0f); ++ boot_cpu_data.icache.linesz = 1 << (tmp + 1); ++ } ++ tmp = (config1 >> 3) & 0x07; ++ if (tmp) { ++ boot_cpu_data.dcache.ways = 1 << (config1 & 0x07); ++ boot_cpu_data.dcache.sets = 1 << ((config1 >> 6) & 0x0f); ++ boot_cpu_data.dcache.linesz = 1 << (tmp + 1); ++ } ++ ++ if ((cpu_id >= NR_CPU_NAMES) || (arch_id >= NR_ARCH_NAMES)) { ++ printk ("Unknown CPU configuration (ID %02x, arch %02x), " ++ "continuing anyway...\n", ++ cpu_id, arch_id); ++ return; ++ } ++ ++ printk ("CPU: %s [%02x] revision %d (%s revision %d)\n", ++ cpu_names[cpu_id], cpu_id, cpu_rev, ++ arch_names[arch_id], arch_rev); ++ printk ("CPU: MMU configuration: %s\n", mmu_types[mmu_type]); ++ printk ("CPU: features:"); ++ if (config0 & (1 << 6)) ++ printk(" fpu"); ++ if (config0 & (1 << 5)) ++ printk(" java"); ++ if (config0 & (1 << 4)) ++ printk(" perfctr"); ++ if (config0 & (1 << 3)) ++ printk(" ocd"); ++ printk("\n"); ++} ++ ++#ifdef CONFIG_PROC_FS ++static int c_show(struct seq_file *m, void *v) ++{ ++ unsigned int icache_size, dcache_size; ++ unsigned int cpu = smp_processor_id(); ++ ++ icache_size = boot_cpu_data.icache.ways * ++ boot_cpu_data.icache.sets * ++ boot_cpu_data.icache.linesz; ++ dcache_size = boot_cpu_data.dcache.ways * ++ boot_cpu_data.dcache.sets * ++ boot_cpu_data.dcache.linesz; ++ ++ seq_printf(m, "processor\t: %d\n", cpu); ++ ++ if (boot_cpu_data.arch_type < NR_ARCH_NAMES) ++ seq_printf(m, "cpu family\t: %s revision %d\n", ++ arch_names[boot_cpu_data.arch_type], ++ boot_cpu_data.arch_revision); ++ if (boot_cpu_data.cpu_type < NR_CPU_NAMES) ++ seq_printf(m, "cpu type\t: %s revision %d\n", ++ cpu_names[boot_cpu_data.cpu_type], ++ boot_cpu_data.cpu_revision); ++ ++ seq_printf(m, "i-cache\t\t: %dK (%u ways x %u sets x %u)\n", ++ icache_size >> 10, ++ boot_cpu_data.icache.ways, ++ boot_cpu_data.icache.sets, ++ boot_cpu_data.icache.linesz); ++ seq_printf(m, "d-cache\t\t: %dK (%u ways x %u sets x %u)\n", ++ dcache_size >> 10, ++ boot_cpu_data.dcache.ways, ++ boot_cpu_data.dcache.sets, ++ boot_cpu_data.dcache.linesz); ++ seq_printf(m, "bogomips\t: %lu.%02lu\n", ++ boot_cpu_data.loops_per_jiffy / (500000/HZ), ++ (boot_cpu_data.loops_per_jiffy / (5000/HZ)) % 100); ++ ++ return 0; ++} ++ ++static void *c_start(struct seq_file *m, loff_t *pos) ++{ ++ return *pos < 1 ? (void *)1 : NULL; ++} ++ ++static void *c_next(struct seq_file *m, void *v, loff_t *pos) ++{ ++ ++*pos; ++ return NULL; ++} ++ ++static void c_stop(struct seq_file *m, void *v) ++{ ++ ++} ++ ++struct seq_operations cpuinfo_op = { ++ .start = c_start, ++ .next = c_next, ++ .stop = c_stop, ++ .show = c_show ++}; ++#endif /* CONFIG_PROC_FS */ +Index: linux-2.6.18-avr32/arch/avr32/kernel/entry-avr32b.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/entry-avr32b.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,678 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++/* ++ * This file contains the low-level entry-points into the kernel, that is, ++ * exception handlers, debug trap handlers, interrupt handlers and the ++ * system call handler. ++ */ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef CONFIG_PREEMPT ++# define preempt_stop mask_interrupts ++#else ++# define preempt_stop ++# define fault_resume_kernel fault_restore_all ++#endif ++ ++#define __MASK(x) ((1 << (x)) - 1) ++#define IRQ_MASK ((__MASK(SOFTIRQ_BITS) << SOFTIRQ_SHIFT) | \ ++ (__MASK(HARDIRQ_BITS) << HARDIRQ_SHIFT)) ++ ++ .section .ex.text,"ax",@progbits ++ .align 2 ++exception_vectors: ++ bral handle_critical ++ .align 2 ++ bral handle_critical ++ .align 2 ++ bral do_bus_error_write ++ .align 2 ++ bral do_bus_error_read ++ .align 2 ++ bral do_nmi_ll ++ .align 2 ++ bral handle_address_fault ++ .align 2 ++ bral handle_protection_fault ++ .align 2 ++ bral handle_debug ++ .align 2 ++ bral do_illegal_opcode_ll ++ .align 2 ++ bral do_illegal_opcode_ll ++ .align 2 ++ bral do_illegal_opcode_ll ++ .align 2 ++ bral do_fpe_ll ++ .align 2 ++ bral do_illegal_opcode_ll ++ .align 2 ++ bral handle_address_fault ++ .align 2 ++ bral handle_address_fault ++ .align 2 ++ bral handle_protection_fault ++ .align 2 ++ bral handle_protection_fault ++ .align 2 ++ bral do_dtlb_modified ++ ++ /* ++ * r0 : PGD/PT/PTE ++ * r1 : Offending address ++ * r2 : Scratch register ++ * r3 : Cause (5, 12 or 13) ++ */ ++#define tlbmiss_save pushm r0-r3 ++#define tlbmiss_restore popm r0-r3 ++ ++ .section .tlbx.ex.text,"ax",@progbits ++ .global itlb_miss ++itlb_miss: ++ tlbmiss_save ++ rjmp tlb_miss_common ++ ++ .section .tlbr.ex.text,"ax",@progbits ++dtlb_miss_read: ++ tlbmiss_save ++ rjmp tlb_miss_common ++ ++ .section .tlbw.ex.text,"ax",@progbits ++dtlb_miss_write: ++ tlbmiss_save ++ ++ .global tlb_miss_common ++tlb_miss_common: ++ mfsr r0, SYSREG_PTBR ++ mfsr r1, SYSREG_TLBEAR ++ ++ /* Is it the vmalloc space? */ ++ bld r1, 31 ++ brcs handle_vmalloc_miss ++ ++ /* First level lookup */ ++pgtbl_lookup: ++ lsr r2, r1, PGDIR_SHIFT ++ ld.w r0, r0[r2 << 2] ++ bld r0, _PAGE_BIT_PRESENT ++ brcc page_table_not_present ++ ++ /* TODO: Check access rights on page table if necessary */ ++ ++ /* Translate to virtual address in P1. */ ++ andl r0, 0xf000 ++ sbr r0, 31 ++ ++ /* Second level lookup */ ++ lsl r1, (32 - PGDIR_SHIFT) ++ lsr r1, (32 - PGDIR_SHIFT) + PAGE_SHIFT ++ add r2, r0, r1 << 2 ++ ld.w r1, r2[0] ++ bld r1, _PAGE_BIT_PRESENT ++ brcc page_not_present ++ ++ /* Mark the page as accessed */ ++ sbr r1, _PAGE_BIT_ACCESSED ++ st.w r2[0], r1 ++ ++ /* Drop software flags */ ++ andl r1, _PAGE_FLAGS_HARDWARE_MASK & 0xffff ++ mtsr SYSREG_TLBELO, r1 ++ ++ /* Figure out which entry we want to replace */ ++ mfsr r0, SYSREG_TLBARLO ++ clz r2, r0 ++ brcc 1f ++ mov r1, -1 /* All entries have been accessed, */ ++ mtsr SYSREG_TLBARLO, r1 /* so reset TLBAR */ ++ mov r2, 0 /* and start at 0 */ ++1: mfsr r1, SYSREG_MMUCR ++ lsl r2, 14 ++ andl r1, 0x3fff, COH ++ or r1, r2 ++ mtsr SYSREG_MMUCR, r1 ++ ++ tlbw ++ ++ tlbmiss_restore ++ rete ++ ++handle_vmalloc_miss: ++ /* Simply do the lookup in init's page table */ ++ mov r0, lo(swapper_pg_dir) ++ orh r0, hi(swapper_pg_dir) ++ rjmp pgtbl_lookup ++ ++ ++ /* --- System Call --- */ ++ ++ .section .scall.text,"ax",@progbits ++system_call: ++ pushm r12 /* r12_orig */ ++ stmts --sp, r0-lr ++ zero_fp ++ mfsr r0, SYSREG_RAR_SUP ++ mfsr r1, SYSREG_RSR_SUP ++ stm --sp, r0-r1 ++ ++ /* check for syscall tracing */ ++ get_thread_info r0 ++ ld.w r1, r0[TI_flags] ++ bld r1, TIF_SYSCALL_TRACE ++ brcs syscall_trace_enter ++ ++syscall_trace_cont: ++ cp.w r8, NR_syscalls ++ brhs syscall_badsys ++ ++ lddpc lr, syscall_table_addr ++ ld.w lr, lr[r8 << 2] ++ mov r8, r5 /* 5th argument (6th is pushed by stub) */ ++ icall lr ++ ++ .global syscall_return ++syscall_return: ++ get_thread_info r0 ++ mask_interrupts /* make sure we don't miss an interrupt ++ setting need_resched or sigpending ++ between sampling and the rets */ ++ ++ /* Store the return value so that the correct value is loaded below */ ++ stdsp sp[REG_R12], r12 ++ ++ ld.w r1, r0[TI_flags] ++ andl r1, _TIF_ALLWORK_MASK, COH ++ brne syscall_exit_work ++ ++syscall_exit_cont: ++ popm r8-r9 ++ mtsr SYSREG_RAR_SUP, r8 ++ mtsr SYSREG_RSR_SUP, r9 ++ ldmts sp++, r0-lr ++ sub sp, -4 /* r12_orig */ ++ rets ++ ++ .align 2 ++syscall_table_addr: ++ .long sys_call_table ++ ++syscall_badsys: ++ mov r12, -ENOSYS ++ rjmp syscall_return ++ ++ .global ret_from_fork ++ret_from_fork: ++ rcall schedule_tail ++ ++ /* check for syscall tracing */ ++ get_thread_info r0 ++ ld.w r1, r0[TI_flags] ++ andl r1, _TIF_ALLWORK_MASK, COH ++ brne syscall_exit_work ++ rjmp syscall_exit_cont ++ ++syscall_trace_enter: ++ pushm r8-r12 ++ rcall syscall_trace ++ popm r8-r12 ++ rjmp syscall_trace_cont ++ ++syscall_exit_work: ++ bld r1, TIF_SYSCALL_TRACE ++ brcc 1f ++ unmask_interrupts ++ rcall syscall_trace ++ mask_interrupts ++ ld.w r1, r0[TI_flags] ++ ++1: bld r1, TIF_NEED_RESCHED ++ brcc 2f ++ unmask_interrupts ++ rcall schedule ++ mask_interrupts ++ ld.w r1, r0[TI_flags] ++ rjmp 1b ++ ++2: mov r2, _TIF_SIGPENDING | _TIF_RESTORE_SIGMASK ++ tst r1, r2 ++ breq 3f ++ unmask_interrupts ++ mov r12, sp ++ mov r11, r0 ++ rcall do_notify_resume ++ mask_interrupts ++ ld.w r1, r0[TI_flags] ++ rjmp 1b ++ ++3: bld r1, TIF_BREAKPOINT ++ brcc syscall_exit_cont ++ mfsr r3, SYSREG_TLBEHI ++ lddsp r2, sp[REG_PC] ++ andl r3, 0xff, COH ++ lsl r3, 1 ++ sbr r3, 30 ++ sbr r3, 0 ++ mtdr DBGREG_BWA2A, r2 ++ mtdr DBGREG_BWC2A, r3 ++ rjmp syscall_exit_cont ++ ++ ++ /* The slow path of the TLB miss handler */ ++page_table_not_present: ++page_not_present: ++ tlbmiss_restore ++ sub sp, 4 ++ stmts --sp, r0-lr ++ rcall save_full_context_ex ++ mfsr r12, SYSREG_ECR ++ mov r11, sp ++ rcall do_page_fault ++ rjmp ret_from_exception ++ ++ /* This function expects to find offending PC in SYSREG_RAR_EX */ ++save_full_context_ex: ++ mfsr r8, SYSREG_RSR_EX ++ mov r12, r8 ++ andh r8, (MODE_MASK >> 16), COH ++ mfsr r11, SYSREG_RAR_EX ++ brne 2f ++ ++1: pushm r11, r12 /* PC and SR */ ++ unmask_exceptions ++ ret r12 ++ ++2: sub r10, sp, -(FRAME_SIZE_FULL - REG_LR) ++ stdsp sp[4], r10 /* replace saved SP */ ++ rjmp 1b ++ ++ /* Low-level exception handlers */ ++handle_critical: ++ pushm r12 ++ pushm r0-r12 ++ rcall save_full_context_ex ++ mfsr r12, SYSREG_ECR ++ mov r11, sp ++ rcall do_critical_exception ++ ++ /* We should never get here... */ ++bad_return: ++ sub r12, pc, (. - 1f) ++ bral panic ++ .align 2 ++1: .asciz "Return from critical exception!" ++ ++ .align 1 ++do_bus_error_write: ++ sub sp, 4 ++ stmts --sp, r0-lr ++ rcall save_full_context_ex ++ mov r11, 1 ++ rjmp 1f ++ ++do_bus_error_read: ++ sub sp, 4 ++ stmts --sp, r0-lr ++ rcall save_full_context_ex ++ mov r11, 0 ++1: mfsr r12, SYSREG_BEAR ++ mov r10, sp ++ rcall do_bus_error ++ rjmp ret_from_exception ++ ++ .align 1 ++do_nmi_ll: ++ sub sp, 4 ++ stmts --sp, r0-lr ++ /* FIXME: Make sure RAR_NMI and RSR_NMI are pushed instead of *_EX */ ++ rcall save_full_context_ex ++ mfsr r12, SYSREG_ECR ++ mov r11, sp ++ rcall do_nmi ++ rjmp bad_return ++ ++handle_address_fault: ++ sub sp, 4 ++ stmts --sp, r0-lr ++ rcall save_full_context_ex ++ mfsr r12, SYSREG_ECR ++ mov r11, sp ++ rcall do_address_exception ++ rjmp ret_from_exception ++ ++handle_protection_fault: ++ sub sp, 4 ++ stmts --sp, r0-lr ++ rcall save_full_context_ex ++ mfsr r12, SYSREG_ECR ++ mov r11, sp ++ rcall do_page_fault ++ rjmp ret_from_exception ++ ++ .align 1 ++do_illegal_opcode_ll: ++ sub sp, 4 ++ stmts --sp, r0-lr ++ rcall save_full_context_ex ++ mfsr r12, SYSREG_ECR ++ mov r11, sp ++ rcall do_illegal_opcode ++ rjmp ret_from_exception ++ ++do_dtlb_modified: ++ pushm r0-r3 ++ mfsr r1, SYSREG_TLBEAR ++ mfsr r0, SYSREG_PTBR ++ lsr r2, r1, PGDIR_SHIFT ++ ld.w r0, r0[r2 << 2] ++ lsl r1, (32 - PGDIR_SHIFT) ++ lsr r1, (32 - PGDIR_SHIFT) + PAGE_SHIFT ++ ++ /* Translate to virtual address in P1 */ ++ andl r0, 0xf000 ++ sbr r0, 31 ++ add r2, r0, r1 << 2 ++ ld.w r3, r2[0] ++ sbr r3, _PAGE_BIT_DIRTY ++ mov r0, r3 ++ st.w r2[0], r3 ++ ++ /* The page table is up-to-date. Update the TLB entry as well */ ++ andl r0, lo(_PAGE_FLAGS_HARDWARE_MASK) ++ mtsr SYSREG_TLBELO, r0 ++ ++ /* MMUCR[DRP] is updated automatically, so let's go... */ ++ tlbw ++ ++ popm r0-r3 ++ rete ++ ++do_fpe_ll: ++ sub sp, 4 ++ stmts --sp, r0-lr ++ rcall save_full_context_ex ++ unmask_interrupts ++ mov r12, 26 ++ mov r11, sp ++ rcall do_fpe ++ rjmp ret_from_exception ++ ++ret_from_exception: ++ mask_interrupts ++ lddsp r4, sp[REG_SR] ++ andh r4, (MODE_MASK >> 16), COH ++ brne fault_resume_kernel ++ ++ get_thread_info r0 ++ ld.w r1, r0[TI_flags] ++ andl r1, _TIF_WORK_MASK, COH ++ brne fault_exit_work ++ ++fault_resume_user: ++ popm r8-r9 ++ mask_exceptions ++ mtsr SYSREG_RAR_EX, r8 ++ mtsr SYSREG_RSR_EX, r9 ++ ldmts sp++, r0-lr ++ sub sp, -4 ++ rete ++ ++fault_resume_kernel: ++#ifdef CONFIG_PREEMPT ++ get_thread_info r0 ++ ld.w r2, r0[TI_preempt_count] ++ cp.w r2, 0 ++ brne 1f ++ ld.w r1, r0[TI_flags] ++ bld r1, TIF_NEED_RESCHED ++ brcc 1f ++ lddsp r4, sp[REG_SR] ++ bld r4, SYSREG_GM_OFFSET ++ brcs 1f ++ rcall preempt_schedule_irq ++1: ++#endif ++ ++ popm r8-r9 ++ mask_exceptions ++ mfsr r1, SYSREG_SR ++ mtsr SYSREG_RAR_EX, r8 ++ mtsr SYSREG_RSR_EX, r9 ++ popm lr ++ sub sp, -4 /* ignore SP */ ++ popm r0-r12 ++ sub sp, -4 /* ignore r12_orig */ ++ rete ++ ++irq_exit_work: ++ /* Switch to exception mode so that we can share the same code. */ ++ mfsr r8, SYSREG_SR ++ cbr r8, SYSREG_M0_OFFSET ++ orh r8, hi(SYSREG_BIT(M1) | SYSREG_BIT(M2)) ++ mtsr SYSREG_SR, r8 ++ sub pc, -2 ++ get_thread_info r0 ++ ld.w r1, r0[TI_flags] ++ ++fault_exit_work: ++ bld r1, TIF_NEED_RESCHED ++ brcc 1f ++ unmask_interrupts ++ rcall schedule ++ mask_interrupts ++ ld.w r1, r0[TI_flags] ++ rjmp fault_exit_work ++ ++1: mov r2, _TIF_SIGPENDING | _TIF_RESTORE_SIGMASK ++ tst r1, r2 ++ breq 2f ++ unmask_interrupts ++ mov r12, sp ++ mov r11, r0 ++ rcall do_notify_resume ++ mask_interrupts ++ ld.w r1, r0[TI_flags] ++ rjmp fault_exit_work ++ ++2: bld r1, TIF_BREAKPOINT ++ brcc fault_resume_user ++ mfsr r3, SYSREG_TLBEHI ++ lddsp r2, sp[REG_PC] ++ andl r3, 0xff, COH ++ lsl r3, 1 ++ sbr r3, 30 ++ sbr r3, 0 ++ mtdr DBGREG_BWA2A, r2 ++ mtdr DBGREG_BWC2A, r3 ++ rjmp fault_resume_user ++ ++ /* If we get a debug trap from privileged context we end up here */ ++handle_debug_priv: ++ /* Fix up LR and SP in regs. r11 contains the mode we came from */ ++ mfsr r8, SYSREG_SR ++ mov r9, r8 ++ andh r8, hi(~MODE_MASK) ++ or r8, r11 ++ mtsr SYSREG_SR, r8 ++ sub pc, -2 ++ stdsp sp[REG_LR], lr ++ mtsr SYSREG_SR, r9 ++ sub pc, -2 ++ sub r10, sp, -FRAME_SIZE_FULL ++ stdsp sp[REG_SP], r10 ++ mov r12, sp ++ rcall do_debug_priv ++ ++ /* Now, put everything back */ ++ ssrf SR_EM_BIT ++ popm r10, r11 ++ mtsr SYSREG_RAR_DBG, r10 ++ mtsr SYSREG_RSR_DBG, r11 ++ mfsr r8, SYSREG_SR ++ mov r9, r8 ++ andh r8, hi(~MODE_MASK) ++ andh r11, hi(MODE_MASK) ++ or r8, r11 ++ mtsr SYSREG_SR, r8 ++ sub pc, -2 ++ popm lr ++ mtsr SYSREG_SR, r9 ++ sub pc, -2 ++ sub sp, -4 /* skip SP */ ++ popm r0-r12 ++ sub sp, -4 ++ retd ++ ++ /* ++ * At this point, everything is masked, that is, interrupts, ++ * exceptions and debugging traps. We might get called from ++ * interrupt or exception context in some rare cases, but this ++ * will be taken care of by do_debug(), so we're not going to ++ * do a 100% correct context save here. ++ */ ++handle_debug: ++ sub sp, 4 /* r12_orig */ ++ stmts --sp, r0-lr ++ mfsr r10, SYSREG_RAR_DBG ++ mfsr r11, SYSREG_RSR_DBG ++ unmask_exceptions ++ pushm r10,r11 ++ andh r11, (MODE_MASK >> 16), COH ++ brne handle_debug_priv ++ ++ mov r12, sp ++ rcall do_debug ++ ++ lddsp r10, sp[REG_SR] ++ andh r10, (MODE_MASK >> 16), COH ++ breq debug_resume_user ++ ++debug_restore_all: ++ popm r10,r11 ++ mask_exceptions ++ mtsr SYSREG_RSR_DBG, r11 ++ mtsr SYSREG_RAR_DBG, r10 ++ ldmts sp++, r0-lr ++ sub sp, -4 ++ retd ++ ++debug_resume_user: ++ get_thread_info r0 ++ mask_interrupts ++ ++ ld.w r1, r0[TI_flags] ++ andl r1, _TIF_DBGWORK_MASK, COH ++ breq debug_restore_all ++ ++1: bld r1, TIF_NEED_RESCHED ++ brcc 2f ++ unmask_interrupts ++ rcall schedule ++ mask_interrupts ++ ld.w r1, r0[TI_flags] ++ rjmp 1b ++ ++2: mov r2, _TIF_SIGPENDING | _TIF_RESTORE_SIGMASK ++ tst r1, r2 ++ breq 3f ++ unmask_interrupts ++ mov r12, sp ++ mov r11, r0 ++ rcall do_notify_resume ++ mask_interrupts ++ ld.w r1, r0[TI_flags] ++ rjmp 1b ++ ++3: bld r1, TIF_SINGLE_STEP ++ brcc debug_restore_all ++ mfdr r2, DBGREG_DC ++ sbr r2, DC_SS_BIT ++ mtdr DBGREG_DC, r2 ++ rjmp debug_restore_all ++ ++ .set rsr_int0, SYSREG_RSR_INT0 ++ .set rsr_int1, SYSREG_RSR_INT1 ++ .set rsr_int2, SYSREG_RSR_INT2 ++ .set rsr_int3, SYSREG_RSR_INT3 ++ .set rar_int0, SYSREG_RAR_INT0 ++ .set rar_int1, SYSREG_RAR_INT1 ++ .set rar_int2, SYSREG_RAR_INT2 ++ .set rar_int3, SYSREG_RAR_INT3 ++ ++ .macro IRQ_LEVEL level ++ .type irq_level\level, @function ++irq_level\level: ++ sub sp, 4 /* r12_orig */ ++ stmts --sp,r0-lr ++ mfsr r8, rar_int\level ++ mfsr r9, rsr_int\level ++ pushm r8-r9 ++ ++ mov r11, sp ++ mov r12, \level ++ ++ rcall do_IRQ ++ ++ lddsp r4, sp[REG_SR] ++ andh r4, (MODE_MASK >> 16), COH ++#ifdef CONFIG_PREEMPT ++ brne 2f ++#else ++ brne 1f ++#endif ++ ++ get_thread_info r0 ++ ld.w r1, r0[TI_flags] ++ andl r1, _TIF_WORK_MASK, COH ++ brne irq_exit_work ++ ++1: popm r8-r9 ++ mtsr rar_int\level, r8 ++ mtsr rsr_int\level, r9 ++ ldmts sp++,r0-lr ++ sub sp, -4 /* ignore r12_orig */ ++ rete ++ ++#ifdef CONFIG_PREEMPT ++2: ++ get_thread_info r0 ++ ld.w r2, r0[TI_preempt_count] ++ cp.w r2, 0 ++ brne 1b ++ ld.w r1, r0[TI_flags] ++ bld r1, TIF_NEED_RESCHED ++ brcc 1b ++ lddsp r4, sp[REG_SR] ++ bld r4, SYSREG_GM_OFFSET ++ brcs 1b ++ rcall preempt_schedule_irq ++ rjmp 1b ++#endif ++ .endm ++ ++ .section .irq.text,"ax",@progbits ++ ++ .global irq_level0 ++ .global irq_level1 ++ .global irq_level2 ++ .global irq_level3 ++ IRQ_LEVEL 0 ++ IRQ_LEVEL 1 ++ IRQ_LEVEL 2 ++ IRQ_LEVEL 3 +Index: linux-2.6.18-avr32/arch/avr32/kernel/head.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/head.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,42 @@ ++/* ++ * Non-board-specific low-level startup code ++ * ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++ .section .init.text,"ax" ++ .global kernel_entry ++kernel_entry: ++ /* Initialize status register */ ++ lddpc r0, init_sr ++ mtsr SYSREG_SR, r0 ++ ++ /* Set initial stack pointer */ ++ lddpc sp, stack_addr ++ sub sp, -THREAD_SIZE ++ ++#ifdef CONFIG_FRAME_POINTER ++ /* Mark last stack frame */ ++ mov lr, 0 ++ mov r7, 0 ++#endif ++ ++ /* Start the show */ ++ lddpc pc, kernel_start_addr ++ ++ .align 2 ++init_sr: ++ .long 0x007f0000 /* Supervisor mode, everything masked */ ++stack_addr: ++ .long init_thread_union ++kernel_start_addr: ++ .long start_kernel +Index: linux-2.6.18-avr32/arch/avr32/kernel/init_task.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/init_task.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,38 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++static struct fs_struct init_fs = INIT_FS; ++static struct files_struct init_files = INIT_FILES; ++static struct signal_struct init_signals = INIT_SIGNALS(init_signals); ++static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); ++struct mm_struct init_mm = INIT_MM(init_mm); ++ ++EXPORT_SYMBOL(init_mm); ++ ++/* ++ * Initial thread structure. Must be aligned on an 8192-byte boundary. ++ */ ++union thread_union init_thread_union ++ __attribute__((__section__(".data.init_task"))) = ++ { INIT_THREAD_INFO(init_task) }; ++ ++/* ++ * Initial task structure. ++ * ++ * All other task structs will be allocated on slabs in fork.c ++ */ ++struct task_struct init_task = INIT_TASK(init_task); ++ ++EXPORT_SYMBOL(init_task); +Index: linux-2.6.18-avr32/arch/avr32/kernel/irq.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/irq.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,71 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * Based on arch/i386/kernel/irq.c ++ * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar ++ * ++ * 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 the code used by various IRQ handling routines: ++ * asking for different IRQ's should be done through these routines ++ * instead of just grabbing them. Thus setups with different IRQ numbers ++ * shouldn't result in any weird surprises, and installing new handlers ++ * should be easier. ++ * ++ * IRQ's are in fact implemented a bit like signal handlers for the kernel. ++ * Naturally it's not a 1:1 relation, but there are similarities. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* ++ * 'what should we do if we get a hw irq event on an illegal vector'. ++ * each architecture has to answer this themselves. ++ */ ++void ack_bad_irq(unsigned int irq) ++{ ++ printk("unexpected IRQ %u\n", irq); ++} ++ ++#ifdef CONFIG_PROC_FS ++int show_interrupts(struct seq_file *p, void *v) ++{ ++ int i = *(loff_t *)v, cpu; ++ struct irqaction *action; ++ unsigned long flags; ++ ++ if (i == 0) { ++ seq_puts(p, " "); ++ for_each_online_cpu(cpu) ++ seq_printf(p, "CPU%d ", cpu); ++ seq_putc(p, '\n'); ++ } ++ ++ if (i < NR_IRQS) { ++ spin_lock_irqsave(&irq_desc[i].lock, flags); ++ action = irq_desc[i].action; ++ if (!action) ++ goto unlock; ++ ++ seq_printf(p, "%3d: ", i); ++ for_each_online_cpu(cpu) ++ seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]); ++ seq_printf(p, " %s", action->name); ++ for (action = action->next; action; action = action->next) ++ seq_printf(p, ", %s", action->name); ++ ++ seq_putc(p, '\n'); ++ unlock: ++ spin_unlock_irqrestore(&irq_desc[i].lock, flags); ++ } ++ ++ return 0; ++} ++#endif +Index: linux-2.6.18-avr32/arch/avr32/kernel/kprobes.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/kprobes.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,270 @@ ++/* ++ * Kernel Probes (KProbes) ++ * ++ * Copyright (C) 2005-2006 Atmel Corporation ++ * ++ * Based on arch/ppc64/kernel/kprobes.c ++ * Copyright (C) IBM Corporation, 2002, 2004 ++ * ++ * 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 ++ ++DEFINE_PER_CPU(struct kprobe *, current_kprobe); ++static unsigned long kprobe_status; ++static struct pt_regs jprobe_saved_regs; ++ ++int __kprobes arch_prepare_kprobe(struct kprobe *p) ++{ ++ int ret = 0; ++ ++ if ((unsigned long)p->addr & 0x01) { ++ printk("Attempt to register kprobe at an unaligned address\n"); ++ ret = -EINVAL; ++ } ++ ++ /* XXX: Might be a good idea to check if p->addr is a valid ++ * kernel address as well... */ ++ ++ if (!ret) { ++ pr_debug("copy kprobe at %p\n", p->addr); ++ memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); ++ p->opcode = *p->addr; ++ } ++ ++ return ret; ++} ++ ++void __kprobes arch_arm_kprobe(struct kprobe *p) ++{ ++ pr_debug("arming kprobe at %p\n", p->addr); ++ *p->addr = BREAKPOINT_INSTRUCTION; ++ flush_icache_range((unsigned long)p->addr, ++ (unsigned long)p->addr + sizeof(kprobe_opcode_t)); ++} ++ ++void __kprobes arch_disarm_kprobe(struct kprobe *p) ++{ ++ pr_debug("disarming kprobe at %p\n", p->addr); ++ *p->addr = p->opcode; ++ flush_icache_range((unsigned long)p->addr, ++ (unsigned long)p->addr + sizeof(kprobe_opcode_t)); ++} ++ ++static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs) ++{ ++ unsigned long dc; ++ ++ pr_debug("preparing to singlestep over %p (PC=%08lx)\n", ++ p->addr, regs->pc); ++ ++ BUG_ON(!(sysreg_read(SR) & SYSREG_BIT(SR_D))); ++ ++ dc = __mfdr(DBGREG_DC); ++ dc |= DC_SS; ++ __mtdr(DBGREG_DC, dc); ++ ++ /* ++ * We must run the instruction from its original location ++ * since it may actually reference PC. ++ * ++ * TODO: Do the instruction replacement directly in icache. ++ */ ++ *p->addr = p->opcode; ++ flush_icache_range((unsigned long)p->addr, ++ (unsigned long)p->addr + sizeof(kprobe_opcode_t)); ++} ++ ++static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs) ++{ ++ unsigned long dc; ++ ++ pr_debug("resuming execution at PC=%08lx\n", regs->pc); ++ ++ dc = __mfdr(DBGREG_DC); ++ dc &= ~DC_SS; ++ __mtdr(DBGREG_DC, dc); ++ ++ *p->addr = BREAKPOINT_INSTRUCTION; ++ flush_icache_range((unsigned long)p->addr, ++ (unsigned long)p->addr + sizeof(kprobe_opcode_t)); ++} ++ ++static void __kprobes set_current_kprobe(struct kprobe *p) ++{ ++ __get_cpu_var(current_kprobe) = p; ++} ++ ++static int __kprobes kprobe_handler(struct pt_regs *regs) ++{ ++ struct kprobe *p; ++ void *addr = (void *)regs->pc; ++ int ret = 0; ++ ++ pr_debug("kprobe_handler: kprobe_running=%p\n", ++ kprobe_running()); ++ ++ /* ++ * We don't want to be preempted for the entire ++ * duration of kprobe processing ++ */ ++ preempt_disable(); ++ ++ /* Check that we're not recursing */ ++ if (kprobe_running()) { ++ p = get_kprobe(addr); ++ if (p) { ++ if (kprobe_status == KPROBE_HIT_SS) { ++ printk("FIXME: kprobe hit while single-stepping!\n"); ++ goto no_kprobe; ++ } ++ ++ printk("FIXME: kprobe hit while handling another kprobe\n"); ++ goto no_kprobe; ++ } else { ++ p = kprobe_running(); ++ if (p->break_handler && p->break_handler(p, regs)) ++ goto ss_probe; ++ } ++ /* If it's not ours, can't be delete race, (we hold lock). */ ++ goto no_kprobe; ++ } ++ ++ p = get_kprobe(addr); ++ if (!p) ++ goto no_kprobe; ++ ++ kprobe_status = KPROBE_HIT_ACTIVE; ++ set_current_kprobe(p); ++ if (p->pre_handler && p->pre_handler(p, regs)) ++ /* handler has already set things up, so skip ss setup */ ++ return 1; ++ ++ss_probe: ++ prepare_singlestep(p, regs); ++ kprobe_status = KPROBE_HIT_SS; ++ return 1; ++ ++no_kprobe: ++ return ret; ++} ++ ++static int __kprobes post_kprobe_handler(struct pt_regs *regs) ++{ ++ struct kprobe *cur = kprobe_running(); ++ ++ pr_debug("post_kprobe_handler, cur=%p\n", cur); ++ ++ if (!cur) ++ return 0; ++ ++ if (cur->post_handler) { ++ kprobe_status = KPROBE_HIT_SSDONE; ++ cur->post_handler(cur, regs, 0); ++ } ++ ++ resume_execution(cur, regs); ++ reset_current_kprobe(); ++ preempt_enable_no_resched(); ++ ++ return 1; ++} ++ ++static int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr) ++{ ++ struct kprobe *cur = kprobe_running(); ++ ++ pr_debug("kprobe_fault_handler: trapnr=%d\n", trapnr); ++ ++ if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr)) ++ return 1; ++ ++ if (kprobe_status & KPROBE_HIT_SS) { ++ resume_execution(cur, regs); ++ preempt_enable_no_resched(); ++ } ++ return 0; ++} ++ ++/* ++ * Wrapper routine to for handling exceptions. ++ */ ++int __kprobes kprobe_exceptions_notify(struct notifier_block *self, ++ unsigned long val, void *data) ++{ ++ struct die_args *args = (struct die_args *)data; ++ int ret = NOTIFY_DONE; ++ ++ pr_debug("kprobe_exceptions_notify: val=%lu, data=%p\n", ++ val, data); ++ ++ switch (val) { ++ case DIE_BREAKPOINT: ++ if (kprobe_handler(args->regs)) ++ ret = NOTIFY_STOP; ++ break; ++ case DIE_SSTEP: ++ if (post_kprobe_handler(args->regs)) ++ ret = NOTIFY_STOP; ++ break; ++ case DIE_FAULT: ++ if (kprobe_running() ++ && kprobe_fault_handler(args->regs, args->trapnr)) ++ ret = NOTIFY_STOP; ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++ ++int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) ++{ ++ struct jprobe *jp = container_of(p, struct jprobe, kp); ++ ++ memcpy(&jprobe_saved_regs, regs, sizeof(struct pt_regs)); ++ ++ /* ++ * TODO: We should probably save some of the stack here as ++ * well, since gcc may pass arguments on the stack for certain ++ * functions (lots of arguments, large aggregates, varargs) ++ */ ++ ++ /* setup return addr to the jprobe handler routine */ ++ regs->pc = (unsigned long)jp->entry; ++ return 1; ++} ++ ++void __kprobes jprobe_return(void) ++{ ++ asm volatile("breakpoint" ::: "memory"); ++} ++ ++int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) ++{ ++ /* ++ * FIXME - we should ideally be validating that we got here 'cos ++ * of the "trap" in jprobe_return() above, before restoring the ++ * saved regs... ++ */ ++ memcpy(regs, &jprobe_saved_regs, sizeof(struct pt_regs)); ++ return 1; ++} ++ ++int __init arch_init_kprobes(void) ++{ ++ printk("KPROBES: Enabling monitor mode (MM|DBE)...\n"); ++ __mtdr(DBGREG_DC, DC_MM | DC_DBE); ++ ++ /* TODO: Register kretprobe trampoline */ ++ return 0; ++} +Index: linux-2.6.18-avr32/arch/avr32/kernel/module.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/module.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,324 @@ ++/* ++ * AVR32-specific kernel module loader ++ * ++ * Copyright (C) 2005-2006 Atmel Corporation ++ * ++ * GOT initialization parts are based on the s390 version ++ * Copyright (C) 2002, 2003 IBM Deutschland Entwicklung GmbH, ++ * IBM 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 ++ ++void *module_alloc(unsigned long size) ++{ ++ if (size == 0) ++ return NULL; ++ return vmalloc(size); ++} ++ ++void module_free(struct module *mod, void *module_region) ++{ ++ vfree(mod->arch.syminfo); ++ mod->arch.syminfo = NULL; ++ ++ vfree(module_region); ++ /* FIXME: if module_region == mod->init_region, trim exception ++ * table entries. */ ++} ++ ++static inline int check_rela(Elf32_Rela *rela, struct module *module, ++ char *strings, Elf32_Sym *symbols) ++{ ++ struct mod_arch_syminfo *info; ++ ++ info = module->arch.syminfo + ELF32_R_SYM(rela->r_info); ++ switch (ELF32_R_TYPE(rela->r_info)) { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: /* mcall */ ++ case R_AVR32_GOT16S: /* ld.w */ ++ if (rela->r_addend != 0) { ++ printk(KERN_ERR ++ "GOT relocation against %s at offset %u with addend\n", ++ strings + symbols[ELF32_R_SYM(rela->r_info)].st_name, ++ rela->r_offset); ++ return -ENOEXEC; ++ } ++ if (info->got_offset == -1UL) { ++ info->got_offset = module->arch.got_size; ++ module->arch.got_size += sizeof(void *); ++ } ++ pr_debug("GOT[%3lu] %s\n", info->got_offset, ++ strings + symbols[ELF32_R_SYM(rela->r_info)].st_name); ++ break; ++ } ++ ++ return 0; ++} ++ ++int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs, ++ char *secstrings, struct module *module) ++{ ++ Elf32_Shdr *symtab; ++ Elf32_Sym *symbols; ++ Elf32_Rela *rela; ++ char *strings; ++ int nrela, i, j; ++ int ret; ++ ++ /* Find the symbol table */ ++ symtab = NULL; ++ for (i = 0; i < hdr->e_shnum; i++) ++ switch (sechdrs[i].sh_type) { ++ case SHT_SYMTAB: ++ symtab = &sechdrs[i]; ++ break; ++ } ++ if (!symtab) { ++ printk(KERN_ERR "module %s: no symbol table\n", module->name); ++ return -ENOEXEC; ++ } ++ ++ /* Allocate room for one syminfo structure per symbol. */ ++ module->arch.nsyms = symtab->sh_size / sizeof(Elf_Sym); ++ module->arch.syminfo = vmalloc(module->arch.nsyms ++ * sizeof(struct mod_arch_syminfo)); ++ if (!module->arch.syminfo) ++ return -ENOMEM; ++ ++ symbols = (void *)hdr + symtab->sh_offset; ++ strings = (void *)hdr + sechdrs[symtab->sh_link].sh_offset; ++ for (i = 0; i < module->arch.nsyms; i++) { ++ if (symbols[i].st_shndx == SHN_UNDEF && ++ strcmp(strings + symbols[i].st_name, ++ "_GLOBAL_OFFSET_TABLE_") == 0) ++ /* "Define" it as absolute. */ ++ symbols[i].st_shndx = SHN_ABS; ++ module->arch.syminfo[i].got_offset = -1UL; ++ module->arch.syminfo[i].got_initialized = 0; ++ } ++ ++ /* Allocate GOT entries for symbols that need it. */ ++ module->arch.got_size = 0; ++ for (i = 0; i < hdr->e_shnum; i++) { ++ if (sechdrs[i].sh_type != SHT_RELA) ++ continue; ++ nrela = sechdrs[i].sh_size / sizeof(Elf32_Rela); ++ rela = (void *)hdr + sechdrs[i].sh_offset; ++ for (j = 0; j < nrela; j++) { ++ ret = check_rela(rela + j, module, ++ strings, symbols); ++ if (ret) ++ goto out_free_syminfo; ++ } ++ } ++ ++ /* ++ * Increase core size to make room for GOT and set start ++ * offset for GOT. ++ */ ++ module->core_size = ALIGN(module->core_size, 4); ++ module->arch.got_offset = module->core_size; ++ module->core_size += module->arch.got_size; ++ ++ return 0; ++ ++out_free_syminfo: ++ vfree(module->arch.syminfo); ++ module->arch.syminfo = NULL; ++ ++ return ret; ++} ++ ++static inline int reloc_overflow(struct module *module, const char *reloc_name, ++ Elf32_Addr relocation) ++{ ++ printk(KERN_ERR "module %s: Value %lx does not fit relocation %s\n", ++ module->name, (unsigned long)relocation, reloc_name); ++ return -ENOEXEC; ++} ++ ++#define get_u16(loc) (*((uint16_t *)loc)) ++#define put_u16(loc, val) (*((uint16_t *)loc) = (val)) ++ ++int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, ++ unsigned int symindex, unsigned int relindex, ++ struct module *module) ++{ ++ Elf32_Shdr *symsec = sechdrs + symindex; ++ Elf32_Shdr *relsec = sechdrs + relindex; ++ Elf32_Shdr *dstsec = sechdrs + relsec->sh_info; ++ Elf32_Rela *rel = (void *)relsec->sh_addr; ++ unsigned int i; ++ int ret = 0; ++ ++ for (i = 0; i < relsec->sh_size / sizeof(Elf32_Rela); i++, rel++) { ++ struct mod_arch_syminfo *info; ++ Elf32_Sym *sym; ++ Elf32_Addr relocation; ++ uint32_t *location; ++ uint32_t value; ++ ++ location = (void *)dstsec->sh_addr + rel->r_offset; ++ sym = (Elf32_Sym *)symsec->sh_addr + ELF32_R_SYM(rel->r_info); ++ relocation = sym->st_value + rel->r_addend; ++ ++ info = module->arch.syminfo + ELF32_R_SYM(rel->r_info); ++ ++ /* Initialize GOT entry if necessary */ ++ switch (ELF32_R_TYPE(rel->r_info)) { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ if (!info->got_initialized) { ++ Elf32_Addr *gotent; ++ ++ gotent = (module->module_core ++ + module->arch.got_offset ++ + info->got_offset); ++ *gotent = relocation; ++ info->got_initialized = 1; ++ } ++ ++ relocation = info->got_offset; ++ break; ++ } ++ ++ switch (ELF32_R_TYPE(rel->r_info)) { ++ case R_AVR32_32: ++ case R_AVR32_32_CPENT: ++ *location = relocation; ++ break; ++ case R_AVR32_22H_PCREL: ++ relocation -= (Elf32_Addr)location; ++ if ((relocation & 0xffe00001) != 0 ++ && (relocation & 0xffc00001) != 0xffc00000) ++ return reloc_overflow(module, ++ "R_AVR32_22H_PCREL", ++ relocation); ++ relocation >>= 1; ++ ++ value = *location; ++ value = ((value & 0xe1ef0000) ++ | (relocation & 0xffff) ++ | ((relocation & 0x10000) << 4) ++ | ((relocation & 0x1e0000) << 8)); ++ *location = value; ++ break; ++ case R_AVR32_11H_PCREL: ++ relocation -= (Elf32_Addr)location; ++ if ((relocation & 0xfffffc01) != 0 ++ && (relocation & 0xfffff801) != 0xfffff800) ++ return reloc_overflow(module, ++ "R_AVR32_11H_PCREL", ++ relocation); ++ value = get_u16(location); ++ value = ((value & 0xf00c) ++ | ((relocation & 0x1fe) << 3) ++ | ((relocation & 0x600) >> 9)); ++ put_u16(location, value); ++ break; ++ case R_AVR32_9H_PCREL: ++ relocation -= (Elf32_Addr)location; ++ if ((relocation & 0xffffff01) != 0 ++ && (relocation & 0xfffffe01) != 0xfffffe00) ++ return reloc_overflow(module, ++ "R_AVR32_9H_PCREL", ++ relocation); ++ value = get_u16(location); ++ value = ((value & 0xf00f) ++ | ((relocation & 0x1fe) << 3)); ++ put_u16(location, value); ++ break; ++ case R_AVR32_9UW_PCREL: ++ relocation -= ((Elf32_Addr)location) & 0xfffffffc; ++ if ((relocation & 0xfffffc03) != 0) ++ return reloc_overflow(module, ++ "R_AVR32_9UW_PCREL", ++ relocation); ++ value = get_u16(location); ++ value = ((value & 0xf80f) ++ | ((relocation & 0x1fc) << 2)); ++ put_u16(location, value); ++ break; ++ case R_AVR32_GOTPC: ++ /* ++ * R6 = PC - (PC - GOT) ++ * ++ * At this point, relocation contains the ++ * value of PC. Just subtract the value of ++ * GOT, and we're done. ++ */ ++ pr_debug("GOTPC: PC=0x%x, got_offset=0x%lx, core=0x%p\n", ++ relocation, module->arch.got_offset, ++ module->module_core); ++ relocation -= ((unsigned long)module->module_core ++ + module->arch.got_offset); ++ *location = relocation; ++ break; ++ case R_AVR32_GOT18SW: ++ if ((relocation & 0xfffe0003) != 0 ++ && (relocation & 0xfffc0003) != 0xffff0000) ++ return reloc_overflow(module, "R_AVR32_GOT18SW", ++ relocation); ++ relocation >>= 2; ++ /* fall through */ ++ case R_AVR32_GOT16S: ++ if ((relocation & 0xffff8000) != 0 ++ && (relocation & 0xffff0000) != 0xffff0000) ++ return reloc_overflow(module, "R_AVR32_GOT16S", ++ relocation); ++ pr_debug("GOT reloc @ 0x%x -> %u\n", ++ rel->r_offset, relocation); ++ value = *location; ++ value = ((value & 0xffff0000) ++ | (relocation & 0xffff)); ++ *location = value; ++ break; ++ ++ default: ++ printk(KERN_ERR "module %s: Unknown relocation: %u\n", ++ module->name, ELF32_R_TYPE(rel->r_info)); ++ return -ENOEXEC; ++ } ++ } ++ ++ return ret; ++} ++ ++int apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, ++ unsigned int symindex, unsigned int relindex, ++ struct module *module) ++{ ++ printk(KERN_ERR "module %s: REL relocations are not supported\n", ++ module->name); ++ return -ENOEXEC; ++} ++ ++int module_finalize(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs, ++ struct module *module) ++{ ++ vfree(module->arch.syminfo); ++ module->arch.syminfo = NULL; ++ ++ return 0; ++} ++ ++void module_arch_cleanup(struct module *module) ++{ ++ ++} +Index: linux-2.6.18-avr32/arch/avr32/kernel/process.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/process.c 2006-12-04 12:05:20.000000000 +0100 +@@ -0,0 +1,283 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++void (*pm_power_off)(void) = NULL; ++EXPORT_SYMBOL(pm_power_off); ++ ++/* ++ * This file handles the architecture-dependent parts of process handling.. ++ */ ++ ++void cpu_idle(void) ++{ ++ /* endless idle loop with no priority at all */ ++ while (1) { ++ /* TODO: Enter sleep mode */ ++ while (!need_resched()) ++ cpu_relax(); ++ preempt_enable_no_resched(); ++ schedule(); ++ preempt_disable(); ++ } ++} ++ ++void machine_halt(void) ++{ ++ /* ++ * Enter Stop mode. The 32 kHz oscillator will keep running so ++ * the RTC will keep the time properly and the system will ++ * boot quickly. ++ */ ++ asm volatile("sleep 3\n\t" ++ "sub pc, -2"); ++} ++ ++void machine_power_off(void) ++{ ++} ++ ++void machine_restart(char *cmd) ++{ ++ __mtdr(DBGREG_DC, DC_DBE); ++ __mtdr(DBGREG_DC, DC_RES); ++ while (1) ; ++} ++ ++/* ++ * PC is actually discarded when returning from a system call -- the ++ * return address must be stored in LR. This function will make sure ++ * LR points to do_exit before starting the thread. ++ * ++ * Also, when returning from fork(), r12 is 0, so we must copy the ++ * argument as well. ++ * ++ * r0 : The argument to the main thread function ++ * r1 : The address of do_exit ++ * r2 : The address of the main thread function ++ */ ++asmlinkage extern void kernel_thread_helper(void); ++__asm__(" .type kernel_thread_helper, @function\n" ++ "kernel_thread_helper:\n" ++ " mov r12, r0\n" ++ " mov lr, r2\n" ++ " mov pc, r1\n" ++ " .size kernel_thread_helper, . - kernel_thread_helper"); ++ ++int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) ++{ ++ struct pt_regs regs; ++ ++ memset(®s, 0, sizeof(regs)); ++ ++ regs.r0 = (unsigned long)arg; ++ regs.r1 = (unsigned long)fn; ++ regs.r2 = (unsigned long)do_exit; ++ regs.lr = (unsigned long)kernel_thread_helper; ++ regs.pc = (unsigned long)kernel_thread_helper; ++ regs.sr = MODE_SUPERVISOR; ++ ++ return do_fork(flags | CLONE_VM | CLONE_UNTRACED, ++ 0, ®s, 0, NULL, NULL); ++} ++EXPORT_SYMBOL(kernel_thread); ++ ++/* ++ * Free current thread data structures etc ++ */ ++void exit_thread(void) ++{ ++ /* nothing to do */ ++} ++ ++void flush_thread(void) ++{ ++ /* nothing to do */ ++} ++ ++void release_thread(struct task_struct *dead_task) ++{ ++ /* do nothing */ ++} ++ ++static const char *cpu_modes[] = { ++ "Application", "Supervisor", "Interrupt level 0", "Interrupt level 1", ++ "Interrupt level 2", "Interrupt level 3", "Exception", "NMI" ++}; ++ ++void show_regs(struct pt_regs *regs) ++{ ++ unsigned long sp = regs->sp; ++ unsigned long lr = regs->lr; ++ unsigned long mode = (regs->sr & MODE_MASK) >> MODE_SHIFT; ++ ++ if (!user_mode(regs)) ++ sp = (unsigned long)regs + FRAME_SIZE_FULL; ++ ++ print_symbol("PC is at %s\n", instruction_pointer(regs)); ++ print_symbol("LR is at %s\n", lr); ++ printk("pc : [<%08lx>] lr : [<%08lx>] %s\n" ++ "sp : %08lx r12: %08lx r11: %08lx\n", ++ instruction_pointer(regs), ++ lr, print_tainted(), sp, regs->r12, regs->r11); ++ printk("r10: %08lx r9 : %08lx r8 : %08lx\n", ++ regs->r10, regs->r9, regs->r8); ++ printk("r7 : %08lx r6 : %08lx r5 : %08lx r4 : %08lx\n", ++ regs->r7, regs->r6, regs->r5, regs->r4); ++ printk("r3 : %08lx r2 : %08lx r1 : %08lx r0 : %08lx\n", ++ regs->r3, regs->r2, regs->r1, regs->r0); ++ printk("Flags: %c%c%c%c%c\n", ++ regs->sr & SR_Q ? 'Q' : 'q', ++ regs->sr & SR_V ? 'V' : 'v', ++ regs->sr & SR_N ? 'N' : 'n', ++ regs->sr & SR_Z ? 'Z' : 'z', ++ regs->sr & SR_C ? 'C' : 'c'); ++ printk("Mode bits: %c%c%c%c%c%c%c%c%c\n", ++ regs->sr & SR_H ? 'H' : 'h', ++ regs->sr & SR_R ? 'R' : 'r', ++ regs->sr & SR_J ? 'J' : 'j', ++ regs->sr & SR_EM ? 'E' : 'e', ++ regs->sr & SR_I3M ? '3' : '.', ++ regs->sr & SR_I2M ? '2' : '.', ++ regs->sr & SR_I1M ? '1' : '.', ++ regs->sr & SR_I0M ? '0' : '.', ++ regs->sr & SR_GM ? 'G' : 'g'); ++ printk("CPU Mode: %s\n", cpu_modes[mode]); ++ ++ show_trace(NULL, (unsigned long *)sp, regs); ++} ++EXPORT_SYMBOL(show_regs); ++ ++/* Fill in the fpu structure for a core dump. This is easy -- we don't have any */ ++int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu) ++{ ++ /* Not valid */ ++ return 0; ++} ++ ++asmlinkage void ret_from_fork(void); ++ ++int copy_thread(int nr, unsigned long clone_flags, unsigned long usp, ++ unsigned long unused, ++ struct task_struct *p, struct pt_regs *regs) ++{ ++ struct pt_regs *childregs; ++ ++ childregs = ((struct pt_regs *)(THREAD_SIZE + (unsigned long)p->thread_info)) - 1; ++ *childregs = *regs; ++ ++ if (user_mode(regs)) ++ childregs->sp = usp; ++ else ++ childregs->sp = (unsigned long)p->thread_info + THREAD_SIZE; ++ ++ childregs->r12 = 0; /* Set return value for child */ ++ ++ p->thread.cpu_context.sr = MODE_SUPERVISOR | SR_GM; ++ p->thread.cpu_context.ksp = (unsigned long)childregs; ++ p->thread.cpu_context.pc = (unsigned long)ret_from_fork; ++ ++ return 0; ++} ++ ++/* r12-r8 are dummy parameters to force the compiler to use the stack */ ++asmlinkage int sys_fork(struct pt_regs *regs) ++{ ++ return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL); ++} ++ ++asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, ++ unsigned long parent_tidptr, ++ unsigned long child_tidptr, struct pt_regs *regs) ++{ ++ if (!newsp) ++ newsp = regs->sp; ++ return do_fork(clone_flags, newsp, regs, 0, ++ (int __user *)parent_tidptr, ++ (int __user *)child_tidptr); ++} ++ ++asmlinkage int sys_vfork(struct pt_regs *regs) ++{ ++ return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->sp, regs, ++ 0, NULL, NULL); ++} ++ ++asmlinkage int sys_execve(char __user *ufilename, char __user *__user *uargv, ++ char __user *__user *uenvp, struct pt_regs *regs) ++{ ++ int error; ++ char *filename; ++ ++ filename = getname(ufilename); ++ error = PTR_ERR(filename); ++ if (IS_ERR(filename)) ++ goto out; ++ ++ error = do_execve(filename, uargv, uenvp, regs); ++ if (error == 0) ++ current->ptrace &= ~PT_DTRACE; ++ putname(filename); ++ ++out: ++ return error; ++} ++ ++ ++/* ++ * This function is supposed to answer the question "who called ++ * schedule()?" ++ */ ++unsigned long get_wchan(struct task_struct *p) ++{ ++ unsigned long pc; ++ unsigned long stack_page; ++ ++ if (!p || p == current || p->state == TASK_RUNNING) ++ return 0; ++ ++ stack_page = (unsigned long)p->thread_info; ++ BUG_ON(!stack_page); ++ ++ /* ++ * The stored value of PC is either the address right after ++ * the call to __switch_to() or ret_from_fork. ++ */ ++ pc = thread_saved_pc(p); ++ if (in_sched_functions(pc)) { ++#ifdef CONFIG_FRAME_POINTER ++ unsigned long fp = p->thread.cpu_context.r7; ++ BUG_ON(fp < stack_page || fp > (THREAD_SIZE + stack_page)); ++ pc = *(unsigned long *)fp; ++#else ++ /* ++ * We depend on the frame size of schedule here, which ++ * is actually quite ugly. It might be possible to ++ * determine the frame size automatically at build ++ * time by doing this: ++ * - compile sched.c ++ * - disassemble the resulting sched.o ++ * - look for 'sub sp,??' shortly after ':' ++ */ ++ unsigned long sp = p->thread.cpu_context.ksp + 16; ++ BUG_ON(sp < stack_page || sp > (THREAD_SIZE + stack_page)); ++ pc = *(unsigned long *)sp; ++#endif ++ } ++ ++ return pc; ++} +Index: linux-2.6.18-avr32/arch/avr32/kernel/ptrace.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/ptrace.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,371 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#undef DEBUG ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++static struct pt_regs *get_user_regs(struct task_struct *tsk) ++{ ++ return (struct pt_regs *)((unsigned long) tsk->thread_info + ++ THREAD_SIZE - sizeof(struct pt_regs)); ++} ++ ++static void ptrace_single_step(struct task_struct *tsk) ++{ ++ pr_debug("ptrace_single_step: pid=%u, SR=0x%08lx\n", ++ tsk->pid, tsk->thread.cpu_context.sr); ++ if (!(tsk->thread.cpu_context.sr & SR_D)) { ++ /* ++ * Set a breakpoint at the current pc to force the ++ * process into debug mode. The syscall/exception ++ * exit code will set a breakpoint at the return ++ * address when this flag is set. ++ */ ++ pr_debug("ptrace_single_step: Setting TIF_BREAKPOINT\n"); ++ set_tsk_thread_flag(tsk, TIF_BREAKPOINT); ++ } ++ ++ /* The monitor code will do the actual step for us */ ++ set_tsk_thread_flag(tsk, TIF_SINGLE_STEP); ++} ++ ++/* ++ * Called by kernel/ptrace.c when detaching ++ * ++ * Make sure any single step bits, etc. are not set ++ */ ++void ptrace_disable(struct task_struct *child) ++{ ++ clear_tsk_thread_flag(child, TIF_SINGLE_STEP); ++} ++ ++/* ++ * Handle hitting a breakpoint ++ */ ++static void ptrace_break(struct task_struct *tsk, struct pt_regs *regs) ++{ ++ siginfo_t info; ++ ++ info.si_signo = SIGTRAP; ++ info.si_errno = 0; ++ info.si_code = TRAP_BRKPT; ++ info.si_addr = (void __user *)instruction_pointer(regs); ++ ++ pr_debug("ptrace_break: Sending SIGTRAP to PID %u (pc = 0x%p)\n", ++ tsk->pid, info.si_addr); ++ force_sig_info(SIGTRAP, &info, tsk); ++} ++ ++/* ++ * Read the word at offset "offset" into the task's "struct user". We ++ * actually access the pt_regs struct stored on the kernel stack. ++ */ ++static int ptrace_read_user(struct task_struct *tsk, unsigned long offset, ++ unsigned long __user *data) ++{ ++ unsigned long *regs; ++ unsigned long value; ++ ++ pr_debug("ptrace_read_user(%p, %#lx, %p)\n", ++ tsk, offset, data); ++ ++ if (offset & 3 || offset >= sizeof(struct user)) { ++ printk("ptrace_read_user: invalid offset 0x%08lx\n", offset); ++ return -EIO; ++ } ++ ++ regs = (unsigned long *)get_user_regs(tsk); ++ ++ value = 0; ++ if (offset < sizeof(struct pt_regs)) ++ value = regs[offset / sizeof(regs[0])]; ++ ++ return put_user(value, data); ++} ++ ++/* ++ * Write the word "value" to offset "offset" into the task's "struct ++ * user". We actually access the pt_regs struct stored on the kernel ++ * stack. ++ */ ++static int ptrace_write_user(struct task_struct *tsk, unsigned long offset, ++ unsigned long value) ++{ ++ unsigned long *regs; ++ ++ if (offset & 3 || offset >= sizeof(struct user)) { ++ printk("ptrace_write_user: invalid offset 0x%08lx\n", offset); ++ return -EIO; ++ } ++ ++ if (offset >= sizeof(struct pt_regs)) ++ return 0; ++ ++ regs = (unsigned long *)get_user_regs(tsk); ++ regs[offset / sizeof(regs[0])] = value; ++ ++ return 0; ++} ++ ++static int ptrace_getregs(struct task_struct *tsk, void __user *uregs) ++{ ++ struct pt_regs *regs = get_user_regs(tsk); ++ ++ return copy_to_user(uregs, regs, sizeof(*regs)) ? -EFAULT : 0; ++} ++ ++static int ptrace_setregs(struct task_struct *tsk, const void __user *uregs) ++{ ++ struct pt_regs newregs; ++ int ret; ++ ++ ret = -EFAULT; ++ if (copy_from_user(&newregs, uregs, sizeof(newregs)) == 0) { ++ struct pt_regs *regs = get_user_regs(tsk); ++ ++ ret = -EINVAL; ++ if (valid_user_regs(&newregs)) { ++ *regs = newregs; ++ ret = 0; ++ } ++ } ++ ++ return ret; ++} ++ ++long arch_ptrace(struct task_struct *child, long request, long addr, long data) ++{ ++ unsigned long tmp; ++ int ret; ++ ++ pr_debug("arch_ptrace(%ld, %d, %#lx, %#lx)\n", ++ request, child->pid, addr, data); ++ ++ pr_debug("ptrace: Enabling monitor mode...\n"); ++ __mtdr(DBGREG_DC, __mfdr(DBGREG_DC) | DC_MM | DC_DBE); ++ ++ switch (request) { ++ /* Read the word at location addr in the child process */ ++ case PTRACE_PEEKTEXT: ++ case PTRACE_PEEKDATA: ++ ret = access_process_vm(child, addr, &tmp, sizeof(tmp), 0); ++ if (ret == sizeof(tmp)) ++ ret = put_user(tmp, (unsigned long __user *)data); ++ else ++ ret = -EIO; ++ break; ++ ++ case PTRACE_PEEKUSR: ++ ret = ptrace_read_user(child, addr, ++ (unsigned long __user *)data); ++ break; ++ ++ /* Write the word in data at location addr */ ++ case PTRACE_POKETEXT: ++ case PTRACE_POKEDATA: ++ ret = access_process_vm(child, addr, &data, sizeof(data), 1); ++ if (ret == sizeof(data)) ++ ret = 0; ++ else ++ ret = -EIO; ++ break; ++ ++ case PTRACE_POKEUSR: ++ ret = ptrace_write_user(child, addr, data); ++ break; ++ ++ /* continue and stop at next (return from) syscall */ ++ case PTRACE_SYSCALL: ++ /* restart after signal */ ++ case PTRACE_CONT: ++ ret = -EIO; ++ if (!valid_signal(data)) ++ break; ++ if (request == PTRACE_SYSCALL) ++ set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); ++ else ++ clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); ++ child->exit_code = data; ++ /* XXX: Are we sure no breakpoints are active here? */ ++ wake_up_process(child); ++ ret = 0; ++ break; ++ ++ /* ++ * Make the child exit. Best I can do is send it a ++ * SIGKILL. Perhaps it should be put in the status that it ++ * wants to exit. ++ */ ++ case PTRACE_KILL: ++ ret = 0; ++ if (child->exit_state == EXIT_ZOMBIE) ++ break; ++ child->exit_code = SIGKILL; ++ wake_up_process(child); ++ break; ++ ++ /* ++ * execute single instruction. ++ */ ++ case PTRACE_SINGLESTEP: ++ ret = -EIO; ++ if (!valid_signal(data)) ++ break; ++ clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); ++ ptrace_single_step(child); ++ child->exit_code = data; ++ wake_up_process(child); ++ ret = 0; ++ break; ++ ++ /* Detach a process that was attached */ ++ case PTRACE_DETACH: ++ ret = ptrace_detach(child, data); ++ break; ++ ++ case PTRACE_GETREGS: ++ ret = ptrace_getregs(child, (void __user *)data); ++ break; ++ ++ case PTRACE_SETREGS: ++ ret = ptrace_setregs(child, (const void __user *)data); ++ break; ++ ++ default: ++ ret = ptrace_request(child, request, addr, data); ++ break; ++ } ++ ++ pr_debug("sys_ptrace returning %d (DC = 0x%08lx)\n", ret, __mfdr(DBGREG_DC)); ++ return ret; ++} ++ ++asmlinkage void syscall_trace(void) ++{ ++ pr_debug("syscall_trace called\n"); ++ if (!test_thread_flag(TIF_SYSCALL_TRACE)) ++ return; ++ if (!(current->ptrace & PT_PTRACED)) ++ return; ++ ++ pr_debug("syscall_trace: notifying parent\n"); ++ /* The 0x80 provides a way for the tracing parent to ++ * distinguish between a syscall stop and SIGTRAP delivery */ ++ ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) ++ ? 0x80 : 0)); ++ ++ /* ++ * this isn't the same as continuing with a signal, but it ++ * will do for normal use. strace only continues with a ++ * signal if the stopping signal is not SIGTRAP. -brl ++ */ ++ if (current->exit_code) { ++ pr_debug("syscall_trace: sending signal %d to PID %u\n", ++ current->exit_code, current->pid); ++ send_sig(current->exit_code, current, 1); ++ current->exit_code = 0; ++ } ++} ++ ++asmlinkage void do_debug_priv(struct pt_regs *regs) ++{ ++ unsigned long dc, ds; ++ unsigned long die_val; ++ ++ ds = __mfdr(DBGREG_DS); ++ ++ pr_debug("do_debug_priv: pc = %08lx, ds = %08lx\n", regs->pc, ds); ++ ++ if (ds & DS_SSS) ++ die_val = DIE_SSTEP; ++ else ++ die_val = DIE_BREAKPOINT; ++ ++ if (notify_die(die_val, regs, 0, SIGTRAP) == NOTIFY_STOP) ++ return; ++ ++ if (likely(ds & DS_SSS)) { ++ extern void itlb_miss(void); ++ extern void tlb_miss_common(void); ++ struct thread_info *ti; ++ ++ dc = __mfdr(DBGREG_DC); ++ dc &= ~DC_SS; ++ __mtdr(DBGREG_DC, dc); ++ ++ ti = current_thread_info(); ++ ti->flags |= _TIF_BREAKPOINT; ++ ++ /* The TLB miss handlers don't check thread flags */ ++ if ((regs->pc >= (unsigned long)&itlb_miss) ++ && (regs->pc <= (unsigned long)&tlb_miss_common)) { ++ __mtdr(DBGREG_BWA2A, sysreg_read(RAR_EX)); ++ __mtdr(DBGREG_BWC2A, 0x40000001 | (get_asid() << 1)); ++ } ++ ++ /* ++ * If we're running in supervisor mode, the breakpoint ++ * will take us where we want directly, no need to ++ * single step. ++ */ ++ if ((regs->sr & MODE_MASK) != MODE_SUPERVISOR) ++ ti->flags |= TIF_SINGLE_STEP; ++ } else { ++ panic("Unable to handle debug trap at pc = %08lx\n", ++ regs->pc); ++ } ++} ++ ++/* ++ * Handle breakpoints, single steps and other debuggy things. To keep ++ * things simple initially, we run with interrupts and exceptions ++ * disabled all the time. ++ */ ++asmlinkage void do_debug(struct pt_regs *regs) ++{ ++ unsigned long dc, ds; ++ ++ ds = __mfdr(DBGREG_DS); ++ pr_debug("do_debug: pc = %08lx, ds = %08lx\n", regs->pc, ds); ++ ++ if (test_thread_flag(TIF_BREAKPOINT)) { ++ pr_debug("TIF_BREAKPOINT set\n"); ++ /* We're taking care of it */ ++ clear_thread_flag(TIF_BREAKPOINT); ++ __mtdr(DBGREG_BWC2A, 0); ++ } ++ ++ if (test_thread_flag(TIF_SINGLE_STEP)) { ++ pr_debug("TIF_SINGLE_STEP set, ds = 0x%08lx\n", ds); ++ if (ds & DS_SSS) { ++ dc = __mfdr(DBGREG_DC); ++ dc &= ~DC_SS; ++ __mtdr(DBGREG_DC, dc); ++ ++ clear_thread_flag(TIF_SINGLE_STEP); ++ ptrace_break(current, regs); ++ } ++ } else { ++ /* regular breakpoint */ ++ ptrace_break(current, regs); ++ } ++} +Index: linux-2.6.18-avr32/arch/avr32/kernel/semaphore.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/semaphore.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,148 @@ ++/* ++ * AVR32 sempahore implementation. ++ * ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * Based on linux/arch/i386/kernel/semaphore.c ++ * Copyright (C) 1999 Linus Torvalds ++ * ++ * 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 ++ ++/* ++ * Semaphores are implemented using a two-way counter: ++ * The "count" variable is decremented for each process ++ * that tries to acquire the semaphore, while the "sleeping" ++ * variable is a count of such acquires. ++ * ++ * Notably, the inline "up()" and "down()" functions can ++ * efficiently test if they need to do any extra work (up ++ * needs to do something only if count was negative before ++ * the increment operation. ++ * ++ * "sleeping" and the contention routine ordering is protected ++ * by the spinlock in the semaphore's waitqueue head. ++ * ++ * Note that these functions are only called when there is ++ * contention on the lock, and as such all this is the ++ * "non-critical" part of the whole semaphore business. The ++ * critical part is the inline stuff in ++ * where we want to avoid any extra jumps and calls. ++ */ ++ ++/* ++ * Logic: ++ * - only on a boundary condition do we need to care. When we go ++ * from a negative count to a non-negative, we wake people up. ++ * - when we go from a non-negative count to a negative do we ++ * (a) synchronize with the "sleeper" count and (b) make sure ++ * that we're on the wakeup list before we synchronize so that ++ * we cannot lose wakeup events. ++ */ ++ ++void __up(struct semaphore *sem) ++{ ++ wake_up(&sem->wait); ++} ++EXPORT_SYMBOL(__up); ++ ++void __sched __down(struct semaphore *sem) ++{ ++ struct task_struct *tsk = current; ++ DECLARE_WAITQUEUE(wait, tsk); ++ unsigned long flags; ++ ++ tsk->state = TASK_UNINTERRUPTIBLE; ++ spin_lock_irqsave(&sem->wait.lock, flags); ++ add_wait_queue_exclusive_locked(&sem->wait, &wait); ++ ++ sem->sleepers++; ++ for (;;) { ++ int sleepers = sem->sleepers; ++ ++ /* ++ * Add "everybody else" into it. They aren't ++ * playing, because we own the spinlock in ++ * the wait_queue_head. ++ */ ++ if (atomic_add_return(sleepers - 1, &sem->count) >= 0) { ++ sem->sleepers = 0; ++ break; ++ } ++ sem->sleepers = 1; /* us - see -1 above */ ++ spin_unlock_irqrestore(&sem->wait.lock, flags); ++ ++ schedule(); ++ ++ spin_lock_irqsave(&sem->wait.lock, flags); ++ tsk->state = TASK_UNINTERRUPTIBLE; ++ } ++ remove_wait_queue_locked(&sem->wait, &wait); ++ wake_up_locked(&sem->wait); ++ spin_unlock_irqrestore(&sem->wait.lock, flags); ++ tsk->state = TASK_RUNNING; ++} ++EXPORT_SYMBOL(__down); ++ ++int __sched __down_interruptible(struct semaphore *sem) ++{ ++ int retval = 0; ++ struct task_struct *tsk = current; ++ DECLARE_WAITQUEUE(wait, tsk); ++ unsigned long flags; ++ ++ tsk->state = TASK_INTERRUPTIBLE; ++ spin_lock_irqsave(&sem->wait.lock, flags); ++ add_wait_queue_exclusive_locked(&sem->wait, &wait); ++ ++ sem->sleepers++; ++ for (;;) { ++ int sleepers = sem->sleepers; ++ ++ /* ++ * With signals pending, this turns into the trylock ++ * failure case - we won't be sleeping, and we can't ++ * get the lock as it has contention. Just correct the ++ * count and exit. ++ */ ++ if (signal_pending(current)) { ++ retval = -EINTR; ++ sem->sleepers = 0; ++ atomic_add(sleepers, &sem->count); ++ break; ++ } ++ ++ /* ++ * Add "everybody else" into it. They aren't ++ * playing, because we own the spinlock in ++ * the wait_queue_head. ++ */ ++ if (atomic_add_return(sleepers - 1, &sem->count) >= 0) { ++ sem->sleepers = 0; ++ break; ++ } ++ sem->sleepers = 1; /* us - see -1 above */ ++ spin_unlock_irqrestore(&sem->wait.lock, flags); ++ ++ schedule(); ++ ++ spin_lock_irqsave(&sem->wait.lock, flags); ++ tsk->state = TASK_INTERRUPTIBLE; ++ } ++ remove_wait_queue_locked(&sem->wait, &wait); ++ wake_up_locked(&sem->wait); ++ spin_unlock_irqrestore(&sem->wait.lock, flags); ++ ++ tsk->state = TASK_RUNNING; ++ return retval; ++} ++EXPORT_SYMBOL(__down_interruptible); +Index: linux-2.6.18-avr32/arch/avr32/kernel/setup.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/setup.c 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,335 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++extern int root_mountflags; ++ ++/* ++ * Bootloader-provided information about physical memory ++ */ ++struct tag_mem_range *mem_phys; ++struct tag_mem_range *mem_reserved; ++struct tag_mem_range *mem_ramdisk; ++ ++/* ++ * Initialize loops_per_jiffy as 5000000 (500MIPS). ++ * Better make it too large than too small... ++ */ ++struct avr32_cpuinfo boot_cpu_data = { ++ .loops_per_jiffy = 5000000 ++}; ++EXPORT_SYMBOL(boot_cpu_data); ++ ++static char command_line[COMMAND_LINE_SIZE]; ++ ++/* ++ * Should be more than enough, but if you have a _really_ complex ++ * setup, you might need to increase the size of this... ++ */ ++static struct tag_mem_range __initdata mem_range_cache[32]; ++static unsigned mem_range_next_free; ++ ++/* ++ * Standard memory resources ++ */ ++static struct resource mem_res[] = { ++ { ++ .name = "Kernel code", ++ .start = 0, ++ .end = 0, ++ .flags = IORESOURCE_MEM ++ }, ++ { ++ .name = "Kernel data", ++ .start = 0, ++ .end = 0, ++ .flags = IORESOURCE_MEM, ++ }, ++}; ++ ++#define kernel_code mem_res[0] ++#define kernel_data mem_res[1] ++ ++/* ++ * Early framebuffer allocation. Works as follows: ++ * - If fbmem_size is zero, nothing will be allocated or reserved. ++ * - If fbmem_start is zero when setup_bootmem() is called, ++ * fbmem_size bytes will be allocated from the bootmem allocator. ++ * - If fbmem_start is nonzero, an area of size fbmem_size will be ++ * reserved at the physical address fbmem_start if necessary. If ++ * the area isn't in a memory region known to the kernel, it will ++ * be left alone. ++ * ++ * Board-specific code may use these variables to set up platform data ++ * for the framebuffer driver if fbmem_size is nonzero. ++ */ ++static unsigned long __initdata fbmem_start; ++static unsigned long __initdata fbmem_size; ++ ++/* ++ * "fbmem=xxx[kKmM]" allocates the specified amount of boot memory for ++ * use as framebuffer. ++ * ++ * "fbmem=xxx[kKmM]@yyy[kKmM]" defines a memory region of size xxx and ++ * starting at yyy to be reserved for use as framebuffer. ++ * ++ * The kernel won't verify that the memory region starting at yyy ++ * actually contains usable RAM. ++ */ ++static int __init early_parse_fbmem(char *p) ++{ ++ fbmem_size = memparse(p, &p); ++ if (*p == '@') ++ fbmem_start = memparse(p, &p); ++ return 0; ++} ++early_param("fbmem", early_parse_fbmem); ++ ++static inline void __init resource_init(void) ++{ ++ struct tag_mem_range *region; ++ ++ kernel_code.start = __pa(init_mm.start_code); ++ kernel_code.end = __pa(init_mm.end_code - 1); ++ kernel_data.start = __pa(init_mm.end_code); ++ kernel_data.end = __pa(init_mm.brk - 1); ++ ++ for (region = mem_phys; region; region = region->next) { ++ struct resource *res; ++ unsigned long phys_start, phys_end; ++ ++ if (region->size == 0) ++ continue; ++ ++ phys_start = region->addr; ++ phys_end = phys_start + region->size - 1; ++ ++ res = alloc_bootmem_low(sizeof(*res)); ++ res->name = "System RAM"; ++ res->start = phys_start; ++ res->end = phys_end; ++ res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; ++ ++ request_resource (&iomem_resource, res); ++ ++ if (kernel_code.start >= res->start && ++ kernel_code.end <= res->end) ++ request_resource (res, &kernel_code); ++ if (kernel_data.start >= res->start && ++ kernel_data.end <= res->end) ++ request_resource (res, &kernel_data); ++ } ++} ++ ++static int __init parse_tag_core(struct tag *tag) ++{ ++ if (tag->hdr.size > 2) { ++ if ((tag->u.core.flags & 1) == 0) ++ root_mountflags &= ~MS_RDONLY; ++ ROOT_DEV = new_decode_dev(tag->u.core.rootdev); ++ } ++ return 0; ++} ++__tagtable(ATAG_CORE, parse_tag_core); ++ ++static int __init parse_tag_mem_range(struct tag *tag, ++ struct tag_mem_range **root) ++{ ++ struct tag_mem_range *cur, **pprev; ++ struct tag_mem_range *new; ++ ++ /* ++ * Ignore zero-sized entries. If we're running standalone, the ++ * SDRAM code may emit such entries if something goes ++ * wrong... ++ */ ++ if (tag->u.mem_range.size == 0) ++ return 0; ++ ++ /* ++ * Copy the data so the bootmem init code doesn't need to care ++ * about it. ++ */ ++ if (mem_range_next_free >= ++ (sizeof(mem_range_cache) / sizeof(mem_range_cache[0]))) ++ panic("Physical memory map too complex!\n"); ++ ++ new = &mem_range_cache[mem_range_next_free++]; ++ *new = tag->u.mem_range; ++ ++ pprev = root; ++ cur = *root; ++ while (cur) { ++ pprev = &cur->next; ++ cur = cur->next; ++ } ++ ++ *pprev = new; ++ new->next = NULL; ++ ++ return 0; ++} ++ ++static int __init parse_tag_mem(struct tag *tag) ++{ ++ return parse_tag_mem_range(tag, &mem_phys); ++} ++__tagtable(ATAG_MEM, parse_tag_mem); ++ ++static int __init parse_tag_cmdline(struct tag *tag) ++{ ++ strlcpy(saved_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE); ++ return 0; ++} ++__tagtable(ATAG_CMDLINE, parse_tag_cmdline); ++ ++static int __init parse_tag_rdimg(struct tag *tag) ++{ ++ return parse_tag_mem_range(tag, &mem_ramdisk); ++} ++__tagtable(ATAG_RDIMG, parse_tag_rdimg); ++ ++static int __init parse_tag_clock(struct tag *tag) ++{ ++ /* ++ * We'll figure out the clocks by peeking at the system ++ * manager regs directly. ++ */ ++ return 0; ++} ++__tagtable(ATAG_CLOCK, parse_tag_clock); ++ ++static int __init parse_tag_rsvd_mem(struct tag *tag) ++{ ++ return parse_tag_mem_range(tag, &mem_reserved); ++} ++__tagtable(ATAG_RSVD_MEM, parse_tag_rsvd_mem); ++ ++static int __init parse_tag_ethernet(struct tag *tag) ++{ ++#if 0 ++ const struct platform_device *pdev; ++ ++ /* ++ * We really need a bus type that supports "classes"...this ++ * will do for now (until we must handle other kinds of ++ * ethernet controllers) ++ */ ++ pdev = platform_get_device("macb", tag->u.ethernet.mac_index); ++ if (pdev && pdev->dev.platform_data) { ++ struct eth_platform_data *data = pdev->dev.platform_data; ++ ++ data->valid = 1; ++ data->mii_phy_addr = tag->u.ethernet.mii_phy_addr; ++ memcpy(data->hw_addr, tag->u.ethernet.hw_address, ++ sizeof(data->hw_addr)); ++ } ++#endif ++ return 0; ++} ++__tagtable(ATAG_ETHERNET, parse_tag_ethernet); ++ ++/* ++ * Scan the tag table for this tag, and call its parse function. The ++ * tag table is built by the linker from all the __tagtable ++ * declarations. ++ */ ++static int __init parse_tag(struct tag *tag) ++{ ++ extern struct tagtable __tagtable_begin, __tagtable_end; ++ struct tagtable *t; ++ ++ for (t = &__tagtable_begin; t < &__tagtable_end; t++) ++ if (tag->hdr.tag == t->tag) { ++ t->parse(tag); ++ break; ++ } ++ ++ return t < &__tagtable_end; ++} ++ ++/* ++ * Parse all tags in the list we got from the boot loader ++ */ ++static void __init parse_tags(struct tag *t) ++{ ++ for (; t->hdr.tag != ATAG_NONE; t = tag_next(t)) ++ if (!parse_tag(t)) ++ printk(KERN_WARNING ++ "Ignoring unrecognised tag 0x%08x\n", ++ t->hdr.tag); ++} ++ ++void __init setup_arch (char **cmdline_p) ++{ ++ struct clk *cpu_clk; ++ ++ parse_tags(bootloader_tags); ++ ++ setup_processor(); ++ setup_platform(); ++ ++ cpu_clk = clk_get(NULL, "cpu"); ++ if (IS_ERR(cpu_clk)) { ++ printk(KERN_WARNING "Warning: Unable to get CPU clock\n"); ++ } else { ++ unsigned long cpu_hz = clk_get_rate(cpu_clk); ++ ++ /* ++ * Well, duh, but it's probably a good idea to ++ * increment the use count. ++ */ ++ clk_enable(cpu_clk); ++ ++ boot_cpu_data.clk = cpu_clk; ++ boot_cpu_data.loops_per_jiffy = cpu_hz * 4; ++ printk("CPU: Running at %lu.%03lu MHz\n", ++ ((cpu_hz + 500) / 1000) / 1000, ++ ((cpu_hz + 500) / 1000) % 1000); ++ } ++ ++ init_mm.start_code = (unsigned long) &_text; ++ init_mm.end_code = (unsigned long) &_etext; ++ init_mm.end_data = (unsigned long) &_edata; ++ init_mm.brk = (unsigned long) &_end; ++ ++ strlcpy(command_line, saved_command_line, COMMAND_LINE_SIZE); ++ *cmdline_p = command_line; ++ parse_early_param(); ++ ++ setup_bootmem(); ++ ++ board_setup_fbmem(fbmem_start, fbmem_size); ++ ++#ifdef CONFIG_VT ++ conswitchp = &dummy_con; ++#endif ++ ++ paging_init(); ++ ++ resource_init(); ++} +Index: linux-2.6.18-avr32/arch/avr32/kernel/signal.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/signal.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,328 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * Based on linux/arch/sh/kernel/signal.c ++ * Copyright (C) 1999, 2000 Niibe Yutaka & Kaz Kojima ++ * Copyright (C) 1991, 1992 Linus Torvalds ++ * ++ * 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 ++ ++#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) ++ ++asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, ++ struct pt_regs *regs) ++{ ++ return do_sigaltstack(uss, uoss, regs->sp); ++} ++ ++struct rt_sigframe ++{ ++ struct siginfo info; ++ struct ucontext uc; ++ unsigned long retcode; ++}; ++ ++static int ++restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) ++{ ++ int err = 0; ++ ++#define COPY(x) err |= __get_user(regs->x, &sc->x) ++ COPY(sr); ++ COPY(pc); ++ COPY(lr); ++ COPY(sp); ++ COPY(r12); ++ COPY(r11); ++ COPY(r10); ++ COPY(r9); ++ COPY(r8); ++ COPY(r7); ++ COPY(r6); ++ COPY(r5); ++ COPY(r4); ++ COPY(r3); ++ COPY(r2); ++ COPY(r1); ++ COPY(r0); ++#undef COPY ++ ++ /* ++ * Don't allow anyone to pretend they're running in supervisor ++ * mode or something... ++ */ ++ err |= !valid_user_regs(regs); ++ ++ return err; ++} ++ ++ ++asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) ++{ ++ struct rt_sigframe __user *frame; ++ sigset_t set; ++ ++ frame = (struct rt_sigframe __user *)regs->sp; ++ pr_debug("SIG return: frame = %p\n", frame); ++ ++ if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) ++ goto badframe; ++ ++ if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) ++ goto badframe; ++ ++ sigdelsetmask(&set, ~_BLOCKABLE); ++ spin_lock_irq(¤t->sighand->siglock); ++ current->blocked = set; ++ recalc_sigpending(); ++ spin_unlock_irq(¤t->sighand->siglock); ++ ++ if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) ++ goto badframe; ++ ++ pr_debug("Context restored: pc = %08lx, lr = %08lx, sp = %08lx\n", ++ regs->pc, regs->lr, regs->sp); ++ ++ return regs->r12; ++ ++badframe: ++ force_sig(SIGSEGV, current); ++ return 0; ++} ++ ++static int ++setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs) ++{ ++ int err = 0; ++ ++#define COPY(x) err |= __put_user(regs->x, &sc->x) ++ COPY(sr); ++ COPY(pc); ++ COPY(lr); ++ COPY(sp); ++ COPY(r12); ++ COPY(r11); ++ COPY(r10); ++ COPY(r9); ++ COPY(r8); ++ COPY(r7); ++ COPY(r6); ++ COPY(r5); ++ COPY(r4); ++ COPY(r3); ++ COPY(r2); ++ COPY(r1); ++ COPY(r0); ++#undef COPY ++ ++ return err; ++} ++ ++static inline void __user * ++get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, int framesize) ++{ ++ unsigned long sp = regs->sp; ++ ++ if ((ka->sa.sa_flags & SA_ONSTACK) && !sas_ss_flags(sp)) ++ sp = current->sas_ss_sp + current->sas_ss_size; ++ ++ return (void __user *)((sp - framesize) & ~3); ++} ++ ++static int ++setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, ++ sigset_t *set, struct pt_regs *regs) ++{ ++ struct rt_sigframe __user *frame; ++ int err = 0; ++ ++ frame = get_sigframe(ka, regs, sizeof(*frame)); ++ err = -EFAULT; ++ if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame))) ++ goto out; ++ ++ /* ++ * Set up the return code: ++ * ++ * mov r8, __NR_rt_sigreturn ++ * scall ++ * ++ * Note: This will blow up since we're using a non-executable ++ * stack. Better use SA_RESTORER. ++ */ ++#if __NR_rt_sigreturn > 127 ++# error __NR_rt_sigreturn must be < 127 to fit in a short mov ++#endif ++ err = __put_user(0x3008d733 | (__NR_rt_sigreturn << 20), ++ &frame->retcode); ++ ++ err |= copy_siginfo_to_user(&frame->info, info); ++ ++ /* Set up the ucontext */ ++ err |= __put_user(0, &frame->uc.uc_flags); ++ err |= __put_user(NULL, &frame->uc.uc_link); ++ err |= __put_user((void __user *)current->sas_ss_sp, ++ &frame->uc.uc_stack.ss_sp); ++ err |= __put_user(sas_ss_flags(regs->sp), ++ &frame->uc.uc_stack.ss_flags); ++ err |= __put_user(current->sas_ss_size, ++ &frame->uc.uc_stack.ss_size); ++ err |= setup_sigcontext(&frame->uc.uc_mcontext, regs); ++ err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); ++ ++ if (err) ++ goto out; ++ ++ regs->r12 = sig; ++ regs->r11 = (unsigned long) &frame->info; ++ regs->r10 = (unsigned long) &frame->uc; ++ regs->sp = (unsigned long) frame; ++ if (ka->sa.sa_flags & SA_RESTORER) ++ regs->lr = (unsigned long)ka->sa.sa_restorer; ++ else { ++ printk(KERN_NOTICE "[%s:%d] did not set SA_RESTORER\n", ++ current->comm, current->pid); ++ regs->lr = (unsigned long) &frame->retcode; ++ } ++ ++ pr_debug("SIG deliver [%s:%d]: sig=%d sp=0x%lx pc=0x%lx->0x%p lr=0x%lx\n", ++ current->comm, current->pid, sig, regs->sp, ++ regs->pc, ka->sa.sa_handler, regs->lr); ++ ++ regs->pc = (unsigned long) ka->sa.sa_handler; ++ ++out: ++ return err; ++} ++ ++static inline void restart_syscall(struct pt_regs *regs) ++{ ++ if (regs->r12 == -ERESTART_RESTARTBLOCK) ++ regs->r8 = __NR_restart_syscall; ++ else ++ regs->r12 = regs->r12_orig; ++ regs->pc -= 2; ++} ++ ++static inline void ++handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, ++ sigset_t *oldset, struct pt_regs *regs, int syscall) ++{ ++ int ret; ++ ++ /* ++ * Set up the stack frame ++ */ ++ ret = setup_rt_frame(sig, ka, info, oldset, regs); ++ ++ /* ++ * Check that the resulting registers are sane ++ */ ++ ret |= !valid_user_regs(regs); ++ ++ /* ++ * Block the signal if we were unsuccessful. ++ */ ++ if (ret != 0 || !(ka->sa.sa_flags & SA_NODEFER)) { ++ spin_lock_irq(¤t->sighand->siglock); ++ sigorsets(¤t->blocked, ¤t->blocked, ++ &ka->sa.sa_mask); ++ sigaddset(¤t->blocked, sig); ++ recalc_sigpending(); ++ spin_unlock_irq(¤t->sighand->siglock); ++ } ++ ++ if (ret == 0) ++ return; ++ ++ force_sigsegv(sig, current); ++} ++ ++/* ++ * Note that 'init' is a special process: it doesn't get signals it ++ * doesn't want to handle. Thus you cannot kill init even with a ++ * SIGKILL even by mistake. ++ */ ++int do_signal(struct pt_regs *regs, sigset_t *oldset, int syscall) ++{ ++ siginfo_t info; ++ int signr; ++ struct k_sigaction ka; ++ ++ /* ++ * We want the common case to go fast, which is why we may in ++ * certain cases get here from kernel mode. Just return ++ * without doing anything if so. ++ */ ++ if (!user_mode(regs)) ++ return 0; ++ ++ if (try_to_freeze()) { ++ signr = 0; ++ if (!signal_pending(current)) ++ goto no_signal; ++ } ++ ++ if (test_thread_flag(TIF_RESTORE_SIGMASK)) ++ oldset = ¤t->saved_sigmask; ++ else if (!oldset) ++ oldset = ¤t->blocked; ++ ++ signr = get_signal_to_deliver(&info, &ka, regs, NULL); ++no_signal: ++ if (syscall) { ++ switch (regs->r12) { ++ case -ERESTART_RESTARTBLOCK: ++ case -ERESTARTNOHAND: ++ if (signr > 0) { ++ regs->r12 = -EINTR; ++ break; ++ } ++ /* fall through */ ++ case -ERESTARTSYS: ++ if (signr > 0 && !(ka.sa.sa_flags & SA_RESTART)) { ++ regs->r12 = -EINTR; ++ break; ++ } ++ /* fall through */ ++ case -ERESTARTNOINTR: ++ restart_syscall(regs); ++ } ++ } ++ ++ if (signr == 0) { ++ /* No signal to deliver -- put the saved sigmask back */ ++ if (test_thread_flag(TIF_RESTORE_SIGMASK)) { ++ clear_thread_flag(TIF_RESTORE_SIGMASK); ++ sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); ++ } ++ return 0; ++ } ++ ++ handle_signal(signr, &ka, &info, oldset, regs, syscall); ++ return 1; ++} ++ ++asmlinkage void do_notify_resume(struct pt_regs *regs, struct thread_info *ti) ++{ ++ int syscall = 0; ++ ++ if ((sysreg_read(SR) & MODE_MASK) == MODE_SUPERVISOR) ++ syscall = 1; ++ ++ if (ti->flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) ++ do_signal(regs, ¤t->blocked, syscall); ++} +Index: linux-2.6.18-avr32/arch/avr32/kernel/switch_to.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/switch_to.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,35 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++ .text ++ .global __switch_to ++ .type __switch_to, @function ++ ++ /* Switch thread context from "prev" to "next", returning "last" ++ * r12 : prev ++ * r11 : &prev->thread + 1 ++ * r10 : &next->thread ++ */ ++__switch_to: ++ stm --r11, r0,r1,r2,r3,r4,r5,r6,r7,sp,lr ++ mfsr r9, SYSREG_SR ++ st.w --r11, r9 ++ ld.w r8, r10++ ++ /* ++ * schedule() may have been called from a mode with a different ++ * set of registers. Make sure we don't lose anything here. ++ */ ++ pushm r10,r12 ++ mtsr SYSREG_SR, r8 ++ frs /* flush the return stack */ ++ sub pc, -2 /* flush the pipeline */ ++ popm r10,r12 ++ ldm r10++, r0,r1,r2,r3,r4,r5,r6,r7,sp,pc ++ .size __switch_to, . - __switch_to +Index: linux-2.6.18-avr32/arch/avr32/kernel/sys_avr32.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/sys_avr32.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,51 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++asmlinkage int sys_pipe(unsigned long __user *filedes) ++{ ++ int fd[2]; ++ int error; ++ ++ error = do_pipe(fd); ++ if (!error) { ++ if (copy_to_user(filedes, fd, sizeof(fd))) ++ error = -EFAULT; ++ } ++ return error; ++} ++ ++asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, ++ unsigned long prot, unsigned long flags, ++ unsigned long fd, off_t offset) ++{ ++ int error = -EBADF; ++ struct file *file = NULL; ++ ++ flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); ++ if (!(flags & MAP_ANONYMOUS)) { ++ file = fget(fd); ++ if (!file) ++ return error; ++ } ++ ++ down_write(¤t->mm->mmap_sem); ++ error = do_mmap_pgoff(file, addr, len, prot, flags, offset); ++ up_write(¤t->mm->mmap_sem); ++ ++ if (file) ++ fput(file); ++ return error; ++} +Index: linux-2.6.18-avr32/arch/avr32/kernel/syscall-stubs.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/syscall-stubs.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,102 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++ ++/* ++ * Stubs for syscalls that require access to pt_regs or that take more ++ * than five parameters. ++ */ ++ ++#define ARG6 r3 ++ ++ .text ++ .global __sys_rt_sigsuspend ++ .type __sys_rt_sigsuspend,@function ++__sys_rt_sigsuspend: ++ mov r10, sp ++ rjmp sys_rt_sigsuspend ++ ++ .global __sys_sigaltstack ++ .type __sys_sigaltstack,@function ++__sys_sigaltstack: ++ mov r10, sp ++ rjmp sys_sigaltstack ++ ++ .global __sys_rt_sigreturn ++ .type __sys_rt_sigreturn,@function ++__sys_rt_sigreturn: ++ mov r12, sp ++ rjmp sys_rt_sigreturn ++ ++ .global __sys_fork ++ .type __sys_fork,@function ++__sys_fork: ++ mov r12, sp ++ rjmp sys_fork ++ ++ .global __sys_clone ++ .type __sys_clone,@function ++__sys_clone: ++ mov r8, sp ++ rjmp sys_clone ++ ++ .global __sys_vfork ++ .type __sys_vfork,@function ++__sys_vfork: ++ mov r12, sp ++ rjmp sys_vfork ++ ++ .global __sys_execve ++ .type __sys_execve,@function ++__sys_execve: ++ mov r9, sp ++ rjmp sys_execve ++ ++ .global __sys_mmap2 ++ .type __sys_mmap2,@function ++__sys_mmap2: ++ pushm lr ++ st.w --sp, ARG6 ++ rcall sys_mmap2 ++ sub sp, -4 ++ popm pc ++ ++ .global __sys_sendto ++ .type __sys_sendto,@function ++__sys_sendto: ++ pushm lr ++ st.w --sp, ARG6 ++ rcall sys_sendto ++ sub sp, -4 ++ popm pc ++ ++ .global __sys_recvfrom ++ .type __sys_recvfrom,@function ++__sys_recvfrom: ++ pushm lr ++ st.w --sp, ARG6 ++ rcall sys_recvfrom ++ sub sp, -4 ++ popm pc ++ ++ .global __sys_pselect6 ++ .type __sys_pselect6,@function ++__sys_pselect6: ++ pushm lr ++ st.w --sp, ARG6 ++ rcall sys_pselect6 ++ sub sp, -4 ++ popm pc ++ ++ .global __sys_splice ++ .type __sys_splice,@function ++__sys_splice: ++ pushm lr ++ st.w --sp, ARG6 ++ rcall sys_splice ++ sub sp, -4 ++ popm pc +Index: linux-2.6.18-avr32/arch/avr32/kernel/syscall_table.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/syscall_table.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,289 @@ ++/* ++ * AVR32 system call table ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++#if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE) ++#define sys_nfsservctl sys_ni_syscall ++#endif ++ ++#if !defined(CONFIG_SYSV_IPC) ++# define sys_ipc sys_ni_syscall ++#endif ++ ++ .section .rodata,"a",@progbits ++ .type sys_call_table,@object ++ .global sys_call_table ++ .align 2 ++sys_call_table: ++ .long sys_restart_syscall ++ .long sys_exit ++ .long __sys_fork ++ .long sys_read ++ .long sys_write ++ .long sys_open /* 5 */ ++ .long sys_close ++ .long sys_umask ++ .long sys_creat ++ .long sys_link ++ .long sys_unlink /* 10 */ ++ .long __sys_execve ++ .long sys_chdir ++ .long sys_time ++ .long sys_mknod ++ .long sys_chmod /* 15 */ ++ .long sys_chown ++ .long sys_lchown ++ .long sys_lseek ++ .long sys_llseek ++ .long sys_getpid /* 20 */ ++ .long sys_mount ++ .long sys_umount ++ .long sys_setuid ++ .long sys_getuid ++ .long sys_stime /* 25 */ ++ .long sys_ptrace ++ .long sys_alarm ++ .long sys_pause ++ .long sys_utime ++ .long sys_newstat /* 30 */ ++ .long sys_newfstat ++ .long sys_newlstat ++ .long sys_access ++ .long sys_chroot ++ .long sys_sync /* 35 */ ++ .long sys_fsync ++ .long sys_kill ++ .long sys_rename ++ .long sys_mkdir ++ .long sys_rmdir /* 40 */ ++ .long sys_dup ++ .long sys_pipe ++ .long sys_times ++ .long __sys_clone ++ .long sys_brk /* 45 */ ++ .long sys_setgid ++ .long sys_getgid ++ .long sys_getcwd ++ .long sys_geteuid ++ .long sys_getegid /* 50 */ ++ .long sys_acct ++ .long sys_setfsuid ++ .long sys_setfsgid ++ .long sys_ioctl ++ .long sys_fcntl /* 55 */ ++ .long sys_setpgid ++ .long sys_mremap ++ .long sys_setresuid ++ .long sys_getresuid ++ .long sys_setreuid /* 60 */ ++ .long sys_setregid ++ .long sys_ustat ++ .long sys_dup2 ++ .long sys_getppid ++ .long sys_getpgrp /* 65 */ ++ .long sys_setsid ++ .long sys_rt_sigaction ++ .long __sys_rt_sigreturn ++ .long sys_rt_sigprocmask ++ .long sys_rt_sigpending /* 70 */ ++ .long sys_rt_sigtimedwait ++ .long sys_rt_sigqueueinfo ++ .long __sys_rt_sigsuspend ++ .long sys_sethostname ++ .long sys_setrlimit /* 75 */ ++ .long sys_getrlimit ++ .long sys_getrusage ++ .long sys_gettimeofday ++ .long sys_settimeofday ++ .long sys_getgroups /* 80 */ ++ .long sys_setgroups ++ .long sys_select ++ .long sys_symlink ++ .long sys_fchdir ++ .long sys_readlink /* 85 */ ++ .long sys_pread64 ++ .long sys_pwrite64 ++ .long sys_swapon ++ .long sys_reboot ++ .long __sys_mmap2 /* 90 */ ++ .long sys_munmap ++ .long sys_truncate ++ .long sys_ftruncate ++ .long sys_fchmod ++ .long sys_fchown /* 95 */ ++ .long sys_getpriority ++ .long sys_setpriority ++ .long sys_wait4 ++ .long sys_statfs ++ .long sys_fstatfs /* 100 */ ++ .long sys_vhangup ++ .long __sys_sigaltstack ++ .long sys_syslog ++ .long sys_setitimer ++ .long sys_getitimer /* 105 */ ++ .long sys_swapoff ++ .long sys_sysinfo ++ .long sys_ipc ++ .long sys_sendfile ++ .long sys_setdomainname /* 110 */ ++ .long sys_newuname ++ .long sys_adjtimex ++ .long sys_mprotect ++ .long __sys_vfork ++ .long sys_init_module /* 115 */ ++ .long sys_delete_module ++ .long sys_quotactl ++ .long sys_getpgid ++ .long sys_bdflush ++ .long sys_sysfs /* 120 */ ++ .long sys_personality ++ .long sys_ni_syscall /* reserved for afs_syscall */ ++ .long sys_getdents ++ .long sys_flock ++ .long sys_msync /* 125 */ ++ .long sys_readv ++ .long sys_writev ++ .long sys_getsid ++ .long sys_fdatasync ++ .long sys_sysctl /* 130 */ ++ .long sys_mlock ++ .long sys_munlock ++ .long sys_mlockall ++ .long sys_munlockall ++ .long sys_sched_setparam /* 135 */ ++ .long sys_sched_getparam ++ .long sys_sched_setscheduler ++ .long sys_sched_getscheduler ++ .long sys_sched_yield ++ .long sys_sched_get_priority_max /* 140 */ ++ .long sys_sched_get_priority_min ++ .long sys_sched_rr_get_interval ++ .long sys_nanosleep ++ .long sys_poll ++ .long sys_nfsservctl /* 145 */ ++ .long sys_setresgid ++ .long sys_getresgid ++ .long sys_prctl ++ .long sys_socket ++ .long sys_bind /* 150 */ ++ .long sys_connect ++ .long sys_listen ++ .long sys_accept ++ .long sys_getsockname ++ .long sys_getpeername /* 155 */ ++ .long sys_socketpair ++ .long sys_send ++ .long sys_recv ++ .long __sys_sendto ++ .long __sys_recvfrom /* 160 */ ++ .long sys_shutdown ++ .long sys_setsockopt ++ .long sys_getsockopt ++ .long sys_sendmsg ++ .long sys_recvmsg /* 165 */ ++ .long sys_truncate64 ++ .long sys_ftruncate64 ++ .long sys_stat64 ++ .long sys_lstat64 ++ .long sys_fstat64 /* 170 */ ++ .long sys_pivot_root ++ .long sys_mincore ++ .long sys_madvise ++ .long sys_getdents64 ++ .long sys_fcntl64 /* 175 */ ++ .long sys_gettid ++ .long sys_readahead ++ .long sys_setxattr ++ .long sys_lsetxattr ++ .long sys_fsetxattr /* 180 */ ++ .long sys_getxattr ++ .long sys_lgetxattr ++ .long sys_fgetxattr ++ .long sys_listxattr ++ .long sys_llistxattr /* 185 */ ++ .long sys_flistxattr ++ .long sys_removexattr ++ .long sys_lremovexattr ++ .long sys_fremovexattr ++ .long sys_tkill /* 190 */ ++ .long sys_sendfile64 ++ .long sys_futex ++ .long sys_sched_setaffinity ++ .long sys_sched_getaffinity ++ .long sys_capget /* 195 */ ++ .long sys_capset ++ .long sys_io_setup ++ .long sys_io_destroy ++ .long sys_io_getevents ++ .long sys_io_submit /* 200 */ ++ .long sys_io_cancel ++ .long sys_fadvise64 ++ .long sys_exit_group ++ .long sys_lookup_dcookie ++ .long sys_epoll_create /* 205 */ ++ .long sys_epoll_ctl ++ .long sys_epoll_wait ++ .long sys_remap_file_pages ++ .long sys_set_tid_address ++ .long sys_timer_create /* 210 */ ++ .long sys_timer_settime ++ .long sys_timer_gettime ++ .long sys_timer_getoverrun ++ .long sys_timer_delete ++ .long sys_clock_settime /* 215 */ ++ .long sys_clock_gettime ++ .long sys_clock_getres ++ .long sys_clock_nanosleep ++ .long sys_statfs64 ++ .long sys_fstatfs64 /* 220 */ ++ .long sys_tgkill ++ .long sys_ni_syscall /* reserved for TUX */ ++ .long sys_utimes ++ .long sys_fadvise64_64 ++ .long sys_cacheflush /* 225 */ ++ .long sys_ni_syscall /* sys_vserver */ ++ .long sys_mq_open ++ .long sys_mq_unlink ++ .long sys_mq_timedsend ++ .long sys_mq_timedreceive /* 230 */ ++ .long sys_mq_notify ++ .long sys_mq_getsetattr ++ .long sys_kexec_load ++ .long sys_waitid ++ .long sys_add_key /* 235 */ ++ .long sys_request_key ++ .long sys_keyctl ++ .long sys_ioprio_set ++ .long sys_ioprio_get ++ .long sys_inotify_init /* 240 */ ++ .long sys_inotify_add_watch ++ .long sys_inotify_rm_watch ++ .long sys_openat ++ .long sys_mkdirat ++ .long sys_mknodat /* 245 */ ++ .long sys_fchownat ++ .long sys_futimesat ++ .long sys_fstatat64 ++ .long sys_unlinkat ++ .long sys_renameat /* 250 */ ++ .long sys_linkat ++ .long sys_symlinkat ++ .long sys_readlinkat ++ .long sys_fchmodat ++ .long sys_faccessat /* 255 */ ++ .long __sys_pselect6 ++ .long sys_ppoll ++ .long sys_unshare ++ .long sys_set_robust_list ++ .long sys_get_robust_list /* 260 */ ++ .long __sys_splice ++ .long sys_sync_file_range ++ .long sys_tee ++ .long sys_vmsplice ++ .long sys_ni_syscall /* r8 is saturated at nr_syscalls */ +Index: linux-2.6.18-avr32/arch/avr32/kernel/time.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/time.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,238 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * Based on MIPS implementation arch/mips/kernel/time.c ++ * Copyright 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++static cycle_t read_cycle_count(void) ++{ ++ return (cycle_t)sysreg_read(COUNT); ++} ++ ++static struct clocksource clocksource_avr32 = { ++ .name = "avr32", ++ .rating = 350, ++ .read = read_cycle_count, ++ .mask = CLOCKSOURCE_MASK(32), ++ .shift = 16, ++ .is_continuous = 1, ++}; ++ ++/* ++ * By default we provide the null RTC ops ++ */ ++static unsigned long null_rtc_get_time(void) ++{ ++ return mktime(2004, 1, 1, 0, 0, 0); ++} ++ ++static int null_rtc_set_time(unsigned long sec) ++{ ++ return 0; ++} ++ ++static unsigned long (*rtc_get_time)(void) = null_rtc_get_time; ++static int (*rtc_set_time)(unsigned long) = null_rtc_set_time; ++ ++/* how many counter cycles in a jiffy? */ ++static unsigned long cycles_per_jiffy; ++ ++/* cycle counter value at the previous timer interrupt */ ++static unsigned int timerhi, timerlo; ++ ++/* the count value for the next timer interrupt */ ++static unsigned int expirelo; ++ ++static void avr32_timer_ack(void) ++{ ++ unsigned int count; ++ ++ /* Ack this timer interrupt and set the next one */ ++ expirelo += cycles_per_jiffy; ++ if (expirelo == 0) { ++ printk(KERN_DEBUG "expirelo == 0\n"); ++ sysreg_write(COMPARE, expirelo + 1); ++ } else { ++ sysreg_write(COMPARE, expirelo); ++ } ++ ++ /* Check to see if we have missed any timer interrupts */ ++ count = sysreg_read(COUNT); ++ if ((count - expirelo) < 0x7fffffff) { ++ expirelo = count + cycles_per_jiffy; ++ sysreg_write(COMPARE, expirelo); ++ } ++} ++ ++static unsigned int avr32_hpt_read(void) ++{ ++ return sysreg_read(COUNT); ++} ++ ++/* ++ * Taken from MIPS c0_hpt_timer_init(). ++ * ++ * Why is it so complicated, and what is "count"? My assumption is ++ * that `count' specifies the "reference cycle", i.e. the cycle since ++ * reset that should mean "zero". The reason COUNT is written twice is ++ * probably to make sure we don't get any timer interrupts while we ++ * are messing with the counter. ++ */ ++static void avr32_hpt_init(unsigned int count) ++{ ++ count = sysreg_read(COUNT) - count; ++ expirelo = (count / cycles_per_jiffy + 1) * cycles_per_jiffy; ++ sysreg_write(COUNT, expirelo - cycles_per_jiffy); ++ sysreg_write(COMPARE, expirelo); ++ sysreg_write(COUNT, count); ++} ++ ++/* ++ * Scheduler clock - returns current time in nanosec units. ++ */ ++unsigned long long sched_clock(void) ++{ ++ /* There must be better ways...? */ ++ return (unsigned long long)jiffies * (1000000000 / HZ); ++} ++ ++/* ++ * local_timer_interrupt() does profiling and process accounting on a ++ * per-CPU basis. ++ * ++ * In UP mode, it is invoked from the (global) timer_interrupt. ++ */ ++static void local_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ if (current->pid) ++ profile_tick(CPU_PROFILING, regs); ++ update_process_times(user_mode(regs)); ++} ++ ++static irqreturn_t ++timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ unsigned int count; ++ ++ /* ack timer interrupt and try to set next interrupt */ ++ count = avr32_hpt_read(); ++ avr32_timer_ack(); ++ ++ /* Update timerhi/timerlo for intra-jiffy calibration */ ++ timerhi += count < timerlo; /* Wrap around */ ++ timerlo = count; ++ ++ /* ++ * Call the generic timer interrupt handler ++ */ ++ write_seqlock(&xtime_lock); ++ do_timer(regs); ++ write_sequnlock(&xtime_lock); ++ ++ /* ++ * In UP mode, we call local_timer_interrupt() to do profiling ++ * and process accounting. ++ * ++ * SMP is not supported yet. ++ */ ++ local_timer_interrupt(irq, dev_id, regs); ++ ++ return IRQ_HANDLED; ++} ++ ++static struct irqaction timer_irqaction = { ++ .handler = timer_interrupt, ++ .flags = IRQF_DISABLED, ++ .name = "timer", ++}; ++ ++void __init time_init(void) ++{ ++ unsigned long mult, shift, count_hz; ++ int ret; ++ ++ xtime.tv_sec = rtc_get_time(); ++ xtime.tv_nsec = 0; ++ ++ set_normalized_timespec(&wall_to_monotonic, ++ -xtime.tv_sec, -xtime.tv_nsec); ++ ++ printk("Before time_init: count=%08lx, compare=%08lx\n", ++ (unsigned long)sysreg_read(COUNT), ++ (unsigned long)sysreg_read(COMPARE)); ++ ++ count_hz = clk_get_rate(boot_cpu_data.clk); ++ shift = clocksource_avr32.shift; ++ mult = clocksource_hz2mult(count_hz, shift); ++ clocksource_avr32.mult = mult; ++ ++ printk("Cycle counter: mult=%lu, shift=%lu\n", mult, shift); ++ ++ { ++ u64 tmp; ++ ++ tmp = TICK_NSEC; ++ tmp <<= shift; ++ tmp += mult / 2; ++ do_div(tmp, mult); ++ ++ cycles_per_jiffy = tmp; ++ } ++ ++ /* This sets up the high precision timer for the first interrupt. */ ++ avr32_hpt_init(avr32_hpt_read()); ++ ++ printk("After time_init: count=%08lx, compare=%08lx\n", ++ (unsigned long)sysreg_read(COUNT), ++ (unsigned long)sysreg_read(COMPARE)); ++ ++ ret = clocksource_register(&clocksource_avr32); ++ if (ret) ++ printk(KERN_ERR ++ "timer: could not register clocksource: %d\n", ret); ++ ++ ret = setup_irq(0, &timer_irqaction); ++ if (ret) ++ printk("timer: could not request IRQ 0: %d\n", ret); ++} ++ ++static struct sysdev_class timer_class = { ++ set_kset_name("timer"), ++}; ++ ++static struct sys_device timer_device = { ++ .id = 0, ++ .cls = &timer_class, ++}; ++ ++static int __init init_timer_sysfs(void) ++{ ++ int err = sysdev_class_register(&timer_class); ++ if (!err) ++ err = sysdev_register(&timer_device); ++ return err; ++} ++ ++device_initcall(init_timer_sysfs); +Index: linux-2.6.18-avr32/arch/avr32/kernel/traps.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/traps.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,425 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#undef DEBUG ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static void dump_mem(const char *str, unsigned long bottom, unsigned long top) ++{ ++ unsigned long p; ++ int i; ++ ++ printk("%s(0x%08lx to 0x%08lx)\n", str, bottom, top); ++ ++ for (p = bottom & ~31; p < top; ) { ++ printk("%04lx: ", p & 0xffff); ++ ++ for (i = 0; i < 8; i++, p += 4) { ++ unsigned int val; ++ ++ if (p < bottom || p >= top) ++ printk(" "); ++ else { ++ if (__get_user(val, (unsigned int __user *)p)) { ++ printk("\n"); ++ goto out; ++ } ++ printk("%08x ", val); ++ } ++ } ++ printk("\n"); ++ } ++ ++out: ++ return; ++} ++ ++#ifdef CONFIG_FRAME_POINTER ++static inline void __show_trace(struct task_struct *tsk, unsigned long *sp, ++ struct pt_regs *regs) ++{ ++ unsigned long __user *fp; ++ unsigned long __user *last_fp = NULL; ++ ++ if (regs) { ++ fp = (unsigned long __user *)regs->r7; ++ } else if (tsk == current) { ++ register unsigned long __user *real_fp __asm__("r7"); ++ fp = real_fp; ++ } else { ++ fp = (unsigned long __user *)tsk->thread.cpu_context.r7; ++ } ++ ++ /* ++ * Walk the stack until (a) we get an exception, (b) the frame ++ * pointer becomes zero, or (c) the frame pointer gets stuck ++ * at the same value. ++ */ ++ while (fp && fp != last_fp) { ++ unsigned long lr, new_fp = 0; ++ ++ last_fp = fp; ++ if (__get_user(lr, fp)) ++ break; ++ if (fp && __get_user(new_fp, fp + 1)) ++ break; ++ fp = (unsigned long __user *)new_fp; ++ ++ printk(" [<%08lx>] ", lr); ++ print_symbol("%s\n", lr); ++ } ++ printk("\n"); ++} ++#else ++static inline void __show_trace(struct task_struct *tsk, unsigned long *sp, ++ struct pt_regs *regs) ++{ ++ unsigned long addr; ++ ++ while (!kstack_end(sp)) { ++ addr = *sp++; ++ if (kernel_text_address(addr)) { ++ printk(" [<%08lx>] ", addr); ++ print_symbol("%s\n", addr); ++ } ++ } ++} ++#endif ++ ++void show_trace(struct task_struct *tsk, unsigned long *sp, ++ struct pt_regs *regs) ++{ ++ if (regs && ++ (((regs->sr & MODE_MASK) == MODE_EXCEPTION) || ++ ((regs->sr & MODE_MASK) == MODE_USER))) ++ return; ++ ++ printk ("Call trace:"); ++#ifdef CONFIG_KALLSYMS ++ printk("\n"); ++#endif ++ ++ __show_trace(tsk, sp, regs); ++ printk("\n"); ++} ++ ++void show_stack(struct task_struct *tsk, unsigned long *sp) ++{ ++ unsigned long stack; ++ ++ if (!tsk) ++ tsk = current; ++ if (sp == 0) { ++ if (tsk == current) { ++ register unsigned long *real_sp __asm__("sp"); ++ sp = real_sp; ++ } else { ++ sp = (unsigned long *)tsk->thread.cpu_context.ksp; ++ } ++ } ++ ++ stack = (unsigned long)sp; ++ dump_mem("Stack: ", stack, ++ THREAD_SIZE + (unsigned long)tsk->thread_info); ++ show_trace(tsk, sp, NULL); ++} ++ ++void dump_stack(void) ++{ ++ show_stack(NULL, NULL); ++} ++EXPORT_SYMBOL(dump_stack); ++ ++ATOMIC_NOTIFIER_HEAD(avr32_die_chain); ++ ++int register_die_notifier(struct notifier_block *nb) ++{ ++ pr_debug("register_die_notifier: %p\n", nb); ++ ++ return atomic_notifier_chain_register(&avr32_die_chain, nb); ++} ++EXPORT_SYMBOL(register_die_notifier); ++ ++int unregister_die_notifier(struct notifier_block *nb) ++{ ++ return atomic_notifier_chain_unregister(&avr32_die_chain, nb); ++} ++EXPORT_SYMBOL(unregister_die_notifier); ++ ++static DEFINE_SPINLOCK(die_lock); ++ ++void __die(const char *str, struct pt_regs *regs, unsigned long err, ++ const char *file, const char *func, unsigned long line) ++{ ++ struct task_struct *tsk = current; ++ static int die_counter; ++ ++ console_verbose(); ++ spin_lock_irq(&die_lock); ++ bust_spinlocks(1); ++ ++ printk(KERN_ALERT "%s", str); ++ if (file && func) ++ printk(" in %s:%s, line %ld", file, func, line); ++ printk("[#%d]:\n", ++die_counter); ++ print_modules(); ++ show_regs(regs); ++ printk("Process %s (pid: %d, stack limit = 0x%p)\n", ++ tsk->comm, tsk->pid, tsk->thread_info + 1); ++ ++ if (!user_mode(regs) || in_interrupt()) { ++ dump_mem("Stack: ", regs->sp, ++ THREAD_SIZE + (unsigned long)tsk->thread_info); ++ } ++ ++ bust_spinlocks(0); ++ spin_unlock_irq(&die_lock); ++ do_exit(SIGSEGV); ++} ++ ++void __die_if_kernel(const char *str, struct pt_regs *regs, unsigned long err, ++ const char *file, const char *func, unsigned long line) ++{ ++ if (!user_mode(regs)) ++ __die(str, regs, err, file, func, line); ++} ++ ++asmlinkage void do_nmi(unsigned long ecr, struct pt_regs *regs) ++{ ++#ifdef CONFIG_SUBARCH_AVR32B ++ /* ++ * The exception entry always saves RSR_EX. For NMI, this is ++ * wrong; it should be RSR_NMI ++ */ ++ regs->sr = sysreg_read(RSR_NMI); ++#endif ++ ++ printk("NMI taken!!!!\n"); ++ die("NMI", regs, ecr); ++ BUG(); ++} ++ ++asmlinkage void do_critical_exception(unsigned long ecr, struct pt_regs *regs) ++{ ++ printk("Unable to handle critical exception %lu at pc = %08lx!\n", ++ ecr, regs->pc); ++ die("Oops", regs, ecr); ++ BUG(); ++} ++ ++asmlinkage void do_address_exception(unsigned long ecr, struct pt_regs *regs) ++{ ++ siginfo_t info; ++ ++ die_if_kernel("Oops: Address exception in kernel mode", regs, ecr); ++ ++#ifdef DEBUG ++ if (ecr == ECR_ADDR_ALIGN_X) ++ pr_debug("Instruction Address Exception at pc = %08lx\n", ++ regs->pc); ++ else if (ecr == ECR_ADDR_ALIGN_R) ++ pr_debug("Data Address Exception (Read) at pc = %08lx\n", ++ regs->pc); ++ else if (ecr == ECR_ADDR_ALIGN_W) ++ pr_debug("Data Address Exception (Write) at pc = %08lx\n", ++ regs->pc); ++ else ++ BUG(); ++ ++ show_regs(regs); ++#endif ++ ++ info.si_signo = SIGBUS; ++ info.si_errno = 0; ++ info.si_code = BUS_ADRALN; ++ info.si_addr = (void __user *)regs->pc; ++ ++ force_sig_info(SIGBUS, &info, current); ++} ++ ++/* This way of handling undefined instructions is stolen from ARM */ ++static LIST_HEAD(undef_hook); ++static spinlock_t undef_lock = SPIN_LOCK_UNLOCKED; ++ ++void register_undef_hook(struct undef_hook *hook) ++{ ++ spin_lock_irq(&undef_lock); ++ list_add(&hook->node, &undef_hook); ++ spin_unlock_irq(&undef_lock); ++} ++ ++void unregister_undef_hook(struct undef_hook *hook) ++{ ++ spin_lock_irq(&undef_lock); ++ list_del(&hook->node); ++ spin_unlock_irq(&undef_lock); ++} ++ ++static int do_cop_absent(u32 insn) ++{ ++ int cop_nr; ++ u32 cpucr; ++ if ( (insn & 0xfdf00000) == 0xf1900000 ) ++ /* LDC0 */ ++ cop_nr = 0; ++ else ++ cop_nr = (insn >> 13) & 0x7; ++ ++ /* Try enabling the coprocessor */ ++ cpucr = sysreg_read(CPUCR); ++ cpucr |= (1 << (24 + cop_nr)); ++ sysreg_write(CPUCR, cpucr); ++ ++ cpucr = sysreg_read(CPUCR); ++ if ( !(cpucr & (1 << (24 + cop_nr))) ){ ++ printk("Coprocessor #%i not found!\n", cop_nr); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++#ifdef CONFIG_BUG ++#ifdef CONFIG_DEBUG_BUGVERBOSE ++static inline void do_bug_verbose(struct pt_regs *regs, u32 insn) ++{ ++ char *file; ++ u16 line; ++ char c; ++ ++ if (__get_user(line, (u16 __user *)(regs->pc + 2))) ++ return; ++ if (__get_user(file, (char * __user *)(regs->pc + 4)) ++ || (unsigned long)file < PAGE_OFFSET ++ || __get_user(c, file)) ++ file = ""; ++ ++ printk(KERN_ALERT "kernel BUG at %s:%d!\n", file, line); ++} ++#else ++static inline void do_bug_verbose(struct pt_regs *regs, u32 insn) ++{ ++ ++} ++#endif ++#endif ++ ++asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs) ++{ ++ u32 insn; ++ struct undef_hook *hook; ++ siginfo_t info; ++ void __user *pc; ++ ++ if (!user_mode(regs)) ++ goto kernel_trap; ++ ++ local_irq_enable(); ++ ++ pc = (void __user *)instruction_pointer(regs); ++ if (__get_user(insn, (u32 __user *)pc)) ++ goto invalid_area; ++ ++ if (ecr == ECR_COPROC_ABSENT) { ++ if (do_cop_absent(insn) == 0) ++ return; ++ } ++ ++ spin_lock_irq(&undef_lock); ++ list_for_each_entry(hook, &undef_hook, node) { ++ if ((insn & hook->insn_mask) == hook->insn_val) { ++ if (hook->fn(regs, insn) == 0) { ++ spin_unlock_irq(&undef_lock); ++ return; ++ } ++ } ++ } ++ spin_unlock_irq(&undef_lock); ++ ++invalid_area: ++ ++#ifdef DEBUG ++ printk("Illegal instruction at pc = %08lx\n", regs->pc); ++ if (regs->pc < TASK_SIZE) { ++ unsigned long ptbr, pgd, pte, *p; ++ ++ ptbr = sysreg_read(PTBR); ++ p = (unsigned long *)ptbr; ++ pgd = p[regs->pc >> 22]; ++ p = (unsigned long *)((pgd & 0x1ffff000) | 0x80000000); ++ pte = p[(regs->pc >> 12) & 0x3ff]; ++ printk("page table: 0x%08lx -> 0x%08lx -> 0x%08lx\n", ptbr, pgd, pte); ++ } ++#endif ++ ++ info.si_signo = SIGILL; ++ info.si_errno = 0; ++ info.si_addr = (void __user *)regs->pc; ++ switch (ecr) { ++ case ECR_ILLEGAL_OPCODE: ++ case ECR_UNIMPL_INSTRUCTION: ++ info.si_code = ILL_ILLOPC; ++ break; ++ case ECR_PRIVILEGE_VIOLATION: ++ info.si_code = ILL_PRVOPC; ++ break; ++ case ECR_COPROC_ABSENT: ++ info.si_code = ILL_COPROC; ++ break; ++ default: ++ BUG(); ++ } ++ ++ force_sig_info(SIGILL, &info, current); ++ return; ++ ++kernel_trap: ++#ifdef CONFIG_BUG ++ if (__kernel_text_address(instruction_pointer(regs))) { ++ insn = *(u16 *)instruction_pointer(regs); ++ if (insn == AVR32_BUG_OPCODE) { ++ do_bug_verbose(regs, insn); ++ die("Kernel BUG", regs, 0); ++ return; ++ } ++ } ++#endif ++ ++ die("Oops: Illegal instruction in kernel code", regs, ecr); ++} ++ ++asmlinkage void do_fpe(unsigned long ecr, struct pt_regs *regs) ++{ ++ siginfo_t info; ++ ++ printk("Floating-point exception at pc = %08lx\n", regs->pc); ++ ++ /* We have no FPU... */ ++ info.si_signo = SIGILL; ++ info.si_errno = 0; ++ info.si_addr = (void __user *)regs->pc; ++ info.si_code = ILL_COPROC; ++ ++ force_sig_info(SIGILL, &info, current); ++} ++ ++ ++void __init trap_init(void) ++{ ++ ++} +Index: linux-2.6.18-avr32/arch/avr32/kernel/vmlinux.lds.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/kernel/vmlinux.lds.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,139 @@ ++/* ++ * AVR32 linker script for the Linux kernel ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#define LOAD_OFFSET 0x00000000 ++#include ++ ++OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") ++OUTPUT_ARCH(avr32) ++ENTRY(_start) ++ ++/* Big endian */ ++jiffies = jiffies_64 + 4; ++ ++SECTIONS ++{ ++ . = CONFIG_ENTRY_ADDRESS; ++ .init : AT(ADDR(.init) - LOAD_OFFSET) { ++ _stext = .; ++ __init_begin = .; ++ _sinittext = .; ++ *(.text.reset) ++ *(.init.text) ++ _einittext = .; ++ . = ALIGN(4); ++ __tagtable_begin = .; ++ *(.taglist) ++ __tagtable_end = .; ++ *(.init.data) ++ . = ALIGN(16); ++ __setup_start = .; ++ *(.init.setup) ++ __setup_end = .; ++ . = ALIGN(4); ++ __initcall_start = .; ++ *(.initcall1.init) ++ *(.initcall2.init) ++ *(.initcall3.init) ++ *(.initcall4.init) ++ *(.initcall5.init) ++ *(.initcall6.init) ++ *(.initcall7.init) ++ __initcall_end = .; ++ __con_initcall_start = .; ++ *(.con_initcall.init) ++ __con_initcall_end = .; ++ __security_initcall_start = .; ++ *(.security_initcall.init) ++ __security_initcall_end = .; ++ . = ALIGN(32); ++ __initramfs_start = .; ++ *(.init.ramfs) ++ __initramfs_end = .; ++ . = ALIGN(4096); ++ __init_end = .; ++ } ++ ++ . = ALIGN(8192); ++ .text : AT(ADDR(.text) - LOAD_OFFSET) { ++ _evba = .; ++ _text = .; ++ *(.ex.text) ++ . = 0x50; ++ *(.tlbx.ex.text) ++ . = 0x60; ++ *(.tlbr.ex.text) ++ . = 0x70; ++ *(.tlbw.ex.text) ++ . = 0x100; ++ *(.scall.text) ++ *(.irq.text) ++ *(.text) ++ SCHED_TEXT ++ LOCK_TEXT ++ KPROBES_TEXT ++ *(.fixup) ++ *(.gnu.warning) ++ _etext = .; ++ } = 0xd703d703 ++ ++ . = ALIGN(4); ++ __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { ++ __start___ex_table = .; ++ *(__ex_table) ++ __stop___ex_table = .; ++ } ++ ++ RODATA ++ ++ . = ALIGN(8192); ++ ++ .data : AT(ADDR(.data) - LOAD_OFFSET) { ++ _data = .; ++ _sdata = .; ++ /* ++ * First, the init task union, aligned to an 8K boundary. ++ */ ++ *(.data.init_task) ++ ++ /* Then, the cacheline aligned data */ ++ . = ALIGN(32); ++ *(.data.cacheline_aligned) ++ ++ /* And the rest... */ ++ *(.data.rel*) ++ *(.data) ++ CONSTRUCTORS ++ ++ _edata = .; ++ } ++ ++ ++ . = ALIGN(8); ++ .bss : AT(ADDR(.bss) - LOAD_OFFSET) { ++ __bss_start = .; ++ *(.bss) ++ *(COMMON) ++ . = ALIGN(8); ++ __bss_stop = .; ++ _end = .; ++ } ++ ++ /* When something in the kernel is NOT compiled as a module, the module ++ * cleanup code and data are put into these segments. Both can then be ++ * thrown away, as cleanup code is never called unless it's a module. ++ */ ++ /DISCARD/ : { ++ *(.exit.text) ++ *(.exit.data) ++ *(.exitcall.exit) ++ } ++ ++ DWARF_DEBUG ++} +Index: linux-2.6.18-avr32/arch/avr32/lib/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/Makefile 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,11 @@ ++# ++# Makefile for AVR32-specific library files ++# ++ ++lib-y := copy_user.o clear_user.o ++lib-y += strncpy_from_user.o strnlen_user.o ++lib-y += delay.o memset.o memcpy.o findbit.o ++lib-y += csum_partial.o csum_partial_copy_generic.o ++lib-y += io-readsw.o io-readsl.o io-writesw.o io-writesl.o ++lib-y += io-readsb.o io-writesb.o ++lib-y += __avr32_lsl64.o __avr32_lsr64.o __avr32_asr64.o +Index: linux-2.6.18-avr32/arch/avr32/lib/__avr32_asr64.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/__avr32_asr64.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,31 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++ ++ /* ++ * DWtype __avr32_asr64(DWtype u, word_type b) ++ */ ++ .text ++ .global __avr32_asr64 ++ .type __avr32_asr64,@function ++__avr32_asr64: ++ cp.w r12, 0 ++ reteq r12 ++ ++ rsub r9, r12, 32 ++ brle 1f ++ ++ lsl r8, r11, r9 ++ lsr r10, r10, r12 ++ asr r11, r11, r12 ++ or r10, r8 ++ retal r12 ++ ++1: neg r9 ++ asr r10, r11, r9 ++ asr r11, 31 ++ retal r12 +Index: linux-2.6.18-avr32/arch/avr32/lib/__avr32_lsl64.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/__avr32_lsl64.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,31 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++ ++ /* ++ * DWtype __avr32_lsl64(DWtype u, word_type b) ++ */ ++ .text ++ .global __avr32_lsl64 ++ .type __avr32_lsl64,@function ++__avr32_lsl64: ++ cp.w r12, 0 ++ reteq r12 ++ ++ rsub r9, r12, 32 ++ brle 1f ++ ++ lsr r8, r10, r9 ++ lsl r10, r10, r12 ++ lsl r11, r11, r12 ++ or r11, r8 ++ retal r12 ++ ++1: neg r9 ++ lsl r11, r10, r9 ++ mov r10, 0 ++ retal r12 +Index: linux-2.6.18-avr32/arch/avr32/lib/__avr32_lsr64.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/__avr32_lsr64.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,31 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++ ++ /* ++ * DWtype __avr32_lsr64(DWtype u, word_type b) ++ */ ++ .text ++ .global __avr32_lsr64 ++ .type __avr32_lsr64,@function ++__avr32_lsr64: ++ cp.w r12, 0 ++ reteq r12 ++ ++ rsub r9, r12, 32 ++ brle 1f ++ ++ lsl r8, r11, r9 ++ lsr r11, r11, r12 ++ lsr r10, r10, r12 ++ or r10, r8 ++ retal r12 ++ ++1: neg r9 ++ lsr r10, r11, r9 ++ mov r11, 0 ++ retal r12 +Index: linux-2.6.18-avr32/arch/avr32/lib/clear_user.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/clear_user.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,76 @@ ++/* ++ * Copyright 2004-2006 Atmel 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 ++ ++ .text ++ .align 1 ++ .global clear_user ++ .type clear_user, "function" ++clear_user: ++ branch_if_kernel r8, __clear_user ++ ret_if_privileged r8, r12, r11, r11 ++ ++ .global __clear_user ++ .type __clear_user, "function" ++__clear_user: ++ mov r9, r12 ++ mov r8, 0 ++ andl r9, 3, COH ++ brne 5f ++ ++1: sub r11, 4 ++ brlt 2f ++ ++10: st.w r12++, r8 ++ sub r11, 4 ++ brge 10b ++ ++2: sub r11, -4 ++ reteq 0 ++ ++ /* Unaligned count or address */ ++ bld r11, 1 ++ brcc 12f ++11: st.h r12++, r8 ++ sub r11, 2 ++ reteq 0 ++12: st.b r12++, r8 ++ retal 0 ++ ++ /* Unaligned address */ ++5: cp.w r11, 4 ++ brlt 2b ++ ++ lsl r9, 2 ++ add pc, pc, r9 ++13: st.b r12++, r8 ++ sub r11, 1 ++14: st.b r12++, r8 ++ sub r11, 1 ++15: st.b r12++, r8 ++ sub r11, 1 ++ rjmp 1b ++ ++ .size clear_user, . - clear_user ++ .size __clear_user, . - __clear_user ++ ++ .section .fixup, "ax" ++ .align 1 ++18: sub r11, -4 ++19: retal r11 ++ ++ .section __ex_table, "a" ++ .align 2 ++ .long 10b, 18b ++ .long 11b, 19b ++ .long 12b, 19b ++ .long 13b, 19b ++ .long 14b, 19b ++ .long 15b, 19b +Index: linux-2.6.18-avr32/arch/avr32/lib/copy_user.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/copy_user.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,119 @@ ++/* ++ * Copy to/from userspace with optional address space checking. ++ * ++ * Copyright 2004-2006 Atmel 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 ++ ++ /* ++ * __kernel_size_t ++ * __copy_user(void *to, const void *from, __kernel_size_t n) ++ * ++ * Returns the number of bytes not copied. Might be off by ++ * max 3 bytes if we get a fault in the main loop. ++ * ++ * The address-space checking functions simply fall through to ++ * the non-checking version. ++ */ ++ .text ++ .align 1 ++ .global copy_from_user ++ .type copy_from_user, @function ++copy_from_user: ++ branch_if_kernel r8, __copy_user ++ ret_if_privileged r8, r11, r10, r10 ++ rjmp __copy_user ++ .size copy_from_user, . - copy_from_user ++ ++ .global copy_to_user ++ .type copy_to_user, @function ++copy_to_user: ++ branch_if_kernel r8, __copy_user ++ ret_if_privileged r8, r12, r10, r10 ++ .size copy_to_user, . - copy_to_user ++ ++ .global __copy_user ++ .type __copy_user, @function ++__copy_user: ++ mov r9, r11 ++ andl r9, 3, COH ++ brne 6f ++ ++ /* At this point, from is word-aligned */ ++1: sub r10, 4 ++ brlt 3f ++ ++2: ++10: ld.w r8, r11++ ++11: st.w r12++, r8 ++ sub r10, 4 ++ brge 2b ++ ++3: sub r10, -4 ++ reteq 0 ++ ++ /* ++ * Handle unaligned count. Need to be careful with r10 here so ++ * that we return the correct value even if we get a fault ++ */ ++4: ++20: ld.ub r8, r11++ ++21: st.b r12++, r8 ++ sub r10, 1 ++ reteq 0 ++22: ld.ub r8, r11++ ++23: st.b r12++, r8 ++ sub r10, 1 ++ reteq 0 ++24: ld.ub r8, r11++ ++25: st.b r12++, r8 ++ retal 0 ++ ++ /* Handle unaligned from-pointer */ ++6: cp.w r10, 4 ++ brlt 4b ++ rsub r9, r9, 4 ++ ++30: ld.ub r8, r11++ ++31: st.b r12++, r8 ++ sub r10, 1 ++ sub r9, 1 ++ breq 1b ++32: ld.ub r8, r11++ ++33: st.b r12++, r8 ++ sub r10, 1 ++ sub r9, 1 ++ breq 1b ++34: ld.ub r8, r11++ ++35: st.b r12++, r8 ++ sub r10, 1 ++ rjmp 1b ++ .size __copy_user, . - __copy_user ++ ++ .section .fixup,"ax" ++ .align 1 ++19: sub r10, -4 ++29: retal r10 ++ ++ .section __ex_table,"a" ++ .align 2 ++ .long 10b, 19b ++ .long 11b, 19b ++ .long 20b, 29b ++ .long 21b, 29b ++ .long 22b, 29b ++ .long 23b, 29b ++ .long 24b, 29b ++ .long 25b, 29b ++ .long 30b, 29b ++ .long 31b, 29b ++ .long 32b, 29b ++ .long 33b, 29b ++ .long 34b, 29b ++ .long 35b, 29b +Index: linux-2.6.18-avr32/arch/avr32/lib/csum_partial.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/csum_partial.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,47 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++ /* ++ * unsigned int csum_partial(const unsigned char *buff, ++ * int len, unsigned int sum) ++ */ ++ .text ++ .global csum_partial ++ .type csum_partial,"function" ++ .align 1 ++csum_partial: ++ /* checksum complete words, aligned or not */ ++3: sub r11, 4 ++ brlt 5f ++4: ld.w r9, r12++ ++ add r10, r9 ++ acr r10 ++ sub r11, 4 ++ brge 4b ++ ++ /* return if we had a whole number of words */ ++5: sub r11, -4 ++ reteq r10 ++ ++ /* checksum any remaining bytes at the end */ ++ mov r9, 0 ++ mov r8, 0 ++ cp r11, 2 ++ brlt 6f ++ ld.uh r9, r12++ ++ sub r11, 2 ++ breq 7f ++ lsl r9, 16 ++6: ld.ub r8, r12++ ++ lsl r8, 8 ++7: or r9, r8 ++ add r10, r9 ++ acr r10 ++ ++ retal r10 ++ .size csum_partial, . - csum_partial +Index: linux-2.6.18-avr32/arch/avr32/lib/csum_partial_copy_generic.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/csum_partial_copy_generic.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,99 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++ /* ++ * unsigned int csum_partial_copy_generic(const char *src, char *dst, int len ++ * int sum, int *src_err_ptr, ++ * int *dst_err_ptr) ++ * ++ * Copy src to dst while checksumming, otherwise like csum_partial. ++ */ ++ ++ .macro ld_src size, reg, ptr ++9999: ld.\size \reg, \ptr ++ .section __ex_table, "a" ++ .long 9999b, fixup_ld_src ++ .previous ++ .endm ++ ++ .macro st_dst size, ptr, reg ++9999: st.\size \ptr, \reg ++ .section __ex_table, "a" ++ .long 9999b, fixup_st_dst ++ .previous ++ .endm ++ ++ .text ++ .global csum_partial_copy_generic ++ .type csum_partial_copy_generic,"function" ++ .align 1 ++csum_partial_copy_generic: ++ pushm r4-r7,lr ++ ++ /* The inner loop */ ++1: sub r10, 4 ++ brlt 5f ++2: ld_src w, r5, r12++ ++ st_dst w, r11++, r5 ++ add r9, r5 ++ acr r9 ++ sub r10, 4 ++ brge 2b ++ ++ /* return if we had a whole number of words */ ++5: sub r10, -4 ++ brne 7f ++ ++6: mov r12, r9 ++ popm r4-r7,pc ++ ++ /* handle additional bytes at the tail */ ++7: mov r5, 0 ++ mov r4, 32 ++8: ld_src ub, r6, r12++ ++ st_dst b, r11++, r6 ++ lsl r5, 8 ++ sub r4, 8 ++ bfins r5, r6, 0, 8 ++ sub r10, 1 ++ brne 8b ++ ++ lsl r5, r5, r4 ++ add r9, r5 ++ acr r9 ++ rjmp 6b ++ ++ /* Exception handler */ ++ .section .fixup,"ax" ++ .align 1 ++fixup_ld_src: ++ mov r9, -EFAULT ++ cp.w r8, 0 ++ breq 1f ++ st.w r8[0], r9 ++ ++1: /* ++ * TODO: zero the complete destination - computing the rest ++ * is too much work ++ */ ++ ++ mov r9, 0 ++ rjmp 6b ++ ++fixup_st_dst: ++ mov r9, -EFAULT ++ lddsp r8, sp[20] ++ cp.w r8, 0 ++ breq 1f ++ st.w r8[0], r9 ++1: mov r9, 0 ++ rjmp 6b ++ ++ .previous +Index: linux-2.6.18-avr32/arch/avr32/lib/delay.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/delay.c 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,55 @@ ++/* ++ * Precise Delay Loops for avr32 ++ * ++ * Copyright (C) 1993 Linus Torvalds ++ * Copyright (C) 1997 Martin Mares ++ * Copyright (C) 2005-2006 Atmel 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 ++ ++int read_current_timer(unsigned long *timer_value) ++{ ++ *timer_value = sysreg_read(COUNT); ++ return 0; ++} ++ ++void __delay(unsigned long loops) ++{ ++ unsigned bclock, now; ++ ++ bclock = sysreg_read(COUNT); ++ do { ++ now = sysreg_read(COUNT); ++ } while ((now - bclock) < loops); ++} ++ ++inline void __const_udelay(unsigned long xloops) ++{ ++ unsigned long long loops; ++ ++ asm("mulu.d %0, %1, %2" ++ : "=r"(loops) ++ : "r"(current_cpu_data.loops_per_jiffy * HZ), "r"(xloops)); ++ __delay(loops >> 32); ++} ++ ++void __udelay(unsigned long usecs) ++{ ++ __const_udelay(usecs * 0x000010c7); /* 2**32 / 1000000 (rounded up) */ ++} ++ ++void __ndelay(unsigned long nsecs) ++{ ++ __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */ ++} +Index: linux-2.6.18-avr32/arch/avr32/lib/findbit.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/findbit.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,155 @@ ++/* ++ * Copyright (C) 2006 Atmel 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 ++ ++ .text ++ /* ++ * unsigned long find_first_zero_bit(const unsigned long *addr, ++ * unsigned long size) ++ */ ++ENTRY(find_first_zero_bit) ++ cp.w r11, 0 ++ reteq r11 ++ mov r9, r11 ++1: ld.w r8, r12[0] ++ com r8 ++ brne .L_found ++ sub r12, -4 ++ sub r9, 32 ++ brgt 1b ++ retal r11 ++ ++ /* ++ * unsigned long find_next_zero_bit(const unsigned long *addr, ++ * unsigned long size, ++ * unsigned long offset) ++ */ ++ENTRY(find_next_zero_bit) ++ lsr r8, r10, 5 ++ sub r9, r11, r10 ++ retle r11 ++ ++ lsl r8, 2 ++ add r12, r8 ++ andl r10, 31, COH ++ breq 1f ++ ++ /* offset is not word-aligned. Handle the first (32 - r10) bits */ ++ ld.w r8, r12[0] ++ com r8 ++ sub r12, -4 ++ lsr r8, r8, r10 ++ brne .L_found ++ ++ /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */ ++ add r9, r10 ++ sub r9, 32 ++ retle r11 ++ ++ /* Main loop. offset must be word-aligned */ ++1: ld.w r8, r12[0] ++ com r8 ++ brne .L_found ++ sub r12, -4 ++ sub r9, 32 ++ brgt 1b ++ retal r11 ++ ++ /* Common return path for when a bit is actually found. */ ++.L_found: ++ brev r8 ++ clz r10, r8 ++ rsub r9, r11 ++ add r10, r9 ++ ++ /* XXX: If we don't have to return exactly "size" when the bit ++ is not found, we may drop this "min" thing */ ++ min r12, r11, r10 ++ retal r12 ++ ++ /* ++ * unsigned long find_first_bit(const unsigned long *addr, ++ * unsigned long size) ++ */ ++ENTRY(find_first_bit) ++ cp.w r11, 0 ++ reteq r11 ++ mov r9, r11 ++1: ld.w r8, r12[0] ++ cp.w r8, 0 ++ brne .L_found ++ sub r12, -4 ++ sub r9, 32 ++ brgt 1b ++ retal r11 ++ ++ /* ++ * unsigned long find_next_bit(const unsigned long *addr, ++ * unsigned long size, ++ * unsigned long offset) ++ */ ++ENTRY(find_next_bit) ++ lsr r8, r10, 5 ++ sub r9, r11, r10 ++ retle r11 ++ ++ lsl r8, 2 ++ add r12, r8 ++ andl r10, 31, COH ++ breq 1f ++ ++ /* offset is not word-aligned. Handle the first (32 - r10) bits */ ++ ld.w r8, r12[0] ++ sub r12, -4 ++ lsr r8, r8, r10 ++ brne .L_found ++ ++ /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */ ++ add r9, r10 ++ sub r9, 32 ++ retle r11 ++ ++ /* Main loop. offset must be word-aligned */ ++1: ld.w r8, r12[0] ++ cp.w r8, 0 ++ brne .L_found ++ sub r12, -4 ++ sub r9, 32 ++ brgt 1b ++ retal r11 ++ ++ENTRY(generic_find_next_zero_le_bit) ++ lsr r8, r10, 5 ++ sub r9, r11, r10 ++ retle r11 ++ ++ lsl r8, 2 ++ add r12, r8 ++ andl r10, 31, COH ++ breq 1f ++ ++ /* offset is not word-aligned. Handle the first (32 - r10) bits */ ++ ldswp.w r8, r12[0] ++ sub r12, -4 ++ com r8 ++ lsr r8, r8, r10 ++ brne .L_found ++ ++ /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */ ++ add r9, r10 ++ sub r9, 32 ++ retle r11 ++ ++ /* Main loop. offset must be word-aligned */ ++1: ldswp.w r8, r12[0] ++ com r8 ++ brne .L_found ++ sub r12, -4 ++ sub r9, 32 ++ brgt 1b ++ retal r11 +Index: linux-2.6.18-avr32/arch/avr32/lib/io-readsl.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/io-readsl.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,24 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++ .global __raw_readsl ++ .type __raw_readsl,@function ++__raw_readsl: ++ cp.w r10, 0 ++ reteq r12 ++ ++ /* ++ * If r11 isn't properly aligned, we might get an exception on ++ * some implementations. But there's not much we can do about it. ++ */ ++1: ld.w r8, r12[0] ++ sub r10, 1 ++ st.w r11++, r8 ++ brne 1b ++ ++ retal r12 +Index: linux-2.6.18-avr32/arch/avr32/lib/io-readsw.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/io-readsw.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++.Lnot_word_aligned: ++ /* ++ * Bad alignment will cause a hardware exception, which is as ++ * good as anything. No need for us to check for proper alignment. ++ */ ++ ld.uh r8, r12[0] ++ sub r10, 1 ++ st.h r11++, r8 ++ ++ /* fall through */ ++ ++ .global __raw_readsw ++ .type __raw_readsw,@function ++__raw_readsw: ++ cp.w r10, 0 ++ reteq r12 ++ mov r9, 3 ++ tst r11, r9 ++ brne .Lnot_word_aligned ++ ++ sub r10, 2 ++ brlt 2f ++ ++1: ldins.h r8:t, r12[0] ++ ldins.h r8:b, r12[0] ++ st.w r11++, r8 ++ sub r10, 2 ++ brge 1b ++ ++2: sub r10, -2 ++ reteq r12 ++ ++ ld.uh r8, r12[0] ++ st.h r11++, r8 ++ retal r12 +Index: linux-2.6.18-avr32/arch/avr32/lib/io-writesl.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/io-writesl.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,20 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++ .global __raw_writesl ++ .type __raw_writesl,@function ++__raw_writesl: ++ cp.w r10, 0 ++ reteq r12 ++ ++1: ld.w r8, r11++ ++ sub r10, 1 ++ st.w r12[0], r8 ++ brne 1b ++ ++ retal r12 +Index: linux-2.6.18-avr32/arch/avr32/lib/io-writesw.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/io-writesw.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,38 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++.Lnot_word_aligned: ++ ld.uh r8, r11++ ++ sub r10, 1 ++ st.h r12[0], r8 ++ ++ .global __raw_writesw ++ .type __raw_writesw,@function ++__raw_writesw: ++ cp.w r10, 0 ++ mov r9, 3 ++ reteq r12 ++ tst r11, r9 ++ brne .Lnot_word_aligned ++ ++ sub r10, 2 ++ brlt 2f ++ ++1: ld.w r8, r11++ ++ bfextu r9, r8, 16, 16 ++ st.h r12[0], r9 ++ st.h r12[0], r8 ++ sub r10, 2 ++ brge 1b ++ ++2: sub r10, -2 ++ reteq r12 ++ ++ ld.uh r8, r11++ ++ st.h r12[0], r8 ++ retal r12 +Index: linux-2.6.18-avr32/arch/avr32/lib/libgcc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/libgcc.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,33 @@ ++/* Definitions for various functions 'borrowed' from gcc-3.4.3 */ ++ ++#define BITS_PER_UNIT 8 ++ ++typedef int QItype __attribute__ ((mode (QI))); ++typedef unsigned int UQItype __attribute__ ((mode (QI))); ++typedef int HItype __attribute__ ((mode (HI))); ++typedef unsigned int UHItype __attribute__ ((mode (HI))); ++typedef int SItype __attribute__ ((mode (SI))); ++typedef unsigned int USItype __attribute__ ((mode (SI))); ++typedef int DItype __attribute__ ((mode (DI))); ++typedef unsigned int UDItype __attribute__ ((mode (DI))); ++typedef float SFtype __attribute__ ((mode (SF))); ++typedef float DFtype __attribute__ ((mode (DF))); ++typedef int word_type __attribute__ ((mode (__word__))); ++ ++#define W_TYPE_SIZE (4 * BITS_PER_UNIT) ++#define Wtype SItype ++#define UWtype USItype ++#define HWtype SItype ++#define UHWtype USItype ++#define DWtype DItype ++#define UDWtype UDItype ++#define __NW(a,b) __ ## a ## si ## b ++#define __NDW(a,b) __ ## a ## di ## b ++ ++struct DWstruct {Wtype high, low;}; ++ ++typedef union ++{ ++ struct DWstruct s; ++ DWtype ll; ++} DWunion; +Index: linux-2.6.18-avr32/arch/avr32/lib/longlong.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/longlong.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,98 @@ ++/* longlong.h -- definitions for mixed size 32/64 bit arithmetic. ++ Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000 ++ Free Software Foundation, Inc. ++ ++ This definition file is free software; you can redistribute it ++ and/or modify it under the terms of the GNU General Public ++ License as published by the Free Software Foundation; either ++ version 2, or (at your option) any later version. ++ ++ This definition file 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. */ ++ ++/* Borrowed from gcc-3.4.3 */ ++ ++#define __BITS4 (W_TYPE_SIZE / 4) ++#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) ++#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) ++#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2)) ++ ++#define count_leading_zeros(count, x) ((count) = __builtin_clz(x)) ++ ++#define __udiv_qrnnd_c(q, r, n1, n0, d) \ ++ do { \ ++ UWtype __d1, __d0, __q1, __q0; \ ++ UWtype __r1, __r0, __m; \ ++ __d1 = __ll_highpart (d); \ ++ __d0 = __ll_lowpart (d); \ ++ \ ++ __r1 = (n1) % __d1; \ ++ __q1 = (n1) / __d1; \ ++ __m = (UWtype) __q1 * __d0; \ ++ __r1 = __r1 * __ll_B | __ll_highpart (n0); \ ++ if (__r1 < __m) \ ++ { \ ++ __q1--, __r1 += (d); \ ++ if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ ++ if (__r1 < __m) \ ++ __q1--, __r1 += (d); \ ++ } \ ++ __r1 -= __m; \ ++ \ ++ __r0 = __r1 % __d1; \ ++ __q0 = __r1 / __d1; \ ++ __m = (UWtype) __q0 * __d0; \ ++ __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ ++ if (__r0 < __m) \ ++ { \ ++ __q0--, __r0 += (d); \ ++ if (__r0 >= (d)) \ ++ if (__r0 < __m) \ ++ __q0--, __r0 += (d); \ ++ } \ ++ __r0 -= __m; \ ++ \ ++ (q) = (UWtype) __q1 * __ll_B | __q0; \ ++ (r) = __r0; \ ++ } while (0) ++ ++#define udiv_qrnnd __udiv_qrnnd_c ++ ++#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ ++ do { \ ++ UWtype __x; \ ++ __x = (al) - (bl); \ ++ (sh) = (ah) - (bh) - (__x > (al)); \ ++ (sl) = __x; \ ++ } while (0) ++ ++#define umul_ppmm(w1, w0, u, v) \ ++ do { \ ++ UWtype __x0, __x1, __x2, __x3; \ ++ UHWtype __ul, __vl, __uh, __vh; \ ++ \ ++ __ul = __ll_lowpart (u); \ ++ __uh = __ll_highpart (u); \ ++ __vl = __ll_lowpart (v); \ ++ __vh = __ll_highpart (v); \ ++ \ ++ __x0 = (UWtype) __ul * __vl; \ ++ __x1 = (UWtype) __ul * __vh; \ ++ __x2 = (UWtype) __uh * __vl; \ ++ __x3 = (UWtype) __uh * __vh; \ ++ \ ++ __x1 += __ll_highpart (__x0);/* this can't give carry */ \ ++ __x1 += __x2; /* but this indeed can */ \ ++ if (__x1 < __x2) /* did we get it? */ \ ++ __x3 += __ll_B; /* yes, add it in the proper pos. */ \ ++ \ ++ (w1) = __x3 + __ll_highpart (__x1); \ ++ (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \ ++ } while (0) +Index: linux-2.6.18-avr32/arch/avr32/lib/memcpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/memcpy.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++ /* ++ * void *memcpy(void *to, const void *from, unsigned long n) ++ * ++ * This implementation does word-aligned loads in the main loop, ++ * possibly sacrificing alignment of stores. ++ * ++ * Hopefully, in most cases, both "to" and "from" will be ++ * word-aligned to begin with. ++ */ ++ .text ++ .global memcpy ++ .type memcpy, @function ++memcpy: ++ mov r9, r11 ++ andl r9, 3, COH ++ brne 1f ++ ++ /* At this point, "from" is word-aligned */ ++2: sub r10, 4 ++ mov r9, r12 ++ brlt 4f ++ ++3: ld.w r8, r11++ ++ sub r10, 4 ++ st.w r12++, r8 ++ brge 3b ++ ++4: neg r10 ++ reteq r9 ++ ++ /* Handle unaligned count */ ++ lsl r10, 2 ++ add pc, pc, r10 ++ ld.ub r8, r11++ ++ st.b r12++, r8 ++ ld.ub r8, r11++ ++ st.b r12++, r8 ++ ld.ub r8, r11++ ++ st.b r12++, r8 ++ retal r9 ++ ++ /* Handle unaligned "from" pointer */ ++1: sub r10, 4 ++ brlt 4b ++ add r10, r9 ++ lsl r9, 2 ++ add pc, pc, r9 ++ ld.ub r8, r11++ ++ st.b r12++, r8 ++ ld.ub r8, r11++ ++ st.b r12++, r8 ++ ld.ub r8, r11++ ++ st.b r12++, r8 ++ rjmp 2b +Index: linux-2.6.18-avr32/arch/avr32/lib/memset.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/memset.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,72 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * Based on linux/arch/arm/lib/memset.S ++ * Copyright (C) 1995-2000 Russell King ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * ASM optimised string functions ++ */ ++#include ++ ++ /* ++ * r12: void *b ++ * r11: int c ++ * r10: size_t len ++ * ++ * Returns b in r12 ++ */ ++ .text ++ .global memset ++ .type memset, @function ++ .align 5 ++memset: ++ mov r9, r12 ++ mov r8, r12 ++ or r11, r11, r11 << 8 ++ andl r9, 3, COH ++ brne 1f ++ ++2: or r11, r11, r11 << 16 ++ sub r10, 4 ++ brlt 5f ++ ++ /* Let's do some real work */ ++4: st.w r8++, r11 ++ sub r10, 4 ++ brge 4b ++ ++ /* ++ * When we get here, we've got less than 4 bytes to set. r10 ++ * might be negative. ++ */ ++5: sub r10, -4 ++ reteq r12 ++ ++ /* Fastpath ends here, exactly 32 bytes from memset */ ++ ++ /* Handle unaligned count or pointer */ ++ bld r10, 1 ++ brcc 6f ++ st.b r8++, r11 ++ st.b r8++, r11 ++ bld r10, 0 ++ retcc r12 ++6: st.b r8++, r11 ++ retal r12 ++ ++ /* Handle unaligned pointer */ ++1: sub r10, 4 ++ brlt 5b ++ add r10, r9 ++ lsl r9, 1 ++ add pc, r9 ++ st.b r8++, r11 ++ st.b r8++, r11 ++ st.b r8++, r11 ++ rjmp 2b ++ ++ .size memset, . - memset +Index: linux-2.6.18-avr32/arch/avr32/lib/strncpy_from_user.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/strncpy_from_user.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,60 @@ ++/* ++ * Copy to/from userspace with optional address space checking. ++ * ++ * Copyright 2004-2006 Atmel 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 ++ ++ /* ++ * long strncpy_from_user(char *dst, const char *src, long count) ++ * ++ * On success, returns the length of the string, not including ++ * the terminating NUL. ++ * ++ * If the string is longer than count, returns count ++ * ++ * If userspace access fails, returns -EFAULT ++ */ ++ .text ++ .align 1 ++ .global strncpy_from_user ++ .type strncpy_from_user, "function" ++strncpy_from_user: ++ mov r9, -EFAULT ++ branch_if_kernel r8, __strncpy_from_user ++ ret_if_privileged r8, r11, r10, r9 ++ ++ .global __strncpy_from_user ++ .type __strncpy_from_user, "function" ++__strncpy_from_user: ++ cp.w r10, 0 ++ reteq 0 ++ ++ mov r9, r10 ++ ++1: ld.ub r8, r11++ ++ st.b r12++, r8 ++ cp.w r8, 0 ++ breq 2f ++ sub r9, 1 ++ brne 1b ++ ++2: sub r10, r9 ++ retal r10 ++ ++ .section .fixup, "ax" ++ .align 1 ++3: mov r12, -EFAULT ++ retal r12 ++ ++ .section __ex_table, "a" ++ .align 2 ++ .long 1b, 3b +Index: linux-2.6.18-avr32/arch/avr32/lib/strnlen_user.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/strnlen_user.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,67 @@ ++/* ++ * Copy to/from userspace with optional address space checking. ++ * ++ * Copyright 2004-2006 Atmel 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 ++ ++ .text ++ .align 1 ++ .global strnlen_user ++ .type strnlen_user, "function" ++strnlen_user: ++ branch_if_kernel r8, __strnlen_user ++ sub r8, r11, 1 ++ add r8, r12 ++ retcs 0 ++ brmi adjust_length /* do a closer inspection */ ++ ++ .global __strnlen_user ++ .type __strnlen_user, "function" ++__strnlen_user: ++ mov r10, r12 ++ ++10: ld.ub r8, r12++ ++ cp.w r8, 0 ++ breq 2f ++ sub r11, 1 ++ brne 10b ++ ++ sub r12, -1 ++2: sub r12, r10 ++ retal r12 ++ ++ ++ .type adjust_length, "function" ++adjust_length: ++ cp.w r12, 0 /* addr must always be < TASK_SIZE */ ++ retmi 0 ++ ++ pushm lr ++ lddpc lr, _task_size ++ sub r11, lr, r12 ++ mov r9, r11 ++ rcall __strnlen_user ++ cp.w r12, r9 ++ brgt 1f ++ popm pc ++1: popm pc, r12=0 ++ ++ .align 2 ++_task_size: ++ .long TASK_SIZE ++ ++ .section .fixup, "ax" ++ .align 1 ++19: retal 0 ++ ++ .section __ex_table, "a" ++ .align 2 ++ .long 10b, 19b +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/Makefile 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,2 @@ ++obj-y += at32ap.o clock.o pio.o intc.o extint.o hsmc.o ++obj-$(CONFIG_CPU_AT32AP7000) += at32ap7000.o +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap.c 2006-12-04 11:50:22.000000000 +0100 +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (C) 2006 Atmel 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 ++ ++struct at32_sm system_manager; ++ ++static int __init at32_sm_init(void) ++{ ++ struct resource *regs; ++ struct at32_sm *sm = &system_manager; ++ int ret = -ENXIO; ++ ++ regs = platform_get_resource(&at32_sm_device, IORESOURCE_MEM, 0); ++ if (!regs) ++ goto fail; ++ ++ spin_lock_init(&sm->lock); ++ sm->pdev = &at32_sm_device; ++ ++ ret = -ENOMEM; ++ sm->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!sm->regs) ++ goto fail; ++ ++ return 0; ++ ++fail: ++ printk(KERN_ERR "Failed to initialize System Manager: %d\n", ret); ++ return ret; ++} ++ ++void __init setup_platform(void) ++{ ++ at32_sm_init(); ++ at32_clock_init(); ++ at32_portmux_init(); ++ ++ /* FIXME: This doesn't belong here */ ++ at32_setup_serial_console(1); ++} ++ ++static int __init pdc_probe(struct platform_device *pdev) ++{ ++ struct clk *pclk, *hclk; ++ ++ pclk = clk_get(&pdev->dev, "pclk"); ++ if (IS_ERR(pclk)) { ++ dev_err(&pdev->dev, "no pclk defined\n"); ++ return PTR_ERR(pclk); ++ } ++ hclk = clk_get(&pdev->dev, "hclk"); ++ if (IS_ERR(hclk)) { ++ dev_err(&pdev->dev, "no hclk defined\n"); ++ clk_put(pclk); ++ return PTR_ERR(hclk); ++ } ++ ++ clk_enable(pclk); ++ clk_enable(hclk); ++ ++ dev_info(&pdev->dev, "Atmel Peripheral DMA Controller enabled\n"); ++ return 0; ++} ++ ++static struct platform_driver pdc_driver = { ++ .probe = pdc_probe, ++ .driver = { ++ .name = "pdc", ++ }, ++}; ++ ++static int __init pdc_init(void) ++{ ++ return platform_driver_register(&pdc_driver); ++} ++arch_initcall(pdc_init); +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,876 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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 "clock.h" ++#include "pio.h" ++#include "sm.h" ++ ++#define PBMEM(base) \ ++ { \ ++ .start = base, \ ++ .end = base + 0x3ff, \ ++ .flags = IORESOURCE_MEM, \ ++ } ++#define IRQ(num) \ ++ { \ ++ .start = num, \ ++ .end = num, \ ++ .flags = IORESOURCE_IRQ, \ ++ } ++#define NAMED_IRQ(num, _name) \ ++ { \ ++ .start = num, \ ++ .end = num, \ ++ .name = _name, \ ++ .flags = IORESOURCE_IRQ, \ ++ } ++ ++#define DEFINE_DEV(_name, _id) \ ++static struct platform_device _name##_id##_device = { \ ++ .name = #_name, \ ++ .id = _id, \ ++ .resource = _name##_id##_resource, \ ++ .num_resources = ARRAY_SIZE(_name##_id##_resource), \ ++} ++#define DEFINE_DEV_DATA(_name, _id) \ ++static struct platform_device _name##_id##_device = { \ ++ .name = #_name, \ ++ .id = _id, \ ++ .dev = { \ ++ .platform_data = &_name##_id##_data, \ ++ }, \ ++ .resource = _name##_id##_resource, \ ++ .num_resources = ARRAY_SIZE(_name##_id##_resource), \ ++} ++ ++#define DEV_CLK(_name, devname, bus, _index) \ ++static struct clk devname##_##_name = { \ ++ .name = #_name, \ ++ .dev = &devname##_device.dev, \ ++ .parent = &bus##_clk, \ ++ .mode = bus##_clk_mode, \ ++ .get_rate = bus##_clk_get_rate, \ ++ .index = _index, \ ++} ++ ++enum { ++ PIOA, ++ PIOB, ++ PIOC, ++ PIOD, ++}; ++ ++enum { ++ FUNC_A, ++ FUNC_B, ++}; ++ ++unsigned long at32ap7000_osc_rates[3] = { ++ [0] = 32768, ++ /* FIXME: these are ATSTK1002-specific */ ++ [1] = 20000000, ++ [2] = 12000000, ++}; ++ ++static unsigned long osc_get_rate(struct clk *clk) ++{ ++ return at32ap7000_osc_rates[clk->index]; ++} ++ ++static unsigned long pll_get_rate(struct clk *clk, unsigned long control) ++{ ++ unsigned long div, mul, rate; ++ ++ if (!(control & SM_BIT(PLLEN))) ++ return 0; ++ ++ div = SM_BFEXT(PLLDIV, control) + 1; ++ mul = SM_BFEXT(PLLMUL, control) + 1; ++ ++ rate = clk->parent->get_rate(clk->parent); ++ rate = (rate + div / 2) / div; ++ rate *= mul; ++ ++ return rate; ++} ++ ++static unsigned long pll0_get_rate(struct clk *clk) ++{ ++ u32 control; ++ ++ control = sm_readl(&system_manager, PM_PLL0); ++ ++ return pll_get_rate(clk, control); ++} ++ ++static unsigned long pll1_get_rate(struct clk *clk) ++{ ++ u32 control; ++ ++ control = sm_readl(&system_manager, PM_PLL1); ++ ++ return pll_get_rate(clk, control); ++} ++ ++/* ++ * The AT32AP7000 has five primary clock sources: One 32kHz ++ * oscillator, two crystal oscillators and two PLLs. ++ */ ++static struct clk osc32k = { ++ .name = "osc32k", ++ .get_rate = osc_get_rate, ++ .users = 1, ++ .index = 0, ++}; ++static struct clk osc0 = { ++ .name = "osc0", ++ .get_rate = osc_get_rate, ++ .users = 1, ++ .index = 1, ++}; ++static struct clk osc1 = { ++ .name = "osc1", ++ .get_rate = osc_get_rate, ++ .index = 2, ++}; ++static struct clk pll0 = { ++ .name = "pll0", ++ .get_rate = pll0_get_rate, ++ .parent = &osc0, ++}; ++static struct clk pll1 = { ++ .name = "pll1", ++ .get_rate = pll1_get_rate, ++ .parent = &osc0, ++}; ++ ++/* ++ * The main clock can be either osc0 or pll0. The boot loader may ++ * have chosen one for us, so we don't really know which one until we ++ * have a look at the SM. ++ */ ++static struct clk *main_clock; ++ ++/* ++ * Synchronous clocks are generated from the main clock. The clocks ++ * must satisfy the constraint ++ * fCPU >= fHSB >= fPB ++ * i.e. each clock must not be faster than its parent. ++ */ ++static unsigned long bus_clk_get_rate(struct clk *clk, unsigned int shift) ++{ ++ return main_clock->get_rate(main_clock) >> shift; ++}; ++ ++static void cpu_clk_mode(struct clk *clk, int enabled) ++{ ++ struct at32_sm *sm = &system_manager; ++ unsigned long flags; ++ u32 mask; ++ ++ spin_lock_irqsave(&sm->lock, flags); ++ mask = sm_readl(sm, PM_CPU_MASK); ++ if (enabled) ++ mask |= 1 << clk->index; ++ else ++ mask &= ~(1 << clk->index); ++ sm_writel(sm, PM_CPU_MASK, mask); ++ spin_unlock_irqrestore(&sm->lock, flags); ++} ++ ++static unsigned long cpu_clk_get_rate(struct clk *clk) ++{ ++ unsigned long cksel, shift = 0; ++ ++ cksel = sm_readl(&system_manager, PM_CKSEL); ++ if (cksel & SM_BIT(CPUDIV)) ++ shift = SM_BFEXT(CPUSEL, cksel) + 1; ++ ++ return bus_clk_get_rate(clk, shift); ++} ++ ++static void hsb_clk_mode(struct clk *clk, int enabled) ++{ ++ struct at32_sm *sm = &system_manager; ++ unsigned long flags; ++ u32 mask; ++ ++ spin_lock_irqsave(&sm->lock, flags); ++ mask = sm_readl(sm, PM_HSB_MASK); ++ if (enabled) ++ mask |= 1 << clk->index; ++ else ++ mask &= ~(1 << clk->index); ++ sm_writel(sm, PM_HSB_MASK, mask); ++ spin_unlock_irqrestore(&sm->lock, flags); ++} ++ ++static unsigned long hsb_clk_get_rate(struct clk *clk) ++{ ++ unsigned long cksel, shift = 0; ++ ++ cksel = sm_readl(&system_manager, PM_CKSEL); ++ if (cksel & SM_BIT(HSBDIV)) ++ shift = SM_BFEXT(HSBSEL, cksel) + 1; ++ ++ return bus_clk_get_rate(clk, shift); ++} ++ ++static void pba_clk_mode(struct clk *clk, int enabled) ++{ ++ struct at32_sm *sm = &system_manager; ++ unsigned long flags; ++ u32 mask; ++ ++ spin_lock_irqsave(&sm->lock, flags); ++ mask = sm_readl(sm, PM_PBA_MASK); ++ if (enabled) ++ mask |= 1 << clk->index; ++ else ++ mask &= ~(1 << clk->index); ++ sm_writel(sm, PM_PBA_MASK, mask); ++ spin_unlock_irqrestore(&sm->lock, flags); ++} ++ ++static unsigned long pba_clk_get_rate(struct clk *clk) ++{ ++ unsigned long cksel, shift = 0; ++ ++ cksel = sm_readl(&system_manager, PM_CKSEL); ++ if (cksel & SM_BIT(PBADIV)) ++ shift = SM_BFEXT(PBASEL, cksel) + 1; ++ ++ return bus_clk_get_rate(clk, shift); ++} ++ ++static void pbb_clk_mode(struct clk *clk, int enabled) ++{ ++ struct at32_sm *sm = &system_manager; ++ unsigned long flags; ++ u32 mask; ++ ++ spin_lock_irqsave(&sm->lock, flags); ++ mask = sm_readl(sm, PM_PBB_MASK); ++ if (enabled) ++ mask |= 1 << clk->index; ++ else ++ mask &= ~(1 << clk->index); ++ sm_writel(sm, PM_PBB_MASK, mask); ++ spin_unlock_irqrestore(&sm->lock, flags); ++} ++ ++static unsigned long pbb_clk_get_rate(struct clk *clk) ++{ ++ unsigned long cksel, shift = 0; ++ ++ cksel = sm_readl(&system_manager, PM_CKSEL); ++ if (cksel & SM_BIT(PBBDIV)) ++ shift = SM_BFEXT(PBBSEL, cksel) + 1; ++ ++ return bus_clk_get_rate(clk, shift); ++} ++ ++static struct clk cpu_clk = { ++ .name = "cpu", ++ .get_rate = cpu_clk_get_rate, ++ .users = 1, ++}; ++static struct clk hsb_clk = { ++ .name = "hsb", ++ .parent = &cpu_clk, ++ .get_rate = hsb_clk_get_rate, ++}; ++static struct clk pba_clk = { ++ .name = "pba", ++ .parent = &hsb_clk, ++ .mode = hsb_clk_mode, ++ .get_rate = pba_clk_get_rate, ++ .index = 1, ++}; ++static struct clk pbb_clk = { ++ .name = "pbb", ++ .parent = &hsb_clk, ++ .mode = hsb_clk_mode, ++ .get_rate = pbb_clk_get_rate, ++ .users = 1, ++ .index = 2, ++}; ++ ++/* -------------------------------------------------------------------- ++ * Generic Clock operations ++ * -------------------------------------------------------------------- */ ++ ++static void genclk_mode(struct clk *clk, int enabled) ++{ ++ u32 control; ++ ++ BUG_ON(clk->index > 7); ++ ++ control = sm_readl(&system_manager, PM_GCCTRL + 4 * clk->index); ++ if (enabled) ++ control |= SM_BIT(CEN); ++ else ++ control &= ~SM_BIT(CEN); ++ sm_writel(&system_manager, PM_GCCTRL + 4 * clk->index, control); ++} ++ ++static unsigned long genclk_get_rate(struct clk *clk) ++{ ++ u32 control; ++ unsigned long div = 1; ++ ++ BUG_ON(clk->index > 7); ++ ++ if (!clk->parent) ++ return 0; ++ ++ control = sm_readl(&system_manager, PM_GCCTRL + 4 * clk->index); ++ if (control & SM_BIT(DIVEN)) ++ div = 2 * (SM_BFEXT(DIV, control) + 1); ++ ++ return clk->parent->get_rate(clk->parent) / div; ++} ++ ++static long genclk_set_rate(struct clk *clk, unsigned long rate, int apply) ++{ ++ u32 control; ++ unsigned long parent_rate, actual_rate, div; ++ ++ BUG_ON(clk->index > 7); ++ ++ if (!clk->parent) ++ return 0; ++ ++ parent_rate = clk->parent->get_rate(clk->parent); ++ control = sm_readl(&system_manager, PM_GCCTRL + 4 * clk->index); ++ ++ if (rate > 3 * parent_rate / 4) { ++ actual_rate = parent_rate; ++ control &= ~SM_BIT(DIVEN); ++ } else { ++ div = (parent_rate + rate) / (2 * rate) - 1; ++ control = SM_BFINS(DIV, div, control) | SM_BIT(DIVEN); ++ actual_rate = parent_rate / (2 * (div + 1)); ++ } ++ ++ printk("clk %s: new rate %lu (actual rate %lu)\n", ++ clk->name, rate, actual_rate); ++ ++ if (apply) ++ sm_writel(&system_manager, PM_GCCTRL + 4 * clk->index, ++ control); ++ ++ return actual_rate; ++} ++ ++int genclk_set_parent(struct clk *clk, struct clk *parent) ++{ ++ u32 control; ++ ++ BUG_ON(clk->index > 7); ++ ++ printk("clk %s: new parent %s (was %s)\n", ++ clk->name, parent->name, ++ clk->parent ? clk->parent->name : "(null)"); ++ ++ control = sm_readl(&system_manager, PM_GCCTRL + 4 * clk->index); ++ ++ if (parent == &osc1 || parent == &pll1) ++ control |= SM_BIT(OSCSEL); ++ else if (parent == &osc0 || parent == &pll0) ++ control &= ~SM_BIT(OSCSEL); ++ else ++ return -EINVAL; ++ ++ if (parent == &pll0 || parent == &pll1) ++ control |= SM_BIT(PLLSEL); ++ else ++ control &= ~SM_BIT(PLLSEL); ++ ++ sm_writel(&system_manager, PM_GCCTRL + 4 * clk->index, control); ++ clk->parent = parent; ++ ++ return 0; ++} ++ ++/* -------------------------------------------------------------------- ++ * System peripherals ++ * -------------------------------------------------------------------- */ ++static struct resource sm_resource[] = { ++ PBMEM(0xfff00000), ++ NAMED_IRQ(19, "eim"), ++ NAMED_IRQ(20, "pm"), ++ NAMED_IRQ(21, "rtc"), ++}; ++struct platform_device at32_sm_device = { ++ .name = "sm", ++ .id = 0, ++ .resource = sm_resource, ++ .num_resources = ARRAY_SIZE(sm_resource), ++}; ++DEV_CLK(pclk, at32_sm, pbb, 0); ++ ++static struct resource intc0_resource[] = { ++ PBMEM(0xfff00400), ++}; ++struct platform_device at32_intc0_device = { ++ .name = "intc", ++ .id = 0, ++ .resource = intc0_resource, ++ .num_resources = ARRAY_SIZE(intc0_resource), ++}; ++DEV_CLK(pclk, at32_intc0, pbb, 1); ++ ++static struct clk ebi_clk = { ++ .name = "ebi", ++ .parent = &hsb_clk, ++ .mode = hsb_clk_mode, ++ .get_rate = hsb_clk_get_rate, ++ .users = 1, ++}; ++static struct clk hramc_clk = { ++ .name = "hramc", ++ .parent = &hsb_clk, ++ .mode = hsb_clk_mode, ++ .get_rate = hsb_clk_get_rate, ++ .users = 1, ++}; ++ ++static struct resource smc0_resource[] = { ++ PBMEM(0xfff03400), ++}; ++DEFINE_DEV(smc, 0); ++DEV_CLK(pclk, smc0, pbb, 13); ++DEV_CLK(mck, smc0, hsb, 0); ++ ++static struct platform_device pdc_device = { ++ .name = "pdc", ++ .id = 0, ++}; ++DEV_CLK(hclk, pdc, hsb, 4); ++DEV_CLK(pclk, pdc, pba, 16); ++ ++static struct clk pico_clk = { ++ .name = "pico", ++ .parent = &cpu_clk, ++ .mode = cpu_clk_mode, ++ .get_rate = cpu_clk_get_rate, ++ .users = 1, ++}; ++ ++/* -------------------------------------------------------------------- ++ * PIO ++ * -------------------------------------------------------------------- */ ++ ++static struct resource pio0_resource[] = { ++ PBMEM(0xffe02800), ++ IRQ(13), ++}; ++DEFINE_DEV(pio, 0); ++DEV_CLK(mck, pio0, pba, 10); ++ ++static struct resource pio1_resource[] = { ++ PBMEM(0xffe02c00), ++ IRQ(14), ++}; ++DEFINE_DEV(pio, 1); ++DEV_CLK(mck, pio1, pba, 11); ++ ++static struct resource pio2_resource[] = { ++ PBMEM(0xffe03000), ++ IRQ(15), ++}; ++DEFINE_DEV(pio, 2); ++DEV_CLK(mck, pio2, pba, 12); ++ ++static struct resource pio3_resource[] = { ++ PBMEM(0xffe03400), ++ IRQ(16), ++}; ++DEFINE_DEV(pio, 3); ++DEV_CLK(mck, pio3, pba, 13); ++ ++void __init at32_add_system_devices(void) ++{ ++ system_manager.eim_first_irq = NR_INTERNAL_IRQS; ++ ++ platform_device_register(&at32_sm_device); ++ platform_device_register(&at32_intc0_device); ++ platform_device_register(&smc0_device); ++ platform_device_register(&pdc_device); ++ ++ platform_device_register(&pio0_device); ++ platform_device_register(&pio1_device); ++ platform_device_register(&pio2_device); ++ platform_device_register(&pio3_device); ++} ++ ++/* -------------------------------------------------------------------- ++ * USART ++ * -------------------------------------------------------------------- */ ++ ++static struct resource usart0_resource[] = { ++ PBMEM(0xffe00c00), ++ IRQ(7), ++}; ++DEFINE_DEV(usart, 0); ++DEV_CLK(usart, usart0, pba, 4); ++ ++static struct resource usart1_resource[] = { ++ PBMEM(0xffe01000), ++ IRQ(7), ++}; ++DEFINE_DEV(usart, 1); ++DEV_CLK(usart, usart1, pba, 4); ++ ++static struct resource usart2_resource[] = { ++ PBMEM(0xffe01400), ++ IRQ(8), ++}; ++DEFINE_DEV(usart, 2); ++DEV_CLK(usart, usart2, pba, 5); ++ ++static struct resource usart3_resource[] = { ++ PBMEM(0xffe01800), ++ IRQ(9), ++}; ++DEFINE_DEV(usart, 3); ++DEV_CLK(usart, usart3, pba, 6); ++ ++static inline void configure_usart0_pins(void) ++{ ++ portmux_set_func(PIOA, 8, FUNC_B); /* RXD */ ++ portmux_set_func(PIOA, 9, FUNC_B); /* TXD */ ++} ++ ++static inline void configure_usart1_pins(void) ++{ ++ portmux_set_func(PIOA, 17, FUNC_A); /* RXD */ ++ portmux_set_func(PIOA, 18, FUNC_A); /* TXD */ ++} ++ ++static inline void configure_usart2_pins(void) ++{ ++ portmux_set_func(PIOB, 26, FUNC_B); /* RXD */ ++ portmux_set_func(PIOB, 27, FUNC_B); /* TXD */ ++} ++ ++static inline void configure_usart3_pins(void) ++{ ++ portmux_set_func(PIOB, 18, FUNC_B); /* RXD */ ++ portmux_set_func(PIOB, 17, FUNC_B); /* TXD */ ++} ++ ++static struct platform_device *setup_usart(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &usart0_device; ++ configure_usart0_pins(); ++ break; ++ case 1: ++ pdev = &usart1_device; ++ configure_usart1_pins(); ++ break; ++ case 2: ++ pdev = &usart2_device; ++ configure_usart2_pins(); ++ break; ++ case 3: ++ pdev = &usart3_device; ++ configure_usart3_pins(); ++ break; ++ default: ++ pdev = NULL; ++ break; ++ } ++ ++ return pdev; ++} ++ ++struct platform_device *__init at32_add_device_usart(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ pdev = setup_usart(id); ++ if (pdev) ++ platform_device_register(pdev); ++ ++ return pdev; ++} ++ ++struct platform_device *at91_default_console_device; ++ ++void __init at32_setup_serial_console(unsigned int usart_id) ++{ ++ at91_default_console_device = setup_usart(usart_id); ++} ++ ++/* -------------------------------------------------------------------- ++ * Ethernet ++ * -------------------------------------------------------------------- */ ++ ++static struct eth_platform_data macb0_data; ++static struct resource macb0_resource[] = { ++ PBMEM(0xfff01800), ++ IRQ(25), ++}; ++DEFINE_DEV_DATA(macb, 0); ++DEV_CLK(hclk, macb0, hsb, 8); ++DEV_CLK(pclk, macb0, pbb, 6); ++ ++struct platform_device *__init ++at32_add_device_eth(unsigned int id, struct eth_platform_data *data) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &macb0_device; ++ ++ portmux_set_func(PIOC, 3, FUNC_A); /* TXD0 */ ++ portmux_set_func(PIOC, 4, FUNC_A); /* TXD1 */ ++ portmux_set_func(PIOC, 7, FUNC_A); /* TXEN */ ++ portmux_set_func(PIOC, 8, FUNC_A); /* TXCK */ ++ portmux_set_func(PIOC, 9, FUNC_A); /* RXD0 */ ++ portmux_set_func(PIOC, 10, FUNC_A); /* RXD1 */ ++ portmux_set_func(PIOC, 13, FUNC_A); /* RXER */ ++ portmux_set_func(PIOC, 15, FUNC_A); /* RXDV */ ++ portmux_set_func(PIOC, 16, FUNC_A); /* MDC */ ++ portmux_set_func(PIOC, 17, FUNC_A); /* MDIO */ ++ ++ if (!data->is_rmii) { ++ portmux_set_func(PIOC, 0, FUNC_A); /* COL */ ++ portmux_set_func(PIOC, 1, FUNC_A); /* CRS */ ++ portmux_set_func(PIOC, 2, FUNC_A); /* TXER */ ++ portmux_set_func(PIOC, 5, FUNC_A); /* TXD2 */ ++ portmux_set_func(PIOC, 6, FUNC_A); /* TXD3 */ ++ portmux_set_func(PIOC, 11, FUNC_A); /* RXD2 */ ++ portmux_set_func(PIOC, 12, FUNC_A); /* RXD3 */ ++ portmux_set_func(PIOC, 14, FUNC_A); /* RXCK */ ++ portmux_set_func(PIOC, 18, FUNC_A); /* SPD */ ++ } ++ break; ++ ++ default: ++ return NULL; ++ } ++ ++ memcpy(pdev->dev.platform_data, data, sizeof(struct eth_platform_data)); ++ platform_device_register(pdev); ++ ++ return pdev; ++} ++ ++/* -------------------------------------------------------------------- ++ * SPI ++ * -------------------------------------------------------------------- */ ++static struct resource spi0_resource[] = { ++ PBMEM(0xffe00000), ++ IRQ(3), ++}; ++DEFINE_DEV(spi, 0); ++DEV_CLK(mck, spi0, pba, 0); ++ ++struct platform_device *__init at32_add_device_spi(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &spi0_device; ++ portmux_set_func(PIOA, 0, FUNC_A); /* MISO */ ++ portmux_set_func(PIOA, 1, FUNC_A); /* MOSI */ ++ portmux_set_func(PIOA, 2, FUNC_A); /* SCK */ ++ portmux_set_func(PIOA, 3, FUNC_A); /* NPCS0 */ ++ portmux_set_func(PIOA, 4, FUNC_A); /* NPCS1 */ ++ portmux_set_func(PIOA, 5, FUNC_A); /* NPCS2 */ ++ break; ++ ++ default: ++ return NULL; ++ } ++ ++ platform_device_register(pdev); ++ return pdev; ++} ++ ++/* -------------------------------------------------------------------- ++ * LCDC ++ * -------------------------------------------------------------------- */ ++static struct lcdc_platform_data lcdc0_data; ++static struct resource lcdc0_resource[] = { ++ { ++ .start = 0xff000000, ++ .end = 0xff000fff, ++ .flags = IORESOURCE_MEM, ++ }, ++ IRQ(1), ++}; ++DEFINE_DEV_DATA(lcdc, 0); ++DEV_CLK(hclk, lcdc0, hsb, 7); ++static struct clk lcdc0_pixclk = { ++ .name = "pixclk", ++ .dev = &lcdc0_device.dev, ++ .mode = genclk_mode, ++ .get_rate = genclk_get_rate, ++ .set_rate = genclk_set_rate, ++ .set_parent = genclk_set_parent, ++ .index = 7, ++}; ++ ++struct platform_device *__init ++at32_add_device_lcdc(unsigned int id, struct lcdc_platform_data *data) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &lcdc0_device; ++ portmux_set_func(PIOC, 19, FUNC_A); /* CC */ ++ portmux_set_func(PIOC, 20, FUNC_A); /* HSYNC */ ++ portmux_set_func(PIOC, 21, FUNC_A); /* PCLK */ ++ portmux_set_func(PIOC, 22, FUNC_A); /* VSYNC */ ++ portmux_set_func(PIOC, 23, FUNC_A); /* DVAL */ ++ portmux_set_func(PIOC, 24, FUNC_A); /* MODE */ ++ portmux_set_func(PIOC, 25, FUNC_A); /* PWR */ ++ portmux_set_func(PIOC, 26, FUNC_A); /* DATA0 */ ++ portmux_set_func(PIOC, 27, FUNC_A); /* DATA1 */ ++ portmux_set_func(PIOC, 28, FUNC_A); /* DATA2 */ ++ portmux_set_func(PIOC, 29, FUNC_A); /* DATA3 */ ++ portmux_set_func(PIOC, 30, FUNC_A); /* DATA4 */ ++ portmux_set_func(PIOC, 31, FUNC_A); /* DATA5 */ ++ portmux_set_func(PIOD, 0, FUNC_A); /* DATA6 */ ++ portmux_set_func(PIOD, 1, FUNC_A); /* DATA7 */ ++ portmux_set_func(PIOD, 2, FUNC_A); /* DATA8 */ ++ portmux_set_func(PIOD, 3, FUNC_A); /* DATA9 */ ++ portmux_set_func(PIOD, 4, FUNC_A); /* DATA10 */ ++ portmux_set_func(PIOD, 5, FUNC_A); /* DATA11 */ ++ portmux_set_func(PIOD, 6, FUNC_A); /* DATA12 */ ++ portmux_set_func(PIOD, 7, FUNC_A); /* DATA13 */ ++ portmux_set_func(PIOD, 8, FUNC_A); /* DATA14 */ ++ portmux_set_func(PIOD, 9, FUNC_A); /* DATA15 */ ++ portmux_set_func(PIOD, 10, FUNC_A); /* DATA16 */ ++ portmux_set_func(PIOD, 11, FUNC_A); /* DATA17 */ ++ portmux_set_func(PIOD, 12, FUNC_A); /* DATA18 */ ++ portmux_set_func(PIOD, 13, FUNC_A); /* DATA19 */ ++ portmux_set_func(PIOD, 14, FUNC_A); /* DATA20 */ ++ portmux_set_func(PIOD, 15, FUNC_A); /* DATA21 */ ++ portmux_set_func(PIOD, 16, FUNC_A); /* DATA22 */ ++ portmux_set_func(PIOD, 17, FUNC_A); /* DATA23 */ ++ ++ clk_set_parent(&lcdc0_pixclk, &pll0); ++ clk_set_rate(&lcdc0_pixclk, clk_get_rate(&pll0)); ++ break; ++ ++ default: ++ return NULL; ++ } ++ ++ memcpy(pdev->dev.platform_data, data, ++ sizeof(struct lcdc_platform_data)); ++ ++ platform_device_register(pdev); ++ return pdev; ++} ++ ++struct clk *at32_clock_list[] = { ++ &osc32k, ++ &osc0, ++ &osc1, ++ &pll0, ++ &pll1, ++ &cpu_clk, ++ &hsb_clk, ++ &pba_clk, ++ &pbb_clk, ++ &at32_sm_pclk, ++ &at32_intc0_pclk, ++ &ebi_clk, ++ &hramc_clk, ++ &smc0_pclk, ++ &smc0_mck, ++ &pdc_hclk, ++ &pdc_pclk, ++ &pico_clk, ++ &pio0_mck, ++ &pio1_mck, ++ &pio2_mck, ++ &pio3_mck, ++ &usart0_usart, ++ &usart1_usart, ++ &usart2_usart, ++ &usart3_usart, ++ &macb0_hclk, ++ &macb0_pclk, ++ &spi0_mck, ++ &lcdc0_hclk, ++ &lcdc0_pixclk, ++}; ++unsigned int at32_nr_clocks = ARRAY_SIZE(at32_clock_list); ++ ++void __init at32_portmux_init(void) ++{ ++ at32_init_pio(&pio0_device); ++ at32_init_pio(&pio1_device); ++ at32_init_pio(&pio2_device); ++ at32_init_pio(&pio3_device); ++} ++ ++void __init at32_clock_init(void) ++{ ++ struct at32_sm *sm = &system_manager; ++ u32 cpu_mask = 0, hsb_mask = 0, pba_mask = 0, pbb_mask = 0; ++ int i; ++ ++ if (sm_readl(sm, PM_MCCTRL) & SM_BIT(PLLSEL)) ++ main_clock = &pll0; ++ else ++ main_clock = &osc0; ++ ++ if (sm_readl(sm, PM_PLL0) & SM_BIT(PLLOSC)) ++ pll0.parent = &osc1; ++ if (sm_readl(sm, PM_PLL1) & SM_BIT(PLLOSC)) ++ pll1.parent = &osc1; ++ ++ /* ++ * Turn on all clocks that have at least one user already, and ++ * turn off everything else. We only do this for module ++ * clocks, and even though it isn't particularly pretty to ++ * check the address of the mode function, it should do the ++ * trick... ++ */ ++ for (i = 0; i < ARRAY_SIZE(at32_clock_list); i++) { ++ struct clk *clk = at32_clock_list[i]; ++ ++ if (clk->mode == &cpu_clk_mode) ++ cpu_mask |= 1 << clk->index; ++ else if (clk->mode == &hsb_clk_mode) ++ hsb_mask |= 1 << clk->index; ++ else if (clk->mode == &pba_clk_mode) ++ pba_mask |= 1 << clk->index; ++ else if (clk->mode == &pbb_clk_mode) ++ pbb_mask |= 1 << clk->index; ++ } ++ ++ sm_writel(sm, PM_CPU_MASK, cpu_mask); ++ sm_writel(sm, PM_HSB_MASK, hsb_mask); ++ sm_writel(sm, PM_PBA_MASK, pba_mask); ++ sm_writel(sm, PM_PBB_MASK, pbb_mask); ++} +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/clock.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/clock.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,148 @@ ++/* ++ * Clock management for AT32AP CPUs ++ * ++ * Copyright (C) 2006 Atmel Corporation ++ * ++ * Based on arch/arm/mach-at91rm9200/clock.c ++ * Copyright (C) 2005 David Brownell ++ * Copyright (C) 2005 Ivan Kokshaysky ++ * ++ * 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 "clock.h" ++ ++static spinlock_t clk_lock = SPIN_LOCK_UNLOCKED; ++ ++struct clk *clk_get(struct device *dev, const char *id) ++{ ++ int i; ++ ++ for (i = 0; i < at32_nr_clocks; i++) { ++ struct clk *clk = at32_clock_list[i]; ++ ++ if (clk->dev == dev && strcmp(id, clk->name) == 0) ++ return clk; ++ } ++ ++ return ERR_PTR(-ENOENT); ++} ++EXPORT_SYMBOL(clk_get); ++ ++void clk_put(struct clk *clk) ++{ ++ /* clocks are static for now, we can't free them */ ++} ++EXPORT_SYMBOL(clk_put); ++ ++static void __clk_enable(struct clk *clk) ++{ ++ if (clk->parent) ++ __clk_enable(clk->parent); ++ if (clk->users++ == 0 && clk->mode) ++ clk->mode(clk, 1); ++} ++ ++int clk_enable(struct clk *clk) ++{ ++ unsigned long flags; ++ ++ spin_lock_irqsave(&clk_lock, flags); ++ __clk_enable(clk); ++ spin_unlock_irqrestore(&clk_lock, flags); ++ ++ return 0; ++} ++EXPORT_SYMBOL(clk_enable); ++ ++static void __clk_disable(struct clk *clk) ++{ ++ BUG_ON(clk->users == 0); ++ ++ if (--clk->users == 0 && clk->mode) ++ clk->mode(clk, 0); ++ if (clk->parent) ++ __clk_disable(clk->parent); ++} ++ ++void clk_disable(struct clk *clk) ++{ ++ unsigned long flags; ++ ++ spin_lock_irqsave(&clk_lock, flags); ++ __clk_disable(clk); ++ spin_unlock_irqrestore(&clk_lock, flags); ++} ++EXPORT_SYMBOL(clk_disable); ++ ++unsigned long clk_get_rate(struct clk *clk) ++{ ++ unsigned long flags; ++ unsigned long rate; ++ ++ spin_lock_irqsave(&clk_lock, flags); ++ rate = clk->get_rate(clk); ++ spin_unlock_irqrestore(&clk_lock, flags); ++ ++ return rate; ++} ++EXPORT_SYMBOL(clk_get_rate); ++ ++long clk_round_rate(struct clk *clk, unsigned long rate) ++{ ++ unsigned long flags, actual_rate; ++ ++ if (!clk->set_rate) ++ return -ENOSYS; ++ ++ spin_lock_irqsave(&clk_lock, flags); ++ actual_rate = clk->set_rate(clk, rate, 0); ++ spin_unlock_irqrestore(&clk_lock, flags); ++ ++ return actual_rate; ++} ++EXPORT_SYMBOL(clk_round_rate); ++ ++int clk_set_rate(struct clk *clk, unsigned long rate) ++{ ++ unsigned long flags; ++ long ret; ++ ++ if (!clk->set_rate) ++ return -ENOSYS; ++ ++ spin_lock_irqsave(&clk_lock, flags); ++ ret = clk->set_rate(clk, rate, 1); ++ spin_unlock_irqrestore(&clk_lock, flags); ++ ++ return (ret < 0) ? ret : 0; ++} ++EXPORT_SYMBOL(clk_set_rate); ++ ++int clk_set_parent(struct clk *clk, struct clk *parent) ++{ ++ unsigned long flags; ++ int ret; ++ ++ if (!clk->set_parent) ++ return -ENOSYS; ++ ++ spin_lock_irqsave(&clk_lock, flags); ++ ret = clk->set_parent(clk, parent); ++ spin_unlock_irqrestore(&clk_lock, flags); ++ ++ return ret; ++} ++EXPORT_SYMBOL(clk_set_parent); ++ ++struct clk *clk_get_parent(struct clk *clk) ++{ ++ return clk->parent; ++} ++EXPORT_SYMBOL(clk_get_parent); +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/clock.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/clock.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,30 @@ ++/* ++ * Clock management for AT32AP CPUs ++ * ++ * Copyright (C) 2006 Atmel Corporation ++ * ++ * Based on arch/arm/mach-at91rm9200/clock.c ++ * Copyright (C) 2005 David Brownell ++ * Copyright (C) 2005 Ivan Kokshaysky ++ * ++ * 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 ++ ++struct clk { ++ const char *name; /* Clock name/function */ ++ struct device *dev; /* Device the clock is used by */ ++ struct clk *parent; /* Parent clock, if any */ ++ void (*mode)(struct clk *clk, int enabled); ++ unsigned long (*get_rate)(struct clk *clk); ++ long (*set_rate)(struct clk *clk, unsigned long rate, ++ int apply); ++ int (*set_parent)(struct clk *clk, struct clk *parent); ++ u16 users; /* Enabled if non-zero */ ++ u16 index; /* Sibling index */ ++}; ++ ++extern struct clk *at32_clock_list[]; ++extern unsigned int at32_nr_clocks; +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/extint.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/extint.c 2006-12-04 12:00:24.000000000 +0100 +@@ -0,0 +1,189 @@ ++/* ++ * External interrupt handling for AT32AP CPUs ++ * ++ * Copyright (C) 2006 Atmel 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 "sm.h" ++ ++static void eim_ack_irq(unsigned int irq) ++{ ++ struct at32_sm *sm = get_irq_chip_data(irq); ++ sm_writel(sm, EIM_ICR, 1 << (irq - sm->eim_first_irq)); ++} ++ ++static void eim_mask_irq(unsigned int irq) ++{ ++ struct at32_sm *sm = get_irq_chip_data(irq); ++ sm_writel(sm, EIM_IDR, 1 << (irq - sm->eim_first_irq)); ++} ++ ++static void eim_mask_ack_irq(unsigned int irq) ++{ ++ struct at32_sm *sm = get_irq_chip_data(irq); ++ sm_writel(sm, EIM_ICR, 1 << (irq - sm->eim_first_irq)); ++ sm_writel(sm, EIM_IDR, 1 << (irq - sm->eim_first_irq)); ++} ++ ++static void eim_unmask_irq(unsigned int irq) ++{ ++ struct at32_sm *sm = get_irq_chip_data(irq); ++ sm_writel(sm, EIM_IER, 1 << (irq - sm->eim_first_irq)); ++} ++ ++static int eim_set_irq_type(unsigned int irq, unsigned int flow_type) ++{ ++ struct at32_sm *sm = get_irq_chip_data(irq); ++ struct irq_desc *desc; ++ unsigned int i = irq - sm->eim_first_irq; ++ u32 mode, edge, level; ++ unsigned long flags; ++ int ret = 0; ++ ++ if (flow_type == IRQ_TYPE_NONE) ++ flow_type = IRQ_TYPE_LEVEL_LOW; ++ ++ desc = &irq_desc[irq]; ++ desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL); ++ desc->status |= flow_type & IRQ_TYPE_SENSE_MASK; ++ ++ if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) { ++ desc->status |= IRQ_LEVEL; ++ set_irq_handler(irq, handle_level_irq); ++ } else { ++ set_irq_handler(irq, handle_edge_irq); ++ } ++ ++ spin_lock_irqsave(&sm->lock, flags); ++ ++ mode = sm_readl(sm, EIM_MODE); ++ edge = sm_readl(sm, EIM_EDGE); ++ level = sm_readl(sm, EIM_LEVEL); ++ ++ switch (flow_type) { ++ case IRQ_TYPE_LEVEL_LOW: ++ mode |= 1 << i; ++ level &= ~(1 << i); ++ break; ++ case IRQ_TYPE_LEVEL_HIGH: ++ mode |= 1 << i; ++ level |= 1 << i; ++ break; ++ case IRQ_TYPE_EDGE_RISING: ++ mode &= ~(1 << i); ++ edge |= 1 << i; ++ break; ++ case IRQ_TYPE_EDGE_FALLING: ++ mode &= ~(1 << i); ++ edge &= ~(1 << i); ++ break; ++ default: ++ ret = -EINVAL; ++ break; ++ } ++ ++ sm_writel(sm, EIM_MODE, mode); ++ sm_writel(sm, EIM_EDGE, edge); ++ sm_writel(sm, EIM_LEVEL, level); ++ ++ spin_unlock_irqrestore(&sm->lock, flags); ++ ++ return ret; ++} ++ ++struct irq_chip eim_chip = { ++ .name = "eim", ++ .ack = eim_ack_irq, ++ .mask = eim_mask_irq, ++ .mask_ack = eim_mask_ack_irq, ++ .unmask = eim_unmask_irq, ++ .set_type = eim_set_irq_type, ++}; ++ ++static void demux_eim_irq(unsigned int irq, struct irq_desc *desc, ++ struct pt_regs *regs) ++{ ++ struct at32_sm *sm = desc->handler_data; ++ struct irq_desc *ext_desc; ++ unsigned long status, pending; ++ unsigned int i, ext_irq; ++ ++ spin_lock(&sm->lock); ++ ++ status = sm_readl(sm, EIM_ISR); ++ pending = status & sm_readl(sm, EIM_IMR); ++ ++ while (pending) { ++ i = fls(pending) - 1; ++ pending &= ~(1 << i); ++ ++ ext_irq = i + sm->eim_first_irq; ++ ext_desc = irq_desc + ext_irq; ++ ext_desc->handle_irq(ext_irq, ext_desc, regs); ++ } ++ ++ spin_unlock(&sm->lock); ++} ++ ++static int __init eim_init(void) ++{ ++ struct at32_sm *sm = &system_manager; ++ unsigned int i; ++ unsigned int nr_irqs; ++ unsigned int int_irq; ++ u32 pattern; ++ ++ /* ++ * The EIM is really the same module as SM, so register ++ * mapping, etc. has been taken care of already. ++ */ ++ ++ /* ++ * Find out how many interrupt lines that are actually ++ * implemented in hardware. ++ */ ++ sm_writel(sm, EIM_IDR, ~0UL); ++ sm_writel(sm, EIM_MODE, ~0UL); ++ pattern = sm_readl(sm, EIM_MODE); ++ nr_irqs = fls(pattern); ++ ++ /* Trigger on falling edge unless overridden by driver */ ++ sm_writel(sm, EIM_MODE, 0UL); ++ sm_writel(sm, EIM_EDGE, 0UL); ++ ++ sm->eim_chip = &eim_chip; ++ ++ for (i = 0; i < nr_irqs; i++) { ++ set_irq_chip_and_handler(sm->eim_first_irq + i, &eim_chip, ++ handle_edge_irq); ++ set_irq_chip_data(sm->eim_first_irq + i, sm); ++ } ++ ++ int_irq = platform_get_irq_byname(sm->pdev, "eim"); ++ ++ set_irq_chained_handler(int_irq, demux_eim_irq); ++ set_irq_data(int_irq, sm); ++ ++ printk("EIM: External Interrupt Module at 0x%p, IRQ %u\n", ++ sm->regs, int_irq); ++ printk("EIM: Handling %u external IRQs, starting with IRQ %u\n", ++ nr_irqs, sm->eim_first_irq); ++ ++ return 0; ++} ++arch_initcall(eim_init); +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/intc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/intc.c 2006-12-04 11:50:22.000000000 +0100 +@@ -0,0 +1,133 @@ ++/* ++ * Copyright (C) 2006 Atmel 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 "intc.h" ++ ++struct intc { ++ void __iomem *regs; ++ struct irq_chip chip; ++}; ++ ++extern struct platform_device at32_intc0_device; ++ ++/* ++ * TODO: We may be able to implement mask/unmask by setting IxM flags ++ * in the status register. ++ */ ++static void intc_mask_irq(unsigned int irq) ++{ ++ ++} ++ ++static void intc_unmask_irq(unsigned int irq) ++{ ++ ++} ++ ++static struct intc intc0 = { ++ .chip = { ++ .name = "intc", ++ .mask = intc_mask_irq, ++ .unmask = intc_unmask_irq, ++ }, ++}; ++ ++/* ++ * All interrupts go via intc at some point. ++ */ ++asmlinkage void do_IRQ(int level, struct pt_regs *regs) ++{ ++ struct irq_desc *desc; ++ unsigned int irq; ++ unsigned long status_reg; ++ ++ local_irq_disable(); ++ ++ irq_enter(); ++ ++ irq = intc_readl(&intc0, INTCAUSE0 - 4 * level); ++ desc = irq_desc + irq; ++ desc->handle_irq(irq, desc, regs); ++ ++ /* ++ * Clear all interrupt level masks so that we may handle ++ * interrupts during softirq processing. If this is a nested ++ * interrupt, interrupts must stay globally disabled until we ++ * return. ++ */ ++ status_reg = sysreg_read(SR); ++ status_reg &= ~(SYSREG_BIT(I0M) | SYSREG_BIT(I1M) ++ | SYSREG_BIT(I2M) | SYSREG_BIT(I3M)); ++ sysreg_write(SR, status_reg); ++ ++ irq_exit(); ++} ++ ++void __init init_IRQ(void) ++{ ++ extern void _evba(void); ++ extern void irq_level0(void); ++ struct resource *regs; ++ struct clk *pclk; ++ unsigned int i; ++ u32 offset, readback; ++ ++ regs = platform_get_resource(&at32_intc0_device, IORESOURCE_MEM, 0); ++ if (!regs) { ++ printk(KERN_EMERG "intc: no mmio resource defined\n"); ++ goto fail; ++ } ++ pclk = clk_get(&at32_intc0_device.dev, "pclk"); ++ if (IS_ERR(pclk)) { ++ printk(KERN_EMERG "intc: no clock defined\n"); ++ goto fail; ++ } ++ ++ clk_enable(pclk); ++ ++ intc0.regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!intc0.regs) { ++ printk(KERN_EMERG "intc: failed to map registers (0x%08lx)\n", ++ (unsigned long)regs->start); ++ goto fail; ++ } ++ ++ /* ++ * Initialize all interrupts to level 0 (lowest priority). The ++ * priority level may be changed by calling ++ * irq_set_priority(). ++ * ++ */ ++ offset = (unsigned long)&irq_level0 - (unsigned long)&_evba; ++ for (i = 0; i < NR_INTERNAL_IRQS; i++) { ++ intc_writel(&intc0, INTPR0 + 4 * i, offset); ++ readback = intc_readl(&intc0, INTPR0 + 4 * i); ++ if (readback == offset) ++ set_irq_chip_and_handler(i, &intc0.chip, ++ handle_simple_irq); ++ } ++ ++ /* Unmask all interrupt levels */ ++ sysreg_write(SR, (sysreg_read(SR) ++ & ~(SR_I3M | SR_I2M | SR_I1M | SR_I0M))); ++ ++ return; ++ ++fail: ++ panic("Interrupt controller initialization failed!\n"); ++} ++ +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/intc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/intc.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,329 @@ ++/* ++ * Automatically generated by gen-header.xsl ++ */ ++#ifndef __ASM_AVR32_PERIHP_INTC_H__ ++#define __ASM_AVR32_PERIHP_INTC_H__ ++ ++#define INTC_NUM_INT_GRPS 33 ++ ++#define INTC_INTPR0 0x0 ++# define INTC_INTPR0_INTLEV_OFFSET 30 ++# define INTC_INTPR0_INTLEV_SIZE 2 ++# define INTC_INTPR0_OFFSET_OFFSET 0 ++# define INTC_INTPR0_OFFSET_SIZE 24 ++#define INTC_INTREQ0 0x100 ++# define INTC_INTREQ0_IREQUEST0_OFFSET 0 ++# define INTC_INTREQ0_IREQUEST0_SIZE 1 ++# define INTC_INTREQ0_IREQUEST1_OFFSET 1 ++# define INTC_INTREQ0_IREQUEST1_SIZE 1 ++#define INTC_INTPR1 0x4 ++# define INTC_INTPR1_INTLEV_OFFSET 30 ++# define INTC_INTPR1_INTLEV_SIZE 2 ++# define INTC_INTPR1_OFFSET_OFFSET 0 ++# define INTC_INTPR1_OFFSET_SIZE 24 ++#define INTC_INTREQ1 0x104 ++# define INTC_INTREQ1_IREQUEST32_OFFSET 0 ++# define INTC_INTREQ1_IREQUEST32_SIZE 1 ++# define INTC_INTREQ1_IREQUEST33_OFFSET 1 ++# define INTC_INTREQ1_IREQUEST33_SIZE 1 ++# define INTC_INTREQ1_IREQUEST34_OFFSET 2 ++# define INTC_INTREQ1_IREQUEST34_SIZE 1 ++# define INTC_INTREQ1_IREQUEST35_OFFSET 3 ++# define INTC_INTREQ1_IREQUEST35_SIZE 1 ++# define INTC_INTREQ1_IREQUEST36_OFFSET 4 ++# define INTC_INTREQ1_IREQUEST36_SIZE 1 ++# define INTC_INTREQ1_IREQUEST37_OFFSET 5 ++# define INTC_INTREQ1_IREQUEST37_SIZE 1 ++#define INTC_INTPR2 0x8 ++# define INTC_INTPR2_INTLEV_OFFSET 30 ++# define INTC_INTPR2_INTLEV_SIZE 2 ++# define INTC_INTPR2_OFFSET_OFFSET 0 ++# define INTC_INTPR2_OFFSET_SIZE 24 ++#define INTC_INTREQ2 0x108 ++# define INTC_INTREQ2_IREQUEST64_OFFSET 0 ++# define INTC_INTREQ2_IREQUEST64_SIZE 1 ++# define INTC_INTREQ2_IREQUEST65_OFFSET 1 ++# define INTC_INTREQ2_IREQUEST65_SIZE 1 ++# define INTC_INTREQ2_IREQUEST66_OFFSET 2 ++# define INTC_INTREQ2_IREQUEST66_SIZE 1 ++# define INTC_INTREQ2_IREQUEST67_OFFSET 3 ++# define INTC_INTREQ2_IREQUEST67_SIZE 1 ++# define INTC_INTREQ2_IREQUEST68_OFFSET 4 ++# define INTC_INTREQ2_IREQUEST68_SIZE 1 ++#define INTC_INTPR3 0xc ++# define INTC_INTPR3_INTLEV_OFFSET 30 ++# define INTC_INTPR3_INTLEV_SIZE 2 ++# define INTC_INTPR3_OFFSET_OFFSET 0 ++# define INTC_INTPR3_OFFSET_SIZE 24 ++#define INTC_INTREQ3 0x10c ++# define INTC_INTREQ3_IREQUEST96_OFFSET 0 ++# define INTC_INTREQ3_IREQUEST96_SIZE 1 ++#define INTC_INTPR4 0x10 ++# define INTC_INTPR4_INTLEV_OFFSET 30 ++# define INTC_INTPR4_INTLEV_SIZE 2 ++# define INTC_INTPR4_OFFSET_OFFSET 0 ++# define INTC_INTPR4_OFFSET_SIZE 24 ++#define INTC_INTREQ4 0x110 ++# define INTC_INTREQ4_IREQUEST128_OFFSET 0 ++# define INTC_INTREQ4_IREQUEST128_SIZE 1 ++#define INTC_INTPR5 0x14 ++# define INTC_INTPR5_INTLEV_OFFSET 30 ++# define INTC_INTPR5_INTLEV_SIZE 2 ++# define INTC_INTPR5_OFFSET_OFFSET 0 ++# define INTC_INTPR5_OFFSET_SIZE 24 ++#define INTC_INTREQ5 0x114 ++# define INTC_INTREQ5_IREQUEST160_OFFSET 0 ++# define INTC_INTREQ5_IREQUEST160_SIZE 1 ++#define INTC_INTPR6 0x18 ++# define INTC_INTPR6_INTLEV_OFFSET 30 ++# define INTC_INTPR6_INTLEV_SIZE 2 ++# define INTC_INTPR6_OFFSET_OFFSET 0 ++# define INTC_INTPR6_OFFSET_SIZE 24 ++#define INTC_INTREQ6 0x118 ++# define INTC_INTREQ6_IREQUEST192_OFFSET 0 ++# define INTC_INTREQ6_IREQUEST192_SIZE 1 ++#define INTC_INTPR7 0x1c ++# define INTC_INTPR7_INTLEV_OFFSET 30 ++# define INTC_INTPR7_INTLEV_SIZE 2 ++# define INTC_INTPR7_OFFSET_OFFSET 0 ++# define INTC_INTPR7_OFFSET_SIZE 24 ++#define INTC_INTREQ7 0x11c ++# define INTC_INTREQ7_IREQUEST224_OFFSET 0 ++# define INTC_INTREQ7_IREQUEST224_SIZE 1 ++#define INTC_INTPR8 0x20 ++# define INTC_INTPR8_INTLEV_OFFSET 30 ++# define INTC_INTPR8_INTLEV_SIZE 2 ++# define INTC_INTPR8_OFFSET_OFFSET 0 ++# define INTC_INTPR8_OFFSET_SIZE 24 ++#define INTC_INTREQ8 0x120 ++# define INTC_INTREQ8_IREQUEST256_OFFSET 0 ++# define INTC_INTREQ8_IREQUEST256_SIZE 1 ++#define INTC_INTPR9 0x24 ++# define INTC_INTPR9_INTLEV_OFFSET 30 ++# define INTC_INTPR9_INTLEV_SIZE 2 ++# define INTC_INTPR9_OFFSET_OFFSET 0 ++# define INTC_INTPR9_OFFSET_SIZE 24 ++#define INTC_INTREQ9 0x124 ++# define INTC_INTREQ9_IREQUEST288_OFFSET 0 ++# define INTC_INTREQ9_IREQUEST288_SIZE 1 ++#define INTC_INTPR10 0x28 ++# define INTC_INTPR10_INTLEV_OFFSET 30 ++# define INTC_INTPR10_INTLEV_SIZE 2 ++# define INTC_INTPR10_OFFSET_OFFSET 0 ++# define INTC_INTPR10_OFFSET_SIZE 24 ++#define INTC_INTREQ10 0x128 ++# define INTC_INTREQ10_IREQUEST320_OFFSET 0 ++# define INTC_INTREQ10_IREQUEST320_SIZE 1 ++#define INTC_INTPR11 0x2c ++# define INTC_INTPR11_INTLEV_OFFSET 30 ++# define INTC_INTPR11_INTLEV_SIZE 2 ++# define INTC_INTPR11_OFFSET_OFFSET 0 ++# define INTC_INTPR11_OFFSET_SIZE 24 ++#define INTC_INTREQ11 0x12c ++# define INTC_INTREQ11_IREQUEST352_OFFSET 0 ++# define INTC_INTREQ11_IREQUEST352_SIZE 1 ++#define INTC_INTPR12 0x30 ++# define INTC_INTPR12_INTLEV_OFFSET 30 ++# define INTC_INTPR12_INTLEV_SIZE 2 ++# define INTC_INTPR12_OFFSET_OFFSET 0 ++# define INTC_INTPR12_OFFSET_SIZE 24 ++#define INTC_INTREQ12 0x130 ++# define INTC_INTREQ12_IREQUEST384_OFFSET 0 ++# define INTC_INTREQ12_IREQUEST384_SIZE 1 ++#define INTC_INTPR13 0x34 ++# define INTC_INTPR13_INTLEV_OFFSET 30 ++# define INTC_INTPR13_INTLEV_SIZE 2 ++# define INTC_INTPR13_OFFSET_OFFSET 0 ++# define INTC_INTPR13_OFFSET_SIZE 24 ++#define INTC_INTREQ13 0x134 ++# define INTC_INTREQ13_IREQUEST416_OFFSET 0 ++# define INTC_INTREQ13_IREQUEST416_SIZE 1 ++#define INTC_INTPR14 0x38 ++# define INTC_INTPR14_INTLEV_OFFSET 30 ++# define INTC_INTPR14_INTLEV_SIZE 2 ++# define INTC_INTPR14_OFFSET_OFFSET 0 ++# define INTC_INTPR14_OFFSET_SIZE 24 ++#define INTC_INTREQ14 0x138 ++# define INTC_INTREQ14_IREQUEST448_OFFSET 0 ++# define INTC_INTREQ14_IREQUEST448_SIZE 1 ++#define INTC_INTPR15 0x3c ++# define INTC_INTPR15_INTLEV_OFFSET 30 ++# define INTC_INTPR15_INTLEV_SIZE 2 ++# define INTC_INTPR15_OFFSET_OFFSET 0 ++# define INTC_INTPR15_OFFSET_SIZE 24 ++#define INTC_INTREQ15 0x13c ++# define INTC_INTREQ15_IREQUEST480_OFFSET 0 ++# define INTC_INTREQ15_IREQUEST480_SIZE 1 ++#define INTC_INTPR16 0x40 ++# define INTC_INTPR16_INTLEV_OFFSET 30 ++# define INTC_INTPR16_INTLEV_SIZE 2 ++# define INTC_INTPR16_OFFSET_OFFSET 0 ++# define INTC_INTPR16_OFFSET_SIZE 24 ++#define INTC_INTREQ16 0x140 ++# define INTC_INTREQ16_IREQUEST512_OFFSET 0 ++# define INTC_INTREQ16_IREQUEST512_SIZE 1 ++#define INTC_INTPR17 0x44 ++# define INTC_INTPR17_INTLEV_OFFSET 30 ++# define INTC_INTPR17_INTLEV_SIZE 2 ++# define INTC_INTPR17_OFFSET_OFFSET 0 ++# define INTC_INTPR17_OFFSET_SIZE 24 ++#define INTC_INTREQ17 0x144 ++# define INTC_INTREQ17_IREQUEST544_OFFSET 0 ++# define INTC_INTREQ17_IREQUEST544_SIZE 1 ++#define INTC_INTPR18 0x48 ++# define INTC_INTPR18_INTLEV_OFFSET 30 ++# define INTC_INTPR18_INTLEV_SIZE 2 ++# define INTC_INTPR18_OFFSET_OFFSET 0 ++# define INTC_INTPR18_OFFSET_SIZE 24 ++#define INTC_INTREQ18 0x148 ++# define INTC_INTREQ18_IREQUEST576_OFFSET 0 ++# define INTC_INTREQ18_IREQUEST576_SIZE 1 ++#define INTC_INTPR19 0x4c ++# define INTC_INTPR19_INTLEV_OFFSET 30 ++# define INTC_INTPR19_INTLEV_SIZE 2 ++# define INTC_INTPR19_OFFSET_OFFSET 0 ++# define INTC_INTPR19_OFFSET_SIZE 24 ++#define INTC_INTREQ19 0x14c ++# define INTC_INTREQ19_IREQUEST608_OFFSET 0 ++# define INTC_INTREQ19_IREQUEST608_SIZE 1 ++# define INTC_INTREQ19_IREQUEST609_OFFSET 1 ++# define INTC_INTREQ19_IREQUEST609_SIZE 1 ++# define INTC_INTREQ19_IREQUEST610_OFFSET 2 ++# define INTC_INTREQ19_IREQUEST610_SIZE 1 ++# define INTC_INTREQ19_IREQUEST611_OFFSET 3 ++# define INTC_INTREQ19_IREQUEST611_SIZE 1 ++#define INTC_INTPR20 0x50 ++# define INTC_INTPR20_INTLEV_OFFSET 30 ++# define INTC_INTPR20_INTLEV_SIZE 2 ++# define INTC_INTPR20_OFFSET_OFFSET 0 ++# define INTC_INTPR20_OFFSET_SIZE 24 ++#define INTC_INTREQ20 0x150 ++# define INTC_INTREQ20_IREQUEST640_OFFSET 0 ++# define INTC_INTREQ20_IREQUEST640_SIZE 1 ++#define INTC_INTPR21 0x54 ++# define INTC_INTPR21_INTLEV_OFFSET 30 ++# define INTC_INTPR21_INTLEV_SIZE 2 ++# define INTC_INTPR21_OFFSET_OFFSET 0 ++# define INTC_INTPR21_OFFSET_SIZE 24 ++#define INTC_INTREQ21 0x154 ++# define INTC_INTREQ21_IREQUEST672_OFFSET 0 ++# define INTC_INTREQ21_IREQUEST672_SIZE 1 ++#define INTC_INTPR22 0x58 ++# define INTC_INTPR22_INTLEV_OFFSET 30 ++# define INTC_INTPR22_INTLEV_SIZE 2 ++# define INTC_INTPR22_OFFSET_OFFSET 0 ++# define INTC_INTPR22_OFFSET_SIZE 24 ++#define INTC_INTREQ22 0x158 ++# define INTC_INTREQ22_IREQUEST704_OFFSET 0 ++# define INTC_INTREQ22_IREQUEST704_SIZE 1 ++# define INTC_INTREQ22_IREQUEST705_OFFSET 1 ++# define INTC_INTREQ22_IREQUEST705_SIZE 1 ++# define INTC_INTREQ22_IREQUEST706_OFFSET 2 ++# define INTC_INTREQ22_IREQUEST706_SIZE 1 ++#define INTC_INTPR23 0x5c ++# define INTC_INTPR23_INTLEV_OFFSET 30 ++# define INTC_INTPR23_INTLEV_SIZE 2 ++# define INTC_INTPR23_OFFSET_OFFSET 0 ++# define INTC_INTPR23_OFFSET_SIZE 24 ++#define INTC_INTREQ23 0x15c ++# define INTC_INTREQ23_IREQUEST736_OFFSET 0 ++# define INTC_INTREQ23_IREQUEST736_SIZE 1 ++# define INTC_INTREQ23_IREQUEST737_OFFSET 1 ++# define INTC_INTREQ23_IREQUEST737_SIZE 1 ++# define INTC_INTREQ23_IREQUEST738_OFFSET 2 ++# define INTC_INTREQ23_IREQUEST738_SIZE 1 ++#define INTC_INTPR24 0x60 ++# define INTC_INTPR24_INTLEV_OFFSET 30 ++# define INTC_INTPR24_INTLEV_SIZE 2 ++# define INTC_INTPR24_OFFSET_OFFSET 0 ++# define INTC_INTPR24_OFFSET_SIZE 24 ++#define INTC_INTREQ24 0x160 ++# define INTC_INTREQ24_IREQUEST768_OFFSET 0 ++# define INTC_INTREQ24_IREQUEST768_SIZE 1 ++#define INTC_INTPR25 0x64 ++# define INTC_INTPR25_INTLEV_OFFSET 30 ++# define INTC_INTPR25_INTLEV_SIZE 2 ++# define INTC_INTPR25_OFFSET_OFFSET 0 ++# define INTC_INTPR25_OFFSET_SIZE 24 ++#define INTC_INTREQ25 0x164 ++# define INTC_INTREQ25_IREQUEST800_OFFSET 0 ++# define INTC_INTREQ25_IREQUEST800_SIZE 1 ++#define INTC_INTPR26 0x68 ++# define INTC_INTPR26_INTLEV_OFFSET 30 ++# define INTC_INTPR26_INTLEV_SIZE 2 ++# define INTC_INTPR26_OFFSET_OFFSET 0 ++# define INTC_INTPR26_OFFSET_SIZE 24 ++#define INTC_INTREQ26 0x168 ++# define INTC_INTREQ26_IREQUEST832_OFFSET 0 ++# define INTC_INTREQ26_IREQUEST832_SIZE 1 ++#define INTC_INTPR27 0x6c ++# define INTC_INTPR27_INTLEV_OFFSET 30 ++# define INTC_INTPR27_INTLEV_SIZE 2 ++# define INTC_INTPR27_OFFSET_OFFSET 0 ++# define INTC_INTPR27_OFFSET_SIZE 24 ++#define INTC_INTREQ27 0x16c ++# define INTC_INTREQ27_IREQUEST864_OFFSET 0 ++# define INTC_INTREQ27_IREQUEST864_SIZE 1 ++#define INTC_INTPR28 0x70 ++# define INTC_INTPR28_INTLEV_OFFSET 30 ++# define INTC_INTPR28_INTLEV_SIZE 2 ++# define INTC_INTPR28_OFFSET_OFFSET 0 ++# define INTC_INTPR28_OFFSET_SIZE 24 ++#define INTC_INTREQ28 0x170 ++# define INTC_INTREQ28_IREQUEST896_OFFSET 0 ++# define INTC_INTREQ28_IREQUEST896_SIZE 1 ++#define INTC_INTPR29 0x74 ++# define INTC_INTPR29_INTLEV_OFFSET 30 ++# define INTC_INTPR29_INTLEV_SIZE 2 ++# define INTC_INTPR29_OFFSET_OFFSET 0 ++# define INTC_INTPR29_OFFSET_SIZE 24 ++#define INTC_INTREQ29 0x174 ++# define INTC_INTREQ29_IREQUEST928_OFFSET 0 ++# define INTC_INTREQ29_IREQUEST928_SIZE 1 ++#define INTC_INTPR30 0x78 ++# define INTC_INTPR30_INTLEV_OFFSET 30 ++# define INTC_INTPR30_INTLEV_SIZE 2 ++# define INTC_INTPR30_OFFSET_OFFSET 0 ++# define INTC_INTPR30_OFFSET_SIZE 24 ++#define INTC_INTREQ30 0x178 ++# define INTC_INTREQ30_IREQUEST960_OFFSET 0 ++# define INTC_INTREQ30_IREQUEST960_SIZE 1 ++#define INTC_INTPR31 0x7c ++# define INTC_INTPR31_INTLEV_OFFSET 30 ++# define INTC_INTPR31_INTLEV_SIZE 2 ++# define INTC_INTPR31_OFFSET_OFFSET 0 ++# define INTC_INTPR31_OFFSET_SIZE 24 ++#define INTC_INTREQ31 0x17c ++# define INTC_INTREQ31_IREQUEST992_OFFSET 0 ++# define INTC_INTREQ31_IREQUEST992_SIZE 1 ++#define INTC_INTPR32 0x80 ++# define INTC_INTPR32_INTLEV_OFFSET 30 ++# define INTC_INTPR32_INTLEV_SIZE 2 ++# define INTC_INTPR32_OFFSET_OFFSET 0 ++# define INTC_INTPR32_OFFSET_SIZE 24 ++#define INTC_INTREQ32 0x180 ++# define INTC_INTREQ32_IREQUEST1024_OFFSET 0 ++# define INTC_INTREQ32_IREQUEST1024_SIZE 1 ++#define INTC_INTCAUSE0 0x20c ++# define INTC_INTCAUSE0_CAUSEGRP_OFFSET 0 ++# define INTC_INTCAUSE0_CAUSEGRP_SIZE 6 ++#define INTC_INTCAUSE1 0x208 ++# define INTC_INTCAUSE1_CAUSEGRP_OFFSET 0 ++# define INTC_INTCAUSE1_CAUSEGRP_SIZE 6 ++#define INTC_INTCAUSE2 0x204 ++# define INTC_INTCAUSE2_CAUSEGRP_OFFSET 0 ++# define INTC_INTCAUSE2_CAUSEGRP_SIZE 6 ++#define INTC_INTCAUSE3 0x200 ++# define INTC_INTCAUSE3_CAUSEGRP_OFFSET 0 ++# define INTC_INTCAUSE3_CAUSEGRP_SIZE 6 ++ ++#define INTC_BIT(name) (1 << INTC_##name##_OFFSET) ++#define INTC_MKBF(name, value) (((value) & ((1 << INTC_##name##_SIZE) - 1)) << INTC_##name##_OFFSET) ++#define INTC_GETBF(name, value) (((value) >> INTC_##name##_OFFSET) & ((1 << INTC_##name##_SIZE) - 1)) ++ ++#define intc_readl(port,reg) \ ++ __raw_readl((port)->regs + INTC_##reg) ++#define intc_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + INTC_##reg) ++ ++#endif /* __ASM_AVR32_PERIHP_INTC_H__ */ +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,118 @@ ++/* ++ * Atmel PIO2 Port Multiplexer support ++ * ++ * Copyright (C) 2004-2006 Atmel 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 "pio.h" ++ ++#define MAX_NR_PIO_DEVICES 8 ++ ++struct pio_device { ++ void __iomem *regs; ++ const struct platform_device *pdev; ++ struct clk *clk; ++ u32 alloc_mask; ++ char name[32]; ++}; ++ ++static struct pio_device pio_dev[MAX_NR_PIO_DEVICES]; ++ ++void portmux_set_func(unsigned int portmux_id, unsigned int pin_id, ++ unsigned int function_id) ++{ ++ struct pio_device *pio; ++ u32 mask = 1 << pin_id; ++ ++ BUG_ON(portmux_id >= MAX_NR_PIO_DEVICES); ++ ++ pio = &pio_dev[portmux_id]; ++ ++ if (function_id) ++ pio_writel(pio, BSR, mask); ++ else ++ pio_writel(pio, ASR, mask); ++ pio_writel(pio, PDR, mask); ++} ++ ++static int __init pio_probe(struct platform_device *pdev) ++{ ++ struct pio_device *pio = NULL; ++ ++ BUG_ON(pdev->id >= MAX_NR_PIO_DEVICES); ++ pio = &pio_dev[pdev->id]; ++ BUG_ON(!pio->regs); ++ ++ /* TODO: Interrupts */ ++ ++ platform_set_drvdata(pdev, pio); ++ ++ printk(KERN_INFO "%s: Atmel Port Multiplexer at 0x%p (irq %d)\n", ++ pio->name, pio->regs, platform_get_irq(pdev, 0)); ++ ++ return 0; ++} ++ ++static struct platform_driver pio_driver = { ++ .probe = pio_probe, ++ .driver = { ++ .name = "pio", ++ }, ++}; ++ ++static int __init pio_init(void) ++{ ++ return platform_driver_register(&pio_driver); ++} ++subsys_initcall(pio_init); ++ ++void __init at32_init_pio(struct platform_device *pdev) ++{ ++ struct resource *regs; ++ struct pio_device *pio; ++ ++ if (pdev->id > MAX_NR_PIO_DEVICES) { ++ dev_err(&pdev->dev, "only %d PIO devices supported\n", ++ MAX_NR_PIO_DEVICES); ++ return; ++ } ++ ++ pio = &pio_dev[pdev->id]; ++ snprintf(pio->name, sizeof(pio->name), "pio%d", pdev->id); ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) { ++ dev_err(&pdev->dev, "no mmio resource defined\n"); ++ return; ++ } ++ ++ pio->clk = clk_get(&pdev->dev, "mck"); ++ if (IS_ERR(pio->clk)) ++ /* ++ * This is a fatal error, but if we continue we might ++ * be so lucky that we manage to initialize the ++ * console and display this message... ++ */ ++ dev_err(&pdev->dev, "no mck clock defined\n"); ++ else ++ clk_enable(pio->clk); ++ ++ pio->pdev = pdev; ++ pio->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ ++ pio_writel(pio, ODR, ~0UL); ++ pio_writel(pio, PER, ~0UL); ++} +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,180 @@ ++/* ++ * Atmel PIO2 Port Multiplexer support ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ARCH_AVR32_AT32AP_PIO_H__ ++#define __ARCH_AVR32_AT32AP_PIO_H__ ++ ++/* PIO register offsets */ ++#define PIO_PER 0x0000 ++#define PIO_PDR 0x0004 ++#define PIO_PSR 0x0008 ++#define PIO_OER 0x0010 ++#define PIO_ODR 0x0014 ++#define PIO_OSR 0x0018 ++#define PIO_IFER 0x0020 ++#define PIO_IFDR 0x0024 ++#define PIO_ISFR 0x0028 ++#define PIO_SODR 0x0030 ++#define PIO_CODR 0x0034 ++#define PIO_ODSR 0x0038 ++#define PIO_PDSR 0x003c ++#define PIO_IER 0x0040 ++#define PIO_IDR 0x0044 ++#define PIO_IMR 0x0048 ++#define PIO_ISR 0x004c ++#define PIO_MDER 0x0050 ++#define PIO_MDDR 0x0054 ++#define PIO_MDSR 0x0058 ++#define PIO_PUDR 0x0060 ++#define PIO_PUER 0x0064 ++#define PIO_PUSR 0x0068 ++#define PIO_ASR 0x0070 ++#define PIO_BSR 0x0074 ++#define PIO_ABSR 0x0078 ++#define PIO_OWER 0x00a0 ++#define PIO_OWDR 0x00a4 ++#define PIO_OWSR 0x00a8 ++ ++/* Bitfields in PER */ ++ ++/* Bitfields in PDR */ ++ ++/* Bitfields in PSR */ ++ ++/* Bitfields in OER */ ++ ++/* Bitfields in ODR */ ++ ++/* Bitfields in OSR */ ++ ++/* Bitfields in IFER */ ++ ++/* Bitfields in IFDR */ ++ ++/* Bitfields in ISFR */ ++ ++/* Bitfields in SODR */ ++ ++/* Bitfields in CODR */ ++ ++/* Bitfields in ODSR */ ++ ++/* Bitfields in PDSR */ ++ ++/* Bitfields in IER */ ++ ++/* Bitfields in IDR */ ++ ++/* Bitfields in IMR */ ++ ++/* Bitfields in ISR */ ++ ++/* Bitfields in MDER */ ++ ++/* Bitfields in MDDR */ ++ ++/* Bitfields in MDSR */ ++ ++/* Bitfields in PUDR */ ++ ++/* Bitfields in PUER */ ++ ++/* Bitfields in PUSR */ ++ ++/* Bitfields in ASR */ ++ ++/* Bitfields in BSR */ ++ ++/* Bitfields in ABSR */ ++#define PIO_P0_OFFSET 0 ++#define PIO_P0_SIZE 1 ++#define PIO_P1_OFFSET 1 ++#define PIO_P1_SIZE 1 ++#define PIO_P2_OFFSET 2 ++#define PIO_P2_SIZE 1 ++#define PIO_P3_OFFSET 3 ++#define PIO_P3_SIZE 1 ++#define PIO_P4_OFFSET 4 ++#define PIO_P4_SIZE 1 ++#define PIO_P5_OFFSET 5 ++#define PIO_P5_SIZE 1 ++#define PIO_P6_OFFSET 6 ++#define PIO_P6_SIZE 1 ++#define PIO_P7_OFFSET 7 ++#define PIO_P7_SIZE 1 ++#define PIO_P8_OFFSET 8 ++#define PIO_P8_SIZE 1 ++#define PIO_P9_OFFSET 9 ++#define PIO_P9_SIZE 1 ++#define PIO_P10_OFFSET 10 ++#define PIO_P10_SIZE 1 ++#define PIO_P11_OFFSET 11 ++#define PIO_P11_SIZE 1 ++#define PIO_P12_OFFSET 12 ++#define PIO_P12_SIZE 1 ++#define PIO_P13_OFFSET 13 ++#define PIO_P13_SIZE 1 ++#define PIO_P14_OFFSET 14 ++#define PIO_P14_SIZE 1 ++#define PIO_P15_OFFSET 15 ++#define PIO_P15_SIZE 1 ++#define PIO_P16_OFFSET 16 ++#define PIO_P16_SIZE 1 ++#define PIO_P17_OFFSET 17 ++#define PIO_P17_SIZE 1 ++#define PIO_P18_OFFSET 18 ++#define PIO_P18_SIZE 1 ++#define PIO_P19_OFFSET 19 ++#define PIO_P19_SIZE 1 ++#define PIO_P20_OFFSET 20 ++#define PIO_P20_SIZE 1 ++#define PIO_P21_OFFSET 21 ++#define PIO_P21_SIZE 1 ++#define PIO_P22_OFFSET 22 ++#define PIO_P22_SIZE 1 ++#define PIO_P23_OFFSET 23 ++#define PIO_P23_SIZE 1 ++#define PIO_P24_OFFSET 24 ++#define PIO_P24_SIZE 1 ++#define PIO_P25_OFFSET 25 ++#define PIO_P25_SIZE 1 ++#define PIO_P26_OFFSET 26 ++#define PIO_P26_SIZE 1 ++#define PIO_P27_OFFSET 27 ++#define PIO_P27_SIZE 1 ++#define PIO_P28_OFFSET 28 ++#define PIO_P28_SIZE 1 ++#define PIO_P29_OFFSET 29 ++#define PIO_P29_SIZE 1 ++#define PIO_P30_OFFSET 30 ++#define PIO_P30_SIZE 1 ++#define PIO_P31_OFFSET 31 ++#define PIO_P31_SIZE 1 ++ ++/* Bitfields in OWER */ ++ ++/* Bitfields in OWDR */ ++ ++/* Bitfields in OWSR */ ++ ++/* Bit manipulation macros */ ++#define PIO_BIT(name) (1 << PIO_##name##_OFFSET) ++#define PIO_BF(name,value) (((value) & ((1 << PIO_##name##_SIZE) - 1)) << PIO_##name##_OFFSET) ++#define PIO_BFEXT(name,value) (((value) >> PIO_##name##_OFFSET) & ((1 << PIO_##name##_SIZE) - 1)) ++#define PIO_BFINS(name,value,old) (((old) & ~(((1 << PIO_##name##_SIZE) - 1) << PIO_##name##_OFFSET)) | PIO_BF(name,value)) ++ ++/* Register access macros */ ++#define pio_readl(port,reg) \ ++ __raw_readl((port)->regs + PIO_##reg) ++#define pio_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + PIO_##reg) ++ ++void at32_init_pio(struct platform_device *pdev); ++ ++#endif /* __ARCH_AVR32_AT32AP_PIO_H__ */ +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/sm.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/sm.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,242 @@ ++/* ++ * Register definitions for SM ++ * ++ * System Manager ++ */ ++#ifndef __ASM_AVR32_SM_H__ ++#define __ASM_AVR32_SM_H__ ++ ++/* SM register offsets */ ++#define SM_PM_MCCTRL 0x0000 ++#define SM_PM_CKSEL 0x0004 ++#define SM_PM_CPU_MASK 0x0008 ++#define SM_PM_HSB_MASK 0x000c ++#define SM_PM_PBA_MASK 0x0010 ++#define SM_PM_PBB_MASK 0x0014 ++#define SM_PM_PLL0 0x0020 ++#define SM_PM_PLL1 0x0024 ++#define SM_PM_VCTRL 0x0030 ++#define SM_PM_VMREF 0x0034 ++#define SM_PM_VMV 0x0038 ++#define SM_PM_IER 0x0040 ++#define SM_PM_IDR 0x0044 ++#define SM_PM_IMR 0x0048 ++#define SM_PM_ISR 0x004c ++#define SM_PM_ICR 0x0050 ++#define SM_PM_GCCTRL 0x0060 ++#define SM_RTC_CTRL 0x0080 ++#define SM_RTC_VAL 0x0084 ++#define SM_RTC_TOP 0x0088 ++#define SM_RTC_IER 0x0090 ++#define SM_RTC_IDR 0x0094 ++#define SM_RTC_IMR 0x0098 ++#define SM_RTC_ISR 0x009c ++#define SM_RTC_ICR 0x00a0 ++#define SM_WDT_CTRL 0x00b0 ++#define SM_WDT_CLR 0x00b4 ++#define SM_WDT_EXT 0x00b8 ++#define SM_RC_RCAUSE 0x00c0 ++#define SM_EIM_IER 0x0100 ++#define SM_EIM_IDR 0x0104 ++#define SM_EIM_IMR 0x0108 ++#define SM_EIM_ISR 0x010c ++#define SM_EIM_ICR 0x0110 ++#define SM_EIM_MODE 0x0114 ++#define SM_EIM_EDGE 0x0118 ++#define SM_EIM_LEVEL 0x011c ++#define SM_EIM_TEST 0x0120 ++#define SM_EIM_NMIC 0x0124 ++ ++/* Bitfields in PM_MCCTRL */ ++ ++/* Bitfields in PM_CKSEL */ ++#define SM_CPUSEL_OFFSET 0 ++#define SM_CPUSEL_SIZE 3 ++#define SM_CPUDIV_OFFSET 7 ++#define SM_CPUDIV_SIZE 1 ++#define SM_HSBSEL_OFFSET 8 ++#define SM_HSBSEL_SIZE 3 ++#define SM_HSBDIV_OFFSET 15 ++#define SM_HSBDIV_SIZE 1 ++#define SM_PBASEL_OFFSET 16 ++#define SM_PBASEL_SIZE 3 ++#define SM_PBADIV_OFFSET 23 ++#define SM_PBADIV_SIZE 1 ++#define SM_PBBSEL_OFFSET 24 ++#define SM_PBBSEL_SIZE 3 ++#define SM_PBBDIV_OFFSET 31 ++#define SM_PBBDIV_SIZE 1 ++ ++/* Bitfields in PM_CPU_MASK */ ++ ++/* Bitfields in PM_HSB_MASK */ ++ ++/* Bitfields in PM_PBA_MASK */ ++ ++/* Bitfields in PM_PBB_MASK */ ++ ++/* Bitfields in PM_PLL0 */ ++#define SM_PLLEN_OFFSET 0 ++#define SM_PLLEN_SIZE 1 ++#define SM_PLLOSC_OFFSET 1 ++#define SM_PLLOSC_SIZE 1 ++#define SM_PLLOPT_OFFSET 2 ++#define SM_PLLOPT_SIZE 3 ++#define SM_PLLDIV_OFFSET 8 ++#define SM_PLLDIV_SIZE 8 ++#define SM_PLLMUL_OFFSET 16 ++#define SM_PLLMUL_SIZE 8 ++#define SM_PLLCOUNT_OFFSET 24 ++#define SM_PLLCOUNT_SIZE 6 ++#define SM_PLLTEST_OFFSET 31 ++#define SM_PLLTEST_SIZE 1 ++ ++/* Bitfields in PM_PLL1 */ ++ ++/* Bitfields in PM_VCTRL */ ++#define SM_VAUTO_OFFSET 0 ++#define SM_VAUTO_SIZE 1 ++#define SM_PM_VCTRL_VAL_OFFSET 8 ++#define SM_PM_VCTRL_VAL_SIZE 7 ++ ++/* Bitfields in PM_VMREF */ ++#define SM_REFSEL_OFFSET 0 ++#define SM_REFSEL_SIZE 4 ++ ++/* Bitfields in PM_VMV */ ++#define SM_PM_VMV_VAL_OFFSET 0 ++#define SM_PM_VMV_VAL_SIZE 8 ++ ++/* Bitfields in PM_IER */ ++ ++/* Bitfields in PM_IDR */ ++ ++/* Bitfields in PM_IMR */ ++ ++/* Bitfields in PM_ISR */ ++ ++/* Bitfields in PM_ICR */ ++#define SM_LOCK0_OFFSET 0 ++#define SM_LOCK0_SIZE 1 ++#define SM_LOCK1_OFFSET 1 ++#define SM_LOCK1_SIZE 1 ++#define SM_WAKE_OFFSET 2 ++#define SM_WAKE_SIZE 1 ++#define SM_VOK_OFFSET 3 ++#define SM_VOK_SIZE 1 ++#define SM_VMRDY_OFFSET 4 ++#define SM_VMRDY_SIZE 1 ++#define SM_CKRDY_OFFSET 5 ++#define SM_CKRDY_SIZE 1 ++ ++/* Bitfields in PM_GCCTRL */ ++#define SM_OSCSEL_OFFSET 0 ++#define SM_OSCSEL_SIZE 1 ++#define SM_PLLSEL_OFFSET 1 ++#define SM_PLLSEL_SIZE 1 ++#define SM_CEN_OFFSET 2 ++#define SM_CEN_SIZE 1 ++#define SM_CPC_OFFSET 3 ++#define SM_CPC_SIZE 1 ++#define SM_DIVEN_OFFSET 4 ++#define SM_DIVEN_SIZE 1 ++#define SM_DIV_OFFSET 8 ++#define SM_DIV_SIZE 8 ++ ++/* Bitfields in RTC_CTRL */ ++#define SM_PCLR_OFFSET 1 ++#define SM_PCLR_SIZE 1 ++#define SM_TOPEN_OFFSET 2 ++#define SM_TOPEN_SIZE 1 ++#define SM_CLKEN_OFFSET 3 ++#define SM_CLKEN_SIZE 1 ++#define SM_PSEL_OFFSET 8 ++#define SM_PSEL_SIZE 16 ++ ++/* Bitfields in RTC_VAL */ ++#define SM_RTC_VAL_VAL_OFFSET 0 ++#define SM_RTC_VAL_VAL_SIZE 31 ++ ++/* Bitfields in RTC_TOP */ ++#define SM_RTC_TOP_VAL_OFFSET 0 ++#define SM_RTC_TOP_VAL_SIZE 32 ++ ++/* Bitfields in RTC_IER */ ++ ++/* Bitfields in RTC_IDR */ ++ ++/* Bitfields in RTC_IMR */ ++ ++/* Bitfields in RTC_ISR */ ++ ++/* Bitfields in RTC_ICR */ ++#define SM_TOPI_OFFSET 0 ++#define SM_TOPI_SIZE 1 ++ ++/* Bitfields in WDT_CTRL */ ++#define SM_KEY_OFFSET 24 ++#define SM_KEY_SIZE 8 ++ ++/* Bitfields in WDT_CLR */ ++ ++/* Bitfields in WDT_EXT */ ++ ++/* Bitfields in RC_RCAUSE */ ++#define SM_POR_OFFSET 0 ++#define SM_POR_SIZE 1 ++#define SM_BOD_OFFSET 1 ++#define SM_BOD_SIZE 1 ++#define SM_EXT_OFFSET 2 ++#define SM_EXT_SIZE 1 ++#define SM_WDT_OFFSET 3 ++#define SM_WDT_SIZE 1 ++#define SM_NTAE_OFFSET 4 ++#define SM_NTAE_SIZE 1 ++#define SM_SERP_OFFSET 5 ++#define SM_SERP_SIZE 1 ++ ++/* Bitfields in EIM_IER */ ++ ++/* Bitfields in EIM_IDR */ ++ ++/* Bitfields in EIM_IMR */ ++ ++/* Bitfields in EIM_ISR */ ++ ++/* Bitfields in EIM_ICR */ ++ ++/* Bitfields in EIM_MODE */ ++ ++/* Bitfields in EIM_EDGE */ ++#define SM_INT0_OFFSET 0 ++#define SM_INT0_SIZE 1 ++#define SM_INT1_OFFSET 1 ++#define SM_INT1_SIZE 1 ++#define SM_INT2_OFFSET 2 ++#define SM_INT2_SIZE 1 ++#define SM_INT3_OFFSET 3 ++#define SM_INT3_SIZE 1 ++ ++/* Bitfields in EIM_LEVEL */ ++ ++/* Bitfields in EIM_TEST */ ++#define SM_TESTEN_OFFSET 31 ++#define SM_TESTEN_SIZE 1 ++ ++/* Bitfields in EIM_NMIC */ ++#define SM_EN_OFFSET 0 ++#define SM_EN_SIZE 1 ++ ++/* Bit manipulation macros */ ++#define SM_BIT(name) (1 << SM_##name##_OFFSET) ++#define SM_BF(name,value) (((value) & ((1 << SM_##name##_SIZE) - 1)) << SM_##name##_OFFSET) ++#define SM_BFEXT(name,value) (((value) >> SM_##name##_OFFSET) & ((1 << SM_##name##_SIZE) - 1)) ++#define SM_BFINS(name,value,old) (((old) & ~(((1 << SM_##name##_SIZE) - 1) << SM_##name##_OFFSET)) | SM_BF(name,value)) ++ ++/* Register access macros */ ++#define sm_readl(port,reg) \ ++ __raw_readl((port)->regs + SM_##reg) ++#define sm_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + SM_##reg) ++ ++#endif /* __ASM_AVR32_SM_H__ */ +Index: linux-2.6.18-avr32/arch/avr32/mm/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mm/Makefile 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++# ++# Makefile for the Linux/AVR32 kernel. ++# ++ ++obj-y += init.o clear_page.o copy_page.o dma-coherent.o ++obj-y += ioremap.o cache.o fault.o tlb.o +Index: linux-2.6.18-avr32/arch/avr32/mm/cache.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mm/cache.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,150 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++/* ++ * If you attempt to flush anything more than this, you need superuser ++ * privileges. The value is completely arbitrary. ++ */ ++#define CACHEFLUSH_MAX_LEN 1024 ++ ++void invalidate_dcache_region(void *start, size_t size) ++{ ++ unsigned long v, begin, end, linesz; ++ ++ linesz = boot_cpu_data.dcache.linesz; ++ ++ //printk("invalidate dcache: %p + %u\n", start, size); ++ ++ /* You asked for it, you got it */ ++ begin = (unsigned long)start & ~(linesz - 1); ++ end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1); ++ ++ for (v = begin; v < end; v += linesz) ++ invalidate_dcache_line((void *)v); ++} ++ ++void clean_dcache_region(void *start, size_t size) ++{ ++ unsigned long v, begin, end, linesz; ++ ++ linesz = boot_cpu_data.dcache.linesz; ++ begin = (unsigned long)start & ~(linesz - 1); ++ end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1); ++ ++ for (v = begin; v < end; v += linesz) ++ clean_dcache_line((void *)v); ++ flush_write_buffer(); ++} ++ ++void flush_dcache_region(void *start, size_t size) ++{ ++ unsigned long v, begin, end, linesz; ++ ++ linesz = boot_cpu_data.dcache.linesz; ++ begin = (unsigned long)start & ~(linesz - 1); ++ end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1); ++ ++ for (v = begin; v < end; v += linesz) ++ flush_dcache_line((void *)v); ++ flush_write_buffer(); ++} ++ ++void invalidate_icache_region(void *start, size_t size) ++{ ++ unsigned long v, begin, end, linesz; ++ ++ linesz = boot_cpu_data.icache.linesz; ++ begin = (unsigned long)start & ~(linesz - 1); ++ end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1); ++ ++ for (v = begin; v < end; v += linesz) ++ invalidate_icache_line((void *)v); ++} ++ ++static inline void __flush_icache_range(unsigned long start, unsigned long end) ++{ ++ unsigned long v, linesz; ++ ++ linesz = boot_cpu_data.dcache.linesz; ++ for (v = start; v < end; v += linesz) { ++ clean_dcache_line((void *)v); ++ invalidate_icache_line((void *)v); ++ } ++ ++ flush_write_buffer(); ++} ++ ++/* ++ * This one is called after a module has been loaded. ++ */ ++void flush_icache_range(unsigned long start, unsigned long end) ++{ ++ unsigned long linesz; ++ ++ linesz = boot_cpu_data.dcache.linesz; ++ __flush_icache_range(start & ~(linesz - 1), ++ (end + linesz - 1) & ~(linesz - 1)); ++} ++ ++/* ++ * This one is called from do_no_page(), do_swap_page() and install_page(). ++ */ ++void flush_icache_page(struct vm_area_struct *vma, struct page *page) ++{ ++ if (vma->vm_flags & VM_EXEC) { ++ void *v = kmap(page); ++ __flush_icache_range((unsigned long)v, (unsigned long)v + PAGE_SIZE); ++ kunmap(v); ++ } ++} ++ ++/* ++ * This one is used by copy_to_user_page() ++ */ ++void flush_icache_user_range(struct vm_area_struct *vma, struct page *page, ++ unsigned long addr, int len) ++{ ++ if (vma->vm_flags & VM_EXEC) ++ flush_icache_range(addr, addr + len); ++} ++ ++asmlinkage int sys_cacheflush(int operation, void __user *addr, size_t len) ++{ ++ int ret; ++ ++ if (len > CACHEFLUSH_MAX_LEN) { ++ ret = -EPERM; ++ if (!capable(CAP_SYS_ADMIN)) ++ goto out; ++ } ++ ++ ret = -EFAULT; ++ if (!access_ok(VERIFY_WRITE, addr, len)) ++ goto out; ++ ++ switch (operation) { ++ case CACHE_IFLUSH: ++ flush_icache_range((unsigned long)addr, ++ (unsigned long)addr + len); ++ ret = 0; ++ break; ++ default: ++ ret = -EINVAL; ++ } ++ ++out: ++ return ret; ++} +Index: linux-2.6.18-avr32/arch/avr32/mm/clear_page.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mm/clear_page.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,25 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++/* ++ * clear_page ++ * r12: P1 address (to) ++ */ ++ .text ++ .global clear_page ++clear_page: ++ sub r9, r12, -PAGE_SIZE ++ mov r10, 0 ++ mov r11, 0 ++0: st.d r12++, r10 ++ cp r12, r9 ++ brne 0b ++ mov pc, lr +Index: linux-2.6.18-avr32/arch/avr32/mm/copy_page.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mm/copy_page.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,28 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++/* ++ * copy_page ++ * ++ * r12 to (P1 address) ++ * r11 from (P1 address) ++ * r8-r10 scratch ++ */ ++ .text ++ .global copy_page ++copy_page: ++ sub r10, r11, -(1 << PAGE_SHIFT) ++ /* pref r11[0] */ ++1: /* pref r11[8] */ ++ ld.d r8, r11++ ++ st.d r12++, r8 ++ cp r11, r10 ++ brlo 1b ++ mov pc, lr +Index: linux-2.6.18-avr32/arch/avr32/mm/dma-coherent.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mm/dma-coherent.c 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,139 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++void dma_cache_sync(void *vaddr, size_t size, int direction) ++{ ++ /* ++ * No need to sync an uncached area ++ */ ++ if (PXSEG(vaddr) == P2SEG) ++ return; ++ ++ switch (direction) { ++ case DMA_FROM_DEVICE: /* invalidate only */ ++ dma_cache_inv(vaddr, size); ++ break; ++ case DMA_TO_DEVICE: /* writeback only */ ++ dma_cache_wback(vaddr, size); ++ break; ++ case DMA_BIDIRECTIONAL: /* writeback and invalidate */ ++ dma_cache_wback_inv(vaddr, size); ++ break; ++ default: ++ BUG(); ++ } ++} ++EXPORT_SYMBOL(dma_cache_sync); ++ ++static struct page *__dma_alloc(struct device *dev, size_t size, ++ dma_addr_t *handle, gfp_t gfp) ++{ ++ struct page *page, *free, *end; ++ int order; ++ ++ size = PAGE_ALIGN(size); ++ order = get_order(size); ++ ++ page = alloc_pages(gfp, order); ++ if (!page) ++ return NULL; ++ split_page(page, order); ++ ++ /* ++ * When accessing physical memory with valid cache data, we ++ * get a cache hit even if the virtual memory region is marked ++ * as uncached. ++ * ++ * Since the memory is newly allocated, there is no point in ++ * doing a writeback. If the previous owner cares, he should ++ * have flushed the cache before releasing the memory. ++ */ ++ invalidate_dcache_region(phys_to_virt(page_to_phys(page)), size); ++ ++ *handle = page_to_bus(page); ++ free = page + (size >> PAGE_SHIFT); ++ end = page + (1 << order); ++ ++ /* ++ * Free any unused pages ++ */ ++ while (free < end) { ++ __free_page(free); ++ free++; ++ } ++ ++ return page; ++} ++ ++static void __dma_free(struct device *dev, size_t size, ++ struct page *page, dma_addr_t handle) ++{ ++ struct page *end = page + (PAGE_ALIGN(size) >> PAGE_SHIFT); ++ ++ while (page < end) ++ __free_page(page++); ++} ++ ++void *dma_alloc_coherent(struct device *dev, size_t size, ++ dma_addr_t *handle, gfp_t gfp) ++{ ++ struct page *page; ++ void *ret = NULL; ++ ++ page = __dma_alloc(dev, size, handle, gfp); ++ if (page) ++ ret = phys_to_uncached(page_to_phys(page)); ++ ++ return ret; ++} ++EXPORT_SYMBOL(dma_alloc_coherent); ++ ++void dma_free_coherent(struct device *dev, size_t size, ++ void *cpu_addr, dma_addr_t handle) ++{ ++ void *addr = phys_to_cached(uncached_to_phys(cpu_addr)); ++ struct page *page; ++ ++ pr_debug("dma_free_coherent addr %p (phys %08lx) size %u\n", ++ cpu_addr, (unsigned long)handle, (unsigned)size); ++ BUG_ON(!virt_addr_valid(addr)); ++ page = virt_to_page(addr); ++ __dma_free(dev, size, page, handle); ++} ++EXPORT_SYMBOL(dma_free_coherent); ++ ++#if 0 ++void *dma_alloc_writecombine(struct device *dev, size_t size, ++ dma_addr_t *handle, gfp_t gfp) ++{ ++ struct page *page; ++ ++ page = __dma_alloc(dev, size, handle, gfp); ++ ++ /* Now, map the page into P3 with write-combining turned on */ ++ return __ioremap(page_to_phys(page), size, _PAGE_BUFFER); ++} ++EXPORT_SYMBOL(dma_alloc_writecombine); ++ ++void dma_free_writecombine(struct device *dev, size_t size, ++ void *cpu_addr, dma_addr_t handle) ++{ ++ struct page *page; ++ ++ iounmap(cpu_addr); ++ ++ page = bus_to_page(handle); ++ __dma_free(dev, size, page, handle); ++} ++EXPORT_SYMBOL(dma_free_writecombine); ++#endif +Index: linux-2.6.18-avr32/arch/avr32/mm/fault.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mm/fault.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,315 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * Based on linux/arch/sh/mm/fault.c: ++ * Copyright (C) 1999 Niibe Yutaka ++ * ++ * 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 ++ ++#ifdef DEBUG ++static void dump_code(unsigned long pc) ++{ ++ char *p = (char *)pc; ++ char val; ++ int i; ++ ++ ++ printk(KERN_DEBUG "Code:"); ++ for (i = 0; i < 16; i++) { ++ if (__get_user(val, p + i)) ++ break; ++ printk(" %02x", val); ++ } ++ printk("\n"); ++} ++#endif ++ ++#ifdef CONFIG_KPROBES ++ATOMIC_NOTIFIER_HEAD(notify_page_fault_chain); ++ ++/* Hook to register for page fault notifications */ ++int register_page_fault_notifier(struct notifier_block *nb) ++{ ++ return atomic_notifier_chain_register(¬ify_page_fault_chain, nb); ++} ++ ++int unregister_page_fault_notifier(struct notifier_block *nb) ++{ ++ return atomic_notifier_chain_unregister(¬ify_page_fault_chain, nb); ++} ++ ++static inline int notify_page_fault(enum die_val val, struct pt_regs *regs, ++ int trap, int sig) ++{ ++ struct die_args args = { ++ .regs = regs, ++ .trapnr = trap, ++ }; ++ return atomic_notifier_call_chain(¬ify_page_fault_chain, val, &args); ++} ++#else ++static inline int notify_page_fault(enum die_val val, struct pt_regs *regs, ++ int trap, int sig) ++{ ++ return NOTIFY_DONE; ++} ++#endif ++ ++/* ++ * This routine handles page faults. It determines the address and the ++ * problem, and then passes it off to one of the appropriate routines. ++ * ++ * ecr is the Exception Cause Register. Possible values are: ++ * 5: Page not found (instruction access) ++ * 6: Protection fault (instruction access) ++ * 12: Page not found (read access) ++ * 13: Page not found (write access) ++ * 14: Protection fault (read access) ++ * 15: Protection fault (write access) ++ */ ++asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs) ++{ ++ struct task_struct *tsk; ++ struct mm_struct *mm; ++ struct vm_area_struct *vma; ++ const struct exception_table_entry *fixup; ++ unsigned long address; ++ unsigned long page; ++ int writeaccess = 0; ++ ++ if (notify_page_fault(DIE_PAGE_FAULT, regs, ++ ecr, SIGSEGV) == NOTIFY_STOP) ++ return; ++ ++ address = sysreg_read(TLBEAR); ++ ++ tsk = current; ++ mm = tsk->mm; ++ ++ /* ++ * If we're in an interrupt or have no user context, we must ++ * not take the fault... ++ */ ++ if (in_atomic() || !mm || regs->sr & SYSREG_BIT(GM)) ++ goto no_context; ++ ++ local_irq_enable(); ++ ++ down_read(&mm->mmap_sem); ++ ++ vma = find_vma(mm, address); ++ if (!vma) ++ goto bad_area; ++ if (vma->vm_start <= address) ++ goto good_area; ++ if (!(vma->vm_flags & VM_GROWSDOWN)) ++ goto bad_area; ++ if (expand_stack(vma, address)) ++ goto bad_area; ++ ++ /* ++ * Ok, we have a good vm_area for this memory access, so we ++ * can handle it... ++ */ ++good_area: ++ //pr_debug("good area: vm_flags = 0x%lx\n", vma->vm_flags); ++ switch (ecr) { ++ case ECR_PROTECTION_X: ++ case ECR_TLB_MISS_X: ++ if (!(vma->vm_flags & VM_EXEC)) ++ goto bad_area; ++ break; ++ case ECR_PROTECTION_R: ++ case ECR_TLB_MISS_R: ++ if (!(vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC))) ++ goto bad_area; ++ break; ++ case ECR_PROTECTION_W: ++ case ECR_TLB_MISS_W: ++ if (!(vma->vm_flags & VM_WRITE)) ++ goto bad_area; ++ writeaccess = 1; ++ break; ++ default: ++ panic("Unhandled case %lu in do_page_fault!", ecr); ++ } ++ ++ /* ++ * If for any reason at all we couldn't handle the fault, make ++ * sure we exit gracefully rather than endlessly redo the ++ * fault. ++ */ ++survive: ++ switch (handle_mm_fault(mm, vma, address, writeaccess)) { ++ case VM_FAULT_MINOR: ++ tsk->min_flt++; ++ break; ++ case VM_FAULT_MAJOR: ++ tsk->maj_flt++; ++ break; ++ case VM_FAULT_SIGBUS: ++ goto do_sigbus; ++ case VM_FAULT_OOM: ++ goto out_of_memory; ++ default: ++ BUG(); ++ } ++ ++ up_read(&mm->mmap_sem); ++ return; ++ ++ /* ++ * Something tried to access memory that isn't in our memory ++ * map. Fix it, but check if it's kernel or user first... ++ */ ++bad_area: ++ pr_debug("Bad area [%s:%u]: addr %08lx, ecr %lu\n", ++ tsk->comm, tsk->pid, address, ecr); ++ ++ up_read(&mm->mmap_sem); ++ ++ if (user_mode(regs)) { ++ /* Hmm...we have to pass address and ecr somehow... */ ++ /* tsk->thread.address = address; ++ tsk->thread.error_code = ecr; */ ++#ifdef DEBUG ++ show_regs(regs); ++ dump_code(regs->pc); ++ ++ page = sysreg_read(PTBR); ++ printk("ptbr = %08lx", page); ++ if (page) { ++ page = ((unsigned long *)page)[address >> 22]; ++ printk(" pgd = %08lx", page); ++ if (page & _PAGE_PRESENT) { ++ page &= PAGE_MASK; ++ address &= 0x003ff000; ++ page = ((unsigned long *)__va(page))[address >> PAGE_SHIFT]; ++ printk(" pte = %08lx\n", page); ++ } ++ } ++#endif ++ pr_debug("Sending SIGSEGV to PID %d...\n", ++ tsk->pid); ++ force_sig(SIGSEGV, tsk); ++ return; ++ } ++ ++no_context: ++ pr_debug("No context\n"); ++ ++ /* Are we prepared to handle this kernel fault? */ ++ fixup = search_exception_tables(regs->pc); ++ if (fixup) { ++ regs->pc = fixup->fixup; ++ pr_debug("Found fixup at %08lx\n", fixup->fixup); ++ return; ++ } ++ ++ /* ++ * Oops. The kernel tried to access some bad page. We'll have ++ * to terminate things with extreme prejudice. ++ */ ++ if (address < PAGE_SIZE) ++ printk(KERN_ALERT ++ "Unable to handle kernel NULL pointer dereference"); ++ else ++ printk(KERN_ALERT ++ "Unable to handle kernel paging request"); ++ printk(" at virtual address %08lx\n", address); ++ printk(KERN_ALERT "pc = %08lx\n", regs->pc); ++ ++ page = sysreg_read(PTBR); ++ printk(KERN_ALERT "ptbr = %08lx", page); ++ if (page) { ++ page = ((unsigned long *)page)[address >> 22]; ++ printk(" pgd = %08lx", page); ++ if (page & _PAGE_PRESENT) { ++ page &= PAGE_MASK; ++ address &= 0x003ff000; ++ page = ((unsigned long *)__va(page))[address >> PAGE_SHIFT]; ++ printk(" pte = %08lx\n", page); ++ } ++ } ++ die("\nOops", regs, ecr); ++ do_exit(SIGKILL); ++ ++ /* ++ * We ran out of memory, or some other thing happened to us ++ * that made us unable to handle the page fault gracefully. ++ */ ++out_of_memory: ++ printk("Out of memory\n"); ++ up_read(&mm->mmap_sem); ++ if (current->pid == 1) { ++ yield(); ++ down_read(&mm->mmap_sem); ++ goto survive; ++ } ++ printk("VM: Killing process %s\n", tsk->comm); ++ if (user_mode(regs)) ++ do_exit(SIGKILL); ++ goto no_context; ++ ++do_sigbus: ++ up_read(&mm->mmap_sem); ++ ++ /* ++ * Send a sigbus, regardless of whether we were in kernel or ++ * user mode. ++ */ ++ /* address, error_code, trap_no, ... */ ++#ifdef DEBUG ++ show_regs(regs); ++ dump_code(regs->pc); ++#endif ++ pr_debug("Sending SIGBUS to PID %d...\n", tsk->pid); ++ force_sig(SIGBUS, tsk); ++ ++ /* Kernel mode? Handle exceptions or die */ ++ if (!user_mode(regs)) ++ goto no_context; ++} ++ ++asmlinkage void do_bus_error(unsigned long addr, int write_access, ++ struct pt_regs *regs) ++{ ++ printk(KERN_ALERT ++ "Bus error at physical address 0x%08lx (%s access)\n", ++ addr, write_access ? "write" : "read"); ++ printk(KERN_INFO "DTLB dump:\n"); ++ dump_dtlb(); ++ die("Bus Error", regs, write_access); ++ do_exit(SIGKILL); ++} ++ ++/* ++ * This functionality is currently not possible to implement because ++ * we're using segmentation to ensure a fixed mapping of the kernel ++ * virtual address space. ++ * ++ * It would be possible to implement this, but it would require us to ++ * disable segmentation at startup and load the kernel mappings into ++ * the TLB like any other pages. There will be lots of trickery to ++ * avoid recursive invocation of the TLB miss handler, though... ++ */ ++#ifdef CONFIG_DEBUG_PAGEALLOC ++void kernel_map_pages(struct page *page, int numpages, int enable) ++{ ++ ++} ++EXPORT_SYMBOL(kernel_map_pages); ++#endif +Index: linux-2.6.18-avr32/arch/avr32/mm/init.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mm/init.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,481 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); ++ ++pgd_t swapper_pg_dir[PTRS_PER_PGD]; ++ ++struct page *empty_zero_page; ++ ++/* ++ * Cache of MMU context last used. ++ */ ++unsigned long mmu_context_cache = NO_CONTEXT; ++ ++#define START_PFN (NODE_DATA(0)->bdata->node_boot_start >> PAGE_SHIFT) ++#define MAX_LOW_PFN (NODE_DATA(0)->bdata->node_low_pfn) ++ ++void show_mem(void) ++{ ++ int total = 0, reserved = 0, cached = 0; ++ int slab = 0, free = 0, shared = 0; ++ pg_data_t *pgdat; ++ ++ printk("Mem-info:\n"); ++ show_free_areas(); ++ ++ for_each_online_pgdat(pgdat) { ++ struct page *page, *end; ++ ++ page = pgdat->node_mem_map; ++ end = page + pgdat->node_spanned_pages; ++ ++ do { ++ total++; ++ if (PageReserved(page)) ++ reserved++; ++ else if (PageSwapCache(page)) ++ cached++; ++ else if (PageSlab(page)) ++ slab++; ++ else if (!page_count(page)) ++ free++; ++ else ++ shared += page_count(page) - 1; ++ page++; ++ } while (page < end); ++ } ++ ++ printk ("%d pages of RAM\n", total); ++ printk ("%d free pages\n", free); ++ printk ("%d reserved pages\n", reserved); ++ printk ("%d slab pages\n", slab); ++ printk ("%d pages shared\n", shared); ++ printk ("%d pages swap cached\n", cached); ++} ++ ++static void __init print_memory_map(const char *what, ++ struct tag_mem_range *mem) ++{ ++ printk ("%s:\n", what); ++ for (; mem; mem = mem->next) { ++ printk (" %08lx - %08lx\n", ++ (unsigned long)mem->addr, ++ (unsigned long)(mem->addr + mem->size)); ++ } ++} ++ ++#define MAX_LOWMEM HIGHMEM_START ++#define MAX_LOWMEM_PFN PFN_DOWN(MAX_LOWMEM) ++ ++/* ++ * Sort a list of memory regions in-place by ascending address. ++ * ++ * We're using bubble sort because we only have singly linked lists ++ * with few elements. ++ */ ++static void __init sort_mem_list(struct tag_mem_range **pmem) ++{ ++ int done; ++ struct tag_mem_range **a, **b; ++ ++ if (!*pmem) ++ return; ++ ++ do { ++ done = 1; ++ a = pmem, b = &(*pmem)->next; ++ while (*b) { ++ if ((*a)->addr > (*b)->addr) { ++ struct tag_mem_range *tmp; ++ tmp = (*b)->next; ++ (*b)->next = *a; ++ *a = *b; ++ *b = tmp; ++ done = 0; ++ } ++ a = &(*a)->next; ++ b = &(*a)->next; ++ } ++ } while (!done); ++} ++ ++/* ++ * Find a free memory region large enough for storing the ++ * bootmem bitmap. ++ */ ++static unsigned long __init ++find_bootmap_pfn(const struct tag_mem_range *mem) ++{ ++ unsigned long bootmap_pages, bootmap_len; ++ unsigned long node_pages = PFN_UP(mem->size); ++ unsigned long bootmap_addr = mem->addr; ++ struct tag_mem_range *reserved = mem_reserved; ++ struct tag_mem_range *ramdisk = mem_ramdisk; ++ unsigned long kern_start = virt_to_phys(_stext); ++ unsigned long kern_end = virt_to_phys(_end); ++ ++ bootmap_pages = bootmem_bootmap_pages(node_pages); ++ bootmap_len = bootmap_pages << PAGE_SHIFT; ++ ++ /* ++ * Find a large enough region without reserved pages for ++ * storing the bootmem bitmap. We can take advantage of the ++ * fact that all lists have been sorted. ++ * ++ * We have to check explicitly reserved regions as well as the ++ * kernel image and any RAMDISK images... ++ * ++ * Oh, and we have to make sure we don't overwrite the taglist ++ * since we're going to use it until the bootmem allocator is ++ * fully up and running. ++ */ ++ while (1) { ++ if ((bootmap_addr < kern_end) && ++ ((bootmap_addr + bootmap_len) > kern_start)) ++ bootmap_addr = kern_end; ++ ++ while (reserved && ++ (bootmap_addr >= (reserved->addr + reserved->size))) ++ reserved = reserved->next; ++ ++ if (reserved && ++ ((bootmap_addr + bootmap_len) >= reserved->addr)) { ++ bootmap_addr = reserved->addr + reserved->size; ++ continue; ++ } ++ ++ while (ramdisk && ++ (bootmap_addr >= (ramdisk->addr + ramdisk->size))) ++ ramdisk = ramdisk->next; ++ ++ if (!ramdisk || ++ ((bootmap_addr + bootmap_len) < ramdisk->addr)) ++ break; ++ ++ bootmap_addr = ramdisk->addr + ramdisk->size; ++ } ++ ++ if ((PFN_UP(bootmap_addr) + bootmap_len) >= (mem->addr + mem->size)) ++ return ~0UL; ++ ++ return PFN_UP(bootmap_addr); ++} ++ ++void __init setup_bootmem(void) ++{ ++ unsigned bootmap_size; ++ unsigned long first_pfn, bootmap_pfn, pages; ++ unsigned long max_pfn, max_low_pfn; ++ unsigned long kern_start = virt_to_phys(_stext); ++ unsigned long kern_end = virt_to_phys(_end); ++ unsigned node = 0; ++ struct tag_mem_range *bank, *res; ++ ++ sort_mem_list(&mem_phys); ++ sort_mem_list(&mem_reserved); ++ ++ print_memory_map("Physical memory", mem_phys); ++ print_memory_map("Reserved memory", mem_reserved); ++ ++ nodes_clear(node_online_map); ++ ++ if (mem_ramdisk) { ++#ifdef CONFIG_BLK_DEV_INITRD ++ initrd_start = (unsigned long)__va(mem_ramdisk->addr); ++ initrd_end = initrd_start + mem_ramdisk->size; ++ ++ print_memory_map("RAMDISK images", mem_ramdisk); ++ if (mem_ramdisk->next) ++ printk(KERN_WARNING ++ "Warning: Only the first RAMDISK image " ++ "will be used\n"); ++ sort_mem_list(&mem_ramdisk); ++#else ++ printk(KERN_WARNING "RAM disk image present, but " ++ "no initrd support in kernel!\n"); ++#endif ++ } ++ ++ if (mem_phys->next) ++ printk(KERN_WARNING "Only using first memory bank\n"); ++ ++ for (bank = mem_phys; bank; bank = NULL) { ++ first_pfn = PFN_UP(bank->addr); ++ max_low_pfn = max_pfn = PFN_DOWN(bank->addr + bank->size); ++ bootmap_pfn = find_bootmap_pfn(bank); ++ if (bootmap_pfn > max_pfn) ++ panic("No space for bootmem bitmap!\n"); ++ ++ if (max_low_pfn > MAX_LOWMEM_PFN) { ++ max_low_pfn = MAX_LOWMEM_PFN; ++#ifndef CONFIG_HIGHMEM ++ /* ++ * Lowmem is memory that can be addressed ++ * directly through P1/P2 ++ */ ++ printk(KERN_WARNING ++ "Node %u: Only %ld MiB of memory will be used.\n", ++ node, MAX_LOWMEM >> 20); ++ printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n"); ++#else ++#error HIGHMEM is not supported by AVR32 yet ++#endif ++ } ++ ++ /* Initialize the boot-time allocator with low memory only. */ ++ bootmap_size = init_bootmem_node(NODE_DATA(node), bootmap_pfn, ++ first_pfn, max_low_pfn); ++ ++ printk("Node %u: bdata = %p, bdata->node_bootmem_map = %p\n", ++ node, NODE_DATA(node)->bdata, ++ NODE_DATA(node)->bdata->node_bootmem_map); ++ ++ /* ++ * Register fully available RAM pages with the bootmem ++ * allocator. ++ */ ++ pages = max_low_pfn - first_pfn; ++ free_bootmem_node (NODE_DATA(node), PFN_PHYS(first_pfn), ++ PFN_PHYS(pages)); ++ ++ /* ++ * Reserve space for the kernel image (if present in ++ * this node)... ++ */ ++ if ((kern_start >= PFN_PHYS(first_pfn)) && ++ (kern_start < PFN_PHYS(max_pfn))) { ++ printk("Node %u: Kernel image %08lx - %08lx\n", ++ node, kern_start, kern_end); ++ reserve_bootmem_node(NODE_DATA(node), kern_start, ++ kern_end - kern_start); ++ } ++ ++ /* ...the bootmem bitmap... */ ++ reserve_bootmem_node(NODE_DATA(node), ++ PFN_PHYS(bootmap_pfn), ++ bootmap_size); ++ ++ /* ...any RAMDISK images... */ ++ for (res = mem_ramdisk; res; res = res->next) { ++ if (res->addr > PFN_PHYS(max_pfn)) ++ break; ++ ++ if (res->addr >= PFN_PHYS(first_pfn)) { ++ printk("Node %u: RAMDISK %08lx - %08lx\n", ++ node, ++ (unsigned long)res->addr, ++ (unsigned long)(res->addr + res->size)); ++ reserve_bootmem_node(NODE_DATA(node), ++ res->addr, res->size); ++ } ++ } ++ ++ /* ...and any other reserved regions. */ ++ for (res = mem_reserved; res; res = res->next) { ++ if (res->addr > PFN_PHYS(max_pfn)) ++ break; ++ ++ if (res->addr >= PFN_PHYS(first_pfn)) { ++ printk("Node %u: Reserved %08lx - %08lx\n", ++ node, ++ (unsigned long)res->addr, ++ (unsigned long)(res->addr + res->size)); ++ reserve_bootmem_node(NODE_DATA(node), ++ res->addr, res->size); ++ } ++ } ++ ++ node_set_online(node); ++ } ++} ++ ++/* ++ * paging_init() sets up the page tables ++ * ++ * This routine also unmaps the page at virtual kernel address 0, so ++ * that we can trap those pesky NULL-reference errors in the kernel. ++ */ ++void __init paging_init(void) ++{ ++ extern unsigned long _evba; ++ void *zero_page; ++ int nid; ++ ++ /* ++ * Make sure we can handle exceptions before enabling ++ * paging. Not that we should ever _get_ any exceptions this ++ * early, but you never know... ++ */ ++ printk("Exception vectors start at %p\n", &_evba); ++ sysreg_write(EVBA, (unsigned long)&_evba); ++ ++ /* ++ * Since we are ready to handle exceptions now, we should let ++ * the CPU generate them... ++ */ ++ __asm__ __volatile__ ("csrf %0" : : "i"(SR_EM_BIT)); ++ ++ /* ++ * Allocate the zero page. The allocator will panic if it ++ * can't satisfy the request, so no need to check. ++ */ ++ zero_page = alloc_bootmem_low_pages_node(NODE_DATA(0), ++ PAGE_SIZE); ++ ++ { ++ pgd_t *pg_dir; ++ int i; ++ ++ pg_dir = swapper_pg_dir; ++ sysreg_write(PTBR, (unsigned long)pg_dir); ++ ++ for (i = 0; i < PTRS_PER_PGD; i++) ++ pgd_val(pg_dir[i]) = 0; ++ ++ enable_mmu(); ++ printk ("CPU: Paging enabled\n"); ++ } ++ ++ for_each_online_node(nid) { ++ pg_data_t *pgdat = NODE_DATA(nid); ++ unsigned long zones_size[MAX_NR_ZONES]; ++ unsigned long low, start_pfn; ++ ++ start_pfn = pgdat->bdata->node_boot_start; ++ start_pfn >>= PAGE_SHIFT; ++ low = pgdat->bdata->node_low_pfn; ++ ++ /* All memory is DMA-able */ ++ memset(zones_size, 0, sizeof(zones_size)); ++ zones_size[ZONE_DMA] = low - start_pfn; ++ ++ printk("Node %u: start_pfn = 0x%lx, low = 0x%lx\n", ++ nid, start_pfn, low); ++ ++ free_area_init_node(nid, pgdat, zones_size, start_pfn, NULL); ++ ++ printk("Node %u: mem_map starts at %p\n", ++ pgdat->node_id, pgdat->node_mem_map); ++ } ++ ++ mem_map = NODE_DATA(0)->node_mem_map; ++ ++ memset(zero_page, 0, PAGE_SIZE); ++ empty_zero_page = virt_to_page(zero_page); ++ flush_dcache_page(empty_zero_page); ++} ++ ++void __init mem_init(void) ++{ ++ int codesize, reservedpages, datasize, initsize; ++ int nid, i; ++ ++ reservedpages = 0; ++ high_memory = NULL; ++ ++ /* this will put all low memory onto the freelists */ ++ for_each_online_node(nid) { ++ pg_data_t *pgdat = NODE_DATA(nid); ++ unsigned long node_pages = 0; ++ void *node_high_memory; ++ ++ num_physpages += pgdat->node_present_pages; ++ ++ if (pgdat->node_spanned_pages != 0) ++ node_pages = free_all_bootmem_node(pgdat); ++ ++ totalram_pages += node_pages; ++ ++ for (i = 0; i < node_pages; i++) ++ if (PageReserved(pgdat->node_mem_map + i)) ++ reservedpages++; ++ ++ node_high_memory = (void *)((pgdat->node_start_pfn ++ + pgdat->node_spanned_pages) ++ << PAGE_SHIFT); ++ if (node_high_memory > high_memory) ++ high_memory = node_high_memory; ++ } ++ ++ max_mapnr = MAP_NR(high_memory); ++ ++ codesize = (unsigned long)_etext - (unsigned long)_text; ++ datasize = (unsigned long)_edata - (unsigned long)_data; ++ initsize = (unsigned long)__init_end - (unsigned long)__init_begin; ++ ++ printk ("Memory: %luk/%luk available (%dk kernel code, " ++ "%dk reserved, %dk data, %dk init)\n", ++ (unsigned long)nr_free_pages() << (PAGE_SHIFT - 10), ++ totalram_pages << (PAGE_SHIFT - 10), ++ codesize >> 10, ++ reservedpages << (PAGE_SHIFT - 10), ++ datasize >> 10, ++ initsize >> 10); ++} ++ ++static inline void free_area(unsigned long addr, unsigned long end, char *s) ++{ ++ unsigned int size = (end - addr) >> 10; ++ ++ for (; addr < end; addr += PAGE_SIZE) { ++ struct page *page = virt_to_page(addr); ++ ClearPageReserved(page); ++ init_page_count(page); ++ free_page(addr); ++ totalram_pages++; ++ } ++ ++ if (size && s) ++ printk(KERN_INFO "Freeing %s memory: %dK (%lx - %lx)\n", ++ s, size, end - (size << 10), end); ++} ++ ++void free_initmem(void) ++{ ++ free_area((unsigned long)__init_begin, (unsigned long)__init_end, ++ "init"); ++} ++ ++#ifdef CONFIG_BLK_DEV_INITRD ++ ++static int keep_initrd; ++ ++void free_initrd_mem(unsigned long start, unsigned long end) ++{ ++ if (!keep_initrd) ++ free_area(start, end, "initrd"); ++} ++ ++static int __init keepinitrd_setup(char *__unused) ++{ ++ keep_initrd = 1; ++ return 1; ++} ++ ++__setup("keepinitrd", keepinitrd_setup); ++#endif +Index: linux-2.6.18-avr32/arch/avr32/mm/ioremap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mm/ioremap.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,199 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++static inline int remap_area_pte(pte_t *pte, unsigned long address, ++ unsigned long end, unsigned long phys_addr, ++ pgprot_t prot) ++{ ++ unsigned long pfn; ++ ++ pfn = phys_addr >> PAGE_SHIFT; ++ do { ++ WARN_ON(!pte_none(*pte)); ++ ++ set_pte(pte, pfn_pte(pfn, prot)); ++ address += PAGE_SIZE; ++ pfn++; ++ pte++; ++ } while (address && (address < end)); ++ ++ return 0; ++} ++ ++static inline int remap_area_pmd(pmd_t *pmd, unsigned long address, ++ unsigned long end, unsigned long phys_addr, ++ pgprot_t prot) ++{ ++ unsigned long next; ++ ++ phys_addr -= address; ++ ++ do { ++ pte_t *pte = pte_alloc_kernel(pmd, address); ++ if (!pte) ++ return -ENOMEM; ++ ++ next = (address + PMD_SIZE) & PMD_MASK; ++ if (remap_area_pte(pte, address, next, ++ address + phys_addr, prot)) ++ return -ENOMEM; ++ ++ address = next; ++ pmd++; ++ } while (address && (address < end)); ++ return 0; ++} ++ ++static int remap_area_pud(pud_t *pud, unsigned long address, ++ unsigned long end, unsigned long phys_addr, ++ pgprot_t prot) ++{ ++ unsigned long next; ++ ++ phys_addr -= address; ++ ++ do { ++ pmd_t *pmd = pmd_alloc(&init_mm, pud, address); ++ if (!pmd) ++ return -ENOMEM; ++ next = (address + PUD_SIZE) & PUD_MASK; ++ if (remap_area_pmd(pmd, address, next, ++ phys_addr + address, prot)) ++ return -ENOMEM; ++ ++ address = next; ++ pud++; ++ } while (address && address < end); ++ ++ return 0; ++} ++ ++static int remap_area_pages(unsigned long address, unsigned long phys_addr, ++ size_t size, pgprot_t prot) ++{ ++ unsigned long end = address + size; ++ unsigned long next; ++ pgd_t *pgd; ++ int err = 0; ++ ++ phys_addr -= address; ++ ++ pgd = pgd_offset_k(address); ++ flush_cache_all(); ++ BUG_ON(address >= end); ++ ++ spin_lock(&init_mm.page_table_lock); ++ do { ++ pud_t *pud = pud_alloc(&init_mm, pgd, address); ++ ++ err = -ENOMEM; ++ if (!pud) ++ break; ++ ++ next = (address + PGDIR_SIZE) & PGDIR_MASK; ++ if (next < address || next > end) ++ next = end; ++ err = remap_area_pud(pud, address, next, ++ phys_addr + address, prot); ++ if (err) ++ break; ++ ++ address = next; ++ pgd++; ++ } while (address && (address < end)); ++ ++ spin_unlock(&init_mm.page_table_lock); ++ flush_tlb_all(); ++ return err; ++} ++ ++/* ++ * Re-map an arbitrary physical address space into the kernel virtual ++ * address space. Needed when the kernel wants to access physical ++ * memory directly. ++ */ ++void __iomem *__ioremap(unsigned long phys_addr, size_t size, ++ unsigned long flags) ++{ ++ void *addr; ++ struct vm_struct *area; ++ unsigned long offset, last_addr; ++ pgprot_t prot; ++ ++ /* ++ * Check if we can simply use the P4 segment. This area is ++ * uncacheable, so if caching/buffering is requested, we can't ++ * use it. ++ */ ++ if ((phys_addr >= P4SEG) && (flags == 0)) ++ return (void __iomem *)phys_addr; ++ ++ /* Don't allow wraparound or zero size */ ++ last_addr = phys_addr + size - 1; ++ if (!size || last_addr < phys_addr) ++ return NULL; ++ ++ /* ++ * XXX: When mapping regular RAM, we'd better make damn sure ++ * it's never used for anything else. But this is really the ++ * caller's responsibility... ++ */ ++ if (PHYSADDR(P2SEGADDR(phys_addr)) == phys_addr) ++ return (void __iomem *)P2SEGADDR(phys_addr); ++ ++ /* Mappings have to be page-aligned */ ++ offset = phys_addr & ~PAGE_MASK; ++ phys_addr &= PAGE_MASK; ++ size = PAGE_ALIGN(last_addr + 1) - phys_addr; ++ ++ prot = __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY ++ | _PAGE_ACCESSED | _PAGE_TYPE_SMALL | flags); ++ ++ /* ++ * Ok, go for it.. ++ */ ++ area = get_vm_area(size, VM_IOREMAP); ++ if (!area) ++ return NULL; ++ area->phys_addr = phys_addr; ++ addr = area->addr; ++ if (remap_area_pages((unsigned long)addr, phys_addr, size, prot)) { ++ vunmap(addr); ++ return NULL; ++ } ++ ++ return (void __iomem *)(offset + (char *)addr); ++} ++EXPORT_SYMBOL(__ioremap); ++ ++void __iounmap(void __iomem *addr) ++{ ++ struct vm_struct *p; ++ ++ if ((unsigned long)addr >= P4SEG) ++ return; ++ if (PXSEG(addr) == P2SEG) ++ return; ++ ++ p = remove_vm_area((void *)(PAGE_MASK & (unsigned long __force)addr)); ++ if (unlikely(!p)) { ++ printk (KERN_ERR "iounmap: bad address %p\n", addr); ++ return; ++ } ++ ++ kfree (p); ++} ++EXPORT_SYMBOL(__iounmap); +Index: linux-2.6.18-avr32/arch/avr32/mm/tlb.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mm/tlb.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,378 @@ ++/* ++ * AVR32 TLB operations ++ * ++ * Copyright (C) 2004-2006 Atmel 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 ++ ++#define _TLBEHI_I 0x100 ++ ++void show_dtlb_entry(unsigned int index) ++{ ++ unsigned int tlbehi, tlbehi_save, tlbelo, mmucr, mmucr_save, flags; ++ ++ local_irq_save(flags); ++ mmucr_save = sysreg_read(MMUCR); ++ tlbehi_save = sysreg_read(TLBEHI); ++ mmucr = mmucr_save & 0x13; ++ mmucr |= index << 14; ++ sysreg_write(MMUCR, mmucr); ++ ++ asm volatile("tlbr" : : : "memory"); ++ cpu_sync_pipeline(); ++ ++ tlbehi = sysreg_read(TLBEHI); ++ tlbelo = sysreg_read(TLBELO); ++ ++ printk("%2u: %c %c %02x %05x %05x %o %o %c %c %c %c\n", ++ index, ++ (tlbehi & 0x200)?'1':'0', ++ (tlbelo & 0x100)?'1':'0', ++ (tlbehi & 0xff), ++ (tlbehi >> 12), (tlbelo >> 12), ++ (tlbelo >> 4) & 7, (tlbelo >> 2) & 3, ++ (tlbelo & 0x200)?'1':'0', ++ (tlbelo & 0x080)?'1':'0', ++ (tlbelo & 0x001)?'1':'0', ++ (tlbelo & 0x002)?'1':'0'); ++ ++ sysreg_write(MMUCR, mmucr_save); ++ sysreg_write(TLBEHI, tlbehi_save); ++ cpu_sync_pipeline(); ++ local_irq_restore(flags); ++} ++ ++void dump_dtlb(void) ++{ ++ unsigned int i; ++ ++ printk("ID V G ASID VPN PFN AP SZ C B W D\n"); ++ for (i = 0; i < 32; i++) ++ show_dtlb_entry(i); ++} ++ ++static unsigned long last_mmucr; ++ ++static inline void set_replacement_pointer(unsigned shift) ++{ ++ unsigned long mmucr, mmucr_save; ++ ++ mmucr = mmucr_save = sysreg_read(MMUCR); ++ ++ /* Does this mapping already exist? */ ++ __asm__ __volatile__( ++ " tlbs\n" ++ " mfsr %0, %1" ++ : "=r"(mmucr) ++ : "i"(SYSREG_MMUCR)); ++ ++ if (mmucr & SYSREG_BIT(MMUCR_N)) { ++ /* Not found -- pick a not-recently-accessed entry */ ++ unsigned long rp; ++ unsigned long tlbar = sysreg_read(TLBARLO); ++ ++ rp = 32 - fls(tlbar); ++ if (rp == 32) { ++ rp = 0; ++ sysreg_write(TLBARLO, -1L); ++ } ++ ++ mmucr &= 0x13; ++ mmucr |= (rp << shift); ++ ++ sysreg_write(MMUCR, mmucr); ++ } ++ ++ last_mmucr = mmucr; ++} ++ ++static void update_dtlb(unsigned long address, pte_t pte, unsigned long asid) ++{ ++ unsigned long vpn; ++ ++ vpn = (address & MMU_VPN_MASK) | _TLBEHI_VALID | asid; ++ sysreg_write(TLBEHI, vpn); ++ cpu_sync_pipeline(); ++ ++ set_replacement_pointer(14); ++ ++ sysreg_write(TLBELO, pte_val(pte) & _PAGE_FLAGS_HARDWARE_MASK); ++ ++ /* Let's go */ ++ asm volatile("nop\n\ttlbw" : : : "memory"); ++ cpu_sync_pipeline(); ++} ++ ++void update_mmu_cache(struct vm_area_struct *vma, ++ unsigned long address, pte_t pte) ++{ ++ unsigned long flags; ++ ++ /* ptrace may call this routine */ ++ if (vma && current->active_mm != vma->vm_mm) ++ return; ++ ++ local_irq_save(flags); ++ update_dtlb(address, pte, get_asid()); ++ local_irq_restore(flags); ++} ++ ++void __flush_tlb_page(unsigned long asid, unsigned long page) ++{ ++ unsigned long mmucr, tlbehi; ++ ++ page |= asid; ++ sysreg_write(TLBEHI, page); ++ cpu_sync_pipeline(); ++ asm volatile("tlbs"); ++ mmucr = sysreg_read(MMUCR); ++ ++ if (!(mmucr & SYSREG_BIT(MMUCR_N))) { ++ unsigned long tlbarlo; ++ unsigned long entry; ++ ++ /* Clear the "valid" bit */ ++ tlbehi = sysreg_read(TLBEHI); ++ tlbehi &= ~_TLBEHI_VALID; ++ sysreg_write(TLBEHI, tlbehi); ++ cpu_sync_pipeline(); ++ ++ /* mark the entry as "not accessed" */ ++ entry = (mmucr >> 14) & 0x3f; ++ tlbarlo = sysreg_read(TLBARLO); ++ tlbarlo |= (0x80000000 >> entry); ++ sysreg_write(TLBARLO, tlbarlo); ++ ++ /* update the entry with valid bit clear */ ++ asm volatile("tlbw"); ++ cpu_sync_pipeline(); ++ } ++} ++ ++void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) ++{ ++ if (vma->vm_mm && vma->vm_mm->context != NO_CONTEXT) { ++ unsigned long flags, asid; ++ unsigned long saved_asid = MMU_NO_ASID; ++ ++ asid = vma->vm_mm->context & MMU_CONTEXT_ASID_MASK; ++ page &= PAGE_MASK; ++ ++ local_irq_save(flags); ++ if (vma->vm_mm != current->mm) { ++ saved_asid = get_asid(); ++ set_asid(asid); ++ } ++ ++ __flush_tlb_page(asid, page); ++ ++ if (saved_asid != MMU_NO_ASID) ++ set_asid(saved_asid); ++ local_irq_restore(flags); ++ } ++} ++ ++void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, ++ unsigned long end) ++{ ++ struct mm_struct *mm = vma->vm_mm; ++ ++ if (mm->context != NO_CONTEXT) { ++ unsigned long flags; ++ int size; ++ ++ local_irq_save(flags); ++ size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ if (size > (MMU_DTLB_ENTRIES / 4)) { /* Too many entries to flush */ ++ mm->context = NO_CONTEXT; ++ if (mm == current->mm) ++ activate_context(mm); ++ } else { ++ unsigned long asid = mm->context & MMU_CONTEXT_ASID_MASK; ++ unsigned long saved_asid = MMU_NO_ASID; ++ ++ start &= PAGE_MASK; ++ end += (PAGE_SIZE - 1); ++ end &= PAGE_MASK; ++ if (mm != current->mm) { ++ saved_asid = get_asid(); ++ set_asid(asid); ++ } ++ ++ while (start < end) { ++ __flush_tlb_page(asid, start); ++ start += PAGE_SIZE; ++ } ++ if (saved_asid != MMU_NO_ASID) ++ set_asid(saved_asid); ++ } ++ local_irq_restore(flags); ++ } ++} ++ ++/* ++ * TODO: If this is only called for addresses > TASK_SIZE, we can probably ++ * skip the ASID stuff and just use the Global bit... ++ */ ++void flush_tlb_kernel_range(unsigned long start, unsigned long end) ++{ ++ unsigned long flags; ++ int size; ++ ++ local_irq_save(flags); ++ size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ if (size > (MMU_DTLB_ENTRIES / 4)) { /* Too many entries to flush */ ++ flush_tlb_all(); ++ } else { ++ unsigned long asid = init_mm.context & MMU_CONTEXT_ASID_MASK; ++ unsigned long saved_asid = get_asid(); ++ ++ start &= PAGE_MASK; ++ end += (PAGE_SIZE - 1); ++ end &= PAGE_MASK; ++ set_asid(asid); ++ while (start < end) { ++ __flush_tlb_page(asid, start); ++ start += PAGE_SIZE; ++ } ++ set_asid(saved_asid); ++ } ++ local_irq_restore(flags); ++} ++ ++void flush_tlb_mm(struct mm_struct *mm) ++{ ++ /* Invalidate all TLB entries of this process by getting a new ASID */ ++ if (mm->context != NO_CONTEXT) { ++ unsigned long flags; ++ ++ local_irq_save(flags); ++ mm->context = NO_CONTEXT; ++ if (mm == current->mm) ++ activate_context(mm); ++ local_irq_restore(flags); ++ } ++} ++ ++void flush_tlb_all(void) ++{ ++ unsigned long flags; ++ ++ local_irq_save(flags); ++ sysreg_write(MMUCR, sysreg_read(MMUCR) | SYSREG_BIT(MMUCR_I)); ++ local_irq_restore(flags); ++} ++ ++#ifdef CONFIG_PROC_FS ++ ++#include ++#include ++#include ++ ++static void *tlb_start(struct seq_file *tlb, loff_t *pos) ++{ ++ static unsigned long tlb_index; ++ ++ if (*pos >= 32) ++ return NULL; ++ ++ tlb_index = 0; ++ return &tlb_index; ++} ++ ++static void *tlb_next(struct seq_file *tlb, void *v, loff_t *pos) ++{ ++ unsigned long *index = v; ++ ++ if (*index >= 31) ++ return NULL; ++ ++ ++*pos; ++ ++*index; ++ return index; ++} ++ ++static void tlb_stop(struct seq_file *tlb, void *v) ++{ ++ ++} ++ ++static int tlb_show(struct seq_file *tlb, void *v) ++{ ++ unsigned int tlbehi, tlbehi_save, tlbelo, mmucr, mmucr_save, flags; ++ unsigned long *index = v; ++ ++ if (*index == 0) ++ seq_puts(tlb, "ID V G ASID VPN PFN AP SZ C B W D\n"); ++ ++ BUG_ON(*index >= 32); ++ ++ local_irq_save(flags); ++ mmucr_save = sysreg_read(MMUCR); ++ tlbehi_save = sysreg_read(TLBEHI); ++ mmucr = mmucr_save & 0x13; ++ mmucr |= *index << 14; ++ sysreg_write(MMUCR, mmucr); ++ ++ asm volatile("tlbr" : : : "memory"); ++ cpu_sync_pipeline(); ++ ++ tlbehi = sysreg_read(TLBEHI); ++ tlbelo = sysreg_read(TLBELO); ++ ++ sysreg_write(MMUCR, mmucr_save); ++ sysreg_write(TLBEHI, tlbehi_save); ++ cpu_sync_pipeline(); ++ local_irq_restore(flags); ++ ++ seq_printf(tlb, "%2lu: %c %c %02x %05x %05x %o %o %c %c %c %c\n", ++ *index, ++ (tlbehi & 0x200)?'1':'0', ++ (tlbelo & 0x100)?'1':'0', ++ (tlbehi & 0xff), ++ (tlbehi >> 12), (tlbelo >> 12), ++ (tlbelo >> 4) & 7, (tlbelo >> 2) & 3, ++ (tlbelo & 0x200)?'1':'0', ++ (tlbelo & 0x080)?'1':'0', ++ (tlbelo & 0x001)?'1':'0', ++ (tlbelo & 0x002)?'1':'0'); ++ ++ return 0; ++} ++ ++static struct seq_operations tlb_ops = { ++ .start = tlb_start, ++ .next = tlb_next, ++ .stop = tlb_stop, ++ .show = tlb_show, ++}; ++ ++static int tlb_open(struct inode *inode, struct file *file) ++{ ++ return seq_open(file, &tlb_ops); ++} ++ ++static struct file_operations proc_tlb_operations = { ++ .open = tlb_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = seq_release, ++}; ++ ++static int __init proctlb_init(void) ++{ ++ struct proc_dir_entry *entry; ++ ++ entry = create_proc_entry("tlb", 0, NULL); ++ if (entry) ++ entry->proc_fops = &proc_tlb_operations; ++ return 0; ++} ++late_initcall(proctlb_init); ++#endif /* CONFIG_PROC_FS */ +Index: linux-2.6.18-avr32/include/asm-avr32/Kbuild +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/Kbuild 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,3 @@ ++include include/asm-generic/Kbuild.asm ++ ++header-y += cachectl.h +Index: linux-2.6.18-avr32/include/asm-avr32/a.out.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/a.out.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,26 @@ ++#ifndef __ASM_AVR32_A_OUT_H ++#define __ASM_AVR32_A_OUT_H ++ ++struct exec ++{ ++ unsigned long a_info; /* Use macros N_MAGIC, etc for access */ ++ unsigned a_text; /* length of text, in bytes */ ++ unsigned a_data; /* length of data, in bytes */ ++ unsigned a_bss; /* length of uninitialized data area for file, in bytes */ ++ unsigned a_syms; /* length of symbol table data in file, in bytes */ ++ unsigned a_entry; /* start address */ ++ unsigned a_trsize; /* length of relocation info for text, in bytes */ ++ unsigned a_drsize; /* length of relocation info for data, in bytes */ ++}; ++ ++#define N_TRSIZE(a) ((a).a_trsize) ++#define N_DRSIZE(a) ((a).a_drsize) ++#define N_SYMSIZE(a) ((a).a_syms) ++ ++#ifdef __KERNEL__ ++ ++#define STACK_TOP TASK_SIZE ++ ++#endif ++ ++#endif /* __ASM_AVR32_A_OUT_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/addrspace.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/addrspace.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,43 @@ ++/* ++ * Defitions for the address spaces of the AVR32 CPUs. Heavily based on ++ * include/asm-sh/addrspace.h ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_ADDRSPACE_H ++#define __ASM_AVR32_ADDRSPACE_H ++ ++#ifdef CONFIG_MMU ++ ++/* Memory segments when segmentation is enabled */ ++#define P0SEG 0x00000000 ++#define P1SEG 0x80000000 ++#define P2SEG 0xa0000000 ++#define P3SEG 0xc0000000 ++#define P4SEG 0xe0000000 ++ ++/* Returns the privileged segment base of a given address */ ++#define PXSEG(a) (((unsigned long)(a)) & 0xe0000000) ++ ++/* Returns the physical address of a PnSEG (n=1,2) address */ ++#define PHYSADDR(a) (((unsigned long)(a)) & 0x1fffffff) ++ ++/* ++ * Map an address to a certain privileged segment ++ */ ++#define P1SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) \ ++ | P1SEG)) ++#define P2SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) \ ++ | P2SEG)) ++#define P3SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) \ ++ | P3SEG)) ++#define P4SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) \ ++ | P4SEG)) ++ ++#endif /* CONFIG_MMU */ ++ ++#endif /* __ASM_AVR32_ADDRSPACE_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at91rm9200_pdc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at91rm9200_pdc.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,36 @@ ++/* ++ * include/asm-arm/arch-at91rm9200/at91rm9200_pdc.h ++ * ++ * Copyright (C) 2005 Ivan Kokshaysky ++ * Copyright (C) SAN People ++ * ++ * Peripheral Data Controller (PDC) registers. ++ * Based on AT91RM9200 datasheet revision E. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ */ ++ ++#ifndef AT91RM9200_PDC_H ++#define AT91RM9200_PDC_H ++ ++#define AT91_PDC_RPR 0x100 /* Receive Pointer Register */ ++#define AT91_PDC_RCR 0x104 /* Receive Counter Register */ ++#define AT91_PDC_TPR 0x108 /* Transmit Pointer Register */ ++#define AT91_PDC_TCR 0x10c /* Transmit Counter Register */ ++#define AT91_PDC_RNPR 0x110 /* Receive Next Pointer Register */ ++#define AT91_PDC_RNCR 0x114 /* Receive Next Counter Register */ ++#define AT91_PDC_TNPR 0x118 /* Transmit Next Pointer Register */ ++#define AT91_PDC_TNCR 0x11c /* Transmit Next Counter Register */ ++ ++#define AT91_PDC_PTCR 0x120 /* Transfer Control Register */ ++#define AT91_PDC_RXTEN (1 << 0) /* Receiver Transfer Enable */ ++#define AT91_PDC_RXTDIS (1 << 1) /* Receiver Transfer Disable */ ++#define AT91_PDC_TXTEN (1 << 8) /* Transmitter Transfer Enable */ ++#define AT91_PDC_TXTDIS (1 << 9) /* Transmitter Transfer Disable */ ++ ++#define AT91_PDC_PTSR 0x124 /* Transfer Status Register */ ++ ++#endif +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at91rm9200_usart.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at91rm9200_usart.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,123 @@ ++/* ++ * include/asm-arm/arch-at91rm9200/at91rm9200_usart.h ++ * ++ * Copyright (C) 2005 Ivan Kokshaysky ++ * Copyright (C) SAN People ++ * ++ * USART registers. ++ * Based on AT91RM9200 datasheet revision E. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ */ ++ ++#ifndef AT91RM9200_USART_H ++#define AT91RM9200_USART_H ++ ++#define AT91_US_CR 0x00 /* Control Register */ ++#define AT91_US_RSTRX (1 << 2) /* Reset Receiver */ ++#define AT91_US_RSTTX (1 << 3) /* Reset Transmitter */ ++#define AT91_US_RXEN (1 << 4) /* Receiver Enable */ ++#define AT91_US_RXDIS (1 << 5) /* Receiver Disable */ ++#define AT91_US_TXEN (1 << 6) /* Transmitter Enable */ ++#define AT91_US_TXDIS (1 << 7) /* Transmitter Disable */ ++#define AT91_US_RSTSTA (1 << 8) /* Reset Status Bits */ ++#define AT91_US_STTBRK (1 << 9) /* Start Break */ ++#define AT91_US_STPBRK (1 << 10) /* Stop Break */ ++#define AT91_US_STTTO (1 << 11) /* Start Time-out */ ++#define AT91_US_SENDA (1 << 12) /* Send Address */ ++#define AT91_US_RSTIT (1 << 13) /* Reset Iterations */ ++#define AT91_US_RSTNACK (1 << 14) /* Reset Non Acknowledge */ ++#define AT91_US_RETTO (1 << 15) /* Rearm Time-out */ ++#define AT91_US_DTREN (1 << 16) /* Data Terminal Ready Enable */ ++#define AT91_US_DTRDIS (1 << 17) /* Data Terminal Ready Disable */ ++#define AT91_US_RTSEN (1 << 18) /* Request To Send Enable */ ++#define AT91_US_RTSDIS (1 << 19) /* Request To Send Disable */ ++ ++#define AT91_US_MR 0x04 /* Mode Register */ ++#define AT91_US_USMODE (0xf << 0) /* Mode of the USART */ ++#define AT91_US_USMODE_NORMAL 0 ++#define AT91_US_USMODE_RS485 1 ++#define AT91_US_USMODE_HWHS 2 ++#define AT91_US_USMODE_MODEM 3 ++#define AT91_US_USMODE_ISO7816_T0 4 ++#define AT91_US_USMODE_ISO7816_T1 6 ++#define AT91_US_USMODE_IRDA 8 ++#define AT91_US_USCLKS (3 << 4) /* Clock Selection */ ++#define AT91_US_CHRL (3 << 6) /* Character Length */ ++#define AT91_US_CHRL_5 (0 << 6) ++#define AT91_US_CHRL_6 (1 << 6) ++#define AT91_US_CHRL_7 (2 << 6) ++#define AT91_US_CHRL_8 (3 << 6) ++#define AT91_US_SYNC (1 << 8) /* Synchronous Mode Select */ ++#define AT91_US_PAR (7 << 9) /* Parity Type */ ++#define AT91_US_PAR_EVEN (0 << 9) ++#define AT91_US_PAR_ODD (1 << 9) ++#define AT91_US_PAR_SPACE (2 << 9) ++#define AT91_US_PAR_MARK (3 << 9) ++#define AT91_US_PAR_NONE (4 << 9) ++#define AT91_US_PAR_MULTI_DROP (6 << 9) ++#define AT91_US_NBSTOP (3 << 12) /* Number of Stop Bits */ ++#define AT91_US_NBSTOP_1 (0 << 12) ++#define AT91_US_NBSTOP_1_5 (1 << 12) ++#define AT91_US_NBSTOP_2 (2 << 12) ++#define AT91_US_CHMODE (3 << 14) /* Channel Mode */ ++#define AT91_US_CHMODE_NORMAL (0 << 14) ++#define AT91_US_CHMODE_ECHO (1 << 14) ++#define AT91_US_CHMODE_LOC_LOOP (2 << 14) ++#define AT91_US_CHMODE_REM_LOOP (3 << 14) ++#define AT91_US_MSBF (1 << 16) /* Bit Order */ ++#define AT91_US_MODE9 (1 << 17) /* 9-bit Character Length */ ++#define AT91_US_CLKO (1 << 18) /* Clock Output Select */ ++#define AT91_US_OVER (1 << 19) /* Oversampling Mode */ ++#define AT91_US_INACK (1 << 20) /* Inhibit Non Acknowledge */ ++#define AT91_US_DSNACK (1 << 21) /* Disable Successive NACK */ ++#define AT91_US_MAX_ITER (7 << 24) /* Max Iterations */ ++#define AT91_US_FILTER (1 << 28) /* Infrared Receive Line Filter */ ++ ++#define AT91_US_IER 0x08 /* Interrupt Enable Register */ ++#define AT91_US_RXRDY (1 << 0) /* Receiver Ready */ ++#define AT91_US_TXRDY (1 << 1) /* Transmitter Ready */ ++#define AT91_US_RXBRK (1 << 2) /* Break Received / End of Break */ ++#define AT91_US_ENDRX (1 << 3) /* End of Receiver Transfer */ ++#define AT91_US_ENDTX (1 << 4) /* End of Transmitter Transfer */ ++#define AT91_US_OVRE (1 << 5) /* Overrun Error */ ++#define AT91_US_FRAME (1 << 6) /* Framing Error */ ++#define AT91_US_PARE (1 << 7) /* Parity Error */ ++#define AT91_US_TIMEOUT (1 << 8) /* Receiver Time-out */ ++#define AT91_US_TXEMPTY (1 << 9) /* Transmitter Empty */ ++#define AT91_US_ITERATION (1 << 10) /* Max number of Repetitions Reached */ ++#define AT91_US_TXBUFE (1 << 11) /* Transmission Buffer Empty */ ++#define AT91_US_RXBUFF (1 << 12) /* Reception Buffer Full */ ++#define AT91_US_NACK (1 << 13) /* Non Acknowledge */ ++#define AT91_US_RIIC (1 << 16) /* Ring Indicator Input Change */ ++#define AT91_US_DSRIC (1 << 17) /* Data Set Ready Input Change */ ++#define AT91_US_DCDIC (1 << 18) /* Data Carrier Detect Input Change */ ++#define AT91_US_CTSIC (1 << 19) /* Clear to Send Input Change */ ++#define AT91_US_RI (1 << 20) /* RI */ ++#define AT91_US_DSR (1 << 21) /* DSR */ ++#define AT91_US_DCD (1 << 22) /* DCD */ ++#define AT91_US_CTS (1 << 23) /* CTS */ ++ ++#define AT91_US_IDR 0x0c /* Interrupt Disable Register */ ++#define AT91_US_IMR 0x10 /* Interrupt Mask Register */ ++#define AT91_US_CSR 0x14 /* Channel Status Register */ ++#define AT91_US_RHR 0x18 /* Receiver Holding Register */ ++#define AT91_US_THR 0x1c /* Transmitter Holding Register */ ++ ++#define AT91_US_BRGR 0x20 /* Baud Rate Generator Register */ ++#define AT91_US_CD (0xffff << 0) /* Clock Divider */ ++ ++#define AT91_US_RTOR 0x24 /* Receiver Time-out Register */ ++#define AT91_US_TO (0xffff << 0) /* Time-out Value */ ++ ++#define AT91_US_TTGR 0x28 /* Transmitter Timeguard Register */ ++#define AT91_US_TG (0xff << 0) /* Timeguard Value */ ++ ++#define AT91_US_FIDI 0x40 /* FI DI Ratio Register */ ++#define AT91_US_NER 0x44 /* Number of Errors Register */ ++#define AT91_US_IF 0x4c /* IrDA Filter Register */ ++ ++#endif +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h 2006-12-04 11:50:22.000000000 +0100 +@@ -0,0 +1,35 @@ ++/* ++ * Platform data definitions. ++ */ ++#ifndef __ASM_ARCH_BOARD_H ++#define __ASM_ARCH_BOARD_H ++ ++#include ++ ++/* Add basic devices: system manager, interrupt controller, portmuxes, etc. */ ++void at32_add_system_devices(void); ++ ++#define AT91_NR_UART 4 ++extern struct platform_device *at91_default_console_device; ++ ++struct platform_device *at32_add_device_usart(unsigned int id); ++ ++struct eth_platform_data { ++ u8 valid; ++ u8 mii_phy_addr; ++ u8 is_rmii; ++ u8 hw_addr[6]; ++}; ++struct platform_device * ++at32_add_device_eth(unsigned int id, struct eth_platform_data *data); ++ ++struct platform_device *at32_add_device_spi(unsigned int id); ++ ++struct lcdc_platform_data { ++ unsigned long fbmem_start; ++ unsigned long fbmem_size; ++}; ++struct platform_device * ++at32_add_device_lcdc(unsigned int id, struct lcdc_platform_data *data); ++ ++#endif /* __ASM_ARCH_BOARD_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/init.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/init.h 2006-12-04 11:50:22.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* ++ * AT32AP platform initialization calls. ++ * ++ * Copyright (C) 2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_AT32AP_INIT_H__ ++#define __ASM_AVR32_AT32AP_INIT_H__ ++ ++void setup_platform(void); ++ ++/* Called by setup_platform */ ++void at32_clock_init(void); ++void at32_portmux_init(void); ++ ++void at32_setup_serial_console(unsigned int usart_id); ++ ++#endif /* __ASM_AVR32_AT32AP_INIT_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/portmux.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/portmux.h 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,16 @@ ++/* ++ * AT32 portmux interface. ++ * ++ * Copyright (C) 2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_AT32_PORTMUX_H__ ++#define __ASM_AVR32_AT32_PORTMUX_H__ ++ ++void portmux_set_func(unsigned int portmux_id, unsigned int pin_id, ++ unsigned int function_id); ++ ++#endif /* __ASM_AVR32_AT32_PORTMUX_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/sm.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/sm.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,27 @@ ++/* ++ * AT32 System Manager interface. ++ * ++ * Copyright (C) 2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_AT32_SM_H__ ++#define __ASM_AVR32_AT32_SM_H__ ++ ++struct irq_chip; ++struct platform_device; ++ ++struct at32_sm { ++ spinlock_t lock; ++ void __iomem *regs; ++ struct irq_chip *eim_chip; ++ unsigned int eim_first_irq; ++ struct platform_device *pdev; ++}; ++ ++extern struct platform_device at32_sm_device; ++extern struct at32_sm system_manager; ++ ++#endif /* __ASM_AVR32_AT32_SM_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/asm.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/asm.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,102 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_ASM_H__ ++#define __ASM_AVR32_ASM_H__ ++ ++#include ++#include ++#include ++ ++#define mask_interrupts ssrf SR_GM_BIT ++#define mask_exceptions ssrf SR_EM_BIT ++#define unmask_interrupts csrf SR_GM_BIT ++#define unmask_exceptions csrf SR_EM_BIT ++ ++#ifdef CONFIG_FRAME_POINTER ++ .macro save_fp ++ st.w --sp, r7 ++ .endm ++ .macro restore_fp ++ ld.w r7, sp++ ++ .endm ++ .macro zero_fp ++ mov r7, 0 ++ .endm ++#else ++ .macro save_fp ++ .endm ++ .macro restore_fp ++ .endm ++ .macro zero_fp ++ .endm ++#endif ++ .macro get_thread_info reg ++ mov \reg, sp ++ andl \reg, ~(THREAD_SIZE - 1) & 0xffff ++ .endm ++ ++ /* Save and restore registers */ ++ .macro save_min sr, tmp=lr ++ pushm lr ++ mfsr \tmp, \sr ++ zero_fp ++ st.w --sp, \tmp ++ .endm ++ ++ .macro restore_min sr, tmp=lr ++ ld.w \tmp, sp++ ++ mtsr \sr, \tmp ++ popm lr ++ .endm ++ ++ .macro save_half sr, tmp=lr ++ save_fp ++ pushm r8-r9,r10,r11,r12,lr ++ zero_fp ++ mfsr \tmp, \sr ++ st.w --sp, \tmp ++ .endm ++ ++ .macro restore_half sr, tmp=lr ++ ld.w \tmp, sp++ ++ mtsr \sr, \tmp ++ popm r8-r9,r10,r11,r12,lr ++ restore_fp ++ .endm ++ ++ .macro save_full_user sr, tmp=lr ++ stmts --sp, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr ++ st.w --sp, lr ++ zero_fp ++ mfsr \tmp, \sr ++ st.w --sp, \tmp ++ .endm ++ ++ .macro restore_full_user sr, tmp=lr ++ ld.w \tmp, sp++ ++ mtsr \sr, \tmp ++ ld.w lr, sp++ ++ ldmts sp++, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr ++ .endm ++ ++ /* uaccess macros */ ++ .macro branch_if_kernel scratch, label ++ get_thread_info \scratch ++ ld.w \scratch, \scratch[TI_flags] ++ bld \scratch, TIF_USERSPACE ++ brcc \label ++ .endm ++ ++ .macro ret_if_privileged scratch, addr, size, ret ++ sub \scratch, \size, 1 ++ add \scratch, \addr ++ retcs \ret ++ retmi \ret ++ .endm ++ ++#endif /* __ASM_AVR32_ASM_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/atomic.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/atomic.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,201 @@ ++/* ++ * Atomic operations that C can't guarantee us. Useful for ++ * resource counting etc. ++ * ++ * But use these as seldom as possible since they are slower than ++ * regular operations. ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_ATOMIC_H ++#define __ASM_AVR32_ATOMIC_H ++ ++#include ++ ++typedef struct { volatile int counter; } atomic_t; ++#define ATOMIC_INIT(i) { (i) } ++ ++#define atomic_read(v) ((v)->counter) ++#define atomic_set(v, i) (((v)->counter) = i) ++ ++/* ++ * atomic_sub_return - subtract the atomic variable ++ * @i: integer value to subtract ++ * @v: pointer of type atomic_t ++ * ++ * Atomically subtracts @i from @v. Returns the resulting value. ++ */ ++static inline int atomic_sub_return(int i, atomic_t *v) ++{ ++ int result; ++ ++ asm volatile( ++ "/* atomic_sub_return */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " sub %0, %3\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(result), "=o"(v->counter) ++ : "m"(v->counter), "rKs21"(i) ++ : "cc"); ++ ++ return result; ++} ++ ++/* ++ * atomic_add_return - add integer to atomic variable ++ * @i: integer value to add ++ * @v: pointer of type atomic_t ++ * ++ * Atomically adds @i to @v. Returns the resulting value. ++ */ ++static inline int atomic_add_return(int i, atomic_t *v) ++{ ++ int result; ++ ++ if (__builtin_constant_p(i) && (i >= -1048575) && (i <= 1048576)) ++ result = atomic_sub_return(-i, v); ++ else ++ asm volatile( ++ "/* atomic_add_return */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %1\n" ++ " add %0, %3\n" ++ " stcond %2, %0\n" ++ " brne 1b" ++ : "=&r"(result), "=o"(v->counter) ++ : "m"(v->counter), "r"(i) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++/* ++ * atomic_sub_unless - sub unless the number is a given value ++ * @v: pointer of type atomic_t ++ * @a: the amount to add to v... ++ * @u: ...unless v is equal to u. ++ * ++ * If the atomic value v is not equal to u, this function subtracts a ++ * from v, and returns non zero. If v is equal to u then it returns ++ * zero. This is done as an atomic operation. ++*/ ++static inline int atomic_sub_unless(atomic_t *v, int a, int u) ++{ ++ int tmp, result = 0; ++ ++ asm volatile( ++ "/* atomic_sub_unless */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " cp.w %0, %5\n" ++ " breq 1f\n" ++ " sub %0, %4\n" ++ " stcond %2, %0\n" ++ " brne 1b\n" ++ " mov %1, 1\n" ++ "1:" ++ : "=&r"(tmp), "=&r"(result), "=o"(v->counter) ++ : "m"(v->counter), "rKs21"(a), "rKs21"(u) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++/* ++ * atomic_add_unless - add unless the number is a given value ++ * @v: pointer of type atomic_t ++ * @a: the amount to add to v... ++ * @u: ...unless v is equal to u. ++ * ++ * If the atomic value v is not equal to u, this function adds a to v, ++ * and returns non zero. If v is equal to u then it returns zero. This ++ * is done as an atomic operation. ++*/ ++static inline int atomic_add_unless(atomic_t *v, int a, int u) ++{ ++ int tmp, result; ++ ++ if (__builtin_constant_p(a) && (a >= -1048575) && (a <= 1048576)) ++ result = atomic_sub_unless(v, -a, u); ++ else { ++ result = 0; ++ asm volatile( ++ "/* atomic_add_unless */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " cp.w %0, %5\n" ++ " breq 1f\n" ++ " add %0, %4\n" ++ " stcond %2, %0\n" ++ " brne 1b\n" ++ " mov %1, 1\n" ++ "1:" ++ : "=&r"(tmp), "=&r"(result), "=o"(v->counter) ++ : "m"(v->counter), "r"(a), "ir"(u) ++ : "cc", "memory"); ++ } ++ ++ return result; ++} ++ ++/* ++ * atomic_sub_if_positive - conditionally subtract integer from atomic variable ++ * @i: integer value to subtract ++ * @v: pointer of type atomic_t ++ * ++ * Atomically test @v and subtract @i if @v is greater or equal than @i. ++ * The function returns the old value of @v minus @i. ++ */ ++static inline int atomic_sub_if_positive(int i, atomic_t *v) ++{ ++ int result; ++ ++ asm volatile( ++ "/* atomic_sub_if_positive */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " sub %0, %3\n" ++ " brlt 1f\n" ++ " stcond %1, %0\n" ++ " brne 1b\n" ++ "1:" ++ : "=&r"(result), "=o"(v->counter) ++ : "m"(v->counter), "ir"(i) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#define atomic_xchg(v, new) (xchg(&((v)->counter), new)) ++#define atomic_cmpxchg(v, o, n) ((int)cmpxchg(&((v)->counter), (o), (n))) ++ ++#define atomic_sub(i, v) (void)atomic_sub_return(i, v) ++#define atomic_add(i, v) (void)atomic_add_return(i, v) ++#define atomic_dec(v) atomic_sub(1, (v)) ++#define atomic_inc(v) atomic_add(1, (v)) ++ ++#define atomic_dec_return(v) atomic_sub_return(1, v) ++#define atomic_inc_return(v) atomic_add_return(1, v) ++ ++#define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0) ++#define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0) ++#define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0) ++#define atomic_add_negative(i, v) (atomic_add_return(i, v) < 0) ++ ++#define atomic_inc_not_zero(v) atomic_add_unless(v, 1, 0) ++#define atomic_dec_if_positive(v) atomic_sub_if_positive(1, v) ++ ++#define smp_mb__before_atomic_dec() barrier() ++#define smp_mb__after_atomic_dec() barrier() ++#define smp_mb__before_atomic_inc() barrier() ++#define smp_mb__after_atomic_inc() barrier() ++ ++#include ++ ++#endif /* __ASM_AVR32_ATOMIC_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/auxvec.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/auxvec.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,4 @@ ++#ifndef __ASM_AVR32_AUXVEC_H ++#define __ASM_AVR32_AUXVEC_H ++ ++#endif /* __ASM_AVR32_AUXVEC_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/bitops.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/bitops.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,296 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_BITOPS_H ++#define __ASM_AVR32_BITOPS_H ++ ++#include ++#include ++ ++/* ++ * clear_bit() doesn't provide any barrier for the compiler ++ */ ++#define smp_mb__before_clear_bit() barrier() ++#define smp_mb__after_clear_bit() barrier() ++ ++/* ++ * set_bit - Atomically set a bit in memory ++ * @nr: the bit to set ++ * @addr: the address to start counting from ++ * ++ * This function is atomic and may not be reordered. See __set_bit() ++ * if you do not require the atomic guarantees. ++ * ++ * Note that @nr may be almost arbitrarily large; this function is not ++ * restricted to acting on a single-word quantity. ++ */ ++static inline void set_bit(int nr, volatile void * addr) ++{ ++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG; ++ unsigned long tmp; ++ ++ if (__builtin_constant_p(nr)) { ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " sbr %0, %3\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p) ++ : "m"(*p), "i"(nr) ++ : "cc"); ++ } else { ++ unsigned long mask = 1UL << (nr % BITS_PER_LONG); ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " or %0, %3\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p) ++ : "m"(*p), "r"(mask) ++ : "cc"); ++ } ++} ++ ++/* ++ * clear_bit - Clears a bit in memory ++ * @nr: Bit to clear ++ * @addr: Address to start counting from ++ * ++ * clear_bit() is atomic and may not be reordered. However, it does ++ * not contain a memory barrier, so if it is used for locking purposes, ++ * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit() ++ * in order to ensure changes are visible on other processors. ++ */ ++static inline void clear_bit(int nr, volatile void * addr) ++{ ++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG; ++ unsigned long tmp; ++ ++ if (__builtin_constant_p(nr)) { ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " cbr %0, %3\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p) ++ : "m"(*p), "i"(nr) ++ : "cc"); ++ } else { ++ unsigned long mask = 1UL << (nr % BITS_PER_LONG); ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " andn %0, %3\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p) ++ : "m"(*p), "r"(mask) ++ : "cc"); ++ } ++} ++ ++/* ++ * change_bit - Toggle a bit in memory ++ * @nr: Bit to change ++ * @addr: Address to start counting from ++ * ++ * change_bit() is atomic and may not be reordered. ++ * Note that @nr may be almost arbitrarily large; this function is not ++ * restricted to acting on a single-word quantity. ++ */ ++static inline void change_bit(int nr, volatile void * addr) ++{ ++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG; ++ unsigned long mask = 1UL << (nr % BITS_PER_LONG); ++ unsigned long tmp; ++ ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " eor %0, %3\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p) ++ : "m"(*p), "r"(mask) ++ : "cc"); ++} ++ ++/* ++ * test_and_set_bit - Set a bit and return its old value ++ * @nr: Bit to set ++ * @addr: Address to count from ++ * ++ * This operation is atomic and cannot be reordered. ++ * It also implies a memory barrier. ++ */ ++static inline int test_and_set_bit(int nr, volatile void * addr) ++{ ++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG; ++ unsigned long mask = 1UL << (nr % BITS_PER_LONG); ++ unsigned long tmp, old; ++ ++ if (__builtin_constant_p(nr)) { ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " mov %2, %0\n" ++ " sbr %0, %4\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p), "=&r"(old) ++ : "m"(*p), "i"(nr) ++ : "memory", "cc"); ++ } else { ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %2, %3\n" ++ " or %0, %2, %4\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p), "=&r"(old) ++ : "m"(*p), "r"(mask) ++ : "memory", "cc"); ++ } ++ ++ return (old & mask) != 0; ++} ++ ++/* ++ * test_and_clear_bit - Clear a bit and return its old value ++ * @nr: Bit to clear ++ * @addr: Address to count from ++ * ++ * This operation is atomic and cannot be reordered. ++ * It also implies a memory barrier. ++ */ ++static inline int test_and_clear_bit(int nr, volatile void * addr) ++{ ++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG; ++ unsigned long mask = 1UL << (nr % BITS_PER_LONG); ++ unsigned long tmp, old; ++ ++ if (__builtin_constant_p(nr)) { ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " mov %2, %0\n" ++ " cbr %0, %4\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p), "=&r"(old) ++ : "m"(*p), "i"(nr) ++ : "memory", "cc"); ++ } else { ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " mov %2, %0\n" ++ " andn %0, %4\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p), "=&r"(old) ++ : "m"(*p), "r"(mask) ++ : "memory", "cc"); ++ } ++ ++ return (old & mask) != 0; ++} ++ ++/* ++ * test_and_change_bit - Change a bit and return its old value ++ * @nr: Bit to change ++ * @addr: Address to count from ++ * ++ * This operation is atomic and cannot be reordered. ++ * It also implies a memory barrier. ++ */ ++static inline int test_and_change_bit(int nr, volatile void * addr) ++{ ++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG; ++ unsigned long mask = 1UL << (nr % BITS_PER_LONG); ++ unsigned long tmp, old; ++ ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %2, %3\n" ++ " eor %0, %2, %4\n" ++ " stcond %1, %0\n" ++ " brne 1b" ++ : "=&r"(tmp), "=o"(*p), "=&r"(old) ++ : "m"(*p), "r"(mask) ++ : "memory", "cc"); ++ ++ return (old & mask) != 0; ++} ++ ++#include ++ ++/* Find First bit Set */ ++static inline unsigned long __ffs(unsigned long word) ++{ ++ unsigned long result; ++ ++ asm("brev %1\n\t" ++ "clz %0,%1" ++ : "=r"(result), "=&r"(word) ++ : "1"(word)); ++ return result; ++} ++ ++/* Find First Zero */ ++static inline unsigned long ffz(unsigned long word) ++{ ++ return __ffs(~word); ++} ++ ++/* Find Last bit Set */ ++static inline int fls(unsigned long word) ++{ ++ unsigned long result; ++ ++ asm("clz %0,%1" : "=r"(result) : "r"(word)); ++ return 32 - result; ++} ++ ++unsigned long find_first_zero_bit(const unsigned long *addr, ++ unsigned long size); ++unsigned long find_next_zero_bit(const unsigned long *addr, ++ unsigned long size, ++ unsigned long offset); ++unsigned long find_first_bit(const unsigned long *addr, ++ unsigned long size); ++unsigned long find_next_bit(const unsigned long *addr, ++ unsigned long size, ++ unsigned long offset); ++ ++/* ++ * ffs: find first bit set. This is defined the same way as ++ * the libc and compiler builtin ffs routines, therefore ++ * differs in spirit from the above ffz (man ffs). ++ * ++ * The difference is that bit numbering starts at 1, and if no bit is set, ++ * the function returns 0. ++ */ ++static inline int ffs(unsigned long word) ++{ ++ if(word == 0) ++ return 0; ++ return __ffs(word) + 1; ++} ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#endif /* __ASM_AVR32_BITOPS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/bug.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/bug.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,47 @@ ++/* ++ * Copyright (C) 2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_BUG_H ++#define __ASM_AVR32_BUG_H ++ ++#ifdef CONFIG_BUG ++ ++/* ++ * According to our Chief Architect, this compact opcode is very ++ * unlikely to ever be implemented. ++ */ ++#define AVR32_BUG_OPCODE 0x5df0 ++ ++#ifdef CONFIG_DEBUG_BUGVERBOSE ++ ++#define BUG() \ ++ do { \ ++ asm volatile(".hword %0\n\t" \ ++ ".hword %1\n\t" \ ++ ".long %2" \ ++ : \ ++ : "n"(AVR32_BUG_OPCODE), \ ++ "i"(__LINE__), "X"(__FILE__)); \ ++ } while (0) ++ ++#else ++ ++#define BUG() \ ++ do { \ ++ asm volatile(".hword %0\n\t" \ ++ : : "n"(AVR32_BUG_OPCODE)); \ ++ } while (0) ++ ++#endif /* CONFIG_DEBUG_BUGVERBOSE */ ++ ++#define HAVE_ARCH_BUG ++ ++#endif /* CONFIG_BUG */ ++ ++#include ++ ++#endif /* __ASM_AVR32_BUG_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/bugs.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/bugs.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,15 @@ ++/* ++ * This is included by init/main.c to check for architecture-dependent bugs. ++ * ++ * Needs: ++ * void check_bugs(void); ++ */ ++#ifndef __ASM_AVR32_BUGS_H ++#define __ASM_AVR32_BUGS_H ++ ++static void __init check_bugs(void) ++{ ++ cpu_data->loops_per_jiffy = loops_per_jiffy; ++} ++ ++#endif /* __ASM_AVR32_BUGS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/byteorder.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/byteorder.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,25 @@ ++/* ++ * AVR32 endian-conversion functions. ++ */ ++#ifndef __ASM_AVR32_BYTEORDER_H ++#define __ASM_AVR32_BYTEORDER_H ++ ++#include ++#include ++ ++#ifdef __CHECKER__ ++extern unsigned long __builtin_bswap_32(unsigned long x); ++extern unsigned short __builtin_bswap_16(unsigned short x); ++#endif ++ ++#define __arch__swab32(x) __builtin_bswap_32(x) ++#define __arch__swab16(x) __builtin_bswap_16(x) ++ ++#if !defined(__STRICT_ANSI__) || defined(__KERNEL__) ++# define __BYTEORDER_HAS_U64__ ++# define __SWAB_64_THRU_32__ ++#endif ++ ++#include ++ ++#endif /* __ASM_AVR32_BYTEORDER_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/cache.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/cache.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,29 @@ ++#ifndef __ASM_AVR32_CACHE_H ++#define __ASM_AVR32_CACHE_H ++ ++#define L1_CACHE_SHIFT 5 ++#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) ++ ++#ifndef __ASSEMBLER__ ++struct cache_info { ++ unsigned int ways; ++ unsigned int sets; ++ unsigned int linesz; ++}; ++#endif /* __ASSEMBLER */ ++ ++/* Cache operation constants */ ++#define ICACHE_FLUSH 0x00 ++#define ICACHE_INVALIDATE 0x01 ++#define ICACHE_LOCK 0x02 ++#define ICACHE_UNLOCK 0x03 ++#define ICACHE_PREFETCH 0x04 ++ ++#define DCACHE_FLUSH 0x08 ++#define DCACHE_LOCK 0x09 ++#define DCACHE_UNLOCK 0x0a ++#define DCACHE_INVALIDATE 0x0b ++#define DCACHE_CLEAN 0x0c ++#define DCACHE_CLEAN_INVAL 0x0d ++ ++#endif /* __ASM_AVR32_CACHE_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/cachectl.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/cachectl.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,11 @@ ++#ifndef __ASM_AVR32_CACHECTL_H ++#define __ASM_AVR32_CACHECTL_H ++ ++/* ++ * Operations that can be performed through the cacheflush system call ++ */ ++ ++/* Clean the data cache, then invalidate the icache */ ++#define CACHE_IFLUSH 0 ++ ++#endif /* __ASM_AVR32_CACHECTL_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/cacheflush.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/cacheflush.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,129 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_CACHEFLUSH_H ++#define __ASM_AVR32_CACHEFLUSH_H ++ ++/* Keep includes the same across arches. */ ++#include ++ ++#define CACHE_OP_ICACHE_INVALIDATE 0x01 ++#define CACHE_OP_DCACHE_INVALIDATE 0x0b ++#define CACHE_OP_DCACHE_CLEAN 0x0c ++#define CACHE_OP_DCACHE_CLEAN_INVAL 0x0d ++ ++/* ++ * Invalidate any cacheline containing virtual address vaddr without ++ * writing anything back to memory. ++ * ++ * Note that this function may corrupt unrelated data structures when ++ * applied on buffers that are not cacheline aligned in both ends. ++ */ ++static inline void invalidate_dcache_line(void *vaddr) ++{ ++ asm volatile("cache %0[0], %1" ++ : ++ : "r"(vaddr), "n"(CACHE_OP_DCACHE_INVALIDATE) ++ : "memory"); ++} ++ ++/* ++ * Make sure any cacheline containing virtual address vaddr is written ++ * to memory. ++ */ ++static inline void clean_dcache_line(void *vaddr) ++{ ++ asm volatile("cache %0[0], %1" ++ : ++ : "r"(vaddr), "n"(CACHE_OP_DCACHE_CLEAN) ++ : "memory"); ++} ++ ++/* ++ * Make sure any cacheline containing virtual address vaddr is written ++ * to memory and then invalidate it. ++ */ ++static inline void flush_dcache_line(void *vaddr) ++{ ++ asm volatile("cache %0[0], %1" ++ : ++ : "r"(vaddr), "n"(CACHE_OP_DCACHE_CLEAN_INVAL) ++ : "memory"); ++} ++ ++/* ++ * Invalidate any instruction cacheline containing virtual address ++ * vaddr. ++ */ ++static inline void invalidate_icache_line(void *vaddr) ++{ ++ asm volatile("cache %0[0], %1" ++ : ++ : "r"(vaddr), "n"(CACHE_OP_ICACHE_INVALIDATE) ++ : "memory"); ++} ++ ++/* ++ * Applies the above functions on all lines that are touched by the ++ * specified virtual address range. ++ */ ++void invalidate_dcache_region(void *start, size_t len); ++void clean_dcache_region(void *start, size_t len); ++void flush_dcache_region(void *start, size_t len); ++void invalidate_icache_region(void *start, size_t len); ++ ++/* ++ * Make sure any pending writes are completed before continuing. ++ */ ++#define flush_write_buffer() asm volatile("sync 0" : : : "memory") ++ ++/* ++ * The following functions are called when a virtual mapping changes. ++ * We do not need to flush anything in this case. ++ */ ++#define flush_cache_all() do { } while (0) ++#define flush_cache_mm(mm) do { } while (0) ++#define flush_cache_range(vma, start, end) do { } while (0) ++#define flush_cache_page(vma, vmaddr, pfn) do { } while (0) ++#define flush_cache_vmap(start, end) do { } while (0) ++#define flush_cache_vunmap(start, end) do { } while (0) ++ ++/* ++ * I think we need to implement this one to be able to reliably ++ * execute pages from RAMDISK. However, if we implement the ++ * flush_dcache_*() functions, it might not be needed anymore. ++ * ++ * #define flush_icache_page(vma, page) do { } while (0) ++ */ ++extern void flush_icache_page(struct vm_area_struct *vma, struct page *page); ++ ++/* ++ * These are (I think) related to D-cache aliasing. We might need to ++ * do something here, but only for certain configurations. No such ++ * configurations exist at this time. ++ */ ++#define flush_dcache_page(page) do { } while (0) ++#define flush_dcache_mmap_lock(page) do { } while (0) ++#define flush_dcache_mmap_unlock(page) do { } while (0) ++ ++/* ++ * These are for I/D cache coherency. In this case, we do need to ++ * flush with all configurations. ++ */ ++extern void flush_icache_range(unsigned long start, unsigned long end); ++extern void flush_icache_user_range(struct vm_area_struct *vma, ++ struct page *page, ++ unsigned long addr, int len); ++ ++#define copy_to_user_page(vma, page, vaddr, dst, src, len) do { \ ++ memcpy(dst, src, len); \ ++ flush_icache_user_range(vma, page, vaddr, len); \ ++} while(0) ++#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ ++ memcpy(dst, src, len) ++ ++#endif /* __ASM_AVR32_CACHEFLUSH_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/checksum.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/checksum.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,156 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_CHECKSUM_H ++#define __ASM_AVR32_CHECKSUM_H ++ ++/* ++ * computes the checksum of a memory block at buff, length len, ++ * and adds in "sum" (32-bit) ++ * ++ * returns a 32-bit number suitable for feeding into itself ++ * or csum_tcpudp_magic ++ * ++ * this function must be called with even lengths, except ++ * for the last fragment, which may be odd ++ * ++ * it's best to have buff aligned on a 32-bit boundary ++ */ ++unsigned int csum_partial(const unsigned char * buff, int len, ++ unsigned int sum); ++ ++/* ++ * the same as csum_partial, but copies from src while it ++ * checksums, and handles user-space pointer exceptions correctly, when needed. ++ * ++ * here even more important to align src and dst on a 32-bit (or even ++ * better 64-bit) boundary ++ */ ++unsigned int csum_partial_copy_generic(const char *src, char *dst, int len, ++ int sum, int *src_err_ptr, ++ int *dst_err_ptr); ++ ++/* ++ * Note: when you get a NULL pointer exception here this means someone ++ * passed in an incorrect kernel address to one of these functions. ++ * ++ * If you use these functions directly please don't forget the ++ * verify_area(). ++ */ ++static inline ++unsigned int csum_partial_copy_nocheck(const char *src, char *dst, ++ int len, int sum) ++{ ++ return csum_partial_copy_generic(src, dst, len, sum, NULL, NULL); ++} ++ ++static inline ++unsigned int csum_partial_copy_from_user (const char __user *src, char *dst, ++ int len, int sum, int *err_ptr) ++{ ++ return csum_partial_copy_generic((const char __force *)src, dst, len, ++ sum, err_ptr, NULL); ++} ++ ++/* ++ * This is a version of ip_compute_csum() optimized for IP headers, ++ * which always checksum on 4 octet boundaries. ++ */ ++static inline unsigned short ip_fast_csum(unsigned char *iph, ++ unsigned int ihl) ++{ ++ unsigned int sum, tmp; ++ ++ __asm__ __volatile__( ++ " ld.w %0, %1++\n" ++ " ld.w %3, %1++\n" ++ " sub %2, 4\n" ++ " add %0, %3\n" ++ " ld.w %3, %1++\n" ++ " adc %0, %0, %3\n" ++ " ld.w %3, %1++\n" ++ " adc %0, %0, %3\n" ++ " acr %0\n" ++ "1: ld.w %3, %1++\n" ++ " add %0, %3\n" ++ " acr %0\n" ++ " sub %2, 1\n" ++ " brne 1b\n" ++ " lsl %3, %0, 16\n" ++ " andl %0, 0\n" ++ " mov %2, 0xffff\n" ++ " add %0, %3\n" ++ " adc %0, %0, %2\n" ++ " com %0\n" ++ " lsr %0, 16\n" ++ : "=r"(sum), "=r"(iph), "=r"(ihl), "=r"(tmp) ++ : "1"(iph), "2"(ihl) ++ : "memory", "cc"); ++ return sum; ++} ++ ++/* ++ * Fold a partial checksum ++ */ ++ ++static inline unsigned int csum_fold(unsigned int sum) ++{ ++ unsigned int tmp; ++ ++ asm(" bfextu %1, %0, 0, 16\n" ++ " lsr %0, 16\n" ++ " add %0, %1\n" ++ " bfextu %1, %0, 16, 16\n" ++ " add %0, %1" ++ : "=&r"(sum), "=&r"(tmp) ++ : "0"(sum)); ++ ++ return ~sum; ++} ++ ++static inline unsigned long csum_tcpudp_nofold(unsigned long saddr, ++ unsigned long daddr, ++ unsigned short len, ++ unsigned short proto, ++ unsigned int sum) ++{ ++ asm(" add %0, %1\n" ++ " adc %0, %0, %2\n" ++ " adc %0, %0, %3\n" ++ " acr %0" ++ : "=r"(sum) ++ : "r"(daddr), "r"(saddr), "r"(ntohs(len) | (proto << 16)), ++ "0"(sum) ++ : "cc"); ++ ++ return sum; ++} ++ ++/* ++ * computes the checksum of the TCP/UDP pseudo-header ++ * returns a 16-bit checksum, already complemented ++ */ ++static inline unsigned short int csum_tcpudp_magic(unsigned long saddr, ++ unsigned long daddr, ++ unsigned short len, ++ unsigned short proto, ++ unsigned int sum) ++{ ++ return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum)); ++} ++ ++/* ++ * this routine is used for miscellaneous IP-like checksums, mainly ++ * in icmp.c ++ */ ++ ++static inline unsigned short ip_compute_csum(unsigned char * buff, int len) ++{ ++ return csum_fold(csum_partial(buff, len, 0)); ++} ++ ++#endif /* __ASM_AVR32_CHECKSUM_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/cputime.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/cputime.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_CPUTIME_H ++#define __ASM_AVR32_CPUTIME_H ++ ++#include ++ ++#endif /* __ASM_AVR32_CPUTIME_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/current.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/current.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,15 @@ ++#ifndef __ASM_AVR32_CURRENT_H ++#define __ASM_AVR32_CURRENT_H ++ ++#include ++ ++struct task_struct; ++ ++inline static struct task_struct * get_current(void) ++{ ++ return current_thread_info()->task; ++} ++ ++#define current get_current() ++ ++#endif /* __ASM_AVR32_CURRENT_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/delay.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/delay.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,26 @@ ++#ifndef __ASM_AVR32_DELAY_H ++#define __ASM_AVR32_DELAY_H ++ ++/* ++ * Copyright (C) 1993 Linus Torvalds ++ * ++ * Delay routines calling functions in arch/avr32/lib/delay.c ++ */ ++ ++extern void __bad_udelay(void); ++extern void __bad_ndelay(void); ++ ++extern void __udelay(unsigned long usecs); ++extern void __ndelay(unsigned long nsecs); ++extern void __const_udelay(unsigned long usecs); ++extern void __delay(unsigned long loops); ++ ++#define udelay(n) (__builtin_constant_p(n) ? \ ++ ((n) > 20000 ? __bad_udelay() : __const_udelay((n) * 0x10c6ul)) : \ ++ __udelay(n)) ++ ++#define ndelay(n) (__builtin_constant_p(n) ? \ ++ ((n) > 20000 ? __bad_ndelay() : __const_udelay((n) * 5ul)) : \ ++ __ndelay(n)) ++ ++#endif /* __ASM_AVR32_DELAY_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/div64.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/div64.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_DIV64_H ++#define __ASM_AVR32_DIV64_H ++ ++#include ++ ++#endif /* __ASM_AVR32_DIV64_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/dma-mapping.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/dma-mapping.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,320 @@ ++#ifndef __ASM_AVR32_DMA_MAPPING_H ++#define __ASM_AVR32_DMA_MAPPING_H ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++extern void dma_cache_sync(void *vaddr, size_t size, int direction); ++ ++/* ++ * Return whether the given device DMA address mask can be supported ++ * properly. For example, if your device can only drive the low 24-bits ++ * during bus mastering, then you would pass 0x00ffffff as the mask ++ * to this function. ++ */ ++static inline int dma_supported(struct device *dev, u64 mask) ++{ ++ /* Fix when needed. I really don't know of any limitations */ ++ return 1; ++} ++ ++static inline int dma_set_mask(struct device *dev, u64 dma_mask) ++{ ++ if (!dev->dma_mask || !dma_supported(dev, dma_mask)) ++ return -EIO; ++ ++ *dev->dma_mask = dma_mask; ++ return 0; ++} ++ ++/** ++ * dma_alloc_coherent - allocate consistent memory for DMA ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @size: required memory size ++ * @handle: bus-specific DMA address ++ * ++ * Allocate some uncached, unbuffered memory for a device for ++ * performing DMA. This function allocates pages, and will ++ * return the CPU-viewed address, and sets @handle to be the ++ * device-viewed address. ++ */ ++extern void *dma_alloc_coherent(struct device *dev, size_t size, ++ dma_addr_t *handle, gfp_t gfp); ++ ++/** ++ * dma_free_coherent - free memory allocated by dma_alloc_coherent ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @size: size of memory originally requested in dma_alloc_coherent ++ * @cpu_addr: CPU-view address returned from dma_alloc_coherent ++ * @handle: device-view address returned from dma_alloc_coherent ++ * ++ * Free (and unmap) a DMA buffer previously allocated by ++ * dma_alloc_coherent(). ++ * ++ * References to memory and mappings associated with cpu_addr/handle ++ * during and after this call executing are illegal. ++ */ ++extern void dma_free_coherent(struct device *dev, size_t size, ++ void *cpu_addr, dma_addr_t handle); ++ ++/** ++ * dma_alloc_writecombine - allocate write-combining memory for DMA ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @size: required memory size ++ * @handle: bus-specific DMA address ++ * ++ * Allocate some uncached, buffered memory for a device for ++ * performing DMA. This function allocates pages, and will ++ * return the CPU-viewed address, and sets @handle to be the ++ * device-viewed address. ++ */ ++extern void *dma_alloc_writecombine(struct device *dev, size_t size, ++ dma_addr_t *handle, gfp_t gfp); ++ ++/** ++ * dma_free_coherent - free memory allocated by dma_alloc_writecombine ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @size: size of memory originally requested in dma_alloc_writecombine ++ * @cpu_addr: CPU-view address returned from dma_alloc_writecombine ++ * @handle: device-view address returned from dma_alloc_writecombine ++ * ++ * Free (and unmap) a DMA buffer previously allocated by ++ * dma_alloc_writecombine(). ++ * ++ * References to memory and mappings associated with cpu_addr/handle ++ * during and after this call executing are illegal. ++ */ ++extern void dma_free_writecombine(struct device *dev, size_t size, ++ void *cpu_addr, dma_addr_t handle); ++ ++/** ++ * dma_map_single - map a single buffer for streaming DMA ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @cpu_addr: CPU direct mapped address of buffer ++ * @size: size of buffer to map ++ * @dir: DMA transfer direction ++ * ++ * Ensure that any data held in the cache is appropriately discarded ++ * or written back. ++ * ++ * The device owns this memory once this call has completed. The CPU ++ * can regain ownership by calling dma_unmap_single() or dma_sync_single(). ++ */ ++static inline dma_addr_t ++dma_map_single(struct device *dev, void *cpu_addr, size_t size, ++ enum dma_data_direction direction) ++{ ++ dma_cache_sync(cpu_addr, size, direction); ++ return virt_to_bus(cpu_addr); ++} ++ ++/** ++ * dma_unmap_single - unmap a single buffer previously mapped ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @handle: DMA address of buffer ++ * @size: size of buffer to map ++ * @dir: DMA transfer direction ++ * ++ * Unmap a single streaming mode DMA translation. The handle and size ++ * must match what was provided in the previous dma_map_single() call. ++ * All other usages are undefined. ++ * ++ * After this call, reads by the CPU to the buffer are guaranteed to see ++ * whatever the device wrote there. ++ */ ++static inline void ++dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, ++ enum dma_data_direction direction) ++{ ++ ++} ++ ++/** ++ * dma_map_page - map a portion of a page for streaming DMA ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @page: page that buffer resides in ++ * @offset: offset into page for start of buffer ++ * @size: size of buffer to map ++ * @dir: DMA transfer direction ++ * ++ * Ensure that any data held in the cache is appropriately discarded ++ * or written back. ++ * ++ * The device owns this memory once this call has completed. The CPU ++ * can regain ownership by calling dma_unmap_page() or dma_sync_single(). ++ */ ++static inline dma_addr_t ++dma_map_page(struct device *dev, struct page *page, ++ unsigned long offset, size_t size, ++ enum dma_data_direction direction) ++{ ++ return dma_map_single(dev, page_address(page) + offset, ++ size, direction); ++} ++ ++/** ++ * dma_unmap_page - unmap a buffer previously mapped through dma_map_page() ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @handle: DMA address of buffer ++ * @size: size of buffer to map ++ * @dir: DMA transfer direction ++ * ++ * Unmap a single streaming mode DMA translation. The handle and size ++ * must match what was provided in the previous dma_map_single() call. ++ * All other usages are undefined. ++ * ++ * After this call, reads by the CPU to the buffer are guaranteed to see ++ * whatever the device wrote there. ++ */ ++static inline void ++dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, ++ enum dma_data_direction direction) ++{ ++ dma_unmap_single(dev, dma_address, size, direction); ++} ++ ++/** ++ * dma_map_sg - map a set of SG buffers for streaming mode DMA ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @sg: list of buffers ++ * @nents: number of buffers to map ++ * @dir: DMA transfer direction ++ * ++ * Map a set of buffers described by scatterlist in streaming ++ * mode for DMA. This is the scatter-gather version of the ++ * above pci_map_single interface. Here the scatter gather list ++ * elements are each tagged with the appropriate dma address ++ * and length. They are obtained via sg_dma_{address,length}(SG). ++ * ++ * NOTE: An implementation may be able to use a smaller number of ++ * DMA address/length pairs than there are SG table elements. ++ * (for example via virtual mapping capabilities) ++ * The routine returns the number of addr/length pairs actually ++ * used, at most nents. ++ * ++ * Device ownership issues as mentioned above for pci_map_single are ++ * the same here. ++ */ ++static inline int ++dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, ++ enum dma_data_direction direction) ++{ ++ int i; ++ ++ for (i = 0; i < nents; i++) { ++ char *virt; ++ ++ sg[i].dma_address = page_to_bus(sg[i].page) + sg[i].offset; ++ virt = page_address(sg[i].page) + sg[i].offset; ++ dma_cache_sync(virt, sg[i].length, direction); ++ } ++ ++ return nents; ++} ++ ++/** ++ * dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @sg: list of buffers ++ * @nents: number of buffers to map ++ * @dir: DMA transfer direction ++ * ++ * Unmap a set of streaming mode DMA translations. ++ * Again, CPU read rules concerning calls here are the same as for ++ * pci_unmap_single() above. ++ */ ++static inline void ++dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, ++ enum dma_data_direction direction) ++{ ++ ++} ++ ++/** ++ * dma_sync_single_for_cpu ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @handle: DMA address of buffer ++ * @size: size of buffer to map ++ * @dir: DMA transfer direction ++ * ++ * Make physical memory consistent for a single streaming mode DMA ++ * translation after a transfer. ++ * ++ * If you perform a dma_map_single() but wish to interrogate the ++ * buffer using the cpu, yet do not wish to teardown the DMA mapping, ++ * you must call this function before doing so. At the next point you ++ * give the DMA address back to the card, you must first perform a ++ * dma_sync_single_for_device, and then the device again owns the ++ * buffer. ++ */ ++static inline void ++dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, ++ size_t size, enum dma_data_direction direction) ++{ ++ dma_cache_sync(bus_to_virt(dma_handle), size, direction); ++} ++ ++static inline void ++dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, ++ size_t size, enum dma_data_direction direction) ++{ ++ dma_cache_sync(bus_to_virt(dma_handle), size, direction); ++} ++ ++/** ++ * dma_sync_sg_for_cpu ++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices ++ * @sg: list of buffers ++ * @nents: number of buffers to map ++ * @dir: DMA transfer direction ++ * ++ * Make physical memory consistent for a set of streaming ++ * mode DMA translations after a transfer. ++ * ++ * The same as dma_sync_single_for_* but for a scatter-gather list, ++ * same rules and usage. ++ */ ++static inline void ++dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, ++ int nents, enum dma_data_direction direction) ++{ ++ int i; ++ ++ for (i = 0; i < nents; i++) { ++ dma_cache_sync(page_address(sg[i].page) + sg[i].offset, ++ sg[i].length, direction); ++ } ++} ++ ++static inline void ++dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, ++ int nents, enum dma_data_direction direction) ++{ ++ int i; ++ ++ for (i = 0; i < nents; i++) { ++ dma_cache_sync(page_address(sg[i].page) + sg[i].offset, ++ sg[i].length, direction); ++ } ++} ++ ++/* Now for the API extensions over the pci_ one */ ++ ++#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) ++#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) ++ ++static inline int dma_is_consistent(dma_addr_t dma_addr) ++{ ++ return 1; ++} ++ ++static inline int dma_get_cache_alignment(void) ++{ ++ return boot_cpu_data.dcache.linesz; ++} ++ ++#endif /* __ASM_AVR32_DMA_MAPPING_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/dma.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/dma.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,8 @@ ++#ifndef __ASM_AVR32_DMA_H ++#define __ASM_AVR32_DMA_H ++ ++/* The maximum address that we can perform a DMA transfer to on this platform. ++ * Not really applicable to AVR32, but some functions need it. */ ++#define MAX_DMA_ADDRESS 0xffffffff ++ ++#endif /* __ASM_AVR32_DMA_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/elf.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/elf.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,110 @@ ++#ifndef __ASM_AVR32_ELF_H ++#define __ASM_AVR32_ELF_H ++ ++/* AVR32 relocation numbers */ ++#define R_AVR32_NONE 0 ++#define R_AVR32_32 1 ++#define R_AVR32_16 2 ++#define R_AVR32_8 3 ++#define R_AVR32_32_PCREL 4 ++#define R_AVR32_16_PCREL 5 ++#define R_AVR32_8_PCREL 6 ++#define R_AVR32_DIFF32 7 ++#define R_AVR32_DIFF16 8 ++#define R_AVR32_DIFF8 9 ++#define R_AVR32_GOT32 10 ++#define R_AVR32_GOT16 11 ++#define R_AVR32_GOT8 12 ++#define R_AVR32_21S 13 ++#define R_AVR32_16U 14 ++#define R_AVR32_16S 15 ++#define R_AVR32_8S 16 ++#define R_AVR32_8S_EXT 17 ++#define R_AVR32_22H_PCREL 18 ++#define R_AVR32_18W_PCREL 19 ++#define R_AVR32_16B_PCREL 20 ++#define R_AVR32_16N_PCREL 21 ++#define R_AVR32_14UW_PCREL 22 ++#define R_AVR32_11H_PCREL 23 ++#define R_AVR32_10UW_PCREL 24 ++#define R_AVR32_9H_PCREL 25 ++#define R_AVR32_9UW_PCREL 26 ++#define R_AVR32_HI16 27 ++#define R_AVR32_LO16 28 ++#define R_AVR32_GOTPC 29 ++#define R_AVR32_GOTCALL 30 ++#define R_AVR32_LDA_GOT 31 ++#define R_AVR32_GOT21S 32 ++#define R_AVR32_GOT18SW 33 ++#define R_AVR32_GOT16S 34 ++#define R_AVR32_GOT7UW 35 ++#define R_AVR32_32_CPENT 36 ++#define R_AVR32_CPCALL 37 ++#define R_AVR32_16_CP 38 ++#define R_AVR32_9W_CP 39 ++#define R_AVR32_RELATIVE 40 ++#define R_AVR32_GLOB_DAT 41 ++#define R_AVR32_JMP_SLOT 42 ++#define R_AVR32_ALIGN 43 ++ ++/* ++ * ELF register definitions.. ++ */ ++ ++#include ++#include ++ ++typedef unsigned long elf_greg_t; ++ ++#define ELF_NGREG (sizeof (struct pt_regs) / sizeof (elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++typedef struct user_fpu_struct elf_fpregset_t; ++ ++/* ++ * This is used to ensure we don't load something for the wrong architecture. ++ */ ++#define elf_check_arch(x) ( (x)->e_machine == EM_AVR32 ) ++ ++/* ++ * These are used to set parameters in the core dumps. ++ */ ++#define ELF_CLASS ELFCLASS32 ++#ifdef __LITTLE_ENDIAN__ ++#define ELF_DATA ELFDATA2LSB ++#else ++#define ELF_DATA ELFDATA2MSB ++#endif ++#define ELF_ARCH EM_AVR32 ++ ++#define USE_ELF_CORE_DUMP ++#define ELF_EXEC_PAGESIZE 4096 ++ ++/* This is the location that an ET_DYN program is loaded if exec'ed. Typical ++ use of this is to invoke "./ld.so someprog" to test out a new version of ++ the loader. We need to make sure that it is out of the way of the program ++ that it will "exec", and that there is sufficient room for the brk. */ ++ ++#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3) ++ ++ ++/* This yields a mask that user programs can use to figure out what ++ instruction set this CPU supports. This could be done in user space, ++ but it's not easy, and we've already done it here. */ ++ ++#define ELF_HWCAP (0) ++ ++/* This yields a string that ld.so will use to load implementation ++ specific libraries for optimization. This is more specific in ++ intent than poking at uname or /proc/cpuinfo. ++ ++ For the moment, we have only optimizations for the Intel generations, ++ but that could change... */ ++ ++#define ELF_PLATFORM (NULL) ++ ++#ifdef __KERNEL__ ++#define SET_PERSONALITY(ex, ibcs2) set_personality(PER_LINUX_32BIT) ++#endif ++ ++#endif /* __ASM_AVR32_ELF_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/emergency-restart.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/emergency-restart.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_EMERGENCY_RESTART_H ++#define __ASM_AVR32_EMERGENCY_RESTART_H ++ ++#include ++ ++#endif /* __ASM_AVR32_EMERGENCY_RESTART_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/errno.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/errno.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_ERRNO_H ++#define __ASM_AVR32_ERRNO_H ++ ++#include ++ ++#endif /* __ASM_AVR32_ERRNO_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/fcntl.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/fcntl.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_FCNTL_H ++#define __ASM_AVR32_FCNTL_H ++ ++#include ++ ++#endif /* __ASM_AVR32_FCNTL_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/futex.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/futex.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_FUTEX_H ++#define __ASM_AVR32_FUTEX_H ++ ++#include ++ ++#endif /* __ASM_AVR32_FUTEX_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/hardirq.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/hardirq.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,34 @@ ++#ifndef __ASM_AVR32_HARDIRQ_H ++#define __ASM_AVR32_HARDIRQ_H ++ ++#include ++#include ++ ++#ifndef __ASSEMBLY__ ++ ++#include ++ ++/* entry.S is sensitive to the offsets of these fields */ ++typedef struct { ++ unsigned int __softirq_pending; ++} ____cacheline_aligned irq_cpustat_t; ++ ++void ack_bad_irq(unsigned int irq); ++ ++/* Standard mappings for irq_cpustat_t above */ ++#include ++ ++#endif /* __ASSEMBLY__ */ ++ ++#define HARDIRQ_BITS 12 ++ ++/* ++ * The hardirq mask has to be large enough to have ++ * space for potentially all IRQ sources in the system ++ * nesting on a single CPU: ++ */ ++#if (1 << HARDIRQ_BITS) < NR_IRQS ++# error HARDIRQ_BITS is too low! ++#endif ++ ++#endif /* __ASM_AVR32_HARDIRQ_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/hw_irq.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/hw_irq.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,9 @@ ++#ifndef __ASM_AVR32_HW_IRQ_H ++#define __ASM_AVR32_HW_IRQ_H ++ ++static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i) ++{ ++ /* Nothing to do */ ++} ++ ++#endif /* __ASM_AVR32_HW_IRQ_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/intc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/intc.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,128 @@ ++#ifndef __ASM_AVR32_INTC_H ++#define __ASM_AVR32_INTC_H ++ ++#include ++#include ++ ++struct irq_controller; ++struct irqaction; ++struct pt_regs; ++ ++struct platform_device; ++ ++/* Information about the internal interrupt controller */ ++struct intc_device { ++ /* ioremapped address of configuration block */ ++ void __iomem *regs; ++ ++ /* the physical device */ ++ struct platform_device *pdev; ++ ++ /* Number of interrupt lines per group. */ ++ unsigned int irqs_per_group; ++ ++ /* The highest group ID + 1 */ ++ unsigned int nr_groups; ++ ++ /* ++ * Bitfield indicating which groups are actually in use. The ++ * size of the array is ++ * ceil(group_max / (8 * sizeof(unsigned int))). ++ */ ++ unsigned int group_mask[]; ++}; ++ ++struct irq_controller_class { ++ /* ++ * A short name identifying this kind of controller. ++ */ ++ const char *typename; ++ /* ++ * Handle the IRQ. Must do any necessary acking and masking. ++ */ ++ irqreturn_t (*handle)(int irq, void *dev_id, struct pt_regs *regs); ++ /* ++ * Register a new IRQ handler. ++ */ ++ int (*setup)(struct irq_controller *ctrl, unsigned int irq, ++ struct irqaction *action); ++ /* ++ * Unregister a IRQ handler. ++ */ ++ void (*free)(struct irq_controller *ctrl, unsigned int irq, ++ void *dev_id); ++ /* ++ * Mask the IRQ in the interrupt controller. ++ */ ++ void (*mask)(struct irq_controller *ctrl, unsigned int irq); ++ /* ++ * Unmask the IRQ in the interrupt controller. ++ */ ++ void (*unmask)(struct irq_controller *ctrl, unsigned int irq); ++ /* ++ * Set the type of the IRQ. See below for possible types. ++ * Return -EINVAL if a given type is not supported ++ */ ++ int (*set_type)(struct irq_controller *ctrl, unsigned int irq, ++ unsigned int type); ++ /* ++ * Return the IRQ type currently set ++ */ ++ unsigned int (*get_type)(struct irq_controller *ctrl, unsigned int irq); ++}; ++ ++struct irq_controller { ++ struct irq_controller_class *class; ++ unsigned int irq_group; ++ unsigned int first_irq; ++ unsigned int nr_irqs; ++ struct list_head list; ++}; ++ ++struct intc_group_desc { ++ struct irq_controller *ctrl; ++ irqreturn_t (*handle)(int, void *, struct pt_regs *); ++ unsigned long flags; ++ void *dev_id; ++ const char *devname; ++}; ++ ++/* ++ * The internal interrupt controller. Defined in board/part-specific ++ * devices.c. ++ * TODO: Should probably be defined per-cpu. ++ */ ++extern struct intc_device intc; ++ ++extern int request_internal_irq(unsigned int irq, ++ irqreturn_t (*handler)(int, void *, struct pt_regs *), ++ unsigned long irqflags, ++ const char *devname, void *dev_id); ++extern void free_internal_irq(unsigned int irq); ++ ++/* Only used by time_init() */ ++extern int setup_internal_irq(unsigned int irq, struct intc_group_desc *desc); ++ ++/* ++ * Set interrupt priority for a given group. `group' can be found by ++ * using irq_to_group(irq). Priority can be from 0 (lowest) to 3 ++ * (highest). Higher-priority interrupts will preempt lower-priority ++ * interrupts (unless interrupts are masked globally). ++ * ++ * This function does not check for conflicts within a group. ++ */ ++extern int intc_set_priority(unsigned int group, ++ unsigned int priority); ++ ++/* ++ * Returns a bitmask of pending interrupts in a group. ++ */ ++extern unsigned long intc_get_pending(unsigned int group); ++ ++/* ++ * Register a new external interrupt controller. Returns the first ++ * external IRQ number that is assigned to the new controller. ++ */ ++extern int intc_register_controller(struct irq_controller *ctrl); ++ ++#endif /* __ASM_AVR32_INTC_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/io.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/io.h 2006-12-04 11:50:22.000000000 +0100 +@@ -0,0 +1,286 @@ ++#ifndef __ASM_AVR32_IO_H ++#define __ASM_AVR32_IO_H ++ ++#include ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++ ++/* virt_to_phys will only work when address is in P1 or P2 */ ++static __inline__ unsigned long virt_to_phys(volatile void *address) ++{ ++ return PHYSADDR(address); ++} ++ ++static __inline__ void * phys_to_virt(unsigned long address) ++{ ++ return (void *)P1SEGADDR(address); ++} ++ ++#define cached_to_phys(addr) ((unsigned long)PHYSADDR(addr)) ++#define uncached_to_phys(addr) ((unsigned long)PHYSADDR(addr)) ++#define phys_to_cached(addr) ((void *)P1SEGADDR(addr)) ++#define phys_to_uncached(addr) ((void *)P2SEGADDR(addr)) ++ ++/* ++ * Generic IO read/write. These perform native-endian accesses. Note ++ * that some architectures will want to re-define __raw_{read,write}w. ++ */ ++extern void __raw_writesb(unsigned int addr, const void *data, int bytelen); ++extern void __raw_writesw(unsigned int addr, const void *data, int wordlen); ++extern void __raw_writesl(unsigned int addr, const void *data, int longlen); ++ ++extern void __raw_readsb(unsigned int addr, void *data, int bytelen); ++extern void __raw_readsw(unsigned int addr, void *data, int wordlen); ++extern void __raw_readsl(unsigned int addr, void *data, int longlen); ++ ++static inline void writeb(unsigned char b, volatile void __iomem *addr) ++{ ++ *(volatile unsigned char __force *)addr = b; ++} ++static inline void writew(unsigned short b, volatile void __iomem *addr) ++{ ++ *(volatile unsigned short __force *)addr = b; ++} ++static inline void writel(unsigned int b, volatile void __iomem *addr) ++{ ++ *(volatile unsigned int __force *)addr = b; ++} ++#define __raw_writeb writeb ++#define __raw_writew writew ++#define __raw_writel writel ++ ++static inline unsigned char readb(const volatile void __iomem *addr) ++{ ++ return *(const volatile unsigned char __force *)addr; ++} ++static inline unsigned short readw(const volatile void __iomem *addr) ++{ ++ return *(const volatile unsigned short __force *)addr; ++} ++static inline unsigned int readl(const volatile void __iomem *addr) ++{ ++ return *(const volatile unsigned int __force *)addr; ++} ++#define __raw_readb readb ++#define __raw_readw readw ++#define __raw_readl readl ++ ++#define writesb(p, d, l) __raw_writesb((unsigned int)p, d, l) ++#define writesw(p, d, l) __raw_writesw((unsigned int)p, d, l) ++#define writesl(p, d, l) __raw_writesl((unsigned int)p, d, l) ++ ++#define readsb(p, d, l) __raw_readsb((unsigned int)p, d, l) ++#define readsw(p, d, l) __raw_readsw((unsigned int)p, d, l) ++#define readsl(p, d, l) __raw_readsl((unsigned int)p, d, l) ++ ++ ++/* ++ * io{read,write}{8,16,32} macros in both le (for PCI style consumers) and native be ++ */ ++#ifndef ioread8 ++ ++#define ioread8(p) ({ unsigned int __v = __raw_readb(p); __v; }) ++ ++#define ioread16(p) ({ unsigned int __v = le16_to_cpu(__raw_readw(p)); __v; }) ++#define ioread16be(p) ({ unsigned int __v = be16_to_cpu(__raw_readw(p)); __v; }) ++ ++#define ioread32(p) ({ unsigned int __v = le32_to_cpu(__raw_readl(p)); __v; }) ++#define ioread32be(p) ({ unsigned int __v = be32_to_cpu(__raw_readl(p)); __v; }) ++ ++#define iowrite8(v,p) __raw_writeb(v, p) ++ ++#define iowrite16(v,p) __raw_writew(cpu_to_le16(v), p) ++#define iowrite16be(v,p) __raw_writew(cpu_to_be16(v), p) ++ ++#define iowrite32(v,p) __raw_writel(cpu_to_le32(v), p) ++#define iowrite32be(v,p) __raw_writel(cpu_to_be32(v), p) ++ ++#define ioread8_rep(p,d,c) __raw_readsb(p,d,c) ++#define ioread16_rep(p,d,c) __raw_readsw(p,d,c) ++#define ioread32_rep(p,d,c) __raw_readsl(p,d,c) ++ ++#define iowrite8_rep(p,s,c) __raw_writesb(p,s,c) ++#define iowrite16_rep(p,s,c) __raw_writesw(p,s,c) ++#define iowrite32_rep(p,s,c) __raw_writesl(p,s,c) ++ ++#endif ++ ++ ++/* ++ * These two are only here because ALSA _thinks_ it needs them... ++ */ ++static inline void memcpy_fromio(void * to, const volatile void __iomem *from, ++ unsigned long count) ++{ ++ char *p = to; ++ while (count) { ++ count--; ++ *p = readb(from); ++ p++; ++ from++; ++ } ++} ++ ++static inline void memcpy_toio(volatile void __iomem *to, const void * from, ++ unsigned long count) ++{ ++ const char *p = from; ++ while (count) { ++ count--; ++ writeb(*p, to); ++ p++; ++ to++; ++ } ++} ++ ++static inline void memset_io(volatile void __iomem *addr, unsigned char val, ++ unsigned long count) ++{ ++ memset((void __force *)addr, val, count); ++} ++ ++/* ++ * Bad read/write accesses... ++ */ ++extern void __readwrite_bug(const char *fn); ++ ++#define IO_SPACE_LIMIT 0xffffffff ++ ++/* Convert I/O port address to virtual address */ ++#define __io(p) ((void __iomem *)phys_to_uncached(p)) ++ ++/* ++ * IO port access primitives ++ * ------------------------- ++ * ++ * The AVR32 doesn't have special IO access instructions; all IO is memory ++ * mapped. Note that these are defined to perform little endian accesses ++ * only. Their primary purpose is to access PCI and ISA peripherals. ++ * ++ * Note that for a big endian machine, this implies that the following ++ * big endian mode connectivity is in place. ++ * ++ * The machine specific io.h include defines __io to translate an "IO" ++ * address to a memory address. ++ * ++ * Note that we prevent GCC re-ordering or caching values in expressions ++ * by introducing sequence points into the in*() definitions. Note that ++ * __raw_* do not guarantee this behaviour. ++ * ++ * The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space. ++ */ ++#define outb(v, p) __raw_writeb(v, __io(p)) ++#define outw(v, p) __raw_writew(cpu_to_le16(v), __io(p)) ++#define outl(v, p) __raw_writel(cpu_to_le32(v), __io(p)) ++ ++#define inb(p) __raw_readb(__io(p)) ++#define inw(p) le16_to_cpu(__raw_readw(__io(p))) ++#define inl(p) le32_to_cpu(__raw_readl(__io(p))) ++ ++static inline void __outsb(unsigned long port, void *addr, unsigned int count) ++{ ++ while (count--) { ++ outb(*(u8 *)addr, port); ++ addr++; ++ } ++} ++ ++static inline void __insb(unsigned long port, void *addr, unsigned int count) ++{ ++ while (count--) { ++ *(u8 *)addr = inb(port); ++ addr++; ++ } ++} ++ ++static inline void __outsw(unsigned long port, void *addr, unsigned int count) ++{ ++ while (count--) { ++ outw(*(u16 *)addr, port); ++ addr += 2; ++ } ++} ++ ++static inline void __insw(unsigned long port, void *addr, unsigned int count) ++{ ++ while (count--) { ++ *(u16 *)addr = inw(port); ++ addr += 2; ++ } ++} ++ ++static inline void __outsl(unsigned long port, void *addr, unsigned int count) ++{ ++ while (count--) { ++ outl(*(u32 *)addr, port); ++ addr += 4; ++ } ++} ++ ++static inline void __insl(unsigned long port, void *addr, unsigned int count) ++{ ++ while (count--) { ++ *(u32 *)addr = inl(port); ++ addr += 4; ++ } ++} ++ ++#define outsb(port, addr, count) __outsb(port, addr, count) ++#define insb(port, addr, count) __insb(port, addr, count) ++#define outsw(port, addr, count) __outsw(port, addr, count) ++#define insw(port, addr, count) __insw(port, addr, count) ++#define outsl(port, addr, count) __outsl(port, addr, count) ++#define insl(port, addr, count) __insl(port, addr, count) ++ ++extern void __iomem *__ioremap(unsigned long offset, size_t size, ++ unsigned long flags); ++extern void __iounmap(void __iomem *addr); ++ ++/* ++ * ioremap - map bus memory into CPU space ++ * @offset bus address of the memory ++ * @size size of the resource to map ++ * ++ * ioremap performs a platform specific sequence of operations to make ++ * bus memory CPU accessible via the readb/.../writel functions and ++ * the other mmio helpers. The returned address is not guaranteed to ++ * be usable directly as a virtual address. ++ */ ++#define ioremap(offset, size) \ ++ __ioremap((offset), (size), 0) ++ ++#define iounmap(addr) \ ++ __iounmap(addr) ++ ++#define cached(addr) P1SEGADDR(addr) ++#define uncached(addr) P2SEGADDR(addr) ++ ++#define virt_to_bus virt_to_phys ++#define bus_to_virt phys_to_virt ++#define page_to_bus page_to_phys ++#define bus_to_page phys_to_page ++ ++#define dma_cache_wback_inv(_start, _size) \ ++ flush_dcache_region(_start, _size) ++#define dma_cache_inv(_start, _size) \ ++ invalidate_dcache_region(_start, _size) ++#define dma_cache_wback(_start, _size) \ ++ clean_dcache_region(_start, _size) ++ ++/* ++ * Convert a physical pointer to a virtual kernel pointer for /dev/mem ++ * access ++ */ ++#define xlate_dev_mem_ptr(p) __va(p) ++ ++/* ++ * Convert a virtual cached pointer to an uncached pointer ++ */ ++#define xlate_dev_kmem_ptr(p) p ++ ++#endif /* __KERNEL__ */ ++ ++#endif /* __ASM_AVR32_IO_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/ioctl.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/ioctl.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_IOCTL_H ++#define __ASM_AVR32_IOCTL_H ++ ++#include ++ ++#endif /* __ASM_AVR32_IOCTL_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/ioctls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/ioctls.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,83 @@ ++#ifndef __ASM_AVR32_IOCTLS_H ++#define __ASM_AVR32_IOCTLS_H ++ ++#include ++ ++/* 0x54 is just a magic number to make these relatively unique ('T') */ ++ ++#define TCGETS 0x5401 ++#define TCSETS 0x5402 /* Clashes with SNDCTL_TMR_START sound ioctl */ ++#define TCSETSW 0x5403 ++#define TCSETSF 0x5404 ++#define TCGETA 0x5405 ++#define TCSETA 0x5406 ++#define TCSETAW 0x5407 ++#define TCSETAF 0x5408 ++#define TCSBRK 0x5409 ++#define TCXONC 0x540A ++#define TCFLSH 0x540B ++#define TIOCEXCL 0x540C ++#define TIOCNXCL 0x540D ++#define TIOCSCTTY 0x540E ++#define TIOCGPGRP 0x540F ++#define TIOCSPGRP 0x5410 ++#define TIOCOUTQ 0x5411 ++#define TIOCSTI 0x5412 ++#define TIOCGWINSZ 0x5413 ++#define TIOCSWINSZ 0x5414 ++#define TIOCMGET 0x5415 ++#define TIOCMBIS 0x5416 ++#define TIOCMBIC 0x5417 ++#define TIOCMSET 0x5418 ++#define TIOCGSOFTCAR 0x5419 ++#define TIOCSSOFTCAR 0x541A ++#define FIONREAD 0x541B ++#define TIOCINQ FIONREAD ++#define TIOCLINUX 0x541C ++#define TIOCCONS 0x541D ++#define TIOCGSERIAL 0x541E ++#define TIOCSSERIAL 0x541F ++#define TIOCPKT 0x5420 ++#define FIONBIO 0x5421 ++#define TIOCNOTTY 0x5422 ++#define TIOCSETD 0x5423 ++#define TIOCGETD 0x5424 ++#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ ++/* #define TIOCTTYGSTRUCT 0x5426 - Former debugging-only ioctl */ ++#define TIOCSBRK 0x5427 /* BSD compatibility */ ++#define TIOCCBRK 0x5428 /* BSD compatibility */ ++#define TIOCGSID 0x5429 /* Return the session ID of FD */ ++#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ ++#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ ++ ++#define FIONCLEX 0x5450 ++#define FIOCLEX 0x5451 ++#define FIOASYNC 0x5452 ++#define TIOCSERCONFIG 0x5453 ++#define TIOCSERGWILD 0x5454 ++#define TIOCSERSWILD 0x5455 ++#define TIOCGLCKTRMIOS 0x5456 ++#define TIOCSLCKTRMIOS 0x5457 ++#define TIOCSERGSTRUCT 0x5458 /* For debugging only */ ++#define TIOCSERGETLSR 0x5459 /* Get line status register */ ++#define TIOCSERGETMULTI 0x545A /* Get multiport config */ ++#define TIOCSERSETMULTI 0x545B /* Set multiport config */ ++ ++#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ ++#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ ++#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */ ++#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */ ++#define FIOQSIZE 0x5460 ++ ++/* Used for packet mode */ ++#define TIOCPKT_DATA 0 ++#define TIOCPKT_FLUSHREAD 1 ++#define TIOCPKT_FLUSHWRITE 2 ++#define TIOCPKT_STOP 4 ++#define TIOCPKT_START 8 ++#define TIOCPKT_NOSTOP 16 ++#define TIOCPKT_DOSTOP 32 ++ ++#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ ++ ++#endif /* __ASM_AVR32_IOCTLS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/ipcbuf.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/ipcbuf.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,29 @@ ++#ifndef __ASM_AVR32_IPCBUF_H ++#define __ASM_AVR32_IPCBUF_H ++ ++/* ++* The user_ipc_perm structure for AVR32 architecture. ++* Note extra padding because this structure is passed back and forth ++* between kernel and user space. ++* ++* Pad space is left for: ++* - 32-bit mode_t and seq ++* - 2 miscellaneous 32-bit values ++*/ ++ ++struct ipc64_perm ++{ ++ __kernel_key_t key; ++ __kernel_uid32_t uid; ++ __kernel_gid32_t gid; ++ __kernel_uid32_t cuid; ++ __kernel_gid32_t cgid; ++ __kernel_mode_t mode; ++ unsigned short __pad1; ++ unsigned short seq; ++ unsigned short __pad2; ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++#endif /* __ASM_AVR32_IPCBUF_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/irq.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/irq.h 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,10 @@ ++#ifndef __ASM_AVR32_IRQ_H ++#define __ASM_AVR32_IRQ_H ++ ++#define NR_INTERNAL_IRQS 64 ++#define NR_EXTERNAL_IRQS 64 ++#define NR_IRQS (NR_INTERNAL_IRQS + NR_EXTERNAL_IRQS) ++ ++#define irq_canonicalize(i) (i) ++ ++#endif /* __ASM_AVR32_IOCTLS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/kdebug.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/kdebug.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,38 @@ ++#ifndef __ASM_AVR32_KDEBUG_H ++#define __ASM_AVR32_KDEBUG_H ++ ++#include ++ ++struct pt_regs; ++ ++struct die_args { ++ struct pt_regs *regs; ++ int trapnr; ++}; ++ ++int register_die_notifier(struct notifier_block *nb); ++int unregister_die_notifier(struct notifier_block *nb); ++int register_page_fault_notifier(struct notifier_block *nb); ++int unregister_page_fault_notifier(struct notifier_block *nb); ++extern struct atomic_notifier_head avr32_die_chain; ++ ++/* Grossly misnamed. */ ++enum die_val { ++ DIE_FAULT, ++ DIE_BREAKPOINT, ++ DIE_SSTEP, ++ DIE_PAGE_FAULT, ++}; ++ ++static inline int notify_die(enum die_val val, struct pt_regs *regs, ++ int trap, int sig) ++{ ++ struct die_args args = { ++ .regs = regs, ++ .trapnr = trap, ++ }; ++ ++ return atomic_notifier_call_chain(&avr32_die_chain, val, &args); ++} ++ ++#endif /* __ASM_AVR32_KDEBUG_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/kmap_types.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/kmap_types.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,30 @@ ++#ifndef __ASM_AVR32_KMAP_TYPES_H ++#define __ASM_AVR32_KMAP_TYPES_H ++ ++#ifdef CONFIG_DEBUG_HIGHMEM ++# define D(n) __KM_FENCE_##n , ++#else ++# define D(n) ++#endif ++ ++enum km_type { ++D(0) KM_BOUNCE_READ, ++D(1) KM_SKB_SUNRPC_DATA, ++D(2) KM_SKB_DATA_SOFTIRQ, ++D(3) KM_USER0, ++D(4) KM_USER1, ++D(5) KM_BIO_SRC_IRQ, ++D(6) KM_BIO_DST_IRQ, ++D(7) KM_PTE0, ++D(8) KM_PTE1, ++D(9) KM_PTE2, ++D(10) KM_IRQ0, ++D(11) KM_IRQ1, ++D(12) KM_SOFTIRQ0, ++D(13) KM_SOFTIRQ1, ++D(14) KM_TYPE_NR ++}; ++ ++#undef D ++ ++#endif /* __ASM_AVR32_KMAP_TYPES_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/kprobes.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/kprobes.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,34 @@ ++/* ++ * Kernel Probes (KProbes) ++ * ++ * Copyright (C) 2005-2006 Atmel Corporation ++ * Copyright (C) IBM Corporation, 2002, 2004 ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++#ifndef __ASM_AVR32_KPROBES_H ++#define __ASM_AVR32_KPROBES_H ++ ++#include ++ ++typedef u16 kprobe_opcode_t; ++#define BREAKPOINT_INSTRUCTION 0xd673 /* breakpoint */ ++#define MAX_INSN_SIZE 2 ++ ++#define ARCH_INACTIVE_KPROBE_COUNT 1 ++ ++#define arch_remove_kprobe(p) do { } while (0) ++ ++/* Architecture specific copy of original instruction */ ++struct arch_specific_insn { ++ kprobe_opcode_t insn[MAX_INSN_SIZE]; ++}; ++ ++extern int kprobe_exceptions_notify(struct notifier_block *self, ++ unsigned long val, void *data); ++ ++#define flush_insn_slot(p) do { } while (0) ++ ++#endif /* __ASM_AVR32_KPROBES_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/linkage.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/linkage.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,7 @@ ++#ifndef __ASM_LINKAGE_H ++#define __ASM_LINKAGE_H ++ ++#define __ALIGN .balign 2 ++#define __ALIGN_STR ".balign 2" ++ ++#endif /* __ASM_LINKAGE_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/local.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/local.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_LOCAL_H ++#define __ASM_AVR32_LOCAL_H ++ ++#include ++ ++#endif /* __ASM_AVR32_LOCAL_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/mach/serial_at91.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/mach/serial_at91.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,33 @@ ++/* ++ * linux/include/asm-arm/mach/serial_at91.h ++ * ++ * Based on serial_sa1100.h by Nicolas Pitre ++ * ++ * Copyright (C) 2002 ATMEL Rousset ++ * ++ * Low level machine dependent UART functions. ++ */ ++ ++struct uart_port; ++ ++/* ++ * This is a temporary structure for registering these ++ * functions; it is intended to be discarded after boot. ++ */ ++struct at91_port_fns { ++ void (*set_mctrl)(struct uart_port *, u_int); ++ u_int (*get_mctrl)(struct uart_port *); ++ void (*enable_ms)(struct uart_port *); ++ void (*pm)(struct uart_port *, u_int, u_int); ++ int (*set_wake)(struct uart_port *, u_int); ++ int (*open)(struct uart_port *); ++ void (*close)(struct uart_port *); ++}; ++ ++#if defined(CONFIG_SERIAL_AT91) ++void at91_register_uart_fns(struct at91_port_fns *fns); ++#else ++#define at91_register_uart_fns(fns) do { } while (0) ++#endif ++ ++ +Index: linux-2.6.18-avr32/include/asm-avr32/mman.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/mman.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,17 @@ ++#ifndef __ASM_AVR32_MMAN_H__ ++#define __ASM_AVR32_MMAN_H__ ++ ++#include ++ ++#define MAP_GROWSDOWN 0x0100 /* stack-like segment */ ++#define MAP_DENYWRITE 0x0800 /* ETXTBSY */ ++#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ ++#define MAP_LOCKED 0x2000 /* pages are locked */ ++#define MAP_NORESERVE 0x4000 /* don't check for reservations */ ++#define MAP_POPULATE 0x8000 /* populate (prefault) page tables */ ++#define MAP_NONBLOCK 0x10000 /* do not block on IO */ ++ ++#define MCL_CURRENT 1 /* lock all current mappings */ ++#define MCL_FUTURE 2 /* lock all future mappings */ ++ ++#endif /* __ASM_AVR32_MMAN_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/mmu.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/mmu.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,10 @@ ++#ifndef __ASM_AVR32_MMU_H ++#define __ASM_AVR32_MMU_H ++ ++/* Default "unsigned long" context */ ++typedef unsigned long mm_context_t; ++ ++#define MMU_ITLB_ENTRIES 64 ++#define MMU_DTLB_ENTRIES 64 ++ ++#endif /* __ASM_AVR32_MMU_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/mmu_context.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/mmu_context.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,148 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * ASID handling taken from SH implementation. ++ * Copyright (C) 1999 Niibe Yutaka ++ * Copyright (C) 2003 Paul Mundt ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++#ifndef __ASM_AVR32_MMU_CONTEXT_H ++#define __ASM_AVR32_MMU_CONTEXT_H ++ ++#include ++#include ++#include ++ ++/* ++ * The MMU "context" consists of two things: ++ * (a) TLB cache version ++ * (b) ASID (Address Space IDentifier) ++ */ ++#define MMU_CONTEXT_ASID_MASK 0x000000ff ++#define MMU_CONTEXT_VERSION_MASK 0xffffff00 ++#define MMU_CONTEXT_FIRST_VERSION 0x00000100 ++#define NO_CONTEXT 0 ++ ++#define MMU_NO_ASID 0x100 ++ ++/* Virtual Page Number mask */ ++#define MMU_VPN_MASK 0xfffff000 ++ ++/* Cache of MMU context last used */ ++extern unsigned long mmu_context_cache; ++ ++/* ++ * Get MMU context if needed ++ */ ++static inline void ++get_mmu_context(struct mm_struct *mm) ++{ ++ unsigned long mc = mmu_context_cache; ++ ++ if (((mm->context ^ mc) & MMU_CONTEXT_VERSION_MASK) == 0) ++ /* It's up to date, do nothing */ ++ return; ++ ++ /* It's old, we need to get new context with new version */ ++ mc = ++mmu_context_cache; ++ if (!(mc & MMU_CONTEXT_ASID_MASK)) { ++ /* ++ * We have exhausted all ASIDs of this version. ++ * Flush the TLB and start new cycle. ++ */ ++ flush_tlb_all(); ++ /* ++ * Fix version. Note that we avoid version #0 ++ * to distinguish NO_CONTEXT. ++ */ ++ if (!mc) ++ mmu_context_cache = mc = MMU_CONTEXT_FIRST_VERSION; ++ } ++ mm->context = mc; ++} ++ ++/* ++ * Initialize the context related info for a new mm_struct ++ * instance. ++ */ ++static inline int init_new_context(struct task_struct *tsk, ++ struct mm_struct *mm) ++{ ++ mm->context = NO_CONTEXT; ++ return 0; ++} ++ ++/* ++ * Destroy context related info for an mm_struct that is about ++ * to be put to rest. ++ */ ++static inline void destroy_context(struct mm_struct *mm) ++{ ++ /* Do nothing */ ++} ++ ++static inline void set_asid(unsigned long asid) ++{ ++ /* XXX: We're destroying TLBEHI[8:31] */ ++ sysreg_write(TLBEHI, asid & MMU_CONTEXT_ASID_MASK); ++ cpu_sync_pipeline(); ++} ++ ++static inline unsigned long get_asid(void) ++{ ++ unsigned long asid; ++ ++ asid = sysreg_read(TLBEHI); ++ return asid & MMU_CONTEXT_ASID_MASK; ++} ++ ++static inline void activate_context(struct mm_struct *mm) ++{ ++ get_mmu_context(mm); ++ set_asid(mm->context & MMU_CONTEXT_ASID_MASK); ++} ++ ++static inline void switch_mm(struct mm_struct *prev, ++ struct mm_struct *next, ++ struct task_struct *tsk) ++{ ++ if (likely(prev != next)) { ++ unsigned long __pgdir = (unsigned long)next->pgd; ++ ++ sysreg_write(PTBR, __pgdir); ++ activate_context(next); ++ } ++} ++ ++#define deactivate_mm(tsk,mm) do { } while(0) ++ ++#define activate_mm(prev, next) switch_mm((prev), (next), NULL) ++ ++static inline void ++enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) ++{ ++} ++ ++ ++static inline void enable_mmu(void) ++{ ++ sysreg_write(MMUCR, (SYSREG_BIT(MMUCR_S) ++ | SYSREG_BIT(E) ++ | SYSREG_BIT(MMUCR_I))); ++ nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); ++ ++ if (mmu_context_cache == NO_CONTEXT) ++ mmu_context_cache = MMU_CONTEXT_FIRST_VERSION; ++ ++ set_asid(mmu_context_cache & MMU_CONTEXT_ASID_MASK); ++} ++ ++static inline void disable_mmu(void) ++{ ++ sysreg_write(MMUCR, SYSREG_BIT(MMUCR_S)); ++} ++ ++#endif /* __ASM_AVR32_MMU_CONTEXT_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/module.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/module.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,28 @@ ++#ifndef __ASM_AVR32_MODULE_H ++#define __ASM_AVR32_MODULE_H ++ ++struct mod_arch_syminfo { ++ unsigned long got_offset; ++ int got_initialized; ++}; ++ ++struct mod_arch_specific { ++ /* Starting offset of got in the module core memory. */ ++ unsigned long got_offset; ++ /* Size of the got. */ ++ unsigned long got_size; ++ /* Number of symbols in syminfo. */ ++ int nsyms; ++ /* Additional symbol information (got offsets). */ ++ struct mod_arch_syminfo *syminfo; ++}; ++ ++#define Elf_Shdr Elf32_Shdr ++#define Elf_Sym Elf32_Sym ++#define Elf_Ehdr Elf32_Ehdr ++ ++#define MODULE_PROC_FAMILY "AVR32v1" ++ ++#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY ++ ++#endif /* __ASM_AVR32_MODULE_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/msgbuf.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/msgbuf.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,31 @@ ++#ifndef __ASM_AVR32_MSGBUF_H ++#define __ASM_AVR32_MSGBUF_H ++ ++/* ++ * The msqid64_ds structure for i386 architecture. ++ * Note extra padding because this structure is passed back and forth ++ * between kernel and user space. ++ * ++ * Pad space is left for: ++ * - 64-bit time_t to solve y2038 problem ++ * - 2 miscellaneous 32-bit values ++ */ ++ ++struct msqid64_ds { ++ struct ipc64_perm msg_perm; ++ __kernel_time_t msg_stime; /* last msgsnd time */ ++ unsigned long __unused1; ++ __kernel_time_t msg_rtime; /* last msgrcv time */ ++ unsigned long __unused2; ++ __kernel_time_t msg_ctime; /* last change time */ ++ unsigned long __unused3; ++ unsigned long msg_cbytes; /* current number of bytes on queue */ ++ unsigned long msg_qnum; /* number of messages in queue */ ++ unsigned long msg_qbytes; /* max number of bytes on queue */ ++ __kernel_pid_t msg_lspid; /* pid of last msgsnd */ ++ __kernel_pid_t msg_lrpid; /* last receive pid */ ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++#endif /* __ASM_AVR32_MSGBUF_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/mutex.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/mutex.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,9 @@ ++/* ++ * Pull in the generic implementation for the mutex fastpath. ++ * ++ * TODO: implement optimized primitives instead, or leave the generic ++ * implementation in place, or pick the atomic_xchg() based generic ++ * implementation. (see asm-generic/mutex-xchg.h for details) ++ */ ++ ++#include +Index: linux-2.6.18-avr32/include/asm-avr32/namei.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/namei.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,7 @@ ++#ifndef __ASM_AVR32_NAMEI_H ++#define __ASM_AVR32_NAMEI_H ++ ++/* This dummy routine may be changed to something useful */ ++#define __emul_prefix() NULL ++ ++#endif /* __ASM_AVR32_NAMEI_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/numnodes.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/numnodes.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,7 @@ ++#ifndef __ASM_AVR32_NUMNODES_H ++#define __ASM_AVR32_NUMNODES_H ++ ++/* Max 4 nodes */ ++#define NODES_SHIFT 2 ++ ++#endif /* __ASM_AVR32_NUMNODES_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/ocd.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/ocd.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,78 @@ ++/* ++ * AVR32 OCD Registers ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_OCD_H ++#define __ASM_AVR32_OCD_H ++ ++/* Debug Registers */ ++#define DBGREG_DID 0 ++#define DBGREG_DC 8 ++#define DBGREG_DS 16 ++#define DBGREG_RWCS 28 ++#define DBGREG_RWA 36 ++#define DBGREG_RWD 40 ++#define DBGREG_WT 44 ++#define DBGREG_DTC 52 ++#define DBGREG_DTSA0 56 ++#define DBGREG_DTSA1 60 ++#define DBGREG_DTEA0 72 ++#define DBGREG_DTEA1 76 ++#define DBGREG_BWC0A 88 ++#define DBGREG_BWC0B 92 ++#define DBGREG_BWC1A 96 ++#define DBGREG_BWC1B 100 ++#define DBGREG_BWC2A 104 ++#define DBGREG_BWC2B 108 ++#define DBGREG_BWC3A 112 ++#define DBGREG_BWC3B 116 ++#define DBGREG_BWA0A 120 ++#define DBGREG_BWA0B 124 ++#define DBGREG_BWA1A 128 ++#define DBGREG_BWA1B 132 ++#define DBGREG_BWA2A 136 ++#define DBGREG_BWA2B 140 ++#define DBGREG_BWA3A 144 ++#define DBGREG_BWA3B 148 ++#define DBGREG_BWD3A 153 ++#define DBGREG_BWD3B 156 ++ ++#define DBGREG_PID 284 ++ ++#define SABAH_OCD 0x01 ++#define SABAH_ICACHE 0x02 ++#define SABAH_MEM_CACHED 0x04 ++#define SABAH_MEM_UNCACHED 0x05 ++ ++/* Fields in the Development Control register */ ++#define DC_SS_BIT 8 ++ ++#define DC_SS (1 << DC_SS_BIT) ++#define DC_DBE (1 << 13) ++#define DC_RID (1 << 27) ++#define DC_ORP (1 << 28) ++#define DC_MM (1 << 29) ++#define DC_RES (1 << 30) ++ ++/* Fields in the Development Status register */ ++#define DS_SSS (1 << 0) ++#define DS_SWB (1 << 1) ++#define DS_HWB (1 << 2) ++#define DS_BP_SHIFT 8 ++#define DS_BP_MASK (0xff << DS_BP_SHIFT) ++ ++#define __mfdr(addr) \ ++({ \ ++ register unsigned long value; \ ++ asm volatile("mfdr %0, %1" : "=r"(value) : "i"(addr)); \ ++ value; \ ++}) ++#define __mtdr(addr, value) \ ++ asm volatile("mtdr %0, %1" : : "i"(addr), "r"(value)) ++ ++#endif /* __ASM_AVR32_OCD_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/page.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/page.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,112 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_PAGE_H ++#define __ASM_AVR32_PAGE_H ++ ++#ifdef __KERNEL__ ++ ++/* PAGE_SHIFT determines the page size */ ++#define PAGE_SHIFT 12 ++#ifdef __ASSEMBLY__ ++#define PAGE_SIZE (1 << PAGE_SHIFT) ++#else ++#define PAGE_SIZE (1UL << PAGE_SHIFT) ++#endif ++#define PAGE_MASK (~(PAGE_SIZE-1)) ++#define PTE_MASK PAGE_MASK ++ ++#ifndef __ASSEMBLY__ ++ ++#include ++ ++extern void clear_page(void *to); ++extern void copy_page(void *to, void *from); ++ ++#define clear_user_page(page, vaddr, pg) clear_page(page) ++#define copy_user_page(to, from, vaddr, pg) copy_page(to, from) ++ ++/* ++ * These are used to make use of C type-checking.. ++ */ ++typedef struct { unsigned long pte; } pte_t; ++typedef struct { unsigned long pgd; } pgd_t; ++typedef struct { unsigned long pgprot; } pgprot_t; ++ ++#define pte_val(x) ((x).pte) ++#define pgd_val(x) ((x).pgd) ++#define pgprot_val(x) ((x).pgprot) ++ ++#define __pte(x) ((pte_t) { (x) }) ++#define __pgd(x) ((pgd_t) { (x) }) ++#define __pgprot(x) ((pgprot_t) { (x) }) ++ ++/* FIXME: These should be removed soon */ ++extern unsigned long memory_start, memory_end; ++ ++/* Pure 2^n version of get_order */ ++static inline int get_order(unsigned long size) ++{ ++ unsigned lz; ++ ++ size = (size - 1) >> PAGE_SHIFT; ++ asm("clz %0, %1" : "=r"(lz) : "r"(size)); ++ return 32 - lz; ++} ++ ++#endif /* !__ASSEMBLY__ */ ++ ++/* Align the pointer to the (next) page boundary */ ++#define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK) ++ ++/* ++ * The hardware maps the virtual addresses 0x80000000 -> 0x9fffffff ++ * permanently to the physical addresses 0x00000000 -> 0x1fffffff when ++ * segmentation is enabled. We want to make use of this in order to ++ * minimize TLB pressure. ++ */ ++#define PAGE_OFFSET (0x80000000UL) ++ ++/* ++ * ALSA uses virt_to_page() on DMA pages, which I'm not entirely sure ++ * is a good idea. Anyway, we can't simply subtract PAGE_OFFSET here ++ * in that case, so we'll have to mask out the three most significant ++ * bits of the address instead... ++ * ++ * What's the difference between __pa() and virt_to_phys() anyway? ++ */ ++#define __pa(x) PHYSADDR(x) ++#define __va(x) ((void *)(P1SEGADDR(x))) ++ ++#define MAP_NR(addr) (((unsigned long)(addr) - PAGE_OFFSET) >> PAGE_SHIFT) ++ ++#define phys_to_page(phys) (pfn_to_page(phys >> PAGE_SHIFT)) ++#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) ++ ++#ifndef CONFIG_NEED_MULTIPLE_NODES ++ ++#define PHYS_PFN_OFFSET (CONFIG_PHYS_OFFSET >> PAGE_SHIFT) ++ ++#define pfn_to_page(pfn) (mem_map + ((pfn) - PHYS_PFN_OFFSET)) ++#define page_to_pfn(page) ((unsigned long)((page) - mem_map) + PHYS_PFN_OFFSET) ++#define pfn_valid(pfn) ((pfn) >= PHYS_PFN_OFFSET && (pfn) < (PHYS_PFN_OFFSET + max_mapnr)) ++#endif /* CONFIG_NEED_MULTIPLE_NODES */ ++ ++#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) ++#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) ++ ++#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ ++ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) ++ ++/* ++ * Memory above this physical address will be considered highmem. ++ */ ++#define HIGHMEM_START 0x20000000UL ++ ++#endif /* __KERNEL__ */ ++ ++#endif /* __ASM_AVR32_PAGE_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/param.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/param.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,23 @@ ++#ifndef __ASM_AVR32_PARAM_H ++#define __ASM_AVR32_PARAM_H ++ ++#ifdef __KERNEL__ ++# define HZ CONFIG_HZ ++# define USER_HZ 100 /* User interfaces are in "ticks" */ ++# define CLOCKS_PER_SEC (USER_HZ) /* frequency at which times() counts */ ++#endif ++ ++#ifndef HZ ++# define HZ 100 ++#endif ++ ++/* TODO: Should be configurable */ ++#define EXEC_PAGESIZE 4096 ++ ++#ifndef NOGROUP ++# define NOGROUP (-1) ++#endif ++ ++#define MAXHOSTNAMELEN 64 ++ ++#endif /* __ASM_AVR32_PARAM_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/pci.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/pci.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,8 @@ ++#ifndef __ASM_AVR32_PCI_H__ ++#define __ASM_AVR32_PCI_H__ ++ ++/* We don't support PCI yet, but some drivers require this file anyway */ ++ ++#define PCI_DMA_BUS_IS_PHYS (1) ++ ++#endif /* __ASM_AVR32_PCI_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/percpu.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/percpu.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_PERCPU_H ++#define __ASM_AVR32_PERCPU_H ++ ++#include ++ ++#endif /* __ASM_AVR32_PERCPU_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/pgalloc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/pgalloc.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,96 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_PGALLOC_H ++#define __ASM_AVR32_PGALLOC_H ++ ++#include ++#include ++#include ++#include ++ ++#define pmd_populate_kernel(mm, pmd, pte) \ ++ set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte))) ++ ++static __inline__ void pmd_populate(struct mm_struct *mm, pmd_t *pmd, ++ struct page *pte) ++{ ++ set_pmd(pmd, __pmd(_PAGE_TABLE + page_to_phys(pte))); ++} ++ ++/* ++ * Allocate and free page tables ++ */ ++static __inline__ pgd_t *pgd_alloc(struct mm_struct *mm) ++{ ++ unsigned int pgd_size = (USER_PTRS_PER_PGD * sizeof(pgd_t)); ++ pgd_t *pgd = (pgd_t *)kmalloc(pgd_size, GFP_KERNEL); ++ ++ if (pgd) ++ memset(pgd, 0, pgd_size); ++ ++ return pgd; ++} ++ ++static inline void pgd_free(pgd_t *pgd) ++{ ++ kfree(pgd); ++} ++ ++static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, ++ unsigned long address) ++{ ++ int count = 0; ++ pte_t *pte; ++ ++ do { ++ pte = (pte_t *) __get_free_page(GFP_KERNEL | __GFP_REPEAT); ++ if (pte) ++ clear_page(pte); ++ else { ++ current->state = TASK_UNINTERRUPTIBLE; ++ schedule_timeout(HZ); ++ } ++ } while (!pte && (count++ < 10)); ++ ++ return pte; ++} ++ ++static inline struct page *pte_alloc_one(struct mm_struct *mm, ++ unsigned long address) ++{ ++ int count = 0; ++ struct page *pte; ++ ++ do { ++ pte = alloc_pages(GFP_KERNEL, 0); ++ if (pte) ++ clear_page(page_address(pte)); ++ else { ++ current->state = TASK_UNINTERRUPTIBLE; ++ schedule_timeout(HZ); ++ } ++ } while (!pte && (count++ < 10)); ++ ++ return pte; ++} ++ ++static inline void pte_free_kernel(pte_t *pte) ++{ ++ free_page((unsigned long)pte); ++} ++ ++static inline void pte_free(struct page *pte) ++{ ++ __free_page(pte); ++} ++ ++#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte)) ++ ++#define check_pgt_cache() do { } while(0) ++ ++#endif /* __ASM_AVR32_PGALLOC_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/pgtable-2level.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/pgtable-2level.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,47 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_PGTABLE_2LEVEL_H ++#define __ASM_AVR32_PGTABLE_2LEVEL_H ++ ++#include ++ ++/* ++ * Traditional 2-level paging structure ++ */ ++#define PGDIR_SHIFT 22 ++#define PTRS_PER_PGD 1024 ++ ++#define PTRS_PER_PTE 1024 ++ ++#ifndef __ASSEMBLY__ ++#define pte_ERROR(e) \ ++ printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) ++#define pgd_ERROR(e) \ ++ printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) ++ ++/* ++ * Certain architectures need to do special things when PTEs ++ * within a page table are directly modified. Thus, the following ++ * hook is made available. ++ */ ++#define set_pte(pteptr, pteval) (*(pteptr) = pteval) ++#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep, pteval) ++ ++/* ++ * (pmds are folded into pgds so this doesn't get actually called, ++ * but the define is needed for a generic inline function.) ++ */ ++#define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) ++ ++#define pte_pfn(x) ((unsigned long)(((x).pte >> PAGE_SHIFT))) ++#define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) ++#define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) ++ ++#endif /* !__ASSEMBLY__ */ ++ ++#endif /* __ASM_AVR32_PGTABLE_2LEVEL_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/pgtable.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/pgtable.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,408 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_PGTABLE_H ++#define __ASM_AVR32_PGTABLE_H ++ ++#include ++ ++#ifndef __ASSEMBLY__ ++#include ++ ++#endif /* !__ASSEMBLY__ */ ++ ++/* ++ * Use two-level page tables just as the i386 (without PAE) ++ */ ++#include ++ ++/* ++ * The following code might need some cleanup when the values are ++ * final... ++ */ ++#define PMD_SIZE (1UL << PMD_SHIFT) ++#define PMD_MASK (~(PMD_SIZE-1)) ++#define PGDIR_SIZE (1UL << PGDIR_SHIFT) ++#define PGDIR_MASK (~(PGDIR_SIZE-1)) ++ ++#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE) ++#define FIRST_USER_ADDRESS 0 ++ ++#define PTE_PHYS_MASK 0x1ffff000 ++ ++#ifndef __ASSEMBLY__ ++extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; ++extern void paging_init(void); ++ ++/* ++ * ZERO_PAGE is a global shared page that is always zero: used for ++ * zero-mapped memory areas etc. ++ */ ++extern struct page *empty_zero_page; ++#define ZERO_PAGE(vaddr) (empty_zero_page) ++ ++/* ++ * Just any arbitrary offset to the start of the vmalloc VM area: the ++ * current 8 MiB value just means that there will be a 8 MiB "hole" ++ * after the uncached physical memory (P2 segment) until the vmalloc ++ * area starts. That means that any out-of-bounds memory accesses will ++ * hopefully be caught; we don't know if the end of the P1/P2 segments ++ * are actually used for anything, but it is anyway safer to let the ++ * MMU catch these kinds of errors than to rely on the memory bus. ++ * ++ * A "hole" of the same size is added to the end of the P3 segment as ++ * well. It might seem wasteful to use 16 MiB of virtual address space ++ * on this, but we do have 512 MiB of it... ++ * ++ * The vmalloc() routines leave a hole of 4 KiB between each vmalloced ++ * area for the same reason. ++ */ ++#define VMALLOC_OFFSET (8 * 1024 * 1024) ++#define VMALLOC_START (P3SEG + VMALLOC_OFFSET) ++#define VMALLOC_END (P4SEG - VMALLOC_OFFSET) ++#endif /* !__ASSEMBLY__ */ ++ ++/* ++ * Page flags. Some of these flags are not directly supported by ++ * hardware, so we have to emulate them. ++ */ ++#define _TLBEHI_BIT_VALID 9 ++#define _TLBEHI_VALID (1 << _TLBEHI_BIT_VALID) ++ ++#define _PAGE_BIT_WT 0 /* W-bit : write-through */ ++#define _PAGE_BIT_DIRTY 1 /* D-bit : page changed */ ++#define _PAGE_BIT_SZ0 2 /* SZ0-bit : Size of page */ ++#define _PAGE_BIT_SZ1 3 /* SZ1-bit : Size of page */ ++#define _PAGE_BIT_EXECUTE 4 /* X-bit : execute access allowed */ ++#define _PAGE_BIT_RW 5 /* AP0-bit : write access allowed */ ++#define _PAGE_BIT_USER 6 /* AP1-bit : user space access allowed */ ++#define _PAGE_BIT_BUFFER 7 /* B-bit : bufferable */ ++#define _PAGE_BIT_GLOBAL 8 /* G-bit : global (ignore ASID) */ ++#define _PAGE_BIT_CACHABLE 9 /* C-bit : cachable */ ++ ++/* If we drop support for 1K pages, we get two extra bits */ ++#define _PAGE_BIT_PRESENT 10 ++#define _PAGE_BIT_ACCESSED 11 /* software: page was accessed */ ++ ++/* The following flags are only valid when !PRESENT */ ++#define _PAGE_BIT_FILE 0 /* software: pagecache or swap? */ ++ ++#define _PAGE_WT (1 << _PAGE_BIT_WT) ++#define _PAGE_DIRTY (1 << _PAGE_BIT_DIRTY) ++#define _PAGE_EXECUTE (1 << _PAGE_BIT_EXECUTE) ++#define _PAGE_RW (1 << _PAGE_BIT_RW) ++#define _PAGE_USER (1 << _PAGE_BIT_USER) ++#define _PAGE_BUFFER (1 << _PAGE_BIT_BUFFER) ++#define _PAGE_GLOBAL (1 << _PAGE_BIT_GLOBAL) ++#define _PAGE_CACHABLE (1 << _PAGE_BIT_CACHABLE) ++ ++/* Software flags */ ++#define _PAGE_ACCESSED (1 << _PAGE_BIT_ACCESSED) ++#define _PAGE_PRESENT (1 << _PAGE_BIT_PRESENT) ++#define _PAGE_FILE (1 << _PAGE_BIT_FILE) ++ ++/* ++ * Page types, i.e. sizes. _PAGE_TYPE_NONE corresponds to what is ++ * usually called _PAGE_PROTNONE on other architectures. ++ * ++ * XXX: Find out if _PAGE_PROTNONE is equivalent with !_PAGE_USER. If ++ * so, we can encode all possible page sizes (although we can't really ++ * support 1K pages anyway due to the _PAGE_PRESENT and _PAGE_ACCESSED ++ * bits) ++ * ++ */ ++#define _PAGE_TYPE_MASK ((1 << _PAGE_BIT_SZ0) | (1 << _PAGE_BIT_SZ1)) ++#define _PAGE_TYPE_NONE (0 << _PAGE_BIT_SZ0) ++#define _PAGE_TYPE_SMALL (1 << _PAGE_BIT_SZ0) ++#define _PAGE_TYPE_MEDIUM (2 << _PAGE_BIT_SZ0) ++#define _PAGE_TYPE_LARGE (3 << _PAGE_BIT_SZ0) ++ ++/* ++ * Mask which drop software flags. We currently can't handle more than ++ * 512 MiB of physical memory, so we can use bits 29-31 for other ++ * stuff. With a fixed 4K page size, we can use bits 10-11 as well as ++ * bits 2-3 (SZ) ++ */ ++#define _PAGE_FLAGS_HARDWARE_MASK 0xfffff3ff ++ ++#define _PAGE_FLAGS_CACHE_MASK (_PAGE_CACHABLE | _PAGE_BUFFER | _PAGE_WT) ++ ++/* TODO: Check for saneness */ ++/* User-mode page table flags (to be set in a pgd or pmd entry) */ ++#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_TYPE_SMALL | _PAGE_RW \ ++ | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) ++/* Kernel-mode page table flags */ ++#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_TYPE_SMALL | _PAGE_RW \ ++ | _PAGE_ACCESSED | _PAGE_DIRTY) ++/* Flags that may be modified by software */ ++#define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY \ ++ | _PAGE_FLAGS_CACHE_MASK) ++ ++#define _PAGE_FLAGS_READ (_PAGE_CACHABLE | _PAGE_BUFFER) ++#define _PAGE_FLAGS_WRITE (_PAGE_FLAGS_READ | _PAGE_RW | _PAGE_DIRTY) ++ ++#define _PAGE_NORMAL(x) __pgprot((x) | _PAGE_PRESENT | _PAGE_TYPE_SMALL \ ++ | _PAGE_ACCESSED) ++ ++#define PAGE_NONE (_PAGE_ACCESSED | _PAGE_TYPE_NONE) ++#define PAGE_READ (_PAGE_FLAGS_READ | _PAGE_USER) ++#define PAGE_EXEC (_PAGE_FLAGS_READ | _PAGE_EXECUTE | _PAGE_USER) ++#define PAGE_WRITE (_PAGE_FLAGS_WRITE | _PAGE_USER) ++#define PAGE_KERNEL _PAGE_NORMAL(_PAGE_FLAGS_WRITE | _PAGE_EXECUTE | _PAGE_GLOBAL) ++#define PAGE_KERNEL_RO _PAGE_NORMAL(_PAGE_FLAGS_READ | _PAGE_EXECUTE | _PAGE_GLOBAL) ++ ++#define _PAGE_P(x) _PAGE_NORMAL((x) & ~(_PAGE_RW | _PAGE_DIRTY)) ++#define _PAGE_S(x) _PAGE_NORMAL(x) ++ ++#define PAGE_COPY _PAGE_P(PAGE_WRITE | PAGE_READ) ++ ++#ifndef __ASSEMBLY__ ++/* ++ * The hardware supports flags for write- and execute access. Read is ++ * always allowed if the page is loaded into the TLB, so the "-w-", ++ * "--x" and "-wx" mappings are implemented as "rw-", "r-x" and "rwx", ++ * respectively. ++ * ++ * The "---" case is handled by software; the page will simply not be ++ * loaded into the TLB if the page type is _PAGE_TYPE_NONE. ++ */ ++ ++#define __P000 __pgprot(PAGE_NONE) ++#define __P001 _PAGE_P(PAGE_READ) ++#define __P010 _PAGE_P(PAGE_WRITE) ++#define __P011 _PAGE_P(PAGE_WRITE | PAGE_READ) ++#define __P100 _PAGE_P(PAGE_EXEC) ++#define __P101 _PAGE_P(PAGE_EXEC | PAGE_READ) ++#define __P110 _PAGE_P(PAGE_EXEC | PAGE_WRITE) ++#define __P111 _PAGE_P(PAGE_EXEC | PAGE_WRITE | PAGE_READ) ++ ++#define __S000 __pgprot(PAGE_NONE) ++#define __S001 _PAGE_S(PAGE_READ) ++#define __S010 _PAGE_S(PAGE_WRITE) ++#define __S011 _PAGE_S(PAGE_WRITE | PAGE_READ) ++#define __S100 _PAGE_S(PAGE_EXEC) ++#define __S101 _PAGE_S(PAGE_EXEC | PAGE_READ) ++#define __S110 _PAGE_S(PAGE_EXEC | PAGE_WRITE) ++#define __S111 _PAGE_S(PAGE_EXEC | PAGE_WRITE | PAGE_READ) ++ ++#define pte_none(x) (!pte_val(x)) ++#define pte_present(x) (pte_val(x) & _PAGE_PRESENT) ++ ++#define pte_clear(mm,addr,xp) \ ++ do { \ ++ set_pte_at(mm, addr, xp, __pte(0)); \ ++ } while (0) ++ ++/* ++ * The following only work if pte_present() is true. ++ * Undefined behaviour if not.. ++ */ ++static inline int pte_read(pte_t pte) ++{ ++ return pte_val(pte) & _PAGE_USER; ++} ++static inline int pte_write(pte_t pte) ++{ ++ return pte_val(pte) & _PAGE_RW; ++} ++static inline int pte_exec(pte_t pte) ++{ ++ return pte_val(pte) & _PAGE_EXECUTE; ++} ++static inline int pte_dirty(pte_t pte) ++{ ++ return pte_val(pte) & _PAGE_DIRTY; ++} ++static inline int pte_young(pte_t pte) ++{ ++ return pte_val(pte) & _PAGE_ACCESSED; ++} ++ ++/* ++ * The following only work if pte_present() is not true. ++ */ ++static inline int pte_file(pte_t pte) ++{ ++ return pte_val(pte) & _PAGE_FILE; ++} ++ ++/* Mutator functions for PTE bits */ ++static inline pte_t pte_rdprotect(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_USER)); ++ return pte; ++} ++static inline pte_t pte_wrprotect(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_RW)); ++ return pte; ++} ++static inline pte_t pte_exprotect(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_EXECUTE)); ++ return pte; ++} ++static inline pte_t pte_mkclean(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_DIRTY)); ++ return pte; ++} ++static inline pte_t pte_mkold(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_ACCESSED)); ++ return pte; ++} ++static inline pte_t pte_mkread(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_USER)); ++ return pte; ++} ++static inline pte_t pte_mkwrite(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_RW)); ++ return pte; ++} ++static inline pte_t pte_mkexec(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_EXECUTE)); ++ return pte; ++} ++static inline pte_t pte_mkdirty(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_DIRTY)); ++ return pte; ++} ++static inline pte_t pte_mkyoung(pte_t pte) ++{ ++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED)); ++ return pte; ++} ++ ++#define pmd_none(x) (!pmd_val(x)) ++#define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT) ++#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) ++#define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) \ ++ != _KERNPG_TABLE) ++ ++/* ++ * Permanent address of a page. We don't support highmem, so this is ++ * trivial. ++ */ ++#define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) ++#define pte_page(x) phys_to_page(pte_val(x) & PTE_PHYS_MASK) ++ ++/* ++ * Mark the prot value as uncacheable and unbufferable ++ */ ++#define pgprot_noncached(prot) \ ++ __pgprot(pgprot_val(prot) & ~(_PAGE_BUFFER | _PAGE_CACHABLE)) ++ ++/* ++ * Mark the prot value as uncacheable but bufferable ++ */ ++#define pgprot_writecombine(prot) \ ++ __pgprot((pgprot_val(prot) & ~_PAGE_CACHABLE) | _PAGE_BUFFER) ++ ++/* ++ * Conversion functions: convert a page and protection to a page entry, ++ * and a page entry and page directory to the page they refer to. ++ * ++ * extern pte_t mk_pte(struct page *page, pgprot_t pgprot) ++ */ ++#define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) ++ ++static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) ++{ ++ set_pte(&pte, __pte((pte_val(pte) & _PAGE_CHG_MASK) ++ | pgprot_val(newprot))); ++ return pte; ++} ++ ++#define page_pte(page) page_pte_prot(page, __pgprot(0)) ++ ++#define pmd_page_kernel(pmd) \ ++ ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) ++ ++#define pmd_page(pmd) (phys_to_page(pmd_val(pmd))) ++ ++/* to find an entry in a page-table-directory. */ ++#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) ++#define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) ++#define pgd_offset_current(address) \ ++ ((pgd_t *)__mfsr(SYSREG_PTBR) + pgd_index(address)) ++ ++/* to find an entry in a kernel page-table-directory */ ++#define pgd_offset_k(address) pgd_offset(&init_mm, address) ++ ++/* Find an entry in the third-level page table.. */ ++#define pte_index(address) \ ++ ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) ++#define pte_offset(dir, address) \ ++ ((pte_t *) pmd_page_kernel(*(dir)) + pte_index(address)) ++#define pte_offset_kernel(dir, address) \ ++ ((pte_t *) pmd_page_kernel(*(dir)) + pte_index(address)) ++#define pte_offset_map(dir, address) pte_offset_kernel(dir, address) ++#define pte_offset_map_nested(dir, address) pte_offset_kernel(dir, address) ++#define pte_unmap(pte) do { } while (0) ++#define pte_unmap_nested(pte) do { } while (0) ++ ++struct vm_area_struct; ++extern void update_mmu_cache(struct vm_area_struct * vma, ++ unsigned long address, pte_t pte); ++ ++/* ++ * Encode and decode a swap entry ++ * ++ * Constraints: ++ * _PAGE_FILE at bit 0 ++ * _PAGE_TYPE_* at bits 2-3 (for emulating _PAGE_PROTNONE) ++ * _PAGE_PRESENT at bit 10 ++ * ++ * We encode the type into bits 4-9 and offset into bits 11-31. This ++ * gives us a 21 bits offset, or 2**21 * 4K = 8G usable swap space per ++ * device, and 64 possible types. ++ * ++ * NOTE: We should set ZEROs at the position of _PAGE_PRESENT ++ * and _PAGE_PROTNONE bits ++ */ ++#define __swp_type(x) (((x).val >> 4) & 0x3f) ++#define __swp_offset(x) ((x).val >> 11) ++#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 4) | ((offset) << 11) }) ++#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) ++#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) ++ ++/* ++ * Encode and decode a nonlinear file mapping entry. We have to ++ * preserve _PAGE_FILE and _PAGE_PRESENT here. _PAGE_TYPE_* isn't ++ * necessary, since _PAGE_FILE implies !_PAGE_PROTNONE (?) ++ */ ++#define PTE_FILE_MAX_BITS 30 ++#define pte_to_pgoff(pte) (((pte_val(pte) >> 1) & 0x1ff) \ ++ | ((pte_val(pte) >> 11) << 9)) ++#define pgoff_to_pte(off) ((pte_t) { ((((off) & 0x1ff) << 1) \ ++ | (((off) >> 9) << 11) \ ++ | _PAGE_FILE) }) ++ ++typedef pte_t *pte_addr_t; ++ ++#define kern_addr_valid(addr) (1) ++ ++#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ ++ remap_pfn_range(vma, vaddr, pfn, size, prot) ++ ++#define MK_IOSPACE_PFN(space, pfn) (pfn) ++#define GET_IOSPACE(pfn) 0 ++#define GET_PFN(pfn) (pfn) ++ ++/* No page table caches to initialize (?) */ ++#define pgtable_cache_init() do { } while(0) ++ ++#include ++ ++#endif /* !__ASSEMBLY__ */ ++ ++#endif /* __ASM_AVR32_PGTABLE_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/poll.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/poll.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,27 @@ ++#ifndef __ASM_AVR32_POLL_H ++#define __ASM_AVR32_POLL_H ++ ++/* These are specified by iBCS2 */ ++#define POLLIN 0x0001 ++#define POLLPRI 0x0002 ++#define POLLOUT 0x0004 ++#define POLLERR 0x0008 ++#define POLLHUP 0x0010 ++#define POLLNVAL 0x0020 ++ ++/* The rest seem to be more-or-less nonstandard. Check them! */ ++#define POLLRDNORM 0x0040 ++#define POLLRDBAND 0x0080 ++#define POLLWRNORM 0x0100 ++#define POLLWRBAND 0x0200 ++#define POLLMSG 0x0400 ++#define POLLREMOVE 0x1000 ++#define POLLRDHUP 0x2000 ++ ++struct pollfd { ++ int fd; ++ short events; ++ short revents; ++}; ++ ++#endif /* __ASM_AVR32_POLL_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/posix_types.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/posix_types.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,129 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_POSIX_TYPES_H ++#define __ASM_AVR32_POSIX_TYPES_H ++ ++/* ++ * This file is generally used by user-level software, so you need to ++ * be a little careful about namespace pollution etc. Also, we cannot ++ * assume GCC is being used. ++ */ ++ ++typedef unsigned long __kernel_ino_t; ++typedef unsigned short __kernel_mode_t; ++typedef unsigned short __kernel_nlink_t; ++typedef long __kernel_off_t; ++typedef int __kernel_pid_t; ++typedef unsigned short __kernel_ipc_pid_t; ++typedef unsigned int __kernel_uid_t; ++typedef unsigned int __kernel_gid_t; ++typedef unsigned long __kernel_size_t; ++typedef int __kernel_ssize_t; ++typedef int __kernel_ptrdiff_t; ++typedef long __kernel_time_t; ++typedef long __kernel_suseconds_t; ++typedef long __kernel_clock_t; ++typedef int __kernel_timer_t; ++typedef int __kernel_clockid_t; ++typedef int __kernel_daddr_t; ++typedef char * __kernel_caddr_t; ++typedef unsigned short __kernel_uid16_t; ++typedef unsigned short __kernel_gid16_t; ++typedef unsigned int __kernel_uid32_t; ++typedef unsigned int __kernel_gid32_t; ++ ++typedef unsigned short __kernel_old_uid_t; ++typedef unsigned short __kernel_old_gid_t; ++typedef unsigned short __kernel_old_dev_t; ++ ++#ifdef __GNUC__ ++typedef long long __kernel_loff_t; ++#endif ++ ++typedef struct { ++#if defined(__KERNEL__) || defined(__USE_ALL) ++ int val[2]; ++#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */ ++ int __val[2]; ++#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */ ++} __kernel_fsid_t; ++ ++#if defined(__KERNEL__) ++ ++#undef __FD_SET ++static __inline__ void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp) ++{ ++ unsigned long __tmp = __fd / __NFDBITS; ++ unsigned long __rem = __fd % __NFDBITS; ++ __fdsetp->fds_bits[__tmp] |= (1UL<<__rem); ++} ++ ++#undef __FD_CLR ++static __inline__ void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp) ++{ ++ unsigned long __tmp = __fd / __NFDBITS; ++ unsigned long __rem = __fd % __NFDBITS; ++ __fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem); ++} ++ ++ ++#undef __FD_ISSET ++static __inline__ int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p) ++{ ++ unsigned long __tmp = __fd / __NFDBITS; ++ unsigned long __rem = __fd % __NFDBITS; ++ return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0; ++} ++ ++/* ++ * This will unroll the loop for the normal constant case (8 ints, ++ * for a 256-bit fd_set) ++ */ ++#undef __FD_ZERO ++static __inline__ void __FD_ZERO(__kernel_fd_set *__p) ++{ ++ unsigned long *__tmp = __p->fds_bits; ++ int __i; ++ ++ if (__builtin_constant_p(__FDSET_LONGS)) { ++ switch (__FDSET_LONGS) { ++ case 16: ++ __tmp[ 0] = 0; __tmp[ 1] = 0; ++ __tmp[ 2] = 0; __tmp[ 3] = 0; ++ __tmp[ 4] = 0; __tmp[ 5] = 0; ++ __tmp[ 6] = 0; __tmp[ 7] = 0; ++ __tmp[ 8] = 0; __tmp[ 9] = 0; ++ __tmp[10] = 0; __tmp[11] = 0; ++ __tmp[12] = 0; __tmp[13] = 0; ++ __tmp[14] = 0; __tmp[15] = 0; ++ return; ++ ++ case 8: ++ __tmp[ 0] = 0; __tmp[ 1] = 0; ++ __tmp[ 2] = 0; __tmp[ 3] = 0; ++ __tmp[ 4] = 0; __tmp[ 5] = 0; ++ __tmp[ 6] = 0; __tmp[ 7] = 0; ++ return; ++ ++ case 4: ++ __tmp[ 0] = 0; __tmp[ 1] = 0; ++ __tmp[ 2] = 0; __tmp[ 3] = 0; ++ return; ++ } ++ } ++ __i = __FDSET_LONGS; ++ while (__i) { ++ __i--; ++ *__tmp = 0; ++ __tmp++; ++ } ++} ++ ++#endif /* defined(__KERNEL__) */ ++ ++#endif /* __ASM_AVR32_POSIX_TYPES_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/processor.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/processor.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,147 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_PROCESSOR_H ++#define __ASM_AVR32_PROCESSOR_H ++ ++#include ++#include ++ ++#define TASK_SIZE 0x80000000 ++ ++#ifndef __ASSEMBLY__ ++ ++static inline void *current_text_addr(void) ++{ ++ register void *pc asm("pc"); ++ return pc; ++} ++ ++enum arch_type { ++ ARCH_AVR32A, ++ ARCH_AVR32B, ++ ARCH_MAX ++}; ++ ++enum cpu_type { ++ CPU_MORGAN, ++ CPU_AT32AP, ++ CPU_MAX ++}; ++ ++enum tlb_config { ++ TLB_NONE, ++ TLB_SPLIT, ++ TLB_UNIFIED, ++ TLB_INVALID ++}; ++ ++struct avr32_cpuinfo { ++ struct clk *clk; ++ unsigned long loops_per_jiffy; ++ enum arch_type arch_type; ++ enum cpu_type cpu_type; ++ unsigned short arch_revision; ++ unsigned short cpu_revision; ++ enum tlb_config tlb_config; ++ ++ struct cache_info icache; ++ struct cache_info dcache; ++}; ++ ++extern struct avr32_cpuinfo boot_cpu_data; ++ ++#ifdef CONFIG_SMP ++extern struct avr32_cpuinfo cpu_data[]; ++#define current_cpu_data cpu_data[smp_processor_id()] ++#else ++#define cpu_data (&boot_cpu_data) ++#define current_cpu_data boot_cpu_data ++#endif ++ ++/* This decides where the kernel will search for a free chunk of vm ++ * space during mmap's ++ */ ++#define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3)) ++ ++#define cpu_relax() barrier() ++#define cpu_sync_pipeline() asm volatile("sub pc, -2" : : : "memory") ++ ++struct cpu_context { ++ unsigned long sr; ++ unsigned long pc; ++ unsigned long ksp; /* Kernel stack pointer */ ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++}; ++ ++/* This struct contains the CPU context as stored by switch_to() */ ++struct thread_struct { ++ struct cpu_context cpu_context; ++ unsigned long single_step_addr; ++ u16 single_step_insn; ++}; ++ ++#define INIT_THREAD { \ ++ .cpu_context = { \ ++ .ksp = sizeof(init_stack) + (long)&init_stack, \ ++ }, \ ++} ++ ++/* ++ * Do necessary setup to start up a newly executed thread. ++ */ ++#define start_thread(regs, new_pc, new_sp) \ ++ do { \ ++ set_fs(USER_DS); \ ++ memset(regs, 0, sizeof(*regs)); \ ++ regs->sr = MODE_USER; \ ++ regs->pc = new_pc & ~1; \ ++ regs->sp = new_sp; \ ++ } while(0) ++ ++struct task_struct; ++ ++/* Free all resources held by a thread */ ++extern void release_thread(struct task_struct *); ++ ++/* Create a kernel thread without removing it from tasklists */ ++extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); ++ ++/* Prepare to copy thread state - unlazy all lazy status */ ++#define prepare_to_copy(tsk) do { } while(0) ++ ++/* Return saved PC of a blocked thread */ ++#define thread_saved_pc(tsk) ((tsk)->thread.cpu_context.pc) ++ ++struct pt_regs; ++void show_trace(struct task_struct *task, unsigned long *stack, ++ struct pt_regs *regs); ++ ++extern unsigned long get_wchan(struct task_struct *p); ++ ++#define KSTK_EIP(tsk) ((tsk)->thread.cpu_context.pc) ++#define KSTK_ESP(tsk) ((tsk)->thread.cpu_context.ksp) ++ ++#define ARCH_HAS_PREFETCH ++ ++static inline void prefetch(const void *x) ++{ ++ const char *c = x; ++ asm volatile("pref %0" : : "r"(c)); ++} ++#define PREFETCH_STRIDE L1_CACHE_BYTES ++ ++#endif /* __ASSEMBLY__ */ ++ ++#endif /* __ASM_AVR32_PROCESSOR_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/ptrace.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/ptrace.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,154 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_PTRACE_H ++#define __ASM_AVR32_PTRACE_H ++ ++#define PTRACE_GETREGS 12 ++#define PTRACE_SETREGS 13 ++ ++/* ++ * Status Register bits ++ */ ++#define SR_H 0x40000000 ++#define SR_R 0x20000000 ++#define SR_J 0x10000000 ++#define SR_DM 0x08000000 ++#define SR_D 0x04000000 ++#define MODE_NMI 0x01c00000 ++#define MODE_EXCEPTION 0x01800000 ++#define MODE_INT3 0x01400000 ++#define MODE_INT2 0x01000000 ++#define MODE_INT1 0x00c00000 ++#define MODE_INT0 0x00800000 ++#define MODE_SUPERVISOR 0x00400000 ++#define MODE_USER 0x00000000 ++#define MODE_MASK 0x01c00000 ++#define SR_EM 0x00200000 ++#define SR_I3M 0x00100000 ++#define SR_I2M 0x00080000 ++#define SR_I1M 0x00040000 ++#define SR_I0M 0x00020000 ++#define SR_GM 0x00010000 ++ ++#define SR_H_BIT 30 ++#define SR_R_BIT 29 ++#define SR_J_BIT 28 ++#define SR_DM_BIT 27 ++#define SR_D_BIT 26 ++#define MODE_SHIFT 22 ++#define SR_EM_BIT 21 ++#define SR_I3M_BIT 20 ++#define SR_I2M_BIT 19 ++#define SR_I1M_BIT 18 ++#define SR_I0M_BIT 17 ++#define SR_GM_BIT 16 ++ ++/* The user-visible part */ ++#define SR_L 0x00000020 ++#define SR_Q 0x00000010 ++#define SR_V 0x00000008 ++#define SR_N 0x00000004 ++#define SR_Z 0x00000002 ++#define SR_C 0x00000001 ++ ++#define SR_L_BIT 5 ++#define SR_Q_BIT 4 ++#define SR_V_BIT 3 ++#define SR_N_BIT 2 ++#define SR_Z_BIT 1 ++#define SR_C_BIT 0 ++ ++/* ++ * The order is defined by the stmts instruction. r0 is stored first, ++ * so it gets the highest address. ++ * ++ * Registers 0-12 are general-purpose registers (r12 is normally used for ++ * the function return value). ++ * Register 13 is the stack pointer ++ * Register 14 is the link register ++ * Register 15 is the program counter (retrieved from the RAR sysreg) ++ */ ++#define FRAME_SIZE_FULL 72 ++#define REG_R12_ORIG 68 ++#define REG_R0 64 ++#define REG_R1 60 ++#define REG_R2 56 ++#define REG_R3 52 ++#define REG_R4 48 ++#define REG_R5 44 ++#define REG_R6 40 ++#define REG_R7 36 ++#define REG_R8 32 ++#define REG_R9 28 ++#define REG_R10 24 ++#define REG_R11 20 ++#define REG_R12 16 ++#define REG_SP 12 ++#define REG_LR 8 ++ ++#define FRAME_SIZE_MIN 8 ++#define REG_PC 4 ++#define REG_SR 0 ++ ++#ifndef __ASSEMBLY__ ++struct pt_regs { ++ /* These are always saved */ ++ unsigned long sr; ++ unsigned long pc; ++ ++ /* These are sometimes saved */ ++ unsigned long lr; ++ unsigned long sp; ++ unsigned long r12; ++ unsigned long r11; ++ unsigned long r10; ++ unsigned long r9; ++ unsigned long r8; ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++ ++ /* Only saved on system call */ ++ unsigned long r12_orig; ++}; ++ ++#ifdef __KERNEL__ ++# define user_mode(regs) (((regs)->sr & MODE_MASK) == MODE_USER) ++extern void show_regs (struct pt_regs *); ++ ++static __inline__ int valid_user_regs(struct pt_regs *regs) ++{ ++ /* ++ * Some of the Java bits might be acceptable if/when we ++ * implement some support for that stuff... ++ */ ++ if ((regs->sr & 0xffff0000) == 0) ++ return 1; ++ ++ /* ++ * Force status register flags to be sane and report this ++ * illegal behaviour... ++ */ ++ regs->sr &= 0x0000ffff; ++ return 0; ++} ++ ++#define instruction_pointer(regs) ((regs)->pc) ++ ++#define profile_pc(regs) instruction_pointer(regs) ++ ++#endif /* __KERNEL__ */ ++ ++#endif /* ! __ASSEMBLY__ */ ++ ++#endif /* __ASM_AVR32_PTRACE_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/resource.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/resource.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_RESOURCE_H ++#define __ASM_AVR32_RESOURCE_H ++ ++#include ++ ++#endif /* __ASM_AVR32_RESOURCE_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/scatterlist.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/scatterlist.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,21 @@ ++#ifndef __ASM_AVR32_SCATTERLIST_H ++#define __ASM_AVR32_SCATTERLIST_H ++ ++struct scatterlist { ++ struct page *page; ++ unsigned int offset; ++ dma_addr_t dma_address; ++ unsigned int length; ++}; ++ ++/* These macros should be used after a pci_map_sg call has been done ++ * to get bus addresses of each of the SG entries and their lengths. ++ * You should only work with the number of sg entries pci_map_sg ++ * returns. ++ */ ++#define sg_dma_address(sg) ((sg)->dma_address) ++#define sg_dma_len(sg) ((sg)->length) ++ ++#define ISA_DMA_THRESHOLD (0xffffffff) ++ ++#endif /* __ASM_AVR32_SCATTERLIST_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/sections.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/sections.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_SECTIONS_H ++#define __ASM_AVR32_SECTIONS_H ++ ++#include ++ ++#endif /* __ASM_AVR32_SECTIONS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/semaphore.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/semaphore.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,109 @@ ++/* ++ * SMP- and interrupt-safe semaphores. ++ * ++ * Copyright (C) 2006 Atmel Corporation ++ * ++ * Based on include/asm-i386/semaphore.h ++ * Copyright (C) 1996 Linus Torvalds ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++#ifndef __ASM_AVR32_SEMAPHORE_H ++#define __ASM_AVR32_SEMAPHORE_H ++ ++#include ++ ++#include ++#include ++#include ++#include ++ ++struct semaphore { ++ atomic_t count; ++ int sleepers; ++ wait_queue_head_t wait; ++}; ++ ++#define __SEMAPHORE_INITIALIZER(name, n) \ ++{ \ ++ .count = ATOMIC_INIT(n), \ ++ .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \ ++} ++ ++#define __DECLARE_SEMAPHORE_GENERIC(name,count) \ ++ struct semaphore name = __SEMAPHORE_INITIALIZER(name,count) ++ ++#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1) ++#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0) ++ ++static inline void sema_init (struct semaphore *sem, int val) ++{ ++ atomic_set(&sem->count, val); ++ sem->sleepers = 0; ++ init_waitqueue_head(&sem->wait); ++} ++ ++static inline void init_MUTEX (struct semaphore *sem) ++{ ++ sema_init(sem, 1); ++} ++ ++static inline void init_MUTEX_LOCKED (struct semaphore *sem) ++{ ++ sema_init(sem, 0); ++} ++ ++void __down(struct semaphore * sem); ++int __down_interruptible(struct semaphore * sem); ++void __up(struct semaphore * sem); ++ ++/* ++ * This is ugly, but we want the default case to fall through. ++ * "__down_failed" is a special asm handler that calls the C ++ * routine that actually waits. See arch/i386/kernel/semaphore.c ++ */ ++static inline void down(struct semaphore * sem) ++{ ++ might_sleep(); ++ if (unlikely(atomic_dec_return (&sem->count) < 0)) ++ __down (sem); ++} ++ ++/* ++ * Interruptible try to acquire a semaphore. If we obtained ++ * it, return zero. If we were interrupted, returns -EINTR ++ */ ++static inline int down_interruptible(struct semaphore * sem) ++{ ++ int ret = 0; ++ ++ might_sleep(); ++ if (unlikely(atomic_dec_return (&sem->count) < 0)) ++ ret = __down_interruptible (sem); ++ return ret; ++} ++ ++/* ++ * Non-blockingly attempt to down() a semaphore. ++ * Returns zero if we acquired it ++ */ ++static inline int down_trylock(struct semaphore * sem) ++{ ++ return atomic_dec_if_positive(&sem->count) < 0; ++} ++ ++/* ++ * Note! This is subtle. We jump to wake people up only if ++ * the semaphore was negative (== somebody was waiting on it). ++ * The default case (no contention) will result in NO ++ * jumps for both down() and up(). ++ */ ++static inline void up(struct semaphore * sem) ++{ ++ if (unlikely(atomic_inc_return (&sem->count) <= 0)) ++ __up (sem); ++} ++ ++#endif /*__ASM_AVR32_SEMAPHORE_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/sembuf.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/sembuf.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,25 @@ ++#ifndef __ASM_AVR32_SEMBUF_H ++#define __ASM_AVR32_SEMBUF_H ++ ++/* ++* The semid64_ds structure for AVR32 architecture. ++ * Note extra padding because this structure is passed back and forth ++ * between kernel and user space. ++ * ++ * Pad space is left for: ++ * - 64-bit time_t to solve y2038 problem ++ * - 2 miscellaneous 32-bit values ++ */ ++ ++struct semid64_ds { ++ struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ ++ __kernel_time_t sem_otime; /* last semop time */ ++ unsigned long __unused1; ++ __kernel_time_t sem_ctime; /* last change time */ ++ unsigned long __unused2; ++ unsigned long sem_nsems; /* no. of semaphores in array */ ++ unsigned long __unused3; ++ unsigned long __unused4; ++}; ++ ++#endif /* __ASM_AVR32_SEMBUF_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/setup.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/setup.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,141 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * Based on linux/include/asm-arm/setup.h ++ * Copyright (C) 1997-1999 Russel King ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++#ifndef __ASM_AVR32_SETUP_H__ ++#define __ASM_AVR32_SETUP_H__ ++ ++#define COMMAND_LINE_SIZE 256 ++ ++/* Magic number indicating that a tag table is present */ ++#define ATAG_MAGIC 0xa2a25441 ++ ++#ifndef __ASSEMBLY__ ++ ++/* ++ * Generic memory range, used by several tags. ++ * ++ * addr is always physical. ++ * size is measured in bytes. ++ * next is for use by the OS, e.g. for grouping regions into ++ * linked lists. ++ */ ++struct tag_mem_range { ++ u32 addr; ++ u32 size; ++ struct tag_mem_range * next; ++}; ++ ++/* The list ends with an ATAG_NONE node. */ ++#define ATAG_NONE 0x00000000 ++ ++struct tag_header { ++ u32 size; ++ u32 tag; ++}; ++ ++/* The list must start with an ATAG_CORE node */ ++#define ATAG_CORE 0x54410001 ++ ++struct tag_core { ++ u32 flags; ++ u32 pagesize; ++ u32 rootdev; ++}; ++ ++/* it is allowed to have multiple ATAG_MEM nodes */ ++#define ATAG_MEM 0x54410002 ++/* ATAG_MEM uses tag_mem_range */ ++ ++/* command line: \0 terminated string */ ++#define ATAG_CMDLINE 0x54410003 ++ ++struct tag_cmdline { ++ char cmdline[1]; /* this is the minimum size */ ++}; ++ ++/* Ramdisk image (may be compressed) */ ++#define ATAG_RDIMG 0x54410004 ++/* ATAG_RDIMG uses tag_mem_range */ ++ ++/* Information about various clocks present in the system */ ++#define ATAG_CLOCK 0x54410005 ++ ++struct tag_clock { ++ u32 clock_id; /* Which clock are we talking about? */ ++ u32 clock_flags; /* Special features */ ++ u64 clock_hz; /* Clock speed in Hz */ ++}; ++ ++/* The clock types we know about */ ++#define CLOCK_BOOTCPU 0 ++ ++/* Memory reserved for the system (e.g. the bootloader) */ ++#define ATAG_RSVD_MEM 0x54410006 ++/* ATAG_RSVD_MEM uses tag_mem_range */ ++ ++/* Ethernet information */ ++ ++#define ATAG_ETHERNET 0x54410007 ++ ++struct tag_ethernet { ++ u8 mac_index; ++ u8 mii_phy_addr; ++ u8 hw_address[6]; ++}; ++ ++#define ETH_INVALID_PHY 0xff ++ ++struct tag { ++ struct tag_header hdr; ++ union { ++ struct tag_core core; ++ struct tag_mem_range mem_range; ++ struct tag_cmdline cmdline; ++ struct tag_clock clock; ++ struct tag_ethernet ethernet; ++ } u; ++}; ++ ++struct tagtable { ++ u32 tag; ++ int (*parse)(struct tag *); ++}; ++ ++#define __tag __attribute_used__ __attribute__((__section__(".taglist"))) ++#define __tagtable(tag, fn) \ ++ static struct tagtable __tagtable_##fn __tag = { tag, fn } ++ ++#define tag_member_present(tag,member) \ ++ ((unsigned long)(&((struct tag *)0L)->member + 1) \ ++ <= (tag)->hdr.size * 4) ++ ++#define tag_next(t) ((struct tag *)((u32 *)(t) + (t)->hdr.size)) ++#define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) ++ ++#define for_each_tag(t,base) \ ++ for (t = base; t->hdr.size; t = tag_next(t)) ++ ++extern struct tag_mem_range *mem_phys; ++extern struct tag_mem_range *mem_reserved; ++extern struct tag_mem_range *mem_ramdisk; ++ ++extern struct tag *bootloader_tags; ++ ++extern void setup_bootmem(void); ++extern void setup_processor(void); ++extern void board_setup_fbmem(unsigned long fbmem_start, ++ unsigned long fbmem_size); ++ ++/* Chip-specific hook to enable the use of SDRAM */ ++void chip_enable_sdram(void); ++ ++#endif /* !__ASSEMBLY__ */ ++ ++#endif /* __ASM_AVR32_SETUP_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/shmbuf.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/shmbuf.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,42 @@ ++#ifndef __ASM_AVR32_SHMBUF_H ++#define __ASM_AVR32_SHMBUF_H ++ ++/* ++ * The shmid64_ds structure for i386 architecture. ++ * Note extra padding because this structure is passed back and forth ++ * between kernel and user space. ++ * ++ * Pad space is left for: ++ * - 64-bit time_t to solve y2038 problem ++ * - 2 miscellaneous 32-bit values ++ */ ++ ++struct shmid64_ds { ++ struct ipc64_perm shm_perm; /* operation perms */ ++ size_t shm_segsz; /* size of segment (bytes) */ ++ __kernel_time_t shm_atime; /* last attach time */ ++ unsigned long __unused1; ++ __kernel_time_t shm_dtime; /* last detach time */ ++ unsigned long __unused2; ++ __kernel_time_t shm_ctime; /* last change time */ ++ unsigned long __unused3; ++ __kernel_pid_t shm_cpid; /* pid of creator */ ++ __kernel_pid_t shm_lpid; /* pid of last operator */ ++ unsigned long shm_nattch; /* no. of current attaches */ ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++struct shminfo64 { ++ unsigned long shmmax; ++ unsigned long shmmin; ++ unsigned long shmmni; ++ unsigned long shmseg; ++ unsigned long shmall; ++ unsigned long __unused1; ++ unsigned long __unused2; ++ unsigned long __unused3; ++ unsigned long __unused4; ++}; ++ ++#endif /* __ASM_AVR32_SHMBUF_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/shmparam.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/shmparam.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_SHMPARAM_H ++#define __ASM_AVR32_SHMPARAM_H ++ ++#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ ++ ++#endif /* __ASM_AVR32_SHMPARAM_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/sigcontext.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/sigcontext.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,34 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_SIGCONTEXT_H ++#define __ASM_AVR32_SIGCONTEXT_H ++ ++struct sigcontext { ++ unsigned long oldmask; ++ ++ /* CPU registers */ ++ unsigned long sr; ++ unsigned long pc; ++ unsigned long lr; ++ unsigned long sp; ++ unsigned long r12; ++ unsigned long r11; ++ unsigned long r10; ++ unsigned long r9; ++ unsigned long r8; ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++}; ++ ++#endif /* __ASM_AVR32_SIGCONTEXT_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/siginfo.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/siginfo.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef _AVR32_SIGINFO_H ++#define _AVR32_SIGINFO_H ++ ++#include ++ ++#endif +Index: linux-2.6.18-avr32/include/asm-avr32/signal.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/signal.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,168 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_SIGNAL_H ++#define __ASM_AVR32_SIGNAL_H ++ ++#include ++ ++/* Avoid too many header ordering problems. */ ++struct siginfo; ++ ++#ifdef __KERNEL__ ++/* Most things should be clean enough to redefine this at will, if care ++ is taken to make libc match. */ ++ ++#define _NSIG 64 ++#define _NSIG_BPW 32 ++#define _NSIG_WORDS (_NSIG / _NSIG_BPW) ++ ++typedef unsigned long old_sigset_t; /* at least 32 bits */ ++ ++typedef struct { ++ unsigned long sig[_NSIG_WORDS]; ++} sigset_t; ++ ++#else ++/* Here we must cater to libcs that poke about in kernel headers. */ ++ ++#define NSIG 32 ++typedef unsigned long sigset_t; ++ ++#endif /* __KERNEL__ */ ++ ++#define SIGHUP 1 ++#define SIGINT 2 ++#define SIGQUIT 3 ++#define SIGILL 4 ++#define SIGTRAP 5 ++#define SIGABRT 6 ++#define SIGIOT 6 ++#define SIGBUS 7 ++#define SIGFPE 8 ++#define SIGKILL 9 ++#define SIGUSR1 10 ++#define SIGSEGV 11 ++#define SIGUSR2 12 ++#define SIGPIPE 13 ++#define SIGALRM 14 ++#define SIGTERM 15 ++#define SIGSTKFLT 16 ++#define SIGCHLD 17 ++#define SIGCONT 18 ++#define SIGSTOP 19 ++#define SIGTSTP 20 ++#define SIGTTIN 21 ++#define SIGTTOU 22 ++#define SIGURG 23 ++#define SIGXCPU 24 ++#define SIGXFSZ 25 ++#define SIGVTALRM 26 ++#define SIGPROF 27 ++#define SIGWINCH 28 ++#define SIGIO 29 ++#define SIGPOLL SIGIO ++/* ++#define SIGLOST 29 ++*/ ++#define SIGPWR 30 ++#define SIGSYS 31 ++#define SIGUNUSED 31 ++ ++/* These should not be considered constants from userland. */ ++#define SIGRTMIN 32 ++#define SIGRTMAX (_NSIG-1) ++ ++/* ++ * SA_FLAGS values: ++ * ++ * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. ++ * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. ++ * SA_SIGINFO deliver the signal with SIGINFO structs ++ * SA_ONSTACK indicates that a registered stack_t will be used. ++ * SA_RESTART flag to get restarting signals (which were the default long ago) ++ * SA_NODEFER prevents the current signal from being masked in the handler. ++ * SA_RESETHAND clears the handler when the signal is delivered. ++ * ++ * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single ++ * Unix names RESETHAND and NODEFER respectively. ++ */ ++#define SA_NOCLDSTOP 0x00000001 ++#define SA_NOCLDWAIT 0x00000002 ++#define SA_SIGINFO 0x00000004 ++#define SA_RESTORER 0x04000000 ++#define SA_ONSTACK 0x08000000 ++#define SA_RESTART 0x10000000 ++#define SA_NODEFER 0x40000000 ++#define SA_RESETHAND 0x80000000 ++ ++#define SA_NOMASK SA_NODEFER ++#define SA_ONESHOT SA_RESETHAND ++ ++/* ++ * sigaltstack controls ++ */ ++#define SS_ONSTACK 1 ++#define SS_DISABLE 2 ++ ++#define MINSIGSTKSZ 2048 ++#define SIGSTKSZ 8192 ++ ++#include ++ ++#ifdef __KERNEL__ ++struct old_sigaction { ++ __sighandler_t sa_handler; ++ old_sigset_t sa_mask; ++ unsigned long sa_flags; ++ __sigrestore_t sa_restorer; ++}; ++ ++struct sigaction { ++ __sighandler_t sa_handler; ++ unsigned long sa_flags; ++ __sigrestore_t sa_restorer; ++ sigset_t sa_mask; /* mask last for extensibility */ ++}; ++ ++struct k_sigaction { ++ struct sigaction sa; ++}; ++#else ++/* Here we must cater to libcs that poke about in kernel headers. */ ++ ++struct sigaction { ++ union { ++ __sighandler_t _sa_handler; ++ void (*_sa_sigaction)(int, struct siginfo *, void *); ++ } _u; ++ sigset_t sa_mask; ++ unsigned long sa_flags; ++ void (*sa_restorer)(void); ++}; ++ ++#define sa_handler _u._sa_handler ++#define sa_sigaction _u._sa_sigaction ++ ++#endif /* __KERNEL__ */ ++ ++typedef struct sigaltstack { ++ void __user *ss_sp; ++ int ss_flags; ++ size_t ss_size; ++} stack_t; ++ ++#ifdef __KERNEL__ ++ ++#include ++#undef __HAVE_ARCH_SIG_BITOPS ++ ++#define ptrace_signal_deliver(regs, cookie) do { } while (0) ++ ++#endif /* __KERNEL__ */ ++ ++#endif +Index: linux-2.6.18-avr32/include/asm-avr32/socket.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/socket.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,53 @@ ++#ifndef __ASM_AVR32_SOCKET_H ++#define __ASM_AVR32_SOCKET_H ++ ++#include ++ ++/* For setsockopt(2) */ ++#define SOL_SOCKET 1 ++ ++#define SO_DEBUG 1 ++#define SO_REUSEADDR 2 ++#define SO_TYPE 3 ++#define SO_ERROR 4 ++#define SO_DONTROUTE 5 ++#define SO_BROADCAST 6 ++#define SO_SNDBUF 7 ++#define SO_RCVBUF 8 ++#define SO_SNDBUFFORCE 32 ++#define SO_RCVBUFFORCE 33 ++#define SO_KEEPALIVE 9 ++#define SO_OOBINLINE 10 ++#define SO_NO_CHECK 11 ++#define SO_PRIORITY 12 ++#define SO_LINGER 13 ++#define SO_BSDCOMPAT 14 ++/* To add :#define SO_REUSEPORT 15 */ ++#define SO_PASSCRED 16 ++#define SO_PEERCRED 17 ++#define SO_RCVLOWAT 18 ++#define SO_SNDLOWAT 19 ++#define SO_RCVTIMEO 20 ++#define SO_SNDTIMEO 21 ++ ++/* Security levels - as per NRL IPv6 - don't actually do anything */ ++#define SO_SECURITY_AUTHENTICATION 22 ++#define SO_SECURITY_ENCRYPTION_TRANSPORT 23 ++#define SO_SECURITY_ENCRYPTION_NETWORK 24 ++ ++#define SO_BINDTODEVICE 25 ++ ++/* Socket filtering */ ++#define SO_ATTACH_FILTER 26 ++#define SO_DETACH_FILTER 27 ++ ++#define SO_PEERNAME 28 ++#define SO_TIMESTAMP 29 ++#define SCM_TIMESTAMP SO_TIMESTAMP ++ ++#define SO_ACCEPTCONN 30 ++ ++#define SO_PEERSEC 31 ++#define SO_PASSSEC 34 ++ ++#endif /* __ASM_AVR32_SOCKET_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/sockios.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/sockios.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,12 @@ ++#ifndef __ASM_AVR32_SOCKIOS_H ++#define __ASM_AVR32_SOCKIOS_H ++ ++/* Socket-level I/O control calls. */ ++#define FIOSETOWN 0x8901 ++#define SIOCSPGRP 0x8902 ++#define FIOGETOWN 0x8903 ++#define SIOCGPGRP 0x8904 ++#define SIOCATMARK 0x8905 ++#define SIOCGSTAMP 0x8906 /* Get stamp */ ++ ++#endif /* __ASM_AVR32_SOCKIOS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/stat.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/stat.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,79 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_STAT_H ++#define __ASM_AVR32_STAT_H ++ ++struct __old_kernel_stat { ++ unsigned short st_dev; ++ unsigned short st_ino; ++ unsigned short st_mode; ++ unsigned short st_nlink; ++ unsigned short st_uid; ++ unsigned short st_gid; ++ unsigned short st_rdev; ++ unsigned long st_size; ++ unsigned long st_atime; ++ unsigned long st_mtime; ++ unsigned long st_ctime; ++}; ++ ++struct stat { ++ unsigned long st_dev; ++ unsigned long st_ino; ++ unsigned short st_mode; ++ unsigned short st_nlink; ++ unsigned short st_uid; ++ unsigned short st_gid; ++ unsigned long st_rdev; ++ unsigned long st_size; ++ unsigned long st_blksize; ++ unsigned long st_blocks; ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++#define STAT_HAVE_NSEC 1 ++ ++struct stat64 { ++ unsigned long long st_dev; ++ ++ unsigned long long st_ino; ++ unsigned int st_mode; ++ unsigned int st_nlink; ++ ++ unsigned long st_uid; ++ unsigned long st_gid; ++ ++ unsigned long long st_rdev; ++ ++ long long st_size; ++ unsigned long __pad1; /* align 64-bit st_blocks */ ++ unsigned long st_blksize; ++ ++ unsigned long long st_blocks; /* Number 512-byte blocks allocated. */ ++ ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++#endif /* __ASM_AVR32_STAT_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/statfs.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/statfs.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_STATFS_H ++#define __ASM_AVR32_STATFS_H ++ ++#include ++ ++#endif /* __ASM_AVR32_STATFS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/string.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/string.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,17 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_STRING_H ++#define __ASM_AVR32_STRING_H ++ ++#define __HAVE_ARCH_MEMSET ++extern void *memset(void *b, int c, size_t len); ++ ++#define __HAVE_ARCH_MEMCPY ++extern void *memcpy(void *to, const void *from, size_t len); ++ ++#endif /* __ASM_AVR32_STRING_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/sysreg.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/sysreg.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,332 @@ ++/* ++ * AVR32 System Registers ++ * ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_SYSREG_H__ ++#define __ASM_AVR32_SYSREG_H__ ++ ++/* sysreg register offsets */ ++#define SYSREG_SR 0x0000 ++#define SYSREG_EVBA 0x0004 ++#define SYSREG_ACBA 0x0008 ++#define SYSREG_CPUCR 0x000c ++#define SYSREG_ECR 0x0010 ++#define SYSREG_RSR_SUP 0x0014 ++#define SYSREG_RSR_INT0 0x0018 ++#define SYSREG_RSR_INT1 0x001c ++#define SYSREG_RSR_INT2 0x0020 ++#define SYSREG_RSR_INT3 0x0024 ++#define SYSREG_RSR_EX 0x0028 ++#define SYSREG_RSR_NMI 0x002c ++#define SYSREG_RSR_DBG 0x0030 ++#define SYSREG_RAR_SUP 0x0034 ++#define SYSREG_RAR_INT0 0x0038 ++#define SYSREG_RAR_INT1 0x003c ++#define SYSREG_RAR_INT2 0x0040 ++#define SYSREG_RAR_INT3 0x0044 ++#define SYSREG_RAR_EX 0x0048 ++#define SYSREG_RAR_NMI 0x004c ++#define SYSREG_RAR_DBG 0x0050 ++#define SYSREG_JECR 0x0054 ++#define SYSREG_JOSP 0x0058 ++#define SYSREG_JAVA_LV0 0x005c ++#define SYSREG_JAVA_LV1 0x0060 ++#define SYSREG_JAVA_LV2 0x0064 ++#define SYSREG_JAVA_LV3 0x0068 ++#define SYSREG_JAVA_LV4 0x006c ++#define SYSREG_JAVA_LV5 0x0070 ++#define SYSREG_JAVA_LV6 0x0074 ++#define SYSREG_JAVA_LV7 0x0078 ++#define SYSREG_JTBA 0x007c ++#define SYSREG_JBCR 0x0080 ++#define SYSREG_CONFIG0 0x0100 ++#define SYSREG_CONFIG1 0x0104 ++#define SYSREG_COUNT 0x0108 ++#define SYSREG_COMPARE 0x010c ++#define SYSREG_TLBEHI 0x0110 ++#define SYSREG_TLBELO 0x0114 ++#define SYSREG_PTBR 0x0118 ++#define SYSREG_TLBEAR 0x011c ++#define SYSREG_MMUCR 0x0120 ++#define SYSREG_TLBARLO 0x0124 ++#define SYSREG_TLBARHI 0x0128 ++#define SYSREG_PCCNT 0x012c ++#define SYSREG_PCNT0 0x0130 ++#define SYSREG_PCNT1 0x0134 ++#define SYSREG_PCCR 0x0138 ++#define SYSREG_BEAR 0x013c ++ ++/* Bitfields in SR */ ++#define SYSREG_SR_C_OFFSET 0 ++#define SYSREG_SR_C_SIZE 1 ++#define SYSREG_Z_OFFSET 1 ++#define SYSREG_Z_SIZE 1 ++#define SYSREG_SR_N_OFFSET 2 ++#define SYSREG_SR_N_SIZE 1 ++#define SYSREG_SR_V_OFFSET 3 ++#define SYSREG_SR_V_SIZE 1 ++#define SYSREG_Q_OFFSET 4 ++#define SYSREG_Q_SIZE 1 ++#define SYSREG_GM_OFFSET 16 ++#define SYSREG_GM_SIZE 1 ++#define SYSREG_I0M_OFFSET 17 ++#define SYSREG_I0M_SIZE 1 ++#define SYSREG_I1M_OFFSET 18 ++#define SYSREG_I1M_SIZE 1 ++#define SYSREG_I2M_OFFSET 19 ++#define SYSREG_I2M_SIZE 1 ++#define SYSREG_I3M_OFFSET 20 ++#define SYSREG_I3M_SIZE 1 ++#define SYSREG_EM_OFFSET 21 ++#define SYSREG_EM_SIZE 1 ++#define SYSREG_M0_OFFSET 22 ++#define SYSREG_M0_SIZE 1 ++#define SYSREG_M1_OFFSET 23 ++#define SYSREG_M1_SIZE 1 ++#define SYSREG_M2_OFFSET 24 ++#define SYSREG_M2_SIZE 1 ++#define SYSREG_SR_D_OFFSET 26 ++#define SYSREG_SR_D_SIZE 1 ++#define SYSREG_DM_OFFSET 27 ++#define SYSREG_DM_SIZE 1 ++#define SYSREG_SR_J_OFFSET 28 ++#define SYSREG_SR_J_SIZE 1 ++#define SYSREG_R_OFFSET 29 ++#define SYSREG_R_SIZE 1 ++#define SYSREG_H_OFFSET 30 ++#define SYSREG_H_SIZE 1 ++ ++/* Bitfields in EVBA */ ++ ++/* Bitfields in ACBA */ ++ ++/* Bitfields in CPUCR */ ++#define SYSREG_BI_OFFSET 0 ++#define SYSREG_BI_SIZE 1 ++#define SYSREG_BE_OFFSET 1 ++#define SYSREG_BE_SIZE 1 ++#define SYSREG_FE_OFFSET 2 ++#define SYSREG_FE_SIZE 1 ++#define SYSREG_RE_OFFSET 3 ++#define SYSREG_RE_SIZE 1 ++#define SYSREG_IBE_OFFSET 4 ++#define SYSREG_IBE_SIZE 1 ++#define SYSREG_IEE_OFFSET 5 ++#define SYSREG_IEE_SIZE 1 ++ ++/* Bitfields in ECR */ ++#define SYSREG_ECR_OFFSET 0 ++#define SYSREG_ECR_SIZE 32 ++ ++/* Bitfields in RSR_SUP */ ++ ++/* Bitfields in RSR_INT0 */ ++ ++/* Bitfields in RSR_INT1 */ ++ ++/* Bitfields in RSR_INT2 */ ++ ++/* Bitfields in RSR_INT3 */ ++ ++/* Bitfields in RSR_EX */ ++ ++/* Bitfields in RSR_NMI */ ++ ++/* Bitfields in RSR_DBG */ ++ ++/* Bitfields in RAR_SUP */ ++ ++/* Bitfields in RAR_INT0 */ ++ ++/* Bitfields in RAR_INT1 */ ++ ++/* Bitfields in RAR_INT2 */ ++ ++/* Bitfields in RAR_INT3 */ ++ ++/* Bitfields in RAR_EX */ ++ ++/* Bitfields in RAR_NMI */ ++ ++/* Bitfields in RAR_DBG */ ++ ++/* Bitfields in JECR */ ++ ++/* Bitfields in JOSP */ ++ ++/* Bitfields in JAVA_LV0 */ ++ ++/* Bitfields in JAVA_LV1 */ ++ ++/* Bitfields in JAVA_LV2 */ ++ ++/* Bitfields in JAVA_LV3 */ ++ ++/* Bitfields in JAVA_LV4 */ ++ ++/* Bitfields in JAVA_LV5 */ ++ ++/* Bitfields in JAVA_LV6 */ ++ ++/* Bitfields in JAVA_LV7 */ ++ ++/* Bitfields in JTBA */ ++ ++/* Bitfields in JBCR */ ++ ++/* Bitfields in CONFIG0 */ ++#define SYSREG_CONFIG0_D_OFFSET 1 ++#define SYSREG_CONFIG0_D_SIZE 1 ++#define SYSREG_CONFIG0_S_OFFSET 2 ++#define SYSREG_CONFIG0_S_SIZE 1 ++#define SYSREG_O_OFFSET 3 ++#define SYSREG_O_SIZE 1 ++#define SYSREG_P_OFFSET 4 ++#define SYSREG_P_SIZE 1 ++#define SYSREG_CONFIG0_J_OFFSET 5 ++#define SYSREG_CONFIG0_J_SIZE 1 ++#define SYSREG_F_OFFSET 6 ++#define SYSREG_F_SIZE 1 ++#define SYSREG_MMUT_OFFSET 7 ++#define SYSREG_MMUT_SIZE 3 ++#define SYSREG_AR_OFFSET 10 ++#define SYSREG_AR_SIZE 3 ++#define SYSREG_AT_OFFSET 13 ++#define SYSREG_AT_SIZE 3 ++#define SYSREG_PROCESSORREVISION_OFFSET 16 ++#define SYSREG_PROCESSORREVISION_SIZE 8 ++#define SYSREG_PROCESSORID_OFFSET 24 ++#define SYSREG_PROCESSORID_SIZE 8 ++ ++/* Bitfields in CONFIG1 */ ++#define SYSREG_DASS_OFFSET 0 ++#define SYSREG_DASS_SIZE 3 ++#define SYSREG_DLSZ_OFFSET 3 ++#define SYSREG_DLSZ_SIZE 3 ++#define SYSREG_DSET_OFFSET 6 ++#define SYSREG_DSET_SIZE 4 ++#define SYSREG_IASS_OFFSET 10 ++#define SYSREG_IASS_SIZE 2 ++#define SYSREG_ILSZ_OFFSET 13 ++#define SYSREG_ILSZ_SIZE 3 ++#define SYSREG_ISET_OFFSET 16 ++#define SYSREG_ISET_SIZE 4 ++#define SYSREG_DMMUSZ_OFFSET 20 ++#define SYSREG_DMMUSZ_SIZE 6 ++#define SYSREG_IMMUSZ_OFFSET 26 ++#define SYSREG_IMMUSZ_SIZE 6 ++ ++/* Bitfields in COUNT */ ++ ++/* Bitfields in COMPARE */ ++ ++/* Bitfields in TLBEHI */ ++#define SYSREG_ASID_OFFSET 0 ++#define SYSREG_ASID_SIZE 8 ++#define SYSREG_TLBEHI_I_OFFSET 8 ++#define SYSREG_TLBEHI_I_SIZE 1 ++#define SYSREG_TLBEHI_V_OFFSET 9 ++#define SYSREG_TLBEHI_V_SIZE 1 ++#define SYSREG_VPN_OFFSET 10 ++#define SYSREG_VPN_SIZE 22 ++ ++/* Bitfields in TLBELO */ ++#define SYSREG_W_OFFSET 0 ++#define SYSREG_W_SIZE 1 ++#define SYSREG_TLBELO_D_OFFSET 1 ++#define SYSREG_TLBELO_D_SIZE 1 ++#define SYSREG_SZ_OFFSET 2 ++#define SYSREG_SZ_SIZE 2 ++#define SYSREG_AP_OFFSET 4 ++#define SYSREG_AP_SIZE 3 ++#define SYSREG_B_OFFSET 7 ++#define SYSREG_B_SIZE 1 ++#define SYSREG_G_OFFSET 8 ++#define SYSREG_G_SIZE 1 ++#define SYSREG_TLBELO_C_OFFSET 9 ++#define SYSREG_TLBELO_C_SIZE 1 ++#define SYSREG_PFN_OFFSET 10 ++#define SYSREG_PFN_SIZE 22 ++ ++/* Bitfields in PTBR */ ++ ++/* Bitfields in TLBEAR */ ++ ++/* Bitfields in MMUCR */ ++#define SYSREG_E_OFFSET 0 ++#define SYSREG_E_SIZE 1 ++#define SYSREG_M_OFFSET 1 ++#define SYSREG_M_SIZE 1 ++#define SYSREG_MMUCR_I_OFFSET 2 ++#define SYSREG_MMUCR_I_SIZE 1 ++#define SYSREG_MMUCR_N_OFFSET 3 ++#define SYSREG_MMUCR_N_SIZE 1 ++#define SYSREG_MMUCR_S_OFFSET 4 ++#define SYSREG_MMUCR_S_SIZE 1 ++#define SYSREG_DLA_OFFSET 8 ++#define SYSREG_DLA_SIZE 6 ++#define SYSREG_DRP_OFFSET 14 ++#define SYSREG_DRP_SIZE 6 ++#define SYSREG_ILA_OFFSET 20 ++#define SYSREG_ILA_SIZE 6 ++#define SYSREG_IRP_OFFSET 26 ++#define SYSREG_IRP_SIZE 6 ++ ++/* Bitfields in TLBARLO */ ++ ++/* Bitfields in TLBARHI */ ++ ++/* Bitfields in PCCNT */ ++ ++/* Bitfields in PCNT0 */ ++ ++/* Bitfields in PCNT1 */ ++ ++/* Bitfields in PCCR */ ++ ++/* Bitfields in BEAR */ ++ ++/* Constants for ECR */ ++#define ECR_UNRECOVERABLE 0 ++#define ECR_TLB_MULTIPLE 1 ++#define ECR_BUS_ERROR_WRITE 2 ++#define ECR_BUS_ERROR_READ 3 ++#define ECR_NMI 4 ++#define ECR_ADDR_ALIGN_X 5 ++#define ECR_PROTECTION_X 6 ++#define ECR_DEBUG 7 ++#define ECR_ILLEGAL_OPCODE 8 ++#define ECR_UNIMPL_INSTRUCTION 9 ++#define ECR_PRIVILEGE_VIOLATION 10 ++#define ECR_FPE 11 ++#define ECR_COPROC_ABSENT 12 ++#define ECR_ADDR_ALIGN_R 13 ++#define ECR_ADDR_ALIGN_W 14 ++#define ECR_PROTECTION_R 15 ++#define ECR_PROTECTION_W 16 ++#define ECR_DTLB_MODIFIED 17 ++#define ECR_TLB_MISS_X 20 ++#define ECR_TLB_MISS_R 24 ++#define ECR_TLB_MISS_W 28 ++ ++/* Bit manipulation macros */ ++#define SYSREG_BIT(name) (1 << SYSREG_##name##_OFFSET) ++#define SYSREG_BF(name,value) (((value) & ((1 << SYSREG_##name##_SIZE) - 1)) << SYSREG_##name##_OFFSET) ++#define SYSREG_BFEXT(name,value) (((value) >> SYSREG_##name##_OFFSET) & ((1 << SYSREG_##name##_SIZE) - 1)) ++#define SYSREG_BFINS(name,value,old) (((old) & ~(((1 << SYSREG_##name##_SIZE) - 1) << SYSREG_##name##_OFFSET)) | SYSREG_BF(name,value)) ++ ++#ifdef __CHECKER__ ++extern unsigned long __builtin_mfsr(unsigned long reg); ++extern void __builtin_mtsr(unsigned long reg, unsigned long value); ++#endif ++ ++/* Register access macros */ ++#define sysreg_read(reg) __builtin_mfsr(SYSREG_##reg) ++#define sysreg_write(reg, value) __builtin_mtsr(SYSREG_##reg, value) ++ ++#endif /* __ASM_AVR32_SYSREG_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/system.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/system.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,155 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_SYSTEM_H ++#define __ASM_AVR32_SYSTEM_H ++ ++#include ++#include ++ ++#include ++#include ++ ++#define xchg(ptr,x) \ ++ ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) ++ ++#define nop() asm volatile("nop") ++ ++#define mb() asm volatile("" : : : "memory") ++#define rmb() mb() ++#define wmb() asm volatile("sync 0" : : : "memory") ++#define read_barrier_depends() do { } while(0) ++#define set_mb(var, value) do { var = value; mb(); } while(0) ++ ++/* ++ * Help PathFinder and other Nexus-compliant debuggers keep track of ++ * the current PID by emitting an Ownership Trace Message each time we ++ * switch task. ++ */ ++#ifdef CONFIG_OWNERSHIP_TRACE ++#include ++#define finish_arch_switch(prev) \ ++ do { \ ++ __mtdr(DBGREG_PID, prev->pid); \ ++ __mtdr(DBGREG_PID, current->pid); \ ++ } while(0) ++#endif ++ ++/* ++ * switch_to(prev, next, last) should switch from task `prev' to task ++ * `next'. `prev' will never be the same as `next'. ++ * ++ * We just delegate everything to the __switch_to assembly function, ++ * which is implemented in arch/avr32/kernel/switch_to.S ++ * ++ * mb() tells GCC not to cache `current' across this call. ++ */ ++struct cpu_context; ++struct task_struct; ++extern struct task_struct *__switch_to(struct task_struct *, ++ struct cpu_context *, ++ struct cpu_context *); ++#define switch_to(prev, next, last) \ ++ do { \ ++ last = __switch_to(prev, &prev->thread.cpu_context + 1, \ ++ &next->thread.cpu_context); \ ++ } while (0) ++ ++#ifdef CONFIG_SMP ++# error "The AVR32 port does not support SMP" ++#else ++# define smp_mb() barrier() ++# define smp_rmb() barrier() ++# define smp_wmb() barrier() ++# define smp_read_barrier_depends() do { } while(0) ++#endif ++ ++#include ++ ++extern void __xchg_called_with_bad_pointer(void); ++ ++#ifdef __CHECKER__ ++extern unsigned long __builtin_xchg(void *ptr, unsigned long x); ++#endif ++ ++#define xchg_u32(val, m) __builtin_xchg((void *)m, val) ++ ++static inline unsigned long __xchg(unsigned long x, ++ volatile void *ptr, ++ int size) ++{ ++ switch(size) { ++ case 4: ++ return xchg_u32(x, ptr); ++ default: ++ __xchg_called_with_bad_pointer(); ++ return x; ++ } ++} ++ ++static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old, ++ unsigned long new) ++{ ++ __u32 ret; ++ ++ asm volatile( ++ "1: ssrf 5\n" ++ " ld.w %[ret], %[m]\n" ++ " cp.w %[ret], %[old]\n" ++ " brne 2f\n" ++ " stcond %[m], %[new]\n" ++ " brne 1b\n" ++ "2:\n" ++ : [ret] "=&r"(ret), [m] "=m"(*m) ++ : "m"(m), [old] "ir"(old), [new] "r"(new) ++ : "memory", "cc"); ++ return ret; ++} ++ ++extern unsigned long __cmpxchg_u64_unsupported_on_32bit_kernels( ++ volatile int * m, unsigned long old, unsigned long new); ++#define __cmpxchg_u64 __cmpxchg_u64_unsupported_on_32bit_kernels ++ ++/* This function doesn't exist, so you'll get a linker error ++ if something tries to do an invalid cmpxchg(). */ ++extern void __cmpxchg_called_with_bad_pointer(void); ++ ++#define __HAVE_ARCH_CMPXCHG 1 ++ ++static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, ++ unsigned long new, int size) ++{ ++ switch (size) { ++ case 4: ++ return __cmpxchg_u32(ptr, old, new); ++ case 8: ++ return __cmpxchg_u64(ptr, old, new); ++ } ++ ++ __cmpxchg_called_with_bad_pointer(); ++ return old; ++} ++ ++#define cmpxchg(ptr, old, new) \ ++ ((typeof(*(ptr)))__cmpxchg((ptr), (unsigned long)(old), \ ++ (unsigned long)(new), \ ++ sizeof(*(ptr)))) ++ ++struct pt_regs; ++extern void __die(const char *, struct pt_regs *, unsigned long, ++ const char *, const char *, unsigned long); ++extern void __die_if_kernel(const char *, struct pt_regs *, unsigned long, ++ const char *, const char *, unsigned long); ++ ++#define die(msg, regs, err) \ ++ __die(msg, regs, err, __FILE__ ":", __FUNCTION__, __LINE__) ++#define die_if_kernel(msg, regs, err) \ ++ __die_if_kernel(msg, regs, err, __FILE__ ":", __FUNCTION__, __LINE__) ++ ++#define arch_align_stack(x) (x) ++ ++#endif /* __ASM_AVR32_SYSTEM_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/termbits.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/termbits.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,173 @@ ++#ifndef __ASM_AVR32_TERMBITS_H ++#define __ASM_AVR32_TERMBITS_H ++ ++#include ++ ++typedef unsigned char cc_t; ++typedef unsigned int speed_t; ++typedef unsigned int tcflag_t; ++ ++#define NCCS 19 ++struct termios { ++ tcflag_t c_iflag; /* input mode flags */ ++ tcflag_t c_oflag; /* output mode flags */ ++ tcflag_t c_cflag; /* control mode flags */ ++ tcflag_t c_lflag; /* local mode flags */ ++ cc_t c_line; /* line discipline */ ++ cc_t c_cc[NCCS]; /* control characters */ ++}; ++ ++/* c_cc characters */ ++#define VINTR 0 ++#define VQUIT 1 ++#define VERASE 2 ++#define VKILL 3 ++#define VEOF 4 ++#define VTIME 5 ++#define VMIN 6 ++#define VSWTC 7 ++#define VSTART 8 ++#define VSTOP 9 ++#define VSUSP 10 ++#define VEOL 11 ++#define VREPRINT 12 ++#define VDISCARD 13 ++#define VWERASE 14 ++#define VLNEXT 15 ++#define VEOL2 16 ++ ++/* c_iflag bits */ ++#define IGNBRK 0000001 ++#define BRKINT 0000002 ++#define IGNPAR 0000004 ++#define PARMRK 0000010 ++#define INPCK 0000020 ++#define ISTRIP 0000040 ++#define INLCR 0000100 ++#define IGNCR 0000200 ++#define ICRNL 0000400 ++#define IUCLC 0001000 ++#define IXON 0002000 ++#define IXANY 0004000 ++#define IXOFF 0010000 ++#define IMAXBEL 0020000 ++#define IUTF8 0040000 ++ ++/* c_oflag bits */ ++#define OPOST 0000001 ++#define OLCUC 0000002 ++#define ONLCR 0000004 ++#define OCRNL 0000010 ++#define ONOCR 0000020 ++#define ONLRET 0000040 ++#define OFILL 0000100 ++#define OFDEL 0000200 ++#define NLDLY 0000400 ++#define NL0 0000000 ++#define NL1 0000400 ++#define CRDLY 0003000 ++#define CR0 0000000 ++#define CR1 0001000 ++#define CR2 0002000 ++#define CR3 0003000 ++#define TABDLY 0014000 ++#define TAB0 0000000 ++#define TAB1 0004000 ++#define TAB2 0010000 ++#define TAB3 0014000 ++#define XTABS 0014000 ++#define BSDLY 0020000 ++#define BS0 0000000 ++#define BS1 0020000 ++#define VTDLY 0040000 ++#define VT0 0000000 ++#define VT1 0040000 ++#define FFDLY 0100000 ++#define FF0 0000000 ++#define FF1 0100000 ++ ++/* c_cflag bit meaning */ ++#define CBAUD 0010017 ++#define B0 0000000 /* hang up */ ++#define B50 0000001 ++#define B75 0000002 ++#define B110 0000003 ++#define B134 0000004 ++#define B150 0000005 ++#define B200 0000006 ++#define B300 0000007 ++#define B600 0000010 ++#define B1200 0000011 ++#define B1800 0000012 ++#define B2400 0000013 ++#define B4800 0000014 ++#define B9600 0000015 ++#define B19200 0000016 ++#define B38400 0000017 ++#define EXTA B19200 ++#define EXTB B38400 ++#define CSIZE 0000060 ++#define CS5 0000000 ++#define CS6 0000020 ++#define CS7 0000040 ++#define CS8 0000060 ++#define CSTOPB 0000100 ++#define CREAD 0000200 ++#define PARENB 0000400 ++#define PARODD 0001000 ++#define HUPCL 0002000 ++#define CLOCAL 0004000 ++#define CBAUDEX 0010000 ++#define B57600 0010001 ++#define B115200 0010002 ++#define B230400 0010003 ++#define B460800 0010004 ++#define B500000 0010005 ++#define B576000 0010006 ++#define B921600 0010007 ++#define B1000000 0010010 ++#define B1152000 0010011 ++#define B1500000 0010012 ++#define B2000000 0010013 ++#define B2500000 0010014 ++#define B3000000 0010015 ++#define B3500000 0010016 ++#define B4000000 0010017 ++#define CIBAUD 002003600000 /* input baud rate (not used) */ ++#define CMSPAR 010000000000 /* mark or space (stick) parity */ ++#define CRTSCTS 020000000000 /* flow control */ ++ ++/* c_lflag bits */ ++#define ISIG 0000001 ++#define ICANON 0000002 ++#define XCASE 0000004 ++#define ECHO 0000010 ++#define ECHOE 0000020 ++#define ECHOK 0000040 ++#define ECHONL 0000100 ++#define NOFLSH 0000200 ++#define TOSTOP 0000400 ++#define ECHOCTL 0001000 ++#define ECHOPRT 0002000 ++#define ECHOKE 0004000 ++#define FLUSHO 0010000 ++#define PENDIN 0040000 ++#define IEXTEN 0100000 ++ ++/* tcflow() and TCXONC use these */ ++#define TCOOFF 0 ++#define TCOON 1 ++#define TCIOFF 2 ++#define TCION 3 ++ ++/* tcflush() and TCFLSH use these */ ++#define TCIFLUSH 0 ++#define TCOFLUSH 1 ++#define TCIOFLUSH 2 ++ ++/* tcsetattr uses these */ ++#define TCSANOW 0 ++#define TCSADRAIN 1 ++#define TCSAFLUSH 2 ++ ++#endif /* __ASM_AVR32_TERMBITS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/termios.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/termios.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,80 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_TERMIOS_H ++#define __ASM_AVR32_TERMIOS_H ++ ++#include ++#include ++ ++struct winsize { ++ unsigned short ws_row; ++ unsigned short ws_col; ++ unsigned short ws_xpixel; ++ unsigned short ws_ypixel; ++}; ++ ++#define NCC 8 ++struct termio { ++ unsigned short c_iflag; /* input mode flags */ ++ unsigned short c_oflag; /* output mode flags */ ++ unsigned short c_cflag; /* control mode flags */ ++ unsigned short c_lflag; /* local mode flags */ ++ unsigned char c_line; /* line discipline */ ++ unsigned char c_cc[NCC]; /* control characters */ ++}; ++ ++/* modem lines */ ++#define TIOCM_LE 0x001 ++#define TIOCM_DTR 0x002 ++#define TIOCM_RTS 0x004 ++#define TIOCM_ST 0x008 ++#define TIOCM_SR 0x010 ++#define TIOCM_CTS 0x020 ++#define TIOCM_CAR 0x040 ++#define TIOCM_RNG 0x080 ++#define TIOCM_DSR 0x100 ++#define TIOCM_CD TIOCM_CAR ++#define TIOCM_RI TIOCM_RNG ++#define TIOCM_OUT1 0x2000 ++#define TIOCM_OUT2 0x4000 ++#define TIOCM_LOOP 0x8000 ++ ++/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ ++ ++/* line disciplines */ ++#define N_TTY 0 ++#define N_SLIP 1 ++#define N_MOUSE 2 ++#define N_PPP 3 ++#define N_STRIP 4 ++#define N_AX25 5 ++#define N_X25 6 /* X.25 async */ ++#define N_6PACK 7 ++#define N_MASC 8 /* Reserved for Mobitex module */ ++#define N_R3964 9 /* Reserved for Simatic R3964 module */ ++#define N_PROFIBUS_FDL 10 /* Reserved for Profibus */ ++#define N_IRDA 11 /* Linux IR - http://irda.sourceforge.net/ */ ++#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */ ++#define N_HDLC 13 /* synchronous HDLC */ ++#define N_SYNC_PPP 14 /* synchronous PPP */ ++#define N_HCI 15 /* Bluetooth HCI UART */ ++ ++#ifdef __KERNEL__ ++/* intr=^C quit=^\ erase=del kill=^U ++ eof=^D vtime=\0 vmin=\1 sxtc=\0 ++ start=^Q stop=^S susp=^Z eol=\0 ++ reprint=^R discard=^U werase=^W lnext=^V ++ eol2=\0 ++*/ ++#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" ++ ++#include ++ ++#endif /* __KERNEL__ */ ++ ++#endif /* __ASM_AVR32_TERMIOS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/thread_info.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/thread_info.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,106 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_THREAD_INFO_H ++#define __ASM_AVR32_THREAD_INFO_H ++ ++#include ++ ++#define THREAD_SIZE_ORDER 1 ++#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER) ++ ++#ifndef __ASSEMBLY__ ++#include ++ ++struct task_struct; ++struct exec_domain; ++ ++struct thread_info { ++ struct task_struct *task; /* main task structure */ ++ struct exec_domain *exec_domain; /* execution domain */ ++ unsigned long flags; /* low level flags */ ++ __u32 cpu; ++ __s32 preempt_count; /* 0 => preemptable, <0 => BUG */ ++ struct restart_block restart_block; ++ __u8 supervisor_stack[0]; ++}; ++ ++#define INIT_THREAD_INFO(tsk) \ ++{ \ ++ .task = &tsk, \ ++ .exec_domain = &default_exec_domain, \ ++ .flags = 0, \ ++ .cpu = 0, \ ++ .preempt_count = 1, \ ++ .restart_block = { \ ++ .fn = do_no_restart_syscall \ ++ } \ ++} ++ ++#define init_thread_info (init_thread_union.thread_info) ++#define init_stack (init_thread_union.stack) ++ ++/* ++ * Get the thread information struct from C. ++ * We do the usual trick and use the lower end of the stack for this ++ */ ++static inline struct thread_info *current_thread_info(void) ++{ ++ unsigned long addr = ~(THREAD_SIZE - 1); ++ ++ asm("and %0, sp" : "=r"(addr) : "0"(addr)); ++ return (struct thread_info *)addr; ++} ++ ++/* thread information allocation */ ++#define alloc_thread_info(ti) \ ++ ((struct thread_info *) __get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER)) ++#define free_thread_info(ti) free_pages((unsigned long)(ti), 1) ++#define get_thread_info(ti) get_task_struct((ti)->task) ++#define put_thread_info(ti) put_task_struct((ti)->task) ++ ++#endif /* !__ASSEMBLY__ */ ++ ++#define PREEMPT_ACTIVE 0x40000000 ++ ++/* ++ * Thread information flags ++ * - these are process state flags that various assembly files may need to access ++ * - pending work-to-be-done flags are in LSW ++ * - other flags in MSW ++ */ ++#define TIF_SYSCALL_TRACE 0 /* syscall trace active */ ++#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */ ++#define TIF_SIGPENDING 2 /* signal pending */ ++#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ ++#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling ++ TIF_NEED_RESCHED */ ++#define TIF_BREAKPOINT 5 /* true if we should break after return */ ++#define TIF_SINGLE_STEP 6 /* single step after next break */ ++#define TIF_MEMDIE 7 ++#define TIF_RESTORE_SIGMASK 8 /* restore signal mask in do_signal */ ++#define TIF_USERSPACE 31 /* true if FS sets userspace */ ++ ++#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) ++#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) ++#define _TIF_SIGPENDING (1 << TIF_SIGPENDING) ++#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) ++#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) ++#define _TIF_BREAKPOINT (1 << TIF_BREAKPOINT) ++#define _TIF_SINGLE_STEP (1 << TIF_SINGLE_STEP) ++#define _TIF_MEMDIE (1 << TIF_MEMDIE) ++#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) ++ ++/* XXX: These two masks must never span more than 16 bits! */ ++/* work to do on interrupt/exception return */ ++#define _TIF_WORK_MASK 0x0000013e ++/* work to do on any return to userspace */ ++#define _TIF_ALLWORK_MASK 0x0000013f ++/* work to do on return from debug mode */ ++#define _TIF_DBGWORK_MASK 0x0000017e ++ ++#endif /* __ASM_AVR32_THREAD_INFO_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/timex.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/timex.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,40 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_TIMEX_H ++#define __ASM_AVR32_TIMEX_H ++ ++/* ++ * This is the frequency of the timer used for Linux's timer interrupt. ++ * The value should be defined as accurate as possible or under certain ++ * circumstances Linux timekeeping might become inaccurate or fail. ++ * ++ * For many system the exact clockrate of the timer isn't known but due to ++ * the way this value is used we can get away with a wrong value as long ++ * as this value is: ++ * ++ * - a multiple of HZ ++ * - a divisor of the actual rate ++ * ++ * 500000 is a good such cheat value. ++ * ++ * The obscure number 1193182 is the same as used by the original i8254 ++ * time in legacy PC hardware; the chip is never found in AVR32 systems. ++ */ ++#define CLOCK_TICK_RATE 500000 /* Underlying HZ */ ++ ++typedef unsigned long cycles_t; ++ ++static inline cycles_t get_cycles (void) ++{ ++ return 0; ++} ++ ++extern int read_current_timer(unsigned long *timer_value); ++#define ARCH_HAS_READ_CURRENT_TIMER 1 ++ ++#endif /* __ASM_AVR32_TIMEX_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/tlb.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/tlb.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,32 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_TLB_H ++#define __ASM_AVR32_TLB_H ++ ++#define tlb_start_vma(tlb, vma) \ ++ flush_cache_range(vma, vma->vm_start, vma->vm_end) ++ ++#define tlb_end_vma(tlb, vma) \ ++ flush_tlb_range(vma, vma->vm_start, vma->vm_end) ++ ++#define __tlb_remove_tlb_entry(tlb, pte, address) do { } while(0) ++ ++/* ++ * Flush whole TLB for MM ++ */ ++#define tlb_flush(tlb) flush_tlb_mm((tlb)->mm) ++ ++#include ++ ++/* ++ * For debugging purposes ++ */ ++extern void show_dtlb_entry(unsigned int index); ++extern void dump_dtlb(void); ++ ++#endif /* __ASM_AVR32_TLB_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/tlbflush.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/tlbflush.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,40 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_TLBFLUSH_H ++#define __ASM_AVR32_TLBFLUSH_H ++ ++#include ++ ++/* ++ * TLB flushing: ++ * ++ * - flush_tlb() flushes the current mm struct TLBs ++ * - flush_tlb_all() flushes all processes' TLB entries ++ * - flush_tlb_mm(mm) flushes the specified mm context TLBs ++ * - flush_tlb_page(vma, vmaddr) flushes one page ++ * - flush_tlb_range(vma, start, end) flushes a range of pages ++ * - flush_tlb_kernel_range(start, end) flushes a range of kernel pages ++ * - flush_tlb_pgtables(mm, start, end) flushes a range of page tables ++ */ ++extern void flush_tlb(void); ++extern void flush_tlb_all(void); ++extern void flush_tlb_mm(struct mm_struct *mm); ++extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, ++ unsigned long end); ++extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long page); ++extern void __flush_tlb_page(unsigned long asid, unsigned long page); ++ ++static inline void flush_tlb_pgtables(struct mm_struct *mm, ++ unsigned long start, unsigned long end) ++{ ++ /* Nothing to do */ ++} ++ ++extern void flush_tlb_kernel_range(unsigned long start, unsigned long end); ++ ++#endif /* __ASM_AVR32_TLBFLUSH_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/topology.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/topology.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifndef __ASM_AVR32_TOPOLOGY_H ++#define __ASM_AVR32_TOPOLOGY_H ++ ++#include ++ ++#endif /* __ASM_AVR32_TOPOLOGY_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/traps.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/traps.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_TRAPS_H ++#define __ASM_AVR32_TRAPS_H ++ ++#include ++ ++struct undef_hook { ++ struct list_head node; ++ u32 insn_mask; ++ u32 insn_val; ++ int (*fn)(struct pt_regs *regs, u32 insn); ++}; ++ ++void register_undef_hook(struct undef_hook *hook); ++void unregister_undef_hook(struct undef_hook *hook); ++ ++#endif /* __ASM_AVR32_TRAPS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/types.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/types.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,70 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_TYPES_H ++#define __ASM_AVR32_TYPES_H ++ ++#ifndef __ASSEMBLY__ ++ ++typedef unsigned short umode_t; ++ ++/* ++ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the ++ * header files exported to user space ++ */ ++typedef __signed__ char __s8; ++typedef unsigned char __u8; ++ ++typedef __signed__ short __s16; ++typedef unsigned short __u16; ++ ++typedef __signed__ int __s32; ++typedef unsigned int __u32; ++ ++#if defined(__GNUC__) && !defined(__STRICT_ANSI__) ++typedef __signed__ long long __s64; ++typedef unsigned long long __u64; ++#endif ++ ++#endif /* __ASSEMBLY__ */ ++ ++/* ++ * These aren't exported outside the kernel to avoid name space clashes ++ */ ++#ifdef __KERNEL__ ++ ++#define BITS_PER_LONG 32 ++ ++#ifndef __ASSEMBLY__ ++ ++typedef signed char s8; ++typedef unsigned char u8; ++ ++typedef signed short s16; ++typedef unsigned short u16; ++ ++typedef signed int s32; ++typedef unsigned int u32; ++ ++typedef signed long long s64; ++typedef unsigned long long u64; ++ ++/* Dma addresses are 32-bits wide. */ ++ ++typedef u32 dma_addr_t; ++ ++#ifdef CONFIG_LBD ++typedef u64 sector_t; ++#define HAVE_SECTOR_T ++#endif ++ ++#endif /* __ASSEMBLY__ */ ++ ++#endif /* __KERNEL__ */ ++ ++ ++#endif /* __ASM_AVR32_TYPES_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/uaccess.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/uaccess.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,335 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_UACCESS_H ++#define __ASM_AVR32_UACCESS_H ++ ++#include ++#include ++ ++#define VERIFY_READ 0 ++#define VERIFY_WRITE 1 ++ ++typedef struct { ++ unsigned int is_user_space; ++} mm_segment_t; ++ ++/* ++ * The fs value determines whether argument validity checking should be ++ * performed or not. If get_fs() == USER_DS, checking is performed, with ++ * get_fs() == KERNEL_DS, checking is bypassed. ++ * ++ * For historical reasons (Data Segment Register?), these macros are misnamed. ++ */ ++#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) ++#define segment_eq(a,b) ((a).is_user_space == (b).is_user_space) ++ ++#define USER_ADDR_LIMIT 0x80000000 ++ ++#define KERNEL_DS MAKE_MM_SEG(0) ++#define USER_DS MAKE_MM_SEG(1) ++ ++#define get_ds() (KERNEL_DS) ++ ++static inline mm_segment_t get_fs(void) ++{ ++ return MAKE_MM_SEG(test_thread_flag(TIF_USERSPACE)); ++} ++ ++static inline void set_fs(mm_segment_t s) ++{ ++ if (s.is_user_space) ++ set_thread_flag(TIF_USERSPACE); ++ else ++ clear_thread_flag(TIF_USERSPACE); ++} ++ ++/* ++ * Test whether a block of memory is a valid user space address. ++ * Returns 0 if the range is valid, nonzero otherwise. ++ * ++ * We do the following checks: ++ * 1. Is the access from kernel space? ++ * 2. Does (addr + size) set the carry bit? ++ * 3. Is (addr + size) a negative number (i.e. >= 0x80000000)? ++ * ++ * If yes on the first check, access is granted. ++ * If no on any of the others, access is denied. ++ */ ++#define __range_ok(addr, size) \ ++ (test_thread_flag(TIF_USERSPACE) \ ++ && (((unsigned long)(addr) >= 0x80000000) \ ++ || ((unsigned long)(size) > 0x80000000) \ ++ || (((unsigned long)(addr) + (unsigned long)(size)) > 0x80000000))) ++ ++#define access_ok(type, addr, size) (likely(__range_ok(addr, size) == 0)) ++ ++static inline int ++verify_area(int type, const void __user *addr, unsigned long size) ++{ ++ return access_ok(type, addr, size) ? 0 : -EFAULT; ++} ++ ++/* Generic arbitrary sized copy. Return the number of bytes NOT copied */ ++extern __kernel_size_t __copy_user(void *to, const void *from, ++ __kernel_size_t n); ++ ++extern __kernel_size_t copy_to_user(void __user *to, const void *from, ++ __kernel_size_t n); ++extern __kernel_size_t copy_from_user(void *to, const void __user *from, ++ __kernel_size_t n); ++ ++static inline __kernel_size_t __copy_to_user(void __user *to, const void *from, ++ __kernel_size_t n) ++{ ++ return __copy_user((void __force *)to, from, n); ++} ++static inline __kernel_size_t __copy_from_user(void *to, ++ const void __user *from, ++ __kernel_size_t n) ++{ ++ return __copy_user(to, (const void __force *)from, n); ++} ++ ++#define __copy_to_user_inatomic __copy_to_user ++#define __copy_from_user_inatomic __copy_from_user ++ ++/* ++ * put_user: - Write a simple value into user space. ++ * @x: Value to copy to user space. ++ * @ptr: Destination address, in user space. ++ * ++ * Context: User context only. This function may sleep. ++ * ++ * This macro copies a single simple value from kernel space to user ++ * space. It supports simple types like char and int, but not larger ++ * data types like structures or arrays. ++ * ++ * @ptr must have pointer-to-simple-variable type, and @x must be assignable ++ * to the result of dereferencing @ptr. ++ * ++ * Returns zero on success, or -EFAULT on error. ++ */ ++#define put_user(x,ptr) \ ++ __put_user_check((x),(ptr),sizeof(*(ptr))) ++ ++/* ++ * get_user: - Get a simple variable from user space. ++ * @x: Variable to store result. ++ * @ptr: Source address, in user space. ++ * ++ * Context: User context only. This function may sleep. ++ * ++ * This macro copies a single simple variable from user space to kernel ++ * space. It supports simple types like char and int, but not larger ++ * data types like structures or arrays. ++ * ++ * @ptr must have pointer-to-simple-variable type, and the result of ++ * dereferencing @ptr must be assignable to @x without a cast. ++ * ++ * Returns zero on success, or -EFAULT on error. ++ * On error, the variable @x is set to zero. ++ */ ++#define get_user(x,ptr) \ ++ __get_user_check((x),(ptr),sizeof(*(ptr))) ++ ++/* ++ * __put_user: - Write a simple value into user space, with less checking. ++ * @x: Value to copy to user space. ++ * @ptr: Destination address, in user space. ++ * ++ * Context: User context only. This function may sleep. ++ * ++ * This macro copies a single simple value from kernel space to user ++ * space. It supports simple types like char and int, but not larger ++ * data types like structures or arrays. ++ * ++ * @ptr must have pointer-to-simple-variable type, and @x must be assignable ++ * to the result of dereferencing @ptr. ++ * ++ * Caller must check the pointer with access_ok() before calling this ++ * function. ++ * ++ * Returns zero on success, or -EFAULT on error. ++ */ ++#define __put_user(x,ptr) \ ++ __put_user_nocheck((x),(ptr),sizeof(*(ptr))) ++ ++/* ++ * __get_user: - Get a simple variable from user space, with less checking. ++ * @x: Variable to store result. ++ * @ptr: Source address, in user space. ++ * ++ * Context: User context only. This function may sleep. ++ * ++ * This macro copies a single simple variable from user space to kernel ++ * space. It supports simple types like char and int, but not larger ++ * data types like structures or arrays. ++ * ++ * @ptr must have pointer-to-simple-variable type, and the result of ++ * dereferencing @ptr must be assignable to @x without a cast. ++ * ++ * Caller must check the pointer with access_ok() before calling this ++ * function. ++ * ++ * Returns zero on success, or -EFAULT on error. ++ * On error, the variable @x is set to zero. ++ */ ++#define __get_user(x,ptr) \ ++ __get_user_nocheck((x),(ptr),sizeof(*(ptr))) ++ ++extern int __get_user_bad(void); ++extern int __put_user_bad(void); ++ ++#define __get_user_nocheck(x, ptr, size) \ ++({ \ ++ typeof(*(ptr)) __gu_val = (typeof(*(ptr)) __force)0; \ ++ int __gu_err = 0; \ ++ \ ++ switch (size) { \ ++ case 1: __get_user_asm("ub", __gu_val, ptr, __gu_err); break; \ ++ case 2: __get_user_asm("uh", __gu_val, ptr, __gu_err); break; \ ++ case 4: __get_user_asm("w", __gu_val, ptr, __gu_err); break; \ ++ case 8: __get_user_asm("d", __gu_val, ptr, __gu_err); break; \ ++ default: __gu_err = __get_user_bad(); break; \ ++ } \ ++ \ ++ x = __gu_val; \ ++ __gu_err; \ ++}) ++ ++#define __get_user_check(x, ptr, size) \ ++({ \ ++ typeof(*(ptr)) __gu_val = (typeof(*(ptr)) __force)0; \ ++ const typeof(*(ptr)) __user * __gu_addr = (ptr); \ ++ int __gu_err = 0; \ ++ \ ++ if (access_ok(VERIFY_READ, __gu_addr, size)) { \ ++ switch (size) { \ ++ case 1: \ ++ __get_user_asm("ub", __gu_val, __gu_addr, \ ++ __gu_err); \ ++ break; \ ++ case 2: \ ++ __get_user_asm("uh", __gu_val, __gu_addr, \ ++ __gu_err); \ ++ break; \ ++ case 4: \ ++ __get_user_asm("w", __gu_val, __gu_addr, \ ++ __gu_err); \ ++ break; \ ++ case 8: \ ++ __get_user_asm("d", __gu_val, __gu_addr, \ ++ __gu_err); \ ++ break; \ ++ default: \ ++ __gu_err = __get_user_bad(); \ ++ break; \ ++ } \ ++ } else { \ ++ __gu_err = -EFAULT; \ ++ } \ ++ x = __gu_val; \ ++ __gu_err; \ ++}) ++ ++#define __get_user_asm(suffix, __gu_val, ptr, __gu_err) \ ++ asm volatile( \ ++ "1: ld." suffix " %1, %3 \n" \ ++ "2: \n" \ ++ " .section .fixup, \"ax\" \n" \ ++ "3: mov %0, %4 \n" \ ++ " rjmp 2b \n" \ ++ " .previous \n" \ ++ " .section __ex_table, \"a\" \n" \ ++ " .long 1b, 3b \n" \ ++ " .previous \n" \ ++ : "=r"(__gu_err), "=r"(__gu_val) \ ++ : "0"(__gu_err), "m"(*(ptr)), "i"(-EFAULT)) ++ ++#define __put_user_nocheck(x, ptr, size) \ ++({ \ ++ typeof(*(ptr)) __pu_val; \ ++ int __pu_err = 0; \ ++ \ ++ __pu_val = (x); \ ++ switch (size) { \ ++ case 1: __put_user_asm("b", ptr, __pu_val, __pu_err); break; \ ++ case 2: __put_user_asm("h", ptr, __pu_val, __pu_err); break; \ ++ case 4: __put_user_asm("w", ptr, __pu_val, __pu_err); break; \ ++ case 8: __put_user_asm("d", ptr, __pu_val, __pu_err); break; \ ++ default: __pu_err = __put_user_bad(); break; \ ++ } \ ++ __pu_err; \ ++}) ++ ++#define __put_user_check(x, ptr, size) \ ++({ \ ++ typeof(*(ptr)) __pu_val; \ ++ typeof(*(ptr)) __user *__pu_addr = (ptr); \ ++ int __pu_err = 0; \ ++ \ ++ __pu_val = (x); \ ++ if (access_ok(VERIFY_WRITE, __pu_addr, size)) { \ ++ switch (size) { \ ++ case 1: \ ++ __put_user_asm("b", __pu_addr, __pu_val, \ ++ __pu_err); \ ++ break; \ ++ case 2: \ ++ __put_user_asm("h", __pu_addr, __pu_val, \ ++ __pu_err); \ ++ break; \ ++ case 4: \ ++ __put_user_asm("w", __pu_addr, __pu_val, \ ++ __pu_err); \ ++ break; \ ++ case 8: \ ++ __put_user_asm("d", __pu_addr, __pu_val, \ ++ __pu_err); \ ++ break; \ ++ default: \ ++ __pu_err = __put_user_bad(); \ ++ break; \ ++ } \ ++ } else { \ ++ __pu_err = -EFAULT; \ ++ } \ ++ __pu_err; \ ++}) ++ ++#define __put_user_asm(suffix, ptr, __pu_val, __gu_err) \ ++ asm volatile( \ ++ "1: st." suffix " %1, %3 \n" \ ++ "2: \n" \ ++ " .section .fixup, \"ax\" \n" \ ++ "3: mov %0, %4 \n" \ ++ " rjmp 2b \n" \ ++ " .previous \n" \ ++ " .section __ex_table, \"a\" \n" \ ++ " .long 1b, 3b \n" \ ++ " .previous \n" \ ++ : "=r"(__gu_err), "=m"(*(ptr)) \ ++ : "0"(__gu_err), "r"(__pu_val), "i"(-EFAULT)) ++ ++extern __kernel_size_t clear_user(void __user *addr, __kernel_size_t size); ++extern __kernel_size_t __clear_user(void __user *addr, __kernel_size_t size); ++ ++extern long strncpy_from_user(char *dst, const char __user *src, long count); ++extern long __strncpy_from_user(char *dst, const char __user *src, long count); ++ ++extern long strnlen_user(const char __user *__s, long __n); ++extern long __strnlen_user(const char __user *__s, long __n); ++ ++#define strlen_user(s) strnlen_user(s, ~0UL >> 1) ++ ++struct exception_table_entry ++{ ++ unsigned long insn, fixup; ++}; ++ ++#endif /* __ASM_AVR32_UACCESS_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/ucontext.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/ucontext.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,12 @@ ++#ifndef __ASM_AVR32_UCONTEXT_H ++#define __ASM_AVR32_UCONTEXT_H ++ ++struct ucontext { ++ unsigned long uc_flags; ++ struct ucontext * uc_link; ++ stack_t uc_stack; ++ struct sigcontext uc_mcontext; ++ sigset_t uc_sigmask; ++}; ++ ++#endif /* __ASM_AVR32_UCONTEXT_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/unaligned.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/unaligned.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,25 @@ ++#ifndef __ASM_AVR32_UNALIGNED_H ++#define __ASM_AVR32_UNALIGNED_H ++ ++/* ++ * AVR32 can handle some unaligned accesses, depending on the ++ * implementation. The AVR32 AP implementation can handle unaligned ++ * words, but halfwords must be halfword-aligned, and doublewords must ++ * be word-aligned. ++ * ++ * TODO: Make all this CPU-specific and optimize. ++ */ ++ ++#include ++ ++/* Use memmove here, so gcc does not insert a __builtin_memcpy. */ ++ ++#define get_unaligned(ptr) \ ++ ({ __typeof__(*(ptr)) __tmp; memmove(&__tmp, (ptr), sizeof(*(ptr))); __tmp; }) ++ ++#define put_unaligned(val, ptr) \ ++ ({ __typeof__(*(ptr)) __tmp = (val); \ ++ memmove((ptr), &__tmp, sizeof(*(ptr))); \ ++ (void)0; }) ++ ++#endif /* __ASM_AVR32_UNALIGNED_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/unistd.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/unistd.h 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,387 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_UNISTD_H ++#define __ASM_AVR32_UNISTD_H ++ ++/* ++ * This file contains the system call numbers. ++ */ ++ ++#define __NR_restart_syscall 0 ++#define __NR_exit 1 ++#define __NR_fork 2 ++#define __NR_read 3 ++#define __NR_write 4 ++#define __NR_open 5 ++#define __NR_close 6 ++#define __NR_umask 7 ++#define __NR_creat 8 ++#define __NR_link 9 ++#define __NR_unlink 10 ++#define __NR_execve 11 ++#define __NR_chdir 12 ++#define __NR_time 13 ++#define __NR_mknod 14 ++#define __NR_chmod 15 ++#define __NR_chown 16 ++#define __NR_lchown 17 ++#define __NR_lseek 18 ++#define __NR__llseek 19 ++#define __NR_getpid 20 ++#define __NR_mount 21 ++#define __NR_umount2 22 ++#define __NR_setuid 23 ++#define __NR_getuid 24 ++#define __NR_stime 25 ++#define __NR_ptrace 26 ++#define __NR_alarm 27 ++#define __NR_pause 28 ++#define __NR_utime 29 ++#define __NR_stat 30 ++#define __NR_fstat 31 ++#define __NR_lstat 32 ++#define __NR_access 33 ++#define __NR_chroot 34 ++#define __NR_sync 35 ++#define __NR_fsync 36 ++#define __NR_kill 37 ++#define __NR_rename 38 ++#define __NR_mkdir 39 ++#define __NR_rmdir 40 ++#define __NR_dup 41 ++#define __NR_pipe 42 ++#define __NR_times 43 ++#define __NR_clone 44 ++#define __NR_brk 45 ++#define __NR_setgid 46 ++#define __NR_getgid 47 ++#define __NR_getcwd 48 ++#define __NR_geteuid 49 ++#define __NR_getegid 50 ++#define __NR_acct 51 ++#define __NR_setfsuid 52 ++#define __NR_setfsgid 53 ++#define __NR_ioctl 54 ++#define __NR_fcntl 55 ++#define __NR_setpgid 56 ++#define __NR_mremap 57 ++#define __NR_setresuid 58 ++#define __NR_getresuid 59 ++#define __NR_setreuid 60 ++#define __NR_setregid 61 ++#define __NR_ustat 62 ++#define __NR_dup2 63 ++#define __NR_getppid 64 ++#define __NR_getpgrp 65 ++#define __NR_setsid 66 ++#define __NR_rt_sigaction 67 ++#define __NR_rt_sigreturn 68 ++#define __NR_rt_sigprocmask 69 ++#define __NR_rt_sigpending 70 ++#define __NR_rt_sigtimedwait 71 ++#define __NR_rt_sigqueueinfo 72 ++#define __NR_rt_sigsuspend 73 ++#define __NR_sethostname 74 ++#define __NR_setrlimit 75 ++#define __NR_getrlimit 76 /* SuS compliant getrlimit */ ++#define __NR_getrusage 77 ++#define __NR_gettimeofday 78 ++#define __NR_settimeofday 79 ++#define __NR_getgroups 80 ++#define __NR_setgroups 81 ++#define __NR_select 82 ++#define __NR_symlink 83 ++#define __NR_fchdir 84 ++#define __NR_readlink 85 ++#define __NR_pread 86 ++#define __NR_pwrite 87 ++#define __NR_swapon 88 ++#define __NR_reboot 89 ++#define __NR_mmap2 90 ++#define __NR_munmap 91 ++#define __NR_truncate 92 ++#define __NR_ftruncate 93 ++#define __NR_fchmod 94 ++#define __NR_fchown 95 ++#define __NR_getpriority 96 ++#define __NR_setpriority 97 ++#define __NR_wait4 98 ++#define __NR_statfs 99 ++#define __NR_fstatfs 100 ++#define __NR_vhangup 101 ++#define __NR_sigaltstack 102 ++#define __NR_syslog 103 ++#define __NR_setitimer 104 ++#define __NR_getitimer 105 ++#define __NR_swapoff 106 ++#define __NR_sysinfo 107 ++#define __NR_ipc 108 ++#define __NR_sendfile 109 ++#define __NR_setdomainname 110 ++#define __NR_uname 111 ++#define __NR_adjtimex 112 ++#define __NR_mprotect 113 ++#define __NR_vfork 114 ++#define __NR_init_module 115 ++#define __NR_delete_module 116 ++#define __NR_quotactl 117 ++#define __NR_getpgid 118 ++#define __NR_bdflush 119 ++#define __NR_sysfs 120 ++#define __NR_personality 121 ++#define __NR_afs_syscall 122 /* Syscall for Andrew File System */ ++#define __NR_getdents 123 ++#define __NR_flock 124 ++#define __NR_msync 125 ++#define __NR_readv 126 ++#define __NR_writev 127 ++#define __NR_getsid 128 ++#define __NR_fdatasync 129 ++#define __NR__sysctl 130 ++#define __NR_mlock 131 ++#define __NR_munlock 132 ++#define __NR_mlockall 133 ++#define __NR_munlockall 134 ++#define __NR_sched_setparam 135 ++#define __NR_sched_getparam 136 ++#define __NR_sched_setscheduler 137 ++#define __NR_sched_getscheduler 138 ++#define __NR_sched_yield 139 ++#define __NR_sched_get_priority_max 140 ++#define __NR_sched_get_priority_min 141 ++#define __NR_sched_rr_get_interval 142 ++#define __NR_nanosleep 143 ++#define __NR_poll 144 ++#define __NR_nfsservctl 145 ++#define __NR_setresgid 146 ++#define __NR_getresgid 147 ++#define __NR_prctl 148 ++#define __NR_socket 149 ++#define __NR_bind 150 ++#define __NR_connect 151 ++#define __NR_listen 152 ++#define __NR_accept 153 ++#define __NR_getsockname 154 ++#define __NR_getpeername 155 ++#define __NR_socketpair 156 ++#define __NR_send 157 ++#define __NR_recv 158 ++#define __NR_sendto 159 ++#define __NR_recvfrom 160 ++#define __NR_shutdown 161 ++#define __NR_setsockopt 162 ++#define __NR_getsockopt 163 ++#define __NR_sendmsg 164 ++#define __NR_recvmsg 165 ++#define __NR_truncate64 166 ++#define __NR_ftruncate64 167 ++#define __NR_stat64 168 ++#define __NR_lstat64 169 ++#define __NR_fstat64 170 ++#define __NR_pivot_root 171 ++#define __NR_mincore 172 ++#define __NR_madvise 173 ++#define __NR_getdents64 174 ++#define __NR_fcntl64 175 ++#define __NR_gettid 176 ++#define __NR_readahead 177 ++#define __NR_setxattr 178 ++#define __NR_lsetxattr 179 ++#define __NR_fsetxattr 180 ++#define __NR_getxattr 181 ++#define __NR_lgetxattr 182 ++#define __NR_fgetxattr 183 ++#define __NR_listxattr 184 ++#define __NR_llistxattr 185 ++#define __NR_flistxattr 186 ++#define __NR_removexattr 187 ++#define __NR_lremovexattr 188 ++#define __NR_fremovexattr 189 ++#define __NR_tkill 190 ++#define __NR_sendfile64 191 ++#define __NR_futex 192 ++#define __NR_sched_setaffinity 193 ++#define __NR_sched_getaffinity 194 ++#define __NR_capget 195 ++#define __NR_capset 196 ++#define __NR_io_setup 197 ++#define __NR_io_destroy 198 ++#define __NR_io_getevents 199 ++#define __NR_io_submit 200 ++#define __NR_io_cancel 201 ++#define __NR_fadvise64 202 ++#define __NR_exit_group 203 ++#define __NR_lookup_dcookie 204 ++#define __NR_epoll_create 205 ++#define __NR_epoll_ctl 206 ++#define __NR_epoll_wait 207 ++#define __NR_remap_file_pages 208 ++#define __NR_set_tid_address 209 ++ ++#define __NR_timer_create 210 ++#define __NR_timer_settime 211 ++#define __NR_timer_gettime 212 ++#define __NR_timer_getoverrun 213 ++#define __NR_timer_delete 214 ++#define __NR_clock_settime 215 ++#define __NR_clock_gettime 216 ++#define __NR_clock_getres 217 ++#define __NR_clock_nanosleep 218 ++#define __NR_statfs64 219 ++#define __NR_fstatfs64 220 ++#define __NR_tgkill 221 ++ /* 222 reserved for tux */ ++#define __NR_utimes 223 ++#define __NR_fadvise64_64 224 ++ ++#define __NR_cacheflush 225 ++ ++#define __NR_vserver 226 ++#define __NR_mq_open 227 ++#define __NR_mq_unlink 228 ++#define __NR_mq_timedsend 229 ++#define __NR_mq_timedreceive 230 ++#define __NR_mq_notify 231 ++#define __NR_mq_getsetattr 232 ++#define __NR_kexec_load 233 ++#define __NR_waitid 234 ++#define __NR_add_key 235 ++#define __NR_request_key 236 ++#define __NR_keyctl 237 ++#define __NR_ioprio_set 238 ++#define __NR_ioprio_get 239 ++#define __NR_inotify_init 240 ++#define __NR_inotify_add_watch 241 ++#define __NR_inotify_rm_watch 242 ++#define __NR_openat 243 ++#define __NR_mkdirat 244 ++#define __NR_mknodat 245 ++#define __NR_fchownat 246 ++#define __NR_futimesat 247 ++#define __NR_fstatat64 248 ++#define __NR_unlinkat 249 ++#define __NR_renameat 250 ++#define __NR_linkat 251 ++#define __NR_symlinkat 252 ++#define __NR_readlinkat 253 ++#define __NR_fchmodat 254 ++#define __NR_faccessat 255 ++#define __NR_pselect6 256 ++#define __NR_ppoll 257 ++#define __NR_unshare 258 ++#define __NR_set_robust_list 259 ++#define __NR_get_robust_list 260 ++#define __NR_splice 261 ++#define __NR_sync_file_range 262 ++#define __NR_tee 263 ++#define __NR_vmsplice 264 ++ ++#define NR_syscalls 265 ++ ++ ++/* ++ * AVR32 calling convention for system calls: ++ * - System call number in r8 ++ * - Parameters in r12 and downwards to r9 as well as r6 and r5. ++ * - Return value in r12 ++ */ ++ ++/* ++ * user-visible error numbers are in the range -1 - -124: see ++ * ++ */ ++ ++#define __syscall_return(type, res) do { \ ++ if ((unsigned long)(res) >= (unsigned long)(-125)) { \ ++ errno = -(res); \ ++ res = -1; \ ++ } \ ++ return (type) (res); \ ++ } while (0) ++ ++#ifdef __KERNEL__ ++#define __ARCH_WANT_IPC_PARSE_VERSION ++#define __ARCH_WANT_STAT64 ++#define __ARCH_WANT_SYS_ALARM ++#define __ARCH_WANT_SYS_GETHOSTNAME ++#define __ARCH_WANT_SYS_PAUSE ++#define __ARCH_WANT_SYS_TIME ++#define __ARCH_WANT_SYS_UTIME ++#define __ARCH_WANT_SYS_WAITPID ++#define __ARCH_WANT_SYS_FADVISE64 ++#define __ARCH_WANT_SYS_GETPGRP ++#define __ARCH_WANT_SYS_LLSEEK ++#define __ARCH_WANT_SYS_GETPGRP ++#define __ARCH_WANT_SYS_RT_SIGACTION ++#define __ARCH_WANT_SYS_RT_SIGSUSPEND ++#endif ++ ++#if defined(__KERNEL_SYSCALLS__) || defined(__CHECKER__) ++ ++#include ++#include ++#include ++ ++struct pt_regs; ++ ++/* ++ * we need this inline - forking from kernel space will result ++ * in NO COPY ON WRITE (!!!), until an execve is executed. This ++ * is no problem, but for the stack. This is handled by not letting ++ * main() use the stack at all after fork(). Thus, no function ++ * calls - which means inline code for fork too, as otherwise we ++ * would use the stack upon exit from 'fork()'. ++ * ++ * Actually only pause and fork are needed inline, so that there ++ * won't be any messing with the stack from main(), but we define ++ * some others too. ++ */ ++static inline int execve(const char *file, char **argv, char **envp) ++{ ++ register long scno asm("r8") = __NR_execve; ++ register long sc1 asm("r12") = (long)file; ++ register long sc2 asm("r11") = (long)argv; ++ register long sc3 asm("r10") = (long)envp; ++ int res; ++ ++ asm volatile("scall" ++ : "=r"(sc1) ++ : "r"(scno), "0"(sc1), "r"(sc2), "r"(sc3) ++ : "lr", "memory"); ++ res = sc1; ++ __syscall_return(int, res); ++} ++ ++asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize); ++asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, ++ struct pt_regs *regs); ++asmlinkage int sys_rt_sigreturn(struct pt_regs *regs); ++asmlinkage int sys_pipe(unsigned long __user *filedes); ++asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, ++ unsigned long prot, unsigned long flags, ++ unsigned long fd, off_t offset); ++asmlinkage int sys_cacheflush(int operation, void __user *addr, size_t len); ++asmlinkage int sys_fork(struct pt_regs *regs); ++asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, ++ unsigned long parent_tidptr, ++ unsigned long child_tidptr, struct pt_regs *regs); ++asmlinkage int sys_vfork(struct pt_regs *regs); ++asmlinkage int sys_execve(char __user *ufilename, char __user *__user *uargv, ++ char __user *__user *uenvp, struct pt_regs *regs); ++ ++#endif ++ ++/* ++ * "Conditional" syscalls ++ * ++ * What we want is __attribute__((weak,alias("sys_ni_syscall"))), ++ * but it doesn't work on all toolchains, so we just do it by hand ++ */ ++#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall"); ++ ++#endif /* __ASM_AVR32_UNISTD_H */ +Index: linux-2.6.18-avr32/include/asm-avr32/user.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/user.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,64 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ * ++ * Note: We may not need these definitions for AVR32, as we don't ++ * support a.out. ++ */ ++#ifndef __ASM_AVR32_USER_H ++#define __ASM_AVR32_USER_H ++ ++#include ++#include ++ ++/* ++ * Core file format: The core file is written in such a way that gdb ++ * can understand it and provide useful information to the user (under ++ * linux we use the `trad-core' bfd). The file contents are as follows: ++ * ++ * upage: 1 page consisting of a user struct that tells gdb ++ * what is present in the file. Directly after this is a ++ * copy of the task_struct, which is currently not used by gdb, ++ * but it may come in handy at some point. All of the registers ++ * are stored as part of the upage. The upage should always be ++ * only one page long. ++ * data: The data segment follows next. We use current->end_text to ++ * current->brk to pick up all of the user variables, plus any memory ++ * that may have been sbrk'ed. No attempt is made to determine if a ++ * page is demand-zero or if a page is totally unused, we just cover ++ * the entire range. All of the addresses are rounded in such a way ++ * that an integral number of pages is written. ++ * stack: We need the stack information in order to get a meaningful ++ * backtrace. We need to write the data from usp to ++ * current->start_stack, so we round each of these in order to be able ++ * to write an integer number of pages. ++ */ ++ ++struct user_fpu_struct { ++ /* We have no FPU (yet) */ ++}; ++ ++struct user { ++ struct pt_regs regs; /* entire machine state */ ++ size_t u_tsize; /* text size (pages) */ ++ size_t u_dsize; /* data size (pages) */ ++ size_t u_ssize; /* stack size (pages) */ ++ unsigned long start_code; /* text starting address */ ++ unsigned long start_data; /* data starting address */ ++ unsigned long start_stack; /* stack starting address */ ++ long int signal; /* signal causing core dump */ ++ struct regs * u_ar0; /* help gdb find registers */ ++ unsigned long magic; /* identifies a core file */ ++ char u_comm[32]; /* user command name */ ++}; ++ ++#define NBPG PAGE_SIZE ++#define UPAGES 1 ++#define HOST_TEXT_START_ADDR (u.start_code) ++#define HOST_DATA_START_ADDR (u.start_data) ++#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) ++ ++#endif /* __ASM_AVR32_USER_H */ +Index: linux-2.6.18-avr32/include/linux/elf-em.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/linux/elf-em.h 2006-12-04 09:32:57.000000000 +0100 ++++ linux-2.6.18-avr32/include/linux/elf-em.h 2006-12-04 09:33:12.000000000 +0100 +@@ -31,6 +31,7 @@ + #define EM_M32R 88 /* Renesas M32R */ + #define EM_H8_300 46 /* Renesas H8/300,300H,H8S */ + #define EM_FRV 0x5441 /* Fujitsu FR-V */ ++#define EM_AVR32 0x18ad /* Atmel AVR32 */ + + /* + * This is an interim value that we will use until the committee comes +Index: linux-2.6.18-avr32/include/asm-avr32/irqflags.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/irqflags.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,68 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_IRQFLAGS_H ++#define __ASM_AVR32_IRQFLAGS_H ++ ++#include ++ ++static inline unsigned long __raw_local_save_flags(void) ++{ ++ return sysreg_read(SR); ++} ++ ++#define raw_local_save_flags(x) \ ++ do { (x) = __raw_local_save_flags(); } while (0) ++ ++/* ++ * This will restore ALL status register flags, not only the interrupt ++ * mask flag. ++ * ++ * The empty asm statement informs the compiler of this fact while ++ * also serving as a barrier. ++ */ ++static inline void raw_local_irq_restore(unsigned long flags) ++{ ++ sysreg_write(SR, flags); ++ asm volatile("" : : : "memory", "cc"); ++} ++ ++static inline void raw_local_irq_disable(void) ++{ ++ asm volatile("ssrf %0" : : "n"(SYSREG_GM_OFFSET) : "memory"); ++} ++ ++static inline void raw_local_irq_enable(void) ++{ ++ asm volatile("csrf %0" : : "n"(SYSREG_GM_OFFSET) : "memory"); ++} ++ ++static inline int raw_irqs_disabled_flags(unsigned long flags) ++{ ++ return (flags & SYSREG_BIT(GM)) != 0; ++} ++ ++static inline int raw_irqs_disabled(void) ++{ ++ unsigned long flags = __raw_local_save_flags(); ++ ++ return raw_irqs_disabled_flags(flags); ++} ++ ++static inline unsigned long __raw_local_irq_save(void) ++{ ++ unsigned long flags = __raw_local_save_flags(); ++ ++ raw_local_irq_disable(); ++ ++ return flags; ++} ++ ++#define raw_local_irq_save(flags) \ ++ do { (flags) = __raw_local_irq_save(); } while (0) ++ ++#endif /* __ASM_AVR32_IRQFLAGS_H */ +Index: linux-2.6.18-avr32/lib/Kconfig.debug +=================================================================== +--- linux-2.6.18-avr32.orig/lib/Kconfig.debug 2006-12-04 09:32:57.000000000 +0100 ++++ linux-2.6.18-avr32/lib/Kconfig.debug 2006-12-04 09:33:12.000000000 +0100 +@@ -277,7 +277,7 @@ config DEBUG_HIGHMEM + config DEBUG_BUGVERBOSE + bool "Verbose BUG() reporting (adds 70K)" if DEBUG_KERNEL && EMBEDDED + depends on BUG +- depends on ARM || ARM26 || M32R || M68K || SPARC32 || SPARC64 || X86_32 || FRV ++ depends on ARM || ARM26 || AVR32 || M32R || M68K || SPARC32 || SPARC64 || X86_32 || FRV + default !EMBEDDED + help + Say Y here to make BUG() panics output the file name and line number +@@ -315,7 +315,7 @@ config DEBUG_VM + + config FRAME_POINTER + bool "Compile the kernel with frame pointers" +- depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390) ++ depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390 || AVR32) + default y if DEBUG_INFO && UML + help + If you say Y here the resulting kernel image will be slightly larger +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/Makefile 2006-12-04 11:50:22.000000000 +0100 +@@ -0,0 +1,2 @@ ++obj-y += setup.o spi.o flash.o ++obj-$(CONFIG_BOARD_ATSTK1002) += atstk1002.o +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c 2006-12-04 11:50:25.000000000 +0100 +@@ -0,0 +1,37 @@ ++/* ++ * ATSTK1002 daughterboard-specific init code ++ * ++ * Copyright (C) 2005-2006 Atmel 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 ++ ++struct eth_platform_data __initdata eth0_data = { ++ .valid = 1, ++ .mii_phy_addr = 0x10, ++ .is_rmii = 0, ++ .hw_addr = { 0x6a, 0x87, 0x71, 0x14, 0xcd, 0xcb }, ++}; ++ ++extern struct lcdc_platform_data atstk1000_fb0_data; ++ ++static int __init atstk1002_init(void) ++{ ++ at32_add_system_devices(); ++ ++ at32_add_device_usart(1); /* /dev/ttyS0 */ ++ at32_add_device_usart(2); /* /dev/ttyS1 */ ++ at32_add_device_usart(3); /* /dev/ttyS2 */ ++ ++ at32_add_device_eth(0, ð0_data); ++ at32_add_device_spi(0); ++ at32_add_device_lcdc(0, &atstk1000_fb0_data); ++ ++ return 0; ++} ++postcore_initcall(atstk1002_init); +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/setup.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/setup.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,50 @@ ++/* ++ * ATSTK1000 board-specific setup code. ++ * ++ * Copyright (C) 2005-2006 Atmel 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 ++ ++/* Initialized by bootloader-specific startup code. */ ++struct tag *bootloader_tags __initdata; ++ ++struct lcdc_platform_data __initdata atstk1000_fb0_data; ++ ++void __init board_setup_fbmem(unsigned long fbmem_start, ++ unsigned long fbmem_size) ++{ ++ if (!fbmem_size) ++ return; ++ ++ if (!fbmem_start) { ++ void *fbmem; ++ ++ fbmem = alloc_bootmem_low_pages(fbmem_size); ++ fbmem_start = __pa(fbmem); ++ } else { ++ pg_data_t *pgdat; ++ ++ for_each_online_pgdat(pgdat) { ++ if (fbmem_start >= pgdat->bdata->node_boot_start ++ && fbmem_start <= pgdat->bdata->node_low_pfn) ++ reserve_bootmem_node(pgdat, fbmem_start, ++ fbmem_size); ++ } ++ } ++ ++ printk("%luKiB framebuffer memory at address 0x%08lx\n", ++ fbmem_size >> 10, fbmem_start); ++ atstk1000_fb0_data.fbmem_start = fbmem_start; ++ atstk1000_fb0_data.fbmem_size = fbmem_size; ++} +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/spi.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/spi.c 2006-12-04 11:50:22.000000000 +0100 +@@ -0,0 +1,27 @@ ++/* ++ * ATSTK1000 SPI devices ++ * ++ * Copyright (C) 2005 Atmel Norway ++ * ++ * 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 ++ ++static struct spi_board_info spi_board_info[] __initdata = { ++ { ++ .modalias = "ltv350qv", ++ .max_speed_hz = 16000000, ++ .bus_num = 0, ++ .chip_select = 1, ++ }, ++}; ++ ++static int board_init_spi(void) ++{ ++ spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); ++ return 0; ++} ++arch_initcall(board_init_spi); +Index: linux-2.6.18-avr32/arch/avr32/configs/atstk1002_defconfig +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/configs/atstk1002_defconfig 2006-12-04 11:50:21.000000000 +0100 +@@ -0,0 +1,754 @@ ++# ++# Automatically generated make config: don't edit ++# Linux kernel version: 2.6.18-rc1 ++# Tue Jul 11 12:41:36 2006 ++# ++CONFIG_AVR32=y ++CONFIG_GENERIC_HARDIRQS=y ++CONFIG_HARDIRQS_SW_RESEND=y ++CONFIG_GENERIC_IRQ_PROBE=y ++CONFIG_RWSEM_GENERIC_SPINLOCK=y ++CONFIG_GENERIC_HWEIGHT=y ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" ++ ++# ++# Code maturity level options ++# ++CONFIG_EXPERIMENTAL=y ++CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 ++ ++# ++# General setup ++# ++CONFIG_LOCALVERSION="" ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_SWAP=y ++# CONFIG_SYSVIPC is not set ++# CONFIG_POSIX_MQUEUE is not set ++# CONFIG_BSD_PROCESS_ACCT is not set ++CONFIG_SYSCTL=y ++# CONFIG_AUDIT is not set ++# CONFIG_IKCONFIG is not set ++# CONFIG_RELAY is not set ++CONFIG_INITRAMFS_SOURCE="" ++CONFIG_CC_OPTIMIZE_FOR_SIZE=y ++CONFIG_EMBEDDED=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 is not set ++# CONFIG_FUTEX is not set ++# CONFIG_EPOLL is not set ++CONFIG_SHMEM=y ++# CONFIG_SLAB is not set ++# CONFIG_VM_EVENT_COUNTERS is not set ++# CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=1 ++CONFIG_SLOB=y ++ ++# ++# Loadable module support ++# ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++# CONFIG_MODULE_FORCE_UNLOAD is not set ++# CONFIG_MODVERSIONS is not set ++# CONFIG_MODULE_SRCVERSION_ALL is not set ++# CONFIG_KMOD is not set ++ ++# ++# Block layer ++# ++# CONFIG_BLK_DEV_IO_TRACE is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++# CONFIG_IOSCHED_AS is not set ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++# CONFIG_DEFAULT_AS is not set ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++CONFIG_DEFAULT_NOOP=y ++CONFIG_DEFAULT_IOSCHED="noop" ++ ++# ++# System Type and features ++# ++CONFIG_SUBARCH_AVR32B=y ++CONFIG_MMU=y ++CONFIG_PERFORMANCE_COUNTERS=y ++CONFIG_PLATFORM_AT32AP=y ++CONFIG_CPU_AT32AP7000=y ++CONFIG_BOARD_ATSTK1002=y ++CONFIG_BOARD_ATSTK1000=y ++CONFIG_LOADER_U_BOOT=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_SPLIT_PTLOCK_CPUS=4 ++# CONFIG_RESOURCES_64BIT is not set ++# CONFIG_OWNERSHIP_TRACE is not set ++# CONFIG_HZ_100 is not set ++CONFIG_HZ_250=y ++# CONFIG_HZ_1000 is not set ++CONFIG_HZ=250 ++CONFIG_CMDLINE="" ++ ++# ++# Bus options ++# ++ ++# ++# PCCARD (PCMCIA/CardBus) support ++# ++# CONFIG_PCCARD is not set ++ ++# ++# Executable file formats ++# ++CONFIG_BINFMT_ELF=y ++# CONFIG_BINFMT_MISC is not set ++ ++# ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++# CONFIG_NETDEBUG is not set ++CONFIG_PACKET=y ++CONFIG_PACKET_MMAP=y ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++# CONFIG_IP_MULTICAST is not set ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++# CONFIG_IP_PNP_BOOTP is not set ++# CONFIG_IP_PNP_RARP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_XFRM_TUNNEL is not set ++# CONFIG_INET_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++# 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 ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++ ++# ++# TIPC Configuration (EXPERIMENTAL) ++# ++# CONFIG_TIPC is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_NET_TCPPROBE is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_STANDALONE=y ++# CONFIG_PREVENT_FIRMWARE_BUILD is not set ++# CONFIG_FW_LOADER is not set ++# CONFIG_DEBUG_DRIVER is not set ++# CONFIG_SYS_HYPERVISOR is not set ++ ++# ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# ++# Memory Technology Devices (MTD) ++# ++# CONFIG_MTD is not set ++ ++# ++# Parallel port support ++# ++# CONFIG_PARPORT is not set ++ ++# ++# Plug and Play support ++# ++ ++# ++# Block devices ++# ++# CONFIG_BLK_DEV_COW_COMMON is not set ++CONFIG_BLK_DEV_LOOP=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_INITRD=y ++# CONFIG_CDROM_PKTCDVD is not set ++# CONFIG_ATA_OVER_ETH is not set ++ ++# ++# ATA/ATAPI/MFM/RLL support ++# ++# CONFIG_IDE is not set ++ ++# ++# SCSI device support ++# ++# CONFIG_RAID_ATTRS is not set ++# CONFIG_SCSI is not set ++ ++# ++# Multi-device support (RAID and LVM) ++# ++# CONFIG_MD is not set ++ ++# ++# Fusion MPT device support ++# ++# CONFIG_FUSION is not set ++ ++# ++# IEEE 1394 (FireWire) support ++# ++ ++# ++# I2O device support ++# ++ ++# ++# Network device support ++# ++CONFIG_NETDEVICES=y ++CONFIG_DUMMY=y ++# CONFIG_BONDING is not set ++# CONFIG_EQUALIZER is not set ++CONFIG_TUN=m ++ ++# ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# ++# Ethernet (10 or 100Mbit) ++# ++CONFIG_NET_ETHERNET=y ++CONFIG_MII=y ++CONFIG_MACB=y ++ ++# ++# Ethernet (1000 Mbit) ++# ++ ++# ++# Ethernet (10000 Mbit) ++# ++ ++# ++# Token Ring devices ++# ++ ++# ++# Wireless LAN (non-hamradio) ++# ++# CONFIG_NET_RADIO is not set ++ ++# ++# Wan interfaces ++# ++# CONFIG_WAN is not set ++CONFIG_PPP=m ++# CONFIG_PPP_MULTILINK is not set ++# CONFIG_PPP_FILTER is not set ++CONFIG_PPP_ASYNC=m ++# CONFIG_PPP_SYNC_TTY is not set ++CONFIG_PPP_DEFLATE=m ++# CONFIG_PPP_BSDCOMP is not set ++# CONFIG_PPP_MPPE is not set ++# CONFIG_PPPOE is not set ++# CONFIG_SLIP is not set ++# CONFIG_SHAPER is not set ++# CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set ++ ++# ++# ISDN subsystem ++# ++# CONFIG_ISDN is not set ++ ++# ++# Telephony Support ++# ++# CONFIG_PHONE is not set ++ ++# ++# Input device support ++# ++# CONFIG_INPUT is not set ++ ++# ++# Hardware I/O ports ++# ++# CONFIG_SERIO is not set ++# CONFIG_GAMEPORT is not set ++ ++# ++# Character devices ++# ++# CONFIG_VT is not set ++# CONFIG_SERIAL_NONSTANDARD is not set ++ ++# ++# Serial drivers ++# ++# CONFIG_SERIAL_8250 is not set ++ ++# ++# Non-8250 serial port support ++# ++CONFIG_SERIAL_AT91=y ++CONFIG_SERIAL_AT91_CONSOLE=y ++# CONFIG_SERIAL_AT91_TTYAT is not set ++CONFIG_SERIAL_CORE=y ++CONFIG_SERIAL_CORE_CONSOLE=y ++CONFIG_UNIX98_PTYS=y ++# CONFIG_LEGACY_PTYS is not set ++ ++# ++# IPMI ++# ++# CONFIG_IPMI_HANDLER is not set ++ ++# ++# Watchdog Cards ++# ++# CONFIG_WATCHDOG is not set ++# CONFIG_HW_RANDOM is not set ++# CONFIG_RTC is not set ++# CONFIG_GEN_RTC is not set ++# CONFIG_DTLK is not set ++# CONFIG_R3964 is not set ++ ++# ++# Ftape, the floppy tape device driver ++# ++# CONFIG_RAW_DRIVER is not set ++ ++# ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# ++# I2C support ++# ++# CONFIG_I2C 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=m ++# CONFIG_SPI_BITBANG is not set ++ ++# ++# SPI Protocol Masters ++# ++ ++# ++# Dallas's 1-wire bus ++# ++ ++# ++# Hardware Monitoring support ++# ++# CONFIG_HWMON is not set ++# CONFIG_HWMON_VID is not set ++ ++# ++# Misc devices ++# ++ ++# ++# Multimedia devices ++# ++# CONFIG_VIDEO_DEV is not set ++CONFIG_VIDEO_V4L2=y ++ ++# ++# Digital Video Broadcasting Devices ++# ++# CONFIG_DVB is not set ++ ++# ++# Graphics support ++# ++# CONFIG_FIRMWARE_EDID is not set ++CONFIG_FB=m ++CONFIG_FB_CFB_FILLRECT=m ++CONFIG_FB_CFB_COPYAREA=m ++CONFIG_FB_CFB_IMAGEBLIT=m ++# 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 ++CONFIG_FB_SIDSA=m ++CONFIG_FB_SIDSA_DEFAULT_BPP=24 ++# CONFIG_FB_S1D13XXX is not set ++# CONFIG_FB_VIRTUAL is not set ++ ++# ++# Logo configuration ++# ++# CONFIG_LOGO is not set ++CONFIG_BACKLIGHT_LCD_SUPPORT=y ++# CONFIG_BACKLIGHT_CLASS_DEVICE is not set ++CONFIG_LCD_CLASS_DEVICE=m ++CONFIG_LCD_DEVICE=y ++CONFIG_LCD_LTV350QV=m ++ ++# ++# Sound ++# ++# CONFIG_SOUND is not set ++ ++# ++# USB support ++# ++# CONFIG_USB_ARCH_HAS_HCD is not set ++# CONFIG_USB_ARCH_HAS_OHCI is not set ++# CONFIG_USB_ARCH_HAS_EHCI is not set ++ ++# ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' ++# ++ ++# ++# USB Gadget Support ++# ++# CONFIG_USB_GADGET is not set ++ ++# ++# MMC/SD Card support ++# ++# CONFIG_MMC is not set ++ ++# ++# LED devices ++# ++# CONFIG_NEW_LEDS is not set ++ ++# ++# LED drivers ++# ++ ++# ++# LED Triggers ++# ++ ++# ++# InfiniBand support ++# ++ ++# ++# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) ++# ++ ++# ++# Real Time Clock ++# ++# CONFIG_RTC_CLASS is not set ++ ++# ++# DMA Engine support ++# ++# CONFIG_DMA_ENGINE is not set ++ ++# ++# DMA Clients ++# ++ ++# ++# DMA Devices ++# ++ ++# ++# File systems ++# ++CONFIG_EXT2_FS=y ++# CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set ++# CONFIG_EXT3_FS is not set ++# CONFIG_REISERFS_FS is not set ++# CONFIG_JFS_FS is not set ++# CONFIG_FS_POSIX_ACL is not set ++# CONFIG_XFS_FS is not set ++# CONFIG_OCFS2_FS is not set ++CONFIG_MINIX_FS=m ++CONFIG_ROMFS_FS=m ++# CONFIG_INOTIFY is not set ++# CONFIG_QUOTA is not set ++# CONFIG_DNOTIFY is not set ++# CONFIG_AUTOFS_FS is not set ++# CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set ++ ++# ++# CD-ROM/DVD Filesystems ++# ++# CONFIG_ISO9660_FS is not set ++# CONFIG_UDF_FS is not set ++ ++# ++# DOS/FAT/NT Filesystems ++# ++CONFIG_FAT_FS=m ++CONFIG_MSDOS_FS=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_SYSFS=y ++CONFIG_TMPFS=y ++# CONFIG_HUGETLB_PAGE is not set ++CONFIG_RAMFS=y ++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_CRAMFS is not set ++# CONFIG_VXFS_FS is not set ++# CONFIG_HPFS_FS is not set ++# CONFIG_QNX4FS_FS is not set ++# CONFIG_SYSV_FS is not set ++# CONFIG_UFS_FS is not set ++ ++# ++# Network File Systems ++# ++CONFIG_NFS_FS=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_RPCSEC_GSS_KRB5 is not set ++# CONFIG_RPCSEC_GSS_SPKM3 is not set ++# CONFIG_SMB_FS is not set ++CONFIG_CIFS=m ++# CONFIG_CIFS_STATS is not set ++# CONFIG_CIFS_WEAK_PW_HASH is not set ++# CONFIG_CIFS_XATTR is not set ++# CONFIG_CIFS_DEBUG2 is not set ++# CONFIG_CIFS_EXPERIMENTAL is not set ++# CONFIG_NCP_FS is not set ++# CONFIG_CODA_FS is not set ++# CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set ++ ++# ++# Partition Types ++# ++# CONFIG_PARTITION_ADVANCED is not set ++CONFIG_MSDOS_PARTITION=y ++ ++# ++# Native Language Support ++# ++CONFIG_NLS=m ++CONFIG_NLS_DEFAULT="iso8859-1" ++CONFIG_NLS_CODEPAGE_437=m ++# 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 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 ++ ++# ++# Kernel hacking ++# ++CONFIG_TRACE_IRQFLAGS_SUPPORT=y ++CONFIG_PRINTK_TIME=y ++CONFIG_MAGIC_SYSRQ=y ++# CONFIG_UNUSED_SYMBOLS is not set ++CONFIG_DEBUG_KERNEL=y ++CONFIG_LOG_BUF_SHIFT=14 ++CONFIG_DETECT_SOFTLOCKUP=y ++# CONFIG_SCHEDSTATS is not set ++# CONFIG_DEBUG_SPINLOCK is not set ++# CONFIG_DEBUG_MUTEXES is not set ++# CONFIG_DEBUG_RWSEMS is not set ++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set ++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set ++# CONFIG_DEBUG_KOBJECT is not set ++CONFIG_DEBUG_BUGVERBOSE=y ++# CONFIG_DEBUG_INFO is not set ++CONFIG_DEBUG_FS=y ++# CONFIG_DEBUG_VM is not set ++CONFIG_FRAME_POINTER=y ++# CONFIG_UNWIND_INFO is not set ++CONFIG_FORCED_INLINING=y ++# CONFIG_RCU_TORTURE_TEST is not set ++CONFIG_KPROBES=y ++ ++# ++# Security options ++# ++# CONFIG_KEYS is not set ++# CONFIG_SECURITY is not set ++ ++# ++# Cryptographic options ++# ++# CONFIG_CRYPTO is not set ++ ++# ++# Hardware crypto devices ++# ++ ++# ++# Library routines ++# ++CONFIG_CRC_CCITT=m ++# CONFIG_CRC16 is not set ++CONFIG_CRC32=m ++# CONFIG_LIBCRC32C is not set ++CONFIG_ZLIB_INFLATE=m ++CONFIG_ZLIB_DEFLATE=m +Index: linux-2.6.18-avr32/arch/avr32/lib/io-readsb.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/io-readsb.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++ .text ++.Lnot_word_aligned: ++1: ld.ub r8, r12[0] ++ sub r10, 1 ++ st.b r11++, r8 ++ reteq r12 ++ tst r11, r9 ++ brne 1b ++ ++ /* fall through */ ++ ++ .global __raw_readsb ++ .type __raw_readsb,@function ++__raw_readsb: ++ cp.w r10, 0 ++ mov r9, 3 ++ reteq r12 ++ ++ tst r11, r9 ++ brne .Lnot_word_aligned ++ ++ sub r10, 4 ++ brlt 2f ++ ++1: ldins.b r8:t, r12[0] ++ ldins.b r8:u, r12[0] ++ ldins.b r8:l, r12[0] ++ ldins.b r8:b, r12[0] ++ st.w r11++, r8 ++ sub r10, 4 ++ brge 1b ++ ++2: sub r10, -4 ++ reteq r12 ++ ++3: ld.uh r8, r12[0] ++ sub r10, 1 ++ st.b r11++, r8 ++ brne 3b ++ ++ retal r12 +Index: linux-2.6.18-avr32/arch/avr32/lib/io-writesb.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/lib/io-writesb.S 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,52 @@ ++/* ++ * Copyright (C) 2004-2006 Atmel 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. ++ */ ++ ++ .text ++.Lnot_word_aligned: ++1: ld.ub r8, r11++ ++ sub r10, 1 ++ st.b r12[0], r8 ++ reteq r12 ++ tst r11, r9 ++ brne 1b ++ ++ /* fall through */ ++ ++ .global __raw_writesb ++ .type __raw_writesb,@function ++__raw_writesb: ++ cp.w r10, 0 ++ mov r9, 3 ++ reteq r12 ++ ++ tst r11, r9 ++ brne .Lnot_word_aligned ++ ++ sub r10, 4 ++ brlt 2f ++ ++1: ld.w r8, r11++ ++ bfextu r9, r8, 24, 8 ++ st.b r12[0], r9 ++ bfextu r9, r8, 16, 8 ++ st.b r12[0], r9 ++ bfextu r9, r8, 8, 8 ++ st.b r12[0], r9 ++ st.b r12[0], r8 ++ sub r10, 4 ++ brge 1b ++ ++2: sub r10, -4 ++ reteq r12 ++ ++3: ld.ub r8, r11++ ++ sub r10, 1 ++ st.b r12[0], r8 ++ brne 3b ++ ++ retal r12 +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/flash.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/flash.c 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,95 @@ ++/* ++ * ATSTK1000 board-specific flash initialization ++ * ++ * Copyright (C) 2005-2006 Atmel 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 ++ ++static struct smc_config flash_config __initdata = { ++ .ncs_read_setup = 0, ++ .nrd_setup = 40, ++ .ncs_write_setup = 0, ++ .nwe_setup = 10, ++ ++ .ncs_read_pulse = 80, ++ .nrd_pulse = 40, ++ .ncs_write_pulse = 65, ++ .nwe_pulse = 55, ++ ++ .read_cycle = 120, ++ .write_cycle = 120, ++ ++ .bus_width = 2, ++ .nrd_controlled = 1, ++ .nwe_controlled = 1, ++ .byte_write = 1, ++}; ++ ++static struct mtd_partition flash_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0x00000000, ++ .size = 0x00020000, /* 128 KiB */ ++ .mask_flags = MTD_WRITEABLE, ++ }, ++ { ++ .name = "root", ++ .offset = 0x00020000, ++ .size = 0x007d0000, ++ }, ++ { ++ .name = "env", ++ .offset = 0x007f0000, ++ .size = 0x00010000, ++ .mask_flags = MTD_WRITEABLE, ++ }, ++}; ++ ++static struct physmap_flash_data flash_data = { ++ .width = 2, ++ .nr_parts = ARRAY_SIZE(flash_parts), ++ .parts = flash_parts, ++}; ++ ++static struct resource flash_resource = { ++ .start = 0x00000000, ++ .end = 0x007fffff, ++ .flags = IORESOURCE_MEM, ++}; ++ ++static struct platform_device flash_device = { ++ .name = "physmap-flash", ++ .id = 0, ++ .resource = &flash_resource, ++ .num_resources = 1, ++ .dev = { ++ .platform_data = &flash_data, ++ }, ++}; ++ ++/* This needs to be called after the SMC has been initialized */ ++static int __init atstk1000_flash_init(void) ++{ ++ int ret; ++ ++ ret = smc_set_configuration(0, &flash_config); ++ if (ret < 0) { ++ printk(KERN_ERR "atstk1000: failed to set NOR flash timing\n"); ++ return ret; ++ } ++ ++ platform_device_register(&flash_device); ++ ++ return 0; ++} ++device_initcall(atstk1000_flash_init); +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/hsmc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/hsmc.c 2006-12-04 11:50:22.000000000 +0100 +@@ -0,0 +1,164 @@ ++/* ++ * Static Memory Controller for AT32 chips ++ * ++ * Copyright (C) 2006 Atmel 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. ++ */ ++#define DEBUG ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "hsmc.h" ++ ++#define NR_CHIP_SELECTS 6 ++ ++struct hsmc { ++ void __iomem *regs; ++ struct clk *pclk; ++ struct clk *mck; ++}; ++ ++static struct hsmc *hsmc; ++ ++int smc_set_configuration(int cs, const struct smc_config *config) ++{ ++ unsigned long mul; ++ unsigned long offset; ++ u32 setup, pulse, cycle, mode; ++ ++ if (!hsmc) ++ return -ENODEV; ++ if (cs >= NR_CHIP_SELECTS) ++ return -EINVAL; ++ ++ /* ++ * cycles = x / T = x * f ++ * = ((x * 1000000000) * ((f * 65536) / 1000000000)) / 65536 ++ * = ((x * 1000000000) * (((f / 10000) * 65536) / 100000)) / 65536 ++ */ ++ mul = (clk_get_rate(hsmc->mck) / 10000) << 16; ++ mul /= 100000; ++ ++#define ns2cyc(x) ((((x) * mul) + 65535) >> 16) ++ ++ setup = (HSMC_BF(NWE_SETUP, ns2cyc(config->nwe_setup)) ++ | HSMC_BF(NCS_WR_SETUP, ns2cyc(config->ncs_write_setup)) ++ | HSMC_BF(NRD_SETUP, ns2cyc(config->nrd_setup)) ++ | HSMC_BF(NCS_RD_SETUP, ns2cyc(config->ncs_read_setup))); ++ pulse = (HSMC_BF(NWE_PULSE, ns2cyc(config->nwe_pulse)) ++ | HSMC_BF(NCS_WR_PULSE, ns2cyc(config->ncs_write_pulse)) ++ | HSMC_BF(NRD_PULSE, ns2cyc(config->nrd_pulse)) ++ | HSMC_BF(NCS_RD_PULSE, ns2cyc(config->ncs_read_pulse))); ++ cycle = (HSMC_BF(NWE_CYCLE, ns2cyc(config->write_cycle)) ++ | HSMC_BF(NRD_CYCLE, ns2cyc(config->read_cycle))); ++ ++ switch (config->bus_width) { ++ case 1: ++ mode = HSMC_BF(DBW, HSMC_DBW_8_BITS); ++ break; ++ case 2: ++ mode = HSMC_BF(DBW, HSMC_DBW_16_BITS); ++ break; ++ case 4: ++ mode = HSMC_BF(DBW, HSMC_DBW_32_BITS); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ if (config->nrd_controlled) ++ mode |= HSMC_BIT(READ_MODE); ++ if (config->nwe_controlled) ++ mode |= HSMC_BIT(WRITE_MODE); ++ if (config->byte_write) ++ mode |= HSMC_BIT(BAT); ++ ++ pr_debug("smc cs%d: setup/%08x pulse/%08x cycle/%08x mode/%08x\n", ++ cs, setup, pulse, cycle, mode); ++ ++ offset = cs * 0x10; ++ hsmc_writel(hsmc, SETUP0 + offset, setup); ++ hsmc_writel(hsmc, PULSE0 + offset, pulse); ++ hsmc_writel(hsmc, CYCLE0 + offset, cycle); ++ hsmc_writel(hsmc, MODE0 + offset, mode); ++ hsmc_readl(hsmc, MODE0); /* I/O barrier */ ++ ++ return 0; ++} ++EXPORT_SYMBOL(smc_set_configuration); ++ ++static int hsmc_probe(struct platform_device *pdev) ++{ ++ struct resource *regs; ++ struct clk *pclk, *mck; ++ int ret; ++ ++ if (hsmc) ++ return -EBUSY; ++ ++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!regs) ++ return -ENXIO; ++ pclk = clk_get(&pdev->dev, "pclk"); ++ if (IS_ERR(pclk)) ++ return PTR_ERR(pclk); ++ mck = clk_get(&pdev->dev, "mck"); ++ if (IS_ERR(mck)) { ++ ret = PTR_ERR(mck); ++ goto out_put_pclk; ++ } ++ ++ ret = -ENOMEM; ++ hsmc = kzalloc(sizeof(struct hsmc), GFP_KERNEL); ++ if (!hsmc) ++ goto out_put_clocks; ++ ++ clk_enable(pclk); ++ clk_enable(mck); ++ ++ hsmc->pclk = pclk; ++ hsmc->mck = mck; ++ hsmc->regs = ioremap(regs->start, regs->end - regs->start + 1); ++ if (!hsmc->regs) ++ goto out_disable_clocks; ++ ++ dev_info(&pdev->dev, "Atmel Static Memory Controller at 0x%08lx\n", ++ (unsigned long)regs->start); ++ ++ platform_set_drvdata(pdev, hsmc); ++ ++ return 0; ++ ++out_disable_clocks: ++ clk_disable(mck); ++ clk_disable(pclk); ++ kfree(hsmc); ++out_put_clocks: ++ clk_put(mck); ++out_put_pclk: ++ clk_put(pclk); ++ hsmc = NULL; ++ return ret; ++} ++ ++static struct platform_driver hsmc_driver = { ++ .probe = hsmc_probe, ++ .driver = { ++ .name = "smc", ++ }, ++}; ++ ++static int __init hsmc_init(void) ++{ ++ return platform_driver_register(&hsmc_driver); ++} ++arch_initcall(hsmc_init); +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/hsmc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/hsmc.h 2006-12-04 09:33:12.000000000 +0100 +@@ -0,0 +1,127 @@ ++/* ++ * Register definitions for Atmel Static Memory Controller (SMC) ++ * ++ * Copyright (C) 2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_HSMC_H__ ++#define __ASM_AVR32_HSMC_H__ ++ ++/* HSMC register offsets */ ++#define HSMC_SETUP0 0x0000 ++#define HSMC_PULSE0 0x0004 ++#define HSMC_CYCLE0 0x0008 ++#define HSMC_MODE0 0x000c ++#define HSMC_SETUP1 0x0010 ++#define HSMC_PULSE1 0x0014 ++#define HSMC_CYCLE1 0x0018 ++#define HSMC_MODE1 0x001c ++#define HSMC_SETUP2 0x0020 ++#define HSMC_PULSE2 0x0024 ++#define HSMC_CYCLE2 0x0028 ++#define HSMC_MODE2 0x002c ++#define HSMC_SETUP3 0x0030 ++#define HSMC_PULSE3 0x0034 ++#define HSMC_CYCLE3 0x0038 ++#define HSMC_MODE3 0x003c ++#define HSMC_SETUP4 0x0040 ++#define HSMC_PULSE4 0x0044 ++#define HSMC_CYCLE4 0x0048 ++#define HSMC_MODE4 0x004c ++#define HSMC_SETUP5 0x0050 ++#define HSMC_PULSE5 0x0054 ++#define HSMC_CYCLE5 0x0058 ++#define HSMC_MODE5 0x005c ++ ++/* Bitfields in SETUP0 */ ++#define HSMC_NWE_SETUP_OFFSET 0 ++#define HSMC_NWE_SETUP_SIZE 6 ++#define HSMC_NCS_WR_SETUP_OFFSET 8 ++#define HSMC_NCS_WR_SETUP_SIZE 6 ++#define HSMC_NRD_SETUP_OFFSET 16 ++#define HSMC_NRD_SETUP_SIZE 6 ++#define HSMC_NCS_RD_SETUP_OFFSET 24 ++#define HSMC_NCS_RD_SETUP_SIZE 6 ++ ++/* Bitfields in PULSE0 */ ++#define HSMC_NWE_PULSE_OFFSET 0 ++#define HSMC_NWE_PULSE_SIZE 7 ++#define HSMC_NCS_WR_PULSE_OFFSET 8 ++#define HSMC_NCS_WR_PULSE_SIZE 7 ++#define HSMC_NRD_PULSE_OFFSET 16 ++#define HSMC_NRD_PULSE_SIZE 7 ++#define HSMC_NCS_RD_PULSE_OFFSET 24 ++#define HSMC_NCS_RD_PULSE_SIZE 7 ++ ++/* Bitfields in CYCLE0 */ ++#define HSMC_NWE_CYCLE_OFFSET 0 ++#define HSMC_NWE_CYCLE_SIZE 9 ++#define HSMC_NRD_CYCLE_OFFSET 16 ++#define HSMC_NRD_CYCLE_SIZE 9 ++ ++/* Bitfields in MODE0 */ ++#define HSMC_READ_MODE_OFFSET 0 ++#define HSMC_READ_MODE_SIZE 1 ++#define HSMC_WRITE_MODE_OFFSET 1 ++#define HSMC_WRITE_MODE_SIZE 1 ++#define HSMC_EXNW_MODE_OFFSET 4 ++#define HSMC_EXNW_MODE_SIZE 2 ++#define HSMC_BAT_OFFSET 8 ++#define HSMC_BAT_SIZE 1 ++#define HSMC_DBW_OFFSET 12 ++#define HSMC_DBW_SIZE 2 ++#define HSMC_TDF_CYCLES_OFFSET 16 ++#define HSMC_TDF_CYCLES_SIZE 4 ++#define HSMC_TDF_MODE_OFFSET 20 ++#define HSMC_TDF_MODE_SIZE 1 ++#define HSMC_PMEN_OFFSET 24 ++#define HSMC_PMEN_SIZE 1 ++#define HSMC_PS_OFFSET 28 ++#define HSMC_PS_SIZE 2 ++ ++/* Constants for READ_MODE */ ++#define HSMC_READ_MODE_NCS_CONTROLLED 0 ++#define HSMC_READ_MODE_NRD_CONTROLLED 1 ++ ++/* Constants for WRITE_MODE */ ++#define HSMC_WRITE_MODE_NCS_CONTROLLED 0 ++#define HSMC_WRITE_MODE_NWE_CONTROLLED 1 ++ ++/* Constants for EXNW_MODE */ ++#define HSMC_EXNW_MODE_DISABLED 0 ++#define HSMC_EXNW_MODE_RESERVED 1 ++#define HSMC_EXNW_MODE_FROZEN 2 ++#define HSMC_EXNW_MODE_READY 3 ++ ++/* Constants for BAT */ ++#define HSMC_BAT_BYTE_SELECT 0 ++#define HSMC_BAT_BYTE_WRITE 1 ++ ++/* Constants for DBW */ ++#define HSMC_DBW_8_BITS 0 ++#define HSMC_DBW_16_BITS 1 ++#define HSMC_DBW_32_BITS 2 ++ ++/* Bit manipulation macros */ ++#define HSMC_BIT(name) \ ++ (1 << HSMC_##name##_OFFSET) ++#define HSMC_BF(name,value) \ ++ (((value) & ((1 << HSMC_##name##_SIZE) - 1)) \ ++ << HSMC_##name##_OFFSET) ++#define HSMC_BFEXT(name,value) \ ++ (((value) >> HSMC_##name##_OFFSET) \ ++ & ((1 << HSMC_##name##_SIZE) - 1)) ++#define HSMC_BFINS(name,value,old) \ ++ (((old) & ~(((1 << HSMC_##name##_SIZE) - 1) \ ++ << HSMC_##name##_OFFSET)) | HSMC_BF(name,value)) ++ ++/* Register access macros */ ++#define hsmc_readl(port,reg) \ ++ __raw_readl((port)->regs + HSMC_##reg) ++#define hsmc_writel(port,reg,value) \ ++ __raw_writel((value), (port)->regs + HSMC_##reg) ++ ++#endif /* __ASM_AVR32_HSMC_H__ */ +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/smc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/smc.h 2006-12-04 11:50:22.000000000 +0100 +@@ -0,0 +1,60 @@ ++/* ++ * Static Memory Controller for AT32 chips ++ * ++ * Copyright (C) 2006 Atmel Corporation ++ * ++ * Inspired by the OMAP2 General-Purpose Memory Controller interface ++ * ++ * 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 __ARCH_AT32AP_SMC_H ++#define __ARCH_AT32AP_SMC_H ++ ++/* ++ * All timing parameters are in nanoseconds. ++ */ ++struct smc_config { ++ /* Delay from address valid to assertion of given strobe */ ++ u16 ncs_read_setup; ++ u16 nrd_setup; ++ u16 ncs_write_setup; ++ u16 nwe_setup; ++ ++ /* Pulse length of given strobe */ ++ u16 ncs_read_pulse; ++ u16 nrd_pulse; ++ u16 ncs_write_pulse; ++ u16 nwe_pulse; ++ ++ /* Total cycle length of given operation */ ++ u16 read_cycle; ++ u16 write_cycle; ++ ++ /* Bus width in bytes */ ++ u8 bus_width; ++ ++ /* ++ * 0: Data is sampled on rising edge of NCS ++ * 1: Data is sampled on rising edge of NRD ++ */ ++ unsigned int nrd_controlled:1; ++ ++ /* ++ * 0: Data is driven on falling edge of NCS ++ * 1: Data is driven on falling edge of NWR ++ */ ++ unsigned int nwe_controlled:1; ++ ++ /* ++ * 0: Byte select access type ++ * 1: Byte write access type ++ */ ++ unsigned int byte_write:1; ++}; ++ ++extern int smc_set_configuration(int cs, const struct smc_config *config); ++extern struct smc_config *smc_get_configuration(int cs); ++ ++#endif /* __ARCH_AT32AP_SMC_H */ diff --git a/packages/linux/linux-2.6.18/avr32-checkstack.patch b/packages/linux/linux-2.6.18/avr32-checkstack.patch new file mode 100644 index 0000000000..31d24340c5 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-checkstack.patch @@ -0,0 +1,35 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Wed Jan 4 16:58:49 2006 +0100 +Subject: [PATCH] AVR32 checkstack port + +Add regexes to recognize stack frame adjustments in AVR32 code. + +--- + + scripts/checkstack.pl | 5 +++++ + 1 file changed, 5 insertions(+) + +Index: linux-2.6.16-avr32/scripts/checkstack.pl +=================================================================== +--- linux-2.6.16-avr32.orig/scripts/checkstack.pl 2006-03-20 06:53:29.000000000 +0100 ++++ linux-2.6.16-avr32/scripts/checkstack.pl 2006-04-03 18:57:19.000000000 +0200 +@@ -12,6 +12,7 @@ + # sh64 port by Paul Mundt + # Random bits by Matt Mackall + # M68k port by Geert Uytterhoeven and Andreas Schwab ++# AVR32 port by Haavard Skinnemoen + # + # Usage: + # objdump -d vmlinux | stackcheck.pl [arch] +@@ -37,6 +38,10 @@ my (@stack, $re, $x, $xs); + if ($arch eq 'arm') { + #c0008ffc: e24dd064 sub sp, sp, #100 ; 0x64 + $re = qr/.*sub.*sp, sp, #(([0-9]{2}|[3-9])[0-9]{2})/o; ++ } elsif ($arch eq 'avr32') { ++ #8000008a: 20 1d sub sp,4 ++ #80000ca8: fa cd 05 b0 sub sp,sp,1456 ++ $re = qr/^.*sub.*sp.*,([0-9]{1,8})/o; + } elsif ($arch =~ /^i[3456]86$/) { + #c0105234: 81 ec ac 05 00 00 sub $0x5ac,%esp + $re = qr/^.*[as][du][db] \$(0x$x{1,8}),\%esp$/o; diff --git a/packages/linux/linux-2.6.18/avr32-dma-controller-framework.patch b/packages/linux/linux-2.6.18/avr32-dma-controller-framework.patch new file mode 100644 index 0000000000..0f6301303b --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-dma-controller-framework.patch @@ -0,0 +1,241 @@ +From 740c72fe92a5536060ac6debbfe0a26c0b9b8770 Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Mon, 11 Sep 2006 17:59:59 +0200 +Subject: [PATCH] AVR32: DMA controller framework + +This patch puts the DMA controller framework used in earlier BSPs back. +It was removed before the AVR32 patches went into -mm, and it should +be removed here as well as soon as we have an alternative. + +--- + arch/avr32/kernel/Makefile | 1 + arch/avr32/kernel/dma-controller.c | 34 +++++++ + include/asm-avr32/dma-controller.h | 165 ++++++++++++++++++++++++++++++++++++ + 3 files changed, 200 insertions(+), 0 deletions(-) + +diff --git a/arch/avr32/kernel/Makefile b/arch/avr32/kernel/Makefile +index 90e5aff..b6afc0c 100644 +--- a/arch/avr32/kernel/Makefile ++++ b/arch/avr32/kernel/Makefile +@@ -9,6 +9,7 @@ obj-y += syscall_table.o syscall-stub + obj-y += setup.o traps.o semaphore.o ptrace.o + obj-y += signal.o sys_avr32.o process.o time.o + obj-y += init_task.o switch_to.o cpu.o ++obj-y += dma-controller.o + obj-$(CONFIG_MODULES) += module.o avr32_ksyms.o + obj-$(CONFIG_KPROBES) += kprobes.o + +diff --git a/arch/avr32/kernel/dma-controller.c b/arch/avr32/kernel/dma-controller.c +new file mode 100644 +index 0000000..fb654b3 +--- /dev/null ++++ b/arch/avr32/kernel/dma-controller.c +@@ -0,0 +1,34 @@ ++/* ++ * Preliminary DMA controller framework for AVR32 ++ * ++ * Copyright (C) 2005-2006 Atmel 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 ++ ++static LIST_HEAD(controllers); ++ ++int register_dma_controller(struct dma_controller *dmac) ++{ ++ static int next_id; ++ ++ dmac->id = next_id++; ++ list_add_tail(&dmac->list, &controllers); ++ ++ return 0; ++} ++EXPORT_SYMBOL(register_dma_controller); ++ ++struct dma_controller *find_dma_controller(int id) ++{ ++ struct dma_controller *dmac; ++ ++ list_for_each_entry(dmac, &controllers, list) ++ if (dmac->id == id) ++ return dmac; ++ return NULL; ++} ++EXPORT_SYMBOL(find_dma_controller); +diff --git a/include/asm-avr32/dma-controller.h b/include/asm-avr32/dma-controller.h +new file mode 100644 +index 0000000..8c67601 +--- /dev/null ++++ b/include/asm-avr32/dma-controller.h +@@ -0,0 +1,165 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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. ++ */ ++#ifndef __ASM_AVR32_DMA_CONTROLLER_H ++#define __ASM_AVR32_DMA_CONTROLLER_H ++ ++#include ++ ++#define DMA_DIR_MEM_TO_MEM 0x0000 ++#define DMA_DIR_MEM_TO_PERIPH 0x0001 ++#define DMA_DIR_PERIPH_TO_MEM 0x0002 ++#define DMA_DIR_PERIPH_TO_PERIPH 0x0003 ++ ++#define DMA_WIDTH_8BIT 0 ++#define DMA_WIDTH_16BIT 1 ++#define DMA_WIDTH_32BIT 2 ++ ++struct dma_request { ++ struct dma_controller *dmac; ++ struct list_head list; ++ ++ unsigned short channel; ++ ++ void (*xfer_complete)(struct dma_request *req); ++ void (*block_complete)(struct dma_request *req); ++ void (*error)(struct dma_request *req); ++}; ++ ++struct dma_request_sg { ++ struct dma_request req; ++ ++ int nr_sg; ++ struct scatterlist *sg; ++ unsigned long block_size; ++ ++ dma_addr_t data_reg; ++ unsigned short periph_id; ++ ++ unsigned char direction; ++ unsigned char width; ++}; ++#define to_dma_request_sg(_req) \ ++ container_of(_req, struct dma_request_sg, req) ++ ++struct dma_request_cyclic { ++ struct dma_request req; ++ ++ int periods; ++ unsigned long buffer_size; ++ ++ dma_addr_t buffer_start; ++ dma_addr_t data_reg; ++ ++ unsigned short periph_id; ++ unsigned char direction; ++ unsigned char width; ++ ++ void *dev_id; ++}; ++#define to_dma_request_cyclic(_req) \ ++ container_of(_req, struct dma_request_cyclic, req) ++ ++struct dma_request_memcpy { ++ struct dma_request req; ++ ++ dma_addr_t src_addr; ++ unsigned int src_width; ++ unsigned int src_stride; ++ ++ dma_addr_t dst_addr; ++ unsigned int dst_width; ++ unsigned int dst_stride; ++ ++ size_t length; ++ ++ unsigned short src_reverse:1; ++ unsigned short dst_reverse:1; ++}; ++#define to_dma_request_memcpy(_req) \ ++ container_of(_req, struct dma_request_memcpy, req) ++ ++struct dma_controller { ++ struct list_head list; ++ int id; ++ struct device *dev; ++ ++ int (*alloc_channel)(struct dma_controller *dmac); ++ void (*release_channel)(struct dma_controller *dmac, ++ int channel); ++ int (*prepare_request_sg)(struct dma_controller *dmac, ++ struct dma_request_sg *req); ++ int (*prepare_request_cyclic)(struct dma_controller *dmac, ++ struct dma_request_cyclic *req); ++ int (*prepare_request_memcpy)(struct dma_controller *dmac, ++ struct dma_request_memcpy *req); ++ int (*start_request)(struct dma_controller *dmac, ++ unsigned int channel); ++ int (*stop_request)(struct dma_controller *dmac, ++ unsigned int channel); ++ dma_addr_t (*get_current_pos)(struct dma_controller *dmac, ++ unsigned int channel); ++}; ++ ++static inline int ++dma_alloc_channel(struct dma_controller *dmac) ++{ ++ return dmac->alloc_channel(dmac); ++} ++ ++static inline void ++dma_release_channel(struct dma_controller *dmac, int chan) ++{ ++ dmac->release_channel(dmac, chan); ++} ++ ++static inline int ++dma_prepare_request_sg(struct dma_controller *dmac, ++ struct dma_request_sg *req) ++{ ++ return dmac->prepare_request_sg(dmac, req); ++} ++ ++static inline int ++dma_prepare_request_cyclic(struct dma_controller *dmac, ++ struct dma_request_cyclic *req) ++{ ++ return dmac->prepare_request_cyclic(dmac, req); ++} ++ ++static inline int ++dma_prepare_request_memcpy(struct dma_controller *dmac, ++ struct dma_request_memcpy *req) ++{ ++ return dmac->prepare_request_memcpy(dmac, req); ++} ++ ++static inline int ++dma_start_request(struct dma_controller *dmac, ++ unsigned int channel) ++{ ++ return dmac->start_request(dmac, channel); ++} ++ ++static inline int ++dma_stop_request(struct dma_controller *dmac, ++ unsigned int channel) ++{ ++ return dmac->stop_request(dmac, channel); ++} ++ ++static inline dma_addr_t ++dma_get_current_pos(struct dma_controller *dmac, ++ unsigned int channel) ++{ ++ return dmac->get_current_pos(dmac, channel); ++} ++ ++extern int register_dma_controller(struct dma_controller *dmac); ++extern struct dma_controller *find_dma_controller(int id); ++ ++#endif /* __ASM_AVR32_DMA_CONTROLLER_H */ +-- +1.4.1.1 + diff --git a/packages/linux/linux-2.6.18/avr32-dont-include-asm-delay-h.patch b/packages/linux/linux-2.6.18/avr32-dont-include-asm-delay-h.patch new file mode 100644 index 0000000000..b9c5f4d8cf --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-dont-include-asm-delay-h.patch @@ -0,0 +1,47 @@ +From 53678aca529d43e8fd0443c0c5f7f0807d5fd850 Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Wed, 10 Jan 2007 19:18:06 +0100 +Subject: [PATCH] [AVR32] Don't include asm/delay.h + +Remove a couple of asm/delay.h inclusions and replace with +linux/delay.h where necessary. + +Signed-off-by: Haavard Skinnemoen +--- + arch/avr32/kernel/avr32_ksyms.c | 2 +- + arch/avr32/lib/delay.c | 1 - + 2 files changed, 1 insertions(+), 2 deletions(-) + +diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c +index 372e3f8..7c4c761 100644 +--- a/arch/avr32/kernel/avr32_ksyms.c ++++ b/arch/avr32/kernel/avr32_ksyms.c +@@ -7,12 +7,12 @@ + * 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 + + /* + * GCC functions +diff --git a/arch/avr32/lib/delay.c b/arch/avr32/lib/delay.c +index 462c830..76a8474 100644 +--- a/arch/avr32/lib/delay.c ++++ b/arch/avr32/lib/delay.c +@@ -14,7 +14,6 @@ + #include + #include + +-#include + #include + #include + +-- +1.4.4.1 + diff --git a/packages/linux/linux-2.6.18/avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch b/packages/linux/linux-2.6.18/avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch new file mode 100644 index 0000000000..eea690268c --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch @@ -0,0 +1,27 @@ +Hack for incompatible __GFP_COMP flag making its way into the AVR32 +DMA consistent memory allocator. + +This is essentially the same patch as the one submitted by +Marc Singer for ARM. +--- + arch/avr32/mm/dma-coherent.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +Index: linux-2.6.18-avr32/arch/avr32/mm/dma-coherent.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mm/dma-coherent.c 2006-09-11 18:06:00.000000000 +0200 ++++ linux-2.6.18-avr32/arch/avr32/mm/dma-coherent.c 2006-09-12 13:38:39.000000000 +0200 +@@ -41,6 +41,13 @@ static struct page *__dma_alloc(struct d + struct page *page, *free, *end; + int order; + ++ /* Following is a work-around (a.k.a. hack) to prevent pages ++ * with __GFP_COMP being passed to split_page() which cannot ++ * handle them. The real problem is that this flag probably ++ * should be 0 on AVR32 as it is not supported on this ++ * platform--see CONFIG_HUGETLB_PAGE. */ ++ gfp &= ~(__GFP_COMP); ++ + size = PAGE_ALIGN(size); + order = get_order(size); + diff --git a/packages/linux/linux-2.6.18/avr32-fix-oprofile-interrupts.patch b/packages/linux/linux-2.6.18/avr32-fix-oprofile-interrupts.patch new file mode 100644 index 0000000000..93f571d206 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-fix-oprofile-interrupts.patch @@ -0,0 +1,109 @@ +--- linux-2.6.18.orig/arch/avr32/oprofile/op_model_avr32.c 2006-11-06 14:36:51.000000000 +0100 ++++ linux-2.6.18/arch/avr32/oprofile/op_model_avr32.c 2006-11-07 10:05:46.000000000 +0100 +@@ -7,7 +7,7 @@ + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * +- * Author: Ronny Pedersen ++ * Authors: Sondre Garsjoe, Ronny Pedersen + */ + + #define DEBUG +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -49,7 +50,7 @@ + #define PCNT0_F (1 << 9) + #define PCNT1_F (1 << 10) + +-#define AVR32_PC_IRQ 1 ++#define AVR32_PC_IRQ 0 + + static const u32 int_mask[MAX_COUNTERS] = { PCCNT_IE, PCNT0_IE, PCNT1_IE }; + static const u32 ovf_mask[MAX_COUNTERS] = { PCCNT_F, PCNT0_F, PCNT1_F }; +@@ -58,38 +59,37 @@ + + static void write_pccr(u32 val) + { +- __builtin_mtsr(SYSREG_PCCR, val); ++ sysreg_write(PCCR, val); + } + + static u32 read_pccr(void) + { +- return __builtin_mfsr(SYSREG_PCCR); ++ return sysreg_read(PCCR); + } + + static u32 read_counter(int counter) + { + switch (counter) { + case PCCNT: +- return __builtin_mfsr(SYSREG_PCCNT); ++ return sysreg_read(PCCNT); + case PCNT0: +- return __builtin_mfsr(SYSREG_PCNT0); ++ return sysreg_read(PCNT0); + case PCNT1: +- return __builtin_mfsr(SYSREG_PCNT0); ++ return sysreg_read(PCNT1); + default: + return 0; + } + } + +- + static void write_counter(int counter, u32 val) + { + switch (counter) { + case PCCNT: +- __builtin_mtsr(SYSREG_PCCNT, val); ++ sysreg_write(PCCNT, val); + case PCNT0: +- __builtin_mtsr(SYSREG_PCNT0, val); ++ sysreg_write(PCNT0, val); + case PCNT1: +- __builtin_mtsr(SYSREG_PCNT0, val); ++ sysreg_write(PCNT1, val); + default: + break; + } +@@ -144,12 +144,15 @@ + } + } + +- + static irqreturn_t avr32_pc_interrupt(int irq, void *arg, + struct pt_regs *regs) + { + int i; + ++ /* Check if this is a performance counter interrupt */ ++ if (!(intc_get_pending(irq) & 2)) ++ return IRQ_NONE; ++ + check_ctrs(); + + for (i = PCCNT; i < MAX_COUNTERS; i++) { +@@ -179,7 +182,7 @@ + int i, ret; + u32 pccr = read_pccr(); + +- ret = request_irq(AVR32_PC_IRQ, avr32_pc_interrupt, SA_INTERRUPT, ++ ret = request_irq(AVR32_PC_IRQ, avr32_pc_interrupt, IRQF_SHARED | IRQF_DISABLED, + "AVR32 Performance Counter", (void *)results); + + if (ret < 0) { +@@ -214,6 +217,6 @@ + .start = avr32_pc_start, + .stop = avr32_pc_stop, + .num_counters = MAX_COUNTERS, +- .name = "avr32", ++ .name = "avr32/at32ap7000", + }; + diff --git a/packages/linux/linux-2.6.18/avr32-gpio-dev.patch b/packages/linux/linux-2.6.18/avr32-gpio-dev.patch new file mode 100644 index 0000000000..43971cf4e6 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-gpio-dev.patch @@ -0,0 +1,548 @@ +--- + arch/avr32/mach-at32ap/Kconfig | 8 + arch/avr32/mach-at32ap/pio.c | 499 ++++++++++++++++++++++++++++++++++++++++- + 2 files changed, 506 insertions(+), 1 deletion(-) + +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 16:22:14.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-29 16:29:20.000000000 +0100 +@@ -22,7 +22,7 @@ + + struct pio_device { + void __iomem *regs; +- const struct platform_device *pdev; ++ struct platform_device *pdev; + struct clk *clk; + u32 pinmux_mask; + u32 gpio_mask; +@@ -119,6 +119,34 @@ fail: + dump_stack(); + } + ++static unsigned int pio_id(struct pio_device *pio) ++{ ++ return pio - pio_dev; ++} ++ ++static void __enable_gpio(struct pio_device *pio, u32 mask) ++{ ++ pio_writel(pio, PUER, mask); ++ pio_writel(pio, ODR, mask); ++ pio_writel(pio, PER, mask); ++} ++ ++static void __disable_gpio(struct pio_device *pio, u32 mask) ++{ ++ pio_writel(pio, PUER, mask); ++ pio_writel(pio, ODR, mask); ++} ++ ++static void pio_dealloc_mask(struct pio_device *pio, u32 mask) ++{ ++ u32 old, new; ++ ++ do { ++ old = pio->pinmux_mask; ++ new = old & ~mask; ++ } while (cmpxchg(&pio->pinmux_mask, old, new) != old); ++} ++ + /* GPIO API */ + + int gpio_request(unsigned int gpio, const char *label) +@@ -210,6 +238,475 @@ void gpio_set_value(unsigned int gpio, i + } + EXPORT_SYMBOL(gpio_set_value); + ++#ifdef CONFIG_PIO_DEV ++#include ++#include ++#include ++ ++#define GPIO_DEV_MAX 8 ++ ++static struct class *gpio_dev_class; ++static dev_t gpio_devt; ++ ++struct gpio_item { ++ spinlock_t lock; ++ ++ /* Too bad we don't have committable items... */ ++ int enabled; ++ ++ struct pio_device *pio; ++ u32 pin_mask; ++ ++ int id; ++ struct class_device *gpio_dev; ++ struct cdev char_dev; ++ struct config_item item; ++}; ++ ++struct gpio_attribute { ++ struct configfs_attribute attr; ++ ssize_t (*show)(struct gpio_item *, char *); ++ ssize_t (*store)(struct gpio_item *, const char *, size_t); ++}; ++ ++static int gpio_dev_open(struct inode *inode, struct file *file) ++{ ++ struct gpio_item *gpio = container_of(inode->i_cdev, ++ struct gpio_item, ++ char_dev); ++ ++ config_item_get(&gpio->item); ++ file->private_data = gpio; ++ return 0; ++} ++ ++static int gpio_dev_release(struct inode *inode, struct file *file) ++{ ++ struct gpio_item *gpio = file->private_data; ++ ++ config_item_put(&gpio->item); ++ return 0; ++} ++ ++static ssize_t gpio_dev_read(struct file *file, char __user *buf, ++ size_t count, loff_t *offset) ++{ ++ struct gpio_item *gpio = file->private_data; ++ u32 value; ++ ++ value = pio_readl(gpio->pio, PDSR) & gpio->pin_mask; ++ ++ count = min(count, (size_t)4); ++ if (copy_to_user(buf, &value, count)) ++ return -EFAULT; ++ return count; ++} ++ ++static ssize_t gpio_dev_write(struct file *file, const char __user *buf, ++ size_t count, loff_t *offset) ++{ ++ struct gpio_item *gpio = file->private_data; ++ u32 value = 0; ++ u32 mask = ~0UL; ++ ++ count = min(count, (size_t)4); ++ if (copy_from_user(&value, buf, count)) ++ return -EFAULT; ++ ++ /* Assuming big endian */ ++ mask <<= (4 - count) * 8; ++ mask &= gpio->pin_mask; ++ ++ pio_writel(gpio->pio, CODR, ~value & mask); ++ pio_writel(gpio->pio, SODR, value & mask); ++ ++ return count; ++} ++ ++static struct file_operations gpio_dev_fops = { ++ .owner = THIS_MODULE, ++ .llseek = no_llseek, ++ .open = gpio_dev_open, ++ .release = gpio_dev_release, ++ .read = gpio_dev_read, ++ .write = gpio_dev_write, ++}; ++ ++static struct gpio_item *to_gpio_item(struct config_item *item) ++{ ++ return item ? container_of(item, struct gpio_item, item) : NULL; ++} ++ ++static ssize_t gpio_show_gpio_id(struct gpio_item *gpio, char *page) ++{ ++ if (gpio->pio) ++ return sprintf(page, "%u\n", pio_id(gpio->pio)); ++ else ++ return sprintf(page, "-1\n"); ++} ++ ++static ssize_t gpio_store_gpio_id(struct gpio_item *gpio, ++ const char *page, size_t count) ++{ ++ unsigned long id; ++ char *p = (char *)page; ++ ssize_t ret = -EINVAL; ++ ++ id = simple_strtoul(p, &p, 0); ++ if (!p || (*p && (*p != '\n'))) ++ return -EINVAL; ++ ++ /* Switching PIO is not allowed when live... */ ++ spin_lock(&gpio->lock); ++ if (!gpio->enabled) { ++ ret = -ENXIO; ++ if ((id < MAX_NR_PIO_DEVICES) && pio_dev[id].regs) { ++ gpio->pio = &pio_dev[id]; ++ ret = count; ++ } ++ } ++ spin_unlock(&gpio->lock); ++ ++ return ret; ++} ++ ++static ssize_t gpio_show_pin_mask(struct gpio_item *gpio, char *page) ++{ ++ return sprintf(page, "0x%08x\n", gpio->pin_mask); ++} ++ ++static ssize_t gpio_store_pin_mask(struct gpio_item *gpio, ++ const char *page, size_t count) ++{ ++ struct pio_device *pio; ++ u32 old_mask, new_mask; ++ u32 old, new; ++ char *p = (char *)page; ++ ssize_t ret = -EINVAL; ++ ++ new_mask = simple_strtoul(p, &p, 0); ++ if (!p || (*p && (*p != '\n'))) ++ return -EINVAL; ++ ++ /* ++ * Must have a PIO before we can start allocating pins, but we ++ * must not be live. ++ */ ++ spin_lock(&gpio->lock); ++ pio = gpio->pio; ++ if (!pio || gpio->enabled) ++ goto out; ++ ++ ret = -EBUSY; ++ old_mask = gpio->pin_mask; ++ do { ++ old = pio->pinmux_mask; ++ if ((old & ~old_mask) & new_mask) ++ goto out; ++ ++ new = (old & ~old_mask) | new_mask; ++ } while (cmpxchg(&pio->pinmux_mask, old, new) != old); ++ ++ gpio->pin_mask = new_mask; ++ __disable_gpio(pio, old_mask); ++ __enable_gpio(pio, new_mask); ++ ret = count; ++ ++out: ++ spin_unlock(&gpio->lock); ++ return ret; ++} ++ ++static ssize_t gpio_show_oe_mask(struct gpio_item *gpio, char *page) ++{ ++ u32 mask = 0; ++ ++ spin_lock(&gpio->lock); ++ if (gpio->pio) { ++ mask = pio_readl(gpio->pio, OSR); ++ mask &= gpio->pin_mask; ++ } ++ spin_unlock(&gpio->lock); ++ ++ return sprintf(page, "0x%08x\n", mask); ++} ++ ++static ssize_t gpio_store_oe_mask(struct gpio_item *gpio, ++ const char *page, size_t count) ++{ ++ u32 mask; ++ char *p = (char *)page; ++ ssize_t ret = -EINVAL; ++ ++ mask = simple_strtoul(p, &p, 0); ++ if (!p || (*p && (*p != '\n'))) ++ return -EINVAL; ++ ++ spin_lock(&gpio->lock); ++ if (gpio->pio) { ++ mask &= gpio->pin_mask; ++ pio_writel(gpio->pio, ODR, mask ^ gpio->pin_mask); ++ pio_writel(gpio->pio, OER, mask); ++ ret = count; ++ } ++ spin_unlock(&gpio->lock); ++ ++ return ret; ++} ++ ++static ssize_t gpio_show_enabled(struct gpio_item *gpio, char *page) ++{ ++ return sprintf(page, "%d\n", gpio->enabled); ++} ++ ++static ssize_t gpio_store_enabled(struct gpio_item *gpio, ++ const char *page, size_t count) ++{ ++ char *p = (char *)page; ++ int enabled; ++ int ret; ++ ++ enabled = simple_strtoul(p, &p, 0); ++ if (!p || (*p && (*p != '\n'))) ++ return -EINVAL; ++ ++ /* make it a boolean value */ ++ enabled = !!enabled; ++ ++ if (gpio->enabled == enabled) ++ /* Already enabled; do nothing. */ ++ return count; ++ ++ BUG_ON(gpio->id >= GPIO_DEV_MAX); ++ ++ if (!enabled) { ++ class_device_unregister(gpio->gpio_dev); ++ cdev_del(&gpio->char_dev); ++ } ++ ++ /* Disallow any updates to gpio_id or pin_mask */ ++ spin_lock(&gpio->lock); ++ gpio->enabled = enabled; ++ spin_unlock(&gpio->lock); ++ ++ if (!enabled) ++ return count; ++ ++ cdev_init(&gpio->char_dev, &gpio_dev_fops); ++ gpio->char_dev.owner = THIS_MODULE; ++ ret = cdev_add(&gpio->char_dev, MKDEV(MAJOR(gpio_devt), gpio->id), 1); ++ if (ret < 0) ++ goto err_cdev_add; ++ gpio->gpio_dev = class_device_create(gpio_dev_class, NULL, ++ MKDEV(MAJOR(gpio_devt), gpio->id), ++ &gpio->pio->pdev->dev, ++ "gpio%d", gpio->id); ++ if (IS_ERR(gpio->gpio_dev)) { ++ printk(KERN_ERR "failed to create gpio%d\n", gpio->id); ++ ret = PTR_ERR(gpio->gpio_dev); ++ goto err_class_dev; ++ } ++ ++ printk(KERN_INFO "created gpio%d (pio%d/0x%08x) as (%d:%d)\n", ++ gpio->id, pio_id(gpio->pio), gpio->pin_mask, ++ MAJOR(gpio->gpio_dev->devt), MINOR(gpio->gpio_dev->devt)); ++ ++ return 0; ++ ++err_class_dev: ++ cdev_del(&gpio->char_dev); ++err_cdev_add: ++ spin_lock(&gpio->lock); ++ gpio->enabled = 0; ++ spin_unlock(&gpio->lock); ++ ++ return ret; ++} ++ ++static struct gpio_attribute gpio_item_attr_gpio_id = { ++ .attr = { ++ .ca_owner = THIS_MODULE, ++ .ca_name = "gpio_id", ++ .ca_mode = S_IRUGO | S_IWUSR, ++ }, ++ .show = gpio_show_gpio_id, ++ .store = gpio_store_gpio_id, ++}; ++static struct gpio_attribute gpio_item_attr_pin_mask = { ++ .attr = { ++ .ca_owner = THIS_MODULE, ++ .ca_name = "pin_mask", ++ .ca_mode = S_IRUGO | S_IWUSR, ++ }, ++ .show = gpio_show_pin_mask, ++ .store = gpio_store_pin_mask, ++}; ++static struct gpio_attribute gpio_item_attr_oe_mask = { ++ .attr = { ++ .ca_owner = THIS_MODULE, ++ .ca_name = "oe_mask", ++ .ca_mode = S_IRUGO | S_IWUSR, ++ }, ++ .show = gpio_show_oe_mask, ++ .store = gpio_store_oe_mask, ++}; ++static struct gpio_attribute gpio_item_attr_enabled = { ++ .attr = { ++ .ca_owner = THIS_MODULE, ++ .ca_name = "enabled", ++ .ca_mode = S_IRUGO | S_IWUSR, ++ }, ++ .show = gpio_show_enabled, ++ .store = gpio_store_enabled, ++}; ++ ++static struct configfs_attribute *gpio_item_attrs[] = { ++ &gpio_item_attr_gpio_id.attr, ++ &gpio_item_attr_pin_mask.attr, ++ &gpio_item_attr_oe_mask.attr, ++ &gpio_item_attr_enabled.attr, ++ NULL, ++}; ++ ++static ssize_t gpio_show_attr(struct config_item *item, ++ struct configfs_attribute *attr, ++ char *page) ++{ ++ struct gpio_item *gpio_item = to_gpio_item(item); ++ struct gpio_attribute *gpio_attr ++ = container_of(attr, struct gpio_attribute, attr); ++ ssize_t ret = 0; ++ ++ if (gpio_attr->show) ++ ret = gpio_attr->show(gpio_item, page); ++ return ret; ++} ++ ++static ssize_t gpio_store_attr(struct config_item *item, ++ struct configfs_attribute *attr, ++ const char *page, size_t count) ++{ ++ struct gpio_item *gpio_item = to_gpio_item(item); ++ struct gpio_attribute *gpio_attr ++ = container_of(attr, struct gpio_attribute, attr); ++ ssize_t ret = -EINVAL; ++ ++ if (gpio_attr->store) ++ ret = gpio_attr->store(gpio_item, page, count); ++ return ret; ++} ++ ++static void gpio_release(struct config_item *item) ++{ ++ kfree(to_gpio_item(item)); ++} ++ ++static struct configfs_item_operations gpio_item_ops = { ++ .release = gpio_release, ++ .show_attribute = gpio_show_attr, ++ .store_attribute = gpio_store_attr, ++}; ++ ++static struct config_item_type gpio_item_type = { ++ .ct_item_ops = &gpio_item_ops, ++ .ct_attrs = gpio_item_attrs, ++ .ct_owner = THIS_MODULE, ++}; ++ ++static struct config_item *gpio_make_item(struct config_group *group, ++ const char *name) ++{ ++ static int next_id; ++ struct gpio_item *gpio; ++ ++ if (next_id >= GPIO_DEV_MAX) ++ return NULL; ++ ++ gpio = kzalloc(sizeof(struct gpio_item), GFP_KERNEL); ++ if (!gpio) ++ return NULL; ++ ++ gpio->id = next_id++; ++ config_item_init_type_name(&gpio->item, name, &gpio_item_type); ++ spin_lock_init(&gpio->lock); ++ ++ return &gpio->item; ++} ++ ++static void gpio_drop_item(struct config_group *group, ++ struct config_item *item) ++{ ++ struct gpio_item *gpio = to_gpio_item(item); ++ struct pio_device *pio; ++ ++ spin_lock(&gpio->lock); ++ if (gpio->enabled) { ++ class_device_unregister(gpio->gpio_dev); ++ cdev_del(&gpio->char_dev); ++ } ++ ++ pio = gpio->pio; ++ if (pio) { ++ __disable_gpio(pio, gpio->pin_mask); ++ pio_dealloc_mask(pio, gpio->pin_mask); ++ gpio->pio = NULL; ++ } ++ spin_unlock(&gpio->lock); ++} ++ ++static struct configfs_group_operations gpio_group_ops = { ++ .make_item = gpio_make_item, ++ .drop_item = gpio_drop_item, ++}; ++ ++static struct config_item_type gpio_group_type = { ++ .ct_group_ops = &gpio_group_ops, ++ .ct_owner = THIS_MODULE, ++}; ++ ++static struct configfs_subsystem gpio_subsys = { ++ .su_group = { ++ .cg_item = { ++ .ci_namebuf = "gpio", ++ .ci_type = &gpio_group_type, ++ }, ++ }, ++}; ++ ++static int __init pio_init_dev(void) ++{ ++ int err; ++ ++ gpio_dev_class = class_create(THIS_MODULE, "gpio-dev"); ++ if (IS_ERR(gpio_dev_class)) { ++ err = PTR_ERR(gpio_dev_class); ++ goto err_class_create; ++ } ++ ++ err = alloc_chrdev_region(&gpio_devt, 0, GPIO_DEV_MAX, "gpio"); ++ if (err < 0) ++ goto err_alloc_chrdev; ++ ++ /* Configfs initialization */ ++ config_group_init(&gpio_subsys.su_group); ++ init_MUTEX(&gpio_subsys.su_sem); ++ err = configfs_register_subsystem(&gpio_subsys); ++ if (err) ++ goto err_register_subsys; ++ ++ return 0; ++ ++err_register_subsys: ++ unregister_chrdev_region(gpio_devt, GPIO_DEV_MAX); ++err_alloc_chrdev: ++ class_destroy(gpio_dev_class); ++err_class_create: ++ printk(KERN_WARNING "Failed to initialize gpio /dev interface\n"); ++ return err; ++} ++late_initcall(pio_init_dev); ++#endif /* CONFIG_PIO_DEV */ ++ + static int __init pio_probe(struct platform_device *pdev) + { + struct pio_device *pio = NULL; +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/Kconfig 2006-11-29 16:23:31.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/Kconfig 2006-11-29 16:24:35.000000000 +0100 +@@ -2,6 +2,14 @@ if PLATFORM_AT32AP + + menu "Atmel AVR32 AP options" + ++config PIO_DEV ++ bool "PIO /dev interface" ++ select CONFIGFS_FS ++ default y ++ help ++ Say `Y' to enable a /dev interface to the Parallel I/O ++ Controller. ++ + endmenu + + endif diff --git a/packages/linux/linux-2.6.18/avr32-increment-pointer-when-parsing-for-fbmem_start.patch b/packages/linux/linux-2.6.18/avr32-increment-pointer-when-parsing-for-fbmem_start.patch new file mode 100644 index 0000000000..e755b47442 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-increment-pointer-when-parsing-for-fbmem_start.patch @@ -0,0 +1,16 @@ +Index: linux-2.6.18/arch/avr32/kernel/setup.c +=================================================================== +--- linux-2.6.18.orig/arch/avr32/kernel/setup.c 2006-12-20 12:45:12.000000000 +0100 ++++ linux-2.6.18/arch/avr32/kernel/setup.c 2006-12-20 12:45:24.000000000 +0100 +@@ -103,8 +103,10 @@ + static int __init early_parse_fbmem(char *p) + { + fbmem_size = memparse(p, &p); +- if (*p == '@') ++ if (*p == '@') { ++ p++; + fbmem_start = memparse(p, &p); ++ } + return 0; + } + early_param("fbmem", early_parse_fbmem); diff --git a/packages/linux/linux-2.6.18/avr32-little-endian-read-write-bwl.patch b/packages/linux/linux-2.6.18/avr32-little-endian-read-write-bwl.patch new file mode 100644 index 0000000000..5e9b75219a --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-little-endian-read-write-bwl.patch @@ -0,0 +1,128 @@ +--- + include/asm-avr32/io.h | 73 ++++++++++++++++++++++++++++++++----------------- + 1 file changed, 49 insertions(+), 24 deletions(-) + +Index: linux-2.6.18-avr32/include/asm-avr32/io.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/io.h 2006-11-02 16:40:37.000000000 +0100 ++++ linux-2.6.18-avr32/include/asm-avr32/io.h 2006-11-03 17:58:06.000000000 +0100 +@@ -5,6 +5,8 @@ + + #ifdef __KERNEL__ + ++#include ++ + #include + #include + +@@ -36,37 +38,64 @@ extern void __raw_readsb(unsigned int ad + extern void __raw_readsw(unsigned int addr, void *data, int wordlen); + extern void __raw_readsl(unsigned int addr, void *data, int longlen); + +-static inline void writeb(unsigned char b, volatile void __iomem *addr) ++static inline void __raw_writeb(u8 v, volatile void __iomem *addr) ++{ ++ *(volatile u8 __force *)addr = v; ++} ++static inline void __raw_writew(u16 v, volatile void __iomem *addr) ++{ ++ *(volatile u16 __force *)addr = v; ++} ++static inline void __raw_writel(u32 v, volatile void __iomem *addr) ++{ ++ *(volatile u32 __force *)addr = v; ++} ++ ++static inline u8 __raw_readb(const volatile void __iomem *addr) + { +- *(volatile unsigned char __force *)addr = b; ++ return *(const volatile u8 __force *)addr; + } +-static inline void writew(unsigned short b, volatile void __iomem *addr) ++static inline u16 __raw_readw(const volatile void __iomem *addr) + { +- *(volatile unsigned short __force *)addr = b; ++ return *(const volatile u16 __force *)addr; + } +-static inline void writel(unsigned int b, volatile void __iomem *addr) ++static inline u32 __raw_readl(const volatile void __iomem *addr) + { +- *(volatile unsigned int __force *)addr = b; ++ return *(const volatile u32 __force *)addr; + } +-#define __raw_writeb writeb +-#define __raw_writew writew +-#define __raw_writel writel + +-static inline unsigned char readb(const volatile void __iomem *addr) ++#define __swizzle_addr_b(addr) \ ++ ((typeof(addr))((unsigned long)(addr) ^ 3UL)) ++#define __swizzle_addr_w(addr) \ ++ ((typeof(addr))((unsigned long)(addr) ^ 2UL)) ++#define __swizzle_addr_l(addr) \ ++ (addr) ++ ++static inline void writeb(u8 v, volatile void __iomem *addr) + { +- return *(const volatile unsigned char __force *)addr; ++ __raw_writeb(v, __swizzle_addr_b(addr)); + } +-static inline unsigned short readw(const volatile void __iomem *addr) ++static inline void writew(u16 v, volatile void __iomem *addr) + { +- return *(const volatile unsigned short __force *)addr; ++ __raw_writew(v, __swizzle_addr_w(addr)); + } +-static inline unsigned int readl(const volatile void __iomem *addr) ++static inline void writel(u32 v, volatile void __iomem *addr) + { +- return *(const volatile unsigned int __force *)addr; ++ __raw_writel(v, __swizzle_addr_l(addr)); ++} ++ ++static inline u8 readb(const volatile void __iomem *addr) ++{ ++ return __raw_readb(__swizzle_addr_b(addr)); ++} ++static inline u16 readw(const volatile void __iomem *addr) ++{ ++ return __raw_readw(__swizzle_addr_w(addr)); ++} ++static inline u32 readl(const volatile void __iomem *addr) ++{ ++ return __raw_readl(__swizzle_addr_l(addr)); + } +-#define __raw_readb readb +-#define __raw_readw readw +-#define __raw_readl readl + + #define writesb(p, d, l) __raw_writesb((unsigned int)p, d, l) + #define writesw(p, d, l) __raw_writesw((unsigned int)p, d, l) +@@ -108,17 +137,13 @@ static inline unsigned int readl(const v + + #endif + +- +-/* +- * These two are only here because ALSA _thinks_ it needs them... +- */ + static inline void memcpy_fromio(void * to, const volatile void __iomem *from, + unsigned long count) + { + char *p = to; + while (count) { + count--; +- *p = readb(from); ++ *p = __raw_readb(from); + p++; + from++; + } +@@ -130,7 +155,7 @@ static inline void memcpy_toio(volatile + const char *p = from; + while (count) { + count--; +- writeb(*p, to); ++ __raw_writeb(*p, to); + p++; + to++; + } diff --git a/packages/linux/linux-2.6.18/avr32-move-ethernet-tag-parsing-to-board-specific-code.patch b/packages/linux/linux-2.6.18/avr32-move-ethernet-tag-parsing-to-board-specific-code.patch new file mode 100644 index 0000000000..03e08785f0 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-move-ethernet-tag-parsing-to-board-specific-code.patch @@ -0,0 +1,94 @@ +From 736c9c38e8a681d0ecfc4dafe15fcb955fe66a29 Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Tue, 24 Oct 2006 09:34:48 +0200 +Subject: [PATCH] AVR32: Move ethernet tag parsing to board-specific code + +By moving the ethernet tag parsing to the board-specific code we avoid +the issue of figuring out which device we're supposed to attach the +information to. The board specific code knows this because it's +where the actual devices are instantiated. + +Signed-off-by: Haavard Skinnemoen +--- + arch/avr32/boards/atstk1000/atstk1002.c | 26 ++++++++++++++++++++------ + arch/avr32/kernel/setup.c | 24 ------------------------ + 2 files changed, 20 insertions(+), 30 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/atstk1002.c 2006-11-01 13:26:19.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c 2006-11-01 13:33:38.000000000 +0100 +@@ -8,18 +8,32 @@ + * published by the Free Software Foundation. + */ + #include ++#include ++#include ++#include + ++#include + #include + +-struct eth_platform_data __initdata eth0_data = { +- .valid = 1, +- .mii_phy_addr = 0x10, +- .is_rmii = 0, +- .hw_addr = { 0x6a, 0x87, 0x71, 0x14, 0xcd, 0xcb }, +-}; ++static struct eth_platform_data __initdata eth_data[2]; + + extern struct lcdc_platform_data atstk1000_fb0_data; + ++static int __init parse_tag_ethernet(struct tag *tag) ++{ ++ int i; ++ ++ i = tag->u.ethernet.mac_index; ++ if (i < ARRAY_SIZE(eth_data)) { ++ eth_data[i].mii_phy_addr = tag->u.ethernet.mii_phy_addr; ++ memcpy(ð_data[i].hw_addr, tag->u.ethernet.hw_address, ++ sizeof(eth_data[i].hw_addr)); ++ eth_data[i].valid = 1; ++ } ++ return 0; ++} ++__tagtable(ATAG_ETHERNET, parse_tag_ethernet); ++ + static int __init atstk1002_init(void) + { + at32_add_system_devices(); +Index: linux-2.6.18-avr32/arch/avr32/kernel/setup.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/kernel/setup.c 2006-11-01 13:26:19.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/kernel/setup.c 2006-11-01 13:31:32.000000000 +0100 +@@ -229,30 +229,6 @@ static int __init parse_tag_rsvd_mem(str + } + __tagtable(ATAG_RSVD_MEM, parse_tag_rsvd_mem); + +-static int __init parse_tag_ethernet(struct tag *tag) +-{ +-#if 0 +- const struct platform_device *pdev; +- +- /* +- * We really need a bus type that supports "classes"...this +- * will do for now (until we must handle other kinds of +- * ethernet controllers) +- */ +- pdev = platform_get_device("macb", tag->u.ethernet.mac_index); +- if (pdev && pdev->dev.platform_data) { +- struct eth_platform_data *data = pdev->dev.platform_data; +- +- data->valid = 1; +- data->mii_phy_addr = tag->u.ethernet.mii_phy_addr; +- memcpy(data->hw_addr, tag->u.ethernet.hw_address, +- sizeof(data->hw_addr)); +- } +-#endif +- return 0; +-} +-__tagtable(ATAG_ETHERNET, parse_tag_ethernet); +- + /* + * Scan the tag table for this tag, and call its parse function. The + * tag table is built by the linker from all the __tagtable diff --git a/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch b/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch new file mode 100644 index 0000000000..420e859bd4 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch @@ -0,0 +1,233 @@ +From 16655aecb1a151c1f1707c64a571cd06e6a194af Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Mon, 30 Oct 2006 09:35:44 +0100 +Subject: [PATCH] Add support for the AVR32 Network Gateway +--- + arch/avr32/Kconfig | 3 + + arch/avr32/Makefile | 1 + arch/avr32/boards/atngw/Makefile | 1 + arch/avr32/boards/atngw/flash.c | 95 +++++++++++++++++++++++++++++++++++++++ + arch/avr32/boards/atngw/setup.c | 81 +++++++++++++++++++++++++++++++++ + 5 files changed, 181 insertions(+) + +Index: linux-2.6.18/arch/avr32/Kconfig +=================================================================== +--- linux-2.6.18.orig/arch/avr32/Kconfig 2006-12-13 09:45:34.000000000 +0100 ++++ linux-2.6.18/arch/avr32/Kconfig 2006-12-13 09:45:34.000000000 +0100 +@@ -97,6 +97,9 @@ + config BOARD_ATSTK1000 + bool "ATSTK1000 evaluation board" + select BOARD_ATSTK1002 if CPU_AT32AP7000 ++ ++config BOARD_ATNGW ++ bool "AVR32 Network Gateway" + endchoice + + choice +Index: linux-2.6.18/arch/avr32/Makefile +=================================================================== +--- linux-2.6.18.orig/arch/avr32/Makefile 2006-12-13 09:45:34.000000000 +0100 ++++ linux-2.6.18/arch/avr32/Makefile 2006-12-13 09:45:34.000000000 +0100 +@@ -27,6 +27,7 @@ + head-y += arch/avr32/kernel/head.o + core-$(CONFIG_PLATFORM_AT32AP) += arch/avr32/mach-at32ap/ + core-$(CONFIG_BOARD_ATSTK1000) += arch/avr32/boards/atstk1000/ ++core-$(CONFIG_BOARD_ATNGW) += arch/avr32/boards/atngw/ + core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ + core-y += arch/avr32/kernel/ + core-y += arch/avr32/mm/ +Index: linux-2.6.18/arch/avr32/boards/atngw/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18/arch/avr32/boards/atngw/Makefile 2006-12-13 09:45:34.000000000 +0100 +@@ -0,0 +1 @@ ++obj-y += setup.o flash.o +Index: linux-2.6.18/arch/avr32/boards/atngw/flash.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18/arch/avr32/boards/atngw/flash.c 2006-12-13 09:45:34.000000000 +0100 +@@ -0,0 +1,95 @@ ++/* ++ * ATNGW board-specific flash initialization ++ * ++ * Copyright (C) 2005-2006 Atmel 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 ++ ++static struct smc_config flash_config __initdata = { ++ .ncs_read_setup = 0, ++ .nrd_setup = 40, ++ .ncs_write_setup = 0, ++ .nwe_setup = 10, ++ ++ .ncs_read_pulse = 80, ++ .nrd_pulse = 40, ++ .ncs_write_pulse = 65, ++ .nwe_pulse = 55, ++ ++ .read_cycle = 120, ++ .write_cycle = 120, ++ ++ .bus_width = 2, ++ .nrd_controlled = 1, ++ .nwe_controlled = 1, ++ .byte_write = 1, ++}; ++ ++static struct mtd_partition flash_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0x00000000, ++ .size = 0x00020000, /* 128 KiB */ ++ .mask_flags = MTD_WRITEABLE, ++ }, ++ { ++ .name = "root", ++ .offset = 0x00020000, ++ .size = 0x007d0000, ++ }, ++ { ++ .name = "env", ++ .offset = 0x007f0000, ++ .size = 0x00010000, ++ .mask_flags = MTD_WRITEABLE, ++ }, ++}; ++ ++static struct physmap_flash_data flash_data = { ++ .width = 2, ++ .nr_parts = ARRAY_SIZE(flash_parts), ++ .parts = flash_parts, ++}; ++ ++static struct resource flash_resource = { ++ .start = 0x00000000, ++ .end = 0x007fffff, ++ .flags = IORESOURCE_MEM, ++}; ++ ++static struct platform_device flash_device = { ++ .name = "physmap-flash", ++ .id = 0, ++ .resource = &flash_resource, ++ .num_resources = 1, ++ .dev = { ++ .platform_data = &flash_data, ++ }, ++}; ++ ++/* This needs to be called after the SMC has been initialized */ ++static int __init atngw_flash_init(void) ++{ ++ int ret; ++ ++ ret = smc_set_configuration(0, &flash_config); ++ if (ret < 0) { ++ printk(KERN_ERR "atngw: failed to set NOR flash timing\n"); ++ return ret; ++ } ++ ++ platform_device_register(&flash_device); ++ ++ return 0; ++} ++device_initcall(atngw_flash_init); +Index: linux-2.6.18/arch/avr32/boards/atngw/setup.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18/arch/avr32/boards/atngw/setup.c 2006-12-13 09:59:44.000000000 +0100 +@@ -0,0 +1,84 @@ ++/* ++ * Board-specific setup code for the Atmel Network Gateway ++ * ++ * Copyright (C) 2005-2006 Atmel 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 ++ ++/* Initialized by bootloader-specific startup code. */ ++struct tag *bootloader_tags __initdata; ++ ++static struct eth_platform_data __initdata eth_data[2]; ++ ++static struct spi_board_info spi_board_info[] __initdata = { ++ { ++ .modalias = "mtd_dataflash", ++ .controller_data = (void *)GPIO_PIN_PA(3), ++ .max_speed_hz = 66000000, ++ .bus_num = 0, ++ .chip_select = 0, ++ }, ++}; ++ ++static int __init parse_tag_ethernet(struct tag *tag) ++{ ++ int i; ++ ++ i = tag->u.ethernet.mac_index; ++ if (i < ARRAY_SIZE(eth_data)) { ++ eth_data[i].mii_phy_addr = tag->u.ethernet.mii_phy_addr; ++ memcpy(ð_data[i].hw_addr, tag->u.ethernet.hw_address, ++ sizeof(eth_data[i].hw_addr)); ++ eth_data[i].valid = 1; ++ } ++ return 0; ++} ++__tagtable(ATAG_ETHERNET, parse_tag_ethernet); ++ ++void __init setup_board(void) ++{ ++ at32_map_usart(1, 0); /* /dev/ttyS0 */ ++ ++ at32_setup_serial_console(0); ++} ++ ++static int __init atngw_init(void) ++{ ++ at32_add_system_devices(); ++ ++ at32_add_device_usart(0); ++ ++ if (eth_data[0].valid) ++ at32_add_device_eth(0, ð_data[0]); ++ if (eth_data[1].valid) ++ at32_add_device_eth(1, ð_data[1]); ++ ++ spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); ++ ++ at32_add_device_spi(0); ++ at32_add_device_mmci(0); ++ at32_add_device_usb(0); ++ ++ return 0; ++} ++postcore_initcall(atngw_init); ++ ++void board_setup_fbmem(unsigned long fbmem_start, unsigned long fbmem_size) ++{ ++ ++} diff --git a/packages/linux/linux-2.6.18/avr32-oprofile.patch b/packages/linux/linux-2.6.18/avr32-oprofile.patch new file mode 100644 index 0000000000..5fbc9855aa --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-oprofile.patch @@ -0,0 +1,610 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Wed Jan 4 17:26:23 2006 +0100 +Subject: [PATCH] AVR32 oprofile implementation + +This adds support for oprofile on the AVR32 architecture. +--- + + arch/avr32/Kconfig | 2 + arch/avr32/Makefile | 1 + arch/avr32/oprofile/Kconfig | 23 +++ + arch/avr32/oprofile/Makefile | 10 + + arch/avr32/oprofile/common.c | 169 +++++++++++++++++++++++++++ + arch/avr32/oprofile/init.c | 29 ++++ + arch/avr32/oprofile/op_avr32_model.h | 25 +++ + arch/avr32/oprofile/op_counter.h | 29 ++++ + arch/avr32/oprofile/op_model_avr32.c | 219 +++++++++++++++++++++++++++++++++++ + arch/avr32/oprofile/op_model_avr32.h | 21 +++ + 10 files changed, 528 insertions(+) + +Index: linux-2.6.18-avr32/arch/avr32/oprofile/Kconfig +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/oprofile/Kconfig 2006-10-20 14:08:20.000000000 +0200 +@@ -0,0 +1,23 @@ ++ ++menu "Profiling support" ++ depends on EXPERIMENTAL ++ ++config PROFILING ++ bool "Profiling support (EXPERIMENTAL)" ++ help ++ Say Y here to enable the extended profiling support mechanisms used ++ by profilers such as OProfile. ++ ++ ++config OPROFILE ++ tristate "OProfile system profiling (EXPERIMENTAL)" ++ depends on PROFILING ++ help ++ OProfile is a profiling system capable of profiling the ++ whole system, including the kernel, kernel modules, libraries, ++ and applications. ++ ++ If unsure, say N. ++ ++endmenu ++ +Index: linux-2.6.18-avr32/arch/avr32/oprofile/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/oprofile/Makefile 2006-10-20 14:08:20.000000000 +0200 +@@ -0,0 +1,10 @@ ++obj-$(CONFIG_OPROFILE) += oprofile.o ++ ++DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \ ++ oprof.o cpu_buffer.o buffer_sync.o \ ++ event_buffer.o oprofile_files.o \ ++ oprofilefs.o oprofile_stats.o \ ++ timer_int.o ) ++ ++oprofile-y := $(DRIVER_OBJS) init.o common.o ++oprofile-y += op_model_avr32.o +Index: linux-2.6.18-avr32/arch/avr32/oprofile/common.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/oprofile/common.c 2006-10-20 14:08:20.000000000 +0200 +@@ -0,0 +1,169 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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. ++ * ++ * Author: Ronny Pedersen ++ */ ++ ++#define DEBUG ++#include ++#include ++#include ++#include ++#include ++ ++#include "op_avr32_model.h" ++#include "op_counter.h" ++ ++static struct op_avr32_model_spec *pc_model; ++static int pc_enabled = 0; ++static struct semaphore pc_sem; ++ ++ ++static int pc_start(void); ++static int pc_setup(void); ++static void pc_stop(void); ++static int pc_create_files(struct super_block *, struct dentry *); ++ ++ ++struct op_counter_config counter_config[OP_MAX_COUNTER]; ++ ++static int pc_suspend(struct sys_device *dev, u32 state) ++{ ++ if (pc_enabled) ++ pc_stop(); ++ return 0; ++} ++ ++static int pc_resume(struct sys_device *dev) ++{ ++ if (pc_enabled) ++ pc_start(); ++ return 0; ++} ++ ++static struct sysdev_class oprofile_sysclass = { ++ set_kset_name("oprofile"), ++ .resume = pc_resume, ++ .suspend = pc_suspend, ++}; ++ ++static struct sys_device device_oprofile = { ++ .id = 0, ++ .cls = &oprofile_sysclass, ++}; ++ ++static int __init init_driverfs(void) ++{ ++ int ret; ++ ++ if (!(ret = sysdev_class_register(&oprofile_sysclass))) ++ ret = sysdev_register(&device_oprofile); ++ ++ return ret; ++} ++ ++static void exit_driverfs(void) ++{ ++ sysdev_unregister(&device_oprofile); ++ sysdev_class_unregister(&oprofile_sysclass); ++} ++ ++static int pc_create_files(struct super_block *sb, struct dentry *root) ++{ ++ unsigned int i; ++ ++ pr_debug("AVR32 Peformance Counters: create files\n"); ++ for (i = 0; i < pc_model->num_counters; i++) { ++ struct dentry *dir; ++ char buf[2]; ++ ++ snprintf(buf, sizeof buf, "%d", i); ++ dir = oprofilefs_mkdir(sb, root, buf); ++ oprofilefs_create_ulong(sb, dir, "enabled", ++ &counter_config[i].enabled); ++ oprofilefs_create_ulong(sb, dir, "event", ++ &counter_config[i].event); ++ oprofilefs_create_ulong(sb, dir, "count", ++ &counter_config[i].count); ++ oprofilefs_create_ulong(sb, dir, "unit_mask", ++ &counter_config[i].unit_mask); ++ oprofilefs_create_ulong(sb, dir, "kernel", ++ &counter_config[i].kernel); ++ oprofilefs_create_ulong(sb, dir, "user", ++ &counter_config[i].user); ++ } ++ ++ return 0; ++} ++ ++static int pc_setup(void) ++{ ++ int ret; ++ ++ spin_lock(&oprofilefs_lock); ++ pr_debug("AVR32 Peformance Counters: setup\n"); ++ ret = pc_model->setup_ctrs(); ++ spin_unlock(&oprofilefs_lock); ++ return ret; ++} ++ ++static int pc_start(void) ++{ ++ int ret = -EBUSY; ++ ++ down(&pc_sem); ++ if (!pc_enabled) { ++ pr_debug("AVR32 Peformance Counters: start\n"); ++ ret = pc_model->start(); ++ pc_enabled = !ret; ++ } ++ up(&pc_sem); ++ return ret; ++} ++ ++static void pc_stop(void) ++{ ++ down(&pc_sem); ++ pr_debug("AVR32 Peformance Counters: stop\n"); ++ if (pc_enabled) ++ pc_model->stop(); ++ pc_enabled = 0; ++ up(&pc_sem); ++} ++ ++int __init pc_init(struct oprofile_operations *ops, ++ struct op_avr32_model_spec *spec) ++{ ++ init_MUTEX(&pc_sem); ++ ++ if ( spec->init ) ++ if (spec->init() < 0) ++ return -ENODEV; ++ ++ pc_model = spec; ++ init_driverfs(); ++ ops->create_files = pc_create_files; ++ ops->setup = pc_setup; ++ ops->shutdown = pc_stop; ++ ops->start = pc_start; ++ ops->stop = pc_stop; ++ ops->cpu_type = pc_model->name; ++ printk(KERN_INFO "oprofile: using %s Performance Counters\n", ++ spec->name); ++ pr_debug("AVR32 Peformance Counters: pc_init\n"); ++ ++ return 0; ++} ++ ++void pc_exit(void) ++{ ++ if (pc_model) { ++ pr_debug("AVR32 Peformance Counters: exit\n"); ++ exit_driverfs(); ++ pc_model = NULL; ++ } ++} +Index: linux-2.6.18-avr32/arch/avr32/oprofile/init.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/oprofile/init.c 2006-10-20 14:08:20.000000000 +0200 +@@ -0,0 +1,29 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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. ++ * ++ * Author: Ronny Pedersen ++ */ ++ ++#include ++#include ++#include ++#include "op_avr32_model.h" ++#include "op_model_avr32.h" ++ ++int __init oprofile_arch_init(struct oprofile_operations *ops) ++{ ++ int ret = -ENODEV; ++ ++ ret = pc_init(ops, &op_avr32_spec); ++ ++ return ret; ++} ++ ++void oprofile_arch_exit(void) ++{ ++ pc_exit(); ++} +Index: linux-2.6.18-avr32/arch/avr32/oprofile/op_avr32_model.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/oprofile/op_avr32_model.h 2006-10-20 14:08:20.000000000 +0200 +@@ -0,0 +1,25 @@ ++/* ++ * interface to AVR32 machine specific operations ++ * ++ * Copyright (C) 2005-2006 Atmel 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. ++ * ++ * Author: Ronny Pedersen ++ */ ++ ++#ifndef OP_AVR32_MODEL_H ++#define OP_AVR32_MODEL_H ++ ++struct op_avr32_model_spec { ++ int (*init)(void); ++ unsigned int num_counters; ++ int (*setup_ctrs)(void); ++ int (*start)(void); ++ void (*stop)(void); ++ char *name; ++}; ++ ++#endif /* OP_AVR32_MODEL_H */ +Index: linux-2.6.18-avr32/arch/avr32/oprofile/op_counter.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/oprofile/op_counter.h 2006-10-20 14:08:20.000000000 +0200 +@@ -0,0 +1,29 @@ ++/* ++ * Copyright (C) 2005-2006 Atmel 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. ++ * ++ * Author: Ronny Pedersen ++ */ ++#ifndef OP_COUNTER_H ++#define OP_COUNTER_H ++ ++#define OP_MAX_COUNTER 3 ++ ++/* Per performance monitor configuration as set via ++ * oprofilefs. ++ */ ++struct op_counter_config { ++ unsigned long count; ++ unsigned long enabled; ++ unsigned long event; ++ unsigned long unit_mask; ++ unsigned long kernel; ++ unsigned long user; ++}; ++ ++extern struct op_counter_config counter_config[]; ++ ++#endif /* OP_COUNTER_H */ +Index: linux-2.6.18-avr32/arch/avr32/oprofile/op_model_avr32.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/oprofile/op_model_avr32.c 2006-10-20 14:08:20.000000000 +0200 +@@ -0,0 +1,219 @@ ++/* ++ * AVR32 Performance Counter Driver ++ * ++ * Copyright (C) 2005-2006 Atmel 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. ++ * ++ * Author: Ronny Pedersen ++ */ ++ ++#define DEBUG ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "op_counter.h" ++#include "op_avr32_model.h" ++ ++ ++#define PC_ENABLE 0x001 /* Enable counters */ ++#define PCNT_RESET 0x002 /* Reset event counters */ ++#define CCNT_RESET 0x004 /* Reset clock counter */ ++#define PC_RESET (CCNT_RESET | PCNT_RESET) ++#define PC_CNT64 0x008 /* Make CCNT count every 64th cycle */ ++ ++ ++#define EVT_UNUSED 0xFF ++ ++struct pc_counter { ++ volatile unsigned long ovf; ++ unsigned long reset_counter; ++}; ++ ++enum { PCCNT, PCNT0, PCNT1, MAX_COUNTERS }; ++ ++#define PCCNT_IE (1 << 4) ++#define PCNT0_IE (1 << 5) ++#define PCNT1_IE (1 << 6) ++ ++#define PCCNT_F (1 << 8) ++#define PCNT0_F (1 << 9) ++#define PCNT1_F (1 << 10) ++ ++#define AVR32_PC_IRQ 1 ++ ++static const u32 int_mask[MAX_COUNTERS] = { PCCNT_IE, PCNT0_IE, PCNT1_IE }; ++static const u32 ovf_mask[MAX_COUNTERS] = { PCCNT_F, PCNT0_F, PCNT1_F }; ++ ++static struct pc_counter results[MAX_COUNTERS]; ++ ++static void write_pccr(u32 val) ++{ ++ __builtin_mtsr(SYSREG_PCCR, val); ++} ++ ++static u32 read_pccr(void) ++{ ++ return __builtin_mfsr(SYSREG_PCCR); ++} ++ ++static u32 read_counter(int counter) ++{ ++ switch (counter) { ++ case PCCNT: ++ return __builtin_mfsr(SYSREG_PCCNT); ++ case PCNT0: ++ return __builtin_mfsr(SYSREG_PCNT0); ++ case PCNT1: ++ return __builtin_mfsr(SYSREG_PCNT0); ++ default: ++ return 0; ++ } ++} ++ ++ ++static void write_counter(int counter, u32 val) ++{ ++ switch (counter) { ++ case PCCNT: ++ __builtin_mtsr(SYSREG_PCCNT, val); ++ case PCNT0: ++ __builtin_mtsr(SYSREG_PCNT0, val); ++ case PCNT1: ++ __builtin_mtsr(SYSREG_PCNT0, val); ++ default: ++ break; ++ } ++} ++ ++static int avr32_setup_ctrs(void) ++{ ++ u32 pccr; ++ int i; ++ ++ for (i = PCCNT; i < MAX_COUNTERS; i++) { ++ if (counter_config[i].enabled) ++ continue; ++ ++ counter_config[i].event = EVT_UNUSED; ++ } ++ ++ pccr = ((counter_config[PCNT1].event << 18) ++ | (counter_config[PCNT0].event << 12)); ++ pr_debug("avr32_setup_ctrs: pccr: %#08x\n", pccr); ++ write_pccr(pccr); ++ ++ for (i = PCCNT; i < MAX_COUNTERS; i++) { ++ if (counter_config[i].event == EVT_UNUSED) { ++ counter_config[i].event = 0; ++ continue; ++ } ++ ++ results[i].reset_counter = counter_config[i].count; ++ write_counter(i, -(u32)counter_config[i].count); ++ pr_debug("avr32_setup_ctrs: counter%d %#08x from %#08lx\n", ++ i, read_counter(i), counter_config[i].count); ++ } ++ ++ return 0; ++} ++ ++static void inline check_ctrs(void) ++{ ++ int i; ++ u32 pccr = read_pccr(); ++ ++ /* Writeback clears overflow flag */ ++ write_pccr(pccr & ~PC_ENABLE); ++ ++ for (i = PCCNT; i < MAX_COUNTERS; i++) { ++ if (!(int_mask[i] & pccr)) ++ continue; ++ ++ if (pccr & ovf_mask[i]) ++ results[i].ovf++; ++ } ++} ++ ++ ++static irqreturn_t avr32_pc_interrupt(int irq, void *arg, ++ struct pt_regs *regs) ++{ ++ int i; ++ ++ check_ctrs(); ++ ++ for (i = PCCNT; i < MAX_COUNTERS; i++) { ++ if (!results[i].ovf) ++ continue; ++ ++ write_counter(i, -(u32)results[i].reset_counter); ++ oprofile_add_sample(regs, i); ++ results[i].ovf--; ++ } ++ ++ /* Enable Performance Counter */ ++ write_pccr(read_pccr() | PC_ENABLE); ++ ++ return IRQ_HANDLED; ++} ++ ++static void avr32_pc_stop(void) ++{ ++ write_pccr(read_pccr() & ~PC_ENABLE); ++ ++ free_irq(AVR32_PC_IRQ, results); ++} ++ ++static int avr32_pc_start(void) ++{ ++ int i, ret; ++ u32 pccr = read_pccr(); ++ ++ ret = request_irq(AVR32_PC_IRQ, avr32_pc_interrupt, SA_INTERRUPT, ++ "AVR32 Performance Counter", (void *)results); ++ ++ if (ret < 0) { ++ printk(KERN_ERR ++ "oprofile: unable to request IRQ%d for AVR32" ++ " Performance Counter\n", ++ AVR32_PC_IRQ); ++ return ret; ++ } ++ ++ /* Enable interrupts */ ++ for (i = PCCNT; i < MAX_COUNTERS; i++) { ++ if (counter_config[i].enabled) ++ pccr |= int_mask[i]; ++ } ++ ++ /* Disable scaler */ ++ pccr &= ~PC_CNT64; ++ ++ /* Enable Performance Counter */ ++ pccr |= PC_ENABLE; ++ ++ write_pccr(pccr); ++ pr_debug("avr32_pc_start: pc: %#08x\n", pccr); ++ return 0; ++} ++ ++ ++struct op_avr32_model_spec op_avr32_spec = { ++ .init = 0, ++ .setup_ctrs = avr32_setup_ctrs, ++ .start = avr32_pc_start, ++ .stop = avr32_pc_stop, ++ .num_counters = MAX_COUNTERS, ++ .name = "avr32", ++}; ++ +Index: linux-2.6.18-avr32/arch/avr32/oprofile/op_model_avr32.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/arch/avr32/oprofile/op_model_avr32.h 2006-10-20 14:08:20.000000000 +0200 +@@ -0,0 +1,21 @@ ++/** ++ * AVR32 Machine Specific Operations ++ * ++ * Copyright (C) 2005-2006 Atmel 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. ++ * ++ * Author: Ronny Pedersen ++ */ ++#ifndef OP_MODEL_AVR32_H ++#define OP_MODEL_AVR32_H ++ ++extern struct op_avr32_model_spec op_avr32_spec; ++extern int pc_init(struct oprofile_operations *ops, ++ struct op_avr32_model_spec *spec); ++extern void pc_exit(void); ++ ++ ++#endif +Index: linux-2.6.18-avr32/arch/avr32/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/Kconfig 2006-10-20 14:04:43.000000000 +0200 ++++ linux-2.6.18-avr32/arch/avr32/Kconfig 2006-10-20 14:08:20.000000000 +0200 +@@ -190,6 +190,8 @@ source "drivers/Kconfig" + + source "fs/Kconfig" + ++source "arch/avr32/oprofile/Kconfig" ++ + source "arch/avr32/Kconfig.debug" + + source "security/Kconfig" +Index: linux-2.6.18-avr32/arch/avr32/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/Makefile 2006-10-20 14:04:54.000000000 +0200 ++++ linux-2.6.18-avr32/arch/avr32/Makefile 2006-10-20 14:09:10.000000000 +0200 +@@ -30,6 +30,7 @@ core-$(CONFIG_BOARD_ATSTK1000) += arch/ + core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ + core-y += arch/avr32/kernel/ + core-y += arch/avr32/mm/ ++drivers-$(CONFIG_OPROFILE) += arch/avr32/oprofile/ + libs-y += arch/avr32/lib/ + + archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap diff --git a/packages/linux/linux-2.6.18/avr32-sound.patch b/packages/linux/linux-2.6.18/avr32-sound.patch new file mode 100644 index 0000000000..597a44de3b --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-sound.patch @@ -0,0 +1,51 @@ +--- + sound/Kconfig | 2 ++ + sound/Makefile | 1 + + sound/avr32/Kconfig | 6 ++++++ + sound/avr32/Makefile | 3 +++ + 4 files changed, 12 insertions(+) + +Index: linux-2.6.18-avr32/sound/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/sound/Kconfig 2006-09-12 10:44:15.000000000 +0200 ++++ linux-2.6.18-avr32/sound/Kconfig 2006-09-12 10:45:14.000000000 +0200 +@@ -62,6 +62,8 @@ source "sound/aoa/Kconfig" + + source "sound/arm/Kconfig" + ++source "sound/avr32/Kconfig" ++ + source "sound/mips/Kconfig" + + # the following will depenend on the order of config. +Index: linux-2.6.18-avr32/sound/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/sound/Makefile 2006-09-12 10:44:15.000000000 +0200 ++++ linux-2.6.18-avr32/sound/Makefile 2006-09-12 10:44:37.000000000 +0200 +@@ -5,6 +5,7 @@ obj-$(CONFIG_SOUND) += soundcore.o + obj-$(CONFIG_SOUND_PRIME) += oss/ + obj-$(CONFIG_DMASOUND) += oss/ + obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/ ++obj-$(CONFIG_SND) += avr32/ + obj-$(CONFIG_SND_AOA) += aoa/ + + ifeq ($(CONFIG_SND),y) +Index: linux-2.6.18-avr32/sound/avr32/Kconfig +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/sound/avr32/Kconfig 2006-09-12 10:45:52.000000000 +0200 +@@ -0,0 +1,6 @@ ++# ALSA AVR32 drivers ++ ++menu "ALSA AVR32 devices" ++ depends on SND != n && AVR32 ++ ++endmenu +Index: linux-2.6.18-avr32/sound/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/sound/avr32/Makefile 2006-09-12 10:46:03.000000000 +0200 +@@ -0,0 +1,3 @@ ++# ++# Makefile for ALSA ++# diff --git a/packages/linux/linux-2.6.18/avr32-time-add-shared-interrupts.patch b/packages/linux/linux-2.6.18/avr32-time-add-shared-interrupts.patch new file mode 100644 index 0000000000..c626016ff4 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-time-add-shared-interrupts.patch @@ -0,0 +1,30 @@ +--- linux-2.6.18.orig/arch/avr32/kernel/time.c 2006-11-06 14:36:50.000000000 +0100 ++++ linux-2.6.18/arch/avr32/kernel/time.c 2006-11-06 14:57:03.000000000 +0100 +@@ -21,6 +21,7 @@ + #include + #include + ++#include + #include + #include + #include +@@ -136,6 +137,10 @@ + { + unsigned int count; + ++ /* Check if interrupt is timer or performance counters */ ++ if (!(intc_get_pending(irq) & 1)) ++ return IRQ_NONE; ++ + /* ack timer interrupt and try to set next interrupt */ + count = avr32_hpt_read(); + avr32_timer_ack(); +@@ -164,7 +169,7 @@ + + static struct irqaction timer_irqaction = { + .handler = timer_interrupt, +- .flags = IRQF_DISABLED, ++ .flags = IRQF_DISABLED|IRQF_SHARED, + .name = "timer", + }; + diff --git a/packages/linux/linux-2.6.18/avr32-unistd-h-move-ifdef-kernel.patch b/packages/linux/linux-2.6.18/avr32-unistd-h-move-ifdef-kernel.patch new file mode 100644 index 0000000000..eb16d80b46 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32-unistd-h-move-ifdef-kernel.patch @@ -0,0 +1,39 @@ +--- + include/asm-avr32/unistd.h | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +Index: linux-2.6.18-avr32/include/asm-avr32/unistd.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/unistd.h 2006-11-29 16:49:54.000000000 +0100 ++++ linux-2.6.18-avr32/include/asm-avr32/unistd.h 2006-11-29 16:50:32.000000000 +0100 +@@ -281,6 +281,7 @@ + #define __NR_tee 263 + #define __NR_vmsplice 264 + ++#ifdef __KERNEL__ + #define NR_syscalls 265 + + +@@ -304,7 +305,6 @@ + return (type) (res); \ + } while (0) + +-#ifdef __KERNEL__ + #define __ARCH_WANT_IPC_PARSE_VERSION + #define __ARCH_WANT_STAT64 + #define __ARCH_WANT_SYS_ALARM +@@ -319,7 +319,6 @@ + #define __ARCH_WANT_SYS_GETPGRP + #define __ARCH_WANT_SYS_RT_SIGACTION + #define __ARCH_WANT_SYS_RT_SIGSUSPEND +-#endif + + #if defined(__KERNEL_SYSCALLS__) || defined(__CHECKER__) + +@@ -384,4 +383,6 @@ asmlinkage int sys_execve(char __user *u + */ + #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall"); + ++#endif /* __KERNEL__ */ ++ + #endif /* __ASM_AVR32_UNISTD_H */ diff --git a/packages/linux/linux-2.6.18/avr32_defconfig b/packages/linux/linux-2.6.18/avr32_defconfig new file mode 100644 index 0000000000..bf9615c088 --- /dev/null +++ b/packages/linux/linux-2.6.18/avr32_defconfig @@ -0,0 +1,1036 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.20 +# Mon Mar 5 16:48:58 2007 +# +CONFIG_AVR32=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_TIME=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_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_SYSCTL_SYSCALL=y +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +# CONFIG_BASE_FULL is not set +# CONFIG_FUTEX is not set +# CONFIG_EPOLL is not set +CONFIG_SHMEM=y +CONFIG_SLAB=y +# CONFIG_VM_EVENT_COUNTERS is not set +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=1 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODULE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_KMOD is not set + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" + +# +# System Type and features +# +CONFIG_SUBARCH_AVR32B=y +CONFIG_MMU=y +CONFIG_PERFORMANCE_COUNTERS=y +CONFIG_PLATFORM_AT32AP=y +CONFIG_CPU_AT32AP7000=y +CONFIG_BOARD_ATSTK1002=y +CONFIG_BOARD_ATSTK1000=y +CONFIG_LOADER_U_BOOT=y + +# +# Atmel AVR32 AP options +# +CONFIG_PIO_DEV=y +# CONFIG_AP7000_32_BIT_SMC is not set +CONFIG_AP7000_16_BIT_SMC=y +# CONFIG_AP7000_8_BIT_SMC is not set +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_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +# CONFIG_OWNERSHIP_TRACE is not set +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_CMDLINE="" + +# +# Bus options +# + +# +# PCCARD (PCMCIA/CardBus) support +# +CONFIG_PCCARD=y +CONFIG_PCMCIA_DEBUG=y +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +# CONFIG_PCMCIA_IOCTL is not set + +# +# PC-card bridges +# +CONFIG_AT32_CF=y + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_IEEE80211 is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y + +# +# 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 + +# +# 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 +# CONFIG_MTD_OBSOLETE_CHIPS 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 is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# Misc devices +# +# CONFIG_TIFM_CORE is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set + +# +# PCMCIA SCSI adapter support +# +# CONFIG_PCMCIA_AHA152X is not set +# CONFIG_PCMCIA_FDOMAIN is not set +# CONFIG_PCMCIA_NINJA_SCSI is not set +# CONFIG_PCMCIA_QLOGIC is not set +# CONFIG_PCMCIA_SYM53C500 is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_PATA_PCMCIA=y +# CONFIG_PATA_PLATFORM is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# PHY device support +# +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_MACB=y + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# PCMCIA network device support +# +# CONFIG_NET_PCMCIA is not set + +# +# Wan interfaces +# +# 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 + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=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 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC 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 + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set + +# +# I2C support +# +CONFIG_I2C=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +CONFIG_I2C_ATMELTWI=y +CONFIG_I2C_ATMELTWI_BAUDRATE=100000 +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_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 +# + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +# CONFIG_FIRMWARE_EDID is not set +CONFIG_FB=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# 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 +CONFIG_FB_SIDSA=y +CONFIG_FB_SIDSA_DEFAULT_BPP=16 +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Logo configuration +# +# CONFIG_LOGO is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_DEVICE=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_LCD_DEVICE=y +CONFIG_LCD_LTV350QV=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 is not set +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 AVR32 devices +# +# CONFIG_SND_ATMEL_AC97 is not set +CONFIG_SND_AT73C213=y +# CONFIG_SND_AT73C213_USE_ALSA_MALLOC_CALLS is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set + +# +# USB support +# +# CONFIG_USB_ARCH_HAS_HCD is not set +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +CONFIG_USB_GADGET_HUSB2DEV=y +CONFIG_USB_HUSB2DEV=y +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +CONFIG_USB_ZERO=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 + +# +# MMC/SD Card support +# +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=y +CONFIG_MMC_ATMELMCI=y +# CONFIG_MMC_TIFM_SD is not set + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# InfiniBand support +# + +# +# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) +# + +# +# Real Time Clock +# +# CONFIG_RTC_CLASS is not set + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# Virtualization +# + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4DEV_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_DNOTIFY is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_PROC_KCORE is not set +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +CONFIG_CONFIGFS_FS=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=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# 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_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 +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# 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 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_RWSEMS is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_FRAME_POINTER is not set +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_KPROBES is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_IOMAP_COPY=y diff --git a/packages/linux/linux-2.6.18/dmac-add-explicit-blockcount-to-dma_request_sg.patch b/packages/linux/linux-2.6.18/dmac-add-explicit-blockcount-to-dma_request_sg.patch new file mode 100644 index 0000000000..54400aeff1 --- /dev/null +++ b/packages/linux/linux-2.6.18/dmac-add-explicit-blockcount-to-dma_request_sg.patch @@ -0,0 +1,66 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Sun, 14 Jan 2007 19:07:06 +0100 +Subject: [DW DMAC] Add nr_blocks field to struct dma_request_sg + +Allow drivers to specify how many blocks to transfer in a sg request. +The number of blocks will no longer be automatically calculated based +on the scatterlist because this doesn't always correspond with the +desired amount of data to be transferred. + +Signed-off-by: Haavard Skinnemoen +--- + arch/avr32/drivers/dw-dmac.c | 13 ++++++------- + include/asm-avr32/dma-controller.h | 1 + + 2 files changed, 7 insertions(+), 7 deletions(-) + +Index: linux-2.6.18-avr32/include/asm-avr32/dma-controller.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/dma-controller.h 2007-01-15 15:34:32.000000000 +0100 ++++ linux-2.6.18-avr32/include/asm-avr32/dma-controller.h 2007-01-15 15:34:50.000000000 +0100 +@@ -36,6 +36,7 @@ struct dma_request_sg { + int nr_sg; + struct scatterlist *sg; + unsigned long block_size; ++ unsigned int nr_blocks; + + dma_addr_t data_reg; + unsigned short periph_id; +Index: linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/drivers/dw-dmac.c 2007-01-15 15:35:00.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c 2007-01-15 15:35:03.000000000 +0100 +@@ -176,7 +176,8 @@ static int dmac_prepare_request_sg(struc + struct dw_dma_channel *chan; + unsigned long ctlhi, ctllo, cfghi, cfglo; + unsigned long block_size; +- int ret, i, nr_blocks, direction; ++ unsigned int nr_blocks; ++ int ret, i, direction; + unsigned long flags; + + spin_lock_irqsave(&dmac->lock, flags); +@@ -215,12 +216,9 @@ static int dmac_prepare_request_sg(struc + * Each block will get its own Linked List Item (LLI) below. + */ + block_size = req->block_size; +- pr_debug("block_size = %lu, nr_sg = %u\n", block_size, req->nr_sg); +- for (i = 0, nr_blocks = 0; i < req->nr_sg; i++) { +- pr_debug("sg[i].length = %u\n", req->sg[i].length); +- BUG_ON(req->sg[i].length % block_size); +- nr_blocks += req->sg[i].length / block_size; +- } ++ nr_blocks = req->nr_blocks; ++ pr_debug("block_size %lu, nr_blocks %u nr_sg = %u\n", ++ block_size, nr_blocks, req->nr_sg); + + BUG_ON(nr_blocks == 0); + chan->nr_blocks = nr_blocks; +@@ -269,6 +267,7 @@ static int dmac_prepare_request_sg(struc + } + dmac_chan_writel_lo(dmac, req->req.channel, CTL, ctllo); + dmac_chan_writel_hi(dmac, req->req.channel, CTL, ctlhi); ++ pr_debug("ctl hi:lo 0x%lx:%lx\n", ctlhi, ctllo); + } else { + struct dw_dma_lli *lli, *lli_prev = NULL; + int j = 0, offset = 0; diff --git a/packages/linux/linux-2.6.18/dmac-stopping-idle-channel-is-not-fatal.patch b/packages/linux/linux-2.6.18/dmac-stopping-idle-channel-is-not-fatal.patch new file mode 100644 index 0000000000..ed2714d0d7 --- /dev/null +++ b/packages/linux/linux-2.6.18/dmac-stopping-idle-channel-is-not-fatal.patch @@ -0,0 +1,93 @@ +--- + arch/avr32/drivers/dw-dmac.c | 50 ++++++++++++++++++++++++------------------- + 1 file changed, 29 insertions(+), 21 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/drivers/dw-dmac.c 2007-01-04 09:56:32.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c 2007-01-04 15:38:13.000000000 +0100 +@@ -7,7 +7,6 @@ + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +- + #include + #include + #include +@@ -155,6 +154,21 @@ fail: + return NULL; + } + ++static void cleanup_channel(struct dw_dma_controller *dmac, ++ struct dw_dma_channel *chan) ++{ ++ unsigned int i; ++ ++ if (chan->nr_blocks > 1) { ++ for (i = 0; i < chan->nr_blocks; i++) ++ dma_pool_free(dmac->lli_pool, chan->block[i].lli_vaddr, ++ chan->block[i].lli_dma_addr); ++ kfree(chan->block); ++ } ++ ++ chan->state = CH_STATE_ALLOCATED; ++} ++ + static int dmac_prepare_request_sg(struct dma_controller *_dmac, + struct dma_request_sg *req) + { +@@ -313,6 +327,7 @@ static int dmac_prepare_request_sg(struc + * SAR, DAR and CTL are initialized from the LLI. We + * only have to enable the LLI bits in CTL. + */ ++ dmac_chan_writel_hi(dmac, req->req.channel, CTL, 0); + dmac_chan_writel_lo(dmac, req->req.channel, LLP, + chan->block[0].lli_dma_addr); + dmac_chan_writel_lo(dmac, req->req.channel, CTL, 1 << 28 | 1 << 27); +@@ -520,33 +535,26 @@ static dma_addr_t dmac_get_current_pos(s + } + + +-static void cleanup_channel(struct dw_dma_controller *dmac, +- struct dw_dma_channel *chan) +-{ +- unsigned int i; +- +- if (chan->nr_blocks > 1) { +- for (i = 0; i < chan->nr_blocks; i++) +- dma_pool_free(dmac->lli_pool, chan->block[i].lli_vaddr, +- chan->block[i].lli_dma_addr); +- kfree(chan->block); +- } +- +- chan->state = CH_STATE_ALLOCATED; +-} +- + static int dmac_stop_request(struct dma_controller *_dmac, + unsigned int channel) + { + struct dw_dma_controller *dmac = to_dw_dmac(_dmac); ++ struct dw_dma_channel *chan; + + BUG_ON(channel >= DMAC_NR_CHANNELS); + +- BUG_ON(dmac->channel[channel].state != CH_STATE_BUSY); +- +- clear_channel_bit(dmac, CH_EN, channel); +- +- cleanup_channel(dmac, &dmac->channel[channel]); ++ chan = &dmac->channel[channel]; ++ pr_debug("stop: st%u s%08x d%08x l%08x ctl0x%08x:0x%08x\n", ++ chan->state, dmac_chan_readl_lo(dmac, channel, SAR), ++ dmac_chan_readl_lo(dmac, channel, DAR), ++ dmac_chan_readl_lo(dmac, channel, LLP), ++ dmac_chan_readl_hi(dmac, channel, CTL), ++ dmac_chan_readl_lo(dmac, channel, CTL)); ++ ++ if (chan->state == CH_STATE_BUSY) { ++ clear_channel_bit(dmac, CH_EN, channel); ++ cleanup_channel(dmac, &dmac->channel[channel]); ++ } + + return 0; + } diff --git a/packages/linux/linux-2.6.18/dont-include-map-h-from-physmap-h.patch b/packages/linux/linux-2.6.18/dont-include-map-h-from-physmap-h.patch new file mode 100644 index 0000000000..c7f03f9828 --- /dev/null +++ b/packages/linux/linux-2.6.18/dont-include-map-h-from-physmap-h.patch @@ -0,0 +1,33 @@ +From 00424e00aeeecfd17ee71918b183e50d07641c5e Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Wed, 10 Jan 2007 18:55:18 +0100 +Subject: [PATCH] MTD: Don't include map.h from physmap.h + +Replace inclusion of with a forward-declaration of +struct map_info. This is necessary because physmap.h may be included +in platform code and map.h will give errors if MTD isn't enabled. + +Signed-off-by: Haavard Skinnemoen +--- + include/linux/mtd/physmap.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/include/linux/mtd/physmap.h b/include/linux/mtd/physmap.h +index 86831e3..0dc07d5 100644 +--- a/include/linux/mtd/physmap.h ++++ b/include/linux/mtd/physmap.h +@@ -18,9 +18,10 @@ + #define __LINUX_MTD_PHYSMAP__ + + #include +-#include + #include + ++struct map_info; ++ + struct physmap_flash_data { + unsigned int width; + void (*set_vpp)(struct map_info *, int); +-- +1.4.4.1 + diff --git a/packages/linux/linux-2.6.18/fix-alpha-color-bitfield.patch b/packages/linux/linux-2.6.18/fix-alpha-color-bitfield.patch new file mode 100644 index 0000000000..f563a501a1 --- /dev/null +++ b/packages/linux/linux-2.6.18/fix-alpha-color-bitfield.patch @@ -0,0 +1,21 @@ +--- + drivers/video/sidsafb.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +Index: linux-2.6.18-avr32/drivers/video/sidsafb.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/video/sidsafb.c 2006-10-11 15:14:06.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/video/sidsafb.c 2006-10-18 14:51:31.000000000 +0200 +@@ -300,8 +300,11 @@ static int sidsafb_check_var(struct fb_v + var->green.length = 5; + var->blue.length = 5; + break; +- case 24: + case 32: ++ var->transp.offset = 24; ++ var->transp.length = 8; ++ /* fall through */ ++ case 24: + var->red.offset = 16; + var->green.offset = 8; + var->blue.offset = 0; diff --git a/packages/linux/linux-2.6.18/fix-gpio-prototypes.patch b/packages/linux/linux-2.6.18/fix-gpio-prototypes.patch new file mode 100644 index 0000000000..2b5a09620b --- /dev/null +++ b/packages/linux/linux-2.6.18/fix-gpio-prototypes.patch @@ -0,0 +1,75 @@ +--- + arch/avr32/mach-at32ap/pio.c | 15 +++++++++------ + include/asm-avr32/arch-at32ap/gpio.h | 6 +++--- + 2 files changed, 12 insertions(+), 9 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 18:14:54.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-29 18:17:15.000000000 +0100 +@@ -49,7 +49,7 @@ static struct pio_device *gpio_to_pio(un + /* Pin multiplexing API */ + + void __init at32_select_periph(unsigned int pin, unsigned int periph, +- int use_pullup) ++ unsigned long flags) + { + struct pio_device *pio; + unsigned int pin_index = pin & 0x1f; +@@ -73,7 +73,7 @@ void __init at32_select_periph(unsigned + pio_writel(pio, ASR, mask); + + pio_writel(pio, PDR, mask); +- if (!use_pullup) ++ if (!(flags & AT32_GPIOF_PULLUP)) + pio_writel(pio, PUDR, mask); + + return; +@@ -82,8 +82,7 @@ fail: + dump_stack(); + } + +-void __init at32_select_gpio(unsigned int pin, int enable_output, +- int use_pullup) ++void __init at32_select_gpio(unsigned int pin, unsigned long flags) + { + struct pio_device *pio; + unsigned int pin_index = pin & 0x1f; +@@ -101,13 +100,17 @@ void __init at32_select_gpio(unsigned in + } + + pio_writel(pio, PUER, mask); +- if (enable_output) ++ if (flags & AT32_GPIOF_HIGH) ++ pio_writel(pio, SODR, mask); ++ else ++ pio_writel(pio, CODR, mask); ++ if (flags & AT32_GPIOF_OUTPUT) + pio_writel(pio, OER, mask); + else + pio_writel(pio, ODR, mask); + + pio_writel(pio, PER, mask); +- if (!use_pullup) ++ if (!(flags & AT32_GPIOF_PULLUP)) + pio_writel(pio, PUDR, mask); + + /* It's now allowed to use request_gpio on this pin */ +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/gpio.h 2006-11-29 18:14:37.000000000 +0100 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h 2006-11-29 18:15:06.000000000 +0100 +@@ -1,5 +1,5 @@ +-#ifndef __ASM_AVR32_GPIO_H +-#define __ASM_AVR32_GPIO_H ++#ifndef __ASM_AVR32_ARCH_GPIO_H ++#define __ASM_AVR32_ARCH_GPIO_H + + #include + #include +@@ -36,4 +36,4 @@ static inline int irq_to_gpio(unsigned i + return irq - GPIO_IRQ_BASE; + } + +-#endif /* __ASM_AVR32_GPIO_H */ ++#endif /* __ASM_AVR32_ARCH_GPIO_H */ diff --git a/packages/linux/linux-2.6.18/fix-lcd-display-off-by-two-problem.patch b/packages/linux/linux-2.6.18/fix-lcd-display-off-by-two-problem.patch new file mode 100644 index 0000000000..e99619a876 --- /dev/null +++ b/packages/linux/linux-2.6.18/fix-lcd-display-off-by-two-problem.patch @@ -0,0 +1,17 @@ +--- + drivers/video/sidsafb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: linux-2.6.18-avr32/drivers/video/sidsafb.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/video/sidsafb.c 2006-11-27 15:47:16.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/video/sidsafb.c 2006-11-27 15:47:25.000000000 +0100 +@@ -107,7 +107,7 @@ static struct fb_videomode samsung_modes + .pixclock = 145111, + + .left_margin = 17, .right_margin = 33, +- .upper_margin = 8, .lower_margin = 10, ++ .upper_margin = 10, .lower_margin = 10, + .hsync_len = 16, .vsync_len = 1, + + .sync = FB_SYNC_PCLK_RISING, diff --git a/packages/linux/linux-2.6.18/fix-usart3-rx-BUG.patch b/packages/linux/linux-2.6.18/fix-usart3-rx-BUG.patch new file mode 100644 index 0000000000..1035f9f010 --- /dev/null +++ b/packages/linux/linux-2.6.18/fix-usart3-rx-BUG.patch @@ -0,0 +1,25 @@ +--- + drivers/serial/atmel_usart.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/serial/atmel_usart.c 2006-11-24 15:59:38.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-11-24 15:59:46.000000000 +0100 +@@ -194,8 +194,14 @@ static inline int rx_dma_update_tail(str + usart3_writel(up, RNCR, RX_BUFFER_SIZE); + + again = 1; +- } else +- BUG_ON(usart3_readl(up, CSR) & USART3_BIT(ENDRX)); ++ } else if(usart3_readl(up, CSR) & USART3_BIT(ENDRX)) { ++ /* ++ * The USART hit the end of the buffer after head was ++ * updated. Let's do another pass so that we can ++ * avoid taking another interrupt immediately. ++ */ ++ again = 1; ++ } + + up->rx_tail = tail; + diff --git a/packages/linux/linux-2.6.18/gpio-define-pio-none.patch b/packages/linux/linux-2.6.18/gpio-define-pio-none.patch new file mode 100644 index 0000000000..802a535354 --- /dev/null +++ b/packages/linux/linux-2.6.18/gpio-define-pio-none.patch @@ -0,0 +1,11 @@ +Index: linux-2.6.18/include/asm-avr32/arch-at32ap/at32ap7000.h +=================================================================== +--- linux-2.6.18.orig/include/asm-avr32/arch-at32ap/at32ap7000.h 2006-12-11 14:53:54.000000000 +0100 ++++ linux-2.6.18/include/asm-avr32/arch-at32ap/at32ap7000.h 2006-12-11 14:56:54.000000000 +0100 +@@ -23,4 +23,6 @@ + #define GPIO_PIN_PD(N) (GPIO_PIOD_BASE + (N)) + #define GPIO_PIN_PE(N) (GPIO_PIOE_BASE + (N)) + ++#define GPIO_PIO_NONE (0xFFFFffff) ++ + #endif /* __ASM_ARCH_AT32AP7000_H */ diff --git a/packages/linux/linux-2.6.18/gpio-dev-blocking-read.patch b/packages/linux/linux-2.6.18/gpio-dev-blocking-read.patch new file mode 100644 index 0000000000..9508d9e3aa --- /dev/null +++ b/packages/linux/linux-2.6.18/gpio-dev-blocking-read.patch @@ -0,0 +1,187 @@ +--- + arch/avr32/mach-at32ap/pio.c | 113 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 113 insertions(+) + +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-30 13:16:43.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-30 17:15:24.000000000 +0100 +@@ -250,7 +250,11 @@ EXPORT_SYMBOL(gpio_set_value); + #ifdef CONFIG_PIO_DEV + #include + #include ++#include ++#include ++#include + #include ++#include + + #define GPIO_DEV_MAX 8 + +@@ -267,6 +271,13 @@ struct gpio_item { + u32 pin_mask; + u32 oe_mask; + ++ /* Pin state last time we read it (for blocking reads) */ ++ u32 pin_state; ++ int changed; ++ ++ wait_queue_head_t change_wq; ++ struct fasync_struct *async_queue; ++ + int id; + struct class_device *gpio_dev; + struct cdev char_dev; +@@ -279,36 +290,135 @@ struct gpio_attribute { + ssize_t (*store)(struct gpio_item *, const char *, size_t); + }; + ++static irqreturn_t gpio_dev_interrupt(int irq, void *dev_id, ++ struct pt_regs *regs) ++{ ++ struct gpio_item *gpio = dev_id; ++ u32 old_state, new_state; ++ ++ old_state = gpio->pin_state; ++ new_state = pio_readl(gpio->pio, PDSR); ++ gpio->pin_state = new_state; ++ ++ if (new_state != old_state) { ++ gpio->changed = 1; ++ wake_up_interruptible(&gpio->change_wq); ++ ++ if (gpio->async_queue) ++ kill_fasync(&gpio->async_queue, SIGIO, POLL_IN); ++ } ++ ++ return IRQ_HANDLED; ++} ++ + static int gpio_dev_open(struct inode *inode, struct file *file) + { + struct gpio_item *gpio = container_of(inode->i_cdev, + struct gpio_item, + char_dev); ++ unsigned int irq; ++ unsigned int i; ++ int ret; + ++ nonseekable_open(inode, file); + config_item_get(&gpio->item); + file->private_data = gpio; ++ ++ gpio->pin_state = pio_readl(gpio->pio, PDSR) & gpio->pin_mask; ++ gpio->changed = 1; ++ ++ for (i = 0; i < 32; i++) { ++ if (gpio->pin_mask & (1 << i)) { ++ irq = gpio_to_irq(32 * pio_id(gpio->pio) + i); ++ ret = request_irq(irq, gpio_dev_interrupt, 0, ++ "gpio-dev", gpio); ++ if (ret) ++ goto err_irq; ++ } ++ } ++ + return 0; ++ ++err_irq: ++ while (i--) { ++ if (gpio->pin_mask & (1 << i)) { ++ irq = gpio_to_irq(32 * pio_id(gpio->pio) + i); ++ free_irq(irq, gpio); ++ } ++ } ++ ++ config_item_put(&gpio->item); ++ ++ return ret; ++} ++ ++static int gpio_dev_fasync(int fd, struct file *file, int mode) ++{ ++ struct gpio_item *gpio = file->private_data; ++ ++ return fasync_helper(fd, file, mode, &gpio->async_queue); + } + + static int gpio_dev_release(struct inode *inode, struct file *file) + { + struct gpio_item *gpio = file->private_data; ++ unsigned int irq; ++ unsigned int i; ++ ++ gpio_dev_fasync(-1, file, 0); ++ ++ for (i = 0; i < 32; i++) { ++ if (gpio->pin_mask & (1 << i)) { ++ irq = gpio_to_irq(32 * pio_id(gpio->pio) + i); ++ free_irq(irq, gpio); ++ } ++ } + + config_item_put(&gpio->item); ++ + return 0; + } + ++static unsigned int gpio_dev_poll(struct file *file, poll_table *wait) ++{ ++ struct gpio_item *gpio = file->private_data; ++ unsigned int mask = 0; ++ ++ poll_wait(file, &gpio->change_wq, wait); ++ if (gpio->changed) ++ mask |= POLLIN | POLLRDNORM; ++ ++ return mask; ++} ++ + static ssize_t gpio_dev_read(struct file *file, char __user *buf, + size_t count, loff_t *offset) + { + struct gpio_item *gpio = file->private_data; + u32 value; + ++ spin_lock_irq(&gpio->lock); ++ while (!gpio->changed) { ++ spin_unlock_irq(&gpio->lock); ++ ++ if (file->f_flags & O_NONBLOCK) ++ return -EAGAIN; ++ ++ if (wait_event_interruptible(gpio->change_wq, gpio->changed)) ++ return -ERESTARTSYS; ++ ++ spin_lock_irq(&gpio->lock); ++ } ++ ++ gpio->changed = 0; + value = pio_readl(gpio->pio, PDSR) & gpio->pin_mask; + ++ spin_unlock_irq(&gpio->lock); ++ + count = min(count, (size_t)4); + if (copy_to_user(buf, &value, count)) + return -EFAULT; ++ + return count; + } + +@@ -338,6 +448,8 @@ static struct file_operations gpio_dev_f + .llseek = no_llseek, + .open = gpio_dev_open, + .release = gpio_dev_release, ++ .fasync = gpio_dev_fasync, ++ .poll = gpio_dev_poll, + .read = gpio_dev_read, + .write = gpio_dev_write, + }; +@@ -632,6 +744,7 @@ static struct config_item *gpio_make_ite + gpio->id = next_id++; + config_item_init_type_name(&gpio->item, name, &gpio_item_type); + spin_lock_init(&gpio->lock); ++ init_waitqueue_head(&gpio->change_wq); + + return &gpio->item; + } diff --git a/packages/linux/linux-2.6.18/gpio-dev-robustness.patch b/packages/linux/linux-2.6.18/gpio-dev-robustness.patch new file mode 100644 index 0000000000..56ef0ebc6c --- /dev/null +++ b/packages/linux/linux-2.6.18/gpio-dev-robustness.patch @@ -0,0 +1,204 @@ +Make the GPIO /dev interface a bit more robust + +Instead of allocating gpio resources on-the-fly as the files are +written, defer it until enable is set to 1 and disallow updates to +any of the other files while enable=1. + +Otherwise, the number of checks in each _store function will rapidly +approach insanity. +--- + arch/avr32/mach-at32ap/pio.c | 99 ++++++++++++++++++------------------------- + 1 file changed, 43 insertions(+), 56 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 17:10:54.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-29 18:11:38.000000000 +0100 +@@ -124,13 +124,6 @@ static unsigned int pio_id(struct pio_de + return pio - pio_dev; + } + +-static void __enable_gpio(struct pio_device *pio, u32 mask) +-{ +- pio_writel(pio, PUER, mask); +- pio_writel(pio, ODR, mask); +- pio_writel(pio, PER, mask); +-} +- + static void __disable_gpio(struct pio_device *pio, u32 mask) + { + pio_writel(pio, PUER, mask); +@@ -251,11 +244,12 @@ static dev_t gpio_devt; + struct gpio_item { + spinlock_t lock; + +- /* Too bad we don't have committable items... */ +- int enabled; +- + struct pio_device *pio; ++ ++ int enabled; ++ int pio_id; + u32 pin_mask; ++ u32 oe_mask; + + int id; + struct class_device *gpio_dev; +@@ -339,10 +333,7 @@ static struct gpio_item *to_gpio_item(st + + static ssize_t gpio_show_gpio_id(struct gpio_item *gpio, char *page) + { +- if (gpio->pio) +- return sprintf(page, "%u\n", pio_id(gpio->pio)); +- else +- return sprintf(page, "-1\n"); ++ return sprintf(page, "%d\n", gpio->pio_id); + } + + static ssize_t gpio_store_gpio_id(struct gpio_item *gpio, +@@ -361,7 +352,7 @@ static ssize_t gpio_store_gpio_id(struct + if (!gpio->enabled) { + ret = -ENXIO; + if ((id < MAX_NR_PIO_DEVICES) && pio_dev[id].regs) { +- gpio->pio = &pio_dev[id]; ++ gpio->pio_id = id; + ret = count; + } + } +@@ -378,9 +369,7 @@ static ssize_t gpio_show_pin_mask(struct + static ssize_t gpio_store_pin_mask(struct gpio_item *gpio, + const char *page, size_t count) + { +- struct pio_device *pio; +- u32 old_mask, new_mask; +- u32 old, new; ++ u32 new_mask; + char *p = (char *)page; + ssize_t ret = -EINVAL; + +@@ -388,47 +377,21 @@ static ssize_t gpio_store_pin_mask(struc + if (!p || (*p && (*p != '\n'))) + return -EINVAL; + +- /* +- * Must have a PIO before we can start allocating pins, but we +- * must not be live. +- */ ++ /* Can't update the pin mask while live. */ + spin_lock(&gpio->lock); +- pio = gpio->pio; +- if (!pio || gpio->enabled) +- goto out; +- +- ret = -EBUSY; +- old_mask = gpio->pin_mask; +- do { +- old = pio->pinmux_mask; +- if ((old & ~old_mask) & new_mask) +- goto out; +- +- new = (old & ~old_mask) | new_mask; +- } while (cmpxchg(&pio->pinmux_mask, old, new) != old); +- +- gpio->pin_mask = new_mask; +- __disable_gpio(pio, old_mask); +- __enable_gpio(pio, new_mask); +- ret = count; +- +-out: ++ if (!gpio->enabled) { ++ gpio->oe_mask &= new_mask; ++ gpio->pin_mask = new_mask; ++ ret = count; ++ } + spin_unlock(&gpio->lock); ++ + return ret; + } + + static ssize_t gpio_show_oe_mask(struct gpio_item *gpio, char *page) + { +- u32 mask = 0; +- +- spin_lock(&gpio->lock); +- if (gpio->pio) { +- mask = pio_readl(gpio->pio, OSR); +- mask &= gpio->pin_mask; +- } +- spin_unlock(&gpio->lock); +- +- return sprintf(page, "0x%08x\n", mask); ++ return sprintf(page, "0x%08x\n", gpio->oe_mask); + } + + static ssize_t gpio_store_oe_mask(struct gpio_item *gpio, +@@ -443,10 +406,8 @@ static ssize_t gpio_store_oe_mask(struct + return -EINVAL; + + spin_lock(&gpio->lock); +- if (gpio->pio) { +- mask &= gpio->pin_mask; +- pio_writel(gpio->pio, ODR, mask ^ gpio->pin_mask); +- pio_writel(gpio->pio, OER, mask); ++ if (!gpio->enabled) { ++ gpio->oe_mask = mask & gpio->pin_mask; + ret = count; + } + spin_unlock(&gpio->lock); +@@ -462,6 +423,8 @@ static ssize_t gpio_show_enabled(struct + static ssize_t gpio_store_enabled(struct gpio_item *gpio, + const char *page, size_t count) + { ++ struct pio_device *pio; ++ u32 old, new; + char *p = (char *)page; + int enabled; + int ret; +@@ -482,6 +445,12 @@ static ssize_t gpio_store_enabled(struct + if (!enabled) { + class_device_unregister(gpio->gpio_dev); + cdev_del(&gpio->char_dev); ++ __disable_gpio(gpio->pio, gpio->pin_mask); ++ pio_dealloc_mask(gpio->pio, gpio->pin_mask); ++ gpio->pio = NULL; ++ } else { ++ if (gpio->pio_id < 0 || !gpio->pin_mask) ++ return -ENODEV; + } + + /* Disallow any updates to gpio_id or pin_mask */ +@@ -492,6 +461,20 @@ static ssize_t gpio_store_enabled(struct + if (!enabled) + return count; + ++ /* Now, try to allocate the pins */ ++ ret = -EBUSY; ++ pio = gpio->pio = &pio_dev[gpio->pio_id]; ++ do { ++ old = pio->pinmux_mask; ++ if (old & gpio->pin_mask) ++ goto err_alloc_pins; ++ ++ new = old | gpio->pin_mask; ++ } while (cmpxchg(&pio->pinmux_mask, old, new) != old); ++ ++ pio_writel(pio, OER, gpio->oe_mask); ++ pio_writel(pio, PER, gpio->pin_mask); ++ + cdev_init(&gpio->char_dev, &gpio_dev_fops); + gpio->char_dev.owner = THIS_MODULE; + ret = cdev_add(&gpio->char_dev, MKDEV(MAJOR(gpio_devt), gpio->id), 1); +@@ -516,9 +499,13 @@ static ssize_t gpio_store_enabled(struct + err_class_dev: + cdev_del(&gpio->char_dev); + err_cdev_add: ++ __disable_gpio(pio, gpio->pin_mask); ++ pio_dealloc_mask(pio, gpio->pin_mask); ++err_alloc_pins: + spin_lock(&gpio->lock); + gpio->enabled = 0; + spin_unlock(&gpio->lock); ++ gpio->pio = NULL; + + return ret; + } diff --git a/packages/linux/linux-2.6.18/husb2_udc-test-mode.patch b/packages/linux/linux-2.6.18/husb2_udc-test-mode.patch new file mode 100644 index 0000000000..f87f71f805 --- /dev/null +++ b/packages/linux/linux-2.6.18/husb2_udc-test-mode.patch @@ -0,0 +1,267 @@ +From hskinnemoen@atmel.com Wed Jan 17 10:05:04 2007 +Date: Wed, 17 Jan 2007 10:05:04 +0100 +From: Haavard Skinnemoen +Subject: [PATCH] Implement USB test modes for husb2_udc + +This patch implements the four test modes defined by the USB 2.0 +standard: Test_J, Test_K, Test_SE0_NAK and Test_Packet. + +This patch also contains a couple of more or less unrelated bug fixes +and debug features: + + * Add "state" file to debugfs for control endpoint. This allows us to + see which state the control logic got stuck in when things go bad. + * REMOTE_WAKEUP requests are ignored instead of stalling the device. + * Bad packet length causes warning message + stall instead of BUG(). + +Signed-off-by: Haavard Skinnemoen +--- + drivers/usb/gadget/husb2_udc.c | 135 +++++++++++++++++++++++++++++++++++++++-- + drivers/usb/gadget/husb2_udc.h | 8 +- + 2 files changed, 135 insertions(+), 8 deletions(-) + +Index: linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/husb2_udc.c 2007-01-16 15:01:42.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.c 2007-01-17 09:56:24.000000000 +0100 +@@ -254,9 +254,20 @@ static void husb2_ep_init_debugfs(struct + if (!ep->debugfs_dma_status) + goto err_dma_status; + } ++ if (ep_is_control(ep)) { ++ ep->debugfs_state ++ = debugfs_create_u32("state", 0400, ep_root, ++ &ep->state); ++ if (!ep->debugfs_state) ++ goto err_state; ++ } ++ + + return; + ++err_state: ++ if (ep_can_dma(ep)) ++ debugfs_remove(ep->debugfs_dma_status); + err_dma_status: + debugfs_remove(ep->debugfs_queue); + err_queue: +@@ -270,6 +281,7 @@ static void husb2_ep_cleanup_debugfs(str + { + debugfs_remove(ep->debugfs_queue); + debugfs_remove(ep->debugfs_dma_status); ++ debugfs_remove(ep->debugfs_state); + debugfs_remove(ep->debugfs_dir); + ep->debugfs_dma_status = NULL; + ep->debugfs_dir = NULL; +@@ -336,7 +348,7 @@ static inline void husb2_cleanup_debugfs + } + #endif + +-static void copy_to_fifo(void __iomem *fifo, void *buf, int len) ++static void copy_to_fifo(void __iomem *fifo, const void *buf, int len) + { + unsigned long tmp; + +@@ -1302,6 +1314,90 @@ static inline void set_address(struct hu + husb2_writel(udc, CTRL, regval); + } + ++static int do_test_mode(struct husb2_udc *udc) ++{ ++ static const char test_packet_buffer[] = { ++ /* JKJKJKJK * 9 */ ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++ /* JJKKJJKK * 8 */ ++ 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, ++ /* JJKKJJKK * 8 */ ++ 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, ++ /* JJJJJJJKKKKKKK * 8 */ ++ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, ++ /* JJJJJJJK * 8 */ ++ 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD, ++ /* {JKKKKKKK * 10}, JK */ ++ 0xFC,0x7E,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0x7E ++ }; ++ struct husb2_ep *ep; ++ int test_mode; ++ ++ test_mode = udc->test_mode; ++ ++ /* Start from a clean slate */ ++ reset_all_endpoints(udc); ++ ++ switch (test_mode) { ++ case 0x0100: ++ /* Test_J */ ++ husb2_writel(udc, TST, HUSB2_BIT(TST_J_MODE)); ++ printk("udc: Entering Test_J mode...\n"); ++ break; ++ case 0x0200: ++ /* Test_K */ ++ husb2_writel(udc, TST, HUSB2_BIT(TST_K_MODE)); ++ printk("udc: Entering Test_K mode...\n"); ++ break; ++ case 0x0300: ++ /* ++ * Test_SE0_NAK: Force high-speed mode and set up ep0 ++ * for Bulk IN transfers ++ */ ++ ep = &husb2_ep[0]; ++ husb2_writel(udc, TST, ++ HUSB2_BF(SPEED_CFG, HUSB2_SPEED_CFG_FORCE_HIGH)); ++ husb2_ep_writel(ep, CFG, ++ HUSB2_BF(EPT_SIZE, HUSB2_EPT_SIZE_64) ++ | HUSB2_BIT(EPT_DIR) ++ | HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_BULK) ++ | HUSB2_BF(BK_NUMBER, 1)); ++ if (!(husb2_ep_readl(ep, CFG) & HUSB2_BIT(EPT_MAPPED))) { ++ set_protocol_stall(udc, ep); ++ printk("udc: Test_SE0_NAK: ep0 not mapped\n"); ++ } else { ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(EPT_ENABLE)); ++ printk("udc: Entering Test_SE0_NAK mode...\n"); ++ } ++ break; ++ case 0x0400: ++ /* Test_Packet */ ++ ep = &husb2_ep[0]; ++ husb2_ep_writel(ep, CFG, ++ HUSB2_BF(EPT_SIZE, HUSB2_EPT_SIZE_64) ++ | HUSB2_BIT(EPT_DIR) ++ | HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_BULK) ++ | HUSB2_BF(BK_NUMBER, 1)); ++ if (!(husb2_ep_readl(ep, CFG) & HUSB2_BIT(EPT_MAPPED))) { ++ set_protocol_stall(udc, ep); ++ printk("udc: Test_Packet: ep0 not mapped\n"); ++ } else { ++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(EPT_ENABLE)); ++ husb2_writel(udc, TST, HUSB2_BIT(TST_PKT_MODE)); ++ copy_to_fifo(ep->fifo, test_packet_buffer, ++ sizeof(test_packet_buffer)); ++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(TX_PK_RDY)); ++ printk("udc: Entering Test_Packet mode...\n"); ++ } ++ break; ++ default: ++ printk("udc: Invalid test mode: 0x%04x\n", test_mode); ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ + static int handle_ep0_setup(struct husb2_udc *udc, struct husb2_ep *ep, + struct usb_ctrlrequest *crq) + { +@@ -1341,8 +1437,13 @@ static int handle_ep0_setup(struct husb2 + + case USB_REQ_CLEAR_FEATURE: { + if (crq->bRequestType == USB_RECIP_DEVICE) { +- /* We don't support TEST_MODE */ +- goto stall; ++ if (crq->wValue ++ == __constant_cpu_to_le16(USB_DEVICE_REMOTE_WAKEUP)) { ++ /* TODO: Handle REMOTE_WAKEUP */ ++ } else { ++ /* CLEAR_FEATURE doesn't make sense for TEST_MODE */ ++ goto stall; ++ } + } else if (crq->bRequestType == USB_RECIP_ENDPOINT) { + struct husb2_ep *target; + +@@ -1365,8 +1466,18 @@ static int handle_ep0_setup(struct husb2 + + case USB_REQ_SET_FEATURE: { + if (crq->bRequestType == USB_RECIP_DEVICE) { +- /* We don't support TEST_MODE */ +- goto stall; ++ if (crq->wValue ++ == __constant_cpu_to_le16(USB_DEVICE_TEST_MODE)) { ++ send_status(udc, ep); ++ ep->state = STATUS_STAGE_TEST; ++ udc->test_mode = le16_to_cpu(crq->wIndex); ++ return 0; ++ } else if (crq->wValue ++ == __constant_cpu_to_le16(USB_DEVICE_REMOTE_WAKEUP)) { ++ /* TODO: Handle REMOTE_WAKEUP */ ++ } else { ++ goto stall; ++ } + } else if (crq->bRequestType == USB_RECIP_ENDPOINT) { + struct husb2_ep *target; + +@@ -1476,6 +1587,12 @@ restart: + HUSB2_BIT(TX_COMPLETE)); + ep->state = WAIT_FOR_SETUP; + break; ++ case STATUS_STAGE_TEST: ++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(TX_COMPLETE)); ++ ep->state = WAIT_FOR_SETUP; ++ if (do_test_mode(udc)) ++ set_protocol_stall(udc, ep); ++ break; + default: + printk(KERN_ERR + "udc: %s: TXCOMP: Invalid endpoint state %d, " +@@ -1550,7 +1667,13 @@ restart: + + pkt_len = HUSB2_BFEXT(BYTE_COUNT, husb2_ep_readl(ep, STA)); + DBG(DBG_HW, "Packet length: %u\n", pkt_len); +- BUG_ON(pkt_len != sizeof(crq)); ++ if (pkt_len != sizeof(crq)) { ++ printk(KERN_WARNING ++ "udc: Invalid packet length %u (expected %lu)\n", ++ pkt_len, sizeof(crq)); ++ set_protocol_stall(udc, ep); ++ return; ++ } + + DBG(DBG_FIFO, "Copying ctrl request from 0x%p:\n", ep->fifo); + copy_from_fifo(crq.data, ep->fifo, sizeof(crq)); +Index: linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.h +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/husb2_udc.h 2007-01-16 15:01:42.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.h 2007-01-17 09:54:03.000000000 +0100 +@@ -21,7 +21,7 @@ + #define HUSB2_TST_CNT_A 0x00d4 + #define HUSB2_TST_CNT_B 0x00d8 + #define HUSB2_TST_MODE_REG 0x00dc +-#define HUSB2_TST 0x00f0 ++#define HUSB2_TST 0x00e0 + + /* USB endpoint register offsets */ + #define HUSB2_EPT_CFG 0x0000 +@@ -113,7 +113,7 @@ + #define HUSB2_TST_J_MODE_SIZE 1 + #define HUSB2_TST_K_MODE_OFFSET 3 + #define HUSB2_TST_K_MODE_SIZE 1 +-#define HUSB2_TST_PKT_MODE_OFFSE 4 ++#define HUSB2_TST_PKT_MODE_OFFSET 4 + #define HUSB2_TST_PKT_MODE_SIZE 1 + #define HUSB2_OPMODE2_OFFSET 5 + #define HUSB2_OPMODE2_SIZE 1 +@@ -304,6 +304,7 @@ enum husb2_ctrl_state { + STATUS_STAGE_IN, + STATUS_STAGE_OUT, + STATUS_STAGE_ADDR, ++ STATUS_STAGE_TEST, + }; + /* + EP_STATE_IDLE, +@@ -343,6 +344,7 @@ struct husb2_ep { + struct dentry *debugfs_dir; + struct dentry *debugfs_queue; + struct dentry *debugfs_dma_status; ++ struct dentry *debugfs_state; + #endif + }; + #define HUSB2_EP_CAP_ISOC 0x0001 +@@ -381,6 +383,8 @@ struct husb2_udc { + struct clk *pclk; + struct clk *hclk; + ++ int test_mode; ++ + #ifdef CONFIG_DEBUG_FS + struct dentry *debugfs_root; + struct dentry *debugfs_regs; diff --git a/packages/linux/linux-2.6.18/jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch b/packages/linux/linux-2.6.18/jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch new file mode 100644 index 0000000000..8efbd78d7a --- /dev/null +++ b/packages/linux/linux-2.6.18/jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch @@ -0,0 +1,37 @@ +From 686ee9491d8566eff95cf728eb5d6c9921f92bd2 Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Tue, 28 Nov 2006 12:56:51 +0100 +Subject: [PATCH] MTD: jffs2_can_mark_obsolete() should return 0 for dataflash + +Attempting to write something to a file on a jffs2 filesystem using +mtd_dataflash often results in the following BUG: + +jffs2_flash_writev(): Non-contiguous write to 00825720 +wbuf was previously 00825300-0082530c +kernel BUG at /home/hskinnemoen/git/linux-devel/fs/jffs2/wbuf.c:786! + +Fix this by returning 0 from jffs2_can_mark_obsolete() when running +on top of dataflash. + +Signed-off-by: Haavard Skinnemoen +--- + fs/jffs2/os-linux.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h +index 9f41fc0..a037fa4 100644 +--- a/fs/jffs2/os-linux.h ++++ b/fs/jffs2/os-linux.h +@@ -106,7 +106,8 @@ static inline void jffs2_init_inode_info + #ifdef CONFIG_JFFS2_SUMMARY + #define jffs2_can_mark_obsolete(c) (0) + #else +-#define jffs2_can_mark_obsolete(c) (c->mtd->flags & (MTD_BIT_WRITEABLE)) ++#define jffs2_can_mark_obsolete(c) (c->mtd->flags & (MTD_BIT_WRITEABLE) \ ++ && !jffs2_dataflash(c)) + #endif + + #define jffs2_cleanmarker_oob(c) (c->mtd->type == MTD_NANDFLASH) +-- +1.4.3.3 + diff --git a/packages/linux/linux-2.6.18/kbuild-add-unifdef.patch b/packages/linux/linux-2.6.18/kbuild-add-unifdef.patch new file mode 100644 index 0000000000..78922a98af --- /dev/null +++ b/packages/linux/linux-2.6.18/kbuild-add-unifdef.patch @@ -0,0 +1,1020 @@ +From 01f1c8799ad8b23c190d59cf1c9e28e6fed390a4 Mon Sep 17 00:00:00 2001 +From: Sam Ravnborg +Date: Sun, 23 Jul 2006 20:39:59 +0200 +Subject: [PATCH] kbuild: add unifdef + +This patch contains a raw copy of unifdef.c +Next patch will modify it and add infrastructure to use it +Adding unifdef to the kernel is acked by the author. + +The reason to add unifdef as part of the kernel source is that it is not +yet a common utility on most distributions. + +Signed-off-by: Sam Ravnborg +--- + scripts/unifdef.c | 998 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 998 insertions(+) + +Index: linux-2.6.18-avr32/scripts/unifdef.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/scripts/unifdef.c 2006-10-30 15:59:47.000000000 +0100 +@@ -0,0 +1,998 @@ ++/* ++ * Copyright (c) 2002 - 2005 Tony Finch . All rights reserved. ++ * ++ * This code is derived from software contributed to Berkeley by Dave Yost. ++ * It was rewritten to support ANSI C by Tony Finch. The original version of ++ * unifdef carried the following copyright notice. None of its code remains ++ * in this version (though some of the names remain). ++ * ++ * Copyright (c) 1985, 1993 ++ * The Regents of the University of California. All rights reserved. ++ * ++ * 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. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. ++ */ ++ ++#include ++ ++#ifndef lint ++#if 0 ++static const char copyright[] = ++"@(#) Copyright (c) 1985, 1993\n\ ++ The Regents of the University of California. All rights reserved.\n"; ++#endif ++#ifdef __IDSTRING ++__IDSTRING(Berkeley, "@(#)unifdef.c 8.1 (Berkeley) 6/6/93"); ++__IDSTRING(NetBSD, "$NetBSD: unifdef.c,v 1.8 2000/07/03 02:51:36 matt Exp $"); ++__IDSTRING(dotat, "$dotat: things/unifdef.c,v 1.171 2005/03/08 12:38:48 fanf2 Exp $"); ++#endif ++#endif /* not lint */ ++#ifdef __FBSDID ++__FBSDID("$FreeBSD: /repoman/r/ncvs/src/usr.bin/unifdef/unifdef.c,v 1.20 2005/05/21 09:55:09 ru Exp $"); ++#endif ++ ++/* ++ * unifdef - remove ifdef'ed lines ++ * ++ * Wishlist: ++ * provide an option which will append the name of the ++ * appropriate symbol after #else's and #endif's ++ * provide an option which will check symbols after ++ * #else's and #endif's to see that they match their ++ * corresponding #ifdef or #ifndef ++ * ++ * The first two items above require better buffer handling, which would ++ * also make it possible to handle all "dodgy" directives correctly. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++size_t strlcpy(char *dst, const char *src, size_t siz); ++ ++/* types of input lines: */ ++typedef enum { ++ LT_TRUEI, /* a true #if with ignore flag */ ++ LT_FALSEI, /* a false #if with ignore flag */ ++ LT_IF, /* an unknown #if */ ++ LT_TRUE, /* a true #if */ ++ LT_FALSE, /* a false #if */ ++ LT_ELIF, /* an unknown #elif */ ++ LT_ELTRUE, /* a true #elif */ ++ LT_ELFALSE, /* a false #elif */ ++ LT_ELSE, /* #else */ ++ LT_ENDIF, /* #endif */ ++ LT_DODGY, /* flag: directive is not on one line */ ++ LT_DODGY_LAST = LT_DODGY + LT_ENDIF, ++ LT_PLAIN, /* ordinary line */ ++ LT_EOF, /* end of file */ ++ LT_COUNT ++} Linetype; ++ ++static char const * const linetype_name[] = { ++ "TRUEI", "FALSEI", "IF", "TRUE", "FALSE", ++ "ELIF", "ELTRUE", "ELFALSE", "ELSE", "ENDIF", ++ "DODGY TRUEI", "DODGY FALSEI", ++ "DODGY IF", "DODGY TRUE", "DODGY FALSE", ++ "DODGY ELIF", "DODGY ELTRUE", "DODGY ELFALSE", ++ "DODGY ELSE", "DODGY ENDIF", ++ "PLAIN", "EOF" ++}; ++ ++/* state of #if processing */ ++typedef enum { ++ IS_OUTSIDE, ++ IS_FALSE_PREFIX, /* false #if followed by false #elifs */ ++ IS_TRUE_PREFIX, /* first non-false #(el)if is true */ ++ IS_PASS_MIDDLE, /* first non-false #(el)if is unknown */ ++ IS_FALSE_MIDDLE, /* a false #elif after a pass state */ ++ IS_TRUE_MIDDLE, /* a true #elif after a pass state */ ++ IS_PASS_ELSE, /* an else after a pass state */ ++ IS_FALSE_ELSE, /* an else after a true state */ ++ IS_TRUE_ELSE, /* an else after only false states */ ++ IS_FALSE_TRAILER, /* #elifs after a true are false */ ++ IS_COUNT ++} Ifstate; ++ ++static char const * const ifstate_name[] = { ++ "OUTSIDE", "FALSE_PREFIX", "TRUE_PREFIX", ++ "PASS_MIDDLE", "FALSE_MIDDLE", "TRUE_MIDDLE", ++ "PASS_ELSE", "FALSE_ELSE", "TRUE_ELSE", ++ "FALSE_TRAILER" ++}; ++ ++/* state of comment parser */ ++typedef enum { ++ NO_COMMENT = false, /* outside a comment */ ++ C_COMMENT, /* in a comment like this one */ ++ CXX_COMMENT, /* between // and end of line */ ++ STARTING_COMMENT, /* just after slash-backslash-newline */ ++ FINISHING_COMMENT, /* star-backslash-newline in a C comment */ ++ CHAR_LITERAL, /* inside '' */ ++ STRING_LITERAL /* inside "" */ ++} Comment_state; ++ ++static char const * const comment_name[] = { ++ "NO", "C", "CXX", "STARTING", "FINISHING", "CHAR", "STRING" ++}; ++ ++/* state of preprocessor line parser */ ++typedef enum { ++ LS_START, /* only space and comments on this line */ ++ LS_HASH, /* only space, comments, and a hash */ ++ LS_DIRTY /* this line can't be a preprocessor line */ ++} Line_state; ++ ++static char const * const linestate_name[] = { ++ "START", "HASH", "DIRTY" ++}; ++ ++/* ++ * Minimum translation limits from ISO/IEC 9899:1999 5.2.4.1 ++ */ ++#define MAXDEPTH 64 /* maximum #if nesting */ ++#define MAXLINE 4096 /* maximum length of line */ ++#define MAXSYMS 4096 /* maximum number of symbols */ ++ ++/* ++ * Sometimes when editing a keyword the replacement text is longer, so ++ * we leave some space at the end of the tline buffer to accommodate this. ++ */ ++#define EDITSLOP 10 ++ ++/* ++ * Globals. ++ */ ++ ++static bool complement; /* -c: do the complement */ ++static bool debugging; /* -d: debugging reports */ ++static bool iocccok; /* -e: fewer IOCCC errors */ ++static bool killconsts; /* -k: eval constant #ifs */ ++static bool lnblank; /* -l: blank deleted lines */ ++static bool lnnum; /* -n: add #line directives */ ++static bool symlist; /* -s: output symbol list */ ++static bool text; /* -t: this is a text file */ ++ ++static const char *symname[MAXSYMS]; /* symbol name */ ++static const char *value[MAXSYMS]; /* -Dsym=value */ ++static bool ignore[MAXSYMS]; /* -iDsym or -iUsym */ ++static int nsyms; /* number of symbols */ ++ ++static FILE *input; /* input file pointer */ ++static const char *filename; /* input file name */ ++static int linenum; /* current line number */ ++ ++static char tline[MAXLINE+EDITSLOP];/* input buffer plus space */ ++static char *keyword; /* used for editing #elif's */ ++ ++static Comment_state incomment; /* comment parser state */ ++static Line_state linestate; /* #if line parser state */ ++static Ifstate ifstate[MAXDEPTH]; /* #if processor state */ ++static bool ignoring[MAXDEPTH]; /* ignore comments state */ ++static int stifline[MAXDEPTH]; /* start of current #if */ ++static int depth; /* current #if nesting */ ++static int delcount; /* count of deleted lines */ ++static bool keepthis; /* don't delete constant #if */ ++ ++static int exitstat; /* program exit status */ ++ ++static void addsym(bool, bool, char *); ++static void debug(const char *, ...); ++static void done(void); ++static void error(const char *); ++static int findsym(const char *); ++static void flushline(bool); ++static Linetype getline(void); ++static Linetype ifeval(const char **); ++static void ignoreoff(void); ++static void ignoreon(void); ++static void keywordedit(const char *); ++static void nest(void); ++static void process(void); ++static const char *skipcomment(const char *); ++static const char *skipsym(const char *); ++static void state(Ifstate); ++static int strlcmp(const char *, const char *, size_t); ++static void unnest(void); ++static void usage(void); ++ ++#define endsym(c) (!isalpha((unsigned char)c) && !isdigit((unsigned char)c) && c != '_') ++ ++/* ++ * The main program. ++ */ ++int ++main(int argc, char *argv[]) ++{ ++ int opt; ++ ++ while ((opt = getopt(argc, argv, "i:D:U:I:cdeklnst")) != -1) ++ switch (opt) { ++ case 'i': /* treat stuff controlled by these symbols as text */ ++ /* ++ * For strict backwards-compatibility the U or D ++ * should be immediately after the -i but it doesn't ++ * matter much if we relax that requirement. ++ */ ++ opt = *optarg++; ++ if (opt == 'D') ++ addsym(true, true, optarg); ++ else if (opt == 'U') ++ addsym(true, false, optarg); ++ else ++ usage(); ++ break; ++ case 'D': /* define a symbol */ ++ addsym(false, true, optarg); ++ break; ++ case 'U': /* undef a symbol */ ++ addsym(false, false, optarg); ++ break; ++ case 'I': ++ /* no-op for compatibility with cpp */ ++ break; ++ case 'c': /* treat -D as -U and vice versa */ ++ complement = true; ++ break; ++ case 'd': ++ debugging = true; ++ break; ++ case 'e': /* fewer errors from dodgy lines */ ++ iocccok = true; ++ break; ++ case 'k': /* process constant #ifs */ ++ killconsts = true; ++ break; ++ case 'l': /* blank deleted lines instead of omitting them */ ++ lnblank = true; ++ break; ++ case 'n': /* add #line directive after deleted lines */ ++ lnnum = true; ++ break; ++ case 's': /* only output list of symbols that control #ifs */ ++ symlist = true; ++ break; ++ case 't': /* don't parse C comments */ ++ text = true; ++ break; ++ default: ++ usage(); ++ } ++ argc -= optind; ++ argv += optind; ++ if (argc > 1) { ++ errx(2, "can only do one file"); ++ } else if (argc == 1 && strcmp(*argv, "-") != 0) { ++ filename = *argv; ++ input = fopen(filename, "r"); ++ if (input == NULL) ++ err(2, "can't open %s", filename); ++ } else { ++ filename = "[stdin]"; ++ input = stdin; ++ } ++ process(); ++ abort(); /* bug */ ++} ++ ++static void ++usage(void) ++{ ++ fprintf(stderr, "usage: unifdef [-cdeklnst] [-Ipath]" ++ " [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]\n"); ++ exit(2); ++} ++ ++/* ++ * A state transition function alters the global #if processing state ++ * in a particular way. The table below is indexed by the current ++ * processing state and the type of the current line. ++ * ++ * Nesting is handled by keeping a stack of states; some transition ++ * functions increase or decrease the depth. They also maintain the ++ * ignore state on a stack. In some complicated cases they have to ++ * alter the preprocessor directive, as follows. ++ * ++ * When we have processed a group that starts off with a known-false ++ * #if/#elif sequence (which has therefore been deleted) followed by a ++ * #elif that we don't understand and therefore must keep, we edit the ++ * latter into a #if to keep the nesting correct. ++ * ++ * When we find a true #elif in a group, the following block will ++ * always be kept and the rest of the sequence after the next #elif or ++ * #else will be discarded. We edit the #elif into a #else and the ++ * following directive to #endif since this has the desired behaviour. ++ * ++ * "Dodgy" directives are split across multiple lines, the most common ++ * example being a multi-line comment hanging off the right of the ++ * directive. We can handle them correctly only if there is no change ++ * from printing to dropping (or vice versa) caused by that directive. ++ * If the directive is the first of a group we have a choice between ++ * failing with an error, or passing it through unchanged instead of ++ * evaluating it. The latter is not the default to avoid questions from ++ * users about unifdef unexpectedly leaving behind preprocessor directives. ++ */ ++typedef void state_fn(void); ++ ++/* report an error */ ++static void Eelif (void) { error("Inappropriate #elif"); } ++static void Eelse (void) { error("Inappropriate #else"); } ++static void Eendif(void) { error("Inappropriate #endif"); } ++static void Eeof (void) { error("Premature EOF"); } ++static void Eioccc(void) { error("Obfuscated preprocessor control line"); } ++/* plain line handling */ ++static void print (void) { flushline(true); } ++static void drop (void) { flushline(false); } ++/* output lacks group's start line */ ++static void Strue (void) { drop(); ignoreoff(); state(IS_TRUE_PREFIX); } ++static void Sfalse(void) { drop(); ignoreoff(); state(IS_FALSE_PREFIX); } ++static void Selse (void) { drop(); state(IS_TRUE_ELSE); } ++/* print/pass this block */ ++static void Pelif (void) { print(); ignoreoff(); state(IS_PASS_MIDDLE); } ++static void Pelse (void) { print(); state(IS_PASS_ELSE); } ++static void Pendif(void) { print(); unnest(); } ++/* discard this block */ ++static void Dfalse(void) { drop(); ignoreoff(); state(IS_FALSE_TRAILER); } ++static void Delif (void) { drop(); ignoreoff(); state(IS_FALSE_MIDDLE); } ++static void Delse (void) { drop(); state(IS_FALSE_ELSE); } ++static void Dendif(void) { drop(); unnest(); } ++/* first line of group */ ++static void Fdrop (void) { nest(); Dfalse(); } ++static void Fpass (void) { nest(); Pelif(); } ++static void Ftrue (void) { nest(); Strue(); } ++static void Ffalse(void) { nest(); Sfalse(); } ++/* variable pedantry for obfuscated lines */ ++static void Oiffy (void) { if (!iocccok) Eioccc(); Fpass(); ignoreon(); } ++static void Oif (void) { if (!iocccok) Eioccc(); Fpass(); } ++static void Oelif (void) { if (!iocccok) Eioccc(); Pelif(); } ++/* ignore comments in this block */ ++static void Idrop (void) { Fdrop(); ignoreon(); } ++static void Itrue (void) { Ftrue(); ignoreon(); } ++static void Ifalse(void) { Ffalse(); ignoreon(); } ++/* edit this line */ ++static void Mpass (void) { strncpy(keyword, "if ", 4); Pelif(); } ++static void Mtrue (void) { keywordedit("else\n"); state(IS_TRUE_MIDDLE); } ++static void Melif (void) { keywordedit("endif\n"); state(IS_FALSE_TRAILER); } ++static void Melse (void) { keywordedit("endif\n"); state(IS_FALSE_ELSE); } ++ ++static state_fn * const trans_table[IS_COUNT][LT_COUNT] = { ++/* IS_OUTSIDE */ ++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Eendif, ++ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eendif, ++ print, done }, ++/* IS_FALSE_PREFIX */ ++{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Strue, Sfalse,Selse, Dendif, ++ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Eioccc,Eioccc,Eioccc,Eioccc, ++ drop, Eeof }, ++/* IS_TRUE_PREFIX */ ++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Dfalse,Dfalse,Dfalse,Delse, Dendif, ++ Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc, ++ print, Eeof }, ++/* IS_PASS_MIDDLE */ ++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Pelif, Mtrue, Delif, Pelse, Pendif, ++ Oiffy, Oiffy, Fpass, Oif, Oif, Pelif, Oelif, Oelif, Pelse, Pendif, ++ print, Eeof }, ++/* IS_FALSE_MIDDLE */ ++{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Pelif, Mtrue, Delif, Pelse, Pendif, ++ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc, ++ drop, Eeof }, ++/* IS_TRUE_MIDDLE */ ++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Melif, Melif, Melif, Melse, Pendif, ++ Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Pendif, ++ print, Eeof }, ++/* IS_PASS_ELSE */ ++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Pendif, ++ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Pendif, ++ print, Eeof }, ++/* IS_FALSE_ELSE */ ++{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Dendif, ++ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Eioccc, ++ drop, Eeof }, ++/* IS_TRUE_ELSE */ ++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Dendif, ++ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eioccc, ++ print, Eeof }, ++/* IS_FALSE_TRAILER */ ++{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Dendif, ++ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Eioccc, ++ drop, Eeof } ++/*TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF ++ TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF (DODGY) ++ PLAIN EOF */ ++}; ++ ++/* ++ * State machine utility functions ++ */ ++static void ++done(void) ++{ ++ if (incomment) ++ error("EOF in comment"); ++ exit(exitstat); ++} ++static void ++ignoreoff(void) ++{ ++ if (depth == 0) ++ abort(); /* bug */ ++ ignoring[depth] = ignoring[depth-1]; ++} ++static void ++ignoreon(void) ++{ ++ ignoring[depth] = true; ++} ++static void ++keywordedit(const char *replacement) ++{ ++ strlcpy(keyword, replacement, tline + sizeof(tline) - keyword); ++ print(); ++} ++static void ++nest(void) ++{ ++ depth += 1; ++ if (depth >= MAXDEPTH) ++ error("Too many levels of nesting"); ++ stifline[depth] = linenum; ++} ++static void ++unnest(void) ++{ ++ if (depth == 0) ++ abort(); /* bug */ ++ depth -= 1; ++} ++static void ++state(Ifstate is) ++{ ++ ifstate[depth] = is; ++} ++ ++/* ++ * Write a line to the output or not, according to command line options. ++ */ ++static void ++flushline(bool keep) ++{ ++ if (symlist) ++ return; ++ if (keep ^ complement) { ++ if (lnnum && delcount > 0) ++ printf("#line %d\n", linenum); ++ fputs(tline, stdout); ++ delcount = 0; ++ } else { ++ if (lnblank) ++ putc('\n', stdout); ++ exitstat = 1; ++ delcount += 1; ++ } ++} ++ ++/* ++ * The driver for the state machine. ++ */ ++static void ++process(void) ++{ ++ Linetype lineval; ++ ++ for (;;) { ++ linenum++; ++ lineval = getline(); ++ trans_table[ifstate[depth]][lineval](); ++ debug("process %s -> %s depth %d", ++ linetype_name[lineval], ++ ifstate_name[ifstate[depth]], depth); ++ } ++} ++ ++/* ++ * Parse a line and determine its type. We keep the preprocessor line ++ * parser state between calls in the global variable linestate, with ++ * help from skipcomment(). ++ */ ++static Linetype ++getline(void) ++{ ++ const char *cp; ++ int cursym; ++ int kwlen; ++ Linetype retval; ++ Comment_state wascomment; ++ ++ if (fgets(tline, MAXLINE, input) == NULL) ++ return (LT_EOF); ++ retval = LT_PLAIN; ++ wascomment = incomment; ++ cp = skipcomment(tline); ++ if (linestate == LS_START) { ++ if (*cp == '#') { ++ linestate = LS_HASH; ++ cp = skipcomment(cp + 1); ++ } else if (*cp != '\0') ++ linestate = LS_DIRTY; ++ } ++ if (!incomment && linestate == LS_HASH) { ++ keyword = tline + (cp - tline); ++ cp = skipsym(cp); ++ kwlen = cp - keyword; ++ /* no way can we deal with a continuation inside a keyword */ ++ if (strncmp(cp, "\\\n", 2) == 0) ++ Eioccc(); ++ if (strlcmp("ifdef", keyword, kwlen) == 0 || ++ strlcmp("ifndef", keyword, kwlen) == 0) { ++ cp = skipcomment(cp); ++ if ((cursym = findsym(cp)) < 0) ++ retval = LT_IF; ++ else { ++ retval = (keyword[2] == 'n') ++ ? LT_FALSE : LT_TRUE; ++ if (value[cursym] == NULL) ++ retval = (retval == LT_TRUE) ++ ? LT_FALSE : LT_TRUE; ++ if (ignore[cursym]) ++ retval = (retval == LT_TRUE) ++ ? LT_TRUEI : LT_FALSEI; ++ } ++ cp = skipsym(cp); ++ } else if (strlcmp("if", keyword, kwlen) == 0) ++ retval = ifeval(&cp); ++ else if (strlcmp("elif", keyword, kwlen) == 0) ++ retval = ifeval(&cp) - LT_IF + LT_ELIF; ++ else if (strlcmp("else", keyword, kwlen) == 0) ++ retval = LT_ELSE; ++ else if (strlcmp("endif", keyword, kwlen) == 0) ++ retval = LT_ENDIF; ++ else { ++ linestate = LS_DIRTY; ++ retval = LT_PLAIN; ++ } ++ cp = skipcomment(cp); ++ if (*cp != '\0') { ++ linestate = LS_DIRTY; ++ if (retval == LT_TRUE || retval == LT_FALSE || ++ retval == LT_TRUEI || retval == LT_FALSEI) ++ retval = LT_IF; ++ if (retval == LT_ELTRUE || retval == LT_ELFALSE) ++ retval = LT_ELIF; ++ } ++ if (retval != LT_PLAIN && (wascomment || incomment)) { ++ retval += LT_DODGY; ++ if (incomment) ++ linestate = LS_DIRTY; ++ } ++ /* skipcomment should have changed the state */ ++ if (linestate == LS_HASH) ++ abort(); /* bug */ ++ } ++ if (linestate == LS_DIRTY) { ++ while (*cp != '\0') ++ cp = skipcomment(cp + 1); ++ } ++ debug("parser %s comment %s line", ++ comment_name[incomment], linestate_name[linestate]); ++ return (retval); ++} ++ ++/* ++ * These are the binary operators that are supported by the expression ++ * evaluator. Note that if support for division is added then we also ++ * need short-circuiting booleans because of divide-by-zero. ++ */ ++static int op_lt(int a, int b) { return (a < b); } ++static int op_gt(int a, int b) { return (a > b); } ++static int op_le(int a, int b) { return (a <= b); } ++static int op_ge(int a, int b) { return (a >= b); } ++static int op_eq(int a, int b) { return (a == b); } ++static int op_ne(int a, int b) { return (a != b); } ++static int op_or(int a, int b) { return (a || b); } ++static int op_and(int a, int b) { return (a && b); } ++ ++/* ++ * An evaluation function takes three arguments, as follows: (1) a pointer to ++ * an element of the precedence table which lists the operators at the current ++ * level of precedence; (2) a pointer to an integer which will receive the ++ * value of the expression; and (3) a pointer to a char* that points to the ++ * expression to be evaluated and that is updated to the end of the expression ++ * when evaluation is complete. The function returns LT_FALSE if the value of ++ * the expression is zero, LT_TRUE if it is non-zero, or LT_IF if the ++ * expression could not be evaluated. ++ */ ++struct ops; ++ ++typedef Linetype eval_fn(const struct ops *, int *, const char **); ++ ++static eval_fn eval_table, eval_unary; ++ ++/* ++ * The precedence table. Expressions involving binary operators are evaluated ++ * in a table-driven way by eval_table. When it evaluates a subexpression it ++ * calls the inner function with its first argument pointing to the next ++ * element of the table. Innermost expressions have special non-table-driven ++ * handling. ++ */ ++static const struct ops { ++ eval_fn *inner; ++ struct op { ++ const char *str; ++ int (*fn)(int, int); ++ } op[5]; ++} eval_ops[] = { ++ { eval_table, { { "||", op_or } } }, ++ { eval_table, { { "&&", op_and } } }, ++ { eval_table, { { "==", op_eq }, ++ { "!=", op_ne } } }, ++ { eval_unary, { { "<=", op_le }, ++ { ">=", op_ge }, ++ { "<", op_lt }, ++ { ">", op_gt } } } ++}; ++ ++/* ++ * Function for evaluating the innermost parts of expressions, ++ * viz. !expr (expr) defined(symbol) symbol number ++ * We reset the keepthis flag when we find a non-constant subexpression. ++ */ ++static Linetype ++eval_unary(const struct ops *ops, int *valp, const char **cpp) ++{ ++ const char *cp; ++ char *ep; ++ int sym; ++ ++ cp = skipcomment(*cpp); ++ if (*cp == '!') { ++ debug("eval%d !", ops - eval_ops); ++ cp++; ++ if (eval_unary(ops, valp, &cp) == LT_IF) ++ return (LT_IF); ++ *valp = !*valp; ++ } else if (*cp == '(') { ++ cp++; ++ debug("eval%d (", ops - eval_ops); ++ if (eval_table(eval_ops, valp, &cp) == LT_IF) ++ return (LT_IF); ++ cp = skipcomment(cp); ++ if (*cp++ != ')') ++ return (LT_IF); ++ } else if (isdigit((unsigned char)*cp)) { ++ debug("eval%d number", ops - eval_ops); ++ *valp = strtol(cp, &ep, 0); ++ cp = skipsym(cp); ++ } else if (strncmp(cp, "defined", 7) == 0 && endsym(cp[7])) { ++ cp = skipcomment(cp+7); ++ debug("eval%d defined", ops - eval_ops); ++ if (*cp++ != '(') ++ return (LT_IF); ++ cp = skipcomment(cp); ++ sym = findsym(cp); ++ if (sym < 0) ++ return (LT_IF); ++ *valp = (value[sym] != NULL); ++ cp = skipsym(cp); ++ cp = skipcomment(cp); ++ if (*cp++ != ')') ++ return (LT_IF); ++ keepthis = false; ++ } else if (!endsym(*cp)) { ++ debug("eval%d symbol", ops - eval_ops); ++ sym = findsym(cp); ++ if (sym < 0) ++ return (LT_IF); ++ if (value[sym] == NULL) ++ *valp = 0; ++ else { ++ *valp = strtol(value[sym], &ep, 0); ++ if (*ep != '\0' || ep == value[sym]) ++ return (LT_IF); ++ } ++ cp = skipsym(cp); ++ keepthis = false; ++ } else { ++ debug("eval%d bad expr", ops - eval_ops); ++ return (LT_IF); ++ } ++ ++ *cpp = cp; ++ debug("eval%d = %d", ops - eval_ops, *valp); ++ return (*valp ? LT_TRUE : LT_FALSE); ++} ++ ++/* ++ * Table-driven evaluation of binary operators. ++ */ ++static Linetype ++eval_table(const struct ops *ops, int *valp, const char **cpp) ++{ ++ const struct op *op; ++ const char *cp; ++ int val; ++ ++ debug("eval%d", ops - eval_ops); ++ cp = *cpp; ++ if (ops->inner(ops+1, valp, &cp) == LT_IF) ++ return (LT_IF); ++ for (;;) { ++ cp = skipcomment(cp); ++ for (op = ops->op; op->str != NULL; op++) ++ if (strncmp(cp, op->str, strlen(op->str)) == 0) ++ break; ++ if (op->str == NULL) ++ break; ++ cp += strlen(op->str); ++ debug("eval%d %s", ops - eval_ops, op->str); ++ if (ops->inner(ops+1, &val, &cp) == LT_IF) ++ return (LT_IF); ++ *valp = op->fn(*valp, val); ++ } ++ ++ *cpp = cp; ++ debug("eval%d = %d", ops - eval_ops, *valp); ++ return (*valp ? LT_TRUE : LT_FALSE); ++} ++ ++/* ++ * Evaluate the expression on a #if or #elif line. If we can work out ++ * the result we return LT_TRUE or LT_FALSE accordingly, otherwise we ++ * return just a generic LT_IF. ++ */ ++static Linetype ++ifeval(const char **cpp) ++{ ++ int ret; ++ int val; ++ ++ debug("eval %s", *cpp); ++ keepthis = killconsts ? false : true; ++ ret = eval_table(eval_ops, &val, cpp); ++ debug("eval = %d", val); ++ return (keepthis ? LT_IF : ret); ++} ++ ++/* ++ * Skip over comments, strings, and character literals and stop at the ++ * next character position that is not whitespace. Between calls we keep ++ * the comment state in the global variable incomment, and we also adjust ++ * the global variable linestate when we see a newline. ++ * XXX: doesn't cope with the buffer splitting inside a state transition. ++ */ ++static const char * ++skipcomment(const char *cp) ++{ ++ if (text || ignoring[depth]) { ++ for (; isspace((unsigned char)*cp); cp++) ++ if (*cp == '\n') ++ linestate = LS_START; ++ return (cp); ++ } ++ while (*cp != '\0') ++ /* don't reset to LS_START after a line continuation */ ++ if (strncmp(cp, "\\\n", 2) == 0) ++ cp += 2; ++ else switch (incomment) { ++ case NO_COMMENT: ++ if (strncmp(cp, "/\\\n", 3) == 0) { ++ incomment = STARTING_COMMENT; ++ cp += 3; ++ } else if (strncmp(cp, "/*", 2) == 0) { ++ incomment = C_COMMENT; ++ cp += 2; ++ } else if (strncmp(cp, "//", 2) == 0) { ++ incomment = CXX_COMMENT; ++ cp += 2; ++ } else if (strncmp(cp, "\'", 1) == 0) { ++ incomment = CHAR_LITERAL; ++ linestate = LS_DIRTY; ++ cp += 1; ++ } else if (strncmp(cp, "\"", 1) == 0) { ++ incomment = STRING_LITERAL; ++ linestate = LS_DIRTY; ++ cp += 1; ++ } else if (strncmp(cp, "\n", 1) == 0) { ++ linestate = LS_START; ++ cp += 1; ++ } else if (strchr(" \t", *cp) != NULL) { ++ cp += 1; ++ } else ++ return (cp); ++ continue; ++ case CXX_COMMENT: ++ if (strncmp(cp, "\n", 1) == 0) { ++ incomment = NO_COMMENT; ++ linestate = LS_START; ++ } ++ cp += 1; ++ continue; ++ case CHAR_LITERAL: ++ case STRING_LITERAL: ++ if ((incomment == CHAR_LITERAL && cp[0] == '\'') || ++ (incomment == STRING_LITERAL && cp[0] == '\"')) { ++ incomment = NO_COMMENT; ++ cp += 1; ++ } else if (cp[0] == '\\') { ++ if (cp[1] == '\0') ++ cp += 1; ++ else ++ cp += 2; ++ } else if (strncmp(cp, "\n", 1) == 0) { ++ if (incomment == CHAR_LITERAL) ++ error("unterminated char literal"); ++ else ++ error("unterminated string literal"); ++ } else ++ cp += 1; ++ continue; ++ case C_COMMENT: ++ if (strncmp(cp, "*\\\n", 3) == 0) { ++ incomment = FINISHING_COMMENT; ++ cp += 3; ++ } else if (strncmp(cp, "*/", 2) == 0) { ++ incomment = NO_COMMENT; ++ cp += 2; ++ } else ++ cp += 1; ++ continue; ++ case STARTING_COMMENT: ++ if (*cp == '*') { ++ incomment = C_COMMENT; ++ cp += 1; ++ } else if (*cp == '/') { ++ incomment = CXX_COMMENT; ++ cp += 1; ++ } else { ++ incomment = NO_COMMENT; ++ linestate = LS_DIRTY; ++ } ++ continue; ++ case FINISHING_COMMENT: ++ if (*cp == '/') { ++ incomment = NO_COMMENT; ++ cp += 1; ++ } else ++ incomment = C_COMMENT; ++ continue; ++ default: ++ abort(); /* bug */ ++ } ++ return (cp); ++} ++ ++/* ++ * Skip over an identifier. ++ */ ++static const char * ++skipsym(const char *cp) ++{ ++ while (!endsym(*cp)) ++ ++cp; ++ return (cp); ++} ++ ++/* ++ * Look for the symbol in the symbol table. If is is found, we return ++ * the symbol table index, else we return -1. ++ */ ++static int ++findsym(const char *str) ++{ ++ const char *cp; ++ int symind; ++ ++ cp = skipsym(str); ++ if (cp == str) ++ return (-1); ++ if (symlist) { ++ printf("%.*s\n", (int)(cp-str), str); ++ /* we don't care about the value of the symbol */ ++ return (0); ++ } ++ for (symind = 0; symind < nsyms; ++symind) { ++ if (strlcmp(symname[symind], str, cp-str) == 0) { ++ debug("findsym %s %s", symname[symind], ++ value[symind] ? value[symind] : ""); ++ return (symind); ++ } ++ } ++ return (-1); ++} ++ ++/* ++ * Add a symbol to the symbol table. ++ */ ++static void ++addsym(bool ignorethis, bool definethis, char *sym) ++{ ++ int symind; ++ char *val; ++ ++ symind = findsym(sym); ++ if (symind < 0) { ++ if (nsyms >= MAXSYMS) ++ errx(2, "too many symbols"); ++ symind = nsyms++; ++ } ++ symname[symind] = sym; ++ ignore[symind] = ignorethis; ++ val = sym + (skipsym(sym) - sym); ++ if (definethis) { ++ if (*val == '=') { ++ value[symind] = val+1; ++ *val = '\0'; ++ } else if (*val == '\0') ++ value[symind] = ""; ++ else ++ usage(); ++ } else { ++ if (*val != '\0') ++ usage(); ++ value[symind] = NULL; ++ } ++} ++ ++/* ++ * Compare s with n characters of t. ++ * The same as strncmp() except that it checks that s[n] == '\0'. ++ */ ++static int ++strlcmp(const char *s, const char *t, size_t n) ++{ ++ while (n-- && *t != '\0') ++ if (*s != *t) ++ return ((unsigned char)*s - (unsigned char)*t); ++ else ++ ++s, ++t; ++ return ((unsigned char)*s); ++} ++ ++/* ++ * Diagnostics. ++ */ ++static void ++debug(const char *msg, ...) ++{ ++ va_list ap; ++ ++ if (debugging) { ++ va_start(ap, msg); ++ vwarnx(msg, ap); ++ va_end(ap); ++ } ++} ++ ++static void ++error(const char *msg) ++{ ++ if (depth == 0) ++ warnx("%s: %d: %s", filename, linenum, msg); ++ else ++ warnx("%s: %d: %s (#if line %d depth %d)", ++ filename, linenum, msg, stifline[depth], depth); ++ errx(2, "output may be truncated"); ++} diff --git a/packages/linux/linux-2.6.18/kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch b/packages/linux/linux-2.6.18/kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch new file mode 100644 index 0000000000..a9a67daff3 --- /dev/null +++ b/packages/linux/linux-2.6.18/kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch @@ -0,0 +1,30 @@ +From 14a036d2dc304797f3624c06bd6d2a1e9b59e45a Mon Sep 17 00:00:00 2001 +From: Sam Ravnborg +Date: Sun, 23 Jul 2006 20:41:30 +0200 +Subject: [PATCH] kbuild: replace use of strlcpy with a dedicated implmentation in unifdef + +Signed-off-by: Sam Ravnborg +--- + scripts/unifdef.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +Index: linux-2.6.18-avr32/scripts/unifdef.c +=================================================================== +--- linux-2.6.18-avr32.orig/scripts/unifdef.c 2006-10-30 15:58:53.000000000 +0100 ++++ linux-2.6.18-avr32/scripts/unifdef.c 2006-10-30 15:58:59.000000000 +0100 +@@ -450,7 +450,14 @@ ignoreon(void) + static void + keywordedit(const char *replacement) + { +- strlcpy(keyword, replacement, tline + sizeof(tline) - keyword); ++ size_t size = tline + sizeof(tline) - keyword; ++ char *dst = keyword; ++ const char *src = replacement; ++ if (size != 0) { ++ while ((--size != 0) && (*src != '\0')) ++ *dst++ = *src++; ++ *dst = '\0'; ++ } + print(); + } + static void diff --git a/packages/linux/linux-2.6.18/kbuild-use-in-kernel-unifdef.patch b/packages/linux/linux-2.6.18/kbuild-use-in-kernel-unifdef.patch new file mode 100644 index 0000000000..b2c7930bb7 --- /dev/null +++ b/packages/linux/linux-2.6.18/kbuild-use-in-kernel-unifdef.patch @@ -0,0 +1,56 @@ +From 07aea3a71fc6b07744691eec2dfea705a7b30280 Mon Sep 17 00:00:00 2001 +From: Sam Ravnborg +Date: Sun, 23 Jul 2006 20:47:50 +0200 +Subject: [PATCH] kbuild: use in-kernel unifdef + +Let headers_install use in-kernel unifdef + +Signed-off-by: Sam Ravnborg +--- + Makefile | 4 ++-- + scripts/Makefile | 3 +++ + scripts/Makefile.headersinst | 2 +- + 3 files changed, 6 insertions(+), 3 deletions(-) + +Index: linux-2.6.18-avr32/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/Makefile 2006-10-26 10:20:21.000000000 +0200 ++++ linux-2.6.18-avr32/Makefile 2006-10-30 15:59:06.000000000 +0100 +@@ -893,8 +893,8 @@ INSTALL_HDR_PATH=$(objtree)/usr + export INSTALL_HDR_PATH + + PHONY += headers_install +-headers_install: include/linux/version.h +- $(Q)unifdef -Ux /dev/null ++headers_install: include/linux/version.h scripts_basic FORCE ++ $(Q)$(MAKE) $(build)=scripts scripts/unifdef + $(Q)rm -rf $(INSTALL_HDR_PATH)/include + $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include + +Index: linux-2.6.18-avr32/scripts/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/scripts/Makefile 2006-09-20 05:42:06.000000000 +0200 ++++ linux-2.6.18-avr32/scripts/Makefile 2006-10-30 15:59:06.000000000 +0100 +@@ -15,6 +15,9 @@ hostprogs-$(CONFIG_IKCONFIG) += bin2 + + always := $(hostprogs-y) + ++# The following hostprogs-y programs are only build on demand ++hostprogs-y += unifdef ++ + subdir-$(CONFIG_MODVERSIONS) += genksyms + subdir-$(CONFIG_MODULES) += mod + +Index: linux-2.6.18-avr32/scripts/Makefile.headersinst +=================================================================== +--- linux-2.6.18-avr32.orig/scripts/Makefile.headersinst 2006-09-20 05:42:06.000000000 +0200 ++++ linux-2.6.18-avr32/scripts/Makefile.headersinst 2006-10-30 15:59:06.000000000 +0100 +@@ -7,7 +7,7 @@ + # + # ========================================================================== + +-UNIFDEF := unifdef -U__KERNEL__ ++UNIFDEF := scripts/unifdef -U__KERNEL__ + + # Eliminate the contents of (and inclusions of) compiler.h + HDRSED := sed -e "s/ inline / __inline__ /g" \ diff --git a/packages/linux/linux-2.6.18/lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch b/packages/linux/linux-2.6.18/lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch new file mode 100644 index 0000000000..b354047f60 --- /dev/null +++ b/packages/linux/linux-2.6.18/lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch @@ -0,0 +1,16 @@ +Index: linux-2.6.18/drivers/video/sidsafb.c +=================================================================== +--- linux-2.6.18.orig/drivers/video/sidsafb.c 2006-12-20 13:43:17.000000000 +0100 ++++ linux-2.6.18/drivers/video/sidsafb.c 2006-12-20 13:46:44.000000000 +0100 +@@ -765,7 +765,10 @@ + printk("fb%d: Atmel LCDC at 0x%08lx (mapped at %p), irq %lu\n", + info->node, info->fix.mmio_start, sinfo->regs, sinfo->irq_base); + +- memset_io(info->screen_base, 0, info->fix.smem_len); ++ /* Only clear framebuffer if fbmem_start was not declared, assume the ++ * user have filled the framebuffer before the kernel was started. */ ++ if (!fb_data->fbmem_start) ++ memset_io(info->screen_base, 0, info->fix.smem_len); + info->var.activate |= FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW; + ret = fb_set_var(info, &info->var); + if (ret) diff --git a/packages/linux/linux-2.6.18/lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch b/packages/linux/linux-2.6.18/lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch new file mode 100644 index 0000000000..fea5d6cf80 --- /dev/null +++ b/packages/linux/linux-2.6.18/lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch @@ -0,0 +1,38 @@ +Index: linux-2.6.18/drivers/video/sidsafb.c +=================================================================== +--- linux-2.6.18.orig/drivers/video/sidsafb.c 2007-01-11 13:35:02.000000000 +0100 ++++ linux-2.6.18/drivers/video/sidsafb.c 2007-01-11 14:22:56.000000000 +0100 +@@ -661,6 +661,7 @@ + struct fb_info *info; + struct sidsafb_info *sinfo; + const struct resource *mmio_resource; ++ int preinitialized = 0; + int ret; + + pr_debug("sidsafb_probe BEGIN\n"); +@@ -681,7 +682,7 @@ + sinfo = info->par; + sinfo->info = info; + sinfo->pdev = pdev; +- sinfo->guard_time = 1; ++ sinfo->guard_time = 2; + + spin_lock_init(&sinfo->lock); + sidsafb_set_fbinfo(sinfo); +@@ -711,6 +712,7 @@ + info->fix.smem_len = fb_data->fbmem_size; + info->screen_base = ioremap(info->fix.smem_start, + info->fix.smem_len); ++ preinitialized = 1; + } else { + dma_addr_t paddr; + +@@ -767,7 +769,7 @@ + + /* Only clear framebuffer if fbmem_start was not declared, assume the + * user have filled the framebuffer before the kernel was started. */ +- if (!fb_data->fbmem_start) ++ if (!preinitialized) + memset_io(info->screen_base, 0, info->fix.smem_len); + info->var.activate |= FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW; + ret = fb_set_var(info, &info->var); diff --git a/packages/linux/linux-2.6.18/lcdc-wait-for-vsync.patch b/packages/linux/linux-2.6.18/lcdc-wait-for-vsync.patch new file mode 100644 index 0000000000..7c1cd663cb --- /dev/null +++ b/packages/linux/linux-2.6.18/lcdc-wait-for-vsync.patch @@ -0,0 +1,152 @@ +--- + drivers/video/sidsafb.c | 68 +++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 61 insertions(+), 7 deletions(-) + +Index: linux-2.6.18-rc6-mm1/drivers/video/sidsafb.c +=================================================================== +--- linux-2.6.18-rc6-mm1.orig/drivers/video/sidsafb.c 2006-09-11 13:03:46.000000000 +0200 ++++ linux-2.6.18-rc6-mm1/drivers/video/sidsafb.c 2006-09-11 13:38:52.000000000 +0200 +@@ -11,6 +11,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -38,7 +39,8 @@ struct sidsafb_info { + struct fb_info * info; + void __iomem * regs; + unsigned long irq_base; +- wait_queue_head_t vsync_wait; ++ int wait_for_vsync; ++ struct completion vsync_complete; + unsigned int guard_time; + struct clk *hclk; + struct clk *pixclk; +@@ -169,6 +171,38 @@ static struct fb_fix_screeninfo sidsafb_ + .accel = FB_ACCEL_NONE, + }; + ++/* ++ * Let the user decide whether FBIOPAN_DISPLAY waits for the next ++ * vsync or not. ++ */ ++static ssize_t ++vsync_pan_show(struct device *dev, struct device_attribute *attr, char *buf) ++{ ++ struct fb_info *info = dev_get_drvdata(dev); ++ struct sidsafb_info *sinfo = info->par; ++ ++ return sprintf(buf, "%d\n", sinfo->wait_for_vsync); ++} ++ ++static ssize_t ++vsync_pan_store(struct device *dev, struct device_attribute *attr, ++ const char *buf, size_t count) ++{ ++ struct fb_info *info = dev_get_drvdata(dev); ++ struct sidsafb_info *sinfo = info->par; ++ unsigned long val; ++ ++ val = simple_strtoul(buf, NULL, 0); ++ if (val) ++ sinfo->wait_for_vsync = 1; ++ else ++ sinfo->wait_for_vsync = 0; ++ ++ return count; ++} ++ ++static DEVICE_ATTR(vsync_pan, 0644, vsync_pan_show, vsync_pan_store); ++ + static void sidsafb_update_dma(struct fb_info *info, + struct fb_var_screeninfo *var) + { +@@ -513,10 +547,25 @@ static int sidsafb_setcolreg(unsigned in + static int sidsafb_pan_display(struct fb_var_screeninfo *var, + struct fb_info *info) + { ++ struct sidsafb_info *sinfo = info->par; ++ + pr_debug("sidsafb_pan_display\n"); + + sidsafb_update_dma(info, var); + ++ if (sinfo->wait_for_vsync) { ++ spin_lock_irq(&sinfo->lock); ++ lcdc_writel(sinfo, LCD_ICR, LCDC_BIT(LCD_ICR_EOFIC)); ++ lcdc_writel(sinfo, LCD_IER, LCDC_BIT(LCD_IER_EOFIE)); ++ init_completion(&sinfo->vsync_complete); ++ lcdc_readl(sinfo, LCD_IMR); ++ spin_unlock_irq(&sinfo->lock); ++ ++ wait_for_completion(&sinfo->vsync_complete); ++ ++ lcdc_writel(sinfo, LCD_IDR, LCDC_BIT(LCD_IDR_EOFID)); ++ } ++ + return 0; + } + +@@ -545,7 +594,7 @@ static irqreturn_t sidsafb_interrupt(int + + lcdc_writel(sinfo, LCD_ICR, LCDC_BIT(LCD_ICR_EOFIC)); + status &= ~LCDC_BIT(LCD_ISR_EOFIS); +- wake_up(&sinfo->vsync_wait); ++ complete(&sinfo->vsync_complete); + } + + if (status) { +@@ -600,8 +649,6 @@ static int __devinit sidsafb_set_fbinfo( + info->fbops = &sidsafb_ops; + info->pseudo_palette = sinfo->pseudo_palette; + +- init_waitqueue_head(&sinfo->vsync_wait); +- + return 0; + } + +@@ -700,18 +747,21 @@ static int __devinit sidsafb_probe(struc + goto unregister_irqs; + } + ++ platform_set_drvdata(pdev, info); ++ ret = device_create_file(&pdev->dev, &dev_attr_vsync_pan); ++ if (ret) ++ goto free_cmap; ++ + /* + * Tell the world that we're ready to go + */ + ret = register_framebuffer(info); + if (ret) +- goto free_cmap; ++ goto remove_attrs; + + printk("fb%d: Atmel LCDC at 0x%08lx (mapped at %p), irq %lu\n", + info->node, info->fix.mmio_start, sinfo->regs, sinfo->irq_base); + +- platform_set_drvdata(pdev, info); +- + memset_io(info->screen_base, 0, info->fix.smem_len); + info->var.activate |= FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW; + ret = fb_set_var(info, &info->var); +@@ -724,6 +774,8 @@ static int __devinit sidsafb_probe(struc + return 0; + + ++remove_attrs: ++ device_remove_file(&pdev->dev, &dev_attr_vsync_pan); + free_cmap: + fb_dealloc_cmap(&info->cmap); + unregister_irqs: +@@ -761,6 +813,8 @@ static int __devexit sidsafb_remove(stru + /* TODO: Restore original state */ + unregister_framebuffer(info); + ++ device_remove_file(&pdev->dev, &dev_attr_vsync_pan); ++ + fb_dealloc_cmap(&info->cmap); + free_irq(sinfo->irq_base, info); + iounmap(sinfo->regs); diff --git a/packages/linux/linux-2.6.18/ltv350qv-add-initial_power_state-param.patch b/packages/linux/linux-2.6.18/ltv350qv-add-initial_power_state-param.patch new file mode 100644 index 0000000000..a877b0ea37 --- /dev/null +++ b/packages/linux/linux-2.6.18/ltv350qv-add-initial_power_state-param.patch @@ -0,0 +1,25 @@ +Index: linux-2.6.18/drivers/video/backlight/ltv350qv.c +=================================================================== +--- linux-2.6.18.orig/drivers/video/backlight/ltv350qv.c 2007-01-11 14:55:39.000000000 +0100 ++++ linux-2.6.18/drivers/video/backlight/ltv350qv.c 2007-01-11 14:59:23.000000000 +0100 +@@ -19,6 +19,11 @@ + + #define POWER_IS_ON(pwr) ((pwr) <= FB_BLANK_NORMAL) + ++static int initial_power_state = FB_BLANK_POWERDOWN; ++ ++module_param(initial_power_state, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); ++MODULE_PARM_DESC(initial_power_state, "Set initial power state of LCD"); ++ + struct ltv350qv { + struct spi_device *spi; + u8 *buffer; +@@ -178,7 +183,7 @@ + return -ENOMEM; + + lcd->spi = spi; +- lcd->power = FB_BLANK_POWERDOWN; ++ lcd->power = initial_power_state; + init_MUTEX(&lcd->lock); + lcd->buffer = kzalloc(8, GFP_KERNEL); + diff --git a/packages/linux/linux-2.6.18/ltv350qv-lcd-driver.patch b/packages/linux/linux-2.6.18/ltv350qv-lcd-driver.patch new file mode 100644 index 0000000000..ce0250e3fd --- /dev/null +++ b/packages/linux/linux-2.6.18/ltv350qv-lcd-driver.patch @@ -0,0 +1,355 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Wed Dec 21 14:52:09 2005 +0100 +Subject: [PATCH] LTV350QV LCD driver + +This patch adds support for powering on and off the Samsung LTV350QV +LCD panel via SPI. The driver responds to framebuffer power management, +it powers off the panel on reboot/halt/poweroff, and it can also be +controlled through sysfs. The panel is powered up when the module is +loaded and off when the module is unloaded. + +--- + drivers/video/backlight/Kconfig | 12 + + drivers/video/backlight/Makefile | 1 + drivers/video/backlight/ltv350qv.c | 301 +++++++++++++++++++++++++++++++++++++ + 3 files changed, 314 insertions(+) + +Index: linux-2.6.18-avr32/drivers/video/backlight/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/video/backlight/Kconfig 2006-09-11 20:30:16.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/video/backlight/Kconfig 2006-09-11 20:31:24.000000000 +0200 +@@ -42,6 +42,18 @@ config LCD_DEVICE + depends on LCD_CLASS_DEVICE + default y + ++config LCD_LTV350QV ++ tristate "Samsung LTV350QV LCD Panel" ++ depends on LCD_DEVICE && SPI ++ default n ++ help ++ If you have a Samsung LTV350QV LCD panel, say y to include a ++ power control driver for it. The panel starts up in power ++ off state, so you need this driver in order to see any ++ output. ++ ++ The LTV350QV panel is present on most ATSTK1000 boards. ++ + config BACKLIGHT_CORGI + tristate "Sharp Corgi Backlight Driver (SL Series)" + depends on BACKLIGHT_DEVICE && PXA_SHARPSL +Index: linux-2.6.18-avr32/drivers/video/backlight/Makefile +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/video/backlight/Makefile 2006-09-11 20:30:23.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/video/backlight/Makefile 2006-09-11 20:31:24.000000000 +0200 +@@ -5,3 +5,4 @@ obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += + obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o + obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o + obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o ++obj-$(CONFIG_LCD_LTV350QV) += ltv350qv.o +Index: linux-2.6.18-avr32/drivers/video/backlight/ltv350qv.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.18-avr32/drivers/video/backlight/ltv350qv.c 2006-09-11 20:31:24.000000000 +0200 +@@ -0,0 +1,301 @@ ++/* ++ * Power control for Samsung LTV350QV Quarter VGA LCD Panel ++ * ++ * Copyright (C) 2006 Atmel 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 ++ ++#define POWER_IS_ON(pwr) ((pwr) <= FB_BLANK_NORMAL) ++ ++struct ltv350qv { ++ struct spi_device *spi; ++ u8 *buffer; ++ int power; ++ struct semaphore lock; ++ struct lcd_device *ld; ++ struct list_head list; ++ int halt_done; ++}; ++ ++static LIST_HEAD(lcd_list); ++ ++static int ltv350qv_write_reg(struct ltv350qv *lcd, u8 reg, u16 val) ++{ ++ struct spi_message msg; ++ struct spi_transfer index_xfer = { ++ .len = 3, ++ .cs_change = 1, ++ }; ++ struct spi_transfer value_xfer = { ++ .len = 3, ++ .cs_change = 1, ++ }; ++ ++ spi_message_init(&msg); ++ ++ /* register index */ ++ lcd->buffer[0] = 0x74; ++ lcd->buffer[1] = 0x00; ++ lcd->buffer[2] = reg & 0x7f; ++ index_xfer.tx_buf = lcd->buffer; ++ spi_message_add_tail(&index_xfer, &msg); ++ ++ /* register value */ ++ lcd->buffer[4] = 0x76; ++ lcd->buffer[5] = val >> 8; ++ lcd->buffer[6] = val; ++ value_xfer.tx_buf = lcd->buffer + 4; ++ spi_message_add_tail(&value_xfer, &msg); ++ ++ return spi_sync(lcd->spi, &msg); ++} ++ ++#define write_reg(_spi, reg, val) \ ++ do { \ ++ ret = ltv350qv_write_reg(_spi, reg, val); \ ++ if (ret) \ ++ goto out; \ ++ } while (0) ++ ++static int ltv350qv_power_on(struct ltv350qv *lcd) ++{ ++ int ret; ++ ++ write_reg(lcd, 9, 0x0000); ++ msleep(15); ++ write_reg(lcd, 9, 0x4000); ++ write_reg(lcd, 10, 0x2000); ++ write_reg(lcd, 9, 0x4055); ++ msleep(55); ++ write_reg(lcd, 1, 0x409d); ++ write_reg(lcd, 2, 0x0204); ++ write_reg(lcd, 3, 0x0100); ++ write_reg(lcd, 4, 0x3000); ++ write_reg(lcd, 5, 0x4003); ++ write_reg(lcd, 6, 0x000a); ++ write_reg(lcd, 7, 0x0021); ++ write_reg(lcd, 8, 0x0c00); ++ write_reg(lcd, 10, 0x0103); ++ write_reg(lcd, 11, 0x0301); ++ write_reg(lcd, 12, 0x1f0f); ++ write_reg(lcd, 13, 0x1f0f); ++ write_reg(lcd, 14, 0x0707); ++ write_reg(lcd, 15, 0x0307); ++ write_reg(lcd, 16, 0x0707); ++ write_reg(lcd, 17, 0x0000); ++ write_reg(lcd, 18, 0x0004); ++ write_reg(lcd, 19, 0x0000); ++ ++ msleep(20); ++ write_reg(lcd, 9, 0x4a55); ++ write_reg(lcd, 5, 0x5003); ++ ++out: ++ return ret; ++} ++ ++static int ltv350qv_power_off(struct ltv350qv *lcd) ++{ ++ int ret; ++ ++ /* GON -> 0, POC -> 0 */ ++ write_reg(lcd, 9, 0x4055); ++ /* DSC -> 0 */ ++ write_reg(lcd, 5, 0x4003); ++ /* VCOMG -> 0 */ ++ write_reg(lcd, 10, 0x2103); ++ ++ msleep(1); ++ ++ /* AP[2:0] -> 000 */ ++ write_reg(lcd, 9, 0x4050); ++ ++out: ++ return ret; ++} ++ ++static int ltv350qv_power(struct ltv350qv *lcd, int power) ++{ ++ int ret = 0; ++ ++ down(&lcd->lock); ++ ++ if (POWER_IS_ON(power) && !POWER_IS_ON(lcd->power)) ++ ret = ltv350qv_power_on(lcd); ++ else if (!POWER_IS_ON(power) && POWER_IS_ON(lcd->power)) ++ ret = ltv350qv_power_off(lcd); ++ ++ if (!ret) ++ lcd->power = power; ++ ++ up(&lcd->lock); ++ ++ return ret; ++} ++ ++static int ltv350qv_set_power(struct lcd_device *ld, int power) ++{ ++ struct ltv350qv *lcd; ++ ++ lcd = class_get_devdata(&ld->class_dev); ++ return ltv350qv_power(lcd, power); ++} ++ ++static int ltv350qv_get_power(struct lcd_device *ld) ++{ ++ struct ltv350qv *lcd; ++ ++ lcd = class_get_devdata(&ld->class_dev); ++ return lcd->power; ++} ++ ++static struct lcd_properties lcd_properties = { ++ .owner = THIS_MODULE, ++ .get_power = ltv350qv_get_power, ++ .set_power = ltv350qv_set_power, ++}; ++ ++static int __devinit ltv350qv_probe(struct spi_device *spi) ++{ ++ struct ltv350qv *lcd; ++ struct lcd_device *ld; ++ int ret; ++ ++ lcd = kzalloc(sizeof(struct ltv350qv), GFP_KERNEL); ++ if (!lcd) ++ return -ENOMEM; ++ ++ lcd->spi = spi; ++ lcd->power = FB_BLANK_POWERDOWN; ++ init_MUTEX(&lcd->lock); ++ lcd->buffer = kzalloc(8, GFP_KERNEL); ++ ++ spi->mode = SPI_MODE_3; ++ spi->bits_per_word = 8; ++ ret = spi_setup(spi); ++ if (ret) ++ goto out_free_lcd; ++ ++ ld = lcd_device_register("ltv350qv", lcd, &lcd_properties); ++ if (IS_ERR(ld)) { ++ ret = PTR_ERR(ld); ++ goto out_free_lcd; ++ } ++ lcd->ld = ld; ++ ++ list_add(&lcd->list, &lcd_list); ++ ++ ret = ltv350qv_power(lcd, FB_BLANK_UNBLANK); ++ if (ret) ++ goto out_unregister; ++ ++ dev_set_drvdata(&spi->dev, lcd); ++ ++ return 0; ++ ++out_unregister: ++ lcd_device_unregister(ld); ++out_free_lcd: ++ kfree(lcd); ++ return ret; ++} ++ ++static int __devexit ltv350qv_remove(struct spi_device *spi) ++{ ++ struct ltv350qv *lcd = dev_get_drvdata(&spi->dev); ++ ++ ltv350qv_power(lcd, FB_BLANK_POWERDOWN); ++ list_del(&lcd->list); ++ lcd_device_unregister(lcd->ld); ++ kfree(lcd); ++ ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int ltv350qv_suspend(struct spi_device *spi, ++ pm_message_t state, u32 level) ++{ ++ struct ltv350qv *lcd = dev_get_drvdata(&spi->dev); ++ ++ if (level == SUSPEND_POWER_DOWN) ++ return ltv350qv_power(lcd, FB_BLANK_POWERDOWN); ++ ++ return 0; ++} ++ ++static int ltv350qv_resume(struct spi_device *spi, u32 level) ++{ ++ struct ltv350qv *lcd = dev_get_drvdata(&spi->dev); ++ ++ if (level == RESUME_POWER_ON) ++ return ltv350qv_power(lcd, FB_BLANK_UNBLANK); ++ ++ return 0; ++} ++#else ++#define ltv350qv_suspend NULL ++#define ltv350qv_resume NULL ++#endif ++ ++/* Power down all displays on reboot, poweroff or halt */ ++static int ltv350qv_halt(struct notifier_block *nb, unsigned long event, ++ void *p) ++{ ++ struct ltv350qv *lcd; ++ ++ list_for_each_entry(lcd, &lcd_list, list) { ++ if (!lcd->halt_done) ++ ltv350qv_power(lcd, FB_BLANK_POWERDOWN); ++ lcd->halt_done = 1; ++ } ++ ++ return NOTIFY_OK; ++} ++ ++static struct spi_driver ltv350qv_driver = { ++ .driver = { ++ .name = "ltv350qv", ++ .bus = &spi_bus_type, ++ .owner = THIS_MODULE, ++ }, ++ ++ .probe = ltv350qv_probe, ++ .remove = __devexit_p(ltv350qv_remove), ++ .suspend = ltv350qv_suspend, ++ .resume = ltv350qv_resume, ++}; ++ ++static struct notifier_block ltv350qv_notifier = { ++ .notifier_call = ltv350qv_halt, ++}; ++ ++static int __init ltv350qv_init(void) ++{ ++ register_reboot_notifier(<v350qv_notifier); ++ return spi_register_driver(<v350qv_driver); ++} ++ ++static void __exit ltv350qv_exit(void) ++{ ++ unregister_reboot_notifier(<v350qv_notifier); ++ spi_unregister_driver(<v350qv_driver); ++} ++module_init(ltv350qv_init); ++module_exit(ltv350qv_exit); ++ ++MODULE_AUTHOR("Atmel Norway"); ++MODULE_DESCRIPTION("Samsung LTV350QV LCD Driver"); ++MODULE_LICENSE("GPL"); diff --git a/packages/linux/linux-2.6.18/mmc-add-bit-manipulating-macros.patch b/packages/linux/linux-2.6.18/mmc-add-bit-manipulating-macros.patch new file mode 100644 index 0000000000..544e447580 --- /dev/null +++ b/packages/linux/linux-2.6.18/mmc-add-bit-manipulating-macros.patch @@ -0,0 +1,321 @@ +Index: linux-2.6.18/drivers/mmc/atmel-mci.c +=================================================================== +--- linux-2.6.18.orig/drivers/mmc/atmel-mci.c 2007-01-15 16:36:59.000000000 +0100 ++++ linux-2.6.18/drivers/mmc/atmel-mci.c 2007-01-16 13:18:40.000000000 +0100 +@@ -45,6 +45,7 @@ + EVENT_STOP_COMPLETE, + EVENT_STOP_ERROR, + EVENT_DMA_ERROR, ++ EVENT_CARD_DETECT, + }; + + struct atmel_mci_dma { +@@ -572,9 +589,8 @@ + * Data might complete before command for very short transfers + * (like READ_SCR) + */ +- if (test_bit(EVENT_CMD_COMPLETE, &host->completed_events) +- && (!data->stop +- || test_bit(EVENT_STOP_COMPLETE, &host->completed_events))) ++ if (mci_cmd_is_complete(host) ++ && (!data->stop || mci_stop_is_complete(host))) + atmci_request_end(host->mmc, data->mrq); + } + +@@ -604,11 +620,11 @@ + host->pending_events, host->completed_events, + mci_readl(host, IMR)); + +- if (test_and_clear_bit(EVENT_CMD_ERROR, &host->pending_events)) { ++ if (mci_clear_cmd_error_is_pending(host)) { + struct mmc_command *cmd; + +- set_bit(EVENT_CMD_ERROR, &host->completed_events); +- clear_bit(EVENT_CMD_COMPLETE, &host->pending_events); ++ mci_set_cmd_error_complete(host); ++ mci_clear_cmd_pending(host); + cmd = host->mrq->cmd; + + if (cmd->data) { +@@ -620,28 +636,27 @@ + atmci_command_error(mmc, cmd, host->error_status); + atmci_request_end(mmc, cmd->mrq); + } +- if (test_and_clear_bit(EVENT_STOP_ERROR, &host->pending_events)) { +- set_bit(EVENT_STOP_ERROR, &host->completed_events); +- clear_bit(EVENT_STOP_COMPLETE, &host->pending_events); ++ if (mci_clear_stop_error_is_pending(host)) { ++ mci_set_stop_error_complete(host); ++ mci_clear_stop_pending(host); + atmci_command_error(mmc, host->mrq->stop, + host->error_status); + if (!host->data) + atmci_request_end(mmc, host->mrq); + } +- if (test_and_clear_bit(EVENT_CMD_COMPLETE, &host->pending_events)) { +- set_bit(EVENT_CMD_COMPLETE, &host->completed_events); +- if (!mrq->data +- || test_bit(EVENT_DATA_COMPLETE, &host->completed_events)) ++ if (mci_clear_cmd_is_pending(host)) { ++ mci_set_cmd_complete(host); ++ if (!mrq->data || mci_data_is_complete(host)) + atmci_request_end(mmc, mrq); + } +- if (test_and_clear_bit(EVENT_STOP_COMPLETE, &host->pending_events)) { +- set_bit(EVENT_STOP_COMPLETE, &host->completed_events); +- if (test_bit(EVENT_DATA_COMPLETE, &host->completed_events)) ++ if (mci_clear_stop_is_pending(host)) { ++ mci_set_stop_complete(host); ++ if (mci_data_is_complete(host)) + atmci_request_end(mmc, mrq); + } +- if (test_and_clear_bit(EVENT_DMA_ERROR, &host->pending_events)) { +- set_bit(EVENT_DMA_ERROR, &host->completed_events); +- clear_bit(EVENT_DATA_COMPLETE, &host->pending_events); ++ if (mci_clear_dma_error_is_pending(host)) { ++ mci_set_dma_error_complete(host); ++ mci_clear_data_pending(host); + + /* DMA controller got bus error => invalid address */ + data->error = MMC_ERR_INVALID; +@@ -650,18 +665,17 @@ + mmc_hostname(mmc), host->data->bytes_xfered); + + if (data->stop +- && !test_and_set_bit(EVENT_STOP_SENT, +- &host->completed_events)) ++ && !mci_set_stop_sent_is_completed(host)) + /* TODO: Check if card is still present */ + send_stop_cmd(host->mmc, data, 0); + + atmci_data_complete(host, data); + } +- if (test_and_clear_bit(EVENT_DATA_ERROR, &host->pending_events)) { ++ if (mci_clear_data_error_is_pending(host)) { + u32 status = host->error_status; + +- set_bit(EVENT_DATA_ERROR, &host->completed_events); +- clear_bit(EVENT_DATA_COMPLETE, &host->pending_events); ++ mci_set_data_error_complete(host); ++ mci_clear_data_pending(host); + + dma_stop_request(host->dma.req.req.dmac, + host->dma.req.req.channel); +@@ -686,14 +700,14 @@ + mmc_hostname(host->mmc), data->bytes_xfered); + + if (data->stop +- && !test_and_set_bit(EVENT_STOP_SENT, &host->completed_events)) ++ && !mci_set_stop_sent_is_completed(host)) + /* TODO: Check if card is still present */ + send_stop_cmd(host->mmc, data, 0); + + atmci_data_complete(host, data); + } +- if (test_and_clear_bit(EVENT_DATA_COMPLETE, &host->pending_events)) { +- set_bit(EVENT_DATA_COMPLETE, &host->completed_events); ++ if (mci_clear_data_is_pending(host)) { ++ mci_set_data_complete(host); + data->bytes_xfered = data->blocks * data->blksz; + atmci_data_complete(host, data); + } +@@ -716,10 +761,10 @@ + mci_writel(host, IDR, MCI_BIT(CMDRDY) | MCI_CMD_ERROR_FLAGS); + host->cmd = NULL; + +- if (test_bit(EVENT_STOP_SENT, &host->completed_events)) +- set_bit(EVENT_STOP_COMPLETE, &host->pending_events); ++ if (mci_stop_sent_is_complete(host)) ++ mci_set_stop_pending(host); + else +- set_bit(EVENT_CMD_COMPLETE, &host->pending_events); ++ mci_set_cmd_pending(host); + + tasklet_schedule(&host->tasklet); + } +@@ -735,13 +780,12 @@ + host = container_of(dma, struct atmel_mci, dma); + data = host->data; + +- if (data->stop && !test_and_set_bit(EVENT_STOP_SENT, +- &host->completed_events)) ++ if (data->stop && !mci_set_stop_sent_is_completed(host)) + send_stop_cmd(host->mmc, data, 0); + + if (data->flags & MMC_DATA_READ) { + mci_writel(host, IDR, MCI_DATA_ERROR_FLAGS); +- set_bit(EVENT_DATA_COMPLETE, &host->pending_events); ++ mci_set_data_pending(host); + tasklet_schedule(&host->tasklet); + } else { + /* +@@ -765,7 +809,7 @@ + mci_writel(host, IDR, (MCI_BIT(NOTBUSY) + | MCI_DATA_ERROR_FLAGS)); + +- set_bit(EVENT_DMA_ERROR, &host->pending_events); ++ mci_set_dma_error_pending(host); + tasklet_schedule(&host->tasklet); + } + +@@ -790,10 +834,10 @@ + | MCI_DATA_ERROR_FLAGS)); + host->error_status = status; + host->cmd = NULL; +- if (test_bit(EVENT_STOP_SENT, &host->completed_events)) +- set_bit(EVENT_STOP_ERROR, &host->pending_events); ++ if (mci_stop_sent_is_complete(host)) ++ mci_set_stop_error_pending(host); + else +- set_bit(EVENT_CMD_ERROR, &host->pending_events); ++ mci_set_cmd_error_pending(host); + tasklet_schedule(&host->tasklet); + break; + } +@@ -801,7 +845,7 @@ + mci_writel(host, IDR, (MCI_BIT(NOTBUSY) + | MCI_DATA_ERROR_FLAGS)); + host->error_status = status; +- set_bit(EVENT_DATA_ERROR, &host->pending_events); ++ mci_set_data_error_pending(host); + tasklet_schedule(&host->tasklet); + break; + } +@@ -810,7 +854,7 @@ + if (pending & MCI_BIT(NOTBUSY)) { + mci_writel(host, IDR, (MCI_BIT(NOTBUSY) + | MCI_DATA_ERROR_FLAGS)); +- set_bit(EVENT_DATA_COMPLETE, &host->pending_events); ++ mci_set_data_pending(host); + tasklet_schedule(&host->tasklet); + } + +Index: linux-2.6.18/drivers/mmc/atmel-mci.h +=================================================================== +--- linux-2.6.18.orig/drivers/mmc/atmel-mci.h 2007-01-16 13:22:59.000000000 +0100 ++++ linux-2.6.18/drivers/mmc/atmel-mci.h 2007-01-16 13:24:33.000000000 +0100 +@@ -189,4 +189,124 @@ + #define mci_writel(port,reg,value) \ + __raw_writel((value), (port)->regs + MCI_##reg) + ++/* Test bit macros for completed events */ ++#define mci_cmd_is_complete(host) \ ++ test_bit(EVENT_CMD_COMPLETE, &host->completed_events) ++#define mci_cmd_error_is_complete(host) \ ++ test_bit(EVENT_CMD_ERROR, &host->completed_events) ++#define mci_data_is_complete(host) \ ++ test_bit(EVENT_DATA_COMPLETE, &host->completed_events) ++#define mci_data_error_is_complete(host) \ ++ test_bit(EVENT_DATA_ERROR, &host->completed_events) ++#define mci_stop_sent_is_complete(host) \ ++ test_bit(EVENT_STOP_SENT, &host->completed_events) ++#define mci_stop_is_complete(host) \ ++ test_bit(EVENT_STOP_COMPLETE, &host->completed_events) ++#define mci_stop_error_is_complete(host) \ ++ test_bit(EVENT_STOP_ERROR, &host->completed_events) ++#define mci_dma_error_is_complete(host) \ ++ test_bit(EVENT_DMA_ERROR, &host->completed_events) ++#define mci_card_detect_is_complete(host) \ ++ test_bit(EVENT_CARD_DETECT, &host->completed_events) ++ ++/* Test and clear bit macros for pending events */ ++#define mci_clear_cmd_is_pending(host) \ ++ test_and_clear_bit(EVENT_CMD_COMPLETE, &host->pending_events) ++#define mci_clear_cmd_error_is_pending(host) \ ++ test_and_clear_bit(EVENT_CMD_ERROR, &host->pending_events) ++#define mci_clear_data_is_pending(host) \ ++ test_and_clear_bit(EVENT_DATA_COMPLETE, &host->pending_events) ++#define mci_clear_data_error_is_pending(host) \ ++ test_and_clear_bit(EVENT_DATA_ERROR, &host->pending_events) ++#define mci_clear_stop_sent_is_pending(host) \ ++ test_and_clear_bit(EVENT_STOP_SENT, &host->pending_events) ++#define mci_clear_stop_is_pending(host) \ ++ test_and_clear_bit(EVENT_STOP_COMPLETE, &host->pending_events) ++#define mci_clear_stop_error_is_pending(host) \ ++ test_and_clear_bit(EVENT_STOP_ERROR, &host->pending_events) ++#define mci_clear_dma_error_is_pending(host) \ ++ test_and_clear_bit(EVENT_DMA_ERROR, &host->pending_events) ++#define mci_clear_card_detect_is_pending(host) \ ++ test_and_clear_bit(EVENT_CARD_DETECT, &host->pending_events) ++ ++/* Test and set bit macros for completed events */ ++#define mci_set_cmd_is_completed(host) \ ++ test_and_set_bit(EVENT_CMD_COMPLETE, &host->completed_events) ++#define mci_set_cmd_error_is_completed(host) \ ++ test_and_set_bit(EVENT_CMD_ERROR, &host->completed_events) ++#define mci_set_data_is_completed(host) \ ++ test_and_set_bit(EVENT_DATA_COMPLETE, &host->completed_events) ++#define mci_set_data_error_is_completed(host) \ ++ test_and_set_bit(EVENT_DATA_ERROR, &host->completed_events) ++#define mci_set_stop_sent_is_completed(host) \ ++ test_and_set_bit(EVENT_STOP_SENT, &host->completed_events) ++#define mci_set_stop_is_completed(host) \ ++ test_and_set_bit(EVENT_STOP_COMPLETE, &host->completed_events) ++#define mci_set_stop_error_is_completed(host) \ ++ test_and_set_bit(EVENT_STOP_ERROR, &host->completed_events) ++#define mci_set_dma_error_is_completed(host) \ ++ test_and_set_bit(EVENT_DMA_ERROR, &host->completed_events) ++#define mci_set_card_detect_is_completed(host) \ ++ test_and_set_bit(EVENT_CARD_DETECT, &host->completed_events) ++ ++/* Set bit macros for completed events */ ++#define mci_set_cmd_complete(host) \ ++ set_bit(EVENT_CMD_COMPLETE, &host->completed_events) ++#define mci_set_cmd_error_complete(host) \ ++ set_bit(EVENT_CMD_ERROR, &host->completed_events) ++#define mci_set_data_complete(host) \ ++ set_bit(EVENT_DATA_COMPLETE, &host->completed_events) ++#define mci_set_data_error_complete(host) \ ++ set_bit(EVENT_DATA_ERROR, &host->completed_events) ++#define mci_set_stop_sent_complete(host) \ ++ set_bit(EVENT_STOP_SENT, &host->completed_events) ++#define mci_set_stop_complete(host) \ ++ set_bit(EVENT_STOP_COMPLETE, &host->completed_events) ++#define mci_set_stop_error_complete(host) \ ++ set_bit(EVENT_STOP_ERROR, &host->completed_events) ++#define mci_set_dma_error_complete(host) \ ++ set_bit(EVENT_DMA_ERROR, &host->completed_events) ++#define mci_set_card_detect_complete(host) \ ++ set_bit(EVENT_CARD_DETECT, &host->completed_events) ++ ++/* Set bit macros for pending events */ ++#define mci_set_cmd_pending(host) \ ++ set_bit(EVENT_CMD_COMPLETE, &host->pending_events) ++#define mci_set_cmd_error_pending(host) \ ++ set_bit(EVENT_CMD_ERROR, &host->pending_events) ++#define mci_set_data_pending(host) \ ++ set_bit(EVENT_DATA_COMPLETE, &host->pending_events) ++#define mci_set_data_error_pending(host) \ ++ set_bit(EVENT_DATA_ERROR, &host->pending_events) ++#define mci_set_stop_sent_pending(host) \ ++ set_bit(EVENT_STOP_SENT, &host->pending_events) ++#define mci_set_stop_pending(host) \ ++ set_bit(EVENT_STOP_COMPLETE, &host->pending_events) ++#define mci_set_stop_error_pending(host) \ ++ set_bit(EVENT_STOP_ERROR, &host->pending_events) ++#define mci_set_dma_error_pending(host) \ ++ set_bit(EVENT_DMA_ERROR, &host->pending_events) ++#define mci_set_card_detect_pending(host) \ ++ set_bit(EVENT_CARD_DETECT, &host->pending_events) ++ ++/* Clear bit macros for pending events */ ++#define mci_clear_cmd_pending(host) \ ++ clear_bit(EVENT_CMD_COMPLETE, &host->pending_events) ++#define mci_clear_cmd_error_pending(host) \ ++ clear_bit(EVENT_CMD_ERROR, &host->pending_events) ++#define mci_clear_data_pending(host) \ ++ clear_bit(EVENT_DATA_COMPLETE, &host->pending_events) ++#define mci_clear_data_error_pending(host) \ ++ clear_bit(EVENT_DATA_ERROR, &host->pending_events) ++#define mci_clear_stop_sent_pending(host) \ ++ clear_bit(EVENT_STOP_SENT, &host->pending_events) ++#define mci_clear_stop_pending(host) \ ++ clear_bit(EVENT_STOP_COMPLETE, &host->pending_events) ++#define mci_clear_stop_error_pending(host) \ ++ clear_bit(EVENT_STOP_ERROR, &host->pending_events) ++#define mci_clear_dma_error_pending(host) \ ++ clear_bit(EVENT_DMA_ERROR, &host->pending_events) ++#define mci_clear_card_detect_pending(host) \ ++ clear_bit(EVENT_CARD_DETECT, &host->pending_events) ++ + #endif /* __DRIVERS_MMC_ATMEL_MCI_H__ */ diff --git a/packages/linux/linux-2.6.18/mmc-add-detect-card-and-wp-support.patch b/packages/linux/linux-2.6.18/mmc-add-detect-card-and-wp-support.patch new file mode 100644 index 0000000000..f91ddc239a --- /dev/null +++ b/packages/linux/linux-2.6.18/mmc-add-detect-card-and-wp-support.patch @@ -0,0 +1,159 @@ +Index: linux-2.6.18/drivers/mmc/atmel-mci.c +=================================================================== +--- linux-2.6.18.orig/drivers/mmc/atmel-mci.c 2007-01-16 14:01:56.000000000 +0100 ++++ linux-2.6.18/drivers/mmc/atmel-mci.c 2007-01-16 14:20:23.000000000 +0100 +@@ -72,7 +72,6 @@ + u32 error_status; + + int present; +- unsigned int wp_present:1; + + unsigned long bus_hz; + unsigned long mapbase; +@@ -538,9 +537,26 @@ + } + } + ++int atmci_get_ro(struct mmc_host *mmc) ++{ ++ int read_only = 0; ++ struct atmel_mci *host = mmc_priv(mmc); ++ ++ if (host->board->wp_pin != GPIO_PIO_NONE) { ++ read_only = gpio_get_value(host->board->wp_pin); ++ pr_debug("%s: card is %s\n", mmc_hostname(mmc), ++ (read_only ? "read-only" : "read-write") ); ++ } else { ++ pr_debug("%s: host does not support reading read-only switch." ++ " Assuming write-enable.\n", mmc_hostname(mmc)); ++ } ++ return read_only; ++} ++ + static struct mmc_host_ops atmci_ops = { + .request = atmci_request, + .set_ios = atmci_set_ios, ++ .get_ro = atmci_get_ro, + }; + + static void atmci_request_end(struct mmc_host *mmc, struct mmc_request *mrq) +@@ -695,6 +711,37 @@ + data->bytes_xfered = data->blocks * data->blksz; + atmci_data_complete(host, data); + } ++ if (mci_clear_card_detect_is_pending(host)) { ++ /* Reset controller if card is gone */ ++ if (!host->present) { ++ mci_writel(host, CR, MCI_BIT(SWRST)); ++ mci_writel(host, IDR, ~0UL); ++ mci_writel(host, CR, MCI_BIT(MCIEN)); ++ } ++ ++ /* Clean up queue if present */ ++ if (mrq) { ++ if (!mci_cmd_is_complete(host) ++ && !mci_cmd_error_is_complete(host)) { ++ mrq->cmd->error = MMC_ERR_TIMEOUT; ++ } ++ if (mrq->data && !mci_data_is_complete(host) ++ && !mci_data_error_is_complete(host)) { ++ dma_stop_request(host->dma.req.req.dmac, ++ host->dma.req.req.channel); ++ host->data->error = MMC_ERR_TIMEOUT; ++ atmci_data_complete(host, data); ++ } ++ if (mrq->stop && !mci_stop_is_complete(host) ++ && !mci_stop_error_is_complete(host)) { ++ mrq->stop->error = MMC_ERR_TIMEOUT; ++ } ++ ++ host->cmd = NULL; ++ atmci_request_end(mmc, mrq); ++ } ++ mmc_detect_change(host->mmc, msecs_to_jiffies(100)); ++ } + } + + static void atmci_cmd_interrupt(struct mmc_host *mmc, u32 status) +@@ -821,6 +868,23 @@ + return IRQ_HANDLED; + } + ++static irqreturn_t atmci_detect_int(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ struct mmc_host *mmc = dev_id; ++ struct atmel_mci *host = mmc_priv(mmc); ++ ++ int present = !gpio_get_value(irq_to_gpio(irq)); ++ ++ if (present != host->present) { ++ pr_debug("%s: card %s\n", mmc_hostname(host->mmc), ++ present ? "inserted" : "removed"); ++ host->present = present; ++ mci_set_card_detect_pending(host); ++ tasklet_schedule(&host->tasklet); ++ } ++ return IRQ_HANDLED; ++} ++ + static int __devinit atmci_probe(struct platform_device *pdev) + { + struct atmel_mci *host; +@@ -887,15 +951,9 @@ + + if (host->board && host->board->wp_pin != GPIO_PIO_NONE) { + ret = gpio_request(host->board->wp_pin, "mmc_wp"); +- if (ret) { ++ if (ret) + printk(KERN_WARNING "%s: no WP pin available (%d)\n", + mmc_hostname(host->mmc), ret); +- host->wp_present = 0; +- } else { +- host->wp_present = 1; +- } +- } else { +- host->wp_present = 0; + } + + /* TODO: Get this information from platform data */ +@@ -928,6 +986,19 @@ + + mmc_add_host(mmc); + ++ if (host->present != -1) { ++ ret = request_irq(gpio_to_irq(host->board->detect_pin), ++ atmci_detect_int, ++ IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, ++ "mmci", mmc); ++ if (ret) { ++ printk(KERN_ERR "%s: could not request IRQ %d " ++ "for detect pin\n", ++ mmc_hostname(mmc), ++ gpio_to_irq(host->board->detect_pin)); ++ } ++ } ++ + printk(KERN_INFO "%s: Atmel MCI controller at 0x%08lx irq %d\n", + mmc_hostname(mmc), host->mapbase, irq); + +@@ -936,8 +1007,11 @@ + return 0; + + out_free_irq: +- if (host->present != -1) ++ if (host->present != -1) { ++ free_irq(gpio_to_irq(host->board->detect_pin), host->mmc); ++ cancel_delayed_work(&host->mmc->detect); + gpio_free(host->board->detect_pin); ++ } + if (host->board->wp_pin != GPIO_PIO_NONE) + gpio_free(host->board->wp_pin); + free_irq(irq, mmc); +@@ -971,6 +1045,7 @@ + host->dma.req.req.channel); + + if (host->present != -1) { ++ free_irq(gpio_to_irq(host->board->detect_pin), host->mmc); + cancel_delayed_work(&host->mmc->detect); + gpio_free(host->board->detect_pin); + } diff --git a/packages/linux/linux-2.6.18/mmc-add-platform-data.patch b/packages/linux/linux-2.6.18/mmc-add-platform-data.patch new file mode 100644 index 0000000000..b0a67b38ca --- /dev/null +++ b/packages/linux/linux-2.6.18/mmc-add-platform-data.patch @@ -0,0 +1,185 @@ +--- + arch/avr32/boards/atngw/setup.c | 7 ++++ + arch/avr32/mach-at32ap/at32ap7000.c | 13 +++++++-- + drivers/mmc/atmel-mci.c | 49 ++++++++++++++++++++++++++++++++++ + include/asm-avr32/arch-at32ap/board.h | 7 ++++ + 4 files changed, 72 insertions(+), 4 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/boards/atngw/setup.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/boards/atngw/setup.c 2007-01-15 10:24:38.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/boards/atngw/setup.c 2007-01-15 10:25:04.000000000 +0100 +@@ -35,6 +35,11 @@ static struct spi_board_info spi_board_i + }, + }; + ++static struct mmci_platform_data __initdata mmci0_data = { ++ .detect_pin = GPIO_PIN_PC(25), ++ .wp_pin = GPIO_PIN_PE(0), ++}; ++ + static int __init parse_tag_ethernet(struct tag *tag) + { + int i; +@@ -72,7 +77,7 @@ static int __init atngw_init(void) + spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); + + at32_add_device_spi(0); +- at32_add_device_mmci(0); ++ at32_add_device_mmci(0, &mmci0_data); + at32_add_device_usb(0); + + return 0; +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap7000.c 2007-01-15 10:24:38.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2007-01-15 10:25:04.000000000 +0100 +@@ -749,14 +749,16 @@ at32_add_device_eth(unsigned int id, str + /* -------------------------------------------------------------------- + * MMC + * -------------------------------------------------------------------- */ ++static struct mmci_platform_data mmci0_data; + static struct resource mmci0_resource[] = { + PBMEM(0xfff02400), + IRQ(28), + }; +-DEFINE_DEV(mmci, 0); ++DEFINE_DEV_DATA(mmci, 0); + DEV_CLK(mck, mmci0, pbb, 9); + +-struct platform_device *__init at32_add_device_mmci(unsigned int id) ++struct platform_device *__init ++at32_add_device_mmci(unsigned int id, struct mmci_platform_data *data) + { + struct platform_device *pdev; + +@@ -774,6 +776,13 @@ struct platform_device *__init at32_add_ + return NULL; + } + ++ if (data && data->detect_pin != GPIO_PIO_NONE) ++ at32_select_gpio(data->detect_pin, 0); ++ if (data && data->wp_pin != GPIO_PIO_NONE) ++ at32_select_gpio(data->wp_pin, 0); ++ ++ memcpy(pdev->dev.platform_data, data, ++ sizeof(struct mmci_platform_data)); + platform_device_register(pdev); + return pdev; + } +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/board.h 2007-01-15 10:24:38.000000000 +0100 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h 2007-01-15 10:25:04.000000000 +0100 +@@ -24,7 +24,12 @@ struct eth_platform_data { + struct platform_device * + at32_add_device_eth(unsigned int id, struct eth_platform_data *data); + +-struct platform_device *at32_add_device_mmci(unsigned int id); ++struct mmci_platform_data { ++ unsigned int detect_pin; ++ unsigned int wp_pin; ++}; ++struct platform_device * ++at32_add_device_mmci(unsigned int id, struct mmci_platform_data *data); + struct platform_device *at32_add_device_spi(unsigned int id); + struct platform_device *at32_add_device_twi(unsigned int id); + +Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/mmc/atmel-mci.c 2007-01-15 10:23:19.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.c 2007-01-15 10:27:37.000000000 +0100 +@@ -22,6 +22,9 @@ + + #include + #include ++#include ++#include ++#include + + #include "atmel-mci.h" + +@@ -68,9 +71,13 @@ struct atmel_mci { + unsigned long completed_events; + u32 error_status; + ++ int present; ++ unsigned int wp_present:1; ++ + unsigned long bus_hz; + unsigned long mapbase; + struct clk *mck; ++ struct mmci_platform_data *board; + struct platform_device *pdev; + }; + +@@ -626,6 +633,7 @@ static int __devinit atmci_probe(struct + if (!host->regs) + goto out_disable_clk; + ++ host->board = pdev->dev.platform_data; + host->bus_hz = clk_get_rate(host->mck); + host->mapbase = regs->start; + +@@ -641,6 +649,32 @@ static int __devinit atmci_probe(struct + if (ret) + goto out_unmap; + ++ if (host->board && host->board->detect_pin != GPIO_PIO_NONE) { ++ ret = gpio_request(host->board->detect_pin, "mmc_detect"); ++ if (ret) { ++ printk(KERN_WARNING "%s: no detect pin available (%d)\n", ++ mmc_hostname(host->mmc), ret); ++ host->present = -1; ++ } else { ++ host->present = !gpio_get_value(host->board->detect_pin); ++ } ++ } else { ++ host->present = -1; ++ } ++ ++ if (host->board && host->board->wp_pin != GPIO_PIO_NONE) { ++ ret = gpio_request(host->board->wp_pin, "mmc_wp"); ++ if (ret) { ++ printk(KERN_WARNING "%s: no WP pin available (%d)\n", ++ mmc_hostname(host->mmc), ret); ++ host->wp_present = 0; ++ } else { ++ host->wp_present = 1; ++ } ++ } else { ++ host->wp_present = 0; ++ } ++ + /* TODO: Get this information from platform data */ + ret = -ENOMEM; + host->dma.req.req.dmac = find_dma_controller(0); +@@ -677,6 +711,10 @@ static int __devinit atmci_probe(struct + return 0; + + out_free_irq: ++ if (host->present != -1) ++ gpio_free(host->board->detect_pin); ++ if (host->board->wp_pin != GPIO_PIO_NONE) ++ gpio_free(host->board->wp_pin); + free_irq(irq, mmc); + out_unmap: + iounmap(host->regs); +@@ -701,6 +739,17 @@ static int __devexit atmci_remove(struct + mci_writel(host, CR, MCI_BIT(MCIDIS)); + mci_readl(host, SR); + ++ if (host->dma.req.req.channel) ++ dma_release_channel(host->dma.req.req.dmac, ++ host->dma.req.req.channel); ++ ++ if (host->present != -1) { ++ cancel_delayed_work(&host->mmc->detect); ++ gpio_free(host->board->detect_pin); ++ } ++ if (host->board->wp_pin != GPIO_PIO_NONE) ++ gpio_free(host->board->wp_pin); ++ + free_irq(platform_get_irq(pdev, 0), host->mmc); + iounmap(host->regs); + diff --git a/packages/linux/linux-2.6.18/mmc-core-dma-fix.patch b/packages/linux/linux-2.6.18/mmc-core-dma-fix.patch new file mode 100644 index 0000000000..4106970035 --- /dev/null +++ b/packages/linux/linux-2.6.18/mmc-core-dma-fix.patch @@ -0,0 +1,33 @@ +Index: linux-2.6.18-avr32/drivers/mmc/mmc.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/mmc/mmc.c 2007-01-04 09:54:56.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/mmc/mmc.c 2007-01-04 09:58:08.000000000 +0100 +@@ -961,6 +961,7 @@ static void mmc_read_scrs(struct mmc_hos + struct mmc_command cmd; + struct mmc_data data; + struct scatterlist sg; ++ u32 *buf; + + list_for_each_entry(card, &host->cards, node) { + if (card->state & (MMC_STATE_DEAD|MMC_STATE_PRESENT)) +@@ -1008,7 +1009,8 @@ static void mmc_read_scrs(struct mmc_hos + mrq.cmd = &cmd; + mrq.data = &data; + +- sg_init_one(&sg, (u8*)card->raw_scr, 8); ++ buf = kmalloc(8, GFP_KERNEL); ++ sg_init_one(&sg, (u8*)buf, 8); + + mmc_wait_for_req(host, &mrq); + +@@ -1017,8 +1019,8 @@ static void mmc_read_scrs(struct mmc_hos + continue; + } + +- card->raw_scr[0] = ntohl(card->raw_scr[0]); +- card->raw_scr[1] = ntohl(card->raw_scr[1]); ++ card->raw_scr[0] = ntohl(buf[0]); ++ card->raw_scr[1] = ntohl(buf[1]); + + mmc_decode_scr(card); + } diff --git a/packages/linux/linux-2.6.18/mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch b/packages/linux/linux-2.6.18/mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch new file mode 100644 index 0000000000..4884d8a0b3 --- /dev/null +++ b/packages/linux/linux-2.6.18/mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch @@ -0,0 +1,99 @@ +Index: linux-2.6.18/drivers/mtd/chips/cfi_cmdset_0001.c +=================================================================== +--- linux-2.6.18.orig/drivers/mtd/chips/cfi_cmdset_0001.c 2006-12-13 09:58:34.000000000 +0100 ++++ linux-2.6.18/drivers/mtd/chips/cfi_cmdset_0001.c 2006-12-13 10:01:35.000000000 +0100 +@@ -47,6 +47,7 @@ + #define I82802AC 0x00ac + #define MANUFACTURER_ST 0x0020 + #define M50LPW080 0x002F ++#define AT49BV640D 0x02de + + static int cfi_intelext_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *); + static int cfi_intelext_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *); +@@ -153,6 +154,47 @@ + } + #endif + ++/* Atmel chips don't use the same PRI format as Intel chips */ ++static void fixup_convert_atmel_pri(struct mtd_info *mtd, void *param) ++{ ++ struct map_info *map = mtd->priv; ++ struct cfi_private *cfi = map->fldrv_priv; ++ struct cfi_pri_intelext *extp = cfi->cmdset_priv; ++ struct cfi_pri_atmel atmel_pri; ++ uint32_t features = 0; ++ ++ /* Reverse byteswapping */ ++ extp->FeatureSupport = cpu_to_le32(extp->FeatureSupport); ++ extp->BlkStatusRegMask = cpu_to_le16(extp->BlkStatusRegMask); ++ extp->ProtRegAddr = cpu_to_le16(extp->ProtRegAddr); ++ ++ memcpy(&atmel_pri, extp, sizeof(atmel_pri)); ++ memset((char *)extp + 5, 0, sizeof(*extp) - 5); ++ ++ printk(KERN_ERR "atmel Features: %02x\n", atmel_pri.Features); ++ ++ if (atmel_pri.Features & 0x01) /* chip erase supported */ ++ features |= (1<<0); ++ if (atmel_pri.Features & 0x02) /* erase suspend supported */ ++ features |= (1<<1); ++ if (atmel_pri.Features & 0x04) /* program suspend supported */ ++ features |= (1<<2); ++ if (atmel_pri.Features & 0x08) /* simultaneous operations supported */ ++ features |= (1<<9); ++ if (atmel_pri.Features & 0x20) /* page mode read supported */ ++ features |= (1<<7); ++ if (atmel_pri.Features & 0x40) /* queued erase supported */ ++ features |= (1<<4); ++ if (atmel_pri.Features & 0x80) /* Protection bits supported */ ++ features |= (1<<6); ++ ++ extp->FeatureSupport = features; ++ ++ /* burst write mode not supported */ ++ cfi->cfiq->BufWriteTimeoutTyp = 0; ++ cfi->cfiq->BufWriteTimeoutMax = 0; ++} ++ + #ifdef CMDSET0001_DISABLE_ERASE_SUSPEND_ON_WRITE + /* Some Intel Strata Flash prior to FPO revision C has bugs in this area */ + static void fixup_intel_strataflash(struct mtd_info *mtd, void* param) +@@ -221,6 +263,7 @@ + } + + static struct cfi_fixup cfi_fixup_table[] = { ++ { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL }, + #ifdef CMDSET0001_DISABLE_ERASE_SUSPEND_ON_WRITE + { CFI_MFR_ANY, CFI_ID_ANY, fixup_intel_strataflash, NULL }, + #endif +Index: linux-2.6.18/drivers/mtd/chips/cfi_cmdset_0002.c +=================================================================== +--- linux-2.6.18.orig/drivers/mtd/chips/cfi_cmdset_0002.c 2006-12-13 10:01:34.000000000 +0100 ++++ linux-2.6.18/drivers/mtd/chips/cfi_cmdset_0002.c 2006-12-15 10:19:22.000000000 +0100 +@@ -184,6 +184,10 @@ + extp->TopBottom = 2; + else + extp->TopBottom = 3; ++ ++ /* burst write mode not supported */ ++ cfi->cfiq->BufWriteTimeoutTyp = 0; ++ cfi->cfiq->BufWriteTimeoutMax = 0; + } + + static void fixup_use_secsi(struct mtd_info *mtd, void *param) +@@ -216,6 +220,7 @@ + } + + static struct cfi_fixup cfi_fixup_table[] = { ++ { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL }, + #ifdef AMD_BOOTLOC_BUG + { CFI_MFR_AMD, CFI_ID_ANY, fixup_amd_bootblock, NULL }, + #endif +@@ -228,7 +233,6 @@ + #if !FORCE_WORD_WRITE + { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, }, + #endif +- { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL }, + { 0, 0, NULL, NULL } + }; + static struct cfi_fixup jedec_fixup_table[] = { diff --git a/packages/linux/linux-2.6.18/mtd-unlock-nor-flash-automatically-where-necessary.patch b/packages/linux/linux-2.6.18/mtd-unlock-nor-flash-automatically-where-necessary.patch new file mode 100644 index 0000000000..1cb1f8e6d3 --- /dev/null +++ b/packages/linux/linux-2.6.18/mtd-unlock-nor-flash-automatically-where-necessary.patch @@ -0,0 +1,75 @@ +From 187ef15268e638603dea55a91fdfa29feaed6d13 Mon Sep 17 00:00:00 2001 +From: =?utf-8?q?H=C3=A5vard_Skinnemoen?= +Date: Fri, 22 Sep 2006 10:07:08 +0100 +Subject: [PATCH] [MTD] Unlock NOR flash automatically where necessary +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Introduce the MTD_STUPID_LOCK flag which indicates that the flash chip is +always locked after power-up, so all sectors need to be unlocked before it +is usable. + +If this flag is set, and the chip provides an unlock() operation, +mtd_add_device will unlock the whole MTD device if it's writeable. This +means that non-writeable partitions will stay locked. + +Set MTD_STUPID_LOCK in fixup_use_atmel_lock() so that these chips will work +as expected. + +Signed-off-by: HĂĄvard Skinnemoen +Signed-off-by: Andrew Morton +Signed-off-by: David Woodhouse +--- + drivers/mtd/chips/cfi_cmdset_0002.c | 1 + + drivers/mtd/mtdcore.c | 10 ++++++++++ + include/mtd/mtd-abi.h | 1 + + 3 files changed, 12 insertions(+), 0 deletions(-) + +diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c +index a482e89..702ae4c 100644 +--- a/drivers/mtd/chips/cfi_cmdset_0002.c ++++ b/drivers/mtd/chips/cfi_cmdset_0002.c +@@ -212,6 +212,7 @@ static void fixup_use_atmel_lock(struct mtd_info *mtd, void *param) + { + mtd->lock = cfi_atmel_lock; + mtd->unlock = cfi_atmel_unlock; ++ mtd->flags |= MTD_STUPID_LOCK; + } + + static struct cfi_fixup cfi_fixup_table[] = { +diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c +index 168d3ba..c4d26de 100644 +--- a/drivers/mtd/mtdcore.c ++++ b/drivers/mtd/mtdcore.c +@@ -57,6 +57,16 @@ int add_mtd_device(struct mtd_info *mtd) + mtd->index = i; + mtd->usecount = 0; + ++ /* Some chips always power up locked. Unlock them now */ ++ if ((mtd->flags & MTD_WRITEABLE) ++ && (mtd->flags & MTD_STUPID_LOCK) && mtd->unlock) { ++ if (mtd->unlock(mtd, 0, mtd->size)) ++ printk(KERN_WARNING ++ "%s: unlock failed, " ++ "writes may not work\n", ++ mtd->name); ++ } ++ + DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name); + /* No need to get a refcount on the module containing + the notifier, since we hold the mtd_table_mutex */ +diff --git a/include/mtd/mtd-abi.h b/include/mtd/mtd-abi.h +index 1da3f7f..b0a67b7 100644 +--- a/include/mtd/mtd-abi.h ++++ b/include/mtd/mtd-abi.h +@@ -34,6 +34,7 @@ struct mtd_oob_buf { + #define MTD_WRITEABLE 0x400 /* Device is writeable */ + #define MTD_BIT_WRITEABLE 0x800 /* Single bits can be flipped */ + #define MTD_NO_ERASE 0x1000 /* No erase necessary */ ++#define MTD_STUPID_LOCK 0x2000 /* Always locked after reset */ + + // Some common devices / combinations of capabilities + #define MTD_CAP_ROM 0 +-- +1.4.4.1 + diff --git a/packages/linux/linux-2.6.18/ngw-fix-usart-initialization.patch b/packages/linux/linux-2.6.18/ngw-fix-usart-initialization.patch new file mode 100644 index 0000000000..702b9aa240 --- /dev/null +++ b/packages/linux/linux-2.6.18/ngw-fix-usart-initialization.patch @@ -0,0 +1,32 @@ +--- + arch/avr32/boards/atngw/setup.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/boards/atngw/setup.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/boards/atngw/setup.c 2006-11-02 14:22:05.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/boards/atngw/setup.c 2006-11-02 14:42:53.000000000 +0100 +@@ -50,18 +50,19 @@ static int __init parse_tag_ethernet(str + } + __tagtable(ATAG_ETHERNET, parse_tag_ethernet); + ++struct platform_device *at32_usart_map[1]; ++unsigned int at32_nr_usarts = 1; ++ + void __init setup_board(void) + { +- at32_map_usart(1, 0); /* /dev/ttyS0 */ +- +- at32_setup_serial_console(0); ++ at32_usart_map[0] = at32_get_usart(1); + } + + static int __init atngw_init(void) + { + at32_add_system_devices(); + +- at32_add_device_usart(0); ++ at32_add_device_usart(1); + + if (eth_data[0].valid) + at32_add_device_eth(0, ð_data[0]); diff --git a/packages/linux/linux-2.6.18/ngw100-change-spi-clock-on-dataflash.patch b/packages/linux/linux-2.6.18/ngw100-change-spi-clock-on-dataflash.patch new file mode 100644 index 0000000000..af1228faa7 --- /dev/null +++ b/packages/linux/linux-2.6.18/ngw100-change-spi-clock-on-dataflash.patch @@ -0,0 +1,13 @@ +Index: linux-2.6.18/arch/avr32/boards/atngw/setup.c +=================================================================== +--- linux-2.6.18.orig/arch/avr32/boards/atngw/setup.c 2006-12-19 14:15:02.000000000 +0100 ++++ linux-2.6.18/arch/avr32/boards/atngw/setup.c 2006-12-19 14:15:11.000000000 +0100 +@@ -29,7 +29,7 @@ + { + .modalias = "mtd_dataflash", + .controller_data = (void *)GPIO_PIN_PA(3), +- .max_speed_hz = 66000000, ++ .max_speed_hz = 10000000, + .bus_num = 0, + .chip_select = 0, + }, diff --git a/packages/linux/linux-2.6.18/pio-deglitch.patch b/packages/linux/linux-2.6.18/pio-deglitch.patch new file mode 100644 index 0000000000..3fe9231861 --- /dev/null +++ b/packages/linux/linux-2.6.18/pio-deglitch.patch @@ -0,0 +1,40 @@ +--- + arch/avr32/mach-at32ap/pio.c | 12 ++++++++++++ + include/asm-avr32/arch-at32ap/gpio.h | 1 + + 2 files changed, 13 insertions(+) + +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-30 11:55:02.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-30 11:57:52.000000000 +0100 +@@ -122,6 +122,18 @@ fail: + dump_stack(); + } + ++void at32_set_deglitch(unsigned int pin, int enable) ++{ ++ struct pio_device *pio; ++ u32 mask = 1 << (pin & 0x1f); ++ ++ pio = gpio_to_pio(pin); ++ if (enable) ++ pio_writel(pio, IFER, mask); ++ else ++ pio_writel(pio, IFDR, mask); ++} ++ + static unsigned int pio_id(struct pio_device *pio) + { + return pio - pio_dev; +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/gpio.h 2006-11-30 11:54:56.000000000 +0100 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h 2006-11-30 11:55:56.000000000 +0100 +@@ -16,6 +16,7 @@ + void at32_select_periph(unsigned int pin, unsigned int periph, + unsigned long flags); + void at32_select_gpio(unsigned int pin, unsigned long flags); ++void at32_set_deglitch(unsigned int pin, int enable); + + /* Arch-neutral GPIO API */ + int __must_check gpio_request(unsigned int gpio, const char *label); diff --git a/packages/linux/linux-2.6.18/pio-interrupt-controller.patch b/packages/linux/linux-2.6.18/pio-interrupt-controller.patch new file mode 100644 index 0000000000..b4f15c4931 --- /dev/null +++ b/packages/linux/linux-2.6.18/pio-interrupt-controller.patch @@ -0,0 +1,108 @@ +--- + arch/avr32/mach-at32ap/pio.c | 73 ++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 72 insertions(+), 1 deletion(-) + +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 18:17:15.000000000 +0100 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-30 11:50:27.000000000 +0100 +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -709,20 +710,90 @@ err_class_create: + late_initcall(pio_init_dev); + #endif /* CONFIG_PIO_DEV */ + ++/* Interrupt controller implementation */ ++static void pio_mask_irq(unsigned int irq) ++{ ++ struct pio_device *pio = get_irq_chip_data(irq); ++ ++ pio_writel(pio, IDR, 1 << (irq & 0x1f)); ++} ++ ++static void pio_unmask_irq(unsigned int irq) ++{ ++ struct pio_device *pio = get_irq_chip_data(irq); ++ ++ pio_writel(pio, IER, 1 << (irq & 0x1f)); ++} ++ ++static int pio_set_irq_type(unsigned int irq, unsigned int flow_type) ++{ ++ if (flow_type != IRQ_TYPE_NONE && flow_type != IRQ_TYPE_EDGE_BOTH) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static struct irq_chip pio_irq_chip = { ++ .name = "pio", ++ .mask = pio_mask_irq, ++ .unmask = pio_unmask_irq, ++ .set_type = pio_set_irq_type, ++}; ++ ++static void demux_pio_irq(unsigned int irq, struct irq_desc *desc, ++ struct pt_regs *regs) ++{ ++ struct pio_device *pio = desc->handler_data; ++ struct irq_desc *ext_desc; ++ u32 status, pending; ++ unsigned int ext_irq; ++ unsigned int i; ++ ++ status = pio_readl(pio, ISR); ++ pending = status & pio_readl(pio, IMR); ++ ++ while (pending) { ++ i = fls(pending) - 1; ++ pending &= ~(1 << i); ++ ++ ext_irq = gpio_to_irq(32 * pio_id(pio) + i); ++ ext_desc = irq_desc + ext_irq; ++ ext_desc->handle_irq(ext_irq, ext_desc, regs); ++ } ++} ++ + static int __init pio_probe(struct platform_device *pdev) + { + struct pio_device *pio = NULL; ++ unsigned int i; ++ int int_irq, ext_irq; + + BUG_ON(pdev->id >= MAX_NR_PIO_DEVICES); + pio = &pio_dev[pdev->id]; + BUG_ON(!pio->regs); + +- /* TODO: Interrupts */ ++ /* Set up interrupts */ ++ pio_writel(pio, IDR, ~0UL); ++ pio_readl(pio, ISR); ++ ++ ext_irq = gpio_to_irq(32 * pdev->id); ++ for (i = 0; i < 32; i++, ext_irq++) { ++ set_irq_chip_and_handler(ext_irq, &pio_irq_chip, ++ handle_simple_irq); ++ set_irq_chip_data(ext_irq, pio); ++ } ++ ++ int_irq = platform_get_irq(pdev, 0); ++ set_irq_chained_handler(int_irq, demux_pio_irq); ++ set_irq_data(int_irq, pio); + + platform_set_drvdata(pdev, pio); + + printk(KERN_INFO "%s: Atmel Port Multiplexer at 0x%p (irq %d)\n", + pio->name, pio->regs, platform_get_irq(pdev, 0)); ++ printk(KERN_INFO ++ "%s: Handling 32 external IRQs, starting with IRQ %d\n", ++ pio->name, ext_irq - 32); + + return 0; + } diff --git a/packages/linux/linux-2.6.18/rename-ttyUS-to-ttyS-or-ttyAT.patch b/packages/linux/linux-2.6.18/rename-ttyUS-to-ttyS-or-ttyAT.patch new file mode 100644 index 0000000000..b2a020f809 --- /dev/null +++ b/packages/linux/linux-2.6.18/rename-ttyUS-to-ttyS-or-ttyAT.patch @@ -0,0 +1,74 @@ +--- + drivers/serial/Kconfig | 18 ++++++++++++++++++ + drivers/serial/atmel_usart.c | 13 +++++++++++-- + 2 files changed, 29 insertions(+), 2 deletions(-) + +Index: linux-2.6.18-avr32/drivers/serial/Kconfig +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/serial/Kconfig 2006-09-14 12:51:15.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/serial/Kconfig 2006-09-14 13:07:37.000000000 +0200 +@@ -267,6 +267,24 @@ config SERIAL_ATMEL_CONSOLE + receives all kernel messages and warnings and which allows + logins in single user mode). + ++config SERIAL_ATMEL_TTYAT ++ bool "Install as device ttyAT0-N instead of ttyS0-N" ++ depends on SERIAL_ATMEL=y ++ help ++ Say Y here if you wish to have the internal UARTs appear as ++ /dev/ttyAT0-N (major 204, minor 154-169) instead of the ++ normal /dev/ttyS0-4 (major 4, minor 64-255). This is ++ necessary if you also want other UARTs, such as external ++ 8250/16C550 compatible UARTs. ++ ++ The ttySn nodes are legally reserved for the 8250 serial driver ++ but are often misused by other serial drivers. ++ ++ To use this, you should create suitable ttyATn device nodes in ++ /dev/, and pass "console=ttyATn" to the kernel. ++ ++ Say Y if you have an external 8250/16C550 UART. If unsure, say N. ++ + config SERIAL_AMBA_PL010 + tristate "ARM AMBA PL010 serial port support" + depends on ARM_AMBA && (BROKEN || !ARCH_VERSATILE) +Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/serial/atmel_usart.c 2006-09-14 12:51:15.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-09-14 12:51:16.000000000 +0200 +@@ -46,8 +46,17 @@ + * Use the same major/minor numbers as the AT91 USART, which is + * actually the same chip + */ ++ ++#ifdef CONFIG_SERIAL_ATMEL_TTYAT ++#define SERIAL_USART3_MAJOR 204 ++#define MINOR_START 154 ++#define DEVICE_NAME "ttyAT" ++#else + #define SERIAL_USART3_MAJOR TTY_MAJOR + #define MINOR_START 64 ++#define DEVICE_NAME "ttyS" ++#endif ++ + #define NR_PORTS 4 + + #define ERROR_FLAGS (USART3_BIT(CSR_PARE) \ +@@ -923,7 +932,7 @@ out_disable_clk: + + static struct uart_driver usart3_reg; + static struct console usart3_console = { +- .name = "ttyUS", ++ .name = DEVICE_NAME, + .write = usart3_console_write, + .device = uart_console_device, + .setup = usart3_console_setup, +@@ -948,7 +957,7 @@ console_initcall(usart3_console_init); + static struct uart_driver usart3_reg = { + .owner = THIS_MODULE, + .driver_name = "serial", +- .dev_name = "ttyUS", ++ .dev_name = DEVICE_NAME, + .major = SERIAL_USART3_MAJOR, + .minor = MINOR_START, + .nr = NR_PORTS, diff --git a/packages/linux/linux-2.6.18/renumber-usart-devices.patch b/packages/linux/linux-2.6.18/renumber-usart-devices.patch new file mode 100644 index 0000000000..74f59916e4 --- /dev/null +++ b/packages/linux/linux-2.6.18/renumber-usart-devices.patch @@ -0,0 +1,228 @@ +--- + arch/avr32/boards/atstk1000/atstk1002.c | 12 ++++++++++++ + arch/avr32/kernel/setup.c | 1 + + arch/avr32/mach-at32ap/at32ap.c | 3 --- + arch/avr32/mach-at32ap/at32ap7000.c | 31 ++++++++++++++++++++++++------- + drivers/serial/atmel_usart.c | 24 ++++++++++++++++++------ + include/asm-avr32/arch-at32ap/board.h | 7 ++++--- + include/asm-avr32/arch-at32ap/init.h | 3 +-- + 7 files changed, 60 insertions(+), 21 deletions(-) + +Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/atstk1002.c 2006-09-13 14:30:31.000000000 +0200 ++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c 2006-09-13 14:50:59.000000000 +0200 +@@ -14,6 +14,7 @@ + + #include + #include ++#include + + static struct eth_platform_data __initdata eth_data[2]; + +@@ -34,6 +34,17 @@ struct platform_device flash_device = { + } + __tagtable(ATAG_ETHERNET, parse_tag_ethernet); + ++struct platform_device *at32_usart_map[3]; ++unsigned int at32_nr_usarts = 3; ++ ++void __init setup_board(void) ++{ ++ /* These need to be in place before initializing the console */ ++ at32_usart_map[0] = at32_get_usart(1); ++ at32_usart_map[1] = at32_get_usart(2); ++ at32_usart_map[2] = at32_get_usart(3); ++} ++ + static int __init atstk1002_init(void) + { + at32_add_system_devices(); +Index: linux-2.6.18-avr32/arch/avr32/kernel/setup.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/kernel/setup.c 2006-09-13 14:42:11.000000000 +0200 ++++ linux-2.6.18-avr32/arch/avr32/kernel/setup.c 2006-09-13 14:43:36.000000000 +0200 +@@ -268,6 +268,7 @@ void __init setup_arch (char **cmdline_p + + setup_processor(); + setup_platform(); ++ setup_board(); + + cpu_clk = clk_get(NULL, "cpu"); + if (IS_ERR(cpu_clk)) { +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap.c 2006-09-13 14:38:24.000000000 +0200 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap.c 2006-09-13 14:38:28.000000000 +0200 +@@ -48,9 +48,6 @@ void __init setup_platform(void) + at32_sm_init(); + at32_clock_init(); + at32_portmux_init(); +- +- /* FIXME: This doesn't belong here */ +- at32_setup_serial_console(1); + } + + static int __init pdc_probe(struct platform_device *pdev) +Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c +=================================================================== +--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap7000.c 2006-09-13 13:40:02.000000000 +0200 ++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2006-09-13 14:39:08.000000000 +0200 +@@ -543,6 +543,30 @@ static struct resource usart3_resource[] + DEFINE_DEV(usart, 3); + DEV_CLK(usart, usart3, pba, 6); + ++struct platform_device *at32_get_usart(unsigned int id) ++{ ++ struct platform_device *pdev; ++ ++ switch (id) { ++ case 0: ++ pdev = &usart0_device; ++ break; ++ case 1: ++ pdev = &usart1_device; ++ break; ++ case 2: ++ pdev = &usart2_device; ++ break; ++ case 3: ++ pdev = &usart3_device; ++ break; ++ default: ++ return NULL; ++ } ++ ++ return pdev; ++} ++ + static inline void configure_usart0_pins(void) + { + select_peripheral(PA(8), PERIPH_B, 0); /* RXD */ +@@ -607,13 +607,6 @@ struct platform_device *__init at32_add_ + return pdev; + } + +-struct platform_device *at91_default_console_device; +- +-void __init at32_setup_serial_console(unsigned int usart_id) +-{ +- at91_default_console_device = setup_usart(usart_id); +-} +- + /* -------------------------------------------------------------------- + * Ethernet + * -------------------------------------------------------------------- */ +Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/serial/atmel_usart.c 2006-09-13 14:30:42.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-09-13 14:48:47.000000000 +0200 +@@ -773,7 +773,8 @@ static struct uart_ops usart3_pops = { + }; + + static int __devinit initialize_port(struct usart3_port *up, +- struct platform_device *pdev) ++ struct platform_device *pdev, ++ unsigned int line) + { + struct uart_port *port = &up->uart; + struct resource *regs; +@@ -797,7 +798,7 @@ static int __devinit initialize_port(str + port->iotype = SERIAL_IO_MEM; + port->flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP; + port->ops = &usart3_pops; +- port->line = pdev->id; ++ port->line = line; + port->dev = &pdev->dev; + + return 0; +@@ -877,15 +878,17 @@ static int __init usart3_console_setup(s + console->index); + return -ENODEV; + } ++ if (console->index >= at32_nr_usarts) ++ return -ENXIO; + +- pdev = at91_default_console_device; ++ pdev = at32_usart_map[console->index]; + if (!pdev) + return -ENXIO; + + up = &usart3_ports[console->index]; + port = &up->uart; + +- ret = initialize_port(up, pdev); ++ ret = initialize_port(up, pdev, console->index); + if (ret) + return ret; + +@@ -978,6 +981,7 @@ static int usart3_serial_resume(struct p + static int __devinit usart3_serial_probe(struct platform_device *pdev) + { + struct usart3_port *up; ++ int line; + int ret; + + if (pdev->id >= NR_PORTS) { +@@ -987,14 +991,22 @@ static int __devinit usart3_serial_probe + return -ENOMEM; + } + +- up = &usart3_ports[pdev->id]; ++ for (line = 0; line < at32_nr_usarts; line++) { ++ if (at32_usart_map[line]->id == pdev->id) ++ break; ++ } ++ ++ if (line >= at32_nr_usarts) ++ return -ENXIO; ++ ++ up = &usart3_ports[line]; + + /* + * If the port has already been set up as a console, we + * shouldn't enable it again. + */ + if (!up->uart.uartclk) { +- ret = initialize_port(up, pdev); ++ ret = initialize_port(up, pdev, line); + if (ret) + goto out; + } +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/board.h 2006-09-13 14:30:13.000000000 +0200 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h 2006-09-13 15:19:56.000000000 +0200 +@@ -9,11 +9,12 @@ struct flash_platform_data { + /* Add basic devices: system manager, interrupt controller, portmuxes, etc. */ + void at32_add_system_devices(void); + +-#define AT91_NR_UART 4 +-extern struct platform_device *at91_default_console_device; +- ++struct platform_device *at32_get_usart(unsigned int id); + struct platform_device *at32_add_device_usart(unsigned int id); + ++extern struct platform_device *at32_usart_map[]; ++extern unsigned int at32_nr_usarts; ++ + struct eth_platform_data { + u8 valid; + u8 mii_phy_addr; +Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/init.h +=================================================================== +--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/init.h 2006-09-13 13:43:20.000000000 +0200 ++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/init.h 2006-09-13 14:50:26.000000000 +0200 +@@ -11,11 +11,10 @@ + #define __ASM_AVR32_AT32AP_INIT_H__ + + void setup_platform(void); ++void setup_board(void); + + /* Called by setup_platform */ + void at32_clock_init(void); + void at32_portmux_init(void); + +-void at32_setup_serial_console(unsigned int usart_id); +- + #endif /* __ASM_AVR32_AT32AP_INIT_H__ */ diff --git a/packages/linux/linux-2.6.18/spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch b/packages/linux/linux-2.6.18/spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch new file mode 100644 index 0000000000..e5e040bc32 --- /dev/null +++ b/packages/linux/linux-2.6.18/spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch @@ -0,0 +1,50 @@ +From 4740d387f3cb9e63f48f2488815b38a2c92755c8 Mon Sep 17 00:00:00 2001 +From: Hans-Christian Egtvedt +Date: Wed, 6 Dec 2006 20:36:17 -0800 +Subject: [PATCH] [PATCH] spi: correct bus_num and buffer bug in spi core + +Correct the following in driver/spi/spi.c in function spi_busnum_to_master: + + * must allow bus_num 0, the if is really not needed. + * correct the name buffer which is too small for bus_num >= 10000. It + +should be 9 bytes big, not 8. + +Signed-off-by: Hans-Christian Egtvedt +Cc: David Brownell +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + drivers/spi/spi.c | 16 +++++++--------- + 1 files changed, 7 insertions(+), 9 deletions(-) + +diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c +index 1a3c963..7d215ea 100644 +--- a/drivers/spi/spi.c ++++ b/drivers/spi/spi.c +@@ -465,15 +465,13 @@ EXPORT_SYMBOL_GPL(spi_unregister_master); + */ + struct spi_master *spi_busnum_to_master(u16 bus_num) + { +- if (bus_num) { +- char name[8]; +- struct kobject *bus; +- +- snprintf(name, sizeof name, "spi%u", bus_num); +- bus = kset_find_obj(&spi_master_class.subsys.kset, name); +- if (bus) +- return container_of(bus, struct spi_master, cdev.kobj); +- } ++ char name[9]; ++ struct kobject *bus; ++ ++ snprintf(name, sizeof name, "spi%u", bus_num); ++ bus = kset_find_obj(&spi_master_class.subsys.kset, name); ++ if (bus) ++ return container_of(bus, struct spi_master, cdev.kobj); + return NULL; + } + EXPORT_SYMBOL_GPL(spi_busnum_to_master); +-- +1.4.4.1 + diff --git a/packages/linux/linux-2.6.18/spi-reduce-dlybs-and-dlybct.patch b/packages/linux/linux-2.6.18/spi-reduce-dlybs-and-dlybct.patch new file mode 100644 index 0000000000..ca4989fa68 --- /dev/null +++ b/packages/linux/linux-2.6.18/spi-reduce-dlybs-and-dlybct.patch @@ -0,0 +1,19 @@ +--- + drivers/spi/atmel_spi.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/spi/atmel_spi.c 2006-12-18 12:31:32.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.c 2006-12-18 12:31:37.000000000 +0100 +@@ -380,8 +380,8 @@ static int atmel_spi_setup(struct spi_de + csr |= SPI_BIT(NCPHA); + + /* TODO: DLYBS and DLYBCT */ +- csr |= SPI_BF(DLYBS, 10); +- csr |= SPI_BF(DLYBCT, 10); ++ csr |= SPI_BF(DLYBS, 0); ++ csr |= SPI_BF(DLYBCT, 0); + + npcs_pin = (unsigned int)spi->controller_data; + if (!spi->controller_state) { diff --git a/packages/linux/linux-2.6.18/spi-set-kset-of-master-class-dev-explicitly.patch b/packages/linux/linux-2.6.18/spi-set-kset-of-master-class-dev-explicitly.patch new file mode 100644 index 0000000000..4a6ed65d8b --- /dev/null +++ b/packages/linux/linux-2.6.18/spi-set-kset-of-master-class-dev-explicitly.patch @@ -0,0 +1,34 @@ +From 3bd0f6943520e459659d10f3282285e43d3990f1 Mon Sep 17 00:00:00 2001 +From: Hans-Christian Egtvedt +Date: Wed, 6 Dec 2006 20:36:19 -0800 +Subject: [PATCH] [PATCH] spi: set kset of master class dev explicitly + + + In order for spi_busnum_to_master to work spi master devices must be linked + into the spi_master_class.subsys.kset list. At the moment the default + class_obj_subsys.kset is used and we can't enumerate the master devices. + + +Signed-off-by: Hans-Christian Egtvedt +Cc: David Brownell +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + drivers/spi/spi.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c +index 7d215ea..270e621 100644 +--- a/drivers/spi/spi.c ++++ b/drivers/spi/spi.c +@@ -366,6 +366,7 @@ spi_alloc_master(struct device *dev, unsigned size) + + class_device_initialize(&master->cdev); + master->cdev.class = &spi_master_class; ++ kobj_set_kset_s(&master->cdev, spi_master_class.subsys); + master->cdev.dev = get_device(dev); + spi_master_set_devdata(master, &master[1]); + +-- +1.4.4.1 + diff --git a/packages/linux/linux-2.6.18/update-atstk1002_defconfig.patch b/packages/linux/linux-2.6.18/update-atstk1002_defconfig.patch new file mode 100644 index 0000000000..fef3f8bf5b --- /dev/null +++ b/packages/linux/linux-2.6.18/update-atstk1002_defconfig.patch @@ -0,0 +1,563 @@ +--- + arch/avr32/configs/atstk1002_defconfig | 293 ++++++++++++++++++++++++++++----- + 1 file changed, 250 insertions(+), 43 deletions(-) + +Index: linux-2.6.18/arch/avr32/configs/atstk1002_defconfig +=================================================================== +--- linux-2.6.18.orig/arch/avr32/configs/atstk1002_defconfig 2007-01-11 14:30:26.000000000 +0100 ++++ linux-2.6.18/arch/avr32/configs/atstk1002_defconfig 2007-01-11 15:44:49.000000000 +0100 +@@ -1,13 +1,14 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.18-rc1 +-# Tue Jul 11 12:41:36 2006 ++# Linux kernel version: 2.6.18-at0 ++# Thu Jan 11 15:37:42 2007 + # + CONFIG_AVR32=y + CONFIG_GENERIC_HARDIRQS=y + CONFIG_HARDIRQS_SW_RESEND=y + CONFIG_GENERIC_IRQ_PROBE=y + CONFIG_RWSEM_GENERIC_SPINLOCK=y ++CONFIG_GENERIC_TIME=y + CONFIG_GENERIC_HWEIGHT=y + CONFIG_GENERIC_CALIBRATE_DELAY=y + CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +@@ -25,16 +26,18 @@ + CONFIG_LOCALVERSION="" + # CONFIG_LOCALVERSION_AUTO is not set + CONFIG_SWAP=y +-# CONFIG_SYSVIPC is not set +-# CONFIG_POSIX_MQUEUE is not set +-# CONFIG_BSD_PROCESS_ACCT is not set +-CONFIG_SYSCTL=y ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++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_RELAY is not set + CONFIG_INITRAMFS_SOURCE="" + CONFIG_CC_OPTIMIZE_FOR_SIZE=y + CONFIG_EMBEDDED=y ++CONFIG_SYSCTL=y + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_ALL is not set + # CONFIG_KALLSYMS_EXTRA_PASS is not set +@@ -43,14 +46,15 @@ + CONFIG_BUG=y + CONFIG_ELF_CORE=y + # CONFIG_BASE_FULL is not set +-# CONFIG_FUTEX is not set +-# CONFIG_EPOLL is not set ++CONFIG_FUTEX=y ++CONFIG_EPOLL=y + CONFIG_SHMEM=y +-# CONFIG_SLAB is not set +-# CONFIG_VM_EVENT_COUNTERS is not set ++CONFIG_SLAB=y ++CONFIG_VM_EVENT_COUNTERS=y ++CONFIG_RT_MUTEXES=y + # CONFIG_TINY_SHMEM is not set + CONFIG_BASE_SMALL=1 +-CONFIG_SLOB=y ++# CONFIG_SLOB is not set + + # + # Loadable module support +@@ -60,7 +64,7 @@ + # CONFIG_MODULE_FORCE_UNLOAD is not set + # CONFIG_MODVERSIONS is not set + # CONFIG_MODULE_SRCVERSION_ALL is not set +-# CONFIG_KMOD is not set ++CONFIG_KMOD=y + + # + # Block layer +@@ -90,7 +94,13 @@ + CONFIG_CPU_AT32AP7000=y + CONFIG_BOARD_ATSTK1002=y + CONFIG_BOARD_ATSTK1000=y ++# CONFIG_BOARD_ATNGW is not set + CONFIG_LOADER_U_BOOT=y ++ ++# ++# Atmel AVR32 AP options ++# ++CONFIG_PIO_DEV=y + CONFIG_LOAD_ADDRESS=0x10000000 + CONFIG_ENTRY_ADDRESS=0x90000000 + CONFIG_PHYS_OFFSET=0x10000000 +@@ -113,6 +123,7 @@ + CONFIG_SPLIT_PTLOCK_CPUS=4 + # CONFIG_RESOURCES_64BIT is not set + # CONFIG_OWNERSHIP_TRACE is not set ++CONFIG_DW_DMAC=y + # CONFIG_HZ_100 is not set + CONFIG_HZ_250=y + # CONFIG_HZ_1000 is not set +@@ -199,7 +210,6 @@ + # CONFIG_ATALK is not set + # CONFIG_X25 is not set + # CONFIG_LAPB is not set +-# CONFIG_NET_DIVERT is not set + # CONFIG_ECONET is not set + # CONFIG_WAN_ROUTER is not set + +@@ -212,7 +222,6 @@ + # Network testing + # + # CONFIG_NET_PKTGEN is not set +-# CONFIG_NET_TCPPROBE is not set + # CONFIG_HAMRADIO is not set + # CONFIG_IRDA is not set + # CONFIG_BT is not set +@@ -239,7 +248,85 @@ + # + # Memory Technology Devices (MTD) + # +-# CONFIG_MTD is not set ++CONFIG_MTD=y ++# CONFIG_MTD_DEBUG is not set ++# CONFIG_MTD_CONCAT is not set ++CONFIG_MTD_PARTITIONS=y ++# CONFIG_MTD_REDBOOT_PARTS is not set ++CONFIG_MTD_CMDLINE_PARTS=y ++ ++# ++# User Modules And Translation Layers ++# ++CONFIG_MTD_CHAR=y ++CONFIG_MTD_BLOCK=y ++# CONFIG_FTL is not set ++# CONFIG_NFTL is not set ++# CONFIG_INFTL is not set ++# CONFIG_RFD_FTL is not set ++ ++# ++# RAM/ROM/Flash chip drivers ++# ++CONFIG_MTD_CFI=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 ++# CONFIG_MTD_OBSOLETE_CHIPS 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 is not set ++# CONFIG_MTD_SLRAM is not set ++# CONFIG_MTD_PHRAM is not set ++# CONFIG_MTD_MTDRAM is not set ++# CONFIG_MTD_BLOCK2MTD is not set ++ ++# ++# Disk-On-Chip Device Drivers ++# ++# CONFIG_MTD_DOC2000 is not set ++# CONFIG_MTD_DOC2001 is not set ++# CONFIG_MTD_DOC2001PLUS is not set ++ ++# ++# NAND Flash Device Drivers ++# ++# CONFIG_MTD_NAND is not set ++ ++# ++# OneNAND Flash Device Drivers ++# ++# CONFIG_MTD_ONENAND is not set + + # + # Parallel port support +@@ -260,6 +347,7 @@ + CONFIG_BLK_DEV_RAM=m + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=4096 ++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 + CONFIG_BLK_DEV_INITRD=y + # CONFIG_CDROM_PKTCDVD is not set + # CONFIG_ATA_OVER_ETH is not set +@@ -343,7 +431,7 @@ + CONFIG_PPP_DEFLATE=m + # CONFIG_PPP_BSDCOMP is not set + # CONFIG_PPP_MPPE is not set +-# CONFIG_PPPOE is not set ++CONFIG_PPPOE=m + # CONFIG_SLIP is not set + # CONFIG_SHAPER is not set + # CONFIG_NETCONSOLE is not set +@@ -363,7 +451,25 @@ + # + # Input device support + # +-# CONFIG_INPUT is not set ++CONFIG_INPUT=y ++ ++# ++# Userland interfaces ++# ++# CONFIG_INPUT_MOUSEDEV is not set ++# CONFIG_INPUT_JOYDEV is not set ++# CONFIG_INPUT_TSDEV is not set ++# CONFIG_INPUT_EVDEV is not set ++# CONFIG_INPUT_EVBUG is not set ++ ++# ++# Input Device Drivers ++# ++# CONFIG_INPUT_KEYBOARD is not set ++# CONFIG_INPUT_MOUSE is not set ++# CONFIG_INPUT_JOYSTICK is not set ++# CONFIG_INPUT_TOUCHSCREEN is not set ++# CONFIG_INPUT_MISC is not set + + # + # Hardware I/O ports +@@ -374,7 +480,10 @@ + # + # Character devices + # +-# CONFIG_VT is not set ++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 + + # +@@ -385,9 +494,9 @@ + # + # Non-8250 serial port support + # +-CONFIG_SERIAL_AT91=y +-CONFIG_SERIAL_AT91_CONSOLE=y +-# CONFIG_SERIAL_AT91_TTYAT is not set ++CONFIG_SERIAL_ATMEL=y ++CONFIG_SERIAL_ATMEL_CONSOLE=y ++# CONFIG_SERIAL_ATMEL_TTYAT is not set + CONFIG_SERIAL_CORE=y + CONFIG_SERIAL_CORE_CONSOLE=y + CONFIG_UNIX98_PTYS=y +@@ -422,7 +531,40 @@ + # + # I2C support + # +-# CONFIG_I2C is not set ++CONFIG_I2C=m ++CONFIG_I2C_CHARDEV=m ++ ++# ++# I2C Algorithms ++# ++# CONFIG_I2C_ALGOBIT is not set ++# CONFIG_I2C_ALGOPCF is not set ++# CONFIG_I2C_ALGOPCA is not set ++ ++# ++# I2C Hardware Bus support ++# ++CONFIG_I2C_ATMELTWI=m ++CONFIG_I2C_ATMELTWI_BAUDRATE=100000 ++# CONFIG_I2C_OCORES is not set ++# CONFIG_I2C_PARPORT_LIGHT is not set ++# CONFIG_I2C_STUB is not set ++# CONFIG_I2C_PCA_ISA is not set ++ ++# ++# Miscellaneous I2C Chip support ++# ++# CONFIG_SENSORS_DS1337 is not set ++# CONFIG_SENSORS_DS1374 is not set ++CONFIG_SENSORS_EEPROM=m ++# CONFIG_SENSORS_PCF8574 is not set ++# CONFIG_SENSORS_PCA9539 is not set ++# CONFIG_SENSORS_PCF8591 is not set ++# CONFIG_SENSORS_MAX6875 is not set ++# CONFIG_I2C_DEBUG_CORE is not set ++# CONFIG_I2C_DEBUG_ALGO is not set ++# CONFIG_I2C_DEBUG_BUS is not set ++# CONFIG_I2C_DEBUG_CHIP is not set + + # + # SPI support +@@ -434,7 +576,7 @@ + # + # SPI Master Controller Drivers + # +-CONFIG_SPI_ATMEL=m ++CONFIG_SPI_ATMEL=y + # CONFIG_SPI_BITBANG is not set + + # +@@ -470,33 +612,85 @@ + # Graphics support + # + # CONFIG_FIRMWARE_EDID is not set +-CONFIG_FB=m +-CONFIG_FB_CFB_FILLRECT=m +-CONFIG_FB_CFB_COPYAREA=m +-CONFIG_FB_CFB_IMAGEBLIT=m ++CONFIG_FB=y ++CONFIG_FB_CFB_FILLRECT=y ++CONFIG_FB_CFB_COPYAREA=y ++CONFIG_FB_CFB_IMAGEBLIT=y + # 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 +-CONFIG_FB_SIDSA=m ++CONFIG_FB_SIDSA=y + CONFIG_FB_SIDSA_DEFAULT_BPP=24 + # CONFIG_FB_S1D13XXX is not set + # CONFIG_FB_VIRTUAL is not set + + # ++# Console display driver support ++# ++# CONFIG_VGA_CONSOLE is not set ++CONFIG_DUMMY_CONSOLE=y ++# CONFIG_FRAMEBUFFER_CONSOLE is not set ++ ++# + # Logo configuration + # + # CONFIG_LOGO is not set + CONFIG_BACKLIGHT_LCD_SUPPORT=y + # CONFIG_BACKLIGHT_CLASS_DEVICE is not set +-CONFIG_LCD_CLASS_DEVICE=m ++CONFIG_LCD_CLASS_DEVICE=y + CONFIG_LCD_DEVICE=y +-CONFIG_LCD_LTV350QV=m ++CONFIG_LCD_LTV350QV=y + + # + # Sound + # +-# CONFIG_SOUND is not set ++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_AC97_BUS=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 ++ ++# ++# ALSA AVR32 devices ++# ++CONFIG_SND_ATMEL_AC97=m ++# CONFIG_SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS is not set ++# CONFIG_SND_ATMEL_AC97C_USE_PDC is not set ++CONFIG_SND_AT73C213=m ++# CONFIG_SND_AT73C213_USE_ALSA_MALLOC_CALLS is not set ++ ++# ++# Open Sound System ++# ++CONFIG_SOUND_PRIME=m ++# CONFIG_OSS_OBSOLETE_DRIVER is not set ++# CONFIG_SOUND_MSNDCLAS is not set ++# CONFIG_SOUND_MSNDPIN is not set ++CONFIG_SOUND_AT32_DAC=m + + # + # USB support +@@ -512,12 +706,34 @@ + # + # USB Gadget Support + # +-# CONFIG_USB_GADGET is not set ++CONFIG_USB_GADGET=m ++CONFIG_USB_GADGET_DEBUG_FILES=y ++CONFIG_USB_GADGET_SELECTED=y ++# CONFIG_USB_GADGET_NET2280 is not set ++# CONFIG_USB_GADGET_PXA2XX is not set ++# CONFIG_USB_GADGET_GOKU is not set ++# CONFIG_USB_GADGET_LH7A40X is not set ++CONFIG_USB_GADGET_HUSB2DEV=y ++CONFIG_USB_HUSB2DEV=m ++# CONFIG_USB_GADGET_OMAP is not set ++# CONFIG_USB_GADGET_AT91 is not set ++# CONFIG_USB_GADGET_DUMMY_HCD is not set ++CONFIG_USB_GADGET_DUALSPEED=y ++CONFIG_USB_ZERO=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 + + # + # MMC/SD Card support + # +-# CONFIG_MMC is not set ++CONFIG_MMC=y ++# CONFIG_MMC_DEBUG is not set ++CONFIG_MMC_BLOCK=y ++CONFIG_MMC_ATMELMCI=y + + # + # LED devices +@@ -570,14 +786,14 @@ + # CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + # CONFIG_OCFS2_FS is not set +-CONFIG_MINIX_FS=m +-CONFIG_ROMFS_FS=m ++# CONFIG_MINIX_FS is not set ++CONFIG_ROMFS_FS=y + # CONFIG_INOTIFY is not set + # CONFIG_QUOTA is not set + # CONFIG_DNOTIFY is not set + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set +-# CONFIG_FUSE_FS is not set ++CONFIG_FUSE_FS=m + + # + # CD-ROM/DVD Filesystems +@@ -604,7 +820,7 @@ + CONFIG_TMPFS=y + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y +-CONFIG_CONFIGFS_FS=m ++CONFIG_CONFIGFS_FS=y + + # + # Miscellaneous filesystems +@@ -616,6 +832,16 @@ + # CONFIG_BEFS_FS is not set + # CONFIG_BFS_FS is not set + # CONFIG_EFS_FS is not set ++# CONFIG_JFFS_FS is not set ++CONFIG_JFFS2_FS=y ++CONFIG_JFFS2_FS_DEBUG=0 ++CONFIG_JFFS2_FS_WRITEBUFFER=y ++# CONFIG_JFFS2_SUMMARY is not set ++# CONFIG_JFFS2_FS_XATTR is not set ++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set ++CONFIG_JFFS2_ZLIB=y ++CONFIG_JFFS2_RTIME=y ++# CONFIG_JFFS2_RUBIN is not set + # CONFIG_CRAMFS is not set + # CONFIG_VXFS_FS is not set + # CONFIG_HPFS_FS is not set +@@ -639,7 +865,8 @@ + CONFIG_SUNRPC=y + # CONFIG_RPCSEC_GSS_KRB5 is not set + # CONFIG_RPCSEC_GSS_SPKM3 is not set +-# CONFIG_SMB_FS is not set ++CONFIG_SMB_FS=m ++# CONFIG_SMB_NLS_DEFAULT is not set + CONFIG_CIFS=m + # CONFIG_CIFS_STATS is not set + # CONFIG_CIFS_WEAK_PW_HASH is not set +@@ -702,16 +929,24 @@ + CONFIG_NLS_UTF8=m + + # ++# Profiling support ++# ++# CONFIG_PROFILING is not set ++ ++# + # Kernel hacking + # + CONFIG_TRACE_IRQFLAGS_SUPPORT=y +-CONFIG_PRINTK_TIME=y ++# CONFIG_PRINTK_TIME is not set + CONFIG_MAGIC_SYSRQ=y + # CONFIG_UNUSED_SYMBOLS is not set + CONFIG_DEBUG_KERNEL=y + CONFIG_LOG_BUF_SHIFT=14 + CONFIG_DETECT_SOFTLOCKUP=y + # CONFIG_SCHEDSTATS is not set ++# CONFIG_DEBUG_SLAB is not set ++# CONFIG_DEBUG_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_RWSEMS is not set +@@ -720,13 +955,13 @@ + # CONFIG_DEBUG_KOBJECT is not set + CONFIG_DEBUG_BUGVERBOSE=y + # CONFIG_DEBUG_INFO is not set +-CONFIG_DEBUG_FS=y ++# CONFIG_DEBUG_FS is not set + # CONFIG_DEBUG_VM is not set + CONFIG_FRAME_POINTER=y + # CONFIG_UNWIND_INFO is not set +-CONFIG_FORCED_INLINING=y ++# CONFIG_FORCED_INLINING is not set + # CONFIG_RCU_TORTURE_TEST is not set +-CONFIG_KPROBES=y ++# CONFIG_KPROBES is not set + + # + # Security options +@@ -748,7 +983,8 @@ + # + CONFIG_CRC_CCITT=m + # CONFIG_CRC16 is not set +-CONFIG_CRC32=m ++CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set +-CONFIG_ZLIB_INFLATE=m +-CONFIG_ZLIB_DEFLATE=m ++CONFIG_ZLIB_INFLATE=y ++CONFIG_ZLIB_DEFLATE=y ++CONFIG_PLIST=y diff --git a/packages/linux/linux-2.6.18/usart-make-rx-timeout-baudrate-independent.patch b/packages/linux/linux-2.6.18/usart-make-rx-timeout-baudrate-independent.patch new file mode 100644 index 0000000000..9da06670ea --- /dev/null +++ b/packages/linux/linux-2.6.18/usart-make-rx-timeout-baudrate-independent.patch @@ -0,0 +1,83 @@ +--- + drivers/serial/atmel_usart.c | 33 ++++++++++++++++++++++++++------- + 1 file changed, 26 insertions(+), 7 deletions(-) + +Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/serial/atmel_usart.c 2006-12-18 14:59:00.000000000 +0100 ++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-12-18 16:51:33.000000000 +0100 +@@ -76,6 +76,14 @@ struct usart3_port { + struct clk *mck; + unsigned long mapsize; + struct uart_port uart; ++ ++ /* ++ * If no data is received within rx_timeout_us microseconds or ++ * rx_timeout_cycles cycles, whichever is longest, we get an ++ * interrupt. ++ */ ++ unsigned int rx_timeout_us; ++ unsigned int rx_timeout_cycles; + }; + #define to_usart3_port(port) container_of(port, struct usart3_port, uart) + +@@ -582,12 +590,6 @@ static int usart3_startup(struct uart_po + usart3_writel(up, TCR, 0); + up->tx_dma_head = port->info->xmit.tail; + +- /* +- * Set a suitable timeout. 2000 bit periods corresponds to +- * about 17 ms at 115200 bps +- */ +- usart3_writel(up, RTOR, 2000); +- + /* Reset and enable receiver and transmitter */ + usart3_writel(up, CR, (USART3_BIT(RSTRX) + | USART3_BIT(RSTTX) +@@ -633,6 +635,7 @@ static void usart3_set_termios(struct ua + struct usart3_port *up = to_usart3_port(port); + unsigned int baud, quot, mode = 0; + unsigned int imr, flags; ++ unsigned long long timeout_cycles; + + pr_debug("usart3: set_termios\n"); + +@@ -692,6 +695,13 @@ static void usart3_set_termios(struct ua + | USART3_BIT(RSTRX))); + } + ++ timeout_cycles = up->rx_timeout_us; ++ timeout_cycles *= baud; ++ do_div(timeout_cycles, 1000000); ++ if (timeout_cycles < up->rx_timeout_cycles) ++ timeout_cycles = up->rx_timeout_cycles; ++ ++ pr_debug("usart3: Setting RTOR to %llu...\n", timeout_cycles); + pr_debug("usart3: Setting BRGR to %u (baud rate %u)...\n", quot, baud); + + /* Disable receiver and transmitter */ +@@ -701,7 +711,12 @@ static void usart3_set_termios(struct ua + /* Set the parity, stop bits and data size */ + usart3_writel(up, MR, mode); + +- /* Set the baud rate and enable receiver and transmitter */ ++ /* ++ * Set the baud rate and RX timeout, and enable receiver and ++ * transmitter. ++ */ ++ usart3_writel(up, RTOR, timeout_cycles); ++ + usart3_writel(up, BRGR, quot); + usart3_writel(up, CR, (USART3_BIT(TXEN) + | USART3_BIT(RXEN))); +@@ -805,6 +820,10 @@ static int __devinit initialize_port(str + return PTR_ERR(up->mck); + clk_enable(up->mck); + ++ /* Default RX timeout after 10 ms, but no less than 10 cycles */ ++ up->rx_timeout_us = 10000; ++ up->rx_timeout_cycles = 10; ++ + port->mapbase = regs->start; + up->mapsize = regs->end - regs->start + 1; + port->irq = platform_get_irq(pdev, 0); diff --git a/packages/linux/linux-2.6.18/usb-ethernet-align-all-descriptors-on-a-word-boundary.patch b/packages/linux/linux-2.6.18/usb-ethernet-align-all-descriptors-on-a-word-boundary.patch new file mode 100644 index 0000000000..65aa9a4b7c --- /dev/null +++ b/packages/linux/linux-2.6.18/usb-ethernet-align-all-descriptors-on-a-word-boundary.patch @@ -0,0 +1,171 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Tue Feb 28 08:51:18 2006 +0100 +Subject: [PATCH] USB Ethernet: Align all descriptors on a word boundary + +Seems like gcc has problems with packed structs, so we'll just align +them explicitly. + +--- + + drivers/usb/gadget/ether.c | 35 ++++++++++++++++++----------------- + 1 file changed, 18 insertions(+), 17 deletions(-) + +Index: linux-2.6.18-avr32/drivers/usb/gadget/ether.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/ether.c 2006-09-11 14:36:02.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/usb/gadget/ether.c 2006-09-12 10:14:19.000000000 +0200 +@@ -428,7 +428,7 @@ static inline int BITRATE(struct usb_gad + #define DEV_RNDIS_CONFIG_VALUE 2 /* rndis; optional */ + + static struct usb_device_descriptor +-device_desc = { ++device_desc __attribute__((aligned(2))) = { + .bLength = sizeof device_desc, + .bDescriptorType = USB_DT_DEVICE, + +@@ -454,7 +454,7 @@ otg_descriptor = { + }; + + static struct usb_config_descriptor +-eth_config = { ++eth_config __attribute__((aligned(2))) = { + .bLength = sizeof eth_config, + .bDescriptorType = USB_DT_CONFIG, + +@@ -468,7 +468,7 @@ eth_config = { + + #ifdef CONFIG_USB_ETH_RNDIS + static struct usb_config_descriptor +-rndis_config = { ++rndis_config __attribute__((aligned(2))) = { + .bLength = sizeof rndis_config, + .bDescriptorType = USB_DT_CONFIG, + +@@ -493,7 +493,7 @@ rndis_config = { + + #ifdef DEV_CONFIG_CDC + static struct usb_interface_descriptor +-control_intf = { ++control_intf __attribute__((aligned(2))) = { + .bLength = sizeof control_intf, + .bDescriptorType = USB_DT_INTERFACE, + +@@ -509,7 +509,7 @@ control_intf = { + + #ifdef CONFIG_USB_ETH_RNDIS + static const struct usb_interface_descriptor +-rndis_control_intf = { ++rndis_control_intf __attribute__((aligned(2))) = { + .bLength = sizeof rndis_control_intf, + .bDescriptorType = USB_DT_INTERFACE, + +@@ -524,7 +524,7 @@ rndis_control_intf = { + + #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS) + +-static const struct usb_cdc_header_desc header_desc = { ++static const struct usb_cdc_header_desc __attribute__((aligned(2))) header_desc = { + .bLength = sizeof header_desc, + .bDescriptorType = USB_DT_CS_INTERFACE, + .bDescriptorSubType = USB_CDC_HEADER_TYPE, +@@ -566,7 +566,8 @@ static const struct usb_cdc_acm_descript + + #ifdef DEV_CONFIG_CDC + +-static const struct usb_cdc_ether_desc ether_desc = { ++static const struct usb_cdc_ether_desc ++ether_desc __attribute__((aligned(2))) = { + .bLength = sizeof ether_desc, + .bDescriptorType = USB_DT_CS_INTERFACE, + .bDescriptorSubType = USB_CDC_ETHERNET_TYPE, +@@ -601,7 +602,7 @@ static const struct usb_cdc_ether_desc e + #define STATUS_BYTECOUNT 16 /* 8 byte header + data */ + + static struct usb_endpoint_descriptor +-fs_status_desc = { ++fs_status_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -632,7 +633,7 @@ data_nop_intf = { + /* ... but the "real" data interface has two bulk endpoints */ + + static const struct usb_interface_descriptor +-data_intf = { ++data_intf __attribute__((aligned(2))) = { + .bLength = sizeof data_intf, + .bDescriptorType = USB_DT_INTERFACE, + +@@ -652,7 +653,7 @@ data_intf = { + /* RNDIS doesn't activate by changing to the "real" altsetting */ + + static const struct usb_interface_descriptor +-rndis_data_intf = { ++rndis_data_intf __attribute__((aligned(2))) = { + .bLength = sizeof rndis_data_intf, + .bDescriptorType = USB_DT_INTERFACE, + +@@ -675,7 +676,7 @@ rndis_data_intf = { + */ + + static const struct usb_interface_descriptor +-subset_data_intf = { ++subset_data_intf __attribute__((aligned(2))) = { + .bLength = sizeof subset_data_intf, + .bDescriptorType = USB_DT_INTERFACE, + +@@ -692,7 +693,7 @@ subset_data_intf = { + + + static struct usb_endpoint_descriptor +-fs_source_desc = { ++fs_source_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -701,7 +702,7 @@ fs_source_desc = { + }; + + static struct usb_endpoint_descriptor +-fs_sink_desc = { ++fs_sink_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -767,7 +768,7 @@ static const struct usb_descriptor_heade + + #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS) + static struct usb_endpoint_descriptor +-hs_status_desc = { ++hs_status_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -778,7 +779,7 @@ hs_status_desc = { + #endif /* DEV_CONFIG_CDC */ + + static struct usb_endpoint_descriptor +-hs_source_desc = { ++hs_source_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -787,7 +788,7 @@ hs_source_desc = { + }; + + static struct usb_endpoint_descriptor +-hs_sink_desc = { ++hs_sink_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -796,7 +797,7 @@ hs_sink_desc = { + }; + + static struct usb_qualifier_descriptor +-dev_qualifier = { ++dev_qualifier __attribute__((aligned(2))) = { + .bLength = sizeof dev_qualifier, + .bDescriptorType = USB_DT_DEVICE_QUALIFIER, + diff --git a/packages/linux/linux-2.6.18/usb-ethernet-define-cdc-capability-for-husb2.patch b/packages/linux/linux-2.6.18/usb-ethernet-define-cdc-capability-for-husb2.patch new file mode 100644 index 0000000000..1e3295e5d9 --- /dev/null +++ b/packages/linux/linux-2.6.18/usb-ethernet-define-cdc-capability-for-husb2.patch @@ -0,0 +1,27 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Mon Feb 27 18:15:04 2006 +0100 +Subject: [PATCH] USB: Define CDC capability for HUSB2 + +Define DEV_CONFIG_CDC when compiling for HUSB2DEV. + +--- + + drivers/usb/gadget/ether.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Index: linux-2.6.18-avr32/drivers/usb/gadget/ether.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/ether.c 2006-09-12 10:14:19.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/usb/gadget/ether.c 2006-09-12 10:14:40.000000000 +0200 +@@ -266,6 +266,10 @@ MODULE_PARM_DESC(host_addr, "Host Ethern + #define DEV_CONFIG_CDC + #endif + ++#ifdef CONFIG_USB_GADGET_HUSB2DEV ++#define DEV_CONFIG_CDC ++#endif ++ + + /* For CDC-incapable hardware, choose the simple cdc subset. + * Anything that talks bulk (without notable bugs) can do this. diff --git a/packages/linux/linux-2.6.18/usb-file-storage-align-all-descriptors-on-a-word-boundary.patch b/packages/linux/linux-2.6.18/usb-file-storage-align-all-descriptors-on-a-word-boundary.patch new file mode 100644 index 0000000000..10778d5903 --- /dev/null +++ b/packages/linux/linux-2.6.18/usb-file-storage-align-all-descriptors-on-a-word-boundary.patch @@ -0,0 +1,107 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Tue Feb 28 08:51:18 2006 +0100 +Subject: [PATCH] USB File Storage: Align all descriptors on a word boundary + +Seems like gcc has problems with packed structs, so we'll just align +them explicitly. + +--- + + drivers/usb/gadget/file_storage.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +Index: linux-2.6.18-avr32/drivers/usb/gadget/file_storage.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/file_storage.c 2006-09-11 14:36:02.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/usb/gadget/file_storage.c 2006-09-12 10:16:30.000000000 +0200 +@@ -853,7 +853,7 @@ static void inline put_be32(u8 *buf, u32 + #define CONFIG_VALUE 1 + + static struct usb_device_descriptor +-device_desc = { ++device_desc __attribute__((aligned(2))) = { + .bLength = sizeof device_desc, + .bDescriptorType = USB_DT_DEVICE, + +@@ -872,7 +872,7 @@ device_desc = { + }; + + static struct usb_config_descriptor +-config_desc = { ++config_desc __attribute__((aligned(2))) = { + .bLength = sizeof config_desc, + .bDescriptorType = USB_DT_CONFIG, + +@@ -895,7 +895,7 @@ otg_desc = { + /* There is only one interface. */ + + static struct usb_interface_descriptor +-intf_desc = { ++intf_desc __attribute__((aligned(2))) = { + .bLength = sizeof intf_desc, + .bDescriptorType = USB_DT_INTERFACE, + +@@ -910,7 +910,7 @@ intf_desc = { + * and interrupt-in. */ + + static struct usb_endpoint_descriptor +-fs_bulk_in_desc = { ++fs_bulk_in_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -920,7 +920,7 @@ fs_bulk_in_desc = { + }; + + static struct usb_endpoint_descriptor +-fs_bulk_out_desc = { ++fs_bulk_out_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -930,7 +930,7 @@ fs_bulk_out_desc = { + }; + + static struct usb_endpoint_descriptor +-fs_intr_in_desc = { ++fs_intr_in_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -962,7 +962,7 @@ static const struct usb_descriptor_heade + * for the config descriptor. + */ + static struct usb_qualifier_descriptor +-dev_qualifier = { ++dev_qualifier __attribute__((aligned(2))) = { + .bLength = sizeof dev_qualifier, + .bDescriptorType = USB_DT_DEVICE_QUALIFIER, + +@@ -973,7 +973,7 @@ dev_qualifier = { + }; + + static struct usb_endpoint_descriptor +-hs_bulk_in_desc = { ++hs_bulk_in_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -983,7 +983,7 @@ hs_bulk_in_desc = { + }; + + static struct usb_endpoint_descriptor +-hs_bulk_out_desc = { ++hs_bulk_out_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -994,7 +994,7 @@ hs_bulk_out_desc = { + }; + + static struct usb_endpoint_descriptor +-hs_intr_in_desc = { ++hs_intr_in_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + diff --git a/packages/linux/linux-2.6.18/usb-serial-align-all-descriptors-on-a-word-boundary.patch b/packages/linux/linux-2.6.18/usb-serial-align-all-descriptors-on-a-word-boundary.patch new file mode 100644 index 0000000000..f78063c9fb --- /dev/null +++ b/packages/linux/linux-2.6.18/usb-serial-align-all-descriptors-on-a-word-boundary.patch @@ -0,0 +1,140 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Tue Feb 28 08:51:18 2006 +0100 +Subject: [PATCH] USB Serial: Align all descriptors on a word boundary + +Seems like gcc has problems with packed structs, so we'll just align +them explicitly. + +--- + + drivers/usb/gadget/serial.c | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +Index: linux-2.6.18-avr32/drivers/usb/gadget/serial.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/serial.c 2006-09-11 14:36:02.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/usb/gadget/serial.c 2006-09-12 10:17:52.000000000 +0200 +@@ -333,7 +333,7 @@ static struct usb_gadget_strings gs_stri + .strings = gs_strings, + }; + +-static struct usb_device_descriptor gs_device_desc = { ++static struct usb_device_descriptor __attribute__((aligned(2))) gs_device_desc = { + .bLength = USB_DT_DEVICE_SIZE, + .bDescriptorType = USB_DT_DEVICE, + .bcdUSB = __constant_cpu_to_le16(0x0200), +@@ -353,7 +353,7 @@ static struct usb_otg_descriptor gs_otg_ + .bmAttributes = USB_OTG_SRP, + }; + +-static struct usb_config_descriptor gs_bulk_config_desc = { ++static struct usb_config_descriptor __attribute__((aligned(2))) gs_bulk_config_desc = { + .bLength = USB_DT_CONFIG_SIZE, + .bDescriptorType = USB_DT_CONFIG, + /* .wTotalLength computed dynamically */ +@@ -364,7 +364,7 @@ static struct usb_config_descriptor gs_b + .bMaxPower = 1, + }; + +-static struct usb_config_descriptor gs_acm_config_desc = { ++static struct usb_config_descriptor __attribute__((aligned(2))) gs_acm_config_desc = { + .bLength = USB_DT_CONFIG_SIZE, + .bDescriptorType = USB_DT_CONFIG, + /* .wTotalLength computed dynamically */ +@@ -375,7 +375,7 @@ static struct usb_config_descriptor gs_a + .bMaxPower = 1, + }; + +-static const struct usb_interface_descriptor gs_bulk_interface_desc = { ++static const struct usb_interface_descriptor __attribute__((aligned(2))) gs_bulk_interface_desc = { + .bLength = USB_DT_INTERFACE_SIZE, + .bDescriptorType = USB_DT_INTERFACE, + .bInterfaceNumber = GS_BULK_INTERFACE_ID, +@@ -386,7 +386,7 @@ static const struct usb_interface_descri + .iInterface = GS_DATA_STR_ID, + }; + +-static const struct usb_interface_descriptor gs_control_interface_desc = { ++static const struct usb_interface_descriptor __attribute__((aligned(2))) gs_control_interface_desc = { + .bLength = USB_DT_INTERFACE_SIZE, + .bDescriptorType = USB_DT_INTERFACE, + .bInterfaceNumber = GS_CONTROL_INTERFACE_ID, +@@ -397,7 +397,7 @@ static const struct usb_interface_descri + .iInterface = GS_CONTROL_STR_ID, + }; + +-static const struct usb_interface_descriptor gs_data_interface_desc = { ++static const struct usb_interface_descriptor __attribute__((aligned(2))) gs_data_interface_desc = { + .bLength = USB_DT_INTERFACE_SIZE, + .bDescriptorType = USB_DT_INTERFACE, + .bInterfaceNumber = GS_DATA_INTERFACE_ID, +@@ -408,7 +408,7 @@ static const struct usb_interface_descri + .iInterface = GS_DATA_STR_ID, + }; + +-static const struct usb_cdc_header_desc gs_header_desc = { ++static const struct usb_cdc_header_desc __attribute__((aligned(2))) gs_header_desc = { + .bLength = sizeof(gs_header_desc), + .bDescriptorType = USB_DT_CS_INTERFACE, + .bDescriptorSubType = USB_CDC_HEADER_TYPE, +@@ -438,7 +438,7 @@ static const struct usb_cdc_union_desc g + .bSlaveInterface0 = 1, /* index of data interface */ + }; + +-static struct usb_endpoint_descriptor gs_fullspeed_notify_desc = { ++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_fullspeed_notify_desc = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = USB_DIR_IN, +@@ -447,14 +447,14 @@ static struct usb_endpoint_descriptor gs + .bInterval = 1 << GS_LOG2_NOTIFY_INTERVAL, + }; + +-static struct usb_endpoint_descriptor gs_fullspeed_in_desc = { ++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_fullspeed_in_desc = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = USB_DIR_IN, + .bmAttributes = USB_ENDPOINT_XFER_BULK, + }; + +-static struct usb_endpoint_descriptor gs_fullspeed_out_desc = { ++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_fullspeed_out_desc = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = USB_DIR_OUT, +@@ -484,7 +484,7 @@ static const struct usb_descriptor_heade + }; + + #ifdef CONFIG_USB_GADGET_DUALSPEED +-static struct usb_endpoint_descriptor gs_highspeed_notify_desc = { ++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_highspeed_notify_desc = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = USB_DIR_IN, +@@ -493,21 +493,21 @@ static struct usb_endpoint_descriptor gs + .bInterval = GS_LOG2_NOTIFY_INTERVAL+4, + }; + +-static struct usb_endpoint_descriptor gs_highspeed_in_desc = { ++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_highspeed_in_desc = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + .bmAttributes = USB_ENDPOINT_XFER_BULK, + .wMaxPacketSize = __constant_cpu_to_le16(512), + }; + +-static struct usb_endpoint_descriptor gs_highspeed_out_desc = { ++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_highspeed_out_desc = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + .bmAttributes = USB_ENDPOINT_XFER_BULK, + .wMaxPacketSize = __constant_cpu_to_le16(512), + }; + +-static struct usb_qualifier_descriptor gs_qualifier_desc = { ++static struct usb_qualifier_descriptor __attribute__((aligned(2))) gs_qualifier_desc = { + .bLength = sizeof(struct usb_qualifier_descriptor), + .bDescriptorType = USB_DT_DEVICE_QUALIFIER, + .bcdUSB = __constant_cpu_to_le16 (0x0200), diff --git a/packages/linux/linux-2.6.18/usb-zero-align-all-descriptors-on-a-word-boundary.patch b/packages/linux/linux-2.6.18/usb-zero-align-all-descriptors-on-a-word-boundary.patch new file mode 100644 index 0000000000..e9143eec58 --- /dev/null +++ b/packages/linux/linux-2.6.18/usb-zero-align-all-descriptors-on-a-word-boundary.patch @@ -0,0 +1,107 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Tue Feb 28 08:51:18 2006 +0100 +Subject: [PATCH] USB Zero: Align all descriptors on a word boundary + +Seems like gcc has problems with packed structs, so we'll just align +them explicitly. + +--- + + drivers/usb/gadget/zero.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +Index: linux-2.6.18-avr32/drivers/usb/gadget/zero.c +=================================================================== +--- linux-2.6.18-avr32.orig/drivers/usb/gadget/zero.c 2006-09-11 14:36:02.000000000 +0200 ++++ linux-2.6.18-avr32/drivers/usb/gadget/zero.c 2006-09-12 10:19:02.000000000 +0200 +@@ -221,7 +221,7 @@ module_param (loopdefault, bool, S_IRUGO + #define CONFIG_LOOPBACK 2 + + static struct usb_device_descriptor +-device_desc = { ++device_desc __attribute__((aligned(2))) = { + .bLength = sizeof device_desc, + .bDescriptorType = USB_DT_DEVICE, + +@@ -237,7 +237,7 @@ device_desc = { + }; + + static struct usb_config_descriptor +-source_sink_config = { ++source_sink_config __attribute__((aligned(2))) = { + .bLength = sizeof source_sink_config, + .bDescriptorType = USB_DT_CONFIG, + +@@ -250,7 +250,7 @@ source_sink_config = { + }; + + static struct usb_config_descriptor +-loopback_config = { ++loopback_config __attribute__((aligned(2))) = { + .bLength = sizeof loopback_config, + .bDescriptorType = USB_DT_CONFIG, + +@@ -273,7 +273,7 @@ otg_descriptor = { + /* one interface in each configuration */ + + static const struct usb_interface_descriptor +-source_sink_intf = { ++source_sink_intf __attribute__((aligned(2))) = { + .bLength = sizeof source_sink_intf, + .bDescriptorType = USB_DT_INTERFACE, + +@@ -283,7 +283,7 @@ source_sink_intf = { + }; + + static const struct usb_interface_descriptor +-loopback_intf = { ++loopback_intf __attribute__((aligned(2))) = { + .bLength = sizeof loopback_intf, + .bDescriptorType = USB_DT_INTERFACE, + +@@ -295,7 +295,7 @@ loopback_intf = { + /* two full speed bulk endpoints; their use is config-dependent */ + + static struct usb_endpoint_descriptor +-fs_source_desc = { ++fs_source_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -304,7 +304,7 @@ fs_source_desc = { + }; + + static struct usb_endpoint_descriptor +-fs_sink_desc = { ++fs_sink_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -340,7 +340,7 @@ static const struct usb_descriptor_heade + */ + + static struct usb_endpoint_descriptor +-hs_source_desc = { ++hs_source_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -349,7 +349,7 @@ hs_source_desc = { + }; + + static struct usb_endpoint_descriptor +-hs_sink_desc = { ++hs_sink_desc __attribute__((aligned(2))) = { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + +@@ -358,7 +358,7 @@ hs_sink_desc = { + }; + + static struct usb_qualifier_descriptor +-dev_qualifier = { ++dev_qualifier __attribute__((aligned(2))) = { + .bLength = sizeof dev_qualifier, + .bDescriptorType = USB_DT_DEVICE_QUALIFIER, + -- cgit v1.2.3 From cc93b59948038ddfec94543ca8397309a80600a5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 12 Aug 2007 08:31:02 +0000 Subject: at32stk1000, atngw100: fix machine features and uboot version --- conf/machine/at32stk1000.conf | 4 +++- conf/machine/atngw100.conf | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/conf/machine/at32stk1000.conf b/conf/machine/at32stk1000.conf index faa4785fb4..5acc5b88fe 100644 --- a/conf/machine/at32stk1000.conf +++ b/conf/machine/at32stk1000.conf @@ -11,7 +11,7 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive" #don't try to access tty1 USE_VT = "0" -MACHINE_FEATURES = "kernel26 alsa ext2 usbhost usbgadget screen" +MACHINE_FEATURES = "kernel26 alsa ext2 usbgadget touchscreen screen" # used by sysvinit_2 SERIAL_CONSOLE = "115200" @@ -19,3 +19,5 @@ SERIAL_CONSOLE = "115200" # used by some images ROOT_FLASH_SIZE = "8" EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" + +PREFERRED_VERSION_u-boot = "1.1.4" diff --git a/conf/machine/atngw100.conf b/conf/machine/atngw100.conf index b725831321..833282d468 100644 --- a/conf/machine/atngw100.conf +++ b/conf/machine/atngw100.conf @@ -9,7 +9,7 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive" #don't try to access tty1 USE_VT = "0" -MACHINE_FEATURES = "kernel26 ext2 usbhost usbgadget" +MACHINE_FEATURES = "kernel26 ext2 usbgadget" # used by sysvinit_2 SERIAL_CONSOLE = "115200" @@ -18,3 +18,4 @@ SERIAL_CONSOLE = "115200" ROOT_FLASH_SIZE = "8" EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" +PREFERRED_VERSION_u-boot = "1.1.4" -- cgit v1.2.3 From 2a515b9b1760e1474d2b257e68c00998297f422c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 12 Aug 2007 08:35:48 +0000 Subject: busybox: fix avr32 build, courtesy Stelios Koroneos --- .../install-should-unlink-dest-if-it-exists.patch | 53 ++++++++++++++++++++++ packages/busybox/busybox_1.2.1.bb | 4 +- .../install-should-unlink-dest-if-it-exists.patch | 53 ++++++++++++++++++++++ 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch create mode 100644 packages/busybox/files/install-should-unlink-dest-if-it-exists.patch diff --git a/packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch b/packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch new file mode 100644 index 0000000000..4bec313f0e --- /dev/null +++ b/packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch @@ -0,0 +1,53 @@ +--- + coreutils/install.c | 2 +- + include/libbb.h | 3 ++- + libbb/copy_file.c | 9 +++++++++ + 3 files changed, 12 insertions(+), 2 deletions(-) + +Index: busybox-1.2.1/coreutils/install.c +=================================================================== +--- busybox-1.2.1.orig/coreutils/install.c 2006-10-19 16:33:48.000000000 +0200 ++++ busybox-1.2.1/coreutils/install.c 2006-10-19 16:35:58.000000000 +0200 +@@ -59,7 +59,7 @@ int install_main(int argc, char **argv) + char *gid_str = "-1"; + char *uid_str = "-1"; + char *mode_str = "0755"; +- int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE; ++ int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE | FILEUTILS_NO_TRUNC; + int ret = EXIT_SUCCESS, flags, i, isdir; + + #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS +Index: busybox-1.2.1/include/libbb.h +=================================================================== +--- busybox-1.2.1.orig/include/libbb.h 2006-10-19 16:24:50.000000000 +0200 ++++ busybox-1.2.1/include/libbb.h 2006-10-19 16:32:40.000000000 +0200 +@@ -345,7 +345,8 @@ enum { /* DO NOT CHANGE THESE VALUES! c + FILEUTILS_DEREFERENCE = 2, + FILEUTILS_RECUR = 4, + FILEUTILS_FORCE = 8, +- FILEUTILS_INTERACTIVE = 16 ++ FILEUTILS_INTERACTIVE = 16, ++ FILEUTILS_NO_TRUNC = 32 + }; + + extern const char *bb_applet_name; +Index: busybox-1.2.1/libbb/copy_file.c +=================================================================== +--- busybox-1.2.1.orig/libbb/copy_file.c 2006-10-19 16:26:53.000000000 +0200 ++++ busybox-1.2.1/libbb/copy_file.c 2006-10-19 16:32:28.000000000 +0200 +@@ -136,6 +136,15 @@ int copy_file(const char *source, const + } + } + ++ if (flags & FILEUTILS_NO_TRUNC) { ++ if (unlink(dest) < 0) { ++ bb_perror_msg("unable to remove `%s'", dest); ++ close(src_fd); ++ return -1; ++ } ++ goto dest_removed; ++ } ++ + dst_fd = open(dest, O_WRONLY|O_TRUNC); + if (dst_fd == -1) { + if (!(flags & FILEUTILS_FORCE)) { diff --git a/packages/busybox/busybox_1.2.1.bb b/packages/busybox/busybox_1.2.1.bb index 054649e9df..773c5e1a7e 100644 --- a/packages/busybox/busybox_1.2.1.bb +++ b/packages/busybox/busybox_1.2.1.bb @@ -1,11 +1,13 @@ require busybox.inc -PR = "r13" +PR = "r14" SRC_URI += "file://wget-long-options.patch;patch=1 \ file://df_rootfs.patch;patch=1 \ file://defconfig" +SRC_URI_append_avr32 = " file://install-should-unlink-dest-if-it-exists.patch;patch=1" + do_configure () { install -m 0644 ${WORKDIR}/defconfig ${S}/.config.oe diff --git a/packages/busybox/files/install-should-unlink-dest-if-it-exists.patch b/packages/busybox/files/install-should-unlink-dest-if-it-exists.patch new file mode 100644 index 0000000000..4bec313f0e --- /dev/null +++ b/packages/busybox/files/install-should-unlink-dest-if-it-exists.patch @@ -0,0 +1,53 @@ +--- + coreutils/install.c | 2 +- + include/libbb.h | 3 ++- + libbb/copy_file.c | 9 +++++++++ + 3 files changed, 12 insertions(+), 2 deletions(-) + +Index: busybox-1.2.1/coreutils/install.c +=================================================================== +--- busybox-1.2.1.orig/coreutils/install.c 2006-10-19 16:33:48.000000000 +0200 ++++ busybox-1.2.1/coreutils/install.c 2006-10-19 16:35:58.000000000 +0200 +@@ -59,7 +59,7 @@ int install_main(int argc, char **argv) + char *gid_str = "-1"; + char *uid_str = "-1"; + char *mode_str = "0755"; +- int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE; ++ int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE | FILEUTILS_NO_TRUNC; + int ret = EXIT_SUCCESS, flags, i, isdir; + + #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS +Index: busybox-1.2.1/include/libbb.h +=================================================================== +--- busybox-1.2.1.orig/include/libbb.h 2006-10-19 16:24:50.000000000 +0200 ++++ busybox-1.2.1/include/libbb.h 2006-10-19 16:32:40.000000000 +0200 +@@ -345,7 +345,8 @@ enum { /* DO NOT CHANGE THESE VALUES! c + FILEUTILS_DEREFERENCE = 2, + FILEUTILS_RECUR = 4, + FILEUTILS_FORCE = 8, +- FILEUTILS_INTERACTIVE = 16 ++ FILEUTILS_INTERACTIVE = 16, ++ FILEUTILS_NO_TRUNC = 32 + }; + + extern const char *bb_applet_name; +Index: busybox-1.2.1/libbb/copy_file.c +=================================================================== +--- busybox-1.2.1.orig/libbb/copy_file.c 2006-10-19 16:26:53.000000000 +0200 ++++ busybox-1.2.1/libbb/copy_file.c 2006-10-19 16:32:28.000000000 +0200 +@@ -136,6 +136,15 @@ int copy_file(const char *source, const + } + } + ++ if (flags & FILEUTILS_NO_TRUNC) { ++ if (unlink(dest) < 0) { ++ bb_perror_msg("unable to remove `%s'", dest); ++ close(src_fd); ++ return -1; ++ } ++ goto dest_removed; ++ } ++ + dst_fd = open(dest, O_WRONLY|O_TRUNC); + if (dst_fd == -1) { + if (!(flags & FILEUTILS_FORCE)) { -- cgit v1.2.3 From fda68a217e595dc73c7d6da6f949c7e0d62ad210 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 12 Aug 2007 09:12:34 +0000 Subject: linux 2.6.18: add avr32 defconfigs --- packages/linux/linux-2.6.18/at32stk1000/defconfig | 990 ++++++++++++++++++++++ packages/linux/linux-2.6.18/atngw100/defconfig | 970 +++++++++++++++++++++ 2 files changed, 1960 insertions(+) create mode 100644 packages/linux/linux-2.6.18/at32stk1000/defconfig create mode 100644 packages/linux/linux-2.6.18/atngw100/defconfig diff --git a/packages/linux/linux-2.6.18/at32stk1000/defconfig b/packages/linux/linux-2.6.18/at32stk1000/defconfig new file mode 100644 index 0000000000..b4aced9f16 --- /dev/null +++ b/packages/linux/linux-2.6.18/at32stk1000/defconfig @@ -0,0 +1,990 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.18-at0 +# Thu Jan 11 15:37:42 2007 +# +CONFIG_AVR32=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +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_RELAY is not set +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_EMBEDDED=y +CONFIG_SYSCTL=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 is not set +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SHMEM=y +CONFIG_SLAB=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=1 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +# CONFIG_BLK_DEV_IO_TRACE is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" + +# +# System Type and features +# +CONFIG_SUBARCH_AVR32B=y +CONFIG_MMU=y +CONFIG_PERFORMANCE_COUNTERS=y +CONFIG_PLATFORM_AT32AP=y +CONFIG_CPU_AT32AP7000=y +CONFIG_BOARD_ATSTK1002=y +CONFIG_BOARD_ATSTK1000=y +# CONFIG_BOARD_ATNGW is not set +CONFIG_LOADER_U_BOOT=y + +# +# Atmel AVR32 AP options +# +CONFIG_PIO_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_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +# CONFIG_OWNERSHIP_TRACE is not set +CONFIG_DW_DMAC=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +CONFIG_CMDLINE="" + +# +# Bus options +# + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_BIC=y +# 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 + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_IEEE80211 is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +# CONFIG_FW_LOADER is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=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 +# CONFIG_MTD_OBSOLETE_CHIPS 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 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m + +# +# PHY device support +# +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_MACB=y + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPP_MPPE is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_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 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=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 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_RAW_DRIVER is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +CONFIG_I2C_ATMELTWI=m +CONFIG_I2C_ATMELTWI_BAUDRATE=100000 +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +CONFIG_SENSORS_EEPROM=m +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_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 +# + +# +# Dallas's 1-wire bus +# + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +CONFIG_VIDEO_V4L2=y + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +# CONFIG_FIRMWARE_EDID is not set +CONFIG_FB=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# 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 +CONFIG_FB_SIDSA=y +CONFIG_FB_SIDSA_DEFAULT_BPP=24 +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE is not set + +# +# Logo configuration +# +# CONFIG_LOGO is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_BACKLIGHT_CLASS_DEVICE is not set +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_LCD_DEVICE=y +CONFIG_LCD_LTV350QV=y + +# +# 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_AC97_BUS=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 + +# +# ALSA AVR32 devices +# +CONFIG_SND_ATMEL_AC97=m +# CONFIG_SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS is not set +# CONFIG_SND_ATMEL_AC97C_USE_PDC is not set +CONFIG_SND_AT73C213=m +# CONFIG_SND_AT73C213_USE_ALSA_MALLOC_CALLS is not set + +# +# Open Sound System +# +CONFIG_SOUND_PRIME=m +# CONFIG_OSS_OBSOLETE_DRIVER is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +CONFIG_SOUND_AT32_DAC=m + +# +# USB support +# +# CONFIG_USB_ARCH_HAS_HCD is not set +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=m +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +CONFIG_USB_GADGET_HUSB2DEV=y +CONFIG_USB_HUSB2DEV=m +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +CONFIG_USB_ZERO=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 + +# +# MMC/SD Card support +# +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=y +CONFIG_MMC_ATMELMCI=y + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# InfiniBand support +# + +# +# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) +# + +# +# Real Time Clock +# +# CONFIG_RTC_CLASS is not set + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +# CONFIG_EXT3_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_ROMFS_FS=y +# CONFIG_INOTIFY is not set +# CONFIG_QUOTA is not set +# CONFIG_DNOTIFY is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=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_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +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_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=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_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS 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 +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +# 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 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 + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_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_RWSEMS is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_DEBUG_VM is not set +CONFIG_FRAME_POINTER=y +# CONFIG_UNWIND_INFO is not set +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_KPROBES is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y diff --git a/packages/linux/linux-2.6.18/atngw100/defconfig b/packages/linux/linux-2.6.18/atngw100/defconfig new file mode 100644 index 0000000000..b70408bc72 --- /dev/null +++ b/packages/linux/linux-2.6.18/atngw100/defconfig @@ -0,0 +1,970 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.18-at0 +# Wed Jan 10 10:13:31 2007 +# +CONFIG_AVR32=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +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_RELAY is not set +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_EMBEDDED=y +CONFIG_SYSCTL=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 is not set +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SHMEM=y +CONFIG_SLAB=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=1 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +# CONFIG_BLK_DEV_IO_TRACE 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" + +# +# System Type and features +# +CONFIG_SUBARCH_AVR32B=y +CONFIG_MMU=y +CONFIG_PERFORMANCE_COUNTERS=y +CONFIG_PLATFORM_AT32AP=y +CONFIG_CPU_AT32AP7000=y +# CONFIG_BOARD_ATSTK1000 is not set +CONFIG_BOARD_ATNGW=y +CONFIG_LOADER_U_BOOT=y + +# +# Atmel AVR32 AP options +# +CONFIG_PIO_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_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +# CONFIG_OWNERSHIP_TRACE is not set +CONFIG_DW_DMAC=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +CONFIG_CMDLINE="" + +# +# Bus options +# + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +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 is not set +# CONFIG_IP_ROUTE_MULTIPATH is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_BIC=y + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +# CONFIG_IPV6 is not set +# CONFIG_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_NETFILTER_XTABLES=y +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_HELPER 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_STATE=y +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=y +# CONFIG_IP_NF_CT_ACCT is not set +# CONFIG_IP_NF_CONNTRACK_MARK is not set +# CONFIG_IP_NF_CONNTRACK_EVENTS is not set +# CONFIG_IP_NF_CT_PROTO_SCTP is not set +# CONFIG_IP_NF_FTP is not set +# CONFIG_IP_NF_IRC is not set +# CONFIG_IP_NF_NETBIOS_NS is not set +# CONFIG_IP_NF_TFTP is not set +# CONFIG_IP_NF_AMANDA is not set +# CONFIG_IP_NF_PPTP is not set +# CONFIG_IP_NF_H323 is not set +# CONFIG_IP_NF_SIP is not set +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=y +# CONFIG_IP_NF_MATCH_IPRANGE is not set +# CONFIG_IP_NF_MATCH_TOS is not set +# CONFIG_IP_NF_MATCH_RECENT is not set +# CONFIG_IP_NF_MATCH_ECN is not set +# CONFIG_IP_NF_MATCH_DSCP is not set +# CONFIG_IP_NF_MATCH_AH is not set +# CONFIG_IP_NF_MATCH_TTL is not set +# CONFIG_IP_NF_MATCH_OWNER is not set +# CONFIG_IP_NF_MATCH_ADDRTYPE is not set +# CONFIG_IP_NF_MATCH_HASHLIMIT is not set +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +CONFIG_IP_NF_TARGET_LOG=y +# CONFIG_IP_NF_TARGET_ULOG is not set +# CONFIG_IP_NF_TARGET_TCPMSS is not set +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_REDIRECT=y +# CONFIG_IP_NF_TARGET_NETMAP is not set +# CONFIG_IP_NF_TARGET_SAME is not set +# CONFIG_IP_NF_NAT_SNMP_BASIC is not set +# CONFIG_IP_NF_MANGLE is not set +# CONFIG_IP_NF_RAW is not set +# CONFIG_IP_NF_ARPTABLES is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_IEEE80211 is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +# CONFIG_FW_LOADER is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=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 +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x80000000 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +CONFIG_MTD_DATAFLASH=y +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# PHY device support +# +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_MACB=y + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# 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 + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=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 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_RAW_DRIVER is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +CONFIG_I2C_ATMELTWI=m +CONFIG_I2C_ATMELTWI_BAUDRATE=100000 +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_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 +# + +# +# Dallas's 1-wire bus +# + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +CONFIG_VIDEO_V4L2=y + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB_ARCH_HAS_HCD is not set +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=m +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +CONFIG_USB_GADGET_HUSB2DEV=y +CONFIG_USB_HUSB2DEV=m +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_ZERO is not set +# CONFIG_USB_ETH 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 is not set + +# +# MMC/SD Card support +# +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=m +CONFIG_MMC_ATMELMCI=m + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# InfiniBand support +# + +# +# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) +# + +# +# Real Time Clock +# +# CONFIG_RTC_CLASS is not set + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_INOTIFY is not set +# CONFIG_QUOTA is not set +# CONFIG_DNOTIFY is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=850 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_PROC_KCORE is not set +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +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_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS 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 +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=y +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_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_RWSEMS is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_DEBUG_VM is not set +CONFIG_FRAME_POINTER=y +# CONFIG_UNWIND_INFO is not set +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_KPROBES is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y -- cgit v1.2.3 From 7e541bf1f5abaad0105328e57198a05f8c17f242 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 12 Aug 2007 09:14:13 +0000 Subject: binutils 2.17: improve avr32 support --- .../binutils-2.17/503-avr32-fix-got-offset-init.patch | 12 ++++++++++++ packages/binutils/binutils_2.17.bb | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/binutils/binutils-2.17/503-avr32-fix-got-offset-init.patch diff --git a/packages/binutils/binutils-2.17/503-avr32-fix-got-offset-init.patch b/packages/binutils/binutils-2.17/503-avr32-fix-got-offset-init.patch new file mode 100644 index 0000000000..66add3a47b --- /dev/null +++ b/packages/binutils/binutils-2.17/503-avr32-fix-got-offset-init.patch @@ -0,0 +1,12 @@ +stelios@Athena:~/proj/oplinux-0.2/org.openembedded.dev/packages/binutils$ cat binutils-2.17/503-avr32-fix-got-offset-init.patch +--- a/bfd/elf32-avr32.c 2007-05-31 17:00:13.000000000 +0200 ++++ b/bfd/elf32-avr32.c 2007-05-30 14:07:25.000000000 +0200 +@@ -395,6 +395,8 @@ avr32_elf_link_hash_table_create(bfd *ab + /* Prevent the BFD core from creating bogus got_entry pointers */ + ret->root.init_got_refcount.glist = NULL; + ret->root.init_plt_refcount.glist = NULL; ++ ret->root.init_got_offset.glist = NULL; ++ ret->root.init_plt_offset.glist = NULL; + + return &ret->root.root; + } \ No newline at end of file diff --git a/packages/binutils/binutils_2.17.bb b/packages/binutils/binutils_2.17.bb index 8d38f3a459..69e11497c2 100644 --- a/packages/binutils/binutils_2.17.bb +++ b/packages/binutils/binutils_2.17.bb @@ -1,6 +1,6 @@ require binutils.inc -PR = "r1" +PR = "r2" SRC_URI = \ "http://ftp.gnu.org/gnu/binutils/binutils-${PV}.tar.bz2 \ @@ -21,6 +21,7 @@ SRC_URI += "\ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/500-avr32.patch.gz;patch=1 \ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/501-avr32-sreldyn-fix.patch.gz;patch=1 \ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/502-avr32-bfd-dont-allow-direct-refs-to-bss.patch.gz;patch=1 \ + file://503-avr32-fix-got-offset-init.patch;patch=1 \ " # Zecke's OSX fixes -- cgit v1.2.3 From d0a72e1c5976f0ca958fec5c8f3617d33e12ee2d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 27 Aug 2007 09:44:52 +0000 Subject: libmad: add conditional patch for avr32 optimizations --- packages/libmad/files/.mtn2git_empty | 0 .../files/libmad-0.15.1b-avr32-optimization.patch | 2922 ++++++++++++++++++++ packages/libmad/libmad_0.15.1b.bb | 4 + 3 files changed, 2926 insertions(+) create mode 100644 packages/libmad/files/.mtn2git_empty create mode 100644 packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch diff --git a/packages/libmad/files/.mtn2git_empty b/packages/libmad/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch b/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch new file mode 100644 index 0000000000..f6620f591a --- /dev/null +++ b/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch @@ -0,0 +1,2922 @@ +diff --git a/bit.c b/bit.c +index c2bfb24..262ce3a 100644 +--- a/bit.c ++++ b/bit.c +@@ -25,12 +25,6 @@ + + # include "global.h" + +-# ifdef HAVE_LIMITS_H +-# include +-# else +-# define CHAR_BIT 8 +-# endif +- + # include "bit.h" + + /* +@@ -81,6 +75,8 @@ unsigned short const crc_table[256] = { + + # define CRC_POLY 0x8005 + ++#ifndef FPM_AVR32 ++ + /* + * NAME: bit->init() + * DESCRIPTION: initialize bit pointer struct +@@ -190,6 +186,8 @@ void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len, + } + # endif + ++#endif ++ + /* + * NAME: bit->crc() + * DESCRIPTION: compute CRC-check word +diff --git a/bit.h b/bit.h +index 5a51570..70f550a 100644 +--- a/bit.h ++++ b/bit.h +@@ -22,6 +22,92 @@ + # ifndef LIBMAD_BIT_H + # define LIBMAD_BIT_H + ++# ifdef HAVE_LIMITS_H ++# include ++# else ++# define CHAR_BIT 8 ++# endif ++ ++#ifdef FPM_AVR32 ++ ++struct mad_bitptr { ++ unsigned char const *byte; ++ unsigned int read_bytes; ++}; ++ ++/* ++ * NAME: bit->init() ++ * DESCRIPTION: initialize bit pointer struct ++ */ ++static void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte) ++{ ++ bitptr->byte = byte; ++ bitptr->read_bytes = 0; ++} ++ ++/* ++ * NAME: bit->length() ++ * DESCRIPTION: return number of bits between start and end points ++ */ ++static unsigned int mad_bit_length(struct mad_bitptr const *begin, ++ struct mad_bitptr const *end) ++{ ++ return (end->read_bytes - begin->read_bytes) + ++ 8 * (end->byte - begin->byte); ++} ++ ++/* ++ * NAME: bit->nextbyte() ++ * DESCRIPTION: return pointer to next unprocessed byte ++ */ ++static unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *bitptr) ++{ ++ return bitptr->byte + ((bitptr->read_bytes + 0x7) >> 3); ++} ++ ++/* ++ * NAME: bit->skip() ++ * DESCRIPTION: advance bit pointer ++ */ ++static void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len) ++{ ++ bitptr->read_bytes += len; ++ bitptr->byte += (bitptr->read_bytes >> 3); ++ bitptr->read_bytes &= 0x7; ++} ++ ++/* ++ * NAME: bit->read() ++ * DESCRIPTION: read an arbitrary number of bits and return their UIMSBF value ++ */ ++static unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len) ++{ ++ register unsigned long value; ++ ++ if (!len) ++ return 0; ++ ++ value = *(unsigned int *)bitptr->byte; ++ ++ value <<= bitptr->read_bytes; ++ value >>= (32 - len); ++ ++ bitptr->read_bytes += len; ++ bitptr->byte += (bitptr->read_bytes >> 3); ++ bitptr->read_bytes &= 0x7; ++ ++ return value; ++} ++ ++# define mad_bit_finish(bitptr) /* nothing */ ++ ++static unsigned long mad_bit_bitsleft(struct mad_bitptr *bitptr) ++{ ++ return (8 - (bitptr)->read_bytes); ++} ++ ++#else /* #ifdef FPM_AVR32 */ ++ + struct mad_bitptr { + unsigned char const *byte; + unsigned short cache; +@@ -42,6 +128,8 @@ void mad_bit_skip(struct mad_bitptr *, unsigned int); + unsigned long mad_bit_read(struct mad_bitptr *, unsigned int); + void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long); + ++#endif ++ + unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short); + + # endif +diff --git a/configure b/configure +index ee421cc..7a9f0c8 100755 +--- a/configure ++++ b/configure +@@ -1048,7 +1048,7 @@ Optional Features: + --enable-speed optimize for speed over accuracy + --enable-accuracy optimize for accuracy over speed + --enable-fpm=ARCH use ARCH-specific fixed-point math routines (one of: +- intel, arm, mips, sparc, ppc, 64bit, default) ++ intel, arm, avr32, mips, sparc, ppc, 64bit, default) + --enable-sso use subband synthesis optimization + --disable-aso disable architecture-specific optimizations + --enable-strict-iso use strict ISO/IEC interpretations +@@ -21477,6 +21477,7 @@ if test "${enable_fpm+set}" = set; then + no|default|approx) FPM="DEFAULT" ;; + intel|i?86) FPM="INTEL" ;; + arm) FPM="ARM" ;; ++ avr32) FPM="AVR32" ;; + mips) FPM="MIPS" ;; + sparc) FPM="SPARC" ;; + ppc|powerpc) FPM="PPC" ;; +@@ -21498,6 +21499,7 @@ then + case "$host" in + i?86-*) FPM="INTEL" ;; + arm*-*) FPM="ARM" ;; ++ avr32*-*) FPM="AVR32" ;; + mips*-*) FPM="MIPS" ;; + sparc*-*) FPM="SPARC" ;; + powerpc*-*) FPM="PPC" ;; +@@ -21554,6 +21556,11 @@ then + ASO="$ASO -DASO_IMDCT" + ASO_OBJS="imdct_l_arm.lo" + ;; ++ avr32*-*) ++ ASO="$ASO -DASO_INTERLEAVE2" ++ ASO="$ASO -DASO_ZEROCHECK" ++ ASO_OBJS="dct32_avr32.lo synth_avr32.lo imdct_avr32.lo" ++ ;; + mips*-*) + ASO="$ASO -DASO_INTERLEAVE2" + ASO="$ASO -DASO_ZEROCHECK" +diff --git a/configure.ac b/configure.ac +index 9b79399..063cb9b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -274,13 +274,14 @@ fi + AC_MSG_CHECKING(for architecture-specific fixed-point math routines) + AC_ARG_ENABLE(fpm, AC_HELP_STRING([--enable-fpm=ARCH], + [use ARCH-specific fixed-point math routines +- (one of: intel, arm, mips, sparc, ppc, 64bit, default)]), ++ (one of: intel, arm, avr32, mips, sparc, ppc, 64bit, default)]), + [ + case "$enableval" in + yes) ;; + no|default|approx) FPM="DEFAULT" ;; + intel|i?86) FPM="INTEL" ;; + arm) FPM="ARM" ;; ++ avr32) FPM="AVR32" ;; + mips) FPM="MIPS" ;; + sparc) FPM="SPARC" ;; + ppc|powerpc) FPM="PPC" ;; +@@ -298,6 +299,7 @@ then + case "$host" in + i?86-*) FPM="INTEL" ;; + arm*-*) FPM="ARM" ;; ++ avr32*-*) FPM="AVR32" ;; + mips*-*) FPM="MIPS" ;; + sparc*-*) FPM="SPARC" ;; + powerpc*-*) FPM="PPC" ;; +@@ -343,6 +345,11 @@ then + ASO="$ASO -DASO_IMDCT" + ASO_OBJS="imdct_l_arm.lo" + ;; ++ avr32*-*) ++ ASO="$ASO -DASO_INTERLEAVE2" ++ ASO="$ASO -DASO_ZEROCHECK" ++ ASO_OBJS="dct32_avr32.lo synth_avr32.lo imdct_avr32.lo" ++ ;; + mips*-*) + ASO="$ASO -DASO_INTERLEAVE2" + ASO="$ASO -DASO_ZEROCHECK" +diff --git a/dct32_avr32.S b/dct32_avr32.S +new file mode 100644 +index 0000000..7513340 +--- /dev/null ++++ b/dct32_avr32.S +@@ -0,0 +1,780 @@ ++/* ++ Optimized 32-point Discrete Cosine Transform (DCT) ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Ronny Pedersen, Atmel Norway ++ ++ 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. */ ++ ++#define SHIFT 12 ++#define MAD_F_SCALEBITS 28 ++#define SLOTS 8 ++ ++#define MAD_F(x) ((x + (1 << 15)) >> 16) ++ ++# define costab1 MAD_F(0x7fd8878e) ++# define costab2 MAD_F(0x7f62368f) ++# define costab3 MAD_F(0x7e9d55fc) ++# define costab4 MAD_F(0x7d8a5f40) ++# define costab5 MAD_F(0x7c29fbee) ++# define costab6 MAD_F(0x7a7d055b) ++# define costab7 MAD_F(0x78848414) ++# define costab8 MAD_F(0x7641af3d) ++# define costab9 MAD_F(0x73b5ebd1) ++# define costab10 MAD_F(0x70e2cbc6) ++# define costab11 MAD_F(0x6dca0d14) ++# define costab12 MAD_F(0x6a6d98a4) ++# define costab13 MAD_F(0x66cf8120) ++# define costab14 MAD_F(0x62f201ac) ++# define costab15 MAD_F(0x5ed77c8a) ++# define costab16 MAD_F(0x5a82799a) ++# define costab17 MAD_F(0x55f5a4d2) ++# define costab18 MAD_F(0x5133cc94) ++# define costab19 MAD_F(0x4c3fdff4) ++# define costab20 MAD_F(0x471cece7) ++# define costab21 MAD_F(0x41ce1e65) ++# define costab22 MAD_F(0x3c56ba70) ++# define costab23 MAD_F(0x36ba2014) ++# define costab24 MAD_F(0x30fbc54d) ++# define costab25 MAD_F(0x2b1f34eb) ++# define costab26 MAD_F(0x25280c5e) ++# define costab27 MAD_F(0x1f19f97b) ++# define costab28 MAD_F(0x18f8b83c) ++# define costab29 MAD_F(0x12c8106f) ++# define costab30 MAD_F(0x0c8bd35e) ++# define costab31 MAD_F(0x0647d97c) ++ ++ ++ .macro butterfly2_in out1, out2, out3, out4, in, idx_in1, idx_in2, idx_in3, idx_in4, coeff1, coeff2, tmplo, tmphi ++ mov \tmplo, \coeff1 ++ ld.w \out1, \in[\idx_in1 * 4] ++ ld.w \out2, \in[\idx_in2 * 4] ++ ld.w \out3, \in[\idx_in3 * 4] ++ ld.w \out4, \in[\idx_in4 * 4] ++ sub \tmphi, \out1, \out2 ++ add \out1, \out2 ++ mulsatrndwh.w \out2, \tmphi, \tmplo:b ++ ++ sub \tmphi, \out3, \out4 ++ mov \tmplo, \coeff2 ++ add \out3, \out4 ++ mulsatrndwh.w \out4, \tmphi, \tmplo:b ++ .endm ++ ++ .macro butterfly2 in1, in2, in3, in4, coeff1, tmplo, tmphi, tmp ++ mov \tmp, \coeff1 ++ sub \tmphi, \in1, \in2 ++ add \in1, \in2 ++ mulsatrndwh.w \in2, \tmphi, \tmp:b ++ ++ sub \tmphi, \in3, \in4 ++ add \in3, \in4 ++ mulsatrndwh.w \in4, \tmphi, \tmp:b ++ .endm ++ ++ .macro butterfly4 in1, in2, in3, in4, in5, in6, in7, in8, coeff1, tmplo, tmphi, tmp ++ mov \tmp, \coeff1 ++ sub \tmphi, \in1, \in2 ++ add \in1, \in2 ++ mulsatrndwh.w \in2, \tmphi, \tmp:b ++ ++ sub \tmphi, \in3, \in4 ++ add \in3, \in4 ++ mulsatrndwh.w \in4, \tmphi, \tmp:b ++ ++ sub \tmphi, \in5, \in6 ++ add \in5, \in6 ++ mulsatrndwh.w \in6, \tmphi, \tmp:b ++ ++ sub \tmphi, \in7, \in8 ++ add \in7, \in8 ++ mulsatrndwh.w \in8, \tmphi, \tmp:b ++ .endm ++ ++ .macro scale reg ++ .endm ++ ++/*void dct32( mad_fixed_t const in[32], unsigned int slot, ++ mad_fixed_t lo[16][8], mad_fixed_t hi[16][8]) */ ++ ++ .global dct32_avr32 ++dct32_avr32: ++ stm --sp, r0-r7, r9-r11, lr ++ ++ sub sp, 32*4 ++ ++/* t0 = in[0] + in[31]; t16 = MUL(in[0] - in[31], costab1); ++ t1 = in[15] + in[16]; t17 = MUL(in[15] - in[16], costab31); */ ++ butterfly2_in r4/*t0*/, r5/*t16*/, r6/*t1*/, r7/*t17*/, r12, 0, 31, 15, 16, costab1, costab31, r10, r11 ++ ++/* t41 = t16 + t17; ++ t59 = MUL(t16 - t17, costab2); ++ t33 = t0 + t1; ++ t50 = MUL(t0 - t1, costab2);*/ ++ butterfly2 r5/*t41*/, r7/*t59*/, r4/*t33*/, r6/*t50*/, costab2, r10, r11, lr ++ ++/* t2 = in[7] + in[24]; t18 = MUL(in[7] - in[24], costab15); ++ t3 = in[8] + in[23]; t19 = MUL(in[8] - in[23], costab17); */ ++ butterfly2_in r0/*t2*/, r1/*t18*/, r2/*t3*/, r3/*t19*/, r12, 7, 24, 8, 23, costab15, costab17, r10, r11 ++ ++/* t42 = t18 + t19; ++ t60 = MUL(t18 - t19, costab30); ++ t34 = t2 + t3; ++ t51 = MUL(t2 - t3, costab30); */ ++ butterfly2 r1/*t42*/, r3/*t60*/, r0/*t34*/, r2/*t51*/, costab30, r10, r11, lr ++ ++/* t73 = t41 + t42; t94 = MUL(t41 - t42, costab4); ++ t83 = t59 + t60; t106 = MUL(t59 - t60, costab4); */ ++ ++ ++/* t69 = t33 + t34; t89 = MUL(t33 - t34, costab4); ++ t78 = t50 + t51; t100 = MUL(t50 - t51, costab4); */ ++ butterfly4 r5/*t73*/, r1/*t94*/, r7/*t83*/, r3/*t106*/,r4/*t69*/, r0/*t89*/, r6/*t78*/, r2/*t100*/, costab4, r10, r11, lr ++ ++/* Store away the computed butterflies: ++ sp[0-7] = t83, t78, t73, t69, t106, t100, t94, t89 */ ++ stm sp, r0-r7 ++ ++ ++/* t4 = in[3] + in[28]; t20 = MUL(in[3] - in[28], costab7); ++ t5 = in[12] + in[19]; t21 = MUL(in[12] - in[19], costab25); */ ++ butterfly2_in r4/*t4*/, r5/*t20*/, r6/*t5*/, r7/*t21*/, r12, 3, 28, 12, 19, costab7, costab25, r10, r11 ++ ++/* t43 = t20 + t21; ++ t61 = MUL(t20 - t21, costab14); ++ t35 = t4 + t5; ++ t52 = MUL(t4 - t5, costab14); */ ++ butterfly2 r5/*t43*/, r7/*t61*/, r4/*t35*/, r6/*t52*/, costab14, r10, r11, lr ++ ++/* t6 = in[4] + in[27]; t22 = MUL(in[4] - in[27], costab9); ++ t7 = in[11] + in[20]; t23 = MUL(in[11] - in[20], costab23); */ ++ butterfly2_in r0/*t6*/, r1/*t22*/, r2/*t7*/, r3/*t23*/, r12, 4, 27, 11, 20, costab9, costab23, r10, r11 ++ ++/* t44 = t22 + t23; ++ t62 = MUL(t22 - t23, costab18); ++ t36 = t6 + t7; ++ t53 = MUL(t6 - t7, costab18); */ ++ butterfly2 r1/*t44*/, r3/*t62*/, r0/*t36*/, r2/*t53*/, costab18, r10, r11, lr ++ ++/* t74 = t43 + t44; t95 = MUL(t43 - t44, costab28); ++ t84 = t61 + t62; t107 = MUL(t61 - t62, costab28); */ ++ ++/* t70 = t35 + t36; t90 = MUL(t35 - t36, costab28); ++ t79 = t52 + t53; t101 = MUL(t52 - t53, costab28); */ ++ butterfly4 r5/*t74*/, r1/*t95*/, r7/*t84*/, r3/*t107*/, r4/*t70*/, r0/*t90*/, r6/*t79*/, r2/*t101*/, costab28, r10, r11, lr ++ ++/* Store away the computed butterflies: ++ sp[8-15] = t84, t79, t74, t70, t107, t101, t95, t90 */ ++ sub r10, sp, -8*4 ++ stm r10, r0-r7 ++ ++ ++/* t8 = in[1] + in[30]; t24 = MUL(in[1] - in[30], costab3); ++ t9 = in[14] + in[17]; t25 = MUL(in[14] - in[17], costab29); */ ++ butterfly2_in r4/*t8*/, r5/*t24*/, r6/*t9*/, r7/*t25*/, r12, 1, 30, 14, 17, costab3, costab29, r10, r11 ++ ++ ++/* t45 = t24 + t25; ++ t63 = MUL(t24 - t25, costab6); ++ t37 = t8 + t9; ++ t54 = MUL(t8 - t9, costab6); */ ++ butterfly2 r5/*t45*/, r7/*t63*/, r4/*t37*/, r6/*t54*/, costab6, r10, r11, lr ++ ++/* t10 = in[6] + in[25]; t26 = MUL(in[6] - in[25], costab13); ++ t11 = in[9] + in[22]; t27 = MUL(in[9] - in[22], costab19); */ ++ butterfly2_in r0/*t10*/, r1/*t26*/, r2/*t11*/, r3/*t27*/, r12, 6, 25, 9, 22, costab13, costab19, r10, r11 ++ ++/* t46 = t26 + t27; ++ t64 = MUL(t26 - t27, costab26); ++ t38 = t10 + t11; ++ t55 = MUL(t10 - t11, costab26); */ ++ butterfly2 r1/*t46*/, r3/*t64*/, r0/*t38*/, r2/*t55*/, costab26, r10, r11, lr ++ ++/* t75 = t45 + t46; t96 = MUL(t45 - t46, costab12); ++ t85 = t63 + t64; t108 = MUL(t63 - t64, costab12); */ ++ ++/* t71 = t37 + t38; t91 = MUL(t37 - t38, costab12); ++ t80 = t54 + t55; t102 = MUL(t54 - t55, costab12); */ ++ butterfly4 r5/*t75*/, r1/*t96*/, r7/*t85*/, r3/*t108*/, r4/*t71*/, r0/*t91*/, r6/*t80*/, r2/*t102*/, costab12, r10, r11, lr ++ ++/* Store away the computed butterflies: ++ sp[16-23] = t85, t80, t75, t71, t108, t102, t96, t91 */ ++ sub r10, sp, -16*4 ++ stm r10, r0-r7 ++ ++/* t12 = in[2] + in[29]; t28 = MUL(in[2] - in[29], costab5); ++ t13 = in[13] + in[18]; t29 = MUL(in[13] - in[18], costab27); */ ++ butterfly2_in r4/*t12*/, r5/*t28*/, r6/*t13*/, r7/*t29*/, r12, 2, 29, 13, 18, costab5, costab27, r10, r11 ++ ++/* t47 = t28 + t29; ++ t65 = MUL(t28 - t29, costab10); ++ t39 = t12 + t13; ++ t56 = MUL(t12 - t13, costab10); */ ++ butterfly2 r5/*t47*/, r7/*t65*/, r4/*t39*/, r6/*t56*/, costab10, r10, r11, lr ++ ++/* t14 = in[5] + in[26]; t30 = MUL(in[5] - in[26], costab11); ++ t15 = in[10] + in[21]; t31 = MUL(in[10] - in[21], costab21);*/ ++ butterfly2_in r0/*t14*/, r1/*t30*/, r2/*t15*/, r3/*t31*/, r12, 5, 26, 10, 21, costab11, costab21, r10, r11 ++ ++/* t48 = t30 + t31; ++ t66 = MUL(t30 - t31, costab22); ++ t40 = t14 + t15; ++ t57 = MUL(t14 - t15, costab22);*/ ++ butterfly2 r1/*t48*/, r3/*t66*/, r0/*t40*/, r2/*t57*/, costab22, r10, r11, lr ++ ++/* t76 = t47 + t48; t97 = MUL(t47 - t48, costab20); ++ t86 = t65 + t66; t109 = MUL(t65 - t66, costab20);*/ ++ ++/* t72 = t39 + t40; t92 = MUL(t39 - t40, costab20); ++ t81 = t56 + t57; t103 = MUL(t56 - t57, costab20);*/ ++ butterfly4 r5/*t76*/, r1/*t97*/, r7/*t86*/, r3/*t109*/,r4/*t72*/, r0/*t92*/, r6/*t81*/, r2/*t103*/, costab20, r10, r11, lr ++ ++/* Store away the computed butterflies: ++ sp[24-31] = t86, t81, t76, t72, t109, t103, t97, t92 */ ++ sub r10, sp, -24*4 ++ stm r10, r0-r7 ++ ++/* We now have the following on the stack: ++ ++ sp[0-7] = t83, t78, t73, t69, t106, t100, t94, t89 ++ sp[8-15] = t84, t79, t74, t70, t107, t101, t95, t90 ++ sp[16-23] = t85, t80, t75, t71, t108, t102, t96, t91 ++ sp[24-31] = t86, t81, t76, t72, t109, t103, t97, t92 */ ++ ++/* Load {r0...r7} = { t72, t76, t71, t75, t70, t74, t69, t73 } */ ++ ld.d r6, sp[2*4] ++ ld.d r4, sp[10*4] ++ ld.d r2, sp[18*4] ++ ld.d r0, sp[26*4] ++ ++ ++/* t113 = t69 + t70; ++ t141 = MUL(t69 - t70, costab8); ++ ++ t115 = t73 + t74; ++ t144 = MUL(t73 - t74, costab8); */ ++ butterfly2 r6/*t113*/, r4/*t141*/, r7/*t115*/, r5/*t144*/, costab8, r10, r11, lr ++ ++/* t114 = t71 + t72; ++ t142 = MUL(t71 - t72, costab24); ++ ++ t116 = t75 + t76; ++ t145 = MUL(t75 - t76, costab24); */ ++ butterfly2 r2/*t114*/, r0/*t142*/, r3/*t116*/, r1/*t145*/, costab24, r10, r11, lr ++ ++ ++/* ++ t191 = t113 + t114; ++ t192 = MUL(t113 - t114, costab16) ++ ++ t32 = t115 + t116; ++ t177 = MUL(t115 - t116, costab16) ; ++ ++ t143 = t141 + t142; ++ t190 = MUL(t141 - t142, costab16) ; ++ ++ t146 = t144 + t145; ++ t184 = MUL(t144 - t145, costab16) ; */ ++ butterfly4 r6/*t191*/, r2/*t192*/, r7/*t32*/, r3/*t177*/, r4/*t143*/, r0/*190*/, r5/*t146*/, r1/*t184*/, costab16, r10, r11, lr ++ ++/* Store away the computed butterflies: ++ sp[2-3] = t32, t191 ++ sp[10-11] = t146, t143 ++ sp[18-19] = t177, t192 ++ sp[26-27] = t184, t190 */ ++ st.d sp[2*4] , r6 ++ st.d sp[10*4], r4 ++ st.d sp[18*4], r2 ++ st.d sp[26*4], r0 ++ ++/* Load {r0...r7} = { t81, t86, t80, t85, t79, t84, t78, t83 } */ ++ ld.d r6, sp[0*4] ++ ld.d r4, sp[8*4] ++ ld.d r2, sp[16*4] ++ ld.d r0, sp[24*4] ++ ++ ++/* t118 = t78 + t79; ++ t148 = MUL(t78 - t79, costab8); ++ ++ t121 = t83 + t84; ++ t152 = MUL(t83 - t84, costab8); */ ++ butterfly2 r6/*t118*/, r4/*t148*/, r7/*t121*/, r5/*t152*/, costab8, r10, r11, lr ++ ++/* t119 = t80 + t81; ++ t149 = MUL(t80 - t81, costab24); ++ ++ t122 = t85 + t86; ++ t153 = MUL(t85 - t86, costab24); */ ++ butterfly2 r2/*t119*/, r0/*t149*/, r3/*t122*/, r1/*t153*/, costab24, r10, r11, lr ++ ++ ++ ++/* t58 = t118 + t119; ++ t178 = MUL(t118 - t119, costab16) ; ++ ++ t67 = t121 + t122; ++ t179 = MUL(t121 - t122, costab16) ; ++ ++ t150 = t148 + t149; ++ t185 = MUL(t148 - t149, costab16) ; ++ ++ t154 = t152 + t153; ++ t186 = MUL(t152 - t153, costab16) ; */ ++ butterfly4 r6/*t58*/, r2/*t178*/, r7/*t67*/, r3/*t179*/, r4/*t150*/, r0/*185*/, r5/*t154*/, r1/*t186*/, costab16, r10, r11, lr ++ ++/* Store away the computed butterflies: ++ sp[0-1] = t67, t58 ++ sp[8-9] = t154, t150 ++ sp[16-17] = t179, t178 ++ sp[24-25] = t186, t185 */ ++ st.d sp[0*4] , r6 ++ st.d sp[8*4], r4 ++ st.d sp[16*4], r2 ++ st.d sp[24*4], r0 ++ ++/* Load {r0...r7} = { t92, t97, t91, t96, t90, t95, t89, t94 } */ ++ ld.d r6, sp[6*4] ++ ld.d r4, sp[14*4] ++ ld.d r2, sp[22*4] ++ ld.d r0, sp[30*4] ++ ++ ++/* t125 = t89 + t90; ++ t157 = MUL(t89 - t90, costab8); ++ ++ t128 = t94 + t95; ++ t161 = MUL(t94 - t95, costab8); */ ++ butterfly2 r6/*t125*/, r4/*t157*/, r7/*t128*/, r5/*t161*/, costab8, r10, r11, lr ++ ++/* t126 = t91 + t92; ++ t158 = MUL(t91 - t92, costab24); ++ ++ t129 = t96 + t97; ++ t162 = MUL(t96 - t97, costab24); */ ++ butterfly2 r2/*t126*/, r0/*t158*/, r3/*t129*/, r1/*t162*/, costab24, r10, r11, lr ++ ++ ++/* ++ t93 = t125 + t126; ++ t180 = MUL(t125 - t126, costab16) ; ++ ++ t98 = t128 + t129; ++ t181 = MUL(t128 - t129, costab16) ; ++ ++ t159 = t157 + t158; ++ t187 = MUL(t157 - t158, costab16) ; ++ ++ t163 = t161 + t162; ++ t188 = MUL(t161 - t162, costab16) ; */ ++ butterfly4 r6/*t93*/, r2/*t180*/, r7/*t98*/, r3/*t181*/, r4/*t159*/, r0/*187*/, r5/*t163*/, r1/*t188*/, costab16, r10, r11, lr ++ ++ ++/* Store away the computed butterflies: ++ sp[6-7] = t98, t93 ++ sp[14-15] = t163, t159 ++ sp[22-23] = t181, t180 ++ sp[30-31] = t188, t187 */ ++ st.d sp[6*4] , r6 ++ st.d sp[14*4], r4 ++ st.d sp[22*4], r2 ++ st.d sp[30*4], r0 ++ ++/* Load {r0...r7} = { t103, t109, t102, t108, t101, t107, t100, t106 } */ ++ ld.d r6, sp[4*4] ++ ld.d r4, sp[12*4] ++ ld.d r2, sp[20*4] ++ ld.d r0, sp[28*4] ++ ++ ++ ++/* t132 = t100 + t101; ++ t166 = MUL(t100 - t101, costab8); ++ ++ t136 = t106 + t107; ++ t171 = MUL(t106 - t107, costab8); */ ++ butterfly2 r6/*t132*/, r4/*t166*/, r7/*t136*/, r5/*t171*/, costab8, r10, r11, lr ++ ++/* t133 = t102 + t103; ++ t167 = MUL(t102 - t103, costab24); ++ ++ t137 = t108 + t109; ++ t172 = MUL(t108 - t109, costab24);*/ ++ butterfly2 r2/*t133*/, r0/*t167*/, r3/*t137*/, r1/*t172*/, costab24, r10, r11, lr ++ ++ ++/* t104 = t132 + t133; ++ t182 = MUL(t132 - t133, costab16) ; ++ ++ t110 = t136 + t137; ++ t183 = MUL(t136 - t137, costab16) ; ++ ++ t168 = t166 + t167; ++ t189 = MUL(t166 - t167, costab16) ; ++ ++ t173 = t171 + t172; ++ t208 = MUL(t171 - t172, costab16) ; */ ++ butterfly4 r6/*t104*/, r2/*t182*/, r7/*t110*/, r3/*t183*/, r4/*t168*/, r0/*189*/, r5/*t173*/, r1/*t208*/, costab16, r10, r11, lr ++ ++/* Store away the computed butterflies: ++ sp[4-5] = t110, t104 ++ sp[12-13] = t173, t168 ++ sp[20-21] = t183, t182 ++ sp[28-29] = t208, t189 */ ++ st.d sp[4*4] , r6 ++ st.d sp[12*4], r4 ++ st.d sp[20*4], r2 ++ st.d sp[28*4], r0 ++ ++/* Now we have the following stack ++ ++ sp[0-7] = t67, t58 , t32, t191, t110, t104, t98, t93 ++ sp[8-15] = t154, t150, t146, t143, t173, t168, t163, t159 ++ sp[16-23] = t179, t178, t177, t192, t183, t182, t181, t180 ++ sp[24-31] = t186, t185, t184, t190, t208, t189, t188, t187 ++*/ ++ ++ /* Get slot, lo and hi from stack */ ++ lddsp lr, sp[32*4 + 4] /*slot*/ ++ lddsp r12, sp[32*4 + 8] /*lo*/ ++ lddsp r11, sp[32*4 + 12] /*hi*/ ++ ++ add r12, r12, lr << 2 ++ add r11, r11, lr << 2 ++ ++ ++/* t49 = -(t67 * 2) + t32; ++ hi[14][slot] = SHIFT(t32); ++ t87 = -(t110 * 2) + t67; ++ t138 = -(t173 * 2) + t110; ++ t203 = -(t208 * 2) + t173; */ ++ ++ lddsp r0/*t67*/, sp[0] ++ lddsp r1/*t32*/, sp[2*4] ++ lddsp r2/*t110*/, sp[4*4] ++ lddsp r3/*t173*/, sp[12*4] ++ lddsp r5/*t208*/, sp[28*4] ++ ++ sub r4/*t49*/, r1, r0 << 1 ++ scale r1 ++ sub r0/*t87*/, r0, r2 << 1 ++ st.w r11[14*SLOTS*4], r1 ++ sub r2/*t138*/, r2, r3 << 1 ++ sub r1/*t203*/, r3, r5 << 1 ++ ++/* Live: r0 = t87, r1= t203, r2= t138, r4 = t49 ++ Free: r3, r5, r6, r7, r8, r9, r10, lr */ ++ ++/* t68 = (t98 * 2) + t49; ++ hi[12][slot] = SHIFT(-t49); ++ t130 = -(t163 * 2) + t98; ++ t201 = -(t188 * 2) + t163; ++ t200 = -(t186 * 2) + t154; ++ t111 = (t154 * 2) + t87; ++ t77 = -(-(t87 * 2) - t68); ++ t88 = (t146 * 2) + t77; ++ t199 = -(t184 * 2) + t146; ++ hi[ 8][slot] = SHIFT(-t77); ++ hi[10][slot] = SHIFT(t68);*/ ++ lddsp r3/*t98*/, sp[6*4] ++ lddsp r5/*t163*/, sp[14*4] ++ lddsp r6/*t188*/, sp[30*4] ++ lddsp r10/*t186*/, sp[24*4] ++ ++ add r7/*t68*/, r4, r3 << 1 ++ neg r4 ++ scale r4 ++ lddsp r9/*t154*/, sp[8*4] ++ sub r3/*t130*/, r3, r5 << 1 ++ st.w r11[12*SLOTS*4], r4 ++ sub r8/*t201*/, r5, r6 << 1 ++ sub r4/*t200*/, r9, r10 << 1 ++ lddsp lr/*t146*/, sp[10*4] ++ lddsp r6/*t184*/, sp[26*4] ++ add r10/*t111*/, r0, r9 << 1 ++ add r5/*t77*/,r7, r0 << 1 ++ add r0/*t88*/, r5, lr << 1 ++ sub r6/*t199*/, lr, r6 << 1 ++ neg r5 ++ scale r5 ++ scale r7 ++ st.w r11[8*SLOTS*4], r5 ++ st.w r11[10*SLOTS*4], r7 ++ ++/* Live: r0 = t88, r1= t203, r2= t138, r3 = t130, r4 = t200, ++ r6 = 199, r8 = t201, r10 = t111 ++ Free: r5, r7, r9, lr */ ++ ++ ++/* ++ t123 = -(-(t138 * 2) - t111); ++ t174 = (t183 * 2) + t138; ++ t99 = -(t111 * 2) + t88; ++ hi[ 6][slot] = SHIFT(t88); */ ++ lddsp r5/*t183*/, sp[20*4] ++ ++ add r7/*t123*/, r10, r2 << 1 ++ sub r10/*t99*/, r0, r10 << 1 ++ scale r0 ++ add r2/*t174*/, r2, r5 << 1 ++ st.w r11[6*SLOTS*4], r0 ++ ++/* Live: r1 = t203, r2 = t174, r3 = t130, r4 = t200, ++ r6 = t199, r7 = t123, r8 = t201, r10 = t99 ++ Free: r0, r5, r9, lr */ ++ ++/* t112 = -(t130 * 2) + t99; ++ t164 = (t181 * 2) + t130; ++ hi[ 4][slot] = SHIFT(-t99); */ ++ lddsp r0/*t181*/, sp[22*4] ++ ++ sub r5/*t112*/, r10, r3 << 1 ++ neg r10 ++ scale r10 ++ add r3/*164*/, r3, r0 << 1 ++ st.w r11[4*SLOTS*4], r10 ++ ++/* Live: r1 = t203, r2 = t174, r3 = t164, r4 = t200, ++ r5 = t112, r6 = t199, r7 = t123, r8 = t201 ++ Free: r0, r9, r10, lr */ ++ ++ ++/* t117 = -(-(t123 * 2) - t112); ++ t139 = (t179 * 2) + t123; ++ hi[ 2][slot] = SHIFT(t112); */ ++ lddsp r0/*t179*/, sp[16*4] ++ ++ add r9/*t117*/, r5, r7 << 1 ++ scale r5 ++ add r7/*t139*/, r7, r0 << 1 ++ st.w r11[2*SLOTS*4], r5 ++ ++/* Live: r1 = t203, r2 = t174, r3 = t164, r4 = t200, ++ r6 = t199, r7 = t139, r8 = t201, r9 = t117 ++ Free: r0, r5, r10, lr */ ++ ++/* t155 = -(t174 * 2) + t139; ++ t204 = -(-(t203 * 2) - t174); ++ t124 = (t177 * 2) + t117; ++ hi[ 0][slot] = SHIFT(-t117); ++ t131 = -(t139 * 2) + t124; ++ lo[ 1][slot] = SHIFT(t124);*/ ++ lddsp r0/*t177*/, sp[18*4] ++ ++ sub r5/*t155*/, r7, r2 << 1 ++ add r2/*t204*/, r2, r1 << 1 ++ add r0/*t124*/, r9, r0 << 1 ++ neg r9 ++ scale r9 ++ sub r7/*t131*/, r0, r7 << 1 ++ scale r0 ++ st.w r11[0*SLOTS*4], r9 ++ st.w r12[1*SLOTS*4], r0 ++ ++/* Live: r2 = t204, r3 = t164, r4 = t200, ++ r5 = t155, r6 = t199, r7 = t131, r8 = t201 ++ Free: r0, r1, r9, r10, lr */ ++ ++/* t140 = (t164 * 2) + t131; ++ lo[ 3][slot] = SHIFT(-t131); ++ t202 = -(-(t201 * 2) - t164); */ ++ add r0/*t140*/, r7, r3 << 1 ++ neg r7 ++ scale r7 ++ add r3/*t202*/, r3, r8 << 1 ++ st.w r12[3*SLOTS*4], r7 ++ ++/* Live: r0 = t140, r2 = t204, r3 = t202, r4 = t200, ++ r5 = t155, r6 = t199 ++ Free: r1, r7, r8, r9, r10, lr */ ++ ++ ++/* t147 = -(-(t155 * 2) - t140); ++ lo[ 5][slot] = SHIFT(t140); ++ t175 = -(t200 * 2) + t155; ++ t156 = -(t199 * 2) + t147; ++ lo[ 7][slot] = SHIFT(-t147); */ ++ add r1/*t147*/, r0, r5 << 1 ++ scale r0 ++ sub r5/*t175*/, r5, r4 << 1 ++ sub r4/*156*/, r1, r6 << 1 ++ neg r1 ++ scale r1 ++ st.w r12[5*SLOTS*4], r0 ++ st.w r12[7*SLOTS*4], r1 ++ ++/* Live: r2 = t204, r3 = t202, ++ r4 = t156, r5 = t175 ++ Free: r0, r1, r6, r7, r8, r9, r10, lr */ ++ ++ ++/* t205 = -(-(t204 * 2) - t175); ++ t165 = -(t175 * 2) + t156; ++ lo[ 9][slot] = SHIFT(t156); ++ t176 = -(t202 * 2) + t165; ++ lo[11][slot] = SHIFT(-t165); ++ t206 = -(-(t205 * 2) - t176); ++ lo[15][slot] = SHIFT(-t206) ++ lo[13][slot] = SHIFT(t176) */ ++ add r0/*t205*/, r5, r2 << 1 ++ sub r1/*t165*/, r4, r5 << 1 ++ scale r4 ++ sub r3/*t176*/, r1, r3 << 1 ++ st.w r12[9*SLOTS*4], r4 ++ neg r1 ++ scale r1 ++ add r6/*t206*/, r3, r0 << 1 ++ neg r6 ++ scale r6 ++ scale r3 ++ st.w r12[11*SLOTS*4], r1 ++ st.w r12[15*SLOTS*4], r6 ++ st.w r12[13*SLOTS*4], r3 ++ ++/* t193 = -((t190 * 2) - t143) ++ hi[ 7][slot] = SHIFT(t143); ++ lo[ 8][slot] = SHIFT(-t193); ++ t82 = -(t104 * 2) + t58; ++ hi[13][slot] = SHIFT(t58); ++ t134 = -(t168 * 2) + t104; ++ t196 = -(t189 * 2) + t168; */ ++ ++ lddsp r0/*t190*/, sp[27*4] ++ lddsp r1/*t143*/, sp[11*4] ++ lddsp r2/*t104*/, sp[5*4] ++ lddsp r3/*t58*/, sp[1*4] ++ lddsp r4/*t168*/, sp[13*4] ++ lddsp r5/*t189*/, sp[29*4] ++ sub r0/*t193*/, r1, r0 << 1 ++ neg r0 ++ scale r1 ++ scale r0 ++ st.w r11[7*SLOTS*4], r1 ++ st.w r12[8*SLOTS*4], r0 ++ sub r0/*t82*/, r3, r2 << 1 ++ scale r3 ++ sub r2/*t134*/, r2, r4 << 1 ++ sub r4/*t196*/, r4, r5 << 1 ++ st.w r11[13*SLOTS*4], r3 ++ ++/* Live: r0 = t82, r2 = t134, ++ r4 = t196 ++ Free: r1, r3, r5, r6, r7, r8, r9, r10, lr */ ++ ++ ++ ++/* ++ ++ t207 = -(t185 * 2) + t150; ++ t105 = (t150 * 2) + t82; ++ hi[ 9][slot] = SHIFT(-t82); ++ t120 = -(-(t134 * 2) - t105); ++ hi[ 5][slot] = SHIFT(t105); ++ t169 = (t182 * 2) + t134; ++ ++ t135 = (t178 * 2) + t120; ++ hi[ 1][slot] = SHIFT(-t120); ++ t197 = -(-(t196 * 2) - t169); ++ t151 = -(t169 * 2) + t135; ++ lo[ 2][slot] = SHIFT(t135); */ ++ lddsp r1/*t185*/, sp[25*4] ++ lddsp r3/*t150*/, sp[9*4] ++ lddsp r5/*t182*/, sp[21*4] ++ lddsp r8/*t178*/, sp[17*4] ++ ++ sub r6/*t207*/, r3, r1 << 1 ++ add r3/*t105*/, r0, r3 << 1 ++ neg r0 ++ scale r0 ++ add r7/*t120*/, r3, r2 << 1 ++ scale r3 ++ st.w r11[9*SLOTS*4], r0 ++ st.w r11[5*SLOTS*4], r3 ++ add r2/*t169*/, r2, r5 << 1 ++ add r8/*t135*/, r7, r8 << 1 ++ neg r7 ++ scale r7 ++ add r4/*t197*/, r2, r4 << 1 ++ sub r2/*t151*/, r8, r2 << 1 ++ scale r8 ++ st.w r11[1*SLOTS*4], r7 ++ st.w r12[2*SLOTS*4], r8 ++ ++/* Live: r2 = t151, r4 = t197, r6 = t207 ++ ++ Free: r0, r1, r3, r5, r7, r8, r9, r10, lr */ ++ ++ ++ ++/* t170 = -(t207 * 2) + t151; ++ lo[ 6][slot] = SHIFT(-t151); ++ ++ t198 = -(-(t197 * 2) - t170); ++ lo[10][slot] = SHIFT(t170); ++ lo[14][slot] = SHIFT(-t198); ++ ++ t127 = -(t159 * 2) + t93; ++ hi[11][slot] = SHIFT(t93); ++ t194 = -(t187 * 2) + t159; */ ++ lddsp r0/*t159*/, sp[15*4] ++ lddsp r1/*t93*/, sp[7*4] ++ lddsp r3/*t187*/, sp[31*4] ++ sub r5/*t170*/, r2, r6 << 1 ++ neg r2 ++ scale r2 ++ add r4/*t198*/,r5, r4 << 1 ++ neg r4 ++ scale r5 ++ scale r4 ++ st.w r12[6*SLOTS*4], r2 ++ st.w r12[10*SLOTS*4], r5 ++ st.w r12[14*SLOTS*4], r4 ++ sub r7/*t127*/, r1, r0 << 1 ++ scale r1 ++ sub r0/*t194*/, r0, r3 << 1 ++ st.w r11[11*SLOTS*4], r1 ++ ++ ++/* Live: r0 = t194, r7 = t127 ++ Free: r1, r2, r3, r4, r6, r5, r8, r9, r10, lr */ ++ ++/* t160 = (t180 * 2) + t127; ++ hi[ 3][slot] = SHIFT(-t127); ++ t195 = -(-(t194 * 2) - t160); ++ lo[ 4][slot] = SHIFT(t160); ++ lo[12][slot] = SHIFT(-t195); ++ ++ hi[15][slot] = SHIFT(t191); ++ lo[ 0][slot] = SHIFT(t192); */ ++ lddsp r1/*t180*/, sp[23*4] ++ lddsp r2/*t191*/, sp[3*4] ++ lddsp r3/*t192*/, sp[19*4] ++ add r4/*t160*/, r7, r1 << 1 ++ neg r7 ++ scale r7 ++ add r6/*t195*/, r4, r0 << 1 ++ scale r4 ++ neg r6 ++ scale r6 ++ st.w r11[3*SLOTS*4], r7 ++ st.w r12[4*SLOTS*4], r4 ++ st.w r12[12*SLOTS*4], r6 ++ scale r2 ++ scale r3 ++ st.w r11[15*SLOTS*4], r2 ++ st.w r12[0*SLOTS*4], r3 ++ ++ sub sp, -32*4 ++ ldm sp++,r0-r7, r9-r11, pc +diff --git a/fixed.h b/fixed.h +index 4b58abf..0a1350a 100644 +--- a/fixed.h ++++ b/fixed.h +@@ -237,6 +237,46 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y) + # define MAD_F_SCALEBITS MAD_F_FRACBITS + # endif + ++/* --- AVR32 ----------------------------------------------------------------- */ ++ ++# elif defined(FPM_AVR32) ++ ++typedef signed short mad_coeff_t; ++ ++struct DWstruct {int high, low;}; ++ ++typedef union { ++ struct DWstruct s; ++ long long ll; ++} DWunion; ++ ++# define MAD_F_MLX(hi, lo, x, y) \ ++ { register DWunion __res; \ ++ __res.ll = (long long)x * (long long)y; \ ++ /* asm ("muls.d\t%0, %1, %2" : "=r" (__res.ll) : "r" (x), "r" (y));*/ \ ++ hi = __res.s.high; \ ++ lo = __res.s.low; } ++ ++# define MAD_F_MLA(hi, lo, x, y) \ ++ { register DWunion __res; \ ++ __res.s.high = hi; \ ++ __res.s.low = lo; \ ++ __res.ll += (long long)x * (long long)y; \ ++/* asm ("macs.d\t%0, %1, %2" : "+r" (__res.ll) : "r" (x), "r" (y));*/ \ ++ hi = __res.s.high; \ ++ lo = __res.s.low; } ++ ++ ++# define MAD_F_MLN(hi, lo) \ ++ asm ("neg %0\n" \ ++ "acr %1\n" \ ++ "neg %1" \ ++ : "+r" (lo), "+r" (hi) \ ++ :: "cc") ++ ++ ++# define MAD_F_SCALEBITS MAD_F_FRACBITS ++ + /* --- ARM ----------------------------------------------------------------- */ + + # elif defined(FPM_ARM) +@@ -433,6 +473,8 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y) + * + * Pre-rounding is required to stay within the limits of compliance. + */ ++typedef signed int mad_coeff_t; ++ + # if defined(OPT_SPEED) + # define mad_f_mul(x, y) (((x) >> 12) * ((y) >> 16)) + # else +diff --git a/imdct_avr32.S b/imdct_avr32.S +new file mode 100644 +index 0000000..d0ee6b4 +--- /dev/null ++++ b/imdct_avr32.S +@@ -0,0 +1,789 @@ ++/* ++ Optimized 36-point Inverse Modified Cosine Transform (IMDCT) ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Ronny Pedersen, Atmel Norway ++ ++ 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. */ ++ ++#define MAD_F(x) ((x + (1 << 13)) >> 14) ++ ++ .public imdct36_avr32 ++ ++/* ++ void imdct36(mad_fixed_t const x[18], mad_fixed_t y[36]) ++ { ++ mad_fixed_t tmp[18]; ++ int i; ++*/ ++/* DCT-IV */ ++imdct36_avr32: ++ pushm r0-r7,r11,lr ++ sub sp, 4*18 ++/* ++ { ++ mad_fixed_t tmp2[18]; ++ int i; ++ ++ /* scale[i] = 2 * cos(PI * (2 * i + 1) / (4 * 18)) */ ++/* ++ static mad_fixed_t const scale[18] = { ++ MAD_F(0x1ff833fa), MAD_F(0x1fb9ea93), MAD_F(0x1f3dd120), ++ MAD_F(0x1e84d969), MAD_F(0x1d906bcf), MAD_F(0x1c62648b), ++ MAD_F(0x1afd100f), MAD_F(0x1963268b), MAD_F(0x1797c6a4), ++ MAD_F(0x159e6f5b), MAD_F(0x137af940), MAD_F(0x11318ef3), ++ MAD_F(0x0ec6a507), MAD_F(0x0c3ef153), MAD_F(0x099f61c5), ++ MAD_F(0x06ed12c5), MAD_F(0x042d4544), MAD_F(0x0165547c) ++ }; ++*/ ++ ++ /* scaling */ ++ ++/* ++ for (i = 0; i < 18; i += 3) { ++ tmp2[i + 0] = mad_f_mul(x[i + 0], scale[i + 0]); ++ tmp2[i + 1] = mad_f_mul(x[i + 1], scale[i + 1]); ++ tmp2[i + 2] = mad_f_mul(x[i + 2], scale[i + 2]); ++ } ++*/ ++ /* even input butterfly */ ++ ++/* ++ for (i = 0; i < 9; i += 3) { ++ tmp3[i + 0] = tmp2[i + 0] + tmp2[18 - (i + 0) - 1]; ++ tmp3[i + 1] = tmp2[i + 1] + tmp2[18 - (i + 1) - 1]; ++ tmp3[i + 2] = tmp2[i + 2] + tmp2[18 - (i + 2) - 1]; ++ } ++ for (i = 0; i < 9; i += 3) { ++ tmp4[i + 0] = tmp2[i + 0] - tmp2[18 - (i + 0) - 1]; ++ tmp4[i + 1] = tmp2[i + 1] - tmp2[18 - (i + 1) - 1]; ++ tmp4[i + 2] = tmp2[i + 2] - tmp2[18 - (i + 2) - 1]; ++ } ++*/ ++ ++ ld.d r8, r12[0] /*r8 = x[1], r9 = x[0]*/ ++ ld.d r0, pc[scale_dctIV - .] /*r0 = {scale[2], scale[3]}, r1 = { scale[0], scale[1] }*/ ++ ld.d r2, r12[2*4] /*r2 = x[3], r3 = x[2]*/ ++ ld.d r4, pc[scale_dctIV - . + 14*2] /*r4 = {scale[16], scale[17]}, r5 = { scale[14], scale[15] }*/ ++ mulsatrndwh.w r9/*tmp2[0]*/, r9, r1:t /*tmp2[0] = mad_f_mul(x[0], scale[0]) */ ++ ld.d r6, r12[16*4] /*r6 = x[17], r7 = x[16]*/ ++ mulsatrndwh.w r8/*tmp2[1]*/, r8, r1:b /*tmp2[1] = mad_f_mul(x[1], scale[1]) */ ++ mulsatrndwh.w r3/*tmp2[2]*/, r3, r0:t /*tmp2[2] = mad_f_mul(x[2], scale[2]) */ ++ mulsatrndwh.w r2/*tmp2[3]*/, r2, r0:b /*tmp2[3] = mad_f_mul(x[3], scale[3]) */ ++ ld.d r0, r12[14*4] /*r0 = x[15], r1 = x[14]*/ ++ mulsatrndwh.w r7/*tmp2[16]*/, r7, r4:t /*tmp2[16] = mad_f_mul(x[16], scale[16]) */ ++ mulsatrndwh.w r6/*tmp2[17]*/, r6, r4:b /*tmp2[17] = mad_f_mul(x[17], scale[17]) */ ++ mulsatrndwh.w r1/*tmp2[14]*/, r1, r5:t /*tmp2[14] = mad_f_mul(x[14], scale[14]) */ ++ mulsatrndwh.w r0/*tmp2[15]*/, r0, r5:b /*tmp2[15] = mad_f_mul(x[15], scale[15]) */ ++ ++ ld.d r4, r12[4*4] /*r4 = x[5], r5 = x[4]*/ ++ ++ sub lr/*tmp4[0]*/, r9, r6 ++ add r6/*tmp3[0]*/, r9, r6 ++ sub r10/*tmp4[1]*/, r8, r7 ++ add r7/*tmp3[1]*/, r8, r7 ++ sub r9/*tmp4[2]*/, r3, r0 ++ add r0/*tmp3[2]*/, r3, r0 ++ sub r8/*tmp4[3]*/, r2, r1 ++ add r1/*tmp3[3]*/, r2, r1 ++ ++ ld.d r2, pc[scale_dctIV - . + 4*2] /*r2 = {scale[6], scale[7]}, r3 = { scale[4], scale[5] }*/ ++ ++ stm --sp, r8-r10, lr /*sp[0] = tmp4[0],sp[1] = tmp4[1], ++ sp[2] = tmp4[2],sp[3] = tmp4[3] */ ++ ++ /* Registers used: r0 = tmp3[2], r1 = tmp3[3], r6 = tmp3[0], r7 = tmp3[1], r12 = x ++ Free registers: r2-r5, r8-r11, lr ++ */ ++ ld.d r8, r12[6*4] /*r8 = x[7], r9 = x[6]*/ ++ ld.d r10, pc[scale_dctIV - . + 10*2] /*r10 = {scale[12], scale[13]}, r11 = { scale[10], scale[11] }*/ ++ mulsatrndwh.w r5/*tmp2[4]*/, r5, r3:t /*tmp2[4] = mad_f_mul(x[4], scale[4]) */ ++ mulsatrndwh.w r4/*tmp2[5]*/, r4, r3:b /*tmp2[5] = mad_f_mul(x[5], scale[5]) */ ++ mulsatrndwh.w r9/*tmp2[6]*/, r9, r2:t /*tmp2[6] = mad_f_mul(x[6], scale[6]) */ ++ mulsatrndwh.w r8/*tmp2[7]*/, r8, r2:b /*tmp2[7] = mad_f_mul(x[7], scale[7]) */ ++ ++ ld.d r2, r12[12*4] /*r2 = x[13], r3 = x[12]*/ ++ ld.w lr, r12[11*4] /*lr = x[11] */ ++ mulsatrndwh.w r3/*tmp2[12]*/, r3, r10:t /*tmp2[12] = mad_f_mul(x[12], scale[12]) */ ++ mulsatrndwh.w r2/*tmp2[13]*/, r2, r10:b /*tmp2[13] = mad_f_mul(x[13], scale[13]) */ ++ ld.w r10, r12[10*4] /*r10 = x[10] */ ++ mulsatrndwh.w lr/*tmp2[11]*/, lr, r11:b /*tmp2[11] = mad_f_mul(x[11], scale[11]) */ ++ mulsatrndwh.w r10/*tmp2[10]*/, r10, r11:t /*tmp2[10] = mad_f_mul(x[10], scale[10]) */ ++ ++ sub r11/*tmp4[4]*/, r5, r2 ++ add r2/*tmp3[4]*/, r5, r2 ++ sub r5/*tmp4[5]*/, r4, r3 ++ add r3/*tmp3[5]*/, r4, r3 ++ sub r4/*tmp4[6]*/, r9, lr ++ add lr/*tmp3[6]*/, r9, lr ++ sub r9/*tmp4[7]*/, r8, r10 ++ add r10/*tmp3[7]*/, r8, r10 ++ lddpc r8, scale_dctIV + 8*2 /*r8 = {scale[8], scale[9]} */ ++ ++ stm --sp, r4, r5, r9, r11 /*sp[0] = tmp4[4],sp[1] = tmp4[7], ++ sp[2] = tmp4[5],sp[3] = tmp4[6] */ ++ ld.d r4, r12[8*4] /*r4 = x[9], r5 = x[8]*/ ++ mulsatrndwh.w r5/*tmp2[8]*/, r5, r8:t /*tmp2[8] = mad_f_mul(x[8], scale[8]) */ ++ mulsatrndwh.w r4/*tmp2[9]*/, r4, r8:b /*tmp2[9] = mad_f_mul(x[9], scale[9]) */ ++ sub r9/*tmp4[8]*/, r5, r4 ++ add r5/*tmp3[8]*/, r5, r4 ++ ++ st.w --sp, r9 /* sp[0] = tmp4[8] */ ++ ++ /* Registers used: ++ ++ r0=tmp3[2], r1=tmp3[3], r2=tmp3[4], r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0], ++ r7 = tmp3[1], r10=tmp3[7], lr=tmp3[6] ++ Free registers: ++ r4, r8, r9, r11, r12 ++ */ ++ ++ ++ /* SDCT-II */ ++/* ++ ++ { ++ mad_fixed_t tmp3[9]; ++ int i; ++*/ ++ /* scale[i] = 2 * cos(PI * (2 * i + 1) / (2 * 18)) */ ++/* ++ static mad_fixed_t const scale[9] = { ++ MAD_F(0x1fe0d3b4), MAD_F(0x1ee8dd47), MAD_F(0x1d007930), ++ MAD_F(0x1a367e59), MAD_F(0x16a09e66), MAD_F(0x125abcf8), ++ MAD_F(0x0d8616bc), MAD_F(0x08483ee1), MAD_F(0x02c9fad7) ++ }; ++*/ ++ /* divide the 18-point SDCT-II into two 9-point SDCT-IIs */ ++ ++ ++ /* fastdct */ ++ ++/* ++ { ++ mad_fixed_t a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12; ++ mad_fixed_t a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25; ++ mad_fixed_t m0, m1, m2, m3, m4, m5, m6, m7; ++*/ ++// enum { ++// c0 = MAD_F(0x1f838b8d), /* 2 * cos( 1 * PI / 18) */ ++// c1 = MAD_F(0x1bb67ae8), /* 2 * cos( 3 * PI / 18) */ ++// c2 = MAD_F(0x18836fa3), /* 2 * cos( 4 * PI / 18) */ ++// c3 = MAD_F(0x1491b752), /* 2 * cos( 5 * PI / 18) */ ++// c4 = MAD_F(0x0af1d43a), /* 2 * cos( 7 * PI / 18) */ ++// c5 = MAD_F(0x058e86a0), /* 2 * cos( 8 * PI / 18) */ ++// c6 = -MAD_F(0x1e11f642) /* 2 * cos(16 * PI / 18) */ ++// }; ++ ++/* ++ a2 = tmp3[6] + tmp3[2]; ++ a6 = tmp3[8] + tmp3[0]; ++ a11 = a2 - a6; ++ m5 = mad_f_mul(a11, -c6) ; ++ a4 = tmp3[1] + tmp3[7]; ++ ++ a18 = tmp3[4] + a4; ++ a19 = -2 * tmp3[4] + a4; ++ ++ a0 = tmp3[3] + tmp3[5]; ++ ++*/ ++ add r11/*a4*/, r7, r10 ++ add r12/*a18*/, r2, r11 ++ sub r11/*a19*/, r11, r2<<1 ++ ++ add r4/*a2*/, lr, r0 ++ add r8/*a6*/, r5, r6 ++ sub r9/*a11*/, r4, r8 ++ ++ st.d --sp, r0 /* sp[0] = tmp3[3], sp1[1] = tmp3[2]*/ ++ ++ mov r2, MAD_F(0x1e11f642) ++ mulsatrndwh.w r9/*m5*/, r9, r2:b ++ ++ add r2/*a0*/, r1, r3 ++ ++ /* Registers used: ++ ++ r2=a0, r3=tmp3[5], r4=a2, r5=tmp3[8], r6 = tmp3[0], ++ r7 = tmp3[1], r8=a6, r10=tmp3[7], r9=m5, r11=a19, r12=a18,lr=tmp3[6] ++ Free registers: ++ r0, r1 ++ */ ++ ++/* ++ a8 = a0 + a2; ++ a12 = a8 + a6; ++ a10 = a0 - a6; ++ a9 = a0 - a2; ++ m7 = mad_f_mul(a9, -c2) ; ++ m6 = mad_f_mul(a10, -c5) ; ++*/ ++ ++ add r0/*a8*/, r2, r4 ++ add r0/*a12*/, r8 ++ rsub r8/*a10*/, r2 ++ sub r2/*a9*/, r4 ++ mov r1, -MAD_F(0x18836fa3) ++ mulsatrndwh.w r2/*m7*/, r2, r1:b ++ mov r1, -MAD_F(0x058e86a0) ++ mulsatrndwh.w r8/*m6*/, r8, r1:b ++ ++ /* Registers used: ++ ++ r0=a12, r2=m7, r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0], ++ r7 = tmp3[1], r8=m6, r10=tmp3[7], r9=m5, r11=a19, r12=a18,lr=tmp3[6] ++ Free registers: ++ r1, r4 ++ */ ++ ++ ++/* ++ a21 = -a19 - (m5 << 1); ++ tmp[ 8] = a21 - (m6 << 1); ++ ++ a20 = a19 - (m5 << 1); ++ tmp[ 4] = (m7 << 1) + a20; ++ a22 = -a19 + (m6 << 1); ++ tmp[16] = a22 + (m7 << 1); ++ tmp[ 0] = a18 + a12; ++ tmp[12] = a12 - 2 * a18; ++*/ ++ add r1/*a21*/, r11, r9 << 1 ++ neg r1 ++ sub r1/*tmp[8]*/, r1, r8 << 1 ++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 8*4], r1 ++ sub r4/*a20*/, r11, r9 << 1 ++ add r4/*tmp[4]*/, r4, r2 << 1 ++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 4*4], r4 ++ neg r11 ++ add r1/*a22*/, r11, r8 << 1 ++ add r1/*tmp[16]*/, r1, r2 << 1 ++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 16*4], r1 ++ add r4, r12, r0 ++ sub r1, r0, r12 << 1 ++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 0*4], r4 ++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 12*4], r1 ++ ++ ld.d r0, sp++ ++ ++ /* Registers used: ++ ++ r0 = tmp3[2], r1 = tmp3[3], r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0], ++ r7 = tmp3[1], r10=tmp3[7], r11=a19, lr=tmp3[6] ++ Free registers: ++ r2,r4,r8,r9,r12 ++ */ ++ ++/* ++ a5 = tmp3[1] - tmp3[7]; ++ a7 = tmp3[8] - tmp3[0]; ++ a3 = tmp3[6] - tmp3[2]; ++ a1 = tmp3[3] - tmp3[5]; ++ a13 = a1 - a3; ++ a14 = a13 + a7; ++ m3 = mad_f_mul(a14, -c1) ; ++ m4 = mad_f_mul(a5, -c1) ; ++ tmp[ 6] = m3 << 1; ++*/ ++ sub r7/*a5*/, r10 ++ sub r2/*a7*/, r5, r6 ++ sub r4/*a3*/, lr, r0 ++ sub r8/*a1*/, r1, r3 ++ sub r9/*a13*/, r8, r4 ++ add r12/*a14*/, r9, r2 ++ mov r0, -MAD_F(0x1bb67ae8) ++ mulsatrndwh.w r12/*m3*/, r12, r0:b ++ mulsatrndwh.w r7/*m4*/, r7, r0:b ++ lsl r12, 1 ++ stdsp sp[4*9/*tmp3[..] on the stack*/ + 6*4], r12 ++ ++ /* Registers used: ++ r2 = a7, r4 = a3, r7 = m4, r8 = a1, r12 = m3 ++ ++ Free registers: ++ r0, r1, r3, r5, r6, r10, r9, r11, lr ++ */ ++ ++ ++/* ++ a15 = a3 + a7; ++ m2 = mad_f_mul(a15, -c4) ; ++ a17 = a1 + a3; ++ m0 = mad_f_mul(a17, -c3) ; ++ a23 = (m4 << 1) + (m2 << 1); ++ tmp[14] = a23 + (m0 << 1); */ ++ add r0/*a15*/, r4, r2 ++ mov r1, -MAD_F(0x0af1d43a) ++ mulsatrndwh.w r0/*m2*/, r0, r1:b ++ mov r3, -MAD_F(0x1491b752) ++ add r5/*a17*/, r8, r4 ++ mulsatrndwh.w r5/*m0*/, r5, r3:b ++ lsl r7, 1 ++ add r6/*a23*/, r7, r0 << 1 ++ add r6/*tmp[14]*/, r6, r5 << 1 ++ stdsp sp[4*9/*tmp3[..] on the stack*/ + 14*4], r6 ++ ++ /* Registers used: ++ r0 = m2, r2 = a7, r5 = m0, r7 = m4, r8 = a1 ++ ++ Free registers: ++ r1, r3, r4, r6, r10, r9, r11, lr ++ */ ++ ++/* ++ a16 = a1 - a7; ++ m1 = mad_f_mul(a16, -c0) ; ++ a24 = (m4 << 1) - (m2 << 1); ++ tmp[10] = a24 - (m1 << 1); ++ ++ a25 = (m4 << 1) + (m1 << 1); ++ tmp[ 2] = (m0 << 1) - a25; ++*/ ++ sub r3/*a16*/, r8, r2 ++ mov r4, -MAD_F(0x1f838b8d) ++ mulsatrndwh.w r3/*m1*/, r3, r4:b ++ sub r1/*a24*/, r7, r0 << 1 ++ sub r1/*tmp[10]*/, r1, r3 << 1 ++ stdsp sp[4*9/*tmp3[..] on the stack*/ + 10*4], r1 ++ add r7/*a25*/, r7, r3 << 1 ++ sub r7, r7, r5 << 1 ++ neg r7 ++ stdsp sp[4*9/*tmp3[..] on the stack*/ + 2*4], r7 ++ ++ ++ ++ ++ /* output to every other slot for convenience */ ++ ++ /*} */ ++ /* End fastdct */ ++ ++ /* odd input butterfly and scaling */ ++ ++ ++ /* On the stack: ++ sp[0] = tmp4[8], sp[1] = tmp4[4],sp[2] = tmp4[7], sp[3] = tmp4[5],sp[4] = tmp4[6] ++ sp[5] = tmp4[0], sp[6] = tmp4[1],sp[7] = tmp4[2],sp[8] = tmp4[3] ++ */ ++ ++ /* ++ tmp3[0] = mad_f_mul(tmp4[0], scale[0]); ++ tmp3[1] = mad_f_mul(tmp4[1], scale[1]) << 1; ++ tmp3[2] = mad_f_mul(tmp4[2], scale[2]); ++ tmp3[3] = mad_f_mul(tmp4[3], scale[3]) << 1; ++ tmp3[4] = mad_f_mul(tmp4[4], scale[4]); ++ tmp3[5] = mad_f_mul(tmp4[5], scale[5]); ++ tmp3[6] = mad_f_mul(tmp4[6], scale[6]) << 1; ++ tmp3[7] = mad_f_mul(tmp4[7], scale[7]); ++ tmp3[8] = mad_f_mul(tmp4[8], scale[8]) << 1; ++ */ ++ /* Registers used: ++ r1 = tmp4[3], r2 = tmp4[2], r3 = tmp4[1], r4 = tmp4[0], r7 = tmp4[6] ++ r10 = tmp4[5], r11 = tmp4[7], r12 = tmp4[4], lr = tmp4[8] ++ ++ Free registers: ++ r0, r5, r6, r8, r9 ++ */ ++ ld.d r8, pc[ scale_sdctII - . + 4*2] /* r8 = { scale[6], scale[7] }, r9 = { scale[4], scale[5]} */ ++ ldm sp++, r1, r2, r3, r4, r7, r10, r11, r12, lr ++ mov r5, MAD_F(0x02c9fad7) /* r3 = scale[8] */ ++ mulsatrndwh.w r5/*tmp3[8]*/, lr, r5:b ++ mulsatrndwh.w lr/*tmp3[6]*/, r7, r8:t ++ ld.d r6, pc[ scale_sdctII - . + 0*2] /* r6 = { scale[2], scale[3] }, r7 = { scale[0], scale[1]} */ ++ lsl lr, 1 ++ lsl r5, 1 ++ mulsatrndwh.w r0/*tmp3[2]*/, r2, r6:t ++ mulsatrndwh.w r1/*tmp3[3]*/, r1, r6:b ++ mulsatrndwh.w r6/*tmp3[0]*/, r4, r7:t ++ mulsatrndwh.w r7/*tmp3[1]*/, r3, r7:b ++ mulsatrndwh.w r3/*tmp3[5]*/, r10, r9:b ++ mulsatrndwh.w r2/*tmp3[4]*/, r12, r9:t ++ mulsatrndwh.w r9/*tmp3[7]*/, r11, r8:b ++ lsl r1, 1 ++ lsl r7, 1 ++ ++ ++ /* fastdct */ ++ ++/* ++ { ++ mad_fixed_t a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12; ++ mad_fixed_t a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25; ++ mad_fixed_t m0, m1, m2, m3, m4, m5, m6, m7; ++*/ ++// enum { ++// c0 = MAD_F(0x1f838b8d), /* 2 * cos( 1 * PI / 18) */ ++// c1 = MAD_F(0x1bb67ae8), /* 2 * cos( 3 * PI / 18) */ ++// c2 = MAD_F(0x18836fa3), /* 2 * cos( 4 * PI / 18) */ ++// c3 = MAD_F(0x1491b752), /* 2 * cos( 5 * PI / 18) */ ++// c4 = MAD_F(0x0af1d43a), /* 2 * cos( 7 * PI / 18) */ ++// c5 = MAD_F(0x058e86a0), /* 2 * cos( 8 * PI / 18) */ ++// c6 = -MAD_F(0x1e11f642) /* 2 * cos(16 * PI / 18) */ ++// }; ++ ++ /* Registers used: ++ ++ r0=tmp3[2], r1=tmp3[3], r2=tmp3[4], r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0], ++ r7 = tmp3[1], r9=tmp3[7], lr=tmp3[6] ++ Free registers: ++ r4, r8, r10, r11, r12 ++ */ ++ ++/* ++ a2 = tmp3[6] + (tmp3[2] << 1); ++ a6 = tmp3[8] + (tmp3[0] << 1); ++ a11 = a2 - a6; ++ m5 = mad_f_mul(a11, c6) ; ++ a4 = tmp3[1] + (tmp3[7] << 1); ++ ++ a18 = (tmp3[4] << 1) + a4; ++ a19 = -2 * (tmp3[4] << 1) + a4; ++ ++ a0 = tmp3[3] + (tmp3[5] << 1); ++ ++*/ ++ add r11/*a4*/, r7, r9 << 1 ++ add r12/*a18*/, r11, r2 << 1 ++ sub r11/*a19*/, r11, r2 << 2 ++ ++ add r4/*a2*/, lr, r0 << 1 ++ add r8/*a6*/, r5, r6 << 1 ++ sub r10/*a11*/, r4, r8 ++ ++ st.d --sp, r0 /* sp[0] = tmp3[3], sp1[1] = tmp3[2]*/ ++ ++ mov r2, -MAD_F(0x1e11f642) ++ mulsatrndwh.w r10/*m5*/, r10, r2:b ++ ++ add r2/*a0*/, r1, r3 << 1 ++ ++ /* Registers used: ++ ++ r2=a0, r3=tmp3[5], r4=a2, r5=tmp3[8], r6 = tmp3[0], ++ r7 = tmp3[1], r8=a6, r9=tmp3[7], r10=m5, r11=a19, r12=a18,lr=tmp3[6] ++ Free registers: ++ r0, r1 ++ */ ++ ++/* ++ a8 = a0 + a2; ++ a12 = a8 + a6; ++ a10 = a0 - a6; ++ a9 = a0 - a2; ++ m7 = mad_f_mul(a9, -c2) ; ++ m6 = mad_f_mul(a10, -c5) ; ++*/ ++ ++ add r0/*a8*/, r2, r4 ++ add r0/*a12*/, r8 ++ rsub r8/*a10*/, r2 ++ sub r2/*a9*/, r4 ++ mov r1, -MAD_F(0x18836fa3) ++ mulsatrndwh.w r2/*m7*/, r2, r1:b ++ mov r1, -MAD_F(0x058e86a0) ++ mulsatrndwh.w r8/*m6*/, r8, r1:b ++ ++ /* Registers used: ++ ++ r0=a12, r2=m7, r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0], ++ r7 = tmp3[1], r8=m6, r9=tmp3[7], r10=m5, r11=a19, r12=a18,lr=tmp3[6] ++ Free registers: ++ r1, r4 ++ */ ++ ++ ++/* ++ a21 = -a19 + (m5 << 1); ++ tmp[ 9] = a21 - (m6 << 1); ++ ++ a20 = -(-a19 - (m5 << 1)); ++ tmp[ 5] = (m7 << 1) + a20; ++ a22 = -a19 + (m6 << 1); ++ tmp[17] = a22 + (m7 << 1); ++ tmp[ 1] = a18 + a12; ++ tmp[13] = a12 - 2 * a18; ++*/ ++ sub r1/*a21*/, r11, r10 << 1 ++ neg r1 ++ sub r1/*tmp[9]*/, r1, r8 << 1 ++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 9*4], r1 ++ add r4/*a20*/, r11, r10 << 1 ++ add r4/*tmp[5]*/, r4, r2 << 1 ++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 5*4], r4 ++ neg r11 ++ add r1/*a22*/, r11, r8 << 1 ++ add r1/*tmp[17]*/, r1, r2 << 1 ++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 17*4], r1 ++ add r4, r12, r0 ++ sub r1, r0, r12 << 1 ++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 1*4], r4 ++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 13*4], r1 ++ ++ ld.d r0, sp++ ++ ++ /* Registers used: ++ ++ r0 = tmp3[2], r1 = tmp3[3], r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0], ++ r7 = tmp3[1], r9=tmp3[7], r11=a19, lr=tmp3[6] ++ Free registers: ++ r2,r4,r8,r10,r12 ++ */ ++ ++/* ++ a5 = tmp3[1] - (tmp3[7] << 1); ++ a7 = tmp3[8] - (tmp3[0] << 1); ++ a3 = tmp3[6] - (tmp3[2] << 1); ++ a1 = tmp3[3] - (tmp3[5] << 1); ++ a13 = a1 - a3; ++ a14 = a13 + a7; ++ m3 = mad_f_mul(a14, -c1) ; ++ m4 = mad_f_mul(a5, -c1) ; ++ tmp[ 7] = m3 << 1; ++*/ ++ sub r7/*a5*/, r7, r9 << 1 ++ sub r2/*a7*/, r5, r6 << 1 ++ sub r4/*a3*/, lr, r0 << 1 ++ sub r8/*a1*/, r1, r3 << 1 ++ sub r10/*a13*/, r8, r4 ++ add r12/*a14*/, r10, r2 ++ mov r0, -MAD_F(0x1bb67ae8) ++ mulsatrndwh.w r12/*m3*/, r12, r0:b ++ mulsatrndwh.w r7/*m4*/, r7, r0:b ++ lsl r12, 1 ++ stdsp sp[7*4], r12 ++ ++ /* Registers used: ++ r2 = a7, r4 = a3, r7 = m4, r8 = a1, r12 = m3 ++ ++ Free registers: ++ r0, r1, r3, r5, r6, r9, r10, r11, lr ++ */ ++ ++ ++/* ++ a15 = a3 + a7; ++ m2 = mad_f_mul(a15, -c4) ; ++ a17 = a1 + a3; ++ m0 = mad_f_mul(a17, -c3) ; ++ a23 = (m4 << 1) + (m2 << 1); ++ tmp[15] = a23 + (m0 << 1); */ ++ add r0/*a15*/, r4, r2 ++ mov r1, -MAD_F(0x0af1d43a) ++ mulsatrndwh.w r0/*m2*/, r0, r1:b ++ mov r3, -MAD_F(0x1491b752) ++ add r5/*a17*/, r8, r4 ++ mulsatrndwh.w r5/*m0*/, r5, r3:b ++ lsl r7, 1 ++ add r6/*a23*/, r7, r0 << 1 ++ add r6/*tmp[15]*/, r6, r5 << 1 ++ stdsp sp[15*4], r6 ++ ++ /* Registers used: ++ r0 = m2, r2 = a7, r5 = m0, r7 = m4, r8 = a1 ++ ++ Free registers: ++ r1, r3, r4, r6, r9, r10, r11, lr ++ */ ++ ++/* ++ a16 = a1 - a7; ++ m1 = mad_f_mul(a16, -c0) ; ++ a24 = (m4 << 1) - (m2 << 1); ++ tmp[11] = a24 - (m1 << 1); ++ ++ a25 = (m4 << 1) + (m1 << 1); ++ tmp[ 3] = (m0 << 1) - a25; ++*/ ++ sub r3/*a16*/, r8, r2 ++ mov r4, -MAD_F(0x1f838b8d) ++ mulsatrndwh.w r3/*m1*/, r3, r4:b ++ sub r1/*a24*/, r7, r0 << 1 ++ sub r1/*tmp[11]*/, r1, r3 << 1 ++ stdsp sp[11*4], r1 ++ add r7/*a25*/, r7, r3 << 1 ++ sub r7, r7, r5 << 1 ++ neg r7 ++ lddsp r12, sp[4*18+4] /* Get y from stack */ ++ stdsp sp[3*4], r7 ++ ++ ++ /* output to every other slot for convenience */ ++ ++ /* End fastdct */ ++ ++ /* output accumulation */ ++ ++/* for (i = 3; i < 18; i += 8) { ++ tmp[i + 0] -= tmp[(i + 0) - 2]; ++ tmp[i + 2] -= tmp[(i + 2) - 2]; ++ tmp[i + 4] -= tmp[(i + 4) - 2]; ++ tmp[i + 6] -= tmp[(i + 6) - 2]; ++ } ++ } ++*/ ++ ++/* End SDCT-II */ ++ ++ ++ ++ /* scale reduction and output accumulation */ ++ ++/* ++ for (i = 1; i < 17; i += 4) { ++ tmp[i + 0] = tmp[i + 0] - tmp[(i + 0) - 1]; ++ tmp[i + 1] = tmp[i + 1] - tmp[(i + 1) - 1]; ++ tmp[i + 2] = tmp[i + 2] - tmp[(i + 2) - 1]; ++ tmp[i + 3] = tmp[i + 3] - tmp[(i + 3) - 1]; ++ } ++ tmp[17] = tmp[17] - tmp[16]; ++ } ++*/ ++/* End DCT-IV */ ++ ++ ++ /* convert 18-point DCT-IV to 36-point IMDCT */ ++ ++/* ++ for (i = 0; i < 9; i += 3) { ++ y[i + 0] = tmp[9 + (i + 0)]; ++ y[i + 1] = tmp[9 + (i + 1)]; ++ y[i + 2] = tmp[9 + (i + 2)]; ++ } ++ for (i = 9; i < 27; i += 3) { ++ y[i + 0] = -tmp[36 - (9 + (i + 0)) - 1]; ++ y[i + 1] = -tmp[36 - (9 + (i + 1)) - 1]; ++ y[i + 2] = -tmp[36 - (9 + (i + 2)) - 1]; ++ } ++ for (i = 27; i < 36; i += 3) { ++ y[i + 0] = -tmp[(i + 0) - 27]; ++ y[i + 1] = -tmp[(i + 1) - 27]; ++ y[i + 2] = -tmp[(i + 2) - 27]; ++ } ++ } ++*/ ++ ++ /* Registers used: ++ r0 = tmp[8], r1 = tmp[7], r2 = tmp[6], r3 = tmp[5], r4 = tmp[4] ++ r5 = tmp[3], r6 = tmp[2], r7 = tmp[1], r8 = tmp[0], r12 = y ++ ++ Free registers: ++ r9, r10, r11, lr ++ */ ++ ++ ldm sp++, r0-r8 /* Get tmp[0]-tmp[8] from stack */ ++ sub r5, r7 /* tmp[3] -= tmp[1]*/ ++ sub r3, r5 /* tmp[5] -= tmp[3]*/ ++ sub r1, r3 /* tmp[7] -= tmp[5]*/ ++ ++ sub r7, r8 /* tmp[1] -= tmp[0]*/ ++ sub r6, r7 /* tmp[2] -= tmp[1]*/ ++ sub r5, r6 /* tmp[3] -= tmp[2]*/ ++ neg r8 ++ st.w r12[26*4], r8 /* y[26] = -tmp[0] */ ++ st.w r12[27*4], r8 /* y[27] = -tmp[0] */ ++ neg r7 ++ neg r6 ++ st.w r12[25*4], r7 /* y[25] = -tmp[1] */ ++ st.w r12[24*4], r6 /* y[24] = -tmp[2] */ ++ st.d r12[28*4], r6 /* y[28] = -tmp[1], y[29] = -tmp[2]*/ ++ ++ sub r4, r5 /* tmp[4] -= tmp[3]*/ ++ sub r3, r4 /* tmp[5] -= tmp[4]*/ ++ neg r5 ++ neg r4 ++ st.w r12[23*4], r5 /* y[23] = -tmp[3] */ ++ st.w r12[22*4], r4 /* y[22] = -tmp[4] */ ++ st.d r12[30*4], r4 /* y[30] = -tmp[3], y[31] = -tmp[4]*/ ++ ++ ldm sp++, r4-r11,lr /* Get tmp[9]-tmp[17] from stack */ ++ ++ sub r2, r3 /* tmp[6] -= tmp[5]*/ ++ ++ sub lr, r1 /* tmp[9] -= tmp[7]*/ ++ sub r10, lr /* tmp[11] -= tmp[9]*/ ++ sub r8, r10 /* tmp[13] -= tmp[11]*/ ++ sub r6, r8 /* tmp[15] -= tmp[13]*/ ++ sub r4, r6 /* tmp[17] -= tmp[15]*/ ++ ++ sub r1, r2 /* tmp[7] -= tmp[6]*/ ++ sub r0, r1 /* tmp[8] -= tmp[7]*/ ++ neg r3 ++ neg r2 ++ st.w r12[21*4], r3 /* y[21] = -tmp[5] */ ++ st.w r12[20*4], r2 /* y[20] = -tmp[6] */ ++ st.d r12[32*4], r2 /* y[32] = -tmp[5], y[33] = -tmp[6]*/ ++ ++ sub lr, r0 /* tmp[9] -= tmp[8]*/ ++ sub r11, lr /* tmp[10] -= tmp[9]*/ ++ neg r1 ++ neg r0 ++ st.w r12[19*4], r1 /* y[19] = -tmp[7] */ ++ st.w r12[18*4], r0 /* y[18] = -tmp[8] */ ++ st.d r12[34*4], r0 /* y[34] = -tmp[7], y[35] = -tmp[8]*/ ++ ++ sub r10, r11 /* tmp[11] -= tmp[10]*/ ++ sub r9, r10 /* tmp[12] -= tmp[11]*/ ++ ++ st.w r12[0*4], lr /* y[0] = tmp[9]*/ ++ neg lr ++ st.w r12[17*4], lr /* y[17] = -tmp[9]*/ ++ st.d r12[1*4], r10 /* y[1] = tmp[10], y[2] = tmp[11] */ ++ neg r11 ++ neg r10 ++ st.w r12[16*4], r11 /* y[16] = -tmp[10] */ ++ st.w r12[15*4], r10 /* y[15] = -tmp[11] */ ++ ++ ++ sub r8, r9 /* tmp[13] -= tmp[12]*/ ++ sub r7, r8 /* tmp[14] -= tmp[13]*/ ++ st.d r12[3*4], r8 /* y[3] = tmp[12], y[4] = tmp[13] */ ++ neg r9 ++ neg r8 ++ st.w r12[14*4], r9 /* y[14] = -tmp[12] */ ++ st.w r12[13*4], r8 /* y[13] = -tmp[13] */ ++ ++ sub r6, r7 /* tmp[15] -= tmp[14]*/ ++ sub r5, r6 /* tmp[16] -= tmp[15]*/ ++ sub r4, r5 /* tmp[17] -= tmp[16]*/ ++ ++ st.d r12[5*4], r6 /* y[5] = tmp[14], y[6] = tmp[15] */ ++ neg r7 ++ neg r6 ++ st.w r12[12*4], r7 /* y[12] = -tmp[14] */ ++ st.w r12[11*4], r6 /* y[11] = -tmp[15] */ ++ ++ st.d r12[7*4], r4 /* y[7] = tmp[16], y[8] = tmp[17] */ ++ neg r5 ++ neg r4 ++ st.w r12[10*4], r5 /* y[10] = -tmp[16] */ ++ st.w r12[9*4], r4 /* y[9] = -tmp[17] */ ++ ++ popm r0-r7,r11,pc ++ ++ .align 2 ++scale_dctIV: ++ .short MAD_F(0x1ff833fa), MAD_F(0x1fb9ea93), MAD_F(0x1f3dd120) ++ .short MAD_F(0x1e84d969), MAD_F(0x1d906bcf), MAD_F(0x1c62648b) ++ .short MAD_F(0x1afd100f), MAD_F(0x1963268b), MAD_F(0x1797c6a4) ++ .short MAD_F(0x159e6f5b), MAD_F(0x137af940), MAD_F(0x11318ef3) ++ .short MAD_F(0x0ec6a507), MAD_F(0x0c3ef153), MAD_F(0x099f61c5) ++ .short MAD_F(0x06ed12c5), MAD_F(0x042d4544), MAD_F(0x0165547c) ++ ++ .align 2 ++scale_sdctII: ++ .short MAD_F(0x1fe0d3b4), MAD_F(0x1ee8dd47), MAD_F(0x1d007930) ++ .short MAD_F(0x1a367e59), MAD_F(0x16a09e66), MAD_F(0x125abcf8) ++ .short MAD_F(0x0d8616bc), MAD_F(0x08483ee1), MAD_F(0x02c9fad7) +diff --git a/layer3.c b/layer3.c +index 4e5d3fa..dffdab3 100644 +--- a/layer3.c ++++ b/layer3.c +@@ -378,6 +378,11 @@ mad_fixed_t const ca[8] = { + -MAD_F(0x003a2847) /* -0.014198569 */, -MAD_F(0x000f27b4) /* -0.003699975 */ + }; + ++#ifdef FPM_AVR32 ++# undef MAD_F ++# define MAD_F(x) ((x + (1 << 12)) >> 13) ++#endif ++ + /* + * IMDCT coefficients for short blocks + * derived from section 2.4.3.4.10.2 of ISO/IEC 11172-3 +@@ -386,7 +391,7 @@ mad_fixed_t const ca[8] = { + * imdct_s[i /odd][k] = cos((PI / 24) * (2 * (6 + (i-1)/2) + 7) * (2 * k + 1)) + */ + static +-mad_fixed_t const imdct_s[6][6] = { ++mad_coeff_t const imdct_s[6][6] = { + # include "imdct_s.dat" + }; + +@@ -398,7 +403,7 @@ mad_fixed_t const imdct_s[6][6] = { + * window_l[i] = sin((PI / 36) * (i + 1/2)) + */ + static +-mad_fixed_t const window_l[36] = { ++mad_coeff_t const window_l[36] = { + MAD_F(0x00b2aa3e) /* 0.043619387 */, MAD_F(0x0216a2a2) /* 0.130526192 */, + MAD_F(0x03768962) /* 0.216439614 */, MAD_F(0x04cfb0e2) /* 0.300705800 */, + MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x07635284) /* 0.461748613 */, +@@ -429,7 +434,7 @@ mad_fixed_t const window_l[36] = { + * window_s[i] = sin((PI / 12) * (i + 1/2)) + */ + static +-mad_fixed_t const window_s[12] = { ++mad_coeff_t const window_s[12] = { + MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x061f78aa) /* 0.382683432 */, + MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0cb19346) /* 0.793353340 */, + MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0fdcf549) /* 0.991444861 */, +@@ -438,6 +443,11 @@ mad_fixed_t const window_s[12] = { + MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x0216a2a2) /* 0.130526192 */, + }; + ++#ifdef FPM_AVR32 ++# undef MAD_F ++# define MAD_F(x) ((mad_fixed_t) (x##L)) ++#endif ++ + /* + * coefficients for intensity stereo processing + * derived from section 2.4.3.4.9.3 of ISO/IEC 11172-3 +@@ -879,6 +889,42 @@ void III_exponents(struct channel const *channel, + * NAME: III_requantize() + * DESCRIPTION: requantize one (positive) value + */ ++ ++#if 0 ++/*static*/ ++mad_fixed_t III_requantize(unsigned int value, signed int exp) ++{ ++ register mad_fixed_t tmp2, tmp3; ++ long long tmp_d; ++ ++ asm ("asr\t%0, %1, 2\n" ++ "ld.w\t%2, %4[%5 << 2]\n" ++ "sub\t%1, %1, %0 << 2\n" ++ "asr\t%3, %2, 7\n" ++ "andl\t%2, 0x7f, COH\n" ++ "add\t%0, %2\n" ++ "lsl\t%m0,%3,%0\n" ++ "neg\t%0\n" ++ "asr\t%3,%3,%0\n" ++ "add\t%2, %6, %1 << 2\n" ++ "ld.w\t%2, %2[12]\n" ++ "cp.w\t%0, 0\n" ++ "movlt\t%3, %m0\n" ++ "muls.d\t%0, %3, %2\n" ++ "cp.w\t%1, 0\n" ++ "breq\t0f\n" ++ "lsr\t%0, %0, 28\n" ++ "or\t%3, %0, %m0 << 4\n" ++ "0:\n" ++ : "=&r"(tmp_d), "+r"(exp), "=&r"(tmp2), "=&r"(tmp3) ++ : "r"(&rq_table), "r"(value), "r"(root_table)); ++ ++ ++ return tmp3; ++} ++ ++#else ++ + static + mad_fixed_t III_requantize(unsigned int value, signed int exp) + { +@@ -918,6 +964,7 @@ mad_fixed_t III_requantize(unsigned int value, signed int exp) + + return frac ? mad_f_mul(requantized, root_table[3 + frac]) : requantized; + } ++#endif + + /* we must take care that sz >= bits and sz < sizeof(long) lest bits == 0 */ + # define MASK(cache, sz, bits) \ +@@ -2054,27 +2101,42 @@ void imdct36(mad_fixed_t const X[18], mad_fixed_t x[36]) + } + # endif + ++ ++#ifdef FPM_AVR32 ++# undef mad_f_mul ++# define mad_f_mul(x, y) __builtin_mulsatrndwh_w(x, y) ++#endif ++ + /* + * NAME: III_imdct_l() + * DESCRIPTION: perform IMDCT and windowing for long blocks + */ + static +-void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36], ++void III_imdct_l(mad_fixed_t /*const*/ X[18], mad_fixed_t z[36], + unsigned int block_type) + { + unsigned int i; ++ mad_fixed_t *z_ptr; ++ mad_coeff_t *w_ptr; + + /* IMDCT */ + ++#ifdef FPM_AVR32 ++ imdct36_avr32(X, z); ++#else + imdct36(X, z); ++#endif + + /* windowing */ + ++ z_ptr = &z[0]; ++ w_ptr = &window_l[0]; ++ + switch (block_type) { + case 0: /* normal window */ + # if defined(ASO_INTERLEAVE1) + { +- register mad_fixed_t tmp1, tmp2; ++ register mad_coeff_t tmp1, tmp2; + + tmp1 = window_l[0]; + tmp2 = window_l[1]; +@@ -2091,15 +2153,16 @@ void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36], + } + # elif defined(ASO_INTERLEAVE2) + { +- register mad_fixed_t tmp1, tmp2; ++ register mad_fixed_t tmp1; ++ register mad_coeff_t tmp2; + +- tmp1 = z[0]; +- tmp2 = window_l[0]; ++ tmp1 = *z_ptr; ++ tmp2 = *w_ptr++; + + for (i = 0; i < 35; ++i) { +- z[i] = mad_f_mul(tmp1, tmp2); +- tmp1 = z[i + 1]; +- tmp2 = window_l[i + 1]; ++ *z_ptr++ = mad_f_mul(tmp1, tmp2); ++ tmp1 = *z_ptr; ++ tmp2 = *w_ptr++; + } + + z[35] = mad_f_mul(tmp1, tmp2); +@@ -2118,23 +2181,28 @@ void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36], + + case 1: /* start block */ + for (i = 0; i < 18; i += 3) { +- z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]); +- z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]); +- z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]); ++ *(z_ptr++) = mad_f_mul(*z_ptr, *w_ptr++); ++ *(z_ptr++) = mad_f_mul(*z_ptr, *w_ptr++); ++ *(z_ptr++) = mad_f_mul(*z_ptr, *w_ptr++); + } ++ z_ptr += 6; ++ w_ptr = &window_s[6]; + /* (i = 18; i < 24; ++i) z[i] unchanged */ +- for (i = 24; i < 30; ++i) z[i] = mad_f_mul(z[i], window_s[i - 18]); +- for (i = 30; i < 36; ++i) z[i] = 0; ++ for (i = 24; i < 30; ++i) *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++); ++ for (i = 30; i < 36; ++i) *z_ptr++ = 0; + break; + + case 3: /* stop block */ +- for (i = 0; i < 6; ++i) z[i] = 0; +- for (i = 6; i < 12; ++i) z[i] = mad_f_mul(z[i], window_s[i - 6]); ++ w_ptr = &window_s[0]; ++ for (i = 0; i < 6; ++i) *z_ptr++ = 0; ++ for (i = 6; i < 12; ++i) *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++); + /* (i = 12; i < 18; ++i) z[i] unchanged */ ++ w_ptr = &window_l[18]; ++ z_ptr += 6; + for (i = 18; i < 36; i += 3) { +- z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]); +- z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]); +- z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]); ++ *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++ ); ++ *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++); ++ *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++); + } + break; + } +@@ -2146,10 +2214,10 @@ void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36], + * DESCRIPTION: perform IMDCT and windowing for short blocks + */ + static +-void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36]) ++void III_imdct_s(mad_fixed_t /*const*/ X[18], mad_fixed_t z[36]) + { + mad_fixed_t y[36], *yptr; +- mad_fixed_t const *wptr; ++ mad_coeff_t const *wptr; + int w, i; + register mad_fixed64hi_t hi; + register mad_fixed64lo_t lo; +@@ -2159,11 +2227,56 @@ void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36]) + yptr = &y[0]; + + for (w = 0; w < 3; ++w) { +- register mad_fixed_t const (*s)[6]; ++ register mad_coeff_t const (*s)[6]; + + s = imdct_s; + + for (i = 0; i < 3; ++i) { ++#ifdef FPM_AVR32 ++ register long long int acc, tmp1, tmp2, tmp3, tmp4; ++ asm volatile ("ld.d\t%0, %5++\n" ++ "ld.d\t%1, %6[0]\n" ++ "ld.d\t%2, %6[2*4]\n" ++ "ld.d\t%3, %6[4*4]\n" ++ "mulwh.d\t%4, %m1, %m0:t\n" ++ "macwh.d\t%4, %1, %m0:b\n" ++ "ld.w\t%m0, %5++\n" ++ "macwh.d\t%4, %m2, %0:t\n" ++ "macwh.d\t%4, %2, %0:b\n" ++ "macwh.d\t%4, %m3, %m0:t\n" ++ "macwh.d\t%4, %3, %m0:b\n" ++ "ld.d\t%0, %5++\n" ++ "rol\t%4\n" ++ "rol\t%m4\n" ++ : "=&r"(tmp1), "=&r"(tmp2), "=&r"(tmp3), "=&r"(tmp4), ++ "=&r"(acc), "+r"(s) ++ : "r"(X)); ++ ++ asm volatile ("st.w\t%1[0], %m0\n" ++ "neg\t%m0\n" ++ "st.w\t%2[5*4], %m0\n" ++ : "+r"(acc) ++ : "r"(&yptr[i]), "r"(&yptr[-i])); ++ ++ asm volatile ("mulwh.d\t%4, %m1, %m0:t\n" ++ "macwh.d\t%4, %1, %m0:b\n" ++ "ld.w\t%m0, %5++\n" ++ "macwh.d\t%4, %m2, %0:t\n" ++ "macwh.d\t%4, %2, %0:b\n" ++ "macwh.d\t%4, %m3, %m0:t\n" ++ "macwh.d\t%4, %3, %m0:b\n" ++ "rol\t%4\n" ++ "rol\t%m4\n" ++ : "+r"(tmp1), "+r"(tmp2), "+r"(tmp3), "+r"(tmp4), ++ "=&r"(acc), "+r"(s) ++ : "r"(X)); ++ ++ asm volatile ( "st.w\t%1[6*4], %m0\n" ++ "st.w\t%2[11*4], %m0\n" ++ :: "r"(acc), "r"(&yptr[i]), "r"(&yptr[-i])); ++ ++ ++#else + MAD_F_ML0(hi, lo, X[0], (*s)[0]); + MAD_F_MLA(hi, lo, X[1], (*s)[1]); + MAD_F_MLA(hi, lo, X[2], (*s)[2]); +@@ -2187,6 +2300,7 @@ void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36]) + yptr[11 - i] = yptr[i + 6]; + + ++s; ++#endif + } + + yptr += 12; +@@ -2198,6 +2312,196 @@ void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36]) + yptr = &y[0]; + wptr = &window_s[0]; + ++#ifdef FPM_AVR32 ++ /* z[0] = 0; ++ z[1] = 0; ++ z[2] = 0; ++ z[3] = 0; ++ z[4] = 0; ++ z[5] = 0; ++ z[30] = 0; ++ z[31] = 0; ++ z[32] = 0; ++ z[33] = 0; ++ z[34] = 0; ++ z[35] = 0; ++ */ ++ { ++ register long long int tmp, tmp2, tmp3, w0123, w4567, w891011; ++ asm volatile ("mov\t%m0, 0\n" ++ "mov\t%0, %m0\n" ++ "st.d\t%1[0], %0\n" ++ "st.d\t%1[2*4], %0\n" ++ "st.d\t%1[4*4], %0\n" ++ "st.d\t%1[30*4], %0\n" ++ "st.d\t%1[32*4], %0\n" ++ "st.d\t%1[34*4], %0\n" ++ : "=&r"(tmp) : "r"(z)); ++ ++ ++ ++ /* ++ z[6] = mad_f_mul(yptr [0], wptr[0]); ++ z[7] = mad_f_mul(yptr [1], wptr[1]); ++ z[8] = mad_f_mul(yptr [2], wptr[2]); ++ z[9] = mad_f_mul(yptr [3], wptr[3]); ++ z[10] = mad_f_mul(yptr[4], wptr[4]); ++ z[11] = mad_f_mul(yptr[5], wptr[5]); ++ z[24] = mad_f_mul(yptr [30], wptr[6]); ++ z[25] = mad_f_mul(yptr [31], wptr[7]); ++ z[26] = mad_f_mul(yptr [32], wptr[8]); ++ z[27] = mad_f_mul(yptr [33], wptr[9]); ++ z[28] = mad_f_mul(yptr[34], wptr[10]); ++ z[29] = mad_f_mul(yptr[35], wptr[11]); ++ */ ++ ++ ++ asm volatile ("ld.d\t%0, %5[0*4]\n" ++ "ld.d\t%3, %6[0*4]\n" ++ "ld.d\t%1, %5[2*4]\n" ++ "ld.d\t%2, %5[4*4]\n" ++ "mulsatrndwh.w\t%m3, %m3, %m0:t\n" ++ "mulsatrndwh.w\t%3, %3, %m0:b\n" ++ "ld.d\t%4, %6[2*4]\n" ++ "st.d\t%7[6*4], %3\n" ++ ++ "mulsatrndwh.w\t%m4, %m4, %0:t\n" ++ "mulsatrndwh.w\t%4, %4, %0:b\n" ++ "ld.d\t%3, %6[4*4]\n" ++ "st.d\t%7[8*4], %4\n" ++ ++ "mulsatrndwh.w\t%m3, %m3, %m1:t\n" ++ "mulsatrndwh.w\t%3, %3, %m1:b\n" ++ "ld.d\t%4, %6[30*4]\n" ++ "st.d\t%7[10*4], %3\n" ++ ++ "mulsatrndwh.w\t%m4, %m4, %1:t\n" ++ "mulsatrndwh.w\t%4, %4, %1:b\n" ++ "ld.d\t%3, %6[32*4]\n" ++ "st.d\t%7[24*4], %4\n" ++ ++ "mulsatrndwh.w\t%m3, %m3, %m2:t\n" ++ "mulsatrndwh.w\t%3, %3, %m2:b\n" ++ "ld.d\t%4, %6[34*4]\n" ++ "st.d\t%7[26*4], %3\n" ++ ++ "mulsatrndwh.w\t%m4, %m4, %2:t\n" ++ "mulsatrndwh.w\t%4, %4, %2:b\n" ++ "st.d\t%7[28*4], %4\n" ++ ++ : "=&r"(w0123), "=&r"(w4567), "=&r"(w891011), "=&r"(tmp), "=&r"(tmp2) ++ : "r"(wptr), "r"(yptr), "r"(z)); ++ /* ++ MAD_F_ML0(hi, lo, yptr[6], wptr[6]); ++ MAD_F_MLA(hi, lo, yptr[12], wptr[0]); ++ z[12] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[7], wptr[7]); ++ MAD_F_MLA(hi, lo, yptr[13], wptr[1]); ++ z[13] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[8], wptr[8]); ++ MAD_F_MLA(hi, lo, yptr[14], wptr[2]); ++ z[14] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[9], wptr[9]); ++ MAD_F_MLA(hi, lo, yptr[15], wptr[3]); ++ z[15] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[10], wptr[10]); ++ MAD_F_MLA(hi, lo, yptr[16], wptr[4]); ++ z[16] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[11], wptr[11]); ++ MAD_F_MLA(hi, lo, yptr[17], wptr[5]); ++ z[17] = MAD_F_MLZ(hi, lo); ++ ++ MAD_F_ML0(hi, lo, yptr[18], wptr[6]); ++ MAD_F_MLA(hi, lo, yptr[24], wptr[0]); ++ z[18] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[19], wptr[7]); ++ MAD_F_MLA(hi, lo, yptr[25], wptr[1]); ++ z[19] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[20], wptr[8]); ++ MAD_F_MLA(hi, lo, yptr[26], wptr[2]); ++ z[20] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[21], wptr[9]); ++ MAD_F_MLA(hi, lo, yptr[27], wptr[3]); ++ z[21] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[22], wptr[10]); ++ MAD_F_MLA(hi, lo, yptr[28], wptr[4]); ++ z[22] = MAD_F_MLZ(hi, lo); ++ MAD_F_ML0(hi, lo, yptr[23], wptr[11]); ++ MAD_F_MLA(hi, lo, yptr[29], wptr[5]); ++ z[23] = MAD_F_MLZ(hi, lo);*/ ++ ++ ++ asm volatile ("ld.d\t%0, %3[6*4]\n" ++ "ld.d\t%1, %3[12*4]\n" ++ "mulwh.d\t%2, %m0, %5:t\n" ++ "macwh.d\t%2, %m1, %m4:t\n" ++ "mulwh.d\t%0, %0, %5:b\n" ++ "macwh.d\t%0, %1, %m4:b\n" ++ "lsl\t%m2, 1\n" ++ "lsl\t%2, %m0, 1\n" ++ "st.d\t%6[12*4], %2\n" ++ ++ "ld.d\t%0, %3[18*4]\n" ++ "ld.d\t%1, %3[24*4]\n" ++ "mulwh.d\t%2, %m0, %5:t\n" ++ "macwh.d\t%2, %m1, %m4:t\n" ++ "mulwh.d\t%0, %0, %5:b\n" ++ "macwh.d\t%0, %1, %m4:b\n" ++ "lsl\t%m2, 1\n" ++ "lsl\t%2, %m0, 1\n" ++ "st.d\t%6[18*4], %2\n" ++ ++ : "=&r"(tmp), "=&r"(tmp2), "=&r"(tmp3) ++ : "r"(yptr), "r"(w0123), "r"(w4567), "r"(z)); ++ ++ asm volatile ("ld.d\t%0, %3[8*4]\n" ++ "ld.d\t%1, %3[14*4]\n" ++ "mulwh.d\t%2, %m0, %m5:t\n" ++ "macwh.d\t%2, %m1, %4:t\n" ++ "mulwh.d\t%0, %0, %m5:b\n" ++ "macwh.d\t%0, %1, %4:b\n" ++ "lsl\t%m2, 1\n" ++ "lsl\t%2, %m0, 1\n" ++ "st.d\t%6[14*4], %2\n" ++ ++ "ld.d\t%0, %3[20*4]\n" ++ "ld.d\t%1, %3[26*4]\n" ++ "mulwh.d\t%2, %m0, %m5:t\n" ++ "macwh.d\t%2, %m1, %4:t\n" ++ "mulwh.d\t%0, %0, %m5:b\n" ++ "macwh.d\t%0, %1, %4:b\n" ++ "lsl\t%m2, 1\n" ++ "lsl\t%2, %m0, 1\n" ++ "st.d\t%6[20*4], %2\n" ++ ++ : "=&r"(tmp), "=&r"(tmp2), "=&r"(tmp3) ++ : "r"(yptr), "r"(w0123), "r"(w891011), "r"(z)); ++ ++ asm volatile ("ld.d\t%0, %3[10*4]\n" ++ "ld.d\t%1, %3[16*4]\n" ++ "mulwh.d\t%2, %m0, %5:t\n" ++ "macwh.d\t%2, %m1, %m4:t\n" ++ "mulwh.d\t%0, %0, %5:b\n" ++ "macwh.d\t%0, %1, %m4:b\n" ++ "lsl\t%m2, 1\n" ++ "lsl\t%2, %m0, 1\n" ++ "st.d\t%6[16*4], %2\n" ++ ++ "ld.d\t%0, %3[22*4]\n" ++ "ld.d\t%1, %3[28*4]\n" ++ "mulwh.d\t%2, %m0, %5:t\n" ++ "macwh.d\t%2, %m1, %m4:t\n" ++ "mulwh.d\t%0, %0, %5:b\n" ++ "macwh.d\t%0, %1, %m4:b\n" ++ "lsl\t%m2, 1\n" ++ "lsl\t%2, %m0, 1\n" ++ "st.d\t%6[22*4], %2\n" ++ ++ : "=&r"(tmp), "=&r"(tmp2), "=&r"(tmp3) ++ : "r"(yptr), "r"(w4567), "r"(w891011), "r"(z)); ++ ++ } ++#else + for (i = 0; i < 6; ++i) { + z[i + 0] = 0; + z[i + 6] = mad_f_mul(yptr[ 0 + 0], wptr[0]); +@@ -2218,8 +2522,15 @@ void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36]) + ++yptr; + ++wptr; + } ++#endif + } + ++#ifdef FPM_AVR32 ++# undef mad_f_mul ++# define mad_f_mul(x, y) ((((x) + (1L << 11)) >> 12) * \ ++ (((y) + (1L << 15)) >> 16)) ++#endif ++ + /* + * NAME: III_overlap() + * DESCRIPTION: perform overlap-add of windowed IMDCT outputs +diff --git a/synth.c b/synth.c +index 1d28d43..f42d49b 100644 +--- a/synth.c ++++ b/synth.c +@@ -29,20 +29,6 @@ + # include "frame.h" + # include "synth.h" + +-/* +- * NAME: synth->init() +- * DESCRIPTION: initialize synth struct +- */ +-void mad_synth_init(struct mad_synth *synth) +-{ +- mad_synth_mute(synth); +- +- synth->phase = 0; +- +- synth->pcm.samplerate = 0; +- synth->pcm.channels = 0; +- synth->pcm.length = 0; +-} + + /* + * NAME: synth->mute() +@@ -88,6 +74,10 @@ void mad_synth_mute(struct mad_synth *synth) + + /* FPM_DEFAULT without OPT_SSO will actually lose accuracy and performance */ + ++# if defined(FPM_AVR32) ++# define OPT_SSO ++# endif ++ + # if defined(FPM_DEFAULT) && !defined(OPT_SSO) + # define OPT_SSO + # endif +@@ -522,9 +512,15 @@ void dct32(mad_fixed_t const in[32], unsigned int slot, + # endif + # define ML0(hi, lo, x, y) ((lo) = (x) * (y)) + # define MLA(hi, lo, x, y) ((lo) += (x) * (y)) +-# define MLN(hi, lo) ((lo) = -(lo)) +-# define MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo)) +-# define SHIFT(x) ((x) >> 2) ++# if defined(FPM_AVR32) ++# define MLN(hi, lo) MAD_F_MLN((hi), (lo)) ++# define MLZ(hi, lo) (hi) ++# define SHIFT(x) ((x) << 2) ++# else ++# define MLN(hi, lo) ((lo) = -(lo)) ++# define MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo)) ++# define SHIFT(x) ((x) >> 2) ++# endif + # define PRESHIFT(x) ((MAD_F(x) + (1L << 13)) >> 14) + # else + # define ML0(hi, lo, x, y) MAD_F_ML0((hi), (lo), (x), (y)) +@@ -541,11 +537,54 @@ void dct32(mad_fixed_t const in[32], unsigned int slot, + # endif + # endif + ++/* ++ * NAME: synth->init() ++ * DESCRIPTION: initialize synth struct ++ */ ++ ++#ifdef FPM_AVR32 ++short Dmod[17][33]; ++#endif ++ + static ++#ifdef FPM_AVR32 ++short const D[17][32] = { ++#else + mad_fixed_t const D[17][32] = { ++#endif + # include "D.dat" + }; + ++void mad_synth_init(struct mad_synth *synth) ++{ ++ ++ mad_synth_mute(synth); ++ ++ synth->phase = 0; ++ ++ synth->pcm.samplerate = 0; ++ synth->pcm.channels = 0; ++ synth->pcm.length = 0; ++ ++#ifdef FPM_AVR32 ++ { ++ int i, j; ++ for ( i = 0; i < 17; i++ ){ ++ for ( j = 0; j < 32; j++ ){ ++ if ( j & 1 ){ ++ Dmod[i][17 + (j >> 1)]= D[i][j]; ++ } else { ++ Dmod[i][(j >> 1)]= D[i][j]; ++ } ++ } ++ ++ Dmod[i][16]= Dmod[i][16+8]; ++ } ++ } ++#endif ++ ++} ++ + # if defined(ASO_SYNTH) + void synth_full(struct mad_synth *, struct mad_frame const *, + unsigned int, unsigned int); +@@ -560,9 +599,13 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame, + { + unsigned int phase, ch, s, sb, pe, po; + mad_fixed_t *pcm1, *pcm2, (*filter)[2][2][16][8]; +- mad_fixed_t const (*sbsample)[36][32]; ++ mad_fixed_t /*const*/ (*sbsample)[36][32]; + register mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8]; ++#ifdef FPM_AVR32 ++ register short const (*Dptr)[32], *ptr; ++#else + register mad_fixed_t const (*Dptr)[32], *ptr; ++#endif + register mad_fixed64hi_t hi; + register mad_fixed64lo_t lo; + +@@ -573,6 +616,20 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame, + pcm1 = synth->pcm.samples[ch]; + + for (s = 0; s < ns; ++s) { ++# ifdef FPM_AVR32 ++/* ++ int i; ++ for ( i = 0; i < 32; i++ ){ ++ (*sbsample)[s][i] = ((*sbsample)[s][i] + (1 << 13)) & 0xFFFFC000; ++ } ++*/ ++ dct32_avr32((*sbsample)[s], phase >> 1, ++ (*filter)[0][phase & 1], (*filter)[1][phase & 1]); ++ /* printf("dct32: %d\n", GET_CYCLES);*/ ++ pcm1 = synth_avr32(phase, (mad_fixed_t *)filter, \ ++ pcm1, (short *)&Dmod[0]); ++ /* printf("synth_window: %d\n", GET_CYCLES);*/ ++# else + dct32((*sbsample)[s], phase >> 1, + (*filter)[0][phase & 1], (*filter)[1][phase & 1]); + +@@ -679,6 +736,7 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame, + MLA(hi, lo, (*fo)[7], ptr[ 2]); + + *pcm1 = SHIFT(-MLZ(hi, lo)); ++# endif + pcm1 += 16; + + phase = (phase + 1) % 16; +diff --git a/synth_avr32.S b/synth_avr32.S +new file mode 100644 +index 0000000..701077b +--- /dev/null ++++ b/synth_avr32.S +@@ -0,0 +1,394 @@ ++/* ++ Optimized function for speeding up synthesis filter ++ in MPEG Audio Decoding. ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Ronny Pedersen and Lars Even Almĺs, Atmel Norway ++ ++ 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. */ ++ ++ ++/* ***************** ++ Defining macros ++ ***************** */ ++ ++ .macro window_1 f, ptr, acc, ptr_offset, mul, tmp1_lo, tmp1_hi, tmp2_lo, tmp2_hi, tmp3_lo, tmp3_hi ++ ld.d \tmp1_lo, \f[0*4] /* tmp1 = { f[0], f[1] } */ ++ ld.w \tmp2_lo, \ptr[0*2+\ptr_offset*2] /* tmp2_lo = { ptr[0], ptr[1] }*/ ++ ld.d \tmp3_lo, \f[6*4] /* tmp3 = { f[6], f[7] } */ ++ ld.w \tmp2_hi, \ptr[6*2+\ptr_offset*2] /* tmp2_hi = { ptr[6], ptr[7] }*/ ++ .if \mul ++ mulwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[0] * ptr[0]*/ ++ .else ++ macwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[0] * ptr[0]*/ ++ .endif ++ macwh.d \acc, \tmp3_lo, \tmp2_lo:b /* f[7] * ptr[1]*/ ++ ld.w \tmp2_lo, \ptr[2*2+\ptr_offset*2] /* tmp2_lo = { ptr[2], ptr[3] }*/ ++ macwh.d \acc, \tmp1_lo, \tmp2_hi:b /* f[1] * ptr[7]*/ ++ ld.d \tmp1_lo, \f[2*4] /* tmp1 = { f[2], f[3] } */ ++ ++ macwh.d \acc, \tmp3_hi, \tmp2_lo:t /* f[6] * ptr[2]*/ ++ macwh.d \acc, \tmp1_hi, \tmp2_hi:t /* f[2] * ptr[6]*/ ++ ld.d \tmp3_lo, \f[4*4] /* tmp3 = { f[4], f[5] } */ ++ ld.w \tmp2_hi, \ptr[4*2+\ptr_offset*2] /* tmp2_hi = { ptr[4], ptr[5] }*/ ++ macwh.d \acc, \tmp3_lo, \tmp2_lo:b /* f[5] * ptr[3]*/ ++ ++ macwh.d \acc, \tmp1_lo, \tmp2_hi:b /* f[3] * ptr[5]*/ ++ macwh.d \acc, \tmp3_hi, \tmp2_hi:t /* f[4] * ptr[4]*/ ++ .endm ++ ++ .macro window_2 f, ptr, acc, ptr_offset, mul, tmp1_lo, tmp1_hi, tmp2_lo, tmp2_hi, tmp3_lo, tmp3_hi ++ ld.d \tmp1_lo, \f[0*4] /* tmp1 = { f[0], f[1] } */ ++ ld.w \tmp2_lo, \ptr[7*2+\ptr_offset*2] /* tmp2_lo = { ptr[7], ptr[8] }*/ ++ ld.d \tmp3_lo, \f[2*4] /* tmp3 = { f[2], f[3] } */ ++ ld.w \tmp2_hi, \ptr[9*2+\ptr_offset*2] /* tmp2_hi = { ptr[9], ptr[10] }*/ ++ .if \mul ++ mulwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[0] * ptr[7]*/ ++ .else ++ macwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[0] * ptr[7]*/ ++ .endif ++ macwh.d \acc, \tmp1_lo, \tmp2_lo:b /* f[1] * ptr[8]*/ ++ ++ ld.d \tmp1_lo, \f[4*4] /* tmp1 = { f[4], f[5] } */ ++ ld.w \tmp2_lo, \ptr[11*2+\ptr_offset*2] /* tmp2_lo = { ptr[11], ptr[12] }*/ ++ ++ macwh.d \acc, \tmp3_hi, \tmp2_hi:t /* f[2] * ptr[9]*/ ++ macwh.d \acc, \tmp3_lo, \tmp2_hi:b /* f[3] * ptr[10]*/ ++ ++ ld.d \tmp3_lo, \f[6*4] /* tmp3 = { f[6], f[7] } */ ++ ld.w \tmp2_hi, \ptr[13*2+\ptr_offset*2] /* tmp2_hi = { ptr[13], ptr[14] }*/ ++ ++ macwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[4] * ptr[11]*/ ++ macwh.d \acc, \tmp1_lo, \tmp2_lo:b /* f[5] * ptr[12]*/ ++ macwh.d \acc, \tmp3_hi, \tmp2_hi:t /* f[6] * ptr[13]*/ ++ macwh.d \acc, \tmp3_lo, \tmp2_hi:b /* f[7] * ptr[14]*/ ++ .endm ++ ++ .macro scale res, d_lo, d_hi ++ lsl \d_hi, 2 ++ .endm ++ ++/* ********************** ++ Starting main function ++ ********************** */ ++ ++/* Function synth_avr32 is called from synth.c with arguments: ++ phase, filter, *pcm1, &D[0] */ ++ ++ .global synth_avr32 ++synth_avr32: ++ pushm r0-r7, lr ++ sub sp, 8 ++ ++ /* R12 = phase, R11 = filter, R10 = pcm1, r9 = D*/ ++ bld r12, 0 ++ brcc synth_even ++ ++ /* Filter for odd phases */ ++ ++ /* fe = &(*filter)[0][1][0]; ++ fx = &(*filter)[0][0][0]; ++ fo = &(*filter)[1][0][0]; */ ++ sub lr /*fe*/, r11, -16*8*4 ++ sub r8 /*fo*/, r11, -16*8*4*2 ++ ++ /* pe = phase >> 1; */ ++ lsr r12, 1 ++ stdsp sp[4], r12 ++ /* ptr = (short const *)Dmod + pe; */ ++ add r12, r9, r12 << 1 ++ ++ /* ML0(hi, lo, (*fx)[0], ptr[0 + 17]); ++ MLA(hi, lo, (*fx)[1], ptr[7 + 17]); ++ MLA(hi, lo, (*fx)[2], ptr[6 + 17]); ++ MLA(hi, lo, (*fx)[3], ptr[5 + 17]); ++ MLA(hi, lo, (*fx)[4], ptr[4 + 17]); ++ MLA(hi, lo, (*fx)[5], ptr[3 + 17]); ++ MLA(hi, lo, (*fx)[6], ptr[2 + 17]); ++ MLA(hi, lo, (*fx)[7], ptr[1 + 17]); */ ++ window_1 r11/*fx*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7 ++ ++ /* MLN(hi, lo); */ ++ neg r0 ++ acr r1 ++ neg r1 ++ ++ /* MLA(hi, lo, (*fe)[0], ptr[0]); ++ MLA(hi, lo, (*fe)[1], ptr[7]); ++ MLA(hi, lo, (*fe)[2], ptr[6]); ++ MLA(hi, lo, (*fe)[3], ptr[5]); ++ MLA(hi, lo, (*fe)[4], ptr[4]); ++ MLA(hi, lo, (*fe)[5], ptr[3]); ++ MLA(hi, lo, (*fe)[6], ptr[2]); ++ MLA(hi, lo, (*fe)[7], ptr[1]); */ ++ window_1 lr/*fe*/,r12/*ptr*/,r0/*acc*/,0/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7 ++ ++ /* *pcm1++ = SHIFT(MLZ(hi, lo)); ++ ++ pcm2 = pcm1 + 31; */ ++ scale r1, r0, r1 ++ st.w r10/*pcm_1*/++, r1 ++ sub r11/*pcm2*/, r10, -4*31 ++ ++ /* for (sb = 1; sb < 16; ++sb) { */ ++ mov r2, 15 ++ stdsp sp[0], r2 ++odd_loop: ++ /* ++fe; ++ ptr += 33; */ ++ sub lr /*fe*/, -8*4 ++ sub r12, -33*2 ++ ++ /* ML0(hi, lo, (*fo)[0], ptr[0 + 17]); ++ MLA(hi, lo, (*fo)[1], ptr[7 + 17]); ++ MLA(hi, lo, (*fo)[2], ptr[6 + 17]); ++ MLA(hi, lo, (*fo)[3], ptr[5 + 17]); ++ MLA(hi, lo, (*fo)[4], ptr[4 + 17]); ++ MLA(hi, lo, (*fo)[5], ptr[3 + 17]); ++ MLA(hi, lo, (*fo)[6], ptr[2 + 17]); ++ MLA(hi, lo, (*fo)[7], ptr[1 + 17]); */ ++ window_1 r8/*fo*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7 ++ /* MLN(hi, lo); */ ++ ++ neg r0 ++ acr r1 ++ neg r1 ++ ++ /* MLA(hi, lo, (*fe)[7], ptr[1]); ++ MLA(hi, lo, (*fe)[6], ptr[2]); ++ MLA(hi, lo, (*fe)[5], ptr[3]); ++ MLA(hi, lo, (*fe)[4], ptr[4]); ++ MLA(hi, lo, (*fe)[3], ptr[5]); ++ MLA(hi, lo, (*fe)[2], ptr[6]); ++ MLA(hi, lo, (*fe)[1], ptr[7]); ++ MLA(hi, lo, (*fe)[0], ptr[0]); */ ++ window_1 lr/*fe*/,r12/*ptr*/,r0/*acc*/,0/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7 ++ ++ /* ptr -= 2*pe; */ ++ lddsp r2, sp[4] ++ ++ /* *pcm1++ = SHIFT(MLZ(hi, lo)); */ ++ ++ scale r1, r0, r1 ++ sub r12/*ptr*/, r12, r2/*pe*/<< 2 ++ st.w r10/*pcm_1*/++, r1 ++ ++ ++ /* ML0(hi, lo, (*fe)[0], ptr[7 + 17]); ++ MLA(hi, lo, (*fe)[1], ptr[8 + 17]); ++ MLA(hi, lo, (*fe)[2], ptr[9 + 17]); ++ MLA(hi, lo, (*fe)[3], ptr[10 + 17]); ++ MLA(hi, lo, (*fe)[4], ptr[11 + 17]); ++ MLA(hi, lo, (*fe)[5], ptr[12 + 17]); ++ MLA(hi, lo, (*fe)[6], ptr[13 + 17]); ++ MLA(hi, lo, (*fe)[7], ptr[14 + 17]); */ ++ window_2 lr/*fe*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7 ++ /* MLA(hi, lo, (*fo)[7], ptr[14]); ++ MLA(hi, lo, (*fo)[6], ptr[13]); ++ MLA(hi, lo, (*fo)[5], ptr[12]); ++ MLA(hi, lo, (*fo)[4], ptr[11]); ++ MLA(hi, lo, (*fo)[3], ptr[10]); ++ MLA(hi, lo, (*fo)[2], ptr[9]); ++ MLA(hi, lo, (*fo)[1], ptr[8]); ++ MLA(hi, lo, (*fo)[0], ptr[7]); */ ++ window_2 r8/*fo*/,r12/*ptr*/,r0/*acc*/,0/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7 ++ ++ ++ /* *pcm2-- = SHIFT(MLZ(hi, lo)); */ ++ lddsp r3, sp[4] ++ lddsp r2, sp[0] ++ scale r1, r0, r1 ++ st.w --r11/*pcm_2*/, r1 ++ ++ /* ptr += 2*pe; */ ++ add r12/*ptr*/, r12, r3/*pe*/<< 2 ++ ++ /* ++fo; ++ } */ ++ sub r8/*fo*/, -8*4 ++ ++ sub r2, 1 ++ stdsp sp[0], r2 ++ brne odd_loop ++ ++ /* ptr += 33; */ ++ sub r12/*ptr*/, -33*2 ++ ++ /* ML0(hi, lo, (*fo)[0], ptr[0 + 17]); ++ MLA(hi, lo, (*fo)[1], ptr[7 + 17]); ++ MLA(hi, lo, (*fo)[2], ptr[6 + 17]); ++ MLA(hi, lo, (*fo)[3], ptr[5 + 17]); ++ MLA(hi, lo, (*fo)[4], ptr[4 + 17]); ++ MLA(hi, lo, (*fo)[5], ptr[3 + 17]); ++ MLA(hi, lo, (*fo)[6], ptr[2 + 17]); ++ MLA(hi, lo, (*fo)[7], ptr[1 + 17]); */ ++ window_1 r8/*fo*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7 ++ ++ rjmp synth_end ++synth_even: ++ /* Filter for even phases */ ++ ++ /* fe = &(*filter)[0][0][0]; ++ fx = &(*filter)[0][1][0]; ++ fo = &(*filter)[1][1][0]; */ ++ sub lr /*fx*/, r11, -16*8*4 ++ sub r8 /*fo*/, r11, -(16*8*4*2 + 16*8*4) ++ ++ /* po = ((phase - 1) & 0xF) >> 1; */ ++ sub r12, 1 ++ andl r12, 0xe, COH ++ stdsp sp[4], r12 ++ /* ptr = (short const *)Dmod + po; */ ++ add r12, r9, r12 ++ ++ /* ML0(hi, lo, (*fx)[0], ptr[0 + 17]); ++ MLA(hi, lo, (*fx)[1], ptr[7 + 17]); ++ MLA(hi, lo, (*fx)[2], ptr[6 + 17]); ++ MLA(hi, lo, (*fx)[3], ptr[5 + 17]); ++ MLA(hi, lo, (*fx)[4], ptr[4 + 17]); ++ MLA(hi, lo, (*fx)[5], ptr[3 + 17]); ++ MLA(hi, lo, (*fx)[6], ptr[2 + 17]); ++ MLA(hi, lo, (*fx)[7], ptr[1 + 17]); */ ++ window_1 lr/*fx*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7 ++ ++ /* MLN(hi, lo); */ ++ neg r0 ++ acr r1 ++ neg r1 ++ ++ /* MLA(hi, lo, (*fe)[0], ptr[0 + 1]); ++ MLA(hi, lo, (*fe)[1], ptr[7 + 1]); ++ MLA(hi, lo, (*fe)[2], ptr[6 + 1]); ++ MLA(hi, lo, (*fe)[3], ptr[5 + 1]); ++ MLA(hi, lo, (*fe)[4], ptr[4 + 1]); ++ MLA(hi, lo, (*fe)[5], ptr[3 + 1]); ++ MLA(hi, lo, (*fe)[6], ptr[2 + 1]); ++ MLA(hi, lo, (*fe)[7], ptr[1 + 1]); */ ++ window_1 r11/*fe*/,r12/*ptr*/,r0/*acc*/,1/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7 ++ ++ /* *pcm1++ = SHIFT(MLZ(hi, lo)); ++ ++ pcm2 = pcm1 + 31; */ ++ scale r1, r0, r1 ++ st.w r10/*pcm_1*/++, r1 ++ sub lr/*pcm2*/, r10, -4*31 ++ ++ /* for (sb = 1; sb < 16; ++sb) { */ ++ mov r2, 15 ++ stdsp sp[0], r2 ++even_loop: ++ /* ++fe; ++ ptr += 33; */ ++ sub r11 /*fe*/, -8*4 ++ sub r12, -33*2 ++ ++ /* ML0(hi, lo, (*fo)[0], ptr[0 + 17]); ++ MLA(hi, lo, (*fo)[1], ptr[7 + 17]); ++ MLA(hi, lo, (*fo)[2], ptr[6 + 17]); ++ MLA(hi, lo, (*fo)[3], ptr[5 + 17]); ++ MLA(hi, lo, (*fo)[4], ptr[4 + 17]); ++ MLA(hi, lo, (*fo)[5], ptr[3 + 17]); ++ MLA(hi, lo, (*fo)[6], ptr[2 + 17]); ++ MLA(hi, lo, (*fo)[7], ptr[1 + 17]); */ ++ window_1 r8/*fo*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7 ++ /* MLN(hi, lo); */ ++ neg r0 ++ acr r1 ++ neg r1 ++ ++ /* MLA(hi, lo, (*fe)[7], ptr[1 + 1]); ++ MLA(hi, lo, (*fe)[6], ptr[2 + 1]); ++ MLA(hi, lo, (*fe)[5], ptr[3 + 1]); ++ MLA(hi, lo, (*fe)[4], ptr[4 + 1]); ++ MLA(hi, lo, (*fe)[3], ptr[5 + 1]); ++ MLA(hi, lo, (*fe)[2], ptr[6 + 1]); ++ MLA(hi, lo, (*fe)[1], ptr[7 + 1]); ++ MLA(hi, lo, (*fe)[0], ptr[0 + 1]); */ ++ window_1 r11/*fe*/,r12/*ptr*/,r0/*acc*/,1/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7 ++ ++ /* *pcm1++ = SHIFT(MLZ(hi, lo)); */ ++ lddsp r2, sp[4] ++ scale r1, r0, r1 ++ /* ptr -= 2*po; */ ++ sub r12/*ptr*/, r12, r2/*po*/<< 1 ++ st.w r10/*pcm_1*/++, r1 ++ ++ ++ /* ML0(hi, lo, (*fe)[0], ptr[7 + 17 - 1]); ++ MLA(hi, lo, (*fe)[1], ptr[8 + 17 - 1]); ++ MLA(hi, lo, (*fe)[2], ptr[9 + 17 - 1]); ++ MLA(hi, lo, (*fe)[3], ptr[10 + 17 - 1]); ++ MLA(hi, lo, (*fe)[4], ptr[11 + 17 - 1]); ++ MLA(hi, lo, (*fe)[5], ptr[12 + 17 - 1]); ++ MLA(hi, lo, (*fe)[6], ptr[13 + 17 - 1]); ++ MLA(hi, lo, (*fe)[7], ptr[14 + 17 - 1]); */ ++ window_2 r11/*fe*/,r12/*ptr*/,r0/*acc*/,16/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7 ++ /* MLA(hi, lo, (*fo)[7], ptr[14]); ++ MLA(hi, lo, (*fo)[6], ptr[13]); ++ MLA(hi, lo, (*fo)[5], ptr[12]); ++ MLA(hi, lo, (*fo)[4], ptr[11]); ++ MLA(hi, lo, (*fo)[3], ptr[10]); ++ MLA(hi, lo, (*fo)[2], ptr[9]); ++ MLA(hi, lo, (*fo)[1], ptr[8]); ++ MLA(hi, lo, (*fo)[0], ptr[7]); */ ++ window_2 r8/*fo*/,r12/*ptr*/,r0/*acc*/,0/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7 ++ ++ ++ /* *pcm2-- = SHIFT(MLZ(hi, lo)); */ ++ lddsp r3, sp[4] ++ lddsp r2, sp[0] ++ scale r1, r0, r1 ++ st.w --lr/*pcm_2*/, r1 ++ ++ /* ptr += 2*po; */ ++ add r12/*ptr*/, r12, r3/*po*/<< 1 ++ ++ /* ++fo; ++ } */ ++ sub r8/*fo*/, -8*4 ++ ++ sub r2, 1 ++ stdsp sp[0], r2 ++ brne even_loop ++ ++ /* ptr += 33; */ ++ sub r12/*ptr*/, -33*2 ++ ++ /* ML0(hi, lo, (*fo)[0], ptr[0 + 17]); ++ MLA(hi, lo, (*fo)[1], ptr[7 + 17]); ++ MLA(hi, lo, (*fo)[2], ptr[6 + 17]); ++ MLA(hi, lo, (*fo)[3], ptr[5 + 17]); ++ MLA(hi, lo, (*fo)[4], ptr[4 + 17]); ++ MLA(hi, lo, (*fo)[5], ptr[3 + 17]); ++ MLA(hi, lo, (*fo)[6], ptr[2 + 17]); ++ MLA(hi, lo, (*fo)[7], ptr[1 + 17]); */ ++ window_1 r8/*fo*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7 ++ ++ ++ ++synth_end: ++ /* *pcm1 = SHIFT(-MLZ(hi, lo)); */ ++ scale r1, r0, r1 ++ neg r1 ++ st.w r10/*pcm_1*/, r1 ++ ++ mov r12, r10 ++ sub sp, -8 ++ popm r0-r7, pc ++ ++ ++ ++ ++ diff --git a/packages/libmad/libmad_0.15.1b.bb b/packages/libmad/libmad_0.15.1b.bb index 9de296635e..fdeeeb0cdf 100644 --- a/packages/libmad/libmad_0.15.1b.bb +++ b/packages/libmad/libmad_0.15.1b.bb @@ -4,9 +4,13 @@ PRIORITY = "optional" DEPENDS = "libid3tag" LICENSE = "GPL" +PR = "r1" + SRC_URI = "ftp://ftp.mars.org/pub/mpeg/libmad-${PV}.tar.gz" S = "${WORKDIR}/libmad-${PV}" +SRC_URI_append_avr32 = "file://libmad-0.15.1b-avr32-optimization.patch;patch=1" + inherit autotools EXTRA_OECONF = "-enable-speed --enable-shared" -- cgit v1.2.3 From e6462fedf87887ac4998a35f1e21a5222636f21c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 27 Aug 2007 09:47:58 +0000 Subject: libmad: fix SRC_URI --- packages/libmad/libmad_0.15.1b.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/libmad/libmad_0.15.1b.bb b/packages/libmad/libmad_0.15.1b.bb index fdeeeb0cdf..5393f822cf 100644 --- a/packages/libmad/libmad_0.15.1b.bb +++ b/packages/libmad/libmad_0.15.1b.bb @@ -9,7 +9,7 @@ PR = "r1" SRC_URI = "ftp://ftp.mars.org/pub/mpeg/libmad-${PV}.tar.gz" S = "${WORKDIR}/libmad-${PV}" -SRC_URI_append_avr32 = "file://libmad-0.15.1b-avr32-optimization.patch;patch=1" +SRC_URI_append_avr32 = " file://libmad-0.15.1b-avr32-optimization.patch;patch=1" inherit autotools -- cgit v1.2.3 From b144d7d083863cb10a7d9219ddcede338f6e839a Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 27 Aug 2007 09:49:54 +0000 Subject: mplayer: add conditional patch to speed up AVR32 --- .../mplayer/files/mplayer-1.0rc1-atmel.2.patch | 6444 ++++++++++++++++++++ packages/mplayer/mplayer_0.0+1.0rc1.bb | 8 +- 2 files changed, 6450 insertions(+), 2 deletions(-) create mode 100644 packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch diff --git a/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch b/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch new file mode 100644 index 0000000000..800f43e8eb --- /dev/null +++ b/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch @@ -0,0 +1,6444 @@ + cfg-common.h | 4 + + cfg-mencoder.h | 4 + + cfg-mplayer.h | 4 + + configure | 13 +- + libaf/af_format.c | 7 + + libavcodec/Makefile | 7 + + libavcodec/avr32/dsputil_avr32.c | 2678 ++++++++++++++++++++++++++++++++++++++ + libavcodec/avr32/fdct.S | 541 ++++++++ + libavcodec/avr32/h264idct.S | 451 +++++++ + libavcodec/avr32/idct.S | 829 ++++++++++++ + libavcodec/avr32/mc.S | 434 ++++++ + libavcodec/avr32/pico.h | 260 ++++ + libavcodec/bitstream.h | 77 +- + libavcodec/dsputil.c | 3 + + libavcodec/h264.c | 15 + + libavutil/common.h | 16 + + libavutil/internal.h | 9 + + libfaad2/common.h | 2 +- + libmpcodecs/ad_libmad.c | 5 + + libswscale/pico-avr32.h | 137 ++ + libswscale/swscale_internal.h | 2 +- + libswscale/yuv2rgb.c | 14 + + libswscale/yuv2rgb_avr32.c | 416 ++++++ + libvo/vo_fbdev2.c | 101 ++- + version.sh | 2 +- + 25 files changed, 6011 insertions(+), 20 deletions(-) + create mode 100644 libavcodec/avr32/dsputil_avr32.c + create mode 100644 libavcodec/avr32/fdct.S + create mode 100644 libavcodec/avr32/h264idct.S + create mode 100644 libavcodec/avr32/idct.S + create mode 100644 libavcodec/avr32/mc.S + create mode 100644 libavcodec/avr32/pico.h + create mode 100644 libswscale/pico-avr32.h + create mode 100644 libswscale/yuv2rgb_avr32.c + +diff --git a/cfg-common.h b/cfg-common.h +index 780df38..7d878a8 100644 +--- a/cfg-common.h ++++ b/cfg-common.h +@@ -235,6 +235,10 @@ + {"tsprobe", &ts_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL}, + {"tskeepbroken", &ts_keep_broken, CONF_TYPE_FLAG, 0, 0, 1, NULL}, + ++#ifdef ARCH_AVR32 ++ {"use-pico", &avr32_use_pico, CONF_TYPE_FLAG, 0, 0, 1, NULL}, ++ {"nouse-pico", &avr32_use_pico, CONF_TYPE_FLAG, 0, 1, 0, NULL}, ++#endif + // draw by slices or whole frame (useful with libmpeg2/libavcodec) + {"slices", &vd_use_slices, CONF_TYPE_FLAG, 0, 0, 1, NULL}, + {"noslices", &vd_use_slices, CONF_TYPE_FLAG, 0, 1, 0, NULL}, +diff --git a/cfg-mencoder.h b/cfg-mencoder.h +index 411b748..addf791 100644 +--- a/cfg-mencoder.h ++++ b/cfg-mencoder.h +@@ -5,6 +5,10 @@ + + #include "cfg-common.h" + ++#ifdef ARCH_AVR32 ++extern int avr32_use_pico; ++#endif ++ + #ifdef USE_FAKE_MONO + extern int fakemono; // defined in dec_audio.c + #endif +diff --git a/cfg-mplayer.h b/cfg-mplayer.h +index 62b6eac..31499c2 100644 +--- a/cfg-mplayer.h ++++ b/cfg-mplayer.h +@@ -4,6 +4,10 @@ + + #include "cfg-common.h" + ++#ifdef ARCH_AVR32 ++extern int avr32_use_pico; ++#endif ++ + extern int noconsolecontrols; + + #if defined(HAVE_FBDEV)||defined(HAVE_VESA) +diff --git a/configure b/configure +index 29002c8..56c6fe4 100755 +--- a/configure ++++ b/configure +@@ -1203,6 +1203,15 @@ EOF + _optimizing="$proc" + ;; + ++ avr32) ++ _def_arch='#define ARCH_AVR32' ++ _target_arch='TARGET_ARCH_AVR32 = yes' ++ iproc='avr32' ++ proc='' ++ _march='' ++ _mcpu='' ++ _optimizing='' ++ ;; + arm|armv4l|armv5tel) + _def_arch='#define ARCH_ARMV4L 1' + _target_arch='TARGET_ARCH_ARMV4L = yes' +@@ -1533,7 +1542,7 @@ echores $_named_asm_args + # Checking for CFLAGS + _stripbinaries=yes + if test "$_profile" != "" || test "$_debug" != "" ; then +- CFLAGS="-W -Wall -O2 $_march $_mcpu $_debug $_profile" ++ CFLAGS="-W -Wall -O4 $_march $_mcpu $_debug $_profile" + if test "$_cc_major" -ge "3" ; then + CFLAGS=`echo "$CFLAGS" | sed -e 's/\(-Wall\)/\1 -Wno-unused-parameter/'` + fi +@@ -3794,7 +3803,7 @@ fi + + + echocheck "X11 headers presence" +- for I in `echo $_inc_extra | sed s/-I//g` /usr/X11/include /usr/X11R6/include /usr/include/X11R6 /usr/include /usr/openwin/include ; do ++ for I in `echo $_inc_extra | sed s/-I//g`; do + if test -f "$I/X11/Xlib.h" ; then + _inc_x11="-I$I" + _x11_headers="yes" +diff --git a/libaf/af_format.c b/libaf/af_format.c +index e5b7cc9..5d7ea6d 100644 +--- a/libaf/af_format.c ++++ b/libaf/af_format.c +@@ -20,7 +20,14 @@ + // Integer to float conversion through lrintf() + #ifdef HAVE_LRINTF + #include ++ ++#ifdef ARCH_AVR32 ++#define lrintf(x) rint(x) ++#define llrint(x) (long long)rint(x) ++#else + long int lrintf(float); ++#endif ++ + #else + #define lrintf(x) ((int)(x)) + #endif +diff --git a/libavcodec/Makefile b/libavcodec/Makefile +index 17b6c45..8e1dc96 100644 +--- a/libavcodec/Makefile ++++ b/libavcodec/Makefile +@@ -360,6 +360,12 @@ OBJS-$(TARGET_ARCH_SPARC) += sparc/dsputil_vis.o \ + + sparc/dsputil_vis.o: CFLAGS += -mcpu=ultrasparc -mtune=ultrasparc + ++# avr32 specific stuff ++ifeq ($(TARGET_ARCH_AVR32),yes) ++ASM_OBJS += avr32/idct.o avr32/fdct.o avr32/mc.o avr32/h264idct.o ++OBJS += avr32/dsputil_avr32.o ++endif ++ + # sun mediaLib specific stuff + OBJS-$(HAVE_MLIB) += mlib/dsputil_mlib.o \ + +@@ -419,6 +425,7 @@ tests: apiexample $(TESTS) + clean:: + rm -f \ + i386/*.o i386/*~ \ ++ avr32/*.o avr32/*~ \ + armv4l/*.o armv4l/*~ \ + mlib/*.o mlib/*~ \ + alpha/*.o alpha/*~ \ +diff --git a/libavcodec/avr32/dsputil_avr32.c b/libavcodec/avr32/dsputil_avr32.c +new file mode 100644 +index 0000000..200284d +--- /dev/null ++++ b/libavcodec/avr32/dsputil_avr32.c +@@ -0,0 +1,2678 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++#include "../dsputil.h" ++#include "pico.h" ++ ++int avr32_use_pico = 1; ++ ++//#define CHECK_DSP_FUNCS_AGAINST_C ++ ++#ifdef CHECK_DSP_FUNCS_AGAINST_C ++#define DSP_FUNC_NAME(name) test_ ## name ++#else ++#define DSP_FUNC_NAME(name) name ++#endif ++ ++union doubleword { ++ int64_t doubleword; ++ struct { ++ int32_t top; ++ int32_t bottom; ++ } words; ++}; ++ ++#undef LD16 ++#undef LD32 ++#undef LD64 ++ ++#define LD16(a) (*((uint16_t*)(a))) ++#define LD32(a) (*((uint32_t*)(a))) ++#define LD64(a) (*((uint64_t*)(a))) ++#define LD64_UNALIGNED(a) \ ++ ({ union doubleword __tmp__; \ ++ __tmp__.words.top = LD32(a); \ ++ __tmp__.words.bottom = LD32(a + 4); \ ++ __tmp__.doubleword; }) ++ ++#undef ST32 ++#undef ST16 ++ ++#define ST16(a, b) *((uint16_t*)(a)) = (b) ++#define ST32(a, b) *((uint32_t*)(a)) = (b) ++ ++#undef rnd_avg32 ++#define rnd_avg32(a, b) \ ++ ({ uint32_t __tmp__;\ ++ asm("pavg.ub\t%0, %1, %2" : "=r"(__tmp__) : "r"(a), "r"(b));\ ++ __tmp__;}) ++ ++void idct_avr32(DCTELEM *data); ++void fdct_avr32(DCTELEM *data); ++ ++void idct_put_avr32(uint8_t *dest, int line_size, DCTELEM *data); ++void idct_add_avr32(uint8_t *dest, int line_size, DCTELEM *data); ++ ++void h264_idct_add_avr32(uint8_t *dest, DCTELEM *data, int stride); ++void h264_idct8_add_avr32(uint8_t *dest, DCTELEM *data, int stride); ++ ++#define extern_dspfunc(PFX, NUM) \ ++ void PFX ## _pixels ## NUM ## _avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _h_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _v_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _hv_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ) ++ ++extern_dspfunc(put, 8); ++extern_dspfunc(put_no_rnd, 8); ++extern_dspfunc(avg, 8); ++extern_dspfunc(avg_no_rnd, 8); ++#undef extern_dspfunc ++ ++#ifdef CHECK_DSP_FUNCS_AGAINST_C ++#define extern_dspfunc(PFX, NUM) \ ++ void PFX ## _pixels ## NUM ## _c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _x2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _y2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _xy2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ) ++ ++extern_dspfunc(put, 4); ++extern_dspfunc(put_no_rnd, 4); ++extern_dspfunc(put, 8); ++extern_dspfunc(put_no_rnd, 8); ++extern_dspfunc(put, 16); ++extern_dspfunc(put_no_rnd, 16); ++extern_dspfunc(avg, 8); ++extern_dspfunc(avg_no_rnd, 8); ++extern_dspfunc(avg, 16); ++extern_dspfunc(avg_no_rnd, 16); ++ ++ ++#undef extern_dspfunc ++#define extern_dspfunc(PFX, NUM) \ ++void PFX ## NUM ## _mc00_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc10_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc20_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc30_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc01_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc11_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc21_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc31_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc02_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc12_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc22_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc32_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc03_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc13_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc23_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc33_c(uint8_t *dst, uint8_t *src, int stride); \ ++ ++extern_dspfunc(put_h264_qpel, 16); ++extern_dspfunc(put_h264_qpel, 8); ++extern_dspfunc(put_h264_qpel, 4); ++extern_dspfunc(avg_h264_qpel, 16); ++extern_dspfunc(avg_h264_qpel, 8); ++extern_dspfunc(avg_h264_qpel, 4); ++ ++#undef extern_dspfunc ++ ++void put_h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++void put_h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++void put_h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++ ++void avg_h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++void avg_h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++void avg_h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++ ++ ++void dump_block8(uint8_t *block, int line_size, int h); ++void dump_block4(uint8_t *block, int line_size, int h); ++void dump_block(uint8_t *block, int line_size, int h, int w); ++ ++void check_block8(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, char *name, int max_dev); ++void check_block4(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, char *name, int max_dev); ++void check_block(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, int width, char *name, int max_dev); ++ ++#define PIXOP2( OPNAME, OP ) \ ++void OPNAME ## _pixels4_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\ ++ int i;\ ++ for(i=0; i> 16)); ++ ST16(dst + 1*dstStride, (short)PICO_GET_W(PICO_OUTPIX0)); ++ ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_MVRC_W(PICO_INPIX1, src4); ++ PICO_MVRC_W(PICO_INPIX0, src5); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 0, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 1, 9, 6, 3); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src4); ++ PICO_MVRC_W(PICO_INPIX1, src5); ++ PICO_MVRC_W(PICO_INPIX0, src6); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 2, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 3, 9, 6, 3); ++ ++ ST16(dst + 2*dstStride, (short)(PICO_GET_W(PICO_OUTPIX0) >> 16)); ++ ST16(dst + 3*dstStride, (short)PICO_GET_W(PICO_OUTPIX0)); ++ ++ dst += 2; ++ src += 2; ++ } ++} ++ ++ ++ ++ ++static void avg_h264_qpel4_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ ++ int32_t tmp_block[48]; ++ int32_t *tmp = tmp_block; ++ int i; ++ ++ set_pico_config(&h264_qpel4_hv_lowpass_config); ++ ++ src -= 2; ++ for ( i = 0; i < 2; i++ ){ ++ int srcB= LD32(src - 2*srcStride); ++ int srcA= LD32(src - 1*srcStride); ++ int src0= LD32(src + 0 *srcStride); ++ int src1= LD32(src + 1 *srcStride); ++ int src2= LD32(src + 2 *srcStride); ++ int src3= LD32(src + 3 *srcStride); ++ int src4= LD32(src + 4 *srcStride); ++ int src5= LD32(src + 5 *srcStride); ++ int src6= LD32(src + 6 *srcStride); ++ ++ PICO_MVRC_W(PICO_INPIX0, srcB); ++ PICO_MVRC_W(PICO_INPIX1, srcA); ++ PICO_MVRC_W(PICO_INPIX2, src0); ++ PICO_OP(0, 0, 0, 4, 8); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX0, src3); ++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_OP(0, 0, 1, 5, 9); ++ PICO_MVRC_W(PICO_INPIX0, srcB); ++ PICO_MVRC_W(PICO_INPIX1, srcA); ++ PICO_MVRC_W(PICO_INPIX2, src0); ++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_OP(0, 0, 4, 8, 0); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_MVRC_W(PICO_INPIX1, src3); ++ PICO_MVRC_W(PICO_INPIX0, src4); ++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_OP(0, 0, 1, 5, 9); ++ PICO_MVRC_W(PICO_INPIX0, srcA); ++ PICO_MVRC_W(PICO_INPIX1, src0); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_MVRC_W(PICO_INPIX0, src2); ++ PICO_OP(0, 0, 4, 8, 0); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_MVRC_W(PICO_INPIX1, src4); ++ PICO_MVRC_W(PICO_INPIX0, src5); ++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_OP(0, 0, 1, 5, 9); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_MVRC_W(PICO_INPIX0, src3); ++ PICO_OP(0, 0, 4, 8, 0); ++ PICO_MVRC_W(PICO_INPIX2, src4); ++ PICO_MVRC_W(PICO_INPIX1, src5); ++ PICO_MVRC_W(PICO_INPIX0, src6); ++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_OP(0, 0, 1, 5, 9); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ src += 2; ++ } ++ ++ src -= 1; ++ tmp -= 48; ++ ++ ++ PICO_PUT_W(PICO_CONFIG, ++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE) ++ | PICO_INPUT_MODE(PICO_VERT_FILTER_MODE) ++ | PICO_COEFF_FRAC_BITS(10) ++ | PICO_OFFSET_FRAC_BITS(10)); ++ ++ for ( i = 0; i < 2; i++ ){ ++ int srcB= LD32(src - 2*srcStride); ++ int srcA= LD32(src - 1*srcStride); ++ int src0= LD32(src + 0 *srcStride); ++ int src1= LD32(src + 1 *srcStride); ++ int src2= LD32(src + 2 *srcStride); ++ int src3= LD32(src + 3 *srcStride); ++ int src4= LD32(src + 4 *srcStride); ++ int src5= LD32(src + 5 *srcStride); ++ int src6= LD32(src + 6 *srcStride); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, srcB); ++ PICO_MVRC_W(PICO_INPIX1, srcA); ++ PICO_MVRC_W(PICO_INPIX2, src0); ++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX0, src3); ++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 0, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, srcB); ++ PICO_MVRC_W(PICO_INPIX1, srcA); ++ PICO_MVRC_W(PICO_INPIX2, src0); ++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 1, 9, 6, 3); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, srcA); ++ PICO_MVRC_W(PICO_INPIX1, src0); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_MVRC_W(PICO_INPIX1, src3); ++ PICO_MVRC_W(PICO_INPIX0, src4); ++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 2, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, srcA); ++ PICO_MVRC_W(PICO_INPIX1, src0); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 3, 9, 6, 3); ++ ++ ST16(dst + 0*dstStride, rnd_avg32(LD16(dst + 0*dstStride), PICO_GET_W(PICO_OUTPIX0) >> 16)); ++ ST16(dst + 1*dstStride, rnd_avg32(LD16(dst + 1*dstStride), PICO_GET_W(PICO_OUTPIX0))); ++ ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_MVRC_W(PICO_INPIX1, src4); ++ PICO_MVRC_W(PICO_INPIX0, src5); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 0, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 1, 9, 6, 3); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src4); ++ PICO_MVRC_W(PICO_INPIX1, src5); ++ PICO_MVRC_W(PICO_INPIX0, src6); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 2, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 3, 9, 6, 3); ++ ++ ST16(dst + 2*dstStride, rnd_avg32(LD16(dst + 2*dstStride), PICO_GET_W(PICO_OUTPIX0) >> 16)); ++ ST16(dst + 3*dstStride, rnd_avg32(LD16(dst + 3*dstStride), PICO_GET_W(PICO_OUTPIX0))); ++ ++ dst += 2; ++ src += 2; ++ } ++} ++ ++ ++static void put_h264_qpel8_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ put_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel8_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ avg_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void put_h264_qpel8_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ put_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel8_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ avg_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void put_h264_qpel8_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ put_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel8_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ avg_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void put_h264_qpel16_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ put_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel16_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ avg_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void put_h264_qpel16_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ put_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel16_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ avg_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void put_h264_qpel16_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ put_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel16_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ avg_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++ ++#define H264_MC(OPNAME, SIZE) \ ++static void OPNAME ## h264_qpel ## SIZE ## _mc00_pico (uint8_t *dst, uint8_t *src, int stride){\ ++ OPNAME ## pixels ## SIZE ## _c(dst, src, stride, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc10_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t half[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(half, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, src, half, stride, stride, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc20_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ OPNAME ## h264_qpel ## SIZE ## _h_lowpass_pico(dst, src, stride, stride);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc30_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t half[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(half, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, src+1, half, stride, stride, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc01_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t half[SIZE*SIZE];\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(half, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, full_mid, half, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc02_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ OPNAME ## h264_qpel ## SIZE ## _v_lowpass_pico(dst, full_mid, stride, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc03_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t half[SIZE*SIZE];\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(half, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, full_mid+SIZE, half, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc11_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc31_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\ ++ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc13_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc33_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\ ++ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc22_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ OPNAME ## h264_qpel ## SIZE ## _hv_lowpass_pico(dst, src, stride, stride);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc21_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfHV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\ ++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc23_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfHV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\ ++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc12_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfV[SIZE*SIZE];\ ++ uint8_t halfHV[SIZE*SIZE];\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc32_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfV[SIZE*SIZE];\ ++ uint8_t halfHV[SIZE*SIZE];\ ++ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\ ++}\ ++ ++H264_MC(put_, 4) ++H264_MC(put_, 8) ++H264_MC(put_, 16) ++H264_MC(avg_, 4) ++H264_MC(avg_, 8) ++H264_MC(avg_, 16) ++ ++ ++ ++#define dspfunc16(PFX) \ ++ void PFX ## _pixels16_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ ++ PFX ## _pixels8_avr32(dst, pixels, line_size, h);\ ++ PFX ## _pixels8_avr32(dst + 8, pixels + 8, line_size, h);\ ++ }\ ++ void PFX ## _pixels16_h_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ ++ PFX ## _pixels8_h_avr32(dst, pixels, line_size, h);\ ++ PFX ## _pixels8_h_avr32(dst + 8, pixels + 8, line_size, h);\ ++ }\ ++ void PFX ## _pixels16_v_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ ++ PFX ## _pixels8_v_avr32(dst, pixels, line_size, h);\ ++ PFX ## _pixels8_v_avr32(dst + 8, pixels + 8, line_size, h);\ ++ }\ ++ void PFX ## _pixels16_hv_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ ++ PFX ## _pixels8_hv_avr32(dst, pixels, line_size, h);\ ++ PFX ## _pixels8_hv_avr32(dst + 8, pixels + 8, line_size, h);\ ++ }\ ++ ++ ++dspfunc16(put) ++dspfunc16(put_no_rnd) ++dspfunc16(avg) ++dspfunc16(avg_no_rnd) ++#undef dspfunc16 ++ ++static int pix_sum_avr32(uint8_t * pix, int line_size) ++{ ++ int s, i; ++ ++ s = 0; ++ for (i = 0; i < 16; i++) { ++ int tmp1,tmp2,tmp3,tmp4,tmp5; ++ __asm__ volatile ( "ld.w\t%0, %6[0]\n\t" ++ "ld.w\t%1, %6[4]\n\t" ++ "ld.w\t%2, %6[8]\n\t" ++ "ld.w\t%3, %6[12]\n\t" ++ "punpckub.h\t%4, %0:t\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %0:b\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %1:t\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %1:b\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %2:t\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %2:b\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %3:t\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %3:b\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ : "=&r"(tmp1),"=&r"(tmp2),"=&r"(tmp3),"=&r"(tmp4),"=&r"(tmp5),"=&r"(s) ++ : "r"(pix)); ++ pix += line_size; ++ } ++ __asm__ volatile ( "addhh.w\t%0, %0:t, %0:b" : "=&r" (s) ); ++ ++ return s; ++} ++ ++ ++//#define op_scale1(x) block[x] = clip_uint8( (block[x]*weight + offset) >> log2_denom ) ++//#define op_scale2(x) dst[x] = clip_uint8( (src[x]*weights + dst[x]*weightd + offset) >> (log2_denom+1)) ++//#define H264_WEIGHT(W,H) \ ++//static void weight_h264_pixels ## W ## x ## H ## _c(uint8_t *block, int stride, int log2_denom, int weight, int offset){ \ ++// int attribute_unused x, y; \ ++// offset <<= log2_denom; \ ++// if(log2_denom) offset += 1<<(log2_denom-1); \ ++// for(y=0; y> 0, 8\n" \ ++// "satu\t%[tmp1] >> 0, 8\n" \ ++// "st.b\t%[block][0], %[tmp0]\n" \ ++// "st.b\t%[block][1], %[tmp1]\n" \ ++// : [tmp0] "=&r"(tmp0), [tmp1] "=&r"(tmp1) \ ++// : [block] "r"(block), [weight]"r"(weight), [log2_denom]"r"(log2denom) ); \ ++// } else if ( W==4 ) { \ ++// asm volatile ( "ld.w\t%[tmp0], %[block][0]\n" \ ++// "punpckub.h\t%[tmp1], %[tmp0]:t\n" \ ++// "punpckub.h\t%[tmp0], %[tmp0]:b\n" \ ++// "mulhh.w\t%[tmp2], %[tmp1]:t, %[weight]:b\n" \ ++// "mulhh.w\t%[tmp1], %[tmp1]:b, %[weight]:b\n" \ ++// "asr\t%[tmp0], %[log2_denom]\n" \ ++// "asr\t%[tmp1], %[log2_denom]\n" \ ++// "satu\t%[tmp0] >> 0, 8\n" \ ++// "satu\t%[tmp1] >> 0, 8\n" \ ++// "st.b\t%[block][0], %[tmp0]\n" \ ++// "st.b\t%[block][1], %[tmp1]\n" \ ++// : [tmp0] "=&r"(tmp0), [tmp1] "=&r"(tmp1) \ ++// : [block] "r"(block), [weight]"r"(weight), [log2_denom]"r"(log2denom) ); \ ++// ++// ++// ++// if(W==4) continue; \ ++// op_scale1(4); \ ++// op_scale1(5); \ ++// op_scale1(6); \ ++// op_scale1(7); \ ++// if(W==8) continue; \ ++// op_scale1(8); \ ++// op_scale1(9); \ ++// op_scale1(10); \ ++// op_scale1(11); \ ++// op_scale1(12); \ ++// op_scale1(13); \ ++// op_scale1(14); \ ++// op_scale1(15); \ ++// } \ ++//} \ ++//static void biweight_h264_pixels ## W ## x ## H ## _c(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offsetd, int offsets){ \ ++// int attribute_unused x, y; \ ++// int offset = (offsets + offsetd + 1) >> 1; \ ++// offset = ((offset << 1) + 1) << log2_denom; \ ++// for(y=0; y and ++ is not less than */ ++#define PABS_DIFF_LESS_THAN( a, b, compare) \ ++ ({ uint32_t __tmp__, __tmp2__, __mask__; \ ++ asm ( \ ++ /* Check ABS( a - b ) < compare */ \ ++ "psubs.ub\t%[tmp], %[opa], %[opb]\n" \ ++ "psubs.ub\t%[tmp2], %[opb], %[opa]\n" \ ++ "or\t%[tmp], %[tmp2]\n" /* ABS ( a - b ) */ \ ++ /* This produces 0 for all bytes where the comparison is not true */ \ ++ "psubs.ub\t%[mask], %[cmp], %[tmp]\n" \ ++ : [tmp] "=&r"(__tmp__), [tmp2] "=&r"(__tmp2__), [mask] "=&r"(__mask__) \ ++ : [opa] "r"(a), [opb] "r"(b), [cmp] "r"(compare) ); \ ++ __mask__; }) ++ ++/* ++ Set all bytes containing zero in to 255 and the rest to zero. ++ ++ Add with saturation 254 to all bytes making all bytes different from ++ zero become 255. Then add one without saturation to make all bytes ++ originally containing zero 255 and the rest 0. */ ++#define SET_ALL_BITS_IN_ZERO_BYTES(value) \ ++ ({ uint32_t __tmp__; \ ++ asm ( \ ++ "padds.ub\t%[tmp], %[val], %[max_minus_one]\n" \ ++ "padd.b\t%[tmp], %[tmp], %[all_ones]\n" \ ++ : [tmp] "=r"(__tmp__) \ ++ : [val] "r"(value), [max_minus_one] "r"(0xFEFEFEFE), [all_ones] "r"(0x01010101) ); \ ++ __tmp__; }) ++ ++#define PACKW_SH(upper, lower) \ ++ ({ uint32_t __tmp__; \ ++ asm ( \ ++ "packw.sh\t%[tmp], %[u], %[l]\n" \ ++ : [tmp] "=r"(__tmp__) \ ++ : [u] "r"(upper), [l] "r"(lower) ); \ ++ __tmp__; }) ++ ++#define PACKSH_UB(upper, lower) \ ++ ({ uint32_t __tmp__; \ ++ asm ( \ ++ "packsh.sb\t%[tmp], %[u], %[l]\n" \ ++ : [tmp] "=r"(__tmp__) \ ++ : [u] "r"(upper), [l] "r"(lower) ); \ ++ __tmp__; }) ++ ++static void h264_v_loop_filter_luma_avr32(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0) ++{ ++ int i; ++ ++ if ( alpha == 0 ) ++ return; ++ ++ alpha = PACKW_SH(alpha, alpha); ++ alpha = PACKSH_UB(alpha, alpha); ++ beta = PACKW_SH(beta, beta); ++ beta = PACKSH_UB(beta, beta); ++ ++ for( i = 0; i < 4; i++ ) { ++ uint32_t p0, p1, p2, q0, q1, q2; ++ uint32_t mask, mask2; ++ uint32_t tmp, tmp2, tmp3, tmp4; ++ ++ if( tc0[i] < 0 ) { ++ pix += 4; ++ continue; ++ } ++ ++/* for( d = 0; d < 4; d++ ) { ++ const int p0 = pix[-1*stride]; ++ const int p1 = pix[-2*stride]; ++ const int p2 = pix[-3*stride]; ++ const int q0 = pix[0]; ++ const int q1 = pix[1*stride]; ++ const int q2 = pix[2*stride]; ++ ++ if( ABS( p0 - q0 ) < alpha && ++ ABS( p1 - p0 ) < beta && ++ ABS( q1 - q0 ) < beta ) { */ ++ ++ p0 = LD32(pix - stride); ++ p1 = LD32(pix - 2*stride); ++ q0 = LD32(pix); ++ q1 = LD32(pix + stride); ++ ++ /* Check which of the columns should be filtered, if any. */ ++ mask = PABS_DIFF_LESS_THAN(p0, q0, alpha); ++ mask |= PABS_DIFF_LESS_THAN(p1, p0, beta); ++ mask |= PABS_DIFF_LESS_THAN(q1, q0, beta); ++ ++ if ( !mask ) ++ continue; ++ ++ mask = SET_ALL_BITS_IN_ZERO_BYTES(mask); ++ ++ ++ int tc = PACKW_SH(tc0[i], tc0[i]); ++ int tc0_p = tc; ++ int tc0_m = PACKW_SH(-tc0[i], -tc0[i]); ++ ++ /* ++ int i_delta; ++ if( ABS( p2 - p0 ) < beta ) { ++ pix[-2*stride] = p1 + clip( (( p2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - p1, -tc0[i], tc0[i] ); ++ tc++; ++ }*/ ++ ++ p2 = LD32(pix - 3*stride); ++ mask2 = PABS_DIFF_LESS_THAN(p2, p0, beta) & ~mask; ++ ++ if ( mask2 ){ ++ mask2 = SET_ALL_BITS_IN_ZERO_BYTES(mask2); ++ asm ("pavg.ub\t%[tmp], %[p0], %[q0]\n" ++ "paddh.ub\t%[tmp], %[tmp], %[p2]\n" ++ "punpckub.h\t%[tmp2], %[tmp]:t\n" ++ "punpckub.h\t%[tmp], %[tmp]:b\n" ++ "punpckub.h\t%[tmp3], %[p1]:t\n" ++ "punpckub.h\t%[tmp4], %[p1]:b\n" ++ "psub.h\t%[tmp2], %[tmp2], %[tmp3]\n" ++ "psub.h\t%[tmp], %[tmp], %[tmp4]\n" ++ "pmin.sh\t%[tmp2], %[tmp2], %[tc0_p]\n" ++ "pmin.sh\t%[tmp], %[tmp], %[tc0_p]\n" ++ "pmax.sh\t%[tmp2], %[tmp2], %[tc0_m]\n" ++ "pmax.sh\t%[tmp], %[tmp], %[tc0_m]\n" ++ "padd.h\t%[tmp2], %[tmp2], %[tmp3]\n" ++ "padd.h\t%[tmp], %[tmp], %[tmp4]\n" ++ "packsh.ub\t%[tmp], %[tmp2], %[tmp]\n" ++ "andn\t%[tmp], %[mask2]\n" ++ "and\t%[tmp2], %[q1], %[mask2]\n" ++ "or\t%[tmp], %[tmp2]\n" ++ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), ++ [tmp4]"=&r"(tmp4) ++ : [q0]"r"(q0), [p2]"r"(p2), [p1]"r"(p1), [p0]"r"(p0), [q1]"r"(q1), [tc0_p]"r"(tc0_p), ++ [tc0_m]"r"(tc0_m), [mask2]"r"(mask2)); ++ ST32(pix - 2*stride, tmp); ++ tc += 0x00010001; ++ } ++ ++ ++ q2 = LD32(pix + 2*stride); ++ ++ /* ++ if( ABS( q2 - q0 ) < beta ) { ++ pix[ stride] = q1 + clip( (( q2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - q1, -tc0[i], tc0[i] ); ++ tc++; ++ } ++ */ ++ mask2 = PABS_DIFF_LESS_THAN(q2, q0, beta) & ~mask; ++ ++ if ( mask2 ){ ++ mask2 = SET_ALL_BITS_IN_ZERO_BYTES(mask2); ++ asm ("pavg.ub\t%[tmp], %[p0], %[q0]\n" ++ "paddh.ub\t%[tmp], %[tmp], %[q2]\n" ++ "punpckub.h\t%[tmp2], %[tmp]:t\n" ++ "punpckub.h\t%[tmp], %[tmp]:b\n" ++ "punpckub.h\t%[tmp3], %[q1]:t\n" ++ "punpckub.h\t%[tmp4], %[q1]:b\n" ++ "psub.h\t%[tmp2], %[tmp2], %[tmp3]\n" ++ "psub.h\t%[tmp], %[tmp], %[tmp4]\n" ++ "pmin.sh\t%[tmp2], %[tmp2], %[tc0_p]\n" ++ "pmin.sh\t%[tmp], %[tmp], %[tc0_p]\n" ++ "pmax.sh\t%[tmp2], %[tmp2], %[tc0_m]\n" ++ "pmax.sh\t%[tmp], %[tmp], %[tc0_m]\n" ++ "padd.h\t%[tmp2], %[tmp2], %[tmp3]\n" ++ "padd.h\t%[tmp], %[tmp], %[tmp4]\n" ++ "packsh.ub\t%[tmp], %[tmp2], %[tmp]\n" ++ "andn\t%[tmp], %[mask2]\n" ++ "and\t%[tmp2], %[q1], %[mask2]\n" ++ "or\t%[tmp], %[tmp2]\n" ++ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), ++ [tmp4]"=&r"(tmp4) ++ : [q0]"r"(q0), [q2]"r"(q2), [q1]"r"(q1), [p0]"r"(p0), [tc0_p]"r"(tc0_p), ++ [tc0_m]"r"(tc0_m), [mask2]"r"(mask2)); ++ ST32(pix + stride, tmp); ++ tc += 0x00010001; ++ } ++ ++ uint32_t old_p0 = p0; ++ uint32_t old_q0 = q0; ++ ++ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); ++ pix[-stride] = clip_uint8( p0 + i_delta ); ++ pix[0] = clip_uint8( q0 - i_delta ); */ ++ ++ asm ( ++ /* Check if the two upper pixels should be filtered */ ++ "lsr\t%[tmp], %[inv_mask], 16\n" ++ "breq\t0f\n" ++ ++ "punpckub.h\t%[tmp], %[p1]:t\n" ++ "punpckub.h\t%[tmp2], %[q1]:t\n" ++ ++ /* p1 - q1 */ ++ "psub.h\t%[tmp], %[tmp], %[tmp2]\n" ++ ++ "punpckub.h\t%[tmp3], %[q0]:t\n" ++ "punpckub.h\t%[tmp4], %[p0]:t\n" ++ ++ /* q0 - p0 */ ++ "psub.h\t%[tmp2], %[tmp3], %[tmp4]\n" ++ ++ /* (q0 - p0) << 2 */ ++ "plsl.h\t%[tmp2], %[tmp2], 2\n" ++ ++ /* ((q0 - p0) << 2) + (p1 - q1) */ ++ "padd.h\t%[tmp2], %[tmp2], %[tmp]\n" ++ ++ "mov\t%[tmp], 0x00040004\n" ++ /* ((q0 - p0) << 2) + (p1 - q1) + 4*/ ++ "padd.h\t%[tmp2], %[tmp2], %[tmp]\n" ++ ++ /* (((q0 - p0) << 2) + (p1 - q1) + 4) >> 3*/ ++ "pasr.h\t%[tmp2], %[tmp2], 3\n" ++ ++ "mov\t%[tmp], 0\n" ++ "psub.h\t%[tmp], %[tmp], %[tc]\n" ++ ++ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); */ ++ "pmin.sh\t%[tmp2], %[tmp2], %[tc]\n" ++ "pmax.sh\t%[tmp2], %[tmp2], %[tmp]\n" ++ ++ ++ /* pix[-stride] = clip_uint8( p0 + i_delta ); */ ++ "padd.h\t%[tmp4], %[tmp4], %[tmp2]\n" ++ ++ ++ /* pix[0] = clip_uint8( q0 - i_delta ); */ ++ "psub.h\t%[tmp3], %[tmp3], %[tmp2]\n" ++ ++ /* Check if the two lower pixels should be filtered */ ++ "lsl\t%[tmp2], %[inv_mask], 16\n" ++ "breq\t1f\n" ++ ++ "0:\n" ++ "punpckub.h\t%[p1], %[p1]:b\n" ++ "punpckub.h\t%[q1], %[q1]:b\n" ++ ++ /* p1 - q1 */ ++ "psub.h\t%[p1], %[p1], %[q1]\n" ++ ++ "punpckub.h\t%[q0], %[q0]:b\n" ++ "punpckub.h\t%[p0], %[p0]:b\n" ++ ++ /* q0 - p0 */ ++ "psub.h\t%[tmp2], %[q0], %[p0]\n" ++ ++ /* (q0 - p0) << 2 */ ++ "plsl.h\t%[tmp2], %[tmp2], 2\n" ++ ++ /* ((q0 - p0) << 2) + (p1 - q1) */ ++ "padd.h\t%[tmp2], %[tmp2], %[p1]\n" ++ ++ "mov\t%[q1], 0x00040004\n" ++ /* ((q0 - p0) << 2) + (p1 - q1) + 4*/ ++ "padd.h\t%[tmp2], %[tmp2], %[q1]\n" ++ ++ /* (((q0 - p0) << 2) + (p1 - q1) + 4) >> 3*/ ++ "pasr.h\t%[tmp2], %[tmp2], 3\n" ++ ++ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); */ ++ "pmin.sh\t%[tmp2], %[tmp2], %[tc]\n" ++ "pmax.sh\t%[tmp2], %[tmp2], %[tmp]\n" ++ ++ /* pix[-stride] = clip_uint8( p0 + i_delta ); */ ++ "padd.h\t%[p0], %[p0], %[tmp2]\n" ++ ++ /* pix[0] = clip_uint8( q0 - i_delta ); */ ++ "psub.h\t%[q0], %[q0], %[tmp2]\n" ++ ++ "1:\n" ++ "packsh.ub\t%[p0], %[tmp4], %[p0]\n" ++ "packsh.ub\t%[q0], %[tmp3], %[tmp4]\n" ++ ++ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), ++ [tmp4]"=&r"(tmp4), [q0]"=&r"(q0), [q1]"=&r"(q1), [p0]"=&r"(p0), [p1]"=&r"(p1) ++ : [tc]"r"(tc), [inv_mask]"r"(~mask)); ++ ++ ST32(pix - stride, (mask & old_p0) | (p0 & ~mask)); ++ ST32(pix, (mask & old_q0) | (q0 & ~mask)); ++ ++ } ++ pix += 1; ++} ++ ++ ++ ++ ++#ifdef CHECK_DSP_FUNCS_AGAINST_C ++ ++void dump_block8(uint8_t *block, int line_size, int h){ ++ int i, j; ++ ++ for ( i = 0; i < h ; i++ ){ ++ av_log(NULL, AV_LOG_ERROR, "\t"); ++ for ( j = 0; j < 8 ; j++ ){ ++ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]); ++ } ++ av_log(NULL, AV_LOG_ERROR, "\n"); ++ } ++} ++ ++void dump_block4(uint8_t *block, int line_size, int h){ ++ int i, j; ++ ++ for ( i = 0; i < h ; i++ ){ ++ av_log(NULL, AV_LOG_ERROR, "\t"); ++ for ( j = 0; j < 4 ; j++ ){ ++ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]); ++ } ++ av_log(NULL, AV_LOG_ERROR, "\n"); ++ } ++} ++ ++void dump_block(uint8_t *block, int line_size, int h, int w){ ++ int i, j; ++ ++ for ( i = 0; i < h ; i++ ){ ++ av_log(NULL, AV_LOG_ERROR, "\t"); ++ for ( j = 0; j < w ; j++ ){ ++ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]); ++ } ++ av_log(NULL, AV_LOG_ERROR, "\n"); ++ } ++} ++ ++void check_block8(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, char *name, int max_dev){ ++ int i,j; ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < h ; j++ ){ ++ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j]; ++ diff = diff < 0 ? -diff : diff; ++ if ( diff > max_dev ){ ++ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n", ++ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]); ++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name); ++ dump_block8(test, line_size_test, h); ++ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n"); ++ dump_block8(correct, line_size_correct, h); ++ exit(1); ++ } ++ } ++ } ++} ++ ++void check_block4(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, char *name, int max_dev){ ++ int i,j; ++ for ( i = 0; i < 4 ; i++ ){ ++ for ( j = 0; j < h ; j++ ){ ++ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j]; ++ diff = diff < 0 ? -diff : diff; ++ if ( diff > max_dev ){ ++ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n", ++ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]); ++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name); ++ dump_block8(test, line_size_test, h); ++ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n"); ++ dump_block4(correct, line_size_correct, h); ++ exit(1); ++ } ++ } ++ } ++} ++ ++void check_block(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, int width, char *name, int max_dev){ ++ int i,j; ++ for ( i = 0; i < width ; i++ ){ ++ for ( j = 0; j < h ; j++ ){ ++ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j]; ++ diff = diff < 0 ? -diff : diff; ++ if ( diff > max_dev ){ ++ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n", ++ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]); ++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name); ++ dump_block(test, line_size_test, h, width); ++ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n"); ++ dump_block(correct, line_size_correct, h, width); ++ exit(1); ++ } ++ } ++ } ++} ++ ++void dump_dct_block(DCTELEM *block){ ++ int i, j; ++ ++ for ( i = 0; i < 8 ; i++ ){ ++ av_log(NULL, AV_LOG_ERROR, "\t"); ++ for ( j = 0; j < 8 ; j++ ){ ++ av_log(NULL, AV_LOG_ERROR, "0x%x ", block[j + i*8]); ++ } ++ av_log(NULL, AV_LOG_ERROR, "\n"); ++ } ++} ++ ++void test_idct_avr32(DCTELEM *block){ ++ DCTELEM testBlock[64]; ++ int i, j; ++ ++ /* Copy transposed block to testBlock */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ testBlock[i + 8*j] = block[j + i*8]; ++ } ++ } ++ ++ idct_avr32(block); ++ simple_idct(&testBlock); ++ ++ for ( i = 0; i < 64 ; i++ ){ ++ if ( block[i] != testBlock[i] ){ ++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from idct is:\n"); ++ dump_dct_block(block); ++ av_log(NULL, AV_LOG_ERROR, "But should be equal to the transposed of:\n"); ++ dump_dct_block(testBlock); ++ exit(1); ++ } ++ } ++} ++ ++void test_idct_put_avr32(uint8_t *dest, int line_size, DCTELEM *block){ ++ uint8_t testBlock[64]; ++ DCTELEM blockCopy[64]; ++ int i, j; ++ ++ /* Copy transposed block to blockCopy */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ blockCopy[i + 8*j] = block[j + i*8]; ++ } ++ } ++ ++ idct_put_avr32(dest, line_size, block); ++ simple_idct_put(&testBlock, 8, blockCopy); ++ ++ check_block8(dest, testBlock, line_size, 8, 8, "idct_put", 1); ++} ++ ++ ++void test_idct_add_avr32(uint8_t *dest, int line_size, DCTELEM *block){ ++ uint8_t testBlock[64]; ++ DCTELEM blockCopy[64]; ++ int i, j; ++ ++ /* Copy dest to testBlock */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ testBlock[i + 8*j] = dest[i + j*line_size]; ++ } ++ } ++ ++ /* Copy transposed block to blockCopy */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ blockCopy[i + 8*j] = block[j + i*8]; ++ } ++ } ++ ++ idct_add_avr32(dest, line_size, block); ++ simple_idct_add(&testBlock, 8, blockCopy); ++ ++ check_block8(dest, testBlock, line_size, 8, 8, "idct_add", 1); ++} ++ ++void test_h264_idct_add_avr32(uint8_t *dest, DCTELEM *block, int stride){ ++ uint8_t testBlock[16]; ++ DCTELEM blockCopy[16]; ++ int i, j; ++ ++ /* Copy dest to testBlock */ ++ for ( i = 0; i < 4 ; i++ ){ ++ for ( j = 0; j < 4 ; j++ ){ ++ testBlock[i + 4*j] = dest[i + j*stride]; ++ } ++ } ++ ++ /* Copy transposed block to blockCopy */ ++ for ( i = 0; i < 16 ; i++ ){ ++ blockCopy[i] = block[i]; ++ } ++ ++ ff_h264_idct_add_c(dest, block, stride); ++ ++ h264_idct_add_avr32(testBlock, blockCopy, 4); ++ ++ check_block(dest, testBlock, stride, 4, 4, 4, "h264_idct_add", 0); ++} ++ ++void test_h264_idct8_add_avr32(uint8_t *dest, DCTELEM *block, int stride){ ++ uint8_t testBlock[8*8]; ++ DCTELEM blockCopy[8*8]; ++ int i, j; ++ ++ /* Copy dest to testBlock */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ testBlock[i + 8*j] = dest[i + j*stride]; ++ } ++ } ++ ++ /* Copy source block to blockCopy */ ++ for ( i = 0; i < 8*8 ; i++ ){ ++ blockCopy[i] = block[i]; ++ } ++ ++ ff_h264_idct8_add_c(dest, block, stride); ++ h264_idct8_add_avr32(testBlock, blockCopy, 8); ++ ++ check_block(dest, testBlock, stride, 8, 8, 8, "h264_idct8_add", 0); ++} ++ ++void test_put_pixels_funcs8(op_pixels_func test, op_pixels_func correct, uint8_t *block, ++ const uint8_t *pixels, int line_size, int h, char *name, int in_h_size, int in_v_size){ ++ uint8_t *testBlock, *testBlock2; ++ int i, j; ++ int input_v_size = h + in_v_size; ++ int input_h_size = 8 + in_h_size; ++ ++ testBlock = alloca(input_h_size*input_v_size); ++ testBlock2 = alloca(input_h_size*input_v_size); ++ ++ for ( i = 0; i < input_h_size ; i++ ){ ++ for ( j = 0; j < input_v_size ; j++ ){ ++ testBlock[i + input_h_size*j] = pixels[i + j*line_size]; ++ } ++ } ++ ++ test(block, pixels, line_size, h); ++ correct(testBlock2, testBlock, input_h_size, h); ++ ++ check_block8(block, testBlock2, line_size, input_h_size, h, name, 0); ++ ++} ++ ++void test_h264_chroma_mc_funcs(h264_chroma_mc_func test, h264_chroma_mc_func correct, uint8_t *dst, ++ uint8_t *src, int stride, int h, int w, int x, int y, char *name){ ++ uint8_t *testBlock, *testBlock2; ++ int i, j; ++ int input_v_size = h + 1; ++ int input_h_size = ((w + 1) + 3) & ~3; ++ ++ testBlock = alloca(input_h_size*input_v_size); ++ testBlock2 = alloca(input_h_size*input_v_size); ++ ++ for ( i = 0; i < w + 1 ; i++ ){ ++ for ( j = 0; j < h + 1 ; j++ ){ ++ testBlock[i + input_h_size*j] = src[i + j*stride]; ++ } ++ } ++ ++ for ( i = 0; i < w ; i++ ){ ++ for ( j = 0; j < h ; j++ ){ ++ testBlock2[i + input_h_size*j] = dst[i + j*stride]; ++ } ++ } ++ ++ test(dst, src, stride, h, x, y); ++ correct(testBlock2, testBlock, input_h_size, h, x, y); ++ ++ check_block(dst, testBlock2, stride, input_h_size, h, w, name, 0); ++ ++} ++ ++void test_qpel_mc_funcs(qpel_mc_func test, qpel_mc_func correct, uint8_t *dst, ++ uint8_t *src, int stride, int size, char *name){ ++ uint8_t *testBlock, *testBlock2; ++ int i, j; ++ int test_stride = size + 8; ++ ++ testBlock = alloca(test_stride*(size+8)) + 4 + test_stride*4; ++ testBlock2 = alloca(test_stride*size); ++ ++ for ( i = -4; i < size+4 ; i++ ){ ++ for ( j = -4; j < size+4 ; j++ ){ ++ testBlock[i + test_stride*j] = src[i + j*stride]; ++ } ++ } ++ ++ for ( i = 0; i < size ; i++ ){ ++ for ( j = 0; j < size ; j++ ){ ++ testBlock2[i + test_stride*j] = dst[i + j*stride]; ++ } ++ } ++ ++ correct(dst, src, stride); ++ test(testBlock2, testBlock, test_stride); ++ ++ check_block(testBlock2, dst, test_stride, stride, size, size, name, 0); ++ ++} ++ ++ ++#define test_pixels_funcs(PFX, NUM ) \ ++void test_ ## PFX ## _pixels ## NUM ## _avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ ++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _avr32, PFX ## _pixels ## NUM ## _c, \ ++ block, pixels, line_size, h, "test_" #PFX "_pixels", 0, 0); } \ ++void test_ ## PFX ## _pixels ## NUM ## _h_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ ++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _h_avr32, PFX ## _pixels ## NUM ## _x2_c, \ ++ block, pixels, line_size, h, "test_" #PFX "_pixels_h", 1, 0); } \ ++void test_ ## PFX ## _pixels ## NUM ## _v_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ ++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _v_avr32, PFX ## _pixels ## NUM ## _y2_c, \ ++ block, pixels, line_size, h, "test_" #PFX "_pixels_v", 0, 1); } \ ++void test_ ## PFX ## _pixels ## NUM ## _hv_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ ++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _hv_avr32, PFX ## _pixels ## NUM ## _xy2_c, \ ++ block, pixels, line_size, h, "test_" #PFX "_pixels_hv", 1, 1); } ++ ++test_pixels_funcs(put, 8); ++test_pixels_funcs(put_no_rnd, 8); ++test_pixels_funcs(put, 16); ++test_pixels_funcs(put_no_rnd, 16); ++ ++test_pixels_funcs(avg, 8); ++test_pixels_funcs(avg_no_rnd, 8); ++test_pixels_funcs(avg, 16); ++test_pixels_funcs(avg_no_rnd, 16); ++ ++#define test_h264_chroma_mc_funcs(PFX, NUM ) \ ++void test_ ## PFX ## _h264_chroma_mc ## NUM ## _pico( uint8_t *dst, uint8_t *src, int stride, int h, int x, int y){ \ ++ test_h264_chroma_mc_funcs(PFX ## _h264_chroma_mc ## NUM ## _pico, PFX ## _h264_chroma_mc ## NUM ## _c, \ ++ dst, src, stride, h, NUM, x, y, "test_" #PFX "_h264_chroma_mc" #NUM "_pico"); } \ ++ ++test_h264_chroma_mc_funcs(put, 2); ++test_h264_chroma_mc_funcs(put, 4); ++test_h264_chroma_mc_funcs(put, 8); ++test_h264_chroma_mc_funcs(avg, 2); ++test_h264_chroma_mc_funcs(avg, 4); ++test_h264_chroma_mc_funcs(avg, 8); ++ ++#define test_qpel_mc_funcs_type(PFX, NUM, TYPE ) \ ++void test_ ## PFX ## NUM ## _ ## TYPE ## _pico( uint8_t *dst, uint8_t *src, int stride){ \ ++ test_qpel_mc_funcs(PFX ## NUM ## _ ## TYPE ## _pico, PFX ## NUM ## _ ## TYPE ## _c, \ ++ dst, src, stride, NUM, "test_" #PFX #NUM "_" #TYPE "_pico"); } ++ ++#define test_qpel_mc_funcs(PFX, NUM) \ ++ test_qpel_mc_funcs_type(PFX, NUM, mc00);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc10);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc20);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc30);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc01);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc11);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc21);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc31);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc02);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc12);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc22);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc32);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc03);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc13);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc23);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc33) ++ ++test_qpel_mc_funcs(put_h264_qpel, 4); ++test_qpel_mc_funcs(put_h264_qpel, 8); ++test_qpel_mc_funcs(put_h264_qpel, 16); ++test_qpel_mc_funcs(avg_h264_qpel, 4); ++test_qpel_mc_funcs(avg_h264_qpel, 8); ++test_qpel_mc_funcs(avg_h264_qpel, 16); ++ ++ ++#define dspfunc(PFX, IDX, NUM) \ ++ c->PFX ## _pixels_tab[IDX][ 0] = DSP_FUNC_NAME( PFX ## NUM ## _mc00_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 1] = DSP_FUNC_NAME( PFX ## NUM ## _mc10_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 2] = DSP_FUNC_NAME( PFX ## NUM ## _mc20_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 3] = DSP_FUNC_NAME( PFX ## NUM ## _mc30_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 4] = DSP_FUNC_NAME( PFX ## NUM ## _mc01_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 5] = DSP_FUNC_NAME( PFX ## NUM ## _mc11_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 6] = DSP_FUNC_NAME( PFX ## NUM ## _mc21_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 7] = DSP_FUNC_NAME( PFX ## NUM ## _mc31_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 8] = DSP_FUNC_NAME( PFX ## NUM ## _mc02_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 9] = DSP_FUNC_NAME( PFX ## NUM ## _mc12_pico ); \ ++ c->PFX ## _pixels_tab[IDX][10] = DSP_FUNC_NAME( PFX ## NUM ## _mc22_pico ); \ ++ c->PFX ## _pixels_tab[IDX][11] = DSP_FUNC_NAME( PFX ## NUM ## _mc32_pico ); \ ++ c->PFX ## _pixels_tab[IDX][12] = DSP_FUNC_NAME( PFX ## NUM ## _mc03_pico ); \ ++ c->PFX ## _pixels_tab[IDX][13] = DSP_FUNC_NAME( PFX ## NUM ## _mc13_pico ); \ ++ c->PFX ## _pixels_tab[IDX][14] = DSP_FUNC_NAME( PFX ## NUM ## _mc23_pico ); \ ++ c->PFX ## _pixels_tab[IDX][15] = DSP_FUNC_NAME( PFX ## NUM ## _mc33_pico ) ++ ++#endif ++ ++void dsputil_init_avr32(DSPContext* c, AVCodecContext *avctx) ++{ ++ ++ /* H264 */ ++ ++ if ( 0 /*avr32_use_pico*/ ){ ++ c->put_h264_chroma_pixels_tab[0]= DSP_FUNC_NAME(put_h264_chroma_mc8_pico); ++ c->put_h264_chroma_pixels_tab[1]= DSP_FUNC_NAME(put_h264_chroma_mc4_pico); ++ c->put_h264_chroma_pixels_tab[2]= DSP_FUNC_NAME(put_h264_chroma_mc2_pico); ++ ++ c->avg_h264_chroma_pixels_tab[0]= DSP_FUNC_NAME(avg_h264_chroma_mc8_pico); ++ c->avg_h264_chroma_pixels_tab[1]= DSP_FUNC_NAME(avg_h264_chroma_mc4_pico); ++ c->avg_h264_chroma_pixels_tab[2]= DSP_FUNC_NAME(avg_h264_chroma_mc2_pico); ++ } ++ ++#define dspfunc(PFX, IDX, NUM) \ ++ c->PFX ## _pixels_tab[IDX][ 0] = DSP_FUNC_NAME( PFX ## NUM ## _mc00_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 1] = DSP_FUNC_NAME( PFX ## NUM ## _mc10_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 2] = DSP_FUNC_NAME( PFX ## NUM ## _mc20_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 3] = DSP_FUNC_NAME( PFX ## NUM ## _mc30_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 4] = DSP_FUNC_NAME( PFX ## NUM ## _mc01_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 5] = DSP_FUNC_NAME( PFX ## NUM ## _mc11_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 6] = DSP_FUNC_NAME( PFX ## NUM ## _mc21_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 7] = DSP_FUNC_NAME( PFX ## NUM ## _mc31_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 8] = DSP_FUNC_NAME( PFX ## NUM ## _mc02_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 9] = DSP_FUNC_NAME( PFX ## NUM ## _mc12_pico ); \ ++ c->PFX ## _pixels_tab[IDX][10] = DSP_FUNC_NAME( PFX ## NUM ## _mc22_pico ); \ ++ c->PFX ## _pixels_tab[IDX][11] = DSP_FUNC_NAME( PFX ## NUM ## _mc32_pico ); \ ++ c->PFX ## _pixels_tab[IDX][12] = DSP_FUNC_NAME( PFX ## NUM ## _mc03_pico ); \ ++ c->PFX ## _pixels_tab[IDX][13] = DSP_FUNC_NAME( PFX ## NUM ## _mc13_pico ); \ ++ c->PFX ## _pixels_tab[IDX][14] = DSP_FUNC_NAME( PFX ## NUM ## _mc23_pico ); \ ++ c->PFX ## _pixels_tab[IDX][15] = DSP_FUNC_NAME( PFX ## NUM ## _mc33_pico ) ++ ++ if ( avr32_use_pico ){ ++ dspfunc(put_h264_qpel, 0, 16); ++ dspfunc(put_h264_qpel, 1, 8); ++ dspfunc(put_h264_qpel, 2, 4); ++ dspfunc(avg_h264_qpel, 0, 16); ++ dspfunc(avg_h264_qpel, 1, 8); ++ dspfunc(avg_h264_qpel, 2, 4); ++ } ++ ++ c->idct_put= DSP_FUNC_NAME(idct_put_avr32); ++ c->idct_add= DSP_FUNC_NAME(idct_add_avr32); ++ c->idct = DSP_FUNC_NAME(idct_avr32); ++ c->h264_idct_add = DSP_FUNC_NAME(h264_idct_add_avr32); ++ c->h264_idct8_add = DSP_FUNC_NAME(h264_idct8_add_avr32); ++ ++ /*c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_avr32;*/ ++ ++ c->idct_permutation_type= FF_TRANSPOSE_IDCT_PERM; ++ ++ c->fdct = fdct_avr32; ++ ++ c->clear_blocks = clear_blocks_avr32; ++ ++#undef dspfunc ++#define dspfunc(PFX, IDX, NUM) \ ++ c->PFX ## _pixels_tab[IDX][0] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _avr32 ); \ ++ c->PFX ## _pixels_tab[IDX][1] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _h_avr32); \ ++ c->PFX ## _pixels_tab[IDX][2] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _v_avr32); \ ++ c->PFX ## _pixels_tab[IDX][3] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _hv_avr32) ++ ++ dspfunc(put, 0, 16); ++ dspfunc(put_no_rnd, 0, 16); ++ dspfunc(put, 1, 8); ++ dspfunc(put_no_rnd, 1, 8); ++ ++ dspfunc(avg, 1, 8); ++ dspfunc(avg_no_rnd, 1, 8); ++ dspfunc(avg, 0, 16); ++ dspfunc(avg_no_rnd, 0, 16); ++#undef dspfunc ++ ++} ++ ++ ++ ++#if 0 ++int main(int argc, char *argv[]){ ++ ++ ++} ++#endif ++ +diff --git a/libavcodec/avr32/fdct.S b/libavcodec/avr32/fdct.S +new file mode 100644 +index 0000000..be45b86 +--- /dev/null ++++ b/libavcodec/avr32/fdct.S +@@ -0,0 +1,541 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++//********************************************************** ++//* 2-D fDCT, Based on: * ++//* C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical * ++//* Fast 1-D DCT Algorithms with 11 Multiplications", * ++//* Proc. Int'l. Conf. on Acoustics, Speech, and Signal * ++//* Processing 1989 (ICASSP '89), pp. 988-991. * ++//* * ++//* Fixed point implementation optimized for the AVR-II * ++//* instruction set. If a table is used for the * ++//* coeffisients we can load two and two of them from * ++//* This will give a reduction of ++//* * ++//* * ++//********************************************************** ++ ++ ++/* This routine is a slow-but-accurate integer implementation of the ++ * forward DCT (Discrete Cosine Transform). Taken from the IJG software ++ * ++ * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT ++ * on each column. Direct algorithms are also available, but they are ++ * much more complex and seem not to be any faster when reduced to code. ++ * ++ * This implementation is based on an algorithm described in ++ * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT ++ * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, ++ * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. ++ * The primary algorithm described there uses 11 multiplies and 29 adds. ++ * We use their alternate method with 12 multiplies and 32 adds. ++ * The advantage of this method is that no data path contains more than one ++ * multiplication; this allows a very simple and accurate implementation in ++ * scaled fixed-point arithmetic, with a minimal number of shifts. ++ * ++ * The poop on this scaling stuff is as follows: ++ * ++ * Each 1-D DCT step produces outputs which are a factor of sqrt(N) ++ * larger than the true DCT outputs. The final outputs are therefore ++ * a factor of N larger than desired; since N=8 this can be cured by ++ * a simple right shift at the end of the algorithm. The advantage of ++ * this arrangement is that we save two multiplications per 1-D DCT, ++ * because the y0 and y4 outputs need not be divided by sqrt(N). ++ * In the IJG code, this factor of 8 is removed by the quantization step ++ * (in jcdctmgr.c), here it is removed. ++ * ++ * We have to do addition and subtraction of the integer inputs, which ++ * is no problem, and multiplication by fractional constants, which is ++ * a problem to do in integer arithmetic. We multiply all the constants ++ * by CONST_SCALE and convert them to integer constants (thus retaining ++ * CONST_BITS bits of precision in the constants). After doing a ++ * multiplication we have to divide the product by CONST_SCALE, with proper ++ * rounding, to produce the correct output. This division can be done ++ * cheaply as a right shift of CONST_BITS bits. We postpone shifting ++ * as long as possible so that partial sums can be added together with ++ * full fractional precision. ++ * ++ * The outputs of the first pass are scaled up by PASS1_BITS bits so that ++ * they are represented to better-than-integral precision. These outputs ++ * require 8 + PASS1_BITS + 3 bits; this fits in a 16-bit word ++ * with the recommended scaling. (For 12-bit sample data, the intermediate ++ * array is INT32 anyway.) ++ * ++ * To avoid overflow of the 32-bit intermediate results in pass 2, we must ++ * have 8 + CONST_BITS + PASS1_BITS <= 26. Error analysis ++ * shows that the values given below are the most effective. ++ * ++ * We can gain a little more speed, with a further compromise in accuracy, ++ * by omitting the addition in a descaling shift. This yields an incorrectly ++ * rounded result half the time... ++ */ ++ ++ .global fdct_avr32 ++ ++ ++ ++#define CONST_BITS 13 ++#define PASS1_BITS 2 ++ ++#define FIX_0_298631336 2446 /* FIX(0.298631336) */ ++#define FIX_0_390180644 3196 /* FIX(0.390180644) */ ++#define FIX_0_541196100 4433 /* FIX(0.541196100) */ ++#define FIX_0_765366865 6270 /* FIX(0.765366865) */ ++#define FIX_0_899976223 7373 /* FIX(0.899976223) */ ++#define FIX_1_175875602 9633 /* FIX(1.175875602) */ ++#define FIX_1_501321110 12299 /* FIX(1.501321110) */ ++#define FIX_1_847759065 15137 /* FIX(1.847759065) */ ++#define FIX_1_961570560 16069 /* FIX(1.961570560) */ ++#define FIX_2_053119869 16819 /* FIX(2.053119869) */ ++#define FIX_2_562915447 20995 /* FIX(2.562915447) */ ++#define FIX_3_072711026 25172 /* FIX(3.072711026) */ ++ ++ ++/* ++ * Perform an integer forward DCT on one block of samples. ++ */ ++ ++//void ++//fdct_int32(short *const block) ++//{ ++// int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++// int tmp10, tmp11, tmp12, tmp13; ++// int z1, z2, z3, z4, z5; ++// short *blkptr; ++// int *dataptr; ++// int data[64]; ++// int i; ++// ++// /* Pass 1: process rows. */ ++// /* Note results are scaled up by sqrt(8) compared to a true DCT; */ ++// /* furthermore, we scale the results by 2**PASS1_BITS. */ ++// ++// dataptr = data; ++// blkptr = block; ++ ++ .text ++fdct_avr32: ++ pushm r0-r3, r4-r7, lr ++#define loop_ctr r0 ++#define blkptr r12 ++#define x0 r1 ++#define x1 r2 ++#define x2 r3 ++#define x3 r4 ++#define x4 r5 ++#define x5 r6 ++#define x6 r7 ++#define x7 r8 ++#define tmp0 r5 ++#define tmp7 r2 ++#define tmp1 r3 ++#define tmp6 r4 ++#define tmp2 r9 ++#define tmp5 r8 ++#define tmp3 r7 ++#define tmp4 r6 ++ ++ ++ mov loop_ctr, 8 ++// for (i = 0; i < 8; i++) { ++ROW_LOOP: ++ ++ ldm blkptr, r1, r2, r3, r4 ++ ++// tmp2 = blkptr[2] + blkptr[5]; ++// tmp3 = blkptr[3] + blkptr[4]; ++ paddx.h r5, r3, r2 ++// tmp5 = blkptr[2] - blkptr[5]; ++// tmp4 = blkptr[3] - blkptr[4]; ++ psubx.h r6, r3, r2 ++// tmp0 = blkptr[0] + blkptr[7]; ++// tmp1 = blkptr[1] + blkptr[6]; ++ paddx.h r2, r4, r1 ++// tmp7 = blkptr[0] - blkptr[7]; ++// tmp6 = blkptr[1] - blkptr[6]; ++ psubx.h r3, r4, r1 ++ ++// /* Even part per LL&M figure 1 --- note that published figure is faulty; ++// * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". ++// */ ++ ++#define tmp10 r1 ++#define tmp13 r5 ++#define tmp11 r7 ++#define tmp12 r3 ++#define z1 r9 ++ ++// tmp10 = tmp0 + tmp3; ++// tmp13 = tmp0 - tmp3; ++ paddsub.h r1, r2:t, r5:b ++// tmp11 = tmp1 + tmp2; ++// tmp12 = tmp1 - tmp2; ++ paddsub.h r4, r2:b, r5:t ++ ++ ++// dataptr[0] = (tmp10 + tmp11) << PASS1_BITS; ++// dataptr[4] = (tmp10 - tmp11) << PASS1_BITS; ++ paddsub.h r7, r1:t, r4:t ++ ld.w r10, pc[const_table - .] ++ plsl.h r7, r7, PASS1_BITS ++ ++// z1 = (tmp12 + tmp13) * FIX_0_541196100; ++ addhh.w r8, r4:b, r1:b ++ mulhh.w r8, r8:b, r10:t ++ ++// dataptr[2] = ++// DESCALE(z1 + tmp13 * FIX_0_765366865, CONST_BITS - PASS1_BITS); ++// dataptr[6] = ++// DESCALE(z1 + tmp12 * (-FIX_1_847759065), CONST_BITS - PASS1_BITS); ++ mulhh.w r9, r1:b, r10:b ++ ld.w r10, pc[const_table - . + 4] ++ add r1, r8, r9 ++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ mulhh.w r9, r4:b, r10:t ++ add r4, r8, r9 ++ satrnds r4 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ ++// /* Odd part per figure 8 --- note paper omits factor of sqrt(2). ++// * cK represents cos(K*pi/16). ++// * i0..i3 in the paper are tmp4..tmp7 here. ++// */ ++ ++#define z2 r5 ++#define z3 r6 ++#define z4 r7 ++#define z5 r8 ++ ++// z4 = tmp5 + tmp7; ++// z3 = tmp4 + tmp6; ++ padd.h r2, r6, r3 ++// z2 = tmp5 + tmp6; ++// z1 = tmp4 + tmp7; ++ paddx.h r5, r6, r3 ++ ++ lddpc r9, pc[const_table - . + 8] ++// z5 = (z3 + z4) * FIX_1_175875602; /* sqrt(2) * c3 */ ++ addhh.w r8, r2:t, r2:b ++ mulhh.w r8, r8:b, r10:b ++ lddpc r10, pc[const_table - . + 12] ++ ++ ++// tmp4 *= FIX_0_298631336; /* sqrt(2) * (-c1+c3+c5-c7) */ ++ mulhh.w r11, r6:b, r9:t ++ ++// tmp5 *= FIX_2_053119869; /* sqrt(2) * ( c1+c3-c5+c7) */ ++ mulhh.w r6, r6:t, r9:b ++ ++// tmp6 *= FIX_3_072711026; /* sqrt(2) * ( c1+c3+c5-c7) */ ++ lddpc r9, pc[const_table - . + 20] ++ mulhh.w lr, r3:b, r10:t ++ ++// tmp7 *= FIX_1_501321110; /* sqrt(2) * ( c1+c3-c5-c7) */ ++ mulhh.w r3, r3:t, r10:b ++ ++// z3 *= -FIX_1_961570560; /* sqrt(2) * (-c3-c5) */ ++ mulhh.w r10, r2:b, r9:t ++ ++// z4 *= -FIX_0_390180644; /* sqrt(2) * (c5-c3) */ ++ mulhh.w r2, r2:t, r9:b ++ lddpc r9, pc[const_table - . + 16] ++// z3 += z5; ++// z4 += z5; ++ add r10, r8 ++ add r2, r8 ++ ++// z1 *= -FIX_0_899976223; /* sqrt(2) * (c7-c3) */ ++ mulhh.w r8, r5:b, r9:t ++ ++// z2 *= -FIX_2_562915447; /* sqrt(2) * (-c1-c3) */ ++ mulhh.w r5, r5:t, r9:b ++ ++// dataptr[7] = DESCALE(tmp4 + z1 + z3, CONST_BITS - PASS1_BITS); ++ add r11, r8 ++ add r11, r10 ++ satrnds r11 >> (CONST_BITS - PASS1_BITS), 31 ++ ++// dataptr[5] = DESCALE(tmp5 + z2 + z4, CONST_BITS - PASS1_BITS); ++ add r6, r5 ++ ++ sthh.w blkptr[6*2], r4:b, r11:b ++ add r6, r2 ++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 ++ ++// dataptr[3] = DESCALE(tmp6 + z2 + z3, CONST_BITS - PASS1_BITS); ++ add lr, r5 ++ sthh.w blkptr[4*2], r7:b, r6:b ++ add lr, r10 ++ satrnds lr >> (CONST_BITS - PASS1_BITS), 31 ++ ++// dataptr[1] = DESCALE(tmp7 + z1 + z4, CONST_BITS - PASS1_BITS); ++ add r3, r8 ++ sthh.w blkptr[2*2], r1:b, lr:b ++ add r3, r2 ++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ ++ ++// dataptr += 8; /* advance pointer to next row */ ++// blkptr += 8; ++ sthh.w blkptr[0], r7:t, r3:b ++ sub blkptr, -16 ++ sub loop_ctr, 1 ++ brne ROW_LOOP ++ ++// } ++ ++ /* Pass 2: process columns. ++ * We remove the PASS1_BITS scaling, but leave the results scaled up ++ * by an overall factor of 8. ++ */ ++ ++// dataptr = data; ++ sub blkptr, 128 ++ ++ mov loop_ctr, 4 ++// for (i = 0; i < 8; i++) { ++COLOUMN_LOOP: ++ ld.w r1, blkptr[0] ++ ld.w r2, blkptr[1*8*2] ++ ld.w r3, blkptr[2*8*2] ++ ld.w r4, blkptr[3*8*2] ++ ld.w r5, blkptr[4*8*2] ++ ld.w r6, blkptr[5*8*2] ++ ld.w r7, blkptr[6*8*2] ++ ld.w r8, blkptr[7*8*2] ++ ++// tmp0 = blkptr[0] + blkptr[7*8]; ++ padds.sh r9, r1, r8 ++// tmp7 = blkptr[0] - blkptr[7*8]; ++ psubs.sh r1, r1, r8 ++// tmp1 = blkptr[1*8] + blkptr[6*8]; ++ padds.sh r8, r2, r7 ++// tmp6 = blkptr[1*8] - blkptr[6*8]; ++ psubs.sh r2, r2, r7 ++// tmp2 = blkptr[2*8] + blkptr[5*8]; ++ padds.sh r7, r3, r6 ++// tmp5 = blkptr[2*8] - blkptr[5*8]; ++ psubs.sh r3, r3, r6 ++// tmp3 = blkptr[3*8] + blkptr[4*8]; ++ padds.sh r6, r4, r5 ++// tmp4 = blkptr[3*8] - blkptr[4*8]; ++ psubs.sh r4, r4, r5 ++ ++// /* even part per ll&m figure 1 --- note that published figure is faulty; ++// * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". ++// */ ++// ++// tmp10 = tmp0 + tmp3; ++ padds.sh r5, r9, r6 ++// tmp13 = tmp0 - tmp3; ++ psubs.sh r9, r9, r6 ++// tmp11 = tmp1 + tmp2; ++ padds.sh r6, r8, r7 ++// tmp12 = tmp1 - tmp2; ++ psubs.sh r8, r8, r7 ++ ++// dataptr[0] = DESCALE(tmp10 + tmp11, PASS1_BITS); ++// dataptr[32] = DESCALE(tmp10 - tmp11, PASS1_BITS); ++//Might get an overflow here ++ padds.sh r7, r5, r6 ++ psubs.sh r5, r5, r6 ++ ++ //Rounding ++ mov lr, (1 << (PASS1_BITS + 2)) ++ orh lr, hi(1 << (16 + PASS1_BITS + 2)) ++ padds.sh r7, r7, lr ++ padds.sh r5, r5, lr ++ ++ pasr.h r7, r7, PASS1_BITS + 3 ++ pasr.h r5, r5, PASS1_BITS + 3 ++ st.w r12[0], r7 ++ st.w r12[4*8*2], r5 ++ ++ lddpc r10, const_table2 ++ ++ ++// z1 = (tmp12 + tmp13) * FIX_0_541196100; ++ padds.sh r5, r8, r9 ++ mulhh.w r6, r5:t, r10:t ++ mulhh.w r7, r5:b, r10:t ++ ++// dataptr[16] = ++// DESCALE(z1 + tmp13 * FIX_0_765366865, CONST_BITS + PASS1_BITS); ++ lddpc r11, const_table2 + 4 ++ mulhh.w lr, r9:t, r10:b ++ mulhh.w r9, r9:b, r10:b ++ add lr, r6 ++ add r9, r7 ++ satrnds lr >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r9 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[2*8*2], lr:b, r9:b ++ ++// dataptr[48] = ++// DESCALE(z1 + tmp12 * (-FIX_1_847759065), CONST_BITS + PASS1_BITS); ++ mulhh.w lr, r8:t, r11:t ++ mulhh.w r8, r8:b, r11:t ++ add lr, r6 ++ add r8, r7 ++ satrnds lr >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r8 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[6*8*2], lr:b, r8:b ++ ++// /* Odd part per figure 8 --- note paper omits factor of sqrt(2). ++// * cK represents cos(K*pi/16). ++// * i0..i3 in the paper are tmp4..tmp7 here. ++// */ ++// ++// z2 = tmp5 + tmp6; ++// z3 = tmp4 + tmp6; ++// z4 = tmp5 + tmp7; ++ padds.sh r5, r3, r2 ++ padds.sh r6, r4, r2 ++ padds.sh r7, r3, r1 ++ ++// z5 = (z3 + z4) * FIX_1_175875602; /* sqrt(2) * c3 */ ++ padds.sh r8, r6, r7 ++ mulhh.w r9, r8:t, r11:b ++ mulhh.w r8, r8:b, r11:b ++ ++// z3 *= -FIX_1_961570560; /* sqrt(2) * (-c3-c5) */ ++// z3 += z5; ++ lddpc r11, const_table2 + 8 ++ mulhh.w r10, r6:t, r11:t ++ mulhh.w r6, r6:b, r11:t ++ add r10, r9 ++ add r6, r8 ++ ++// z4 *= -FIX_0_390180644; /* sqrt(2) * (c5-c3) */ ++// z4 += z5; ++ mulhh.w lr, r7:t, r11:b ++ mulhh.w r7, r7:b, r11:b ++ lddpc r11, const_table2 + 12 ++ st.w --sp,r0 ++ add lr, r9 ++ add r7, r8 ++ ++// tmp6 *= FIX_3_072711026; /* sqrt(2) * ( c1+c3+c5-c7) */ ++ mulhh.w r0, r2:t, r11:t ++ machh.w r0, r5:t, r11:b ++ mulhh.w r2, r2:b, r11:t ++ machh.w r2, r5:b, r11:b ++ ++// z2 *= -FIX_2_562915447; /* sqrt(2) * (-c1-c3) */ ++// dataptr[24] = DESCALE(tmp6 + z2 + z3, CONST_BITS + PASS1_BITS); ++ add r0, r10 ++ lddpc r11, const_table2 + 16 ++ add r2, r6 ++ satrnds r0 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r2 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[3*8*2], r0:b, r2:b ++// tmp5 *= FIX_2_053119869; /* sqrt(2) * ( c1+c3-c5+c7) */ ++ mulhh.w r0, r3:t, r11:t ++ machh.w r0, r5:t, r11:b ++ mulhh.w r2, r3:b, r11:t ++ machh.w r2, r5:b, r11:b ++ add r0, lr ++ lddpc r11, const_table2 + 20 ++ add r2, r7 ++ ++// dataptr[40] = DESCALE(tmp5 + z2 + z4, CONST_BITS + PASS1_BITS); ++ satrnds r0 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r2 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[5*8*2], r0:b, r2:b ++ ++ ++// z1 = tmp4 + tmp7; ++ padds.sh r2, r4, r1 ++ ++// tmp4 *= FIX_0_298631336; /* sqrt(2) * (-c1+c3+c5-c7) */ ++ mulhh.w r3, r4:t, r11:t ++ machh.w r3, r2:t, r11:b ++ mulhh.w r4, r4:b, r11:t ++ machh.w r4, r2:b, r11:b ++ add r3, r10 ++ lddpc r11, const_table2 + 24 ++ add r4, r6 ++ ++// z1 *= -FIX_0_899976223; /* sqrt(2) * (c7-c3) */ ++// dataptr[56] = DESCALE(tmp4 + z1 + z3, CONST_BITS + PASS1_BITS); ++ satrnds r3 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r4 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[7*8*2], r3:b, r4:b ++ ++ ++// tmp7 *= FIX_1_501321110; /* sqrt(2) * ( c1+c3-c5-c7) */ ++ mulhh.w r3, r1:t, r11:t ++ machh.w r3, r2:t, r11:b ++ mulhh.w r4, r1:b, r11:t ++ machh.w r4, r2:b, r11:b ++ add r3, lr ++ add r4, r7 ++ ++// dataptr[8] = DESCALE(tmp7 + z1 + z4, CONST_BITS + PASS1_BITS); ++ satrnds r3 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r4 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[1*8*2], r3:b, r4:b ++ ld.w r0, sp++ ++ ++// dataptr++; /* advance pointer to next column */ ++ sub blkptr, -4 ++ sub loop_ctr, 1 ++ brne COLOUMN_LOOP ++ ++// } ++ ++ popm r0-r3, r4-r7, pc ++ ++// /* descale */ ++// for (i = 0; i < 64; i++) ++// block[i] = (short int) DESCALE(data[i], 3); ++ ++ ++//} ++ ++ ++ .align 2 ++const_table: .short FIX_0_541196100, FIX_0_765366865, -FIX_1_847759065, FIX_1_175875602 ++ .short FIX_0_298631336, FIX_2_053119869, FIX_3_072711026, FIX_1_501321110 ++ .short -FIX_0_899976223,-FIX_2_562915447, -FIX_1_961570560, -FIX_0_390180644 ++ ++const_table2: .short FIX_0_541196100, FIX_0_765366865, -FIX_1_847759065, FIX_1_175875602 ++ .short -FIX_1_961570560, -FIX_0_390180644, FIX_3_072711026, -FIX_2_562915447 ++ .short FIX_2_053119869, -FIX_2_562915447, FIX_0_298631336, -FIX_0_899976223 ++ .short FIX_1_501321110, -FIX_0_899976223 ++ ++ ++ ++ +diff --git a/libavcodec/avr32/h264idct.S b/libavcodec/avr32/h264idct.S +new file mode 100644 +index 0000000..4b23e2d +--- /dev/null ++++ b/libavcodec/avr32/h264idct.S +@@ -0,0 +1,451 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++ .global h264_idct_add_avr32 ++ ++ /* Macro for performing the 1-D transform on one row line. ++ ++ The register 'w01' should contain the first two pixels, ++ and the register 'w23' should contain the last two pixels ++ in the line. The resulting line is placed in p01 and p23 ++ so that { w01, w23 } = { x0, x1, x3, x2 }. ++ 'tmp' and 'tmp2' should be scratchpad registers. */ ++ .macro transform_row w01, w23, tmp, tmp2 ++ add \tmp, \w23, \w01 << 1 /* tmp = { xxxx, 2*w1 + w3 } */ ++ sub \tmp2, \w01, \w23 << 1 /* tmp2 = { xxxx, w1 - 2*w3 } */ ++ bfins \tmp2, \tmp, 16, 16 /* tmp2 = { 2*w1 + w3, w1 - 2*w3 } */ ++ pasr.h \tmp2, \tmp2, 1 /* tmp2 = { w1 + w3/2, w1/2 - w3 } */ ++ paddsub.h \tmp, \w01:t, \w23:t /* tmp = { w0 + w2, w0 - w2 } */ ++ padd.h \w01, \tmp, \tmp2 /* w01 = { w0 + w2 + w1 + w3/2, w0 - w2 + w1/2 - w3 } */ ++ psub.h \w23, \tmp, \tmp2 /* w23 = { w0 + w2 - w1 - w3/2, w0 - w2 - w1/2 + w3 } */ ++ .endm ++ ++ /* Macro for performing the 1-D transform on two columns. ++ ++ The registers w0, w1, w2, w3 should each contain two ++ packed samples from the two colomns to transform. ++ tmp and tmp2 are scratchpad registers. ++ ++ The resulting transformed columns are placed in the ++ same positions as the input columns. ++ */ ++ .macro transform_2columns w0, w1, w2, w3, tmp, tmp2 ++ padd.h \tmp, \w0, \w2 /* tmp = z0 = w0 + w2 */ ++ psub.h \w0, \w0, \w2 /* w0 = z1 = w0 - w2 */ ++ pasr.h \w2, \w1, 1 /* w2 = w1/2 */ ++ pasr.h \tmp2, \w3, 1 /* tmp2 = w3/2 */ ++ psub.h \w3, \w2, \w3 /* w3 = z2 = w1/2 - w3 */ ++ padd.h \tmp2, \w1, \tmp2/* tmp2 = z3 = w1 + w3/2 */ ++ padd.h \w1, \w0, \w3 /* w1 = x1 = z1 + z2 */ ++ psub.h \w2, \w0, \w3 /* w2 = x2 = z1 - z2 */ ++ padd.h \w0, \tmp, \tmp2/* w0 = x0 = z0 + z3 */ ++ psub.h \w3, \tmp, \tmp2/* w3 = x3 = z0 - z3 */ ++ /* Scale down result. */ ++ pasr.h \w0, \w0, 6 ++ pasr.h \w1, \w1, 6 ++ pasr.h \w2, \w2, 6 ++ pasr.h \w3, \w3, 6 ++ .endm ++ ++/*void h264_idct_add_avr32(uint8_t *dst, DCTELEM *block, int stride)*/ ++ ++h264_idct_add_avr32: ++ ++ stm --sp,r0-r3,r4-r7, lr ++ ++ /* Setup rounding factor. */ ++ mov r0, (1 << 5) ++ lsl r0, 16 ++ ++ /* Load block */ ++ ldm r11,r2-r9 ++ /* r9 = { w00, w01 }, ++ r8 = { w02, w03 }, ++ r7 = { w10, w11 }, ++ r6 = { w12, w13 }, ++ r5 = { w20, w21 }, ++ r4 = { w22, w23 }, ++ r3 = { w30, w31 }, ++ r2 = { w32, w33 } */ ++ ++ ++ /* Add the rounding factor to w00. */ ++ add r9, r0 ++ ++ /* Transform rows */ ++ transform_row r9, r8, r0, r1 ++ transform_row r7, r6, r0, r1 ++ transform_row r5, r4, r0, r1 ++ transform_row r3, r2, r0, r1 ++ ++ /* Transform columns */ ++ transform_2columns r9, r7, r5, r3, r0, r1 ++ transform_2columns r8, r6, r4, r2, r0, r1 ++ ++ /* Load predicted pixels.*/ ++ ld.w lr, r12[0] ++ ld.w r11, r12[r10] ++ ++ /* Unpack to halwords. */ ++ punpckub.h r0, lr:t ++ punpckub.h r1, lr:b ++ ++ /* Add with transformed row. */ ++ padd.h r0, r0, r9 ++ paddx.h r1, r1, r8 ++ /* Pack and saturate back to 8-bit pixels. */ ++ packsh.ub r0, r0, r1 ++ ++ /* Unpack to halwords. */ ++ punpckub.h lr, r11:t ++ punpckub.h r11, r11:b ++ ++ /* Add with transformed row. */ ++ padd.h lr, lr, r7 ++ paddx.h r11, r11, r6 ++ /* Pack and saturate back to 8-bit pixels. */ ++ packsh.ub r1, lr, r11 ++ ++ /* Store back to frame. */ ++ st.w r12[0], r0 ++ st.w r12[r10], r1 ++ ++ add r12, r12, r10 << 1 ++ ++ /* Load predicted pixels.*/ ++ ld.w lr, r12[0] ++ ld.w r11, r12[r10] ++ ++ /* Unpack to halwords. */ ++ punpckub.h r0, lr:t ++ punpckub.h r1, lr:b ++ ++ /* Add with transformed row. */ ++ padd.h r0, r0, r5 ++ paddx.h r1, r1, r4 ++ /* Pack and saturate back to 8-bit pixels. */ ++ packsh.ub r0, r0, r1 ++ ++ /* Unpack to halwords. */ ++ punpckub.h lr, r11:t ++ punpckub.h r11, r11:b ++ ++ /* Add with transformed row. */ ++ padd.h lr, lr, r3 ++ paddx.h r11, r11, r2 ++ /* Pack and saturate back to 8-bit pixels. */ ++ packsh.ub r1, lr, r11 ++ ++ /* Store back to frame. */ ++ st.w r12[0], r0 ++ st.w r12[r10], r1 ++ ++ ldm sp++,r0-r3,r4-r7, pc ++ ++ ++ .global h264_idct8_add_avr32 ++//void ff_h264_idct8_add_c(uint8_t *dst, DCTELEM *block, int stride){ ++ ++h264_idct8_add_avr32: ++ stm --sp,r0-r3,r4-r7, lr ++ ++ /* Push dst and stride on stack */ ++ stm --sp,r10,r12 ++ ++// int i; ++// DCTELEM (*src)[8] = (DCTELEM(*)[8])block; ++// uint8_t *cm = cropTbl + MAX_NEG_CROP; ++ ++// block[0] += 32; ++ ++ ++// for( i = 0; i < 8; i++ ) ++// { ++ mov lr, 4 ++0: ++ ld.w r7, r11[0*(8*2)] ++ ld.w r6, r11[1*(8*2)] ++ ld.w r5, r11[2*(8*2)] ++ ld.w r4, r11[3*(8*2)] ++ ld.w r3, r11[4*(8*2)] ++ ld.w r2, r11[5*(8*2)] ++ ld.w r1, r11[6*(8*2)] ++ ld.w r0, r11[7*(8*2)] ++ ++/* ++ ++ const int a0 = src[0][i] + src[4][i]; ++ const int a2 = src[0][i] - src[4][i]; ++ const int a4 = (src[2][i]>>1) - src[6][i]; ++ const int a6 = (src[6][i]>>1) + src[2][i]; ++*/ ++ padd.h r8, r7, r3 /* r8 = a0 */ ++ psub.h r7, r7, r3 /* r7 = a2 */ ++ pasr.h r3, r5, 1 /* r3 = src[2][i] >> 1 */ ++ pasr.h r9, r1, 1 /* r9 = src[6][i] >> 1 */ ++ psub.h r3, r3, r1 /* r3 = a4 */ ++ padd.h r9, r9, r5 /* r9 = a6 */ ++ ++/* ++ const int b0 = a0 + a6; ++ const int b2 = a2 + a4; ++ const int b4 = a2 - a4; ++ const int b6 = a0 - a6; ++*/ ++ padd.h r1, r8, r9 /* r1 = b0 */ ++ psub.h r8, r8, r9 /* r8 = b6 */ ++ padd.h r5, r7, r3 /* r5 = b2 */ ++ psub.h r7, r7, r3 /* r7 = b4 */ ++ ++/* ++ const int a1 = -src[3][i] + src[5][i] - src[7][i] - (src[7][i]>>1); ++ const int a3 = src[1][i] + src[7][i] - src[3][i] - (src[3][i]>>1); ++ const int a5 = -src[1][i] + src[7][i] + src[5][i] + (src[5][i]>>1); ++ const int a7 = src[3][i] + src[5][i] + src[1][i] + (src[1][i]>>1); ++*/ ++ pasr.h r3, r0, 1 ++ padd.h r3, r3, r0 ++ psub.h r3, r2, r3 ++ psub.h r3, r3, r4 /* r3 = a1 */ ++ ++ pasr.h r9, r4, 1 ++ padd.h r9, r9, r4 ++ psub.h r9, r0, r9 ++ padd.h r9, r6, r9 /* r9 = a3 */ ++ ++ pasr.h r10, r2, 1 ++ padd.h r10, r10, r2 ++ padd.h r10, r10, r0 ++ psub.h r10, r10, r6 /* r10 = a5 */ ++ ++ pasr.h r0, r6, 1 ++ padd.h r0, r0, r6 ++ padd.h r0, r0, r2 ++ padd.h r0, r0, r4 /* r0 = a7 */ ++/* ++ const int b1 = (a7>>2) + a1; ++ const int b3 = a3 + (a5>>2); ++ const int b5 = (a3>>2) - a5; ++ const int b7 = a7 - (a1>>2); ++*/ ++ pasr.h r2, r0, 2 ++ padd.h r2, r2, r3 /* r2 = b1 */ ++ pasr.h r3, r3, 2 ++ psub.h r3, r0, r3 /* r3 = b7 */ ++ ++ pasr.h r0, r10, 2 ++ padd.h r0, r0, r9 /* r0 = b3 */ ++ pasr.h r9, r9, 2 ++ psub.h r9, r9, r10 /* r9 = b5 */ ++ ++ ++/* ++ src[0][i] = b0 + b7; ++ src[7][i] = b0 - b7; ++ src[1][i] = b2 + b5; ++ src[6][i] = b2 - b5; ++ src[2][i] = b4 + b3; ++ src[5][i] = b4 - b3; ++ src[3][i] = b6 + b1; ++ src[4][i] = b6 - b1; */ ++ ++ padd.h r4, r1, r3 ++ psub.h r1, r1, r3 ++ st.w r11[0*(8*2)], r4 ++ st.w r11[7*(8*2)], r1 ++ ++ padd.h r3, r5, r9 ++ psub.h r5, r5, r9 ++ st.w r11[1*(8*2)], r3 ++ st.w r11[6*(8*2)], r5 ++ ++ padd.h r9, r7, r0 ++ psub.h r7, r7, r0 ++ st.w r11[2*(8*2)], r9 ++ st.w r11[5*(8*2)], r7 ++ ++ padd.h r0, r8, r2 ++ psub.h r8, r8, r2 ++ st.w r11[3*(8*2)], r0 ++ st.w r11[4*(8*2)], r8 ++ ++ sub r11, -4 ++ sub lr, 1 ++ brne 0b ++ ++// } ++ ++ lddsp r12, sp[0] /* r12 = dst */ ++ sub r11, 4*4 ++ ldm r11++, r4-r7 ++ mov lr, 8 ++ /* Push dst and stride on stack */ ++ ++1: ++// for( i = 0; i < 8; i++ ) ++// { ++ ++ /* r7 = {src[i][0], src[i][1]} ++ r6 = {src[i][2], src[i][3]} ++ r5 = {src[i][4], src[i][5]} ++ r4 = {src[i][6], src[i][7]} */ ++ ++/* ++ const int a0 = src[i][0] + src[i][4]; ++ const int a2 = src[i][0] - src[i][4]; ++ const int a4 = (src[i][2]>>1) - src[i][6]; ++ const int a6 = (src[i][6]>>1) + src[i][2]; ++*/ ++ pasr.h r8, r6, 1 ++ pasr.h r9, r4, 1 ++ addhh.w r0, r7:t, r5:t /* r0 = a0 */ ++ subhh.w r1, r7:t, r5:t /* r1 = a2 */ ++ subhh.w r2, r8:t, r4:t /* r2 = a4 */ ++ addhh.w r3, r9:t, r6:t /* r3 = a6 */ ++ ++/* ++ const int b0 = a0 + a6; ++ const int b2 = a2 + a4; ++ const int b4 = a2 - a4; ++ const int b6 = a0 - a6; ++*/ ++ add r10, r0, r3 /* r10 = b0 */ ++ sub r0, r3 /* r0 = b6 */ ++ add r3, r1, r2 /* r3 = b2 */ ++ sub r1, r2 /* r1 = b4 */ ++/* ++ ++ ++ const int a7 = src[i][5] + src[i][3] + src[i][1] + (src[i][1]>>1); ++ const int a1 = src[i][5] - src[i][3] - src[i][7] - (src[i][7]>>1); ++ const int a3 = src[i][7] + src[i][1] - src[i][3] - (src[i][3]>>1); ++ const int a5 = src[i][7] - src[i][1] + src[i][5] + (src[i][5]>>1); */ ++ addhh.w r8, r8:b, r6:b ++ addhh.w r2, r4:b, r7:b ++ sub r2, r8 /* r2 = a3 */ ++ ++ addhh.w r9, r9:b, r4:b ++ subhh.w r8, r5:b, r6:b ++ sub r8, r9 /* r8 = a1 */ ++ ++ pasr.h r9, r7, 1 ++ addhh.w r9, r9:b, r7:b ++ addhh.w r6, r5:b, r6:b ++ add r6, r9 /* r6 = a7 */ ++ ++ pasr.h r9, r5, 1 ++ addhh.w r9, r9:b, r5:b ++ subhh.w r5, r4:b, r7:b ++ add r5, r9 /* r5 = a5 */ ++ ++/* const int b1 = (a7>>2) + a1; ++ const int b3 = (a5>>2) + a3; ++ const int b5 = (a3>>2) - a5; ++ const int b7 = -(a1>>2) + a7 ; */ ++ asr r4, r6, 2 ++ add r4, r8 /* r4 = b1 */ ++ asr r8, 2 ++ rsub r8, r6 /* r8 = b7 */ ++ ++ asr r6, r5, 2 ++ add r6, r2 /* r6 = b3 */ ++ asr r2, 2 ++ sub r2, r5 /* r2 = b5 */ ++ ++/* ++ dst[i*stride + 0] = cm[ dst[i*stride + 0] + ((b0 + b7) >> 6) ]; ++ dst[i*stride + 1] = cm[ dst[i*stride + 1] + ((b2 + b5) >> 6) ]; ++ dst[i*stride + 2] = cm[ dst[i*stride + 2] + ((b4 + b3) >> 6) ]; ++ dst[i*stride + 3] = cm[ dst[i*stride + 3] + ((b6 + b1) >> 6) ]; ++ dst[i*stride + 4] = cm[ dst[i*stride + 4] + ((b6 - b1) >> 6) ]; ++ dst[i*stride + 5] = cm[ dst[i*stride + 5] + ((b4 - b3) >> 6) ]; ++ dst[i*stride + 6] = cm[ dst[i*stride + 6] + ((b2 - b5) >> 6) ]; ++ dst[i*stride + 7] = cm[ dst[i*stride + 7] + ((b0 - b7) >> 6) ]; ++*/ ++ add r5, r10, r8 ++ satrnds r5 >> 6, 0 /* r5 = (b0 + b7) >> 6 */ ++ sub r10, r8 ++ satrnds r10 >> 6, 0 /* r10 = (b0 - b7) >> 6 */ ++ add r8, r3, r2 ++ satrnds r8 >> 6, 0 /* r8 = (b2 + b5) >> 6 */ ++ sub r3, r2 ++ satrnds r3 >> 6, 0 /* r3 = (b2 - b5) >> 6 */ ++ ++ add r2, r1, r6 ++ satrnds r2 >> 6, 0 /* r2 = (b4 + b3) >> 6 */ ++ sub r1, r6 ++ satrnds r1 >> 6, 0 /* r1 = (b4 - b3) >> 6 */ ++ ++ add r6, r0, r4 ++ satrnds r6 >> 6, 0 /* r6 = (b6 + b1) >> 6 */ ++ sub r0, r4 ++ satrnds r0 >> 6, 0 /* r0 = (b6 - b1) >> 6 */ ++ ++ ld.w r4, r12[0] ++ ++ packw.sh r8, r5, r8 ++ packw.sh r7, r2, r6 ++ ld.w r9, r12[4] ++ packw.sh r6, r0, r1 ++ packw.sh r5, r3, r10 ++ ++ punpckub.h r10, r4:t ++ punpckub.h r4, r4:b ++ punpckub.h r3, r9:t ++ punpckub.h r9, r9:b ++ ++ padd.h r8, r8, r10 ++ padd.h r7, r7, r4 ++ padd.h r6, r6, r3 ++ padd.h r5, r5, r9 ++ ++ lddsp r10, sp[4] /* r10 = stride */ ++ packsh.ub r0, r8, r7 ++ packsh.ub r1, r6, r5 ++ ++ st.w r12[0], r0 ++ st.w r12[4], r1 ++ ++ ldm r11++, r4-r7 ++ add r12, r10 /* dst += stride */ ++ ++ sub lr, 1 ++ brne 1b ++ ++ sub sp, -8 ++ ldm sp++,r0-r3,r4-r7, pc ++ ++ ++ ++// } ++//} +diff --git a/libavcodec/avr32/idct.S b/libavcodec/avr32/idct.S +new file mode 100644 +index 0000000..e7551ec +--- /dev/null ++++ b/libavcodec/avr32/idct.S +@@ -0,0 +1,829 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++ .global idct_add_avr32 ++ .global idct_put_avr32 ++ .global idct_avr32 ++ ++ ++#define CONST_BITS 13 ++#define PASS1_BITS 2 ++ ++#define ONE ((INT32) 1) ++ ++#define CONST_SCALE (ONE << CONST_BITS) ++ ++#define LINE_SIZE 32 ++ ++#define FIX_0_298631336 (2446) /* FIX(0.298631336) */ ++#define FIX_0_390180644 (3196) /* FIX(0.390180644) */ ++#define FIX_0_541196100 (4433) /* FIX(0.541196100) */ ++#define FIX_0_765366865 (6270) /* FIX(0.765366865) */ ++#define FIX_0_899976223 (7373) /* FIX(0.899976223) */ ++#define FIX_1_175875602 (9633) /* FIX(1.175875602) */ ++#define FIX_1_501321110 (12299)/* FIX(1.501321110) */ ++#define FIX_1_847759065 (15137)/* FIX(1.847759065) */ ++#define FIX_1_961570560 (16069)/* FIX(1.961570560) */ ++#define FIX_2_053119869 (16819)/* FIX(2.053119869) */ ++#define FIX_2_562915447 (20995)/* FIX(2.562915447) */ ++#define FIX_3_072711026 (25172)/* FIX(3.072711026) */ ++ ++ ++#define loop_cnt r11 ++ ++ .text ++ ++idct_add_avr32: ++ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables ++ ++ // Give room for some variables on the stack ++ sub sp, 8 ++ stdsp SP[0], r12 // rfp ++ stdsp SP[4], r11 // iinc ++ ++ mov loop_cnt, 8 //Initialize loop counter ++ ++FOR_ROW: ++ ++ ldm r10, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block ++ mov r6, 0 ++#ifdef USE_PREFETCH ++ pref r10[LINE_SIZE] //Prefetch next line ++#endif ++ or r4, r2, r3 << 16 ++ or r4, r1 //Check if all DCT-coeffisients except the DC is zero ++ or r4, r0 ++ brne AC_ROW //If there are non-zero AC coeffisients perform row-transform ++ ++ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5 ++ plsl.h r5, r5, PASS1_BITS ++ mov r4, r5 ++ st.d r10++, r4 ++ st.d r10++, r4 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne FOR_ROW //Perform loop one more time if loop_cnt is not zero ++ ++ bral COLOUMN_TRANSFORM //Perform coloumn transform after row transform is computed ++ ++ ++AC_ROW: ++ ++ ++ ld.w r12, pc[coef_table - .] ++ ld.w r9, pc[coef_table - . + 4] ++ ++ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7] ++ mulhh.w r5, r4:t, r12:t ++ mulhh.w r6, r0:t, r12:b ++ ld.w r12, pc[coef_table - . + 8] ++ mulhh.w r7, r2:t, r9:t ++ add r6, r5 // tmp2 ++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 ++ add r7, r5 // tmp3 ++ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r3:t, r1:t ++ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1 ++ ++ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13 ++ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12 ++ ++ ++ addhh.w lr, r3:b, r1:b // lr = z4 ++ addhh.w r5, r4:b, lr:b ++ mulhh.w r5, r5:b, r9:b // r5 = z5 ++ ++ ld.w r9, pc[coef_table - . + 12] ++ mulhh.w r4, r4:b, r12:t // r4 = z3 ++ mulhh.w lr, lr:b, r12:b // lr = z4 ++ ++ add r4, r5 ++ add lr, r5 ++ ++ addhh.w r5, r2:b, r1:b // r5 = z2 ++ addhh.w r8, r3:b, r0:b // r8 = z1 ++ ++ ++ mulhh.w r0, r0:b, r9:t // r0 = tmp0 ++ ld.w r12, pc[coef_table - . + 16] ++ mulhh.w r1, r1:b, r9:b // r1 = tmp1 ++ ld.w r9, pc[coef_table - . + 20] ++ mulhh.w r2, r2:b, r12:t // r2 = tmp2 ++ mulhh.w r3, r3:b, r12:b // r3 = tmp3 ++ mulhh.w r8, r8:b, r9:t // r8 = z1 ++ mulhh.w r5, r5:b, r9:b // r5 = z2 ++ ++ ++ add r0, r8 ++ add r0, r4 ++ add r1, r5 ++ add r1, lr ++ add r2, r5 ++ add r2, r4 ++ add r3, r8 ++ add r3, lr ++ ++ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6] ++ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7] ++ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5] ++ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4] ++ ++ sthh.w r10[0], r4:t, r5:t ++ sthh.w r10[4], r3:t, r2:t ++ sthh.w r10[8], r2:b, r3:b ++ sthh.w r10[12], r5:b, r4:b ++ ++ ++ ++ sub r10, -16 ++ sub loop_cnt, 1 ++ brne FOR_ROW, e ++ ++COLOUMN_TRANSFORM: ++ ++ sub r10, 128 //Set pointer to start of DCT block ++ ++ ++ mov loop_cnt, 8 ++FOR_COLOUMN: ++ ldins.h r3:t,r10[0] // r3:t = dataptr[0] ++ ldins.h r1:t,r10[1*8*2]// r1:t = dataptr[1] ++ ldins.h r2:t,r10[2*8*2]// r2:t = dataptr[2] ++ ldins.h r0:t,r10[5*8*2]// r0:t = dataptr[5] ++ ldins.h r3:b,r10[4*8*2]// r3:b = dataptr[4] ++ ldins.h r1:b,r10[3*8*2]// r1:b = dataptr[3] ++ ldins.h r2:b,r10[6*8*2]// r2:b = dataptr[6] ++ ldins.h r0:b,r10[7*8*2]// r0:b = dataptr[7] ++ ++ or r4, r1, r3 << 16 ++ or r4, r2 ++ or r4, r0 ++ brne AC_COLOUMN //If there are non-zero AC coeffisients perform row-transform ++ ++ lddsp r12, SP[0] // rfp ++ lddsp r9, SP[4] // iinc ++ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 9 ++ ld.d r0, r12[0] ++ sub r10, -2 // Increment the dataptr ++ bfins r3, r3, 16, 16 ++ punpckub.h r2, r1:t ++ padd.h r2, r2, r3 ++ punpckub.h r1, r1:b ++ padd.h r1, r1, r3 ++ packsh.ub r1, r2, r1 ++ punpckub.h r2, r0:t ++ padd.h r2, r2, r3 ++ punpckub.h r0, r0:b ++ padd.h r0, r0, r3 ++ packsh.ub r0, r2, r0 ++ st.d r12[0], r0 ++ add r12, r9 // increment rfp ++ stdsp SP[0], r12 ++ ++ sub loop_cnt, 1//Decrement loop counter ++ brne FOR_COLOUMN//Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -8 ++ popm r0-r3, r4-r7, pc//Pop back registers and PC ++ ++AC_COLOUMN: ++ ++ ld.w r12, pc[coef_table - .] ++ ld.w r9, pc[coef_table - . + 4] ++ ++ addhh.w r4, r2:t, r2:b ++ mulhh.w r4, r4:b, r12:t // r4 = z1 ++ mulhh.w r5, r2:b, r12:b ++ ld.w r12, pc[coef_table - . + 8] ++ mulhh.w r6, r2:t, r9:t ++ add r5, r4 // r5 = tmp2 ++ add r6, r4 // r6 = tmp3 ++ ++ addhh.w r7, r3:t, r3:b ++ subhh.w r8, r3:t, r3:b ++ ++ lsl r7, CONST_BITS ++ lsl r8, CONST_BITS ++ ++ add r2, r7, r6 // r2 = tmp10 ++ sub r3, r7, r6 // r3 = tmp13 ++ add r4, r8, r5 // r4 = tmp11 ++ sub r5, r8, r5 // r5 = tmp12 ++ ++ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3 ++ addhh.w r7, r6:t, r6:b ++ mulhh.w r7, r7:b, r9:b // r7 = z5 ++ ++ ld.w r9, pc[coef_table - . + 12] ++ mulhh.w r8, r6:b, r12:t // r8 = z3 ++ mulhh.w r6, r6:t, r12:b // r6 = z4 ++ ++ add r8, r7 ++ add r6, r7 ++ ++ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1 ++ ++ mulhh.w r12, r0:b, r9:t // r12 = tmp0 ++ mulhh.w r0, r0:t, r9:b // r0 = tmp1 ++ ld.w r9, pc[coef_table - . + 16] ++ add r12, r8 ++ add r0, r6 ++ ++ ld.w lr, pc[coef_table - . + 20] ++ machh.w r8, r1:b, r9:t // r8 = tmp2 ++ machh.w r6, r1:t, r9:b // r6 = tmp3 ++ mulhh.w r9, r7:b, lr:t // r9 = z1 ++ mulhh.w r7, r7:t, lr:b // r7 = z2 ++ ++ ++ add r12, r9 ++ add r0, r7 ++ add r8, r7 ++ add r6, r9 ++ ++ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0] ++ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7] ++ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1] ++ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6] ++ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2] ++ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5] ++ add r0, r3, r12 // r0 = dataptr[DCTSIZE*3] ++ sub r3, r3, r12 // r3 = dataptr[DCTSIZE*4] ++ ++ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9 ++ ++ packw.sh r1, r1, r6 ++ packw.sh r8, r8, r0 ++ packw.sh r3, r3, r5 ++ packw.sh r4, r4, r2 ++ ++ lddsp r12, SP[0] // rfp ++ lddsp r9, SP[4] // iinc ++ ld.d r6, r12[0] ++ sub r10, -2 // Increment the dataptr ++ punpckub.h r0, r7:t ++ padd.h r1, r1, r0 ++ punpckub.h r0, r7:b ++ padd.h r8, r8, r0 ++ packsh.ub r7, r1, r8 ++ punpckub.h r0, r6:t ++ padd.h r3, r3, r0 ++ punpckub.h r0, r6:b ++ padd.h r4, r4, r0 ++ packsh.ub r6, r3, r4 ++ st.d r12[0], r6 ++ add r12, r9 // increment rfp ++ stdsp SP[0], r12 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne FOR_COLOUMN //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -8 ++ popm r0-r3, r4-r7, pc //Pop back registers and PC ++ ++ ++ ++//Coeffisient Table: ++ .align 2 ++coef_table: ++ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602 ++ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869 ++ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447 ++ ++ ++idct_put_avr32: ++ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables ++ ++ //; Give room for some variables on the stack ++ sub sp, 8 ++ stdsp SP[0], r12 // rfp ++ stdsp SP[4], r11 // iinc ++ ++ mov loop_cnt, 8 //Initialize loop counter ++ ++0: ++ ++ ldm r10, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block ++ mov r6, 0 ++#ifdef USE_PREFETCH ++ pref r10[LINE_SIZE] //Prefetch next line ++#endif ++ or r4, r2, r3 << 16 ++ or r4, r1 //Check if all DCT-coeffisients except the DC is zero ++ or r4, r0 ++ brne 1f //If there are non-zero AC coeffisients perform row-transform ++ ++ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5 ++ plsl.h r5, r5, PASS1_BITS ++ mov r4, r5 ++ st.d r10++, r4 ++ st.d r10++, r4 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ bral 2f //Perform coloumn transform after row transform is computed ++ ++1: ++ ++ ld.w r12, pc[coef_table_copy - .] ++ ld.w r9, pc[coef_table_copy - . + 4] ++ ++ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7] ++ mulhh.w r5, r4:t, r12:t ++ mulhh.w r6, r0:t, r12:b ++ ld.w r12, pc[coef_table_copy - . + 8] ++ mulhh.w r7, r2:t, r9:t ++ add r6, r5 // tmp2 ++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 ++ add r7, r5 // tmp3 ++ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r3:t, r1:t ++ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1 ++ ++ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13 ++ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12 ++ ++ ++ ++ addhh.w lr, r3:b, r1:b // lr = z4 ++ addhh.w r5, r4:b, lr:b ++ mulhh.w r5, r5:b, r9:b // r5 = z5 ++ ++ ld.w r9, pc[coef_table_copy - . + 12] ++ mulhh.w r4, r4:b, r12:t // r4 = z3 ++ mulhh.w lr, lr:b, r12:b // lr = z4 ++ ++ add r4, r5 ++ add lr, r5 ++ ++ addhh.w r5, r2:b, r1:b // r5 = z2 ++ addhh.w r8, r3:b, r0:b // r8 = z1 ++ ++ ++ mulhh.w r0, r0:b, r9:t // r0 = tmp0 ++ ld.w r12, pc[coef_table_copy - . + 16] ++ mulhh.w r1, r1:b, r9:b // r1 = tmp1 ++ ld.w r9, pc[coef_table_copy - . + 20] ++ mulhh.w r2, r2:b, r12:t // r2 = tmp2 ++ mulhh.w r3, r3:b, r12:b // r3 = tmp3 ++ mulhh.w r8, r8:b, r9:t // r8 = z1 ++ mulhh.w r5, r5:b, r9:b // r5 = z2 ++ ++ ++ add r0, r8 ++ add r0, r4 ++ add r1, r5 ++ add r1, lr ++ add r2, r5 ++ add r2, r4 ++ add r3, r8 ++ add r3, lr ++ ++ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6] ++ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7] ++ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5] ++ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4] ++ ++ sthh.w r10[0], r4:t, r5:t ++ sthh.w r10[4], r3:t, r2:t ++ sthh.w r10[8], r2:b, r3:b ++ sthh.w r10[12], r5:b, r4:b ++ ++ ++ ++ sub r10, -16 ++ sub loop_cnt, 1 ++ brne 0b ++ ++2: ++ ++ sub r10, 128 //Set pointer to start of DCT block ++ ++ mov loop_cnt, 8 ++ ++0: ++ ldins.h r3:t,r10[0] // r3:t = dataptr[0] ++ ldins.h r1:t,r10[1*8*2]// r1:t = dataptr[1] ++ ldins.h r2:t,r10[2*8*2]// r2:t = dataptr[2] ++ ldins.h r0:t,r10[5*8*2]// r0:t = dataptr[5] ++ ldins.h r3:b,r10[4*8*2]// r3:b = dataptr[4] ++ ldins.h r1:b,r10[3*8*2]// r1:b = dataptr[3] ++ ldins.h r2:b,r10[6*8*2]// r2:b = dataptr[6] ++ ldins.h r0:b,r10[7*8*2]// r0:b = dataptr[7] ++ ++ or r4, r1, r3 << 16 ++ or r4, r2 ++ or r4, r0 ++ brne 1f //If there are non-zero AC coeffisients perform row-transform ++ ++ lddsp r12, SP[0] // rfp ++ lddsp r9, SP[4] // iinc ++ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 31 ++ packw.sh r3, r3, r3 ++ packsh.ub r3, r3, r3 ++ mov r2, r3 ++ st.d r12[0], r2 ++ add r12, r9 // increment rfp ++ sub r10, -2 // Increment the dataptr ++ stdsp SP[0], r12 ++ ++ sub loop_cnt, 1//Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -8 ++ popm r0-r3, r4-r7, pc//Pop back registers and PC ++ ++1: ++ ++ ld.w r12, pc[coef_table_copy - .] ++ ld.w r9, pc[coef_table_copy - . + 4] ++ ++ addhh.w r4, r2:t, r2:b ++ mulhh.w r4, r4:b, r12:t // r4 = z1 ++ mulhh.w r5, r2:b, r12:b ++ ld.w r12, pc[coef_table_copy - . + 8] ++ mulhh.w r6, r2:t, r9:t ++ add r5, r4 // r5 = tmp2 ++ add r6, r4 // r6 = tmp3 ++ ++ addhh.w r7, r3:t, r3:b ++ subhh.w r8, r3:t, r3:b ++ ++ lsl r7, CONST_BITS ++ lsl r8, CONST_BITS ++ ++ add r2, r7, r6 // r2 = tmp10 ++ sub r3, r7, r6 // r3 = tmp13 ++ add r4, r8, r5 // r4 = tmp11 ++ sub r5, r8, r5 // r5 = tmp12 ++ ++ ++ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3 ++ addhh.w r7, r6:t, r6:b ++ mulhh.w r7, r7:b, r9:b // r7 = z5 ++ ++ ld.w r9, pc[coef_table_copy - . + 12] ++ mulhh.w r8, r6:b, r12:t // r8 = z3 ++ mulhh.w r6, r6:t, r12:b // r6 = z4 ++ ++ add r8, r7 ++ add r6, r7 ++ ++ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1 ++ ++ mulhh.w r12, r0:b, r9:t // r12 = tmp0 ++ mulhh.w r0, r0:t, r9:b // r0 = tmp1 ++ ld.w r9, pc[coef_table_copy - . + 16] ++ add r12, r8 ++ add r0, r6 ++ ++ ld.w lr, pc[coef_table_copy - . + 20] ++ machh.w r8, r1:b, r9:t // r8 = tmp2 ++ machh.w r6, r1:t, r9:b // r6 = tmp3 ++ mulhh.w r9, r7:b, lr:t // r9 = z1 ++ mulhh.w r7, r7:t, lr:b // r7 = z2 ++ ++ ++ add r12, r9 ++ add r0, r7 ++ add r8, r7 ++ add r6, r9 ++ ++ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0] ++ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7] ++ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1] ++ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6] ++ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2] ++ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5] ++ add r0, r3, r12 // r0 = dataptr[DCTSIZE*3] ++ sub r3, r3, r12 // r3 = dataptr[DCTSIZE*4] ++ ++ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9 ++ ++ packw.sh r1, r1, r6 ++ packw.sh r8, r8, r0 ++ packw.sh r3, r3, r5 ++ packw.sh r4, r4, r2 ++ ++ packsh.ub r1, r1, r8 ++ packsh.ub r0, r3, r4 ++ lddsp r12, SP[0] // rfp ++ lddsp r9, SP[4] // iinc ++ st.d r12[0], r0 ++ sub r10, -2 // Increment the dataptr ++ add r12, r9 // increment rfp ++ stdsp SP[0], r12 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -8 ++ popm r0-r3, r4-r7, pc //Pop back registers and PC ++ ++ ++ ++ .align 2 ++coef_table_copy: ++ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602 ++ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869 ++ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447 ++ ++ ++idct_avr32: ++ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables ++ ++ //; Give room for a temporary block on the stack ++ sub sp, 8*8*2 ++ ++ mov loop_cnt, 8 //Initialize loop counter ++ ++0: ++ ++ ldm r12++, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block ++ mov r6, 0 ++#ifdef USE_PREFETCH ++ pref r12[LINE_SIZE] //Prefetch next line ++#endif ++ or r4, r2, r3 << 16 ++ or r4, r1 //Check if all DCT-coeffisients except the DC is zero ++ or r4, r0 ++ brne 1f //If there are non-zero AC coeffisients perform row-transform ++ ++ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5 ++ plsl.h r5, r5, PASS1_BITS ++ mov r4, r5 ++ st.d sp++, r4 ++ st.d sp++, r4 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ bral 2f //Perform coloumn transform after row transform is computed ++ ++1: ++ ++ ld.w r10, pc[coef_table_idct - .] ++ ld.w r9, pc[coef_table_idct - . + 4] ++ ++ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7] ++ mulhh.w r5, r4:t, r10:t ++ mulhh.w r6, r0:t, r10:b ++ ld.w r10, pc[coef_table_idct - . + 8] ++ mulhh.w r7, r2:t, r9:t ++ add r6, r5 // tmp2 ++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 ++ add r7, r5 // tmp3 ++ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r3:t, r1:t ++ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1 ++ ++ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13 ++ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12 ++ ++ ++ ++ addhh.w lr, r3:b, r1:b // lr = z4 ++ addhh.w r5, r4:b, lr:b ++ mulhh.w r5, r5:b, r9:b // r5 = z5 ++ ++ ld.w r9, pc[coef_table_idct - . + 12] ++ mulhh.w r4, r4:b, r10:t // r4 = z3 ++ mulhh.w lr, lr:b, r10:b // lr = z4 ++ ++ add r4, r5 ++ add lr, r5 ++ ++ addhh.w r5, r2:b, r1:b // r5 = z2 ++ addhh.w r8, r3:b, r0:b // r8 = z1 ++ ++ ++ mulhh.w r0, r0:b, r9:t // r0 = tmp0 ++ ld.w r10, pc[coef_table_idct - . + 16] ++ mulhh.w r1, r1:b, r9:b // r1 = tmp1 ++ ld.w r9, pc[coef_table_idct - . + 20] ++ mulhh.w r2, r2:b, r10:t // r2 = tmp2 ++ mulhh.w r3, r3:b, r10:b // r3 = tmp3 ++ mulhh.w r8, r8:b, r9:t // r8 = z1 ++ mulhh.w r5, r5:b, r9:b // r5 = z2 ++ ++ ++ add r0, r8 ++ add r0, r4 ++ add r1, r5 ++ add r1, lr ++ add r2, r5 ++ add r2, r4 ++ add r3, r8 ++ add r3, lr ++ ++ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6] ++ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7] ++ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5] ++ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4] ++ ++ sthh.w sp[0], r4:t, r5:t ++ sthh.w sp[4], r3:t, r2:t ++ sthh.w sp[8], r2:b, r3:b ++ sthh.w sp[12], r5:b, r4:b ++ ++ ++ ++ sub sp, -16 ++ sub loop_cnt, 1 ++ brne 0b ++ ++2: ++ ++ sub sp, 8*8*2 //Set pointer to start of DCT block ++ sub r12, 8*8*2 //Set pointer to start of DCT block ++ ++ mov loop_cnt, 8 ++ ++0: ++ ldins.h r3:t,sp[0] // r3:t = dataptr[0] ++ ldins.h r1:t,sp[1*8*2]// r1:t = dataptr[1] ++ ldins.h r2:t,sp[2*8*2]// r2:t = dataptr[2] ++ ldins.h r0:t,sp[5*8*2]// r0:t = dataptr[5] ++ ldins.h r3:b,sp[4*8*2]// r3:b = dataptr[4] ++ ldins.h r1:b,sp[3*8*2]// r1:b = dataptr[3] ++ ldins.h r2:b,sp[6*8*2]// r2:b = dataptr[6] ++ ldins.h r0:b,sp[7*8*2]// r0:b = dataptr[7] ++ ++ or r4, r1, r3 << 16 ++ or r4, r2 ++ or r4, r0 ++ brne 1f //If there are non-zero AC coeffisients perform row-transform ++ ++ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 31 ++ packw.sh r3, r3, r3 ++ mov r2, r3 ++ st.d r12++, r2 ++ st.d r12++, r2 ++ sub sp, -2 // Increment the dataptr ++ ++ sub loop_cnt, 1//Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -(8*8*2 - 8) ++ popm r0-r3, r4-r7, pc//Pop back registers and PC ++ ++1: ++ ++ ld.w r10, pc[coef_table_idct - .] ++ ld.w r9, pc[coef_table_idct - . + 4] ++ ++ addhh.w r4, r2:t, r2:b ++ mulhh.w r4, r4:b, r10:t // r4 = z1 ++ mulhh.w r5, r2:b, r10:b ++ ld.w r10, pc[coef_table_idct - . + 8] ++ mulhh.w r6, r2:t, r9:t ++ add r5, r4 // r5 = tmp2 ++ add r6, r4 // r6 = tmp3 ++ ++ addhh.w r7, r3:t, r3:b ++ subhh.w r8, r3:t, r3:b ++ ++ lsl r7, CONST_BITS ++ lsl r8, CONST_BITS ++ ++ add r2, r7, r6 // r2 = tmp10 ++ sub r3, r7, r6 // r3 = tmp13 ++ add r4, r8, r5 // r4 = tmp11 ++ sub r5, r8, r5 // r5 = tmp12 ++ ++ ++ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3 ++ addhh.w r7, r6:t, r6:b ++ mulhh.w r7, r7:b, r9:b // r7 = z5 ++ ++ ld.w r9, pc[coef_table_idct - . + 12] ++ mulhh.w r8, r6:b, r10:t // r8 = z3 ++ mulhh.w r6, r6:t, r10:b // r6 = z4 ++ ++ add r8, r7 ++ add r6, r7 ++ ++ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1 ++ ++ mulhh.w r10, r0:b, r9:t // r10 = tmp0 ++ mulhh.w r0, r0:t, r9:b // r0 = tmp1 ++ ld.w r9, pc[coef_table_idct - . + 16] ++ add r10, r8 ++ add r0, r6 ++ ++ ld.w lr, pc[coef_table_idct - . + 20] ++ machh.w r8, r1:b, r9:t // r8 = tmp2 ++ machh.w r6, r1:t, r9:b // r6 = tmp3 ++ mulhh.w r9, r7:b, lr:t // r9 = z1 ++ mulhh.w r7, r7:t, lr:b // r7 = z2 ++ ++ ++ add r10, r9 ++ add r0, r7 ++ add r8, r7 ++ add r6, r9 ++ ++ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0] ++ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7] ++ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1] ++ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6] ++ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2] ++ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5] ++ add r0, r3, r10 // r0 = dataptr[DCTSIZE*3] ++ sub r3, r3, r10 // r3 = dataptr[DCTSIZE*4] ++ ++ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9 ++ ++ packw.sh r7, r1, r6 ++ packw.sh r6, r8, r0 ++ packw.sh r5, r3, r5 ++ packw.sh r4, r4, r2 ++ ++ stm r12, r4-r7 ++ sub sp, -2 // Increment the dataptr ++ sub r12, -16 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -(8*8*2 - 8) ++ popm r0-r3, r4-r7, pc //Pop back registers and PC ++ ++ ++ ++ .align 2 ++coef_table_idct: ++ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602 ++ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869 ++ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447 ++ +diff --git a/libavcodec/avr32/mc.S b/libavcodec/avr32/mc.S +new file mode 100644 +index 0000000..07a002d +--- /dev/null ++++ b/libavcodec/avr32/mc.S +@@ -0,0 +1,434 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++ ++ /* Macro for masking the lowest bit of each byte in a ++ packed word */ ++ .macro packedmask1 reg, round ++ .if \round ++ and \reg, \reg, r8 >> 1 ++ .else ++ and \reg, r8 ++ .endif ++ .endm ++ ++ /* Macro for 8 pixel wide horizontal and vertical interpolation functions */ ++ .macro pixels8_hv round, put ++ ++ ++ pushm r0-r7, lr ++ ++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ ++ ++ /* Rounding immediate */ ++ .if \round ++ mov r8, lo(0x02020202) ++ orh r8, hi(0x02020202) ++ .else ++ mov r8, lo(0x01010101) ++ orh r8, hi(0x01010101) ++ .endif ++ mov r7, 2 ++ ++ /* Pixel naming convention : ++ ++ |-----------------------------------------------------| ++ | s00 | s01 | s02 | s03 | s04 | s05 | s06 | s07 | s08 | ++ |----d00---d01---d02---d03---d04---d05---d06---d07----| ++ | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | s18 | ++ |-----------------------------------------------------| ++ */ ++1: ++ ld.w r0, r11[0] // r0 = { s00, s01, s02, s03 } ++ ld.w r1, r11[1] // r1 = { s01, s02, s03, s04 } ++ mov lr, r9 ++ eor r2, r0, r1 ++ packedmask1 r2, \round ++ add r2, r8 ++ ++ paddh.ub r0, r0, r1 // r0 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ ++ add r11, r10 // pixels += line_size ++ ld.w r1, r11[0] // r1 = { s10, s11, s12, s13 } ++ ld.w r3, r11[1] // r3 = { s11, s12, s13, s14 } ++0: ++ eor r5, r1, r3 ++ packedmask1 r5, \round ++ add r2, r5 ++ ++ paddh.ub r1, r1, r3 // r1 = {(s10+s11)/2,(s11+s12)/2,(s12+s13)/2,(s13+s14)/2} ++ eor r6, r0, r1 ++ packedmask1 r6, \round ++ add r2, r2, r6 << 1 ++ ++ ld.w r3, r11[r10] // r3 = { s00, s01, s02, s03 } ++ add r11, r10 // pixels += line_size ++ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 } ++ ++ paddh.ub r0, r0, r1 ++ plsr.b r2, r2, 2 ++ padd.b r0, r0, r2 // r0 = { d00, d01, d02, d03 } ++ ++ /* Next row */ ++ .if \put ++ eor r2, r3, r4 ++ packedmask1 r2, \round ++ add r2, r8 ++ .else ++ ld.w r6, r12[0] ++ eor r2, r3, r4 ++ packedmask1 r2, \round ++ add r2, r8 ++ pavg.ub r0, r0, r6 ++ .endif ++ st.w r12[0], r0 // Put data into the block ++ ++ add r5, r2 ++ paddh.ub r0, r3, r4 // r0 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ ++ eor r6, r0, r1 ++ packedmask1 r6, \round ++ add r5, r5, r6 << 1 ++ ++ .if \put ++ paddh.ub r1, r0, r1 ++ plsr.b r5, r5, 2 ++ padd.b r1, r1, r5 // r1 = { d10, d11, d12, d13 } ++ .else ++ ld.w r3, r12[r10] ++ paddh.ub r1, r0, r1 ++ plsr.b r5, r5, 2 ++ padd.b r1, r1, r5 // r1 = { d10, d11, d12, d13 } ++ pavg.ub r1, r1, r3 ++ .endif ++ ++ st.w r12[r10], r1 // Put data into the block ++ ++ ++ ld.w r1, r11[r10] // r1 = { s10, s11, s12, s13 } ++ add r11, r10 // pixels += line_size ++ ld.w r3, r11[1] // r3 = { s11, s12, s13, s14 } ++ add r12, r12, r10 << 1 // block += 2*line_size ++ sub lr, 2 ++ brne 0b ++ ++ mul r0, r10, r9 // r0 = line_size * h ++ rsub r0, r0, 4 // r0 = 4 - (line_size * h) ++ add r11, r0 ++ sub r11, r10 // pixels += 4 - (line_size * (h+1)) ++ add r12, r0 // pixels += 4 - (line_size * (h)) ++ sub r7, 1 ++ brne 1b ++ ++ popm r0-r7, pc ++ .endm ++ ++ ++ /* Macro for 8 pixel wide vertical interpolation functions */ ++ ++ .macro pixels8_v round, put ++ pushm r4-r7,lr ++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ ++ ++ /* ++ Pixel Naming Convention : ++ |-----------------------------------------------| ++ | s00 | s01 | s02 | s03 | s04 | s05 | s06 | s07 | ++ |-d00---d01---d02---d03---d04---d05---d06---d07-| ++ | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | ++ |-----------------------------------------------| ++ */ ++ ld.w r8, r11[r10] // r8 = { s10, s11, s12, s13 } ++ ld.w lr, r11++ // lr = { s00, s01, s02, s03 }, src += 4 ++ ld.w r7, r11[0] // r7 = { s04, s05, s06, s07 } ++ ld.w r6, r11[r10] // r6 = { s14, s15, s16, s17 } ++ sub r10, 4 // stride -= 4 ++ add r11, r11, r10 << 1 // src += 2*stride ++ sub r11, -4 // src += 4 ++ ++0: ++ .if \round ++ pavg.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} ++ pavg.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} ++ .else ++ paddh.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} ++ paddh.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} ++ .endif ++ ++ .if \put ++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } ++ ld.w lr, r11++ // lr = { s10, s11, s12, s13 }, src += 4 ++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } ++ ld.w r7, r11[0] // r7 = { s14, s15, s16, s17 } ++ .else ++ ld.w lr, r12[0] ++ ld.w r7, r12[4] ++ pavg.ub r5, r5, lr ++ pavg.ub r4, r4, r7 ++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } ++ ld.w lr, r11++ // lr = { s10, s11, s12, s13 }, src += 4 ++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } ++ ld.w r7, r11[0] // r7 = { s14, s15, s16, s17 } ++ .endif ++ add r11, r10 // src += stride ++#ifdef USE_PREFETCH ++ pref r11[0] ++#endif ++ add r12, r10 // dst += stride ++ ++ .if \round ++ pavg.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} ++ pavg.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} ++ .else ++ paddh.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} ++ paddh.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} ++ .endif ++ .if \put ++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } ++ ld.w r8, r11++ // r8 = { s10, s11, s12, s13 }, src += 4 ++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } ++ ld.w r6, r11[0] // r6 = { s14, s15, s16, s17 } ++ .else ++ ld.w r8, r12[0] ++ ld.w r6, r12[4] ++ pavg.ub r5, r5, r8 ++ pavg.ub r4, r4, r6 ++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } ++ ld.w r8, r11++ // r8 = { s10, s11, s12, s13 }, src += 4 ++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } ++ ld.w r6, r11[0] // r6 = { s14, s15, s16, s17 } ++ .endif ++ ++ add r11, r10 // src += stride ++#ifdef USE_PREFETCH ++ pref r11[0] ++#endif ++ add r12, r10 // dst += stride ++ sub r9, 2 ++ brne 0b ++ ++ popm r4-r7,pc ++ .endm ++ ++ /* Macro for 8 pixel wide horizontal interpolation functions */ ++ ++ .macro pixels8_h round, put ++ pushm r4-r7, lr ++ ++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ ++ /* ++ Pixel Naming Convention: ++ |--------------------------------------------------------------------| ++ | s00 d00 s01 d01 s02 d02 s03 d03 s04 d04 s05 d05 s06 d06 s07 d07 s08| ++ |------|-------|-------|-------|-------|-------|-------|-------|-----| ++ | s10 d10 s11 d11 s12 d12 s13 d13 s14 d14 s15 d15 s16 d16 s17 d17 s18| ++ |--------------------------------------------------------------------| ++ */ ++ ++ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 } ++ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 } ++ ld.w r7, r11[4] // r7 = { s04, s05, s06, s07 } ++ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 } ++ add r11, r10 // src += stride ++ ++0: ++ .if \round ++ pavg.ub lr, r8, lr // lr = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ pavg.ub r7, r6, r7 // r7 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} ++ .else ++ paddh.ub lr, r8, lr // lr = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ paddh.ub r7, r6, r7 // r7 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} ++ .endif ++ .if \put ++ ld.w r5, r11[0] // r5 = { s00, s01, s02, s03 } ++ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 } ++ .else ++ ld.w r8, r12[0] ++ ld.w r6, r12[4] ++ ld.w r5, r11[0] // r5 = { s00, s01, s02, s03 } ++ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 } ++ pavg.ub lr, lr, r8 ++ pavg.ub r7, r7, r6 ++ .endif ++ st.w r12[0], lr // dst = { d00, d01, d02, d03 } ++ st.w r12[4], r7 // dst = { d04, d05, d06, d07 } ++ ld.w r8, r11[4] // r8 = { s04, s05, s06, s07 } ++ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 } ++ add r11, r10 // src += stride ++#ifdef USE_PREFETCH ++ pref r11[0] ++#endif ++ add r12, r10 // dst += stride ++ ++ .if \round ++ pavg.ub r5, r4, r5 // r5 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ pavg.ub r4, r6, r8 // r4 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} ++ .else ++ paddh.ub r5, r4, r5 // r5 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ paddh.ub r4, r6, r8 // r4 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} ++ .endif ++ .if \put ++ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 } ++ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 } ++ .else ++ ld.w r7, r12[0] ++ ld.w r6, r12[4] ++ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 } ++ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 } ++ pavg.ub r5, r5, r7 ++ pavg.ub r4, r4, r6 ++ .endif ++ st.w r12[0], r5 // dst = { d00, d01, d02, d03 } ++ st.w r12[4], r4 // dst = { d04, d05, d06, d07 } ++ ld.w r7, r11[4] // r7 = { s04, s05, s06, s07 } ++ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 } ++ add r11, r10 // src += stride ++#ifdef USE_PREFETCH ++ pref r11[0] ++#endif ++ add r12, r10 // dst += stride ++ sub r9, 2 ++ brne 0b ++ ++ popm r4-r7, pc ++ .endm ++ ++ /* Macro for 8 pixel wide copy functions */ ++ .macro pixels8 put ++ stm --sp, r3-r7,lr ++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ ++ mov lr, r9 ++ sub r3, r10, 2 // stride2 = stride - 2 ++0: ++ .if \put ++ ld.w r9, r11[r10] // r9 = { s10, s11, s12, s13 } ++ ld.w r7, r11++ // r7 = { s00, s01, s02, s03 }, src += 4 ++ ld.w r6, r11[0] // r6 = { s04, s05, s06, s07 } ++ ld.w r8, r11[r10] // r8 = { s14, s15, s16, s17 } ++ .else ++ ld.w r9, r11[r10] // r9 = { s10, s11, s12, s13 } ++ ld.d r4, r12[0] ++ ld.w r7, r11++ // r7 = { s00, s01, s02, s03 }, src += 4 ++ ld.w r6, r11[0] // r6 = { s04, s05, s06, s07 } ++ ld.w r8, r11[r10] // r8 = { s14, s15, s16, s17 } ++ pavg.ub r6, r6, r4 ++ pavg.ub r7, r7, r5 ++ ld.d r4, r12[r10] ++ .endif ++ st.d r12, r6 // *dst = { s00, s01, s02, s03, s04, s05, s06, s07 } ++ add r11, r11, r3 << 1 // src += stride2 * 2 ++ .ifeq \put ++ pavg.ub r8, r8, r4 ++ pavg.ub r9, r9, r5 ++ .endif ++ st.d r12[r10 << 0], r8 // *(dst + stride) = { s10, s11, s12, s13, s14, s15, s16, s17 } ++ add r12, r12, r10 << 1 // dst += 2*stride ++ sub lr, 2 ++ brne 0b ++ ldm sp++, r3-r7,pc ++ ++ .endm ++ ++ .global put_no_rnd_pixels8_hv_avr32 ++ .text ++put_no_rnd_pixels8_hv_avr32: ++ pixels8_hv 0, 1 ++ ++ .global put_pixels8_hv_avr32 ++ .text ++put_pixels8_hv_avr32: ++ pixels8_hv 1, 1 ++ ++ .global avg_no_rnd_pixels8_hv_avr32 ++ .text ++avg_no_rnd_pixels8_hv_avr32: ++ pixels8_hv 0, 0 ++ ++ .global avg_pixels8_hv_avr32 ++ .text ++avg_pixels8_hv_avr32: ++ pixels8_hv 1, 0 ++ ++ .global put_no_rnd_pixels8_v_avr32 ++ .text ++put_no_rnd_pixels8_v_avr32: ++ pixels8_v 0, 1 ++ ++ .global put_pixels8_v_avr32 ++ .text ++put_pixels8_v_avr32: ++ pixels8_v 1, 1 ++ ++ .global avg_no_rnd_pixels8_v_avr32 ++ .text ++avg_no_rnd_pixels8_v_avr32: ++ pixels8_v 0, 0 ++ ++ .global avg_pixels8_v_avr32 ++ .text ++avg_pixels8_v_avr32: ++ pixels8_v 1, 0 ++ ++ .global put_no_rnd_pixels8_h_avr32 ++ .text ++put_no_rnd_pixels8_h_avr32: ++ pixels8_h 0, 1 ++ ++ .global put_pixels8_h_avr32 ++ .text ++put_pixels8_h_avr32: ++ pixels8_h 1, 1 ++ ++ .global avg_no_rnd_pixels8_h_avr32 ++ .text ++avg_no_rnd_pixels8_h_avr32: ++ pixels8_h 0, 0 ++ ++ .global avg_pixels8_h_avr32 ++ .text ++avg_pixels8_h_avr32: ++ pixels8_h 1, 0 ++ ++ .global put_pixels8_avr32 ++ .global put_no_rnd_pixels8_avr32 ++ .text ++put_pixels8_avr32: ++put_no_rnd_pixels8_avr32: ++ pixels8 1 ++ ++ .global avg_no_rnd_pixels8_avr32 ++ .global avg_pixels8_avr32 ++ .text ++avg_pixels8_avr32: ++avg_no_rnd_pixels8_avr32: ++ pixels8 0 +diff --git a/libavcodec/avr32/pico.h b/libavcodec/avr32/pico.h +new file mode 100644 +index 0000000..32201ba +--- /dev/null ++++ b/libavcodec/avr32/pico.h +@@ -0,0 +1,260 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++#ifndef __PICO_H__ ++#define __PICO_H__ ++ ++ ++ ++/* Coprocessor Number */ ++#define PICO_CPNO 1 ++ ++/* Pixel Coprocessor Register file */ ++#define PICO_REGVECT_INPIX2 cr0 ++#define PICO_REGVECT_INPIX1 cr1 ++#define PICO_REGVECT_INPIX0 cr2 ++#define PICO_REGVECT_OUTPIX2 cr3 ++#define PICO_REGVECT_OUTPIX1 cr4 ++#define PICO_REGVECT_OUTPIX0 cr5 ++#define PICO_REGVECT_COEFF0_A cr6 ++#define PICO_REGVECT_COEFF0_B cr7 ++#define PICO_REGVECT_COEFF1_A cr8 ++#define PICO_REGVECT_COEFF1_B cr9 ++#define PICO_REGVECT_COEFF2_A cr10 ++#define PICO_REGVECT_COEFF2_B cr11 ++#define PICO_REGVECT_VMU0_OUT cr12 ++#define PICO_REGVECT_VMU1_OUT cr13 ++#define PICO_REGVECT_VMU2_OUT cr14 ++#define PICO_REGVECT_CONFIG cr15 ++ ++#define PICO_INPIX2 0 ++#define PICO_INPIX1 1 ++#define PICO_INPIX0 2 ++#define PICO_OUTPIX2 3 ++#define PICO_OUTPIX1 4 ++#define PICO_OUTPIX0 5 ++#define PICO_COEFF0_A 6 ++#define PICO_COEFF0_B 7 ++#define PICO_COEFF1_A 8 ++#define PICO_COEFF1_B 9 ++#define PICO_COEFF2_A 10 ++#define PICO_COEFF2_B 11 ++#define PICO_VMU0_OUT 12 ++#define PICO_VMU1_OUT 13 ++#define PICO_VMU2_OUT 14 ++#define PICO_CONFIG 15 ++ ++/* Config Register */ ++#define PICO_COEFF_FRAC_BITS_OFFSET 0 ++#define PICO_COEFF_FRAC_BITS_SIZE 4 ++#define PICO_OFFSET_FRAC_BITS_OFFSET 4 ++#define PICO_OFFSET_FRAC_BITS_SIZE 4 ++#define PICO_INPUT_MODE_OFFSET 8 ++#define PICO_INPUT_MODE_SIZE 2 ++#define PICO_OUTPUT_MODE_OFFSET 10 ++#define PICO_OUTPUT_MODE_SIZE 1 ++ ++struct pico_config_t { ++ unsigned int : 32 - PICO_OUTPUT_MODE_OFFSET - PICO_OUTPUT_MODE_SIZE; ++ unsigned int output_mode : PICO_OUTPUT_MODE_SIZE; ++ unsigned int input_mode : PICO_INPUT_MODE_SIZE; ++ unsigned int offset_frac_bits : PICO_OFFSET_FRAC_BITS_SIZE; ++ unsigned int coeff_frac_bits : PICO_COEFF_FRAC_BITS_SIZE; ++ int vmu2_out; ++ int vmu1_out; ++ int vmu0_out; ++ short coeff2_2; ++ short coeff2_3; ++ short coeff2_0; ++ short coeff2_1; ++ short coeff1_2; ++ short coeff1_3; ++ short coeff1_0; ++ short coeff1_1; ++ short coeff0_2; ++ short coeff0_3; ++ short coeff0_0; ++ short coeff0_1; ++}; ++ ++ ++#define PICO_COEFF_FRAC_BITS(x) (x << PICO_COEFF_FRAC_BITS_OFFSET) ++#define PICO_OFFSET_FRAC_BITS(x) (x << PICO_OFFSET_FRAC_BITS_OFFSET) ++#define PICO_INPUT_MODE(x) (x << PICO_INPUT_MODE_OFFSET) ++#define PICO_OUTPUT_MODE(x) (x << PICO_OUTPUT_MODE_OFFSET) ++ ++#define GET_PICO_COEFF_FRAC_BITS(x) ((x >> PICO_COEFF_FRAC_BITS_OFFSET)&((1 << PICO_COEFF_FRAC_BITS_SIZE)-1)) ++#define GET_PICO_OFFSET_FRAC_BITS(x) ((x >> PICO_OFFSET_FRAC_BITS_OFFSET)&((1 << PICO_OFFSET_FRAC_BITS_SIZE)-1)) ++#define GET_PICO_INPUT_MODE(x) ((x >> PICO_INPUT_MODE_OFFSET)&((1 << PICO_INPUT_MODE_SIZE)-1)) ++#define GET_PICO_OUTPUT_MODE(x) ((x >> PICO_OUTPUT_MODE_OFFSET)&((1 << PICO_OUTPUT_MODE_SIZE)-1)) ++ ++enum pico_input_mode { PICO_TRANSFORMATION_MODE, ++ PICO_HOR_FILTER_MODE, ++ PICO_VERT_FILTER_MODE }; ++ ++enum pico_output_mode { PICO_PACKED_MODE, ++ PICO_PLANAR_MODE }; ++ ++/* Bits in coefficients */ ++#define PICO_COEFF_BITS 12 ++ ++/* Operation bits */ ++#define PICO_MATRIX (0) ++#define PICO_USE_ACC (1 << 2) ++#define PICO_SINGLE_VECTOR (1 << 3) ++ ++ ++#define __str(x...) #x ++#define __xstr(x...) __str(x) ++ ++#define PICO_PUT_W(pico_reg, x) \ ++ __builtin_mvrc_w(PICO_CPNO, pico_reg, x); ++#define PICO_GET_W(pico_reg) \ ++ __builtin_mvcr_w(PICO_CPNO, pico_reg) ++ ++#define PICO_MVCR_W(x, pico_reg) \ ++ asm ("mvcr.w\tcp" __xstr(PICO_CPNO) ", %0, cr" __xstr(pico_reg) : "=r"(x)); ++ ++#define PICO_MVRC_W(pico_reg, x) \ ++ asm ("mvrc.w\tcp" __xstr(PICO_CPNO) ", cr" __xstr(pico_reg) ", %0" :: "r"(x)); ++ ++#define PICO_PUT_D(pico_reg, x) \ ++ __builtin_mvrc_d(PICO_CPNO, pico_reg, x); ++#define PICO_GET_D(pico_reg) \ ++ __builtin_mvcr_d(PICO_CPNO, pico_reg) ++ ++#define PICO_MVCR_D(x, pico_reg) \ ++ asm volatile ("mvcr.d\tcp" __xstr(PICO_CPNO) ", %0, cr" __xstr(pico_reg) : "=r"(x)); ++#define PICO_MVRC_D(pico_reg, x) \ ++ asm volatile ("mvrc.d\tcp" __xstr(PICO_CPNO) ", cr" __xstr(pico_reg) ", %0" :: "r"(x)); ++ ++#define PICO_STCM_W(ptr, pico_regs...) \ ++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++#define PICO_STCM_D(ptr, pico_regs...) \ ++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++ ++#define PICO_STCM_W_DEC(ptr, pico_regs...) \ ++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); ++#define PICO_STCM_D_DEC(ptr, pico_regs...) \ ++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); ++ ++#define PICO_LDCM_W(ptr, pico_regs...) \ ++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++#define PICO_LDCM_D(ptr, pico_regs...) \ ++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++ ++#define PICO_LDCM_W_INC(ptr, pico_regs...) \ ++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); ++#define PICO_LDCM_D_INC(ptr, pico_regs...) \ ++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); ++ ++#define PICO_OP(op, dst_addr, addr0, addr1, addr2) \ ++ __builtin_cop(PICO_CPNO, addr0, addr1, addr2, op | dst_addr); ++ ++static inline void set_pico_config(struct pico_config_t *config){ ++ PICO_LDCM_D(config, ++ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B, ++ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B, ++ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B, ++ PICO_REGVECT_VMU0_OUT, PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT, PICO_REGVECT_CONFIG); ++} ++ ++static inline void get_pico_config(struct pico_config_t *config){ ++ PICO_STCM_D(config, ++ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B, ++ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B, ++ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B, ++ PICO_REGVECT_VMU0_OUT, PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT, PICO_REGVECT_CONFIG); ++} ++ ++static inline void dump_pico_config(){ ++ struct pico_config_t pico_config; ++ char *input_mode, *output_mode; ++ get_pico_config(&pico_config); ++ ++ ++ av_log(NULL, AV_LOG_INFO, "Dumping pico configuration:\n\n"); ++ av_log(NULL, AV_LOG_INFO, "\tcoeff_frac_bits = %d\n", pico_config.coeff_frac_bits); ++ av_log(NULL, AV_LOG_INFO, "\toffset_frac_bits = %d\n", pico_config.offset_frac_bits); ++ ++ switch ( pico_config.input_mode ){ ++ case PICO_TRANSFORMATION_MODE: ++ input_mode = "Transformation Mode"; ++ break; ++ case PICO_HOR_FILTER_MODE: ++ input_mode = "Horisontal Filter Mode"; ++ break; ++ case PICO_VERT_FILTER_MODE: ++ input_mode = "Vertical Filter Mode"; ++ break; ++ default: ++ input_mode = "Unknown Mode!!"; ++ break; ++ } ++ av_log(NULL, AV_LOG_INFO, "\tinput_mode = %s\n", input_mode); ++ ++ switch ( pico_config.output_mode ){ ++ case PICO_PLANAR_MODE: ++ output_mode = "Planar Mode"; ++ break; ++ case PICO_PACKED_MODE: ++ output_mode = "Packed Mode"; ++ break; ++ default: ++ output_mode = "Unknown Mode!!"; ++ break; ++ } ++ ++ av_log(NULL, AV_LOG_INFO, "\toutput_mode = %s\n", output_mode); ++ ++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_0 = %f\n", (float)pico_config.coeff0_0/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_1 = %f\n", (float)pico_config.coeff0_1/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_2 = %f\n", (float)pico_config.coeff0_2/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_3 = %f\n", (float)pico_config.coeff0_3/(float)(1 << pico_config.offset_frac_bits)); ++ ++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_0 = %f\n", (float)pico_config.coeff1_0/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_1 = %f\n", (float)pico_config.coeff1_1/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_2 = %f\n", (float)pico_config.coeff1_2/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_3 = %f\n", (float)pico_config.coeff1_3/(float)(1 << pico_config.offset_frac_bits)); ++ ++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_0 = %f\n", (float)pico_config.coeff2_0/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_1 = %f\n", (float)pico_config.coeff2_1/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_2 = %f\n", (float)pico_config.coeff2_2/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_3 = %f\n", (float)pico_config.coeff2_3/(float)(1 << pico_config.offset_frac_bits)); ++} ++ ++ ++ ++#endif ++ +diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h +index 26b4f8d..1f8fabf 100644 +--- a/libavcodec/bitstream.h ++++ b/libavcodec/bitstream.h +@@ -171,7 +171,7 @@ typedef struct RL_VLC_ELEM { + #endif + + /* used to avoid missaligned exceptions on some archs (alpha, ...) */ +-#if defined(ARCH_X86) || defined(ARCH_X86_64) ++#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_AVR32) + # define unaligned16(a) (*(const uint16_t*)(a)) + # define unaligned32(a) (*(const uint32_t*)(a)) + # define unaligned64(a) (*(const uint64_t*)(a)) +@@ -813,6 +813,44 @@ void free_vlc(VLC *vlc); + * if the vlc code is invalid and max_depth>1 than the number of bits removed + * is undefined + */ ++ ++#if defined(ARCH_AVR32) ++#define GET_VLC(code, name, gb, table, bits, max_depth)\ ++{\ ++ int n, index, nb_bits;\ ++ union { VLC_TYPE vlc[2];\ ++ uint32_t u32; } table_elem;\ ++\ ++ index= SHOW_UBITS(name, gb, bits);\ ++ table_elem.u32 = unaligned32(&table[index]); \ ++ code = table_elem.vlc[0];\ ++ n = table_elem.vlc[1];\ ++\ ++ if(max_depth > 1 && n < 0 ){\ ++ LAST_SKIP_BITS(name, gb, bits)\ ++ UPDATE_CACHE(name, gb)\ ++\ ++ nb_bits = -n;\ ++\ ++ index= SHOW_UBITS(name, gb, nb_bits) + code;\ ++ table_elem.u32 = unaligned32(&table[index]); \ ++ code = table_elem.vlc[0];\ ++ n = table_elem.vlc[1];\ ++ if(max_depth > 2 && n < 0){\ ++ LAST_SKIP_BITS(name, gb, nb_bits)\ ++ UPDATE_CACHE(name, gb)\ ++\ ++ nb_bits = -n;\ ++\ ++ index= SHOW_UBITS(name, gb, nb_bits) + code;\ ++ code = table[index][0];\ ++ n = table[index][1];\ ++ }\ ++ }\ ++ SKIP_BITS(name, gb, n)\ ++} ++ ++#else + #define GET_VLC(code, name, gb, table, bits, max_depth)\ + {\ + int n, index, nb_bits;\ +@@ -821,7 +859,7 @@ void free_vlc(VLC *vlc); + code = table[index][0];\ + n = table[index][1];\ + \ +- if(max_depth > 1 && n < 0){\ ++ if(max_depth > 1 && n < 0 ){\ + LAST_SKIP_BITS(name, gb, bits)\ + UPDATE_CACHE(name, gb)\ + \ +@@ -843,7 +881,38 @@ void free_vlc(VLC *vlc); + }\ + SKIP_BITS(name, gb, n)\ + } ++#endif + ++#if defined(ARCH_AVR32) ++#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\ ++{\ ++ int n, index, nb_bits;\ ++ union { RL_VLC_ELEM vlc;\ ++ uint32_t u32; } table_elem;\ ++\ ++ index= SHOW_UBITS(name, gb, bits);\ ++ table_elem.u32 = unaligned32(&table[index]); \ ++ level = table_elem.vlc.level;\ ++ n = table_elem.vlc.len;\ ++\ ++ if(max_depth > 1 && n < 0 ){\ ++ SKIP_BITS(name, gb, bits)\ ++ if(need_update){\ ++ UPDATE_CACHE(name, gb)\ ++ }\ ++\ ++ nb_bits = -n;\ ++\ ++ index= SHOW_UBITS(name, gb, nb_bits) + level;\ ++ table_elem.u32 = unaligned32(&table[index]); \ ++ level = table_elem.vlc.level;\ ++ n = table_elem.vlc.len;\ ++ }\ ++ run= table_elem.vlc.run;\ ++ SKIP_BITS(name, gb, n)\ ++} ++ ++#else + #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\ + {\ + int n, index, nb_bits;\ +@@ -852,7 +921,7 @@ void free_vlc(VLC *vlc); + level = table[index].level;\ + n = table[index].len;\ + \ +- if(max_depth > 1 && n < 0){\ ++ if(max_depth > 1 && n < 0 ){\ + SKIP_BITS(name, gb, bits)\ + if(need_update){\ + UPDATE_CACHE(name, gb)\ +@@ -867,7 +936,7 @@ void free_vlc(VLC *vlc); + run= table[index].run;\ + SKIP_BITS(name, gb, n)\ + } +- ++#endif + + /** + * parses a vlc code, faster then get_vlc() +diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c +index 56c42b9..8fc10c6 100644 +--- a/libavcodec/dsputil.c ++++ b/libavcodec/dsputil.c +@@ -4197,6 +4197,9 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx) + #ifdef ARCH_BFIN + dsputil_init_bfin(c,avctx); + #endif ++#ifdef ARCH_AVR32 ++ dsputil_init_avr32(c,avctx); ++#endif + + for(i=0; i<64; i++){ + if(!c->put_2tap_qpel_pixels_tab[0][i]) +diff --git a/libavcodec/h264.c b/libavcodec/h264.c +index 865e80a..8f7c3f1 100644 +--- a/libavcodec/h264.c ++++ b/libavcodec/h264.c +@@ -3258,7 +3258,12 @@ static void free_tables(H264Context *h){ + + static void init_dequant8_coeff_table(H264Context *h){ + int i,q,x; ++#ifdef ARCH_AVR32 ++ const int transpose = 0; ++#else + const int transpose = (h->s.dsp.h264_idct8_add != ff_h264_idct8_add_c); //FIXME ugly ++#endif ++ + h->dequant8_coeff[0] = h->dequant8_buffer[0]; + h->dequant8_coeff[1] = h->dequant8_buffer[1]; + +@@ -3281,7 +3286,13 @@ static void init_dequant8_coeff_table(H264Context *h){ + + static void init_dequant4_coeff_table(H264Context *h){ + int i,j,q,x; ++ // Yes this is ugly as hell.... ++#ifdef ARCH_AVR32 ++ const int transpose = 0; ++#else + const int transpose = (h->s.dsp.h264_idct_add != ff_h264_idct_add_c); //FIXME ugly ++#endif ++ + for(i=0; i<6; i++ ){ + h->dequant4_coeff[i] = h->dequant4_buffer[i]; + for(j=0; jdsp.h264_idct_add == ff_h264_idct_add_c){ //FIXME little ugly ++#endif + memcpy(h->zigzag_scan, zigzag_scan, 16*sizeof(uint8_t)); + memcpy(h-> field_scan, field_scan, 16*sizeof(uint8_t)); + }else{ +diff --git a/libavutil/common.h b/libavutil/common.h +index 3ae5971..7e52b90 100644 +--- a/libavutil/common.h ++++ b/libavutil/common.h +@@ -283,23 +283,39 @@ static inline int mid_pred(int a, int b, int c) + * @param amax maximum value of the clip range + * @return cliped value + */ ++#if defined(ARCH_AVR32) ++#define clip(a, amin, amax) \ ++ ({ int __tmp__; \ ++ asm ("min\t%0, %1, %2\n" \ ++ "max\t%0, %0, %3\n" \ ++ : "=&r"(__tmp__) : "r"(a), "r"(amax), "r"(amin)); \ ++ __tmp__; }) ++#else + static inline int clip(int a, int amin, int amax) + { + if (a < amin) return amin; + else if (a > amax) return amax; + else return a; + } ++#endif + + /** + * clip a signed integer value into the 0-255 range + * @param a value to clip + * @return cliped value + */ ++#if defined(ARCH_AVR32) ++#define clip_uint8(a) \ ++ ({ int __tmp__ = a; \ ++ asm ("satu\t%0 >> 0, 8" : "+r"(__tmp__)); \ ++ __tmp__; }) ++#else + static inline uint8_t clip_uint8(int a) + { + if (a&(~255)) return (-a)>>31; + else return a; + } ++#endif + + /* math */ + int64_t ff_gcd(int64_t a, int64_t b); +diff --git a/libavutil/internal.h b/libavutil/internal.h +index 285d304..a8b0718 100644 +--- a/libavutil/internal.h ++++ b/libavutil/internal.h +@@ -210,6 +210,15 @@ if((y)<(x)){\ + }\ + } + ++/* XXX: Hack for uclibc which declares lrintf but does not implement it... */ ++#ifdef ARCH_AVR32 ++#undef HAVE_LRINTF ++#define HAVE_LRINTF 1 ++#define lrintf(x) rint(x) ++#define llrint(x) (long long)rint(x) ++#endif ++ ++ + #ifndef HAVE_LRINTF + /* XXX: add ISOC specific test to avoid specific BSD testing. */ + /* better than nothing implementation. */ +diff --git a/libfaad2/common.h b/libfaad2/common.h +index f809042..6c5fb21 100644 +--- a/libfaad2/common.h ++++ b/libfaad2/common.h +@@ -67,7 +67,7 @@ extern "C" { + /* Use if target platform has address generators with autoincrement */ + //#define PREFER_POINTERS + +-#if defined(_WIN32_WCE) || defined(__arm__) ++#if defined(_WIN32_WCE) || defined(__arm__) || defined(__avr32__) + #define FIXED_POINT + #endif + +diff --git a/libmpcodecs/ad_libmad.c b/libmpcodecs/ad_libmad.c +index 076359a..51b77fe 100644 +--- a/libmpcodecs/ad_libmad.c ++++ b/libmpcodecs/ad_libmad.c +@@ -86,6 +86,11 @@ static int init(sh_audio_t *sh){ + sh->channels=(this->frame.header.mode == MAD_MODE_SINGLE_CHANNEL) ? 1 : 2; + sh->samplerate=this->frame.header.samplerate; + sh->i_bps=this->frame.header.bitrate/8; ++#ifdef WORDS_BIGENDIAN ++ sh->sample_format = AF_FORMAT_S16_BE; ++#else ++ sh->sample_format = AF_FORMAT_S16_LE; ++#endif + sh->samplesize=2; + + return 1; +diff --git a/libswscale/pico-avr32.h b/libswscale/pico-avr32.h +new file mode 100644 +index 0000000..7ac6200 +--- /dev/null ++++ b/libswscale/pico-avr32.h +@@ -0,0 +1,137 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++#ifndef __PICO_H__ ++#define __PICO_H__ ++ ++/* Coprocessor Number */ ++#define PICO_CPNO 1 ++ ++/* Pixel Coprocessor Register file */ ++#define PICO_REGVECT_INPIX2 cr0 ++#define PICO_REGVECT_INPIX1 cr1 ++#define PICO_REGVECT_INPIX0 cr2 ++#define PICO_REGVECT_OUTPIX2 cr3 ++#define PICO_REGVECT_OUTPIX1 cr4 ++#define PICO_REGVECT_OUTPIX0 cr5 ++#define PICO_REGVECT_COEFF0_A cr6 ++#define PICO_REGVECT_COEFF0_B cr7 ++#define PICO_REGVECT_COEFF1_A cr8 ++#define PICO_REGVECT_COEFF1_B cr9 ++#define PICO_REGVECT_COEFF2_A cr10 ++#define PICO_REGVECT_COEFF2_B cr11 ++#define PICO_REGVECT_VMU0_OUT cr12 ++#define PICO_REGVECT_VMU1_OUT cr13 ++#define PICO_REGVECT_VMU2_OUT cr14 ++#define PICO_REGVECT_CONFIG cr15 ++ ++#define PICO_INPIX2 0 ++#define PICO_INPIX1 1 ++#define PICO_INPIX0 2 ++#define PICO_OUTPIX2 3 ++#define PICO_OUTPIX1 4 ++#define PICO_OUTPIX0 5 ++#define PICO_COEFF0_A 6 ++#define PICO_COEFF0_B 7 ++#define PICO_COEFF1_A 8 ++#define PICO_COEFF1_B 9 ++#define PICO_COEFF2_A 10 ++#define PICO_COEFF2_B 11 ++#define PICO_VMU0_OUT 12 ++#define PICO_VMU1_OUT 13 ++#define PICO_VMU2_OUT 14 ++#define PICO_CONFIG 15 ++ ++/* Config Register */ ++#define PICO_COEFF_FRAC_BITS 0 ++#define PICO_COEFF_FRAC_BITS_WIDTH 4 ++#define PICO_OFFSET_FRAC_BITS 4 ++#define PICO_OFFSET_FRAC_BITS_WIDTH 4 ++#define PICO_INPUT_MODE 8 ++#define PICO_INPUT_MODE_WIDTH 2 ++#define PICO_OUTPUT_MODE 10 ++ ++#define PICO_TRANSFORMATION_MODE 0 ++#define PICO_HOR_FILTER_MODE 1 ++#define PICO_VERT_FILTER_MODE 2 ++ ++#define PICO_PLANAR_MODE 1 ++#define PICO_PACKED_MODE 0 ++ ++/* Bits in coefficients */ ++#define PICO_COEFF_BITS 12 ++ ++/* Operation bits */ ++#define PICO_USE_ACC (1 << 2) ++#define PICO_SINGLE_VECTOR (1 << 3) ++ ++ ++#define __str(x...) #x ++#define __xstr(x...) __str(x) ++ ++#define PICO_PUT_W(pico_reg, x) \ ++ __builtin_mvrc_w(PICO_CPNO, pico_reg, x); ++#define PICO_GET_W(pico_reg) \ ++ __builtin_mvcr_w(PICO_CPNO, pico_reg) ++ ++#define PICO_PUT_D(pico_reg, x) \ ++ __builtin_mvrc_d(PICO_CPNO, pico_reg, x); ++#define PICO_GET_D(pico_reg) \ ++ __builtin_mvcr_d(PICO_CPNO, pico_reg) ++ ++ ++#define PICO_STCM_W(ptr, pico_regs...) \ ++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++#define PICO_STCM_D(ptr, pico_regs...) \ ++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++ ++#define PICO_STCM_W_DEC(ptr, pico_regs...) \ ++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); ++#define PICO_STCM_D_DEC(ptr, pico_regs...) \ ++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); ++ ++#define PICO_LDCM_W(ptr, pico_regs...) \ ++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++#define PICO_LDCM_D(ptr, pico_regs...) \ ++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++ ++#define PICO_LDCM_W_INC(ptr, pico_regs...) \ ++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); ++#define PICO_LDCM_D_INC(ptr, pico_regs...) \ ++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); ++ ++#define PICO_OP(op, dst_addr, addr0, addr1, addr2) \ ++ __builtin_cop(PICO_CPNO, addr0, addr1, addr2, op | dst_addr); ++ ++ ++#endif ++ +diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h +index ecd28f5..3221d0c 100644 +--- a/libswscale/swscale_internal.h ++++ b/libswscale/swscale_internal.h +@@ -173,7 +173,7 @@ typedef struct SwsContext{ + SwsFunc yuv2rgb_get_func_ptr (SwsContext *c); + int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation); + +-char *sws_format_name(int format); ++char *sws_format_name(enum PixelFormat format); + + //FIXME replace this with something faster + #define isPlanarYUV(x) ((x)==PIX_FMT_YUV410P || (x)==PIX_FMT_YUV420P \ +diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c +index 71759bc..fa83985 100644 +--- a/libswscale/yuv2rgb.c ++++ b/libswscale/yuv2rgb.c +@@ -44,6 +44,10 @@ + #include "yuv2rgb_mlib.c" + #endif + ++#ifdef ARCH_AVR32 ++#include "yuv2rgb_avr32.c" ++#endif ++ + #define DITHER1XBPP // only for mmx + + const uint8_t __attribute__((aligned(8))) dither_2x2_4[2][8]={ +@@ -601,6 +605,12 @@ SwsFunc yuv2rgb_get_func_ptr (SwsContext *c) + if(t) return t; + } + #endif ++#ifdef ARCH_AVR32 ++ { ++ SwsFunc t= yuv2rgb_init_avr32(c); ++ if(t) return t; ++ } ++#endif + #ifdef HAVE_ALTIVEC + if (c->flags & SWS_CPU_CAPS_ALTIVEC) + { +@@ -678,6 +688,10 @@ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, + //printf("%lld %lld %lld %lld %lld\n", cy, crv, cbu, cgu, cgv); + oy -= 256*brightness; + ++#ifdef ARCH_AVR32 ++ yuv2rgb_c_init_tables_avr32 (c, inv_table, fullRange, brightness, contrast, saturation); ++#endif ++ + for (i = 0; i < 1024; i++) { + int j; + +diff --git a/libswscale/yuv2rgb_avr32.c b/libswscale/yuv2rgb_avr32.c +new file mode 100644 +index 0000000..4a8341e +--- /dev/null ++++ b/libswscale/yuv2rgb_avr32.c +@@ -0,0 +1,416 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++#include "pico-avr32.h" ++ ++ ++#define RGB(uv_part) \ ++ __asm__ volatile ( \ ++ "ld.w\t%0, %3[%7:" uv_part " << 2]\n\t" /* tmp = c->table_gV[V] */ \ ++ "ld.w\t%1, %4[%8:" uv_part " << 2]\n\t" /* g = c->table_gU[U] */ \ ++ "ld.w\t%2, %5[%8:" uv_part " << 2]\n\t" /* b = c->table_bU[U] */ \ ++ "add\t%1, %0\n\t" /* g += tmp */\ ++ "ld.w\t%0, %6[%7:" uv_part " << 2]" /* r = c->table_rV[V] */ \ ++ : "=&r" (r), "=&r" (g), "=&r" (b) \ ++ : "r" (&c->table_gV[0]), "r" (&c->table_gU[0]),"r" (&c->table_bU[0]), \ ++ "r" (&c->table_rV[0]), "r" (V), "r" (U)); ++ ++ ++#undef YUV2RGB1 ++#define YUV2RGB1(dst, src, y, idx) \ ++ { int tmp2; __asm__ volatile ( \ ++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[2] = tmp; */ \ ++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[0] = tmp; */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 3], %1\n\t" /* dst_1[5] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ ++ "st.b\t%7[6*%8 + 5], %1" /* dst_1[3] = tmp; */ \ ++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ ++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } ++ ++#undef YUV2RGB2 ++#define YUV2RGB2(dst, src, y, idx) \ ++ { int tmp2; __asm__ volatile ( \ ++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[2] = tmp; */ \ ++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[0] = tmp; */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 3], %1\n\t" /* dst_1[5] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ ++ "st.b\t%7[6*%8 + 5], %1" /* dst_1[3] = tmp; */ \ ++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ ++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } ++ ++ ++#undef YUV2BGR1 ++#define YUV2BGR1(dst, src, y, idx) \ ++ { int tmp2; __asm__ volatile ( \ ++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[2] = tmp; */ \ ++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[0] = tmp; */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 5], %1\n\t" /* dst_1[5] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ ++ "st.b\t%7[6*%8 + 3], %1" /* dst_1[3] = tmp; */ \ ++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ ++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } ++ ++#undef YUV2BGR2 ++#define YUV2BGR2(dst, src, y, idx) \ ++ { int tmp2; __asm__ volatile ( \ ++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[2] = tmp; */ \ ++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[0] = tmp; */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 5], %1\n\t" /* dst_1[5] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ ++ "st.b\t%7[6*%8 + 3], %1" /* dst_1[3] = tmp; */ \ ++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ ++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } ++ ++ ++ ++int yuv2bgr24_avr32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, ++ int srcSliceH, uint8_t* dst[], int dstStride[]){ ++ int y; ++ ++ if(c->srcFormat == PIX_FMT_YUV422P){ ++ srcStride[1] *= 2; ++ srcStride[2] *= 2; ++ } ++ ++ ++ for(y=0; y>1)*srcStride[1]; ++ uint8_t *pv= src[2] + (y>>1)*srcStride[2]; ++ unsigned int h_size= c->dstW>>3; ++ while (h_size--) { ++ uint32_t U, V, Y1, Y2, tmp; ++ U = ((uint32_t*)pu)[0]; ++ V = ((uint32_t*)pv)[0]; ++ ++ RGB("t") ++ YUV2BGR1(dst_1, py_1, Y1, 0) ++ YUV2BGR1(dst_2, py_2, Y2, 0) ++ ++ RGB("u") ++ YUV2BGR2(dst_1, py_1, Y1, 1) ++ YUV2BGR2(dst_2, py_2, Y2, 1) ++ ++ RGB("l") ++ YUV2BGR1(dst_1, py_1, Y1, 2) ++ YUV2BGR1(dst_2, py_2, Y2, 2) ++ ++ RGB("b") ++ YUV2BGR2(dst_1, py_1, Y1, 3) ++ YUV2BGR2(dst_2, py_2, Y2, 3) ++ ++ ++ ++ pu += 4; ++ pv += 4; ++ py_1 += 8; ++ py_2 += 8; ++ dst_1 += 24; ++ dst_2 += 24; ++ } ++ } ++ return srcSliceH; ++} ++ ++ ++ ++static int yuv2rgb24_avr32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, ++ int srcSliceH, uint8_t* dst[], int dstStride[]){ ++ int y; ++ ++ if(c->srcFormat == PIX_FMT_YUV422P){ ++ srcStride[1] *= 2; ++ srcStride[2] *= 2; ++ } ++ for(y=0; y>1)*srcStride[1]; ++ uint8_t *pv= src[2] + (y>>1)*srcStride[2]; ++ unsigned int h_size= c->dstW>>3; ++ while (h_size--) { ++ uint32_t U, V, Y1, Y2, tmp; ++ U = ((uint32_t*)pu)[0]; ++ V = ((uint32_t*)pv)[0]; ++ ++ RGB("t") ++ YUV2RGB1(dst_1, py_1, Y1, 0) ++ YUV2RGB1(dst_2, py_2, Y2, 0) ++ ++ RGB("u") ++ YUV2RGB2(dst_1, py_1, Y1, 1) ++ YUV2RGB2(dst_2, py_2, Y2, 1) ++ ++ RGB("l") ++ YUV2RGB1(dst_1, py_1, Y1, 2) ++ YUV2RGB1(dst_2, py_2, Y2, 2) ++ ++ RGB("b") ++ YUV2RGB2(dst_1, py_1, Y1, 3) ++ YUV2RGB2(dst_2, py_2, Y2, 3) ++ ++ pu += 4; ++ pv += 4; ++ py_1 += 8; ++ py_2 += 8; ++ dst_1 += 24; ++ dst_2 += 24; ++ } ++ } ++ return srcSliceH; ++} ++ ++#define SCALE(x, bits) (((x) + ( 1 << (bits - 1))) >> bits) ++#define COEFF_FRAC_BITS 9 ++#define OFFSET_FRAC_BITS 2 ++ ++/* Coefficients used in the pico */ ++static struct { ++ short coeff2_2; ++ short coeff2_3; ++ short coeff2_0; ++ short coeff2_1; ++ short coeff1_2; ++ short coeff1_3; ++ short coeff1_0; ++ short coeff1_1; ++ short coeff0_2; ++ short coeff0_3; ++ short coeff0_0; ++ short coeff0_1; ++} pico_coeff; ++ ++ ++static int yuv2bgr24_avr32_pico(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, ++ int srcSliceH, uint8_t* dst[], int dstStride[]){ ++ int y; ++ static int first_time = 1; ++ ++ /* Initialize pico */ ++ PICO_LDCM_D(&pico_coeff, ++ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B, ++ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B, ++ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B); ++ ++ PICO_PUT_W(PICO_CONFIG, ++ (PICO_PACKED_MODE << PICO_OUTPUT_MODE ++ | PICO_TRANSFORMATION_MODE << PICO_INPUT_MODE ++ | OFFSET_FRAC_BITS << PICO_OFFSET_FRAC_BITS ++ | COEFF_FRAC_BITS << PICO_COEFF_FRAC_BITS)); ++ ++ ++ if(c->srcFormat == PIX_FMT_YUV422P){ ++ srcStride[1] *= 2; ++ srcStride[2] *= 2; ++ } ++ ++ for(y=0; y>1)*srcStride[1]; ++ uint8_t *pv= src[2] + (y>>1)*srcStride[2]; ++ unsigned int h_size= c->dstW>>3; ++ int *py_1_int = (int *)py_1; ++ int *py_2_int = (int *)py_2; ++ int *pu_int = (int *)pu; ++ int *pv_int = (int *)pv; ++ while (h_size--) { ++ PICO_PUT_W(PICO_INPIX0, *py_1_int++); ++ PICO_PUT_W(PICO_INPIX1, *pu_int++); ++ PICO_PUT_W(PICO_INPIX2, *pv_int++); ++ PICO_OP(0, 0, 0, 4, 8); ++ PICO_OP(0, 1, 1, 4, 8); ++ PICO_OP(0, 2, 2, 5, 9); ++ PICO_OP(0, 3, 3, 5, 9); ++ PICO_PUT_W(PICO_INPIX0, *py_1_int++); ++ PICO_STCM_W(dst_1, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); ++ PICO_OP(0, 0, 0, 6, 10); ++ PICO_OP(0, 1, 1, 6, 10); ++ PICO_OP(0, 2, 2, 7, 11); ++ PICO_OP(0, 3, 3, 7, 11); ++ PICO_PUT_W(PICO_INPIX0, *py_2_int++); ++ PICO_STCM_W(dst_1 + 12, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); ++ ++ PICO_OP(0, 0, 0, 4, 8); ++ PICO_OP(0, 1, 1, 4, 8); ++ PICO_OP(0, 2, 2, 5, 9); ++ PICO_OP(0, 3, 3, 5, 9); ++ PICO_PUT_W(PICO_INPIX0, *py_2_int++); ++ PICO_STCM_W(dst_2, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); ++ PICO_OP(0, 0, 0, 6, 10); ++ PICO_OP(0, 1, 1, 6, 10); ++ PICO_OP(0, 2, 2, 7, 11); ++ PICO_OP(0, 3, 3, 7, 11); ++ PICO_STCM_W(dst_2 + 12, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); ++ ++ dst_1 += 24; ++ dst_2 += 24; ++ } ++ } ++ return srcSliceH; ++} ++ ++extern int avr32_use_pico; ++ ++SwsFunc yuv2rgb_init_avr32 (SwsContext *c){ ++ switch(c->dstFormat){ ++ case PIX_FMT_BGR24: ++ { ++ if ( avr32_use_pico ){ ++ MSG_ERR("AVR32 BGR24: Using PICO for color space conversion\n"); ++ return yuv2bgr24_avr32_pico; ++ } else { ++ MSG_ERR("AVR32 BGR24: Using optimized color space conversion\n"); ++ return yuv2bgr24_avr32; ++ } ++ } ++ break; ++ case PIX_FMT_RGB24: ++ { ++ if ( avr32_use_pico ){ ++ MSG_ERR("AVR32 RGB24: Using PICO for color space conversion\n"); ++ return yuv2bgr24_avr32_pico; ++ } else { ++ MSG_ERR("AVR32 RGB24: Using optimized color space conversion\n"); ++ return yuv2rgb24_avr32; ++ } ++ } ++ } ++ return NULL; ++} ++ ++ ++int yuv2rgb_c_init_tables_avr32 (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation){ ++ const int isRgb = (c->dstFormat == PIX_FMT_RGB24); ++ ++ int64_t crv = inv_table[0]; ++ int64_t cbu = inv_table[1]; ++ int64_t cgu = -inv_table[2]; ++ int64_t cgv = -inv_table[3]; ++ int64_t cy = 1<<16; ++ int64_t oy = 0; ++ ++ if(!fullRange){ ++ cy= (cy*255) / 219; ++ oy= 16<<16; ++ } ++ ++ cy = (cy *contrast )>>16; ++ crv= (crv*contrast * saturation)>>32; ++ cbu= (cbu*contrast * saturation)>>32; ++ cgu= (cgu*contrast * saturation)>>32; ++ cgv= (cgv*contrast * saturation)>>32; ++ ++ oy -= 256*brightness; ++ ++ pico_coeff.coeff1_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* G <- Y */ ++ pico_coeff.coeff1_1 = SCALE(cgu, 16 - COEFF_FRAC_BITS); /* G <- U */ ++ pico_coeff.coeff1_2 = SCALE(cgv, 16 - COEFF_FRAC_BITS); /* G <- V */ ++ pico_coeff.coeff1_3 = (SCALE(-128*cgu - 128*cgv - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* G offset */ ++ ++ if ( isRgb ){ ++ pico_coeff.coeff0_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* R <- Y */ ++ pico_coeff.coeff0_1 = 0; /* R <- U */ ++ pico_coeff.coeff0_2 = SCALE(crv, 16 - COEFF_FRAC_BITS); /* R <- V */ ++ pico_coeff.coeff0_3 = (SCALE(-128*crv - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* R offset */ ++ ++ pico_coeff.coeff2_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* B <- Y */ ++ pico_coeff.coeff2_1 = SCALE(cbu, 16 - COEFF_FRAC_BITS); /* B <- U */ ++ pico_coeff.coeff2_2 = 0; /* B <- V */ ++ pico_coeff.coeff2_3 = (SCALE(-128*cbu - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1)));/* B offset */ ++ } else { ++ pico_coeff.coeff2_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* R <- Y */ ++ pico_coeff.coeff2_1 = 0; /* R <- U */ ++ pico_coeff.coeff2_2 = SCALE(crv, 16 - COEFF_FRAC_BITS); /* R <- V */ ++ pico_coeff.coeff2_3 = (SCALE(-128*crv - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* R offset */ ++ ++ pico_coeff.coeff0_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* B <- Y */ ++ pico_coeff.coeff0_1 = SCALE(cbu, 16 - COEFF_FRAC_BITS); /* B <- U */ ++ pico_coeff.coeff0_2 = 0; /* B <- V */ ++ pico_coeff.coeff0_3 = (SCALE(-128*cbu - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* B offset */ ++ } ++ ++} ++ ++ ++#undef RGB +diff --git a/libvo/vo_fbdev2.c b/libvo/vo_fbdev2.c +index 053c193..7017770 100644 +--- a/libvo/vo_fbdev2.c ++++ b/libvo/vo_fbdev2.c +@@ -22,6 +22,9 @@ + #include "sub.h" + #include "mp_msg.h" + ++/* Draw directly to framebuffer */ ++#define USE_CONVERT2FB ++ + static vo_info_t info = { + "Framebuffer Device", + "fbdev2", +@@ -178,6 +181,15 @@ static int fb_preinit(int reset) + } + fb_orig_vinfo = fb_vinfo; + ++ /* Reset panning offset */ ++ fb_vinfo.yoffset = 0; ++ if (ioctl(fb_dev_fd, FBIOPAN_DISPLAY, &fb_vinfo)) { ++ mp_msg(MSGT_VO, MSGL_ERR, ++ "[fbdev2] FBIOPAN_DISPLAY failed: %s\n", ++ strerror(errno)); ++ return 0; ++ } ++ + fb_bpp = fb_vinfo.bits_per_pixel; + + /* 16 and 15 bpp is reported as 16 bpp */ +@@ -289,6 +301,10 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, + mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't malloc next_frame: %s\n", strerror(errno)); + return 1; + } ++#else ++ if ((fb_line_len * fb_vinfo.yres) <= (fb_finfo.smem_len / 2) ++ && fb_vinfo.yoffset == 0) ++ center += fb_line_len * fb_vinfo.yres; + #endif + if (fs) memset(frame_buffer, '\0', fb_line_len * fb_vinfo.yres); + +@@ -299,14 +315,22 @@ static int query_format(uint32_t format) + { + // open the device, etc. + if (fb_preinit(0)) return 0; +- if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR) { ++ if ((format & IMGFMT_RGB_MASK) == IMGFMT_RGB) { + int fb_target_bpp = format & 0xff; + set_bpp(&fb_vinfo, fb_target_bpp); + fb_vinfo.xres_virtual = fb_vinfo.xres; +- fb_vinfo.yres_virtual = fb_vinfo.yres; ++ fb_vinfo.yres_virtual = fb_vinfo.yres * 2; + if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_vinfo)) { +- mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't put VSCREENINFO: %s\n", strerror(errno)); +- return 0; ++ mp_msg(MSGT_VO, MSGL_WARN, ++ "[fbdev2] Can't double virtual y resolution: %s\n", ++ strerror(errno)); ++ fb_vinfo.yres_virtual = fb_vinfo.yres; ++ if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_vinfo)) { ++ mp_msg(MSGT_VO, MSGL_ERR, ++ "[fbdev2] Can't put VSCREENINFO: %s\n", ++ strerror(errno)); ++ return -1; ++ } + } + fb_pixel_size = fb_vinfo.bits_per_pixel / 8; + fb_bpp = fb_vinfo.red.length + fb_vinfo.green.length + +@@ -367,16 +391,67 @@ static void check_events(void) + + static void flip_page(void) + { +-#ifndef USE_CONVERT2FB + int i, out_offset = 0, in_offset = 0; + +- for (i = 0; i < in_height; i++) { +- memcpy(center + out_offset, next_frame + in_offset, +- in_width * fb_pixel_size); +- out_offset += fb_line_len; +- in_offset += in_width * fb_pixel_size; +- } ++#ifndef USE_CONVERT2FB ++ if (1) { ++#else ++ if (fb_vinfo.yres_virtual == fb_vinfo.yres) { + #endif ++ for (i = 0; i < in_height; i++) { ++ memcpy(center + out_offset, next_frame + in_offset, ++ in_width * fb_pixel_size); ++ out_offset += fb_line_len; ++ in_offset += in_width * fb_pixel_size; ++ } ++ } else { ++ if (fb_vinfo.yoffset == 0) { ++ fb_vinfo.yoffset += fb_vinfo.yres; ++ center -= fb_line_len * fb_vinfo.yres; ++ } else { ++ fb_vinfo.yoffset = 0; ++ center += fb_line_len * fb_vinfo.yres; ++ } ++ ++ if (ioctl(fb_dev_fd, FBIOPAN_DISPLAY, &fb_vinfo)) { ++ mp_msg(MSGT_VO, MSGL_ERR, ++ "[fbdev2] Can't FBIOPAN_DISPLAY: %s\n", ++ strerror(errno)); ++ } ++ } ++} ++ ++static uint32_t get_image(mp_image_t *mpi) ++{ ++ if(mpi->flags&MP_IMGFLAG_READABLE) ++ return VO_FALSE; // slow video ram ++ if(mpi->type==MP_IMGTYPE_STATIC) ++ return VO_FALSE; // it is not static ++ ++ if (mpi->flags & (MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_ACCEPT_WIDTH)) { ++ // we're lucky or codec accepts stride => ok, let's go! ++ ++ //YUY2 and RGB formats ++ mpi->planes[0] = center; ++ mpi->width = in_width; ++ mpi->stride[0] = fb_line_len; ++ ++ // center image ++ ++ mpi->flags |= MP_IMGFLAG_DIRECT; ++ ++ return VO_TRUE; ++ } ++ ++ return VO_FALSE; ++} ++ ++static uint32_t put_image(mp_image_t *mpi) ++{ ++ // already out? ++ if ((mpi->flags & (MP_IMGFLAG_DIRECT | MP_IMGFLAG_DRAW_CALLBACK))) ++ return VO_TRUE; ++ return VO_FALSE; + } + + static void uninit(void) +@@ -403,6 +478,10 @@ static int control(uint32_t request, void *data, ...) + switch (request) { + case VOCTRL_QUERY_FORMAT: + return query_format(*((uint32_t*)data)); ++ case VOCTRL_GET_IMAGE: ++ return get_image(data); ++ case VOCTRL_DRAW_IMAGE: ++ return put_image(data); + } + return VO_NOTIMPL; + } +diff --git a/version.sh b/version.sh +index 44b5c5d..cf22a68 100755 +--- a/version.sh ++++ b/version.sh +@@ -1,2 +1,2 @@ + #!/bin/sh +-echo "#define VERSION \"1.0rc1-$1\"" > version.h ++echo "#define VERSION \"1.0rc1.atmel.2-$1\"" > version.h diff --git a/packages/mplayer/mplayer_0.0+1.0rc1.bb b/packages/mplayer/mplayer_0.0+1.0rc1.bb index 6d9cd754d5..c0062bddd9 100644 --- a/packages/mplayer/mplayer_0.0+1.0rc1.bb +++ b/packages/mplayer/mplayer_0.0+1.0rc1.bb @@ -22,7 +22,11 @@ SRC_URI = "http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2 \ file://imageon-video_out.patch;patch=1 \ file://powerpc-is-ppc.diff;patch=1 \ file://pxa_configure.patch;patch=1 \ - file://pxa-video_out.patch;patch=1 " + file://pxa-video_out.patch;patch=1 \ + " + +SRC_URI_append_avr32 = " file://mplayer-1.0rc1-atmel.2.patch;patch=1 \ + " # This is required for the collie machine only as all stacks in that # machine seem to be set to executable by the toolchain. If someone @@ -34,7 +38,7 @@ PACKAGE_ARCH_mencoder_collie = "collie" RCONFLICTS_${PN} = "mplayer-atty" RREPLACES_${PN} = "mplayer-atty" -PR = "r14" +PR = "r15" PARALLEL_MAKE = "" -- cgit v1.2.3 From b12771b51a72ccf6d4bfecf0fc22d09846ba8525 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 13 Sep 2007 11:52:19 +0000 Subject: uclibc 0.9.28: add missing avr32 patch --- .../avr32/ldso-define-MAP_FAILED.patch | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch new file mode 100644 index 0000000000..d2838ef197 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch @@ -0,0 +1,23 @@ +Subject: [PATCH] ldso: Define MAP_FAILED for _dl_mmap() + +When using mmap2() to emulate mmap(), _dl_mmap() uses MAP_FAILED to +indicate failure. MAP_FAILED is not defined anywhere, so this patch +defines it. + +--- + + ldso/include/dl-syscall.h | 1 + + 1 file changed, 1 insertion(+) + +Index: uClibc-0.9.28/ldso/include/dl-syscall.h +=================================================================== +--- uClibc-0.9.28.orig/ldso/include/dl-syscall.h 2006-02-07 16:49:27.000000000 +0100 ++++ uClibc-0.9.28/ldso/include/dl-syscall.h 2006-02-07 17:07:06.000000000 +0100 +@@ -132,6 +132,7 @@ static inline _syscall6(__ptr_t, __sysca + size_t, len, int, prot, int, flags, int, fd, off_t, offset); + /*always 12, even on architectures where PAGE_SHIFT != 12 */ + #define MMAP2_PAGE_SHIFT 12 ++#define MAP_FAILED ((void *) -1) + static inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { -- cgit v1.2.3 From 6e6f3fc99a12d6b8a120b5981cacb57f3c87db39 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 13 Sep 2007 13:50:43 +0000 Subject: gcc-package-cross.inc: avr32 gcc doesn't create lib*.so, so don't error out on missing files * bad fix, the check needs fixing --- packages/gcc/gcc-package-cross.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gcc/gcc-package-cross.inc b/packages/gcc/gcc-package-cross.inc index a7a4908120..5f77642fe5 100644 --- a/packages/gcc/gcc-package-cross.inc +++ b/packages/gcc/gcc-package-cross.inc @@ -47,12 +47,12 @@ do_install () { elif [ -f ${D}${prefix}/lib/libgcc_s.so.? ]; then mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir} else - mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} + mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} || true fi # Move libstdc++ and libg2c into libdir (resetting our prefix to /usr mkdir -p ${D}${target_libdir} - mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} + mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} || true if [ "${HAS_G2C}" = "yes" ]; then mv -f ${D}${prefix}/*/lib/libg2c.so* ${D}${target_libdir} || true fi -- cgit v1.2.3 From d2d8fe90e59dd05ad18c41ff35a643c5c8498c59 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 14 Sep 2007 06:55:52 +0000 Subject: utillinux: add patch to fix avr32 compilation --- packages/util-linux/files/fdiskbsdlabel-avr32.patch | 11 +++++++++++ packages/util-linux/util-linux_2.12r.bb | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 packages/util-linux/files/fdiskbsdlabel-avr32.patch diff --git a/packages/util-linux/files/fdiskbsdlabel-avr32.patch b/packages/util-linux/files/fdiskbsdlabel-avr32.patch new file mode 100644 index 0000000000..4a7d8f4dc8 --- /dev/null +++ b/packages/util-linux/files/fdiskbsdlabel-avr32.patch @@ -0,0 +1,11 @@ +--- /tmp/fdiskbsdlabel.h 2007-09-14 08:52:56.188364759 +0200 ++++ util-linux-2.12r/fdisk/fdiskbsdlabel.h 2007-09-14 08:53:31.279986639 +0200 +@@ -43,7 +43,7 @@ + + #define BSD_LINUX_BOOTDIR "/usr/ucb/mdec" + +-#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__) ++#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__) || defined(__avr32__) + #define BSD_LABELSECTOR 1 + #define BSD_LABELOFFSET 0 + #elif defined (__alpha__) || defined (__powerpc__) || defined (__ia64__) || defined (__hppa__) diff --git a/packages/util-linux/util-linux_2.12r.bb b/packages/util-linux/util-linux_2.12r.bb index 9d4b59c855..7f8c3dd9f8 100644 --- a/packages/util-linux/util-linux_2.12r.bb +++ b/packages/util-linux/util-linux_2.12r.bb @@ -3,5 +3,6 @@ require util-linux.inc SRC_URI += "file://util-linux_2.12r-12.diff.gz;patch=1" SRC_URI += "file://glibc-fix.patch;patch=1" SRC_URI += "file://glibc-umount2.patch;patch=1" +SRC_URI += "file://fdiskbsdlabel-avr32.patch;patch=1" -PR = "r12" +PR = "r13" -- cgit v1.2.3 From a50f3c05fc84d7d914e6a8287c82581462302bbe Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 14 Sep 2007 07:28:02 +0000 Subject: busybox: add defconfig for avr32 that disables md5, since that fails to link --- .../busybox/busybox-1.2.1/avr32/.mtn2git_empty | 0 packages/busybox/busybox-1.2.1/avr32/defconfig | 643 +++++++++++++++++++++ 2 files changed, 643 insertions(+) create mode 100644 packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty create mode 100644 packages/busybox/busybox-1.2.1/avr32/defconfig diff --git a/packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty b/packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/busybox/busybox-1.2.1/avr32/defconfig b/packages/busybox/busybox-1.2.1/avr32/defconfig new file mode 100644 index 0000000000..b15f162a7d --- /dev/null +++ b/packages/busybox/busybox-1.2.1/avr32/defconfig @@ -0,0 +1,643 @@ +# +# Automatically generated make config: don't edit +# +HAVE_DOT_CONFIG=y + +# +# Busybox Settings +# + +# +# General Configuration +# +# CONFIG_NITPICK is not set +# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_SHOW_USAGE=y +# CONFIG_FEATURE_VERBOSE_USAGE is not set +# CONFIG_FEATURE_COMPRESS_USAGE is not set +# CONFIG_FEATURE_INSTALLER is not set +CONFIG_LOCALE_SUPPORT=y +CONFIG_GETOPT_LONG=y +CONFIG_FEATURE_DEVPTS=y +# CONFIG_FEATURE_CLEAN_UP is not set +# CONFIG_FEATURE_SUID is not set +# CONFIG_FEATURE_SUID_CONFIG is not set +# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set +# CONFIG_SELINUX is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" + +# +# Build Options +# +# CONFIG_STATIC is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_LFS=y +USING_CROSS_COMPILER=y +CROSS_COMPILER_PREFIX="avr32-angstrom-linux-uclibc-" +CONFIG_BUILD_AT_ONCE=y + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_DEBUG_PESSIMIZE is not set +# CONFIG_NO_DEBUG_LIB is not set +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set +CONFIG_DEBUG_YANK_SUSv2=y + +# +# Installation Options +# +# CONFIG_INSTALL_NO_USR is not set +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +PREFIX="./_install" + +# +# Busybox Library Tuning +# +CONFIG_MD5_SIZE_VS_SPEED=2 + +# +# Applets +# + +# +# Archival Utilities +# +CONFIG_AR=y +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +CONFIG_BUNZIP2=y +CONFIG_CPIO=y +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set +CONFIG_GUNZIP=y +# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set +CONFIG_GZIP=y +# CONFIG_RPM2CPIO is not set +# CONFIG_RPM is not set +CONFIG_TAR=y +CONFIG_FEATURE_TAR_CREATE=y +CONFIG_FEATURE_TAR_BZIP2=y +# CONFIG_FEATURE_TAR_LZMA is not set +CONFIG_FEATURE_TAR_FROM=y +CONFIG_FEATURE_TAR_GZIP=y +# CONFIG_FEATURE_TAR_COMPRESS is not set +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set +# CONFIG_UNCOMPRESS is not set +# CONFIG_UNLZMA is not set +# CONFIG_FEATURE_LZMA_FAST is not set +CONFIG_UNZIP=y + +# +# Common options for cpio and tar +# +# CONFIG_FEATURE_UNARCHIVE_TAPE is not set +# CONFIG_FEATURE_DEB_TAR_GZ is not set +# CONFIG_FEATURE_DEB_TAR_BZ2 is not set +# CONFIG_FEATURE_DEB_TAR_LZMA is not set + +# +# Coreutils +# +CONFIG_BASENAME=y +# CONFIG_CAL is not set +CONFIG_CAT=y +# CONFIG_CATV is not set +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +CONFIG_CHROOT=y +# CONFIG_CKSUM is not set +# CONFIG_CMP is not set +# CONFIG_COMM is not set +CONFIG_CP=y +CONFIG_CUT=y +CONFIG_DATE=y +# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_IBS_OBS is not set +CONFIG_DF=y +CONFIG_DIFF=y +CONFIG_FEATURE_DIFF_BINARY=y +CONFIG_FEATURE_DIFF_DIR=y +# CONFIG_FEATURE_DIFF_MINIMAL is not set +CONFIG_DIRNAME=y +# CONFIG_DOS2UNIX is not set +# CONFIG_UNIX2DOS is not set +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +CONFIG_FEATURE_ENV_LONG_OPTIONS=y +CONFIG_EXPR=y +# CONFIG_EXPR_MATH_SUPPORT_64 is not set +CONFIG_FALSE=y +# CONFIG_FOLD is not set +CONFIG_HEAD=y +# CONFIG_FEATURE_FANCY_HEAD is not set +# CONFIG_HOSTID is not set +CONFIG_ID=y +# CONFIG_INSTALL is not set +# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set +# CONFIG_LENGTH is not set +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set +# CONFIG_MD5SUM is not set +CONFIG_MKDIR=y +CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +CONFIG_MV=y +# CONFIG_FEATURE_MV_LONG_OPTIONS is not set +# CONFIG_NICE is not set +CONFIG_NOHUP=y +CONFIG_OD=y +# CONFIG_PRINTENV is not set +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +# CONFIG_SHA1SUM is not set +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_STAT is not set +# CONFIG_FEATURE_STAT_FORMAT is not set +CONFIG_STTY=y +# CONFIG_SUM is not set +CONFIG_SYNC=y +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set +CONFIG_TEST=y +# CONFIG_FEATURE_TEST_64 is not set +CONFIG_TOUCH=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +# CONFIG_FEATURE_TR_EQUIV is not set +CONFIG_TRUE=y +CONFIG_TTY=y +CONFIG_UNAME=y +CONFIG_UNIQ=y +CONFIG_USLEEP=y +# CONFIG_UUDECODE is not set +# CONFIG_UUENCODE is not set +CONFIG_WATCH=y +CONFIG_WC=y +CONFIG_WHO=y +CONFIG_WHOAMI=y +CONFIG_YES=y + +# +# Common options for cp and mv +# +# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set + +# +# Common options for ls, more and telnet +# +CONFIG_FEATURE_AUTOWIDTH=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y +# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set + +# +# Console Utilities +# +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y +CONFIG_LOADFONT=y +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +CONFIG_SETCONSOLE=y +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +# CONFIG_SETKEYCODES is not set +# CONFIG_SETLOGCONS is not set + +# +# Debian Utilities +# +CONFIG_MKTEMP=y +# CONFIG_PIPE_PROGRESS is not set +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_RUN_PARTS=y +# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +CONFIG_START_STOP_DAEMON=y +CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y +CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y +CONFIG_WHICH=y + +# +# Editors +# +CONFIG_AWK=y +CONFIG_FEATURE_AWK_MATH=y +# CONFIG_ED is not set +CONFIG_PATCH=y +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +CONFIG_FEATURE_VI_USE_SIGNALS=y +# CONFIG_FEATURE_VI_DOT_CMD is not set +# CONFIG_FEATURE_VI_READONLY is not set +# CONFIG_FEATURE_VI_SETOPTS is not set +# CONFIG_FEATURE_VI_SET is not set +CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_XDEV=y +CONFIG_FEATURE_FIND_NEWER=y +# CONFIG_FEATURE_FIND_INUM is not set +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_GREP=y +CONFIG_FEATURE_GREP_EGREP_ALIAS=y +CONFIG_FEATURE_GREP_FGREP_ALIAS=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set +# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set +# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set + +# +# Init Utilities +# +# CONFIG_INIT is not set +# CONFIG_DEBUG_INIT is not set +# CONFIG_FEATURE_USE_INITTAB is not set +# CONFIG_FEATURE_INIT_SCTTY is not set +# CONFIG_FEATURE_EXTRA_QUIET is not set +# CONFIG_FEATURE_INIT_COREDUMPS is not set +# CONFIG_FEATURE_INITRD is not set +# CONFIG_HALT is not set +# CONFIG_MESG is not set + +# +# Login/Password Management Utilities +# +# CONFIG_FEATURE_SHADOWPASSWDS is not set +# CONFIG_USE_BB_SHADOW is not set +# CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_ADDGROUP is not set +# CONFIG_DELGROUP is not set +# CONFIG_ADDUSER is not set +# CONFIG_DELUSER is not set +# CONFIG_GETTY is not set +CONFIG_FEATURE_UTMP=y +# CONFIG_FEATURE_WTMP is not set +# CONFIG_LOGIN is not set +# CONFIG_FEATURE_SECURETTY is not set +# CONFIG_PASSWD is not set +# CONFIG_SU is not set +# CONFIG_SULOGIN is not set +# CONFIG_VLOCK is not set + +# +# Linux Ext2 FS Progs +# +CONFIG_CHATTR=y +CONFIG_E2FSCK=y +CONFIG_FSCK=y +# CONFIG_LSATTR is not set +CONFIG_MKE2FS=y +# CONFIG_TUNE2FS is not set +# CONFIG_E2LABEL is not set +# CONFIG_FINDFS is not set + +# +# Linux Module Utilities +# +CONFIG_INSMOD=y +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +CONFIG_RMMOD=y +CONFIG_LSMOD=y +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +CONFIG_MODPROBE=y +CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y + +# +# Options common to multiple modutils +# +CONFIG_FEATURE_CHECK_TAINTED_MODULE=y +# CONFIG_FEATURE_2_4_MODULES is not set +CONFIG_FEATURE_2_6_MODULES=y +# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set + +# +# Linux System Utilities +# +CONFIG_DMESG=y +CONFIG_FBSET=y +CONFIG_FEATURE_FBSET_FANCY=y +CONFIG_FEATURE_FBSET_READMODE=y +# CONFIG_FDFLUSH is not set +# CONFIG_FDFORMAT is not set +CONFIG_FDISK=y +FDISK_SUPPORT_LARGE_DISKS=y +CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_FDISK_ADVANCED is not set +# CONFIG_FREERAMDISK is not set +CONFIG_FSCK_MINIX=y +CONFIG_MKFS_MINIX=y + +# +# Minix filesystem support +# +CONFIG_FEATURE_MINIX2=y +# CONFIG_GETOPT is not set +CONFIG_HEXDUMP=y +CONFIG_HWCLOCK=y +CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y +CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +CONFIG_LOSETUP=y +# CONFIG_MDEV is not set +# CONFIG_FEATURE_MDEV_CONF is not set +# CONFIG_FEATURE_MDEV_EXEC is not set +CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_V0 is not set +CONFIG_MORE=y +CONFIG_FEATURE_USE_TERMIOS=y +CONFIG_MOUNT=y +CONFIG_FEATURE_MOUNT_NFS=y +CONFIG_PIVOT_ROOT=y +CONFIG_RDATE=y +# CONFIG_READPROFILE is not set +# CONFIG_SETARCH is not set +CONFIG_SWAPONOFF=y +CONFIG_SWITCH_ROOT=y +CONFIG_UMOUNT=y +# CONFIG_FEATURE_UMOUNT_ALL is not set + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set + +# +# Miscellaneous Utilities +# +# CONFIG_ADJTIMEX is not set +# CONFIG_BBCONFIG is not set +# CONFIG_CROND is not set +# CONFIG_DEBUG_CROND_OPTION is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +# CONFIG_CRONTAB is not set +CONFIG_DC=y +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +# CONFIG_EJECT is not set +# CONFIG_LAST is not set +CONFIG_LESS=y +CONFIG_FEATURE_LESS_BRACKETS=y +CONFIG_FEATURE_LESS_FLAGS=y +# CONFIG_FEATURE_LESS_FLAGCS is not set +# CONFIG_FEATURE_LESS_MARKS is not set +# CONFIG_FEATURE_LESS_REGEXP is not set +# CONFIG_HDPARM is not set +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +# CONFIG_MAKEDEVS is not set +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +# CONFIG_FEATURE_MAKEDEVS_TABLE is not set +# CONFIG_MOUNTPOINT is not set +# CONFIG_MT is not set +# CONFIG_RUNLEVEL is not set +# CONFIG_RX is not set +CONFIG_STRINGS=y +# CONFIG_SETSID is not set +# CONFIG_TASKSET is not set +CONFIG_TIME=y +# CONFIG_WATCHDOG is not set + +# +# Networking Utilities +# +CONFIG_FEATURE_IPV6=y +# CONFIG_ARPING is not set +# CONFIG_DNSD is not set +# CONFIG_ETHER_WAKE is not set +# CONFIG_FAKEIDENTD is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set +# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +# CONFIG_FEATURE_IFCONFIG_SLIP is not set +# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set +CONFIG_FEATURE_IFCONFIG_HW=y +# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +CONFIG_IFUPDOWN=y +# CONFIG_FEATURE_IFUPDOWN_IP is not set +CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y +# CONFIG_FEATURE_IFUPDOWN_IPX is not set +CONFIG_FEATURE_IFUPDOWN_MAPPING=y +# CONFIG_INETD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_TUNNEL=y +# CONFIG_FEATURE_IP_SHORT_FORMS is not set +# CONFIG_IPADDR is not set +# CONFIG_IPLINK is not set +# CONFIG_IPROUTE is not set +# CONFIG_IPTUNNEL is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_NAMEIF is not set +CONFIG_NC=y +# CONFIG_NC_GAPING_SECURITY_HOLE is not set +CONFIG_NETSTAT=y +CONFIG_NSLOOKUP=y +CONFIG_PING=y +CONFIG_FEATURE_FANCY_PING=y +CONFIG_PING6=y +CONFIG_FEATURE_FANCY_PING6=y +CONFIG_ROUTE=y +CONFIG_TELNET=y +# CONFIG_FEATURE_TELNET_TTYPE is not set +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +# CONFIG_TELNETD is not set +# CONFIG_FEATURE_TELNETD_INETD is not set +CONFIG_TFTP=y +CONFIG_FEATURE_TFTP_GET=y +CONFIG_FEATURE_TFTP_PUT=y +# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set +# CONFIG_DEBUG_TFTP is not set +CONFIG_TRACEROUTE=y +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set + +# +# udhcp Server/Client +# +CONFIG_APP_UDHCPD=y +CONFIG_APP_UDHCPC=y +CONFIG_APP_DUMPLEASES=y +CONFIG_FEATURE_UDHCP_SYSLOG=y +# CONFIG_FEATURE_UDHCP_DEBUG is not set +# CONFIG_VCONFIG is not set +CONFIG_WGET=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_IP6_LITERAL=y +CONFIG_FEATURE_WGET_LONG_OPTIONS=y +# CONFIG_ZCIP is not set + +# +# Process Utilities +# +CONFIG_FREE=y +CONFIG_FUSER=y +CONFIG_KILL=y +CONFIG_KILLALL=y +CONFIG_PIDOF=y +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set +CONFIG_PS=y +CONFIG_FEATURE_PS_WIDE=y +CONFIG_RENICE=y +CONFIG_BB_SYSCTL=y +CONFIG_TOP=y +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_UPTIME=y + +# +# Shells +# +CONFIG_FEATURE_SH_IS_ASH=y +# CONFIG_FEATURE_SH_IS_HUSH is not set +# CONFIG_FEATURE_SH_IS_LASH is not set +# CONFIG_FEATURE_SH_IS_MSH is not set +# CONFIG_FEATURE_SH_IS_NONE is not set +CONFIG_ASH=y + +# +# Ash Shell Options +# +CONFIG_ASH_JOB_CONTROL=y +# CONFIG_ASH_READ_NCHARS is not set +# CONFIG_ASH_READ_TIMEOUT is not set +CONFIG_ASH_ALIAS=y +CONFIG_ASH_MATH_SUPPORT=y +# CONFIG_ASH_MATH_SUPPORT_64 is not set +CONFIG_ASH_GETOPTS=y +# CONFIG_ASH_BUILTIN_ECHO is not set +CONFIG_ASH_BUILTIN_TEST=y +# CONFIG_ASH_CMDCMD is not set +# CONFIG_ASH_MAIL is not set +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +# CONFIG_ASH_RANDOM_SUPPORT is not set +CONFIG_ASH_EXPAND_PRMT=y +# CONFIG_HUSH is not set +# CONFIG_LASH is not set +# CONFIG_MSH is not set + +# +# Bourne Shell Options +# +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set +CONFIG_FEATURE_COMMAND_EDITING=y +# CONFIG_FEATURE_COMMAND_EDITING_VI is not set +CONFIG_FEATURE_COMMAND_HISTORY=63 +# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set +CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y +# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set +CONFIG_FEATURE_SH_FANCY_PROMPT=y + +# +# System Logging Utilities +# +CONFIG_SYSLOGD=y +CONFIG_FEATURE_ROTATE_LOGFILE=y +CONFIG_FEATURE_REMOTE_LOG=y +CONFIG_FEATURE_IPC_SYSLOG=y +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 +CONFIG_LOGREAD=y +CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y +CONFIG_KLOGD=y +CONFIG_LOGGER=y -- cgit v1.2.3 From 4d76ff2e324f46d4aa330658566a19f59755b751 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 14 Sep 2007 07:49:12 +0000 Subject: avr32 machines: remove uImage from rootfs, needs a better way --- conf/machine/at32stk1000.conf | 4 +++- conf/machine/atngw100.conf | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/conf/machine/at32stk1000.conf b/conf/machine/at32stk1000.conf index 21ffdda843..343c6aa44e 100644 --- a/conf/machine/at32stk1000.conf +++ b/conf/machine/at32stk1000.conf @@ -21,5 +21,7 @@ ROOT_FLASH_SIZE = "8" EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" KERNEL_IMAGETYPE = "uImage" +PREFERRED_VERSION_u-boot = "1.1.4" + +ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* ;" -PREFERRED_VERSION_u-boot = "1.1.4" \ No newline at end of file diff --git a/conf/machine/atngw100.conf b/conf/machine/atngw100.conf index 76453323ff..6acc3d7907 100644 --- a/conf/machine/atngw100.conf +++ b/conf/machine/atngw100.conf @@ -19,4 +19,6 @@ ROOT_FLASH_SIZE = "8" EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" PREFERRED_VERSION_u-boot = "1.1.4" -KERNEL_IMAGETYPE = "uImage" \ No newline at end of file +KERNEL_IMAGETYPE = "uImage" + +ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* ;" -- cgit v1.2.3 From b156888739f1b0a7ae1ea5dc8edd808a045ee3d0 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 14 Sep 2007 08:27:57 +0000 Subject: avr32 site: add ac_cv_linux_vers=${ac_cv_linux_vers=2} --- site/avr32-common | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/site/avr32-common b/site/avr32-common index 5f44f0ac89..1b357a8a97 100644 --- a/site/avr32-common +++ b/site/avr32-common @@ -15,4 +15,5 @@ as_cv_unaligned_access=${as_cv_unaligned_access=no} #readline bash_cv_have_mbstate_t=${bash_cv_have_mbstate_t=yes} - +#libpcap +ac_cv_linux_vers=${ac_cv_linux_vers=2} -- cgit v1.2.3 From 5c5a3a267b01ee1dec04d79c3408cff29e1662a3 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 14 Sep 2007 09:17:57 +0000 Subject: avr32 gcc: update to atmel 1.1.0 release --- packages/gcc/avr32-gcc-cross_4.1.2.bb | 2 +- packages/gcc/avr32-gcc_4.1.2.bb | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/gcc/avr32-gcc-cross_4.1.2.bb b/packages/gcc/avr32-gcc-cross_4.1.2.bb index e34098f840..765619ad69 100644 --- a/packages/gcc/avr32-gcc-cross_4.1.2.bb +++ b/packages/gcc/avr32-gcc-cross_4.1.2.bb @@ -5,7 +5,7 @@ inherit cross FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}" # NOTE: split PR. If the main .oe changes something that affects its *build* # remember to increment this one too. -PR = "r0" +PR = "r1" DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native" PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++" diff --git a/packages/gcc/avr32-gcc_4.1.2.bb b/packages/gcc/avr32-gcc_4.1.2.bb index 60254db87e..fd461728bd 100644 --- a/packages/gcc/avr32-gcc_4.1.2.bb +++ b/packages/gcc/avr32-gcc_4.1.2.bb @@ -1,8 +1,10 @@ require gcc_${PV}.bb +PR = "r1" + FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/gcc-4.1.2', '${FILE_DIRNAME}/gcc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}" -SRC_URI = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.0.0.tar.gz \ +SRC_URI = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.1.0.tar.gz \ # file://100-uclibc-conf.patch;patch=1 \ # file://200-uclibc-locale.patch;patch=1 \ # file://300-libstdc++-pic.patch;patch=1 \ -- cgit v1.2.3 From bd11c73fc1aaf59a0f21fc4ad173ab17388ecaa1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 14 Sep 2007 12:10:37 +0000 Subject: avahi: add IPV6 definitions to make compilation go further --- packages/avahi/avahi_0.6.21.bb | 1 + packages/avahi/files/avr32-ipv6-fix.patch | 42 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 packages/avahi/files/avr32-ipv6-fix.patch diff --git a/packages/avahi/avahi_0.6.21.bb b/packages/avahi/avahi_0.6.21.bb index fa3fef039e..2c30fbc2c8 100644 --- a/packages/avahi/avahi_0.6.21.bb +++ b/packages/avahi/avahi_0.6.21.bb @@ -2,3 +2,4 @@ require avahi.inc PR = "r1" SRC_URI += "file://dbus-pre-1.1.1-support.patch;patch=1" +SRC_URI += "file://avr32-ipv6-fix.patch;patch=1" diff --git a/packages/avahi/files/avr32-ipv6-fix.patch b/packages/avahi/files/avr32-ipv6-fix.patch new file mode 100644 index 0000000000..f0710a1002 --- /dev/null +++ b/packages/avahi/files/avr32-ipv6-fix.patch @@ -0,0 +1,42 @@ +--- /tmp/socket.c 2007-09-14 14:03:01.395330465 +0200 ++++ avahi-0.6.21/avahi-core/socket.c 2007-09-14 14:08:42.081140297 +0200 +@@ -66,6 +66,39 @@ + #endif + #endif + ++#define IPV6_ADDRFORM 1 ++#define IPV6_2292PKTINFO 2 ++#define IPV6_2292HOPOPTS 3 ++#define IPV6_2292DSTOPTS 4 ++#define IPV6_2292RTHDR 5 ++#define IPV6_2292PKTOPTIONS 6 ++#define IPV6_CHECKSUM 7 ++#define IPV6_2292HOPLIMIT 8 ++#define IPV6_NEXTHOP 9 ++#define IPV6_AUTHHDR 10 /* obsolete */ ++#define IPV6_FLOWINFO 11 ++ ++#define IPV6_UNICAST_HOPS 16 ++#define IPV6_MULTICAST_IF 17 ++#define IPV6_MULTICAST_HOPS 18 ++#define IPV6_MULTICAST_LOOP 19 ++#define IPV6_ADD_MEMBERSHIP 20 ++#define IPV6_DROP_MEMBERSHIP 21 ++#define IPV6_ROUTER_ALERT 22 ++#define IPV6_MTU_DISCOVER 23 ++#define IPV6_MTU 24 ++#define IPV6_RECVERR 25 ++#define IPV6_V6ONLY 26 ++#define IPV6_JOIN_ANYCAST 27 ++#define IPV6_LEAVE_ANYCAST 28 ++ ++/* IPV6_MTU_DISCOVER values */ ++#define IPV6_PMTUDISC_DONT 0 ++#define IPV6_PMTUDISC_WANT 1 ++#define IPV6_PMTUDISC_DO 2 ++#define IPV6_PMTUDISC_PROBE 3 ++ ++ + static void mdns_mcast_group_ipv4(struct sockaddr_in *ret_sa) { + assert(ret_sa); + -- cgit v1.2.3 From d40abc25e7e7c7a64709828055322321cbebc3e9 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 30 Sep 2007 09:28:24 +0000 Subject: gcc-package-cross: fix for avr32-gcc and cross-linkage changes --- packages/gcc/gcc-package-cross.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/gcc/gcc-package-cross.inc b/packages/gcc/gcc-package-cross.inc index a251fe4bfa..036bbf7b00 100644 --- a/packages/gcc/gcc-package-cross.inc +++ b/packages/gcc/gcc-package-cross.inc @@ -44,14 +44,14 @@ do_install () { # Already in the right location : elif [ -f ${D}${prefix}/lib/libgcc_s.so.? ]; then - mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir} + mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir} || true else mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} || true fi # Move libstdc++ and libg2c into libdir (resetting our prefix to /usr mkdir -p ${D}${target_libdir} - mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} + mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/libg2c.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/libgfortran*.so* ${D}${target_libdir} || true @@ -60,7 +60,7 @@ do_install () { if [ "x${OLD_INHIBIT_PACKAGE_STRIP}" != "x1" ]; then ${TARGET_PREFIX}strip ${D}${target_libdir}/libstdc++.so.* ${TARGET_PREFIX}strip ${D}${target_libdir}/libg2c.so.* || true - ${TARGET_PREFIX}strip ${D}${target_base_libdir}/libgcc_s.so.* + ${TARGET_PREFIX}strip ${D}${target_base_libdir}/libgcc_s.so.* || true ${TARGET_PREFIX}strip ${D}${target_libdir}/libgfortran*.so* || true fi } -- cgit v1.2.3 From 57a52f7882678d0cc0112cd1c764da108ac0583f Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 30 Sep 2007 15:32:37 +0000 Subject: xserver-kdrive: make 1.3.0.0 and 1.4 build --- packages/xorg-xserver/files/.mtn2git_empty | 0 packages/xorg-xserver/files/xorg-avr32-support.diff | 19 +++++++++++++++++++ packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb | 5 +++-- packages/xorg-xserver/xserver-kdrive_1.4.bb | 4 +++- 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 packages/xorg-xserver/files/.mtn2git_empty create mode 100644 packages/xorg-xserver/files/xorg-avr32-support.diff diff --git a/packages/xorg-xserver/files/.mtn2git_empty b/packages/xorg-xserver/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/xorg-xserver/files/xorg-avr32-support.diff b/packages/xorg-xserver/files/xorg-avr32-support.diff new file mode 100644 index 0000000000..dd7d379010 --- /dev/null +++ b/packages/xorg-xserver/files/xorg-avr32-support.diff @@ -0,0 +1,19 @@ +--- /tmp/servermd.h 2007-09-30 17:27:22.310911628 +0200 ++++ xorg-server-1.4/include/servermd.h 2007-09-30 17:28:25.297799199 +0200 +@@ -130,6 +130,16 @@ + + #endif /* vax */ + ++#ifdef __avr32__ ++ ++#define IMAGE_BYTE_ORDER MSBFirst ++#define BITMAP_BIT_ORDER MSBFirst ++#define GLYPHPADBYTES 4 ++#define GETLEFTBITS_ALIGNMENT 1 ++#define AVOID_MEMORY_READ ++ ++#endif /* __avr32__ */ ++ + #ifdef __arm32__ + + #define IMAGE_BYTE_ORDER LSBFirst diff --git a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb index 5f0896f3ed..e49650dc61 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb @@ -3,7 +3,7 @@ require xserver-kdrive-common.inc DEPENDS += "libxkbfile libxcalibrate" PE = "1" -PR = "r17" +PR = "r18" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ ${KDRIVE_COMMON_PATCHES} \ @@ -19,7 +19,8 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://w100.patch;patch=1 \ file://w100-autofoo.patch;patch=1 \ file://w100-fix-offscreen-bmp.patch;patch=1 \ - " + file://xorg-avr32-support.diff;patch=1 \ + " S = "${WORKDIR}/xorg-server-${PV}" diff --git a/packages/xorg-xserver/xserver-kdrive_1.4.bb b/packages/xorg-xserver/xserver-kdrive_1.4.bb index 87880c9ef8..8d91e3b8f3 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.4.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.4.bb @@ -3,6 +3,7 @@ require xserver-kdrive-common.inc DEPENDS += "libxkbfile libxcalibrate pixman" PE = "1" +PR = "r1" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ ${KDRIVE_COMMON_PATCHES} \ @@ -18,7 +19,8 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://xcalibrate-new-input-world-order.patch;patch=1 \ file://tslib-default-device.patch;patch=1 \ file://fbdev-evdev.patch;patch=1 \ - " + file://xorg-avr32-support.diff;patch=1 \ + " S = "${WORKDIR}/xorg-server-${PV}" -- cgit v1.2.3 From f2253ce9643943256c0cfe4f73c662a11c1792ca Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 30 Sep 2007 16:26:09 +0000 Subject: site: add more entries for avr32 --- site/avr32-common | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/site/avr32-common b/site/avr32-common index 1b357a8a97..b5b176cad7 100644 --- a/site/avr32-common +++ b/site/avr32-common @@ -17,3 +17,9 @@ bash_cv_have_mbstate_t=${bash_cv_have_mbstate_t=yes} #libpcap ac_cv_linux_vers=${ac_cv_linux_vers=2} + +#startup notification +ac_cv_func_realloc_works=${ac_cv_func_realloc_works=yes} +ac_cv_func_realloc_0_nonnull=${ac_cv_func_realloc_0_nonnull=yes} +lf_cv_sane_realloc=yes + -- cgit v1.2.3 From 1466348a03b6af7034ca91618a74a33e5665540b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 20 Oct 2007 15:48:00 +0000 Subject: gcc: merge avr32 bits into proper gcc files --- packages/gcc/gcc-cross_4.1.2.bb | 4 +++- packages/gcc/gcc_4.1.2.bb | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/gcc/gcc-cross_4.1.2.bb b/packages/gcc/gcc-cross_4.1.2.bb index 3272876326..0a44a671ee 100644 --- a/packages/gcc/gcc-cross_4.1.2.bb +++ b/packages/gcc/gcc-cross_4.1.2.bb @@ -5,7 +5,7 @@ inherit cross FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}" # NOTE: split PR. If the main .oe changes something that affects its *build* # remember to increment this one too. -PR = "r9" +PR = "r10" DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native" PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++" @@ -17,4 +17,6 @@ require gcc-package-cross.inc SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 " +EXTRA_OECONF_append_avr32= " --disable-libmudflap " + EXTRA_OECONF += "--disable-libunwind-exceptions --with-mpfr=${STAGING_DIR}/${BUILD_SYS}" diff --git a/packages/gcc/gcc_4.1.2.bb b/packages/gcc/gcc_4.1.2.bb index 5d01163d94..8c6dc524df 100644 --- a/packages/gcc/gcc_4.1.2.bb +++ b/packages/gcc/gcc_4.1.2.bb @@ -1,4 +1,4 @@ -PR = "r6" +PR = "r7" DESCRIPTION = "The GNU cc and gcc C compilers." HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" @@ -35,6 +35,25 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2 \ SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 " +SRC_URI_avr32 = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.1.0.tar.gz \ +# file://100-uclibc-conf.patch;patch=1 \ +# file://200-uclibc-locale.patch;patch=1 \ +# file://300-libstdc++-pic.patch;patch=1 \ + file://301-missing-execinfo_h.patch;patch=1 \ + file://302-c99-snprintf.patch;patch=1 \ + file://303-c99-complex-ugly-hack.patch;patch=1 \ + file://304-index_macro.patch;patch=1 \ + file://602-sdk-libstdc++-includes.patch;patch=1 \ + file://gcc41-configure.in.patch;patch=1 \ + file://ldflags.patch;patch=1 \ + file://zecke-xgcc-cpp.patch;patch=1 \ + file://cache-amnesia.patch;patch=1 \ + " + +do_compile_prepend_avr32() { + ln -sf ${S}/libstdc++-v3/config/os/uclibc/ ${S}/libstdc++-v3/config/os/uclibc-linux +} + #Set the fortran bits # ',fortran' or '', not 'f77' like gcc3 had FORTRAN = "" -- cgit v1.2.3 From 43b6ecbcb39354a32e0b8dd7c02ec8789be0ab9a Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 20 Oct 2007 15:51:04 +0000 Subject: angstrom 2008: use proper gcc for avr32 --- conf/distro/angstrom-2008.1.conf | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index 046c63ad54..4d428fe3d8 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -47,4 +47,15 @@ PREFERRED_VERSION_udev = "115" # Our patched-to-hell busybox 1.2.1 is getting old and unmaintanable PREFERRED_VERSION_busybox = "1.7.2" - +PREFERRED_VERSION_pango = "1.18.1" +#avr32 only has patches for binutils 2.17 and gcc 4.1.2 in OE +PREFERRED_VERSION_gcc_avr32 = "4.1.2" +PREFERRED_VERSION_gcc-cross_avr32 = "4.1.2" +PREFERRED_VERSION_gcc-cross-sdk_avr32 = "4.1.2" +PREFERRED_VERSION_gcc-cross-initial_avr32 = "4.1.2" +PREFERRED_VERSION_binutils_avr32 = "2.17" +PREFERRED_VERSION_binutils-cross_avr32 = "2.17" +PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17" +#there's is no avr32 patch for 0.9.29 +PREFERRED_VERSION_uclibc_avr32 = "0.9.28" +PREFERRED_VERSION_uclibc-initial_avr32 = "0.9.28" -- cgit v1.2.3 From 84b2b31930881004a73267cf24fe6fe701e0f8a8 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 31 Oct 2007 15:10:40 +0000 Subject: gcc-package-cross.inc: re-add avr32 safeguards lost in merge --- packages/gcc/gcc-package-cross.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/gcc/gcc-package-cross.inc b/packages/gcc/gcc-package-cross.inc index 3dcf86c686..cbd01c3e39 100644 --- a/packages/gcc/gcc-package-cross.inc +++ b/packages/gcc/gcc-package-cross.inc @@ -48,7 +48,7 @@ do_install () { elif [ -f ${D}${prefix}/*/lib/nof/libgcc_s.so.? ]; then mv -f ${D}${prefix}/*/lib/nof/libgcc_s.so* ${D}${target_base_libdir} else - mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} + mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} || true fi @@ -58,12 +58,12 @@ do_install () { if [ -f ${D}${prefix}/*/lib/nof/libstdc++.so ]; then - mv -f ${D}${prefix}/*/lib/nof/libstdc++.so* ${D}${target_libdir} + mv -f ${D}${prefix}/*/lib/nof/libstdc++.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/nof/libg2c.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/nof/libgfortran*.so* ${D}${target_libdir} || true else - mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} + mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/libg2c.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/libgfortran*.so* ${D}${target_libdir} || true fi -- cgit v1.2.3 From 3b0d162d85977a2ae198e0cc6060b051408375ed Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 31 Oct 2007 18:46:24 +0000 Subject: gcc: move avr32 stuff into gcc recipe and update to 4.2.1 --- packages/gcc/avr32-gcc-cross_4.1.2.bb | 22 ---------------------- packages/gcc/avr32-gcc_4.1.2.bb | 24 ------------------------ packages/gcc/gcc_4.2.1.bb | 30 ++++++++++++++++++++++++++++-- 3 files changed, 28 insertions(+), 48 deletions(-) delete mode 100644 packages/gcc/avr32-gcc-cross_4.1.2.bb delete mode 100644 packages/gcc/avr32-gcc_4.1.2.bb diff --git a/packages/gcc/avr32-gcc-cross_4.1.2.bb b/packages/gcc/avr32-gcc-cross_4.1.2.bb deleted file mode 100644 index 765619ad69..0000000000 --- a/packages/gcc/avr32-gcc-cross_4.1.2.bb +++ /dev/null @@ -1,22 +0,0 @@ -require avr32-gcc_${PV}.bb -# path mangling, needed by the cross packaging -require gcc-paths-cross.inc -inherit cross -FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}" -# NOTE: split PR. If the main .oe changes something that affects its *build* -# remember to increment this one too. -PR = "r1" - -DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native" -PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++" - -# cross build -require gcc3-build-cross.inc -# cross packaging -require gcc-package-cross.inc - -SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 " - -EXTRA_OECONF += " --disable-libmudflap \ - --disable-libunwind-exceptions \ - --with-mpfr=${STAGING_DIR}/${BUILD_SYS}" diff --git a/packages/gcc/avr32-gcc_4.1.2.bb b/packages/gcc/avr32-gcc_4.1.2.bb deleted file mode 100644 index fd461728bd..0000000000 --- a/packages/gcc/avr32-gcc_4.1.2.bb +++ /dev/null @@ -1,24 +0,0 @@ -require gcc_${PV}.bb - -PR = "r1" - -FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/gcc-4.1.2', '${FILE_DIRNAME}/gcc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}" - -SRC_URI = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.1.0.tar.gz \ -# file://100-uclibc-conf.patch;patch=1 \ -# file://200-uclibc-locale.patch;patch=1 \ -# file://300-libstdc++-pic.patch;patch=1 \ - file://301-missing-execinfo_h.patch;patch=1 \ - file://302-c99-snprintf.patch;patch=1 \ - file://303-c99-complex-ugly-hack.patch;patch=1 \ - file://304-index_macro.patch;patch=1 \ - file://602-sdk-libstdc++-includes.patch;patch=1 \ - file://gcc41-configure.in.patch;patch=1 \ - file://ldflags.patch;patch=1 \ - file://zecke-xgcc-cpp.patch;patch=1 \ - file://cache-amnesia.patch;patch=1 \ - " - -do_compile_prepend() { -ln -sf ${S}/libstdc++-v3/config/os/uclibc/ ${S}/libstdc++-v3/config/os/uclibc-linux -} diff --git a/packages/gcc/gcc_4.2.1.bb b/packages/gcc/gcc_4.2.1.bb index 7bf074de57..af90755c3b 100644 --- a/packages/gcc/gcc_4.2.1.bb +++ b/packages/gcc/gcc_4.2.1.bb @@ -1,4 +1,4 @@ -PR = "r5" +PR = "r6" DESCRIPTION = "The GNU cc and gcc C compilers." HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" @@ -41,6 +41,32 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://gfortran.patch;patch=1 \ " +SRC_URI_avr32 = " http://ewi546.ewi.utwente.nl/tmp/avr32-gcc-4.2.1-atmel.1.0.1.tar.gz \ + file://100-uclibc-conf.patch;patch=1 \ + file://103-uclibc-conf-noupstream.patch;patch=1 \ + file://200-uclibc-locale.patch;patch=1 \ + file://203-uclibc-locale-no__x.patch;patch=1 \ + file://204-uclibc-locale-wchar_fix.patch;patch=1 \ + file://205-uclibc-locale-update.patch;patch=1 \ + file://300-libstdc++-pic.patch;patch=1 \ + file://301-missing-execinfo_h.patch;patch=1 \ + file://302-c99-snprintf.patch;patch=1 \ + file://303-c99-complex-ugly-hack.patch;patch=1 \ + file://304-index_macro.patch;patch=1 \ + file://305-libmudflap-susv3-legacy.patch;patch=1 \ + file://306-libstdc++-namespace.patch;patch=1 \ + file://307-locale_facets.patch;patch=1 \ + file://402-libbackend_dep_gcov-iov.h.patch;patch=1 \ + file://602-sdk-libstdc++-includes.patch;patch=1 \ + file://740-sh-pr24836.patch;patch=1 \ + file://904-flatten-switch-stmt-00.patch;patch=1 \ + file://gcc41-configure.in.patch;patch=1 \ + file://ldflags.patch;patch=1 \ + file://zecke-xgcc-cpp.patch;patch=1 \ + file://cache-amnesia.patch;patch=1 \ + file://gfortran.patch;patch=1 \ +" + SRC_URI_append_ep93xx = " \ file://arm-crunch-saveregs.patch;patch=1 \ file://arm-crunch-20000320.patch;patch=1 \ @@ -79,5 +105,5 @@ require gcc3-build.inc ARCH_FLAGS_FOR_TARGET=-isystem${STAGING_INCDIR} -EXTRA_OECONF += " --disable-libssp --disable-bootstrap " +EXTRA_OECONF += " --disable-libgomp --disable-libssp --disable-bootstrap " -- cgit v1.2.3 From 58d26610db472fbb79390238c84031994627bd9a Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 31 Oct 2007 18:47:47 +0000 Subject: angstrom: clean up avr32 bits --- conf/distro/angstrom-2007.1.conf | 14 -------------- conf/distro/angstrom-2008.1.conf | 4 ---- conf/distro/include/angstrom.inc | 2 ++ 3 files changed, 2 insertions(+), 18 deletions(-) diff --git a/conf/distro/angstrom-2007.1.conf b/conf/distro/angstrom-2007.1.conf index fe6be3e614..7486400651 100644 --- a/conf/distro/angstrom-2007.1.conf +++ b/conf/distro/angstrom-2007.1.conf @@ -114,16 +114,6 @@ PREFERRED_VERSION_binutils ?= "2.18" PREFERRED_VERSION_binutils-cross ?= "2.18" PREFERRED_VERSION_binutils-cross-sdk ?= "2.18" -#avr32 only has patches for binutils 2.17 and gcc 4.1.2 in OE -PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc_avr32 = "avr32-gcc-cross" -PREFERRED_VERSION_avr32-gcc = "4.1.2" -PREFERRED_VERSION_avr32-gcc-cross = "4.1.2" -PREFERRED_VERSION_gcc-cross-sdk_avr32 = "4.0.2" -PREFERRED_VERSION_gcc-cross-initial_avr32 = "4.0.2" - -PREFERRED_VERSION_binutils_avr32 = "2.17" -PREFERRED_VERSION_binutils-cross_avr32 = "2.17" -PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17" #This is unrelated to the kernel version, but userspace apps (e.g. HAL) require a recent version to build against PREFERRED_VERSION_linux-libc-headers ?= "2.6.20" @@ -134,10 +124,6 @@ PREFERRED_VERSION_glibc ?= "2.5" PREFERRED_VERSION_uclibc ?= "0.9.29" PREFERRED_VERSION_uclibc-initial ?= "0.9.29" -#there's is no avr32 patch for 0.9.29 -PREFERRED_VERSION_uclibc_avr32 = "0.9.28" -PREFERRED_VERSION_uclibc-initial_avr32 = "0.9.28" - PREFERRED_VERSION_glibc-intermediate_i686 ?= "2.4" PREFERRED_VERSION_glibc-intermediate ?= "2.5" diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index 976ac38663..536bb462eb 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -94,10 +94,6 @@ PREFERRED_VERSION_busybox = "1.7.2" #avr32 only has patches for binutils 2.17 and gcc 4.1.2 in OE -PREFERRED_VERSION_gcc_avr32 = "4.1.2" -PREFERRED_VERSION_gcc-cross_avr32 = "4.1.2" -PREFERRED_VERSION_gcc-cross-sdk_avr32 = "4.1.2" -PREFERRED_VERSION_gcc-cross-initial_avr32 = "4.1.2" PREFERRED_VERSION_binutils_avr32 = "2.17" PREFERRED_VERSION_binutils-cross_avr32 = "2.17" PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17" diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc index 8116bcb307..d7ca18e0ca 100644 --- a/conf/distro/include/angstrom.inc +++ b/conf/distro/include/angstrom.inc @@ -47,6 +47,8 @@ TARGET_FPU_arm ?= "soft" TARGET_FPU_armeb ?= "soft" TARGET_FPU_ixp4xx ?= "soft" +TARGET_FPU_dht-walnut ?= "soft" + #Set the right arch for the feeds #Alphabetically sorted -- cgit v1.2.3 From b50d962c7a083cf090d503c76d622a1f3fa743e2 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 1 Nov 2007 08:55:20 +0000 Subject: atngw100: use linux kernel --- conf/machine/atngw100.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/machine/atngw100.conf b/conf/machine/atngw100.conf index 6acc3d7907..1d402dbef3 100644 --- a/conf/machine/atngw100.conf +++ b/conf/machine/atngw100.conf @@ -10,6 +10,7 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive" USE_VT = "0" MACHINE_FEATURES = "kernel26 ext2 usbgadget" +PREFERRED_PROVIDER_virtual/kernel = "linux" # used by sysvinit_2 SERIAL_CONSOLE = "115200" -- cgit v1.2.3 From 891334ba568712e3000aa0dca5add8d059dabb7f Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 5 Nov 2007 18:30:14 +0000 Subject: linux: add avr32 support for 2.6.23 --- .../linux/linux-2.6.23/atngw100/.mtn2git_empty | 0 packages/linux/linux-2.6.23/atngw100/defconfig | 1130 ++++++++++++++++++++ packages/linux/linux.inc | 4 + packages/linux/linux_2.6.23.bb | 5 + 4 files changed, 1139 insertions(+) create mode 100644 packages/linux/linux-2.6.23/atngw100/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.23/atngw100/defconfig diff --git a/packages/linux/linux-2.6.23/atngw100/.mtn2git_empty b/packages/linux/linux-2.6.23/atngw100/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.23/atngw100/defconfig b/packages/linux/linux-2.6.23/atngw100/defconfig new file mode 100644 index 0000000000..7b335e3e73 --- /dev/null +++ b/packages/linux/linux-2.6.23/atngw100/defconfig @@ -0,0 +1,1130 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23.atmel.3 +# Mon Nov 5 19:28:40 2007 +# +CONFIG_AVR32=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_TIME=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_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 is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=m +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=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_BASE_FULL is not set +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +# CONFIG_SLUB_DEBUG is not set +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +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=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 is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# System Type and features +# +CONFIG_SUBARCH_AVR32B=y +CONFIG_MMU=y +CONFIG_PERFORMANCE_COUNTERS=y +CONFIG_PLATFORM_AT32AP=y +CONFIG_CPU_AT32AP700X=y +CONFIG_CPU_AT32AP7000=y +# CONFIG_CPU_AT32AP7001 is not set +# CONFIG_CPU_AT32AP7002 is not set +# CONFIG_BOARD_ATSTK1000 is not set +CONFIG_BOARD_ATNGW100=y +# CONFIG_BOARD_ATNGW100_I2C_GPIO is not set +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_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_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_CMDLINE="" + +# +# Power managment options +# + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +# CONFIG_CPU_FREQ_DEBUG is not set +CONFIG_CPU_FREQ_STAT=m +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_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 is not set +CONFIG_CPU_FREQ_AT32AP=y + +# +# Bus options +# +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=y +# 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=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +CONFIG_IP_MROUTE=y +CONFIG_IP_PIMSM_V1=y +# CONFIG_IP_PIMSM_V2 is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=y +CONFIG_INET_ESP=y +CONFIG_INET_IPCOMP=y +CONFIG_INET_XFRM_TUNNEL=y +CONFIG_INET_TUNNEL=y +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=y +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +CONFIG_INET6_IPCOMP=y +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=y +CONFIG_INET6_TUNNEL=y +CONFIG_INET6_XFRM_MODE_TRANSPORT=y +CONFIG_INET6_XFRM_MODE_TUNNEL=y +CONFIG_INET6_XFRM_MODE_BEET=y +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=y +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_EVENTS is not set +CONFIG_NF_CT_PROTO_GRE=m +# CONFIG_NF_CT_PROTO_SCTP is not set +# CONFIG_NF_CT_PROTO_UDPLITE is not set +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NETFILTER_XTABLES=y +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +# CONFIG_IP_NF_TARGET_ULOG is not set +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set +CONFIG_NET_CLS_ROUTE=y + +# +# 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_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +# CONFIG_FW_LOADER is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=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 + +# +# 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=0x80000000 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +CONFIG_MTD_DATAFLASH=y +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND 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_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_ATMEL_SSC 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=m +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_FIXED_PHY is not set +CONFIG_NET_ETHERNET=y +# CONFIG_MII is not set +CONFIG_MACB=y +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +# CONFIG_PPPOL2TP 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 +# CONFIG_PHONE is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=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_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_AT32AP700X_WDT=y +# CONFIG_HW_RANDOM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC 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=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_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_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_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON 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_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set +CONFIG_USB_SUPPORT=y +# CONFIG_USB_ARCH_HAS_HCD is not set +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI 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_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_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_ATMELMCI=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_GPIO=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_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_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_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_AT32AP700X=y + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# 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 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 is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=850 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_PROC_KCORE is not set +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +CONFIG_CONFIGFS_FS=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=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=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=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR 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 + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=y +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +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_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_KPROBES is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY 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 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=y +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW 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_DEFLATE=y +# 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_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc index 2fb0ce8177..2a9085f34e 100644 --- a/packages/linux/linux.inc +++ b/packages/linux/linux.inc @@ -118,6 +118,10 @@ do_deploy() { ${OBJCOPY} -O binary -R .note -R .comment -S arch/${ARCH}/boot/compressed/vmlinux linux.bin uboot-mkimage -A ${ARCH} -O linux -T kernel -C none -a ${UBOOT_ENTRYPOINT} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}-${DATETIME}.bin rm -f linux.bin + elif test -e arch/${ARCH}/boot/images/vmlinux.gz ; then + ${OBJCOPY} -O binary -R .note -R .comment -S arch/${ARCH}/boot/images/vmlinux.gz linux.bin + uboot-mkimage -A ${ARCH} -O linux -T kernel -C gzip -a ${UBOOT_ENTRYPOINT} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}-${DATETIME}.bin + rm -f linux.bin else ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin rm -f linux.bin.gz diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb index e042c7248b..8a0a604860 100644 --- a/packages/linux/linux_2.6.23.bb +++ b/packages/linux/linux_2.6.23.bb @@ -5,6 +5,7 @@ DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_cm-x270 = "1" DEFAULT_PREFERENCE_mpc8313e-rdb = "1" DEFAULT_PREFERENCE_mpc8323e-rdb = "1" +DEFAULT_PREFERENCE_avr32 = "1" PR = "r2" @@ -13,6 +14,10 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ file://defconfig \ " +SRC_URI_append_avr32 = " \ + http://avr32linux.org/twiki/pub/Main/LinuxPatches/linux-2.6.23.atmel.3.patch.bz2;patch=1 \ + " + SRC_URI_append_cm-x270 = "\ file://0001-cm-x270-base2.patch;patch=1 \ file://0002-cm-x270-match-type.patch;patch=1 \ -- cgit v1.2.3 From 6a90f2b29e36ae3a730bd2640d856e46f82b0e30 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 5 Nov 2007 18:39:36 +0000 Subject: linux.inc: fixlet for avr32 and gcc 4.2.1 --- packages/linux/linux.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc index 2a9085f34e..37759b7667 100644 --- a/packages/linux/linux.inc +++ b/packages/linux/linux.inc @@ -77,6 +77,11 @@ do_configure_prepend() { yes '' | oe_runmake oldconfig } + +do_configure_append_avr32() { + sed -i -e s:-mno-pic::g arch/avr32/Makefile +} + # Support checking the kernel size since some kernels need to reside in partitions # with a fixed length or there is a limit in transferring the kernel to memory do_sizecheck() { -- cgit v1.2.3 From 6b89ac130f52fbc8da821ac96d4ccdd3f0d0daa1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 29 Nov 2007 14:35:36 +0000 Subject: gcc 4.2.1: merge with .dev --- packages/gcc/gcc-cross-initial_4.2.1.bb | 3 ++- packages/gcc/gcc-cross_4.2.1.bb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/gcc/gcc-cross-initial_4.2.1.bb b/packages/gcc/gcc-cross-initial_4.2.1.bb index 1c1d094382..0f8813cc70 100644 --- a/packages/gcc/gcc-cross-initial_4.2.1.bb +++ b/packages/gcc/gcc-cross-initial_4.2.1.bb @@ -1,5 +1,6 @@ require gcc-cross_${PV}.bb require gcc-cross-initial.inc -EXTRA_OECONF += "--disable-libmudflap \ +EXTRA_OECONF += " --disable-libgomp \ + --disable-libmudflap \ --disable-libssp" diff --git a/packages/gcc/gcc-cross_4.2.1.bb b/packages/gcc/gcc-cross_4.2.1.bb index da27c68d9a..8204e2c316 100644 --- a/packages/gcc/gcc-cross_4.2.1.bb +++ b/packages/gcc/gcc-cross_4.2.1.bb @@ -5,7 +5,7 @@ inherit cross FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}" # NOTE: split PR. If the main .oe changes something that affects its *build* # remember to increment this one too. -PR = "r9" +PR = "r10" DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native" PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++" -- cgit v1.2.3 From 067d6109b125eb32a38b8bd3cd25af851ba2850b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 29 Nov 2007 14:36:22 +0000 Subject: angstrom 2008: prefer gcc 4.2.1 for avr32 --- conf/distro/angstrom-2008.1.conf | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index 70a7f84693..58225bb8ec 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -70,13 +70,18 @@ PREFERRED_VERSION_uclibc ?= "0.9.29" PREFERRED_VERSION_uclibc-initial ?= "0.9.29" -#avr32 only has patches for binutils 2.17 and gcc 4.1.2 in OE +#avr32 only has patches for binutils 2.17 and gcc 4.2.1 in OE PREFERRED_VERSION_binutils_avr32 = "2.17" PREFERRED_VERSION_binutils-cross_avr32 = "2.17" PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17" #there's is no avr32 patch for 0.9.29 PREFERRED_VERSION_uclibc_avr32 = "0.9.28" PREFERRED_VERSION_uclibc-initial_avr32 = "0.9.28" +PREFERRED_VERSION_gcc_avr32 ?= "4.2.1" +PREFERRED_VERSION_gcc-cross_avr32 ?= "4.2.1" +PREFERRED_VERSION_gcc-cross-sdk_avr32 ?= "4.2.1" +PREFERRED_VERSION_gcc-cross-initial_avr32 ?= "4.2.1" + #Prefer a newer GTK+ and friends PREFERRED_VERSION_gtk+ = "2.12.0" -- cgit v1.2.3 From b624964d2a574671df46b936f1a7fc2e7a779866 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 29 Nov 2007 14:45:25 +0000 Subject: linux 2.6.23: add defconfig for stk1000 --- .../linux/linux-2.6.23/at32stk1000/.mtn2git_empty | 0 packages/linux/linux-2.6.23/at32stk1000/defconfig | 1078 ++++++++++++++++++++ 2 files changed, 1078 insertions(+) create mode 100644 packages/linux/linux-2.6.23/at32stk1000/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.23/at32stk1000/defconfig diff --git a/packages/linux/linux-2.6.23/at32stk1000/.mtn2git_empty b/packages/linux/linux-2.6.23/at32stk1000/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.23/at32stk1000/defconfig b/packages/linux/linux-2.6.23/at32stk1000/defconfig new file mode 100644 index 0000000000..c3d4c33d21 --- /dev/null +++ b/packages/linux/linux-2.6.23/at32stk1000/defconfig @@ -0,0 +1,1078 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23.atmel.1 +# Tue Oct 16 12:57:22 2007 +# +CONFIG_AVR32=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_TIME=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_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 is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +# CONFIG_TASK_XACCT is not set +# CONFIG_USER_NS is not set +CONFIG_AUDIT=y +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED=y +CONFIG_RELAY=y +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_BASE_FULL is not set +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +# CONFIG_SLUB_DEBUG is not set +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +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 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 is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# System Type and features +# +CONFIG_SUBARCH_AVR32B=y +CONFIG_MMU=y +CONFIG_PERFORMANCE_COUNTERS=y +CONFIG_PLATFORM_AT32AP=y +CONFIG_CPU_AT32AP7000=y +# CONFIG_CPU_AT32AP7001 is not set +# CONFIG_CPU_AT32AP7002 is not set +CONFIG_BOARD_ATSTK1002=y +CONFIG_BOARD_ATSTK1000=y +# CONFIG_BOARD_ATNGW100 is not set +# CONFIG_BOARD_ATSTK1002_CUSTOM is not set +# CONFIG_BOARD_ATSTK1002_SPI1 is not set +# CONFIG_BOARD_ATSTK1002_J2_LED is not set +# CONFIG_BOARD_ATSTK1002_J2_LED8 is not set +# CONFIG_BOARD_ATSTK1002_J2_RGB is not set +# CONFIG_BOARD_ATSTK1002_ENABLE_AC97 is not set +# CONFIG_BOARD_ATSTK1002_CF_HACKS is not set +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_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_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_CMDLINE="" + +# +# Power managment options +# + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +# CONFIG_CPU_FREQ_DEBUG is not set +CONFIG_CPU_FREQ_STAT=m +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_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 is not set +CONFIG_CPU_FREQ_AT32AP=y + +# +# Bus options +# +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +# CONFIG_PCMCIA_LOAD_CIS is not set +# CONFIG_PCMCIA_IOCTL is not set + +# +# PC-card bridges +# +CONFIG_AT32_CF=m + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +CONFIG_INET_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 + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +# CONFIG_FW_LOADER is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=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 + +# +# 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 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +CONFIG_ATMEL_SSC=m +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +# CONFIG_MARVELL_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_QSEMI_PHY is not set +CONFIG_LXT_PHY=y +# CONFIG_CICADA_PHY is not set +# CONFIG_VITESSE_PHY is not set +# CONFIG_SMSC_PHY is not set +# CONFIG_BROADCOM_PHY is not set +# CONFIG_ICPLUS_PHY is not set +# CONFIG_FIXED_PHY is not set +CONFIG_NET_ETHERNET=y +# CONFIG_MII is not set +CONFIG_MACB=y +# 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_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=m +# CONFIG_INPUT_FF_MEMLESS is not set +CONFIG_INPUT_POLLDEV=m + +# +# 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_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_GPIO=m +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=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 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_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=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_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_AT32AP700X_WDT=y +# CONFIG_HW_RANDOM is not set +# 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 +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_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_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_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON 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_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_LCD_LTV350QV=y +# CONFIG_BACKLIGHT_CLASS_DEVICE is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_ATMEL=y +# CONFIG_FB_VIRTUAL 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 is not set +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_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 +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +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' +# + +# +# 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_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_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_ATMELMCI=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m + +# +# LED drivers +# +CONFIG_LEDS_GPIO=m + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_HCTOSYS is not set +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_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_AT32AP700X=y + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# 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 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=m +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_DNOTIFY is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=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_RAMFS=y +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=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=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=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR 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 + +# +# Native Language Support +# +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 + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +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_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +CONFIG_FRAME_POINTER=y +CONFIG_FORCED_INLINING=y +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_KPROBES is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y -- cgit v1.2.3 From a621a4ae2f282efbfa6da80a1dbe6a2e8ebc3aff Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 30 Nov 2007 09:31:11 +0000 Subject: angstrom-uclibc: atler cflags to work around broken avr32 compiler --- conf/distro/include/angstrom-uclibc.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/conf/distro/include/angstrom-uclibc.inc b/conf/distro/include/angstrom-uclibc.inc index 59d40957d5..7e8e60d7dd 100644 --- a/conf/distro/include/angstrom-uclibc.inc +++ b/conf/distro/include/angstrom-uclibc.inc @@ -14,5 +14,10 @@ TARGET_OS = "${@['${TARGET_OS_UC}', 'uclinux-uclibc'][bb.data.getVar('TARGET_ARC #Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os" BUILD_OPTIMIZATION = "-Os" + +#Gcc will die with 'internal consistency error when using the above optimizations +FULL_OPTIMIZATION_avr32 = "" +BUILD_OPTIMIZATION_avr32 = "" + CXXFLAGS += "-fvisibility-inlines-hidden" -- cgit v1.2.3 From af445f54178cd9dfc4cfd5f9cf28db077e445fd0 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 30 Nov 2007 15:23:08 +0000 Subject: linux.inc: remove unsupported gcc option from build --- packages/linux/linux.inc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc index 8066c3a403..77920f7f4f 100644 --- a/packages/linux/linux.inc +++ b/packages/linux/linux.inc @@ -85,10 +85,11 @@ do_configure_prepend() { yes '' | oe_runmake oldconfig } -fdo_configure_append_avr32() { +do_configure_append_avr32() { sed -i -e s:-mno-pic::g arch/avr32/Makefile } + # Support checking the kernel size since some kernels need to reside in partitions # with a fixed length or there is a limit in transferring the kernel to memory do_sizecheck() { @@ -97,7 +98,7 @@ do_sizecheck() { if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then rm arch/${ARCH}/boot/${KERNEL_IMAGETYPE} die "This kernel (size=$size) is too big for your device. Please reduce the size of the kernel by making more of it modular." -a + fi fi } -- cgit v1.2.3 From 95580064683ef83263017dce9b610c74306348bb Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 30 Nov 2007 20:53:17 +0000 Subject: avr32 machines: make uImage hack less fragile --- conf/machine/at32stk1000.conf | 2 +- conf/machine/atngw100.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/machine/at32stk1000.conf b/conf/machine/at32stk1000.conf index 343c6aa44e..ac63af5e56 100644 --- a/conf/machine/at32stk1000.conf +++ b/conf/machine/at32stk1000.conf @@ -23,5 +23,5 @@ EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" KERNEL_IMAGETYPE = "uImage" PREFERRED_VERSION_u-boot = "1.1.4" -ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* ;" +ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* || true;" diff --git a/conf/machine/atngw100.conf b/conf/machine/atngw100.conf index 1d402dbef3..17b4c4187a 100644 --- a/conf/machine/atngw100.conf +++ b/conf/machine/atngw100.conf @@ -22,4 +22,4 @@ EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" PREFERRED_VERSION_u-boot = "1.1.4" KERNEL_IMAGETYPE = "uImage" -ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* ;" +ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* || true ;" -- cgit v1.2.3 From fedd672c6e6c38fcd8c97f712aca4e1dc1052cb8 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 11 Dec 2007 01:48:17 +0000 Subject: strace: drop 4.5.14 for propagate --- packages/strace/strace-4.5.14/.mtn2git_empty | 0 packages/strace/strace-4.5.14/arm-eabi.patch | 65 ----- packages/strace/strace-4.5.14/drop-ctl-proc.patch | 12 - packages/strace/strace-4.5.14/glibc-2.5.patch | 11 - packages/strace/strace-4.5.14/sh-arch-update.patch | 21 -- .../strace/strace-4.5.14/sh-syscall-update.patch | 268 --------------------- packages/strace/strace_4.5.14.bb | 17 -- 7 files changed, 394 deletions(-) delete mode 100644 packages/strace/strace-4.5.14/.mtn2git_empty delete mode 100644 packages/strace/strace-4.5.14/arm-eabi.patch delete mode 100644 packages/strace/strace-4.5.14/drop-ctl-proc.patch delete mode 100644 packages/strace/strace-4.5.14/glibc-2.5.patch delete mode 100644 packages/strace/strace-4.5.14/sh-arch-update.patch delete mode 100644 packages/strace/strace-4.5.14/sh-syscall-update.patch delete mode 100644 packages/strace/strace_4.5.14.bb diff --git a/packages/strace/strace-4.5.14/.mtn2git_empty b/packages/strace/strace-4.5.14/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/strace/strace-4.5.14/arm-eabi.patch b/packages/strace/strace-4.5.14/arm-eabi.patch deleted file mode 100644 index 53e27f8ce8..0000000000 --- a/packages/strace/strace-4.5.14/arm-eabi.patch +++ /dev/null @@ -1,65 +0,0 @@ -2006-03-30 Daniel Jacobowitz - - * process.c (change_syscall): Add ARM support. - * syscall.c (get_scno): Handle ARM EABI. - -Index: strace/process.c -=================================================================== ---- strace.orig/process.c 2006-03-30 17:36:14.000000000 -0500 -+++ strace/process.c 2006-03-30 17:44:16.000000000 -0500 -@@ -694,6 +694,16 @@ int new; - 0x100000 | new) < 0) - return -1; - return 0; -+#elif defined(ARM) -+ /* Some kernels support this, some (pre-2.6.16 or so) don't. */ -+# ifndef PTRACE_SET_SYSCALL -+# define PTRACE_SET_SYSCALL 23 -+# endif -+ -+ if (ptrace (PTRACE_SET_SYSCALL, tcp->pid, 0, new) != 0) -+ return -1; -+ -+ return 0; - #else - #warning Do not know how to handle change_syscall for this architecture - #endif /* architecture */ -Index: strace/syscall.c -=================================================================== ---- strace.orig/syscall.c 2006-03-30 17:36:14.000000000 -0500 -+++ strace/syscall.c 2006-03-30 17:44:16.000000000 -0500 -@@ -1108,16 +1108,25 @@ struct tcb *tcp; - return 0; - } - -- if ((scno & 0x0ff00000) != 0x0f900000) { -- fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n", -- scno); -- return -1; -- } -+ /* Handle the EABI syscall convention. We do not -+ bother converting structures between the two -+ ABIs, but basic functionality should work even -+ if strace and the traced program have different -+ ABIs. */ -+ if (scno == 0xef000000) { -+ scno = regs.ARM_r7; -+ } else { -+ if ((scno & 0x0ff00000) != 0x0f900000) { -+ fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n", -+ scno); -+ return -1; -+ } - -- /* -- * Fixup the syscall number -- */ -- scno &= 0x000fffff; -+ /* -+ * Fixup the syscall number -+ */ -+ scno &= 0x000fffff; -+ } - } - - if (tcp->flags & TCB_INSYSCALL) { diff --git a/packages/strace/strace-4.5.14/drop-ctl-proc.patch b/packages/strace/strace-4.5.14/drop-ctl-proc.patch deleted file mode 100644 index 468913774a..0000000000 --- a/packages/strace/strace-4.5.14/drop-ctl-proc.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: strace-4.5.14/system.c -=================================================================== ---- strace-4.5.14.orig/system.c 2006-10-01 13:02:08.000000000 +0200 -+++ strace-4.5.14/system.c 2006-10-01 13:02:27.000000000 +0200 -@@ -1578,7 +1578,6 @@ - { CTL_KERN, "CTL_KERN" }, - { CTL_VM, "CTL_VM" }, - { CTL_NET, "CTL_NET" }, -- { CTL_PROC, "CTL_PROC" }, - { CTL_FS, "CTL_FS" }, - { CTL_DEBUG, "CTL_DEBUG" }, - { CTL_DEV, "CTL_DEV" }, diff --git a/packages/strace/strace-4.5.14/glibc-2.5.patch b/packages/strace/strace-4.5.14/glibc-2.5.patch deleted file mode 100644 index 3ee6b3de75..0000000000 --- a/packages/strace/strace-4.5.14/glibc-2.5.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- strace-4.5.14/strace.c~ 2006-10-14 14:54:54.000000000 +1000 -+++ strace-4.5.14/strace.c 2006-10-14 14:54:54.000000000 +1000 -@@ -2251,7 +2251,7 @@ - if (!cflag - && (qual_flags[WSTOPSIG(status)] & QUAL_SIGNAL)) { - unsigned long addr = 0, pc = 0; --#ifdef PT_GETSIGINFO -+#if defined(PT_GETSIGINFO) && defined(IA64) - # define PSR_RI 41 - struct siginfo si; - unsigned long psr; diff --git a/packages/strace/strace-4.5.14/sh-arch-update.patch b/packages/strace/strace-4.5.14/sh-arch-update.patch deleted file mode 100644 index e40673a616..0000000000 --- a/packages/strace/strace-4.5.14/sh-arch-update.patch +++ /dev/null @@ -1,21 +0,0 @@ -Strace doesn't know that sh3 and sh4 should be treated as sh and sh5 as -sh64. Originally this was solved by ac_cv_host in the site files, however -doing it in the site file breaks the glibc build, so teach strace about them -instead. - ---- strace-4.5.14/configure.ac 2006/05/11 07:12:05 1.1 -+++ strace-4.5.14/configure.ac 2006/05/11 07:15:42 -@@ -91,11 +91,11 @@ - arch=hppa - AC_DEFINE([HPPA], 1, [Define for the HPPA architecture.]) - ;; --sh) -+sh|sh3*|sh4*) - arch=sh - AC_DEFINE([SH], 1, [Define for the SH architecture.]) - ;; --sh64) -+sh64|sh5*) - arch=sh64 - AC_DEFINE([SH64], 1, [Define for the SH64 architecture.]) - ;; diff --git a/packages/strace/strace-4.5.14/sh-syscall-update.patch b/packages/strace/strace-4.5.14/sh-syscall-update.patch deleted file mode 100644 index 15102934e7..0000000000 --- a/packages/strace/strace-4.5.14/sh-syscall-update.patch +++ /dev/null @@ -1,268 +0,0 @@ ---- strace/linux/sh/syscallent.h 2006/07/03 04:32:27 1.1 -+++ strace/linux/sh/syscallent.h 2006/07/03 05:29:55 -@@ -46,7 +46,7 @@ - { 1, 0, sys_time, "time" }, /* 13 */ - { 3, TF, sys_mknod, "mknod" }, /* 14 */ - { 2, TF, sys_chmod, "chmod" }, /* 15 */ -- { 3, TF, sys_chown, "lchown" }, /* 16 */ -+ { 3, TF, sys_chown, "lchown" }, /* 16 */ - { 0, 0, sys_break, "break" }, /* 17 */ - { 2, TF, sys_oldstat, "oldstat" }, /* 18 */ - { 3, TD, sys_lseek, "lseek" }, /* 19 */ -@@ -229,109 +229,157 @@ - { 2, TF, sys_stat64, "stat64" }, /* 195 */ - { 2, TF, sys_lstat64, "lstat64" }, /* 196 */ - { 2, TD, sys_fstat64, "fstat64" }, /* 197 */ --/*TODO*/{ 3, TF, printargs, "lchown32" }, /* 198 */ --/*TODO*/{ 0, 0, printargs, "getuid32" }, /* 199 */ -+ { 3, TF, sys_chown, "lchown32" }, /* 198 */ -+ { 0, 0, sys_getuid, "getuid32" }, /* 199 */ - -- { 0, 0, printargs, "getgid32" }, /* 200 */ -- { 0, 0, printargs, "geteuid32" }, /* 201 */ -- { 0, 0, printargs, "getegid32" }, /* 202 */ -- { 2, 0, printargs, "setreuid32" }, /* 203 */ -- { 2, 0, printargs, "setregid32" }, /* 204 */ -- { 2, 0, sys_getgroups32, "getgroups32" }, /* 205 */ -- { 2, 0, sys_setgroups32, "setgroups32" }, /* 206 */ -- { 3, 0, printargs, "fchown32" }, /* 207 */ -- { 3, 0, printargs, "setresuid32" }, /* 208 */ -- { 3, 0, printargs, "getresuid32" }, /* 209 */ -- { 3, 0, printargs, "setresgid32" }, /* 210 */ -- { 3, 0, printargs, "getsetgid32" }, /* 211 */ -- { 3, TF, printargs, "chown32" }, /* 212 */ -- { 1, 0, printargs, "setuid32" }, /* 213 */ -- { 1, 0, printargs, "setgid32" }, /* 214 */ -- { 1, 0, printargs, "setfsuid32" }, /* 215 */ -- { 1, 0, printargs, "setfsgid32" }, /* 216 */ -+ { 0, 0, sys_getgid, "getgid32" }, /* 200 */ -+ { 0, 0, sys_geteuid, "geteuid32" }, /* 201 */ -+ { 0, 0, sys_getegid, "getegid32" }, /* 202 */ -+ { 2, 0, sys_setreuid, "setreuid32" }, /* 203 */ -+ { 2, 0, sys_setregid, "setregid32" }, /* 204 */ -+ { 2, 0, sys_getgroups, "getgroups32" }, /* 205 */ -+ { 2, 0, sys_setgroups, "setgroups32" }, /* 206 */ -+ { 3, 0, sys_fchown, "fchown32" }, /* 207 */ -+ { 3, 0, sys_setresuid, "setresuid32" }, /* 208 */ -+ { 3, 0, sys_getresuid, "getresuid32" }, /* 209 */ -+ { 3, 0, sys_setresgid, "setresgid32" }, /* 210 */ -+ { 3, 0, sys_getresgid, "getsetgid32" }, /* 211 */ -+ { 3, TF, sys_chown, "chown32" }, /* 212 */ -+ { 1, 0, sys_setuid, "setuid32" }, /* 213 */ -+ { 1, 0, sys_setgid, "setgid32" }, /* 214 */ -+ { 1, 0, sys_setfsuid, "setfsuid32" }, /* 215 */ -+ { 1, 0, sys_setfsgid, "setfsgid32" }, /* 216 */ - { 2, TF, sys_pivotroot, "pivot_root" }, /* 217 */ -- { 3, 0, printargs, "mincore" }, /* 218 */ -+ { 3, 0, sys_mincore, "mincore" }, /* 218 */ - { 3, 0, sys_madvise, "madvise" }, /* 219 */ -- { 4, 0, printargs, "getdents64" }, /* 220 */ -+ { 4, 0, sys_getdents64, "getdents64" }, /* 220 */ - { 3, TD, sys_fcntl, "fcntl64" }, /* 221 */ - { 4, 0, printargs, "SYS_222" }, /* 222 */ -- { 4, 0, printargs, "SYS_223" }, /* 223 */ -- { 4, 0, printargs, "SYS_224" }, /* 224 */ -- { 5, 0, printargs, "SYS_225" }, /* 225 */ -- { 5, 0, printargs, "SYS_226" }, /* 226 */ -- { 5, 0, printargs, "SYS_227" }, /* 227 */ -- { 5, 0, printargs, "SYS_228" }, /* 228 */ -- { 5, 0, printargs, "SYS_229" }, /* 229 */ -- -- { 8, 0, printargs, "socket_subcall"}, /* 230 */ -- { 3, TN, sys_socket, "socket" }, /* 231 */ -- { 3, TN, sys_bind, "bind" }, /* 232 */ -- { 3, TN, sys_connect, "connect" }, /* 233 */ -- { 2, TN, sys_listen, "listen" }, /* 234 */ -- { 3, TN, sys_accept, "accept" }, /* 235 */ -- { 3, TN, sys_getsockname, "getsockname" }, /* 236 */ -- { 3, TN, sys_getpeername, "getpeername" }, /* 237 */ -- { 4, TN, sys_socketpair, "socketpair" }, /* 238 */ -- { 4, TN, sys_send, "send" }, /* 239 */ -- { 4, TN, sys_recv, "recv" }, /* 240 */ -- { 6, TN, sys_sendto, "sendto" }, /* 241 */ -- { 6, TN, sys_recvfrom, "recvfrom" }, /* 242 */ -- { 2, TN, sys_shutdown, "shutdown" }, /* 243 */ -- { 5, TN, sys_setsockopt, "setsockopt" }, /* 244 */ -- { 5, TN, sys_getsockopt, "getsockopt" }, /* 245 */ -- { 5, TN, sys_sendmsg, "sendmsg" }, /* 246 */ -- { 5, TN, sys_recvmsg, "recvmsg" }, /* 247 */ -- { 5, 0, printargs, "SYS_248" }, /* 248 */ -- { 5, 0, printargs, "SYS_249" }, /* 249 */ -- -- { 4, 0, printargs, "ipc_subcall" }, /* 250 */ -- { 4, TI, sys_semop, "semop" }, /* 251 */ -- { 4, TI, sys_semget, "semget" }, /* 252 */ -- { 4, TI, sys_semctl, "semctl" }, /* 253 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 254 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 255 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 256 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 257 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 258 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 259 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 260 */ -- { 4, TI, sys_msgsnd, "msgsnd" }, /* 261 */ -- { 4, TI, sys_msgrcv, "msgrcv" }, /* 262 */ -- { 4, TI, sys_msgget, "msgget" }, /* 263 */ -- { 4, TI, sys_msgctl, "msgctl" }, /* 264 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 265 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 266 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 267 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 268 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 269 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 270 */ -- { 4, TI, sys_shmat, "shmat" }, /* 271 */ -- { 4, TI, sys_shmdt, "shmdt" }, /* 272 */ -- { 4, TI, sys_shmget, "shmget" }, /* 273 */ -- { 4, TI, sys_shmctl, "shmctl" }, /* 274 */ -- { 5, 0, printargs, "SYS_275" }, /* 275 */ -- { 5, 0, printargs, "SYS_276" }, /* 276 */ -- { 5, 0, printargs, "SYS_277" }, /* 277 */ -- { 5, 0, printargs, "SYS_278" }, /* 278 */ -- { 5, 0, printargs, "SYS_279" }, /* 279 */ -- -- { 8, 0, printargs, "socket_subcall"}, /* 280 */ -- { 3, TN, sys_socket, "socket" }, /* 281 */ -- { 3, TN, sys_bind, "bind" }, /* 282 */ -- { 3, TN, sys_connect, "connect" }, /* 283 */ -- { 2, TN, sys_listen, "listen" }, /* 284 */ -- { 3, TN, sys_accept, "accept" }, /* 285 */ -- { 3, TN, sys_getsockname, "getsockname" }, /* 286 */ -- { 3, TN, sys_getpeername, "getpeername" }, /* 287 */ -- { 4, TN, sys_socketpair, "socketpair" }, /* 288 */ -- { 4, TN, sys_send, "send" }, /* 289 */ -- { 4, TN, sys_recv, "recv" }, /* 290 */ -- { 6, TN, sys_sendto, "sendto" }, /* 291 */ -- { 6, TN, sys_recvfrom, "recvfrom" }, /* 292 */ -- { 2, TN, sys_shutdown, "shutdown" }, /* 293 */ -- { 5, TN, sys_setsockopt, "setsockopt" }, /* 294 */ -- { 5, TN, sys_getsockopt, "getsockopt" }, /* 295 */ -- { 5, TN, sys_sendmsg, "sendmsg" }, /* 296 */ -- { 5, TN, sys_recvmsg, "recvmsg" }, /* 297 */ -+ { 5, 0, printargs, "SYS_223" }, /* 223 */ -+ { 0, 0, printargs, "gettid" }, /* 224 */ -+ { 4, TD, sys_readahead, "readahead" }, /* 225 */ -+ { 5, TF, sys_setxattr, "setxattr" }, /* 226 */ -+ { 5, TF, sys_setxattr, "lsetxattr" }, /* 227 */ -+ { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 228 */ -+ { 4, TF, sys_getxattr, "getxattr" }, /* 229 */ -+ { 4, TF, sys_getxattr, "lgetxattr" }, /* 230 */ -+ { 4, 0, sys_fgetxattr, "fgetxattr" }, /* 231 */ -+ { 3, TF, sys_listxattr, "listxattr" }, /* 232 */ -+ { 3, TF, sys_listxattr, "llistxattr" }, /* 233 */ -+ { 3, 0, sys_flistxattr, "flistxattr" }, /* 234 */ -+ { 2, TF, sys_removexattr, "removexattr" }, /* 235 */ -+ { 2, TF, sys_removexattr, "lremovexattr" }, /* 236 */ -+ { 2, 0, sys_fremovexattr, "fremovexattr" }, /* 237 */ -+ { 2, TS, sys_kill, "tkill" }, /* 238 */ -+ { 4, TF, sys_sendfile64, "sendfile64" }, /* 239 */ -+ { 5, 0, sys_futex, "futex" }, /* 240 */ -+ { 3, 0, sys_sched_setaffinity, "sched_setaffinity" },/* 241 */ -+ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 242 */ -+ { 1, 0, printargs, "set_thread_area" }, /* 243 */ -+ { 1, 0, printargs, "get_thread_area" }, /* 244 */ -+ { 2, 0, sys_io_setup, "io_setup" }, /* 245 */ -+ { 1, 0, sys_io_destroy, "io_destroy" }, /* 246 */ -+ { 5, 0, sys_io_getevents, "io_getevents" }, /* 247 */ -+ { 3, 0, sys_io_submit, "io_submit" }, /* 248 */ -+ { 3, 0, sys_io_cancel, "io_cancel" }, /* 249 */ -+ { 5, 0, sys_fadvise64, "fadvise64" }, /* 250 */ -+ { 5, 0, printargs, "SYS_251" }, /* 251 */ -+ { 1, TP, sys_exit, "exit_group" }, /* 252 */ -+ { 4, 0, printargs, "lookup_dcookie"}, /* 253 */ -+ { 1, 0, sys_epoll_create, "epoll_create" }, /* 254 */ -+ { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 255 */ -+ { 4, 0, sys_epoll_wait, "epoll_wait" }, /* 256 */ -+ { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 257 */ -+ { 1, 0, printargs, "set_tid_address"}, /* 258 */ -+ { 3, 0, sys_timer_create, "timer_create" }, /* 259 */ -+ { 4, 0, sys_timer_settime, "timer_settime" }, /* 260 */ -+ { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 261 */ -+ { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 262 */ -+ { 1, 0, sys_timer_delete, "timer_delete" }, /* 263 */ -+ { 2, 0, sys_clock_settime, "clock_settime" }, /* 264 */ -+ { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 265 */ -+ { 2, 0, sys_clock_getres, "clock_getres" }, /* 266 */ -+ { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 267 */ -+ { 3, TF, sys_statfs64, "statfs64" }, /* 268 */ -+ { 3, 0, sys_fstatfs64, "fstatfs64" }, /* 269 */ -+ { 3, TS, sys_tgkill, "tgkill" }, /* 270 */ -+ { 2, TF, sys_utimes, "utimes" }, /* 271 */ -+ { 6, 0, sys_fadvise64_64, "fadvise64_64" }, /* 272 */ -+ { 5, 0, printargs, "vserver" }, /* 273 */ -+ { 5, 0, printargs, "mbind" }, /* 274 */ -+ { 5, 0, printargs, "get_mempolicy" }, /* 275 */ -+ { 5, 0, printargs, "set_mempolicy" }, /* 276 */ -+ { 4, 0, sys_mq_open, "mq_open" }, /* 277 */ -+ { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 278 */ -+ { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 279 */ -+ { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 280 */ -+ { 2, 0, sys_mq_notify, "mq_notify" }, /* 281 */ -+ { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 282 */ -+ { 5, 0, printargs, "sys_kexec_load"}, /* 283 */ -+ { 5, TP, sys_waitid, "waitid" }, /* 284 */ -+ { 5, 0, printargs, "add_key" }, /* 285 */ -+ { 5, 0, printargs, "request_key" }, /* 286 */ -+ { 5, 0, printargs, "keyctl" }, /* 287 */ -+ { 5, 0, printargs, "ioprio_set" }, /* 288 */ -+ { 5, 0, printargs, "ioprio_get" }, /* 289 */ -+ { 5, 0, printargs, "inotify_init" }, /* 290 */ -+ { 5, 0, printargs, "inotify_add_watch" }, /* 291 */ -+ { 5, 0, printargs, "inotify_rm_watch" }, /* 292 */ -+ { 5, 0, printargs, "SYS_293" }, /* 293 */ -+ { 5, 0, printargs, "SYS_294" }, /* 294 */ -+ { 5, 0, printargs, "SYS_295" }, /* 295 */ -+ { 5, 0, printargs, "SYS_296" }, /* 296 */ -+ { 5, 0, printargs, "SYS_297" }, /* 297 */ - { 5, 0, printargs, "SYS_298" }, /* 298 */ - { 5, 0, printargs, "SYS_299" }, /* 299 */ -+ -+#if SYS_socket_subcall != 300 -+ #error fix me -+#endif -+ { 8, 0, printargs, "socket_subcall"}, /* 300 */ -+ { 3, TN, sys_socket, "socket" }, /* 301 */ -+ { 3, TN, sys_bind, "bind" }, /* 302 */ -+ { 3, TN, sys_connect, "connect" }, /* 303 */ -+ { 2, TN, sys_listen, "listen" }, /* 304 */ -+ { 3, TN, sys_accept, "accept" }, /* 305 */ -+ { 3, TN, sys_getsockname, "getsockname" }, /* 306 */ -+ { 3, TN, sys_getpeername, "getpeername" }, /* 307 */ -+ { 4, TN, sys_socketpair, "socketpair" }, /* 308 */ -+ { 4, TN, sys_send, "send" }, /* 309 */ -+ { 4, TN, sys_recv, "recv" }, /* 310 */ -+ { 6, TN, sys_sendto, "sendto" }, /* 311 */ -+ { 6, TN, sys_recvfrom, "recvfrom" }, /* 312 */ -+ { 2, TN, sys_shutdown, "shutdown" }, /* 313 */ -+ { 5, TN, sys_setsockopt, "setsockopt" }, /* 314 */ -+ { 5, TN, sys_getsockopt, "getsockopt" }, /* 315 */ -+ { 5, TN, sys_sendmsg, "sendmsg" }, /* 316 */ -+ { 5, TN, sys_recvmsg, "recvmsg" }, /* 317 */ -+ -+#if SYS_ipc_subcall != 318 -+ #error fix me -+#endif -+ { 4, 0, printargs, "ipc_subcall" }, /* 318 */ -+ { 4, TI, sys_semop, "semop" }, /* 319 */ -+ { 4, TI, sys_semget, "semget" }, /* 320 */ -+ { 4, TI, sys_semctl, "semctl" }, /* 321 */ -+ { 5, TI, sys_semtimedop, "semtimedop" }, /* 322 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 323 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 324 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 325 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 326 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 327 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 328 */ -+ { 4, TI, sys_msgsnd, "msgsnd" }, /* 329 */ -+ { 4, TI, sys_msgrcv, "msgrcv" }, /* 330 */ -+ { 4, TI, sys_msgget, "msgget" }, /* 331 */ -+ { 4, TI, sys_msgctl, "msgctl" }, /* 332 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 333 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 334 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 335 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 336 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 337 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 338 */ -+ { 4, TI, sys_shmat, "shmat" }, /* 339 */ -+ { 4, TI, sys_shmdt, "shmdt" }, /* 340 */ -+ { 4, TI, sys_shmget, "shmget" }, /* 341 */ -+ { 4, TI, sys_shmctl, "shmctl" }, /* 342 */ diff --git a/packages/strace/strace_4.5.14.bb b/packages/strace/strace_4.5.14.bb deleted file mode 100644 index 50baef86dc..0000000000 --- a/packages/strace/strace_4.5.14.bb +++ /dev/null @@ -1,17 +0,0 @@ -DESCRIPTION = "strace is a system call tracing tool." -SECTION = "console/utils" -LICENSE = "GPL" -PR = "r4" - -SRC_URI = "${SOURCEFORGE_MIRROR}/strace/strace-${PV}.tar.bz2 \ - file://glibc-2.5.patch;patch=1 \ - file://arm-eabi.patch;patch=1 \ - file://drop-ctl-proc.patch;patch=1 \ - file://sh-arch-update.patch;patch=1 \ - file://sh-syscall-update.patch;patch=1 \ - file://strace-fix-arm-bad-syscall.patch;patch=1 \ - file://strace-undef-syscall.patch;patch=1 " - -inherit autotools - -export INCLUDES = "-I. -I./linux" -- cgit v1.2.3 From 64529f883fb70f97a28cb8fe082fb7b357d509d9 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 11 Dec 2007 01:56:25 +0000 Subject: prepare for propagate --- packages/gcc/gcc-4.1.0/.mtn2git_empty | 0 packages/gcc/gcc-4.1.0/arm-nolibfloat.patch | 24 ----------------- packages/gcc/gcc-4.1.0/arm-softfloat.patch | 16 ----------- packages/gcc/gcc-4.1.0/ldflags.patch | 22 --------------- packages/gcc/gcc-4.1.0/pr34130.patch | 16 ----------- .../gcc/gcc-4.1.0/zecke-no-host-includes.patch | 31 ---------------------- packages/gcc/gcc-4.1.0/zecke-xgcc-cpp.patch | 12 --------- 7 files changed, 121 deletions(-) delete mode 100644 packages/gcc/gcc-4.1.0/.mtn2git_empty delete mode 100644 packages/gcc/gcc-4.1.0/arm-nolibfloat.patch delete mode 100644 packages/gcc/gcc-4.1.0/arm-softfloat.patch delete mode 100644 packages/gcc/gcc-4.1.0/ldflags.patch delete mode 100644 packages/gcc/gcc-4.1.0/pr34130.patch delete mode 100644 packages/gcc/gcc-4.1.0/zecke-no-host-includes.patch delete mode 100644 packages/gcc/gcc-4.1.0/zecke-xgcc-cpp.patch diff --git a/packages/gcc/gcc-4.1.0/.mtn2git_empty b/packages/gcc/gcc-4.1.0/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gcc/gcc-4.1.0/arm-nolibfloat.patch b/packages/gcc/gcc-4.1.0/arm-nolibfloat.patch deleted file mode 100644 index c4897c0330..0000000000 --- a/packages/gcc/gcc-4.1.0/arm-nolibfloat.patch +++ /dev/null @@ -1,24 +0,0 @@ -# Dimitry Andric , 2004-05-01 -# -# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed -# anymore. (The required functions are now in libgcc.) -# -# Fixes errors like -# arm-softfloat-linux-gnu/3.4.0/../../../../arm-softfloat-linux-gnu/bin/ld: cannot find -lfloat -# collect2: ld returned 1 exit status -# make[2]: *** [arm-softfloat-linux-gnu/gcc-3.4.0-glibc-2.3.2/build-glibc/iconvdata/ISO8859-1.so] Error 1 -# when building glibc-2.3.3 with gcc-3.4.0 for arm-softfloat - -Index: gcc-4.0.2/gcc/config/arm/linux-elf.h -=================================================================== ---- gcc-4.0.2.orig/gcc/config/arm/linux-elf.h 2005-03-04 16:14:01.000000000 +0000 -+++ gcc-4.0.2/gcc/config/arm/linux-elf.h 2005-11-11 18:02:54.000000000 +0000 -@@ -56,7 +56,7 @@ - %{shared:-lc} \ - %{!shared:%{profile:-lc_p}%{!profile:-lc}}" - --#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc" -+#define LIBGCC_SPEC "-lgcc" - - /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add - the GNU/Linux magical crtbegin.o file (see crtstuff.c) which diff --git a/packages/gcc/gcc-4.1.0/arm-softfloat.patch b/packages/gcc/gcc-4.1.0/arm-softfloat.patch deleted file mode 100644 index c86c83ed15..0000000000 --- a/packages/gcc/gcc-4.1.0/arm-softfloat.patch +++ /dev/null @@ -1,16 +0,0 @@ -Index: gcc-4.0.2/gcc/config/arm/t-linux -=================================================================== ---- gcc-4.0.2.orig/gcc/config/arm/t-linux 2004-05-15 12:41:35.000000000 +0000 -+++ gcc-4.0.2/gcc/config/arm/t-linux 2005-11-11 16:07:53.000000000 +0000 -@@ -4,7 +4,10 @@ - LIBGCC2_DEBUG_CFLAGS = -g0 - - LIB1ASMSRC = arm/lib1funcs.asm --LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx -+LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ -+ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ -+ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ -+ _fixsfsi _fixunssfsi _floatdidf _floatdisf - - # MULTILIB_OPTIONS = mhard-float/msoft-float - # MULTILIB_DIRNAMES = hard-float soft-float diff --git a/packages/gcc/gcc-4.1.0/ldflags.patch b/packages/gcc/gcc-4.1.0/ldflags.patch deleted file mode 100644 index 9576f60778..0000000000 --- a/packages/gcc/gcc-4.1.0/ldflags.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- /tmp/Makefile.in 2006-02-23 20:56:01.399758728 +0100 -+++ gcc-4.1-20060217/Makefile.in 2006-02-23 20:56:16.874406224 +0100 -@@ -334,7 +334,7 @@ - CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) - LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET) - LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates --LDFLAGS_FOR_TARGET = -+LDFLAGS_FOR_TARGET = @LDFLAGS@ - PICFLAG_FOR_TARGET = - - # ------------------------------------ ---- /tmp/Makefile.tpl 2006-02-23 20:50:34.077519272 +0100 -+++ gcc-4.1-20060217/Makefile.tpl 2006-02-23 21:04:31.092273688 +0100 -@@ -337,7 +337,7 @@ - CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) - LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET) - LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates --LDFLAGS_FOR_TARGET = -+LDFLAGS_FOR_TARGET = @LDFLAGS@ - PICFLAG_FOR_TARGET = - - # ------------------------------------ diff --git a/packages/gcc/gcc-4.1.0/pr34130.patch b/packages/gcc/gcc-4.1.0/pr34130.patch deleted file mode 100644 index 415335f4b4..0000000000 --- a/packages/gcc/gcc-4.1.0/pr34130.patch +++ /dev/null @@ -1,16 +0,0 @@ -Index: gcc-4.1.2/gcc/fold-const.c -=================================================================== ---- gcc-4.1.2.orig/gcc/fold-const.c 2007-11-21 18:53:42.000000000 +0100 -+++ gcc-4.1.2/gcc/fold-const.c 2007-11-21 18:56:26.000000000 +0100 -@@ -5339,7 +5339,10 @@ - } - break; - } -- /* FALLTHROUGH */ -+ /* If the constant is negative, we cannot simplify this. */ -+ if (tree_int_cst_sgn (c) == -1) -+ break; -+ /* FALLTHROUGH */ - case NEGATE_EXPR: - if ((t1 = extract_muldiv (op0, c, code, wide_type)) != 0) - return fold_build1 (tcode, ctype, fold_convert (ctype, t1)); diff --git a/packages/gcc/gcc-4.1.0/zecke-no-host-includes.patch b/packages/gcc/gcc-4.1.0/zecke-no-host-includes.patch deleted file mode 100644 index 6afb10d6ef..0000000000 --- a/packages/gcc/gcc-4.1.0/zecke-no-host-includes.patch +++ /dev/null @@ -1,31 +0,0 @@ -Index: gcc-4.0.2/gcc/c-incpath.c -=================================================================== ---- gcc-4.0.2.orig/gcc/c-incpath.c 2005-01-23 16:05:27.000000000 +0100 -+++ gcc-4.0.2/gcc/c-incpath.c 2006-05-15 21:23:02.000000000 +0200 -@@ -350,6 +350,26 @@ - p->construct = 0; - p->user_supplied_p = user_supplied_p; - -+#ifdef CROSS_COMPILE -+ /* A common error when cross compiling is including -+ host headers. This code below will try to fail fast -+ for cross compiling. Currently we consider /usr/include, -+ /opt/include and /sw/include as harmful. */ -+ { -+ /* printf("Adding Path: %s\n", p->name ); */ -+ if( strstr(p->name, "/usr/include" ) == p->name ) { -+ fprintf(stderr, _("CROSS COMPILE Badness: /usr/include in INCLUDEPATH: %s\n"), p->name); -+ abort(); -+ } else if( strstr(p->name, "/sw/include") == p->name ) { -+ fprintf(stderr, _("CROSS COMPILE Badness: /sw/include in INCLUDEPATH: %s\n"), p->name); -+ abort(); -+ } else if( strstr(p->name, "/opt/include") == p->name ) { -+ fprintf(stderr, _("CROSS COMPILE Badness: /opt/include in INCLUDEPATH: %s\n"), p->name); -+ abort(); -+ } -+ } -+#endif -+ - add_cpp_dir_path (p, chain); - } - diff --git a/packages/gcc/gcc-4.1.0/zecke-xgcc-cpp.patch b/packages/gcc/gcc-4.1.0/zecke-xgcc-cpp.patch deleted file mode 100644 index 120cf55a0f..0000000000 --- a/packages/gcc/gcc-4.1.0/zecke-xgcc-cpp.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: gcc-4.1.0/Makefile.in -=================================================================== ---- gcc-4.1.0.orig/Makefile.in 2005-12-15 15:02:02.000000000 +0100 -+++ gcc-4.1.0/Makefile.in 2006-08-06 13:29:36.000000000 +0200 -@@ -194,6 +194,7 @@ - AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \ - CC="$(CC_FOR_TARGET)"; export CC; \ - CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ -+ CPP="$(CC_FOR_TARGET) -E"; export CCP; \ - CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \ - CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \ - CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ -- cgit v1.2.3 From 9030208546561970a18f0eb4be401b4d837aa310 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 11 Dec 2007 09:46:04 +0000 Subject: angstrom 2008: fix merge damage (I need more coffee) --- conf/distro/angstrom-2008.1.conf | 5 ----- 1 file changed, 5 deletions(-) diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index 5d9f761a95..86c6c998d0 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -12,11 +12,6 @@ # http://bugs.openembedded.org # In doubt, use DISTRO="angstrom-2007.1" -#Preferred version for the kernel on various machines -PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.21-hh16" - -require conf/distro/angstrom-2007.1.conf - #DISTRO_VERSION = "2008.1" DISTRO_VERSION = "2008.1-test-${DATE}" DISTRO_REVISION = "1" -- cgit v1.2.3 From 121254c3deb7e4a987a5e40d3f4c10498c7fbe04 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 21 Jan 2008 11:53:15 +0000 Subject: libgpephone: fix svn uri --- packages/gpephone/libgpephone_svn.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gpephone/libgpephone_svn.bb b/packages/gpephone/libgpephone_svn.bb index 255d251eff..02c9fa8069 100644 --- a/packages/gpephone/libgpephone_svn.bb +++ b/packages/gpephone/libgpephone_svn.bb @@ -6,8 +6,8 @@ DEPENDS = "gtk+ gtk-doc dbus-glib" PV = "0.4+svnr-${SRCREV}" PR = "r0" -SRC_URI = "${GPEPHONE_SVN}" inherit gpephone pkgconfig autotools +SRC_URI = "${GPEPHONE_SVN}" do_stage () { autotools_stage_all -- cgit v1.2.3 From 0a400ae1822370a5137a07c8f844141674add7da Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 21 Jan 2008 11:57:54 +0000 Subject: libgpephone: Fix source dir name. --- packages/gpephone/libgpephone_svn.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/gpephone/libgpephone_svn.bb b/packages/gpephone/libgpephone_svn.bb index 02c9fa8069..ce960ac3cc 100644 --- a/packages/gpephone/libgpephone_svn.bb +++ b/packages/gpephone/libgpephone_svn.bb @@ -9,6 +9,8 @@ PR = "r0" inherit gpephone pkgconfig autotools SRC_URI = "${GPEPHONE_SVN}" +S = "${WORKDIR}/${PN}" + do_stage () { autotools_stage_all } -- cgit v1.2.3 From ac6de0f3c0d8d5fe5708d9125c1319fbf5d627a6 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 21 Jan 2008 13:25:45 +0000 Subject: libgsmd-lips: Drop obsolete package. --- packages/gsm/libgsmd-lips_svn.bb | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 packages/gsm/libgsmd-lips_svn.bb diff --git a/packages/gsm/libgsmd-lips_svn.bb b/packages/gsm/libgsmd-lips_svn.bb deleted file mode 100644 index 081833dc2b..0000000000 --- a/packages/gsm/libgsmd-lips_svn.bb +++ /dev/null @@ -1,14 +0,0 @@ -BASEPN = "gsmd-lips" -CONFLICTNAME = "gsmd-devel gsmd" - -require gsmd.inc - -RPROVIDES_${PN} = "libgsmd0 libgsmd gsmd gsmd-devel libtapi libgsmd-dev" - -PV = "0.0+svnr${SRCREV}" -PR = "r3" - -SRC_URI = "svn://projects.linuxtogo.org/svn/gpephone/trunk/source/;module=gsm \ - file://gsmd \ - file://default" - -- cgit v1.2.3 From 064866a7c84779bbf5d96bc5981565f338bce83d Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Tue, 22 Jan 2008 11:53:25 +0000 Subject: gpe-filemanager: Add 0.31 --- packages/gpe-filemanager/gpe-filemanager_0.31.bb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/gpe-filemanager/gpe-filemanager_0.31.bb diff --git a/packages/gpe-filemanager/gpe-filemanager_0.31.bb b/packages/gpe-filemanager/gpe-filemanager_0.31.bb new file mode 100644 index 0000000000..84bf2d3d2f --- /dev/null +++ b/packages/gpe-filemanager/gpe-filemanager_0.31.bb @@ -0,0 +1,13 @@ + +GPE_TARBALL_SUFFIX = "bz2" +inherit autotools gpe + +PR = "r0" +LICENSE = "GPL" +DESCRIPTION = "GPE file manager" +DEPENDS = "libgpewidget gnome-vfs dbus-glib" +SECTION = "gpe" +RDEPENDS = "gpe-icons" +RRECOMMENDS = "gnome-vfs-plugin-file gnome-vfs-plugin-smb gnome-vfs-plugin-ftp gnome-vfs-plugin-computer gnome-vfs-plugin-network gnome-vfs-plugin-sftp gnome-vfs-plugin-http" + +FILES_${PN} += " ${datadir}/gpe" -- cgit v1.2.3 From a450911ca47aec70fbbe0865d8262796ffc5fc8e Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 23 Jan 2008 14:29:32 +0000 Subject: zbedic: update libbedic to 1.1 and zbedic to 1.2 --- packages/zbedic/libbedic_1.0.bb | 29 ---------------------------- packages/zbedic/libbedic_1.1.bb | 29 ++++++++++++++++++++++++++++ packages/zbedic/zbedic_1.0.bb | 42 ----------------------------------------- packages/zbedic/zbedic_1.2.bb | 42 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 71 deletions(-) delete mode 100644 packages/zbedic/libbedic_1.0.bb create mode 100644 packages/zbedic/libbedic_1.1.bb delete mode 100644 packages/zbedic/zbedic_1.0.bb create mode 100644 packages/zbedic/zbedic_1.2.bb diff --git a/packages/zbedic/libbedic_1.0.bb b/packages/zbedic/libbedic_1.0.bb deleted file mode 100644 index 4ffb13cee0..0000000000 --- a/packages/zbedic/libbedic_1.0.bb +++ /dev/null @@ -1,29 +0,0 @@ -DESCRIPTION = "A dictionary application for Qt/E based Palmtop Environments" -SECTION = "opie/applications" -PRIORITY = "optional" -LICENSE = "GPL" -APPTYPE = "binary" -APPDESKTOP = "${WORKDIR}/zbedic/misc" -PR = "r1" - -SRC_URI = "${SOURCEFORGE_MIRROR}/bedic/libbedic_${PV}-0.tgz" - -S = "${WORKDIR}" - -inherit palmtop -# need to override this, because bedic contains exception handling -export OE_QMAKE_CXXFLAGS="-fexceptions -fno-rtti ${CXXFLAGS}" - -do_configure() { - qmake -project && qmake -makefile -t lib -spec ${QMAKESPEC} CONFIG=console CONFIG+=staticlib -after \ - INCLUDEPATH+=../include TARGET=bedic DESTDIR=${STAGING_LIBDIR} \ - HEADERS+=src/file.h SOURCES+=src/file.cpp SOURCES-=tools/xerox.cpp \ - SOURCES-=src/test_dynamic_dictionary.cpp \ - SOURCES-=src/test_dynamic_database.cpp \ - CXXFLAGS+=-fexceptions -} - -do_stage() { - install -d ${STAGING_INCDIR}/libbedic/ - install -m 0644 ${S}/include/*.h ${STAGING_INCDIR}/libbedic/ -} diff --git a/packages/zbedic/libbedic_1.1.bb b/packages/zbedic/libbedic_1.1.bb new file mode 100644 index 0000000000..4ffb13cee0 --- /dev/null +++ b/packages/zbedic/libbedic_1.1.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "A dictionary application for Qt/E based Palmtop Environments" +SECTION = "opie/applications" +PRIORITY = "optional" +LICENSE = "GPL" +APPTYPE = "binary" +APPDESKTOP = "${WORKDIR}/zbedic/misc" +PR = "r1" + +SRC_URI = "${SOURCEFORGE_MIRROR}/bedic/libbedic_${PV}-0.tgz" + +S = "${WORKDIR}" + +inherit palmtop +# need to override this, because bedic contains exception handling +export OE_QMAKE_CXXFLAGS="-fexceptions -fno-rtti ${CXXFLAGS}" + +do_configure() { + qmake -project && qmake -makefile -t lib -spec ${QMAKESPEC} CONFIG=console CONFIG+=staticlib -after \ + INCLUDEPATH+=../include TARGET=bedic DESTDIR=${STAGING_LIBDIR} \ + HEADERS+=src/file.h SOURCES+=src/file.cpp SOURCES-=tools/xerox.cpp \ + SOURCES-=src/test_dynamic_dictionary.cpp \ + SOURCES-=src/test_dynamic_database.cpp \ + CXXFLAGS+=-fexceptions +} + +do_stage() { + install -d ${STAGING_INCDIR}/libbedic/ + install -m 0644 ${S}/include/*.h ${STAGING_INCDIR}/libbedic/ +} diff --git a/packages/zbedic/zbedic_1.0.bb b/packages/zbedic/zbedic_1.0.bb deleted file mode 100644 index afdfdd5350..0000000000 --- a/packages/zbedic/zbedic_1.0.bb +++ /dev/null @@ -1,42 +0,0 @@ -DESCRIPTION = "A dictionary application for Qt/E based Palmtop Environments" -SECTION = "opie/applications" -PRIORITY = "optional" -LICENSE = "GPL" -DEPENDS = "libbedic" -APPTYPE = "binary" -APPDESKTOP = "${WORKDIR}/misc" -PR = "r2" - -SRC_URI = "${SOURCEFORGE_MIRROR}/bedic/zbedic_${PV}-0.tgz \ - file://opie-icons.patch;patch=1 \ - file://version.patch;patch=1 \ - file://qtopia17.patch;patch=1" - -S = "${WORKDIR}" - -inherit opie -export OE_QMAKE_LINK="${CXX}" - -EXTRA_QMAKEVARS_POST += "INCLUDEPATH+=${STAGING_INCDIR}/libbedic LIBS+=-lbedic LIBS+=-lsqlite3 TARGET=zbedic" - -do_configure_prepend() { - rm -f Makefile - qmake -project -} - -do_install() { - install -d ${D}${palmtopdir}/pics/zbedic/ - install -d ${D}${palmtopdir}/help/html/ - # we copy small icons - in other way QVGA users will complain - install -m 0644 ${S}/misc/small_icons/*.png ${D}${palmtopdir}/pics/zbedic/ - install -m 0644 ${S}/misc/large_icons/zbedic.png ${D}${palmtopdir}/pics/ - install -m 0644 ${S}/doc/manual/*.html ${D}${palmtopdir}/help/html/ - rm ${D}${palmtopdir}/pics/zbedic/zbedic.png - - # those ones are taken from OPIE so they have proper size (depend on device) - rm ${D}${palmtopdir}/pics/zbedic/back.png - rm ${D}${palmtopdir}/pics/zbedic/forward.png -} - -PACKAGES =+ "zbedic-help-en" -FILES_zbedic-help-en = "${palmtopdir}/help/html/*" diff --git a/packages/zbedic/zbedic_1.2.bb b/packages/zbedic/zbedic_1.2.bb new file mode 100644 index 0000000000..afdfdd5350 --- /dev/null +++ b/packages/zbedic/zbedic_1.2.bb @@ -0,0 +1,42 @@ +DESCRIPTION = "A dictionary application for Qt/E based Palmtop Environments" +SECTION = "opie/applications" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "libbedic" +APPTYPE = "binary" +APPDESKTOP = "${WORKDIR}/misc" +PR = "r2" + +SRC_URI = "${SOURCEFORGE_MIRROR}/bedic/zbedic_${PV}-0.tgz \ + file://opie-icons.patch;patch=1 \ + file://version.patch;patch=1 \ + file://qtopia17.patch;patch=1" + +S = "${WORKDIR}" + +inherit opie +export OE_QMAKE_LINK="${CXX}" + +EXTRA_QMAKEVARS_POST += "INCLUDEPATH+=${STAGING_INCDIR}/libbedic LIBS+=-lbedic LIBS+=-lsqlite3 TARGET=zbedic" + +do_configure_prepend() { + rm -f Makefile + qmake -project +} + +do_install() { + install -d ${D}${palmtopdir}/pics/zbedic/ + install -d ${D}${palmtopdir}/help/html/ + # we copy small icons - in other way QVGA users will complain + install -m 0644 ${S}/misc/small_icons/*.png ${D}${palmtopdir}/pics/zbedic/ + install -m 0644 ${S}/misc/large_icons/zbedic.png ${D}${palmtopdir}/pics/ + install -m 0644 ${S}/doc/manual/*.html ${D}${palmtopdir}/help/html/ + rm ${D}${palmtopdir}/pics/zbedic/zbedic.png + + # those ones are taken from OPIE so they have proper size (depend on device) + rm ${D}${palmtopdir}/pics/zbedic/back.png + rm ${D}${palmtopdir}/pics/zbedic/forward.png +} + +PACKAGES =+ "zbedic-help-en" +FILES_zbedic-help-en = "${palmtopdir}/help/html/*" -- cgit v1.2.3 From 6644a5476fc6289b19163b46e5b3b49c61f3bb78 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 23 Jan 2008 15:15:17 +0000 Subject: libgcrypt_1.4.0.bb : add new version --- packages/libgcrypt/libgcrypt_1.4.0.bb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 packages/libgcrypt/libgcrypt_1.4.0.bb diff --git a/packages/libgcrypt/libgcrypt_1.4.0.bb b/packages/libgcrypt/libgcrypt_1.4.0.bb new file mode 100644 index 0000000000..74205da673 --- /dev/null +++ b/packages/libgcrypt/libgcrypt_1.4.0.bb @@ -0,0 +1,22 @@ +DESCRIPTION = "A general purpose cryptographic library based on the code from GnuPG" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "GPL LGPL FDL" +DEPENDS = "libgpg-error" +PR = "r1" + +# move libgcrypt-config into -dev package +FILES_${PN} = "${libdir}/lib*.so.*" +FILES_${PN}-dev += "${bindir}" + +SRC_URI = "ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-${PV}.tar.gz" + +inherit autotools binconfig + +EXTRA_OECONF = "--without-pth --disable-asm --with-capabilities" + +ARM_INSTRUCTION_SET = "arm" + +do_stage() { + autotools_stage_all +} -- cgit v1.2.3 From 438c37c80601fdbff139eef84d492fbf84d39675 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 23 Jan 2008 15:21:12 +0000 Subject: font-update-common: first commit, partly closes bug 2430 * a GUI-agnostic update handler for registering fonts for use by the GUI * GUI-specific parts are yet to be committed and need to depend on this package --- packages/font-update-common/.mtn2git_empty | 0 packages/font-update-common/files/.mtn2git_empty | 0 packages/font-update-common/files/update-fonts | 4 ++++ packages/font-update-common/font-update-common_0.1.bb | 13 +++++++++++++ 4 files changed, 17 insertions(+) create mode 100644 packages/font-update-common/.mtn2git_empty create mode 100644 packages/font-update-common/files/.mtn2git_empty create mode 100644 packages/font-update-common/files/update-fonts create mode 100644 packages/font-update-common/font-update-common_0.1.bb diff --git a/packages/font-update-common/.mtn2git_empty b/packages/font-update-common/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/font-update-common/files/.mtn2git_empty b/packages/font-update-common/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/font-update-common/files/update-fonts b/packages/font-update-common/files/update-fonts new file mode 100644 index 0000000000..19e3157d2f --- /dev/null +++ b/packages/font-update-common/files/update-fonts @@ -0,0 +1,4 @@ +#!/bin/sh +#Author: Rolf Leggewie + +run-parts /etc/update-fonts-common.d/ diff --git a/packages/font-update-common/font-update-common_0.1.bb b/packages/font-update-common/font-update-common_0.1.bb new file mode 100644 index 0000000000..eae0a8a55f --- /dev/null +++ b/packages/font-update-common/font-update-common_0.1.bb @@ -0,0 +1,13 @@ +DESCRIPTION = "Scripts to be called when fonts are installed or removed \ +to make them known to the WM, whether X11 or Opie" +AUTHOR = "Rolf Leggewie Date: Wed, 23 Jan 2008 15:29:06 +0000 Subject: kernel-arch.bbclass: x86 is now proper arch in kernel --- classes/kernel-arch.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/kernel-arch.bbclass b/classes/kernel-arch.bbclass index 9208c3507a..b45f3f9696 100644 --- a/classes/kernel-arch.bbclass +++ b/classes/kernel-arch.bbclass @@ -5,7 +5,7 @@ # valid_archs = "alpha cris ia64 \ - x86_64,i386 \ + x86_64,i386 x86 \ m68knommu m68k ppc powerpc ppc64 \ sparc sparc64 \ arm arm26 \ -- cgit v1.2.3 From 602717bfc8d5cafa6c158d1b34091eec6f78de21 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Wed, 23 Jan 2008 15:36:33 +0000 Subject: madwifi-ng: make 'alix' use newer snapshot --- packages/madwifi/madwifi-ng_r2702-20070903.bb | 2 -- packages/madwifi/madwifi-ng_r2826-20071105.bb | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/madwifi/madwifi-ng_r2702-20070903.bb b/packages/madwifi/madwifi-ng_r2702-20070903.bb index 43a491bd1f..627d4f52b5 100644 --- a/packages/madwifi/madwifi-ng_r2702-20070903.bb +++ b/packages/madwifi/madwifi-ng_r2702-20070903.bb @@ -2,8 +2,6 @@ # Don't use this unless you know what you're doing -- this version does # *NOT* build on BE kernels. -DEFAULT_PREFERENCE = "-1" -DEFAULT_PREFERENCE_alix = "1" # Disable stripping of kernel modules, since this action strips too # much out, and the resulting module won't load. diff --git a/packages/madwifi/madwifi-ng_r2826-20071105.bb b/packages/madwifi/madwifi-ng_r2826-20071105.bb index 5a8bb116a3..5301e3bd42 100644 --- a/packages/madwifi/madwifi-ng_r2826-20071105.bb +++ b/packages/madwifi/madwifi-ng_r2826-20071105.bb @@ -1,6 +1,7 @@ # Bitbake recipe for the madwifi-ng driver DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_alix = "1" DEFAULT_PREFERENCE_mpc8323e-rdb = "1" # Disable stripping of kernel modules, since this action strips too -- cgit v1.2.3 From 32e4437d07d5b68f6c7020a5af2a1ca5f767b410 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Wed, 23 Jan 2008 16:51:48 +0000 Subject: openssl: Add patch to build for avr32 --- packages/openssl/openssl-0.9.7g/avr32.patch | 10 ++++++++++ packages/openssl/openssl_0.9.7g.bb | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 packages/openssl/openssl-0.9.7g/avr32.patch diff --git a/packages/openssl/openssl-0.9.7g/avr32.patch b/packages/openssl/openssl-0.9.7g/avr32.patch new file mode 100644 index 0000000000..b6ac81b717 --- /dev/null +++ b/packages/openssl/openssl-0.9.7g/avr32.patch @@ -0,0 +1,10 @@ +--- Configure~ 2008-01-23 17:44:04.000000000 +0100 ++++ Configure 2008-01-23 17:44:04.000000000 +0100 +@@ -442,6 +442,7 @@ + "linux-mips", "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + "linux-ppc", "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:asm/linux_ppc32.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + # -bpowerpc64-linux is transient option, -m64 should be the one to use... ++"linux-avr32","gcc:-DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_RISC1::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).", + "linux-ppc64", "gcc:-bpowerpc64-linux -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:asm/linux_ppc64.o:::::::::dlfcn:linux-shared:-fPIC:-bpowerpc64-linux:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + "linux-m68k", "gcc:-DB_ENDIAN -DTERMIO -O2 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG::", + "linux-s390", "gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", diff --git a/packages/openssl/openssl_0.9.7g.bb b/packages/openssl/openssl_0.9.7g.bb index c128275867..3a420001c9 100644 --- a/packages/openssl/openssl_0.9.7g.bb +++ b/packages/openssl/openssl_0.9.7g.bb @@ -2,10 +2,11 @@ inherit pkgconfig require openssl.inc -PR = "r5" +PR = "r6" SRC_URI += "file://debian.patch;patch=1 \ file://armeb.patch;patch=1;pnum=0 \ file://gnueabi-arm.patch;patch=1 \ file://gnueabi-armeb.patch;patch=1 \ - file://uclibcgnueabi.patch;patch=1" + file://uclibcgnueabi.patch;patch=1 \ + file://avr32.patch;patch=1;pnum=0" -- cgit v1.2.3 From c09fa7252df8731fb5f7a4e5b573a34921bf0318 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 23 Jan 2008 21:38:08 +0000 Subject: python-dbus: remove dbus-python, add staging for python-dbus --- packages/dbus/dbus-python_0.71.bb | 10 ---------- packages/python/python-dbus_0.81.1.bb | 6 +++++- 2 files changed, 5 insertions(+), 11 deletions(-) delete mode 100644 packages/dbus/dbus-python_0.71.bb diff --git a/packages/dbus/dbus-python_0.71.bb b/packages/dbus/dbus-python_0.71.bb deleted file mode 100644 index ed586b7f4b..0000000000 --- a/packages/dbus/dbus-python_0.71.bb +++ /dev/null @@ -1,10 +0,0 @@ -DESCRIPTION = "Message bus system for applications to talk to one another - python bindings" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" -LICENSE = "GPL" -SECTION = "devel/python" -DEPENDS = "python-pyrex-native dbus dbus-glib" -PR = "r0" - -SRC_URI = "http://freedesktop.org/software/dbus/releases/dbus-python-${PV}.tar.gz" - -inherit distutils diff --git a/packages/python/python-dbus_0.81.1.bb b/packages/python/python-dbus_0.81.1.bb index ad3b1c177b..86628bad26 100644 --- a/packages/python/python-dbus_0.81.1.bb +++ b/packages/python/python-dbus_0.81.1.bb @@ -4,7 +4,7 @@ HOMEPAGE = "http://www.freedesktop.org/Software/dbus" LICENSE = "GPL" DEPENDS = "expat glib-2.0 virtual/libintl python-pyrex-native python" RDEPENDS = "dbus python-threading python-io python-stringold python-logging" -PR = "ml1" +PR = "ml2" SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz \ file://allow-older-autotools.patch;patch=1 \ @@ -16,3 +16,7 @@ inherit distutils-base autotools EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../" +do_stage() { + autotools_stage_all +} + -- cgit v1.2.3 From 6b23e923fddee891ca94cb9dee5c74346bdafda4 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 23 Jan 2008 21:39:24 +0000 Subject: python-edbus: remove BROKENness, now that python-dbus stages its includes python-efl: RDEPEND on python-edbus, now that it builds --- packages/python/python-edbus_cvs.bb | 3 +-- packages/python/python-efl.bb | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/python/python-edbus_cvs.bb b/packages/python/python-edbus_cvs.bb index 7a4d53762f..652cf919cd 100644 --- a/packages/python/python-edbus_cvs.bb +++ b/packages/python/python-edbus_cvs.bb @@ -1,8 +1,7 @@ require python-efl.inc -# broken until someone adds dbus 1.1.x DEPENDS += "edbus dbus-1.1" -PR = "r0" +PR = "r1" SRC_URI = "${E_CVS};module=e17/proto/python-efl/python-e_dbus" S = "${WORKDIR}/python-e_dbus" diff --git a/packages/python/python-efl.bb b/packages/python/python-efl.bb index ec5e9cd7e2..1c7f23a1eb 100644 --- a/packages/python/python-efl.bb +++ b/packages/python/python-efl.bb @@ -1,7 +1,7 @@ DESCRIPTION = "Python Bindings to the Enlightenment Foundation Libraries" LICENSE = "MIT" SECTION = "devel/python" -RDEPENDS = "python-evas python-ecore python-emotion python-edje python-epsilon" -PR = "ml1" +RDEPENDS = "python-evas python-ecore python-emotion python-edje python-epsilon python-edbus" +PR = "ml2" ALLOW_EMPTY = "1" -- cgit v1.2.3 From b370c2f42b70872caba6f025b19236da97411376 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 23 Jan 2008 23:34:13 +0000 Subject: dbus.inc : break library out into seperate package, bump PR accordingly --- packages/dbus/dbus.inc | 5 ++++- packages/dbus/dbus_1.0.1.bb | 2 +- packages/dbus/dbus_1.0.2.bb | 2 +- packages/dbus/dbus_1.1.1.bb | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc index 21316c2d09..ad5660345d 100644 --- a/packages/dbus/dbus.inc +++ b/packages/dbus/dbus.inc @@ -19,7 +19,10 @@ INITSCRIPT_PARAMS = "defaults" CONFFILES_${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf" -FILES_${PN} = "${bindir}/dbus-daemon* ${bindir}/dbus-uuidgen ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services ${libdir}/lib*.so.*" +PACKAGES += "${PN}-lib" + +FILES_${PN} = "${bindir}/dbus-daemon* ${bindir}/dbus-uuidgen ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services" +FILES_${PN}-lib = "${libdir}/lib*.so.*" FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool" pkg_postinst_dbus() { diff --git a/packages/dbus/dbus_1.0.1.bb b/packages/dbus/dbus_1.0.1.bb index f5e4aa16ea..edc4f11a48 100644 --- a/packages/dbus/dbus_1.0.1.bb +++ b/packages/dbus/dbus_1.0.1.bb @@ -2,4 +2,4 @@ require dbus.inc SRC_URI += "file://dbus-exploit-fix.patch;patch=1" -PR = "r4" +PR = "r5" diff --git a/packages/dbus/dbus_1.0.2.bb b/packages/dbus/dbus_1.0.2.bb index f51265e434..ec5052e342 100644 --- a/packages/dbus/dbus_1.0.2.bb +++ b/packages/dbus/dbus_1.0.2.bb @@ -2,7 +2,7 @@ require dbus.inc DEFAULT_PREFERENCE = "1" -PR = "r8" +PR = "r9" SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \ file://tmpdir.patch;patch=1 \ diff --git a/packages/dbus/dbus_1.1.1.bb b/packages/dbus/dbus_1.1.1.bb index 7bf0a8634d..07d2e5dd6c 100644 --- a/packages/dbus/dbus_1.1.1.bb +++ b/packages/dbus/dbus_1.1.1.bb @@ -6,7 +6,7 @@ DESCRIPTION = "message bus system for applications to talk to one another" LICENSE = "GPL" DEPENDS = "expat glib-2.0 virtual/libintl" -PR = "r3" +PR = "r4" SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \ file://tmpdir.patch;patch=1 \ -- cgit v1.2.3 From 3f3adf80310d6181293f1c11f600022633367cd5 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Thu, 24 Jan 2008 01:16:04 +0000 Subject: sane-srcrevs: Increment linux-ixp4xx kernel version to include latest patches --- 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 fd081635e0..dd2033df19 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -44,7 +44,7 @@ SRCREV_pn-libowl ?= "277" SRCREV_pn-libxosd ?= "627" SRCREV_pn-linux-bfin ?= "3758" SRCREV_pn-linux-hackndev-2.6 ?= "1308" -SRCREV_pn-linux-ixp4xx ?= "983" +SRCREV_pn-linux-ixp4xx ?= "990" SRCREV_pn-linux-openmoko ?= "3801" SRCREV_pn-llvm-gcc4 ?= "374" SRCREV_pn-llvm-gcc4-cross ?= "374" -- cgit v1.2.3 From 0ee83e2ce7467e0c305b7e9ae1479ed5beada4a2 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 24 Jan 2008 08:37:46 +0000 Subject: linux 2.6.23: avr32 doesn't like the stable patches, so lets not use those --- packages/linux/linux_2.6.23.bb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb index d8a6d1346a..77137b0d9a 100644 --- a/packages/linux/linux_2.6.23.bb +++ b/packages/linux/linux_2.6.23.bb @@ -29,9 +29,11 @@ SRC_URI += "http://kamikaze.waninkoko.info/patches/2.6.23/klight1/broken-out/squ # Completely fair scheduler SRC_URI += "http://people.redhat.com/mingo/cfs-scheduler/sched-cfs-v2.6.23.12-v24.1.patch;patch=1" -SRC_URI_append_avr32 = " \ - http://avr32linux.org/twiki/pub/Main/LinuxPatches/linux-2.6.23.atmel.3.patch.bz2;patch=1 \ - " +# The Atmel patch doesn't apply against 2.6.23.12 :( +SRC_URI_avr32 = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ + file://defconfig \ + http://avr32linux.org/twiki/pub/Main/LinuxPatches/linux-2.6.23.atmel.3.patch.bz2;patch=1 \ + " SRC_URI_append_cm-x270 = "\ file://0001-cm-x270-base2.patch;patch=1 \ -- cgit v1.2.3 From fd606e8b6a5f1431a564bbdc256deea79696b9bd Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 24 Jan 2008 08:39:23 +0000 Subject: avr32 machines: remove postprocess hack as newer uboots load uImage from the rootfs --- conf/machine/at32stk1000.conf | 1 - conf/machine/atngw100.conf | 1 - 2 files changed, 2 deletions(-) diff --git a/conf/machine/at32stk1000.conf b/conf/machine/at32stk1000.conf index ac63af5e56..4c3112df78 100644 --- a/conf/machine/at32stk1000.conf +++ b/conf/machine/at32stk1000.conf @@ -23,5 +23,4 @@ EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" KERNEL_IMAGETYPE = "uImage" PREFERRED_VERSION_u-boot = "1.1.4" -ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* || true;" diff --git a/conf/machine/atngw100.conf b/conf/machine/atngw100.conf index 17b4c4187a..21e256b04a 100644 --- a/conf/machine/atngw100.conf +++ b/conf/machine/atngw100.conf @@ -22,4 +22,3 @@ EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" PREFERRED_VERSION_u-boot = "1.1.4" KERNEL_IMAGETYPE = "uImage" -ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* || true ;" -- cgit v1.2.3 From 2cce07bb173c6459a142c5e66855de8c1b6daa44 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 24 Jan 2008 09:50:12 +0000 Subject: gtk+_2.12.3.bb : latest gtk+, re-enabled cups plugin as its been bugfixed. --- packages/gtk+/gtk+-2.12.3/.mtn2git_empty | 0 packages/gtk+/gtk+-2.12.3/cellrenderer-cairo.patch | 32 + packages/gtk+/gtk+-2.12.3/combo-arrow-size.patch | 67 + packages/gtk+/gtk+-2.12.3/disable-print.patch | 26 + packages/gtk+/gtk+-2.12.3/entry-cairo.patch | 103 + packages/gtk+/gtk+-2.12.3/gtklabel-resize-patch | 10 + packages/gtk+/gtk+-2.12.3/hardcoded_libtool.patch | 29 + packages/gtk+/gtk+-2.12.3/menu-deactivate.patch | 51 + packages/gtk+/gtk+-2.12.3/no-demos.patch | 10 + packages/gtk+/gtk+-2.12.3/pangoxft2.10.6.diff | 2456 ++++++++++++++++++++ packages/gtk+/gtk+-2.12.3/range-no-redraw.patch | 127 + packages/gtk+/gtk+-2.12.3/run-iconcache.patch | 19 + packages/gtk+/gtk+-2.12.3/scrolled-placement.patch | 22 + packages/gtk+/gtk+-2.12.3/toggle-font.diff | 100 + packages/gtk+/gtk+-2.12.3/xsettings.patch | 16 + packages/gtk+/gtk+_2.12.3.bb | 48 + 16 files changed, 3116 insertions(+) create mode 100644 packages/gtk+/gtk+-2.12.3/.mtn2git_empty create mode 100644 packages/gtk+/gtk+-2.12.3/cellrenderer-cairo.patch create mode 100644 packages/gtk+/gtk+-2.12.3/combo-arrow-size.patch create mode 100644 packages/gtk+/gtk+-2.12.3/disable-print.patch create mode 100644 packages/gtk+/gtk+-2.12.3/entry-cairo.patch create mode 100644 packages/gtk+/gtk+-2.12.3/gtklabel-resize-patch create mode 100644 packages/gtk+/gtk+-2.12.3/hardcoded_libtool.patch create mode 100644 packages/gtk+/gtk+-2.12.3/menu-deactivate.patch create mode 100644 packages/gtk+/gtk+-2.12.3/no-demos.patch create mode 100644 packages/gtk+/gtk+-2.12.3/pangoxft2.10.6.diff create mode 100644 packages/gtk+/gtk+-2.12.3/range-no-redraw.patch create mode 100644 packages/gtk+/gtk+-2.12.3/run-iconcache.patch create mode 100644 packages/gtk+/gtk+-2.12.3/scrolled-placement.patch create mode 100644 packages/gtk+/gtk+-2.12.3/toggle-font.diff create mode 100644 packages/gtk+/gtk+-2.12.3/xsettings.patch create mode 100644 packages/gtk+/gtk+_2.12.3.bb diff --git a/packages/gtk+/gtk+-2.12.3/.mtn2git_empty b/packages/gtk+/gtk+-2.12.3/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/gtk+/gtk+-2.12.3/cellrenderer-cairo.patch b/packages/gtk+/gtk+-2.12.3/cellrenderer-cairo.patch new file mode 100644 index 0000000000..4439e69fb6 --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/cellrenderer-cairo.patch @@ -0,0 +1,32 @@ +Index: gtk/gtkcellrenderer.c +=================================================================== +RCS file: /cvs/gnome/gtk+/gtk/gtkcellrenderer.c,v +retrieving revision 1.55 +diff -u -r1.55 gtkcellrenderer.c +--- gtk/gtkcellrenderer.c 14 May 2006 04:25:28 -0000 1.55 ++++ gtk/gtkcellrenderer.c 30 Jun 2006 10:57:43 -0000 +@@ -551,6 +551,7 @@ + + if (cell->cell_background_set && !selected) + { ++#ifdef USE_CAIRO_INTERNALLY + cairo_t *cr = gdk_cairo_create (window); + + gdk_cairo_rectangle (cr, background_area); +@@ -558,6 +559,16 @@ + cairo_fill (cr); + + cairo_destroy (cr); ++#else ++ GdkGC *gc; ++ ++ gc = gdk_gc_new (window); ++ gdk_gc_set_rgb_fg_color (gc, &priv->cell_background); ++ gdk_draw_rectangle (window, gc, TRUE, ++ background_area->x, background_area->y, ++ background_area->width, background_area->height); ++ g_object_unref (gc); ++#endif + } + + GTK_CELL_RENDERER_GET_CLASS (cell)->render (cell, diff --git a/packages/gtk+/gtk+-2.12.3/combo-arrow-size.patch b/packages/gtk+/gtk+-2.12.3/combo-arrow-size.patch new file mode 100644 index 0000000000..d44c454ce3 --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/combo-arrow-size.patch @@ -0,0 +1,67 @@ +Index: gtk/gtkcombobox.c +=================================================================== +RCS file: /cvs/gnome/gtk+/gtk/gtkcombobox.c,v +retrieving revision 1.185 +diff -u -p -r1.185 gtkcombobox.c +--- gtk/gtkcombobox.c 12 Oct 2006 13:48:07 -0000 1.185 ++++ gtk/gtkcombobox.c 1 Nov 2006 19:01:09 -0000 +@@ -756,6 +756,25 @@ gtk_combo_box_class_init (GtkComboBoxCla + FALSE, + GTK_PARAM_READABLE)); + ++ /** ++ * GtkComboBox:arrow-size: ++ * ++ * Sets the minimum size of the arrow in the combo box. Note ++ * that the arrow size is coupled to the font size, so in case ++ * a larger font is used, the arrow will be larger than set ++ * by arrow size. ++ * ++ * Since: 2.12 ++ */ ++ gtk_widget_class_install_style_property (widget_class, ++ g_param_spec_int ("arrow-size", ++ P_("Arrow Size"), ++ P_("The minimum size of the arrow in the combo box"), ++ 0, ++ G_MAXINT, ++ 15, ++ GTK_PARAM_READABLE)); ++ + g_type_class_add_private (object_class, sizeof (GtkComboBoxPrivate)); + } + +@@ -1897,7 +1916,12 @@ gtk_combo_box_size_request (GtkWidget + { + gint width, height; + gint focus_width, focus_pad; ++ gint font_size; ++ gint arrow_size; + GtkRequisition bin_req; ++ PangoContext *context; ++ PangoFontMetrics *metrics; ++ PangoFontDescription *font_desc; + + GtkComboBox *combo_box = GTK_COMBO_BOX (widget); + +@@ -1910,7 +1934,20 @@ gtk_combo_box_size_request (GtkWidget + gtk_widget_style_get (GTK_WIDGET (widget), + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, ++ "arrow-size", &arrow_size, + NULL); ++ ++ font_desc = GTK_BIN (widget)->child->style->font_desc; ++ context = gtk_widget_get_pango_context (widget); ++ metrics = pango_context_get_metrics (context, font_desc, ++ pango_context_get_language (context)); ++ font_size = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) + ++ pango_font_metrics_get_descent (metrics)); ++ pango_font_metrics_unref (metrics); ++ ++ arrow_size = MAX (arrow_size, font_size); ++ ++ gtk_widget_set_size_request (combo_box->priv->arrow, arrow_size, arrow_size); + + if (!combo_box->priv->tree_view) + { diff --git a/packages/gtk+/gtk+-2.12.3/disable-print.patch b/packages/gtk+/gtk+-2.12.3/disable-print.patch new file mode 100644 index 0000000000..21a4be4da8 --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/disable-print.patch @@ -0,0 +1,26 @@ +--- gtk+-2.12.0/configure.in~ 2006-07-05 18:11:44.000000000 +0200 ++++ gtk+-2.12.0/configure.in 2006-07-05 18:11:44.000000000 +0200 +@@ -1554,22 +1554 @@ +-AC_PATH_PROG(CUPS_CONFIG, cups-config, no) +-if test "x$CUPS_CONFIG" != "xno"; then +- CUPS_CFLAGS=`cups-config --cflags | sed 's/-O[0-9]*//' | sed 's/-m[^\t]*//g'` +- CUPS_LIBS=`cups-config --libs` +- +- CUPS_API_VERSION=`cups-config --api-version` +- CUPS_API_MAJOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $1}'` +- CUPS_API_MINOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $2}'` +- +- if test $CUPS_API_MAJOR -gt 1 -o \ +- $CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 2; then +- AC_DEFINE(HAVE_CUPS_API_1_2) +- fi +- +- AC_SUBST(CUPS_API_MAJOR) +- AC_SUBST(CUPS_API_MINOR) +- AC_SUBST(CUPS_CFLAGS) +- AC_SUBST(CUPS_LIBS) +- +- AC_CHECK_HEADER(cups/cups.h,,AC_MSG_ERROR([[*** Sorry, cups-config present but cups/cups.h missing.]])) +-fi +-AM_CONDITIONAL(HAVE_CUPS, test "x$CUPS_CONFIG" != "xno") ++AM_CONDITIONAL(HAVE_CUPS, false) diff --git a/packages/gtk+/gtk+-2.12.3/entry-cairo.patch b/packages/gtk+/gtk+-2.12.3/entry-cairo.patch new file mode 100644 index 0000000000..3313e7f132 --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/entry-cairo.patch @@ -0,0 +1,103 @@ +Index: gtk/gtkentry.c +=================================================================== +RCS file: /cvs/gnome/gtk+/gtk/gtkentry.c,v +retrieving revision 1.317 +diff -u -r1.317 gtkentry.c +--- gtk/gtkentry.c 29 Jun 2006 09:18:05 -0000 1.317 ++++ gtk/gtkentry.c 2 Jul 2006 14:14:24 -0000 +@@ -3337,7 +3337,9 @@ + if (GTK_WIDGET_DRAWABLE (entry)) + { + PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE); ++#ifdef USE_CAIRO_INTERNALLY + cairo_t *cr; ++#endif + gint x, y; + gint start_pos, end_pos; + +@@ -3345,23 +3347,35 @@ + + get_layout_position (entry, &x, &y); + ++#ifdef USE_CAIRO_INTERNALLY + cr = gdk_cairo_create (entry->text_area); + + cairo_move_to (cr, x, y); + gdk_cairo_set_source_color (cr, &widget->style->text [widget->state]); + pango_cairo_show_layout (cr, layout); ++#else ++ gdk_draw_layout (entry->text_area, widget->style->text_gc [widget->state], ++ x, y, ++ layout); ++#endif + + if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos)) + { + gint *ranges; + gint n_ranges, i; + PangoRectangle logical_rect; +- GdkColor *selection_color, *text_color; + GtkBorder inner_border; ++#ifdef USE_CAIRO_INTERNALLY ++ GdkColor *selection_color, *text_color; ++#else ++ GdkGC *selection_gc, *text_gc; ++ GdkRegion *clip_region; ++#endif + + pango_layout_get_pixel_extents (layout, NULL, &logical_rect); + gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges); + ++#ifdef USE_CAIRO_INTERNALLY + if (GTK_WIDGET_HAS_FOCUS (entry)) + { + selection_color = &widget->style->base [GTK_STATE_SELECTED]; +@@ -3390,11 +3404,46 @@ + cairo_move_to (cr, x, y); + gdk_cairo_set_source_color (cr, text_color); + pango_cairo_show_layout (cr, layout); +- ++#else ++ if (GTK_WIDGET_HAS_FOCUS (entry)) ++ { ++ selection_gc = widget->style->base_gc [GTK_STATE_SELECTED]; ++ text_gc = widget->style->text_gc [GTK_STATE_SELECTED]; ++ } ++ else ++ { ++ selection_gc = widget->style->base_gc [GTK_STATE_ACTIVE]; ++ text_gc = widget->style->text_gc [GTK_STATE_ACTIVE]; ++ } ++ ++ clip_region = gdk_region_new (); ++ for (i = 0; i < n_ranges; ++i) ++ { ++ GdkRectangle rect; ++ ++ rect.x = inner_border.left - entry->scroll_offset + ranges[2 * i]; ++ rect.y = y; ++ rect.width = ranges[2 * i + 1]; ++ rect.height = logical_rect.height; ++ ++ gdk_draw_rectangle (entry->text_area, selection_gc, TRUE, ++ rect.x, rect.y, rect.width, rect.height); ++ ++ gdk_region_union_with_rect (clip_region, &rect); ++ } ++ ++ gdk_gc_set_clip_region (text_gc, clip_region); ++ gdk_draw_layout (entry->text_area, text_gc, ++ x, y, ++ layout); ++ gdk_gc_set_clip_region (text_gc, NULL); ++ gdk_region_destroy (clip_region); ++#endif + g_free (ranges); + } +- ++#ifdef USE_CAIRO_INTERNALLY + cairo_destroy (cr); ++#endif + } + } + diff --git a/packages/gtk+/gtk+-2.12.3/gtklabel-resize-patch b/packages/gtk+/gtk+-2.12.3/gtklabel-resize-patch new file mode 100644 index 0000000000..df29656343 --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/gtklabel-resize-patch @@ -0,0 +1,10 @@ +--- gtk+-2.4.3/gtk/gtklabel.c~ 2004-06-11 13:50:34.000000000 +0100 ++++ gtk+-2.4.3/gtk/gtklabel.c 2004-07-05 13:33:57.000000000 +0100 +@@ -1623,6 +1623,7 @@ + + /* We have to clear the layout, fonts etc. may have changed */ + gtk_label_clear_layout (label); ++ gtk_widget_queue_resize (GTK_WIDGET (label)); + } + + static void diff --git a/packages/gtk+/gtk+-2.12.3/hardcoded_libtool.patch b/packages/gtk+/gtk+-2.12.3/hardcoded_libtool.patch new file mode 100644 index 0000000000..6adb0cfef6 --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/hardcoded_libtool.patch @@ -0,0 +1,29 @@ +--- /tmp/configure.in 2007-01-08 17:50:49.000000000 +0100 ++++ gtk+-2.10.7/configure.in 2007-01-08 17:52:33.495251000 +0100 +@@ -371,7 +371,7 @@ + case $enable_explicit_deps in + auto) + export SED +- deplibs_check_method=`(./libtool --config; echo 'eval echo $deplibs_check_method') | sh` ++ deplibs_check_method=`(./$host_alias-libtool --config; echo 'eval echo $deplibs_check_method') | sh` + if test "x$deplibs_check_method" '!=' xpass_all || test "x$enable_static" = xyes ; then + enable_explicit_deps=yes + else +@@ -773,7 +773,7 @@ + dnl Now we check to see if our libtool supports shared lib deps + dnl (in a rather ugly way even) + if $dynworks; then +- pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./libtool --config" ++ pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./$host_alias-libtool --config" + pixbuf_deplibs_check=`$pixbuf_libtool_config | \ + grep '^[[a-z_]]*check[[a-z_]]*_method=[['\''"]]' | \ + sed 's/.*[['\''"]]\(.*\)[['\''"]]$/\1/'` +@@ -1611,7 +1611,7 @@ + # We are using gmodule-no-export now, but I'm leaving the stripping + # code in place for now, since pango and atk still require gmodule. + export SED +-export_dynamic=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh` ++export_dynamic=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh` + if test -n "$export_dynamic"; then + GDK_PIXBUF_DEP_LIBS=`echo $GDK_PIXBUF_DEP_LIBS | sed -e "s/$export_dynamic//"` + GDK_PIXBUF_XLIB_DEP_LIBS=`echo $GDK_PIXBUF_XLIB_DEP_LIBS | sed -e "s/$export_dynamic//"` diff --git a/packages/gtk+/gtk+-2.12.3/menu-deactivate.patch b/packages/gtk+/gtk+-2.12.3/menu-deactivate.patch new file mode 100644 index 0000000000..cfb8849e9f --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/menu-deactivate.patch @@ -0,0 +1,51 @@ +--- gtk+-2.10.0/gtk/gtkmenushell.c.orig 2006-07-05 17:17:34.000000000 +0200 ++++ gtk+-2.10.0/gtk/gtkmenushell.c 2006-07-05 17:19:01.000000000 +0200 +@@ -42,7 +42,7 @@ + #include "gtkintl.h" + #include "gtkalias.h" + +-#define MENU_SHELL_TIMEOUT 500 ++#define MENU_SHELL_TIMEOUT 2000 + + #define PACK_DIRECTION(m) \ + (GTK_IS_MENU_BAR (m) \ +@@ -203,6 +203,8 @@ + + G_DEFINE_TYPE (GtkMenuShell, gtk_menu_shell, GTK_TYPE_CONTAINER) + ++static int last_crossing_time; ++ + static void + gtk_menu_shell_class_init (GtkMenuShellClass *klass) + { +@@ -517,6 +519,7 @@ + gtk_grab_add (GTK_WIDGET (menu_shell)); + menu_shell->have_grab = TRUE; + menu_shell->active = TRUE; ++ last_crossing_time = 0; + } + } + +@@ -669,6 +672,13 @@ + menu_shell->activate_time = 0; + deactivate = FALSE; + } ++ ++ if (last_crossing_time != 0 ++ && ((event->time - last_crossing_time) < 500)) ++ { ++ last_crossing_time = 0; ++ deactivate = FALSE; ++ } + + if (deactivate) + { +@@ -716,6 +726,8 @@ + { + menu_item = gtk_get_event_widget ((GdkEvent*) event); + ++ last_crossing_time = event->time; ++ + if (!menu_item || + (GTK_IS_MENU_ITEM (menu_item) && + !_gtk_menu_item_is_selectable (menu_item))) diff --git a/packages/gtk+/gtk+-2.12.3/no-demos.patch b/packages/gtk+/gtk+-2.12.3/no-demos.patch new file mode 100644 index 0000000000..0fc4c48d1a --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/no-demos.patch @@ -0,0 +1,10 @@ +--- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100 ++++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100 +@@ -1,6 +1,6 @@ + ## Makefile.am for GTK+ + +-SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib ++SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib + SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros + + # require automake 1.4 diff --git a/packages/gtk+/gtk+-2.12.3/pangoxft2.10.6.diff b/packages/gtk+/gtk+-2.12.3/pangoxft2.10.6.diff new file mode 100644 index 0000000000..63828cec63 --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/pangoxft2.10.6.diff @@ -0,0 +1,2456 @@ +http://mail.gnome.org/archives/performance-list/2006-October/msg00063.html + +From: Xan LĂłpe +To: ext Matt Hoosier +Cc: performance-list gnome org +Subject: Re: [patch] Remove pangocairo from Gtk+ 2.8.20 +Date: Mon, 30 Oct 2006 14:31:56 +0200 +Hi, + +I've upgraded your patch against GTK+ 2.10.6, and we are getting great +performance figures compared to GTK+ 2.10.6 with pangocairo too +(basically at the level of GTK+ 2.6.10 again). Right now I'm working on +a python/cairo script to get some nice graphics from a torture test +session with several GTK+s, hope to get it ready soon. + +Index: gtk+-2.10.6/configure.in +=================================================================== +--- gtk+-2.10.6.orig/configure.in 2006-10-30 12:59:28.000000000 +0000 ++++ gtk+-2.10.6/configure.in 2006-10-30 12:59:30.000000000 +0000 +@@ -1435,7 +1435,7 @@ + if test "x$gdktarget" = "xwin32"; then + PANGO_PACKAGES="pangowin32 pangocairo" + else +- PANGO_PACKAGES="pango pangocairo" ++ PANGO_PACKAGES="pango pangocairo pangoxft" + fi + + AC_MSG_CHECKING(Pango flags) +Index: gtk+-2.10.6/gdk/gdkaliasdef.c +=================================================================== +--- gtk+-2.10.6.orig/gdk/gdkaliasdef.c 2006-10-30 12:58:29.000000000 +0000 ++++ gtk+-2.10.6/gdk/gdkaliasdef.c 2006-10-30 12:59:30.000000000 +0000 +@@ -1799,9 +1799,6 @@ + #undef gdk_pango_context_get + extern __typeof (gdk_pango_context_get) gdk_pango_context_get __attribute((alias("IA__gdk_pango_context_get"), visibility("default"))); + +-#undef gdk_pango_context_get_for_screen +-extern __typeof (gdk_pango_context_get_for_screen) gdk_pango_context_get_for_screen __attribute((alias("IA__gdk_pango_context_get_for_screen"), visibility("default"))); +- + #ifndef GDK_DISABLE_DEPRECATED + #undef gdk_pango_context_set_colormap + extern __typeof (gdk_pango_context_set_colormap) gdk_pango_context_set_colormap __attribute((alias("IA__gdk_pango_context_set_colormap"), visibility("default"))); +@@ -1836,6 +1833,13 @@ + + #endif + #endif ++#if IN_HEADER(__GDK_PANGO_H__) ++#if IN_FILE(__GDK_PANGO_X11_C__) ++#undef gdk_pango_context_get_for_screen ++extern __typeof (gdk_pango_context_get_for_screen) gdk_pango_context_get_for_screen __attribute((alias("IA__gdk_pango_context_get_for_screen"), visibility("default"))); ++ ++#endif ++#endif + #if IN_HEADER(__GDK_PIXBUF_H__) + #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__) + #undef gdk_pixbuf_get_from_drawable +Index: gtk+-2.10.6/gdk/gdkalias.h +=================================================================== +--- gtk+-2.10.6.orig/gdk/gdkalias.h 2006-10-30 12:58:29.000000000 +0000 ++++ gtk+-2.10.6/gdk/gdkalias.h 2006-10-30 12:59:30.000000000 +0000 +@@ -1796,9 +1796,6 @@ + extern __typeof (gdk_pango_context_get) IA__gdk_pango_context_get __attribute((visibility("hidden"))); + #define gdk_pango_context_get IA__gdk_pango_context_get + +-extern __typeof (gdk_pango_context_get_for_screen) IA__gdk_pango_context_get_for_screen __attribute((visibility("hidden"))); +-#define gdk_pango_context_get_for_screen IA__gdk_pango_context_get_for_screen +- + #ifndef GDK_DISABLE_DEPRECATED + extern __typeof (gdk_pango_context_set_colormap) IA__gdk_pango_context_set_colormap __attribute((visibility("hidden"))); + #define gdk_pango_context_set_colormap IA__gdk_pango_context_set_colormap +@@ -1833,6 +1830,13 @@ + + #endif + #endif ++#if IN_HEADER(__GDK_PANGO_H__) ++#if IN_FILE(__GDK_PANGO_X11_C__) ++extern __typeof (gdk_pango_context_get_for_screen) IA__gdk_pango_context_get_for_screen __attribute((visibility("hidden"))); ++#define gdk_pango_context_get_for_screen IA__gdk_pango_context_get_for_screen ++ ++#endif ++#endif + #if IN_HEADER(__GDK_PIXBUF_H__) + #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__) + extern __typeof (gdk_pixbuf_get_from_drawable) IA__gdk_pixbuf_get_from_drawable __attribute((visibility("hidden"))); +Index: gtk+-2.10.6/gdk/gdkdraw.c +=================================================================== +--- gtk+-2.10.6.orig/gdk/gdkdraw.c 2006-10-30 12:58:29.000000000 +0000 ++++ gtk+-2.10.6/gdk/gdkdraw.c 2006-10-30 12:59:30.000000000 +0000 +@@ -909,9 +909,9 @@ + { + g_return_if_fail (GDK_IS_DRAWABLE (drawable)); + g_return_if_fail (GDK_IS_GC (gc)); +- +- real_draw_glyphs (drawable, gc, NULL, font, +- x, y, glyphs); ++ ++ ++ GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs (drawable, gc, font, x, y, glyphs); + } + + /** +@@ -949,8 +949,9 @@ + g_return_if_fail (GDK_IS_DRAWABLE (drawable)); + g_return_if_fail (GDK_IS_GC (gc)); + +- real_draw_glyphs (drawable, gc, matrix, font, +- x / PANGO_SCALE, y / PANGO_SCALE, glyphs); ++ if (GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs_transformed) ++ GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs_transformed (drawable, gc, matrix, ++ font, x, y, glyphs); + } + + /** +@@ -974,28 +975,12 @@ + GdkTrapezoid *trapezoids, + gint n_trapezoids) + { +- cairo_t *cr; +- int i; +- + g_return_if_fail (GDK_IS_DRAWABLE (drawable)); + g_return_if_fail (GDK_IS_GC (gc)); + g_return_if_fail (n_trapezoids == 0 || trapezoids != NULL); + +- cr = gdk_cairo_create (drawable); +- _gdk_gc_update_context (gc, cr, NULL, NULL, TRUE); +- +- for (i = 0; i < n_trapezoids; i++) +- { +- cairo_move_to (cr, trapezoids[i].x11, trapezoids[i].y1); +- cairo_line_to (cr, trapezoids[i].x21, trapezoids[i].y1); +- cairo_line_to (cr, trapezoids[i].x22, trapezoids[i].y2); +- cairo_line_to (cr, trapezoids[i].x21, trapezoids[i].y2); +- cairo_close_path (cr); +- } +- +- cairo_fill (cr); +- +- cairo_destroy (cr); ++ GDK_DRAWABLE_GET_CLASS (drawable)->draw_trapezoids (drawable, gc, ++ trapezoids, n_trapezoids); + } + + /** +Index: gtk+-2.10.6/gdk/gdkpango.c +=================================================================== +--- gtk+-2.10.6.orig/gdk/gdkpango.c 2006-10-30 12:58:29.000000000 +0000 ++++ gtk+-2.10.6/gdk/gdkpango.c 2006-10-30 12:59:30.000000000 +0000 +@@ -50,19 +50,34 @@ + GdkBitmap *stipple[MAX_RENDER_PART + 1]; + gboolean embossed; + +- cairo_t *cr; +- PangoRenderPart last_part; ++ /* When switching between the normal and shadow copies when ++ * drawing shadows we can get unexpected recursion into the ++ * drawing functions; the 'in_emboss' flag guards against that. ++ */ ++ gboolean in_emboss; + + /* Current target */ + GdkDrawable *drawable; + GdkGC *base_gc; + + gboolean gc_changed; ++ ++ /* Cached GC, derived from base_gc */ ++ GdkGC *gc; ++ PangoColor gc_color; ++ gboolean gc_color_set; ++ GdkBitmap *gc_stipple; ++ ++ /* we accumulate trapezoids for the same PangoRenderPart */ ++ GArray *trapezoids; ++ PangoRenderPart trapezoid_part; + }; + + static PangoAttrType gdk_pango_attr_stipple_type; + static PangoAttrType gdk_pango_attr_embossed_type; + ++static void flush_trapezoids (GdkPangoRenderer *gdk_renderer); ++ + enum { + PROP_0, + PROP_SCREEN +@@ -77,6 +92,10 @@ + GdkPangoRendererPrivate *priv = gdk_renderer->priv; + int i; + ++ if (priv->gc) ++ g_object_unref (priv->gc); ++ if (priv->gc_stipple) ++ g_object_unref (priv->gc_stipple); + if (priv->base_gc) + g_object_unref (priv->base_gc); + if (priv->drawable) +@@ -86,6 +105,8 @@ + if (priv->stipple[i]) + g_object_unref (priv->stipple[i]); + ++ g_array_free (priv->trapezoids, TRUE); ++ + G_OBJECT_CLASS (gdk_pango_renderer_parent_class)->finalize (object); + } + +@@ -112,25 +133,6 @@ + return object; + } + +-/* Adjusts matrix and color for the renderer to draw the secondary +- * "shadow" copy for embossed text */ +-static void +-emboss_context (cairo_t *cr) +-{ +- cairo_matrix_t tmp_matrix; +- +- /* The gymnastics here to adjust the matrix are because we want +- * to offset by +1,+1 in device-space, not in user-space, +- * so we can't just draw the layout at x + 1, y + 1 +- */ +- cairo_get_matrix (cr, &tmp_matrix); +- tmp_matrix.x0 += 1.0; +- tmp_matrix.y0 += 1.0; +- cairo_set_matrix (cr, &tmp_matrix); +- +- cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); +-} +- + static inline gboolean + color_equal (PangoColor *c1, PangoColor *c2) + { +@@ -146,74 +148,154 @@ + return FALSE; + } + +-static cairo_t * +-get_cairo_context (GdkPangoRenderer *gdk_renderer, +- PangoRenderPart part) ++/* Adjusts matrix and color for the renderer to draw the secondar ++ * "shadow" copy for embossed text */ ++static void ++emboss_renderer (PangoRenderer *renderer, ++ PangoRenderPart part, ++ PangoMatrix **save_matrix, ++ PangoColor **save_color) ++{ ++ GdkPangoRendererPrivate *priv = GDK_PANGO_RENDERER(renderer)->priv; ++ static const PangoColor white = { 0xffff, 0xffff, 0xffff }; ++ PangoMatrix tmp_matrix = PANGO_MATRIX_INIT; ++ ++ priv->in_emboss = TRUE; ++ ++ *save_color = pango_renderer_get_color (renderer, part); ++ if (*save_color) ++ *save_color = pango_color_copy (*save_color); ++ ++ *save_matrix = renderer->matrix; ++ if (*save_matrix) ++ { ++ *save_matrix = pango_matrix_copy (*save_matrix); ++ tmp_matrix = **save_matrix; ++ } ++ ++ /* The gymnastics here to adjust the matrix are because we want ++ * to offset by +1,+1 in device-space, not in user-space, ++ * so we can't just draw the layout at x + 1, y + 1 ++ */ ++ tmp_matrix.x0 += 1; ++ tmp_matrix.y0 += 1; ++ ++ pango_renderer_set_matrix (renderer, &tmp_matrix); ++ pango_renderer_set_color (renderer, part, &white); ++} ++ ++/* Restores from emboss_renderer() */ ++static void ++unemboss_renderer (PangoRenderer *renderer, ++ PangoRenderPart part, ++ PangoMatrix **save_matrix, ++ PangoColor **save_color) ++{ ++ GdkPangoRendererPrivate *priv = GDK_PANGO_RENDERER(renderer)->priv; ++ pango_renderer_set_matrix (renderer, *save_matrix); ++ pango_renderer_set_color (renderer, part, *save_color); ++ ++ if (*save_matrix) ++ pango_matrix_free (*save_matrix); ++ if (*save_color) ++ pango_color_free (*save_color); ++ ++ priv->in_emboss = FALSE; ++} ++ ++/* Gets the GC for drawing @part. This make involve copying the base GC ++ * for the renderer, in which case we keep a one-GC cache. */ ++static GdkGC * ++get_gc (GdkPangoRenderer *gdk_renderer, ++ PangoRenderPart part) + { + PangoRenderer *renderer = PANGO_RENDERER (gdk_renderer); ++ PangoColor *color; ++ GdkBitmap *stipple; + GdkPangoRendererPrivate *priv = gdk_renderer->priv; + +- if (!priv->cr) ++ color = pango_renderer_get_color (renderer, part); ++ ++ if (part <= MAX_RENDER_PART) ++ stipple = priv->stipple[part]; ++ else ++ stipple = NULL; ++ ++ if (!color && !stipple) /* nothing override, use base_gc */ ++ return priv->base_gc; ++ else + { +- const PangoMatrix *matrix; ++ gboolean new_stipple = FALSE; ++ gboolean new_color = FALSE; + +- priv->cr = gdk_cairo_create (priv->drawable); ++ if (stipple != priv->gc_stipple) ++ new_stipple = TRUE; + +- matrix = pango_renderer_get_matrix (renderer); +- if (matrix) ++ if ((priv->gc_color_set && !color) || ++ (!priv->gc_color_set && color) || ++ priv->gc_color.red != color->red || ++ priv->gc_color.green != color->green || ++ priv->gc_color.blue != color->blue) ++ new_color = TRUE; ++ ++ if (!priv->gc) + { +- cairo_matrix_t cairo_matrix; +- +- cairo_matrix_init (&cairo_matrix, +- matrix->xx, matrix->yx, +- matrix->xy, matrix->yy, +- matrix->x0, matrix->y0); +- cairo_set_matrix (priv->cr, &cairo_matrix); ++ priv->gc = gdk_gc_new (priv->drawable); ++ gdk_gc_copy (priv->gc, priv->base_gc); ++ } ++ else if (new_color && priv->gc_color_set && !color) ++ { ++ /* We have to recopy the original GC onto the cached GC ++ * to get the default color */ ++ new_stipple = TRUE; ++ gdk_gc_copy (priv->gc, priv->base_gc); ++ } ++ else if (new_stipple && priv->gc_stipple && !stipple) ++ { ++ /* Similarly, we need to make a new copy to restore to the ++ * default stipple state (the caller may have set a stipple ++ * on the GC, and even if not, gdk_gc_set_stipple (gc, NULL) ++ * doesn't work currently to restore to the default X stipple) */ ++ new_color = TRUE; ++ gdk_gc_copy (priv->gc, priv->base_gc); + } +- } +- +- if (part != priv->last_part) +- { +- PangoColor *pango_color; +- GdkColor *color; +- GdkColor tmp_color; +- gboolean changed; + +- pango_color = pango_renderer_get_color (renderer, part); +- +- if (priv->last_part != -1) +- changed = priv->gc_changed || +- priv->stipple[priv->last_part] != priv->stipple[part] || +- !color_equal (pango_color, +- pango_renderer_get_color (renderer, priv->last_part)); +- else +- changed = TRUE; +- +- if (changed) ++ if (new_color) + { +- if (pango_color) ++ if (color) + { +- tmp_color.red = pango_color->red; +- tmp_color.green = pango_color->green; +- tmp_color.blue = pango_color->blue; ++ GdkColor gdk_color; ++ ++ gdk_color.red = color->red; ++ gdk_color.green = color->green; ++ gdk_color.blue = color->blue; + +- color = &tmp_color; ++ gdk_gc_set_rgb_fg_color (priv->gc, &gdk_color); ++ ++ priv->gc_color = *color; ++ priv->gc_color_set = TRUE; + } + else +- color = NULL; ++ priv->gc_color_set = FALSE; ++ } + +- _gdk_gc_update_context (priv->base_gc, +- priv->cr, +- color, +- priv->stipple[part], +- priv->gc_changed); ++ if (new_stipple) ++ { ++ if (priv->gc_stipple) ++ g_object_unref (priv->gc_stipple); ++ ++ if (stipple) ++ { ++ gdk_gc_set_stipple (priv->gc, stipple); ++ gdk_gc_set_fill (priv->gc, GDK_STIPPLED); ++ priv->gc_stipple = g_object_ref (stipple); ++ } ++ else ++ priv->gc_stipple = NULL; + } + +- priv->last_part = part; +- priv->gc_changed = FALSE; ++ return priv->gc; + } +- +- return priv->cr; + } + + static void +@@ -225,133 +307,78 @@ + { + GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer); + GdkPangoRendererPrivate *priv = gdk_renderer->priv; +- cairo_t *cr; + +- cr = get_cairo_context (gdk_renderer, +- PANGO_RENDER_PART_FOREGROUND); ++ flush_trapezoids (gdk_renderer); + +- if (priv->embossed) ++ if (!priv->in_emboss && priv->embossed) + { +- cairo_save (cr); +- emboss_context (cr); +- cairo_move_to (cr, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE); +- pango_cairo_show_glyph_string (cr, font, glyphs); +- cairo_restore (cr); +- } +- +- cairo_move_to (cr, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE); +- pango_cairo_show_glyph_string (cr, font, glyphs); +-} +- +-/* Draws an error underline that looks like one of: +- * H E H +- * /\ /\ /\ /\ /\ - +- * A/ \ / \ / \ A/ \ / \ | +- * \ \ / \ / /D \ \ / \ | +- * \ \/ C \/ / \ \/ C \ | height = HEIGHT_SQUARES * square +- * \ /\ F / \ F /\ \ | +- * \ / \ / \ / \ \G | +- * \ / \ / \ / \ / | +- * \/ \/ \/ \/ - +- * B B +- * |----| +- * unit_width = (HEIGHT_SQUARES - 1) * square +- * +- * The x, y, width, height passed in give the desired bounding box; +- * x/width are adjusted to make the underline a integer number of units +- * wide. +- */ +-#define HEIGHT_SQUARES 2.5 ++ PangoMatrix *save_matrix; ++ PangoColor *save_color; + +-/* Cut-and-pasted between here and pango/pango/pangocairo-render.c */ ++ emboss_renderer (renderer, PANGO_RENDER_PART_FOREGROUND, &save_matrix, &save_color); ++ gdk_draw_glyphs_transformed (priv->drawable, ++ get_gc (gdk_renderer, PANGO_RENDER_PART_FOREGROUND), ++ renderer->matrix, font, x, y, glyphs); ++ unemboss_renderer (renderer, PANGO_RENDER_PART_FOREGROUND, &save_matrix, &save_color); ++ } ++ ++ gdk_draw_glyphs_transformed (priv->drawable, ++ get_gc (gdk_renderer, PANGO_RENDER_PART_FOREGROUND), ++ renderer->matrix, font, x, y, glyphs); ++} ++ ++/* Outputs any pending trapezoids, we do this when the part or ++ * part color changes, when we are about to draw text, etc. */ + static void +-draw_error_underline (cairo_t *cr, +- double x, +- double y, +- double width, +- double height) +-{ +- double square = height / HEIGHT_SQUARES; +- double unit_width = (HEIGHT_SQUARES - 1) * square; +- int width_units = (width + unit_width / 2) / unit_width; +- double y_top, y_bottom; +- int i; ++flush_trapezoids (GdkPangoRenderer *gdk_renderer) ++{ ++ GdkPangoRendererPrivate *priv = gdk_renderer->priv; + +- x += (width - width_units * unit_width) / 2; +- width = width_units * unit_width; ++ if (!priv->trapezoids || priv->trapezoids->len == 0) ++ return; + +- y_top = y; +- y_bottom = y + height; +- +- /* Bottom of squiggle */ +- cairo_move_to (cr, x - square / 2, y_top + square / 2); /* A */ +- for (i = 0; i < width_units; i += 2) +- { +- double x_middle = x + (i + 1) * unit_width; +- double x_right = x + (i + 2) * unit_width; +- +- cairo_line_to (cr, x_middle, y_bottom); /* B */ +- +- if (i + 1 == width_units) +- /* Nothing */; +- else if (i + 2 == width_units) +- cairo_line_to (cr, x_right + square / 2, y_top + square / 2); /* D */ +- else +- cairo_line_to (cr, x_right, y_top + square); /* C */ +- } +- +- /* Top of squiggle */ +- for (i -= 2; i >= 0; i -= 2) +- { +- double x_left = x + i * unit_width; +- double x_middle = x + (i + 1) * unit_width; +- double x_right = x + (i + 2) * unit_width; +- +- if (i + 1 == width_units) +- cairo_line_to (cr, x_middle + square / 2, y_bottom - square / 2); /* G */ +- else { +- if (i + 2 == width_units) +- cairo_line_to (cr, x_right, y_top); /* E */ +- cairo_line_to (cr, x_middle, y_bottom - square); /* F */ +- } +- +- cairo_line_to (cr, x_left, y_top); /* H */ +- } ++ gdk_draw_trapezoids (priv->drawable, ++ get_gc (gdk_renderer, priv->trapezoid_part), ++ (GdkTrapezoid *)priv->trapezoids->data, ++ priv->trapezoids->len); + +- cairo_close_path (cr); +- cairo_fill (cr); ++ g_array_set_size (priv->trapezoids, 0); + } + ++/* Draws a single trapezoid ... we don't draw it immediately, but rather ++ * cache it to join together with other trapezoids that form part of the ++ * same logical shape */ + static void +-gdk_pango_renderer_draw_rectangle (PangoRenderer *renderer, +- PangoRenderPart part, +- int x, +- int y, +- int width, +- int height) ++gdk_pango_renderer_draw_trapezoid (PangoRenderer *renderer, ++ PangoRenderPart part, ++ double y1, ++ double x11, ++ double x21, ++ double y2, ++ double x12, ++ double x22) + { + GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer); +- GdkPangoRendererPrivate *priv = gdk_renderer->priv; +- cairo_t *cr; +- +- cr = get_cairo_context (gdk_renderer, part); +- +- if (priv->embossed && part != PANGO_RENDER_PART_BACKGROUND) +- { +- cairo_save (cr); +- emboss_context (cr); +- cairo_rectangle (cr, +- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE, +- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE); ++ GdkTrapezoid trap; + +- cairo_fill (cr); +- cairo_restore (cr); +- } ++ if (!gdk_renderer->priv->trapezoids) ++ gdk_renderer->priv->trapezoids = g_array_new (FALSE, FALSE, ++ sizeof (GdkTrapezoid)); ++ ++ if (gdk_renderer->priv->trapezoids->len > 0 && ++ gdk_renderer->priv->trapezoid_part != part) ++ flush_trapezoids (gdk_renderer); ++ ++ gdk_renderer->priv->trapezoid_part = part; ++ ++ trap.y1 = y1; ++ trap.x11 = x11 / 2; ++ trap.x21 = x21; ++ trap.y2 = y2; ++ trap.x12 = x12; ++ trap.x22 = x22; + +- cairo_rectangle (cr, +- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE, +- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE); +- cairo_fill (cr); ++ g_array_append_val (gdk_renderer->priv->trapezoids, trap); + } + + static void +@@ -363,23 +390,51 @@ + { + GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer); + GdkPangoRendererPrivate *priv = gdk_renderer->priv; +- cairo_t *cr; +- +- cr = get_cairo_context (gdk_renderer, PANGO_RENDER_PART_UNDERLINE); +- +- if (priv->embossed) ++ ++ if (!priv->in_emboss && priv->embossed) + { +- cairo_save (cr); +- emboss_context (cr); +- draw_error_underline (cr, +- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE, +- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE); +- cairo_restore (cr); ++ PangoMatrix *save_matrix; ++ PangoColor *save_color; ++ ++ emboss_renderer (renderer, PANGO_RENDER_PART_UNDERLINE, &save_matrix, &save_color); ++ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_error_underline (renderer, ++ x, y, width, height); ++ unemboss_renderer (renderer, PANGO_RENDER_PART_UNDERLINE, &save_matrix, &save_color); + } + +- draw_error_underline (cr, +- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE, +- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE); ++ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_error_underline (renderer, ++ x, y, width, height); ++} ++ ++/* We can't handle embossing at the level of trapezoids, because when an ++ * underline is split into multiple trapezoids, the normal and shadow ++ * trapezoids will be drawn mixed together. Instead, we have to emboss ++ * and entire rectangle or error underline ++ */ ++static void ++gdk_pango_renderer_draw_rectangle (PangoRenderer *renderer, ++ PangoRenderPart part, ++ int x, ++ int y, ++ int width, ++ int height) ++{ ++ GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer); ++ GdkPangoRendererPrivate *priv = gdk_renderer->priv; ++ ++ if (!priv->in_emboss && priv->embossed && part != PANGO_RENDER_PART_BACKGROUND) ++ { ++ PangoMatrix *save_matrix; ++ PangoColor *save_color; ++ ++ emboss_renderer (renderer, part, &save_matrix, &save_color); ++ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_rectangle (renderer, part, ++ x, y, width, height); ++ unemboss_renderer (renderer, part, &save_matrix, &save_color); ++ } ++ ++ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_rectangle (renderer, part, ++ x, y, width, height); + } + + static void +@@ -388,8 +443,8 @@ + { + GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer); + +- if (gdk_renderer->priv->last_part == part) +- gdk_renderer->priv->last_part = (PangoRenderPart)-1; ++ if (part == gdk_renderer->priv->trapezoid_part) ++ flush_trapezoids (gdk_renderer); + } + + static void +@@ -410,13 +465,8 @@ + { + GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer); + GdkPangoRendererPrivate *priv = gdk_renderer->priv; +- +- if (priv->cr) +- { +- cairo_destroy (priv->cr); +- priv->cr = NULL; +- } +- priv->last_part = (PangoRenderPart)-1; ++ ++ flush_trapezoids (gdk_renderer); + } + + static void +@@ -515,7 +565,6 @@ + GDK_TYPE_PANGO_RENDERER, + GdkPangoRendererPrivate); + +- renderer->priv->last_part = (PangoRenderPart)-1; + renderer->priv->gc_changed = TRUE; + } + +@@ -527,6 +576,7 @@ + PangoRendererClass *renderer_class = PANGO_RENDERER_CLASS (klass); + + renderer_class->draw_glyphs = gdk_pango_renderer_draw_glyphs; ++ renderer_class->draw_trapezoid = gdk_pango_renderer_draw_trapezoid; + renderer_class->draw_rectangle = gdk_pango_renderer_draw_rectangle; + renderer_class->draw_error_underline = gdk_pango_renderer_draw_error_underline; + renderer_class->part_changed = gdk_pango_renderer_part_changed; +@@ -647,6 +697,8 @@ + + priv = gdk_renderer->priv; + ++ flush_trapezoids (gdk_renderer); ++ + if (priv->drawable != drawable) + { + if (priv->drawable) +@@ -681,6 +733,8 @@ + + priv = gdk_renderer->priv; + ++ flush_trapezoids (gdk_renderer); ++ + if (priv->base_gc != gc) + { + if (priv->base_gc) +@@ -689,6 +743,20 @@ + if (priv->base_gc) + g_object_ref (priv->base_gc); + ++ if (priv->gc) ++ { ++ g_object_unref (priv->gc); ++ priv->gc = NULL; ++ } ++ ++ priv->gc_color_set = FALSE; ++ ++ if (priv->gc_stipple) ++ { ++ g_object_unref (priv->gc_stipple); ++ priv->gc_stipple = NULL; ++ } ++ + priv->gc_changed = TRUE; + } + } +@@ -1414,50 +1482,5 @@ + return gdk_pango_context_get_for_screen (gdk_screen_get_default ()); + } + +-/** +- * gdk_pango_context_get_for_screen: +- * @screen: the #GdkScreen for which the context is to be created. +- * +- * Creates a #PangoContext for @screen. +- * +- * The context must be freed when you're finished with it. +- * +- * When using GTK+, normally you should use gtk_widget_get_pango_context() +- * instead of this function, to get the appropriate context for +- * the widget you intend to render text onto. +- * +- * The newly created context will have the default font options +- * (see #cairo_font_options_t) for the screen; if these options +- * change it will not be updated. Using gtk_widget_get_pango_context() +- * is more convenient if you want to keep a context around and track +- * changes to the screen's font rendering settings. +- * +- * Return value: a new #PangoContext for @screen +- * +- * Since: 2.2 +- **/ +-PangoContext * +-gdk_pango_context_get_for_screen (GdkScreen *screen) +-{ +- PangoFontMap *fontmap; +- PangoContext *context; +- const cairo_font_options_t *options; +- double dpi; +- +- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); +- +- fontmap = pango_cairo_font_map_get_default (); +- +- context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap)); +- +- options = gdk_screen_get_font_options (screen); +- pango_cairo_context_set_font_options (context, options); +- +- dpi = gdk_screen_get_resolution (screen); +- pango_cairo_context_set_resolution (context, dpi); +- +- return context; +-} +- + #define __GDK_PANGO_C__ + #include "gdkaliasdef.c" +Index: gtk+-2.10.6/gdk/gdk.symbols +=================================================================== +--- gtk+-2.10.6.orig/gdk/gdk.symbols 2006-10-30 12:58:29.000000000 +0000 ++++ gtk+-2.10.6/gdk/gdk.symbols 2006-10-30 12:59:30.000000000 +0000 +@@ -861,7 +861,6 @@ + gdk_pango_attr_embossed_new + gdk_pango_attr_stipple_new + gdk_pango_context_get +-gdk_pango_context_get_for_screen + #ifndef GDK_DISABLE_DEPRECATED + gdk_pango_context_set_colormap + #endif +@@ -877,6 +876,12 @@ + #endif + #endif + ++#if IN_HEADER(__GDK_PANGO_H__) ++#if IN_FILE(__GDK_PANGO_X11_C__) ++gdk_pango_context_get_for_screen ++#endif ++#endif ++ + #if IN_HEADER(__GDK_PIXBUF_H__) + #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__) + gdk_pixbuf_get_from_drawable +Index: gtk+-2.10.6/gdk/gdkwindow.c +=================================================================== +--- gtk+-2.10.6.orig/gdk/gdkwindow.c 2006-10-30 12:58:29.000000000 +0000 ++++ gtk+-2.10.6/gdk/gdkwindow.c 2006-10-30 12:59:30.000000000 +0000 +@@ -1834,9 +1834,14 @@ + } + else + { +- method->cr = cairo_create (paint->surface); ++ /*method->cr = cairo_create (paint->surface); + +- gdk_cairo_set_source_color (method->cr, &private->bg_color); ++ gdk_cairo_set_source_color (method->cr, &private->bg_color);*/ ++ GdkGC *gc = _gdk_drawable_get_scratch_gc (paint->pixmap, FALSE); ++ ++ gdk_gc_set_foreground (gc, &(private->bg_color)); ++ ++ method->gc = g_object_ref (gc); + } + } + +Index: gtk+-2.10.6/gdk/x11/gdkdisplay-x11.c +=================================================================== +--- gtk+-2.10.6.orig/gdk/x11/gdkdisplay-x11.c 2006-10-30 12:58:29.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/gdkdisplay-x11.c 2006-10-30 12:59:30.000000000 +0000 +@@ -190,7 +190,8 @@ + display_x11->leader_window_title_set = FALSE; + + display_x11->have_render = GDK_UNKNOWN; +- ++ display_x11->have_render_with_trapezoids = GDK_UNKNOWN; ++ + #ifdef HAVE_XFIXES + if (XFixesQueryExtension (display_x11->xdisplay, + &display_x11->xfixes_event_base, +Index: gtk+-2.10.6/gdk/x11/gdkdisplay-x11.h +=================================================================== +--- gtk+-2.10.6.orig/gdk/x11/gdkdisplay-x11.h 2006-10-30 12:58:29.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/gdkdisplay-x11.h 2006-10-30 12:59:30.000000000 +0000 +@@ -78,6 +78,7 @@ + gboolean use_xshm; + gboolean have_shm_pixmaps; + GdkTristate have_render; ++ GdkTristate have_render_with_trapezoids; + gboolean have_xfixes; + gint xfixes_event_base; + +Index: gtk+-2.10.6/gdk/x11/gdkdrawable-x11.c +=================================================================== +--- gtk+-2.10.6.orig/gdk/x11/gdkdrawable-x11.c 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/gdkdrawable-x11.c 2006-10-30 12:59:30.000000000 +0000 +@@ -26,6 +26,8 @@ + + #include + ++#include ++ + #include "gdkx.h" + #include "gdkregion-generic.h" + +@@ -106,7 +108,21 @@ + GdkGC *gc, + GdkPoint *points, + gint npoints); +- ++ ++static void gdk_x11_draw_glyphs (GdkDrawable *drawable, ++ GdkGC *gc, ++ PangoFont *font, ++ gint x, ++ gint y, ++ PangoGlyphString *glyphs); ++static void gdk_x11_draw_glyphs_transformed (GdkDrawable *drawable, ++ GdkGC *gc, ++ PangoMatrix *matrix, ++ PangoFont *font, ++ gint x, ++ gint y, ++ PangoGlyphString *glyphs); ++ + static void gdk_x11_draw_image (GdkDrawable *drawable, + GdkGC *gc, + GdkImage *image, +@@ -129,6 +145,11 @@ + gint x_dither, + gint y_dither); + ++static void gdk_x11_draw_trapezoids (GdkDrawable *drawable, ++ GdkGC *gc, ++ GdkTrapezoid *trapezoids, ++ gint n_trapezoids); ++ + static cairo_surface_t *gdk_x11_ref_cairo_surface (GdkDrawable *drawable); + + static void gdk_x11_set_colormap (GdkDrawable *drawable, +@@ -163,8 +184,11 @@ + drawable_class->draw_points = gdk_x11_draw_points; + drawable_class->draw_segments = gdk_x11_draw_segments; + drawable_class->draw_lines = gdk_x11_draw_lines; ++ drawable_class->draw_glyphs = gdk_x11_draw_glyphs; ++ drawable_class->draw_glyphs_transformed = gdk_x11_draw_glyphs_transformed; + drawable_class->draw_image = gdk_x11_draw_image; + drawable_class->draw_pixbuf = gdk_x11_draw_pixbuf; ++ drawable_class->draw_trapezoids = gdk_x11_draw_trapezoids; + + drawable_class->ref_cairo_surface = gdk_x11_ref_cairo_surface; + +@@ -327,6 +351,72 @@ + return x11display->have_render == GDK_YES; + } + ++gboolean ++_gdk_x11_have_render_with_trapezoids (GdkDisplay *display) ++{ ++ Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); ++ GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display); ++ ++ if (x11display->have_render_with_trapezoids == GDK_UNKNOWN) ++ { ++ x11display->have_render_with_trapezoids = GDK_NO; ++ if (_gdk_x11_have_render (display)) ++ { ++ /* ++ * Require protocol >= 0.4 for CompositeTrapezoids support. ++ */ ++ int major_version, minor_version; ++ ++#define XRENDER_TETRAPEZOIDS_MAJOR 0 ++#define XRENDER_TETRAPEZOIDS_MINOR 4 ++ ++ if (XRenderQueryVersion (xdisplay, &major_version, ++ &minor_version)) ++ if ((major_version == XRENDER_TETRAPEZOIDS_MAJOR) && ++ (minor_version >= XRENDER_TETRAPEZOIDS_MINOR)) ++ x11display->have_render_with_trapezoids = GDK_YES; ++ } ++ } ++ ++ return x11display->have_render_with_trapezoids == GDK_YES; ++} ++ ++static XftDraw * ++gdk_x11_drawable_get_xft_draw (GdkDrawable *drawable) ++{ ++ GdkDrawableImplX11 *impl = GDK_DRAWABLE_IMPL_X11 (drawable); ++ ++ if (impl->xft_draw == NULL) ++ { ++ GdkColormap *colormap = gdk_drawable_get_colormap (drawable); ++ ++ if (colormap) ++ { ++ GdkVisual *visual; ++ ++ visual = gdk_colormap_get_visual (colormap); ++ ++ impl->xft_draw = XftDrawCreate (GDK_SCREEN_XDISPLAY (impl->screen), impl->xid, ++ GDK_VISUAL_XVISUAL (visual), GDK_COLORMAP_XCOLORMAP (colormap)); ++ } ++ else if (gdk_drawable_get_depth (drawable) == 1) ++ { ++ impl->xft_draw = XftDrawCreateBitmap (GDK_SCREEN_XDISPLAY (impl->screen), impl->xid); ++ } ++ else ++ { ++ g_warning ("Using Xft rendering requires the drawable argument to\n" ++ "have a specified colormap. All windows have a colormap,\n" ++ "however, pixmaps only have colormap by default if they\n" ++ "were created with a non-NULL window argument. Otherwise\n" ++ "a colormap must be set on them with gdk_drawable_set_colormap"); ++ return NULL; ++ } ++ } ++ ++ return impl->xft_draw; ++} ++ + static Picture + gdk_x11_drawable_get_picture (GdkDrawable *drawable) + { +@@ -393,6 +483,57 @@ + } + } + ++static void ++gdk_x11_drawable_update_xft_clip (GdkDrawable *drawable, ++ GdkGC *gc) ++{ ++ XftDraw *xft_draw = gdk_x11_drawable_get_xft_draw (drawable); ++ GdkRegion *clip_region = _gdk_gc_get_clip_region (gc); ++ ++ if (gc && clip_region) ++ { ++ GdkRegionBox *boxes = clip_region->rects; ++ gint n_boxes = clip_region->numRects; ++#if 0 /* Until XftDrawSetClipRectangles is there */ ++ XRectangle *rects = g_new (XRectangle, n_boxes); ++ int i; ++ ++ for (i=0; i < n_boxes; i++) ++ { ++ rects[i].x = CLAMP (boxes[i].x1 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT); ++ rects[i].y = CLAMP (boxes[i].y1 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT); ++ rects[i].width = CLAMP (boxes[i].x2 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT) - rects[i].x; ++ rects[i].height = CLAMP (boxes[i].y2 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT) - rects[i].y; ++ } ++ XftDrawSetClipRectangles (xft_draw, 0, 0, rects, n_boxes); ++ ++ g_free (rects); ++#else ++ Region xregion = XCreateRegion (); ++ int i; ++ ++ for (i=0; i < n_boxes; i++) ++ { ++ XRectangle rect; ++ ++ rect.x = CLAMP (boxes[i].x1 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT); ++ rect.y = CLAMP (boxes[i].y1 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT); ++ rect.width = CLAMP (boxes[i].x2 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT) - rect.x; ++ rect.height = CLAMP (boxes[i].y2 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT) - rect.y; ++ ++ XUnionRectWithRegion (&rect, xregion, xregion); ++ } ++ ++ XftDrawSetClip (xft_draw, xregion); ++ XDestroyRegion (xregion); ++#endif ++ } ++ else ++ { ++ XftDrawSetClip (xft_draw, NULL); ++ } ++} ++ + /***************************************************** + * X11 specific implementations of generic functions * + *****************************************************/ +@@ -780,6 +921,45 @@ + } + + static void ++gdk_x11_draw_glyphs (GdkDrawable *drawable, ++ GdkGC *gc, ++ PangoFont *font, ++ gint x, ++ gint y, ++ PangoGlyphString *glyphs) ++{ ++ gdk_x11_draw_glyphs_transformed (drawable, gc, NULL, ++ font, ++ x * PANGO_SCALE, ++ y * PANGO_SCALE, ++ glyphs); ++} ++ ++static void ++gdk_x11_draw_glyphs_transformed (GdkDrawable *drawable, ++ GdkGC *gc, ++ PangoMatrix *matrix, ++ PangoFont *font, ++ gint x, ++ gint y, ++ PangoGlyphString *glyphs) ++{ ++ GdkDrawableImplX11 *impl; ++ PangoRenderer *renderer; ++ ++ impl = GDK_DRAWABLE_IMPL_X11 (drawable); ++ ++ g_return_if_fail (PANGO_XFT_IS_FONT (font)); ++ ++ renderer = _gdk_x11_renderer_get (drawable, gc); ++ if (matrix) ++ pango_renderer_set_matrix (renderer, matrix); ++ pango_renderer_draw_glyphs (renderer, font, glyphs, x, y); ++ if (matrix) ++ pango_renderer_set_matrix (renderer, NULL); ++} ++ ++static void + gdk_x11_draw_image (GdkDrawable *drawable, + GdkGC *gc, + GdkImage *image, +@@ -1444,6 +1624,47 @@ + } + + static void ++gdk_x11_draw_trapezoids (GdkDrawable *drawable, ++ GdkGC *gc, ++ GdkTrapezoid *trapezoids, ++ gint n_trapezoids) ++{ ++ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen; ++ GdkDisplay *display = gdk_screen_get_display (screen); ++ XTrapezoid *xtrapezoids; ++ gint i; ++ ++ if (!_gdk_x11_have_render_with_trapezoids (display)) ++ { ++ GdkDrawable *wrapper = GDK_DRAWABLE_IMPL_X11 (drawable)->wrapper; ++ GDK_DRAWABLE_CLASS (_gdk_drawable_impl_x11_parent_class)->draw_trapezoids (wrapper, gc, ++ trapezoids, n_trapezoids); ++ return; ++ } ++ ++ xtrapezoids = g_new (XTrapezoid, n_trapezoids); ++ ++ for (i = 0; i < n_trapezoids; i++) ++ { ++ xtrapezoids[i].top = XDoubleToFixed (trapezoids[i].y1); ++ xtrapezoids[i].bottom = XDoubleToFixed (trapezoids[i].y2); ++ xtrapezoids[i].left.p1.x = XDoubleToFixed (trapezoids[i].x11); ++ xtrapezoids[i].left.p1.y = XDoubleToFixed (trapezoids[i].y1); ++ xtrapezoids[i].left.p2.x = XDoubleToFixed (trapezoids[i].x12); ++ xtrapezoids[i].left.p2.y = XDoubleToFixed (trapezoids[i].y2); ++ xtrapezoids[i].right.p1.x = XDoubleToFixed (trapezoids[i].x21); ++ xtrapezoids[i].right.p1.y = XDoubleToFixed (trapezoids[i].y1); ++ xtrapezoids[i].right.p2.x = XDoubleToFixed (trapezoids[i].x22); ++ xtrapezoids[i].right.p2.y = XDoubleToFixed (trapezoids[i].y2); ++ } ++ ++ _gdk_x11_drawable_draw_xtrapezoids (drawable, gc, ++ xtrapezoids, n_trapezoids); ++ ++ g_free (xtrapezoids); ++} ++ ++static void + gdk_x11_cairo_surface_destroy (void *data) + { + GdkDrawableImplX11 *impl = data; +@@ -1498,5 +1719,89 @@ + return impl->cairo_surface; + } + ++void ++_gdk_x11_drawable_draw_xtrapezoids (GdkDrawable *drawable, ++ GdkGC *gc, ++ XTrapezoid *xtrapezoids, ++ int n_trapezoids) ++{ ++ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen; ++ GdkDisplay *display = gdk_screen_get_display (screen); ++ GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display); ++ ++ XftDraw *draw; ++ ++ if (!_gdk_x11_have_render_with_trapezoids (display)) ++ { ++ /* This is the case of drawing the borders of the unknown glyph box ++ * without render on the display, we need to feed it back to ++ * fallback code. Not efficient, but doesn't matter. ++ */ ++ GdkTrapezoid *trapezoids = g_new (GdkTrapezoid, n_trapezoids); ++ int i; ++ ++ for (i = 0; i < n_trapezoids; i++) ++ { ++ trapezoids[i].y1 = XFixedToDouble (xtrapezoids[i].top); ++ trapezoids[i].y2 = XFixedToDouble (xtrapezoids[i].bottom); ++ trapezoids[i].x11 = XFixedToDouble (xtrapezoids[i].left.p1.x); ++ trapezoids[i].x12 = XFixedToDouble (xtrapezoids[i].left.p2.x); ++ trapezoids[i].x21 = XFixedToDouble (xtrapezoids[i].right.p1.x); ++ trapezoids[i].x22 = XFixedToDouble (xtrapezoids[i].right.p2.x); ++ } ++ ++ gdk_x11_draw_trapezoids (drawable, gc, trapezoids, n_trapezoids); ++ g_free (trapezoids); ++ ++ return; ++ } ++ ++ gdk_x11_drawable_update_xft_clip (drawable, gc); ++ draw = gdk_x11_drawable_get_xft_draw (drawable); ++ ++ if (!x11display->mask_format) ++ x11display->mask_format = XRenderFindStandardFormat (x11display->xdisplay, ++ PictStandardA8); ++ ++ XRenderCompositeTrapezoids (x11display->xdisplay, PictOpOver, ++ _gdk_x11_gc_get_fg_picture (gc), ++ XftDrawPicture (draw), ++ x11display->mask_format, ++ - gc->ts_x_origin, - gc->ts_y_origin, ++ xtrapezoids, n_trapezoids); ++} ++ ++void ++_gdk_x11_drawable_draw_xft_glyphs (GdkDrawable *drawable, ++ GdkGC *gc, ++ XftFont *xft_font, ++ XftGlyphSpec *glyphs, ++ gint n_glyphs) ++{ ++ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen; ++ GdkDisplay *display = gdk_screen_get_display (screen); ++ GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display); ++ XftDraw *draw; ++ ++ gdk_x11_drawable_update_xft_clip (drawable, gc); ++ draw = gdk_x11_drawable_get_xft_draw (drawable); ++ ++ if (_gdk_x11_have_render (display)) ++ { ++ XftGlyphSpecRender (x11display->xdisplay, PictOpOver, ++ _gdk_x11_gc_get_fg_picture (gc), ++ xft_font, ++ XftDrawPicture (draw), ++ - gc->ts_x_origin, - gc->ts_y_origin, ++ glyphs, n_glyphs); ++ } ++ else ++ { ++ XftColor color; ++ ++ _gdk_gc_x11_get_fg_xft_color (gc, &color); ++ XftDrawGlyphSpec (draw, &color, xft_font, glyphs, n_glyphs); ++ } ++} + #define __GDK_DRAWABLE_X11_C__ + #include "gdkaliasdef.c" +Index: gtk+-2.10.6/gdk/x11/gdkdrawable-x11.h +=================================================================== +--- gtk+-2.10.6.orig/gdk/x11/gdkdrawable-x11.h 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/gdkdrawable-x11.h 2006-10-30 12:59:30.000000000 +0000 +@@ -33,6 +33,7 @@ + + #include + #include ++#include + + G_BEGIN_DECLS + +@@ -68,6 +69,8 @@ + Window xid; + GdkScreen *screen; + ++ XftDraw *xft_draw; ++ + Picture picture; + cairo_surface_t *cairo_surface; + }; +@@ -92,7 +95,15 @@ + /* Note that the following take GdkDrawableImplX11, not the wrapper drawable */ + void _gdk_x11_drawable_finish (GdkDrawable *drawable); + void _gdk_x11_drawable_update_size (GdkDrawable *drawable); +- ++void _gdk_x11_drawable_draw_xtrapezoids (GdkDrawable *drawable, ++ GdkGC *gc, ++ XTrapezoid *xtrapezoids, ++ int n_trapezoids); ++void _gdk_x11_drawable_draw_xft_glyphs (GdkDrawable *drawable, ++ GdkGC *gc, ++ XftFont *xft_font, ++ XftGlyphSpec *glyphs, ++ gint n_glyphs); + G_END_DECLS + + #endif /* __GDK_DRAWABLE_X11_H__ */ +Index: gtk+-2.10.6/gdk/x11/gdkgc-x11.c +=================================================================== +--- gtk+-2.10.6.orig/gdk/x11/gdkgc-x11.c 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/gdkgc-x11.c 2006-10-30 12:59:30.000000000 +0000 +@@ -80,7 +80,10 @@ + gdk_gc_x11_finalize (GObject *object) + { + GdkGCX11 *x11_gc = GDK_GC_X11 (object); +- ++ ++ if (x11_gc->fg_picture != None) ++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), x11_gc->fg_picture); ++ + XFreeGC (GDK_GC_XDISPLAY (x11_gc), GDK_GC_XGC (x11_gc)); + + G_OBJECT_CLASS (_gdk_gc_x11_parent_class)->finalize (object); +@@ -110,7 +113,7 @@ + + private->dirty_mask = 0; + private->have_clip_mask = FALSE; +- ++ + private->screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen; + + private->depth = gdk_drawable_get_depth (drawable); +@@ -339,6 +342,18 @@ + } + + static void ++clear_fg_picture (GdkGC *gc) ++{ ++ GdkGCX11 *x11_gc = GDK_GC_X11 (gc); ++ ++ if (x11_gc->fg_picture != None) ++ { ++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), x11_gc->fg_picture); ++ x11_gc->fg_picture = None; ++ } ++} ++ ++static void + gdk_x11_gc_set_values (GdkGC *gc, + GdkGCValues *values, + GdkGCValuesMask values_mask) +@@ -367,6 +382,29 @@ + x11_gc->have_clip_mask = values->clip_mask != NULL; + } + ++ if (values_mask & GDK_GC_BACKGROUND) ++ { ++ if (_gdk_gc_get_fill (gc) == GDK_OPAQUE_STIPPLED) ++ clear_fg_picture (gc); ++ } ++ ++ if (values_mask & GDK_GC_FILL) ++ { ++ clear_fg_picture (gc); ++ } ++ ++ if (values_mask & GDK_GC_STIPPLE) ++ { ++ if (_gdk_gc_get_fill (gc) == GDK_STIPPLED || _gdk_gc_get_fill (gc) == GDK_OPAQUE_STIPPLED) ++ clear_fg_picture (gc); ++ } ++ ++ if (values_mask & GDK_GC_TILE) ++ { ++ if (_gdk_gc_get_fill (gc) == GDK_TILED) ++ clear_fg_picture (gc); ++ } ++ + gdk_x11_gc_values_to_xvalues (values, values_mask, &xvalues, &xvalues_mask); + + XChangeGC (GDK_GC_XDISPLAY (gc), +@@ -642,6 +680,8 @@ + x11_dst_gc->dirty_mask = x11_src_gc->dirty_mask; + x11_dst_gc->have_clip_region = x11_src_gc->have_clip_region; + x11_dst_gc->have_clip_mask = x11_src_gc->have_clip_mask; ++ ++ clear_fg_picture (dst_gc); + } + + /** +@@ -701,5 +741,359 @@ + return gc_x11->xgc; + } + ++/* Various bits of the below are roughly cribbed from XFree86 ++ * lib/Xft/xftdraw.c, Copyright 2000, Keith Packard ++ */ ++ ++static XRenderPictFormat * ++foreground_format (GdkGC *gc) ++{ ++ XRenderPictFormat pf; ++ ++ pf.type = PictTypeDirect; ++ pf.depth = 32; ++ pf.direct.redMask = 0xff; ++ pf.direct.greenMask = 0xff; ++ pf.direct.blueMask = 0xff; ++ pf.direct.alphaMask = 0xff; ++ ++ return XRenderFindFormat (GDK_GC_XDISPLAY (gc), ++ (PictFormatType | ++ PictFormatDepth | ++ PictFormatRedMask | ++ PictFormatGreenMask | ++ PictFormatBlueMask | ++ PictFormatAlphaMask), ++ &pf, ++ 0); ++} ++ ++static Picture ++make_fg_tile_picture (GdkGC *gc) ++{ ++ GdkGCX11 *x11_gc = GDK_GC_X11 (gc); ++ GdkVisual *visual = gdk_drawable_get_visual (_gdk_gc_get_tile (gc)); ++ XRenderPictFormat *format = NULL; ++ ++ if (visual) ++ { ++ format = XRenderFindVisualFormat (GDK_GC_XDISPLAY (gc), ++ GDK_VISUAL_XVISUAL (visual)); ++ } ++ else if (x11_gc->depth == 1) ++ { ++ format = XRenderFindStandardFormat (GDK_GC_XDISPLAY (gc), ++ PictStandardA1); ++ } ++ ++ if (format) ++ { ++ XRenderPictureAttributes pa; ++ pa.repeat = True; ++ ++ return XRenderCreatePicture (GDK_GC_XDISPLAY (gc), ++ GDK_PIXMAP_XID (_gdk_gc_get_tile (gc)), ++ format, ++ CPRepeat, &pa); ++ } ++ ++ return None; ++} ++ ++static Picture ++make_stipple_picture (GdkGC *gc) ++{ ++ XRenderPictFormat *format = NULL; ++ XRenderPictureAttributes pa; ++ ++ format = XRenderFindStandardFormat (GDK_GC_XDISPLAY (gc), ++ PictStandardA1); ++ ++ pa.repeat = True; ++ return XRenderCreatePicture (GDK_GC_XDISPLAY (gc), ++ GDK_PIXMAP_XID (_gdk_gc_get_stipple (gc)), ++ format, ++ CPRepeat, &pa); ++} ++ ++static Picture ++make_color_picture (GdkGC *gc, ++ XRenderColor *color) ++{ ++ GdkGCX11 *x11_gc = GDK_GC_X11 (gc); ++ XRenderPictureAttributes pa; ++ XRenderPictFormat *pix_format = foreground_format (gc); ++ Pixmap pix; ++ Picture picture; ++ ++ if (!pix_format) ++ return None; ++ ++ pix = XCreatePixmap (GDK_GC_XDISPLAY (gc), ++ GDK_SCREEN_XROOTWIN (x11_gc->screen), ++ 1, 1, pix_format->depth); ++ pa.repeat = True; ++ picture = XRenderCreatePicture (GDK_GC_XDISPLAY (gc), ++ pix, ++ pix_format, ++ CPRepeat, &pa); ++ XFreePixmap (GDK_GC_XDISPLAY (gc), pix); ++ ++ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc, ++ picture, color, ++ 0, 0, 1, 1); ++ ++ return picture; ++} ++ ++static void ++get_bg_color (GdkGC *gc, ++ XRenderColor *render_color) ++{ ++ GdkColormap *cmap; ++ ++ cmap = gdk_gc_get_colormap (gc); ++ ++ if (cmap) ++ { ++ GdkColor color; ++ ++ gdk_colormap_query_color (cmap, _gdk_gc_get_bg_pixel (gc), &color); ++ ++ render_color->alpha = 0xffff; ++ render_color->red = color.red; ++ render_color->green = color.green; ++ render_color->blue = color.blue; ++ } ++ else /* Not worth warning, just use black */ ++ { ++ render_color->alpha = 0xffff; ++ render_color->red = 0; ++ render_color->green = 0; ++ render_color->blue = 0; ++ } ++} ++ ++/** ++ * _gdk_x11_gc_get_fg_picture: ++ * @gc: a #GdkGC ++ * ++ * Gets a Xrender Picture object suitable for being the source ++ * drawable for drawing with the foreground the graphics context. ++ * ++ * Return value: a Picture, owned by the GC; this cannot be ++ * used over subsequent modification of the GC. ++ **/ ++Picture ++_gdk_x11_gc_get_fg_picture (GdkGC *gc) ++{ ++ GdkGCX11 *x11_gc; ++ gboolean new = FALSE; ++ XftColor xftcolor; ++ GdkFill fill; ++ int width, height; ++ ++ g_return_val_if_fail (GDK_IS_GC_X11 (gc), None); ++ ++ if (!_gdk_x11_have_render (GDK_GC_DISPLAY (gc))) ++ return None; ++ ++ x11_gc = GDK_GC_X11 (gc); ++ ++ fill = GDK_SOLID; ++ width = 1; ++ height = 1; ++ ++ switch (_gdk_gc_get_fill (gc)) ++ { ++ case GDK_SOLID: ++ break; ++ case GDK_TILED: ++ if (_gdk_gc_get_tile (gc)) ++ { ++ if (!x11_gc->fg_picture) ++ x11_gc->fg_picture = make_fg_tile_picture (gc); ++ ++ if (x11_gc->fg_picture != None) ++ return x11_gc->fg_picture; ++ } ++ break; ++ case GDK_STIPPLED: ++ case GDK_OPAQUE_STIPPLED: ++ if (_gdk_gc_get_stipple (gc)) ++ { ++ gdk_drawable_get_size (_gdk_gc_get_stipple (gc), &width, &height); ++ fill = _gdk_gc_get_fill (gc); ++ } ++ break; ++ } ++ ++ if (x11_gc->fg_picture == None) ++ { ++ XRenderPictureAttributes pa; ++ XRenderPictFormat *pix_format = foreground_format (gc); ++ Pixmap pix; ++ ++ if (!pix_format) ++ return None; ++ ++ pix = XCreatePixmap (GDK_GC_XDISPLAY (gc), ++ GDK_SCREEN_XROOTWIN (x11_gc->screen), ++ width, height, pix_format->depth); ++ pa.repeat = True; ++ x11_gc->fg_picture = XRenderCreatePicture (GDK_GC_XDISPLAY (gc), ++ pix, ++ pix_format, ++ CPRepeat, &pa); ++ XFreePixmap (GDK_GC_XDISPLAY (gc), pix); ++ ++ new = TRUE; ++ } ++ ++ _gdk_gc_x11_get_fg_xft_color (gc, &xftcolor); ++ ++ if (x11_gc->fg_picture_color.alpha != 0xffff || ++ x11_gc->fg_picture_color.red != xftcolor.color.red || ++ x11_gc->fg_picture_color.green != xftcolor.color.green || ++ x11_gc->fg_picture_color.blue != xftcolor.color.blue) ++ { ++ x11_gc->fg_picture_color.alpha = 0xffff; ++ x11_gc->fg_picture_color.red = xftcolor.color.red; ++ x11_gc->fg_picture_color.green = xftcolor.color.green; ++ x11_gc->fg_picture_color.blue = xftcolor.color.blue; ++ ++ new = TRUE; ++ } ++ ++ switch (fill) ++ { ++ case GDK_SOLID: ++ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc, ++ x11_gc->fg_picture, &x11_gc->fg_picture_color, ++ 0, 0, width, height); ++ break; ++ case GDK_STIPPLED: ++ { ++ Picture stipple_picture = make_stipple_picture (gc); ++ ++ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc, ++ x11_gc->fg_picture, &x11_gc->fg_picture_color, ++ 0, 0, width, height); ++ XRenderComposite (GDK_GC_XDISPLAY (gc), ++ PictOpInReverse, ++ stipple_picture, None, x11_gc->fg_picture, ++ 0, 0, 0, 0, 0, 0, width, height); ++ ++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), stipple_picture); ++ } ++ break; ++ case GDK_OPAQUE_STIPPLED: ++ { ++ XRenderColor bg_color; ++ ++ Picture stipple_picture = make_stipple_picture (gc); ++ Picture fg_picture = make_color_picture (gc, &x11_gc->fg_picture_color); ++ ++ get_bg_color (gc, &bg_color); ++ ++ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc, ++ x11_gc->fg_picture, &bg_color, ++ 0, 0, width, height); ++ XRenderComposite (GDK_GC_XDISPLAY (gc), ++ PictOpOver, ++ fg_picture, stipple_picture, x11_gc->fg_picture, ++ 0, 0, 0, 0, 0, 0, width, height); ++ ++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), stipple_picture); ++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), fg_picture); ++ } ++ break; ++ case GDK_TILED: ++ g_assert_not_reached (); /* handled above */ ++ break; ++ } ++ ++ return x11_gc->fg_picture; ++} ++ ++/** ++ * _gdk_gc_x11_get_fg_xft_color: ++ * @gc: a #GdkGC ++ * @xftcolor: location to store the color ++ * ++ * Gets the foreground color of the GC as a XftColor. ++ **/ ++void ++_gdk_gc_x11_get_fg_xft_color (GdkGC *gc, ++ XftColor *xftcolor) ++{ ++ GdkGCX11 *x11_gc; ++ GdkColormap *cmap; ++ GdkColor color; ++ ++ g_return_if_fail (GDK_IS_GC_X11 (gc)); ++ ++ x11_gc = GDK_GC_X11 (gc); ++ ++ cmap = gdk_gc_get_colormap (gc); ++ ++ xftcolor->pixel = _gdk_gc_get_fg_pixel (gc); ++ ++ if (cmap) ++ { ++ gdk_colormap_query_color (cmap, xftcolor->pixel, &color); ++ xftcolor->color.alpha = 0xffff; ++ xftcolor->color.red = color.red; ++ xftcolor->color.green = color.green; ++ xftcolor->color.blue = color.blue; ++ } ++ else if (x11_gc->depth == 1) ++ { ++ /* Drawing with Xft on a bitmap is a bit bizzare; it ++ * takes alpha >= 0x8000 to mean 'set to 1' and ++ * alpha < 0x8000 to mean 'set to 0'. ++ */ ++ if (xftcolor->pixel) ++ { ++ xftcolor->color.red = 0xffff; ++ xftcolor->color.green = 0xffff; ++ xftcolor->color.blue = 0xffff; ++ xftcolor->color.alpha = 0xffff; ++ } ++ else ++ { ++ xftcolor->color.red = 0; ++ xftcolor->color.green = 0; ++ xftcolor->color.blue = 0; ++ xftcolor->color.alpha = 0; ++ } ++ } ++ else ++ { ++ g_warning ("Using Xft rendering requires the GC argument to have a\n" ++ "specified colormap. If the GC was created for a drawable\n" ++ "with a colormap, the colormap will be set on the GC\n" ++ "automatically. Otherwise, a colormap must be set on it with" ++ "gdk_gc_set_colormap"); ++ } ++} ++ ++void ++_gdk_windowing_gc_get_foreground (GdkGC *gc, ++ GdkColor *color) ++{ ++ GdkColormap *cmap; ++ ++ g_return_if_fail (GDK_IS_GC_X11 (gc)); ++ ++ color->pixel = _gdk_gc_get_fg_pixel (gc); ++ ++ cmap = gdk_gc_get_colormap (gc); ++ ++ if (cmap) ++ gdk_colormap_query_color (cmap, _gdk_gc_get_fg_pixel (gc), color); ++ else ++ g_warning ("No colormap in _gdk_windowing_gc_get_foreground"); ++} + #define __GDK_GC_X11_C__ + #include "gdkaliasdef.c" +Index: gtk+-2.10.6/gdk/x11/gdkprivate-x11.h +=================================================================== +--- gtk+-2.10.6.orig/gdk/x11/gdkprivate-x11.h 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/gdkprivate-x11.h 2006-10-30 12:59:30.000000000 +0000 +@@ -63,6 +63,9 @@ + guint have_clip_region : 1; + guint have_clip_mask : 1; + guint depth : 8; ++ ++ Picture fg_picture; ++ XRenderColor fg_picture_color; + }; + + struct _GdkGCX11Class +@@ -102,6 +105,11 @@ + GType _gdk_gc_x11_get_type (void); + + gboolean _gdk_x11_have_render (GdkDisplay *display); ++gboolean _gdk_x11_have_render_with_trapezoids (GdkDisplay *display); ++ ++Picture _gdk_x11_gc_get_fg_picture (GdkGC *gc); ++void _gdk_gc_x11_get_fg_xft_color (GdkGC *gc, ++ XftColor *xftcolor); + + GdkGC *_gdk_x11_gc_new (GdkDrawable *drawable, + GdkGCValues *values, +Index: gtk+-2.10.6/gdk/x11/gdkwindow-x11.c +=================================================================== +--- gtk+-2.10.6.orig/gdk/x11/gdkwindow-x11.c 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/gdkwindow-x11.c 2006-10-30 12:59:30.000000000 +0000 +@@ -1114,7 +1114,8 @@ + { + GdkWindowObject *private = (GdkWindowObject *)window; + GdkToplevelX11 *toplevel; +- ++ GdkDrawableImplX11 *draw_impl; ++ + g_return_if_fail (GDK_IS_WINDOW (window)); + + _gdk_selection_window_destroyed (window); +@@ -1126,6 +1127,11 @@ + if (toplevel) + gdk_toplevel_x11_free_contents (GDK_WINDOW_DISPLAY (window), toplevel); + ++ draw_impl = GDK_DRAWABLE_IMPL_X11 (private->impl); ++ ++ if (draw_impl->xft_draw) ++ XftDrawDestroy (draw_impl->xft_draw); ++ + _gdk_x11_drawable_finish (private->impl); + + if (!recursing && !foreign_destroy) +Index: gtk+-2.10.6/gdk/x11/Makefile.am +=================================================================== +--- gtk+-2.10.6.orig/gdk/x11/Makefile.am 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/Makefile.am 2006-10-30 12:59:30.000000000 +0000 +@@ -37,6 +37,7 @@ + gdkinput.c \ + gdkkeys-x11.c \ + gdkmain-x11.c \ ++ gdkpango-x11.c \ + gdkpixmap-x11.c \ + gdkpixmap-x11.h \ + gdkproperty-x11.c \ +Index: gtk+-2.10.6/gtk/gtkcalendar.c +=================================================================== +--- gtk+-2.10.6.orig/gtk/gtkcalendar.c 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gtk/gtkcalendar.c 2006-10-30 12:59:30.000000000 +0000 +@@ -1821,7 +1821,7 @@ + } + } + +- ++ + /**************************************** + * Repainting * + ****************************************/ +@@ -1831,7 +1831,7 @@ + { + GtkWidget *widget = GTK_WIDGET (calendar); + GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar); +- cairo_t *cr; ++ GdkGC *gc; + char buffer[255]; + int x, y; + gint header_width; +@@ -1849,7 +1849,7 @@ + else + year_left = !priv->year_before; + +- cr = gdk_cairo_create (priv->header_win); ++ gc = calendar->gc; + + header_width = widget->allocation.width - 2 * widget->style->xthickness; + +@@ -1902,9 +1902,9 @@ + - (max_year_width - logical_rect.width)/2); + + +- gdk_cairo_set_source_color (cr, HEADER_FG_COLOR (GTK_WIDGET (calendar))); +- cairo_move_to (cr, x, y); +- pango_cairo_show_layout (cr, layout); ++ gdk_gc_set_foreground (gc, HEADER_FG_COLOR (GTK_WIDGET (calendar))); ++ gdk_draw_layout (priv->header_win, gc, x, y, layout); ++ + + /* Draw month */ + g_snprintf (buffer, sizeof (buffer), "%s", default_monthname[calendar->month]); +@@ -1924,19 +1924,19 @@ + else + x = 3 + priv->arrow_width + (max_month_width - logical_rect.width)/2; + +- cairo_move_to (cr, x, y); +- pango_cairo_show_layout (cr, layout); +- ++ gdk_draw_layout (priv->header_win, gc, x, y, layout); ++ ++ gdk_gc_set_foreground (gc, BACKGROUND_COLOR (GTK_WIDGET (calendar))); ++ + g_object_unref (layout); +- cairo_destroy (cr); + } + + static void + calendar_paint_day_names (GtkCalendar *calendar) + { + GtkWidget *widget = GTK_WIDGET (calendar); ++ GdkGC *gc; + GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar); +- cairo_t *cr; + char buffer[255]; + int day,i; + int day_width, cal_width; +@@ -1946,8 +1946,7 @@ + gint focus_padding; + gint focus_width; + +- cr = gdk_cairo_create (priv->day_name_win); +- ++ gc = calendar->gc; + gtk_widget_style_get (GTK_WIDGET (widget), + "focus-line-width", &focus_width, + "focus-padding", &focus_padding, +@@ -1961,22 +1960,19 @@ + * Draw rectangles as inverted background for the labels. + */ + +- gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget)); +- cairo_rectangle (cr, +- CALENDAR_MARGIN, CALENDAR_MARGIN, +- cal_width-CALENDAR_MARGIN * 2, +- priv->day_name_h - CALENDAR_MARGIN); +- cairo_fill (cr); +- ++ gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (widget)); ++ gdk_draw_rectangle (priv->day_name_win, gc, TRUE, ++ CALENDAR_MARGIN, CALENDAR_MARGIN, ++ cal_width-CALENDAR_MARGIN * 2, ++ priv->day_name_h - CALENDAR_MARGIN); ++ + if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS) +- { +- cairo_rectangle (cr, +- CALENDAR_MARGIN, +- priv->day_name_h - CALENDAR_YSEP, +- priv->week_width - CALENDAR_YSEP - CALENDAR_MARGIN, +- CALENDAR_YSEP); +- cairo_fill (cr); +- } ++ gdk_draw_rectangle (priv->day_name_win, gc, TRUE, ++ CALENDAR_MARGIN, ++ priv->day_name_h - CALENDAR_YSEP, ++ priv->week_width - CALENDAR_YSEP - CALENDAR_MARGIN, ++ CALENDAR_YSEP); ++ + + /* + * Write the labels +@@ -1984,7 +1980,7 @@ + + layout = gtk_widget_create_pango_layout (widget, NULL); + +- gdk_cairo_set_source_color (cr, SELECTED_FG_COLOR (widget)); ++ gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (widget)); + for (i = 0; i < 7; i++) + { + if (gtk_widget_get_direction (GTK_WIDGET (calendar)) == GTK_TEXT_DIR_RTL) +@@ -1997,19 +1993,18 @@ + pango_layout_set_text (layout, buffer, -1); + pango_layout_get_pixel_extents (layout, NULL, &logical_rect); + +- cairo_move_to (cr, +- (CALENDAR_MARGIN + +- + (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ? +- (priv->week_width + (priv->week_width ? CALENDAR_XSEP : 0)) +- : 0) +- + day_wid_sep * i +- + (day_width - logical_rect.width)/2), +- CALENDAR_MARGIN + focus_width + focus_padding + logical_rect.y); +- pango_cairo_show_layout (cr, layout); ++ gdk_draw_layout (priv->day_name_win, gc, ++ (CALENDAR_MARGIN + ++ + (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ? ++ (priv->week_width + (priv->week_width ? CALENDAR_XSEP : 0)) ++ : 0) ++ + day_wid_sep * i ++ + (day_width - logical_rect.width)/2), ++ CALENDAR_MARGIN + focus_width + focus_padding + logical_rect.y, ++ layout); + } + + g_object_unref (layout); +- cairo_destroy (cr); + } + + static void +@@ -2017,7 +2012,7 @@ + { + GtkWidget *widget = GTK_WIDGET (calendar); + GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar); +- cairo_t *cr; ++ GdkGC *gc; + gint row, week = 0, year; + gint x_loc; + char buffer[32]; +@@ -2027,7 +2022,7 @@ + gint focus_padding; + gint focus_width; + +- cr = gdk_cairo_create (priv->week_win); ++ gc = calendar->gc; + + gtk_widget_style_get (GTK_WIDGET (widget), + "focus-line-width", &focus_width, +@@ -2038,20 +2033,20 @@ + * Draw a rectangle as inverted background for the labels. + */ + +- gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget)); ++ gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (widget)); + if (priv->day_name_win) +- cairo_rectangle (cr, +- CALENDAR_MARGIN, +- 0, +- priv->week_width - CALENDAR_MARGIN, +- priv->main_h - CALENDAR_MARGIN); ++ gdk_draw_rectangle (priv->week_win, gc, TRUE, ++ CALENDAR_MARGIN, ++ 0, ++ priv->week_width - CALENDAR_MARGIN, ++ priv->main_h - CALENDAR_MARGIN); + else +- cairo_rectangle (cr, +- CALENDAR_MARGIN, +- CALENDAR_MARGIN, +- priv->week_width - CALENDAR_MARGIN, +- priv->main_h - 2 * CALENDAR_MARGIN); +- cairo_fill (cr); ++ gdk_draw_rectangle (priv->week_win, gc, TRUE, ++ CALENDAR_MARGIN, ++ CALENDAR_MARGIN, ++ priv->week_width - CALENDAR_MARGIN, ++ priv->main_h - 2 * CALENDAR_MARGIN); ++ + + /* + * Write the labels +@@ -2059,7 +2054,7 @@ + + layout = gtk_widget_create_pango_layout (widget, NULL); + +- gdk_cairo_set_source_color (cr, SELECTED_FG_COLOR (widget)); ++ gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (widget)); + day_height = calendar_row_height (calendar); + for (row = 0; row < 6; row++) + { +@@ -2095,12 +2090,10 @@ + - logical_rect.width + - CALENDAR_XSEP - focus_padding - focus_width); + +- cairo_move_to (cr, x_loc, y_loc); +- pango_cairo_show_layout (cr, layout); ++ gdk_draw_layout (priv->week_win, gc, x_loc, y_loc, layout); + } + + g_object_unref (layout); +- cairo_destroy (cr); + } + + static void +@@ -2149,7 +2142,7 @@ + { + GtkWidget *widget = GTK_WIDGET (calendar); + GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar); +- cairo_t *cr; ++ GdkGC *gc; + GdkColor *text_color; + gchar buffer[32]; + gint day; +@@ -2162,7 +2155,7 @@ + g_return_if_fail (row < 6); + g_return_if_fail (col < 7); + +- cr = gdk_cairo_create (priv->main_win); ++ gc = calendar->gc; + + day = calendar->day[row][col]; + +@@ -2170,11 +2163,11 @@ + + if (calendar->day_month[row][col] == MONTH_PREV) + { +- text_color = PREV_MONTH_COLOR (widget); ++ gdk_gc_set_foreground (gc, PREV_MONTH_COLOR (GTK_WIDGET (calendar))); + } + else if (calendar->day_month[row][col] == MONTH_NEXT) + { +- text_color = NEXT_MONTH_COLOR (widget); ++ gdk_gc_set_foreground (gc, NEXT_MONTH_COLOR (GTK_WIDGET (calendar))); + } + else + { +@@ -2188,16 +2181,16 @@ + #endif + if (calendar->selected_day == day) + { +- gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget)); +- gdk_cairo_rectangle (cr, &day_rect); +- cairo_fill (cr); ++ gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (GTK_WIDGET (calendar))); ++ gdk_draw_rectangle (priv->main_win, gc, TRUE, day_rect.x, day_rect.y, ++ day_rect.width, day_rect.height); + } + if (calendar->selected_day == day) +- text_color = SELECTED_FG_COLOR (widget); ++ gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (GTK_WIDGET (calendar))); + else if (calendar->marked_date[day-1]) +- text_color = MARKED_COLOR (widget); ++ gdk_gc_set_foreground (gc, MARKED_COLOR (GTK_WIDGET (calendar))); + else +- text_color = NORMAL_DAY_COLOR (widget); ++ gdk_gc_set_foreground (gc, NORMAL_DAY_COLOR (GTK_WIDGET (calendar))); + } + + /* Translators: this defines whether the day numbers should use +@@ -2219,16 +2212,13 @@ + x_loc -= logical_rect.width; + y_loc = day_rect.y + (day_rect.height - logical_rect.height) / 2; + +- gdk_cairo_set_source_color (cr, text_color); +- cairo_move_to (cr, x_loc, y_loc); +- pango_cairo_show_layout (cr, layout); ++ gdk_draw_layout (priv->main_win, gc, ++ x_loc, y_loc, layout); + + if (calendar->marked_date[day-1] + && calendar->day_month[row][col] == MONTH_CURRENT) +- { +- cairo_move_to (cr, x_loc - 1, y_loc); +- pango_cairo_show_layout (cr, layout); +- } ++ gdk_draw_layout (priv->main_win, gc, ++ x_loc-1, y_loc, layout); + + if (GTK_WIDGET_HAS_FOCUS (calendar) + && calendar->focus_row == row && calendar->focus_col == col) +@@ -2253,7 +2243,6 @@ + } + + g_object_unref (layout); +- cairo_destroy (cr); + } + + static void +Index: gtk+-2.10.6/gtk/gtkentry.c +=================================================================== +--- gtk+-2.10.6.orig/gtk/gtkentry.c 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gtk/gtkentry.c 2006-10-30 12:59:30.000000000 +0000 +@@ -3333,7 +3333,6 @@ + if (GTK_WIDGET_DRAWABLE (entry)) + { + PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE); +- cairo_t *cr; + gint x, y; + gint start_pos, end_pos; + +@@ -3341,56 +3340,60 @@ + + get_layout_position (entry, &x, &y); + +- cr = gdk_cairo_create (entry->text_area); +- +- cairo_move_to (cr, x, y); +- gdk_cairo_set_source_color (cr, &widget->style->text [widget->state]); +- pango_cairo_show_layout (cr, layout); +- ++ gdk_draw_layout (entry->text_area, widget->style->text_gc [widget->state], ++ x, y, ++ layout); ++ + if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos)) + { + gint *ranges; + gint n_ranges, i; + PangoRectangle logical_rect; +- GdkColor *selection_color, *text_color; ++ GdkGC *selection_gc, *text_gc; + GtkBorder inner_border; +- ++ GdkRegion *clip_region; ++ + pango_layout_get_pixel_extents (layout, NULL, &logical_rect); + gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges); + + if (GTK_WIDGET_HAS_FOCUS (entry)) + { +- selection_color = &widget->style->base [GTK_STATE_SELECTED]; +- text_color = &widget->style->text [GTK_STATE_SELECTED]; ++ selection_gc = widget->style->base_gc [GTK_STATE_SELECTED]; ++ text_gc = widget->style->text_gc [GTK_STATE_SELECTED]; + } + else + { +- selection_color = &widget->style->base [GTK_STATE_ACTIVE]; +- text_color = &widget->style->text [GTK_STATE_ACTIVE]; ++ selection_gc = widget->style->base_gc [GTK_STATE_ACTIVE]; ++ text_gc = widget->style->text_gc [GTK_STATE_ACTIVE]; + } +- ++ ++ clip_region = gdk_region_new (); + _gtk_entry_effective_inner_border (entry, &inner_border); + + for (i = 0; i < n_ranges; ++i) +- cairo_rectangle (cr, +- inner_border.left - entry->scroll_offset + ranges[2 * i], +- y, +- ranges[2 * i + 1], +- logical_rect.height); ++ { ++ GdkRectangle rect; + +- cairo_clip (cr); +- +- gdk_cairo_set_source_color (cr, selection_color); +- cairo_paint (cr); ++ rect.x = inner_border.left - entry->scroll_offset + ranges[2 * i]; ++ rect.y = y; ++ rect.width = ranges[2 * i + 1]; ++ rect.height = logical_rect.height; ++ ++ gdk_draw_rectangle (entry->text_area, selection_gc, TRUE, ++ rect.x, rect.y, rect.width, rect.height); + +- cairo_move_to (cr, x, y); +- gdk_cairo_set_source_color (cr, text_color); +- pango_cairo_show_layout (cr, layout); ++ gdk_region_union_with_rect (clip_region, &rect); ++ } + ++ gdk_gc_set_clip_region (text_gc, clip_region); ++ gdk_draw_layout (entry->text_area, text_gc, ++ x, y, ++ layout); ++ gdk_gc_set_clip_region (text_gc, NULL); ++ ++ gdk_region_destroy (clip_region); + g_free (ranges); + } +- +- cairo_destroy (cr); + } + } + +Index: gtk+-2.10.6/gtk/gtkwidget.c +=================================================================== +--- gtk+-2.10.6.orig/gtk/gtkwidget.c 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gtk/gtkwidget.c 2006-10-30 12:59:30.000000000 +0000 +@@ -5445,7 +5445,8 @@ + GdkScreen *screen; + + update_pango_context (widget, context); +- ++/* TODO: Figure out the proper way to handle this in a pangoxft setting ++ + screen = gtk_widget_get_screen_unchecked (widget); + if (screen) + { +@@ -5453,7 +5454,7 @@ + gdk_screen_get_resolution (screen)); + pango_cairo_context_set_font_options (context, + gdk_screen_get_font_options (screen)); +- } ++ }*/ + } + } + +Index: gtk+-2.10.6/gdk/x11/gdkpango-x11.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/gdkpango-x11.c 2006-10-30 12:59:30.000000000 +0000 +@@ -0,0 +1,174 @@ ++/* GDK - The GIMP Drawing Kit ++ * Copyright (C) 2000 Red Hat, Inc. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ * Boston, MA 02111-1307, USA. ++ */ ++ ++#include ++#include ++ ++#include "gdkx.h" ++#include "gdkdisplay-x11.h" ++#include "gdkpango.h" ++#include ++#include ++#include "gdkalias.h" ++ ++#include ++ ++typedef struct _GdkX11Renderer GdkX11Renderer; ++typedef struct _GdkX11RendererClass GdkX11RendererClass; ++ ++#define GDK_TYPE_X11_RENDERER (_gdk_x11_renderer_get_type()) ++#define GDK_X11_RENDERER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_X11_RENDERER, GdkX11Renderer)) ++#define GDK_IS_X11_RENDERER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_X11_RENDERER)) ++#define GDK_X11_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_X11_RENDERER, GdkX11RendererClass)) ++#define GDK_IS_X11_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_X11_RENDERER)) ++#define GDK_X11_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_X11_RENDERER, GdkX11RendererClass)) ++ ++#define MAX_RENDER_PART PANGO_RENDER_PART_STRIKETHROUGH ++ ++struct _GdkX11Renderer ++{ ++ PangoXftRenderer parent_instance; ++ ++ XRenderPictFormat *mask_format; ++ ++ GdkDrawable *drawable; ++ GdkGC *gc; ++}; ++ ++struct _GdkX11RendererClass ++{ ++ PangoXftRendererClass parent_class; ++}; ++ ++G_DEFINE_TYPE (GdkX11Renderer, _gdk_x11_renderer, PANGO_TYPE_XFT_RENDERER) ++ ++static void ++gdk_x11_renderer_finalize (GObject *object) ++{ ++ G_OBJECT_CLASS (_gdk_x11_renderer_parent_class)->finalize (object); ++} ++ ++static void ++gdk_x11_renderer_composite_trapezoids (PangoXftRenderer *xftrenderer, ++ PangoRenderPart part, ++ XTrapezoid *trapezoids, ++ int n_trapezoids) ++{ ++ /* Because we only use this renderer for "draw_glyphs()" calls, we ++ * won't hit this code path much. However, it is hit for drawing ++ * the "unknown glyph" hex squares. We can safely ignore the part, ++ */ ++ GdkX11Renderer *x11_renderer = GDK_X11_RENDERER (xftrenderer); ++ ++ _gdk_x11_drawable_draw_xtrapezoids (x11_renderer->drawable, ++ x11_renderer->gc, ++ trapezoids, n_trapezoids); ++ ++} ++ ++static void ++gdk_x11_renderer_composite_glyphs (PangoXftRenderer *xftrenderer, ++ XftFont *xft_font, ++ XftGlyphSpec *glyphs, ++ gint n_glyphs) ++{ ++ GdkX11Renderer *x11_renderer = GDK_X11_RENDERER (xftrenderer); ++ ++ _gdk_x11_drawable_draw_xft_glyphs (x11_renderer->drawable, ++ x11_renderer->gc, ++ xft_font, glyphs, n_glyphs); ++} ++ ++static void ++_gdk_x11_renderer_init (GdkX11Renderer *renderer) ++{ ++} ++ ++static void ++_gdk_x11_renderer_class_init (GdkX11RendererClass *klass) ++{ ++ PangoXftRendererClass *xftrenderer_class = PANGO_XFT_RENDERER_CLASS (klass); ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ xftrenderer_class->composite_glyphs = gdk_x11_renderer_composite_glyphs; ++ xftrenderer_class->composite_trapezoids = gdk_x11_renderer_composite_trapezoids; ++ ++ object_class->finalize = gdk_x11_renderer_finalize; ++} ++ ++PangoRenderer * ++_gdk_x11_renderer_get (GdkDrawable *drawable, ++ GdkGC *gc) ++{ ++ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen; ++ GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen); ++ GdkX11Renderer *x11_renderer; ++ ++ if (!screen_x11->renderer) ++ { ++ screen_x11->renderer = g_object_new (GDK_TYPE_X11_RENDERER, ++ "display", GDK_SCREEN_XDISPLAY (screen), ++ "screen", GDK_SCREEN_XNUMBER (screen), ++ NULL); ++ } ++ ++ x11_renderer = GDK_X11_RENDERER (screen_x11->renderer); ++ ++ x11_renderer->drawable = drawable; ++ x11_renderer->gc = gc; ++ ++ return screen_x11->renderer; ++} ++ ++/** ++ * gdk_pango_context_get_for_screen: ++ * @screen: the #GdkScreen for which the context is to be created. ++ * ++ * Creates a #PangoContext for @screen. ++ * ++ * The context must be freed when you're finished with it. ++ * ++ * When using GTK+, normally you should use gtk_widget_get_pango_context() ++ * instead of this function, to get the appropriate context for ++ * the widget you intend to render text onto. ++ * ++ * Return value: a new #PangoContext for @screen ++ * ++ * Since: 2.2 ++ **/ ++PangoContext * ++gdk_pango_context_get_for_screen (GdkScreen *screen) ++{ ++ PangoContext *context; ++ ++ g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); ++ ++ if (screen->closed) ++ return NULL; ++ ++ context = pango_xft_get_context (GDK_SCREEN_XDISPLAY (screen), ++ GDK_SCREEN_X11 (screen)->screen_num); ++ ++ g_object_set_data (G_OBJECT (context), "gdk-pango-screen", screen); ++ ++ return context; ++} ++ ++#define __GDK_PANGO_X11_C__ ++#include "gdkaliasdef.c" +Index: gtk+-2.10.6/gdk/x11/gdkpixmap-x11.c +=================================================================== +--- gtk+-2.10.6.orig/gdk/x11/gdkpixmap-x11.c 2006-10-30 12:58:30.000000000 +0000 ++++ gtk+-2.10.6/gdk/x11/gdkpixmap-x11.c 2006-10-30 12:59:30.000000000 +0000 +@@ -119,6 +119,9 @@ + { + GdkDrawableImplX11 *draw_impl = GDK_DRAWABLE_IMPL_X11 (impl); + ++ if (draw_impl->xft_draw) ++ XftDrawDestroy (draw_impl->xft_draw); ++ + _gdk_x11_drawable_finish (GDK_DRAWABLE (draw_impl)); + } + +--- gtk+-2.10.6.orig/gtk/gtkcalendar.c.orig 2006-11-14 14:39:34.000000000 -0800 ++++ gtk+-2.10.6/gtk/gtkcalendar.c 2006-11-14 14:37:34.000000000 -0800 +@@ -1495,6 +1495,10 @@ gtk_calendar_realize (GtkWidget *widget) + BACKGROUND_COLOR ( GTK_WIDGET ( calendar))); + gdk_window_show (priv->main_win); + gdk_window_set_user_data (priv->main_win, widget); ++ ++ /* Set widgets gc */ ++ calendar->gc = gdk_gc_new (widget->window); ++ + gdk_window_set_background (widget->window, BACKGROUND_COLOR (widget)); + gdk_window_show (widget->window); + gdk_window_set_user_data (widget->window, widget); diff --git a/packages/gtk+/gtk+-2.12.3/range-no-redraw.patch b/packages/gtk+/gtk+-2.12.3/range-no-redraw.patch new file mode 100644 index 0000000000..14387b8a2e --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/range-no-redraw.patch @@ -0,0 +1,127 @@ +5f084ea0849d5967a3c22821542ecaaa8accb398 +diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c +index bd95351..64e0e59 100644 +--- gtk/gtkrange.c ++++ gtk/gtkrange.c +@@ -109,6 +109,8 @@ struct _GtkRangeLayout + GtkSensitivityType upper_sensitivity; + + gdouble fill_level; ++ ++ guint motion_idle_id; + }; + + +@@ -205,6 +207,8 @@ static gboolean gtk_range_real_change_value (GtkRange *range, + static void gtk_range_update_value (GtkRange *range); + static gboolean gtk_range_key_press (GtkWidget *range, + GdkEventKey *event); ++static void gtk_range_add_motion_idle (GtkRange *range); ++static void gtk_range_remove_motion_idle (GtkRange *range); + + + static guint signals[LAST_SIGNAL]; +@@ -1167,6 +1171,7 @@ gtk_range_destroy (GtkObject *object) + + gtk_range_remove_step_timer (range); + gtk_range_remove_update_timer (range); ++ gtk_range_remove_motion_idle (range); + + if (range->adjustment) + { +@@ -1276,6 +1281,7 @@ gtk_range_unrealize (GtkWidget *widget) + + gtk_range_remove_step_timer (range); + gtk_range_remove_update_timer (range); ++ gtk_range_remove_motion_idle (range); + + gdk_window_set_user_data (range->event_window, NULL); + gdk_window_destroy (range->event_window); +@@ -2165,7 +2171,7 @@ gtk_range_motion_notify (GtkWidget *widget, + gtk_widget_queue_draw (widget); + + if (range->layout->grab_location == MOUSE_SLIDER) +- update_slider_position (range, x, y); ++ gtk_range_add_motion_idle (range); + + /* We handled the event if the mouse was in the range_rect */ + return range->layout->mouse_location != MOUSE_OUTSIDE; +@@ -3335,9 +3341,10 @@ initial_timeout (gpointer data) + g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL); + + range = GTK_RANGE (data); +- range->timer->timeout_id = gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR, +- second_timeout, +- range); ++ range->timer->timeout_id = ++ gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR, ++ second_timeout, ++ range); + /* remove self */ + return FALSE; + } +@@ -3357,9 +3364,8 @@ gtk_range_add_step_timer (GtkRange *range, + + range->timer = g_new (GtkRangeStepTimer, 1); + +- range->timer->timeout_id = gdk_threads_add_timeout (timeout, +- initial_timeout, +- range); ++ range->timer->timeout_id = ++ gdk_threads_add_timeout (timeout, initial_timeout, range); + range->timer->step = step; + + gtk_range_scroll (range, range->timer->step); +@@ -3397,9 +3403,8 @@ gtk_range_reset_update_timer (GtkRange *range) + { + gtk_range_remove_update_timer (range); + +- range->update_timeout_id = gdk_threads_add_timeout (UPDATE_DELAY, +- update_timeout, +- range); ++ range->update_timeout_id = ++ gdk_threads_add_timeout (UPDATE_DELAY, update_timeout, range); + } + + static void +@@ -3412,5 +3417,40 @@ gtk_range_remove_update_timer (GtkRange *range) + } + } + ++static gboolean ++motion_idle (gpointer data) ++{ ++ GtkRange *range = data; ++ GtkRangeLayout *layout = range->layout; ++ ++ update_slider_position (range, layout->mouse_x, layout->mouse_y); ++ ++ layout->motion_idle_id = 0; ++ ++ return FALSE; ++} ++ ++static void ++gtk_range_add_motion_idle (GtkRange *range) ++{ ++ if (!range->layout->motion_idle_id) ++ { ++ range->layout->motion_idle_id = ++ gdk_threads_add_idle_full (GDK_PRIORITY_REDRAW, ++ motion_idle, range, ++ NULL); ++ } ++} ++ ++static void ++gtk_range_remove_motion_idle (GtkRange *range) ++{ ++ if (range->layout->motion_idle_id != 0) ++ { ++ g_source_remove (range->layout->motion_idle_id); ++ range->layout->motion_idle_id = 0; ++ } ++} ++ + #define __GTK_RANGE_C__ + #include "gtkaliasdef.c" diff --git a/packages/gtk+/gtk+-2.12.3/run-iconcache.patch b/packages/gtk+/gtk+-2.12.3/run-iconcache.patch new file mode 100644 index 0000000000..ac15e9ab24 --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/run-iconcache.patch @@ -0,0 +1,19 @@ +--- /tmp/Makefile.am 2007-01-08 17:44:47.000000000 +0100 ++++ gtk+-2.10.7/gtk/Makefile.am 2007-01-08 17:45:17.025251000 +0100 +@@ -1128,11 +1128,11 @@ + ./gtk-update-icon-cache + endif + +-gtkbuiltincache.h: @REBUILD@ stamp-icons +- $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT) +- $(gtk_update_icon_cache_program) --force --ignore-theme-index \ +- --source builtin_icons stock-icons > gtkbuiltincache.h.tmp && \ +- mv gtkbuiltincache.h.tmp gtkbuiltincache.h ++#gtkbuiltincache.h: @REBUILD@ stamp-icons ++# $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT) ++# $(gtk_update_icon_cache_program) --force --ignore-theme-index \ ++# --source builtin_icons stock-icons > gtkbuiltincache.h.tmp && \ ++# mv gtkbuiltincache.h.tmp gtkbuiltincache.h + + EXTRA_DIST += \ + $(STOCK_ICONS) \ diff --git a/packages/gtk+/gtk+-2.12.3/scrolled-placement.patch b/packages/gtk+/gtk+-2.12.3/scrolled-placement.patch new file mode 100644 index 0000000000..a0b50c8cac --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/scrolled-placement.patch @@ -0,0 +1,22 @@ +Index: gdk/x11/gdksettings.c +=================================================================== +--- gdk/x11/gdksettings.c (revision 18493) ++++ gdk/x11/gdksettings.c (working copy) +@@ -65,7 +65,8 @@ + "Xft/RGBA\0" "gtk-xft-rgba\0" + "Xft/DPI\0" "gtk-xft-dpi\0" + "Net/FallbackIconTheme\0" "gtk-fallback-icon-theme\0" +- "Gtk/TouchscreenMode\0" "gtk-touchscreen-mode\0"; ++ "Gtk/TouchscreenMode\0" "gtk-touchscreen-mode\0" ++ "Gtk/ScrolledWindowPlacement\0" "gtk-scrolled-window-placement\0"; + + static const struct + { +@@ -107,5 +108,6 @@ + { 1197, 1206 }, + { 1219, 1227 }, + { 1239, 1261 }, +- { 1285, 1305 } ++ { 1285, 1305 }, ++ { 1326, 1354 } + }; diff --git a/packages/gtk+/gtk+-2.12.3/toggle-font.diff b/packages/gtk+/gtk+-2.12.3/toggle-font.diff new file mode 100644 index 0000000000..59ad150b2f --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/toggle-font.diff @@ -0,0 +1,100 @@ +Index: gtk/gtkcellrenderertoggle.c +=================================================================== +--- gtk/gtkcellrenderertoggle.c (revision 18523) ++++ gtk/gtkcellrenderertoggle.c (working copy) +@@ -71,6 +71,8 @@ + PROP_INDICATOR_SIZE + }; + ++/* This is a hard-coded default which promptly gets overridden by a size ++ calculated from the font size. */ + #define TOGGLE_WIDTH 13 + + static guint toggle_cell_signals[LAST_SIGNAL] = { 0 }; +@@ -80,8 +82,9 @@ + typedef struct _GtkCellRendererTogglePrivate GtkCellRendererTogglePrivate; + struct _GtkCellRendererTogglePrivate + { +- gint indicator_size; +- ++ gint indicator_size; /* This is the real size */ ++ gint override_size; /* This is the size set from the indicator-size property */ ++ GtkWidget *cached_widget; + guint inconsistent : 1; + }; + +@@ -104,6 +107,7 @@ + GTK_CELL_RENDERER (celltoggle)->ypad = 2; + + priv->indicator_size = TOGGLE_WIDTH; ++ priv->override_size = 0; + priv->inconsistent = FALSE; + } + +@@ -210,7 +214,7 @@ + g_value_set_boolean (value, celltoggle->radio); + break; + case PROP_INDICATOR_SIZE: +- g_value_set_int (value, priv->indicator_size); ++ g_value_set_int (value, priv->override_size ? priv->override_size : priv->indicator_size); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); +@@ -245,7 +249,7 @@ + celltoggle->radio = g_value_get_boolean (value); + break; + case PROP_INDICATOR_SIZE: +- priv->indicator_size = g_value_get_int (value); ++ priv->override_size = g_value_get_int (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); +@@ -273,6 +277,27 @@ + } + + static void ++on_widget_style_set (GtkWidget *widget, GtkStyle *previous, gpointer user_data) ++{ ++ GtkCellRendererTogglePrivate *priv = user_data; ++ PangoContext *context; ++ PangoFontMetrics *metrics; ++ int height; ++ ++ context = gtk_widget_get_pango_context (widget); ++ metrics = pango_context_get_metrics (context, ++ widget->style->font_desc, ++ pango_context_get_language (context)); ++ ++ height = pango_font_metrics_get_ascent (metrics) + ++ pango_font_metrics_get_descent (metrics); ++ ++ pango_font_metrics_unref (metrics); ++ ++ priv->indicator_size = PANGO_PIXELS (height * 0.85); ++} ++ ++static void + gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cell, + GtkWidget *widget, + GdkRectangle *cell_area, +@@ -287,6 +312,20 @@ + + priv = GTK_CELL_RENDERER_TOGGLE_GET_PRIVATE (cell); + ++ if (priv->override_size) { ++ priv->indicator_size = priv->override_size; ++ } else if (priv->cached_widget != widget) { ++ if (priv->cached_widget) { ++ g_object_remove_weak_pointer (widget, &priv->cached_widget); ++ g_signal_handlers_disconnect_by_func (priv->cached_widget, on_widget_style_set, priv); ++ } ++ priv->cached_widget = widget; ++ g_object_add_weak_pointer (widget, &priv->cached_widget); ++ g_signal_connect (widget, "style-set", on_widget_style_set, priv); ++ ++ on_widget_style_set (widget, NULL, priv); ++ } ++ + calc_width = (gint) cell->xpad * 2 + priv->indicator_size; + calc_height = (gint) cell->ypad * 2 + priv->indicator_size; + diff --git a/packages/gtk+/gtk+-2.12.3/xsettings.patch b/packages/gtk+/gtk+-2.12.3/xsettings.patch new file mode 100644 index 0000000000..b63e262d34 --- /dev/null +++ b/packages/gtk+/gtk+-2.12.3/xsettings.patch @@ -0,0 +1,16 @@ +--- gtk+-2.4.4/gdk/x11/gdkevents-x11.c.old Sun Aug 22 17:14:00 2004 ++++ gtk+-2.4.4/gdk/x11/gdkevents-x11.c Sun Aug 22 17:14:00 2004 +@@ -2827,10 +2827,9 @@ + { + GdkScreenX11 *screen = data; + +- if (xsettings_client_process_event (screen->xsettings_client, (XEvent *)xevent)) +- return GDK_FILTER_REMOVE; +- else +- return GDK_FILTER_CONTINUE; ++ xsettings_client_process_event (screen->xsettings_client, (XEvent *)xevent); ++ ++ return GDK_FILTER_CONTINUE; + } + + static void diff --git a/packages/gtk+/gtk+_2.12.3.bb b/packages/gtk+/gtk+_2.12.3.bb new file mode 100644 index 0000000000..689071d776 --- /dev/null +++ b/packages/gtk+/gtk+_2.12.3.bb @@ -0,0 +1,48 @@ +require gtk+.inc + +PR = "r0" + +DEPENDS += "cairo" + +# disable per default - untested and not all patches included. +DEFAULT_PREFERENCE = "-1" + +SRC_URI = "http://download.gnome.org/sources/gtk+/2.12/gtk+-${PV}.tar.bz2 \ + file://xsettings.patch;patch=1 \ + file://run-iconcache.patch;patch=1 \ + file://hardcoded_libtool.patch;patch=1 \ + file://no-demos.patch;patch=1 \ + file://cellrenderer-cairo.patch;patch=1;pnum=0 \ + file://entry-cairo.patch;patch=1;pnum=0 \ + file://toggle-font.diff;patch=1;pnum=0 \ + file://scrolled-placement.patch;patch=1;pnum=0" +# temporary +# file://gtklabel-resize-patch;patch=1 \ +# file://menu-deactivate.patch;patch=1 \ +# file://combo-arrow-size.patch;patch=1;pnum=0 \ +# die die die +# file://pangoxft2.10.6.diff;patch=1" + +EXTRA_OECONF = "--with-libtiff --disable-xkb --disable-glibtest --enable-display-migration" + +LIBV = "2.10.0" + +PACKAGES_DYNAMIC = "gdk-pixbuf-loader-* gtk-immodule-* gtk-printbackend-*" + +python populate_packages_prepend () { + import os.path + + prologue = bb.data.getVar("postinst_prologue", d, 1) + + gtk_libdir = bb.data.expand('${libdir}/gtk-2.0/${LIBV}', d) + loaders_root = os.path.join(gtk_libdir, 'loaders') + immodules_root = os.path.join(gtk_libdir, 'immodules') + printmodules_root = os.path.join(gtk_libdir, 'printbackends'); + + do_split_packages(d, loaders_root, '^libpixbufloader-(.*)\.so$', 'gdk-pixbuf-loader-%s', 'GDK pixbuf loader for %s', prologue + 'gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders') + do_split_packages(d, immodules_root, '^im-(.*)\.so$', 'gtk-immodule-%s', 'GTK input module for %s', prologue + 'gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules') + do_split_packages(d, printmodules_root, '^libprintbackend-(.*)\.so$', 'gtk-printbackend-%s', 'GTK printbackend module for %s') + + if (bb.data.getVar('DEBIAN_NAMES', d, 1)): + bb.data.setVar('PKG_${PN}', 'libgtk-2.0', d) +} -- cgit v1.2.3 From ee8a417ab7a395332a1db94106edd7c97119a2ef Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 24 Jan 2008 09:50:54 +0000 Subject: gtk+.inc : gtk+ will use cups if its around so depend on it explicitly --- packages/gtk+/gtk+.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gtk+/gtk+.inc b/packages/gtk+/gtk+.inc index 14b5026cc6..1a8236aa34 100644 --- a/packages/gtk+/gtk+.inc +++ b/packages/gtk+/gtk+.inc @@ -4,7 +4,7 @@ HOMEPAGE = "http://www.gtk.org" SECTION = "libs" LICENSE = "LGPL" PRIORITY = "optional" -DEPENDS = "glib-2.0 tiff pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt" +DEPENDS = "glib-2.0 tiff pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt cups" inherit autotools pkgconfig -- cgit v1.2.3 From ea78cc0130bd9106754c72041ee9ec82b7b15431 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 24 Jan 2008 10:57:32 +0000 Subject: debian.bbclass : altered version of the patch in #3383, this allows us to change the debian renaming of a package without resorting to python in the recipe. Makes recipes cleaner and is overrideable in distros that need different renaming. Original patch from Robert Schuster --- classes/debian.bbclass | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/classes/debian.bbclass b/classes/debian.bbclass index dd0789adae..0afe9fcc39 100644 --- a/classes/debian.bbclass +++ b/classes/debian.bbclass @@ -3,6 +3,9 @@ # before building the current package to make the packages runtime # depends are correct # +# Custom library package names can be defined setting +# DEBIANNAME_ + pkgname to the desired name. +# # Better expressed as ensure all RDEPENDS package before we package # This means we can't have circular RDEPENDS/RRECOMMENDS do_package_write_ipk[rdeptask] = "do_package" @@ -88,7 +91,10 @@ python debian_package_name_hook () { for pkg in packages.split(): if (bb.data.getVar('PKG_' + pkg, d) or bb.data.getVar('DEBIAN_NOAUTONAME_' + pkg, d)): continue - if pkg == orig_pkg: + debian_pn = bb.data.getVar('DEBIANNAME_' + pkg, d) + if debian_pn: + newpkg = debian_pn + elif pkg == orig_pkg: newpkg = pkgname else: newpkg = pkg.replace(orig_pkg, devname, 1) -- cgit v1.2.3 From 342e90dbd530f0ae6ea3f7583c9ce3ac7df8d24f Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 24 Jan 2008 10:58:10 +0000 Subject: dbus.inc : use the new DEBIANNAME variable to rename dbus->dbus-1 --- packages/dbus/dbus.inc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc index ad5660345d..ecd3d18e70 100644 --- a/packages/dbus/dbus.inc +++ b/packages/dbus/dbus.inc @@ -19,6 +19,8 @@ INITSCRIPT_PARAMS = "defaults" CONFFILES_${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf" +DEBIANNAME_${PN} = "dbus-1" + PACKAGES += "${PN}-lib" FILES_${PN} = "${bindir}/dbus-daemon* ${bindir}/dbus-uuidgen ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services" @@ -63,7 +65,3 @@ do_install_append () { install -m 0755 ${WORKDIR}/dbus-1.init ${D}${sysconfdir}/init.d/dbus-1 } -python populate_packages_prepend () { - if (bb.data.getVar('DEBIAN_NAMES', d, 1)): - bb.data.setVar('PKG_dbus', 'dbus-1', d) -} -- cgit v1.2.3 From db156ba03f2110e6b037eec8cbd7aece27fede13 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 24 Jan 2008 11:02:13 +0000 Subject: libxml2_2.6.29.bb : use new DEBIANNAME handling to rename libxml2 --- packages/libxml/libxml2_2.6.29.bb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/libxml/libxml2_2.6.29.bb b/packages/libxml/libxml2_2.6.29.bb index 521ba16d9b..6f1c8632b1 100644 --- a/packages/libxml/libxml2_2.6.29.bb +++ b/packages/libxml/libxml2_2.6.29.bb @@ -22,11 +22,7 @@ do_stage() { install -m 0755 xml2-config ${STAGING_BINDIR_CROSS} } -python populate_packages_prepend () { - # autonamer would call this libxml2-2, but we don't want that - if bb.data.getVar('DEBIAN_NAMES', d, 1): - bb.data.setVar('PKG_libxml2', 'libxml2', d) -} +DEBIANNAME_${PN} = "libxml2" PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-utils ${PN} ${PN}-doc ${PN}-locale" -- cgit v1.2.3 From 99be5b3387c167d9c4873032e31429848071c974 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 24 Jan 2008 11:57:02 +0000 Subject: cups.inc : break the cups libraries out of cups package, this will reduce dependencies for some packages down from 2.3M to 100k. No reason why if a app support cups that we should haul in the full cups system. --- packages/cups/cups.inc | 8 ++++++-- packages/cups/cups_1.2.10.bb | 2 +- packages/cups/cups_1.2.12.bb | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/cups/cups.inc b/packages/cups/cups.inc index 20cc8c39c3..bbf2377ced 100644 --- a/packages/cups/cups.inc +++ b/packages/cups/cups.inc @@ -64,6 +64,12 @@ python do_package_append() { os.system('chmod 0511 %s/install/cups/var/run/cups/certs' % workdir) } +PACKAGES =+ "${PN}-lib ${PN}-libimage" + +FILES_${PN}-lib = "${libdir}/libcups.so.*" + +FILES_${PN}-libimage = "${libdir}/libcupsimage.so.*" + FILES_${PN}-dbg += "${libdir}/cups/backend/.debug \ ${libdir}/cups/cgi-bin/.debug \ ${libdir}/cups/filter/.debug \ @@ -79,5 +85,3 @@ FILES_${PN} += "${datadir}/doc/cups/images \ ${datadir}/icons/ \ " -LEAD_SONAME = "libcups.so.*" - diff --git a/packages/cups/cups_1.2.10.bb b/packages/cups/cups_1.2.10.bb index 125fc51caf..2361565a91 100644 --- a/packages/cups/cups_1.2.10.bb +++ b/packages/cups/cups_1.2.10.bb @@ -1,4 +1,4 @@ require cups.inc -PR = "r2" +PR = "r3" diff --git a/packages/cups/cups_1.2.12.bb b/packages/cups/cups_1.2.12.bb index 4a4512d790..662f0ec8ff 100644 --- a/packages/cups/cups_1.2.12.bb +++ b/packages/cups/cups_1.2.12.bb @@ -1,5 +1,5 @@ require cups.inc -PR = "r0" +PR = "r1" DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From 2bc8cfae84d8b9663ec7401c408407c6400816e1 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 24 Jan 2008 12:23:56 +0000 Subject: fakeroot: update to latest version 1.9.1 * 1.8.3 had become unfetchable * use DEBIAN_MIRROR * some clean-up (StyleGuide, move common files to files/ instead of $PN-$PV/ --- .../fakeroot/fakeroot-1.8.3/configure-libtool.patch | 18 ------------------ .../fakeroot/fakeroot-native-1.8.3/.mtn2git_empty | 0 .../fakeroot-native-1.8.3/configure-libtool.patch | 18 ------------------ packages/fakeroot/fakeroot-native_1.8.3.bb | 20 -------------------- packages/fakeroot/fakeroot-native_1.9.1.bb | 21 +++++++++++++++++++++ packages/fakeroot/fakeroot_1.8.3.bb | 17 ----------------- packages/fakeroot/fakeroot_1.9.1.bb | 18 ++++++++++++++++++ packages/fakeroot/files/configure-libtool.patch | 18 ++++++++++++++++++ 8 files changed, 57 insertions(+), 73 deletions(-) delete mode 100644 packages/fakeroot/fakeroot-1.8.3/configure-libtool.patch delete mode 100644 packages/fakeroot/fakeroot-native-1.8.3/.mtn2git_empty delete mode 100644 packages/fakeroot/fakeroot-native-1.8.3/configure-libtool.patch delete mode 100644 packages/fakeroot/fakeroot-native_1.8.3.bb create mode 100644 packages/fakeroot/fakeroot-native_1.9.1.bb delete mode 100644 packages/fakeroot/fakeroot_1.8.3.bb create mode 100644 packages/fakeroot/fakeroot_1.9.1.bb create mode 100644 packages/fakeroot/files/configure-libtool.patch diff --git a/packages/fakeroot/fakeroot-1.8.3/configure-libtool.patch b/packages/fakeroot/fakeroot-1.8.3/configure-libtool.patch deleted file mode 100644 index 8830328eb5..0000000000 --- a/packages/fakeroot/fakeroot-1.8.3/configure-libtool.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- fakeroot-1.8.3/configure.ac.orig 2007-10-31 00:17:27.000000000 -0500 -+++ fakeroot-1.8.3/configure.ac 2007-10-31 00:18:12.000000000 -0500 -@@ -1,14 +1,12 @@ - dnl Process this file with autoconf to produce a configure script. - AC_INIT([fakeroot],[FAKEROOT_VERSION],[schizo@debian.org],[fakeroot]) - AC_PREREQ(2.61) --LT_PREREQ(2.1a) - AC_CANONICAL_TARGET - AM_INIT_AUTOMAKE - AM_MAINTAINER_MODE - AC_CONFIG_HEADERS([config.h]) - AC_PROG_MAKE_SET --LT_INIT --LT_LANG(C) -+AC_PROG_LIBTOOL - - AC_ARG_WITH([ipc], - AS_HELP_STRING([--with-ipc@<:@=IPCTYPE@:>@], diff --git a/packages/fakeroot/fakeroot-native-1.8.3/.mtn2git_empty b/packages/fakeroot/fakeroot-native-1.8.3/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/fakeroot/fakeroot-native-1.8.3/configure-libtool.patch b/packages/fakeroot/fakeroot-native-1.8.3/configure-libtool.patch deleted file mode 100644 index 8830328eb5..0000000000 --- a/packages/fakeroot/fakeroot-native-1.8.3/configure-libtool.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- fakeroot-1.8.3/configure.ac.orig 2007-10-31 00:17:27.000000000 -0500 -+++ fakeroot-1.8.3/configure.ac 2007-10-31 00:18:12.000000000 -0500 -@@ -1,14 +1,12 @@ - dnl Process this file with autoconf to produce a configure script. - AC_INIT([fakeroot],[FAKEROOT_VERSION],[schizo@debian.org],[fakeroot]) - AC_PREREQ(2.61) --LT_PREREQ(2.1a) - AC_CANONICAL_TARGET - AM_INIT_AUTOMAKE - AM_MAINTAINER_MODE - AC_CONFIG_HEADERS([config.h]) - AC_PROG_MAKE_SET --LT_INIT --LT_LANG(C) -+AC_PROG_LIBTOOL - - AC_ARG_WITH([ipc], - AS_HELP_STRING([--with-ipc@<:@=IPCTYPE@:>@], diff --git a/packages/fakeroot/fakeroot-native_1.8.3.bb b/packages/fakeroot/fakeroot-native_1.8.3.bb deleted file mode 100644 index 8b3d2a1590..0000000000 --- a/packages/fakeroot/fakeroot-native_1.8.3.bb +++ /dev/null @@ -1,20 +0,0 @@ -SECTION = "base" -require fakeroot_${PV}.bb -inherit native -RDEPENDS="util-linux-native" - -SRC_URI += "file://fix-prefix.patch;patch=1 " -S = "${WORKDIR}/fakeroot-${PV}" - -EXTRA_OECONF = " --program-prefix=" - -# Compatability for the rare systems not using or having SYSV -python () { - if bb.data.getVar('HOST_NONSYSV', d, True) and bb.data.getVar('HOST_NONSYSV', d, True) != '0': - bb.data.setVar('EXTRA_OECONF', ' --with-ipc=tcp --program-prefix= ', d) -} - -do_stage_append () { - oe_libinstall -so libfakeroot ${STAGING_LIBDIR}/libfakeroot/ -} - diff --git a/packages/fakeroot/fakeroot-native_1.9.1.bb b/packages/fakeroot/fakeroot-native_1.9.1.bb new file mode 100644 index 0000000000..77d6f58651 --- /dev/null +++ b/packages/fakeroot/fakeroot-native_1.9.1.bb @@ -0,0 +1,21 @@ +require fakeroot_${PV}.bb + +RDEPENDS="util-linux-native" + +SRC_URI += "file://fix-prefix.patch;patch=1 " +S = "${WORKDIR}/fakeroot-${PV}" + +inherit native + +EXTRA_OECONF = " --program-prefix=" + +# Compatability for the rare systems not using or having SYSV +python () { + if bb.data.getVar('HOST_NONSYSV', d, True) and bb.data.getVar('HOST_NONSYSV', d, True) != '0': + bb.data.setVar('EXTRA_OECONF', ' --with-ipc=tcp --program-prefix= ', d) +} + +do_stage_append () { + oe_libinstall -so libfakeroot ${STAGING_LIBDIR}/libfakeroot/ +} + diff --git a/packages/fakeroot/fakeroot_1.8.3.bb b/packages/fakeroot/fakeroot_1.8.3.bb deleted file mode 100644 index ef4d1ba55c..0000000000 --- a/packages/fakeroot/fakeroot_1.8.3.bb +++ /dev/null @@ -1,17 +0,0 @@ -DESCRIPTION = "Gives a fake root environment" -SECTION = "base" -LICENSE = "GPL" -# fakeroot needs getopt which is provided by the util-linux package -RDEPENDS = "util-linux" -PR = "r1" - -SRC_URI = "ftp://ftp.debian.org/debian/pool/main/f/fakeroot/fakeroot_${PV}.tar.gz \ - file://configure-libtool.patch;patch=1" - -inherit autotools - -do_stage() { - install -d ${STAGING_INCDIR}/fakeroot - install -m 644 *.h ${STAGING_INCDIR}/fakeroot - autotools_stage_all -} diff --git a/packages/fakeroot/fakeroot_1.9.1.bb b/packages/fakeroot/fakeroot_1.9.1.bb new file mode 100644 index 0000000000..aaf696d79d --- /dev/null +++ b/packages/fakeroot/fakeroot_1.9.1.bb @@ -0,0 +1,18 @@ +DESCRIPTION = "Gives a fake root environment" +HOMEPAGE = "http://fakeroot.alioth.debian.org/" +SECTION = "base" +LICENSE = "GPL" +# fakeroot needs getopt which is provided by the util-linux package +RDEPENDS = "util-linux" +PR = "r1" + +SRC_URI = "${DEBIAN_MIRROR}/main/f/fakeroot/fakeroot_${PV}.tar.gz \ + file://configure-libtool.patch;patch=1" + +inherit autotools + +do_stage() { + install -d ${STAGING_INCDIR}/fakeroot + install -m 644 *.h ${STAGING_INCDIR}/fakeroot + autotools_stage_all +} diff --git a/packages/fakeroot/files/configure-libtool.patch b/packages/fakeroot/files/configure-libtool.patch new file mode 100644 index 0000000000..8830328eb5 --- /dev/null +++ b/packages/fakeroot/files/configure-libtool.patch @@ -0,0 +1,18 @@ +--- fakeroot-1.8.3/configure.ac.orig 2007-10-31 00:17:27.000000000 -0500 ++++ fakeroot-1.8.3/configure.ac 2007-10-31 00:18:12.000000000 -0500 +@@ -1,14 +1,12 @@ + dnl Process this file with autoconf to produce a configure script. + AC_INIT([fakeroot],[FAKEROOT_VERSION],[schizo@debian.org],[fakeroot]) + AC_PREREQ(2.61) +-LT_PREREQ(2.1a) + AC_CANONICAL_TARGET + AM_INIT_AUTOMAKE + AM_MAINTAINER_MODE + AC_CONFIG_HEADERS([config.h]) + AC_PROG_MAKE_SET +-LT_INIT +-LT_LANG(C) ++AC_PROG_LIBTOOL + + AC_ARG_WITH([ipc], + AS_HELP_STRING([--with-ipc@<:@=IPCTYPE@:>@], -- cgit v1.2.3 From 0793456d9399a57b490237eb776011845d6b6769 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 24 Jan 2008 12:33:11 +0000 Subject: contrib/distro-packages: fix an error in changelog so devscripts do work again --- .../distro-packages/debian/openembedded-essential-1.4/debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog index 74193e30fd..8485f3e720 100644 --- a/contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog +++ b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog @@ -3,7 +3,7 @@ openembedded-essential (1.4) unstable; urgency=low * remove gfortran from dependency after a5c7b007eaa675cc904f5285291d2f8a597efc84 caused controversy. Ultimately it was decided that OE should not depend on gfortran and that another solution ought to be found. The gfortran check in sanity.bbclass was dropped in 63c7ad87655c2781ad8b9c81af430596f48a24a6 -* add bc and python-pysqlite2 + * add bc and python-pysqlite2 for rpm -- Rolf Leggewie Mon, 19 Jan 2008 14:25:00 +0100 -- cgit v1.2.3 From e762f9c4ea24e9bd3adebe51f2a88d5f95ea1cb6 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 24 Jan 2008 13:03:46 +0000 Subject: contrib/distro-packages: provide patch for building ubuntu packages --- .../debian/openembedded-essential-1.4/ubuntu.patch | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 contrib/distro-packages/debian/openembedded-essential-1.4/ubuntu.patch diff --git a/contrib/distro-packages/debian/openembedded-essential-1.4/ubuntu.patch b/contrib/distro-packages/debian/openembedded-essential-1.4/ubuntu.patch new file mode 100644 index 0000000000..80863d59fe --- /dev/null +++ b/contrib/distro-packages/debian/openembedded-essential-1.4/ubuntu.patch @@ -0,0 +1,22 @@ +# +# old_revision [63896b37ec0e055133c2e295f7c89e4677091511] +# +# patch "contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog" +# from [b1e7c5d0ed3dddbab736f23b57df2386b6937e4d] +# to [bb02f8caa6f5eaa903b4d65150392583072c7bea] +# +============================================================ +--- contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog +b1e7c5d0ed3dddbab736f23b57df2386b6937e4d ++++ contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog +bb02f8caa6f5eaa903b4d65150392583072c7bea +@@ -1,3 +1,9 @@ ++openembedded-essential (1.4ubuntu1) gutsy; urgency=low ++ ++ * prepare ubuntu package ++ ++ -- Rolf Leggewie Thu, 24 Jan 2008 13:49:26 +0100 ++ + openembedded-essential (1.4) unstable; urgency=low + + * remove gfortran from dependency after a5c7b007eaa675cc904f5285291d2f8a597efc84 caused controversy. -- cgit v1.2.3 From df8c1b2fc46ccae1e517768b56317ffdb2150409 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 24 Jan 2008 14:14:35 +0000 Subject: libvoc, libtapi: Add SVN recipe --- packages/gpephone/libtapi_svn.bb | 17 +++++++++++++++++ packages/gpephone/libvoc_svn.bb | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 packages/gpephone/libtapi_svn.bb create mode 100644 packages/gpephone/libvoc_svn.bb diff --git a/packages/gpephone/libtapi_svn.bb b/packages/gpephone/libtapi_svn.bb new file mode 100644 index 0000000000..68e578728a --- /dev/null +++ b/packages/gpephone/libtapi_svn.bb @@ -0,0 +1,17 @@ +LICENSE = "LiPS" +DESCRIPTION = "LiPS telephony library." +SECTION = "gpe/libs" +PRIORITY = "optional" +DEPENDS = "gtk+ libglade libgsmd" +PV = "0.0+svnr-${SRCREV}" +PR = "r0" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN}" + +S = "${WORKDIR}/${PN}" + +do_stage () { + autotools_stage_all +} diff --git a/packages/gpephone/libvoc_svn.bb b/packages/gpephone/libvoc_svn.bb new file mode 100644 index 0000000000..3389c7d10a --- /dev/null +++ b/packages/gpephone/libvoc_svn.bb @@ -0,0 +1,17 @@ +LICENSE = "LiPS" +DESCRIPTION = "LiPS voice call library." +SECTION = "gpe/libs" +PRIORITY = "optional" +DEPENDS = "gtk+ libglade libgsmd" +PV = "0.0+svnr-${SRCREV}" +PR = "r0" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN}" + +S = "${WORKDIR}/${PN}" + +do_stage () { + autotools_stage_all +} -- cgit v1.2.3 From f1b48b3a26ab80e3f18edead4d7bfd1d0addf4b2 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 24 Jan 2008 14:19:31 +0000 Subject: dummy ci --- conf/distro/include/angstrom-uclibc.inc | 5 + conf/distro/include/angstrom.inc | 2 + conf/machine/at32stk1000.conf | 6 +- conf/machine/atngw100.conf | 6 +- packages/avahi/avahi_0.6.21.bb | 1 + packages/avahi/files/avr32-ipv6-fix.patch | 42 + packages/binutils/binutils_2.17.bb | 3 +- .../busybox/busybox-1.2.1/avr32/.mtn2git_empty | 0 packages/busybox/busybox-1.7.2/angstrom/defconfig | 30 +- packages/busybox/busybox_1.2.1.bb | 1 + packages/fuse/gmailfs.inc | 23 +- packages/gcc/gcc-cross_4.1.2.bb | 2 + packages/gcc/gcc-package-cross.inc | 10 +- packages/gcc/gcc-package.inc | 6 +- packages/gcc/gcc_4.1.2.bb | 19 + packages/gcc/gcc_4.2.1.bb | 31 +- packages/gpephone/libmsgenabler2_svn.bb | 2 +- packages/gtk+/gtk+_2.10.14.bb | 1 + packages/gtk+/gtk+_2.12.0.bb | 5 +- packages/hwdata/hwdata_0.191.bb | 6 +- packages/libmad/libmad_0.15.1b.bb | 3 + packages/linux/linux_2.6.23.bb | 5 + .../linux/mainstone-kernel/mainstone_defconfig | 1277 ---- packages/linux/mainstone-kernel_2.6.18.bb | 1 + .../mplayer/files/mplayer-1.0rc1-atmel.2.patch | 6444 ++++++++++++++++++++ packages/mplayer/mplayer_0.0+1.0rc1.bb | 8 +- packages/tasks/task-gpephone.bb | 19 +- packages/tasks/task-sdk-base.bb | 3 +- packages/tasks/task-sdk-gpephone.bb | 24 +- packages/tea/tea_17.3.5.bb | 2 + .../libtinymail-0.0.1/no-iconv-detect.patch | 76 +- .../uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch | 2135 +++++++ .../avr32/avr32-linkrelax-option.patch | 40 + .../uclibc-0.9.28/avr32/avr32-string-ops.patch | 1139 ++++ .../fix-__libc_fcntl64-varargs-prototype.patch | 24 + .../avr32/fix-broken-__libc_open-declaration.patch | 30 + .../avr32/fix-getrusage-argument-type.patch | 19 + .../uclibc-0.9.28/avr32/ldd-avr32-support.patch | 25 + .../avr32/ldso-always-inline-_dl_memcpy.patch | 24 + .../avr32/ldso-always-inline-syscalls.patch | 107 + .../uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch | 526 ++ ...dso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch | 23 + .../avr32/ldso-avr32-startup-hack.patch | 40 + .../avr32/ldso-define-MAP_FAILED.patch | 23 + ...optimized-stringops-override-default-ones.patch | 28 + .../uclibc-0.9.28/avr32/libpthread-avr32.patch | 105 + .../avr32/no-create_module-on-avr32.patch | 27 + ...ack-and-just-use-asm-generic-if-it-exists.patch | 48 + .../avr32/sync-fcntl-h-with-linux-kernel.patch | 54 + .../avr32/uClibc-0.9.28-avr32-20060621.patch | 4322 +++++++++++++ .../avr32/uClibc-0.9.28-avr32-20061019.patch | 4080 +++++++++++++ packages/uclibc/uclibc-0.9.28/avr32/uClibc.config | 31 +- .../avr32/uclibc-avr32-kernheaders.spec | 41 + .../avr32/uclibc-avr32-no-msoft-float.patch | 14 + .../uclibc-0.9.28/avr32/uclibc-makefile.patch | 16 + packages/uclibc/uclibc.inc | 15 +- packages/uclibc/uclibc_0.9.28.bb | 30 +- .../util-linux/files/fdiskbsdlabel-avr32.patch | 11 + packages/util-linux/util-linux_2.12r.bb | 3 +- packages/xorg-font/xfonts-xorg_6.8.bb | 5 +- packages/xorg-lib/libx11-native_1.0.1.bb | 3 +- packages/xorg-xserver/xorg-xserver-common.inc | 1 + packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb | 4 + packages/xorg-xserver/xserver-kdrive_1.4.bb | 3 +- site/avr32-common | 22 + 65 files changed, 19620 insertions(+), 1461 deletions(-) create mode 100644 packages/avahi/files/avr32-ipv6-fix.patch create mode 100644 packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty delete mode 100644 packages/linux/mainstone-kernel/mainstone_defconfig create mode 100644 packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch create mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch create mode 100644 packages/util-linux/files/fdiskbsdlabel-avr32.patch diff --git a/conf/distro/include/angstrom-uclibc.inc b/conf/distro/include/angstrom-uclibc.inc index 59d40957d5..7e8e60d7dd 100644 --- a/conf/distro/include/angstrom-uclibc.inc +++ b/conf/distro/include/angstrom-uclibc.inc @@ -14,5 +14,10 @@ TARGET_OS = "${@['${TARGET_OS_UC}', 'uclinux-uclibc'][bb.data.getVar('TARGET_ARC #Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os" BUILD_OPTIMIZATION = "-Os" + +#Gcc will die with 'internal consistency error when using the above optimizations +FULL_OPTIMIZATION_avr32 = "" +BUILD_OPTIMIZATION_avr32 = "" + CXXFLAGS += "-fvisibility-inlines-hidden" diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc index aff3ba90d1..fe216800c3 100644 --- a/conf/distro/include/angstrom.inc +++ b/conf/distro/include/angstrom.inc @@ -50,6 +50,8 @@ TARGET_FPU_arm ?= "soft" TARGET_FPU_armeb ?= "soft" TARGET_FPU_ixp4xx ?= "soft" +TARGET_FPU_dht-walnut ?= "soft" + #Set the right arch for the feeds #Alphabetically sorted diff --git a/conf/machine/at32stk1000.conf b/conf/machine/at32stk1000.conf index 2231f80ed2..ac63af5e56 100644 --- a/conf/machine/at32stk1000.conf +++ b/conf/machine/at32stk1000.conf @@ -11,7 +11,7 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive" #don't try to access tty1 USE_VT = "0" -MACHINE_FEATURES = "kernel26 alsa ext2 usbhost usbgadget screen" +MACHINE_FEATURES = "kernel26 alsa ext2 usbgadget touchscreen screen" # used by sysvinit_2 SERIAL_CONSOLE = "115200" @@ -21,3 +21,7 @@ ROOT_FLASH_SIZE = "8" EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" KERNEL_IMAGETYPE = "uImage" +PREFERRED_VERSION_u-boot = "1.1.4" + +ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* || true;" + diff --git a/conf/machine/atngw100.conf b/conf/machine/atngw100.conf index 4df1030570..17b4c4187a 100644 --- a/conf/machine/atngw100.conf +++ b/conf/machine/atngw100.conf @@ -9,7 +9,8 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive" #don't try to access tty1 USE_VT = "0" -MACHINE_FEATURES = "kernel26 ext2 usbhost usbgadget" +MACHINE_FEATURES = "kernel26 ext2 usbgadget" +PREFERRED_PROVIDER_virtual/kernel = "linux" # used by sysvinit_2 SERIAL_CONSOLE = "115200" @@ -18,4 +19,7 @@ SERIAL_CONSOLE = "115200" ROOT_FLASH_SIZE = "8" EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" +PREFERRED_VERSION_u-boot = "1.1.4" KERNEL_IMAGETYPE = "uImage" + +ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* || true ;" diff --git a/packages/avahi/avahi_0.6.21.bb b/packages/avahi/avahi_0.6.21.bb index fa3fef039e..2c30fbc2c8 100644 --- a/packages/avahi/avahi_0.6.21.bb +++ b/packages/avahi/avahi_0.6.21.bb @@ -2,3 +2,4 @@ require avahi.inc PR = "r1" SRC_URI += "file://dbus-pre-1.1.1-support.patch;patch=1" +SRC_URI += "file://avr32-ipv6-fix.patch;patch=1" diff --git a/packages/avahi/files/avr32-ipv6-fix.patch b/packages/avahi/files/avr32-ipv6-fix.patch new file mode 100644 index 0000000000..f0710a1002 --- /dev/null +++ b/packages/avahi/files/avr32-ipv6-fix.patch @@ -0,0 +1,42 @@ +--- /tmp/socket.c 2007-09-14 14:03:01.395330465 +0200 ++++ avahi-0.6.21/avahi-core/socket.c 2007-09-14 14:08:42.081140297 +0200 +@@ -66,6 +66,39 @@ + #endif + #endif + ++#define IPV6_ADDRFORM 1 ++#define IPV6_2292PKTINFO 2 ++#define IPV6_2292HOPOPTS 3 ++#define IPV6_2292DSTOPTS 4 ++#define IPV6_2292RTHDR 5 ++#define IPV6_2292PKTOPTIONS 6 ++#define IPV6_CHECKSUM 7 ++#define IPV6_2292HOPLIMIT 8 ++#define IPV6_NEXTHOP 9 ++#define IPV6_AUTHHDR 10 /* obsolete */ ++#define IPV6_FLOWINFO 11 ++ ++#define IPV6_UNICAST_HOPS 16 ++#define IPV6_MULTICAST_IF 17 ++#define IPV6_MULTICAST_HOPS 18 ++#define IPV6_MULTICAST_LOOP 19 ++#define IPV6_ADD_MEMBERSHIP 20 ++#define IPV6_DROP_MEMBERSHIP 21 ++#define IPV6_ROUTER_ALERT 22 ++#define IPV6_MTU_DISCOVER 23 ++#define IPV6_MTU 24 ++#define IPV6_RECVERR 25 ++#define IPV6_V6ONLY 26 ++#define IPV6_JOIN_ANYCAST 27 ++#define IPV6_LEAVE_ANYCAST 28 ++ ++/* IPV6_MTU_DISCOVER values */ ++#define IPV6_PMTUDISC_DONT 0 ++#define IPV6_PMTUDISC_WANT 1 ++#define IPV6_PMTUDISC_DO 2 ++#define IPV6_PMTUDISC_PROBE 3 ++ ++ + static void mdns_mcast_group_ipv4(struct sockaddr_in *ret_sa) { + assert(ret_sa); + diff --git a/packages/binutils/binutils_2.17.bb b/packages/binutils/binutils_2.17.bb index 8d38f3a459..69e11497c2 100644 --- a/packages/binutils/binutils_2.17.bb +++ b/packages/binutils/binutils_2.17.bb @@ -1,6 +1,6 @@ require binutils.inc -PR = "r1" +PR = "r2" SRC_URI = \ "http://ftp.gnu.org/gnu/binutils/binutils-${PV}.tar.bz2 \ @@ -21,6 +21,7 @@ SRC_URI += "\ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/500-avr32.patch.gz;patch=1 \ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/501-avr32-sreldyn-fix.patch.gz;patch=1 \ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/502-avr32-bfd-dont-allow-direct-refs-to-bss.patch.gz;patch=1 \ + file://503-avr32-fix-got-offset-init.patch;patch=1 \ " # Zecke's OSX fixes diff --git a/packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty b/packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/busybox/busybox-1.7.2/angstrom/defconfig b/packages/busybox/busybox-1.7.2/angstrom/defconfig index 30e71e8ffe..29ae0e541c 100644 --- a/packages/busybox/busybox-1.7.2/angstrom/defconfig +++ b/packages/busybox/busybox-1.7.2/angstrom/defconfig @@ -353,15 +353,15 @@ CONFIG_XARGS=y # # Init Utilities # -# CONFIG_INIT is not set +CONFIG_INIT=y # CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set +CONFIG_FEATURE_USE_INITTAB=y +CONFIG_FEATURE_INIT_SCTTY=y # CONFIG_FEATURE_INIT_SYSLOG is not set # CONFIG_FEATURE_EXTRA_QUIET is not set # CONFIG_FEATURE_INIT_COREDUMPS is not set # CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set +CONFIG_HALT=y # CONFIG_MESG is not set # @@ -376,10 +376,10 @@ CONFIG_XARGS=y # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set # CONFIG_ADDUSER is not set # CONFIG_DELUSER is not set -# CONFIG_GETTY is not set +CONFIG_GETTY=y CONFIG_FEATURE_UTMP=y # CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set +CONFIG_LOGIN=y # CONFIG_PAM is not set # CONFIG_LOGIN_SCRIPTS is not set # CONFIG_FEATURE_NOLOGIN is not set @@ -479,7 +479,7 @@ CONFIG_RDATE=y CONFIG_SWAPONOFF=y CONFIG_SWITCH_ROOT=y CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set +CONFIG_FEATURE_UMOUNT_ALL=y # # Common options for mount/umount @@ -522,7 +522,7 @@ CONFIG_FEATURE_LESS_FLAGS=y # CONFIG_MAKEDEVS is not set # CONFIG_FEATURE_MAKEDEVS_LEAF is not set # CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set +CONFIG_MOUNTPOINT=y # CONFIG_MT is not set # CONFIG_RAIDAUTORUN is not set # CONFIG_READAHEAD is not set @@ -577,12 +577,12 @@ CONFIG_FEATURE_IFUPDOWN_IPV4=y CONFIG_FEATURE_IFUPDOWN_IPV6=y CONFIG_FEATURE_IFUPDOWN_MAPPING=y # CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set +CONFIG_INETD=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y # CONFIG_FEATURE_INETD_RPC is not set CONFIG_IP=y CONFIG_FEATURE_IP_ADDRESS=y @@ -615,7 +615,7 @@ CONFIG_ROUTE=y CONFIG_TELNET=y # CONFIG_FEATURE_TELNET_TTYPE is not set CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set +CONFIG_TELNETD=y # CONFIG_FEATURE_TELNETD_STANDALONE is not set CONFIG_TFTP=y CONFIG_FEATURE_TFTP_GET=y diff --git a/packages/busybox/busybox_1.2.1.bb b/packages/busybox/busybox_1.2.1.bb index 325111c22f..3b7016a42c 100644 --- a/packages/busybox/busybox_1.2.1.bb +++ b/packages/busybox/busybox_1.2.1.bb @@ -5,6 +5,7 @@ PR = "r15" SRC_URI += "file://wget-long-options.patch;patch=1 \ file://df_rootfs.patch;patch=1 \ file://defconfig" +SRC_URI_append_avr32 = " file://install-should-unlink-dest-if-it-exists.patch;patch=1" do_configure () { install -m 0644 ${WORKDIR}/defconfig ${S}/.config.oe diff --git a/packages/fuse/gmailfs.inc b/packages/fuse/gmailfs.inc index 9f1c676c87..de4ea18089 100644 --- a/packages/fuse/gmailfs.inc +++ b/packages/fuse/gmailfs.inc @@ -1,22 +1 @@ -DESCRIPTION = "GmailFS provides a mountable Linux filesystem which uses your Gmail account as its storage medium." -HOMEPAGE = "http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html" -LICENSE = "GPLv2" - -DEPENDS = "fuse python-libgmail python-fuse" -RDEPENDS = "fuse python-libgmail python-fuse python-unixadmin python-lang python-textutils python-core" - -SRC_URI = "http://richard.jones.name/google-hacks/gmail-filesystem/${PN}-${PV}.tar.gz" - - -do_install() { - -install -d ${D}${datadir}/gmailfs -install -d ${D}${bindir} -install -d ${D}${sysconfdir} - -install -m 755 ${S}/gmailfs.py ${D}${datadir}/gmailfs/ -install -m 755 ${S}/mount.gmailfs ${D}${bindir} -install -m 644 ${S}/*.conf ${D}${sysconfdir} - -} - +require gmailfs.inc diff --git a/packages/gcc/gcc-cross_4.1.2.bb b/packages/gcc/gcc-cross_4.1.2.bb index 0f63487f2c..306cf9539c 100644 --- a/packages/gcc/gcc-cross_4.1.2.bb +++ b/packages/gcc/gcc-cross_4.1.2.bb @@ -17,4 +17,6 @@ require gcc-package-cross.inc SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 " +EXTRA_OECONF_append_avr32= " --disable-libmudflap " + EXTRA_OECONF += "--disable-libunwind-exceptions --with-mpfr=${STAGING_DIR_NATIVE}${layout_exec_prefix}" diff --git a/packages/gcc/gcc-package-cross.inc b/packages/gcc/gcc-package-cross.inc index 5c6b370d82..51a45cd633 100644 --- a/packages/gcc/gcc-package-cross.inc +++ b/packages/gcc/gcc-package-cross.inc @@ -43,12 +43,12 @@ do_install () { # Already in the right location : elif [ -f ${D}${prefix}/lib/libgcc_s.so.? ]; then - mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir} + mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir} || true elif [ -f ${D}${prefix}/*/lib/nof/libgcc_s.so.? ]; then mv -f ${D}${prefix}/*/lib/nof/libgcc_s.so* ${D}${target_base_libdir} else - mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} + mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} || true fi @@ -58,12 +58,12 @@ do_install () { if [ -f ${D}${prefix}/*/lib/nof/libstdc++.so ]; then - mv -f ${D}${prefix}/*/lib/nof/libstdc++.so* ${D}${target_libdir} + mv -f ${D}${prefix}/*/lib/nof/libstdc++.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/nof/libg2c.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/nof/libgfortran*.so* ${D}${target_libdir} || true else - mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} + mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/libg2c.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/libgfortran*.so* ${D}${target_libdir} || true fi @@ -75,7 +75,7 @@ do_install () { if [ "x${OLD_INHIBIT_PACKAGE_STRIP}" != "x1" ]; then ${TARGET_PREFIX}strip ${D}${target_libdir}/libstdc++.so.* ${TARGET_PREFIX}strip ${D}${target_libdir}/libg2c.so.* || true - ${TARGET_PREFIX}strip ${D}${target_base_libdir}/libgcc_s.so.* + ${TARGET_PREFIX}strip ${D}${target_base_libdir}/libgcc_s.so.* || true ${TARGET_PREFIX}strip ${D}${target_libdir}/libgfortran*.so* || true fi diff --git a/packages/gcc/gcc-package.inc b/packages/gcc/gcc-package.inc index d1b4607de5..96f1604997 100644 --- a/packages/gcc/gcc-package.inc +++ b/packages/gcc/gcc-package.inc @@ -92,11 +92,7 @@ do_install () { # Move libgcc_s into /lib mkdir -p ${D}${base_libdir} - if [ -f ${D}${libdir}/nof/libgcc_s.so ]; then - mv ${D}${libdir}/nof/libgcc_s.so.* ${D}${base_libdir} - else - mv ${D}${libdir}/libgcc_s.so.* ${D}${base_libdir} - fi + mv ${D}${libdir}/libgcc_s.so.* ${D}${base_libdir} rm -f ${D}${libdir}/libgcc_s.so ln -sf `echo ${libdir}/gcc/${TARGET_SYS}/${BINV} \ | tr -s / \ diff --git a/packages/gcc/gcc_4.1.2.bb b/packages/gcc/gcc_4.1.2.bb index e0801d3c7f..b3eb0100e8 100644 --- a/packages/gcc/gcc_4.1.2.bb +++ b/packages/gcc/gcc_4.1.2.bb @@ -39,6 +39,25 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2 \ SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 " +SRC_URI_avr32 = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.1.0.tar.gz \ +# file://100-uclibc-conf.patch;patch=1 \ +# file://200-uclibc-locale.patch;patch=1 \ +# file://300-libstdc++-pic.patch;patch=1 \ + file://301-missing-execinfo_h.patch;patch=1 \ + file://302-c99-snprintf.patch;patch=1 \ + file://303-c99-complex-ugly-hack.patch;patch=1 \ + file://304-index_macro.patch;patch=1 \ + file://602-sdk-libstdc++-includes.patch;patch=1 \ + file://gcc41-configure.in.patch;patch=1 \ + file://ldflags.patch;patch=1 \ + file://zecke-xgcc-cpp.patch;patch=1 \ + file://cache-amnesia.patch;patch=1 \ + " + +do_compile_prepend_avr32() { + ln -sf ${S}/libstdc++-v3/config/os/uclibc/ ${S}/libstdc++-v3/config/os/uclibc-linux +} + #Set the fortran bits # ',fortran' or '', not 'f77' like gcc3 had FORTRAN = "" diff --git a/packages/gcc/gcc_4.2.1.bb b/packages/gcc/gcc_4.2.1.bb index 5d049398e4..4df5f4cc4a 100644 --- a/packages/gcc/gcc_4.2.1.bb +++ b/packages/gcc/gcc_4.2.1.bb @@ -39,7 +39,34 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \ file://cache-amnesia.patch;patch=1 \ file://gfortran.patch;patch=1 \ - file://pr34130.patch;patch=1 \ + file://pr34130.patch;patch=1 \ +" + + +SRC_URI_avr32 = " http://ewi546.ewi.utwente.nl/tmp/avr32-gcc-4.2.1-atmel.1.0.1.tar.gz \ + file://100-uclibc-conf.patch;patch=1 \ + file://103-uclibc-conf-noupstream.patch;patch=1 \ + file://200-uclibc-locale.patch;patch=1 \ + file://203-uclibc-locale-no__x.patch;patch=1 \ + file://204-uclibc-locale-wchar_fix.patch;patch=1 \ + file://205-uclibc-locale-update.patch;patch=1 \ + file://300-libstdc++-pic.patch;patch=1 \ + file://301-missing-execinfo_h.patch;patch=1 \ + file://302-c99-snprintf.patch;patch=1 \ + file://303-c99-complex-ugly-hack.patch;patch=1 \ + file://304-index_macro.patch;patch=1 \ + file://305-libmudflap-susv3-legacy.patch;patch=1 \ + file://306-libstdc++-namespace.patch;patch=1 \ + file://307-locale_facets.patch;patch=1 \ + file://402-libbackend_dep_gcov-iov.h.patch;patch=1 \ + file://602-sdk-libstdc++-includes.patch;patch=1 \ + file://740-sh-pr24836.patch;patch=1 \ + file://904-flatten-switch-stmt-00.patch;patch=1 \ + file://gcc41-configure.in.patch;patch=1 \ + file://ldflags.patch;patch=1 \ + file://zecke-xgcc-cpp.patch;patch=1 \ + file://cache-amnesia.patch;patch=1 \ + file://gfortran.patch;patch=1 \ " SRC_URI_append_ep93xx = " \ @@ -80,5 +107,5 @@ require gcc3-build.inc ARCH_FLAGS_FOR_TARGET=-isystem${STAGING_INCDIR} -EXTRA_OECONF += " --disable-libssp --disable-bootstrap " +EXTRA_OECONF += " --disable-libgomp --disable-libssp --disable-bootstrap " diff --git a/packages/gpephone/libmsgenabler2_svn.bb b/packages/gpephone/libmsgenabler2_svn.bb index a294dc93b7..b105211bde 100644 --- a/packages/gpephone/libmsgenabler2_svn.bb +++ b/packages/gpephone/libmsgenabler2_svn.bb @@ -2,7 +2,7 @@ LICENSE = "LiPS" DESCRIPTION = "LiPS message backend library." SECTION = "gpe/libs" PRIORITY = "optional" -DEPENDS = "glib-2.0 dbus-glib librecord2 liblipsevent2 telepathy-mission-control libgsmd-lips" +DEPENDS = "glib-2.0 dbus-glib librecord2 liblipsevent2 telepathy-mission-control libgsmd libtapi" PV = "0.0+svnr-${SRCREV}" PR = "r2" diff --git a/packages/gtk+/gtk+_2.10.14.bb b/packages/gtk+/gtk+_2.10.14.bb index d8ae8ae9ba..ff6f195fa0 100644 --- a/packages/gtk+/gtk+_2.10.14.bb +++ b/packages/gtk+/gtk+_2.10.14.bb @@ -25,6 +25,7 @@ SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \ file://scrolled-placement.patch;patch=1;pnum=0 \ file://treeview-checkbox-size.patch;patch=1;pnum=0 \ file://cell-renderer-edit-focus.patch;patch=1;pnum=0 \ + file://iconview-touchscreen.patch;patch=1 \ " # check for TARGET_FPU=soft and inform configure of the result so it can disable some floating points diff --git a/packages/gtk+/gtk+_2.12.0.bb b/packages/gtk+/gtk+_2.12.0.bb index 57ba24e796..e18effba38 100644 --- a/packages/gtk+/gtk+_2.12.0.bb +++ b/packages/gtk+/gtk+_2.12.0.bb @@ -1,6 +1,6 @@ require gtk+.inc -PR = "r1" +PR = "r2" DEPENDS += "cairo" @@ -16,7 +16,8 @@ SRC_URI = "http://download.gnome.org/sources/gtk+/2.12/gtk+-${PV}.tar.bz2 \ file://cellrenderer-cairo.patch;patch=1;pnum=0 \ file://entry-cairo.patch;patch=1;pnum=0 \ file://toggle-font.diff;patch=1;pnum=0 \ - file://scrolled-placement.patch;patch=1;pnum=0" + file://scrolled-placement.patch;patch=1;pnum=0 \ + file://iconview-touchscreen.patch;patch=1" # temporary # file://gtklabel-resize-patch;patch=1 \ # file://menu-deactivate.patch;patch=1 \ diff --git a/packages/hwdata/hwdata_0.191.bb b/packages/hwdata/hwdata_0.191.bb index 5d607ddc1a..2dfe1433bf 100644 --- a/packages/hwdata/hwdata_0.191.bb +++ b/packages/hwdata/hwdata_0.191.bb @@ -1,16 +1,14 @@ DESCRIPTION = "This package contains various hardware identification and configuration data, such as the pci.ids database, or the XFree86/xorg Cards database. It's needed for the kudzu hardware detection." LICENSE = "GPL + X11" -PR = "r1" - SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/main/h/hwdata/hwdata_0.191.orig.tar.gz \ http://archive.ubuntu.com/ubuntu/pool/main/h/hwdata/hwdata_0.191-1.diff.gz;patch=1 \ " PACKAGE_ARCH = "all" -FILES_${PN} = "${datadir}" + do_install() { mkdir -p ${D}${datadir}/hwdata - install -m 644 MonitorsDB pci* usb.ids video* upgradelist ${D}${datadir}/hwdata + install -m644 MonitorsDB pci* usb.ids video* upgradelist ${D}${datadir}/hwdata } diff --git a/packages/libmad/libmad_0.15.1b.bb b/packages/libmad/libmad_0.15.1b.bb index 4e486236cd..b2a3be36ca 100644 --- a/packages/libmad/libmad_0.15.1b.bb +++ b/packages/libmad/libmad_0.15.1b.bb @@ -3,8 +3,11 @@ SECTION = "libs" PRIORITY = "optional" DEPENDS = "libid3tag" LICENSE = "GPL" +PR = "r1" SRC_URI = "${SOURCEFORGE_MIRROR}/mad/libmad-${PV}.tar.gz" +SRC_URI_append_avr32 = " file://libmad-0.15.1b-avr32-optimization.patch;patch=1" + S = "${WORKDIR}/libmad-${PV}" inherit autotools diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb index c143e1dbf9..10c5242582 100644 --- a/packages/linux/linux_2.6.23.bb +++ b/packages/linux/linux_2.6.23.bb @@ -5,6 +5,7 @@ DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_cm-x270 = "1" DEFAULT_PREFERENCE_mpc8313e-rdb = "1" DEFAULT_PREFERENCE_mpc8323e-rdb = "1" +DEFAULT_PREFERENCE_avr32 = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" DEPENDS_append_mpc8323e-rdb = " dtc-native" @@ -26,6 +27,10 @@ SRC_URI += "http://people.redhat.com/mingo/cfs-scheduler/sched-cfs-v2.6.23.12-v2 # Add support for squashfs-lzma (a highly compressed read-only filesystem) SRC_URI += "http://kamikaze.waninkoko.info/patches/2.6.23/klight1/broken-out/squashfs-lzma-2.6.23.patch;patch=1" +SRC_URI_append_avr32 = " \ + file://linux-2.6.23.atmel.3.patch;patch=1 \ + " + SRC_URI_append_cm-x270 = "\ file://0001-cm-x270-base2.patch;patch=1 \ file://0002-cm-x270-match-type.patch;patch=1 \ diff --git a/packages/linux/mainstone-kernel/mainstone_defconfig b/packages/linux/mainstone-kernel/mainstone_defconfig deleted file mode 100644 index 41abfbfeac..0000000000 --- a/packages/linux/mainstone-kernel/mainstone_defconfig +++ /dev/null @@ -1,1277 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.18 -# Wed Dec 19 15:51:05 2007 -# -CONFIG_ARM=y -CONFIG_MMU=y -CONFIG_GENERIC_HARDIRQS=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ARCH_MTD_XIP=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# -CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set -# CONFIG_RELAY is not set -CONFIG_INITRAMFS_SOURCE="" -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -# CONFIG_EMBEDDED is not set -CONFIG_UID16=y -CONFIG_SYSCTL=y -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_SHMEM=y -CONFIG_SLAB=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -# CONFIG_SLOB is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODULE_UNLOAD is not set -# CONFIG_MODVERSIONS is not set -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y - -# -# Block layer -# -# CONFIG_BLK_DEV_IO_TRACE is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y -CONFIG_IOSCHED_DEADLINE=y -CONFIG_IOSCHED_CFQ=y -# CONFIG_DEFAULT_AS is not set -# CONFIG_DEFAULT_DEADLINE is not set -CONFIG_DEFAULT_CFQ=y -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="cfq" - -# -# 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_IOP3XX is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_PNX4008 is not set -CONFIG_ARCH_PXA=y -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_OMAP is not set - -# -# Intel PXA2xx Implementations -# -# CONFIG_ARCH_LUBBOCK is not set -# CONFIG_MACH_LOGICPD_PXA270 is not set -CONFIG_MACH_MAINSTONE=y -# CONFIG_ARCH_PXA_IDP is not set -# CONFIG_PXA_SHARPSL is not set -# CONFIG_MACH_TRIZEPS4 is not set -CONFIG_PXA27x=y -CONFIG_IWMMXT=y - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y - -# -# Processor Features -# -# CONFIG_ARM_THUMB is not set -CONFIG_XSCALE_PMU=y - -# -# Bus support -# - -# -# PCCARD (PCMCIA/CardBus) support -# -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_PREEMPT is not set -# CONFIG_NO_IDLE_HZ is not set -CONFIG_HZ=100 -# CONFIG_AEABI is not set -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=jffs2 console=ttyS0,115200 mem=64M" -# CONFIG_XIP_KERNEL 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 is not set -# CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set - -# -# Power management options -# -CONFIG_PM=y -CONFIG_PM_LEGACY=y -# CONFIG_PM_DEBUG is not set -CONFIG_APM=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -# CONFIG_NETDEBUG is not set -# CONFIG_PACKET is not set -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER 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 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=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_BIC=y -# 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 - -# -# DCCP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_DCCP is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_SCTP is not set - -# -# TIPC Configuration (EXPERIMENTAL) -# -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -CONFIG_IRDA=m - -# -# IrDA protocols -# -# CONFIG_IRLAN is not set -# CONFIG_IRNET is not set -# CONFIG_IRCOMM is not set -# 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 -# - -# -# 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 is not set -# CONFIG_MCS_FIR is not set -CONFIG_BT=m -# CONFIG_BT_L2CAP is not set -# CONFIG_BT_SCO is not set - -# -# Bluetooth device drivers -# -# CONFIG_BT_HCIUSB is not set -# CONFIG_BT_HCIUART is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIDTL1 is not set -# CONFIG_BT_HCIBT3C is not set -# CONFIG_BT_HCIBLUECARD is not set -# CONFIG_BT_HCIBTUART is not set -# CONFIG_BT_HCIVHCI is not set -CONFIG_IEEE80211=m -# CONFIG_IEEE80211_DEBUG is not set -CONFIG_IEEE80211_CRYPT_WEP=m -# CONFIG_IEEE80211_CRYPT_CCMP is not set -CONFIG_IEEE80211_SOFTMAC=m -# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set -CONFIG_WIRELESS_EXT=y - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_SYS_HYPERVISOR is not set - -# -# Connector - unified userspace <-> kernelspace linker -# -# CONFIG_CONNECTOR is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=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 is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=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 is not set -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_OBSOLETE_CHIPS 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_MAINSTONE=y -# 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 - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# OneNAND Flash Device Drivers -# -# CONFIG_MTD_ONENAND is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Plug and Play support -# - -# -# Block devices -# -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -CONFIG_BLK_DEV_CRYPTOLOOP=m -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_UB is not set -# CONFIG_BLK_DEV_RAM is not set -CONFIG_BLK_DEV_INITRD=y -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set - -# -# ATA/ATAPI/MFM/RLL support -# -CONFIG_IDE=y -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_IDE_SATA is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE 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 - -# -# IDE chipset support/bugfixes -# -# CONFIG_IDE_GENERIC is not set -# CONFIG_IDE_ARM is not set -# CONFIG_BLK_DEV_IDEDMA is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=m -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -# CONFIG_BLK_DEV_SD is not set -# CONFIG_CHR_DEV_ST is not set -# CONFIG_CHR_DEV_OSST is not set -# CONFIG_BLK_DEV_SR is not set -# CONFIG_CHR_DEV_SG is not set -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -# CONFIG_SCSI_MULTI_LUN is not set -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set - -# -# SCSI Transport Attributes -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -# CONFIG_SCSI_ISCSI_ATTRS is not set -# CONFIG_SCSI_SAS_ATTRS is not set - -# -# SCSI low-level drivers -# -# CONFIG_ISCSI_TCP is not set -# CONFIG_SCSI_SATA is not set -# CONFIG_SCSI_DEBUG is not set - -# -# PCMCIA SCSI adapter support -# -# CONFIG_PCMCIA_AHA152X is not set -# CONFIG_PCMCIA_FDOMAIN is not set -# CONFIG_PCMCIA_NINJA_SCSI is not set -# CONFIG_PCMCIA_QLOGIC is not set -# CONFIG_PCMCIA_SYM53C500 is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Fusion MPT device support -# -# CONFIG_FUSION is not set - -# -# IEEE 1394 (FireWire) support -# - -# -# I2O device support -# - -# -# Network device support -# -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# PHY device support -# -# CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_SMC91X=y -# CONFIG_DM9000 is not set -# CONFIG_SMC911X is not set - -# -# Ethernet (1000 Mbit) -# - -# -# Ethernet (10000 Mbit) -# - -# -# Token Ring devices -# - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# PCMCIA network device support -# -# CONFIG_NET_PCMCIA is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -CONFIG_PPPOE=m -# CONFIG_SLIP is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# 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_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -# CONFIG_INPUT_MISC is not set - -# -# Hardware I/O ports -# -CONFIG_SERIO=y -# CONFIG_SERIO_SERPORT 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_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=16 - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -CONFIG_HW_RANDOM=y -# CONFIG_NVRAM is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set - -# -# Ftape, the floppy tape device driver -# - -# -# 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 - -# -# TPM devices -# -# CONFIG_TCG_TPM is not set -# CONFIG_TELCLOCK is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# SPI support -# -# CONFIG_SPI is not set -# CONFIG_SPI_MASTER is not set - -# -# Dallas's 1-wire bus -# - -# -# Hardware Monitoring support -# -CONFIG_HWMON=y -# CONFIG_HWMON_VID is not set -# CONFIG_SENSORS_ABITUGURU is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Misc devices -# - -# -# LED devices -# -# CONFIG_NEW_LEDS is not set - -# -# LED drivers -# - -# -# LED Triggers -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -CONFIG_VIDEO_V4L2=y - -# -# Digital Video Broadcasting Devices -# -# CONFIG_DVB is not set -# CONFIG_USB_DABUSB is not set - -# -# Graphics support -# -CONFIG_FIRMWARE_EDID=y -CONFIG_FB=y -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# 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 -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -# CONFIG_FB_PXA_PARAMETERS is not set -# CONFIG_FB_MBX is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Logo configuration -# -CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y -CONFIG_LOGO_LINUX_CLUT224=y -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_BACKLIGHT_CLASS_DEVICE=m -CONFIG_BACKLIGHT_DEVICE=y -CONFIG_LCD_CLASS_DEVICE=m -CONFIG_LCD_DEVICE=y - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -# CONFIG_USB_ARCH_HAS_EHCI is not set -CONFIG_USB=m -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_ISP116X_HCD is not set -# CONFIG_USB_OHCI_HCD is not set -# CONFIG_USB_SL811_HCD is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -CONFIG_USB_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_LIBUSUAL is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -CONFIG_USB_HIDINPUT=y -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -# CONFIG_USB_HIDDEV is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -# CONFIG_USB_AIPTEK is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_ACECAD is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_TOUCHSCREEN is not set -# CONFIG_USB_YEALINK is not set -# CONFIG_USB_XPAD is not set -# CONFIG_USB_ATI_REMOTE is not set -# CONFIG_USB_ATI_REMOTE2 is not set -# CONFIG_USB_KEYSPAN_REMOTE is not set -# CONFIG_USB_APPLETOUCH is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set - -# -# USB Network Adapters -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET is not set -CONFIG_USB_MON=y - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGETKIT is not set -# CONFIG_USB_PHIDGETSERVO is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=m -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -# CONFIG_USB_GADGET_AT91 is not set -CONFIG_USB_GADGET_DUMMY_HCD=y -CONFIG_USB_DUMMY_HCD=m -CONFIG_USB_GADGET_DUALSPEED=y -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=m -CONFIG_USB_ETH_RNDIS=y -# CONFIG_USB_GADGETFS is not set -CONFIG_USB_FILE_STORAGE=m -# CONFIG_USB_FILE_STORAGE_TEST is not set -# CONFIG_USB_G_SERIAL is not set - -# -# MMC/SD Card support -# -CONFIG_MMC=m -# CONFIG_MMC_DEBUG is not set -CONFIG_MMC_BLOCK=m -CONFIG_MMC_PXA=m - -# -# Real Time Clock -# -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" - -# -# 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 - -# -# RTC drivers -# -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_M48T86 is not set -CONFIG_RTC_DRV_SA1100=y -# CONFIG_RTC_DRV_TEST is not set -# CONFIG_RTC_DRV_V3020 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 is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_FS_POSIX_ACL is not set -# CONFIG_XFS_FS is not set -# CONFIG_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 is not set -CONFIG_FAT_DEFAULT_CODEPAGE=437 -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_SYSFS=y -# CONFIG_TMPFS is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -CONFIG_JFFS2_SUMMARY=y -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -CONFIG_CRAMFS=m -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFS_V4 is not set -# CONFIG_NFS_DIRECTIO is not set -# CONFIG_NFSD is not set -CONFIG_ROOT_NFS=y -CONFIG_LOCKD=y -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=y -# CONFIG_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 -# CONFIG_9P_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y - -# -# Native Language Support -# -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# 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 - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_UNUSED_SYMBOLS is not set -CONFIG_DEBUG_KERNEL=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_DETECT_SOFTLOCKUP=y -# CONFIG_SCHEDSTATS is not set -# CONFIG_DEBUG_SLAB is not set -# CONFIG_DEBUG_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_RWSEMS is not set -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_DEBUG_KOBJECT is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_FS is not set -# CONFIG_DEBUG_VM is not set -CONFIG_FRAME_POINTER=y -# CONFIG_UNWIND_INFO is not set -CONFIG_FORCED_INLINING=y -# CONFIG_RCU_TORTURE_TEST is not set -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_WAITQ is not set -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 - -# -# Cryptographic options -# -CONFIG_CRYPTO=y -# CONFIG_CRYPTO_HMAC is not set -# CONFIG_CRYPTO_NULL is not set -# CONFIG_CRYPTO_MD4 is not set -# CONFIG_CRYPTO_MD5 is not set -CONFIG_CRYPTO_SHA1=m -# CONFIG_CRYPTO_SHA256 is not set -# CONFIG_CRYPTO_SHA512 is not set -# CONFIG_CRYPTO_WP512 is not set -# CONFIG_CRYPTO_TGR192 is not set -# CONFIG_CRYPTO_DES 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_DEFLATE is not set -# CONFIG_CRYPTO_MICHAEL_MIC is not set -# CONFIG_CRYPTO_CRC32C is not set -# CONFIG_CRYPTO_TEST is not set - -# -# Hardware crypto devices -# - -# -# Library routines -# -CONFIG_CRC_CCITT=m -# CONFIG_CRC16 is not set -CONFIG_CRC32=y -# CONFIG_LIBCRC32C is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y -CONFIG_PLIST=y diff --git a/packages/linux/mainstone-kernel_2.6.18.bb b/packages/linux/mainstone-kernel_2.6.18.bb index 290bb5911d..2785baa227 100644 --- a/packages/linux/mainstone-kernel_2.6.18.bb +++ b/packages/linux/mainstone-kernel_2.6.18.bb @@ -11,6 +11,7 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 \ S = "${WORKDIR}/linux-2.6.18" + COMPATIBLE_HOST = 'arm.*-linux' ARCH = "arm" diff --git a/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch b/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch new file mode 100644 index 0000000000..800f43e8eb --- /dev/null +++ b/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch @@ -0,0 +1,6444 @@ + cfg-common.h | 4 + + cfg-mencoder.h | 4 + + cfg-mplayer.h | 4 + + configure | 13 +- + libaf/af_format.c | 7 + + libavcodec/Makefile | 7 + + libavcodec/avr32/dsputil_avr32.c | 2678 ++++++++++++++++++++++++++++++++++++++ + libavcodec/avr32/fdct.S | 541 ++++++++ + libavcodec/avr32/h264idct.S | 451 +++++++ + libavcodec/avr32/idct.S | 829 ++++++++++++ + libavcodec/avr32/mc.S | 434 ++++++ + libavcodec/avr32/pico.h | 260 ++++ + libavcodec/bitstream.h | 77 +- + libavcodec/dsputil.c | 3 + + libavcodec/h264.c | 15 + + libavutil/common.h | 16 + + libavutil/internal.h | 9 + + libfaad2/common.h | 2 +- + libmpcodecs/ad_libmad.c | 5 + + libswscale/pico-avr32.h | 137 ++ + libswscale/swscale_internal.h | 2 +- + libswscale/yuv2rgb.c | 14 + + libswscale/yuv2rgb_avr32.c | 416 ++++++ + libvo/vo_fbdev2.c | 101 ++- + version.sh | 2 +- + 25 files changed, 6011 insertions(+), 20 deletions(-) + create mode 100644 libavcodec/avr32/dsputil_avr32.c + create mode 100644 libavcodec/avr32/fdct.S + create mode 100644 libavcodec/avr32/h264idct.S + create mode 100644 libavcodec/avr32/idct.S + create mode 100644 libavcodec/avr32/mc.S + create mode 100644 libavcodec/avr32/pico.h + create mode 100644 libswscale/pico-avr32.h + create mode 100644 libswscale/yuv2rgb_avr32.c + +diff --git a/cfg-common.h b/cfg-common.h +index 780df38..7d878a8 100644 +--- a/cfg-common.h ++++ b/cfg-common.h +@@ -235,6 +235,10 @@ + {"tsprobe", &ts_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL}, + {"tskeepbroken", &ts_keep_broken, CONF_TYPE_FLAG, 0, 0, 1, NULL}, + ++#ifdef ARCH_AVR32 ++ {"use-pico", &avr32_use_pico, CONF_TYPE_FLAG, 0, 0, 1, NULL}, ++ {"nouse-pico", &avr32_use_pico, CONF_TYPE_FLAG, 0, 1, 0, NULL}, ++#endif + // draw by slices or whole frame (useful with libmpeg2/libavcodec) + {"slices", &vd_use_slices, CONF_TYPE_FLAG, 0, 0, 1, NULL}, + {"noslices", &vd_use_slices, CONF_TYPE_FLAG, 0, 1, 0, NULL}, +diff --git a/cfg-mencoder.h b/cfg-mencoder.h +index 411b748..addf791 100644 +--- a/cfg-mencoder.h ++++ b/cfg-mencoder.h +@@ -5,6 +5,10 @@ + + #include "cfg-common.h" + ++#ifdef ARCH_AVR32 ++extern int avr32_use_pico; ++#endif ++ + #ifdef USE_FAKE_MONO + extern int fakemono; // defined in dec_audio.c + #endif +diff --git a/cfg-mplayer.h b/cfg-mplayer.h +index 62b6eac..31499c2 100644 +--- a/cfg-mplayer.h ++++ b/cfg-mplayer.h +@@ -4,6 +4,10 @@ + + #include "cfg-common.h" + ++#ifdef ARCH_AVR32 ++extern int avr32_use_pico; ++#endif ++ + extern int noconsolecontrols; + + #if defined(HAVE_FBDEV)||defined(HAVE_VESA) +diff --git a/configure b/configure +index 29002c8..56c6fe4 100755 +--- a/configure ++++ b/configure +@@ -1203,6 +1203,15 @@ EOF + _optimizing="$proc" + ;; + ++ avr32) ++ _def_arch='#define ARCH_AVR32' ++ _target_arch='TARGET_ARCH_AVR32 = yes' ++ iproc='avr32' ++ proc='' ++ _march='' ++ _mcpu='' ++ _optimizing='' ++ ;; + arm|armv4l|armv5tel) + _def_arch='#define ARCH_ARMV4L 1' + _target_arch='TARGET_ARCH_ARMV4L = yes' +@@ -1533,7 +1542,7 @@ echores $_named_asm_args + # Checking for CFLAGS + _stripbinaries=yes + if test "$_profile" != "" || test "$_debug" != "" ; then +- CFLAGS="-W -Wall -O2 $_march $_mcpu $_debug $_profile" ++ CFLAGS="-W -Wall -O4 $_march $_mcpu $_debug $_profile" + if test "$_cc_major" -ge "3" ; then + CFLAGS=`echo "$CFLAGS" | sed -e 's/\(-Wall\)/\1 -Wno-unused-parameter/'` + fi +@@ -3794,7 +3803,7 @@ fi + + + echocheck "X11 headers presence" +- for I in `echo $_inc_extra | sed s/-I//g` /usr/X11/include /usr/X11R6/include /usr/include/X11R6 /usr/include /usr/openwin/include ; do ++ for I in `echo $_inc_extra | sed s/-I//g`; do + if test -f "$I/X11/Xlib.h" ; then + _inc_x11="-I$I" + _x11_headers="yes" +diff --git a/libaf/af_format.c b/libaf/af_format.c +index e5b7cc9..5d7ea6d 100644 +--- a/libaf/af_format.c ++++ b/libaf/af_format.c +@@ -20,7 +20,14 @@ + // Integer to float conversion through lrintf() + #ifdef HAVE_LRINTF + #include ++ ++#ifdef ARCH_AVR32 ++#define lrintf(x) rint(x) ++#define llrint(x) (long long)rint(x) ++#else + long int lrintf(float); ++#endif ++ + #else + #define lrintf(x) ((int)(x)) + #endif +diff --git a/libavcodec/Makefile b/libavcodec/Makefile +index 17b6c45..8e1dc96 100644 +--- a/libavcodec/Makefile ++++ b/libavcodec/Makefile +@@ -360,6 +360,12 @@ OBJS-$(TARGET_ARCH_SPARC) += sparc/dsputil_vis.o \ + + sparc/dsputil_vis.o: CFLAGS += -mcpu=ultrasparc -mtune=ultrasparc + ++# avr32 specific stuff ++ifeq ($(TARGET_ARCH_AVR32),yes) ++ASM_OBJS += avr32/idct.o avr32/fdct.o avr32/mc.o avr32/h264idct.o ++OBJS += avr32/dsputil_avr32.o ++endif ++ + # sun mediaLib specific stuff + OBJS-$(HAVE_MLIB) += mlib/dsputil_mlib.o \ + +@@ -419,6 +425,7 @@ tests: apiexample $(TESTS) + clean:: + rm -f \ + i386/*.o i386/*~ \ ++ avr32/*.o avr32/*~ \ + armv4l/*.o armv4l/*~ \ + mlib/*.o mlib/*~ \ + alpha/*.o alpha/*~ \ +diff --git a/libavcodec/avr32/dsputil_avr32.c b/libavcodec/avr32/dsputil_avr32.c +new file mode 100644 +index 0000000..200284d +--- /dev/null ++++ b/libavcodec/avr32/dsputil_avr32.c +@@ -0,0 +1,2678 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++#include "../dsputil.h" ++#include "pico.h" ++ ++int avr32_use_pico = 1; ++ ++//#define CHECK_DSP_FUNCS_AGAINST_C ++ ++#ifdef CHECK_DSP_FUNCS_AGAINST_C ++#define DSP_FUNC_NAME(name) test_ ## name ++#else ++#define DSP_FUNC_NAME(name) name ++#endif ++ ++union doubleword { ++ int64_t doubleword; ++ struct { ++ int32_t top; ++ int32_t bottom; ++ } words; ++}; ++ ++#undef LD16 ++#undef LD32 ++#undef LD64 ++ ++#define LD16(a) (*((uint16_t*)(a))) ++#define LD32(a) (*((uint32_t*)(a))) ++#define LD64(a) (*((uint64_t*)(a))) ++#define LD64_UNALIGNED(a) \ ++ ({ union doubleword __tmp__; \ ++ __tmp__.words.top = LD32(a); \ ++ __tmp__.words.bottom = LD32(a + 4); \ ++ __tmp__.doubleword; }) ++ ++#undef ST32 ++#undef ST16 ++ ++#define ST16(a, b) *((uint16_t*)(a)) = (b) ++#define ST32(a, b) *((uint32_t*)(a)) = (b) ++ ++#undef rnd_avg32 ++#define rnd_avg32(a, b) \ ++ ({ uint32_t __tmp__;\ ++ asm("pavg.ub\t%0, %1, %2" : "=r"(__tmp__) : "r"(a), "r"(b));\ ++ __tmp__;}) ++ ++void idct_avr32(DCTELEM *data); ++void fdct_avr32(DCTELEM *data); ++ ++void idct_put_avr32(uint8_t *dest, int line_size, DCTELEM *data); ++void idct_add_avr32(uint8_t *dest, int line_size, DCTELEM *data); ++ ++void h264_idct_add_avr32(uint8_t *dest, DCTELEM *data, int stride); ++void h264_idct8_add_avr32(uint8_t *dest, DCTELEM *data, int stride); ++ ++#define extern_dspfunc(PFX, NUM) \ ++ void PFX ## _pixels ## NUM ## _avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _h_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _v_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _hv_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ) ++ ++extern_dspfunc(put, 8); ++extern_dspfunc(put_no_rnd, 8); ++extern_dspfunc(avg, 8); ++extern_dspfunc(avg_no_rnd, 8); ++#undef extern_dspfunc ++ ++#ifdef CHECK_DSP_FUNCS_AGAINST_C ++#define extern_dspfunc(PFX, NUM) \ ++ void PFX ## _pixels ## NUM ## _c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _x2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _y2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ ++ void PFX ## _pixels ## NUM ## _xy2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ) ++ ++extern_dspfunc(put, 4); ++extern_dspfunc(put_no_rnd, 4); ++extern_dspfunc(put, 8); ++extern_dspfunc(put_no_rnd, 8); ++extern_dspfunc(put, 16); ++extern_dspfunc(put_no_rnd, 16); ++extern_dspfunc(avg, 8); ++extern_dspfunc(avg_no_rnd, 8); ++extern_dspfunc(avg, 16); ++extern_dspfunc(avg_no_rnd, 16); ++ ++ ++#undef extern_dspfunc ++#define extern_dspfunc(PFX, NUM) \ ++void PFX ## NUM ## _mc00_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc10_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc20_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc30_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc01_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc11_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc21_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc31_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc02_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc12_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc22_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc32_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc03_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc13_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc23_c(uint8_t *dst, uint8_t *src, int stride); \ ++void PFX ## NUM ## _mc33_c(uint8_t *dst, uint8_t *src, int stride); \ ++ ++extern_dspfunc(put_h264_qpel, 16); ++extern_dspfunc(put_h264_qpel, 8); ++extern_dspfunc(put_h264_qpel, 4); ++extern_dspfunc(avg_h264_qpel, 16); ++extern_dspfunc(avg_h264_qpel, 8); ++extern_dspfunc(avg_h264_qpel, 4); ++ ++#undef extern_dspfunc ++ ++void put_h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++void put_h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++void put_h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++ ++void avg_h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++void avg_h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++void avg_h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); ++ ++ ++void dump_block8(uint8_t *block, int line_size, int h); ++void dump_block4(uint8_t *block, int line_size, int h); ++void dump_block(uint8_t *block, int line_size, int h, int w); ++ ++void check_block8(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, char *name, int max_dev); ++void check_block4(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, char *name, int max_dev); ++void check_block(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, int width, char *name, int max_dev); ++ ++#define PIXOP2( OPNAME, OP ) \ ++void OPNAME ## _pixels4_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\ ++ int i;\ ++ for(i=0; i> 16)); ++ ST16(dst + 1*dstStride, (short)PICO_GET_W(PICO_OUTPIX0)); ++ ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_MVRC_W(PICO_INPIX1, src4); ++ PICO_MVRC_W(PICO_INPIX0, src5); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 0, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 1, 9, 6, 3); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src4); ++ PICO_MVRC_W(PICO_INPIX1, src5); ++ PICO_MVRC_W(PICO_INPIX0, src6); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 2, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 3, 9, 6, 3); ++ ++ ST16(dst + 2*dstStride, (short)(PICO_GET_W(PICO_OUTPIX0) >> 16)); ++ ST16(dst + 3*dstStride, (short)PICO_GET_W(PICO_OUTPIX0)); ++ ++ dst += 2; ++ src += 2; ++ } ++} ++ ++ ++ ++ ++static void avg_h264_qpel4_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ ++ int32_t tmp_block[48]; ++ int32_t *tmp = tmp_block; ++ int i; ++ ++ set_pico_config(&h264_qpel4_hv_lowpass_config); ++ ++ src -= 2; ++ for ( i = 0; i < 2; i++ ){ ++ int srcB= LD32(src - 2*srcStride); ++ int srcA= LD32(src - 1*srcStride); ++ int src0= LD32(src + 0 *srcStride); ++ int src1= LD32(src + 1 *srcStride); ++ int src2= LD32(src + 2 *srcStride); ++ int src3= LD32(src + 3 *srcStride); ++ int src4= LD32(src + 4 *srcStride); ++ int src5= LD32(src + 5 *srcStride); ++ int src6= LD32(src + 6 *srcStride); ++ ++ PICO_MVRC_W(PICO_INPIX0, srcB); ++ PICO_MVRC_W(PICO_INPIX1, srcA); ++ PICO_MVRC_W(PICO_INPIX2, src0); ++ PICO_OP(0, 0, 0, 4, 8); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX0, src3); ++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_OP(0, 0, 1, 5, 9); ++ PICO_MVRC_W(PICO_INPIX0, srcB); ++ PICO_MVRC_W(PICO_INPIX1, srcA); ++ PICO_MVRC_W(PICO_INPIX2, src0); ++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_OP(0, 0, 4, 8, 0); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_MVRC_W(PICO_INPIX1, src3); ++ PICO_MVRC_W(PICO_INPIX0, src4); ++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_OP(0, 0, 1, 5, 9); ++ PICO_MVRC_W(PICO_INPIX0, srcA); ++ PICO_MVRC_W(PICO_INPIX1, src0); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_MVRC_W(PICO_INPIX0, src2); ++ PICO_OP(0, 0, 4, 8, 0); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_MVRC_W(PICO_INPIX1, src4); ++ PICO_MVRC_W(PICO_INPIX0, src5); ++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_OP(0, 0, 1, 5, 9); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_MVRC_W(PICO_INPIX0, src3); ++ PICO_OP(0, 0, 4, 8, 0); ++ PICO_MVRC_W(PICO_INPIX2, src4); ++ PICO_MVRC_W(PICO_INPIX1, src5); ++ PICO_MVRC_W(PICO_INPIX0, src6); ++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ ++ PICO_OP(0, 0, 1, 5, 9); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); ++ PICO_STCM_W(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ tmp += 3; ++ src += 2; ++ } ++ ++ src -= 1; ++ tmp -= 48; ++ ++ ++ PICO_PUT_W(PICO_CONFIG, ++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE) ++ | PICO_INPUT_MODE(PICO_VERT_FILTER_MODE) ++ | PICO_COEFF_FRAC_BITS(10) ++ | PICO_OFFSET_FRAC_BITS(10)); ++ ++ for ( i = 0; i < 2; i++ ){ ++ int srcB= LD32(src - 2*srcStride); ++ int srcA= LD32(src - 1*srcStride); ++ int src0= LD32(src + 0 *srcStride); ++ int src1= LD32(src + 1 *srcStride); ++ int src2= LD32(src + 2 *srcStride); ++ int src3= LD32(src + 3 *srcStride); ++ int src4= LD32(src + 4 *srcStride); ++ int src5= LD32(src + 5 *srcStride); ++ int src6= LD32(src + 6 *srcStride); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, srcB); ++ PICO_MVRC_W(PICO_INPIX1, srcA); ++ PICO_MVRC_W(PICO_INPIX2, src0); ++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX0, src3); ++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 0, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, srcB); ++ PICO_MVRC_W(PICO_INPIX1, srcA); ++ PICO_MVRC_W(PICO_INPIX2, src0); ++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 1, 9, 6, 3); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, srcA); ++ PICO_MVRC_W(PICO_INPIX1, src0); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_MVRC_W(PICO_INPIX1, src3); ++ PICO_MVRC_W(PICO_INPIX0, src4); ++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 2, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, srcA); ++ PICO_MVRC_W(PICO_INPIX1, src0); ++ PICO_MVRC_W(PICO_INPIX2, src1); ++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 3, 9, 6, 3); ++ ++ ST16(dst + 0*dstStride, rnd_avg32(LD16(dst + 0*dstStride), PICO_GET_W(PICO_OUTPIX0) >> 16)); ++ ST16(dst + 1*dstStride, rnd_avg32(LD16(dst + 1*dstStride), PICO_GET_W(PICO_OUTPIX0))); ++ ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_MVRC_W(PICO_INPIX1, src4); ++ PICO_MVRC_W(PICO_INPIX0, src5); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 0, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, src0); ++ PICO_MVRC_W(PICO_INPIX1, src1); ++ PICO_MVRC_W(PICO_INPIX2, src2); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 1, 9, 6, 3); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0); ++ PICO_MVRC_W(PICO_INPIX2, src4); ++ PICO_MVRC_W(PICO_INPIX1, src5); ++ PICO_MVRC_W(PICO_INPIX0, src6); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 2, 6, 3, 0); ++ ++ PICO_LDCM_W_INC(tmp, ++ PICO_REGVECT_VMU0_OUT, ++ PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT); ++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3); ++ PICO_MVRC_W(PICO_INPIX0, src1); ++ PICO_MVRC_W(PICO_INPIX1, src2); ++ PICO_MVRC_W(PICO_INPIX2, src3); ++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 3, 9, 6, 3); ++ ++ ST16(dst + 2*dstStride, rnd_avg32(LD16(dst + 2*dstStride), PICO_GET_W(PICO_OUTPIX0) >> 16)); ++ ST16(dst + 3*dstStride, rnd_avg32(LD16(dst + 3*dstStride), PICO_GET_W(PICO_OUTPIX0))); ++ ++ dst += 2; ++ src += 2; ++ } ++} ++ ++ ++static void put_h264_qpel8_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ put_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel8_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ avg_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void put_h264_qpel8_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ put_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel8_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ avg_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void put_h264_qpel8_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ put_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel8_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++ src += 4*srcStride; ++ dst += 4*dstStride; ++ avg_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); ++} ++ ++static void put_h264_qpel16_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ put_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel16_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ avg_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void put_h264_qpel16_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ put_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel16_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ avg_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void put_h264_qpel16_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ put_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ put_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ put_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel16_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ ++ avg_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ avg_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); ++ avg_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); ++} ++ ++ ++#define H264_MC(OPNAME, SIZE) \ ++static void OPNAME ## h264_qpel ## SIZE ## _mc00_pico (uint8_t *dst, uint8_t *src, int stride){\ ++ OPNAME ## pixels ## SIZE ## _c(dst, src, stride, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc10_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t half[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(half, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, src, half, stride, stride, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc20_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ OPNAME ## h264_qpel ## SIZE ## _h_lowpass_pico(dst, src, stride, stride);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc30_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t half[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(half, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, src+1, half, stride, stride, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc01_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t half[SIZE*SIZE];\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(half, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, full_mid, half, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc02_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ OPNAME ## h264_qpel ## SIZE ## _v_lowpass_pico(dst, full_mid, stride, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc03_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t half[SIZE*SIZE];\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(half, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, full_mid+SIZE, half, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc11_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc31_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\ ++ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc13_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc33_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\ ++ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc22_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ OPNAME ## h264_qpel ## SIZE ## _hv_lowpass_pico(dst, src, stride, stride);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc21_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfHV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\ ++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc23_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t halfH[SIZE*SIZE];\ ++ uint8_t halfHV[SIZE*SIZE];\ ++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\ ++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc12_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfV[SIZE*SIZE];\ ++ uint8_t halfHV[SIZE*SIZE];\ ++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\ ++}\ ++\ ++static void OPNAME ## h264_qpel ## SIZE ## _mc32_pico(uint8_t *dst, uint8_t *src, int stride){\ ++ uint8_t full[SIZE*(SIZE+5)];\ ++ uint8_t * const full_mid= full + SIZE*2;\ ++ uint8_t halfV[SIZE*SIZE];\ ++ uint8_t halfHV[SIZE*SIZE];\ ++ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\ ++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ ++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ ++ OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\ ++}\ ++ ++H264_MC(put_, 4) ++H264_MC(put_, 8) ++H264_MC(put_, 16) ++H264_MC(avg_, 4) ++H264_MC(avg_, 8) ++H264_MC(avg_, 16) ++ ++ ++ ++#define dspfunc16(PFX) \ ++ void PFX ## _pixels16_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ ++ PFX ## _pixels8_avr32(dst, pixels, line_size, h);\ ++ PFX ## _pixels8_avr32(dst + 8, pixels + 8, line_size, h);\ ++ }\ ++ void PFX ## _pixels16_h_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ ++ PFX ## _pixels8_h_avr32(dst, pixels, line_size, h);\ ++ PFX ## _pixels8_h_avr32(dst + 8, pixels + 8, line_size, h);\ ++ }\ ++ void PFX ## _pixels16_v_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ ++ PFX ## _pixels8_v_avr32(dst, pixels, line_size, h);\ ++ PFX ## _pixels8_v_avr32(dst + 8, pixels + 8, line_size, h);\ ++ }\ ++ void PFX ## _pixels16_hv_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ ++ PFX ## _pixels8_hv_avr32(dst, pixels, line_size, h);\ ++ PFX ## _pixels8_hv_avr32(dst + 8, pixels + 8, line_size, h);\ ++ }\ ++ ++ ++dspfunc16(put) ++dspfunc16(put_no_rnd) ++dspfunc16(avg) ++dspfunc16(avg_no_rnd) ++#undef dspfunc16 ++ ++static int pix_sum_avr32(uint8_t * pix, int line_size) ++{ ++ int s, i; ++ ++ s = 0; ++ for (i = 0; i < 16; i++) { ++ int tmp1,tmp2,tmp3,tmp4,tmp5; ++ __asm__ volatile ( "ld.w\t%0, %6[0]\n\t" ++ "ld.w\t%1, %6[4]\n\t" ++ "ld.w\t%2, %6[8]\n\t" ++ "ld.w\t%3, %6[12]\n\t" ++ "punpckub.h\t%4, %0:t\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %0:b\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %1:t\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %1:b\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %2:t\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %2:b\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %3:t\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ "punpckub.h\t%4, %3:b\n\t" ++ "padd.h\t%5, %5, %4\n\t" ++ : "=&r"(tmp1),"=&r"(tmp2),"=&r"(tmp3),"=&r"(tmp4),"=&r"(tmp5),"=&r"(s) ++ : "r"(pix)); ++ pix += line_size; ++ } ++ __asm__ volatile ( "addhh.w\t%0, %0:t, %0:b" : "=&r" (s) ); ++ ++ return s; ++} ++ ++ ++//#define op_scale1(x) block[x] = clip_uint8( (block[x]*weight + offset) >> log2_denom ) ++//#define op_scale2(x) dst[x] = clip_uint8( (src[x]*weights + dst[x]*weightd + offset) >> (log2_denom+1)) ++//#define H264_WEIGHT(W,H) \ ++//static void weight_h264_pixels ## W ## x ## H ## _c(uint8_t *block, int stride, int log2_denom, int weight, int offset){ \ ++// int attribute_unused x, y; \ ++// offset <<= log2_denom; \ ++// if(log2_denom) offset += 1<<(log2_denom-1); \ ++// for(y=0; y> 0, 8\n" \ ++// "satu\t%[tmp1] >> 0, 8\n" \ ++// "st.b\t%[block][0], %[tmp0]\n" \ ++// "st.b\t%[block][1], %[tmp1]\n" \ ++// : [tmp0] "=&r"(tmp0), [tmp1] "=&r"(tmp1) \ ++// : [block] "r"(block), [weight]"r"(weight), [log2_denom]"r"(log2denom) ); \ ++// } else if ( W==4 ) { \ ++// asm volatile ( "ld.w\t%[tmp0], %[block][0]\n" \ ++// "punpckub.h\t%[tmp1], %[tmp0]:t\n" \ ++// "punpckub.h\t%[tmp0], %[tmp0]:b\n" \ ++// "mulhh.w\t%[tmp2], %[tmp1]:t, %[weight]:b\n" \ ++// "mulhh.w\t%[tmp1], %[tmp1]:b, %[weight]:b\n" \ ++// "asr\t%[tmp0], %[log2_denom]\n" \ ++// "asr\t%[tmp1], %[log2_denom]\n" \ ++// "satu\t%[tmp0] >> 0, 8\n" \ ++// "satu\t%[tmp1] >> 0, 8\n" \ ++// "st.b\t%[block][0], %[tmp0]\n" \ ++// "st.b\t%[block][1], %[tmp1]\n" \ ++// : [tmp0] "=&r"(tmp0), [tmp1] "=&r"(tmp1) \ ++// : [block] "r"(block), [weight]"r"(weight), [log2_denom]"r"(log2denom) ); \ ++// ++// ++// ++// if(W==4) continue; \ ++// op_scale1(4); \ ++// op_scale1(5); \ ++// op_scale1(6); \ ++// op_scale1(7); \ ++// if(W==8) continue; \ ++// op_scale1(8); \ ++// op_scale1(9); \ ++// op_scale1(10); \ ++// op_scale1(11); \ ++// op_scale1(12); \ ++// op_scale1(13); \ ++// op_scale1(14); \ ++// op_scale1(15); \ ++// } \ ++//} \ ++//static void biweight_h264_pixels ## W ## x ## H ## _c(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offsetd, int offsets){ \ ++// int attribute_unused x, y; \ ++// int offset = (offsets + offsetd + 1) >> 1; \ ++// offset = ((offset << 1) + 1) << log2_denom; \ ++// for(y=0; y and ++ is not less than */ ++#define PABS_DIFF_LESS_THAN( a, b, compare) \ ++ ({ uint32_t __tmp__, __tmp2__, __mask__; \ ++ asm ( \ ++ /* Check ABS( a - b ) < compare */ \ ++ "psubs.ub\t%[tmp], %[opa], %[opb]\n" \ ++ "psubs.ub\t%[tmp2], %[opb], %[opa]\n" \ ++ "or\t%[tmp], %[tmp2]\n" /* ABS ( a - b ) */ \ ++ /* This produces 0 for all bytes where the comparison is not true */ \ ++ "psubs.ub\t%[mask], %[cmp], %[tmp]\n" \ ++ : [tmp] "=&r"(__tmp__), [tmp2] "=&r"(__tmp2__), [mask] "=&r"(__mask__) \ ++ : [opa] "r"(a), [opb] "r"(b), [cmp] "r"(compare) ); \ ++ __mask__; }) ++ ++/* ++ Set all bytes containing zero in to 255 and the rest to zero. ++ ++ Add with saturation 254 to all bytes making all bytes different from ++ zero become 255. Then add one without saturation to make all bytes ++ originally containing zero 255 and the rest 0. */ ++#define SET_ALL_BITS_IN_ZERO_BYTES(value) \ ++ ({ uint32_t __tmp__; \ ++ asm ( \ ++ "padds.ub\t%[tmp], %[val], %[max_minus_one]\n" \ ++ "padd.b\t%[tmp], %[tmp], %[all_ones]\n" \ ++ : [tmp] "=r"(__tmp__) \ ++ : [val] "r"(value), [max_minus_one] "r"(0xFEFEFEFE), [all_ones] "r"(0x01010101) ); \ ++ __tmp__; }) ++ ++#define PACKW_SH(upper, lower) \ ++ ({ uint32_t __tmp__; \ ++ asm ( \ ++ "packw.sh\t%[tmp], %[u], %[l]\n" \ ++ : [tmp] "=r"(__tmp__) \ ++ : [u] "r"(upper), [l] "r"(lower) ); \ ++ __tmp__; }) ++ ++#define PACKSH_UB(upper, lower) \ ++ ({ uint32_t __tmp__; \ ++ asm ( \ ++ "packsh.sb\t%[tmp], %[u], %[l]\n" \ ++ : [tmp] "=r"(__tmp__) \ ++ : [u] "r"(upper), [l] "r"(lower) ); \ ++ __tmp__; }) ++ ++static void h264_v_loop_filter_luma_avr32(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0) ++{ ++ int i; ++ ++ if ( alpha == 0 ) ++ return; ++ ++ alpha = PACKW_SH(alpha, alpha); ++ alpha = PACKSH_UB(alpha, alpha); ++ beta = PACKW_SH(beta, beta); ++ beta = PACKSH_UB(beta, beta); ++ ++ for( i = 0; i < 4; i++ ) { ++ uint32_t p0, p1, p2, q0, q1, q2; ++ uint32_t mask, mask2; ++ uint32_t tmp, tmp2, tmp3, tmp4; ++ ++ if( tc0[i] < 0 ) { ++ pix += 4; ++ continue; ++ } ++ ++/* for( d = 0; d < 4; d++ ) { ++ const int p0 = pix[-1*stride]; ++ const int p1 = pix[-2*stride]; ++ const int p2 = pix[-3*stride]; ++ const int q0 = pix[0]; ++ const int q1 = pix[1*stride]; ++ const int q2 = pix[2*stride]; ++ ++ if( ABS( p0 - q0 ) < alpha && ++ ABS( p1 - p0 ) < beta && ++ ABS( q1 - q0 ) < beta ) { */ ++ ++ p0 = LD32(pix - stride); ++ p1 = LD32(pix - 2*stride); ++ q0 = LD32(pix); ++ q1 = LD32(pix + stride); ++ ++ /* Check which of the columns should be filtered, if any. */ ++ mask = PABS_DIFF_LESS_THAN(p0, q0, alpha); ++ mask |= PABS_DIFF_LESS_THAN(p1, p0, beta); ++ mask |= PABS_DIFF_LESS_THAN(q1, q0, beta); ++ ++ if ( !mask ) ++ continue; ++ ++ mask = SET_ALL_BITS_IN_ZERO_BYTES(mask); ++ ++ ++ int tc = PACKW_SH(tc0[i], tc0[i]); ++ int tc0_p = tc; ++ int tc0_m = PACKW_SH(-tc0[i], -tc0[i]); ++ ++ /* ++ int i_delta; ++ if( ABS( p2 - p0 ) < beta ) { ++ pix[-2*stride] = p1 + clip( (( p2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - p1, -tc0[i], tc0[i] ); ++ tc++; ++ }*/ ++ ++ p2 = LD32(pix - 3*stride); ++ mask2 = PABS_DIFF_LESS_THAN(p2, p0, beta) & ~mask; ++ ++ if ( mask2 ){ ++ mask2 = SET_ALL_BITS_IN_ZERO_BYTES(mask2); ++ asm ("pavg.ub\t%[tmp], %[p0], %[q0]\n" ++ "paddh.ub\t%[tmp], %[tmp], %[p2]\n" ++ "punpckub.h\t%[tmp2], %[tmp]:t\n" ++ "punpckub.h\t%[tmp], %[tmp]:b\n" ++ "punpckub.h\t%[tmp3], %[p1]:t\n" ++ "punpckub.h\t%[tmp4], %[p1]:b\n" ++ "psub.h\t%[tmp2], %[tmp2], %[tmp3]\n" ++ "psub.h\t%[tmp], %[tmp], %[tmp4]\n" ++ "pmin.sh\t%[tmp2], %[tmp2], %[tc0_p]\n" ++ "pmin.sh\t%[tmp], %[tmp], %[tc0_p]\n" ++ "pmax.sh\t%[tmp2], %[tmp2], %[tc0_m]\n" ++ "pmax.sh\t%[tmp], %[tmp], %[tc0_m]\n" ++ "padd.h\t%[tmp2], %[tmp2], %[tmp3]\n" ++ "padd.h\t%[tmp], %[tmp], %[tmp4]\n" ++ "packsh.ub\t%[tmp], %[tmp2], %[tmp]\n" ++ "andn\t%[tmp], %[mask2]\n" ++ "and\t%[tmp2], %[q1], %[mask2]\n" ++ "or\t%[tmp], %[tmp2]\n" ++ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), ++ [tmp4]"=&r"(tmp4) ++ : [q0]"r"(q0), [p2]"r"(p2), [p1]"r"(p1), [p0]"r"(p0), [q1]"r"(q1), [tc0_p]"r"(tc0_p), ++ [tc0_m]"r"(tc0_m), [mask2]"r"(mask2)); ++ ST32(pix - 2*stride, tmp); ++ tc += 0x00010001; ++ } ++ ++ ++ q2 = LD32(pix + 2*stride); ++ ++ /* ++ if( ABS( q2 - q0 ) < beta ) { ++ pix[ stride] = q1 + clip( (( q2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - q1, -tc0[i], tc0[i] ); ++ tc++; ++ } ++ */ ++ mask2 = PABS_DIFF_LESS_THAN(q2, q0, beta) & ~mask; ++ ++ if ( mask2 ){ ++ mask2 = SET_ALL_BITS_IN_ZERO_BYTES(mask2); ++ asm ("pavg.ub\t%[tmp], %[p0], %[q0]\n" ++ "paddh.ub\t%[tmp], %[tmp], %[q2]\n" ++ "punpckub.h\t%[tmp2], %[tmp]:t\n" ++ "punpckub.h\t%[tmp], %[tmp]:b\n" ++ "punpckub.h\t%[tmp3], %[q1]:t\n" ++ "punpckub.h\t%[tmp4], %[q1]:b\n" ++ "psub.h\t%[tmp2], %[tmp2], %[tmp3]\n" ++ "psub.h\t%[tmp], %[tmp], %[tmp4]\n" ++ "pmin.sh\t%[tmp2], %[tmp2], %[tc0_p]\n" ++ "pmin.sh\t%[tmp], %[tmp], %[tc0_p]\n" ++ "pmax.sh\t%[tmp2], %[tmp2], %[tc0_m]\n" ++ "pmax.sh\t%[tmp], %[tmp], %[tc0_m]\n" ++ "padd.h\t%[tmp2], %[tmp2], %[tmp3]\n" ++ "padd.h\t%[tmp], %[tmp], %[tmp4]\n" ++ "packsh.ub\t%[tmp], %[tmp2], %[tmp]\n" ++ "andn\t%[tmp], %[mask2]\n" ++ "and\t%[tmp2], %[q1], %[mask2]\n" ++ "or\t%[tmp], %[tmp2]\n" ++ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), ++ [tmp4]"=&r"(tmp4) ++ : [q0]"r"(q0), [q2]"r"(q2), [q1]"r"(q1), [p0]"r"(p0), [tc0_p]"r"(tc0_p), ++ [tc0_m]"r"(tc0_m), [mask2]"r"(mask2)); ++ ST32(pix + stride, tmp); ++ tc += 0x00010001; ++ } ++ ++ uint32_t old_p0 = p0; ++ uint32_t old_q0 = q0; ++ ++ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); ++ pix[-stride] = clip_uint8( p0 + i_delta ); ++ pix[0] = clip_uint8( q0 - i_delta ); */ ++ ++ asm ( ++ /* Check if the two upper pixels should be filtered */ ++ "lsr\t%[tmp], %[inv_mask], 16\n" ++ "breq\t0f\n" ++ ++ "punpckub.h\t%[tmp], %[p1]:t\n" ++ "punpckub.h\t%[tmp2], %[q1]:t\n" ++ ++ /* p1 - q1 */ ++ "psub.h\t%[tmp], %[tmp], %[tmp2]\n" ++ ++ "punpckub.h\t%[tmp3], %[q0]:t\n" ++ "punpckub.h\t%[tmp4], %[p0]:t\n" ++ ++ /* q0 - p0 */ ++ "psub.h\t%[tmp2], %[tmp3], %[tmp4]\n" ++ ++ /* (q0 - p0) << 2 */ ++ "plsl.h\t%[tmp2], %[tmp2], 2\n" ++ ++ /* ((q0 - p0) << 2) + (p1 - q1) */ ++ "padd.h\t%[tmp2], %[tmp2], %[tmp]\n" ++ ++ "mov\t%[tmp], 0x00040004\n" ++ /* ((q0 - p0) << 2) + (p1 - q1) + 4*/ ++ "padd.h\t%[tmp2], %[tmp2], %[tmp]\n" ++ ++ /* (((q0 - p0) << 2) + (p1 - q1) + 4) >> 3*/ ++ "pasr.h\t%[tmp2], %[tmp2], 3\n" ++ ++ "mov\t%[tmp], 0\n" ++ "psub.h\t%[tmp], %[tmp], %[tc]\n" ++ ++ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); */ ++ "pmin.sh\t%[tmp2], %[tmp2], %[tc]\n" ++ "pmax.sh\t%[tmp2], %[tmp2], %[tmp]\n" ++ ++ ++ /* pix[-stride] = clip_uint8( p0 + i_delta ); */ ++ "padd.h\t%[tmp4], %[tmp4], %[tmp2]\n" ++ ++ ++ /* pix[0] = clip_uint8( q0 - i_delta ); */ ++ "psub.h\t%[tmp3], %[tmp3], %[tmp2]\n" ++ ++ /* Check if the two lower pixels should be filtered */ ++ "lsl\t%[tmp2], %[inv_mask], 16\n" ++ "breq\t1f\n" ++ ++ "0:\n" ++ "punpckub.h\t%[p1], %[p1]:b\n" ++ "punpckub.h\t%[q1], %[q1]:b\n" ++ ++ /* p1 - q1 */ ++ "psub.h\t%[p1], %[p1], %[q1]\n" ++ ++ "punpckub.h\t%[q0], %[q0]:b\n" ++ "punpckub.h\t%[p0], %[p0]:b\n" ++ ++ /* q0 - p0 */ ++ "psub.h\t%[tmp2], %[q0], %[p0]\n" ++ ++ /* (q0 - p0) << 2 */ ++ "plsl.h\t%[tmp2], %[tmp2], 2\n" ++ ++ /* ((q0 - p0) << 2) + (p1 - q1) */ ++ "padd.h\t%[tmp2], %[tmp2], %[p1]\n" ++ ++ "mov\t%[q1], 0x00040004\n" ++ /* ((q0 - p0) << 2) + (p1 - q1) + 4*/ ++ "padd.h\t%[tmp2], %[tmp2], %[q1]\n" ++ ++ /* (((q0 - p0) << 2) + (p1 - q1) + 4) >> 3*/ ++ "pasr.h\t%[tmp2], %[tmp2], 3\n" ++ ++ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); */ ++ "pmin.sh\t%[tmp2], %[tmp2], %[tc]\n" ++ "pmax.sh\t%[tmp2], %[tmp2], %[tmp]\n" ++ ++ /* pix[-stride] = clip_uint8( p0 + i_delta ); */ ++ "padd.h\t%[p0], %[p0], %[tmp2]\n" ++ ++ /* pix[0] = clip_uint8( q0 - i_delta ); */ ++ "psub.h\t%[q0], %[q0], %[tmp2]\n" ++ ++ "1:\n" ++ "packsh.ub\t%[p0], %[tmp4], %[p0]\n" ++ "packsh.ub\t%[q0], %[tmp3], %[tmp4]\n" ++ ++ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), ++ [tmp4]"=&r"(tmp4), [q0]"=&r"(q0), [q1]"=&r"(q1), [p0]"=&r"(p0), [p1]"=&r"(p1) ++ : [tc]"r"(tc), [inv_mask]"r"(~mask)); ++ ++ ST32(pix - stride, (mask & old_p0) | (p0 & ~mask)); ++ ST32(pix, (mask & old_q0) | (q0 & ~mask)); ++ ++ } ++ pix += 1; ++} ++ ++ ++ ++ ++#ifdef CHECK_DSP_FUNCS_AGAINST_C ++ ++void dump_block8(uint8_t *block, int line_size, int h){ ++ int i, j; ++ ++ for ( i = 0; i < h ; i++ ){ ++ av_log(NULL, AV_LOG_ERROR, "\t"); ++ for ( j = 0; j < 8 ; j++ ){ ++ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]); ++ } ++ av_log(NULL, AV_LOG_ERROR, "\n"); ++ } ++} ++ ++void dump_block4(uint8_t *block, int line_size, int h){ ++ int i, j; ++ ++ for ( i = 0; i < h ; i++ ){ ++ av_log(NULL, AV_LOG_ERROR, "\t"); ++ for ( j = 0; j < 4 ; j++ ){ ++ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]); ++ } ++ av_log(NULL, AV_LOG_ERROR, "\n"); ++ } ++} ++ ++void dump_block(uint8_t *block, int line_size, int h, int w){ ++ int i, j; ++ ++ for ( i = 0; i < h ; i++ ){ ++ av_log(NULL, AV_LOG_ERROR, "\t"); ++ for ( j = 0; j < w ; j++ ){ ++ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]); ++ } ++ av_log(NULL, AV_LOG_ERROR, "\n"); ++ } ++} ++ ++void check_block8(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, char *name, int max_dev){ ++ int i,j; ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < h ; j++ ){ ++ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j]; ++ diff = diff < 0 ? -diff : diff; ++ if ( diff > max_dev ){ ++ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n", ++ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]); ++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name); ++ dump_block8(test, line_size_test, h); ++ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n"); ++ dump_block8(correct, line_size_correct, h); ++ exit(1); ++ } ++ } ++ } ++} ++ ++void check_block4(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, char *name, int max_dev){ ++ int i,j; ++ for ( i = 0; i < 4 ; i++ ){ ++ for ( j = 0; j < h ; j++ ){ ++ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j]; ++ diff = diff < 0 ? -diff : diff; ++ if ( diff > max_dev ){ ++ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n", ++ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]); ++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name); ++ dump_block8(test, line_size_test, h); ++ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n"); ++ dump_block4(correct, line_size_correct, h); ++ exit(1); ++ } ++ } ++ } ++} ++ ++void check_block(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, ++ int h, int width, char *name, int max_dev){ ++ int i,j; ++ for ( i = 0; i < width ; i++ ){ ++ for ( j = 0; j < h ; j++ ){ ++ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j]; ++ diff = diff < 0 ? -diff : diff; ++ if ( diff > max_dev ){ ++ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n", ++ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]); ++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name); ++ dump_block(test, line_size_test, h, width); ++ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n"); ++ dump_block(correct, line_size_correct, h, width); ++ exit(1); ++ } ++ } ++ } ++} ++ ++void dump_dct_block(DCTELEM *block){ ++ int i, j; ++ ++ for ( i = 0; i < 8 ; i++ ){ ++ av_log(NULL, AV_LOG_ERROR, "\t"); ++ for ( j = 0; j < 8 ; j++ ){ ++ av_log(NULL, AV_LOG_ERROR, "0x%x ", block[j + i*8]); ++ } ++ av_log(NULL, AV_LOG_ERROR, "\n"); ++ } ++} ++ ++void test_idct_avr32(DCTELEM *block){ ++ DCTELEM testBlock[64]; ++ int i, j; ++ ++ /* Copy transposed block to testBlock */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ testBlock[i + 8*j] = block[j + i*8]; ++ } ++ } ++ ++ idct_avr32(block); ++ simple_idct(&testBlock); ++ ++ for ( i = 0; i < 64 ; i++ ){ ++ if ( block[i] != testBlock[i] ){ ++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from idct is:\n"); ++ dump_dct_block(block); ++ av_log(NULL, AV_LOG_ERROR, "But should be equal to the transposed of:\n"); ++ dump_dct_block(testBlock); ++ exit(1); ++ } ++ } ++} ++ ++void test_idct_put_avr32(uint8_t *dest, int line_size, DCTELEM *block){ ++ uint8_t testBlock[64]; ++ DCTELEM blockCopy[64]; ++ int i, j; ++ ++ /* Copy transposed block to blockCopy */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ blockCopy[i + 8*j] = block[j + i*8]; ++ } ++ } ++ ++ idct_put_avr32(dest, line_size, block); ++ simple_idct_put(&testBlock, 8, blockCopy); ++ ++ check_block8(dest, testBlock, line_size, 8, 8, "idct_put", 1); ++} ++ ++ ++void test_idct_add_avr32(uint8_t *dest, int line_size, DCTELEM *block){ ++ uint8_t testBlock[64]; ++ DCTELEM blockCopy[64]; ++ int i, j; ++ ++ /* Copy dest to testBlock */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ testBlock[i + 8*j] = dest[i + j*line_size]; ++ } ++ } ++ ++ /* Copy transposed block to blockCopy */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ blockCopy[i + 8*j] = block[j + i*8]; ++ } ++ } ++ ++ idct_add_avr32(dest, line_size, block); ++ simple_idct_add(&testBlock, 8, blockCopy); ++ ++ check_block8(dest, testBlock, line_size, 8, 8, "idct_add", 1); ++} ++ ++void test_h264_idct_add_avr32(uint8_t *dest, DCTELEM *block, int stride){ ++ uint8_t testBlock[16]; ++ DCTELEM blockCopy[16]; ++ int i, j; ++ ++ /* Copy dest to testBlock */ ++ for ( i = 0; i < 4 ; i++ ){ ++ for ( j = 0; j < 4 ; j++ ){ ++ testBlock[i + 4*j] = dest[i + j*stride]; ++ } ++ } ++ ++ /* Copy transposed block to blockCopy */ ++ for ( i = 0; i < 16 ; i++ ){ ++ blockCopy[i] = block[i]; ++ } ++ ++ ff_h264_idct_add_c(dest, block, stride); ++ ++ h264_idct_add_avr32(testBlock, blockCopy, 4); ++ ++ check_block(dest, testBlock, stride, 4, 4, 4, "h264_idct_add", 0); ++} ++ ++void test_h264_idct8_add_avr32(uint8_t *dest, DCTELEM *block, int stride){ ++ uint8_t testBlock[8*8]; ++ DCTELEM blockCopy[8*8]; ++ int i, j; ++ ++ /* Copy dest to testBlock */ ++ for ( i = 0; i < 8 ; i++ ){ ++ for ( j = 0; j < 8 ; j++ ){ ++ testBlock[i + 8*j] = dest[i + j*stride]; ++ } ++ } ++ ++ /* Copy source block to blockCopy */ ++ for ( i = 0; i < 8*8 ; i++ ){ ++ blockCopy[i] = block[i]; ++ } ++ ++ ff_h264_idct8_add_c(dest, block, stride); ++ h264_idct8_add_avr32(testBlock, blockCopy, 8); ++ ++ check_block(dest, testBlock, stride, 8, 8, 8, "h264_idct8_add", 0); ++} ++ ++void test_put_pixels_funcs8(op_pixels_func test, op_pixels_func correct, uint8_t *block, ++ const uint8_t *pixels, int line_size, int h, char *name, int in_h_size, int in_v_size){ ++ uint8_t *testBlock, *testBlock2; ++ int i, j; ++ int input_v_size = h + in_v_size; ++ int input_h_size = 8 + in_h_size; ++ ++ testBlock = alloca(input_h_size*input_v_size); ++ testBlock2 = alloca(input_h_size*input_v_size); ++ ++ for ( i = 0; i < input_h_size ; i++ ){ ++ for ( j = 0; j < input_v_size ; j++ ){ ++ testBlock[i + input_h_size*j] = pixels[i + j*line_size]; ++ } ++ } ++ ++ test(block, pixels, line_size, h); ++ correct(testBlock2, testBlock, input_h_size, h); ++ ++ check_block8(block, testBlock2, line_size, input_h_size, h, name, 0); ++ ++} ++ ++void test_h264_chroma_mc_funcs(h264_chroma_mc_func test, h264_chroma_mc_func correct, uint8_t *dst, ++ uint8_t *src, int stride, int h, int w, int x, int y, char *name){ ++ uint8_t *testBlock, *testBlock2; ++ int i, j; ++ int input_v_size = h + 1; ++ int input_h_size = ((w + 1) + 3) & ~3; ++ ++ testBlock = alloca(input_h_size*input_v_size); ++ testBlock2 = alloca(input_h_size*input_v_size); ++ ++ for ( i = 0; i < w + 1 ; i++ ){ ++ for ( j = 0; j < h + 1 ; j++ ){ ++ testBlock[i + input_h_size*j] = src[i + j*stride]; ++ } ++ } ++ ++ for ( i = 0; i < w ; i++ ){ ++ for ( j = 0; j < h ; j++ ){ ++ testBlock2[i + input_h_size*j] = dst[i + j*stride]; ++ } ++ } ++ ++ test(dst, src, stride, h, x, y); ++ correct(testBlock2, testBlock, input_h_size, h, x, y); ++ ++ check_block(dst, testBlock2, stride, input_h_size, h, w, name, 0); ++ ++} ++ ++void test_qpel_mc_funcs(qpel_mc_func test, qpel_mc_func correct, uint8_t *dst, ++ uint8_t *src, int stride, int size, char *name){ ++ uint8_t *testBlock, *testBlock2; ++ int i, j; ++ int test_stride = size + 8; ++ ++ testBlock = alloca(test_stride*(size+8)) + 4 + test_stride*4; ++ testBlock2 = alloca(test_stride*size); ++ ++ for ( i = -4; i < size+4 ; i++ ){ ++ for ( j = -4; j < size+4 ; j++ ){ ++ testBlock[i + test_stride*j] = src[i + j*stride]; ++ } ++ } ++ ++ for ( i = 0; i < size ; i++ ){ ++ for ( j = 0; j < size ; j++ ){ ++ testBlock2[i + test_stride*j] = dst[i + j*stride]; ++ } ++ } ++ ++ correct(dst, src, stride); ++ test(testBlock2, testBlock, test_stride); ++ ++ check_block(testBlock2, dst, test_stride, stride, size, size, name, 0); ++ ++} ++ ++ ++#define test_pixels_funcs(PFX, NUM ) \ ++void test_ ## PFX ## _pixels ## NUM ## _avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ ++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _avr32, PFX ## _pixels ## NUM ## _c, \ ++ block, pixels, line_size, h, "test_" #PFX "_pixels", 0, 0); } \ ++void test_ ## PFX ## _pixels ## NUM ## _h_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ ++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _h_avr32, PFX ## _pixels ## NUM ## _x2_c, \ ++ block, pixels, line_size, h, "test_" #PFX "_pixels_h", 1, 0); } \ ++void test_ ## PFX ## _pixels ## NUM ## _v_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ ++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _v_avr32, PFX ## _pixels ## NUM ## _y2_c, \ ++ block, pixels, line_size, h, "test_" #PFX "_pixels_v", 0, 1); } \ ++void test_ ## PFX ## _pixels ## NUM ## _hv_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ ++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _hv_avr32, PFX ## _pixels ## NUM ## _xy2_c, \ ++ block, pixels, line_size, h, "test_" #PFX "_pixels_hv", 1, 1); } ++ ++test_pixels_funcs(put, 8); ++test_pixels_funcs(put_no_rnd, 8); ++test_pixels_funcs(put, 16); ++test_pixels_funcs(put_no_rnd, 16); ++ ++test_pixels_funcs(avg, 8); ++test_pixels_funcs(avg_no_rnd, 8); ++test_pixels_funcs(avg, 16); ++test_pixels_funcs(avg_no_rnd, 16); ++ ++#define test_h264_chroma_mc_funcs(PFX, NUM ) \ ++void test_ ## PFX ## _h264_chroma_mc ## NUM ## _pico( uint8_t *dst, uint8_t *src, int stride, int h, int x, int y){ \ ++ test_h264_chroma_mc_funcs(PFX ## _h264_chroma_mc ## NUM ## _pico, PFX ## _h264_chroma_mc ## NUM ## _c, \ ++ dst, src, stride, h, NUM, x, y, "test_" #PFX "_h264_chroma_mc" #NUM "_pico"); } \ ++ ++test_h264_chroma_mc_funcs(put, 2); ++test_h264_chroma_mc_funcs(put, 4); ++test_h264_chroma_mc_funcs(put, 8); ++test_h264_chroma_mc_funcs(avg, 2); ++test_h264_chroma_mc_funcs(avg, 4); ++test_h264_chroma_mc_funcs(avg, 8); ++ ++#define test_qpel_mc_funcs_type(PFX, NUM, TYPE ) \ ++void test_ ## PFX ## NUM ## _ ## TYPE ## _pico( uint8_t *dst, uint8_t *src, int stride){ \ ++ test_qpel_mc_funcs(PFX ## NUM ## _ ## TYPE ## _pico, PFX ## NUM ## _ ## TYPE ## _c, \ ++ dst, src, stride, NUM, "test_" #PFX #NUM "_" #TYPE "_pico"); } ++ ++#define test_qpel_mc_funcs(PFX, NUM) \ ++ test_qpel_mc_funcs_type(PFX, NUM, mc00);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc10);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc20);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc30);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc01);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc11);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc21);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc31);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc02);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc12);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc22);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc32);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc03);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc13);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc23);\ ++ test_qpel_mc_funcs_type(PFX, NUM, mc33) ++ ++test_qpel_mc_funcs(put_h264_qpel, 4); ++test_qpel_mc_funcs(put_h264_qpel, 8); ++test_qpel_mc_funcs(put_h264_qpel, 16); ++test_qpel_mc_funcs(avg_h264_qpel, 4); ++test_qpel_mc_funcs(avg_h264_qpel, 8); ++test_qpel_mc_funcs(avg_h264_qpel, 16); ++ ++ ++#define dspfunc(PFX, IDX, NUM) \ ++ c->PFX ## _pixels_tab[IDX][ 0] = DSP_FUNC_NAME( PFX ## NUM ## _mc00_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 1] = DSP_FUNC_NAME( PFX ## NUM ## _mc10_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 2] = DSP_FUNC_NAME( PFX ## NUM ## _mc20_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 3] = DSP_FUNC_NAME( PFX ## NUM ## _mc30_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 4] = DSP_FUNC_NAME( PFX ## NUM ## _mc01_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 5] = DSP_FUNC_NAME( PFX ## NUM ## _mc11_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 6] = DSP_FUNC_NAME( PFX ## NUM ## _mc21_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 7] = DSP_FUNC_NAME( PFX ## NUM ## _mc31_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 8] = DSP_FUNC_NAME( PFX ## NUM ## _mc02_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 9] = DSP_FUNC_NAME( PFX ## NUM ## _mc12_pico ); \ ++ c->PFX ## _pixels_tab[IDX][10] = DSP_FUNC_NAME( PFX ## NUM ## _mc22_pico ); \ ++ c->PFX ## _pixels_tab[IDX][11] = DSP_FUNC_NAME( PFX ## NUM ## _mc32_pico ); \ ++ c->PFX ## _pixels_tab[IDX][12] = DSP_FUNC_NAME( PFX ## NUM ## _mc03_pico ); \ ++ c->PFX ## _pixels_tab[IDX][13] = DSP_FUNC_NAME( PFX ## NUM ## _mc13_pico ); \ ++ c->PFX ## _pixels_tab[IDX][14] = DSP_FUNC_NAME( PFX ## NUM ## _mc23_pico ); \ ++ c->PFX ## _pixels_tab[IDX][15] = DSP_FUNC_NAME( PFX ## NUM ## _mc33_pico ) ++ ++#endif ++ ++void dsputil_init_avr32(DSPContext* c, AVCodecContext *avctx) ++{ ++ ++ /* H264 */ ++ ++ if ( 0 /*avr32_use_pico*/ ){ ++ c->put_h264_chroma_pixels_tab[0]= DSP_FUNC_NAME(put_h264_chroma_mc8_pico); ++ c->put_h264_chroma_pixels_tab[1]= DSP_FUNC_NAME(put_h264_chroma_mc4_pico); ++ c->put_h264_chroma_pixels_tab[2]= DSP_FUNC_NAME(put_h264_chroma_mc2_pico); ++ ++ c->avg_h264_chroma_pixels_tab[0]= DSP_FUNC_NAME(avg_h264_chroma_mc8_pico); ++ c->avg_h264_chroma_pixels_tab[1]= DSP_FUNC_NAME(avg_h264_chroma_mc4_pico); ++ c->avg_h264_chroma_pixels_tab[2]= DSP_FUNC_NAME(avg_h264_chroma_mc2_pico); ++ } ++ ++#define dspfunc(PFX, IDX, NUM) \ ++ c->PFX ## _pixels_tab[IDX][ 0] = DSP_FUNC_NAME( PFX ## NUM ## _mc00_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 1] = DSP_FUNC_NAME( PFX ## NUM ## _mc10_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 2] = DSP_FUNC_NAME( PFX ## NUM ## _mc20_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 3] = DSP_FUNC_NAME( PFX ## NUM ## _mc30_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 4] = DSP_FUNC_NAME( PFX ## NUM ## _mc01_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 5] = DSP_FUNC_NAME( PFX ## NUM ## _mc11_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 6] = DSP_FUNC_NAME( PFX ## NUM ## _mc21_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 7] = DSP_FUNC_NAME( PFX ## NUM ## _mc31_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 8] = DSP_FUNC_NAME( PFX ## NUM ## _mc02_pico ); \ ++ c->PFX ## _pixels_tab[IDX][ 9] = DSP_FUNC_NAME( PFX ## NUM ## _mc12_pico ); \ ++ c->PFX ## _pixels_tab[IDX][10] = DSP_FUNC_NAME( PFX ## NUM ## _mc22_pico ); \ ++ c->PFX ## _pixels_tab[IDX][11] = DSP_FUNC_NAME( PFX ## NUM ## _mc32_pico ); \ ++ c->PFX ## _pixels_tab[IDX][12] = DSP_FUNC_NAME( PFX ## NUM ## _mc03_pico ); \ ++ c->PFX ## _pixels_tab[IDX][13] = DSP_FUNC_NAME( PFX ## NUM ## _mc13_pico ); \ ++ c->PFX ## _pixels_tab[IDX][14] = DSP_FUNC_NAME( PFX ## NUM ## _mc23_pico ); \ ++ c->PFX ## _pixels_tab[IDX][15] = DSP_FUNC_NAME( PFX ## NUM ## _mc33_pico ) ++ ++ if ( avr32_use_pico ){ ++ dspfunc(put_h264_qpel, 0, 16); ++ dspfunc(put_h264_qpel, 1, 8); ++ dspfunc(put_h264_qpel, 2, 4); ++ dspfunc(avg_h264_qpel, 0, 16); ++ dspfunc(avg_h264_qpel, 1, 8); ++ dspfunc(avg_h264_qpel, 2, 4); ++ } ++ ++ c->idct_put= DSP_FUNC_NAME(idct_put_avr32); ++ c->idct_add= DSP_FUNC_NAME(idct_add_avr32); ++ c->idct = DSP_FUNC_NAME(idct_avr32); ++ c->h264_idct_add = DSP_FUNC_NAME(h264_idct_add_avr32); ++ c->h264_idct8_add = DSP_FUNC_NAME(h264_idct8_add_avr32); ++ ++ /*c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_avr32;*/ ++ ++ c->idct_permutation_type= FF_TRANSPOSE_IDCT_PERM; ++ ++ c->fdct = fdct_avr32; ++ ++ c->clear_blocks = clear_blocks_avr32; ++ ++#undef dspfunc ++#define dspfunc(PFX, IDX, NUM) \ ++ c->PFX ## _pixels_tab[IDX][0] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _avr32 ); \ ++ c->PFX ## _pixels_tab[IDX][1] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _h_avr32); \ ++ c->PFX ## _pixels_tab[IDX][2] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _v_avr32); \ ++ c->PFX ## _pixels_tab[IDX][3] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _hv_avr32) ++ ++ dspfunc(put, 0, 16); ++ dspfunc(put_no_rnd, 0, 16); ++ dspfunc(put, 1, 8); ++ dspfunc(put_no_rnd, 1, 8); ++ ++ dspfunc(avg, 1, 8); ++ dspfunc(avg_no_rnd, 1, 8); ++ dspfunc(avg, 0, 16); ++ dspfunc(avg_no_rnd, 0, 16); ++#undef dspfunc ++ ++} ++ ++ ++ ++#if 0 ++int main(int argc, char *argv[]){ ++ ++ ++} ++#endif ++ +diff --git a/libavcodec/avr32/fdct.S b/libavcodec/avr32/fdct.S +new file mode 100644 +index 0000000..be45b86 +--- /dev/null ++++ b/libavcodec/avr32/fdct.S +@@ -0,0 +1,541 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++//********************************************************** ++//* 2-D fDCT, Based on: * ++//* C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical * ++//* Fast 1-D DCT Algorithms with 11 Multiplications", * ++//* Proc. Int'l. Conf. on Acoustics, Speech, and Signal * ++//* Processing 1989 (ICASSP '89), pp. 988-991. * ++//* * ++//* Fixed point implementation optimized for the AVR-II * ++//* instruction set. If a table is used for the * ++//* coeffisients we can load two and two of them from * ++//* This will give a reduction of ++//* * ++//* * ++//********************************************************** ++ ++ ++/* This routine is a slow-but-accurate integer implementation of the ++ * forward DCT (Discrete Cosine Transform). Taken from the IJG software ++ * ++ * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT ++ * on each column. Direct algorithms are also available, but they are ++ * much more complex and seem not to be any faster when reduced to code. ++ * ++ * This implementation is based on an algorithm described in ++ * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT ++ * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, ++ * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. ++ * The primary algorithm described there uses 11 multiplies and 29 adds. ++ * We use their alternate method with 12 multiplies and 32 adds. ++ * The advantage of this method is that no data path contains more than one ++ * multiplication; this allows a very simple and accurate implementation in ++ * scaled fixed-point arithmetic, with a minimal number of shifts. ++ * ++ * The poop on this scaling stuff is as follows: ++ * ++ * Each 1-D DCT step produces outputs which are a factor of sqrt(N) ++ * larger than the true DCT outputs. The final outputs are therefore ++ * a factor of N larger than desired; since N=8 this can be cured by ++ * a simple right shift at the end of the algorithm. The advantage of ++ * this arrangement is that we save two multiplications per 1-D DCT, ++ * because the y0 and y4 outputs need not be divided by sqrt(N). ++ * In the IJG code, this factor of 8 is removed by the quantization step ++ * (in jcdctmgr.c), here it is removed. ++ * ++ * We have to do addition and subtraction of the integer inputs, which ++ * is no problem, and multiplication by fractional constants, which is ++ * a problem to do in integer arithmetic. We multiply all the constants ++ * by CONST_SCALE and convert them to integer constants (thus retaining ++ * CONST_BITS bits of precision in the constants). After doing a ++ * multiplication we have to divide the product by CONST_SCALE, with proper ++ * rounding, to produce the correct output. This division can be done ++ * cheaply as a right shift of CONST_BITS bits. We postpone shifting ++ * as long as possible so that partial sums can be added together with ++ * full fractional precision. ++ * ++ * The outputs of the first pass are scaled up by PASS1_BITS bits so that ++ * they are represented to better-than-integral precision. These outputs ++ * require 8 + PASS1_BITS + 3 bits; this fits in a 16-bit word ++ * with the recommended scaling. (For 12-bit sample data, the intermediate ++ * array is INT32 anyway.) ++ * ++ * To avoid overflow of the 32-bit intermediate results in pass 2, we must ++ * have 8 + CONST_BITS + PASS1_BITS <= 26. Error analysis ++ * shows that the values given below are the most effective. ++ * ++ * We can gain a little more speed, with a further compromise in accuracy, ++ * by omitting the addition in a descaling shift. This yields an incorrectly ++ * rounded result half the time... ++ */ ++ ++ .global fdct_avr32 ++ ++ ++ ++#define CONST_BITS 13 ++#define PASS1_BITS 2 ++ ++#define FIX_0_298631336 2446 /* FIX(0.298631336) */ ++#define FIX_0_390180644 3196 /* FIX(0.390180644) */ ++#define FIX_0_541196100 4433 /* FIX(0.541196100) */ ++#define FIX_0_765366865 6270 /* FIX(0.765366865) */ ++#define FIX_0_899976223 7373 /* FIX(0.899976223) */ ++#define FIX_1_175875602 9633 /* FIX(1.175875602) */ ++#define FIX_1_501321110 12299 /* FIX(1.501321110) */ ++#define FIX_1_847759065 15137 /* FIX(1.847759065) */ ++#define FIX_1_961570560 16069 /* FIX(1.961570560) */ ++#define FIX_2_053119869 16819 /* FIX(2.053119869) */ ++#define FIX_2_562915447 20995 /* FIX(2.562915447) */ ++#define FIX_3_072711026 25172 /* FIX(3.072711026) */ ++ ++ ++/* ++ * Perform an integer forward DCT on one block of samples. ++ */ ++ ++//void ++//fdct_int32(short *const block) ++//{ ++// int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++// int tmp10, tmp11, tmp12, tmp13; ++// int z1, z2, z3, z4, z5; ++// short *blkptr; ++// int *dataptr; ++// int data[64]; ++// int i; ++// ++// /* Pass 1: process rows. */ ++// /* Note results are scaled up by sqrt(8) compared to a true DCT; */ ++// /* furthermore, we scale the results by 2**PASS1_BITS. */ ++// ++// dataptr = data; ++// blkptr = block; ++ ++ .text ++fdct_avr32: ++ pushm r0-r3, r4-r7, lr ++#define loop_ctr r0 ++#define blkptr r12 ++#define x0 r1 ++#define x1 r2 ++#define x2 r3 ++#define x3 r4 ++#define x4 r5 ++#define x5 r6 ++#define x6 r7 ++#define x7 r8 ++#define tmp0 r5 ++#define tmp7 r2 ++#define tmp1 r3 ++#define tmp6 r4 ++#define tmp2 r9 ++#define tmp5 r8 ++#define tmp3 r7 ++#define tmp4 r6 ++ ++ ++ mov loop_ctr, 8 ++// for (i = 0; i < 8; i++) { ++ROW_LOOP: ++ ++ ldm blkptr, r1, r2, r3, r4 ++ ++// tmp2 = blkptr[2] + blkptr[5]; ++// tmp3 = blkptr[3] + blkptr[4]; ++ paddx.h r5, r3, r2 ++// tmp5 = blkptr[2] - blkptr[5]; ++// tmp4 = blkptr[3] - blkptr[4]; ++ psubx.h r6, r3, r2 ++// tmp0 = blkptr[0] + blkptr[7]; ++// tmp1 = blkptr[1] + blkptr[6]; ++ paddx.h r2, r4, r1 ++// tmp7 = blkptr[0] - blkptr[7]; ++// tmp6 = blkptr[1] - blkptr[6]; ++ psubx.h r3, r4, r1 ++ ++// /* Even part per LL&M figure 1 --- note that published figure is faulty; ++// * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". ++// */ ++ ++#define tmp10 r1 ++#define tmp13 r5 ++#define tmp11 r7 ++#define tmp12 r3 ++#define z1 r9 ++ ++// tmp10 = tmp0 + tmp3; ++// tmp13 = tmp0 - tmp3; ++ paddsub.h r1, r2:t, r5:b ++// tmp11 = tmp1 + tmp2; ++// tmp12 = tmp1 - tmp2; ++ paddsub.h r4, r2:b, r5:t ++ ++ ++// dataptr[0] = (tmp10 + tmp11) << PASS1_BITS; ++// dataptr[4] = (tmp10 - tmp11) << PASS1_BITS; ++ paddsub.h r7, r1:t, r4:t ++ ld.w r10, pc[const_table - .] ++ plsl.h r7, r7, PASS1_BITS ++ ++// z1 = (tmp12 + tmp13) * FIX_0_541196100; ++ addhh.w r8, r4:b, r1:b ++ mulhh.w r8, r8:b, r10:t ++ ++// dataptr[2] = ++// DESCALE(z1 + tmp13 * FIX_0_765366865, CONST_BITS - PASS1_BITS); ++// dataptr[6] = ++// DESCALE(z1 + tmp12 * (-FIX_1_847759065), CONST_BITS - PASS1_BITS); ++ mulhh.w r9, r1:b, r10:b ++ ld.w r10, pc[const_table - . + 4] ++ add r1, r8, r9 ++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ mulhh.w r9, r4:b, r10:t ++ add r4, r8, r9 ++ satrnds r4 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ ++// /* Odd part per figure 8 --- note paper omits factor of sqrt(2). ++// * cK represents cos(K*pi/16). ++// * i0..i3 in the paper are tmp4..tmp7 here. ++// */ ++ ++#define z2 r5 ++#define z3 r6 ++#define z4 r7 ++#define z5 r8 ++ ++// z4 = tmp5 + tmp7; ++// z3 = tmp4 + tmp6; ++ padd.h r2, r6, r3 ++// z2 = tmp5 + tmp6; ++// z1 = tmp4 + tmp7; ++ paddx.h r5, r6, r3 ++ ++ lddpc r9, pc[const_table - . + 8] ++// z5 = (z3 + z4) * FIX_1_175875602; /* sqrt(2) * c3 */ ++ addhh.w r8, r2:t, r2:b ++ mulhh.w r8, r8:b, r10:b ++ lddpc r10, pc[const_table - . + 12] ++ ++ ++// tmp4 *= FIX_0_298631336; /* sqrt(2) * (-c1+c3+c5-c7) */ ++ mulhh.w r11, r6:b, r9:t ++ ++// tmp5 *= FIX_2_053119869; /* sqrt(2) * ( c1+c3-c5+c7) */ ++ mulhh.w r6, r6:t, r9:b ++ ++// tmp6 *= FIX_3_072711026; /* sqrt(2) * ( c1+c3+c5-c7) */ ++ lddpc r9, pc[const_table - . + 20] ++ mulhh.w lr, r3:b, r10:t ++ ++// tmp7 *= FIX_1_501321110; /* sqrt(2) * ( c1+c3-c5-c7) */ ++ mulhh.w r3, r3:t, r10:b ++ ++// z3 *= -FIX_1_961570560; /* sqrt(2) * (-c3-c5) */ ++ mulhh.w r10, r2:b, r9:t ++ ++// z4 *= -FIX_0_390180644; /* sqrt(2) * (c5-c3) */ ++ mulhh.w r2, r2:t, r9:b ++ lddpc r9, pc[const_table - . + 16] ++// z3 += z5; ++// z4 += z5; ++ add r10, r8 ++ add r2, r8 ++ ++// z1 *= -FIX_0_899976223; /* sqrt(2) * (c7-c3) */ ++ mulhh.w r8, r5:b, r9:t ++ ++// z2 *= -FIX_2_562915447; /* sqrt(2) * (-c1-c3) */ ++ mulhh.w r5, r5:t, r9:b ++ ++// dataptr[7] = DESCALE(tmp4 + z1 + z3, CONST_BITS - PASS1_BITS); ++ add r11, r8 ++ add r11, r10 ++ satrnds r11 >> (CONST_BITS - PASS1_BITS), 31 ++ ++// dataptr[5] = DESCALE(tmp5 + z2 + z4, CONST_BITS - PASS1_BITS); ++ add r6, r5 ++ ++ sthh.w blkptr[6*2], r4:b, r11:b ++ add r6, r2 ++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 ++ ++// dataptr[3] = DESCALE(tmp6 + z2 + z3, CONST_BITS - PASS1_BITS); ++ add lr, r5 ++ sthh.w blkptr[4*2], r7:b, r6:b ++ add lr, r10 ++ satrnds lr >> (CONST_BITS - PASS1_BITS), 31 ++ ++// dataptr[1] = DESCALE(tmp7 + z1 + z4, CONST_BITS - PASS1_BITS); ++ add r3, r8 ++ sthh.w blkptr[2*2], r1:b, lr:b ++ add r3, r2 ++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ ++ ++// dataptr += 8; /* advance pointer to next row */ ++// blkptr += 8; ++ sthh.w blkptr[0], r7:t, r3:b ++ sub blkptr, -16 ++ sub loop_ctr, 1 ++ brne ROW_LOOP ++ ++// } ++ ++ /* Pass 2: process columns. ++ * We remove the PASS1_BITS scaling, but leave the results scaled up ++ * by an overall factor of 8. ++ */ ++ ++// dataptr = data; ++ sub blkptr, 128 ++ ++ mov loop_ctr, 4 ++// for (i = 0; i < 8; i++) { ++COLOUMN_LOOP: ++ ld.w r1, blkptr[0] ++ ld.w r2, blkptr[1*8*2] ++ ld.w r3, blkptr[2*8*2] ++ ld.w r4, blkptr[3*8*2] ++ ld.w r5, blkptr[4*8*2] ++ ld.w r6, blkptr[5*8*2] ++ ld.w r7, blkptr[6*8*2] ++ ld.w r8, blkptr[7*8*2] ++ ++// tmp0 = blkptr[0] + blkptr[7*8]; ++ padds.sh r9, r1, r8 ++// tmp7 = blkptr[0] - blkptr[7*8]; ++ psubs.sh r1, r1, r8 ++// tmp1 = blkptr[1*8] + blkptr[6*8]; ++ padds.sh r8, r2, r7 ++// tmp6 = blkptr[1*8] - blkptr[6*8]; ++ psubs.sh r2, r2, r7 ++// tmp2 = blkptr[2*8] + blkptr[5*8]; ++ padds.sh r7, r3, r6 ++// tmp5 = blkptr[2*8] - blkptr[5*8]; ++ psubs.sh r3, r3, r6 ++// tmp3 = blkptr[3*8] + blkptr[4*8]; ++ padds.sh r6, r4, r5 ++// tmp4 = blkptr[3*8] - blkptr[4*8]; ++ psubs.sh r4, r4, r5 ++ ++// /* even part per ll&m figure 1 --- note that published figure is faulty; ++// * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". ++// */ ++// ++// tmp10 = tmp0 + tmp3; ++ padds.sh r5, r9, r6 ++// tmp13 = tmp0 - tmp3; ++ psubs.sh r9, r9, r6 ++// tmp11 = tmp1 + tmp2; ++ padds.sh r6, r8, r7 ++// tmp12 = tmp1 - tmp2; ++ psubs.sh r8, r8, r7 ++ ++// dataptr[0] = DESCALE(tmp10 + tmp11, PASS1_BITS); ++// dataptr[32] = DESCALE(tmp10 - tmp11, PASS1_BITS); ++//Might get an overflow here ++ padds.sh r7, r5, r6 ++ psubs.sh r5, r5, r6 ++ ++ //Rounding ++ mov lr, (1 << (PASS1_BITS + 2)) ++ orh lr, hi(1 << (16 + PASS1_BITS + 2)) ++ padds.sh r7, r7, lr ++ padds.sh r5, r5, lr ++ ++ pasr.h r7, r7, PASS1_BITS + 3 ++ pasr.h r5, r5, PASS1_BITS + 3 ++ st.w r12[0], r7 ++ st.w r12[4*8*2], r5 ++ ++ lddpc r10, const_table2 ++ ++ ++// z1 = (tmp12 + tmp13) * FIX_0_541196100; ++ padds.sh r5, r8, r9 ++ mulhh.w r6, r5:t, r10:t ++ mulhh.w r7, r5:b, r10:t ++ ++// dataptr[16] = ++// DESCALE(z1 + tmp13 * FIX_0_765366865, CONST_BITS + PASS1_BITS); ++ lddpc r11, const_table2 + 4 ++ mulhh.w lr, r9:t, r10:b ++ mulhh.w r9, r9:b, r10:b ++ add lr, r6 ++ add r9, r7 ++ satrnds lr >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r9 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[2*8*2], lr:b, r9:b ++ ++// dataptr[48] = ++// DESCALE(z1 + tmp12 * (-FIX_1_847759065), CONST_BITS + PASS1_BITS); ++ mulhh.w lr, r8:t, r11:t ++ mulhh.w r8, r8:b, r11:t ++ add lr, r6 ++ add r8, r7 ++ satrnds lr >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r8 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[6*8*2], lr:b, r8:b ++ ++// /* Odd part per figure 8 --- note paper omits factor of sqrt(2). ++// * cK represents cos(K*pi/16). ++// * i0..i3 in the paper are tmp4..tmp7 here. ++// */ ++// ++// z2 = tmp5 + tmp6; ++// z3 = tmp4 + tmp6; ++// z4 = tmp5 + tmp7; ++ padds.sh r5, r3, r2 ++ padds.sh r6, r4, r2 ++ padds.sh r7, r3, r1 ++ ++// z5 = (z3 + z4) * FIX_1_175875602; /* sqrt(2) * c3 */ ++ padds.sh r8, r6, r7 ++ mulhh.w r9, r8:t, r11:b ++ mulhh.w r8, r8:b, r11:b ++ ++// z3 *= -FIX_1_961570560; /* sqrt(2) * (-c3-c5) */ ++// z3 += z5; ++ lddpc r11, const_table2 + 8 ++ mulhh.w r10, r6:t, r11:t ++ mulhh.w r6, r6:b, r11:t ++ add r10, r9 ++ add r6, r8 ++ ++// z4 *= -FIX_0_390180644; /* sqrt(2) * (c5-c3) */ ++// z4 += z5; ++ mulhh.w lr, r7:t, r11:b ++ mulhh.w r7, r7:b, r11:b ++ lddpc r11, const_table2 + 12 ++ st.w --sp,r0 ++ add lr, r9 ++ add r7, r8 ++ ++// tmp6 *= FIX_3_072711026; /* sqrt(2) * ( c1+c3+c5-c7) */ ++ mulhh.w r0, r2:t, r11:t ++ machh.w r0, r5:t, r11:b ++ mulhh.w r2, r2:b, r11:t ++ machh.w r2, r5:b, r11:b ++ ++// z2 *= -FIX_2_562915447; /* sqrt(2) * (-c1-c3) */ ++// dataptr[24] = DESCALE(tmp6 + z2 + z3, CONST_BITS + PASS1_BITS); ++ add r0, r10 ++ lddpc r11, const_table2 + 16 ++ add r2, r6 ++ satrnds r0 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r2 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[3*8*2], r0:b, r2:b ++// tmp5 *= FIX_2_053119869; /* sqrt(2) * ( c1+c3-c5+c7) */ ++ mulhh.w r0, r3:t, r11:t ++ machh.w r0, r5:t, r11:b ++ mulhh.w r2, r3:b, r11:t ++ machh.w r2, r5:b, r11:b ++ add r0, lr ++ lddpc r11, const_table2 + 20 ++ add r2, r7 ++ ++// dataptr[40] = DESCALE(tmp5 + z2 + z4, CONST_BITS + PASS1_BITS); ++ satrnds r0 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r2 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[5*8*2], r0:b, r2:b ++ ++ ++// z1 = tmp4 + tmp7; ++ padds.sh r2, r4, r1 ++ ++// tmp4 *= FIX_0_298631336; /* sqrt(2) * (-c1+c3+c5-c7) */ ++ mulhh.w r3, r4:t, r11:t ++ machh.w r3, r2:t, r11:b ++ mulhh.w r4, r4:b, r11:t ++ machh.w r4, r2:b, r11:b ++ add r3, r10 ++ lddpc r11, const_table2 + 24 ++ add r4, r6 ++ ++// z1 *= -FIX_0_899976223; /* sqrt(2) * (c7-c3) */ ++// dataptr[56] = DESCALE(tmp4 + z1 + z3, CONST_BITS + PASS1_BITS); ++ satrnds r3 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r4 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[7*8*2], r3:b, r4:b ++ ++ ++// tmp7 *= FIX_1_501321110; /* sqrt(2) * ( c1+c3-c5-c7) */ ++ mulhh.w r3, r1:t, r11:t ++ machh.w r3, r2:t, r11:b ++ mulhh.w r4, r1:b, r11:t ++ machh.w r4, r2:b, r11:b ++ add r3, lr ++ add r4, r7 ++ ++// dataptr[8] = DESCALE(tmp7 + z1 + z4, CONST_BITS + PASS1_BITS); ++ satrnds r3 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ satrnds r4 >> (CONST_BITS + PASS1_BITS + 3), 31 ++ sthh.w r12[1*8*2], r3:b, r4:b ++ ld.w r0, sp++ ++ ++// dataptr++; /* advance pointer to next column */ ++ sub blkptr, -4 ++ sub loop_ctr, 1 ++ brne COLOUMN_LOOP ++ ++// } ++ ++ popm r0-r3, r4-r7, pc ++ ++// /* descale */ ++// for (i = 0; i < 64; i++) ++// block[i] = (short int) DESCALE(data[i], 3); ++ ++ ++//} ++ ++ ++ .align 2 ++const_table: .short FIX_0_541196100, FIX_0_765366865, -FIX_1_847759065, FIX_1_175875602 ++ .short FIX_0_298631336, FIX_2_053119869, FIX_3_072711026, FIX_1_501321110 ++ .short -FIX_0_899976223,-FIX_2_562915447, -FIX_1_961570560, -FIX_0_390180644 ++ ++const_table2: .short FIX_0_541196100, FIX_0_765366865, -FIX_1_847759065, FIX_1_175875602 ++ .short -FIX_1_961570560, -FIX_0_390180644, FIX_3_072711026, -FIX_2_562915447 ++ .short FIX_2_053119869, -FIX_2_562915447, FIX_0_298631336, -FIX_0_899976223 ++ .short FIX_1_501321110, -FIX_0_899976223 ++ ++ ++ ++ +diff --git a/libavcodec/avr32/h264idct.S b/libavcodec/avr32/h264idct.S +new file mode 100644 +index 0000000..4b23e2d +--- /dev/null ++++ b/libavcodec/avr32/h264idct.S +@@ -0,0 +1,451 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++ .global h264_idct_add_avr32 ++ ++ /* Macro for performing the 1-D transform on one row line. ++ ++ The register 'w01' should contain the first two pixels, ++ and the register 'w23' should contain the last two pixels ++ in the line. The resulting line is placed in p01 and p23 ++ so that { w01, w23 } = { x0, x1, x3, x2 }. ++ 'tmp' and 'tmp2' should be scratchpad registers. */ ++ .macro transform_row w01, w23, tmp, tmp2 ++ add \tmp, \w23, \w01 << 1 /* tmp = { xxxx, 2*w1 + w3 } */ ++ sub \tmp2, \w01, \w23 << 1 /* tmp2 = { xxxx, w1 - 2*w3 } */ ++ bfins \tmp2, \tmp, 16, 16 /* tmp2 = { 2*w1 + w3, w1 - 2*w3 } */ ++ pasr.h \tmp2, \tmp2, 1 /* tmp2 = { w1 + w3/2, w1/2 - w3 } */ ++ paddsub.h \tmp, \w01:t, \w23:t /* tmp = { w0 + w2, w0 - w2 } */ ++ padd.h \w01, \tmp, \tmp2 /* w01 = { w0 + w2 + w1 + w3/2, w0 - w2 + w1/2 - w3 } */ ++ psub.h \w23, \tmp, \tmp2 /* w23 = { w0 + w2 - w1 - w3/2, w0 - w2 - w1/2 + w3 } */ ++ .endm ++ ++ /* Macro for performing the 1-D transform on two columns. ++ ++ The registers w0, w1, w2, w3 should each contain two ++ packed samples from the two colomns to transform. ++ tmp and tmp2 are scratchpad registers. ++ ++ The resulting transformed columns are placed in the ++ same positions as the input columns. ++ */ ++ .macro transform_2columns w0, w1, w2, w3, tmp, tmp2 ++ padd.h \tmp, \w0, \w2 /* tmp = z0 = w0 + w2 */ ++ psub.h \w0, \w0, \w2 /* w0 = z1 = w0 - w2 */ ++ pasr.h \w2, \w1, 1 /* w2 = w1/2 */ ++ pasr.h \tmp2, \w3, 1 /* tmp2 = w3/2 */ ++ psub.h \w3, \w2, \w3 /* w3 = z2 = w1/2 - w3 */ ++ padd.h \tmp2, \w1, \tmp2/* tmp2 = z3 = w1 + w3/2 */ ++ padd.h \w1, \w0, \w3 /* w1 = x1 = z1 + z2 */ ++ psub.h \w2, \w0, \w3 /* w2 = x2 = z1 - z2 */ ++ padd.h \w0, \tmp, \tmp2/* w0 = x0 = z0 + z3 */ ++ psub.h \w3, \tmp, \tmp2/* w3 = x3 = z0 - z3 */ ++ /* Scale down result. */ ++ pasr.h \w0, \w0, 6 ++ pasr.h \w1, \w1, 6 ++ pasr.h \w2, \w2, 6 ++ pasr.h \w3, \w3, 6 ++ .endm ++ ++/*void h264_idct_add_avr32(uint8_t *dst, DCTELEM *block, int stride)*/ ++ ++h264_idct_add_avr32: ++ ++ stm --sp,r0-r3,r4-r7, lr ++ ++ /* Setup rounding factor. */ ++ mov r0, (1 << 5) ++ lsl r0, 16 ++ ++ /* Load block */ ++ ldm r11,r2-r9 ++ /* r9 = { w00, w01 }, ++ r8 = { w02, w03 }, ++ r7 = { w10, w11 }, ++ r6 = { w12, w13 }, ++ r5 = { w20, w21 }, ++ r4 = { w22, w23 }, ++ r3 = { w30, w31 }, ++ r2 = { w32, w33 } */ ++ ++ ++ /* Add the rounding factor to w00. */ ++ add r9, r0 ++ ++ /* Transform rows */ ++ transform_row r9, r8, r0, r1 ++ transform_row r7, r6, r0, r1 ++ transform_row r5, r4, r0, r1 ++ transform_row r3, r2, r0, r1 ++ ++ /* Transform columns */ ++ transform_2columns r9, r7, r5, r3, r0, r1 ++ transform_2columns r8, r6, r4, r2, r0, r1 ++ ++ /* Load predicted pixels.*/ ++ ld.w lr, r12[0] ++ ld.w r11, r12[r10] ++ ++ /* Unpack to halwords. */ ++ punpckub.h r0, lr:t ++ punpckub.h r1, lr:b ++ ++ /* Add with transformed row. */ ++ padd.h r0, r0, r9 ++ paddx.h r1, r1, r8 ++ /* Pack and saturate back to 8-bit pixels. */ ++ packsh.ub r0, r0, r1 ++ ++ /* Unpack to halwords. */ ++ punpckub.h lr, r11:t ++ punpckub.h r11, r11:b ++ ++ /* Add with transformed row. */ ++ padd.h lr, lr, r7 ++ paddx.h r11, r11, r6 ++ /* Pack and saturate back to 8-bit pixels. */ ++ packsh.ub r1, lr, r11 ++ ++ /* Store back to frame. */ ++ st.w r12[0], r0 ++ st.w r12[r10], r1 ++ ++ add r12, r12, r10 << 1 ++ ++ /* Load predicted pixels.*/ ++ ld.w lr, r12[0] ++ ld.w r11, r12[r10] ++ ++ /* Unpack to halwords. */ ++ punpckub.h r0, lr:t ++ punpckub.h r1, lr:b ++ ++ /* Add with transformed row. */ ++ padd.h r0, r0, r5 ++ paddx.h r1, r1, r4 ++ /* Pack and saturate back to 8-bit pixels. */ ++ packsh.ub r0, r0, r1 ++ ++ /* Unpack to halwords. */ ++ punpckub.h lr, r11:t ++ punpckub.h r11, r11:b ++ ++ /* Add with transformed row. */ ++ padd.h lr, lr, r3 ++ paddx.h r11, r11, r2 ++ /* Pack and saturate back to 8-bit pixels. */ ++ packsh.ub r1, lr, r11 ++ ++ /* Store back to frame. */ ++ st.w r12[0], r0 ++ st.w r12[r10], r1 ++ ++ ldm sp++,r0-r3,r4-r7, pc ++ ++ ++ .global h264_idct8_add_avr32 ++//void ff_h264_idct8_add_c(uint8_t *dst, DCTELEM *block, int stride){ ++ ++h264_idct8_add_avr32: ++ stm --sp,r0-r3,r4-r7, lr ++ ++ /* Push dst and stride on stack */ ++ stm --sp,r10,r12 ++ ++// int i; ++// DCTELEM (*src)[8] = (DCTELEM(*)[8])block; ++// uint8_t *cm = cropTbl + MAX_NEG_CROP; ++ ++// block[0] += 32; ++ ++ ++// for( i = 0; i < 8; i++ ) ++// { ++ mov lr, 4 ++0: ++ ld.w r7, r11[0*(8*2)] ++ ld.w r6, r11[1*(8*2)] ++ ld.w r5, r11[2*(8*2)] ++ ld.w r4, r11[3*(8*2)] ++ ld.w r3, r11[4*(8*2)] ++ ld.w r2, r11[5*(8*2)] ++ ld.w r1, r11[6*(8*2)] ++ ld.w r0, r11[7*(8*2)] ++ ++/* ++ ++ const int a0 = src[0][i] + src[4][i]; ++ const int a2 = src[0][i] - src[4][i]; ++ const int a4 = (src[2][i]>>1) - src[6][i]; ++ const int a6 = (src[6][i]>>1) + src[2][i]; ++*/ ++ padd.h r8, r7, r3 /* r8 = a0 */ ++ psub.h r7, r7, r3 /* r7 = a2 */ ++ pasr.h r3, r5, 1 /* r3 = src[2][i] >> 1 */ ++ pasr.h r9, r1, 1 /* r9 = src[6][i] >> 1 */ ++ psub.h r3, r3, r1 /* r3 = a4 */ ++ padd.h r9, r9, r5 /* r9 = a6 */ ++ ++/* ++ const int b0 = a0 + a6; ++ const int b2 = a2 + a4; ++ const int b4 = a2 - a4; ++ const int b6 = a0 - a6; ++*/ ++ padd.h r1, r8, r9 /* r1 = b0 */ ++ psub.h r8, r8, r9 /* r8 = b6 */ ++ padd.h r5, r7, r3 /* r5 = b2 */ ++ psub.h r7, r7, r3 /* r7 = b4 */ ++ ++/* ++ const int a1 = -src[3][i] + src[5][i] - src[7][i] - (src[7][i]>>1); ++ const int a3 = src[1][i] + src[7][i] - src[3][i] - (src[3][i]>>1); ++ const int a5 = -src[1][i] + src[7][i] + src[5][i] + (src[5][i]>>1); ++ const int a7 = src[3][i] + src[5][i] + src[1][i] + (src[1][i]>>1); ++*/ ++ pasr.h r3, r0, 1 ++ padd.h r3, r3, r0 ++ psub.h r3, r2, r3 ++ psub.h r3, r3, r4 /* r3 = a1 */ ++ ++ pasr.h r9, r4, 1 ++ padd.h r9, r9, r4 ++ psub.h r9, r0, r9 ++ padd.h r9, r6, r9 /* r9 = a3 */ ++ ++ pasr.h r10, r2, 1 ++ padd.h r10, r10, r2 ++ padd.h r10, r10, r0 ++ psub.h r10, r10, r6 /* r10 = a5 */ ++ ++ pasr.h r0, r6, 1 ++ padd.h r0, r0, r6 ++ padd.h r0, r0, r2 ++ padd.h r0, r0, r4 /* r0 = a7 */ ++/* ++ const int b1 = (a7>>2) + a1; ++ const int b3 = a3 + (a5>>2); ++ const int b5 = (a3>>2) - a5; ++ const int b7 = a7 - (a1>>2); ++*/ ++ pasr.h r2, r0, 2 ++ padd.h r2, r2, r3 /* r2 = b1 */ ++ pasr.h r3, r3, 2 ++ psub.h r3, r0, r3 /* r3 = b7 */ ++ ++ pasr.h r0, r10, 2 ++ padd.h r0, r0, r9 /* r0 = b3 */ ++ pasr.h r9, r9, 2 ++ psub.h r9, r9, r10 /* r9 = b5 */ ++ ++ ++/* ++ src[0][i] = b0 + b7; ++ src[7][i] = b0 - b7; ++ src[1][i] = b2 + b5; ++ src[6][i] = b2 - b5; ++ src[2][i] = b4 + b3; ++ src[5][i] = b4 - b3; ++ src[3][i] = b6 + b1; ++ src[4][i] = b6 - b1; */ ++ ++ padd.h r4, r1, r3 ++ psub.h r1, r1, r3 ++ st.w r11[0*(8*2)], r4 ++ st.w r11[7*(8*2)], r1 ++ ++ padd.h r3, r5, r9 ++ psub.h r5, r5, r9 ++ st.w r11[1*(8*2)], r3 ++ st.w r11[6*(8*2)], r5 ++ ++ padd.h r9, r7, r0 ++ psub.h r7, r7, r0 ++ st.w r11[2*(8*2)], r9 ++ st.w r11[5*(8*2)], r7 ++ ++ padd.h r0, r8, r2 ++ psub.h r8, r8, r2 ++ st.w r11[3*(8*2)], r0 ++ st.w r11[4*(8*2)], r8 ++ ++ sub r11, -4 ++ sub lr, 1 ++ brne 0b ++ ++// } ++ ++ lddsp r12, sp[0] /* r12 = dst */ ++ sub r11, 4*4 ++ ldm r11++, r4-r7 ++ mov lr, 8 ++ /* Push dst and stride on stack */ ++ ++1: ++// for( i = 0; i < 8; i++ ) ++// { ++ ++ /* r7 = {src[i][0], src[i][1]} ++ r6 = {src[i][2], src[i][3]} ++ r5 = {src[i][4], src[i][5]} ++ r4 = {src[i][6], src[i][7]} */ ++ ++/* ++ const int a0 = src[i][0] + src[i][4]; ++ const int a2 = src[i][0] - src[i][4]; ++ const int a4 = (src[i][2]>>1) - src[i][6]; ++ const int a6 = (src[i][6]>>1) + src[i][2]; ++*/ ++ pasr.h r8, r6, 1 ++ pasr.h r9, r4, 1 ++ addhh.w r0, r7:t, r5:t /* r0 = a0 */ ++ subhh.w r1, r7:t, r5:t /* r1 = a2 */ ++ subhh.w r2, r8:t, r4:t /* r2 = a4 */ ++ addhh.w r3, r9:t, r6:t /* r3 = a6 */ ++ ++/* ++ const int b0 = a0 + a6; ++ const int b2 = a2 + a4; ++ const int b4 = a2 - a4; ++ const int b6 = a0 - a6; ++*/ ++ add r10, r0, r3 /* r10 = b0 */ ++ sub r0, r3 /* r0 = b6 */ ++ add r3, r1, r2 /* r3 = b2 */ ++ sub r1, r2 /* r1 = b4 */ ++/* ++ ++ ++ const int a7 = src[i][5] + src[i][3] + src[i][1] + (src[i][1]>>1); ++ const int a1 = src[i][5] - src[i][3] - src[i][7] - (src[i][7]>>1); ++ const int a3 = src[i][7] + src[i][1] - src[i][3] - (src[i][3]>>1); ++ const int a5 = src[i][7] - src[i][1] + src[i][5] + (src[i][5]>>1); */ ++ addhh.w r8, r8:b, r6:b ++ addhh.w r2, r4:b, r7:b ++ sub r2, r8 /* r2 = a3 */ ++ ++ addhh.w r9, r9:b, r4:b ++ subhh.w r8, r5:b, r6:b ++ sub r8, r9 /* r8 = a1 */ ++ ++ pasr.h r9, r7, 1 ++ addhh.w r9, r9:b, r7:b ++ addhh.w r6, r5:b, r6:b ++ add r6, r9 /* r6 = a7 */ ++ ++ pasr.h r9, r5, 1 ++ addhh.w r9, r9:b, r5:b ++ subhh.w r5, r4:b, r7:b ++ add r5, r9 /* r5 = a5 */ ++ ++/* const int b1 = (a7>>2) + a1; ++ const int b3 = (a5>>2) + a3; ++ const int b5 = (a3>>2) - a5; ++ const int b7 = -(a1>>2) + a7 ; */ ++ asr r4, r6, 2 ++ add r4, r8 /* r4 = b1 */ ++ asr r8, 2 ++ rsub r8, r6 /* r8 = b7 */ ++ ++ asr r6, r5, 2 ++ add r6, r2 /* r6 = b3 */ ++ asr r2, 2 ++ sub r2, r5 /* r2 = b5 */ ++ ++/* ++ dst[i*stride + 0] = cm[ dst[i*stride + 0] + ((b0 + b7) >> 6) ]; ++ dst[i*stride + 1] = cm[ dst[i*stride + 1] + ((b2 + b5) >> 6) ]; ++ dst[i*stride + 2] = cm[ dst[i*stride + 2] + ((b4 + b3) >> 6) ]; ++ dst[i*stride + 3] = cm[ dst[i*stride + 3] + ((b6 + b1) >> 6) ]; ++ dst[i*stride + 4] = cm[ dst[i*stride + 4] + ((b6 - b1) >> 6) ]; ++ dst[i*stride + 5] = cm[ dst[i*stride + 5] + ((b4 - b3) >> 6) ]; ++ dst[i*stride + 6] = cm[ dst[i*stride + 6] + ((b2 - b5) >> 6) ]; ++ dst[i*stride + 7] = cm[ dst[i*stride + 7] + ((b0 - b7) >> 6) ]; ++*/ ++ add r5, r10, r8 ++ satrnds r5 >> 6, 0 /* r5 = (b0 + b7) >> 6 */ ++ sub r10, r8 ++ satrnds r10 >> 6, 0 /* r10 = (b0 - b7) >> 6 */ ++ add r8, r3, r2 ++ satrnds r8 >> 6, 0 /* r8 = (b2 + b5) >> 6 */ ++ sub r3, r2 ++ satrnds r3 >> 6, 0 /* r3 = (b2 - b5) >> 6 */ ++ ++ add r2, r1, r6 ++ satrnds r2 >> 6, 0 /* r2 = (b4 + b3) >> 6 */ ++ sub r1, r6 ++ satrnds r1 >> 6, 0 /* r1 = (b4 - b3) >> 6 */ ++ ++ add r6, r0, r4 ++ satrnds r6 >> 6, 0 /* r6 = (b6 + b1) >> 6 */ ++ sub r0, r4 ++ satrnds r0 >> 6, 0 /* r0 = (b6 - b1) >> 6 */ ++ ++ ld.w r4, r12[0] ++ ++ packw.sh r8, r5, r8 ++ packw.sh r7, r2, r6 ++ ld.w r9, r12[4] ++ packw.sh r6, r0, r1 ++ packw.sh r5, r3, r10 ++ ++ punpckub.h r10, r4:t ++ punpckub.h r4, r4:b ++ punpckub.h r3, r9:t ++ punpckub.h r9, r9:b ++ ++ padd.h r8, r8, r10 ++ padd.h r7, r7, r4 ++ padd.h r6, r6, r3 ++ padd.h r5, r5, r9 ++ ++ lddsp r10, sp[4] /* r10 = stride */ ++ packsh.ub r0, r8, r7 ++ packsh.ub r1, r6, r5 ++ ++ st.w r12[0], r0 ++ st.w r12[4], r1 ++ ++ ldm r11++, r4-r7 ++ add r12, r10 /* dst += stride */ ++ ++ sub lr, 1 ++ brne 1b ++ ++ sub sp, -8 ++ ldm sp++,r0-r3,r4-r7, pc ++ ++ ++ ++// } ++//} +diff --git a/libavcodec/avr32/idct.S b/libavcodec/avr32/idct.S +new file mode 100644 +index 0000000..e7551ec +--- /dev/null ++++ b/libavcodec/avr32/idct.S +@@ -0,0 +1,829 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++ .global idct_add_avr32 ++ .global idct_put_avr32 ++ .global idct_avr32 ++ ++ ++#define CONST_BITS 13 ++#define PASS1_BITS 2 ++ ++#define ONE ((INT32) 1) ++ ++#define CONST_SCALE (ONE << CONST_BITS) ++ ++#define LINE_SIZE 32 ++ ++#define FIX_0_298631336 (2446) /* FIX(0.298631336) */ ++#define FIX_0_390180644 (3196) /* FIX(0.390180644) */ ++#define FIX_0_541196100 (4433) /* FIX(0.541196100) */ ++#define FIX_0_765366865 (6270) /* FIX(0.765366865) */ ++#define FIX_0_899976223 (7373) /* FIX(0.899976223) */ ++#define FIX_1_175875602 (9633) /* FIX(1.175875602) */ ++#define FIX_1_501321110 (12299)/* FIX(1.501321110) */ ++#define FIX_1_847759065 (15137)/* FIX(1.847759065) */ ++#define FIX_1_961570560 (16069)/* FIX(1.961570560) */ ++#define FIX_2_053119869 (16819)/* FIX(2.053119869) */ ++#define FIX_2_562915447 (20995)/* FIX(2.562915447) */ ++#define FIX_3_072711026 (25172)/* FIX(3.072711026) */ ++ ++ ++#define loop_cnt r11 ++ ++ .text ++ ++idct_add_avr32: ++ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables ++ ++ // Give room for some variables on the stack ++ sub sp, 8 ++ stdsp SP[0], r12 // rfp ++ stdsp SP[4], r11 // iinc ++ ++ mov loop_cnt, 8 //Initialize loop counter ++ ++FOR_ROW: ++ ++ ldm r10, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block ++ mov r6, 0 ++#ifdef USE_PREFETCH ++ pref r10[LINE_SIZE] //Prefetch next line ++#endif ++ or r4, r2, r3 << 16 ++ or r4, r1 //Check if all DCT-coeffisients except the DC is zero ++ or r4, r0 ++ brne AC_ROW //If there are non-zero AC coeffisients perform row-transform ++ ++ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5 ++ plsl.h r5, r5, PASS1_BITS ++ mov r4, r5 ++ st.d r10++, r4 ++ st.d r10++, r4 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne FOR_ROW //Perform loop one more time if loop_cnt is not zero ++ ++ bral COLOUMN_TRANSFORM //Perform coloumn transform after row transform is computed ++ ++ ++AC_ROW: ++ ++ ++ ld.w r12, pc[coef_table - .] ++ ld.w r9, pc[coef_table - . + 4] ++ ++ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7] ++ mulhh.w r5, r4:t, r12:t ++ mulhh.w r6, r0:t, r12:b ++ ld.w r12, pc[coef_table - . + 8] ++ mulhh.w r7, r2:t, r9:t ++ add r6, r5 // tmp2 ++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 ++ add r7, r5 // tmp3 ++ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r3:t, r1:t ++ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1 ++ ++ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13 ++ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12 ++ ++ ++ addhh.w lr, r3:b, r1:b // lr = z4 ++ addhh.w r5, r4:b, lr:b ++ mulhh.w r5, r5:b, r9:b // r5 = z5 ++ ++ ld.w r9, pc[coef_table - . + 12] ++ mulhh.w r4, r4:b, r12:t // r4 = z3 ++ mulhh.w lr, lr:b, r12:b // lr = z4 ++ ++ add r4, r5 ++ add lr, r5 ++ ++ addhh.w r5, r2:b, r1:b // r5 = z2 ++ addhh.w r8, r3:b, r0:b // r8 = z1 ++ ++ ++ mulhh.w r0, r0:b, r9:t // r0 = tmp0 ++ ld.w r12, pc[coef_table - . + 16] ++ mulhh.w r1, r1:b, r9:b // r1 = tmp1 ++ ld.w r9, pc[coef_table - . + 20] ++ mulhh.w r2, r2:b, r12:t // r2 = tmp2 ++ mulhh.w r3, r3:b, r12:b // r3 = tmp3 ++ mulhh.w r8, r8:b, r9:t // r8 = z1 ++ mulhh.w r5, r5:b, r9:b // r5 = z2 ++ ++ ++ add r0, r8 ++ add r0, r4 ++ add r1, r5 ++ add r1, lr ++ add r2, r5 ++ add r2, r4 ++ add r3, r8 ++ add r3, lr ++ ++ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6] ++ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7] ++ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5] ++ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4] ++ ++ sthh.w r10[0], r4:t, r5:t ++ sthh.w r10[4], r3:t, r2:t ++ sthh.w r10[8], r2:b, r3:b ++ sthh.w r10[12], r5:b, r4:b ++ ++ ++ ++ sub r10, -16 ++ sub loop_cnt, 1 ++ brne FOR_ROW, e ++ ++COLOUMN_TRANSFORM: ++ ++ sub r10, 128 //Set pointer to start of DCT block ++ ++ ++ mov loop_cnt, 8 ++FOR_COLOUMN: ++ ldins.h r3:t,r10[0] // r3:t = dataptr[0] ++ ldins.h r1:t,r10[1*8*2]// r1:t = dataptr[1] ++ ldins.h r2:t,r10[2*8*2]// r2:t = dataptr[2] ++ ldins.h r0:t,r10[5*8*2]// r0:t = dataptr[5] ++ ldins.h r3:b,r10[4*8*2]// r3:b = dataptr[4] ++ ldins.h r1:b,r10[3*8*2]// r1:b = dataptr[3] ++ ldins.h r2:b,r10[6*8*2]// r2:b = dataptr[6] ++ ldins.h r0:b,r10[7*8*2]// r0:b = dataptr[7] ++ ++ or r4, r1, r3 << 16 ++ or r4, r2 ++ or r4, r0 ++ brne AC_COLOUMN //If there are non-zero AC coeffisients perform row-transform ++ ++ lddsp r12, SP[0] // rfp ++ lddsp r9, SP[4] // iinc ++ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 9 ++ ld.d r0, r12[0] ++ sub r10, -2 // Increment the dataptr ++ bfins r3, r3, 16, 16 ++ punpckub.h r2, r1:t ++ padd.h r2, r2, r3 ++ punpckub.h r1, r1:b ++ padd.h r1, r1, r3 ++ packsh.ub r1, r2, r1 ++ punpckub.h r2, r0:t ++ padd.h r2, r2, r3 ++ punpckub.h r0, r0:b ++ padd.h r0, r0, r3 ++ packsh.ub r0, r2, r0 ++ st.d r12[0], r0 ++ add r12, r9 // increment rfp ++ stdsp SP[0], r12 ++ ++ sub loop_cnt, 1//Decrement loop counter ++ brne FOR_COLOUMN//Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -8 ++ popm r0-r3, r4-r7, pc//Pop back registers and PC ++ ++AC_COLOUMN: ++ ++ ld.w r12, pc[coef_table - .] ++ ld.w r9, pc[coef_table - . + 4] ++ ++ addhh.w r4, r2:t, r2:b ++ mulhh.w r4, r4:b, r12:t // r4 = z1 ++ mulhh.w r5, r2:b, r12:b ++ ld.w r12, pc[coef_table - . + 8] ++ mulhh.w r6, r2:t, r9:t ++ add r5, r4 // r5 = tmp2 ++ add r6, r4 // r6 = tmp3 ++ ++ addhh.w r7, r3:t, r3:b ++ subhh.w r8, r3:t, r3:b ++ ++ lsl r7, CONST_BITS ++ lsl r8, CONST_BITS ++ ++ add r2, r7, r6 // r2 = tmp10 ++ sub r3, r7, r6 // r3 = tmp13 ++ add r4, r8, r5 // r4 = tmp11 ++ sub r5, r8, r5 // r5 = tmp12 ++ ++ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3 ++ addhh.w r7, r6:t, r6:b ++ mulhh.w r7, r7:b, r9:b // r7 = z5 ++ ++ ld.w r9, pc[coef_table - . + 12] ++ mulhh.w r8, r6:b, r12:t // r8 = z3 ++ mulhh.w r6, r6:t, r12:b // r6 = z4 ++ ++ add r8, r7 ++ add r6, r7 ++ ++ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1 ++ ++ mulhh.w r12, r0:b, r9:t // r12 = tmp0 ++ mulhh.w r0, r0:t, r9:b // r0 = tmp1 ++ ld.w r9, pc[coef_table - . + 16] ++ add r12, r8 ++ add r0, r6 ++ ++ ld.w lr, pc[coef_table - . + 20] ++ machh.w r8, r1:b, r9:t // r8 = tmp2 ++ machh.w r6, r1:t, r9:b // r6 = tmp3 ++ mulhh.w r9, r7:b, lr:t // r9 = z1 ++ mulhh.w r7, r7:t, lr:b // r7 = z2 ++ ++ ++ add r12, r9 ++ add r0, r7 ++ add r8, r7 ++ add r6, r9 ++ ++ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0] ++ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7] ++ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1] ++ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6] ++ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2] ++ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5] ++ add r0, r3, r12 // r0 = dataptr[DCTSIZE*3] ++ sub r3, r3, r12 // r3 = dataptr[DCTSIZE*4] ++ ++ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9 ++ ++ packw.sh r1, r1, r6 ++ packw.sh r8, r8, r0 ++ packw.sh r3, r3, r5 ++ packw.sh r4, r4, r2 ++ ++ lddsp r12, SP[0] // rfp ++ lddsp r9, SP[4] // iinc ++ ld.d r6, r12[0] ++ sub r10, -2 // Increment the dataptr ++ punpckub.h r0, r7:t ++ padd.h r1, r1, r0 ++ punpckub.h r0, r7:b ++ padd.h r8, r8, r0 ++ packsh.ub r7, r1, r8 ++ punpckub.h r0, r6:t ++ padd.h r3, r3, r0 ++ punpckub.h r0, r6:b ++ padd.h r4, r4, r0 ++ packsh.ub r6, r3, r4 ++ st.d r12[0], r6 ++ add r12, r9 // increment rfp ++ stdsp SP[0], r12 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne FOR_COLOUMN //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -8 ++ popm r0-r3, r4-r7, pc //Pop back registers and PC ++ ++ ++ ++//Coeffisient Table: ++ .align 2 ++coef_table: ++ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602 ++ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869 ++ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447 ++ ++ ++idct_put_avr32: ++ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables ++ ++ //; Give room for some variables on the stack ++ sub sp, 8 ++ stdsp SP[0], r12 // rfp ++ stdsp SP[4], r11 // iinc ++ ++ mov loop_cnt, 8 //Initialize loop counter ++ ++0: ++ ++ ldm r10, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block ++ mov r6, 0 ++#ifdef USE_PREFETCH ++ pref r10[LINE_SIZE] //Prefetch next line ++#endif ++ or r4, r2, r3 << 16 ++ or r4, r1 //Check if all DCT-coeffisients except the DC is zero ++ or r4, r0 ++ brne 1f //If there are non-zero AC coeffisients perform row-transform ++ ++ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5 ++ plsl.h r5, r5, PASS1_BITS ++ mov r4, r5 ++ st.d r10++, r4 ++ st.d r10++, r4 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ bral 2f //Perform coloumn transform after row transform is computed ++ ++1: ++ ++ ld.w r12, pc[coef_table_copy - .] ++ ld.w r9, pc[coef_table_copy - . + 4] ++ ++ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7] ++ mulhh.w r5, r4:t, r12:t ++ mulhh.w r6, r0:t, r12:b ++ ld.w r12, pc[coef_table_copy - . + 8] ++ mulhh.w r7, r2:t, r9:t ++ add r6, r5 // tmp2 ++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 ++ add r7, r5 // tmp3 ++ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r3:t, r1:t ++ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1 ++ ++ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13 ++ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12 ++ ++ ++ ++ addhh.w lr, r3:b, r1:b // lr = z4 ++ addhh.w r5, r4:b, lr:b ++ mulhh.w r5, r5:b, r9:b // r5 = z5 ++ ++ ld.w r9, pc[coef_table_copy - . + 12] ++ mulhh.w r4, r4:b, r12:t // r4 = z3 ++ mulhh.w lr, lr:b, r12:b // lr = z4 ++ ++ add r4, r5 ++ add lr, r5 ++ ++ addhh.w r5, r2:b, r1:b // r5 = z2 ++ addhh.w r8, r3:b, r0:b // r8 = z1 ++ ++ ++ mulhh.w r0, r0:b, r9:t // r0 = tmp0 ++ ld.w r12, pc[coef_table_copy - . + 16] ++ mulhh.w r1, r1:b, r9:b // r1 = tmp1 ++ ld.w r9, pc[coef_table_copy - . + 20] ++ mulhh.w r2, r2:b, r12:t // r2 = tmp2 ++ mulhh.w r3, r3:b, r12:b // r3 = tmp3 ++ mulhh.w r8, r8:b, r9:t // r8 = z1 ++ mulhh.w r5, r5:b, r9:b // r5 = z2 ++ ++ ++ add r0, r8 ++ add r0, r4 ++ add r1, r5 ++ add r1, lr ++ add r2, r5 ++ add r2, r4 ++ add r3, r8 ++ add r3, lr ++ ++ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6] ++ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7] ++ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5] ++ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4] ++ ++ sthh.w r10[0], r4:t, r5:t ++ sthh.w r10[4], r3:t, r2:t ++ sthh.w r10[8], r2:b, r3:b ++ sthh.w r10[12], r5:b, r4:b ++ ++ ++ ++ sub r10, -16 ++ sub loop_cnt, 1 ++ brne 0b ++ ++2: ++ ++ sub r10, 128 //Set pointer to start of DCT block ++ ++ mov loop_cnt, 8 ++ ++0: ++ ldins.h r3:t,r10[0] // r3:t = dataptr[0] ++ ldins.h r1:t,r10[1*8*2]// r1:t = dataptr[1] ++ ldins.h r2:t,r10[2*8*2]// r2:t = dataptr[2] ++ ldins.h r0:t,r10[5*8*2]// r0:t = dataptr[5] ++ ldins.h r3:b,r10[4*8*2]// r3:b = dataptr[4] ++ ldins.h r1:b,r10[3*8*2]// r1:b = dataptr[3] ++ ldins.h r2:b,r10[6*8*2]// r2:b = dataptr[6] ++ ldins.h r0:b,r10[7*8*2]// r0:b = dataptr[7] ++ ++ or r4, r1, r3 << 16 ++ or r4, r2 ++ or r4, r0 ++ brne 1f //If there are non-zero AC coeffisients perform row-transform ++ ++ lddsp r12, SP[0] // rfp ++ lddsp r9, SP[4] // iinc ++ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 31 ++ packw.sh r3, r3, r3 ++ packsh.ub r3, r3, r3 ++ mov r2, r3 ++ st.d r12[0], r2 ++ add r12, r9 // increment rfp ++ sub r10, -2 // Increment the dataptr ++ stdsp SP[0], r12 ++ ++ sub loop_cnt, 1//Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -8 ++ popm r0-r3, r4-r7, pc//Pop back registers and PC ++ ++1: ++ ++ ld.w r12, pc[coef_table_copy - .] ++ ld.w r9, pc[coef_table_copy - . + 4] ++ ++ addhh.w r4, r2:t, r2:b ++ mulhh.w r4, r4:b, r12:t // r4 = z1 ++ mulhh.w r5, r2:b, r12:b ++ ld.w r12, pc[coef_table_copy - . + 8] ++ mulhh.w r6, r2:t, r9:t ++ add r5, r4 // r5 = tmp2 ++ add r6, r4 // r6 = tmp3 ++ ++ addhh.w r7, r3:t, r3:b ++ subhh.w r8, r3:t, r3:b ++ ++ lsl r7, CONST_BITS ++ lsl r8, CONST_BITS ++ ++ add r2, r7, r6 // r2 = tmp10 ++ sub r3, r7, r6 // r3 = tmp13 ++ add r4, r8, r5 // r4 = tmp11 ++ sub r5, r8, r5 // r5 = tmp12 ++ ++ ++ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3 ++ addhh.w r7, r6:t, r6:b ++ mulhh.w r7, r7:b, r9:b // r7 = z5 ++ ++ ld.w r9, pc[coef_table_copy - . + 12] ++ mulhh.w r8, r6:b, r12:t // r8 = z3 ++ mulhh.w r6, r6:t, r12:b // r6 = z4 ++ ++ add r8, r7 ++ add r6, r7 ++ ++ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1 ++ ++ mulhh.w r12, r0:b, r9:t // r12 = tmp0 ++ mulhh.w r0, r0:t, r9:b // r0 = tmp1 ++ ld.w r9, pc[coef_table_copy - . + 16] ++ add r12, r8 ++ add r0, r6 ++ ++ ld.w lr, pc[coef_table_copy - . + 20] ++ machh.w r8, r1:b, r9:t // r8 = tmp2 ++ machh.w r6, r1:t, r9:b // r6 = tmp3 ++ mulhh.w r9, r7:b, lr:t // r9 = z1 ++ mulhh.w r7, r7:t, lr:b // r7 = z2 ++ ++ ++ add r12, r9 ++ add r0, r7 ++ add r8, r7 ++ add r6, r9 ++ ++ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0] ++ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7] ++ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1] ++ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6] ++ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2] ++ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5] ++ add r0, r3, r12 // r0 = dataptr[DCTSIZE*3] ++ sub r3, r3, r12 // r3 = dataptr[DCTSIZE*4] ++ ++ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9 ++ ++ packw.sh r1, r1, r6 ++ packw.sh r8, r8, r0 ++ packw.sh r3, r3, r5 ++ packw.sh r4, r4, r2 ++ ++ packsh.ub r1, r1, r8 ++ packsh.ub r0, r3, r4 ++ lddsp r12, SP[0] // rfp ++ lddsp r9, SP[4] // iinc ++ st.d r12[0], r0 ++ sub r10, -2 // Increment the dataptr ++ add r12, r9 // increment rfp ++ stdsp SP[0], r12 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -8 ++ popm r0-r3, r4-r7, pc //Pop back registers and PC ++ ++ ++ ++ .align 2 ++coef_table_copy: ++ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602 ++ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869 ++ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447 ++ ++ ++idct_avr32: ++ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables ++ ++ //; Give room for a temporary block on the stack ++ sub sp, 8*8*2 ++ ++ mov loop_cnt, 8 //Initialize loop counter ++ ++0: ++ ++ ldm r12++, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block ++ mov r6, 0 ++#ifdef USE_PREFETCH ++ pref r12[LINE_SIZE] //Prefetch next line ++#endif ++ or r4, r2, r3 << 16 ++ or r4, r1 //Check if all DCT-coeffisients except the DC is zero ++ or r4, r0 ++ brne 1f //If there are non-zero AC coeffisients perform row-transform ++ ++ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5 ++ plsl.h r5, r5, PASS1_BITS ++ mov r4, r5 ++ st.d sp++, r4 ++ st.d sp++, r4 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ bral 2f //Perform coloumn transform after row transform is computed ++ ++1: ++ ++ ld.w r10, pc[coef_table_idct - .] ++ ld.w r9, pc[coef_table_idct - . + 4] ++ ++ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7] ++ mulhh.w r5, r4:t, r10:t ++ mulhh.w r6, r0:t, r10:b ++ ld.w r10, pc[coef_table_idct - . + 8] ++ mulhh.w r7, r2:t, r9:t ++ add r6, r5 // tmp2 ++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 ++ add r7, r5 // tmp3 ++ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r3:t, r1:t ++ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1 ++ ++ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13 ++ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12 ++ ++ ++ ++ addhh.w lr, r3:b, r1:b // lr = z4 ++ addhh.w r5, r4:b, lr:b ++ mulhh.w r5, r5:b, r9:b // r5 = z5 ++ ++ ld.w r9, pc[coef_table_idct - . + 12] ++ mulhh.w r4, r4:b, r10:t // r4 = z3 ++ mulhh.w lr, lr:b, r10:b // lr = z4 ++ ++ add r4, r5 ++ add lr, r5 ++ ++ addhh.w r5, r2:b, r1:b // r5 = z2 ++ addhh.w r8, r3:b, r0:b // r8 = z1 ++ ++ ++ mulhh.w r0, r0:b, r9:t // r0 = tmp0 ++ ld.w r10, pc[coef_table_idct - . + 16] ++ mulhh.w r1, r1:b, r9:b // r1 = tmp1 ++ ld.w r9, pc[coef_table_idct - . + 20] ++ mulhh.w r2, r2:b, r10:t // r2 = tmp2 ++ mulhh.w r3, r3:b, r10:b // r3 = tmp3 ++ mulhh.w r8, r8:b, r9:t // r8 = z1 ++ mulhh.w r5, r5:b, r9:b // r5 = z2 ++ ++ ++ add r0, r8 ++ add r0, r4 ++ add r1, r5 ++ add r1, lr ++ add r2, r5 ++ add r2, r4 ++ add r3, r8 ++ add r3, lr ++ ++ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31 ++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 ++ ++ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6] ++ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7] ++ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5] ++ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4] ++ ++ sthh.w sp[0], r4:t, r5:t ++ sthh.w sp[4], r3:t, r2:t ++ sthh.w sp[8], r2:b, r3:b ++ sthh.w sp[12], r5:b, r4:b ++ ++ ++ ++ sub sp, -16 ++ sub loop_cnt, 1 ++ brne 0b ++ ++2: ++ ++ sub sp, 8*8*2 //Set pointer to start of DCT block ++ sub r12, 8*8*2 //Set pointer to start of DCT block ++ ++ mov loop_cnt, 8 ++ ++0: ++ ldins.h r3:t,sp[0] // r3:t = dataptr[0] ++ ldins.h r1:t,sp[1*8*2]// r1:t = dataptr[1] ++ ldins.h r2:t,sp[2*8*2]// r2:t = dataptr[2] ++ ldins.h r0:t,sp[5*8*2]// r0:t = dataptr[5] ++ ldins.h r3:b,sp[4*8*2]// r3:b = dataptr[4] ++ ldins.h r1:b,sp[3*8*2]// r1:b = dataptr[3] ++ ldins.h r2:b,sp[6*8*2]// r2:b = dataptr[6] ++ ldins.h r0:b,sp[7*8*2]// r0:b = dataptr[7] ++ ++ or r4, r1, r3 << 16 ++ or r4, r2 ++ or r4, r0 ++ brne 1f //If there are non-zero AC coeffisients perform row-transform ++ ++ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 31 ++ packw.sh r3, r3, r3 ++ mov r2, r3 ++ st.d r12++, r2 ++ st.d r12++, r2 ++ sub sp, -2 // Increment the dataptr ++ ++ sub loop_cnt, 1//Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -(8*8*2 - 8) ++ popm r0-r3, r4-r7, pc//Pop back registers and PC ++ ++1: ++ ++ ld.w r10, pc[coef_table_idct - .] ++ ld.w r9, pc[coef_table_idct - . + 4] ++ ++ addhh.w r4, r2:t, r2:b ++ mulhh.w r4, r4:b, r10:t // r4 = z1 ++ mulhh.w r5, r2:b, r10:b ++ ld.w r10, pc[coef_table_idct - . + 8] ++ mulhh.w r6, r2:t, r9:t ++ add r5, r4 // r5 = tmp2 ++ add r6, r4 // r6 = tmp3 ++ ++ addhh.w r7, r3:t, r3:b ++ subhh.w r8, r3:t, r3:b ++ ++ lsl r7, CONST_BITS ++ lsl r8, CONST_BITS ++ ++ add r2, r7, r6 // r2 = tmp10 ++ sub r3, r7, r6 // r3 = tmp13 ++ add r4, r8, r5 // r4 = tmp11 ++ sub r5, r8, r5 // r5 = tmp12 ++ ++ ++ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3 ++ addhh.w r7, r6:t, r6:b ++ mulhh.w r7, r7:b, r9:b // r7 = z5 ++ ++ ld.w r9, pc[coef_table_idct - . + 12] ++ mulhh.w r8, r6:b, r10:t // r8 = z3 ++ mulhh.w r6, r6:t, r10:b // r6 = z4 ++ ++ add r8, r7 ++ add r6, r7 ++ ++ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1 ++ ++ mulhh.w r10, r0:b, r9:t // r10 = tmp0 ++ mulhh.w r0, r0:t, r9:b // r0 = tmp1 ++ ld.w r9, pc[coef_table_idct - . + 16] ++ add r10, r8 ++ add r0, r6 ++ ++ ld.w lr, pc[coef_table_idct - . + 20] ++ machh.w r8, r1:b, r9:t // r8 = tmp2 ++ machh.w r6, r1:t, r9:b // r6 = tmp3 ++ mulhh.w r9, r7:b, lr:t // r9 = z1 ++ mulhh.w r7, r7:t, lr:b // r7 = z2 ++ ++ ++ add r10, r9 ++ add r0, r7 ++ add r8, r7 ++ add r6, r9 ++ ++ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0] ++ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7] ++ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1] ++ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6] ++ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2] ++ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5] ++ add r0, r3, r10 // r0 = dataptr[DCTSIZE*3] ++ sub r3, r3, r10 // r3 = dataptr[DCTSIZE*4] ++ ++ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9 ++ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9 ++ ++ packw.sh r7, r1, r6 ++ packw.sh r6, r8, r0 ++ packw.sh r5, r3, r5 ++ packw.sh r4, r4, r2 ++ ++ stm r12, r4-r7 ++ sub sp, -2 // Increment the dataptr ++ sub r12, -16 ++ ++ sub loop_cnt, 1 //Decrement loop counter ++ brne 0b //Perform loop one more time if loop_cnt is not zero ++ ++ sub sp, -(8*8*2 - 8) ++ popm r0-r3, r4-r7, pc //Pop back registers and PC ++ ++ ++ ++ .align 2 ++coef_table_idct: ++ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602 ++ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869 ++ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447 ++ +diff --git a/libavcodec/avr32/mc.S b/libavcodec/avr32/mc.S +new file mode 100644 +index 0000000..07a002d +--- /dev/null ++++ b/libavcodec/avr32/mc.S +@@ -0,0 +1,434 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++ ++ ++ /* Macro for masking the lowest bit of each byte in a ++ packed word */ ++ .macro packedmask1 reg, round ++ .if \round ++ and \reg, \reg, r8 >> 1 ++ .else ++ and \reg, r8 ++ .endif ++ .endm ++ ++ /* Macro for 8 pixel wide horizontal and vertical interpolation functions */ ++ .macro pixels8_hv round, put ++ ++ ++ pushm r0-r7, lr ++ ++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ ++ ++ /* Rounding immediate */ ++ .if \round ++ mov r8, lo(0x02020202) ++ orh r8, hi(0x02020202) ++ .else ++ mov r8, lo(0x01010101) ++ orh r8, hi(0x01010101) ++ .endif ++ mov r7, 2 ++ ++ /* Pixel naming convention : ++ ++ |-----------------------------------------------------| ++ | s00 | s01 | s02 | s03 | s04 | s05 | s06 | s07 | s08 | ++ |----d00---d01---d02---d03---d04---d05---d06---d07----| ++ | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | s18 | ++ |-----------------------------------------------------| ++ */ ++1: ++ ld.w r0, r11[0] // r0 = { s00, s01, s02, s03 } ++ ld.w r1, r11[1] // r1 = { s01, s02, s03, s04 } ++ mov lr, r9 ++ eor r2, r0, r1 ++ packedmask1 r2, \round ++ add r2, r8 ++ ++ paddh.ub r0, r0, r1 // r0 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ ++ add r11, r10 // pixels += line_size ++ ld.w r1, r11[0] // r1 = { s10, s11, s12, s13 } ++ ld.w r3, r11[1] // r3 = { s11, s12, s13, s14 } ++0: ++ eor r5, r1, r3 ++ packedmask1 r5, \round ++ add r2, r5 ++ ++ paddh.ub r1, r1, r3 // r1 = {(s10+s11)/2,(s11+s12)/2,(s12+s13)/2,(s13+s14)/2} ++ eor r6, r0, r1 ++ packedmask1 r6, \round ++ add r2, r2, r6 << 1 ++ ++ ld.w r3, r11[r10] // r3 = { s00, s01, s02, s03 } ++ add r11, r10 // pixels += line_size ++ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 } ++ ++ paddh.ub r0, r0, r1 ++ plsr.b r2, r2, 2 ++ padd.b r0, r0, r2 // r0 = { d00, d01, d02, d03 } ++ ++ /* Next row */ ++ .if \put ++ eor r2, r3, r4 ++ packedmask1 r2, \round ++ add r2, r8 ++ .else ++ ld.w r6, r12[0] ++ eor r2, r3, r4 ++ packedmask1 r2, \round ++ add r2, r8 ++ pavg.ub r0, r0, r6 ++ .endif ++ st.w r12[0], r0 // Put data into the block ++ ++ add r5, r2 ++ paddh.ub r0, r3, r4 // r0 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ ++ eor r6, r0, r1 ++ packedmask1 r6, \round ++ add r5, r5, r6 << 1 ++ ++ .if \put ++ paddh.ub r1, r0, r1 ++ plsr.b r5, r5, 2 ++ padd.b r1, r1, r5 // r1 = { d10, d11, d12, d13 } ++ .else ++ ld.w r3, r12[r10] ++ paddh.ub r1, r0, r1 ++ plsr.b r5, r5, 2 ++ padd.b r1, r1, r5 // r1 = { d10, d11, d12, d13 } ++ pavg.ub r1, r1, r3 ++ .endif ++ ++ st.w r12[r10], r1 // Put data into the block ++ ++ ++ ld.w r1, r11[r10] // r1 = { s10, s11, s12, s13 } ++ add r11, r10 // pixels += line_size ++ ld.w r3, r11[1] // r3 = { s11, s12, s13, s14 } ++ add r12, r12, r10 << 1 // block += 2*line_size ++ sub lr, 2 ++ brne 0b ++ ++ mul r0, r10, r9 // r0 = line_size * h ++ rsub r0, r0, 4 // r0 = 4 - (line_size * h) ++ add r11, r0 ++ sub r11, r10 // pixels += 4 - (line_size * (h+1)) ++ add r12, r0 // pixels += 4 - (line_size * (h)) ++ sub r7, 1 ++ brne 1b ++ ++ popm r0-r7, pc ++ .endm ++ ++ ++ /* Macro for 8 pixel wide vertical interpolation functions */ ++ ++ .macro pixels8_v round, put ++ pushm r4-r7,lr ++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ ++ ++ /* ++ Pixel Naming Convention : ++ |-----------------------------------------------| ++ | s00 | s01 | s02 | s03 | s04 | s05 | s06 | s07 | ++ |-d00---d01---d02---d03---d04---d05---d06---d07-| ++ | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | ++ |-----------------------------------------------| ++ */ ++ ld.w r8, r11[r10] // r8 = { s10, s11, s12, s13 } ++ ld.w lr, r11++ // lr = { s00, s01, s02, s03 }, src += 4 ++ ld.w r7, r11[0] // r7 = { s04, s05, s06, s07 } ++ ld.w r6, r11[r10] // r6 = { s14, s15, s16, s17 } ++ sub r10, 4 // stride -= 4 ++ add r11, r11, r10 << 1 // src += 2*stride ++ sub r11, -4 // src += 4 ++ ++0: ++ .if \round ++ pavg.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} ++ pavg.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} ++ .else ++ paddh.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} ++ paddh.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} ++ .endif ++ ++ .if \put ++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } ++ ld.w lr, r11++ // lr = { s10, s11, s12, s13 }, src += 4 ++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } ++ ld.w r7, r11[0] // r7 = { s14, s15, s16, s17 } ++ .else ++ ld.w lr, r12[0] ++ ld.w r7, r12[4] ++ pavg.ub r5, r5, lr ++ pavg.ub r4, r4, r7 ++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } ++ ld.w lr, r11++ // lr = { s10, s11, s12, s13 }, src += 4 ++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } ++ ld.w r7, r11[0] // r7 = { s14, s15, s16, s17 } ++ .endif ++ add r11, r10 // src += stride ++#ifdef USE_PREFETCH ++ pref r11[0] ++#endif ++ add r12, r10 // dst += stride ++ ++ .if \round ++ pavg.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} ++ pavg.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} ++ .else ++ paddh.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} ++ paddh.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} ++ .endif ++ .if \put ++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } ++ ld.w r8, r11++ // r8 = { s10, s11, s12, s13 }, src += 4 ++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } ++ ld.w r6, r11[0] // r6 = { s14, s15, s16, s17 } ++ .else ++ ld.w r8, r12[0] ++ ld.w r6, r12[4] ++ pavg.ub r5, r5, r8 ++ pavg.ub r4, r4, r6 ++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } ++ ld.w r8, r11++ // r8 = { s10, s11, s12, s13 }, src += 4 ++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } ++ ld.w r6, r11[0] // r6 = { s14, s15, s16, s17 } ++ .endif ++ ++ add r11, r10 // src += stride ++#ifdef USE_PREFETCH ++ pref r11[0] ++#endif ++ add r12, r10 // dst += stride ++ sub r9, 2 ++ brne 0b ++ ++ popm r4-r7,pc ++ .endm ++ ++ /* Macro for 8 pixel wide horizontal interpolation functions */ ++ ++ .macro pixels8_h round, put ++ pushm r4-r7, lr ++ ++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ ++ /* ++ Pixel Naming Convention: ++ |--------------------------------------------------------------------| ++ | s00 d00 s01 d01 s02 d02 s03 d03 s04 d04 s05 d05 s06 d06 s07 d07 s08| ++ |------|-------|-------|-------|-------|-------|-------|-------|-----| ++ | s10 d10 s11 d11 s12 d12 s13 d13 s14 d14 s15 d15 s16 d16 s17 d17 s18| ++ |--------------------------------------------------------------------| ++ */ ++ ++ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 } ++ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 } ++ ld.w r7, r11[4] // r7 = { s04, s05, s06, s07 } ++ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 } ++ add r11, r10 // src += stride ++ ++0: ++ .if \round ++ pavg.ub lr, r8, lr // lr = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ pavg.ub r7, r6, r7 // r7 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} ++ .else ++ paddh.ub lr, r8, lr // lr = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ paddh.ub r7, r6, r7 // r7 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} ++ .endif ++ .if \put ++ ld.w r5, r11[0] // r5 = { s00, s01, s02, s03 } ++ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 } ++ .else ++ ld.w r8, r12[0] ++ ld.w r6, r12[4] ++ ld.w r5, r11[0] // r5 = { s00, s01, s02, s03 } ++ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 } ++ pavg.ub lr, lr, r8 ++ pavg.ub r7, r7, r6 ++ .endif ++ st.w r12[0], lr // dst = { d00, d01, d02, d03 } ++ st.w r12[4], r7 // dst = { d04, d05, d06, d07 } ++ ld.w r8, r11[4] // r8 = { s04, s05, s06, s07 } ++ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 } ++ add r11, r10 // src += stride ++#ifdef USE_PREFETCH ++ pref r11[0] ++#endif ++ add r12, r10 // dst += stride ++ ++ .if \round ++ pavg.ub r5, r4, r5 // r5 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ pavg.ub r4, r6, r8 // r4 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} ++ .else ++ paddh.ub r5, r4, r5 // r5 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} ++ paddh.ub r4, r6, r8 // r4 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} ++ .endif ++ .if \put ++ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 } ++ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 } ++ .else ++ ld.w r7, r12[0] ++ ld.w r6, r12[4] ++ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 } ++ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 } ++ pavg.ub r5, r5, r7 ++ pavg.ub r4, r4, r6 ++ .endif ++ st.w r12[0], r5 // dst = { d00, d01, d02, d03 } ++ st.w r12[4], r4 // dst = { d04, d05, d06, d07 } ++ ld.w r7, r11[4] // r7 = { s04, s05, s06, s07 } ++ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 } ++ add r11, r10 // src += stride ++#ifdef USE_PREFETCH ++ pref r11[0] ++#endif ++ add r12, r10 // dst += stride ++ sub r9, 2 ++ brne 0b ++ ++ popm r4-r7, pc ++ .endm ++ ++ /* Macro for 8 pixel wide copy functions */ ++ .macro pixels8 put ++ stm --sp, r3-r7,lr ++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ ++ mov lr, r9 ++ sub r3, r10, 2 // stride2 = stride - 2 ++0: ++ .if \put ++ ld.w r9, r11[r10] // r9 = { s10, s11, s12, s13 } ++ ld.w r7, r11++ // r7 = { s00, s01, s02, s03 }, src += 4 ++ ld.w r6, r11[0] // r6 = { s04, s05, s06, s07 } ++ ld.w r8, r11[r10] // r8 = { s14, s15, s16, s17 } ++ .else ++ ld.w r9, r11[r10] // r9 = { s10, s11, s12, s13 } ++ ld.d r4, r12[0] ++ ld.w r7, r11++ // r7 = { s00, s01, s02, s03 }, src += 4 ++ ld.w r6, r11[0] // r6 = { s04, s05, s06, s07 } ++ ld.w r8, r11[r10] // r8 = { s14, s15, s16, s17 } ++ pavg.ub r6, r6, r4 ++ pavg.ub r7, r7, r5 ++ ld.d r4, r12[r10] ++ .endif ++ st.d r12, r6 // *dst = { s00, s01, s02, s03, s04, s05, s06, s07 } ++ add r11, r11, r3 << 1 // src += stride2 * 2 ++ .ifeq \put ++ pavg.ub r8, r8, r4 ++ pavg.ub r9, r9, r5 ++ .endif ++ st.d r12[r10 << 0], r8 // *(dst + stride) = { s10, s11, s12, s13, s14, s15, s16, s17 } ++ add r12, r12, r10 << 1 // dst += 2*stride ++ sub lr, 2 ++ brne 0b ++ ldm sp++, r3-r7,pc ++ ++ .endm ++ ++ .global put_no_rnd_pixels8_hv_avr32 ++ .text ++put_no_rnd_pixels8_hv_avr32: ++ pixels8_hv 0, 1 ++ ++ .global put_pixels8_hv_avr32 ++ .text ++put_pixels8_hv_avr32: ++ pixels8_hv 1, 1 ++ ++ .global avg_no_rnd_pixels8_hv_avr32 ++ .text ++avg_no_rnd_pixels8_hv_avr32: ++ pixels8_hv 0, 0 ++ ++ .global avg_pixels8_hv_avr32 ++ .text ++avg_pixels8_hv_avr32: ++ pixels8_hv 1, 0 ++ ++ .global put_no_rnd_pixels8_v_avr32 ++ .text ++put_no_rnd_pixels8_v_avr32: ++ pixels8_v 0, 1 ++ ++ .global put_pixels8_v_avr32 ++ .text ++put_pixels8_v_avr32: ++ pixels8_v 1, 1 ++ ++ .global avg_no_rnd_pixels8_v_avr32 ++ .text ++avg_no_rnd_pixels8_v_avr32: ++ pixels8_v 0, 0 ++ ++ .global avg_pixels8_v_avr32 ++ .text ++avg_pixels8_v_avr32: ++ pixels8_v 1, 0 ++ ++ .global put_no_rnd_pixels8_h_avr32 ++ .text ++put_no_rnd_pixels8_h_avr32: ++ pixels8_h 0, 1 ++ ++ .global put_pixels8_h_avr32 ++ .text ++put_pixels8_h_avr32: ++ pixels8_h 1, 1 ++ ++ .global avg_no_rnd_pixels8_h_avr32 ++ .text ++avg_no_rnd_pixels8_h_avr32: ++ pixels8_h 0, 0 ++ ++ .global avg_pixels8_h_avr32 ++ .text ++avg_pixels8_h_avr32: ++ pixels8_h 1, 0 ++ ++ .global put_pixels8_avr32 ++ .global put_no_rnd_pixels8_avr32 ++ .text ++put_pixels8_avr32: ++put_no_rnd_pixels8_avr32: ++ pixels8 1 ++ ++ .global avg_no_rnd_pixels8_avr32 ++ .global avg_pixels8_avr32 ++ .text ++avg_pixels8_avr32: ++avg_no_rnd_pixels8_avr32: ++ pixels8 0 +diff --git a/libavcodec/avr32/pico.h b/libavcodec/avr32/pico.h +new file mode 100644 +index 0000000..32201ba +--- /dev/null ++++ b/libavcodec/avr32/pico.h +@@ -0,0 +1,260 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++#ifndef __PICO_H__ ++#define __PICO_H__ ++ ++ ++ ++/* Coprocessor Number */ ++#define PICO_CPNO 1 ++ ++/* Pixel Coprocessor Register file */ ++#define PICO_REGVECT_INPIX2 cr0 ++#define PICO_REGVECT_INPIX1 cr1 ++#define PICO_REGVECT_INPIX0 cr2 ++#define PICO_REGVECT_OUTPIX2 cr3 ++#define PICO_REGVECT_OUTPIX1 cr4 ++#define PICO_REGVECT_OUTPIX0 cr5 ++#define PICO_REGVECT_COEFF0_A cr6 ++#define PICO_REGVECT_COEFF0_B cr7 ++#define PICO_REGVECT_COEFF1_A cr8 ++#define PICO_REGVECT_COEFF1_B cr9 ++#define PICO_REGVECT_COEFF2_A cr10 ++#define PICO_REGVECT_COEFF2_B cr11 ++#define PICO_REGVECT_VMU0_OUT cr12 ++#define PICO_REGVECT_VMU1_OUT cr13 ++#define PICO_REGVECT_VMU2_OUT cr14 ++#define PICO_REGVECT_CONFIG cr15 ++ ++#define PICO_INPIX2 0 ++#define PICO_INPIX1 1 ++#define PICO_INPIX0 2 ++#define PICO_OUTPIX2 3 ++#define PICO_OUTPIX1 4 ++#define PICO_OUTPIX0 5 ++#define PICO_COEFF0_A 6 ++#define PICO_COEFF0_B 7 ++#define PICO_COEFF1_A 8 ++#define PICO_COEFF1_B 9 ++#define PICO_COEFF2_A 10 ++#define PICO_COEFF2_B 11 ++#define PICO_VMU0_OUT 12 ++#define PICO_VMU1_OUT 13 ++#define PICO_VMU2_OUT 14 ++#define PICO_CONFIG 15 ++ ++/* Config Register */ ++#define PICO_COEFF_FRAC_BITS_OFFSET 0 ++#define PICO_COEFF_FRAC_BITS_SIZE 4 ++#define PICO_OFFSET_FRAC_BITS_OFFSET 4 ++#define PICO_OFFSET_FRAC_BITS_SIZE 4 ++#define PICO_INPUT_MODE_OFFSET 8 ++#define PICO_INPUT_MODE_SIZE 2 ++#define PICO_OUTPUT_MODE_OFFSET 10 ++#define PICO_OUTPUT_MODE_SIZE 1 ++ ++struct pico_config_t { ++ unsigned int : 32 - PICO_OUTPUT_MODE_OFFSET - PICO_OUTPUT_MODE_SIZE; ++ unsigned int output_mode : PICO_OUTPUT_MODE_SIZE; ++ unsigned int input_mode : PICO_INPUT_MODE_SIZE; ++ unsigned int offset_frac_bits : PICO_OFFSET_FRAC_BITS_SIZE; ++ unsigned int coeff_frac_bits : PICO_COEFF_FRAC_BITS_SIZE; ++ int vmu2_out; ++ int vmu1_out; ++ int vmu0_out; ++ short coeff2_2; ++ short coeff2_3; ++ short coeff2_0; ++ short coeff2_1; ++ short coeff1_2; ++ short coeff1_3; ++ short coeff1_0; ++ short coeff1_1; ++ short coeff0_2; ++ short coeff0_3; ++ short coeff0_0; ++ short coeff0_1; ++}; ++ ++ ++#define PICO_COEFF_FRAC_BITS(x) (x << PICO_COEFF_FRAC_BITS_OFFSET) ++#define PICO_OFFSET_FRAC_BITS(x) (x << PICO_OFFSET_FRAC_BITS_OFFSET) ++#define PICO_INPUT_MODE(x) (x << PICO_INPUT_MODE_OFFSET) ++#define PICO_OUTPUT_MODE(x) (x << PICO_OUTPUT_MODE_OFFSET) ++ ++#define GET_PICO_COEFF_FRAC_BITS(x) ((x >> PICO_COEFF_FRAC_BITS_OFFSET)&((1 << PICO_COEFF_FRAC_BITS_SIZE)-1)) ++#define GET_PICO_OFFSET_FRAC_BITS(x) ((x >> PICO_OFFSET_FRAC_BITS_OFFSET)&((1 << PICO_OFFSET_FRAC_BITS_SIZE)-1)) ++#define GET_PICO_INPUT_MODE(x) ((x >> PICO_INPUT_MODE_OFFSET)&((1 << PICO_INPUT_MODE_SIZE)-1)) ++#define GET_PICO_OUTPUT_MODE(x) ((x >> PICO_OUTPUT_MODE_OFFSET)&((1 << PICO_OUTPUT_MODE_SIZE)-1)) ++ ++enum pico_input_mode { PICO_TRANSFORMATION_MODE, ++ PICO_HOR_FILTER_MODE, ++ PICO_VERT_FILTER_MODE }; ++ ++enum pico_output_mode { PICO_PACKED_MODE, ++ PICO_PLANAR_MODE }; ++ ++/* Bits in coefficients */ ++#define PICO_COEFF_BITS 12 ++ ++/* Operation bits */ ++#define PICO_MATRIX (0) ++#define PICO_USE_ACC (1 << 2) ++#define PICO_SINGLE_VECTOR (1 << 3) ++ ++ ++#define __str(x...) #x ++#define __xstr(x...) __str(x) ++ ++#define PICO_PUT_W(pico_reg, x) \ ++ __builtin_mvrc_w(PICO_CPNO, pico_reg, x); ++#define PICO_GET_W(pico_reg) \ ++ __builtin_mvcr_w(PICO_CPNO, pico_reg) ++ ++#define PICO_MVCR_W(x, pico_reg) \ ++ asm ("mvcr.w\tcp" __xstr(PICO_CPNO) ", %0, cr" __xstr(pico_reg) : "=r"(x)); ++ ++#define PICO_MVRC_W(pico_reg, x) \ ++ asm ("mvrc.w\tcp" __xstr(PICO_CPNO) ", cr" __xstr(pico_reg) ", %0" :: "r"(x)); ++ ++#define PICO_PUT_D(pico_reg, x) \ ++ __builtin_mvrc_d(PICO_CPNO, pico_reg, x); ++#define PICO_GET_D(pico_reg) \ ++ __builtin_mvcr_d(PICO_CPNO, pico_reg) ++ ++#define PICO_MVCR_D(x, pico_reg) \ ++ asm volatile ("mvcr.d\tcp" __xstr(PICO_CPNO) ", %0, cr" __xstr(pico_reg) : "=r"(x)); ++#define PICO_MVRC_D(pico_reg, x) \ ++ asm volatile ("mvrc.d\tcp" __xstr(PICO_CPNO) ", cr" __xstr(pico_reg) ", %0" :: "r"(x)); ++ ++#define PICO_STCM_W(ptr, pico_regs...) \ ++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++#define PICO_STCM_D(ptr, pico_regs...) \ ++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++ ++#define PICO_STCM_W_DEC(ptr, pico_regs...) \ ++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); ++#define PICO_STCM_D_DEC(ptr, pico_regs...) \ ++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); ++ ++#define PICO_LDCM_W(ptr, pico_regs...) \ ++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++#define PICO_LDCM_D(ptr, pico_regs...) \ ++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++ ++#define PICO_LDCM_W_INC(ptr, pico_regs...) \ ++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); ++#define PICO_LDCM_D_INC(ptr, pico_regs...) \ ++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); ++ ++#define PICO_OP(op, dst_addr, addr0, addr1, addr2) \ ++ __builtin_cop(PICO_CPNO, addr0, addr1, addr2, op | dst_addr); ++ ++static inline void set_pico_config(struct pico_config_t *config){ ++ PICO_LDCM_D(config, ++ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B, ++ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B, ++ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B, ++ PICO_REGVECT_VMU0_OUT, PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT, PICO_REGVECT_CONFIG); ++} ++ ++static inline void get_pico_config(struct pico_config_t *config){ ++ PICO_STCM_D(config, ++ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B, ++ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B, ++ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B, ++ PICO_REGVECT_VMU0_OUT, PICO_REGVECT_VMU1_OUT, ++ PICO_REGVECT_VMU2_OUT, PICO_REGVECT_CONFIG); ++} ++ ++static inline void dump_pico_config(){ ++ struct pico_config_t pico_config; ++ char *input_mode, *output_mode; ++ get_pico_config(&pico_config); ++ ++ ++ av_log(NULL, AV_LOG_INFO, "Dumping pico configuration:\n\n"); ++ av_log(NULL, AV_LOG_INFO, "\tcoeff_frac_bits = %d\n", pico_config.coeff_frac_bits); ++ av_log(NULL, AV_LOG_INFO, "\toffset_frac_bits = %d\n", pico_config.offset_frac_bits); ++ ++ switch ( pico_config.input_mode ){ ++ case PICO_TRANSFORMATION_MODE: ++ input_mode = "Transformation Mode"; ++ break; ++ case PICO_HOR_FILTER_MODE: ++ input_mode = "Horisontal Filter Mode"; ++ break; ++ case PICO_VERT_FILTER_MODE: ++ input_mode = "Vertical Filter Mode"; ++ break; ++ default: ++ input_mode = "Unknown Mode!!"; ++ break; ++ } ++ av_log(NULL, AV_LOG_INFO, "\tinput_mode = %s\n", input_mode); ++ ++ switch ( pico_config.output_mode ){ ++ case PICO_PLANAR_MODE: ++ output_mode = "Planar Mode"; ++ break; ++ case PICO_PACKED_MODE: ++ output_mode = "Packed Mode"; ++ break; ++ default: ++ output_mode = "Unknown Mode!!"; ++ break; ++ } ++ ++ av_log(NULL, AV_LOG_INFO, "\toutput_mode = %s\n", output_mode); ++ ++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_0 = %f\n", (float)pico_config.coeff0_0/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_1 = %f\n", (float)pico_config.coeff0_1/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_2 = %f\n", (float)pico_config.coeff0_2/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_3 = %f\n", (float)pico_config.coeff0_3/(float)(1 << pico_config.offset_frac_bits)); ++ ++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_0 = %f\n", (float)pico_config.coeff1_0/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_1 = %f\n", (float)pico_config.coeff1_1/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_2 = %f\n", (float)pico_config.coeff1_2/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_3 = %f\n", (float)pico_config.coeff1_3/(float)(1 << pico_config.offset_frac_bits)); ++ ++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_0 = %f\n", (float)pico_config.coeff2_0/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_1 = %f\n", (float)pico_config.coeff2_1/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_2 = %f\n", (float)pico_config.coeff2_2/(float)(1 << pico_config.coeff_frac_bits)); ++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_3 = %f\n", (float)pico_config.coeff2_3/(float)(1 << pico_config.offset_frac_bits)); ++} ++ ++ ++ ++#endif ++ +diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h +index 26b4f8d..1f8fabf 100644 +--- a/libavcodec/bitstream.h ++++ b/libavcodec/bitstream.h +@@ -171,7 +171,7 @@ typedef struct RL_VLC_ELEM { + #endif + + /* used to avoid missaligned exceptions on some archs (alpha, ...) */ +-#if defined(ARCH_X86) || defined(ARCH_X86_64) ++#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_AVR32) + # define unaligned16(a) (*(const uint16_t*)(a)) + # define unaligned32(a) (*(const uint32_t*)(a)) + # define unaligned64(a) (*(const uint64_t*)(a)) +@@ -813,6 +813,44 @@ void free_vlc(VLC *vlc); + * if the vlc code is invalid and max_depth>1 than the number of bits removed + * is undefined + */ ++ ++#if defined(ARCH_AVR32) ++#define GET_VLC(code, name, gb, table, bits, max_depth)\ ++{\ ++ int n, index, nb_bits;\ ++ union { VLC_TYPE vlc[2];\ ++ uint32_t u32; } table_elem;\ ++\ ++ index= SHOW_UBITS(name, gb, bits);\ ++ table_elem.u32 = unaligned32(&table[index]); \ ++ code = table_elem.vlc[0];\ ++ n = table_elem.vlc[1];\ ++\ ++ if(max_depth > 1 && n < 0 ){\ ++ LAST_SKIP_BITS(name, gb, bits)\ ++ UPDATE_CACHE(name, gb)\ ++\ ++ nb_bits = -n;\ ++\ ++ index= SHOW_UBITS(name, gb, nb_bits) + code;\ ++ table_elem.u32 = unaligned32(&table[index]); \ ++ code = table_elem.vlc[0];\ ++ n = table_elem.vlc[1];\ ++ if(max_depth > 2 && n < 0){\ ++ LAST_SKIP_BITS(name, gb, nb_bits)\ ++ UPDATE_CACHE(name, gb)\ ++\ ++ nb_bits = -n;\ ++\ ++ index= SHOW_UBITS(name, gb, nb_bits) + code;\ ++ code = table[index][0];\ ++ n = table[index][1];\ ++ }\ ++ }\ ++ SKIP_BITS(name, gb, n)\ ++} ++ ++#else + #define GET_VLC(code, name, gb, table, bits, max_depth)\ + {\ + int n, index, nb_bits;\ +@@ -821,7 +859,7 @@ void free_vlc(VLC *vlc); + code = table[index][0];\ + n = table[index][1];\ + \ +- if(max_depth > 1 && n < 0){\ ++ if(max_depth > 1 && n < 0 ){\ + LAST_SKIP_BITS(name, gb, bits)\ + UPDATE_CACHE(name, gb)\ + \ +@@ -843,7 +881,38 @@ void free_vlc(VLC *vlc); + }\ + SKIP_BITS(name, gb, n)\ + } ++#endif + ++#if defined(ARCH_AVR32) ++#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\ ++{\ ++ int n, index, nb_bits;\ ++ union { RL_VLC_ELEM vlc;\ ++ uint32_t u32; } table_elem;\ ++\ ++ index= SHOW_UBITS(name, gb, bits);\ ++ table_elem.u32 = unaligned32(&table[index]); \ ++ level = table_elem.vlc.level;\ ++ n = table_elem.vlc.len;\ ++\ ++ if(max_depth > 1 && n < 0 ){\ ++ SKIP_BITS(name, gb, bits)\ ++ if(need_update){\ ++ UPDATE_CACHE(name, gb)\ ++ }\ ++\ ++ nb_bits = -n;\ ++\ ++ index= SHOW_UBITS(name, gb, nb_bits) + level;\ ++ table_elem.u32 = unaligned32(&table[index]); \ ++ level = table_elem.vlc.level;\ ++ n = table_elem.vlc.len;\ ++ }\ ++ run= table_elem.vlc.run;\ ++ SKIP_BITS(name, gb, n)\ ++} ++ ++#else + #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\ + {\ + int n, index, nb_bits;\ +@@ -852,7 +921,7 @@ void free_vlc(VLC *vlc); + level = table[index].level;\ + n = table[index].len;\ + \ +- if(max_depth > 1 && n < 0){\ ++ if(max_depth > 1 && n < 0 ){\ + SKIP_BITS(name, gb, bits)\ + if(need_update){\ + UPDATE_CACHE(name, gb)\ +@@ -867,7 +936,7 @@ void free_vlc(VLC *vlc); + run= table[index].run;\ + SKIP_BITS(name, gb, n)\ + } +- ++#endif + + /** + * parses a vlc code, faster then get_vlc() +diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c +index 56c42b9..8fc10c6 100644 +--- a/libavcodec/dsputil.c ++++ b/libavcodec/dsputil.c +@@ -4197,6 +4197,9 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx) + #ifdef ARCH_BFIN + dsputil_init_bfin(c,avctx); + #endif ++#ifdef ARCH_AVR32 ++ dsputil_init_avr32(c,avctx); ++#endif + + for(i=0; i<64; i++){ + if(!c->put_2tap_qpel_pixels_tab[0][i]) +diff --git a/libavcodec/h264.c b/libavcodec/h264.c +index 865e80a..8f7c3f1 100644 +--- a/libavcodec/h264.c ++++ b/libavcodec/h264.c +@@ -3258,7 +3258,12 @@ static void free_tables(H264Context *h){ + + static void init_dequant8_coeff_table(H264Context *h){ + int i,q,x; ++#ifdef ARCH_AVR32 ++ const int transpose = 0; ++#else + const int transpose = (h->s.dsp.h264_idct8_add != ff_h264_idct8_add_c); //FIXME ugly ++#endif ++ + h->dequant8_coeff[0] = h->dequant8_buffer[0]; + h->dequant8_coeff[1] = h->dequant8_buffer[1]; + +@@ -3281,7 +3286,13 @@ static void init_dequant8_coeff_table(H264Context *h){ + + static void init_dequant4_coeff_table(H264Context *h){ + int i,j,q,x; ++ // Yes this is ugly as hell.... ++#ifdef ARCH_AVR32 ++ const int transpose = 0; ++#else + const int transpose = (h->s.dsp.h264_idct_add != ff_h264_idct_add_c); //FIXME ugly ++#endif ++ + for(i=0; i<6; i++ ){ + h->dequant4_coeff[i] = h->dequant4_buffer[i]; + for(j=0; jdsp.h264_idct_add == ff_h264_idct_add_c){ //FIXME little ugly ++#endif + memcpy(h->zigzag_scan, zigzag_scan, 16*sizeof(uint8_t)); + memcpy(h-> field_scan, field_scan, 16*sizeof(uint8_t)); + }else{ +diff --git a/libavutil/common.h b/libavutil/common.h +index 3ae5971..7e52b90 100644 +--- a/libavutil/common.h ++++ b/libavutil/common.h +@@ -283,23 +283,39 @@ static inline int mid_pred(int a, int b, int c) + * @param amax maximum value of the clip range + * @return cliped value + */ ++#if defined(ARCH_AVR32) ++#define clip(a, amin, amax) \ ++ ({ int __tmp__; \ ++ asm ("min\t%0, %1, %2\n" \ ++ "max\t%0, %0, %3\n" \ ++ : "=&r"(__tmp__) : "r"(a), "r"(amax), "r"(amin)); \ ++ __tmp__; }) ++#else + static inline int clip(int a, int amin, int amax) + { + if (a < amin) return amin; + else if (a > amax) return amax; + else return a; + } ++#endif + + /** + * clip a signed integer value into the 0-255 range + * @param a value to clip + * @return cliped value + */ ++#if defined(ARCH_AVR32) ++#define clip_uint8(a) \ ++ ({ int __tmp__ = a; \ ++ asm ("satu\t%0 >> 0, 8" : "+r"(__tmp__)); \ ++ __tmp__; }) ++#else + static inline uint8_t clip_uint8(int a) + { + if (a&(~255)) return (-a)>>31; + else return a; + } ++#endif + + /* math */ + int64_t ff_gcd(int64_t a, int64_t b); +diff --git a/libavutil/internal.h b/libavutil/internal.h +index 285d304..a8b0718 100644 +--- a/libavutil/internal.h ++++ b/libavutil/internal.h +@@ -210,6 +210,15 @@ if((y)<(x)){\ + }\ + } + ++/* XXX: Hack for uclibc which declares lrintf but does not implement it... */ ++#ifdef ARCH_AVR32 ++#undef HAVE_LRINTF ++#define HAVE_LRINTF 1 ++#define lrintf(x) rint(x) ++#define llrint(x) (long long)rint(x) ++#endif ++ ++ + #ifndef HAVE_LRINTF + /* XXX: add ISOC specific test to avoid specific BSD testing. */ + /* better than nothing implementation. */ +diff --git a/libfaad2/common.h b/libfaad2/common.h +index f809042..6c5fb21 100644 +--- a/libfaad2/common.h ++++ b/libfaad2/common.h +@@ -67,7 +67,7 @@ extern "C" { + /* Use if target platform has address generators with autoincrement */ + //#define PREFER_POINTERS + +-#if defined(_WIN32_WCE) || defined(__arm__) ++#if defined(_WIN32_WCE) || defined(__arm__) || defined(__avr32__) + #define FIXED_POINT + #endif + +diff --git a/libmpcodecs/ad_libmad.c b/libmpcodecs/ad_libmad.c +index 076359a..51b77fe 100644 +--- a/libmpcodecs/ad_libmad.c ++++ b/libmpcodecs/ad_libmad.c +@@ -86,6 +86,11 @@ static int init(sh_audio_t *sh){ + sh->channels=(this->frame.header.mode == MAD_MODE_SINGLE_CHANNEL) ? 1 : 2; + sh->samplerate=this->frame.header.samplerate; + sh->i_bps=this->frame.header.bitrate/8; ++#ifdef WORDS_BIGENDIAN ++ sh->sample_format = AF_FORMAT_S16_BE; ++#else ++ sh->sample_format = AF_FORMAT_S16_LE; ++#endif + sh->samplesize=2; + + return 1; +diff --git a/libswscale/pico-avr32.h b/libswscale/pico-avr32.h +new file mode 100644 +index 0000000..7ac6200 +--- /dev/null ++++ b/libswscale/pico-avr32.h +@@ -0,0 +1,137 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++#ifndef __PICO_H__ ++#define __PICO_H__ ++ ++/* Coprocessor Number */ ++#define PICO_CPNO 1 ++ ++/* Pixel Coprocessor Register file */ ++#define PICO_REGVECT_INPIX2 cr0 ++#define PICO_REGVECT_INPIX1 cr1 ++#define PICO_REGVECT_INPIX0 cr2 ++#define PICO_REGVECT_OUTPIX2 cr3 ++#define PICO_REGVECT_OUTPIX1 cr4 ++#define PICO_REGVECT_OUTPIX0 cr5 ++#define PICO_REGVECT_COEFF0_A cr6 ++#define PICO_REGVECT_COEFF0_B cr7 ++#define PICO_REGVECT_COEFF1_A cr8 ++#define PICO_REGVECT_COEFF1_B cr9 ++#define PICO_REGVECT_COEFF2_A cr10 ++#define PICO_REGVECT_COEFF2_B cr11 ++#define PICO_REGVECT_VMU0_OUT cr12 ++#define PICO_REGVECT_VMU1_OUT cr13 ++#define PICO_REGVECT_VMU2_OUT cr14 ++#define PICO_REGVECT_CONFIG cr15 ++ ++#define PICO_INPIX2 0 ++#define PICO_INPIX1 1 ++#define PICO_INPIX0 2 ++#define PICO_OUTPIX2 3 ++#define PICO_OUTPIX1 4 ++#define PICO_OUTPIX0 5 ++#define PICO_COEFF0_A 6 ++#define PICO_COEFF0_B 7 ++#define PICO_COEFF1_A 8 ++#define PICO_COEFF1_B 9 ++#define PICO_COEFF2_A 10 ++#define PICO_COEFF2_B 11 ++#define PICO_VMU0_OUT 12 ++#define PICO_VMU1_OUT 13 ++#define PICO_VMU2_OUT 14 ++#define PICO_CONFIG 15 ++ ++/* Config Register */ ++#define PICO_COEFF_FRAC_BITS 0 ++#define PICO_COEFF_FRAC_BITS_WIDTH 4 ++#define PICO_OFFSET_FRAC_BITS 4 ++#define PICO_OFFSET_FRAC_BITS_WIDTH 4 ++#define PICO_INPUT_MODE 8 ++#define PICO_INPUT_MODE_WIDTH 2 ++#define PICO_OUTPUT_MODE 10 ++ ++#define PICO_TRANSFORMATION_MODE 0 ++#define PICO_HOR_FILTER_MODE 1 ++#define PICO_VERT_FILTER_MODE 2 ++ ++#define PICO_PLANAR_MODE 1 ++#define PICO_PACKED_MODE 0 ++ ++/* Bits in coefficients */ ++#define PICO_COEFF_BITS 12 ++ ++/* Operation bits */ ++#define PICO_USE_ACC (1 << 2) ++#define PICO_SINGLE_VECTOR (1 << 3) ++ ++ ++#define __str(x...) #x ++#define __xstr(x...) __str(x) ++ ++#define PICO_PUT_W(pico_reg, x) \ ++ __builtin_mvrc_w(PICO_CPNO, pico_reg, x); ++#define PICO_GET_W(pico_reg) \ ++ __builtin_mvcr_w(PICO_CPNO, pico_reg) ++ ++#define PICO_PUT_D(pico_reg, x) \ ++ __builtin_mvrc_d(PICO_CPNO, pico_reg, x); ++#define PICO_GET_D(pico_reg) \ ++ __builtin_mvcr_d(PICO_CPNO, pico_reg) ++ ++ ++#define PICO_STCM_W(ptr, pico_regs...) \ ++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++#define PICO_STCM_D(ptr, pico_regs...) \ ++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++ ++#define PICO_STCM_W_DEC(ptr, pico_regs...) \ ++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); ++#define PICO_STCM_D_DEC(ptr, pico_regs...) \ ++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); ++ ++#define PICO_LDCM_W(ptr, pico_regs...) \ ++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++#define PICO_LDCM_D(ptr, pico_regs...) \ ++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); ++ ++#define PICO_LDCM_W_INC(ptr, pico_regs...) \ ++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); ++#define PICO_LDCM_D_INC(ptr, pico_regs...) \ ++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); ++ ++#define PICO_OP(op, dst_addr, addr0, addr1, addr2) \ ++ __builtin_cop(PICO_CPNO, addr0, addr1, addr2, op | dst_addr); ++ ++ ++#endif ++ +diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h +index ecd28f5..3221d0c 100644 +--- a/libswscale/swscale_internal.h ++++ b/libswscale/swscale_internal.h +@@ -173,7 +173,7 @@ typedef struct SwsContext{ + SwsFunc yuv2rgb_get_func_ptr (SwsContext *c); + int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation); + +-char *sws_format_name(int format); ++char *sws_format_name(enum PixelFormat format); + + //FIXME replace this with something faster + #define isPlanarYUV(x) ((x)==PIX_FMT_YUV410P || (x)==PIX_FMT_YUV420P \ +diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c +index 71759bc..fa83985 100644 +--- a/libswscale/yuv2rgb.c ++++ b/libswscale/yuv2rgb.c +@@ -44,6 +44,10 @@ + #include "yuv2rgb_mlib.c" + #endif + ++#ifdef ARCH_AVR32 ++#include "yuv2rgb_avr32.c" ++#endif ++ + #define DITHER1XBPP // only for mmx + + const uint8_t __attribute__((aligned(8))) dither_2x2_4[2][8]={ +@@ -601,6 +605,12 @@ SwsFunc yuv2rgb_get_func_ptr (SwsContext *c) + if(t) return t; + } + #endif ++#ifdef ARCH_AVR32 ++ { ++ SwsFunc t= yuv2rgb_init_avr32(c); ++ if(t) return t; ++ } ++#endif + #ifdef HAVE_ALTIVEC + if (c->flags & SWS_CPU_CAPS_ALTIVEC) + { +@@ -678,6 +688,10 @@ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, + //printf("%lld %lld %lld %lld %lld\n", cy, crv, cbu, cgu, cgv); + oy -= 256*brightness; + ++#ifdef ARCH_AVR32 ++ yuv2rgb_c_init_tables_avr32 (c, inv_table, fullRange, brightness, contrast, saturation); ++#endif ++ + for (i = 0; i < 1024; i++) { + int j; + +diff --git a/libswscale/yuv2rgb_avr32.c b/libswscale/yuv2rgb_avr32.c +new file mode 100644 +index 0000000..4a8341e +--- /dev/null ++++ b/libswscale/yuv2rgb_avr32.c +@@ -0,0 +1,416 @@ ++/* ++ * Copyright (c) 2007 Atmel Corporation. All rights reserved. ++ * ++ * 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 ATMEL may not be used to endorse or promote products ++ * derived from this software without specific prior written ++ * permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH ++ * DAMAGE. ++ */ ++#include "pico-avr32.h" ++ ++ ++#define RGB(uv_part) \ ++ __asm__ volatile ( \ ++ "ld.w\t%0, %3[%7:" uv_part " << 2]\n\t" /* tmp = c->table_gV[V] */ \ ++ "ld.w\t%1, %4[%8:" uv_part " << 2]\n\t" /* g = c->table_gU[U] */ \ ++ "ld.w\t%2, %5[%8:" uv_part " << 2]\n\t" /* b = c->table_bU[U] */ \ ++ "add\t%1, %0\n\t" /* g += tmp */\ ++ "ld.w\t%0, %6[%7:" uv_part " << 2]" /* r = c->table_rV[V] */ \ ++ : "=&r" (r), "=&r" (g), "=&r" (b) \ ++ : "r" (&c->table_gV[0]), "r" (&c->table_gU[0]),"r" (&c->table_bU[0]), \ ++ "r" (&c->table_rV[0]), "r" (V), "r" (U)); ++ ++ ++#undef YUV2RGB1 ++#define YUV2RGB1(dst, src, y, idx) \ ++ { int tmp2; __asm__ volatile ( \ ++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[2] = tmp; */ \ ++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[0] = tmp; */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 3], %1\n\t" /* dst_1[5] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ ++ "st.b\t%7[6*%8 + 5], %1" /* dst_1[3] = tmp; */ \ ++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ ++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } ++ ++#undef YUV2RGB2 ++#define YUV2RGB2(dst, src, y, idx) \ ++ { int tmp2; __asm__ volatile ( \ ++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[2] = tmp; */ \ ++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[0] = tmp; */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 3], %1\n\t" /* dst_1[5] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ ++ "st.b\t%7[6*%8 + 5], %1" /* dst_1[3] = tmp; */ \ ++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ ++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } ++ ++ ++#undef YUV2BGR1 ++#define YUV2BGR1(dst, src, y, idx) \ ++ { int tmp2; __asm__ volatile ( \ ++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[2] = tmp; */ \ ++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[0] = tmp; */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 5], %1\n\t" /* dst_1[5] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ ++ "st.b\t%7[6*%8 + 3], %1" /* dst_1[3] = tmp; */ \ ++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ ++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } ++ ++#undef YUV2BGR2 ++#define YUV2BGR2(dst, src, y, idx) \ ++ { int tmp2; __asm__ volatile ( \ ++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[2] = tmp; */ \ ++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ ++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ ++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[0] = tmp; */ \ ++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ ++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 5], %1\n\t" /* dst_1[5] = tmp; */ \ ++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ ++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ ++ "st.b\t%7[6*%8 + 3], %1" /* dst_1[3] = tmp; */ \ ++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ ++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } ++ ++ ++ ++int yuv2bgr24_avr32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, ++ int srcSliceH, uint8_t* dst[], int dstStride[]){ ++ int y; ++ ++ if(c->srcFormat == PIX_FMT_YUV422P){ ++ srcStride[1] *= 2; ++ srcStride[2] *= 2; ++ } ++ ++ ++ for(y=0; y>1)*srcStride[1]; ++ uint8_t *pv= src[2] + (y>>1)*srcStride[2]; ++ unsigned int h_size= c->dstW>>3; ++ while (h_size--) { ++ uint32_t U, V, Y1, Y2, tmp; ++ U = ((uint32_t*)pu)[0]; ++ V = ((uint32_t*)pv)[0]; ++ ++ RGB("t") ++ YUV2BGR1(dst_1, py_1, Y1, 0) ++ YUV2BGR1(dst_2, py_2, Y2, 0) ++ ++ RGB("u") ++ YUV2BGR2(dst_1, py_1, Y1, 1) ++ YUV2BGR2(dst_2, py_2, Y2, 1) ++ ++ RGB("l") ++ YUV2BGR1(dst_1, py_1, Y1, 2) ++ YUV2BGR1(dst_2, py_2, Y2, 2) ++ ++ RGB("b") ++ YUV2BGR2(dst_1, py_1, Y1, 3) ++ YUV2BGR2(dst_2, py_2, Y2, 3) ++ ++ ++ ++ pu += 4; ++ pv += 4; ++ py_1 += 8; ++ py_2 += 8; ++ dst_1 += 24; ++ dst_2 += 24; ++ } ++ } ++ return srcSliceH; ++} ++ ++ ++ ++static int yuv2rgb24_avr32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, ++ int srcSliceH, uint8_t* dst[], int dstStride[]){ ++ int y; ++ ++ if(c->srcFormat == PIX_FMT_YUV422P){ ++ srcStride[1] *= 2; ++ srcStride[2] *= 2; ++ } ++ for(y=0; y>1)*srcStride[1]; ++ uint8_t *pv= src[2] + (y>>1)*srcStride[2]; ++ unsigned int h_size= c->dstW>>3; ++ while (h_size--) { ++ uint32_t U, V, Y1, Y2, tmp; ++ U = ((uint32_t*)pu)[0]; ++ V = ((uint32_t*)pv)[0]; ++ ++ RGB("t") ++ YUV2RGB1(dst_1, py_1, Y1, 0) ++ YUV2RGB1(dst_2, py_2, Y2, 0) ++ ++ RGB("u") ++ YUV2RGB2(dst_1, py_1, Y1, 1) ++ YUV2RGB2(dst_2, py_2, Y2, 1) ++ ++ RGB("l") ++ YUV2RGB1(dst_1, py_1, Y1, 2) ++ YUV2RGB1(dst_2, py_2, Y2, 2) ++ ++ RGB("b") ++ YUV2RGB2(dst_1, py_1, Y1, 3) ++ YUV2RGB2(dst_2, py_2, Y2, 3) ++ ++ pu += 4; ++ pv += 4; ++ py_1 += 8; ++ py_2 += 8; ++ dst_1 += 24; ++ dst_2 += 24; ++ } ++ } ++ return srcSliceH; ++} ++ ++#define SCALE(x, bits) (((x) + ( 1 << (bits - 1))) >> bits) ++#define COEFF_FRAC_BITS 9 ++#define OFFSET_FRAC_BITS 2 ++ ++/* Coefficients used in the pico */ ++static struct { ++ short coeff2_2; ++ short coeff2_3; ++ short coeff2_0; ++ short coeff2_1; ++ short coeff1_2; ++ short coeff1_3; ++ short coeff1_0; ++ short coeff1_1; ++ short coeff0_2; ++ short coeff0_3; ++ short coeff0_0; ++ short coeff0_1; ++} pico_coeff; ++ ++ ++static int yuv2bgr24_avr32_pico(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, ++ int srcSliceH, uint8_t* dst[], int dstStride[]){ ++ int y; ++ static int first_time = 1; ++ ++ /* Initialize pico */ ++ PICO_LDCM_D(&pico_coeff, ++ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B, ++ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B, ++ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B); ++ ++ PICO_PUT_W(PICO_CONFIG, ++ (PICO_PACKED_MODE << PICO_OUTPUT_MODE ++ | PICO_TRANSFORMATION_MODE << PICO_INPUT_MODE ++ | OFFSET_FRAC_BITS << PICO_OFFSET_FRAC_BITS ++ | COEFF_FRAC_BITS << PICO_COEFF_FRAC_BITS)); ++ ++ ++ if(c->srcFormat == PIX_FMT_YUV422P){ ++ srcStride[1] *= 2; ++ srcStride[2] *= 2; ++ } ++ ++ for(y=0; y>1)*srcStride[1]; ++ uint8_t *pv= src[2] + (y>>1)*srcStride[2]; ++ unsigned int h_size= c->dstW>>3; ++ int *py_1_int = (int *)py_1; ++ int *py_2_int = (int *)py_2; ++ int *pu_int = (int *)pu; ++ int *pv_int = (int *)pv; ++ while (h_size--) { ++ PICO_PUT_W(PICO_INPIX0, *py_1_int++); ++ PICO_PUT_W(PICO_INPIX1, *pu_int++); ++ PICO_PUT_W(PICO_INPIX2, *pv_int++); ++ PICO_OP(0, 0, 0, 4, 8); ++ PICO_OP(0, 1, 1, 4, 8); ++ PICO_OP(0, 2, 2, 5, 9); ++ PICO_OP(0, 3, 3, 5, 9); ++ PICO_PUT_W(PICO_INPIX0, *py_1_int++); ++ PICO_STCM_W(dst_1, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); ++ PICO_OP(0, 0, 0, 6, 10); ++ PICO_OP(0, 1, 1, 6, 10); ++ PICO_OP(0, 2, 2, 7, 11); ++ PICO_OP(0, 3, 3, 7, 11); ++ PICO_PUT_W(PICO_INPIX0, *py_2_int++); ++ PICO_STCM_W(dst_1 + 12, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); ++ ++ PICO_OP(0, 0, 0, 4, 8); ++ PICO_OP(0, 1, 1, 4, 8); ++ PICO_OP(0, 2, 2, 5, 9); ++ PICO_OP(0, 3, 3, 5, 9); ++ PICO_PUT_W(PICO_INPIX0, *py_2_int++); ++ PICO_STCM_W(dst_2, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); ++ PICO_OP(0, 0, 0, 6, 10); ++ PICO_OP(0, 1, 1, 6, 10); ++ PICO_OP(0, 2, 2, 7, 11); ++ PICO_OP(0, 3, 3, 7, 11); ++ PICO_STCM_W(dst_2 + 12, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); ++ ++ dst_1 += 24; ++ dst_2 += 24; ++ } ++ } ++ return srcSliceH; ++} ++ ++extern int avr32_use_pico; ++ ++SwsFunc yuv2rgb_init_avr32 (SwsContext *c){ ++ switch(c->dstFormat){ ++ case PIX_FMT_BGR24: ++ { ++ if ( avr32_use_pico ){ ++ MSG_ERR("AVR32 BGR24: Using PICO for color space conversion\n"); ++ return yuv2bgr24_avr32_pico; ++ } else { ++ MSG_ERR("AVR32 BGR24: Using optimized color space conversion\n"); ++ return yuv2bgr24_avr32; ++ } ++ } ++ break; ++ case PIX_FMT_RGB24: ++ { ++ if ( avr32_use_pico ){ ++ MSG_ERR("AVR32 RGB24: Using PICO for color space conversion\n"); ++ return yuv2bgr24_avr32_pico; ++ } else { ++ MSG_ERR("AVR32 RGB24: Using optimized color space conversion\n"); ++ return yuv2rgb24_avr32; ++ } ++ } ++ } ++ return NULL; ++} ++ ++ ++int yuv2rgb_c_init_tables_avr32 (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation){ ++ const int isRgb = (c->dstFormat == PIX_FMT_RGB24); ++ ++ int64_t crv = inv_table[0]; ++ int64_t cbu = inv_table[1]; ++ int64_t cgu = -inv_table[2]; ++ int64_t cgv = -inv_table[3]; ++ int64_t cy = 1<<16; ++ int64_t oy = 0; ++ ++ if(!fullRange){ ++ cy= (cy*255) / 219; ++ oy= 16<<16; ++ } ++ ++ cy = (cy *contrast )>>16; ++ crv= (crv*contrast * saturation)>>32; ++ cbu= (cbu*contrast * saturation)>>32; ++ cgu= (cgu*contrast * saturation)>>32; ++ cgv= (cgv*contrast * saturation)>>32; ++ ++ oy -= 256*brightness; ++ ++ pico_coeff.coeff1_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* G <- Y */ ++ pico_coeff.coeff1_1 = SCALE(cgu, 16 - COEFF_FRAC_BITS); /* G <- U */ ++ pico_coeff.coeff1_2 = SCALE(cgv, 16 - COEFF_FRAC_BITS); /* G <- V */ ++ pico_coeff.coeff1_3 = (SCALE(-128*cgu - 128*cgv - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* G offset */ ++ ++ if ( isRgb ){ ++ pico_coeff.coeff0_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* R <- Y */ ++ pico_coeff.coeff0_1 = 0; /* R <- U */ ++ pico_coeff.coeff0_2 = SCALE(crv, 16 - COEFF_FRAC_BITS); /* R <- V */ ++ pico_coeff.coeff0_3 = (SCALE(-128*crv - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* R offset */ ++ ++ pico_coeff.coeff2_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* B <- Y */ ++ pico_coeff.coeff2_1 = SCALE(cbu, 16 - COEFF_FRAC_BITS); /* B <- U */ ++ pico_coeff.coeff2_2 = 0; /* B <- V */ ++ pico_coeff.coeff2_3 = (SCALE(-128*cbu - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1)));/* B offset */ ++ } else { ++ pico_coeff.coeff2_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* R <- Y */ ++ pico_coeff.coeff2_1 = 0; /* R <- U */ ++ pico_coeff.coeff2_2 = SCALE(crv, 16 - COEFF_FRAC_BITS); /* R <- V */ ++ pico_coeff.coeff2_3 = (SCALE(-128*crv - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* R offset */ ++ ++ pico_coeff.coeff0_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* B <- Y */ ++ pico_coeff.coeff0_1 = SCALE(cbu, 16 - COEFF_FRAC_BITS); /* B <- U */ ++ pico_coeff.coeff0_2 = 0; /* B <- V */ ++ pico_coeff.coeff0_3 = (SCALE(-128*cbu - 16*cy, 16 - OFFSET_FRAC_BITS) ++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* B offset */ ++ } ++ ++} ++ ++ ++#undef RGB +diff --git a/libvo/vo_fbdev2.c b/libvo/vo_fbdev2.c +index 053c193..7017770 100644 +--- a/libvo/vo_fbdev2.c ++++ b/libvo/vo_fbdev2.c +@@ -22,6 +22,9 @@ + #include "sub.h" + #include "mp_msg.h" + ++/* Draw directly to framebuffer */ ++#define USE_CONVERT2FB ++ + static vo_info_t info = { + "Framebuffer Device", + "fbdev2", +@@ -178,6 +181,15 @@ static int fb_preinit(int reset) + } + fb_orig_vinfo = fb_vinfo; + ++ /* Reset panning offset */ ++ fb_vinfo.yoffset = 0; ++ if (ioctl(fb_dev_fd, FBIOPAN_DISPLAY, &fb_vinfo)) { ++ mp_msg(MSGT_VO, MSGL_ERR, ++ "[fbdev2] FBIOPAN_DISPLAY failed: %s\n", ++ strerror(errno)); ++ return 0; ++ } ++ + fb_bpp = fb_vinfo.bits_per_pixel; + + /* 16 and 15 bpp is reported as 16 bpp */ +@@ -289,6 +301,10 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, + mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't malloc next_frame: %s\n", strerror(errno)); + return 1; + } ++#else ++ if ((fb_line_len * fb_vinfo.yres) <= (fb_finfo.smem_len / 2) ++ && fb_vinfo.yoffset == 0) ++ center += fb_line_len * fb_vinfo.yres; + #endif + if (fs) memset(frame_buffer, '\0', fb_line_len * fb_vinfo.yres); + +@@ -299,14 +315,22 @@ static int query_format(uint32_t format) + { + // open the device, etc. + if (fb_preinit(0)) return 0; +- if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR) { ++ if ((format & IMGFMT_RGB_MASK) == IMGFMT_RGB) { + int fb_target_bpp = format & 0xff; + set_bpp(&fb_vinfo, fb_target_bpp); + fb_vinfo.xres_virtual = fb_vinfo.xres; +- fb_vinfo.yres_virtual = fb_vinfo.yres; ++ fb_vinfo.yres_virtual = fb_vinfo.yres * 2; + if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_vinfo)) { +- mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't put VSCREENINFO: %s\n", strerror(errno)); +- return 0; ++ mp_msg(MSGT_VO, MSGL_WARN, ++ "[fbdev2] Can't double virtual y resolution: %s\n", ++ strerror(errno)); ++ fb_vinfo.yres_virtual = fb_vinfo.yres; ++ if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_vinfo)) { ++ mp_msg(MSGT_VO, MSGL_ERR, ++ "[fbdev2] Can't put VSCREENINFO: %s\n", ++ strerror(errno)); ++ return -1; ++ } + } + fb_pixel_size = fb_vinfo.bits_per_pixel / 8; + fb_bpp = fb_vinfo.red.length + fb_vinfo.green.length + +@@ -367,16 +391,67 @@ static void check_events(void) + + static void flip_page(void) + { +-#ifndef USE_CONVERT2FB + int i, out_offset = 0, in_offset = 0; + +- for (i = 0; i < in_height; i++) { +- memcpy(center + out_offset, next_frame + in_offset, +- in_width * fb_pixel_size); +- out_offset += fb_line_len; +- in_offset += in_width * fb_pixel_size; +- } ++#ifndef USE_CONVERT2FB ++ if (1) { ++#else ++ if (fb_vinfo.yres_virtual == fb_vinfo.yres) { + #endif ++ for (i = 0; i < in_height; i++) { ++ memcpy(center + out_offset, next_frame + in_offset, ++ in_width * fb_pixel_size); ++ out_offset += fb_line_len; ++ in_offset += in_width * fb_pixel_size; ++ } ++ } else { ++ if (fb_vinfo.yoffset == 0) { ++ fb_vinfo.yoffset += fb_vinfo.yres; ++ center -= fb_line_len * fb_vinfo.yres; ++ } else { ++ fb_vinfo.yoffset = 0; ++ center += fb_line_len * fb_vinfo.yres; ++ } ++ ++ if (ioctl(fb_dev_fd, FBIOPAN_DISPLAY, &fb_vinfo)) { ++ mp_msg(MSGT_VO, MSGL_ERR, ++ "[fbdev2] Can't FBIOPAN_DISPLAY: %s\n", ++ strerror(errno)); ++ } ++ } ++} ++ ++static uint32_t get_image(mp_image_t *mpi) ++{ ++ if(mpi->flags&MP_IMGFLAG_READABLE) ++ return VO_FALSE; // slow video ram ++ if(mpi->type==MP_IMGTYPE_STATIC) ++ return VO_FALSE; // it is not static ++ ++ if (mpi->flags & (MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_ACCEPT_WIDTH)) { ++ // we're lucky or codec accepts stride => ok, let's go! ++ ++ //YUY2 and RGB formats ++ mpi->planes[0] = center; ++ mpi->width = in_width; ++ mpi->stride[0] = fb_line_len; ++ ++ // center image ++ ++ mpi->flags |= MP_IMGFLAG_DIRECT; ++ ++ return VO_TRUE; ++ } ++ ++ return VO_FALSE; ++} ++ ++static uint32_t put_image(mp_image_t *mpi) ++{ ++ // already out? ++ if ((mpi->flags & (MP_IMGFLAG_DIRECT | MP_IMGFLAG_DRAW_CALLBACK))) ++ return VO_TRUE; ++ return VO_FALSE; + } + + static void uninit(void) +@@ -403,6 +478,10 @@ static int control(uint32_t request, void *data, ...) + switch (request) { + case VOCTRL_QUERY_FORMAT: + return query_format(*((uint32_t*)data)); ++ case VOCTRL_GET_IMAGE: ++ return get_image(data); ++ case VOCTRL_DRAW_IMAGE: ++ return put_image(data); + } + return VO_NOTIMPL; + } +diff --git a/version.sh b/version.sh +index 44b5c5d..cf22a68 100755 +--- a/version.sh ++++ b/version.sh +@@ -1,2 +1,2 @@ + #!/bin/sh +-echo "#define VERSION \"1.0rc1-$1\"" > version.h ++echo "#define VERSION \"1.0rc1.atmel.2-$1\"" > version.h diff --git a/packages/mplayer/mplayer_0.0+1.0rc1.bb b/packages/mplayer/mplayer_0.0+1.0rc1.bb index 6d9cd754d5..c0062bddd9 100644 --- a/packages/mplayer/mplayer_0.0+1.0rc1.bb +++ b/packages/mplayer/mplayer_0.0+1.0rc1.bb @@ -22,7 +22,11 @@ SRC_URI = "http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2 \ file://imageon-video_out.patch;patch=1 \ file://powerpc-is-ppc.diff;patch=1 \ file://pxa_configure.patch;patch=1 \ - file://pxa-video_out.patch;patch=1 " + file://pxa-video_out.patch;patch=1 \ + " + +SRC_URI_append_avr32 = " file://mplayer-1.0rc1-atmel.2.patch;patch=1 \ + " # This is required for the collie machine only as all stacks in that # machine seem to be set to executable by the toolchain. If someone @@ -34,7 +38,7 @@ PACKAGE_ARCH_mencoder_collie = "collie" RCONFLICTS_${PN} = "mplayer-atty" RREPLACES_${PN} = "mplayer-atty" -PR = "r14" +PR = "r15" PARALLEL_MAKE = "" diff --git a/packages/tasks/task-gpephone.bb b/packages/tasks/task-gpephone.bb index a77233bedc..e2cef807e0 100644 --- a/packages/tasks/task-gpephone.bb +++ b/packages/tasks/task-gpephone.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Task packages for GPE Palmtop Environment Phone Edition" -PR = "r10" +PR = "r13" LICENSE = "MIT" inherit task @@ -23,18 +23,16 @@ RDEPENDS_gpephone-task-development = "\ minicom" RDEPENDS_gpephone-task-base = "\ - cms92init \ - gsmmux \ connect \ - phoneserver \ + gsmd \ soundserver \ voicecall \ + dialer \ + quickdial \ vochistory \ sms \ audioplayer \ videoplayer \ - addressbook \ - calendar \ gpe-applauncher \ gpe-phonepanel \ gpe-bootsplash \ @@ -54,7 +52,6 @@ RDEPENDS_gpephone-task-base = "\ gpe-dm \ gpe-login \ gpe-session-scripts-phone \ - gpe-icons \ gpe-confd \ gpe-autostarter \ xauth \ @@ -72,7 +69,10 @@ RDEPENDS_gpephone-task-base = "\ " RDEPENDS_gpephone-task-pim = "\ - gpesyncd" + contact \ + calendar2 \ + useen \ + " RDEPENDS_gpephone-task-settings = "\ gpe-su \ @@ -80,10 +80,11 @@ RDEPENDS_gpephone-task-settings = "\ gpe-mixer \ gpe-taskmanager \ minilite \ + firewall \ + almmgrd \ machined" RDEPENDS_gpephone-task-apps = "\ - gpe-what \ gpe-scap \ gpe-windowlist" diff --git a/packages/tasks/task-sdk-base.bb b/packages/tasks/task-sdk-base.bb index 4041b27536..1977ab6b98 100644 --- a/packages/tasks/task-sdk-base.bb +++ b/packages/tasks/task-sdk-base.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Basic SDK development packages" -PR = "r1" +PR = "r2" LICENSE = "MIT" ALLOW_EMPTY = "1" @@ -31,7 +31,6 @@ RDEPENDS = "\ gnutls-dev \ libgpg-error-dev \ libidl-dev \ - libiw-dev \ libmimedir-dev \ libpcap-dev \ libpixman-dev \ diff --git a/packages/tasks/task-sdk-gpephone.bb b/packages/tasks/task-sdk-gpephone.bb index 56b398b04e..77889d7143 100644 --- a/packages/tasks/task-sdk-gpephone.bb +++ b/packages/tasks/task-sdk-gpephone.bb @@ -1,21 +1,27 @@ DESCRIPTION = "SDK task for GPE Phone Edition" -PR = "r0" +PR = "r4" LICENSE = "MIT" ALLOW_EMPTY = "1" RDEPENDS = "\ libidn-dev \ - libim-dev \ - gloox-dev \ - libabenabler-dev \ - libcalenabler-dev \ + libabenabler2-dev \ + libcalenabler2-dev \ libchenabler-dev \ libgemwidget-dev \ libiac-dev \ - libim-dev \ - liblipsevent-dev \ - libmsgenabler-dev \ - librecord-dev \ + libiac2-dev \ + libim2-dev \ + liblipsevent2-dev \ + libmsgenabler2-dev \ + librecord2-dev \ libvocenabler-dev \ linphone-dev \ + libsettings-dev \ + libgemwidget-dev \ + libalmmgr-dev \ + libgpephone-dev \ + libgsmd-dev \ + libtapi-dev \ + libvoc-dev \ " \ No newline at end of file diff --git a/packages/tea/tea_17.3.5.bb b/packages/tea/tea_17.3.5.bb index c8dac8c94f..da1bad00a9 100644 --- a/packages/tea/tea_17.3.5.bb +++ b/packages/tea/tea_17.3.5.bb @@ -10,3 +10,5 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/tea-editor/${P}.tar.bz2 \ file://move-endif.patch;patch=1;pnum=0" EXTRA_OECONF = "--enable-legacy" + +FILES_${PN}-doc += "${datadir}/${PN}/doc" diff --git a/packages/tinymail/libtinymail-0.0.1/no-iconv-detect.patch b/packages/tinymail/libtinymail-0.0.1/no-iconv-detect.patch index 558cbb2f93..cfda4cb0f2 100644 --- a/packages/tinymail/libtinymail-0.0.1/no-iconv-detect.patch +++ b/packages/tinymail/libtinymail-0.0.1/no-iconv-detect.patch @@ -1,66 +1,9 @@ ---- /tmp/ticonv.m4 2006-11-19 12:01:18.000000000 +0100 -+++ trunk/m4/ticonv.m4 2006-11-19 12:14:50.378554000 +0100 -@@ -14,12 +14,7 @@ - save_LIBS="$LIBS" - CFLAGS="$CFLAGS $ICONV_CFLAGS" - LIBS="$LIBS $ICONV_LIBS -liconv" --AC_CACHE_CHECK(for iconv in -liconv, ac_cv_libiconv, AC_LINK_IFELSE([AC_LANG_PROGRAM([[ --#include --]], [[ -- iconv_t cd; -- cd = iconv_open ("UTF-8", "ISO-8859-1"); --]])],[ac_cv_libiconv=yes],[ac_cv_libiconv=no])) -+ - if test $ac_cv_libiconv = yes; then - ICONV_LIBS="$ICONV_LIBS -liconv" - have_iconv=yes -@@ -33,39 +28,6 @@ - if test $ac_cv_libiconv = no; then - AC_CHECK_FUNCS(gnu_get_libc_version) - fi -- AC_CACHE_CHECK([if iconv() handles UTF-8], ac_cv_libiconv_utf8, AC_RUN_IFELSE([AC_LANG_SOURCE([[ --#include --#include --#include --#ifdef HAVE_GNU_GET_LIBC_VERSION --#include --#endif -- --int main (int argc, char **argv) --{ -- const char *from = "Some Text \xA4"; -- const char *utf8 = "Some Text \xC2\xA4"; -- char *transbuf = malloc (20), *trans = transbuf; -- iconv_t cd; -- size_t from_len = strlen (from), utf8_len = 20; -- size_t utf8_real_len = strlen (utf8); -- --#ifdef HAVE_GNU_GET_LIBC_VERSION -- /* glibc 2.1.2's iconv is broken in hard to test ways. */ -- if (!strcmp (gnu_get_libc_version (), "2.1.2")) -- exit (1); --#endif -- -- cd = iconv_open ("UTF-8", "ISO-8859-1"); -- if (cd == (iconv_t) -1) -- exit (1); -- if (iconv (cd, &from, &from_len, &trans, &utf8_len) == -1 || from_len != 0) -- exit (1); -- if (memcmp (utf8, transbuf, utf8_real_len) != 0) -- exit (1); -- -- exit (0); --}]])],[ac_cv_libiconv_utf8=yes],[ac_cv_libiconv_utf8=no; have_iconv=no],[ac_cv_libiconv_utf8=no; have_iconv=no])) - fi +--- m4/ticonv.m4~ 2007-10-30 13:57:32.000000000 +0100 ++++ trunk/m4/ticonv.m4 2007-10-30 13:57:32.000000000 +0100 +@@ -76,15 +76,6 @@ + + CFLAGS="$CFLAGS -I$srcdir" - if test "$have_iconv" = no; then -@@ -73,20 +35,5 @@ - fi - AC_SUBST(ICONV_CFLAGS) - AC_SUBST(ICONV_LIBS) -- --CFLAGS="$CFLAGS -I$srcdir" -- -AC_MSG_CHECKING(preferred charset formats for system iconv) -AC_RUN_IFELSE([AC_LANG_SOURCE([[ -#define CONFIGURE_IN @@ -70,9 +13,6 @@ -],[ - AC_MSG_RESULT(not found) -],[]) -- --CFLAGS="$save_CFLAGS" --LIBS="$save_LIBS" -- - ]) -+ + + CFLAGS="$save_CFLAGS" + LIBS="$save_LIBS" diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch new file mode 100644 index 0000000000..0e8c2a1c02 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch @@ -0,0 +1,2135 @@ +Subject: [PATCH] AVR32 Architecture support + +Add support for the AVR32 architecture in the core libc and build system. +This also adds AVR32-ELF definitions to elf.h + +--- + + Rules.mak | 4 + extra/Configs/Config.avr32 | 38 +++++ + extra/Configs/Config.in | 7 + + include/elf.h | 51 +++++++ + libc/sysdeps/linux/avr32/Makefile | 93 +++++++++++++ + libc/sysdeps/linux/avr32/__longjmp.S | 17 ++ + libc/sysdeps/linux/avr32/_mmap.c | 33 ++++ + libc/sysdeps/linux/avr32/bits/atomicity.h | 86 ++++++++++++ + libc/sysdeps/linux/avr32/bits/byteswap.h | 80 +++++++++++ + libc/sysdeps/linux/avr32/bits/endian.h | 7 + + libc/sysdeps/linux/avr32/bits/fcntl.h | 167 +++++++++++++++++++++++++ + libc/sysdeps/linux/avr32/bits/kernel_stat.h | 63 +++++++++ + libc/sysdeps/linux/avr32/bits/kernel_types.h | 56 ++++++++ + libc/sysdeps/linux/avr32/bits/machine-gmon.h | 69 ++++++++++ + libc/sysdeps/linux/avr32/bits/mman.h | 95 ++++++++++++++ + libc/sysdeps/linux/avr32/bits/profil-counter.h | 26 +++ + libc/sysdeps/linux/avr32/bits/setjmp.h | 21 +++ + libc/sysdeps/linux/avr32/bits/syscalls.h | 143 +++++++++++++++++++++ + libc/sysdeps/linux/avr32/bits/wordsize.h | 1 + libc/sysdeps/linux/avr32/brk.c | 23 +++ + libc/sysdeps/linux/avr32/bsd-_setjmp.S | 12 + + libc/sysdeps/linux/avr32/bsd-setjmp.S | 12 + + libc/sysdeps/linux/avr32/clone.c | 37 +++++ + libc/sysdeps/linux/avr32/crt1.S | 93 +++++++++++++ + libc/sysdeps/linux/avr32/crti.S | 17 ++ + libc/sysdeps/linux/avr32/crtn.S | 14 ++ + libc/sysdeps/linux/avr32/mmap.c | 31 ++++ + libc/sysdeps/linux/avr32/setjmp.S | 43 ++++++ + libc/sysdeps/linux/avr32/sigaction.c | 49 +++++++ + libc/sysdeps/linux/avr32/sigrestorer.S | 11 + + libc/sysdeps/linux/avr32/sys/elf.h | 26 +++ + libc/sysdeps/linux/avr32/sys/io.h | 48 +++++++ + libc/sysdeps/linux/avr32/sys/procfs.h | 123 ++++++++++++++++++ + libc/sysdeps/linux/avr32/sys/ucontext.h | 94 ++++++++++++++ + libc/sysdeps/linux/avr32/sys/user.h | 46 ++++++ + libc/sysdeps/linux/avr32/syscall.S | 81 ++++++++++++ + libc/sysdeps/linux/avr32/vfork.S | 55 ++++++++ + 37 files changed, 1872 insertions(+) + +Index: uClibc-0.9.28/extra/Configs/Config.avr32 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/extra/Configs/Config.avr32 2006-05-05 09:27:17.000000000 +0200 +@@ -0,0 +1,38 @@ ++# ++# For a description of the syntax of this configuration file, ++# see extra/config/Kconfig-language.txt ++# ++ ++config HAVE_ELF ++ bool ++ default y ++ ++config TARGET_ARCH ++ default "avr32" ++ ++config ARCH_CFLAGS ++ string ++ ++config ARCH_LDFLAGS ++ string ++ ++config LIBGCC_CFLAGS ++ string ++ ++config ARCH_SUPPORTS_BIG_ENDIAN ++ bool ++ default y ++ ++config UCLIBC_COMPLETELY_PIC ++ select FORCE_SHAREABLE_TEXT_SEGMENTS ++ bool ++ default y ++ ++choice ++ prompt "Target CPU Type" ++ default CONFIG_AP7000 ++ ++config CONFIG_AP7000 ++ bool "AP7000" ++ ++endchoice +Index: uClibc-0.9.28/extra/Configs/Config.in +=================================================================== +--- uClibc-0.9.28.orig/extra/Configs/Config.in 2006-04-19 12:47:48.000000000 +0200 ++++ uClibc-0.9.28/extra/Configs/Config.in 2006-04-19 12:48:33.000000000 +0200 +@@ -16,6 +16,9 @@ config TARGET_alpha + config TARGET_arm + bool "arm" + ++config TARGET_avr32 ++ bool "avr32" ++ + config TARGET_bfin + bool "bfin" + +@@ -83,6 +86,10 @@ if TARGET_arm + source "extra/Configs/Config.arm" + endif + ++if TARGET_avr32 ++source "extra/Configs/Config.avr32" ++endif ++ + if TARGET_bfin + source "extra/Configs/Config.bfin" + endif +Index: uClibc-0.9.28/include/elf.h +=================================================================== +--- uClibc-0.9.28.orig/include/elf.h 2006-04-19 12:47:48.000000000 +0200 ++++ uClibc-0.9.28/include/elf.h 2006-05-05 09:28:38.000000000 +0200 +@@ -261,6 +261,8 @@ typedef struct + #define EM_NIOS32 0xfebb /* Altera Nios 32 */ + #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */ + ++#define EM_AVR32 0x18ad ++ + /* V850 backend magic number. Written in the absense of an ABI. */ + #define EM_CYGNUS_V850 0x9080 + +@@ -2687,6 +2689,55 @@ typedef Elf32_Addr Elf32_Conflict; + /* Keep this the last entry. */ + #define R_V850_NUM 25 + ++/* Atmel AVR32 relocations. */ ++#define R_AVR32_NONE 0 ++#define R_AVR32_32 1 ++#define R_AVR32_16 2 ++#define R_AVR32_8 3 ++#define R_AVR32_32_PCREL 4 ++#define R_AVR32_16_PCREL 5 ++#define R_AVR32_8_PCREL 6 ++#define R_AVR32_DIFF32 7 ++#define R_AVR32_DIFF16 8 ++#define R_AVR32_DIFF8 9 ++#define R_AVR32_GOT32 10 ++#define R_AVR32_GOT16 11 ++#define R_AVR32_GOT8 12 ++#define R_AVR32_21S 13 ++#define R_AVR32_16U 14 ++#define R_AVR32_16S 15 ++#define R_AVR32_8S 16 ++#define R_AVR32_8S_EXT 17 ++#define R_AVR32_22H_PCREL 18 ++#define R_AVR32_18W_PCREL 19 ++#define R_AVR32_16B_PCREL 20 ++#define R_AVR32_16N_PCREL 21 ++#define R_AVR32_14UW_PCREL 22 ++#define R_AVR32_11H_PCREL 23 ++#define R_AVR32_10UW_PCREL 24 ++#define R_AVR32_9H_PCREL 25 ++#define R_AVR32_9UW_PCREL 26 ++#define R_AVR32_HI16 27 ++#define R_AVR32_LO16 28 ++#define R_AVR32_GOTPC 29 ++#define R_AVR32_GOTCALL 30 ++#define R_AVR32_LDA_GOT 31 ++#define R_AVR32_GOT21S 32 ++#define R_AVR32_GOT18SW 33 ++#define R_AVR32_GOT16S 34 ++#define R_AVR32_GOT7UW 35 ++#define R_AVR32_32_CPENT 36 ++#define R_AVR32_CPCALL 37 ++#define R_AVR32_16_CP 38 ++#define R_AVR32_9W_CP 39 ++#define R_AVR32_RELATIVE 40 ++#define R_AVR32_GLOB_DAT 41 ++#define R_AVR32_JMP_SLOT 42 ++#define R_AVR32_ALIGN 43 ++#define R_AVR32_NUM 44 ++ ++/* AVR32 dynamic tags */ ++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ + + #define R_H8_NONE 0 + #define R_H8_DIR32 1 +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,93 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../../ ++include $(TOPDIR)Rules.mak ++ASFLAGS=$(CFLAGS) ++ ++CRT_SRC = crt1.S ++CRT_OBJ = crt1.o ++SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ)) ++CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o ++ ++SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \ ++ bsd-_setjmp.S sigrestorer.S syscall.S ++SOBJS=$(patsubst %.S,%.o, $(SSRC)) ++ ++CSRC=clone.c brk.c sigaction.c mmap.c ++COBJS=$(patsubst %.c,%.o, $(CSRC)) ++ ++OBJS=$(SOBJS) $(COBJS) ++ ++OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS) ++ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ ++ ++$(CRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SCRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SOBJS): %.o : %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(COBJS): %.o : %.c ++ $(CC) $(CFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) ++crti.o: crti.S ++ $(CC) $(ASFLAGS) -c crti.S -o crti.o ++ ++$(TOPDIR)lib/crti.o: crti.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crti.o $(TOPDIR)lib/ ++ ++crtn.o: crtn.S ++ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o ++ ++$(TOPDIR)lib/crtn.o: crtn.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crtn.o $(TOPDIR)lib/ ++else ++$(TOPDIR)lib/crti.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o ++$(TOPDIR)lib/crtn.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o ++endif ++ ++ ++headers: ++# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/ ++ ++clean: ++ $(RM) *.[oa] *~ core ++ $(RM) bits/sysnum.h ++ $(RM) gmon-start.S ++ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,17 @@ ++/* longjmp for AVR32 ++ * ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ .global __longjmp ++ .type __longjmp,"function" ++ .align 1 ++__longjmp: ++ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ mov r12, r11 /* get the return value right */ ++ mustr r8 /* restore status register (lower half) */ ++ cp r12, 0 /* can't return zero */ ++ frs ++ moveq r12, 1 ++ mov pc,lr ++ .size __longjmp, . - __longjmp +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++#define __NR_mmap2 __NR_mmap ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,86 @@ ++/* Low-level functions for atomic operations. AVR32 version. ++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _ATOMICITY_H ++#define _ATOMICITY_H 1 ++ ++#include ++ ++static inline int ++__attribute__((unused)) ++exchange_and_add (volatile uint32_t *mem, int val) ++{ ++ int tmp, result; ++ ++ __asm__ __volatile__( ++ "/* Inline exchange and add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " add %1, %0, %4\n" ++ " stcond %2, %1\n" ++ " brne 1b" ++ : "=&r"(result), "=&r"(tmp), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++static inline void ++__attribute__((unused)) ++atomic_add (volatile uin32_t *mem, int val) ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline atomic add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " add %0, %3\n" ++ " stcond %2, %0\n" ++ " brne 1b" ++ : "=&r"(result), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++} ++ ++static inline int ++__attribute__((unused)) ++compare_and_swap(volatile long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* atomicity.h */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* Macros to swap the order of bytes in integer values. ++ Copyright (C) 2005 Atmel Norway. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H ++# error "Never use directly; include instead." ++#endif ++ ++#ifndef _BITS_BYTESWAP_H ++#define _BITS_BYTESWAP_H 1 ++ ++/* Swap bytes in 16 bit value. */ ++#if defined __GNUC__ ++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) ++#else ++/* This is better than nothing. */ ++static __inline unsigned short int ++__bswap_16 (unsigned short int __bsx) ++{ ++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); ++} ++#endif ++ ++/* Swap bytes in 32 bit value. */ ++#if defined __GNUC__ ++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) ++#else ++static __inline unsigned int ++__bswap_32 (unsigned int __bsx) ++{ ++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | ++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); ++} ++#endif ++ ++#if defined __GNUC__ ++/* Swap bytes in 64 bit value. */ ++# define __bswap_constant_64(x) \ ++ ((((x) & 0xff00000000000000ull) >> 56) \ ++ | (((x) & 0x00ff000000000000ull) >> 40) \ ++ | (((x) & 0x0000ff0000000000ull) >> 24) \ ++ | (((x) & 0x000000ff00000000ull) >> 8) \ ++ | (((x) & 0x00000000ff000000ull) << 8) \ ++ | (((x) & 0x0000000000ff0000ull) << 24) \ ++ | (((x) & 0x000000000000ff00ull) << 40) \ ++ | (((x) & 0x00000000000000ffull) << 56)) ++ ++# define __bswap_64(x) \ ++ (__extension__ \ ++ ({ \ ++ union { \ ++ __extension__ unsigned long long int __ll; \ ++ unsigned int __l[2]; \ ++ } __w, __r; \ ++ if (__builtin_constant_p(x)) \ ++ __r.__ll = __bswap_constant_64(x); \ ++ else { \ ++ __w.__ll = (x); \ ++ __r.__l[0] = __bswap_32(__w.__l[1]); \ ++ __r.__l[1] = __bswap_32(__w.__l[0]); \ ++ } \ ++ __r.__ll; \ ++ })) ++#endif ++ ++#endif /* _BITS_BYTESWAP_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,7 @@ ++/* AVR32 is big-endian */ ++ ++#ifndef _ENDIAN_H ++# error "Never use directly; include instead." ++#endif ++ ++#define __BYTE_ORDER __BIG_ENDIAN +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,167 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * This file is part of the Linux kernel ++ */ ++#ifndef _FCNTL_H ++# error "Never use directly; include instead." ++#endif ++ ++#include ++ ++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files ++ located on an ext2 file system */ ++#define O_ACCMODE 0003 ++#define O_RDONLY 00 ++#define O_WRONLY 01 ++#define O_RDWR 02 ++#define O_CREAT 0100 /* not fcntl */ ++#define O_EXCL 0200 /* not fcntl */ ++#define O_NOCTTY 0400 /* not fcntl */ ++#define O_TRUNC 01000 /* not fcntl */ ++#define O_APPEND 02000 ++#define O_NONBLOCK 04000 ++#define O_NDELAY O_NONBLOCK ++#define O_SYNC 010000 ++#define O_ASYNC 020000 ++ ++#ifdef __USE_GNU ++# define O_DIRECTORY 040000 /* must be a directory */ ++# define O_NOFOLLOW 0100000 /* don't follow links */ ++# define O_DIRECT 0200000 /* direct disk access */ ++#endif ++ ++#ifdef __USE_LARGEFILE64 ++# define O_LARGEFILE 0400000 ++#endif ++ ++/* For now Linux has synchronisity options for data and read operations. ++ We define the symbols here but let them do the same as O_SYNC since ++ this is a superset. */ ++#if defined __USE_POSIX199309 || defined __USE_UNIX98 ++# define O_DSYNC O_SYNC /* Synchronize data. */ ++# define O_RSYNC O_SYNC /* Synchronize read operations. */ ++#endif ++ ++#define F_DUPFD 0 /* dup */ ++#define F_GETFD 1 /* get close_on_exec */ ++#define F_SETFD 2 /* set/clear close_on_exec */ ++#define F_GETFL 3 /* get file->f_flags */ ++#define F_SETFL 4 /* set file->f_flags */ ++ ++#ifndef __USE_FILE_OFFSET64 ++# define F_GETLK 5 ++# define F_SETLK 6 ++# define F_SETLKW 7 ++#else ++# define F_GETLK F_GETLK64 ++# define F_SETLK F_SETLK64 ++# define F_SETLKW F_SETLKW64 ++#endif ++#define F_GETLK64 12 /* using 'struct flock64' */ ++#define F_SETLK64 13 ++#define F_SETLKW64 14 ++ ++#if defined __USE_BSD || defined __USE_XOPEN2K ++# define F_SETOWN 8 /* for sockets. */ ++# define F_GETOWN 9 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETSIG 10 /* for sockets. */ ++# define F_GETSIG 11 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETLEASE 1024 /* Set a lease. */ ++# define F_GETLEASE 1025 /* Enquire what lease is active. */ ++# define F_NOTIFY 1026 /* Request notfications on a directory. */ ++#endif ++ ++/* for F_[GET|SET]FL */ ++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++/* for posix fcntl() and lockf() */ ++#define F_RDLCK 0 ++#define F_WRLCK 1 ++#define F_UNLCK 2 ++ ++/* for old implementation of bsd flock () */ ++#define F_EXLCK 4 /* or 3 */ ++#define F_SHLCK 8 /* or 4 */ ++ ++/* for leases */ ++#define F_INPROGRESS 16 ++ ++#ifdef __USE_BSD ++/* operations for bsd flock(), also used by the kernel implementation */ ++# define LOCK_SH 1 /* shared lock */ ++# define LOCK_EX 2 /* exclusive lock */ ++# define LOCK_NB 4 /* or'd with one of the above to prevent ++ blocking */ ++# define LOCK_UN 8 /* remove lock */ ++#endif ++ ++#ifdef __USE_GNU ++# define LOCK_MAND 32 /* This is a mandatory flock */ ++# define LOCK_READ 64 /* ... Which allows concurrent ++ read operations */ ++# define LOCK_WRITE 128 /* ... Which allows concurrent ++ write operations */ ++# define LOCK_RW 192 /* ... Which allows concurrent ++ read & write ops */ ++#endif ++ ++#ifdef __USE_GNU ++/* Types of directory notifications that may be requested with F_NOTIFY. */ ++# define DN_ACCESS 0x00000001 /* File accessed. */ ++# define DN_MODIFY 0x00000002 /* File modified. */ ++# define DN_CREATE 0x00000004 /* File created. */ ++# define DN_DELETE 0x00000008 /* File removed. */ ++# define DN_RENAME 0x00000010 /* File renamed. */ ++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ ++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ ++#endif ++ ++struct flock { ++ short l_type; ++ short l_whence; ++#ifndef __USE_FILE_OFFSET64 ++ __off_t l_start; ++ __off_t l_len; ++#else ++ __off64_t l_start; ++ __off64_t l_len; ++#endif ++ __pid_t l_pid; ++}; ++ ++#ifdef __USE_LARGEFILE64 ++struct flock64 { ++ short l_type; ++ short l_whence; ++ __off64_t l_start; ++ __off64_t l_len; ++ __pid_t l_pid; ++}; ++#endif ++ ++/* Define some more compatibility macros to be backward compatible with ++ * BSD systems which did not managed to hide these kernel macros. */ ++#ifdef __USE_BSD ++# define FAPPEND O_APPEND ++# define FFSYNC O_FSYNC ++# define FASYNC O_ASYNC ++# define FNONBLOCK O_NONBLOCK ++# define FNDELAY O_NDELAY ++#endif /* Use BSD. */ ++ ++/* Advise to `posix_fadvise'. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ ++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ ++#endif +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-05-05 09:28:32.000000000 +0200 +@@ -0,0 +1,63 @@ ++#ifndef _BITS_STAT_STRUCT_H ++#define _BITS_STAT_STRUCT_H ++ ++/* ++ * This file provides struct stat, taken from kernel 2.6.4 ++ * (include/asm-avr32/stat.h revision 1.1). ++ */ ++ ++struct kernel_stat { ++ unsigned long st_dev; ++ unsigned long st_ino; ++ unsigned short st_mode; ++ unsigned short st_nlink; ++ unsigned short st_uid; ++ unsigned short st_gid; ++ unsigned long st_rdev; ++ unsigned long st_size; ++ unsigned long st_blksize; ++ unsigned long st_blocks; ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++#define STAT_HAVE_NSEC 1 ++ ++struct kernel_stat64 { ++ unsigned long long st_dev; ++ ++ unsigned long long st_ino; ++ unsigned int st_mode; ++ unsigned int st_nlink; ++ ++ unsigned long st_uid; ++ unsigned long st_gid; ++ ++ unsigned long long st_rdev; ++ ++ long long st_size; ++ unsigned long __pad1; ++ unsigned long st_blksize; ++ ++ unsigned long long st_blocks; ++ ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++#endif /* _BITS_STAT_STRUCT_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,56 @@ ++/* Note that we use the exact same include guard #define names ++ * as asm/posix_types.h. This will avoid gratuitous conflicts ++ * with the posix_types.h kernel header, and will ensure that ++ * our private content, and not the kernel header, will win. ++ * -Erik ++ */ ++#ifndef __ASM_AVR32_POSIX_TYPES_H ++#define __ASM_AVR32_POSIX_TYPES_H ++ ++/* ++ * This file is generally used by user-level software, so you need to ++ * be a little careful about namespace pollution etc. Also, we cannot ++ * assume GCC is being used. ++ */ ++ ++typedef unsigned long __kernel_dev_t; ++typedef unsigned long __kernel_ino_t; ++typedef unsigned short __kernel_mode_t; ++typedef unsigned short __kernel_nlink_t; ++typedef long __kernel_off_t; ++typedef int __kernel_pid_t; ++typedef unsigned short __kernel_ipc_pid_t; ++typedef unsigned int __kernel_uid_t; ++typedef unsigned int __kernel_gid_t; ++typedef unsigned long __kernel_size_t; ++typedef int __kernel_ssize_t; ++typedef int __kernel_ptrdiff_t; ++typedef long __kernel_time_t; ++typedef long __kernel_suseconds_t; ++typedef long __kernel_clock_t; ++typedef int __kernel_timer_t; ++typedef int __kernel_clockid_t; ++typedef int __kernel_daddr_t; ++typedef char * __kernel_caddr_t; ++typedef unsigned short __kernel_uid16_t; ++typedef unsigned short __kernel_gid16_t; ++typedef unsigned int __kernel_uid32_t; ++typedef unsigned int __kernel_gid32_t; ++ ++typedef unsigned short __kernel_old_uid_t; ++typedef unsigned short __kernel_old_gid_t; ++typedef unsigned short __kernel_old_dev_t; ++ ++#ifdef __GNUC__ ++typedef long long __kernel_loff_t; ++#endif ++ ++typedef struct { ++#if defined(__USE_ALL) ++ int val[2]; ++#else ++ int __val[2]; ++#endif ++} __kernel_fsid_t; ++ ++#endif /* __ASM_AVR32_POSIX_TYPES_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,69 @@ ++/* Machine-dependent definitions for profiling support. AVR32 version. ++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define mcount_internal __mcount_internal ++ ++#define _MCOUNT_DECL(frompc, selfpc) \ ++static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc) ++ ++/* ++ * This mcount implementation expects to get called after the prologue ++ * has been run. It also expects that r7 contains a valid frame ++ * pointer. ++ * ++ * When profiling, the compiler should generate something like this at ++ * each function entry: ++ * ++ * pushm r0-r7,lr // lr mandatory, others optional ++ * mov r7, sp ++ * // rest of prologue goes here ++ * mcall pc[.LC1 - .] ++ * // rest of function goes here ++ * .LC1: ++ * .long mcount ++ * ++ * or for PIC: ++ * ++ * pushm r0-r7,lr ++ * mov r7, sp ++ * // rest of prologue goes here ++ * lddpc r0, .LC1 ++ * .L1: rsub r0, pc ++ * mcall r0[mcount@GOT] ++ * // rest of function goes here ++ * .LC1: ++ * .long .L1 - _GLOBAL_OFFSET_TABLE_ ++ * ++ * This way, when mcount() is called, r7 points to the calling ++ * function's return address. It is guaranteed that calling mcount ++ * will clobber no registers except LR, which is unavoidable. ++ */ ++#define MCOUNT asm( \ ++ " .align 4\n" \ ++ " .global _mcount\n" \ ++ " .type _mcount,@function\n" \ ++ "_mcount:\n" \ ++ " pushm r8-r12,lr\n" \ ++ " mov r11, lr\n" \ ++ " ld.w r12, r7[0]\n" \ ++ " rcall __mcount_internal\n" \ ++ " popm r8-r12,pc\n" \ ++ " .size _mcount, . - _mcount\n" \ ++ " .weak mcount\n" \ ++ " mcount = _mcount"); +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* Definitions for POSIX memory map interface. Linux/AVR32 version. ++ Copyright (C) 1997, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_MMAN_H ++# error "Never include this file directly. Use instead" ++#endif ++ ++/* The following definitions basically come from the kernel headers. ++ But the kernel header is not namespace clean. */ ++ ++ ++/* Protections are chosen from these bits, OR'd together. The ++ implementation does not necessarily support PROT_EXEC or PROT_WRITE ++ without PROT_READ. The only guarantees are that no writing will be ++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ ++ ++#define PROT_READ 0x1 /* Page can be read. */ ++#define PROT_WRITE 0x2 /* Page can be written. */ ++#define PROT_EXEC 0x4 /* Page can be executed. */ ++#define PROT_NONE 0x0 /* Page can not be accessed. */ ++ ++/* Sharing types (must choose one and only one of these). */ ++#define MAP_SHARED 0x01 /* Share changes. */ ++#define MAP_PRIVATE 0x02 /* Changes are private. */ ++#ifdef __USE_MISC ++# define MAP_TYPE 0x0f /* Mask for type of mapping. */ ++#endif ++ ++/* Other flags. */ ++#define MAP_FIXED 0x10 /* Interpret addr exactly. */ ++#ifdef __USE_MISC ++# define MAP_FILE 0 ++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ ++# define MAP_ANON MAP_ANONYMOUS ++#endif ++ ++/* These are Linux-specific. */ ++#ifdef __USE_MISC ++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ ++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ ++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ ++# define MAP_LOCKED 0x2000 /* Lock the mapping. */ ++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ ++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ ++# define MAP_NONBLOCK 0x10000 /* do not block on IO */ ++#endif ++ ++/* Flags to `msync'. */ ++#define MS_ASYNC 1 /* Sync memory asynchronously. */ ++#define MS_SYNC 4 /* Synchronous memory sync. */ ++#define MS_INVALIDATE 2 /* Invalidate the caches. */ ++ ++/* Flags for `mlockall'. */ ++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ ++#define MCL_FUTURE 2 /* Lock all additions to address ++ space. */ ++ ++/* Flags for `mremap'. */ ++#ifdef __USE_GNU ++# define MREMAP_MAYMOVE 1 ++#endif ++ ++/* Advise to `madvise'. */ ++#ifdef __USE_BSD ++# define MADV_NORMAL 0 /* No further special treatment. */ ++# define MADV_RANDOM 1 /* Expect random page references. */ ++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define MADV_WILLNEED 3 /* Will need these pages. */ ++# define MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif ++ ++/* The POSIX people had to invent similar names for the same things. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Low-level statistical profiling support function. Linux/AVR32 version. ++ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include ++ ++void ++profil_counter(int signo, siginfo_t *si, struct sigcontext *sc) ++{ ++ profil_count((void *)sc->pc); ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,21 @@ ++/* ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++#ifndef _SETJMP_H ++# error "Never include directly; use instead." ++#endif ++ ++#ifndef _ASM ++/* ++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are ++ * not saved. ++ */ ++typedef int __jmp_buf[11]; ++#endif ++ ++#define __JMP_BUF_SP 4 ++ ++/* Test if longjmp to JMPBUF would unwind the frame containing a local ++ variable at ADDRESS. */ ++#define _JMPBUF_UNWINDS(jmpbuf, address) \ ++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,143 @@ ++#ifndef _SYSCALL_H ++# error "Never use directly; include instead." ++#endif ++ ++/* ++ * This includes the `__NR_' syscall numbers taken from the ++ * Linux kernel header files. It also defines the traditional ++ * `SYS_' macros for older programs. ++ */ ++#include ++ ++#ifndef __set_errno ++# define __set_errno(val) (*__errno_location()) = (val) ++#endif ++#ifndef SYS_ify ++# define SYS_ify(syscall_name) (__NR_##syscall_name) ++#endif ++ ++#ifndef __ASSEMBLER__ ++ ++#undef _syscall0 ++#define _syscall0(type,name) \ ++ type name(void) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 0)); \ ++ } ++ ++#undef _syscall1 ++#define _syscall1(type,name,type1,arg1) \ ++ type name(type1 arg1) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ ++ } ++ ++#undef _syscall2 ++#define _syscall2(type,name,type1,arg1,type2,arg2) \ ++ type name(type1 arg1, type2 arg2) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ ++ } ++ ++#undef _syscall3 ++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ ++ type name(type1 arg1, type2 arg2, type3 arg3) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 3, arg1, \ ++ arg2, arg3)); \ ++ } ++ ++#undef _syscall4 ++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ ++ arg3, arg4)); \ ++ } ++ ++#undef _syscall5 ++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ ++ arg3, arg4, arg5)); \ ++ } ++ ++#undef _syscall6 ++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5,type6,arg6) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5, type6 arg6) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ ++ arg4, arg5, arg6)); \ ++ } ++ ++#undef unlikely ++#define unlikely(x) __builtin_expect((x), 0) ++ ++#undef INLINE_SYSCALL ++#define INLINE_SYSCALL(name, nr, args...) \ ++ ({ \ ++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ ++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ ++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ ++ _sys_result = (unsigned int) -1; \ ++ } \ ++ (int) _sys_result; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) do { } while(0) ++ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++ ({ \ ++ register int _a1 asm ("r12"); \ ++ register int _scno asm("r8") = SYS_ify(name); \ ++ LOAD_ARGS_##nr (args); \ ++ asm volatile ("scall /* syscall " #name " */" \ ++ : "=r" (_a1) \ ++ : "r"(_scno) ASM_ARGS_##nr \ ++ : "lr", "cc", "memory"); \ ++ _a1; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_ERROR_P ++#define INTERNAL_SYSCALL_ERROR_P(val, err) \ ++ ((unsigned int)(val) >= 0xfffff001U) ++ ++#undef INTERNAL_SYSCALL_ERRNO ++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) ++ ++#define LOAD_ARGS_0() do { } while(0) ++#define ASM_ARGS_0 ++#define LOAD_ARGS_1(a1) \ ++ _a1 = (int) (a1); \ ++ LOAD_ARGS_0() ++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) ++#define LOAD_ARGS_2(a1, a2) \ ++ register int _a2 asm("r11") = (int)(a2); \ ++ LOAD_ARGS_1(a1) ++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) ++#define LOAD_ARGS_3(a1, a2, a3) \ ++ register int _a3 asm("r10") = (int)(a3); \ ++ LOAD_ARGS_2(a1, a2) ++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) ++#define LOAD_ARGS_4(a1, a2, a3, a4) \ ++ register int _a4 asm("r9") = (int)(a4); \ ++ LOAD_ARGS_3(a1, a2, a3) ++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) ++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ ++ register int _a5 asm("r5") = (int)(a5); \ ++ LOAD_ARGS_4(a1, a2, a3, a4) ++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) ++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ ++ register int _a6 asm("r3") = (int)(a6); \ ++ LOAD_ARGS_5(a1, a2, a3, a4, a5) ++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) ++ ++#endif /* __ASSEMBLER__ */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1 @@ ++#define __WORDSIZE 32 +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++ ++void *__curbrk = 0; ++ ++int brk (void *addr) ++{ ++ void *newbrk; ++ ++ newbrk = INLINE_SYSCALL(brk, 1, addr); ++ ++ __curbrk = newbrk; ++ ++ if (newbrk < addr) { ++ __set_errno (ENOMEM); ++ return -1; ++ } ++ ++ return 0; ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-05-05 09:26:42.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 0) */ ++ .global _setjmp ++ .type _setjmp,"function" ++ .align 1 ++_setjmp: ++ mov r11, 0 ++ bral __sigsetjmp_internal ++ .size _setjmp, . - _setjmp +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-05-05 09:26:42.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 1) */ ++ .global setjmp ++ .type setjmp,"function" ++ .align 1 ++setjmp: ++ mov r11, 1 ++ bral __sigsetjmp_internal ++ .size setjmp, . - setjmp +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,37 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++ ++/* ++ * I don't know if we can be absolutely certain that the fn and arg ++ * parameters are preserved when returning as the child. If the ++ * compiler stores them in registers (r0-r7), they should be. ++ */ ++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) ++{ ++ register int (*_fn)(void *arg) = fn; ++ register void *_arg = arg; ++ int err; ++ ++ /* Sanity check the arguments */ ++ err = -EINVAL; ++ if (!fn) ++ goto syscall_error; ++ if (!child_stack) ++ goto syscall_error; ++ ++ err = INLINE_SYSCALL(clone, 2, flags, child_stack); ++ if (err < 0) ++ goto syscall_error; ++ else if (err != 0) ++ return err; ++ ++ _exit(_fn(_arg)); ++ ++syscall_error: ++ __set_errno (-err); ++ return -1; ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S 2006-05-05 09:28:23.000000000 +0200 +@@ -0,0 +1,93 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * When we enter _start, the stack looks like this: ++ * argc argument counter ++ * argv[0] pointer to program name ++ * argv[1..argc-1] pointers to program args ++ * NULL ++ * env[0..N] pointers to environment variables ++ * NULL ++ * ++ * r12 contains a function pointer to be registered with `atexit'. ++ * This is how the dynamic linker arranges to have DT_FINI functions ++ * called for shared libraries that have been loaded before this ++ * code runs. ++ * ++ * We're going to call the following function: ++ * __uClibc_main(int (*main)(int, char **, char **), int argc, ++ * char **argv, void (*app_init)(void), void (*app_fini)(void), ++ * void (*rtld_fini)(void), void *stack_end) ++ * ++ * So we need to set up things as follows: ++ * r12 = address of main ++ * r11 = argc ++ * r10 = &argv[0] ++ * r9 = address of _init ++ * r8 = address of _fini ++ * sp[0] = whatever we got passed in r12 ++ */ ++ ++#include ++ ++ .text ++ .global _start ++ .type _start, @function ++_start: ++ /* Clear the frame pointer and link register since this is the outermost frame. */ ++ mov r7, 0 ++ mov lr, 0 ++ ++ ld.w r11, sp++ /* argc */ ++ mov r10, sp /* &argv[0] */ ++ ++ st.w --sp, r10 /* stack_end */ ++ st.w --sp, r12 /* rtld_fini */ ++ ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++.L_RGOT: ++ rsub r6, pc ++ lda.w r9, _init ++ lda.w r8, _fini ++ lda.w r12, main ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ call __uClibc_main ++ ++ .align 2 ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++ lddpc r9, __init_addr /* app_init */ ++ lddpc r8, __fini_addr /* app_fini */ ++ lddpc r12, __main_addr /* main */ ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ lddpc pc, ___uClibc_main_addr ++ ++ .align 2 ++__init_addr: ++ .long _init ++__fini_addr: ++ .long _fini ++__main_addr: ++ .long main ++___uClibc_main_addr: ++ .long __uClibc_main ++#endif ++ .size _start, . - _start ++ ++ /* ++ * The LSB says we need this. ++ */ ++ .section ".note.ABI-tag", "a" ++ .align 4 ++ .long 2f - 1f /* namesz */ ++ .long 4f - 3f /* descsz */ ++ .long 1 /* type */ ++1: .asciz "GNU" /* name */ ++2: .align 4 ++3: .long 0 /* Linux executable */ ++ .long 2,6,0 /* Earliest compatible kernel */ ++4: .align 4 +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,17 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++_init: ++ /* Use a four-byte instruction to avoid NOPs */ ++ stm --sp, r0-r7,lr ++ .align 2 ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++_fini: ++ stm --sp, r0-r7,lr ++ .align 2 +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,14 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++ ldm sp++, r0-r7,pc ++ .size _init, . - _init ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++ ldm sp++, r0-r7,pc ++ .size _fini, . - _fini +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S 2006-05-05 09:28:28.000000000 +0200 +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#define _SETJMP_H ++#define _ASM ++#include ++ ++ .text ++ ++ .global __sigsetjmp ++ .type __sigsetjmp,"function" ++ ++ /* Create a global, hidden symbol for use by setjmp() and _setjmp(). ++ If it's not hidden, the linker will complain about a relative ++ jump to a dynamic symbol when building a shared library. ++ ++ Also, if a user overrides the __sigsetjmp function, he might not ++ expect the setjmp() and _setjmp() function to effectively be ++ overridden as well. */ ++ .global __sigsetjmp_internal ++ .hidden __sigsetjmp_internal ++ .type __sigsetjmp_internal,"function" ++ .align 1 ++__sigsetjmp: ++__sigsetjmp_internal: ++ mustr r8 ++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ ++ /* Make a tail call to __sigjmp_save; it takes the same args. */ ++#ifdef __PIC__ ++ mov r9, r6 ++ lddpc r6, .LG ++.L1: rsub r6, pc ++ ld.w r8, r6[__sigjmp_save@got] ++ mov r6, r9 ++ mov pc, r8 ++ ++ .align 2 ++.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_ ++#else ++ rjmp __sigjmp_save ++#endif ++ .size __sigsetjmp, . - __sigsetjmp +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++#define SA_RESTORER 0x04000000 ++extern void __default_rt_sa_restorer(void); ++ ++/* ++ * If act is not NULL, change the action for sig to *act. ++ * If oact is not NULL, put the old action for sig in *oact. ++ */ ++int __libc_sigaction(int signum, const struct sigaction *act, ++ struct sigaction *oldact) ++{ ++ struct kernel_sigaction kact, koact; ++ int result; ++ ++ if (act) { ++ kact.k_sa_handler = act->sa_handler; ++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); ++ kact.sa_flags = act->sa_flags; ++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) ++ kact.sa_restorer = act->sa_restorer; ++ else ++ kact.sa_restorer = __default_rt_sa_restorer; ++ kact.sa_flags |= SA_RESTORER; ++ } ++ ++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, ++ oldact ? __ptrvalue(&koact) : NULL, ++ _NSIG / 8); ++ ++ if (oldact && result >= 0) { ++ oldact->sa_handler = koact.k_sa_handler; ++ memcpy(&oldact->sa_mask, &koact.sa_mask, ++ sizeof(oldact->sa_mask)); ++ oldact->sa_flags = koact.sa_flags; ++ oldact->sa_restorer = koact.sa_restorer; ++ } ++ ++ return result; ++} ++ ++weak_alias(__libc_sigaction, sigaction) +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++ ++ .global __default_rt_sa_restorer ++ .type __default_rt_sa_restorer,"function" ++ .align 1 ++__default_rt_sa_restorer: ++ mov r8, __NR_rt_sigreturn ++ scall +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_ELF_H ++#define _SYS_ELF_H 1 ++ ++#warning "This header is obsolete; use instead." ++ ++#include ++ ++#endif /* sys/elf.h */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,48 @@ ++/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_IO_H ++ ++#define _SYS_IO_H 1 ++#include ++ ++__BEGIN_DECLS ++ ++/* If TURN_ON is TRUE, request for permission to do direct i/o on the ++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O ++ permission off for that range. This call requires root privileges. */ ++extern int ioperm (unsigned long int __from, unsigned long int __num, ++ int __turn_on) __THROW; ++ ++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, ++ permission to access any I/O port is granted. This call requires ++ root privileges. */ ++extern int iopl (int __level) __THROW; ++ ++/* The functions that actually perform reads and writes. */ ++extern unsigned char inb (unsigned long int port) __THROW; ++extern unsigned short int inw (unsigned long int port) __THROW; ++extern unsigned long int inl (unsigned long int port) __THROW; ++ ++extern void outb (unsigned char value, unsigned long int port) __THROW; ++extern void outw (unsigned short value, unsigned long int port) __THROW; ++extern void outl (unsigned long value, unsigned long int port) __THROW; ++ ++__END_DECLS ++ ++#endif /* _SYS_IO_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,123 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_PROCFS_H ++#define _SYS_PROCFS_H 1 ++ ++/* This is somewhat modelled after the file of the same name on SVR4 ++ systems. It provides a definition of the core file format for ELF ++ used on Linux. It doesn't have anything to do with the /proc file ++ system, even though Linux has one. ++ ++ Anyway, the whole purpose of this file is for GDB and GDB only. ++ Don't read too much into it. Don't use it for anything other than ++ GDB unless you know what you are doing. */ ++ ++#include ++#include ++#include ++#include ++ ++__BEGIN_DECLS ++ ++/* Type for a general-purpose register. */ ++typedef unsigned long elf_greg_t; ++ ++/* And the whole bunch of them. We could have used `struct ++ user_regs' directly in the typedef, but tradition says that ++ the register set is an array, which does have some peculiar ++ semantics, so leave it that way. */ ++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++/* Register set for the floating-point registers. */ ++typedef struct user_fpregs elf_fpregset_t; ++ ++/* Signal info. */ ++struct elf_siginfo ++ { ++ int si_signo; /* Signal number. */ ++ int si_code; /* Extra code. */ ++ int si_errno; /* Errno. */ ++ }; ++ ++/* Definitions to generate Intel SVR4-like core files. These mostly ++ have the same names as the SVR4 types with "elf_" tacked on the ++ front to prevent clashes with Linux definitions, and the typedef ++ forms have been avoided. This is mostly like the SVR4 structure, ++ but more Linuxy, with things that Linux does not support and which ++ GDB doesn't really use excluded. */ ++ ++struct elf_prstatus ++ { ++ struct elf_siginfo pr_info; /* Info associated with signal. */ ++ short int pr_cursig; /* Current signal. */ ++ unsigned long int pr_sigpend; /* Set of pending signals. */ ++ unsigned long int pr_sighold; /* Set of held signals. */ ++ __pid_t pr_pid; ++ __pid_t pr_ppid; ++ __pid_t pr_pgrp; ++ __pid_t pr_sid; ++ struct timeval pr_utime; /* User time. */ ++ struct timeval pr_stime; /* System time. */ ++ struct timeval pr_cutime; /* Cumulative user time. */ ++ struct timeval pr_cstime; /* Cumulative system time. */ ++ elf_gregset_t pr_reg; /* GP registers. */ ++ int pr_fpvalid; /* True if math copro being used. */ ++ }; ++ ++ ++#define ELF_PRARGSZ (80) /* Number of chars for args. */ ++ ++struct elf_prpsinfo ++ { ++ char pr_state; /* Numeric process state. */ ++ char pr_sname; /* Char for pr_state. */ ++ char pr_zomb; /* Zombie. */ ++ char pr_nice; /* Nice val. */ ++ unsigned long int pr_flag; /* Flags. */ ++ unsigned short int pr_uid; ++ unsigned short int pr_gid; ++ int pr_pid, pr_ppid, pr_pgrp, pr_sid; ++ /* Lots missing */ ++ char pr_fname[16]; /* Filename of executable. */ ++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ ++ }; ++ ++/* The rest of this file provides the types for emulation of the ++ Solaris interfaces that should be implemented by ++ users of libthread_db. */ ++ ++/* Addresses. */ ++typedef void *psaddr_t; ++ ++/* Register sets. Linux has different names. */ ++typedef elf_gregset_t prgregset_t; ++typedef elf_fpregset_t prfpregset_t; ++ ++/* We don't have any differences between processes and threads, ++ therefore have only one PID type. */ ++typedef __pid_t lwpid_t; ++ ++/* Process status and info. In the end we do provide typedefs for them. */ ++typedef struct elf_prstatus prstatus_t; ++typedef struct elf_prpsinfo prpsinfo_t; ++ ++__END_DECLS ++ ++#endif /* sys/procfs.h */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,94 @@ ++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Linux/AVR32 ABI compliant context switching support. */ ++ ++#ifndef _SYS_UCONTEXT_H ++#define _SYS_UCONTEXT_H 1 ++ ++#include ++#include ++#include ++#include ++ ++typedef int greg_t; ++ ++/* Number of general registers. */ ++#define NGREG 16 ++ ++/* Container for all general registers. */ ++typedef elf_gregset_t gregset_t; ++ ++/* Number of each register is the `gregset_t' array. */ ++enum ++{ ++ R0 = 0, ++#define R0 R0 ++ R1 = 1, ++#define R1 R1 ++ R2 = 2, ++#define R2 R2 ++ R3 = 3, ++#define R3 R3 ++ R4 = 4, ++#define R4 R4 ++ R5 = 5, ++#define R5 R5 ++ R6 = 6, ++#define R6 R6 ++ R7 = 7, ++#define R7 R7 ++ R8 = 8, ++#define R8 R8 ++ R9 = 9, ++#define R9 R9 ++ R10 = 10, ++#define R10 R10 ++ R11 = 11, ++#define R11 R11 ++ R12 = 12, ++#define R12 R12 ++ R13 = 13, ++#define R13 R13 ++ R14 = 14, ++#define R14 R14 ++ R15 = 15 ++#define R15 R15 ++}; ++ ++/* Structure to describe FPU registers. */ ++typedef elf_fpregset_t fpregset_t; ++ ++/* Context to describe whole processor state. */ ++typedef struct ++ { ++ gregset_t gregs; ++ fpregset_t fpregs; ++ } mcontext_t; ++ ++/* Userlevel context. */ ++typedef struct ucontext ++{ ++ unsigned long uc_flags; ++ struct ucontext *uc_link; ++ stack_t uc_stack; ++ struct sigcontext uc_mcontext; ++ sigset_t uc_sigmask; /* mask last for extensibility */ ++} ucontext_t; ++ ++#endif /* sys/ucontext.h */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,46 @@ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H ++ ++struct user_fpregs ++{ ++ ++}; ++ ++struct user_regs ++{ ++ unsigned long sr; ++ unsigned long pc; ++ unsigned long lr; ++ unsigned long sp; ++ unsigned long r12; ++ unsigned long r11; ++ unsigned long r10; ++ unsigned long r9; ++ unsigned long r8; ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++ unsigned long r12_orig; ++}; ++ ++struct user ++{ ++ struct user_regs regs; /* general registers */ ++ size_t u_tsize; /* text size (pages) */ ++ size_t u_dsize; /* data size (pages) */ ++ size_t u_ssize; /* stack size (pages) */ ++ unsigned long start_code; /* text starting address */ ++ unsigned long start_data; /* data starting address */ ++ unsigned long start_stack; /* stack starting address */ ++ long int signal; /* signal causing core dump */ ++ struct user_regs * u_ar0; /* help gdb find registers */ ++ unsigned long magic; /* identifies a core file */ ++ char u_comm[32]; /* user command name */ ++}; ++ ++#endif /* _SYS_USER_H */ +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,81 @@ ++/* ++ * syscall for AVR32/uClibc ++ * ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU Library 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 Library General Public License ++ * for more details. ++ * ++ * You should have received a copy of the GNU Library General Public License ++ * along with this program; if not, write to the Free Software Foundation, ++ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++#include ++ ++ .text ++ ++ /* ++ * long int syscall(long int sysno, ...) ++ */ ++ .global syscall ++ .type syscall, @function ++ .align 2 ++syscall: ++ stm --sp, r3,r5,lr ++ sub lr, sp, -12 ++ mov r8, r12 ++ ldm lr, r3,r5,r9-r12 ++ scall ++ cp.w r12, -4095 ++ brlo .Ldone ++ ++#ifdef __PIC__ ++ lddpc r5, .Lgot ++.Lgotcalc: ++ rsub r5, pc ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall r5[__errno_location@got] ++ st.w r12[0], r3 ++# else ++ ld.w r3, r5[errno@got] ++ st.w r3[0], r12 ++# endif ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall .Lerrno_location ++ st.w r12[0], r3 ++# else ++ lddpc r3, .Lerrno ++ st.w r3[0], r12 ++# endif ++#endif ++ mov r12, -1 ++ ++.Ldone: ++ ldm sp++, r3,r5,pc ++ ++ .align 2 ++#ifdef __PIC__ ++.Lgot: ++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++.Lerrno_location: ++ .long __errno_location ++# else ++.Lerrno: ++ .long errno ++# endif ++#endif ++ ++ ++ .size syscall, . - syscall +Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S 2006-04-19 12:48:33.000000000 +0200 +@@ -0,0 +1,55 @@ ++ /* ++ * vfork for uClibc ++ * ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++ /* ++ * Clone the process without copying the address space. The ++ * calling process is suspended until the child either exits ++ * or calls execve. ++ * ++ * This all means that we cannot rely on the stack to store ++ * away registers, since they will be overwritten by the child ++ * as soon as it makes another function call (e.g. execve()). ++ * Fortunately, the Linux kernel preserves LR across system calls. ++ */ ++#include ++#include ++ ++ .global __vfork ++ .type __vfork,@function ++ .align 1 ++__vfork: ++ mov r8, __NR_vfork ++ scall ++ cp.w r12, -4096 ++ retls r12 ++ ++ /* vfork failed, so we may use the stack freely */ ++ pushm r4-r7,lr ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++ rsub r4, r12, 0 ++.L_RGOT: ++ rsub r6, pc ++ mcall r6[__errno_location@got] ++#else ++ rsub r4, r12, 0 ++ mcall .L__errno_location ++#endif ++ st.w r12[0], r4 ++ popm r4-r7,pc,r12=-1 ++ ++ .align 2 ++#ifdef __PIC__ ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++.L__errno_location: ++ .long __errno_location ++#endif ++ .size __vfork, . - __vfork ++ ++ .weak vfork ++ vfork = __vfork +Index: uClibc-0.9.28/Rules.mak +=================================================================== +--- uClibc-0.9.28.orig/Rules.mak 2006-05-05 09:26:01.000000000 +0200 ++++ uClibc-0.9.28/Rules.mak 2006-05-05 09:27:17.000000000 +0200 +@@ -231,6 +231,10 @@ ifeq ($(strip $(TARGET_ARCH)),frv) + UCLIBC_LDSO=ld.so.1 + endif + ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++endif ++ + # Keep the check_gcc from being needlessly executed + ifndef PIEFLAG + ifneq ($(UCLIBC_BUILD_PIE),y) diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch new file mode 100644 index 0000000000..991e3442c7 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch @@ -0,0 +1,40 @@ +From nobody Mon Sep 17 00:00:00 2001 +Subject: [PATCH] Make linkrelax configurable +From: HĂĄvard Skinnemoen +Date: 1133951618 +0100 + +Add a linkrelax option to the configure system which will give +appropriate options to the compiler, assembler and linker to enable +link-time optimizations. + +--- + + Rules.mak | 2 ++ + extra/Configs/Config.avr32 | 4 ++++ + 2 files changed, 6 insertions(+) + +Index: uClibc-0.9.28/Rules.mak +=================================================================== +--- uClibc-0.9.28.orig/Rules.mak 2006-02-08 17:58:53.000000000 +0100 ++++ uClibc-0.9.28/Rules.mak 2006-02-08 17:59:07.000000000 +0100 +@@ -233,6 +233,8 @@ endif + + ifeq ($(strip $(TARGET_ARCH)),avr32) + CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++ CPU_CFLAGS-$(LINKRELAX) += -masm-addr-pseudos -Wa,--pic,--linkrelax ++ CPU_LDFLAGS-$(LINKRELAX) += --relax + endif + + # Keep the check_gcc from being needlessly executed +Index: uClibc-0.9.28/extra/Configs/Config.avr32 +=================================================================== +--- uClibc-0.9.28.orig/extra/Configs/Config.avr32 2006-02-08 17:58:53.000000000 +0100 ++++ uClibc-0.9.28/extra/Configs/Config.avr32 2006-02-08 17:59:07.000000000 +0100 +@@ -36,3 +36,7 @@ config CONFIG_AP7000 + bool "AP7000" + + endchoice ++ ++config LINKRELAX ++ bool "Enable linker optimizations" ++ default n diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch new file mode 100644 index 0000000000..8518ccf664 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch @@ -0,0 +1,1139 @@ +Subject: [PATCH] AVR32-optimized string operations + +Add hand-optimized AVR32-specific string operations. Some of them +need a bit more testing, though. + +--- + + libc/string/avr32/Makefile | 40 +++++++++++ + libc/string/avr32/bcopy.S | 15 ++++ + libc/string/avr32/bzero.S | 12 +++ + libc/string/avr32/memchr.S | 62 +++++++++++++++++ + libc/string/avr32/memcmp.S | 50 +++++++++++++ + libc/string/avr32/memcpy.S | 110 ++++++++++++++++++++++++++++++ + libc/string/avr32/memmove.S | 114 +++++++++++++++++++++++++++++++ + libc/string/avr32/memset.S | 60 ++++++++++++++++ + libc/string/avr32/strcat.S | 95 ++++++++++++++++++++++++++ + libc/string/avr32/strcmp.S | 80 ++++++++++++++++++++++ + libc/string/avr32/strcpy.S | 63 +++++++++++++++++ + libc/string/avr32/stringtest.c | 144 ++++++++++++++++++++++++++++++++++++++++ + libc/string/avr32/strlen.S | 52 ++++++++++++++ + libc/string/avr32/strncpy.S | 77 +++++++++++++++++++++ + libc/string/avr32/test_memcpy.c | 66 ++++++++++++++++++ + 15 files changed, 1040 insertions(+) + +Index: uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,15 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bcopy ++ .type bcopy, @function ++ .align 1 ++bcopy: ++ /* Swap the first two arguments */ ++ eor r11, r12 ++ eor r12, r11 ++ eor r11, r12 ++ rjmp __memmove ++ .size bcopy, . - bcopy +Index: uClibc-0.9.28-avr32/libc/string/avr32/bzero.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/bzero.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bzero ++ .type bzero, @function ++ .align 1 ++bzero: ++ mov r10, r11 ++ mov r11, 0 ++ rjmp __memset +Index: uClibc-0.9.28-avr32/libc/string/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,40 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../ ++include $(TOPDIR)Rules.mak ++ ++SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S ++SSRC += memset.S strcmp.S strlen.S ++# memchr.S, strcat.S, strcpy.S, strncpy.S is broken ++SOBJS := $(patsubst %.S,%.o, $(SSRC)) ++OBJS := $(SOBJS) ++ ++OBJ_LIST:= ../../obj.string.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) ++ echo $(addprefix string/$(TARGET_ARCH)/, $(OBJS)) > $@ ++ ++$(SOBJS): %.o: %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $@ ++ ++clean: ++ $(RM) *.[oa] *~ core +Index: uClibc-0.9.28-avr32/libc/string/avr32/memchr.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memchr.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++#define chr r11 ++#define len r10 ++ ++ .text ++ .global memchr ++ .type memchr, @function ++memchr: ++ or chr, chr, chr << 8 ++ or chr, chr, chr << 16 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: sub len, 4 ++ brlt 2f ++ ld.w r8, str++ ++ psub.b r9, r8, r11 ++ tnbz r9 ++ brne 1b ++ ++ sub str, 4 ++ bfextu r9, r8, 24, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ bfextu r9, r8, 16, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ bfextu r9, r8, 8, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ retal str ++ ++2: sub len, -4 ++ reteq 0 ++ ++3: ld.ub r8, str++ ++ cp.w r8, 0 ++ reteq str ++ sub len, 1 ++ brne 3b ++ ++ retal 0 ++ ++.Lunaligned_str: ++1: sub len, 1 ++ retlt 0 ++ ld.ub r8, str++ ++ cp.b r8, r11 ++ reteq str ++ sub r9, 1 ++ brge 1b ++ ++ rjmp .Laligned_search +Index: uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S 2006-10-20 10:42:09.000000000 +0200 +@@ -0,0 +1,50 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global memcmp ++ .type memcmp, @function ++ .align 1 ++memcmp: ++ sub len, 4 ++ brlt .Lless_than_4 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne .Lfound_word ++ sub len, 4 ++ brge 1b ++ ++.Lless_than_4: ++ sub len, -4 ++ reteq 0 ++ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ sub len, 1 ++ brgt 1b ++ ++ retal 0 ++ ++.Lfound_word: ++ psub.b r9, r8, r9 ++ bfextu r8, r9, 24, 8 ++ retne r8 ++ bfextu r8, r9, 16, 8 ++ retne r8 ++ bfextu r8, r9, 8, 8 ++ retne r8 ++ retal r9 ++ ++ .size memcmp, . - memcmp ++ ++ .weak bcmp ++ bcmp = memcmp +Index: uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++/* Don't use r12 as dst since we must return it unmodified */ ++#define dst r9 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memcpy ++ .type memcpy, @function ++ ++ .global __memcpy ++ .hidden __memcpy ++ .type __memcpy, @function ++memcpy: ++__memcpy: ++ pref src[0] ++ mov dst, r12 ++ ++ /* If we have less than 32 bytes, don't do anything fancy */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, src++ ++ st.b dst++, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, dst ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ ldm src, r0-r7 ++ sub src, -32 ++ stm dst, r0-r7 ++ sub dst, -32 ++ sub len, 32 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ ldm src, r0-r3 ++ sub src, -16 ++ sub len, 16 ++ stm dst, r0-r3 ++ sub dst, -16 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ neg len ++ add pc, pc, len << 2 ++ .rept 15 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ rsub r8, r8, 32 ++ sub len, r8 ++1: ld.ub r0, src++ ++ st.b dst++, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[0] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, src++ ++ st.w dst++, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ .size memcpy, . - memcpy +Index: uClibc-0.9.28-avr32/libc/string/avr32/memmove.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memmove.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,114 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r12 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memmove ++ .type memmove, @function ++ ++ .global __memmove ++ .hidden __memmove ++ .type __memmove, @function ++memmove: ++__memmove: ++ cp.w src, dst ++ brge __memcpy ++ ++ add dst, len ++ add src, len ++ pref src[-1] ++ ++ /* ++ * The rest is basically the same as in memcpy.S except that ++ * the direction is reversed. ++ */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, --src ++ st.b --dst, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, r12 ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ sub src, 32 ++ ldm src, r0-r7 ++ sub dst, 32 ++ sub len, 32 ++ stm dst, r0-r7 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ sub src, 16 ++ ldm src, r0-r3 ++ sub dst, 16 ++ sub len, 16 ++ stm dst, r0-r3 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ sub len, -16 ++ breq 2f ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub len, 1 ++ brne 1b ++ ++2: popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ sub len, r8 ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[-4] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, --src ++ st.w --dst, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, --src ++ st.b --dst, r0 ++ .endr ++ ++ popm r0-r7, pc +Index: uClibc-0.9.28-avr32/libc/string/avr32/memset.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memset.S 2006-10-20 10:42:15.000000000 +0200 +@@ -0,0 +1,60 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s r12 ++#define c r11 ++#define n r10 ++ ++ .text ++ .global memset ++ .type memset, @function ++ ++ .global __memset ++ .hidden __memset ++ .type __memset, @function ++ ++ .align 1 ++memset: ++__memset: ++ cp.w n, 32 ++ mov r9, s ++ brge .Llarge_memset ++ ++ sub n, 1 ++ retlt s ++1: st.b s++, c ++ sub n, 1 ++ brge 1b ++ ++ retal r9 ++ ++.Llarge_memset: ++ mov r8, r11 ++ mov r11, 3 ++ bfins r8, r8, 8, 8 ++ bfins r8, r8, 16, 16 ++ tst s, r11 ++ breq 2f ++ ++1: st.b s++, r8 ++ sub n, 1 ++ tst s, r11 ++ brne 1b ++ ++2: mov r11, r9 ++ mov r9, r8 ++ sub n, 8 ++ ++3: st.d s++, r8 ++ sub n, 8 ++ brge 3b ++ ++ /* If we are done, n == -8 and we'll skip all st.b insns below */ ++ neg n ++ lsl n, 1 ++ add pc, n ++ .rept 7 ++ st.b s++, r8 ++ .endr ++ retal r11 +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcat.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcat.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define s1 r9 ++#define s2 r11 ++ ++ .text ++ .global strcat ++ .type strcat, @function ++ .align 1 ++strcat: ++ mov s1, r12 ++ ++ /* Make sure s1 is word-aligned */ ++ mov r10, s1 ++ andl r10, 3, COH ++ breq 2f ++ ++ add pc, pc, r10 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 2f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 3f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 4f ++ ++ /* Find the end of the first string */ ++5: ld.w r8, s1++ ++ tnbz r8 ++ brne 5b ++ ++ sub s1, 4 ++ ++ bfextu r10, r8, 24, 8 ++ cp.w r10, 0 ++ breq 1f ++ sub s1, -1 ++ bfextu r10, r8, 16, 8 ++ cp.w r10, 0 ++ breq 2f ++ sub s1, -1 ++ bfextu r10, r8, 8, 8 ++ cp.w r10, 0 ++ breq 3f ++ sub s1, -1 ++ rjmp 4f ++ ++ /* Now, append s2 */ ++1: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++2: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++3: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++4: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++ ++ /* Copy one word at a time */ ++ ld.w r8, s2++ ++ tnbz r8 ++ breq 2f ++1: st.w r8, s2++ ++ ld.w r8, s2++ ++ tnbz r8 ++ brne 1b ++ ++ /* Copy the remaining bytes */ ++ bfextu r10, r8, 24, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 16, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 8, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ st.b s1++, r8 ++ retal r12 ++ .size strcat, . - strcat +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global strcmp ++ .type strcmp, @function ++ .align 1 ++strcmp: ++ mov r8, 3 ++ tst s1, r8 ++ brne .Lunaligned_s1 ++ tst s2, r8 ++ brne .Lunaligned_s2 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne 2f ++ tnbz r8 ++ brne 1b ++ retal 0 ++ ++2: bfextu r12, r8, 24, 8 ++ bfextu r11, r9, 24, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 16, 8 ++ bfextu r11, r9, 16, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 8, 8 ++ bfextu r11, r9, 8, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 0, 8 ++ bfextu r11, r9, 0, 8 ++ sub r12, r11 ++ retal r12 ++ ++.Lunaligned_s1: ++3: tst s1, r8 ++ breq 4f ++ ld.ub r10, s1++ ++ ld.ub r9, s2++ ++ sub r10, r9 ++ retne r10 ++ cp.w r9, 0 ++ brne 3b ++ retal r10 ++ ++4: tst s2, r8 ++ breq 1b ++ ++.Lunaligned_s2: ++ /* ++ * s1 and s2 can't both be aligned, and unaligned word loads ++ * can trigger spurious exceptions if we cross a page boundary. ++ * Do it the slow way... ++ */ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ cp.w r9, 0 ++ brne 1b ++ retal 0 ++ ++ .weak strcoll ++ strcoll = strcmp +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,63 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * To reduce the size, this one might simply call strncpy with len = -1. ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strcpy, @function ++strcpy: ++ mov dst, r12 ++ ++ pref src[0] ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ rjmp 1b ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ bfextu r10, r8, 24, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 16, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 8, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ st.b dst++, r8 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ rsub r8, r8, 4 ++ add pc, pc, r8 << 3 ++ nop ++ nop ++ ld.ub r10, src++ ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ ++ rjmp .Laligned_copy +Index: uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,144 @@ ++ ++#include ++#include ++#include ++#include ++ ++#define BUF_SIZE (8 * 1024) ++ ++static char *buf1; ++static char *buf1_ref; ++static char *buf2; ++ ++extern void *optimized_memcpy(void *dest, void *src, size_t len); ++extern void *optimized_memmove(void *dest, void *src, size_t len); ++extern char *optimized_strcpy(char *dest, char *src); ++extern char *optimized_strncpy(char *dest, char *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("%4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++static void test_memcpy(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ int i; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memcpy with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ for (i = 0; i < 8192; i++) ++ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ for ( i = 0; i < 8192; i++) ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++static void test_memmove(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memmove with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ memmove(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf2 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf2"); ++ return 1; ++ } ++ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1"); ++ return 1; ++ } ++ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1_ref == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1_ref"); ++ return 1; ++ } ++ printf("\n === MEMCPY ===\n\n"); ++ ++ test_memcpy(0, 0, BUF_SIZE - 32); ++ test_memcpy(0, 0, 1); ++ test_memcpy(0, 0, 31); ++ test_memcpy(0, 0, 32); ++ test_memcpy(0, 0, 127); ++ test_memcpy(0, 0, 128); ++ test_memcpy(4, 4, BUF_SIZE - 32 - 4); ++ test_memcpy(1, 1, BUF_SIZE - 32 - 1); ++ test_memcpy(1, 1, 126); ++ test_memcpy(0, 3, 128); ++ test_memcpy(1, 4, 128); ++ test_memcpy(0, 0, 0); ++ ++ printf("\n === MEMMOVE ===\n\n"); ++ ++ test_memmove(0, 0, BUF_SIZE - 32); ++ test_memmove(0, 0, 1); ++ test_memmove(0, 0, 31); ++ test_memmove(0, 0, 32); ++ test_memmove(0, 0, BUF_SIZE - 33); ++ test_memmove(0, 0, 128); ++ test_memmove(4, 4, BUF_SIZE - 32 - 4); ++ test_memmove(1, 1, BUF_SIZE - 32 - 1); ++ test_memmove(1, 1, BUF_SIZE - 130); ++ test_memmove(0, 3, BUF_SIZE - 128); ++ test_memmove(1, 4, BUF_SIZE - 128); ++ test_memmove(0, 0, 0); ++ ++ return 0; ++} +Index: uClibc-0.9.28-avr32/libc/string/avr32/strlen.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strlen.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,52 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++ ++ .text ++ .global strlen ++ .type strlen, @function ++strlen: ++ mov r11, r12 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: ld.w r8, str++ ++ tnbz r8 ++ brne 1b ++ ++ sub r12, r11 ++ bfextu r9, r8, 24, 8 ++ cp.w r9, 0 ++ subeq r12, 4 ++ reteq r12 ++ bfextu r9, r8, 16, 8 ++ cp.w r9, 0 ++ subeq r12, 3 ++ reteq r12 ++ bfextu r9, r8, 8, 8 ++ cp.w r9, 0 ++ subeq r12, 2 ++ reteq r12 ++ sub r12, 1 ++ retal r12 ++ ++.Lunaligned_str: ++ add pc, pc, r9 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ brne 1b ++ ++1: sub r12, 1 ++ sub r12, r11 ++ retal r12 +Index: uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,77 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strncpy, @function ++strncpy: ++ mov dst, r12 ++ ++ pref src[0] ++ mov dst, r12 ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++ sub r10, 4 ++ brlt 3f ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ sub r10, 4 ++ brne 1b ++ ++3: sub r10, -4 ++ reteq r12 ++ ++ /* This is safe as long as src is word-aligned and r10 > 0 */ ++ ld.w r8, src++ ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ bfextu r11, r8, 24, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ bfextu r11, r8, 16, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ bfextu r11, r8, 8, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ st.b dst++, r8 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ min r8, r8, r10 ++ sub r10, r8 ++ sub r8, 1 ++ retlt r12 ++1: ld.ub r10, src++ ++ st.b dst++, r10 ++ sub r8, 1 ++ brge 1b ++ ++ rjmp .Laligned_copy +Index: uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,66 @@ ++ ++#include ++#include ++ ++#define BUF_SIZE 32768 ++ ++static char buf1[BUF_SIZE] __attribute__((aligned(32))); ++static char buf1_ref[BUF_SIZE] __attribute__((aligned(32))); ++static char buf2[BUF_SIZE] __attribute__((aligned(32))); ++ ++extern void *new_memcpy(void *dest, void *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("% 4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++void test(int src_offset, int dst_offset, int len) ++{ ++ memset(buf1, 0x55, sizeof(buf1)); ++ memset(buf1_ref, 0x55, sizeof(buf1_ref)); ++ memset(buf2, 0xaa, sizeof(buf2)); ++ ++ printf("Testing with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ ++ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, sizeof(buf1)); ++ } ++} ++ ++int main(int argc, char *argv[]) ++{ ++ test(0, 0, BUF_SIZE); ++ test(0, 0, 1); ++ test(0, 0, 31); ++ test(0, 0, 32); ++ test(0, 0, 127); ++ test(0, 0, 128); ++ test(4, 4, BUF_SIZE - 4); ++ test(1, 1, BUF_SIZE - 1); ++ test(1, 1, 126); ++ test(0, 3, 128); ++ test(1, 4, 128); ++ ++ return 0; ++} diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch new file mode 100644 index 0000000000..3319f98de9 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch @@ -0,0 +1,24 @@ +Subject: [PATCH] Fix __libc_fcntl64 prototype in __syscall_fcntl.c + +__libc_fcntl64 is a varargs function and should be declared as such. +Otherwise, the gcc compiler for AVR32, and perhaps other architectures, +will use the wrong calling convention. + +--- + + libc/sysdeps/linux/common/__syscall_fcntl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c +=================================================================== +--- uClibc-0.9.28.orig/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-02-07 16:48:32.000000000 +0100 ++++ uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-02-07 17:19:09.000000000 +0100 +@@ -12,7 +12,7 @@ + #include + + #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 +-extern int __libc_fcntl64(int fd, int cmd, long arg); ++extern int __libc_fcntl64(int fd, int cmd, ...); + #endif + + #define __NR___syscall_fcntl __NR_fcntl diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch new file mode 100644 index 0000000000..aafdc8cd7f --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch @@ -0,0 +1,30 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: HĂĄvard Skinnemoen +Date: Fri Apr 7 17:10:32 2006 +0200 +Subject: [PATCH] Fix broken __libc_open declaration in open64.c + +__libc_open is a vararg function and should therefore be declared as +such. Fixes bug #4190. + +--- + + libc/sysdeps/linux/common/open64.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +70f2c81903327a8a346e370830932b80045ab04e +diff --git a/libc/sysdeps/linux/common/open64.c b/libc/sysdeps/linux/common/open64.c +index 543aa13..d9a27a7 100644 +--- a/libc/sysdeps/linux/common/open64.c ++++ b/libc/sysdeps/linux/common/open64.c +@@ -26,7 +26,7 @@ + #endif + + #ifdef __UCLIBC_HAS_LFS__ +-extern int __libc_open (__const char *file, int oflag, mode_t mode); ++extern int __libc_open (__const char *file, int oflag, ...); + + /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, + a third argument is the file protection. */ +-- +1.2.4 + diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch new file mode 100644 index 0000000000..d68576b9bd --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch @@ -0,0 +1,19 @@ +Subject: [PATCH] Fix getrusage argument type + +The first argument to getrusage is of type __rusage_who_t, not int. +This patch fixes that. +--- + + libc/sysdeps/linux/common/getrusage.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c +=================================================================== +--- uClibc-0.9.28.orig/libc/sysdeps/linux/common/getrusage.c 2006-02-07 17:18:22.000000000 +0100 ++++ uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c 2006-02-07 17:18:31.000000000 +0100 +@@ -10,4 +10,4 @@ + #include "syscalls.h" + #include + #include +-_syscall2(int, getrusage, int, who, struct rusage *, usage); ++_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage); diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch new file mode 100644 index 0000000000..dd61f174a7 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch @@ -0,0 +1,25 @@ +Subject: [PATCH] ldd: AVR32 support + +Add AVR32-specific definitions to ldd. + +--- + + utils/ldd.c | 5 +++++ + 1 file changed, 5 insertions(+) + +Index: uClibc-0.9.28/utils/ldd.c +=================================================================== +--- uClibc-0.9.28.orig/utils/ldd.c 2006-02-07 16:48:02.000000000 +0100 ++++ uClibc-0.9.28/utils/ldd.c 2006-02-07 17:13:00.000000000 +0100 +@@ -56,6 +56,11 @@ + #define ELFCLASSM ELFCLASS32 + #endif + ++#if defined(__avr32__) ++#define MATCH_MACHINE(x) (x == EM_AVR32) ++#define ELFCLASSM ELFCLASS32 ++#endif ++ + #if defined(__s390__) + #define MATCH_MACHINE(x) (x == EM_S390) + #define ELFCLASSM ELFCLASS32 diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch new file mode 100644 index 0000000000..cf0e677ffe --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch @@ -0,0 +1,24 @@ +Subject: [PATCH] ldso: Always inline _dl_memcpy() + +On some gcc versions, inline is merely a hint. AVR32 depends on this +function actually getting inlined, so we need to use __always_inline +instead of just inline. + +--- + + ldso/include/dl-string.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: uClibc-0.9.28/ldso/include/dl-string.h +=================================================================== +--- uClibc-0.9.28.orig/ldso/include/dl-string.h 2006-02-07 17:01:28.000000000 +0100 ++++ uClibc-0.9.28/ldso/include/dl-string.h 2006-02-07 17:03:02.000000000 +0100 +@@ -134,7 +134,7 @@ static inline char * _dl_strstr(const ch + } while (1); + } + +-static inline void * _dl_memcpy(void * dst, const void * src, size_t len) ++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) + { + register char *a = dst-1; + register const char *b = src-1; diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch new file mode 100644 index 0000000000..e6f5c42585 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch @@ -0,0 +1,107 @@ +Subject: [PATCH] ldso: Always inline system calls + +Some versions of gcc consider inline merely a hint. AVR32 depends on +the system calls actually being inlined, so we need to use +__always_inline instead of just inline. + +--- + + ldso/include/dl-syscall.h | 38 +++++++++++++++++++------------------- + 1 file changed, 19 insertions(+), 19 deletions(-) + +Index: uClibc-0.9.28/ldso/include/dl-syscall.h +=================================================================== +--- uClibc-0.9.28.orig/ldso/include/dl-syscall.h 2006-02-07 17:07:06.000000000 +0100 ++++ uClibc-0.9.28/ldso/include/dl-syscall.h 2006-02-07 17:08:47.000000000 +0100 +@@ -60,59 +60,59 @@ + dynamic linking at all, so we cannot return any error codes. + We just punt if there is an error. */ + #define __NR__dl_exit __NR_exit +-static inline _syscall1(void, _dl_exit, int, status); ++static __always_inline _syscall1(void, _dl_exit, int, status); + + #define __NR__dl_close __NR_close +-static inline _syscall1(int, _dl_close, int, fd); ++static __always_inline _syscall1(int, _dl_close, int, fd); + + #define __NR__dl_open __NR_open +-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); ++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); + + #define __NR__dl_write __NR_write +-static inline _syscall3(unsigned long, _dl_write, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_write, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_read __NR_read +-static inline _syscall3(unsigned long, _dl_read, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_read, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_mprotect __NR_mprotect +-static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); ++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); + + #define __NR__dl_stat __NR_stat +-static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); ++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); + + #define __NR__dl_munmap __NR_munmap +-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); ++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); + + #define __NR__dl_getuid __NR_getuid +-static inline _syscall0(uid_t, _dl_getuid); ++static __always_inline _syscall0(uid_t, _dl_getuid); + + #define __NR__dl_geteuid __NR_geteuid +-static inline _syscall0(uid_t, _dl_geteuid); ++static __always_inline _syscall0(uid_t, _dl_geteuid); + + #define __NR__dl_getgid __NR_getgid +-static inline _syscall0(gid_t, _dl_getgid); ++static __always_inline _syscall0(gid_t, _dl_getgid); + + #define __NR__dl_getegid __NR_getegid +-static inline _syscall0(gid_t, _dl_getegid); ++static __always_inline _syscall0(gid_t, _dl_getegid); + + #define __NR__dl_getpid __NR_getpid +-static inline _syscall0(gid_t, _dl_getpid); ++static __always_inline _syscall0(gid_t, _dl_getpid); + + #define __NR__dl_readlink __NR_readlink +-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); ++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); + + #ifdef __NR_mmap + #ifdef MMAP_HAS_6_ARGS + #define __NR__dl_mmap __NR_mmap +-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, ++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, + int, prot, int, flags, int, fd, off_t, offset); + #else + #define __NR__dl_mmap_real __NR_mmap +-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); ++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); + +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + unsigned long buffer[6]; +@@ -128,12 +128,12 @@ static inline void * _dl_mmap(void * add + #endif + #elif defined __NR_mmap2 + #define __NR___syscall_mmap2 __NR_mmap2 +-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, ++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, + size_t, len, int, prot, int, flags, int, fd, off_t, offset); + /*always 12, even on architectures where PAGE_SHIFT != 12 */ + #define MMAP2_PAGE_SHIFT 12 + #define MAP_FAILED ((void *) -1) +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch new file mode 100644 index 0000000000..ddeb84d069 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch @@ -0,0 +1,526 @@ +Subject: [PATCH] ldso: AVR32 support + +This implements the AVR32-specific parts of the dynamic linker. + +--- + + ldso/ldso/avr32/dl-debug.h | 45 +++++++++ + ldso/ldso/avr32/dl-startup.h | 110 ++++++++++++++++++++++++ + ldso/ldso/avr32/dl-syscalls.h | 5 + + ldso/ldso/avr32/dl-sysdep.h | 103 ++++++++++++++++++++++ + ldso/ldso/avr32/elfinterp.c | 191 ++++++++++++++++++++++++++++++++++++++++++ + ldso/ldso/avr32/resolve.S | 28 ++++++ + 6 files changed, 482 insertions(+) + +Index: uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h 2006-05-05 09:30:43.000000000 +0200 +@@ -0,0 +1,45 @@ ++/* ++ * AVR32 ELF shared libary loader support ++ * ++ * Copyright (C) 2005 Atmel Norway ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++static const char *_dl_reltypes_tab[] = { ++ "R_AVR32_NONE", ++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", ++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", ++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", ++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", ++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", ++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", ++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", ++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", ++ "R_AVR32_HI16", "R_AVR32_LO16", ++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", ++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", ++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", ++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", ++ "R_AVR32_ALIGN", ++}; +Index: uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h 2006-05-05 09:29:45.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Architecture specific code used by dl-startup.c ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++/* This is the library loader's main entry point. Let _dl_boot2 do its ++ * initializations and jump to the application's entry point ++ * afterwards. */ ++asm( " .text\n" ++ " .global _start\n" ++ " .type _start,@function\n" ++ "_start:\n" ++ /* All arguments are on the stack initially */ ++ " mov r12, sp\n" ++ " rcall _dl_start\n" ++ /* Returns user entry point in r12. Save it. */ ++ " mov r0, r12\n" ++ /* We're PIC, so get the Global Offset Table */ ++ " lddpc r6, .L_GOT\n" ++ ".L_RGOT:\n" ++ " rsub r6, pc\n" ++ /* Adjust argc and argv according to _dl_skip_args */ ++ " ld.w r1, r6[_dl_skip_args@got]\n" ++ " ld.w r1, r1[0]\n" ++ " ld.w r2, sp++\n" ++ " sub r2, r1\n" ++ " add sp, sp, r1 << 2\n" ++ " st.w --sp, r2\n" ++ /* Load the finalizer function */ ++ " ld.w r12, r6[_dl_fini@got]\n" ++ /* Jump to the user's entry point */ ++ " mov pc, r0\n\n" ++ ++ " .align 2\n" ++ ".L_GOT:" ++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" ++ " .size _start, . - _start\n" ++ " .previous\n"); ++ ++/* Get a pointer to the argv array. On many platforms this can be just ++ * the address if the first argument, on other platforms we need to ++ * do something a little more subtle here. */ ++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) ++ ++ ++/* We can't call functions before the GOT has been initialized */ ++#define NO_FUNCS_BEFORE_BOOTSTRAP ++ ++/* ++ * Relocate the GOT during dynamic loader bootstrap. This will add ++ * the load address to all entries in the GOT, which is necessary ++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the ++ * GOT. ++ */ ++static __always_inline ++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) ++{ ++ Elf32_Addr i, nr_got; ++ register Elf32_Addr *__r6 __asm__("r6"); ++ Elf32_Addr *got = __r6; ++ ++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); ++ for (i = 2; i < nr_got; i++) ++ got[i] += tpnt->loadaddr; ++} ++ ++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) ++ ++/* Handle relocation of the symbols in the dynamic loader. */ ++static __always_inline ++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, ++ unsigned long symbol_addr, ++ unsigned long load_addr, Elf32_Sym *symtab) ++{ ++ switch(ELF32_R_TYPE(rpnt->r_info)) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr; ++ break; ++ case R_AVR32_RELATIVE: ++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); ++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); ++ SEND_STDERR_DEBUG(" + "); ++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); ++ *reloc_addr = load_addr + rpnt->r_addend; ++ break; ++ default: ++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); ++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); ++ SEND_STDERR("REL, SYMBOL, LOAD: "); ++ SEND_ADDRESS_STDERR(reloc_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(symbol_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(load_addr, 1); ++ _dl_exit(1); ++ } ++} ++ ++/* Transfer control to the user's application, once the dynamic loader ++ * is done. This routine has to exit the current function, then call ++ * the _dl_elf_main function. ++ * ++ * Since our _dl_boot will simply call whatever is returned by ++ * _dl_boot2, we can just return the address we're supposed to ++ * call. */ ++#define START() return _dl_elf_main; +Index: uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h 2006-05-05 09:29:25.000000000 +0200 +@@ -0,0 +1,5 @@ ++/* We can't use the real errno in ldso, since it has not yet ++ * been dynamicly linked in yet. */ ++extern int _dl_errno; ++#define __set_errno(X) {(_dl_errno) = (X);} ++#include "sys/syscall.h" +Index: uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h 2006-05-05 09:30:43.000000000 +0200 +@@ -0,0 +1,103 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Various assembly language/system dependent hacks that are required ++ * so that we can minimize the amount of platform specific code. ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++ ++/* Define this if the system uses RELOCA. */ ++#define ELF_USES_RELOCA ++ ++#include ++ ++#define ARCH_NUM 1 ++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) ++ ++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ ++ do { \ ++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ ++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ ++ } while (0) ++ ++/* Initialization sequence for the application/library GOT. */ ++#define INIT_GOT(GOT_BASE,MODULE) \ ++ do { \ ++ unsigned long i, nr_got; \ ++ \ ++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ ++ GOT_BASE[1] = (unsigned long) MODULE; \ ++ \ ++ /* Add load address displacement to all GOT entries */ \ ++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ ++ for (i = 2; i < nr_got; i++) \ ++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ ++ } while (0) ++ ++#define do_rem(result, n, base) ((result) = (n) % (base)) ++ ++/* Here we define the magic numbers that this dynamic loader should accept */ ++#define MAGIC1 EM_AVR32 ++#undef MAGIC2 ++ ++/* Used for error messages */ ++#define ELF_TARGET "AVR32" ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); ++ ++/* 4096 bytes alignment */ ++#define PAGE_ALIGN 0xfffff000 ++#define ADDR_ALIGN 0xfff ++#define OFFS_ALIGN 0x7ffff000 ++ ++#define elf_machine_type_class(type) \ ++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) ++ ++/* AVR32 doesn't need any COPY relocs */ ++#define DL_NO_COPY_RELOCS ++ ++/* Return the link-time address of _DYNAMIC. Conveniently, this is the ++ first element of the GOT. This must be inlined in a function which ++ uses global data. */ ++static inline Elf32_Addr ++elf_machine_dynamic (void) ++{ ++ register Elf32_Addr *got asm ("r6"); ++ return *got; ++} ++ ++/* Return the run-time load address of the shared object. */ ++static inline Elf32_Addr ++elf_machine_load_address (void) ++{ ++ extern void __dl_start asm("_dl_start"); ++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; ++ Elf32_Addr pcrel_addr; ++ ++ asm (" lddpc %0, 2f\n" ++ "1: add %0, pc\n" ++ " rjmp 3f\n" ++ " .align 2\n" ++ "2: .long _dl_start - 1b\n" ++ "3:\n" ++ : "=r"(pcrel_addr) : : "cc"); ++ ++ return pcrel_addr - got_addr; ++} ++ ++/* ++ * Perform any RELATIVE relocations specified by DT_RELCOUNT. ++ * Currently, we don't use that tag, but we might in the future as ++ * this would reduce the startup time somewhat (although probably not by much). ++ */ ++static inline void ++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, ++ Elf32_Word relative_count) ++{ ++ Elf32_Rela *rpnt = (void *)rel_addr; ++ ++ do { ++ Elf32_Addr *reloc_addr; ++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); ++ *reloc_addr = load_off + rpnt->r_addend; ++ } while (--relative_count); ++} +Index: uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c 2006-05-05 09:30:43.000000000 +0200 +@@ -0,0 +1,191 @@ ++/* ++ * AVR32 ELF shared library loader suppport ++ * ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) ++{ ++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; ++ Elf32_Sym *sym; ++ unsigned long local_gotno; ++ unsigned long gotsym; ++ unsigned long new_addr; ++ char *strtab, *symname; ++ unsigned long *entry; ++ unsigned long sym_index = got_offset / 4; ++ ++#if 0 ++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; ++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; ++ ++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) ++ + sym_index; ++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); ++ symname = strtab + sym->st_name; ++ ++#if 0 ++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, ++ tpnt->symbol_scope, tpnt, ++ resolver); ++#endif ++ ++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); ++ *entry = new_addr; ++#endif ++ ++ return new_addr; ++} ++ ++static int ++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ unsigned long rel_addr, unsigned long rel_size, ++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) ++{ ++ Elf32_Sym *symtab; ++ Elf32_Rela *rpnt; ++ char *strtab; ++ int i; ++ ++ rpnt = (Elf32_Rela *)rel_addr; ++ rel_size /= sizeof(Elf32_Rela); ++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; ++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; ++ ++ for (i = 0; i < rel_size; i++, rpnt++) { ++ int symtab_index, res; ++ ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ ++ debug_sym(symtab, strtab, symtab_index); ++ debug_reloc(symtab, strtab, rpnt); ++ ++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); ++ ++ if (res == 0) ++ continue; ++ ++ _dl_dprintf(2, "\n%s: ", _dl_progname); ++ ++ if (symtab_index) ++ _dl_dprintf(2, "symbol '%s': ", ++ strtab + symtab[symtab_index].st_name); ++ ++ if (res < 0) { ++ int reloc_type = ELF32_R_TYPE(rpnt->r_info); ++#if defined(__SUPPORT_LD_DEBUG__) ++ _dl_dprintf(2, "can't handle reloc type %s\n", ++ _dl_reltypes(reloc_type)); ++#else ++ _dl_dprintf(2, "can't handle reloc type %x\n", ++ reloc_type); ++#endif ++ _dl_exit(-res); ++ } else { ++ _dl_dprintf(2, "can't resolve symbol\n"); ++ return res; ++ } ++ } ++ ++ return 0; ++} ++ ++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) ++{ ++ int reloc_type; ++ int symtab_index; ++ char *symname; ++ unsigned long *reloc_addr; ++ unsigned long symbol_addr; ++#if defined(__SUPPORT_LD_DEBUG__) ++ unsigned long old_val; ++#endif ++ ++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); ++ reloc_type = ELF32_R_TYPE(rpnt->r_info); ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ symbol_addr = 0; ++ symname = strtab + symtab[symtab_index].st_name; ++ ++ if (symtab_index) { ++ symbol_addr = (unsigned long) ++ _dl_find_hash(strtab + symtab[symtab_index].st_name, ++ tpnt->symbol_scope, tpnt, ++ elf_machine_type_class(reloc_type)); ++ ++ /* Allow undefined references to weak symbols */ ++ if (!symbol_addr && ++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { ++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", ++ _dl_progname, symname); ++ return 0; ++ } ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ old_val = *reloc_addr; ++#endif ++ switch (reloc_type) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr + rpnt->r_addend; ++ break; ++ case R_AVR32_RELATIVE: ++ *reloc_addr = (unsigned long)tpnt->loadaddr ++ + rpnt->r_addend; ++ break; ++ default: ++ return -1; ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ if (_dl_debug_reloc && _dl_debug_detail) ++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", ++ old_val, *reloc_addr); ++#endif ++ ++ return 0; ++} ++ ++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ /* TODO: Might want to support this in order to get faster ++ * startup times... */ ++} ++ ++int _dl_parse_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, ++ _dl_do_reloc); ++} +Index: uClibc-0.9.28/ldso/ldso/avr32/resolve.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/ldso/ldso/avr32/resolve.S 2006-05-05 09:29:25.000000000 +0200 +@@ -0,0 +1,28 @@ ++/* ++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as ++ * indicated in register r12 and jumps to the resolved address. ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ * ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define ip r5 ++ ++ .text ++ .global _dl_linux_resolve ++ .type _dl_linux_resolve,@function ++_dl_linux_resolve: ++ /* The PLT code pushed r8 for us. It contains the address of this ++ function's GOT entry, that is entry 0. ip contains the address ++ of the GOT entry of the function we wanted to call. */ ++ stm --sp, r9-r12, lr ++ mov r11, r8 ++ sub r12, ip, r8 ++ rcall _dl_linux_resolver ++ mov ip, r12 ++ popm r8-r12,lr ++ mov pc, ip ++ .size _dl_linux_resolve, . - _dl_linux_resolve diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch new file mode 100644 index 0000000000..222749f3c2 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch @@ -0,0 +1,23 @@ +Subject: [PATCH] ldso: AVR32 needs CONSTANT_STRING_GOT_FIXUP + +Add AVR32 to the list of architectures needing CONSTANT_STRING_GOT_FIXUP. + +--- + + ldso/include/dl-string.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Index: uClibc-0.9.28/ldso/include/dl-string.h +=================================================================== +--- uClibc-0.9.28.orig/ldso/include/dl-string.h 2006-02-07 16:58:58.000000000 +0100 ++++ uClibc-0.9.28/ldso/include/dl-string.h 2006-02-07 16:59:28.000000000 +0100 +@@ -271,7 +271,8 @@ static __always_inline char * _dl_simple + /* On some arches constant strings are referenced through the GOT. + * This requires that load_addr must already be defined... */ + #if defined(mc68000) || defined(__arm__) || defined(__mips__) \ +- || defined(__sh__) || defined(__powerpc__) ++ || defined(__sh__) || defined(__powerpc__) \ ++ || defined(__avr32__) + # define CONSTANT_STRING_GOT_FIXUP(X) \ + if ((X) < (const char *) load_addr) (X) += load_addr + # define NO_EARLY_SEND_STDERR diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch new file mode 100644 index 0000000000..0cdc2ccb32 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch @@ -0,0 +1,40 @@ +Subject: [PATCH] ldso: AVR32 startup hack + +AVR32 needs to do both PERFORM_BOOTSTRAP_GOT and a full relocation of +the GOT. I don't quite remember why, but I think it's because some GOT +entries just need the load address added to them, while the rest need +the full relocation code. + +This patch should be revisited to figure out whether we're processing +relocations against undefined symbols and whether that's something we +should be doing... + +--- + + ldso/ldso/dl-startup.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +Index: uClibc-0.9.28/ldso/ldso/dl-startup.c +=================================================================== +--- uClibc-0.9.28.orig/ldso/ldso/dl-startup.c 2006-02-07 16:49:27.000000000 +0100 ++++ uClibc-0.9.28/ldso/ldso/dl-startup.c 2006-02-07 17:12:09.000000000 +0100 +@@ -217,7 +217,9 @@ static void * __attribute_used__ _dl_sta + /* some arches (like MIPS) we have to tweak the GOT before relocations */ + PERFORM_BOOTSTRAP_GOT(tpnt); + +-#else ++#endif ++ ++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) + + /* OK, now do the relocations. We do not do a lazy binding here, so + that once we are done, we have considerably more flexibility. */ +@@ -259,7 +261,7 @@ static void * __attribute_used__ _dl_sta + rel_addr += relative_count * sizeof(ELF_RELOC);; + } + +- rpnt = (ELF_RELOC *) (rel_addr + load_addr); ++ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */); + for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { + reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); + symtab_index = ELF_R_SYM(rpnt->r_info); diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch new file mode 100644 index 0000000000..d2838ef197 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch @@ -0,0 +1,23 @@ +Subject: [PATCH] ldso: Define MAP_FAILED for _dl_mmap() + +When using mmap2() to emulate mmap(), _dl_mmap() uses MAP_FAILED to +indicate failure. MAP_FAILED is not defined anywhere, so this patch +defines it. + +--- + + ldso/include/dl-syscall.h | 1 + + 1 file changed, 1 insertion(+) + +Index: uClibc-0.9.28/ldso/include/dl-syscall.h +=================================================================== +--- uClibc-0.9.28.orig/ldso/include/dl-syscall.h 2006-02-07 16:49:27.000000000 +0100 ++++ uClibc-0.9.28/ldso/include/dl-syscall.h 2006-02-07 17:07:06.000000000 +0100 +@@ -132,6 +132,7 @@ static inline _syscall6(__ptr_t, __sysca + size_t, len, int, prot, int, flags, int, fd, off_t, offset); + /*always 12, even on architectures where PAGE_SHIFT != 12 */ + #define MMAP2_PAGE_SHIFT 12 ++#define MAP_FAILED ((void *) -1) + static inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { diff --git a/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch b/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch new file mode 100644 index 0000000000..a383a6e62d --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch @@ -0,0 +1,28 @@ +From 7b2f125425cf777e7937b533217588e27952b87d Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Mon, 7 Aug 2006 11:12:50 +0200 +Subject: [PATCH] Let optimized stringops override default ones + +The default, slow stringops must be archived _before_ the optimized +stringops if there is to be any point doing the optimizations in the +first place. +--- + libc/Makefile | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/libc/Makefile b/libc/Makefile +index 31e4bab..687eac5 100644 +--- a/libc/Makefile ++++ b/libc/Makefile +@@ -59,7 +59,7 @@ # will evaluate to no files :(. + $(AR) dN 2 $(LIBNAME) $$objs && \ + $(AR) dN 2 $(LIBNAME) $$objs + @for objfile in obj.signal \ +- obj.string.generic obj.string.$(TARGET_ARCH) obj.string \ ++ obj.string obj.string.generic obj.string.$(TARGET_ARCH) \ + obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \ + if [ -e $$objfile ] ; then \ + if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \ +-- +1.4.1.1 + diff --git a/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch b/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch new file mode 100644 index 0000000000..5277677ee5 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch @@ -0,0 +1,105 @@ +Subject: [PATCH] libpthread: AVR32 support + +Implement pt-machine.h for AVR32. +--- + + libpthread/linuxthreads/sysdeps/avr32/pt-machine.h | 92 +++++++++++++++++++++ + 1 file changed, 92 insertions(+) + +Index: uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-02-07 17:14:47.000000000 +0100 +@@ -0,0 +1,92 @@ ++/* Machine-dependent pthreads configuration and inline functions. ++ ++ Copyright (C) 2005 Atmel Norway ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If not, ++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#include ++ ++static inline int ++_test_and_set (int *p, int v) __THROW ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline test and set */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " tst %0, %3\n" ++ " breq 2f\n" ++ " stcond %1, %3\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=m"(*p) ++ : "m"(*p), "r"(v) ++ : "memory", "cc"); ++ ++ return result; ++} ++ ++#ifndef PT_EI ++# define PT_EI extern inline ++#endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ return _test_and_set(spinlock, 1); ++} ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME stack_pointer ++register char * stack_pointer __asm__ ("sp"); ++ ++/* Compare-and-swap for semaphores. */ ++ ++#define HAS_COMPARE_AND_SWAP ++PT_EI int ++__compare_and_swap(long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* pt-machine.h */ diff --git a/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch b/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch new file mode 100644 index 0000000000..9bfdc53cfc --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch @@ -0,0 +1,27 @@ +Subject: [PATCH] Don't include create_module() for AVR32 + +The create_module() system call is obsolete in Linux 2.6, so the +AVR32 kernel doesn't even have it. + +Come to think about it, this should be completely unnecessary as the +create_module function is only a stub when __NR_create_module is +undefined. +--- + + libc/sysdeps/linux/common/create_module.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Index: uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c +=================================================================== +--- uClibc-0.9.28.orig/libc/sysdeps/linux/common/create_module.c 2006-02-07 16:48:38.000000000 +0100 ++++ uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c 2006-02-07 17:17:14.000000000 +0100 +@@ -61,7 +61,8 @@ unsigned long create_module(const char * + { + return __create_module(name, size, 0, 0); + } +-#else ++/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */ ++#elif !defined(__avr32__) + /* Sparc, MIPS, etc don't mistake return values for errors. */ + _syscall2(unsigned long, create_module, const char *, name, size_t, size); + #endif diff --git a/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch b/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch new file mode 100644 index 0000000000..9f27f68f0a --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch @@ -0,0 +1,48 @@ +--- a/extra/scripts/fix_includes.sh 2005-08-18 00:49:41.000000000 +0200 ++++ b/extra/scripts/fix_includes.sh 2006-09-27 13:23:12.000000000 +0200 +@@ -78,36 +78,6 @@ if [ ! -d "$KERNEL_SOURCE" ]; then + exit 1; + fi; + +-if [ -f "$KERNEL_SOURCE/Makefile" ] ; then +-# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION +-eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile` +-else +-ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2` +-VERSION=`echo "$ver" | cut -d '.' -f 1` +-PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2` +-if echo "$ver" | grep -q '-' ; then +-SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1` +-EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"` +-else +-SUBLEVEL=`echo "$ver" | cut -d '.' -f 3` +-#EXTRAVERSION= +-fi +-fi +-if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ] +-then +- echo "Unable to determine version for kernel headers" +- echo -e "\tprovided in directory $KERNEL_SOURCE" +- exit 1 +-fi +- +-if [ "$MAKE_IS_SILENT" != "y" ]; then +-echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}" +-echo -e "\n" +-echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'" +-echo -e "\tprovided in directory $KERNEL_SOURCE" +-echo -e "\n" +-fi +- + # Create a symlink to include/asm + + rm -f include/asm* +@@ -172,7 +142,7 @@ fi; + + + # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory +-if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then ++if [ -d $KERNEL_SOURCE/include/asm-generic ] ; then + ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic + fi; + diff --git a/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch b/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch new file mode 100644 index 0000000000..ae6de2b102 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch @@ -0,0 +1,54 @@ +--- + libc/sysdeps/linux/avr32/bits/fcntl.h | 33 +++++++++++++++++---------------- + 1 file changed, 17 insertions(+), 16 deletions(-) + +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-11-23 17:38:30.000000000 +0100 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-11-23 17:52:15.000000000 +0100 +@@ -11,28 +11,29 @@ + + /* open/fcntl - O_SYNC is only implemented on blocks devices and on files + located on an ext2 file system */ +-#define O_ACCMODE 0003 +-#define O_RDONLY 00 +-#define O_WRONLY 01 +-#define O_RDWR 02 +-#define O_CREAT 0100 /* not fcntl */ +-#define O_EXCL 0200 /* not fcntl */ +-#define O_NOCTTY 0400 /* not fcntl */ +-#define O_TRUNC 01000 /* not fcntl */ +-#define O_APPEND 02000 +-#define O_NONBLOCK 04000 ++#define O_ACCMODE 00000003 ++#define O_RDONLY 00000000 ++#define O_WRONLY 00000001 ++#define O_RDWR 00000002 ++#define O_CREAT 00000100 /* not fcntl */ ++#define O_EXCL 00000200 /* not fcntl */ ++#define O_NOCTTY 00000400 /* not fcntl */ ++#define O_TRUNC 00001000 /* not fcntl */ ++#define O_APPEND 00002000 ++#define O_NONBLOCK 00004000 + #define O_NDELAY O_NONBLOCK +-#define O_SYNC 010000 +-#define O_ASYNC 020000 ++#define O_SYNC 00010000 ++#define O_ASYNC 00020000 + + #ifdef __USE_GNU +-# define O_DIRECTORY 040000 /* must be a directory */ +-# define O_NOFOLLOW 0100000 /* don't follow links */ +-# define O_DIRECT 0200000 /* direct disk access */ ++# define O_DIRECT 00040000 /* must be a directory */ ++# define O_DIRECTORY 00200000 /* direct disk access */ ++# define O_NOFOLLOW 00400000 /* don't follow links */ ++# define O_NOATIME 01000000 /* don't set atime */ + #endif + + #ifdef __USE_LARGEFILE64 +-# define O_LARGEFILE 0400000 ++# define O_LARGEFILE 00100000 + #endif + + /* For now Linux has synchronisity options for data and read operations. diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch new file mode 100644 index 0000000000..430b54c1c1 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch @@ -0,0 +1,4322 @@ +diff -Nur uClibc-0.9.28/extra/Configs/Config.avr32 uClibc-0.9.28-avr32-20060621/extra/Configs/Config.avr32 +--- uClibc-0.9.28/extra/Configs/Config.avr32 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/extra/Configs/Config.avr32 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,38 @@ ++# ++# For a description of the syntax of this configuration file, ++# see extra/config/Kconfig-language.txt ++# ++ ++config HAVE_ELF ++ bool ++ default y ++ ++config TARGET_ARCH ++ default "avr32" ++ ++config ARCH_CFLAGS ++ string ++ ++config ARCH_LDFLAGS ++ string ++ ++config LIBGCC_CFLAGS ++ string ++ ++config ARCH_SUPPORTS_BIG_ENDIAN ++ bool ++ default y ++ ++config UCLIBC_COMPLETELY_PIC ++ select FORCE_SHAREABLE_TEXT_SEGMENTS ++ bool ++ default y ++ ++choice ++ prompt "Target CPU Type" ++ default CONFIG_AP7000 ++ ++config CONFIG_AP7000 ++ bool "AP7000" ++ ++endchoice +diff -Nur uClibc-0.9.28/extra/Configs/Config.in uClibc-0.9.28-avr32-20060621/extra/Configs/Config.in +--- uClibc-0.9.28/extra/Configs/Config.in 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/extra/Configs/Config.in 2006-06-21 11:35:56.000000000 +0200 +@@ -16,6 +16,9 @@ + config TARGET_arm + bool "arm" + ++config TARGET_avr32 ++ bool "avr32" ++ + config TARGET_bfin + bool "bfin" + +@@ -83,6 +86,10 @@ + source "extra/Configs/Config.arm" + endif + ++if TARGET_avr32 ++source "extra/Configs/Config.avr32" ++endif ++ + if TARGET_bfin + source "extra/Configs/Config.bfin" + endif +diff -Nur uClibc-0.9.28/include/elf.h uClibc-0.9.28-avr32-20060621/include/elf.h +--- uClibc-0.9.28/include/elf.h 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/include/elf.h 2006-06-21 11:35:56.000000000 +0200 +@@ -261,6 +261,8 @@ + #define EM_NIOS32 0xfebb /* Altera Nios 32 */ + #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */ + ++#define EM_AVR32 0x18ad ++ + /* V850 backend magic number. Written in the absense of an ABI. */ + #define EM_CYGNUS_V850 0x9080 + +@@ -2687,6 +2689,55 @@ + /* Keep this the last entry. */ + #define R_V850_NUM 25 + ++/* Atmel AVR32 relocations. */ ++#define R_AVR32_NONE 0 ++#define R_AVR32_32 1 ++#define R_AVR32_16 2 ++#define R_AVR32_8 3 ++#define R_AVR32_32_PCREL 4 ++#define R_AVR32_16_PCREL 5 ++#define R_AVR32_8_PCREL 6 ++#define R_AVR32_DIFF32 7 ++#define R_AVR32_DIFF16 8 ++#define R_AVR32_DIFF8 9 ++#define R_AVR32_GOT32 10 ++#define R_AVR32_GOT16 11 ++#define R_AVR32_GOT8 12 ++#define R_AVR32_21S 13 ++#define R_AVR32_16U 14 ++#define R_AVR32_16S 15 ++#define R_AVR32_8S 16 ++#define R_AVR32_8S_EXT 17 ++#define R_AVR32_22H_PCREL 18 ++#define R_AVR32_18W_PCREL 19 ++#define R_AVR32_16B_PCREL 20 ++#define R_AVR32_16N_PCREL 21 ++#define R_AVR32_14UW_PCREL 22 ++#define R_AVR32_11H_PCREL 23 ++#define R_AVR32_10UW_PCREL 24 ++#define R_AVR32_9H_PCREL 25 ++#define R_AVR32_9UW_PCREL 26 ++#define R_AVR32_HI16 27 ++#define R_AVR32_LO16 28 ++#define R_AVR32_GOTPC 29 ++#define R_AVR32_GOTCALL 30 ++#define R_AVR32_LDA_GOT 31 ++#define R_AVR32_GOT21S 32 ++#define R_AVR32_GOT18SW 33 ++#define R_AVR32_GOT16S 34 ++#define R_AVR32_GOT7UW 35 ++#define R_AVR32_32_CPENT 36 ++#define R_AVR32_CPCALL 37 ++#define R_AVR32_16_CP 38 ++#define R_AVR32_9W_CP 39 ++#define R_AVR32_RELATIVE 40 ++#define R_AVR32_GLOB_DAT 41 ++#define R_AVR32_JMP_SLOT 42 ++#define R_AVR32_ALIGN 43 ++#define R_AVR32_NUM 44 ++ ++/* AVR32 dynamic tags */ ++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ + + #define R_H8_NONE 0 + #define R_H8_DIR32 1 +diff -Nur uClibc-0.9.28/ldso/include/dl-string.h uClibc-0.9.28-avr32-20060621/ldso/include/dl-string.h +--- uClibc-0.9.28/ldso/include/dl-string.h 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/ldso/include/dl-string.h 2006-06-21 11:35:57.000000000 +0200 +@@ -134,7 +134,7 @@ + } while (1); + } + +-static inline void * _dl_memcpy(void * dst, const void * src, size_t len) ++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) + { + register char *a = dst-1; + register const char *b = src-1; +@@ -271,7 +271,8 @@ + /* On some arches constant strings are referenced through the GOT. + * This requires that load_addr must already be defined... */ + #if defined(mc68000) || defined(__arm__) || defined(__mips__) \ +- || defined(__sh__) || defined(__powerpc__) ++ || defined(__sh__) || defined(__powerpc__) \ ++ || defined(__avr32__) + # define CONSTANT_STRING_GOT_FIXUP(X) \ + if ((X) < (const char *) load_addr) (X) += load_addr + # define NO_EARLY_SEND_STDERR +diff -Nur uClibc-0.9.28/ldso/include/dl-syscall.h uClibc-0.9.28-avr32-20060621/ldso/include/dl-syscall.h +--- uClibc-0.9.28/ldso/include/dl-syscall.h 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/ldso/include/dl-syscall.h 2006-06-21 11:35:57.000000000 +0200 +@@ -60,59 +60,59 @@ + dynamic linking at all, so we cannot return any error codes. + We just punt if there is an error. */ + #define __NR__dl_exit __NR_exit +-static inline _syscall1(void, _dl_exit, int, status); ++static __always_inline _syscall1(void, _dl_exit, int, status); + + #define __NR__dl_close __NR_close +-static inline _syscall1(int, _dl_close, int, fd); ++static __always_inline _syscall1(int, _dl_close, int, fd); + + #define __NR__dl_open __NR_open +-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); ++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); + + #define __NR__dl_write __NR_write +-static inline _syscall3(unsigned long, _dl_write, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_write, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_read __NR_read +-static inline _syscall3(unsigned long, _dl_read, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_read, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_mprotect __NR_mprotect +-static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); ++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); + + #define __NR__dl_stat __NR_stat +-static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); ++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); + + #define __NR__dl_munmap __NR_munmap +-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); ++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); + + #define __NR__dl_getuid __NR_getuid +-static inline _syscall0(uid_t, _dl_getuid); ++static __always_inline _syscall0(uid_t, _dl_getuid); + + #define __NR__dl_geteuid __NR_geteuid +-static inline _syscall0(uid_t, _dl_geteuid); ++static __always_inline _syscall0(uid_t, _dl_geteuid); + + #define __NR__dl_getgid __NR_getgid +-static inline _syscall0(gid_t, _dl_getgid); ++static __always_inline _syscall0(gid_t, _dl_getgid); + + #define __NR__dl_getegid __NR_getegid +-static inline _syscall0(gid_t, _dl_getegid); ++static __always_inline _syscall0(gid_t, _dl_getegid); + + #define __NR__dl_getpid __NR_getpid +-static inline _syscall0(gid_t, _dl_getpid); ++static __always_inline _syscall0(gid_t, _dl_getpid); + + #define __NR__dl_readlink __NR_readlink +-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); ++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); + + #ifdef __NR_mmap + #ifdef MMAP_HAS_6_ARGS + #define __NR__dl_mmap __NR_mmap +-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, ++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, + int, prot, int, flags, int, fd, off_t, offset); + #else + #define __NR__dl_mmap_real __NR_mmap +-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); ++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); + +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + unsigned long buffer[6]; +@@ -128,11 +128,12 @@ + #endif + #elif defined __NR_mmap2 + #define __NR___syscall_mmap2 __NR_mmap2 +-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, ++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, + size_t, len, int, prot, int, flags, int, fd, off_t, offset); + /*always 12, even on architectures where PAGE_SHIFT != 12 */ + #define MMAP2_PAGE_SHIFT 12 +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++#define MAP_FAILED ((void *) -1) ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-debug.h +--- uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-debug.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,45 @@ ++/* ++ * AVR32 ELF shared libary loader support ++ * ++ * Copyright (C) 2005 Atmel Norway ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++static const char *_dl_reltypes_tab[] = { ++ "R_AVR32_NONE", ++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", ++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", ++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", ++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", ++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", ++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", ++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", ++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", ++ "R_AVR32_HI16", "R_AVR32_LO16", ++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", ++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", ++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", ++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", ++ "R_AVR32_ALIGN", ++}; +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-startup.h +--- uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-startup.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Architecture specific code used by dl-startup.c ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++/* This is the library loader's main entry point. Let _dl_boot2 do its ++ * initializations and jump to the application's entry point ++ * afterwards. */ ++asm( " .text\n" ++ " .global _start\n" ++ " .type _start,@function\n" ++ "_start:\n" ++ /* All arguments are on the stack initially */ ++ " mov r12, sp\n" ++ " rcall _dl_start\n" ++ /* Returns user entry point in r12. Save it. */ ++ " mov r0, r12\n" ++ /* We're PIC, so get the Global Offset Table */ ++ " lddpc r6, .L_GOT\n" ++ ".L_RGOT:\n" ++ " rsub r6, pc\n" ++ /* Adjust argc and argv according to _dl_skip_args */ ++ " ld.w r1, r6[_dl_skip_args@got]\n" ++ " ld.w r1, r1[0]\n" ++ " ld.w r2, sp++\n" ++ " sub r2, r1\n" ++ " add sp, sp, r1 << 2\n" ++ " st.w --sp, r2\n" ++ /* Load the finalizer function */ ++ " ld.w r12, r6[_dl_fini@got]\n" ++ /* Jump to the user's entry point */ ++ " mov pc, r0\n\n" ++ ++ " .align 2\n" ++ ".L_GOT:" ++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" ++ " .size _start, . - _start\n" ++ " .previous\n"); ++ ++/* Get a pointer to the argv array. On many platforms this can be just ++ * the address if the first argument, on other platforms we need to ++ * do something a little more subtle here. */ ++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) ++ ++ ++/* We can't call functions before the GOT has been initialized */ ++#define NO_FUNCS_BEFORE_BOOTSTRAP ++ ++/* ++ * Relocate the GOT during dynamic loader bootstrap. This will add ++ * the load address to all entries in the GOT, which is necessary ++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the ++ * GOT. ++ */ ++static __always_inline ++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) ++{ ++ Elf32_Addr i, nr_got; ++ register Elf32_Addr *__r6 __asm__("r6"); ++ Elf32_Addr *got = __r6; ++ ++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); ++ for (i = 2; i < nr_got; i++) ++ got[i] += tpnt->loadaddr; ++} ++ ++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) ++ ++/* Handle relocation of the symbols in the dynamic loader. */ ++static __always_inline ++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, ++ unsigned long symbol_addr, ++ unsigned long load_addr, Elf32_Sym *symtab) ++{ ++ switch(ELF32_R_TYPE(rpnt->r_info)) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr; ++ break; ++ case R_AVR32_RELATIVE: ++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); ++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); ++ SEND_STDERR_DEBUG(" + "); ++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); ++ *reloc_addr = load_addr + rpnt->r_addend; ++ break; ++ default: ++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); ++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); ++ SEND_STDERR("REL, SYMBOL, LOAD: "); ++ SEND_ADDRESS_STDERR(reloc_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(symbol_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(load_addr, 1); ++ _dl_exit(1); ++ } ++} ++ ++/* Transfer control to the user's application, once the dynamic loader ++ * is done. This routine has to exit the current function, then call ++ * the _dl_elf_main function. ++ * ++ * Since our _dl_boot will simply call whatever is returned by ++ * _dl_boot2, we can just return the address we're supposed to ++ * call. */ ++#define START() return _dl_elf_main; +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-syscalls.h +--- uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-syscalls.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,5 @@ ++/* We can't use the real errno in ldso, since it has not yet ++ * been dynamicly linked in yet. */ ++extern int _dl_errno; ++#define __set_errno(X) {(_dl_errno) = (X);} ++#include "sys/syscall.h" +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-sysdep.h +--- uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-sysdep.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,103 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Various assembly language/system dependent hacks that are required ++ * so that we can minimize the amount of platform specific code. ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++ ++/* Define this if the system uses RELOCA. */ ++#define ELF_USES_RELOCA ++ ++#include ++ ++#define ARCH_NUM 1 ++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) ++ ++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ ++ do { \ ++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ ++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ ++ } while (0) ++ ++/* Initialization sequence for the application/library GOT. */ ++#define INIT_GOT(GOT_BASE,MODULE) \ ++ do { \ ++ unsigned long i, nr_got; \ ++ \ ++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ ++ GOT_BASE[1] = (unsigned long) MODULE; \ ++ \ ++ /* Add load address displacement to all GOT entries */ \ ++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ ++ for (i = 2; i < nr_got; i++) \ ++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ ++ } while (0) ++ ++#define do_rem(result, n, base) ((result) = (n) % (base)) ++ ++/* Here we define the magic numbers that this dynamic loader should accept */ ++#define MAGIC1 EM_AVR32 ++#undef MAGIC2 ++ ++/* Used for error messages */ ++#define ELF_TARGET "AVR32" ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); ++ ++/* 4096 bytes alignment */ ++#define PAGE_ALIGN 0xfffff000 ++#define ADDR_ALIGN 0xfff ++#define OFFS_ALIGN 0x7ffff000 ++ ++#define elf_machine_type_class(type) \ ++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) ++ ++/* AVR32 doesn't need any COPY relocs */ ++#define DL_NO_COPY_RELOCS ++ ++/* Return the link-time address of _DYNAMIC. Conveniently, this is the ++ first element of the GOT. This must be inlined in a function which ++ uses global data. */ ++static inline Elf32_Addr ++elf_machine_dynamic (void) ++{ ++ register Elf32_Addr *got asm ("r6"); ++ return *got; ++} ++ ++/* Return the run-time load address of the shared object. */ ++static inline Elf32_Addr ++elf_machine_load_address (void) ++{ ++ extern void __dl_start asm("_dl_start"); ++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; ++ Elf32_Addr pcrel_addr; ++ ++ asm (" lddpc %0, 2f\n" ++ "1: add %0, pc\n" ++ " rjmp 3f\n" ++ " .align 2\n" ++ "2: .long _dl_start - 1b\n" ++ "3:\n" ++ : "=r"(pcrel_addr) : : "cc"); ++ ++ return pcrel_addr - got_addr; ++} ++ ++/* ++ * Perform any RELATIVE relocations specified by DT_RELCOUNT. ++ * Currently, we don't use that tag, but we might in the future as ++ * this would reduce the startup time somewhat (although probably not by much). ++ */ ++static inline void ++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, ++ Elf32_Word relative_count) ++{ ++ Elf32_Rela *rpnt = (void *)rel_addr; ++ ++ do { ++ Elf32_Addr *reloc_addr; ++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); ++ *reloc_addr = load_off + rpnt->r_addend; ++ } while (--relative_count); ++} +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/elfinterp.c +--- uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/elfinterp.c 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,191 @@ ++/* ++ * AVR32 ELF shared library loader suppport ++ * ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) ++{ ++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; ++ Elf32_Sym *sym; ++ unsigned long local_gotno; ++ unsigned long gotsym; ++ unsigned long new_addr; ++ char *strtab, *symname; ++ unsigned long *entry; ++ unsigned long sym_index = got_offset / 4; ++ ++#if 0 ++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; ++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; ++ ++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) ++ + sym_index; ++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); ++ symname = strtab + sym->st_name; ++ ++#if 0 ++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, ++ tpnt->symbol_scope, tpnt, ++ resolver); ++#endif ++ ++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); ++ *entry = new_addr; ++#endif ++ ++ return new_addr; ++} ++ ++static int ++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ unsigned long rel_addr, unsigned long rel_size, ++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) ++{ ++ Elf32_Sym *symtab; ++ Elf32_Rela *rpnt; ++ char *strtab; ++ int i; ++ ++ rpnt = (Elf32_Rela *)rel_addr; ++ rel_size /= sizeof(Elf32_Rela); ++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; ++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; ++ ++ for (i = 0; i < rel_size; i++, rpnt++) { ++ int symtab_index, res; ++ ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ ++ debug_sym(symtab, strtab, symtab_index); ++ debug_reloc(symtab, strtab, rpnt); ++ ++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); ++ ++ if (res == 0) ++ continue; ++ ++ _dl_dprintf(2, "\n%s: ", _dl_progname); ++ ++ if (symtab_index) ++ _dl_dprintf(2, "symbol '%s': ", ++ strtab + symtab[symtab_index].st_name); ++ ++ if (res < 0) { ++ int reloc_type = ELF32_R_TYPE(rpnt->r_info); ++#if defined(__SUPPORT_LD_DEBUG__) ++ _dl_dprintf(2, "can't handle reloc type %s\n", ++ _dl_reltypes(reloc_type)); ++#else ++ _dl_dprintf(2, "can't handle reloc type %x\n", ++ reloc_type); ++#endif ++ _dl_exit(-res); ++ } else { ++ _dl_dprintf(2, "can't resolve symbol\n"); ++ return res; ++ } ++ } ++ ++ return 0; ++} ++ ++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) ++{ ++ int reloc_type; ++ int symtab_index; ++ char *symname; ++ unsigned long *reloc_addr; ++ unsigned long symbol_addr; ++#if defined(__SUPPORT_LD_DEBUG__) ++ unsigned long old_val; ++#endif ++ ++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); ++ reloc_type = ELF32_R_TYPE(rpnt->r_info); ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ symbol_addr = 0; ++ symname = strtab + symtab[symtab_index].st_name; ++ ++ if (symtab_index) { ++ symbol_addr = (unsigned long) ++ _dl_find_hash(strtab + symtab[symtab_index].st_name, ++ tpnt->symbol_scope, tpnt, ++ elf_machine_type_class(reloc_type)); ++ ++ /* Allow undefined references to weak symbols */ ++ if (!symbol_addr && ++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { ++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", ++ _dl_progname, symname); ++ return 0; ++ } ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ old_val = *reloc_addr; ++#endif ++ switch (reloc_type) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr + rpnt->r_addend; ++ break; ++ case R_AVR32_RELATIVE: ++ *reloc_addr = (unsigned long)tpnt->loadaddr ++ + rpnt->r_addend; ++ break; ++ default: ++ return -1; ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ if (_dl_debug_reloc && _dl_debug_detail) ++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", ++ old_val, *reloc_addr); ++#endif ++ ++ return 0; ++} ++ ++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ /* TODO: Might want to support this in order to get faster ++ * startup times... */ ++} ++ ++int _dl_parse_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, ++ _dl_do_reloc); ++} +diff -Nur uClibc-0.9.28/ldso/ldso/avr32/resolve.S uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/resolve.S +--- uClibc-0.9.28/ldso/ldso/avr32/resolve.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/resolve.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,28 @@ ++/* ++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as ++ * indicated in register r12 and jumps to the resolved address. ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ * ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define ip r5 ++ ++ .text ++ .global _dl_linux_resolve ++ .type _dl_linux_resolve,@function ++_dl_linux_resolve: ++ /* The PLT code pushed r8 for us. It contains the address of this ++ function's GOT entry, that is entry 0. ip contains the address ++ of the GOT entry of the function we wanted to call. */ ++ stm --sp, r9-r12, lr ++ mov r11, r8 ++ sub r12, ip, r8 ++ rcall _dl_linux_resolver ++ mov ip, r12 ++ popm r8-r12,lr ++ mov pc, ip ++ .size _dl_linux_resolve, . - _dl_linux_resolve +diff -Nur uClibc-0.9.28/ldso/ldso/dl-startup.c uClibc-0.9.28-avr32-20060621/ldso/ldso/dl-startup.c +--- uClibc-0.9.28/ldso/ldso/dl-startup.c 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/dl-startup.c 2006-06-21 11:35:57.000000000 +0200 +@@ -217,7 +217,9 @@ + /* some arches (like MIPS) we have to tweak the GOT before relocations */ + PERFORM_BOOTSTRAP_GOT(tpnt); + +-#else ++#endif ++ ++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) + + /* OK, now do the relocations. We do not do a lazy binding here, so + that once we are done, we have considerably more flexibility. */ +@@ -259,7 +261,7 @@ + rel_addr += relative_count * sizeof(ELF_RELOC);; + } + +- rpnt = (ELF_RELOC *) (rel_addr + load_addr); ++ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */); + for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { + reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); + symtab_index = ELF_R_SYM(rpnt->r_info); +diff -Nur uClibc-0.9.28/libc/string/avr32/bcopy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/bcopy.S +--- uClibc-0.9.28/libc/string/avr32/bcopy.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/bcopy.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,15 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bcopy ++ .type bcopy, @function ++ .align 1 ++bcopy: ++ /* Swap the first two arguments */ ++ eor r11, r12 ++ eor r12, r11 ++ eor r11, r12 ++ rjmp memmove ++ .size bcopy, . - bcopy +diff -Nur uClibc-0.9.28/libc/string/avr32/bzero.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/bzero.S +--- uClibc-0.9.28/libc/string/avr32/bzero.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/bzero.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bzero ++ .type bzero, @function ++ .align 1 ++bzero: ++ mov r10, r11 ++ mov r11, 0 ++ rjmp memset +diff -Nur uClibc-0.9.28/libc/string/avr32/Makefile uClibc-0.9.28-avr32-20060621/libc/string/avr32/Makefile +--- uClibc-0.9.28/libc/string/avr32/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/Makefile 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,45 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../ ++include $(TOPDIR)Rules.mak ++ ++SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S ++SSRC += memset.S strcmp.S strlen.S ++# memchr.S, strcat.S, strcpy.S, strncpy.S is broken ++SOBJS := $(addprefix __avr32_,$(addsuffix .o,$(basename $(SSRC)))) ++ ++all: $(SOBJS) $(LIBC) ++ ++$(LIBC): ar-target ++ ++ar-target: $(SOBJS) ++ $(AR) $(ARFLAGS) $(LIBC) $(SOBJS) ++ ++$(SOBJS): __avr32_%.o: %.S ++ $(CC) $(ASFLAGS) -D$*=__avr32_$* -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $@ ++ ++clean: ++ $(RM) *.[oa] *~ core ++ ++stringtest.o: stringtest.c ++ $(CC) $(CFLAGS) -c $< -o $@ ++ ++stringtest: stringtest.o $(SOBJS) ++ $(CC) -static -o $@ $^ +diff -Nur uClibc-0.9.28/libc/string/avr32/memchr.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memchr.S +--- uClibc-0.9.28/libc/string/avr32/memchr.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memchr.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++#define chr r11 ++#define len r10 ++ ++ .text ++ .global memchr ++ .type memchr, @function ++memchr: ++ insert.b chr:l, chr ++ insert.h chr:t, chr ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: sub len, 4 ++ brlt 2f ++ ld.w r8, str++ ++ psub.b r9, r8, r11 ++ tnbz r9 ++ brne 1b ++ ++ sub str, 4 ++ extract.b r9, r8:t ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ extract.b r9, r8:u ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ extract.b r9, r8:l ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ retal str ++ ++2: sub len, -4 ++ reteq 0 ++ ++3: ld.ub r8, str++ ++ cp.w r8, 0 ++ reteq str ++ sub len, 1 ++ brne 3b ++ ++ retal 0 ++ ++.Lunaligned_str: ++1: sub len, 1 ++ retlt 0 ++ ld.ub r8, str++ ++ cp.b r8, r11 ++ reteq str ++ sub r9, 1 ++ brge 1b ++ ++ rjmp .Laligned_search +diff -Nur uClibc-0.9.28/libc/string/avr32/memcmp.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcmp.S +--- uClibc-0.9.28/libc/string/avr32/memcmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global memcmp ++ .type memcmp, @function ++ .align 1 ++memcmp: ++ cp.w len, 1 ++ retlt 0 ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ subfne len, 1 ++ brne 1b ++ ++ retal r8 ++ .size memcmp, . - memcmp ++ ++ .weak bcmp ++ bcmp = memcmp +diff -Nur uClibc-0.9.28/libc/string/avr32/memcpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcpy.S +--- uClibc-0.9.28/libc/string/avr32/memcpy.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcpy.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,106 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++/* Don't use r12 as dst since we must return it unmodified */ ++#define dst r9 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memcpy ++ .type memcpy, @function ++memcpy: ++ pref src[0] ++ mov dst, r12 ++ ++ /* If we have less than 32 bytes, don't do anything fancy */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, src++ ++ st.b dst++, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, dst ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ pref src[32] ++ ldm src, r0-r7 ++ sub src, -32 ++ stm dst, r0-r7 ++ sub dst, -32 ++ sub len, 32 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ ldm src, r0-r3 ++ sub src, -16 ++ sub len, 16 ++ stm dst, r0-r3 ++ sub dst, -16 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ neg len ++ add pc, pc, len << 2 ++ .rept 15 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ rsub r8, r8, 32 ++ sub len, r8 ++1: ld.ub r0, src++ ++ st.b dst++, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[0] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, src++ ++ st.w dst++, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ .size memcpy, . - memcpy +diff -Nur uClibc-0.9.28/libc/string/avr32/memmove.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memmove.S +--- uClibc-0.9.28/libc/string/avr32/memmove.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memmove.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,124 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r12 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memmove ++ .type memmove, @function ++memmove: ++ cp.w src, dst ++#ifdef memmove ++ brge optimized_memcpy ++#else ++ brge memcpy ++#endif ++ ++ add dst, len ++ add src, len ++ pref src[-1] ++ ++ /* ++ * The rest is basically the same as in memcpy.S except that ++ * the direction is reversed. ++ */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, --src ++ st.b --dst, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, r12 ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ pref src[-36] ++ sub src, 32 ++ ldm src, r0-r7 ++ sub dst, 32 ++ sub len, 32 ++ stm dst, r0-r7 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ sub src, 16 ++ ldm src, r0-r3 ++ sub dst, 16 ++ sub len, 16 ++ stm dst, r0-r3 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++#if 1 ++ sub len, -16 ++ breq 2f ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub len, 1 ++ brne 1b ++#else ++ neg len ++ add pc, pc, len << 2 ++ .rept 15 ++ ld.ub r0, --src ++ st.b --dst, r0 ++ .endr ++#endif ++ ++2: popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ rsub r8, r8, 32 ++ sub len, r8 ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[-4] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, --src ++ st.w --dst, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, --src ++ st.b --dst, r0 ++ .endr ++ ++ popm r0-r7, pc +diff -Nur uClibc-0.9.28/libc/string/avr32/memset.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memset.S +--- uClibc-0.9.28/libc/string/avr32/memset.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memset.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,54 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s r12 ++#define c r11 ++#define n r10 ++ ++ .text ++ .global memset ++ .type memset, @function ++ .align 1 ++memset: ++ cp.w n, 32 ++ mov r9, s ++ brge .Llarge_memset ++ ++ sub n, 1 ++ retlt s ++1: st.b s++, c ++ sub n, 1 ++ brge 1b ++ ++ retal r9 ++ ++.Llarge_memset: ++ mov r8, r11 ++ mov r11, 3 ++ insert.b r8:l, r8 ++ tst s, r11 ++ insert.h r8:t, r8 ++ breq 2f ++ ++1: st.b s++, r8 ++ sub n, 1 ++ tst s, r11 ++ brne 1b ++ ++2: mov r11, r9 ++ mov r9, r8 ++ sub n, 8 ++ ++3: st.d s++, r8 ++ sub n, 8 ++ brge 3b ++ ++ /* If we are done, n == -8 and we'll skip all st.b insns below */ ++ neg n ++ lsl n, 1 ++ add pc, n ++ .rept 7 ++ st.b s++, r8 ++ .endr ++ retal r11 +diff -Nur uClibc-0.9.28/libc/string/avr32/strcat.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcat.S +--- uClibc-0.9.28/libc/string/avr32/strcat.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcat.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,96 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define s1 r9 ++#define s2 r11 ++ ++ .text ++ .global strcat ++ .type strcat, @function ++ .align 1 ++strcat: ++ mov s1, r12 ++ ++ /* Make sure s1 is word-aligned */ ++ mov r10, s1 ++ andl r10, 3, COH ++ breq 2f ++ ++ add pc, pc, r10 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 2f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 3f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 4f ++ ++ /* Find the end of the first string */ ++5: ld.w r8, s1++ ++ tnbz r8 ++ brne 5b ++ ++ sub s1, 4 ++ ++ extract.b r10, r8:t ++ cp.w r10, 0 ++ breq 1f ++ sub s1, -1 ++ extract.b r10, r8:u ++ cp.w r10, 0 ++ breq 2f ++ sub s1, -1 ++ extract.b r10, r8:l ++ cp.w r10, 0 ++ breq 3f ++ sub s1, -1 ++ rjmp 4f ++ ++ /* Now, append s2 */ ++1: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++2: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++3: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++4: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++ ++ /* Copy one word at a time */ ++ ld.w r8, s2++ ++ tnbz r8 ++ breq 2f ++1: st.w r8, s2++ ++ ld.w r8, s2++ ++ tnbz r8 ++ brne 1b ++ ++ /* Copy the remaining bytes */ ++ extract.b r10, r8:t ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:u ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:l ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:b ++ st.b s1++, r10 ++ retal r12 ++ .size strcat, . - strcat +diff -Nur uClibc-0.9.28/libc/string/avr32/strcmp.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcmp.S +--- uClibc-0.9.28/libc/string/avr32/strcmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcmp.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,77 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global strcmp ++ .type strcmp, @function ++ .align 1 ++strcmp: ++ mov r8, 3 ++ tst s1, r8 ++ brne .Lunaligned_s1 ++ tst s2, r8 ++ brne .Lunaligned_s2 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne 2f ++ tnbz r8 ++ brne 1b ++ retal 0 ++ ++2: extract.b r12, r8:t ++ extract.b r11, r9:t ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ extract.b r12, r8:u ++ extract.b r11, r9:u ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ extract.b r12, r8:l ++ extract.b r11, r9:l ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ extract.b r12, r8:b ++ extract.b r11, r9:b ++ sub r12, r11 ++ retal r12 ++ ++.Lunaligned_s1: ++3: tst s1, r8 ++ breq 4f ++ ld.ub r10, s1++ ++ ld.ub r9, s2++ ++ sub r10, r9 ++ retne r10 ++ cp.w r9, 0 ++ brne 3b ++ retal r10 ++ ++4: tst s2, r8 ++ breq 1b ++ ++.Lunaligned_s2: ++ /* ++ * s1 and s2 can't both be aligned, and unaligned word loads ++ * can trigger spurious exceptions if we cross a page boundary. ++ * Do it the slow way... ++ */ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ cp.w r9, 0 ++ brne 1b ++ retal 0 +diff -Nur uClibc-0.9.28/libc/string/avr32/strcpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcpy.S +--- uClibc-0.9.28/libc/string/avr32/strcpy.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcpy.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,64 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * To reduce the size, this one might simply call strncpy with len = -1. ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strcpy, @function ++strcpy: ++ mov dst, r12 ++ ++ pref src[0] ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ rjmp 1b ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ extract.b r10, r8:t ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:u ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:l ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ extract.b r10, r8:b ++ st.b dst++, r10 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ rsub r8, r8, 4 ++ add pc, pc, r8 << 3 ++ nop ++ nop ++ ld.ub r10, src++ ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ ++ rjmp .Laligned_copy +diff -Nur uClibc-0.9.28/libc/string/avr32/stringtest.c uClibc-0.9.28-avr32-20060621/libc/string/avr32/stringtest.c +--- uClibc-0.9.28/libc/string/avr32/stringtest.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/stringtest.c 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,144 @@ ++ ++#include ++#include ++#include ++#include ++ ++#define BUF_SIZE (8 * 1024) ++ ++static char *buf1; ++static char *buf1_ref; ++static char *buf2; ++ ++extern void *optimized_memcpy(void *dest, void *src, size_t len); ++extern void *optimized_memmove(void *dest, void *src, size_t len); ++extern char *optimized_strcpy(char *dest, char *src); ++extern char *optimized_strncpy(char *dest, char *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("%4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++static void test_memcpy(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ int i; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memcpy with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ for (i = 0; i < 8192; i++) ++ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ for ( i = 0; i < 8192; i++) ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++static void test_memmove(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memmove with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ memmove(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf2 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf2"); ++ return 1; ++ } ++ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1"); ++ return 1; ++ } ++ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1_ref == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1_ref"); ++ return 1; ++ } ++ printf("\n === MEMCPY ===\n\n"); ++ ++ test_memcpy(0, 0, BUF_SIZE - 32); ++ test_memcpy(0, 0, 1); ++ test_memcpy(0, 0, 31); ++ test_memcpy(0, 0, 32); ++ test_memcpy(0, 0, 127); ++ test_memcpy(0, 0, 128); ++ test_memcpy(4, 4, BUF_SIZE - 32 - 4); ++ test_memcpy(1, 1, BUF_SIZE - 32 - 1); ++ test_memcpy(1, 1, 126); ++ test_memcpy(0, 3, 128); ++ test_memcpy(1, 4, 128); ++ test_memcpy(0, 0, 0); ++ ++ printf("\n === MEMMOVE ===\n\n"); ++ ++ test_memmove(0, 0, BUF_SIZE - 32); ++ test_memmove(0, 0, 1); ++ test_memmove(0, 0, 31); ++ test_memmove(0, 0, 32); ++ test_memmove(0, 0, BUF_SIZE - 33); ++ test_memmove(0, 0, 128); ++ test_memmove(4, 4, BUF_SIZE - 32 - 4); ++ test_memmove(1, 1, BUF_SIZE - 32 - 1); ++ test_memmove(1, 1, BUF_SIZE - 130); ++ test_memmove(0, 3, BUF_SIZE - 128); ++ test_memmove(1, 4, BUF_SIZE - 128); ++ test_memmove(0, 0, 0); ++ ++ return 0; ++} +diff -Nur uClibc-0.9.28/libc/string/avr32/strlen.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strlen.S +--- uClibc-0.9.28/libc/string/avr32/strlen.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strlen.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,52 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++ ++ .text ++ .global strlen ++ .type strlen, @function ++strlen: ++ mov r11, r12 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: ld.w r8, str++ ++ tnbz r8 ++ brne 1b ++ ++ sub r12, r11 ++ extract.b r9, r8:t ++ cp.w r9, 0 ++ subeq r12, 4 ++ reteq r12 ++ extract.b r9, r8:u ++ cp.w r9, 0 ++ subeq r12, 3 ++ reteq r12 ++ extract.b r9, r8:l ++ cp.w r9, 0 ++ subeq r12, 2 ++ reteq r12 ++ sub r12, 1 ++ retal r12 ++ ++.Lunaligned_str: ++ add pc, pc, r9 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ brne 1b ++ ++1: sub r12, 1 ++ sub r12, r11 ++ retal r12 +diff -Nur uClibc-0.9.28/libc/string/avr32/strncpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strncpy.S +--- uClibc-0.9.28/libc/string/avr32/strncpy.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strncpy.S 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,78 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strncpy, @function ++strncpy: ++ mov dst, r12 ++ ++ pref src[0] ++ mov dst, r12 ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++ sub r10, 4 ++ brlt 3f ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ sub r10, 4 ++ brne 1b ++ ++3: sub r10, -4 ++ reteq r12 ++ ++ /* This is safe as long as src is word-aligned and r10 > 0 */ ++ ld.w r8, src++ ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ extract.b r11, r8:t ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ extract.b r11, r8:u ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ extract.b r11, r8:l ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ extract.b r10, r8:b ++ st.b dst++, r10 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ min r8, r8, r10 ++ sub r10, r8 ++ sub r8, 1 ++ retlt r12 ++1: ld.ub r10, src++ ++ st.b dst++, r10 ++ sub r8, 1 ++ brge 1b ++ ++ rjmp .Laligned_copy +diff -Nur uClibc-0.9.28/libc/string/avr32/test_memcpy.c uClibc-0.9.28-avr32-20060621/libc/string/avr32/test_memcpy.c +--- uClibc-0.9.28/libc/string/avr32/test_memcpy.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/test_memcpy.c 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,66 @@ ++ ++#include ++#include ++ ++#define BUF_SIZE 32768 ++ ++static char buf1[BUF_SIZE] __attribute__((aligned(32))); ++static char buf1_ref[BUF_SIZE] __attribute__((aligned(32))); ++static char buf2[BUF_SIZE] __attribute__((aligned(32))); ++ ++extern void *new_memcpy(void *dest, void *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("% 4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++void test(int src_offset, int dst_offset, int len) ++{ ++ memset(buf1, 0x55, sizeof(buf1)); ++ memset(buf1_ref, 0x55, sizeof(buf1_ref)); ++ memset(buf2, 0xaa, sizeof(buf2)); ++ ++ printf("Testing with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ ++ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, sizeof(buf1)); ++ } ++} ++ ++int main(int argc, char *argv[]) ++{ ++ test(0, 0, BUF_SIZE); ++ test(0, 0, 1); ++ test(0, 0, 31); ++ test(0, 0, 32); ++ test(0, 0, 127); ++ test(0, 0, 128); ++ test(4, 4, BUF_SIZE - 4); ++ test(1, 1, BUF_SIZE - 1); ++ test(1, 1, 126); ++ test(0, 3, 128); ++ test(1, 4, 128); ++ ++ return 0; ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/atomicity.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,86 @@ ++/* Low-level functions for atomic operations. AVR32 version. ++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _ATOMICITY_H ++#define _ATOMICITY_H 1 ++ ++#include ++ ++static inline int ++__attribute__((unused)) ++exchange_and_add (volatile uint32_t *mem, int val) ++{ ++ int tmp, result; ++ ++ __asm__ __volatile__( ++ "/* Inline exchange and add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " add %1, %0, %4\n" ++ " stcond %2, %1\n" ++ " brne 1b" ++ : "=&r"(result), "=&r"(tmp), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++static inline void ++__attribute__((unused)) ++atomic_add (volatile uin32_t *mem, int val) ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline atomic add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " add %0, %3\n" ++ " stcond %2, %0\n" ++ " brne 1b" ++ : "=&r"(result), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++} ++ ++static inline int ++__attribute__((unused)) ++compare_and_swap(volatile long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* atomicity.h */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/byteswap.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* Macros to swap the order of bytes in integer values. ++ Copyright (C) 2005 Atmel Norway. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H ++# error "Never use directly; include instead." ++#endif ++ ++#ifndef _BITS_BYTESWAP_H ++#define _BITS_BYTESWAP_H 1 ++ ++/* Swap bytes in 16 bit value. */ ++#if defined __GNUC__ ++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) ++#else ++/* This is better than nothing. */ ++static __inline unsigned short int ++__bswap_16 (unsigned short int __bsx) ++{ ++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); ++} ++#endif ++ ++/* Swap bytes in 32 bit value. */ ++#if defined __GNUC__ ++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) ++#else ++static __inline unsigned int ++__bswap_32 (unsigned int __bsx) ++{ ++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | ++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); ++} ++#endif ++ ++#if defined __GNUC__ ++/* Swap bytes in 64 bit value. */ ++# define __bswap_constant_64(x) \ ++ ((((x) & 0xff00000000000000ull) >> 56) \ ++ | (((x) & 0x00ff000000000000ull) >> 40) \ ++ | (((x) & 0x0000ff0000000000ull) >> 24) \ ++ | (((x) & 0x000000ff00000000ull) >> 8) \ ++ | (((x) & 0x00000000ff000000ull) << 8) \ ++ | (((x) & 0x0000000000ff0000ull) << 24) \ ++ | (((x) & 0x000000000000ff00ull) << 40) \ ++ | (((x) & 0x00000000000000ffull) << 56)) ++ ++# define __bswap_64(x) \ ++ (__extension__ \ ++ ({ \ ++ union { \ ++ __extension__ unsigned long long int __ll; \ ++ unsigned int __l[2]; \ ++ } __w, __r; \ ++ if (__builtin_constant_p(x)) \ ++ __r.__ll = __bswap_constant_64(x); \ ++ else { \ ++ __w.__ll = (x); \ ++ __r.__l[0] = __bswap_32(__w.__l[1]); \ ++ __r.__l[1] = __bswap_32(__w.__l[0]); \ ++ } \ ++ __r.__ll; \ ++ })) ++#endif ++ ++#endif /* _BITS_BYTESWAP_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/endian.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/endian.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,7 @@ ++/* AVR32 is big-endian */ ++ ++#ifndef _ENDIAN_H ++# error "Never use directly; include instead." ++#endif ++ ++#define __BYTE_ORDER __BIG_ENDIAN +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/fcntl.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,167 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * This file is part of the Linux kernel ++ */ ++#ifndef _FCNTL_H ++# error "Never use directly; include instead." ++#endif ++ ++#include ++ ++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files ++ located on an ext2 file system */ ++#define O_ACCMODE 0003 ++#define O_RDONLY 00 ++#define O_WRONLY 01 ++#define O_RDWR 02 ++#define O_CREAT 0100 /* not fcntl */ ++#define O_EXCL 0200 /* not fcntl */ ++#define O_NOCTTY 0400 /* not fcntl */ ++#define O_TRUNC 01000 /* not fcntl */ ++#define O_APPEND 02000 ++#define O_NONBLOCK 04000 ++#define O_NDELAY O_NONBLOCK ++#define O_SYNC 010000 ++#define O_ASYNC 020000 ++ ++#ifdef __USE_GNU ++# define O_DIRECTORY 040000 /* must be a directory */ ++# define O_NOFOLLOW 0100000 /* don't follow links */ ++# define O_DIRECT 0200000 /* direct disk access */ ++#endif ++ ++#ifdef __USE_LARGEFILE64 ++# define O_LARGEFILE 0400000 ++#endif ++ ++/* For now Linux has synchronisity options for data and read operations. ++ We define the symbols here but let them do the same as O_SYNC since ++ this is a superset. */ ++#if defined __USE_POSIX199309 || defined __USE_UNIX98 ++# define O_DSYNC O_SYNC /* Synchronize data. */ ++# define O_RSYNC O_SYNC /* Synchronize read operations. */ ++#endif ++ ++#define F_DUPFD 0 /* dup */ ++#define F_GETFD 1 /* get close_on_exec */ ++#define F_SETFD 2 /* set/clear close_on_exec */ ++#define F_GETFL 3 /* get file->f_flags */ ++#define F_SETFL 4 /* set file->f_flags */ ++ ++#ifndef __USE_FILE_OFFSET64 ++# define F_GETLK 5 ++# define F_SETLK 6 ++# define F_SETLKW 7 ++#else ++# define F_GETLK F_GETLK64 ++# define F_SETLK F_SETLK64 ++# define F_SETLKW F_SETLKW64 ++#endif ++#define F_GETLK64 12 /* using 'struct flock64' */ ++#define F_SETLK64 13 ++#define F_SETLKW64 14 ++ ++#if defined __USE_BSD || defined __USE_XOPEN2K ++# define F_SETOWN 8 /* for sockets. */ ++# define F_GETOWN 9 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETSIG 10 /* for sockets. */ ++# define F_GETSIG 11 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETLEASE 1024 /* Set a lease. */ ++# define F_GETLEASE 1025 /* Enquire what lease is active. */ ++# define F_NOTIFY 1026 /* Request notfications on a directory. */ ++#endif ++ ++/* for F_[GET|SET]FL */ ++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++/* for posix fcntl() and lockf() */ ++#define F_RDLCK 0 ++#define F_WRLCK 1 ++#define F_UNLCK 2 ++ ++/* for old implementation of bsd flock () */ ++#define F_EXLCK 4 /* or 3 */ ++#define F_SHLCK 8 /* or 4 */ ++ ++/* for leases */ ++#define F_INPROGRESS 16 ++ ++#ifdef __USE_BSD ++/* operations for bsd flock(), also used by the kernel implementation */ ++# define LOCK_SH 1 /* shared lock */ ++# define LOCK_EX 2 /* exclusive lock */ ++# define LOCK_NB 4 /* or'd with one of the above to prevent ++ blocking */ ++# define LOCK_UN 8 /* remove lock */ ++#endif ++ ++#ifdef __USE_GNU ++# define LOCK_MAND 32 /* This is a mandatory flock */ ++# define LOCK_READ 64 /* ... Which allows concurrent ++ read operations */ ++# define LOCK_WRITE 128 /* ... Which allows concurrent ++ write operations */ ++# define LOCK_RW 192 /* ... Which allows concurrent ++ read & write ops */ ++#endif ++ ++#ifdef __USE_GNU ++/* Types of directory notifications that may be requested with F_NOTIFY. */ ++# define DN_ACCESS 0x00000001 /* File accessed. */ ++# define DN_MODIFY 0x00000002 /* File modified. */ ++# define DN_CREATE 0x00000004 /* File created. */ ++# define DN_DELETE 0x00000008 /* File removed. */ ++# define DN_RENAME 0x00000010 /* File renamed. */ ++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ ++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ ++#endif ++ ++struct flock { ++ short l_type; ++ short l_whence; ++#ifndef __USE_FILE_OFFSET64 ++ __off_t l_start; ++ __off_t l_len; ++#else ++ __off64_t l_start; ++ __off64_t l_len; ++#endif ++ __pid_t l_pid; ++}; ++ ++#ifdef __USE_LARGEFILE64 ++struct flock64 { ++ short l_type; ++ short l_whence; ++ __off64_t l_start; ++ __off64_t l_len; ++ __pid_t l_pid; ++}; ++#endif ++ ++/* Define some more compatibility macros to be backward compatible with ++ * BSD systems which did not managed to hide these kernel macros. */ ++#ifdef __USE_BSD ++# define FAPPEND O_APPEND ++# define FFSYNC O_FSYNC ++# define FASYNC O_ASYNC ++# define FNONBLOCK O_NONBLOCK ++# define FNDELAY O_NDELAY ++#endif /* Use BSD. */ ++ ++/* Advise to `posix_fadvise'. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ ++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ ++#endif +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_stat.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,63 @@ ++#ifndef _BITS_STAT_STRUCT_H ++#define _BITS_STAT_STRUCT_H ++ ++/* ++ * This file provides struct stat, taken from kernel 2.6.4 ++ * (include/asm-avr32/stat.h revision 1.1). ++ */ ++ ++struct kernel_stat { ++ unsigned long st_dev; ++ unsigned long st_ino; ++ unsigned short st_mode; ++ unsigned short st_nlink; ++ unsigned short st_uid; ++ unsigned short st_gid; ++ unsigned long st_rdev; ++ unsigned long st_size; ++ unsigned long st_blksize; ++ unsigned long st_blocks; ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++#define STAT_HAVE_NSEC 1 ++ ++struct kernel_stat64 { ++ unsigned long long st_dev; ++ ++ unsigned long long st_ino; ++ unsigned int st_mode; ++ unsigned int st_nlink; ++ ++ unsigned long st_uid; ++ unsigned long st_gid; ++ ++ unsigned long long st_rdev; ++ ++ long long st_size; ++ unsigned long __pad1; ++ unsigned long st_blksize; ++ ++ unsigned long long st_blocks; ++ ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++#endif /* _BITS_STAT_STRUCT_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_types.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,56 @@ ++/* Note that we use the exact same include guard #define names ++ * as asm/posix_types.h. This will avoid gratuitous conflicts ++ * with the posix_types.h kernel header, and will ensure that ++ * our private content, and not the kernel header, will win. ++ * -Erik ++ */ ++#ifndef __ASM_AVR32_POSIX_TYPES_H ++#define __ASM_AVR32_POSIX_TYPES_H ++ ++/* ++ * This file is generally used by user-level software, so you need to ++ * be a little careful about namespace pollution etc. Also, we cannot ++ * assume GCC is being used. ++ */ ++ ++typedef unsigned long __kernel_dev_t; ++typedef unsigned long __kernel_ino_t; ++typedef unsigned short __kernel_mode_t; ++typedef unsigned short __kernel_nlink_t; ++typedef long __kernel_off_t; ++typedef int __kernel_pid_t; ++typedef unsigned short __kernel_ipc_pid_t; ++typedef unsigned int __kernel_uid_t; ++typedef unsigned int __kernel_gid_t; ++typedef unsigned long __kernel_size_t; ++typedef int __kernel_ssize_t; ++typedef int __kernel_ptrdiff_t; ++typedef long __kernel_time_t; ++typedef long __kernel_suseconds_t; ++typedef long __kernel_clock_t; ++typedef int __kernel_timer_t; ++typedef int __kernel_clockid_t; ++typedef int __kernel_daddr_t; ++typedef char * __kernel_caddr_t; ++typedef unsigned short __kernel_uid16_t; ++typedef unsigned short __kernel_gid16_t; ++typedef unsigned int __kernel_uid32_t; ++typedef unsigned int __kernel_gid32_t; ++ ++typedef unsigned short __kernel_old_uid_t; ++typedef unsigned short __kernel_old_gid_t; ++typedef unsigned short __kernel_old_dev_t; ++ ++#ifdef __GNUC__ ++typedef long long __kernel_loff_t; ++#endif ++ ++typedef struct { ++#if defined(__USE_ALL) ++ int val[2]; ++#else ++ int __val[2]; ++#endif ++} __kernel_fsid_t; ++ ++#endif /* __ASM_AVR32_POSIX_TYPES_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/machine-gmon.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,69 @@ ++/* Machine-dependent definitions for profiling support. AVR32 version. ++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define mcount_internal __mcount_internal ++ ++#define _MCOUNT_DECL(frompc, selfpc) \ ++static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc) ++ ++/* ++ * This mcount implementation expects to get called after the prologue ++ * has been run. It also expects that r7 contains a valid frame ++ * pointer. ++ * ++ * When profiling, the compiler should generate something like this at ++ * each function entry: ++ * ++ * pushm r0-r7,lr // lr mandatory, others optional ++ * mov r7, sp ++ * // rest of prologue goes here ++ * mcall pc[.LC1 - .] ++ * // rest of function goes here ++ * .LC1: ++ * .long mcount ++ * ++ * or for PIC: ++ * ++ * pushm r0-r7,lr ++ * mov r7, sp ++ * // rest of prologue goes here ++ * lddpc r0, .LC1 ++ * .L1: rsub r0, pc ++ * mcall r0[mcount@GOT] ++ * // rest of function goes here ++ * .LC1: ++ * .long .L1 - _GLOBAL_OFFSET_TABLE_ ++ * ++ * This way, when mcount() is called, r7 points to the calling ++ * function's return address. It is guaranteed that calling mcount ++ * will clobber no registers except LR, which is unavoidable. ++ */ ++#define MCOUNT asm( \ ++ " .align 4\n" \ ++ " .global _mcount\n" \ ++ " .type _mcount,@function\n" \ ++ "_mcount:\n" \ ++ " pushm r8-r12,lr\n" \ ++ " mov r11, lr\n" \ ++ " ld.w r12, r7[0]\n" \ ++ " rcall __mcount_internal\n" \ ++ " popm r8-r12,pc\n" \ ++ " .size _mcount, . - _mcount\n" \ ++ " .weak mcount\n" \ ++ " mcount = _mcount"); +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/mman.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/mman.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* Definitions for POSIX memory map interface. Linux/AVR32 version. ++ Copyright (C) 1997, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_MMAN_H ++# error "Never include this file directly. Use instead" ++#endif ++ ++/* The following definitions basically come from the kernel headers. ++ But the kernel header is not namespace clean. */ ++ ++ ++/* Protections are chosen from these bits, OR'd together. The ++ implementation does not necessarily support PROT_EXEC or PROT_WRITE ++ without PROT_READ. The only guarantees are that no writing will be ++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ ++ ++#define PROT_READ 0x1 /* Page can be read. */ ++#define PROT_WRITE 0x2 /* Page can be written. */ ++#define PROT_EXEC 0x4 /* Page can be executed. */ ++#define PROT_NONE 0x0 /* Page can not be accessed. */ ++ ++/* Sharing types (must choose one and only one of these). */ ++#define MAP_SHARED 0x01 /* Share changes. */ ++#define MAP_PRIVATE 0x02 /* Changes are private. */ ++#ifdef __USE_MISC ++# define MAP_TYPE 0x0f /* Mask for type of mapping. */ ++#endif ++ ++/* Other flags. */ ++#define MAP_FIXED 0x10 /* Interpret addr exactly. */ ++#ifdef __USE_MISC ++# define MAP_FILE 0 ++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ ++# define MAP_ANON MAP_ANONYMOUS ++#endif ++ ++/* These are Linux-specific. */ ++#ifdef __USE_MISC ++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ ++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ ++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ ++# define MAP_LOCKED 0x2000 /* Lock the mapping. */ ++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ ++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ ++# define MAP_NONBLOCK 0x10000 /* do not block on IO */ ++#endif ++ ++/* Flags to `msync'. */ ++#define MS_ASYNC 1 /* Sync memory asynchronously. */ ++#define MS_SYNC 4 /* Synchronous memory sync. */ ++#define MS_INVALIDATE 2 /* Invalidate the caches. */ ++ ++/* Flags for `mlockall'. */ ++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ ++#define MCL_FUTURE 2 /* Lock all additions to address ++ space. */ ++ ++/* Flags for `mremap'. */ ++#ifdef __USE_GNU ++# define MREMAP_MAYMOVE 1 ++#endif ++ ++/* Advise to `madvise'. */ ++#ifdef __USE_BSD ++# define MADV_NORMAL 0 /* No further special treatment. */ ++# define MADV_RANDOM 1 /* Expect random page references. */ ++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define MADV_WILLNEED 3 /* Will need these pages. */ ++# define MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif ++ ++/* The POSIX people had to invent similar names for the same things. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/profil-counter.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Low-level statistical profiling support function. Linux/AVR32 version. ++ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include ++ ++void ++profil_counter(int signo, siginfo_t *si, struct sigcontext *sc) ++{ ++ profil_count((void *)sc->pc); ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/setjmp.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,21 @@ ++/* ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++#ifndef _SETJMP_H ++# error "Never include directly; use instead." ++#endif ++ ++#ifndef _ASM ++/* ++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are ++ * not saved. ++ */ ++typedef int __jmp_buf[11]; ++#endif ++ ++#define __JMP_BUF_SP 4 ++ ++/* Test if longjmp to JMPBUF would unwind the frame containing a local ++ variable at ADDRESS. */ ++#define _JMPBUF_UNWINDS(jmpbuf, address) \ ++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/syscalls.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,143 @@ ++#ifndef _SYSCALL_H ++# error "Never use directly; include instead." ++#endif ++ ++/* ++ * This includes the `__NR_' syscall numbers taken from the ++ * Linux kernel header files. It also defines the traditional ++ * `SYS_' macros for older programs. ++ */ ++#include ++ ++#ifndef __set_errno ++# define __set_errno(val) (*__errno_location()) = (val) ++#endif ++#ifndef SYS_ify ++# define SYS_ify(syscall_name) (__NR_##syscall_name) ++#endif ++ ++#ifndef __ASSEMBLER__ ++ ++#undef _syscall0 ++#define _syscall0(type,name) \ ++ type name(void) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 0)); \ ++ } ++ ++#undef _syscall1 ++#define _syscall1(type,name,type1,arg1) \ ++ type name(type1 arg1) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ ++ } ++ ++#undef _syscall2 ++#define _syscall2(type,name,type1,arg1,type2,arg2) \ ++ type name(type1 arg1, type2 arg2) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ ++ } ++ ++#undef _syscall3 ++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ ++ type name(type1 arg1, type2 arg2, type3 arg3) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 3, arg1, \ ++ arg2, arg3)); \ ++ } ++ ++#undef _syscall4 ++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ ++ arg3, arg4)); \ ++ } ++ ++#undef _syscall5 ++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ ++ arg3, arg4, arg5)); \ ++ } ++ ++#undef _syscall6 ++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5,type6,arg6) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5, type6 arg6) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ ++ arg4, arg5, arg6)); \ ++ } ++ ++#undef unlikely ++#define unlikely(x) __builtin_expect((x), 0) ++ ++#undef INLINE_SYSCALL ++#define INLINE_SYSCALL(name, nr, args...) \ ++ ({ \ ++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ ++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ ++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ ++ _sys_result = (unsigned int) -1; \ ++ } \ ++ (int) _sys_result; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) do { } while(0) ++ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++ ({ \ ++ register int _a1 asm ("r12"); \ ++ register int _scno asm("r8") = SYS_ify(name); \ ++ LOAD_ARGS_##nr (args); \ ++ asm volatile ("scall /* syscall " #name " */" \ ++ : "=r" (_a1) \ ++ : "r"(_scno) ASM_ARGS_##nr \ ++ : "lr", "cc", "memory"); \ ++ _a1; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_ERROR_P ++#define INTERNAL_SYSCALL_ERROR_P(val, err) \ ++ ((unsigned int)(val) >= 0xfffff001U) ++ ++#undef INTERNAL_SYSCALL_ERRNO ++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) ++ ++#define LOAD_ARGS_0() do { } while(0) ++#define ASM_ARGS_0 ++#define LOAD_ARGS_1(a1) \ ++ _a1 = (int) (a1); \ ++ LOAD_ARGS_0() ++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) ++#define LOAD_ARGS_2(a1, a2) \ ++ register int _a2 asm("r11") = (int)(a2); \ ++ LOAD_ARGS_1(a1) ++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) ++#define LOAD_ARGS_3(a1, a2, a3) \ ++ register int _a3 asm("r10") = (int)(a3); \ ++ LOAD_ARGS_2(a1, a2) ++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) ++#define LOAD_ARGS_4(a1, a2, a3, a4) \ ++ register int _a4 asm("r9") = (int)(a4); \ ++ LOAD_ARGS_3(a1, a2, a3) ++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) ++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ ++ register int _a5 asm("r5") = (int)(a5); \ ++ LOAD_ARGS_4(a1, a2, a3, a4) ++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) ++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ ++ register int _a6 asm("r3") = (int)(a6); \ ++ LOAD_ARGS_5(a1, a2, a3, a4, a5) ++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) ++ ++#endif /* __ASSEMBLER__ */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/wordsize.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1 @@ ++#define __WORDSIZE 32 +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/brk.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/brk.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++ ++void *__curbrk = 0; ++ ++int brk (void *addr) ++{ ++ void *newbrk; ++ ++ newbrk = INLINE_SYSCALL(brk, 1, addr); ++ ++ __curbrk = newbrk; ++ ++ if (newbrk < addr) { ++ __set_errno (ENOMEM); ++ return -1; ++ } ++ ++ return 0; ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-_setjmp.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 0) */ ++ .global _setjmp ++ .type _setjmp,"function" ++ .align 1 ++_setjmp: ++ mov r11, 0 ++ bral __sigsetjmp_internal ++ .size _setjmp, . - _setjmp +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-setjmp.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 1) */ ++ .global setjmp ++ .type setjmp,"function" ++ .align 1 ++setjmp: ++ mov r11, 1 ++ bral __sigsetjmp_internal ++ .size setjmp, . - setjmp +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/clone.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/clone.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,37 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++ ++/* ++ * I don't know if we can be absolutely certain that the fn and arg ++ * parameters are preserved when returning as the child. If the ++ * compiler stores them in registers (r0-r7), they should be. ++ */ ++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) ++{ ++ register int (*_fn)(void *arg) = fn; ++ register void *_arg = arg; ++ int err; ++ ++ /* Sanity check the arguments */ ++ err = -EINVAL; ++ if (!fn) ++ goto syscall_error; ++ if (!child_stack) ++ goto syscall_error; ++ ++ err = INLINE_SYSCALL(clone, 2, flags, child_stack); ++ if (err < 0) ++ goto syscall_error; ++ else if (err != 0) ++ return err; ++ ++ _exit(_fn(_arg)); ++ ++syscall_error: ++ __set_errno (-err); ++ return -1; ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crt1.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crt1.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,93 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * When we enter _start, the stack looks like this: ++ * argc argument counter ++ * argv[0] pointer to program name ++ * argv[1..argc-1] pointers to program args ++ * NULL ++ * env[0..N] pointers to environment variables ++ * NULL ++ * ++ * r12 contains a function pointer to be registered with `atexit'. ++ * This is how the dynamic linker arranges to have DT_FINI functions ++ * called for shared libraries that have been loaded before this ++ * code runs. ++ * ++ * We're going to call the following function: ++ * __uClibc_main(int (*main)(int, char **, char **), int argc, ++ * char **argv, void (*app_init)(void), void (*app_fini)(void), ++ * void (*rtld_fini)(void), void *stack_end) ++ * ++ * So we need to set up things as follows: ++ * r12 = address of main ++ * r11 = argc ++ * r10 = &argv[0] ++ * r9 = address of _init ++ * r8 = address of _fini ++ * sp[0] = whatever we got passed in r12 ++ */ ++ ++#include ++ ++ .text ++ .global _start ++ .type _start, @function ++_start: ++ /* Clear the frame pointer and link register since this is the outermost frame. */ ++ mov r7, 0 ++ mov lr, 0 ++ ++ ld.w r11, sp++ /* argc */ ++ mov r10, sp /* &argv[0] */ ++ ++ st.w --sp, r10 /* stack_end */ ++ st.w --sp, r12 /* rtld_fini */ ++ ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++.L_RGOT: ++ rsub r6, pc ++ lda.w r9, _init ++ lda.w r8, _fini ++ lda.w r12, main ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ call __uClibc_main ++ ++ .align 2 ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++ lddpc r9, __init_addr /* app_init */ ++ lddpc r8, __fini_addr /* app_fini */ ++ lddpc r12, __main_addr /* main */ ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ lddpc pc, ___uClibc_main_addr ++ ++ .align 2 ++__init_addr: ++ .long _init ++__fini_addr: ++ .long _fini ++__main_addr: ++ .long main ++___uClibc_main_addr: ++ .long __uClibc_main ++#endif ++ .size _start, . - _start ++ ++ /* ++ * The LSB says we need this. ++ */ ++ .section ".note.ABI-tag", "a" ++ .align 4 ++ .long 2f - 1f /* namesz */ ++ .long 4f - 3f /* descsz */ ++ .long 1 /* type */ ++1: .asciz "GNU" /* name */ ++2: .align 4 ++3: .long 0 /* Linux executable */ ++ .long 2,6,0 /* Earliest compatible kernel */ ++4: .align 4 +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crti.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crti.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,17 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++_init: ++ /* Use a four-byte instruction to avoid NOPs */ ++ stm --sp, r0-r7,lr ++ .align 2 ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++_fini: ++ stm --sp, r0-r7,lr ++ .align 2 +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crtn.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crtn.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,14 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++ ldm sp++, r0-r7,pc ++ .size _init, . - _init ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++ ldm sp++, r0-r7,pc ++ .size _fini, . - _fini +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/__longjmp.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/__longjmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,17 @@ ++/* longjmp for AVR32 ++ * ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ .global __longjmp ++ .type __longjmp,"function" ++ .align 1 ++__longjmp: ++ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ mov r12, r11 /* get the return value right */ ++ mustr r8 /* restore status register (lower half) */ ++ cp r12, 0 /* can't return zero */ ++ frs ++ moveq r12, 1 ++ mov pc,lr ++ .size __longjmp, . - __longjmp +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/Makefile +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/Makefile 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,93 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../../ ++include $(TOPDIR)Rules.mak ++ASFLAGS=$(CFLAGS) ++ ++CRT_SRC = crt1.S ++CRT_OBJ = crt1.o ++SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ)) ++CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o ++ ++SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \ ++ bsd-_setjmp.S sigrestorer.S syscall.S ++SOBJS=$(patsubst %.S,%.o, $(SSRC)) ++ ++CSRC=clone.c brk.c sigaction.c mmap.c ++COBJS=$(patsubst %.c,%.o, $(CSRC)) ++ ++OBJS=$(SOBJS) $(COBJS) ++ ++OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS) ++ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ ++ ++$(CRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SCRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SOBJS): %.o : %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(COBJS): %.o : %.c ++ $(CC) $(CFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) ++crti.o: crti.S ++ $(CC) $(ASFLAGS) -c crti.S -o crti.o ++ ++$(TOPDIR)lib/crti.o: crti.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crti.o $(TOPDIR)lib/ ++ ++crtn.o: crtn.S ++ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o ++ ++$(TOPDIR)lib/crtn.o: crtn.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crtn.o $(TOPDIR)lib/ ++else ++$(TOPDIR)lib/crti.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o ++$(TOPDIR)lib/crtn.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o ++endif ++ ++ ++headers: ++# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/ ++ ++clean: ++ $(RM) *.[oa] *~ core ++ $(RM) bits/sysnum.h ++ $(RM) gmon-start.S ++ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/_mmap.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/_mmap.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++#define __NR_mmap2 __NR_mmap ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/mmap.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/mmap.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/setjmp.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/setjmp.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#define _SETJMP_H ++#define _ASM ++#include ++ ++ .text ++ ++ .global __sigsetjmp ++ .type __sigsetjmp,"function" ++ ++ /* Create a global, hidden symbol for use by setjmp() and _setjmp(). ++ If it's not hidden, the linker will complain about a relative ++ jump to a dynamic symbol when building a shared library. ++ ++ Also, if a user overrides the __sigsetjmp function, he might not ++ expect the setjmp() and _setjmp() function to effectively be ++ overridden as well. */ ++ .global __sigsetjmp_internal ++ .hidden __sigsetjmp_internal ++ .type __sigsetjmp_internal,"function" ++ .align 1 ++__sigsetjmp: ++__sigsetjmp_internal: ++ mustr r8 ++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ ++ /* Make a tail call to __sigjmp_save; it takes the same args. */ ++#ifdef __PIC__ ++ mov r9, r6 ++ lddpc r6, .LG ++.L1: rsub r6, pc ++ ld.w r8, r6[__sigjmp_save@got] ++ mov r6, r9 ++ mov pc, r8 ++ ++ .align 2 ++.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_ ++#else ++ rjmp __sigjmp_save ++#endif ++ .size __sigsetjmp, . - __sigsetjmp +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigaction.c +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigaction.c 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++#define SA_RESTORER 0x04000000 ++extern void __default_rt_sa_restorer(void); ++ ++/* ++ * If act is not NULL, change the action for sig to *act. ++ * If oact is not NULL, put the old action for sig in *oact. ++ */ ++int __libc_sigaction(int signum, const struct sigaction *act, ++ struct sigaction *oldact) ++{ ++ struct kernel_sigaction kact, koact; ++ int result; ++ ++ if (act) { ++ kact.k_sa_handler = act->sa_handler; ++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); ++ kact.sa_flags = act->sa_flags; ++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) ++ kact.sa_restorer = act->sa_restorer; ++ else ++ kact.sa_restorer = __default_rt_sa_restorer; ++ kact.sa_flags |= SA_RESTORER; ++ } ++ ++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, ++ oldact ? __ptrvalue(&koact) : NULL, ++ _NSIG / 8); ++ ++ if (oldact && result >= 0) { ++ oldact->sa_handler = koact.k_sa_handler; ++ memcpy(&oldact->sa_mask, &koact.sa_mask, ++ sizeof(oldact->sa_mask)); ++ oldact->sa_flags = koact.sa_flags; ++ oldact->sa_restorer = koact.sa_restorer; ++ } ++ ++ return result; ++} ++ ++weak_alias(__libc_sigaction, sigaction) +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigrestorer.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigrestorer.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++ ++ .global __default_rt_sa_restorer ++ .type __default_rt_sa_restorer,"function" ++ .align 1 ++__default_rt_sa_restorer: ++ mov r8, __NR_rt_sigreturn ++ scall +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/elf.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/elf.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_ELF_H ++#define _SYS_ELF_H 1 ++ ++#warning "This header is obsolete; use instead." ++ ++#include ++ ++#endif /* sys/elf.h */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/io.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/io.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,48 @@ ++/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_IO_H ++ ++#define _SYS_IO_H 1 ++#include ++ ++__BEGIN_DECLS ++ ++/* If TURN_ON is TRUE, request for permission to do direct i/o on the ++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O ++ permission off for that range. This call requires root privileges. */ ++extern int ioperm (unsigned long int __from, unsigned long int __num, ++ int __turn_on) __THROW; ++ ++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, ++ permission to access any I/O port is granted. This call requires ++ root privileges. */ ++extern int iopl (int __level) __THROW; ++ ++/* The functions that actually perform reads and writes. */ ++extern unsigned char inb (unsigned long int port) __THROW; ++extern unsigned short int inw (unsigned long int port) __THROW; ++extern unsigned long int inl (unsigned long int port) __THROW; ++ ++extern void outb (unsigned char value, unsigned long int port) __THROW; ++extern void outw (unsigned short value, unsigned long int port) __THROW; ++extern void outl (unsigned long value, unsigned long int port) __THROW; ++ ++__END_DECLS ++ ++#endif /* _SYS_IO_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/procfs.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/procfs.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,123 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_PROCFS_H ++#define _SYS_PROCFS_H 1 ++ ++/* This is somewhat modelled after the file of the same name on SVR4 ++ systems. It provides a definition of the core file format for ELF ++ used on Linux. It doesn't have anything to do with the /proc file ++ system, even though Linux has one. ++ ++ Anyway, the whole purpose of this file is for GDB and GDB only. ++ Don't read too much into it. Don't use it for anything other than ++ GDB unless you know what you are doing. */ ++ ++#include ++#include ++#include ++#include ++ ++__BEGIN_DECLS ++ ++/* Type for a general-purpose register. */ ++typedef unsigned long elf_greg_t; ++ ++/* And the whole bunch of them. We could have used `struct ++ user_regs' directly in the typedef, but tradition says that ++ the register set is an array, which does have some peculiar ++ semantics, so leave it that way. */ ++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++/* Register set for the floating-point registers. */ ++typedef struct user_fpregs elf_fpregset_t; ++ ++/* Signal info. */ ++struct elf_siginfo ++ { ++ int si_signo; /* Signal number. */ ++ int si_code; /* Extra code. */ ++ int si_errno; /* Errno. */ ++ }; ++ ++/* Definitions to generate Intel SVR4-like core files. These mostly ++ have the same names as the SVR4 types with "elf_" tacked on the ++ front to prevent clashes with Linux definitions, and the typedef ++ forms have been avoided. This is mostly like the SVR4 structure, ++ but more Linuxy, with things that Linux does not support and which ++ GDB doesn't really use excluded. */ ++ ++struct elf_prstatus ++ { ++ struct elf_siginfo pr_info; /* Info associated with signal. */ ++ short int pr_cursig; /* Current signal. */ ++ unsigned long int pr_sigpend; /* Set of pending signals. */ ++ unsigned long int pr_sighold; /* Set of held signals. */ ++ __pid_t pr_pid; ++ __pid_t pr_ppid; ++ __pid_t pr_pgrp; ++ __pid_t pr_sid; ++ struct timeval pr_utime; /* User time. */ ++ struct timeval pr_stime; /* System time. */ ++ struct timeval pr_cutime; /* Cumulative user time. */ ++ struct timeval pr_cstime; /* Cumulative system time. */ ++ elf_gregset_t pr_reg; /* GP registers. */ ++ int pr_fpvalid; /* True if math copro being used. */ ++ }; ++ ++ ++#define ELF_PRARGSZ (80) /* Number of chars for args. */ ++ ++struct elf_prpsinfo ++ { ++ char pr_state; /* Numeric process state. */ ++ char pr_sname; /* Char for pr_state. */ ++ char pr_zomb; /* Zombie. */ ++ char pr_nice; /* Nice val. */ ++ unsigned long int pr_flag; /* Flags. */ ++ unsigned short int pr_uid; ++ unsigned short int pr_gid; ++ int pr_pid, pr_ppid, pr_pgrp, pr_sid; ++ /* Lots missing */ ++ char pr_fname[16]; /* Filename of executable. */ ++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ ++ }; ++ ++/* The rest of this file provides the types for emulation of the ++ Solaris interfaces that should be implemented by ++ users of libthread_db. */ ++ ++/* Addresses. */ ++typedef void *psaddr_t; ++ ++/* Register sets. Linux has different names. */ ++typedef elf_gregset_t prgregset_t; ++typedef elf_fpregset_t prfpregset_t; ++ ++/* We don't have any differences between processes and threads, ++ therefore have only one PID type. */ ++typedef __pid_t lwpid_t; ++ ++/* Process status and info. In the end we do provide typedefs for them. */ ++typedef struct elf_prstatus prstatus_t; ++typedef struct elf_prpsinfo prpsinfo_t; ++ ++__END_DECLS ++ ++#endif /* sys/procfs.h */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/ucontext.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,94 @@ ++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Linux/AVR32 ABI compliant context switching support. */ ++ ++#ifndef _SYS_UCONTEXT_H ++#define _SYS_UCONTEXT_H 1 ++ ++#include ++#include ++#include ++#include ++ ++typedef int greg_t; ++ ++/* Number of general registers. */ ++#define NGREG 16 ++ ++/* Container for all general registers. */ ++typedef elf_gregset_t gregset_t; ++ ++/* Number of each register is the `gregset_t' array. */ ++enum ++{ ++ R0 = 0, ++#define R0 R0 ++ R1 = 1, ++#define R1 R1 ++ R2 = 2, ++#define R2 R2 ++ R3 = 3, ++#define R3 R3 ++ R4 = 4, ++#define R4 R4 ++ R5 = 5, ++#define R5 R5 ++ R6 = 6, ++#define R6 R6 ++ R7 = 7, ++#define R7 R7 ++ R8 = 8, ++#define R8 R8 ++ R9 = 9, ++#define R9 R9 ++ R10 = 10, ++#define R10 R10 ++ R11 = 11, ++#define R11 R11 ++ R12 = 12, ++#define R12 R12 ++ R13 = 13, ++#define R13 R13 ++ R14 = 14, ++#define R14 R14 ++ R15 = 15 ++#define R15 R15 ++}; ++ ++/* Structure to describe FPU registers. */ ++typedef elf_fpregset_t fpregset_t; ++ ++/* Context to describe whole processor state. */ ++typedef struct ++ { ++ gregset_t gregs; ++ fpregset_t fpregs; ++ } mcontext_t; ++ ++/* Userlevel context. */ ++typedef struct ucontext ++{ ++ unsigned long uc_flags; ++ struct ucontext *uc_link; ++ stack_t uc_stack; ++ struct sigcontext uc_mcontext; ++ sigset_t uc_sigmask; /* mask last for extensibility */ ++} ucontext_t; ++ ++#endif /* sys/ucontext.h */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/user.h +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/user.h 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,46 @@ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H ++ ++struct user_fpregs ++{ ++ ++}; ++ ++struct user_regs ++{ ++ unsigned long sr; ++ unsigned long pc; ++ unsigned long lr; ++ unsigned long sp; ++ unsigned long r12; ++ unsigned long r11; ++ unsigned long r10; ++ unsigned long r9; ++ unsigned long r8; ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++ unsigned long r12_orig; ++}; ++ ++struct user ++{ ++ struct user_regs regs; /* general registers */ ++ size_t u_tsize; /* text size (pages) */ ++ size_t u_dsize; /* data size (pages) */ ++ size_t u_ssize; /* stack size (pages) */ ++ unsigned long start_code; /* text starting address */ ++ unsigned long start_data; /* data starting address */ ++ unsigned long start_stack; /* stack starting address */ ++ long int signal; /* signal causing core dump */ ++ struct user_regs * u_ar0; /* help gdb find registers */ ++ unsigned long magic; /* identifies a core file */ ++ char u_comm[32]; /* user command name */ ++}; ++ ++#endif /* _SYS_USER_H */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/syscall.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/syscall.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,81 @@ ++/* ++ * syscall for AVR32/uClibc ++ * ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU Library 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 Library General Public License ++ * for more details. ++ * ++ * You should have received a copy of the GNU Library General Public License ++ * along with this program; if not, write to the Free Software Foundation, ++ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++#include ++ ++ .text ++ ++ /* ++ * long int syscall(long int sysno, ...) ++ */ ++ .global syscall ++ .type syscall, @function ++ .align 2 ++syscall: ++ stm --sp, r3,r5,lr ++ sub lr, sp, -12 ++ mov r8, r12 ++ ldm lr, r3,r5,r9-r12 ++ scall ++ cp.w r12, -4095 ++ brlo .Ldone ++ ++#ifdef __PIC__ ++ lddpc r5, .Lgot ++.Lgotcalc: ++ rsub r5, pc ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall r5[__errno_location@got] ++ st.w r12[0], r3 ++# else ++ ld.w r3, r5[errno@got] ++ st.w r3[0], r12 ++# endif ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall .Lerrno_location ++ st.w r12[0], r3 ++# else ++ lddpc r3, .Lerrno ++ st.w r3[0], r12 ++# endif ++#endif ++ mov r12, -1 ++ ++.Ldone: ++ ldm sp++, r3,r5,pc ++ ++ .align 2 ++#ifdef __PIC__ ++.Lgot: ++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++.Lerrno_location: ++ .long __errno_location ++# else ++.Lerrno: ++ .long errno ++# endif ++#endif ++ ++ ++ .size syscall, . - syscall +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/vfork.S +--- uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/vfork.S 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,55 @@ ++ /* ++ * vfork for uClibc ++ * ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++ /* ++ * Clone the process without copying the address space. The ++ * calling process is suspended until the child either exits ++ * or calls execve. ++ * ++ * This all means that we cannot rely on the stack to store ++ * away registers, since they will be overwritten by the child ++ * as soon as it makes another function call (e.g. execve()). ++ * Fortunately, the Linux kernel preserves LR across system calls. ++ */ ++#include ++#include ++ ++ .global __vfork ++ .type __vfork,@function ++ .align 1 ++__vfork: ++ mov r8, __NR_vfork ++ scall ++ cp.w r12, -4096 ++ retls r12 ++ ++ /* vfork failed, so we may use the stack freely */ ++ pushm r4-r7,lr ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++ rsub r4, r12, 0 ++.L_RGOT: ++ rsub r6, pc ++ mcall r6[__errno_location@got] ++#else ++ rsub r4, r12, 0 ++ mcall .L__errno_location ++#endif ++ st.w r12[0], r4 ++ popm r4-r7,pc,r12=-1 ++ ++ .align 2 ++#ifdef __PIC__ ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++.L__errno_location: ++ .long __errno_location ++#endif ++ .size __vfork, . - __vfork ++ ++ .weak vfork ++ vfork = __vfork +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/create_module.c +--- uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c 2005-08-18 00:49:42.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/create_module.c 2006-06-21 11:35:57.000000000 +0200 +@@ -61,7 +61,8 @@ + { + return __create_module(name, size, 0, 0); + } +-#else ++/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */ ++#elif !defined(__avr32__) + /* Sparc, MIPS, etc don't mistake return values for errors. */ + _syscall2(unsigned long, create_module, const char *, name, size_t, size); + #endif +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/getrusage.c +--- uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c 2005-08-18 00:49:42.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/getrusage.c 2006-06-21 11:35:56.000000000 +0200 +@@ -10,4 +10,4 @@ + #include "syscalls.h" + #include + #include +-_syscall2(int, getrusage, int, who, struct rusage *, usage); ++_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage); +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/open64.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/open64.c +--- uClibc-0.9.28/libc/sysdeps/linux/common/open64.c 2005-08-18 00:49:42.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/open64.c 2006-06-21 11:35:56.000000000 +0200 +@@ -26,7 +26,7 @@ + #endif + + #ifdef __UCLIBC_HAS_LFS__ +-extern int __libc_open (__const char *file, int oflag, mode_t mode); ++extern int __libc_open (__const char *file, int oflag, ...); + + /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, + a third argument is the file protection. */ +diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/__syscall_fcntl.c +--- uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c 2005-08-18 00:49:42.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-06-21 11:35:56.000000000 +0200 +@@ -12,7 +12,7 @@ + #include + + #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 +-extern int __libc_fcntl64(int fd, int cmd, long arg); ++extern int __libc_fcntl64(int fd, int cmd, ...); + #endif + + #define __NR___syscall_fcntl __NR_fcntl +diff -Nur uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h uClibc-0.9.28-avr32-20060621/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h +--- uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-06-21 11:35:57.000000000 +0200 +@@ -0,0 +1,92 @@ ++/* Machine-dependent pthreads configuration and inline functions. ++ ++ Copyright (C) 2005 Atmel Norway ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If not, ++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#include ++ ++static inline int ++_test_and_set (int *p, int v) __THROW ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline test and set */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " tst %0, %3\n" ++ " breq 2f\n" ++ " stcond %1, %3\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=m"(*p) ++ : "m"(*p), "r"(v) ++ : "memory", "cc"); ++ ++ return result; ++} ++ ++#ifndef PT_EI ++# define PT_EI extern inline ++#endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ return _test_and_set(spinlock, 1); ++} ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME stack_pointer ++register char * stack_pointer __asm__ ("sp"); ++ ++/* Compare-and-swap for semaphores. */ ++ ++#define HAS_COMPARE_AND_SWAP ++PT_EI int ++__compare_and_swap(long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* pt-machine.h */ +diff -Nur uClibc-0.9.28/Makefile uClibc-0.9.28-avr32-20060621/Makefile +--- uClibc-0.9.28/Makefile 2005-08-18 00:49:49.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/Makefile 2006-06-21 11:35:57.000000000 +0200 +@@ -163,7 +163,7 @@ + else \ + extra_exclude="" ; \ + fi ; \ +- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \ ++ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \ + | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX) + ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y) + # Remove floating point related headers since float support is disabled. +diff -Nur uClibc-0.9.28/Rules.mak uClibc-0.9.28-avr32-20060621/Rules.mak +--- uClibc-0.9.28/Rules.mak 2005-08-18 00:49:49.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/Rules.mak 2006-06-21 11:35:57.000000000 +0200 +@@ -231,6 +231,10 @@ + UCLIBC_LDSO=ld.so.1 + endif + ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++endif ++ + # Keep the check_gcc from being needlessly executed + ifndef PIEFLAG + ifneq ($(UCLIBC_BUILD_PIE),y) +@@ -266,7 +270,11 @@ + # If -msoft-float isn't supported, we want an error anyway. + # Hmm... might need to revisit this for arm since it has 2 different + # soft float encodings. ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++# GCC on avr32 doesn't support -msoft-float, it's the default. ++else + CPU_CFLAGS += -msoft-float ++endif + ifeq ($(strip $(TARGET_ARCH)),arm) + # No longer needed with current toolchains, but leave it here for now. + # If anyone is actually still using gcc 2.95 (say), they can uncomment it. +diff -Nur uClibc-0.9.28/Rules.mak.orig uClibc-0.9.28-avr32-20060621/Rules.mak.orig +--- uClibc-0.9.28/Rules.mak.orig 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc-0.9.28-avr32-20060621/Rules.mak.orig 2006-06-21 11:35:56.000000000 +0200 +@@ -0,0 +1,358 @@ ++# Rules.make for uClibc ++# ++# Copyright (C) 2000 by Lineo, inc. ++# Copyright (C) 2000-2002 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++ ++#----------------------------------------------------------- ++# This file contains rules which are shared between multiple ++# Makefiles. All normal configuration options live in the ++# file named ".config". Don't mess with this file unless ++# you know what you are doing. ++ ++ ++#----------------------------------------------------------- ++# If you are running a cross compiler, you will want to set ++# 'CROSS' to something more interesting ... Target ++# architecture is determined by asking the CC compiler what ++# arch it compiles things for, so unless your compiler is ++# broken, you should not need to specify TARGET_ARCH. ++# ++# Most people will set this stuff on the command line, i.e. ++# make CROSS=arm-linux- ++# will build uClibc for 'arm'. ++ ++ifndef CROSS ++CROSS= ++endif ++CC = $(CROSS)gcc ++AR = $(CROSS)ar ++LD = $(CROSS)ld ++NM = $(CROSS)nm ++RANLIB = $(CROSS)ranlib ++STRIPTOOL = $(CROSS)strip ++ ++INSTALL = install ++LN = ln ++RM = rm -f ++ ++# Select the compiler needed to build binaries for your development system ++HOSTCC = gcc ++HOSTCFLAGS = -O2 -Wall ++ ++ ++#--------------------------------------------------------- ++# Nothing beyond this point should ever be touched by mere ++# mortals. Unless you hang out with the gods, you should ++# probably leave all this stuff alone. ++MAJOR_VERSION := 0 ++MINOR_VERSION := 9 ++SUBLEVEL := 28 ++VERSION := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL) ++# Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc. ++LC_ALL := C ++export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION LC_ALL ++ ++SHARED_FULLNAME:=libuClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so ++SHARED_MAJORNAME:=libc.so.$(MAJOR_VERSION) ++UCLIBC_LDSO:=ld-uClibc.so.$(MAJOR_VERSION) ++LIBNAME:=libc.a ++LIBC:=$(TOPDIR)libc/$(LIBNAME) ++ ++# Make sure DESTDIR and PREFIX can be used to install ++# PREFIX is a uClibcism while DESTDIR is a common GNUism ++ifndef PREFIX ++PREFIX = $(DESTDIR) ++endif ++ ++# Pull in the user's uClibc configuration ++ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) ++-include $(TOPDIR).config ++endif ++ ++ifndef CROSS ++CROSS=$(subst ",, $(strip $(CROSS_COMPILER_PREFIX))) ++endif ++ ++# A nifty macro to make testing gcc features easier ++check_gcc=$(shell \ ++ if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ ++ then echo "$(1)"; else echo "$(2)"; fi) ++check_as=$(shell \ ++ if $(CC) -Wa,$(1) -Wa,-Z -c -o /dev/null -xassembler /dev/null > /dev/null 2>&1; \ ++ then echo "-Wa,$(1)"; fi) ++ ++# Setup some shortcuts so that silent mode is silent like it should be ++ifeq ($(subst s,,$(MAKEFLAGS)),$(MAKEFLAGS)) ++export MAKE_IS_SILENT=n ++SECHO=@echo ++SHELL_SET_X=set -x ++else ++export MAKE_IS_SILENT=y ++SECHO=-@false ++SHELL_SET_X=set +x ++endif ++ ++# Make certain these contain a final "/", but no "//"s. ++TARGET_ARCH:=$(shell grep -s ^TARGET_ARCH $(TOPDIR)/.config | sed -e 's/^TARGET_ARCH=//' -e 's/"//g') ++RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(RUNTIME_PREFIX)))))) ++DEVEL_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(DEVEL_PREFIX)))))) ++export RUNTIME_PREFIX DEVEL_PREFIX ++ ++ARFLAGS:=cr ++ ++OPTIMIZATION:= ++PICFLAG:=-fPIC ++PIEFLAG_NAME:=-fPIE ++ ++# Some nice CPU specific optimizations ++ifeq ($(strip $(TARGET_ARCH)),i386) ++ OPTIMIZATION+=$(call check_gcc,-mpreferred-stack-boundary=2,) ++ OPTIMIZATION+=$(call check_gcc,-falign-jumps=0 -falign-loops=0,-malign-jumps=0 -malign-loops=0) ++ CPU_CFLAGS-$(CONFIG_386)+=-march=i386 ++ CPU_CFLAGS-$(CONFIG_486)+=-march=i486 ++ CPU_CFLAGS-$(CONFIG_ELAN)+=-march=i486 ++ CPU_CFLAGS-$(CONFIG_586)+=-march=i586 ++ CPU_CFLAGS-$(CONFIG_586MMX)+=$(call check_gcc,-march=pentium-mmx,-march=i586) ++ CPU_CFLAGS-$(CONFIG_686)+=-march=i686 ++ CPU_CFLAGS-$(CONFIG_PENTIUMII)+=$(call check_gcc,-march=pentium2,-march=i686) ++ CPU_CFLAGS-$(CONFIG_PENTIUMIII)+=$(call check_gcc,-march=pentium3,-march=i686) ++ CPU_CFLAGS-$(CONFIG_PENTIUM4)+=$(call check_gcc,-march=pentium4,-march=i686) ++ CPU_CFLAGS-$(CONFIG_K6)+=$(call check_gcc,-march=k6,-march=i586) ++ CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-malign-functions=4 -march=i686) ++ CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686 -malign-functions=0 -malign-jumps=0 -malign-loops=0 ++ CPU_CFLAGS-$(CONFIG_WINCHIPC6)+=$(call check_gcc,-march=winchip-c6,-march=i586) ++ CPU_CFLAGS-$(CONFIG_WINCHIP2)+=$(call check_gcc,-march=winchip2,-march=i586) ++ CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486) -malign-functions=0 -malign-jumps=0 -malign-loops=0 ++ CPU_CFLAGS-$(CONFIG_NEHEMIAH)+=$(call check_gcc,-march=c3-2,-march=i686) ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),arm) ++ OPTIMIZATION+=-fstrict-aliasing ++ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL ++ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB ++ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-mlittle-endian ++ CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mbig-endian ++ CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+= ++ CPU_CFLAGS-$(CONFIG_ARM610)+=-mtune=arm610 -march=armv3 ++ CPU_CFLAGS-$(CONFIG_ARM710)+=-mtune=arm710 -march=armv3 ++ CPU_CFLAGS-$(CONFIG_ARM720T)+=-mtune=arm7tdmi -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM920T)+=-mtune=arm9tdmi -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM922T)+=-mtune=arm9tdmi -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM926T)+=-mtune=arm9tdmi -march=armv5 ++ CPU_CFLAGS-$(CONFIG_ARM1136JF_S)+=-mtune=arm1136jf-s -march=armv6 ++ CPU_CFLAGS-$(CONFIG_ARM_SA110)+=-mtune=strongarm110 -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4 ++ CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110) ++ CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv4 -Wa,-mcpu=xscale ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),mips) ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_1)+=-mips1 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_2)+=-mips2 -mtune=mips2 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_3)+=-mips3 -mtune=mips3 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_4)+=-mips4 -mtune=mips4 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS32)+=-mips32 -mtune=mips32 ++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64)+=-mips64 -mtune=mips32 ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),sh) ++ OPTIMIZATION+=-fstrict-aliasing ++ OPTIMIZATION+= $(call check_gcc,-mprefergot,) ++ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL ++ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB ++ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-ml ++ CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mb ++ CPU_CFLAGS-$(CONFIG_SH2)+=-m2 ++ CPU_CFLAGS-$(CONFIG_SH3)+=-m3 ++ifeq ($(strip $(UCLIBC_HAS_FLOATS)),y) ++ CPU_CFLAGS-$(CONFIG_SH2A)+=-m2a ++ CPU_CFLAGS-$(CONFIG_SH4)+=-m4 ++else ++ CPU_CFLAGS-$(CONFIG_SH2A)+=-m2a-nofpu ++ CPU_CFLAGS-$(CONFIG_SH4)+=-m4-nofpu ++endif ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),sh64) ++ OPTIMIZATION+=-fstrict-aliasing ++ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN):=-EL ++ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN):=-EB ++ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN):=-ml ++ CPU_CFLAGS-$(ARCH_BIG_ENDIAN):=-mb ++ CPU_CFLAGS-$(CONFIG_SH5)+=-m5-32media ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),h8300) ++ CPU_LDFLAGS-$(CONFIG_H8300H)+= -ms8300h ++ CPU_LDFLAGS-$(CONFIG_H8S) += -ms8300s ++ CPU_CFLAGS-$(CONFIG_H8300H) += -mh -mint32 -fsigned-char ++ CPU_CFLAGS-$(CONFIG_H8S) += -ms -mint32 -fsigned-char ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),cris) ++ CPU_LDFLAGS-$(CONFIG_CRIS)+=-mcrislinux ++ CPU_CFLAGS-$(CONFIG_CRIS)+=-mlinux ++ PICFLAG:=-fpic ++ PIEFLAG_NAME:=-fpie ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),powerpc) ++# PowerPC can hold 8192 entries in its GOT with -fpic which is more than ++# enough. Therefore use -fpic which will reduce code size and generates ++# faster code. ++ PICFLAG:=-fpic ++ PIEFLAG_NAME:=-fpie ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),frv) ++ CPU_LDFLAGS-$(CONFIG_FRV)+=-melf32frvfd ++ CPU_CFLAGS-$(CONFIG_FRV)+=-mfdpic ++ # Using -pie causes the program to have an interpreter, which is ++ # forbidden, so we must make do with -shared. Unfortunately, ++ # -shared by itself would get us global function descriptors ++ # and calls through PLTs, dynamic resolution of symbols, etc, ++ # which would break as well, but -Bsymbolic comes to the rescue. ++ export LDPIEFLAG:=-shared -Bsymbolic ++ UCLIBC_LDSO=ld.so.1 ++endif ++ ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++endif ++ ++# Keep the check_gcc from being needlessly executed ++ifndef PIEFLAG ++ifneq ($(UCLIBC_BUILD_PIE),y) ++export PIEFLAG:= ++else ++export PIEFLAG:=$(call check_gcc,$(PIEFLAG_NAME),$(PICFLAG)) ++endif ++endif ++# We need to keep track of both the CC PIE flag (above) as ++# well as the LD PIE flag (below) because we can't rely on ++# gcc passing -pie if we used -fPIE ++ifndef LDPIEFLAG ++ifneq ($(UCLIBC_BUILD_PIE),y) ++export LDPIEFLAG:= ++else ++export LDPIEFLAG:=$(shell $(LD) --help | grep -q pie && echo "-Wl,-pie") ++endif ++endif ++ ++# Use '-Os' optimization if available, else use -O2, allow Config to override ++OPTIMIZATION+=$(call check_gcc,-Os,-O2) ++# Use the gcc 3.4 -funit-at-a-time optimization when available ++OPTIMIZATION+=$(call check_gcc,-funit-at-a-time,) ++ ++# Add a bunch of extra pedantic annoyingly strict checks ++XWARNINGS=$(subst ",, $(strip $(WARNINGS))) -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing ++XARCH_CFLAGS=$(subst ",, $(strip $(ARCH_CFLAGS))) ++CPU_CFLAGS=$(subst ",, $(strip $(CPU_CFLAGS-y))) ++ ++LDADD_LIBFLOAT= ++ifeq ($(strip $(UCLIBC_HAS_SOFT_FLOAT)),y) ++# Add -msoft-float to the CPU_FLAGS since ldso and libdl ignore CFLAGS. ++# If -msoft-float isn't supported, we want an error anyway. ++# Hmm... might need to revisit this for arm since it has 2 different ++# soft float encodings. ++ CPU_CFLAGS += -msoft-float ++ifeq ($(strip $(TARGET_ARCH)),arm) ++# No longer needed with current toolchains, but leave it here for now. ++# If anyone is actually still using gcc 2.95 (say), they can uncomment it. ++# LDADD_LIBFLOAT=-lfloat ++endif ++endif ++ ++SSP_DISABLE_FLAGS:=$(call check_gcc,-fno-stack-protector,) ++ifeq ($(UCLIBC_BUILD_SSP),y) ++SSP_CFLAGS:=$(call check_gcc,-fno-stack-protector-all,) ++SSP_CFLAGS+=$(call check_gcc,-fstack-protector,) ++SSP_ALL_CFLAGS:=$(call check_gcc,-fstack-protector-all,) ++else ++SSP_CFLAGS:=$(SSP_DISABLE_FLAGS) ++endif ++ ++# Some nice CFLAGS to work with ++CFLAGS:=$(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \ ++ -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I. ++LDFLAGS_NOSTRIP:=$(CPU_LDFLAGS-y) -shared --warn-common --warn-once -z combreloc -z defs ++ ++ifeq ($(DODEBUG),y) ++ #CFLAGS += -g3 ++ CFLAGS += -O0 -g3 ++ LDFLAGS := $(LDFLAGS_NOSTRIP) ++ STRIPTOOL:= true -Since_we_are_debugging ++else ++ CFLAGS += $(OPTIMIZATION) $(XARCH_CFLAGS) ++ LDFLAGS := $(LDFLAGS_NOSTRIP) -s ++endif ++ ++ifeq ($(UCLIBC_BUILD_RELRO),y) ++LDFLAGS+=-z relro ++endif ++ ++ifeq ($(UCLIBC_BUILD_NOW),y) ++LDFLAGS+=-z now ++endif ++ ++# Sigh, some stupid versions of gcc can't seem to cope with '-iwithprefix include' ++#CFLAGS+=-iwithprefix include ++CFLAGS+=-isystem $(shell $(CC) -print-file-name=include) ++ ++ifneq ($(DOASSERTS),y) ++ CFLAGS += -DNDEBUG ++endif ++ ++CFLAGS_NOPIC:=$(CFLAGS) ++ifeq ($(DOPIC),y) ++ CFLAGS += $(PICFLAG) ++endif ++ ++ifeq ($(DL_FINI_CRT_COMPAT),y) ++CFLAGS += -D_DL_FINI_CRT_COMPAT ++endif ++ ++# Keep the check_as from being needlessly executed ++ASFLAGS = $(CFLAGS) ++ifndef ASFLAGS_NOEXEC ++ifeq ($(UCLIBC_BUILD_NOEXECSTACK),y) ++export ASFLAGS_NOEXEC := $(call check_as,--noexecstack) ++else ++export ASFLAGS_NOEXEC := ++endif ++endif ++ASFLAGS += $(ASFLAGS_NOEXEC) ++ ++LIBGCC_CFLAGS ?= $(CFLAGS) $(CPU_CFLAGS-y) ++LIBGCC:=$(shell $(CC) $(LIBGCC_CFLAGS) -print-libgcc-file-name) ++LIBGCC_DIR:=$(dir $(LIBGCC)) ++ ++######################################## ++# ++# uClinux shared lib support ++# ++ ++ifeq ($(CONFIG_BINFMT_SHARED_FLAT),y) ++ # For the shared version of this, we specify no stack and its library ID ++ FLTFLAGS += -s 0 ++ LIBID=1 ++ export LIBID FLTFLAGS ++ SHARED_TARGET = lib/libc ++endif ++ ++TARGET_ARCH:=$(strip $(subst ",, $(strip $(TARGET_ARCH)))) +diff -Nur uClibc-0.9.28/utils/ldd.c uClibc-0.9.28-avr32-20060621/utils/ldd.c +--- uClibc-0.9.28/utils/ldd.c 2005-08-18 00:49:41.000000000 +0200 ++++ uClibc-0.9.28-avr32-20060621/utils/ldd.c 2006-06-21 11:35:57.000000000 +0200 +@@ -56,6 +56,11 @@ + #define ELFCLASSM ELFCLASS32 + #endif + ++#if defined(__avr32__) ++#define MATCH_MACHINE(x) (x == EM_AVR32) ++#define ELFCLASSM ELFCLASS32 ++#endif ++ + #if defined(__s390__) + #define MATCH_MACHINE(x) (x == EM_S390) + #define ELFCLASSM ELFCLASS32 diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch new file mode 100644 index 0000000000..6608b4df94 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch @@ -0,0 +1,4080 @@ +Index: uClibc-0.9.28-avr32/Makefile +=================================================================== +--- uClibc-0.9.28-avr32.orig/Makefile 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -163,7 +163,7 @@ install_dev: + else \ + extra_exclude="" ; \ + fi ; \ +- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \ ++ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \ + | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX) + ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y) + # Remove floating point related headers since float support is disabled. +Index: uClibc-0.9.28-avr32/extra/scripts/fix_includes.sh +=================================================================== +--- uClibc-0.9.28-avr32.orig/extra/scripts/fix_includes.sh 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/extra/scripts/fix_includes.sh 2006-10-19 15:05:52.000000000 +0200 +@@ -78,36 +78,6 @@ if [ ! -d "$KERNEL_SOURCE" ]; then + exit 1; + fi; + +-if [ -f "$KERNEL_SOURCE/Makefile" ] ; then +-# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION +-eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile` +-else +-ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2` +-VERSION=`echo "$ver" | cut -d '.' -f 1` +-PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2` +-if echo "$ver" | grep -q '-' ; then +-SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1` +-EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"` +-else +-SUBLEVEL=`echo "$ver" | cut -d '.' -f 3` +-#EXTRAVERSION= +-fi +-fi +-if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ] +-then +- echo "Unable to determine version for kernel headers" +- echo -e "\tprovided in directory $KERNEL_SOURCE" +- exit 1 +-fi +- +-if [ "$MAKE_IS_SILENT" != "y" ]; then +-echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}" +-echo -e "\n" +-echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'" +-echo -e "\tprovided in directory $KERNEL_SOURCE" +-echo -e "\n" +-fi +- + # Create a symlink to include/asm + + rm -f include/asm* +@@ -172,7 +142,7 @@ fi; + + + # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory +-if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then ++if [ -d $KERNEL_SOURCE/include/asm-generic ] ; then + ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic + fi; + +Index: uClibc-0.9.28-avr32/libc/Makefile +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/Makefile 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -59,7 +59,7 @@ $(LIBNAME) shared_$(LIBNAME) ar-target: + $(AR) dN 2 $(LIBNAME) $$objs && \ + $(AR) dN 2 $(LIBNAME) $$objs + @for objfile in obj.signal \ +- obj.string.generic obj.string.$(TARGET_ARCH) obj.string \ ++ obj.string obj.string.generic obj.string.$(TARGET_ARCH) \ + obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \ + if [ -e $$objfile ] ; then \ + if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/getrusage.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/getrusage.c 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/getrusage.c 2006-10-19 15:05:52.000000000 +0200 +@@ -10,4 +10,4 @@ + #include "syscalls.h" + #include + #include +-_syscall2(int, getrusage, int, who, struct rusage *, usage); ++_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage); +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/__syscall_fcntl.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-10-19 15:05:52.000000000 +0200 +@@ -12,7 +12,7 @@ + #include + + #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 +-extern int __libc_fcntl64(int fd, int cmd, long arg); ++extern int __libc_fcntl64(int fd, int cmd, ...); + #endif + + #define __NR___syscall_fcntl __NR_fcntl +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/open64.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/open64.c 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/open64.c 2006-10-19 15:05:52.000000000 +0200 +@@ -26,7 +26,7 @@ + #endif + + #ifdef __UCLIBC_HAS_LFS__ +-extern int __libc_open (__const char *file, int oflag, mode_t mode); ++extern int __libc_open (__const char *file, int oflag, ...); + + /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, + a third argument is the file protection. */ +Index: uClibc-0.9.28-avr32/extra/Configs/Config.avr32 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/extra/Configs/Config.avr32 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,42 @@ ++# ++# For a description of the syntax of this configuration file, ++# see extra/config/Kconfig-language.txt ++# ++ ++config HAVE_ELF ++ bool ++ default y ++ ++config TARGET_ARCH ++ default "avr32" ++ ++config ARCH_CFLAGS ++ string ++ ++config ARCH_LDFLAGS ++ string ++ ++config LIBGCC_CFLAGS ++ string ++ ++config ARCH_SUPPORTS_BIG_ENDIAN ++ bool ++ default y ++ ++config UCLIBC_COMPLETELY_PIC ++ select FORCE_SHAREABLE_TEXT_SEGMENTS ++ bool ++ default y ++ ++choice ++ prompt "Target CPU Type" ++ default CONFIG_AP7000 ++ ++config CONFIG_AP7000 ++ bool "AP7000" ++ ++endchoice ++ ++config LINKRELAX ++ bool "Enable linker optimizations" ++ default n +Index: uClibc-0.9.28-avr32/extra/Configs/Config.in +=================================================================== +--- uClibc-0.9.28-avr32.orig/extra/Configs/Config.in 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/extra/Configs/Config.in 2006-10-19 15:05:52.000000000 +0200 +@@ -16,6 +16,9 @@ config TARGET_alpha + config TARGET_arm + bool "arm" + ++config TARGET_avr32 ++ bool "avr32" ++ + config TARGET_bfin + bool "bfin" + +@@ -83,6 +86,10 @@ if TARGET_arm + source "extra/Configs/Config.arm" + endif + ++if TARGET_avr32 ++source "extra/Configs/Config.avr32" ++endif ++ + if TARGET_bfin + source "extra/Configs/Config.bfin" + endif +Index: uClibc-0.9.28-avr32/include/elf.h +=================================================================== +--- uClibc-0.9.28-avr32.orig/include/elf.h 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/include/elf.h 2006-10-19 15:05:52.000000000 +0200 +@@ -261,6 +261,8 @@ typedef struct + #define EM_NIOS32 0xfebb /* Altera Nios 32 */ + #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */ + ++#define EM_AVR32 0x18ad ++ + /* V850 backend magic number. Written in the absense of an ABI. */ + #define EM_CYGNUS_V850 0x9080 + +@@ -2687,6 +2689,55 @@ typedef Elf32_Addr Elf32_Conflict; + /* Keep this the last entry. */ + #define R_V850_NUM 25 + ++/* Atmel AVR32 relocations. */ ++#define R_AVR32_NONE 0 ++#define R_AVR32_32 1 ++#define R_AVR32_16 2 ++#define R_AVR32_8 3 ++#define R_AVR32_32_PCREL 4 ++#define R_AVR32_16_PCREL 5 ++#define R_AVR32_8_PCREL 6 ++#define R_AVR32_DIFF32 7 ++#define R_AVR32_DIFF16 8 ++#define R_AVR32_DIFF8 9 ++#define R_AVR32_GOT32 10 ++#define R_AVR32_GOT16 11 ++#define R_AVR32_GOT8 12 ++#define R_AVR32_21S 13 ++#define R_AVR32_16U 14 ++#define R_AVR32_16S 15 ++#define R_AVR32_8S 16 ++#define R_AVR32_8S_EXT 17 ++#define R_AVR32_22H_PCREL 18 ++#define R_AVR32_18W_PCREL 19 ++#define R_AVR32_16B_PCREL 20 ++#define R_AVR32_16N_PCREL 21 ++#define R_AVR32_14UW_PCREL 22 ++#define R_AVR32_11H_PCREL 23 ++#define R_AVR32_10UW_PCREL 24 ++#define R_AVR32_9H_PCREL 25 ++#define R_AVR32_9UW_PCREL 26 ++#define R_AVR32_HI16 27 ++#define R_AVR32_LO16 28 ++#define R_AVR32_GOTPC 29 ++#define R_AVR32_GOTCALL 30 ++#define R_AVR32_LDA_GOT 31 ++#define R_AVR32_GOT21S 32 ++#define R_AVR32_GOT18SW 33 ++#define R_AVR32_GOT16S 34 ++#define R_AVR32_GOT7UW 35 ++#define R_AVR32_32_CPENT 36 ++#define R_AVR32_CPCALL 37 ++#define R_AVR32_16_CP 38 ++#define R_AVR32_9W_CP 39 ++#define R_AVR32_RELATIVE 40 ++#define R_AVR32_GLOB_DAT 41 ++#define R_AVR32_JMP_SLOT 42 ++#define R_AVR32_ALIGN 43 ++#define R_AVR32_NUM 44 ++ ++/* AVR32 dynamic tags */ ++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ + + #define R_H8_NONE 0 + #define R_H8_DIR32 1 +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,93 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../../ ++include $(TOPDIR)Rules.mak ++ASFLAGS=$(CFLAGS) ++ ++CRT_SRC = crt1.S ++CRT_OBJ = crt1.o ++SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ)) ++CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o ++ ++SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \ ++ bsd-_setjmp.S sigrestorer.S syscall.S ++SOBJS=$(patsubst %.S,%.o, $(SSRC)) ++ ++CSRC=clone.c brk.c sigaction.c mmap.c ++COBJS=$(patsubst %.c,%.o, $(CSRC)) ++ ++OBJS=$(SOBJS) $(COBJS) ++ ++OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS) ++ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ ++ ++$(CRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SCRT_OBJ): $(CRT_SRC) ++ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(SOBJS): %.o : %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++$(COBJS): %.o : %.c ++ $(CC) $(CFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $*.o ++ ++ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) ++crti.o: crti.S ++ $(CC) $(ASFLAGS) -c crti.S -o crti.o ++ ++$(TOPDIR)lib/crti.o: crti.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crti.o $(TOPDIR)lib/ ++ ++crtn.o: crtn.S ++ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o ++ ++$(TOPDIR)lib/crtn.o: crtn.o ++ $(INSTALL) -d $(TOPDIR)lib/ ++ cp crtn.o $(TOPDIR)lib/ ++else ++$(TOPDIR)lib/crti.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o ++$(TOPDIR)lib/crtn.o: ++ $(INSTALL) -d $(TOPDIR)lib/ ++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o ++endif ++ ++ ++headers: ++# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/ ++ ++clean: ++ $(RM) *.[oa] *~ core ++ $(RM) bits/sysnum.h ++ $(RM) gmon-start.S ++ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/__longjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/__longjmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,17 @@ ++/* longjmp for AVR32 ++ * ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ .global __longjmp ++ .type __longjmp,"function" ++ .align 1 ++__longjmp: ++ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ mov r12, r11 /* get the return value right */ ++ mustr r8 /* restore status register (lower half) */ ++ cp r12, 0 /* can't return zero */ ++ frs ++ moveq r12, 1 ++ mov pc,lr ++ .size __longjmp, . - __longjmp +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/_mmap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/_mmap.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++#define __NR_mmap2 __NR_mmap ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/atomicity.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,86 @@ ++/* Low-level functions for atomic operations. AVR32 version. ++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _ATOMICITY_H ++#define _ATOMICITY_H 1 ++ ++#include ++ ++static inline int ++__attribute__((unused)) ++exchange_and_add (volatile uint32_t *mem, int val) ++{ ++ int tmp, result; ++ ++ __asm__ __volatile__( ++ "/* Inline exchange and add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %3\n" ++ " add %1, %0, %4\n" ++ " stcond %2, %1\n" ++ " brne 1b" ++ : "=&r"(result), "=&r"(tmp), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++static inline void ++__attribute__((unused)) ++atomic_add (volatile uin32_t *mem, int val) ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline atomic add */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " add %0, %3\n" ++ " stcond %2, %0\n" ++ " brne 1b" ++ : "=&r"(result), "=m"(*mem) ++ : "m"(*mem), "r"(val) ++ : "cc", "memory"); ++} ++ ++static inline int ++__attribute__((unused)) ++compare_and_swap(volatile long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* atomicity.h */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/byteswap.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* Macros to swap the order of bytes in integer values. ++ Copyright (C) 2005 Atmel Norway. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H ++# error "Never use directly; include instead." ++#endif ++ ++#ifndef _BITS_BYTESWAP_H ++#define _BITS_BYTESWAP_H 1 ++ ++/* Swap bytes in 16 bit value. */ ++#if defined __GNUC__ ++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) ++#else ++/* This is better than nothing. */ ++static __inline unsigned short int ++__bswap_16 (unsigned short int __bsx) ++{ ++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); ++} ++#endif ++ ++/* Swap bytes in 32 bit value. */ ++#if defined __GNUC__ ++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) ++#else ++static __inline unsigned int ++__bswap_32 (unsigned int __bsx) ++{ ++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | ++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); ++} ++#endif ++ ++#if defined __GNUC__ ++/* Swap bytes in 64 bit value. */ ++# define __bswap_constant_64(x) \ ++ ((((x) & 0xff00000000000000ull) >> 56) \ ++ | (((x) & 0x00ff000000000000ull) >> 40) \ ++ | (((x) & 0x0000ff0000000000ull) >> 24) \ ++ | (((x) & 0x000000ff00000000ull) >> 8) \ ++ | (((x) & 0x00000000ff000000ull) << 8) \ ++ | (((x) & 0x0000000000ff0000ull) << 24) \ ++ | (((x) & 0x000000000000ff00ull) << 40) \ ++ | (((x) & 0x00000000000000ffull) << 56)) ++ ++# define __bswap_64(x) \ ++ (__extension__ \ ++ ({ \ ++ union { \ ++ __extension__ unsigned long long int __ll; \ ++ unsigned int __l[2]; \ ++ } __w, __r; \ ++ if (__builtin_constant_p(x)) \ ++ __r.__ll = __bswap_constant_64(x); \ ++ else { \ ++ __w.__ll = (x); \ ++ __r.__l[0] = __bswap_32(__w.__l[1]); \ ++ __r.__l[1] = __bswap_32(__w.__l[0]); \ ++ } \ ++ __r.__ll; \ ++ })) ++#endif ++ ++#endif /* _BITS_BYTESWAP_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/endian.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/endian.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,7 @@ ++/* AVR32 is big-endian */ ++ ++#ifndef _ENDIAN_H ++# error "Never use directly; include instead." ++#endif ++ ++#define __BYTE_ORDER __BIG_ENDIAN +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,167 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * This file is part of the Linux kernel ++ */ ++#ifndef _FCNTL_H ++# error "Never use directly; include instead." ++#endif ++ ++#include ++ ++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files ++ located on an ext2 file system */ ++#define O_ACCMODE 0003 ++#define O_RDONLY 00 ++#define O_WRONLY 01 ++#define O_RDWR 02 ++#define O_CREAT 0100 /* not fcntl */ ++#define O_EXCL 0200 /* not fcntl */ ++#define O_NOCTTY 0400 /* not fcntl */ ++#define O_TRUNC 01000 /* not fcntl */ ++#define O_APPEND 02000 ++#define O_NONBLOCK 04000 ++#define O_NDELAY O_NONBLOCK ++#define O_SYNC 010000 ++#define O_ASYNC 020000 ++ ++#ifdef __USE_GNU ++# define O_DIRECTORY 040000 /* must be a directory */ ++# define O_NOFOLLOW 0100000 /* don't follow links */ ++# define O_DIRECT 0200000 /* direct disk access */ ++#endif ++ ++#ifdef __USE_LARGEFILE64 ++# define O_LARGEFILE 0400000 ++#endif ++ ++/* For now Linux has synchronisity options for data and read operations. ++ We define the symbols here but let them do the same as O_SYNC since ++ this is a superset. */ ++#if defined __USE_POSIX199309 || defined __USE_UNIX98 ++# define O_DSYNC O_SYNC /* Synchronize data. */ ++# define O_RSYNC O_SYNC /* Synchronize read operations. */ ++#endif ++ ++#define F_DUPFD 0 /* dup */ ++#define F_GETFD 1 /* get close_on_exec */ ++#define F_SETFD 2 /* set/clear close_on_exec */ ++#define F_GETFL 3 /* get file->f_flags */ ++#define F_SETFL 4 /* set file->f_flags */ ++ ++#ifndef __USE_FILE_OFFSET64 ++# define F_GETLK 5 ++# define F_SETLK 6 ++# define F_SETLKW 7 ++#else ++# define F_GETLK F_GETLK64 ++# define F_SETLK F_SETLK64 ++# define F_SETLKW F_SETLKW64 ++#endif ++#define F_GETLK64 12 /* using 'struct flock64' */ ++#define F_SETLK64 13 ++#define F_SETLKW64 14 ++ ++#if defined __USE_BSD || defined __USE_XOPEN2K ++# define F_SETOWN 8 /* for sockets. */ ++# define F_GETOWN 9 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETSIG 10 /* for sockets. */ ++# define F_GETSIG 11 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETLEASE 1024 /* Set a lease. */ ++# define F_GETLEASE 1025 /* Enquire what lease is active. */ ++# define F_NOTIFY 1026 /* Request notfications on a directory. */ ++#endif ++ ++/* for F_[GET|SET]FL */ ++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++/* for posix fcntl() and lockf() */ ++#define F_RDLCK 0 ++#define F_WRLCK 1 ++#define F_UNLCK 2 ++ ++/* for old implementation of bsd flock () */ ++#define F_EXLCK 4 /* or 3 */ ++#define F_SHLCK 8 /* or 4 */ ++ ++/* for leases */ ++#define F_INPROGRESS 16 ++ ++#ifdef __USE_BSD ++/* operations for bsd flock(), also used by the kernel implementation */ ++# define LOCK_SH 1 /* shared lock */ ++# define LOCK_EX 2 /* exclusive lock */ ++# define LOCK_NB 4 /* or'd with one of the above to prevent ++ blocking */ ++# define LOCK_UN 8 /* remove lock */ ++#endif ++ ++#ifdef __USE_GNU ++# define LOCK_MAND 32 /* This is a mandatory flock */ ++# define LOCK_READ 64 /* ... Which allows concurrent ++ read operations */ ++# define LOCK_WRITE 128 /* ... Which allows concurrent ++ write operations */ ++# define LOCK_RW 192 /* ... Which allows concurrent ++ read & write ops */ ++#endif ++ ++#ifdef __USE_GNU ++/* Types of directory notifications that may be requested with F_NOTIFY. */ ++# define DN_ACCESS 0x00000001 /* File accessed. */ ++# define DN_MODIFY 0x00000002 /* File modified. */ ++# define DN_CREATE 0x00000004 /* File created. */ ++# define DN_DELETE 0x00000008 /* File removed. */ ++# define DN_RENAME 0x00000010 /* File renamed. */ ++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ ++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ ++#endif ++ ++struct flock { ++ short l_type; ++ short l_whence; ++#ifndef __USE_FILE_OFFSET64 ++ __off_t l_start; ++ __off_t l_len; ++#else ++ __off64_t l_start; ++ __off64_t l_len; ++#endif ++ __pid_t l_pid; ++}; ++ ++#ifdef __USE_LARGEFILE64 ++struct flock64 { ++ short l_type; ++ short l_whence; ++ __off64_t l_start; ++ __off64_t l_len; ++ __pid_t l_pid; ++}; ++#endif ++ ++/* Define some more compatibility macros to be backward compatible with ++ * BSD systems which did not managed to hide these kernel macros. */ ++#ifdef __USE_BSD ++# define FAPPEND O_APPEND ++# define FFSYNC O_FSYNC ++# define FASYNC O_ASYNC ++# define FNONBLOCK O_NONBLOCK ++# define FNDELAY O_NDELAY ++#endif /* Use BSD. */ ++ ++/* Advise to `posix_fadvise'. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ ++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ ++#endif +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_stat.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,63 @@ ++#ifndef _BITS_STAT_STRUCT_H ++#define _BITS_STAT_STRUCT_H ++ ++/* ++ * This file provides struct stat, taken from kernel 2.6.4 ++ * (include/asm-avr32/stat.h revision 1.1). ++ */ ++ ++struct kernel_stat { ++ unsigned long st_dev; ++ unsigned long st_ino; ++ unsigned short st_mode; ++ unsigned short st_nlink; ++ unsigned short st_uid; ++ unsigned short st_gid; ++ unsigned long st_rdev; ++ unsigned long st_size; ++ unsigned long st_blksize; ++ unsigned long st_blocks; ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++#define STAT_HAVE_NSEC 1 ++ ++struct kernel_stat64 { ++ unsigned long long st_dev; ++ ++ unsigned long long st_ino; ++ unsigned int st_mode; ++ unsigned int st_nlink; ++ ++ unsigned long st_uid; ++ unsigned long st_gid; ++ ++ unsigned long long st_rdev; ++ ++ long long st_size; ++ unsigned long __pad1; ++ unsigned long st_blksize; ++ ++ unsigned long long st_blocks; ++ ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++#endif /* _BITS_STAT_STRUCT_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_types.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,56 @@ ++/* Note that we use the exact same include guard #define names ++ * as asm/posix_types.h. This will avoid gratuitous conflicts ++ * with the posix_types.h kernel header, and will ensure that ++ * our private content, and not the kernel header, will win. ++ * -Erik ++ */ ++#ifndef __ASM_AVR32_POSIX_TYPES_H ++#define __ASM_AVR32_POSIX_TYPES_H ++ ++/* ++ * This file is generally used by user-level software, so you need to ++ * be a little careful about namespace pollution etc. Also, we cannot ++ * assume GCC is being used. ++ */ ++ ++typedef unsigned long __kernel_dev_t; ++typedef unsigned long __kernel_ino_t; ++typedef unsigned short __kernel_mode_t; ++typedef unsigned short __kernel_nlink_t; ++typedef long __kernel_off_t; ++typedef int __kernel_pid_t; ++typedef unsigned short __kernel_ipc_pid_t; ++typedef unsigned int __kernel_uid_t; ++typedef unsigned int __kernel_gid_t; ++typedef unsigned long __kernel_size_t; ++typedef int __kernel_ssize_t; ++typedef int __kernel_ptrdiff_t; ++typedef long __kernel_time_t; ++typedef long __kernel_suseconds_t; ++typedef long __kernel_clock_t; ++typedef int __kernel_timer_t; ++typedef int __kernel_clockid_t; ++typedef int __kernel_daddr_t; ++typedef char * __kernel_caddr_t; ++typedef unsigned short __kernel_uid16_t; ++typedef unsigned short __kernel_gid16_t; ++typedef unsigned int __kernel_uid32_t; ++typedef unsigned int __kernel_gid32_t; ++ ++typedef unsigned short __kernel_old_uid_t; ++typedef unsigned short __kernel_old_gid_t; ++typedef unsigned short __kernel_old_dev_t; ++ ++#ifdef __GNUC__ ++typedef long long __kernel_loff_t; ++#endif ++ ++typedef struct { ++#if defined(__USE_ALL) ++ int val[2]; ++#else ++ int __val[2]; ++#endif ++} __kernel_fsid_t; ++ ++#endif /* __ASM_AVR32_POSIX_TYPES_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/machine-gmon.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,69 @@ ++/* Machine-dependent definitions for profiling support. AVR32 version. ++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define mcount_internal __mcount_internal ++ ++#define _MCOUNT_DECL(frompc, selfpc) \ ++static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc) ++ ++/* ++ * This mcount implementation expects to get called after the prologue ++ * has been run. It also expects that r7 contains a valid frame ++ * pointer. ++ * ++ * When profiling, the compiler should generate something like this at ++ * each function entry: ++ * ++ * pushm r0-r7,lr // lr mandatory, others optional ++ * mov r7, sp ++ * // rest of prologue goes here ++ * mcall pc[.LC1 - .] ++ * // rest of function goes here ++ * .LC1: ++ * .long mcount ++ * ++ * or for PIC: ++ * ++ * pushm r0-r7,lr ++ * mov r7, sp ++ * // rest of prologue goes here ++ * lddpc r0, .LC1 ++ * .L1: rsub r0, pc ++ * mcall r0[mcount@GOT] ++ * // rest of function goes here ++ * .LC1: ++ * .long .L1 - _GLOBAL_OFFSET_TABLE_ ++ * ++ * This way, when mcount() is called, r7 points to the calling ++ * function's return address. It is guaranteed that calling mcount ++ * will clobber no registers except LR, which is unavoidable. ++ */ ++#define MCOUNT asm( \ ++ " .align 4\n" \ ++ " .global _mcount\n" \ ++ " .type _mcount,@function\n" \ ++ "_mcount:\n" \ ++ " pushm r8-r12,lr\n" \ ++ " mov r11, lr\n" \ ++ " ld.w r12, r7[0]\n" \ ++ " rcall __mcount_internal\n" \ ++ " popm r8-r12,pc\n" \ ++ " .size _mcount, . - _mcount\n" \ ++ " .weak mcount\n" \ ++ " mcount = _mcount"); +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/mman.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/mman.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* Definitions for POSIX memory map interface. Linux/AVR32 version. ++ Copyright (C) 1997, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_MMAN_H ++# error "Never include this file directly. Use instead" ++#endif ++ ++/* The following definitions basically come from the kernel headers. ++ But the kernel header is not namespace clean. */ ++ ++ ++/* Protections are chosen from these bits, OR'd together. The ++ implementation does not necessarily support PROT_EXEC or PROT_WRITE ++ without PROT_READ. The only guarantees are that no writing will be ++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ ++ ++#define PROT_READ 0x1 /* Page can be read. */ ++#define PROT_WRITE 0x2 /* Page can be written. */ ++#define PROT_EXEC 0x4 /* Page can be executed. */ ++#define PROT_NONE 0x0 /* Page can not be accessed. */ ++ ++/* Sharing types (must choose one and only one of these). */ ++#define MAP_SHARED 0x01 /* Share changes. */ ++#define MAP_PRIVATE 0x02 /* Changes are private. */ ++#ifdef __USE_MISC ++# define MAP_TYPE 0x0f /* Mask for type of mapping. */ ++#endif ++ ++/* Other flags. */ ++#define MAP_FIXED 0x10 /* Interpret addr exactly. */ ++#ifdef __USE_MISC ++# define MAP_FILE 0 ++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ ++# define MAP_ANON MAP_ANONYMOUS ++#endif ++ ++/* These are Linux-specific. */ ++#ifdef __USE_MISC ++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ ++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ ++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ ++# define MAP_LOCKED 0x2000 /* Lock the mapping. */ ++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ ++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ ++# define MAP_NONBLOCK 0x10000 /* do not block on IO */ ++#endif ++ ++/* Flags to `msync'. */ ++#define MS_ASYNC 1 /* Sync memory asynchronously. */ ++#define MS_SYNC 4 /* Synchronous memory sync. */ ++#define MS_INVALIDATE 2 /* Invalidate the caches. */ ++ ++/* Flags for `mlockall'. */ ++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ ++#define MCL_FUTURE 2 /* Lock all additions to address ++ space. */ ++ ++/* Flags for `mremap'. */ ++#ifdef __USE_GNU ++# define MREMAP_MAYMOVE 1 ++#endif ++ ++/* Advise to `madvise'. */ ++#ifdef __USE_BSD ++# define MADV_NORMAL 0 /* No further special treatment. */ ++# define MADV_RANDOM 1 /* Expect random page references. */ ++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define MADV_WILLNEED 3 /* Will need these pages. */ ++# define MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif ++ ++/* The POSIX people had to invent similar names for the same things. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/profil-counter.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Low-level statistical profiling support function. Linux/AVR32 version. ++ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include ++ ++void ++profil_counter(int signo, siginfo_t *si, struct sigcontext *sc) ++{ ++ profil_count((void *)sc->pc); ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/setjmp.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,21 @@ ++/* ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++#ifndef _SETJMP_H ++# error "Never include directly; use instead." ++#endif ++ ++#ifndef _ASM ++/* ++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are ++ * not saved. ++ */ ++typedef int __jmp_buf[11]; ++#endif ++ ++#define __JMP_BUF_SP 4 ++ ++/* Test if longjmp to JMPBUF would unwind the frame containing a local ++ variable at ADDRESS. */ ++#define _JMPBUF_UNWINDS(jmpbuf, address) \ ++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/syscalls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,143 @@ ++#ifndef _SYSCALL_H ++# error "Never use directly; include instead." ++#endif ++ ++/* ++ * This includes the `__NR_' syscall numbers taken from the ++ * Linux kernel header files. It also defines the traditional ++ * `SYS_' macros for older programs. ++ */ ++#include ++ ++#ifndef __set_errno ++# define __set_errno(val) (*__errno_location()) = (val) ++#endif ++#ifndef SYS_ify ++# define SYS_ify(syscall_name) (__NR_##syscall_name) ++#endif ++ ++#ifndef __ASSEMBLER__ ++ ++#undef _syscall0 ++#define _syscall0(type,name) \ ++ type name(void) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 0)); \ ++ } ++ ++#undef _syscall1 ++#define _syscall1(type,name,type1,arg1) \ ++ type name(type1 arg1) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ ++ } ++ ++#undef _syscall2 ++#define _syscall2(type,name,type1,arg1,type2,arg2) \ ++ type name(type1 arg1, type2 arg2) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ ++ } ++ ++#undef _syscall3 ++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ ++ type name(type1 arg1, type2 arg2, type3 arg3) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 3, arg1, \ ++ arg2, arg3)); \ ++ } ++ ++#undef _syscall4 ++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ ++ arg3, arg4)); \ ++ } ++ ++#undef _syscall5 ++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ ++ arg3, arg4, arg5)); \ ++ } ++ ++#undef _syscall6 ++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5,type6,arg6) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5, type6 arg6) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ ++ arg4, arg5, arg6)); \ ++ } ++ ++#undef unlikely ++#define unlikely(x) __builtin_expect((x), 0) ++ ++#undef INLINE_SYSCALL ++#define INLINE_SYSCALL(name, nr, args...) \ ++ ({ \ ++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ ++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ ++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ ++ _sys_result = (unsigned int) -1; \ ++ } \ ++ (int) _sys_result; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) do { } while(0) ++ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++ ({ \ ++ register int _a1 asm ("r12"); \ ++ register int _scno asm("r8") = SYS_ify(name); \ ++ LOAD_ARGS_##nr (args); \ ++ asm volatile ("scall /* syscall " #name " */" \ ++ : "=r" (_a1) \ ++ : "r"(_scno) ASM_ARGS_##nr \ ++ : "lr", "cc", "memory"); \ ++ _a1; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_ERROR_P ++#define INTERNAL_SYSCALL_ERROR_P(val, err) \ ++ ((unsigned int)(val) >= 0xfffff001U) ++ ++#undef INTERNAL_SYSCALL_ERRNO ++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) ++ ++#define LOAD_ARGS_0() do { } while(0) ++#define ASM_ARGS_0 ++#define LOAD_ARGS_1(a1) \ ++ _a1 = (int) (a1); \ ++ LOAD_ARGS_0() ++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) ++#define LOAD_ARGS_2(a1, a2) \ ++ register int _a2 asm("r11") = (int)(a2); \ ++ LOAD_ARGS_1(a1) ++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) ++#define LOAD_ARGS_3(a1, a2, a3) \ ++ register int _a3 asm("r10") = (int)(a3); \ ++ LOAD_ARGS_2(a1, a2) ++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) ++#define LOAD_ARGS_4(a1, a2, a3, a4) \ ++ register int _a4 asm("r9") = (int)(a4); \ ++ LOAD_ARGS_3(a1, a2, a3) ++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) ++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ ++ register int _a5 asm("r5") = (int)(a5); \ ++ LOAD_ARGS_4(a1, a2, a3, a4) ++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) ++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ ++ register int _a6 asm("r3") = (int)(a6); \ ++ LOAD_ARGS_5(a1, a2, a3, a4, a5) ++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) ++ ++#endif /* __ASSEMBLER__ */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/wordsize.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1 @@ ++#define __WORDSIZE 32 +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/brk.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/brk.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,23 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++ ++void *__curbrk = 0; ++ ++int brk (void *addr) ++{ ++ void *newbrk; ++ ++ newbrk = INLINE_SYSCALL(brk, 1, addr); ++ ++ __curbrk = newbrk; ++ ++ if (newbrk < addr) { ++ __set_errno (ENOMEM); ++ return -1; ++ } ++ ++ return 0; ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-_setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 0) */ ++ .global _setjmp ++ .type _setjmp,"function" ++ .align 1 ++_setjmp: ++ mov r11, 0 ++ bral __sigsetjmp_internal ++ .size _setjmp, . - _setjmp +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 1) */ ++ .global setjmp ++ .type setjmp,"function" ++ .align 1 ++setjmp: ++ mov r11, 1 ++ bral __sigsetjmp_internal ++ .size setjmp, . - setjmp +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/clone.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/clone.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,37 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++ ++/* ++ * I don't know if we can be absolutely certain that the fn and arg ++ * parameters are preserved when returning as the child. If the ++ * compiler stores them in registers (r0-r7), they should be. ++ */ ++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) ++{ ++ register int (*_fn)(void *arg) = fn; ++ register void *_arg = arg; ++ int err; ++ ++ /* Sanity check the arguments */ ++ err = -EINVAL; ++ if (!fn) ++ goto syscall_error; ++ if (!child_stack) ++ goto syscall_error; ++ ++ err = INLINE_SYSCALL(clone, 2, flags, child_stack); ++ if (err < 0) ++ goto syscall_error; ++ else if (err != 0) ++ return err; ++ ++ _exit(_fn(_arg)); ++ ++syscall_error: ++ __set_errno (-err); ++ return -1; ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crt1.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crt1.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,93 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ * ++ * When we enter _start, the stack looks like this: ++ * argc argument counter ++ * argv[0] pointer to program name ++ * argv[1..argc-1] pointers to program args ++ * NULL ++ * env[0..N] pointers to environment variables ++ * NULL ++ * ++ * r12 contains a function pointer to be registered with `atexit'. ++ * This is how the dynamic linker arranges to have DT_FINI functions ++ * called for shared libraries that have been loaded before this ++ * code runs. ++ * ++ * We're going to call the following function: ++ * __uClibc_main(int (*main)(int, char **, char **), int argc, ++ * char **argv, void (*app_init)(void), void (*app_fini)(void), ++ * void (*rtld_fini)(void), void *stack_end) ++ * ++ * So we need to set up things as follows: ++ * r12 = address of main ++ * r11 = argc ++ * r10 = &argv[0] ++ * r9 = address of _init ++ * r8 = address of _fini ++ * sp[0] = whatever we got passed in r12 ++ */ ++ ++#include ++ ++ .text ++ .global _start ++ .type _start, @function ++_start: ++ /* Clear the frame pointer and link register since this is the outermost frame. */ ++ mov r7, 0 ++ mov lr, 0 ++ ++ ld.w r11, sp++ /* argc */ ++ mov r10, sp /* &argv[0] */ ++ ++ st.w --sp, r10 /* stack_end */ ++ st.w --sp, r12 /* rtld_fini */ ++ ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++.L_RGOT: ++ rsub r6, pc ++ lda.w r9, _init ++ lda.w r8, _fini ++ lda.w r12, main ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ call __uClibc_main ++ ++ .align 2 ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++ lddpc r9, __init_addr /* app_init */ ++ lddpc r8, __fini_addr /* app_fini */ ++ lddpc r12, __main_addr /* main */ ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ lddpc pc, ___uClibc_main_addr ++ ++ .align 2 ++__init_addr: ++ .long _init ++__fini_addr: ++ .long _fini ++__main_addr: ++ .long main ++___uClibc_main_addr: ++ .long __uClibc_main ++#endif ++ .size _start, . - _start ++ ++ /* ++ * The LSB says we need this. ++ */ ++ .section ".note.ABI-tag", "a" ++ .align 4 ++ .long 2f - 1f /* namesz */ ++ .long 4f - 3f /* descsz */ ++ .long 1 /* type */ ++1: .asciz "GNU" /* name */ ++2: .align 4 ++3: .long 0 /* Linux executable */ ++ .long 2,6,0 /* Earliest compatible kernel */ ++4: .align 4 +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crti.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crti.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,17 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++_init: ++ /* Use a four-byte instruction to avoid NOPs */ ++ stm --sp, r0-r7,lr ++ .align 2 ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++_fini: ++ stm --sp, r0-r7,lr ++ .align 2 +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crtn.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crtn.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,14 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++ ldm sp++, r0-r7,pc ++ .size _init, . - _init ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++ ldm sp++, r0-r7,pc ++ .size _fini, . - _fini +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/mmap.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/mmap.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2005 Atmel Norway ++ ++ This program is free software; you can redistribute it and/or modify it under ++ the terms of the GNU Library 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 Library General Public License for more ++ details. ++ ++ You should have received a copy of the GNU Library 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 ++ ++ Derived in part from the Linux-8086 C library, the GNU C Library, and several ++ other sundry sources. Files within this library are copyright by their ++ respective copyright holders. ++ */ ++ ++#include ++#include ++#include ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ return mmap2(addr, len, prot, flags, fd, offset >> 12); ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/setjmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#define _SETJMP_H ++#define _ASM ++#include ++ ++ .text ++ ++ .global __sigsetjmp ++ .type __sigsetjmp,"function" ++ ++ /* Create a global, hidden symbol for use by setjmp() and _setjmp(). ++ If it's not hidden, the linker will complain about a relative ++ jump to a dynamic symbol when building a shared library. ++ ++ Also, if a user overrides the __sigsetjmp function, he might not ++ expect the setjmp() and _setjmp() function to effectively be ++ overridden as well. */ ++ .global __sigsetjmp_internal ++ .hidden __sigsetjmp_internal ++ .type __sigsetjmp_internal,"function" ++ .align 1 ++__sigsetjmp: ++__sigsetjmp_internal: ++ mustr r8 ++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ ++ /* Make a tail call to __sigjmp_save; it takes the same args. */ ++#ifdef __PIC__ ++ mov r9, r6 ++ lddpc r6, .LG ++.L1: rsub r6, pc ++ ld.w r8, r6[__sigjmp_save@got] ++ mov r6, r9 ++ mov pc, r8 ++ ++ .align 2 ++.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_ ++#else ++ rjmp __sigjmp_save ++#endif ++ .size __sigsetjmp, . - __sigsetjmp +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigaction.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigaction.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++#define SA_RESTORER 0x04000000 ++extern void __default_rt_sa_restorer(void); ++ ++/* ++ * If act is not NULL, change the action for sig to *act. ++ * If oact is not NULL, put the old action for sig in *oact. ++ */ ++int __libc_sigaction(int signum, const struct sigaction *act, ++ struct sigaction *oldact) ++{ ++ struct kernel_sigaction kact, koact; ++ int result; ++ ++ if (act) { ++ kact.k_sa_handler = act->sa_handler; ++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); ++ kact.sa_flags = act->sa_flags; ++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) ++ kact.sa_restorer = act->sa_restorer; ++ else ++ kact.sa_restorer = __default_rt_sa_restorer; ++ kact.sa_flags |= SA_RESTORER; ++ } ++ ++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, ++ oldact ? __ptrvalue(&koact) : NULL, ++ _NSIG / 8); ++ ++ if (oldact && result >= 0) { ++ oldact->sa_handler = koact.k_sa_handler; ++ memcpy(&oldact->sa_mask, &koact.sa_mask, ++ sizeof(oldact->sa_mask)); ++ oldact->sa_flags = koact.sa_flags; ++ oldact->sa_restorer = koact.sa_restorer; ++ } ++ ++ return result; ++} ++ ++weak_alias(__libc_sigaction, sigaction) +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigrestorer.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigrestorer.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway AS ++ */ ++#include ++ ++ .global __default_rt_sa_restorer ++ .type __default_rt_sa_restorer,"function" ++ .align 1 ++__default_rt_sa_restorer: ++ mov r8, __NR_rt_sigreturn ++ scall +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/elf.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/elf.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_ELF_H ++#define _SYS_ELF_H 1 ++ ++#warning "This header is obsolete; use instead." ++ ++#include ++ ++#endif /* sys/elf.h */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/io.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/io.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,48 @@ ++/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_IO_H ++ ++#define _SYS_IO_H 1 ++#include ++ ++__BEGIN_DECLS ++ ++/* If TURN_ON is TRUE, request for permission to do direct i/o on the ++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O ++ permission off for that range. This call requires root privileges. */ ++extern int ioperm (unsigned long int __from, unsigned long int __num, ++ int __turn_on) __THROW; ++ ++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, ++ permission to access any I/O port is granted. This call requires ++ root privileges. */ ++extern int iopl (int __level) __THROW; ++ ++/* The functions that actually perform reads and writes. */ ++extern unsigned char inb (unsigned long int port) __THROW; ++extern unsigned short int inw (unsigned long int port) __THROW; ++extern unsigned long int inl (unsigned long int port) __THROW; ++ ++extern void outb (unsigned char value, unsigned long int port) __THROW; ++extern void outw (unsigned short value, unsigned long int port) __THROW; ++extern void outl (unsigned long value, unsigned long int port) __THROW; ++ ++__END_DECLS ++ ++#endif /* _SYS_IO_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/procfs.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/procfs.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,123 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_PROCFS_H ++#define _SYS_PROCFS_H 1 ++ ++/* This is somewhat modelled after the file of the same name on SVR4 ++ systems. It provides a definition of the core file format for ELF ++ used on Linux. It doesn't have anything to do with the /proc file ++ system, even though Linux has one. ++ ++ Anyway, the whole purpose of this file is for GDB and GDB only. ++ Don't read too much into it. Don't use it for anything other than ++ GDB unless you know what you are doing. */ ++ ++#include ++#include ++#include ++#include ++ ++__BEGIN_DECLS ++ ++/* Type for a general-purpose register. */ ++typedef unsigned long elf_greg_t; ++ ++/* And the whole bunch of them. We could have used `struct ++ user_regs' directly in the typedef, but tradition says that ++ the register set is an array, which does have some peculiar ++ semantics, so leave it that way. */ ++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++/* Register set for the floating-point registers. */ ++typedef struct user_fpregs elf_fpregset_t; ++ ++/* Signal info. */ ++struct elf_siginfo ++ { ++ int si_signo; /* Signal number. */ ++ int si_code; /* Extra code. */ ++ int si_errno; /* Errno. */ ++ }; ++ ++/* Definitions to generate Intel SVR4-like core files. These mostly ++ have the same names as the SVR4 types with "elf_" tacked on the ++ front to prevent clashes with Linux definitions, and the typedef ++ forms have been avoided. This is mostly like the SVR4 structure, ++ but more Linuxy, with things that Linux does not support and which ++ GDB doesn't really use excluded. */ ++ ++struct elf_prstatus ++ { ++ struct elf_siginfo pr_info; /* Info associated with signal. */ ++ short int pr_cursig; /* Current signal. */ ++ unsigned long int pr_sigpend; /* Set of pending signals. */ ++ unsigned long int pr_sighold; /* Set of held signals. */ ++ __pid_t pr_pid; ++ __pid_t pr_ppid; ++ __pid_t pr_pgrp; ++ __pid_t pr_sid; ++ struct timeval pr_utime; /* User time. */ ++ struct timeval pr_stime; /* System time. */ ++ struct timeval pr_cutime; /* Cumulative user time. */ ++ struct timeval pr_cstime; /* Cumulative system time. */ ++ elf_gregset_t pr_reg; /* GP registers. */ ++ int pr_fpvalid; /* True if math copro being used. */ ++ }; ++ ++ ++#define ELF_PRARGSZ (80) /* Number of chars for args. */ ++ ++struct elf_prpsinfo ++ { ++ char pr_state; /* Numeric process state. */ ++ char pr_sname; /* Char for pr_state. */ ++ char pr_zomb; /* Zombie. */ ++ char pr_nice; /* Nice val. */ ++ unsigned long int pr_flag; /* Flags. */ ++ unsigned short int pr_uid; ++ unsigned short int pr_gid; ++ int pr_pid, pr_ppid, pr_pgrp, pr_sid; ++ /* Lots missing */ ++ char pr_fname[16]; /* Filename of executable. */ ++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ ++ }; ++ ++/* The rest of this file provides the types for emulation of the ++ Solaris interfaces that should be implemented by ++ users of libthread_db. */ ++ ++/* Addresses. */ ++typedef void *psaddr_t; ++ ++/* Register sets. Linux has different names. */ ++typedef elf_gregset_t prgregset_t; ++typedef elf_fpregset_t prfpregset_t; ++ ++/* We don't have any differences between processes and threads, ++ therefore have only one PID type. */ ++typedef __pid_t lwpid_t; ++ ++/* Process status and info. In the end we do provide typedefs for them. */ ++typedef struct elf_prstatus prstatus_t; ++typedef struct elf_prpsinfo prpsinfo_t; ++ ++__END_DECLS ++ ++#endif /* sys/procfs.h */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/ucontext.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,94 @@ ++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Linux/AVR32 ABI compliant context switching support. */ ++ ++#ifndef _SYS_UCONTEXT_H ++#define _SYS_UCONTEXT_H 1 ++ ++#include ++#include ++#include ++#include ++ ++typedef int greg_t; ++ ++/* Number of general registers. */ ++#define NGREG 16 ++ ++/* Container for all general registers. */ ++typedef elf_gregset_t gregset_t; ++ ++/* Number of each register is the `gregset_t' array. */ ++enum ++{ ++ R0 = 0, ++#define R0 R0 ++ R1 = 1, ++#define R1 R1 ++ R2 = 2, ++#define R2 R2 ++ R3 = 3, ++#define R3 R3 ++ R4 = 4, ++#define R4 R4 ++ R5 = 5, ++#define R5 R5 ++ R6 = 6, ++#define R6 R6 ++ R7 = 7, ++#define R7 R7 ++ R8 = 8, ++#define R8 R8 ++ R9 = 9, ++#define R9 R9 ++ R10 = 10, ++#define R10 R10 ++ R11 = 11, ++#define R11 R11 ++ R12 = 12, ++#define R12 R12 ++ R13 = 13, ++#define R13 R13 ++ R14 = 14, ++#define R14 R14 ++ R15 = 15 ++#define R15 R15 ++}; ++ ++/* Structure to describe FPU registers. */ ++typedef elf_fpregset_t fpregset_t; ++ ++/* Context to describe whole processor state. */ ++typedef struct ++ { ++ gregset_t gregs; ++ fpregset_t fpregs; ++ } mcontext_t; ++ ++/* Userlevel context. */ ++typedef struct ucontext ++{ ++ unsigned long uc_flags; ++ struct ucontext *uc_link; ++ stack_t uc_stack; ++ struct sigcontext uc_mcontext; ++ sigset_t uc_sigmask; /* mask last for extensibility */ ++} ucontext_t; ++ ++#endif /* sys/ucontext.h */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/user.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/user.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,46 @@ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H ++ ++struct user_fpregs ++{ ++ ++}; ++ ++struct user_regs ++{ ++ unsigned long sr; ++ unsigned long pc; ++ unsigned long lr; ++ unsigned long sp; ++ unsigned long r12; ++ unsigned long r11; ++ unsigned long r10; ++ unsigned long r9; ++ unsigned long r8; ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++ unsigned long r12_orig; ++}; ++ ++struct user ++{ ++ struct user_regs regs; /* general registers */ ++ size_t u_tsize; /* text size (pages) */ ++ size_t u_dsize; /* data size (pages) */ ++ size_t u_ssize; /* stack size (pages) */ ++ unsigned long start_code; /* text starting address */ ++ unsigned long start_data; /* data starting address */ ++ unsigned long start_stack; /* stack starting address */ ++ long int signal; /* signal causing core dump */ ++ struct user_regs * u_ar0; /* help gdb find registers */ ++ unsigned long magic; /* identifies a core file */ ++ char u_comm[32]; /* user command name */ ++}; ++ ++#endif /* _SYS_USER_H */ +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/syscall.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/syscall.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,81 @@ ++/* ++ * syscall for AVR32/uClibc ++ * ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU Library 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 Library General Public License ++ * for more details. ++ * ++ * You should have received a copy of the GNU Library General Public License ++ * along with this program; if not, write to the Free Software Foundation, ++ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++#include ++ ++ .text ++ ++ /* ++ * long int syscall(long int sysno, ...) ++ */ ++ .global syscall ++ .type syscall, @function ++ .align 2 ++syscall: ++ stm --sp, r3,r5,lr ++ sub lr, sp, -12 ++ mov r8, r12 ++ ldm lr, r3,r5,r9-r12 ++ scall ++ cp.w r12, -4095 ++ brlo .Ldone ++ ++#ifdef __PIC__ ++ lddpc r5, .Lgot ++.Lgotcalc: ++ rsub r5, pc ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall r5[__errno_location@got] ++ st.w r12[0], r3 ++# else ++ ld.w r3, r5[errno@got] ++ st.w r3[0], r12 ++# endif ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++ mov r3, r12 ++ mcall .Lerrno_location ++ st.w r12[0], r3 ++# else ++ lddpc r3, .Lerrno ++ st.w r3[0], r12 ++# endif ++#endif ++ mov r12, -1 ++ ++.Ldone: ++ ldm sp++, r3,r5,pc ++ ++ .align 2 ++#ifdef __PIC__ ++.Lgot: ++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++.Lerrno_location: ++ .long __errno_location ++# else ++.Lerrno: ++ .long errno ++# endif ++#endif ++ ++ ++ .size syscall, . - syscall +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/vfork.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/vfork.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,55 @@ ++ /* ++ * vfork for uClibc ++ * ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++ /* ++ * Clone the process without copying the address space. The ++ * calling process is suspended until the child either exits ++ * or calls execve. ++ * ++ * This all means that we cannot rely on the stack to store ++ * away registers, since they will be overwritten by the child ++ * as soon as it makes another function call (e.g. execve()). ++ * Fortunately, the Linux kernel preserves LR across system calls. ++ */ ++#include ++#include ++ ++ .global __vfork ++ .type __vfork,@function ++ .align 1 ++__vfork: ++ mov r8, __NR_vfork ++ scall ++ cp.w r12, -4096 ++ retls r12 ++ ++ /* vfork failed, so we may use the stack freely */ ++ pushm r4-r7,lr ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++ rsub r4, r12, 0 ++.L_RGOT: ++ rsub r6, pc ++ mcall r6[__errno_location@got] ++#else ++ rsub r4, r12, 0 ++ mcall .L__errno_location ++#endif ++ st.w r12[0], r4 ++ popm r4-r7,pc,r12=-1 ++ ++ .align 2 ++#ifdef __PIC__ ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++.L__errno_location: ++ .long __errno_location ++#endif ++ .size __vfork, . - __vfork ++ ++ .weak vfork ++ vfork = __vfork +Index: uClibc-0.9.28-avr32/Rules.mak +=================================================================== +--- uClibc-0.9.28-avr32.orig/Rules.mak 2006-10-19 15:05:49.000000000 +0200 ++++ uClibc-0.9.28-avr32/Rules.mak 2006-10-19 15:05:52.000000000 +0200 +@@ -231,6 +231,12 @@ ifeq ($(strip $(TARGET_ARCH)),frv) + UCLIBC_LDSO=ld.so.1 + endif + ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 ++ CPU_CFLAGS-$(LINKRELAX) += -masm-addr-pseudos -Wa,--pic,--linkrelax ++ CPU_LDFLAGS-$(LINKRELAX) += --relax ++endif ++ + # Keep the check_gcc from being needlessly executed + ifndef PIEFLAG + ifneq ($(UCLIBC_BUILD_PIE),y) +Index: uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,15 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bcopy ++ .type bcopy, @function ++ .align 1 ++bcopy: ++ /* Swap the first two arguments */ ++ eor r11, r12 ++ eor r12, r11 ++ eor r11, r12 ++ rjmp __memmove ++ .size bcopy, . - bcopy +Index: uClibc-0.9.28-avr32/libc/string/avr32/bzero.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/bzero.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++ .text ++ .global bzero ++ .type bzero, @function ++ .align 1 ++bzero: ++ mov r10, r11 ++ mov r11, 0 ++ rjmp __memset +Index: uClibc-0.9.28-avr32/libc/string/avr32/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,40 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++TOPDIR=../../../ ++include $(TOPDIR)Rules.mak ++ ++SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S ++SSRC += memset.S strcmp.S strlen.S ++# memchr.S, strcat.S, strcpy.S, strncpy.S is broken ++SOBJS := $(patsubst %.S,%.o, $(SSRC)) ++OBJS := $(SOBJS) ++ ++OBJ_LIST:= ../../obj.string.$(TARGET_ARCH) ++ ++all: $(OBJ_LIST) ++ ++$(OBJ_LIST): $(OBJS) ++ echo $(addprefix string/$(TARGET_ARCH)/, $(OBJS)) > $@ ++ ++$(SOBJS): %.o: %.S ++ $(CC) $(ASFLAGS) -c $< -o $@ ++ $(STRIPTOOL) -x -R .note -R .comment $@ ++ ++clean: ++ $(RM) *.[oa] *~ core +Index: uClibc-0.9.28-avr32/libc/string/avr32/memchr.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memchr.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++#define chr r11 ++#define len r10 ++ ++ .text ++ .global memchr ++ .type memchr, @function ++memchr: ++ or chr, chr, chr << 8 ++ or chr, chr, chr << 16 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: sub len, 4 ++ brlt 2f ++ ld.w r8, str++ ++ psub.b r9, r8, r11 ++ tnbz r9 ++ brne 1b ++ ++ sub str, 4 ++ bfextu r9, r8, 24, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ bfextu r9, r8, 16, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ bfextu r9, r8, 8, 8 ++ cp.b r9, r11 ++ reteq str ++ sub str, -1 ++ retal str ++ ++2: sub len, -4 ++ reteq 0 ++ ++3: ld.ub r8, str++ ++ cp.w r8, 0 ++ reteq str ++ sub len, 1 ++ brne 3b ++ ++ retal 0 ++ ++.Lunaligned_str: ++1: sub len, 1 ++ retlt 0 ++ ld.ub r8, str++ ++ cp.b r8, r11 ++ reteq str ++ sub r9, 1 ++ brge 1b ++ ++ rjmp .Laligned_search +Index: uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global memcmp ++ .type memcmp, @function ++ .align 1 ++memcmp: ++ cp.w len, 1 ++ retlt 0 ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ subfne len, 1 ++ brne 1b ++ ++ retal r8 ++ .size memcmp, . - memcmp ++ ++ .weak bcmp ++ bcmp = memcmp +Index: uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++/* Don't use r12 as dst since we must return it unmodified */ ++#define dst r9 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memcpy ++ .type memcpy, @function ++ ++ .global __memcpy ++ .hidden __memcpy ++ .type __memcpy, @function ++memcpy: ++__memcpy: ++ pref src[0] ++ mov dst, r12 ++ ++ /* If we have less than 32 bytes, don't do anything fancy */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, src++ ++ st.b dst++, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, dst ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ ldm src, r0-r7 ++ sub src, -32 ++ stm dst, r0-r7 ++ sub dst, -32 ++ sub len, 32 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ ldm src, r0-r3 ++ sub src, -16 ++ sub len, 16 ++ stm dst, r0-r3 ++ sub dst, -16 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ neg len ++ add pc, pc, len << 2 ++ .rept 15 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ rsub r8, r8, 32 ++ sub len, r8 ++1: ld.ub r0, src++ ++ st.b dst++, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[0] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, src++ ++ st.w dst++, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ .size memcpy, . - memcpy +Index: uClibc-0.9.28-avr32/libc/string/avr32/memmove.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memmove.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,114 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r12 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memmove ++ .type memmove, @function ++ ++ .global __memmove ++ .hidden __memmove ++ .type __memmove, @function ++memmove: ++__memmove: ++ cp.w src, dst ++ brge __memcpy ++ ++ add dst, len ++ add src, len ++ pref src[-1] ++ ++ /* ++ * The rest is basically the same as in memcpy.S except that ++ * the direction is reversed. ++ */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, --src ++ st.b --dst, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, r12 ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ sub src, 32 ++ ldm src, r0-r7 ++ sub dst, 32 ++ sub len, 32 ++ stm dst, r0-r7 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ sub src, 16 ++ ldm src, r0-r3 ++ sub dst, 16 ++ sub len, 16 ++ stm dst, r0-r3 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ sub len, -16 ++ breq 2f ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub len, 1 ++ brne 1b ++ ++2: popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ sub len, r8 ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[-4] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, --src ++ st.w --dst, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, --src ++ st.b --dst, r0 ++ .endr ++ ++ popm r0-r7, pc +Index: uClibc-0.9.28-avr32/libc/string/avr32/memset.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/memset.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,60 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s r12 ++#define c r11 ++#define n r10 ++ ++ .text ++ .global memset ++ .type memset, @function ++ ++ .global __memset ++ .hidden __memset ++ .type __memset, @function ++ ++ .align 1 ++memset: ++__memset: ++ cp.w n, 32 ++ mov r9, s ++ brge .Llarge_memset ++ ++ sub n, 1 ++ retlt s ++1: st.b s++, c ++ sub n, 1 ++ brge 1b ++ ++ retal r9 ++ ++.Llarge_memset: ++ mov r8, r11 ++ mov r11, 3 ++ or r8, r8, r8 << 8 ++ or r8, r8, r8 << 16 ++ tst s, r11 ++ breq 2f ++ ++1: st.b s++, r8 ++ sub n, 1 ++ tst s, r11 ++ brne 1b ++ ++2: mov r11, r9 ++ mov r9, r8 ++ sub n, 8 ++ ++3: st.d s++, r8 ++ sub n, 8 ++ brge 3b ++ ++ /* If we are done, n == -8 and we'll skip all st.b insns below */ ++ neg n ++ lsl n, 1 ++ add pc, n ++ .rept 7 ++ st.b s++, r8 ++ .endr ++ retal r11 +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcat.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcat.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define s1 r9 ++#define s2 r11 ++ ++ .text ++ .global strcat ++ .type strcat, @function ++ .align 1 ++strcat: ++ mov s1, r12 ++ ++ /* Make sure s1 is word-aligned */ ++ mov r10, s1 ++ andl r10, 3, COH ++ breq 2f ++ ++ add pc, pc, r10 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 2f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 3f ++ ld.ub r8, s1++ ++ sub r8, r8, 0 ++ breq 4f ++ ++ /* Find the end of the first string */ ++5: ld.w r8, s1++ ++ tnbz r8 ++ brne 5b ++ ++ sub s1, 4 ++ ++ bfextu r10, r8, 24, 8 ++ cp.w r10, 0 ++ breq 1f ++ sub s1, -1 ++ bfextu r10, r8, 16, 8 ++ cp.w r10, 0 ++ breq 2f ++ sub s1, -1 ++ bfextu r10, r8, 8, 8 ++ cp.w r10, 0 ++ breq 3f ++ sub s1, -1 ++ rjmp 4f ++ ++ /* Now, append s2 */ ++1: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++2: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++3: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++4: ld.ub r8, s2++ ++ st.b s1++, r8 ++ cp.w r8, 0 ++ reteq r12 ++ ++ /* Copy one word at a time */ ++ ld.w r8, s2++ ++ tnbz r8 ++ breq 2f ++1: st.w r8, s2++ ++ ld.w r8, s2++ ++ tnbz r8 ++ brne 1b ++ ++ /* Copy the remaining bytes */ ++ bfextu r10, r8, 24, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 16, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 8, 8 ++ st.b s1++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ st.b s1++, r8 ++ retal r12 ++ .size strcat, . - strcat +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway. ++ */ ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global strcmp ++ .type strcmp, @function ++ .align 1 ++strcmp: ++ mov r8, 3 ++ tst s1, r8 ++ brne .Lunaligned_s1 ++ tst s2, r8 ++ brne .Lunaligned_s2 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne 2f ++ tnbz r8 ++ brne 1b ++ retal 0 ++ ++2: bfextu r12, r8, 24, 8 ++ bfextu r11, r9, 24, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 16, 8 ++ bfextu r11, r9, 16, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 8, 8 ++ bfextu r11, r9, 8, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 0, 8 ++ bfextu r11, r9, 0, 8 ++ sub r12, r11 ++ retal r12 ++ ++.Lunaligned_s1: ++3: tst s1, r8 ++ breq 4f ++ ld.ub r10, s1++ ++ ld.ub r9, s2++ ++ sub r10, r9 ++ retne r10 ++ cp.w r9, 0 ++ brne 3b ++ retal r10 ++ ++4: tst s2, r8 ++ breq 1b ++ ++.Lunaligned_s2: ++ /* ++ * s1 and s2 can't both be aligned, and unaligned word loads ++ * can trigger spurious exceptions if we cross a page boundary. ++ * Do it the slow way... ++ */ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ cp.w r9, 0 ++ brne 1b ++ retal 0 ++ ++ .weak strcoll ++ strcoll = strcmp +Index: uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,63 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ * ++ * To reduce the size, this one might simply call strncpy with len = -1. ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strcpy, @function ++strcpy: ++ mov dst, r12 ++ ++ pref src[0] ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ rjmp 1b ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ bfextu r10, r8, 24, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 16, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ bfextu r10, r8, 8, 8 ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ st.b dst++, r8 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ rsub r8, r8, 4 ++ add pc, pc, r8 << 3 ++ nop ++ nop ++ ld.ub r10, src++ ++ st.b dst++, r10 ++ cp.w r10, 0 ++ reteq r12 ++ ++ rjmp .Laligned_copy +Index: uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,144 @@ ++ ++#include ++#include ++#include ++#include ++ ++#define BUF_SIZE (8 * 1024) ++ ++static char *buf1; ++static char *buf1_ref; ++static char *buf2; ++ ++extern void *optimized_memcpy(void *dest, void *src, size_t len); ++extern void *optimized_memmove(void *dest, void *src, size_t len); ++extern char *optimized_strcpy(char *dest, char *src); ++extern char *optimized_strncpy(char *dest, char *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("%4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++static void test_memcpy(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ int i; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memcpy with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ for (i = 0; i < 8192; i++) ++ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ for ( i = 0; i < 8192; i++) ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++static void test_memmove(int src_offset, int dst_offset, int len) ++{ ++ clock_t start, old, new; ++ ++ memset(buf1, 0x55, BUF_SIZE); ++ memset(buf1_ref, 0x55, BUF_SIZE); ++ memset(buf2, 0xaa, BUF_SIZE); ++ ++ printf("Testing memmove with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ start = clock(); ++ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len); ++ new = clock() - start; ++ start = clock(); ++ memmove(buf1_ref + dst_offset, buf2 + src_offset, len); ++ old = clock() - start; ++ ++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, BUF_SIZE); ++ } ++ printf("CPU time used: %d vs. %d\n", new, old); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf2 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf2"); ++ return 1; ++ } ++ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1 == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1"); ++ return 1; ++ } ++ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); ++ if (buf1_ref == MAP_FAILED) { ++ perror("Failed to allocate memory for buf1_ref"); ++ return 1; ++ } ++ printf("\n === MEMCPY ===\n\n"); ++ ++ test_memcpy(0, 0, BUF_SIZE - 32); ++ test_memcpy(0, 0, 1); ++ test_memcpy(0, 0, 31); ++ test_memcpy(0, 0, 32); ++ test_memcpy(0, 0, 127); ++ test_memcpy(0, 0, 128); ++ test_memcpy(4, 4, BUF_SIZE - 32 - 4); ++ test_memcpy(1, 1, BUF_SIZE - 32 - 1); ++ test_memcpy(1, 1, 126); ++ test_memcpy(0, 3, 128); ++ test_memcpy(1, 4, 128); ++ test_memcpy(0, 0, 0); ++ ++ printf("\n === MEMMOVE ===\n\n"); ++ ++ test_memmove(0, 0, BUF_SIZE - 32); ++ test_memmove(0, 0, 1); ++ test_memmove(0, 0, 31); ++ test_memmove(0, 0, 32); ++ test_memmove(0, 0, BUF_SIZE - 33); ++ test_memmove(0, 0, 128); ++ test_memmove(4, 4, BUF_SIZE - 32 - 4); ++ test_memmove(1, 1, BUF_SIZE - 32 - 1); ++ test_memmove(1, 1, BUF_SIZE - 130); ++ test_memmove(0, 3, BUF_SIZE - 128); ++ test_memmove(1, 4, BUF_SIZE - 128); ++ test_memmove(0, 0, 0); ++ ++ return 0; ++} +Index: uClibc-0.9.28-avr32/libc/string/avr32/strlen.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strlen.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,52 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define str r12 ++ ++ .text ++ .global strlen ++ .type strlen, @function ++strlen: ++ mov r11, r12 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: ld.w r8, str++ ++ tnbz r8 ++ brne 1b ++ ++ sub r12, r11 ++ bfextu r9, r8, 24, 8 ++ cp.w r9, 0 ++ subeq r12, 4 ++ reteq r12 ++ bfextu r9, r8, 16, 8 ++ cp.w r9, 0 ++ subeq r12, 3 ++ reteq r12 ++ bfextu r9, r8, 8, 8 ++ cp.w r9, 0 ++ subeq r12, 2 ++ reteq r12 ++ sub r12, 1 ++ retal r12 ++ ++.Lunaligned_str: ++ add pc, pc, r9 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ brne 1b ++ ++1: sub r12, 1 ++ sub r12, r11 ++ retal r12 +Index: uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,77 @@ ++/* ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define dst r9 ++#define src r11 ++ ++ .text ++ .global strcpy ++ .type strncpy, @function ++strncpy: ++ mov dst, r12 ++ ++ pref src[0] ++ mov dst, r12 ++ ++ /* ++ * Check alignment. If src is aligned but dst isn't, we can't ++ * do much about it... ++ */ ++ mov r8, src ++ andl r8, 3 COH ++ brne .Lunaligned_src ++ ++.Laligned_copy: ++ sub r10, 4 ++ brlt 3f ++1: ld.w r8, src++ ++ tnbz r8 ++ breq 2f ++ st.w dst++, r8 ++ sub r10, 4 ++ brne 1b ++ ++3: sub r10, -4 ++ reteq r12 ++ ++ /* This is safe as long as src is word-aligned and r10 > 0 */ ++ ld.w r8, src++ ++ ++2: /* ++ * Ok, r8 now contains the terminating '\0'. Copy the ++ * remaining bytes individually. ++ */ ++ bfextu r11, r8, 24, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ bfextu r11, r8, 16, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ bfextu r11, r8, 8, 8 ++ st.b dst++, r11 ++ cp.w r11, 0 ++ reteq r12 ++ sub r10, 1 ++ reteq r12 ++ st.b dst++, r8 ++ retal r12 ++ ++.Lunaligned_src: ++ /* Copy bytes until we're aligned */ ++ min r8, r8, r10 ++ sub r10, r8 ++ sub r8, 1 ++ retlt r12 ++1: ld.ub r10, src++ ++ st.b dst++, r10 ++ sub r8, 1 ++ brge 1b ++ ++ rjmp .Laligned_copy +Index: uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,66 @@ ++ ++#include ++#include ++ ++#define BUF_SIZE 32768 ++ ++static char buf1[BUF_SIZE] __attribute__((aligned(32))); ++static char buf1_ref[BUF_SIZE] __attribute__((aligned(32))); ++static char buf2[BUF_SIZE] __attribute__((aligned(32))); ++ ++extern void *new_memcpy(void *dest, void *src, size_t len); ++ ++void dump_mismatch(char *buf, char *ref, size_t len) ++{ ++ int i, j; ++ ++ for (i = 0; i < len; i += 16) { ++ if (memcmp(buf + i, ref + i, 16) == 0) ++ continue; ++ ++ printf("% 4x buf:", i); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", buf[j]); ++ printf("\n ref:"); ++ for (j = i; j < (i + 16); j++) ++ printf(" %02x", ref[j]); ++ printf("\n"); ++ } ++} ++ ++void test(int src_offset, int dst_offset, int len) ++{ ++ memset(buf1, 0x55, sizeof(buf1)); ++ memset(buf1_ref, 0x55, sizeof(buf1_ref)); ++ memset(buf2, 0xaa, sizeof(buf2)); ++ ++ printf("Testing with offsets %d => %d and len %d...", ++ src_offset, dst_offset, len); ++ ++ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len); ++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); ++ ++ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0) ++ printf("OK\n"); ++ else { ++ printf("FAILED\n"); ++ dump_mismatch(buf1, buf1_ref, sizeof(buf1)); ++ } ++} ++ ++int main(int argc, char *argv[]) ++{ ++ test(0, 0, BUF_SIZE); ++ test(0, 0, 1); ++ test(0, 0, 31); ++ test(0, 0, 32); ++ test(0, 0, 127); ++ test(0, 0, 128); ++ test(4, 4, BUF_SIZE - 4); ++ test(1, 1, BUF_SIZE - 1); ++ test(1, 1, 126); ++ test(0, 3, 128); ++ test(1, 4, 128); ++ ++ return 0; ++} +Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/create_module.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/create_module.c 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/create_module.c 2006-10-19 15:05:52.000000000 +0200 +@@ -61,7 +61,8 @@ unsigned long create_module(const char * + { + return __create_module(name, size, 0, 0); + } +-#else ++/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */ ++#elif !defined(__avr32__) + /* Sparc, MIPS, etc don't mistake return values for errors. */ + _syscall2(unsigned long, create_module, const char *, name, size_t, size); + #endif +Index: uClibc-0.9.28-avr32/ldso/include/dl-string.h +=================================================================== +--- uClibc-0.9.28-avr32.orig/ldso/include/dl-string.h 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/ldso/include/dl-string.h 2006-10-19 15:05:52.000000000 +0200 +@@ -134,7 +134,7 @@ static inline char * _dl_strstr(const ch + } while (1); + } + +-static inline void * _dl_memcpy(void * dst, const void * src, size_t len) ++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) + { + register char *a = dst-1; + register const char *b = src-1; +@@ -271,7 +271,8 @@ static __always_inline char * _dl_simple + /* On some arches constant strings are referenced through the GOT. + * This requires that load_addr must already be defined... */ + #if defined(mc68000) || defined(__arm__) || defined(__mips__) \ +- || defined(__sh__) || defined(__powerpc__) ++ || defined(__sh__) || defined(__powerpc__) \ ++ || defined(__avr32__) + # define CONSTANT_STRING_GOT_FIXUP(X) \ + if ((X) < (const char *) load_addr) (X) += load_addr + # define NO_EARLY_SEND_STDERR +Index: uClibc-0.9.28-avr32/ldso/include/dl-syscall.h +=================================================================== +--- uClibc-0.9.28-avr32.orig/ldso/include/dl-syscall.h 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/ldso/include/dl-syscall.h 2006-10-19 15:05:52.000000000 +0200 +@@ -60,59 +60,59 @@ + dynamic linking at all, so we cannot return any error codes. + We just punt if there is an error. */ + #define __NR__dl_exit __NR_exit +-static inline _syscall1(void, _dl_exit, int, status); ++static __always_inline _syscall1(void, _dl_exit, int, status); + + #define __NR__dl_close __NR_close +-static inline _syscall1(int, _dl_close, int, fd); ++static __always_inline _syscall1(int, _dl_close, int, fd); + + #define __NR__dl_open __NR_open +-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); ++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); + + #define __NR__dl_write __NR_write +-static inline _syscall3(unsigned long, _dl_write, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_write, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_read __NR_read +-static inline _syscall3(unsigned long, _dl_read, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_read, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_mprotect __NR_mprotect +-static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); ++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); + + #define __NR__dl_stat __NR_stat +-static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); ++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); + + #define __NR__dl_munmap __NR_munmap +-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); ++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); + + #define __NR__dl_getuid __NR_getuid +-static inline _syscall0(uid_t, _dl_getuid); ++static __always_inline _syscall0(uid_t, _dl_getuid); + + #define __NR__dl_geteuid __NR_geteuid +-static inline _syscall0(uid_t, _dl_geteuid); ++static __always_inline _syscall0(uid_t, _dl_geteuid); + + #define __NR__dl_getgid __NR_getgid +-static inline _syscall0(gid_t, _dl_getgid); ++static __always_inline _syscall0(gid_t, _dl_getgid); + + #define __NR__dl_getegid __NR_getegid +-static inline _syscall0(gid_t, _dl_getegid); ++static __always_inline _syscall0(gid_t, _dl_getegid); + + #define __NR__dl_getpid __NR_getpid +-static inline _syscall0(gid_t, _dl_getpid); ++static __always_inline _syscall0(gid_t, _dl_getpid); + + #define __NR__dl_readlink __NR_readlink +-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); ++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); + + #ifdef __NR_mmap + #ifdef MMAP_HAS_6_ARGS + #define __NR__dl_mmap __NR_mmap +-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, ++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, + int, prot, int, flags, int, fd, off_t, offset); + #else + #define __NR__dl_mmap_real __NR_mmap +-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); ++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); + +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + unsigned long buffer[6]; +@@ -128,11 +128,12 @@ static inline void * _dl_mmap(void * add + #endif + #elif defined __NR_mmap2 + #define __NR___syscall_mmap2 __NR_mmap2 +-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, ++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, + size_t, len, int, prot, int, flags, int, fd, off_t, offset); + /*always 12, even on architectures where PAGE_SHIFT != 12 */ + #define MMAP2_PAGE_SHIFT 12 +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++#define MAP_FAILED ((void *) -1) ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-debug.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-debug.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,45 @@ ++/* ++ * AVR32 ELF shared libary loader support ++ * ++ * Copyright (C) 2005 Atmel Norway ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++static const char *_dl_reltypes_tab[] = { ++ "R_AVR32_NONE", ++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", ++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", ++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", ++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", ++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", ++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", ++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", ++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", ++ "R_AVR32_HI16", "R_AVR32_LO16", ++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", ++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", ++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", ++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", ++ "R_AVR32_ALIGN", ++}; +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-startup.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-startup.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,110 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Architecture specific code used by dl-startup.c ++ * Copyright (C) 2005 Atmel Norway ++ */ ++ ++/* This is the library loader's main entry point. Let _dl_boot2 do its ++ * initializations and jump to the application's entry point ++ * afterwards. */ ++asm( " .text\n" ++ " .global _start\n" ++ " .type _start,@function\n" ++ "_start:\n" ++ /* All arguments are on the stack initially */ ++ " mov r12, sp\n" ++ " rcall _dl_start\n" ++ /* Returns user entry point in r12. Save it. */ ++ " mov r0, r12\n" ++ /* We're PIC, so get the Global Offset Table */ ++ " lddpc r6, .L_GOT\n" ++ ".L_RGOT:\n" ++ " rsub r6, pc\n" ++ /* Adjust argc and argv according to _dl_skip_args */ ++ " ld.w r1, r6[_dl_skip_args@got]\n" ++ " ld.w r1, r1[0]\n" ++ " ld.w r2, sp++\n" ++ " sub r2, r1\n" ++ " add sp, sp, r1 << 2\n" ++ " st.w --sp, r2\n" ++ /* Load the finalizer function */ ++ " ld.w r12, r6[_dl_fini@got]\n" ++ /* Jump to the user's entry point */ ++ " mov pc, r0\n\n" ++ ++ " .align 2\n" ++ ".L_GOT:" ++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" ++ " .size _start, . - _start\n" ++ " .previous\n"); ++ ++/* Get a pointer to the argv array. On many platforms this can be just ++ * the address if the first argument, on other platforms we need to ++ * do something a little more subtle here. */ ++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) ++ ++ ++/* We can't call functions before the GOT has been initialized */ ++#define NO_FUNCS_BEFORE_BOOTSTRAP ++ ++/* ++ * Relocate the GOT during dynamic loader bootstrap. This will add ++ * the load address to all entries in the GOT, which is necessary ++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the ++ * GOT. ++ */ ++static __always_inline ++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) ++{ ++ Elf32_Addr i, nr_got; ++ register Elf32_Addr *__r6 __asm__("r6"); ++ Elf32_Addr *got = __r6; ++ ++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); ++ for (i = 2; i < nr_got; i++) ++ got[i] += tpnt->loadaddr; ++} ++ ++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) ++ ++/* Handle relocation of the symbols in the dynamic loader. */ ++static __always_inline ++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, ++ unsigned long symbol_addr, ++ unsigned long load_addr, Elf32_Sym *symtab) ++{ ++ switch(ELF32_R_TYPE(rpnt->r_info)) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr; ++ break; ++ case R_AVR32_RELATIVE: ++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); ++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); ++ SEND_STDERR_DEBUG(" + "); ++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); ++ *reloc_addr = load_addr + rpnt->r_addend; ++ break; ++ default: ++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); ++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); ++ SEND_STDERR("REL, SYMBOL, LOAD: "); ++ SEND_ADDRESS_STDERR(reloc_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(symbol_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(load_addr, 1); ++ _dl_exit(1); ++ } ++} ++ ++/* Transfer control to the user's application, once the dynamic loader ++ * is done. This routine has to exit the current function, then call ++ * the _dl_elf_main function. ++ * ++ * Since our _dl_boot will simply call whatever is returned by ++ * _dl_boot2, we can just return the address we're supposed to ++ * call. */ ++#define START() return _dl_elf_main; +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-syscalls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-syscalls.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,5 @@ ++/* We can't use the real errno in ldso, since it has not yet ++ * been dynamicly linked in yet. */ ++extern int _dl_errno; ++#define __set_errno(X) {(_dl_errno) = (X);} ++#include "sys/syscall.h" +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-sysdep.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-sysdep.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,103 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * Various assembly language/system dependent hacks that are required ++ * so that we can minimize the amount of platform specific code. ++ * Copyright (C) 2004-2005 Atmel Norway ++ */ ++ ++/* Define this if the system uses RELOCA. */ ++#define ELF_USES_RELOCA ++ ++#include ++ ++#define ARCH_NUM 1 ++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) ++ ++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ ++ do { \ ++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ ++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ ++ } while (0) ++ ++/* Initialization sequence for the application/library GOT. */ ++#define INIT_GOT(GOT_BASE,MODULE) \ ++ do { \ ++ unsigned long i, nr_got; \ ++ \ ++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ ++ GOT_BASE[1] = (unsigned long) MODULE; \ ++ \ ++ /* Add load address displacement to all GOT entries */ \ ++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ ++ for (i = 2; i < nr_got; i++) \ ++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ ++ } while (0) ++ ++#define do_rem(result, n, base) ((result) = (n) % (base)) ++ ++/* Here we define the magic numbers that this dynamic loader should accept */ ++#define MAGIC1 EM_AVR32 ++#undef MAGIC2 ++ ++/* Used for error messages */ ++#define ELF_TARGET "AVR32" ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); ++ ++/* 4096 bytes alignment */ ++#define PAGE_ALIGN 0xfffff000 ++#define ADDR_ALIGN 0xfff ++#define OFFS_ALIGN 0x7ffff000 ++ ++#define elf_machine_type_class(type) \ ++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) ++ ++/* AVR32 doesn't need any COPY relocs */ ++#define DL_NO_COPY_RELOCS ++ ++/* Return the link-time address of _DYNAMIC. Conveniently, this is the ++ first element of the GOT. This must be inlined in a function which ++ uses global data. */ ++static inline Elf32_Addr ++elf_machine_dynamic (void) ++{ ++ register Elf32_Addr *got asm ("r6"); ++ return *got; ++} ++ ++/* Return the run-time load address of the shared object. */ ++static inline Elf32_Addr ++elf_machine_load_address (void) ++{ ++ extern void __dl_start asm("_dl_start"); ++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; ++ Elf32_Addr pcrel_addr; ++ ++ asm (" lddpc %0, 2f\n" ++ "1: add %0, pc\n" ++ " rjmp 3f\n" ++ " .align 2\n" ++ "2: .long _dl_start - 1b\n" ++ "3:\n" ++ : "=r"(pcrel_addr) : : "cc"); ++ ++ return pcrel_addr - got_addr; ++} ++ ++/* ++ * Perform any RELATIVE relocations specified by DT_RELCOUNT. ++ * Currently, we don't use that tag, but we might in the future as ++ * this would reduce the startup time somewhat (although probably not by much). ++ */ ++static inline void ++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, ++ Elf32_Word relative_count) ++{ ++ Elf32_Rela *rpnt = (void *)rel_addr; ++ ++ do { ++ Elf32_Addr *reloc_addr; ++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); ++ *reloc_addr = load_off + rpnt->r_addend; ++ } while (--relative_count); ++} +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/elfinterp.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/elfinterp.c 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,191 @@ ++/* ++ * AVR32 ELF shared library loader suppport ++ * ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) ++{ ++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; ++ Elf32_Sym *sym; ++ unsigned long local_gotno; ++ unsigned long gotsym; ++ unsigned long new_addr; ++ char *strtab, *symname; ++ unsigned long *entry; ++ unsigned long sym_index = got_offset / 4; ++ ++#if 0 ++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; ++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; ++ ++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) ++ + sym_index; ++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); ++ symname = strtab + sym->st_name; ++ ++#if 0 ++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, ++ tpnt->symbol_scope, tpnt, ++ resolver); ++#endif ++ ++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); ++ *entry = new_addr; ++#endif ++ ++ return new_addr; ++} ++ ++static int ++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ unsigned long rel_addr, unsigned long rel_size, ++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) ++{ ++ Elf32_Sym *symtab; ++ Elf32_Rela *rpnt; ++ char *strtab; ++ int i; ++ ++ rpnt = (Elf32_Rela *)rel_addr; ++ rel_size /= sizeof(Elf32_Rela); ++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; ++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; ++ ++ for (i = 0; i < rel_size; i++, rpnt++) { ++ int symtab_index, res; ++ ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ ++ debug_sym(symtab, strtab, symtab_index); ++ debug_reloc(symtab, strtab, rpnt); ++ ++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); ++ ++ if (res == 0) ++ continue; ++ ++ _dl_dprintf(2, "\n%s: ", _dl_progname); ++ ++ if (symtab_index) ++ _dl_dprintf(2, "symbol '%s': ", ++ strtab + symtab[symtab_index].st_name); ++ ++ if (res < 0) { ++ int reloc_type = ELF32_R_TYPE(rpnt->r_info); ++#if defined(__SUPPORT_LD_DEBUG__) ++ _dl_dprintf(2, "can't handle reloc type %s\n", ++ _dl_reltypes(reloc_type)); ++#else ++ _dl_dprintf(2, "can't handle reloc type %x\n", ++ reloc_type); ++#endif ++ _dl_exit(-res); ++ } else { ++ _dl_dprintf(2, "can't resolve symbol\n"); ++ return res; ++ } ++ } ++ ++ return 0; ++} ++ ++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) ++{ ++ int reloc_type; ++ int symtab_index; ++ char *symname; ++ unsigned long *reloc_addr; ++ unsigned long symbol_addr; ++#if defined(__SUPPORT_LD_DEBUG__) ++ unsigned long old_val; ++#endif ++ ++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); ++ reloc_type = ELF32_R_TYPE(rpnt->r_info); ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ symbol_addr = 0; ++ symname = strtab + symtab[symtab_index].st_name; ++ ++ if (symtab_index) { ++ symbol_addr = (unsigned long) ++ _dl_find_hash(strtab + symtab[symtab_index].st_name, ++ tpnt->symbol_scope, tpnt, ++ elf_machine_type_class(reloc_type)); ++ ++ /* Allow undefined references to weak symbols */ ++ if (!symbol_addr && ++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { ++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", ++ _dl_progname, symname); ++ return 0; ++ } ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ old_val = *reloc_addr; ++#endif ++ switch (reloc_type) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr + rpnt->r_addend; ++ break; ++ case R_AVR32_RELATIVE: ++ *reloc_addr = (unsigned long)tpnt->loadaddr ++ + rpnt->r_addend; ++ break; ++ default: ++ return -1; ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ if (_dl_debug_reloc && _dl_debug_detail) ++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", ++ old_val, *reloc_addr); ++#endif ++ ++ return 0; ++} ++ ++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ /* TODO: Might want to support this in order to get faster ++ * startup times... */ ++} ++ ++int _dl_parse_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, ++ _dl_do_reloc); ++} +Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/resolve.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/resolve.S 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,28 @@ ++/* ++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as ++ * indicated in register r12 and jumps to the resolved address. ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ * ++ * Copyright (C) 2004 Atmel Norway ++ */ ++ ++#define ip r5 ++ ++ .text ++ .global _dl_linux_resolve ++ .type _dl_linux_resolve,@function ++_dl_linux_resolve: ++ /* The PLT code pushed r8 for us. It contains the address of this ++ function's GOT entry, that is entry 0. ip contains the address ++ of the GOT entry of the function we wanted to call. */ ++ stm --sp, r9-r12, lr ++ mov r11, r8 ++ sub r12, ip, r8 ++ rcall _dl_linux_resolver ++ mov ip, r12 ++ popm r8-r12,lr ++ mov pc, ip ++ .size _dl_linux_resolve, . - _dl_linux_resolve +Index: uClibc-0.9.28-avr32/ldso/ldso/dl-startup.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/ldso/ldso/dl-startup.c 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/ldso/ldso/dl-startup.c 2006-10-19 15:05:52.000000000 +0200 +@@ -217,7 +217,9 @@ static void * __attribute_used__ _dl_sta + /* some arches (like MIPS) we have to tweak the GOT before relocations */ + PERFORM_BOOTSTRAP_GOT(tpnt); + +-#else ++#endif ++ ++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) + + /* OK, now do the relocations. We do not do a lazy binding here, so + that once we are done, we have considerably more flexibility. */ +@@ -259,7 +261,7 @@ static void * __attribute_used__ _dl_sta + rel_addr += relative_count * sizeof(ELF_RELOC);; + } + +- rpnt = (ELF_RELOC *) (rel_addr + load_addr); ++ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */); + for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { + reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); + symtab_index = ELF_R_SYM(rpnt->r_info); +Index: uClibc-0.9.28-avr32/utils/ldd.c +=================================================================== +--- uClibc-0.9.28-avr32.orig/utils/ldd.c 2006-10-19 15:05:48.000000000 +0200 ++++ uClibc-0.9.28-avr32/utils/ldd.c 2006-10-19 15:05:52.000000000 +0200 +@@ -56,6 +56,11 @@ + #define ELFCLASSM ELFCLASS32 + #endif + ++#if defined(__avr32__) ++#define MATCH_MACHINE(x) (x == EM_AVR32) ++#define ELFCLASSM ELFCLASS32 ++#endif ++ + #if defined(__s390__) + #define MATCH_MACHINE(x) (x == EM_S390) + #define ELFCLASSM ELFCLASS32 +Index: uClibc-0.9.28-avr32/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ uClibc-0.9.28-avr32/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-10-19 15:05:52.000000000 +0200 +@@ -0,0 +1,92 @@ ++/* Machine-dependent pthreads configuration and inline functions. ++ ++ Copyright (C) 2005 Atmel Norway ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If not, ++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#include ++ ++static inline int ++_test_and_set (int *p, int v) __THROW ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline test and set */\n" ++ "1: ssrf 5\n" ++ " ld.w %0, %2\n" ++ " tst %0, %3\n" ++ " breq 2f\n" ++ " stcond %1, %3\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=m"(*p) ++ : "m"(*p), "r"(v) ++ : "memory", "cc"); ++ ++ return result; ++} ++ ++#ifndef PT_EI ++# define PT_EI extern inline ++#endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ return _test_and_set(spinlock, 1); ++} ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME stack_pointer ++register char * stack_pointer __asm__ ("sp"); ++ ++/* Compare-and-swap for semaphores. */ ++ ++#define HAS_COMPARE_AND_SWAP ++PT_EI int ++__compare_and_swap(long int *p, long int oldval, long int newval) ++{ ++ long int result, tmp; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %1, %3\n" ++ " cp.w %1, %5\n" ++ " sreq %0\n" ++ " brne 2f\n" ++ " stcond %2, %4\n" ++ " brne 1b\n" ++ "2:" ++ : "=&r"(result), "=&r"(tmp), "=m"(*p) ++ : "m"(*p), "r"(newval), "r"(oldval) ++ : "cc", "memory"); ++ ++ return result; ++} ++ ++#endif /* pt-machine.h */ diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config index c59defd311..478c713cb8 100644 --- a/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config +++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config @@ -32,23 +32,6 @@ ARCH_SUPPORTS_BIG_ENDIAN=y UCLIBC_COMPLETELY_PIC=y CONFIG_AP7000=y LINKRELAX=y -# CONFIG_GENERIC_386 is not set -# CONFIG_386 is not set -# CONFIG_486 is not set -# CONFIG_586 is not set -# CONFIG_586MMX is not set -# CONFIG_686 is not set -# CONFIG_PENTIUMII is not set -# CONFIG_PENTIUMIII is not set -# CONFIG_PENTIUM4 is not set -# CONFIG_K6 is not set -# CONFIG_K7 is not set -# CONFIG_ELAN is not set -# CONFIG_CRUSOE is not set -# CONFIG_WINCHIPC6 is not set -# CONFIG_WINCHIP2 is not set -# CONFIG_CYRIXIII is not set -# CONFIG_NEHEMIAH is not set # ARCH_LITTLE_ENDIAN is not set ARCH_BIG_ENDIAN=y # ARCH_HAS_NO_MMU is not set @@ -57,7 +40,7 @@ UCLIBC_HAS_FLOATS=y # HAS_FPU is not set UCLIBC_HAS_SOFT_FLOAT=y DO_C99_MATH=y -KERNEL_SOURCE="/usr/src/linux" +KERNEL_SOURCE="/media/hda4/OE/build/tmp-new/angstrom/cross/avr32-angstrom-linux-uclibc" C_SYMBOL_PREFIX="" HAVE_DOT_CONFIG=y @@ -86,7 +69,7 @@ UCLIBC_STATIC_LDCONFIG=y # MALLOC is not set # MALLOC_SIMPLE is not set MALLOC_STANDARD=y -# MALLOC_GLIBC_COMPAT is not set +MALLOC_GLIBC_COMPAT=y UCLIBC_DYNAMIC_ATEXIT=y HAS_SHADOW=y UNIX98PTY_ONLY=y @@ -102,6 +85,7 @@ UCLIBC_TZ_FILE_PATH="/etc/TZ" # UCLIBC_HAS_IPV6=y UCLIBC_HAS_RPC=y +UCLIBC_HAS_FULL_RPC=y # # String and Stdio Support @@ -113,11 +97,10 @@ UCLIBC_HAS_CTYPE_SIGNED=y UCLIBC_HAS_CTYPE_UNSAFE=y # UCLIBC_HAS_CTYPE_CHECKED is not set # UCLIBC_HAS_CTYPE_ENFORCED is not set -# UCLIBC_HAS_WCHAR is not set +UCLIBC_HAS_WCHAR=y # UCLIBC_HAS_LOCALE is not set # UCLIBC_HAS_HEXADECIMAL_FLOATS is not set # UCLIBC_HAS_GLIBC_CUSTOM_PRINTF is not set -# USE_OLD_VFPRINTF is not set UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 # UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set # UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set @@ -155,9 +138,9 @@ UCLIBC_HAS_GLOB=y # # Library Installation Options # -SHARED_LIB_LOADER_PREFIX="$(DEVEL_PREFIX)/lib" -RUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/" -DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/" +SHARED_LIB_LOADER_PREFIX="/lib" +RUNTIME_PREFIX="/" +DEVEL_PREFIX="//usr" # # uClibc security related options diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec new file mode 100644 index 0000000000..7d5541cf5a --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec @@ -0,0 +1,41 @@ +Name: uclibc-avr32-kernheaders +Version: 2.6 +Release: 9 +License: GPL +Group: Development/System +Summary: AVR32 header files from the Linux kernel for use by uClibc +BuildRoot: %{_tmppath}/uclibc-kernheaders-root +Source: linux-2.6.16.tar.bz2 +Source1: linux-dot-config +Patch0: linux-2.6.16.11.patch +Patch1: linux-2.6.16.11-avr32-20060626.patch + +%description +uclibc-avr32-kernheaders contain C header files from the Linux kernel +which are necessary for building the uClibc library. These header +files are also necessary for developing programs which use the standard +C libraries. + +If you are developing programs which wil use the standard C libraries, +you should install uclibc-avr32-kernheaders. + +%prep +%setup -q -n linux-2.6.16 +%patch0 -p1 +%patch1 -p1 +cp %{SOURCE1} .config + +%build +make prepare-all ARCH=avr32 CROSS_COMPILE=avr32-linux- + +%install +mkdir -p %{buildroot}/usr/avr32-linux/include +cp -a include/{linux,asm,asm-avr32,asm-generic} %{buildroot}/usr/avr32-linux/include + + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root) +/usr/avr32-linux/include diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch new file mode 100644 index 0000000000..0813c456b7 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch @@ -0,0 +1,14 @@ +--- uClibc-0.9.28/Rules.mak.orig 2006-03-30 10:23:05.000000000 +0200 ++++ uClibc-0.9.28/Rules.mak 2006-03-30 10:23:07.000000000 +0200 +@@ -272,7 +272,11 @@ + # If -msoft-float isn't supported, we want an error anyway. + # Hmm... might need to revisit this for arm since it has 2 different + # soft float encodings. ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++# GCC on avr32 doesn't support -msoft-float, it's the default. ++else + CPU_CFLAGS += -msoft-float ++endif + ifeq ($(strip $(TARGET_ARCH)),arm) + # No longer needed with current toolchains, but leave it here for now. + # If anyone is actually still using gcc 2.95 (say), they can uncomment it. diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch new file mode 100644 index 0000000000..97ed73471f --- /dev/null +++ b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch @@ -0,0 +1,16 @@ +Index: uclibc/Makefile +=================================================================== +RCS file: /disk1/ic_group/design/I9980/REPOSITORY/I7413/source/uclibc/Makefile,v +retrieving revision 1.1.1.3 +diff -u -r1.1.1.3 Makefile +--- uclibc/Makefile 31 Aug 2005 13:08:25 -0000 1.1.1.3 ++++ uclibc/Makefile 7 Dec 2005 06:38:39 -0000 +@@ -163,7 +163,7 @@ + else \ + extra_exclude="" ; \ + fi ; \ +- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \ ++ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \ + | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX) + ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y) + # Remove floating point related headers since float support is disabled. diff --git a/packages/uclibc/uclibc.inc b/packages/uclibc/uclibc.inc index 7fb8e5cf28..e57ef174a9 100644 --- a/packages/uclibc/uclibc.inc +++ b/packages/uclibc/uclibc.inc @@ -141,7 +141,7 @@ do_configure() { echo "# CONFIG_ARM_EABI is not set" >> ${S}/.config fi - oe_runmake oldconfig + yes '' | oe_runmake oldconfig } do_stage() { @@ -151,7 +151,6 @@ do_stage() { RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \ install_dev install_runtime - oe_runmake utils oe_runmake PREFIX= DEVEL_PREFIX=${UCLIBC_PREFIX}/ \ RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \ install_utils @@ -189,8 +188,14 @@ do_stage() { } do_install() { + # Install into the cross dir (this MUST be done first because we + # will install crt1.o in the install_dev stage and gcc needs it) + oe_runmake PREFIX= DEVEL_PREFIX=${UCLIBC_PREFIX}/ \ + RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \ + install_dev install_runtime + oe_runmake PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \ - install_dev install_runtime install_utils + install_dev install_runtime # We don't really need this in ${includedir} rm -f ${D}${prefix}/include/.cvsignore @@ -216,5 +221,9 @@ do_install() { mv ${D}/usr/bin/* ${D}${bindir}/ rmdir ${D}/usr/bin fi + + oe_runmake utils + oe_runmake PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \ + install_utils } diff --git a/packages/uclibc/uclibc_0.9.28.bb b/packages/uclibc/uclibc_0.9.28.bb index 2c557ec606..d5d1bae4be 100644 --- a/packages/uclibc/uclibc_0.9.28.bb +++ b/packages/uclibc/uclibc_0.9.28.bb @@ -1,5 +1,5 @@ DEFAULT_PREFERENCE = "1" -PR = "r9" +PR = "r10" require uclibc.inc @@ -47,6 +47,30 @@ SRC_URI += " ${THUMB_INTERWORK_RESOLVE_PATCH}" DEFAULT_PREFERENCE_avr32 = "6000" -SRC_URI_append_avr32 = " http://avr32linux.org/twiki/pub/Main/MicroClibcPatches/uClibc-0.9.28-avr1.patch.bz2;patch=1 " - +SRC_URI_append_avr32 = " \ + file://uclibc-makefile.patch;patch=1 \ + file://remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch;patch=1 \ + file://let-optimized-stringops-override-default-ones.patch;patch=1 \ + file://fix-getrusage-argument-type.patch;patch=1 \ + file://fix-__libc_fcntl64-varargs-prototype.patch;patch=1 \ + file://fix-broken-__libc_open-declaration.patch;patch=1 \ + file://avr32-arch-2.patch;patch=1 \ + file://avr32-linkrelax-option.patch;patch=1 \ + file://avr32-string-ops.patch;patch=1 \ + file://no-create_module-on-avr32.patch;patch=1 \ + file://ldso-always-inline-_dl_memcpy.patch;patch=1 \ + file://ldso-define-MAP_FAILED.patch;patch=1 \ + file://ldso-always-inline-syscalls.patch;patch=1 \ + file://ldso-avr32-2.patch;patch=1 \ + file://ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch;patch=1 \ + file://ldso-avr32-startup-hack.patch;patch=1 \ + file://ldd-avr32-support.patch;patch=1 \ + file://libpthread-avr32.patch;patch=1 \ + file://sync-fcntl-h-with-linux-kernel.patch;patch=1 \ + " + + +#file://uClibc-0.9.28-avr32-20060621.patch;patch=1 \ +#file://uClibc-0.9.28-avr32-20061019.patch;patch=1 \ +#file://uclibc-avr32-no-msoft-float.patch;patch=1 \ diff --git a/packages/util-linux/files/fdiskbsdlabel-avr32.patch b/packages/util-linux/files/fdiskbsdlabel-avr32.patch new file mode 100644 index 0000000000..4a7d8f4dc8 --- /dev/null +++ b/packages/util-linux/files/fdiskbsdlabel-avr32.patch @@ -0,0 +1,11 @@ +--- /tmp/fdiskbsdlabel.h 2007-09-14 08:52:56.188364759 +0200 ++++ util-linux-2.12r/fdisk/fdiskbsdlabel.h 2007-09-14 08:53:31.279986639 +0200 +@@ -43,7 +43,7 @@ + + #define BSD_LINUX_BOOTDIR "/usr/ucb/mdec" + +-#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__) ++#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__) || defined(__avr32__) + #define BSD_LABELSECTOR 1 + #define BSD_LABELOFFSET 0 + #elif defined (__alpha__) || defined (__powerpc__) || defined (__ia64__) || defined (__hppa__) diff --git a/packages/util-linux/util-linux_2.12r.bb b/packages/util-linux/util-linux_2.12r.bb index 9d4b59c855..7f8c3dd9f8 100644 --- a/packages/util-linux/util-linux_2.12r.bb +++ b/packages/util-linux/util-linux_2.12r.bb @@ -3,5 +3,6 @@ require util-linux.inc SRC_URI += "file://util-linux_2.12r-12.diff.gz;patch=1" SRC_URI += "file://glibc-fix.patch;patch=1" SRC_URI += "file://glibc-umount2.patch;patch=1" +SRC_URI += "file://fdiskbsdlabel-avr32.patch;patch=1" -PR = "r12" +PR = "r13" diff --git a/packages/xorg-font/xfonts-xorg_6.8.bb b/packages/xorg-font/xfonts-xorg_6.8.bb index f6710dcd5b..e5d0271516 100644 --- a/packages/xorg-font/xfonts-xorg_6.8.bb +++ b/packages/xorg-font/xfonts-xorg_6.8.bb @@ -3,9 +3,10 @@ PR = "r1" # XXX Is this true? These fonts are from X.org. LICENSE = "XFree86" -SRC_URI = "${FREEDESKTOP_CVS}/xorg;module=xc;tag=XORG-6_8_0;method=pserver \ - file://lexer.patch;patch=1" +SRC_URI = "${FREEDESKTOP_CVS}/xorg;module=xc;tag=XORG-6_8_0;method=pserver" +# not necessary, breaks things: +#file://lexer.patch;patch=1" PACKAGES = "${PN}-75dpi ${PN}-100dpi ${PN}-type1 ${PN}-cyrillic ${PN}-ttf ${PN}" FILES_${PN}-75dpi = "${libdir}/X11/fonts/75dpi" diff --git a/packages/xorg-lib/libx11-native_1.0.1.bb b/packages/xorg-lib/libx11-native_1.0.1.bb index 7bc5fd3524..cc33aa30ba 100644 --- a/packages/xorg-lib/libx11-native_1.0.1.bb +++ b/packages/xorg-lib/libx11-native_1.0.1.bb @@ -3,6 +3,7 @@ SECTION = "x11/libs" PRIORITY = "optional" LICENSE = "XFree86" PE = "1" +PR = "r1" FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libx11" @@ -11,7 +12,7 @@ PROVIDES = "x11-native" XORG_PN = "libX11" -SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-1.1.1.tar.bz2" +SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-1.0.1.tar.bz2" S = "${WORKDIR}/libX11-${PV}" inherit native autotools pkgconfig diff --git a/packages/xorg-xserver/xorg-xserver-common.inc b/packages/xorg-xserver/xorg-xserver-common.inc index 2e8535ef30..94215aae7b 100644 --- a/packages/xorg-xserver/xorg-xserver-common.inc +++ b/packages/xorg-xserver/xorg-xserver-common.inc @@ -24,6 +24,7 @@ S = "${WORKDIR}/${XORG_PN}-${PV}" inherit autotools pkgconfig PACKAGES =+ "${PN}-xprint ${PN}-xvfb ${PN}-utils" +#PACKAGES =+ "${PN}-xvfb ${PN}-utils" FILES_${PN}-xprint = "${libdir}/X11/xserver/*/print" FILES_${PN}-xvfb = "${bindir}/Xvfb" diff --git a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb index 4367e40adf..71d0eccba8 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb @@ -29,6 +29,10 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://03-xglamo-no-vesa.patch;patch=1 \ " +SRC_URI_append_avr32 = " \ + file://xorg-avr32-support.diff;patch=1 \ +" + SRC_URI_append_tosa = "file://tosa-fbdev.patch;patch=1" PACKAGE_ARCH_xserver-kdrive-fbdev_tosa = "${MACHINE_ARCH}" diff --git a/packages/xorg-xserver/xserver-kdrive_1.4.bb b/packages/xorg-xserver/xserver-kdrive_1.4.bb index 50b103495b..f2d9810ec4 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.4.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.4.bb @@ -19,7 +19,8 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://xcalibrate-new-input-world-order.patch;patch=1 \ file://tslib-default-device.patch;patch=1 \ file://fbdev-evdev.patch;patch=1 \ - " + file://xorg-avr32-support.diff;patch=1 \ + " S = "${WORKDIR}/xorg-server-${PV}" diff --git a/site/avr32-common b/site/avr32-common index 5bce901caa..b5b176cad7 100644 --- a/site/avr32-common +++ b/site/avr32-common @@ -1,3 +1,25 @@ glib_cv_stack_grows=${glib_cv_stack_grows=no} ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=yes} glib_cv_uscore=${glib_cv_uscore=no} +ac_cv_func_setpgrp_void=${ac_cv_func_setpgrp_void=yes} + +#dbus-glib +ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=yes} + +# set MALLOC_GLIBC_COMPAT=y in your uclibc .config for this +ac_cv_func_malloc_0_nonnull=${ac_cv_func_malloc_0_nonnull=yes} + +#gstreamer +as_cv_unaligned_access=${as_cv_unaligned_access=no} + +#readline +bash_cv_have_mbstate_t=${bash_cv_have_mbstate_t=yes} + +#libpcap +ac_cv_linux_vers=${ac_cv_linux_vers=2} + +#startup notification +ac_cv_func_realloc_works=${ac_cv_func_realloc_works=yes} +ac_cv_func_realloc_0_nonnull=${ac_cv_func_realloc_0_nonnull=yes} +lf_cv_sane_realloc=yes + -- cgit v1.2.3 From 59c5c06d11e26e5435f8f0c2fd0902f1dece57dc Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 24 Jan 2008 14:23:27 +0000 Subject: disapproval of revision '1db951a66d993086346a502253112d6a52d1ad3f' --- conf/distro/include/angstrom-uclibc.inc | 5 - conf/distro/include/angstrom.inc | 2 - conf/machine/at32stk1000.conf | 6 +- conf/machine/atngw100.conf | 6 +- packages/avahi/avahi_0.6.21.bb | 1 - packages/avahi/files/avr32-ipv6-fix.patch | 42 - packages/binutils/binutils_2.17.bb | 3 +- .../busybox/busybox-1.2.1/avr32/.mtn2git_empty | 0 packages/busybox/busybox-1.7.2/angstrom/defconfig | 30 +- packages/busybox/busybox_1.2.1.bb | 1 - packages/fuse/gmailfs.inc | 23 +- packages/gcc/gcc-cross_4.1.2.bb | 2 - packages/gcc/gcc-package-cross.inc | 10 +- packages/gcc/gcc-package.inc | 6 +- packages/gcc/gcc_4.1.2.bb | 19 - packages/gcc/gcc_4.2.1.bb | 31 +- packages/gpephone/libmsgenabler2_svn.bb | 2 +- packages/gtk+/gtk+_2.10.14.bb | 1 - packages/gtk+/gtk+_2.12.0.bb | 5 +- packages/hwdata/hwdata_0.191.bb | 6 +- packages/libmad/libmad_0.15.1b.bb | 3 - packages/linux/linux_2.6.23.bb | 5 - .../linux/mainstone-kernel/mainstone_defconfig | 1277 ++++ packages/linux/mainstone-kernel_2.6.18.bb | 1 - .../mplayer/files/mplayer-1.0rc1-atmel.2.patch | 6444 -------------------- packages/mplayer/mplayer_0.0+1.0rc1.bb | 8 +- packages/tasks/task-gpephone.bb | 19 +- packages/tasks/task-sdk-base.bb | 3 +- packages/tasks/task-sdk-gpephone.bb | 24 +- packages/tea/tea_17.3.5.bb | 2 - .../libtinymail-0.0.1/no-iconv-detect.patch | 76 +- .../uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch | 2135 ------- .../avr32/avr32-linkrelax-option.patch | 40 - .../uclibc-0.9.28/avr32/avr32-string-ops.patch | 1139 ---- .../fix-__libc_fcntl64-varargs-prototype.patch | 24 - .../avr32/fix-broken-__libc_open-declaration.patch | 30 - .../avr32/fix-getrusage-argument-type.patch | 19 - .../uclibc-0.9.28/avr32/ldd-avr32-support.patch | 25 - .../avr32/ldso-always-inline-_dl_memcpy.patch | 24 - .../avr32/ldso-always-inline-syscalls.patch | 107 - .../uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch | 526 -- ...dso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch | 23 - .../avr32/ldso-avr32-startup-hack.patch | 40 - .../avr32/ldso-define-MAP_FAILED.patch | 23 - ...optimized-stringops-override-default-ones.patch | 28 - .../uclibc-0.9.28/avr32/libpthread-avr32.patch | 105 - .../avr32/no-create_module-on-avr32.patch | 27 - ...ack-and-just-use-asm-generic-if-it-exists.patch | 48 - .../avr32/sync-fcntl-h-with-linux-kernel.patch | 54 - .../avr32/uClibc-0.9.28-avr32-20060621.patch | 4322 ------------- .../avr32/uClibc-0.9.28-avr32-20061019.patch | 4080 ------------- packages/uclibc/uclibc-0.9.28/avr32/uClibc.config | 31 +- .../avr32/uclibc-avr32-kernheaders.spec | 41 - .../avr32/uclibc-avr32-no-msoft-float.patch | 14 - .../uclibc-0.9.28/avr32/uclibc-makefile.patch | 16 - packages/uclibc/uclibc.inc | 15 +- packages/uclibc/uclibc_0.9.28.bb | 30 +- .../util-linux/files/fdiskbsdlabel-avr32.patch | 11 - packages/util-linux/util-linux_2.12r.bb | 3 +- packages/xorg-font/xfonts-xorg_6.8.bb | 5 +- packages/xorg-lib/libx11-native_1.0.1.bb | 3 +- packages/xorg-xserver/xorg-xserver-common.inc | 1 - packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb | 4 - packages/xorg-xserver/xserver-kdrive_1.4.bb | 3 +- site/avr32-common | 22 - 65 files changed, 1461 insertions(+), 19620 deletions(-) delete mode 100644 packages/avahi/files/avr32-ipv6-fix.patch delete mode 100644 packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty create mode 100644 packages/linux/mainstone-kernel/mainstone_defconfig delete mode 100644 packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch delete mode 100644 packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch delete mode 100644 packages/util-linux/files/fdiskbsdlabel-avr32.patch diff --git a/conf/distro/include/angstrom-uclibc.inc b/conf/distro/include/angstrom-uclibc.inc index 7e8e60d7dd..59d40957d5 100644 --- a/conf/distro/include/angstrom-uclibc.inc +++ b/conf/distro/include/angstrom-uclibc.inc @@ -14,10 +14,5 @@ TARGET_OS = "${@['${TARGET_OS_UC}', 'uclinux-uclibc'][bb.data.getVar('TARGET_ARC #Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os" BUILD_OPTIMIZATION = "-Os" - -#Gcc will die with 'internal consistency error when using the above optimizations -FULL_OPTIMIZATION_avr32 = "" -BUILD_OPTIMIZATION_avr32 = "" - CXXFLAGS += "-fvisibility-inlines-hidden" diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc index fe216800c3..aff3ba90d1 100644 --- a/conf/distro/include/angstrom.inc +++ b/conf/distro/include/angstrom.inc @@ -50,8 +50,6 @@ TARGET_FPU_arm ?= "soft" TARGET_FPU_armeb ?= "soft" TARGET_FPU_ixp4xx ?= "soft" -TARGET_FPU_dht-walnut ?= "soft" - #Set the right arch for the feeds #Alphabetically sorted diff --git a/conf/machine/at32stk1000.conf b/conf/machine/at32stk1000.conf index ac63af5e56..2231f80ed2 100644 --- a/conf/machine/at32stk1000.conf +++ b/conf/machine/at32stk1000.conf @@ -11,7 +11,7 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive" #don't try to access tty1 USE_VT = "0" -MACHINE_FEATURES = "kernel26 alsa ext2 usbgadget touchscreen screen" +MACHINE_FEATURES = "kernel26 alsa ext2 usbhost usbgadget screen" # used by sysvinit_2 SERIAL_CONSOLE = "115200" @@ -21,7 +21,3 @@ ROOT_FLASH_SIZE = "8" EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" KERNEL_IMAGETYPE = "uImage" -PREFERRED_VERSION_u-boot = "1.1.4" - -ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* || true;" - diff --git a/conf/machine/atngw100.conf b/conf/machine/atngw100.conf index 17b4c4187a..4df1030570 100644 --- a/conf/machine/atngw100.conf +++ b/conf/machine/atngw100.conf @@ -9,8 +9,7 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive" #don't try to access tty1 USE_VT = "0" -MACHINE_FEATURES = "kernel26 ext2 usbgadget" -PREFERRED_PROVIDER_virtual/kernel = "linux" +MACHINE_FEATURES = "kernel26 ext2 usbhost usbgadget" # used by sysvinit_2 SERIAL_CONSOLE = "115200" @@ -19,7 +18,4 @@ SERIAL_CONSOLE = "115200" ROOT_FLASH_SIZE = "8" EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" -PREFERRED_VERSION_u-boot = "1.1.4" KERNEL_IMAGETYPE = "uImage" - -ROOTFS_POSTPROCESS_COMMAND += " rm ${IMAGE_ROOTFS}/boot/uImage* || true ;" diff --git a/packages/avahi/avahi_0.6.21.bb b/packages/avahi/avahi_0.6.21.bb index 2c30fbc2c8..fa3fef039e 100644 --- a/packages/avahi/avahi_0.6.21.bb +++ b/packages/avahi/avahi_0.6.21.bb @@ -2,4 +2,3 @@ require avahi.inc PR = "r1" SRC_URI += "file://dbus-pre-1.1.1-support.patch;patch=1" -SRC_URI += "file://avr32-ipv6-fix.patch;patch=1" diff --git a/packages/avahi/files/avr32-ipv6-fix.patch b/packages/avahi/files/avr32-ipv6-fix.patch deleted file mode 100644 index f0710a1002..0000000000 --- a/packages/avahi/files/avr32-ipv6-fix.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- /tmp/socket.c 2007-09-14 14:03:01.395330465 +0200 -+++ avahi-0.6.21/avahi-core/socket.c 2007-09-14 14:08:42.081140297 +0200 -@@ -66,6 +66,39 @@ - #endif - #endif - -+#define IPV6_ADDRFORM 1 -+#define IPV6_2292PKTINFO 2 -+#define IPV6_2292HOPOPTS 3 -+#define IPV6_2292DSTOPTS 4 -+#define IPV6_2292RTHDR 5 -+#define IPV6_2292PKTOPTIONS 6 -+#define IPV6_CHECKSUM 7 -+#define IPV6_2292HOPLIMIT 8 -+#define IPV6_NEXTHOP 9 -+#define IPV6_AUTHHDR 10 /* obsolete */ -+#define IPV6_FLOWINFO 11 -+ -+#define IPV6_UNICAST_HOPS 16 -+#define IPV6_MULTICAST_IF 17 -+#define IPV6_MULTICAST_HOPS 18 -+#define IPV6_MULTICAST_LOOP 19 -+#define IPV6_ADD_MEMBERSHIP 20 -+#define IPV6_DROP_MEMBERSHIP 21 -+#define IPV6_ROUTER_ALERT 22 -+#define IPV6_MTU_DISCOVER 23 -+#define IPV6_MTU 24 -+#define IPV6_RECVERR 25 -+#define IPV6_V6ONLY 26 -+#define IPV6_JOIN_ANYCAST 27 -+#define IPV6_LEAVE_ANYCAST 28 -+ -+/* IPV6_MTU_DISCOVER values */ -+#define IPV6_PMTUDISC_DONT 0 -+#define IPV6_PMTUDISC_WANT 1 -+#define IPV6_PMTUDISC_DO 2 -+#define IPV6_PMTUDISC_PROBE 3 -+ -+ - static void mdns_mcast_group_ipv4(struct sockaddr_in *ret_sa) { - assert(ret_sa); - diff --git a/packages/binutils/binutils_2.17.bb b/packages/binutils/binutils_2.17.bb index 69e11497c2..8d38f3a459 100644 --- a/packages/binutils/binutils_2.17.bb +++ b/packages/binutils/binutils_2.17.bb @@ -1,6 +1,6 @@ require binutils.inc -PR = "r2" +PR = "r1" SRC_URI = \ "http://ftp.gnu.org/gnu/binutils/binutils-${PV}.tar.bz2 \ @@ -21,7 +21,6 @@ SRC_URI += "\ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/500-avr32.patch.gz;patch=1 \ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/501-avr32-sreldyn-fix.patch.gz;patch=1 \ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/502-avr32-bfd-dont-allow-direct-refs-to-bss.patch.gz;patch=1 \ - file://503-avr32-fix-got-offset-init.patch;patch=1 \ " # Zecke's OSX fixes diff --git a/packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty b/packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.7.2/angstrom/defconfig b/packages/busybox/busybox-1.7.2/angstrom/defconfig index 29ae0e541c..30e71e8ffe 100644 --- a/packages/busybox/busybox-1.7.2/angstrom/defconfig +++ b/packages/busybox/busybox-1.7.2/angstrom/defconfig @@ -353,15 +353,15 @@ CONFIG_XARGS=y # # Init Utilities # -CONFIG_INIT=y +# CONFIG_INIT is not set # CONFIG_DEBUG_INIT is not set -CONFIG_FEATURE_USE_INITTAB=y -CONFIG_FEATURE_INIT_SCTTY=y +# CONFIG_FEATURE_USE_INITTAB is not set +# CONFIG_FEATURE_INIT_SCTTY is not set # CONFIG_FEATURE_INIT_SYSLOG is not set # CONFIG_FEATURE_EXTRA_QUIET is not set # CONFIG_FEATURE_INIT_COREDUMPS is not set # CONFIG_FEATURE_INITRD is not set -CONFIG_HALT=y +# CONFIG_HALT is not set # CONFIG_MESG is not set # @@ -376,10 +376,10 @@ CONFIG_HALT=y # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set # CONFIG_ADDUSER is not set # CONFIG_DELUSER is not set -CONFIG_GETTY=y +# CONFIG_GETTY is not set CONFIG_FEATURE_UTMP=y # CONFIG_FEATURE_WTMP is not set -CONFIG_LOGIN=y +# CONFIG_LOGIN is not set # CONFIG_PAM is not set # CONFIG_LOGIN_SCRIPTS is not set # CONFIG_FEATURE_NOLOGIN is not set @@ -479,7 +479,7 @@ CONFIG_RDATE=y CONFIG_SWAPONOFF=y CONFIG_SWITCH_ROOT=y CONFIG_UMOUNT=y -CONFIG_FEATURE_UMOUNT_ALL=y +# CONFIG_FEATURE_UMOUNT_ALL is not set # # Common options for mount/umount @@ -522,7 +522,7 @@ CONFIG_FEATURE_LESS_FLAGS=y # CONFIG_MAKEDEVS is not set # CONFIG_FEATURE_MAKEDEVS_LEAF is not set # CONFIG_FEATURE_MAKEDEVS_TABLE is not set -CONFIG_MOUNTPOINT=y +# CONFIG_MOUNTPOINT is not set # CONFIG_MT is not set # CONFIG_RAIDAUTORUN is not set # CONFIG_READAHEAD is not set @@ -577,12 +577,12 @@ CONFIG_FEATURE_IFUPDOWN_IPV4=y CONFIG_FEATURE_IFUPDOWN_IPV6=y CONFIG_FEATURE_IFUPDOWN_MAPPING=y # CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set -CONFIG_INETD=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y +# CONFIG_INETD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set # CONFIG_FEATURE_INETD_RPC is not set CONFIG_IP=y CONFIG_FEATURE_IP_ADDRESS=y @@ -615,7 +615,7 @@ CONFIG_ROUTE=y CONFIG_TELNET=y # CONFIG_FEATURE_TELNET_TTYPE is not set CONFIG_FEATURE_TELNET_AUTOLOGIN=y -CONFIG_TELNETD=y +# CONFIG_TELNETD is not set # CONFIG_FEATURE_TELNETD_STANDALONE is not set CONFIG_TFTP=y CONFIG_FEATURE_TFTP_GET=y diff --git a/packages/busybox/busybox_1.2.1.bb b/packages/busybox/busybox_1.2.1.bb index 3b7016a42c..325111c22f 100644 --- a/packages/busybox/busybox_1.2.1.bb +++ b/packages/busybox/busybox_1.2.1.bb @@ -5,7 +5,6 @@ PR = "r15" SRC_URI += "file://wget-long-options.patch;patch=1 \ file://df_rootfs.patch;patch=1 \ file://defconfig" -SRC_URI_append_avr32 = " file://install-should-unlink-dest-if-it-exists.patch;patch=1" do_configure () { install -m 0644 ${WORKDIR}/defconfig ${S}/.config.oe diff --git a/packages/fuse/gmailfs.inc b/packages/fuse/gmailfs.inc index de4ea18089..9f1c676c87 100644 --- a/packages/fuse/gmailfs.inc +++ b/packages/fuse/gmailfs.inc @@ -1 +1,22 @@ -require gmailfs.inc +DESCRIPTION = "GmailFS provides a mountable Linux filesystem which uses your Gmail account as its storage medium." +HOMEPAGE = "http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html" +LICENSE = "GPLv2" + +DEPENDS = "fuse python-libgmail python-fuse" +RDEPENDS = "fuse python-libgmail python-fuse python-unixadmin python-lang python-textutils python-core" + +SRC_URI = "http://richard.jones.name/google-hacks/gmail-filesystem/${PN}-${PV}.tar.gz" + + +do_install() { + +install -d ${D}${datadir}/gmailfs +install -d ${D}${bindir} +install -d ${D}${sysconfdir} + +install -m 755 ${S}/gmailfs.py ${D}${datadir}/gmailfs/ +install -m 755 ${S}/mount.gmailfs ${D}${bindir} +install -m 644 ${S}/*.conf ${D}${sysconfdir} + +} + diff --git a/packages/gcc/gcc-cross_4.1.2.bb b/packages/gcc/gcc-cross_4.1.2.bb index 306cf9539c..0f63487f2c 100644 --- a/packages/gcc/gcc-cross_4.1.2.bb +++ b/packages/gcc/gcc-cross_4.1.2.bb @@ -17,6 +17,4 @@ require gcc-package-cross.inc SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 " -EXTRA_OECONF_append_avr32= " --disable-libmudflap " - EXTRA_OECONF += "--disable-libunwind-exceptions --with-mpfr=${STAGING_DIR_NATIVE}${layout_exec_prefix}" diff --git a/packages/gcc/gcc-package-cross.inc b/packages/gcc/gcc-package-cross.inc index 51a45cd633..5c6b370d82 100644 --- a/packages/gcc/gcc-package-cross.inc +++ b/packages/gcc/gcc-package-cross.inc @@ -43,12 +43,12 @@ do_install () { # Already in the right location : elif [ -f ${D}${prefix}/lib/libgcc_s.so.? ]; then - mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir} || true + mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir} elif [ -f ${D}${prefix}/*/lib/nof/libgcc_s.so.? ]; then mv -f ${D}${prefix}/*/lib/nof/libgcc_s.so* ${D}${target_base_libdir} else - mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} || true + mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} fi @@ -58,12 +58,12 @@ do_install () { if [ -f ${D}${prefix}/*/lib/nof/libstdc++.so ]; then - mv -f ${D}${prefix}/*/lib/nof/libstdc++.so* ${D}${target_libdir} || true + mv -f ${D}${prefix}/*/lib/nof/libstdc++.so* ${D}${target_libdir} mv -f ${D}${prefix}/*/lib/nof/libg2c.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/nof/libgfortran*.so* ${D}${target_libdir} || true else - mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} || true + mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} mv -f ${D}${prefix}/*/lib/libg2c.so* ${D}${target_libdir} || true mv -f ${D}${prefix}/*/lib/libgfortran*.so* ${D}${target_libdir} || true fi @@ -75,7 +75,7 @@ do_install () { if [ "x${OLD_INHIBIT_PACKAGE_STRIP}" != "x1" ]; then ${TARGET_PREFIX}strip ${D}${target_libdir}/libstdc++.so.* ${TARGET_PREFIX}strip ${D}${target_libdir}/libg2c.so.* || true - ${TARGET_PREFIX}strip ${D}${target_base_libdir}/libgcc_s.so.* || true + ${TARGET_PREFIX}strip ${D}${target_base_libdir}/libgcc_s.so.* ${TARGET_PREFIX}strip ${D}${target_libdir}/libgfortran*.so* || true fi diff --git a/packages/gcc/gcc-package.inc b/packages/gcc/gcc-package.inc index 96f1604997..d1b4607de5 100644 --- a/packages/gcc/gcc-package.inc +++ b/packages/gcc/gcc-package.inc @@ -92,7 +92,11 @@ do_install () { # Move libgcc_s into /lib mkdir -p ${D}${base_libdir} - mv ${D}${libdir}/libgcc_s.so.* ${D}${base_libdir} + if [ -f ${D}${libdir}/nof/libgcc_s.so ]; then + mv ${D}${libdir}/nof/libgcc_s.so.* ${D}${base_libdir} + else + mv ${D}${libdir}/libgcc_s.so.* ${D}${base_libdir} + fi rm -f ${D}${libdir}/libgcc_s.so ln -sf `echo ${libdir}/gcc/${TARGET_SYS}/${BINV} \ | tr -s / \ diff --git a/packages/gcc/gcc_4.1.2.bb b/packages/gcc/gcc_4.1.2.bb index b3eb0100e8..e0801d3c7f 100644 --- a/packages/gcc/gcc_4.1.2.bb +++ b/packages/gcc/gcc_4.1.2.bb @@ -39,25 +39,6 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2 \ SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 " -SRC_URI_avr32 = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.1.0.tar.gz \ -# file://100-uclibc-conf.patch;patch=1 \ -# file://200-uclibc-locale.patch;patch=1 \ -# file://300-libstdc++-pic.patch;patch=1 \ - file://301-missing-execinfo_h.patch;patch=1 \ - file://302-c99-snprintf.patch;patch=1 \ - file://303-c99-complex-ugly-hack.patch;patch=1 \ - file://304-index_macro.patch;patch=1 \ - file://602-sdk-libstdc++-includes.patch;patch=1 \ - file://gcc41-configure.in.patch;patch=1 \ - file://ldflags.patch;patch=1 \ - file://zecke-xgcc-cpp.patch;patch=1 \ - file://cache-amnesia.patch;patch=1 \ - " - -do_compile_prepend_avr32() { - ln -sf ${S}/libstdc++-v3/config/os/uclibc/ ${S}/libstdc++-v3/config/os/uclibc-linux -} - #Set the fortran bits # ',fortran' or '', not 'f77' like gcc3 had FORTRAN = "" diff --git a/packages/gcc/gcc_4.2.1.bb b/packages/gcc/gcc_4.2.1.bb index 4df5f4cc4a..5d049398e4 100644 --- a/packages/gcc/gcc_4.2.1.bb +++ b/packages/gcc/gcc_4.2.1.bb @@ -39,34 +39,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \ file://cache-amnesia.patch;patch=1 \ file://gfortran.patch;patch=1 \ - file://pr34130.patch;patch=1 \ -" - - -SRC_URI_avr32 = " http://ewi546.ewi.utwente.nl/tmp/avr32-gcc-4.2.1-atmel.1.0.1.tar.gz \ - file://100-uclibc-conf.patch;patch=1 \ - file://103-uclibc-conf-noupstream.patch;patch=1 \ - file://200-uclibc-locale.patch;patch=1 \ - file://203-uclibc-locale-no__x.patch;patch=1 \ - file://204-uclibc-locale-wchar_fix.patch;patch=1 \ - file://205-uclibc-locale-update.patch;patch=1 \ - file://300-libstdc++-pic.patch;patch=1 \ - file://301-missing-execinfo_h.patch;patch=1 \ - file://302-c99-snprintf.patch;patch=1 \ - file://303-c99-complex-ugly-hack.patch;patch=1 \ - file://304-index_macro.patch;patch=1 \ - file://305-libmudflap-susv3-legacy.patch;patch=1 \ - file://306-libstdc++-namespace.patch;patch=1 \ - file://307-locale_facets.patch;patch=1 \ - file://402-libbackend_dep_gcov-iov.h.patch;patch=1 \ - file://602-sdk-libstdc++-includes.patch;patch=1 \ - file://740-sh-pr24836.patch;patch=1 \ - file://904-flatten-switch-stmt-00.patch;patch=1 \ - file://gcc41-configure.in.patch;patch=1 \ - file://ldflags.patch;patch=1 \ - file://zecke-xgcc-cpp.patch;patch=1 \ - file://cache-amnesia.patch;patch=1 \ - file://gfortran.patch;patch=1 \ + file://pr34130.patch;patch=1 \ " SRC_URI_append_ep93xx = " \ @@ -107,5 +80,5 @@ require gcc3-build.inc ARCH_FLAGS_FOR_TARGET=-isystem${STAGING_INCDIR} -EXTRA_OECONF += " --disable-libgomp --disable-libssp --disable-bootstrap " +EXTRA_OECONF += " --disable-libssp --disable-bootstrap " diff --git a/packages/gpephone/libmsgenabler2_svn.bb b/packages/gpephone/libmsgenabler2_svn.bb index b105211bde..a294dc93b7 100644 --- a/packages/gpephone/libmsgenabler2_svn.bb +++ b/packages/gpephone/libmsgenabler2_svn.bb @@ -2,7 +2,7 @@ LICENSE = "LiPS" DESCRIPTION = "LiPS message backend library." SECTION = "gpe/libs" PRIORITY = "optional" -DEPENDS = "glib-2.0 dbus-glib librecord2 liblipsevent2 telepathy-mission-control libgsmd libtapi" +DEPENDS = "glib-2.0 dbus-glib librecord2 liblipsevent2 telepathy-mission-control libgsmd-lips" PV = "0.0+svnr-${SRCREV}" PR = "r2" diff --git a/packages/gtk+/gtk+_2.10.14.bb b/packages/gtk+/gtk+_2.10.14.bb index ff6f195fa0..d8ae8ae9ba 100644 --- a/packages/gtk+/gtk+_2.10.14.bb +++ b/packages/gtk+/gtk+_2.10.14.bb @@ -25,7 +25,6 @@ SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \ file://scrolled-placement.patch;patch=1;pnum=0 \ file://treeview-checkbox-size.patch;patch=1;pnum=0 \ file://cell-renderer-edit-focus.patch;patch=1;pnum=0 \ - file://iconview-touchscreen.patch;patch=1 \ " # check for TARGET_FPU=soft and inform configure of the result so it can disable some floating points diff --git a/packages/gtk+/gtk+_2.12.0.bb b/packages/gtk+/gtk+_2.12.0.bb index e18effba38..57ba24e796 100644 --- a/packages/gtk+/gtk+_2.12.0.bb +++ b/packages/gtk+/gtk+_2.12.0.bb @@ -1,6 +1,6 @@ require gtk+.inc -PR = "r2" +PR = "r1" DEPENDS += "cairo" @@ -16,8 +16,7 @@ SRC_URI = "http://download.gnome.org/sources/gtk+/2.12/gtk+-${PV}.tar.bz2 \ file://cellrenderer-cairo.patch;patch=1;pnum=0 \ file://entry-cairo.patch;patch=1;pnum=0 \ file://toggle-font.diff;patch=1;pnum=0 \ - file://scrolled-placement.patch;patch=1;pnum=0 \ - file://iconview-touchscreen.patch;patch=1" + file://scrolled-placement.patch;patch=1;pnum=0" # temporary # file://gtklabel-resize-patch;patch=1 \ # file://menu-deactivate.patch;patch=1 \ diff --git a/packages/hwdata/hwdata_0.191.bb b/packages/hwdata/hwdata_0.191.bb index 2dfe1433bf..5d607ddc1a 100644 --- a/packages/hwdata/hwdata_0.191.bb +++ b/packages/hwdata/hwdata_0.191.bb @@ -1,14 +1,16 @@ DESCRIPTION = "This package contains various hardware identification and configuration data, such as the pci.ids database, or the XFree86/xorg Cards database. It's needed for the kudzu hardware detection." LICENSE = "GPL + X11" +PR = "r1" + SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/main/h/hwdata/hwdata_0.191.orig.tar.gz \ http://archive.ubuntu.com/ubuntu/pool/main/h/hwdata/hwdata_0.191-1.diff.gz;patch=1 \ " PACKAGE_ARCH = "all" - +FILES_${PN} = "${datadir}" do_install() { mkdir -p ${D}${datadir}/hwdata - install -m644 MonitorsDB pci* usb.ids video* upgradelist ${D}${datadir}/hwdata + install -m 644 MonitorsDB pci* usb.ids video* upgradelist ${D}${datadir}/hwdata } diff --git a/packages/libmad/libmad_0.15.1b.bb b/packages/libmad/libmad_0.15.1b.bb index b2a3be36ca..4e486236cd 100644 --- a/packages/libmad/libmad_0.15.1b.bb +++ b/packages/libmad/libmad_0.15.1b.bb @@ -3,11 +3,8 @@ SECTION = "libs" PRIORITY = "optional" DEPENDS = "libid3tag" LICENSE = "GPL" -PR = "r1" SRC_URI = "${SOURCEFORGE_MIRROR}/mad/libmad-${PV}.tar.gz" -SRC_URI_append_avr32 = " file://libmad-0.15.1b-avr32-optimization.patch;patch=1" - S = "${WORKDIR}/libmad-${PV}" inherit autotools diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb index 10c5242582..c143e1dbf9 100644 --- a/packages/linux/linux_2.6.23.bb +++ b/packages/linux/linux_2.6.23.bb @@ -5,7 +5,6 @@ DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_cm-x270 = "1" DEFAULT_PREFERENCE_mpc8313e-rdb = "1" DEFAULT_PREFERENCE_mpc8323e-rdb = "1" -DEFAULT_PREFERENCE_avr32 = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" DEPENDS_append_mpc8323e-rdb = " dtc-native" @@ -27,10 +26,6 @@ SRC_URI += "http://people.redhat.com/mingo/cfs-scheduler/sched-cfs-v2.6.23.12-v2 # Add support for squashfs-lzma (a highly compressed read-only filesystem) SRC_URI += "http://kamikaze.waninkoko.info/patches/2.6.23/klight1/broken-out/squashfs-lzma-2.6.23.patch;patch=1" -SRC_URI_append_avr32 = " \ - file://linux-2.6.23.atmel.3.patch;patch=1 \ - " - SRC_URI_append_cm-x270 = "\ file://0001-cm-x270-base2.patch;patch=1 \ file://0002-cm-x270-match-type.patch;patch=1 \ diff --git a/packages/linux/mainstone-kernel/mainstone_defconfig b/packages/linux/mainstone-kernel/mainstone_defconfig new file mode 100644 index 0000000000..41abfbfeac --- /dev/null +++ b/packages/linux/mainstone-kernel/mainstone_defconfig @@ -0,0 +1,1277 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.18 +# Wed Dec 19 15:51:05 2007 +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +# CONFIG_RELAY is not set +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SHMEM=y +CONFIG_SLAB=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODULE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +# CONFIG_BLK_DEV_IO_TRACE is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# 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_IOP3XX is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +CONFIG_MACH_MAINSTONE=y +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +CONFIG_PXA27x=y +CONFIG_IWMMXT=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set +CONFIG_XSCALE_PMU=y + +# +# Bus support +# + +# +# PCCARD (PCMCIA/CardBus) support +# +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_PREEMPT is not set +# CONFIG_NO_IDLE_HZ is not set +CONFIG_HZ=100 +# CONFIG_AEABI is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=jffs2 console=ttyS0,115200 mem=64M" +# CONFIG_XIP_KERNEL 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 is not set +# CONFIG_BINFMT_MISC is not set +# CONFIG_ARTHUR is not set + +# +# Power management options +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +# CONFIG_PM_DEBUG is not set +CONFIG_APM=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +# CONFIG_PACKET is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER 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 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=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_BIC=y +# 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 + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +# CONFIG_IRLAN is not set +# CONFIG_IRNET is not set +# CONFIG_IRCOMM is not set +# 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 +# + +# +# 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 is not set +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +# CONFIG_BT_L2CAP is not set +# CONFIG_BT_SCO is not set + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +# CONFIG_BT_HCIUART is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIDTL1 is not set +# CONFIG_BT_HCIBT3C is not set +# CONFIG_BT_HCIBLUECARD is not set +# CONFIG_BT_HCIBTUART is not set +# CONFIG_BT_HCIVHCI is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +# CONFIG_IEEE80211_CRYPT_CCMP is not set +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_WIRELESS_EXT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=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 is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=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 is not set +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_OBSOLETE_CHIPS 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_MAINSTONE=y +# 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 + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +CONFIG_BLK_DEV_INITRD=y +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE 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 + +# +# IDE chipset support/bugfixes +# +# CONFIG_IDE_GENERIC is not set +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +# CONFIG_BLK_DEV_SD is not set +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set + +# +# SCSI Transport Attributes +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_SATA is not set +# CONFIG_SCSI_DEBUG is not set + +# +# PCMCIA SCSI adapter support +# +# CONFIG_PCMCIA_AHA152X is not set +# CONFIG_PCMCIA_FDOMAIN is not set +# CONFIG_PCMCIA_NINJA_SCSI is not set +# CONFIG_PCMCIA_QLOGIC is not set +# CONFIG_PCMCIA_SYM53C500 is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# PHY device support +# +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_SMC91X=y +# CONFIG_DM9000 is not set +# CONFIG_SMC911X is not set + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# PCMCIA network device support +# +# CONFIG_NET_PCMCIA is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# 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_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT 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_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=16 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# Ftape, the floppy tape device driver +# + +# +# 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 + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set + +# +# Dallas's 1-wire bus +# + +# +# Hardware Monitoring support +# +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Misc devices +# + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +CONFIG_VIDEO_V4L2=y + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +CONFIG_FIRMWARE_EDID=y +CONFIG_FB=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# 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 +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +# CONFIG_FB_PXA_PARAMETERS is not set +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Logo configuration +# +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=m +CONFIG_BACKLIGHT_DEVICE=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_LCD_DEVICE=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_OHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_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_LIBUSUAL is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +CONFIG_USB_HIDINPUT=y +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_ACECAD is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_TOUCHSCREEN is not set +# CONFIG_USB_YEALINK is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set +# CONFIG_USB_ATI_REMOTE2 is not set +# CONFIG_USB_KEYSPAN_REMOTE is not set +# CONFIG_USB_APPLETOUCH is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGETKIT is not set +# CONFIG_USB_PHIDGETSERVO is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=m +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +CONFIG_USB_GADGET_DUMMY_HCD=y +CONFIG_USB_DUMMY_HCD=m +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_GADGETFS is not set +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +# CONFIG_USB_G_SERIAL is not set + +# +# MMC/SD Card support +# +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=m +CONFIG_MMC_PXA=m + +# +# Real Time Clock +# +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" + +# +# 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 + +# +# RTC drivers +# +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_SA1100=y +# CONFIG_RTC_DRV_TEST is not set +# CONFIG_RTC_DRV_V3020 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 is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_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 is not set +CONFIG_FAT_DEFAULT_CODEPAGE=437 +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_SYSFS=y +# CONFIG_TMPFS is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_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 +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# 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 + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_KERNEL=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_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_RWSEMS is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_FS is not set +# CONFIG_DEBUG_VM is not set +CONFIG_FRAME_POINTER=y +# CONFIG_UNWIND_INFO is not set +CONFIG_FORCED_INLINING=y +# CONFIG_RCU_TORTURE_TEST is not set +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_WAITQ is not set +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 + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +# CONFIG_CRYPTO_MD5 is not set +CONFIG_CRYPTO_SHA1=m +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_DES 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_DEFLATE is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_TEST is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y diff --git a/packages/linux/mainstone-kernel_2.6.18.bb b/packages/linux/mainstone-kernel_2.6.18.bb index 2785baa227..290bb5911d 100644 --- a/packages/linux/mainstone-kernel_2.6.18.bb +++ b/packages/linux/mainstone-kernel_2.6.18.bb @@ -11,7 +11,6 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 \ S = "${WORKDIR}/linux-2.6.18" - COMPATIBLE_HOST = 'arm.*-linux' ARCH = "arm" diff --git a/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch b/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch deleted file mode 100644 index 800f43e8eb..0000000000 --- a/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch +++ /dev/null @@ -1,6444 +0,0 @@ - cfg-common.h | 4 + - cfg-mencoder.h | 4 + - cfg-mplayer.h | 4 + - configure | 13 +- - libaf/af_format.c | 7 + - libavcodec/Makefile | 7 + - libavcodec/avr32/dsputil_avr32.c | 2678 ++++++++++++++++++++++++++++++++++++++ - libavcodec/avr32/fdct.S | 541 ++++++++ - libavcodec/avr32/h264idct.S | 451 +++++++ - libavcodec/avr32/idct.S | 829 ++++++++++++ - libavcodec/avr32/mc.S | 434 ++++++ - libavcodec/avr32/pico.h | 260 ++++ - libavcodec/bitstream.h | 77 +- - libavcodec/dsputil.c | 3 + - libavcodec/h264.c | 15 + - libavutil/common.h | 16 + - libavutil/internal.h | 9 + - libfaad2/common.h | 2 +- - libmpcodecs/ad_libmad.c | 5 + - libswscale/pico-avr32.h | 137 ++ - libswscale/swscale_internal.h | 2 +- - libswscale/yuv2rgb.c | 14 + - libswscale/yuv2rgb_avr32.c | 416 ++++++ - libvo/vo_fbdev2.c | 101 ++- - version.sh | 2 +- - 25 files changed, 6011 insertions(+), 20 deletions(-) - create mode 100644 libavcodec/avr32/dsputil_avr32.c - create mode 100644 libavcodec/avr32/fdct.S - create mode 100644 libavcodec/avr32/h264idct.S - create mode 100644 libavcodec/avr32/idct.S - create mode 100644 libavcodec/avr32/mc.S - create mode 100644 libavcodec/avr32/pico.h - create mode 100644 libswscale/pico-avr32.h - create mode 100644 libswscale/yuv2rgb_avr32.c - -diff --git a/cfg-common.h b/cfg-common.h -index 780df38..7d878a8 100644 ---- a/cfg-common.h -+++ b/cfg-common.h -@@ -235,6 +235,10 @@ - {"tsprobe", &ts_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL}, - {"tskeepbroken", &ts_keep_broken, CONF_TYPE_FLAG, 0, 0, 1, NULL}, - -+#ifdef ARCH_AVR32 -+ {"use-pico", &avr32_use_pico, CONF_TYPE_FLAG, 0, 0, 1, NULL}, -+ {"nouse-pico", &avr32_use_pico, CONF_TYPE_FLAG, 0, 1, 0, NULL}, -+#endif - // draw by slices or whole frame (useful with libmpeg2/libavcodec) - {"slices", &vd_use_slices, CONF_TYPE_FLAG, 0, 0, 1, NULL}, - {"noslices", &vd_use_slices, CONF_TYPE_FLAG, 0, 1, 0, NULL}, -diff --git a/cfg-mencoder.h b/cfg-mencoder.h -index 411b748..addf791 100644 ---- a/cfg-mencoder.h -+++ b/cfg-mencoder.h -@@ -5,6 +5,10 @@ - - #include "cfg-common.h" - -+#ifdef ARCH_AVR32 -+extern int avr32_use_pico; -+#endif -+ - #ifdef USE_FAKE_MONO - extern int fakemono; // defined in dec_audio.c - #endif -diff --git a/cfg-mplayer.h b/cfg-mplayer.h -index 62b6eac..31499c2 100644 ---- a/cfg-mplayer.h -+++ b/cfg-mplayer.h -@@ -4,6 +4,10 @@ - - #include "cfg-common.h" - -+#ifdef ARCH_AVR32 -+extern int avr32_use_pico; -+#endif -+ - extern int noconsolecontrols; - - #if defined(HAVE_FBDEV)||defined(HAVE_VESA) -diff --git a/configure b/configure -index 29002c8..56c6fe4 100755 ---- a/configure -+++ b/configure -@@ -1203,6 +1203,15 @@ EOF - _optimizing="$proc" - ;; - -+ avr32) -+ _def_arch='#define ARCH_AVR32' -+ _target_arch='TARGET_ARCH_AVR32 = yes' -+ iproc='avr32' -+ proc='' -+ _march='' -+ _mcpu='' -+ _optimizing='' -+ ;; - arm|armv4l|armv5tel) - _def_arch='#define ARCH_ARMV4L 1' - _target_arch='TARGET_ARCH_ARMV4L = yes' -@@ -1533,7 +1542,7 @@ echores $_named_asm_args - # Checking for CFLAGS - _stripbinaries=yes - if test "$_profile" != "" || test "$_debug" != "" ; then -- CFLAGS="-W -Wall -O2 $_march $_mcpu $_debug $_profile" -+ CFLAGS="-W -Wall -O4 $_march $_mcpu $_debug $_profile" - if test "$_cc_major" -ge "3" ; then - CFLAGS=`echo "$CFLAGS" | sed -e 's/\(-Wall\)/\1 -Wno-unused-parameter/'` - fi -@@ -3794,7 +3803,7 @@ fi - - - echocheck "X11 headers presence" -- for I in `echo $_inc_extra | sed s/-I//g` /usr/X11/include /usr/X11R6/include /usr/include/X11R6 /usr/include /usr/openwin/include ; do -+ for I in `echo $_inc_extra | sed s/-I//g`; do - if test -f "$I/X11/Xlib.h" ; then - _inc_x11="-I$I" - _x11_headers="yes" -diff --git a/libaf/af_format.c b/libaf/af_format.c -index e5b7cc9..5d7ea6d 100644 ---- a/libaf/af_format.c -+++ b/libaf/af_format.c -@@ -20,7 +20,14 @@ - // Integer to float conversion through lrintf() - #ifdef HAVE_LRINTF - #include -+ -+#ifdef ARCH_AVR32 -+#define lrintf(x) rint(x) -+#define llrint(x) (long long)rint(x) -+#else - long int lrintf(float); -+#endif -+ - #else - #define lrintf(x) ((int)(x)) - #endif -diff --git a/libavcodec/Makefile b/libavcodec/Makefile -index 17b6c45..8e1dc96 100644 ---- a/libavcodec/Makefile -+++ b/libavcodec/Makefile -@@ -360,6 +360,12 @@ OBJS-$(TARGET_ARCH_SPARC) += sparc/dsputil_vis.o \ - - sparc/dsputil_vis.o: CFLAGS += -mcpu=ultrasparc -mtune=ultrasparc - -+# avr32 specific stuff -+ifeq ($(TARGET_ARCH_AVR32),yes) -+ASM_OBJS += avr32/idct.o avr32/fdct.o avr32/mc.o avr32/h264idct.o -+OBJS += avr32/dsputil_avr32.o -+endif -+ - # sun mediaLib specific stuff - OBJS-$(HAVE_MLIB) += mlib/dsputil_mlib.o \ - -@@ -419,6 +425,7 @@ tests: apiexample $(TESTS) - clean:: - rm -f \ - i386/*.o i386/*~ \ -+ avr32/*.o avr32/*~ \ - armv4l/*.o armv4l/*~ \ - mlib/*.o mlib/*~ \ - alpha/*.o alpha/*~ \ -diff --git a/libavcodec/avr32/dsputil_avr32.c b/libavcodec/avr32/dsputil_avr32.c -new file mode 100644 -index 0000000..200284d ---- /dev/null -+++ b/libavcodec/avr32/dsputil_avr32.c -@@ -0,0 +1,2678 @@ -+/* -+ * Copyright (c) 2007 Atmel Corporation. All rights reserved. -+ * -+ * 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 ATMEL may not be used to endorse or promote products -+ * derived from this software without specific prior written -+ * permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL -+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -+ * DAMAGE. -+ */ -+ -+#include "../dsputil.h" -+#include "pico.h" -+ -+int avr32_use_pico = 1; -+ -+//#define CHECK_DSP_FUNCS_AGAINST_C -+ -+#ifdef CHECK_DSP_FUNCS_AGAINST_C -+#define DSP_FUNC_NAME(name) test_ ## name -+#else -+#define DSP_FUNC_NAME(name) name -+#endif -+ -+union doubleword { -+ int64_t doubleword; -+ struct { -+ int32_t top; -+ int32_t bottom; -+ } words; -+}; -+ -+#undef LD16 -+#undef LD32 -+#undef LD64 -+ -+#define LD16(a) (*((uint16_t*)(a))) -+#define LD32(a) (*((uint32_t*)(a))) -+#define LD64(a) (*((uint64_t*)(a))) -+#define LD64_UNALIGNED(a) \ -+ ({ union doubleword __tmp__; \ -+ __tmp__.words.top = LD32(a); \ -+ __tmp__.words.bottom = LD32(a + 4); \ -+ __tmp__.doubleword; }) -+ -+#undef ST32 -+#undef ST16 -+ -+#define ST16(a, b) *((uint16_t*)(a)) = (b) -+#define ST32(a, b) *((uint32_t*)(a)) = (b) -+ -+#undef rnd_avg32 -+#define rnd_avg32(a, b) \ -+ ({ uint32_t __tmp__;\ -+ asm("pavg.ub\t%0, %1, %2" : "=r"(__tmp__) : "r"(a), "r"(b));\ -+ __tmp__;}) -+ -+void idct_avr32(DCTELEM *data); -+void fdct_avr32(DCTELEM *data); -+ -+void idct_put_avr32(uint8_t *dest, int line_size, DCTELEM *data); -+void idct_add_avr32(uint8_t *dest, int line_size, DCTELEM *data); -+ -+void h264_idct_add_avr32(uint8_t *dest, DCTELEM *data, int stride); -+void h264_idct8_add_avr32(uint8_t *dest, DCTELEM *data, int stride); -+ -+#define extern_dspfunc(PFX, NUM) \ -+ void PFX ## _pixels ## NUM ## _avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ -+ void PFX ## _pixels ## NUM ## _h_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ -+ void PFX ## _pixels ## NUM ## _v_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ -+ void PFX ## _pixels ## NUM ## _hv_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ) -+ -+extern_dspfunc(put, 8); -+extern_dspfunc(put_no_rnd, 8); -+extern_dspfunc(avg, 8); -+extern_dspfunc(avg_no_rnd, 8); -+#undef extern_dspfunc -+ -+#ifdef CHECK_DSP_FUNCS_AGAINST_C -+#define extern_dspfunc(PFX, NUM) \ -+ void PFX ## _pixels ## NUM ## _c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ -+ void PFX ## _pixels ## NUM ## _x2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ -+ void PFX ## _pixels ## NUM ## _y2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \ -+ void PFX ## _pixels ## NUM ## _xy2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ) -+ -+extern_dspfunc(put, 4); -+extern_dspfunc(put_no_rnd, 4); -+extern_dspfunc(put, 8); -+extern_dspfunc(put_no_rnd, 8); -+extern_dspfunc(put, 16); -+extern_dspfunc(put_no_rnd, 16); -+extern_dspfunc(avg, 8); -+extern_dspfunc(avg_no_rnd, 8); -+extern_dspfunc(avg, 16); -+extern_dspfunc(avg_no_rnd, 16); -+ -+ -+#undef extern_dspfunc -+#define extern_dspfunc(PFX, NUM) \ -+void PFX ## NUM ## _mc00_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc10_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc20_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc30_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc01_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc11_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc21_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc31_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc02_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc12_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc22_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc32_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc03_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc13_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc23_c(uint8_t *dst, uint8_t *src, int stride); \ -+void PFX ## NUM ## _mc33_c(uint8_t *dst, uint8_t *src, int stride); \ -+ -+extern_dspfunc(put_h264_qpel, 16); -+extern_dspfunc(put_h264_qpel, 8); -+extern_dspfunc(put_h264_qpel, 4); -+extern_dspfunc(avg_h264_qpel, 16); -+extern_dspfunc(avg_h264_qpel, 8); -+extern_dspfunc(avg_h264_qpel, 4); -+ -+#undef extern_dspfunc -+ -+void put_h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); -+void put_h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); -+void put_h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); -+ -+void avg_h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); -+void avg_h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); -+void avg_h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y); -+ -+ -+void dump_block8(uint8_t *block, int line_size, int h); -+void dump_block4(uint8_t *block, int line_size, int h); -+void dump_block(uint8_t *block, int line_size, int h, int w); -+ -+void check_block8(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, -+ int h, char *name, int max_dev); -+void check_block4(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, -+ int h, char *name, int max_dev); -+void check_block(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, -+ int h, int width, char *name, int max_dev); -+ -+#define PIXOP2( OPNAME, OP ) \ -+void OPNAME ## _pixels4_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\ -+ int i;\ -+ for(i=0; i> 16)); -+ ST16(dst + 1*dstStride, (short)PICO_GET_W(PICO_OUTPIX0)); -+ -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_MVRC_W(PICO_INPIX0, src0); -+ PICO_MVRC_W(PICO_INPIX1, src1); -+ PICO_MVRC_W(PICO_INPIX2, src2); -+ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0); -+ PICO_MVRC_W(PICO_INPIX2, src3); -+ PICO_MVRC_W(PICO_INPIX1, src4); -+ PICO_MVRC_W(PICO_INPIX0, src5); -+ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 0, 6, 3, 0); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3); -+ PICO_MVRC_W(PICO_INPIX0, src0); -+ PICO_MVRC_W(PICO_INPIX1, src1); -+ PICO_MVRC_W(PICO_INPIX2, src2); -+ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 1, 9, 6, 3); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_MVRC_W(PICO_INPIX0, src1); -+ PICO_MVRC_W(PICO_INPIX1, src2); -+ PICO_MVRC_W(PICO_INPIX2, src3); -+ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0); -+ PICO_MVRC_W(PICO_INPIX2, src4); -+ PICO_MVRC_W(PICO_INPIX1, src5); -+ PICO_MVRC_W(PICO_INPIX0, src6); -+ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 2, 6, 3, 0); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3); -+ PICO_MVRC_W(PICO_INPIX0, src1); -+ PICO_MVRC_W(PICO_INPIX1, src2); -+ PICO_MVRC_W(PICO_INPIX2, src3); -+ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 3, 9, 6, 3); -+ -+ ST16(dst + 2*dstStride, (short)(PICO_GET_W(PICO_OUTPIX0) >> 16)); -+ ST16(dst + 3*dstStride, (short)PICO_GET_W(PICO_OUTPIX0)); -+ -+ dst += 2; -+ src += 2; -+ } -+} -+ -+ -+ -+ -+static void avg_h264_qpel4_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ -+ int32_t tmp_block[48]; -+ int32_t *tmp = tmp_block; -+ int i; -+ -+ set_pico_config(&h264_qpel4_hv_lowpass_config); -+ -+ src -= 2; -+ for ( i = 0; i < 2; i++ ){ -+ int srcB= LD32(src - 2*srcStride); -+ int srcA= LD32(src - 1*srcStride); -+ int src0= LD32(src + 0 *srcStride); -+ int src1= LD32(src + 1 *srcStride); -+ int src2= LD32(src + 2 *srcStride); -+ int src3= LD32(src + 3 *srcStride); -+ int src4= LD32(src + 4 *srcStride); -+ int src5= LD32(src + 5 *srcStride); -+ int src6= LD32(src + 6 *srcStride); -+ -+ PICO_MVRC_W(PICO_INPIX0, srcB); -+ PICO_MVRC_W(PICO_INPIX1, srcA); -+ PICO_MVRC_W(PICO_INPIX2, src0); -+ PICO_OP(0, 0, 0, 4, 8); -+ PICO_MVRC_W(PICO_INPIX2, src1); -+ PICO_MVRC_W(PICO_INPIX1, src2); -+ PICO_MVRC_W(PICO_INPIX0, src3); -+ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); -+ PICO_STCM_W(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ tmp += 3; -+ -+ PICO_OP(0, 0, 1, 5, 9); -+ PICO_MVRC_W(PICO_INPIX0, srcB); -+ PICO_MVRC_W(PICO_INPIX1, srcA); -+ PICO_MVRC_W(PICO_INPIX2, src0); -+ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); -+ PICO_STCM_W(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ tmp += 3; -+ -+ PICO_MVRC_W(PICO_INPIX0, src1); -+ PICO_OP(0, 0, 4, 8, 0); -+ PICO_MVRC_W(PICO_INPIX2, src2); -+ PICO_MVRC_W(PICO_INPIX1, src3); -+ PICO_MVRC_W(PICO_INPIX0, src4); -+ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); -+ PICO_STCM_W(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ tmp += 3; -+ -+ PICO_OP(0, 0, 1, 5, 9); -+ PICO_MVRC_W(PICO_INPIX0, srcA); -+ PICO_MVRC_W(PICO_INPIX1, src0); -+ PICO_MVRC_W(PICO_INPIX2, src1); -+ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); -+ PICO_STCM_W(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ tmp += 3; -+ -+ PICO_MVRC_W(PICO_INPIX0, src2); -+ PICO_OP(0, 0, 4, 8, 0); -+ PICO_MVRC_W(PICO_INPIX2, src3); -+ PICO_MVRC_W(PICO_INPIX1, src4); -+ PICO_MVRC_W(PICO_INPIX0, src5); -+ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); -+ PICO_STCM_W(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ tmp += 3; -+ -+ PICO_OP(0, 0, 1, 5, 9); -+ PICO_MVRC_W(PICO_INPIX0, src0); -+ PICO_MVRC_W(PICO_INPIX1, src1); -+ PICO_MVRC_W(PICO_INPIX2, src2); -+ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); -+ PICO_STCM_W(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ tmp += 3; -+ -+ PICO_MVRC_W(PICO_INPIX0, src3); -+ PICO_OP(0, 0, 4, 8, 0); -+ PICO_MVRC_W(PICO_INPIX2, src4); -+ PICO_MVRC_W(PICO_INPIX1, src5); -+ PICO_MVRC_W(PICO_INPIX0, src6); -+ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8); -+ PICO_STCM_W(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ tmp += 3; -+ -+ PICO_OP(0, 0, 1, 5, 9); -+ PICO_MVRC_W(PICO_INPIX0, src1); -+ PICO_MVRC_W(PICO_INPIX1, src2); -+ PICO_MVRC_W(PICO_INPIX2, src3); -+ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9); -+ PICO_STCM_W(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ tmp += 3; -+ src += 2; -+ } -+ -+ src -= 1; -+ tmp -= 48; -+ -+ -+ PICO_PUT_W(PICO_CONFIG, -+ PICO_OUTPUT_MODE(PICO_PLANAR_MODE) -+ | PICO_INPUT_MODE(PICO_VERT_FILTER_MODE) -+ | PICO_COEFF_FRAC_BITS(10) -+ | PICO_OFFSET_FRAC_BITS(10)); -+ -+ for ( i = 0; i < 2; i++ ){ -+ int srcB= LD32(src - 2*srcStride); -+ int srcA= LD32(src - 1*srcStride); -+ int src0= LD32(src + 0 *srcStride); -+ int src1= LD32(src + 1 *srcStride); -+ int src2= LD32(src + 2 *srcStride); -+ int src3= LD32(src + 3 *srcStride); -+ int src4= LD32(src + 4 *srcStride); -+ int src5= LD32(src + 5 *srcStride); -+ int src6= LD32(src + 6 *srcStride); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_MVRC_W(PICO_INPIX0, srcB); -+ PICO_MVRC_W(PICO_INPIX1, srcA); -+ PICO_MVRC_W(PICO_INPIX2, src0); -+ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0); -+ PICO_MVRC_W(PICO_INPIX2, src1); -+ PICO_MVRC_W(PICO_INPIX1, src2); -+ PICO_MVRC_W(PICO_INPIX0, src3); -+ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 0, 6, 3, 0); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3); -+ PICO_MVRC_W(PICO_INPIX0, srcB); -+ PICO_MVRC_W(PICO_INPIX1, srcA); -+ PICO_MVRC_W(PICO_INPIX2, src0); -+ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 1, 9, 6, 3); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_MVRC_W(PICO_INPIX0, srcA); -+ PICO_MVRC_W(PICO_INPIX1, src0); -+ PICO_MVRC_W(PICO_INPIX2, src1); -+ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0); -+ PICO_MVRC_W(PICO_INPIX2, src2); -+ PICO_MVRC_W(PICO_INPIX1, src3); -+ PICO_MVRC_W(PICO_INPIX0, src4); -+ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 2, 6, 3, 0); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3); -+ PICO_MVRC_W(PICO_INPIX0, srcA); -+ PICO_MVRC_W(PICO_INPIX1, src0); -+ PICO_MVRC_W(PICO_INPIX2, src1); -+ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 3, 9, 6, 3); -+ -+ ST16(dst + 0*dstStride, rnd_avg32(LD16(dst + 0*dstStride), PICO_GET_W(PICO_OUTPIX0) >> 16)); -+ ST16(dst + 1*dstStride, rnd_avg32(LD16(dst + 1*dstStride), PICO_GET_W(PICO_OUTPIX0))); -+ -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_MVRC_W(PICO_INPIX0, src0); -+ PICO_MVRC_W(PICO_INPIX1, src1); -+ PICO_MVRC_W(PICO_INPIX2, src2); -+ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0); -+ PICO_MVRC_W(PICO_INPIX2, src3); -+ PICO_MVRC_W(PICO_INPIX1, src4); -+ PICO_MVRC_W(PICO_INPIX0, src5); -+ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 0, 6, 3, 0); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3); -+ PICO_MVRC_W(PICO_INPIX0, src0); -+ PICO_MVRC_W(PICO_INPIX1, src1); -+ PICO_MVRC_W(PICO_INPIX2, src2); -+ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 1, 9, 6, 3); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_MVRC_W(PICO_INPIX0, src1); -+ PICO_MVRC_W(PICO_INPIX1, src2); -+ PICO_MVRC_W(PICO_INPIX2, src3); -+ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0); -+ PICO_MVRC_W(PICO_INPIX2, src4); -+ PICO_MVRC_W(PICO_INPIX1, src5); -+ PICO_MVRC_W(PICO_INPIX0, src6); -+ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 2, 6, 3, 0); -+ -+ PICO_LDCM_W_INC(tmp, -+ PICO_REGVECT_VMU0_OUT, -+ PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT); -+ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3); -+ PICO_MVRC_W(PICO_INPIX0, src1); -+ PICO_MVRC_W(PICO_INPIX1, src2); -+ PICO_MVRC_W(PICO_INPIX2, src3); -+ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 3, 9, 6, 3); -+ -+ ST16(dst + 2*dstStride, rnd_avg32(LD16(dst + 2*dstStride), PICO_GET_W(PICO_OUTPIX0) >> 16)); -+ ST16(dst + 3*dstStride, rnd_avg32(LD16(dst + 3*dstStride), PICO_GET_W(PICO_OUTPIX0))); -+ -+ dst += 2; -+ src += 2; -+ } -+} -+ -+ -+static void put_h264_qpel8_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ put_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+ src += 4*srcStride; -+ dst += 4*dstStride; -+ put_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+} -+ -+static void avg_h264_qpel8_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ avg_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+ src += 4*srcStride; -+ dst += 4*dstStride; -+ avg_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+} -+ -+static void put_h264_qpel8_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ put_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+ src += 4*srcStride; -+ dst += 4*dstStride; -+ put_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+} -+ -+static void avg_h264_qpel8_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ avg_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+ src += 4*srcStride; -+ dst += 4*dstStride; -+ avg_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+} -+ -+static void put_h264_qpel8_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ put_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+ src += 4*srcStride; -+ dst += 4*dstStride; -+ put_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+} -+ -+static void avg_h264_qpel8_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ avg_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+ src += 4*srcStride; -+ dst += 4*dstStride; -+ avg_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride); -+} -+ -+static void put_h264_qpel16_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ put_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+ src += 8*srcStride; -+ dst += 8*dstStride; -+ put_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+} -+ -+static void avg_h264_qpel16_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ avg_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+ src += 8*srcStride; -+ dst += 8*dstStride; -+ avg_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+} -+ -+static void put_h264_qpel16_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ put_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+ src += 8*srcStride; -+ dst += 8*dstStride; -+ put_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+} -+ -+static void avg_h264_qpel16_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ avg_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+ src += 8*srcStride; -+ dst += 8*dstStride; -+ avg_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+} -+ -+static void put_h264_qpel16_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ put_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+ src += 8*srcStride; -+ dst += 8*dstStride; -+ put_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); -+ put_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+} -+ -+static void avg_h264_qpel16_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ -+ avg_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+ src += 8*srcStride; -+ dst += 8*dstStride; -+ avg_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride); -+ avg_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride); -+} -+ -+ -+#define H264_MC(OPNAME, SIZE) \ -+static void OPNAME ## h264_qpel ## SIZE ## _mc00_pico (uint8_t *dst, uint8_t *src, int stride){\ -+ OPNAME ## pixels ## SIZE ## _c(dst, src, stride, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc10_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t half[SIZE*SIZE];\ -+ put_h264_qpel ## SIZE ## _h_lowpass_pico(half, src, SIZE, stride);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, src, half, stride, stride, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc20_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ OPNAME ## h264_qpel ## SIZE ## _h_lowpass_pico(dst, src, stride, stride);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc30_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t half[SIZE*SIZE];\ -+ put_h264_qpel ## SIZE ## _h_lowpass_pico(half, src, SIZE, stride);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, src+1, half, stride, stride, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc01_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t full[SIZE*(SIZE+5)];\ -+ uint8_t * const full_mid= full + SIZE*2;\ -+ uint8_t half[SIZE*SIZE];\ -+ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ -+ put_h264_qpel ## SIZE ## _v_lowpass_pico(half, full_mid, SIZE, SIZE);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, full_mid, half, stride, SIZE, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc02_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t full[SIZE*(SIZE+5)];\ -+ uint8_t * const full_mid= full + SIZE*2;\ -+ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ -+ OPNAME ## h264_qpel ## SIZE ## _v_lowpass_pico(dst, full_mid, stride, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc03_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t full[SIZE*(SIZE+5)];\ -+ uint8_t * const full_mid= full + SIZE*2;\ -+ uint8_t half[SIZE*SIZE];\ -+ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ -+ put_h264_qpel ## SIZE ## _v_lowpass_pico(half, full_mid, SIZE, SIZE);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, full_mid+SIZE, half, stride, SIZE, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc11_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t full[SIZE*(SIZE+5)];\ -+ uint8_t * const full_mid= full + SIZE*2;\ -+ uint8_t halfH[SIZE*SIZE];\ -+ uint8_t halfV[SIZE*SIZE];\ -+ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\ -+ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ -+ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc31_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t full[SIZE*(SIZE+5)];\ -+ uint8_t * const full_mid= full + SIZE*2;\ -+ uint8_t halfH[SIZE*SIZE];\ -+ uint8_t halfV[SIZE*SIZE];\ -+ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\ -+ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\ -+ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc13_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t full[SIZE*(SIZE+5)];\ -+ uint8_t * const full_mid= full + SIZE*2;\ -+ uint8_t halfH[SIZE*SIZE];\ -+ uint8_t halfV[SIZE*SIZE];\ -+ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\ -+ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ -+ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc33_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t full[SIZE*(SIZE+5)];\ -+ uint8_t * const full_mid= full + SIZE*2;\ -+ uint8_t halfH[SIZE*SIZE];\ -+ uint8_t halfV[SIZE*SIZE];\ -+ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\ -+ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\ -+ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc22_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ OPNAME ## h264_qpel ## SIZE ## _hv_lowpass_pico(dst, src, stride, stride);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc21_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t halfH[SIZE*SIZE];\ -+ uint8_t halfHV[SIZE*SIZE];\ -+ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\ -+ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc23_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t halfH[SIZE*SIZE];\ -+ uint8_t halfHV[SIZE*SIZE];\ -+ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\ -+ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc12_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t full[SIZE*(SIZE+5)];\ -+ uint8_t * const full_mid= full + SIZE*2;\ -+ uint8_t halfV[SIZE*SIZE];\ -+ uint8_t halfHV[SIZE*SIZE];\ -+ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\ -+ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ -+ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\ -+}\ -+\ -+static void OPNAME ## h264_qpel ## SIZE ## _mc32_pico(uint8_t *dst, uint8_t *src, int stride){\ -+ uint8_t full[SIZE*(SIZE+5)];\ -+ uint8_t * const full_mid= full + SIZE*2;\ -+ uint8_t halfV[SIZE*SIZE];\ -+ uint8_t halfHV[SIZE*SIZE];\ -+ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\ -+ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\ -+ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\ -+ OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\ -+}\ -+ -+H264_MC(put_, 4) -+H264_MC(put_, 8) -+H264_MC(put_, 16) -+H264_MC(avg_, 4) -+H264_MC(avg_, 8) -+H264_MC(avg_, 16) -+ -+ -+ -+#define dspfunc16(PFX) \ -+ void PFX ## _pixels16_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ -+ PFX ## _pixels8_avr32(dst, pixels, line_size, h);\ -+ PFX ## _pixels8_avr32(dst + 8, pixels + 8, line_size, h);\ -+ }\ -+ void PFX ## _pixels16_h_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ -+ PFX ## _pixels8_h_avr32(dst, pixels, line_size, h);\ -+ PFX ## _pixels8_h_avr32(dst + 8, pixels + 8, line_size, h);\ -+ }\ -+ void PFX ## _pixels16_v_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ -+ PFX ## _pixels8_v_avr32(dst, pixels, line_size, h);\ -+ PFX ## _pixels8_v_avr32(dst + 8, pixels + 8, line_size, h);\ -+ }\ -+ void PFX ## _pixels16_hv_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \ -+ PFX ## _pixels8_hv_avr32(dst, pixels, line_size, h);\ -+ PFX ## _pixels8_hv_avr32(dst + 8, pixels + 8, line_size, h);\ -+ }\ -+ -+ -+dspfunc16(put) -+dspfunc16(put_no_rnd) -+dspfunc16(avg) -+dspfunc16(avg_no_rnd) -+#undef dspfunc16 -+ -+static int pix_sum_avr32(uint8_t * pix, int line_size) -+{ -+ int s, i; -+ -+ s = 0; -+ for (i = 0; i < 16; i++) { -+ int tmp1,tmp2,tmp3,tmp4,tmp5; -+ __asm__ volatile ( "ld.w\t%0, %6[0]\n\t" -+ "ld.w\t%1, %6[4]\n\t" -+ "ld.w\t%2, %6[8]\n\t" -+ "ld.w\t%3, %6[12]\n\t" -+ "punpckub.h\t%4, %0:t\n\t" -+ "padd.h\t%5, %5, %4\n\t" -+ "punpckub.h\t%4, %0:b\n\t" -+ "padd.h\t%5, %5, %4\n\t" -+ "punpckub.h\t%4, %1:t\n\t" -+ "padd.h\t%5, %5, %4\n\t" -+ "punpckub.h\t%4, %1:b\n\t" -+ "padd.h\t%5, %5, %4\n\t" -+ "punpckub.h\t%4, %2:t\n\t" -+ "padd.h\t%5, %5, %4\n\t" -+ "punpckub.h\t%4, %2:b\n\t" -+ "padd.h\t%5, %5, %4\n\t" -+ "punpckub.h\t%4, %3:t\n\t" -+ "padd.h\t%5, %5, %4\n\t" -+ "punpckub.h\t%4, %3:b\n\t" -+ "padd.h\t%5, %5, %4\n\t" -+ : "=&r"(tmp1),"=&r"(tmp2),"=&r"(tmp3),"=&r"(tmp4),"=&r"(tmp5),"=&r"(s) -+ : "r"(pix)); -+ pix += line_size; -+ } -+ __asm__ volatile ( "addhh.w\t%0, %0:t, %0:b" : "=&r" (s) ); -+ -+ return s; -+} -+ -+ -+//#define op_scale1(x) block[x] = clip_uint8( (block[x]*weight + offset) >> log2_denom ) -+//#define op_scale2(x) dst[x] = clip_uint8( (src[x]*weights + dst[x]*weightd + offset) >> (log2_denom+1)) -+//#define H264_WEIGHT(W,H) \ -+//static void weight_h264_pixels ## W ## x ## H ## _c(uint8_t *block, int stride, int log2_denom, int weight, int offset){ \ -+// int attribute_unused x, y; \ -+// offset <<= log2_denom; \ -+// if(log2_denom) offset += 1<<(log2_denom-1); \ -+// for(y=0; y> 0, 8\n" \ -+// "satu\t%[tmp1] >> 0, 8\n" \ -+// "st.b\t%[block][0], %[tmp0]\n" \ -+// "st.b\t%[block][1], %[tmp1]\n" \ -+// : [tmp0] "=&r"(tmp0), [tmp1] "=&r"(tmp1) \ -+// : [block] "r"(block), [weight]"r"(weight), [log2_denom]"r"(log2denom) ); \ -+// } else if ( W==4 ) { \ -+// asm volatile ( "ld.w\t%[tmp0], %[block][0]\n" \ -+// "punpckub.h\t%[tmp1], %[tmp0]:t\n" \ -+// "punpckub.h\t%[tmp0], %[tmp0]:b\n" \ -+// "mulhh.w\t%[tmp2], %[tmp1]:t, %[weight]:b\n" \ -+// "mulhh.w\t%[tmp1], %[tmp1]:b, %[weight]:b\n" \ -+// "asr\t%[tmp0], %[log2_denom]\n" \ -+// "asr\t%[tmp1], %[log2_denom]\n" \ -+// "satu\t%[tmp0] >> 0, 8\n" \ -+// "satu\t%[tmp1] >> 0, 8\n" \ -+// "st.b\t%[block][0], %[tmp0]\n" \ -+// "st.b\t%[block][1], %[tmp1]\n" \ -+// : [tmp0] "=&r"(tmp0), [tmp1] "=&r"(tmp1) \ -+// : [block] "r"(block), [weight]"r"(weight), [log2_denom]"r"(log2denom) ); \ -+// -+// -+// -+// if(W==4) continue; \ -+// op_scale1(4); \ -+// op_scale1(5); \ -+// op_scale1(6); \ -+// op_scale1(7); \ -+// if(W==8) continue; \ -+// op_scale1(8); \ -+// op_scale1(9); \ -+// op_scale1(10); \ -+// op_scale1(11); \ -+// op_scale1(12); \ -+// op_scale1(13); \ -+// op_scale1(14); \ -+// op_scale1(15); \ -+// } \ -+//} \ -+//static void biweight_h264_pixels ## W ## x ## H ## _c(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offsetd, int offsets){ \ -+// int attribute_unused x, y; \ -+// int offset = (offsets + offsetd + 1) >> 1; \ -+// offset = ((offset << 1) + 1) << log2_denom; \ -+// for(y=0; y and -+ is not less than */ -+#define PABS_DIFF_LESS_THAN( a, b, compare) \ -+ ({ uint32_t __tmp__, __tmp2__, __mask__; \ -+ asm ( \ -+ /* Check ABS( a - b ) < compare */ \ -+ "psubs.ub\t%[tmp], %[opa], %[opb]\n" \ -+ "psubs.ub\t%[tmp2], %[opb], %[opa]\n" \ -+ "or\t%[tmp], %[tmp2]\n" /* ABS ( a - b ) */ \ -+ /* This produces 0 for all bytes where the comparison is not true */ \ -+ "psubs.ub\t%[mask], %[cmp], %[tmp]\n" \ -+ : [tmp] "=&r"(__tmp__), [tmp2] "=&r"(__tmp2__), [mask] "=&r"(__mask__) \ -+ : [opa] "r"(a), [opb] "r"(b), [cmp] "r"(compare) ); \ -+ __mask__; }) -+ -+/* -+ Set all bytes containing zero in to 255 and the rest to zero. -+ -+ Add with saturation 254 to all bytes making all bytes different from -+ zero become 255. Then add one without saturation to make all bytes -+ originally containing zero 255 and the rest 0. */ -+#define SET_ALL_BITS_IN_ZERO_BYTES(value) \ -+ ({ uint32_t __tmp__; \ -+ asm ( \ -+ "padds.ub\t%[tmp], %[val], %[max_minus_one]\n" \ -+ "padd.b\t%[tmp], %[tmp], %[all_ones]\n" \ -+ : [tmp] "=r"(__tmp__) \ -+ : [val] "r"(value), [max_minus_one] "r"(0xFEFEFEFE), [all_ones] "r"(0x01010101) ); \ -+ __tmp__; }) -+ -+#define PACKW_SH(upper, lower) \ -+ ({ uint32_t __tmp__; \ -+ asm ( \ -+ "packw.sh\t%[tmp], %[u], %[l]\n" \ -+ : [tmp] "=r"(__tmp__) \ -+ : [u] "r"(upper), [l] "r"(lower) ); \ -+ __tmp__; }) -+ -+#define PACKSH_UB(upper, lower) \ -+ ({ uint32_t __tmp__; \ -+ asm ( \ -+ "packsh.sb\t%[tmp], %[u], %[l]\n" \ -+ : [tmp] "=r"(__tmp__) \ -+ : [u] "r"(upper), [l] "r"(lower) ); \ -+ __tmp__; }) -+ -+static void h264_v_loop_filter_luma_avr32(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0) -+{ -+ int i; -+ -+ if ( alpha == 0 ) -+ return; -+ -+ alpha = PACKW_SH(alpha, alpha); -+ alpha = PACKSH_UB(alpha, alpha); -+ beta = PACKW_SH(beta, beta); -+ beta = PACKSH_UB(beta, beta); -+ -+ for( i = 0; i < 4; i++ ) { -+ uint32_t p0, p1, p2, q0, q1, q2; -+ uint32_t mask, mask2; -+ uint32_t tmp, tmp2, tmp3, tmp4; -+ -+ if( tc0[i] < 0 ) { -+ pix += 4; -+ continue; -+ } -+ -+/* for( d = 0; d < 4; d++ ) { -+ const int p0 = pix[-1*stride]; -+ const int p1 = pix[-2*stride]; -+ const int p2 = pix[-3*stride]; -+ const int q0 = pix[0]; -+ const int q1 = pix[1*stride]; -+ const int q2 = pix[2*stride]; -+ -+ if( ABS( p0 - q0 ) < alpha && -+ ABS( p1 - p0 ) < beta && -+ ABS( q1 - q0 ) < beta ) { */ -+ -+ p0 = LD32(pix - stride); -+ p1 = LD32(pix - 2*stride); -+ q0 = LD32(pix); -+ q1 = LD32(pix + stride); -+ -+ /* Check which of the columns should be filtered, if any. */ -+ mask = PABS_DIFF_LESS_THAN(p0, q0, alpha); -+ mask |= PABS_DIFF_LESS_THAN(p1, p0, beta); -+ mask |= PABS_DIFF_LESS_THAN(q1, q0, beta); -+ -+ if ( !mask ) -+ continue; -+ -+ mask = SET_ALL_BITS_IN_ZERO_BYTES(mask); -+ -+ -+ int tc = PACKW_SH(tc0[i], tc0[i]); -+ int tc0_p = tc; -+ int tc0_m = PACKW_SH(-tc0[i], -tc0[i]); -+ -+ /* -+ int i_delta; -+ if( ABS( p2 - p0 ) < beta ) { -+ pix[-2*stride] = p1 + clip( (( p2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - p1, -tc0[i], tc0[i] ); -+ tc++; -+ }*/ -+ -+ p2 = LD32(pix - 3*stride); -+ mask2 = PABS_DIFF_LESS_THAN(p2, p0, beta) & ~mask; -+ -+ if ( mask2 ){ -+ mask2 = SET_ALL_BITS_IN_ZERO_BYTES(mask2); -+ asm ("pavg.ub\t%[tmp], %[p0], %[q0]\n" -+ "paddh.ub\t%[tmp], %[tmp], %[p2]\n" -+ "punpckub.h\t%[tmp2], %[tmp]:t\n" -+ "punpckub.h\t%[tmp], %[tmp]:b\n" -+ "punpckub.h\t%[tmp3], %[p1]:t\n" -+ "punpckub.h\t%[tmp4], %[p1]:b\n" -+ "psub.h\t%[tmp2], %[tmp2], %[tmp3]\n" -+ "psub.h\t%[tmp], %[tmp], %[tmp4]\n" -+ "pmin.sh\t%[tmp2], %[tmp2], %[tc0_p]\n" -+ "pmin.sh\t%[tmp], %[tmp], %[tc0_p]\n" -+ "pmax.sh\t%[tmp2], %[tmp2], %[tc0_m]\n" -+ "pmax.sh\t%[tmp], %[tmp], %[tc0_m]\n" -+ "padd.h\t%[tmp2], %[tmp2], %[tmp3]\n" -+ "padd.h\t%[tmp], %[tmp], %[tmp4]\n" -+ "packsh.ub\t%[tmp], %[tmp2], %[tmp]\n" -+ "andn\t%[tmp], %[mask2]\n" -+ "and\t%[tmp2], %[q1], %[mask2]\n" -+ "or\t%[tmp], %[tmp2]\n" -+ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), -+ [tmp4]"=&r"(tmp4) -+ : [q0]"r"(q0), [p2]"r"(p2), [p1]"r"(p1), [p0]"r"(p0), [q1]"r"(q1), [tc0_p]"r"(tc0_p), -+ [tc0_m]"r"(tc0_m), [mask2]"r"(mask2)); -+ ST32(pix - 2*stride, tmp); -+ tc += 0x00010001; -+ } -+ -+ -+ q2 = LD32(pix + 2*stride); -+ -+ /* -+ if( ABS( q2 - q0 ) < beta ) { -+ pix[ stride] = q1 + clip( (( q2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - q1, -tc0[i], tc0[i] ); -+ tc++; -+ } -+ */ -+ mask2 = PABS_DIFF_LESS_THAN(q2, q0, beta) & ~mask; -+ -+ if ( mask2 ){ -+ mask2 = SET_ALL_BITS_IN_ZERO_BYTES(mask2); -+ asm ("pavg.ub\t%[tmp], %[p0], %[q0]\n" -+ "paddh.ub\t%[tmp], %[tmp], %[q2]\n" -+ "punpckub.h\t%[tmp2], %[tmp]:t\n" -+ "punpckub.h\t%[tmp], %[tmp]:b\n" -+ "punpckub.h\t%[tmp3], %[q1]:t\n" -+ "punpckub.h\t%[tmp4], %[q1]:b\n" -+ "psub.h\t%[tmp2], %[tmp2], %[tmp3]\n" -+ "psub.h\t%[tmp], %[tmp], %[tmp4]\n" -+ "pmin.sh\t%[tmp2], %[tmp2], %[tc0_p]\n" -+ "pmin.sh\t%[tmp], %[tmp], %[tc0_p]\n" -+ "pmax.sh\t%[tmp2], %[tmp2], %[tc0_m]\n" -+ "pmax.sh\t%[tmp], %[tmp], %[tc0_m]\n" -+ "padd.h\t%[tmp2], %[tmp2], %[tmp3]\n" -+ "padd.h\t%[tmp], %[tmp], %[tmp4]\n" -+ "packsh.ub\t%[tmp], %[tmp2], %[tmp]\n" -+ "andn\t%[tmp], %[mask2]\n" -+ "and\t%[tmp2], %[q1], %[mask2]\n" -+ "or\t%[tmp], %[tmp2]\n" -+ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), -+ [tmp4]"=&r"(tmp4) -+ : [q0]"r"(q0), [q2]"r"(q2), [q1]"r"(q1), [p0]"r"(p0), [tc0_p]"r"(tc0_p), -+ [tc0_m]"r"(tc0_m), [mask2]"r"(mask2)); -+ ST32(pix + stride, tmp); -+ tc += 0x00010001; -+ } -+ -+ uint32_t old_p0 = p0; -+ uint32_t old_q0 = q0; -+ -+ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); -+ pix[-stride] = clip_uint8( p0 + i_delta ); -+ pix[0] = clip_uint8( q0 - i_delta ); */ -+ -+ asm ( -+ /* Check if the two upper pixels should be filtered */ -+ "lsr\t%[tmp], %[inv_mask], 16\n" -+ "breq\t0f\n" -+ -+ "punpckub.h\t%[tmp], %[p1]:t\n" -+ "punpckub.h\t%[tmp2], %[q1]:t\n" -+ -+ /* p1 - q1 */ -+ "psub.h\t%[tmp], %[tmp], %[tmp2]\n" -+ -+ "punpckub.h\t%[tmp3], %[q0]:t\n" -+ "punpckub.h\t%[tmp4], %[p0]:t\n" -+ -+ /* q0 - p0 */ -+ "psub.h\t%[tmp2], %[tmp3], %[tmp4]\n" -+ -+ /* (q0 - p0) << 2 */ -+ "plsl.h\t%[tmp2], %[tmp2], 2\n" -+ -+ /* ((q0 - p0) << 2) + (p1 - q1) */ -+ "padd.h\t%[tmp2], %[tmp2], %[tmp]\n" -+ -+ "mov\t%[tmp], 0x00040004\n" -+ /* ((q0 - p0) << 2) + (p1 - q1) + 4*/ -+ "padd.h\t%[tmp2], %[tmp2], %[tmp]\n" -+ -+ /* (((q0 - p0) << 2) + (p1 - q1) + 4) >> 3*/ -+ "pasr.h\t%[tmp2], %[tmp2], 3\n" -+ -+ "mov\t%[tmp], 0\n" -+ "psub.h\t%[tmp], %[tmp], %[tc]\n" -+ -+ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); */ -+ "pmin.sh\t%[tmp2], %[tmp2], %[tc]\n" -+ "pmax.sh\t%[tmp2], %[tmp2], %[tmp]\n" -+ -+ -+ /* pix[-stride] = clip_uint8( p0 + i_delta ); */ -+ "padd.h\t%[tmp4], %[tmp4], %[tmp2]\n" -+ -+ -+ /* pix[0] = clip_uint8( q0 - i_delta ); */ -+ "psub.h\t%[tmp3], %[tmp3], %[tmp2]\n" -+ -+ /* Check if the two lower pixels should be filtered */ -+ "lsl\t%[tmp2], %[inv_mask], 16\n" -+ "breq\t1f\n" -+ -+ "0:\n" -+ "punpckub.h\t%[p1], %[p1]:b\n" -+ "punpckub.h\t%[q1], %[q1]:b\n" -+ -+ /* p1 - q1 */ -+ "psub.h\t%[p1], %[p1], %[q1]\n" -+ -+ "punpckub.h\t%[q0], %[q0]:b\n" -+ "punpckub.h\t%[p0], %[p0]:b\n" -+ -+ /* q0 - p0 */ -+ "psub.h\t%[tmp2], %[q0], %[p0]\n" -+ -+ /* (q0 - p0) << 2 */ -+ "plsl.h\t%[tmp2], %[tmp2], 2\n" -+ -+ /* ((q0 - p0) << 2) + (p1 - q1) */ -+ "padd.h\t%[tmp2], %[tmp2], %[p1]\n" -+ -+ "mov\t%[q1], 0x00040004\n" -+ /* ((q0 - p0) << 2) + (p1 - q1) + 4*/ -+ "padd.h\t%[tmp2], %[tmp2], %[q1]\n" -+ -+ /* (((q0 - p0) << 2) + (p1 - q1) + 4) >> 3*/ -+ "pasr.h\t%[tmp2], %[tmp2], 3\n" -+ -+ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); */ -+ "pmin.sh\t%[tmp2], %[tmp2], %[tc]\n" -+ "pmax.sh\t%[tmp2], %[tmp2], %[tmp]\n" -+ -+ /* pix[-stride] = clip_uint8( p0 + i_delta ); */ -+ "padd.h\t%[p0], %[p0], %[tmp2]\n" -+ -+ /* pix[0] = clip_uint8( q0 - i_delta ); */ -+ "psub.h\t%[q0], %[q0], %[tmp2]\n" -+ -+ "1:\n" -+ "packsh.ub\t%[p0], %[tmp4], %[p0]\n" -+ "packsh.ub\t%[q0], %[tmp3], %[tmp4]\n" -+ -+ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), -+ [tmp4]"=&r"(tmp4), [q0]"=&r"(q0), [q1]"=&r"(q1), [p0]"=&r"(p0), [p1]"=&r"(p1) -+ : [tc]"r"(tc), [inv_mask]"r"(~mask)); -+ -+ ST32(pix - stride, (mask & old_p0) | (p0 & ~mask)); -+ ST32(pix, (mask & old_q0) | (q0 & ~mask)); -+ -+ } -+ pix += 1; -+} -+ -+ -+ -+ -+#ifdef CHECK_DSP_FUNCS_AGAINST_C -+ -+void dump_block8(uint8_t *block, int line_size, int h){ -+ int i, j; -+ -+ for ( i = 0; i < h ; i++ ){ -+ av_log(NULL, AV_LOG_ERROR, "\t"); -+ for ( j = 0; j < 8 ; j++ ){ -+ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]); -+ } -+ av_log(NULL, AV_LOG_ERROR, "\n"); -+ } -+} -+ -+void dump_block4(uint8_t *block, int line_size, int h){ -+ int i, j; -+ -+ for ( i = 0; i < h ; i++ ){ -+ av_log(NULL, AV_LOG_ERROR, "\t"); -+ for ( j = 0; j < 4 ; j++ ){ -+ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]); -+ } -+ av_log(NULL, AV_LOG_ERROR, "\n"); -+ } -+} -+ -+void dump_block(uint8_t *block, int line_size, int h, int w){ -+ int i, j; -+ -+ for ( i = 0; i < h ; i++ ){ -+ av_log(NULL, AV_LOG_ERROR, "\t"); -+ for ( j = 0; j < w ; j++ ){ -+ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]); -+ } -+ av_log(NULL, AV_LOG_ERROR, "\n"); -+ } -+} -+ -+void check_block8(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, -+ int h, char *name, int max_dev){ -+ int i,j; -+ for ( i = 0; i < 8 ; i++ ){ -+ for ( j = 0; j < h ; j++ ){ -+ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j]; -+ diff = diff < 0 ? -diff : diff; -+ if ( diff > max_dev ){ -+ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n", -+ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]); -+ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name); -+ dump_block8(test, line_size_test, h); -+ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n"); -+ dump_block8(correct, line_size_correct, h); -+ exit(1); -+ } -+ } -+ } -+} -+ -+void check_block4(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, -+ int h, char *name, int max_dev){ -+ int i,j; -+ for ( i = 0; i < 4 ; i++ ){ -+ for ( j = 0; j < h ; j++ ){ -+ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j]; -+ diff = diff < 0 ? -diff : diff; -+ if ( diff > max_dev ){ -+ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n", -+ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]); -+ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name); -+ dump_block8(test, line_size_test, h); -+ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n"); -+ dump_block4(correct, line_size_correct, h); -+ exit(1); -+ } -+ } -+ } -+} -+ -+void check_block(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct, -+ int h, int width, char *name, int max_dev){ -+ int i,j; -+ for ( i = 0; i < width ; i++ ){ -+ for ( j = 0; j < h ; j++ ){ -+ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j]; -+ diff = diff < 0 ? -diff : diff; -+ if ( diff > max_dev ){ -+ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n", -+ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]); -+ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name); -+ dump_block(test, line_size_test, h, width); -+ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n"); -+ dump_block(correct, line_size_correct, h, width); -+ exit(1); -+ } -+ } -+ } -+} -+ -+void dump_dct_block(DCTELEM *block){ -+ int i, j; -+ -+ for ( i = 0; i < 8 ; i++ ){ -+ av_log(NULL, AV_LOG_ERROR, "\t"); -+ for ( j = 0; j < 8 ; j++ ){ -+ av_log(NULL, AV_LOG_ERROR, "0x%x ", block[j + i*8]); -+ } -+ av_log(NULL, AV_LOG_ERROR, "\n"); -+ } -+} -+ -+void test_idct_avr32(DCTELEM *block){ -+ DCTELEM testBlock[64]; -+ int i, j; -+ -+ /* Copy transposed block to testBlock */ -+ for ( i = 0; i < 8 ; i++ ){ -+ for ( j = 0; j < 8 ; j++ ){ -+ testBlock[i + 8*j] = block[j + i*8]; -+ } -+ } -+ -+ idct_avr32(block); -+ simple_idct(&testBlock); -+ -+ for ( i = 0; i < 64 ; i++ ){ -+ if ( block[i] != testBlock[i] ){ -+ av_log(NULL, AV_LOG_ERROR, "Error resulting block from idct is:\n"); -+ dump_dct_block(block); -+ av_log(NULL, AV_LOG_ERROR, "But should be equal to the transposed of:\n"); -+ dump_dct_block(testBlock); -+ exit(1); -+ } -+ } -+} -+ -+void test_idct_put_avr32(uint8_t *dest, int line_size, DCTELEM *block){ -+ uint8_t testBlock[64]; -+ DCTELEM blockCopy[64]; -+ int i, j; -+ -+ /* Copy transposed block to blockCopy */ -+ for ( i = 0; i < 8 ; i++ ){ -+ for ( j = 0; j < 8 ; j++ ){ -+ blockCopy[i + 8*j] = block[j + i*8]; -+ } -+ } -+ -+ idct_put_avr32(dest, line_size, block); -+ simple_idct_put(&testBlock, 8, blockCopy); -+ -+ check_block8(dest, testBlock, line_size, 8, 8, "idct_put", 1); -+} -+ -+ -+void test_idct_add_avr32(uint8_t *dest, int line_size, DCTELEM *block){ -+ uint8_t testBlock[64]; -+ DCTELEM blockCopy[64]; -+ int i, j; -+ -+ /* Copy dest to testBlock */ -+ for ( i = 0; i < 8 ; i++ ){ -+ for ( j = 0; j < 8 ; j++ ){ -+ testBlock[i + 8*j] = dest[i + j*line_size]; -+ } -+ } -+ -+ /* Copy transposed block to blockCopy */ -+ for ( i = 0; i < 8 ; i++ ){ -+ for ( j = 0; j < 8 ; j++ ){ -+ blockCopy[i + 8*j] = block[j + i*8]; -+ } -+ } -+ -+ idct_add_avr32(dest, line_size, block); -+ simple_idct_add(&testBlock, 8, blockCopy); -+ -+ check_block8(dest, testBlock, line_size, 8, 8, "idct_add", 1); -+} -+ -+void test_h264_idct_add_avr32(uint8_t *dest, DCTELEM *block, int stride){ -+ uint8_t testBlock[16]; -+ DCTELEM blockCopy[16]; -+ int i, j; -+ -+ /* Copy dest to testBlock */ -+ for ( i = 0; i < 4 ; i++ ){ -+ for ( j = 0; j < 4 ; j++ ){ -+ testBlock[i + 4*j] = dest[i + j*stride]; -+ } -+ } -+ -+ /* Copy transposed block to blockCopy */ -+ for ( i = 0; i < 16 ; i++ ){ -+ blockCopy[i] = block[i]; -+ } -+ -+ ff_h264_idct_add_c(dest, block, stride); -+ -+ h264_idct_add_avr32(testBlock, blockCopy, 4); -+ -+ check_block(dest, testBlock, stride, 4, 4, 4, "h264_idct_add", 0); -+} -+ -+void test_h264_idct8_add_avr32(uint8_t *dest, DCTELEM *block, int stride){ -+ uint8_t testBlock[8*8]; -+ DCTELEM blockCopy[8*8]; -+ int i, j; -+ -+ /* Copy dest to testBlock */ -+ for ( i = 0; i < 8 ; i++ ){ -+ for ( j = 0; j < 8 ; j++ ){ -+ testBlock[i + 8*j] = dest[i + j*stride]; -+ } -+ } -+ -+ /* Copy source block to blockCopy */ -+ for ( i = 0; i < 8*8 ; i++ ){ -+ blockCopy[i] = block[i]; -+ } -+ -+ ff_h264_idct8_add_c(dest, block, stride); -+ h264_idct8_add_avr32(testBlock, blockCopy, 8); -+ -+ check_block(dest, testBlock, stride, 8, 8, 8, "h264_idct8_add", 0); -+} -+ -+void test_put_pixels_funcs8(op_pixels_func test, op_pixels_func correct, uint8_t *block, -+ const uint8_t *pixels, int line_size, int h, char *name, int in_h_size, int in_v_size){ -+ uint8_t *testBlock, *testBlock2; -+ int i, j; -+ int input_v_size = h + in_v_size; -+ int input_h_size = 8 + in_h_size; -+ -+ testBlock = alloca(input_h_size*input_v_size); -+ testBlock2 = alloca(input_h_size*input_v_size); -+ -+ for ( i = 0; i < input_h_size ; i++ ){ -+ for ( j = 0; j < input_v_size ; j++ ){ -+ testBlock[i + input_h_size*j] = pixels[i + j*line_size]; -+ } -+ } -+ -+ test(block, pixels, line_size, h); -+ correct(testBlock2, testBlock, input_h_size, h); -+ -+ check_block8(block, testBlock2, line_size, input_h_size, h, name, 0); -+ -+} -+ -+void test_h264_chroma_mc_funcs(h264_chroma_mc_func test, h264_chroma_mc_func correct, uint8_t *dst, -+ uint8_t *src, int stride, int h, int w, int x, int y, char *name){ -+ uint8_t *testBlock, *testBlock2; -+ int i, j; -+ int input_v_size = h + 1; -+ int input_h_size = ((w + 1) + 3) & ~3; -+ -+ testBlock = alloca(input_h_size*input_v_size); -+ testBlock2 = alloca(input_h_size*input_v_size); -+ -+ for ( i = 0; i < w + 1 ; i++ ){ -+ for ( j = 0; j < h + 1 ; j++ ){ -+ testBlock[i + input_h_size*j] = src[i + j*stride]; -+ } -+ } -+ -+ for ( i = 0; i < w ; i++ ){ -+ for ( j = 0; j < h ; j++ ){ -+ testBlock2[i + input_h_size*j] = dst[i + j*stride]; -+ } -+ } -+ -+ test(dst, src, stride, h, x, y); -+ correct(testBlock2, testBlock, input_h_size, h, x, y); -+ -+ check_block(dst, testBlock2, stride, input_h_size, h, w, name, 0); -+ -+} -+ -+void test_qpel_mc_funcs(qpel_mc_func test, qpel_mc_func correct, uint8_t *dst, -+ uint8_t *src, int stride, int size, char *name){ -+ uint8_t *testBlock, *testBlock2; -+ int i, j; -+ int test_stride = size + 8; -+ -+ testBlock = alloca(test_stride*(size+8)) + 4 + test_stride*4; -+ testBlock2 = alloca(test_stride*size); -+ -+ for ( i = -4; i < size+4 ; i++ ){ -+ for ( j = -4; j < size+4 ; j++ ){ -+ testBlock[i + test_stride*j] = src[i + j*stride]; -+ } -+ } -+ -+ for ( i = 0; i < size ; i++ ){ -+ for ( j = 0; j < size ; j++ ){ -+ testBlock2[i + test_stride*j] = dst[i + j*stride]; -+ } -+ } -+ -+ correct(dst, src, stride); -+ test(testBlock2, testBlock, test_stride); -+ -+ check_block(testBlock2, dst, test_stride, stride, size, size, name, 0); -+ -+} -+ -+ -+#define test_pixels_funcs(PFX, NUM ) \ -+void test_ ## PFX ## _pixels ## NUM ## _avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ -+ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _avr32, PFX ## _pixels ## NUM ## _c, \ -+ block, pixels, line_size, h, "test_" #PFX "_pixels", 0, 0); } \ -+void test_ ## PFX ## _pixels ## NUM ## _h_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ -+ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _h_avr32, PFX ## _pixels ## NUM ## _x2_c, \ -+ block, pixels, line_size, h, "test_" #PFX "_pixels_h", 1, 0); } \ -+void test_ ## PFX ## _pixels ## NUM ## _v_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ -+ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _v_avr32, PFX ## _pixels ## NUM ## _y2_c, \ -+ block, pixels, line_size, h, "test_" #PFX "_pixels_v", 0, 1); } \ -+void test_ ## PFX ## _pixels ## NUM ## _hv_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \ -+ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _hv_avr32, PFX ## _pixels ## NUM ## _xy2_c, \ -+ block, pixels, line_size, h, "test_" #PFX "_pixels_hv", 1, 1); } -+ -+test_pixels_funcs(put, 8); -+test_pixels_funcs(put_no_rnd, 8); -+test_pixels_funcs(put, 16); -+test_pixels_funcs(put_no_rnd, 16); -+ -+test_pixels_funcs(avg, 8); -+test_pixels_funcs(avg_no_rnd, 8); -+test_pixels_funcs(avg, 16); -+test_pixels_funcs(avg_no_rnd, 16); -+ -+#define test_h264_chroma_mc_funcs(PFX, NUM ) \ -+void test_ ## PFX ## _h264_chroma_mc ## NUM ## _pico( uint8_t *dst, uint8_t *src, int stride, int h, int x, int y){ \ -+ test_h264_chroma_mc_funcs(PFX ## _h264_chroma_mc ## NUM ## _pico, PFX ## _h264_chroma_mc ## NUM ## _c, \ -+ dst, src, stride, h, NUM, x, y, "test_" #PFX "_h264_chroma_mc" #NUM "_pico"); } \ -+ -+test_h264_chroma_mc_funcs(put, 2); -+test_h264_chroma_mc_funcs(put, 4); -+test_h264_chroma_mc_funcs(put, 8); -+test_h264_chroma_mc_funcs(avg, 2); -+test_h264_chroma_mc_funcs(avg, 4); -+test_h264_chroma_mc_funcs(avg, 8); -+ -+#define test_qpel_mc_funcs_type(PFX, NUM, TYPE ) \ -+void test_ ## PFX ## NUM ## _ ## TYPE ## _pico( uint8_t *dst, uint8_t *src, int stride){ \ -+ test_qpel_mc_funcs(PFX ## NUM ## _ ## TYPE ## _pico, PFX ## NUM ## _ ## TYPE ## _c, \ -+ dst, src, stride, NUM, "test_" #PFX #NUM "_" #TYPE "_pico"); } -+ -+#define test_qpel_mc_funcs(PFX, NUM) \ -+ test_qpel_mc_funcs_type(PFX, NUM, mc00);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc10);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc20);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc30);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc01);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc11);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc21);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc31);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc02);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc12);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc22);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc32);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc03);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc13);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc23);\ -+ test_qpel_mc_funcs_type(PFX, NUM, mc33) -+ -+test_qpel_mc_funcs(put_h264_qpel, 4); -+test_qpel_mc_funcs(put_h264_qpel, 8); -+test_qpel_mc_funcs(put_h264_qpel, 16); -+test_qpel_mc_funcs(avg_h264_qpel, 4); -+test_qpel_mc_funcs(avg_h264_qpel, 8); -+test_qpel_mc_funcs(avg_h264_qpel, 16); -+ -+ -+#define dspfunc(PFX, IDX, NUM) \ -+ c->PFX ## _pixels_tab[IDX][ 0] = DSP_FUNC_NAME( PFX ## NUM ## _mc00_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 1] = DSP_FUNC_NAME( PFX ## NUM ## _mc10_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 2] = DSP_FUNC_NAME( PFX ## NUM ## _mc20_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 3] = DSP_FUNC_NAME( PFX ## NUM ## _mc30_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 4] = DSP_FUNC_NAME( PFX ## NUM ## _mc01_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 5] = DSP_FUNC_NAME( PFX ## NUM ## _mc11_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 6] = DSP_FUNC_NAME( PFX ## NUM ## _mc21_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 7] = DSP_FUNC_NAME( PFX ## NUM ## _mc31_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 8] = DSP_FUNC_NAME( PFX ## NUM ## _mc02_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 9] = DSP_FUNC_NAME( PFX ## NUM ## _mc12_pico ); \ -+ c->PFX ## _pixels_tab[IDX][10] = DSP_FUNC_NAME( PFX ## NUM ## _mc22_pico ); \ -+ c->PFX ## _pixels_tab[IDX][11] = DSP_FUNC_NAME( PFX ## NUM ## _mc32_pico ); \ -+ c->PFX ## _pixels_tab[IDX][12] = DSP_FUNC_NAME( PFX ## NUM ## _mc03_pico ); \ -+ c->PFX ## _pixels_tab[IDX][13] = DSP_FUNC_NAME( PFX ## NUM ## _mc13_pico ); \ -+ c->PFX ## _pixels_tab[IDX][14] = DSP_FUNC_NAME( PFX ## NUM ## _mc23_pico ); \ -+ c->PFX ## _pixels_tab[IDX][15] = DSP_FUNC_NAME( PFX ## NUM ## _mc33_pico ) -+ -+#endif -+ -+void dsputil_init_avr32(DSPContext* c, AVCodecContext *avctx) -+{ -+ -+ /* H264 */ -+ -+ if ( 0 /*avr32_use_pico*/ ){ -+ c->put_h264_chroma_pixels_tab[0]= DSP_FUNC_NAME(put_h264_chroma_mc8_pico); -+ c->put_h264_chroma_pixels_tab[1]= DSP_FUNC_NAME(put_h264_chroma_mc4_pico); -+ c->put_h264_chroma_pixels_tab[2]= DSP_FUNC_NAME(put_h264_chroma_mc2_pico); -+ -+ c->avg_h264_chroma_pixels_tab[0]= DSP_FUNC_NAME(avg_h264_chroma_mc8_pico); -+ c->avg_h264_chroma_pixels_tab[1]= DSP_FUNC_NAME(avg_h264_chroma_mc4_pico); -+ c->avg_h264_chroma_pixels_tab[2]= DSP_FUNC_NAME(avg_h264_chroma_mc2_pico); -+ } -+ -+#define dspfunc(PFX, IDX, NUM) \ -+ c->PFX ## _pixels_tab[IDX][ 0] = DSP_FUNC_NAME( PFX ## NUM ## _mc00_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 1] = DSP_FUNC_NAME( PFX ## NUM ## _mc10_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 2] = DSP_FUNC_NAME( PFX ## NUM ## _mc20_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 3] = DSP_FUNC_NAME( PFX ## NUM ## _mc30_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 4] = DSP_FUNC_NAME( PFX ## NUM ## _mc01_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 5] = DSP_FUNC_NAME( PFX ## NUM ## _mc11_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 6] = DSP_FUNC_NAME( PFX ## NUM ## _mc21_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 7] = DSP_FUNC_NAME( PFX ## NUM ## _mc31_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 8] = DSP_FUNC_NAME( PFX ## NUM ## _mc02_pico ); \ -+ c->PFX ## _pixels_tab[IDX][ 9] = DSP_FUNC_NAME( PFX ## NUM ## _mc12_pico ); \ -+ c->PFX ## _pixels_tab[IDX][10] = DSP_FUNC_NAME( PFX ## NUM ## _mc22_pico ); \ -+ c->PFX ## _pixels_tab[IDX][11] = DSP_FUNC_NAME( PFX ## NUM ## _mc32_pico ); \ -+ c->PFX ## _pixels_tab[IDX][12] = DSP_FUNC_NAME( PFX ## NUM ## _mc03_pico ); \ -+ c->PFX ## _pixels_tab[IDX][13] = DSP_FUNC_NAME( PFX ## NUM ## _mc13_pico ); \ -+ c->PFX ## _pixels_tab[IDX][14] = DSP_FUNC_NAME( PFX ## NUM ## _mc23_pico ); \ -+ c->PFX ## _pixels_tab[IDX][15] = DSP_FUNC_NAME( PFX ## NUM ## _mc33_pico ) -+ -+ if ( avr32_use_pico ){ -+ dspfunc(put_h264_qpel, 0, 16); -+ dspfunc(put_h264_qpel, 1, 8); -+ dspfunc(put_h264_qpel, 2, 4); -+ dspfunc(avg_h264_qpel, 0, 16); -+ dspfunc(avg_h264_qpel, 1, 8); -+ dspfunc(avg_h264_qpel, 2, 4); -+ } -+ -+ c->idct_put= DSP_FUNC_NAME(idct_put_avr32); -+ c->idct_add= DSP_FUNC_NAME(idct_add_avr32); -+ c->idct = DSP_FUNC_NAME(idct_avr32); -+ c->h264_idct_add = DSP_FUNC_NAME(h264_idct_add_avr32); -+ c->h264_idct8_add = DSP_FUNC_NAME(h264_idct8_add_avr32); -+ -+ /*c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_avr32;*/ -+ -+ c->idct_permutation_type= FF_TRANSPOSE_IDCT_PERM; -+ -+ c->fdct = fdct_avr32; -+ -+ c->clear_blocks = clear_blocks_avr32; -+ -+#undef dspfunc -+#define dspfunc(PFX, IDX, NUM) \ -+ c->PFX ## _pixels_tab[IDX][0] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _avr32 ); \ -+ c->PFX ## _pixels_tab[IDX][1] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _h_avr32); \ -+ c->PFX ## _pixels_tab[IDX][2] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _v_avr32); \ -+ c->PFX ## _pixels_tab[IDX][3] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _hv_avr32) -+ -+ dspfunc(put, 0, 16); -+ dspfunc(put_no_rnd, 0, 16); -+ dspfunc(put, 1, 8); -+ dspfunc(put_no_rnd, 1, 8); -+ -+ dspfunc(avg, 1, 8); -+ dspfunc(avg_no_rnd, 1, 8); -+ dspfunc(avg, 0, 16); -+ dspfunc(avg_no_rnd, 0, 16); -+#undef dspfunc -+ -+} -+ -+ -+ -+#if 0 -+int main(int argc, char *argv[]){ -+ -+ -+} -+#endif -+ -diff --git a/libavcodec/avr32/fdct.S b/libavcodec/avr32/fdct.S -new file mode 100644 -index 0000000..be45b86 ---- /dev/null -+++ b/libavcodec/avr32/fdct.S -@@ -0,0 +1,541 @@ -+/* -+ * Copyright (c) 2007 Atmel Corporation. All rights reserved. -+ * -+ * 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 ATMEL may not be used to endorse or promote products -+ * derived from this software without specific prior written -+ * permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL -+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -+ * DAMAGE. -+ */ -+ -+//********************************************************** -+//* 2-D fDCT, Based on: * -+//* C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical * -+//* Fast 1-D DCT Algorithms with 11 Multiplications", * -+//* Proc. Int'l. Conf. on Acoustics, Speech, and Signal * -+//* Processing 1989 (ICASSP '89), pp. 988-991. * -+//* * -+//* Fixed point implementation optimized for the AVR-II * -+//* instruction set. If a table is used for the * -+//* coeffisients we can load two and two of them from * -+//* This will give a reduction of -+//* * -+//* * -+//********************************************************** -+ -+ -+/* This routine is a slow-but-accurate integer implementation of the -+ * forward DCT (Discrete Cosine Transform). Taken from the IJG software -+ * -+ * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT -+ * on each column. Direct algorithms are also available, but they are -+ * much more complex and seem not to be any faster when reduced to code. -+ * -+ * This implementation is based on an algorithm described in -+ * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT -+ * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, -+ * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. -+ * The primary algorithm described there uses 11 multiplies and 29 adds. -+ * We use their alternate method with 12 multiplies and 32 adds. -+ * The advantage of this method is that no data path contains more than one -+ * multiplication; this allows a very simple and accurate implementation in -+ * scaled fixed-point arithmetic, with a minimal number of shifts. -+ * -+ * The poop on this scaling stuff is as follows: -+ * -+ * Each 1-D DCT step produces outputs which are a factor of sqrt(N) -+ * larger than the true DCT outputs. The final outputs are therefore -+ * a factor of N larger than desired; since N=8 this can be cured by -+ * a simple right shift at the end of the algorithm. The advantage of -+ * this arrangement is that we save two multiplications per 1-D DCT, -+ * because the y0 and y4 outputs need not be divided by sqrt(N). -+ * In the IJG code, this factor of 8 is removed by the quantization step -+ * (in jcdctmgr.c), here it is removed. -+ * -+ * We have to do addition and subtraction of the integer inputs, which -+ * is no problem, and multiplication by fractional constants, which is -+ * a problem to do in integer arithmetic. We multiply all the constants -+ * by CONST_SCALE and convert them to integer constants (thus retaining -+ * CONST_BITS bits of precision in the constants). After doing a -+ * multiplication we have to divide the product by CONST_SCALE, with proper -+ * rounding, to produce the correct output. This division can be done -+ * cheaply as a right shift of CONST_BITS bits. We postpone shifting -+ * as long as possible so that partial sums can be added together with -+ * full fractional precision. -+ * -+ * The outputs of the first pass are scaled up by PASS1_BITS bits so that -+ * they are represented to better-than-integral precision. These outputs -+ * require 8 + PASS1_BITS + 3 bits; this fits in a 16-bit word -+ * with the recommended scaling. (For 12-bit sample data, the intermediate -+ * array is INT32 anyway.) -+ * -+ * To avoid overflow of the 32-bit intermediate results in pass 2, we must -+ * have 8 + CONST_BITS + PASS1_BITS <= 26. Error analysis -+ * shows that the values given below are the most effective. -+ * -+ * We can gain a little more speed, with a further compromise in accuracy, -+ * by omitting the addition in a descaling shift. This yields an incorrectly -+ * rounded result half the time... -+ */ -+ -+ .global fdct_avr32 -+ -+ -+ -+#define CONST_BITS 13 -+#define PASS1_BITS 2 -+ -+#define FIX_0_298631336 2446 /* FIX(0.298631336) */ -+#define FIX_0_390180644 3196 /* FIX(0.390180644) */ -+#define FIX_0_541196100 4433 /* FIX(0.541196100) */ -+#define FIX_0_765366865 6270 /* FIX(0.765366865) */ -+#define FIX_0_899976223 7373 /* FIX(0.899976223) */ -+#define FIX_1_175875602 9633 /* FIX(1.175875602) */ -+#define FIX_1_501321110 12299 /* FIX(1.501321110) */ -+#define FIX_1_847759065 15137 /* FIX(1.847759065) */ -+#define FIX_1_961570560 16069 /* FIX(1.961570560) */ -+#define FIX_2_053119869 16819 /* FIX(2.053119869) */ -+#define FIX_2_562915447 20995 /* FIX(2.562915447) */ -+#define FIX_3_072711026 25172 /* FIX(3.072711026) */ -+ -+ -+/* -+ * Perform an integer forward DCT on one block of samples. -+ */ -+ -+//void -+//fdct_int32(short *const block) -+//{ -+// int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; -+// int tmp10, tmp11, tmp12, tmp13; -+// int z1, z2, z3, z4, z5; -+// short *blkptr; -+// int *dataptr; -+// int data[64]; -+// int i; -+// -+// /* Pass 1: process rows. */ -+// /* Note results are scaled up by sqrt(8) compared to a true DCT; */ -+// /* furthermore, we scale the results by 2**PASS1_BITS. */ -+// -+// dataptr = data; -+// blkptr = block; -+ -+ .text -+fdct_avr32: -+ pushm r0-r3, r4-r7, lr -+#define loop_ctr r0 -+#define blkptr r12 -+#define x0 r1 -+#define x1 r2 -+#define x2 r3 -+#define x3 r4 -+#define x4 r5 -+#define x5 r6 -+#define x6 r7 -+#define x7 r8 -+#define tmp0 r5 -+#define tmp7 r2 -+#define tmp1 r3 -+#define tmp6 r4 -+#define tmp2 r9 -+#define tmp5 r8 -+#define tmp3 r7 -+#define tmp4 r6 -+ -+ -+ mov loop_ctr, 8 -+// for (i = 0; i < 8; i++) { -+ROW_LOOP: -+ -+ ldm blkptr, r1, r2, r3, r4 -+ -+// tmp2 = blkptr[2] + blkptr[5]; -+// tmp3 = blkptr[3] + blkptr[4]; -+ paddx.h r5, r3, r2 -+// tmp5 = blkptr[2] - blkptr[5]; -+// tmp4 = blkptr[3] - blkptr[4]; -+ psubx.h r6, r3, r2 -+// tmp0 = blkptr[0] + blkptr[7]; -+// tmp1 = blkptr[1] + blkptr[6]; -+ paddx.h r2, r4, r1 -+// tmp7 = blkptr[0] - blkptr[7]; -+// tmp6 = blkptr[1] - blkptr[6]; -+ psubx.h r3, r4, r1 -+ -+// /* Even part per LL&M figure 1 --- note that published figure is faulty; -+// * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". -+// */ -+ -+#define tmp10 r1 -+#define tmp13 r5 -+#define tmp11 r7 -+#define tmp12 r3 -+#define z1 r9 -+ -+// tmp10 = tmp0 + tmp3; -+// tmp13 = tmp0 - tmp3; -+ paddsub.h r1, r2:t, r5:b -+// tmp11 = tmp1 + tmp2; -+// tmp12 = tmp1 - tmp2; -+ paddsub.h r4, r2:b, r5:t -+ -+ -+// dataptr[0] = (tmp10 + tmp11) << PASS1_BITS; -+// dataptr[4] = (tmp10 - tmp11) << PASS1_BITS; -+ paddsub.h r7, r1:t, r4:t -+ ld.w r10, pc[const_table - .] -+ plsl.h r7, r7, PASS1_BITS -+ -+// z1 = (tmp12 + tmp13) * FIX_0_541196100; -+ addhh.w r8, r4:b, r1:b -+ mulhh.w r8, r8:b, r10:t -+ -+// dataptr[2] = -+// DESCALE(z1 + tmp13 * FIX_0_765366865, CONST_BITS - PASS1_BITS); -+// dataptr[6] = -+// DESCALE(z1 + tmp12 * (-FIX_1_847759065), CONST_BITS - PASS1_BITS); -+ mulhh.w r9, r1:b, r10:b -+ ld.w r10, pc[const_table - . + 4] -+ add r1, r8, r9 -+ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 -+ -+ mulhh.w r9, r4:b, r10:t -+ add r4, r8, r9 -+ satrnds r4 >> (CONST_BITS - PASS1_BITS), 31 -+ -+ -+// /* Odd part per figure 8 --- note paper omits factor of sqrt(2). -+// * cK represents cos(K*pi/16). -+// * i0..i3 in the paper are tmp4..tmp7 here. -+// */ -+ -+#define z2 r5 -+#define z3 r6 -+#define z4 r7 -+#define z5 r8 -+ -+// z4 = tmp5 + tmp7; -+// z3 = tmp4 + tmp6; -+ padd.h r2, r6, r3 -+// z2 = tmp5 + tmp6; -+// z1 = tmp4 + tmp7; -+ paddx.h r5, r6, r3 -+ -+ lddpc r9, pc[const_table - . + 8] -+// z5 = (z3 + z4) * FIX_1_175875602; /* sqrt(2) * c3 */ -+ addhh.w r8, r2:t, r2:b -+ mulhh.w r8, r8:b, r10:b -+ lddpc r10, pc[const_table - . + 12] -+ -+ -+// tmp4 *= FIX_0_298631336; /* sqrt(2) * (-c1+c3+c5-c7) */ -+ mulhh.w r11, r6:b, r9:t -+ -+// tmp5 *= FIX_2_053119869; /* sqrt(2) * ( c1+c3-c5+c7) */ -+ mulhh.w r6, r6:t, r9:b -+ -+// tmp6 *= FIX_3_072711026; /* sqrt(2) * ( c1+c3+c5-c7) */ -+ lddpc r9, pc[const_table - . + 20] -+ mulhh.w lr, r3:b, r10:t -+ -+// tmp7 *= FIX_1_501321110; /* sqrt(2) * ( c1+c3-c5-c7) */ -+ mulhh.w r3, r3:t, r10:b -+ -+// z3 *= -FIX_1_961570560; /* sqrt(2) * (-c3-c5) */ -+ mulhh.w r10, r2:b, r9:t -+ -+// z4 *= -FIX_0_390180644; /* sqrt(2) * (c5-c3) */ -+ mulhh.w r2, r2:t, r9:b -+ lddpc r9, pc[const_table - . + 16] -+// z3 += z5; -+// z4 += z5; -+ add r10, r8 -+ add r2, r8 -+ -+// z1 *= -FIX_0_899976223; /* sqrt(2) * (c7-c3) */ -+ mulhh.w r8, r5:b, r9:t -+ -+// z2 *= -FIX_2_562915447; /* sqrt(2) * (-c1-c3) */ -+ mulhh.w r5, r5:t, r9:b -+ -+// dataptr[7] = DESCALE(tmp4 + z1 + z3, CONST_BITS - PASS1_BITS); -+ add r11, r8 -+ add r11, r10 -+ satrnds r11 >> (CONST_BITS - PASS1_BITS), 31 -+ -+// dataptr[5] = DESCALE(tmp5 + z2 + z4, CONST_BITS - PASS1_BITS); -+ add r6, r5 -+ -+ sthh.w blkptr[6*2], r4:b, r11:b -+ add r6, r2 -+ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 -+ -+// dataptr[3] = DESCALE(tmp6 + z2 + z3, CONST_BITS - PASS1_BITS); -+ add lr, r5 -+ sthh.w blkptr[4*2], r7:b, r6:b -+ add lr, r10 -+ satrnds lr >> (CONST_BITS - PASS1_BITS), 31 -+ -+// dataptr[1] = DESCALE(tmp7 + z1 + z4, CONST_BITS - PASS1_BITS); -+ add r3, r8 -+ sthh.w blkptr[2*2], r1:b, lr:b -+ add r3, r2 -+ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 -+ -+ -+ -+// dataptr += 8; /* advance pointer to next row */ -+// blkptr += 8; -+ sthh.w blkptr[0], r7:t, r3:b -+ sub blkptr, -16 -+ sub loop_ctr, 1 -+ brne ROW_LOOP -+ -+// } -+ -+ /* Pass 2: process columns. -+ * We remove the PASS1_BITS scaling, but leave the results scaled up -+ * by an overall factor of 8. -+ */ -+ -+// dataptr = data; -+ sub blkptr, 128 -+ -+ mov loop_ctr, 4 -+// for (i = 0; i < 8; i++) { -+COLOUMN_LOOP: -+ ld.w r1, blkptr[0] -+ ld.w r2, blkptr[1*8*2] -+ ld.w r3, blkptr[2*8*2] -+ ld.w r4, blkptr[3*8*2] -+ ld.w r5, blkptr[4*8*2] -+ ld.w r6, blkptr[5*8*2] -+ ld.w r7, blkptr[6*8*2] -+ ld.w r8, blkptr[7*8*2] -+ -+// tmp0 = blkptr[0] + blkptr[7*8]; -+ padds.sh r9, r1, r8 -+// tmp7 = blkptr[0] - blkptr[7*8]; -+ psubs.sh r1, r1, r8 -+// tmp1 = blkptr[1*8] + blkptr[6*8]; -+ padds.sh r8, r2, r7 -+// tmp6 = blkptr[1*8] - blkptr[6*8]; -+ psubs.sh r2, r2, r7 -+// tmp2 = blkptr[2*8] + blkptr[5*8]; -+ padds.sh r7, r3, r6 -+// tmp5 = blkptr[2*8] - blkptr[5*8]; -+ psubs.sh r3, r3, r6 -+// tmp3 = blkptr[3*8] + blkptr[4*8]; -+ padds.sh r6, r4, r5 -+// tmp4 = blkptr[3*8] - blkptr[4*8]; -+ psubs.sh r4, r4, r5 -+ -+// /* even part per ll&m figure 1 --- note that published figure is faulty; -+// * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". -+// */ -+// -+// tmp10 = tmp0 + tmp3; -+ padds.sh r5, r9, r6 -+// tmp13 = tmp0 - tmp3; -+ psubs.sh r9, r9, r6 -+// tmp11 = tmp1 + tmp2; -+ padds.sh r6, r8, r7 -+// tmp12 = tmp1 - tmp2; -+ psubs.sh r8, r8, r7 -+ -+// dataptr[0] = DESCALE(tmp10 + tmp11, PASS1_BITS); -+// dataptr[32] = DESCALE(tmp10 - tmp11, PASS1_BITS); -+//Might get an overflow here -+ padds.sh r7, r5, r6 -+ psubs.sh r5, r5, r6 -+ -+ //Rounding -+ mov lr, (1 << (PASS1_BITS + 2)) -+ orh lr, hi(1 << (16 + PASS1_BITS + 2)) -+ padds.sh r7, r7, lr -+ padds.sh r5, r5, lr -+ -+ pasr.h r7, r7, PASS1_BITS + 3 -+ pasr.h r5, r5, PASS1_BITS + 3 -+ st.w r12[0], r7 -+ st.w r12[4*8*2], r5 -+ -+ lddpc r10, const_table2 -+ -+ -+// z1 = (tmp12 + tmp13) * FIX_0_541196100; -+ padds.sh r5, r8, r9 -+ mulhh.w r6, r5:t, r10:t -+ mulhh.w r7, r5:b, r10:t -+ -+// dataptr[16] = -+// DESCALE(z1 + tmp13 * FIX_0_765366865, CONST_BITS + PASS1_BITS); -+ lddpc r11, const_table2 + 4 -+ mulhh.w lr, r9:t, r10:b -+ mulhh.w r9, r9:b, r10:b -+ add lr, r6 -+ add r9, r7 -+ satrnds lr >> (CONST_BITS + PASS1_BITS + 3), 31 -+ satrnds r9 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ sthh.w r12[2*8*2], lr:b, r9:b -+ -+// dataptr[48] = -+// DESCALE(z1 + tmp12 * (-FIX_1_847759065), CONST_BITS + PASS1_BITS); -+ mulhh.w lr, r8:t, r11:t -+ mulhh.w r8, r8:b, r11:t -+ add lr, r6 -+ add r8, r7 -+ satrnds lr >> (CONST_BITS + PASS1_BITS + 3), 31 -+ satrnds r8 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ sthh.w r12[6*8*2], lr:b, r8:b -+ -+// /* Odd part per figure 8 --- note paper omits factor of sqrt(2). -+// * cK represents cos(K*pi/16). -+// * i0..i3 in the paper are tmp4..tmp7 here. -+// */ -+// -+// z2 = tmp5 + tmp6; -+// z3 = tmp4 + tmp6; -+// z4 = tmp5 + tmp7; -+ padds.sh r5, r3, r2 -+ padds.sh r6, r4, r2 -+ padds.sh r7, r3, r1 -+ -+// z5 = (z3 + z4) * FIX_1_175875602; /* sqrt(2) * c3 */ -+ padds.sh r8, r6, r7 -+ mulhh.w r9, r8:t, r11:b -+ mulhh.w r8, r8:b, r11:b -+ -+// z3 *= -FIX_1_961570560; /* sqrt(2) * (-c3-c5) */ -+// z3 += z5; -+ lddpc r11, const_table2 + 8 -+ mulhh.w r10, r6:t, r11:t -+ mulhh.w r6, r6:b, r11:t -+ add r10, r9 -+ add r6, r8 -+ -+// z4 *= -FIX_0_390180644; /* sqrt(2) * (c5-c3) */ -+// z4 += z5; -+ mulhh.w lr, r7:t, r11:b -+ mulhh.w r7, r7:b, r11:b -+ lddpc r11, const_table2 + 12 -+ st.w --sp,r0 -+ add lr, r9 -+ add r7, r8 -+ -+// tmp6 *= FIX_3_072711026; /* sqrt(2) * ( c1+c3+c5-c7) */ -+ mulhh.w r0, r2:t, r11:t -+ machh.w r0, r5:t, r11:b -+ mulhh.w r2, r2:b, r11:t -+ machh.w r2, r5:b, r11:b -+ -+// z2 *= -FIX_2_562915447; /* sqrt(2) * (-c1-c3) */ -+// dataptr[24] = DESCALE(tmp6 + z2 + z3, CONST_BITS + PASS1_BITS); -+ add r0, r10 -+ lddpc r11, const_table2 + 16 -+ add r2, r6 -+ satrnds r0 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ satrnds r2 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ sthh.w r12[3*8*2], r0:b, r2:b -+// tmp5 *= FIX_2_053119869; /* sqrt(2) * ( c1+c3-c5+c7) */ -+ mulhh.w r0, r3:t, r11:t -+ machh.w r0, r5:t, r11:b -+ mulhh.w r2, r3:b, r11:t -+ machh.w r2, r5:b, r11:b -+ add r0, lr -+ lddpc r11, const_table2 + 20 -+ add r2, r7 -+ -+// dataptr[40] = DESCALE(tmp5 + z2 + z4, CONST_BITS + PASS1_BITS); -+ satrnds r0 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ satrnds r2 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ sthh.w r12[5*8*2], r0:b, r2:b -+ -+ -+// z1 = tmp4 + tmp7; -+ padds.sh r2, r4, r1 -+ -+// tmp4 *= FIX_0_298631336; /* sqrt(2) * (-c1+c3+c5-c7) */ -+ mulhh.w r3, r4:t, r11:t -+ machh.w r3, r2:t, r11:b -+ mulhh.w r4, r4:b, r11:t -+ machh.w r4, r2:b, r11:b -+ add r3, r10 -+ lddpc r11, const_table2 + 24 -+ add r4, r6 -+ -+// z1 *= -FIX_0_899976223; /* sqrt(2) * (c7-c3) */ -+// dataptr[56] = DESCALE(tmp4 + z1 + z3, CONST_BITS + PASS1_BITS); -+ satrnds r3 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ satrnds r4 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ sthh.w r12[7*8*2], r3:b, r4:b -+ -+ -+// tmp7 *= FIX_1_501321110; /* sqrt(2) * ( c1+c3-c5-c7) */ -+ mulhh.w r3, r1:t, r11:t -+ machh.w r3, r2:t, r11:b -+ mulhh.w r4, r1:b, r11:t -+ machh.w r4, r2:b, r11:b -+ add r3, lr -+ add r4, r7 -+ -+// dataptr[8] = DESCALE(tmp7 + z1 + z4, CONST_BITS + PASS1_BITS); -+ satrnds r3 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ satrnds r4 >> (CONST_BITS + PASS1_BITS + 3), 31 -+ sthh.w r12[1*8*2], r3:b, r4:b -+ ld.w r0, sp++ -+ -+// dataptr++; /* advance pointer to next column */ -+ sub blkptr, -4 -+ sub loop_ctr, 1 -+ brne COLOUMN_LOOP -+ -+// } -+ -+ popm r0-r3, r4-r7, pc -+ -+// /* descale */ -+// for (i = 0; i < 64; i++) -+// block[i] = (short int) DESCALE(data[i], 3); -+ -+ -+//} -+ -+ -+ .align 2 -+const_table: .short FIX_0_541196100, FIX_0_765366865, -FIX_1_847759065, FIX_1_175875602 -+ .short FIX_0_298631336, FIX_2_053119869, FIX_3_072711026, FIX_1_501321110 -+ .short -FIX_0_899976223,-FIX_2_562915447, -FIX_1_961570560, -FIX_0_390180644 -+ -+const_table2: .short FIX_0_541196100, FIX_0_765366865, -FIX_1_847759065, FIX_1_175875602 -+ .short -FIX_1_961570560, -FIX_0_390180644, FIX_3_072711026, -FIX_2_562915447 -+ .short FIX_2_053119869, -FIX_2_562915447, FIX_0_298631336, -FIX_0_899976223 -+ .short FIX_1_501321110, -FIX_0_899976223 -+ -+ -+ -+ -diff --git a/libavcodec/avr32/h264idct.S b/libavcodec/avr32/h264idct.S -new file mode 100644 -index 0000000..4b23e2d ---- /dev/null -+++ b/libavcodec/avr32/h264idct.S -@@ -0,0 +1,451 @@ -+/* -+ * Copyright (c) 2007 Atmel Corporation. All rights reserved. -+ * -+ * 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 ATMEL may not be used to endorse or promote products -+ * derived from this software without specific prior written -+ * permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL -+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -+ * DAMAGE. -+ */ -+ -+ .global h264_idct_add_avr32 -+ -+ /* Macro for performing the 1-D transform on one row line. -+ -+ The register 'w01' should contain the first two pixels, -+ and the register 'w23' should contain the last two pixels -+ in the line. The resulting line is placed in p01 and p23 -+ so that { w01, w23 } = { x0, x1, x3, x2 }. -+ 'tmp' and 'tmp2' should be scratchpad registers. */ -+ .macro transform_row w01, w23, tmp, tmp2 -+ add \tmp, \w23, \w01 << 1 /* tmp = { xxxx, 2*w1 + w3 } */ -+ sub \tmp2, \w01, \w23 << 1 /* tmp2 = { xxxx, w1 - 2*w3 } */ -+ bfins \tmp2, \tmp, 16, 16 /* tmp2 = { 2*w1 + w3, w1 - 2*w3 } */ -+ pasr.h \tmp2, \tmp2, 1 /* tmp2 = { w1 + w3/2, w1/2 - w3 } */ -+ paddsub.h \tmp, \w01:t, \w23:t /* tmp = { w0 + w2, w0 - w2 } */ -+ padd.h \w01, \tmp, \tmp2 /* w01 = { w0 + w2 + w1 + w3/2, w0 - w2 + w1/2 - w3 } */ -+ psub.h \w23, \tmp, \tmp2 /* w23 = { w0 + w2 - w1 - w3/2, w0 - w2 - w1/2 + w3 } */ -+ .endm -+ -+ /* Macro for performing the 1-D transform on two columns. -+ -+ The registers w0, w1, w2, w3 should each contain two -+ packed samples from the two colomns to transform. -+ tmp and tmp2 are scratchpad registers. -+ -+ The resulting transformed columns are placed in the -+ same positions as the input columns. -+ */ -+ .macro transform_2columns w0, w1, w2, w3, tmp, tmp2 -+ padd.h \tmp, \w0, \w2 /* tmp = z0 = w0 + w2 */ -+ psub.h \w0, \w0, \w2 /* w0 = z1 = w0 - w2 */ -+ pasr.h \w2, \w1, 1 /* w2 = w1/2 */ -+ pasr.h \tmp2, \w3, 1 /* tmp2 = w3/2 */ -+ psub.h \w3, \w2, \w3 /* w3 = z2 = w1/2 - w3 */ -+ padd.h \tmp2, \w1, \tmp2/* tmp2 = z3 = w1 + w3/2 */ -+ padd.h \w1, \w0, \w3 /* w1 = x1 = z1 + z2 */ -+ psub.h \w2, \w0, \w3 /* w2 = x2 = z1 - z2 */ -+ padd.h \w0, \tmp, \tmp2/* w0 = x0 = z0 + z3 */ -+ psub.h \w3, \tmp, \tmp2/* w3 = x3 = z0 - z3 */ -+ /* Scale down result. */ -+ pasr.h \w0, \w0, 6 -+ pasr.h \w1, \w1, 6 -+ pasr.h \w2, \w2, 6 -+ pasr.h \w3, \w3, 6 -+ .endm -+ -+/*void h264_idct_add_avr32(uint8_t *dst, DCTELEM *block, int stride)*/ -+ -+h264_idct_add_avr32: -+ -+ stm --sp,r0-r3,r4-r7, lr -+ -+ /* Setup rounding factor. */ -+ mov r0, (1 << 5) -+ lsl r0, 16 -+ -+ /* Load block */ -+ ldm r11,r2-r9 -+ /* r9 = { w00, w01 }, -+ r8 = { w02, w03 }, -+ r7 = { w10, w11 }, -+ r6 = { w12, w13 }, -+ r5 = { w20, w21 }, -+ r4 = { w22, w23 }, -+ r3 = { w30, w31 }, -+ r2 = { w32, w33 } */ -+ -+ -+ /* Add the rounding factor to w00. */ -+ add r9, r0 -+ -+ /* Transform rows */ -+ transform_row r9, r8, r0, r1 -+ transform_row r7, r6, r0, r1 -+ transform_row r5, r4, r0, r1 -+ transform_row r3, r2, r0, r1 -+ -+ /* Transform columns */ -+ transform_2columns r9, r7, r5, r3, r0, r1 -+ transform_2columns r8, r6, r4, r2, r0, r1 -+ -+ /* Load predicted pixels.*/ -+ ld.w lr, r12[0] -+ ld.w r11, r12[r10] -+ -+ /* Unpack to halwords. */ -+ punpckub.h r0, lr:t -+ punpckub.h r1, lr:b -+ -+ /* Add with transformed row. */ -+ padd.h r0, r0, r9 -+ paddx.h r1, r1, r8 -+ /* Pack and saturate back to 8-bit pixels. */ -+ packsh.ub r0, r0, r1 -+ -+ /* Unpack to halwords. */ -+ punpckub.h lr, r11:t -+ punpckub.h r11, r11:b -+ -+ /* Add with transformed row. */ -+ padd.h lr, lr, r7 -+ paddx.h r11, r11, r6 -+ /* Pack and saturate back to 8-bit pixels. */ -+ packsh.ub r1, lr, r11 -+ -+ /* Store back to frame. */ -+ st.w r12[0], r0 -+ st.w r12[r10], r1 -+ -+ add r12, r12, r10 << 1 -+ -+ /* Load predicted pixels.*/ -+ ld.w lr, r12[0] -+ ld.w r11, r12[r10] -+ -+ /* Unpack to halwords. */ -+ punpckub.h r0, lr:t -+ punpckub.h r1, lr:b -+ -+ /* Add with transformed row. */ -+ padd.h r0, r0, r5 -+ paddx.h r1, r1, r4 -+ /* Pack and saturate back to 8-bit pixels. */ -+ packsh.ub r0, r0, r1 -+ -+ /* Unpack to halwords. */ -+ punpckub.h lr, r11:t -+ punpckub.h r11, r11:b -+ -+ /* Add with transformed row. */ -+ padd.h lr, lr, r3 -+ paddx.h r11, r11, r2 -+ /* Pack and saturate back to 8-bit pixels. */ -+ packsh.ub r1, lr, r11 -+ -+ /* Store back to frame. */ -+ st.w r12[0], r0 -+ st.w r12[r10], r1 -+ -+ ldm sp++,r0-r3,r4-r7, pc -+ -+ -+ .global h264_idct8_add_avr32 -+//void ff_h264_idct8_add_c(uint8_t *dst, DCTELEM *block, int stride){ -+ -+h264_idct8_add_avr32: -+ stm --sp,r0-r3,r4-r7, lr -+ -+ /* Push dst and stride on stack */ -+ stm --sp,r10,r12 -+ -+// int i; -+// DCTELEM (*src)[8] = (DCTELEM(*)[8])block; -+// uint8_t *cm = cropTbl + MAX_NEG_CROP; -+ -+// block[0] += 32; -+ -+ -+// for( i = 0; i < 8; i++ ) -+// { -+ mov lr, 4 -+0: -+ ld.w r7, r11[0*(8*2)] -+ ld.w r6, r11[1*(8*2)] -+ ld.w r5, r11[2*(8*2)] -+ ld.w r4, r11[3*(8*2)] -+ ld.w r3, r11[4*(8*2)] -+ ld.w r2, r11[5*(8*2)] -+ ld.w r1, r11[6*(8*2)] -+ ld.w r0, r11[7*(8*2)] -+ -+/* -+ -+ const int a0 = src[0][i] + src[4][i]; -+ const int a2 = src[0][i] - src[4][i]; -+ const int a4 = (src[2][i]>>1) - src[6][i]; -+ const int a6 = (src[6][i]>>1) + src[2][i]; -+*/ -+ padd.h r8, r7, r3 /* r8 = a0 */ -+ psub.h r7, r7, r3 /* r7 = a2 */ -+ pasr.h r3, r5, 1 /* r3 = src[2][i] >> 1 */ -+ pasr.h r9, r1, 1 /* r9 = src[6][i] >> 1 */ -+ psub.h r3, r3, r1 /* r3 = a4 */ -+ padd.h r9, r9, r5 /* r9 = a6 */ -+ -+/* -+ const int b0 = a0 + a6; -+ const int b2 = a2 + a4; -+ const int b4 = a2 - a4; -+ const int b6 = a0 - a6; -+*/ -+ padd.h r1, r8, r9 /* r1 = b0 */ -+ psub.h r8, r8, r9 /* r8 = b6 */ -+ padd.h r5, r7, r3 /* r5 = b2 */ -+ psub.h r7, r7, r3 /* r7 = b4 */ -+ -+/* -+ const int a1 = -src[3][i] + src[5][i] - src[7][i] - (src[7][i]>>1); -+ const int a3 = src[1][i] + src[7][i] - src[3][i] - (src[3][i]>>1); -+ const int a5 = -src[1][i] + src[7][i] + src[5][i] + (src[5][i]>>1); -+ const int a7 = src[3][i] + src[5][i] + src[1][i] + (src[1][i]>>1); -+*/ -+ pasr.h r3, r0, 1 -+ padd.h r3, r3, r0 -+ psub.h r3, r2, r3 -+ psub.h r3, r3, r4 /* r3 = a1 */ -+ -+ pasr.h r9, r4, 1 -+ padd.h r9, r9, r4 -+ psub.h r9, r0, r9 -+ padd.h r9, r6, r9 /* r9 = a3 */ -+ -+ pasr.h r10, r2, 1 -+ padd.h r10, r10, r2 -+ padd.h r10, r10, r0 -+ psub.h r10, r10, r6 /* r10 = a5 */ -+ -+ pasr.h r0, r6, 1 -+ padd.h r0, r0, r6 -+ padd.h r0, r0, r2 -+ padd.h r0, r0, r4 /* r0 = a7 */ -+/* -+ const int b1 = (a7>>2) + a1; -+ const int b3 = a3 + (a5>>2); -+ const int b5 = (a3>>2) - a5; -+ const int b7 = a7 - (a1>>2); -+*/ -+ pasr.h r2, r0, 2 -+ padd.h r2, r2, r3 /* r2 = b1 */ -+ pasr.h r3, r3, 2 -+ psub.h r3, r0, r3 /* r3 = b7 */ -+ -+ pasr.h r0, r10, 2 -+ padd.h r0, r0, r9 /* r0 = b3 */ -+ pasr.h r9, r9, 2 -+ psub.h r9, r9, r10 /* r9 = b5 */ -+ -+ -+/* -+ src[0][i] = b0 + b7; -+ src[7][i] = b0 - b7; -+ src[1][i] = b2 + b5; -+ src[6][i] = b2 - b5; -+ src[2][i] = b4 + b3; -+ src[5][i] = b4 - b3; -+ src[3][i] = b6 + b1; -+ src[4][i] = b6 - b1; */ -+ -+ padd.h r4, r1, r3 -+ psub.h r1, r1, r3 -+ st.w r11[0*(8*2)], r4 -+ st.w r11[7*(8*2)], r1 -+ -+ padd.h r3, r5, r9 -+ psub.h r5, r5, r9 -+ st.w r11[1*(8*2)], r3 -+ st.w r11[6*(8*2)], r5 -+ -+ padd.h r9, r7, r0 -+ psub.h r7, r7, r0 -+ st.w r11[2*(8*2)], r9 -+ st.w r11[5*(8*2)], r7 -+ -+ padd.h r0, r8, r2 -+ psub.h r8, r8, r2 -+ st.w r11[3*(8*2)], r0 -+ st.w r11[4*(8*2)], r8 -+ -+ sub r11, -4 -+ sub lr, 1 -+ brne 0b -+ -+// } -+ -+ lddsp r12, sp[0] /* r12 = dst */ -+ sub r11, 4*4 -+ ldm r11++, r4-r7 -+ mov lr, 8 -+ /* Push dst and stride on stack */ -+ -+1: -+// for( i = 0; i < 8; i++ ) -+// { -+ -+ /* r7 = {src[i][0], src[i][1]} -+ r6 = {src[i][2], src[i][3]} -+ r5 = {src[i][4], src[i][5]} -+ r4 = {src[i][6], src[i][7]} */ -+ -+/* -+ const int a0 = src[i][0] + src[i][4]; -+ const int a2 = src[i][0] - src[i][4]; -+ const int a4 = (src[i][2]>>1) - src[i][6]; -+ const int a6 = (src[i][6]>>1) + src[i][2]; -+*/ -+ pasr.h r8, r6, 1 -+ pasr.h r9, r4, 1 -+ addhh.w r0, r7:t, r5:t /* r0 = a0 */ -+ subhh.w r1, r7:t, r5:t /* r1 = a2 */ -+ subhh.w r2, r8:t, r4:t /* r2 = a4 */ -+ addhh.w r3, r9:t, r6:t /* r3 = a6 */ -+ -+/* -+ const int b0 = a0 + a6; -+ const int b2 = a2 + a4; -+ const int b4 = a2 - a4; -+ const int b6 = a0 - a6; -+*/ -+ add r10, r0, r3 /* r10 = b0 */ -+ sub r0, r3 /* r0 = b6 */ -+ add r3, r1, r2 /* r3 = b2 */ -+ sub r1, r2 /* r1 = b4 */ -+/* -+ -+ -+ const int a7 = src[i][5] + src[i][3] + src[i][1] + (src[i][1]>>1); -+ const int a1 = src[i][5] - src[i][3] - src[i][7] - (src[i][7]>>1); -+ const int a3 = src[i][7] + src[i][1] - src[i][3] - (src[i][3]>>1); -+ const int a5 = src[i][7] - src[i][1] + src[i][5] + (src[i][5]>>1); */ -+ addhh.w r8, r8:b, r6:b -+ addhh.w r2, r4:b, r7:b -+ sub r2, r8 /* r2 = a3 */ -+ -+ addhh.w r9, r9:b, r4:b -+ subhh.w r8, r5:b, r6:b -+ sub r8, r9 /* r8 = a1 */ -+ -+ pasr.h r9, r7, 1 -+ addhh.w r9, r9:b, r7:b -+ addhh.w r6, r5:b, r6:b -+ add r6, r9 /* r6 = a7 */ -+ -+ pasr.h r9, r5, 1 -+ addhh.w r9, r9:b, r5:b -+ subhh.w r5, r4:b, r7:b -+ add r5, r9 /* r5 = a5 */ -+ -+/* const int b1 = (a7>>2) + a1; -+ const int b3 = (a5>>2) + a3; -+ const int b5 = (a3>>2) - a5; -+ const int b7 = -(a1>>2) + a7 ; */ -+ asr r4, r6, 2 -+ add r4, r8 /* r4 = b1 */ -+ asr r8, 2 -+ rsub r8, r6 /* r8 = b7 */ -+ -+ asr r6, r5, 2 -+ add r6, r2 /* r6 = b3 */ -+ asr r2, 2 -+ sub r2, r5 /* r2 = b5 */ -+ -+/* -+ dst[i*stride + 0] = cm[ dst[i*stride + 0] + ((b0 + b7) >> 6) ]; -+ dst[i*stride + 1] = cm[ dst[i*stride + 1] + ((b2 + b5) >> 6) ]; -+ dst[i*stride + 2] = cm[ dst[i*stride + 2] + ((b4 + b3) >> 6) ]; -+ dst[i*stride + 3] = cm[ dst[i*stride + 3] + ((b6 + b1) >> 6) ]; -+ dst[i*stride + 4] = cm[ dst[i*stride + 4] + ((b6 - b1) >> 6) ]; -+ dst[i*stride + 5] = cm[ dst[i*stride + 5] + ((b4 - b3) >> 6) ]; -+ dst[i*stride + 6] = cm[ dst[i*stride + 6] + ((b2 - b5) >> 6) ]; -+ dst[i*stride + 7] = cm[ dst[i*stride + 7] + ((b0 - b7) >> 6) ]; -+*/ -+ add r5, r10, r8 -+ satrnds r5 >> 6, 0 /* r5 = (b0 + b7) >> 6 */ -+ sub r10, r8 -+ satrnds r10 >> 6, 0 /* r10 = (b0 - b7) >> 6 */ -+ add r8, r3, r2 -+ satrnds r8 >> 6, 0 /* r8 = (b2 + b5) >> 6 */ -+ sub r3, r2 -+ satrnds r3 >> 6, 0 /* r3 = (b2 - b5) >> 6 */ -+ -+ add r2, r1, r6 -+ satrnds r2 >> 6, 0 /* r2 = (b4 + b3) >> 6 */ -+ sub r1, r6 -+ satrnds r1 >> 6, 0 /* r1 = (b4 - b3) >> 6 */ -+ -+ add r6, r0, r4 -+ satrnds r6 >> 6, 0 /* r6 = (b6 + b1) >> 6 */ -+ sub r0, r4 -+ satrnds r0 >> 6, 0 /* r0 = (b6 - b1) >> 6 */ -+ -+ ld.w r4, r12[0] -+ -+ packw.sh r8, r5, r8 -+ packw.sh r7, r2, r6 -+ ld.w r9, r12[4] -+ packw.sh r6, r0, r1 -+ packw.sh r5, r3, r10 -+ -+ punpckub.h r10, r4:t -+ punpckub.h r4, r4:b -+ punpckub.h r3, r9:t -+ punpckub.h r9, r9:b -+ -+ padd.h r8, r8, r10 -+ padd.h r7, r7, r4 -+ padd.h r6, r6, r3 -+ padd.h r5, r5, r9 -+ -+ lddsp r10, sp[4] /* r10 = stride */ -+ packsh.ub r0, r8, r7 -+ packsh.ub r1, r6, r5 -+ -+ st.w r12[0], r0 -+ st.w r12[4], r1 -+ -+ ldm r11++, r4-r7 -+ add r12, r10 /* dst += stride */ -+ -+ sub lr, 1 -+ brne 1b -+ -+ sub sp, -8 -+ ldm sp++,r0-r3,r4-r7, pc -+ -+ -+ -+// } -+//} -diff --git a/libavcodec/avr32/idct.S b/libavcodec/avr32/idct.S -new file mode 100644 -index 0000000..e7551ec ---- /dev/null -+++ b/libavcodec/avr32/idct.S -@@ -0,0 +1,829 @@ -+/* -+ * Copyright (c) 2007 Atmel Corporation. All rights reserved. -+ * -+ * 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 ATMEL may not be used to endorse or promote products -+ * derived from this software without specific prior written -+ * permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL -+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -+ * DAMAGE. -+ */ -+ -+ .global idct_add_avr32 -+ .global idct_put_avr32 -+ .global idct_avr32 -+ -+ -+#define CONST_BITS 13 -+#define PASS1_BITS 2 -+ -+#define ONE ((INT32) 1) -+ -+#define CONST_SCALE (ONE << CONST_BITS) -+ -+#define LINE_SIZE 32 -+ -+#define FIX_0_298631336 (2446) /* FIX(0.298631336) */ -+#define FIX_0_390180644 (3196) /* FIX(0.390180644) */ -+#define FIX_0_541196100 (4433) /* FIX(0.541196100) */ -+#define FIX_0_765366865 (6270) /* FIX(0.765366865) */ -+#define FIX_0_899976223 (7373) /* FIX(0.899976223) */ -+#define FIX_1_175875602 (9633) /* FIX(1.175875602) */ -+#define FIX_1_501321110 (12299)/* FIX(1.501321110) */ -+#define FIX_1_847759065 (15137)/* FIX(1.847759065) */ -+#define FIX_1_961570560 (16069)/* FIX(1.961570560) */ -+#define FIX_2_053119869 (16819)/* FIX(2.053119869) */ -+#define FIX_2_562915447 (20995)/* FIX(2.562915447) */ -+#define FIX_3_072711026 (25172)/* FIX(3.072711026) */ -+ -+ -+#define loop_cnt r11 -+ -+ .text -+ -+idct_add_avr32: -+ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables -+ -+ // Give room for some variables on the stack -+ sub sp, 8 -+ stdsp SP[0], r12 // rfp -+ stdsp SP[4], r11 // iinc -+ -+ mov loop_cnt, 8 //Initialize loop counter -+ -+FOR_ROW: -+ -+ ldm r10, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block -+ mov r6, 0 -+#ifdef USE_PREFETCH -+ pref r10[LINE_SIZE] //Prefetch next line -+#endif -+ or r4, r2, r3 << 16 -+ or r4, r1 //Check if all DCT-coeffisients except the DC is zero -+ or r4, r0 -+ brne AC_ROW //If there are non-zero AC coeffisients perform row-transform -+ -+ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5 -+ plsl.h r5, r5, PASS1_BITS -+ mov r4, r5 -+ st.d r10++, r4 -+ st.d r10++, r4 -+ -+ sub loop_cnt, 1 //Decrement loop counter -+ brne FOR_ROW //Perform loop one more time if loop_cnt is not zero -+ -+ bral COLOUMN_TRANSFORM //Perform coloumn transform after row transform is computed -+ -+ -+AC_ROW: -+ -+ -+ ld.w r12, pc[coef_table - .] -+ ld.w r9, pc[coef_table - . + 4] -+ -+ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7] -+ mulhh.w r5, r4:t, r12:t -+ mulhh.w r6, r0:t, r12:b -+ ld.w r12, pc[coef_table - . + 8] -+ mulhh.w r7, r2:t, r9:t -+ add r6, r5 // tmp2 -+ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 -+ add r7, r5 // tmp3 -+ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31 -+ -+ paddsub.h r5, r3:t, r1:t -+ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1 -+ -+ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13 -+ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12 -+ -+ -+ addhh.w lr, r3:b, r1:b // lr = z4 -+ addhh.w r5, r4:b, lr:b -+ mulhh.w r5, r5:b, r9:b // r5 = z5 -+ -+ ld.w r9, pc[coef_table - . + 12] -+ mulhh.w r4, r4:b, r12:t // r4 = z3 -+ mulhh.w lr, lr:b, r12:b // lr = z4 -+ -+ add r4, r5 -+ add lr, r5 -+ -+ addhh.w r5, r2:b, r1:b // r5 = z2 -+ addhh.w r8, r3:b, r0:b // r8 = z1 -+ -+ -+ mulhh.w r0, r0:b, r9:t // r0 = tmp0 -+ ld.w r12, pc[coef_table - . + 16] -+ mulhh.w r1, r1:b, r9:b // r1 = tmp1 -+ ld.w r9, pc[coef_table - . + 20] -+ mulhh.w r2, r2:b, r12:t // r2 = tmp2 -+ mulhh.w r3, r3:b, r12:b // r3 = tmp3 -+ mulhh.w r8, r8:b, r9:t // r8 = z1 -+ mulhh.w r5, r5:b, r9:b // r5 = z2 -+ -+ -+ add r0, r8 -+ add r0, r4 -+ add r1, r5 -+ add r1, lr -+ add r2, r5 -+ add r2, r4 -+ add r3, r8 -+ add r3, lr -+ -+ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31 -+ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 -+ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31 -+ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 -+ -+ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6] -+ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7] -+ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5] -+ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4] -+ -+ sthh.w r10[0], r4:t, r5:t -+ sthh.w r10[4], r3:t, r2:t -+ sthh.w r10[8], r2:b, r3:b -+ sthh.w r10[12], r5:b, r4:b -+ -+ -+ -+ sub r10, -16 -+ sub loop_cnt, 1 -+ brne FOR_ROW, e -+ -+COLOUMN_TRANSFORM: -+ -+ sub r10, 128 //Set pointer to start of DCT block -+ -+ -+ mov loop_cnt, 8 -+FOR_COLOUMN: -+ ldins.h r3:t,r10[0] // r3:t = dataptr[0] -+ ldins.h r1:t,r10[1*8*2]// r1:t = dataptr[1] -+ ldins.h r2:t,r10[2*8*2]// r2:t = dataptr[2] -+ ldins.h r0:t,r10[5*8*2]// r0:t = dataptr[5] -+ ldins.h r3:b,r10[4*8*2]// r3:b = dataptr[4] -+ ldins.h r1:b,r10[3*8*2]// r1:b = dataptr[3] -+ ldins.h r2:b,r10[6*8*2]// r2:b = dataptr[6] -+ ldins.h r0:b,r10[7*8*2]// r0:b = dataptr[7] -+ -+ or r4, r1, r3 << 16 -+ or r4, r2 -+ or r4, r0 -+ brne AC_COLOUMN //If there are non-zero AC coeffisients perform row-transform -+ -+ lddsp r12, SP[0] // rfp -+ lddsp r9, SP[4] // iinc -+ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 9 -+ ld.d r0, r12[0] -+ sub r10, -2 // Increment the dataptr -+ bfins r3, r3, 16, 16 -+ punpckub.h r2, r1:t -+ padd.h r2, r2, r3 -+ punpckub.h r1, r1:b -+ padd.h r1, r1, r3 -+ packsh.ub r1, r2, r1 -+ punpckub.h r2, r0:t -+ padd.h r2, r2, r3 -+ punpckub.h r0, r0:b -+ padd.h r0, r0, r3 -+ packsh.ub r0, r2, r0 -+ st.d r12[0], r0 -+ add r12, r9 // increment rfp -+ stdsp SP[0], r12 -+ -+ sub loop_cnt, 1//Decrement loop counter -+ brne FOR_COLOUMN//Perform loop one more time if loop_cnt is not zero -+ -+ sub sp, -8 -+ popm r0-r3, r4-r7, pc//Pop back registers and PC -+ -+AC_COLOUMN: -+ -+ ld.w r12, pc[coef_table - .] -+ ld.w r9, pc[coef_table - . + 4] -+ -+ addhh.w r4, r2:t, r2:b -+ mulhh.w r4, r4:b, r12:t // r4 = z1 -+ mulhh.w r5, r2:b, r12:b -+ ld.w r12, pc[coef_table - . + 8] -+ mulhh.w r6, r2:t, r9:t -+ add r5, r4 // r5 = tmp2 -+ add r6, r4 // r6 = tmp3 -+ -+ addhh.w r7, r3:t, r3:b -+ subhh.w r8, r3:t, r3:b -+ -+ lsl r7, CONST_BITS -+ lsl r8, CONST_BITS -+ -+ add r2, r7, r6 // r2 = tmp10 -+ sub r3, r7, r6 // r3 = tmp13 -+ add r4, r8, r5 // r4 = tmp11 -+ sub r5, r8, r5 // r5 = tmp12 -+ -+ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3 -+ addhh.w r7, r6:t, r6:b -+ mulhh.w r7, r7:b, r9:b // r7 = z5 -+ -+ ld.w r9, pc[coef_table - . + 12] -+ mulhh.w r8, r6:b, r12:t // r8 = z3 -+ mulhh.w r6, r6:t, r12:b // r6 = z4 -+ -+ add r8, r7 -+ add r6, r7 -+ -+ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1 -+ -+ mulhh.w r12, r0:b, r9:t // r12 = tmp0 -+ mulhh.w r0, r0:t, r9:b // r0 = tmp1 -+ ld.w r9, pc[coef_table - . + 16] -+ add r12, r8 -+ add r0, r6 -+ -+ ld.w lr, pc[coef_table - . + 20] -+ machh.w r8, r1:b, r9:t // r8 = tmp2 -+ machh.w r6, r1:t, r9:b // r6 = tmp3 -+ mulhh.w r9, r7:b, lr:t // r9 = z1 -+ mulhh.w r7, r7:t, lr:b // r7 = z2 -+ -+ -+ add r12, r9 -+ add r0, r7 -+ add r8, r7 -+ add r6, r9 -+ -+ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0] -+ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7] -+ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1] -+ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6] -+ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2] -+ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5] -+ add r0, r3, r12 // r0 = dataptr[DCTSIZE*3] -+ sub r3, r3, r12 // r3 = dataptr[DCTSIZE*4] -+ -+ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9 -+ -+ packw.sh r1, r1, r6 -+ packw.sh r8, r8, r0 -+ packw.sh r3, r3, r5 -+ packw.sh r4, r4, r2 -+ -+ lddsp r12, SP[0] // rfp -+ lddsp r9, SP[4] // iinc -+ ld.d r6, r12[0] -+ sub r10, -2 // Increment the dataptr -+ punpckub.h r0, r7:t -+ padd.h r1, r1, r0 -+ punpckub.h r0, r7:b -+ padd.h r8, r8, r0 -+ packsh.ub r7, r1, r8 -+ punpckub.h r0, r6:t -+ padd.h r3, r3, r0 -+ punpckub.h r0, r6:b -+ padd.h r4, r4, r0 -+ packsh.ub r6, r3, r4 -+ st.d r12[0], r6 -+ add r12, r9 // increment rfp -+ stdsp SP[0], r12 -+ -+ sub loop_cnt, 1 //Decrement loop counter -+ brne FOR_COLOUMN //Perform loop one more time if loop_cnt is not zero -+ -+ sub sp, -8 -+ popm r0-r3, r4-r7, pc //Pop back registers and PC -+ -+ -+ -+//Coeffisient Table: -+ .align 2 -+coef_table: -+ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602 -+ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869 -+ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447 -+ -+ -+idct_put_avr32: -+ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables -+ -+ //; Give room for some variables on the stack -+ sub sp, 8 -+ stdsp SP[0], r12 // rfp -+ stdsp SP[4], r11 // iinc -+ -+ mov loop_cnt, 8 //Initialize loop counter -+ -+0: -+ -+ ldm r10, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block -+ mov r6, 0 -+#ifdef USE_PREFETCH -+ pref r10[LINE_SIZE] //Prefetch next line -+#endif -+ or r4, r2, r3 << 16 -+ or r4, r1 //Check if all DCT-coeffisients except the DC is zero -+ or r4, r0 -+ brne 1f //If there are non-zero AC coeffisients perform row-transform -+ -+ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5 -+ plsl.h r5, r5, PASS1_BITS -+ mov r4, r5 -+ st.d r10++, r4 -+ st.d r10++, r4 -+ -+ sub loop_cnt, 1 //Decrement loop counter -+ brne 0b //Perform loop one more time if loop_cnt is not zero -+ -+ bral 2f //Perform coloumn transform after row transform is computed -+ -+1: -+ -+ ld.w r12, pc[coef_table_copy - .] -+ ld.w r9, pc[coef_table_copy - . + 4] -+ -+ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7] -+ mulhh.w r5, r4:t, r12:t -+ mulhh.w r6, r0:t, r12:b -+ ld.w r12, pc[coef_table_copy - . + 8] -+ mulhh.w r7, r2:t, r9:t -+ add r6, r5 // tmp2 -+ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 -+ add r7, r5 // tmp3 -+ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31 -+ -+ paddsub.h r5, r3:t, r1:t -+ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1 -+ -+ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13 -+ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12 -+ -+ -+ -+ addhh.w lr, r3:b, r1:b // lr = z4 -+ addhh.w r5, r4:b, lr:b -+ mulhh.w r5, r5:b, r9:b // r5 = z5 -+ -+ ld.w r9, pc[coef_table_copy - . + 12] -+ mulhh.w r4, r4:b, r12:t // r4 = z3 -+ mulhh.w lr, lr:b, r12:b // lr = z4 -+ -+ add r4, r5 -+ add lr, r5 -+ -+ addhh.w r5, r2:b, r1:b // r5 = z2 -+ addhh.w r8, r3:b, r0:b // r8 = z1 -+ -+ -+ mulhh.w r0, r0:b, r9:t // r0 = tmp0 -+ ld.w r12, pc[coef_table_copy - . + 16] -+ mulhh.w r1, r1:b, r9:b // r1 = tmp1 -+ ld.w r9, pc[coef_table_copy - . + 20] -+ mulhh.w r2, r2:b, r12:t // r2 = tmp2 -+ mulhh.w r3, r3:b, r12:b // r3 = tmp3 -+ mulhh.w r8, r8:b, r9:t // r8 = z1 -+ mulhh.w r5, r5:b, r9:b // r5 = z2 -+ -+ -+ add r0, r8 -+ add r0, r4 -+ add r1, r5 -+ add r1, lr -+ add r2, r5 -+ add r2, r4 -+ add r3, r8 -+ add r3, lr -+ -+ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31 -+ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 -+ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31 -+ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 -+ -+ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6] -+ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7] -+ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5] -+ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4] -+ -+ sthh.w r10[0], r4:t, r5:t -+ sthh.w r10[4], r3:t, r2:t -+ sthh.w r10[8], r2:b, r3:b -+ sthh.w r10[12], r5:b, r4:b -+ -+ -+ -+ sub r10, -16 -+ sub loop_cnt, 1 -+ brne 0b -+ -+2: -+ -+ sub r10, 128 //Set pointer to start of DCT block -+ -+ mov loop_cnt, 8 -+ -+0: -+ ldins.h r3:t,r10[0] // r3:t = dataptr[0] -+ ldins.h r1:t,r10[1*8*2]// r1:t = dataptr[1] -+ ldins.h r2:t,r10[2*8*2]// r2:t = dataptr[2] -+ ldins.h r0:t,r10[5*8*2]// r0:t = dataptr[5] -+ ldins.h r3:b,r10[4*8*2]// r3:b = dataptr[4] -+ ldins.h r1:b,r10[3*8*2]// r1:b = dataptr[3] -+ ldins.h r2:b,r10[6*8*2]// r2:b = dataptr[6] -+ ldins.h r0:b,r10[7*8*2]// r0:b = dataptr[7] -+ -+ or r4, r1, r3 << 16 -+ or r4, r2 -+ or r4, r0 -+ brne 1f //If there are non-zero AC coeffisients perform row-transform -+ -+ lddsp r12, SP[0] // rfp -+ lddsp r9, SP[4] // iinc -+ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 31 -+ packw.sh r3, r3, r3 -+ packsh.ub r3, r3, r3 -+ mov r2, r3 -+ st.d r12[0], r2 -+ add r12, r9 // increment rfp -+ sub r10, -2 // Increment the dataptr -+ stdsp SP[0], r12 -+ -+ sub loop_cnt, 1//Decrement loop counter -+ brne 0b //Perform loop one more time if loop_cnt is not zero -+ -+ sub sp, -8 -+ popm r0-r3, r4-r7, pc//Pop back registers and PC -+ -+1: -+ -+ ld.w r12, pc[coef_table_copy - .] -+ ld.w r9, pc[coef_table_copy - . + 4] -+ -+ addhh.w r4, r2:t, r2:b -+ mulhh.w r4, r4:b, r12:t // r4 = z1 -+ mulhh.w r5, r2:b, r12:b -+ ld.w r12, pc[coef_table_copy - . + 8] -+ mulhh.w r6, r2:t, r9:t -+ add r5, r4 // r5 = tmp2 -+ add r6, r4 // r6 = tmp3 -+ -+ addhh.w r7, r3:t, r3:b -+ subhh.w r8, r3:t, r3:b -+ -+ lsl r7, CONST_BITS -+ lsl r8, CONST_BITS -+ -+ add r2, r7, r6 // r2 = tmp10 -+ sub r3, r7, r6 // r3 = tmp13 -+ add r4, r8, r5 // r4 = tmp11 -+ sub r5, r8, r5 // r5 = tmp12 -+ -+ -+ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3 -+ addhh.w r7, r6:t, r6:b -+ mulhh.w r7, r7:b, r9:b // r7 = z5 -+ -+ ld.w r9, pc[coef_table_copy - . + 12] -+ mulhh.w r8, r6:b, r12:t // r8 = z3 -+ mulhh.w r6, r6:t, r12:b // r6 = z4 -+ -+ add r8, r7 -+ add r6, r7 -+ -+ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1 -+ -+ mulhh.w r12, r0:b, r9:t // r12 = tmp0 -+ mulhh.w r0, r0:t, r9:b // r0 = tmp1 -+ ld.w r9, pc[coef_table_copy - . + 16] -+ add r12, r8 -+ add r0, r6 -+ -+ ld.w lr, pc[coef_table_copy - . + 20] -+ machh.w r8, r1:b, r9:t // r8 = tmp2 -+ machh.w r6, r1:t, r9:b // r6 = tmp3 -+ mulhh.w r9, r7:b, lr:t // r9 = z1 -+ mulhh.w r7, r7:t, lr:b // r7 = z2 -+ -+ -+ add r12, r9 -+ add r0, r7 -+ add r8, r7 -+ add r6, r9 -+ -+ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0] -+ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7] -+ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1] -+ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6] -+ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2] -+ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5] -+ add r0, r3, r12 // r0 = dataptr[DCTSIZE*3] -+ sub r3, r3, r12 // r3 = dataptr[DCTSIZE*4] -+ -+ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9 -+ -+ packw.sh r1, r1, r6 -+ packw.sh r8, r8, r0 -+ packw.sh r3, r3, r5 -+ packw.sh r4, r4, r2 -+ -+ packsh.ub r1, r1, r8 -+ packsh.ub r0, r3, r4 -+ lddsp r12, SP[0] // rfp -+ lddsp r9, SP[4] // iinc -+ st.d r12[0], r0 -+ sub r10, -2 // Increment the dataptr -+ add r12, r9 // increment rfp -+ stdsp SP[0], r12 -+ -+ sub loop_cnt, 1 //Decrement loop counter -+ brne 0b //Perform loop one more time if loop_cnt is not zero -+ -+ sub sp, -8 -+ popm r0-r3, r4-r7, pc //Pop back registers and PC -+ -+ -+ -+ .align 2 -+coef_table_copy: -+ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602 -+ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869 -+ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447 -+ -+ -+idct_avr32: -+ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables -+ -+ //; Give room for a temporary block on the stack -+ sub sp, 8*8*2 -+ -+ mov loop_cnt, 8 //Initialize loop counter -+ -+0: -+ -+ ldm r12++, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block -+ mov r6, 0 -+#ifdef USE_PREFETCH -+ pref r12[LINE_SIZE] //Prefetch next line -+#endif -+ or r4, r2, r3 << 16 -+ or r4, r1 //Check if all DCT-coeffisients except the DC is zero -+ or r4, r0 -+ brne 1f //If there are non-zero AC coeffisients perform row-transform -+ -+ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5 -+ plsl.h r5, r5, PASS1_BITS -+ mov r4, r5 -+ st.d sp++, r4 -+ st.d sp++, r4 -+ -+ sub loop_cnt, 1 //Decrement loop counter -+ brne 0b //Perform loop one more time if loop_cnt is not zero -+ -+ bral 2f //Perform coloumn transform after row transform is computed -+ -+1: -+ -+ ld.w r10, pc[coef_table_idct - .] -+ ld.w r9, pc[coef_table_idct - . + 4] -+ -+ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7] -+ mulhh.w r5, r4:t, r10:t -+ mulhh.w r6, r0:t, r10:b -+ ld.w r10, pc[coef_table_idct - . + 8] -+ mulhh.w r7, r2:t, r9:t -+ add r6, r5 // tmp2 -+ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31 -+ add r7, r5 // tmp3 -+ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31 -+ -+ paddsub.h r5, r3:t, r1:t -+ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1 -+ -+ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13 -+ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12 -+ -+ -+ -+ addhh.w lr, r3:b, r1:b // lr = z4 -+ addhh.w r5, r4:b, lr:b -+ mulhh.w r5, r5:b, r9:b // r5 = z5 -+ -+ ld.w r9, pc[coef_table_idct - . + 12] -+ mulhh.w r4, r4:b, r10:t // r4 = z3 -+ mulhh.w lr, lr:b, r10:b // lr = z4 -+ -+ add r4, r5 -+ add lr, r5 -+ -+ addhh.w r5, r2:b, r1:b // r5 = z2 -+ addhh.w r8, r3:b, r0:b // r8 = z1 -+ -+ -+ mulhh.w r0, r0:b, r9:t // r0 = tmp0 -+ ld.w r10, pc[coef_table_idct - . + 16] -+ mulhh.w r1, r1:b, r9:b // r1 = tmp1 -+ ld.w r9, pc[coef_table_idct - . + 20] -+ mulhh.w r2, r2:b, r10:t // r2 = tmp2 -+ mulhh.w r3, r3:b, r10:b // r3 = tmp3 -+ mulhh.w r8, r8:b, r9:t // r8 = z1 -+ mulhh.w r5, r5:b, r9:b // r5 = z2 -+ -+ -+ add r0, r8 -+ add r0, r4 -+ add r1, r5 -+ add r1, lr -+ add r2, r5 -+ add r2, r4 -+ add r3, r8 -+ add r3, lr -+ -+ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31 -+ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31 -+ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31 -+ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31 -+ -+ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6] -+ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7] -+ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5] -+ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4] -+ -+ sthh.w sp[0], r4:t, r5:t -+ sthh.w sp[4], r3:t, r2:t -+ sthh.w sp[8], r2:b, r3:b -+ sthh.w sp[12], r5:b, r4:b -+ -+ -+ -+ sub sp, -16 -+ sub loop_cnt, 1 -+ brne 0b -+ -+2: -+ -+ sub sp, 8*8*2 //Set pointer to start of DCT block -+ sub r12, 8*8*2 //Set pointer to start of DCT block -+ -+ mov loop_cnt, 8 -+ -+0: -+ ldins.h r3:t,sp[0] // r3:t = dataptr[0] -+ ldins.h r1:t,sp[1*8*2]// r1:t = dataptr[1] -+ ldins.h r2:t,sp[2*8*2]// r2:t = dataptr[2] -+ ldins.h r0:t,sp[5*8*2]// r0:t = dataptr[5] -+ ldins.h r3:b,sp[4*8*2]// r3:b = dataptr[4] -+ ldins.h r1:b,sp[3*8*2]// r1:b = dataptr[3] -+ ldins.h r2:b,sp[6*8*2]// r2:b = dataptr[6] -+ ldins.h r0:b,sp[7*8*2]// r0:b = dataptr[7] -+ -+ or r4, r1, r3 << 16 -+ or r4, r2 -+ or r4, r0 -+ brne 1f //If there are non-zero AC coeffisients perform row-transform -+ -+ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 31 -+ packw.sh r3, r3, r3 -+ mov r2, r3 -+ st.d r12++, r2 -+ st.d r12++, r2 -+ sub sp, -2 // Increment the dataptr -+ -+ sub loop_cnt, 1//Decrement loop counter -+ brne 0b //Perform loop one more time if loop_cnt is not zero -+ -+ sub sp, -(8*8*2 - 8) -+ popm r0-r3, r4-r7, pc//Pop back registers and PC -+ -+1: -+ -+ ld.w r10, pc[coef_table_idct - .] -+ ld.w r9, pc[coef_table_idct - . + 4] -+ -+ addhh.w r4, r2:t, r2:b -+ mulhh.w r4, r4:b, r10:t // r4 = z1 -+ mulhh.w r5, r2:b, r10:b -+ ld.w r10, pc[coef_table_idct - . + 8] -+ mulhh.w r6, r2:t, r9:t -+ add r5, r4 // r5 = tmp2 -+ add r6, r4 // r6 = tmp3 -+ -+ addhh.w r7, r3:t, r3:b -+ subhh.w r8, r3:t, r3:b -+ -+ lsl r7, CONST_BITS -+ lsl r8, CONST_BITS -+ -+ add r2, r7, r6 // r2 = tmp10 -+ sub r3, r7, r6 // r3 = tmp13 -+ add r4, r8, r5 // r4 = tmp11 -+ sub r5, r8, r5 // r5 = tmp12 -+ -+ -+ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3 -+ addhh.w r7, r6:t, r6:b -+ mulhh.w r7, r7:b, r9:b // r7 = z5 -+ -+ ld.w r9, pc[coef_table_idct - . + 12] -+ mulhh.w r8, r6:b, r10:t // r8 = z3 -+ mulhh.w r6, r6:t, r10:b // r6 = z4 -+ -+ add r8, r7 -+ add r6, r7 -+ -+ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1 -+ -+ mulhh.w r10, r0:b, r9:t // r10 = tmp0 -+ mulhh.w r0, r0:t, r9:b // r0 = tmp1 -+ ld.w r9, pc[coef_table_idct - . + 16] -+ add r10, r8 -+ add r0, r6 -+ -+ ld.w lr, pc[coef_table_idct - . + 20] -+ machh.w r8, r1:b, r9:t // r8 = tmp2 -+ machh.w r6, r1:t, r9:b // r6 = tmp3 -+ mulhh.w r9, r7:b, lr:t // r9 = z1 -+ mulhh.w r7, r7:t, lr:b // r7 = z2 -+ -+ -+ add r10, r9 -+ add r0, r7 -+ add r8, r7 -+ add r6, r9 -+ -+ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0] -+ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7] -+ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1] -+ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6] -+ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2] -+ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5] -+ add r0, r3, r10 // r0 = dataptr[DCTSIZE*3] -+ sub r3, r3, r10 // r3 = dataptr[DCTSIZE*4] -+ -+ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9 -+ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9 -+ -+ packw.sh r7, r1, r6 -+ packw.sh r6, r8, r0 -+ packw.sh r5, r3, r5 -+ packw.sh r4, r4, r2 -+ -+ stm r12, r4-r7 -+ sub sp, -2 // Increment the dataptr -+ sub r12, -16 -+ -+ sub loop_cnt, 1 //Decrement loop counter -+ brne 0b //Perform loop one more time if loop_cnt is not zero -+ -+ sub sp, -(8*8*2 - 8) -+ popm r0-r3, r4-r7, pc //Pop back registers and PC -+ -+ -+ -+ .align 2 -+coef_table_idct: -+ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602 -+ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869 -+ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447 -+ -diff --git a/libavcodec/avr32/mc.S b/libavcodec/avr32/mc.S -new file mode 100644 -index 0000000..07a002d ---- /dev/null -+++ b/libavcodec/avr32/mc.S -@@ -0,0 +1,434 @@ -+/* -+ * Copyright (c) 2007 Atmel Corporation. All rights reserved. -+ * -+ * 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 ATMEL may not be used to endorse or promote products -+ * derived from this software without specific prior written -+ * permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL -+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -+ * DAMAGE. -+ */ -+ -+ -+ /* Macro for masking the lowest bit of each byte in a -+ packed word */ -+ .macro packedmask1 reg, round -+ .if \round -+ and \reg, \reg, r8 >> 1 -+ .else -+ and \reg, r8 -+ .endif -+ .endm -+ -+ /* Macro for 8 pixel wide horizontal and vertical interpolation functions */ -+ .macro pixels8_hv round, put -+ -+ -+ pushm r0-r7, lr -+ -+ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ -+ -+ /* Rounding immediate */ -+ .if \round -+ mov r8, lo(0x02020202) -+ orh r8, hi(0x02020202) -+ .else -+ mov r8, lo(0x01010101) -+ orh r8, hi(0x01010101) -+ .endif -+ mov r7, 2 -+ -+ /* Pixel naming convention : -+ -+ |-----------------------------------------------------| -+ | s00 | s01 | s02 | s03 | s04 | s05 | s06 | s07 | s08 | -+ |----d00---d01---d02---d03---d04---d05---d06---d07----| -+ | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | s18 | -+ |-----------------------------------------------------| -+ */ -+1: -+ ld.w r0, r11[0] // r0 = { s00, s01, s02, s03 } -+ ld.w r1, r11[1] // r1 = { s01, s02, s03, s04 } -+ mov lr, r9 -+ eor r2, r0, r1 -+ packedmask1 r2, \round -+ add r2, r8 -+ -+ paddh.ub r0, r0, r1 // r0 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} -+ -+ add r11, r10 // pixels += line_size -+ ld.w r1, r11[0] // r1 = { s10, s11, s12, s13 } -+ ld.w r3, r11[1] // r3 = { s11, s12, s13, s14 } -+0: -+ eor r5, r1, r3 -+ packedmask1 r5, \round -+ add r2, r5 -+ -+ paddh.ub r1, r1, r3 // r1 = {(s10+s11)/2,(s11+s12)/2,(s12+s13)/2,(s13+s14)/2} -+ eor r6, r0, r1 -+ packedmask1 r6, \round -+ add r2, r2, r6 << 1 -+ -+ ld.w r3, r11[r10] // r3 = { s00, s01, s02, s03 } -+ add r11, r10 // pixels += line_size -+ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 } -+ -+ paddh.ub r0, r0, r1 -+ plsr.b r2, r2, 2 -+ padd.b r0, r0, r2 // r0 = { d00, d01, d02, d03 } -+ -+ /* Next row */ -+ .if \put -+ eor r2, r3, r4 -+ packedmask1 r2, \round -+ add r2, r8 -+ .else -+ ld.w r6, r12[0] -+ eor r2, r3, r4 -+ packedmask1 r2, \round -+ add r2, r8 -+ pavg.ub r0, r0, r6 -+ .endif -+ st.w r12[0], r0 // Put data into the block -+ -+ add r5, r2 -+ paddh.ub r0, r3, r4 // r0 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} -+ -+ eor r6, r0, r1 -+ packedmask1 r6, \round -+ add r5, r5, r6 << 1 -+ -+ .if \put -+ paddh.ub r1, r0, r1 -+ plsr.b r5, r5, 2 -+ padd.b r1, r1, r5 // r1 = { d10, d11, d12, d13 } -+ .else -+ ld.w r3, r12[r10] -+ paddh.ub r1, r0, r1 -+ plsr.b r5, r5, 2 -+ padd.b r1, r1, r5 // r1 = { d10, d11, d12, d13 } -+ pavg.ub r1, r1, r3 -+ .endif -+ -+ st.w r12[r10], r1 // Put data into the block -+ -+ -+ ld.w r1, r11[r10] // r1 = { s10, s11, s12, s13 } -+ add r11, r10 // pixels += line_size -+ ld.w r3, r11[1] // r3 = { s11, s12, s13, s14 } -+ add r12, r12, r10 << 1 // block += 2*line_size -+ sub lr, 2 -+ brne 0b -+ -+ mul r0, r10, r9 // r0 = line_size * h -+ rsub r0, r0, 4 // r0 = 4 - (line_size * h) -+ add r11, r0 -+ sub r11, r10 // pixels += 4 - (line_size * (h+1)) -+ add r12, r0 // pixels += 4 - (line_size * (h)) -+ sub r7, 1 -+ brne 1b -+ -+ popm r0-r7, pc -+ .endm -+ -+ -+ /* Macro for 8 pixel wide vertical interpolation functions */ -+ -+ .macro pixels8_v round, put -+ pushm r4-r7,lr -+ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ -+ -+ /* -+ Pixel Naming Convention : -+ |-----------------------------------------------| -+ | s00 | s01 | s02 | s03 | s04 | s05 | s06 | s07 | -+ |-d00---d01---d02---d03---d04---d05---d06---d07-| -+ | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | -+ |-----------------------------------------------| -+ */ -+ ld.w r8, r11[r10] // r8 = { s10, s11, s12, s13 } -+ ld.w lr, r11++ // lr = { s00, s01, s02, s03 }, src += 4 -+ ld.w r7, r11[0] // r7 = { s04, s05, s06, s07 } -+ ld.w r6, r11[r10] // r6 = { s14, s15, s16, s17 } -+ sub r10, 4 // stride -= 4 -+ add r11, r11, r10 << 1 // src += 2*stride -+ sub r11, -4 // src += 4 -+ -+0: -+ .if \round -+ pavg.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} -+ pavg.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} -+ .else -+ paddh.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} -+ paddh.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} -+ .endif -+ -+ .if \put -+ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } -+ ld.w lr, r11++ // lr = { s10, s11, s12, s13 }, src += 4 -+ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } -+ ld.w r7, r11[0] // r7 = { s14, s15, s16, s17 } -+ .else -+ ld.w lr, r12[0] -+ ld.w r7, r12[4] -+ pavg.ub r5, r5, lr -+ pavg.ub r4, r4, r7 -+ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } -+ ld.w lr, r11++ // lr = { s10, s11, s12, s13 }, src += 4 -+ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } -+ ld.w r7, r11[0] // r7 = { s14, s15, s16, s17 } -+ .endif -+ add r11, r10 // src += stride -+#ifdef USE_PREFETCH -+ pref r11[0] -+#endif -+ add r12, r10 // dst += stride -+ -+ .if \round -+ pavg.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} -+ pavg.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} -+ .else -+ paddh.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2} -+ paddh.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2} -+ .endif -+ .if \put -+ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } -+ ld.w r8, r11++ // r8 = { s10, s11, s12, s13 }, src += 4 -+ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } -+ ld.w r6, r11[0] // r6 = { s14, s15, s16, s17 } -+ .else -+ ld.w r8, r12[0] -+ ld.w r6, r12[4] -+ pavg.ub r5, r5, r8 -+ pavg.ub r4, r4, r6 -+ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 } -+ ld.w r8, r11++ // r8 = { s10, s11, s12, s13 }, src += 4 -+ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 } -+ ld.w r6, r11[0] // r6 = { s14, s15, s16, s17 } -+ .endif -+ -+ add r11, r10 // src += stride -+#ifdef USE_PREFETCH -+ pref r11[0] -+#endif -+ add r12, r10 // dst += stride -+ sub r9, 2 -+ brne 0b -+ -+ popm r4-r7,pc -+ .endm -+ -+ /* Macro for 8 pixel wide horizontal interpolation functions */ -+ -+ .macro pixels8_h round, put -+ pushm r4-r7, lr -+ -+ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ -+ /* -+ Pixel Naming Convention: -+ |--------------------------------------------------------------------| -+ | s00 d00 s01 d01 s02 d02 s03 d03 s04 d04 s05 d05 s06 d06 s07 d07 s08| -+ |------|-------|-------|-------|-------|-------|-------|-------|-----| -+ | s10 d10 s11 d11 s12 d12 s13 d13 s14 d14 s15 d15 s16 d16 s17 d17 s18| -+ |--------------------------------------------------------------------| -+ */ -+ -+ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 } -+ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 } -+ ld.w r7, r11[4] // r7 = { s04, s05, s06, s07 } -+ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 } -+ add r11, r10 // src += stride -+ -+0: -+ .if \round -+ pavg.ub lr, r8, lr // lr = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} -+ pavg.ub r7, r6, r7 // r7 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} -+ .else -+ paddh.ub lr, r8, lr // lr = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} -+ paddh.ub r7, r6, r7 // r7 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} -+ .endif -+ .if \put -+ ld.w r5, r11[0] // r5 = { s00, s01, s02, s03 } -+ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 } -+ .else -+ ld.w r8, r12[0] -+ ld.w r6, r12[4] -+ ld.w r5, r11[0] // r5 = { s00, s01, s02, s03 } -+ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 } -+ pavg.ub lr, lr, r8 -+ pavg.ub r7, r7, r6 -+ .endif -+ st.w r12[0], lr // dst = { d00, d01, d02, d03 } -+ st.w r12[4], r7 // dst = { d04, d05, d06, d07 } -+ ld.w r8, r11[4] // r8 = { s04, s05, s06, s07 } -+ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 } -+ add r11, r10 // src += stride -+#ifdef USE_PREFETCH -+ pref r11[0] -+#endif -+ add r12, r10 // dst += stride -+ -+ .if \round -+ pavg.ub r5, r4, r5 // r5 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} -+ pavg.ub r4, r6, r8 // r4 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} -+ .else -+ paddh.ub r5, r4, r5 // r5 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2} -+ paddh.ub r4, r6, r8 // r4 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2} -+ .endif -+ .if \put -+ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 } -+ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 } -+ .else -+ ld.w r7, r12[0] -+ ld.w r6, r12[4] -+ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 } -+ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 } -+ pavg.ub r5, r5, r7 -+ pavg.ub r4, r4, r6 -+ .endif -+ st.w r12[0], r5 // dst = { d00, d01, d02, d03 } -+ st.w r12[4], r4 // dst = { d04, d05, d06, d07 } -+ ld.w r7, r11[4] // r7 = { s04, s05, s06, s07 } -+ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 } -+ add r11, r10 // src += stride -+#ifdef USE_PREFETCH -+ pref r11[0] -+#endif -+ add r12, r10 // dst += stride -+ sub r9, 2 -+ brne 0b -+ -+ popm r4-r7, pc -+ .endm -+ -+ /* Macro for 8 pixel wide copy functions */ -+ .macro pixels8 put -+ stm --sp, r3-r7,lr -+ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */ -+ mov lr, r9 -+ sub r3, r10, 2 // stride2 = stride - 2 -+0: -+ .if \put -+ ld.w r9, r11[r10] // r9 = { s10, s11, s12, s13 } -+ ld.w r7, r11++ // r7 = { s00, s01, s02, s03 }, src += 4 -+ ld.w r6, r11[0] // r6 = { s04, s05, s06, s07 } -+ ld.w r8, r11[r10] // r8 = { s14, s15, s16, s17 } -+ .else -+ ld.w r9, r11[r10] // r9 = { s10, s11, s12, s13 } -+ ld.d r4, r12[0] -+ ld.w r7, r11++ // r7 = { s00, s01, s02, s03 }, src += 4 -+ ld.w r6, r11[0] // r6 = { s04, s05, s06, s07 } -+ ld.w r8, r11[r10] // r8 = { s14, s15, s16, s17 } -+ pavg.ub r6, r6, r4 -+ pavg.ub r7, r7, r5 -+ ld.d r4, r12[r10] -+ .endif -+ st.d r12, r6 // *dst = { s00, s01, s02, s03, s04, s05, s06, s07 } -+ add r11, r11, r3 << 1 // src += stride2 * 2 -+ .ifeq \put -+ pavg.ub r8, r8, r4 -+ pavg.ub r9, r9, r5 -+ .endif -+ st.d r12[r10 << 0], r8 // *(dst + stride) = { s10, s11, s12, s13, s14, s15, s16, s17 } -+ add r12, r12, r10 << 1 // dst += 2*stride -+ sub lr, 2 -+ brne 0b -+ ldm sp++, r3-r7,pc -+ -+ .endm -+ -+ .global put_no_rnd_pixels8_hv_avr32 -+ .text -+put_no_rnd_pixels8_hv_avr32: -+ pixels8_hv 0, 1 -+ -+ .global put_pixels8_hv_avr32 -+ .text -+put_pixels8_hv_avr32: -+ pixels8_hv 1, 1 -+ -+ .global avg_no_rnd_pixels8_hv_avr32 -+ .text -+avg_no_rnd_pixels8_hv_avr32: -+ pixels8_hv 0, 0 -+ -+ .global avg_pixels8_hv_avr32 -+ .text -+avg_pixels8_hv_avr32: -+ pixels8_hv 1, 0 -+ -+ .global put_no_rnd_pixels8_v_avr32 -+ .text -+put_no_rnd_pixels8_v_avr32: -+ pixels8_v 0, 1 -+ -+ .global put_pixels8_v_avr32 -+ .text -+put_pixels8_v_avr32: -+ pixels8_v 1, 1 -+ -+ .global avg_no_rnd_pixels8_v_avr32 -+ .text -+avg_no_rnd_pixels8_v_avr32: -+ pixels8_v 0, 0 -+ -+ .global avg_pixels8_v_avr32 -+ .text -+avg_pixels8_v_avr32: -+ pixels8_v 1, 0 -+ -+ .global put_no_rnd_pixels8_h_avr32 -+ .text -+put_no_rnd_pixels8_h_avr32: -+ pixels8_h 0, 1 -+ -+ .global put_pixels8_h_avr32 -+ .text -+put_pixels8_h_avr32: -+ pixels8_h 1, 1 -+ -+ .global avg_no_rnd_pixels8_h_avr32 -+ .text -+avg_no_rnd_pixels8_h_avr32: -+ pixels8_h 0, 0 -+ -+ .global avg_pixels8_h_avr32 -+ .text -+avg_pixels8_h_avr32: -+ pixels8_h 1, 0 -+ -+ .global put_pixels8_avr32 -+ .global put_no_rnd_pixels8_avr32 -+ .text -+put_pixels8_avr32: -+put_no_rnd_pixels8_avr32: -+ pixels8 1 -+ -+ .global avg_no_rnd_pixels8_avr32 -+ .global avg_pixels8_avr32 -+ .text -+avg_pixels8_avr32: -+avg_no_rnd_pixels8_avr32: -+ pixels8 0 -diff --git a/libavcodec/avr32/pico.h b/libavcodec/avr32/pico.h -new file mode 100644 -index 0000000..32201ba ---- /dev/null -+++ b/libavcodec/avr32/pico.h -@@ -0,0 +1,260 @@ -+/* -+ * Copyright (c) 2007 Atmel Corporation. All rights reserved. -+ * -+ * 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 ATMEL may not be used to endorse or promote products -+ * derived from this software without specific prior written -+ * permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL -+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -+ * DAMAGE. -+ */ -+#ifndef __PICO_H__ -+#define __PICO_H__ -+ -+ -+ -+/* Coprocessor Number */ -+#define PICO_CPNO 1 -+ -+/* Pixel Coprocessor Register file */ -+#define PICO_REGVECT_INPIX2 cr0 -+#define PICO_REGVECT_INPIX1 cr1 -+#define PICO_REGVECT_INPIX0 cr2 -+#define PICO_REGVECT_OUTPIX2 cr3 -+#define PICO_REGVECT_OUTPIX1 cr4 -+#define PICO_REGVECT_OUTPIX0 cr5 -+#define PICO_REGVECT_COEFF0_A cr6 -+#define PICO_REGVECT_COEFF0_B cr7 -+#define PICO_REGVECT_COEFF1_A cr8 -+#define PICO_REGVECT_COEFF1_B cr9 -+#define PICO_REGVECT_COEFF2_A cr10 -+#define PICO_REGVECT_COEFF2_B cr11 -+#define PICO_REGVECT_VMU0_OUT cr12 -+#define PICO_REGVECT_VMU1_OUT cr13 -+#define PICO_REGVECT_VMU2_OUT cr14 -+#define PICO_REGVECT_CONFIG cr15 -+ -+#define PICO_INPIX2 0 -+#define PICO_INPIX1 1 -+#define PICO_INPIX0 2 -+#define PICO_OUTPIX2 3 -+#define PICO_OUTPIX1 4 -+#define PICO_OUTPIX0 5 -+#define PICO_COEFF0_A 6 -+#define PICO_COEFF0_B 7 -+#define PICO_COEFF1_A 8 -+#define PICO_COEFF1_B 9 -+#define PICO_COEFF2_A 10 -+#define PICO_COEFF2_B 11 -+#define PICO_VMU0_OUT 12 -+#define PICO_VMU1_OUT 13 -+#define PICO_VMU2_OUT 14 -+#define PICO_CONFIG 15 -+ -+/* Config Register */ -+#define PICO_COEFF_FRAC_BITS_OFFSET 0 -+#define PICO_COEFF_FRAC_BITS_SIZE 4 -+#define PICO_OFFSET_FRAC_BITS_OFFSET 4 -+#define PICO_OFFSET_FRAC_BITS_SIZE 4 -+#define PICO_INPUT_MODE_OFFSET 8 -+#define PICO_INPUT_MODE_SIZE 2 -+#define PICO_OUTPUT_MODE_OFFSET 10 -+#define PICO_OUTPUT_MODE_SIZE 1 -+ -+struct pico_config_t { -+ unsigned int : 32 - PICO_OUTPUT_MODE_OFFSET - PICO_OUTPUT_MODE_SIZE; -+ unsigned int output_mode : PICO_OUTPUT_MODE_SIZE; -+ unsigned int input_mode : PICO_INPUT_MODE_SIZE; -+ unsigned int offset_frac_bits : PICO_OFFSET_FRAC_BITS_SIZE; -+ unsigned int coeff_frac_bits : PICO_COEFF_FRAC_BITS_SIZE; -+ int vmu2_out; -+ int vmu1_out; -+ int vmu0_out; -+ short coeff2_2; -+ short coeff2_3; -+ short coeff2_0; -+ short coeff2_1; -+ short coeff1_2; -+ short coeff1_3; -+ short coeff1_0; -+ short coeff1_1; -+ short coeff0_2; -+ short coeff0_3; -+ short coeff0_0; -+ short coeff0_1; -+}; -+ -+ -+#define PICO_COEFF_FRAC_BITS(x) (x << PICO_COEFF_FRAC_BITS_OFFSET) -+#define PICO_OFFSET_FRAC_BITS(x) (x << PICO_OFFSET_FRAC_BITS_OFFSET) -+#define PICO_INPUT_MODE(x) (x << PICO_INPUT_MODE_OFFSET) -+#define PICO_OUTPUT_MODE(x) (x << PICO_OUTPUT_MODE_OFFSET) -+ -+#define GET_PICO_COEFF_FRAC_BITS(x) ((x >> PICO_COEFF_FRAC_BITS_OFFSET)&((1 << PICO_COEFF_FRAC_BITS_SIZE)-1)) -+#define GET_PICO_OFFSET_FRAC_BITS(x) ((x >> PICO_OFFSET_FRAC_BITS_OFFSET)&((1 << PICO_OFFSET_FRAC_BITS_SIZE)-1)) -+#define GET_PICO_INPUT_MODE(x) ((x >> PICO_INPUT_MODE_OFFSET)&((1 << PICO_INPUT_MODE_SIZE)-1)) -+#define GET_PICO_OUTPUT_MODE(x) ((x >> PICO_OUTPUT_MODE_OFFSET)&((1 << PICO_OUTPUT_MODE_SIZE)-1)) -+ -+enum pico_input_mode { PICO_TRANSFORMATION_MODE, -+ PICO_HOR_FILTER_MODE, -+ PICO_VERT_FILTER_MODE }; -+ -+enum pico_output_mode { PICO_PACKED_MODE, -+ PICO_PLANAR_MODE }; -+ -+/* Bits in coefficients */ -+#define PICO_COEFF_BITS 12 -+ -+/* Operation bits */ -+#define PICO_MATRIX (0) -+#define PICO_USE_ACC (1 << 2) -+#define PICO_SINGLE_VECTOR (1 << 3) -+ -+ -+#define __str(x...) #x -+#define __xstr(x...) __str(x) -+ -+#define PICO_PUT_W(pico_reg, x) \ -+ __builtin_mvrc_w(PICO_CPNO, pico_reg, x); -+#define PICO_GET_W(pico_reg) \ -+ __builtin_mvcr_w(PICO_CPNO, pico_reg) -+ -+#define PICO_MVCR_W(x, pico_reg) \ -+ asm ("mvcr.w\tcp" __xstr(PICO_CPNO) ", %0, cr" __xstr(pico_reg) : "=r"(x)); -+ -+#define PICO_MVRC_W(pico_reg, x) \ -+ asm ("mvrc.w\tcp" __xstr(PICO_CPNO) ", cr" __xstr(pico_reg) ", %0" :: "r"(x)); -+ -+#define PICO_PUT_D(pico_reg, x) \ -+ __builtin_mvrc_d(PICO_CPNO, pico_reg, x); -+#define PICO_GET_D(pico_reg) \ -+ __builtin_mvcr_d(PICO_CPNO, pico_reg) -+ -+#define PICO_MVCR_D(x, pico_reg) \ -+ asm volatile ("mvcr.d\tcp" __xstr(PICO_CPNO) ", %0, cr" __xstr(pico_reg) : "=r"(x)); -+#define PICO_MVRC_D(pico_reg, x) \ -+ asm volatile ("mvrc.d\tcp" __xstr(PICO_CPNO) ", cr" __xstr(pico_reg) ", %0" :: "r"(x)); -+ -+#define PICO_STCM_W(ptr, pico_regs...) \ -+ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); -+#define PICO_STCM_D(ptr, pico_regs...) \ -+ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); -+ -+#define PICO_STCM_W_DEC(ptr, pico_regs...) \ -+ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); -+#define PICO_STCM_D_DEC(ptr, pico_regs...) \ -+ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); -+ -+#define PICO_LDCM_W(ptr, pico_regs...) \ -+ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); -+#define PICO_LDCM_D(ptr, pico_regs...) \ -+ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); -+ -+#define PICO_LDCM_W_INC(ptr, pico_regs...) \ -+ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); -+#define PICO_LDCM_D_INC(ptr, pico_regs...) \ -+ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); -+ -+#define PICO_OP(op, dst_addr, addr0, addr1, addr2) \ -+ __builtin_cop(PICO_CPNO, addr0, addr1, addr2, op | dst_addr); -+ -+static inline void set_pico_config(struct pico_config_t *config){ -+ PICO_LDCM_D(config, -+ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B, -+ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B, -+ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B, -+ PICO_REGVECT_VMU0_OUT, PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT, PICO_REGVECT_CONFIG); -+} -+ -+static inline void get_pico_config(struct pico_config_t *config){ -+ PICO_STCM_D(config, -+ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B, -+ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B, -+ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B, -+ PICO_REGVECT_VMU0_OUT, PICO_REGVECT_VMU1_OUT, -+ PICO_REGVECT_VMU2_OUT, PICO_REGVECT_CONFIG); -+} -+ -+static inline void dump_pico_config(){ -+ struct pico_config_t pico_config; -+ char *input_mode, *output_mode; -+ get_pico_config(&pico_config); -+ -+ -+ av_log(NULL, AV_LOG_INFO, "Dumping pico configuration:\n\n"); -+ av_log(NULL, AV_LOG_INFO, "\tcoeff_frac_bits = %d\n", pico_config.coeff_frac_bits); -+ av_log(NULL, AV_LOG_INFO, "\toffset_frac_bits = %d\n", pico_config.offset_frac_bits); -+ -+ switch ( pico_config.input_mode ){ -+ case PICO_TRANSFORMATION_MODE: -+ input_mode = "Transformation Mode"; -+ break; -+ case PICO_HOR_FILTER_MODE: -+ input_mode = "Horisontal Filter Mode"; -+ break; -+ case PICO_VERT_FILTER_MODE: -+ input_mode = "Vertical Filter Mode"; -+ break; -+ default: -+ input_mode = "Unknown Mode!!"; -+ break; -+ } -+ av_log(NULL, AV_LOG_INFO, "\tinput_mode = %s\n", input_mode); -+ -+ switch ( pico_config.output_mode ){ -+ case PICO_PLANAR_MODE: -+ output_mode = "Planar Mode"; -+ break; -+ case PICO_PACKED_MODE: -+ output_mode = "Packed Mode"; -+ break; -+ default: -+ output_mode = "Unknown Mode!!"; -+ break; -+ } -+ -+ av_log(NULL, AV_LOG_INFO, "\toutput_mode = %s\n", output_mode); -+ -+ av_log(NULL, AV_LOG_INFO, "\tCoeff0_0 = %f\n", (float)pico_config.coeff0_0/(float)(1 << pico_config.coeff_frac_bits)); -+ av_log(NULL, AV_LOG_INFO, "\tCoeff0_1 = %f\n", (float)pico_config.coeff0_1/(float)(1 << pico_config.coeff_frac_bits)); -+ av_log(NULL, AV_LOG_INFO, "\tCoeff0_2 = %f\n", (float)pico_config.coeff0_2/(float)(1 << pico_config.coeff_frac_bits)); -+ av_log(NULL, AV_LOG_INFO, "\tCoeff0_3 = %f\n", (float)pico_config.coeff0_3/(float)(1 << pico_config.offset_frac_bits)); -+ -+ av_log(NULL, AV_LOG_INFO, "\tCoeff1_0 = %f\n", (float)pico_config.coeff1_0/(float)(1 << pico_config.coeff_frac_bits)); -+ av_log(NULL, AV_LOG_INFO, "\tCoeff1_1 = %f\n", (float)pico_config.coeff1_1/(float)(1 << pico_config.coeff_frac_bits)); -+ av_log(NULL, AV_LOG_INFO, "\tCoeff1_2 = %f\n", (float)pico_config.coeff1_2/(float)(1 << pico_config.coeff_frac_bits)); -+ av_log(NULL, AV_LOG_INFO, "\tCoeff1_3 = %f\n", (float)pico_config.coeff1_3/(float)(1 << pico_config.offset_frac_bits)); -+ -+ av_log(NULL, AV_LOG_INFO, "\tCoeff2_0 = %f\n", (float)pico_config.coeff2_0/(float)(1 << pico_config.coeff_frac_bits)); -+ av_log(NULL, AV_LOG_INFO, "\tCoeff2_1 = %f\n", (float)pico_config.coeff2_1/(float)(1 << pico_config.coeff_frac_bits)); -+ av_log(NULL, AV_LOG_INFO, "\tCoeff2_2 = %f\n", (float)pico_config.coeff2_2/(float)(1 << pico_config.coeff_frac_bits)); -+ av_log(NULL, AV_LOG_INFO, "\tCoeff2_3 = %f\n", (float)pico_config.coeff2_3/(float)(1 << pico_config.offset_frac_bits)); -+} -+ -+ -+ -+#endif -+ -diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h -index 26b4f8d..1f8fabf 100644 ---- a/libavcodec/bitstream.h -+++ b/libavcodec/bitstream.h -@@ -171,7 +171,7 @@ typedef struct RL_VLC_ELEM { - #endif - - /* used to avoid missaligned exceptions on some archs (alpha, ...) */ --#if defined(ARCH_X86) || defined(ARCH_X86_64) -+#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_AVR32) - # define unaligned16(a) (*(const uint16_t*)(a)) - # define unaligned32(a) (*(const uint32_t*)(a)) - # define unaligned64(a) (*(const uint64_t*)(a)) -@@ -813,6 +813,44 @@ void free_vlc(VLC *vlc); - * if the vlc code is invalid and max_depth>1 than the number of bits removed - * is undefined - */ -+ -+#if defined(ARCH_AVR32) -+#define GET_VLC(code, name, gb, table, bits, max_depth)\ -+{\ -+ int n, index, nb_bits;\ -+ union { VLC_TYPE vlc[2];\ -+ uint32_t u32; } table_elem;\ -+\ -+ index= SHOW_UBITS(name, gb, bits);\ -+ table_elem.u32 = unaligned32(&table[index]); \ -+ code = table_elem.vlc[0];\ -+ n = table_elem.vlc[1];\ -+\ -+ if(max_depth > 1 && n < 0 ){\ -+ LAST_SKIP_BITS(name, gb, bits)\ -+ UPDATE_CACHE(name, gb)\ -+\ -+ nb_bits = -n;\ -+\ -+ index= SHOW_UBITS(name, gb, nb_bits) + code;\ -+ table_elem.u32 = unaligned32(&table[index]); \ -+ code = table_elem.vlc[0];\ -+ n = table_elem.vlc[1];\ -+ if(max_depth > 2 && n < 0){\ -+ LAST_SKIP_BITS(name, gb, nb_bits)\ -+ UPDATE_CACHE(name, gb)\ -+\ -+ nb_bits = -n;\ -+\ -+ index= SHOW_UBITS(name, gb, nb_bits) + code;\ -+ code = table[index][0];\ -+ n = table[index][1];\ -+ }\ -+ }\ -+ SKIP_BITS(name, gb, n)\ -+} -+ -+#else - #define GET_VLC(code, name, gb, table, bits, max_depth)\ - {\ - int n, index, nb_bits;\ -@@ -821,7 +859,7 @@ void free_vlc(VLC *vlc); - code = table[index][0];\ - n = table[index][1];\ - \ -- if(max_depth > 1 && n < 0){\ -+ if(max_depth > 1 && n < 0 ){\ - LAST_SKIP_BITS(name, gb, bits)\ - UPDATE_CACHE(name, gb)\ - \ -@@ -843,7 +881,38 @@ void free_vlc(VLC *vlc); - }\ - SKIP_BITS(name, gb, n)\ - } -+#endif - -+#if defined(ARCH_AVR32) -+#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\ -+{\ -+ int n, index, nb_bits;\ -+ union { RL_VLC_ELEM vlc;\ -+ uint32_t u32; } table_elem;\ -+\ -+ index= SHOW_UBITS(name, gb, bits);\ -+ table_elem.u32 = unaligned32(&table[index]); \ -+ level = table_elem.vlc.level;\ -+ n = table_elem.vlc.len;\ -+\ -+ if(max_depth > 1 && n < 0 ){\ -+ SKIP_BITS(name, gb, bits)\ -+ if(need_update){\ -+ UPDATE_CACHE(name, gb)\ -+ }\ -+\ -+ nb_bits = -n;\ -+\ -+ index= SHOW_UBITS(name, gb, nb_bits) + level;\ -+ table_elem.u32 = unaligned32(&table[index]); \ -+ level = table_elem.vlc.level;\ -+ n = table_elem.vlc.len;\ -+ }\ -+ run= table_elem.vlc.run;\ -+ SKIP_BITS(name, gb, n)\ -+} -+ -+#else - #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\ - {\ - int n, index, nb_bits;\ -@@ -852,7 +921,7 @@ void free_vlc(VLC *vlc); - level = table[index].level;\ - n = table[index].len;\ - \ -- if(max_depth > 1 && n < 0){\ -+ if(max_depth > 1 && n < 0 ){\ - SKIP_BITS(name, gb, bits)\ - if(need_update){\ - UPDATE_CACHE(name, gb)\ -@@ -867,7 +936,7 @@ void free_vlc(VLC *vlc); - run= table[index].run;\ - SKIP_BITS(name, gb, n)\ - } -- -+#endif - - /** - * parses a vlc code, faster then get_vlc() -diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c -index 56c42b9..8fc10c6 100644 ---- a/libavcodec/dsputil.c -+++ b/libavcodec/dsputil.c -@@ -4197,6 +4197,9 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx) - #ifdef ARCH_BFIN - dsputil_init_bfin(c,avctx); - #endif -+#ifdef ARCH_AVR32 -+ dsputil_init_avr32(c,avctx); -+#endif - - for(i=0; i<64; i++){ - if(!c->put_2tap_qpel_pixels_tab[0][i]) -diff --git a/libavcodec/h264.c b/libavcodec/h264.c -index 865e80a..8f7c3f1 100644 ---- a/libavcodec/h264.c -+++ b/libavcodec/h264.c -@@ -3258,7 +3258,12 @@ static void free_tables(H264Context *h){ - - static void init_dequant8_coeff_table(H264Context *h){ - int i,q,x; -+#ifdef ARCH_AVR32 -+ const int transpose = 0; -+#else - const int transpose = (h->s.dsp.h264_idct8_add != ff_h264_idct8_add_c); //FIXME ugly -+#endif -+ - h->dequant8_coeff[0] = h->dequant8_buffer[0]; - h->dequant8_coeff[1] = h->dequant8_buffer[1]; - -@@ -3281,7 +3286,13 @@ static void init_dequant8_coeff_table(H264Context *h){ - - static void init_dequant4_coeff_table(H264Context *h){ - int i,j,q,x; -+ // Yes this is ugly as hell.... -+#ifdef ARCH_AVR32 -+ const int transpose = 0; -+#else - const int transpose = (h->s.dsp.h264_idct_add != ff_h264_idct_add_c); //FIXME ugly -+#endif -+ - for(i=0; i<6; i++ ){ - h->dequant4_coeff[i] = h->dequant4_buffer[i]; - for(j=0; jdsp.h264_idct_add == ff_h264_idct_add_c){ //FIXME little ugly -+#endif - memcpy(h->zigzag_scan, zigzag_scan, 16*sizeof(uint8_t)); - memcpy(h-> field_scan, field_scan, 16*sizeof(uint8_t)); - }else{ -diff --git a/libavutil/common.h b/libavutil/common.h -index 3ae5971..7e52b90 100644 ---- a/libavutil/common.h -+++ b/libavutil/common.h -@@ -283,23 +283,39 @@ static inline int mid_pred(int a, int b, int c) - * @param amax maximum value of the clip range - * @return cliped value - */ -+#if defined(ARCH_AVR32) -+#define clip(a, amin, amax) \ -+ ({ int __tmp__; \ -+ asm ("min\t%0, %1, %2\n" \ -+ "max\t%0, %0, %3\n" \ -+ : "=&r"(__tmp__) : "r"(a), "r"(amax), "r"(amin)); \ -+ __tmp__; }) -+#else - static inline int clip(int a, int amin, int amax) - { - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; - } -+#endif - - /** - * clip a signed integer value into the 0-255 range - * @param a value to clip - * @return cliped value - */ -+#if defined(ARCH_AVR32) -+#define clip_uint8(a) \ -+ ({ int __tmp__ = a; \ -+ asm ("satu\t%0 >> 0, 8" : "+r"(__tmp__)); \ -+ __tmp__; }) -+#else - static inline uint8_t clip_uint8(int a) - { - if (a&(~255)) return (-a)>>31; - else return a; - } -+#endif - - /* math */ - int64_t ff_gcd(int64_t a, int64_t b); -diff --git a/libavutil/internal.h b/libavutil/internal.h -index 285d304..a8b0718 100644 ---- a/libavutil/internal.h -+++ b/libavutil/internal.h -@@ -210,6 +210,15 @@ if((y)<(x)){\ - }\ - } - -+/* XXX: Hack for uclibc which declares lrintf but does not implement it... */ -+#ifdef ARCH_AVR32 -+#undef HAVE_LRINTF -+#define HAVE_LRINTF 1 -+#define lrintf(x) rint(x) -+#define llrint(x) (long long)rint(x) -+#endif -+ -+ - #ifndef HAVE_LRINTF - /* XXX: add ISOC specific test to avoid specific BSD testing. */ - /* better than nothing implementation. */ -diff --git a/libfaad2/common.h b/libfaad2/common.h -index f809042..6c5fb21 100644 ---- a/libfaad2/common.h -+++ b/libfaad2/common.h -@@ -67,7 +67,7 @@ extern "C" { - /* Use if target platform has address generators with autoincrement */ - //#define PREFER_POINTERS - --#if defined(_WIN32_WCE) || defined(__arm__) -+#if defined(_WIN32_WCE) || defined(__arm__) || defined(__avr32__) - #define FIXED_POINT - #endif - -diff --git a/libmpcodecs/ad_libmad.c b/libmpcodecs/ad_libmad.c -index 076359a..51b77fe 100644 ---- a/libmpcodecs/ad_libmad.c -+++ b/libmpcodecs/ad_libmad.c -@@ -86,6 +86,11 @@ static int init(sh_audio_t *sh){ - sh->channels=(this->frame.header.mode == MAD_MODE_SINGLE_CHANNEL) ? 1 : 2; - sh->samplerate=this->frame.header.samplerate; - sh->i_bps=this->frame.header.bitrate/8; -+#ifdef WORDS_BIGENDIAN -+ sh->sample_format = AF_FORMAT_S16_BE; -+#else -+ sh->sample_format = AF_FORMAT_S16_LE; -+#endif - sh->samplesize=2; - - return 1; -diff --git a/libswscale/pico-avr32.h b/libswscale/pico-avr32.h -new file mode 100644 -index 0000000..7ac6200 ---- /dev/null -+++ b/libswscale/pico-avr32.h -@@ -0,0 +1,137 @@ -+/* -+ * Copyright (c) 2007 Atmel Corporation. All rights reserved. -+ * -+ * 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 ATMEL may not be used to endorse or promote products -+ * derived from this software without specific prior written -+ * permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL -+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -+ * DAMAGE. -+ */ -+#ifndef __PICO_H__ -+#define __PICO_H__ -+ -+/* Coprocessor Number */ -+#define PICO_CPNO 1 -+ -+/* Pixel Coprocessor Register file */ -+#define PICO_REGVECT_INPIX2 cr0 -+#define PICO_REGVECT_INPIX1 cr1 -+#define PICO_REGVECT_INPIX0 cr2 -+#define PICO_REGVECT_OUTPIX2 cr3 -+#define PICO_REGVECT_OUTPIX1 cr4 -+#define PICO_REGVECT_OUTPIX0 cr5 -+#define PICO_REGVECT_COEFF0_A cr6 -+#define PICO_REGVECT_COEFF0_B cr7 -+#define PICO_REGVECT_COEFF1_A cr8 -+#define PICO_REGVECT_COEFF1_B cr9 -+#define PICO_REGVECT_COEFF2_A cr10 -+#define PICO_REGVECT_COEFF2_B cr11 -+#define PICO_REGVECT_VMU0_OUT cr12 -+#define PICO_REGVECT_VMU1_OUT cr13 -+#define PICO_REGVECT_VMU2_OUT cr14 -+#define PICO_REGVECT_CONFIG cr15 -+ -+#define PICO_INPIX2 0 -+#define PICO_INPIX1 1 -+#define PICO_INPIX0 2 -+#define PICO_OUTPIX2 3 -+#define PICO_OUTPIX1 4 -+#define PICO_OUTPIX0 5 -+#define PICO_COEFF0_A 6 -+#define PICO_COEFF0_B 7 -+#define PICO_COEFF1_A 8 -+#define PICO_COEFF1_B 9 -+#define PICO_COEFF2_A 10 -+#define PICO_COEFF2_B 11 -+#define PICO_VMU0_OUT 12 -+#define PICO_VMU1_OUT 13 -+#define PICO_VMU2_OUT 14 -+#define PICO_CONFIG 15 -+ -+/* Config Register */ -+#define PICO_COEFF_FRAC_BITS 0 -+#define PICO_COEFF_FRAC_BITS_WIDTH 4 -+#define PICO_OFFSET_FRAC_BITS 4 -+#define PICO_OFFSET_FRAC_BITS_WIDTH 4 -+#define PICO_INPUT_MODE 8 -+#define PICO_INPUT_MODE_WIDTH 2 -+#define PICO_OUTPUT_MODE 10 -+ -+#define PICO_TRANSFORMATION_MODE 0 -+#define PICO_HOR_FILTER_MODE 1 -+#define PICO_VERT_FILTER_MODE 2 -+ -+#define PICO_PLANAR_MODE 1 -+#define PICO_PACKED_MODE 0 -+ -+/* Bits in coefficients */ -+#define PICO_COEFF_BITS 12 -+ -+/* Operation bits */ -+#define PICO_USE_ACC (1 << 2) -+#define PICO_SINGLE_VECTOR (1 << 3) -+ -+ -+#define __str(x...) #x -+#define __xstr(x...) __str(x) -+ -+#define PICO_PUT_W(pico_reg, x) \ -+ __builtin_mvrc_w(PICO_CPNO, pico_reg, x); -+#define PICO_GET_W(pico_reg) \ -+ __builtin_mvcr_w(PICO_CPNO, pico_reg) -+ -+#define PICO_PUT_D(pico_reg, x) \ -+ __builtin_mvrc_d(PICO_CPNO, pico_reg, x); -+#define PICO_GET_D(pico_reg) \ -+ __builtin_mvcr_d(PICO_CPNO, pico_reg) -+ -+ -+#define PICO_STCM_W(ptr, pico_regs...) \ -+ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); -+#define PICO_STCM_D(ptr, pico_regs...) \ -+ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); -+ -+#define PICO_STCM_W_DEC(ptr, pico_regs...) \ -+ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); -+#define PICO_STCM_D_DEC(ptr, pico_regs...) \ -+ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr)); -+ -+#define PICO_LDCM_W(ptr, pico_regs...) \ -+ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); -+#define PICO_LDCM_D(ptr, pico_regs...) \ -+ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr)); -+ -+#define PICO_LDCM_W_INC(ptr, pico_regs...) \ -+ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); -+#define PICO_LDCM_D_INC(ptr, pico_regs...) \ -+ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr)); -+ -+#define PICO_OP(op, dst_addr, addr0, addr1, addr2) \ -+ __builtin_cop(PICO_CPNO, addr0, addr1, addr2, op | dst_addr); -+ -+ -+#endif -+ -diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h -index ecd28f5..3221d0c 100644 ---- a/libswscale/swscale_internal.h -+++ b/libswscale/swscale_internal.h -@@ -173,7 +173,7 @@ typedef struct SwsContext{ - SwsFunc yuv2rgb_get_func_ptr (SwsContext *c); - int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation); - --char *sws_format_name(int format); -+char *sws_format_name(enum PixelFormat format); - - //FIXME replace this with something faster - #define isPlanarYUV(x) ((x)==PIX_FMT_YUV410P || (x)==PIX_FMT_YUV420P \ -diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c -index 71759bc..fa83985 100644 ---- a/libswscale/yuv2rgb.c -+++ b/libswscale/yuv2rgb.c -@@ -44,6 +44,10 @@ - #include "yuv2rgb_mlib.c" - #endif - -+#ifdef ARCH_AVR32 -+#include "yuv2rgb_avr32.c" -+#endif -+ - #define DITHER1XBPP // only for mmx - - const uint8_t __attribute__((aligned(8))) dither_2x2_4[2][8]={ -@@ -601,6 +605,12 @@ SwsFunc yuv2rgb_get_func_ptr (SwsContext *c) - if(t) return t; - } - #endif -+#ifdef ARCH_AVR32 -+ { -+ SwsFunc t= yuv2rgb_init_avr32(c); -+ if(t) return t; -+ } -+#endif - #ifdef HAVE_ALTIVEC - if (c->flags & SWS_CPU_CAPS_ALTIVEC) - { -@@ -678,6 +688,10 @@ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, - //printf("%lld %lld %lld %lld %lld\n", cy, crv, cbu, cgu, cgv); - oy -= 256*brightness; - -+#ifdef ARCH_AVR32 -+ yuv2rgb_c_init_tables_avr32 (c, inv_table, fullRange, brightness, contrast, saturation); -+#endif -+ - for (i = 0; i < 1024; i++) { - int j; - -diff --git a/libswscale/yuv2rgb_avr32.c b/libswscale/yuv2rgb_avr32.c -new file mode 100644 -index 0000000..4a8341e ---- /dev/null -+++ b/libswscale/yuv2rgb_avr32.c -@@ -0,0 +1,416 @@ -+/* -+ * Copyright (c) 2007 Atmel Corporation. All rights reserved. -+ * -+ * 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 ATMEL may not be used to endorse or promote products -+ * derived from this software without specific prior written -+ * permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY ATMEL ``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 EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL -+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -+ * DAMAGE. -+ */ -+#include "pico-avr32.h" -+ -+ -+#define RGB(uv_part) \ -+ __asm__ volatile ( \ -+ "ld.w\t%0, %3[%7:" uv_part " << 2]\n\t" /* tmp = c->table_gV[V] */ \ -+ "ld.w\t%1, %4[%8:" uv_part " << 2]\n\t" /* g = c->table_gU[U] */ \ -+ "ld.w\t%2, %5[%8:" uv_part " << 2]\n\t" /* b = c->table_bU[U] */ \ -+ "add\t%1, %0\n\t" /* g += tmp */\ -+ "ld.w\t%0, %6[%7:" uv_part " << 2]" /* r = c->table_rV[V] */ \ -+ : "=&r" (r), "=&r" (g), "=&r" (b) \ -+ : "r" (&c->table_gV[0]), "r" (&c->table_gU[0]),"r" (&c->table_bU[0]), \ -+ "r" (&c->table_rV[0]), "r" (V), "r" (U)); -+ -+ -+#undef YUV2RGB1 -+#define YUV2RGB1(dst, src, y, idx) \ -+ { int tmp2; __asm__ volatile ( \ -+ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ -+ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ -+ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[2] = tmp; */ \ -+ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ -+ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ -+ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ -+ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[0] = tmp; */ \ -+ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ -+ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 3], %1\n\t" /* dst_1[5] = tmp; */ \ -+ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ -+ "st.b\t%7[6*%8 + 5], %1" /* dst_1[3] = tmp; */ \ -+ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ -+ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } -+ -+#undef YUV2RGB2 -+#define YUV2RGB2(dst, src, y, idx) \ -+ { int tmp2; __asm__ volatile ( \ -+ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ -+ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ -+ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[2] = tmp; */ \ -+ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ -+ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ -+ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ -+ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[0] = tmp; */ \ -+ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ -+ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 3], %1\n\t" /* dst_1[5] = tmp; */ \ -+ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ -+ "st.b\t%7[6*%8 + 5], %1" /* dst_1[3] = tmp; */ \ -+ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ -+ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } -+ -+ -+#undef YUV2BGR1 -+#define YUV2BGR1(dst, src, y, idx) \ -+ { int tmp2; __asm__ volatile ( \ -+ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ -+ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ -+ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[2] = tmp; */ \ -+ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ -+ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ -+ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ -+ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[0] = tmp; */ \ -+ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ -+ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 5], %1\n\t" /* dst_1[5] = tmp; */ \ -+ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ -+ "st.b\t%7[6*%8 + 3], %1" /* dst_1[3] = tmp; */ \ -+ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ -+ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } -+ -+#undef YUV2BGR2 -+#define YUV2BGR2(dst, src, y, idx) \ -+ { int tmp2; __asm__ volatile ( \ -+ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ -+ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \ -+ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[2] = tmp; */ \ -+ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \ -+ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \ -+ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \ -+ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[0] = tmp; */ \ -+ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \ -+ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 5], %1\n\t" /* dst_1[5] = tmp; */ \ -+ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \ -+ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \ -+ "st.b\t%7[6*%8 + 3], %1" /* dst_1[3] = tmp; */ \ -+ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \ -+ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); } -+ -+ -+ -+int yuv2bgr24_avr32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, -+ int srcSliceH, uint8_t* dst[], int dstStride[]){ -+ int y; -+ -+ if(c->srcFormat == PIX_FMT_YUV422P){ -+ srcStride[1] *= 2; -+ srcStride[2] *= 2; -+ } -+ -+ -+ for(y=0; y>1)*srcStride[1]; -+ uint8_t *pv= src[2] + (y>>1)*srcStride[2]; -+ unsigned int h_size= c->dstW>>3; -+ while (h_size--) { -+ uint32_t U, V, Y1, Y2, tmp; -+ U = ((uint32_t*)pu)[0]; -+ V = ((uint32_t*)pv)[0]; -+ -+ RGB("t") -+ YUV2BGR1(dst_1, py_1, Y1, 0) -+ YUV2BGR1(dst_2, py_2, Y2, 0) -+ -+ RGB("u") -+ YUV2BGR2(dst_1, py_1, Y1, 1) -+ YUV2BGR2(dst_2, py_2, Y2, 1) -+ -+ RGB("l") -+ YUV2BGR1(dst_1, py_1, Y1, 2) -+ YUV2BGR1(dst_2, py_2, Y2, 2) -+ -+ RGB("b") -+ YUV2BGR2(dst_1, py_1, Y1, 3) -+ YUV2BGR2(dst_2, py_2, Y2, 3) -+ -+ -+ -+ pu += 4; -+ pv += 4; -+ py_1 += 8; -+ py_2 += 8; -+ dst_1 += 24; -+ dst_2 += 24; -+ } -+ } -+ return srcSliceH; -+} -+ -+ -+ -+static int yuv2rgb24_avr32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, -+ int srcSliceH, uint8_t* dst[], int dstStride[]){ -+ int y; -+ -+ if(c->srcFormat == PIX_FMT_YUV422P){ -+ srcStride[1] *= 2; -+ srcStride[2] *= 2; -+ } -+ for(y=0; y>1)*srcStride[1]; -+ uint8_t *pv= src[2] + (y>>1)*srcStride[2]; -+ unsigned int h_size= c->dstW>>3; -+ while (h_size--) { -+ uint32_t U, V, Y1, Y2, tmp; -+ U = ((uint32_t*)pu)[0]; -+ V = ((uint32_t*)pv)[0]; -+ -+ RGB("t") -+ YUV2RGB1(dst_1, py_1, Y1, 0) -+ YUV2RGB1(dst_2, py_2, Y2, 0) -+ -+ RGB("u") -+ YUV2RGB2(dst_1, py_1, Y1, 1) -+ YUV2RGB2(dst_2, py_2, Y2, 1) -+ -+ RGB("l") -+ YUV2RGB1(dst_1, py_1, Y1, 2) -+ YUV2RGB1(dst_2, py_2, Y2, 2) -+ -+ RGB("b") -+ YUV2RGB2(dst_1, py_1, Y1, 3) -+ YUV2RGB2(dst_2, py_2, Y2, 3) -+ -+ pu += 4; -+ pv += 4; -+ py_1 += 8; -+ py_2 += 8; -+ dst_1 += 24; -+ dst_2 += 24; -+ } -+ } -+ return srcSliceH; -+} -+ -+#define SCALE(x, bits) (((x) + ( 1 << (bits - 1))) >> bits) -+#define COEFF_FRAC_BITS 9 -+#define OFFSET_FRAC_BITS 2 -+ -+/* Coefficients used in the pico */ -+static struct { -+ short coeff2_2; -+ short coeff2_3; -+ short coeff2_0; -+ short coeff2_1; -+ short coeff1_2; -+ short coeff1_3; -+ short coeff1_0; -+ short coeff1_1; -+ short coeff0_2; -+ short coeff0_3; -+ short coeff0_0; -+ short coeff0_1; -+} pico_coeff; -+ -+ -+static int yuv2bgr24_avr32_pico(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, -+ int srcSliceH, uint8_t* dst[], int dstStride[]){ -+ int y; -+ static int first_time = 1; -+ -+ /* Initialize pico */ -+ PICO_LDCM_D(&pico_coeff, -+ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B, -+ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B, -+ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B); -+ -+ PICO_PUT_W(PICO_CONFIG, -+ (PICO_PACKED_MODE << PICO_OUTPUT_MODE -+ | PICO_TRANSFORMATION_MODE << PICO_INPUT_MODE -+ | OFFSET_FRAC_BITS << PICO_OFFSET_FRAC_BITS -+ | COEFF_FRAC_BITS << PICO_COEFF_FRAC_BITS)); -+ -+ -+ if(c->srcFormat == PIX_FMT_YUV422P){ -+ srcStride[1] *= 2; -+ srcStride[2] *= 2; -+ } -+ -+ for(y=0; y>1)*srcStride[1]; -+ uint8_t *pv= src[2] + (y>>1)*srcStride[2]; -+ unsigned int h_size= c->dstW>>3; -+ int *py_1_int = (int *)py_1; -+ int *py_2_int = (int *)py_2; -+ int *pu_int = (int *)pu; -+ int *pv_int = (int *)pv; -+ while (h_size--) { -+ PICO_PUT_W(PICO_INPIX0, *py_1_int++); -+ PICO_PUT_W(PICO_INPIX1, *pu_int++); -+ PICO_PUT_W(PICO_INPIX2, *pv_int++); -+ PICO_OP(0, 0, 0, 4, 8); -+ PICO_OP(0, 1, 1, 4, 8); -+ PICO_OP(0, 2, 2, 5, 9); -+ PICO_OP(0, 3, 3, 5, 9); -+ PICO_PUT_W(PICO_INPIX0, *py_1_int++); -+ PICO_STCM_W(dst_1, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); -+ PICO_OP(0, 0, 0, 6, 10); -+ PICO_OP(0, 1, 1, 6, 10); -+ PICO_OP(0, 2, 2, 7, 11); -+ PICO_OP(0, 3, 3, 7, 11); -+ PICO_PUT_W(PICO_INPIX0, *py_2_int++); -+ PICO_STCM_W(dst_1 + 12, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); -+ -+ PICO_OP(0, 0, 0, 4, 8); -+ PICO_OP(0, 1, 1, 4, 8); -+ PICO_OP(0, 2, 2, 5, 9); -+ PICO_OP(0, 3, 3, 5, 9); -+ PICO_PUT_W(PICO_INPIX0, *py_2_int++); -+ PICO_STCM_W(dst_2, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); -+ PICO_OP(0, 0, 0, 6, 10); -+ PICO_OP(0, 1, 1, 6, 10); -+ PICO_OP(0, 2, 2, 7, 11); -+ PICO_OP(0, 3, 3, 7, 11); -+ PICO_STCM_W(dst_2 + 12, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0); -+ -+ dst_1 += 24; -+ dst_2 += 24; -+ } -+ } -+ return srcSliceH; -+} -+ -+extern int avr32_use_pico; -+ -+SwsFunc yuv2rgb_init_avr32 (SwsContext *c){ -+ switch(c->dstFormat){ -+ case PIX_FMT_BGR24: -+ { -+ if ( avr32_use_pico ){ -+ MSG_ERR("AVR32 BGR24: Using PICO for color space conversion\n"); -+ return yuv2bgr24_avr32_pico; -+ } else { -+ MSG_ERR("AVR32 BGR24: Using optimized color space conversion\n"); -+ return yuv2bgr24_avr32; -+ } -+ } -+ break; -+ case PIX_FMT_RGB24: -+ { -+ if ( avr32_use_pico ){ -+ MSG_ERR("AVR32 RGB24: Using PICO for color space conversion\n"); -+ return yuv2bgr24_avr32_pico; -+ } else { -+ MSG_ERR("AVR32 RGB24: Using optimized color space conversion\n"); -+ return yuv2rgb24_avr32; -+ } -+ } -+ } -+ return NULL; -+} -+ -+ -+int yuv2rgb_c_init_tables_avr32 (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation){ -+ const int isRgb = (c->dstFormat == PIX_FMT_RGB24); -+ -+ int64_t crv = inv_table[0]; -+ int64_t cbu = inv_table[1]; -+ int64_t cgu = -inv_table[2]; -+ int64_t cgv = -inv_table[3]; -+ int64_t cy = 1<<16; -+ int64_t oy = 0; -+ -+ if(!fullRange){ -+ cy= (cy*255) / 219; -+ oy= 16<<16; -+ } -+ -+ cy = (cy *contrast )>>16; -+ crv= (crv*contrast * saturation)>>32; -+ cbu= (cbu*contrast * saturation)>>32; -+ cgu= (cgu*contrast * saturation)>>32; -+ cgv= (cgv*contrast * saturation)>>32; -+ -+ oy -= 256*brightness; -+ -+ pico_coeff.coeff1_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* G <- Y */ -+ pico_coeff.coeff1_1 = SCALE(cgu, 16 - COEFF_FRAC_BITS); /* G <- U */ -+ pico_coeff.coeff1_2 = SCALE(cgv, 16 - COEFF_FRAC_BITS); /* G <- V */ -+ pico_coeff.coeff1_3 = (SCALE(-128*cgu - 128*cgv - 16*cy, 16 - OFFSET_FRAC_BITS) -+ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* G offset */ -+ -+ if ( isRgb ){ -+ pico_coeff.coeff0_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* R <- Y */ -+ pico_coeff.coeff0_1 = 0; /* R <- U */ -+ pico_coeff.coeff0_2 = SCALE(crv, 16 - COEFF_FRAC_BITS); /* R <- V */ -+ pico_coeff.coeff0_3 = (SCALE(-128*crv - 16*cy, 16 - OFFSET_FRAC_BITS) -+ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* R offset */ -+ -+ pico_coeff.coeff2_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* B <- Y */ -+ pico_coeff.coeff2_1 = SCALE(cbu, 16 - COEFF_FRAC_BITS); /* B <- U */ -+ pico_coeff.coeff2_2 = 0; /* B <- V */ -+ pico_coeff.coeff2_3 = (SCALE(-128*cbu - 16*cy, 16 - OFFSET_FRAC_BITS) -+ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1)));/* B offset */ -+ } else { -+ pico_coeff.coeff2_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* R <- Y */ -+ pico_coeff.coeff2_1 = 0; /* R <- U */ -+ pico_coeff.coeff2_2 = SCALE(crv, 16 - COEFF_FRAC_BITS); /* R <- V */ -+ pico_coeff.coeff2_3 = (SCALE(-128*crv - 16*cy, 16 - OFFSET_FRAC_BITS) -+ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* R offset */ -+ -+ pico_coeff.coeff0_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* B <- Y */ -+ pico_coeff.coeff0_1 = SCALE(cbu, 16 - COEFF_FRAC_BITS); /* B <- U */ -+ pico_coeff.coeff0_2 = 0; /* B <- V */ -+ pico_coeff.coeff0_3 = (SCALE(-128*cbu - 16*cy, 16 - OFFSET_FRAC_BITS) -+ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* B offset */ -+ } -+ -+} -+ -+ -+#undef RGB -diff --git a/libvo/vo_fbdev2.c b/libvo/vo_fbdev2.c -index 053c193..7017770 100644 ---- a/libvo/vo_fbdev2.c -+++ b/libvo/vo_fbdev2.c -@@ -22,6 +22,9 @@ - #include "sub.h" - #include "mp_msg.h" - -+/* Draw directly to framebuffer */ -+#define USE_CONVERT2FB -+ - static vo_info_t info = { - "Framebuffer Device", - "fbdev2", -@@ -178,6 +181,15 @@ static int fb_preinit(int reset) - } - fb_orig_vinfo = fb_vinfo; - -+ /* Reset panning offset */ -+ fb_vinfo.yoffset = 0; -+ if (ioctl(fb_dev_fd, FBIOPAN_DISPLAY, &fb_vinfo)) { -+ mp_msg(MSGT_VO, MSGL_ERR, -+ "[fbdev2] FBIOPAN_DISPLAY failed: %s\n", -+ strerror(errno)); -+ return 0; -+ } -+ - fb_bpp = fb_vinfo.bits_per_pixel; - - /* 16 and 15 bpp is reported as 16 bpp */ -@@ -289,6 +301,10 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, - mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't malloc next_frame: %s\n", strerror(errno)); - return 1; - } -+#else -+ if ((fb_line_len * fb_vinfo.yres) <= (fb_finfo.smem_len / 2) -+ && fb_vinfo.yoffset == 0) -+ center += fb_line_len * fb_vinfo.yres; - #endif - if (fs) memset(frame_buffer, '\0', fb_line_len * fb_vinfo.yres); - -@@ -299,14 +315,22 @@ static int query_format(uint32_t format) - { - // open the device, etc. - if (fb_preinit(0)) return 0; -- if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR) { -+ if ((format & IMGFMT_RGB_MASK) == IMGFMT_RGB) { - int fb_target_bpp = format & 0xff; - set_bpp(&fb_vinfo, fb_target_bpp); - fb_vinfo.xres_virtual = fb_vinfo.xres; -- fb_vinfo.yres_virtual = fb_vinfo.yres; -+ fb_vinfo.yres_virtual = fb_vinfo.yres * 2; - if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_vinfo)) { -- mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't put VSCREENINFO: %s\n", strerror(errno)); -- return 0; -+ mp_msg(MSGT_VO, MSGL_WARN, -+ "[fbdev2] Can't double virtual y resolution: %s\n", -+ strerror(errno)); -+ fb_vinfo.yres_virtual = fb_vinfo.yres; -+ if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_vinfo)) { -+ mp_msg(MSGT_VO, MSGL_ERR, -+ "[fbdev2] Can't put VSCREENINFO: %s\n", -+ strerror(errno)); -+ return -1; -+ } - } - fb_pixel_size = fb_vinfo.bits_per_pixel / 8; - fb_bpp = fb_vinfo.red.length + fb_vinfo.green.length + -@@ -367,16 +391,67 @@ static void check_events(void) - - static void flip_page(void) - { --#ifndef USE_CONVERT2FB - int i, out_offset = 0, in_offset = 0; - -- for (i = 0; i < in_height; i++) { -- memcpy(center + out_offset, next_frame + in_offset, -- in_width * fb_pixel_size); -- out_offset += fb_line_len; -- in_offset += in_width * fb_pixel_size; -- } -+#ifndef USE_CONVERT2FB -+ if (1) { -+#else -+ if (fb_vinfo.yres_virtual == fb_vinfo.yres) { - #endif -+ for (i = 0; i < in_height; i++) { -+ memcpy(center + out_offset, next_frame + in_offset, -+ in_width * fb_pixel_size); -+ out_offset += fb_line_len; -+ in_offset += in_width * fb_pixel_size; -+ } -+ } else { -+ if (fb_vinfo.yoffset == 0) { -+ fb_vinfo.yoffset += fb_vinfo.yres; -+ center -= fb_line_len * fb_vinfo.yres; -+ } else { -+ fb_vinfo.yoffset = 0; -+ center += fb_line_len * fb_vinfo.yres; -+ } -+ -+ if (ioctl(fb_dev_fd, FBIOPAN_DISPLAY, &fb_vinfo)) { -+ mp_msg(MSGT_VO, MSGL_ERR, -+ "[fbdev2] Can't FBIOPAN_DISPLAY: %s\n", -+ strerror(errno)); -+ } -+ } -+} -+ -+static uint32_t get_image(mp_image_t *mpi) -+{ -+ if(mpi->flags&MP_IMGFLAG_READABLE) -+ return VO_FALSE; // slow video ram -+ if(mpi->type==MP_IMGTYPE_STATIC) -+ return VO_FALSE; // it is not static -+ -+ if (mpi->flags & (MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_ACCEPT_WIDTH)) { -+ // we're lucky or codec accepts stride => ok, let's go! -+ -+ //YUY2 and RGB formats -+ mpi->planes[0] = center; -+ mpi->width = in_width; -+ mpi->stride[0] = fb_line_len; -+ -+ // center image -+ -+ mpi->flags |= MP_IMGFLAG_DIRECT; -+ -+ return VO_TRUE; -+ } -+ -+ return VO_FALSE; -+} -+ -+static uint32_t put_image(mp_image_t *mpi) -+{ -+ // already out? -+ if ((mpi->flags & (MP_IMGFLAG_DIRECT | MP_IMGFLAG_DRAW_CALLBACK))) -+ return VO_TRUE; -+ return VO_FALSE; - } - - static void uninit(void) -@@ -403,6 +478,10 @@ static int control(uint32_t request, void *data, ...) - switch (request) { - case VOCTRL_QUERY_FORMAT: - return query_format(*((uint32_t*)data)); -+ case VOCTRL_GET_IMAGE: -+ return get_image(data); -+ case VOCTRL_DRAW_IMAGE: -+ return put_image(data); - } - return VO_NOTIMPL; - } -diff --git a/version.sh b/version.sh -index 44b5c5d..cf22a68 100755 ---- a/version.sh -+++ b/version.sh -@@ -1,2 +1,2 @@ - #!/bin/sh --echo "#define VERSION \"1.0rc1-$1\"" > version.h -+echo "#define VERSION \"1.0rc1.atmel.2-$1\"" > version.h diff --git a/packages/mplayer/mplayer_0.0+1.0rc1.bb b/packages/mplayer/mplayer_0.0+1.0rc1.bb index c0062bddd9..6d9cd754d5 100644 --- a/packages/mplayer/mplayer_0.0+1.0rc1.bb +++ b/packages/mplayer/mplayer_0.0+1.0rc1.bb @@ -22,11 +22,7 @@ SRC_URI = "http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2 \ file://imageon-video_out.patch;patch=1 \ file://powerpc-is-ppc.diff;patch=1 \ file://pxa_configure.patch;patch=1 \ - file://pxa-video_out.patch;patch=1 \ - " - -SRC_URI_append_avr32 = " file://mplayer-1.0rc1-atmel.2.patch;patch=1 \ - " + file://pxa-video_out.patch;patch=1 " # This is required for the collie machine only as all stacks in that # machine seem to be set to executable by the toolchain. If someone @@ -38,7 +34,7 @@ PACKAGE_ARCH_mencoder_collie = "collie" RCONFLICTS_${PN} = "mplayer-atty" RREPLACES_${PN} = "mplayer-atty" -PR = "r15" +PR = "r14" PARALLEL_MAKE = "" diff --git a/packages/tasks/task-gpephone.bb b/packages/tasks/task-gpephone.bb index e2cef807e0..a77233bedc 100644 --- a/packages/tasks/task-gpephone.bb +++ b/packages/tasks/task-gpephone.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Task packages for GPE Palmtop Environment Phone Edition" -PR = "r13" +PR = "r10" LICENSE = "MIT" inherit task @@ -23,16 +23,18 @@ RDEPENDS_gpephone-task-development = "\ minicom" RDEPENDS_gpephone-task-base = "\ + cms92init \ + gsmmux \ connect \ - gsmd \ + phoneserver \ soundserver \ voicecall \ - dialer \ - quickdial \ vochistory \ sms \ audioplayer \ videoplayer \ + addressbook \ + calendar \ gpe-applauncher \ gpe-phonepanel \ gpe-bootsplash \ @@ -52,6 +54,7 @@ RDEPENDS_gpephone-task-base = "\ gpe-dm \ gpe-login \ gpe-session-scripts-phone \ + gpe-icons \ gpe-confd \ gpe-autostarter \ xauth \ @@ -69,10 +72,7 @@ RDEPENDS_gpephone-task-base = "\ " RDEPENDS_gpephone-task-pim = "\ - contact \ - calendar2 \ - useen \ - " + gpesyncd" RDEPENDS_gpephone-task-settings = "\ gpe-su \ @@ -80,11 +80,10 @@ RDEPENDS_gpephone-task-settings = "\ gpe-mixer \ gpe-taskmanager \ minilite \ - firewall \ - almmgrd \ machined" RDEPENDS_gpephone-task-apps = "\ + gpe-what \ gpe-scap \ gpe-windowlist" diff --git a/packages/tasks/task-sdk-base.bb b/packages/tasks/task-sdk-base.bb index 1977ab6b98..4041b27536 100644 --- a/packages/tasks/task-sdk-base.bb +++ b/packages/tasks/task-sdk-base.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Basic SDK development packages" -PR = "r2" +PR = "r1" LICENSE = "MIT" ALLOW_EMPTY = "1" @@ -31,6 +31,7 @@ RDEPENDS = "\ gnutls-dev \ libgpg-error-dev \ libidl-dev \ + libiw-dev \ libmimedir-dev \ libpcap-dev \ libpixman-dev \ diff --git a/packages/tasks/task-sdk-gpephone.bb b/packages/tasks/task-sdk-gpephone.bb index 77889d7143..56b398b04e 100644 --- a/packages/tasks/task-sdk-gpephone.bb +++ b/packages/tasks/task-sdk-gpephone.bb @@ -1,27 +1,21 @@ DESCRIPTION = "SDK task for GPE Phone Edition" -PR = "r4" +PR = "r0" LICENSE = "MIT" ALLOW_EMPTY = "1" RDEPENDS = "\ libidn-dev \ - libabenabler2-dev \ - libcalenabler2-dev \ + libim-dev \ + gloox-dev \ + libabenabler-dev \ + libcalenabler-dev \ libchenabler-dev \ libgemwidget-dev \ libiac-dev \ - libiac2-dev \ - libim2-dev \ - liblipsevent2-dev \ - libmsgenabler2-dev \ - librecord2-dev \ + libim-dev \ + liblipsevent-dev \ + libmsgenabler-dev \ + librecord-dev \ libvocenabler-dev \ linphone-dev \ - libsettings-dev \ - libgemwidget-dev \ - libalmmgr-dev \ - libgpephone-dev \ - libgsmd-dev \ - libtapi-dev \ - libvoc-dev \ " \ No newline at end of file diff --git a/packages/tea/tea_17.3.5.bb b/packages/tea/tea_17.3.5.bb index da1bad00a9..c8dac8c94f 100644 --- a/packages/tea/tea_17.3.5.bb +++ b/packages/tea/tea_17.3.5.bb @@ -10,5 +10,3 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/tea-editor/${P}.tar.bz2 \ file://move-endif.patch;patch=1;pnum=0" EXTRA_OECONF = "--enable-legacy" - -FILES_${PN}-doc += "${datadir}/${PN}/doc" diff --git a/packages/tinymail/libtinymail-0.0.1/no-iconv-detect.patch b/packages/tinymail/libtinymail-0.0.1/no-iconv-detect.patch index cfda4cb0f2..558cbb2f93 100644 --- a/packages/tinymail/libtinymail-0.0.1/no-iconv-detect.patch +++ b/packages/tinymail/libtinymail-0.0.1/no-iconv-detect.patch @@ -1,9 +1,66 @@ ---- m4/ticonv.m4~ 2007-10-30 13:57:32.000000000 +0100 -+++ trunk/m4/ticonv.m4 2007-10-30 13:57:32.000000000 +0100 -@@ -76,15 +76,6 @@ - - CFLAGS="$CFLAGS -I$srcdir" +--- /tmp/ticonv.m4 2006-11-19 12:01:18.000000000 +0100 ++++ trunk/m4/ticonv.m4 2006-11-19 12:14:50.378554000 +0100 +@@ -14,12 +14,7 @@ + save_LIBS="$LIBS" + CFLAGS="$CFLAGS $ICONV_CFLAGS" + LIBS="$LIBS $ICONV_LIBS -liconv" +-AC_CACHE_CHECK(for iconv in -liconv, ac_cv_libiconv, AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +-#include +-]], [[ +- iconv_t cd; +- cd = iconv_open ("UTF-8", "ISO-8859-1"); +-]])],[ac_cv_libiconv=yes],[ac_cv_libiconv=no])) ++ + if test $ac_cv_libiconv = yes; then + ICONV_LIBS="$ICONV_LIBS -liconv" + have_iconv=yes +@@ -33,39 +28,6 @@ + if test $ac_cv_libiconv = no; then + AC_CHECK_FUNCS(gnu_get_libc_version) + fi +- AC_CACHE_CHECK([if iconv() handles UTF-8], ac_cv_libiconv_utf8, AC_RUN_IFELSE([AC_LANG_SOURCE([[ +-#include +-#include +-#include +-#ifdef HAVE_GNU_GET_LIBC_VERSION +-#include +-#endif +- +-int main (int argc, char **argv) +-{ +- const char *from = "Some Text \xA4"; +- const char *utf8 = "Some Text \xC2\xA4"; +- char *transbuf = malloc (20), *trans = transbuf; +- iconv_t cd; +- size_t from_len = strlen (from), utf8_len = 20; +- size_t utf8_real_len = strlen (utf8); +- +-#ifdef HAVE_GNU_GET_LIBC_VERSION +- /* glibc 2.1.2's iconv is broken in hard to test ways. */ +- if (!strcmp (gnu_get_libc_version (), "2.1.2")) +- exit (1); +-#endif +- +- cd = iconv_open ("UTF-8", "ISO-8859-1"); +- if (cd == (iconv_t) -1) +- exit (1); +- if (iconv (cd, &from, &from_len, &trans, &utf8_len) == -1 || from_len != 0) +- exit (1); +- if (memcmp (utf8, transbuf, utf8_real_len) != 0) +- exit (1); +- +- exit (0); +-}]])],[ac_cv_libiconv_utf8=yes],[ac_cv_libiconv_utf8=no; have_iconv=no],[ac_cv_libiconv_utf8=no; have_iconv=no])) + fi + if test "$have_iconv" = no; then +@@ -73,20 +35,5 @@ + fi + AC_SUBST(ICONV_CFLAGS) + AC_SUBST(ICONV_LIBS) +- +-CFLAGS="$CFLAGS -I$srcdir" +- -AC_MSG_CHECKING(preferred charset formats for system iconv) -AC_RUN_IFELSE([AC_LANG_SOURCE([[ -#define CONFIGURE_IN @@ -13,6 +70,9 @@ -],[ - AC_MSG_RESULT(not found) -],[]) - - CFLAGS="$save_CFLAGS" - LIBS="$save_LIBS" +- +-CFLAGS="$save_CFLAGS" +-LIBS="$save_LIBS" +- + ]) ++ diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch deleted file mode 100644 index 0e8c2a1c02..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch +++ /dev/null @@ -1,2135 +0,0 @@ -Subject: [PATCH] AVR32 Architecture support - -Add support for the AVR32 architecture in the core libc and build system. -This also adds AVR32-ELF definitions to elf.h - ---- - - Rules.mak | 4 - extra/Configs/Config.avr32 | 38 +++++ - extra/Configs/Config.in | 7 + - include/elf.h | 51 +++++++ - libc/sysdeps/linux/avr32/Makefile | 93 +++++++++++++ - libc/sysdeps/linux/avr32/__longjmp.S | 17 ++ - libc/sysdeps/linux/avr32/_mmap.c | 33 ++++ - libc/sysdeps/linux/avr32/bits/atomicity.h | 86 ++++++++++++ - libc/sysdeps/linux/avr32/bits/byteswap.h | 80 +++++++++++ - libc/sysdeps/linux/avr32/bits/endian.h | 7 + - libc/sysdeps/linux/avr32/bits/fcntl.h | 167 +++++++++++++++++++++++++ - libc/sysdeps/linux/avr32/bits/kernel_stat.h | 63 +++++++++ - libc/sysdeps/linux/avr32/bits/kernel_types.h | 56 ++++++++ - libc/sysdeps/linux/avr32/bits/machine-gmon.h | 69 ++++++++++ - libc/sysdeps/linux/avr32/bits/mman.h | 95 ++++++++++++++ - libc/sysdeps/linux/avr32/bits/profil-counter.h | 26 +++ - libc/sysdeps/linux/avr32/bits/setjmp.h | 21 +++ - libc/sysdeps/linux/avr32/bits/syscalls.h | 143 +++++++++++++++++++++ - libc/sysdeps/linux/avr32/bits/wordsize.h | 1 - libc/sysdeps/linux/avr32/brk.c | 23 +++ - libc/sysdeps/linux/avr32/bsd-_setjmp.S | 12 + - libc/sysdeps/linux/avr32/bsd-setjmp.S | 12 + - libc/sysdeps/linux/avr32/clone.c | 37 +++++ - libc/sysdeps/linux/avr32/crt1.S | 93 +++++++++++++ - libc/sysdeps/linux/avr32/crti.S | 17 ++ - libc/sysdeps/linux/avr32/crtn.S | 14 ++ - libc/sysdeps/linux/avr32/mmap.c | 31 ++++ - libc/sysdeps/linux/avr32/setjmp.S | 43 ++++++ - libc/sysdeps/linux/avr32/sigaction.c | 49 +++++++ - libc/sysdeps/linux/avr32/sigrestorer.S | 11 + - libc/sysdeps/linux/avr32/sys/elf.h | 26 +++ - libc/sysdeps/linux/avr32/sys/io.h | 48 +++++++ - libc/sysdeps/linux/avr32/sys/procfs.h | 123 ++++++++++++++++++ - libc/sysdeps/linux/avr32/sys/ucontext.h | 94 ++++++++++++++ - libc/sysdeps/linux/avr32/sys/user.h | 46 ++++++ - libc/sysdeps/linux/avr32/syscall.S | 81 ++++++++++++ - libc/sysdeps/linux/avr32/vfork.S | 55 ++++++++ - 37 files changed, 1872 insertions(+) - -Index: uClibc-0.9.28/extra/Configs/Config.avr32 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/extra/Configs/Config.avr32 2006-05-05 09:27:17.000000000 +0200 -@@ -0,0 +1,38 @@ -+# -+# For a description of the syntax of this configuration file, -+# see extra/config/Kconfig-language.txt -+# -+ -+config HAVE_ELF -+ bool -+ default y -+ -+config TARGET_ARCH -+ default "avr32" -+ -+config ARCH_CFLAGS -+ string -+ -+config ARCH_LDFLAGS -+ string -+ -+config LIBGCC_CFLAGS -+ string -+ -+config ARCH_SUPPORTS_BIG_ENDIAN -+ bool -+ default y -+ -+config UCLIBC_COMPLETELY_PIC -+ select FORCE_SHAREABLE_TEXT_SEGMENTS -+ bool -+ default y -+ -+choice -+ prompt "Target CPU Type" -+ default CONFIG_AP7000 -+ -+config CONFIG_AP7000 -+ bool "AP7000" -+ -+endchoice -Index: uClibc-0.9.28/extra/Configs/Config.in -=================================================================== ---- uClibc-0.9.28.orig/extra/Configs/Config.in 2006-04-19 12:47:48.000000000 +0200 -+++ uClibc-0.9.28/extra/Configs/Config.in 2006-04-19 12:48:33.000000000 +0200 -@@ -16,6 +16,9 @@ config TARGET_alpha - config TARGET_arm - bool "arm" - -+config TARGET_avr32 -+ bool "avr32" -+ - config TARGET_bfin - bool "bfin" - -@@ -83,6 +86,10 @@ if TARGET_arm - source "extra/Configs/Config.arm" - endif - -+if TARGET_avr32 -+source "extra/Configs/Config.avr32" -+endif -+ - if TARGET_bfin - source "extra/Configs/Config.bfin" - endif -Index: uClibc-0.9.28/include/elf.h -=================================================================== ---- uClibc-0.9.28.orig/include/elf.h 2006-04-19 12:47:48.000000000 +0200 -+++ uClibc-0.9.28/include/elf.h 2006-05-05 09:28:38.000000000 +0200 -@@ -261,6 +261,8 @@ typedef struct - #define EM_NIOS32 0xfebb /* Altera Nios 32 */ - #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */ - -+#define EM_AVR32 0x18ad -+ - /* V850 backend magic number. Written in the absense of an ABI. */ - #define EM_CYGNUS_V850 0x9080 - -@@ -2687,6 +2689,55 @@ typedef Elf32_Addr Elf32_Conflict; - /* Keep this the last entry. */ - #define R_V850_NUM 25 - -+/* Atmel AVR32 relocations. */ -+#define R_AVR32_NONE 0 -+#define R_AVR32_32 1 -+#define R_AVR32_16 2 -+#define R_AVR32_8 3 -+#define R_AVR32_32_PCREL 4 -+#define R_AVR32_16_PCREL 5 -+#define R_AVR32_8_PCREL 6 -+#define R_AVR32_DIFF32 7 -+#define R_AVR32_DIFF16 8 -+#define R_AVR32_DIFF8 9 -+#define R_AVR32_GOT32 10 -+#define R_AVR32_GOT16 11 -+#define R_AVR32_GOT8 12 -+#define R_AVR32_21S 13 -+#define R_AVR32_16U 14 -+#define R_AVR32_16S 15 -+#define R_AVR32_8S 16 -+#define R_AVR32_8S_EXT 17 -+#define R_AVR32_22H_PCREL 18 -+#define R_AVR32_18W_PCREL 19 -+#define R_AVR32_16B_PCREL 20 -+#define R_AVR32_16N_PCREL 21 -+#define R_AVR32_14UW_PCREL 22 -+#define R_AVR32_11H_PCREL 23 -+#define R_AVR32_10UW_PCREL 24 -+#define R_AVR32_9H_PCREL 25 -+#define R_AVR32_9UW_PCREL 26 -+#define R_AVR32_HI16 27 -+#define R_AVR32_LO16 28 -+#define R_AVR32_GOTPC 29 -+#define R_AVR32_GOTCALL 30 -+#define R_AVR32_LDA_GOT 31 -+#define R_AVR32_GOT21S 32 -+#define R_AVR32_GOT18SW 33 -+#define R_AVR32_GOT16S 34 -+#define R_AVR32_GOT7UW 35 -+#define R_AVR32_32_CPENT 36 -+#define R_AVR32_CPCALL 37 -+#define R_AVR32_16_CP 38 -+#define R_AVR32_9W_CP 39 -+#define R_AVR32_RELATIVE 40 -+#define R_AVR32_GLOB_DAT 41 -+#define R_AVR32_JMP_SLOT 42 -+#define R_AVR32_ALIGN 43 -+#define R_AVR32_NUM 44 -+ -+/* AVR32 dynamic tags */ -+#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ - - #define R_H8_NONE 0 - #define R_H8_DIR32 1 -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,93 @@ -+# Makefile for uClibc -+# -+# Copyright (C) 2000-2003 Erik Andersen -+# -+# This program is free software; you can redistribute it and/or modify it under -+# the terms of the GNU Library 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 Library General Public License for more -+# details. -+# -+# You should have received a copy of the GNU Library 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 -+ -+TOPDIR=../../../../ -+include $(TOPDIR)Rules.mak -+ASFLAGS=$(CFLAGS) -+ -+CRT_SRC = crt1.S -+CRT_OBJ = crt1.o -+SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ)) -+CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o -+ -+SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \ -+ bsd-_setjmp.S sigrestorer.S syscall.S -+SOBJS=$(patsubst %.S,%.o, $(SSRC)) -+ -+CSRC=clone.c brk.c sigaction.c mmap.c -+COBJS=$(patsubst %.c,%.o, $(CSRC)) -+ -+OBJS=$(SOBJS) $(COBJS) -+ -+OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH) -+ -+all: $(OBJ_LIST) -+ -+$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS) -+ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) -+ $(INSTALL) -d $(TOPDIR)lib/ -+ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ -+ -+$(CRT_OBJ): $(CRT_SRC) -+ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+$(SCRT_OBJ): $(CRT_SRC) -+ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+$(SOBJS): %.o : %.S -+ $(CC) $(ASFLAGS) -c $< -o $@ -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+$(COBJS): %.o : %.c -+ $(CC) $(CFLAGS) -c $< -o $@ -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) -+crti.o: crti.S -+ $(CC) $(ASFLAGS) -c crti.S -o crti.o -+ -+$(TOPDIR)lib/crti.o: crti.o -+ $(INSTALL) -d $(TOPDIR)lib/ -+ cp crti.o $(TOPDIR)lib/ -+ -+crtn.o: crtn.S -+ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o -+ -+$(TOPDIR)lib/crtn.o: crtn.o -+ $(INSTALL) -d $(TOPDIR)lib/ -+ cp crtn.o $(TOPDIR)lib/ -+else -+$(TOPDIR)lib/crti.o: -+ $(INSTALL) -d $(TOPDIR)lib/ -+ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o -+$(TOPDIR)lib/crtn.o: -+ $(INSTALL) -d $(TOPDIR)lib/ -+ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o -+endif -+ -+ -+headers: -+# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/ -+ -+clean: -+ $(RM) *.[oa] *~ core -+ $(RM) bits/sysnum.h -+ $(RM) gmon-start.S -+ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,17 @@ -+/* longjmp for AVR32 -+ * -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+ -+ .global __longjmp -+ .type __longjmp,"function" -+ .align 1 -+__longjmp: -+ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr -+ mov r12, r11 /* get the return value right */ -+ mustr r8 /* restore status register (lower half) */ -+ cp r12, 0 /* can't return zero */ -+ frs -+ moveq r12, 1 -+ mov pc,lr -+ .size __longjmp, . - __longjmp -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,33 @@ -+/* Copyright (C) 2005 Atmel Norway -+ -+ This program is free software; you can redistribute it and/or modify it under -+ the terms of the GNU Library 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 Library General Public License for more -+ details. -+ -+ You should have received a copy of the GNU Library 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 -+ -+ Derived in part from the Linux-8086 C library, the GNU C Library, and several -+ other sundry sources. Files within this library are copyright by their -+ respective copyright holders. -+ */ -+ -+#include -+#include -+#include -+ -+#define __NR_mmap2 __NR_mmap -+ -+static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); -+ -+__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) -+{ -+ return mmap2(addr, len, prot, flags, fd, offset >> 12); -+} -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,86 @@ -+/* Low-level functions for atomic operations. AVR32 version. -+ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _ATOMICITY_H -+#define _ATOMICITY_H 1 -+ -+#include -+ -+static inline int -+__attribute__((unused)) -+exchange_and_add (volatile uint32_t *mem, int val) -+{ -+ int tmp, result; -+ -+ __asm__ __volatile__( -+ "/* Inline exchange and add */\n" -+ "1: ssrf 5\n" -+ " ld.w %0, %3\n" -+ " add %1, %0, %4\n" -+ " stcond %2, %1\n" -+ " brne 1b" -+ : "=&r"(result), "=&r"(tmp), "=m"(*mem) -+ : "m"(*mem), "r"(val) -+ : "cc", "memory"); -+ -+ return result; -+} -+ -+static inline void -+__attribute__((unused)) -+atomic_add (volatile uin32_t *mem, int val) -+{ -+ int result; -+ -+ __asm__ __volatile__( -+ "/* Inline atomic add */\n" -+ "1: ssrf 5\n" -+ " ld.w %0, %2\n" -+ " add %0, %3\n" -+ " stcond %2, %0\n" -+ " brne 1b" -+ : "=&r"(result), "=m"(*mem) -+ : "m"(*mem), "r"(val) -+ : "cc", "memory"); -+} -+ -+static inline int -+__attribute__((unused)) -+compare_and_swap(volatile long int *p, long int oldval, long int newval) -+{ -+ long int result, tmp; -+ -+ __asm__ __volatile__( -+ "/* Inline compare and swap */\n" -+ "1: ssrf 5\n" -+ " ld.w %1, %3\n" -+ " cp.w %1, %5\n" -+ " sreq %0\n" -+ " brne 2f\n" -+ " stcond %2, %4\n" -+ " brne 1b\n" -+ "2:" -+ : "=&r"(result), "=&r"(tmp), "=m"(*p) -+ : "m"(*p), "r"(newval), "r"(oldval) -+ : "cc", "memory"); -+ -+ return result; -+} -+ -+#endif /* atomicity.h */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,80 @@ -+/* Macros to swap the order of bytes in integer values. -+ Copyright (C) 2005 Atmel Norway. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#if !defined _BYTESWAP_H && !defined _NETINET_IN_H -+# error "Never use directly; include instead." -+#endif -+ -+#ifndef _BITS_BYTESWAP_H -+#define _BITS_BYTESWAP_H 1 -+ -+/* Swap bytes in 16 bit value. */ -+#if defined __GNUC__ -+# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) -+#else -+/* This is better than nothing. */ -+static __inline unsigned short int -+__bswap_16 (unsigned short int __bsx) -+{ -+ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); -+} -+#endif -+ -+/* Swap bytes in 32 bit value. */ -+#if defined __GNUC__ -+# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) -+#else -+static __inline unsigned int -+__bswap_32 (unsigned int __bsx) -+{ -+ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | -+ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); -+} -+#endif -+ -+#if defined __GNUC__ -+/* Swap bytes in 64 bit value. */ -+# define __bswap_constant_64(x) \ -+ ((((x) & 0xff00000000000000ull) >> 56) \ -+ | (((x) & 0x00ff000000000000ull) >> 40) \ -+ | (((x) & 0x0000ff0000000000ull) >> 24) \ -+ | (((x) & 0x000000ff00000000ull) >> 8) \ -+ | (((x) & 0x00000000ff000000ull) << 8) \ -+ | (((x) & 0x0000000000ff0000ull) << 24) \ -+ | (((x) & 0x000000000000ff00ull) << 40) \ -+ | (((x) & 0x00000000000000ffull) << 56)) -+ -+# define __bswap_64(x) \ -+ (__extension__ \ -+ ({ \ -+ union { \ -+ __extension__ unsigned long long int __ll; \ -+ unsigned int __l[2]; \ -+ } __w, __r; \ -+ if (__builtin_constant_p(x)) \ -+ __r.__ll = __bswap_constant_64(x); \ -+ else { \ -+ __w.__ll = (x); \ -+ __r.__l[0] = __bswap_32(__w.__l[1]); \ -+ __r.__l[1] = __bswap_32(__w.__l[0]); \ -+ } \ -+ __r.__ll; \ -+ })) -+#endif -+ -+#endif /* _BITS_BYTESWAP_H */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,7 @@ -+/* AVR32 is big-endian */ -+ -+#ifndef _ENDIAN_H -+# error "Never use directly; include instead." -+#endif -+ -+#define __BYTE_ORDER __BIG_ENDIAN -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,167 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ * -+ * This file is part of the Linux kernel -+ */ -+#ifndef _FCNTL_H -+# error "Never use directly; include instead." -+#endif -+ -+#include -+ -+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files -+ located on an ext2 file system */ -+#define O_ACCMODE 0003 -+#define O_RDONLY 00 -+#define O_WRONLY 01 -+#define O_RDWR 02 -+#define O_CREAT 0100 /* not fcntl */ -+#define O_EXCL 0200 /* not fcntl */ -+#define O_NOCTTY 0400 /* not fcntl */ -+#define O_TRUNC 01000 /* not fcntl */ -+#define O_APPEND 02000 -+#define O_NONBLOCK 04000 -+#define O_NDELAY O_NONBLOCK -+#define O_SYNC 010000 -+#define O_ASYNC 020000 -+ -+#ifdef __USE_GNU -+# define O_DIRECTORY 040000 /* must be a directory */ -+# define O_NOFOLLOW 0100000 /* don't follow links */ -+# define O_DIRECT 0200000 /* direct disk access */ -+#endif -+ -+#ifdef __USE_LARGEFILE64 -+# define O_LARGEFILE 0400000 -+#endif -+ -+/* For now Linux has synchronisity options for data and read operations. -+ We define the symbols here but let them do the same as O_SYNC since -+ this is a superset. */ -+#if defined __USE_POSIX199309 || defined __USE_UNIX98 -+# define O_DSYNC O_SYNC /* Synchronize data. */ -+# define O_RSYNC O_SYNC /* Synchronize read operations. */ -+#endif -+ -+#define F_DUPFD 0 /* dup */ -+#define F_GETFD 1 /* get close_on_exec */ -+#define F_SETFD 2 /* set/clear close_on_exec */ -+#define F_GETFL 3 /* get file->f_flags */ -+#define F_SETFL 4 /* set file->f_flags */ -+ -+#ifndef __USE_FILE_OFFSET64 -+# define F_GETLK 5 -+# define F_SETLK 6 -+# define F_SETLKW 7 -+#else -+# define F_GETLK F_GETLK64 -+# define F_SETLK F_SETLK64 -+# define F_SETLKW F_SETLKW64 -+#endif -+#define F_GETLK64 12 /* using 'struct flock64' */ -+#define F_SETLK64 13 -+#define F_SETLKW64 14 -+ -+#if defined __USE_BSD || defined __USE_XOPEN2K -+# define F_SETOWN 8 /* for sockets. */ -+# define F_GETOWN 9 /* for sockets. */ -+#endif -+ -+#ifdef __USE_GNU -+# define F_SETSIG 10 /* for sockets. */ -+# define F_GETSIG 11 /* for sockets. */ -+#endif -+ -+#ifdef __USE_GNU -+# define F_SETLEASE 1024 /* Set a lease. */ -+# define F_GETLEASE 1025 /* Enquire what lease is active. */ -+# define F_NOTIFY 1026 /* Request notfications on a directory. */ -+#endif -+ -+/* for F_[GET|SET]FL */ -+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ -+ -+/* for posix fcntl() and lockf() */ -+#define F_RDLCK 0 -+#define F_WRLCK 1 -+#define F_UNLCK 2 -+ -+/* for old implementation of bsd flock () */ -+#define F_EXLCK 4 /* or 3 */ -+#define F_SHLCK 8 /* or 4 */ -+ -+/* for leases */ -+#define F_INPROGRESS 16 -+ -+#ifdef __USE_BSD -+/* operations for bsd flock(), also used by the kernel implementation */ -+# define LOCK_SH 1 /* shared lock */ -+# define LOCK_EX 2 /* exclusive lock */ -+# define LOCK_NB 4 /* or'd with one of the above to prevent -+ blocking */ -+# define LOCK_UN 8 /* remove lock */ -+#endif -+ -+#ifdef __USE_GNU -+# define LOCK_MAND 32 /* This is a mandatory flock */ -+# define LOCK_READ 64 /* ... Which allows concurrent -+ read operations */ -+# define LOCK_WRITE 128 /* ... Which allows concurrent -+ write operations */ -+# define LOCK_RW 192 /* ... Which allows concurrent -+ read & write ops */ -+#endif -+ -+#ifdef __USE_GNU -+/* Types of directory notifications that may be requested with F_NOTIFY. */ -+# define DN_ACCESS 0x00000001 /* File accessed. */ -+# define DN_MODIFY 0x00000002 /* File modified. */ -+# define DN_CREATE 0x00000004 /* File created. */ -+# define DN_DELETE 0x00000008 /* File removed. */ -+# define DN_RENAME 0x00000010 /* File renamed. */ -+# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ -+# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ -+#endif -+ -+struct flock { -+ short l_type; -+ short l_whence; -+#ifndef __USE_FILE_OFFSET64 -+ __off_t l_start; -+ __off_t l_len; -+#else -+ __off64_t l_start; -+ __off64_t l_len; -+#endif -+ __pid_t l_pid; -+}; -+ -+#ifdef __USE_LARGEFILE64 -+struct flock64 { -+ short l_type; -+ short l_whence; -+ __off64_t l_start; -+ __off64_t l_len; -+ __pid_t l_pid; -+}; -+#endif -+ -+/* Define some more compatibility macros to be backward compatible with -+ * BSD systems which did not managed to hide these kernel macros. */ -+#ifdef __USE_BSD -+# define FAPPEND O_APPEND -+# define FFSYNC O_FSYNC -+# define FASYNC O_ASYNC -+# define FNONBLOCK O_NONBLOCK -+# define FNDELAY O_NDELAY -+#endif /* Use BSD. */ -+ -+/* Advise to `posix_fadvise'. */ -+#ifdef __USE_XOPEN2K -+# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ -+# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ -+# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ -+# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ -+# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ -+#endif -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-05-05 09:28:32.000000000 +0200 -@@ -0,0 +1,63 @@ -+#ifndef _BITS_STAT_STRUCT_H -+#define _BITS_STAT_STRUCT_H -+ -+/* -+ * This file provides struct stat, taken from kernel 2.6.4 -+ * (include/asm-avr32/stat.h revision 1.1). -+ */ -+ -+struct kernel_stat { -+ unsigned long st_dev; -+ unsigned long st_ino; -+ unsigned short st_mode; -+ unsigned short st_nlink; -+ unsigned short st_uid; -+ unsigned short st_gid; -+ unsigned long st_rdev; -+ unsigned long st_size; -+ unsigned long st_blksize; -+ unsigned long st_blocks; -+ unsigned long st_atime; -+ unsigned long st_atime_nsec; -+ unsigned long st_mtime; -+ unsigned long st_mtime_nsec; -+ unsigned long st_ctime; -+ unsigned long st_ctime_nsec; -+ unsigned long __unused4; -+ unsigned long __unused5; -+}; -+ -+#define STAT_HAVE_NSEC 1 -+ -+struct kernel_stat64 { -+ unsigned long long st_dev; -+ -+ unsigned long long st_ino; -+ unsigned int st_mode; -+ unsigned int st_nlink; -+ -+ unsigned long st_uid; -+ unsigned long st_gid; -+ -+ unsigned long long st_rdev; -+ -+ long long st_size; -+ unsigned long __pad1; -+ unsigned long st_blksize; -+ -+ unsigned long long st_blocks; -+ -+ unsigned long st_atime; -+ unsigned long st_atime_nsec; -+ -+ unsigned long st_mtime; -+ unsigned long st_mtime_nsec; -+ -+ unsigned long st_ctime; -+ unsigned long st_ctime_nsec; -+ -+ unsigned long __unused1; -+ unsigned long __unused2; -+}; -+ -+#endif /* _BITS_STAT_STRUCT_H */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,56 @@ -+/* Note that we use the exact same include guard #define names -+ * as asm/posix_types.h. This will avoid gratuitous conflicts -+ * with the posix_types.h kernel header, and will ensure that -+ * our private content, and not the kernel header, will win. -+ * -Erik -+ */ -+#ifndef __ASM_AVR32_POSIX_TYPES_H -+#define __ASM_AVR32_POSIX_TYPES_H -+ -+/* -+ * This file is generally used by user-level software, so you need to -+ * be a little careful about namespace pollution etc. Also, we cannot -+ * assume GCC is being used. -+ */ -+ -+typedef unsigned long __kernel_dev_t; -+typedef unsigned long __kernel_ino_t; -+typedef unsigned short __kernel_mode_t; -+typedef unsigned short __kernel_nlink_t; -+typedef long __kernel_off_t; -+typedef int __kernel_pid_t; -+typedef unsigned short __kernel_ipc_pid_t; -+typedef unsigned int __kernel_uid_t; -+typedef unsigned int __kernel_gid_t; -+typedef unsigned long __kernel_size_t; -+typedef int __kernel_ssize_t; -+typedef int __kernel_ptrdiff_t; -+typedef long __kernel_time_t; -+typedef long __kernel_suseconds_t; -+typedef long __kernel_clock_t; -+typedef int __kernel_timer_t; -+typedef int __kernel_clockid_t; -+typedef int __kernel_daddr_t; -+typedef char * __kernel_caddr_t; -+typedef unsigned short __kernel_uid16_t; -+typedef unsigned short __kernel_gid16_t; -+typedef unsigned int __kernel_uid32_t; -+typedef unsigned int __kernel_gid32_t; -+ -+typedef unsigned short __kernel_old_uid_t; -+typedef unsigned short __kernel_old_gid_t; -+typedef unsigned short __kernel_old_dev_t; -+ -+#ifdef __GNUC__ -+typedef long long __kernel_loff_t; -+#endif -+ -+typedef struct { -+#if defined(__USE_ALL) -+ int val[2]; -+#else -+ int __val[2]; -+#endif -+} __kernel_fsid_t; -+ -+#endif /* __ASM_AVR32_POSIX_TYPES_H */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,69 @@ -+/* Machine-dependent definitions for profiling support. AVR32 version. -+ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#define mcount_internal __mcount_internal -+ -+#define _MCOUNT_DECL(frompc, selfpc) \ -+static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc) -+ -+/* -+ * This mcount implementation expects to get called after the prologue -+ * has been run. It also expects that r7 contains a valid frame -+ * pointer. -+ * -+ * When profiling, the compiler should generate something like this at -+ * each function entry: -+ * -+ * pushm r0-r7,lr // lr mandatory, others optional -+ * mov r7, sp -+ * // rest of prologue goes here -+ * mcall pc[.LC1 - .] -+ * // rest of function goes here -+ * .LC1: -+ * .long mcount -+ * -+ * or for PIC: -+ * -+ * pushm r0-r7,lr -+ * mov r7, sp -+ * // rest of prologue goes here -+ * lddpc r0, .LC1 -+ * .L1: rsub r0, pc -+ * mcall r0[mcount@GOT] -+ * // rest of function goes here -+ * .LC1: -+ * .long .L1 - _GLOBAL_OFFSET_TABLE_ -+ * -+ * This way, when mcount() is called, r7 points to the calling -+ * function's return address. It is guaranteed that calling mcount -+ * will clobber no registers except LR, which is unavoidable. -+ */ -+#define MCOUNT asm( \ -+ " .align 4\n" \ -+ " .global _mcount\n" \ -+ " .type _mcount,@function\n" \ -+ "_mcount:\n" \ -+ " pushm r8-r12,lr\n" \ -+ " mov r11, lr\n" \ -+ " ld.w r12, r7[0]\n" \ -+ " rcall __mcount_internal\n" \ -+ " popm r8-r12,pc\n" \ -+ " .size _mcount, . - _mcount\n" \ -+ " .weak mcount\n" \ -+ " mcount = _mcount"); -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,95 @@ -+/* Definitions for POSIX memory map interface. Linux/AVR32 version. -+ Copyright (C) 1997, 2000 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_MMAN_H -+# error "Never include this file directly. Use instead" -+#endif -+ -+/* The following definitions basically come from the kernel headers. -+ But the kernel header is not namespace clean. */ -+ -+ -+/* Protections are chosen from these bits, OR'd together. The -+ implementation does not necessarily support PROT_EXEC or PROT_WRITE -+ without PROT_READ. The only guarantees are that no writing will be -+ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ -+ -+#define PROT_READ 0x1 /* Page can be read. */ -+#define PROT_WRITE 0x2 /* Page can be written. */ -+#define PROT_EXEC 0x4 /* Page can be executed. */ -+#define PROT_NONE 0x0 /* Page can not be accessed. */ -+ -+/* Sharing types (must choose one and only one of these). */ -+#define MAP_SHARED 0x01 /* Share changes. */ -+#define MAP_PRIVATE 0x02 /* Changes are private. */ -+#ifdef __USE_MISC -+# define MAP_TYPE 0x0f /* Mask for type of mapping. */ -+#endif -+ -+/* Other flags. */ -+#define MAP_FIXED 0x10 /* Interpret addr exactly. */ -+#ifdef __USE_MISC -+# define MAP_FILE 0 -+# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ -+# define MAP_ANON MAP_ANONYMOUS -+#endif -+ -+/* These are Linux-specific. */ -+#ifdef __USE_MISC -+# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ -+# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -+# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ -+# define MAP_LOCKED 0x2000 /* Lock the mapping. */ -+# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ -+# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ -+# define MAP_NONBLOCK 0x10000 /* do not block on IO */ -+#endif -+ -+/* Flags to `msync'. */ -+#define MS_ASYNC 1 /* Sync memory asynchronously. */ -+#define MS_SYNC 4 /* Synchronous memory sync. */ -+#define MS_INVALIDATE 2 /* Invalidate the caches. */ -+ -+/* Flags for `mlockall'. */ -+#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ -+#define MCL_FUTURE 2 /* Lock all additions to address -+ space. */ -+ -+/* Flags for `mremap'. */ -+#ifdef __USE_GNU -+# define MREMAP_MAYMOVE 1 -+#endif -+ -+/* Advise to `madvise'. */ -+#ifdef __USE_BSD -+# define MADV_NORMAL 0 /* No further special treatment. */ -+# define MADV_RANDOM 1 /* Expect random page references. */ -+# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define MADV_WILLNEED 3 /* Will need these pages. */ -+# define MADV_DONTNEED 4 /* Don't need these pages. */ -+#endif -+ -+/* The POSIX people had to invent similar names for the same things. */ -+#ifdef __USE_XOPEN2K -+# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ -+# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ -+# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ -+# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ -+#endif -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* Low-level statistical profiling support function. Linux/AVR32 version. -+ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+ -+void -+profil_counter(int signo, siginfo_t *si, struct sigcontext *sc) -+{ -+ profil_count((void *)sc->pc); -+} -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,21 @@ -+/* -+ * Copyright (C) 2004-2005 Atmel Norway -+ */ -+#ifndef _SETJMP_H -+# error "Never include directly; use instead." -+#endif -+ -+#ifndef _ASM -+/* -+ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are -+ * not saved. -+ */ -+typedef int __jmp_buf[11]; -+#endif -+ -+#define __JMP_BUF_SP 4 -+ -+/* Test if longjmp to JMPBUF would unwind the frame containing a local -+ variable at ADDRESS. */ -+#define _JMPBUF_UNWINDS(jmpbuf, address) \ -+ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,143 @@ -+#ifndef _SYSCALL_H -+# error "Never use directly; include instead." -+#endif -+ -+/* -+ * This includes the `__NR_' syscall numbers taken from the -+ * Linux kernel header files. It also defines the traditional -+ * `SYS_' macros for older programs. -+ */ -+#include -+ -+#ifndef __set_errno -+# define __set_errno(val) (*__errno_location()) = (val) -+#endif -+#ifndef SYS_ify -+# define SYS_ify(syscall_name) (__NR_##syscall_name) -+#endif -+ -+#ifndef __ASSEMBLER__ -+ -+#undef _syscall0 -+#define _syscall0(type,name) \ -+ type name(void) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 0)); \ -+ } -+ -+#undef _syscall1 -+#define _syscall1(type,name,type1,arg1) \ -+ type name(type1 arg1) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ -+ } -+ -+#undef _syscall2 -+#define _syscall2(type,name,type1,arg1,type2,arg2) \ -+ type name(type1 arg1, type2 arg2) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ -+ } -+ -+#undef _syscall3 -+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ -+ type name(type1 arg1, type2 arg2, type3 arg3) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 3, arg1, \ -+ arg2, arg3)); \ -+ } -+ -+#undef _syscall4 -+#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ -+ type4,arg4) \ -+ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ -+ arg3, arg4)); \ -+ } -+ -+#undef _syscall5 -+#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ -+ type4,arg4,type5,arg5) \ -+ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ -+ type5 arg5) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ -+ arg3, arg4, arg5)); \ -+ } -+ -+#undef _syscall6 -+#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ -+ type4,arg4,type5,arg5,type6,arg6) \ -+ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ -+ type5 arg5, type6 arg6) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ -+ arg4, arg5, arg6)); \ -+ } -+ -+#undef unlikely -+#define unlikely(x) __builtin_expect((x), 0) -+ -+#undef INLINE_SYSCALL -+#define INLINE_SYSCALL(name, nr, args...) \ -+ ({ \ -+ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ -+ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ -+ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ -+ _sys_result = (unsigned int) -1; \ -+ } \ -+ (int) _sys_result; \ -+ }) -+ -+#undef INTERNAL_SYSCALL_DECL -+#define INTERNAL_SYSCALL_DECL(err) do { } while(0) -+ -+#undef INTERNAL_SYSCALL -+#define INTERNAL_SYSCALL(name, err, nr, args...) \ -+ ({ \ -+ register int _a1 asm ("r12"); \ -+ register int _scno asm("r8") = SYS_ify(name); \ -+ LOAD_ARGS_##nr (args); \ -+ asm volatile ("scall /* syscall " #name " */" \ -+ : "=r" (_a1) \ -+ : "r"(_scno) ASM_ARGS_##nr \ -+ : "lr", "cc", "memory"); \ -+ _a1; \ -+ }) -+ -+#undef INTERNAL_SYSCALL_ERROR_P -+#define INTERNAL_SYSCALL_ERROR_P(val, err) \ -+ ((unsigned int)(val) >= 0xfffff001U) -+ -+#undef INTERNAL_SYSCALL_ERRNO -+#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) -+ -+#define LOAD_ARGS_0() do { } while(0) -+#define ASM_ARGS_0 -+#define LOAD_ARGS_1(a1) \ -+ _a1 = (int) (a1); \ -+ LOAD_ARGS_0() -+#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) -+#define LOAD_ARGS_2(a1, a2) \ -+ register int _a2 asm("r11") = (int)(a2); \ -+ LOAD_ARGS_1(a1) -+#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) -+#define LOAD_ARGS_3(a1, a2, a3) \ -+ register int _a3 asm("r10") = (int)(a3); \ -+ LOAD_ARGS_2(a1, a2) -+#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) -+#define LOAD_ARGS_4(a1, a2, a3, a4) \ -+ register int _a4 asm("r9") = (int)(a4); \ -+ LOAD_ARGS_3(a1, a2, a3) -+#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) -+#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ -+ register int _a5 asm("r5") = (int)(a5); \ -+ LOAD_ARGS_4(a1, a2, a3, a4) -+#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) -+#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ -+ register int _a6 asm("r3") = (int)(a6); \ -+ LOAD_ARGS_5(a1, a2, a3, a4, a5) -+#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) -+ -+#endif /* __ASSEMBLER__ */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1 @@ -+#define __WORDSIZE 32 -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,23 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+#include -+ -+void *__curbrk = 0; -+ -+int brk (void *addr) -+{ -+ void *newbrk; -+ -+ newbrk = INLINE_SYSCALL(brk, 1, addr); -+ -+ __curbrk = newbrk; -+ -+ if (newbrk < addr) { -+ __set_errno (ENOMEM); -+ return -1; -+ } -+ -+ return 0; -+} -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-05-05 09:26:42.000000000 +0200 -@@ -0,0 +1,12 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+ -+ /* This just does a tail-call to __sigsetjmp(env, 0) */ -+ .global _setjmp -+ .type _setjmp,"function" -+ .align 1 -+_setjmp: -+ mov r11, 0 -+ bral __sigsetjmp_internal -+ .size _setjmp, . - _setjmp -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-05-05 09:26:42.000000000 +0200 -@@ -0,0 +1,12 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+ -+ /* This just does a tail-call to __sigsetjmp(env, 1) */ -+ .global setjmp -+ .type setjmp,"function" -+ .align 1 -+setjmp: -+ mov r11, 1 -+ bral __sigsetjmp_internal -+ .size setjmp, . - setjmp -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,37 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+#include -+#include -+ -+/* -+ * I don't know if we can be absolutely certain that the fn and arg -+ * parameters are preserved when returning as the child. If the -+ * compiler stores them in registers (r0-r7), they should be. -+ */ -+int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) -+{ -+ register int (*_fn)(void *arg) = fn; -+ register void *_arg = arg; -+ int err; -+ -+ /* Sanity check the arguments */ -+ err = -EINVAL; -+ if (!fn) -+ goto syscall_error; -+ if (!child_stack) -+ goto syscall_error; -+ -+ err = INLINE_SYSCALL(clone, 2, flags, child_stack); -+ if (err < 0) -+ goto syscall_error; -+ else if (err != 0) -+ return err; -+ -+ _exit(_fn(_arg)); -+ -+syscall_error: -+ __set_errno (-err); -+ return -1; -+} -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S 2006-05-05 09:28:23.000000000 +0200 -@@ -0,0 +1,93 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ * -+ * When we enter _start, the stack looks like this: -+ * argc argument counter -+ * argv[0] pointer to program name -+ * argv[1..argc-1] pointers to program args -+ * NULL -+ * env[0..N] pointers to environment variables -+ * NULL -+ * -+ * r12 contains a function pointer to be registered with `atexit'. -+ * This is how the dynamic linker arranges to have DT_FINI functions -+ * called for shared libraries that have been loaded before this -+ * code runs. -+ * -+ * We're going to call the following function: -+ * __uClibc_main(int (*main)(int, char **, char **), int argc, -+ * char **argv, void (*app_init)(void), void (*app_fini)(void), -+ * void (*rtld_fini)(void), void *stack_end) -+ * -+ * So we need to set up things as follows: -+ * r12 = address of main -+ * r11 = argc -+ * r10 = &argv[0] -+ * r9 = address of _init -+ * r8 = address of _fini -+ * sp[0] = whatever we got passed in r12 -+ */ -+ -+#include -+ -+ .text -+ .global _start -+ .type _start, @function -+_start: -+ /* Clear the frame pointer and link register since this is the outermost frame. */ -+ mov r7, 0 -+ mov lr, 0 -+ -+ ld.w r11, sp++ /* argc */ -+ mov r10, sp /* &argv[0] */ -+ -+ st.w --sp, r10 /* stack_end */ -+ st.w --sp, r12 /* rtld_fini */ -+ -+#ifdef __PIC__ -+ lddpc r6, .L_GOT -+.L_RGOT: -+ rsub r6, pc -+ lda.w r9, _init -+ lda.w r8, _fini -+ lda.w r12, main -+ -+ /* Ok, now run uClibc's main() -- should not return */ -+ call __uClibc_main -+ -+ .align 2 -+.L_GOT: -+ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ -+#else -+ lddpc r9, __init_addr /* app_init */ -+ lddpc r8, __fini_addr /* app_fini */ -+ lddpc r12, __main_addr /* main */ -+ -+ /* Ok, now run uClibc's main() -- should not return */ -+ lddpc pc, ___uClibc_main_addr -+ -+ .align 2 -+__init_addr: -+ .long _init -+__fini_addr: -+ .long _fini -+__main_addr: -+ .long main -+___uClibc_main_addr: -+ .long __uClibc_main -+#endif -+ .size _start, . - _start -+ -+ /* -+ * The LSB says we need this. -+ */ -+ .section ".note.ABI-tag", "a" -+ .align 4 -+ .long 2f - 1f /* namesz */ -+ .long 4f - 3f /* descsz */ -+ .long 1 /* type */ -+1: .asciz "GNU" /* name */ -+2: .align 4 -+3: .long 0 /* Linux executable */ -+ .long 2,6,0 /* Earliest compatible kernel */ -+4: .align 4 -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,17 @@ -+ -+ .section .init -+ .align 2 -+ .global _init -+ .type _init, @function -+_init: -+ /* Use a four-byte instruction to avoid NOPs */ -+ stm --sp, r0-r7,lr -+ .align 2 -+ -+ .section .fini -+ .align 2 -+ .global _fini -+ .type _fini, @function -+_fini: -+ stm --sp, r0-r7,lr -+ .align 2 -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,14 @@ -+ -+ .section .init -+ .align 2 -+ .global _init -+ .type _init, @function -+ ldm sp++, r0-r7,pc -+ .size _init, . - _init -+ -+ .section .fini -+ .align 2 -+ .global _fini -+ .type _fini, @function -+ ldm sp++, r0-r7,pc -+ .size _fini, . - _fini -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,31 @@ -+/* Copyright (C) 2005 Atmel Norway -+ -+ This program is free software; you can redistribute it and/or modify it under -+ the terms of the GNU Library 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 Library General Public License for more -+ details. -+ -+ You should have received a copy of the GNU Library 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 -+ -+ Derived in part from the Linux-8086 C library, the GNU C Library, and several -+ other sundry sources. Files within this library are copyright by their -+ respective copyright holders. -+ */ -+ -+#include -+#include -+#include -+ -+static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); -+ -+__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) -+{ -+ return mmap2(addr, len, prot, flags, fd, offset >> 12); -+} -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S 2006-05-05 09:28:28.000000000 +0200 -@@ -0,0 +1,43 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#define _SETJMP_H -+#define _ASM -+#include -+ -+ .text -+ -+ .global __sigsetjmp -+ .type __sigsetjmp,"function" -+ -+ /* Create a global, hidden symbol for use by setjmp() and _setjmp(). -+ If it's not hidden, the linker will complain about a relative -+ jump to a dynamic symbol when building a shared library. -+ -+ Also, if a user overrides the __sigsetjmp function, he might not -+ expect the setjmp() and _setjmp() function to effectively be -+ overridden as well. */ -+ .global __sigsetjmp_internal -+ .hidden __sigsetjmp_internal -+ .type __sigsetjmp_internal,"function" -+ .align 1 -+__sigsetjmp: -+__sigsetjmp_internal: -+ mustr r8 -+ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr -+ -+ /* Make a tail call to __sigjmp_save; it takes the same args. */ -+#ifdef __PIC__ -+ mov r9, r6 -+ lddpc r6, .LG -+.L1: rsub r6, pc -+ ld.w r8, r6[__sigjmp_save@got] -+ mov r6, r9 -+ mov pc, r8 -+ -+ .align 2 -+.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_ -+#else -+ rjmp __sigjmp_save -+#endif -+ .size __sigsetjmp, . - __sigsetjmp -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,49 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+#include -+#include -+#include -+#include -+ -+#define SA_RESTORER 0x04000000 -+extern void __default_rt_sa_restorer(void); -+ -+/* -+ * If act is not NULL, change the action for sig to *act. -+ * If oact is not NULL, put the old action for sig in *oact. -+ */ -+int __libc_sigaction(int signum, const struct sigaction *act, -+ struct sigaction *oldact) -+{ -+ struct kernel_sigaction kact, koact; -+ int result; -+ -+ if (act) { -+ kact.k_sa_handler = act->sa_handler; -+ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); -+ kact.sa_flags = act->sa_flags; -+ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) -+ kact.sa_restorer = act->sa_restorer; -+ else -+ kact.sa_restorer = __default_rt_sa_restorer; -+ kact.sa_flags |= SA_RESTORER; -+ } -+ -+ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, -+ oldact ? __ptrvalue(&koact) : NULL, -+ _NSIG / 8); -+ -+ if (oldact && result >= 0) { -+ oldact->sa_handler = koact.k_sa_handler; -+ memcpy(&oldact->sa_mask, &koact.sa_mask, -+ sizeof(oldact->sa_mask)); -+ oldact->sa_flags = koact.sa_flags; -+ oldact->sa_restorer = koact.sa_restorer; -+ } -+ -+ return result; -+} -+ -+weak_alias(__libc_sigaction, sigaction) -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,11 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+ -+ .global __default_rt_sa_restorer -+ .type __default_rt_sa_restorer,"function" -+ .align 1 -+__default_rt_sa_restorer: -+ mov r8, __NR_rt_sigreturn -+ scall -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_ELF_H -+#define _SYS_ELF_H 1 -+ -+#warning "This header is obsolete; use instead." -+ -+#include -+ -+#endif /* sys/elf.h */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,48 @@ -+/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_IO_H -+ -+#define _SYS_IO_H 1 -+#include -+ -+__BEGIN_DECLS -+ -+/* If TURN_ON is TRUE, request for permission to do direct i/o on the -+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O -+ permission off for that range. This call requires root privileges. */ -+extern int ioperm (unsigned long int __from, unsigned long int __num, -+ int __turn_on) __THROW; -+ -+/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, -+ permission to access any I/O port is granted. This call requires -+ root privileges. */ -+extern int iopl (int __level) __THROW; -+ -+/* The functions that actually perform reads and writes. */ -+extern unsigned char inb (unsigned long int port) __THROW; -+extern unsigned short int inw (unsigned long int port) __THROW; -+extern unsigned long int inl (unsigned long int port) __THROW; -+ -+extern void outb (unsigned char value, unsigned long int port) __THROW; -+extern void outw (unsigned short value, unsigned long int port) __THROW; -+extern void outl (unsigned long value, unsigned long int port) __THROW; -+ -+__END_DECLS -+ -+#endif /* _SYS_IO_H */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,123 @@ -+/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_PROCFS_H -+#define _SYS_PROCFS_H 1 -+ -+/* This is somewhat modelled after the file of the same name on SVR4 -+ systems. It provides a definition of the core file format for ELF -+ used on Linux. It doesn't have anything to do with the /proc file -+ system, even though Linux has one. -+ -+ Anyway, the whole purpose of this file is for GDB and GDB only. -+ Don't read too much into it. Don't use it for anything other than -+ GDB unless you know what you are doing. */ -+ -+#include -+#include -+#include -+#include -+ -+__BEGIN_DECLS -+ -+/* Type for a general-purpose register. */ -+typedef unsigned long elf_greg_t; -+ -+/* And the whole bunch of them. We could have used `struct -+ user_regs' directly in the typedef, but tradition says that -+ the register set is an array, which does have some peculiar -+ semantics, so leave it that way. */ -+#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) -+typedef elf_greg_t elf_gregset_t[ELF_NGREG]; -+ -+/* Register set for the floating-point registers. */ -+typedef struct user_fpregs elf_fpregset_t; -+ -+/* Signal info. */ -+struct elf_siginfo -+ { -+ int si_signo; /* Signal number. */ -+ int si_code; /* Extra code. */ -+ int si_errno; /* Errno. */ -+ }; -+ -+/* Definitions to generate Intel SVR4-like core files. These mostly -+ have the same names as the SVR4 types with "elf_" tacked on the -+ front to prevent clashes with Linux definitions, and the typedef -+ forms have been avoided. This is mostly like the SVR4 structure, -+ but more Linuxy, with things that Linux does not support and which -+ GDB doesn't really use excluded. */ -+ -+struct elf_prstatus -+ { -+ struct elf_siginfo pr_info; /* Info associated with signal. */ -+ short int pr_cursig; /* Current signal. */ -+ unsigned long int pr_sigpend; /* Set of pending signals. */ -+ unsigned long int pr_sighold; /* Set of held signals. */ -+ __pid_t pr_pid; -+ __pid_t pr_ppid; -+ __pid_t pr_pgrp; -+ __pid_t pr_sid; -+ struct timeval pr_utime; /* User time. */ -+ struct timeval pr_stime; /* System time. */ -+ struct timeval pr_cutime; /* Cumulative user time. */ -+ struct timeval pr_cstime; /* Cumulative system time. */ -+ elf_gregset_t pr_reg; /* GP registers. */ -+ int pr_fpvalid; /* True if math copro being used. */ -+ }; -+ -+ -+#define ELF_PRARGSZ (80) /* Number of chars for args. */ -+ -+struct elf_prpsinfo -+ { -+ char pr_state; /* Numeric process state. */ -+ char pr_sname; /* Char for pr_state. */ -+ char pr_zomb; /* Zombie. */ -+ char pr_nice; /* Nice val. */ -+ unsigned long int pr_flag; /* Flags. */ -+ unsigned short int pr_uid; -+ unsigned short int pr_gid; -+ int pr_pid, pr_ppid, pr_pgrp, pr_sid; -+ /* Lots missing */ -+ char pr_fname[16]; /* Filename of executable. */ -+ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ -+ }; -+ -+/* The rest of this file provides the types for emulation of the -+ Solaris interfaces that should be implemented by -+ users of libthread_db. */ -+ -+/* Addresses. */ -+typedef void *psaddr_t; -+ -+/* Register sets. Linux has different names. */ -+typedef elf_gregset_t prgregset_t; -+typedef elf_fpregset_t prfpregset_t; -+ -+/* We don't have any differences between processes and threads, -+ therefore have only one PID type. */ -+typedef __pid_t lwpid_t; -+ -+/* Process status and info. In the end we do provide typedefs for them. */ -+typedef struct elf_prstatus prstatus_t; -+typedef struct elf_prpsinfo prpsinfo_t; -+ -+__END_DECLS -+ -+#endif /* sys/procfs.h */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,94 @@ -+/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+/* Linux/AVR32 ABI compliant context switching support. */ -+ -+#ifndef _SYS_UCONTEXT_H -+#define _SYS_UCONTEXT_H 1 -+ -+#include -+#include -+#include -+#include -+ -+typedef int greg_t; -+ -+/* Number of general registers. */ -+#define NGREG 16 -+ -+/* Container for all general registers. */ -+typedef elf_gregset_t gregset_t; -+ -+/* Number of each register is the `gregset_t' array. */ -+enum -+{ -+ R0 = 0, -+#define R0 R0 -+ R1 = 1, -+#define R1 R1 -+ R2 = 2, -+#define R2 R2 -+ R3 = 3, -+#define R3 R3 -+ R4 = 4, -+#define R4 R4 -+ R5 = 5, -+#define R5 R5 -+ R6 = 6, -+#define R6 R6 -+ R7 = 7, -+#define R7 R7 -+ R8 = 8, -+#define R8 R8 -+ R9 = 9, -+#define R9 R9 -+ R10 = 10, -+#define R10 R10 -+ R11 = 11, -+#define R11 R11 -+ R12 = 12, -+#define R12 R12 -+ R13 = 13, -+#define R13 R13 -+ R14 = 14, -+#define R14 R14 -+ R15 = 15 -+#define R15 R15 -+}; -+ -+/* Structure to describe FPU registers. */ -+typedef elf_fpregset_t fpregset_t; -+ -+/* Context to describe whole processor state. */ -+typedef struct -+ { -+ gregset_t gregs; -+ fpregset_t fpregs; -+ } mcontext_t; -+ -+/* Userlevel context. */ -+typedef struct ucontext -+{ -+ unsigned long uc_flags; -+ struct ucontext *uc_link; -+ stack_t uc_stack; -+ struct sigcontext uc_mcontext; -+ sigset_t uc_sigmask; /* mask last for extensibility */ -+} ucontext_t; -+ -+#endif /* sys/ucontext.h */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,46 @@ -+#ifndef _SYS_USER_H -+#define _SYS_USER_H -+ -+struct user_fpregs -+{ -+ -+}; -+ -+struct user_regs -+{ -+ unsigned long sr; -+ unsigned long pc; -+ unsigned long lr; -+ unsigned long sp; -+ unsigned long r12; -+ unsigned long r11; -+ unsigned long r10; -+ unsigned long r9; -+ unsigned long r8; -+ unsigned long r7; -+ unsigned long r6; -+ unsigned long r5; -+ unsigned long r4; -+ unsigned long r3; -+ unsigned long r2; -+ unsigned long r1; -+ unsigned long r0; -+ unsigned long r12_orig; -+}; -+ -+struct user -+{ -+ struct user_regs regs; /* general registers */ -+ size_t u_tsize; /* text size (pages) */ -+ size_t u_dsize; /* data size (pages) */ -+ size_t u_ssize; /* stack size (pages) */ -+ unsigned long start_code; /* text starting address */ -+ unsigned long start_data; /* data starting address */ -+ unsigned long start_stack; /* stack starting address */ -+ long int signal; /* signal causing core dump */ -+ struct user_regs * u_ar0; /* help gdb find registers */ -+ unsigned long magic; /* identifies a core file */ -+ char u_comm[32]; /* user command name */ -+}; -+ -+#endif /* _SYS_USER_H */ -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,81 @@ -+/* -+ * syscall for AVR32/uClibc -+ * -+ * Copyright (C) 2004 Atmel Norway -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU Library 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 Library General Public License -+ * for more details. -+ * -+ * You should have received a copy of the GNU Library General Public License -+ * along with this program; if not, write to the Free Software Foundation, -+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+#include -+ -+ .text -+ -+ /* -+ * long int syscall(long int sysno, ...) -+ */ -+ .global syscall -+ .type syscall, @function -+ .align 2 -+syscall: -+ stm --sp, r3,r5,lr -+ sub lr, sp, -12 -+ mov r8, r12 -+ ldm lr, r3,r5,r9-r12 -+ scall -+ cp.w r12, -4095 -+ brlo .Ldone -+ -+#ifdef __PIC__ -+ lddpc r5, .Lgot -+.Lgotcalc: -+ rsub r5, pc -+# ifdef __UCLIBC_HAS_THREADS__ -+ mov r3, r12 -+ mcall r5[__errno_location@got] -+ st.w r12[0], r3 -+# else -+ ld.w r3, r5[errno@got] -+ st.w r3[0], r12 -+# endif -+#else -+# ifdef __UCLIBC_HAS_THREADS__ -+ mov r3, r12 -+ mcall .Lerrno_location -+ st.w r12[0], r3 -+# else -+ lddpc r3, .Lerrno -+ st.w r3[0], r12 -+# endif -+#endif -+ mov r12, -1 -+ -+.Ldone: -+ ldm sp++, r3,r5,pc -+ -+ .align 2 -+#ifdef __PIC__ -+.Lgot: -+ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ -+#else -+# ifdef __UCLIBC_HAS_THREADS__ -+.Lerrno_location: -+ .long __errno_location -+# else -+.Lerrno: -+ .long errno -+# endif -+#endif -+ -+ -+ .size syscall, . - syscall -Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S 2006-04-19 12:48:33.000000000 +0200 -@@ -0,0 +1,55 @@ -+ /* -+ * vfork for uClibc -+ * -+ * Copyright (C) 2005 Atmel Norway -+ */ -+ -+ /* -+ * Clone the process without copying the address space. The -+ * calling process is suspended until the child either exits -+ * or calls execve. -+ * -+ * This all means that we cannot rely on the stack to store -+ * away registers, since they will be overwritten by the child -+ * as soon as it makes another function call (e.g. execve()). -+ * Fortunately, the Linux kernel preserves LR across system calls. -+ */ -+#include -+#include -+ -+ .global __vfork -+ .type __vfork,@function -+ .align 1 -+__vfork: -+ mov r8, __NR_vfork -+ scall -+ cp.w r12, -4096 -+ retls r12 -+ -+ /* vfork failed, so we may use the stack freely */ -+ pushm r4-r7,lr -+#ifdef __PIC__ -+ lddpc r6, .L_GOT -+ rsub r4, r12, 0 -+.L_RGOT: -+ rsub r6, pc -+ mcall r6[__errno_location@got] -+#else -+ rsub r4, r12, 0 -+ mcall .L__errno_location -+#endif -+ st.w r12[0], r4 -+ popm r4-r7,pc,r12=-1 -+ -+ .align 2 -+#ifdef __PIC__ -+.L_GOT: -+ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ -+#else -+.L__errno_location: -+ .long __errno_location -+#endif -+ .size __vfork, . - __vfork -+ -+ .weak vfork -+ vfork = __vfork -Index: uClibc-0.9.28/Rules.mak -=================================================================== ---- uClibc-0.9.28.orig/Rules.mak 2006-05-05 09:26:01.000000000 +0200 -+++ uClibc-0.9.28/Rules.mak 2006-05-05 09:27:17.000000000 +0200 -@@ -231,6 +231,10 @@ ifeq ($(strip $(TARGET_ARCH)),frv) - UCLIBC_LDSO=ld.so.1 - endif - -+ifeq ($(strip $(TARGET_ARCH)),avr32) -+ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 -+endif -+ - # Keep the check_gcc from being needlessly executed - ifndef PIEFLAG - ifneq ($(UCLIBC_BUILD_PIE),y) diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch deleted file mode 100644 index 991e3442c7..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch +++ /dev/null @@ -1,40 +0,0 @@ -From nobody Mon Sep 17 00:00:00 2001 -Subject: [PATCH] Make linkrelax configurable -From: HĂĄvard Skinnemoen -Date: 1133951618 +0100 - -Add a linkrelax option to the configure system which will give -appropriate options to the compiler, assembler and linker to enable -link-time optimizations. - ---- - - Rules.mak | 2 ++ - extra/Configs/Config.avr32 | 4 ++++ - 2 files changed, 6 insertions(+) - -Index: uClibc-0.9.28/Rules.mak -=================================================================== ---- uClibc-0.9.28.orig/Rules.mak 2006-02-08 17:58:53.000000000 +0100 -+++ uClibc-0.9.28/Rules.mak 2006-02-08 17:59:07.000000000 +0100 -@@ -233,6 +233,8 @@ endif - - ifeq ($(strip $(TARGET_ARCH)),avr32) - CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 -+ CPU_CFLAGS-$(LINKRELAX) += -masm-addr-pseudos -Wa,--pic,--linkrelax -+ CPU_LDFLAGS-$(LINKRELAX) += --relax - endif - - # Keep the check_gcc from being needlessly executed -Index: uClibc-0.9.28/extra/Configs/Config.avr32 -=================================================================== ---- uClibc-0.9.28.orig/extra/Configs/Config.avr32 2006-02-08 17:58:53.000000000 +0100 -+++ uClibc-0.9.28/extra/Configs/Config.avr32 2006-02-08 17:59:07.000000000 +0100 -@@ -36,3 +36,7 @@ config CONFIG_AP7000 - bool "AP7000" - - endchoice -+ -+config LINKRELAX -+ bool "Enable linker optimizations" -+ default n diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch deleted file mode 100644 index 8518ccf664..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch +++ /dev/null @@ -1,1139 +0,0 @@ -Subject: [PATCH] AVR32-optimized string operations - -Add hand-optimized AVR32-specific string operations. Some of them -need a bit more testing, though. - ---- - - libc/string/avr32/Makefile | 40 +++++++++++ - libc/string/avr32/bcopy.S | 15 ++++ - libc/string/avr32/bzero.S | 12 +++ - libc/string/avr32/memchr.S | 62 +++++++++++++++++ - libc/string/avr32/memcmp.S | 50 +++++++++++++ - libc/string/avr32/memcpy.S | 110 ++++++++++++++++++++++++++++++ - libc/string/avr32/memmove.S | 114 +++++++++++++++++++++++++++++++ - libc/string/avr32/memset.S | 60 ++++++++++++++++ - libc/string/avr32/strcat.S | 95 ++++++++++++++++++++++++++ - libc/string/avr32/strcmp.S | 80 ++++++++++++++++++++++ - libc/string/avr32/strcpy.S | 63 +++++++++++++++++ - libc/string/avr32/stringtest.c | 144 ++++++++++++++++++++++++++++++++++++++++ - libc/string/avr32/strlen.S | 52 ++++++++++++++ - libc/string/avr32/strncpy.S | 77 +++++++++++++++++++++ - libc/string/avr32/test_memcpy.c | 66 ++++++++++++++++++ - 15 files changed, 1040 insertions(+) - -Index: uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,15 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+ .text -+ .global bcopy -+ .type bcopy, @function -+ .align 1 -+bcopy: -+ /* Swap the first two arguments */ -+ eor r11, r12 -+ eor r12, r11 -+ eor r11, r12 -+ rjmp __memmove -+ .size bcopy, . - bcopy -Index: uClibc-0.9.28-avr32/libc/string/avr32/bzero.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/bzero.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,12 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+ .text -+ .global bzero -+ .type bzero, @function -+ .align 1 -+bzero: -+ mov r10, r11 -+ mov r11, 0 -+ rjmp __memset -Index: uClibc-0.9.28-avr32/libc/string/avr32/Makefile -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,40 @@ -+# Makefile for uClibc -+# -+# Copyright (C) 2000-2003 Erik Andersen -+# -+# This program is free software; you can redistribute it and/or modify it under -+# the terms of the GNU Library 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 Library General Public License for more -+# details. -+# -+# You should have received a copy of the GNU Library 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 -+ -+TOPDIR=../../../ -+include $(TOPDIR)Rules.mak -+ -+SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S -+SSRC += memset.S strcmp.S strlen.S -+# memchr.S, strcat.S, strcpy.S, strncpy.S is broken -+SOBJS := $(patsubst %.S,%.o, $(SSRC)) -+OBJS := $(SOBJS) -+ -+OBJ_LIST:= ../../obj.string.$(TARGET_ARCH) -+ -+all: $(OBJ_LIST) -+ -+$(OBJ_LIST): $(OBJS) -+ echo $(addprefix string/$(TARGET_ARCH)/, $(OBJS)) > $@ -+ -+$(SOBJS): %.o: %.S -+ $(CC) $(ASFLAGS) -c $< -o $@ -+ $(STRIPTOOL) -x -R .note -R .comment $@ -+ -+clean: -+ $(RM) *.[oa] *~ core -Index: uClibc-0.9.28-avr32/libc/string/avr32/memchr.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memchr.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,62 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define str r12 -+#define chr r11 -+#define len r10 -+ -+ .text -+ .global memchr -+ .type memchr, @function -+memchr: -+ or chr, chr, chr << 8 -+ or chr, chr, chr << 16 -+ -+ mov r9, str -+ andl r9, 3, COH -+ brne .Lunaligned_str -+ -+1: sub len, 4 -+ brlt 2f -+ ld.w r8, str++ -+ psub.b r9, r8, r11 -+ tnbz r9 -+ brne 1b -+ -+ sub str, 4 -+ bfextu r9, r8, 24, 8 -+ cp.b r9, r11 -+ reteq str -+ sub str, -1 -+ bfextu r9, r8, 16, 8 -+ cp.b r9, r11 -+ reteq str -+ sub str, -1 -+ bfextu r9, r8, 8, 8 -+ cp.b r9, r11 -+ reteq str -+ sub str, -1 -+ retal str -+ -+2: sub len, -4 -+ reteq 0 -+ -+3: ld.ub r8, str++ -+ cp.w r8, 0 -+ reteq str -+ sub len, 1 -+ brne 3b -+ -+ retal 0 -+ -+.Lunaligned_str: -+1: sub len, 1 -+ retlt 0 -+ ld.ub r8, str++ -+ cp.b r8, r11 -+ reteq str -+ sub r9, 1 -+ brge 1b -+ -+ rjmp .Laligned_search -Index: uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S 2006-10-20 10:42:09.000000000 +0200 -@@ -0,0 +1,50 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway. -+ */ -+ -+#define s1 r12 -+#define s2 r11 -+#define len r10 -+ -+ .text -+ .global memcmp -+ .type memcmp, @function -+ .align 1 -+memcmp: -+ sub len, 4 -+ brlt .Lless_than_4 -+ -+1: ld.w r8, s1++ -+ ld.w r9, s2++ -+ cp.w r8, r9 -+ brne .Lfound_word -+ sub len, 4 -+ brge 1b -+ -+.Lless_than_4: -+ sub len, -4 -+ reteq 0 -+ -+1: ld.ub r8, s1++ -+ ld.ub r9, s2++ -+ sub r8, r9 -+ retne r8 -+ sub len, 1 -+ brgt 1b -+ -+ retal 0 -+ -+.Lfound_word: -+ psub.b r9, r8, r9 -+ bfextu r8, r9, 24, 8 -+ retne r8 -+ bfextu r8, r9, 16, 8 -+ retne r8 -+ bfextu r8, r9, 8, 8 -+ retne r8 -+ retal r9 -+ -+ .size memcmp, . - memcmp -+ -+ .weak bcmp -+ bcmp = memcmp -Index: uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,110 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+/* Don't use r12 as dst since we must return it unmodified */ -+#define dst r9 -+#define src r11 -+#define len r10 -+ -+ .text -+ .global memcpy -+ .type memcpy, @function -+ -+ .global __memcpy -+ .hidden __memcpy -+ .type __memcpy, @function -+memcpy: -+__memcpy: -+ pref src[0] -+ mov dst, r12 -+ -+ /* If we have less than 32 bytes, don't do anything fancy */ -+ cp.w len, 32 -+ brge .Lmore_than_31 -+ -+ sub len, 1 -+ retlt r12 -+1: ld.ub r8, src++ -+ st.b dst++, r8 -+ sub len, 1 -+ brge 1b -+ retal r12 -+ -+.Lmore_than_31: -+ pushm r0-r7, lr -+ -+ /* Check alignment */ -+ mov r8, src -+ andl r8, 31, COH -+ brne .Lunaligned_src -+ mov r8, dst -+ andl r8, 3, COH -+ brne .Lunaligned_dst -+ -+.Laligned_copy: -+ sub len, 32 -+ brlt .Lless_than_32 -+ -+1: /* Copy 32 bytes at a time */ -+ ldm src, r0-r7 -+ sub src, -32 -+ stm dst, r0-r7 -+ sub dst, -32 -+ sub len, 32 -+ brge 1b -+ -+.Lless_than_32: -+ /* Copy 16 more bytes if possible */ -+ sub len, -16 -+ brlt .Lless_than_16 -+ ldm src, r0-r3 -+ sub src, -16 -+ sub len, 16 -+ stm dst, r0-r3 -+ sub dst, -16 -+ -+.Lless_than_16: -+ /* Do the remaining as byte copies */ -+ neg len -+ add pc, pc, len << 2 -+ .rept 15 -+ ld.ub r0, src++ -+ st.b dst++, r0 -+ .endr -+ -+ popm r0-r7, pc -+ -+.Lunaligned_src: -+ /* Make src cacheline-aligned. r8 = (src & 31) */ -+ rsub r8, r8, 32 -+ sub len, r8 -+1: ld.ub r0, src++ -+ st.b dst++, r0 -+ sub r8, 1 -+ brne 1b -+ -+ /* If dst is word-aligned, we're ready to go */ -+ pref src[0] -+ mov r8, 3 -+ tst dst, r8 -+ breq .Laligned_copy -+ -+.Lunaligned_dst: -+ /* src is aligned, but dst is not. Expect bad performance */ -+ sub len, 4 -+ brlt 2f -+1: ld.w r0, src++ -+ st.w dst++, r0 -+ sub len, 4 -+ brge 1b -+ -+2: neg len -+ add pc, pc, len << 2 -+ .rept 3 -+ ld.ub r0, src++ -+ st.b dst++, r0 -+ .endr -+ -+ popm r0-r7, pc -+ .size memcpy, . - memcpy -Index: uClibc-0.9.28-avr32/libc/string/avr32/memmove.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memmove.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,114 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define dst r12 -+#define src r11 -+#define len r10 -+ -+ .text -+ .global memmove -+ .type memmove, @function -+ -+ .global __memmove -+ .hidden __memmove -+ .type __memmove, @function -+memmove: -+__memmove: -+ cp.w src, dst -+ brge __memcpy -+ -+ add dst, len -+ add src, len -+ pref src[-1] -+ -+ /* -+ * The rest is basically the same as in memcpy.S except that -+ * the direction is reversed. -+ */ -+ cp.w len, 32 -+ brge .Lmore_than_31 -+ -+ sub len, 1 -+ retlt r12 -+1: ld.ub r8, --src -+ st.b --dst, r8 -+ sub len, 1 -+ brge 1b -+ retal r12 -+ -+.Lmore_than_31: -+ pushm r0-r7, lr -+ -+ /* Check alignment */ -+ mov r8, src -+ andl r8, 31, COH -+ brne .Lunaligned_src -+ mov r8, r12 -+ andl r8, 3, COH -+ brne .Lunaligned_dst -+ -+.Laligned_copy: -+ sub len, 32 -+ brlt .Lless_than_32 -+ -+1: /* Copy 32 bytes at a time */ -+ sub src, 32 -+ ldm src, r0-r7 -+ sub dst, 32 -+ sub len, 32 -+ stm dst, r0-r7 -+ brge 1b -+ -+.Lless_than_32: -+ /* Copy 16 more bytes if possible */ -+ sub len, -16 -+ brlt .Lless_than_16 -+ sub src, 16 -+ ldm src, r0-r3 -+ sub dst, 16 -+ sub len, 16 -+ stm dst, r0-r3 -+ -+.Lless_than_16: -+ /* Do the remaining as byte copies */ -+ sub len, -16 -+ breq 2f -+1: ld.ub r0, --src -+ st.b --dst, r0 -+ sub len, 1 -+ brne 1b -+ -+2: popm r0-r7, pc -+ -+.Lunaligned_src: -+ /* Make src cacheline-aligned. r8 = (src & 31) */ -+ sub len, r8 -+1: ld.ub r0, --src -+ st.b --dst, r0 -+ sub r8, 1 -+ brne 1b -+ -+ /* If dst is word-aligned, we're ready to go */ -+ pref src[-4] -+ mov r8, 3 -+ tst dst, r8 -+ breq .Laligned_copy -+ -+.Lunaligned_dst: -+ /* src is aligned, but dst is not. Expect bad performance */ -+ sub len, 4 -+ brlt 2f -+1: ld.w r0, --src -+ st.w --dst, r0 -+ sub len, 4 -+ brge 1b -+ -+2: neg len -+ add pc, pc, len << 2 -+ .rept 3 -+ ld.ub r0, --src -+ st.b --dst, r0 -+ .endr -+ -+ popm r0-r7, pc -Index: uClibc-0.9.28-avr32/libc/string/avr32/memset.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memset.S 2006-10-20 10:42:15.000000000 +0200 -@@ -0,0 +1,60 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway. -+ */ -+ -+#define s r12 -+#define c r11 -+#define n r10 -+ -+ .text -+ .global memset -+ .type memset, @function -+ -+ .global __memset -+ .hidden __memset -+ .type __memset, @function -+ -+ .align 1 -+memset: -+__memset: -+ cp.w n, 32 -+ mov r9, s -+ brge .Llarge_memset -+ -+ sub n, 1 -+ retlt s -+1: st.b s++, c -+ sub n, 1 -+ brge 1b -+ -+ retal r9 -+ -+.Llarge_memset: -+ mov r8, r11 -+ mov r11, 3 -+ bfins r8, r8, 8, 8 -+ bfins r8, r8, 16, 16 -+ tst s, r11 -+ breq 2f -+ -+1: st.b s++, r8 -+ sub n, 1 -+ tst s, r11 -+ brne 1b -+ -+2: mov r11, r9 -+ mov r9, r8 -+ sub n, 8 -+ -+3: st.d s++, r8 -+ sub n, 8 -+ brge 3b -+ -+ /* If we are done, n == -8 and we'll skip all st.b insns below */ -+ neg n -+ lsl n, 1 -+ add pc, n -+ .rept 7 -+ st.b s++, r8 -+ .endr -+ retal r11 -Index: uClibc-0.9.28-avr32/libc/string/avr32/strcat.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strcat.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,95 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define s1 r9 -+#define s2 r11 -+ -+ .text -+ .global strcat -+ .type strcat, @function -+ .align 1 -+strcat: -+ mov s1, r12 -+ -+ /* Make sure s1 is word-aligned */ -+ mov r10, s1 -+ andl r10, 3, COH -+ breq 2f -+ -+ add pc, pc, r10 << 3 -+ sub r0, r0, 0 /* 4-byte nop */ -+ ld.ub r8, s1++ -+ sub r8, r8, 0 -+ breq 2f -+ ld.ub r8, s1++ -+ sub r8, r8, 0 -+ breq 3f -+ ld.ub r8, s1++ -+ sub r8, r8, 0 -+ breq 4f -+ -+ /* Find the end of the first string */ -+5: ld.w r8, s1++ -+ tnbz r8 -+ brne 5b -+ -+ sub s1, 4 -+ -+ bfextu r10, r8, 24, 8 -+ cp.w r10, 0 -+ breq 1f -+ sub s1, -1 -+ bfextu r10, r8, 16, 8 -+ cp.w r10, 0 -+ breq 2f -+ sub s1, -1 -+ bfextu r10, r8, 8, 8 -+ cp.w r10, 0 -+ breq 3f -+ sub s1, -1 -+ rjmp 4f -+ -+ /* Now, append s2 */ -+1: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+2: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+3: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+4: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+ -+ /* Copy one word at a time */ -+ ld.w r8, s2++ -+ tnbz r8 -+ breq 2f -+1: st.w r8, s2++ -+ ld.w r8, s2++ -+ tnbz r8 -+ brne 1b -+ -+ /* Copy the remaining bytes */ -+ bfextu r10, r8, 24, 8 -+ st.b s1++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ bfextu r10, r8, 16, 8 -+ st.b s1++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ bfextu r10, r8, 8, 8 -+ st.b s1++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ st.b s1++, r8 -+ retal r12 -+ .size strcat, . - strcat -Index: uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,80 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway. -+ */ -+ -+#define s1 r12 -+#define s2 r11 -+#define len r10 -+ -+ .text -+ .global strcmp -+ .type strcmp, @function -+ .align 1 -+strcmp: -+ mov r8, 3 -+ tst s1, r8 -+ brne .Lunaligned_s1 -+ tst s2, r8 -+ brne .Lunaligned_s2 -+ -+1: ld.w r8, s1++ -+ ld.w r9, s2++ -+ cp.w r8, r9 -+ brne 2f -+ tnbz r8 -+ brne 1b -+ retal 0 -+ -+2: bfextu r12, r8, 24, 8 -+ bfextu r11, r9, 24, 8 -+ sub r12, r11 -+ retne r12 -+ cp.w r11, 0 -+ reteq 0 -+ bfextu r12, r8, 16, 8 -+ bfextu r11, r9, 16, 8 -+ sub r12, r11 -+ retne r12 -+ cp.w r11, 0 -+ reteq 0 -+ bfextu r12, r8, 8, 8 -+ bfextu r11, r9, 8, 8 -+ sub r12, r11 -+ retne r12 -+ cp.w r11, 0 -+ reteq 0 -+ bfextu r12, r8, 0, 8 -+ bfextu r11, r9, 0, 8 -+ sub r12, r11 -+ retal r12 -+ -+.Lunaligned_s1: -+3: tst s1, r8 -+ breq 4f -+ ld.ub r10, s1++ -+ ld.ub r9, s2++ -+ sub r10, r9 -+ retne r10 -+ cp.w r9, 0 -+ brne 3b -+ retal r10 -+ -+4: tst s2, r8 -+ breq 1b -+ -+.Lunaligned_s2: -+ /* -+ * s1 and s2 can't both be aligned, and unaligned word loads -+ * can trigger spurious exceptions if we cross a page boundary. -+ * Do it the slow way... -+ */ -+1: ld.ub r8, s1++ -+ ld.ub r9, s2++ -+ sub r8, r9 -+ retne r8 -+ cp.w r9, 0 -+ brne 1b -+ retal 0 -+ -+ .weak strcoll -+ strcoll = strcmp -Index: uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,63 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ * -+ * To reduce the size, this one might simply call strncpy with len = -1. -+ */ -+ -+#define dst r9 -+#define src r11 -+ -+ .text -+ .global strcpy -+ .type strcpy, @function -+strcpy: -+ mov dst, r12 -+ -+ pref src[0] -+ -+ /* -+ * Check alignment. If src is aligned but dst isn't, we can't -+ * do much about it... -+ */ -+ mov r8, src -+ andl r8, 3 COH -+ brne .Lunaligned_src -+ -+.Laligned_copy: -+1: ld.w r8, src++ -+ tnbz r8 -+ breq 2f -+ st.w dst++, r8 -+ rjmp 1b -+ -+2: /* -+ * Ok, r8 now contains the terminating '\0'. Copy the -+ * remaining bytes individually. -+ */ -+ bfextu r10, r8, 24, 8 -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ bfextu r10, r8, 16, 8 -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ bfextu r10, r8, 8, 8 -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ st.b dst++, r8 -+ retal r12 -+ -+.Lunaligned_src: -+ /* Copy bytes until we're aligned */ -+ rsub r8, r8, 4 -+ add pc, pc, r8 << 3 -+ nop -+ nop -+ ld.ub r10, src++ -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ -+ rjmp .Laligned_copy -Index: uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,144 @@ -+ -+#include -+#include -+#include -+#include -+ -+#define BUF_SIZE (8 * 1024) -+ -+static char *buf1; -+static char *buf1_ref; -+static char *buf2; -+ -+extern void *optimized_memcpy(void *dest, void *src, size_t len); -+extern void *optimized_memmove(void *dest, void *src, size_t len); -+extern char *optimized_strcpy(char *dest, char *src); -+extern char *optimized_strncpy(char *dest, char *src, size_t len); -+ -+void dump_mismatch(char *buf, char *ref, size_t len) -+{ -+ int i, j; -+ -+ for (i = 0; i < len; i += 16) { -+ if (memcmp(buf + i, ref + i, 16) == 0) -+ continue; -+ -+ printf("%4x buf:", i); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", buf[j]); -+ printf("\n ref:"); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", ref[j]); -+ printf("\n"); -+ } -+} -+ -+static void test_memcpy(int src_offset, int dst_offset, int len) -+{ -+ clock_t start, old, new; -+ int i; -+ -+ memset(buf1, 0x55, BUF_SIZE); -+ memset(buf1_ref, 0x55, BUF_SIZE); -+ memset(buf2, 0xaa, BUF_SIZE); -+ -+ printf("Testing memcpy with offsets %d => %d and len %d...", -+ src_offset, dst_offset, len); -+ -+ start = clock(); -+ for (i = 0; i < 8192; i++) -+ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len); -+ new = clock() - start; -+ start = clock(); -+ for ( i = 0; i < 8192; i++) -+ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); -+ old = clock() - start; -+ -+ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) -+ printf("OK\n"); -+ else { -+ printf("FAILED\n"); -+ dump_mismatch(buf1, buf1_ref, BUF_SIZE); -+ } -+ printf("CPU time used: %d vs. %d\n", new, old); -+} -+ -+static void test_memmove(int src_offset, int dst_offset, int len) -+{ -+ clock_t start, old, new; -+ -+ memset(buf1, 0x55, BUF_SIZE); -+ memset(buf1_ref, 0x55, BUF_SIZE); -+ memset(buf2, 0xaa, BUF_SIZE); -+ -+ printf("Testing memmove with offsets %d => %d and len %d...", -+ src_offset, dst_offset, len); -+ -+ start = clock(); -+ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len); -+ new = clock() - start; -+ start = clock(); -+ memmove(buf1_ref + dst_offset, buf2 + src_offset, len); -+ old = clock() - start; -+ -+ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) -+ printf("OK\n"); -+ else { -+ printf("FAILED\n"); -+ dump_mismatch(buf1, buf1_ref, BUF_SIZE); -+ } -+ printf("CPU time used: %d vs. %d\n", new, old); -+} -+ -+int main(int argc, char *argv[]) -+{ -+ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); -+ if (buf2 == MAP_FAILED) { -+ perror("Failed to allocate memory for buf2"); -+ return 1; -+ } -+ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); -+ if (buf1 == MAP_FAILED) { -+ perror("Failed to allocate memory for buf1"); -+ return 1; -+ } -+ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); -+ if (buf1_ref == MAP_FAILED) { -+ perror("Failed to allocate memory for buf1_ref"); -+ return 1; -+ } -+ printf("\n === MEMCPY ===\n\n"); -+ -+ test_memcpy(0, 0, BUF_SIZE - 32); -+ test_memcpy(0, 0, 1); -+ test_memcpy(0, 0, 31); -+ test_memcpy(0, 0, 32); -+ test_memcpy(0, 0, 127); -+ test_memcpy(0, 0, 128); -+ test_memcpy(4, 4, BUF_SIZE - 32 - 4); -+ test_memcpy(1, 1, BUF_SIZE - 32 - 1); -+ test_memcpy(1, 1, 126); -+ test_memcpy(0, 3, 128); -+ test_memcpy(1, 4, 128); -+ test_memcpy(0, 0, 0); -+ -+ printf("\n === MEMMOVE ===\n\n"); -+ -+ test_memmove(0, 0, BUF_SIZE - 32); -+ test_memmove(0, 0, 1); -+ test_memmove(0, 0, 31); -+ test_memmove(0, 0, 32); -+ test_memmove(0, 0, BUF_SIZE - 33); -+ test_memmove(0, 0, 128); -+ test_memmove(4, 4, BUF_SIZE - 32 - 4); -+ test_memmove(1, 1, BUF_SIZE - 32 - 1); -+ test_memmove(1, 1, BUF_SIZE - 130); -+ test_memmove(0, 3, BUF_SIZE - 128); -+ test_memmove(1, 4, BUF_SIZE - 128); -+ test_memmove(0, 0, 0); -+ -+ return 0; -+} -Index: uClibc-0.9.28-avr32/libc/string/avr32/strlen.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strlen.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,52 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define str r12 -+ -+ .text -+ .global strlen -+ .type strlen, @function -+strlen: -+ mov r11, r12 -+ -+ mov r9, str -+ andl r9, 3, COH -+ brne .Lunaligned_str -+ -+1: ld.w r8, str++ -+ tnbz r8 -+ brne 1b -+ -+ sub r12, r11 -+ bfextu r9, r8, 24, 8 -+ cp.w r9, 0 -+ subeq r12, 4 -+ reteq r12 -+ bfextu r9, r8, 16, 8 -+ cp.w r9, 0 -+ subeq r12, 3 -+ reteq r12 -+ bfextu r9, r8, 8, 8 -+ cp.w r9, 0 -+ subeq r12, 2 -+ reteq r12 -+ sub r12, 1 -+ retal r12 -+ -+.Lunaligned_str: -+ add pc, pc, r9 << 3 -+ sub r0, r0, 0 /* 4-byte nop */ -+ ld.ub r8, str++ -+ sub r8, r8, 0 -+ breq 1f -+ ld.ub r8, str++ -+ sub r8, r8, 0 -+ breq 1f -+ ld.ub r8, str++ -+ sub r8, r8, 0 -+ brne 1b -+ -+1: sub r12, 1 -+ sub r12, r11 -+ retal r12 -Index: uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,77 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define dst r9 -+#define src r11 -+ -+ .text -+ .global strcpy -+ .type strncpy, @function -+strncpy: -+ mov dst, r12 -+ -+ pref src[0] -+ mov dst, r12 -+ -+ /* -+ * Check alignment. If src is aligned but dst isn't, we can't -+ * do much about it... -+ */ -+ mov r8, src -+ andl r8, 3 COH -+ brne .Lunaligned_src -+ -+.Laligned_copy: -+ sub r10, 4 -+ brlt 3f -+1: ld.w r8, src++ -+ tnbz r8 -+ breq 2f -+ st.w dst++, r8 -+ sub r10, 4 -+ brne 1b -+ -+3: sub r10, -4 -+ reteq r12 -+ -+ /* This is safe as long as src is word-aligned and r10 > 0 */ -+ ld.w r8, src++ -+ -+2: /* -+ * Ok, r8 now contains the terminating '\0'. Copy the -+ * remaining bytes individually. -+ */ -+ bfextu r11, r8, 24, 8 -+ st.b dst++, r11 -+ cp.w r11, 0 -+ reteq r12 -+ sub r10, 1 -+ reteq r12 -+ bfextu r11, r8, 16, 8 -+ st.b dst++, r11 -+ cp.w r11, 0 -+ reteq r12 -+ sub r10, 1 -+ reteq r12 -+ bfextu r11, r8, 8, 8 -+ st.b dst++, r11 -+ cp.w r11, 0 -+ reteq r12 -+ sub r10, 1 -+ reteq r12 -+ st.b dst++, r8 -+ retal r12 -+ -+.Lunaligned_src: -+ /* Copy bytes until we're aligned */ -+ min r8, r8, r10 -+ sub r10, r8 -+ sub r8, 1 -+ retlt r12 -+1: ld.ub r10, src++ -+ st.b dst++, r10 -+ sub r8, 1 -+ brge 1b -+ -+ rjmp .Laligned_copy -Index: uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,66 @@ -+ -+#include -+#include -+ -+#define BUF_SIZE 32768 -+ -+static char buf1[BUF_SIZE] __attribute__((aligned(32))); -+static char buf1_ref[BUF_SIZE] __attribute__((aligned(32))); -+static char buf2[BUF_SIZE] __attribute__((aligned(32))); -+ -+extern void *new_memcpy(void *dest, void *src, size_t len); -+ -+void dump_mismatch(char *buf, char *ref, size_t len) -+{ -+ int i, j; -+ -+ for (i = 0; i < len; i += 16) { -+ if (memcmp(buf + i, ref + i, 16) == 0) -+ continue; -+ -+ printf("% 4x buf:", i); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", buf[j]); -+ printf("\n ref:"); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", ref[j]); -+ printf("\n"); -+ } -+} -+ -+void test(int src_offset, int dst_offset, int len) -+{ -+ memset(buf1, 0x55, sizeof(buf1)); -+ memset(buf1_ref, 0x55, sizeof(buf1_ref)); -+ memset(buf2, 0xaa, sizeof(buf2)); -+ -+ printf("Testing with offsets %d => %d and len %d...", -+ src_offset, dst_offset, len); -+ -+ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len); -+ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); -+ -+ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0) -+ printf("OK\n"); -+ else { -+ printf("FAILED\n"); -+ dump_mismatch(buf1, buf1_ref, sizeof(buf1)); -+ } -+} -+ -+int main(int argc, char *argv[]) -+{ -+ test(0, 0, BUF_SIZE); -+ test(0, 0, 1); -+ test(0, 0, 31); -+ test(0, 0, 32); -+ test(0, 0, 127); -+ test(0, 0, 128); -+ test(4, 4, BUF_SIZE - 4); -+ test(1, 1, BUF_SIZE - 1); -+ test(1, 1, 126); -+ test(0, 3, 128); -+ test(1, 4, 128); -+ -+ return 0; -+} diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch deleted file mode 100644 index 3319f98de9..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch +++ /dev/null @@ -1,24 +0,0 @@ -Subject: [PATCH] Fix __libc_fcntl64 prototype in __syscall_fcntl.c - -__libc_fcntl64 is a varargs function and should be declared as such. -Otherwise, the gcc compiler for AVR32, and perhaps other architectures, -will use the wrong calling convention. - ---- - - libc/sysdeps/linux/common/__syscall_fcntl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c -=================================================================== ---- uClibc-0.9.28.orig/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-02-07 16:48:32.000000000 +0100 -+++ uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-02-07 17:19:09.000000000 +0100 -@@ -12,7 +12,7 @@ - #include - - #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 --extern int __libc_fcntl64(int fd, int cmd, long arg); -+extern int __libc_fcntl64(int fd, int cmd, ...); - #endif - - #define __NR___syscall_fcntl __NR_fcntl diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch deleted file mode 100644 index aafdc8cd7f..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch +++ /dev/null @@ -1,30 +0,0 @@ -From nobody Mon Sep 17 00:00:00 2001 -From: HĂĄvard Skinnemoen -Date: Fri Apr 7 17:10:32 2006 +0200 -Subject: [PATCH] Fix broken __libc_open declaration in open64.c - -__libc_open is a vararg function and should therefore be declared as -such. Fixes bug #4190. - ---- - - libc/sysdeps/linux/common/open64.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -70f2c81903327a8a346e370830932b80045ab04e -diff --git a/libc/sysdeps/linux/common/open64.c b/libc/sysdeps/linux/common/open64.c -index 543aa13..d9a27a7 100644 ---- a/libc/sysdeps/linux/common/open64.c -+++ b/libc/sysdeps/linux/common/open64.c -@@ -26,7 +26,7 @@ - #endif - - #ifdef __UCLIBC_HAS_LFS__ --extern int __libc_open (__const char *file, int oflag, mode_t mode); -+extern int __libc_open (__const char *file, int oflag, ...); - - /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, - a third argument is the file protection. */ --- -1.2.4 - diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch deleted file mode 100644 index d68576b9bd..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch +++ /dev/null @@ -1,19 +0,0 @@ -Subject: [PATCH] Fix getrusage argument type - -The first argument to getrusage is of type __rusage_who_t, not int. -This patch fixes that. ---- - - libc/sysdeps/linux/common/getrusage.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c -=================================================================== ---- uClibc-0.9.28.orig/libc/sysdeps/linux/common/getrusage.c 2006-02-07 17:18:22.000000000 +0100 -+++ uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c 2006-02-07 17:18:31.000000000 +0100 -@@ -10,4 +10,4 @@ - #include "syscalls.h" - #include - #include --_syscall2(int, getrusage, int, who, struct rusage *, usage); -+_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage); diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch deleted file mode 100644 index dd61f174a7..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch +++ /dev/null @@ -1,25 +0,0 @@ -Subject: [PATCH] ldd: AVR32 support - -Add AVR32-specific definitions to ldd. - ---- - - utils/ldd.c | 5 +++++ - 1 file changed, 5 insertions(+) - -Index: uClibc-0.9.28/utils/ldd.c -=================================================================== ---- uClibc-0.9.28.orig/utils/ldd.c 2006-02-07 16:48:02.000000000 +0100 -+++ uClibc-0.9.28/utils/ldd.c 2006-02-07 17:13:00.000000000 +0100 -@@ -56,6 +56,11 @@ - #define ELFCLASSM ELFCLASS32 - #endif - -+#if defined(__avr32__) -+#define MATCH_MACHINE(x) (x == EM_AVR32) -+#define ELFCLASSM ELFCLASS32 -+#endif -+ - #if defined(__s390__) - #define MATCH_MACHINE(x) (x == EM_S390) - #define ELFCLASSM ELFCLASS32 diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch deleted file mode 100644 index cf0e677ffe..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch +++ /dev/null @@ -1,24 +0,0 @@ -Subject: [PATCH] ldso: Always inline _dl_memcpy() - -On some gcc versions, inline is merely a hint. AVR32 depends on this -function actually getting inlined, so we need to use __always_inline -instead of just inline. - ---- - - ldso/include/dl-string.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: uClibc-0.9.28/ldso/include/dl-string.h -=================================================================== ---- uClibc-0.9.28.orig/ldso/include/dl-string.h 2006-02-07 17:01:28.000000000 +0100 -+++ uClibc-0.9.28/ldso/include/dl-string.h 2006-02-07 17:03:02.000000000 +0100 -@@ -134,7 +134,7 @@ static inline char * _dl_strstr(const ch - } while (1); - } - --static inline void * _dl_memcpy(void * dst, const void * src, size_t len) -+static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) - { - register char *a = dst-1; - register const char *b = src-1; diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch deleted file mode 100644 index e6f5c42585..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch +++ /dev/null @@ -1,107 +0,0 @@ -Subject: [PATCH] ldso: Always inline system calls - -Some versions of gcc consider inline merely a hint. AVR32 depends on -the system calls actually being inlined, so we need to use -__always_inline instead of just inline. - ---- - - ldso/include/dl-syscall.h | 38 +++++++++++++++++++------------------- - 1 file changed, 19 insertions(+), 19 deletions(-) - -Index: uClibc-0.9.28/ldso/include/dl-syscall.h -=================================================================== ---- uClibc-0.9.28.orig/ldso/include/dl-syscall.h 2006-02-07 17:07:06.000000000 +0100 -+++ uClibc-0.9.28/ldso/include/dl-syscall.h 2006-02-07 17:08:47.000000000 +0100 -@@ -60,59 +60,59 @@ - dynamic linking at all, so we cannot return any error codes. - We just punt if there is an error. */ - #define __NR__dl_exit __NR_exit --static inline _syscall1(void, _dl_exit, int, status); -+static __always_inline _syscall1(void, _dl_exit, int, status); - - #define __NR__dl_close __NR_close --static inline _syscall1(int, _dl_close, int, fd); -+static __always_inline _syscall1(int, _dl_close, int, fd); - - #define __NR__dl_open __NR_open --static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); -+static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); - - #define __NR__dl_write __NR_write --static inline _syscall3(unsigned long, _dl_write, int, fd, -+static __always_inline _syscall3(unsigned long, _dl_write, int, fd, - const void *, buf, unsigned long, count); - - #define __NR__dl_read __NR_read --static inline _syscall3(unsigned long, _dl_read, int, fd, -+static __always_inline _syscall3(unsigned long, _dl_read, int, fd, - const void *, buf, unsigned long, count); - - #define __NR__dl_mprotect __NR_mprotect --static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); -+static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); - - #define __NR__dl_stat __NR_stat --static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); -+static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); - - #define __NR__dl_munmap __NR_munmap --static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); -+static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); - - #define __NR__dl_getuid __NR_getuid --static inline _syscall0(uid_t, _dl_getuid); -+static __always_inline _syscall0(uid_t, _dl_getuid); - - #define __NR__dl_geteuid __NR_geteuid --static inline _syscall0(uid_t, _dl_geteuid); -+static __always_inline _syscall0(uid_t, _dl_geteuid); - - #define __NR__dl_getgid __NR_getgid --static inline _syscall0(gid_t, _dl_getgid); -+static __always_inline _syscall0(gid_t, _dl_getgid); - - #define __NR__dl_getegid __NR_getegid --static inline _syscall0(gid_t, _dl_getegid); -+static __always_inline _syscall0(gid_t, _dl_getegid); - - #define __NR__dl_getpid __NR_getpid --static inline _syscall0(gid_t, _dl_getpid); -+static __always_inline _syscall0(gid_t, _dl_getpid); - - #define __NR__dl_readlink __NR_readlink --static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); -+static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); - - #ifdef __NR_mmap - #ifdef MMAP_HAS_6_ARGS - #define __NR__dl_mmap __NR_mmap --static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, -+static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, - int, prot, int, flags, int, fd, off_t, offset); - #else - #define __NR__dl_mmap_real __NR_mmap --static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); -+static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); - --static inline void * _dl_mmap(void * addr, unsigned long size, int prot, -+static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, - int flags, int fd, unsigned long offset) - { - unsigned long buffer[6]; -@@ -128,12 +128,12 @@ static inline void * _dl_mmap(void * add - #endif - #elif defined __NR_mmap2 - #define __NR___syscall_mmap2 __NR_mmap2 --static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, -+static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, - size_t, len, int, prot, int, flags, int, fd, off_t, offset); - /*always 12, even on architectures where PAGE_SHIFT != 12 */ - #define MMAP2_PAGE_SHIFT 12 - #define MAP_FAILED ((void *) -1) --static inline void * _dl_mmap(void * addr, unsigned long size, int prot, -+static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, - int flags, int fd, unsigned long offset) - { - if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch deleted file mode 100644 index ddeb84d069..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch +++ /dev/null @@ -1,526 +0,0 @@ -Subject: [PATCH] ldso: AVR32 support - -This implements the AVR32-specific parts of the dynamic linker. - ---- - - ldso/ldso/avr32/dl-debug.h | 45 +++++++++ - ldso/ldso/avr32/dl-startup.h | 110 ++++++++++++++++++++++++ - ldso/ldso/avr32/dl-syscalls.h | 5 + - ldso/ldso/avr32/dl-sysdep.h | 103 ++++++++++++++++++++++ - ldso/ldso/avr32/elfinterp.c | 191 ++++++++++++++++++++++++++++++++++++++++++ - ldso/ldso/avr32/resolve.S | 28 ++++++ - 6 files changed, 482 insertions(+) - -Index: uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h 2006-05-05 09:30:43.000000000 +0200 -@@ -0,0 +1,45 @@ -+/* -+ * AVR32 ELF shared libary loader support -+ * -+ * Copyright (C) 2005 Atmel Norway -+ * All rights reserved. -+ * -+ * 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. The name of the above contributors may not be -+ * used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. -+ */ -+ -+static const char *_dl_reltypes_tab[] = { -+ "R_AVR32_NONE", -+ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", -+ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", -+ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", -+ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", -+ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", -+ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", -+ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", -+ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", -+ "R_AVR32_HI16", "R_AVR32_LO16", -+ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", -+ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", -+ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", -+ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", -+ "R_AVR32_ALIGN", -+}; -Index: uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h 2006-05-05 09:29:45.000000000 +0200 -@@ -0,0 +1,110 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * Architecture specific code used by dl-startup.c -+ * Copyright (C) 2005 Atmel Norway -+ */ -+ -+/* This is the library loader's main entry point. Let _dl_boot2 do its -+ * initializations and jump to the application's entry point -+ * afterwards. */ -+asm( " .text\n" -+ " .global _start\n" -+ " .type _start,@function\n" -+ "_start:\n" -+ /* All arguments are on the stack initially */ -+ " mov r12, sp\n" -+ " rcall _dl_start\n" -+ /* Returns user entry point in r12. Save it. */ -+ " mov r0, r12\n" -+ /* We're PIC, so get the Global Offset Table */ -+ " lddpc r6, .L_GOT\n" -+ ".L_RGOT:\n" -+ " rsub r6, pc\n" -+ /* Adjust argc and argv according to _dl_skip_args */ -+ " ld.w r1, r6[_dl_skip_args@got]\n" -+ " ld.w r1, r1[0]\n" -+ " ld.w r2, sp++\n" -+ " sub r2, r1\n" -+ " add sp, sp, r1 << 2\n" -+ " st.w --sp, r2\n" -+ /* Load the finalizer function */ -+ " ld.w r12, r6[_dl_fini@got]\n" -+ /* Jump to the user's entry point */ -+ " mov pc, r0\n\n" -+ -+ " .align 2\n" -+ ".L_GOT:" -+ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" -+ " .size _start, . - _start\n" -+ " .previous\n"); -+ -+/* Get a pointer to the argv array. On many platforms this can be just -+ * the address if the first argument, on other platforms we need to -+ * do something a little more subtle here. */ -+#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) -+ -+ -+/* We can't call functions before the GOT has been initialized */ -+#define NO_FUNCS_BEFORE_BOOTSTRAP -+ -+/* -+ * Relocate the GOT during dynamic loader bootstrap. This will add -+ * the load address to all entries in the GOT, which is necessary -+ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the -+ * GOT. -+ */ -+static __always_inline -+void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) -+{ -+ Elf32_Addr i, nr_got; -+ register Elf32_Addr *__r6 __asm__("r6"); -+ Elf32_Addr *got = __r6; -+ -+ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); -+ for (i = 2; i < nr_got; i++) -+ got[i] += tpnt->loadaddr; -+} -+ -+#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) -+ -+/* Handle relocation of the symbols in the dynamic loader. */ -+static __always_inline -+void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, -+ unsigned long symbol_addr, -+ unsigned long load_addr, Elf32_Sym *symtab) -+{ -+ switch(ELF32_R_TYPE(rpnt->r_info)) { -+ case R_AVR32_NONE: -+ break; -+ case R_AVR32_GLOB_DAT: -+ case R_AVR32_JMP_SLOT: -+ *reloc_addr = symbol_addr; -+ break; -+ case R_AVR32_RELATIVE: -+ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); -+ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); -+ SEND_STDERR_DEBUG(" + "); -+ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); -+ *reloc_addr = load_addr + rpnt->r_addend; -+ break; -+ default: -+ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); -+ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); -+ SEND_STDERR("REL, SYMBOL, LOAD: "); -+ SEND_ADDRESS_STDERR(reloc_addr, 0); -+ SEND_STDERR(", "); -+ SEND_ADDRESS_STDERR(symbol_addr, 0); -+ SEND_STDERR(", "); -+ SEND_ADDRESS_STDERR(load_addr, 1); -+ _dl_exit(1); -+ } -+} -+ -+/* Transfer control to the user's application, once the dynamic loader -+ * is done. This routine has to exit the current function, then call -+ * the _dl_elf_main function. -+ * -+ * Since our _dl_boot will simply call whatever is returned by -+ * _dl_boot2, we can just return the address we're supposed to -+ * call. */ -+#define START() return _dl_elf_main; -Index: uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h 2006-05-05 09:29:25.000000000 +0200 -@@ -0,0 +1,5 @@ -+/* We can't use the real errno in ldso, since it has not yet -+ * been dynamicly linked in yet. */ -+extern int _dl_errno; -+#define __set_errno(X) {(_dl_errno) = (X);} -+#include "sys/syscall.h" -Index: uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h 2006-05-05 09:30:43.000000000 +0200 -@@ -0,0 +1,103 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * Various assembly language/system dependent hacks that are required -+ * so that we can minimize the amount of platform specific code. -+ * Copyright (C) 2004-2005 Atmel Norway -+ */ -+ -+/* Define this if the system uses RELOCA. */ -+#define ELF_USES_RELOCA -+ -+#include -+ -+#define ARCH_NUM 1 -+#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) -+ -+#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ -+ do { \ -+ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ -+ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ -+ } while (0) -+ -+/* Initialization sequence for the application/library GOT. */ -+#define INIT_GOT(GOT_BASE,MODULE) \ -+ do { \ -+ unsigned long i, nr_got; \ -+ \ -+ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ -+ GOT_BASE[1] = (unsigned long) MODULE; \ -+ \ -+ /* Add load address displacement to all GOT entries */ \ -+ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ -+ for (i = 2; i < nr_got; i++) \ -+ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ -+ } while (0) -+ -+#define do_rem(result, n, base) ((result) = (n) % (base)) -+ -+/* Here we define the magic numbers that this dynamic loader should accept */ -+#define MAGIC1 EM_AVR32 -+#undef MAGIC2 -+ -+/* Used for error messages */ -+#define ELF_TARGET "AVR32" -+ -+unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); -+ -+/* 4096 bytes alignment */ -+#define PAGE_ALIGN 0xfffff000 -+#define ADDR_ALIGN 0xfff -+#define OFFS_ALIGN 0x7ffff000 -+ -+#define elf_machine_type_class(type) \ -+ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) -+ -+/* AVR32 doesn't need any COPY relocs */ -+#define DL_NO_COPY_RELOCS -+ -+/* Return the link-time address of _DYNAMIC. Conveniently, this is the -+ first element of the GOT. This must be inlined in a function which -+ uses global data. */ -+static inline Elf32_Addr -+elf_machine_dynamic (void) -+{ -+ register Elf32_Addr *got asm ("r6"); -+ return *got; -+} -+ -+/* Return the run-time load address of the shared object. */ -+static inline Elf32_Addr -+elf_machine_load_address (void) -+{ -+ extern void __dl_start asm("_dl_start"); -+ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; -+ Elf32_Addr pcrel_addr; -+ -+ asm (" lddpc %0, 2f\n" -+ "1: add %0, pc\n" -+ " rjmp 3f\n" -+ " .align 2\n" -+ "2: .long _dl_start - 1b\n" -+ "3:\n" -+ : "=r"(pcrel_addr) : : "cc"); -+ -+ return pcrel_addr - got_addr; -+} -+ -+/* -+ * Perform any RELATIVE relocations specified by DT_RELCOUNT. -+ * Currently, we don't use that tag, but we might in the future as -+ * this would reduce the startup time somewhat (although probably not by much). -+ */ -+static inline void -+elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, -+ Elf32_Word relative_count) -+{ -+ Elf32_Rela *rpnt = (void *)rel_addr; -+ -+ do { -+ Elf32_Addr *reloc_addr; -+ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); -+ *reloc_addr = load_off + rpnt->r_addend; -+ } while (--relative_count); -+} -Index: uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c 2006-05-05 09:30:43.000000000 +0200 -@@ -0,0 +1,191 @@ -+/* -+ * AVR32 ELF shared library loader suppport -+ * -+ * Copyright (C) 2004-2006 Atmel Corporation -+ * -+ * All rights reserved. -+ * -+ * 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. The name of the above contributors may not be -+ * used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. -+ */ -+ -+unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) -+{ -+ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; -+ Elf32_Sym *sym; -+ unsigned long local_gotno; -+ unsigned long gotsym; -+ unsigned long new_addr; -+ char *strtab, *symname; -+ unsigned long *entry; -+ unsigned long sym_index = got_offset / 4; -+ -+#if 0 -+ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; -+ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; -+ -+ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) -+ + sym_index; -+ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); -+ symname = strtab + sym->st_name; -+ -+#if 0 -+ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, -+ tpnt->symbol_scope, tpnt, -+ resolver); -+#endif -+ -+ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); -+ *entry = new_addr; -+#endif -+ -+ return new_addr; -+} -+ -+static int -+_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, -+ unsigned long rel_addr, unsigned long rel_size, -+ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, -+ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) -+{ -+ Elf32_Sym *symtab; -+ Elf32_Rela *rpnt; -+ char *strtab; -+ int i; -+ -+ rpnt = (Elf32_Rela *)rel_addr; -+ rel_size /= sizeof(Elf32_Rela); -+ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; -+ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; -+ -+ for (i = 0; i < rel_size; i++, rpnt++) { -+ int symtab_index, res; -+ -+ symtab_index = ELF32_R_SYM(rpnt->r_info); -+ -+ debug_sym(symtab, strtab, symtab_index); -+ debug_reloc(symtab, strtab, rpnt); -+ -+ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); -+ -+ if (res == 0) -+ continue; -+ -+ _dl_dprintf(2, "\n%s: ", _dl_progname); -+ -+ if (symtab_index) -+ _dl_dprintf(2, "symbol '%s': ", -+ strtab + symtab[symtab_index].st_name); -+ -+ if (res < 0) { -+ int reloc_type = ELF32_R_TYPE(rpnt->r_info); -+#if defined(__SUPPORT_LD_DEBUG__) -+ _dl_dprintf(2, "can't handle reloc type %s\n", -+ _dl_reltypes(reloc_type)); -+#else -+ _dl_dprintf(2, "can't handle reloc type %x\n", -+ reloc_type); -+#endif -+ _dl_exit(-res); -+ } else { -+ _dl_dprintf(2, "can't resolve symbol\n"); -+ return res; -+ } -+ } -+ -+ return 0; -+} -+ -+static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, -+ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) -+{ -+ int reloc_type; -+ int symtab_index; -+ char *symname; -+ unsigned long *reloc_addr; -+ unsigned long symbol_addr; -+#if defined(__SUPPORT_LD_DEBUG__) -+ unsigned long old_val; -+#endif -+ -+ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); -+ reloc_type = ELF32_R_TYPE(rpnt->r_info); -+ symtab_index = ELF32_R_SYM(rpnt->r_info); -+ symbol_addr = 0; -+ symname = strtab + symtab[symtab_index].st_name; -+ -+ if (symtab_index) { -+ symbol_addr = (unsigned long) -+ _dl_find_hash(strtab + symtab[symtab_index].st_name, -+ tpnt->symbol_scope, tpnt, -+ elf_machine_type_class(reloc_type)); -+ -+ /* Allow undefined references to weak symbols */ -+ if (!symbol_addr && -+ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { -+ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", -+ _dl_progname, symname); -+ return 0; -+ } -+ } -+ -+#if defined(__SUPPORT_LD_DEBUG__) -+ old_val = *reloc_addr; -+#endif -+ switch (reloc_type) { -+ case R_AVR32_NONE: -+ break; -+ case R_AVR32_GLOB_DAT: -+ case R_AVR32_JMP_SLOT: -+ *reloc_addr = symbol_addr + rpnt->r_addend; -+ break; -+ case R_AVR32_RELATIVE: -+ *reloc_addr = (unsigned long)tpnt->loadaddr -+ + rpnt->r_addend; -+ break; -+ default: -+ return -1; -+ } -+ -+#if defined(__SUPPORT_LD_DEBUG__) -+ if (_dl_debug_reloc && _dl_debug_detail) -+ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", -+ old_val, *reloc_addr); -+#endif -+ -+ return 0; -+} -+ -+void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, -+ unsigned long rel_addr, -+ unsigned long rel_size) -+{ -+ /* TODO: Might want to support this in order to get faster -+ * startup times... */ -+} -+ -+int _dl_parse_relocation_information(struct dyn_elf *rpnt, -+ unsigned long rel_addr, -+ unsigned long rel_size) -+{ -+ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, -+ _dl_do_reloc); -+} -Index: uClibc-0.9.28/ldso/ldso/avr32/resolve.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/ldso/ldso/avr32/resolve.S 2006-05-05 09:29:25.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* -+ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as -+ * indicated in register r12 and jumps to the resolved address. -+ * -+ * This file is subject to the terms and conditions of the GNU Lesser General -+ * Public License. See the file "COPYING.LIB" in the main directory of this -+ * archive for more details. -+ * -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define ip r5 -+ -+ .text -+ .global _dl_linux_resolve -+ .type _dl_linux_resolve,@function -+_dl_linux_resolve: -+ /* The PLT code pushed r8 for us. It contains the address of this -+ function's GOT entry, that is entry 0. ip contains the address -+ of the GOT entry of the function we wanted to call. */ -+ stm --sp, r9-r12, lr -+ mov r11, r8 -+ sub r12, ip, r8 -+ rcall _dl_linux_resolver -+ mov ip, r12 -+ popm r8-r12,lr -+ mov pc, ip -+ .size _dl_linux_resolve, . - _dl_linux_resolve diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch deleted file mode 100644 index 222749f3c2..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch +++ /dev/null @@ -1,23 +0,0 @@ -Subject: [PATCH] ldso: AVR32 needs CONSTANT_STRING_GOT_FIXUP - -Add AVR32 to the list of architectures needing CONSTANT_STRING_GOT_FIXUP. - ---- - - ldso/include/dl-string.h | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -Index: uClibc-0.9.28/ldso/include/dl-string.h -=================================================================== ---- uClibc-0.9.28.orig/ldso/include/dl-string.h 2006-02-07 16:58:58.000000000 +0100 -+++ uClibc-0.9.28/ldso/include/dl-string.h 2006-02-07 16:59:28.000000000 +0100 -@@ -271,7 +271,8 @@ static __always_inline char * _dl_simple - /* On some arches constant strings are referenced through the GOT. - * This requires that load_addr must already be defined... */ - #if defined(mc68000) || defined(__arm__) || defined(__mips__) \ -- || defined(__sh__) || defined(__powerpc__) -+ || defined(__sh__) || defined(__powerpc__) \ -+ || defined(__avr32__) - # define CONSTANT_STRING_GOT_FIXUP(X) \ - if ((X) < (const char *) load_addr) (X) += load_addr - # define NO_EARLY_SEND_STDERR diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch deleted file mode 100644 index 0cdc2ccb32..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch +++ /dev/null @@ -1,40 +0,0 @@ -Subject: [PATCH] ldso: AVR32 startup hack - -AVR32 needs to do both PERFORM_BOOTSTRAP_GOT and a full relocation of -the GOT. I don't quite remember why, but I think it's because some GOT -entries just need the load address added to them, while the rest need -the full relocation code. - -This patch should be revisited to figure out whether we're processing -relocations against undefined symbols and whether that's something we -should be doing... - ---- - - ldso/ldso/dl-startup.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -Index: uClibc-0.9.28/ldso/ldso/dl-startup.c -=================================================================== ---- uClibc-0.9.28.orig/ldso/ldso/dl-startup.c 2006-02-07 16:49:27.000000000 +0100 -+++ uClibc-0.9.28/ldso/ldso/dl-startup.c 2006-02-07 17:12:09.000000000 +0100 -@@ -217,7 +217,9 @@ static void * __attribute_used__ _dl_sta - /* some arches (like MIPS) we have to tweak the GOT before relocations */ - PERFORM_BOOTSTRAP_GOT(tpnt); - --#else -+#endif -+ -+#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) - - /* OK, now do the relocations. We do not do a lazy binding here, so - that once we are done, we have considerably more flexibility. */ -@@ -259,7 +261,7 @@ static void * __attribute_used__ _dl_sta - rel_addr += relative_count * sizeof(ELF_RELOC);; - } - -- rpnt = (ELF_RELOC *) (rel_addr + load_addr); -+ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */); - for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { - reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); - symtab_index = ELF_R_SYM(rpnt->r_info); diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch deleted file mode 100644 index d2838ef197..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch +++ /dev/null @@ -1,23 +0,0 @@ -Subject: [PATCH] ldso: Define MAP_FAILED for _dl_mmap() - -When using mmap2() to emulate mmap(), _dl_mmap() uses MAP_FAILED to -indicate failure. MAP_FAILED is not defined anywhere, so this patch -defines it. - ---- - - ldso/include/dl-syscall.h | 1 + - 1 file changed, 1 insertion(+) - -Index: uClibc-0.9.28/ldso/include/dl-syscall.h -=================================================================== ---- uClibc-0.9.28.orig/ldso/include/dl-syscall.h 2006-02-07 16:49:27.000000000 +0100 -+++ uClibc-0.9.28/ldso/include/dl-syscall.h 2006-02-07 17:07:06.000000000 +0100 -@@ -132,6 +132,7 @@ static inline _syscall6(__ptr_t, __sysca - size_t, len, int, prot, int, flags, int, fd, off_t, offset); - /*always 12, even on architectures where PAGE_SHIFT != 12 */ - #define MMAP2_PAGE_SHIFT 12 -+#define MAP_FAILED ((void *) -1) - static inline void * _dl_mmap(void * addr, unsigned long size, int prot, - int flags, int fd, unsigned long offset) - { diff --git a/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch b/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch deleted file mode 100644 index a383a6e62d..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 7b2f125425cf777e7937b533217588e27952b87d Mon Sep 17 00:00:00 2001 -From: Haavard Skinnemoen -Date: Mon, 7 Aug 2006 11:12:50 +0200 -Subject: [PATCH] Let optimized stringops override default ones - -The default, slow stringops must be archived _before_ the optimized -stringops if there is to be any point doing the optimizations in the -first place. ---- - libc/Makefile | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/libc/Makefile b/libc/Makefile -index 31e4bab..687eac5 100644 ---- a/libc/Makefile -+++ b/libc/Makefile -@@ -59,7 +59,7 @@ # will evaluate to no files :(. - $(AR) dN 2 $(LIBNAME) $$objs && \ - $(AR) dN 2 $(LIBNAME) $$objs - @for objfile in obj.signal \ -- obj.string.generic obj.string.$(TARGET_ARCH) obj.string \ -+ obj.string obj.string.generic obj.string.$(TARGET_ARCH) \ - obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \ - if [ -e $$objfile ] ; then \ - if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \ --- -1.4.1.1 - diff --git a/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch b/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch deleted file mode 100644 index 5277677ee5..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch +++ /dev/null @@ -1,105 +0,0 @@ -Subject: [PATCH] libpthread: AVR32 support - -Implement pt-machine.h for AVR32. ---- - - libpthread/linuxthreads/sysdeps/avr32/pt-machine.h | 92 +++++++++++++++++++++ - 1 file changed, 92 insertions(+) - -Index: uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-02-07 17:14:47.000000000 +0100 -@@ -0,0 +1,92 @@ -+/* Machine-dependent pthreads configuration and inline functions. -+ -+ Copyright (C) 2005 Atmel Norway -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; see the file COPYING.LIB. If not, -+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#ifndef _PT_MACHINE_H -+#define _PT_MACHINE_H 1 -+ -+#include -+ -+static inline int -+_test_and_set (int *p, int v) __THROW -+{ -+ int result; -+ -+ __asm__ __volatile__( -+ "/* Inline test and set */\n" -+ "1: ssrf 5\n" -+ " ld.w %0, %2\n" -+ " tst %0, %3\n" -+ " breq 2f\n" -+ " stcond %1, %3\n" -+ " brne 1b\n" -+ "2:" -+ : "=&r"(result), "=m"(*p) -+ : "m"(*p), "r"(v) -+ : "memory", "cc"); -+ -+ return result; -+} -+ -+#ifndef PT_EI -+# define PT_EI extern inline -+#endif -+ -+extern long int testandset (int *spinlock); -+extern int __compare_and_swap (long int *p, long int oldval, long int newval); -+ -+/* Spinlock implementation; required. */ -+PT_EI long int -+testandset (int *spinlock) -+{ -+ return _test_and_set(spinlock, 1); -+} -+ -+ -+/* Get some notion of the current stack. Need not be exactly the top -+ of the stack, just something somewhere in the current frame. */ -+#define CURRENT_STACK_FRAME stack_pointer -+register char * stack_pointer __asm__ ("sp"); -+ -+/* Compare-and-swap for semaphores. */ -+ -+#define HAS_COMPARE_AND_SWAP -+PT_EI int -+__compare_and_swap(long int *p, long int oldval, long int newval) -+{ -+ long int result, tmp; -+ -+ __asm__ __volatile__( -+ "/* Inline compare and swap */\n" -+ "1: ssrf 5\n" -+ " ld.w %1, %3\n" -+ " cp.w %1, %5\n" -+ " sreq %0\n" -+ " brne 2f\n" -+ " stcond %2, %4\n" -+ " brne 1b\n" -+ "2:" -+ : "=&r"(result), "=&r"(tmp), "=m"(*p) -+ : "m"(*p), "r"(newval), "r"(oldval) -+ : "cc", "memory"); -+ -+ return result; -+} -+ -+#endif /* pt-machine.h */ diff --git a/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch b/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch deleted file mode 100644 index 9bfdc53cfc..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch +++ /dev/null @@ -1,27 +0,0 @@ -Subject: [PATCH] Don't include create_module() for AVR32 - -The create_module() system call is obsolete in Linux 2.6, so the -AVR32 kernel doesn't even have it. - -Come to think about it, this should be completely unnecessary as the -create_module function is only a stub when __NR_create_module is -undefined. ---- - - libc/sysdeps/linux/common/create_module.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -Index: uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c -=================================================================== ---- uClibc-0.9.28.orig/libc/sysdeps/linux/common/create_module.c 2006-02-07 16:48:38.000000000 +0100 -+++ uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c 2006-02-07 17:17:14.000000000 +0100 -@@ -61,7 +61,8 @@ unsigned long create_module(const char * - { - return __create_module(name, size, 0, 0); - } --#else -+/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */ -+#elif !defined(__avr32__) - /* Sparc, MIPS, etc don't mistake return values for errors. */ - _syscall2(unsigned long, create_module, const char *, name, size_t, size); - #endif diff --git a/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch b/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch deleted file mode 100644 index 9f27f68f0a..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch +++ /dev/null @@ -1,48 +0,0 @@ ---- a/extra/scripts/fix_includes.sh 2005-08-18 00:49:41.000000000 +0200 -+++ b/extra/scripts/fix_includes.sh 2006-09-27 13:23:12.000000000 +0200 -@@ -78,36 +78,6 @@ if [ ! -d "$KERNEL_SOURCE" ]; then - exit 1; - fi; - --if [ -f "$KERNEL_SOURCE/Makefile" ] ; then --# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION --eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile` --else --ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2` --VERSION=`echo "$ver" | cut -d '.' -f 1` --PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2` --if echo "$ver" | grep -q '-' ; then --SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1` --EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"` --else --SUBLEVEL=`echo "$ver" | cut -d '.' -f 3` --#EXTRAVERSION= --fi --fi --if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ] --then -- echo "Unable to determine version for kernel headers" -- echo -e "\tprovided in directory $KERNEL_SOURCE" -- exit 1 --fi -- --if [ "$MAKE_IS_SILENT" != "y" ]; then --echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}" --echo -e "\n" --echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'" --echo -e "\tprovided in directory $KERNEL_SOURCE" --echo -e "\n" --fi -- - # Create a symlink to include/asm - - rm -f include/asm* -@@ -172,7 +142,7 @@ fi; - - - # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory --if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then -+if [ -d $KERNEL_SOURCE/include/asm-generic ] ; then - ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic - fi; - diff --git a/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch b/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch deleted file mode 100644 index ae6de2b102..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch +++ /dev/null @@ -1,54 +0,0 @@ ---- - libc/sysdeps/linux/avr32/bits/fcntl.h | 33 +++++++++++++++++---------------- - 1 file changed, 17 insertions(+), 16 deletions(-) - -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h -=================================================================== ---- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-11-23 17:38:30.000000000 +0100 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-11-23 17:52:15.000000000 +0100 -@@ -11,28 +11,29 @@ - - /* open/fcntl - O_SYNC is only implemented on blocks devices and on files - located on an ext2 file system */ --#define O_ACCMODE 0003 --#define O_RDONLY 00 --#define O_WRONLY 01 --#define O_RDWR 02 --#define O_CREAT 0100 /* not fcntl */ --#define O_EXCL 0200 /* not fcntl */ --#define O_NOCTTY 0400 /* not fcntl */ --#define O_TRUNC 01000 /* not fcntl */ --#define O_APPEND 02000 --#define O_NONBLOCK 04000 -+#define O_ACCMODE 00000003 -+#define O_RDONLY 00000000 -+#define O_WRONLY 00000001 -+#define O_RDWR 00000002 -+#define O_CREAT 00000100 /* not fcntl */ -+#define O_EXCL 00000200 /* not fcntl */ -+#define O_NOCTTY 00000400 /* not fcntl */ -+#define O_TRUNC 00001000 /* not fcntl */ -+#define O_APPEND 00002000 -+#define O_NONBLOCK 00004000 - #define O_NDELAY O_NONBLOCK --#define O_SYNC 010000 --#define O_ASYNC 020000 -+#define O_SYNC 00010000 -+#define O_ASYNC 00020000 - - #ifdef __USE_GNU --# define O_DIRECTORY 040000 /* must be a directory */ --# define O_NOFOLLOW 0100000 /* don't follow links */ --# define O_DIRECT 0200000 /* direct disk access */ -+# define O_DIRECT 00040000 /* must be a directory */ -+# define O_DIRECTORY 00200000 /* direct disk access */ -+# define O_NOFOLLOW 00400000 /* don't follow links */ -+# define O_NOATIME 01000000 /* don't set atime */ - #endif - - #ifdef __USE_LARGEFILE64 --# define O_LARGEFILE 0400000 -+# define O_LARGEFILE 00100000 - #endif - - /* For now Linux has synchronisity options for data and read operations. diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch deleted file mode 100644 index 430b54c1c1..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch +++ /dev/null @@ -1,4322 +0,0 @@ -diff -Nur uClibc-0.9.28/extra/Configs/Config.avr32 uClibc-0.9.28-avr32-20060621/extra/Configs/Config.avr32 ---- uClibc-0.9.28/extra/Configs/Config.avr32 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/extra/Configs/Config.avr32 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,38 @@ -+# -+# For a description of the syntax of this configuration file, -+# see extra/config/Kconfig-language.txt -+# -+ -+config HAVE_ELF -+ bool -+ default y -+ -+config TARGET_ARCH -+ default "avr32" -+ -+config ARCH_CFLAGS -+ string -+ -+config ARCH_LDFLAGS -+ string -+ -+config LIBGCC_CFLAGS -+ string -+ -+config ARCH_SUPPORTS_BIG_ENDIAN -+ bool -+ default y -+ -+config UCLIBC_COMPLETELY_PIC -+ select FORCE_SHAREABLE_TEXT_SEGMENTS -+ bool -+ default y -+ -+choice -+ prompt "Target CPU Type" -+ default CONFIG_AP7000 -+ -+config CONFIG_AP7000 -+ bool "AP7000" -+ -+endchoice -diff -Nur uClibc-0.9.28/extra/Configs/Config.in uClibc-0.9.28-avr32-20060621/extra/Configs/Config.in ---- uClibc-0.9.28/extra/Configs/Config.in 2005-08-18 00:49:41.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/extra/Configs/Config.in 2006-06-21 11:35:56.000000000 +0200 -@@ -16,6 +16,9 @@ - config TARGET_arm - bool "arm" - -+config TARGET_avr32 -+ bool "avr32" -+ - config TARGET_bfin - bool "bfin" - -@@ -83,6 +86,10 @@ - source "extra/Configs/Config.arm" - endif - -+if TARGET_avr32 -+source "extra/Configs/Config.avr32" -+endif -+ - if TARGET_bfin - source "extra/Configs/Config.bfin" - endif -diff -Nur uClibc-0.9.28/include/elf.h uClibc-0.9.28-avr32-20060621/include/elf.h ---- uClibc-0.9.28/include/elf.h 2005-08-18 00:49:41.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/include/elf.h 2006-06-21 11:35:56.000000000 +0200 -@@ -261,6 +261,8 @@ - #define EM_NIOS32 0xfebb /* Altera Nios 32 */ - #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */ - -+#define EM_AVR32 0x18ad -+ - /* V850 backend magic number. Written in the absense of an ABI. */ - #define EM_CYGNUS_V850 0x9080 - -@@ -2687,6 +2689,55 @@ - /* Keep this the last entry. */ - #define R_V850_NUM 25 - -+/* Atmel AVR32 relocations. */ -+#define R_AVR32_NONE 0 -+#define R_AVR32_32 1 -+#define R_AVR32_16 2 -+#define R_AVR32_8 3 -+#define R_AVR32_32_PCREL 4 -+#define R_AVR32_16_PCREL 5 -+#define R_AVR32_8_PCREL 6 -+#define R_AVR32_DIFF32 7 -+#define R_AVR32_DIFF16 8 -+#define R_AVR32_DIFF8 9 -+#define R_AVR32_GOT32 10 -+#define R_AVR32_GOT16 11 -+#define R_AVR32_GOT8 12 -+#define R_AVR32_21S 13 -+#define R_AVR32_16U 14 -+#define R_AVR32_16S 15 -+#define R_AVR32_8S 16 -+#define R_AVR32_8S_EXT 17 -+#define R_AVR32_22H_PCREL 18 -+#define R_AVR32_18W_PCREL 19 -+#define R_AVR32_16B_PCREL 20 -+#define R_AVR32_16N_PCREL 21 -+#define R_AVR32_14UW_PCREL 22 -+#define R_AVR32_11H_PCREL 23 -+#define R_AVR32_10UW_PCREL 24 -+#define R_AVR32_9H_PCREL 25 -+#define R_AVR32_9UW_PCREL 26 -+#define R_AVR32_HI16 27 -+#define R_AVR32_LO16 28 -+#define R_AVR32_GOTPC 29 -+#define R_AVR32_GOTCALL 30 -+#define R_AVR32_LDA_GOT 31 -+#define R_AVR32_GOT21S 32 -+#define R_AVR32_GOT18SW 33 -+#define R_AVR32_GOT16S 34 -+#define R_AVR32_GOT7UW 35 -+#define R_AVR32_32_CPENT 36 -+#define R_AVR32_CPCALL 37 -+#define R_AVR32_16_CP 38 -+#define R_AVR32_9W_CP 39 -+#define R_AVR32_RELATIVE 40 -+#define R_AVR32_GLOB_DAT 41 -+#define R_AVR32_JMP_SLOT 42 -+#define R_AVR32_ALIGN 43 -+#define R_AVR32_NUM 44 -+ -+/* AVR32 dynamic tags */ -+#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ - - #define R_H8_NONE 0 - #define R_H8_DIR32 1 -diff -Nur uClibc-0.9.28/ldso/include/dl-string.h uClibc-0.9.28-avr32-20060621/ldso/include/dl-string.h ---- uClibc-0.9.28/ldso/include/dl-string.h 2005-08-18 00:49:41.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/ldso/include/dl-string.h 2006-06-21 11:35:57.000000000 +0200 -@@ -134,7 +134,7 @@ - } while (1); - } - --static inline void * _dl_memcpy(void * dst, const void * src, size_t len) -+static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) - { - register char *a = dst-1; - register const char *b = src-1; -@@ -271,7 +271,8 @@ - /* On some arches constant strings are referenced through the GOT. - * This requires that load_addr must already be defined... */ - #if defined(mc68000) || defined(__arm__) || defined(__mips__) \ -- || defined(__sh__) || defined(__powerpc__) -+ || defined(__sh__) || defined(__powerpc__) \ -+ || defined(__avr32__) - # define CONSTANT_STRING_GOT_FIXUP(X) \ - if ((X) < (const char *) load_addr) (X) += load_addr - # define NO_EARLY_SEND_STDERR -diff -Nur uClibc-0.9.28/ldso/include/dl-syscall.h uClibc-0.9.28-avr32-20060621/ldso/include/dl-syscall.h ---- uClibc-0.9.28/ldso/include/dl-syscall.h 2005-08-18 00:49:41.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/ldso/include/dl-syscall.h 2006-06-21 11:35:57.000000000 +0200 -@@ -60,59 +60,59 @@ - dynamic linking at all, so we cannot return any error codes. - We just punt if there is an error. */ - #define __NR__dl_exit __NR_exit --static inline _syscall1(void, _dl_exit, int, status); -+static __always_inline _syscall1(void, _dl_exit, int, status); - - #define __NR__dl_close __NR_close --static inline _syscall1(int, _dl_close, int, fd); -+static __always_inline _syscall1(int, _dl_close, int, fd); - - #define __NR__dl_open __NR_open --static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); -+static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); - - #define __NR__dl_write __NR_write --static inline _syscall3(unsigned long, _dl_write, int, fd, -+static __always_inline _syscall3(unsigned long, _dl_write, int, fd, - const void *, buf, unsigned long, count); - - #define __NR__dl_read __NR_read --static inline _syscall3(unsigned long, _dl_read, int, fd, -+static __always_inline _syscall3(unsigned long, _dl_read, int, fd, - const void *, buf, unsigned long, count); - - #define __NR__dl_mprotect __NR_mprotect --static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); -+static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); - - #define __NR__dl_stat __NR_stat --static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); -+static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); - - #define __NR__dl_munmap __NR_munmap --static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); -+static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); - - #define __NR__dl_getuid __NR_getuid --static inline _syscall0(uid_t, _dl_getuid); -+static __always_inline _syscall0(uid_t, _dl_getuid); - - #define __NR__dl_geteuid __NR_geteuid --static inline _syscall0(uid_t, _dl_geteuid); -+static __always_inline _syscall0(uid_t, _dl_geteuid); - - #define __NR__dl_getgid __NR_getgid --static inline _syscall0(gid_t, _dl_getgid); -+static __always_inline _syscall0(gid_t, _dl_getgid); - - #define __NR__dl_getegid __NR_getegid --static inline _syscall0(gid_t, _dl_getegid); -+static __always_inline _syscall0(gid_t, _dl_getegid); - - #define __NR__dl_getpid __NR_getpid --static inline _syscall0(gid_t, _dl_getpid); -+static __always_inline _syscall0(gid_t, _dl_getpid); - - #define __NR__dl_readlink __NR_readlink --static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); -+static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); - - #ifdef __NR_mmap - #ifdef MMAP_HAS_6_ARGS - #define __NR__dl_mmap __NR_mmap --static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, -+static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, - int, prot, int, flags, int, fd, off_t, offset); - #else - #define __NR__dl_mmap_real __NR_mmap --static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); -+static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); - --static inline void * _dl_mmap(void * addr, unsigned long size, int prot, -+static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, - int flags, int fd, unsigned long offset) - { - unsigned long buffer[6]; -@@ -128,11 +128,12 @@ - #endif - #elif defined __NR_mmap2 - #define __NR___syscall_mmap2 __NR_mmap2 --static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, -+static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, - size_t, len, int, prot, int, flags, int, fd, off_t, offset); - /*always 12, even on architectures where PAGE_SHIFT != 12 */ - #define MMAP2_PAGE_SHIFT 12 --static inline void * _dl_mmap(void * addr, unsigned long size, int prot, -+#define MAP_FAILED ((void *) -1) -+static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, - int flags, int fd, unsigned long offset) - { - if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) -diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-debug.h ---- uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-debug.h 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,45 @@ -+/* -+ * AVR32 ELF shared libary loader support -+ * -+ * Copyright (C) 2005 Atmel Norway -+ * All rights reserved. -+ * -+ * 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. The name of the above contributors may not be -+ * used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. -+ */ -+ -+static const char *_dl_reltypes_tab[] = { -+ "R_AVR32_NONE", -+ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", -+ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", -+ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", -+ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", -+ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", -+ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", -+ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", -+ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", -+ "R_AVR32_HI16", "R_AVR32_LO16", -+ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", -+ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", -+ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", -+ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", -+ "R_AVR32_ALIGN", -+}; -diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-startup.h ---- uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-startup.h 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,110 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * Architecture specific code used by dl-startup.c -+ * Copyright (C) 2005 Atmel Norway -+ */ -+ -+/* This is the library loader's main entry point. Let _dl_boot2 do its -+ * initializations and jump to the application's entry point -+ * afterwards. */ -+asm( " .text\n" -+ " .global _start\n" -+ " .type _start,@function\n" -+ "_start:\n" -+ /* All arguments are on the stack initially */ -+ " mov r12, sp\n" -+ " rcall _dl_start\n" -+ /* Returns user entry point in r12. Save it. */ -+ " mov r0, r12\n" -+ /* We're PIC, so get the Global Offset Table */ -+ " lddpc r6, .L_GOT\n" -+ ".L_RGOT:\n" -+ " rsub r6, pc\n" -+ /* Adjust argc and argv according to _dl_skip_args */ -+ " ld.w r1, r6[_dl_skip_args@got]\n" -+ " ld.w r1, r1[0]\n" -+ " ld.w r2, sp++\n" -+ " sub r2, r1\n" -+ " add sp, sp, r1 << 2\n" -+ " st.w --sp, r2\n" -+ /* Load the finalizer function */ -+ " ld.w r12, r6[_dl_fini@got]\n" -+ /* Jump to the user's entry point */ -+ " mov pc, r0\n\n" -+ -+ " .align 2\n" -+ ".L_GOT:" -+ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" -+ " .size _start, . - _start\n" -+ " .previous\n"); -+ -+/* Get a pointer to the argv array. On many platforms this can be just -+ * the address if the first argument, on other platforms we need to -+ * do something a little more subtle here. */ -+#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) -+ -+ -+/* We can't call functions before the GOT has been initialized */ -+#define NO_FUNCS_BEFORE_BOOTSTRAP -+ -+/* -+ * Relocate the GOT during dynamic loader bootstrap. This will add -+ * the load address to all entries in the GOT, which is necessary -+ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the -+ * GOT. -+ */ -+static __always_inline -+void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) -+{ -+ Elf32_Addr i, nr_got; -+ register Elf32_Addr *__r6 __asm__("r6"); -+ Elf32_Addr *got = __r6; -+ -+ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); -+ for (i = 2; i < nr_got; i++) -+ got[i] += tpnt->loadaddr; -+} -+ -+#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) -+ -+/* Handle relocation of the symbols in the dynamic loader. */ -+static __always_inline -+void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, -+ unsigned long symbol_addr, -+ unsigned long load_addr, Elf32_Sym *symtab) -+{ -+ switch(ELF32_R_TYPE(rpnt->r_info)) { -+ case R_AVR32_NONE: -+ break; -+ case R_AVR32_GLOB_DAT: -+ case R_AVR32_JMP_SLOT: -+ *reloc_addr = symbol_addr; -+ break; -+ case R_AVR32_RELATIVE: -+ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); -+ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); -+ SEND_STDERR_DEBUG(" + "); -+ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); -+ *reloc_addr = load_addr + rpnt->r_addend; -+ break; -+ default: -+ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); -+ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); -+ SEND_STDERR("REL, SYMBOL, LOAD: "); -+ SEND_ADDRESS_STDERR(reloc_addr, 0); -+ SEND_STDERR(", "); -+ SEND_ADDRESS_STDERR(symbol_addr, 0); -+ SEND_STDERR(", "); -+ SEND_ADDRESS_STDERR(load_addr, 1); -+ _dl_exit(1); -+ } -+} -+ -+/* Transfer control to the user's application, once the dynamic loader -+ * is done. This routine has to exit the current function, then call -+ * the _dl_elf_main function. -+ * -+ * Since our _dl_boot will simply call whatever is returned by -+ * _dl_boot2, we can just return the address we're supposed to -+ * call. */ -+#define START() return _dl_elf_main; -diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-syscalls.h ---- uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-syscalls.h 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,5 @@ -+/* We can't use the real errno in ldso, since it has not yet -+ * been dynamicly linked in yet. */ -+extern int _dl_errno; -+#define __set_errno(X) {(_dl_errno) = (X);} -+#include "sys/syscall.h" -diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-sysdep.h ---- uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-sysdep.h 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,103 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * Various assembly language/system dependent hacks that are required -+ * so that we can minimize the amount of platform specific code. -+ * Copyright (C) 2004-2005 Atmel Norway -+ */ -+ -+/* Define this if the system uses RELOCA. */ -+#define ELF_USES_RELOCA -+ -+#include -+ -+#define ARCH_NUM 1 -+#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) -+ -+#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ -+ do { \ -+ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ -+ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ -+ } while (0) -+ -+/* Initialization sequence for the application/library GOT. */ -+#define INIT_GOT(GOT_BASE,MODULE) \ -+ do { \ -+ unsigned long i, nr_got; \ -+ \ -+ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ -+ GOT_BASE[1] = (unsigned long) MODULE; \ -+ \ -+ /* Add load address displacement to all GOT entries */ \ -+ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ -+ for (i = 2; i < nr_got; i++) \ -+ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ -+ } while (0) -+ -+#define do_rem(result, n, base) ((result) = (n) % (base)) -+ -+/* Here we define the magic numbers that this dynamic loader should accept */ -+#define MAGIC1 EM_AVR32 -+#undef MAGIC2 -+ -+/* Used for error messages */ -+#define ELF_TARGET "AVR32" -+ -+unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); -+ -+/* 4096 bytes alignment */ -+#define PAGE_ALIGN 0xfffff000 -+#define ADDR_ALIGN 0xfff -+#define OFFS_ALIGN 0x7ffff000 -+ -+#define elf_machine_type_class(type) \ -+ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) -+ -+/* AVR32 doesn't need any COPY relocs */ -+#define DL_NO_COPY_RELOCS -+ -+/* Return the link-time address of _DYNAMIC. Conveniently, this is the -+ first element of the GOT. This must be inlined in a function which -+ uses global data. */ -+static inline Elf32_Addr -+elf_machine_dynamic (void) -+{ -+ register Elf32_Addr *got asm ("r6"); -+ return *got; -+} -+ -+/* Return the run-time load address of the shared object. */ -+static inline Elf32_Addr -+elf_machine_load_address (void) -+{ -+ extern void __dl_start asm("_dl_start"); -+ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; -+ Elf32_Addr pcrel_addr; -+ -+ asm (" lddpc %0, 2f\n" -+ "1: add %0, pc\n" -+ " rjmp 3f\n" -+ " .align 2\n" -+ "2: .long _dl_start - 1b\n" -+ "3:\n" -+ : "=r"(pcrel_addr) : : "cc"); -+ -+ return pcrel_addr - got_addr; -+} -+ -+/* -+ * Perform any RELATIVE relocations specified by DT_RELCOUNT. -+ * Currently, we don't use that tag, but we might in the future as -+ * this would reduce the startup time somewhat (although probably not by much). -+ */ -+static inline void -+elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, -+ Elf32_Word relative_count) -+{ -+ Elf32_Rela *rpnt = (void *)rel_addr; -+ -+ do { -+ Elf32_Addr *reloc_addr; -+ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); -+ *reloc_addr = load_off + rpnt->r_addend; -+ } while (--relative_count); -+} -diff -Nur uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/elfinterp.c ---- uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/elfinterp.c 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,191 @@ -+/* -+ * AVR32 ELF shared library loader suppport -+ * -+ * Copyright (C) 2004-2006 Atmel Corporation -+ * -+ * All rights reserved. -+ * -+ * 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. The name of the above contributors may not be -+ * used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. -+ */ -+ -+unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) -+{ -+ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; -+ Elf32_Sym *sym; -+ unsigned long local_gotno; -+ unsigned long gotsym; -+ unsigned long new_addr; -+ char *strtab, *symname; -+ unsigned long *entry; -+ unsigned long sym_index = got_offset / 4; -+ -+#if 0 -+ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; -+ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; -+ -+ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) -+ + sym_index; -+ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); -+ symname = strtab + sym->st_name; -+ -+#if 0 -+ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, -+ tpnt->symbol_scope, tpnt, -+ resolver); -+#endif -+ -+ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); -+ *entry = new_addr; -+#endif -+ -+ return new_addr; -+} -+ -+static int -+_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, -+ unsigned long rel_addr, unsigned long rel_size, -+ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, -+ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) -+{ -+ Elf32_Sym *symtab; -+ Elf32_Rela *rpnt; -+ char *strtab; -+ int i; -+ -+ rpnt = (Elf32_Rela *)rel_addr; -+ rel_size /= sizeof(Elf32_Rela); -+ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; -+ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; -+ -+ for (i = 0; i < rel_size; i++, rpnt++) { -+ int symtab_index, res; -+ -+ symtab_index = ELF32_R_SYM(rpnt->r_info); -+ -+ debug_sym(symtab, strtab, symtab_index); -+ debug_reloc(symtab, strtab, rpnt); -+ -+ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); -+ -+ if (res == 0) -+ continue; -+ -+ _dl_dprintf(2, "\n%s: ", _dl_progname); -+ -+ if (symtab_index) -+ _dl_dprintf(2, "symbol '%s': ", -+ strtab + symtab[symtab_index].st_name); -+ -+ if (res < 0) { -+ int reloc_type = ELF32_R_TYPE(rpnt->r_info); -+#if defined(__SUPPORT_LD_DEBUG__) -+ _dl_dprintf(2, "can't handle reloc type %s\n", -+ _dl_reltypes(reloc_type)); -+#else -+ _dl_dprintf(2, "can't handle reloc type %x\n", -+ reloc_type); -+#endif -+ _dl_exit(-res); -+ } else { -+ _dl_dprintf(2, "can't resolve symbol\n"); -+ return res; -+ } -+ } -+ -+ return 0; -+} -+ -+static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, -+ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) -+{ -+ int reloc_type; -+ int symtab_index; -+ char *symname; -+ unsigned long *reloc_addr; -+ unsigned long symbol_addr; -+#if defined(__SUPPORT_LD_DEBUG__) -+ unsigned long old_val; -+#endif -+ -+ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); -+ reloc_type = ELF32_R_TYPE(rpnt->r_info); -+ symtab_index = ELF32_R_SYM(rpnt->r_info); -+ symbol_addr = 0; -+ symname = strtab + symtab[symtab_index].st_name; -+ -+ if (symtab_index) { -+ symbol_addr = (unsigned long) -+ _dl_find_hash(strtab + symtab[symtab_index].st_name, -+ tpnt->symbol_scope, tpnt, -+ elf_machine_type_class(reloc_type)); -+ -+ /* Allow undefined references to weak symbols */ -+ if (!symbol_addr && -+ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { -+ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", -+ _dl_progname, symname); -+ return 0; -+ } -+ } -+ -+#if defined(__SUPPORT_LD_DEBUG__) -+ old_val = *reloc_addr; -+#endif -+ switch (reloc_type) { -+ case R_AVR32_NONE: -+ break; -+ case R_AVR32_GLOB_DAT: -+ case R_AVR32_JMP_SLOT: -+ *reloc_addr = symbol_addr + rpnt->r_addend; -+ break; -+ case R_AVR32_RELATIVE: -+ *reloc_addr = (unsigned long)tpnt->loadaddr -+ + rpnt->r_addend; -+ break; -+ default: -+ return -1; -+ } -+ -+#if defined(__SUPPORT_LD_DEBUG__) -+ if (_dl_debug_reloc && _dl_debug_detail) -+ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", -+ old_val, *reloc_addr); -+#endif -+ -+ return 0; -+} -+ -+void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, -+ unsigned long rel_addr, -+ unsigned long rel_size) -+{ -+ /* TODO: Might want to support this in order to get faster -+ * startup times... */ -+} -+ -+int _dl_parse_relocation_information(struct dyn_elf *rpnt, -+ unsigned long rel_addr, -+ unsigned long rel_size) -+{ -+ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, -+ _dl_do_reloc); -+} -diff -Nur uClibc-0.9.28/ldso/ldso/avr32/resolve.S uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/resolve.S ---- uClibc-0.9.28/ldso/ldso/avr32/resolve.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/resolve.S 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* -+ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as -+ * indicated in register r12 and jumps to the resolved address. -+ * -+ * This file is subject to the terms and conditions of the GNU Lesser General -+ * Public License. See the file "COPYING.LIB" in the main directory of this -+ * archive for more details. -+ * -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define ip r5 -+ -+ .text -+ .global _dl_linux_resolve -+ .type _dl_linux_resolve,@function -+_dl_linux_resolve: -+ /* The PLT code pushed r8 for us. It contains the address of this -+ function's GOT entry, that is entry 0. ip contains the address -+ of the GOT entry of the function we wanted to call. */ -+ stm --sp, r9-r12, lr -+ mov r11, r8 -+ sub r12, ip, r8 -+ rcall _dl_linux_resolver -+ mov ip, r12 -+ popm r8-r12,lr -+ mov pc, ip -+ .size _dl_linux_resolve, . - _dl_linux_resolve -diff -Nur uClibc-0.9.28/ldso/ldso/dl-startup.c uClibc-0.9.28-avr32-20060621/ldso/ldso/dl-startup.c ---- uClibc-0.9.28/ldso/ldso/dl-startup.c 2005-08-18 00:49:41.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/ldso/ldso/dl-startup.c 2006-06-21 11:35:57.000000000 +0200 -@@ -217,7 +217,9 @@ - /* some arches (like MIPS) we have to tweak the GOT before relocations */ - PERFORM_BOOTSTRAP_GOT(tpnt); - --#else -+#endif -+ -+#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) - - /* OK, now do the relocations. We do not do a lazy binding here, so - that once we are done, we have considerably more flexibility. */ -@@ -259,7 +261,7 @@ - rel_addr += relative_count * sizeof(ELF_RELOC);; - } - -- rpnt = (ELF_RELOC *) (rel_addr + load_addr); -+ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */); - for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { - reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); - symtab_index = ELF_R_SYM(rpnt->r_info); -diff -Nur uClibc-0.9.28/libc/string/avr32/bcopy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/bcopy.S ---- uClibc-0.9.28/libc/string/avr32/bcopy.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/bcopy.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,15 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+ .text -+ .global bcopy -+ .type bcopy, @function -+ .align 1 -+bcopy: -+ /* Swap the first two arguments */ -+ eor r11, r12 -+ eor r12, r11 -+ eor r11, r12 -+ rjmp memmove -+ .size bcopy, . - bcopy -diff -Nur uClibc-0.9.28/libc/string/avr32/bzero.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/bzero.S ---- uClibc-0.9.28/libc/string/avr32/bzero.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/bzero.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,12 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+ .text -+ .global bzero -+ .type bzero, @function -+ .align 1 -+bzero: -+ mov r10, r11 -+ mov r11, 0 -+ rjmp memset -diff -Nur uClibc-0.9.28/libc/string/avr32/Makefile uClibc-0.9.28-avr32-20060621/libc/string/avr32/Makefile ---- uClibc-0.9.28/libc/string/avr32/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/Makefile 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,45 @@ -+# Makefile for uClibc -+# -+# Copyright (C) 2000-2003 Erik Andersen -+# -+# This program is free software; you can redistribute it and/or modify it under -+# the terms of the GNU Library 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 Library General Public License for more -+# details. -+# -+# You should have received a copy of the GNU Library 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 -+ -+TOPDIR=../../../ -+include $(TOPDIR)Rules.mak -+ -+SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S -+SSRC += memset.S strcmp.S strlen.S -+# memchr.S, strcat.S, strcpy.S, strncpy.S is broken -+SOBJS := $(addprefix __avr32_,$(addsuffix .o,$(basename $(SSRC)))) -+ -+all: $(SOBJS) $(LIBC) -+ -+$(LIBC): ar-target -+ -+ar-target: $(SOBJS) -+ $(AR) $(ARFLAGS) $(LIBC) $(SOBJS) -+ -+$(SOBJS): __avr32_%.o: %.S -+ $(CC) $(ASFLAGS) -D$*=__avr32_$* -c $< -o $@ -+ $(STRIPTOOL) -x -R .note -R .comment $@ -+ -+clean: -+ $(RM) *.[oa] *~ core -+ -+stringtest.o: stringtest.c -+ $(CC) $(CFLAGS) -c $< -o $@ -+ -+stringtest: stringtest.o $(SOBJS) -+ $(CC) -static -o $@ $^ -diff -Nur uClibc-0.9.28/libc/string/avr32/memchr.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memchr.S ---- uClibc-0.9.28/libc/string/avr32/memchr.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memchr.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,62 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define str r12 -+#define chr r11 -+#define len r10 -+ -+ .text -+ .global memchr -+ .type memchr, @function -+memchr: -+ insert.b chr:l, chr -+ insert.h chr:t, chr -+ -+ mov r9, str -+ andl r9, 3, COH -+ brne .Lunaligned_str -+ -+1: sub len, 4 -+ brlt 2f -+ ld.w r8, str++ -+ psub.b r9, r8, r11 -+ tnbz r9 -+ brne 1b -+ -+ sub str, 4 -+ extract.b r9, r8:t -+ cp.b r9, r11 -+ reteq str -+ sub str, -1 -+ extract.b r9, r8:u -+ cp.b r9, r11 -+ reteq str -+ sub str, -1 -+ extract.b r9, r8:l -+ cp.b r9, r11 -+ reteq str -+ sub str, -1 -+ retal str -+ -+2: sub len, -4 -+ reteq 0 -+ -+3: ld.ub r8, str++ -+ cp.w r8, 0 -+ reteq str -+ sub len, 1 -+ brne 3b -+ -+ retal 0 -+ -+.Lunaligned_str: -+1: sub len, 1 -+ retlt 0 -+ ld.ub r8, str++ -+ cp.b r8, r11 -+ reteq str -+ sub r9, 1 -+ brge 1b -+ -+ rjmp .Laligned_search -diff -Nur uClibc-0.9.28/libc/string/avr32/memcmp.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcmp.S ---- uClibc-0.9.28/libc/string/avr32/memcmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcmp.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway. -+ */ -+ -+#define s1 r12 -+#define s2 r11 -+#define len r10 -+ -+ .text -+ .global memcmp -+ .type memcmp, @function -+ .align 1 -+memcmp: -+ cp.w len, 1 -+ retlt 0 -+1: ld.ub r8, s1++ -+ ld.ub r9, s2++ -+ sub r8, r9 -+ subfne len, 1 -+ brne 1b -+ -+ retal r8 -+ .size memcmp, . - memcmp -+ -+ .weak bcmp -+ bcmp = memcmp -diff -Nur uClibc-0.9.28/libc/string/avr32/memcpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcpy.S ---- uClibc-0.9.28/libc/string/avr32/memcpy.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcpy.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,106 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+/* Don't use r12 as dst since we must return it unmodified */ -+#define dst r9 -+#define src r11 -+#define len r10 -+ -+ .text -+ .global memcpy -+ .type memcpy, @function -+memcpy: -+ pref src[0] -+ mov dst, r12 -+ -+ /* If we have less than 32 bytes, don't do anything fancy */ -+ cp.w len, 32 -+ brge .Lmore_than_31 -+ -+ sub len, 1 -+ retlt r12 -+1: ld.ub r8, src++ -+ st.b dst++, r8 -+ sub len, 1 -+ brge 1b -+ retal r12 -+ -+.Lmore_than_31: -+ pushm r0-r7, lr -+ -+ /* Check alignment */ -+ mov r8, src -+ andl r8, 31, COH -+ brne .Lunaligned_src -+ mov r8, dst -+ andl r8, 3, COH -+ brne .Lunaligned_dst -+ -+.Laligned_copy: -+ sub len, 32 -+ brlt .Lless_than_32 -+ -+1: /* Copy 32 bytes at a time */ -+ pref src[32] -+ ldm src, r0-r7 -+ sub src, -32 -+ stm dst, r0-r7 -+ sub dst, -32 -+ sub len, 32 -+ brge 1b -+ -+.Lless_than_32: -+ /* Copy 16 more bytes if possible */ -+ sub len, -16 -+ brlt .Lless_than_16 -+ ldm src, r0-r3 -+ sub src, -16 -+ sub len, 16 -+ stm dst, r0-r3 -+ sub dst, -16 -+ -+.Lless_than_16: -+ /* Do the remaining as byte copies */ -+ neg len -+ add pc, pc, len << 2 -+ .rept 15 -+ ld.ub r0, src++ -+ st.b dst++, r0 -+ .endr -+ -+ popm r0-r7, pc -+ -+.Lunaligned_src: -+ /* Make src cacheline-aligned. r8 = (src & 31) */ -+ rsub r8, r8, 32 -+ sub len, r8 -+1: ld.ub r0, src++ -+ st.b dst++, r0 -+ sub r8, 1 -+ brne 1b -+ -+ /* If dst is word-aligned, we're ready to go */ -+ pref src[0] -+ mov r8, 3 -+ tst dst, r8 -+ breq .Laligned_copy -+ -+.Lunaligned_dst: -+ /* src is aligned, but dst is not. Expect bad performance */ -+ sub len, 4 -+ brlt 2f -+1: ld.w r0, src++ -+ st.w dst++, r0 -+ sub len, 4 -+ brge 1b -+ -+2: neg len -+ add pc, pc, len << 2 -+ .rept 3 -+ ld.ub r0, src++ -+ st.b dst++, r0 -+ .endr -+ -+ popm r0-r7, pc -+ .size memcpy, . - memcpy -diff -Nur uClibc-0.9.28/libc/string/avr32/memmove.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memmove.S ---- uClibc-0.9.28/libc/string/avr32/memmove.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memmove.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,124 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define dst r12 -+#define src r11 -+#define len r10 -+ -+ .text -+ .global memmove -+ .type memmove, @function -+memmove: -+ cp.w src, dst -+#ifdef memmove -+ brge optimized_memcpy -+#else -+ brge memcpy -+#endif -+ -+ add dst, len -+ add src, len -+ pref src[-1] -+ -+ /* -+ * The rest is basically the same as in memcpy.S except that -+ * the direction is reversed. -+ */ -+ cp.w len, 32 -+ brge .Lmore_than_31 -+ -+ sub len, 1 -+ retlt r12 -+1: ld.ub r8, --src -+ st.b --dst, r8 -+ sub len, 1 -+ brge 1b -+ retal r12 -+ -+.Lmore_than_31: -+ pushm r0-r7, lr -+ -+ /* Check alignment */ -+ mov r8, src -+ andl r8, 31, COH -+ brne .Lunaligned_src -+ mov r8, r12 -+ andl r8, 3, COH -+ brne .Lunaligned_dst -+ -+.Laligned_copy: -+ sub len, 32 -+ brlt .Lless_than_32 -+ -+1: /* Copy 32 bytes at a time */ -+ pref src[-36] -+ sub src, 32 -+ ldm src, r0-r7 -+ sub dst, 32 -+ sub len, 32 -+ stm dst, r0-r7 -+ brge 1b -+ -+.Lless_than_32: -+ /* Copy 16 more bytes if possible */ -+ sub len, -16 -+ brlt .Lless_than_16 -+ sub src, 16 -+ ldm src, r0-r3 -+ sub dst, 16 -+ sub len, 16 -+ stm dst, r0-r3 -+ -+.Lless_than_16: -+ /* Do the remaining as byte copies */ -+#if 1 -+ sub len, -16 -+ breq 2f -+1: ld.ub r0, --src -+ st.b --dst, r0 -+ sub len, 1 -+ brne 1b -+#else -+ neg len -+ add pc, pc, len << 2 -+ .rept 15 -+ ld.ub r0, --src -+ st.b --dst, r0 -+ .endr -+#endif -+ -+2: popm r0-r7, pc -+ -+.Lunaligned_src: -+ /* Make src cacheline-aligned. r8 = (src & 31) */ -+ rsub r8, r8, 32 -+ sub len, r8 -+1: ld.ub r0, --src -+ st.b --dst, r0 -+ sub r8, 1 -+ brne 1b -+ -+ /* If dst is word-aligned, we're ready to go */ -+ pref src[-4] -+ mov r8, 3 -+ tst dst, r8 -+ breq .Laligned_copy -+ -+.Lunaligned_dst: -+ /* src is aligned, but dst is not. Expect bad performance */ -+ sub len, 4 -+ brlt 2f -+1: ld.w r0, --src -+ st.w --dst, r0 -+ sub len, 4 -+ brge 1b -+ -+2: neg len -+ add pc, pc, len << 2 -+ .rept 3 -+ ld.ub r0, --src -+ st.b --dst, r0 -+ .endr -+ -+ popm r0-r7, pc -diff -Nur uClibc-0.9.28/libc/string/avr32/memset.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memset.S ---- uClibc-0.9.28/libc/string/avr32/memset.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memset.S 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,54 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway. -+ */ -+ -+#define s r12 -+#define c r11 -+#define n r10 -+ -+ .text -+ .global memset -+ .type memset, @function -+ .align 1 -+memset: -+ cp.w n, 32 -+ mov r9, s -+ brge .Llarge_memset -+ -+ sub n, 1 -+ retlt s -+1: st.b s++, c -+ sub n, 1 -+ brge 1b -+ -+ retal r9 -+ -+.Llarge_memset: -+ mov r8, r11 -+ mov r11, 3 -+ insert.b r8:l, r8 -+ tst s, r11 -+ insert.h r8:t, r8 -+ breq 2f -+ -+1: st.b s++, r8 -+ sub n, 1 -+ tst s, r11 -+ brne 1b -+ -+2: mov r11, r9 -+ mov r9, r8 -+ sub n, 8 -+ -+3: st.d s++, r8 -+ sub n, 8 -+ brge 3b -+ -+ /* If we are done, n == -8 and we'll skip all st.b insns below */ -+ neg n -+ lsl n, 1 -+ add pc, n -+ .rept 7 -+ st.b s++, r8 -+ .endr -+ retal r11 -diff -Nur uClibc-0.9.28/libc/string/avr32/strcat.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcat.S ---- uClibc-0.9.28/libc/string/avr32/strcat.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcat.S 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,96 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define s1 r9 -+#define s2 r11 -+ -+ .text -+ .global strcat -+ .type strcat, @function -+ .align 1 -+strcat: -+ mov s1, r12 -+ -+ /* Make sure s1 is word-aligned */ -+ mov r10, s1 -+ andl r10, 3, COH -+ breq 2f -+ -+ add pc, pc, r10 << 3 -+ sub r0, r0, 0 /* 4-byte nop */ -+ ld.ub r8, s1++ -+ sub r8, r8, 0 -+ breq 2f -+ ld.ub r8, s1++ -+ sub r8, r8, 0 -+ breq 3f -+ ld.ub r8, s1++ -+ sub r8, r8, 0 -+ breq 4f -+ -+ /* Find the end of the first string */ -+5: ld.w r8, s1++ -+ tnbz r8 -+ brne 5b -+ -+ sub s1, 4 -+ -+ extract.b r10, r8:t -+ cp.w r10, 0 -+ breq 1f -+ sub s1, -1 -+ extract.b r10, r8:u -+ cp.w r10, 0 -+ breq 2f -+ sub s1, -1 -+ extract.b r10, r8:l -+ cp.w r10, 0 -+ breq 3f -+ sub s1, -1 -+ rjmp 4f -+ -+ /* Now, append s2 */ -+1: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+2: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+3: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+4: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+ -+ /* Copy one word at a time */ -+ ld.w r8, s2++ -+ tnbz r8 -+ breq 2f -+1: st.w r8, s2++ -+ ld.w r8, s2++ -+ tnbz r8 -+ brne 1b -+ -+ /* Copy the remaining bytes */ -+ extract.b r10, r8:t -+ st.b s1++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ extract.b r10, r8:u -+ st.b s1++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ extract.b r10, r8:l -+ st.b s1++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ extract.b r10, r8:b -+ st.b s1++, r10 -+ retal r12 -+ .size strcat, . - strcat -diff -Nur uClibc-0.9.28/libc/string/avr32/strcmp.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcmp.S ---- uClibc-0.9.28/libc/string/avr32/strcmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcmp.S 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,77 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway. -+ */ -+ -+#define s1 r12 -+#define s2 r11 -+#define len r10 -+ -+ .text -+ .global strcmp -+ .type strcmp, @function -+ .align 1 -+strcmp: -+ mov r8, 3 -+ tst s1, r8 -+ brne .Lunaligned_s1 -+ tst s2, r8 -+ brne .Lunaligned_s2 -+ -+1: ld.w r8, s1++ -+ ld.w r9, s2++ -+ cp.w r8, r9 -+ brne 2f -+ tnbz r8 -+ brne 1b -+ retal 0 -+ -+2: extract.b r12, r8:t -+ extract.b r11, r9:t -+ sub r12, r11 -+ retne r12 -+ cp.w r11, 0 -+ reteq 0 -+ extract.b r12, r8:u -+ extract.b r11, r9:u -+ sub r12, r11 -+ retne r12 -+ cp.w r11, 0 -+ reteq 0 -+ extract.b r12, r8:l -+ extract.b r11, r9:l -+ sub r12, r11 -+ retne r12 -+ cp.w r11, 0 -+ reteq 0 -+ extract.b r12, r8:b -+ extract.b r11, r9:b -+ sub r12, r11 -+ retal r12 -+ -+.Lunaligned_s1: -+3: tst s1, r8 -+ breq 4f -+ ld.ub r10, s1++ -+ ld.ub r9, s2++ -+ sub r10, r9 -+ retne r10 -+ cp.w r9, 0 -+ brne 3b -+ retal r10 -+ -+4: tst s2, r8 -+ breq 1b -+ -+.Lunaligned_s2: -+ /* -+ * s1 and s2 can't both be aligned, and unaligned word loads -+ * can trigger spurious exceptions if we cross a page boundary. -+ * Do it the slow way... -+ */ -+1: ld.ub r8, s1++ -+ ld.ub r9, s2++ -+ sub r8, r9 -+ retne r8 -+ cp.w r9, 0 -+ brne 1b -+ retal 0 -diff -Nur uClibc-0.9.28/libc/string/avr32/strcpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcpy.S ---- uClibc-0.9.28/libc/string/avr32/strcpy.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcpy.S 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,64 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ * -+ * To reduce the size, this one might simply call strncpy with len = -1. -+ */ -+ -+#define dst r9 -+#define src r11 -+ -+ .text -+ .global strcpy -+ .type strcpy, @function -+strcpy: -+ mov dst, r12 -+ -+ pref src[0] -+ -+ /* -+ * Check alignment. If src is aligned but dst isn't, we can't -+ * do much about it... -+ */ -+ mov r8, src -+ andl r8, 3 COH -+ brne .Lunaligned_src -+ -+.Laligned_copy: -+1: ld.w r8, src++ -+ tnbz r8 -+ breq 2f -+ st.w dst++, r8 -+ rjmp 1b -+ -+2: /* -+ * Ok, r8 now contains the terminating '\0'. Copy the -+ * remaining bytes individually. -+ */ -+ extract.b r10, r8:t -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ extract.b r10, r8:u -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ extract.b r10, r8:l -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ extract.b r10, r8:b -+ st.b dst++, r10 -+ retal r12 -+ -+.Lunaligned_src: -+ /* Copy bytes until we're aligned */ -+ rsub r8, r8, 4 -+ add pc, pc, r8 << 3 -+ nop -+ nop -+ ld.ub r10, src++ -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ -+ rjmp .Laligned_copy -diff -Nur uClibc-0.9.28/libc/string/avr32/stringtest.c uClibc-0.9.28-avr32-20060621/libc/string/avr32/stringtest.c ---- uClibc-0.9.28/libc/string/avr32/stringtest.c 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/stringtest.c 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,144 @@ -+ -+#include -+#include -+#include -+#include -+ -+#define BUF_SIZE (8 * 1024) -+ -+static char *buf1; -+static char *buf1_ref; -+static char *buf2; -+ -+extern void *optimized_memcpy(void *dest, void *src, size_t len); -+extern void *optimized_memmove(void *dest, void *src, size_t len); -+extern char *optimized_strcpy(char *dest, char *src); -+extern char *optimized_strncpy(char *dest, char *src, size_t len); -+ -+void dump_mismatch(char *buf, char *ref, size_t len) -+{ -+ int i, j; -+ -+ for (i = 0; i < len; i += 16) { -+ if (memcmp(buf + i, ref + i, 16) == 0) -+ continue; -+ -+ printf("%4x buf:", i); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", buf[j]); -+ printf("\n ref:"); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", ref[j]); -+ printf("\n"); -+ } -+} -+ -+static void test_memcpy(int src_offset, int dst_offset, int len) -+{ -+ clock_t start, old, new; -+ int i; -+ -+ memset(buf1, 0x55, BUF_SIZE); -+ memset(buf1_ref, 0x55, BUF_SIZE); -+ memset(buf2, 0xaa, BUF_SIZE); -+ -+ printf("Testing memcpy with offsets %d => %d and len %d...", -+ src_offset, dst_offset, len); -+ -+ start = clock(); -+ for (i = 0; i < 8192; i++) -+ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len); -+ new = clock() - start; -+ start = clock(); -+ for ( i = 0; i < 8192; i++) -+ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); -+ old = clock() - start; -+ -+ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) -+ printf("OK\n"); -+ else { -+ printf("FAILED\n"); -+ dump_mismatch(buf1, buf1_ref, BUF_SIZE); -+ } -+ printf("CPU time used: %d vs. %d\n", new, old); -+} -+ -+static void test_memmove(int src_offset, int dst_offset, int len) -+{ -+ clock_t start, old, new; -+ -+ memset(buf1, 0x55, BUF_SIZE); -+ memset(buf1_ref, 0x55, BUF_SIZE); -+ memset(buf2, 0xaa, BUF_SIZE); -+ -+ printf("Testing memmove with offsets %d => %d and len %d...", -+ src_offset, dst_offset, len); -+ -+ start = clock(); -+ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len); -+ new = clock() - start; -+ start = clock(); -+ memmove(buf1_ref + dst_offset, buf2 + src_offset, len); -+ old = clock() - start; -+ -+ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) -+ printf("OK\n"); -+ else { -+ printf("FAILED\n"); -+ dump_mismatch(buf1, buf1_ref, BUF_SIZE); -+ } -+ printf("CPU time used: %d vs. %d\n", new, old); -+} -+ -+int main(int argc, char *argv[]) -+{ -+ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); -+ if (buf2 == MAP_FAILED) { -+ perror("Failed to allocate memory for buf2"); -+ return 1; -+ } -+ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); -+ if (buf1 == MAP_FAILED) { -+ perror("Failed to allocate memory for buf1"); -+ return 1; -+ } -+ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); -+ if (buf1_ref == MAP_FAILED) { -+ perror("Failed to allocate memory for buf1_ref"); -+ return 1; -+ } -+ printf("\n === MEMCPY ===\n\n"); -+ -+ test_memcpy(0, 0, BUF_SIZE - 32); -+ test_memcpy(0, 0, 1); -+ test_memcpy(0, 0, 31); -+ test_memcpy(0, 0, 32); -+ test_memcpy(0, 0, 127); -+ test_memcpy(0, 0, 128); -+ test_memcpy(4, 4, BUF_SIZE - 32 - 4); -+ test_memcpy(1, 1, BUF_SIZE - 32 - 1); -+ test_memcpy(1, 1, 126); -+ test_memcpy(0, 3, 128); -+ test_memcpy(1, 4, 128); -+ test_memcpy(0, 0, 0); -+ -+ printf("\n === MEMMOVE ===\n\n"); -+ -+ test_memmove(0, 0, BUF_SIZE - 32); -+ test_memmove(0, 0, 1); -+ test_memmove(0, 0, 31); -+ test_memmove(0, 0, 32); -+ test_memmove(0, 0, BUF_SIZE - 33); -+ test_memmove(0, 0, 128); -+ test_memmove(4, 4, BUF_SIZE - 32 - 4); -+ test_memmove(1, 1, BUF_SIZE - 32 - 1); -+ test_memmove(1, 1, BUF_SIZE - 130); -+ test_memmove(0, 3, BUF_SIZE - 128); -+ test_memmove(1, 4, BUF_SIZE - 128); -+ test_memmove(0, 0, 0); -+ -+ return 0; -+} -diff -Nur uClibc-0.9.28/libc/string/avr32/strlen.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strlen.S ---- uClibc-0.9.28/libc/string/avr32/strlen.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strlen.S 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,52 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define str r12 -+ -+ .text -+ .global strlen -+ .type strlen, @function -+strlen: -+ mov r11, r12 -+ -+ mov r9, str -+ andl r9, 3, COH -+ brne .Lunaligned_str -+ -+1: ld.w r8, str++ -+ tnbz r8 -+ brne 1b -+ -+ sub r12, r11 -+ extract.b r9, r8:t -+ cp.w r9, 0 -+ subeq r12, 4 -+ reteq r12 -+ extract.b r9, r8:u -+ cp.w r9, 0 -+ subeq r12, 3 -+ reteq r12 -+ extract.b r9, r8:l -+ cp.w r9, 0 -+ subeq r12, 2 -+ reteq r12 -+ sub r12, 1 -+ retal r12 -+ -+.Lunaligned_str: -+ add pc, pc, r9 << 3 -+ sub r0, r0, 0 /* 4-byte nop */ -+ ld.ub r8, str++ -+ sub r8, r8, 0 -+ breq 1f -+ ld.ub r8, str++ -+ sub r8, r8, 0 -+ breq 1f -+ ld.ub r8, str++ -+ sub r8, r8, 0 -+ brne 1b -+ -+1: sub r12, 1 -+ sub r12, r11 -+ retal r12 -diff -Nur uClibc-0.9.28/libc/string/avr32/strncpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strncpy.S ---- uClibc-0.9.28/libc/string/avr32/strncpy.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strncpy.S 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,78 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define dst r9 -+#define src r11 -+ -+ .text -+ .global strcpy -+ .type strncpy, @function -+strncpy: -+ mov dst, r12 -+ -+ pref src[0] -+ mov dst, r12 -+ -+ /* -+ * Check alignment. If src is aligned but dst isn't, we can't -+ * do much about it... -+ */ -+ mov r8, src -+ andl r8, 3 COH -+ brne .Lunaligned_src -+ -+.Laligned_copy: -+ sub r10, 4 -+ brlt 3f -+1: ld.w r8, src++ -+ tnbz r8 -+ breq 2f -+ st.w dst++, r8 -+ sub r10, 4 -+ brne 1b -+ -+3: sub r10, -4 -+ reteq r12 -+ -+ /* This is safe as long as src is word-aligned and r10 > 0 */ -+ ld.w r8, src++ -+ -+2: /* -+ * Ok, r8 now contains the terminating '\0'. Copy the -+ * remaining bytes individually. -+ */ -+ extract.b r11, r8:t -+ st.b dst++, r11 -+ cp.w r11, 0 -+ reteq r12 -+ sub r10, 1 -+ reteq r12 -+ extract.b r11, r8:u -+ st.b dst++, r11 -+ cp.w r11, 0 -+ reteq r12 -+ sub r10, 1 -+ reteq r12 -+ extract.b r11, r8:l -+ st.b dst++, r11 -+ cp.w r11, 0 -+ reteq r12 -+ sub r10, 1 -+ reteq r12 -+ extract.b r10, r8:b -+ st.b dst++, r10 -+ retal r12 -+ -+.Lunaligned_src: -+ /* Copy bytes until we're aligned */ -+ min r8, r8, r10 -+ sub r10, r8 -+ sub r8, 1 -+ retlt r12 -+1: ld.ub r10, src++ -+ st.b dst++, r10 -+ sub r8, 1 -+ brge 1b -+ -+ rjmp .Laligned_copy -diff -Nur uClibc-0.9.28/libc/string/avr32/test_memcpy.c uClibc-0.9.28-avr32-20060621/libc/string/avr32/test_memcpy.c ---- uClibc-0.9.28/libc/string/avr32/test_memcpy.c 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/test_memcpy.c 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,66 @@ -+ -+#include -+#include -+ -+#define BUF_SIZE 32768 -+ -+static char buf1[BUF_SIZE] __attribute__((aligned(32))); -+static char buf1_ref[BUF_SIZE] __attribute__((aligned(32))); -+static char buf2[BUF_SIZE] __attribute__((aligned(32))); -+ -+extern void *new_memcpy(void *dest, void *src, size_t len); -+ -+void dump_mismatch(char *buf, char *ref, size_t len) -+{ -+ int i, j; -+ -+ for (i = 0; i < len; i += 16) { -+ if (memcmp(buf + i, ref + i, 16) == 0) -+ continue; -+ -+ printf("% 4x buf:", i); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", buf[j]); -+ printf("\n ref:"); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", ref[j]); -+ printf("\n"); -+ } -+} -+ -+void test(int src_offset, int dst_offset, int len) -+{ -+ memset(buf1, 0x55, sizeof(buf1)); -+ memset(buf1_ref, 0x55, sizeof(buf1_ref)); -+ memset(buf2, 0xaa, sizeof(buf2)); -+ -+ printf("Testing with offsets %d => %d and len %d...", -+ src_offset, dst_offset, len); -+ -+ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len); -+ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); -+ -+ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0) -+ printf("OK\n"); -+ else { -+ printf("FAILED\n"); -+ dump_mismatch(buf1, buf1_ref, sizeof(buf1)); -+ } -+} -+ -+int main(int argc, char *argv[]) -+{ -+ test(0, 0, BUF_SIZE); -+ test(0, 0, 1); -+ test(0, 0, 31); -+ test(0, 0, 32); -+ test(0, 0, 127); -+ test(0, 0, 128); -+ test(4, 4, BUF_SIZE - 4); -+ test(1, 1, BUF_SIZE - 1); -+ test(1, 1, 126); -+ test(0, 3, 128); -+ test(1, 4, 128); -+ -+ return 0; -+} -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/atomicity.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,86 @@ -+/* Low-level functions for atomic operations. AVR32 version. -+ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _ATOMICITY_H -+#define _ATOMICITY_H 1 -+ -+#include -+ -+static inline int -+__attribute__((unused)) -+exchange_and_add (volatile uint32_t *mem, int val) -+{ -+ int tmp, result; -+ -+ __asm__ __volatile__( -+ "/* Inline exchange and add */\n" -+ "1: ssrf 5\n" -+ " ld.w %0, %3\n" -+ " add %1, %0, %4\n" -+ " stcond %2, %1\n" -+ " brne 1b" -+ : "=&r"(result), "=&r"(tmp), "=m"(*mem) -+ : "m"(*mem), "r"(val) -+ : "cc", "memory"); -+ -+ return result; -+} -+ -+static inline void -+__attribute__((unused)) -+atomic_add (volatile uin32_t *mem, int val) -+{ -+ int result; -+ -+ __asm__ __volatile__( -+ "/* Inline atomic add */\n" -+ "1: ssrf 5\n" -+ " ld.w %0, %2\n" -+ " add %0, %3\n" -+ " stcond %2, %0\n" -+ " brne 1b" -+ : "=&r"(result), "=m"(*mem) -+ : "m"(*mem), "r"(val) -+ : "cc", "memory"); -+} -+ -+static inline int -+__attribute__((unused)) -+compare_and_swap(volatile long int *p, long int oldval, long int newval) -+{ -+ long int result, tmp; -+ -+ __asm__ __volatile__( -+ "/* Inline compare and swap */\n" -+ "1: ssrf 5\n" -+ " ld.w %1, %3\n" -+ " cp.w %1, %5\n" -+ " sreq %0\n" -+ " brne 2f\n" -+ " stcond %2, %4\n" -+ " brne 1b\n" -+ "2:" -+ : "=&r"(result), "=&r"(tmp), "=m"(*p) -+ : "m"(*p), "r"(newval), "r"(oldval) -+ : "cc", "memory"); -+ -+ return result; -+} -+ -+#endif /* atomicity.h */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/byteswap.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,80 @@ -+/* Macros to swap the order of bytes in integer values. -+ Copyright (C) 2005 Atmel Norway. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#if !defined _BYTESWAP_H && !defined _NETINET_IN_H -+# error "Never use directly; include instead." -+#endif -+ -+#ifndef _BITS_BYTESWAP_H -+#define _BITS_BYTESWAP_H 1 -+ -+/* Swap bytes in 16 bit value. */ -+#if defined __GNUC__ -+# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) -+#else -+/* This is better than nothing. */ -+static __inline unsigned short int -+__bswap_16 (unsigned short int __bsx) -+{ -+ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); -+} -+#endif -+ -+/* Swap bytes in 32 bit value. */ -+#if defined __GNUC__ -+# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) -+#else -+static __inline unsigned int -+__bswap_32 (unsigned int __bsx) -+{ -+ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | -+ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); -+} -+#endif -+ -+#if defined __GNUC__ -+/* Swap bytes in 64 bit value. */ -+# define __bswap_constant_64(x) \ -+ ((((x) & 0xff00000000000000ull) >> 56) \ -+ | (((x) & 0x00ff000000000000ull) >> 40) \ -+ | (((x) & 0x0000ff0000000000ull) >> 24) \ -+ | (((x) & 0x000000ff00000000ull) >> 8) \ -+ | (((x) & 0x00000000ff000000ull) << 8) \ -+ | (((x) & 0x0000000000ff0000ull) << 24) \ -+ | (((x) & 0x000000000000ff00ull) << 40) \ -+ | (((x) & 0x00000000000000ffull) << 56)) -+ -+# define __bswap_64(x) \ -+ (__extension__ \ -+ ({ \ -+ union { \ -+ __extension__ unsigned long long int __ll; \ -+ unsigned int __l[2]; \ -+ } __w, __r; \ -+ if (__builtin_constant_p(x)) \ -+ __r.__ll = __bswap_constant_64(x); \ -+ else { \ -+ __w.__ll = (x); \ -+ __r.__l[0] = __bswap_32(__w.__l[1]); \ -+ __r.__l[1] = __bswap_32(__w.__l[0]); \ -+ } \ -+ __r.__ll; \ -+ })) -+#endif -+ -+#endif /* _BITS_BYTESWAP_H */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/endian.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/endian.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,7 @@ -+/* AVR32 is big-endian */ -+ -+#ifndef _ENDIAN_H -+# error "Never use directly; include instead." -+#endif -+ -+#define __BYTE_ORDER __BIG_ENDIAN -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/fcntl.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,167 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ * -+ * This file is part of the Linux kernel -+ */ -+#ifndef _FCNTL_H -+# error "Never use directly; include instead." -+#endif -+ -+#include -+ -+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files -+ located on an ext2 file system */ -+#define O_ACCMODE 0003 -+#define O_RDONLY 00 -+#define O_WRONLY 01 -+#define O_RDWR 02 -+#define O_CREAT 0100 /* not fcntl */ -+#define O_EXCL 0200 /* not fcntl */ -+#define O_NOCTTY 0400 /* not fcntl */ -+#define O_TRUNC 01000 /* not fcntl */ -+#define O_APPEND 02000 -+#define O_NONBLOCK 04000 -+#define O_NDELAY O_NONBLOCK -+#define O_SYNC 010000 -+#define O_ASYNC 020000 -+ -+#ifdef __USE_GNU -+# define O_DIRECTORY 040000 /* must be a directory */ -+# define O_NOFOLLOW 0100000 /* don't follow links */ -+# define O_DIRECT 0200000 /* direct disk access */ -+#endif -+ -+#ifdef __USE_LARGEFILE64 -+# define O_LARGEFILE 0400000 -+#endif -+ -+/* For now Linux has synchronisity options for data and read operations. -+ We define the symbols here but let them do the same as O_SYNC since -+ this is a superset. */ -+#if defined __USE_POSIX199309 || defined __USE_UNIX98 -+# define O_DSYNC O_SYNC /* Synchronize data. */ -+# define O_RSYNC O_SYNC /* Synchronize read operations. */ -+#endif -+ -+#define F_DUPFD 0 /* dup */ -+#define F_GETFD 1 /* get close_on_exec */ -+#define F_SETFD 2 /* set/clear close_on_exec */ -+#define F_GETFL 3 /* get file->f_flags */ -+#define F_SETFL 4 /* set file->f_flags */ -+ -+#ifndef __USE_FILE_OFFSET64 -+# define F_GETLK 5 -+# define F_SETLK 6 -+# define F_SETLKW 7 -+#else -+# define F_GETLK F_GETLK64 -+# define F_SETLK F_SETLK64 -+# define F_SETLKW F_SETLKW64 -+#endif -+#define F_GETLK64 12 /* using 'struct flock64' */ -+#define F_SETLK64 13 -+#define F_SETLKW64 14 -+ -+#if defined __USE_BSD || defined __USE_XOPEN2K -+# define F_SETOWN 8 /* for sockets. */ -+# define F_GETOWN 9 /* for sockets. */ -+#endif -+ -+#ifdef __USE_GNU -+# define F_SETSIG 10 /* for sockets. */ -+# define F_GETSIG 11 /* for sockets. */ -+#endif -+ -+#ifdef __USE_GNU -+# define F_SETLEASE 1024 /* Set a lease. */ -+# define F_GETLEASE 1025 /* Enquire what lease is active. */ -+# define F_NOTIFY 1026 /* Request notfications on a directory. */ -+#endif -+ -+/* for F_[GET|SET]FL */ -+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ -+ -+/* for posix fcntl() and lockf() */ -+#define F_RDLCK 0 -+#define F_WRLCK 1 -+#define F_UNLCK 2 -+ -+/* for old implementation of bsd flock () */ -+#define F_EXLCK 4 /* or 3 */ -+#define F_SHLCK 8 /* or 4 */ -+ -+/* for leases */ -+#define F_INPROGRESS 16 -+ -+#ifdef __USE_BSD -+/* operations for bsd flock(), also used by the kernel implementation */ -+# define LOCK_SH 1 /* shared lock */ -+# define LOCK_EX 2 /* exclusive lock */ -+# define LOCK_NB 4 /* or'd with one of the above to prevent -+ blocking */ -+# define LOCK_UN 8 /* remove lock */ -+#endif -+ -+#ifdef __USE_GNU -+# define LOCK_MAND 32 /* This is a mandatory flock */ -+# define LOCK_READ 64 /* ... Which allows concurrent -+ read operations */ -+# define LOCK_WRITE 128 /* ... Which allows concurrent -+ write operations */ -+# define LOCK_RW 192 /* ... Which allows concurrent -+ read & write ops */ -+#endif -+ -+#ifdef __USE_GNU -+/* Types of directory notifications that may be requested with F_NOTIFY. */ -+# define DN_ACCESS 0x00000001 /* File accessed. */ -+# define DN_MODIFY 0x00000002 /* File modified. */ -+# define DN_CREATE 0x00000004 /* File created. */ -+# define DN_DELETE 0x00000008 /* File removed. */ -+# define DN_RENAME 0x00000010 /* File renamed. */ -+# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ -+# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ -+#endif -+ -+struct flock { -+ short l_type; -+ short l_whence; -+#ifndef __USE_FILE_OFFSET64 -+ __off_t l_start; -+ __off_t l_len; -+#else -+ __off64_t l_start; -+ __off64_t l_len; -+#endif -+ __pid_t l_pid; -+}; -+ -+#ifdef __USE_LARGEFILE64 -+struct flock64 { -+ short l_type; -+ short l_whence; -+ __off64_t l_start; -+ __off64_t l_len; -+ __pid_t l_pid; -+}; -+#endif -+ -+/* Define some more compatibility macros to be backward compatible with -+ * BSD systems which did not managed to hide these kernel macros. */ -+#ifdef __USE_BSD -+# define FAPPEND O_APPEND -+# define FFSYNC O_FSYNC -+# define FASYNC O_ASYNC -+# define FNONBLOCK O_NONBLOCK -+# define FNDELAY O_NDELAY -+#endif /* Use BSD. */ -+ -+/* Advise to `posix_fadvise'. */ -+#ifdef __USE_XOPEN2K -+# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ -+# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ -+# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ -+# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ -+# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ -+#endif -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_stat.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,63 @@ -+#ifndef _BITS_STAT_STRUCT_H -+#define _BITS_STAT_STRUCT_H -+ -+/* -+ * This file provides struct stat, taken from kernel 2.6.4 -+ * (include/asm-avr32/stat.h revision 1.1). -+ */ -+ -+struct kernel_stat { -+ unsigned long st_dev; -+ unsigned long st_ino; -+ unsigned short st_mode; -+ unsigned short st_nlink; -+ unsigned short st_uid; -+ unsigned short st_gid; -+ unsigned long st_rdev; -+ unsigned long st_size; -+ unsigned long st_blksize; -+ unsigned long st_blocks; -+ unsigned long st_atime; -+ unsigned long st_atime_nsec; -+ unsigned long st_mtime; -+ unsigned long st_mtime_nsec; -+ unsigned long st_ctime; -+ unsigned long st_ctime_nsec; -+ unsigned long __unused4; -+ unsigned long __unused5; -+}; -+ -+#define STAT_HAVE_NSEC 1 -+ -+struct kernel_stat64 { -+ unsigned long long st_dev; -+ -+ unsigned long long st_ino; -+ unsigned int st_mode; -+ unsigned int st_nlink; -+ -+ unsigned long st_uid; -+ unsigned long st_gid; -+ -+ unsigned long long st_rdev; -+ -+ long long st_size; -+ unsigned long __pad1; -+ unsigned long st_blksize; -+ -+ unsigned long long st_blocks; -+ -+ unsigned long st_atime; -+ unsigned long st_atime_nsec; -+ -+ unsigned long st_mtime; -+ unsigned long st_mtime_nsec; -+ -+ unsigned long st_ctime; -+ unsigned long st_ctime_nsec; -+ -+ unsigned long __unused1; -+ unsigned long __unused2; -+}; -+ -+#endif /* _BITS_STAT_STRUCT_H */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_types.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,56 @@ -+/* Note that we use the exact same include guard #define names -+ * as asm/posix_types.h. This will avoid gratuitous conflicts -+ * with the posix_types.h kernel header, and will ensure that -+ * our private content, and not the kernel header, will win. -+ * -Erik -+ */ -+#ifndef __ASM_AVR32_POSIX_TYPES_H -+#define __ASM_AVR32_POSIX_TYPES_H -+ -+/* -+ * This file is generally used by user-level software, so you need to -+ * be a little careful about namespace pollution etc. Also, we cannot -+ * assume GCC is being used. -+ */ -+ -+typedef unsigned long __kernel_dev_t; -+typedef unsigned long __kernel_ino_t; -+typedef unsigned short __kernel_mode_t; -+typedef unsigned short __kernel_nlink_t; -+typedef long __kernel_off_t; -+typedef int __kernel_pid_t; -+typedef unsigned short __kernel_ipc_pid_t; -+typedef unsigned int __kernel_uid_t; -+typedef unsigned int __kernel_gid_t; -+typedef unsigned long __kernel_size_t; -+typedef int __kernel_ssize_t; -+typedef int __kernel_ptrdiff_t; -+typedef long __kernel_time_t; -+typedef long __kernel_suseconds_t; -+typedef long __kernel_clock_t; -+typedef int __kernel_timer_t; -+typedef int __kernel_clockid_t; -+typedef int __kernel_daddr_t; -+typedef char * __kernel_caddr_t; -+typedef unsigned short __kernel_uid16_t; -+typedef unsigned short __kernel_gid16_t; -+typedef unsigned int __kernel_uid32_t; -+typedef unsigned int __kernel_gid32_t; -+ -+typedef unsigned short __kernel_old_uid_t; -+typedef unsigned short __kernel_old_gid_t; -+typedef unsigned short __kernel_old_dev_t; -+ -+#ifdef __GNUC__ -+typedef long long __kernel_loff_t; -+#endif -+ -+typedef struct { -+#if defined(__USE_ALL) -+ int val[2]; -+#else -+ int __val[2]; -+#endif -+} __kernel_fsid_t; -+ -+#endif /* __ASM_AVR32_POSIX_TYPES_H */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/machine-gmon.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,69 @@ -+/* Machine-dependent definitions for profiling support. AVR32 version. -+ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#define mcount_internal __mcount_internal -+ -+#define _MCOUNT_DECL(frompc, selfpc) \ -+static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc) -+ -+/* -+ * This mcount implementation expects to get called after the prologue -+ * has been run. It also expects that r7 contains a valid frame -+ * pointer. -+ * -+ * When profiling, the compiler should generate something like this at -+ * each function entry: -+ * -+ * pushm r0-r7,lr // lr mandatory, others optional -+ * mov r7, sp -+ * // rest of prologue goes here -+ * mcall pc[.LC1 - .] -+ * // rest of function goes here -+ * .LC1: -+ * .long mcount -+ * -+ * or for PIC: -+ * -+ * pushm r0-r7,lr -+ * mov r7, sp -+ * // rest of prologue goes here -+ * lddpc r0, .LC1 -+ * .L1: rsub r0, pc -+ * mcall r0[mcount@GOT] -+ * // rest of function goes here -+ * .LC1: -+ * .long .L1 - _GLOBAL_OFFSET_TABLE_ -+ * -+ * This way, when mcount() is called, r7 points to the calling -+ * function's return address. It is guaranteed that calling mcount -+ * will clobber no registers except LR, which is unavoidable. -+ */ -+#define MCOUNT asm( \ -+ " .align 4\n" \ -+ " .global _mcount\n" \ -+ " .type _mcount,@function\n" \ -+ "_mcount:\n" \ -+ " pushm r8-r12,lr\n" \ -+ " mov r11, lr\n" \ -+ " ld.w r12, r7[0]\n" \ -+ " rcall __mcount_internal\n" \ -+ " popm r8-r12,pc\n" \ -+ " .size _mcount, . - _mcount\n" \ -+ " .weak mcount\n" \ -+ " mcount = _mcount"); -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/mman.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/mman.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,95 @@ -+/* Definitions for POSIX memory map interface. Linux/AVR32 version. -+ Copyright (C) 1997, 2000 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_MMAN_H -+# error "Never include this file directly. Use instead" -+#endif -+ -+/* The following definitions basically come from the kernel headers. -+ But the kernel header is not namespace clean. */ -+ -+ -+/* Protections are chosen from these bits, OR'd together. The -+ implementation does not necessarily support PROT_EXEC or PROT_WRITE -+ without PROT_READ. The only guarantees are that no writing will be -+ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ -+ -+#define PROT_READ 0x1 /* Page can be read. */ -+#define PROT_WRITE 0x2 /* Page can be written. */ -+#define PROT_EXEC 0x4 /* Page can be executed. */ -+#define PROT_NONE 0x0 /* Page can not be accessed. */ -+ -+/* Sharing types (must choose one and only one of these). */ -+#define MAP_SHARED 0x01 /* Share changes. */ -+#define MAP_PRIVATE 0x02 /* Changes are private. */ -+#ifdef __USE_MISC -+# define MAP_TYPE 0x0f /* Mask for type of mapping. */ -+#endif -+ -+/* Other flags. */ -+#define MAP_FIXED 0x10 /* Interpret addr exactly. */ -+#ifdef __USE_MISC -+# define MAP_FILE 0 -+# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ -+# define MAP_ANON MAP_ANONYMOUS -+#endif -+ -+/* These are Linux-specific. */ -+#ifdef __USE_MISC -+# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ -+# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -+# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ -+# define MAP_LOCKED 0x2000 /* Lock the mapping. */ -+# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ -+# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ -+# define MAP_NONBLOCK 0x10000 /* do not block on IO */ -+#endif -+ -+/* Flags to `msync'. */ -+#define MS_ASYNC 1 /* Sync memory asynchronously. */ -+#define MS_SYNC 4 /* Synchronous memory sync. */ -+#define MS_INVALIDATE 2 /* Invalidate the caches. */ -+ -+/* Flags for `mlockall'. */ -+#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ -+#define MCL_FUTURE 2 /* Lock all additions to address -+ space. */ -+ -+/* Flags for `mremap'. */ -+#ifdef __USE_GNU -+# define MREMAP_MAYMOVE 1 -+#endif -+ -+/* Advise to `madvise'. */ -+#ifdef __USE_BSD -+# define MADV_NORMAL 0 /* No further special treatment. */ -+# define MADV_RANDOM 1 /* Expect random page references. */ -+# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define MADV_WILLNEED 3 /* Will need these pages. */ -+# define MADV_DONTNEED 4 /* Don't need these pages. */ -+#endif -+ -+/* The POSIX people had to invent similar names for the same things. */ -+#ifdef __USE_XOPEN2K -+# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ -+# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ -+# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ -+# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ -+#endif -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/profil-counter.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* Low-level statistical profiling support function. Linux/AVR32 version. -+ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+ -+void -+profil_counter(int signo, siginfo_t *si, struct sigcontext *sc) -+{ -+ profil_count((void *)sc->pc); -+} -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/setjmp.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,21 @@ -+/* -+ * Copyright (C) 2004-2005 Atmel Norway -+ */ -+#ifndef _SETJMP_H -+# error "Never include directly; use instead." -+#endif -+ -+#ifndef _ASM -+/* -+ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are -+ * not saved. -+ */ -+typedef int __jmp_buf[11]; -+#endif -+ -+#define __JMP_BUF_SP 4 -+ -+/* Test if longjmp to JMPBUF would unwind the frame containing a local -+ variable at ADDRESS. */ -+#define _JMPBUF_UNWINDS(jmpbuf, address) \ -+ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/syscalls.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,143 @@ -+#ifndef _SYSCALL_H -+# error "Never use directly; include instead." -+#endif -+ -+/* -+ * This includes the `__NR_' syscall numbers taken from the -+ * Linux kernel header files. It also defines the traditional -+ * `SYS_' macros for older programs. -+ */ -+#include -+ -+#ifndef __set_errno -+# define __set_errno(val) (*__errno_location()) = (val) -+#endif -+#ifndef SYS_ify -+# define SYS_ify(syscall_name) (__NR_##syscall_name) -+#endif -+ -+#ifndef __ASSEMBLER__ -+ -+#undef _syscall0 -+#define _syscall0(type,name) \ -+ type name(void) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 0)); \ -+ } -+ -+#undef _syscall1 -+#define _syscall1(type,name,type1,arg1) \ -+ type name(type1 arg1) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ -+ } -+ -+#undef _syscall2 -+#define _syscall2(type,name,type1,arg1,type2,arg2) \ -+ type name(type1 arg1, type2 arg2) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ -+ } -+ -+#undef _syscall3 -+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ -+ type name(type1 arg1, type2 arg2, type3 arg3) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 3, arg1, \ -+ arg2, arg3)); \ -+ } -+ -+#undef _syscall4 -+#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ -+ type4,arg4) \ -+ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ -+ arg3, arg4)); \ -+ } -+ -+#undef _syscall5 -+#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ -+ type4,arg4,type5,arg5) \ -+ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ -+ type5 arg5) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ -+ arg3, arg4, arg5)); \ -+ } -+ -+#undef _syscall6 -+#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ -+ type4,arg4,type5,arg5,type6,arg6) \ -+ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ -+ type5 arg5, type6 arg6) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ -+ arg4, arg5, arg6)); \ -+ } -+ -+#undef unlikely -+#define unlikely(x) __builtin_expect((x), 0) -+ -+#undef INLINE_SYSCALL -+#define INLINE_SYSCALL(name, nr, args...) \ -+ ({ \ -+ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ -+ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ -+ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ -+ _sys_result = (unsigned int) -1; \ -+ } \ -+ (int) _sys_result; \ -+ }) -+ -+#undef INTERNAL_SYSCALL_DECL -+#define INTERNAL_SYSCALL_DECL(err) do { } while(0) -+ -+#undef INTERNAL_SYSCALL -+#define INTERNAL_SYSCALL(name, err, nr, args...) \ -+ ({ \ -+ register int _a1 asm ("r12"); \ -+ register int _scno asm("r8") = SYS_ify(name); \ -+ LOAD_ARGS_##nr (args); \ -+ asm volatile ("scall /* syscall " #name " */" \ -+ : "=r" (_a1) \ -+ : "r"(_scno) ASM_ARGS_##nr \ -+ : "lr", "cc", "memory"); \ -+ _a1; \ -+ }) -+ -+#undef INTERNAL_SYSCALL_ERROR_P -+#define INTERNAL_SYSCALL_ERROR_P(val, err) \ -+ ((unsigned int)(val) >= 0xfffff001U) -+ -+#undef INTERNAL_SYSCALL_ERRNO -+#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) -+ -+#define LOAD_ARGS_0() do { } while(0) -+#define ASM_ARGS_0 -+#define LOAD_ARGS_1(a1) \ -+ _a1 = (int) (a1); \ -+ LOAD_ARGS_0() -+#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) -+#define LOAD_ARGS_2(a1, a2) \ -+ register int _a2 asm("r11") = (int)(a2); \ -+ LOAD_ARGS_1(a1) -+#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) -+#define LOAD_ARGS_3(a1, a2, a3) \ -+ register int _a3 asm("r10") = (int)(a3); \ -+ LOAD_ARGS_2(a1, a2) -+#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) -+#define LOAD_ARGS_4(a1, a2, a3, a4) \ -+ register int _a4 asm("r9") = (int)(a4); \ -+ LOAD_ARGS_3(a1, a2, a3) -+#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) -+#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ -+ register int _a5 asm("r5") = (int)(a5); \ -+ LOAD_ARGS_4(a1, a2, a3, a4) -+#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) -+#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ -+ register int _a6 asm("r3") = (int)(a6); \ -+ LOAD_ARGS_5(a1, a2, a3, a4, a5) -+#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) -+ -+#endif /* __ASSEMBLER__ */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/wordsize.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1 @@ -+#define __WORDSIZE 32 -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/brk.c ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/brk.c 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,23 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+#include -+ -+void *__curbrk = 0; -+ -+int brk (void *addr) -+{ -+ void *newbrk; -+ -+ newbrk = INLINE_SYSCALL(brk, 1, addr); -+ -+ __curbrk = newbrk; -+ -+ if (newbrk < addr) { -+ __set_errno (ENOMEM); -+ return -1; -+ } -+ -+ return 0; -+} -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-_setjmp.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,12 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+ -+ /* This just does a tail-call to __sigsetjmp(env, 0) */ -+ .global _setjmp -+ .type _setjmp,"function" -+ .align 1 -+_setjmp: -+ mov r11, 0 -+ bral __sigsetjmp_internal -+ .size _setjmp, . - _setjmp -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-setjmp.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,12 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+ -+ /* This just does a tail-call to __sigsetjmp(env, 1) */ -+ .global setjmp -+ .type setjmp,"function" -+ .align 1 -+setjmp: -+ mov r11, 1 -+ bral __sigsetjmp_internal -+ .size setjmp, . - setjmp -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/clone.c ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/clone.c 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,37 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+#include -+#include -+ -+/* -+ * I don't know if we can be absolutely certain that the fn and arg -+ * parameters are preserved when returning as the child. If the -+ * compiler stores them in registers (r0-r7), they should be. -+ */ -+int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) -+{ -+ register int (*_fn)(void *arg) = fn; -+ register void *_arg = arg; -+ int err; -+ -+ /* Sanity check the arguments */ -+ err = -EINVAL; -+ if (!fn) -+ goto syscall_error; -+ if (!child_stack) -+ goto syscall_error; -+ -+ err = INLINE_SYSCALL(clone, 2, flags, child_stack); -+ if (err < 0) -+ goto syscall_error; -+ else if (err != 0) -+ return err; -+ -+ _exit(_fn(_arg)); -+ -+syscall_error: -+ __set_errno (-err); -+ return -1; -+} -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crt1.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crt1.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,93 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ * -+ * When we enter _start, the stack looks like this: -+ * argc argument counter -+ * argv[0] pointer to program name -+ * argv[1..argc-1] pointers to program args -+ * NULL -+ * env[0..N] pointers to environment variables -+ * NULL -+ * -+ * r12 contains a function pointer to be registered with `atexit'. -+ * This is how the dynamic linker arranges to have DT_FINI functions -+ * called for shared libraries that have been loaded before this -+ * code runs. -+ * -+ * We're going to call the following function: -+ * __uClibc_main(int (*main)(int, char **, char **), int argc, -+ * char **argv, void (*app_init)(void), void (*app_fini)(void), -+ * void (*rtld_fini)(void), void *stack_end) -+ * -+ * So we need to set up things as follows: -+ * r12 = address of main -+ * r11 = argc -+ * r10 = &argv[0] -+ * r9 = address of _init -+ * r8 = address of _fini -+ * sp[0] = whatever we got passed in r12 -+ */ -+ -+#include -+ -+ .text -+ .global _start -+ .type _start, @function -+_start: -+ /* Clear the frame pointer and link register since this is the outermost frame. */ -+ mov r7, 0 -+ mov lr, 0 -+ -+ ld.w r11, sp++ /* argc */ -+ mov r10, sp /* &argv[0] */ -+ -+ st.w --sp, r10 /* stack_end */ -+ st.w --sp, r12 /* rtld_fini */ -+ -+#ifdef __PIC__ -+ lddpc r6, .L_GOT -+.L_RGOT: -+ rsub r6, pc -+ lda.w r9, _init -+ lda.w r8, _fini -+ lda.w r12, main -+ -+ /* Ok, now run uClibc's main() -- should not return */ -+ call __uClibc_main -+ -+ .align 2 -+.L_GOT: -+ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ -+#else -+ lddpc r9, __init_addr /* app_init */ -+ lddpc r8, __fini_addr /* app_fini */ -+ lddpc r12, __main_addr /* main */ -+ -+ /* Ok, now run uClibc's main() -- should not return */ -+ lddpc pc, ___uClibc_main_addr -+ -+ .align 2 -+__init_addr: -+ .long _init -+__fini_addr: -+ .long _fini -+__main_addr: -+ .long main -+___uClibc_main_addr: -+ .long __uClibc_main -+#endif -+ .size _start, . - _start -+ -+ /* -+ * The LSB says we need this. -+ */ -+ .section ".note.ABI-tag", "a" -+ .align 4 -+ .long 2f - 1f /* namesz */ -+ .long 4f - 3f /* descsz */ -+ .long 1 /* type */ -+1: .asciz "GNU" /* name */ -+2: .align 4 -+3: .long 0 /* Linux executable */ -+ .long 2,6,0 /* Earliest compatible kernel */ -+4: .align 4 -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crti.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crti.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,17 @@ -+ -+ .section .init -+ .align 2 -+ .global _init -+ .type _init, @function -+_init: -+ /* Use a four-byte instruction to avoid NOPs */ -+ stm --sp, r0-r7,lr -+ .align 2 -+ -+ .section .fini -+ .align 2 -+ .global _fini -+ .type _fini, @function -+_fini: -+ stm --sp, r0-r7,lr -+ .align 2 -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crtn.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crtn.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,14 @@ -+ -+ .section .init -+ .align 2 -+ .global _init -+ .type _init, @function -+ ldm sp++, r0-r7,pc -+ .size _init, . - _init -+ -+ .section .fini -+ .align 2 -+ .global _fini -+ .type _fini, @function -+ ldm sp++, r0-r7,pc -+ .size _fini, . - _fini -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/__longjmp.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/__longjmp.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,17 @@ -+/* longjmp for AVR32 -+ * -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+ -+ .global __longjmp -+ .type __longjmp,"function" -+ .align 1 -+__longjmp: -+ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr -+ mov r12, r11 /* get the return value right */ -+ mustr r8 /* restore status register (lower half) */ -+ cp r12, 0 /* can't return zero */ -+ frs -+ moveq r12, 1 -+ mov pc,lr -+ .size __longjmp, . - __longjmp -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/Makefile ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/Makefile 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,93 @@ -+# Makefile for uClibc -+# -+# Copyright (C) 2000-2003 Erik Andersen -+# -+# This program is free software; you can redistribute it and/or modify it under -+# the terms of the GNU Library 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 Library General Public License for more -+# details. -+# -+# You should have received a copy of the GNU Library 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 -+ -+TOPDIR=../../../../ -+include $(TOPDIR)Rules.mak -+ASFLAGS=$(CFLAGS) -+ -+CRT_SRC = crt1.S -+CRT_OBJ = crt1.o -+SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ)) -+CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o -+ -+SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \ -+ bsd-_setjmp.S sigrestorer.S syscall.S -+SOBJS=$(patsubst %.S,%.o, $(SSRC)) -+ -+CSRC=clone.c brk.c sigaction.c mmap.c -+COBJS=$(patsubst %.c,%.o, $(CSRC)) -+ -+OBJS=$(SOBJS) $(COBJS) -+ -+OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH) -+ -+all: $(OBJ_LIST) -+ -+$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS) -+ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) -+ $(INSTALL) -d $(TOPDIR)lib/ -+ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ -+ -+$(CRT_OBJ): $(CRT_SRC) -+ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+$(SCRT_OBJ): $(CRT_SRC) -+ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+$(SOBJS): %.o : %.S -+ $(CC) $(ASFLAGS) -c $< -o $@ -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+$(COBJS): %.o : %.c -+ $(CC) $(CFLAGS) -c $< -o $@ -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) -+crti.o: crti.S -+ $(CC) $(ASFLAGS) -c crti.S -o crti.o -+ -+$(TOPDIR)lib/crti.o: crti.o -+ $(INSTALL) -d $(TOPDIR)lib/ -+ cp crti.o $(TOPDIR)lib/ -+ -+crtn.o: crtn.S -+ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o -+ -+$(TOPDIR)lib/crtn.o: crtn.o -+ $(INSTALL) -d $(TOPDIR)lib/ -+ cp crtn.o $(TOPDIR)lib/ -+else -+$(TOPDIR)lib/crti.o: -+ $(INSTALL) -d $(TOPDIR)lib/ -+ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o -+$(TOPDIR)lib/crtn.o: -+ $(INSTALL) -d $(TOPDIR)lib/ -+ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o -+endif -+ -+ -+headers: -+# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/ -+ -+clean: -+ $(RM) *.[oa] *~ core -+ $(RM) bits/sysnum.h -+ $(RM) gmon-start.S -+ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/_mmap.c ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/_mmap.c 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,33 @@ -+/* Copyright (C) 2005 Atmel Norway -+ -+ This program is free software; you can redistribute it and/or modify it under -+ the terms of the GNU Library 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 Library General Public License for more -+ details. -+ -+ You should have received a copy of the GNU Library 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 -+ -+ Derived in part from the Linux-8086 C library, the GNU C Library, and several -+ other sundry sources. Files within this library are copyright by their -+ respective copyright holders. -+ */ -+ -+#include -+#include -+#include -+ -+#define __NR_mmap2 __NR_mmap -+ -+static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); -+ -+__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) -+{ -+ return mmap2(addr, len, prot, flags, fd, offset >> 12); -+} -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/mmap.c ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/mmap.c 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,31 @@ -+/* Copyright (C) 2005 Atmel Norway -+ -+ This program is free software; you can redistribute it and/or modify it under -+ the terms of the GNU Library 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 Library General Public License for more -+ details. -+ -+ You should have received a copy of the GNU Library 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 -+ -+ Derived in part from the Linux-8086 C library, the GNU C Library, and several -+ other sundry sources. Files within this library are copyright by their -+ respective copyright holders. -+ */ -+ -+#include -+#include -+#include -+ -+static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); -+ -+__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) -+{ -+ return mmap2(addr, len, prot, flags, fd, offset >> 12); -+} -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/setjmp.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/setjmp.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,43 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#define _SETJMP_H -+#define _ASM -+#include -+ -+ .text -+ -+ .global __sigsetjmp -+ .type __sigsetjmp,"function" -+ -+ /* Create a global, hidden symbol for use by setjmp() and _setjmp(). -+ If it's not hidden, the linker will complain about a relative -+ jump to a dynamic symbol when building a shared library. -+ -+ Also, if a user overrides the __sigsetjmp function, he might not -+ expect the setjmp() and _setjmp() function to effectively be -+ overridden as well. */ -+ .global __sigsetjmp_internal -+ .hidden __sigsetjmp_internal -+ .type __sigsetjmp_internal,"function" -+ .align 1 -+__sigsetjmp: -+__sigsetjmp_internal: -+ mustr r8 -+ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr -+ -+ /* Make a tail call to __sigjmp_save; it takes the same args. */ -+#ifdef __PIC__ -+ mov r9, r6 -+ lddpc r6, .LG -+.L1: rsub r6, pc -+ ld.w r8, r6[__sigjmp_save@got] -+ mov r6, r9 -+ mov pc, r8 -+ -+ .align 2 -+.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_ -+#else -+ rjmp __sigjmp_save -+#endif -+ .size __sigsetjmp, . - __sigsetjmp -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigaction.c ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigaction.c 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,49 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+#include -+#include -+#include -+#include -+ -+#define SA_RESTORER 0x04000000 -+extern void __default_rt_sa_restorer(void); -+ -+/* -+ * If act is not NULL, change the action for sig to *act. -+ * If oact is not NULL, put the old action for sig in *oact. -+ */ -+int __libc_sigaction(int signum, const struct sigaction *act, -+ struct sigaction *oldact) -+{ -+ struct kernel_sigaction kact, koact; -+ int result; -+ -+ if (act) { -+ kact.k_sa_handler = act->sa_handler; -+ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); -+ kact.sa_flags = act->sa_flags; -+ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) -+ kact.sa_restorer = act->sa_restorer; -+ else -+ kact.sa_restorer = __default_rt_sa_restorer; -+ kact.sa_flags |= SA_RESTORER; -+ } -+ -+ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, -+ oldact ? __ptrvalue(&koact) : NULL, -+ _NSIG / 8); -+ -+ if (oldact && result >= 0) { -+ oldact->sa_handler = koact.k_sa_handler; -+ memcpy(&oldact->sa_mask, &koact.sa_mask, -+ sizeof(oldact->sa_mask)); -+ oldact->sa_flags = koact.sa_flags; -+ oldact->sa_restorer = koact.sa_restorer; -+ } -+ -+ return result; -+} -+ -+weak_alias(__libc_sigaction, sigaction) -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigrestorer.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigrestorer.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,11 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+ -+ .global __default_rt_sa_restorer -+ .type __default_rt_sa_restorer,"function" -+ .align 1 -+__default_rt_sa_restorer: -+ mov r8, __NR_rt_sigreturn -+ scall -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/elf.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/elf.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_ELF_H -+#define _SYS_ELF_H 1 -+ -+#warning "This header is obsolete; use instead." -+ -+#include -+ -+#endif /* sys/elf.h */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/io.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/io.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,48 @@ -+/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_IO_H -+ -+#define _SYS_IO_H 1 -+#include -+ -+__BEGIN_DECLS -+ -+/* If TURN_ON is TRUE, request for permission to do direct i/o on the -+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O -+ permission off for that range. This call requires root privileges. */ -+extern int ioperm (unsigned long int __from, unsigned long int __num, -+ int __turn_on) __THROW; -+ -+/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, -+ permission to access any I/O port is granted. This call requires -+ root privileges. */ -+extern int iopl (int __level) __THROW; -+ -+/* The functions that actually perform reads and writes. */ -+extern unsigned char inb (unsigned long int port) __THROW; -+extern unsigned short int inw (unsigned long int port) __THROW; -+extern unsigned long int inl (unsigned long int port) __THROW; -+ -+extern void outb (unsigned char value, unsigned long int port) __THROW; -+extern void outw (unsigned short value, unsigned long int port) __THROW; -+extern void outl (unsigned long value, unsigned long int port) __THROW; -+ -+__END_DECLS -+ -+#endif /* _SYS_IO_H */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/procfs.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/procfs.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,123 @@ -+/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_PROCFS_H -+#define _SYS_PROCFS_H 1 -+ -+/* This is somewhat modelled after the file of the same name on SVR4 -+ systems. It provides a definition of the core file format for ELF -+ used on Linux. It doesn't have anything to do with the /proc file -+ system, even though Linux has one. -+ -+ Anyway, the whole purpose of this file is for GDB and GDB only. -+ Don't read too much into it. Don't use it for anything other than -+ GDB unless you know what you are doing. */ -+ -+#include -+#include -+#include -+#include -+ -+__BEGIN_DECLS -+ -+/* Type for a general-purpose register. */ -+typedef unsigned long elf_greg_t; -+ -+/* And the whole bunch of them. We could have used `struct -+ user_regs' directly in the typedef, but tradition says that -+ the register set is an array, which does have some peculiar -+ semantics, so leave it that way. */ -+#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) -+typedef elf_greg_t elf_gregset_t[ELF_NGREG]; -+ -+/* Register set for the floating-point registers. */ -+typedef struct user_fpregs elf_fpregset_t; -+ -+/* Signal info. */ -+struct elf_siginfo -+ { -+ int si_signo; /* Signal number. */ -+ int si_code; /* Extra code. */ -+ int si_errno; /* Errno. */ -+ }; -+ -+/* Definitions to generate Intel SVR4-like core files. These mostly -+ have the same names as the SVR4 types with "elf_" tacked on the -+ front to prevent clashes with Linux definitions, and the typedef -+ forms have been avoided. This is mostly like the SVR4 structure, -+ but more Linuxy, with things that Linux does not support and which -+ GDB doesn't really use excluded. */ -+ -+struct elf_prstatus -+ { -+ struct elf_siginfo pr_info; /* Info associated with signal. */ -+ short int pr_cursig; /* Current signal. */ -+ unsigned long int pr_sigpend; /* Set of pending signals. */ -+ unsigned long int pr_sighold; /* Set of held signals. */ -+ __pid_t pr_pid; -+ __pid_t pr_ppid; -+ __pid_t pr_pgrp; -+ __pid_t pr_sid; -+ struct timeval pr_utime; /* User time. */ -+ struct timeval pr_stime; /* System time. */ -+ struct timeval pr_cutime; /* Cumulative user time. */ -+ struct timeval pr_cstime; /* Cumulative system time. */ -+ elf_gregset_t pr_reg; /* GP registers. */ -+ int pr_fpvalid; /* True if math copro being used. */ -+ }; -+ -+ -+#define ELF_PRARGSZ (80) /* Number of chars for args. */ -+ -+struct elf_prpsinfo -+ { -+ char pr_state; /* Numeric process state. */ -+ char pr_sname; /* Char for pr_state. */ -+ char pr_zomb; /* Zombie. */ -+ char pr_nice; /* Nice val. */ -+ unsigned long int pr_flag; /* Flags. */ -+ unsigned short int pr_uid; -+ unsigned short int pr_gid; -+ int pr_pid, pr_ppid, pr_pgrp, pr_sid; -+ /* Lots missing */ -+ char pr_fname[16]; /* Filename of executable. */ -+ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ -+ }; -+ -+/* The rest of this file provides the types for emulation of the -+ Solaris interfaces that should be implemented by -+ users of libthread_db. */ -+ -+/* Addresses. */ -+typedef void *psaddr_t; -+ -+/* Register sets. Linux has different names. */ -+typedef elf_gregset_t prgregset_t; -+typedef elf_fpregset_t prfpregset_t; -+ -+/* We don't have any differences between processes and threads, -+ therefore have only one PID type. */ -+typedef __pid_t lwpid_t; -+ -+/* Process status and info. In the end we do provide typedefs for them. */ -+typedef struct elf_prstatus prstatus_t; -+typedef struct elf_prpsinfo prpsinfo_t; -+ -+__END_DECLS -+ -+#endif /* sys/procfs.h */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/ucontext.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,94 @@ -+/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+/* Linux/AVR32 ABI compliant context switching support. */ -+ -+#ifndef _SYS_UCONTEXT_H -+#define _SYS_UCONTEXT_H 1 -+ -+#include -+#include -+#include -+#include -+ -+typedef int greg_t; -+ -+/* Number of general registers. */ -+#define NGREG 16 -+ -+/* Container for all general registers. */ -+typedef elf_gregset_t gregset_t; -+ -+/* Number of each register is the `gregset_t' array. */ -+enum -+{ -+ R0 = 0, -+#define R0 R0 -+ R1 = 1, -+#define R1 R1 -+ R2 = 2, -+#define R2 R2 -+ R3 = 3, -+#define R3 R3 -+ R4 = 4, -+#define R4 R4 -+ R5 = 5, -+#define R5 R5 -+ R6 = 6, -+#define R6 R6 -+ R7 = 7, -+#define R7 R7 -+ R8 = 8, -+#define R8 R8 -+ R9 = 9, -+#define R9 R9 -+ R10 = 10, -+#define R10 R10 -+ R11 = 11, -+#define R11 R11 -+ R12 = 12, -+#define R12 R12 -+ R13 = 13, -+#define R13 R13 -+ R14 = 14, -+#define R14 R14 -+ R15 = 15 -+#define R15 R15 -+}; -+ -+/* Structure to describe FPU registers. */ -+typedef elf_fpregset_t fpregset_t; -+ -+/* Context to describe whole processor state. */ -+typedef struct -+ { -+ gregset_t gregs; -+ fpregset_t fpregs; -+ } mcontext_t; -+ -+/* Userlevel context. */ -+typedef struct ucontext -+{ -+ unsigned long uc_flags; -+ struct ucontext *uc_link; -+ stack_t uc_stack; -+ struct sigcontext uc_mcontext; -+ sigset_t uc_sigmask; /* mask last for extensibility */ -+} ucontext_t; -+ -+#endif /* sys/ucontext.h */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/user.h ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/user.h 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,46 @@ -+#ifndef _SYS_USER_H -+#define _SYS_USER_H -+ -+struct user_fpregs -+{ -+ -+}; -+ -+struct user_regs -+{ -+ unsigned long sr; -+ unsigned long pc; -+ unsigned long lr; -+ unsigned long sp; -+ unsigned long r12; -+ unsigned long r11; -+ unsigned long r10; -+ unsigned long r9; -+ unsigned long r8; -+ unsigned long r7; -+ unsigned long r6; -+ unsigned long r5; -+ unsigned long r4; -+ unsigned long r3; -+ unsigned long r2; -+ unsigned long r1; -+ unsigned long r0; -+ unsigned long r12_orig; -+}; -+ -+struct user -+{ -+ struct user_regs regs; /* general registers */ -+ size_t u_tsize; /* text size (pages) */ -+ size_t u_dsize; /* data size (pages) */ -+ size_t u_ssize; /* stack size (pages) */ -+ unsigned long start_code; /* text starting address */ -+ unsigned long start_data; /* data starting address */ -+ unsigned long start_stack; /* stack starting address */ -+ long int signal; /* signal causing core dump */ -+ struct user_regs * u_ar0; /* help gdb find registers */ -+ unsigned long magic; /* identifies a core file */ -+ char u_comm[32]; /* user command name */ -+}; -+ -+#endif /* _SYS_USER_H */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/syscall.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/syscall.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,81 @@ -+/* -+ * syscall for AVR32/uClibc -+ * -+ * Copyright (C) 2004 Atmel Norway -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU Library 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 Library General Public License -+ * for more details. -+ * -+ * You should have received a copy of the GNU Library General Public License -+ * along with this program; if not, write to the Free Software Foundation, -+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+#include -+ -+ .text -+ -+ /* -+ * long int syscall(long int sysno, ...) -+ */ -+ .global syscall -+ .type syscall, @function -+ .align 2 -+syscall: -+ stm --sp, r3,r5,lr -+ sub lr, sp, -12 -+ mov r8, r12 -+ ldm lr, r3,r5,r9-r12 -+ scall -+ cp.w r12, -4095 -+ brlo .Ldone -+ -+#ifdef __PIC__ -+ lddpc r5, .Lgot -+.Lgotcalc: -+ rsub r5, pc -+# ifdef __UCLIBC_HAS_THREADS__ -+ mov r3, r12 -+ mcall r5[__errno_location@got] -+ st.w r12[0], r3 -+# else -+ ld.w r3, r5[errno@got] -+ st.w r3[0], r12 -+# endif -+#else -+# ifdef __UCLIBC_HAS_THREADS__ -+ mov r3, r12 -+ mcall .Lerrno_location -+ st.w r12[0], r3 -+# else -+ lddpc r3, .Lerrno -+ st.w r3[0], r12 -+# endif -+#endif -+ mov r12, -1 -+ -+.Ldone: -+ ldm sp++, r3,r5,pc -+ -+ .align 2 -+#ifdef __PIC__ -+.Lgot: -+ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ -+#else -+# ifdef __UCLIBC_HAS_THREADS__ -+.Lerrno_location: -+ .long __errno_location -+# else -+.Lerrno: -+ .long errno -+# endif -+#endif -+ -+ -+ .size syscall, . - syscall -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/vfork.S ---- uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/vfork.S 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,55 @@ -+ /* -+ * vfork for uClibc -+ * -+ * Copyright (C) 2005 Atmel Norway -+ */ -+ -+ /* -+ * Clone the process without copying the address space. The -+ * calling process is suspended until the child either exits -+ * or calls execve. -+ * -+ * This all means that we cannot rely on the stack to store -+ * away registers, since they will be overwritten by the child -+ * as soon as it makes another function call (e.g. execve()). -+ * Fortunately, the Linux kernel preserves LR across system calls. -+ */ -+#include -+#include -+ -+ .global __vfork -+ .type __vfork,@function -+ .align 1 -+__vfork: -+ mov r8, __NR_vfork -+ scall -+ cp.w r12, -4096 -+ retls r12 -+ -+ /* vfork failed, so we may use the stack freely */ -+ pushm r4-r7,lr -+#ifdef __PIC__ -+ lddpc r6, .L_GOT -+ rsub r4, r12, 0 -+.L_RGOT: -+ rsub r6, pc -+ mcall r6[__errno_location@got] -+#else -+ rsub r4, r12, 0 -+ mcall .L__errno_location -+#endif -+ st.w r12[0], r4 -+ popm r4-r7,pc,r12=-1 -+ -+ .align 2 -+#ifdef __PIC__ -+.L_GOT: -+ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ -+#else -+.L__errno_location: -+ .long __errno_location -+#endif -+ .size __vfork, . - __vfork -+ -+ .weak vfork -+ vfork = __vfork -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/create_module.c ---- uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c 2005-08-18 00:49:42.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/create_module.c 2006-06-21 11:35:57.000000000 +0200 -@@ -61,7 +61,8 @@ - { - return __create_module(name, size, 0, 0); - } --#else -+/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */ -+#elif !defined(__avr32__) - /* Sparc, MIPS, etc don't mistake return values for errors. */ - _syscall2(unsigned long, create_module, const char *, name, size_t, size); - #endif -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/getrusage.c ---- uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c 2005-08-18 00:49:42.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/getrusage.c 2006-06-21 11:35:56.000000000 +0200 -@@ -10,4 +10,4 @@ - #include "syscalls.h" - #include - #include --_syscall2(int, getrusage, int, who, struct rusage *, usage); -+_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage); -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/open64.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/open64.c ---- uClibc-0.9.28/libc/sysdeps/linux/common/open64.c 2005-08-18 00:49:42.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/open64.c 2006-06-21 11:35:56.000000000 +0200 -@@ -26,7 +26,7 @@ - #endif - - #ifdef __UCLIBC_HAS_LFS__ --extern int __libc_open (__const char *file, int oflag, mode_t mode); -+extern int __libc_open (__const char *file, int oflag, ...); - - /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, - a third argument is the file protection. */ -diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/__syscall_fcntl.c ---- uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c 2005-08-18 00:49:42.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-06-21 11:35:56.000000000 +0200 -@@ -12,7 +12,7 @@ - #include - - #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 --extern int __libc_fcntl64(int fd, int cmd, long arg); -+extern int __libc_fcntl64(int fd, int cmd, ...); - #endif - - #define __NR___syscall_fcntl __NR_fcntl -diff -Nur uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h uClibc-0.9.28-avr32-20060621/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h ---- uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-06-21 11:35:57.000000000 +0200 -@@ -0,0 +1,92 @@ -+/* Machine-dependent pthreads configuration and inline functions. -+ -+ Copyright (C) 2005 Atmel Norway -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; see the file COPYING.LIB. If not, -+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#ifndef _PT_MACHINE_H -+#define _PT_MACHINE_H 1 -+ -+#include -+ -+static inline int -+_test_and_set (int *p, int v) __THROW -+{ -+ int result; -+ -+ __asm__ __volatile__( -+ "/* Inline test and set */\n" -+ "1: ssrf 5\n" -+ " ld.w %0, %2\n" -+ " tst %0, %3\n" -+ " breq 2f\n" -+ " stcond %1, %3\n" -+ " brne 1b\n" -+ "2:" -+ : "=&r"(result), "=m"(*p) -+ : "m"(*p), "r"(v) -+ : "memory", "cc"); -+ -+ return result; -+} -+ -+#ifndef PT_EI -+# define PT_EI extern inline -+#endif -+ -+extern long int testandset (int *spinlock); -+extern int __compare_and_swap (long int *p, long int oldval, long int newval); -+ -+/* Spinlock implementation; required. */ -+PT_EI long int -+testandset (int *spinlock) -+{ -+ return _test_and_set(spinlock, 1); -+} -+ -+ -+/* Get some notion of the current stack. Need not be exactly the top -+ of the stack, just something somewhere in the current frame. */ -+#define CURRENT_STACK_FRAME stack_pointer -+register char * stack_pointer __asm__ ("sp"); -+ -+/* Compare-and-swap for semaphores. */ -+ -+#define HAS_COMPARE_AND_SWAP -+PT_EI int -+__compare_and_swap(long int *p, long int oldval, long int newval) -+{ -+ long int result, tmp; -+ -+ __asm__ __volatile__( -+ "/* Inline compare and swap */\n" -+ "1: ssrf 5\n" -+ " ld.w %1, %3\n" -+ " cp.w %1, %5\n" -+ " sreq %0\n" -+ " brne 2f\n" -+ " stcond %2, %4\n" -+ " brne 1b\n" -+ "2:" -+ : "=&r"(result), "=&r"(tmp), "=m"(*p) -+ : "m"(*p), "r"(newval), "r"(oldval) -+ : "cc", "memory"); -+ -+ return result; -+} -+ -+#endif /* pt-machine.h */ -diff -Nur uClibc-0.9.28/Makefile uClibc-0.9.28-avr32-20060621/Makefile ---- uClibc-0.9.28/Makefile 2005-08-18 00:49:49.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/Makefile 2006-06-21 11:35:57.000000000 +0200 -@@ -163,7 +163,7 @@ - else \ - extra_exclude="" ; \ - fi ; \ -- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \ -+ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \ - | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX) - ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y) - # Remove floating point related headers since float support is disabled. -diff -Nur uClibc-0.9.28/Rules.mak uClibc-0.9.28-avr32-20060621/Rules.mak ---- uClibc-0.9.28/Rules.mak 2005-08-18 00:49:49.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/Rules.mak 2006-06-21 11:35:57.000000000 +0200 -@@ -231,6 +231,10 @@ - UCLIBC_LDSO=ld.so.1 - endif - -+ifeq ($(strip $(TARGET_ARCH)),avr32) -+ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 -+endif -+ - # Keep the check_gcc from being needlessly executed - ifndef PIEFLAG - ifneq ($(UCLIBC_BUILD_PIE),y) -@@ -266,7 +270,11 @@ - # If -msoft-float isn't supported, we want an error anyway. - # Hmm... might need to revisit this for arm since it has 2 different - # soft float encodings. -+ifeq ($(strip $(TARGET_ARCH)),avr32) -+# GCC on avr32 doesn't support -msoft-float, it's the default. -+else - CPU_CFLAGS += -msoft-float -+endif - ifeq ($(strip $(TARGET_ARCH)),arm) - # No longer needed with current toolchains, but leave it here for now. - # If anyone is actually still using gcc 2.95 (say), they can uncomment it. -diff -Nur uClibc-0.9.28/Rules.mak.orig uClibc-0.9.28-avr32-20060621/Rules.mak.orig ---- uClibc-0.9.28/Rules.mak.orig 1970-01-01 01:00:00.000000000 +0100 -+++ uClibc-0.9.28-avr32-20060621/Rules.mak.orig 2006-06-21 11:35:56.000000000 +0200 -@@ -0,0 +1,358 @@ -+# Rules.make for uClibc -+# -+# Copyright (C) 2000 by Lineo, inc. -+# Copyright (C) 2000-2002 Erik Andersen -+# -+# This program is free software; you can redistribute it and/or modify it under -+# the terms of the GNU Library 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 Library General Public License for more -+# details. -+# -+# You should have received a copy of the GNU Library 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 -+ -+ -+#----------------------------------------------------------- -+# This file contains rules which are shared between multiple -+# Makefiles. All normal configuration options live in the -+# file named ".config". Don't mess with this file unless -+# you know what you are doing. -+ -+ -+#----------------------------------------------------------- -+# If you are running a cross compiler, you will want to set -+# 'CROSS' to something more interesting ... Target -+# architecture is determined by asking the CC compiler what -+# arch it compiles things for, so unless your compiler is -+# broken, you should not need to specify TARGET_ARCH. -+# -+# Most people will set this stuff on the command line, i.e. -+# make CROSS=arm-linux- -+# will build uClibc for 'arm'. -+ -+ifndef CROSS -+CROSS= -+endif -+CC = $(CROSS)gcc -+AR = $(CROSS)ar -+LD = $(CROSS)ld -+NM = $(CROSS)nm -+RANLIB = $(CROSS)ranlib -+STRIPTOOL = $(CROSS)strip -+ -+INSTALL = install -+LN = ln -+RM = rm -f -+ -+# Select the compiler needed to build binaries for your development system -+HOSTCC = gcc -+HOSTCFLAGS = -O2 -Wall -+ -+ -+#--------------------------------------------------------- -+# Nothing beyond this point should ever be touched by mere -+# mortals. Unless you hang out with the gods, you should -+# probably leave all this stuff alone. -+MAJOR_VERSION := 0 -+MINOR_VERSION := 9 -+SUBLEVEL := 28 -+VERSION := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL) -+# Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc. -+LC_ALL := C -+export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION LC_ALL -+ -+SHARED_FULLNAME:=libuClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so -+SHARED_MAJORNAME:=libc.so.$(MAJOR_VERSION) -+UCLIBC_LDSO:=ld-uClibc.so.$(MAJOR_VERSION) -+LIBNAME:=libc.a -+LIBC:=$(TOPDIR)libc/$(LIBNAME) -+ -+# Make sure DESTDIR and PREFIX can be used to install -+# PREFIX is a uClibcism while DESTDIR is a common GNUism -+ifndef PREFIX -+PREFIX = $(DESTDIR) -+endif -+ -+# Pull in the user's uClibc configuration -+ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) -+-include $(TOPDIR).config -+endif -+ -+ifndef CROSS -+CROSS=$(subst ",, $(strip $(CROSS_COMPILER_PREFIX))) -+endif -+ -+# A nifty macro to make testing gcc features easier -+check_gcc=$(shell \ -+ if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ -+ then echo "$(1)"; else echo "$(2)"; fi) -+check_as=$(shell \ -+ if $(CC) -Wa,$(1) -Wa,-Z -c -o /dev/null -xassembler /dev/null > /dev/null 2>&1; \ -+ then echo "-Wa,$(1)"; fi) -+ -+# Setup some shortcuts so that silent mode is silent like it should be -+ifeq ($(subst s,,$(MAKEFLAGS)),$(MAKEFLAGS)) -+export MAKE_IS_SILENT=n -+SECHO=@echo -+SHELL_SET_X=set -x -+else -+export MAKE_IS_SILENT=y -+SECHO=-@false -+SHELL_SET_X=set +x -+endif -+ -+# Make certain these contain a final "/", but no "//"s. -+TARGET_ARCH:=$(shell grep -s ^TARGET_ARCH $(TOPDIR)/.config | sed -e 's/^TARGET_ARCH=//' -e 's/"//g') -+RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(RUNTIME_PREFIX)))))) -+DEVEL_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(DEVEL_PREFIX)))))) -+export RUNTIME_PREFIX DEVEL_PREFIX -+ -+ARFLAGS:=cr -+ -+OPTIMIZATION:= -+PICFLAG:=-fPIC -+PIEFLAG_NAME:=-fPIE -+ -+# Some nice CPU specific optimizations -+ifeq ($(strip $(TARGET_ARCH)),i386) -+ OPTIMIZATION+=$(call check_gcc,-mpreferred-stack-boundary=2,) -+ OPTIMIZATION+=$(call check_gcc,-falign-jumps=0 -falign-loops=0,-malign-jumps=0 -malign-loops=0) -+ CPU_CFLAGS-$(CONFIG_386)+=-march=i386 -+ CPU_CFLAGS-$(CONFIG_486)+=-march=i486 -+ CPU_CFLAGS-$(CONFIG_ELAN)+=-march=i486 -+ CPU_CFLAGS-$(CONFIG_586)+=-march=i586 -+ CPU_CFLAGS-$(CONFIG_586MMX)+=$(call check_gcc,-march=pentium-mmx,-march=i586) -+ CPU_CFLAGS-$(CONFIG_686)+=-march=i686 -+ CPU_CFLAGS-$(CONFIG_PENTIUMII)+=$(call check_gcc,-march=pentium2,-march=i686) -+ CPU_CFLAGS-$(CONFIG_PENTIUMIII)+=$(call check_gcc,-march=pentium3,-march=i686) -+ CPU_CFLAGS-$(CONFIG_PENTIUM4)+=$(call check_gcc,-march=pentium4,-march=i686) -+ CPU_CFLAGS-$(CONFIG_K6)+=$(call check_gcc,-march=k6,-march=i586) -+ CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-malign-functions=4 -march=i686) -+ CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686 -malign-functions=0 -malign-jumps=0 -malign-loops=0 -+ CPU_CFLAGS-$(CONFIG_WINCHIPC6)+=$(call check_gcc,-march=winchip-c6,-march=i586) -+ CPU_CFLAGS-$(CONFIG_WINCHIP2)+=$(call check_gcc,-march=winchip2,-march=i586) -+ CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486) -malign-functions=0 -malign-jumps=0 -malign-loops=0 -+ CPU_CFLAGS-$(CONFIG_NEHEMIAH)+=$(call check_gcc,-march=c3-2,-march=i686) -+endif -+ -+ifeq ($(strip $(TARGET_ARCH)),arm) -+ OPTIMIZATION+=-fstrict-aliasing -+ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL -+ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB -+ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-mlittle-endian -+ CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mbig-endian -+ CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+= -+ CPU_CFLAGS-$(CONFIG_ARM610)+=-mtune=arm610 -march=armv3 -+ CPU_CFLAGS-$(CONFIG_ARM710)+=-mtune=arm710 -march=armv3 -+ CPU_CFLAGS-$(CONFIG_ARM720T)+=-mtune=arm7tdmi -march=armv4 -+ CPU_CFLAGS-$(CONFIG_ARM920T)+=-mtune=arm9tdmi -march=armv4 -+ CPU_CFLAGS-$(CONFIG_ARM922T)+=-mtune=arm9tdmi -march=armv4 -+ CPU_CFLAGS-$(CONFIG_ARM926T)+=-mtune=arm9tdmi -march=armv5 -+ CPU_CFLAGS-$(CONFIG_ARM1136JF_S)+=-mtune=arm1136jf-s -march=armv6 -+ CPU_CFLAGS-$(CONFIG_ARM_SA110)+=-mtune=strongarm110 -march=armv4 -+ CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4 -+ CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110) -+ CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv4 -Wa,-mcpu=xscale -+endif -+ -+ifeq ($(strip $(TARGET_ARCH)),mips) -+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_1)+=-mips1 -+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_2)+=-mips2 -mtune=mips2 -+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_3)+=-mips3 -mtune=mips3 -+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_4)+=-mips4 -mtune=mips4 -+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS32)+=-mips32 -mtune=mips32 -+ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64)+=-mips64 -mtune=mips32 -+endif -+ -+ifeq ($(strip $(TARGET_ARCH)),sh) -+ OPTIMIZATION+=-fstrict-aliasing -+ OPTIMIZATION+= $(call check_gcc,-mprefergot,) -+ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL -+ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB -+ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-ml -+ CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mb -+ CPU_CFLAGS-$(CONFIG_SH2)+=-m2 -+ CPU_CFLAGS-$(CONFIG_SH3)+=-m3 -+ifeq ($(strip $(UCLIBC_HAS_FLOATS)),y) -+ CPU_CFLAGS-$(CONFIG_SH2A)+=-m2a -+ CPU_CFLAGS-$(CONFIG_SH4)+=-m4 -+else -+ CPU_CFLAGS-$(CONFIG_SH2A)+=-m2a-nofpu -+ CPU_CFLAGS-$(CONFIG_SH4)+=-m4-nofpu -+endif -+endif -+ -+ifeq ($(strip $(TARGET_ARCH)),sh64) -+ OPTIMIZATION+=-fstrict-aliasing -+ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN):=-EL -+ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN):=-EB -+ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN):=-ml -+ CPU_CFLAGS-$(ARCH_BIG_ENDIAN):=-mb -+ CPU_CFLAGS-$(CONFIG_SH5)+=-m5-32media -+endif -+ -+ifeq ($(strip $(TARGET_ARCH)),h8300) -+ CPU_LDFLAGS-$(CONFIG_H8300H)+= -ms8300h -+ CPU_LDFLAGS-$(CONFIG_H8S) += -ms8300s -+ CPU_CFLAGS-$(CONFIG_H8300H) += -mh -mint32 -fsigned-char -+ CPU_CFLAGS-$(CONFIG_H8S) += -ms -mint32 -fsigned-char -+endif -+ -+ifeq ($(strip $(TARGET_ARCH)),cris) -+ CPU_LDFLAGS-$(CONFIG_CRIS)+=-mcrislinux -+ CPU_CFLAGS-$(CONFIG_CRIS)+=-mlinux -+ PICFLAG:=-fpic -+ PIEFLAG_NAME:=-fpie -+endif -+ -+ifeq ($(strip $(TARGET_ARCH)),powerpc) -+# PowerPC can hold 8192 entries in its GOT with -fpic which is more than -+# enough. Therefore use -fpic which will reduce code size and generates -+# faster code. -+ PICFLAG:=-fpic -+ PIEFLAG_NAME:=-fpie -+endif -+ -+ifeq ($(strip $(TARGET_ARCH)),frv) -+ CPU_LDFLAGS-$(CONFIG_FRV)+=-melf32frvfd -+ CPU_CFLAGS-$(CONFIG_FRV)+=-mfdpic -+ # Using -pie causes the program to have an interpreter, which is -+ # forbidden, so we must make do with -shared. Unfortunately, -+ # -shared by itself would get us global function descriptors -+ # and calls through PLTs, dynamic resolution of symbols, etc, -+ # which would break as well, but -Bsymbolic comes to the rescue. -+ export LDPIEFLAG:=-shared -Bsymbolic -+ UCLIBC_LDSO=ld.so.1 -+endif -+ -+ifeq ($(strip $(TARGET_ARCH)),avr32) -+ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 -+endif -+ -+# Keep the check_gcc from being needlessly executed -+ifndef PIEFLAG -+ifneq ($(UCLIBC_BUILD_PIE),y) -+export PIEFLAG:= -+else -+export PIEFLAG:=$(call check_gcc,$(PIEFLAG_NAME),$(PICFLAG)) -+endif -+endif -+# We need to keep track of both the CC PIE flag (above) as -+# well as the LD PIE flag (below) because we can't rely on -+# gcc passing -pie if we used -fPIE -+ifndef LDPIEFLAG -+ifneq ($(UCLIBC_BUILD_PIE),y) -+export LDPIEFLAG:= -+else -+export LDPIEFLAG:=$(shell $(LD) --help | grep -q pie && echo "-Wl,-pie") -+endif -+endif -+ -+# Use '-Os' optimization if available, else use -O2, allow Config to override -+OPTIMIZATION+=$(call check_gcc,-Os,-O2) -+# Use the gcc 3.4 -funit-at-a-time optimization when available -+OPTIMIZATION+=$(call check_gcc,-funit-at-a-time,) -+ -+# Add a bunch of extra pedantic annoyingly strict checks -+XWARNINGS=$(subst ",, $(strip $(WARNINGS))) -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -+XARCH_CFLAGS=$(subst ",, $(strip $(ARCH_CFLAGS))) -+CPU_CFLAGS=$(subst ",, $(strip $(CPU_CFLAGS-y))) -+ -+LDADD_LIBFLOAT= -+ifeq ($(strip $(UCLIBC_HAS_SOFT_FLOAT)),y) -+# Add -msoft-float to the CPU_FLAGS since ldso and libdl ignore CFLAGS. -+# If -msoft-float isn't supported, we want an error anyway. -+# Hmm... might need to revisit this for arm since it has 2 different -+# soft float encodings. -+ CPU_CFLAGS += -msoft-float -+ifeq ($(strip $(TARGET_ARCH)),arm) -+# No longer needed with current toolchains, but leave it here for now. -+# If anyone is actually still using gcc 2.95 (say), they can uncomment it. -+# LDADD_LIBFLOAT=-lfloat -+endif -+endif -+ -+SSP_DISABLE_FLAGS:=$(call check_gcc,-fno-stack-protector,) -+ifeq ($(UCLIBC_BUILD_SSP),y) -+SSP_CFLAGS:=$(call check_gcc,-fno-stack-protector-all,) -+SSP_CFLAGS+=$(call check_gcc,-fstack-protector,) -+SSP_ALL_CFLAGS:=$(call check_gcc,-fstack-protector-all,) -+else -+SSP_CFLAGS:=$(SSP_DISABLE_FLAGS) -+endif -+ -+# Some nice CFLAGS to work with -+CFLAGS:=$(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \ -+ -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I. -+LDFLAGS_NOSTRIP:=$(CPU_LDFLAGS-y) -shared --warn-common --warn-once -z combreloc -z defs -+ -+ifeq ($(DODEBUG),y) -+ #CFLAGS += -g3 -+ CFLAGS += -O0 -g3 -+ LDFLAGS := $(LDFLAGS_NOSTRIP) -+ STRIPTOOL:= true -Since_we_are_debugging -+else -+ CFLAGS += $(OPTIMIZATION) $(XARCH_CFLAGS) -+ LDFLAGS := $(LDFLAGS_NOSTRIP) -s -+endif -+ -+ifeq ($(UCLIBC_BUILD_RELRO),y) -+LDFLAGS+=-z relro -+endif -+ -+ifeq ($(UCLIBC_BUILD_NOW),y) -+LDFLAGS+=-z now -+endif -+ -+# Sigh, some stupid versions of gcc can't seem to cope with '-iwithprefix include' -+#CFLAGS+=-iwithprefix include -+CFLAGS+=-isystem $(shell $(CC) -print-file-name=include) -+ -+ifneq ($(DOASSERTS),y) -+ CFLAGS += -DNDEBUG -+endif -+ -+CFLAGS_NOPIC:=$(CFLAGS) -+ifeq ($(DOPIC),y) -+ CFLAGS += $(PICFLAG) -+endif -+ -+ifeq ($(DL_FINI_CRT_COMPAT),y) -+CFLAGS += -D_DL_FINI_CRT_COMPAT -+endif -+ -+# Keep the check_as from being needlessly executed -+ASFLAGS = $(CFLAGS) -+ifndef ASFLAGS_NOEXEC -+ifeq ($(UCLIBC_BUILD_NOEXECSTACK),y) -+export ASFLAGS_NOEXEC := $(call check_as,--noexecstack) -+else -+export ASFLAGS_NOEXEC := -+endif -+endif -+ASFLAGS += $(ASFLAGS_NOEXEC) -+ -+LIBGCC_CFLAGS ?= $(CFLAGS) $(CPU_CFLAGS-y) -+LIBGCC:=$(shell $(CC) $(LIBGCC_CFLAGS) -print-libgcc-file-name) -+LIBGCC_DIR:=$(dir $(LIBGCC)) -+ -+######################################## -+# -+# uClinux shared lib support -+# -+ -+ifeq ($(CONFIG_BINFMT_SHARED_FLAT),y) -+ # For the shared version of this, we specify no stack and its library ID -+ FLTFLAGS += -s 0 -+ LIBID=1 -+ export LIBID FLTFLAGS -+ SHARED_TARGET = lib/libc -+endif -+ -+TARGET_ARCH:=$(strip $(subst ",, $(strip $(TARGET_ARCH)))) -diff -Nur uClibc-0.9.28/utils/ldd.c uClibc-0.9.28-avr32-20060621/utils/ldd.c ---- uClibc-0.9.28/utils/ldd.c 2005-08-18 00:49:41.000000000 +0200 -+++ uClibc-0.9.28-avr32-20060621/utils/ldd.c 2006-06-21 11:35:57.000000000 +0200 -@@ -56,6 +56,11 @@ - #define ELFCLASSM ELFCLASS32 - #endif - -+#if defined(__avr32__) -+#define MATCH_MACHINE(x) (x == EM_AVR32) -+#define ELFCLASSM ELFCLASS32 -+#endif -+ - #if defined(__s390__) - #define MATCH_MACHINE(x) (x == EM_S390) - #define ELFCLASSM ELFCLASS32 diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch deleted file mode 100644 index 6608b4df94..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch +++ /dev/null @@ -1,4080 +0,0 @@ -Index: uClibc-0.9.28-avr32/Makefile -=================================================================== ---- uClibc-0.9.28-avr32.orig/Makefile 2006-10-19 15:05:49.000000000 +0200 -+++ uClibc-0.9.28-avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 -@@ -163,7 +163,7 @@ install_dev: - else \ - extra_exclude="" ; \ - fi ; \ -- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \ -+ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \ - | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX) - ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y) - # Remove floating point related headers since float support is disabled. -Index: uClibc-0.9.28-avr32/extra/scripts/fix_includes.sh -=================================================================== ---- uClibc-0.9.28-avr32.orig/extra/scripts/fix_includes.sh 2006-10-19 15:05:49.000000000 +0200 -+++ uClibc-0.9.28-avr32/extra/scripts/fix_includes.sh 2006-10-19 15:05:52.000000000 +0200 -@@ -78,36 +78,6 @@ if [ ! -d "$KERNEL_SOURCE" ]; then - exit 1; - fi; - --if [ -f "$KERNEL_SOURCE/Makefile" ] ; then --# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION --eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile` --else --ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2` --VERSION=`echo "$ver" | cut -d '.' -f 1` --PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2` --if echo "$ver" | grep -q '-' ; then --SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1` --EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"` --else --SUBLEVEL=`echo "$ver" | cut -d '.' -f 3` --#EXTRAVERSION= --fi --fi --if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ] --then -- echo "Unable to determine version for kernel headers" -- echo -e "\tprovided in directory $KERNEL_SOURCE" -- exit 1 --fi -- --if [ "$MAKE_IS_SILENT" != "y" ]; then --echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}" --echo -e "\n" --echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'" --echo -e "\tprovided in directory $KERNEL_SOURCE" --echo -e "\n" --fi -- - # Create a symlink to include/asm - - rm -f include/asm* -@@ -172,7 +142,7 @@ fi; - - - # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory --if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then -+if [ -d $KERNEL_SOURCE/include/asm-generic ] ; then - ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic - fi; - -Index: uClibc-0.9.28-avr32/libc/Makefile -=================================================================== ---- uClibc-0.9.28-avr32.orig/libc/Makefile 2006-10-19 15:05:49.000000000 +0200 -+++ uClibc-0.9.28-avr32/libc/Makefile 2006-10-19 15:05:52.000000000 +0200 -@@ -59,7 +59,7 @@ $(LIBNAME) shared_$(LIBNAME) ar-target: - $(AR) dN 2 $(LIBNAME) $$objs && \ - $(AR) dN 2 $(LIBNAME) $$objs - @for objfile in obj.signal \ -- obj.string.generic obj.string.$(TARGET_ARCH) obj.string \ -+ obj.string obj.string.generic obj.string.$(TARGET_ARCH) \ - obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \ - if [ -e $$objfile ] ; then \ - if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/getrusage.c -=================================================================== ---- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/getrusage.c 2006-10-19 15:05:49.000000000 +0200 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/getrusage.c 2006-10-19 15:05:52.000000000 +0200 -@@ -10,4 +10,4 @@ - #include "syscalls.h" - #include - #include --_syscall2(int, getrusage, int, who, struct rusage *, usage); -+_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage); -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/__syscall_fcntl.c -=================================================================== ---- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-10-19 15:05:49.000000000 +0200 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-10-19 15:05:52.000000000 +0200 -@@ -12,7 +12,7 @@ - #include - - #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64 --extern int __libc_fcntl64(int fd, int cmd, long arg); -+extern int __libc_fcntl64(int fd, int cmd, ...); - #endif - - #define __NR___syscall_fcntl __NR_fcntl -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/open64.c -=================================================================== ---- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/open64.c 2006-10-19 15:05:49.000000000 +0200 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/open64.c 2006-10-19 15:05:52.000000000 +0200 -@@ -26,7 +26,7 @@ - #endif - - #ifdef __UCLIBC_HAS_LFS__ --extern int __libc_open (__const char *file, int oflag, mode_t mode); -+extern int __libc_open (__const char *file, int oflag, ...); - - /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, - a third argument is the file protection. */ -Index: uClibc-0.9.28-avr32/extra/Configs/Config.avr32 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/extra/Configs/Config.avr32 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,42 @@ -+# -+# For a description of the syntax of this configuration file, -+# see extra/config/Kconfig-language.txt -+# -+ -+config HAVE_ELF -+ bool -+ default y -+ -+config TARGET_ARCH -+ default "avr32" -+ -+config ARCH_CFLAGS -+ string -+ -+config ARCH_LDFLAGS -+ string -+ -+config LIBGCC_CFLAGS -+ string -+ -+config ARCH_SUPPORTS_BIG_ENDIAN -+ bool -+ default y -+ -+config UCLIBC_COMPLETELY_PIC -+ select FORCE_SHAREABLE_TEXT_SEGMENTS -+ bool -+ default y -+ -+choice -+ prompt "Target CPU Type" -+ default CONFIG_AP7000 -+ -+config CONFIG_AP7000 -+ bool "AP7000" -+ -+endchoice -+ -+config LINKRELAX -+ bool "Enable linker optimizations" -+ default n -Index: uClibc-0.9.28-avr32/extra/Configs/Config.in -=================================================================== ---- uClibc-0.9.28-avr32.orig/extra/Configs/Config.in 2006-10-19 15:05:49.000000000 +0200 -+++ uClibc-0.9.28-avr32/extra/Configs/Config.in 2006-10-19 15:05:52.000000000 +0200 -@@ -16,6 +16,9 @@ config TARGET_alpha - config TARGET_arm - bool "arm" - -+config TARGET_avr32 -+ bool "avr32" -+ - config TARGET_bfin - bool "bfin" - -@@ -83,6 +86,10 @@ if TARGET_arm - source "extra/Configs/Config.arm" - endif - -+if TARGET_avr32 -+source "extra/Configs/Config.avr32" -+endif -+ - if TARGET_bfin - source "extra/Configs/Config.bfin" - endif -Index: uClibc-0.9.28-avr32/include/elf.h -=================================================================== ---- uClibc-0.9.28-avr32.orig/include/elf.h 2006-10-19 15:05:49.000000000 +0200 -+++ uClibc-0.9.28-avr32/include/elf.h 2006-10-19 15:05:52.000000000 +0200 -@@ -261,6 +261,8 @@ typedef struct - #define EM_NIOS32 0xfebb /* Altera Nios 32 */ - #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */ - -+#define EM_AVR32 0x18ad -+ - /* V850 backend magic number. Written in the absense of an ABI. */ - #define EM_CYGNUS_V850 0x9080 - -@@ -2687,6 +2689,55 @@ typedef Elf32_Addr Elf32_Conflict; - /* Keep this the last entry. */ - #define R_V850_NUM 25 - -+/* Atmel AVR32 relocations. */ -+#define R_AVR32_NONE 0 -+#define R_AVR32_32 1 -+#define R_AVR32_16 2 -+#define R_AVR32_8 3 -+#define R_AVR32_32_PCREL 4 -+#define R_AVR32_16_PCREL 5 -+#define R_AVR32_8_PCREL 6 -+#define R_AVR32_DIFF32 7 -+#define R_AVR32_DIFF16 8 -+#define R_AVR32_DIFF8 9 -+#define R_AVR32_GOT32 10 -+#define R_AVR32_GOT16 11 -+#define R_AVR32_GOT8 12 -+#define R_AVR32_21S 13 -+#define R_AVR32_16U 14 -+#define R_AVR32_16S 15 -+#define R_AVR32_8S 16 -+#define R_AVR32_8S_EXT 17 -+#define R_AVR32_22H_PCREL 18 -+#define R_AVR32_18W_PCREL 19 -+#define R_AVR32_16B_PCREL 20 -+#define R_AVR32_16N_PCREL 21 -+#define R_AVR32_14UW_PCREL 22 -+#define R_AVR32_11H_PCREL 23 -+#define R_AVR32_10UW_PCREL 24 -+#define R_AVR32_9H_PCREL 25 -+#define R_AVR32_9UW_PCREL 26 -+#define R_AVR32_HI16 27 -+#define R_AVR32_LO16 28 -+#define R_AVR32_GOTPC 29 -+#define R_AVR32_GOTCALL 30 -+#define R_AVR32_LDA_GOT 31 -+#define R_AVR32_GOT21S 32 -+#define R_AVR32_GOT18SW 33 -+#define R_AVR32_GOT16S 34 -+#define R_AVR32_GOT7UW 35 -+#define R_AVR32_32_CPENT 36 -+#define R_AVR32_CPCALL 37 -+#define R_AVR32_16_CP 38 -+#define R_AVR32_9W_CP 39 -+#define R_AVR32_RELATIVE 40 -+#define R_AVR32_GLOB_DAT 41 -+#define R_AVR32_JMP_SLOT 42 -+#define R_AVR32_ALIGN 43 -+#define R_AVR32_NUM 44 -+ -+/* AVR32 dynamic tags */ -+#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ - - #define R_H8_NONE 0 - #define R_H8_DIR32 1 -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/Makefile -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,93 @@ -+# Makefile for uClibc -+# -+# Copyright (C) 2000-2003 Erik Andersen -+# -+# This program is free software; you can redistribute it and/or modify it under -+# the terms of the GNU Library 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 Library General Public License for more -+# details. -+# -+# You should have received a copy of the GNU Library 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 -+ -+TOPDIR=../../../../ -+include $(TOPDIR)Rules.mak -+ASFLAGS=$(CFLAGS) -+ -+CRT_SRC = crt1.S -+CRT_OBJ = crt1.o -+SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ)) -+CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o -+ -+SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \ -+ bsd-_setjmp.S sigrestorer.S syscall.S -+SOBJS=$(patsubst %.S,%.o, $(SSRC)) -+ -+CSRC=clone.c brk.c sigaction.c mmap.c -+COBJS=$(patsubst %.c,%.o, $(CSRC)) -+ -+OBJS=$(SOBJS) $(COBJS) -+ -+OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH) -+ -+all: $(OBJ_LIST) -+ -+$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS) -+ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) -+ $(INSTALL) -d $(TOPDIR)lib/ -+ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ -+ -+$(CRT_OBJ): $(CRT_SRC) -+ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+$(SCRT_OBJ): $(CRT_SRC) -+ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+$(SOBJS): %.o : %.S -+ $(CC) $(ASFLAGS) -c $< -o $@ -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+$(COBJS): %.o : %.c -+ $(CC) $(CFLAGS) -c $< -o $@ -+ $(STRIPTOOL) -x -R .note -R .comment $*.o -+ -+ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) -+crti.o: crti.S -+ $(CC) $(ASFLAGS) -c crti.S -o crti.o -+ -+$(TOPDIR)lib/crti.o: crti.o -+ $(INSTALL) -d $(TOPDIR)lib/ -+ cp crti.o $(TOPDIR)lib/ -+ -+crtn.o: crtn.S -+ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o -+ -+$(TOPDIR)lib/crtn.o: crtn.o -+ $(INSTALL) -d $(TOPDIR)lib/ -+ cp crtn.o $(TOPDIR)lib/ -+else -+$(TOPDIR)lib/crti.o: -+ $(INSTALL) -d $(TOPDIR)lib/ -+ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o -+$(TOPDIR)lib/crtn.o: -+ $(INSTALL) -d $(TOPDIR)lib/ -+ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o -+endif -+ -+ -+headers: -+# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/ -+ -+clean: -+ $(RM) *.[oa] *~ core -+ $(RM) bits/sysnum.h -+ $(RM) gmon-start.S -+ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/__longjmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/__longjmp.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,17 @@ -+/* longjmp for AVR32 -+ * -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+ -+ .global __longjmp -+ .type __longjmp,"function" -+ .align 1 -+__longjmp: -+ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr -+ mov r12, r11 /* get the return value right */ -+ mustr r8 /* restore status register (lower half) */ -+ cp r12, 0 /* can't return zero */ -+ frs -+ moveq r12, 1 -+ mov pc,lr -+ .size __longjmp, . - __longjmp -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/_mmap.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/_mmap.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,33 @@ -+/* Copyright (C) 2005 Atmel Norway -+ -+ This program is free software; you can redistribute it and/or modify it under -+ the terms of the GNU Library 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 Library General Public License for more -+ details. -+ -+ You should have received a copy of the GNU Library 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 -+ -+ Derived in part from the Linux-8086 C library, the GNU C Library, and several -+ other sundry sources. Files within this library are copyright by their -+ respective copyright holders. -+ */ -+ -+#include -+#include -+#include -+ -+#define __NR_mmap2 __NR_mmap -+ -+static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); -+ -+__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) -+{ -+ return mmap2(addr, len, prot, flags, fd, offset >> 12); -+} -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/atomicity.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,86 @@ -+/* Low-level functions for atomic operations. AVR32 version. -+ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _ATOMICITY_H -+#define _ATOMICITY_H 1 -+ -+#include -+ -+static inline int -+__attribute__((unused)) -+exchange_and_add (volatile uint32_t *mem, int val) -+{ -+ int tmp, result; -+ -+ __asm__ __volatile__( -+ "/* Inline exchange and add */\n" -+ "1: ssrf 5\n" -+ " ld.w %0, %3\n" -+ " add %1, %0, %4\n" -+ " stcond %2, %1\n" -+ " brne 1b" -+ : "=&r"(result), "=&r"(tmp), "=m"(*mem) -+ : "m"(*mem), "r"(val) -+ : "cc", "memory"); -+ -+ return result; -+} -+ -+static inline void -+__attribute__((unused)) -+atomic_add (volatile uin32_t *mem, int val) -+{ -+ int result; -+ -+ __asm__ __volatile__( -+ "/* Inline atomic add */\n" -+ "1: ssrf 5\n" -+ " ld.w %0, %2\n" -+ " add %0, %3\n" -+ " stcond %2, %0\n" -+ " brne 1b" -+ : "=&r"(result), "=m"(*mem) -+ : "m"(*mem), "r"(val) -+ : "cc", "memory"); -+} -+ -+static inline int -+__attribute__((unused)) -+compare_and_swap(volatile long int *p, long int oldval, long int newval) -+{ -+ long int result, tmp; -+ -+ __asm__ __volatile__( -+ "/* Inline compare and swap */\n" -+ "1: ssrf 5\n" -+ " ld.w %1, %3\n" -+ " cp.w %1, %5\n" -+ " sreq %0\n" -+ " brne 2f\n" -+ " stcond %2, %4\n" -+ " brne 1b\n" -+ "2:" -+ : "=&r"(result), "=&r"(tmp), "=m"(*p) -+ : "m"(*p), "r"(newval), "r"(oldval) -+ : "cc", "memory"); -+ -+ return result; -+} -+ -+#endif /* atomicity.h */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/byteswap.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,80 @@ -+/* Macros to swap the order of bytes in integer values. -+ Copyright (C) 2005 Atmel Norway. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#if !defined _BYTESWAP_H && !defined _NETINET_IN_H -+# error "Never use directly; include instead." -+#endif -+ -+#ifndef _BITS_BYTESWAP_H -+#define _BITS_BYTESWAP_H 1 -+ -+/* Swap bytes in 16 bit value. */ -+#if defined __GNUC__ -+# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) -+#else -+/* This is better than nothing. */ -+static __inline unsigned short int -+__bswap_16 (unsigned short int __bsx) -+{ -+ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); -+} -+#endif -+ -+/* Swap bytes in 32 bit value. */ -+#if defined __GNUC__ -+# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) -+#else -+static __inline unsigned int -+__bswap_32 (unsigned int __bsx) -+{ -+ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | -+ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); -+} -+#endif -+ -+#if defined __GNUC__ -+/* Swap bytes in 64 bit value. */ -+# define __bswap_constant_64(x) \ -+ ((((x) & 0xff00000000000000ull) >> 56) \ -+ | (((x) & 0x00ff000000000000ull) >> 40) \ -+ | (((x) & 0x0000ff0000000000ull) >> 24) \ -+ | (((x) & 0x000000ff00000000ull) >> 8) \ -+ | (((x) & 0x00000000ff000000ull) << 8) \ -+ | (((x) & 0x0000000000ff0000ull) << 24) \ -+ | (((x) & 0x000000000000ff00ull) << 40) \ -+ | (((x) & 0x00000000000000ffull) << 56)) -+ -+# define __bswap_64(x) \ -+ (__extension__ \ -+ ({ \ -+ union { \ -+ __extension__ unsigned long long int __ll; \ -+ unsigned int __l[2]; \ -+ } __w, __r; \ -+ if (__builtin_constant_p(x)) \ -+ __r.__ll = __bswap_constant_64(x); \ -+ else { \ -+ __w.__ll = (x); \ -+ __r.__l[0] = __bswap_32(__w.__l[1]); \ -+ __r.__l[1] = __bswap_32(__w.__l[0]); \ -+ } \ -+ __r.__ll; \ -+ })) -+#endif -+ -+#endif /* _BITS_BYTESWAP_H */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/endian.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/endian.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,7 @@ -+/* AVR32 is big-endian */ -+ -+#ifndef _ENDIAN_H -+# error "Never use directly; include instead." -+#endif -+ -+#define __BYTE_ORDER __BIG_ENDIAN -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,167 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ * -+ * This file is part of the Linux kernel -+ */ -+#ifndef _FCNTL_H -+# error "Never use directly; include instead." -+#endif -+ -+#include -+ -+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files -+ located on an ext2 file system */ -+#define O_ACCMODE 0003 -+#define O_RDONLY 00 -+#define O_WRONLY 01 -+#define O_RDWR 02 -+#define O_CREAT 0100 /* not fcntl */ -+#define O_EXCL 0200 /* not fcntl */ -+#define O_NOCTTY 0400 /* not fcntl */ -+#define O_TRUNC 01000 /* not fcntl */ -+#define O_APPEND 02000 -+#define O_NONBLOCK 04000 -+#define O_NDELAY O_NONBLOCK -+#define O_SYNC 010000 -+#define O_ASYNC 020000 -+ -+#ifdef __USE_GNU -+# define O_DIRECTORY 040000 /* must be a directory */ -+# define O_NOFOLLOW 0100000 /* don't follow links */ -+# define O_DIRECT 0200000 /* direct disk access */ -+#endif -+ -+#ifdef __USE_LARGEFILE64 -+# define O_LARGEFILE 0400000 -+#endif -+ -+/* For now Linux has synchronisity options for data and read operations. -+ We define the symbols here but let them do the same as O_SYNC since -+ this is a superset. */ -+#if defined __USE_POSIX199309 || defined __USE_UNIX98 -+# define O_DSYNC O_SYNC /* Synchronize data. */ -+# define O_RSYNC O_SYNC /* Synchronize read operations. */ -+#endif -+ -+#define F_DUPFD 0 /* dup */ -+#define F_GETFD 1 /* get close_on_exec */ -+#define F_SETFD 2 /* set/clear close_on_exec */ -+#define F_GETFL 3 /* get file->f_flags */ -+#define F_SETFL 4 /* set file->f_flags */ -+ -+#ifndef __USE_FILE_OFFSET64 -+# define F_GETLK 5 -+# define F_SETLK 6 -+# define F_SETLKW 7 -+#else -+# define F_GETLK F_GETLK64 -+# define F_SETLK F_SETLK64 -+# define F_SETLKW F_SETLKW64 -+#endif -+#define F_GETLK64 12 /* using 'struct flock64' */ -+#define F_SETLK64 13 -+#define F_SETLKW64 14 -+ -+#if defined __USE_BSD || defined __USE_XOPEN2K -+# define F_SETOWN 8 /* for sockets. */ -+# define F_GETOWN 9 /* for sockets. */ -+#endif -+ -+#ifdef __USE_GNU -+# define F_SETSIG 10 /* for sockets. */ -+# define F_GETSIG 11 /* for sockets. */ -+#endif -+ -+#ifdef __USE_GNU -+# define F_SETLEASE 1024 /* Set a lease. */ -+# define F_GETLEASE 1025 /* Enquire what lease is active. */ -+# define F_NOTIFY 1026 /* Request notfications on a directory. */ -+#endif -+ -+/* for F_[GET|SET]FL */ -+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ -+ -+/* for posix fcntl() and lockf() */ -+#define F_RDLCK 0 -+#define F_WRLCK 1 -+#define F_UNLCK 2 -+ -+/* for old implementation of bsd flock () */ -+#define F_EXLCK 4 /* or 3 */ -+#define F_SHLCK 8 /* or 4 */ -+ -+/* for leases */ -+#define F_INPROGRESS 16 -+ -+#ifdef __USE_BSD -+/* operations for bsd flock(), also used by the kernel implementation */ -+# define LOCK_SH 1 /* shared lock */ -+# define LOCK_EX 2 /* exclusive lock */ -+# define LOCK_NB 4 /* or'd with one of the above to prevent -+ blocking */ -+# define LOCK_UN 8 /* remove lock */ -+#endif -+ -+#ifdef __USE_GNU -+# define LOCK_MAND 32 /* This is a mandatory flock */ -+# define LOCK_READ 64 /* ... Which allows concurrent -+ read operations */ -+# define LOCK_WRITE 128 /* ... Which allows concurrent -+ write operations */ -+# define LOCK_RW 192 /* ... Which allows concurrent -+ read & write ops */ -+#endif -+ -+#ifdef __USE_GNU -+/* Types of directory notifications that may be requested with F_NOTIFY. */ -+# define DN_ACCESS 0x00000001 /* File accessed. */ -+# define DN_MODIFY 0x00000002 /* File modified. */ -+# define DN_CREATE 0x00000004 /* File created. */ -+# define DN_DELETE 0x00000008 /* File removed. */ -+# define DN_RENAME 0x00000010 /* File renamed. */ -+# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ -+# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ -+#endif -+ -+struct flock { -+ short l_type; -+ short l_whence; -+#ifndef __USE_FILE_OFFSET64 -+ __off_t l_start; -+ __off_t l_len; -+#else -+ __off64_t l_start; -+ __off64_t l_len; -+#endif -+ __pid_t l_pid; -+}; -+ -+#ifdef __USE_LARGEFILE64 -+struct flock64 { -+ short l_type; -+ short l_whence; -+ __off64_t l_start; -+ __off64_t l_len; -+ __pid_t l_pid; -+}; -+#endif -+ -+/* Define some more compatibility macros to be backward compatible with -+ * BSD systems which did not managed to hide these kernel macros. */ -+#ifdef __USE_BSD -+# define FAPPEND O_APPEND -+# define FFSYNC O_FSYNC -+# define FASYNC O_ASYNC -+# define FNONBLOCK O_NONBLOCK -+# define FNDELAY O_NDELAY -+#endif /* Use BSD. */ -+ -+/* Advise to `posix_fadvise'. */ -+#ifdef __USE_XOPEN2K -+# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ -+# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ -+# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ -+# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ -+# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ -+#endif -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_stat.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,63 @@ -+#ifndef _BITS_STAT_STRUCT_H -+#define _BITS_STAT_STRUCT_H -+ -+/* -+ * This file provides struct stat, taken from kernel 2.6.4 -+ * (include/asm-avr32/stat.h revision 1.1). -+ */ -+ -+struct kernel_stat { -+ unsigned long st_dev; -+ unsigned long st_ino; -+ unsigned short st_mode; -+ unsigned short st_nlink; -+ unsigned short st_uid; -+ unsigned short st_gid; -+ unsigned long st_rdev; -+ unsigned long st_size; -+ unsigned long st_blksize; -+ unsigned long st_blocks; -+ unsigned long st_atime; -+ unsigned long st_atime_nsec; -+ unsigned long st_mtime; -+ unsigned long st_mtime_nsec; -+ unsigned long st_ctime; -+ unsigned long st_ctime_nsec; -+ unsigned long __unused4; -+ unsigned long __unused5; -+}; -+ -+#define STAT_HAVE_NSEC 1 -+ -+struct kernel_stat64 { -+ unsigned long long st_dev; -+ -+ unsigned long long st_ino; -+ unsigned int st_mode; -+ unsigned int st_nlink; -+ -+ unsigned long st_uid; -+ unsigned long st_gid; -+ -+ unsigned long long st_rdev; -+ -+ long long st_size; -+ unsigned long __pad1; -+ unsigned long st_blksize; -+ -+ unsigned long long st_blocks; -+ -+ unsigned long st_atime; -+ unsigned long st_atime_nsec; -+ -+ unsigned long st_mtime; -+ unsigned long st_mtime_nsec; -+ -+ unsigned long st_ctime; -+ unsigned long st_ctime_nsec; -+ -+ unsigned long __unused1; -+ unsigned long __unused2; -+}; -+ -+#endif /* _BITS_STAT_STRUCT_H */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_types.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,56 @@ -+/* Note that we use the exact same include guard #define names -+ * as asm/posix_types.h. This will avoid gratuitous conflicts -+ * with the posix_types.h kernel header, and will ensure that -+ * our private content, and not the kernel header, will win. -+ * -Erik -+ */ -+#ifndef __ASM_AVR32_POSIX_TYPES_H -+#define __ASM_AVR32_POSIX_TYPES_H -+ -+/* -+ * This file is generally used by user-level software, so you need to -+ * be a little careful about namespace pollution etc. Also, we cannot -+ * assume GCC is being used. -+ */ -+ -+typedef unsigned long __kernel_dev_t; -+typedef unsigned long __kernel_ino_t; -+typedef unsigned short __kernel_mode_t; -+typedef unsigned short __kernel_nlink_t; -+typedef long __kernel_off_t; -+typedef int __kernel_pid_t; -+typedef unsigned short __kernel_ipc_pid_t; -+typedef unsigned int __kernel_uid_t; -+typedef unsigned int __kernel_gid_t; -+typedef unsigned long __kernel_size_t; -+typedef int __kernel_ssize_t; -+typedef int __kernel_ptrdiff_t; -+typedef long __kernel_time_t; -+typedef long __kernel_suseconds_t; -+typedef long __kernel_clock_t; -+typedef int __kernel_timer_t; -+typedef int __kernel_clockid_t; -+typedef int __kernel_daddr_t; -+typedef char * __kernel_caddr_t; -+typedef unsigned short __kernel_uid16_t; -+typedef unsigned short __kernel_gid16_t; -+typedef unsigned int __kernel_uid32_t; -+typedef unsigned int __kernel_gid32_t; -+ -+typedef unsigned short __kernel_old_uid_t; -+typedef unsigned short __kernel_old_gid_t; -+typedef unsigned short __kernel_old_dev_t; -+ -+#ifdef __GNUC__ -+typedef long long __kernel_loff_t; -+#endif -+ -+typedef struct { -+#if defined(__USE_ALL) -+ int val[2]; -+#else -+ int __val[2]; -+#endif -+} __kernel_fsid_t; -+ -+#endif /* __ASM_AVR32_POSIX_TYPES_H */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/machine-gmon.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,69 @@ -+/* Machine-dependent definitions for profiling support. AVR32 version. -+ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#define mcount_internal __mcount_internal -+ -+#define _MCOUNT_DECL(frompc, selfpc) \ -+static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc) -+ -+/* -+ * This mcount implementation expects to get called after the prologue -+ * has been run. It also expects that r7 contains a valid frame -+ * pointer. -+ * -+ * When profiling, the compiler should generate something like this at -+ * each function entry: -+ * -+ * pushm r0-r7,lr // lr mandatory, others optional -+ * mov r7, sp -+ * // rest of prologue goes here -+ * mcall pc[.LC1 - .] -+ * // rest of function goes here -+ * .LC1: -+ * .long mcount -+ * -+ * or for PIC: -+ * -+ * pushm r0-r7,lr -+ * mov r7, sp -+ * // rest of prologue goes here -+ * lddpc r0, .LC1 -+ * .L1: rsub r0, pc -+ * mcall r0[mcount@GOT] -+ * // rest of function goes here -+ * .LC1: -+ * .long .L1 - _GLOBAL_OFFSET_TABLE_ -+ * -+ * This way, when mcount() is called, r7 points to the calling -+ * function's return address. It is guaranteed that calling mcount -+ * will clobber no registers except LR, which is unavoidable. -+ */ -+#define MCOUNT asm( \ -+ " .align 4\n" \ -+ " .global _mcount\n" \ -+ " .type _mcount,@function\n" \ -+ "_mcount:\n" \ -+ " pushm r8-r12,lr\n" \ -+ " mov r11, lr\n" \ -+ " ld.w r12, r7[0]\n" \ -+ " rcall __mcount_internal\n" \ -+ " popm r8-r12,pc\n" \ -+ " .size _mcount, . - _mcount\n" \ -+ " .weak mcount\n" \ -+ " mcount = _mcount"); -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/mman.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/mman.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,95 @@ -+/* Definitions for POSIX memory map interface. Linux/AVR32 version. -+ Copyright (C) 1997, 2000 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_MMAN_H -+# error "Never include this file directly. Use instead" -+#endif -+ -+/* The following definitions basically come from the kernel headers. -+ But the kernel header is not namespace clean. */ -+ -+ -+/* Protections are chosen from these bits, OR'd together. The -+ implementation does not necessarily support PROT_EXEC or PROT_WRITE -+ without PROT_READ. The only guarantees are that no writing will be -+ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ -+ -+#define PROT_READ 0x1 /* Page can be read. */ -+#define PROT_WRITE 0x2 /* Page can be written. */ -+#define PROT_EXEC 0x4 /* Page can be executed. */ -+#define PROT_NONE 0x0 /* Page can not be accessed. */ -+ -+/* Sharing types (must choose one and only one of these). */ -+#define MAP_SHARED 0x01 /* Share changes. */ -+#define MAP_PRIVATE 0x02 /* Changes are private. */ -+#ifdef __USE_MISC -+# define MAP_TYPE 0x0f /* Mask for type of mapping. */ -+#endif -+ -+/* Other flags. */ -+#define MAP_FIXED 0x10 /* Interpret addr exactly. */ -+#ifdef __USE_MISC -+# define MAP_FILE 0 -+# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ -+# define MAP_ANON MAP_ANONYMOUS -+#endif -+ -+/* These are Linux-specific. */ -+#ifdef __USE_MISC -+# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ -+# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -+# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ -+# define MAP_LOCKED 0x2000 /* Lock the mapping. */ -+# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ -+# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ -+# define MAP_NONBLOCK 0x10000 /* do not block on IO */ -+#endif -+ -+/* Flags to `msync'. */ -+#define MS_ASYNC 1 /* Sync memory asynchronously. */ -+#define MS_SYNC 4 /* Synchronous memory sync. */ -+#define MS_INVALIDATE 2 /* Invalidate the caches. */ -+ -+/* Flags for `mlockall'. */ -+#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ -+#define MCL_FUTURE 2 /* Lock all additions to address -+ space. */ -+ -+/* Flags for `mremap'. */ -+#ifdef __USE_GNU -+# define MREMAP_MAYMOVE 1 -+#endif -+ -+/* Advise to `madvise'. */ -+#ifdef __USE_BSD -+# define MADV_NORMAL 0 /* No further special treatment. */ -+# define MADV_RANDOM 1 /* Expect random page references. */ -+# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define MADV_WILLNEED 3 /* Will need these pages. */ -+# define MADV_DONTNEED 4 /* Don't need these pages. */ -+#endif -+ -+/* The POSIX people had to invent similar names for the same things. */ -+#ifdef __USE_XOPEN2K -+# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ -+# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ -+# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ -+# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ -+#endif -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/profil-counter.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* Low-level statistical profiling support function. Linux/AVR32 version. -+ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include -+ -+void -+profil_counter(int signo, siginfo_t *si, struct sigcontext *sc) -+{ -+ profil_count((void *)sc->pc); -+} -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/setjmp.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,21 @@ -+/* -+ * Copyright (C) 2004-2005 Atmel Norway -+ */ -+#ifndef _SETJMP_H -+# error "Never include directly; use instead." -+#endif -+ -+#ifndef _ASM -+/* -+ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are -+ * not saved. -+ */ -+typedef int __jmp_buf[11]; -+#endif -+ -+#define __JMP_BUF_SP 4 -+ -+/* Test if longjmp to JMPBUF would unwind the frame containing a local -+ variable at ADDRESS. */ -+#define _JMPBUF_UNWINDS(jmpbuf, address) \ -+ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/syscalls.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,143 @@ -+#ifndef _SYSCALL_H -+# error "Never use directly; include instead." -+#endif -+ -+/* -+ * This includes the `__NR_' syscall numbers taken from the -+ * Linux kernel header files. It also defines the traditional -+ * `SYS_' macros for older programs. -+ */ -+#include -+ -+#ifndef __set_errno -+# define __set_errno(val) (*__errno_location()) = (val) -+#endif -+#ifndef SYS_ify -+# define SYS_ify(syscall_name) (__NR_##syscall_name) -+#endif -+ -+#ifndef __ASSEMBLER__ -+ -+#undef _syscall0 -+#define _syscall0(type,name) \ -+ type name(void) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 0)); \ -+ } -+ -+#undef _syscall1 -+#define _syscall1(type,name,type1,arg1) \ -+ type name(type1 arg1) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ -+ } -+ -+#undef _syscall2 -+#define _syscall2(type,name,type1,arg1,type2,arg2) \ -+ type name(type1 arg1, type2 arg2) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ -+ } -+ -+#undef _syscall3 -+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ -+ type name(type1 arg1, type2 arg2, type3 arg3) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 3, arg1, \ -+ arg2, arg3)); \ -+ } -+ -+#undef _syscall4 -+#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ -+ type4,arg4) \ -+ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ -+ arg3, arg4)); \ -+ } -+ -+#undef _syscall5 -+#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ -+ type4,arg4,type5,arg5) \ -+ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ -+ type5 arg5) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ -+ arg3, arg4, arg5)); \ -+ } -+ -+#undef _syscall6 -+#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ -+ type4,arg4,type5,arg5,type6,arg6) \ -+ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ -+ type5 arg5, type6 arg6) \ -+ { \ -+ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ -+ arg4, arg5, arg6)); \ -+ } -+ -+#undef unlikely -+#define unlikely(x) __builtin_expect((x), 0) -+ -+#undef INLINE_SYSCALL -+#define INLINE_SYSCALL(name, nr, args...) \ -+ ({ \ -+ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ -+ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ -+ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ -+ _sys_result = (unsigned int) -1; \ -+ } \ -+ (int) _sys_result; \ -+ }) -+ -+#undef INTERNAL_SYSCALL_DECL -+#define INTERNAL_SYSCALL_DECL(err) do { } while(0) -+ -+#undef INTERNAL_SYSCALL -+#define INTERNAL_SYSCALL(name, err, nr, args...) \ -+ ({ \ -+ register int _a1 asm ("r12"); \ -+ register int _scno asm("r8") = SYS_ify(name); \ -+ LOAD_ARGS_##nr (args); \ -+ asm volatile ("scall /* syscall " #name " */" \ -+ : "=r" (_a1) \ -+ : "r"(_scno) ASM_ARGS_##nr \ -+ : "lr", "cc", "memory"); \ -+ _a1; \ -+ }) -+ -+#undef INTERNAL_SYSCALL_ERROR_P -+#define INTERNAL_SYSCALL_ERROR_P(val, err) \ -+ ((unsigned int)(val) >= 0xfffff001U) -+ -+#undef INTERNAL_SYSCALL_ERRNO -+#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) -+ -+#define LOAD_ARGS_0() do { } while(0) -+#define ASM_ARGS_0 -+#define LOAD_ARGS_1(a1) \ -+ _a1 = (int) (a1); \ -+ LOAD_ARGS_0() -+#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) -+#define LOAD_ARGS_2(a1, a2) \ -+ register int _a2 asm("r11") = (int)(a2); \ -+ LOAD_ARGS_1(a1) -+#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) -+#define LOAD_ARGS_3(a1, a2, a3) \ -+ register int _a3 asm("r10") = (int)(a3); \ -+ LOAD_ARGS_2(a1, a2) -+#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) -+#define LOAD_ARGS_4(a1, a2, a3, a4) \ -+ register int _a4 asm("r9") = (int)(a4); \ -+ LOAD_ARGS_3(a1, a2, a3) -+#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) -+#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ -+ register int _a5 asm("r5") = (int)(a5); \ -+ LOAD_ARGS_4(a1, a2, a3, a4) -+#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) -+#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ -+ register int _a6 asm("r3") = (int)(a6); \ -+ LOAD_ARGS_5(a1, a2, a3, a4, a5) -+#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) -+ -+#endif /* __ASSEMBLER__ */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/wordsize.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1 @@ -+#define __WORDSIZE 32 -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/brk.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/brk.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,23 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+#include -+ -+void *__curbrk = 0; -+ -+int brk (void *addr) -+{ -+ void *newbrk; -+ -+ newbrk = INLINE_SYSCALL(brk, 1, addr); -+ -+ __curbrk = newbrk; -+ -+ if (newbrk < addr) { -+ __set_errno (ENOMEM); -+ return -1; -+ } -+ -+ return 0; -+} -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-_setjmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,12 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+ -+ /* This just does a tail-call to __sigsetjmp(env, 0) */ -+ .global _setjmp -+ .type _setjmp,"function" -+ .align 1 -+_setjmp: -+ mov r11, 0 -+ bral __sigsetjmp_internal -+ .size _setjmp, . - _setjmp -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-setjmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,12 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+ -+ /* This just does a tail-call to __sigsetjmp(env, 1) */ -+ .global setjmp -+ .type setjmp,"function" -+ .align 1 -+setjmp: -+ mov r11, 1 -+ bral __sigsetjmp_internal -+ .size setjmp, . - setjmp -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/clone.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/clone.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,37 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+#include -+#include -+ -+/* -+ * I don't know if we can be absolutely certain that the fn and arg -+ * parameters are preserved when returning as the child. If the -+ * compiler stores them in registers (r0-r7), they should be. -+ */ -+int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) -+{ -+ register int (*_fn)(void *arg) = fn; -+ register void *_arg = arg; -+ int err; -+ -+ /* Sanity check the arguments */ -+ err = -EINVAL; -+ if (!fn) -+ goto syscall_error; -+ if (!child_stack) -+ goto syscall_error; -+ -+ err = INLINE_SYSCALL(clone, 2, flags, child_stack); -+ if (err < 0) -+ goto syscall_error; -+ else if (err != 0) -+ return err; -+ -+ _exit(_fn(_arg)); -+ -+syscall_error: -+ __set_errno (-err); -+ return -1; -+} -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crt1.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crt1.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,93 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ * -+ * When we enter _start, the stack looks like this: -+ * argc argument counter -+ * argv[0] pointer to program name -+ * argv[1..argc-1] pointers to program args -+ * NULL -+ * env[0..N] pointers to environment variables -+ * NULL -+ * -+ * r12 contains a function pointer to be registered with `atexit'. -+ * This is how the dynamic linker arranges to have DT_FINI functions -+ * called for shared libraries that have been loaded before this -+ * code runs. -+ * -+ * We're going to call the following function: -+ * __uClibc_main(int (*main)(int, char **, char **), int argc, -+ * char **argv, void (*app_init)(void), void (*app_fini)(void), -+ * void (*rtld_fini)(void), void *stack_end) -+ * -+ * So we need to set up things as follows: -+ * r12 = address of main -+ * r11 = argc -+ * r10 = &argv[0] -+ * r9 = address of _init -+ * r8 = address of _fini -+ * sp[0] = whatever we got passed in r12 -+ */ -+ -+#include -+ -+ .text -+ .global _start -+ .type _start, @function -+_start: -+ /* Clear the frame pointer and link register since this is the outermost frame. */ -+ mov r7, 0 -+ mov lr, 0 -+ -+ ld.w r11, sp++ /* argc */ -+ mov r10, sp /* &argv[0] */ -+ -+ st.w --sp, r10 /* stack_end */ -+ st.w --sp, r12 /* rtld_fini */ -+ -+#ifdef __PIC__ -+ lddpc r6, .L_GOT -+.L_RGOT: -+ rsub r6, pc -+ lda.w r9, _init -+ lda.w r8, _fini -+ lda.w r12, main -+ -+ /* Ok, now run uClibc's main() -- should not return */ -+ call __uClibc_main -+ -+ .align 2 -+.L_GOT: -+ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ -+#else -+ lddpc r9, __init_addr /* app_init */ -+ lddpc r8, __fini_addr /* app_fini */ -+ lddpc r12, __main_addr /* main */ -+ -+ /* Ok, now run uClibc's main() -- should not return */ -+ lddpc pc, ___uClibc_main_addr -+ -+ .align 2 -+__init_addr: -+ .long _init -+__fini_addr: -+ .long _fini -+__main_addr: -+ .long main -+___uClibc_main_addr: -+ .long __uClibc_main -+#endif -+ .size _start, . - _start -+ -+ /* -+ * The LSB says we need this. -+ */ -+ .section ".note.ABI-tag", "a" -+ .align 4 -+ .long 2f - 1f /* namesz */ -+ .long 4f - 3f /* descsz */ -+ .long 1 /* type */ -+1: .asciz "GNU" /* name */ -+2: .align 4 -+3: .long 0 /* Linux executable */ -+ .long 2,6,0 /* Earliest compatible kernel */ -+4: .align 4 -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crti.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crti.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,17 @@ -+ -+ .section .init -+ .align 2 -+ .global _init -+ .type _init, @function -+_init: -+ /* Use a four-byte instruction to avoid NOPs */ -+ stm --sp, r0-r7,lr -+ .align 2 -+ -+ .section .fini -+ .align 2 -+ .global _fini -+ .type _fini, @function -+_fini: -+ stm --sp, r0-r7,lr -+ .align 2 -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crtn.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crtn.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,14 @@ -+ -+ .section .init -+ .align 2 -+ .global _init -+ .type _init, @function -+ ldm sp++, r0-r7,pc -+ .size _init, . - _init -+ -+ .section .fini -+ .align 2 -+ .global _fini -+ .type _fini, @function -+ ldm sp++, r0-r7,pc -+ .size _fini, . - _fini -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/mmap.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/mmap.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,31 @@ -+/* Copyright (C) 2005 Atmel Norway -+ -+ This program is free software; you can redistribute it and/or modify it under -+ the terms of the GNU Library 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 Library General Public License for more -+ details. -+ -+ You should have received a copy of the GNU Library 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 -+ -+ Derived in part from the Linux-8086 C library, the GNU C Library, and several -+ other sundry sources. Files within this library are copyright by their -+ respective copyright holders. -+ */ -+ -+#include -+#include -+#include -+ -+static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff); -+ -+__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) -+{ -+ return mmap2(addr, len, prot, flags, fd, offset >> 12); -+} -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/setjmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/setjmp.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,43 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#define _SETJMP_H -+#define _ASM -+#include -+ -+ .text -+ -+ .global __sigsetjmp -+ .type __sigsetjmp,"function" -+ -+ /* Create a global, hidden symbol for use by setjmp() and _setjmp(). -+ If it's not hidden, the linker will complain about a relative -+ jump to a dynamic symbol when building a shared library. -+ -+ Also, if a user overrides the __sigsetjmp function, he might not -+ expect the setjmp() and _setjmp() function to effectively be -+ overridden as well. */ -+ .global __sigsetjmp_internal -+ .hidden __sigsetjmp_internal -+ .type __sigsetjmp_internal,"function" -+ .align 1 -+__sigsetjmp: -+__sigsetjmp_internal: -+ mustr r8 -+ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr -+ -+ /* Make a tail call to __sigjmp_save; it takes the same args. */ -+#ifdef __PIC__ -+ mov r9, r6 -+ lddpc r6, .LG -+.L1: rsub r6, pc -+ ld.w r8, r6[__sigjmp_save@got] -+ mov r6, r9 -+ mov pc, r8 -+ -+ .align 2 -+.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_ -+#else -+ rjmp __sigjmp_save -+#endif -+ .size __sigsetjmp, . - __sigsetjmp -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigaction.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigaction.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,49 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+#include -+#include -+#include -+#include -+ -+#define SA_RESTORER 0x04000000 -+extern void __default_rt_sa_restorer(void); -+ -+/* -+ * If act is not NULL, change the action for sig to *act. -+ * If oact is not NULL, put the old action for sig in *oact. -+ */ -+int __libc_sigaction(int signum, const struct sigaction *act, -+ struct sigaction *oldact) -+{ -+ struct kernel_sigaction kact, koact; -+ int result; -+ -+ if (act) { -+ kact.k_sa_handler = act->sa_handler; -+ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); -+ kact.sa_flags = act->sa_flags; -+ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) -+ kact.sa_restorer = act->sa_restorer; -+ else -+ kact.sa_restorer = __default_rt_sa_restorer; -+ kact.sa_flags |= SA_RESTORER; -+ } -+ -+ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, -+ oldact ? __ptrvalue(&koact) : NULL, -+ _NSIG / 8); -+ -+ if (oldact && result >= 0) { -+ oldact->sa_handler = koact.k_sa_handler; -+ memcpy(&oldact->sa_mask, &koact.sa_mask, -+ sizeof(oldact->sa_mask)); -+ oldact->sa_flags = koact.sa_flags; -+ oldact->sa_restorer = koact.sa_restorer; -+ } -+ -+ return result; -+} -+ -+weak_alias(__libc_sigaction, sigaction) -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigrestorer.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigrestorer.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,11 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway AS -+ */ -+#include -+ -+ .global __default_rt_sa_restorer -+ .type __default_rt_sa_restorer,"function" -+ .align 1 -+__default_rt_sa_restorer: -+ mov r8, __NR_rt_sigreturn -+ scall -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/elf.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/elf.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_ELF_H -+#define _SYS_ELF_H 1 -+ -+#warning "This header is obsolete; use instead." -+ -+#include -+ -+#endif /* sys/elf.h */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/io.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/io.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,48 @@ -+/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_IO_H -+ -+#define _SYS_IO_H 1 -+#include -+ -+__BEGIN_DECLS -+ -+/* If TURN_ON is TRUE, request for permission to do direct i/o on the -+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O -+ permission off for that range. This call requires root privileges. */ -+extern int ioperm (unsigned long int __from, unsigned long int __num, -+ int __turn_on) __THROW; -+ -+/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, -+ permission to access any I/O port is granted. This call requires -+ root privileges. */ -+extern int iopl (int __level) __THROW; -+ -+/* The functions that actually perform reads and writes. */ -+extern unsigned char inb (unsigned long int port) __THROW; -+extern unsigned short int inw (unsigned long int port) __THROW; -+extern unsigned long int inl (unsigned long int port) __THROW; -+ -+extern void outb (unsigned char value, unsigned long int port) __THROW; -+extern void outw (unsigned short value, unsigned long int port) __THROW; -+extern void outl (unsigned long value, unsigned long int port) __THROW; -+ -+__END_DECLS -+ -+#endif /* _SYS_IO_H */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/procfs.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/procfs.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,123 @@ -+/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _SYS_PROCFS_H -+#define _SYS_PROCFS_H 1 -+ -+/* This is somewhat modelled after the file of the same name on SVR4 -+ systems. It provides a definition of the core file format for ELF -+ used on Linux. It doesn't have anything to do with the /proc file -+ system, even though Linux has one. -+ -+ Anyway, the whole purpose of this file is for GDB and GDB only. -+ Don't read too much into it. Don't use it for anything other than -+ GDB unless you know what you are doing. */ -+ -+#include -+#include -+#include -+#include -+ -+__BEGIN_DECLS -+ -+/* Type for a general-purpose register. */ -+typedef unsigned long elf_greg_t; -+ -+/* And the whole bunch of them. We could have used `struct -+ user_regs' directly in the typedef, but tradition says that -+ the register set is an array, which does have some peculiar -+ semantics, so leave it that way. */ -+#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) -+typedef elf_greg_t elf_gregset_t[ELF_NGREG]; -+ -+/* Register set for the floating-point registers. */ -+typedef struct user_fpregs elf_fpregset_t; -+ -+/* Signal info. */ -+struct elf_siginfo -+ { -+ int si_signo; /* Signal number. */ -+ int si_code; /* Extra code. */ -+ int si_errno; /* Errno. */ -+ }; -+ -+/* Definitions to generate Intel SVR4-like core files. These mostly -+ have the same names as the SVR4 types with "elf_" tacked on the -+ front to prevent clashes with Linux definitions, and the typedef -+ forms have been avoided. This is mostly like the SVR4 structure, -+ but more Linuxy, with things that Linux does not support and which -+ GDB doesn't really use excluded. */ -+ -+struct elf_prstatus -+ { -+ struct elf_siginfo pr_info; /* Info associated with signal. */ -+ short int pr_cursig; /* Current signal. */ -+ unsigned long int pr_sigpend; /* Set of pending signals. */ -+ unsigned long int pr_sighold; /* Set of held signals. */ -+ __pid_t pr_pid; -+ __pid_t pr_ppid; -+ __pid_t pr_pgrp; -+ __pid_t pr_sid; -+ struct timeval pr_utime; /* User time. */ -+ struct timeval pr_stime; /* System time. */ -+ struct timeval pr_cutime; /* Cumulative user time. */ -+ struct timeval pr_cstime; /* Cumulative system time. */ -+ elf_gregset_t pr_reg; /* GP registers. */ -+ int pr_fpvalid; /* True if math copro being used. */ -+ }; -+ -+ -+#define ELF_PRARGSZ (80) /* Number of chars for args. */ -+ -+struct elf_prpsinfo -+ { -+ char pr_state; /* Numeric process state. */ -+ char pr_sname; /* Char for pr_state. */ -+ char pr_zomb; /* Zombie. */ -+ char pr_nice; /* Nice val. */ -+ unsigned long int pr_flag; /* Flags. */ -+ unsigned short int pr_uid; -+ unsigned short int pr_gid; -+ int pr_pid, pr_ppid, pr_pgrp, pr_sid; -+ /* Lots missing */ -+ char pr_fname[16]; /* Filename of executable. */ -+ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ -+ }; -+ -+/* The rest of this file provides the types for emulation of the -+ Solaris interfaces that should be implemented by -+ users of libthread_db. */ -+ -+/* Addresses. */ -+typedef void *psaddr_t; -+ -+/* Register sets. Linux has different names. */ -+typedef elf_gregset_t prgregset_t; -+typedef elf_fpregset_t prfpregset_t; -+ -+/* We don't have any differences between processes and threads, -+ therefore have only one PID type. */ -+typedef __pid_t lwpid_t; -+ -+/* Process status and info. In the end we do provide typedefs for them. */ -+typedef struct elf_prstatus prstatus_t; -+typedef struct elf_prpsinfo prpsinfo_t; -+ -+__END_DECLS -+ -+#endif /* sys/procfs.h */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/ucontext.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,94 @@ -+/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+/* Linux/AVR32 ABI compliant context switching support. */ -+ -+#ifndef _SYS_UCONTEXT_H -+#define _SYS_UCONTEXT_H 1 -+ -+#include -+#include -+#include -+#include -+ -+typedef int greg_t; -+ -+/* Number of general registers. */ -+#define NGREG 16 -+ -+/* Container for all general registers. */ -+typedef elf_gregset_t gregset_t; -+ -+/* Number of each register is the `gregset_t' array. */ -+enum -+{ -+ R0 = 0, -+#define R0 R0 -+ R1 = 1, -+#define R1 R1 -+ R2 = 2, -+#define R2 R2 -+ R3 = 3, -+#define R3 R3 -+ R4 = 4, -+#define R4 R4 -+ R5 = 5, -+#define R5 R5 -+ R6 = 6, -+#define R6 R6 -+ R7 = 7, -+#define R7 R7 -+ R8 = 8, -+#define R8 R8 -+ R9 = 9, -+#define R9 R9 -+ R10 = 10, -+#define R10 R10 -+ R11 = 11, -+#define R11 R11 -+ R12 = 12, -+#define R12 R12 -+ R13 = 13, -+#define R13 R13 -+ R14 = 14, -+#define R14 R14 -+ R15 = 15 -+#define R15 R15 -+}; -+ -+/* Structure to describe FPU registers. */ -+typedef elf_fpregset_t fpregset_t; -+ -+/* Context to describe whole processor state. */ -+typedef struct -+ { -+ gregset_t gregs; -+ fpregset_t fpregs; -+ } mcontext_t; -+ -+/* Userlevel context. */ -+typedef struct ucontext -+{ -+ unsigned long uc_flags; -+ struct ucontext *uc_link; -+ stack_t uc_stack; -+ struct sigcontext uc_mcontext; -+ sigset_t uc_sigmask; /* mask last for extensibility */ -+} ucontext_t; -+ -+#endif /* sys/ucontext.h */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/user.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/user.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,46 @@ -+#ifndef _SYS_USER_H -+#define _SYS_USER_H -+ -+struct user_fpregs -+{ -+ -+}; -+ -+struct user_regs -+{ -+ unsigned long sr; -+ unsigned long pc; -+ unsigned long lr; -+ unsigned long sp; -+ unsigned long r12; -+ unsigned long r11; -+ unsigned long r10; -+ unsigned long r9; -+ unsigned long r8; -+ unsigned long r7; -+ unsigned long r6; -+ unsigned long r5; -+ unsigned long r4; -+ unsigned long r3; -+ unsigned long r2; -+ unsigned long r1; -+ unsigned long r0; -+ unsigned long r12_orig; -+}; -+ -+struct user -+{ -+ struct user_regs regs; /* general registers */ -+ size_t u_tsize; /* text size (pages) */ -+ size_t u_dsize; /* data size (pages) */ -+ size_t u_ssize; /* stack size (pages) */ -+ unsigned long start_code; /* text starting address */ -+ unsigned long start_data; /* data starting address */ -+ unsigned long start_stack; /* stack starting address */ -+ long int signal; /* signal causing core dump */ -+ struct user_regs * u_ar0; /* help gdb find registers */ -+ unsigned long magic; /* identifies a core file */ -+ char u_comm[32]; /* user command name */ -+}; -+ -+#endif /* _SYS_USER_H */ -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/syscall.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/syscall.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,81 @@ -+/* -+ * syscall for AVR32/uClibc -+ * -+ * Copyright (C) 2004 Atmel Norway -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU Library 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 Library General Public License -+ * for more details. -+ * -+ * You should have received a copy of the GNU Library General Public License -+ * along with this program; if not, write to the Free Software Foundation, -+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+#include -+ -+ .text -+ -+ /* -+ * long int syscall(long int sysno, ...) -+ */ -+ .global syscall -+ .type syscall, @function -+ .align 2 -+syscall: -+ stm --sp, r3,r5,lr -+ sub lr, sp, -12 -+ mov r8, r12 -+ ldm lr, r3,r5,r9-r12 -+ scall -+ cp.w r12, -4095 -+ brlo .Ldone -+ -+#ifdef __PIC__ -+ lddpc r5, .Lgot -+.Lgotcalc: -+ rsub r5, pc -+# ifdef __UCLIBC_HAS_THREADS__ -+ mov r3, r12 -+ mcall r5[__errno_location@got] -+ st.w r12[0], r3 -+# else -+ ld.w r3, r5[errno@got] -+ st.w r3[0], r12 -+# endif -+#else -+# ifdef __UCLIBC_HAS_THREADS__ -+ mov r3, r12 -+ mcall .Lerrno_location -+ st.w r12[0], r3 -+# else -+ lddpc r3, .Lerrno -+ st.w r3[0], r12 -+# endif -+#endif -+ mov r12, -1 -+ -+.Ldone: -+ ldm sp++, r3,r5,pc -+ -+ .align 2 -+#ifdef __PIC__ -+.Lgot: -+ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ -+#else -+# ifdef __UCLIBC_HAS_THREADS__ -+.Lerrno_location: -+ .long __errno_location -+# else -+.Lerrno: -+ .long errno -+# endif -+#endif -+ -+ -+ .size syscall, . - syscall -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/vfork.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/vfork.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,55 @@ -+ /* -+ * vfork for uClibc -+ * -+ * Copyright (C) 2005 Atmel Norway -+ */ -+ -+ /* -+ * Clone the process without copying the address space. The -+ * calling process is suspended until the child either exits -+ * or calls execve. -+ * -+ * This all means that we cannot rely on the stack to store -+ * away registers, since they will be overwritten by the child -+ * as soon as it makes another function call (e.g. execve()). -+ * Fortunately, the Linux kernel preserves LR across system calls. -+ */ -+#include -+#include -+ -+ .global __vfork -+ .type __vfork,@function -+ .align 1 -+__vfork: -+ mov r8, __NR_vfork -+ scall -+ cp.w r12, -4096 -+ retls r12 -+ -+ /* vfork failed, so we may use the stack freely */ -+ pushm r4-r7,lr -+#ifdef __PIC__ -+ lddpc r6, .L_GOT -+ rsub r4, r12, 0 -+.L_RGOT: -+ rsub r6, pc -+ mcall r6[__errno_location@got] -+#else -+ rsub r4, r12, 0 -+ mcall .L__errno_location -+#endif -+ st.w r12[0], r4 -+ popm r4-r7,pc,r12=-1 -+ -+ .align 2 -+#ifdef __PIC__ -+.L_GOT: -+ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ -+#else -+.L__errno_location: -+ .long __errno_location -+#endif -+ .size __vfork, . - __vfork -+ -+ .weak vfork -+ vfork = __vfork -Index: uClibc-0.9.28-avr32/Rules.mak -=================================================================== ---- uClibc-0.9.28-avr32.orig/Rules.mak 2006-10-19 15:05:49.000000000 +0200 -+++ uClibc-0.9.28-avr32/Rules.mak 2006-10-19 15:05:52.000000000 +0200 -@@ -231,6 +231,12 @@ ifeq ($(strip $(TARGET_ARCH)),frv) - UCLIBC_LDSO=ld.so.1 - endif - -+ifeq ($(strip $(TARGET_ARCH)),avr32) -+ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000 -+ CPU_CFLAGS-$(LINKRELAX) += -masm-addr-pseudos -Wa,--pic,--linkrelax -+ CPU_LDFLAGS-$(LINKRELAX) += --relax -+endif -+ - # Keep the check_gcc from being needlessly executed - ifndef PIEFLAG - ifneq ($(UCLIBC_BUILD_PIE),y) -Index: uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,15 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+ .text -+ .global bcopy -+ .type bcopy, @function -+ .align 1 -+bcopy: -+ /* Swap the first two arguments */ -+ eor r11, r12 -+ eor r12, r11 -+ eor r11, r12 -+ rjmp __memmove -+ .size bcopy, . - bcopy -Index: uClibc-0.9.28-avr32/libc/string/avr32/bzero.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/bzero.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,12 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+ .text -+ .global bzero -+ .type bzero, @function -+ .align 1 -+bzero: -+ mov r10, r11 -+ mov r11, 0 -+ rjmp __memset -Index: uClibc-0.9.28-avr32/libc/string/avr32/Makefile -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,40 @@ -+# Makefile for uClibc -+# -+# Copyright (C) 2000-2003 Erik Andersen -+# -+# This program is free software; you can redistribute it and/or modify it under -+# the terms of the GNU Library 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 Library General Public License for more -+# details. -+# -+# You should have received a copy of the GNU Library 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 -+ -+TOPDIR=../../../ -+include $(TOPDIR)Rules.mak -+ -+SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S -+SSRC += memset.S strcmp.S strlen.S -+# memchr.S, strcat.S, strcpy.S, strncpy.S is broken -+SOBJS := $(patsubst %.S,%.o, $(SSRC)) -+OBJS := $(SOBJS) -+ -+OBJ_LIST:= ../../obj.string.$(TARGET_ARCH) -+ -+all: $(OBJ_LIST) -+ -+$(OBJ_LIST): $(OBJS) -+ echo $(addprefix string/$(TARGET_ARCH)/, $(OBJS)) > $@ -+ -+$(SOBJS): %.o: %.S -+ $(CC) $(ASFLAGS) -c $< -o $@ -+ $(STRIPTOOL) -x -R .note -R .comment $@ -+ -+clean: -+ $(RM) *.[oa] *~ core -Index: uClibc-0.9.28-avr32/libc/string/avr32/memchr.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memchr.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,62 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define str r12 -+#define chr r11 -+#define len r10 -+ -+ .text -+ .global memchr -+ .type memchr, @function -+memchr: -+ or chr, chr, chr << 8 -+ or chr, chr, chr << 16 -+ -+ mov r9, str -+ andl r9, 3, COH -+ brne .Lunaligned_str -+ -+1: sub len, 4 -+ brlt 2f -+ ld.w r8, str++ -+ psub.b r9, r8, r11 -+ tnbz r9 -+ brne 1b -+ -+ sub str, 4 -+ bfextu r9, r8, 24, 8 -+ cp.b r9, r11 -+ reteq str -+ sub str, -1 -+ bfextu r9, r8, 16, 8 -+ cp.b r9, r11 -+ reteq str -+ sub str, -1 -+ bfextu r9, r8, 8, 8 -+ cp.b r9, r11 -+ reteq str -+ sub str, -1 -+ retal str -+ -+2: sub len, -4 -+ reteq 0 -+ -+3: ld.ub r8, str++ -+ cp.w r8, 0 -+ reteq str -+ sub len, 1 -+ brne 3b -+ -+ retal 0 -+ -+.Lunaligned_str: -+1: sub len, 1 -+ retlt 0 -+ ld.ub r8, str++ -+ cp.b r8, r11 -+ reteq str -+ sub r9, 1 -+ brge 1b -+ -+ rjmp .Laligned_search -Index: uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,26 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway. -+ */ -+ -+#define s1 r12 -+#define s2 r11 -+#define len r10 -+ -+ .text -+ .global memcmp -+ .type memcmp, @function -+ .align 1 -+memcmp: -+ cp.w len, 1 -+ retlt 0 -+1: ld.ub r8, s1++ -+ ld.ub r9, s2++ -+ sub r8, r9 -+ subfne len, 1 -+ brne 1b -+ -+ retal r8 -+ .size memcmp, . - memcmp -+ -+ .weak bcmp -+ bcmp = memcmp -Index: uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,110 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+/* Don't use r12 as dst since we must return it unmodified */ -+#define dst r9 -+#define src r11 -+#define len r10 -+ -+ .text -+ .global memcpy -+ .type memcpy, @function -+ -+ .global __memcpy -+ .hidden __memcpy -+ .type __memcpy, @function -+memcpy: -+__memcpy: -+ pref src[0] -+ mov dst, r12 -+ -+ /* If we have less than 32 bytes, don't do anything fancy */ -+ cp.w len, 32 -+ brge .Lmore_than_31 -+ -+ sub len, 1 -+ retlt r12 -+1: ld.ub r8, src++ -+ st.b dst++, r8 -+ sub len, 1 -+ brge 1b -+ retal r12 -+ -+.Lmore_than_31: -+ pushm r0-r7, lr -+ -+ /* Check alignment */ -+ mov r8, src -+ andl r8, 31, COH -+ brne .Lunaligned_src -+ mov r8, dst -+ andl r8, 3, COH -+ brne .Lunaligned_dst -+ -+.Laligned_copy: -+ sub len, 32 -+ brlt .Lless_than_32 -+ -+1: /* Copy 32 bytes at a time */ -+ ldm src, r0-r7 -+ sub src, -32 -+ stm dst, r0-r7 -+ sub dst, -32 -+ sub len, 32 -+ brge 1b -+ -+.Lless_than_32: -+ /* Copy 16 more bytes if possible */ -+ sub len, -16 -+ brlt .Lless_than_16 -+ ldm src, r0-r3 -+ sub src, -16 -+ sub len, 16 -+ stm dst, r0-r3 -+ sub dst, -16 -+ -+.Lless_than_16: -+ /* Do the remaining as byte copies */ -+ neg len -+ add pc, pc, len << 2 -+ .rept 15 -+ ld.ub r0, src++ -+ st.b dst++, r0 -+ .endr -+ -+ popm r0-r7, pc -+ -+.Lunaligned_src: -+ /* Make src cacheline-aligned. r8 = (src & 31) */ -+ rsub r8, r8, 32 -+ sub len, r8 -+1: ld.ub r0, src++ -+ st.b dst++, r0 -+ sub r8, 1 -+ brne 1b -+ -+ /* If dst is word-aligned, we're ready to go */ -+ pref src[0] -+ mov r8, 3 -+ tst dst, r8 -+ breq .Laligned_copy -+ -+.Lunaligned_dst: -+ /* src is aligned, but dst is not. Expect bad performance */ -+ sub len, 4 -+ brlt 2f -+1: ld.w r0, src++ -+ st.w dst++, r0 -+ sub len, 4 -+ brge 1b -+ -+2: neg len -+ add pc, pc, len << 2 -+ .rept 3 -+ ld.ub r0, src++ -+ st.b dst++, r0 -+ .endr -+ -+ popm r0-r7, pc -+ .size memcpy, . - memcpy -Index: uClibc-0.9.28-avr32/libc/string/avr32/memmove.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memmove.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,114 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define dst r12 -+#define src r11 -+#define len r10 -+ -+ .text -+ .global memmove -+ .type memmove, @function -+ -+ .global __memmove -+ .hidden __memmove -+ .type __memmove, @function -+memmove: -+__memmove: -+ cp.w src, dst -+ brge __memcpy -+ -+ add dst, len -+ add src, len -+ pref src[-1] -+ -+ /* -+ * The rest is basically the same as in memcpy.S except that -+ * the direction is reversed. -+ */ -+ cp.w len, 32 -+ brge .Lmore_than_31 -+ -+ sub len, 1 -+ retlt r12 -+1: ld.ub r8, --src -+ st.b --dst, r8 -+ sub len, 1 -+ brge 1b -+ retal r12 -+ -+.Lmore_than_31: -+ pushm r0-r7, lr -+ -+ /* Check alignment */ -+ mov r8, src -+ andl r8, 31, COH -+ brne .Lunaligned_src -+ mov r8, r12 -+ andl r8, 3, COH -+ brne .Lunaligned_dst -+ -+.Laligned_copy: -+ sub len, 32 -+ brlt .Lless_than_32 -+ -+1: /* Copy 32 bytes at a time */ -+ sub src, 32 -+ ldm src, r0-r7 -+ sub dst, 32 -+ sub len, 32 -+ stm dst, r0-r7 -+ brge 1b -+ -+.Lless_than_32: -+ /* Copy 16 more bytes if possible */ -+ sub len, -16 -+ brlt .Lless_than_16 -+ sub src, 16 -+ ldm src, r0-r3 -+ sub dst, 16 -+ sub len, 16 -+ stm dst, r0-r3 -+ -+.Lless_than_16: -+ /* Do the remaining as byte copies */ -+ sub len, -16 -+ breq 2f -+1: ld.ub r0, --src -+ st.b --dst, r0 -+ sub len, 1 -+ brne 1b -+ -+2: popm r0-r7, pc -+ -+.Lunaligned_src: -+ /* Make src cacheline-aligned. r8 = (src & 31) */ -+ sub len, r8 -+1: ld.ub r0, --src -+ st.b --dst, r0 -+ sub r8, 1 -+ brne 1b -+ -+ /* If dst is word-aligned, we're ready to go */ -+ pref src[-4] -+ mov r8, 3 -+ tst dst, r8 -+ breq .Laligned_copy -+ -+.Lunaligned_dst: -+ /* src is aligned, but dst is not. Expect bad performance */ -+ sub len, 4 -+ brlt 2f -+1: ld.w r0, --src -+ st.w --dst, r0 -+ sub len, 4 -+ brge 1b -+ -+2: neg len -+ add pc, pc, len << 2 -+ .rept 3 -+ ld.ub r0, --src -+ st.b --dst, r0 -+ .endr -+ -+ popm r0-r7, pc -Index: uClibc-0.9.28-avr32/libc/string/avr32/memset.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/memset.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,60 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway. -+ */ -+ -+#define s r12 -+#define c r11 -+#define n r10 -+ -+ .text -+ .global memset -+ .type memset, @function -+ -+ .global __memset -+ .hidden __memset -+ .type __memset, @function -+ -+ .align 1 -+memset: -+__memset: -+ cp.w n, 32 -+ mov r9, s -+ brge .Llarge_memset -+ -+ sub n, 1 -+ retlt s -+1: st.b s++, c -+ sub n, 1 -+ brge 1b -+ -+ retal r9 -+ -+.Llarge_memset: -+ mov r8, r11 -+ mov r11, 3 -+ or r8, r8, r8 << 8 -+ or r8, r8, r8 << 16 -+ tst s, r11 -+ breq 2f -+ -+1: st.b s++, r8 -+ sub n, 1 -+ tst s, r11 -+ brne 1b -+ -+2: mov r11, r9 -+ mov r9, r8 -+ sub n, 8 -+ -+3: st.d s++, r8 -+ sub n, 8 -+ brge 3b -+ -+ /* If we are done, n == -8 and we'll skip all st.b insns below */ -+ neg n -+ lsl n, 1 -+ add pc, n -+ .rept 7 -+ st.b s++, r8 -+ .endr -+ retal r11 -Index: uClibc-0.9.28-avr32/libc/string/avr32/strcat.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strcat.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,95 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define s1 r9 -+#define s2 r11 -+ -+ .text -+ .global strcat -+ .type strcat, @function -+ .align 1 -+strcat: -+ mov s1, r12 -+ -+ /* Make sure s1 is word-aligned */ -+ mov r10, s1 -+ andl r10, 3, COH -+ breq 2f -+ -+ add pc, pc, r10 << 3 -+ sub r0, r0, 0 /* 4-byte nop */ -+ ld.ub r8, s1++ -+ sub r8, r8, 0 -+ breq 2f -+ ld.ub r8, s1++ -+ sub r8, r8, 0 -+ breq 3f -+ ld.ub r8, s1++ -+ sub r8, r8, 0 -+ breq 4f -+ -+ /* Find the end of the first string */ -+5: ld.w r8, s1++ -+ tnbz r8 -+ brne 5b -+ -+ sub s1, 4 -+ -+ bfextu r10, r8, 24, 8 -+ cp.w r10, 0 -+ breq 1f -+ sub s1, -1 -+ bfextu r10, r8, 16, 8 -+ cp.w r10, 0 -+ breq 2f -+ sub s1, -1 -+ bfextu r10, r8, 8, 8 -+ cp.w r10, 0 -+ breq 3f -+ sub s1, -1 -+ rjmp 4f -+ -+ /* Now, append s2 */ -+1: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+2: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+3: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+4: ld.ub r8, s2++ -+ st.b s1++, r8 -+ cp.w r8, 0 -+ reteq r12 -+ -+ /* Copy one word at a time */ -+ ld.w r8, s2++ -+ tnbz r8 -+ breq 2f -+1: st.w r8, s2++ -+ ld.w r8, s2++ -+ tnbz r8 -+ brne 1b -+ -+ /* Copy the remaining bytes */ -+ bfextu r10, r8, 24, 8 -+ st.b s1++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ bfextu r10, r8, 16, 8 -+ st.b s1++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ bfextu r10, r8, 8, 8 -+ st.b s1++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ st.b s1++, r8 -+ retal r12 -+ .size strcat, . - strcat -Index: uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,80 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway. -+ */ -+ -+#define s1 r12 -+#define s2 r11 -+#define len r10 -+ -+ .text -+ .global strcmp -+ .type strcmp, @function -+ .align 1 -+strcmp: -+ mov r8, 3 -+ tst s1, r8 -+ brne .Lunaligned_s1 -+ tst s2, r8 -+ brne .Lunaligned_s2 -+ -+1: ld.w r8, s1++ -+ ld.w r9, s2++ -+ cp.w r8, r9 -+ brne 2f -+ tnbz r8 -+ brne 1b -+ retal 0 -+ -+2: bfextu r12, r8, 24, 8 -+ bfextu r11, r9, 24, 8 -+ sub r12, r11 -+ retne r12 -+ cp.w r11, 0 -+ reteq 0 -+ bfextu r12, r8, 16, 8 -+ bfextu r11, r9, 16, 8 -+ sub r12, r11 -+ retne r12 -+ cp.w r11, 0 -+ reteq 0 -+ bfextu r12, r8, 8, 8 -+ bfextu r11, r9, 8, 8 -+ sub r12, r11 -+ retne r12 -+ cp.w r11, 0 -+ reteq 0 -+ bfextu r12, r8, 0, 8 -+ bfextu r11, r9, 0, 8 -+ sub r12, r11 -+ retal r12 -+ -+.Lunaligned_s1: -+3: tst s1, r8 -+ breq 4f -+ ld.ub r10, s1++ -+ ld.ub r9, s2++ -+ sub r10, r9 -+ retne r10 -+ cp.w r9, 0 -+ brne 3b -+ retal r10 -+ -+4: tst s2, r8 -+ breq 1b -+ -+.Lunaligned_s2: -+ /* -+ * s1 and s2 can't both be aligned, and unaligned word loads -+ * can trigger spurious exceptions if we cross a page boundary. -+ * Do it the slow way... -+ */ -+1: ld.ub r8, s1++ -+ ld.ub r9, s2++ -+ sub r8, r9 -+ retne r8 -+ cp.w r9, 0 -+ brne 1b -+ retal 0 -+ -+ .weak strcoll -+ strcoll = strcmp -Index: uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,63 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ * -+ * To reduce the size, this one might simply call strncpy with len = -1. -+ */ -+ -+#define dst r9 -+#define src r11 -+ -+ .text -+ .global strcpy -+ .type strcpy, @function -+strcpy: -+ mov dst, r12 -+ -+ pref src[0] -+ -+ /* -+ * Check alignment. If src is aligned but dst isn't, we can't -+ * do much about it... -+ */ -+ mov r8, src -+ andl r8, 3 COH -+ brne .Lunaligned_src -+ -+.Laligned_copy: -+1: ld.w r8, src++ -+ tnbz r8 -+ breq 2f -+ st.w dst++, r8 -+ rjmp 1b -+ -+2: /* -+ * Ok, r8 now contains the terminating '\0'. Copy the -+ * remaining bytes individually. -+ */ -+ bfextu r10, r8, 24, 8 -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ bfextu r10, r8, 16, 8 -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ bfextu r10, r8, 8, 8 -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ st.b dst++, r8 -+ retal r12 -+ -+.Lunaligned_src: -+ /* Copy bytes until we're aligned */ -+ rsub r8, r8, 4 -+ add pc, pc, r8 << 3 -+ nop -+ nop -+ ld.ub r10, src++ -+ st.b dst++, r10 -+ cp.w r10, 0 -+ reteq r12 -+ -+ rjmp .Laligned_copy -Index: uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,144 @@ -+ -+#include -+#include -+#include -+#include -+ -+#define BUF_SIZE (8 * 1024) -+ -+static char *buf1; -+static char *buf1_ref; -+static char *buf2; -+ -+extern void *optimized_memcpy(void *dest, void *src, size_t len); -+extern void *optimized_memmove(void *dest, void *src, size_t len); -+extern char *optimized_strcpy(char *dest, char *src); -+extern char *optimized_strncpy(char *dest, char *src, size_t len); -+ -+void dump_mismatch(char *buf, char *ref, size_t len) -+{ -+ int i, j; -+ -+ for (i = 0; i < len; i += 16) { -+ if (memcmp(buf + i, ref + i, 16) == 0) -+ continue; -+ -+ printf("%4x buf:", i); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", buf[j]); -+ printf("\n ref:"); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", ref[j]); -+ printf("\n"); -+ } -+} -+ -+static void test_memcpy(int src_offset, int dst_offset, int len) -+{ -+ clock_t start, old, new; -+ int i; -+ -+ memset(buf1, 0x55, BUF_SIZE); -+ memset(buf1_ref, 0x55, BUF_SIZE); -+ memset(buf2, 0xaa, BUF_SIZE); -+ -+ printf("Testing memcpy with offsets %d => %d and len %d...", -+ src_offset, dst_offset, len); -+ -+ start = clock(); -+ for (i = 0; i < 8192; i++) -+ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len); -+ new = clock() - start; -+ start = clock(); -+ for ( i = 0; i < 8192; i++) -+ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); -+ old = clock() - start; -+ -+ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) -+ printf("OK\n"); -+ else { -+ printf("FAILED\n"); -+ dump_mismatch(buf1, buf1_ref, BUF_SIZE); -+ } -+ printf("CPU time used: %d vs. %d\n", new, old); -+} -+ -+static void test_memmove(int src_offset, int dst_offset, int len) -+{ -+ clock_t start, old, new; -+ -+ memset(buf1, 0x55, BUF_SIZE); -+ memset(buf1_ref, 0x55, BUF_SIZE); -+ memset(buf2, 0xaa, BUF_SIZE); -+ -+ printf("Testing memmove with offsets %d => %d and len %d...", -+ src_offset, dst_offset, len); -+ -+ start = clock(); -+ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len); -+ new = clock() - start; -+ start = clock(); -+ memmove(buf1_ref + dst_offset, buf2 + src_offset, len); -+ old = clock() - start; -+ -+ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0) -+ printf("OK\n"); -+ else { -+ printf("FAILED\n"); -+ dump_mismatch(buf1, buf1_ref, BUF_SIZE); -+ } -+ printf("CPU time used: %d vs. %d\n", new, old); -+} -+ -+int main(int argc, char *argv[]) -+{ -+ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); -+ if (buf2 == MAP_FAILED) { -+ perror("Failed to allocate memory for buf2"); -+ return 1; -+ } -+ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); -+ if (buf1 == MAP_FAILED) { -+ perror("Failed to allocate memory for buf1"); -+ return 1; -+ } -+ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); -+ if (buf1_ref == MAP_FAILED) { -+ perror("Failed to allocate memory for buf1_ref"); -+ return 1; -+ } -+ printf("\n === MEMCPY ===\n\n"); -+ -+ test_memcpy(0, 0, BUF_SIZE - 32); -+ test_memcpy(0, 0, 1); -+ test_memcpy(0, 0, 31); -+ test_memcpy(0, 0, 32); -+ test_memcpy(0, 0, 127); -+ test_memcpy(0, 0, 128); -+ test_memcpy(4, 4, BUF_SIZE - 32 - 4); -+ test_memcpy(1, 1, BUF_SIZE - 32 - 1); -+ test_memcpy(1, 1, 126); -+ test_memcpy(0, 3, 128); -+ test_memcpy(1, 4, 128); -+ test_memcpy(0, 0, 0); -+ -+ printf("\n === MEMMOVE ===\n\n"); -+ -+ test_memmove(0, 0, BUF_SIZE - 32); -+ test_memmove(0, 0, 1); -+ test_memmove(0, 0, 31); -+ test_memmove(0, 0, 32); -+ test_memmove(0, 0, BUF_SIZE - 33); -+ test_memmove(0, 0, 128); -+ test_memmove(4, 4, BUF_SIZE - 32 - 4); -+ test_memmove(1, 1, BUF_SIZE - 32 - 1); -+ test_memmove(1, 1, BUF_SIZE - 130); -+ test_memmove(0, 3, BUF_SIZE - 128); -+ test_memmove(1, 4, BUF_SIZE - 128); -+ test_memmove(0, 0, 0); -+ -+ return 0; -+} -Index: uClibc-0.9.28-avr32/libc/string/avr32/strlen.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strlen.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,52 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define str r12 -+ -+ .text -+ .global strlen -+ .type strlen, @function -+strlen: -+ mov r11, r12 -+ -+ mov r9, str -+ andl r9, 3, COH -+ brne .Lunaligned_str -+ -+1: ld.w r8, str++ -+ tnbz r8 -+ brne 1b -+ -+ sub r12, r11 -+ bfextu r9, r8, 24, 8 -+ cp.w r9, 0 -+ subeq r12, 4 -+ reteq r12 -+ bfextu r9, r8, 16, 8 -+ cp.w r9, 0 -+ subeq r12, 3 -+ reteq r12 -+ bfextu r9, r8, 8, 8 -+ cp.w r9, 0 -+ subeq r12, 2 -+ reteq r12 -+ sub r12, 1 -+ retal r12 -+ -+.Lunaligned_str: -+ add pc, pc, r9 << 3 -+ sub r0, r0, 0 /* 4-byte nop */ -+ ld.ub r8, str++ -+ sub r8, r8, 0 -+ breq 1f -+ ld.ub r8, str++ -+ sub r8, r8, 0 -+ breq 1f -+ ld.ub r8, str++ -+ sub r8, r8, 0 -+ brne 1b -+ -+1: sub r12, 1 -+ sub r12, r11 -+ retal r12 -Index: uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,77 @@ -+/* -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define dst r9 -+#define src r11 -+ -+ .text -+ .global strcpy -+ .type strncpy, @function -+strncpy: -+ mov dst, r12 -+ -+ pref src[0] -+ mov dst, r12 -+ -+ /* -+ * Check alignment. If src is aligned but dst isn't, we can't -+ * do much about it... -+ */ -+ mov r8, src -+ andl r8, 3 COH -+ brne .Lunaligned_src -+ -+.Laligned_copy: -+ sub r10, 4 -+ brlt 3f -+1: ld.w r8, src++ -+ tnbz r8 -+ breq 2f -+ st.w dst++, r8 -+ sub r10, 4 -+ brne 1b -+ -+3: sub r10, -4 -+ reteq r12 -+ -+ /* This is safe as long as src is word-aligned and r10 > 0 */ -+ ld.w r8, src++ -+ -+2: /* -+ * Ok, r8 now contains the terminating '\0'. Copy the -+ * remaining bytes individually. -+ */ -+ bfextu r11, r8, 24, 8 -+ st.b dst++, r11 -+ cp.w r11, 0 -+ reteq r12 -+ sub r10, 1 -+ reteq r12 -+ bfextu r11, r8, 16, 8 -+ st.b dst++, r11 -+ cp.w r11, 0 -+ reteq r12 -+ sub r10, 1 -+ reteq r12 -+ bfextu r11, r8, 8, 8 -+ st.b dst++, r11 -+ cp.w r11, 0 -+ reteq r12 -+ sub r10, 1 -+ reteq r12 -+ st.b dst++, r8 -+ retal r12 -+ -+.Lunaligned_src: -+ /* Copy bytes until we're aligned */ -+ min r8, r8, r10 -+ sub r10, r8 -+ sub r8, 1 -+ retlt r12 -+1: ld.ub r10, src++ -+ st.b dst++, r10 -+ sub r8, 1 -+ brge 1b -+ -+ rjmp .Laligned_copy -Index: uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,66 @@ -+ -+#include -+#include -+ -+#define BUF_SIZE 32768 -+ -+static char buf1[BUF_SIZE] __attribute__((aligned(32))); -+static char buf1_ref[BUF_SIZE] __attribute__((aligned(32))); -+static char buf2[BUF_SIZE] __attribute__((aligned(32))); -+ -+extern void *new_memcpy(void *dest, void *src, size_t len); -+ -+void dump_mismatch(char *buf, char *ref, size_t len) -+{ -+ int i, j; -+ -+ for (i = 0; i < len; i += 16) { -+ if (memcmp(buf + i, ref + i, 16) == 0) -+ continue; -+ -+ printf("% 4x buf:", i); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", buf[j]); -+ printf("\n ref:"); -+ for (j = i; j < (i + 16); j++) -+ printf(" %02x", ref[j]); -+ printf("\n"); -+ } -+} -+ -+void test(int src_offset, int dst_offset, int len) -+{ -+ memset(buf1, 0x55, sizeof(buf1)); -+ memset(buf1_ref, 0x55, sizeof(buf1_ref)); -+ memset(buf2, 0xaa, sizeof(buf2)); -+ -+ printf("Testing with offsets %d => %d and len %d...", -+ src_offset, dst_offset, len); -+ -+ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len); -+ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len); -+ -+ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0) -+ printf("OK\n"); -+ else { -+ printf("FAILED\n"); -+ dump_mismatch(buf1, buf1_ref, sizeof(buf1)); -+ } -+} -+ -+int main(int argc, char *argv[]) -+{ -+ test(0, 0, BUF_SIZE); -+ test(0, 0, 1); -+ test(0, 0, 31); -+ test(0, 0, 32); -+ test(0, 0, 127); -+ test(0, 0, 128); -+ test(4, 4, BUF_SIZE - 4); -+ test(1, 1, BUF_SIZE - 1); -+ test(1, 1, 126); -+ test(0, 3, 128); -+ test(1, 4, 128); -+ -+ return 0; -+} -Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/create_module.c -=================================================================== ---- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/create_module.c 2006-10-19 15:05:48.000000000 +0200 -+++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/create_module.c 2006-10-19 15:05:52.000000000 +0200 -@@ -61,7 +61,8 @@ unsigned long create_module(const char * - { - return __create_module(name, size, 0, 0); - } --#else -+/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */ -+#elif !defined(__avr32__) - /* Sparc, MIPS, etc don't mistake return values for errors. */ - _syscall2(unsigned long, create_module, const char *, name, size_t, size); - #endif -Index: uClibc-0.9.28-avr32/ldso/include/dl-string.h -=================================================================== ---- uClibc-0.9.28-avr32.orig/ldso/include/dl-string.h 2006-10-19 15:05:48.000000000 +0200 -+++ uClibc-0.9.28-avr32/ldso/include/dl-string.h 2006-10-19 15:05:52.000000000 +0200 -@@ -134,7 +134,7 @@ static inline char * _dl_strstr(const ch - } while (1); - } - --static inline void * _dl_memcpy(void * dst, const void * src, size_t len) -+static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len) - { - register char *a = dst-1; - register const char *b = src-1; -@@ -271,7 +271,8 @@ static __always_inline char * _dl_simple - /* On some arches constant strings are referenced through the GOT. - * This requires that load_addr must already be defined... */ - #if defined(mc68000) || defined(__arm__) || defined(__mips__) \ -- || defined(__sh__) || defined(__powerpc__) -+ || defined(__sh__) || defined(__powerpc__) \ -+ || defined(__avr32__) - # define CONSTANT_STRING_GOT_FIXUP(X) \ - if ((X) < (const char *) load_addr) (X) += load_addr - # define NO_EARLY_SEND_STDERR -Index: uClibc-0.9.28-avr32/ldso/include/dl-syscall.h -=================================================================== ---- uClibc-0.9.28-avr32.orig/ldso/include/dl-syscall.h 2006-10-19 15:05:48.000000000 +0200 -+++ uClibc-0.9.28-avr32/ldso/include/dl-syscall.h 2006-10-19 15:05:52.000000000 +0200 -@@ -60,59 +60,59 @@ - dynamic linking at all, so we cannot return any error codes. - We just punt if there is an error. */ - #define __NR__dl_exit __NR_exit --static inline _syscall1(void, _dl_exit, int, status); -+static __always_inline _syscall1(void, _dl_exit, int, status); - - #define __NR__dl_close __NR_close --static inline _syscall1(int, _dl_close, int, fd); -+static __always_inline _syscall1(int, _dl_close, int, fd); - - #define __NR__dl_open __NR_open --static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); -+static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode); - - #define __NR__dl_write __NR_write --static inline _syscall3(unsigned long, _dl_write, int, fd, -+static __always_inline _syscall3(unsigned long, _dl_write, int, fd, - const void *, buf, unsigned long, count); - - #define __NR__dl_read __NR_read --static inline _syscall3(unsigned long, _dl_read, int, fd, -+static __always_inline _syscall3(unsigned long, _dl_read, int, fd, - const void *, buf, unsigned long, count); - - #define __NR__dl_mprotect __NR_mprotect --static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); -+static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot); - - #define __NR__dl_stat __NR_stat --static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); -+static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf); - - #define __NR__dl_munmap __NR_munmap --static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); -+static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); - - #define __NR__dl_getuid __NR_getuid --static inline _syscall0(uid_t, _dl_getuid); -+static __always_inline _syscall0(uid_t, _dl_getuid); - - #define __NR__dl_geteuid __NR_geteuid --static inline _syscall0(uid_t, _dl_geteuid); -+static __always_inline _syscall0(uid_t, _dl_geteuid); - - #define __NR__dl_getgid __NR_getgid --static inline _syscall0(gid_t, _dl_getgid); -+static __always_inline _syscall0(gid_t, _dl_getgid); - - #define __NR__dl_getegid __NR_getegid --static inline _syscall0(gid_t, _dl_getegid); -+static __always_inline _syscall0(gid_t, _dl_getegid); - - #define __NR__dl_getpid __NR_getpid --static inline _syscall0(gid_t, _dl_getpid); -+static __always_inline _syscall0(gid_t, _dl_getpid); - - #define __NR__dl_readlink __NR_readlink --static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); -+static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz); - - #ifdef __NR_mmap - #ifdef MMAP_HAS_6_ARGS - #define __NR__dl_mmap __NR_mmap --static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, -+static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, - int, prot, int, flags, int, fd, off_t, offset); - #else - #define __NR__dl_mmap_real __NR_mmap --static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); -+static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); - --static inline void * _dl_mmap(void * addr, unsigned long size, int prot, -+static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, - int flags, int fd, unsigned long offset) - { - unsigned long buffer[6]; -@@ -128,11 +128,12 @@ static inline void * _dl_mmap(void * add - #endif - #elif defined __NR_mmap2 - #define __NR___syscall_mmap2 __NR_mmap2 --static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, -+static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, - size_t, len, int, prot, int, flags, int, fd, off_t, offset); - /*always 12, even on architectures where PAGE_SHIFT != 12 */ - #define MMAP2_PAGE_SHIFT 12 --static inline void * _dl_mmap(void * addr, unsigned long size, int prot, -+#define MAP_FAILED ((void *) -1) -+static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, - int flags, int fd, unsigned long offset) - { - if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) -Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-debug.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-debug.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,45 @@ -+/* -+ * AVR32 ELF shared libary loader support -+ * -+ * Copyright (C) 2005 Atmel Norway -+ * All rights reserved. -+ * -+ * 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. The name of the above contributors may not be -+ * used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. -+ */ -+ -+static const char *_dl_reltypes_tab[] = { -+ "R_AVR32_NONE", -+ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", -+ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", -+ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", -+ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", -+ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", -+ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", -+ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", -+ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", -+ "R_AVR32_HI16", "R_AVR32_LO16", -+ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", -+ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", -+ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", -+ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", -+ "R_AVR32_ALIGN", -+}; -Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-startup.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-startup.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,110 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * Architecture specific code used by dl-startup.c -+ * Copyright (C) 2005 Atmel Norway -+ */ -+ -+/* This is the library loader's main entry point. Let _dl_boot2 do its -+ * initializations and jump to the application's entry point -+ * afterwards. */ -+asm( " .text\n" -+ " .global _start\n" -+ " .type _start,@function\n" -+ "_start:\n" -+ /* All arguments are on the stack initially */ -+ " mov r12, sp\n" -+ " rcall _dl_start\n" -+ /* Returns user entry point in r12. Save it. */ -+ " mov r0, r12\n" -+ /* We're PIC, so get the Global Offset Table */ -+ " lddpc r6, .L_GOT\n" -+ ".L_RGOT:\n" -+ " rsub r6, pc\n" -+ /* Adjust argc and argv according to _dl_skip_args */ -+ " ld.w r1, r6[_dl_skip_args@got]\n" -+ " ld.w r1, r1[0]\n" -+ " ld.w r2, sp++\n" -+ " sub r2, r1\n" -+ " add sp, sp, r1 << 2\n" -+ " st.w --sp, r2\n" -+ /* Load the finalizer function */ -+ " ld.w r12, r6[_dl_fini@got]\n" -+ /* Jump to the user's entry point */ -+ " mov pc, r0\n\n" -+ -+ " .align 2\n" -+ ".L_GOT:" -+ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" -+ " .size _start, . - _start\n" -+ " .previous\n"); -+ -+/* Get a pointer to the argv array. On many platforms this can be just -+ * the address if the first argument, on other platforms we need to -+ * do something a little more subtle here. */ -+#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) -+ -+ -+/* We can't call functions before the GOT has been initialized */ -+#define NO_FUNCS_BEFORE_BOOTSTRAP -+ -+/* -+ * Relocate the GOT during dynamic loader bootstrap. This will add -+ * the load address to all entries in the GOT, which is necessary -+ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the -+ * GOT. -+ */ -+static __always_inline -+void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) -+{ -+ Elf32_Addr i, nr_got; -+ register Elf32_Addr *__r6 __asm__("r6"); -+ Elf32_Addr *got = __r6; -+ -+ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); -+ for (i = 2; i < nr_got; i++) -+ got[i] += tpnt->loadaddr; -+} -+ -+#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) -+ -+/* Handle relocation of the symbols in the dynamic loader. */ -+static __always_inline -+void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, -+ unsigned long symbol_addr, -+ unsigned long load_addr, Elf32_Sym *symtab) -+{ -+ switch(ELF32_R_TYPE(rpnt->r_info)) { -+ case R_AVR32_NONE: -+ break; -+ case R_AVR32_GLOB_DAT: -+ case R_AVR32_JMP_SLOT: -+ *reloc_addr = symbol_addr; -+ break; -+ case R_AVR32_RELATIVE: -+ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); -+ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); -+ SEND_STDERR_DEBUG(" + "); -+ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); -+ *reloc_addr = load_addr + rpnt->r_addend; -+ break; -+ default: -+ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); -+ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); -+ SEND_STDERR("REL, SYMBOL, LOAD: "); -+ SEND_ADDRESS_STDERR(reloc_addr, 0); -+ SEND_STDERR(", "); -+ SEND_ADDRESS_STDERR(symbol_addr, 0); -+ SEND_STDERR(", "); -+ SEND_ADDRESS_STDERR(load_addr, 1); -+ _dl_exit(1); -+ } -+} -+ -+/* Transfer control to the user's application, once the dynamic loader -+ * is done. This routine has to exit the current function, then call -+ * the _dl_elf_main function. -+ * -+ * Since our _dl_boot will simply call whatever is returned by -+ * _dl_boot2, we can just return the address we're supposed to -+ * call. */ -+#define START() return _dl_elf_main; -Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-syscalls.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-syscalls.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,5 @@ -+/* We can't use the real errno in ldso, since it has not yet -+ * been dynamicly linked in yet. */ -+extern int _dl_errno; -+#define __set_errno(X) {(_dl_errno) = (X);} -+#include "sys/syscall.h" -Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-sysdep.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-sysdep.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,103 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * Various assembly language/system dependent hacks that are required -+ * so that we can minimize the amount of platform specific code. -+ * Copyright (C) 2004-2005 Atmel Norway -+ */ -+ -+/* Define this if the system uses RELOCA. */ -+#define ELF_USES_RELOCA -+ -+#include -+ -+#define ARCH_NUM 1 -+#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) -+ -+#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ -+ do { \ -+ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ -+ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ -+ } while (0) -+ -+/* Initialization sequence for the application/library GOT. */ -+#define INIT_GOT(GOT_BASE,MODULE) \ -+ do { \ -+ unsigned long i, nr_got; \ -+ \ -+ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ -+ GOT_BASE[1] = (unsigned long) MODULE; \ -+ \ -+ /* Add load address displacement to all GOT entries */ \ -+ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ -+ for (i = 2; i < nr_got; i++) \ -+ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ -+ } while (0) -+ -+#define do_rem(result, n, base) ((result) = (n) % (base)) -+ -+/* Here we define the magic numbers that this dynamic loader should accept */ -+#define MAGIC1 EM_AVR32 -+#undef MAGIC2 -+ -+/* Used for error messages */ -+#define ELF_TARGET "AVR32" -+ -+unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); -+ -+/* 4096 bytes alignment */ -+#define PAGE_ALIGN 0xfffff000 -+#define ADDR_ALIGN 0xfff -+#define OFFS_ALIGN 0x7ffff000 -+ -+#define elf_machine_type_class(type) \ -+ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) -+ -+/* AVR32 doesn't need any COPY relocs */ -+#define DL_NO_COPY_RELOCS -+ -+/* Return the link-time address of _DYNAMIC. Conveniently, this is the -+ first element of the GOT. This must be inlined in a function which -+ uses global data. */ -+static inline Elf32_Addr -+elf_machine_dynamic (void) -+{ -+ register Elf32_Addr *got asm ("r6"); -+ return *got; -+} -+ -+/* Return the run-time load address of the shared object. */ -+static inline Elf32_Addr -+elf_machine_load_address (void) -+{ -+ extern void __dl_start asm("_dl_start"); -+ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; -+ Elf32_Addr pcrel_addr; -+ -+ asm (" lddpc %0, 2f\n" -+ "1: add %0, pc\n" -+ " rjmp 3f\n" -+ " .align 2\n" -+ "2: .long _dl_start - 1b\n" -+ "3:\n" -+ : "=r"(pcrel_addr) : : "cc"); -+ -+ return pcrel_addr - got_addr; -+} -+ -+/* -+ * Perform any RELATIVE relocations specified by DT_RELCOUNT. -+ * Currently, we don't use that tag, but we might in the future as -+ * this would reduce the startup time somewhat (although probably not by much). -+ */ -+static inline void -+elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, -+ Elf32_Word relative_count) -+{ -+ Elf32_Rela *rpnt = (void *)rel_addr; -+ -+ do { -+ Elf32_Addr *reloc_addr; -+ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); -+ *reloc_addr = load_off + rpnt->r_addend; -+ } while (--relative_count); -+} -Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/elfinterp.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/ldso/ldso/avr32/elfinterp.c 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,191 @@ -+/* -+ * AVR32 ELF shared library loader suppport -+ * -+ * Copyright (C) 2004-2006 Atmel Corporation -+ * -+ * All rights reserved. -+ * -+ * 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. The name of the above contributors may not be -+ * used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. -+ */ -+ -+unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) -+{ -+ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; -+ Elf32_Sym *sym; -+ unsigned long local_gotno; -+ unsigned long gotsym; -+ unsigned long new_addr; -+ char *strtab, *symname; -+ unsigned long *entry; -+ unsigned long sym_index = got_offset / 4; -+ -+#if 0 -+ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; -+ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; -+ -+ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) -+ + sym_index; -+ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); -+ symname = strtab + sym->st_name; -+ -+#if 0 -+ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, -+ tpnt->symbol_scope, tpnt, -+ resolver); -+#endif -+ -+ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); -+ *entry = new_addr; -+#endif -+ -+ return new_addr; -+} -+ -+static int -+_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, -+ unsigned long rel_addr, unsigned long rel_size, -+ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, -+ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) -+{ -+ Elf32_Sym *symtab; -+ Elf32_Rela *rpnt; -+ char *strtab; -+ int i; -+ -+ rpnt = (Elf32_Rela *)rel_addr; -+ rel_size /= sizeof(Elf32_Rela); -+ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; -+ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; -+ -+ for (i = 0; i < rel_size; i++, rpnt++) { -+ int symtab_index, res; -+ -+ symtab_index = ELF32_R_SYM(rpnt->r_info); -+ -+ debug_sym(symtab, strtab, symtab_index); -+ debug_reloc(symtab, strtab, rpnt); -+ -+ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); -+ -+ if (res == 0) -+ continue; -+ -+ _dl_dprintf(2, "\n%s: ", _dl_progname); -+ -+ if (symtab_index) -+ _dl_dprintf(2, "symbol '%s': ", -+ strtab + symtab[symtab_index].st_name); -+ -+ if (res < 0) { -+ int reloc_type = ELF32_R_TYPE(rpnt->r_info); -+#if defined(__SUPPORT_LD_DEBUG__) -+ _dl_dprintf(2, "can't handle reloc type %s\n", -+ _dl_reltypes(reloc_type)); -+#else -+ _dl_dprintf(2, "can't handle reloc type %x\n", -+ reloc_type); -+#endif -+ _dl_exit(-res); -+ } else { -+ _dl_dprintf(2, "can't resolve symbol\n"); -+ return res; -+ } -+ } -+ -+ return 0; -+} -+ -+static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, -+ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) -+{ -+ int reloc_type; -+ int symtab_index; -+ char *symname; -+ unsigned long *reloc_addr; -+ unsigned long symbol_addr; -+#if defined(__SUPPORT_LD_DEBUG__) -+ unsigned long old_val; -+#endif -+ -+ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); -+ reloc_type = ELF32_R_TYPE(rpnt->r_info); -+ symtab_index = ELF32_R_SYM(rpnt->r_info); -+ symbol_addr = 0; -+ symname = strtab + symtab[symtab_index].st_name; -+ -+ if (symtab_index) { -+ symbol_addr = (unsigned long) -+ _dl_find_hash(strtab + symtab[symtab_index].st_name, -+ tpnt->symbol_scope, tpnt, -+ elf_machine_type_class(reloc_type)); -+ -+ /* Allow undefined references to weak symbols */ -+ if (!symbol_addr && -+ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { -+ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", -+ _dl_progname, symname); -+ return 0; -+ } -+ } -+ -+#if defined(__SUPPORT_LD_DEBUG__) -+ old_val = *reloc_addr; -+#endif -+ switch (reloc_type) { -+ case R_AVR32_NONE: -+ break; -+ case R_AVR32_GLOB_DAT: -+ case R_AVR32_JMP_SLOT: -+ *reloc_addr = symbol_addr + rpnt->r_addend; -+ break; -+ case R_AVR32_RELATIVE: -+ *reloc_addr = (unsigned long)tpnt->loadaddr -+ + rpnt->r_addend; -+ break; -+ default: -+ return -1; -+ } -+ -+#if defined(__SUPPORT_LD_DEBUG__) -+ if (_dl_debug_reloc && _dl_debug_detail) -+ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", -+ old_val, *reloc_addr); -+#endif -+ -+ return 0; -+} -+ -+void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, -+ unsigned long rel_addr, -+ unsigned long rel_size) -+{ -+ /* TODO: Might want to support this in order to get faster -+ * startup times... */ -+} -+ -+int _dl_parse_relocation_information(struct dyn_elf *rpnt, -+ unsigned long rel_addr, -+ unsigned long rel_size) -+{ -+ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, -+ _dl_do_reloc); -+} -Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/resolve.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/ldso/ldso/avr32/resolve.S 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* -+ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as -+ * indicated in register r12 and jumps to the resolved address. -+ * -+ * This file is subject to the terms and conditions of the GNU Lesser General -+ * Public License. See the file "COPYING.LIB" in the main directory of this -+ * archive for more details. -+ * -+ * Copyright (C) 2004 Atmel Norway -+ */ -+ -+#define ip r5 -+ -+ .text -+ .global _dl_linux_resolve -+ .type _dl_linux_resolve,@function -+_dl_linux_resolve: -+ /* The PLT code pushed r8 for us. It contains the address of this -+ function's GOT entry, that is entry 0. ip contains the address -+ of the GOT entry of the function we wanted to call. */ -+ stm --sp, r9-r12, lr -+ mov r11, r8 -+ sub r12, ip, r8 -+ rcall _dl_linux_resolver -+ mov ip, r12 -+ popm r8-r12,lr -+ mov pc, ip -+ .size _dl_linux_resolve, . - _dl_linux_resolve -Index: uClibc-0.9.28-avr32/ldso/ldso/dl-startup.c -=================================================================== ---- uClibc-0.9.28-avr32.orig/ldso/ldso/dl-startup.c 2006-10-19 15:05:48.000000000 +0200 -+++ uClibc-0.9.28-avr32/ldso/ldso/dl-startup.c 2006-10-19 15:05:52.000000000 +0200 -@@ -217,7 +217,9 @@ static void * __attribute_used__ _dl_sta - /* some arches (like MIPS) we have to tweak the GOT before relocations */ - PERFORM_BOOTSTRAP_GOT(tpnt); - --#else -+#endif -+ -+#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) - - /* OK, now do the relocations. We do not do a lazy binding here, so - that once we are done, we have considerably more flexibility. */ -@@ -259,7 +261,7 @@ static void * __attribute_used__ _dl_sta - rel_addr += relative_count * sizeof(ELF_RELOC);; - } - -- rpnt = (ELF_RELOC *) (rel_addr + load_addr); -+ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */); - for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { - reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); - symtab_index = ELF_R_SYM(rpnt->r_info); -Index: uClibc-0.9.28-avr32/utils/ldd.c -=================================================================== ---- uClibc-0.9.28-avr32.orig/utils/ldd.c 2006-10-19 15:05:48.000000000 +0200 -+++ uClibc-0.9.28-avr32/utils/ldd.c 2006-10-19 15:05:52.000000000 +0200 -@@ -56,6 +56,11 @@ - #define ELFCLASSM ELFCLASS32 - #endif - -+#if defined(__avr32__) -+#define MATCH_MACHINE(x) (x == EM_AVR32) -+#define ELFCLASSM ELFCLASS32 -+#endif -+ - #if defined(__s390__) - #define MATCH_MACHINE(x) (x == EM_S390) - #define ELFCLASSM ELFCLASS32 -Index: uClibc-0.9.28-avr32/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ uClibc-0.9.28-avr32/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-10-19 15:05:52.000000000 +0200 -@@ -0,0 +1,92 @@ -+/* Machine-dependent pthreads configuration and inline functions. -+ -+ Copyright (C) 2005 Atmel Norway -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; see the file COPYING.LIB. If not, -+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#ifndef _PT_MACHINE_H -+#define _PT_MACHINE_H 1 -+ -+#include -+ -+static inline int -+_test_and_set (int *p, int v) __THROW -+{ -+ int result; -+ -+ __asm__ __volatile__( -+ "/* Inline test and set */\n" -+ "1: ssrf 5\n" -+ " ld.w %0, %2\n" -+ " tst %0, %3\n" -+ " breq 2f\n" -+ " stcond %1, %3\n" -+ " brne 1b\n" -+ "2:" -+ : "=&r"(result), "=m"(*p) -+ : "m"(*p), "r"(v) -+ : "memory", "cc"); -+ -+ return result; -+} -+ -+#ifndef PT_EI -+# define PT_EI extern inline -+#endif -+ -+extern long int testandset (int *spinlock); -+extern int __compare_and_swap (long int *p, long int oldval, long int newval); -+ -+/* Spinlock implementation; required. */ -+PT_EI long int -+testandset (int *spinlock) -+{ -+ return _test_and_set(spinlock, 1); -+} -+ -+ -+/* Get some notion of the current stack. Need not be exactly the top -+ of the stack, just something somewhere in the current frame. */ -+#define CURRENT_STACK_FRAME stack_pointer -+register char * stack_pointer __asm__ ("sp"); -+ -+/* Compare-and-swap for semaphores. */ -+ -+#define HAS_COMPARE_AND_SWAP -+PT_EI int -+__compare_and_swap(long int *p, long int oldval, long int newval) -+{ -+ long int result, tmp; -+ -+ __asm__ __volatile__( -+ "/* Inline compare and swap */\n" -+ "1: ssrf 5\n" -+ " ld.w %1, %3\n" -+ " cp.w %1, %5\n" -+ " sreq %0\n" -+ " brne 2f\n" -+ " stcond %2, %4\n" -+ " brne 1b\n" -+ "2:" -+ : "=&r"(result), "=&r"(tmp), "=m"(*p) -+ : "m"(*p), "r"(newval), "r"(oldval) -+ : "cc", "memory"); -+ -+ return result; -+} -+ -+#endif /* pt-machine.h */ diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config index 478c713cb8..c59defd311 100644 --- a/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config +++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config @@ -32,6 +32,23 @@ ARCH_SUPPORTS_BIG_ENDIAN=y UCLIBC_COMPLETELY_PIC=y CONFIG_AP7000=y LINKRELAX=y +# CONFIG_GENERIC_386 is not set +# CONFIG_386 is not set +# CONFIG_486 is not set +# CONFIG_586 is not set +# CONFIG_586MMX is not set +# CONFIG_686 is not set +# CONFIG_PENTIUMII is not set +# CONFIG_PENTIUMIII is not set +# CONFIG_PENTIUM4 is not set +# CONFIG_K6 is not set +# CONFIG_K7 is not set +# CONFIG_ELAN is not set +# CONFIG_CRUSOE is not set +# CONFIG_WINCHIPC6 is not set +# CONFIG_WINCHIP2 is not set +# CONFIG_CYRIXIII is not set +# CONFIG_NEHEMIAH is not set # ARCH_LITTLE_ENDIAN is not set ARCH_BIG_ENDIAN=y # ARCH_HAS_NO_MMU is not set @@ -40,7 +57,7 @@ UCLIBC_HAS_FLOATS=y # HAS_FPU is not set UCLIBC_HAS_SOFT_FLOAT=y DO_C99_MATH=y -KERNEL_SOURCE="/media/hda4/OE/build/tmp-new/angstrom/cross/avr32-angstrom-linux-uclibc" +KERNEL_SOURCE="/usr/src/linux" C_SYMBOL_PREFIX="" HAVE_DOT_CONFIG=y @@ -69,7 +86,7 @@ UCLIBC_STATIC_LDCONFIG=y # MALLOC is not set # MALLOC_SIMPLE is not set MALLOC_STANDARD=y -MALLOC_GLIBC_COMPAT=y +# MALLOC_GLIBC_COMPAT is not set UCLIBC_DYNAMIC_ATEXIT=y HAS_SHADOW=y UNIX98PTY_ONLY=y @@ -85,7 +102,6 @@ UCLIBC_TZ_FILE_PATH="/etc/TZ" # UCLIBC_HAS_IPV6=y UCLIBC_HAS_RPC=y -UCLIBC_HAS_FULL_RPC=y # # String and Stdio Support @@ -97,10 +113,11 @@ UCLIBC_HAS_CTYPE_SIGNED=y UCLIBC_HAS_CTYPE_UNSAFE=y # UCLIBC_HAS_CTYPE_CHECKED is not set # UCLIBC_HAS_CTYPE_ENFORCED is not set -UCLIBC_HAS_WCHAR=y +# UCLIBC_HAS_WCHAR is not set # UCLIBC_HAS_LOCALE is not set # UCLIBC_HAS_HEXADECIMAL_FLOATS is not set # UCLIBC_HAS_GLIBC_CUSTOM_PRINTF is not set +# USE_OLD_VFPRINTF is not set UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 # UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set # UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set @@ -138,9 +155,9 @@ UCLIBC_HAS_GLOB=y # # Library Installation Options # -SHARED_LIB_LOADER_PREFIX="/lib" -RUNTIME_PREFIX="/" -DEVEL_PREFIX="//usr" +SHARED_LIB_LOADER_PREFIX="$(DEVEL_PREFIX)/lib" +RUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/" +DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/" # # uClibc security related options diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec deleted file mode 100644 index 7d5541cf5a..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec +++ /dev/null @@ -1,41 +0,0 @@ -Name: uclibc-avr32-kernheaders -Version: 2.6 -Release: 9 -License: GPL -Group: Development/System -Summary: AVR32 header files from the Linux kernel for use by uClibc -BuildRoot: %{_tmppath}/uclibc-kernheaders-root -Source: linux-2.6.16.tar.bz2 -Source1: linux-dot-config -Patch0: linux-2.6.16.11.patch -Patch1: linux-2.6.16.11-avr32-20060626.patch - -%description -uclibc-avr32-kernheaders contain C header files from the Linux kernel -which are necessary for building the uClibc library. These header -files are also necessary for developing programs which use the standard -C libraries. - -If you are developing programs which wil use the standard C libraries, -you should install uclibc-avr32-kernheaders. - -%prep -%setup -q -n linux-2.6.16 -%patch0 -p1 -%patch1 -p1 -cp %{SOURCE1} .config - -%build -make prepare-all ARCH=avr32 CROSS_COMPILE=avr32-linux- - -%install -mkdir -p %{buildroot}/usr/avr32-linux/include -cp -a include/{linux,asm,asm-avr32,asm-generic} %{buildroot}/usr/avr32-linux/include - - -%clean -rm -rf %{buildroot} - -%files -%defattr(-,root,root) -/usr/avr32-linux/include diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch deleted file mode 100644 index 0813c456b7..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- uClibc-0.9.28/Rules.mak.orig 2006-03-30 10:23:05.000000000 +0200 -+++ uClibc-0.9.28/Rules.mak 2006-03-30 10:23:07.000000000 +0200 -@@ -272,7 +272,11 @@ - # If -msoft-float isn't supported, we want an error anyway. - # Hmm... might need to revisit this for arm since it has 2 different - # soft float encodings. -+ifeq ($(strip $(TARGET_ARCH)),avr32) -+# GCC on avr32 doesn't support -msoft-float, it's the default. -+else - CPU_CFLAGS += -msoft-float -+endif - ifeq ($(strip $(TARGET_ARCH)),arm) - # No longer needed with current toolchains, but leave it here for now. - # If anyone is actually still using gcc 2.95 (say), they can uncomment it. diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch deleted file mode 100644 index 97ed73471f..0000000000 --- a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch +++ /dev/null @@ -1,16 +0,0 @@ -Index: uclibc/Makefile -=================================================================== -RCS file: /disk1/ic_group/design/I9980/REPOSITORY/I7413/source/uclibc/Makefile,v -retrieving revision 1.1.1.3 -diff -u -r1.1.1.3 Makefile ---- uclibc/Makefile 31 Aug 2005 13:08:25 -0000 1.1.1.3 -+++ uclibc/Makefile 7 Dec 2005 06:38:39 -0000 -@@ -163,7 +163,7 @@ - else \ - extra_exclude="" ; \ - fi ; \ -- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \ -+ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \ - | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX) - ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y) - # Remove floating point related headers since float support is disabled. diff --git a/packages/uclibc/uclibc.inc b/packages/uclibc/uclibc.inc index e57ef174a9..7fb8e5cf28 100644 --- a/packages/uclibc/uclibc.inc +++ b/packages/uclibc/uclibc.inc @@ -141,7 +141,7 @@ do_configure() { echo "# CONFIG_ARM_EABI is not set" >> ${S}/.config fi - yes '' | oe_runmake oldconfig + oe_runmake oldconfig } do_stage() { @@ -151,6 +151,7 @@ do_stage() { RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \ install_dev install_runtime + oe_runmake utils oe_runmake PREFIX= DEVEL_PREFIX=${UCLIBC_PREFIX}/ \ RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \ install_utils @@ -188,14 +189,8 @@ do_stage() { } do_install() { - # Install into the cross dir (this MUST be done first because we - # will install crt1.o in the install_dev stage and gcc needs it) - oe_runmake PREFIX= DEVEL_PREFIX=${UCLIBC_PREFIX}/ \ - RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \ - install_dev install_runtime - oe_runmake PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \ - install_dev install_runtime + install_dev install_runtime install_utils # We don't really need this in ${includedir} rm -f ${D}${prefix}/include/.cvsignore @@ -221,9 +216,5 @@ do_install() { mv ${D}/usr/bin/* ${D}${bindir}/ rmdir ${D}/usr/bin fi - - oe_runmake utils - oe_runmake PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \ - install_utils } diff --git a/packages/uclibc/uclibc_0.9.28.bb b/packages/uclibc/uclibc_0.9.28.bb index d5d1bae4be..2c557ec606 100644 --- a/packages/uclibc/uclibc_0.9.28.bb +++ b/packages/uclibc/uclibc_0.9.28.bb @@ -1,5 +1,5 @@ DEFAULT_PREFERENCE = "1" -PR = "r10" +PR = "r9" require uclibc.inc @@ -47,30 +47,6 @@ SRC_URI += " ${THUMB_INTERWORK_RESOLVE_PATCH}" DEFAULT_PREFERENCE_avr32 = "6000" -SRC_URI_append_avr32 = " \ - file://uclibc-makefile.patch;patch=1 \ - file://remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch;patch=1 \ - file://let-optimized-stringops-override-default-ones.patch;patch=1 \ - file://fix-getrusage-argument-type.patch;patch=1 \ - file://fix-__libc_fcntl64-varargs-prototype.patch;patch=1 \ - file://fix-broken-__libc_open-declaration.patch;patch=1 \ - file://avr32-arch-2.patch;patch=1 \ - file://avr32-linkrelax-option.patch;patch=1 \ - file://avr32-string-ops.patch;patch=1 \ - file://no-create_module-on-avr32.patch;patch=1 \ - file://ldso-always-inline-_dl_memcpy.patch;patch=1 \ - file://ldso-define-MAP_FAILED.patch;patch=1 \ - file://ldso-always-inline-syscalls.patch;patch=1 \ - file://ldso-avr32-2.patch;patch=1 \ - file://ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch;patch=1 \ - file://ldso-avr32-startup-hack.patch;patch=1 \ - file://ldd-avr32-support.patch;patch=1 \ - file://libpthread-avr32.patch;patch=1 \ - file://sync-fcntl-h-with-linux-kernel.patch;patch=1 \ - " - - -#file://uClibc-0.9.28-avr32-20060621.patch;patch=1 \ -#file://uClibc-0.9.28-avr32-20061019.patch;patch=1 \ -#file://uclibc-avr32-no-msoft-float.patch;patch=1 \ +SRC_URI_append_avr32 = " http://avr32linux.org/twiki/pub/Main/MicroClibcPatches/uClibc-0.9.28-avr1.patch.bz2;patch=1 " + diff --git a/packages/util-linux/files/fdiskbsdlabel-avr32.patch b/packages/util-linux/files/fdiskbsdlabel-avr32.patch deleted file mode 100644 index 4a7d8f4dc8..0000000000 --- a/packages/util-linux/files/fdiskbsdlabel-avr32.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- /tmp/fdiskbsdlabel.h 2007-09-14 08:52:56.188364759 +0200 -+++ util-linux-2.12r/fdisk/fdiskbsdlabel.h 2007-09-14 08:53:31.279986639 +0200 -@@ -43,7 +43,7 @@ - - #define BSD_LINUX_BOOTDIR "/usr/ucb/mdec" - --#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__) -+#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__) || defined(__avr32__) - #define BSD_LABELSECTOR 1 - #define BSD_LABELOFFSET 0 - #elif defined (__alpha__) || defined (__powerpc__) || defined (__ia64__) || defined (__hppa__) diff --git a/packages/util-linux/util-linux_2.12r.bb b/packages/util-linux/util-linux_2.12r.bb index 7f8c3dd9f8..9d4b59c855 100644 --- a/packages/util-linux/util-linux_2.12r.bb +++ b/packages/util-linux/util-linux_2.12r.bb @@ -3,6 +3,5 @@ require util-linux.inc SRC_URI += "file://util-linux_2.12r-12.diff.gz;patch=1" SRC_URI += "file://glibc-fix.patch;patch=1" SRC_URI += "file://glibc-umount2.patch;patch=1" -SRC_URI += "file://fdiskbsdlabel-avr32.patch;patch=1" -PR = "r13" +PR = "r12" diff --git a/packages/xorg-font/xfonts-xorg_6.8.bb b/packages/xorg-font/xfonts-xorg_6.8.bb index e5d0271516..f6710dcd5b 100644 --- a/packages/xorg-font/xfonts-xorg_6.8.bb +++ b/packages/xorg-font/xfonts-xorg_6.8.bb @@ -3,10 +3,9 @@ PR = "r1" # XXX Is this true? These fonts are from X.org. LICENSE = "XFree86" -SRC_URI = "${FREEDESKTOP_CVS}/xorg;module=xc;tag=XORG-6_8_0;method=pserver" +SRC_URI = "${FREEDESKTOP_CVS}/xorg;module=xc;tag=XORG-6_8_0;method=pserver \ + file://lexer.patch;patch=1" -# not necessary, breaks things: -#file://lexer.patch;patch=1" PACKAGES = "${PN}-75dpi ${PN}-100dpi ${PN}-type1 ${PN}-cyrillic ${PN}-ttf ${PN}" FILES_${PN}-75dpi = "${libdir}/X11/fonts/75dpi" diff --git a/packages/xorg-lib/libx11-native_1.0.1.bb b/packages/xorg-lib/libx11-native_1.0.1.bb index cc33aa30ba..7bc5fd3524 100644 --- a/packages/xorg-lib/libx11-native_1.0.1.bb +++ b/packages/xorg-lib/libx11-native_1.0.1.bb @@ -3,7 +3,6 @@ SECTION = "x11/libs" PRIORITY = "optional" LICENSE = "XFree86" PE = "1" -PR = "r1" FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libx11" @@ -12,7 +11,7 @@ PROVIDES = "x11-native" XORG_PN = "libX11" -SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-1.0.1.tar.bz2" +SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-1.1.1.tar.bz2" S = "${WORKDIR}/libX11-${PV}" inherit native autotools pkgconfig diff --git a/packages/xorg-xserver/xorg-xserver-common.inc b/packages/xorg-xserver/xorg-xserver-common.inc index 94215aae7b..2e8535ef30 100644 --- a/packages/xorg-xserver/xorg-xserver-common.inc +++ b/packages/xorg-xserver/xorg-xserver-common.inc @@ -24,7 +24,6 @@ S = "${WORKDIR}/${XORG_PN}-${PV}" inherit autotools pkgconfig PACKAGES =+ "${PN}-xprint ${PN}-xvfb ${PN}-utils" -#PACKAGES =+ "${PN}-xvfb ${PN}-utils" FILES_${PN}-xprint = "${libdir}/X11/xserver/*/print" FILES_${PN}-xvfb = "${bindir}/Xvfb" diff --git a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb index 71d0eccba8..4367e40adf 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb @@ -29,10 +29,6 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://03-xglamo-no-vesa.patch;patch=1 \ " -SRC_URI_append_avr32 = " \ - file://xorg-avr32-support.diff;patch=1 \ -" - SRC_URI_append_tosa = "file://tosa-fbdev.patch;patch=1" PACKAGE_ARCH_xserver-kdrive-fbdev_tosa = "${MACHINE_ARCH}" diff --git a/packages/xorg-xserver/xserver-kdrive_1.4.bb b/packages/xorg-xserver/xserver-kdrive_1.4.bb index f2d9810ec4..50b103495b 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.4.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.4.bb @@ -19,8 +19,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://xcalibrate-new-input-world-order.patch;patch=1 \ file://tslib-default-device.patch;patch=1 \ file://fbdev-evdev.patch;patch=1 \ - file://xorg-avr32-support.diff;patch=1 \ - " + " S = "${WORKDIR}/xorg-server-${PV}" diff --git a/site/avr32-common b/site/avr32-common index b5b176cad7..5bce901caa 100644 --- a/site/avr32-common +++ b/site/avr32-common @@ -1,25 +1,3 @@ glib_cv_stack_grows=${glib_cv_stack_grows=no} ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=yes} glib_cv_uscore=${glib_cv_uscore=no} -ac_cv_func_setpgrp_void=${ac_cv_func_setpgrp_void=yes} - -#dbus-glib -ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=yes} - -# set MALLOC_GLIBC_COMPAT=y in your uclibc .config for this -ac_cv_func_malloc_0_nonnull=${ac_cv_func_malloc_0_nonnull=yes} - -#gstreamer -as_cv_unaligned_access=${as_cv_unaligned_access=no} - -#readline -bash_cv_have_mbstate_t=${bash_cv_have_mbstate_t=yes} - -#libpcap -ac_cv_linux_vers=${ac_cv_linux_vers=2} - -#startup notification -ac_cv_func_realloc_works=${ac_cv_func_realloc_works=yes} -ac_cv_func_realloc_0_nonnull=${ac_cv_func_realloc_0_nonnull=yes} -lf_cv_sane_realloc=yes - -- cgit v1.2.3 From af2e5dd7be815f61b1349c9855b7ca101c938b2d Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 24 Jan 2008 16:04:07 +0000 Subject: calendar2: Disable broken tests --- packages/gpephone/calendar2/.mtn2git_empty | 0 packages/gpephone/calendar2/disable-broken-tests.patch | 9 +++++++++ packages/gpephone/calendar2_svn.bb | 5 +++-- 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 packages/gpephone/calendar2/.mtn2git_empty create mode 100644 packages/gpephone/calendar2/disable-broken-tests.patch diff --git a/packages/gpephone/calendar2/.mtn2git_empty b/packages/gpephone/calendar2/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/gpephone/calendar2/disable-broken-tests.patch b/packages/gpephone/calendar2/disable-broken-tests.patch new file mode 100644 index 0000000000..fa3102f5a0 --- /dev/null +++ b/packages/gpephone/calendar2/disable-broken-tests.patch @@ -0,0 +1,9 @@ +--- calendar2/Makefile.am~ 2008-01-24 16:54:38.000000000 +0100 ++++ calendar2/Makefile.am 2008-01-24 16:54:38.000000000 +0100 +@@ -1,5 +1,5 @@ + #SUBDIRS = src announce atd schedule test res po +-SUBDIRS = src test res po ++SUBDIRS = src res po + + desktopdir = $(GPE_DIR)/share/applications + desktop_in_files = cal.desktop.in diff --git a/packages/gpephone/calendar2_svn.bb b/packages/gpephone/calendar2_svn.bb index a68b8824f3..c066fc77c0 100644 --- a/packages/gpephone/calendar2_svn.bb +++ b/packages/gpephone/calendar2_svn.bb @@ -3,13 +3,14 @@ LICENSE = "LiPS" SECTION = "gpe" PRIORITY = "optional" PV = "0.0+svnr-${SRCREV}" -PR = "r0" +PR = "r1" DEPENDS = "gtk+ libgpewidget libgpephone libgemwidget dbus-glib libcalenabler2 libiac" inherit gpephone autotools -SRC_URI = "${GPEPHONE_SVN}" +SRC_URI = "${GPEPHONE_SVN} \ + file://disable-broken-tests.patch;patch=1" S = ${WORKDIR}/${PN} -- cgit v1.2.3 From ca2dd4565504ad3239ca73c5cf23c234d57a71b8 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Thu, 24 Jan 2008 16:55:05 +0000 Subject: python-edbus: fix dbus dependency --- packages/python/python-edbus_cvs.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/python/python-edbus_cvs.bb b/packages/python/python-edbus_cvs.bb index 652cf919cd..06a5a45c06 100644 --- a/packages/python/python-edbus_cvs.bb +++ b/packages/python/python-edbus_cvs.bb @@ -1,7 +1,7 @@ require python-efl.inc -DEPENDS += "edbus dbus-1.1" +DEPENDS += "edbus dbus" -PR = "r1" +PR = "r2" SRC_URI = "${E_CVS};module=e17/proto/python-efl/python-e_dbus" S = "${WORKDIR}/python-e_dbus" -- cgit v1.2.3 From 2d9c184c9d3b28efdfdbd0c827d6b1fda0d507a7 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 24 Jan 2008 17:49:06 +0000 Subject: kernel: add wifi suspend fix to kernel-module-(hostap|orinoco)-cs. Closes 3664. * applies only to kernel later than 2.6.17 * added base_version_less_or_equal function to base.bbclass (thanks, zecke and mickey!) to do the comparison. This does not change existing functionality. Skipped RFC. --- classes/base.bbclass | 8 ++++++++ classes/kernel.bbclass | 2 ++ 2 files changed, 10 insertions(+) diff --git a/classes/base.bbclass b/classes/base.bbclass index d48d2a5726..c8ee75627f 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -128,6 +128,14 @@ def base_less_or_equal(variable, checkvalue, truevalue, falsevalue, d): else: return falsevalue +def base_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d): + import bb + result = bb.vercmp(bb.data.getVar(variable,d,True), checkvalue) + if result <= 0: + return truevalue + else: + return falsevalue + def base_contains(variable, checkvalues, truevalue, falsevalue, d): import bb matches = 0 diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index 8724ad2cf1..047a3ec047 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -180,6 +180,8 @@ FILES_kernel-image = "/boot/${KERNEL_IMAGETYPE}*" FILES_kernel-dev = "/boot/System.map* /boot/config*" FILES_kernel-vmlinux = "/boot/vmlinux*" RDEPENDS_kernel = "kernel-base" +RRECOMMENDS_kernel-module-hostap-cs += '${@base_version_less_or_equal("KERNEL_VERSION", "2.6.17", "", "apm-wifi-suspendfix", d)}' +RRECOMMENDS_kernel-module-orinoco-cs += '${@base_version_less_or_equal("KERNEL_VERSION", "2.6.17", "", "apm-wifi-suspendfix", d)}' # Allow machines to override this dependency if kernel image files are # not wanted in images as standard RDEPENDS_kernel-base ?= "kernel-image" -- cgit v1.2.3 From 4bf5ce190d1e9ceb1c54b76b956011bd9459f5cc Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 24 Jan 2008 20:09:51 +0000 Subject: libmimedir 0.3.1: Remove DEFAULT_PREFERENCE=1, set -1 due to known bugs. --- packages/libmimedir/libmimedir_0.3.1.bb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/libmimedir/libmimedir_0.3.1.bb b/packages/libmimedir/libmimedir_0.3.1.bb index ff7ec3ec45..2429b798c2 100644 --- a/packages/libmimedir/libmimedir_0.3.1.bb +++ b/packages/libmimedir/libmimedir_0.3.1.bb @@ -3,9 +3,12 @@ SECTION = "libs" PRIORITY = "optional" LICENSE = "LGPL" DEPENDS = "intltool-native" -PR = "r3" +PR = "r4" -DEFAULT_PREFERENCE = "1" +# 0.3.1 has at least 2 known bugs which may lead to data corruption/loss: +# 1. Arbitrary cutting off of NOTE field during parsing. +# 2. Parsing only one value from CATEGORIES field. +DEFAULT_PREFERENCE = "-1" SRC_URI = "http://www.rittau.org/mimedir/${P}.tar.gz \ file://mimedir-duration.diff;patch=1" -- cgit v1.2.3 From 6091d2ecc46b803785791e0e64dcb39878f7bd00 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Fri, 25 Jan 2008 06:59:55 +0000 Subject: slugos-init: Updated leds handling to match latest kernel patches --- packages/slugos-init/files/leds | 62 +++++++++++++++++---------------- packages/slugos-init/slugos-init_4.8.bb | 2 +- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/packages/slugos-init/files/leds b/packages/slugos-init/files/leds index 8043dae682..1beb013c5f 100644 --- a/packages/slugos-init/files/leds +++ b/packages/slugos-init/files/leds @@ -12,17 +12,9 @@ leds) ;; esac # -# led_set led-dir off|on|slow|fast|panic|blink|flash|user|* +# led_set led-dir off|on|slow|fast|panic|blink|flash|* # set the given LED (expressed as a directory) to the -# given status. USER_LED may be set to indicate how to -# handle the 'user' setting. -led_user_default(){ - case "$(machine)" in - nslu2) echo -n "cpu-idle";; - nas100d) echo -n "on";; - *) echo -n "cpu";; - esac -} +# given status. # led_set(){ local setting @@ -30,15 +22,6 @@ led_set(){ if test -d "$1" then setting="$2" - case "$setting" in - user) if test -n "$USER_LED" - then - setting="$USER_LED" - else - setting="$(led_user_default)" - fi;; - esac - case "$setting" in off|on) echo -n none @@ -66,11 +49,6 @@ led_set(){ panic) echo -n 3000;; esac >"$1/delay_off";; - cpu-idle) echo -n cpu - # these settings work well on NSLU2 - echo -n on >"$1/idle" - echo -n flash >"$1/active";; - *) echo -n "$setting";; esac >"$1/trigger" else @@ -129,6 +107,28 @@ sysled_ready(){ led_set "$1/ready" "$ready" } # +# the cases for one blue flashing LED (just power) +sysled_power(){ + local power + # expect dir [boot](system|user) [error|panic] + case "$3" in + error) power=off;; + panic) power=off;; + *) case "$2" in + bootsystem) power=off;; # blinking + system) power=off;; # blinking + bootuser) power=on;; + user) power=on;; + bootsingleuser) power=off;; # blinking + singleuser) power=off;; # blinking + bootshutdown) power=off;; # blinking + shutdown) power=off;; # blinking + esac;; + esac + + led_set "$1/power" "$power" +} +# sysled(){ local mp st boot isst mp=/sys @@ -153,7 +153,7 @@ sysled(){ mp=/mnt fi # - # check for the 'ready' LED - otherwise do nothing + # check for the 'ready' LED - otherwise check for a 'power' LED if test -d "$mp/class/leds/ready" then if test -d "$mp/class/leds/status" @@ -162,6 +162,11 @@ sysled(){ else sysled_ready "$mp/class/leds" $boot"$@" fi + else + if test -d "$mp/class/leds/power" + then + sysled_power "$mp/class/leds" $boot"$@" + fi fi # # clean up @@ -200,11 +205,8 @@ leds_help(){ echo " the new state. 'error' or 'panic' means a (potentially)" >&2 echo " recoverable error or an unrecoverable error ('panic') has" >&2 echo " occured." >&2 - echo " off|on|slow|fast|panic|blink|flash|user|cpu|cpu-idle" >&2 - echo " set the named led to the given display, an arbitrary led" >&2 - echo " trigger may be given. 'user' will use the default specified" >&2 - echo " in USER_LED from /etc/default/rcS, if not specified a cpu" >&2 - echo " activity setting appropriate to the machine is selected" >&2 + echo " off|on|slow|fast|panic|blink|flash" >&2 + echo " set the named led to the given display." >&2 echo " beep {args}" >&2 echo " if possible cause the machine to emit a beep" >&2 } diff --git a/packages/slugos-init/slugos-init_4.8.bb b/packages/slugos-init/slugos-init_4.8.bb index 49c3e1fee6..2405d8d080 100644 --- a/packages/slugos-init/slugos-init_4.8.bb +++ b/packages/slugos-init/slugos-init_4.8.bb @@ -4,7 +4,7 @@ PRIORITY = "required" LICENSE = "GPL" DEPENDS = "base-files devio" RDEPENDS = "busybox devio" -PR = "r0" +PR = "r1" SRC_URI = "file://boot/flash \ file://boot/disk \ -- cgit v1.2.3 From 809c7ec119ba02d618fbe2026d162cd9bb9b054d Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Fri, 25 Jan 2008 07:07:00 +0000 Subject: task-slugos: Enabled IDE modules for the rootfs to match the modulefunctions script --- packages/tasks/task-slugos.bb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/tasks/task-slugos.bb b/packages/tasks/task-slugos.bb index 4b8fde02c0..bdcfcf7cd3 100644 --- a/packages/tasks/task-slugos.bb +++ b/packages/tasks/task-slugos.bb @@ -6,7 +6,7 @@ DESCRIPTION = "Task packages for the SlugOS distribution" HOMEPAGE = "http://www.nslu2-linux.org" LICENSE = "MIT" -PR = "r15" +PR = "r16" PACKAGE_ARCH = "${MACHINE_ARCH}" ALLOW_EMPTY = "1" @@ -84,8 +84,10 @@ kernel-module-uhci-hcd \ " # Add modules required for IDE support -# SLUGOS_STANDARD_RRECOMMENDS += "\ -# " +SLUGOS_STANDARD_RRECOMMENDS += "\ +kernel-module-libata \ +kernel-module-pata-artop \ +" # Add modules required for Network support SLUGOS_STANDARD_RRECOMMENDS += "\ @@ -104,8 +106,6 @@ kernel-module-via-velocity \ # kernel-module-isofs \ # kernel-module-udf \ # kernel-module-loop \ -# kernel-module-libata \ -# kernel-module-pata-artop \ # kernel-module-netconsole \ # wpa-supplicant \ # zd1211-firmware kernel-module-zd1211rw \ -- cgit v1.2.3 From 9942a8c3c0baa09c969ea3f58dac4a1d66e0bb3a Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Fri, 25 Jan 2008 09:28:35 +0000 Subject: linux-rp: update 2.6.24-rc8 to final release --- .../linux-rp-2.6.23+2.6.24-rc8/.mtn2git_empty | 0 .../binutils-buildid-arm.patch | 16 - .../connectplus-prevent-oops-HACK.patch | 17 - .../connectplus-remove-ide-HACK.patch | 12 - .../linux-rp-2.6.23+2.6.24-rc8/defconfig-akita | 1740 - .../linux-rp-2.6.23+2.6.24-rc8/defconfig-bootcdx86 | 1994 -- .../linux-rp-2.6.23+2.6.24-rc8/defconfig-c7x0 | 1746 - .../linux-rp-2.6.23+2.6.24-rc8/defconfig-collie | 1436 - .../defconfig-htcuniversal | 1307 - .../linux-rp-2.6.23+2.6.24-rc8/defconfig-hx2000 | 1733 - .../linux-rp-2.6.23+2.6.24-rc8/defconfig-poodle | 1756 - .../linux-rp-2.6.23+2.6.24-rc8/defconfig-qemuarm | 1582 - .../linux-rp-2.6.23+2.6.24-rc8/defconfig-qemux86 | 1993 -- .../linux-rp-2.6.23+2.6.24-rc8/defconfig-spitz | 1740 - .../linux-rp-2.6.23+2.6.24-rc8/defconfig-zylonite | 1740 - .../hostap-monitor-mode.patch | 209 - .../linux-rp-2.6.23+2.6.24-rc8/htcuni-acx.patch | 33527 ------------------- .../linux/linux-rp-2.6.23+2.6.24-rc8/htcuni.patch | 7928 ----- .../pxa-serial-hack.patch | 90 - .../pxa_fb_overlay.patch | 26 - ...t-for-non-standard-xtals-to-16c950-driver.patch | 155 - .../linux-rp-2.6.23+2.6.24-rc8/squashfs3.3.patch | 4234 --- .../versatile-armv6.patch | 19 - .../linux-rp-2.6.23+2.6.24-rc8/zylonite-boot.patch | 45 - packages/linux/linux-rp-2.6.24/.mtn2git_empty | 0 .../linux-rp-2.6.24/binutils-buildid-arm.patch | 16 + .../connectplus-prevent-oops-HACK.patch | 17 + .../connectplus-remove-ide-HACK.patch | 12 + packages/linux/linux-rp-2.6.24/defconfig-akita | 1740 + packages/linux/linux-rp-2.6.24/defconfig-bootcdx86 | 1994 ++ packages/linux/linux-rp-2.6.24/defconfig-c7x0 | 1746 + packages/linux/linux-rp-2.6.24/defconfig-collie | 1436 + .../linux/linux-rp-2.6.24/defconfig-htcuniversal | 1307 + packages/linux/linux-rp-2.6.24/defconfig-hx2000 | 1733 + packages/linux/linux-rp-2.6.24/defconfig-poodle | 1756 + packages/linux/linux-rp-2.6.24/defconfig-qemuarm | 1582 + packages/linux/linux-rp-2.6.24/defconfig-qemux86 | 1993 ++ packages/linux/linux-rp-2.6.24/defconfig-spitz | 1740 + packages/linux/linux-rp-2.6.24/defconfig-zylonite | 1740 + .../linux-rp-2.6.24/hostap-monitor-mode.patch | 209 + packages/linux/linux-rp-2.6.24/htcuni-acx.patch | 33527 +++++++++++++++++++ packages/linux/linux-rp-2.6.24/htcuni.patch | 7928 +++++ .../linux/linux-rp-2.6.24/pxa-serial-hack.patch | 90 + .../linux/linux-rp-2.6.24/pxa_fb_overlay.patch | 26 + ...t-for-non-standard-xtals-to-16c950-driver.patch | 155 + packages/linux/linux-rp-2.6.24/squashfs3.3.patch | 4234 +++ .../linux/linux-rp-2.6.24/versatile-armv6.patch | 19 + packages/linux/linux-rp-2.6.24/zylonite-boot.patch | 45 + packages/linux/linux-rp_2.6.23+2.6.24-rc8.bb | 146 - packages/linux/linux-rp_2.6.24.bb | 146 + 50 files changed, 65191 insertions(+), 65191 deletions(-) delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/.mtn2git_empty delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/binutils-buildid-arm.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/connectplus-prevent-oops-HACK.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/connectplus-remove-ide-HACK.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-akita delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-bootcdx86 delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-c7x0 delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-collie delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-htcuniversal delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-hx2000 delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-poodle delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-qemuarm delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-qemux86 delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-spitz delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-zylonite delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/hostap-monitor-mode.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/htcuni-acx.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/htcuni.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/pxa-serial-hack.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/pxa_fb_overlay.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/squashfs3.3.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/versatile-armv6.patch delete mode 100644 packages/linux/linux-rp-2.6.23+2.6.24-rc8/zylonite-boot.patch create mode 100644 packages/linux/linux-rp-2.6.24/.mtn2git_empty create mode 100644 packages/linux/linux-rp-2.6.24/binutils-buildid-arm.patch create mode 100644 packages/linux/linux-rp-2.6.24/connectplus-prevent-oops-HACK.patch create mode 100644 packages/linux/linux-rp-2.6.24/connectplus-remove-ide-HACK.patch create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-akita create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-bootcdx86 create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-c7x0 create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-collie create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-htcuniversal create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-hx2000 create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-poodle create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-qemuarm create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-qemux86 create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-spitz create mode 100644 packages/linux/linux-rp-2.6.24/defconfig-zylonite create mode 100644 packages/linux/linux-rp-2.6.24/hostap-monitor-mode.patch create mode 100644 packages/linux/linux-rp-2.6.24/htcuni-acx.patch create mode 100644 packages/linux/linux-rp-2.6.24/htcuni.patch create mode 100644 packages/linux/linux-rp-2.6.24/pxa-serial-hack.patch create mode 100644 packages/linux/linux-rp-2.6.24/pxa_fb_overlay.patch create mode 100644 packages/linux/linux-rp-2.6.24/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch create mode 100644 packages/linux/linux-rp-2.6.24/squashfs3.3.patch create mode 100644 packages/linux/linux-rp-2.6.24/versatile-armv6.patch create mode 100644 packages/linux/linux-rp-2.6.24/zylonite-boot.patch delete mode 100644 packages/linux/linux-rp_2.6.23+2.6.24-rc8.bb create mode 100644 packages/linux/linux-rp_2.6.24.bb diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/.mtn2git_empty b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/binutils-buildid-arm.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/binutils-buildid-arm.patch deleted file mode 100644 index 68e35e89e1..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/binutils-buildid-arm.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- - arch/arm/kernel/vmlinux.lds.S | 1 + - 1 file changed, 1 insertion(+) - -Index: linux-2.6.22/arch/arm/kernel/vmlinux.lds.S -=================================================================== ---- linux-2.6.22.orig/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:32:29.000000000 +0200 -+++ linux-2.6.22/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:33:42.000000000 +0200 -@@ -94,6 +94,7 @@ - TEXT_TEXT - SCHED_TEXT - LOCK_TEXT -+ *(.note.*) - #ifdef CONFIG_MMU - *(.fixup) - #endif diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/connectplus-prevent-oops-HACK.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/connectplus-prevent-oops-HACK.patch deleted file mode 100644 index b5439c62e7..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/connectplus-prevent-oops-HACK.patch +++ /dev/null @@ -1,17 +0,0 @@ -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.23+2.6.24-rc8/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/connectplus-remove-ide-HACK.patch deleted file mode 100644 index 4414b21191..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/connectplus-remove-ide-HACK.patch +++ /dev/null @@ -1,12 +0,0 @@ -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.23+2.6.24-rc8/defconfig-akita b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-akita deleted file mode 100644 index 381fafbb25..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-akita +++ /dev/null @@ -1,1740 +0,0 @@ -# -# 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=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=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 - -# -# 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=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y -# CONFIG_FB_PXA_PARAMETERS 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.23+2.6.24-rc8/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-bootcdx86 deleted file mode 100644 index 0d7c289f37..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-bootcdx86 +++ /dev/null @@ -1,1994 +0,0 @@ -# -# 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=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_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=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -CONFIG_FB_MODE_HELPERS=y -# CONFIG_FB_TILEBLITTING 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.23+2.6.24-rc8/defconfig-c7x0 b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-c7x0 deleted file mode 100644 index a77f3f519e..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-c7x0 +++ /dev/null @@ -1,1746 +0,0 @@ -# -# 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=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=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 - -# -# 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=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -# CONFIG_FB_PXA 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.23+2.6.24-rc8/defconfig-collie b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-collie deleted file mode 100644 index 07258b44ed..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-collie +++ /dev/null @@ -1,1436 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.24-rc8 -# Mon Jan 21 21:35:18 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=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=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=y - -# -# 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=y -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -CONFIG_FB_SA1100=y -# CONFIG_FB_S1D13XXX is not set -# CONFIG_FB_VIRTUAL is not set -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.23+2.6.24-rc8/defconfig-htcuniversal b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-htcuniversal deleted file mode 100644 index 4be1331776..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-htcuniversal +++ /dev/null @@ -1,1307 +0,0 @@ -# -# 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=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=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 - -# -# 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=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -# CONFIG_FB_PXA_OVERLAY 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.23+2.6.24-rc8/defconfig-hx2000 b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-hx2000 deleted file mode 100644 index f9317ba2a2..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-hx2000 +++ /dev/null @@ -1,1733 +0,0 @@ -# -# 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=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=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=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y -# CONFIG_FB_PXA_PARAMETERS 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.23+2.6.24-rc8/defconfig-poodle b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-poodle deleted file mode 100644 index 6953b2af5b..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-poodle +++ /dev/null @@ -1,1756 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.24-rc8 -# Sun Jan 20 22:47:47 2008 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_TIME=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set -CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_ARCH_MTD_XIP=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# General setup -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=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 - -# -# 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=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y -# CONFIG_FB_PXA_PARAMETERS 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.23+2.6.24-rc8/defconfig-qemuarm b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-qemuarm deleted file mode 100644 index bf96d2aff7..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-qemuarm +++ /dev/null @@ -1,1582 +0,0 @@ -# -# 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=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=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=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_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.23+2.6.24-rc8/defconfig-qemux86 b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-qemux86 deleted file mode 100644 index 39e236ae8b..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-qemux86 +++ /dev/null @@ -1,1993 +0,0 @@ -# -# 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=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_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=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -CONFIG_FB_MODE_HELPERS=y -# CONFIG_FB_TILEBLITTING 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.23+2.6.24-rc8/defconfig-spitz b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-spitz deleted file mode 100644 index cc9f6e6988..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-spitz +++ /dev/null @@ -1,1740 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.24-rc8 -# Sun Jan 20 18:32:23 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=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=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=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/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_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 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=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 - -# -# 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=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=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_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 - -# -# 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=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -CONFIG_FB_PXA_LCD_QVGA=y -# CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y -# CONFIG_FB_PXA_PARAMETERS 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=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=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_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=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.23+2.6.24-rc8/defconfig-zylonite b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-zylonite deleted file mode 100644 index c813b1a0f5..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/defconfig-zylonite +++ /dev/null @@ -1,1740 +0,0 @@ -# -# 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=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=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=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=y -# CONFIG_FB_PXA_LCD_QVGA 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.23+2.6.24-rc8/hostap-monitor-mode.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/hostap-monitor-mode.patch deleted file mode 100644 index 641fd19e50..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/hostap-monitor-mode.patch +++ /dev/null @@ -1,209 +0,0 @@ -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.23+2.6.24-rc8/htcuni-acx.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/htcuni-acx.patch deleted file mode 100644 index 1ccebddc8d..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/htcuni-acx.patch +++ /dev/null @@ -1,33527 +0,0 @@ ---- - 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.23+2.6.24-rc8/htcuni.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/htcuni.patch deleted file mode 100644 index f462650566..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/htcuni.patch +++ /dev/null @@ -1,7928 +0,0 @@ ---- - 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.23/arch/arm/mach-pxa/htcuniversal/Makefile -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/Makefile 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/drivers/mfd/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/mfd/Kconfig 2008-01-20 18:59:38.000000000 +0000 -+++ linux-2.6.23/drivers/mfd/Kconfig 2008-01-20 18:59:46.000000000 +0000 -@@ -21,6 +21,16 @@ config MFD_TSC2101 - 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.23/drivers/mfd/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/mfd/Makefile 2008-01-20 18:59:38.000000000 +0000 -+++ linux-2.6.23/drivers/mfd/Makefile 2008-01-20 18:59:46.000000000 +0000 -@@ -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_MCP) += mcp-core.o -Index: linux-2.6.23/drivers/mfd/asic3_base.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/mfd/asic3_base.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/drivers/mfd/soc-core.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/mfd/soc-core.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/drivers/mfd/soc-core.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/mfd/soc-core.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/arch-pxa/clock.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/clock.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/arch-pxa/htcuniversal-asic.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-asic.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/arch-pxa/htcuniversal-gpio.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-gpio.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/arch-pxa/htcuniversal-init.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-init.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/arch-pxa/htcuniversal.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal.h 2008-01-20 18:59:46.000000000 +0000 -@@ -0,0 +1,3 @@ -+#include -+ -+#define HTCUNIVERSAL_ASIC3_IRQ_BASE IRQ_BOARD_START -Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-pm_ll.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-pm_ll.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/hardware/asic3_keys.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/hardware/asic3_keys.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/hardware/asic3_leds.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/hardware/asic3_leds.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/hardware/ipaq-asic3.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/hardware/ipaq-asic3.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/linux/gpiodev.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/linux/gpiodev.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/linux/input_pda.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/linux/input_pda.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/linux/soc/asic3_base.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/linux/soc/asic3_base.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/linux/soc/tmio_mmc.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/linux/soc/tmio_mmc.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/arch-pxa/pxa-regs.h -=================================================================== ---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2008-01-20 18:59:40.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2008-01-20 18:59:46.000000000 +0000 -@@ -2058,6 +2058,8 @@ - #define LDCMD_SOFINT (1 << 22) - #define LDCMD_EOFINT (1 << 21) - -+#define LCCR4_13M_PCD_EN (1<<25) /* 13M PCD enable */ -+#define LCCR4_PCDDIV (1<<31) /* PCD selection */ - - #define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */ - #define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */ -Index: linux-2.6.23/drivers/mmc/host/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/mmc/host/Kconfig 2008-01-20 18:59:18.000000000 +0000 -+++ linux-2.6.23/drivers/mmc/host/Kconfig 2008-01-20 18:59:46.000000000 +0000 -@@ -130,3 +130,9 @@ config MMC_SPI - - 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.23/drivers/mmc/host/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/mmc/host/Makefile 2008-01-20 18:59:18.000000000 +0000 -+++ linux-2.6.23/drivers/mmc/host/Makefile 2008-01-20 21:12:10.000000000 +0000 -@@ -13,6 +13,7 @@ obj-$(CONFIG_MMC_SDHCI) += sdhci.o - 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.23/drivers/mmc/host/asic3_mmc.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/mmc/host/asic3_mmc.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/drivers/mmc/host/asic3_mmc.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/mmc/host/asic3_mmc.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/drivers/input/keyboard/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/input/keyboard/Makefile 2008-01-20 18:59:16.000000000 +0000 -+++ linux-2.6.23/drivers/input/keyboard/Makefile 2008-01-20 21:11:40.000000000 +0000 -@@ -15,6 +15,7 @@ obj-$(CONFIG_KEYBOARD_NEWTON) += newton - 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_HIL) += hil_kbd.o - obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o - obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o -Index: linux-2.6.23/drivers/input/keyboard/asic3_keys.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/drivers/input/keyboard/asic3_keys.c 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/include/asm-arm/arch-pxa/irqs.h -=================================================================== ---- linux-2.6.23.orig/include/asm-arm/arch-pxa/irqs.h 2008-01-20 18:59:28.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/irqs.h 2008-01-20 18:59:46.000000000 +0000 -@@ -182,6 +182,8 @@ - defined(CONFIG_MACH_LOGICPD_PXA270) || \ - defined(CONFIG_MACH_MAINSTONE) - #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.23/include/linux/ioport.h -=================================================================== ---- linux-2.6.23.orig/include/linux/ioport.h 2008-01-20 18:59:31.000000000 +0000 -+++ linux-2.6.23/include/linux/ioport.h 2008-01-20 18:59:46.000000000 +0000 -@@ -56,6 +56,7 @@ struct resource_list { - #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.23/include/asm-arm/arch-pxa/serial.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23/include/asm-arm/arch-pxa/serial.h 2008-01-20 18:59:46.000000000 +0000 -@@ -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.23/drivers/serial/pxa.c -=================================================================== ---- linux-2.6.23.orig/drivers/serial/pxa.c 2008-01-20 18:59:23.000000000 +0000 -+++ linux-2.6.23/drivers/serial/pxa.c 2008-01-20 18:59:46.000000000 +0000 -@@ -47,6 +47,7 @@ - #include - #include - #include -+#include - #include - - -@@ -60,6 +61,14 @@ struct uart_pxa_port { - 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 @@ static int serial_pxa_startup(struct uar - 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 @@ static int serial_pxa_startup(struct uar - (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 @@ static void serial_pxa_shutdown(struct u - 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 @@ static void serial_pxa_shutdown(struct u - 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.23/arch/arm/mach-pxa/generic.c -=================================================================== ---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c 2008-01-20 18:59:09.000000000 +0000 -+++ linux-2.6.23/arch/arm/mach-pxa/generic.c 2008-01-20 18:59:46.000000000 +0000 -@@ -38,6 +38,7 @@ - #include - #include - #include -+#include - - #include "devices.h" - #include "generic.h" -@@ -412,6 +413,18 @@ struct platform_device pxa_device_hwuart - .num_resources = ARRAY_SIZE(pxa_resource_hwuart), - }; - -+void __init pxa_set_ffuart_info(struct platform_pxa_serial_funcs *info) -+{ -+ pxa_device_ffuart.dev.platform_data = info; -+} -+EXPORT_SYMBOL(pxa_set_ffuart_info); -+ -+void __init pxa_set_btuart_info(struct platform_pxa_serial_funcs *info) -+{ -+ pxa_device_btuart.dev.platform_data = info; -+} -+EXPORT_SYMBOL(pxa_set_btuart_info); -+ - static struct resource pxai2c_resources[] = { - { - .start = 0x40301680, -Index: linux-2.6.23/drivers/leds/Makefile -=================================================================== ---- linux-2.6.23.orig/drivers/leds/Makefile 2008-01-20 18:59:17.000000000 +0000 -+++ linux-2.6.23/drivers/leds/Makefile 2008-01-20 21:10:45.000000000 +0000 -@@ -15,6 +15,7 @@ obj-$(CONFIG_LEDS_AMS_DELTA) += leds-am - 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.23/drivers/input/keyboard/Kconfig -=================================================================== ---- linux-2.6.23.orig/drivers/input/keyboard/Kconfig 2008-01-20 18:59:16.000000000 +0000 -+++ linux-2.6.23/drivers/input/keyboard/Kconfig 2008-01-20 18:59:46.000000000 +0000 -@@ -293,4 +293,11 @@ config KEYBOARD_BFIN - To compile this driver as a module, choose M here: the - module will be called bf54x-keys. - -+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. -+ - endif diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/pxa-serial-hack.patch deleted file mode 100644 index bf20f46a05..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/pxa-serial-hack.patch +++ /dev/null @@ -1,90 +0,0 @@ ---- - 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.23+2.6.24-rc8/pxa_fb_overlay.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/pxa_fb_overlay.patch deleted file mode 100644 index 49c59b3275..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/pxa_fb_overlay.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- - 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.23+2.6.24-rc8/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch deleted file mode 100644 index b513ba1466..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch +++ /dev/null @@ -1,155 +0,0 @@ - -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.23+2.6.24-rc8/squashfs3.3.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/squashfs3.3.patch deleted file mode 100644 index cb9a5c49e4..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/squashfs3.3.patch +++ /dev/null @@ -1,4234 +0,0 @@ -diff -x .gitignore -Nurp linux-2.6.24/fs/Kconfig linux-2.6.24-squashfs3.3/fs/Kconfig ---- linux-2.6.24/fs/Kconfig 2007-10-25 17:41:45.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/fs/Kconfig 2007-11-01 05:06:25.000000000 +0000 -@@ -1396,6 +1396,56 @@ config CRAMFS - - If unsure, say N. - -+config SQUASHFS -+ tristate "SquashFS 3.3 - Squashed file system support" -+ select ZLIB_INFLATE -+ help -+ Saying Y here includes support for SquashFS 3.3 (a Compressed -+ Read-Only File System). Squashfs is a highly compressed read-only -+ filesystem for Linux. It uses zlib compression to compress both -+ files, inodes and directories. Inodes in the system are very small -+ and all blocks are packed to minimise data overhead. Block sizes -+ greater than 4K are supported up to a maximum of 1 Mbytes (default -+ block size 128K). SquashFS 3.3 supports 64 bit filesystems and files -+ (larger than 4GB), full uid/gid information, hard links and timestamps. -+ -+ Squashfs is intended for general read-only filesystem use, for -+ archival use (i.e. in cases where a .tar.gz file may be used), and in -+ embedded systems where low overhead is needed. Further information -+ and filesystem tools are available from http://squashfs.sourceforge.net. -+ -+ If you want to compile this as a module ( = code which can be -+ inserted in and removed from the running kernel whenever you want), -+ say M here and read . The module -+ will be called squashfs. Note that the root file system (the one -+ containing the directory /) cannot be compiled as a module. -+ -+ If unsure, say N. -+ -+config SQUASHFS_EMBEDDED -+ -+ bool "Additional option for memory-constrained systems" -+ depends on SQUASHFS -+ default n -+ help -+ Saying Y here allows you to specify cache size. -+ -+ If unsure, say N. -+ -+config SQUASHFS_FRAGMENT_CACHE_SIZE -+ int "Number of fragments cached" if SQUASHFS_EMBEDDED -+ depends on SQUASHFS -+ default "3" -+ help -+ By default SquashFS caches the last 3 fragments read from -+ the filesystem. Increasing this amount may mean SquashFS -+ has to re-read fragments less often from disk, at the expense -+ of extra system memory. Decreasing this amount will mean -+ SquashFS uses less memory at the expense of extra reads from disk. -+ -+ Note there must be at least one cached fragment. Anything -+ much more than three will probably not make much difference. -+ - config VXFS_FS - tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)" - depends on BLOCK -diff -x .gitignore -Nurp linux-2.6.24/fs/Makefile linux-2.6.24-squashfs3.3/fs/Makefile ---- linux-2.6.24/fs/Makefile 2007-10-25 17:41:45.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/fs/Makefile 2007-11-01 05:08:09.000000000 +0000 -@@ -72,6 +72,7 @@ obj-$(CONFIG_JBD) += jbd/ - obj-$(CONFIG_JBD2) += jbd2/ - obj-$(CONFIG_EXT2_FS) += ext2/ - obj-$(CONFIG_CRAMFS) += cramfs/ -+obj-$(CONFIG_SQUASHFS) += squashfs/ - obj-y += ramfs/ - obj-$(CONFIG_HUGETLBFS) += hugetlbfs/ - obj-$(CONFIG_CODA_FS) += coda/ -diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/inode.c linux-2.6.24-squashfs3.3/fs/squashfs/inode.c ---- linux-2.6.24/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/fs/squashfs/inode.c 2007-11-01 05:05:00.000000000 +0000 -@@ -0,0 +1,2192 @@ -+/* -+ * Squashfs - a compressed read only filesystem for Linux -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * inode.c -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "squashfs.h" -+ -+int squashfs_cached_blks; -+ -+static void vfs_read_inode(struct inode *i); -+static struct dentry *squashfs_get_parent(struct dentry *child); -+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode); -+static int squashfs_statfs(struct dentry *, struct kstatfs *); -+static int squashfs_symlink_readpage(struct file *file, struct page *page); -+static long long read_blocklist(struct inode *inode, int index, -+ int readahead_blks, char *block_list, -+ unsigned short **block_p, unsigned int *bsize); -+static int squashfs_readpage(struct file *file, struct page *page); -+static int squashfs_readdir(struct file *, void *, filldir_t); -+static struct dentry *squashfs_lookup(struct inode *, struct dentry *, -+ struct nameidata *); -+static int squashfs_remount(struct super_block *s, int *flags, char *data); -+static void squashfs_put_super(struct super_block *); -+static int squashfs_get_sb(struct file_system_type *,int, const char *, void *, -+ struct vfsmount *); -+static struct inode *squashfs_alloc_inode(struct super_block *sb); -+static void squashfs_destroy_inode(struct inode *inode); -+static int init_inodecache(void); -+static void destroy_inodecache(void); -+ -+static struct file_system_type squashfs_fs_type = { -+ .owner = THIS_MODULE, -+ .name = "squashfs", -+ .get_sb = squashfs_get_sb, -+ .kill_sb = kill_block_super, -+ .fs_flags = FS_REQUIRES_DEV -+}; -+ -+static const unsigned char squashfs_filetype_table[] = { -+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK -+}; -+ -+static struct super_operations squashfs_super_ops = { -+ .alloc_inode = squashfs_alloc_inode, -+ .destroy_inode = squashfs_destroy_inode, -+ .statfs = squashfs_statfs, -+ .put_super = squashfs_put_super, -+ .remount_fs = squashfs_remount -+}; -+ -+static struct super_operations squashfs_export_super_ops = { -+ .alloc_inode = squashfs_alloc_inode, -+ .destroy_inode = squashfs_destroy_inode, -+ .statfs = squashfs_statfs, -+ .put_super = squashfs_put_super, -+ .read_inode = vfs_read_inode -+}; -+ -+static struct export_operations squashfs_export_ops = { -+ .get_parent = squashfs_get_parent -+}; -+ -+SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = { -+ .readpage = squashfs_symlink_readpage -+}; -+ -+SQSH_EXTERN const struct address_space_operations squashfs_aops = { -+ .readpage = squashfs_readpage -+}; -+ -+static const struct file_operations squashfs_dir_ops = { -+ .read = generic_read_dir, -+ .readdir = squashfs_readdir -+}; -+ -+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = { -+ .lookup = squashfs_lookup -+}; -+ -+ -+static struct buffer_head *get_block_length(struct super_block *s, -+ int *cur_index, int *offset, int *c_byte) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ unsigned short temp; -+ struct buffer_head *bh; -+ -+ if (!(bh = sb_bread(s, *cur_index))) -+ goto out; -+ -+ if (msblk->devblksize - *offset == 1) { -+ if (msblk->swap) -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ else -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ brelse(bh); -+ if (!(bh = sb_bread(s, ++(*cur_index)))) -+ goto out; -+ if (msblk->swap) -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ bh->b_data); -+ else -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ bh->b_data); -+ *c_byte = temp; -+ *offset = 1; -+ } else { -+ if (msblk->swap) { -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ (bh->b_data + *offset + 1)); -+ } else { -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ (bh->b_data + *offset + 1)); -+ } -+ *c_byte = temp; -+ *offset += 2; -+ } -+ -+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) { -+ if (*offset == msblk->devblksize) { -+ brelse(bh); -+ if (!(bh = sb_bread(s, ++(*cur_index)))) -+ goto out; -+ *offset = 0; -+ } -+ if (*((unsigned char *) (bh->b_data + *offset)) != -+ SQUASHFS_MARKER_BYTE) { -+ ERROR("Metadata block marker corrupt @ %x\n", -+ *cur_index); -+ brelse(bh); -+ goto out; -+ } -+ (*offset)++; -+ } -+ return bh; -+ -+out: -+ return NULL; -+} -+ -+ -+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer, -+ long long index, unsigned int length, -+ long long *next_index, int srclength) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ struct buffer_head **bh; -+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1); -+ unsigned int cur_index = index >> msblk->devblksize_log2; -+ int bytes, avail_bytes, b = 0, k = 0; -+ unsigned int compressed; -+ unsigned int c_byte = length; -+ -+ bh = kmalloc(((sblk->block_size >> msblk->devblksize_log2) + 1) * -+ sizeof(struct buffer_head *), GFP_KERNEL); -+ if (bh == NULL) -+ goto read_failure; -+ -+ if (c_byte) { -+ bytes = msblk->devblksize - offset; -+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte); -+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte); -+ -+ TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index, -+ compressed ? "" : "un", (unsigned int) c_byte, srclength); -+ -+ if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used) -+ goto read_failure; -+ -+ bh[0] = sb_getblk(s, cur_index); -+ if (bh[0] == NULL) -+ goto block_release; -+ -+ for (b = 1; bytes < c_byte; b++) { -+ bh[b] = sb_getblk(s, ++cur_index); -+ if (bh[b] == NULL) -+ goto block_release; -+ bytes += msblk->devblksize; -+ } -+ ll_rw_block(READ, b, bh); -+ } else { -+ if (index < 0 || (index + 2) > sblk->bytes_used) -+ goto read_failure; -+ -+ bh[0] = get_block_length(s, &cur_index, &offset, &c_byte); -+ if (bh[0] == NULL) -+ goto read_failure; -+ -+ bytes = msblk->devblksize - offset; -+ compressed = SQUASHFS_COMPRESSED(c_byte); -+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte); -+ -+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed -+ ? "" : "un", (unsigned int) c_byte); -+ -+ if (c_byte > srclength || (index + c_byte) > sblk->bytes_used) -+ goto read_failure; -+ -+ for (b = 1; bytes < c_byte; b++) { -+ bh[b] = sb_getblk(s, ++cur_index); -+ if (bh[b] == NULL) -+ goto block_release; -+ bytes += msblk->devblksize; -+ } -+ ll_rw_block(READ, b - 1, bh + 1); -+ } -+ -+ if (compressed) { -+ int zlib_err = 0; -+ -+ /* -+ * uncompress block -+ */ -+ -+ mutex_lock(&msblk->read_data_mutex); -+ -+ msblk->stream.next_out = buffer; -+ msblk->stream.avail_out = srclength; -+ -+ for (bytes = 0; k < b; k++) { -+ avail_bytes = min(c_byte - bytes, msblk->devblksize - offset); -+ -+ wait_on_buffer(bh[k]); -+ if (!buffer_uptodate(bh[k])) -+ goto release_mutex; -+ -+ msblk->stream.next_in = bh[k]->b_data + offset; -+ msblk->stream.avail_in = avail_bytes; -+ -+ if (k == 0) { -+ zlib_err = zlib_inflateInit(&msblk->stream); -+ if (zlib_err != Z_OK) { -+ ERROR("zlib_inflateInit returned unexpected result 0x%x," -+ " srclength %d\n", zlib_err, srclength); -+ goto release_mutex; -+ } -+ -+ if (avail_bytes == 0) { -+ offset = 0; -+ brelse(bh[k]); -+ continue; -+ } -+ } -+ -+ zlib_err = zlib_inflate(&msblk->stream, Z_NO_FLUSH); -+ if (zlib_err != Z_OK && zlib_err != Z_STREAM_END) { -+ ERROR("zlib_inflate returned unexpected result 0x%x," -+ " srclength %d, avail_in %d, avail_out %d\n", zlib_err, -+ srclength, msblk->stream.avail_in, msblk->stream.avail_out); -+ goto release_mutex; -+ } -+ -+ bytes += avail_bytes; -+ offset = 0; -+ brelse(bh[k]); -+ } -+ -+ if (zlib_err != Z_STREAM_END) -+ goto release_mutex; -+ -+ zlib_err = zlib_inflateEnd(&msblk->stream); -+ if (zlib_err != Z_OK) { -+ ERROR("zlib_inflateEnd returned unexpected result 0x%x," -+ " srclength %d\n", zlib_err, srclength); -+ goto release_mutex; -+ } -+ bytes = msblk->stream.total_out; -+ mutex_unlock(&msblk->read_data_mutex); -+ } else { -+ int i; -+ -+ for(i = 0; i < b; i++) { -+ wait_on_buffer(bh[i]); -+ if (!buffer_uptodate(bh[i])) -+ goto block_release; -+ } -+ -+ for (bytes = 0; k < b; k++) { -+ avail_bytes = min(c_byte - bytes, msblk->devblksize - offset); -+ -+ memcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes); -+ bytes += avail_bytes; -+ offset = 0; -+ brelse(bh[k]); -+ } -+ } -+ -+ if (next_index) -+ *next_index = index + c_byte + (length ? 0 : -+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags) ? 3 : 2)); -+ -+ kfree(bh); -+ return bytes; -+ -+release_mutex: -+ mutex_unlock(&msblk->read_data_mutex); -+ -+block_release: -+ for (; k < b; k++) -+ brelse(bh[k]); -+ -+read_failure: -+ ERROR("sb_bread failed reading block 0x%x\n", cur_index); -+ kfree(bh); -+ return 0; -+} -+ -+ -+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, void *buffer, -+ long long block, unsigned int offset, -+ int length, long long *next_block, -+ unsigned int *next_offset) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ int n, i, bytes, return_length = length; -+ long long next_index; -+ -+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset); -+ -+ while (1) { -+ for (i = 0; i < squashfs_cached_blks; i++) -+ if (msblk->block_cache[i].block == block) -+ break; -+ -+ mutex_lock(&msblk->block_cache_mutex); -+ -+ if (i == squashfs_cached_blks) { -+ /* read inode header block */ -+ if (msblk->unused_cache_blks == 0) { -+ mutex_unlock(&msblk->block_cache_mutex); -+ wait_event(msblk->waitq, msblk->unused_cache_blks); -+ continue; -+ } -+ -+ i = msblk->next_cache; -+ for (n = 0; n < squashfs_cached_blks; n++) { -+ if (msblk->block_cache[i].block != SQUASHFS_USED_BLK) -+ break; -+ i = (i + 1) % squashfs_cached_blks; -+ } -+ -+ msblk->next_cache = (i + 1) % squashfs_cached_blks; -+ -+ if (msblk->block_cache[i].block == SQUASHFS_INVALID_BLK) { -+ msblk->block_cache[i].data = vmalloc(SQUASHFS_METADATA_SIZE); -+ if (msblk->block_cache[i].data == NULL) { -+ ERROR("Failed to allocate cache block\n"); -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto out; -+ } -+ } -+ -+ msblk->block_cache[i].block = SQUASHFS_USED_BLK; -+ msblk->unused_cache_blks --; -+ mutex_unlock(&msblk->block_cache_mutex); -+ -+ msblk->block_cache[i].length = squashfs_read_data(s, -+ msblk->block_cache[i].data, block, 0, &next_index, -+ SQUASHFS_METADATA_SIZE); -+ -+ if (msblk->block_cache[i].length == 0) { -+ ERROR("Unable to read cache block [%llx:%x]\n", block, offset); -+ mutex_lock(&msblk->block_cache_mutex); -+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; -+ msblk->unused_cache_blks ++; -+ smp_mb(); -+ vfree(msblk->block_cache[i].data); -+ wake_up(&msblk->waitq); -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto out; -+ } -+ -+ mutex_lock(&msblk->block_cache_mutex); -+ msblk->block_cache[i].block = block; -+ msblk->block_cache[i].next_index = next_index; -+ msblk->unused_cache_blks ++; -+ smp_mb(); -+ wake_up(&msblk->waitq); -+ TRACE("Read cache block [%llx:%x]\n", block, offset); -+ } -+ -+ if (msblk->block_cache[i].block != block) { -+ mutex_unlock(&msblk->block_cache_mutex); -+ continue; -+ } -+ -+ bytes = msblk->block_cache[i].length - offset; -+ -+ if (bytes < 1) { -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto out; -+ } else if (bytes >= length) { -+ if (buffer) -+ memcpy(buffer, msblk->block_cache[i].data + offset, length); -+ if (msblk->block_cache[i].length - offset == length) { -+ *next_block = msblk->block_cache[i].next_index; -+ *next_offset = 0; -+ } else { -+ *next_block = block; -+ *next_offset = offset + length; -+ } -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto finish; -+ } else { -+ if (buffer) { -+ memcpy(buffer, msblk->block_cache[i].data + offset, bytes); -+ buffer = (char *) buffer + bytes; -+ } -+ block = msblk->block_cache[i].next_index; -+ mutex_unlock(&msblk->block_cache_mutex); -+ length -= bytes; -+ offset = 0; -+ } -+ } -+ -+finish: -+ return return_length; -+out: -+ return 0; -+} -+ -+ -+static int get_fragment_location(struct super_block *s, unsigned int fragment, -+ long long *fragment_start_block, -+ unsigned int *fragment_size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ long long start_block = -+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)]; -+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment); -+ struct squashfs_fragment_entry fragment_entry; -+ -+ if (msblk->swap) { -+ struct squashfs_fragment_entry sfragment_entry; -+ -+ if (!squashfs_get_cached_block(s, &sfragment_entry, start_block, offset, -+ sizeof(sfragment_entry), &start_block, &offset)) -+ goto out; -+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry); -+ } else -+ if (!squashfs_get_cached_block(s, &fragment_entry, start_block, offset, -+ sizeof(fragment_entry), &start_block, &offset)) -+ goto out; -+ -+ *fragment_start_block = fragment_entry.start_block; -+ *fragment_size = fragment_entry.size; -+ -+ return 1; -+ -+out: -+ return 0; -+} -+ -+ -+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, -+ struct squashfs_fragment_cache *fragment) -+{ -+ mutex_lock(&msblk->fragment_mutex); -+ fragment->locked --; -+ if (fragment->locked == 0) { -+ msblk->unused_frag_blks ++; -+ smp_mb(); -+ wake_up(&msblk->fragment_wait_queue); -+ } -+ mutex_unlock(&msblk->fragment_mutex); -+} -+ -+ -+SQSH_EXTERN -+struct squashfs_fragment_cache *get_cached_fragment(struct super_block *s, -+ long long start_block, int length) -+{ -+ int i, n; -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ while (1) { -+ mutex_lock(&msblk->fragment_mutex); -+ -+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS && -+ msblk->fragment[i].block != start_block; i++); -+ -+ if (i == SQUASHFS_CACHED_FRAGMENTS) { -+ if (msblk->unused_frag_blks == 0) { -+ mutex_unlock(&msblk->fragment_mutex); -+ wait_event(msblk->fragment_wait_queue, msblk->unused_frag_blks); -+ continue; -+ } -+ -+ i = msblk->next_fragment; -+ for (n = 0; n < SQUASHFS_CACHED_FRAGMENTS; n++) { -+ if (msblk->fragment[i].locked == 0) -+ break; -+ i = (i + 1) % SQUASHFS_CACHED_FRAGMENTS; -+ } -+ -+ msblk->next_fragment = (msblk->next_fragment + 1) % -+ SQUASHFS_CACHED_FRAGMENTS; -+ -+ if (msblk->fragment[i].data == NULL) { -+ msblk->fragment[i].data = vmalloc(sblk->block_size); -+ if (msblk->fragment[i].data == NULL) { -+ ERROR("Failed to allocate fragment cache block\n"); -+ mutex_unlock(&msblk->fragment_mutex); -+ goto out; -+ } -+ } -+ -+ msblk->unused_frag_blks --; -+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; -+ msblk->fragment[i].locked = 1; -+ mutex_unlock(&msblk->fragment_mutex); -+ -+ msblk->fragment[i].length = squashfs_read_data(s, -+ msblk->fragment[i].data, start_block, length, NULL, -+ sblk->block_size); -+ -+ if (msblk->fragment[i].length == 0) { -+ ERROR("Unable to read fragment cache block [%llx]\n", start_block); -+ msblk->fragment[i].locked = 0; -+ msblk->unused_frag_blks ++; -+ smp_mb(); -+ wake_up(&msblk->fragment_wait_queue); -+ goto out; -+ } -+ -+ mutex_lock(&msblk->fragment_mutex); -+ msblk->fragment[i].block = start_block; -+ TRACE("New fragment %d, start block %lld, locked %d\n", -+ i, msblk->fragment[i].block, msblk->fragment[i].locked); -+ mutex_unlock(&msblk->fragment_mutex); -+ break; -+ } -+ -+ if (msblk->fragment[i].locked == 0) -+ msblk->unused_frag_blks --; -+ msblk->fragment[i].locked++; -+ mutex_unlock(&msblk->fragment_mutex); -+ TRACE("Got fragment %d, start block %lld, locked %d\n", i, -+ msblk->fragment[i].block, msblk->fragment[i].locked); -+ break; -+ } -+ -+ return &msblk->fragment[i]; -+ -+out: -+ return NULL; -+} -+ -+ -+static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, -+ struct squashfs_base_inode_header *inodeb) -+{ -+ i->i_ino = inodeb->inode_number; -+ i->i_mtime.tv_sec = inodeb->mtime; -+ i->i_atime.tv_sec = inodeb->mtime; -+ i->i_ctime.tv_sec = inodeb->mtime; -+ i->i_uid = msblk->uid[inodeb->uid]; -+ i->i_mode = inodeb->mode; -+ i->i_size = 0; -+ -+ if (inodeb->guid == SQUASHFS_GUIDS) -+ i->i_gid = i->i_uid; -+ else -+ i->i_gid = msblk->guid[inodeb->guid]; -+} -+ -+ -+static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ long long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)]; -+ int offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1); -+ squashfs_inode_t inode; -+ -+ TRACE("Entered squashfs_inode_lookup, inode_number = %d\n", ino); -+ -+ if (msblk->swap) { -+ squashfs_inode_t sinode; -+ -+ if (!squashfs_get_cached_block(s, &sinode, start, offset, -+ sizeof(sinode), &start, &offset)) -+ goto out; -+ SQUASHFS_SWAP_INODE_T((&inode), &sinode); -+ } else if (!squashfs_get_cached_block(s, &inode, start, offset, -+ sizeof(inode), &start, &offset)) -+ goto out; -+ -+ TRACE("squashfs_inode_lookup, inode = 0x%llx\n", inode); -+ -+ return inode; -+ -+out: -+ return SQUASHFS_INVALID_BLK; -+} -+ -+ -+static void vfs_read_inode(struct inode *i) -+{ -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino); -+ -+ TRACE("Entered vfs_read_inode\n"); -+ -+ if(inode != SQUASHFS_INVALID_BLK) -+ (msblk->read_inode)(i, inode); -+} -+ -+ -+static struct dentry *squashfs_get_parent(struct dentry *child) -+{ -+ struct inode *i = child->d_inode; -+ struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode); -+ struct dentry *rv; -+ -+ TRACE("Entered squashfs_get_parent\n"); -+ -+ if(parent == NULL) { -+ rv = ERR_PTR(-EACCES); -+ goto out; -+ } -+ -+ rv = d_alloc_anon(parent); -+ if(rv == NULL) -+ rv = ERR_PTR(-ENOMEM); -+ -+out: -+ return rv; -+} -+ -+ -+SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s, -+ squashfs_inode_t inode, unsigned int inode_number) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct inode *i = iget_locked(s, inode_number); -+ -+ TRACE("Entered squashfs_iget\n"); -+ -+ if(i && (i->i_state & I_NEW)) { -+ (msblk->read_inode)(i, inode); -+ unlock_new_inode(i); -+ } -+ -+ return i; -+} -+ -+ -+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode) -+{ -+ struct super_block *s = i->i_sb; -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long block = SQUASHFS_INODE_BLK(inode) + sblk->inode_table_start; -+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); -+ long long next_block; -+ unsigned int next_offset; -+ union squashfs_inode_header id, sid; -+ struct squashfs_base_inode_header *inodeb = &id.base, *sinodeb = &sid.base; -+ -+ TRACE("Entered squashfs_read_inode\n"); -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, sinodeb, block, offset, -+ sizeof(*sinodeb), &next_block, &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb, sizeof(*sinodeb)); -+ } else -+ if (!squashfs_get_cached_block(s, inodeb, block, offset, -+ sizeof(*inodeb), &next_block, &next_offset)) -+ goto failed_read; -+ -+ squashfs_new_inode(msblk, i, inodeb); -+ -+ switch(inodeb->inode_type) { -+ case SQUASHFS_FILE_TYPE: { -+ unsigned int frag_size; -+ long long frag_blk; -+ struct squashfs_reg_inode_header *inodep = &id.reg; -+ struct squashfs_reg_inode_header *sinodep = &sid.reg; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, sinodep, block, offset, -+ sizeof(*sinodep), &next_block, &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, inodep, block, offset, -+ sizeof(*inodep), &next_block, &next_offset)) -+ goto failed_read; -+ -+ frag_blk = SQUASHFS_INVALID_BLK; -+ -+ if (inodep->fragment != SQUASHFS_INVALID_FRAG) -+ if(!get_fragment_location(s, inodep->fragment, &frag_blk, -+ &frag_size)) -+ goto failed_read; -+ -+ i->i_nlink = 1; -+ i->i_size = inodep->file_size; -+ i->i_fop = &generic_ro_fops; -+ i->i_mode |= S_IFREG; -+ i->i_blocks = ((i->i_size - 1) >> 9) + 1; -+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; -+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; -+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->u.s1.block_list_start = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ i->i_data.a_ops = &squashfs_aops; -+ -+ TRACE("File inode %x:%x, start_block %llx, " -+ "block_list_start %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, next_block, -+ next_offset); -+ break; -+ } -+ case SQUASHFS_LREG_TYPE: { -+ unsigned int frag_size; -+ long long frag_blk; -+ struct squashfs_lreg_inode_header *inodep = &id.lreg; -+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, sinodep, block, offset, -+ sizeof(*sinodep), &next_block, &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, inodep, block, offset, -+ sizeof(*inodep), &next_block, &next_offset)) -+ goto failed_read; -+ -+ frag_blk = SQUASHFS_INVALID_BLK; -+ -+ if (inodep->fragment != SQUASHFS_INVALID_FRAG) -+ if (!get_fragment_location(s, inodep->fragment, &frag_blk, -+ &frag_size)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->file_size; -+ i->i_fop = &generic_ro_fops; -+ i->i_mode |= S_IFREG; -+ i->i_blocks = ((i->i_size - 1) >> 9) + 1; -+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; -+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; -+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->u.s1.block_list_start = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ i->i_data.a_ops = &squashfs_aops; -+ -+ TRACE("File inode %x:%x, start_block %llx, " -+ "block_list_start %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, next_block, -+ next_offset); -+ break; -+ } -+ case SQUASHFS_DIR_TYPE: { -+ struct squashfs_dir_inode_header *inodep = &id.dir; -+ struct squashfs_dir_inode_header *sinodep = &sid.dir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, sinodep, block, offset, -+ sizeof(*sinodep), &next_block, &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, inodep, block, offset, -+ sizeof(*inodep), &next_block, &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops; -+ i->i_fop = &squashfs_dir_ops; -+ i->i_mode |= S_IFDIR; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = 0; -+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; -+ -+ TRACE("Directory inode %x:%x, start_block %x, offset " -+ "%x\n", SQUASHFS_INODE_BLK(inode), -+ offset, inodep->start_block, -+ inodep->offset); -+ break; -+ } -+ case SQUASHFS_LDIR_TYPE: { -+ struct squashfs_ldir_inode_header *inodep = &id.ldir; -+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, sinodep, block, offset, -+ sizeof(*sinodep), &next_block, &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, inodep, block, offset, -+ sizeof(*inodep), &next_block, &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops; -+ i->i_fop = &squashfs_dir_ops; -+ i->i_mode |= S_IFDIR; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; -+ SQUASHFS_I(i)->u.s2.directory_index_offset = next_offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = inodep->i_count; -+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; -+ -+ TRACE("Long directory inode %x:%x, start_block %x, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, inodep->offset); -+ break; -+ } -+ case SQUASHFS_SYMLINK_TYPE: { -+ struct squashfs_symlink_inode_header *inodep = &id.symlink; -+ struct squashfs_symlink_inode_header *sinodep = &sid.symlink; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, sinodep, block, offset, -+ sizeof(*sinodep), &next_block, &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, inodep, block, offset, -+ sizeof(*inodep), &next_block, &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->symlink_size; -+ i->i_op = &page_symlink_inode_operations; -+ i->i_data.a_ops = &squashfs_symlink_aops; -+ i->i_mode |= S_IFLNK; -+ SQUASHFS_I(i)->start_block = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ -+ TRACE("Symbolic link inode %x:%x, start_block %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ next_block, next_offset); -+ break; -+ } -+ case SQUASHFS_BLKDEV_TYPE: -+ case SQUASHFS_CHRDEV_TYPE: { -+ struct squashfs_dev_inode_header *inodep = &id.dev; -+ struct squashfs_dev_inode_header *sinodep = &sid.dev; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, sinodep, block, offset, -+ sizeof(*sinodep), &next_block, &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, inodep, block, offset, -+ sizeof(*inodep), &next_block, &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_mode |= (inodeb->inode_type == SQUASHFS_CHRDEV_TYPE) ? -+ S_IFCHR : S_IFBLK; -+ init_special_inode(i, i->i_mode, old_decode_dev(inodep->rdev)); -+ -+ TRACE("Device inode %x:%x, rdev %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, inodep->rdev); -+ break; -+ } -+ case SQUASHFS_FIFO_TYPE: -+ case SQUASHFS_SOCKET_TYPE: { -+ struct squashfs_ipc_inode_header *inodep = &id.ipc; -+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, sinodep, block, offset, -+ sizeof(*sinodep), &next_block, &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, inodep, block, offset, -+ sizeof(*inodep), &next_block, &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) -+ ? S_IFIFO : S_IFSOCK; -+ init_special_inode(i, i->i_mode, 0); -+ break; -+ } -+ default: -+ ERROR("Unknown inode type %d in squashfs_iget!\n", -+ inodeb->inode_type); -+ goto failed_read1; -+ } -+ -+ return 1; -+ -+failed_read: -+ ERROR("Unable to read inode [%llx:%x]\n", block, offset); -+ -+failed_read1: -+ make_bad_inode(i); -+ return 0; -+} -+ -+ -+static int read_inode_lookup_table(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes); -+ -+ TRACE("In read_inode_lookup_table, length %d\n", length); -+ -+ /* Allocate inode lookup table */ -+ msblk->inode_lookup_table = kmalloc(length, GFP_KERNEL); -+ if (msblk->inode_lookup_table == NULL) { -+ ERROR("Failed to allocate inode lookup table\n"); -+ return 0; -+ } -+ -+ if (!squashfs_read_data(s, (char *) msblk->inode_lookup_table, -+ sblk->lookup_table_start, length | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { -+ ERROR("unable to read inode lookup table\n"); -+ return 0; -+ } -+ -+ if (msblk->swap) { -+ int i; -+ long long block; -+ -+ for (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) { -+ /* XXX */ -+ SQUASHFS_SWAP_LOOKUP_BLOCKS((&block), -+ &msblk->inode_lookup_table[i], 1); -+ msblk->inode_lookup_table[i] = block; -+ } -+ } -+ -+ return 1; -+} -+ -+ -+static int read_fragment_index_table(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments); -+ -+ if(length == 0) -+ return 1; -+ -+ /* Allocate fragment index table */ -+ msblk->fragment_index = kmalloc(length, GFP_KERNEL); -+ if (msblk->fragment_index == NULL) { -+ ERROR("Failed to allocate fragment index table\n"); -+ return 0; -+ } -+ -+ if (!squashfs_read_data(s, (char *) msblk->fragment_index, -+ sblk->fragment_table_start, length | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { -+ ERROR("unable to read fragment index table\n"); -+ return 0; -+ } -+ -+ if (msblk->swap) { -+ int i; -+ long long fragment; -+ -+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments); i++) { -+ /* XXX */ -+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment), -+ &msblk->fragment_index[i], 1); -+ msblk->fragment_index[i] = fragment; -+ } -+ } -+ -+ return 1; -+} -+ -+ -+static int readahead_metadata(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ int i; -+ -+ squashfs_cached_blks = SQUASHFS_CACHED_BLKS; -+ -+ /* Init inode_table block pointer array */ -+ msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) * -+ squashfs_cached_blks, GFP_KERNEL); -+ if (msblk->block_cache == NULL) { -+ ERROR("Failed to allocate block cache\n"); -+ goto failed; -+ } -+ -+ for (i = 0; i < squashfs_cached_blks; i++) -+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; -+ -+ msblk->next_cache = 0; -+ msblk->unused_cache_blks = squashfs_cached_blks; -+ -+ return 1; -+ -+failed: -+ return 0; -+} -+ -+ -+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent) -+{ -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ msblk->read_inode = squashfs_read_inode; -+ msblk->read_blocklist = read_blocklist; -+ msblk->read_fragment_index_table = read_fragment_index_table; -+ -+ if (sblk->s_major == 1) { -+ if (!squashfs_1_0_supported(msblk)) { -+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems " -+ "are unsupported\n"); -+ SERROR("Please recompile with Squashfs 1.0 support enabled\n"); -+ return 0; -+ } -+ } else if (sblk->s_major == 2) { -+ if (!squashfs_2_0_supported(msblk)) { -+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems " -+ "are unsupported\n"); -+ SERROR("Please recompile with Squashfs 2.0 support enabled\n"); -+ return 0; -+ } -+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor > -+ SQUASHFS_MINOR) { -+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d " -+ "filesystem\n", sblk->s_major, sblk->s_minor); -+ SERROR("Please update your kernel\n"); -+ return 0; -+ } -+ -+ return 1; -+} -+ -+ -+static int squashfs_fill_super(struct super_block *s, void *data, int silent) -+{ -+ struct squashfs_sb_info *msblk; -+ struct squashfs_super_block *sblk; -+ int i; -+ char b[BDEVNAME_SIZE]; -+ struct inode *root; -+ -+ TRACE("Entered squashfs_fill_superblock\n"); -+ -+ s->s_fs_info = kzalloc(sizeof(struct squashfs_sb_info), GFP_KERNEL); -+ if (s->s_fs_info == NULL) { -+ ERROR("Failed to allocate superblock\n"); -+ goto failure; -+ } -+ msblk = s->s_fs_info; -+ -+ msblk->stream.workspace = vmalloc(zlib_inflate_workspacesize()); -+ if (msblk->stream.workspace == NULL) { -+ ERROR("Failed to allocate zlib workspace\n"); -+ goto failure; -+ } -+ sblk = &msblk->sblk; -+ -+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE); -+ msblk->devblksize_log2 = ffz(~msblk->devblksize); -+ -+ mutex_init(&msblk->read_data_mutex); -+ mutex_init(&msblk->read_page_mutex); -+ mutex_init(&msblk->block_cache_mutex); -+ mutex_init(&msblk->fragment_mutex); -+ mutex_init(&msblk->meta_index_mutex); -+ -+ init_waitqueue_head(&msblk->waitq); -+ init_waitqueue_head(&msblk->fragment_wait_queue); -+ -+ /* sblk->bytes_used is checked in squashfs_read_data to ensure reads are not -+ * beyond filesystem end. As we're using squashfs_read_data to read sblk here, -+ * first set sblk->bytes_used to a useful value */ -+ sblk->bytes_used = sizeof(struct squashfs_super_block); -+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START, -+ sizeof(struct squashfs_super_block) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) { -+ SERROR("unable to read superblock\n"); -+ goto failed_mount; -+ } -+ -+ /* Check it is a SQUASHFS superblock */ -+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) { -+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) { -+ struct squashfs_super_block ssblk; -+ -+ WARNING("Mounting a different endian SQUASHFS filesystem on %s\n", -+ bdevname(s->s_bdev, b)); -+ -+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk); -+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block)); -+ msblk->swap = 1; -+ } else { -+ SERROR("Can't find a SQUASHFS superblock on %s\n", -+ bdevname(s->s_bdev, b)); -+ goto failed_mount; -+ } -+ } -+ -+ /* Check the MAJOR & MINOR versions */ -+ if(!supported_squashfs_filesystem(msblk, silent)) -+ goto failed_mount; -+ -+ /* Check the filesystem does not extend beyond the end of the -+ block device */ -+ if(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode)) -+ goto failed_mount; -+ -+ /* Check the root inode for sanity */ -+ if (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE) -+ goto failed_mount; -+ -+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b)); -+ TRACE("Inodes are %scompressed\n", SQUASHFS_UNCOMPRESSED_INODES(sblk->flags) -+ ? "un" : ""); -+ TRACE("Data is %scompressed\n", SQUASHFS_UNCOMPRESSED_DATA(sblk->flags) -+ ? "un" : ""); -+ TRACE("Check data is %spresent in the filesystem\n", -+ SQUASHFS_CHECK_DATA(sblk->flags) ? "" : "not "); -+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used); -+ TRACE("Block size %d\n", sblk->block_size); -+ TRACE("Number of inodes %d\n", sblk->inodes); -+ if (sblk->s_major > 1) -+ TRACE("Number of fragments %d\n", sblk->fragments); -+ TRACE("Number of uids %d\n", sblk->no_uids); -+ TRACE("Number of gids %d\n", sblk->no_guids); -+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start); -+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start); -+ if (sblk->s_major > 1) -+ TRACE("sblk->fragment_table_start %llx\n", sblk->fragment_table_start); -+ TRACE("sblk->uid_start %llx\n", sblk->uid_start); -+ -+ s->s_maxbytes = MAX_LFS_FILESIZE; -+ s->s_flags |= MS_RDONLY; -+ s->s_op = &squashfs_super_ops; -+ -+ if (readahead_metadata(s) == 0) -+ goto failed_mount; -+ -+ /* Allocate read_page block */ -+ msblk->read_page = vmalloc(sblk->block_size); -+ if (msblk->read_page == NULL) { -+ ERROR("Failed to allocate read_page block\n"); -+ goto failed_mount; -+ } -+ -+ /* Allocate uid and gid tables */ -+ msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) * -+ sizeof(unsigned int), GFP_KERNEL); -+ if (msblk->uid == NULL) { -+ ERROR("Failed to allocate uid/gid table\n"); -+ goto failed_mount; -+ } -+ msblk->guid = msblk->uid + sblk->no_uids; -+ -+ if (msblk->swap) { -+ unsigned int suid[sblk->no_uids + sblk->no_guids]; -+ -+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start, -+ ((sblk->no_uids + sblk->no_guids) * -+ sizeof(unsigned int)) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { -+ ERROR("unable to read uid/gid table\n"); -+ goto failed_mount; -+ } -+ -+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids + -+ sblk->no_guids), (sizeof(unsigned int) * 8)); -+ } else -+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start, -+ ((sblk->no_uids + sblk->no_guids) * -+ sizeof(unsigned int)) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { -+ ERROR("unable to read uid/gid table\n"); -+ goto failed_mount; -+ } -+ -+ -+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk)) -+ goto allocate_root; -+ -+ msblk->fragment = kzalloc(sizeof(struct squashfs_fragment_cache) * -+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL); -+ if (msblk->fragment == NULL) { -+ ERROR("Failed to allocate fragment block cache\n"); -+ goto failed_mount; -+ } -+ -+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) { -+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; -+ } -+ -+ msblk->next_fragment = 0; -+ msblk->unused_frag_blks = SQUASHFS_CACHED_FRAGMENTS; -+ -+ /* Allocate and read fragment index table */ -+ if (msblk->read_fragment_index_table(s) == 0) -+ goto failed_mount; -+ -+ if(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK) -+ goto allocate_root; -+ -+ /* Allocate and read inode lookup table */ -+ if (read_inode_lookup_table(s) == 0) -+ goto failed_mount; -+ -+ s->s_op = &squashfs_export_super_ops; -+ s->s_export_op = &squashfs_export_ops; -+ -+allocate_root: -+ root = new_inode(s); -+ if ((msblk->read_inode)(root, sblk->root_inode) == 0) -+ goto failed_mount; -+ insert_inode_hash(root); -+ -+ s->s_root = d_alloc_root(root); -+ if (s->s_root == NULL) { -+ ERROR("Root inode create failed\n"); -+ iput(root); -+ goto failed_mount; -+ } -+ -+ TRACE("Leaving squashfs_fill_super\n"); -+ return 0; -+ -+failed_mount: -+ kfree(msblk->inode_lookup_table); -+ kfree(msblk->fragment_index); -+ kfree(msblk->fragment); -+ kfree(msblk->uid); -+ vfree(msblk->read_page); -+ kfree(msblk->block_cache); -+ kfree(msblk->fragment_index_2); -+ vfree(msblk->stream.workspace); -+ kfree(s->s_fs_info); -+ s->s_fs_info = NULL; -+ return -EINVAL; -+ -+failure: -+ return -ENOMEM; -+} -+ -+ -+static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf) -+{ -+ struct squashfs_sb_info *msblk = dentry->d_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ TRACE("Entered squashfs_statfs\n"); -+ -+ buf->f_type = SQUASHFS_MAGIC; -+ buf->f_bsize = sblk->block_size; -+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1; -+ buf->f_bfree = buf->f_bavail = 0; -+ buf->f_files = sblk->inodes; -+ buf->f_ffree = 0; -+ buf->f_namelen = SQUASHFS_NAME_LEN; -+ -+ return 0; -+} -+ -+ -+static int squashfs_symlink_readpage(struct file *file, struct page *page) -+{ -+ struct inode *inode = page->mapping->host; -+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes, avail_bytes; -+ long long block = SQUASHFS_I(inode)->start_block; -+ int offset = SQUASHFS_I(inode)->offset; -+ void *pageaddr = kmap(page); -+ -+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block " -+ "%llx, offset %x\n", page->index, -+ SQUASHFS_I(inode)->start_block, -+ SQUASHFS_I(inode)->offset); -+ -+ for (length = 0; length < index; length += bytes) { -+ bytes = squashfs_get_cached_block(inode->i_sb, NULL, block, -+ offset, PAGE_CACHE_SIZE, &block, &offset); -+ if (bytes == 0) { -+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset); -+ goto skip_read; -+ } -+ } -+ -+ if (length != index) { -+ ERROR("(squashfs_symlink_readpage) length != index\n"); -+ bytes = 0; -+ goto skip_read; -+ } -+ -+ avail_bytes = min_t(int, i_size_read(inode) - length, PAGE_CACHE_SIZE); -+ -+ bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, offset, -+ avail_bytes, &block, &offset); -+ if (bytes == 0) -+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset); -+ -+skip_read: -+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); -+ kunmap(page); -+ flush_dcache_page(page); -+ SetPageUptodate(page); -+ unlock_page(page); -+ -+ return 0; -+} -+ -+ -+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset) -+{ -+ struct meta_index *meta = NULL; -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ int i; -+ -+ mutex_lock(&msblk->meta_index_mutex); -+ -+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset); -+ -+ if (msblk->meta_index == NULL) -+ goto not_allocated; -+ -+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++) { -+ if (msblk->meta_index[i].inode_number == inode->i_ino && -+ msblk->meta_index[i].offset >= offset && -+ msblk->meta_index[i].offset <= index && -+ msblk->meta_index[i].locked == 0) { -+ TRACE("locate_meta_index: entry %d, offset %d\n", i, -+ msblk->meta_index[i].offset); -+ meta = &msblk->meta_index[i]; -+ offset = meta->offset; -+ } -+ } -+ -+ if (meta) -+ meta->locked = 1; -+ -+not_allocated: -+ mutex_unlock(&msblk->meta_index_mutex); -+ -+ return meta; -+} -+ -+ -+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip) -+{ -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct meta_index *meta = NULL; -+ int i; -+ -+ mutex_lock(&msblk->meta_index_mutex); -+ -+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip); -+ -+ if (msblk->meta_index == NULL) { -+ msblk->meta_index = kmalloc(sizeof(struct meta_index) * -+ SQUASHFS_META_NUMBER, GFP_KERNEL); -+ if (msblk->meta_index == NULL) { -+ ERROR("Failed to allocate meta_index\n"); -+ goto failed; -+ } -+ for (i = 0; i < SQUASHFS_META_NUMBER; i++) { -+ msblk->meta_index[i].inode_number = 0; -+ msblk->meta_index[i].locked = 0; -+ } -+ msblk->next_meta_index = 0; -+ } -+ -+ for (i = SQUASHFS_META_NUMBER; i && -+ msblk->meta_index[msblk->next_meta_index].locked; i --) -+ msblk->next_meta_index = (msblk->next_meta_index + 1) % -+ SQUASHFS_META_NUMBER; -+ -+ if (i == 0) { -+ TRACE("empty_meta_index: failed!\n"); -+ goto failed; -+ } -+ -+ TRACE("empty_meta_index: returned meta entry %d, %p\n", -+ msblk->next_meta_index, -+ &msblk->meta_index[msblk->next_meta_index]); -+ -+ meta = &msblk->meta_index[msblk->next_meta_index]; -+ msblk->next_meta_index = (msblk->next_meta_index + 1) % -+ SQUASHFS_META_NUMBER; -+ -+ meta->inode_number = inode->i_ino; -+ meta->offset = offset; -+ meta->skip = skip; -+ meta->entries = 0; -+ meta->locked = 1; -+ -+failed: -+ mutex_unlock(&msblk->meta_index_mutex); -+ return meta; -+} -+ -+ -+void release_meta_index(struct inode *inode, struct meta_index *meta) -+{ -+ meta->locked = 0; -+ smp_mb(); -+} -+ -+ -+static int read_block_index(struct super_block *s, int blocks, char *block_list, -+ long long *start_block, int *offset) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ unsigned int *block_listp; -+ int block = 0; -+ -+ if (msblk->swap) { -+ char sblock_list[blocks << 2]; -+ -+ if (!squashfs_get_cached_block(s, sblock_list, *start_block, -+ *offset, blocks << 2, start_block, offset)) { -+ ERROR("Fail reading block list [%llx:%x]\n", *start_block, *offset); -+ goto failure; -+ } -+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list), -+ ((unsigned int *)sblock_list), blocks); -+ } else { -+ if (!squashfs_get_cached_block(s, block_list, *start_block, -+ *offset, blocks << 2, start_block, offset)) { -+ ERROR("Fail reading block list [%llx:%x]\n", *start_block, *offset); -+ goto failure; -+ } -+ } -+ -+ for (block_listp = (unsigned int *) block_list; blocks; -+ block_listp++, blocks --) -+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp); -+ -+ return block; -+ -+failure: -+ return -1; -+} -+ -+ -+#define SIZE 256 -+ -+static inline int calculate_skip(int blocks) { -+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES); -+ return skip >= 7 ? 7 : skip + 1; -+} -+ -+ -+static int get_meta_index(struct inode *inode, int index, -+ long long *index_block, int *index_offset, -+ long long *data_block, char *block_list) -+{ -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log); -+ int offset = 0; -+ struct meta_index *meta; -+ struct meta_entry *meta_entry; -+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start; -+ int cur_offset = SQUASHFS_I(inode)->offset; -+ long long cur_data_block = SQUASHFS_I(inode)->start_block; -+ int i; -+ -+ index /= SQUASHFS_META_INDEXES * skip; -+ -+ while (offset < index) { -+ meta = locate_meta_index(inode, index, offset + 1); -+ -+ if (meta == NULL) { -+ meta = empty_meta_index(inode, offset + 1, skip); -+ if (meta == NULL) -+ goto all_done; -+ } else { -+ if(meta->entries == 0) -+ goto failed; -+ /* XXX */ -+ offset = index < meta->offset + meta->entries ? index : -+ meta->offset + meta->entries - 1; -+ /* XXX */ -+ meta_entry = &meta->meta_entry[offset - meta->offset]; -+ cur_index_block = meta_entry->index_block + sblk->inode_table_start; -+ cur_offset = meta_entry->offset; -+ cur_data_block = meta_entry->data_block; -+ TRACE("get_meta_index: offset %d, meta->offset %d, " -+ "meta->entries %d\n", offset, meta->offset, meta->entries); -+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x" -+ " data_block 0x%llx\n", cur_index_block, -+ cur_offset, cur_data_block); -+ } -+ -+ for (i = meta->offset + meta->entries; i <= index && -+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) { -+ int blocks = skip * SQUASHFS_META_INDEXES; -+ -+ while (blocks) { -+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) : blocks; -+ int res = read_block_index(inode->i_sb, block, block_list, -+ &cur_index_block, &cur_offset); -+ -+ if (res == -1) -+ goto failed; -+ -+ cur_data_block += res; -+ blocks -= block; -+ } -+ -+ meta_entry = &meta->meta_entry[i - meta->offset]; -+ meta_entry->index_block = cur_index_block - sblk->inode_table_start; -+ meta_entry->offset = cur_offset; -+ meta_entry->data_block = cur_data_block; -+ meta->entries ++; -+ offset ++; -+ } -+ -+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n", -+ meta->offset, meta->entries); -+ -+ release_meta_index(inode, meta); -+ } -+ -+all_done: -+ *index_block = cur_index_block; -+ *index_offset = cur_offset; -+ *data_block = cur_data_block; -+ -+ return offset * SQUASHFS_META_INDEXES * skip; -+ -+failed: -+ release_meta_index(inode, meta); -+ return -1; -+} -+ -+ -+static long long read_blocklist(struct inode *inode, int index, -+ int readahead_blks, char *block_list, -+ unsigned short **block_p, unsigned int *bsize) -+{ -+ long long block_ptr; -+ int offset; -+ long long block; -+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block, -+ block_list); -+ -+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset" -+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset, block); -+ -+ if(res == -1) -+ goto failure; -+ -+ index -= res; -+ -+ while (index) { -+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index; -+ int res = read_block_index(inode->i_sb, blocks, block_list, -+ &block_ptr, &offset); -+ if (res == -1) -+ goto failure; -+ block += res; -+ index -= blocks; -+ } -+ -+ if (read_block_index(inode->i_sb, 1, block_list, &block_ptr, &offset) == -1) -+ goto failure; -+ *bsize = *((unsigned int *) block_list); -+ -+ return block; -+ -+failure: -+ return 0; -+} -+ -+ -+static int squashfs_readpage(struct file *file, struct page *page) -+{ -+ struct inode *inode = page->mapping->host; -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned char *block_list = NULL; -+ long long block; -+ unsigned int bsize, i; -+ int bytes; -+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT); -+ void *pageaddr; -+ struct squashfs_fragment_cache *fragment = NULL; -+ char *data_ptr = msblk->read_page; -+ -+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1; -+ int start_index = page->index & ~mask; -+ int end_index = start_index | mask; -+ int file_end = i_size_read(inode) >> sblk->block_log; -+ int sparse = 0; -+ -+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n", -+ page->index, SQUASHFS_I(inode)->start_block); -+ -+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> -+ PAGE_CACHE_SHIFT)) -+ goto out; -+ -+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK -+ || index < file_end) { -+ block_list = kmalloc(SIZE, GFP_KERNEL); -+ if (block_list == NULL) { -+ ERROR("Failed to allocate block_list\n"); -+ goto error_out; -+ } -+ -+ block = (msblk->read_blocklist)(inode, index, 1, block_list, NULL, &bsize); -+ if (block == 0) -+ goto error_out; -+ -+ if (bsize == 0) { /* hole */ -+ bytes = index == file_end ? -+ (i_size_read(inode) & (sblk->block_size - 1)) : sblk->block_size; -+ sparse = 1; -+ } else { -+ mutex_lock(&msblk->read_page_mutex); -+ -+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block, -+ bsize, NULL, sblk->block_size); -+ -+ if (bytes == 0) { -+ ERROR("Unable to read page, block %llx, size %x\n", block, bsize); -+ mutex_unlock(&msblk->read_page_mutex); -+ goto error_out; -+ } -+ } -+ } else { -+ fragment = get_cached_fragment(inode->i_sb, -+ SQUASHFS_I(inode)-> u.s1.fragment_start_block, -+ SQUASHFS_I(inode)->u.s1.fragment_size); -+ -+ if (fragment == NULL) { -+ ERROR("Unable to read page, block %llx, size %x\n", -+ SQUASHFS_I(inode)->u.s1.fragment_start_block, -+ (int) SQUASHFS_I(inode)->u.s1.fragment_size); -+ goto error_out; -+ } -+ bytes = i_size_read(inode) & (sblk->block_size - 1); -+ data_ptr = fragment->data + SQUASHFS_I(inode)->u.s1.fragment_offset; -+ } -+ -+ for (i = start_index; i <= end_index && bytes > 0; i++, -+ bytes -= PAGE_CACHE_SIZE, data_ptr += PAGE_CACHE_SIZE) { -+ struct page *push_page; -+ int avail = sparse ? 0 : min_t(unsigned int, bytes, PAGE_CACHE_SIZE); -+ -+ TRACE("bytes %d, i %d, available_bytes %d\n", bytes, i, avail); -+ -+ push_page = (i == page->index) ? page : -+ grab_cache_page_nowait(page->mapping, i); -+ -+ if (!push_page) -+ continue; -+ -+ if (PageUptodate(push_page)) -+ goto skip_page; -+ -+ pageaddr = kmap_atomic(push_page, KM_USER0); -+ memcpy(pageaddr, data_ptr, avail); -+ memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail); -+ kunmap_atomic(pageaddr, KM_USER0); -+ flush_dcache_page(push_page); -+ SetPageUptodate(push_page); -+skip_page: -+ unlock_page(push_page); -+ if(i != page->index) -+ page_cache_release(push_page); -+ } -+ -+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK -+ || index < file_end) { -+ if (!sparse) -+ mutex_unlock(&msblk->read_page_mutex); -+ kfree(block_list); -+ } else -+ release_cached_fragment(msblk, fragment); -+ -+ return 0; -+ -+error_out: -+ SetPageError(page); -+out: -+ pageaddr = kmap_atomic(page, KM_USER0); -+ memset(pageaddr, 0, PAGE_CACHE_SIZE); -+ kunmap_atomic(pageaddr, KM_USER0); -+ flush_dcache_page(page); -+ if (!PageError(page)) -+ SetPageUptodate(page); -+ unlock_page(page); -+ -+ kfree(block_list); -+ return 0; -+} -+ -+ -+static int get_dir_index_using_offset(struct super_block *s, -+ long long *next_block, unsigned int *next_offset, -+ long long index_start, unsigned int index_offset, int i_count, -+ long long f_pos) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index index; -+ -+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", -+ i_count, (unsigned int) f_pos); -+ -+ f_pos =- 3; -+ if (f_pos == 0) -+ goto finish; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index sindex; -+ squashfs_get_cached_block(s, &sindex, index_start, index_offset, -+ sizeof(sindex), &index_start, &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex); -+ } else -+ squashfs_get_cached_block(s, &index, index_start, index_offset, -+ sizeof(index), &index_start, &index_offset); -+ -+ if (index.index > f_pos) -+ break; -+ -+ squashfs_get_cached_block(s, NULL, index_start, index_offset, -+ index.size + 1, &index_start, &index_offset); -+ -+ length = index.index; -+ *next_block = index.start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ -+finish: -+ return length + 3; -+} -+ -+ -+static int get_dir_index_using_name(struct super_block *s, -+ long long *next_block, unsigned int *next_offset, -+ long long index_start, unsigned int index_offset, int i_count, -+ const char *name, int size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index *index; -+ char *str; -+ -+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); -+ -+ str = kmalloc(sizeof(struct squashfs_dir_index) + -+ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL); -+ if (str == NULL) { -+ ERROR("Failed to allocate squashfs_dir_index\n"); -+ goto failure; -+ } -+ -+ index = (struct squashfs_dir_index *) (str + SQUASHFS_NAME_LEN + 1); -+ strncpy(str, name, size); -+ str[size] = '\0'; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index sindex; -+ squashfs_get_cached_block(s, &sindex, index_start, index_offset, -+ sizeof(sindex), &index_start, &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex); -+ } else -+ squashfs_get_cached_block(s, index, index_start, index_offset, -+ sizeof(struct squashfs_dir_index), &index_start, &index_offset); -+ -+ squashfs_get_cached_block(s, index->name, index_start, index_offset, -+ index->size + 1, &index_start, &index_offset); -+ -+ index->name[index->size + 1] = '\0'; -+ -+ if (strcmp(index->name, str) > 0) -+ break; -+ -+ length = index->index; -+ *next_block = index->start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ kfree(str); -+ -+failure: -+ return length + 3; -+} -+ -+ -+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir) -+{ -+ struct inode *i = file->f_dentry->d_inode; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dir_count; -+ struct squashfs_dir_header dirh; -+ struct squashfs_dir_entry *dire; -+ -+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset); -+ -+ dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL); -+ if (dire == NULL) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto finish; -+ } -+ -+ while(file->f_pos < 3) { -+ char *name; -+ int size, i_ino; -+ -+ if(file->f_pos == 0) { -+ name = "."; -+ size = 1; -+ i_ino = i->i_ino; -+ } else { -+ name = ".."; -+ size = 2; -+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode; -+ } -+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n", -+ (unsigned int) dirent, name, size, (int) -+ file->f_pos, i_ino, squashfs_filetype_table[1]); -+ -+ if (filldir(dirent, name, size, file->f_pos, i_ino, -+ squashfs_filetype_table[1]) < 0) { -+ TRACE("Filldir returned less than 0\n"); -+ goto finish; -+ } -+ file->f_pos += size; -+ } -+ -+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, file->f_pos); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header sdirh; -+ -+ if (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block, -+ next_offset, sizeof(sdirh), &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block, -+ next_offset, sizeof(dirh), &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry sdire; -+ if (!squashfs_get_cached_block(i->i_sb, &sdire, next_block, -+ next_offset, sizeof(sdire), &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, dire, next_block, -+ next_offset, sizeof(*dire), &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, next_block, -+ next_offset, dire->size + 1, &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (file->f_pos >= length) -+ continue; -+ -+ dire->name[dire->size + 1] = '\0'; -+ -+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n", -+ (unsigned int) dirent, dire->name, dire->size + 1, -+ (int) file->f_pos, dirh.start_block, dire->offset, -+ dirh.inode_number + dire->inode_number, -+ squashfs_filetype_table[dire->type]); -+ -+ if (filldir(dirent, dire->name, dire->size + 1, file->f_pos, -+ dirh.inode_number + dire->inode_number, -+ squashfs_filetype_table[dire->type]) < 0) { -+ TRACE("Filldir returned less than 0\n"); -+ goto finish; -+ } -+ file->f_pos = length; -+ } -+ } -+ -+finish: -+ kfree(dire); -+ return 0; -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ kfree(dire); -+ return 0; -+} -+ -+ -+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry, -+ struct nameidata *nd) -+{ -+ const unsigned char *name = dentry->d_name.name; -+ int len = dentry->d_name.len; -+ struct inode *inode = NULL; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dir_count; -+ struct squashfs_dir_header dirh; -+ struct squashfs_dir_entry *dire; -+ -+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset); -+ -+ dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL); -+ if (dire == NULL) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto exit_lookup; -+ } -+ -+ if (len > SQUASHFS_NAME_LEN) -+ goto exit_lookup; -+ -+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, name, len); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header sdirh; -+ if (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block, -+ next_offset, sizeof(sdirh), &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block, -+ next_offset, sizeof(dirh), &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry sdire; -+ if (!squashfs_get_cached_block(i->i_sb, &sdire, next_block, -+ next_offset, sizeof(sdire), &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, dire, next_block, -+ next_offset, sizeof(*dire), &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, next_block, -+ next_offset, dire->size + 1, &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (name[0] < dire->name[0]) -+ goto exit_lookup; -+ -+ if ((len == dire->size + 1) && !strncmp(name, dire->name, len)) { -+ squashfs_inode_t ino = SQUASHFS_MKINODE(dirh.start_block, -+ dire->offset); -+ -+ TRACE("calling squashfs_iget for directory entry %s, inode" -+ " %x:%x, %d\n", name, dirh.start_block, dire->offset, -+ dirh.inode_number + dire->inode_number); -+ -+ inode = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number); -+ -+ goto exit_lookup; -+ } -+ } -+ } -+ -+exit_lookup: -+ kfree(dire); -+ if (inode) -+ return d_splice_alias(inode, dentry); -+ d_add(dentry, inode); -+ return ERR_PTR(0); -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ goto exit_lookup; -+} -+ -+ -+static int squashfs_remount(struct super_block *s, int *flags, char *data) -+{ -+ *flags |= MS_RDONLY; -+ return 0; -+} -+ -+ -+static void squashfs_put_super(struct super_block *s) -+{ -+ int i; -+ -+ if (s->s_fs_info) { -+ struct squashfs_sb_info *sbi = s->s_fs_info; -+ if (sbi->block_cache) -+ for (i = 0; i < squashfs_cached_blks; i++) -+ if (sbi->block_cache[i].block != SQUASHFS_INVALID_BLK) -+ vfree(sbi->block_cache[i].data); -+ if (sbi->fragment) -+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) -+ vfree(sbi->fragment[i].data); -+ kfree(sbi->fragment); -+ kfree(sbi->block_cache); -+ vfree(sbi->read_page); -+ kfree(sbi->uid); -+ kfree(sbi->fragment_index); -+ kfree(sbi->fragment_index_2); -+ kfree(sbi->meta_index); -+ vfree(sbi->stream.workspace); -+ kfree(s->s_fs_info); -+ s->s_fs_info = NULL; -+ } -+} -+ -+ -+static int squashfs_get_sb(struct file_system_type *fs_type, int flags, -+ const char *dev_name, void *data, struct vfsmount *mnt) -+{ -+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, -+ mnt); -+} -+ -+ -+static int __init init_squashfs_fs(void) -+{ -+ int err = init_inodecache(); -+ if (err) -+ goto out; -+ -+ printk(KERN_INFO "squashfs: version 3.3 (2007/10/31) " -+ "Phillip Lougher\n"); -+ -+ err = register_filesystem(&squashfs_fs_type); -+ if (err) -+ destroy_inodecache(); -+ -+out: -+ return err; -+} -+ -+ -+static void __exit exit_squashfs_fs(void) -+{ -+ unregister_filesystem(&squashfs_fs_type); -+ destroy_inodecache(); -+} -+ -+ -+static struct kmem_cache * squashfs_inode_cachep; -+ -+ -+static struct inode *squashfs_alloc_inode(struct super_block *sb) -+{ -+ struct squashfs_inode_info *ei; -+ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL); -+ return ei ? &ei->vfs_inode : NULL; -+} -+ -+ -+static void squashfs_destroy_inode(struct inode *inode) -+{ -+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode)); -+} -+ -+ -+static void init_once(struct kmem_cache *cachep, void *foo) -+{ -+ struct squashfs_inode_info *ei = foo; -+ -+ inode_init_once(&ei->vfs_inode); -+} -+ -+ -+static int __init init_inodecache(void) -+{ -+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache", -+ sizeof(struct squashfs_inode_info), 0, -+ SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, init_once); -+ if (squashfs_inode_cachep == NULL) -+ return -ENOMEM; -+ return 0; -+} -+ -+ -+static void destroy_inodecache(void) -+{ -+ kmem_cache_destroy(squashfs_inode_cachep); -+} -+ -+ -+module_init(init_squashfs_fs); -+module_exit(exit_squashfs_fs); -+MODULE_DESCRIPTION("squashfs 3.2-r2-CVS, a compressed read-only filesystem"); -+MODULE_AUTHOR("Phillip Lougher "); -+MODULE_LICENSE("GPL"); -diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/Makefile linux-2.6.24-squashfs3.3/fs/squashfs/Makefile ---- linux-2.6.24/fs/squashfs/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/fs/squashfs/Makefile 2005-11-20 14:31:00.000000000 +0000 -@@ -0,0 +1,7 @@ -+# -+# Makefile for the linux squashfs routines. -+# -+ -+obj-$(CONFIG_SQUASHFS) += squashfs.o -+squashfs-y += inode.o -+squashfs-y += squashfs2_0.o -diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/squashfs2_0.c linux-2.6.24-squashfs3.3/fs/squashfs/squashfs2_0.c ---- linux-2.6.24/fs/squashfs/squashfs2_0.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/fs/squashfs/squashfs2_0.c 2007-10-25 00:43:59.000000000 +0100 -@@ -0,0 +1,740 @@ -+/* -+ * Squashfs - a compressed read only filesystem for Linux -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs2_0.c -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "squashfs.h" -+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir); -+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *, -+ struct nameidata *); -+ -+static struct file_operations squashfs_dir_ops_2 = { -+ .read = generic_read_dir, -+ .readdir = squashfs_readdir_2 -+}; -+ -+static struct inode_operations squashfs_dir_inode_ops_2 = { -+ .lookup = squashfs_lookup_2 -+}; -+ -+static unsigned char squashfs_filetype_table[] = { -+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK -+}; -+ -+static int read_fragment_index_table_2(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2 -+ (sblk->fragments), GFP_KERNEL))) { -+ ERROR("Failed to allocate uid/gid table\n"); -+ return 0; -+ } -+ -+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) && -+ !squashfs_read_data(s, (char *) -+ msblk->fragment_index_2, -+ sblk->fragment_table_start, -+ SQUASHFS_FRAGMENT_INDEX_BYTES_2 -+ (sblk->fragments) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) { -+ ERROR("unable to read fragment index table\n"); -+ return 0; -+ } -+ -+ if (msblk->swap) { -+ int i; -+ unsigned int fragment; -+ -+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments); -+ i++) { -+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment), -+ &msblk->fragment_index_2[i], 1); -+ msblk->fragment_index_2[i] = fragment; -+ } -+ } -+ -+ return 1; -+} -+ -+ -+static int get_fragment_location_2(struct super_block *s, unsigned int fragment, -+ long long *fragment_start_block, -+ unsigned int *fragment_size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ long long start_block = -+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)]; -+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment); -+ struct squashfs_fragment_entry_2 fragment_entry; -+ -+ if (msblk->swap) { -+ struct squashfs_fragment_entry_2 sfragment_entry; -+ -+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, -+ start_block, offset, -+ sizeof(sfragment_entry), &start_block, -+ &offset)) -+ goto out; -+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, -+ start_block, offset, -+ sizeof(fragment_entry), &start_block, -+ &offset)) -+ goto out; -+ -+ *fragment_start_block = fragment_entry.start_block; -+ *fragment_size = fragment_entry.size; -+ -+ return 1; -+ -+out: -+ return 0; -+} -+ -+ -+static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, -+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino) -+{ -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ i->i_ino = ino; -+ i->i_mtime.tv_sec = sblk->mkfs_time; -+ i->i_atime.tv_sec = sblk->mkfs_time; -+ i->i_ctime.tv_sec = sblk->mkfs_time; -+ i->i_uid = msblk->uid[inodeb->uid]; -+ i->i_mode = inodeb->mode; -+ i->i_nlink = 1; -+ i->i_size = 0; -+ if (inodeb->guid == SQUASHFS_GUIDS) -+ i->i_gid = i->i_uid; -+ else -+ i->i_gid = msblk->guid[inodeb->guid]; -+} -+ -+ -+static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode) -+{ -+ struct super_block *s = i->i_sb; -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned int block = SQUASHFS_INODE_BLK(inode) + -+ sblk->inode_table_start; -+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); -+ unsigned int ino = SQUASHFS_MK_VFS_INODE(block - -+ sblk->inode_table_start, offset); -+ long long next_block; -+ unsigned int next_offset; -+ union squashfs_inode_header_2 id, sid; -+ struct squashfs_base_inode_header_2 *inodeb = &id.base, -+ *sinodeb = &sid.base; -+ -+ TRACE("Entered squashfs_read_inode_2\n"); -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, -+ offset, sizeof(*sinodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb, -+ sizeof(*sinodeb)); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) inodeb, block, -+ offset, sizeof(*inodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ squashfs_new_inode(msblk, i, inodeb, ino); -+ -+ switch(inodeb->inode_type) { -+ case SQUASHFS_FILE_TYPE: { -+ struct squashfs_reg_inode_header_2 *inodep = &id.reg; -+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg; -+ long long frag_blk; -+ unsigned int frag_size = 0; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ frag_blk = SQUASHFS_INVALID_BLK; -+ if (inodep->fragment != SQUASHFS_INVALID_FRAG && -+ !get_fragment_location_2(s, -+ inodep->fragment, &frag_blk, &frag_size)) -+ goto failed_read; -+ -+ i->i_size = inodep->file_size; -+ i->i_fop = &generic_ro_fops; -+ i->i_mode |= S_IFREG; -+ i->i_mtime.tv_sec = inodep->mtime; -+ i->i_atime.tv_sec = inodep->mtime; -+ i->i_ctime.tv_sec = inodep->mtime; -+ i->i_blocks = ((i->i_size - 1) >> 9) + 1; -+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; -+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; -+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->u.s1.block_list_start = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ i->i_data.a_ops = &squashfs_aops; -+ -+ TRACE("File inode %x:%x, start_block %x, " -+ "block_list_start %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, next_block, -+ next_offset); -+ break; -+ } -+ case SQUASHFS_DIR_TYPE: { -+ struct squashfs_dir_inode_header_2 *inodep = &id.dir; -+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops_2; -+ i->i_fop = &squashfs_dir_ops_2; -+ i->i_mode |= S_IFDIR; -+ i->i_mtime.tv_sec = inodep->mtime; -+ i->i_atime.tv_sec = inodep->mtime; -+ i->i_ctime.tv_sec = inodep->mtime; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = 0; -+ SQUASHFS_I(i)->u.s2.parent_inode = 0; -+ -+ TRACE("Directory inode %x:%x, start_block %x, offset " -+ "%x\n", SQUASHFS_INODE_BLK(inode), -+ offset, inodep->start_block, -+ inodep->offset); -+ break; -+ } -+ case SQUASHFS_LDIR_TYPE: { -+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir; -+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops_2; -+ i->i_fop = &squashfs_dir_ops_2; -+ i->i_mode |= S_IFDIR; -+ i->i_mtime.tv_sec = inodep->mtime; -+ i->i_atime.tv_sec = inodep->mtime; -+ i->i_ctime.tv_sec = inodep->mtime; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; -+ SQUASHFS_I(i)->u.s2.directory_index_offset = -+ next_offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = -+ inodep->i_count; -+ SQUASHFS_I(i)->u.s2.parent_inode = 0; -+ -+ TRACE("Long directory inode %x:%x, start_block %x, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, inodep->offset); -+ break; -+ } -+ case SQUASHFS_SYMLINK_TYPE: { -+ struct squashfs_symlink_inode_header_2 *inodep = -+ &id.symlink; -+ struct squashfs_symlink_inode_header_2 *sinodep = -+ &sid.symlink; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_size = inodep->symlink_size; -+ i->i_op = &page_symlink_inode_operations; -+ i->i_data.a_ops = &squashfs_symlink_aops; -+ i->i_mode |= S_IFLNK; -+ SQUASHFS_I(i)->start_block = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ -+ TRACE("Symbolic link inode %x:%x, start_block %llx, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ next_block, next_offset); -+ break; -+ } -+ case SQUASHFS_BLKDEV_TYPE: -+ case SQUASHFS_CHRDEV_TYPE: { -+ struct squashfs_dev_inode_header_2 *inodep = &id.dev; -+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_mode |= (inodeb->inode_type == -+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : -+ S_IFBLK; -+ init_special_inode(i, i->i_mode, -+ old_decode_dev(inodep->rdev)); -+ -+ TRACE("Device inode %x:%x, rdev %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->rdev); -+ break; -+ } -+ case SQUASHFS_FIFO_TYPE: -+ case SQUASHFS_SOCKET_TYPE: { -+ -+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) -+ ? S_IFIFO : S_IFSOCK; -+ init_special_inode(i, i->i_mode, 0); -+ break; -+ } -+ default: -+ ERROR("Unknown inode type %d in squashfs_iget!\n", -+ inodeb->inode_type); -+ goto failed_read1; -+ } -+ -+ return 1; -+ -+failed_read: -+ ERROR("Unable to read inode [%x:%x]\n", block, offset); -+ -+failed_read1: -+ return 0; -+} -+ -+ -+static int get_dir_index_using_offset(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ long long f_pos) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index_2 index; -+ -+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", -+ i_count, (unsigned int) f_pos); -+ -+ if (f_pos == 0) -+ goto finish; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index_2 sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) &index, -+ index_start, index_offset, -+ sizeof(index), &index_start, -+ &index_offset); -+ -+ if (index.index > f_pos) -+ break; -+ -+ squashfs_get_cached_block(s, NULL, index_start, index_offset, -+ index.size + 1, &index_start, -+ &index_offset); -+ -+ length = index.index; -+ *next_block = index.start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ -+finish: -+ return length; -+} -+ -+ -+static int get_dir_index_using_name(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ const char *name, int size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index_2 *index; -+ char *str; -+ -+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); -+ -+ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + -+ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_index\n"); -+ goto failure; -+ } -+ -+ index = (struct squashfs_dir_index_2 *) (str + SQUASHFS_NAME_LEN + 1); -+ strncpy(str, name, size); -+ str[size] = '\0'; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index_2 sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) index, -+ index_start, index_offset, -+ sizeof(struct squashfs_dir_index_2), -+ &index_start, &index_offset); -+ -+ squashfs_get_cached_block(s, index->name, index_start, -+ index_offset, index->size + 1, -+ &index_start, &index_offset); -+ -+ index->name[index->size + 1] = '\0'; -+ -+ if (strcmp(index->name, str) > 0) -+ break; -+ -+ length = index->index; -+ *next_block = index->start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ kfree(str); -+failure: -+ return length; -+} -+ -+ -+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir) -+{ -+ struct inode *i = file->f_dentry->d_inode; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header_2 dirh; -+ struct squashfs_dir_entry_2 *dire; -+ -+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto finish; -+ } -+ -+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, -+ file->f_pos); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header_2 sdirh; -+ -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry_2 sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block, next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block, next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, -+ dire->size + 1, &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (file->f_pos >= length) -+ continue; -+ -+ dire->name[dire->size + 1] = '\0'; -+ -+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n", -+ (unsigned int) dirent, dire->name, -+ dire->size + 1, (int) file->f_pos, -+ dirh.start_block, dire->offset, -+ squashfs_filetype_table[dire->type]); -+ -+ if (filldir(dirent, dire->name, dire->size + 1, -+ file->f_pos, SQUASHFS_MK_VFS_INODE( -+ dirh.start_block, dire->offset), -+ squashfs_filetype_table[dire->type]) -+ < 0) { -+ TRACE("Filldir returned less than 0\n"); -+ goto finish; -+ } -+ file->f_pos = length; -+ } -+ } -+ -+finish: -+ kfree(dire); -+ return 0; -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ kfree(dire); -+ return 0; -+} -+ -+ -+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry, -+ struct nameidata *nd) -+{ -+ const unsigned char *name = dentry->d_name.name; -+ int len = dentry->d_name.len; -+ struct inode *inode = NULL; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header_2 dirh; -+ struct squashfs_dir_entry_2 *dire; -+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1; -+ -+ TRACE("Entered squashfs_lookup_2 [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto exit_loop; -+ } -+ -+ if (len > SQUASHFS_NAME_LEN) -+ goto exit_loop; -+ -+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, name, -+ len); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header_2 sdirh; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry_2 sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block,next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block,next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, dire->size + 1, -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (sorted && name[0] < dire->name[0]) -+ goto exit_loop; -+ -+ if ((len == dire->size + 1) && !strncmp(name, -+ dire->name, len)) { -+ squashfs_inode_t ino = -+ SQUASHFS_MKINODE(dirh.start_block, -+ dire->offset); -+ unsigned int inode_number = SQUASHFS_MK_VFS_INODE(dirh.start_block, -+ dire->offset); -+ -+ TRACE("calling squashfs_iget for directory " -+ "entry %s, inode %x:%x, %lld\n", name, -+ dirh.start_block, dire->offset, ino); -+ -+ inode = squashfs_iget(i->i_sb, ino, inode_number); -+ -+ goto exit_loop; -+ } -+ } -+ } -+ -+exit_loop: -+ kfree(dire); -+ d_add(dentry, inode); -+ return ERR_PTR(0); -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ goto exit_loop; -+} -+ -+ -+int squashfs_2_0_supported(struct squashfs_sb_info *msblk) -+{ -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ msblk->read_inode = squashfs_read_inode_2; -+ msblk->read_fragment_index_table = read_fragment_index_table_2; -+ -+ sblk->bytes_used = sblk->bytes_used_2; -+ sblk->uid_start = sblk->uid_start_2; -+ sblk->guid_start = sblk->guid_start_2; -+ sblk->inode_table_start = sblk->inode_table_start_2; -+ sblk->directory_table_start = sblk->directory_table_start_2; -+ sblk->fragment_table_start = sblk->fragment_table_start_2; -+ -+ return 1; -+} -diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/squashfs.h linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h ---- linux-2.6.24/fs/squashfs/squashfs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h 2007-08-19 04:23:16.000000000 +0100 -@@ -0,0 +1,86 @@ -+/* -+ * Squashfs - a compressed read only filesystem for Linux -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs.h -+ */ -+ -+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+#endif -+ -+#ifdef SQUASHFS_TRACE -+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args) -+#else -+#define TRACE(s, args...) {} -+#endif -+ -+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args) -+ -+#define SERROR(s, args...) do { \ -+ if (!silent) \ -+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\ -+ } while(0) -+ -+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args) -+ -+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode) -+{ -+ return list_entry(inode, struct squashfs_inode_info, vfs_inode); -+} -+ -+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY) -+#define SQSH_EXTERN -+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer, -+ long long index, unsigned int length, -+ long long *next_index, int srclength); -+extern int squashfs_get_cached_block(struct super_block *s, void *buffer, -+ long long block, unsigned int offset, -+ int length, long long *next_block, -+ unsigned int *next_offset); -+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct -+ squashfs_fragment_cache *fragment); -+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block -+ *s, long long start_block, -+ int length); -+extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number); -+extern const struct address_space_operations squashfs_symlink_aops; -+extern const struct address_space_operations squashfs_aops; -+extern struct inode_operations squashfs_dir_inode_ops; -+#else -+#define SQSH_EXTERN static -+#endif -+ -+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk); -+#else -+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk) -+{ -+ return 0; -+} -+#endif -+ -+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY -+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk); -+#else -+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk) -+{ -+ return 0; -+} -+#endif -diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h ---- linux-2.6.24/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h 2007-11-01 03:50:57.000000000 +0000 -@@ -0,0 +1,935 @@ -+#ifndef SQUASHFS_FS -+#define SQUASHFS_FS -+ -+/* -+ * Squashfs -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs_fs.h -+ */ -+ -+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY -+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY -+#endif -+ -+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE -+#define SQUASHFS_MAJOR 3 -+#define SQUASHFS_MINOR 1 -+#define SQUASHFS_MAGIC 0x73717368 -+#define SQUASHFS_MAGIC_SWAP 0x68737173 -+#define SQUASHFS_START 0 -+ -+/* size of metadata (inode and directory) blocks */ -+#define SQUASHFS_METADATA_SIZE 8192 -+#define SQUASHFS_METADATA_LOG 13 -+ -+/* default size of data blocks */ -+#define SQUASHFS_FILE_SIZE 131072 -+#define SQUASHFS_FILE_LOG 17 -+ -+#define SQUASHFS_FILE_MAX_SIZE 1048576 -+ -+/* Max number of uids and gids */ -+#define SQUASHFS_UIDS 256 -+#define SQUASHFS_GUIDS 255 -+ -+/* Max length of filename (not 255) */ -+#define SQUASHFS_NAME_LEN 256 -+ -+#define SQUASHFS_INVALID ((long long) 0xffffffffffff) -+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff) -+#define SQUASHFS_INVALID_BLK ((long long) -1) -+#define SQUASHFS_USED_BLK ((long long) -2) -+ -+/* Filesystem flags */ -+#define SQUASHFS_NOI 0 -+#define SQUASHFS_NOD 1 -+#define SQUASHFS_CHECK 2 -+#define SQUASHFS_NOF 3 -+#define SQUASHFS_NO_FRAG 4 -+#define SQUASHFS_ALWAYS_FRAG 5 -+#define SQUASHFS_DUPLICATE 6 -+#define SQUASHFS_EXPORT 7 -+ -+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1) -+ -+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NOI) -+ -+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NOD) -+ -+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NOF) -+ -+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NO_FRAG) -+ -+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_ALWAYS_FRAG) -+ -+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_DUPLICATE) -+ -+#define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_EXPORT) -+ -+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_CHECK) -+ -+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \ -+ duplicate_checking, exortable) (noi | (nod << 1) | (check_data << 2) \ -+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \ -+ (duplicate_checking << 6) | (exportable << 7)) -+ -+/* Max number of types and file types */ -+#define SQUASHFS_DIR_TYPE 1 -+#define SQUASHFS_FILE_TYPE 2 -+#define SQUASHFS_SYMLINK_TYPE 3 -+#define SQUASHFS_BLKDEV_TYPE 4 -+#define SQUASHFS_CHRDEV_TYPE 5 -+#define SQUASHFS_FIFO_TYPE 6 -+#define SQUASHFS_SOCKET_TYPE 7 -+#define SQUASHFS_LDIR_TYPE 8 -+#define SQUASHFS_LREG_TYPE 9 -+ -+/* 1.0 filesystem type definitions */ -+#define SQUASHFS_TYPES 5 -+#define SQUASHFS_IPC_TYPE 0 -+ -+/* Flag whether block is compressed or uncompressed, bit is set if block is -+ * uncompressed */ -+#define SQUASHFS_COMPRESSED_BIT (1 << 15) -+ -+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \ -+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT) -+ -+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT)) -+ -+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24) -+ -+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) ((B) & \ -+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) -+ -+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) -+ -+/* -+ * Inode number ops. Inodes consist of a compressed block number, and an -+ * uncompressed offset within that block -+ */ -+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16)) -+ -+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff)) -+ -+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\ -+ << 16) + (B))) -+ -+/* Compute 32 bit VFS inode number from squashfs inode number */ -+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \ -+ ((b) >> 2) + 1)) -+/* XXX */ -+ -+/* Translate between VFS mode and squashfs mode */ -+#define SQUASHFS_MODE(a) ((a) & 0xfff) -+ -+/* fragment and fragment table defines */ -+#define SQUASHFS_FRAGMENT_BYTES(A) ((A) * sizeof(struct squashfs_fragment_entry)) -+ -+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \ -+ SQUASHFS_METADATA_SIZE - 1) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\ -+ sizeof(long long)) -+ -+/* inode lookup table defines */ -+#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode_t)) -+ -+#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \ -+ SQUASHFS_METADATA_SIZE - 1) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\ -+ sizeof(long long)) -+ -+/* cached data constants for filesystem */ -+#define SQUASHFS_CACHED_BLKS 8 -+ -+#define SQUASHFS_MAX_FILE_SIZE_LOG 64 -+ -+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \ -+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2)) -+ -+#define SQUASHFS_MARKER_BYTE 0xff -+ -+/* meta index cache */ -+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int)) -+#define SQUASHFS_META_ENTRIES 31 -+#define SQUASHFS_META_NUMBER 8 -+#define SQUASHFS_SLOTS 4 -+ -+struct meta_entry { -+ long long data_block; -+ unsigned int index_block; -+ unsigned short offset; -+ unsigned short pad; -+}; -+ -+struct meta_index { -+ unsigned int inode_number; -+ unsigned int offset; -+ unsigned short entries; -+ unsigned short skip; -+ unsigned short locked; -+ unsigned short pad; -+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES]; -+}; -+ -+ -+/* -+ * definitions for structures on disk -+ */ -+ -+typedef long long squashfs_block_t; -+typedef long long squashfs_inode_t; -+ -+struct squashfs_super_block { -+ unsigned int s_magic; -+ unsigned int inodes; -+ unsigned int bytes_used_2; -+ unsigned int uid_start_2; -+ unsigned int guid_start_2; -+ unsigned int inode_table_start_2; -+ unsigned int directory_table_start_2; -+ unsigned int s_major:16; -+ unsigned int s_minor:16; -+ unsigned int block_size_1:16; -+ unsigned int block_log:16; -+ unsigned int flags:8; -+ unsigned int no_uids:8; -+ unsigned int no_guids:8; -+ unsigned int mkfs_time /* time of filesystem creation */; -+ squashfs_inode_t root_inode; -+ unsigned int block_size; -+ unsigned int fragments; -+ unsigned int fragment_table_start_2; -+ long long bytes_used; -+ long long uid_start; -+ long long guid_start; -+ long long inode_table_start; -+ long long directory_table_start; -+ long long fragment_table_start; -+ long long lookup_table_start; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_index { -+ unsigned int index; -+ unsigned int start_block; -+ unsigned char size; -+ unsigned char name[0]; -+} __attribute__ ((packed)); -+ -+#define SQUASHFS_BASE_INODE_HEADER \ -+ unsigned int inode_type:4; \ -+ unsigned int mode:12; \ -+ unsigned int uid:8; \ -+ unsigned int guid:8; \ -+ unsigned int mtime; \ -+ unsigned int inode_number; -+ -+struct squashfs_base_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+} __attribute__ ((packed)); -+ -+struct squashfs_ipc_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+} __attribute__ ((packed)); -+ -+struct squashfs_dev_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned short rdev; -+} __attribute__ ((packed)); -+ -+struct squashfs_symlink_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned short symlink_size; -+ char symlink[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_reg_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ squashfs_block_t start_block; -+ unsigned int fragment; -+ unsigned int offset; -+ unsigned int file_size; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_lreg_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ squashfs_block_t start_block; -+ unsigned int fragment; -+ unsigned int offset; -+ long long file_size; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned int file_size:19; -+ unsigned int offset:13; -+ unsigned int start_block; -+ unsigned int parent_inode; -+} __attribute__ ((packed)); -+ -+struct squashfs_ldir_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned int file_size:27; -+ unsigned int offset:13; -+ unsigned int start_block; -+ unsigned int i_count:16; -+ unsigned int parent_inode; -+ struct squashfs_dir_index index[0]; -+} __attribute__ ((packed)); -+ -+union squashfs_inode_header { -+ struct squashfs_base_inode_header base; -+ struct squashfs_dev_inode_header dev; -+ struct squashfs_symlink_inode_header symlink; -+ struct squashfs_reg_inode_header reg; -+ struct squashfs_lreg_inode_header lreg; -+ struct squashfs_dir_inode_header dir; -+ struct squashfs_ldir_inode_header ldir; -+ struct squashfs_ipc_inode_header ipc; -+}; -+ -+struct squashfs_dir_entry { -+ unsigned int offset:13; -+ unsigned int type:3; -+ unsigned int size:8; -+ int inode_number:16; -+ char name[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_header { -+ unsigned int count:8; -+ unsigned int start_block; -+ unsigned int inode_number; -+} __attribute__ ((packed)); -+ -+struct squashfs_fragment_entry { -+ long long start_block; -+ unsigned int size; -+ unsigned int pending; -+} __attribute__ ((packed)); -+ -+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen); -+extern int squashfs_uncompress_init(void); -+extern int squashfs_uncompress_exit(void); -+ -+/* -+ * macros to convert each packed bitfield structure from little endian to big -+ * endian and vice versa. These are needed when creating or using a filesystem -+ * on a machine with different byte ordering to the target architecture. -+ * -+ */ -+ -+#define SQUASHFS_SWAP_START \ -+ int bits;\ -+ int b_pos;\ -+ unsigned long long val;\ -+ unsigned char *s;\ -+ unsigned char *d; -+ -+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\ -+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\ -+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\ -+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\ -+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\ -+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\ -+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\ -+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\ -+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\ -+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\ -+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\ -+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\ -+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\ -+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\ -+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\ -+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\ -+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\ -+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\ -+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\ -+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\ -+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\ -+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\ -+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\ -+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\ -+ SQUASHFS_SWAP((s)->lookup_table_start, d, 888, 64);\ -+} -+ -+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ -+ SQUASHFS_MEMSET(s, d, n);\ -+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ -+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ -+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ -+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ -+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32); -+ -+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ -+} -+ -+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_ipc_inode_header))\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_dev_inode_header)); \ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\ -+} -+ -+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_symlink_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\ -+} -+ -+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_reg_inode_header));\ -+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\ -+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\ -+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\ -+} -+ -+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_lreg_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\ -+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\ -+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_dir_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\ -+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\ -+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\ -+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\ -+} -+ -+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_ldir_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\ -+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\ -+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\ -+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\ -+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\ -+ SQUASHFS_SWAP((s)->index, d, 0, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->size, d, 64, 8);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\ -+ SQUASHFS_SWAP((s)->count, d, 0, 8);\ -+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\ -+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\ -+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ -+ SQUASHFS_SWAP((s)->type, d, 13, 3);\ -+ SQUASHFS_SWAP((s)->size, d, 16, 8);\ -+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\ -+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\ -+ SQUASHFS_SWAP((s)->size, d, 64, 32);\ -+} -+ -+#define SQUASHFS_SWAP_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1) -+ -+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * 2);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ 16)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\ -+} -+ -+#define SQUASHFS_SWAP_INTS(s, d, n) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * 4);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ 32)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\ -+} -+ -+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * 8);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ 64)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\ -+} -+ -+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * bits / 8);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ bits)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) -+#define SQUASHFS_SWAP_LOOKUP_BLOCKS(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) -+ -+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+ -+struct squashfs_base_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+} __attribute__ ((packed)); -+ -+struct squashfs_ipc_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned int type:4; -+ unsigned int offset:4; -+} __attribute__ ((packed)); -+ -+struct squashfs_dev_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned short rdev; -+} __attribute__ ((packed)); -+ -+struct squashfs_symlink_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned short symlink_size; -+ char symlink[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_reg_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned int mtime; -+ unsigned int start_block; -+ unsigned int file_size:32; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned int file_size:19; -+ unsigned int offset:13; -+ unsigned int mtime; -+ unsigned int start_block:24; -+} __attribute__ ((packed)); -+ -+union squashfs_inode_header_1 { -+ struct squashfs_base_inode_header_1 base; -+ struct squashfs_dev_inode_header_1 dev; -+ struct squashfs_symlink_inode_header_1 symlink; -+ struct squashfs_reg_inode_header_1 reg; -+ struct squashfs_dir_inode_header_1 dir; -+ struct squashfs_ipc_inode_header_1 ipc; -+}; -+ -+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \ -+ SQUASHFS_MEMSET(s, d, n);\ -+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ -+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ -+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\ -+ SQUASHFS_SWAP((s)->guid, d, 20, 4); -+ -+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\ -+} -+ -+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_ipc_inode_header_1));\ -+ SQUASHFS_SWAP((s)->type, d, 24, 4);\ -+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\ -+} -+ -+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_dev_inode_header_1));\ -+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\ -+} -+ -+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_symlink_inode_header_1));\ -+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\ -+} -+ -+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_reg_inode_header_1));\ -+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_dir_inode_header_1));\ -+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\ -+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\ -+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\ -+} -+ -+#endif -+ -+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY -+ -+struct squashfs_dir_index_2 { -+ unsigned int index:27; -+ unsigned int start_block:29; -+ unsigned char size; -+ unsigned char name[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_base_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+} __attribute__ ((packed)); -+ -+struct squashfs_ipc_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+} __attribute__ ((packed)); -+ -+struct squashfs_dev_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned short rdev; -+} __attribute__ ((packed)); -+ -+struct squashfs_symlink_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned short symlink_size; -+ char symlink[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_reg_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned int mtime; -+ unsigned int start_block; -+ unsigned int fragment; -+ unsigned int offset; -+ unsigned int file_size:32; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned int file_size:19; -+ unsigned int offset:13; -+ unsigned int mtime; -+ unsigned int start_block:24; -+} __attribute__ ((packed)); -+ -+struct squashfs_ldir_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned int file_size:27; -+ unsigned int offset:13; -+ unsigned int mtime; -+ unsigned int start_block:24; -+ unsigned int i_count:16; -+ struct squashfs_dir_index_2 index[0]; -+} __attribute__ ((packed)); -+ -+union squashfs_inode_header_2 { -+ struct squashfs_base_inode_header_2 base; -+ struct squashfs_dev_inode_header_2 dev; -+ struct squashfs_symlink_inode_header_2 symlink; -+ struct squashfs_reg_inode_header_2 reg; -+ struct squashfs_dir_inode_header_2 dir; -+ struct squashfs_ldir_inode_header_2 ldir; -+ struct squashfs_ipc_inode_header_2 ipc; -+}; -+ -+struct squashfs_dir_header_2 { -+ unsigned int count:8; -+ unsigned int start_block:24; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_entry_2 { -+ unsigned int offset:13; -+ unsigned int type:3; -+ unsigned int size:8; -+ char name[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_fragment_entry_2 { -+ unsigned int start_block; -+ unsigned int size; -+} __attribute__ ((packed)); -+ -+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ -+ SQUASHFS_MEMSET(s, d, n);\ -+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ -+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ -+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ -+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ -+ -+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ -+} -+ -+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \ -+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2)) -+ -+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_dev_inode_header_2)); \ -+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\ -+} -+ -+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_symlink_inode_header_2));\ -+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\ -+} -+ -+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_reg_inode_header_2));\ -+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\ -+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_dir_inode_header_2));\ -+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\ -+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\ -+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\ -+} -+ -+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_ldir_inode_header_2));\ -+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\ -+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\ -+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\ -+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\ -+ SQUASHFS_SWAP((s)->index, d, 0, 27);\ -+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\ -+ SQUASHFS_SWAP((s)->size, d, 56, 8);\ -+} -+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\ -+ SQUASHFS_SWAP((s)->count, d, 0, 8);\ -+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\ -+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ -+ SQUASHFS_SWAP((s)->type, d, 13, 3);\ -+ SQUASHFS_SWAP((s)->size, d, 16, 8);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\ -+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\ -+ SQUASHFS_SWAP((s)->size, d, 32, 32);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n) -+ -+/* fragment and fragment table defines */ -+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2)) -+ -+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \ -+ SQUASHFS_METADATA_SIZE - 1) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\ -+ sizeof(int)) -+ -+#endif -+ -+#ifdef __KERNEL__ -+ -+/* -+ * macros used to swap each structure entry, taking into account -+ * bitfields and different bitfield placing conventions on differing -+ * architectures -+ */ -+ -+#include -+ -+#ifdef __BIG_ENDIAN -+ /* convert from little endian to big endian */ -+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ -+ tbits, b_pos) -+#else -+ /* convert from big endian to little endian */ -+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ -+ tbits, 64 - tbits - b_pos) -+#endif -+ -+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\ -+ b_pos = pos % 8;\ -+ val = 0;\ -+ s = (unsigned char *)p + (pos / 8);\ -+ d = ((unsigned char *) &val) + 7;\ -+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \ -+ *d-- = *s++;\ -+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\ -+} -+ -+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n); -+ -+#endif -+#endif -diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_i.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h ---- linux-2.6.24/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h 2007-08-19 04:24:08.000000000 +0100 -@@ -0,0 +1,45 @@ -+#ifndef SQUASHFS_FS_I -+#define SQUASHFS_FS_I -+/* -+ * Squashfs -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs_fs_i.h -+ */ -+ -+struct squashfs_inode_info { -+ long long start_block; -+ unsigned int offset; -+ union { -+ struct { -+ long long fragment_start_block; -+ unsigned int fragment_size; -+ unsigned int fragment_offset; -+ long long block_list_start; -+ } s1; -+ struct { -+ long long directory_index_start; -+ unsigned int directory_index_offset; -+ unsigned int directory_index_count; -+ unsigned int parent_inode; -+ } s2; -+ } u; -+ struct inode vfs_inode; -+}; -+#endif -diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_sb.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h ---- linux-2.6.24/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h 2007-08-19 04:24:26.000000000 +0100 -@@ -0,0 +1,76 @@ -+#ifndef SQUASHFS_FS_SB -+#define SQUASHFS_FS_SB -+/* -+ * Squashfs -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs_fs_sb.h -+ */ -+ -+#include -+ -+struct squashfs_cache { -+ long long block; -+ int length; -+ long long next_index; -+ char *data; -+}; -+ -+struct squashfs_fragment_cache { -+ long long block; -+ int length; -+ unsigned int locked; -+ char *data; -+}; -+ -+struct squashfs_sb_info { -+ struct squashfs_super_block sblk; -+ int devblksize; -+ int devblksize_log2; -+ int swap; -+ struct squashfs_cache *block_cache; -+ struct squashfs_fragment_cache *fragment; -+ int next_cache; -+ int next_fragment; -+ int next_meta_index; -+ unsigned int *uid; -+ unsigned int *guid; -+ long long *fragment_index; -+ unsigned int *fragment_index_2; -+ char *read_page; -+ struct mutex read_data_mutex; -+ struct mutex read_page_mutex; -+ struct mutex block_cache_mutex; -+ struct mutex fragment_mutex; -+ struct mutex meta_index_mutex; -+ wait_queue_head_t waitq; -+ wait_queue_head_t fragment_wait_queue; -+ struct meta_index *meta_index; -+ z_stream stream; -+ long long *inode_lookup_table; -+ int unused_cache_blks; -+ int unused_frag_blks; -+ int (*read_inode)(struct inode *i, squashfs_inode_t \ -+ inode); -+ long long (*read_blocklist)(struct inode *inode, int \ -+ index, int readahead_blks, char *block_list, \ -+ unsigned short **block_p, unsigned int *bsize); -+ int (*read_fragment_index_table)(struct super_block *s); -+}; -+#endif -diff -x .gitignore -Nurp linux-2.6.24/init/do_mounts_rd.c linux-2.6.24-squashfs3.3/init/do_mounts_rd.c ---- linux-2.6.24/init/do_mounts_rd.c 2007-10-25 17:41:49.000000000 +0100 -+++ linux-2.6.24-squashfs3.3/init/do_mounts_rd.c 2007-11-01 05:06:25.000000000 +0000 -@@ -5,6 +5,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in - * numbers could not be found. - * - * We currently check for the following magic numbers: -+ * squashfs - * minix - * ext2 - * romfs -@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start - struct ext2_super_block *ext2sb; - struct romfs_super_block *romfsb; - struct cramfs_super *cramfsb; -+ struct squashfs_super_block *squashfsb; - int nblocks = -1; - unsigned char *buf; - -@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start - ext2sb = (struct ext2_super_block *) buf; - romfsb = (struct romfs_super_block *) buf; - cramfsb = (struct cramfs_super *) buf; -+ squashfsb = (struct squashfs_super_block *) buf; - memset(buf, 0xe5, size); - - /* -@@ -101,6 +105,18 @@ identify_ramdisk_image(int fd, int start - goto done; - } - -+ /* squashfs is at block zero too */ -+ if (squashfsb->s_magic == SQUASHFS_MAGIC) { -+ printk(KERN_NOTICE -+ "RAMDISK: squashfs filesystem found at block %d\n", -+ start_block); -+ if (squashfsb->s_major < 3) -+ nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; -+ else -+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; -+ goto done; -+ } -+ - /* - * Read block 1 to test for minix and ext2 superblock - */ diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/versatile-armv6.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/versatile-armv6.patch deleted file mode 100644 index e2d0060ac3..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/versatile-armv6.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- - arch/arm/mm/Kconfig | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- linux-2.6.23.orig/arch/arm/mm/Kconfig -+++ linux-2.6.23/arch/arm/mm/Kconfig -@@ -343,11 +343,11 @@ config CPU_XSC3 - select IO_36 - - # ARMv6 - config CPU_V6 - bool "Support ARM V6 processor" -- depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 -+ depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_VERSATILE_PB - default y if ARCH_MX3 - select CPU_32v6 - select CPU_ABRT_EV6 - select CPU_CACHE_V6 - select CPU_CACHE_VIPT diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/zylonite-boot.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc8/zylonite-boot.patch deleted file mode 100644 index f41928eca5..0000000000 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc8/zylonite-boot.patch +++ /dev/null @@ -1,45 +0,0 @@ -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.24/.mtn2git_empty b/packages/linux/linux-rp-2.6.24/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-rp-2.6.24/binutils-buildid-arm.patch b/packages/linux/linux-rp-2.6.24/binutils-buildid-arm.patch new file mode 100644 index 0000000000..68e35e89e1 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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.24/connectplus-prevent-oops-HACK.patch b/packages/linux/linux-rp-2.6.24/connectplus-prevent-oops-HACK.patch new file mode 100644 index 0000000000..b5439c62e7 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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.24/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.24/connectplus-remove-ide-HACK.patch new file mode 100644 index 0000000000..4414b21191 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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.24/defconfig-akita b/packages/linux/linux-rp-2.6.24/defconfig-akita new file mode 100644 index 0000000000..5e4560c39d --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/defconfig-akita @@ -0,0 +1,1740 @@ +# +# 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=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=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 + +# +# 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.24/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.24/defconfig-bootcdx86 new file mode 100644 index 0000000000..fda13665cd --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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=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_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.24/defconfig-c7x0 b/packages/linux/linux-rp-2.6.24/defconfig-c7x0 new file mode 100644 index 0000000000..a47e843a2e --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/defconfig-c7x0 @@ -0,0 +1,1746 @@ +# +# 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=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=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 + +# +# 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.24/defconfig-collie b/packages/linux/linux-rp-2.6.24/defconfig-collie new file mode 100644 index 0000000000..d4b813e2cf --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/defconfig-collie @@ -0,0 +1,1436 @@ +# +# 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=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=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 + +# +# 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.24/defconfig-htcuniversal b/packages/linux/linux-rp-2.6.24/defconfig-htcuniversal new file mode 100644 index 0000000000..f121ddea90 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/defconfig-htcuniversal @@ -0,0 +1,1307 @@ +# +# 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=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=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 + +# +# 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.24/defconfig-hx2000 b/packages/linux/linux-rp-2.6.24/defconfig-hx2000 new file mode 100644 index 0000000000..41eee3854a --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=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.24/defconfig-poodle b/packages/linux/linux-rp-2.6.24/defconfig-poodle new file mode 100644 index 0000000000..ecffc3aba6 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/defconfig-poodle @@ -0,0 +1,1756 @@ +# +# 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=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=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 + +# +# 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.24/defconfig-qemuarm b/packages/linux/linux-rp-2.6.24/defconfig-qemuarm new file mode 100644 index 0000000000..d2b8265214 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=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.24/defconfig-qemux86 b/packages/linux/linux-rp-2.6.24/defconfig-qemux86 new file mode 100644 index 0000000000..e0094fec3c --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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=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_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.24/defconfig-spitz b/packages/linux/linux-rp-2.6.24/defconfig-spitz new file mode 100644 index 0000000000..d0226301f7 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/defconfig-spitz @@ -0,0 +1,1740 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 18:32:23 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=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=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=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/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_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 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=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 + +# +# 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=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=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_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 + +# +# 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=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=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_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=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.24/defconfig-zylonite b/packages/linux/linux-rp-2.6.24/defconfig-zylonite new file mode 100644 index 0000000000..0cf0b23db5 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=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.24/hostap-monitor-mode.patch b/packages/linux/linux-rp-2.6.24/hostap-monitor-mode.patch new file mode 100644 index 0000000000..641fd19e50 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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.24/htcuni-acx.patch b/packages/linux/linux-rp-2.6.24/htcuni-acx.patch new file mode 100644 index 0000000000..1ccebddc8d --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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.24/htcuni.patch b/packages/linux/linux-rp-2.6.24/htcuni.patch new file mode 100644 index 0000000000..f462650566 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/htcuni.patch @@ -0,0 +1,7928 @@ +--- + 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.23/arch/arm/mach-pxa/htcuniversal/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/Makefile 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/drivers/mfd/Kconfig +=================================================================== +--- linux-2.6.23.orig/drivers/mfd/Kconfig 2008-01-20 18:59:38.000000000 +0000 ++++ linux-2.6.23/drivers/mfd/Kconfig 2008-01-20 18:59:46.000000000 +0000 +@@ -21,6 +21,16 @@ config MFD_TSC2101 + 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.23/drivers/mfd/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/mfd/Makefile 2008-01-20 18:59:38.000000000 +0000 ++++ linux-2.6.23/drivers/mfd/Makefile 2008-01-20 18:59:46.000000000 +0000 +@@ -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_MCP) += mcp-core.o +Index: linux-2.6.23/drivers/mfd/asic3_base.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/mfd/asic3_base.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/drivers/mfd/soc-core.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/mfd/soc-core.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/drivers/mfd/soc-core.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/mfd/soc-core.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/arch-pxa/clock.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/clock.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/arch-pxa/htcuniversal-asic.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-asic.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/arch-pxa/htcuniversal-gpio.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-gpio.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/arch-pxa/htcuniversal-init.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-init.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/arch-pxa/htcuniversal.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal.h 2008-01-20 18:59:46.000000000 +0000 +@@ -0,0 +1,3 @@ ++#include ++ ++#define HTCUNIVERSAL_ASIC3_IRQ_BASE IRQ_BOARD_START +Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-pm_ll.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-pm_ll.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/hardware/asic3_keys.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/hardware/asic3_keys.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/hardware/asic3_leds.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/hardware/asic3_leds.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/hardware/ipaq-asic3.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/hardware/ipaq-asic3.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/linux/gpiodev.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/linux/gpiodev.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/linux/input_pda.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/linux/input_pda.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/linux/soc/asic3_base.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/linux/soc/asic3_base.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/linux/soc/tmio_mmc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/linux/soc/tmio_mmc.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/arch-pxa/pxa-regs.h +=================================================================== +--- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2008-01-20 18:59:40.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2008-01-20 18:59:46.000000000 +0000 +@@ -2058,6 +2058,8 @@ + #define LDCMD_SOFINT (1 << 22) + #define LDCMD_EOFINT (1 << 21) + ++#define LCCR4_13M_PCD_EN (1<<25) /* 13M PCD enable */ ++#define LCCR4_PCDDIV (1<<31) /* PCD selection */ + + #define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */ + #define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */ +Index: linux-2.6.23/drivers/mmc/host/Kconfig +=================================================================== +--- linux-2.6.23.orig/drivers/mmc/host/Kconfig 2008-01-20 18:59:18.000000000 +0000 ++++ linux-2.6.23/drivers/mmc/host/Kconfig 2008-01-20 18:59:46.000000000 +0000 +@@ -130,3 +130,9 @@ config MMC_SPI + + 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.23/drivers/mmc/host/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/mmc/host/Makefile 2008-01-20 18:59:18.000000000 +0000 ++++ linux-2.6.23/drivers/mmc/host/Makefile 2008-01-20 21:12:10.000000000 +0000 +@@ -13,6 +13,7 @@ obj-$(CONFIG_MMC_SDHCI) += sdhci.o + 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.23/drivers/mmc/host/asic3_mmc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/mmc/host/asic3_mmc.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/drivers/mmc/host/asic3_mmc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/mmc/host/asic3_mmc.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/drivers/input/keyboard/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/input/keyboard/Makefile 2008-01-20 18:59:16.000000000 +0000 ++++ linux-2.6.23/drivers/input/keyboard/Makefile 2008-01-20 21:11:40.000000000 +0000 +@@ -15,6 +15,7 @@ obj-$(CONFIG_KEYBOARD_NEWTON) += newton + 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_HIL) += hil_kbd.o + obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o + obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o +Index: linux-2.6.23/drivers/input/keyboard/asic3_keys.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/input/keyboard/asic3_keys.c 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/include/asm-arm/arch-pxa/irqs.h +=================================================================== +--- linux-2.6.23.orig/include/asm-arm/arch-pxa/irqs.h 2008-01-20 18:59:28.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/irqs.h 2008-01-20 18:59:46.000000000 +0000 +@@ -182,6 +182,8 @@ + defined(CONFIG_MACH_LOGICPD_PXA270) || \ + defined(CONFIG_MACH_MAINSTONE) + #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.23/include/linux/ioport.h +=================================================================== +--- linux-2.6.23.orig/include/linux/ioport.h 2008-01-20 18:59:31.000000000 +0000 ++++ linux-2.6.23/include/linux/ioport.h 2008-01-20 18:59:46.000000000 +0000 +@@ -56,6 +56,7 @@ struct resource_list { + #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.23/include/asm-arm/arch-pxa/serial.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/serial.h 2008-01-20 18:59:46.000000000 +0000 +@@ -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.23/drivers/serial/pxa.c +=================================================================== +--- linux-2.6.23.orig/drivers/serial/pxa.c 2008-01-20 18:59:23.000000000 +0000 ++++ linux-2.6.23/drivers/serial/pxa.c 2008-01-20 18:59:46.000000000 +0000 +@@ -47,6 +47,7 @@ + #include + #include + #include ++#include + #include + + +@@ -60,6 +61,14 @@ struct uart_pxa_port { + 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 @@ static int serial_pxa_startup(struct uar + 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 @@ static int serial_pxa_startup(struct uar + (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 @@ static void serial_pxa_shutdown(struct u + 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 @@ static void serial_pxa_shutdown(struct u + 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.23/arch/arm/mach-pxa/generic.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c 2008-01-20 18:59:09.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/generic.c 2008-01-20 18:59:46.000000000 +0000 +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + + #include "devices.h" + #include "generic.h" +@@ -412,6 +413,18 @@ struct platform_device pxa_device_hwuart + .num_resources = ARRAY_SIZE(pxa_resource_hwuart), + }; + ++void __init pxa_set_ffuart_info(struct platform_pxa_serial_funcs *info) ++{ ++ pxa_device_ffuart.dev.platform_data = info; ++} ++EXPORT_SYMBOL(pxa_set_ffuart_info); ++ ++void __init pxa_set_btuart_info(struct platform_pxa_serial_funcs *info) ++{ ++ pxa_device_btuart.dev.platform_data = info; ++} ++EXPORT_SYMBOL(pxa_set_btuart_info); ++ + static struct resource pxai2c_resources[] = { + { + .start = 0x40301680, +Index: linux-2.6.23/drivers/leds/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/leds/Makefile 2008-01-20 18:59:17.000000000 +0000 ++++ linux-2.6.23/drivers/leds/Makefile 2008-01-20 21:10:45.000000000 +0000 +@@ -15,6 +15,7 @@ obj-$(CONFIG_LEDS_AMS_DELTA) += leds-am + 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.23/drivers/input/keyboard/Kconfig +=================================================================== +--- linux-2.6.23.orig/drivers/input/keyboard/Kconfig 2008-01-20 18:59:16.000000000 +0000 ++++ linux-2.6.23/drivers/input/keyboard/Kconfig 2008-01-20 18:59:46.000000000 +0000 +@@ -293,4 +293,11 @@ config KEYBOARD_BFIN + To compile this driver as a module, choose M here: the + module will be called bf54x-keys. + ++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. ++ + endif diff --git a/packages/linux/linux-rp-2.6.24/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.24/pxa-serial-hack.patch new file mode 100644 index 0000000000..bf20f46a05 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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.24/pxa_fb_overlay.patch b/packages/linux/linux-rp-2.6.24/pxa_fb_overlay.patch new file mode 100644 index 0000000000..49c59b3275 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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.24/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.24/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.24/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.24/squashfs3.3.patch b/packages/linux/linux-rp-2.6.24/squashfs3.3.patch new file mode 100644 index 0000000000..cb9a5c49e4 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/squashfs3.3.patch @@ -0,0 +1,4234 @@ +diff -x .gitignore -Nurp linux-2.6.24/fs/Kconfig linux-2.6.24-squashfs3.3/fs/Kconfig +--- linux-2.6.24/fs/Kconfig 2007-10-25 17:41:45.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/fs/Kconfig 2007-11-01 05:06:25.000000000 +0000 +@@ -1396,6 +1396,56 @@ config CRAMFS + + If unsure, say N. + ++config SQUASHFS ++ tristate "SquashFS 3.3 - Squashed file system support" ++ select ZLIB_INFLATE ++ help ++ Saying Y here includes support for SquashFS 3.3 (a Compressed ++ Read-Only File System). Squashfs is a highly compressed read-only ++ filesystem for Linux. It uses zlib compression to compress both ++ files, inodes and directories. Inodes in the system are very small ++ and all blocks are packed to minimise data overhead. Block sizes ++ greater than 4K are supported up to a maximum of 1 Mbytes (default ++ block size 128K). SquashFS 3.3 supports 64 bit filesystems and files ++ (larger than 4GB), full uid/gid information, hard links and timestamps. ++ ++ Squashfs is intended for general read-only filesystem use, for ++ archival use (i.e. in cases where a .tar.gz file may be used), and in ++ embedded systems where low overhead is needed. Further information ++ and filesystem tools are available from http://squashfs.sourceforge.net. ++ ++ If you want to compile this as a module ( = code which can be ++ inserted in and removed from the running kernel whenever you want), ++ say M here and read . The module ++ will be called squashfs. Note that the root file system (the one ++ containing the directory /) cannot be compiled as a module. ++ ++ If unsure, say N. ++ ++config SQUASHFS_EMBEDDED ++ ++ bool "Additional option for memory-constrained systems" ++ depends on SQUASHFS ++ default n ++ help ++ Saying Y here allows you to specify cache size. ++ ++ If unsure, say N. ++ ++config SQUASHFS_FRAGMENT_CACHE_SIZE ++ int "Number of fragments cached" if SQUASHFS_EMBEDDED ++ depends on SQUASHFS ++ default "3" ++ help ++ By default SquashFS caches the last 3 fragments read from ++ the filesystem. Increasing this amount may mean SquashFS ++ has to re-read fragments less often from disk, at the expense ++ of extra system memory. Decreasing this amount will mean ++ SquashFS uses less memory at the expense of extra reads from disk. ++ ++ Note there must be at least one cached fragment. Anything ++ much more than three will probably not make much difference. ++ + config VXFS_FS + tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)" + depends on BLOCK +diff -x .gitignore -Nurp linux-2.6.24/fs/Makefile linux-2.6.24-squashfs3.3/fs/Makefile +--- linux-2.6.24/fs/Makefile 2007-10-25 17:41:45.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/fs/Makefile 2007-11-01 05:08:09.000000000 +0000 +@@ -72,6 +72,7 @@ obj-$(CONFIG_JBD) += jbd/ + obj-$(CONFIG_JBD2) += jbd2/ + obj-$(CONFIG_EXT2_FS) += ext2/ + obj-$(CONFIG_CRAMFS) += cramfs/ ++obj-$(CONFIG_SQUASHFS) += squashfs/ + obj-y += ramfs/ + obj-$(CONFIG_HUGETLBFS) += hugetlbfs/ + obj-$(CONFIG_CODA_FS) += coda/ +diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/inode.c linux-2.6.24-squashfs3.3/fs/squashfs/inode.c +--- linux-2.6.24/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/fs/squashfs/inode.c 2007-11-01 05:05:00.000000000 +0000 +@@ -0,0 +1,2192 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * inode.c ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "squashfs.h" ++ ++int squashfs_cached_blks; ++ ++static void vfs_read_inode(struct inode *i); ++static struct dentry *squashfs_get_parent(struct dentry *child); ++static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode); ++static int squashfs_statfs(struct dentry *, struct kstatfs *); ++static int squashfs_symlink_readpage(struct file *file, struct page *page); ++static long long read_blocklist(struct inode *inode, int index, ++ int readahead_blks, char *block_list, ++ unsigned short **block_p, unsigned int *bsize); ++static int squashfs_readpage(struct file *file, struct page *page); ++static int squashfs_readdir(struct file *, void *, filldir_t); ++static struct dentry *squashfs_lookup(struct inode *, struct dentry *, ++ struct nameidata *); ++static int squashfs_remount(struct super_block *s, int *flags, char *data); ++static void squashfs_put_super(struct super_block *); ++static int squashfs_get_sb(struct file_system_type *,int, const char *, void *, ++ struct vfsmount *); ++static struct inode *squashfs_alloc_inode(struct super_block *sb); ++static void squashfs_destroy_inode(struct inode *inode); ++static int init_inodecache(void); ++static void destroy_inodecache(void); ++ ++static struct file_system_type squashfs_fs_type = { ++ .owner = THIS_MODULE, ++ .name = "squashfs", ++ .get_sb = squashfs_get_sb, ++ .kill_sb = kill_block_super, ++ .fs_flags = FS_REQUIRES_DEV ++}; ++ ++static const unsigned char squashfs_filetype_table[] = { ++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK ++}; ++ ++static struct super_operations squashfs_super_ops = { ++ .alloc_inode = squashfs_alloc_inode, ++ .destroy_inode = squashfs_destroy_inode, ++ .statfs = squashfs_statfs, ++ .put_super = squashfs_put_super, ++ .remount_fs = squashfs_remount ++}; ++ ++static struct super_operations squashfs_export_super_ops = { ++ .alloc_inode = squashfs_alloc_inode, ++ .destroy_inode = squashfs_destroy_inode, ++ .statfs = squashfs_statfs, ++ .put_super = squashfs_put_super, ++ .read_inode = vfs_read_inode ++}; ++ ++static struct export_operations squashfs_export_ops = { ++ .get_parent = squashfs_get_parent ++}; ++ ++SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = { ++ .readpage = squashfs_symlink_readpage ++}; ++ ++SQSH_EXTERN const struct address_space_operations squashfs_aops = { ++ .readpage = squashfs_readpage ++}; ++ ++static const struct file_operations squashfs_dir_ops = { ++ .read = generic_read_dir, ++ .readdir = squashfs_readdir ++}; ++ ++SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = { ++ .lookup = squashfs_lookup ++}; ++ ++ ++static struct buffer_head *get_block_length(struct super_block *s, ++ int *cur_index, int *offset, int *c_byte) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ unsigned short temp; ++ struct buffer_head *bh; ++ ++ if (!(bh = sb_bread(s, *cur_index))) ++ goto out; ++ ++ if (msblk->devblksize - *offset == 1) { ++ if (msblk->swap) ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ else ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ brelse(bh); ++ if (!(bh = sb_bread(s, ++(*cur_index)))) ++ goto out; ++ if (msblk->swap) ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ bh->b_data); ++ else ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ bh->b_data); ++ *c_byte = temp; ++ *offset = 1; ++ } else { ++ if (msblk->swap) { ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ (bh->b_data + *offset + 1)); ++ } else { ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ (bh->b_data + *offset + 1)); ++ } ++ *c_byte = temp; ++ *offset += 2; ++ } ++ ++ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) { ++ if (*offset == msblk->devblksize) { ++ brelse(bh); ++ if (!(bh = sb_bread(s, ++(*cur_index)))) ++ goto out; ++ *offset = 0; ++ } ++ if (*((unsigned char *) (bh->b_data + *offset)) != ++ SQUASHFS_MARKER_BYTE) { ++ ERROR("Metadata block marker corrupt @ %x\n", ++ *cur_index); ++ brelse(bh); ++ goto out; ++ } ++ (*offset)++; ++ } ++ return bh; ++ ++out: ++ return NULL; ++} ++ ++ ++SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer, ++ long long index, unsigned int length, ++ long long *next_index, int srclength) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ struct buffer_head **bh; ++ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1); ++ unsigned int cur_index = index >> msblk->devblksize_log2; ++ int bytes, avail_bytes, b = 0, k = 0; ++ unsigned int compressed; ++ unsigned int c_byte = length; ++ ++ bh = kmalloc(((sblk->block_size >> msblk->devblksize_log2) + 1) * ++ sizeof(struct buffer_head *), GFP_KERNEL); ++ if (bh == NULL) ++ goto read_failure; ++ ++ if (c_byte) { ++ bytes = msblk->devblksize - offset; ++ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte); ++ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte); ++ ++ TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index, ++ compressed ? "" : "un", (unsigned int) c_byte, srclength); ++ ++ if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used) ++ goto read_failure; ++ ++ bh[0] = sb_getblk(s, cur_index); ++ if (bh[0] == NULL) ++ goto block_release; ++ ++ for (b = 1; bytes < c_byte; b++) { ++ bh[b] = sb_getblk(s, ++cur_index); ++ if (bh[b] == NULL) ++ goto block_release; ++ bytes += msblk->devblksize; ++ } ++ ll_rw_block(READ, b, bh); ++ } else { ++ if (index < 0 || (index + 2) > sblk->bytes_used) ++ goto read_failure; ++ ++ bh[0] = get_block_length(s, &cur_index, &offset, &c_byte); ++ if (bh[0] == NULL) ++ goto read_failure; ++ ++ bytes = msblk->devblksize - offset; ++ compressed = SQUASHFS_COMPRESSED(c_byte); ++ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte); ++ ++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed ++ ? "" : "un", (unsigned int) c_byte); ++ ++ if (c_byte > srclength || (index + c_byte) > sblk->bytes_used) ++ goto read_failure; ++ ++ for (b = 1; bytes < c_byte; b++) { ++ bh[b] = sb_getblk(s, ++cur_index); ++ if (bh[b] == NULL) ++ goto block_release; ++ bytes += msblk->devblksize; ++ } ++ ll_rw_block(READ, b - 1, bh + 1); ++ } ++ ++ if (compressed) { ++ int zlib_err = 0; ++ ++ /* ++ * uncompress block ++ */ ++ ++ mutex_lock(&msblk->read_data_mutex); ++ ++ msblk->stream.next_out = buffer; ++ msblk->stream.avail_out = srclength; ++ ++ for (bytes = 0; k < b; k++) { ++ avail_bytes = min(c_byte - bytes, msblk->devblksize - offset); ++ ++ wait_on_buffer(bh[k]); ++ if (!buffer_uptodate(bh[k])) ++ goto release_mutex; ++ ++ msblk->stream.next_in = bh[k]->b_data + offset; ++ msblk->stream.avail_in = avail_bytes; ++ ++ if (k == 0) { ++ zlib_err = zlib_inflateInit(&msblk->stream); ++ if (zlib_err != Z_OK) { ++ ERROR("zlib_inflateInit returned unexpected result 0x%x," ++ " srclength %d\n", zlib_err, srclength); ++ goto release_mutex; ++ } ++ ++ if (avail_bytes == 0) { ++ offset = 0; ++ brelse(bh[k]); ++ continue; ++ } ++ } ++ ++ zlib_err = zlib_inflate(&msblk->stream, Z_NO_FLUSH); ++ if (zlib_err != Z_OK && zlib_err != Z_STREAM_END) { ++ ERROR("zlib_inflate returned unexpected result 0x%x," ++ " srclength %d, avail_in %d, avail_out %d\n", zlib_err, ++ srclength, msblk->stream.avail_in, msblk->stream.avail_out); ++ goto release_mutex; ++ } ++ ++ bytes += avail_bytes; ++ offset = 0; ++ brelse(bh[k]); ++ } ++ ++ if (zlib_err != Z_STREAM_END) ++ goto release_mutex; ++ ++ zlib_err = zlib_inflateEnd(&msblk->stream); ++ if (zlib_err != Z_OK) { ++ ERROR("zlib_inflateEnd returned unexpected result 0x%x," ++ " srclength %d\n", zlib_err, srclength); ++ goto release_mutex; ++ } ++ bytes = msblk->stream.total_out; ++ mutex_unlock(&msblk->read_data_mutex); ++ } else { ++ int i; ++ ++ for(i = 0; i < b; i++) { ++ wait_on_buffer(bh[i]); ++ if (!buffer_uptodate(bh[i])) ++ goto block_release; ++ } ++ ++ for (bytes = 0; k < b; k++) { ++ avail_bytes = min(c_byte - bytes, msblk->devblksize - offset); ++ ++ memcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes); ++ bytes += avail_bytes; ++ offset = 0; ++ brelse(bh[k]); ++ } ++ } ++ ++ if (next_index) ++ *next_index = index + c_byte + (length ? 0 : ++ (SQUASHFS_CHECK_DATA(msblk->sblk.flags) ? 3 : 2)); ++ ++ kfree(bh); ++ return bytes; ++ ++release_mutex: ++ mutex_unlock(&msblk->read_data_mutex); ++ ++block_release: ++ for (; k < b; k++) ++ brelse(bh[k]); ++ ++read_failure: ++ ERROR("sb_bread failed reading block 0x%x\n", cur_index); ++ kfree(bh); ++ return 0; ++} ++ ++ ++SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, void *buffer, ++ long long block, unsigned int offset, ++ int length, long long *next_block, ++ unsigned int *next_offset) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ int n, i, bytes, return_length = length; ++ long long next_index; ++ ++ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset); ++ ++ while (1) { ++ for (i = 0; i < squashfs_cached_blks; i++) ++ if (msblk->block_cache[i].block == block) ++ break; ++ ++ mutex_lock(&msblk->block_cache_mutex); ++ ++ if (i == squashfs_cached_blks) { ++ /* read inode header block */ ++ if (msblk->unused_cache_blks == 0) { ++ mutex_unlock(&msblk->block_cache_mutex); ++ wait_event(msblk->waitq, msblk->unused_cache_blks); ++ continue; ++ } ++ ++ i = msblk->next_cache; ++ for (n = 0; n < squashfs_cached_blks; n++) { ++ if (msblk->block_cache[i].block != SQUASHFS_USED_BLK) ++ break; ++ i = (i + 1) % squashfs_cached_blks; ++ } ++ ++ msblk->next_cache = (i + 1) % squashfs_cached_blks; ++ ++ if (msblk->block_cache[i].block == SQUASHFS_INVALID_BLK) { ++ msblk->block_cache[i].data = vmalloc(SQUASHFS_METADATA_SIZE); ++ if (msblk->block_cache[i].data == NULL) { ++ ERROR("Failed to allocate cache block\n"); ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto out; ++ } ++ } ++ ++ msblk->block_cache[i].block = SQUASHFS_USED_BLK; ++ msblk->unused_cache_blks --; ++ mutex_unlock(&msblk->block_cache_mutex); ++ ++ msblk->block_cache[i].length = squashfs_read_data(s, ++ msblk->block_cache[i].data, block, 0, &next_index, ++ SQUASHFS_METADATA_SIZE); ++ ++ if (msblk->block_cache[i].length == 0) { ++ ERROR("Unable to read cache block [%llx:%x]\n", block, offset); ++ mutex_lock(&msblk->block_cache_mutex); ++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; ++ msblk->unused_cache_blks ++; ++ smp_mb(); ++ vfree(msblk->block_cache[i].data); ++ wake_up(&msblk->waitq); ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto out; ++ } ++ ++ mutex_lock(&msblk->block_cache_mutex); ++ msblk->block_cache[i].block = block; ++ msblk->block_cache[i].next_index = next_index; ++ msblk->unused_cache_blks ++; ++ smp_mb(); ++ wake_up(&msblk->waitq); ++ TRACE("Read cache block [%llx:%x]\n", block, offset); ++ } ++ ++ if (msblk->block_cache[i].block != block) { ++ mutex_unlock(&msblk->block_cache_mutex); ++ continue; ++ } ++ ++ bytes = msblk->block_cache[i].length - offset; ++ ++ if (bytes < 1) { ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto out; ++ } else if (bytes >= length) { ++ if (buffer) ++ memcpy(buffer, msblk->block_cache[i].data + offset, length); ++ if (msblk->block_cache[i].length - offset == length) { ++ *next_block = msblk->block_cache[i].next_index; ++ *next_offset = 0; ++ } else { ++ *next_block = block; ++ *next_offset = offset + length; ++ } ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto finish; ++ } else { ++ if (buffer) { ++ memcpy(buffer, msblk->block_cache[i].data + offset, bytes); ++ buffer = (char *) buffer + bytes; ++ } ++ block = msblk->block_cache[i].next_index; ++ mutex_unlock(&msblk->block_cache_mutex); ++ length -= bytes; ++ offset = 0; ++ } ++ } ++ ++finish: ++ return return_length; ++out: ++ return 0; ++} ++ ++ ++static int get_fragment_location(struct super_block *s, unsigned int fragment, ++ long long *fragment_start_block, ++ unsigned int *fragment_size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ long long start_block = ++ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)]; ++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment); ++ struct squashfs_fragment_entry fragment_entry; ++ ++ if (msblk->swap) { ++ struct squashfs_fragment_entry sfragment_entry; ++ ++ if (!squashfs_get_cached_block(s, &sfragment_entry, start_block, offset, ++ sizeof(sfragment_entry), &start_block, &offset)) ++ goto out; ++ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry); ++ } else ++ if (!squashfs_get_cached_block(s, &fragment_entry, start_block, offset, ++ sizeof(fragment_entry), &start_block, &offset)) ++ goto out; ++ ++ *fragment_start_block = fragment_entry.start_block; ++ *fragment_size = fragment_entry.size; ++ ++ return 1; ++ ++out: ++ return 0; ++} ++ ++ ++SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, ++ struct squashfs_fragment_cache *fragment) ++{ ++ mutex_lock(&msblk->fragment_mutex); ++ fragment->locked --; ++ if (fragment->locked == 0) { ++ msblk->unused_frag_blks ++; ++ smp_mb(); ++ wake_up(&msblk->fragment_wait_queue); ++ } ++ mutex_unlock(&msblk->fragment_mutex); ++} ++ ++ ++SQSH_EXTERN ++struct squashfs_fragment_cache *get_cached_fragment(struct super_block *s, ++ long long start_block, int length) ++{ ++ int i, n; ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ while (1) { ++ mutex_lock(&msblk->fragment_mutex); ++ ++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS && ++ msblk->fragment[i].block != start_block; i++); ++ ++ if (i == SQUASHFS_CACHED_FRAGMENTS) { ++ if (msblk->unused_frag_blks == 0) { ++ mutex_unlock(&msblk->fragment_mutex); ++ wait_event(msblk->fragment_wait_queue, msblk->unused_frag_blks); ++ continue; ++ } ++ ++ i = msblk->next_fragment; ++ for (n = 0; n < SQUASHFS_CACHED_FRAGMENTS; n++) { ++ if (msblk->fragment[i].locked == 0) ++ break; ++ i = (i + 1) % SQUASHFS_CACHED_FRAGMENTS; ++ } ++ ++ msblk->next_fragment = (msblk->next_fragment + 1) % ++ SQUASHFS_CACHED_FRAGMENTS; ++ ++ if (msblk->fragment[i].data == NULL) { ++ msblk->fragment[i].data = vmalloc(sblk->block_size); ++ if (msblk->fragment[i].data == NULL) { ++ ERROR("Failed to allocate fragment cache block\n"); ++ mutex_unlock(&msblk->fragment_mutex); ++ goto out; ++ } ++ } ++ ++ msblk->unused_frag_blks --; ++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; ++ msblk->fragment[i].locked = 1; ++ mutex_unlock(&msblk->fragment_mutex); ++ ++ msblk->fragment[i].length = squashfs_read_data(s, ++ msblk->fragment[i].data, start_block, length, NULL, ++ sblk->block_size); ++ ++ if (msblk->fragment[i].length == 0) { ++ ERROR("Unable to read fragment cache block [%llx]\n", start_block); ++ msblk->fragment[i].locked = 0; ++ msblk->unused_frag_blks ++; ++ smp_mb(); ++ wake_up(&msblk->fragment_wait_queue); ++ goto out; ++ } ++ ++ mutex_lock(&msblk->fragment_mutex); ++ msblk->fragment[i].block = start_block; ++ TRACE("New fragment %d, start block %lld, locked %d\n", ++ i, msblk->fragment[i].block, msblk->fragment[i].locked); ++ mutex_unlock(&msblk->fragment_mutex); ++ break; ++ } ++ ++ if (msblk->fragment[i].locked == 0) ++ msblk->unused_frag_blks --; ++ msblk->fragment[i].locked++; ++ mutex_unlock(&msblk->fragment_mutex); ++ TRACE("Got fragment %d, start block %lld, locked %d\n", i, ++ msblk->fragment[i].block, msblk->fragment[i].locked); ++ break; ++ } ++ ++ return &msblk->fragment[i]; ++ ++out: ++ return NULL; ++} ++ ++ ++static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, ++ struct squashfs_base_inode_header *inodeb) ++{ ++ i->i_ino = inodeb->inode_number; ++ i->i_mtime.tv_sec = inodeb->mtime; ++ i->i_atime.tv_sec = inodeb->mtime; ++ i->i_ctime.tv_sec = inodeb->mtime; ++ i->i_uid = msblk->uid[inodeb->uid]; ++ i->i_mode = inodeb->mode; ++ i->i_size = 0; ++ ++ if (inodeb->guid == SQUASHFS_GUIDS) ++ i->i_gid = i->i_uid; ++ else ++ i->i_gid = msblk->guid[inodeb->guid]; ++} ++ ++ ++static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ long long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)]; ++ int offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1); ++ squashfs_inode_t inode; ++ ++ TRACE("Entered squashfs_inode_lookup, inode_number = %d\n", ino); ++ ++ if (msblk->swap) { ++ squashfs_inode_t sinode; ++ ++ if (!squashfs_get_cached_block(s, &sinode, start, offset, ++ sizeof(sinode), &start, &offset)) ++ goto out; ++ SQUASHFS_SWAP_INODE_T((&inode), &sinode); ++ } else if (!squashfs_get_cached_block(s, &inode, start, offset, ++ sizeof(inode), &start, &offset)) ++ goto out; ++ ++ TRACE("squashfs_inode_lookup, inode = 0x%llx\n", inode); ++ ++ return inode; ++ ++out: ++ return SQUASHFS_INVALID_BLK; ++} ++ ++ ++static void vfs_read_inode(struct inode *i) ++{ ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino); ++ ++ TRACE("Entered vfs_read_inode\n"); ++ ++ if(inode != SQUASHFS_INVALID_BLK) ++ (msblk->read_inode)(i, inode); ++} ++ ++ ++static struct dentry *squashfs_get_parent(struct dentry *child) ++{ ++ struct inode *i = child->d_inode; ++ struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode); ++ struct dentry *rv; ++ ++ TRACE("Entered squashfs_get_parent\n"); ++ ++ if(parent == NULL) { ++ rv = ERR_PTR(-EACCES); ++ goto out; ++ } ++ ++ rv = d_alloc_anon(parent); ++ if(rv == NULL) ++ rv = ERR_PTR(-ENOMEM); ++ ++out: ++ return rv; ++} ++ ++ ++SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s, ++ squashfs_inode_t inode, unsigned int inode_number) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct inode *i = iget_locked(s, inode_number); ++ ++ TRACE("Entered squashfs_iget\n"); ++ ++ if(i && (i->i_state & I_NEW)) { ++ (msblk->read_inode)(i, inode); ++ unlock_new_inode(i); ++ } ++ ++ return i; ++} ++ ++ ++static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode) ++{ ++ struct super_block *s = i->i_sb; ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long block = SQUASHFS_INODE_BLK(inode) + sblk->inode_table_start; ++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); ++ long long next_block; ++ unsigned int next_offset; ++ union squashfs_inode_header id, sid; ++ struct squashfs_base_inode_header *inodeb = &id.base, *sinodeb = &sid.base; ++ ++ TRACE("Entered squashfs_read_inode\n"); ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, sinodeb, block, offset, ++ sizeof(*sinodeb), &next_block, &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb, sizeof(*sinodeb)); ++ } else ++ if (!squashfs_get_cached_block(s, inodeb, block, offset, ++ sizeof(*inodeb), &next_block, &next_offset)) ++ goto failed_read; ++ ++ squashfs_new_inode(msblk, i, inodeb); ++ ++ switch(inodeb->inode_type) { ++ case SQUASHFS_FILE_TYPE: { ++ unsigned int frag_size; ++ long long frag_blk; ++ struct squashfs_reg_inode_header *inodep = &id.reg; ++ struct squashfs_reg_inode_header *sinodep = &sid.reg; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, sinodep, block, offset, ++ sizeof(*sinodep), &next_block, &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, inodep, block, offset, ++ sizeof(*inodep), &next_block, &next_offset)) ++ goto failed_read; ++ ++ frag_blk = SQUASHFS_INVALID_BLK; ++ ++ if (inodep->fragment != SQUASHFS_INVALID_FRAG) ++ if(!get_fragment_location(s, inodep->fragment, &frag_blk, ++ &frag_size)) ++ goto failed_read; ++ ++ i->i_nlink = 1; ++ i->i_size = inodep->file_size; ++ i->i_fop = &generic_ro_fops; ++ i->i_mode |= S_IFREG; ++ i->i_blocks = ((i->i_size - 1) >> 9) + 1; ++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; ++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; ++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->u.s1.block_list_start = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ i->i_data.a_ops = &squashfs_aops; ++ ++ TRACE("File inode %x:%x, start_block %llx, " ++ "block_list_start %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, next_block, ++ next_offset); ++ break; ++ } ++ case SQUASHFS_LREG_TYPE: { ++ unsigned int frag_size; ++ long long frag_blk; ++ struct squashfs_lreg_inode_header *inodep = &id.lreg; ++ struct squashfs_lreg_inode_header *sinodep = &sid.lreg; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, sinodep, block, offset, ++ sizeof(*sinodep), &next_block, &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, inodep, block, offset, ++ sizeof(*inodep), &next_block, &next_offset)) ++ goto failed_read; ++ ++ frag_blk = SQUASHFS_INVALID_BLK; ++ ++ if (inodep->fragment != SQUASHFS_INVALID_FRAG) ++ if (!get_fragment_location(s, inodep->fragment, &frag_blk, ++ &frag_size)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->file_size; ++ i->i_fop = &generic_ro_fops; ++ i->i_mode |= S_IFREG; ++ i->i_blocks = ((i->i_size - 1) >> 9) + 1; ++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; ++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; ++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->u.s1.block_list_start = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ i->i_data.a_ops = &squashfs_aops; ++ ++ TRACE("File inode %x:%x, start_block %llx, " ++ "block_list_start %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, next_block, ++ next_offset); ++ break; ++ } ++ case SQUASHFS_DIR_TYPE: { ++ struct squashfs_dir_inode_header *inodep = &id.dir; ++ struct squashfs_dir_inode_header *sinodep = &sid.dir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, sinodep, block, offset, ++ sizeof(*sinodep), &next_block, &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, inodep, block, offset, ++ sizeof(*inodep), &next_block, &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops; ++ i->i_fop = &squashfs_dir_ops; ++ i->i_mode |= S_IFDIR; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = 0; ++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; ++ ++ TRACE("Directory inode %x:%x, start_block %x, offset " ++ "%x\n", SQUASHFS_INODE_BLK(inode), ++ offset, inodep->start_block, ++ inodep->offset); ++ break; ++ } ++ case SQUASHFS_LDIR_TYPE: { ++ struct squashfs_ldir_inode_header *inodep = &id.ldir; ++ struct squashfs_ldir_inode_header *sinodep = &sid.ldir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, sinodep, block, offset, ++ sizeof(*sinodep), &next_block, &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, inodep, block, offset, ++ sizeof(*inodep), &next_block, &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops; ++ i->i_fop = &squashfs_dir_ops; ++ i->i_mode |= S_IFDIR; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; ++ SQUASHFS_I(i)->u.s2.directory_index_offset = next_offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = inodep->i_count; ++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; ++ ++ TRACE("Long directory inode %x:%x, start_block %x, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, inodep->offset); ++ break; ++ } ++ case SQUASHFS_SYMLINK_TYPE: { ++ struct squashfs_symlink_inode_header *inodep = &id.symlink; ++ struct squashfs_symlink_inode_header *sinodep = &sid.symlink; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, sinodep, block, offset, ++ sizeof(*sinodep), &next_block, &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, inodep, block, offset, ++ sizeof(*inodep), &next_block, &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->symlink_size; ++ i->i_op = &page_symlink_inode_operations; ++ i->i_data.a_ops = &squashfs_symlink_aops; ++ i->i_mode |= S_IFLNK; ++ SQUASHFS_I(i)->start_block = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ ++ TRACE("Symbolic link inode %x:%x, start_block %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ next_block, next_offset); ++ break; ++ } ++ case SQUASHFS_BLKDEV_TYPE: ++ case SQUASHFS_CHRDEV_TYPE: { ++ struct squashfs_dev_inode_header *inodep = &id.dev; ++ struct squashfs_dev_inode_header *sinodep = &sid.dev; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, sinodep, block, offset, ++ sizeof(*sinodep), &next_block, &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, inodep, block, offset, ++ sizeof(*inodep), &next_block, &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_mode |= (inodeb->inode_type == SQUASHFS_CHRDEV_TYPE) ? ++ S_IFCHR : S_IFBLK; ++ init_special_inode(i, i->i_mode, old_decode_dev(inodep->rdev)); ++ ++ TRACE("Device inode %x:%x, rdev %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, inodep->rdev); ++ break; ++ } ++ case SQUASHFS_FIFO_TYPE: ++ case SQUASHFS_SOCKET_TYPE: { ++ struct squashfs_ipc_inode_header *inodep = &id.ipc; ++ struct squashfs_ipc_inode_header *sinodep = &sid.ipc; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, sinodep, block, offset, ++ sizeof(*sinodep), &next_block, &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, inodep, block, offset, ++ sizeof(*inodep), &next_block, &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) ++ ? S_IFIFO : S_IFSOCK; ++ init_special_inode(i, i->i_mode, 0); ++ break; ++ } ++ default: ++ ERROR("Unknown inode type %d in squashfs_iget!\n", ++ inodeb->inode_type); ++ goto failed_read1; ++ } ++ ++ return 1; ++ ++failed_read: ++ ERROR("Unable to read inode [%llx:%x]\n", block, offset); ++ ++failed_read1: ++ make_bad_inode(i); ++ return 0; ++} ++ ++ ++static int read_inode_lookup_table(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes); ++ ++ TRACE("In read_inode_lookup_table, length %d\n", length); ++ ++ /* Allocate inode lookup table */ ++ msblk->inode_lookup_table = kmalloc(length, GFP_KERNEL); ++ if (msblk->inode_lookup_table == NULL) { ++ ERROR("Failed to allocate inode lookup table\n"); ++ return 0; ++ } ++ ++ if (!squashfs_read_data(s, (char *) msblk->inode_lookup_table, ++ sblk->lookup_table_start, length | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { ++ ERROR("unable to read inode lookup table\n"); ++ return 0; ++ } ++ ++ if (msblk->swap) { ++ int i; ++ long long block; ++ ++ for (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) { ++ /* XXX */ ++ SQUASHFS_SWAP_LOOKUP_BLOCKS((&block), ++ &msblk->inode_lookup_table[i], 1); ++ msblk->inode_lookup_table[i] = block; ++ } ++ } ++ ++ return 1; ++} ++ ++ ++static int read_fragment_index_table(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments); ++ ++ if(length == 0) ++ return 1; ++ ++ /* Allocate fragment index table */ ++ msblk->fragment_index = kmalloc(length, GFP_KERNEL); ++ if (msblk->fragment_index == NULL) { ++ ERROR("Failed to allocate fragment index table\n"); ++ return 0; ++ } ++ ++ if (!squashfs_read_data(s, (char *) msblk->fragment_index, ++ sblk->fragment_table_start, length | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { ++ ERROR("unable to read fragment index table\n"); ++ return 0; ++ } ++ ++ if (msblk->swap) { ++ int i; ++ long long fragment; ++ ++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments); i++) { ++ /* XXX */ ++ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment), ++ &msblk->fragment_index[i], 1); ++ msblk->fragment_index[i] = fragment; ++ } ++ } ++ ++ return 1; ++} ++ ++ ++static int readahead_metadata(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ int i; ++ ++ squashfs_cached_blks = SQUASHFS_CACHED_BLKS; ++ ++ /* Init inode_table block pointer array */ ++ msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) * ++ squashfs_cached_blks, GFP_KERNEL); ++ if (msblk->block_cache == NULL) { ++ ERROR("Failed to allocate block cache\n"); ++ goto failed; ++ } ++ ++ for (i = 0; i < squashfs_cached_blks; i++) ++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; ++ ++ msblk->next_cache = 0; ++ msblk->unused_cache_blks = squashfs_cached_blks; ++ ++ return 1; ++ ++failed: ++ return 0; ++} ++ ++ ++static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent) ++{ ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ msblk->read_inode = squashfs_read_inode; ++ msblk->read_blocklist = read_blocklist; ++ msblk->read_fragment_index_table = read_fragment_index_table; ++ ++ if (sblk->s_major == 1) { ++ if (!squashfs_1_0_supported(msblk)) { ++ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems " ++ "are unsupported\n"); ++ SERROR("Please recompile with Squashfs 1.0 support enabled\n"); ++ return 0; ++ } ++ } else if (sblk->s_major == 2) { ++ if (!squashfs_2_0_supported(msblk)) { ++ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems " ++ "are unsupported\n"); ++ SERROR("Please recompile with Squashfs 2.0 support enabled\n"); ++ return 0; ++ } ++ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor > ++ SQUASHFS_MINOR) { ++ SERROR("Major/Minor mismatch, trying to mount newer %d.%d " ++ "filesystem\n", sblk->s_major, sblk->s_minor); ++ SERROR("Please update your kernel\n"); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++ ++static int squashfs_fill_super(struct super_block *s, void *data, int silent) ++{ ++ struct squashfs_sb_info *msblk; ++ struct squashfs_super_block *sblk; ++ int i; ++ char b[BDEVNAME_SIZE]; ++ struct inode *root; ++ ++ TRACE("Entered squashfs_fill_superblock\n"); ++ ++ s->s_fs_info = kzalloc(sizeof(struct squashfs_sb_info), GFP_KERNEL); ++ if (s->s_fs_info == NULL) { ++ ERROR("Failed to allocate superblock\n"); ++ goto failure; ++ } ++ msblk = s->s_fs_info; ++ ++ msblk->stream.workspace = vmalloc(zlib_inflate_workspacesize()); ++ if (msblk->stream.workspace == NULL) { ++ ERROR("Failed to allocate zlib workspace\n"); ++ goto failure; ++ } ++ sblk = &msblk->sblk; ++ ++ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE); ++ msblk->devblksize_log2 = ffz(~msblk->devblksize); ++ ++ mutex_init(&msblk->read_data_mutex); ++ mutex_init(&msblk->read_page_mutex); ++ mutex_init(&msblk->block_cache_mutex); ++ mutex_init(&msblk->fragment_mutex); ++ mutex_init(&msblk->meta_index_mutex); ++ ++ init_waitqueue_head(&msblk->waitq); ++ init_waitqueue_head(&msblk->fragment_wait_queue); ++ ++ /* sblk->bytes_used is checked in squashfs_read_data to ensure reads are not ++ * beyond filesystem end. As we're using squashfs_read_data to read sblk here, ++ * first set sblk->bytes_used to a useful value */ ++ sblk->bytes_used = sizeof(struct squashfs_super_block); ++ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START, ++ sizeof(struct squashfs_super_block) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) { ++ SERROR("unable to read superblock\n"); ++ goto failed_mount; ++ } ++ ++ /* Check it is a SQUASHFS superblock */ ++ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) { ++ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) { ++ struct squashfs_super_block ssblk; ++ ++ WARNING("Mounting a different endian SQUASHFS filesystem on %s\n", ++ bdevname(s->s_bdev, b)); ++ ++ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk); ++ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block)); ++ msblk->swap = 1; ++ } else { ++ SERROR("Can't find a SQUASHFS superblock on %s\n", ++ bdevname(s->s_bdev, b)); ++ goto failed_mount; ++ } ++ } ++ ++ /* Check the MAJOR & MINOR versions */ ++ if(!supported_squashfs_filesystem(msblk, silent)) ++ goto failed_mount; ++ ++ /* Check the filesystem does not extend beyond the end of the ++ block device */ ++ if(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode)) ++ goto failed_mount; ++ ++ /* Check the root inode for sanity */ ++ if (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE) ++ goto failed_mount; ++ ++ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b)); ++ TRACE("Inodes are %scompressed\n", SQUASHFS_UNCOMPRESSED_INODES(sblk->flags) ++ ? "un" : ""); ++ TRACE("Data is %scompressed\n", SQUASHFS_UNCOMPRESSED_DATA(sblk->flags) ++ ? "un" : ""); ++ TRACE("Check data is %spresent in the filesystem\n", ++ SQUASHFS_CHECK_DATA(sblk->flags) ? "" : "not "); ++ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used); ++ TRACE("Block size %d\n", sblk->block_size); ++ TRACE("Number of inodes %d\n", sblk->inodes); ++ if (sblk->s_major > 1) ++ TRACE("Number of fragments %d\n", sblk->fragments); ++ TRACE("Number of uids %d\n", sblk->no_uids); ++ TRACE("Number of gids %d\n", sblk->no_guids); ++ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start); ++ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start); ++ if (sblk->s_major > 1) ++ TRACE("sblk->fragment_table_start %llx\n", sblk->fragment_table_start); ++ TRACE("sblk->uid_start %llx\n", sblk->uid_start); ++ ++ s->s_maxbytes = MAX_LFS_FILESIZE; ++ s->s_flags |= MS_RDONLY; ++ s->s_op = &squashfs_super_ops; ++ ++ if (readahead_metadata(s) == 0) ++ goto failed_mount; ++ ++ /* Allocate read_page block */ ++ msblk->read_page = vmalloc(sblk->block_size); ++ if (msblk->read_page == NULL) { ++ ERROR("Failed to allocate read_page block\n"); ++ goto failed_mount; ++ } ++ ++ /* Allocate uid and gid tables */ ++ msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) * ++ sizeof(unsigned int), GFP_KERNEL); ++ if (msblk->uid == NULL) { ++ ERROR("Failed to allocate uid/gid table\n"); ++ goto failed_mount; ++ } ++ msblk->guid = msblk->uid + sblk->no_uids; ++ ++ if (msblk->swap) { ++ unsigned int suid[sblk->no_uids + sblk->no_guids]; ++ ++ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start, ++ ((sblk->no_uids + sblk->no_guids) * ++ sizeof(unsigned int)) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { ++ ERROR("unable to read uid/gid table\n"); ++ goto failed_mount; ++ } ++ ++ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids + ++ sblk->no_guids), (sizeof(unsigned int) * 8)); ++ } else ++ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start, ++ ((sblk->no_uids + sblk->no_guids) * ++ sizeof(unsigned int)) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { ++ ERROR("unable to read uid/gid table\n"); ++ goto failed_mount; ++ } ++ ++ ++ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk)) ++ goto allocate_root; ++ ++ msblk->fragment = kzalloc(sizeof(struct squashfs_fragment_cache) * ++ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL); ++ if (msblk->fragment == NULL) { ++ ERROR("Failed to allocate fragment block cache\n"); ++ goto failed_mount; ++ } ++ ++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) { ++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; ++ } ++ ++ msblk->next_fragment = 0; ++ msblk->unused_frag_blks = SQUASHFS_CACHED_FRAGMENTS; ++ ++ /* Allocate and read fragment index table */ ++ if (msblk->read_fragment_index_table(s) == 0) ++ goto failed_mount; ++ ++ if(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK) ++ goto allocate_root; ++ ++ /* Allocate and read inode lookup table */ ++ if (read_inode_lookup_table(s) == 0) ++ goto failed_mount; ++ ++ s->s_op = &squashfs_export_super_ops; ++ s->s_export_op = &squashfs_export_ops; ++ ++allocate_root: ++ root = new_inode(s); ++ if ((msblk->read_inode)(root, sblk->root_inode) == 0) ++ goto failed_mount; ++ insert_inode_hash(root); ++ ++ s->s_root = d_alloc_root(root); ++ if (s->s_root == NULL) { ++ ERROR("Root inode create failed\n"); ++ iput(root); ++ goto failed_mount; ++ } ++ ++ TRACE("Leaving squashfs_fill_super\n"); ++ return 0; ++ ++failed_mount: ++ kfree(msblk->inode_lookup_table); ++ kfree(msblk->fragment_index); ++ kfree(msblk->fragment); ++ kfree(msblk->uid); ++ vfree(msblk->read_page); ++ kfree(msblk->block_cache); ++ kfree(msblk->fragment_index_2); ++ vfree(msblk->stream.workspace); ++ kfree(s->s_fs_info); ++ s->s_fs_info = NULL; ++ return -EINVAL; ++ ++failure: ++ return -ENOMEM; ++} ++ ++ ++static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf) ++{ ++ struct squashfs_sb_info *msblk = dentry->d_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ TRACE("Entered squashfs_statfs\n"); ++ ++ buf->f_type = SQUASHFS_MAGIC; ++ buf->f_bsize = sblk->block_size; ++ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1; ++ buf->f_bfree = buf->f_bavail = 0; ++ buf->f_files = sblk->inodes; ++ buf->f_ffree = 0; ++ buf->f_namelen = SQUASHFS_NAME_LEN; ++ ++ return 0; ++} ++ ++ ++static int squashfs_symlink_readpage(struct file *file, struct page *page) ++{ ++ struct inode *inode = page->mapping->host; ++ int index = page->index << PAGE_CACHE_SHIFT, length, bytes, avail_bytes; ++ long long block = SQUASHFS_I(inode)->start_block; ++ int offset = SQUASHFS_I(inode)->offset; ++ void *pageaddr = kmap(page); ++ ++ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block " ++ "%llx, offset %x\n", page->index, ++ SQUASHFS_I(inode)->start_block, ++ SQUASHFS_I(inode)->offset); ++ ++ for (length = 0; length < index; length += bytes) { ++ bytes = squashfs_get_cached_block(inode->i_sb, NULL, block, ++ offset, PAGE_CACHE_SIZE, &block, &offset); ++ if (bytes == 0) { ++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset); ++ goto skip_read; ++ } ++ } ++ ++ if (length != index) { ++ ERROR("(squashfs_symlink_readpage) length != index\n"); ++ bytes = 0; ++ goto skip_read; ++ } ++ ++ avail_bytes = min_t(int, i_size_read(inode) - length, PAGE_CACHE_SIZE); ++ ++ bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, offset, ++ avail_bytes, &block, &offset); ++ if (bytes == 0) ++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset); ++ ++skip_read: ++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); ++ kunmap(page); ++ flush_dcache_page(page); ++ SetPageUptodate(page); ++ unlock_page(page); ++ ++ return 0; ++} ++ ++ ++struct meta_index *locate_meta_index(struct inode *inode, int index, int offset) ++{ ++ struct meta_index *meta = NULL; ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ int i; ++ ++ mutex_lock(&msblk->meta_index_mutex); ++ ++ TRACE("locate_meta_index: index %d, offset %d\n", index, offset); ++ ++ if (msblk->meta_index == NULL) ++ goto not_allocated; ++ ++ for (i = 0; i < SQUASHFS_META_NUMBER; i ++) { ++ if (msblk->meta_index[i].inode_number == inode->i_ino && ++ msblk->meta_index[i].offset >= offset && ++ msblk->meta_index[i].offset <= index && ++ msblk->meta_index[i].locked == 0) { ++ TRACE("locate_meta_index: entry %d, offset %d\n", i, ++ msblk->meta_index[i].offset); ++ meta = &msblk->meta_index[i]; ++ offset = meta->offset; ++ } ++ } ++ ++ if (meta) ++ meta->locked = 1; ++ ++not_allocated: ++ mutex_unlock(&msblk->meta_index_mutex); ++ ++ return meta; ++} ++ ++ ++struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip) ++{ ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct meta_index *meta = NULL; ++ int i; ++ ++ mutex_lock(&msblk->meta_index_mutex); ++ ++ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip); ++ ++ if (msblk->meta_index == NULL) { ++ msblk->meta_index = kmalloc(sizeof(struct meta_index) * ++ SQUASHFS_META_NUMBER, GFP_KERNEL); ++ if (msblk->meta_index == NULL) { ++ ERROR("Failed to allocate meta_index\n"); ++ goto failed; ++ } ++ for (i = 0; i < SQUASHFS_META_NUMBER; i++) { ++ msblk->meta_index[i].inode_number = 0; ++ msblk->meta_index[i].locked = 0; ++ } ++ msblk->next_meta_index = 0; ++ } ++ ++ for (i = SQUASHFS_META_NUMBER; i && ++ msblk->meta_index[msblk->next_meta_index].locked; i --) ++ msblk->next_meta_index = (msblk->next_meta_index + 1) % ++ SQUASHFS_META_NUMBER; ++ ++ if (i == 0) { ++ TRACE("empty_meta_index: failed!\n"); ++ goto failed; ++ } ++ ++ TRACE("empty_meta_index: returned meta entry %d, %p\n", ++ msblk->next_meta_index, ++ &msblk->meta_index[msblk->next_meta_index]); ++ ++ meta = &msblk->meta_index[msblk->next_meta_index]; ++ msblk->next_meta_index = (msblk->next_meta_index + 1) % ++ SQUASHFS_META_NUMBER; ++ ++ meta->inode_number = inode->i_ino; ++ meta->offset = offset; ++ meta->skip = skip; ++ meta->entries = 0; ++ meta->locked = 1; ++ ++failed: ++ mutex_unlock(&msblk->meta_index_mutex); ++ return meta; ++} ++ ++ ++void release_meta_index(struct inode *inode, struct meta_index *meta) ++{ ++ meta->locked = 0; ++ smp_mb(); ++} ++ ++ ++static int read_block_index(struct super_block *s, int blocks, char *block_list, ++ long long *start_block, int *offset) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ unsigned int *block_listp; ++ int block = 0; ++ ++ if (msblk->swap) { ++ char sblock_list[blocks << 2]; ++ ++ if (!squashfs_get_cached_block(s, sblock_list, *start_block, ++ *offset, blocks << 2, start_block, offset)) { ++ ERROR("Fail reading block list [%llx:%x]\n", *start_block, *offset); ++ goto failure; ++ } ++ SQUASHFS_SWAP_INTS(((unsigned int *)block_list), ++ ((unsigned int *)sblock_list), blocks); ++ } else { ++ if (!squashfs_get_cached_block(s, block_list, *start_block, ++ *offset, blocks << 2, start_block, offset)) { ++ ERROR("Fail reading block list [%llx:%x]\n", *start_block, *offset); ++ goto failure; ++ } ++ } ++ ++ for (block_listp = (unsigned int *) block_list; blocks; ++ block_listp++, blocks --) ++ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp); ++ ++ return block; ++ ++failure: ++ return -1; ++} ++ ++ ++#define SIZE 256 ++ ++static inline int calculate_skip(int blocks) { ++ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES); ++ return skip >= 7 ? 7 : skip + 1; ++} ++ ++ ++static int get_meta_index(struct inode *inode, int index, ++ long long *index_block, int *index_offset, ++ long long *data_block, char *block_list) ++{ ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log); ++ int offset = 0; ++ struct meta_index *meta; ++ struct meta_entry *meta_entry; ++ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start; ++ int cur_offset = SQUASHFS_I(inode)->offset; ++ long long cur_data_block = SQUASHFS_I(inode)->start_block; ++ int i; ++ ++ index /= SQUASHFS_META_INDEXES * skip; ++ ++ while (offset < index) { ++ meta = locate_meta_index(inode, index, offset + 1); ++ ++ if (meta == NULL) { ++ meta = empty_meta_index(inode, offset + 1, skip); ++ if (meta == NULL) ++ goto all_done; ++ } else { ++ if(meta->entries == 0) ++ goto failed; ++ /* XXX */ ++ offset = index < meta->offset + meta->entries ? index : ++ meta->offset + meta->entries - 1; ++ /* XXX */ ++ meta_entry = &meta->meta_entry[offset - meta->offset]; ++ cur_index_block = meta_entry->index_block + sblk->inode_table_start; ++ cur_offset = meta_entry->offset; ++ cur_data_block = meta_entry->data_block; ++ TRACE("get_meta_index: offset %d, meta->offset %d, " ++ "meta->entries %d\n", offset, meta->offset, meta->entries); ++ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x" ++ " data_block 0x%llx\n", cur_index_block, ++ cur_offset, cur_data_block); ++ } ++ ++ for (i = meta->offset + meta->entries; i <= index && ++ i < meta->offset + SQUASHFS_META_ENTRIES; i++) { ++ int blocks = skip * SQUASHFS_META_INDEXES; ++ ++ while (blocks) { ++ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) : blocks; ++ int res = read_block_index(inode->i_sb, block, block_list, ++ &cur_index_block, &cur_offset); ++ ++ if (res == -1) ++ goto failed; ++ ++ cur_data_block += res; ++ blocks -= block; ++ } ++ ++ meta_entry = &meta->meta_entry[i - meta->offset]; ++ meta_entry->index_block = cur_index_block - sblk->inode_table_start; ++ meta_entry->offset = cur_offset; ++ meta_entry->data_block = cur_data_block; ++ meta->entries ++; ++ offset ++; ++ } ++ ++ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n", ++ meta->offset, meta->entries); ++ ++ release_meta_index(inode, meta); ++ } ++ ++all_done: ++ *index_block = cur_index_block; ++ *index_offset = cur_offset; ++ *data_block = cur_data_block; ++ ++ return offset * SQUASHFS_META_INDEXES * skip; ++ ++failed: ++ release_meta_index(inode, meta); ++ return -1; ++} ++ ++ ++static long long read_blocklist(struct inode *inode, int index, ++ int readahead_blks, char *block_list, ++ unsigned short **block_p, unsigned int *bsize) ++{ ++ long long block_ptr; ++ int offset; ++ long long block; ++ int res = get_meta_index(inode, index, &block_ptr, &offset, &block, ++ block_list); ++ ++ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset" ++ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset, block); ++ ++ if(res == -1) ++ goto failure; ++ ++ index -= res; ++ ++ while (index) { ++ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index; ++ int res = read_block_index(inode->i_sb, blocks, block_list, ++ &block_ptr, &offset); ++ if (res == -1) ++ goto failure; ++ block += res; ++ index -= blocks; ++ } ++ ++ if (read_block_index(inode->i_sb, 1, block_list, &block_ptr, &offset) == -1) ++ goto failure; ++ *bsize = *((unsigned int *) block_list); ++ ++ return block; ++ ++failure: ++ return 0; ++} ++ ++ ++static int squashfs_readpage(struct file *file, struct page *page) ++{ ++ struct inode *inode = page->mapping->host; ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned char *block_list = NULL; ++ long long block; ++ unsigned int bsize, i; ++ int bytes; ++ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT); ++ void *pageaddr; ++ struct squashfs_fragment_cache *fragment = NULL; ++ char *data_ptr = msblk->read_page; ++ ++ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1; ++ int start_index = page->index & ~mask; ++ int end_index = start_index | mask; ++ int file_end = i_size_read(inode) >> sblk->block_log; ++ int sparse = 0; ++ ++ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n", ++ page->index, SQUASHFS_I(inode)->start_block); ++ ++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> ++ PAGE_CACHE_SHIFT)) ++ goto out; ++ ++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK ++ || index < file_end) { ++ block_list = kmalloc(SIZE, GFP_KERNEL); ++ if (block_list == NULL) { ++ ERROR("Failed to allocate block_list\n"); ++ goto error_out; ++ } ++ ++ block = (msblk->read_blocklist)(inode, index, 1, block_list, NULL, &bsize); ++ if (block == 0) ++ goto error_out; ++ ++ if (bsize == 0) { /* hole */ ++ bytes = index == file_end ? ++ (i_size_read(inode) & (sblk->block_size - 1)) : sblk->block_size; ++ sparse = 1; ++ } else { ++ mutex_lock(&msblk->read_page_mutex); ++ ++ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block, ++ bsize, NULL, sblk->block_size); ++ ++ if (bytes == 0) { ++ ERROR("Unable to read page, block %llx, size %x\n", block, bsize); ++ mutex_unlock(&msblk->read_page_mutex); ++ goto error_out; ++ } ++ } ++ } else { ++ fragment = get_cached_fragment(inode->i_sb, ++ SQUASHFS_I(inode)-> u.s1.fragment_start_block, ++ SQUASHFS_I(inode)->u.s1.fragment_size); ++ ++ if (fragment == NULL) { ++ ERROR("Unable to read page, block %llx, size %x\n", ++ SQUASHFS_I(inode)->u.s1.fragment_start_block, ++ (int) SQUASHFS_I(inode)->u.s1.fragment_size); ++ goto error_out; ++ } ++ bytes = i_size_read(inode) & (sblk->block_size - 1); ++ data_ptr = fragment->data + SQUASHFS_I(inode)->u.s1.fragment_offset; ++ } ++ ++ for (i = start_index; i <= end_index && bytes > 0; i++, ++ bytes -= PAGE_CACHE_SIZE, data_ptr += PAGE_CACHE_SIZE) { ++ struct page *push_page; ++ int avail = sparse ? 0 : min_t(unsigned int, bytes, PAGE_CACHE_SIZE); ++ ++ TRACE("bytes %d, i %d, available_bytes %d\n", bytes, i, avail); ++ ++ push_page = (i == page->index) ? page : ++ grab_cache_page_nowait(page->mapping, i); ++ ++ if (!push_page) ++ continue; ++ ++ if (PageUptodate(push_page)) ++ goto skip_page; ++ ++ pageaddr = kmap_atomic(push_page, KM_USER0); ++ memcpy(pageaddr, data_ptr, avail); ++ memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail); ++ kunmap_atomic(pageaddr, KM_USER0); ++ flush_dcache_page(push_page); ++ SetPageUptodate(push_page); ++skip_page: ++ unlock_page(push_page); ++ if(i != page->index) ++ page_cache_release(push_page); ++ } ++ ++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK ++ || index < file_end) { ++ if (!sparse) ++ mutex_unlock(&msblk->read_page_mutex); ++ kfree(block_list); ++ } else ++ release_cached_fragment(msblk, fragment); ++ ++ return 0; ++ ++error_out: ++ SetPageError(page); ++out: ++ pageaddr = kmap_atomic(page, KM_USER0); ++ memset(pageaddr, 0, PAGE_CACHE_SIZE); ++ kunmap_atomic(pageaddr, KM_USER0); ++ flush_dcache_page(page); ++ if (!PageError(page)) ++ SetPageUptodate(page); ++ unlock_page(page); ++ ++ kfree(block_list); ++ return 0; ++} ++ ++ ++static int get_dir_index_using_offset(struct super_block *s, ++ long long *next_block, unsigned int *next_offset, ++ long long index_start, unsigned int index_offset, int i_count, ++ long long f_pos) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index index; ++ ++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", ++ i_count, (unsigned int) f_pos); ++ ++ f_pos =- 3; ++ if (f_pos == 0) ++ goto finish; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index sindex; ++ squashfs_get_cached_block(s, &sindex, index_start, index_offset, ++ sizeof(sindex), &index_start, &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex); ++ } else ++ squashfs_get_cached_block(s, &index, index_start, index_offset, ++ sizeof(index), &index_start, &index_offset); ++ ++ if (index.index > f_pos) ++ break; ++ ++ squashfs_get_cached_block(s, NULL, index_start, index_offset, ++ index.size + 1, &index_start, &index_offset); ++ ++ length = index.index; ++ *next_block = index.start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ ++finish: ++ return length + 3; ++} ++ ++ ++static int get_dir_index_using_name(struct super_block *s, ++ long long *next_block, unsigned int *next_offset, ++ long long index_start, unsigned int index_offset, int i_count, ++ const char *name, int size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index *index; ++ char *str; ++ ++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); ++ ++ str = kmalloc(sizeof(struct squashfs_dir_index) + ++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL); ++ if (str == NULL) { ++ ERROR("Failed to allocate squashfs_dir_index\n"); ++ goto failure; ++ } ++ ++ index = (struct squashfs_dir_index *) (str + SQUASHFS_NAME_LEN + 1); ++ strncpy(str, name, size); ++ str[size] = '\0'; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index sindex; ++ squashfs_get_cached_block(s, &sindex, index_start, index_offset, ++ sizeof(sindex), &index_start, &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX(index, &sindex); ++ } else ++ squashfs_get_cached_block(s, index, index_start, index_offset, ++ sizeof(struct squashfs_dir_index), &index_start, &index_offset); ++ ++ squashfs_get_cached_block(s, index->name, index_start, index_offset, ++ index->size + 1, &index_start, &index_offset); ++ ++ index->name[index->size + 1] = '\0'; ++ ++ if (strcmp(index->name, str) > 0) ++ break; ++ ++ length = index->index; ++ *next_block = index->start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ kfree(str); ++ ++failure: ++ return length + 3; ++} ++ ++ ++static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir) ++{ ++ struct inode *i = file->f_dentry->d_inode; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, dir_count; ++ struct squashfs_dir_header dirh; ++ struct squashfs_dir_entry *dire; ++ ++ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset); ++ ++ dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL); ++ if (dire == NULL) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto finish; ++ } ++ ++ while(file->f_pos < 3) { ++ char *name; ++ int size, i_ino; ++ ++ if(file->f_pos == 0) { ++ name = "."; ++ size = 1; ++ i_ino = i->i_ino; ++ } else { ++ name = ".."; ++ size = 2; ++ i_ino = SQUASHFS_I(i)->u.s2.parent_inode; ++ } ++ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n", ++ (unsigned int) dirent, name, size, (int) ++ file->f_pos, i_ino, squashfs_filetype_table[1]); ++ ++ if (filldir(dirent, name, size, file->f_pos, i_ino, ++ squashfs_filetype_table[1]) < 0) { ++ TRACE("Filldir returned less than 0\n"); ++ goto finish; ++ } ++ file->f_pos += size; ++ } ++ ++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, file->f_pos); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header sdirh; ++ ++ if (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block, ++ next_offset, sizeof(sdirh), &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block, ++ next_offset, sizeof(dirh), &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry sdire; ++ if (!squashfs_get_cached_block(i->i_sb, &sdire, next_block, ++ next_offset, sizeof(sdire), &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, dire, next_block, ++ next_offset, sizeof(*dire), &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, next_block, ++ next_offset, dire->size + 1, &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (file->f_pos >= length) ++ continue; ++ ++ dire->name[dire->size + 1] = '\0'; ++ ++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n", ++ (unsigned int) dirent, dire->name, dire->size + 1, ++ (int) file->f_pos, dirh.start_block, dire->offset, ++ dirh.inode_number + dire->inode_number, ++ squashfs_filetype_table[dire->type]); ++ ++ if (filldir(dirent, dire->name, dire->size + 1, file->f_pos, ++ dirh.inode_number + dire->inode_number, ++ squashfs_filetype_table[dire->type]) < 0) { ++ TRACE("Filldir returned less than 0\n"); ++ goto finish; ++ } ++ file->f_pos = length; ++ } ++ } ++ ++finish: ++ kfree(dire); ++ return 0; ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ kfree(dire); ++ return 0; ++} ++ ++ ++static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry, ++ struct nameidata *nd) ++{ ++ const unsigned char *name = dentry->d_name.name; ++ int len = dentry->d_name.len; ++ struct inode *inode = NULL; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, dir_count; ++ struct squashfs_dir_header dirh; ++ struct squashfs_dir_entry *dire; ++ ++ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset); ++ ++ dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL); ++ if (dire == NULL) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto exit_lookup; ++ } ++ ++ if (len > SQUASHFS_NAME_LEN) ++ goto exit_lookup; ++ ++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, name, len); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header sdirh; ++ if (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block, ++ next_offset, sizeof(sdirh), &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block, ++ next_offset, sizeof(dirh), &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry sdire; ++ if (!squashfs_get_cached_block(i->i_sb, &sdire, next_block, ++ next_offset, sizeof(sdire), &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, dire, next_block, ++ next_offset, sizeof(*dire), &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, next_block, ++ next_offset, dire->size + 1, &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (name[0] < dire->name[0]) ++ goto exit_lookup; ++ ++ if ((len == dire->size + 1) && !strncmp(name, dire->name, len)) { ++ squashfs_inode_t ino = SQUASHFS_MKINODE(dirh.start_block, ++ dire->offset); ++ ++ TRACE("calling squashfs_iget for directory entry %s, inode" ++ " %x:%x, %d\n", name, dirh.start_block, dire->offset, ++ dirh.inode_number + dire->inode_number); ++ ++ inode = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number); ++ ++ goto exit_lookup; ++ } ++ } ++ } ++ ++exit_lookup: ++ kfree(dire); ++ if (inode) ++ return d_splice_alias(inode, dentry); ++ d_add(dentry, inode); ++ return ERR_PTR(0); ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ goto exit_lookup; ++} ++ ++ ++static int squashfs_remount(struct super_block *s, int *flags, char *data) ++{ ++ *flags |= MS_RDONLY; ++ return 0; ++} ++ ++ ++static void squashfs_put_super(struct super_block *s) ++{ ++ int i; ++ ++ if (s->s_fs_info) { ++ struct squashfs_sb_info *sbi = s->s_fs_info; ++ if (sbi->block_cache) ++ for (i = 0; i < squashfs_cached_blks; i++) ++ if (sbi->block_cache[i].block != SQUASHFS_INVALID_BLK) ++ vfree(sbi->block_cache[i].data); ++ if (sbi->fragment) ++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) ++ vfree(sbi->fragment[i].data); ++ kfree(sbi->fragment); ++ kfree(sbi->block_cache); ++ vfree(sbi->read_page); ++ kfree(sbi->uid); ++ kfree(sbi->fragment_index); ++ kfree(sbi->fragment_index_2); ++ kfree(sbi->meta_index); ++ vfree(sbi->stream.workspace); ++ kfree(s->s_fs_info); ++ s->s_fs_info = NULL; ++ } ++} ++ ++ ++static int squashfs_get_sb(struct file_system_type *fs_type, int flags, ++ const char *dev_name, void *data, struct vfsmount *mnt) ++{ ++ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, ++ mnt); ++} ++ ++ ++static int __init init_squashfs_fs(void) ++{ ++ int err = init_inodecache(); ++ if (err) ++ goto out; ++ ++ printk(KERN_INFO "squashfs: version 3.3 (2007/10/31) " ++ "Phillip Lougher\n"); ++ ++ err = register_filesystem(&squashfs_fs_type); ++ if (err) ++ destroy_inodecache(); ++ ++out: ++ return err; ++} ++ ++ ++static void __exit exit_squashfs_fs(void) ++{ ++ unregister_filesystem(&squashfs_fs_type); ++ destroy_inodecache(); ++} ++ ++ ++static struct kmem_cache * squashfs_inode_cachep; ++ ++ ++static struct inode *squashfs_alloc_inode(struct super_block *sb) ++{ ++ struct squashfs_inode_info *ei; ++ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL); ++ return ei ? &ei->vfs_inode : NULL; ++} ++ ++ ++static void squashfs_destroy_inode(struct inode *inode) ++{ ++ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode)); ++} ++ ++ ++static void init_once(struct kmem_cache *cachep, void *foo) ++{ ++ struct squashfs_inode_info *ei = foo; ++ ++ inode_init_once(&ei->vfs_inode); ++} ++ ++ ++static int __init init_inodecache(void) ++{ ++ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache", ++ sizeof(struct squashfs_inode_info), 0, ++ SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, init_once); ++ if (squashfs_inode_cachep == NULL) ++ return -ENOMEM; ++ return 0; ++} ++ ++ ++static void destroy_inodecache(void) ++{ ++ kmem_cache_destroy(squashfs_inode_cachep); ++} ++ ++ ++module_init(init_squashfs_fs); ++module_exit(exit_squashfs_fs); ++MODULE_DESCRIPTION("squashfs 3.2-r2-CVS, a compressed read-only filesystem"); ++MODULE_AUTHOR("Phillip Lougher "); ++MODULE_LICENSE("GPL"); +diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/Makefile linux-2.6.24-squashfs3.3/fs/squashfs/Makefile +--- linux-2.6.24/fs/squashfs/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/fs/squashfs/Makefile 2005-11-20 14:31:00.000000000 +0000 +@@ -0,0 +1,7 @@ ++# ++# Makefile for the linux squashfs routines. ++# ++ ++obj-$(CONFIG_SQUASHFS) += squashfs.o ++squashfs-y += inode.o ++squashfs-y += squashfs2_0.o +diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/squashfs2_0.c linux-2.6.24-squashfs3.3/fs/squashfs/squashfs2_0.c +--- linux-2.6.24/fs/squashfs/squashfs2_0.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/fs/squashfs/squashfs2_0.c 2007-10-25 00:43:59.000000000 +0100 +@@ -0,0 +1,740 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs2_0.c ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "squashfs.h" ++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir); ++static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *, ++ struct nameidata *); ++ ++static struct file_operations squashfs_dir_ops_2 = { ++ .read = generic_read_dir, ++ .readdir = squashfs_readdir_2 ++}; ++ ++static struct inode_operations squashfs_dir_inode_ops_2 = { ++ .lookup = squashfs_lookup_2 ++}; ++ ++static unsigned char squashfs_filetype_table[] = { ++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK ++}; ++ ++static int read_fragment_index_table_2(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2 ++ (sblk->fragments), GFP_KERNEL))) { ++ ERROR("Failed to allocate uid/gid table\n"); ++ return 0; ++ } ++ ++ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) && ++ !squashfs_read_data(s, (char *) ++ msblk->fragment_index_2, ++ sblk->fragment_table_start, ++ SQUASHFS_FRAGMENT_INDEX_BYTES_2 ++ (sblk->fragments) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) { ++ ERROR("unable to read fragment index table\n"); ++ return 0; ++ } ++ ++ if (msblk->swap) { ++ int i; ++ unsigned int fragment; ++ ++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments); ++ i++) { ++ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment), ++ &msblk->fragment_index_2[i], 1); ++ msblk->fragment_index_2[i] = fragment; ++ } ++ } ++ ++ return 1; ++} ++ ++ ++static int get_fragment_location_2(struct super_block *s, unsigned int fragment, ++ long long *fragment_start_block, ++ unsigned int *fragment_size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ long long start_block = ++ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)]; ++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment); ++ struct squashfs_fragment_entry_2 fragment_entry; ++ ++ if (msblk->swap) { ++ struct squashfs_fragment_entry_2 sfragment_entry; ++ ++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, ++ start_block, offset, ++ sizeof(sfragment_entry), &start_block, ++ &offset)) ++ goto out; ++ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, ++ start_block, offset, ++ sizeof(fragment_entry), &start_block, ++ &offset)) ++ goto out; ++ ++ *fragment_start_block = fragment_entry.start_block; ++ *fragment_size = fragment_entry.size; ++ ++ return 1; ++ ++out: ++ return 0; ++} ++ ++ ++static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, ++ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino) ++{ ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ i->i_ino = ino; ++ i->i_mtime.tv_sec = sblk->mkfs_time; ++ i->i_atime.tv_sec = sblk->mkfs_time; ++ i->i_ctime.tv_sec = sblk->mkfs_time; ++ i->i_uid = msblk->uid[inodeb->uid]; ++ i->i_mode = inodeb->mode; ++ i->i_nlink = 1; ++ i->i_size = 0; ++ if (inodeb->guid == SQUASHFS_GUIDS) ++ i->i_gid = i->i_uid; ++ else ++ i->i_gid = msblk->guid[inodeb->guid]; ++} ++ ++ ++static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode) ++{ ++ struct super_block *s = i->i_sb; ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned int block = SQUASHFS_INODE_BLK(inode) + ++ sblk->inode_table_start; ++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); ++ unsigned int ino = SQUASHFS_MK_VFS_INODE(block - ++ sblk->inode_table_start, offset); ++ long long next_block; ++ unsigned int next_offset; ++ union squashfs_inode_header_2 id, sid; ++ struct squashfs_base_inode_header_2 *inodeb = &id.base, ++ *sinodeb = &sid.base; ++ ++ TRACE("Entered squashfs_read_inode_2\n"); ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, ++ offset, sizeof(*sinodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb, ++ sizeof(*sinodeb)); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) inodeb, block, ++ offset, sizeof(*inodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ squashfs_new_inode(msblk, i, inodeb, ino); ++ ++ switch(inodeb->inode_type) { ++ case SQUASHFS_FILE_TYPE: { ++ struct squashfs_reg_inode_header_2 *inodep = &id.reg; ++ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg; ++ long long frag_blk; ++ unsigned int frag_size = 0; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ frag_blk = SQUASHFS_INVALID_BLK; ++ if (inodep->fragment != SQUASHFS_INVALID_FRAG && ++ !get_fragment_location_2(s, ++ inodep->fragment, &frag_blk, &frag_size)) ++ goto failed_read; ++ ++ i->i_size = inodep->file_size; ++ i->i_fop = &generic_ro_fops; ++ i->i_mode |= S_IFREG; ++ i->i_mtime.tv_sec = inodep->mtime; ++ i->i_atime.tv_sec = inodep->mtime; ++ i->i_ctime.tv_sec = inodep->mtime; ++ i->i_blocks = ((i->i_size - 1) >> 9) + 1; ++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; ++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; ++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->u.s1.block_list_start = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ i->i_data.a_ops = &squashfs_aops; ++ ++ TRACE("File inode %x:%x, start_block %x, " ++ "block_list_start %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, next_block, ++ next_offset); ++ break; ++ } ++ case SQUASHFS_DIR_TYPE: { ++ struct squashfs_dir_inode_header_2 *inodep = &id.dir; ++ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops_2; ++ i->i_fop = &squashfs_dir_ops_2; ++ i->i_mode |= S_IFDIR; ++ i->i_mtime.tv_sec = inodep->mtime; ++ i->i_atime.tv_sec = inodep->mtime; ++ i->i_ctime.tv_sec = inodep->mtime; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = 0; ++ SQUASHFS_I(i)->u.s2.parent_inode = 0; ++ ++ TRACE("Directory inode %x:%x, start_block %x, offset " ++ "%x\n", SQUASHFS_INODE_BLK(inode), ++ offset, inodep->start_block, ++ inodep->offset); ++ break; ++ } ++ case SQUASHFS_LDIR_TYPE: { ++ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir; ++ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops_2; ++ i->i_fop = &squashfs_dir_ops_2; ++ i->i_mode |= S_IFDIR; ++ i->i_mtime.tv_sec = inodep->mtime; ++ i->i_atime.tv_sec = inodep->mtime; ++ i->i_ctime.tv_sec = inodep->mtime; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; ++ SQUASHFS_I(i)->u.s2.directory_index_offset = ++ next_offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = ++ inodep->i_count; ++ SQUASHFS_I(i)->u.s2.parent_inode = 0; ++ ++ TRACE("Long directory inode %x:%x, start_block %x, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, inodep->offset); ++ break; ++ } ++ case SQUASHFS_SYMLINK_TYPE: { ++ struct squashfs_symlink_inode_header_2 *inodep = ++ &id.symlink; ++ struct squashfs_symlink_inode_header_2 *sinodep = ++ &sid.symlink; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_size = inodep->symlink_size; ++ i->i_op = &page_symlink_inode_operations; ++ i->i_data.a_ops = &squashfs_symlink_aops; ++ i->i_mode |= S_IFLNK; ++ SQUASHFS_I(i)->start_block = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ ++ TRACE("Symbolic link inode %x:%x, start_block %llx, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ next_block, next_offset); ++ break; ++ } ++ case SQUASHFS_BLKDEV_TYPE: ++ case SQUASHFS_CHRDEV_TYPE: { ++ struct squashfs_dev_inode_header_2 *inodep = &id.dev; ++ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_mode |= (inodeb->inode_type == ++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : ++ S_IFBLK; ++ init_special_inode(i, i->i_mode, ++ old_decode_dev(inodep->rdev)); ++ ++ TRACE("Device inode %x:%x, rdev %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->rdev); ++ break; ++ } ++ case SQUASHFS_FIFO_TYPE: ++ case SQUASHFS_SOCKET_TYPE: { ++ ++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) ++ ? S_IFIFO : S_IFSOCK; ++ init_special_inode(i, i->i_mode, 0); ++ break; ++ } ++ default: ++ ERROR("Unknown inode type %d in squashfs_iget!\n", ++ inodeb->inode_type); ++ goto failed_read1; ++ } ++ ++ return 1; ++ ++failed_read: ++ ERROR("Unable to read inode [%x:%x]\n", block, offset); ++ ++failed_read1: ++ return 0; ++} ++ ++ ++static int get_dir_index_using_offset(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ long long f_pos) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index_2 index; ++ ++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", ++ i_count, (unsigned int) f_pos); ++ ++ if (f_pos == 0) ++ goto finish; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index_2 sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) &index, ++ index_start, index_offset, ++ sizeof(index), &index_start, ++ &index_offset); ++ ++ if (index.index > f_pos) ++ break; ++ ++ squashfs_get_cached_block(s, NULL, index_start, index_offset, ++ index.size + 1, &index_start, ++ &index_offset); ++ ++ length = index.index; ++ *next_block = index.start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ ++finish: ++ return length; ++} ++ ++ ++static int get_dir_index_using_name(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ const char *name, int size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index_2 *index; ++ char *str; ++ ++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); ++ ++ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + ++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_index\n"); ++ goto failure; ++ } ++ ++ index = (struct squashfs_dir_index_2 *) (str + SQUASHFS_NAME_LEN + 1); ++ strncpy(str, name, size); ++ str[size] = '\0'; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index_2 sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) index, ++ index_start, index_offset, ++ sizeof(struct squashfs_dir_index_2), ++ &index_start, &index_offset); ++ ++ squashfs_get_cached_block(s, index->name, index_start, ++ index_offset, index->size + 1, ++ &index_start, &index_offset); ++ ++ index->name[index->size + 1] = '\0'; ++ ++ if (strcmp(index->name, str) > 0) ++ break; ++ ++ length = index->index; ++ *next_block = index->start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ kfree(str); ++failure: ++ return length; ++} ++ ++ ++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir) ++{ ++ struct inode *i = file->f_dentry->d_inode; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header_2 dirh; ++ struct squashfs_dir_entry_2 *dire; ++ ++ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto finish; ++ } ++ ++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, ++ file->f_pos); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header_2 sdirh; ++ ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry_2 sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block, next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block, next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, ++ dire->size + 1, &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (file->f_pos >= length) ++ continue; ++ ++ dire->name[dire->size + 1] = '\0'; ++ ++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n", ++ (unsigned int) dirent, dire->name, ++ dire->size + 1, (int) file->f_pos, ++ dirh.start_block, dire->offset, ++ squashfs_filetype_table[dire->type]); ++ ++ if (filldir(dirent, dire->name, dire->size + 1, ++ file->f_pos, SQUASHFS_MK_VFS_INODE( ++ dirh.start_block, dire->offset), ++ squashfs_filetype_table[dire->type]) ++ < 0) { ++ TRACE("Filldir returned less than 0\n"); ++ goto finish; ++ } ++ file->f_pos = length; ++ } ++ } ++ ++finish: ++ kfree(dire); ++ return 0; ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ kfree(dire); ++ return 0; ++} ++ ++ ++static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry, ++ struct nameidata *nd) ++{ ++ const unsigned char *name = dentry->d_name.name; ++ int len = dentry->d_name.len; ++ struct inode *inode = NULL; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header_2 dirh; ++ struct squashfs_dir_entry_2 *dire; ++ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1; ++ ++ TRACE("Entered squashfs_lookup_2 [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto exit_loop; ++ } ++ ++ if (len > SQUASHFS_NAME_LEN) ++ goto exit_loop; ++ ++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, name, ++ len); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header_2 sdirh; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry_2 sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block,next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block,next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, dire->size + 1, ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (sorted && name[0] < dire->name[0]) ++ goto exit_loop; ++ ++ if ((len == dire->size + 1) && !strncmp(name, ++ dire->name, len)) { ++ squashfs_inode_t ino = ++ SQUASHFS_MKINODE(dirh.start_block, ++ dire->offset); ++ unsigned int inode_number = SQUASHFS_MK_VFS_INODE(dirh.start_block, ++ dire->offset); ++ ++ TRACE("calling squashfs_iget for directory " ++ "entry %s, inode %x:%x, %lld\n", name, ++ dirh.start_block, dire->offset, ino); ++ ++ inode = squashfs_iget(i->i_sb, ino, inode_number); ++ ++ goto exit_loop; ++ } ++ } ++ } ++ ++exit_loop: ++ kfree(dire); ++ d_add(dentry, inode); ++ return ERR_PTR(0); ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ goto exit_loop; ++} ++ ++ ++int squashfs_2_0_supported(struct squashfs_sb_info *msblk) ++{ ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ msblk->read_inode = squashfs_read_inode_2; ++ msblk->read_fragment_index_table = read_fragment_index_table_2; ++ ++ sblk->bytes_used = sblk->bytes_used_2; ++ sblk->uid_start = sblk->uid_start_2; ++ sblk->guid_start = sblk->guid_start_2; ++ sblk->inode_table_start = sblk->inode_table_start_2; ++ sblk->directory_table_start = sblk->directory_table_start_2; ++ sblk->fragment_table_start = sblk->fragment_table_start_2; ++ ++ return 1; ++} +diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/squashfs.h linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h +--- linux-2.6.24/fs/squashfs/squashfs.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h 2007-08-19 04:23:16.000000000 +0100 +@@ -0,0 +1,86 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs.h ++ */ ++ ++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++#endif ++ ++#ifdef SQUASHFS_TRACE ++#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args) ++#else ++#define TRACE(s, args...) {} ++#endif ++ ++#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args) ++ ++#define SERROR(s, args...) do { \ ++ if (!silent) \ ++ printk(KERN_ERR "SQUASHFS error: "s, ## args);\ ++ } while(0) ++ ++#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args) ++ ++static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode) ++{ ++ return list_entry(inode, struct squashfs_inode_info, vfs_inode); ++} ++ ++#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY) ++#define SQSH_EXTERN ++extern unsigned int squashfs_read_data(struct super_block *s, char *buffer, ++ long long index, unsigned int length, ++ long long *next_index, int srclength); ++extern int squashfs_get_cached_block(struct super_block *s, void *buffer, ++ long long block, unsigned int offset, ++ int length, long long *next_block, ++ unsigned int *next_offset); ++extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct ++ squashfs_fragment_cache *fragment); ++extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block ++ *s, long long start_block, ++ int length); ++extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number); ++extern const struct address_space_operations squashfs_symlink_aops; ++extern const struct address_space_operations squashfs_aops; ++extern struct inode_operations squashfs_dir_inode_ops; ++#else ++#define SQSH_EXTERN static ++#endif ++ ++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk); ++#else ++static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk) ++{ ++ return 0; ++} ++#endif ++ ++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY ++extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk); ++#else ++static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk) ++{ ++ return 0; ++} ++#endif +diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h +--- linux-2.6.24/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h 2007-11-01 03:50:57.000000000 +0000 +@@ -0,0 +1,935 @@ ++#ifndef SQUASHFS_FS ++#define SQUASHFS_FS ++ ++/* ++ * Squashfs ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs_fs.h ++ */ ++ ++#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY ++#define CONFIG_SQUASHFS_2_0_COMPATIBILITY ++#endif ++ ++#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE ++#define SQUASHFS_MAJOR 3 ++#define SQUASHFS_MINOR 1 ++#define SQUASHFS_MAGIC 0x73717368 ++#define SQUASHFS_MAGIC_SWAP 0x68737173 ++#define SQUASHFS_START 0 ++ ++/* size of metadata (inode and directory) blocks */ ++#define SQUASHFS_METADATA_SIZE 8192 ++#define SQUASHFS_METADATA_LOG 13 ++ ++/* default size of data blocks */ ++#define SQUASHFS_FILE_SIZE 131072 ++#define SQUASHFS_FILE_LOG 17 ++ ++#define SQUASHFS_FILE_MAX_SIZE 1048576 ++ ++/* Max number of uids and gids */ ++#define SQUASHFS_UIDS 256 ++#define SQUASHFS_GUIDS 255 ++ ++/* Max length of filename (not 255) */ ++#define SQUASHFS_NAME_LEN 256 ++ ++#define SQUASHFS_INVALID ((long long) 0xffffffffffff) ++#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff) ++#define SQUASHFS_INVALID_BLK ((long long) -1) ++#define SQUASHFS_USED_BLK ((long long) -2) ++ ++/* Filesystem flags */ ++#define SQUASHFS_NOI 0 ++#define SQUASHFS_NOD 1 ++#define SQUASHFS_CHECK 2 ++#define SQUASHFS_NOF 3 ++#define SQUASHFS_NO_FRAG 4 ++#define SQUASHFS_ALWAYS_FRAG 5 ++#define SQUASHFS_DUPLICATE 6 ++#define SQUASHFS_EXPORT 7 ++ ++#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1) ++ ++#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NOI) ++ ++#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NOD) ++ ++#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NOF) ++ ++#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NO_FRAG) ++ ++#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_ALWAYS_FRAG) ++ ++#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_DUPLICATE) ++ ++#define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_EXPORT) ++ ++#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_CHECK) ++ ++#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \ ++ duplicate_checking, exortable) (noi | (nod << 1) | (check_data << 2) \ ++ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \ ++ (duplicate_checking << 6) | (exportable << 7)) ++ ++/* Max number of types and file types */ ++#define SQUASHFS_DIR_TYPE 1 ++#define SQUASHFS_FILE_TYPE 2 ++#define SQUASHFS_SYMLINK_TYPE 3 ++#define SQUASHFS_BLKDEV_TYPE 4 ++#define SQUASHFS_CHRDEV_TYPE 5 ++#define SQUASHFS_FIFO_TYPE 6 ++#define SQUASHFS_SOCKET_TYPE 7 ++#define SQUASHFS_LDIR_TYPE 8 ++#define SQUASHFS_LREG_TYPE 9 ++ ++/* 1.0 filesystem type definitions */ ++#define SQUASHFS_TYPES 5 ++#define SQUASHFS_IPC_TYPE 0 ++ ++/* Flag whether block is compressed or uncompressed, bit is set if block is ++ * uncompressed */ ++#define SQUASHFS_COMPRESSED_BIT (1 << 15) ++ ++#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \ ++ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT) ++ ++#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT)) ++ ++#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24) ++ ++#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) ((B) & \ ++ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ++ ++#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) ++ ++/* ++ * Inode number ops. Inodes consist of a compressed block number, and an ++ * uncompressed offset within that block ++ */ ++#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16)) ++ ++#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff)) ++ ++#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\ ++ << 16) + (B))) ++ ++/* Compute 32 bit VFS inode number from squashfs inode number */ ++#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \ ++ ((b) >> 2) + 1)) ++/* XXX */ ++ ++/* Translate between VFS mode and squashfs mode */ ++#define SQUASHFS_MODE(a) ((a) & 0xfff) ++ ++/* fragment and fragment table defines */ ++#define SQUASHFS_FRAGMENT_BYTES(A) ((A) * sizeof(struct squashfs_fragment_entry)) ++ ++#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \ ++ SQUASHFS_METADATA_SIZE - 1) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\ ++ sizeof(long long)) ++ ++/* inode lookup table defines */ ++#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode_t)) ++ ++#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \ ++ SQUASHFS_METADATA_SIZE - 1) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\ ++ sizeof(long long)) ++ ++/* cached data constants for filesystem */ ++#define SQUASHFS_CACHED_BLKS 8 ++ ++#define SQUASHFS_MAX_FILE_SIZE_LOG 64 ++ ++#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \ ++ (SQUASHFS_MAX_FILE_SIZE_LOG - 2)) ++ ++#define SQUASHFS_MARKER_BYTE 0xff ++ ++/* meta index cache */ ++#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int)) ++#define SQUASHFS_META_ENTRIES 31 ++#define SQUASHFS_META_NUMBER 8 ++#define SQUASHFS_SLOTS 4 ++ ++struct meta_entry { ++ long long data_block; ++ unsigned int index_block; ++ unsigned short offset; ++ unsigned short pad; ++}; ++ ++struct meta_index { ++ unsigned int inode_number; ++ unsigned int offset; ++ unsigned short entries; ++ unsigned short skip; ++ unsigned short locked; ++ unsigned short pad; ++ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES]; ++}; ++ ++ ++/* ++ * definitions for structures on disk ++ */ ++ ++typedef long long squashfs_block_t; ++typedef long long squashfs_inode_t; ++ ++struct squashfs_super_block { ++ unsigned int s_magic; ++ unsigned int inodes; ++ unsigned int bytes_used_2; ++ unsigned int uid_start_2; ++ unsigned int guid_start_2; ++ unsigned int inode_table_start_2; ++ unsigned int directory_table_start_2; ++ unsigned int s_major:16; ++ unsigned int s_minor:16; ++ unsigned int block_size_1:16; ++ unsigned int block_log:16; ++ unsigned int flags:8; ++ unsigned int no_uids:8; ++ unsigned int no_guids:8; ++ unsigned int mkfs_time /* time of filesystem creation */; ++ squashfs_inode_t root_inode; ++ unsigned int block_size; ++ unsigned int fragments; ++ unsigned int fragment_table_start_2; ++ long long bytes_used; ++ long long uid_start; ++ long long guid_start; ++ long long inode_table_start; ++ long long directory_table_start; ++ long long fragment_table_start; ++ long long lookup_table_start; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_index { ++ unsigned int index; ++ unsigned int start_block; ++ unsigned char size; ++ unsigned char name[0]; ++} __attribute__ ((packed)); ++ ++#define SQUASHFS_BASE_INODE_HEADER \ ++ unsigned int inode_type:4; \ ++ unsigned int mode:12; \ ++ unsigned int uid:8; \ ++ unsigned int guid:8; \ ++ unsigned int mtime; \ ++ unsigned int inode_number; ++ ++struct squashfs_base_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++} __attribute__ ((packed)); ++ ++struct squashfs_ipc_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++} __attribute__ ((packed)); ++ ++struct squashfs_dev_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned short rdev; ++} __attribute__ ((packed)); ++ ++struct squashfs_symlink_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned short symlink_size; ++ char symlink[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_reg_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ squashfs_block_t start_block; ++ unsigned int fragment; ++ unsigned int offset; ++ unsigned int file_size; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_lreg_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ squashfs_block_t start_block; ++ unsigned int fragment; ++ unsigned int offset; ++ long long file_size; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned int file_size:19; ++ unsigned int offset:13; ++ unsigned int start_block; ++ unsigned int parent_inode; ++} __attribute__ ((packed)); ++ ++struct squashfs_ldir_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned int file_size:27; ++ unsigned int offset:13; ++ unsigned int start_block; ++ unsigned int i_count:16; ++ unsigned int parent_inode; ++ struct squashfs_dir_index index[0]; ++} __attribute__ ((packed)); ++ ++union squashfs_inode_header { ++ struct squashfs_base_inode_header base; ++ struct squashfs_dev_inode_header dev; ++ struct squashfs_symlink_inode_header symlink; ++ struct squashfs_reg_inode_header reg; ++ struct squashfs_lreg_inode_header lreg; ++ struct squashfs_dir_inode_header dir; ++ struct squashfs_ldir_inode_header ldir; ++ struct squashfs_ipc_inode_header ipc; ++}; ++ ++struct squashfs_dir_entry { ++ unsigned int offset:13; ++ unsigned int type:3; ++ unsigned int size:8; ++ int inode_number:16; ++ char name[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_header { ++ unsigned int count:8; ++ unsigned int start_block; ++ unsigned int inode_number; ++} __attribute__ ((packed)); ++ ++struct squashfs_fragment_entry { ++ long long start_block; ++ unsigned int size; ++ unsigned int pending; ++} __attribute__ ((packed)); ++ ++extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen); ++extern int squashfs_uncompress_init(void); ++extern int squashfs_uncompress_exit(void); ++ ++/* ++ * macros to convert each packed bitfield structure from little endian to big ++ * endian and vice versa. These are needed when creating or using a filesystem ++ * on a machine with different byte ordering to the target architecture. ++ * ++ */ ++ ++#define SQUASHFS_SWAP_START \ ++ int bits;\ ++ int b_pos;\ ++ unsigned long long val;\ ++ unsigned char *s;\ ++ unsigned char *d; ++ ++#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\ ++ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\ ++ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\ ++ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\ ++ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\ ++ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\ ++ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\ ++ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\ ++ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\ ++ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\ ++ SQUASHFS_SWAP((s)->flags, d, 288, 8);\ ++ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\ ++ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\ ++ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\ ++ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\ ++ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\ ++ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\ ++ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\ ++ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\ ++ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\ ++ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\ ++ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\ ++ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\ ++ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\ ++ SQUASHFS_SWAP((s)->lookup_table_start, d, 888, 64);\ ++} ++ ++#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ ++ SQUASHFS_MEMSET(s, d, n);\ ++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ ++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ ++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ ++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ ++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->inode_number, d, 64, 32); ++ ++#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ ++} ++ ++#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_ipc_inode_header))\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_dev_inode_header)); \ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\ ++} ++ ++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_symlink_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\ ++} ++ ++#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_reg_inode_header));\ ++ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\ ++ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\ ++ SQUASHFS_SWAP((s)->offset, d, 192, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\ ++} ++ ++#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_lreg_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\ ++ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\ ++ SQUASHFS_SWAP((s)->offset, d, 224, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_dir_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\ ++ SQUASHFS_SWAP((s)->offset, d, 147, 13);\ ++ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\ ++ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\ ++} ++ ++#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_ldir_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\ ++ SQUASHFS_SWAP((s)->offset, d, 155, 13);\ ++ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\ ++ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\ ++ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\ ++ SQUASHFS_SWAP((s)->index, d, 0, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->size, d, 64, 8);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\ ++ SQUASHFS_SWAP((s)->count, d, 0, 8);\ ++ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\ ++ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\ ++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ ++ SQUASHFS_SWAP((s)->type, d, 13, 3);\ ++ SQUASHFS_SWAP((s)->size, d, 16, 8);\ ++ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\ ++ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\ ++ SQUASHFS_SWAP((s)->size, d, 64, 32);\ ++} ++ ++#define SQUASHFS_SWAP_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1) ++ ++#define SQUASHFS_SWAP_SHORTS(s, d, n) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * 2);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ 16)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\ ++} ++ ++#define SQUASHFS_SWAP_INTS(s, d, n) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * 4);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ 32)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\ ++} ++ ++#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * 8);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ 64)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\ ++} ++ ++#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * bits / 8);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ bits)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) ++#define SQUASHFS_SWAP_LOOKUP_BLOCKS(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) ++ ++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++ ++struct squashfs_base_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++} __attribute__ ((packed)); ++ ++struct squashfs_ipc_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned int type:4; ++ unsigned int offset:4; ++} __attribute__ ((packed)); ++ ++struct squashfs_dev_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned short rdev; ++} __attribute__ ((packed)); ++ ++struct squashfs_symlink_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned short symlink_size; ++ char symlink[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_reg_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned int mtime; ++ unsigned int start_block; ++ unsigned int file_size:32; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned int file_size:19; ++ unsigned int offset:13; ++ unsigned int mtime; ++ unsigned int start_block:24; ++} __attribute__ ((packed)); ++ ++union squashfs_inode_header_1 { ++ struct squashfs_base_inode_header_1 base; ++ struct squashfs_dev_inode_header_1 dev; ++ struct squashfs_symlink_inode_header_1 symlink; ++ struct squashfs_reg_inode_header_1 reg; ++ struct squashfs_dir_inode_header_1 dir; ++ struct squashfs_ipc_inode_header_1 ipc; ++}; ++ ++#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \ ++ SQUASHFS_MEMSET(s, d, n);\ ++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ ++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ ++ SQUASHFS_SWAP((s)->uid, d, 16, 4);\ ++ SQUASHFS_SWAP((s)->guid, d, 20, 4); ++ ++#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\ ++} ++ ++#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_ipc_inode_header_1));\ ++ SQUASHFS_SWAP((s)->type, d, 24, 4);\ ++ SQUASHFS_SWAP((s)->offset, d, 28, 4);\ ++} ++ ++#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_dev_inode_header_1));\ ++ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\ ++} ++ ++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_symlink_inode_header_1));\ ++ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\ ++} ++ ++#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_reg_inode_header_1));\ ++ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_dir_inode_header_1));\ ++ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\ ++ SQUASHFS_SWAP((s)->offset, d, 43, 13);\ ++ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\ ++} ++ ++#endif ++ ++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY ++ ++struct squashfs_dir_index_2 { ++ unsigned int index:27; ++ unsigned int start_block:29; ++ unsigned char size; ++ unsigned char name[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_base_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++} __attribute__ ((packed)); ++ ++struct squashfs_ipc_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++} __attribute__ ((packed)); ++ ++struct squashfs_dev_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned short rdev; ++} __attribute__ ((packed)); ++ ++struct squashfs_symlink_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned short symlink_size; ++ char symlink[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_reg_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned int mtime; ++ unsigned int start_block; ++ unsigned int fragment; ++ unsigned int offset; ++ unsigned int file_size:32; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned int file_size:19; ++ unsigned int offset:13; ++ unsigned int mtime; ++ unsigned int start_block:24; ++} __attribute__ ((packed)); ++ ++struct squashfs_ldir_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned int file_size:27; ++ unsigned int offset:13; ++ unsigned int mtime; ++ unsigned int start_block:24; ++ unsigned int i_count:16; ++ struct squashfs_dir_index_2 index[0]; ++} __attribute__ ((packed)); ++ ++union squashfs_inode_header_2 { ++ struct squashfs_base_inode_header_2 base; ++ struct squashfs_dev_inode_header_2 dev; ++ struct squashfs_symlink_inode_header_2 symlink; ++ struct squashfs_reg_inode_header_2 reg; ++ struct squashfs_dir_inode_header_2 dir; ++ struct squashfs_ldir_inode_header_2 ldir; ++ struct squashfs_ipc_inode_header_2 ipc; ++}; ++ ++struct squashfs_dir_header_2 { ++ unsigned int count:8; ++ unsigned int start_block:24; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_entry_2 { ++ unsigned int offset:13; ++ unsigned int type:3; ++ unsigned int size:8; ++ char name[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_fragment_entry_2 { ++ unsigned int start_block; ++ unsigned int size; ++} __attribute__ ((packed)); ++ ++#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ ++ SQUASHFS_MEMSET(s, d, n);\ ++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ ++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ ++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ ++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ ++ ++#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ ++} ++ ++#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \ ++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2)) ++ ++#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_dev_inode_header_2)); \ ++ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\ ++} ++ ++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_symlink_inode_header_2));\ ++ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\ ++} ++ ++#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_reg_inode_header_2));\ ++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\ ++ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->offset, d, 128, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_dir_inode_header_2));\ ++ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\ ++ SQUASHFS_SWAP((s)->offset, d, 51, 13);\ ++ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\ ++} ++ ++#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_ldir_inode_header_2));\ ++ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\ ++ SQUASHFS_SWAP((s)->offset, d, 59, 13);\ ++ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\ ++ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\ ++ SQUASHFS_SWAP((s)->index, d, 0, 27);\ ++ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\ ++ SQUASHFS_SWAP((s)->size, d, 56, 8);\ ++} ++#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\ ++ SQUASHFS_SWAP((s)->count, d, 0, 8);\ ++ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\ ++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ ++ SQUASHFS_SWAP((s)->type, d, 13, 3);\ ++ SQUASHFS_SWAP((s)->size, d, 16, 8);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\ ++ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\ ++ SQUASHFS_SWAP((s)->size, d, 32, 32);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n) ++ ++/* fragment and fragment table defines */ ++#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2)) ++ ++#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \ ++ SQUASHFS_METADATA_SIZE - 1) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\ ++ sizeof(int)) ++ ++#endif ++ ++#ifdef __KERNEL__ ++ ++/* ++ * macros used to swap each structure entry, taking into account ++ * bitfields and different bitfield placing conventions on differing ++ * architectures ++ */ ++ ++#include ++ ++#ifdef __BIG_ENDIAN ++ /* convert from little endian to big endian */ ++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ ++ tbits, b_pos) ++#else ++ /* convert from big endian to little endian */ ++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ ++ tbits, 64 - tbits - b_pos) ++#endif ++ ++#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\ ++ b_pos = pos % 8;\ ++ val = 0;\ ++ s = (unsigned char *)p + (pos / 8);\ ++ d = ((unsigned char *) &val) + 7;\ ++ for(bits = 0; bits < (tbits + b_pos); bits += 8) \ ++ *d-- = *s++;\ ++ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\ ++} ++ ++#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n); ++ ++#endif ++#endif +diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_i.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h +--- linux-2.6.24/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h 2007-08-19 04:24:08.000000000 +0100 +@@ -0,0 +1,45 @@ ++#ifndef SQUASHFS_FS_I ++#define SQUASHFS_FS_I ++/* ++ * Squashfs ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs_fs_i.h ++ */ ++ ++struct squashfs_inode_info { ++ long long start_block; ++ unsigned int offset; ++ union { ++ struct { ++ long long fragment_start_block; ++ unsigned int fragment_size; ++ unsigned int fragment_offset; ++ long long block_list_start; ++ } s1; ++ struct { ++ long long directory_index_start; ++ unsigned int directory_index_offset; ++ unsigned int directory_index_count; ++ unsigned int parent_inode; ++ } s2; ++ } u; ++ struct inode vfs_inode; ++}; ++#endif +diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_sb.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h +--- linux-2.6.24/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h 2007-08-19 04:24:26.000000000 +0100 +@@ -0,0 +1,76 @@ ++#ifndef SQUASHFS_FS_SB ++#define SQUASHFS_FS_SB ++/* ++ * Squashfs ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs_fs_sb.h ++ */ ++ ++#include ++ ++struct squashfs_cache { ++ long long block; ++ int length; ++ long long next_index; ++ char *data; ++}; ++ ++struct squashfs_fragment_cache { ++ long long block; ++ int length; ++ unsigned int locked; ++ char *data; ++}; ++ ++struct squashfs_sb_info { ++ struct squashfs_super_block sblk; ++ int devblksize; ++ int devblksize_log2; ++ int swap; ++ struct squashfs_cache *block_cache; ++ struct squashfs_fragment_cache *fragment; ++ int next_cache; ++ int next_fragment; ++ int next_meta_index; ++ unsigned int *uid; ++ unsigned int *guid; ++ long long *fragment_index; ++ unsigned int *fragment_index_2; ++ char *read_page; ++ struct mutex read_data_mutex; ++ struct mutex read_page_mutex; ++ struct mutex block_cache_mutex; ++ struct mutex fragment_mutex; ++ struct mutex meta_index_mutex; ++ wait_queue_head_t waitq; ++ wait_queue_head_t fragment_wait_queue; ++ struct meta_index *meta_index; ++ z_stream stream; ++ long long *inode_lookup_table; ++ int unused_cache_blks; ++ int unused_frag_blks; ++ int (*read_inode)(struct inode *i, squashfs_inode_t \ ++ inode); ++ long long (*read_blocklist)(struct inode *inode, int \ ++ index, int readahead_blks, char *block_list, \ ++ unsigned short **block_p, unsigned int *bsize); ++ int (*read_fragment_index_table)(struct super_block *s); ++}; ++#endif +diff -x .gitignore -Nurp linux-2.6.24/init/do_mounts_rd.c linux-2.6.24-squashfs3.3/init/do_mounts_rd.c +--- linux-2.6.24/init/do_mounts_rd.c 2007-10-25 17:41:49.000000000 +0100 ++++ linux-2.6.24-squashfs3.3/init/do_mounts_rd.c 2007-11-01 05:06:25.000000000 +0000 +@@ -5,6 +5,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in + * numbers could not be found. + * + * We currently check for the following magic numbers: ++ * squashfs + * minix + * ext2 + * romfs +@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start + struct ext2_super_block *ext2sb; + struct romfs_super_block *romfsb; + struct cramfs_super *cramfsb; ++ struct squashfs_super_block *squashfsb; + int nblocks = -1; + unsigned char *buf; + +@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start + ext2sb = (struct ext2_super_block *) buf; + romfsb = (struct romfs_super_block *) buf; + cramfsb = (struct cramfs_super *) buf; ++ squashfsb = (struct squashfs_super_block *) buf; + memset(buf, 0xe5, size); + + /* +@@ -101,6 +105,18 @@ identify_ramdisk_image(int fd, int start + goto done; + } + ++ /* squashfs is at block zero too */ ++ if (squashfsb->s_magic == SQUASHFS_MAGIC) { ++ printk(KERN_NOTICE ++ "RAMDISK: squashfs filesystem found at block %d\n", ++ start_block); ++ if (squashfsb->s_major < 3) ++ nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; ++ else ++ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; ++ goto done; ++ } ++ + /* + * Read block 1 to test for minix and ext2 superblock + */ diff --git a/packages/linux/linux-rp-2.6.24/versatile-armv6.patch b/packages/linux/linux-rp-2.6.24/versatile-armv6.patch new file mode 100644 index 0000000000..e2d0060ac3 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/versatile-armv6.patch @@ -0,0 +1,19 @@ +--- + arch/arm/mm/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.23.orig/arch/arm/mm/Kconfig ++++ linux-2.6.23/arch/arm/mm/Kconfig +@@ -343,11 +343,11 @@ config CPU_XSC3 + select IO_36 + + # ARMv6 + config CPU_V6 + bool "Support ARM V6 processor" +- depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 ++ depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_VERSATILE_PB + default y if ARCH_MX3 + select CPU_32v6 + select CPU_ABRT_EV6 + select CPU_CACHE_V6 + select CPU_CACHE_VIPT diff --git a/packages/linux/linux-rp-2.6.24/zylonite-boot.patch b/packages/linux/linux-rp-2.6.24/zylonite-boot.patch new file mode 100644 index 0000000000..f41928eca5 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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.23+2.6.24-rc8.bb b/packages/linux/linux-rp_2.6.23+2.6.24-rc8.bb deleted file mode 100644 index ec06f202f3..0000000000 --- a/packages/linux/linux-rp_2.6.23+2.6.24-rc8.bb +++ /dev/null @@ -1,146 +0,0 @@ -require linux-rp.inc - -PR = "r2" - -DEFAULT_PREFERENCE = "-1" -DEFAULT_PREFERENCE_collie = "1" - -# Handy URLs -# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 -# ${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.23.tar.bz2 \ - ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/patch-2.6.24-rc8.bz2;patch=1 \ - ${RPSRC}/export_atags-r2.patch;patch=1;status=pending \ - ${RPSRC}/lzo_crypto-r2.patch;patch=1;status=pending \ - ${RPSRC}/corgi_rearrange_lcd-r0.patch;patch=1;status=pending \ - ${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \ - ${RPSRC}/hx2750_base-r33.patch;patch=1 \ - ${RPSRC}/hx2750_bl-r9.patch;patch=1 \ - ${RPSRC}/hx2750_pcmcia-r3.patch;patch=1 \ - ${RPSRC}/pxa_keys-r8.patch;patch=1 \ - ${RPSRC}/tsc2101-r18.patch;patch=1 \ - ${RPSRC}/hx2750_test1-r8.patch;patch=1 \ - ${RPSRC}/input_power-r10.patch;patch=1 \ - ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \ - ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \ - ${RPSRC}/pm_changes-r1.patch;patch=1 \ - ${RPSRC}/usb_add_epalloc-r4.patch;patch=1 \ - ${RPSRC}/usb_pxa27x_udc-r8.patch;patch=1 \ - ${RPSRC}/locomo_kbd_tweak-r1.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-r5.patch;patch=1 \ - ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \ - ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \ - file://squashfs3.3.patch;patch=1;status=external \ - ${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://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://binutils-buildid-arm.patch;patch=1 \ - file://versatile-armv6.patch;patch=1 \ - file://defconfig-c7x0 \ - file://defconfig-hx2000 \ - file://defconfig-collie \ - file://defconfig-poodle \ - file://defconfig-akita \ - file://defconfig-spitz \ - file://defconfig-qemuarm \ - file://defconfig-qemux86 \ - file://defconfig-bootcdx86 \ - file://defconfig-htcuniversal \ - file://defconfig-zylonite" -# Tosa disabled until the patchset is updated -# file://defconfig-tosa - -# 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 \ - -# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/) -# (Pavel Machek's git tree has updated versions of this?) -# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1 - -# These patches are extracted from Pavel Machek's git tree -# (diff against vanilla kernel) -SRC_URI_append_collie = "\ - ${TKSRC}/mtd-sharp-flash-hack-r3.patch;patch=1 \ - ${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \ - ${TKSRC}/locomo-r0.patch;patch=1 \ -# ${TKSRC}/locomo_spi-4.patch;patch=1 \ - ${TKSRC}/collie-kexec.patch;patch=1 \ - ${TKSRC}/sharpsl_pm-3.patch;patch=1 \ - ${TKSRC}/collie_pm-2.patch;patch=1 \ - ${TKSRC}/locomokeyb_suspendkey-2.patch;patch=1 \ - ${TKSRC}/ucb1x00_suspend.patch;patch=1 \ - ${TKSRC}/collie-ts.patch;patch=1 \ - ${TKSRC}/pcmcia_suspend.patch;patch=1 \ -" - -SRC_URI_append_poodle = "\ - ${RPSRC}/poodle_serial_vcc-r0.patch;patch=1 \ -" - -SRC_URI_append_tosa = "\ - ${CHSRC}/tmio-core-r4.patch;patch=1 \ - file://tmio-tc6393-r8.patch;patch=1 \ - file://tmio-nand-r8.patch;patch=1 \ - ${CHSRC}/tmio-fb-r6.patch;patch=1 \ - file://tmio-fb-r6-fix-r0.patch;patch=1 \ - file://tosa-keyboard-r19.patch;patch=1 \ - ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \ - file://tosa-pxaac97-r6-fix-r0.patch;patch=1 \ - ${DOSRC}/tosa-tmio-r6.patch;patch=1 \ - file://tosa-power-r18.patch;patch=1 \ - file://tosa-power-r18-fix-r0.patch;patch=1 \ - file://tosa-tmio-lcd-r10.patch;patch=1 \ - file://tosa-tmio-lcd-r10-fix-r0.patch;patch=1 \ - file://tosa-bluetooth-r8.patch;patch=1 \ - file://wm97xx-lg13-r0.patch;patch=1 \ - file://wm97xx-lg13-r0-fix-r0.patch;patch=1 \ - file://wm9712-suspend-cold-res-r2.patch;patch=1 \ - file://sharpsl-pm-postresume-r1.patch;patch=1 \ - file://wm9712-reset-loop-r2.patch;patch=1 \ - file://tosa-lcdnoise-r1.patch;patch=1 \ - file://tosa-lcdnoise-r1-fix-r0.patch;patch=1 \ - file://arm-dma-coherent.patch;patch=1 \ - file://usb-ohci-hooks-r3.patch;patch=1 \ - file://tmio-ohci-r9.patch;patch=1 \ - file://pxa2xx_udc_support_inverse_vbus.patch;patch=1 \ - file://tosa_udc_use_gpio_vbus.patch;patch=1 \ - " -# ${DOSRC}/tosa-asoc-r1.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 \ - " - -S = "${WORKDIR}/linux-2.6.23" diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb new file mode 100644 index 0000000000..68fad7df62 --- /dev/null +++ b/packages/linux/linux-rp_2.6.24.bb @@ -0,0 +1,146 @@ +require linux-rp.inc + +PR = "r0" + +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_collie = "1" + +# Handy URLs +# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 +# ${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.24.tar.bz2 \ + ${RPSRC}/export_atags-r2.patch;patch=1;status=pending \ + ${RPSRC}/lzo_crypto-r2.patch;patch=1;status=pending \ + ${RPSRC}/corgi_rearrange_lcd-r0.patch;patch=1;status=pending \ + ${RPSRC}/allow_disable_deferrred-r0.patch;patch=1 \ + ${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \ + ${RPSRC}/hx2750_base-r33.patch;patch=1 \ + ${RPSRC}/hx2750_bl-r9.patch;patch=1 \ + ${RPSRC}/hx2750_pcmcia-r3.patch;patch=1 \ + ${RPSRC}/pxa_keys-r8.patch;patch=1 \ + ${RPSRC}/tsc2101-r18.patch;patch=1 \ + ${RPSRC}/hx2750_test1-r8.patch;patch=1 \ + ${RPSRC}/input_power-r10.patch;patch=1 \ + ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \ + ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \ + ${RPSRC}/pm_changes-r1.patch;patch=1 \ + ${RPSRC}/usb_add_epalloc-r4.patch;patch=1 \ + ${RPSRC}/usb_pxa27x_udc-r8.patch;patch=1 \ + ${RPSRC}/locomo_kbd_tweak-r1.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-r5.patch;patch=1 \ + ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \ + ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \ + file://squashfs3.3.patch;patch=1;status=external \ + ${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://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://binutils-buildid-arm.patch;patch=1 \ + file://versatile-armv6.patch;patch=1 \ + file://defconfig-c7x0 \ + file://defconfig-hx2000 \ + file://defconfig-collie \ + file://defconfig-poodle \ + file://defconfig-akita \ + file://defconfig-spitz \ + file://defconfig-qemuarm \ + file://defconfig-qemux86 \ + file://defconfig-bootcdx86 \ + file://defconfig-htcuniversal \ + file://defconfig-zylonite" +# Tosa disabled until the patchset is updated +# file://defconfig-tosa + +# 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 \ + +# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/) +# (Pavel Machek's git tree has updated versions of this?) +# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1 + +# These patches are extracted from Pavel Machek's git tree +# (diff against vanilla kernel) +SRC_URI_append_collie = "\ + ${TKSRC}/mtd-sharp-flash-hack-r3.patch;patch=1 \ + ${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \ + ${TKSRC}/locomo-r0.patch;patch=1 \ +# ${TKSRC}/locomo_spi-4.patch;patch=1 \ + ${TKSRC}/collie-kexec.patch;patch=1 \ + ${TKSRC}/sharpsl_pm-3.patch;patch=1 \ + ${TKSRC}/collie_pm-2.patch;patch=1 \ + ${TKSRC}/locomokeyb_suspendkey-2.patch;patch=1 \ + ${TKSRC}/ucb1x00_suspend.patch;patch=1 \ + ${TKSRC}/collie-ts.patch;patch=1 \ + ${TKSRC}/pcmcia_suspend.patch;patch=1 \ +" + +SRC_URI_append_poodle = "\ + ${RPSRC}/poodle_serial_vcc-r0.patch;patch=1 \ +" + +SRC_URI_append_tosa = "\ + ${CHSRC}/tmio-core-r4.patch;patch=1 \ + file://tmio-tc6393-r8.patch;patch=1 \ + file://tmio-nand-r8.patch;patch=1 \ + ${CHSRC}/tmio-fb-r6.patch;patch=1 \ + file://tmio-fb-r6-fix-r0.patch;patch=1 \ + file://tosa-keyboard-r19.patch;patch=1 \ + ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \ + file://tosa-pxaac97-r6-fix-r0.patch;patch=1 \ + ${DOSRC}/tosa-tmio-r6.patch;patch=1 \ + file://tosa-power-r18.patch;patch=1 \ + file://tosa-power-r18-fix-r0.patch;patch=1 \ + file://tosa-tmio-lcd-r10.patch;patch=1 \ + file://tosa-tmio-lcd-r10-fix-r0.patch;patch=1 \ + file://tosa-bluetooth-r8.patch;patch=1 \ + file://wm97xx-lg13-r0.patch;patch=1 \ + file://wm97xx-lg13-r0-fix-r0.patch;patch=1 \ + file://wm9712-suspend-cold-res-r2.patch;patch=1 \ + file://sharpsl-pm-postresume-r1.patch;patch=1 \ + file://wm9712-reset-loop-r2.patch;patch=1 \ + file://tosa-lcdnoise-r1.patch;patch=1 \ + file://tosa-lcdnoise-r1-fix-r0.patch;patch=1 \ + file://arm-dma-coherent.patch;patch=1 \ + file://usb-ohci-hooks-r3.patch;patch=1 \ + file://tmio-ohci-r9.patch;patch=1 \ + file://pxa2xx_udc_support_inverse_vbus.patch;patch=1 \ + file://tosa_udc_use_gpio_vbus.patch;patch=1 \ + " +# ${DOSRC}/tosa-asoc-r1.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 \ + " + +S = "${WORKDIR}/linux-2.6.24" -- cgit v1.2.3 From d32bcf39f06ea4d51ca342c6253e06b6ceb5088a Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 25 Jan 2008 13:50:52 +0000 Subject: divers: remove lines of the form "PACKAGES = ${PN}" from 63 files --- packages/avetanabt/avetanabt_20060413.bb | 1 - packages/avetanabt/avetanabt_cvs.bb | 1 - packages/bluez/bluez-cups-backend_3.18.bb | 1 - packages/bluez/bluez-cups-backend_3.19.bb | 1 - packages/bluez/bluez-cups-backend_3.20.bb | 1 - packages/bluez/bluez-cups-backend_3.22.bb | 1 - packages/bluez/bluez-cups-backend_3.23.bb | 1 - packages/bluez/bluez-cups-backend_3.24.bb | 1 - packages/bluez/bluez-gstreamer-plugin_3.19.bb | 1 - packages/bluez/bluez-gstreamer-plugin_3.20.bb | 1 - packages/bluez/bluez-gstreamer-plugin_3.22.bb | 1 - packages/bluez/bluez-gstreamer-plugin_3.23.bb | 1 - packages/bluez/bluez-gstreamer-plugin_3.24.bb | 1 - packages/bluez/bluez-utils-alsa_3.18.bb | 1 - packages/bluez/bluez-utils-alsa_3.19.bb | 1 - packages/bluez/bluez-utils-alsa_3.20.bb | 1 - packages/bluez/bluez-utils-alsa_3.22.bb | 1 - packages/bluez/bluez-utils-alsa_3.23.bb | 1 - packages/bluez/bluez-utils-alsa_3.24.bb | 1 - packages/busybox/slingbox_1.00.bb | 1 - packages/busybox/slingbox_1.1.3.bb | 1 - packages/busybox/slingbox_1.2.2.bb | 1 - packages/busybox/slingbox_1.3.1.bb | 1 - packages/devio/devio.inc | 1 - packages/elvis/elvis-tiny_2.2.0.bb | 1 - packages/foonas-init/foonas-init_0.10.bb | 1 - packages/ftpd-topfield/ftpd-topfield_0.7.4.bb | 1 - packages/gnu-config/gnu-config_20050701.bb | 1 - packages/ixp4xx/ixp4xx-csr_2.0.bb | 1 - packages/ixp4xx/ixp4xx-csr_2.1.1.bb | 1 - packages/ixp4xx/ixp4xx-csr_2.1.bb | 1 - packages/kdepimpi/pwmpi.inc | 1 - packages/kxml2/kxml2_2.3.0.bb | 1 - packages/man-pages/man-pages_2.41.bb | 1 - packages/matchbox-common/matchbox_0.9.1.bb | 1 - packages/midpath/midpath-alsa_0.1.bb | 1 - packages/midpath/midpath-cldc-sdl_0.1.bb | 1 - packages/midpath/midpath-cldc-x11_0.1.bb | 1 - packages/midpath/midpath-cldc_0.1.bb | 1 - packages/midpath/midpath-gtk_0.1.bb | 1 - packages/midpath/midpath-pulseaudio_0.1.bb | 1 - packages/midpath/midpath-qt3x11_0.1.bb | 1 - packages/midpath/midpath-qte_0.1.bb | 1 - packages/midpath/midpath-test_0.1.bb | 1 - packages/midpath/midpath_0.1.bb | 1 - packages/misc-binary-only/prism-firmware.bb | 1 - packages/nonworking/libmikey/libmikey0_0.3.2.bb | 1 - packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb | 1 - packages/nonworking/libmsip/libmsip0_0.2.2.bb | 1 - packages/notification-daemon/notification-daemon_0.3.6.bb | 1 - packages/notification-daemon/notification-daemon_0.3.7.bb | 1 - packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb | 1 - packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb | 1 - packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb | 1 - packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb | 1 - packages/obsolete/tasks/task-bootstrap-unionroot.bb | 1 - packages/obsolete/tasks/task-bootstrap.bb | 1 - packages/openprotium-init/openprotium-init_0.10.bb | 1 - packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb | 1 - packages/slugos-init/slugos-init_0.10.bb | 1 - packages/slugos-init/slugos-init_4.8.bb | 1 - packages/upslug/upslug2.inc | 1 - packages/wifistix/wifistix-modules_5.0.16.p0.bb | 1 - 63 files changed, 63 deletions(-) diff --git a/packages/avetanabt/avetanabt_20060413.bb b/packages/avetanabt/avetanabt_20060413.bb index 5b408e6a71..cee5fc0849 100644 --- a/packages/avetanabt/avetanabt_20060413.bb +++ b/packages/avetanabt/avetanabt_20060413.bb @@ -10,7 +10,6 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/avetanabt/avetanaBluetooth-${PV}.tgz" S = "${WORKDIR}/avetanabt" -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/libavetanaBT.so ${datadir}/avetanabt/avetanaBT.jar" do_compile() { diff --git a/packages/avetanabt/avetanabt_cvs.bb b/packages/avetanabt/avetanabt_cvs.bb index 08fe2e9b82..44c91666be 100644 --- a/packages/avetanabt/avetanabt_cvs.bb +++ b/packages/avetanabt/avetanabt_cvs.bb @@ -13,7 +13,6 @@ SRC_URI = "cvs://anonymous@avetanabt.cvs.sourceforge.net/cvsroot/avetanabt;modul S = "${WORKDIR}/avetanabt" -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/libavetanaBT.so ${datadir}/avetanabt/avetanaBT.jar" do_compile() { diff --git a/packages/bluez/bluez-cups-backend_3.18.bb b/packages/bluez/bluez-cups-backend_3.18.bb index 64884fa904..d92b53220f 100644 --- a/packages/bluez/bluez-cups-backend_3.18.bb +++ b/packages/bluez/bluez-cups-backend_3.18.bb @@ -20,7 +20,6 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/cups/backend/bluetooth" RDEPENDS_${PN} = "cups" \ No newline at end of file diff --git a/packages/bluez/bluez-cups-backend_3.19.bb b/packages/bluez/bluez-cups-backend_3.19.bb index 64884fa904..d92b53220f 100644 --- a/packages/bluez/bluez-cups-backend_3.19.bb +++ b/packages/bluez/bluez-cups-backend_3.19.bb @@ -20,7 +20,6 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/cups/backend/bluetooth" RDEPENDS_${PN} = "cups" \ No newline at end of file diff --git a/packages/bluez/bluez-cups-backend_3.20.bb b/packages/bluez/bluez-cups-backend_3.20.bb index 64884fa904..d92b53220f 100644 --- a/packages/bluez/bluez-cups-backend_3.20.bb +++ b/packages/bluez/bluez-cups-backend_3.20.bb @@ -20,7 +20,6 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/cups/backend/bluetooth" RDEPENDS_${PN} = "cups" \ No newline at end of file diff --git a/packages/bluez/bluez-cups-backend_3.22.bb b/packages/bluez/bluez-cups-backend_3.22.bb index 64884fa904..d92b53220f 100644 --- a/packages/bluez/bluez-cups-backend_3.22.bb +++ b/packages/bluez/bluez-cups-backend_3.22.bb @@ -20,7 +20,6 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/cups/backend/bluetooth" RDEPENDS_${PN} = "cups" \ No newline at end of file diff --git a/packages/bluez/bluez-cups-backend_3.23.bb b/packages/bluez/bluez-cups-backend_3.23.bb index 64884fa904..d92b53220f 100644 --- a/packages/bluez/bluez-cups-backend_3.23.bb +++ b/packages/bluez/bluez-cups-backend_3.23.bb @@ -20,7 +20,6 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/cups/backend/bluetooth" RDEPENDS_${PN} = "cups" \ No newline at end of file diff --git a/packages/bluez/bluez-cups-backend_3.24.bb b/packages/bluez/bluez-cups-backend_3.24.bb index 1c43313a8a..40e099642a 100644 --- a/packages/bluez/bluez-cups-backend_3.24.bb +++ b/packages/bluez/bluez-cups-backend_3.24.bb @@ -22,7 +22,6 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/cups/backend/bluetooth" RDEPENDS_${PN} = "cups" diff --git a/packages/bluez/bluez-gstreamer-plugin_3.19.bb b/packages/bluez/bluez-gstreamer-plugin_3.19.bb index c5a1a9acee..123259b3a7 100644 --- a/packages/bluez/bluez-gstreamer-plugin_3.19.bb +++ b/packages/bluez/bluez-gstreamer-plugin_3.19.bb @@ -21,6 +21,5 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so" diff --git a/packages/bluez/bluez-gstreamer-plugin_3.20.bb b/packages/bluez/bluez-gstreamer-plugin_3.20.bb index c5a1a9acee..123259b3a7 100644 --- a/packages/bluez/bluez-gstreamer-plugin_3.20.bb +++ b/packages/bluez/bluez-gstreamer-plugin_3.20.bb @@ -21,6 +21,5 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so" diff --git a/packages/bluez/bluez-gstreamer-plugin_3.22.bb b/packages/bluez/bluez-gstreamer-plugin_3.22.bb index c5a1a9acee..123259b3a7 100644 --- a/packages/bluez/bluez-gstreamer-plugin_3.22.bb +++ b/packages/bluez/bluez-gstreamer-plugin_3.22.bb @@ -21,6 +21,5 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so" diff --git a/packages/bluez/bluez-gstreamer-plugin_3.23.bb b/packages/bluez/bluez-gstreamer-plugin_3.23.bb index c5a1a9acee..123259b3a7 100644 --- a/packages/bluez/bluez-gstreamer-plugin_3.23.bb +++ b/packages/bluez/bluez-gstreamer-plugin_3.23.bb @@ -21,6 +21,5 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so" diff --git a/packages/bluez/bluez-gstreamer-plugin_3.24.bb b/packages/bluez/bluez-gstreamer-plugin_3.24.bb index e485d95c36..53b7eb86f2 100644 --- a/packages/bluez/bluez-gstreamer-plugin_3.24.bb +++ b/packages/bluez/bluez-gstreamer-plugin_3.24.bb @@ -23,6 +23,5 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so" diff --git a/packages/bluez/bluez-utils-alsa_3.18.bb b/packages/bluez/bluez-utils-alsa_3.18.bb index e2f48fba49..5c4a07e8ab 100644 --- a/packages/bluez/bluez-utils-alsa_3.18.bb +++ b/packages/bluez/bluez-utils-alsa_3.18.bb @@ -20,5 +20,4 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/alsa-lib/libasound*" diff --git a/packages/bluez/bluez-utils-alsa_3.19.bb b/packages/bluez/bluez-utils-alsa_3.19.bb index e2f48fba49..5c4a07e8ab 100644 --- a/packages/bluez/bluez-utils-alsa_3.19.bb +++ b/packages/bluez/bluez-utils-alsa_3.19.bb @@ -20,5 +20,4 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/alsa-lib/libasound*" diff --git a/packages/bluez/bluez-utils-alsa_3.20.bb b/packages/bluez/bluez-utils-alsa_3.20.bb index e2f48fba49..5c4a07e8ab 100644 --- a/packages/bluez/bluez-utils-alsa_3.20.bb +++ b/packages/bluez/bluez-utils-alsa_3.20.bb @@ -20,5 +20,4 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/alsa-lib/libasound*" diff --git a/packages/bluez/bluez-utils-alsa_3.22.bb b/packages/bluez/bluez-utils-alsa_3.22.bb index e2f48fba49..5c4a07e8ab 100644 --- a/packages/bluez/bluez-utils-alsa_3.22.bb +++ b/packages/bluez/bluez-utils-alsa_3.22.bb @@ -20,5 +20,4 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/alsa-lib/libasound*" diff --git a/packages/bluez/bluez-utils-alsa_3.23.bb b/packages/bluez/bluez-utils-alsa_3.23.bb index e2f48fba49..5c4a07e8ab 100644 --- a/packages/bluez/bluez-utils-alsa_3.23.bb +++ b/packages/bluez/bluez-utils-alsa_3.23.bb @@ -20,5 +20,4 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/alsa-lib/libasound*" diff --git a/packages/bluez/bluez-utils-alsa_3.24.bb b/packages/bluez/bluez-utils-alsa_3.24.bb index 5ef75b54a4..a1e3e85818 100644 --- a/packages/bluez/bluez-utils-alsa_3.24.bb +++ b/packages/bluez/bluez-utils-alsa_3.24.bb @@ -22,5 +22,4 @@ EXTRA_OECONF = " \ --enable-test \ " -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/alsa-lib/libasound*" diff --git a/packages/busybox/slingbox_1.00.bb b/packages/busybox/slingbox_1.00.bb index 2d2d88317c..e52a1b4eb6 100644 --- a/packages/busybox/slingbox_1.00.bb +++ b/packages/busybox/slingbox_1.00.bb @@ -17,7 +17,6 @@ S = "${WORKDIR}/busybox-${PV}" export EXTRA_CFLAGS = "${CFLAGS}" EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}" -PACKAGES = "${PN}" FILES_${PN} = "/" FILES_${PN}-doc = "" FILES_${PN}-dev = "" diff --git a/packages/busybox/slingbox_1.1.3.bb b/packages/busybox/slingbox_1.1.3.bb index 2a86748f28..b290841eed 100644 --- a/packages/busybox/slingbox_1.1.3.bb +++ b/packages/busybox/slingbox_1.1.3.bb @@ -19,7 +19,6 @@ S = "${WORKDIR}/busybox-${PV}" export EXTRA_CFLAGS = "${CFLAGS}" EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}" -PACKAGES = "${PN}" FILES_${PN} = "/" FILES_${PN}-doc = "" FILES_${PN}-dev = "" diff --git a/packages/busybox/slingbox_1.2.2.bb b/packages/busybox/slingbox_1.2.2.bb index 523e2199f5..1a3eaa3985 100644 --- a/packages/busybox/slingbox_1.2.2.bb +++ b/packages/busybox/slingbox_1.2.2.bb @@ -21,7 +21,6 @@ S = "${WORKDIR}/busybox-${PV}" export EXTRA_CFLAGS = "${CFLAGS}" EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}" -PACKAGES = "${PN}" FILES_${PN} = "/" FILES_${PN}-doc = "" FILES_${PN}-dev = "" diff --git a/packages/busybox/slingbox_1.3.1.bb b/packages/busybox/slingbox_1.3.1.bb index 4d3ab56cc3..a680efc843 100644 --- a/packages/busybox/slingbox_1.3.1.bb +++ b/packages/busybox/slingbox_1.3.1.bb @@ -23,7 +23,6 @@ S = "${WORKDIR}/busybox-${PV}" export EXTRA_CFLAGS = "${CFLAGS}" EXTRA_OEMAKE_append = " V=1 ARCH=arm CROSS_COMPILE=${TARGET_PREFIX}" -PACKAGES = "${PN}" FILES_${PN} = "/" FILES_${PN}-doc = "" FILES_${PN}-dev = "" diff --git a/packages/devio/devio.inc b/packages/devio/devio.inc index 4cba2d5cc0..b2d09e81f0 100644 --- a/packages/devio/devio.inc +++ b/packages/devio/devio.inc @@ -10,7 +10,6 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/devio/devio-${PV}.tar.gz" S = "${WORKDIR}/devio-${PV}" # Just the one package at present -PACKAGES = "${PN}" # Set the install dir to /sbin, not /usr/sbin, because devio is used # during bootstrap (we want it to be posible to mount /usr separately) diff --git a/packages/elvis/elvis-tiny_2.2.0.bb b/packages/elvis/elvis-tiny_2.2.0.bb index 0e26c0126a..a5e42bf07c 100644 --- a/packages/elvis/elvis-tiny_2.2.0.bb +++ b/packages/elvis/elvis-tiny_2.2.0.bb @@ -16,5 +16,4 @@ do_install_append() { sed -i -e "s/^set\(.*lptype.*\)/\"set\1/" ${D}/etc/elvis/elvis.ini } -PACKAGES = "${PN}" FILES_${PN} = "/usr/bin/elvis /etc/elvis" diff --git a/packages/foonas-init/foonas-init_0.10.bb b/packages/foonas-init/foonas-init_0.10.bb index c8a1b05232..7c51606e7e 100644 --- a/packages/foonas-init/foonas-init_0.10.bb +++ b/packages/foonas-init/foonas-init_0.10.bb @@ -118,5 +118,4 @@ pkg_postrm_foonas-init() { done } -PACKAGES = "${PN}" FILES_${PN} = "/" diff --git a/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb b/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb index 75d963f6da..356a6018a2 100755 --- a/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb +++ b/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb @@ -17,7 +17,6 @@ INITSCRIPT_NAME = "ftpd-topfield" INITSCRIPT_PARAMS = "defaults" # Just the one package at present -PACKAGES = "${PN}" inherit autotools diff --git a/packages/gnu-config/gnu-config_20050701.bb b/packages/gnu-config/gnu-config_20050701.bb index 2f1b6eb785..8ee0a32120 100644 --- a/packages/gnu-config/gnu-config_20050701.bb +++ b/packages/gnu-config/gnu-config_20050701.bb @@ -29,5 +29,4 @@ do_install () { install -m 0644 config.guess config.sub ${D}${datadir}/gnu-config/ } -PACKAGES = "${PN}" FILES_${PN} = "${bindir} ${datadir}/gnu-config" diff --git a/packages/ixp4xx/ixp4xx-csr_2.0.bb b/packages/ixp4xx/ixp4xx-csr_2.0.bb index a160fe4609..e462c505fb 100644 --- a/packages/ixp4xx/ixp4xx-csr_2.0.bb +++ b/packages/ixp4xx/ixp4xx-csr_2.0.bb @@ -82,7 +82,6 @@ do_stage () { install -m 0644 src/include/*.h ${STAGING_INCDIR}/linux/ixp4xx-csr/ } -PACKAGES = "${PN}" do_install () { install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/ixp400 diff --git a/packages/ixp4xx/ixp4xx-csr_2.1.1.bb b/packages/ixp4xx/ixp4xx-csr_2.1.1.bb index cc063b523e..32685d30f6 100644 --- a/packages/ixp4xx/ixp4xx-csr_2.1.1.bb +++ b/packages/ixp4xx/ixp4xx-csr_2.1.1.bb @@ -113,7 +113,6 @@ do_stage () { fi } -PACKAGES = "${PN}" do_install () { install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/ixp400 diff --git a/packages/ixp4xx/ixp4xx-csr_2.1.bb b/packages/ixp4xx/ixp4xx-csr_2.1.bb index e72de05071..e95f807107 100644 --- a/packages/ixp4xx/ixp4xx-csr_2.1.bb +++ b/packages/ixp4xx/ixp4xx-csr_2.1.bb @@ -105,7 +105,6 @@ do_stage () { fi } -PACKAGES = "${PN}" do_install () { install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/ixp400 diff --git a/packages/kdepimpi/pwmpi.inc b/packages/kdepimpi/pwmpi.inc index 3866b70977..9e3cd8eae7 100644 --- a/packages/kdepimpi/pwmpi.inc +++ b/packages/kdepimpi/pwmpi.inc @@ -36,5 +36,4 @@ do_install() { install -m 0755 ${S}/dest/pwmpi ${D}${bindir} } -PACKAGES = "${PN}" FILES_${PN} = "${palmtopdir} ${bindir}" diff --git a/packages/kxml2/kxml2_2.3.0.bb b/packages/kxml2/kxml2_2.3.0.bb index 284aa1af6d..7682e84311 100644 --- a/packages/kxml2/kxml2_2.3.0.bb +++ b/packages/kxml2/kxml2_2.3.0.bb @@ -28,6 +28,5 @@ install -m 0644 ${DL_DIR}/${JAR} ${STAGING_DATADIR}/java } -PACKAGES = "${PN}" FILES_${PN} = "${datadir}/java/${JAR}" diff --git a/packages/man-pages/man-pages_2.41.bb b/packages/man-pages/man-pages_2.41.bb index b05c591d56..d12d9ff4f5 100644 --- a/packages/man-pages/man-pages_2.41.bb +++ b/packages/man-pages/man-pages_2.41.bb @@ -12,5 +12,4 @@ do_install () { oe_runmake 'prefix=${D}' install } -PACKAGES = "${PN}" FILES_${PN} = "*" diff --git a/packages/matchbox-common/matchbox_0.9.1.bb b/packages/matchbox-common/matchbox_0.9.1.bb index cda90dfb50..0821b03bcc 100644 --- a/packages/matchbox-common/matchbox_0.9.1.bb +++ b/packages/matchbox-common/matchbox_0.9.1.bb @@ -2,7 +2,6 @@ DESCRIPTION = "Metapackage for Matchbox suite" LICENSE = "GPL" RDEPENDS = "matchbox-common matchbox-wm matchbox-panel matchbox-desktop" SECTION = "x11/wm" -PACKAGES = "${PN}" PR = "r1" ALLOW_EMPTY = "1" diff --git a/packages/midpath/midpath-alsa_0.1.bb b/packages/midpath/midpath-alsa_0.1.bb index 6d580405b6..1ccace8500 100644 --- a/packages/midpath/midpath-alsa_0.1.bb +++ b/packages/midpath/midpath-alsa_0.1.bb @@ -30,7 +30,6 @@ do_stage() { : } -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/libmidpathalsa.so \ ${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \ diff --git a/packages/midpath/midpath-cldc-sdl_0.1.bb b/packages/midpath/midpath-cldc-sdl_0.1.bb index 65850e2f4c..6d777f6e8c 100644 --- a/packages/midpath/midpath-cldc-sdl_0.1.bb +++ b/packages/midpath/midpath-cldc-sdl_0.1.bb @@ -32,7 +32,6 @@ do_stage() { install -m 0644 ${S}/external/sdljava-cldc/sdljava-cldc.jar ${STAGING_DATADIR}/java } -PACKAGES = "${PN}" FILES_${PN} = "${datadir}/java/sdljava-cldc.jar \ ${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \ diff --git a/packages/midpath/midpath-cldc-x11_0.1.bb b/packages/midpath/midpath-cldc-x11_0.1.bb index 7c92621c36..7aa8e9c6d9 100644 --- a/packages/midpath/midpath-cldc-x11_0.1.bb +++ b/packages/midpath/midpath-cldc-x11_0.1.bb @@ -31,7 +31,6 @@ do_stage() { install -m 0644 ${S}/external/escher-cldc/core/escher-x11-cldc.jar ${STAGING_DATADIR}/java } -PACKAGES = "${PN}" FILES_${PN} = "${datadir}/java/escher-x11-cldc.jar \ ${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \ diff --git a/packages/midpath/midpath-cldc_0.1.bb b/packages/midpath/midpath-cldc_0.1.bb index 7aeefa5264..e18d42781d 100644 --- a/packages/midpath/midpath-cldc_0.1.bb +++ b/packages/midpath/midpath-cldc_0.1.bb @@ -30,6 +30,5 @@ do_stage() { install -m 0644 dist/midpath-cldc1.1.jar ${STAGING_DATADIR}/midpath-cldc } -PACKAGES = "${PN}" FILES_${PN} = "${datadir}/midpath-cldc/midpath-cldc1.1.jar" diff --git a/packages/midpath/midpath-gtk_0.1.bb b/packages/midpath/midpath-gtk_0.1.bb index 7bf5570ef2..42f6325efa 100644 --- a/packages/midpath/midpath-gtk_0.1.bb +++ b/packages/midpath/midpath-gtk_0.1.bb @@ -32,7 +32,6 @@ do_stage() { : } -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/libmidpathgtk.so \ ${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \ diff --git a/packages/midpath/midpath-pulseaudio_0.1.bb b/packages/midpath/midpath-pulseaudio_0.1.bb index 6344e018a0..1a8c44d38c 100644 --- a/packages/midpath/midpath-pulseaudio_0.1.bb +++ b/packages/midpath/midpath-pulseaudio_0.1.bb @@ -30,7 +30,6 @@ do_stage() { : } -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/libmidpathpulse.so \ ${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \ diff --git a/packages/midpath/midpath-qt3x11_0.1.bb b/packages/midpath/midpath-qt3x11_0.1.bb index 1d24012810..7ad9af9991 100644 --- a/packages/midpath/midpath-qt3x11_0.1.bb +++ b/packages/midpath/midpath-qt3x11_0.1.bb @@ -37,7 +37,6 @@ do_stage() { : } -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/libmidpathqt.so \ ${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \ diff --git a/packages/midpath/midpath-qte_0.1.bb b/packages/midpath/midpath-qte_0.1.bb index 39b9264930..4b7144722f 100644 --- a/packages/midpath/midpath-qte_0.1.bb +++ b/packages/midpath/midpath-qte_0.1.bb @@ -35,7 +35,6 @@ do_stage() { : } -PACKAGES = "${PN}" FILES_${PN} = "${libdir}/libmidpathqt.so \ ${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \ diff --git a/packages/midpath/midpath-test_0.1.bb b/packages/midpath/midpath-test_0.1.bb index 14bfdc97f0..3d06e80797 100644 --- a/packages/midpath/midpath-test_0.1.bb +++ b/packages/midpath/midpath-test_0.1.bb @@ -37,7 +37,6 @@ do_stage() { : } -PACKAGES = "${PN}" FILES_${PN} = "${datadir}/java/midpath-tests.jar \ # ${bindir}/graphical_launcher-j2se.sh \ diff --git a/packages/midpath/midpath_0.1.bb b/packages/midpath/midpath_0.1.bb index 3501144701..e787b053be 100644 --- a/packages/midpath/midpath_0.1.bb +++ b/packages/midpath/midpath_0.1.bb @@ -48,7 +48,6 @@ do_stage() { install -m 0644 dist/midpath.jar ${STAGING_DATADIR}/java } -PACKAGES = "${PN}" FILES_${PN} = "${datadir}/java/midpath.jar \ ${datadir}/java/resources-embedded/com/sun/midp/configuration/ \ diff --git a/packages/misc-binary-only/prism-firmware.bb b/packages/misc-binary-only/prism-firmware.bb index 903c55e15e..3e2cf4531c 100644 --- a/packages/misc-binary-only/prism-firmware.bb +++ b/packages/misc-binary-only/prism-firmware.bb @@ -28,5 +28,4 @@ do_install() { install -m 0644 ${WORKDIR}/hostap.rules ${D}${sysconfdir}/udev/rules.d/ } -PACKAGES = "${PN}" FILES_${PN} += "${base_libdir}" diff --git a/packages/nonworking/libmikey/libmikey0_0.3.2.bb b/packages/nonworking/libmikey/libmikey0_0.3.2.bb index 214faef40f..21210937a6 100644 --- a/packages/nonworking/libmikey/libmikey0_0.3.2.bb +++ b/packages/nonworking/libmikey/libmikey0_0.3.2.bb @@ -11,7 +11,6 @@ SRC_URI = "http://www.minisip.org/snapshots/libmikey-${PV}.tar.gz" S="${WORKDIR}/libmikey-${PV}" -PACKAGES = "${PN}" FILES_${PN} = " ${libdir}/libmikey.so.0 ${libdir}/libmikey.so.0.0.0 " diff --git a/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb b/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb index a7866b35ec..d41a86b4e2 100644 --- a/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb +++ b/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb @@ -11,7 +11,6 @@ SRC_URI = "http://www.minisip.org/snapshots/libmnetutil-${PV}.tar.gz" S="${WORKDIR}/libmnetutil-${PV}" -PACKAGES = "${PN}" FILES_${PN} = " ${libdir}/libmnetutil.so.0 ${libdir}/libmnetutil.so.0.0.0 " diff --git a/packages/nonworking/libmsip/libmsip0_0.2.2.bb b/packages/nonworking/libmsip/libmsip0_0.2.2.bb index 8d8bb905db..161e270f7d 100644 --- a/packages/nonworking/libmsip/libmsip0_0.2.2.bb +++ b/packages/nonworking/libmsip/libmsip0_0.2.2.bb @@ -11,7 +11,6 @@ SRC_URI = "http://www.minisip.org/snapshots/libmsip-${PV}.tar.gz" S="${WORKDIR}/libmsip-${PV}" -PACKAGES = "${PN}" FILES_${PN} = " ${libdir}/libmsip.so.0 ${libdir}/libmsip.so.0.0.0 " diff --git a/packages/notification-daemon/notification-daemon_0.3.6.bb b/packages/notification-daemon/notification-daemon_0.3.6.bb index ee0f597550..5a76d10b31 100644 --- a/packages/notification-daemon/notification-daemon_0.3.6.bb +++ b/packages/notification-daemon/notification-daemon_0.3.6.bb @@ -12,7 +12,6 @@ EXTRA_OECONF = "--disable-binreloc" inherit autotools pkgconfig -PACKAGES = "${PN}" FILES_${PN} = "\ ${libexecdir}/notification-daemon \ ${datadir}/dbus-1/services \ diff --git a/packages/notification-daemon/notification-daemon_0.3.7.bb b/packages/notification-daemon/notification-daemon_0.3.7.bb index 43721f5e28..d86c2f48e8 100644 --- a/packages/notification-daemon/notification-daemon_0.3.7.bb +++ b/packages/notification-daemon/notification-daemon_0.3.7.bb @@ -10,7 +10,6 @@ EXTRA_OECONF = "--disable-binreloc" inherit autotools pkgconfig -PACKAGES = "${PN}" FILES_${PN} = "\ ${libexecdir}/notification-daemon \ ${datadir}/dbus-1/services/ \ diff --git a/packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb b/packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb index 86b0a575eb..da5bdebfcd 100644 --- a/packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb +++ b/packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb @@ -13,7 +13,6 @@ do_install () { ( cd ${S} ; tar cvf - . ) | ( cd ${D} ; tar xvf - ) } -PACKAGES = "${PN}" FILES_${PN} = "/lib" COMPATIBLE_MACHINE = "nslu2" diff --git a/packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb b/packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb index b098ba73ff..ec7689488a 100644 --- a/packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb +++ b/packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb @@ -10,7 +10,6 @@ do_install () { ( cd ${S} ; tar cvf - . ) | ( cd ${D} ; tar xvf - ) } -PACKAGES = "${PN}" FILES_${PN} = "/" COMPATIBLE_MACHINE = "nslu2" diff --git a/packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb b/packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb index 44ef8aa1c9..4da6b6981a 100644 --- a/packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb +++ b/packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb @@ -19,7 +19,6 @@ do_install () { ( cd ${S} ; tar cvf - . ) | ( cd ${D} ; tar xvf - ) } -PACKAGES = "${PN}" FILES_${PN} = "/etc/samba/codepages" COMPATIBLE_MACHINE = "nslu2" diff --git a/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb b/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb index 8b9ccaa8ba..0eebf7d04f 100644 --- a/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb +++ b/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb @@ -177,6 +177,5 @@ do_install () { ( cd ${S} ; tar -c -v -f - --exclude '.pc' . ) | ( cd ${D} ; tar xvf - ) } -PACKAGES = "${PN}" FILES_${PN} = "/" RDEPENDS_${PN} = "nslu2-linksys-libs" diff --git a/packages/obsolete/tasks/task-bootstrap-unionroot.bb b/packages/obsolete/tasks/task-bootstrap-unionroot.bb index e737e31608..a4340eb4e8 100644 --- a/packages/obsolete/tasks/task-bootstrap-unionroot.bb +++ b/packages/obsolete/tasks/task-bootstrap-unionroot.bb @@ -9,7 +9,6 @@ DEFAULT_PREFERENCE = "-1" PACKAGE_ARCH = "${MACHINE_ARCH}" ALLOW_EMPTY = "1" -PACKAGES = "${PN}" MODUTILS ?= "24 26" diff --git a/packages/obsolete/tasks/task-bootstrap.bb b/packages/obsolete/tasks/task-bootstrap.bb index d84f331102..ebe78058b2 100644 --- a/packages/obsolete/tasks/task-bootstrap.bb +++ b/packages/obsolete/tasks/task-bootstrap.bb @@ -6,7 +6,6 @@ PR = "r25" PACKAGE_ARCH = "${MACHINE_ARCH}" ALLOW_EMPTY = "1" -PACKAGES = "${PN}" MODUTILS ?= "24 26" diff --git a/packages/openprotium-init/openprotium-init_0.10.bb b/packages/openprotium-init/openprotium-init_0.10.bb index f8facbb36f..7443fc9fd7 100644 --- a/packages/openprotium-init/openprotium-init_0.10.bb +++ b/packages/openprotium-init/openprotium-init_0.10.bb @@ -143,7 +143,6 @@ pkg_postrm_openprotium-init() { done } -PACKAGES = "${PN}" FILES_${PN} = "/" # It is bad to overwrite /linuxrc as it puts the system back to diff --git a/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb b/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb index 0ceaac41e4..7739f3bb15 100644 --- a/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb +++ b/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb @@ -1,7 +1,6 @@ DESCRIPTION = "The classic Opie media player (core+plugins)." LICENSE = "GPL" ALLOW_EMPTY = "1" -PACKAGES = "${PN}" PACKAGE_ARCH = "all" RDEPENDS = "opie-mediaplayer1-core" RRECOMMENDS = "opie-mediaplayer1-libmadplugin opie-mediaplayer1-libwavplugin \ diff --git a/packages/slugos-init/slugos-init_0.10.bb b/packages/slugos-init/slugos-init_0.10.bb index 247578bab3..2523e2e703 100644 --- a/packages/slugos-init/slugos-init_0.10.bb +++ b/packages/slugos-init/slugos-init_0.10.bb @@ -142,7 +142,6 @@ pkg_postrm_slugos-init() { done } -PACKAGES = "${PN}" FILES_${PN} = "/" # It is bad to overwrite /linuxrc as it puts the system back to diff --git a/packages/slugos-init/slugos-init_4.8.bb b/packages/slugos-init/slugos-init_4.8.bb index 2405d8d080..92ac7e30f3 100644 --- a/packages/slugos-init/slugos-init_4.8.bb +++ b/packages/slugos-init/slugos-init_4.8.bb @@ -141,7 +141,6 @@ pkg_postrm_slugos-init() { done } -PACKAGES = "${PN}" FILES_${PN} = "/" # It is bad to overwrite /linuxrc as it puts the system back to diff --git a/packages/upslug/upslug2.inc b/packages/upslug/upslug2.inc index 9bee027034..1450cf26a0 100644 --- a/packages/upslug/upslug2.inc +++ b/packages/upslug/upslug2.inc @@ -27,5 +27,4 @@ inherit autotools S = "${WORKDIR}/upslug2-${PV}" -PACKAGES = "${PN}" EXTRA_OECONF += "${LIBPCAP_OECONF}" diff --git a/packages/wifistix/wifistix-modules_5.0.16.p0.bb b/packages/wifistix/wifistix-modules_5.0.16.p0.bb index 787c631d16..0eb6877558 100644 --- a/packages/wifistix/wifistix-modules_5.0.16.p0.bb +++ b/packages/wifistix/wifistix-modules_5.0.16.p0.bb @@ -47,7 +47,6 @@ do_install() { install -m 0644 ${WORKDIR}/mcf25 ${D}${sysconfdir}/modutils/mcf25 } -PACKAGES = "${PN}" FILES_${PN} = "${base_libdir}/modules/" FILES_${PN} += "${sysconfdir}/modprobe.d/" FILES_${PN} += "${sysconfdir}/modutils/" -- cgit v1.2.3 From 9122160f08e4cd472a005b318fc51faac59ff8c6 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 25 Jan 2008 14:42:12 +0000 Subject: beep and ez-ipupdate: replace 'PACKAGES =' with 'PACKAGES +='. Partly fixes 2471. --- packages/beep/beep_1.2.2.bb | 2 +- packages/ez-ipupdate/ez-ipupdate_3.0.10.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/beep/beep_1.2.2.bb b/packages/beep/beep_1.2.2.bb index 87c9ee16d6..759f74f8a0 100644 --- a/packages/beep/beep_1.2.2.bb +++ b/packages/beep/beep_1.2.2.bb @@ -10,7 +10,7 @@ SRC_URI = "http://johnath.com/beep/beep-${PV}.tar.gz" SRC_URI += "file://linux-input.patch;patch=1" S = "${WORKDIR}/beep-${PV}" -PACKAGES = "${PN} ${PN}-doc" +PACKAGES += "${PN} ${PN}-doc" inherit autotools diff --git a/packages/ez-ipupdate/ez-ipupdate_3.0.10.bb b/packages/ez-ipupdate/ez-ipupdate_3.0.10.bb index 2b9c578125..fbf5f61a39 100644 --- a/packages/ez-ipupdate/ez-ipupdate_3.0.10.bb +++ b/packages/ez-ipupdate/ez-ipupdate_3.0.10.bb @@ -22,7 +22,7 @@ CONFFILES_${PN} = "${sysconfdir}/ipupdate.conf" inherit autotools update-rc.d -PACKAGES = "ez-ipupdate" +PACKAGES += "ez-ipupdate" do_install_append() { install -d "${D}${sysconfdir}/init.d" -- cgit v1.2.3 From ad70c238e23834669bcbb6a1bdb192fa69e89508 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 25 Jan 2008 15:17:00 +0000 Subject: divers: add debug package for 85 files with hardcoded PACKAGES definition. Partly fixes 2471. --- packages/altboot/altboot.inc | 2 +- packages/altboot/altboot_1.0.8+1.0.9_pre1.bb | 2 +- packages/apache/apache_2.0.54.bb | 2 +- packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb | 2 +- packages/base-files/base-files_3.0.14.bb | 2 +- packages/boost-asio/boost-asio_0.3.7.bb | 2 +- packages/bt950-cs/bt950-cs_0.1.bb | 2 +- packages/db/db3_3.2.9.bb | 2 +- packages/dhcp/dhcp_3.0.1.bb | 2 +- packages/elfkickers/elfkickers_2.0a.bb | 2 +- packages/elvis/elvis_2.2.0.bb | 2 +- packages/faac/faac_1.24.bb | 2 +- packages/gpe-conf/gpe-conf_svn.bb | 2 +- packages/gstreamer/gst-meta-base_0.10.bb | 2 +- packages/hostap/hostap-modules.inc | 2 +- packages/initscripts/initscripts-openprotium_1.0.bb | 2 +- packages/initscripts/initscripts-slugos_1.0.bb | 2 +- packages/inputpipe/inputpipe_svn.bb | 2 +- packages/juce/juce_1.29.bb | 2 +- packages/kdepimpi/kdepimpi-base.inc | 2 +- packages/keyring/keyring_0.6.8.bb | 2 +- packages/klibc/klibc.inc | 2 +- packages/libao/libao-alsa_0.8.6.bb | 2 +- packages/libao/libao-plugin-alsa_0.8.6.bb | 2 +- packages/libdbi/libdbi-drivers_0.7.1.bb | 2 +- packages/libffi/libffi_2.0+gcc3.4.1.bb | 2 +- packages/libnet/libnet_1.1.2.1.bb | 2 +- packages/libqanava/libqanava_0.0.7.bb | 2 +- packages/librcf/librcf_0.4.bb | 2 +- packages/libtool/libtool_1.5.22.bb | 2 +- packages/libtool/libtool_1.5.24.bb | 2 +- packages/madwifi/madwifi-modules_0.9.3.bb | 2 +- packages/madwifi/madwifi-modules_cvs-bsd.bb | 2 +- packages/madwifi/madwifi-modules_cvs.bb | 2 +- packages/madwifi/madwifi-ng_r.inc | 2 +- packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb | 2 +- packages/midpath/midpath-cldc-native_0.1.bb | 2 +- packages/mime-support/mime-support_3.28.bb | 2 +- packages/modutils/modutils_2.4.27.bb | 2 +- packages/mono-xsp/mono-xsp_1.2.5.bb | 2 +- packages/monotone/monotone-6_0.26.bb | 2 +- packages/monotone/monotone-6_0.27.bb | 2 +- packages/monotone/monotone-6_0.31.bb | 2 +- packages/monotone/monotone-6_0.33.bb | 2 +- packages/monotone/monotone-6_0.34.bb | 2 +- packages/monotone/monotone-6_0.37.bb | 2 +- packages/monotone/monotone.inc | 2 +- packages/nonworking/efl/edb-utils_1.0.5.007.bb | 2 +- packages/nonworking/efl/edje-utils_0.5.0.038.bb | 2 +- packages/nonworking/efl/embryo-utils_0.9.1.038.bb | 2 +- packages/obsolete/classpath/classpath-minimal_0.95.bb | 2 +- packages/opie-i18n/opie-i18n.inc | 2 +- packages/opie-taskbar/opie-taskbar-images.inc | 2 +- packages/orinoco/orinoco-modules.inc | 2 +- packages/pine/pine_4.64.bb | 2 +- packages/portaudio/portaudio_0.0.19.bb | 2 +- packages/prismstumbler/prismstumbler_0.7.2.bb | 2 +- packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb | 2 +- packages/prismstumbler/prismstumbler_0.7.3.bb | 2 +- packages/psmisc/psmisc.inc | 2 +- packages/psmisc/psmisc_20.2.bb | 2 +- packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb | 2 +- packages/qpf-fonts/qpf-bitstream-vera_1.10.bb | 2 +- packages/sablevm/sablevm_1.1.9.bb | 2 +- packages/sablevm/sablevm_1.11.3.bb | 2 +- packages/sablevm/sablevm_1.12.bb | 2 +- packages/schedstat-utils/schedstat-utils.bb | 2 +- packages/sgmlspl/sgmlspl-native_1.03ii.bb | 2 +- packages/sphyrna/sphyrna_svn.bb | 2 +- packages/tcp-wrappers/tcp-wrappers_7.6.bb | 2 +- packages/termcap/termcap_11.0.1.bb | 2 +- packages/tetex/tetex-texmf_3.0.bb | 2 +- packages/tmake/tmake_1.11.bb | 2 +- packages/tn5250/tn5250_0.16.5.bb | 2 +- packages/ttf-fonts/ttf-dejavu_2.18.bb | 2 +- packages/ttf-fonts/ttf-gentium_1.02.bb | 2 +- packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb | 2 +- packages/ttf-fonts/ttf-liberation_0.2.bb | 2 +- packages/ttf-fonts/ttf-sazanami_20040629.bb | 2 +- packages/tzdata/tzdata_2007k.bb | 2 +- packages/udhcp/udhcp_0.9.8.bb | 2 +- packages/wlan-ng/wlan-ng-modules.inc | 2 +- packages/wrt/wrt-utils.bb | 2 +- packages/xcb/libxcb_0.9.bb | 2 +- packages/xorg-font/xfonts-xorg_6.8.bb | 2 +- 85 files changed, 85 insertions(+), 85 deletions(-) diff --git a/packages/altboot/altboot.inc b/packages/altboot/altboot.inc index 9e0b3e3df9..8a1eae87e8 100644 --- a/packages/altboot/altboot.inc +++ b/packages/altboot/altboot.inc @@ -11,7 +11,7 @@ S = "${WORKDIR}/trunk/" PACKAGE_ARCH_${PN} = "${MACHINE}" PACKAGE_ARCH_${PN}-doc = "all" PACKAGE_ARCH_${PN}-conf = "${MACHINE}" -PACKAGES = "${PN}-conf ${PN}-doc ${PN}" +PACKAGES = "${PN}-dbg ${PN}-conf ${PN}-doc ${PN}" FILES_${PN}-conf = "/etc/altboot*cfg" diff --git a/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb index 4611d345e2..3128e794b9 100644 --- a/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb +++ b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb @@ -71,6 +71,6 @@ do_rm_work() { PACKAGE_ARCH_${PN} = "all" PACKAGE_ARCH_${PN}-doc = "all" PACKAGE_ARCH_${PN}-conf = "${MACHINE}" -PACKAGES = "${PN}-conf ${PN}-doc ${PN}" +PACKAGES = "${PN}-dbg ${PN}-conf ${PN}-doc ${PN}" FILES_${PN}-conf = "/etc/altboot*.cfg" diff --git a/packages/apache/apache_2.0.54.bb b/packages/apache/apache_2.0.54.bb index 2522658d32..c1f1303d56 100644 --- a/packages/apache/apache_2.0.54.bb +++ b/packages/apache/apache_2.0.54.bb @@ -26,7 +26,7 @@ CONFFILES_${PN} = "${sysconfdir}/apache/httpd.conf \ ${datadir}/apache/htdocs/apache_pb.gif \ " -PACKAGES = "libaprutil libapr apache-dev apache-doc apache" +PACKAGES = "${PN}-dbg libaprutil libapr apache-dev apache-doc apache" FILES_libapr = "${libdir}/libapr*.so.0* ${libdir}/apr.exp" FILES_libaprutil = "${libdir}/libaprutil*.so.0* ${libdir}/aprutil.exp" diff --git a/packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb b/packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb index 705ab532fc..136f6ca42a 100644 --- a/packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb +++ b/packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb @@ -12,7 +12,7 @@ PR = "r2" inherit module SECTION = "base" -PACKAGES = "atmelwlandriver-pcmcia atmelwlandriver-usb" +PACKAGES = "${PN}-dbg atmelwlandriver-pcmcia atmelwlandriver-usb" FILES_atmelwlandriver-pcmcia = "${base_libdir}/modules/${KERNEL_VERSION}/drivers/net/wireless/atmel/pcmf502rd.o ${sysconfdir}/pcmcia/pcmf502rd.conf" FILES_atmelwlandriver-usb = "${base_libdir}/modules/${KERNEL_VERSION}/drivers/net/wireless/atmel/usbvnetr.o" diff --git a/packages/base-files/base-files_3.0.14.bb b/packages/base-files/base-files_3.0.14.bb index 21a83e98e5..8bfbb6702e 100644 --- a/packages/base-files/base-files_3.0.14.bb +++ b/packages/base-files/base-files_3.0.14.bb @@ -142,7 +142,7 @@ do_install_append_netbook-pro () { mkdir -p ${D}/initrd } -PACKAGES = "${PN}-doc ${PN}" +PACKAGES = "${PN}-dbg ${PN}-doc ${PN}" FILES_${PN} = "/*" FILES_${PN}-doc = "${docdir} ${datadir}/common-licenses" diff --git a/packages/boost-asio/boost-asio_0.3.7.bb b/packages/boost-asio/boost-asio_0.3.7.bb index 947f89cae2..a27001e576 100644 --- a/packages/boost-asio/boost-asio_0.3.7.bb +++ b/packages/boost-asio/boost-asio_0.3.7.bb @@ -32,5 +32,5 @@ do_stage() { cp -dpR boost ${STAGING_INCDIR} } -PACKAGES = "${PN}-dev" +PACKAGES = "${PN}-dbg ${PN}-dev" FILES_${PN}-dev = "/usr/include" diff --git a/packages/bt950-cs/bt950-cs_0.1.bb b/packages/bt950-cs/bt950-cs_0.1.bb index dfd288e50a..66820a7e7d 100644 --- a/packages/bt950-cs/bt950-cs_0.1.bb +++ b/packages/bt950-cs/bt950-cs_0.1.bb @@ -11,7 +11,7 @@ file://makefile.patch;patch=1" S = "${WORKDIR}/bt950-${PV}" -PACKAGES = "kernel-module-bt950-cs" +PACKAGES = "${PN}-dbg kernel-module-bt950-cs" FILES_kernel-module-bt950-cs = "/etc/pcmcia/bt950.conf /lib/modules/${KERNEL_VERSION}/kernel/drivers/bluetooth/bt950_cs.o" inherit module diff --git a/packages/db/db3_3.2.9.bb b/packages/db/db3_3.2.9.bb index a130d89bd5..7edba4f543 100644 --- a/packages/db/db3_3.2.9.bb +++ b/packages/db/db3_3.2.9.bb @@ -23,7 +23,7 @@ EXTRA_OEMAKE = "'SHELL=/bin/sh' 'ar=`which ${AR}` cr' 'chmod=`which chmod`' \ 'cp=`which cp`' 'ln=`which ln`' 'mkdir=`which mkdir`' 'ranlib=`which ${RANLIB}`' \ 'rm=`which rm`' 'strip=`which ${STRIP}`'" -PACKAGES = "${PN} ${PN}-bin ${PN}-dev ${PN}-doc ${PN}-locale" +PACKAGES = "${PN}-dbg ${PN} ${PN}-bin ${PN}-dev ${PN}-doc ${PN}-locale" FILES_${PN} = "${libdir}/libdb-3.2*so*" FILES_${PN}-bin = "${bindir}" diff --git a/packages/dhcp/dhcp_3.0.1.bb b/packages/dhcp/dhcp_3.0.1.bb index 1536aea914..650de1391d 100644 --- a/packages/dhcp/dhcp_3.0.1.bb +++ b/packages/dhcp/dhcp_3.0.1.bb @@ -35,7 +35,7 @@ do_install() { install -m 0644 ${WORKDIR}/dhcpd.conf ${D}${sysconfdir}/dhcp/dhcpd.conf } -PACKAGES = "dhcp-server dhcp-client dhcp-relay dhcp-omshell dhcp-dev dhcp-doc" +PACKAGES = "${PN}-dbg dhcp-server dhcp-client dhcp-relay dhcp-omshell dhcp-dev dhcp-doc" FILES_dhcp-server = "${sbindir}/dhcpd /etc/init.d/dhcp-server /etc/default/dhcp-server /etc/dhcp/dhcpd.conf" FILES_dhcp-relay = "${sbindir}/dhcrelay /etc/init.d/dhcp-relay /etc/default/dhcp-relay" FILES_dhcp-client = "/sbin/ /etc/dhcp/dhclient.conf" diff --git a/packages/elfkickers/elfkickers_2.0a.bb b/packages/elfkickers/elfkickers_2.0a.bb index 6f18da5960..b369b8690c 100644 --- a/packages/elfkickers/elfkickers_2.0a.bb +++ b/packages/elfkickers/elfkickers_2.0a.bb @@ -11,7 +11,7 @@ S = "${WORKDIR}/ELFkickers" ELFPKGS = "ebfc elfls elftoc \ rebind sstrip" -PACKAGES = "${ELFPKGS}" +PACKAGES = "${PN}-dbg ${ELFPKGS}" FILES_ebfc = "${bindir}/ebfc" FILES_elfls = "${bindir}/elfls" FILES_elftoc = "${bindir}/elftoc" diff --git a/packages/elvis/elvis_2.2.0.bb b/packages/elvis/elvis_2.2.0.bb index 738822b139..c0f92627bf 100644 --- a/packages/elvis/elvis_2.2.0.bb +++ b/packages/elvis/elvis_2.2.0.bb @@ -54,7 +54,7 @@ pkg_prerm_${PN} () { update-alternatives --remove vi /usr/bin/elvis } -PACKAGES = "${PN} ${PN}-doc ${PN}-tools" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-tools" FILES_${PN}-doc = "/usr/share/elvis/manual /usr/share/elvis/README" FILES_${PN}-tools = "/usr/bin/elvfmt /usr/bin/elvtags /usr/bin/ref" FILES_${PN} = "/usr/bin/elvis /etc/elvis /usr/share/elvis/scripts /usr/share/elvis/README /usr/share/elvis/*.*" diff --git a/packages/faac/faac_1.24.bb b/packages/faac/faac_1.24.bb index 253310d1c5..f6ba784389 100644 --- a/packages/faac/faac_1.24.bb +++ b/packages/faac/faac_1.24.bb @@ -9,7 +9,7 @@ inherit autotools SRC_URI = "${SOURCEFORGE_MIRROR}/faac/${PN}-${PV}.tar.gz" S="${WORKDIR}/${PN}" -PACKAGES = "${PN} lib${PN} lib${PN}-dev" +PACKAGES = "${PN}-dbg ${PN} lib${PN} lib${PN}-dev" FILES_${PN} = " ${bindir}/faac " FILES_lib${PN} = " ${libdir}/libfaac.so.0 ${libdir}/libfaac.so.0.0.0 " diff --git a/packages/gpe-conf/gpe-conf_svn.bb b/packages/gpe-conf/gpe-conf_svn.bb index 266053073a..dfa7a8bce6 100644 --- a/packages/gpe-conf/gpe-conf_svn.bb +++ b/packages/gpe-conf/gpe-conf_svn.bb @@ -18,7 +18,7 @@ SRC_URI = "${GPE_SVN}" S = "${WORKDIR}/${PN}" -PACKAGES = "gpe-conf gpe-conf-panel" +PACKAGES = "${PN}-dbg gpe-conf gpe-conf-panel" FILES_${PN} = "${sysconfdir} ${bindir} ${datadir}/pixmaps \ ${datadir}/applications/gpe-conf-* ${datadir}/gpe/pixmaps \ diff --git a/packages/gstreamer/gst-meta-base_0.10.bb b/packages/gstreamer/gst-meta-base_0.10.bb index 3a33b2086c..a37623210b 100644 --- a/packages/gstreamer/gst-meta-base_0.10.bb +++ b/packages/gstreamer/gst-meta-base_0.10.bb @@ -4,7 +4,7 @@ DESCRIPTION = "Gstreamer package groups" DEPENDS = "gstreamer gst-plugins-base gst-plugins-bad gst-plugins-good gst-plugins-ugly" PR = "r10" -PACKAGES = "\ +PACKAGES = "${PN}-dbg \ gst-meta-base \ gst-meta-audio \ gst-meta-debug \ diff --git a/packages/hostap/hostap-modules.inc b/packages/hostap/hostap-modules.inc index 01e4e53710..3184f00fb3 100644 --- a/packages/hostap/hostap-modules.inc +++ b/packages/hostap/hostap-modules.inc @@ -31,7 +31,7 @@ do_install() { install -m 0644 driver/modules/hostap_cs${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/pcmcia/ } -PACKAGES = "hostap-modules-cs hostap-modules-pci hostap-modules" +PACKAGES = "${PN}-dbg hostap-modules-cs hostap-modules-pci hostap-modules" FILES_hostap-modules-cs = "/lib/modules/${KERNEL_VERSION}/pcmcia/ /${sysconfdir}/pcmcia/" FILES_hostap-modules-pci = "/lib/modules/${KERNEL_VERSION}/net/hostap_pci${KERNEL_OBJECT_SUFFIX}" FILES_hostap-modules = "/lib/modules/" diff --git a/packages/initscripts/initscripts-openprotium_1.0.bb b/packages/initscripts/initscripts-openprotium_1.0.bb index 890bbd756c..1ae398e962 100644 --- a/packages/initscripts/initscripts-openprotium_1.0.bb +++ b/packages/initscripts/initscripts-openprotium_1.0.bb @@ -15,7 +15,7 @@ PR := "${PR}.11" FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/${P}', '${FILE_DIRNAME}/initscripts-${PV}', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}" -PACKAGES = "${PN}" +PACKAGES = "${PN}-dbg ${PN}" SRC_URI += "file://openprotium/devfs.sh" SRC_URI += "file://openprotium/domainname.sh" diff --git a/packages/initscripts/initscripts-slugos_1.0.bb b/packages/initscripts/initscripts-slugos_1.0.bb index 76d88f4627..0608db714d 100644 --- a/packages/initscripts/initscripts-slugos_1.0.bb +++ b/packages/initscripts/initscripts-slugos_1.0.bb @@ -14,7 +14,7 @@ PR := "${PR}.12" FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/${P}', '${FILE_DIRNAME}/initscripts-${PV}', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}" -PACKAGES = "${PN}" +PACKAGES = "${PN}-dbg ${PN}" SRC_URI += "file://alignment.sh" SRC_URI += "file://domainname.sh" diff --git a/packages/inputpipe/inputpipe_svn.bb b/packages/inputpipe/inputpipe_svn.bb index 3274e9a5eb..40d78f9139 100644 --- a/packages/inputpipe/inputpipe_svn.bb +++ b/packages/inputpipe/inputpipe_svn.bb @@ -18,7 +18,7 @@ do_install() { install inputpipe-client ${D}${bindir} } -PACKAGES = "inputpipe-server inputpipe-client" +PACKAGES = "${PN}-dbg inputpipe-server inputpipe-client" FILES_inputpipe-client = "${bindir}/inputpipe-client" FILES_inputpipe-server = "${bindir}/inputpipe-server" diff --git a/packages/juce/juce_1.29.bb b/packages/juce/juce_1.29.bb index c5a920a0dc..59fd25f2b8 100644 --- a/packages/juce/juce_1.29.bb +++ b/packages/juce/juce_1.29.bb @@ -28,6 +28,6 @@ do_install() { install -m 0655 demo/build/linux/build/jucedemo ${D}${bindir} } -PACKAGES = "jucedemo" +PACKAGES = "${PN}-dbg jucedemo" FILES_jucedemo = "${bindir}" diff --git a/packages/kdepimpi/kdepimpi-base.inc b/packages/kdepimpi/kdepimpi-base.inc index 036292d81f..250cab0614 100644 --- a/packages/kdepimpi/kdepimpi-base.inc +++ b/packages/kdepimpi/kdepimpi-base.inc @@ -150,7 +150,7 @@ do_install() { } -PACKAGES = "libmicrokcal libmicrokabc kopi-applet kopi kapi libmicrokdelibs kammu libmicrokammu" +PACKAGES = "${PN}-dbg libmicrokcal libmicrokabc kopi-applet kopi kapi libmicrokdelibs kammu libmicrokammu" FILES_kopi = "${bindir}/kopi ${palmtopdir}/apps/1Pim/korganizer.desktop ${palmtopdir}/pics/kdepim/korganizer/* " FILES_kapi = "${bindir}/kapi ${palmtopdir}/apps/1Pim/kaddressbook.desktop ${palmtopdir}/pics/kdepim/kaddressbook/* ${palmtopdir}/lib/libmicrokabc_* ${palmtopdir}/lib/libmicrokabcformat_binary*" diff --git a/packages/keyring/keyring_0.6.8.bb b/packages/keyring/keyring_0.6.8.bb index 02403bc2e1..5696a6618b 100644 --- a/packages/keyring/keyring_0.6.8.bb +++ b/packages/keyring/keyring_0.6.8.bb @@ -29,7 +29,7 @@ do_install() { install -m 0644 ${S}/*.html ${D}${palmtopdir}/help/html/ } -PACKAGES = "${PN} ${PN}-help" +PACKAGES = "${PN}-dbg ${PN} ${PN}-help" FILES_${PN} = " ${palmtopdir}${base_bindir} ${palmtopdir}/apps ${palmtopdir}/pics" FILES_${PN}-help = " ${palmtopdir}/help/html" diff --git a/packages/klibc/klibc.inc b/packages/klibc/klibc.inc index a7f0094264..539e2fbf84 100644 --- a/packages/klibc/klibc.inc +++ b/packages/klibc/klibc.inc @@ -46,7 +46,7 @@ INSTALLBINDIR = "${INSTALLPREFIX}bin" INSTALLLIBDIR = "${INSTALLPREFIX}lib" INSTALLINCDIR = "${INSTALLPREFIX}include" -PACKAGES = "${PN} ${PN}-dev ${PN}-doc" +PACKAGES = "${PN}-dbg ${PN} ${PN}-dev ${PN}-doc" FILES_${PN} = "/lib/*.so* ${INSTALLBINDIR}" FILES_${PN}-dev = "/usr/bin ${INSTALLINCDIR} ${INSTALLLIBDIR}" diff --git a/packages/libao/libao-alsa_0.8.6.bb b/packages/libao/libao-alsa_0.8.6.bb index 5af8fa687a..c6fda2dbef 100644 --- a/packages/libao/libao-alsa_0.8.6.bb +++ b/packages/libao/libao-alsa_0.8.6.bb @@ -20,6 +20,6 @@ do_stage() { oe_libinstall -so -C src libao ${STAGING_LIBDIR} } -PACKAGES = "libao-alsa-plugin libao-alsa-plugin-dev" +PACKAGES = "${PN}-dbg libao-alsa-plugin libao-alsa-plugin-dev" FILES_libao-alsa-plugin= "${libdir}/ao/plugins-2/libalsa*.so" FILES_libao-alsa-plugin-dev += "${libdir}/ao/plugins-2/libalsa*.la" diff --git a/packages/libao/libao-plugin-alsa_0.8.6.bb b/packages/libao/libao-plugin-alsa_0.8.6.bb index 86dc4afc14..94727ad5c7 100644 --- a/packages/libao/libao-plugin-alsa_0.8.6.bb +++ b/packages/libao/libao-plugin-alsa_0.8.6.bb @@ -5,7 +5,7 @@ SECTION = "libs" PRIORITY = "optional" DEPENDS = "alsa-lib libao" PROVIDES = "libao-alsa" -PACKAGES = "libao-alsa libao-alsa-dev" +PACKAGES = "${PN}-dbg libao-alsa libao-alsa-dev" PR = "r3" SRC_URI = "http://downloads.xiph.org/releases/ao/libao-${PV}.tar.gz" diff --git a/packages/libdbi/libdbi-drivers_0.7.1.bb b/packages/libdbi/libdbi-drivers_0.7.1.bb index d36643dc22..2e3bc5cf16 100644 --- a/packages/libdbi/libdbi-drivers_0.7.1.bb +++ b/packages/libdbi/libdbi-drivers_0.7.1.bb @@ -14,7 +14,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/libdbi-drivers/libdbi-drivers-${PV}.tar.gz" inherit autotools -PACKAGES = "libdbd-sqlite" +PACKAGES = "${PN}-dbg libdbd-sqlite" EXTRA_OECONF = "--with-dbi-incdir=${STAGING_INCDIR} \ --with-sqlite \ diff --git a/packages/libffi/libffi_2.0+gcc3.4.1.bb b/packages/libffi/libffi_2.0+gcc3.4.1.bb index 3e0d789412..6b2df35ae1 100644 --- a/packages/libffi/libffi_2.0+gcc3.4.1.bb +++ b/packages/libffi/libffi_2.0+gcc3.4.1.bb @@ -6,7 +6,7 @@ PR = "r1" inherit autotools gettext -PACKAGES = "${PN} ${PN}-dev" +PACKAGES = "${PN}-dbg ${PN} ${PN}-dev" FILES_${PN} = "${libdir}/libffi.so.*" diff --git a/packages/libnet/libnet_1.1.2.1.bb b/packages/libnet/libnet_1.1.2.1.bb index 2dc6e713f9..b5fada0148 100644 --- a/packages/libnet/libnet_1.1.2.1.bb +++ b/packages/libnet/libnet_1.1.2.1.bb @@ -33,7 +33,7 @@ do_stage () { } #static build -PACKAGES = "${PN}-dev ${PN}-doc" +PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-doc" FILES_${PN}-dev += "${bindir}/libnet-config" diff --git a/packages/libqanava/libqanava_0.0.7.bb b/packages/libqanava/libqanava_0.0.7.bb index 5edf1417c1..af1e8616f5 100644 --- a/packages/libqanava/libqanava_0.0.7.bb +++ b/packages/libqanava/libqanava_0.0.7.bb @@ -41,7 +41,7 @@ do_install() { done } -PACKAGES = "libqanava-can libqanava-la libqanava-utl qanava-examples" +PACKAGES = "${PN}-dbg libqanava-can libqanava-la libqanava-utl qanava-examples" FILES_libqanava-can = "${libdir}/libqanava_can*.so*" FILES_libqanava-la = "${libdir}/libqanava_la*.so*" FILES_libqanava-utl = "${libdir}/libqanava_utl*.so*" diff --git a/packages/librcf/librcf_0.4.bb b/packages/librcf/librcf_0.4.bb index d18d2d8241..7d767750c8 100644 --- a/packages/librcf/librcf_0.4.bb +++ b/packages/librcf/librcf_0.4.bb @@ -36,7 +36,7 @@ do_stage() { tar -C include --exclude='*.diff' -cvf - . | tar -C ${STAGING_INCDIR} -xvf - } -PACKAGES = "${PN}-mt ${PN}-st ${PN}-dev" +PACKAGES = "${PN}-dbg ${PN}-mt ${PN}-st ${PN}-dev" FILES_${PN}-mt = "/usr/lib/libRCFmt.so*" FILES_${PN}-st = "/usr/lib/libRCFst.so*" FILES_${PN}-dev = "/usr/lib/libRCF[sm]t.a /usr/include" diff --git a/packages/libtool/libtool_1.5.22.bb b/packages/libtool/libtool_1.5.22.bb index d470d30cda..66182cb57e 100644 --- a/packages/libtool/libtool_1.5.22.bb +++ b/packages/libtool/libtool_1.5.22.bb @@ -15,7 +15,7 @@ SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \ # file://3figures.patch;patch=1" S = "${WORKDIR}/libtool-${PV}" -PACKAGES = "libltdl libltdl-dev ${PN}" +PACKAGES = "${PN}-dbg libltdl libltdl-dev ${PN}" FILES_${PN} += "${datadir}/aclocal*" FILES_libltdl = "${libdir}/libltdl.so.*" FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h" diff --git a/packages/libtool/libtool_1.5.24.bb b/packages/libtool/libtool_1.5.24.bb index de91370ac5..f40613f3ee 100644 --- a/packages/libtool/libtool_1.5.24.bb +++ b/packages/libtool/libtool_1.5.24.bb @@ -16,7 +16,7 @@ SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \ S = "${WORKDIR}/libtool-${PV}" -PACKAGES = "libltdl libltdl-dev ${PN}" +PACKAGES = "${PN}-dbg libltdl libltdl-dev ${PN}" FILES_${PN} += "${datadir}/aclocal*" FILES_libltdl = "${libdir}/libltdl.so.*" FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h" diff --git a/packages/madwifi/madwifi-modules_0.9.3.bb b/packages/madwifi/madwifi-modules_0.9.3.bb index 523b01c9e0..25c5aae1d3 100644 --- a/packages/madwifi/madwifi-modules_0.9.3.bb +++ b/packages/madwifi/madwifi-modules_0.9.3.bb @@ -52,6 +52,6 @@ else fi } -PACKAGES = "madwifi-tools ${PN}" +PACKAGES = "${PN}-dbg madwifi-tools ${PN}" FILES_${PN} = "/lib/modules/" FILES_madwifi-tools = "/usr/sbin/" diff --git a/packages/madwifi/madwifi-modules_cvs-bsd.bb b/packages/madwifi/madwifi-modules_cvs-bsd.bb index 033fe7edd4..d570816fc1 100644 --- a/packages/madwifi/madwifi-modules_cvs-bsd.bb +++ b/packages/madwifi/madwifi-modules_cvs-bsd.bb @@ -47,6 +47,6 @@ else fi } -PACKAGES = "madwifi-tools ${PN}" +PACKAGES = "${PN}-dbg madwifi-tools ${PN}" FILES_${PN} = "/lib/modules/" FILES_madwifi-tools = "/usr/" diff --git a/packages/madwifi/madwifi-modules_cvs.bb b/packages/madwifi/madwifi-modules_cvs.bb index 6df39671db..c5cf6cf806 100644 --- a/packages/madwifi/madwifi-modules_cvs.bb +++ b/packages/madwifi/madwifi-modules_cvs.bb @@ -50,6 +50,6 @@ else fi } -PACKAGES = "madwifi-tools ${PN}" +PACKAGES = "${PN}-dbg madwifi-tools ${PN}" FILES_${PN} = "/lib/modules/" FILES_madwifi-tools = "/usr/" diff --git a/packages/madwifi/madwifi-ng_r.inc b/packages/madwifi/madwifi-ng_r.inc index 73c585b0d8..22cf332420 100644 --- a/packages/madwifi/madwifi-ng_r.inc +++ b/packages/madwifi/madwifi-ng_r.inc @@ -55,6 +55,6 @@ else fi } -PACKAGES = "${PN}-modules ${PN}-tools" +PACKAGES = "${PN}-dbg ${PN}-modules ${PN}-tools" FILES_${PN}-modules = "/lib/modules/" FILES_${PN}-tools = "/usr/" diff --git a/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb b/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb index c695388780..592ffa50a2 100644 --- a/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb +++ b/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb @@ -12,7 +12,7 @@ PACKAGE_ARCH = "all" inherit autotools pkgconfig # split into several packages plus one meta package -PACKAGES = "${PN} ${PN}-industrial ${PN}-expose ${PN}-mbcrystal" +PACKAGES = "${PN}-dbg ${PN} ${PN}-industrial ${PN}-expose ${PN}-mbcrystal" ALLOW_EMPTY_${PN} = "1" FILES_${PN} = "" diff --git a/packages/midpath/midpath-cldc-native_0.1.bb b/packages/midpath/midpath-cldc-native_0.1.bb index 30f67854d4..4e54497bde 100644 --- a/packages/midpath/midpath-cldc-native_0.1.bb +++ b/packages/midpath/midpath-cldc-native_0.1.bb @@ -4,7 +4,7 @@ inherit native require midpath-cldc_${PV}.bb -PACKAGES = " " +PACKAGES = "${PN}-dbg " do_install() { : diff --git a/packages/mime-support/mime-support_3.28.bb b/packages/mime-support/mime-support_3.28.bb index 7febf2c1e0..f5ebfb650d 100644 --- a/packages/mime-support/mime-support_3.28.bb +++ b/packages/mime-support/mime-support_3.28.bb @@ -10,7 +10,7 @@ PR = "r2" SRC_URI = "${DEBIAN_MIRROR}/main/m/mime-support/mime-support_${PV}-1.tar.gz" S = "${WORKDIR}/${PN}" -PACKAGES = "${PN} ${PN}-doc" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc" FILES_${PN} += " ${libdir}/mime" docdir_append = "/${PN}" diff --git a/packages/modutils/modutils_2.4.27.bb b/packages/modutils/modutils_2.4.27.bb index c02dc1d5c3..9cedecaa9a 100644 --- a/packages/modutils/modutils_2.4.27.bb +++ b/packages/modutils/modutils_2.4.27.bb @@ -82,7 +82,7 @@ pkg_prerm_modutils-modinfo() { update-alternatives --remove modinfo /sbin/modinfo.24 } -PACKAGES = "modutils-depmod modutils-modinfo modutils-doc modutils" +PACKAGES = "${PN}-dbg modutils-depmod modutils-modinfo modutils-doc modutils" FILES_modutils-depmod = "sbin/depmod.24" FILES_modutils-modinfo = "sbin/modinfo.24" diff --git a/packages/mono-xsp/mono-xsp_1.2.5.bb b/packages/mono-xsp/mono-xsp_1.2.5.bb index bc3386d5bd..f5193af9a6 100644 --- a/packages/mono-xsp/mono-xsp_1.2.5.bb +++ b/packages/mono-xsp/mono-xsp_1.2.5.bb @@ -19,7 +19,7 @@ SRC_URI = "http://go-mono.com/sources/xsp/xsp-${PV}.tar.bz2" S = "${WORKDIR}/xsp-${PV}" -PACKAGES = "\ +PACKAGES = "${PN}-dbg \ libmono-webserver1.0-cil \ libmono-webserver2.0-cil \ mono-xsp \ diff --git a/packages/monotone/monotone-6_0.26.bb b/packages/monotone/monotone-6_0.26.bb index 2cb59c608f..afbe65fada 100644 --- a/packages/monotone/monotone-6_0.26.bb +++ b/packages/monotone/monotone-6_0.26.bb @@ -37,7 +37,7 @@ do_install_append() { cp -pPR tests ${D}${tsd}/tests } -PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite" tsd = "/home/monotone/${PN}" FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests" RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules" diff --git a/packages/monotone/monotone-6_0.27.bb b/packages/monotone/monotone-6_0.27.bb index 2cb59c608f..afbe65fada 100644 --- a/packages/monotone/monotone-6_0.27.bb +++ b/packages/monotone/monotone-6_0.27.bb @@ -37,7 +37,7 @@ do_install_append() { cp -pPR tests ${D}${tsd}/tests } -PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite" tsd = "/home/monotone/${PN}" FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests" RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules" diff --git a/packages/monotone/monotone-6_0.31.bb b/packages/monotone/monotone-6_0.31.bb index 103c10d2e4..5be156f2be 100644 --- a/packages/monotone/monotone-6_0.31.bb +++ b/packages/monotone/monotone-6_0.31.bb @@ -41,7 +41,7 @@ do_install_append() { cp -pPR tests ${D}${tsd}/tests } -PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite" tsd = "/home/monotone/${PN}" FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests" RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules" diff --git a/packages/monotone/monotone-6_0.33.bb b/packages/monotone/monotone-6_0.33.bb index 64b1d1699e..e58477ddd1 100644 --- a/packages/monotone/monotone-6_0.33.bb +++ b/packages/monotone/monotone-6_0.33.bb @@ -45,7 +45,7 @@ do_install_append() { rm ${D}/home/monotone/monotone-6/tests/diff_a_binary_file/binary } -PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite" tsd = "/home/monotone/${PN}" FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests" RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules" diff --git a/packages/monotone/monotone-6_0.34.bb b/packages/monotone/monotone-6_0.34.bb index 0442e0232e..6a5dcb5d9c 100644 --- a/packages/monotone/monotone-6_0.34.bb +++ b/packages/monotone/monotone-6_0.34.bb @@ -45,7 +45,7 @@ do_install_append() { rm ${D}/home/monotone/monotone-6/tests/diff_a_binary_file/binary } -PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite" tsd = "/home/monotone/${PN}" FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests" RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules" diff --git a/packages/monotone/monotone-6_0.37.bb b/packages/monotone/monotone-6_0.37.bb index 571f5b17f5..7d65982e3d 100644 --- a/packages/monotone/monotone-6_0.37.bb +++ b/packages/monotone/monotone-6_0.37.bb @@ -45,7 +45,7 @@ do_install_append() { rm ${D}/home/monotone/monotone-6/tests/diff_a_binary_file/binary } -PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite" tsd = "/home/monotone/${PN}" FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests" RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules" diff --git a/packages/monotone/monotone.inc b/packages/monotone/monotone.inc index 0bade3a11c..319309f070 100644 --- a/packages/monotone/monotone.inc +++ b/packages/monotone/monotone.inc @@ -36,7 +36,7 @@ do_install_append() { mv ${D}${bindir}/monotone ${D}${bindir}/${PN} } -PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite" tsd = "/home/monotone/${PN}" FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests" RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules" diff --git a/packages/nonworking/efl/edb-utils_1.0.5.007.bb b/packages/nonworking/efl/edb-utils_1.0.5.007.bb index 8d47e068a7..11fae0f565 100644 --- a/packages/nonworking/efl/edb-utils_1.0.5.007.bb +++ b/packages/nonworking/efl/edb-utils_1.0.5.007.bb @@ -8,7 +8,7 @@ inherit efl EXTRA_OECONF += "--disable-gtk" -PACKAGES = "edb-utils" +PACKAGES = "${PN}-dbg edb-utils" FILES_${PN} = "${bindir}/edb_ed ${bindir}/edb_vt_ed ${bindir}/edb_gtk_ed" RDEPENDS_${PN} += "ncurses" diff --git a/packages/nonworking/efl/edje-utils_0.5.0.038.bb b/packages/nonworking/efl/edje-utils_0.5.0.038.bb index f8eb917e4d..966abe7654 100644 --- a/packages/nonworking/efl/edje-utils_0.5.0.038.bb +++ b/packages/nonworking/efl/edje-utils_0.5.0.038.bb @@ -5,7 +5,7 @@ PR = "r6" inherit efl -PACKAGES = "edje-utils" +PACKAGES = "${PN}-dbg edje-utils" FILES_${PN} = "${bindir}/edje ${bindir}/edje_* ${datadir}/edje/data/template ${datadir}/edje/include" RDEPENDS_${PN} += "embryo-utils cpp cpp-symlinks gcc gcc-symlinks" diff --git a/packages/nonworking/efl/embryo-utils_0.9.1.038.bb b/packages/nonworking/efl/embryo-utils_0.9.1.038.bb index d507c53cce..78cc70394c 100644 --- a/packages/nonworking/efl/embryo-utils_0.9.1.038.bb +++ b/packages/nonworking/efl/embryo-utils_0.9.1.038.bb @@ -11,7 +11,7 @@ inherit efl SRC_URI = "${E_URI}/embryo-${PV}.tar.gz" S = "${WORKDIR}/embryo-${PV}" -PACKAGES = "embryo-utils" +PACKAGES = "${PN}-dbg embryo-utils" FILES_${PN} = "${bindir}/embryo ${bindir}/embryo_* ${datadir}/embryo/include" libraries = "" diff --git a/packages/obsolete/classpath/classpath-minimal_0.95.bb b/packages/obsolete/classpath/classpath-minimal_0.95.bb index cb38710ac1..1fe65edc08 100644 --- a/packages/obsolete/classpath/classpath-minimal_0.95.bb +++ b/packages/obsolete/classpath/classpath-minimal_0.95.bb @@ -37,4 +37,4 @@ do_stage() { install -m 0644 lib/glibj.zip ${STAGING_DATADIR}/java/classpath-minimal/ } -PACKAGES = " " +PACKAGES = "${PN}-dbg " diff --git a/packages/opie-i18n/opie-i18n.inc b/packages/opie-i18n/opie-i18n.inc index da5b5866ad..8a1eaba5b3 100644 --- a/packages/opie-i18n/opie-i18n.inc +++ b/packages/opie-i18n/opie-i18n.inc @@ -35,7 +35,7 @@ do_install() { done } -PACKAGES = "opie-i18n-cz opie-i18n-da opie-i18n-de opie-i18n-dk opie-i18n-en opie-i18n-es \ +PACKAGES = "${PN}-dbg opie-i18n-cz opie-i18n-da opie-i18n-de opie-i18n-dk opie-i18n-en opie-i18n-es \ opie-i18n-fr opie-i18n-hu opie-i18n-it opie-i18n-ja opie-i18n-ko opie-i18n-lv opie-i18n-mk \ opie-i18n-nl opie-i18n-no opie-i18n-pl opie-i18n-pt opie-i18n-pt-br opie-i18n-ru opie-i18n-sl \ opie-i18n-xx opie-i18n-zh-cn opie-i18n-zh-tw \ diff --git a/packages/opie-taskbar/opie-taskbar-images.inc b/packages/opie-taskbar/opie-taskbar-images.inc index 2eac502751..09e8e1cba8 100644 --- a/packages/opie-taskbar/opie-taskbar-images.inc +++ b/packages/opie-taskbar/opie-taskbar-images.inc @@ -18,7 +18,7 @@ PIXMAP_SIZE_asus730 = "-480x640" PIXMAP_SIZE_htcuniversal= "-480x640" PIXMAP_SIZE_hx4700 = "-480x640" -PACKAGES = "${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320" +PACKAGES = "${PN}-dbg ${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320" do_install() { install -d ${D}${palmtopdir}/pics/launcher diff --git a/packages/orinoco/orinoco-modules.inc b/packages/orinoco/orinoco-modules.inc index dcf87ffcfb..d0d0055645 100644 --- a/packages/orinoco/orinoco-modules.inc +++ b/packages/orinoco/orinoco-modules.inc @@ -14,7 +14,7 @@ S = "${WORKDIR}/orinoco-${PV}" inherit module -PACKAGES = "orinoco-modules-cs orinoco-modules-pci orinoco-modules-usb orinoco-modules-nortel orinoco-modules" +PACKAGES = "${PN}-dbg orinoco-modules-cs orinoco-modules-pci orinoco-modules-usb orinoco-modules-nortel orinoco-modules" FILES_orinoco-modules-pci = "/lib/modules/${KERNEL_VERSION}/net/orinoco_p*${KERNEL_OBJECT_SUFFIX}" FILES_orinoco-modules-usb = "/lib/modules/${KERNEL_VERSION}/net/*_usb${KERNEL_OBJECT_SUFFIX}" FILES_orinoco-modules-nortel = "/lib/modules/${KERNEL_VERSION}/net/orinoco_tmd${KERNEL_OBJECT_SUFFIX} \ diff --git a/packages/pine/pine_4.64.bb b/packages/pine/pine_4.64.bb index 22a5cae098..990e282c3c 100644 --- a/packages/pine/pine_4.64.bb +++ b/packages/pine/pine_4.64.bb @@ -53,6 +53,6 @@ do_install() { done } -PACKAGES = "pico pine" +PACKAGES = "${PN}-dbg pico pine" FILES_pico = "${bindir}/pico ${bindir}/pilot" diff --git a/packages/portaudio/portaudio_0.0.19.bb b/packages/portaudio/portaudio_0.0.19.bb index e5bb5e850f..748519f5b1 100644 --- a/packages/portaudio/portaudio_0.0.19.bb +++ b/packages/portaudio/portaudio_0.0.19.bb @@ -82,6 +82,6 @@ do_install() { install -m 0755 bin/* ${D}${bindir}/ } -PACKAGES = "libportaudio0 portaudio-dev portaudio-examples" +PACKAGES = "${PN}-dbg libportaudio0 portaudio-dev portaudio-examples" FILES_libportaudio0 = "${libdir}" FILES_portaudio-examples = "${bindir}" diff --git a/packages/prismstumbler/prismstumbler_0.7.2.bb b/packages/prismstumbler/prismstumbler_0.7.2.bb index 4cb390ce33..cda97bc832 100644 --- a/packages/prismstumbler/prismstumbler_0.7.2.bb +++ b/packages/prismstumbler/prismstumbler_0.7.2.bb @@ -1,7 +1,7 @@ SECTION = "x11/network" PR = "r1" -PACKAGES = "prismstumbler prismstumbler-frontend" +PACKAGES = "${PN}-dbg prismstumbler prismstumbler-frontend" DESCRIPTION = "Prismstumbler wireless LAN scanner" LICENSE = "GPL" DEPENDS = "libpcap gtk+ wireless-tools sqlite" diff --git a/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb b/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb index 86b4df46bf..7b60122445 100644 --- a/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb +++ b/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb @@ -1,7 +1,7 @@ SECTION = "x11/network" PR = "r3" -PACKAGES = "prismstumbler prismstumbler-frontend prismstumbler-doc" +PACKAGES = "${PN}-dbg prismstumbler prismstumbler-frontend prismstumbler-doc" DESCRIPTION = "Prismstumbler wireless LAN scanner" DESCRIPTION_prismstumbler-frontend = "Prismstumbler wireless LAN scanner GTK frontend" LICENSE = "GPL" diff --git a/packages/prismstumbler/prismstumbler_0.7.3.bb b/packages/prismstumbler/prismstumbler_0.7.3.bb index eaebe2087f..29a112d95a 100644 --- a/packages/prismstumbler/prismstumbler_0.7.3.bb +++ b/packages/prismstumbler/prismstumbler_0.7.3.bb @@ -1,7 +1,7 @@ SECTION = "x11/network" PR = "r5" -PACKAGES = "prismstumbler prismstumbler-frontend prismstumbler-doc" +PACKAGES = "${PN}-dbg prismstumbler prismstumbler-frontend prismstumbler-doc" DESCRIPTION = "Prismstumbler wireless LAN scanner" LICENSE = "GPL" DEPENDS = "libpcap gtk+ wireless-tools sqlite zlib libxpm" diff --git a/packages/psmisc/psmisc.inc b/packages/psmisc/psmisc.inc index 0d8faf1ed6..c67705e67b 100644 --- a/packages/psmisc/psmisc.inc +++ b/packages/psmisc/psmisc.inc @@ -12,7 +12,7 @@ inherit autotools gettext ALLOW_EMPTY = "1" -PACKAGES = "${PN} fuser fuser-doc \ +PACKAGES = "${PN}-dbg ${PN} fuser fuser-doc \ killall killall-doc \ pstree pstree-doc" diff --git a/packages/psmisc/psmisc_20.2.bb b/packages/psmisc/psmisc_20.2.bb index a6140e7414..68f11dce13 100644 --- a/packages/psmisc/psmisc_20.2.bb +++ b/packages/psmisc/psmisc_20.2.bb @@ -13,7 +13,7 @@ inherit autotools gettext ALLOW_EMPTY = "1" -PACKAGES = "${PN} fuser fuser-doc \ +PACKAGES = "${PN}-dbg ${PN} fuser fuser-doc \ killall killall-doc \ pstree pstree-doc" diff --git a/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb b/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb index 10d2d4acdd..5b9b9fcadc 100644 --- a/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb +++ b/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb @@ -33,7 +33,7 @@ ${sbindir}/update-qtfontdir } -PACKAGES = "\ +PACKAGES = "${PN}-dbg \ qpf-bitstream-vera-sans-mono-small \ qpf-bitstream-vera-sans-mono-large \ qpf-bitstream-vera-sans-mono-larger \ diff --git a/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb b/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb index 86f2ef9446..93a8591002 100644 --- a/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb +++ b/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb @@ -26,7 +26,7 @@ ${sbindir}/update-qtfontdir } -PACKAGES = "qpf-bitstream-vera-small qpf-bitstream-vera-large" +PACKAGES = "${PN}-dbg qpf-bitstream-vera-small qpf-bitstream-vera-large" FILES_qpf-bitstream-vera-small = "${palmqtdir}/lib/fonts/vera_80_50* \ ${palmqtdir}/lib/fonts/vera_80_50i* ${palmqtdir}/lib/fonts/vera_80_75* ${palmqtdir}/lib/fonts/vera_80_75i* \ diff --git a/packages/sablevm/sablevm_1.1.9.bb b/packages/sablevm/sablevm_1.1.9.bb index cbecd1d25a..7c5198c0e6 100644 --- a/packages/sablevm/sablevm_1.1.9.bb +++ b/packages/sablevm/sablevm_1.1.9.bb @@ -22,7 +22,7 @@ ALTERNATIVE_NAME = "java" ALTERNATIVE_PATH = "${bindir}/java-sablevm" ALTERNATIVE_PRIORITY = "350" -PACKAGES = "${PN} ${PN}-doc lib${PN} lib${PN}-dev" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc lib${PN} lib${PN}-dev" FILES_${PN} = "${bindir} \ ${libdir}/${PN}/bin" diff --git a/packages/sablevm/sablevm_1.11.3.bb b/packages/sablevm/sablevm_1.11.3.bb index 35dce88d9c..154745dfeb 100644 --- a/packages/sablevm/sablevm_1.11.3.bb +++ b/packages/sablevm/sablevm_1.11.3.bb @@ -21,7 +21,7 @@ ALTERNATIVE_NAME = "java" ALTERNATIVE_PATH = "${bindir}/java-sablevm" ALTERNATIVE_PRIORITY = "350" -PACKAGES = "${PN} ${PN}-doc lib${PN} lib${PN}-dev" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc lib${PN} lib${PN}-dev" FILES_${PN} = "${bindir} \ ${libdir}/${PN}/bin" diff --git a/packages/sablevm/sablevm_1.12.bb b/packages/sablevm/sablevm_1.12.bb index 1c62842efb..541694e2e7 100644 --- a/packages/sablevm/sablevm_1.12.bb +++ b/packages/sablevm/sablevm_1.12.bb @@ -22,7 +22,7 @@ ALTERNATIVE_NAME = "java" ALTERNATIVE_PATH = "${bindir}/java-sablevm" ALTERNATIVE_PRIORITY = "350" -PACKAGES = "${PN} ${PN}-doc lib${PN} lib${PN}-dev" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc lib${PN} lib${PN}-dev" FILES_${PN} = "${bindir} \ ${libdir}/${PN}/bin" diff --git a/packages/schedstat-utils/schedstat-utils.bb b/packages/schedstat-utils/schedstat-utils.bb index c9ff8ab918..051135a9fb 100644 --- a/packages/schedstat-utils/schedstat-utils.bb +++ b/packages/schedstat-utils/schedstat-utils.bb @@ -15,7 +15,7 @@ do_install () { install -m 0755 stats-10.pl ${D}${sbindir}/ } -PACKAGES = "schedstat-utils \ +PACKAGES = "${PN}-dbg schedstat-utils \ schedstat-utils-latency \ schedstat-utils-perl" RDEPENDS_${PN} = "schedstat-utils-latency schedstat-utils-perl" diff --git a/packages/sgmlspl/sgmlspl-native_1.03ii.bb b/packages/sgmlspl/sgmlspl-native_1.03ii.bb index 3f5f7b6ae7..2f9edf11de 100644 --- a/packages/sgmlspl/sgmlspl-native_1.03ii.bb +++ b/packages/sgmlspl/sgmlspl-native_1.03ii.bb @@ -18,4 +18,4 @@ do_stage() { oe_runmake install_vendor } -PACKAGES = " " +PACKAGES = "${PN}-dbg " diff --git a/packages/sphyrna/sphyrna_svn.bb b/packages/sphyrna/sphyrna_svn.bb index d2e90cf8f2..2e7fd432e9 100644 --- a/packages/sphyrna/sphyrna_svn.bb +++ b/packages/sphyrna/sphyrna_svn.bb @@ -11,7 +11,7 @@ S = "${WORKDIR}/${PN}" inherit autotools -PACKAGES = "sphyrna-console sphyrna-python" +PACKAGES = "${PN}-dbg sphyrna-console sphyrna-python" FILES_sphyrna-console = "${bindir}/hhconsole" FILES_sphyrna-python = "${bindir}/decode.py ${libdir}/python2.4/site-packages/sphyrna/*" diff --git a/packages/tcp-wrappers/tcp-wrappers_7.6.bb b/packages/tcp-wrappers/tcp-wrappers_7.6.bb index dff7671583..047adc23a6 100644 --- a/packages/tcp-wrappers/tcp-wrappers_7.6.bb +++ b/packages/tcp-wrappers/tcp-wrappers_7.6.bb @@ -6,7 +6,7 @@ SECTION = "console/network" PR="r1" -PACKAGES = "libwrap libwrap-doc libwrap-dev tcp-wrappers tcp-wrappers-doc" +PACKAGES = "${PN}-dbg libwrap libwrap-doc libwrap-dev tcp-wrappers tcp-wrappers-doc" FILES_libwrap = "${libdir}/lib*.so.*" FILES_libwrap-doc = "${mandir}/man3 ${mandir}/man5" FILES_libwrap-dev = "${libdir}/lib*.so ${includedir}" diff --git a/packages/termcap/termcap_11.0.1.bb b/packages/termcap/termcap_11.0.1.bb index 81953021e0..ebb3791430 100644 --- a/packages/termcap/termcap_11.0.1.bb +++ b/packages/termcap/termcap_11.0.1.bb @@ -11,6 +11,6 @@ do_install() { install -m 0644 termtypes.tc ${D}${sysconfdir}/termcap } -PACKAGES = "termcap" +PACKAGES = "${PN}-dbg termcap" FILES_termcap = "${sysconfdir}" diff --git a/packages/tetex/tetex-texmf_3.0.bb b/packages/tetex/tetex-texmf_3.0.bb index 7405713d22..80d6f779d8 100644 --- a/packages/tetex/tetex-texmf_3.0.bb +++ b/packages/tetex/tetex-texmf_3.0.bb @@ -38,7 +38,7 @@ RRECOMMENDS_${PN} = " \ tetex-texmf-texdoctk \ tetex-texmf-web2c " -PACKAGES = "tetex-texmf \ +PACKAGES = "${PN}-dbg tetex-texmf \ tetex-texmf-bibtex \ tetex-texmf-context \ tetex-texmf-texdoc \ diff --git a/packages/tmake/tmake_1.11.bb b/packages/tmake/tmake_1.11.bb index a0f7222904..9d1ecd1a2a 100644 --- a/packages/tmake/tmake_1.11.bb +++ b/packages/tmake/tmake_1.11.bb @@ -23,6 +23,6 @@ do_install() { cp -R lib/* ${D}${datadir}/tmake/ } -PACKAGES = "tmake" +PACKAGES = "${PN}-dbg tmake" FILES = "" FILES_tmake="${bindir} ${datadir}/tmake" diff --git a/packages/tn5250/tn5250_0.16.5.bb b/packages/tn5250/tn5250_0.16.5.bb index 26c9100f74..258064f90b 100644 --- a/packages/tn5250/tn5250_0.16.5.bb +++ b/packages/tn5250/tn5250_0.16.5.bb @@ -11,7 +11,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/tn5250/tn5250-${PV}.tar.gz \ inherit autotools -PACKAGES = "lib5250-0 tn5250-dev tn5250-doc tn5250" +PACKAGES = "${PN}-dbg lib5250-0 tn5250-dev tn5250-doc tn5250" FILES_${PN} = "${bindir}/tn5250" FILES_lib5250-0 = "${libdir}/lib*.so.*" AUTO_LIBNAME_PKGS = "lib5250" diff --git a/packages/ttf-fonts/ttf-dejavu_2.18.bb b/packages/ttf-fonts/ttf-dejavu_2.18.bb index 17339e8d8e..cd8c8e2655 100644 --- a/packages/ttf-fonts/ttf-dejavu_2.18.bb +++ b/packages/ttf-fonts/ttf-dejavu_2.18.bb @@ -17,7 +17,7 @@ do_install_append () { install -m 0644 ${WORKDIR}/30-dejavu-aliases.conf ${D}${sysconfdir}/fonts/conf.d/ } -PACKAGES = "ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed \ +PACKAGES = "${PN}-dbg ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed \ ttf-dejavu-serif ttf-dejavu-serif-condensed ttf-dejavu-common" FILES_ttf-dejavu-sans = "${datadir}/fonts/truetype/DejaVuSans.ttf ${datadir}/fonts/truetype/DejaVuSans-*.ttf" diff --git a/packages/ttf-fonts/ttf-gentium_1.02.bb b/packages/ttf-fonts/ttf-gentium_1.02.bb index 5bedf5aafc..e6c0a0c464 100644 --- a/packages/ttf-fonts/ttf-gentium_1.02.bb +++ b/packages/ttf-fonts/ttf-gentium_1.02.bb @@ -21,7 +21,7 @@ do_install_append() { } -PACKAGES = "${PN} ${PN}-alt" +PACKAGES = "${PN}-dbg ${PN} ${PN}-alt" FILES_ttf-gentium-alt = "${datadir}/fonts/truetype/GenAI*.ttf \ ${datadir}/fonts/truetype/GenAR*.ttf \ diff --git a/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb b/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb index f81097c22f..72ec432f45 100644 --- a/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb +++ b/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb @@ -9,7 +9,7 @@ S = "${WORKDIR}/hunkyfonts-${PV}/TTF/" require ttf.inc -PACKAGES = "ttf-hunky-sans ttf-hunky-serif" +PACKAGES = "${PN}-dbg ttf-hunky-sans ttf-hunky-serif" FILES_ttf-hunky-sans = "${datadir}/fonts/truetype/HunkySans*.ttf" FILES_ttf-hunky-serif = "${datadir}/fonts/truetype/HunkySerif*.ttf" diff --git a/packages/ttf-fonts/ttf-liberation_0.2.bb b/packages/ttf-fonts/ttf-liberation_0.2.bb index 94b4012d3e..09a909c4b6 100644 --- a/packages/ttf-fonts/ttf-liberation_0.2.bb +++ b/packages/ttf-fonts/ttf-liberation_0.2.bb @@ -7,7 +7,7 @@ require ttf.inc SRC_URI = "http://www.redhat.com/f/fonts/liberation-fonts-ttf-3.tar.gz" S = "${WORKDIR}/liberation-fonts-${PV}" -PACKAGES = "ttf-liberation-mono ttf-liberation-sans ttf-liberation-serif" +PACKAGES = "${PN}-dbg ttf-liberation-mono ttf-liberation-sans ttf-liberation-serif" FILES_ttf-liberation-mono = "${datadir}/fonts/truetype/*Mono*" FILES_ttf-liberation-sans = "${datadir}/fonts/truetype/*Sans*" FILES_ttf-liberation-serif = "${datadir}/fonts/truetype/*Serif*" diff --git a/packages/ttf-fonts/ttf-sazanami_20040629.bb b/packages/ttf-fonts/ttf-sazanami_20040629.bb index a51036155d..a48c54c9ad 100644 --- a/packages/ttf-fonts/ttf-sazanami_20040629.bb +++ b/packages/ttf-fonts/ttf-sazanami_20040629.bb @@ -13,7 +13,7 @@ PR = "r1" SRC_URI = "http://download.sourceforge.jp/efont/10087/sazanami-20040629.tar.bz2" S = "${WORKDIR}/sazanami-20040629" -PACKAGES = "ttf-sazanami-gothic ttf-sazanami-mincho" +PACKAGES = "${PN}-dbg ttf-sazanami-gothic ttf-sazanami-mincho" FILES_ttf-sazanami-gothic = "${datadir}/fonts/truetype/sazanami-gothic.ttf \ ${datadir}/doc/ttf-sazanami-gothic/README" FILES_ttf-sazanami-mincho = "${datadir}/fonts/truetype/sazanami-mincho.ttf \ diff --git a/packages/tzdata/tzdata_2007k.bb b/packages/tzdata/tzdata_2007k.bb index d873bfd0d6..2fbe9ac884 100644 --- a/packages/tzdata/tzdata_2007k.bb +++ b/packages/tzdata/tzdata_2007k.bb @@ -42,7 +42,7 @@ do_install () { # Packages primarily organized by directory with a major city # in most time zones in the base package -PACKAGES = "tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \ +PACKAGES = "${PN}-dbg tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \ tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \ tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific" diff --git a/packages/udhcp/udhcp_0.9.8.bb b/packages/udhcp/udhcp_0.9.8.bb index 0974739514..d100be74da 100644 --- a/packages/udhcp/udhcp_0.9.8.bb +++ b/packages/udhcp/udhcp_0.9.8.bb @@ -19,7 +19,7 @@ EXTRA_OEMAKE = "'CC=${CC}' 'LD=${CCLD}' \ 'usrbindir=${bindir}' \ 'datadir=${datadir}'" -PACKAGES = "udhcpc udhcpc-doc udhcpd udhcpd-doc" +PACKAGES = "${PN}-dbg udhcpc udhcpc-doc udhcpd udhcpd-doc" FILES_udhcpc = "/sbin/udhcpc ${datadir}/udhcpc" FILES_udhcpc-doc = "${mandir}/man8/udhcpc.8" FILES_udhcpd = "${sbindir}/udhcpd \ diff --git a/packages/wlan-ng/wlan-ng-modules.inc b/packages/wlan-ng/wlan-ng-modules.inc index 9a0797fb00..4cf0733e7a 100644 --- a/packages/wlan-ng/wlan-ng-modules.inc +++ b/packages/wlan-ng/wlan-ng-modules.inc @@ -57,7 +57,7 @@ do_install() { rm -f ${KERNEL_SOURCE}/../../config.mk } -PACKAGES = "wlan-ng-modules-usb wlan-ng-modules-cs wlan-ng-modules-pci wlan-ng-modules-p80211" +PACKAGES = "${PN}-dbg wlan-ng-modules-usb wlan-ng-modules-cs wlan-ng-modules-pci wlan-ng-modules-p80211" FILES_wlan-ng-modules-p80211 = "/lib/modules/${KERNEL_VERSION}/wlan-ng/p80211${KERNEL_OBJECT_SUFFIX}" FILES_wlan-ng-modules-usb = "/lib/modules/${KERNEL_VERSION}/wlan-ng/prism2_usb${KERNEL_OBJECT_SUFFIX}" FILES_wlan-ng-modules-cs = "/lib/modules/${KERNEL_VERSION}/wlan-ng/prism2_cs${KERNEL_OBJECT_SUFFIX}" diff --git a/packages/wrt/wrt-utils.bb b/packages/wrt/wrt-utils.bb index 42a7460412..7e02f6830c 100644 --- a/packages/wrt/wrt-utils.bb +++ b/packages/wrt/wrt-utils.bb @@ -43,7 +43,7 @@ do_install() { install -m 644 wlcompat.o ${D}/lib/modules/${KERNEL_VERSION}/ } -PACKAGES = "wrt-libs wrt-utils kernel-module-wlcompat" +PACKAGES = "${PN}-dbg wrt-libs wrt-utils kernel-module-wlcompat" FILES_wrt-libs = "/usr/lib" FILES_wrt-utils = "/usr/sbin /sbin" FILES_kernel-module-wlcompat = "/lib/modules/" diff --git a/packages/xcb/libxcb_0.9.bb b/packages/xcb/libxcb_0.9.bb index 161e83ad11..40eb256714 100644 --- a/packages/xcb/libxcb_0.9.bb +++ b/packages/xcb/libxcb_0.9.bb @@ -10,7 +10,7 @@ DEPENDS = "xcb-proto xproto libxau" SRC_URI = "http://xcb.freedesktop.org/dist/libxcb-0.9.tar.bz2" -PACKAGES = "libxcb libxcb-dev libxcbcomposite libxcbcomposite-dev \ +PACKAGES = "${PN}-dbg libxcb libxcb-dev libxcbcomposite libxcbcomposite-dev \ libxcbdamage libxcbdamage-dev libxcbdpms libxcbdpms-dev \ libxcbglx libxcbglx-dev libxcbrandr libxcbrandr-dev \ libxcbrecord libxcbrecord-dev libxcbrender libxcbrender-dev \ diff --git a/packages/xorg-font/xfonts-xorg_6.8.bb b/packages/xorg-font/xfonts-xorg_6.8.bb index f6710dcd5b..f8a6a76964 100644 --- a/packages/xorg-font/xfonts-xorg_6.8.bb +++ b/packages/xorg-font/xfonts-xorg_6.8.bb @@ -7,7 +7,7 @@ SRC_URI = "${FREEDESKTOP_CVS}/xorg;module=xc;tag=XORG-6_8_0;method=pserver \ file://lexer.patch;patch=1" -PACKAGES = "${PN}-75dpi ${PN}-100dpi ${PN}-type1 ${PN}-cyrillic ${PN}-ttf ${PN}" +PACKAGES = "${PN}-dbg ${PN}-75dpi ${PN}-100dpi ${PN}-type1 ${PN}-cyrillic ${PN}-ttf ${PN}" FILES_${PN}-75dpi = "${libdir}/X11/fonts/75dpi" FILES_${PN}-100dpi = "${libdir}/X11/fonts/100dpi" FILES_${PN}-type1 = "${libdir}/X11/fonts/Type1" -- cgit v1.2.3 From 2b10df715600a249450cb61f50fc5916a80ca43a Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 16:29:08 +0000 Subject: packages/libogg/libtheora: The encoder example is using vorbis add it to the DEPENDS Add libvorbis to the DEPENDS as the encoder example is using libvorbis. --- packages/libogg/libtheora_0.9+1.0alpha7.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/libogg/libtheora_0.9+1.0alpha7.bb b/packages/libogg/libtheora_0.9+1.0alpha7.bb index 67ec27b560..5a372b65a1 100644 --- a/packages/libogg/libtheora_0.9+1.0alpha7.bb +++ b/packages/libogg/libtheora_0.9+1.0alpha7.bb @@ -1,5 +1,5 @@ -DEPENDS = "libogg libsdl-x11" +DEPENDS = "libogg libvorbis libsdl-x11" SRC_URI = "http://downloads.xiph.org/releases/theora/libtheora-1.0alpha7.tar.gz" -- cgit v1.2.3 From 93de7123f309ba153a31b3089c4b53a5ba58f4ad Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 25 Jan 2008 16:34:49 +0000 Subject: opie-taskbar-images: add "inherit opie" stanza. Thanks, zecke for spotting it. --- packages/opie-taskbar/opie-taskbar-images.inc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/opie-taskbar/opie-taskbar-images.inc b/packages/opie-taskbar/opie-taskbar-images.inc index 09e8e1cba8..b74eda45c3 100644 --- a/packages/opie-taskbar/opie-taskbar-images.inc +++ b/packages/opie-taskbar/opie-taskbar-images.inc @@ -7,6 +7,8 @@ APPNAME = "qpe" S = "${WORKDIR}/pics" +inherit opie + # Wallpaper and welcome splash PIXMAP_SIZE = "" PIXMAP_SIZE_c7x0 = "-640x480" @@ -18,8 +20,6 @@ PIXMAP_SIZE_asus730 = "-480x640" PIXMAP_SIZE_htcuniversal= "-480x640" PIXMAP_SIZE_hx4700 = "-480x640" -PACKAGES = "${PN}-dbg ${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320" - do_install() { install -d ${D}${palmtopdir}/pics/launcher @@ -54,3 +54,4 @@ python do_package_prepend () { } PACKAGE_ARCH = "all" +PACKAGES =+ "${PN}-dbg ${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320" -- cgit v1.2.3 From b00ae8808d4dc76a0fbce2e91e940485c496cbd2 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 16:44:14 +0000 Subject: packages/speex/speex: Stage the speex.m4 file as well, copied the line from the vorbis recipe --- packages/speex/speex_1.0.4.bb | 1 + packages/speex/speex_1.1.12+1.2beta1.bb | 1 + packages/speex/speex_1.1.12.bb | 1 + packages/speex/speex_1.1.7.bb | 1 + 4 files changed, 4 insertions(+) diff --git a/packages/speex/speex_1.0.4.bb b/packages/speex/speex_1.0.4.bb index e96c249f81..e1af8d18da 100644 --- a/packages/speex/speex_1.0.4.bb +++ b/packages/speex/speex_1.0.4.bb @@ -22,5 +22,6 @@ do_stage() { install -m 0644 include/speex/speex_callbacks.h ${STAGING_INCDIR}/speex install -m 0644 include/speex/speex_header.h ${STAGING_INCDIR}/speex install -m 0644 include/speex/speex_stereo.h ${STAGING_INCDIR}/speex + install -m 0644 speex.m4 ${STAGING_DATADIR}/aclocal/ } diff --git a/packages/speex/speex_1.1.12+1.2beta1.bb b/packages/speex/speex_1.1.12+1.2beta1.bb index 01bd93909e..5430983e36 100644 --- a/packages/speex/speex_1.1.12+1.2beta1.bb +++ b/packages/speex/speex_1.1.12+1.2beta1.bb @@ -36,4 +36,5 @@ do_stage() { oe_libinstall -C libspeex -so libspeex ${STAGING_LIBDIR} install -d ${STAGING_INCDIR}/speex install -m 0644 include/speex/*.h ${STAGING_INCDIR}/speex + install -m 0644 speex.m4 ${STAGING_DATADIR}/aclocal/ } diff --git a/packages/speex/speex_1.1.12.bb b/packages/speex/speex_1.1.12.bb index c34d459a26..b18151e48d 100644 --- a/packages/speex/speex_1.1.12.bb +++ b/packages/speex/speex_1.1.12.bb @@ -34,4 +34,5 @@ do_stage() { oe_libinstall -C libspeex -so libspeex ${STAGING_LIBDIR} install -d ${STAGING_INCDIR}/speex install -m 0644 include/speex/*.h ${STAGING_INCDIR}/speex + install -m 0644 speex.m4 ${STAGING_DATADIR}/aclocal/ } diff --git a/packages/speex/speex_1.1.7.bb b/packages/speex/speex_1.1.7.bb index 7ce34a80eb..00b51b1c2e 100644 --- a/packages/speex/speex_1.1.7.bb +++ b/packages/speex/speex_1.1.7.bb @@ -34,4 +34,5 @@ do_stage() { install -m 0644 include/speex/speex_callbacks.h ${STAGING_INCDIR}/speex install -m 0644 include/speex/speex_header.h ${STAGING_INCDIR}/speex install -m 0644 include/speex/speex_stereo.h ${STAGING_INCDIR}/speex + install -m 0644 speex.m4 ${STAGING_DATADIR}/aclocal/ } -- cgit v1.2.3 From a5166183debdcbe11a0089822d5e04bcdf9ac8dc Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 16:56:10 +0000 Subject: packages/libshout/libshout: Add initial version 2.2.2 Remove ogg.m4, speex.m4, vorbis.m4 from the source directory before starting to regenerate the configure script. Do not add $prefix/include to the CPPFLAGS as this is evil --- packages/libshout/.mtn2git_empty | 0 packages/libshout/files/.mtn2git_empty | 0 packages/libshout/files/no-host-includes.ac | 13 +++++++++++++ packages/libshout/libshout.inc | 16 ++++++++++++++++ packages/libshout/libshout_2.2.2.bb | 1 + 5 files changed, 30 insertions(+) create mode 100644 packages/libshout/.mtn2git_empty create mode 100644 packages/libshout/files/.mtn2git_empty create mode 100644 packages/libshout/files/no-host-includes.ac create mode 100644 packages/libshout/libshout.inc create mode 100644 packages/libshout/libshout_2.2.2.bb diff --git a/packages/libshout/.mtn2git_empty b/packages/libshout/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libshout/files/.mtn2git_empty b/packages/libshout/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libshout/files/no-host-includes.ac b/packages/libshout/files/no-host-includes.ac new file mode 100644 index 0000000000..f5255359b0 --- /dev/null +++ b/packages/libshout/files/no-host-includes.ac @@ -0,0 +1,13 @@ +diff --git a/configure.ac b/configure.ac +index 52fc51d..e93fc52 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -179,7 +179,7 @@ eval shout_includedir="$includedir" + prefix="$save_prefix" + + SHOUT_VERSION="$VERSION" +-SHOUT_CPPFLAGS="-I$shout_includedir $VORBIS_CFLAGS $PTHREAD_CPPFLAGS" ++SHOUT_CPPFLAGS="$VORBIS_CFLAGS $PTHREAD_CPPFLAGS" + SHOUT_CFLAGS="$PTHREAD_CFLAGS" + SHOUT_LIBS="-lshout" + diff --git a/packages/libshout/libshout.inc b/packages/libshout/libshout.inc new file mode 100644 index 0000000000..9ca8745b9b --- /dev/null +++ b/packages/libshout/libshout.inc @@ -0,0 +1,16 @@ +DESCRIPTION = "Library which can be used to write a source client like ices" +HOMEPAGE = "http://www.icecast.org" +DEPENDS = "speex libtheora libvorbis libogg" +LICENSE = "LGPL" + +SRC_URI = "http://downloads.us.xiph.org/releases/libshout/libshout-${PV}.tar.gz \ + file://no-host-includes.ac;patch=1 " + +inherit autotools + +do_configure_prepend() { + # Use the staged m4 files + rm -f ${S}/m4/speex.m4 + rm -f ${S}/m4/ogg.m4 + rm -f ${S}/m4/vorbis.m4 +} diff --git a/packages/libshout/libshout_2.2.2.bb b/packages/libshout/libshout_2.2.2.bb new file mode 100644 index 0000000000..bd54419686 --- /dev/null +++ b/packages/libshout/libshout_2.2.2.bb @@ -0,0 +1 @@ +require ${PN}.inc -- cgit v1.2.3 From dbaa97bcdc1b798504162ae1fc5001a7837bff2a Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 16:57:59 +0000 Subject: conf/checksums.ini: Add shoutcast to the list --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index d9c9b5080c..d8d7278552 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -6738,6 +6738,10 @@ sha256=835265bb0d39689e8a8580b5ffb53222b3f5f483d58aa533a5c7ebfc3d273d50 md5=ddc52cc8196f9f0bf48a5c7569b6bb38 sha256=83e82b9afe296584a6c9f1f8b3e3a70d324209021e0049f68d28bd1de8c18136 +[http://downloads.us.xiph.org/releases/libshout/libshout-2.2.2.tar.gz] +md5=4f75fc9901c724b712c371c9a1e782d3 +sha256=912a1fdb12d31af757e7881db49321e5b5240bd8bd4199e9fb0ce16d66568160 + [http://www.geocities.com/SiliconValley/Lakes/5147/sidplay/packages/libsidplay-1.36.59.tgz] md5=37c51ba4bd57164b1b0bb7b43b9adece sha256=3da9b38d4eb5bf9e936b9604ba92da0594ef38047d50cf806a8e11c400008024 -- cgit v1.2.3 From 1fbbf10a99f01a45205ab6ddba089ca9a2682346 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 16:58:47 +0000 Subject: conf/checksums.ini: Add fakeroot --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index d8d7278552..49ff7ccdb0 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -2414,6 +2414,10 @@ sha256=52b31fa70151b97ef871d44ad9214e90279f7cbd95144c6b40da49079ed0f1ce md5=3654bbbf01deeb0d804df194e1b1a2b3 sha256=52b31fa70151b97ef871d44ad9214e90279f7cbd95144c6b40da49079ed0f1ce +[ftp://ftp.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.9.1.tar.gz] +md5=163a846e51b39fd626b43548c2cdda7c +sha256=6a3a993ab90540719e47b4968f60f8023a3cbb93f2a1ce611cd7a2d52ac1c38e + [ftp://oss.sgi.com/projects/fam/download/stable/fam-2.6.10.tar.gz] md5=1c5a2ea659680bdd1e238d7828a857a7 sha256=885ced3480aef3cee519a459a572e31cd2fd5e24bcd35b1d0c8833361699026e -- cgit v1.2.3 From 3d36fa861b6d190cf39b219d610dfa3c5b76509c Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:00:14 +0000 Subject: conf/checksums.ini: Add theora 1.0alpha7 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 49ff7ccdb0..b4eda6b8a9 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -6834,6 +6834,10 @@ sha256=2be78a947bdbfd24aa4f35ae97d2b7bafa60162c5e824cf3dd085b40eddee8ff md5=2cbbbeaf97c154a7fb9b088b95deb70e sha256=53e8740a3a36ece8078b371b95c79646dc69f0ad3ee2665e5fb659412c0baf35 +[http://downloads.xiph.org/releases/theora/libtheora-1.0alpha7.tar.gz] +md5=55ee3c6db3e0927e7918309891a8f52b +sha256=f5c7730ded0273a8615b12b46a32b800bbcb9e861e3a18aa92b1c062981a2fef + [http://downloads.sourceforge.net/tilp/libticables-3.9.2.tar.gz] md5=354675bfbd881082a9447efde9935226 sha256=1c091859f09d5a38c76f0d64a93db46aa2b5d637c8a7370d348f21e7be324c37 -- cgit v1.2.3 From b4e56198e4d6fec162b330578e4017feb414d85c Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:00:51 +0000 Subject: conf/checksums.ini: Add libvorbis 1.2.0 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index b4eda6b8a9..6c146bdb81 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -6906,6 +6906,10 @@ sha256=748a9a5a1b2e6bf1db4cc767742acf58d836e551e56a493bd34ad759d3bb4f53 md5=4d6726fd02ce02f6e24824e594b0949a sha256=20b3cbdb4b05322d470404a7d2e8cdae1e0ce5372113218ae3cada3b29da70f7 +[http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.gz] +md5=478646358c49f34aedcce58948793619 +sha256=6eb7040048e35448fe224fa3fd993eb4e49a905c57893886082f1674d43b0e73 + [http://ftp.gnome.org/pub/GNOME/sources/libwnck/2.10/libwnck-2.10.2.tar.bz2] md5=d8276da50ce560c5e66ed94e4238d9ef sha256=d03295e5cb22ed7d086ce1ce754c498ed6bc2388c45e4547417d922580d3cd7c -- cgit v1.2.3 From 5b37112690fbdb745bd470372871d8719410aa60 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:01:49 +0000 Subject: conf/checksums.ini: Add MesaLib 7.0.2 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 6c146bdb81..e3650b3c98 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -222,6 +222,10 @@ sha256=137f50a30461d51eb9af5aac737bc788d536354cf47b26129b97bde6e41fb85f md5=61beda590bfc5b4a12e979d5f2d70d7a sha256=dcacf4c18af89b57e66dc7ba39e24c3b74ff6f83b8745bcc1390170a4190eebd +[http://downloads.sourceforge.net/mesa3d/MesaLib-7.0.2.tar.bz2] +md5=93e6ed7924ff069a4f883b4fce5349dc +sha256=9d4707b556960f6aef14480f91fcd4f868720f64321947ab1b2fd20e85ce7f9e + [http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/Module-Build-0.2805.tar.gz] md5=598bb59b86c2c4842eeffb03392fab5b sha256=8fd609d1e6b460b5c95ad5612cb823aa863d51360ed55caea987909a9bab50f5 -- cgit v1.2.3 From 514d404e600801df875786d3447378a972018855 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:02:36 +0000 Subject: conf/checksums.ini: Add libogg 1.1.3 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index e3650b3c98..0149db05c0 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -6562,6 +6562,10 @@ sha256=920fa2a0924d66884825d36a2e843de069cfdf1af01945d05da25999bbd6396c md5=461d7097bf47864b872085a94ff94e10 sha256=01453d561255b5fcb361997904752860e4f8c6b9742f290578a44615fcc94356 +[http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz] +md5=eaf7dc6ebbff30975de7527a80831585 +sha256=bae29e79fbc50bbedf1235852094b71c8c910a1ef0cd42fe4163b7b545630b65 + [http://liboil.freedesktop.org/download/liboil-0.3.10.tar.gz] md5=770f656bca8166dab33b322d5886a4bf sha256=4587753a023550a066abe59a7e467c1af35b9f5e81bfb40a12463ad2df8f088c -- cgit v1.2.3 From a416279219aa0c77f208a241ae08a29739c7ac05 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:03:28 +0000 Subject: conf/checksums.ini: Add gcc-4.2.2 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 0149db05c0..588f3a7f33 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -3094,6 +3094,10 @@ sha256=cfc0efbcc6fcde0d416a32dfb246c9df022515a312683fac412578c4fd09a9bc md5=ac6d19831220c4aeef4475492725486f sha256=98bdb26cd2644f2290e34453d9115b88bcff940bd1feb88db5a0fc557ec0ea5e +[ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.2.2/gcc-4.2.2.tar.bz2] +md5=7ae33781417a35a2eb03ee098a9f4490 +sha256=673b85d780a082c014ded4ac11f8269a3fe893b4dbb584d65b8602d50b3872b1 + [http://xorg.freedesktop.org/releases/individual/util/gccmakedep-1.0.2.tar.gz] md5=fc49f45251c1336fe1dad5dba1c83fcd sha256=fdd3963294e80b27416f902a5c029c033d321f03310d3cafa3afb62b50ddce92 -- cgit v1.2.3 From b20bdc8a8d8dc9014706d69585e54c435b0474ba Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:04:48 +0000 Subject: conf/checksums.ini: Add libXi-1.1.3 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 588f3a7f33..286df63e8a 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -5626,6 +5626,10 @@ sha256=7e6339539d3d0a4fc95cc23ca2b13ae67dd783e011b3cc5ca76040e376bff57f md5=9c4dd85f3e2a75bfb60bd288502bc288 sha256=4deda13613f03e4524d3cf0ac14b9e20be5044d415cb8478713ecbe47f4de862 +[http://xorg.freedesktop.org/releases/individual/lib/libXi-1.1.3.tar.bz2] +md5=7c510abb0cad8dc20493fb27ff7859d8 +sha256=c77a5bbe97d0d0a6493adefcf1bd57aca91bc33279633b3f6cf1d2bb8812153f + [http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libXi-X11R7.0-1.0.0.tar.bz2] md5=99503799b4d52ec0cac8e203341bb7b3 sha256=64e8ece13fc778b9dd86ef93c4b782de9a1176a005ed7d895552a73acb103d9b -- cgit v1.2.3 From 6d0743e9531e729e5e1d2727a6b69b74c84ac07b Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:06:17 +0000 Subject: conf/checksums.ini: Add busybox 1.7.2 and the patches we apply --- conf/checksums.ini | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 286df63e8a..d62fbccab5 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -1294,6 +1294,26 @@ sha256=984b7974670d4f0291094ea2a36ee21fe46591f36cb51f95292dbe143c1eeab4 md5=158ccadd830fe6cb3d21a109f398e037 sha256=08ef1e87c7198fb6d7c0a5f830fc2d99e5fd077dbb7d4ca1b66117ae924f6df3 +[http://www.busybox.net/downloads/busybox-1.7.2.tar.gz] +md5=34c76dc55004d8d5dcea884e0e99bc21 +sha256=e0eb7d59ba996a58608999998ad630c67b93c05af4eafea29770c4839c0e5461 + +[http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-ash.patch] +md5=4149857c0b2c7f3d52a1f2cec5d7778d +sha256=73706e7d77144a6270da02ede61cde3c2e3b0e716d879737ac9d478b29233ba9 + +[http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-iptun.patch] +md5=6c5f498e0677fd91b5b0e85ec5ac3b23 +sha256=b80a8c173c7a7a40a504585c6af5c74396c8fdbbb1cec179de9edcc030aa6a9a + +[http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-logger.patch] +md5=43c292e93bf92623aaa29dd0e243e9a9 +sha256=5117584a563c512b68cd9678d3cf54e6186f5a062836398791385f8ed73cca86 + +[http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-tail.patch] +md5=c211189556c59a2665af45bffe5a5878 +sha256=f44c3c2d7d9b3fc8a5f9fb6ac587ae4170d2515d72f9e76deb8c071ce9847abe + [http://downloads.sourceforge.net/bvi/bvi-1.3.1.src.tar.gz] md5=b9d77c57bda2e019207a1874d9bb4dea sha256=c94dbfa293cbc61b8571d025e90fd1f06a34f8d4e5b11a59856bfc1f13014de3 -- cgit v1.2.3 From aecde97b9b8c213d7a8b89c9266d95008f1c99d5 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:06:54 +0000 Subject: conf/checksums.ini: Add Xrandr 1.2.2 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index d62fbccab5..b495a50766 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -5722,6 +5722,10 @@ sha256=ba5adedc37da835a5c9e5a5d457dce13feead64fc364bc4719c41720ca0a3c50 md5=5860360f5b038cc728f388f875ce525d sha256=2d2df642eb8e0527936cdf4ed1c096f69df53e9b95e2532c8ed0cabd06a45407 +[http://xorg.freedesktop.org/releases/individual/lib/libXrandr-1.2.2.tar.bz2] +md5=1b244b5d19f0ccab01d7083436cd3558 +sha256=206f8dc850f12b1213fb73dbef09fafa1bb8fb8c3ddfe4d39721c1e2dec12a98 + [http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libXrandr-X11R7.0-1.1.0.2.tar.bz2] md5=e10aed44c2e1e5d9e6848a62ff2c90c7 sha256=6b6a3fcf44621bf163ba2db6dbcc518bff4e8cf74695d1b86595387a3ff3c6fb -- cgit v1.2.3 From 31e71585d18b3f089a9685696cdb91ae391d5377 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:07:44 +0000 Subject: conf/checksums.ini: Add fakeroot 1.8.3 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index b495a50766..91cab0f412 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -2438,6 +2438,10 @@ sha256=52b31fa70151b97ef871d44ad9214e90279f7cbd95144c6b40da49079ed0f1ce md5=3654bbbf01deeb0d804df194e1b1a2b3 sha256=52b31fa70151b97ef871d44ad9214e90279f7cbd95144c6b40da49079ed0f1ce +[ftp://ftp.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.8.3.tar.gz] +md5=f123ffb457eb3577fcbb5e2c2432a922 +sha256=fd2ae24fc5bc14bfe63e0be551134a0f7906659f45803a427a2377b67d193867 + [ftp://ftp.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.9.1.tar.gz] md5=163a846e51b39fd626b43548c2cdda7c sha256=6a3a993ab90540719e47b4968f60f8023a3cbb93f2a1ce611cd7a2d52ac1c38e -- cgit v1.2.3 From f78b7c1a9edab8c4fc5c90126238927a37fc0ce9 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:08:50 +0000 Subject: conf/checksums.ini:Add gtk+ 2.12.0 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 91cab0f412..265b77a20b 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -4450,6 +4450,10 @@ sha256=d02344239d048390ba02fcfd7de4f9efc0dfb51e7b06dfa46a6314d666ea4de2 md5=20d763198efb38263b22dee347f69da6 sha256=3aab107fb97a280b77fa30d07540e325d1511907bbce1e7efa5b4db2dffa28a3 +[http://download.gnome.org/sources/gtk+/2.12/gtk+-2.12.0.tar.bz2] +md5=e9c280afec29b11772af5a7c807abf41 +sha256=faa1dc73f8077f72849ade14963202d8af22b51469c1e8e88e20c69d330fd2fd + [http://handhelds.org/packages/gtk-2.0/gtk+-2.2.4.diff.bz2] md5=c6697665e06cad01e87c2cf8d0913725 sha256=2a768a45adea587c4a7d6e3c3567ad7961bf7509e118ae62ce32f5369b1aeeb0 -- cgit v1.2.3 From 9dd6b69bd0bdf999f96ba18c4523f2dce89653c7 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:09:41 +0000 Subject: conf/checksums.ini: Add libXcursor 1.1.9 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 265b77a20b..c894cdd493 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -5530,6 +5530,10 @@ sha256=142cd1c1958e2cb92ff2975a092a2c519dd5f4c433c9d1d8b6cc9ca967aad283 md5=ec2acd10a7736a85dd1e1ed9ea5bec96 sha256=8f039f81af52c88d583fba48b878abd074542221cb0030638ad52336b4ae1377 +[http://xorg.freedesktop.org/releases/individual/lib/libXcursor-1.1.9.tar.bz2] +md5=99b7554037a92b260891091e81815a0a +sha256=1dffb3542271c8ce964066d561474caec5b639d6588b257b21cfb8225a15d2b4 + [http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libXcursor-X11R7.0-1.1.5.2.tar.bz2] md5=048e15b725d8e081ac520e021af9a62c sha256=52bbd6e05de84e94ec11f2734029183411c91e2297779098fb17e162aca5e191 -- cgit v1.2.3 From ae607219cd9d7393ac36d47cd46eed5cf22bbd24 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:10:18 +0000 Subject: conf/checksums.ini: Add cairo 1.4.8 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index c894cdd493..3dfd04f406 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -1362,6 +1362,10 @@ sha256=594e78a66044898c321e378d47faf43b665b23ba638834d2787e344ba13e5132 md5=b254633046eafe603776d0bee791b751 sha256=7cf292ae376e7120ec548ad6a807a2f0f4f0539a304229a3bd98921453becd47 +[http://cairographics.org/releases/cairo-1.4.8.tar.gz] +md5=5b9db574c9fbb94ce52047600190a1ba +sha256=a3e9b0f07910ee325406118cf3e136fc78a5155c47fdb19e66e895a3c587bc51 + [http://gpephone.linuxtogo.org/download/gpephone/calendar-1.0/calendar-1.0.tar.gz] md5=eb7be3b85955a1bbe7a0154cbf2f70f9 sha256=7e6425b688a2d4bbeef0904cac52737b232d03fdc4d35866fd03359f2d5f1794 -- cgit v1.2.3 From 4b7af97c6e5c5b31d7713d33a6dc43f1d2a612ff Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:10:53 +0000 Subject: conf/checksums.ini: Add 0.9.4 of libXrender --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 3dfd04f406..ad872d7696 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -5754,6 +5754,10 @@ sha256=5cfaac877aca06e3be09380037a68c6d2c4a57641fa6994bc14f07c0105cca25 md5=2f1b2c6e8dcbcb6d760e59f445abd92c sha256=0f749183ab1a0ece14d33c3299b3f70893122349c0bfa9d7bd0e66ce19d1802a +[http://xorg.freedesktop.org/releases/individual/lib/libXrender-0.9.4.tar.bz2] +md5=dc266e850c51368f964e0d67bf5fb5e6 +sha256=5682d343dd4e7ef291a6577e956c331946ce5801d8fa076284a01b41de3017ec + [http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libXrender-X11R7.0-0.9.0.2.tar.bz2] md5=3f0fa590dd84df07568631c91fbe68ab sha256=f240490ce348cedcf09c2c5d170c7d79002790d72ea5dc3d7d702005684ff713 -- cgit v1.2.3 From 0b8e765ce63fb4f81270d0df5d9f8f2faa54dac1 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:11:32 +0000 Subject: conf/checksums.ini: Add libICE 1.0.4 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index ad872d7696..811fa6d531 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -5410,6 +5410,10 @@ sha256=15bedd7f892fbb130e2b9c17d4f927c4904362a7be5b73d07d56d8aa7025f6f1 md5=071f96648ac25c8e87a3de11a7de2d8a sha256=ffd46270dae30cad147d73559142a701a8ff8d0658f4abfb2341edefabb8161d +[http://xorg.freedesktop.org/releases/individual/lib/libICE-1.0.4.tar.bz2] +md5=4ab4e67e0b8845aa201e984153087f4a +sha256=13055e2f4c645cbd135ce97a7974a5866f9ba3ed8988e686b552f55c30514f04 + [http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libICE-X11R7.0-1.0.0.tar.bz2] md5=c778084b135311726da8dc74a16b3555 sha256=e37cffdb45bbb193e5cb75e74e7e0410554f4b3c3a1fe436debea907778e6aac -- cgit v1.2.3 From b242e567a78a61530b8ad991be7dc1b8d3b2820c Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:12:14 +0000 Subject: conf/checksums.ini: Add glib-2.14.0 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 811fa6d531..be10c1d458 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -3294,6 +3294,10 @@ sha256=142d5d4795bef093eb9cfd50e384ae87ba9b9934d22b667174535d377ad47f1b md5=b3f6a2a318610af6398b3445f1a2d6c6 sha256=10113e7b91f858557c7edb4b611cc009855c5ff8663af54977a65acb69445058 +[http://ftp.gnome.org/pub/GNOME/sources/glib/2.14/glib-2.14.0.tar.bz2] +md5=6fabf21f68631043bc6924e01398e3af +sha256=92e0aed2b5816bfcdfcd943215a7b59e9000f89ae7824218b7959c90161560a8 + [http://ftp.gnome.org/pub/GNOME/sources/glib/2.14/glib-2.14.1.tar.bz2] md5=196d7944a8ddc1f7c3d1e9c7146dd560 sha256=6f36ca624a12dce03cdea59c9eb900eda49ea2f463b329737eb9f2a8f3ac144d -- cgit v1.2.3 From a493dfb469e4c276dfd7f0843b7bae1591f7d4bf Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:14:26 +0000 Subject: conf/checksums.ini: Add glibc 2.6.1 --- conf/checksums.ini | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index be10c1d458..32074c779e 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -3346,10 +3346,18 @@ sha256=0ae1b1dc1ee870d307ae6ad4546778377b04055520d3771dab1290e60ab13286 md5=1fb29764a6a650a4d5b409dda227ac9f sha256=9b2e12bb1eafb55ab2e5a868532b8e6ec39216c66c25b8998d7474bc4d4eb529 +[ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.6.1.tar.bz2] +md5=11cf6d3fc86dbe0890b8d00372eb6286 +sha256=3ded3a3c3ba2cf02d72479a5cc0829c7c261a9d0934e49a79233de9fa276ec22 + [ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-2.5.tar.bz2] md5=8787868ba8962d9b125997ec2f25ac01 sha256=de77e49e0beee6061d4c6e480f322566ba25d4e5e018c456a18ea4a8da5c0ede +[ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-2.6.1.tar.bz2] +md5=503f1315afd808728ebaa75b3d87a7d9 +sha256=67c98ca1299f5f25eaece256d033e0e63bcf6876b920ca62a1fe61ac62c5c451 + [ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.5.tar.gz] md5=c766a79a51668d7fa33f175a249655b4 sha256=c027824ee6593a838e0883bdd4bf8bd455b3dcf4ff0aa77fe82452819d882f47 @@ -3366,6 +3374,10 @@ sha256=2d7af8211cda81abde3e0bb8ccedbd18924a27b244ff35d4eacafcf899038c56 md5=183f6d46e8fa5e4b2aff240ab1586c2e sha256=80c38a005325e7539012bd665fb8e06af9ee9bfc74efb236ebff121265bfd463 +[ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-2.6.1.tar.bz2] +md5=53d88ca624642dd267752ccce77b19d0 +sha256=d094028bc6d6691f56b4efeff7cd7e1c7ca10733e0cb5efc36e8fb08d8324bf1 + [ftp://ftp.gnome.org/pub/GNOME/sources/glibmm/2.8/glibmm-2.8.4.tar.bz2] md5=952cdde2d6aef201c528d431036d71e1 sha256=7ff592b6687caefa367b33d8cb8f66f3c0273fa86d4b688c0758d0d9fee7a2cb -- cgit v1.2.3 From 1992ddd28117d43a445d401c4c4d6d8243cca268 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:15:05 +0000 Subject: conf/checksums.ini: Add quilt 0.46 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 32074c779e..6077350580 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -9634,6 +9634,10 @@ sha256=06b32d6f8fe7065b4c2c8142a244374e1be963757125bac20ba016b92231b5bf md5=5f8dd5a041ca7c700b16620228f922aa sha256=de7290f334baf631a14d031df304ee94cfb550aa69e7512aa589d21c2381c7d8 +[http://download.savannah.gnu.org/releases/quilt/quilt-0.46.tar.gz] +md5=4508546d1ed0257ef7c128b6121b7208 +sha256=47bf030565bb462840db694acc183273455714028c74974c5b3a3bd4ad29ad89 + [http://downloads.sourceforge.net/qwt/qwt-4.2.0rc1.tgz] md5=142b10ab27e837c3c4603cf9a7e9343b sha256=3b6db68d53441119dced27e5bad26ec087294cb9d878d37bcea61e1f1e4849a1 -- cgit v1.2.3 From f67cf32ae0de4bc4c65e5d91d7c88d48c1af2402 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:16:33 +0000 Subject: conf/checksums.ini: Add inputproto 1.4.2.1 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 6077350580..2df19dd983 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -5026,6 +5026,10 @@ sha256=913ff534aa777e3c36f3e9fe3e8638c3ccfe398daeb7532fa917e7bcd6fed07d md5=e2c4cf4c2ad59d1e27f09381f6b4a3c3 sha256=62ba68a056daa89f5b21a02b27f6a4c858933e1c5547c9d16985d9ed182014e6 +[http://xorg.freedesktop.org/releases/individual/proto/inputproto-1.4.2.1.tar.bz2] +md5=aa948a7469168ddd9c33f11c5dff55ac +sha256=9b6db77037de7c52b9a17862b99bc435bd5c20e5d3faf5aec943b206cdaff3ed + [http://xorg.freedesktop.org/releases/individual/proto/inputproto-1.4.tar.gz] md5=3faf4bc1e2bb9353590d7b1fe50ec306 sha256=5360e221354bbdfd67bf9834c2c1d7a0d83f22c17e057f92194411911fbb81f5 -- cgit v1.2.3 From 6bfc1babb8e27f284f094d7f7f22021c035557f9 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:19:37 +0000 Subject: conf/checksums.ini: Add renderproto 0.9.3 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 2df19dd983..4aaf75be47 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -9742,6 +9742,10 @@ sha256=779317ca2e99f02b394af0c6f77f16def56de3b71a5d9f9ac6e5e9cfb65192e1 md5=28fbe8a59ebd31f098b90ec64f3d133a sha256=7754dfbbb1e3818f28720fa9647b8a593e9d54626a7896771c2bfac7f75e2726 +[http://xorg.freedesktop.org/releases/individual/proto/renderproto-0.9.3.tar.bz2] +md5=598bc9a493deee2e48e4434e94467189 +sha256=c98a08b877e98a8fa7daa04be472de7e0cb38a99593faca8b987effcea2dd45b + [http://xorg.freedesktop.org/releases/X11R7.0/src/proto/renderproto-X11R7.0-0.9.2.tar.bz2] md5=a7f3be0960c92ecb6a06a1022fe957df sha256=a875741d110a73952119460fac31e1bb7d0b0aff16f59c2a0a04bcd434c74f41 -- cgit v1.2.3 From cc8aacdcca2db80024e9a8e85395154a3af45fc2 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:21:51 +0000 Subject: conf/checksums.ini: Add libX11 1.1.3 --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 4aaf75be47..8b9b58ebc5 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -5486,6 +5486,10 @@ sha256=5359db57793430429786b648ac570d4ab205797306e049bf1e8675250af21541 md5=710bf38a9477a5a1b235bc94f1d0593c sha256=b77e4fd2bbd4092e7e78d0964760ad8ab160caccd4bc6d7d0c87a23febaea85e +[http://xorg.freedesktop.org/releases/individual/lib/libX11-1.1.3.tar.bz2] +md5=4d43d3e472c552d2f191ecdd4e75112c +sha256=4a2f566e2ea5dd955c875cb8fa9c18dd725324fc5cf4e23c803442e31ab8917a + [http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libX11-X11R7.0-1.0.0.tar.bz2] md5=dcf59f148c978816ebbe3fbc5c9ef0e1 sha256=89a3c2d8324ff9d0d91682503407310f7df30a74915cd253be3a75247b044248 -- cgit v1.2.3 From 78c5ca2bf6696bc378cd50cabc5a5c640b9eb262 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 25 Jan 2008 17:35:38 +0000 Subject: packages/libshout/libshout.inc: Stage the headers, libs and m4 file Like all xiph.org packages the .pc files are a bit odd and not staged. --- packages/libshout/libshout.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/libshout/libshout.inc b/packages/libshout/libshout.inc index 9ca8745b9b..3037eb0f46 100644 --- a/packages/libshout/libshout.inc +++ b/packages/libshout/libshout.inc @@ -14,3 +14,7 @@ do_configure_prepend() { rm -f ${S}/m4/ogg.m4 rm -f ${S}/m4/vorbis.m4 } + +do_stage() { + autotools_stage_all +} -- cgit v1.2.3 From 4ddb6204e15197bcb77ea348a16580639083320a Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sat, 26 Jan 2008 02:04:16 +0000 Subject: divers: replace '=' definition of dbg packages with '+=' for 43 files. fixes 2317. --- packages/avahi/avahi-ui_0.6.21.bb | 2 +- packages/cacao/cacao-cldc.inc | 2 +- packages/cacao/cacao.inc | 2 +- packages/conserver/conserver.inc | 2 +- packages/dbench/dbench_3.04.bb | 2 +- packages/gaim/pidgin.inc | 2 +- packages/gimp/babl_svn.bb | 2 +- packages/gstreamer/gst-plugin-pulse_0.9.4.bb | 2 +- packages/gtk-engines/gtk-sato-engine_0.1.bb | 2 +- packages/gtk-engines/gtk-sato-engine_svn.bb | 2 +- packages/gtk-sharp/gtk-sharp_2.10.2.bb | 6 +- packages/liba52/liba52_0.7.4.bb | 4 +- packages/libpng/libpng_1.2.12.bb | 2 +- packages/libpng/libpng_1.2.19.bb | 2 +- packages/libpng/libpng_1.2.20.bb | 2 +- packages/libpng/libpng_1.2.8.bb | 2 +- packages/libtiff/tiff_3.7.2.bb | 4 +- packages/libtool/libtool_1.5.10.bb | 2 +- packages/libtool/libtool_1.5.6.bb | 2 +- packages/libxosd/libxosd_svn.bb | 2 +- packages/lm_sensors/lmsensors-apps_2.10.1.bb | 4 +- packages/lua/lua.inc | 4 +- packages/modphp/modphp5.inc | 2 +- packages/mono-xsp/mono-xsp_1.2.5.bb | 12 +- packages/mono/mono_1.2.5.1-files.inc | 244 ++++++++++----------- packages/nbd/nbd_2.8.7.bb | 4 +- packages/openchrome/openchrome_svn.bb | 4 +- packages/openmoko-base/openmoko-libs_svn.bb | 8 +- packages/openmoko2/libjana_svn.bb | 4 +- packages/openmoko2/moko-gtk-engine_svn.bb | 2 +- packages/php/php_5.2.0.bb | 2 +- packages/qte/qte-common_2.3.10.inc | 2 +- packages/sylpheed/claws-plugin-mailmbox_1.14.bb | 2 +- packages/sysfsutils/sysfsutils_2.0.0.bb | 4 +- .../telepathy/telepathy-mission-control_4.21.bb | 6 +- .../telepathy/telepathy-mission-control_4.22.bb | 6 +- .../telepathy/telepathy-mission-control_4.45.bb | 6 +- packages/twisted/twisted_2.5.0.bb | 2 +- packages/usrp/usrp_0.12.bb | 2 +- packages/webkit/webkit-gtk_svn.bb | 2 +- packages/webkit/webkit-qt.inc | 2 +- packages/xmms/xmms-mad_0.10.bb | 2 +- packages/xmms/xmms-tremor_1.0.bb | 2 +- 43 files changed, 187 insertions(+), 189 deletions(-) diff --git a/packages/avahi/avahi-ui_0.6.21.bb b/packages/avahi/avahi-ui_0.6.21.bb index 1159b8ead4..add8de4db4 100644 --- a/packages/avahi/avahi-ui_0.6.21.bb +++ b/packages/avahi/avahi-ui_0.6.21.bb @@ -17,4 +17,4 @@ do_stage() { PACKAGES = "${PN} ${PN}-dbg" FILES_${PN} = "${libdir}/libavahi-ui*.so.*" -FILES_${PN}-dbg = "${libdir}/.debug/libavah-ui*" +FILES_${PN}-dbg += "${libdir}/.debug/libavah-ui*" diff --git a/packages/cacao/cacao-cldc.inc b/packages/cacao/cacao-cldc.inc index 86df369a32..0a6e5249e7 100644 --- a/packages/cacao/cacao-cldc.inc +++ b/packages/cacao/cacao-cldc.inc @@ -38,7 +38,7 @@ PACKAGES = "${PN} ${PN}-doc ${PN}-dbg" FILES_${PN} = "${bindir}/${PN} ${libdir}/lib*.so* ${datadir}/${PN}" FILES_${PN}-doc = "${datadir}/man" -FILES_${PN}-dbg = "${bindir}/.debug ${libdir}/.debug/lib*.so*" +FILES_${PN}-dbg += "${bindir}/.debug ${libdir}/.debug/lib*.so*" ALTERNATIVE_NAME = "java-cldc" ALTERNATIVE_LINK = "${bindir}/${ALTERNATIVE_NAME}" diff --git a/packages/cacao/cacao.inc b/packages/cacao/cacao.inc index 0f7fa554ac..09fc741579 100644 --- a/packages/cacao/cacao.inc +++ b/packages/cacao/cacao.inc @@ -30,7 +30,7 @@ PACKAGES = "${PN} ${PN}-doc ${PN}-dbg" FILES_${PN} = "${bindir}/${PN} ${libdir}/lib*.so* ${datadir}/${PN}" FILES_${PN}-doc = "${datadir}/man" -FILES_${PN}-dbg = "${bindir}/.debug ${libdir}/.debug/lib*.so*" +FILES_${PN}-dbg += "${bindir}/.debug ${libdir}/.debug/lib*.so*" ALTERNATIVE_NAME = "java" ALTERNATIVE_LINK = "${bindir}/${ALTERNATIVE_NAME}" diff --git a/packages/conserver/conserver.inc b/packages/conserver/conserver.inc index ff8314fc6e..d4d1ab6d38 100644 --- a/packages/conserver/conserver.inc +++ b/packages/conserver/conserver.inc @@ -25,7 +25,7 @@ FILES_${PN}-doc += "${datadir}/examples/conserver" # Make sure .debug files end up in the correct place FILES_${PN} = "${sysconfdir} ${bindir}/* ${libdir}/${PN}/* ${sbindir}/*" -FILES_${PN}-dbg = "${bindir}/.debug ${sbindir}/.debug ${libdir}/${PN}/.debug" +FILES_${PN}-dbg += "${bindir}/.debug ${sbindir}/.debug ${libdir}/${PN}/.debug" # Indicate that the default file is a configuation file CONFFILES_${PN} = "${sysconfdir}/default/conserver" diff --git a/packages/dbench/dbench_3.04.bb b/packages/dbench/dbench_3.04.bb index 5eec719b95..1f6b703ba8 100644 --- a/packages/dbench/dbench_3.04.bb +++ b/packages/dbench/dbench_3.04.bb @@ -13,4 +13,4 @@ inherit autotools PACKAGES =+ "tbench tbench-dbg" FILES_tbench = "${bindir}/tbench*" -FILES_tbench-dbg = "${bindir}/.debug/tbench*" +FILES_tbench-dbg += "${bindir}/.debug/tbench*" diff --git a/packages/gaim/pidgin.inc b/packages/gaim/pidgin.inc index 4184848daa..a2ef61a508 100644 --- a/packages/gaim/pidgin.inc +++ b/packages/gaim/pidgin.inc @@ -29,7 +29,7 @@ LEAD_SONAME = "libpurple.so.0" FILES_libpurple = "${libdir}/libpurple*.so.* /usr/bin/purple-* /etc/gconf/schemas/purple*" FILES_libpurple-dev = "${libdir}/libpurple* \ ${libdir}/purple-2/*.la " -FILES_libpurple-dbg = "${libdir}/.debug/libpurple* \ +FILES_libpurple-dbg += "${libdir}/.debug/libpurple* \ ${libdir}/purple-2/.debug" FILES_libpurple-liboscar = "${libdir}/purple-2/liboscar.so.*" FILES_libpurple-libjabber = "${libdir}/purple-2/libjabber.so.*" diff --git a/packages/gimp/babl_svn.bb b/packages/gimp/babl_svn.bb index a32d6ce31a..d53acf46f8 100644 --- a/packages/gimp/babl_svn.bb +++ b/packages/gimp/babl_svn.bb @@ -16,6 +16,6 @@ do_stage() { FILES_${PN} += "${libdir}/babl-0.0/" -FILES_${PN}-dbg = "${libdir}/babl-0.0/.debug/" +FILES_${PN}-dbg += "${libdir}/babl-0.0/.debug/" diff --git a/packages/gstreamer/gst-plugin-pulse_0.9.4.bb b/packages/gstreamer/gst-plugin-pulse_0.9.4.bb index f88cb66ff4..a91e482358 100644 --- a/packages/gstreamer/gst-plugin-pulse_0.9.4.bb +++ b/packages/gstreamer/gst-plugin-pulse_0.9.4.bb @@ -24,5 +24,5 @@ FILES_${PN}-dev = "\ ${libdir}/gstreamer-0.10/libgstpulse.a \ ${libdir}/gstreamer-0.10/libgstpulse.la \ ${libdir}/gstreamer-0.10/libgstpulse.so*" -FILES_${PN}-dbg = "${libdir}/gstreamer-0.10/.debug" +FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug" diff --git a/packages/gtk-engines/gtk-sato-engine_0.1.bb b/packages/gtk-engines/gtk-sato-engine_0.1.bb index 4429b21cc9..85720fbdd2 100644 --- a/packages/gtk-engines/gtk-sato-engine_0.1.bb +++ b/packages/gtk-engines/gtk-sato-engine_0.1.bb @@ -18,7 +18,7 @@ do_configure_prepend() { PACKAGES += "gtk-theme-sato" FILES_${PN} = "${libdir}/gtk-2.0/*/engines/*.so " FILES_${PN}-dev = "${libdir}/gtk-2.0/*/engines/*" -FILES_${PN}-dbg = "${libdir}/gtk-2.0/*/engines/.debug" +FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/engines/.debug" FILES_gtk-theme-sato = "${datadir}/icons ${datadir}/themes" RDEPENDS_gtk-theme-sato = "${PN}" diff --git a/packages/gtk-engines/gtk-sato-engine_svn.bb b/packages/gtk-engines/gtk-sato-engine_svn.bb index c3d760c829..39829984d3 100644 --- a/packages/gtk-engines/gtk-sato-engine_svn.bb +++ b/packages/gtk-engines/gtk-sato-engine_svn.bb @@ -17,7 +17,7 @@ inherit autotools pkgconfig PACKAGES += "gtk-theme-sato" FILES_${PN} = "${libdir}/gtk-2.0/*/engines/*.so " FILES_${PN}-dev = "${libdir}/gtk-2.0/*/engines/*" -FILES_${PN}-dbg = "${libdir}/gtk-2.0/*/engines/.debug" +FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/engines/.debug" FILES_gtk-theme-sato = "${datadir}/icons ${datadir}/themes" RDEPENDS_gtk-theme-sato = "${PN}" diff --git a/packages/gtk-sharp/gtk-sharp_2.10.2.bb b/packages/gtk-sharp/gtk-sharp_2.10.2.bb index ddb209e15c..28b50e13c7 100644 --- a/packages/gtk-sharp/gtk-sharp_2.10.2.bb +++ b/packages/gtk-sharp/gtk-sharp_2.10.2.bb @@ -36,7 +36,7 @@ FILES_libgtk2.0-cil-dev = "/usr/lib/pkgconfig/gtk-sharp-2.0.pc \ /usr/share/gapi-2.0/atk-api.xml \ /usr/share/gapi-2.0/gdk-api.xml \ /usr/share/gapi-2.0/gtk-api.xml" -FILES_libgtk2.0-cil-dbg = "/usr/lib/.debug/libgtksharpglue-2.so \ +FILES_libgtk2.0-cil-dbg += "/usr/lib/.debug/libgtksharpglue-2.so \ /usr/lib/.debug/libgdksharpglue-2.so \ /usr/lib/.debug/libpangosharpglue-2.so" @@ -46,7 +46,7 @@ FILES_libglib2.0-cil = "/usr/lib/mono/gac/glib-sharp \ /usr/lib/mono/gac/policy.2.*.glib-sharp/ \ /usr/lib/mono/gtk-sharp-2.0/policy.2.*.glib-sharp.dll" FILES_libglib2.0-cil-dev = "/usr/lib/pkgconfig/glib-sharp-2.0.pc" -FILES_libglib2.0-cil-dbg = "/usr/lib/.debug/libglibsharpglue-2.so" +FILES_libglib2.0-cil-dbg += "/usr/lib/.debug/libglibsharpglue-2.so" FILES_libglade2.0-cil = "/usr/lib/mono/gac/glade-sharp \ /usr/lib/libgladesharpglue-2.so \ @@ -55,7 +55,7 @@ FILES_libglade2.0-cil = "/usr/lib/mono/gac/glade-sharp \ /usr/lib/mono/gtk-sharp-2.0/policy.2.*.glade-sharp.dll" FILES_libglade2.0-cil-dev = "/usr/lib/pkgconfig/glade-sharp-2.0.pc \ /usr/share/gapi-2.0/glade-api.xml" -FILES_libglade2.0-cil-dbg = "/usr/lib/.debug/libgladesharpglue-2.so" +FILES_libglade2.0-cil-dbg += "/usr/lib/.debug/libgladesharpglue-2.so" FILES_gtk-sharp-gapi2 = " \ /usr/bin/gapi2-* \ diff --git a/packages/liba52/liba52_0.7.4.bb b/packages/liba52/liba52_0.7.4.bb index e29e6c9b2f..743fa30f83 100644 --- a/packages/liba52/liba52_0.7.4.bb +++ b/packages/liba52/liba52_0.7.4.bb @@ -15,9 +15,9 @@ PACKAGES =+ "a52dec a52dec-dbg a52dec-doc" FILES_${PN} = " ${libdir}/liba52.so.0 ${libdir}/liba52.so.0.0.0 " FILES_${PN}-dev = " ${includedir}/a52dec/*.h ${libdir}/liba52.so ${libdir}/liba52.la ${libdir}/liba52.a " -FILES_${PN}-dbg = " ${libdir}/.debug/*" +FILES_${PN}-dbg += " ${libdir}/.debug/*" FILES_a52dec = " ${bindir}/* " -FILES_a52dec-dbg = " ${bindir}/.debug/* " +FILES_a52dec-dbg += " ${bindir}/.debug/* " FILES_a52dec-doc = " ${mandir}/man1/* " do_stage() { diff --git a/packages/libpng/libpng_1.2.12.bb b/packages/libpng/libpng_1.2.12.bb index c26d5e5d87..b05bc84856 100644 --- a/packages/libpng/libpng_1.2.12.bb +++ b/packages/libpng/libpng_1.2.12.bb @@ -9,7 +9,7 @@ DEPENDS = "zlib" PACKAGES =+ "${PN}12-dbg ${PN}12 ${PN}12-dev" -FILES_${PN}12-dbg = "${libdir}/libpng12*.dbg" +FILES_${PN}12-dbg += "${libdir}/libpng12*.dbg" FILES_${PN}12 = "${libdir}/libpng12.so.*" FILES_${PN}12-dev = "${libdir}/libpng12.* ${includedir}/libpng12 ${libdir}/pkgconfig/libpng12.pc" FILES_${PN} = "${libdir}/lib*.so.*" diff --git a/packages/libpng/libpng_1.2.19.bb b/packages/libpng/libpng_1.2.19.bb index c6c296cae4..3730f3d727 100644 --- a/packages/libpng/libpng_1.2.19.bb +++ b/packages/libpng/libpng_1.2.19.bb @@ -40,7 +40,7 @@ python do_package() { PACKAGES =+ "${PN}12-dbg ${PN}12 ${PN}12-dev" -FILES_${PN}12-dbg = "${libdir}/libpng12*.dbg" +FILES_${PN}12-dbg += "${libdir}/libpng12*.dbg" FILES_${PN}12 = "${libdir}/libpng12.so.*" FILES_${PN}12-dev = "${libdir}/libpng12.* ${includedir}/libpng12 ${libdir}/pkgconfig/libpng12.pc" FILES_${PN} = "${libdir}/lib*.so.*" diff --git a/packages/libpng/libpng_1.2.20.bb b/packages/libpng/libpng_1.2.20.bb index c6c296cae4..3730f3d727 100644 --- a/packages/libpng/libpng_1.2.20.bb +++ b/packages/libpng/libpng_1.2.20.bb @@ -40,7 +40,7 @@ python do_package() { PACKAGES =+ "${PN}12-dbg ${PN}12 ${PN}12-dev" -FILES_${PN}12-dbg = "${libdir}/libpng12*.dbg" +FILES_${PN}12-dbg += "${libdir}/libpng12*.dbg" FILES_${PN}12 = "${libdir}/libpng12.so.*" FILES_${PN}12-dev = "${libdir}/libpng12.* ${includedir}/libpng12 ${libdir}/pkgconfig/libpng12.pc" FILES_${PN} = "${libdir}/lib*.so.*" diff --git a/packages/libpng/libpng_1.2.8.bb b/packages/libpng/libpng_1.2.8.bb index 76a86f6d28..cddc400375 100644 --- a/packages/libpng/libpng_1.2.8.bb +++ b/packages/libpng/libpng_1.2.8.bb @@ -8,7 +8,7 @@ DEPENDS = "zlib" PACKAGES =+ "${PN}12-dbg ${PN}12 ${PN}12-dev" -FILES_${PN}12-dbg = "${libdir}/libpng12*.dbg" +FILES_${PN}12-dbg += "${libdir}/libpng12*.dbg" FILES_${PN}12 = "${libdir}/libpng12.so.*" FILES_${PN}12-dev = "${libdir}/libpng12.* ${includedir}/libpng12 ${libdir}/pkgconfig/libpng12.pc" FILES_${PN} = "${libdir}/lib*.so.*" diff --git a/packages/libtiff/tiff_3.7.2.bb b/packages/libtiff/tiff_3.7.2.bb index e11028ed8d..1f28e718bc 100644 --- a/packages/libtiff/tiff_3.7.2.bb +++ b/packages/libtiff/tiff_3.7.2.bb @@ -20,6 +20,6 @@ do_stage() { PACKAGES =+ "tiffxx tiffxx-dbg tiffxx-dev tiff-utils tiff-utils-dbg" FILES_tiffxx = "${libdir}/libtiffxx.so.*" FILES_tiffxx-dev = "${libdir}/libtiffxx.so ${libdir}/libtiffxx.*a" -FILES_tiffxx-dbg = "${libdir}/.debug/libtiffxx.so*" +FILES_tiffxx-dbg += "${libdir}/.debug/libtiffxx.so*" FILES_tiff-utils = "${bindir}/*" -FILES_tiff-utils-dbg = "${bindir}/.debug/" +FILES_tiff-utils-dbg += "${bindir}/.debug/" diff --git a/packages/libtool/libtool_1.5.10.bb b/packages/libtool/libtool_1.5.10.bb index 35cebfa5c2..3a9ff7ef59 100644 --- a/packages/libtool/libtool_1.5.10.bb +++ b/packages/libtool/libtool_1.5.10.bb @@ -17,7 +17,7 @@ PACKAGES =+ "libltdl libltdl-dev libltdl-dbg" FILES_${PN} += "${datadir}/aclocal*" FILES_libltdl = "${libdir}/libltdl.so.*" FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h" -FILES_libltdl-dbg = "${libdir}/.debug/" +FILES_libltdl-dbg += "${libdir}/.debug/" inherit autotools diff --git a/packages/libtool/libtool_1.5.6.bb b/packages/libtool/libtool_1.5.6.bb index 2deb7df15c..7c02c4ba97 100644 --- a/packages/libtool/libtool_1.5.6.bb +++ b/packages/libtool/libtool_1.5.6.bb @@ -19,7 +19,7 @@ PACKAGES = "libltdl libltdl-dbg libltdl-dev ${PN} ${PN}-doc" FILES_${PN} += "${datadir}/aclocal*" FILES_libltdl = "${libdir}/libltdl.so.*" FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h" -FILES_libltdl-dbg = "${libdir}/.debug/" +FILES_libltdl-dbg += "${libdir}/.debug/" inherit autotools diff --git a/packages/libxosd/libxosd_svn.bb b/packages/libxosd/libxosd_svn.bb index bb16f7f09a..377f55dc2a 100644 --- a/packages/libxosd/libxosd_svn.bb +++ b/packages/libxosd/libxosd_svn.bb @@ -19,6 +19,6 @@ do_stage() { PACKAGES =+ "${PN}-examples-dbg ${PN}-examples" FILES_${PN}-examples = "${bindir}/osd_cat" -FILES_${PN}-examples-dbg = "${bindir}/.debug/" +FILES_${PN}-examples-dbg += "${bindir}/.debug/" FILES_${PN}-dev += "${bindir}/xosd-config" FILES_${PN} = "${libdir}/libxosd.so.*" diff --git a/packages/lm_sensors/lmsensors-apps_2.10.1.bb b/packages/lm_sensors/lmsensors-apps_2.10.1.bb index 91d7371ca1..6f89481f88 100644 --- a/packages/lm_sensors/lmsensors-apps_2.10.1.bb +++ b/packages/lm_sensors/lmsensors-apps_2.10.1.bb @@ -40,9 +40,9 @@ PACKAGES =+ "libsensors libsensors-dev libsensors-dbg libsensors-doc" PACKAGES =+ "lmsensors-sensors lmsensors-sensors-dbg lmsensors-sensors-doc" FILES_lmsensors-sensors = "${bindir}/sensors ${sysconfdir}" -FILES_lmsensors-sensors-dbg = "${bindir}/.debug/sensors" +FILES_lmsensors-sensors-dbg += "${bindir}/.debug/sensors" FILES_lmsensors-sensors-doc = "${mandir}/man1 ${mandir}/man5" FILES_libsensors = "${libdir}/libsensors.so.*" -FILES_libsensors-dbg = "${libdir}/.debug" +FILES_libsensors-dbg += "${libdir}/.debug" FILES_libsensors-dev = "${libdir}/libsensors.so ${libdir}/libsensors.a ${includedir}" FILES_libsensors-doc = "${mandir}/man3" diff --git a/packages/lua/lua.inc b/packages/lua/lua.inc index b713825f00..994295b729 100644 --- a/packages/lua/lua.inc +++ b/packages/lua/lua.inc @@ -6,9 +6,7 @@ HOMEPAGE = "http://www.lua.org/" PACKAGES = "liblua-dbg liblualib-dbg ${PN}-dbg \ liblua-dev liblua liblualib-dev liblualib ${PN}-doc ${PN}" -FILES_${PN}-dbg = "${bindir}/.debug" -FILES_liblua-dbg = "${libdir}/.debug/liblua.so.*" -FILES_liblualib-dbg = "${libdir}/.debug/liblualib.so.*" +FILES_${PN}-dbg += "${bindir}/.debug ${libdir}/.debug/liblua.so.* ${libdir}/.debug/liblualib.so.*" FILES_${PN} = "${bindir}" FILES_${PN}-doc = "${mandir}" diff --git a/packages/modphp/modphp5.inc b/packages/modphp/modphp5.inc index 202cacc75b..e8701b0b99 100644 --- a/packages/modphp/modphp5.inc +++ b/packages/modphp/modphp5.inc @@ -11,7 +11,7 @@ S = "${WORKDIR}/php-${PV}" inherit autotools FILES_${PN} = "${libdir}/apache2 /etc" -FILES_${PN}-dbg = "${libdir}/apache2/modules/.debug" +FILES_${PN}-dbg += "${libdir}/apache2/modules/.debug" CFLAGS += " -g -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED" EXTRA_OECONF = "--with-apxs2=${STAGING_BINDIR_NATIVE}/apxs \ diff --git a/packages/mono-xsp/mono-xsp_1.2.5.bb b/packages/mono-xsp/mono-xsp_1.2.5.bb index f5193af9a6..0b54ee332a 100644 --- a/packages/mono-xsp/mono-xsp_1.2.5.bb +++ b/packages/mono-xsp/mono-xsp_1.2.5.bb @@ -31,21 +31,21 @@ PACKAGES = "${PN}-dbg \ mono-xsp-dev \ " -FILES_libmono-webserver1.0-cil-dbg = " \ +FILES_libmono-webserver1.0-cil-dbg += " \ /usr/lib/mono/gac/Mono.WebServer/0.1.*/*.mdb \ " FILES_libmono-webserver1.0-cil = " \ /usr/lib/mono/gac/Mono.WebServer/0.1.*/ \ /usr/lib/mono/1.0/Mono.WebServer.dll \ " -FILES_libmono-webserver2.0-cil-dbg = " \ +FILES_libmono-webserver2.0-cil-dbg += " \ /usr/lib/mono/gac/Mono.WebServer2/0.2.*/*.mdb \ " FILES_libmono-webserver2.0-cil = " \ /usr/lib/mono/gac/Mono.WebServer2/0.2.*/ \ /usr/lib/mono/2.0/Mono.WebServer2.dll \ " -FILES_${PN}-dbg = " \ +FILES_${PN}-dbg += " \ /usr/lib/mono/gac/xsp/1.2.*/*.mdb \ " FILES_${PN} = " \ @@ -59,7 +59,7 @@ FILES_${PN} = " \ /usr/lib/xsp/1.0/dbsessmgr.exe.config \ /usr/lib/xsp/1.0/dbsessmgr.exe \ " -FILES_mono-xsp2-dbg = " \ +FILES_mono-xsp2-dbg += " \ /usr/lib/mono/gac/xsp2/1.2.*/*.dbg \ " FILES_mono-xsp2 = " \ @@ -73,7 +73,7 @@ FILES_mono-xsp2 = " \ /usr/lib/xsp/2.0/dbsessmgr2.exe.config \ /usr/lib/xsp/2.0/dbsessmgr2.exe \ " -FILES_mono-mod-mono-server-dbg = "\ +FILES_mono-mod-mono-server-dbg += "\ /usr/lib/mono/gac/mod-mono-server/1.2.*/*.mdb \ " FILES_mono-mod-mono-server = "\ @@ -81,7 +81,7 @@ FILES_mono-mod-mono-server = "\ /usr/lib/mono/1.0/mod-mono-server.exe \ /usr/bin/mod-mono-server \ " -FILES_mono-mod-mono-server2-dbg = "\ +FILES_mono-mod-mono-server2-dbg += "\ /usr/lib/mono/gac/mod-mono-server2/1.2.*/*.mdb \ " FILES_mono-mod-mono-server2 = "\ diff --git a/packages/mono/mono_1.2.5.1-files.inc b/packages/mono/mono_1.2.5.1-files.inc index 3dc580750f..1d7b74e345 100644 --- a/packages/mono/mono_1.2.5.1-files.inc +++ b/packages/mono/mono_1.2.5.1-files.inc @@ -1,21 +1,21 @@ # This is a generated file, please do not edit directly # Use collect-files.py instead. -- Henryk -FILES_mono-jit-dbg = "/usr/bin/mono*.mdb \ +FILES_mono-jit-dbg += "/usr/bin/mono*.mdb \ /usr/bin/mono*/*.mdb" FILES_mono-jit = "/usr/bin/mono" -FILES_mono-gac-dbg = "/usr/bin/gacutil*.mdb \ +FILES_mono-gac-dbg += "/usr/bin/gacutil*.mdb \ /usr/bin/gacutil*/*.mdb \ /usr/lib/mono/1.0/gacutil.exe*.mdb \ /usr/lib/mono/1.0/gacutil.exe*/*.mdb" FILES_mono-gac = "/usr/bin/gacutil \ /usr/lib/mono/1.0/gacutil.exe" -FILES_mono-mjs-dbg = "/usr/bin/mjs*.mdb \ +FILES_mono-mjs-dbg += "/usr/bin/mjs*.mdb \ /usr/bin/mjs*/*.mdb \ /usr/lib/mono/1.0/mjs.exe*.mdb \ /usr/lib/mono/1.0/mjs.exe*/*.mdb" FILES_mono-mjs = "/usr/bin/mjs \ /usr/lib/mono/1.0/mjs.exe*" -FILES_mono-gmcs-dbg = "/usr/bin/gmcs*.mdb \ +FILES_mono-gmcs-dbg += "/usr/bin/gmcs*.mdb \ /usr/bin/gmcs*/*.mdb \ /usr/bin/wsdl2*.mdb \ /usr/bin/wsdl2*/*.mdb \ @@ -77,7 +77,7 @@ FILES_mono-gmcs = "/usr/bin/gmcs \ /usr/lib/mono/2.0/Microsoft.Common.tasks \ /usr/lib/mono/2.0/Microsoft.Common.targets \ /usr/lib/mono/2.0/Microsoft.VisualBasic.targets" -FILES_mono-utils-dbg = "/usr/bin/pedump*.mdb \ +FILES_mono-utils-dbg += "/usr/bin/pedump*.mdb \ /usr/bin/pedump*/*.mdb \ /usr/bin/monodis*.mdb \ /usr/bin/monodis*/*.mdb \ @@ -92,7 +92,7 @@ FILES_mono-utils = "/usr/bin/pedump \ /usr/bin/monograph \ /usr/bin/mono-find-provides \ /usr/bin/mono-find-requires" -FILES_libmono-peapi1.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \ +FILES_libmono-peapi1.0-cil-dbg += "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \ /usr/lib/mono/gac/PEAPI/1.0.*/*/*.mdb \ /usr/lib/mono/gac/PEAPI/1.0.*/.debug/ \ /usr/lib/mono/gac/PEAPI/1.0.*/../.debug/ \ @@ -100,7 +100,7 @@ FILES_libmono-peapi1.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \ /usr/lib/mono/1.0/PEAPI.dll*/*.mdb" FILES_libmono-peapi1.0-cil = "/usr/lib/mono/gac/PEAPI/1.0.*/ \ /usr/lib/mono/1.0/PEAPI.dll" -FILES_libmono-cairo1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \ +FILES_libmono-cairo1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Cairo/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Cairo/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Cairo/1.0.*/../.debug/ \ @@ -111,7 +111,7 @@ FILES_libmono-cairo1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \ FILES_libmono-cairo1.0-cil = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/ \ /usr/lib/mono/1.0/Mono.Cairo.dll \ /usr/lib/pkgconfig/mono-cairo.pc" -FILES_libmono-system-web2.0-cil-dbg = "/usr/lib/mono/gac/System.Web/2.0.*/*.mdb \ +FILES_libmono-system-web2.0-cil-dbg += "/usr/lib/mono/gac/System.Web/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Web/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Web/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Web/2.0.*/../.debug/ \ @@ -127,7 +127,7 @@ FILES_libmono-system-web2.0-cil = "/usr/lib/mono/gac/System.Web/2.0.*/ \ /usr/lib/mono/gac/System.Web.Services/2.0.*/ \ /usr/lib/mono/2.0/System.Web.dll \ /usr/lib/mono/2.0/System.Web.Services.dll" -FILES_libmono-accessibility2.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/2.0.*/*.mdb \ +FILES_libmono-accessibility2.0-cil-dbg += "/usr/lib/mono/gac/Accessibility/2.0.*/*.mdb \ /usr/lib/mono/gac/Accessibility/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Accessibility/2.0.*/.debug/ \ /usr/lib/mono/gac/Accessibility/2.0.*/../.debug/ \ @@ -135,7 +135,7 @@ FILES_libmono-accessibility2.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/2.0.*/ /usr/lib/mono/2.0/Accessibility.dll*/*.mdb" FILES_libmono-accessibility2.0-cil = "/usr/lib/mono/gac/Accessibility/2.0.*/ \ /usr/lib/mono/2.0/Accessibility.dll" -FILES_libmono-microsoft7.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*.mdb \ +FILES_libmono-microsoft7.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*.mdb \ /usr/lib/mono/gac/Microsoft.JScript/7.0.*/*/*.mdb \ /usr/lib/mono/gac/Microsoft.JScript/7.0.*/.debug/ \ /usr/lib/mono/gac/Microsoft.JScript/7.0.*/../.debug/ \ @@ -159,7 +159,7 @@ FILES_libmono-microsoft7.0-cil = "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/ \ /usr/lib/mono/1.0/Microsoft.JScript.dll \ /usr/lib/mono/1.0/Microsoft.VisualC.dll \ /usr/lib/mono/1.0/Microsoft.Vsa.dll" -FILES_libmono-winforms2.0-cil-dbg = "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*.mdb \ +FILES_libmono-winforms2.0-cil-dbg += "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Windows.Forms/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Windows.Forms/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Windows.Forms/2.0.*/../.debug/ \ @@ -183,7 +183,7 @@ FILES_libmono-winforms2.0-cil = "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/ \ /usr/lib/mono/2.0/System.Windows.Forms.dll \ /usr/lib/mono/2.0/System.Drawing.Design.dll \ /usr/lib/mono/2.0/System.Design.dll" -FILES_libmono-ldap1.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*.mdb \ +FILES_libmono-ldap1.0-cil-dbg += "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*.mdb \ /usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/.debug/ \ /usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/../.debug/ \ @@ -191,7 +191,7 @@ FILES_libmono-ldap1.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/* /usr/lib/mono/1.0/Novell.Directory.Ldap.dll*/*.mdb" FILES_libmono-ldap1.0-cil = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/ \ /usr/lib/mono/1.0/Novell.Directory.Ldap.dll" -FILES_libmono-sharpzip2.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*.mdb \ +FILES_libmono-sharpzip2.84-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/.debug/ \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/../.debug/ \ @@ -199,7 +199,7 @@ FILES_libmono-sharpzip2.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/ /usr/lib/mono/2.0/ICSharpCode.SharpZipLib.dll*/*.mdb" FILES_libmono-sharpzip2.84-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/ \ /usr/lib/mono/2.0/ICSharpCode.SharpZipLib.dll" -FILES_libmono-system-data2.0-cil-dbg = "/usr/lib/mono/gac/System.Data/2.0.*/*.mdb \ +FILES_libmono-system-data2.0-cil-dbg += "/usr/lib/mono/gac/System.Data/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Data/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Data/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Data/2.0.*/../.debug/ \ @@ -207,7 +207,7 @@ FILES_libmono-system-data2.0-cil-dbg = "/usr/lib/mono/gac/System.Data/2.0.*/*.md /usr/lib/mono/2.0/System.Data.dll*/*.mdb" FILES_libmono-system-data2.0-cil = "/usr/lib/mono/gac/System.Data/2.0.*/ \ /usr/lib/mono/2.0/System.Data.dll" -FILES_libmono-corlib2.0-cil-dbg = "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \ +FILES_libmono-corlib2.0-cil-dbg += "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \ /usr/lib/mono/gac/I18N*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/I18N*/2.0.*/.debug/ \ /usr/lib/mono/gac/I18N*/2.0.*/../.debug/ \ @@ -218,7 +218,7 @@ FILES_libmono-corlib2.0-cil-dbg = "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \ FILES_libmono-corlib2.0-cil = "/usr/lib/mono/gac/I18N*/2.0.*/ \ /usr/lib/mono/2.0/I18N*.dll \ /usr/lib/mono/2.0/mscorlib.dll*" -FILES_libmono-winforms1.0-cil-dbg = "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*.mdb \ +FILES_libmono-winforms1.0-cil-dbg += "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Windows.Forms/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Windows.Forms/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Windows.Forms/1.0.*/../.debug/ \ @@ -242,7 +242,7 @@ FILES_libmono-winforms1.0-cil = "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/ \ /usr/lib/mono/1.0/System.Windows.Forms.dll \ /usr/lib/mono/1.0/System.Drawing.Design.dll \ /usr/lib/mono/1.0/System.Design.dll" -FILES_libmono-microsoft8.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*.mdb \ +FILES_libmono-microsoft8.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*.mdb \ /usr/lib/mono/gac/Microsoft.JScript/8.0.*/*/*.mdb \ /usr/lib/mono/gac/Microsoft.JScript/8.0.*/.debug/ \ /usr/lib/mono/gac/Microsoft.JScript/8.0.*/../.debug/ \ @@ -266,7 +266,7 @@ FILES_libmono-microsoft8.0-cil = "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/ \ /usr/lib/mono/2.0/Microsoft.JScript.dll \ /usr/lib/mono/2.0/Microsoft.VisualC.dll \ /usr/lib/mono/2.0/Microsoft.Vsa.dll" -FILES_libmono-corlib1.0-cil-dbg = "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \ +FILES_libmono-corlib1.0-cil-dbg += "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \ /usr/lib/mono/gac/I18N*/1.0.*/*/*.mdb \ /usr/lib/mono/gac/I18N*/1.0.*/.debug/ \ /usr/lib/mono/gac/I18N*/1.0.*/../.debug/ \ @@ -277,7 +277,7 @@ FILES_libmono-corlib1.0-cil-dbg = "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \ FILES_libmono-corlib1.0-cil = "/usr/lib/mono/gac/I18N*/1.0.*/ \ /usr/lib/mono/1.0/I18N*.dll \ /usr/lib/mono/1.0/mscorlib.dll*" -FILES_libmono-system-web1.0-cil-dbg = "/usr/lib/mono/gac/System.Web/1.0.*/*.mdb \ +FILES_libmono-system-web1.0-cil-dbg += "/usr/lib/mono/gac/System.Web/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Web/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Web/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Web/1.0.*/../.debug/ \ @@ -293,7 +293,7 @@ FILES_libmono-system-web1.0-cil = "/usr/lib/mono/gac/System.Web/1.0.*/ \ /usr/lib/mono/gac/System.Web.Services/1.0.*/ \ /usr/lib/mono/1.0/System.Web.dll \ /usr/lib/mono/1.0/System.Web.Services.dll" -FILES_libmono-system-runtime2.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/2.0.*/*.mdb \ +FILES_libmono-system-runtime2.0-cil-dbg += "/usr/lib/mono/gac/System.Runtime.*/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Runtime.*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Runtime.*/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Runtime.*/2.0.*/../.debug/ \ @@ -301,7 +301,7 @@ FILES_libmono-system-runtime2.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/2. /usr/lib/mono/2.0/System.Runtime.*.dll*/*.mdb" FILES_libmono-system-runtime2.0-cil = "/usr/lib/mono/gac/System.Runtime.*/2.0.*/ \ /usr/lib/mono/2.0/System.Runtime.*.dll" -FILES_libmono-cscompmgd8.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \ +FILES_libmono-cscompmgd8.0-cil-dbg += "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \ /usr/lib/mono/gac/cscompmgd/8.0.*/*/*.mdb \ /usr/lib/mono/gac/cscompmgd/8.0.*/.debug/ \ /usr/lib/mono/gac/cscompmgd/8.0.*/../.debug/ \ @@ -309,7 +309,7 @@ FILES_libmono-cscompmgd8.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \ /usr/lib/mono/2.0/cscompmgd.dll*/*.mdb" FILES_libmono-cscompmgd8.0-cil = "/usr/lib/mono/gac/cscompmgd/8.0.*/ \ /usr/lib/mono/2.0/cscompmgd.dll" -FILES_libmono-cscompmgd7.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \ +FILES_libmono-cscompmgd7.0-cil-dbg += "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \ /usr/lib/mono/gac/cscompmgd/7.0.*/*/*.mdb \ /usr/lib/mono/gac/cscompmgd/7.0.*/.debug/ \ /usr/lib/mono/gac/cscompmgd/7.0.*/../.debug/ \ @@ -317,7 +317,7 @@ FILES_libmono-cscompmgd7.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \ /usr/lib/mono/1.0/cscompmgd.dll*/*.mdb" FILES_libmono-cscompmgd7.0-cil = "/usr/lib/mono/gac/cscompmgd/7.0.*/ \ /usr/lib/mono/1.0/cscompmgd.dll" -FILES_libmono-firebirdsql1.7-cil-dbg = "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*.mdb \ +FILES_libmono-firebirdsql1.7-cil-dbg += "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*.mdb \ /usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*/*.mdb \ /usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/.debug/ \ /usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/../.debug/ \ @@ -325,10 +325,10 @@ FILES_libmono-firebirdsql1.7-cil-dbg = "/usr/lib/mono/gac/FirebirdSql.Data.Fireb /usr/lib/mono/1.0/FirebirdSql.Data.Firebird.dll*/*.mdb" FILES_libmono-firebirdsql1.7-cil = "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/ \ /usr/lib/mono/1.0/FirebirdSql.Data.Firebird.dll" -FILES_mono-jay-dbg = "/usr/bin/jay*.mdb \ +FILES_mono-jay-dbg += "/usr/bin/jay*.mdb \ /usr/bin/jay*/*.mdb" FILES_mono-jay = "/usr/bin/jay" -FILES_libmono-data-tds1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb \ +FILES_libmono-data-tds1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Tds/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Data.Tds/1.0.*/../.debug/ \ @@ -336,7 +336,7 @@ FILES_libmono-data-tds1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb /usr/lib/mono/1.0/Mono.Data.Tds.dll*/*.mdb" FILES_libmono-data-tds1.0-cil = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/ \ /usr/lib/mono/1.0/Mono.Data.Tds.dll" -FILES_libmono-sqlite1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*.mdb \ +FILES_libmono-sqlite1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/../.debug/ \ @@ -352,7 +352,7 @@ FILES_libmono-sqlite1.0-cil = "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/ \ /usr/lib/mono/gac/Mono.Data.SqliteClient/1.0.*/ \ /usr/lib/mono/1.0/Mono.Data.Sqlite.dll \ /usr/lib/mono/1.0/Mono.Data.SqliteClient.dll" -FILES_libmono-relaxng1.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*.mdb \ +FILES_libmono-relaxng1.0-cil-dbg += "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*.mdb \ /usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/.debug/ \ /usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/../.debug/ \ @@ -360,7 +360,7 @@ FILES_libmono-relaxng1.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/ /usr/lib/mono/1.0/Commons.Xml.Relaxng.dll*/*.mdb" FILES_libmono-relaxng1.0-cil = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/ \ /usr/lib/mono/1.0/Commons.Xml.Relaxng.dll" -FILES_libmono-dev-dbg = "/usr/lib/libmono*.a*.mdb \ +FILES_libmono-dev-dbg += "/usr/lib/libmono*.a*.mdb \ /usr/lib/libmono*.a*/*.mdb \ /usr/lib/libMono*.a*.mdb \ /usr/lib/libMono*.a*/*.mdb \ @@ -383,7 +383,7 @@ FILES_libmono-dev = "/usr/lib/libmono*.a \ /usr/lib/pkgconfig/mono.pc \ /usr/lib/pkgconfig/dotnet.pc \ /usr/include/" -FILES_libmono-accessibility1.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/1.0.*/*.mdb \ +FILES_libmono-accessibility1.0-cil-dbg += "/usr/lib/mono/gac/Accessibility/1.0.*/*.mdb \ /usr/lib/mono/gac/Accessibility/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Accessibility/1.0.*/.debug/ \ /usr/lib/mono/gac/Accessibility/1.0.*/../.debug/ \ @@ -391,13 +391,13 @@ FILES_libmono-accessibility1.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/1.0.*/ /usr/lib/mono/1.0/Accessibility.dll*/*.mdb" FILES_libmono-accessibility1.0-cil = "/usr/lib/mono/gac/Accessibility/1.0.*/ \ /usr/lib/mono/1.0/Accessibility.dll" -FILES_mono-common-dbg = "/etc/mono*.mdb \ +FILES_mono-common-dbg += "/etc/mono*.mdb \ /etc/mono*/*.mdb \ /usr/share/mono-1.0/mono/cil/cil-opcodes.xml*.mdb \ /usr/share/mono-1.0/mono/cil/cil-opcodes.xml*/*.mdb" FILES_mono-common = "/etc/mono \ /usr/share/mono-1.0/mono/cil/cil-opcodes.xml" -FILES_libmono-oracle1.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*.mdb \ +FILES_libmono-oracle1.0-cil-dbg += "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Data.OracleClient/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Data.OracleClient/1.0.*/../.debug/ \ @@ -405,7 +405,7 @@ FILES_libmono-oracle1.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/1. /usr/lib/mono/1.0/System.Data.OracleClient.dll*/*.mdb" FILES_libmono-oracle1.0-cil = "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/ \ /usr/lib/mono/1.0/System.Data.OracleClient.dll" -FILES_libmono-system-data1.0-cil-dbg = "/usr/lib/mono/gac/System.Data/1.0.*/*.mdb \ +FILES_libmono-system-data1.0-cil-dbg += "/usr/lib/mono/gac/System.Data/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Data/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Data/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Data/1.0.*/../.debug/ \ @@ -413,7 +413,7 @@ FILES_libmono-system-data1.0-cil-dbg = "/usr/lib/mono/gac/System.Data/1.0.*/*.md /usr/lib/mono/1.0/System.Data.dll*/*.mdb" FILES_libmono-system-data1.0-cil = "/usr/lib/mono/gac/System.Data/1.0.*/ \ /usr/lib/mono/1.0/System.Data.dll" -FILES_libmono-bytefx0.7.6.2-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.mdb \ +FILES_libmono-bytefx0.7.6.2-cil-dbg += "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.mdb \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*/*.mdb \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/.debug/ \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/../.debug/ \ @@ -421,7 +421,7 @@ FILES_libmono-bytefx0.7.6.2-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*. /usr/lib/mono/2.0/ByteFX.Data.dll*/*.mdb" FILES_libmono-bytefx0.7.6.2-cil = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/ \ /usr/lib/mono/2.0/ByteFX.Data.dll" -FILES_libmono0-dbg = "/usr/lib/libmono*.so.*.mdb \ +FILES_libmono0-dbg += "/usr/lib/libmono*.so.*.mdb \ /usr/lib/libmono*.so.*/*.mdb \ /usr/lib/libMonoPosixHelper.so*.mdb \ /usr/lib/libMonoPosixHelper.so*/*.mdb \ @@ -430,7 +430,7 @@ FILES_libmono0-dbg = "/usr/lib/libmono*.so.*.mdb \ FILES_libmono0 = "/usr/lib/libmono*.so.* \ /usr/lib/libMonoPosixHelper.so \ /usr/lib/libMonoSupportW.so" -FILES_libmono-sharpzip0.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*.mdb \ +FILES_libmono-sharpzip0.6-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/.debug/ \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/../.debug/ \ @@ -438,7 +438,7 @@ FILES_libmono-sharpzip0.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0 /usr/lib/mono/compat-1.0/ICSharpCode.SharpZipLib.dll*/*.mdb" FILES_libmono-sharpzip0.6-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/ \ /usr/lib/mono/compat-1.0/ICSharpCode.SharpZipLib.dll" -FILES_libmono-data-tds2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb \ +FILES_libmono-data-tds2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Tds/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Data.Tds/2.0.*/../.debug/ \ @@ -446,7 +446,7 @@ FILES_libmono-data-tds2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb /usr/lib/mono/2.0/Mono.Data.Tds.dll*/*.mdb" FILES_libmono-data-tds2.0-cil = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/ \ /usr/lib/mono/2.0/Mono.Data.Tds.dll" -FILES_libmono-system-messaging1.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/1.0.*/*.mdb \ +FILES_libmono-system-messaging1.0-cil-dbg += "/usr/lib/mono/gac/System.Messaging/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Messaging/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Messaging/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Messaging/1.0.*/../.debug/ \ @@ -454,7 +454,7 @@ FILES_libmono-system-messaging1.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/ /usr/lib/mono/1.0/System.Messaging.dll*/*.mdb" FILES_libmono-system-messaging1.0-cil = "/usr/lib/mono/gac/System.Messaging/1.0.*/ \ /usr/lib/mono/1.0/System.Messaging.dll" -FILES_libmono-npgsql1.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \ +FILES_libmono-npgsql1.0-cil-dbg += "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \ /usr/lib/mono/gac/Npgsql/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Npgsql/1.0.*/.debug/ \ /usr/lib/mono/gac/Npgsql/1.0.*/../.debug/ \ @@ -462,7 +462,7 @@ FILES_libmono-npgsql1.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \ /usr/lib/mono/1.0/Npgsql.dll*/*.mdb" FILES_libmono-npgsql1.0-cil = "/usr/lib/mono/gac/Npgsql/1.0.*/ \ /usr/lib/mono/1.0/Npgsql.dll" -FILES_libmono-security2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb \ +FILES_libmono-security2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Security/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Security/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Security/2.0.*/../.debug/ \ @@ -470,7 +470,7 @@ FILES_libmono-security2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb /usr/lib/mono/2.0/Mono.Security.dll*/*.mdb" FILES_libmono-security2.0-cil = "/usr/lib/mono/gac/Mono.Security/2.0.*/ \ /usr/lib/mono/2.0/Mono.Security.dll" -FILES_libmono-security1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb \ +FILES_libmono-security1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Security/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Security/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Security/1.0.*/../.debug/ \ @@ -478,7 +478,7 @@ FILES_libmono-security1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb /usr/lib/mono/1.0/Mono.Security.dll*/*.mdb" FILES_libmono-security1.0-cil = "/usr/lib/mono/gac/Mono.Security/1.0.*/ \ /usr/lib/mono/1.0/Mono.Security.dll" -FILES_libmono-bytefx0.7.6.1-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.mdb \ +FILES_libmono-bytefx0.7.6.1-cil-dbg += "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.mdb \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*/*.mdb \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/.debug/ \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/../.debug/ \ @@ -486,7 +486,7 @@ FILES_libmono-bytefx0.7.6.1-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*. /usr/lib/mono/1.0/ByteFX.Data.dll*/*.mdb" FILES_libmono-bytefx0.7.6.1-cil = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/ \ /usr/lib/mono/1.0/ByteFX.Data.dll" -FILES_libmono-microsoft-build2.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*.mdb \ +FILES_libmono-microsoft-build2.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*.mdb \ /usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Microsoft.Build.*/2.0.*/.debug/ \ /usr/lib/mono/gac/Microsoft.Build.*/2.0.*/../.debug/ \ @@ -494,7 +494,7 @@ FILES_libmono-microsoft-build2.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.Build.*/ /usr/lib/mono/2.0/Microsoft.Build.*.dll*/*.mdb" FILES_libmono-microsoft-build2.0-cil = "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/ \ /usr/lib/mono/2.0/Microsoft.Build.*.dll" -FILES_libmono-system-ldap1.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*.mdb \ +FILES_libmono-system-ldap1.0-cil-dbg += "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*.mdb \ /usr/lib/mono/gac/System.DirectoryServices/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.DirectoryServices/1.0.*/.debug/ \ /usr/lib/mono/gac/System.DirectoryServices/1.0.*/../.debug/ \ @@ -502,7 +502,7 @@ FILES_libmono-system-ldap1.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServic /usr/lib/mono/1.0/System.DirectoryServices.dll*/*.mdb" FILES_libmono-system-ldap1.0-cil = "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/ \ /usr/lib/mono/1.0/System.DirectoryServices.dll" -FILES_libmono-relaxng2.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*.mdb \ +FILES_libmono-relaxng2.0-cil-dbg += "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*.mdb \ /usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/.debug/ \ /usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/../.debug/ \ @@ -510,7 +510,7 @@ FILES_libmono-relaxng2.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/ /usr/lib/mono/2.0/Commons.Xml.Relaxng.dll*/*.mdb" FILES_libmono-relaxng2.0-cil = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/ \ /usr/lib/mono/2.0/Commons.Xml.Relaxng.dll" -FILES_libmono-system-ldap2.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*.mdb \ +FILES_libmono-system-ldap2.0-cil-dbg += "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*.mdb \ /usr/lib/mono/gac/System.DirectoryServices/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.DirectoryServices/2.0.*/.debug/ \ /usr/lib/mono/gac/System.DirectoryServices/2.0.*/../.debug/ \ @@ -518,7 +518,7 @@ FILES_libmono-system-ldap2.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServic /usr/lib/mono/2.0/System.DirectoryServices.dll*/*.mdb" FILES_libmono-system-ldap2.0-cil = "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/ \ /usr/lib/mono/2.0/System.DirectoryServices.dll" -FILES_libmono-system-messaging2.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/2.0.*/*.mdb \ +FILES_libmono-system-messaging2.0-cil-dbg += "/usr/lib/mono/gac/System.Messaging/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Messaging/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Messaging/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Messaging/2.0.*/../.debug/ \ @@ -526,7 +526,7 @@ FILES_libmono-system-messaging2.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/ /usr/lib/mono/2.0/System.Messaging.dll*/*.mdb" FILES_libmono-system-messaging2.0-cil = "/usr/lib/mono/gac/System.Messaging/2.0.*/ \ /usr/lib/mono/2.0/System.Messaging.dll" -FILES_libmono-sharpzip0.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*.mdb \ +FILES_libmono-sharpzip0.84-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/.debug/ \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/../.debug/ \ @@ -534,7 +534,7 @@ FILES_libmono-sharpzip0.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/ /usr/lib/mono/1.0/ICSharpCode.SharpZipLib.dll*/*.mdb" FILES_libmono-sharpzip0.84-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/ \ /usr/lib/mono/1.0/ICSharpCode.SharpZipLib.dll" -FILES_libmono-sqlite2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*.mdb \ +FILES_libmono-sqlite2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/../.debug/ \ @@ -550,7 +550,7 @@ FILES_libmono-sqlite2.0-cil = "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/ \ /usr/lib/mono/gac/Mono.Data.SqliteClient/2.0.*/ \ /usr/lib/mono/2.0/Mono.Data.Sqlite.dll \ /usr/lib/mono/2.0/Mono.Data.SqliteClient.dll" -FILES_libmono-ldap2.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*.mdb \ +FILES_libmono-ldap2.0-cil-dbg += "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*.mdb \ /usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/.debug/ \ /usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/../.debug/ \ @@ -558,7 +558,7 @@ FILES_libmono-ldap2.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/* /usr/lib/mono/2.0/Novell.Directory.Ldap.dll*/*.mdb" FILES_libmono-ldap2.0-cil = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/ \ /usr/lib/mono/2.0/Novell.Directory.Ldap.dll" -FILES_libmono-npgsql2.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \ +FILES_libmono-npgsql2.0-cil-dbg += "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \ /usr/lib/mono/gac/Npgsql/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Npgsql/2.0.*/.debug/ \ /usr/lib/mono/gac/Npgsql/2.0.*/../.debug/ \ @@ -566,7 +566,7 @@ FILES_libmono-npgsql2.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \ /usr/lib/mono/2.0/Npgsql.dll*/*.mdb" FILES_libmono-npgsql2.0-cil = "/usr/lib/mono/gac/Npgsql/2.0.*/ \ /usr/lib/mono/2.0/Npgsql.dll" -FILES_libmono-system-runtime1.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/1.0.*/*.mdb \ +FILES_libmono-system-runtime1.0-cil-dbg += "/usr/lib/mono/gac/System.Runtime.*/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Runtime.*/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Runtime.*/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Runtime.*/1.0.*/../.debug/ \ @@ -574,7 +574,7 @@ FILES_libmono-system-runtime1.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/1. /usr/lib/mono/1.0/System.Runtime.*.dll*/*.mdb" FILES_libmono-system-runtime1.0-cil = "/usr/lib/mono/gac/System.Runtime.*/1.0.*/ \ /usr/lib/mono/1.0/System.Runtime.*.dll" -FILES_libmono-oracle2.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*.mdb \ +FILES_libmono-oracle2.0-cil-dbg += "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Data.OracleClient/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Data.OracleClient/2.0.*/../.debug/ \ @@ -582,7 +582,7 @@ FILES_libmono-oracle2.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/2. /usr/lib/mono/2.0/System.Data.OracleClient.dll*/*.mdb" FILES_libmono-oracle2.0-cil = "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/ \ /usr/lib/mono/2.0/System.Data.OracleClient.dll" -FILES_libmono-c5-1.0-cil-dbg = "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \ +FILES_libmono-c5-1.0-cil-dbg += "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.C5/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.C5/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.C5/1.0.*/../.debug/ \ @@ -590,7 +590,7 @@ FILES_libmono-c5-1.0-cil-dbg = "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \ /usr/lib/mono/2.0/Mono.C5.dll*/*.mdb" FILES_libmono-c5-1.0-cil = "/usr/lib/mono/gac/Mono.C5/1.0.*/ \ /usr/lib/mono/2.0/Mono.C5.dll" -FILES_libmono-sharpzip2.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*.mdb \ +FILES_libmono-sharpzip2.6-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/.debug/ \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/../.debug/ \ @@ -598,7 +598,7 @@ FILES_libmono-sharpzip2.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2 /usr/lib/mono/compat-2.0/ICSharpCode.SharpZipLib.dll*/*.mdb" FILES_libmono-sharpzip2.6-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/ \ /usr/lib/mono/compat-2.0/ICSharpCode.SharpZipLib.dll" -FILES_libmono-cairo2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \ +FILES_libmono-cairo2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Cairo/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Cairo/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Cairo/2.0.*/../.debug/ \ @@ -606,7 +606,7 @@ FILES_libmono-cairo2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \ /usr/lib/mono/2.0/Mono.Cairo.dll*/*.mdb" FILES_libmono-cairo2.0-cil = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/ \ /usr/lib/mono/2.0/Mono.Cairo.dll" -FILES_libmono-peapi2.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \ +FILES_libmono-peapi2.0-cil-dbg += "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \ /usr/lib/mono/gac/PEAPI/2.0.*/*/*.mdb \ /usr/lib/mono/gac/PEAPI/2.0.*/.debug/ \ /usr/lib/mono/gac/PEAPI/2.0.*/../.debug/ \ @@ -614,7 +614,7 @@ FILES_libmono-peapi2.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \ /usr/lib/mono/2.0/PEAPI.dll*/*.mdb" FILES_libmono-peapi2.0-cil = "/usr/lib/mono/gac/PEAPI/2.0.*/ \ /usr/lib/mono/2.0/PEAPI.dll" -FILES_mono-mcs-dbg = "/usr/bin/*.mdb \ +FILES_mono-mcs-dbg += "/usr/bin/*.mdb \ /usr/bin/*/*.mdb \ /usr/bin/.debug/ \ /usr/bin/../.debug/ \ @@ -622,7 +622,7 @@ FILES_mono-mcs-dbg = "/usr/bin/*.mdb \ /usr/lib/mono/1.0/*.exe*/*.mdb" FILES_mono-mcs = "/usr/bin/ \ /usr/lib/mono/1.0/*.exe*" -FILES_libmono-system1.0-cil-dbg = "/usr/lib/mono/gac/System*/1.0.*/*.mdb \ +FILES_libmono-system1.0-cil-dbg += "/usr/lib/mono/gac/System*/1.0.*/*.mdb \ /usr/lib/mono/gac/System*/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System*/1.0.*/.debug/ \ /usr/lib/mono/gac/System*/1.0.*/../.debug/ \ @@ -638,7 +638,7 @@ FILES_libmono-system1.0-cil = "/usr/lib/mono/gac/System*/1.0.*/ \ /usr/lib/mono/gac/CustomMarshalers/1.0.*/ \ /usr/lib/mono/1.0/System*.dll \ /usr/lib/mono/1.0/CustomMarshalers.dll*" -FILES_libmono-system2.0-cil-dbg = "/usr/lib/mono/gac/System*/2.0.*/*.mdb \ +FILES_libmono-system2.0-cil-dbg += "/usr/lib/mono/gac/System*/2.0.*/*.mdb \ /usr/lib/mono/gac/System*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System*/2.0.*/.debug/ \ /usr/lib/mono/gac/System*/2.0.*/../.debug/ \ @@ -654,7 +654,7 @@ FILES_libmono-system2.0-cil = "/usr/lib/mono/gac/System*/2.0.*/ \ /usr/lib/mono/gac/CustomMarshalers/2.0.*/ \ /usr/lib/mono/2.0/System*.dll \ /usr/lib/mono/2.0/CustomMarshalers.dll*" -FILES_libmono1.0-cil-dbg = "/usr/lib/mono/gac/Mono.*/1.0.*/*.mdb \ +FILES_libmono1.0-cil-dbg += "/usr/lib/mono/gac/Mono.*/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.*/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.*/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.*/1.0.*/../.debug/ \ @@ -673,7 +673,7 @@ FILES_libmono1.0-cil = "/usr/lib/mono/gac/Mono.*/1.0.*/ \ /usr/lib/mono/gac/mono-service/1.0.*/ \ /usr/lib/mono/1.0/Mono.*.dll \ /usr/lib/mono/1.0/OpenSystem.C.dll" -FILES_libmono2.0-cil-dbg = "/usr/lib/mono/gac/Mono.*/2.0.*/*.mdb \ +FILES_libmono2.0-cil-dbg += "/usr/lib/mono/gac/Mono.*/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.*/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.*/2.0.*/../.debug/ \ @@ -817,22 +817,22 @@ PACKAGES = "mono-jit-dbg \ libmono2.0-cil" # This is a generated file, please do not edit directly # Use collect-files.py instead. -- Henryk -FILES_mono-jit-dbg = "/usr/bin/mono*.mdb \ +FILES_mono-jit-dbg += "/usr/bin/mono*.mdb \ /usr/bin/mono*/*.mdb" FILES_mono-jit = "/usr/bin/mono" -FILES_mono-gac-dbg = "/usr/bin/gacutil*.mdb \ +FILES_mono-gac-dbg += "/usr/bin/gacutil*.mdb \ /usr/bin/gacutil*/*.mdb \ /usr/lib/mono/1.0/gacutil.exe*.mdb \ /usr/lib/mono/1.0/gacutil.exe*/*.mdb" FILES_mono-gac = "/usr/bin/gacutil \ /usr/lib/mono/1.0/gacutil.exe" -FILES_mono-mjs-dbg = "/usr/bin/mjs*.mdb \ +FILES_mono-mjs-dbg += "/usr/bin/mjs*.mdb \ /usr/bin/mjs*/*.mdb \ /usr/lib/mono/1.0/mjs.exe*.mdb \ /usr/lib/mono/1.0/mjs.exe*/*.mdb" FILES_mono-mjs = "/usr/bin/mjs \ /usr/lib/mono/1.0/mjs.exe*" -FILES_mono-gmcs-dbg = "/usr/bin/gmcs*.mdb \ +FILES_mono-gmcs-dbg += "/usr/bin/gmcs*.mdb \ /usr/bin/gmcs*/*.mdb \ /usr/bin/wsdl2*.mdb \ /usr/bin/wsdl2*/*.mdb \ @@ -894,7 +894,7 @@ FILES_mono-gmcs = "/usr/bin/gmcs \ /usr/lib/mono/2.0/Microsoft.Common.tasks \ /usr/lib/mono/2.0/Microsoft.Common.targets \ /usr/lib/mono/2.0/Microsoft.VisualBasic.targets" -FILES_mono-utils-dbg = "/usr/bin/pedump*.mdb \ +FILES_mono-utils-dbg += "/usr/bin/pedump*.mdb \ /usr/bin/pedump*/*.mdb \ /usr/bin/monodis*.mdb \ /usr/bin/monodis*/*.mdb \ @@ -909,7 +909,7 @@ FILES_mono-utils = "/usr/bin/pedump \ /usr/bin/monograph \ /usr/bin/mono-find-provides \ /usr/bin/mono-find-requires" -FILES_libmono-peapi1.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \ +FILES_libmono-peapi1.0-cil-dbg += "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \ /usr/lib/mono/gac/PEAPI/1.0.*/*/*.mdb \ /usr/lib/mono/gac/PEAPI/1.0.*/.debug/ \ /usr/lib/mono/gac/PEAPI/1.0.*/../.debug/ \ @@ -917,7 +917,7 @@ FILES_libmono-peapi1.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \ /usr/lib/mono/1.0/PEAPI.dll*/*.mdb" FILES_libmono-peapi1.0-cil = "/usr/lib/mono/gac/PEAPI/1.0.*/ \ /usr/lib/mono/1.0/PEAPI.dll" -FILES_libmono-cairo1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \ +FILES_libmono-cairo1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Cairo/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Cairo/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Cairo/1.0.*/../.debug/ \ @@ -928,7 +928,7 @@ FILES_libmono-cairo1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \ FILES_libmono-cairo1.0-cil = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/ \ /usr/lib/mono/1.0/Mono.Cairo.dll \ /usr/lib/pkgconfig/mono-cairo.pc" -FILES_libmono-system-web2.0-cil-dbg = "/usr/lib/mono/gac/System.Web/2.0.*/*.mdb \ +FILES_libmono-system-web2.0-cil-dbg += "/usr/lib/mono/gac/System.Web/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Web/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Web/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Web/2.0.*/../.debug/ \ @@ -944,7 +944,7 @@ FILES_libmono-system-web2.0-cil = "/usr/lib/mono/gac/System.Web/2.0.*/ \ /usr/lib/mono/gac/System.Web.Services/2.0.*/ \ /usr/lib/mono/2.0/System.Web.dll \ /usr/lib/mono/2.0/System.Web.Services.dll" -FILES_libmono-accessibility2.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/2.0.*/*.mdb \ +FILES_libmono-accessibility2.0-cil-dbg += "/usr/lib/mono/gac/Accessibility/2.0.*/*.mdb \ /usr/lib/mono/gac/Accessibility/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Accessibility/2.0.*/.debug/ \ /usr/lib/mono/gac/Accessibility/2.0.*/../.debug/ \ @@ -952,7 +952,7 @@ FILES_libmono-accessibility2.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/2.0.*/ /usr/lib/mono/2.0/Accessibility.dll*/*.mdb" FILES_libmono-accessibility2.0-cil = "/usr/lib/mono/gac/Accessibility/2.0.*/ \ /usr/lib/mono/2.0/Accessibility.dll" -FILES_libmono-microsoft7.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*.mdb \ +FILES_libmono-microsoft7.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*.mdb \ /usr/lib/mono/gac/Microsoft.JScript/7.0.*/*/*.mdb \ /usr/lib/mono/gac/Microsoft.JScript/7.0.*/.debug/ \ /usr/lib/mono/gac/Microsoft.JScript/7.0.*/../.debug/ \ @@ -976,7 +976,7 @@ FILES_libmono-microsoft7.0-cil = "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/ \ /usr/lib/mono/1.0/Microsoft.JScript.dll \ /usr/lib/mono/1.0/Microsoft.VisualC.dll \ /usr/lib/mono/1.0/Microsoft.Vsa.dll" -FILES_libmono-winforms2.0-cil-dbg = "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*.mdb \ +FILES_libmono-winforms2.0-cil-dbg += "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Windows.Forms/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Windows.Forms/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Windows.Forms/2.0.*/../.debug/ \ @@ -1000,7 +1000,7 @@ FILES_libmono-winforms2.0-cil = "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/ \ /usr/lib/mono/2.0/System.Windows.Forms.dll \ /usr/lib/mono/2.0/System.Drawing.Design.dll \ /usr/lib/mono/2.0/System.Design.dll" -FILES_libmono-ldap1.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*.mdb \ +FILES_libmono-ldap1.0-cil-dbg += "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*.mdb \ /usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/.debug/ \ /usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/../.debug/ \ @@ -1008,7 +1008,7 @@ FILES_libmono-ldap1.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/* /usr/lib/mono/1.0/Novell.Directory.Ldap.dll*/*.mdb" FILES_libmono-ldap1.0-cil = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/ \ /usr/lib/mono/1.0/Novell.Directory.Ldap.dll" -FILES_libmono-sharpzip2.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*.mdb \ +FILES_libmono-sharpzip2.84-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/.debug/ \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/../.debug/ \ @@ -1016,7 +1016,7 @@ FILES_libmono-sharpzip2.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/ /usr/lib/mono/2.0/ICSharpCode.SharpZipLib.dll*/*.mdb" FILES_libmono-sharpzip2.84-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/ \ /usr/lib/mono/2.0/ICSharpCode.SharpZipLib.dll" -FILES_libmono-system-data2.0-cil-dbg = "/usr/lib/mono/gac/System.Data/2.0.*/*.mdb \ +FILES_libmono-system-data2.0-cil-dbg += "/usr/lib/mono/gac/System.Data/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Data/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Data/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Data/2.0.*/../.debug/ \ @@ -1024,7 +1024,7 @@ FILES_libmono-system-data2.0-cil-dbg = "/usr/lib/mono/gac/System.Data/2.0.*/*.md /usr/lib/mono/2.0/System.Data.dll*/*.mdb" FILES_libmono-system-data2.0-cil = "/usr/lib/mono/gac/System.Data/2.0.*/ \ /usr/lib/mono/2.0/System.Data.dll" -FILES_libmono-corlib2.0-cil-dbg = "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \ +FILES_libmono-corlib2.0-cil-dbg += "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \ /usr/lib/mono/gac/I18N*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/I18N*/2.0.*/.debug/ \ /usr/lib/mono/gac/I18N*/2.0.*/../.debug/ \ @@ -1035,7 +1035,7 @@ FILES_libmono-corlib2.0-cil-dbg = "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \ FILES_libmono-corlib2.0-cil = "/usr/lib/mono/gac/I18N*/2.0.*/ \ /usr/lib/mono/2.0/I18N*.dll \ /usr/lib/mono/2.0/mscorlib.dll*" -FILES_libmono-winforms1.0-cil-dbg = "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*.mdb \ +FILES_libmono-winforms1.0-cil-dbg += "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Windows.Forms/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Windows.Forms/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Windows.Forms/1.0.*/../.debug/ \ @@ -1059,7 +1059,7 @@ FILES_libmono-winforms1.0-cil = "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/ \ /usr/lib/mono/1.0/System.Windows.Forms.dll \ /usr/lib/mono/1.0/System.Drawing.Design.dll \ /usr/lib/mono/1.0/System.Design.dll" -FILES_libmono-microsoft8.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*.mdb \ +FILES_libmono-microsoft8.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*.mdb \ /usr/lib/mono/gac/Microsoft.JScript/8.0.*/*/*.mdb \ /usr/lib/mono/gac/Microsoft.JScript/8.0.*/.debug/ \ /usr/lib/mono/gac/Microsoft.JScript/8.0.*/../.debug/ \ @@ -1083,7 +1083,7 @@ FILES_libmono-microsoft8.0-cil = "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/ \ /usr/lib/mono/2.0/Microsoft.JScript.dll \ /usr/lib/mono/2.0/Microsoft.VisualC.dll \ /usr/lib/mono/2.0/Microsoft.Vsa.dll" -FILES_libmono-corlib1.0-cil-dbg = "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \ +FILES_libmono-corlib1.0-cil-dbg += "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \ /usr/lib/mono/gac/I18N*/1.0.*/*/*.mdb \ /usr/lib/mono/gac/I18N*/1.0.*/.debug/ \ /usr/lib/mono/gac/I18N*/1.0.*/../.debug/ \ @@ -1094,7 +1094,7 @@ FILES_libmono-corlib1.0-cil-dbg = "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \ FILES_libmono-corlib1.0-cil = "/usr/lib/mono/gac/I18N*/1.0.*/ \ /usr/lib/mono/1.0/I18N*.dll \ /usr/lib/mono/1.0/mscorlib.dll*" -FILES_libmono-system-web1.0-cil-dbg = "/usr/lib/mono/gac/System.Web/1.0.*/*.mdb \ +FILES_libmono-system-web1.0-cil-dbg += "/usr/lib/mono/gac/System.Web/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Web/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Web/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Web/1.0.*/../.debug/ \ @@ -1110,7 +1110,7 @@ FILES_libmono-system-web1.0-cil = "/usr/lib/mono/gac/System.Web/1.0.*/ \ /usr/lib/mono/gac/System.Web.Services/1.0.*/ \ /usr/lib/mono/1.0/System.Web.dll \ /usr/lib/mono/1.0/System.Web.Services.dll" -FILES_libmono-system-runtime2.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/2.0.*/*.mdb \ +FILES_libmono-system-runtime2.0-cil-dbg += "/usr/lib/mono/gac/System.Runtime.*/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Runtime.*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Runtime.*/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Runtime.*/2.0.*/../.debug/ \ @@ -1118,7 +1118,7 @@ FILES_libmono-system-runtime2.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/2. /usr/lib/mono/2.0/System.Runtime.*.dll*/*.mdb" FILES_libmono-system-runtime2.0-cil = "/usr/lib/mono/gac/System.Runtime.*/2.0.*/ \ /usr/lib/mono/2.0/System.Runtime.*.dll" -FILES_libmono-cscompmgd8.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \ +FILES_libmono-cscompmgd8.0-cil-dbg += "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \ /usr/lib/mono/gac/cscompmgd/8.0.*/*/*.mdb \ /usr/lib/mono/gac/cscompmgd/8.0.*/.debug/ \ /usr/lib/mono/gac/cscompmgd/8.0.*/../.debug/ \ @@ -1126,7 +1126,7 @@ FILES_libmono-cscompmgd8.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \ /usr/lib/mono/2.0/cscompmgd.dll*/*.mdb" FILES_libmono-cscompmgd8.0-cil = "/usr/lib/mono/gac/cscompmgd/8.0.*/ \ /usr/lib/mono/2.0/cscompmgd.dll" -FILES_libmono-cscompmgd7.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \ +FILES_libmono-cscompmgd7.0-cil-dbg += "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \ /usr/lib/mono/gac/cscompmgd/7.0.*/*/*.mdb \ /usr/lib/mono/gac/cscompmgd/7.0.*/.debug/ \ /usr/lib/mono/gac/cscompmgd/7.0.*/../.debug/ \ @@ -1134,7 +1134,7 @@ FILES_libmono-cscompmgd7.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \ /usr/lib/mono/1.0/cscompmgd.dll*/*.mdb" FILES_libmono-cscompmgd7.0-cil = "/usr/lib/mono/gac/cscompmgd/7.0.*/ \ /usr/lib/mono/1.0/cscompmgd.dll" -FILES_libmono-firebirdsql1.7-cil-dbg = "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*.mdb \ +FILES_libmono-firebirdsql1.7-cil-dbg += "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*.mdb \ /usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*/*.mdb \ /usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/.debug/ \ /usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/../.debug/ \ @@ -1142,10 +1142,10 @@ FILES_libmono-firebirdsql1.7-cil-dbg = "/usr/lib/mono/gac/FirebirdSql.Data.Fireb /usr/lib/mono/1.0/FirebirdSql.Data.Firebird.dll*/*.mdb" FILES_libmono-firebirdsql1.7-cil = "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/ \ /usr/lib/mono/1.0/FirebirdSql.Data.Firebird.dll" -FILES_mono-jay-dbg = "/usr/bin/jay*.mdb \ +FILES_mono-jay-dbg += "/usr/bin/jay*.mdb \ /usr/bin/jay*/*.mdb" FILES_mono-jay = "/usr/bin/jay" -FILES_libmono-data-tds1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb \ +FILES_libmono-data-tds1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Tds/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Data.Tds/1.0.*/../.debug/ \ @@ -1153,7 +1153,7 @@ FILES_libmono-data-tds1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb /usr/lib/mono/1.0/Mono.Data.Tds.dll*/*.mdb" FILES_libmono-data-tds1.0-cil = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/ \ /usr/lib/mono/1.0/Mono.Data.Tds.dll" -FILES_libmono-sqlite1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*.mdb \ +FILES_libmono-sqlite1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/../.debug/ \ @@ -1169,7 +1169,7 @@ FILES_libmono-sqlite1.0-cil = "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/ \ /usr/lib/mono/gac/Mono.Data.SqliteClient/1.0.*/ \ /usr/lib/mono/1.0/Mono.Data.Sqlite.dll \ /usr/lib/mono/1.0/Mono.Data.SqliteClient.dll" -FILES_libmono-relaxng1.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*.mdb \ +FILES_libmono-relaxng1.0-cil-dbg += "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*.mdb \ /usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/.debug/ \ /usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/../.debug/ \ @@ -1177,7 +1177,7 @@ FILES_libmono-relaxng1.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/ /usr/lib/mono/1.0/Commons.Xml.Relaxng.dll*/*.mdb" FILES_libmono-relaxng1.0-cil = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/ \ /usr/lib/mono/1.0/Commons.Xml.Relaxng.dll" -FILES_libmono-dev-dbg = "/usr/lib/libmono*.a*.mdb \ +FILES_libmono-dev-dbg += "/usr/lib/libmono*.a*.mdb \ /usr/lib/libmono*.a*/*.mdb \ /usr/lib/libMono*.a*.mdb \ /usr/lib/libMono*.a*/*.mdb \ @@ -1200,7 +1200,7 @@ FILES_libmono-dev = "/usr/lib/libmono*.a \ /usr/lib/pkgconfig/mono.pc \ /usr/lib/pkgconfig/dotnet.pc \ /usr/include/" -FILES_libmono-accessibility1.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/1.0.*/*.mdb \ +FILES_libmono-accessibility1.0-cil-dbg += "/usr/lib/mono/gac/Accessibility/1.0.*/*.mdb \ /usr/lib/mono/gac/Accessibility/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Accessibility/1.0.*/.debug/ \ /usr/lib/mono/gac/Accessibility/1.0.*/../.debug/ \ @@ -1208,13 +1208,13 @@ FILES_libmono-accessibility1.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/1.0.*/ /usr/lib/mono/1.0/Accessibility.dll*/*.mdb" FILES_libmono-accessibility1.0-cil = "/usr/lib/mono/gac/Accessibility/1.0.*/ \ /usr/lib/mono/1.0/Accessibility.dll" -FILES_mono-common-dbg = "/etc/mono*.mdb \ +FILES_mono-common-dbg += "/etc/mono*.mdb \ /etc/mono*/*.mdb \ /usr/share/mono-1.0/mono/cil/cil-opcodes.xml*.mdb \ /usr/share/mono-1.0/mono/cil/cil-opcodes.xml*/*.mdb" FILES_mono-common = "/etc/mono \ /usr/share/mono-1.0/mono/cil/cil-opcodes.xml" -FILES_libmono-oracle1.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*.mdb \ +FILES_libmono-oracle1.0-cil-dbg += "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Data.OracleClient/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Data.OracleClient/1.0.*/../.debug/ \ @@ -1222,7 +1222,7 @@ FILES_libmono-oracle1.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/1. /usr/lib/mono/1.0/System.Data.OracleClient.dll*/*.mdb" FILES_libmono-oracle1.0-cil = "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/ \ /usr/lib/mono/1.0/System.Data.OracleClient.dll" -FILES_libmono-system-data1.0-cil-dbg = "/usr/lib/mono/gac/System.Data/1.0.*/*.mdb \ +FILES_libmono-system-data1.0-cil-dbg += "/usr/lib/mono/gac/System.Data/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Data/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Data/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Data/1.0.*/../.debug/ \ @@ -1230,7 +1230,7 @@ FILES_libmono-system-data1.0-cil-dbg = "/usr/lib/mono/gac/System.Data/1.0.*/*.md /usr/lib/mono/1.0/System.Data.dll*/*.mdb" FILES_libmono-system-data1.0-cil = "/usr/lib/mono/gac/System.Data/1.0.*/ \ /usr/lib/mono/1.0/System.Data.dll" -FILES_libmono-bytefx0.7.6.2-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.mdb \ +FILES_libmono-bytefx0.7.6.2-cil-dbg += "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.mdb \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*/*.mdb \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/.debug/ \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/../.debug/ \ @@ -1238,7 +1238,7 @@ FILES_libmono-bytefx0.7.6.2-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*. /usr/lib/mono/2.0/ByteFX.Data.dll*/*.mdb" FILES_libmono-bytefx0.7.6.2-cil = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/ \ /usr/lib/mono/2.0/ByteFX.Data.dll" -FILES_libmono0-dbg = "/usr/lib/libmono*.so.*.mdb \ +FILES_libmono0-dbg += "/usr/lib/libmono*.so.*.mdb \ /usr/lib/libmono*.so.*/*.mdb \ /usr/lib/libMonoPosixHelper.so*.mdb \ /usr/lib/libMonoPosixHelper.so*/*.mdb \ @@ -1247,7 +1247,7 @@ FILES_libmono0-dbg = "/usr/lib/libmono*.so.*.mdb \ FILES_libmono0 = "/usr/lib/libmono*.so.* \ /usr/lib/libMonoPosixHelper.so \ /usr/lib/libMonoSupportW.so" -FILES_libmono-sharpzip0.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*.mdb \ +FILES_libmono-sharpzip0.6-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/.debug/ \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/../.debug/ \ @@ -1255,7 +1255,7 @@ FILES_libmono-sharpzip0.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0 /usr/lib/mono/compat-1.0/ICSharpCode.SharpZipLib.dll*/*.mdb" FILES_libmono-sharpzip0.6-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/ \ /usr/lib/mono/compat-1.0/ICSharpCode.SharpZipLib.dll" -FILES_libmono-data-tds2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb \ +FILES_libmono-data-tds2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Tds/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Data.Tds/2.0.*/../.debug/ \ @@ -1263,7 +1263,7 @@ FILES_libmono-data-tds2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb /usr/lib/mono/2.0/Mono.Data.Tds.dll*/*.mdb" FILES_libmono-data-tds2.0-cil = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/ \ /usr/lib/mono/2.0/Mono.Data.Tds.dll" -FILES_libmono-system-messaging1.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/1.0.*/*.mdb \ +FILES_libmono-system-messaging1.0-cil-dbg += "/usr/lib/mono/gac/System.Messaging/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Messaging/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Messaging/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Messaging/1.0.*/../.debug/ \ @@ -1271,7 +1271,7 @@ FILES_libmono-system-messaging1.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/ /usr/lib/mono/1.0/System.Messaging.dll*/*.mdb" FILES_libmono-system-messaging1.0-cil = "/usr/lib/mono/gac/System.Messaging/1.0.*/ \ /usr/lib/mono/1.0/System.Messaging.dll" -FILES_libmono-npgsql1.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \ +FILES_libmono-npgsql1.0-cil-dbg += "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \ /usr/lib/mono/gac/Npgsql/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Npgsql/1.0.*/.debug/ \ /usr/lib/mono/gac/Npgsql/1.0.*/../.debug/ \ @@ -1279,7 +1279,7 @@ FILES_libmono-npgsql1.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \ /usr/lib/mono/1.0/Npgsql.dll*/*.mdb" FILES_libmono-npgsql1.0-cil = "/usr/lib/mono/gac/Npgsql/1.0.*/ \ /usr/lib/mono/1.0/Npgsql.dll" -FILES_libmono-security2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb \ +FILES_libmono-security2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Security/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Security/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Security/2.0.*/../.debug/ \ @@ -1287,7 +1287,7 @@ FILES_libmono-security2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb /usr/lib/mono/2.0/Mono.Security.dll*/*.mdb" FILES_libmono-security2.0-cil = "/usr/lib/mono/gac/Mono.Security/2.0.*/ \ /usr/lib/mono/2.0/Mono.Security.dll" -FILES_libmono-security1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb \ +FILES_libmono-security1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Security/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Security/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Security/1.0.*/../.debug/ \ @@ -1295,7 +1295,7 @@ FILES_libmono-security1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb /usr/lib/mono/1.0/Mono.Security.dll*/*.mdb" FILES_libmono-security1.0-cil = "/usr/lib/mono/gac/Mono.Security/1.0.*/ \ /usr/lib/mono/1.0/Mono.Security.dll" -FILES_libmono-bytefx0.7.6.1-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.mdb \ +FILES_libmono-bytefx0.7.6.1-cil-dbg += "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.mdb \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*/*.mdb \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/.debug/ \ /usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/../.debug/ \ @@ -1303,7 +1303,7 @@ FILES_libmono-bytefx0.7.6.1-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*. /usr/lib/mono/1.0/ByteFX.Data.dll*/*.mdb" FILES_libmono-bytefx0.7.6.1-cil = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/ \ /usr/lib/mono/1.0/ByteFX.Data.dll" -FILES_libmono-microsoft-build2.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*.mdb \ +FILES_libmono-microsoft-build2.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*.mdb \ /usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Microsoft.Build.*/2.0.*/.debug/ \ /usr/lib/mono/gac/Microsoft.Build.*/2.0.*/../.debug/ \ @@ -1311,7 +1311,7 @@ FILES_libmono-microsoft-build2.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.Build.*/ /usr/lib/mono/2.0/Microsoft.Build.*.dll*/*.mdb" FILES_libmono-microsoft-build2.0-cil = "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/ \ /usr/lib/mono/2.0/Microsoft.Build.*.dll" -FILES_libmono-system-ldap1.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*.mdb \ +FILES_libmono-system-ldap1.0-cil-dbg += "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*.mdb \ /usr/lib/mono/gac/System.DirectoryServices/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.DirectoryServices/1.0.*/.debug/ \ /usr/lib/mono/gac/System.DirectoryServices/1.0.*/../.debug/ \ @@ -1319,7 +1319,7 @@ FILES_libmono-system-ldap1.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServic /usr/lib/mono/1.0/System.DirectoryServices.dll*/*.mdb" FILES_libmono-system-ldap1.0-cil = "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/ \ /usr/lib/mono/1.0/System.DirectoryServices.dll" -FILES_libmono-relaxng2.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*.mdb \ +FILES_libmono-relaxng2.0-cil-dbg += "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*.mdb \ /usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/.debug/ \ /usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/../.debug/ \ @@ -1327,7 +1327,7 @@ FILES_libmono-relaxng2.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/ /usr/lib/mono/2.0/Commons.Xml.Relaxng.dll*/*.mdb" FILES_libmono-relaxng2.0-cil = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/ \ /usr/lib/mono/2.0/Commons.Xml.Relaxng.dll" -FILES_libmono-system-ldap2.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*.mdb \ +FILES_libmono-system-ldap2.0-cil-dbg += "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*.mdb \ /usr/lib/mono/gac/System.DirectoryServices/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.DirectoryServices/2.0.*/.debug/ \ /usr/lib/mono/gac/System.DirectoryServices/2.0.*/../.debug/ \ @@ -1335,7 +1335,7 @@ FILES_libmono-system-ldap2.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServic /usr/lib/mono/2.0/System.DirectoryServices.dll*/*.mdb" FILES_libmono-system-ldap2.0-cil = "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/ \ /usr/lib/mono/2.0/System.DirectoryServices.dll" -FILES_libmono-system-messaging2.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/2.0.*/*.mdb \ +FILES_libmono-system-messaging2.0-cil-dbg += "/usr/lib/mono/gac/System.Messaging/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Messaging/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Messaging/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Messaging/2.0.*/../.debug/ \ @@ -1343,7 +1343,7 @@ FILES_libmono-system-messaging2.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/ /usr/lib/mono/2.0/System.Messaging.dll*/*.mdb" FILES_libmono-system-messaging2.0-cil = "/usr/lib/mono/gac/System.Messaging/2.0.*/ \ /usr/lib/mono/2.0/System.Messaging.dll" -FILES_libmono-sharpzip0.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*.mdb \ +FILES_libmono-sharpzip0.84-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/.debug/ \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/../.debug/ \ @@ -1351,7 +1351,7 @@ FILES_libmono-sharpzip0.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/ /usr/lib/mono/1.0/ICSharpCode.SharpZipLib.dll*/*.mdb" FILES_libmono-sharpzip0.84-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/ \ /usr/lib/mono/1.0/ICSharpCode.SharpZipLib.dll" -FILES_libmono-sqlite2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*.mdb \ +FILES_libmono-sqlite2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/../.debug/ \ @@ -1367,7 +1367,7 @@ FILES_libmono-sqlite2.0-cil = "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/ \ /usr/lib/mono/gac/Mono.Data.SqliteClient/2.0.*/ \ /usr/lib/mono/2.0/Mono.Data.Sqlite.dll \ /usr/lib/mono/2.0/Mono.Data.SqliteClient.dll" -FILES_libmono-ldap2.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*.mdb \ +FILES_libmono-ldap2.0-cil-dbg += "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*.mdb \ /usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/.debug/ \ /usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/../.debug/ \ @@ -1375,7 +1375,7 @@ FILES_libmono-ldap2.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/* /usr/lib/mono/2.0/Novell.Directory.Ldap.dll*/*.mdb" FILES_libmono-ldap2.0-cil = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/ \ /usr/lib/mono/2.0/Novell.Directory.Ldap.dll" -FILES_libmono-npgsql2.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \ +FILES_libmono-npgsql2.0-cil-dbg += "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \ /usr/lib/mono/gac/Npgsql/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Npgsql/2.0.*/.debug/ \ /usr/lib/mono/gac/Npgsql/2.0.*/../.debug/ \ @@ -1383,7 +1383,7 @@ FILES_libmono-npgsql2.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \ /usr/lib/mono/2.0/Npgsql.dll*/*.mdb" FILES_libmono-npgsql2.0-cil = "/usr/lib/mono/gac/Npgsql/2.0.*/ \ /usr/lib/mono/2.0/Npgsql.dll" -FILES_libmono-system-runtime1.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/1.0.*/*.mdb \ +FILES_libmono-system-runtime1.0-cil-dbg += "/usr/lib/mono/gac/System.Runtime.*/1.0.*/*.mdb \ /usr/lib/mono/gac/System.Runtime.*/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Runtime.*/1.0.*/.debug/ \ /usr/lib/mono/gac/System.Runtime.*/1.0.*/../.debug/ \ @@ -1391,7 +1391,7 @@ FILES_libmono-system-runtime1.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/1. /usr/lib/mono/1.0/System.Runtime.*.dll*/*.mdb" FILES_libmono-system-runtime1.0-cil = "/usr/lib/mono/gac/System.Runtime.*/1.0.*/ \ /usr/lib/mono/1.0/System.Runtime.*.dll" -FILES_libmono-oracle2.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*.mdb \ +FILES_libmono-oracle2.0-cil-dbg += "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*.mdb \ /usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System.Data.OracleClient/2.0.*/.debug/ \ /usr/lib/mono/gac/System.Data.OracleClient/2.0.*/../.debug/ \ @@ -1399,7 +1399,7 @@ FILES_libmono-oracle2.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/2. /usr/lib/mono/2.0/System.Data.OracleClient.dll*/*.mdb" FILES_libmono-oracle2.0-cil = "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/ \ /usr/lib/mono/2.0/System.Data.OracleClient.dll" -FILES_libmono-c5-1.0-cil-dbg = "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \ +FILES_libmono-c5-1.0-cil-dbg += "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.C5/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.C5/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.C5/1.0.*/../.debug/ \ @@ -1407,7 +1407,7 @@ FILES_libmono-c5-1.0-cil-dbg = "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \ /usr/lib/mono/2.0/Mono.C5.dll*/*.mdb" FILES_libmono-c5-1.0-cil = "/usr/lib/mono/gac/Mono.C5/1.0.*/ \ /usr/lib/mono/2.0/Mono.C5.dll" -FILES_libmono-sharpzip2.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*.mdb \ +FILES_libmono-sharpzip2.6-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*/*.mdb \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/.debug/ \ /usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/../.debug/ \ @@ -1415,7 +1415,7 @@ FILES_libmono-sharpzip2.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2 /usr/lib/mono/compat-2.0/ICSharpCode.SharpZipLib.dll*/*.mdb" FILES_libmono-sharpzip2.6-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/ \ /usr/lib/mono/compat-2.0/ICSharpCode.SharpZipLib.dll" -FILES_libmono-cairo2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \ +FILES_libmono-cairo2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.Cairo/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.Cairo/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.Cairo/2.0.*/../.debug/ \ @@ -1423,7 +1423,7 @@ FILES_libmono-cairo2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \ /usr/lib/mono/2.0/Mono.Cairo.dll*/*.mdb" FILES_libmono-cairo2.0-cil = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/ \ /usr/lib/mono/2.0/Mono.Cairo.dll" -FILES_libmono-peapi2.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \ +FILES_libmono-peapi2.0-cil-dbg += "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \ /usr/lib/mono/gac/PEAPI/2.0.*/*/*.mdb \ /usr/lib/mono/gac/PEAPI/2.0.*/.debug/ \ /usr/lib/mono/gac/PEAPI/2.0.*/../.debug/ \ @@ -1431,7 +1431,7 @@ FILES_libmono-peapi2.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \ /usr/lib/mono/2.0/PEAPI.dll*/*.mdb" FILES_libmono-peapi2.0-cil = "/usr/lib/mono/gac/PEAPI/2.0.*/ \ /usr/lib/mono/2.0/PEAPI.dll" -FILES_mono-mcs-dbg = "/usr/bin/*.mdb \ +FILES_mono-mcs-dbg += "/usr/bin/*.mdb \ /usr/bin/*/*.mdb \ /usr/bin/.debug/ \ /usr/bin/../.debug/ \ @@ -1439,7 +1439,7 @@ FILES_mono-mcs-dbg = "/usr/bin/*.mdb \ /usr/lib/mono/1.0/*.exe*/*.mdb" FILES_mono-mcs = "/usr/bin/ \ /usr/lib/mono/1.0/*.exe*" -FILES_libmono-system1.0-cil-dbg = "/usr/lib/mono/gac/System*/1.0.*/*.mdb \ +FILES_libmono-system1.0-cil-dbg += "/usr/lib/mono/gac/System*/1.0.*/*.mdb \ /usr/lib/mono/gac/System*/1.0.*/*/*.mdb \ /usr/lib/mono/gac/System*/1.0.*/.debug/ \ /usr/lib/mono/gac/System*/1.0.*/../.debug/ \ @@ -1455,7 +1455,7 @@ FILES_libmono-system1.0-cil = "/usr/lib/mono/gac/System*/1.0.*/ \ /usr/lib/mono/gac/CustomMarshalers/1.0.*/ \ /usr/lib/mono/1.0/System*.dll \ /usr/lib/mono/1.0/CustomMarshalers.dll*" -FILES_libmono-system2.0-cil-dbg = "/usr/lib/mono/gac/System*/2.0.*/*.mdb \ +FILES_libmono-system2.0-cil-dbg += "/usr/lib/mono/gac/System*/2.0.*/*.mdb \ /usr/lib/mono/gac/System*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/System*/2.0.*/.debug/ \ /usr/lib/mono/gac/System*/2.0.*/../.debug/ \ @@ -1471,7 +1471,7 @@ FILES_libmono-system2.0-cil = "/usr/lib/mono/gac/System*/2.0.*/ \ /usr/lib/mono/gac/CustomMarshalers/2.0.*/ \ /usr/lib/mono/2.0/System*.dll \ /usr/lib/mono/2.0/CustomMarshalers.dll*" -FILES_libmono1.0-cil-dbg = "/usr/lib/mono/gac/Mono.*/1.0.*/*.mdb \ +FILES_libmono1.0-cil-dbg += "/usr/lib/mono/gac/Mono.*/1.0.*/*.mdb \ /usr/lib/mono/gac/Mono.*/1.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.*/1.0.*/.debug/ \ /usr/lib/mono/gac/Mono.*/1.0.*/../.debug/ \ @@ -1490,7 +1490,7 @@ FILES_libmono1.0-cil = "/usr/lib/mono/gac/Mono.*/1.0.*/ \ /usr/lib/mono/gac/mono-service/1.0.*/ \ /usr/lib/mono/1.0/Mono.*.dll \ /usr/lib/mono/1.0/OpenSystem.C.dll" -FILES_libmono2.0-cil-dbg = "/usr/lib/mono/gac/Mono.*/2.0.*/*.mdb \ +FILES_libmono2.0-cil-dbg += "/usr/lib/mono/gac/Mono.*/2.0.*/*.mdb \ /usr/lib/mono/gac/Mono.*/2.0.*/*/*.mdb \ /usr/lib/mono/gac/Mono.*/2.0.*/.debug/ \ /usr/lib/mono/gac/Mono.*/2.0.*/../.debug/ \ diff --git a/packages/nbd/nbd_2.8.7.bb b/packages/nbd/nbd_2.8.7.bb index 2241fea71e..b209156fa7 100644 --- a/packages/nbd/nbd_2.8.7.bb +++ b/packages/nbd/nbd_2.8.7.bb @@ -15,7 +15,7 @@ PACKAGES += "nbd-client-doc nbd-server-doc" FILES_nbd-client = "/usr/sbin/nbd-client" FILES_nbd-server = "/usr/bin/nbd-server" -FILES_nbd-client-dbg = "/usr/sbin/.debug/nbd-client" -FILES_nbd-server-dbg = "/usr/bin/.debug/nbd-server" +FILES_nbd-client-dbg += "/usr/sbin/.debug/nbd-client" +FILES_nbd-server-dbg += "/usr/bin/.debug/nbd-server" FILES_nbd-client-doc = "/usr/share/man/man8/*" FILES_nbd-server-doc = "/usr/share/man/man1/*" diff --git a/packages/openchrome/openchrome_svn.bb b/packages/openchrome/openchrome_svn.bb index d4e2da5ebe..c1e9829a35 100644 --- a/packages/openchrome/openchrome_svn.bb +++ b/packages/openchrome/openchrome_svn.bb @@ -9,8 +9,8 @@ FILES_libviaXvMC = "${libdir}/libviaXvMC.so.*" FILES_libviaXvMCPro = "${libdir}/libviaXvMCPro.so.*" FILES_libviaXvMC-dev = "${libdir}/libviaXvMC.so ${libdir}/libviaXvMC.la" FILES_libviaXvMCPro-dev = "${libdir}/libviaXvMCPro.so ${libdir}/libviaXvMCPro.la" -FILES_libviaXvMC-dbg = "${libdir}/.debug/libviaXvMC.so.*" -FILES_libviaXvMCPro-dbg = "${libdir}/.debug/libviaXvMCPro.so.*" +FILES_libviaXvMC-dbg += "${libdir}/.debug/libviaXvMC.so.*" +FILES_libviaXvMCPro-dbg += "${libdir}/.debug/libviaXvMCPro.so.*" DEPENDS = "xserver-xorg libxvmc" diff --git a/packages/openmoko-base/openmoko-libs_svn.bb b/packages/openmoko-base/openmoko-libs_svn.bb index d3dbeb0e1f..20b05efb0b 100644 --- a/packages/openmoko-base/openmoko-libs_svn.bb +++ b/packages/openmoko-base/openmoko-libs_svn.bb @@ -20,17 +20,17 @@ PACKAGES =+ "\ FILES_libmokojournal = "${libdir}/libmokojournal.so.*" FILES_libmokojournal-dev = "${libdir}/libmokojournal.so ${libdir}/libmokojournal.*a ${includedir}/${PN}/libmokojournal" -FILES_libmokojournal-dbg = "${libdir}/.debug/libmokojournal.so.*" +FILES_libmokojournal-dbg += "${libdir}/.debug/libmokojournal.so.*" FILES_libmokogsmd = "${libdir}/libmokogsmd.so.*" FILES_libmokogsmd-dev = "${libdir}/libmokogsmd.so ${libdir}/libmokogsmd.*a ${includedir}/${PN}/libmokogsmd" -FILES_libmokogsmd-dbg = "${libdir}/.debug/libmokogsmd.so.*" +FILES_libmokogsmd-dbg += "${libdir}/.debug/libmokogsmd.so.*" FILES_libmokocore = "${libdir}/libmokocore.so.*" FILES_libmokocore-dev = "${libdir}/libmokocore.so ${libdir}/libmokocore.*a ${includedir}/${PN}/libmokocore" -FILES_libmokocore-dbg = "${libdir}/.debug/libmokocore.so.*" +FILES_libmokocore-dbg += "${libdir}/.debug/libmokocore.so.*" FILES_libmokoui = "${libdir}/libmokoui.so.*" FILES_libmokoui-dev = "${libdir}/libmokoui.so ${libdir}/libmokoui.*a ${includedir}/${PN}/libmokoui" -FILES_libmokoui-dbg = "${libdir}/.debug/libmokoui.so.*" +FILES_libmokoui-dbg += "${libdir}/.debug/libmokoui.so.*" diff --git a/packages/openmoko2/libjana_svn.bb b/packages/openmoko2/libjana_svn.bb index 5b40bd4846..48779e50fe 100644 --- a/packages/openmoko2/libjana_svn.bb +++ b/packages/openmoko2/libjana_svn.bb @@ -25,7 +25,7 @@ PACKAGES =+ "libjana-ecal libjana-ecal-dbg \ LEAD_SONAME = "libjana.so" FILES_libjana-ecal = "${libdir}/libjana-ecal.so.*" -FILES_libjana-ecal-dbg = "${libdir}/.debug/libjana-ecal*" +FILES_libjana-ecal-dbg += "${libdir}/.debug/libjana-ecal*" FILES_libjana-gtk = "${libdir}/libjana-gtk.so.* ${datadir}/jana/landwater.vmf" -FILES_libjana-gtk-dbg = "${libdir}/.debug/libjana-gtk.so.*" +FILES_libjana-gtk-dbg += "${libdir}/.debug/libjana-gtk.so.*" FILES_libjana-bin_append = " ${datadir}/jana/flag-uk.png " diff --git a/packages/openmoko2/moko-gtk-engine_svn.bb b/packages/openmoko2/moko-gtk-engine_svn.bb index 060bceaf8c..027b3cb22b 100644 --- a/packages/openmoko2/moko-gtk-engine_svn.bb +++ b/packages/openmoko2/moko-gtk-engine_svn.bb @@ -8,7 +8,7 @@ inherit openmoko2 PACKAGES += "moko-gtk-theme" FILES_${PN} = "${libdir}/gtk-2.0/*/engines/*.so " FILES_${PN}-dev = "${libdir}/gtk-2.0/*/engines/*" -FILES_${PN}-dbg = "${libdir}/gtk-2.0/*/engines/.debug" +FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/engines/.debug" FILES_moko-gtk-theme = "${datadir}/themes" RDEPENDS_${PN} = "moko-gtk-theme" diff --git a/packages/php/php_5.2.0.bb b/packages/php/php_5.2.0.bb index e1ce34b8e6..ea4b0eaf7c 100644 --- a/packages/php/php_5.2.0.bb +++ b/packages/php/php_5.2.0.bb @@ -59,7 +59,7 @@ PACKAGES = "${PN}-dbg \ " -FILES_${PN}-dbg ="/usr/bin/.debug" +FILES_${PN}-dbg =+"/usr/bin/.debug" FILES_${PN}-cli ="/usr/bin/php" diff --git a/packages/qte/qte-common_2.3.10.inc b/packages/qte/qte-common_2.3.10.inc index 6517eb058d..5f9c01ba80 100644 --- a/packages/qte/qte-common_2.3.10.inc +++ b/packages/qte/qte-common_2.3.10.inc @@ -152,4 +152,4 @@ do_install() { FILES_${PN} = "${libdir}/lib${PN}.so.*" FILES_${PN}-dev = "${includedir}/* ${libdir}/lib${PN}.so" -FILES_${PN}-dbg = "${libdir}/.debug/" +FILES_${PN}-dbg += "${libdir}/.debug/" diff --git a/packages/sylpheed/claws-plugin-mailmbox_1.14.bb b/packages/sylpheed/claws-plugin-mailmbox_1.14.bb index 03e939ead3..cfa26a464e 100644 --- a/packages/sylpheed/claws-plugin-mailmbox_1.14.bb +++ b/packages/sylpheed/claws-plugin-mailmbox_1.14.bb @@ -17,4 +17,4 @@ do_configure() { } FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" -FILES_${PN}-dbg = "${libdir}/claws-mail/plugins/.debug" +FILES_${PN}-dbg += "${libdir}/claws-mail/plugins/.debug" diff --git a/packages/sysfsutils/sysfsutils_2.0.0.bb b/packages/sysfsutils/sysfsutils_2.0.0.bb index 2fbb0865c9..f59dfa0feb 100644 --- a/packages/sysfsutils/sysfsutils_2.0.0.bb +++ b/packages/sysfsutils/sysfsutils_2.0.0.bb @@ -20,5 +20,5 @@ do_stage () { PACKAGES_prepend = "libsysfs libsysfs-dbg libsysfs-dev " FILES_libsysfs = "${libdir}/*.so.*" FILES_libsysfs-dev = "${libdir}/* ${includedir}" -FILES_libsysfs-dbg = "${libdir}/.debug" -FILES_${PN}-dbg = "${bindir}/.debug" +FILES_libsysfs-dbg += "${libdir}/.debug" +FILES_${PN}-dbg += "${bindir}/.debug" diff --git a/packages/telepathy/telepathy-mission-control_4.21.bb b/packages/telepathy/telepathy-mission-control_4.21.bb index e604d8cea7..6d43b805bd 100644 --- a/packages/telepathy/telepathy-mission-control_4.21.bb +++ b/packages/telepathy/telepathy-mission-control_4.21.bb @@ -33,9 +33,9 @@ FILES_libmissioncontrol-dev = "${libdir}/libmissioncontrol.* \ FILES_libmissioncontrol-config-dev = "${libdir}/libmissioncontrol-config.*" FILES_libmissioncontrol-server-dev = "${libdir}/libmissioncontrol-server.*" -FILES_libmissioncontrol-dbg = "${libdir}/.debug/libmissioncontrol.so.*" -FILES_libmissioncontrol-config-dbg = "${libdir}/.debug/libmissioncontrol-config.so.*" -FILES_libmissioncontrol-server-dbg = "${libdir}/.debug/libmissioncontrol-server.so.*" +FILES_libmissioncontrol-dbg += "${libdir}/.debug/libmissioncontrol.so.*" +FILES_libmissioncontrol-config-dbg += "${libdir}/.debug/libmissioncontrol-config.so.*" +FILES_libmissioncontrol-server-dbg += "${libdir}/.debug/libmissioncontrol-server.so.*" do_stage() { autotools_stage_all diff --git a/packages/telepathy/telepathy-mission-control_4.22.bb b/packages/telepathy/telepathy-mission-control_4.22.bb index 2215d0a515..a0afbb068f 100644 --- a/packages/telepathy/telepathy-mission-control_4.22.bb +++ b/packages/telepathy/telepathy-mission-control_4.22.bb @@ -33,9 +33,9 @@ FILES_libmissioncontrol-dev = "${libdir}/libmissioncontrol.* \ FILES_libmissioncontrol-config-dev = "${libdir}/libmissioncontrol-config.*" FILES_libmissioncontrol-server-dev = "${libdir}/libmissioncontrol-server.*" -FILES_libmissioncontrol-dbg = "${libdir}/.debug/libmissioncontrol.so.*" -FILES_libmissioncontrol-config-dbg = "${libdir}/.debug/libmissioncontrol-config.so.*" -FILES_libmissioncontrol-server-dbg = "${libdir}/.debug/libmissioncontrol-server.so.*" +FILES_libmissioncontrol-dbg += "${libdir}/.debug/libmissioncontrol.so.*" +FILES_libmissioncontrol-config-dbg += "${libdir}/.debug/libmissioncontrol-config.so.*" +FILES_libmissioncontrol-server-dbg += "${libdir}/.debug/libmissioncontrol-server.so.*" do_stage() { autotools_stage_all diff --git a/packages/telepathy/telepathy-mission-control_4.45.bb b/packages/telepathy/telepathy-mission-control_4.45.bb index 2215d0a515..a0afbb068f 100644 --- a/packages/telepathy/telepathy-mission-control_4.45.bb +++ b/packages/telepathy/telepathy-mission-control_4.45.bb @@ -33,9 +33,9 @@ FILES_libmissioncontrol-dev = "${libdir}/libmissioncontrol.* \ FILES_libmissioncontrol-config-dev = "${libdir}/libmissioncontrol-config.*" FILES_libmissioncontrol-server-dev = "${libdir}/libmissioncontrol-server.*" -FILES_libmissioncontrol-dbg = "${libdir}/.debug/libmissioncontrol.so.*" -FILES_libmissioncontrol-config-dbg = "${libdir}/.debug/libmissioncontrol-config.so.*" -FILES_libmissioncontrol-server-dbg = "${libdir}/.debug/libmissioncontrol-server.so.*" +FILES_libmissioncontrol-dbg += "${libdir}/.debug/libmissioncontrol.so.*" +FILES_libmissioncontrol-config-dbg += "${libdir}/.debug/libmissioncontrol-config.so.*" +FILES_libmissioncontrol-server-dbg += "${libdir}/.debug/libmissioncontrol-server.so.*" do_stage() { autotools_stage_all diff --git a/packages/twisted/twisted_2.5.0.bb b/packages/twisted/twisted_2.5.0.bb index c7620e4b84..774deb9c22 100644 --- a/packages/twisted/twisted_2.5.0.bb +++ b/packages/twisted/twisted_2.5.0.bb @@ -175,6 +175,6 @@ ${libdir}/python2.4/site-packages/twisted/plugins/twisted_words.py \ ${libdir}/python2.4/site-packages/twisted/words\ " -FILES_python-twisted-runner-dbg = " \ +FILES_python-twisted-runner-dbg += " \ ${libdir}/python2.4/site-packages/twisted/runner/.debug" diff --git a/packages/usrp/usrp_0.12.bb b/packages/usrp/usrp_0.12.bb index b47ea9b62e..7112fc621a 100644 --- a/packages/usrp/usrp_0.12.bb +++ b/packages/usrp/usrp_0.12.bb @@ -37,5 +37,5 @@ do_stage () { } PACKAGES += "python-pyusrp-dbg python-pyusrp" -FILES_python-pyusrp-dbg = "${libdir}/python*/site-packages/.debug" +FILES_python-pyusrp-dbg += "${libdir}/python*/site-packages/.debug" FILES_python-pyusrp = "${libdir}/python*" diff --git a/packages/webkit/webkit-gtk_svn.bb b/packages/webkit/webkit-gtk_svn.bb index 2e47d38dbd..6a99a96001 100644 --- a/packages/webkit/webkit-gtk_svn.bb +++ b/packages/webkit/webkit-gtk_svn.bb @@ -8,7 +8,7 @@ WEBKIT_PORT = "gtk-port" WEBKIT_EXTRA_OPTIONS = "CONFIG-=qt" FILES_webkit-gtklauncher = "${bindir}/GtkLauncher" -FILES_webkit-gtklauncher-dbg = "${bindir}/.debug/GtkLauncher" +FILES_webkit-gtklauncher-dbg += "${bindir}/.debug/GtkLauncher" require webkit.inc diff --git a/packages/webkit/webkit-qt.inc b/packages/webkit/webkit-qt.inc index 1dbf71c010..5522a7cf53 100644 --- a/packages/webkit/webkit-qt.inc +++ b/packages/webkit/webkit-qt.inc @@ -2,7 +2,7 @@ WEBKIT_PORT = "qt" WEBKIT_EXTRA_OPTIONS = "" FILES_${PN}launcher = "${bindir}/QtLauncher" -FILES_${PN}launcher-dbg = "${bindir}/.debug/*" +FILES_${PN}launcher-dbg += "${bindir}/.debug/*" RDEPENDS += "openssl" diff --git a/packages/xmms/xmms-mad_0.10.bb b/packages/xmms/xmms-mad_0.10.bb index f54dc16720..8c600f24b8 100644 --- a/packages/xmms/xmms-mad_0.10.bb +++ b/packages/xmms/xmms-mad_0.10.bb @@ -10,5 +10,5 @@ inherit autotools export XMMS_CONFIG = "${STAGING_BINDIR_CROSS}/xmms-config" FILES_${PN} = "${libdir}/xmms/Input/libxmmsmad.so" -FILES_${PN}-dbg = "${libdir}/xmms/Input/.debug/libxmmsmad.so" +FILES_${PN}-dbg += "${libdir}/xmms/Input/.debug/libxmmsmad.so" diff --git a/packages/xmms/xmms-tremor_1.0.bb b/packages/xmms/xmms-tremor_1.0.bb index 727ead1f80..21e2e8dc9b 100644 --- a/packages/xmms/xmms-tremor_1.0.bb +++ b/packages/xmms/xmms-tremor_1.0.bb @@ -7,5 +7,5 @@ SRC_URI = "http://mirror1.pdaxrom.org/source/src/xmms-tremor-1.0.tar.bz2" inherit autotools FILES_${PN} = "${libdir}/xmms/Input/libxmmstremor.so" -FILES_${PN}-dbg = "${libdir}/xmms/Input/.debug/libxmmstremor.so" +FILES_${PN}-dbg += "${libdir}/xmms/Input/.debug/libxmmstremor.so" -- cgit v1.2.3 From 36efb322cb219e0b8dffff12d94b66cdde4e67c3 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 26 Jan 2008 07:32:41 +0000 Subject: pulseaudio 0.9.8 update to 0.9.9 --- packages/pulseaudio/pulseaudio_0.9.8.bb | 17 ----------------- packages/pulseaudio/pulseaudio_0.9.9.bb | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 17 deletions(-) delete mode 100644 packages/pulseaudio/pulseaudio_0.9.8.bb create mode 100644 packages/pulseaudio/pulseaudio_0.9.9.bb diff --git a/packages/pulseaudio/pulseaudio_0.9.8.bb b/packages/pulseaudio/pulseaudio_0.9.8.bb deleted file mode 100644 index 93c8ffb849..0000000000 --- a/packages/pulseaudio/pulseaudio_0.9.8.bb +++ /dev/null @@ -1,17 +0,0 @@ -require pulse.inc - -DEPENDS += "dbus" - -# this is not correct (see below) -SRC_URI += "\ - file://disable-using-glibc-tls.patch;patch=1 \ - file://fix-dbus-without-hal.patch;patch=1 \ -" - -PR = "r0" - -# problems w/ pulseaudio 0.9.8 atm: -# 1.) needs libltdl >= 1.5.24 (yes, any older version will NOT work at runtime) -# 2.) doesn't build w/ glibc TLS support (hence patched out) -DEFAULT_PREFERENCE = "-1" - diff --git a/packages/pulseaudio/pulseaudio_0.9.9.bb b/packages/pulseaudio/pulseaudio_0.9.9.bb new file mode 100644 index 0000000000..f52ca6e1c6 --- /dev/null +++ b/packages/pulseaudio/pulseaudio_0.9.9.bb @@ -0,0 +1,18 @@ +require pulse.inc + +DEPENDS += "dbus" + +# this is not correct (see below) +SRC_URI += "\ + file://disable-using-glibc-tls.patch;patch=1 \ + file://fix-dbus-without-hal.patch;patch=1 \ +" + +PR = "r0" + +# problems w/ pulseaudio 0.9.9 atm: +# 1.) needs libltdl >= 1.5.24 (yes, any older version will NOT work at runtime) +# 2.) doesn't build w/ glibc TLS support (hence patched out) +# 3.) hangs, if used with gst-pulse 0.9.7 +DEFAULT_PREFERENCE = "-1" + -- cgit v1.2.3 From f111701e2498eea29baf12e06b454eadc28f9ad2 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 26 Jan 2008 12:56:08 +0000 Subject: fastjar: install binaries instead of libtool wrappers to make it rm_work safe --- packages/fastjar/fastjar-native_0.95.bb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/fastjar/fastjar-native_0.95.bb b/packages/fastjar/fastjar-native_0.95.bb index 520235d799..3d003306b8 100644 --- a/packages/fastjar/fastjar-native_0.95.bb +++ b/packages/fastjar/fastjar-native_0.95.bb @@ -4,6 +4,8 @@ SECTION = "devel" PRIORITY = "optional" LICENSE = "GPL" +PR = "r1" + DEPENDS = "zlib-native" SRC_URI = "http://download.savannah.nongnu.org/releases/fastjar/fastjar-${PV}.tar.gz" @@ -20,7 +22,8 @@ do_configure () { } do_stage() { + #we should teach autotools.bbclass:autotools_stage_all() about ${STAGING_BINDIR} install -d ${STAGING_BINDIR} - install -m 755 fastjar ${STAGING_BINDIR}/fastjar - install -m 755 grepjar ${STAGING_BINDIR} + install -m 755 .libs/fastjar ${STAGING_BINDIR}/fastjar + install -m 755 .libs/grepjar ${STAGING_BINDIR} } -- cgit v1.2.3 From 51fa7290fef9dfc8b44759c37f9272d1bc402771 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sat, 26 Jan 2008 16:05:29 +0000 Subject: package/cmake: Update cmake from 2.4.7 to 2.4.8 and add the new checksums --- conf/checksums.ini | 6 +++--- packages/cmake/cmake-native_2.4.7.bb | 3 --- packages/cmake/cmake-native_2.4.8.bb | 3 +++ packages/cmake/cmake_2.4.7.bb | 2 -- packages/cmake/cmake_2.4.8.bb | 2 ++ 5 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 packages/cmake/cmake-native_2.4.7.bb create mode 100644 packages/cmake/cmake-native_2.4.8.bb delete mode 100644 packages/cmake/cmake_2.4.7.bb create mode 100644 packages/cmake/cmake_2.4.8.bb diff --git a/conf/checksums.ini b/conf/checksums.ini index 8b9b58ebc5..821a3a1ce5 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -1554,9 +1554,9 @@ sha256=80fd209d065887729fdeb81f5a91638626e7ed31dabab40c446bd12042df9057 md5=c0b57a115e24005f9828ca7b53908779 sha256=f0127ba9cd9936b08f982999f6fd9004c8c4b97401e68bda4d91eec29300d8bd -[http://www.cmake.org/files/v2.4/cmake-2.4.7.tar.gz] -md5=4476c423b8f74266136964e42ea88028 -sha256=2fd5feb294b933ae3a0071b8c7a396797cf79dfe6b0ffeff8788e07ff4107d56 +[http://www.cmake.org/files/v2.4/cmake-2.4.8.tar.gz] +md5=f5dd061c31765a49dc17ae8bdc986779 +sha256=f20607d4f33376ea648307681630574662d0c3f59d88a7a02ad547b6320631f1 [ftp://ftp.logilab.fr/pub/common/common-0.4.4.tar.gz] md5=4cd3ce38efbd27c6cf4223f0ced2a5b5 diff --git a/packages/cmake/cmake-native_2.4.7.bb b/packages/cmake/cmake-native_2.4.7.bb deleted file mode 100644 index fcfdda1c1a..0000000000 --- a/packages/cmake/cmake-native_2.4.7.bb +++ /dev/null @@ -1,3 +0,0 @@ -CMAKE_MAJOR_VERSION="2.4" -require cmake.inc -inherit native diff --git a/packages/cmake/cmake-native_2.4.8.bb b/packages/cmake/cmake-native_2.4.8.bb new file mode 100644 index 0000000000..fcfdda1c1a --- /dev/null +++ b/packages/cmake/cmake-native_2.4.8.bb @@ -0,0 +1,3 @@ +CMAKE_MAJOR_VERSION="2.4" +require cmake.inc +inherit native diff --git a/packages/cmake/cmake_2.4.7.bb b/packages/cmake/cmake_2.4.7.bb deleted file mode 100644 index 619aea9701..0000000000 --- a/packages/cmake/cmake_2.4.7.bb +++ /dev/null @@ -1,2 +0,0 @@ -CMAKE_MAJOR_VERSION="2.4" -require cmake.inc diff --git a/packages/cmake/cmake_2.4.8.bb b/packages/cmake/cmake_2.4.8.bb new file mode 100644 index 0000000000..619aea9701 --- /dev/null +++ b/packages/cmake/cmake_2.4.8.bb @@ -0,0 +1,2 @@ +CMAKE_MAJOR_VERSION="2.4" +require cmake.inc -- cgit v1.2.3 From 937675435a1f0e44511bdc8ff6ef1d5d4029d5b8 Mon Sep 17 00:00:00 2001 From: Henry von Tresckow Date: Sat, 26 Jan 2008 20:10:09 +0000 Subject: linux-rp: misc fixes to make 2.6.24 compile for poodle - close #3715 --- packages/linux/linux-rp-2.6.24/defconfig-poodle | 34 +++++++++++-------------- packages/linux/linux-rp-2.6.24/poodle_ts.patch | 22 ++++++++++++++++ packages/linux/linux-rp-2.6.24/pxafb.patch | 26 +++++++++++++++++++ packages/linux/linux-rp_2.6.24.bb | 4 ++- 4 files changed, 66 insertions(+), 20 deletions(-) create mode 100644 packages/linux/linux-rp-2.6.24/poodle_ts.patch create mode 100644 packages/linux/linux-rp-2.6.24/pxafb.patch diff --git a/packages/linux/linux-rp-2.6.24/defconfig-poodle b/packages/linux/linux-rp-2.6.24/defconfig-poodle index ecffc3aba6..841bcf285e 100644 --- a/packages/linux/linux-rp-2.6.24/defconfig-poodle +++ b/packages/linux/linux-rp-2.6.24/defconfig-poodle @@ -1,7 +1,7 @@ -# + # Automatically generated make config: don't edit # Linux kernel version: 2.6.24-rc8 -# Sun Jan 20 22:47:47 2008 +# Fri Jan 25 22:13:14 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -152,12 +152,12 @@ CONFIG_ARCH_PXA=y # CONFIG_ARCH_PXA_IDP is not set CONFIG_PXA_SHARPSL=y # CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_HX2750 is not set # CONFIG_MACH_EM_X270 is not set # CONFIG_MACH_ZYLONITE is not set # CONFIG_MACH_ARMCORE is not set CONFIG_PXA_SHARPSL_25x=y # CONFIG_PXA_SHARPSL_27x is not set -# CONFIG_MACH_HX2750 is not set # CONFIG_MACH_HTCUNIVERSAL is not set CONFIG_MACH_POODLE=y # CONFIG_MACH_CORGI is not set @@ -206,16 +206,16 @@ CONFIG_SHARP_SCOOP=y # # CONFIG_PCI_SYSCALL is not set # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCCARD=y +CONFIG_PCCARD=m # CONFIG_PCMCIA_DEBUG is not set -CONFIG_PCMCIA=y +CONFIG_PCMCIA=m CONFIG_PCMCIA_LOAD_CIS=y CONFIG_PCMCIA_IOCTL=y # # PC-card bridges # -CONFIG_PCMCIA_PXA2XX=y +CONFIG_PCMCIA_PXA2XX=m # # Kernel Features @@ -652,17 +652,17 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_ATA_OVER_ETH is not set CONFIG_MISC_DEVICES=y # CONFIG_EEPROM_93CX6 is not set -CONFIG_IDE=y +CONFIG_IDE=m CONFIG_IDE_MAX_HWIFS=4 -CONFIG_BLK_DEV_IDE=y +CONFIG_BLK_DEV_IDE=m # # Please see Documentation/ide.txt for help/info on IDE drives # # CONFIG_BLK_DEV_IDE_SATA is not set -CONFIG_BLK_DEV_IDEDISK=y +CONFIG_BLK_DEV_IDEDISK=m # CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=y +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 @@ -673,7 +673,7 @@ CONFIG_IDE_PROC_FS=y # # IDE chipset support/bugfixes # -CONFIG_IDE_GENERIC=y +CONFIG_IDE_GENERIC=m # CONFIG_BLK_DEV_PLATFORM is not set # CONFIG_IDE_ARM is not set # CONFIG_BLK_DEV_IDEDMA is not set @@ -1063,7 +1063,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y CONFIG_FB_PXA=y CONFIG_FB_PXA_LCD_QVGA=y # CONFIG_FB_PXA_LCD_VGA is not set -CONFIG_FB_PXA_OVERLAY=y +# CONFIG_FB_PXA_OVERLAY is not set # CONFIG_FB_PXA_PARAMETERS is not set # CONFIG_FB_MBX is not set # CONFIG_FB_W100 is not set @@ -1098,11 +1098,7 @@ 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 +# CONFIG_LOGO is not set # # Sound @@ -1133,7 +1129,7 @@ CONFIG_SND_VERBOSE_PROCFS=y # # Generic devices # -# CONFIG_SND_AC97_CODEC is not set +CONFIG_SND_AC97_CODEC=m # CONFIG_SND_DUMMY is not set # CONFIG_SND_VIRMIDI is not set # CONFIG_SND_MTPAV is not set @@ -1175,7 +1171,7 @@ CONFIG_SND_SOC_WM8731=m # Open Sound System # # CONFIG_SOUND_PRIME is not set -# CONFIG_AC97_BUS is not set +CONFIG_AC97_BUS=m CONFIG_HID_SUPPORT=y CONFIG_HID=m # CONFIG_HID_DEBUG is not set diff --git a/packages/linux/linux-rp-2.6.24/poodle_ts.patch b/packages/linux/linux-rp-2.6.24/poodle_ts.patch new file mode 100644 index 0000000000..b10ee2eab8 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/poodle_ts.patch @@ -0,0 +1,22 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/poodle.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/poodle.c 2008-01-25 12:10:10.000000000 -0800 ++++ linux-2.6.23/arch/arm/mach-pxa/poodle.c 2008-01-25 12:11:58.000000000 -0800 +@@ -166,7 +166,7 @@ + }, + }; + +-static unsigned long poodle_get_hsync_len(void) ++static unsigned long poodle_get_hsync_invperiod(void) + { + return 0; + } +@@ -176,7 +176,7 @@ + } + + static struct corgits_machinfo poodle_ts_machinfo = { +- .get_hsync_len = poodle_get_hsync_len, ++ .get_hsync_invperiod = poodle_get_hsync_invperiod, + .put_hsync = poodle_null_hsync, + .wait_hsync = poodle_null_hsync, + }; diff --git a/packages/linux/linux-rp-2.6.24/pxafb.patch b/packages/linux/linux-rp-2.6.24/pxafb.patch new file mode 100644 index 0000000000..efcfb079b2 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/pxafb.patch @@ -0,0 +1,26 @@ +Index: linux-2.6.23/drivers/video/pxafb.c +=================================================================== +--- linux-2.6.23.orig/drivers/video/pxafb.c 2008-01-25 16:25:21.000000000 -0800 ++++ linux-2.6.23/drivers/video/pxafb.c 2008-01-25 16:32:14.000000000 -0800 +@@ -1194,7 +1194,7 @@ + if ((clkinfo->old == 13000)) + break; + +- pcd = get_pcd(fbi->fb.var.pixclock); ++ pcd = get_pcd(fbi,fbi->fb.var.pixclock); + lccr3 = fbi->reg_lccr3; + set_hsync_time(fbi, pcd); + fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd); +Index: linux-2.6.23/drivers/video/pxafb.c +=================================================================== +--- linux-2.6.23.orig/drivers/video/pxafb.c 2008-01-25 16:25:21.000000000 -0800 ++++ linux-2.6.23/drivers/video/pxafb.c 2008-01-25 16:32:14.000000000 -0800 +@@ -1194,7 +1194,7 @@ + if ((clkinfo->old == 13000)) + break; + +- pcd = get_pcd(fbi->fb.var.pixclock); ++ pcd = get_pcd(fbi,fbi->fb.var.pixclock); + lccr3 = fbi->reg_lccr3; + set_hsync_time(fbi, pcd); + fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd); diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb index 68fad7df62..f236586b03 100644 --- a/packages/linux/linux-rp_2.6.24.bb +++ b/packages/linux/linux-rp_2.6.24.bb @@ -1,6 +1,6 @@ require linux-rp.inc -PR = "r0" +PR = "r1" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_collie = "1" @@ -102,6 +102,8 @@ SRC_URI_append_collie = "\ 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 = "\ -- cgit v1.2.3 From 362bdbdd96a81c9ac6727b301463d3075ee3885f Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 26 Jan 2008 23:36:24 +0000 Subject: linux-handhelds-2.6 2.6.21: Enable USB WiFi support for h5000. * Possibly, incomplete. * Based on defconfig from Koen Kooi. * defconfigman r432 --- .../linux-handhelds-2.6-2.6.21/h5000/defconfig | 156 +++++++++++++++++++-- 1 file changed, 148 insertions(+), 8 deletions(-) diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig index b72cc16514..2dbeadd59f 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:35 2007 +# Sun Jan 27 01:32:44 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -164,6 +164,7 @@ CONFIG_ARCH_H5400=y CONFIG_IPAQ_H5400_BT=m CONFIG_IPAQ_H5400_LCD=y CONFIG_IPAQ_H5400_BL=y +CONFIG_IPAQ_H5400_WIFI=m # CONFIG_MACH_HIMALAYA is not set # CONFIG_MACH_HTCUNIVERSAL is not set # CONFIG_MACH_HTCALPINE is not set @@ -524,7 +525,10 @@ CONFIG_IRTTY_SIR=m # # 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 @@ -538,9 +542,19 @@ CONFIG_BT_HIDP=m # # Bluetooth device drivers # +# CONFIG_BT_HCIUSB is not set # CONFIG_BT_HCIUART is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set # CONFIG_BT_HCIVHCI is not set -# CONFIG_IEEE80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +# CONFIG_IEEE80211_CRYPT_WEP is not set +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +# CONFIG_IEEE80211_SOFTMAC is not set +CONFIG_WIRELESS_EXT=y # # Device Drivers @@ -577,8 +591,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 @@ -674,6 +689,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 CONFIG_BLK_DEV_LOOP=m # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -746,7 +762,16 @@ CONFIG_TUN=m # # Wireless LAN (non-hamradio) # -# CONFIG_NET_RADIO is not set +CONFIG_NET_RADIO=y +CONFIG_NET_WIRELESS_RTNETLINK=y + +# +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_HOSTAP is not set +# CONFIG_ACX is not set # # Wan interfaces @@ -933,6 +958,7 @@ CONFIG_W1=y # # 1-wire Bus Masters # +# CONFIG_W1_MASTER_DS2490 is not set # CONFIG_W1_MASTER_DS2482 is not set CONFIG_W1_MASTER_DS1WM=y @@ -1037,6 +1063,7 @@ CONFIG_LEDS_TRIGGER_SHARED=y # Digital Video Broadcasting Devices # # CONFIG_DVB is not set +# CONFIG_USB_DABUSB is not set # # Graphics support @@ -1129,6 +1156,11 @@ CONFIG_SND_VERBOSE_PROCFS=y # CONFIG_SND_PXA2XX_AC97 is not set # CONFIG_SND_RECON is not set +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set + # # SoC audio support # @@ -1194,12 +1226,120 @@ CONFIG_HID=m CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB_ARCH_HAS_OHCI=y # CONFIG_USB_ARCH_HAS_EHCI is not set -# CONFIG_USB is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=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 + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set # # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' # +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_ACECAD is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_TOUCHSCREEN is not set +# CONFIG_USB_YEALINK is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set +# CONFIG_USB_ATI_REMOTE2 is not set +# CONFIG_USB_KEYSPAN_REMOTE is not set +# CONFIG_USB_APPLETOUCH is not set +# CONFIG_USB_GTCO is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + # # USB Gadget Support # @@ -1513,7 +1653,7 @@ CONFIG_CRYPTO_PCBC=m # 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_AES=m # CONFIG_CRYPTO_CAST5 is not set # CONFIG_CRYPTO_CAST6 is not set # CONFIG_CRYPTO_TEA is not set @@ -1521,7 +1661,7 @@ CONFIG_CRYPTO_ARC4=m # CONFIG_CRYPTO_KHAZAD is not set # CONFIG_CRYPTO_ANUBIS is not set # CONFIG_CRYPTO_DEFLATE is not set -# CONFIG_CRYPTO_MICHAEL_MIC is not set +CONFIG_CRYPTO_MICHAEL_MIC=m # CONFIG_CRYPTO_CRC32C is not set # CONFIG_CRYPTO_CAMELLIA is not set # CONFIG_CRYPTO_TEST is not set -- cgit v1.2.3 From c1425324572da726718b65ff1206169d7de4fa19 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 26 Jan 2008 23:39:20 +0000 Subject: linux-handhelds-2.6 2.6.21: Update to latest defconfigman. Includes: * magician flash boot hacks * mtdblock support moves to modules, as non-essential for flash boot. * Few netcards PCMCIA drivers enabled for hx4700. --- .../linux-handhelds-2.6-2.6.21/asus620/defconfig | 6 +++--- .../linux-handhelds-2.6-2.6.21/asus730/defconfig | 7 ++++--- .../linux-handhelds-2.6-2.6.21/aximx50/defconfig | 6 +++--- .../linux-handhelds-2.6-2.6.21/eteng500/defconfig | 6 +++--- .../linux-handhelds-2.6-2.6.21/h1910/defconfig | 6 +++--- .../linux-handhelds-2.6-2.6.21/h2200/defconfig | 23 +++++++++++----------- .../linux-handhelds-2.6-2.6.21/h3600/defconfig | 7 ++++--- .../linux-handhelds-2.6-2.6.21/h3800/defconfig | 7 ++++--- .../linux-handhelds-2.6-2.6.21/h3900/defconfig | 7 ++++--- .../linux-handhelds-2.6-2.6.21/h4000/defconfig | 7 ++++--- .../linux-handhelds-2.6-2.6.21/htcalpine/defconfig | 6 +++--- .../linux-handhelds-2.6-2.6.21/htcapache/defconfig | 6 +++--- .../htcbeetles/defconfig | 6 +++--- .../htcblueangel/defconfig | 7 ++++--- .../htchimalaya/defconfig | 6 +++--- .../linux-handhelds-2.6-2.6.21/htcsable/defconfig | 6 +++--- .../htcuniversal/defconfig | 6 +++--- .../htcwallaby/defconfig | 6 +++--- .../linux-handhelds-2.6-2.6.21/hx4700/defconfig | 23 +++++++++++----------- .../linux-handhelds-2.6-2.6.21/looxc550/defconfig | 6 +++--- .../linux-handhelds-2.6-2.6.21/magician/defconfig | 18 ++++++++--------- .../linux-handhelds-2.6-2.6.21/rx1950/defconfig | 6 +++--- .../linux-handhelds-2.6-2.6.21/rx3000/defconfig | 7 ++++--- 23 files changed, 100 insertions(+), 91 deletions(-) diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig index 68e39e7019..04c70cfba6 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:31 2007 +# Sun Jan 27 01:32:39 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -534,8 +534,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig index 3c1cfbad8f..aa94442a9b 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:31 2007 +# Sun Jan 27 01:32:40 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -527,8 +527,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig index 8e845fb396..1b32b68672 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:32 2007 +# Sun Jan 27 01:32:40 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -518,8 +518,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig index 49a907e5fe..d4881fb224 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:32 2007 +# Sun Jan 27 01:32:41 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -507,8 +507,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig index dd20e0baff..4249e4d6f5 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:32 2007 +# Sun Jan 27 01:32:41 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -516,8 +516,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig index 532752a44f..45c68468da 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:33 2007 +# Sun Jan 27 01:32:42 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -604,8 +604,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 @@ -834,14 +835,14 @@ CONFIG_NET_WIRELESS=y # PCMCIA network device support # 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 is not set -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_PCMCIA_AXNET is not set +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m # # Wan interfaces diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig index 2a29e61877..ead31f3055 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:33 2007 +# Sun Jan 27 01:32:42 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -498,8 +498,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig index 2132550832..4d110a7b21 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:34 2007 +# Sun Jan 27 01:32:42 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -496,8 +496,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig index 53bbe32ec0..d386487e64 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:34 2007 +# Sun Jan 27 01:32:43 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -534,8 +534,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig index d3b7c58d08..31ff20e487 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:34 2007 +# Sun Jan 27 01:32:43 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -602,8 +602,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig index 457ed57863..26d28055db 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:36 2007 +# Sun Jan 27 01:32:45 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -532,8 +532,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig index 24a0ba0bb3..80a3269294 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:37 2007 +# Sun Jan 27 01:32:45 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -538,8 +538,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig index bc71c235e3..28186f7df7 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:37 2007 +# Sun Jan 27 01:32:46 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -536,8 +536,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig index 41012c93a0..c2e783a9a7 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:37 2007 +# Sun Jan 27 01:32:46 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -566,8 +566,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig index 51cf1468da..8abaeb97f8 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:38 2007 +# Sun Jan 27 01:32:47 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -534,8 +534,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig index 9aea8e2d09..ed6b2634a2 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:38 2007 +# Sun Jan 27 01:32:47 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -542,8 +542,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig index 538258dca9..241d3a3759 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:39 2007 +# Sun Jan 27 01:32:47 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -549,8 +549,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig index c4f636f1ba..bb0230cc2d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:39 2007 +# Sun Jan 27 01:32:48 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -492,8 +492,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig index d8a7c87f24..e9f45ab8f3 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:35 2007 +# Sun Jan 27 01:32:44 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -612,8 +612,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 @@ -853,14 +854,14 @@ CONFIG_NET_WIRELESS=y # PCMCIA network device support # 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 is not set -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_PCMCIA_AXNET is not set +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m # # Wan interfaces diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig index 065435406d..89646accc5 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:39 2007 +# Sun Jan 27 01:32:48 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -530,8 +530,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig index e3712ec2e5..fb433633ab 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:36 2007 +# Sun Jan 27 01:32:44 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -601,9 +601,9 @@ CONFIG_MTD_BLOCK=m # # RAM/ROM/Flash chip drivers # -CONFIG_MTD_CFI=m +CONFIG_MTD_CFI=y # CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=m +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 @@ -615,10 +615,10 @@ 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=m +CONFIG_MTD_CFI_INTELEXT=y # CONFIG_MTD_CFI_AMDSTD is not set # CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=m +CONFIG_MTD_CFI_UTIL=y # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set # CONFIG_MTD_ABSENT is not set @@ -629,7 +629,7 @@ CONFIG_MTD_CFI_UTIL=m # Mapping drivers for chip access # # CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PHYSMAP=y CONFIG_MTD_PHYSMAP_START=0x8000000 CONFIG_MTD_PHYSMAP_LEN=0 CONFIG_MTD_PHYSMAP_BANKWIDTH=2 @@ -1461,7 +1461,7 @@ CONFIG_RAMFS=y # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set -CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_WRITEBUFFER=y # CONFIG_JFFS2_SUMMARY is not set @@ -1657,8 +1657,8 @@ CONFIG_CRC_CCITT=y # CONFIG_CRC16 is not set CONFIG_CRC32=y # CONFIG_LIBCRC32C is not set -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y CONFIG_PLIST=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig index 5c59ed5282..8bf07bed8d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:40 2007 +# Sun Jan 27 01:32:49 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -525,8 +525,8 @@ CONFIG_MTD_DEBUG_VERBOSE=0 # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -# CONFIG_MTD_BLKDEVS is not set -# CONFIG_MTD_BLOCK is not set +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 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig index 76a2c5fc0d..98f5b6cc8f 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Wed Dec 26 16:55:40 2007 +# Sun Jan 27 01:32:49 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -541,8 +541,9 @@ CONFIG_MTD_PARTITIONS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y +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 -- cgit v1.2.3 From c6c29b5f3b3c5e820f95fc16c409768372654373 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sun, 27 Jan 2008 11:05:08 +0000 Subject: apex: Added automatic fatslug detection. --- packages/apex/apex-nslu2-1.5.13/defconfig | 3 ++- packages/apex/apex-nslu2-16mb-1.5.13/defconfig | 3 ++- packages/apex/apex-nslu2-16mb_1.5.13.bb | 2 +- packages/apex/apex-nslu2_1.5.13.bb | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/apex/apex-nslu2-1.5.13/defconfig b/packages/apex/apex-nslu2-1.5.13/defconfig index 91517025bf..264f8539fc 100644 --- a/packages/apex/apex-nslu2-1.5.13/defconfig +++ b/packages/apex/apex-nslu2-1.5.13/defconfig @@ -136,7 +136,8 @@ CONFIG_AUTOBOOT=y CONFIG_AUTOBOOT_DELAY=10 CONFIG_ENV_STARTUP_KERNEL_COPY=y # CONFIG_ENV_REGION_KERNEL_SWAP is not set -# CONFIG_ENV_STARTUP_PREFIX_P is not set +CONFIG_ENV_STARTUP_PREFIX_P=y +CONFIG_ENV_STARTUP_PREFIX="sdram-init; memscan -u 0+256m" # # Regions diff --git a/packages/apex/apex-nslu2-16mb-1.5.13/defconfig b/packages/apex/apex-nslu2-16mb-1.5.13/defconfig index 420e0a61fd..11658813d5 100644 --- a/packages/apex/apex-nslu2-16mb-1.5.13/defconfig +++ b/packages/apex/apex-nslu2-16mb-1.5.13/defconfig @@ -136,7 +136,8 @@ CONFIG_AUTOBOOT=y CONFIG_AUTOBOOT_DELAY=10 CONFIG_ENV_STARTUP_KERNEL_COPY=y # CONFIG_ENV_REGION_KERNEL_SWAP is not set -# CONFIG_ENV_STARTUP_PREFIX_P is not set +CONFIG_ENV_STARTUP_PREFIX_P=y +CONFIG_ENV_STARTUP_PREFIX="sdram-init; memscan -u 0+256m" # # Regions diff --git a/packages/apex/apex-nslu2-16mb_1.5.13.bb b/packages/apex/apex-nslu2-16mb_1.5.13.bb index 5fc835fc00..2937876c03 100644 --- a/packages/apex/apex-nslu2-16mb_1.5.13.bb +++ b/packages/apex/apex-nslu2-16mb_1.5.13.bb @@ -3,7 +3,7 @@ SECTION = "" PRIORITY = "optional" HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader" LICENSE = "GPL" -PR = "r1" +PR = "r2" SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \ file://defconfig" diff --git a/packages/apex/apex-nslu2_1.5.13.bb b/packages/apex/apex-nslu2_1.5.13.bb index ac3858f3a5..7fc7ea65b6 100644 --- a/packages/apex/apex-nslu2_1.5.13.bb +++ b/packages/apex/apex-nslu2_1.5.13.bb @@ -3,7 +3,7 @@ SECTION = "" PRIORITY = "optional" HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader" LICENSE = "GPL" -PR = "r1" +PR = "r2" SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \ file://defconfig" -- cgit v1.2.3 From ee1c13e17b2c8df258f6b80acd2570ddad92e864 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Sun, 27 Jan 2008 11:05:54 +0000 Subject: opie-taskbar-images.inc: fix -dbg listed in PACKAGES multiple times (QA) --- packages/opie-taskbar/opie-taskbar-images.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opie-taskbar/opie-taskbar-images.inc b/packages/opie-taskbar/opie-taskbar-images.inc index b74eda45c3..73122914fd 100644 --- a/packages/opie-taskbar/opie-taskbar-images.inc +++ b/packages/opie-taskbar/opie-taskbar-images.inc @@ -54,4 +54,4 @@ python do_package_prepend () { } PACKAGE_ARCH = "all" -PACKAGES =+ "${PN}-dbg ${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320" +PACKAGES =+ "${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320" -- cgit v1.2.3 From 1452e2e65a341afe5467135cb715a460fdf88812 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 27 Jan 2008 13:18:56 +0000 Subject: opie-taskbar-images: fix the PACKAGES line * while doing the "inherit opie" thing in 8725fc715529f6dba921a0a92e01e4e68124bfdb I also committed a broken PACKAGES line I had been testing out locally which was turned out to be unsuitable for the public repo. --- packages/opie-taskbar/opie-taskbar-images.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opie-taskbar/opie-taskbar-images.inc b/packages/opie-taskbar/opie-taskbar-images.inc index 73122914fd..939caf0f78 100644 --- a/packages/opie-taskbar/opie-taskbar-images.inc +++ b/packages/opie-taskbar/opie-taskbar-images.inc @@ -54,4 +54,4 @@ python do_package_prepend () { } PACKAGE_ARCH = "all" -PACKAGES =+ "${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320" +PACKAGES = "${PN}-dbg ${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320" -- cgit v1.2.3 From 21f59f2c47b9a0014c530ee5711f462469c7b9ed Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Sun, 27 Jan 2008 13:37:05 +0000 Subject: gnuplot: update 4.2.2, add 4.3.0+cvs * restructure patch directories * update angstrom-preferred --- .../include/angstrom-2007-preferred-versions.inc | 2 +- .../files/debian-separate-x11-package.patch | 59 ---------------------- packages/gnuplot/files/matrix.patch | 17 ------- packages/gnuplot/files/subdirs.patch | 13 ++--- packages/gnuplot/files/term.patch | 14 ++--- packages/gnuplot/gnuplot-4.0.0/.mtn2git_empty | 0 .../debian-separate-x11-package.patch | 59 ++++++++++++++++++++++ packages/gnuplot/gnuplot-4.0.0/matrix.patch | 17 +++++++ packages/gnuplot/gnuplot-4.0.0/subdirs.patch | 16 ++++++ packages/gnuplot/gnuplot-4.0.0/term.patch | 20 ++++++++ packages/gnuplot/gnuplot-4.2.0/.mtn2git_empty | 0 packages/gnuplot/gnuplot-4.2.0/subdirs.patch | 11 ---- packages/gnuplot/gnuplot-4.2.0/term.patch | 20 -------- packages/gnuplot/gnuplot_4.2.0.bb | 10 ---- packages/gnuplot/gnuplot_4.2.2.bb | 10 ++++ packages/gnuplot/gnuplot_cvs.bb | 17 +++++++ 16 files changed, 151 insertions(+), 134 deletions(-) delete mode 100644 packages/gnuplot/files/debian-separate-x11-package.patch delete mode 100644 packages/gnuplot/files/matrix.patch create mode 100644 packages/gnuplot/gnuplot-4.0.0/.mtn2git_empty create mode 100644 packages/gnuplot/gnuplot-4.0.0/debian-separate-x11-package.patch create mode 100644 packages/gnuplot/gnuplot-4.0.0/matrix.patch create mode 100644 packages/gnuplot/gnuplot-4.0.0/subdirs.patch create mode 100644 packages/gnuplot/gnuplot-4.0.0/term.patch delete mode 100644 packages/gnuplot/gnuplot-4.2.0/.mtn2git_empty delete mode 100644 packages/gnuplot/gnuplot-4.2.0/subdirs.patch delete mode 100644 packages/gnuplot/gnuplot-4.2.0/term.patch delete mode 100644 packages/gnuplot/gnuplot_4.2.0.bb create mode 100644 packages/gnuplot/gnuplot_4.2.2.bb create mode 100644 packages/gnuplot/gnuplot_cvs.bb diff --git a/conf/distro/include/angstrom-2007-preferred-versions.inc b/conf/distro/include/angstrom-2007-preferred-versions.inc index 156b5b21a3..02e2399e4e 100644 --- a/conf/distro/include/angstrom-2007-preferred-versions.inc +++ b/conf/distro/include/angstrom-2007-preferred-versions.inc @@ -509,7 +509,7 @@ PREFERRED_VERSION_gnomesword ?= "2.1.2" PREFERRED_VERSION_gnuchess ?= "5.05" PREFERRED_VERSION_gnumeric ?= "1.6.3" PREFERRED_VERSION_gnupg ?= "1.4.2.2" -PREFERRED_VERSION_gnuplot ?= "4.2.0" +PREFERRED_VERSION_gnuplot ?= "4.2.2" PREFERRED_VERSION_gnuradio ?= "3.0.4" PREFERRED_VERSION_gnutls ?= "1.6.3" PREFERRED_VERSION_gob2 ?= "2.0.14" diff --git a/packages/gnuplot/files/debian-separate-x11-package.patch b/packages/gnuplot/files/debian-separate-x11-package.patch deleted file mode 100644 index 7afa0ee00e..0000000000 --- a/packages/gnuplot/files/debian-separate-x11-package.patch +++ /dev/null @@ -1,59 +0,0 @@ ---- gnuplot-4.0.0.orig/src/term.c -+++ gnuplot-4.0.0/src/term.c -@@ -1278,6 +1278,33 @@ - return (t); - } - -+#ifdef X11 -+int -+x11driver_found() -+{ -+ char *binname = "/gnuplot_x11"; -+ char *fullname; -+ struct stat buf; -+ -+ fullname = (char*)malloc(sizeof(X11_DRIVER_DIR) + sizeof(binname) + 1); -+ strcat(fullname, X11_DRIVER_DIR); -+ strcat(fullname, binname); -+ -+ /* exists? */ -+ if (stat(fullname, &buf)) { -+ free(fullname); -+ return 0; -+ } -+ -+ free(fullname); -+ /* executable? */ -+ if (buf.st_mode && S_IXOTH) -+ return 1; -+ -+ return 0; -+} -+#endif -+ - /* - * Routine to detect what terminal is being used (or do anything else - * that would be nice). One anticipated (or allowed for) side effect -@@ -1356,12 +1383,18 @@ - env_term = getenv("TERM"); /* try $TERM */ - if (term_name == (char *) NULL - && env_term != (char *) NULL && strcmp(env_term, "xterm") == 0) -- term_name = "x11"; -+ term_name = "x11"; - display = getenv("DISPLAY"); - if (term_name == (char *) NULL && display != (char *) NULL) -- term_name = "x11"; -+ term_name = "x11"; - if (X11_Display) -- term_name = "x11"; -+ term_name = "x11"; -+ /* if x11 was selected check for driver */ -+ if (term_name && (strcmp(term_name, "x11") == 0) && !x11driver_found() && isatty(fileno(stdin))) { -+ printf("*** X11 output driver not found, switching to dumb terminal!\n"); -+ printf("*** If you want to use the X11 output, please install the ""gnuplot-x11"" package\n"); -+ term_name = "dumb"; -+ }; - #endif /* x11 */ - - #ifdef AMIGA - diff --git a/packages/gnuplot/files/matrix.patch b/packages/gnuplot/files/matrix.patch deleted file mode 100644 index 10f56d9f6a..0000000000 --- a/packages/gnuplot/files/matrix.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- gnuplot-4.0.0/src/matrix.c.old 2004-04-13 18:23:58.000000000 +0100 -+++ gnuplot-4.0.0/src/matrix.c 2005-03-01 12:38:07.068232748 +0000 -@@ -290,9 +290,12 @@ - *d = 1.0; - for (ar = a, lim = &(a[n]); ar < lim; ar++) { - large = 0.0; -- for (ac = *ar, limc = &(ac[n]); ac < limc;) -- if ((temp = fabs(*ac++)) > large) -+ for (ac = *ar, limc = &(ac[n]); ac < limc;){ -+ temp = *ac++; -+ temp = fabs(temp); -+ if (temp > large) - large = temp; -+ } - if (large == 0.0) - int_error(NO_CARET, "Singular matrix in LU-DECOMP"); - *dp++ = 1 / large; diff --git a/packages/gnuplot/files/subdirs.patch b/packages/gnuplot/files/subdirs.patch index 69c7753973..8c7d1f0d35 100644 --- a/packages/gnuplot/files/subdirs.patch +++ b/packages/gnuplot/files/subdirs.patch @@ -1,16 +1,11 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- gnuplot-4.0.0/Makefile.am~nodocs -+++ gnuplot-4.0.0/Makefile.am +--- /tmp/Makefile.am 2007-08-23 13:10:15.560659023 +0200 ++++ gnuplot-4.2.0/Makefile.am 2007-08-23 13:10:34.961764629 +0200 @@ -1,7 +1,7 @@ ## Process this file with automake to produce Makefile.in -*-Makefile-*- AUTOMAKE_OPTIONS = foreign 1.2h --SUBDIRS = config m4 term src docs lisp man demo tutorial -+SUBDIRS = config m4 term src man tutorial +-SUBDIRS = config m4 term src docs $(LISPDIR) man demo tutorial share ++SUBDIRS = config m4 term src $(LISPDIR) man share EXTRA_DIST = BUGS CodeStyle Copyright FAQ GNUmakefile INSTALL INSTALL.gnu \ Makefile.maint PATCHLEVEL PGPKEYS PORTING README README.1ST README.exp \ diff --git a/packages/gnuplot/files/term.patch b/packages/gnuplot/files/term.patch index 2979b5ec9e..41aa8e7a97 100644 --- a/packages/gnuplot/files/term.patch +++ b/packages/gnuplot/files/term.patch @@ -1,14 +1,14 @@ ---- gnuplot-4.0.0/src/term.h.old 2005-03-01 15:17:46.424111687 +0000 -+++ gnuplot-4.0.0/src/term.h 2005-03-01 15:18:50.961405665 +0000 -@@ -54,6 +54,7 @@ +--- gnuplot-4.2.0/src/term.h.old 2007-11-16 01:21:09.000000000 -0600 ++++ gnuplot-4.2.0/src/term.h 2007-11-16 01:22:45.000000000 -0600 +@@ -70,6 +70,7 @@ */ #ifdef SHORT_TERMLIST # include "dumb.trm" /* dumb terminal */ +# include "qtopia.trm" /* QTopia terminal */ - # include "post.trm" /* postscript */ - # include "table.trm" /* built-in, but used for the documentation */ - # if !(defined(OS2) || defined(MSDOS) || defined(_Windows) || defined(ATARI) || defined(MTOS) || defined(AMIGA)) -@@ -432,6 +433,9 @@ + + # ifdef GP_ENH_EST + # include "estimate.trm" /* used for enhanced text processing */ +@@ -436,6 +437,9 @@ /* TeXDraw drawing package for LaTeX */ #include "texdraw.trm" diff --git a/packages/gnuplot/gnuplot-4.0.0/.mtn2git_empty b/packages/gnuplot/gnuplot-4.0.0/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/gnuplot/gnuplot-4.0.0/debian-separate-x11-package.patch b/packages/gnuplot/gnuplot-4.0.0/debian-separate-x11-package.patch new file mode 100644 index 0000000000..7afa0ee00e --- /dev/null +++ b/packages/gnuplot/gnuplot-4.0.0/debian-separate-x11-package.patch @@ -0,0 +1,59 @@ +--- gnuplot-4.0.0.orig/src/term.c ++++ gnuplot-4.0.0/src/term.c +@@ -1278,6 +1278,33 @@ + return (t); + } + ++#ifdef X11 ++int ++x11driver_found() ++{ ++ char *binname = "/gnuplot_x11"; ++ char *fullname; ++ struct stat buf; ++ ++ fullname = (char*)malloc(sizeof(X11_DRIVER_DIR) + sizeof(binname) + 1); ++ strcat(fullname, X11_DRIVER_DIR); ++ strcat(fullname, binname); ++ ++ /* exists? */ ++ if (stat(fullname, &buf)) { ++ free(fullname); ++ return 0; ++ } ++ ++ free(fullname); ++ /* executable? */ ++ if (buf.st_mode && S_IXOTH) ++ return 1; ++ ++ return 0; ++} ++#endif ++ + /* + * Routine to detect what terminal is being used (or do anything else + * that would be nice). One anticipated (or allowed for) side effect +@@ -1356,12 +1383,18 @@ + env_term = getenv("TERM"); /* try $TERM */ + if (term_name == (char *) NULL + && env_term != (char *) NULL && strcmp(env_term, "xterm") == 0) +- term_name = "x11"; ++ term_name = "x11"; + display = getenv("DISPLAY"); + if (term_name == (char *) NULL && display != (char *) NULL) +- term_name = "x11"; ++ term_name = "x11"; + if (X11_Display) +- term_name = "x11"; ++ term_name = "x11"; ++ /* if x11 was selected check for driver */ ++ if (term_name && (strcmp(term_name, "x11") == 0) && !x11driver_found() && isatty(fileno(stdin))) { ++ printf("*** X11 output driver not found, switching to dumb terminal!\n"); ++ printf("*** If you want to use the X11 output, please install the ""gnuplot-x11"" package\n"); ++ term_name = "dumb"; ++ }; + #endif /* x11 */ + + #ifdef AMIGA + diff --git a/packages/gnuplot/gnuplot-4.0.0/matrix.patch b/packages/gnuplot/gnuplot-4.0.0/matrix.patch new file mode 100644 index 0000000000..10f56d9f6a --- /dev/null +++ b/packages/gnuplot/gnuplot-4.0.0/matrix.patch @@ -0,0 +1,17 @@ +--- gnuplot-4.0.0/src/matrix.c.old 2004-04-13 18:23:58.000000000 +0100 ++++ gnuplot-4.0.0/src/matrix.c 2005-03-01 12:38:07.068232748 +0000 +@@ -290,9 +290,12 @@ + *d = 1.0; + for (ar = a, lim = &(a[n]); ar < lim; ar++) { + large = 0.0; +- for (ac = *ar, limc = &(ac[n]); ac < limc;) +- if ((temp = fabs(*ac++)) > large) ++ for (ac = *ar, limc = &(ac[n]); ac < limc;){ ++ temp = *ac++; ++ temp = fabs(temp); ++ if (temp > large) + large = temp; ++ } + if (large == 0.0) + int_error(NO_CARET, "Singular matrix in LU-DECOMP"); + *dp++ = 1 / large; diff --git a/packages/gnuplot/gnuplot-4.0.0/subdirs.patch b/packages/gnuplot/gnuplot-4.0.0/subdirs.patch new file mode 100644 index 0000000000..69c7753973 --- /dev/null +++ b/packages/gnuplot/gnuplot-4.0.0/subdirs.patch @@ -0,0 +1,16 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- gnuplot-4.0.0/Makefile.am~nodocs ++++ gnuplot-4.0.0/Makefile.am +@@ -1,7 +1,7 @@ + ## Process this file with automake to produce Makefile.in -*-Makefile-*- + AUTOMAKE_OPTIONS = foreign 1.2h + +-SUBDIRS = config m4 term src docs lisp man demo tutorial ++SUBDIRS = config m4 term src man tutorial + + EXTRA_DIST = BUGS CodeStyle Copyright FAQ GNUmakefile INSTALL INSTALL.gnu \ + Makefile.maint PATCHLEVEL PGPKEYS PORTING README README.1ST README.exp \ diff --git a/packages/gnuplot/gnuplot-4.0.0/term.patch b/packages/gnuplot/gnuplot-4.0.0/term.patch new file mode 100644 index 0000000000..2979b5ec9e --- /dev/null +++ b/packages/gnuplot/gnuplot-4.0.0/term.patch @@ -0,0 +1,20 @@ +--- gnuplot-4.0.0/src/term.h.old 2005-03-01 15:17:46.424111687 +0000 ++++ gnuplot-4.0.0/src/term.h 2005-03-01 15:18:50.961405665 +0000 +@@ -54,6 +54,7 @@ + */ + #ifdef SHORT_TERMLIST + # include "dumb.trm" /* dumb terminal */ ++# include "qtopia.trm" /* QTopia terminal */ + # include "post.trm" /* postscript */ + # include "table.trm" /* built-in, but used for the documentation */ + # if !(defined(OS2) || defined(MSDOS) || defined(_Windows) || defined(ATARI) || defined(MTOS) || defined(AMIGA)) +@@ -432,6 +433,9 @@ + /* TeXDraw drawing package for LaTeX */ + #include "texdraw.trm" + ++/* Qtopia */ ++#include "qtopia.trm" ++ + /* METAFONT */ + #include "metafont.trm" + diff --git a/packages/gnuplot/gnuplot-4.2.0/.mtn2git_empty b/packages/gnuplot/gnuplot-4.2.0/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gnuplot/gnuplot-4.2.0/subdirs.patch b/packages/gnuplot/gnuplot-4.2.0/subdirs.patch deleted file mode 100644 index 8c7d1f0d35..0000000000 --- a/packages/gnuplot/gnuplot-4.2.0/subdirs.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- /tmp/Makefile.am 2007-08-23 13:10:15.560659023 +0200 -+++ gnuplot-4.2.0/Makefile.am 2007-08-23 13:10:34.961764629 +0200 -@@ -1,7 +1,7 @@ - ## Process this file with automake to produce Makefile.in -*-Makefile-*- - AUTOMAKE_OPTIONS = foreign 1.2h - --SUBDIRS = config m4 term src docs $(LISPDIR) man demo tutorial share -+SUBDIRS = config m4 term src $(LISPDIR) man share - - EXTRA_DIST = BUGS CodeStyle Copyright FAQ GNUmakefile INSTALL INSTALL.gnu \ - Makefile.maint PATCHLEVEL PGPKEYS PORTING README README.1ST README.exp \ diff --git a/packages/gnuplot/gnuplot-4.2.0/term.patch b/packages/gnuplot/gnuplot-4.2.0/term.patch deleted file mode 100644 index 41aa8e7a97..0000000000 --- a/packages/gnuplot/gnuplot-4.2.0/term.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- gnuplot-4.2.0/src/term.h.old 2007-11-16 01:21:09.000000000 -0600 -+++ gnuplot-4.2.0/src/term.h 2007-11-16 01:22:45.000000000 -0600 -@@ -70,6 +70,7 @@ - */ - #ifdef SHORT_TERMLIST - # include "dumb.trm" /* dumb terminal */ -+# include "qtopia.trm" /* QTopia terminal */ - - # ifdef GP_ENH_EST - # include "estimate.trm" /* used for enhanced text processing */ -@@ -436,6 +437,9 @@ - /* TeXDraw drawing package for LaTeX */ - #include "texdraw.trm" - -+/* Qtopia */ -+#include "qtopia.trm" -+ - /* METAFONT */ - #include "metafont.trm" - diff --git a/packages/gnuplot/gnuplot_4.2.0.bb b/packages/gnuplot/gnuplot_4.2.0.bb deleted file mode 100644 index 1df0c9fa21..0000000000 --- a/packages/gnuplot/gnuplot_4.2.0.bb +++ /dev/null @@ -1,10 +0,0 @@ -require gnuplot.inc - -PR = "r1" - -SRC_URI = "${SOURCEFORGE_MIRROR}/gnuplot/${PN}-${PV}.tar.gz \ - http://www.mneuroth.de/privat/zaurus/qtplot-0.2.tar.gz \ - file://subdirs.patch;patch=1 \ - file://term.patch;patch=1 \ - file://gnuplot.desktop \ - file://gnuplot.png" diff --git a/packages/gnuplot/gnuplot_4.2.2.bb b/packages/gnuplot/gnuplot_4.2.2.bb new file mode 100644 index 0000000000..478f6e2b0f --- /dev/null +++ b/packages/gnuplot/gnuplot_4.2.2.bb @@ -0,0 +1,10 @@ +require gnuplot.inc + +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/gnuplot/${PN}-${PV}.tar.gz \ + http://www.mneuroth.de/privat/zaurus/qtplot-0.2.tar.gz \ + file://subdirs.patch;patch=1 \ + file://term.patch;patch=1 \ + file://gnuplot.desktop \ + file://gnuplot.png" diff --git a/packages/gnuplot/gnuplot_cvs.bb b/packages/gnuplot/gnuplot_cvs.bb new file mode 100644 index 0000000000..d63d31a492 --- /dev/null +++ b/packages/gnuplot/gnuplot_cvs.bb @@ -0,0 +1,17 @@ +require gnuplot.inc + +PV = "4.3.0+cvs${SRCDATE}" +PR = "r0" + +SRC_URI = "cvs://anonymous@gnuplot.cvs.sourceforge.net/cvsroot/${PN};module=${PN} \ + http://www.mneuroth.de/privat/zaurus/qtplot-0.2.tar.gz \ + file://subdirs.patch;patch=1 \ + file://term.patch;patch=1 \ + file://gnuplot.desktop \ + file://gnuplot.png" + +S = "${WORKDIR}/${PN}" + +do_configure_prepend() { + ./prepare +} -- cgit v1.2.3 From b91082455470d09ff8302e07ccac9920c8a2a924 Mon Sep 17 00:00:00 2001 From: Matthias Hentges Date: Sun, 27 Jan 2008 18:45:13 +0000 Subject: altboot: Try unb0rking collies keyboard once again... --- packages/altboot/altboot_1.1.1+wip-SVNR77.bb | 76 ---------------------------- packages/altboot/altboot_1.1.1+wip-SVNR78.bb | 76 ++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 76 deletions(-) delete mode 100644 packages/altboot/altboot_1.1.1+wip-SVNR77.bb create mode 100644 packages/altboot/altboot_1.1.1+wip-SVNR78.bb diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR77.bb b/packages/altboot/altboot_1.1.1+wip-SVNR77.bb deleted file mode 100644 index 425efec8fd..0000000000 --- a/packages/altboot/altboot_1.1.1+wip-SVNR77.bb +++ /dev/null @@ -1,76 +0,0 @@ -require altboot.inc - -PR = "r0" - -SVN_REV = "77" -SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \ - " - -do_install() { - install -d ${D}/sbin - install -d ${D}/etc/altboot-menu - install -d ${D}/etc/altboot.rc - install -d ${D}/usr/share/doc/altboot - install -d ${D}/usr/share/sounds - - if test -d ${S}/${MACHINE_DIR} - then - install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/ - else - install -m 0644 ${S}/altboot*.cfg ${D}/etc/ - fi - - install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds - install -m 0644 ${S}/altboot.func ${D}/etc - install -m 0644 ${S}/altboot.sbin ${D}/etc - install -m 0644 ${S}/altbootctl.conf ${D}/etc - install -m 0755 ${S}/init.altboot ${D}/sbin - install -m 0755 ${S}/altbootctl ${D}/sbin - - ln -s /sbin/init.altboot ${D}/sbin/altboot - - if test -d ${S}/${MACHINE_DIR}/altboot-menu - then - install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu - - if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced - then - install -d ${D}/etc/altboot-menu/Advanced - install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced - fi - else - install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu - - if test -d ${S}/altboot-menu/Advanced - then - install -d ${D}/etc/altboot-menu/Advanced - install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced - fi - fi - - if test -d ${S}/${MACHINE_DIR}/altboot.rc - then - install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc - install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc - else - install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc - install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc - fi -} - -do_configure() { - cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_ - mv ${S}/init.altboot_ ${S}/init.altboot -} - -pkg_postinst_${PN}() { - test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55 - - update-alternatives --install /sbin/init init /sbin/init.altboot 55 -} - -pkg_postrm_${PN}() { - test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot - - update-alternatives --remove init /sbin/init.altboot -} diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR78.bb b/packages/altboot/altboot_1.1.1+wip-SVNR78.bb new file mode 100644 index 0000000000..b74bc7baa4 --- /dev/null +++ b/packages/altboot/altboot_1.1.1+wip-SVNR78.bb @@ -0,0 +1,76 @@ +require altboot.inc + +PR = "r0" + +SVN_REV = "78" +SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \ + " + +do_install() { + install -d ${D}/sbin + install -d ${D}/etc/altboot-menu + install -d ${D}/etc/altboot.rc + install -d ${D}/usr/share/doc/altboot + install -d ${D}/usr/share/sounds + + if test -d ${S}/${MACHINE_DIR} + then + install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/ + else + install -m 0644 ${S}/altboot*.cfg ${D}/etc/ + fi + + install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds + install -m 0644 ${S}/altboot.func ${D}/etc + install -m 0644 ${S}/altboot.sbin ${D}/etc + install -m 0644 ${S}/altbootctl.conf ${D}/etc + install -m 0755 ${S}/init.altboot ${D}/sbin + install -m 0755 ${S}/altbootctl ${D}/sbin + + ln -s /sbin/init.altboot ${D}/sbin/altboot + + if test -d ${S}/${MACHINE_DIR}/altboot-menu + then + install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu + + if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced + then + install -d ${D}/etc/altboot-menu/Advanced + install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced + fi + else + install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu + + if test -d ${S}/altboot-menu/Advanced + then + install -d ${D}/etc/altboot-menu/Advanced + install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced + fi + fi + + if test -d ${S}/${MACHINE_DIR}/altboot.rc + then + install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc + install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc + else + install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc + install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc + fi +} + +do_configure() { + cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_ + mv ${S}/init.altboot_ ${S}/init.altboot +} + +pkg_postinst_${PN}() { + test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55 + + update-alternatives --install /sbin/init init /sbin/init.altboot 55 +} + +pkg_postrm_${PN}() { + test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot + + update-alternatives --remove init /sbin/init.altboot +} -- cgit v1.2.3 From 9c4f7421160e01a6e7ff83c8d4bc815ee974a0dd Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 28 Jan 2008 00:01:13 +0000 Subject: xorg: Add packages accidently dropped in 778aeb6e918d6ec53d4abbfa67d0d3832c8d717e, updated to match current version scheme (thanks to pb_ for spotting) --- packages/xorg-app/bdftopcf-native_1.0.0.bb | 13 +++++++++++++ packages/xorg-app/bitmap_1.0.2.bb | 5 +++++ packages/xorg-app/fslsfonts_1.0.1.bb | 5 +++++ packages/xorg-app/fstobdf_1.0.2.bb | 5 +++++ packages/xorg-app/lbxproxy_1.0.1.bb | 7 +++++++ packages/xorg-app/listres_1.0.1.bb | 5 +++++ packages/xorg-app/mkcfm_1.0.1.bb | 5 +++++ packages/xorg-app/oclock_1.0.1.bb | 5 +++++ packages/xorg-app/proxymngr_1.0.1.bb | 5 +++++ packages/xorg-app/rgb_1.0.1.bb | 8 ++++++++ packages/xorg-app/rstart_1.0.2.bb | 5 +++++ packages/xorg-app/scripts_1.0.1.bb | 6 ++++++ packages/xorg-app/showfont_1.0.1.bb | 5 +++++ packages/xorg-app/smproxy_1.0.2.bb | 5 +++++ packages/xorg-app/viewres_1.0.1.bb | 5 +++++ packages/xorg-app/xbiff_1.0.1.bb | 5 +++++ packages/xorg-app/xcalc_1.0.1.bb | 5 +++++ packages/xorg-app/xclipboard_1.0.1.bb | 5 +++++ packages/xorg-app/xclock_1.0.2.bb | 5 +++++ packages/xorg-app/xcmsdb_1.0.1.bb | 5 +++++ packages/xorg-app/xconsole_1.0.2.bb | 5 +++++ packages/xorg-app/xcursorgen_1.0.1.bb | 5 +++++ packages/xorg-app/xditview_1.0.1.bb | 5 +++++ packages/xorg-app/xdriinfo_1.0.1.bb | 5 +++++ packages/xorg-app/xedit_1.0.2.bb | 5 +++++ packages/xorg-app/xeyes_1.0.1.bb | 4 ++++ packages/xorg-app/xfd_1.0.1.bb | 5 +++++ packages/xorg-app/xfindproxy_1.0.1.bb | 5 +++++ packages/xorg-app/xfsinfo_1.0.1.bb | 5 +++++ packages/xorg-app/xfwp_1.0.1.bb | 5 +++++ packages/xorg-app/xgamma_1.0.1.bb | 5 +++++ packages/xorg-app/xgc_1.0.1.bb | 5 +++++ packages/xorg-app/xkbevd_1.0.2.bb | 5 +++++ packages/xorg-app/xkbprint_1.0.1.bb | 5 +++++ packages/xorg-app/xkill_1.0.1.bb | 5 +++++ packages/xorg-app/xload_1.0.1.bb | 5 +++++ packages/xorg-app/xlogo_1.0.1.bb | 5 +++++ packages/xorg-app/xlsatoms_1.0.1.bb | 5 +++++ packages/xorg-app/xlsclients_1.0.1.bb | 5 +++++ packages/xorg-app/xmag_1.0.1.bb | 5 +++++ packages/xorg-app/xman_1.0.2.bb | 7 +++++++ packages/xorg-app/xmessage_1.0.1.bb | 7 +++++++ packages/xorg-app/xmh_1.0.1.bb | 5 +++++ packages/xorg-app/xmore_1.0.1.bb | 5 +++++ packages/xorg-app/xphelloworld_1.0.1.bb | 5 +++++ packages/xorg-app/xplsprinters_1.0.1.bb | 5 +++++ packages/xorg-app/xpr_1.0.1.bb | 5 +++++ packages/xorg-app/xprehashprinterlist_1.0.1.bb | 5 +++++ packages/xorg-app/xrefresh_1.0.2.bb | 5 +++++ packages/xorg-app/xrx_1.0.1.bb | 5 +++++ packages/xorg-app/xsetmode_1.0.0.bb | 5 +++++ packages/xorg-app/xsetpointer_1.0.0.bb | 5 +++++ packages/xorg-app/xsm_1.0.1.bb | 7 +++++++ packages/xorg-app/xstdcmap_1.0.1.bb | 5 +++++ packages/xorg-app/xtrap_1.0.2.bb | 5 +++++ packages/xorg-app/xvidtune_1.0.1.bb | 5 +++++ packages/xorg-app/xwd_1.0.1.bb | 5 +++++ packages/xorg-app/xwininfo_1.0.2.bb | 5 +++++ packages/xorg-app/xwud_1.0.1.bb | 5 +++++ packages/xorg-data/xcursor-themes_1.0.1.bb | 5 +++++ packages/xorg-data/xkbdata_1.0.1.bb | 7 +++++++ packages/xorg-doc/xorg-doc-common.inc | 5 ++--- packages/xorg-doc/xorg-docs_1.0.1.bb | 11 +++++++++++ packages/xorg-doc/xorg-docs_1.2.bb | 11 +++++++++++ packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb | 4 ---- packages/xorg-doc/xorg-sgml-doctools_1.2.bb | 4 ---- packages/xorg-driver/xf86-input-acecad_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-input-aiptek_1.0.1.bb | 2 ++ packages/xorg-driver/xf86-input-calcomp_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-input-citron_2.2.0.bb | 3 +++ packages/xorg-driver/xf86-input-digitaledge_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-input-dmc_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-input-dynapro_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-input-elo2300_1.1.0.bb | 3 +++ .../xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb | 2 ++ packages/xorg-driver/xf86-input-fpit_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-input-hyperpen_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-input-jamstudio_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-input-joystick_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-input-magellan_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-input-magictouch_1.0.0.5.bb | 3 +++ packages/xorg-driver/xf86-input-microtouch_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-input-mutouch_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-input-palmax_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-input-spaceorb_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-input-summa_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-input-tek4957_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-input-ur98_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-input-vmmouse_12.4.0.bb | 7 +++++++ packages/xorg-driver/xf86-input-void_1.1.0.bb | 3 +++ packages/xorg-driver/xf86-video-apm_1.1.1.bb | 7 +++++++ packages/xorg-driver/xf86-video-ark_0.6.0.bb | 2 ++ packages/xorg-driver/xf86-video-ast_0.81.0.bb | 2 ++ packages/xorg-driver/xf86-video-chips_1.1.1.bb | 2 ++ packages/xorg-driver/xf86-video-cirrus_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-video-cyrix_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-video-dummy_0.2.0.bb | 2 ++ packages/xorg-driver/xf86-video-glint_1.1.1.bb | 5 +++++ packages/xorg-driver/xf86-video-i128_1.1.0.5.bb | 5 +++++ packages/xorg-driver/xf86-video-i740_1.1.0.bb | 5 +++++ packages/xorg-driver/xf86-video-imstt_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-video-mga_1.4.1.bb | 2 ++ packages/xorg-driver/xf86-video-neomagic_1.1.1.bb | 8 ++++++++ packages/xorg-driver/xf86-video-s3virge_1.9.1.bb | 2 ++ packages/xorg-driver/xf86-video-sisusb_0.8.1.bb | 6 ++++++ packages/xorg-driver/xf86-video-sunbw2_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-video-suncg14_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-video-suncg3_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-video-suncg6_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-video-sunffb_1.1.0.bb | 4 ++++ packages/xorg-driver/xf86-video-sunleo_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-video-suntcx_1.1.0.bb | 2 ++ packages/xorg-driver/xf86-video-tga_1.1.0.bb | 8 ++++++++ packages/xorg-driver/xf86-video-v4l_0.1.1.bb | 5 +++++ packages/xorg-driver/xf86-video-vga_4.1.0.bb | 2 ++ packages/xorg-driver/xorg-driver-common.inc | 3 +-- packages/xorg-font/font-adobe-100dpi_1.0.0.bb | 3 +++ packages/xorg-font/font-adobe-75dpi_1.0.0.bb | 2 ++ packages/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb | 5 +++++ packages/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb | 6 ++++++ packages/xorg-font/font-adobe-utopia-type1_1.0.1.bb | 6 ++++++ packages/xorg-font/font-alias_1.0.1.bb | 8 ++++++++ packages/xorg-font/font-arabic-misc_1.0.0.bb | 7 +++++++ packages/xorg-font/font-bh-100dpi_1.0.0.bb | 3 +++ packages/xorg-font/font-bh-75dpi_1.0.0.bb | 3 +++ packages/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb | 3 +++ packages/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb | 3 +++ packages/xorg-font/font-bh-ttf_1.0.0.bb | 3 +++ packages/xorg-font/font-bh-type1_1.0.0.bb | 3 +++ packages/xorg-font/font-bitstream-100dpi_1.0.0.bb | 3 +++ packages/xorg-font/font-bitstream-75dpi_1.0.0.bb | 2 ++ packages/xorg-font/font-bitstream-speedo_1.0.0.bb | 2 ++ packages/xorg-font/font-bitstream-type1_1.0.0.bb | 2 ++ packages/xorg-font/font-cronyx-cyrillic_1.0.0.bb | 2 ++ packages/xorg-font/font-cursor-misc_1.0.0.bb | 2 ++ packages/xorg-font/font-daewoo-misc_1.0.0.bb | 2 ++ packages/xorg-font/font-dec-misc_1.0.0.bb | 2 ++ packages/xorg-font/font-ibm-type1_1.0.0.bb | 2 ++ packages/xorg-font/font-isas-misc_1.0.0.bb | 2 ++ packages/xorg-font/font-jis-misc_1.0.0.bb | 2 ++ packages/xorg-font/font-micro-misc_1.0.0.bb | 4 ++++ packages/xorg-font/font-misc-cyrillic_1.0.0.bb | 2 ++ packages/xorg-font/font-misc-ethiopic_1.0.0.bb | 2 ++ packages/xorg-font/font-misc-meltho_1.0.0.bb | 5 +++++ packages/xorg-font/font-mutt-misc_1.0.0.bb | 7 +++++++ packages/xorg-font/font-schumacher-misc_1.0.0.bb | 2 ++ packages/xorg-font/font-screen-cyrillic_1.0.0.bb | 2 ++ packages/xorg-font/font-sony-misc_1.0.0.bb | 2 ++ packages/xorg-font/font-sun-misc_1.0.0.bb | 2 ++ packages/xorg-font/font-util-native_1.0.1.bb | 13 +++++++++++++ packages/xorg-font/font-util_1.0.1.bb | 9 +++++++++ packages/xorg-font/font-winitzki-cyrillic_1.0.0.bb | 3 +++ packages/xorg-font/font-xfree86-type1_1.0.0.bb | 3 +++ packages/xorg-font/xorg-font-common.inc | 3 +-- 154 files changed, 637 insertions(+), 15 deletions(-) create mode 100644 packages/xorg-app/bdftopcf-native_1.0.0.bb create mode 100644 packages/xorg-app/bitmap_1.0.2.bb create mode 100644 packages/xorg-app/fslsfonts_1.0.1.bb create mode 100644 packages/xorg-app/fstobdf_1.0.2.bb create mode 100644 packages/xorg-app/lbxproxy_1.0.1.bb create mode 100644 packages/xorg-app/listres_1.0.1.bb create mode 100644 packages/xorg-app/mkcfm_1.0.1.bb create mode 100644 packages/xorg-app/oclock_1.0.1.bb create mode 100644 packages/xorg-app/proxymngr_1.0.1.bb create mode 100644 packages/xorg-app/rgb_1.0.1.bb create mode 100644 packages/xorg-app/rstart_1.0.2.bb create mode 100644 packages/xorg-app/scripts_1.0.1.bb create mode 100644 packages/xorg-app/showfont_1.0.1.bb create mode 100644 packages/xorg-app/smproxy_1.0.2.bb create mode 100644 packages/xorg-app/viewres_1.0.1.bb create mode 100644 packages/xorg-app/xbiff_1.0.1.bb create mode 100644 packages/xorg-app/xcalc_1.0.1.bb create mode 100644 packages/xorg-app/xclipboard_1.0.1.bb create mode 100644 packages/xorg-app/xclock_1.0.2.bb create mode 100644 packages/xorg-app/xcmsdb_1.0.1.bb create mode 100644 packages/xorg-app/xconsole_1.0.2.bb create mode 100644 packages/xorg-app/xcursorgen_1.0.1.bb create mode 100644 packages/xorg-app/xditview_1.0.1.bb create mode 100644 packages/xorg-app/xdriinfo_1.0.1.bb create mode 100644 packages/xorg-app/xedit_1.0.2.bb create mode 100644 packages/xorg-app/xeyes_1.0.1.bb create mode 100644 packages/xorg-app/xfd_1.0.1.bb create mode 100644 packages/xorg-app/xfindproxy_1.0.1.bb create mode 100644 packages/xorg-app/xfsinfo_1.0.1.bb create mode 100644 packages/xorg-app/xfwp_1.0.1.bb create mode 100644 packages/xorg-app/xgamma_1.0.1.bb create mode 100644 packages/xorg-app/xgc_1.0.1.bb create mode 100644 packages/xorg-app/xkbevd_1.0.2.bb create mode 100644 packages/xorg-app/xkbprint_1.0.1.bb create mode 100644 packages/xorg-app/xkill_1.0.1.bb create mode 100644 packages/xorg-app/xload_1.0.1.bb create mode 100644 packages/xorg-app/xlogo_1.0.1.bb create mode 100644 packages/xorg-app/xlsatoms_1.0.1.bb create mode 100644 packages/xorg-app/xlsclients_1.0.1.bb create mode 100644 packages/xorg-app/xmag_1.0.1.bb create mode 100644 packages/xorg-app/xman_1.0.2.bb create mode 100644 packages/xorg-app/xmessage_1.0.1.bb create mode 100644 packages/xorg-app/xmh_1.0.1.bb create mode 100644 packages/xorg-app/xmore_1.0.1.bb create mode 100644 packages/xorg-app/xphelloworld_1.0.1.bb create mode 100644 packages/xorg-app/xplsprinters_1.0.1.bb create mode 100644 packages/xorg-app/xpr_1.0.1.bb create mode 100644 packages/xorg-app/xprehashprinterlist_1.0.1.bb create mode 100644 packages/xorg-app/xrefresh_1.0.2.bb create mode 100644 packages/xorg-app/xrx_1.0.1.bb create mode 100644 packages/xorg-app/xsetmode_1.0.0.bb create mode 100644 packages/xorg-app/xsetpointer_1.0.0.bb create mode 100644 packages/xorg-app/xsm_1.0.1.bb create mode 100644 packages/xorg-app/xstdcmap_1.0.1.bb create mode 100644 packages/xorg-app/xtrap_1.0.2.bb create mode 100644 packages/xorg-app/xvidtune_1.0.1.bb create mode 100644 packages/xorg-app/xwd_1.0.1.bb create mode 100644 packages/xorg-app/xwininfo_1.0.2.bb create mode 100644 packages/xorg-app/xwud_1.0.1.bb create mode 100644 packages/xorg-data/xcursor-themes_1.0.1.bb create mode 100644 packages/xorg-data/xkbdata_1.0.1.bb create mode 100644 packages/xorg-doc/xorg-docs_1.0.1.bb create mode 100644 packages/xorg-doc/xorg-docs_1.2.bb create mode 100644 packages/xorg-driver/xf86-input-acecad_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-aiptek_1.0.1.bb create mode 100644 packages/xorg-driver/xf86-input-calcomp_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-citron_2.2.0.bb create mode 100644 packages/xorg-driver/xf86-input-digitaledge_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-dmc_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-dynapro_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-elo2300_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb create mode 100644 packages/xorg-driver/xf86-input-fpit_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-hyperpen_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-jamstudio_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-joystick_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-magellan_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-magictouch_1.0.0.5.bb create mode 100644 packages/xorg-driver/xf86-input-microtouch_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-mutouch_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-palmax_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-spaceorb_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-summa_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-tek4957_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-ur98_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-input-vmmouse_12.4.0.bb create mode 100644 packages/xorg-driver/xf86-input-void_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-apm_1.1.1.bb create mode 100644 packages/xorg-driver/xf86-video-ark_0.6.0.bb create mode 100644 packages/xorg-driver/xf86-video-ast_0.81.0.bb create mode 100644 packages/xorg-driver/xf86-video-chips_1.1.1.bb create mode 100644 packages/xorg-driver/xf86-video-cirrus_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-cyrix_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-dummy_0.2.0.bb create mode 100644 packages/xorg-driver/xf86-video-glint_1.1.1.bb create mode 100644 packages/xorg-driver/xf86-video-i128_1.1.0.5.bb create mode 100644 packages/xorg-driver/xf86-video-i740_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-imstt_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-mga_1.4.1.bb create mode 100644 packages/xorg-driver/xf86-video-neomagic_1.1.1.bb create mode 100644 packages/xorg-driver/xf86-video-s3virge_1.9.1.bb create mode 100644 packages/xorg-driver/xf86-video-sisusb_0.8.1.bb create mode 100644 packages/xorg-driver/xf86-video-sunbw2_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-suncg14_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-suncg3_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-suncg6_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-sunffb_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-sunleo_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-suntcx_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-tga_1.1.0.bb create mode 100644 packages/xorg-driver/xf86-video-v4l_0.1.1.bb create mode 100644 packages/xorg-driver/xf86-video-vga_4.1.0.bb create mode 100644 packages/xorg-font/font-adobe-100dpi_1.0.0.bb create mode 100644 packages/xorg-font/font-adobe-75dpi_1.0.0.bb create mode 100644 packages/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb create mode 100644 packages/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb create mode 100644 packages/xorg-font/font-adobe-utopia-type1_1.0.1.bb create mode 100644 packages/xorg-font/font-alias_1.0.1.bb create mode 100644 packages/xorg-font/font-arabic-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-bh-100dpi_1.0.0.bb create mode 100644 packages/xorg-font/font-bh-75dpi_1.0.0.bb create mode 100644 packages/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb create mode 100644 packages/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb create mode 100644 packages/xorg-font/font-bh-ttf_1.0.0.bb create mode 100644 packages/xorg-font/font-bh-type1_1.0.0.bb create mode 100644 packages/xorg-font/font-bitstream-100dpi_1.0.0.bb create mode 100644 packages/xorg-font/font-bitstream-75dpi_1.0.0.bb create mode 100644 packages/xorg-font/font-bitstream-speedo_1.0.0.bb create mode 100644 packages/xorg-font/font-bitstream-type1_1.0.0.bb create mode 100644 packages/xorg-font/font-cronyx-cyrillic_1.0.0.bb create mode 100644 packages/xorg-font/font-cursor-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-daewoo-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-dec-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-ibm-type1_1.0.0.bb create mode 100644 packages/xorg-font/font-isas-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-jis-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-micro-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-misc-cyrillic_1.0.0.bb create mode 100644 packages/xorg-font/font-misc-ethiopic_1.0.0.bb create mode 100644 packages/xorg-font/font-misc-meltho_1.0.0.bb create mode 100644 packages/xorg-font/font-mutt-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-schumacher-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-screen-cyrillic_1.0.0.bb create mode 100644 packages/xorg-font/font-sony-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-sun-misc_1.0.0.bb create mode 100644 packages/xorg-font/font-util-native_1.0.1.bb create mode 100644 packages/xorg-font/font-util_1.0.1.bb create mode 100644 packages/xorg-font/font-winitzki-cyrillic_1.0.0.bb create mode 100644 packages/xorg-font/font-xfree86-type1_1.0.0.bb diff --git a/packages/xorg-app/bdftopcf-native_1.0.0.bb b/packages/xorg-app/bdftopcf-native_1.0.0.bb new file mode 100644 index 0000000000..8ab592b2b2 --- /dev/null +++ b/packages/xorg-app/bdftopcf-native_1.0.0.bb @@ -0,0 +1,13 @@ +DESCRIPTION = "Native bdftopdf utility" +SECTION = "x11/fonts" +LICENSE = "MIT-X" +PE = "1" + +S="${WORKDIR}/bdftopcf-${PV}" + +DEPENDS = "libxfont-native" + +SRC_URI = "${XORG_MIRROR}/X11R7.0/src/app/bdftopcf-X11R7.0-1.0.0.tar.gz" + +inherit native autotools pkgconfig + diff --git a/packages/xorg-app/bitmap_1.0.2.bb b/packages/xorg-app/bitmap_1.0.2.bb new file mode 100644 index 0000000000..63c5de6cf1 --- /dev/null +++ b/packages/xorg-app/bitmap_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxmu xbitmaps libxt" + diff --git a/packages/xorg-app/fslsfonts_1.0.1.bb b/packages/xorg-app/fslsfonts_1.0.1.bb new file mode 100644 index 0000000000..9ba7ad6030 --- /dev/null +++ b/packages/xorg-app/fslsfonts_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libfs" + diff --git a/packages/xorg-app/fstobdf_1.0.2.bb b/packages/xorg-app/fstobdf_1.0.2.bb new file mode 100644 index 0000000000..9ba7ad6030 --- /dev/null +++ b/packages/xorg-app/fstobdf_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libfs" + diff --git a/packages/xorg-app/lbxproxy_1.0.1.bb b/packages/xorg-app/lbxproxy_1.0.1.bb new file mode 100644 index 0000000000..1303947c27 --- /dev/null +++ b/packages/xorg-app/lbxproxy_1.0.1.bb @@ -0,0 +1,7 @@ +require xorg-app-common.inc +PE = "1" + +DESCRIPTION = "Applications that would like to take advantage of the Low Bandwidth \ +extension to X (LBX) must make their connections to an lbxproxy." + +DEPENDS += " xtrans libxext liblbxutil virtual/libx11 libice xproxymngproto bigreqsproto zlib" diff --git a/packages/xorg-app/listres_1.0.1.bb b/packages/xorg-app/listres_1.0.1.bb new file mode 100644 index 0000000000..97fab10f3d --- /dev/null +++ b/packages/xorg-app/listres_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw virtual/libx11 libxt libxmu" + diff --git a/packages/xorg-app/mkcfm_1.0.1.bb b/packages/xorg-app/mkcfm_1.0.1.bb new file mode 100644 index 0000000000..b177c9023f --- /dev/null +++ b/packages/xorg-app/mkcfm_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxfont libfs libfontenc" + diff --git a/packages/xorg-app/oclock_1.0.1.bb b/packages/xorg-app/oclock_1.0.1.bb new file mode 100644 index 0000000000..b2abeadfb0 --- /dev/null +++ b/packages/xorg-app/oclock_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxmu libxext libxt" + diff --git a/packages/xorg-app/proxymngr_1.0.1.bb b/packages/xorg-app/proxymngr_1.0.1.bb new file mode 100644 index 0000000000..1ee3505645 --- /dev/null +++ b/packages/xorg-app/proxymngr_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libice libxt virtual/libx11 xproxymngproto" + diff --git a/packages/xorg-app/rgb_1.0.1.bb b/packages/xorg-app/rgb_1.0.1.bb new file mode 100644 index 0000000000..5598b6c041 --- /dev/null +++ b/packages/xorg-app/rgb_1.0.1.bb @@ -0,0 +1,8 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " xproto util-macros" + +FILES_${PN} += "${datadir}/X11" + + diff --git a/packages/xorg-app/rstart_1.0.2.bb b/packages/xorg-app/rstart_1.0.2.bb new file mode 100644 index 0000000000..aafaddcf4b --- /dev/null +++ b/packages/xorg-app/rstart_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11" + diff --git a/packages/xorg-app/scripts_1.0.1.bb b/packages/xorg-app/scripts_1.0.1.bb new file mode 100644 index 0000000000..4a06dc621c --- /dev/null +++ b/packages/xorg-app/scripts_1.0.1.bb @@ -0,0 +1,6 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11" + + diff --git a/packages/xorg-app/showfont_1.0.1.bb b/packages/xorg-app/showfont_1.0.1.bb new file mode 100644 index 0000000000..28c0f81c91 --- /dev/null +++ b/packages/xorg-app/showfont_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libfs" + diff --git a/packages/xorg-app/smproxy_1.0.2.bb b/packages/xorg-app/smproxy_1.0.2.bb new file mode 100644 index 0000000000..64b4ec320d --- /dev/null +++ b/packages/xorg-app/smproxy_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxt libxmu" + diff --git a/packages/xorg-app/viewres_1.0.1.bb b/packages/xorg-app/viewres_1.0.1.bb new file mode 100644 index 0000000000..f884467096 --- /dev/null +++ b/packages/xorg-app/viewres_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxt" + diff --git a/packages/xorg-app/xbiff_1.0.1.bb b/packages/xorg-app/xbiff_1.0.1.bb new file mode 100644 index 0000000000..e3264d7684 --- /dev/null +++ b/packages/xorg-app/xbiff_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw xbitmaps libxext" + diff --git a/packages/xorg-app/xcalc_1.0.1.bb b/packages/xorg-app/xcalc_1.0.1.bb new file mode 100644 index 0000000000..2bdb000c5d --- /dev/null +++ b/packages/xorg-app/xcalc_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xclipboard_1.0.1.bb b/packages/xorg-app/xclipboard_1.0.1.bb new file mode 100644 index 0000000000..2bdb000c5d --- /dev/null +++ b/packages/xorg-app/xclipboard_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xclock_1.0.2.bb b/packages/xorg-app/xclock_1.0.2.bb new file mode 100644 index 0000000000..e88196a445 --- /dev/null +++ b/packages/xorg-app/xclock_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxaw libxrender libxft libxkbfile libxt" + diff --git a/packages/xorg-app/xcmsdb_1.0.1.bb b/packages/xorg-app/xcmsdb_1.0.1.bb new file mode 100644 index 0000000000..aafaddcf4b --- /dev/null +++ b/packages/xorg-app/xcmsdb_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11" + diff --git a/packages/xorg-app/xconsole_1.0.2.bb b/packages/xorg-app/xconsole_1.0.2.bb new file mode 100644 index 0000000000..f884467096 --- /dev/null +++ b/packages/xorg-app/xconsole_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxt" + diff --git a/packages/xorg-app/xcursorgen_1.0.1.bb b/packages/xorg-app/xcursorgen_1.0.1.bb new file mode 100644 index 0000000000..64b26483e0 --- /dev/null +++ b/packages/xorg-app/xcursorgen_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxcursor libpng" + diff --git a/packages/xorg-app/xditview_1.0.1.bb b/packages/xorg-app/xditview_1.0.1.bb new file mode 100644 index 0000000000..2bdb000c5d --- /dev/null +++ b/packages/xorg-app/xditview_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xdriinfo_1.0.1.bb b/packages/xorg-app/xdriinfo_1.0.1.bb new file mode 100644 index 0000000000..42541cd22d --- /dev/null +++ b/packages/xorg-app/xdriinfo_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 glproto mesa" + diff --git a/packages/xorg-app/xedit_1.0.2.bb b/packages/xorg-app/xedit_1.0.2.bb new file mode 100644 index 0000000000..e98f981c95 --- /dev/null +++ b/packages/xorg-app/xedit_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxprintutil libxp libxt" + diff --git a/packages/xorg-app/xeyes_1.0.1.bb b/packages/xorg-app/xeyes_1.0.1.bb new file mode 100644 index 0000000000..07ce0724fa --- /dev/null +++ b/packages/xorg-app/xeyes_1.0.1.bb @@ -0,0 +1,4 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxau libxt libxext libxmu" diff --git a/packages/xorg-app/xfd_1.0.1.bb b/packages/xorg-app/xfd_1.0.1.bb new file mode 100644 index 0000000000..6d05f0e1dd --- /dev/null +++ b/packages/xorg-app/xfd_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw freetype fontconfig libxft libxt" + diff --git a/packages/xorg-app/xfindproxy_1.0.1.bb b/packages/xorg-app/xfindproxy_1.0.1.bb new file mode 100644 index 0000000000..2bdb000c5d --- /dev/null +++ b/packages/xorg-app/xfindproxy_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xfsinfo_1.0.1.bb b/packages/xorg-app/xfsinfo_1.0.1.bb new file mode 100644 index 0000000000..9ba7ad6030 --- /dev/null +++ b/packages/xorg-app/xfsinfo_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libfs" + diff --git a/packages/xorg-app/xfwp_1.0.1.bb b/packages/xorg-app/xfwp_1.0.1.bb new file mode 100644 index 0000000000..0ee67e5376 --- /dev/null +++ b/packages/xorg-app/xfwp_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libice xproxymngproto" + diff --git a/packages/xorg-app/xgamma_1.0.1.bb b/packages/xorg-app/xgamma_1.0.1.bb new file mode 100644 index 0000000000..f8a6f6ca2b --- /dev/null +++ b/packages/xorg-app/xgamma_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxxf86vm" + diff --git a/packages/xorg-app/xgc_1.0.1.bb b/packages/xorg-app/xgc_1.0.1.bb new file mode 100644 index 0000000000..2bdb000c5d --- /dev/null +++ b/packages/xorg-app/xgc_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xkbevd_1.0.2.bb b/packages/xorg-app/xkbevd_1.0.2.bb new file mode 100644 index 0000000000..27bbe169ef --- /dev/null +++ b/packages/xorg-app/xkbevd_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxkbfile virtual/libx11" + diff --git a/packages/xorg-app/xkbprint_1.0.1.bb b/packages/xorg-app/xkbprint_1.0.1.bb new file mode 100644 index 0000000000..27bbe169ef --- /dev/null +++ b/packages/xorg-app/xkbprint_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxkbfile virtual/libx11" + diff --git a/packages/xorg-app/xkill_1.0.1.bb b/packages/xorg-app/xkill_1.0.1.bb new file mode 100644 index 0000000000..e539dad1a2 --- /dev/null +++ b/packages/xorg-app/xkill_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxmu" + diff --git a/packages/xorg-app/xload_1.0.1.bb b/packages/xorg-app/xload_1.0.1.bb new file mode 100644 index 0000000000..2bdb000c5d --- /dev/null +++ b/packages/xorg-app/xload_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xlogo_1.0.1.bb b/packages/xorg-app/xlogo_1.0.1.bb new file mode 100644 index 0000000000..6090eba216 --- /dev/null +++ b/packages/xorg-app/xlogo_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxprintutil libxp libxrender libxft libxext libxt" + diff --git a/packages/xorg-app/xlsatoms_1.0.1.bb b/packages/xorg-app/xlsatoms_1.0.1.bb new file mode 100644 index 0000000000..e539dad1a2 --- /dev/null +++ b/packages/xorg-app/xlsatoms_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxmu" + diff --git a/packages/xorg-app/xlsclients_1.0.1.bb b/packages/xorg-app/xlsclients_1.0.1.bb new file mode 100644 index 0000000000..e539dad1a2 --- /dev/null +++ b/packages/xorg-app/xlsclients_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxmu" + diff --git a/packages/xorg-app/xmag_1.0.1.bb b/packages/xorg-app/xmag_1.0.1.bb new file mode 100644 index 0000000000..2bdb000c5d --- /dev/null +++ b/packages/xorg-app/xmag_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xman_1.0.2.bb b/packages/xorg-app/xman_1.0.2.bb new file mode 100644 index 0000000000..da18943dc2 --- /dev/null +++ b/packages/xorg-app/xman_1.0.2.bb @@ -0,0 +1,7 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxprintutil libxp libxt" +RDEPENDS = " man" + +FILES_${PN} += " /usr/share/X11/xman.help" diff --git a/packages/xorg-app/xmessage_1.0.1.bb b/packages/xorg-app/xmessage_1.0.1.bb new file mode 100644 index 0000000000..91a36c7cf5 --- /dev/null +++ b/packages/xorg-app/xmessage_1.0.1.bb @@ -0,0 +1,7 @@ +require xorg-app-common.inc +PE = "1" + +DESCRIPTION = "xmessage displays a message or query in a window." + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xmh_1.0.1.bb b/packages/xorg-app/xmh_1.0.1.bb new file mode 100644 index 0000000000..2bdb000c5d --- /dev/null +++ b/packages/xorg-app/xmh_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xmore_1.0.1.bb b/packages/xorg-app/xmore_1.0.1.bb new file mode 100644 index 0000000000..fcee260794 --- /dev/null +++ b/packages/xorg-app/xmore_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxprintutil libxp libxt" + diff --git a/packages/xorg-app/xphelloworld_1.0.1.bb b/packages/xorg-app/xphelloworld_1.0.1.bb new file mode 100644 index 0000000000..5226befdaa --- /dev/null +++ b/packages/xorg-app/xphelloworld_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxprintapputil libxaw libxprintutil libxt libxp" + diff --git a/packages/xorg-app/xplsprinters_1.0.1.bb b/packages/xorg-app/xplsprinters_1.0.1.bb new file mode 100644 index 0000000000..c4a35b0e0a --- /dev/null +++ b/packages/xorg-app/xplsprinters_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxp libxprintutil virtual/libx11" + diff --git a/packages/xorg-app/xpr_1.0.1.bb b/packages/xorg-app/xpr_1.0.1.bb new file mode 100644 index 0000000000..7b712390c6 --- /dev/null +++ b/packages/xorg-app/xpr_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxmu virtual/libx11" + diff --git a/packages/xorg-app/xprehashprinterlist_1.0.1.bb b/packages/xorg-app/xprehashprinterlist_1.0.1.bb new file mode 100644 index 0000000000..c2aa370998 --- /dev/null +++ b/packages/xorg-app/xprehashprinterlist_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxp virtual/libx11" + diff --git a/packages/xorg-app/xrefresh_1.0.2.bb b/packages/xorg-app/xrefresh_1.0.2.bb new file mode 100644 index 0000000000..aafaddcf4b --- /dev/null +++ b/packages/xorg-app/xrefresh_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11" + diff --git a/packages/xorg-app/xrx_1.0.1.bb b/packages/xorg-app/xrx_1.0.1.bb new file mode 100644 index 0000000000..cf18e2e140 --- /dev/null +++ b/packages/xorg-app/xrx_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw virtual/libx11 libxt libxext xtrans xproxymngproto libxau" + diff --git a/packages/xorg-app/xsetmode_1.0.0.bb b/packages/xorg-app/xsetmode_1.0.0.bb new file mode 100644 index 0000000000..3c40475e91 --- /dev/null +++ b/packages/xorg-app/xsetmode_1.0.0.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxi virtual/libx11" + diff --git a/packages/xorg-app/xsetpointer_1.0.0.bb b/packages/xorg-app/xsetpointer_1.0.0.bb new file mode 100644 index 0000000000..3c40475e91 --- /dev/null +++ b/packages/xorg-app/xsetpointer_1.0.0.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxi virtual/libx11" + diff --git a/packages/xorg-app/xsm_1.0.1.bb b/packages/xorg-app/xsm_1.0.1.bb new file mode 100644 index 0000000000..8ed08c598a --- /dev/null +++ b/packages/xorg-app/xsm_1.0.1.bb @@ -0,0 +1,7 @@ +require xorg-app-common.inc +PE = "1" + +DESCRIPTION = "X Session Manager" + +DEPENDS += " libxaw libxt" + diff --git a/packages/xorg-app/xstdcmap_1.0.1.bb b/packages/xorg-app/xstdcmap_1.0.1.bb new file mode 100644 index 0000000000..7b712390c6 --- /dev/null +++ b/packages/xorg-app/xstdcmap_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxmu virtual/libx11" + diff --git a/packages/xorg-app/xtrap_1.0.2.bb b/packages/xorg-app/xtrap_1.0.2.bb new file mode 100644 index 0000000000..18638ee1d2 --- /dev/null +++ b/packages/xorg-app/xtrap_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11 libxtrap" + diff --git a/packages/xorg-app/xvidtune_1.0.1.bb b/packages/xorg-app/xvidtune_1.0.1.bb new file mode 100644 index 0000000000..3ed47c024f --- /dev/null +++ b/packages/xorg-app/xvidtune_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxaw libxxf86vm libxt" + diff --git a/packages/xorg-app/xwd_1.0.1.bb b/packages/xorg-app/xwd_1.0.1.bb new file mode 100644 index 0000000000..7b712390c6 --- /dev/null +++ b/packages/xorg-app/xwd_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxmu virtual/libx11" + diff --git a/packages/xorg-app/xwininfo_1.0.2.bb b/packages/xorg-app/xwininfo_1.0.2.bb new file mode 100644 index 0000000000..069dd30aa8 --- /dev/null +++ b/packages/xorg-app/xwininfo_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " libxmu libxext virtual/libx11" + diff --git a/packages/xorg-app/xwud_1.0.1.bb b/packages/xorg-app/xwud_1.0.1.bb new file mode 100644 index 0000000000..aafaddcf4b --- /dev/null +++ b/packages/xorg-app/xwud_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc +PE = "1" + +DEPENDS += " virtual/libx11" + diff --git a/packages/xorg-data/xcursor-themes_1.0.1.bb b/packages/xorg-data/xcursor-themes_1.0.1.bb new file mode 100644 index 0000000000..8cf822e56f --- /dev/null +++ b/packages/xorg-data/xcursor-themes_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-data-common.inc +PE = "1" + +DEPENDS += " libxcursor" + diff --git a/packages/xorg-data/xkbdata_1.0.1.bb b/packages/xorg-data/xkbdata_1.0.1.bb new file mode 100644 index 0000000000..9ab3729bc5 --- /dev/null +++ b/packages/xorg-data/xkbdata_1.0.1.bb @@ -0,0 +1,7 @@ +require xorg-data-common.inc +PE = "1" + +RDEPENDS = "xkbcomp" + +FILES_${PN} += " /usr/share/X11/xkb" + diff --git a/packages/xorg-doc/xorg-doc-common.inc b/packages/xorg-doc/xorg-doc-common.inc index 4c3d6e8987..75ac0f1205 100644 --- a/packages/xorg-doc/xorg-doc-common.inc +++ b/packages/xorg-doc/xorg-doc-common.inc @@ -3,10 +3,9 @@ HOMEPAGE = "http://www.x.org" SECTION = "x11/docs" LICENSE = "MIT-X" -#DEPENDS = "" XORG_PN = "${PN}" -XORG_RELEASE = "${@["individual",bb.data.getVar('PV', d, 1)[0:7]+"/src"][bb.data.getVar('PV', d, 1)[0:4] == "X11R"]}" -SRC_URI = "${XORG_MIRROR}/${XORG_RELEASE}/doc/${XORG_PN}-${PV}.tar.bz2" +SRC_URI = "${XORG_MIRROR}/individual/data/${XORG_PN}-${PV}.tar.bz2" + S = "${WORKDIR}/${XORG_PN}-${PV}" inherit autotools pkgconfig diff --git a/packages/xorg-doc/xorg-docs_1.0.1.bb b/packages/xorg-doc/xorg-docs_1.0.1.bb new file mode 100644 index 0000000000..df775f85b0 --- /dev/null +++ b/packages/xorg-doc/xorg-docs_1.0.1.bb @@ -0,0 +1,11 @@ +require xorg-doc-common.inc + +DESCRIPTION = "The documentation in this package is from xc/doc in the monolithic \ +source tree." + +DEPENDS += " intltool" + +PE = "1" + +FILES_${PN} += " /usr/share/X11/doc" + diff --git a/packages/xorg-doc/xorg-docs_1.2.bb b/packages/xorg-doc/xorg-docs_1.2.bb new file mode 100644 index 0000000000..df775f85b0 --- /dev/null +++ b/packages/xorg-doc/xorg-docs_1.2.bb @@ -0,0 +1,11 @@ +require xorg-doc-common.inc + +DESCRIPTION = "The documentation in this package is from xc/doc in the monolithic \ +source tree." + +DEPENDS += " intltool" + +PE = "1" + +FILES_${PN} += " /usr/share/X11/doc" + diff --git a/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb b/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb index 18a3ef964a..053ca2eaaa 100644 --- a/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb +++ b/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb @@ -1,8 +1,4 @@ require xorg-doc-common.inc PE = "1" -#DESCRIPTION = "" - -#DEPENDS += " " - FILES_${PN} += " /usr/share/X11/sgml" diff --git a/packages/xorg-doc/xorg-sgml-doctools_1.2.bb b/packages/xorg-doc/xorg-sgml-doctools_1.2.bb index 18a3ef964a..053ca2eaaa 100644 --- a/packages/xorg-doc/xorg-sgml-doctools_1.2.bb +++ b/packages/xorg-doc/xorg-sgml-doctools_1.2.bb @@ -1,8 +1,4 @@ require xorg-doc-common.inc PE = "1" -#DESCRIPTION = "" - -#DEPENDS += " " - FILES_${PN} += " /usr/share/X11/sgml" diff --git a/packages/xorg-driver/xf86-input-acecad_1.1.0.bb b/packages/xorg-driver/xf86-input-acecad_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-acecad_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-aiptek_1.0.1.bb b/packages/xorg-driver/xf86-input-aiptek_1.0.1.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-aiptek_1.0.1.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-calcomp_1.1.0.bb b/packages/xorg-driver/xf86-input-calcomp_1.1.0.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-calcomp_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-citron_2.2.0.bb b/packages/xorg-driver/xf86-input-citron_2.2.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-citron_2.2.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-digitaledge_1.1.0.bb b/packages/xorg-driver/xf86-input-digitaledge_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-digitaledge_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-dmc_1.1.0.bb b/packages/xorg-driver/xf86-input-dmc_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-dmc_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-dynapro_1.1.0.bb b/packages/xorg-driver/xf86-input-dynapro_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-dynapro_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-elo2300_1.1.0.bb b/packages/xorg-driver/xf86-input-elo2300_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-elo2300_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-fpit_1.1.0.bb b/packages/xorg-driver/xf86-input-fpit_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-fpit_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-hyperpen_1.1.0.bb b/packages/xorg-driver/xf86-input-hyperpen_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-hyperpen_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-jamstudio_1.1.0.bb b/packages/xorg-driver/xf86-input-jamstudio_1.1.0.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-jamstudio_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-joystick_1.1.0.bb b/packages/xorg-driver/xf86-input-joystick_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-joystick_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-magellan_1.1.0.bb b/packages/xorg-driver/xf86-input-magellan_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-magellan_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-magictouch_1.0.0.5.bb b/packages/xorg-driver/xf86-input-magictouch_1.0.0.5.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-magictouch_1.0.0.5.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-microtouch_1.1.0.bb b/packages/xorg-driver/xf86-input-microtouch_1.1.0.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-microtouch_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-mutouch_1.1.0.bb b/packages/xorg-driver/xf86-input-mutouch_1.1.0.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-mutouch_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-palmax_1.1.0.bb b/packages/xorg-driver/xf86-input-palmax_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-palmax_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-input-spaceorb_1.1.0.bb b/packages/xorg-driver/xf86-input-spaceorb_1.1.0.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-spaceorb_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-summa_1.1.0.bb b/packages/xorg-driver/xf86-input-summa_1.1.0.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-summa_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-tek4957_1.1.0.bb b/packages/xorg-driver/xf86-input-tek4957_1.1.0.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-tek4957_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-ur98_1.1.0.bb b/packages/xorg-driver/xf86-input-ur98_1.1.0.bb new file mode 100644 index 0000000000..34a497438b --- /dev/null +++ b/packages/xorg-driver/xf86-input-ur98_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-input.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-input-vmmouse_12.4.0.bb b/packages/xorg-driver/xf86-input-vmmouse_12.4.0.bb new file mode 100644 index 0000000000..292d2804a8 --- /dev/null +++ b/packages/xorg-driver/xf86-input-vmmouse_12.4.0.bb @@ -0,0 +1,7 @@ +require xorg-driver-input.inc +PE = "1" + +DESCRIPTION = "The VMMouse driver enables support for the special VMMouse protocol \ +that is provided by VMware virtual machines to give absolute pointer \ +positioning. " + diff --git a/packages/xorg-driver/xf86-input-void_1.1.0.bb b/packages/xorg-driver/xf86-input-void_1.1.0.bb new file mode 100644 index 0000000000..311caf6553 --- /dev/null +++ b/packages/xorg-driver/xf86-input-void_1.1.0.bb @@ -0,0 +1,3 @@ +require xorg-driver-input.inc +PE = "1" + diff --git a/packages/xorg-driver/xf86-video-apm_1.1.1.bb b/packages/xorg-driver/xf86-video-apm_1.1.1.bb new file mode 100644 index 0000000000..5f0ed183e6 --- /dev/null +++ b/packages/xorg-driver/xf86-video-apm_1.1.1.bb @@ -0,0 +1,7 @@ +require xorg-driver-video.inc +PE = "1" + +DESCRIPTION = "This is the Alliance Promotion driver for XFree86 4.0+" + +DEPENDS += " xf86rushproto" + diff --git a/packages/xorg-driver/xf86-video-ark_0.6.0.bb b/packages/xorg-driver/xf86-video-ark_0.6.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-ark_0.6.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-ast_0.81.0.bb b/packages/xorg-driver/xf86-video-ast_0.81.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-ast_0.81.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-chips_1.1.1.bb b/packages/xorg-driver/xf86-video-chips_1.1.1.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-chips_1.1.1.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-cirrus_1.1.0.bb b/packages/xorg-driver/xf86-video-cirrus_1.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-cirrus_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-cyrix_1.1.0.bb b/packages/xorg-driver/xf86-video-cyrix_1.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-cyrix_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-dummy_0.2.0.bb b/packages/xorg-driver/xf86-video-dummy_0.2.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-dummy_0.2.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-glint_1.1.1.bb b/packages/xorg-driver/xf86-video-glint_1.1.1.bb new file mode 100644 index 0000000000..4b57f17b9e --- /dev/null +++ b/packages/xorg-driver/xf86-video-glint_1.1.1.bb @@ -0,0 +1,5 @@ +require xorg-driver-video.inc + +#DESCRIPTION = "" + +DEPENDS += " xf86dgaproto drm xf86driproto" diff --git a/packages/xorg-driver/xf86-video-i128_1.1.0.5.bb b/packages/xorg-driver/xf86-video-i128_1.1.0.5.bb new file mode 100644 index 0000000000..acfc042123 --- /dev/null +++ b/packages/xorg-driver/xf86-video-i128_1.1.0.5.bb @@ -0,0 +1,5 @@ +require xorg-driver-video.inc + +DESCRIPTION = "Number Nine I128 for X11" + +PE = "1" diff --git a/packages/xorg-driver/xf86-video-i740_1.1.0.bb b/packages/xorg-driver/xf86-video-i740_1.1.0.bb new file mode 100644 index 0000000000..4aca68edf6 --- /dev/null +++ b/packages/xorg-driver/xf86-video-i740_1.1.0.bb @@ -0,0 +1,5 @@ +require xorg-driver-video.inc + +DESCRIPTION = "I740 for X11" + +PE = "1" diff --git a/packages/xorg-driver/xf86-video-imstt_1.1.0.bb b/packages/xorg-driver/xf86-video-imstt_1.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-imstt_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-mga_1.4.1.bb b/packages/xorg-driver/xf86-video-mga_1.4.1.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-mga_1.4.1.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-neomagic_1.1.1.bb b/packages/xorg-driver/xf86-video-neomagic_1.1.1.bb new file mode 100644 index 0000000000..b519e60e58 --- /dev/null +++ b/packages/xorg-driver/xf86-video-neomagic_1.1.1.bb @@ -0,0 +1,8 @@ +require xorg-driver-video.inc + +PE = "1" + +DESCRIPTION = "X11 driver for NeoMagic 2200, 2160, 2097, 2093, 2090, 2070" + +DEPENDS += " xf86dgaproto" + diff --git a/packages/xorg-driver/xf86-video-s3virge_1.9.1.bb b/packages/xorg-driver/xf86-video-s3virge_1.9.1.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-s3virge_1.9.1.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-sisusb_0.8.1.bb b/packages/xorg-driver/xf86-video-sisusb_0.8.1.bb new file mode 100644 index 0000000000..07af9eebcb --- /dev/null +++ b/packages/xorg-driver/xf86-video-sisusb_0.8.1.bb @@ -0,0 +1,6 @@ +require xorg-driver-video.inc + +PE = "1" + +DEPENDS += " xineramaproto xf86miscproto" + diff --git a/packages/xorg-driver/xf86-video-sunbw2_1.1.0.bb b/packages/xorg-driver/xf86-video-sunbw2_1.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-sunbw2_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-suncg14_1.1.0.bb b/packages/xorg-driver/xf86-video-suncg14_1.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-suncg14_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-suncg3_1.1.0.bb b/packages/xorg-driver/xf86-video-suncg3_1.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-suncg3_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-suncg6_1.1.0.bb b/packages/xorg-driver/xf86-video-suncg6_1.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-suncg6_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-sunffb_1.1.0.bb b/packages/xorg-driver/xf86-video-sunffb_1.1.0.bb new file mode 100644 index 0000000000..0251123fc8 --- /dev/null +++ b/packages/xorg-driver/xf86-video-sunffb_1.1.0.bb @@ -0,0 +1,4 @@ +require xorg-driver-video.inc +PE = "1" + +DEPENDS += " drm xf86driproto" diff --git a/packages/xorg-driver/xf86-video-sunleo_1.1.0.bb b/packages/xorg-driver/xf86-video-sunleo_1.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-sunleo_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-suntcx_1.1.0.bb b/packages/xorg-driver/xf86-video-suntcx_1.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-suntcx_1.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xf86-video-tga_1.1.0.bb b/packages/xorg-driver/xf86-video-tga_1.1.0.bb new file mode 100644 index 0000000000..d3cf65f034 --- /dev/null +++ b/packages/xorg-driver/xf86-video-tga_1.1.0.bb @@ -0,0 +1,8 @@ +require xorg-driver-video.inc + +PE = "1" + +DESCRIPTION = "DEC 21030 X11 driver" + +DEPENDS += " xf86dgaproto" + diff --git a/packages/xorg-driver/xf86-video-v4l_0.1.1.bb b/packages/xorg-driver/xf86-video-v4l_0.1.1.bb new file mode 100644 index 0000000000..9ebb9ad1f6 --- /dev/null +++ b/packages/xorg-driver/xf86-video-v4l_0.1.1.bb @@ -0,0 +1,5 @@ +require xorg-driver-video.inc + +PE = "1" + +DESCRIPTION = "Video 4 Linux adaptor driver for X11" diff --git a/packages/xorg-driver/xf86-video-vga_4.1.0.bb b/packages/xorg-driver/xf86-video-vga_4.1.0.bb new file mode 100644 index 0000000000..c2b6b7608a --- /dev/null +++ b/packages/xorg-driver/xf86-video-vga_4.1.0.bb @@ -0,0 +1,2 @@ +require xorg-driver-video.inc +PE = "1" diff --git a/packages/xorg-driver/xorg-driver-common.inc b/packages/xorg-driver/xorg-driver-common.inc index 3b3c205e9e..76bc89fa10 100644 --- a/packages/xorg-driver/xorg-driver-common.inc +++ b/packages/xorg-driver/xorg-driver-common.inc @@ -7,8 +7,7 @@ PR = "r2" DEPENDS = "randrproto xorg-server xproto" XORG_PN = "${PN}" -XORG_RELEASE = "${@["individual",bb.data.getVar('PV', d, 1)[0:7]+"/src"][bb.data.getVar('PV', d, 1)[0:4] == "X11R"]}" -SRC_URI = "${XORG_MIRROR}/${XORG_RELEASE}/driver/${XORG_PN}-${PV}.tar.bz2" +SRC_URI = "${XORG_MIRROR}/individual/data/${XORG_PN}-${PV}.tar.bz2" S = "${WORKDIR}/${XORG_PN}-${PV}" diff --git a/packages/xorg-font/font-adobe-100dpi_1.0.0.bb b/packages/xorg-font/font-adobe-100dpi_1.0.0.bb new file mode 100644 index 0000000000..e1bdcb5e7a --- /dev/null +++ b/packages/xorg-font/font-adobe-100dpi_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc +PE = "1" + diff --git a/packages/xorg-font/font-adobe-75dpi_1.0.0.bb b/packages/xorg-font/font-adobe-75dpi_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-adobe-75dpi_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb b/packages/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb new file mode 100644 index 0000000000..0799b8a97e --- /dev/null +++ b/packages/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-font-common.inc + +DESCRIPTION = "Adobe typeface software" + +PE = "1" diff --git a/packages/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb b/packages/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb new file mode 100644 index 0000000000..6e20eb97d8 --- /dev/null +++ b/packages/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb @@ -0,0 +1,6 @@ +require xorg-font-common.inc + +DESCRIPTION = "Adobe typeface software" + +PE = "1" + diff --git a/packages/xorg-font/font-adobe-utopia-type1_1.0.1.bb b/packages/xorg-font/font-adobe-utopia-type1_1.0.1.bb new file mode 100644 index 0000000000..6e20eb97d8 --- /dev/null +++ b/packages/xorg-font/font-adobe-utopia-type1_1.0.1.bb @@ -0,0 +1,6 @@ +require xorg-font-common.inc + +DESCRIPTION = "Adobe typeface software" + +PE = "1" + diff --git a/packages/xorg-font/font-alias_1.0.1.bb b/packages/xorg-font/font-alias_1.0.1.bb new file mode 100644 index 0000000000..90eec26a57 --- /dev/null +++ b/packages/xorg-font/font-alias_1.0.1.bb @@ -0,0 +1,8 @@ +require xorg-font-common.inc + +DESCRIPTION = "X font aliases." + +DEPENDS = "virtual/xserver font-util" +RDEPENDS = "encodings font-util" + +PE = "1" \ No newline at end of file diff --git a/packages/xorg-font/font-arabic-misc_1.0.0.bb b/packages/xorg-font/font-arabic-misc_1.0.0.bb new file mode 100644 index 0000000000..6171333d6a --- /dev/null +++ b/packages/xorg-font/font-arabic-misc_1.0.0.bb @@ -0,0 +1,7 @@ +require xorg-font-common.inc + +DESCRIPTION = "100dpi, 24 point (approximately) font to minimally support (almost) all \ +of the Arabic characters available in Unicode." + +PE = "1" + diff --git a/packages/xorg-font/font-bh-100dpi_1.0.0.bb b/packages/xorg-font/font-bh-100dpi_1.0.0.bb new file mode 100644 index 0000000000..f8fe553c62 --- /dev/null +++ b/packages/xorg-font/font-bh-100dpi_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc + +PE = "1" diff --git a/packages/xorg-font/font-bh-75dpi_1.0.0.bb b/packages/xorg-font/font-bh-75dpi_1.0.0.bb new file mode 100644 index 0000000000..f8fe553c62 --- /dev/null +++ b/packages/xorg-font/font-bh-75dpi_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc + +PE = "1" diff --git a/packages/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb b/packages/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb new file mode 100644 index 0000000000..f8fe553c62 --- /dev/null +++ b/packages/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc + +PE = "1" diff --git a/packages/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb b/packages/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb new file mode 100644 index 0000000000..f8fe553c62 --- /dev/null +++ b/packages/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc + +PE = "1" diff --git a/packages/xorg-font/font-bh-ttf_1.0.0.bb b/packages/xorg-font/font-bh-ttf_1.0.0.bb new file mode 100644 index 0000000000..f8fe553c62 --- /dev/null +++ b/packages/xorg-font/font-bh-ttf_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc + +PE = "1" diff --git a/packages/xorg-font/font-bh-type1_1.0.0.bb b/packages/xorg-font/font-bh-type1_1.0.0.bb new file mode 100644 index 0000000000..f8fe553c62 --- /dev/null +++ b/packages/xorg-font/font-bh-type1_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc + +PE = "1" diff --git a/packages/xorg-font/font-bitstream-100dpi_1.0.0.bb b/packages/xorg-font/font-bitstream-100dpi_1.0.0.bb new file mode 100644 index 0000000000..f8fe553c62 --- /dev/null +++ b/packages/xorg-font/font-bitstream-100dpi_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc + +PE = "1" diff --git a/packages/xorg-font/font-bitstream-75dpi_1.0.0.bb b/packages/xorg-font/font-bitstream-75dpi_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-bitstream-75dpi_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-bitstream-speedo_1.0.0.bb b/packages/xorg-font/font-bitstream-speedo_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-bitstream-speedo_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-bitstream-type1_1.0.0.bb b/packages/xorg-font/font-bitstream-type1_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-bitstream-type1_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-cronyx-cyrillic_1.0.0.bb b/packages/xorg-font/font-cronyx-cyrillic_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-cronyx-cyrillic_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-cursor-misc_1.0.0.bb b/packages/xorg-font/font-cursor-misc_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-cursor-misc_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-daewoo-misc_1.0.0.bb b/packages/xorg-font/font-daewoo-misc_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-daewoo-misc_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-dec-misc_1.0.0.bb b/packages/xorg-font/font-dec-misc_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-dec-misc_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-ibm-type1_1.0.0.bb b/packages/xorg-font/font-ibm-type1_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-ibm-type1_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-isas-misc_1.0.0.bb b/packages/xorg-font/font-isas-misc_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-isas-misc_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-jis-misc_1.0.0.bb b/packages/xorg-font/font-jis-misc_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-jis-misc_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-micro-misc_1.0.0.bb b/packages/xorg-font/font-micro-misc_1.0.0.bb new file mode 100644 index 0000000000..383d16c799 --- /dev/null +++ b/packages/xorg-font/font-micro-misc_1.0.0.bb @@ -0,0 +1,4 @@ +require xorg-font-common.inc +PE = "1" + +EXTRA_OECONF = "--disable-iso8859-2 --disable-iso8859-3 --disable-iso8859-4 --disable-iso8859-5 --disable-iso8859-6 --disable-iso8859-7 --disable-iso8859-8 --disable-iso8859-9 --disable-iso8859-10 --disable-iso8859-11 --disable-iso8859-12 --disable-iso8859-13 --disable-iso8859-14 --disable-iso8859-15 --disable-iso8859-16 --disable-jisx0201 --disable-koi8-r" diff --git a/packages/xorg-font/font-misc-cyrillic_1.0.0.bb b/packages/xorg-font/font-misc-cyrillic_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-misc-cyrillic_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-misc-ethiopic_1.0.0.bb b/packages/xorg-font/font-misc-ethiopic_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-misc-ethiopic_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-misc-meltho_1.0.0.bb b/packages/xorg-font/font-misc-meltho_1.0.0.bb new file mode 100644 index 0000000000..719a443b51 --- /dev/null +++ b/packages/xorg-font/font-misc-meltho_1.0.0.bb @@ -0,0 +1,5 @@ +require xorg-font-common.inc + +DESCRIPTION = "These fonts are designed for the display of Syriac text." +PE = "1" + diff --git a/packages/xorg-font/font-mutt-misc_1.0.0.bb b/packages/xorg-font/font-mutt-misc_1.0.0.bb new file mode 100644 index 0000000000..a5ded3d3cc --- /dev/null +++ b/packages/xorg-font/font-mutt-misc_1.0.0.bb @@ -0,0 +1,7 @@ +require xorg-font-common.inc + +DESCRIPTION = "Provides a 12pt, 100dpi proportional font with many of \ +the glyphs needed for Unicode text." + +PE = "1" + diff --git a/packages/xorg-font/font-schumacher-misc_1.0.0.bb b/packages/xorg-font/font-schumacher-misc_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-schumacher-misc_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-screen-cyrillic_1.0.0.bb b/packages/xorg-font/font-screen-cyrillic_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-screen-cyrillic_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-sony-misc_1.0.0.bb b/packages/xorg-font/font-sony-misc_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-sony-misc_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-sun-misc_1.0.0.bb b/packages/xorg-font/font-sun-misc_1.0.0.bb new file mode 100644 index 0000000000..60ef06fba0 --- /dev/null +++ b/packages/xorg-font/font-sun-misc_1.0.0.bb @@ -0,0 +1,2 @@ +require xorg-font-common.inc +PE = "1" diff --git a/packages/xorg-font/font-util-native_1.0.1.bb b/packages/xorg-font/font-util-native_1.0.1.bb new file mode 100644 index 0000000000..8db0b71898 --- /dev/null +++ b/packages/xorg-font/font-util-native_1.0.1.bb @@ -0,0 +1,13 @@ +DESCRIPTION = "X font utils." +SECTION = "x11/fonts" +LICENSE = "MIT-X" + +S="${WORKDIR}/font-util-${PV}" + +DEPENDS = "bdftopcf-native" + +PE = "1" + +SRC_URI = "${XORG_MIRROR}/X11R7.1/src/font/font-util-${PV}.tar.gz" + +inherit native autotools pkgconfig diff --git a/packages/xorg-font/font-util_1.0.1.bb b/packages/xorg-font/font-util_1.0.1.bb new file mode 100644 index 0000000000..915c40cd5c --- /dev/null +++ b/packages/xorg-font/font-util_1.0.1.bb @@ -0,0 +1,9 @@ +require xorg-font-common.inc + +DESCRIPTION = "X font utils." + +DEPENDS = "encodings" +RDEPENDS = "mkfontdir mkfontscale encodings" + +PR = "r1" +PE = "1" diff --git a/packages/xorg-font/font-winitzki-cyrillic_1.0.0.bb b/packages/xorg-font/font-winitzki-cyrillic_1.0.0.bb new file mode 100644 index 0000000000..f8fe553c62 --- /dev/null +++ b/packages/xorg-font/font-winitzki-cyrillic_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc + +PE = "1" diff --git a/packages/xorg-font/font-xfree86-type1_1.0.0.bb b/packages/xorg-font/font-xfree86-type1_1.0.0.bb new file mode 100644 index 0000000000..f8fe553c62 --- /dev/null +++ b/packages/xorg-font/font-xfree86-type1_1.0.0.bb @@ -0,0 +1,3 @@ +require xorg-font-common.inc + +PE = "1" diff --git a/packages/xorg-font/xorg-font-common.inc b/packages/xorg-font/xorg-font-common.inc index 148437a3e3..7ffe818cb2 100644 --- a/packages/xorg-font/xorg-font-common.inc +++ b/packages/xorg-font/xorg-font-common.inc @@ -6,8 +6,7 @@ DEPENDS = " encodings font-alias font-util-native mkfontdir-native mkfontscale-n RDEPENDS = "encodings font-util font-alias" XORG_PN = "${PN}" -XORG_RELEASE = "${@["individual",bb.data.getVar('PV', d, 1)[0:7]+"/src"][bb.data.getVar('PV', d, 1)[0:4] == "X11R"]}" -SRC_URI = "${XORG_MIRROR}/${XORG_RELEASE}/font/${XORG_PN}-${PV}.tar.bz2" +SRC_URI = "${XORG_MIRROR}/individual/data/${XORG_PN}-${PV}.tar.bz2" S = "${WORKDIR}/${XORG_PN}-${PV}" inherit autotools pkgconfig -- cgit v1.2.3 From 798ff0e5c5bd0ef9ab59576fc7a06103cef5b1dd Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 28 Jan 2008 00:09:07 +0000 Subject: bluez-utils 3.23 and friends: Set FILESPATH explicitly and correctly. * Having a "files" dir in a multi-package directory is shooting everyone in leg. There should be per-package dirs or else stuff will be taken from god-knows-where. * So, add FILESPATH for all bluez-utils descendant packages. * This fixes build of bluez-cups-backend, which failed in do_patch because some patch wa taken from wrong, catch-all "files" dir. --- packages/bluez/bluez-cups-backend_3.23.bb | 2 +- packages/bluez/bluez-gstreamer-plugin_3.23.bb | 2 +- packages/bluez/bluez-utils-alsa_3.23.bb | 1 + packages/bluez/bluez-utils3.inc | 3 +++ packages/bluez/bluez-utils_3.23.bb | 2 +- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/bluez/bluez-cups-backend_3.23.bb b/packages/bluez/bluez-cups-backend_3.23.bb index d92b53220f..46ca0becf0 100644 --- a/packages/bluez/bluez-cups-backend_3.23.bb +++ b/packages/bluez/bluez-cups-backend_3.23.bb @@ -1,5 +1,5 @@ require bluez-utils3.inc - +PR = "r1" DEPENDS += "cups" # see bluez-utils3.inc for the explanation of these option diff --git a/packages/bluez/bluez-gstreamer-plugin_3.23.bb b/packages/bluez/bluez-gstreamer-plugin_3.23.bb index 123259b3a7..36e9ca3d91 100644 --- a/packages/bluez/bluez-gstreamer-plugin_3.23.bb +++ b/packages/bluez/bluez-gstreamer-plugin_3.23.bb @@ -1,5 +1,5 @@ require bluez-utils3.inc - +PR = "r1" DEPENDS += "gstreamer gst-plugins-base " # see bluez-utils3.inc for the explanation of these option diff --git a/packages/bluez/bluez-utils-alsa_3.23.bb b/packages/bluez/bluez-utils-alsa_3.23.bb index 5c4a07e8ab..0d7836fa65 100644 --- a/packages/bluez/bluez-utils-alsa_3.23.bb +++ b/packages/bluez/bluez-utils-alsa_3.23.bb @@ -1,4 +1,5 @@ require bluez-utils3.inc +PR = "r1" DEPENDS += "alsa-lib" diff --git a/packages/bluez/bluez-utils3.inc b/packages/bluez/bluez-utils3.inc index b995d6990c..3932d722ee 100644 --- a/packages/bluez/bluez-utils3.inc +++ b/packages/bluez/bluez-utils3.inc @@ -8,11 +8,14 @@ RREPLACES = "bluez-utils-dbus" RCONFLICTS_${PN} = "bluez-utils-nodbus" LICENSE = "GPL" +FILESPATH = "${FILE_DIRNAME}/bluez-utils-${PV}:${FILE_DIRNAME}/bluez-utils" + # ti patch should be sent it upstream! SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \ file://hcid.conf \ file://hciattach-ti-bts.patch;patch=1" + S = "${WORKDIR}/bluez-utils-${PV}" inherit autotools update-rc.d diff --git a/packages/bluez/bluez-utils_3.23.bb b/packages/bluez/bluez-utils_3.23.bb index f96d1f2ba4..37365f67fc 100644 --- a/packages/bluez/bluez-utils_3.23.bb +++ b/packages/bluez/bluez-utils_3.23.bb @@ -1,5 +1,5 @@ require bluez-utils3.inc -PR = "r1" +PR = "r2" # see bluez-utils3.inc for the explanation of these option EXTRA_OECONF = " \ -- cgit v1.2.3 From c291df04a3913d8559159f82c3b0ffa4dae7de33 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 28 Jan 2008 00:11:15 +0000 Subject: patch.bbclass: Show full path of a patch. * This is for consistency with existing non-patch fetch message in base.bbclass. Allows to catch pulling file from wrong override dir quickly. --- classes/patch.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/patch.bbclass b/classes/patch.bbclass index 0cc202820f..6f83d9c88b 100644 --- a/classes/patch.bbclass +++ b/classes/patch.bbclass @@ -526,7 +526,7 @@ python patch_do_patch() { bb.note("Patch '%s' applies to earlier revisions" % pname) continue - bb.note("Applying patch '%s'" % pname) + bb.note("Applying patch '%s' (%s)" % (pname, unpacked)) try: patchset.Import({"file":unpacked, "remote":url, "strippath": pnum}, True) except: -- cgit v1.2.3 From c4e13b8f8522274d5d495c0f60f4425b4b9bd6e2 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 28 Jan 2008 00:37:02 +0000 Subject: packages/bluez/: Unkludge "files" dir. * Start with bluez-dtl1-workaround stuff. --- .../bluez/bluez-dtl1-workaround/.mtn2git_empty | 0 packages/bluez/bluez-dtl1-workaround/02dtl1_cs.sh | 57 ++++++++++++++++++++++ packages/bluez/files/02dtl1_cs.sh | 57 ---------------------- 3 files changed, 57 insertions(+), 57 deletions(-) create mode 100644 packages/bluez/bluez-dtl1-workaround/.mtn2git_empty create mode 100644 packages/bluez/bluez-dtl1-workaround/02dtl1_cs.sh delete mode 100644 packages/bluez/files/02dtl1_cs.sh diff --git a/packages/bluez/bluez-dtl1-workaround/.mtn2git_empty b/packages/bluez/bluez-dtl1-workaround/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/bluez/bluez-dtl1-workaround/02dtl1_cs.sh b/packages/bluez/bluez-dtl1-workaround/02dtl1_cs.sh new file mode 100644 index 0000000000..fefc72e07a --- /dev/null +++ b/packages/bluez/bluez-dtl1-workaround/02dtl1_cs.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +case "$1" in + suspend) + if [ "`/sbin/hciconfig`" != "" ]; then + #If hciconfig outputs anything then there's probably a Bluetooth + # CF card in the slot so shut it down. + hcitool dc `hcitool con | grep ACL | sed 's/^.*\([0-9A-F]\{2\}\(:[0-9A-F]\{2\}\)\{5\}\).*$/\1/'` + hciconfig hci0 down + killall hciattach > /dev/null 2>&1 + fi + ;; + + resume) + #check for kernel version + if [ "`uname -r | grep 2.4.`" != "" ]; then + k="o" + elif [ "`uname -r | grep 2.6.`" != "" ]; then + k="ko" + else + exit 0 + fi + + if test -e /sbin/cardctl; then + CARDCTL=/sbin/cardctl + elif test -e /sbin/pccardctl; then + CARDCTL=/sbin/pccardctl + else + exit 0 + fi + + if [ "`lsmod | grep hci_uart`" != "" ]; then + #If the hci_usb module is still loaded then there's a serial based + # Bluetooth CF card in the slot, which only needs a resume to get it going + # again. + rfcomm bind all + $CARDCTL resume + hciconfig hci0 up + else + # only works for nokia dtl1 cards + for f in /lib/modules/`uname -r`/kernel/drivers/bluetooth/dtl1_cs.$k + do + #Enumerate all the self-contained Bluetooth CF card drivers + f=`echo $f | sed 's/\.'$k'$//'` + f=`basename $f` + if [ "`lsmod | grep $f`" != "" ]; then + #If one of these drivers is still loaded, then there is probably + #a non-serial based Bluetooth CF card in the slot that needs + #ejecting and reinserting to get it going again + rfcomm bind all + $CARDCTL eject + $CARDCTL insert + hciconfig hci0 up + fi + done + fi +esac diff --git a/packages/bluez/files/02dtl1_cs.sh b/packages/bluez/files/02dtl1_cs.sh deleted file mode 100644 index fefc72e07a..0000000000 --- a/packages/bluez/files/02dtl1_cs.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh - -case "$1" in - suspend) - if [ "`/sbin/hciconfig`" != "" ]; then - #If hciconfig outputs anything then there's probably a Bluetooth - # CF card in the slot so shut it down. - hcitool dc `hcitool con | grep ACL | sed 's/^.*\([0-9A-F]\{2\}\(:[0-9A-F]\{2\}\)\{5\}\).*$/\1/'` - hciconfig hci0 down - killall hciattach > /dev/null 2>&1 - fi - ;; - - resume) - #check for kernel version - if [ "`uname -r | grep 2.4.`" != "" ]; then - k="o" - elif [ "`uname -r | grep 2.6.`" != "" ]; then - k="ko" - else - exit 0 - fi - - if test -e /sbin/cardctl; then - CARDCTL=/sbin/cardctl - elif test -e /sbin/pccardctl; then - CARDCTL=/sbin/pccardctl - else - exit 0 - fi - - if [ "`lsmod | grep hci_uart`" != "" ]; then - #If the hci_usb module is still loaded then there's a serial based - # Bluetooth CF card in the slot, which only needs a resume to get it going - # again. - rfcomm bind all - $CARDCTL resume - hciconfig hci0 up - else - # only works for nokia dtl1 cards - for f in /lib/modules/`uname -r`/kernel/drivers/bluetooth/dtl1_cs.$k - do - #Enumerate all the self-contained Bluetooth CF card drivers - f=`echo $f | sed 's/\.'$k'$//'` - f=`basename $f` - if [ "`lsmod | grep $f`" != "" ]; then - #If one of these drivers is still loaded, then there is probably - #a non-serial based Bluetooth CF card in the slot that needs - #ejecting and reinserting to get it going again - rfcomm bind all - $CARDCTL eject - $CARDCTL insert - hciconfig hci0 up - fi - done - fi -esac -- cgit v1.2.3 From 0220859f6e9e1f491c26054a535891193bd45150 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 28 Jan 2008 00:40:25 +0000 Subject: opie-taskbar-images: There is nothing to compile and thus nothing to configure. Fixes breakage in do_configure. --- packages/opie-taskbar/opie-taskbar-images.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/opie-taskbar/opie-taskbar-images.inc b/packages/opie-taskbar/opie-taskbar-images.inc index 939caf0f78..7ec97bc56c 100644 --- a/packages/opie-taskbar/opie-taskbar-images.inc +++ b/packages/opie-taskbar/opie-taskbar-images.inc @@ -20,6 +20,10 @@ PIXMAP_SIZE_asus730 = "-480x640" PIXMAP_SIZE_htcuniversal= "-480x640" PIXMAP_SIZE_hx4700 = "-480x640" +do_configure() { + : +} + do_install() { install -d ${D}${palmtopdir}/pics/launcher -- cgit v1.2.3 From 53d47ddd13aae47b0a38fd83152a9686b5cf81c9 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 28 Jan 2008 00:41:39 +0000 Subject: bluez-utils 3.23: Move hciattach-ti-bts.patch to version-specific dir. --- packages/bluez/bluez-utils-3.23/.mtn2git_empty | 0 .../bluez/bluez-utils-3.23/hciattach-ti-bts.patch | 477 +++++++++++++++++++++ packages/bluez/bluez-utils/hciattach-ti-bts.patch | 477 --------------------- 3 files changed, 477 insertions(+), 477 deletions(-) create mode 100644 packages/bluez/bluez-utils-3.23/.mtn2git_empty create mode 100644 packages/bluez/bluez-utils-3.23/hciattach-ti-bts.patch delete mode 100644 packages/bluez/bluez-utils/hciattach-ti-bts.patch diff --git a/packages/bluez/bluez-utils-3.23/.mtn2git_empty b/packages/bluez/bluez-utils-3.23/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/bluez/bluez-utils-3.23/hciattach-ti-bts.patch b/packages/bluez/bluez-utils-3.23/hciattach-ti-bts.patch new file mode 100644 index 0000000000..1b208f7979 --- /dev/null +++ b/packages/bluez/bluez-utils-3.23/hciattach-ti-bts.patch @@ -0,0 +1,477 @@ +--- bluez-utils-3.1/tools/hciattach.c.orig 2006-07-23 14:02:14.000000000 +0200 ++++ bluez-utils-3.1/tools/hciattach.c 2006-07-23 14:06:29.000000000 +0200 +@@ -60,6 +60,8 @@ + #define HCI_UART_3WIRE 2 + #define HCI_UART_H4DS 3 + ++#include "ti_bts.h" ++ + struct uart_t { + char *type; + int m_id; +@@ -70,6 +72,7 @@ + int flags; + char *bdaddr; + int (*init) (int fd, struct uart_t *u, struct termios *ti); ++ char *bts; /* bluetooth script */ + }; + + #define FLOW_CTL 0x0001 +@@ -279,6 +282,114 @@ + return 0; + } + ++static int brf6150(int fd, struct uart_t *u, struct termios *ti) ++{ ++ bts_t *bfp; ++ int i; ++ unsigned long vers; ++ unsigned char actionbuf[256]; ++ unsigned char resp[128]; /* Response */ ++ unsigned long count; ++ unsigned short atype; ++ ++ if (u->bts == NULL) /* no script, ignore */ ++ return 0; ++ ++ bfp = bts_load_script( u->bts, &vers ); ++ if (bfp == NULL) ++ return -1; ++ ++ fprintf( stderr, "Loading BTS script version %lu\n", vers ); ++ ++ while ((count = bts_next_action( bfp, actionbuf, ++ sizeof actionbuf - 1, &atype )) != 0) { ++ if (atype == ACTION_REMARKS) { ++ if (actionbuf[0] != 0) ++ fprintf( stderr, "%s\n", actionbuf ); ++ } ++ else if (atype == ACTION_SEND_COMMAND) { ++#if 0 ++ fprintf( stderr, "ACTION_SEND_COMMAND: ", (int)atype ); ++ for (i=0; idata[i] ); ++ } ++ fprintf( stderr, "\n" ); ++#endif ++ usleep(wait->msec); /* seems they give usec, not msec */ ++ /* Read reply. */ ++ if ((count = read_hci_event(fd, resp, sizeof resp)) < 0) { ++ perror("Failed to read TI command response"); ++ return -1; ++ } ++ if (count < wait->size) { ++ fprintf( stderr, "TI command response is short."); ++ } ++ for (i=0; isize; i++) { ++ if (i == 3) continue; /* ignore */ ++ if (resp[i] != wait->data[i]) { ++ fprintf( stderr, "TI command response does not match expected result.\n" ); ++ } ++ } ++ } ++ else if (atype == ACTION_SERIAL_PORT_PARAMETERS) { ++ action_serial_t *sercmd = (action_serial_t *)actionbuf; ++ ++ /* Set actual baudrate */ ++ fprintf( stderr, ++ "BTS changing baud rate to %u, flow control to %u\n", ++ sercmd->baud, sercmd->flow_control ); ++ ++ tcflush(fd, TCIOFLUSH); ++ ++ if (sercmd->flow_control) ++ ti->c_cflag |= CRTSCTS; ++ else ++ ti->c_cflag &= ~CRTSCTS; ++ if (tcsetattr(fd, TCSANOW, ti) < 0) { ++ perror("Can't set port settings"); ++ return -1; ++ } ++ ++ u->speed = sercmd->baud; ++ ++ tcflush(fd, TCIOFLUSH); ++ if (set_speed(fd, ti, sercmd->baud) < 0) { ++ perror("Can't set baud rate"); ++ return -1; ++ } ++ } ++ else if (atype == ACTION_DELAY) { ++ action_delay_t *delay = (action_delay_t *)actionbuf; ++ usleep(delay->msec); /* seems they give usec, not msec */ ++ } ++ else { ++ fprintf( stderr, "BTS action type = %d: ", (int)atype ); ++ for (i=0; i> 2) == 3) { ++ /* BRF6150 */ ++ int err; ++ ++ nanosleep(&tm, NULL); ++ if ((err = brf6150(fd, u, ti)) != 0) { ++ fprintf(stderr, "Texas module script failed (err=%d)\n", err); ++ return -1; ++ } ++ } ++ + nanosleep(&tm, NULL); + return 0; + } +@@ -1204,7 +1326,7 @@ + { + printf("hciattach - HCI UART driver initialization utility\n"); + printf("Usage:\n"); +- printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [speed] [flow|noflow] [bdaddr]\n"); ++ printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [-S bts-script] [speed] [flow|noflow] [bdaddr]\n"); + printf("\thciattach -l\n"); + } + +@@ -1219,11 +1341,12 @@ + struct sigaction sa; + struct pollfd p; + char dev[PATH_MAX]; ++ char *bts = NULL; + + detach = 1; + printpid = 0; + +- while ((opt=getopt(argc, argv, "bnpt:s:l")) != EOF) { ++ while ((opt=getopt(argc, argv, "bnpt:s:S:l")) != EOF) { + switch(opt) { + case 'b': + send_break = 1; +@@ -1245,6 +1368,10 @@ + init_speed = atoi(optarg); + break; + ++ case 'S': ++ bts = optarg; ++ break; ++ + case 'l': + for (i = 0; uart[i].type; i++) { + printf("%-10s0x%04x,0x%04x\n", uart[i].type, +@@ -1320,6 +1447,8 @@ + if (init_speed) + u->init_speed = init_speed; + ++ u->bts = bts; ++ + memset(&sa, 0, sizeof(sa)); + sa.sa_flags = SA_NOCLDSTOP; + sa.sa_handler = sig_alarm; +--- bluez-utils-3.1/tools/ti_bts.h.orig 2006-07-23 14:07:26.000000000 +0200 ++++ bluez-utils-3.1/tools/ti_bts.h 2006-07-23 14:07:46.000000000 +0200 +@@ -0,0 +1,116 @@ ++/* ++ * Copyright (c) 2005 Texas Instruments, Inc. ++ * Ported by SDG Systems, LLC ++ * ++ * 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; ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. ++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY ++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ * ++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, ++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS ++ * SOFTWARE IS DISCLAIMED. ++ * ++ */ ++ ++#ifndef BT_SCRIPT_H ++#define BT_SCRIPT_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* ++ * Define the interface of Bluetooth Script ++ */ ++ ++typedef void bts_t; ++ ++ ++#define ACTION_SEND_COMMAND 1 /* Send out raw data (as is) */ ++#define ACTION_WAIT_EVENT 2 /* Wait for data */ ++#define ACTION_SERIAL_PORT_PARAMETERS 3 ++#define ACTION_DELAY 4 ++#define ACTION_RUN_SCRIPT 5 ++#define ACTION_REMARKS 6 ++ ++/* ++ * Structure for ACTION_SEND_COMMAND ++ */ ++typedef struct tagCActionCommand ++{ ++ unsigned char data[1]; /* Data to send */ ++} action_command_t; ++ ++/* ++ * Structure for ACTION_WAIT_EVENT ++ */ ++typedef struct tagCActionWaitEvent ++{ ++ unsigned long msec; /* in milliseconds */ ++ unsigned long size; ++ unsigned char data[1]; /* Data to wait for */ ++} action_wait_t; ++ ++ ++/* ++ * Structure for ACTION_SERIAL_PORT_PARAMETERS ++ */ ++typedef struct tagCActionSerialPortParameters ++{ ++ unsigned long baud; ++ unsigned long flow_control; ++} action_serial_t; ++ ++/* Flow Control Type */ ++#define FCT_NONE 0 ++#define FCT_HARDWARE 1 ++ ++#define DONT_CHANGE 0xFFFFFFFF /* For both baud rate and flow control */ ++ ++ ++/* ++ * Structure for ACTION_DELAY ++ */ ++typedef struct tagCActionDelay ++{ ++ unsigned long msec; /* in milliseconds */ ++} action_delay_t; ++ ++/* ++ * Structure for ACTION_RUN_SCRIPT ++ */ ++typedef struct tagCActionRunScript ++{ ++ char filename[1]; ++} action_run_t; ++ ++/* ++ * Structure for ACTION_REMARKS ++ */ ++typedef struct tagCActionRemarks ++{ ++ char m_szRemarks[1]; ++} action_remarks_t; ++ ++ ++const char *cis_create_filename(const unsigned char* cmdparms); ++bts_t * bts_load_script(const char* fname, unsigned long* version); ++unsigned long bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, ++ unsigned long nMaxSize, unsigned short* ptype); ++void bts_unload_script(bts_t* bts_fp); ++ ++#ifdef __cplusplus ++}; ++#endif ++ ++#endif /* BT_SCRIPT_H */ ++ +--- bluez-utils-3.1/tools/ti_bts.c.orig 2006-07-23 14:07:28.000000000 +0200 ++++ bluez-utils-3.1/tools/ti_bts.c 2006-07-23 14:07:46.000000000 +0200 +@@ -0,0 +1,149 @@ ++/* ++ * Copyright (c) 2005 Texas Instruments, Inc. ++ * Ported by SDG Systems, LLC ++ * ++ * 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; ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. ++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY ++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ * ++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, ++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS ++ * SOFTWARE IS DISCLAIMED. ++ * ++ */ ++ ++ ++#include ++#include ++#include "ti_bts.h" ++ ++#ifndef MAKEWORD ++#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) | ((unsigned short)((unsigned char)(b))) << 8)) ++#endif ++ ++#define TI_MANUFACTURER_ID 13 ++ ++/* ++ * Common Init Script specific ++ */ ++const char * ++cis_create_filename(const unsigned char* cmdparms) ++{ ++ static char bts_file[50]; ++ ++ /* Check for TI's id */ ++ unsigned short manfid = MAKEWORD(cmdparms[8], cmdparms[9]); ++ ++ if (TI_MANUFACTURER_ID == manfid) { ++ unsigned short version = MAKEWORD(cmdparms[10], cmdparms[11]); ++ ++ unsigned short chip = (version & 0x7C00) >> 10; ++ unsigned short min_ver = (version & 0x007F); ++ unsigned short maj_ver = (version & 0x0380) >> 7; ++ ++ if (0 != (version & 0x8000)) { ++ maj_ver |= 0x0008; ++ } ++ ++ sprintf( bts_file, "TIInit_%d.%d.%d.bts", ++ (int)chip, (int)maj_ver, (int)min_ver); ++ ++ return &bts_file[0]; ++ } ++ return NULL; ++} ++ ++typedef struct tagCHeader ++{ ++ unsigned long magic; ++ unsigned long version; ++ unsigned char future[24]; ++} cheader_t; ++ ++ ++/* The value 0x42535442 stands for (in ASCII) BTSB */ ++/* which is Bluetooth Script Binary */ ++#define FILE_HEADER_MAGIC 0x42535442 ++ ++ ++bts_t * ++bts_load_script(const char* fname, unsigned long* version) ++{ ++ bts_t* bts = NULL; ++ FILE* fp = fopen(fname, "rb"); ++ ++ if (NULL != fp) { ++ /* Read header */ ++ cheader_t header; ++ ++ /* Read header */ ++ if (1 == fread(&header, sizeof(header), 1, fp)) { ++ /* Check magic number for correctness */ ++ if (header.magic == FILE_HEADER_MAGIC) { ++ /* If user wants the version number */ ++ if (NULL != version) { ++ *version = header.version; ++ } ++ bts = (bts_t*)fp; ++ } ++ } ++ /* If failed reading the file, close it */ ++ if (NULL == bts) { ++ fclose(fp); ++ } ++ } ++ return bts; ++} ++ ++unsigned long ++bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, ++ unsigned long nMaxSize, unsigned short* ptype) ++{ ++ unsigned long bytes = 0; ++ FILE* fp = (FILE*)bts_fp; ++ unsigned char action_hdr[4]; ++ ++ if (bts_fp == NULL) ++ return 0; ++ ++ /* Each Action has the following: */ ++ /* UINT16 type of this action */ ++ /* UINT16 size of rest */ ++ /* BYTE[] action buffer (for HCI, includes the type byte e.g. 1 for hci command) */ ++ ++ if (1 == fread(&action_hdr[0], sizeof(action_hdr), 1, fp)) { ++ unsigned short type = *(unsigned short*)&action_hdr[0]; ++ unsigned short size = *(unsigned short*)&action_hdr[2]; ++ ++ if (size <= nMaxSize) { ++ int nread = fread(action_buf, sizeof(action_buf[0]), size, fp); ++ ++ if (nread == size) { ++ *ptype = type; ++ bytes = (unsigned long)size; ++ } ++ } ++ } ++ ++ return bytes; ++} ++ ++void ++bts_unload_script(bts_t* bts_fp) ++{ ++ FILE* fp = (FILE*)bts_fp; ++ ++ if (NULL != fp) { ++ fclose(fp); ++ } ++} ++ +--- bluez-utils-3.1/tools/Makefile.am.orig 2006-07-23 14:06:59.000000000 +0200 ++++ bluez-utils-3.1/tools/Makefile.am 2006-07-23 14:07:18.000000000 +0200 +@@ -45,7 +45,7 @@ + + noinst_PROGRAMS = hcisecfilter ppporc + +-hciattach_SOURCES = hciattach.c hciattach_st.c ++hciattach_SOURCES = hciattach.c hciattach_st.c ti_bts.h ti_bts.c + hciattach_LDADD = @BLUEZ_LIBS@ + + hciconfig_SOURCES = hciconfig.c csr.h csr.c diff --git a/packages/bluez/bluez-utils/hciattach-ti-bts.patch b/packages/bluez/bluez-utils/hciattach-ti-bts.patch deleted file mode 100644 index 1b208f7979..0000000000 --- a/packages/bluez/bluez-utils/hciattach-ti-bts.patch +++ /dev/null @@ -1,477 +0,0 @@ ---- bluez-utils-3.1/tools/hciattach.c.orig 2006-07-23 14:02:14.000000000 +0200 -+++ bluez-utils-3.1/tools/hciattach.c 2006-07-23 14:06:29.000000000 +0200 -@@ -60,6 +60,8 @@ - #define HCI_UART_3WIRE 2 - #define HCI_UART_H4DS 3 - -+#include "ti_bts.h" -+ - struct uart_t { - char *type; - int m_id; -@@ -70,6 +72,7 @@ - int flags; - char *bdaddr; - int (*init) (int fd, struct uart_t *u, struct termios *ti); -+ char *bts; /* bluetooth script */ - }; - - #define FLOW_CTL 0x0001 -@@ -279,6 +282,114 @@ - return 0; - } - -+static int brf6150(int fd, struct uart_t *u, struct termios *ti) -+{ -+ bts_t *bfp; -+ int i; -+ unsigned long vers; -+ unsigned char actionbuf[256]; -+ unsigned char resp[128]; /* Response */ -+ unsigned long count; -+ unsigned short atype; -+ -+ if (u->bts == NULL) /* no script, ignore */ -+ return 0; -+ -+ bfp = bts_load_script( u->bts, &vers ); -+ if (bfp == NULL) -+ return -1; -+ -+ fprintf( stderr, "Loading BTS script version %lu\n", vers ); -+ -+ while ((count = bts_next_action( bfp, actionbuf, -+ sizeof actionbuf - 1, &atype )) != 0) { -+ if (atype == ACTION_REMARKS) { -+ if (actionbuf[0] != 0) -+ fprintf( stderr, "%s\n", actionbuf ); -+ } -+ else if (atype == ACTION_SEND_COMMAND) { -+#if 0 -+ fprintf( stderr, "ACTION_SEND_COMMAND: ", (int)atype ); -+ for (i=0; idata[i] ); -+ } -+ fprintf( stderr, "\n" ); -+#endif -+ usleep(wait->msec); /* seems they give usec, not msec */ -+ /* Read reply. */ -+ if ((count = read_hci_event(fd, resp, sizeof resp)) < 0) { -+ perror("Failed to read TI command response"); -+ return -1; -+ } -+ if (count < wait->size) { -+ fprintf( stderr, "TI command response is short."); -+ } -+ for (i=0; isize; i++) { -+ if (i == 3) continue; /* ignore */ -+ if (resp[i] != wait->data[i]) { -+ fprintf( stderr, "TI command response does not match expected result.\n" ); -+ } -+ } -+ } -+ else if (atype == ACTION_SERIAL_PORT_PARAMETERS) { -+ action_serial_t *sercmd = (action_serial_t *)actionbuf; -+ -+ /* Set actual baudrate */ -+ fprintf( stderr, -+ "BTS changing baud rate to %u, flow control to %u\n", -+ sercmd->baud, sercmd->flow_control ); -+ -+ tcflush(fd, TCIOFLUSH); -+ -+ if (sercmd->flow_control) -+ ti->c_cflag |= CRTSCTS; -+ else -+ ti->c_cflag &= ~CRTSCTS; -+ if (tcsetattr(fd, TCSANOW, ti) < 0) { -+ perror("Can't set port settings"); -+ return -1; -+ } -+ -+ u->speed = sercmd->baud; -+ -+ tcflush(fd, TCIOFLUSH); -+ if (set_speed(fd, ti, sercmd->baud) < 0) { -+ perror("Can't set baud rate"); -+ return -1; -+ } -+ } -+ else if (atype == ACTION_DELAY) { -+ action_delay_t *delay = (action_delay_t *)actionbuf; -+ usleep(delay->msec); /* seems they give usec, not msec */ -+ } -+ else { -+ fprintf( stderr, "BTS action type = %d: ", (int)atype ); -+ for (i=0; i> 2) == 3) { -+ /* BRF6150 */ -+ int err; -+ -+ nanosleep(&tm, NULL); -+ if ((err = brf6150(fd, u, ti)) != 0) { -+ fprintf(stderr, "Texas module script failed (err=%d)\n", err); -+ return -1; -+ } -+ } -+ - nanosleep(&tm, NULL); - return 0; - } -@@ -1204,7 +1326,7 @@ - { - printf("hciattach - HCI UART driver initialization utility\n"); - printf("Usage:\n"); -- printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [speed] [flow|noflow] [bdaddr]\n"); -+ printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [-S bts-script] [speed] [flow|noflow] [bdaddr]\n"); - printf("\thciattach -l\n"); - } - -@@ -1219,11 +1341,12 @@ - struct sigaction sa; - struct pollfd p; - char dev[PATH_MAX]; -+ char *bts = NULL; - - detach = 1; - printpid = 0; - -- while ((opt=getopt(argc, argv, "bnpt:s:l")) != EOF) { -+ while ((opt=getopt(argc, argv, "bnpt:s:S:l")) != EOF) { - switch(opt) { - case 'b': - send_break = 1; -@@ -1245,6 +1368,10 @@ - init_speed = atoi(optarg); - break; - -+ case 'S': -+ bts = optarg; -+ break; -+ - case 'l': - for (i = 0; uart[i].type; i++) { - printf("%-10s0x%04x,0x%04x\n", uart[i].type, -@@ -1320,6 +1447,8 @@ - if (init_speed) - u->init_speed = init_speed; - -+ u->bts = bts; -+ - memset(&sa, 0, sizeof(sa)); - sa.sa_flags = SA_NOCLDSTOP; - sa.sa_handler = sig_alarm; ---- bluez-utils-3.1/tools/ti_bts.h.orig 2006-07-23 14:07:26.000000000 +0200 -+++ bluez-utils-3.1/tools/ti_bts.h 2006-07-23 14:07:46.000000000 +0200 -@@ -0,0 +1,116 @@ -+/* -+ * Copyright (c) 2005 Texas Instruments, Inc. -+ * Ported by SDG Systems, LLC -+ * -+ * 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; -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. -+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY -+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * -+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, -+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS -+ * SOFTWARE IS DISCLAIMED. -+ * -+ */ -+ -+#ifndef BT_SCRIPT_H -+#define BT_SCRIPT_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* -+ * Define the interface of Bluetooth Script -+ */ -+ -+typedef void bts_t; -+ -+ -+#define ACTION_SEND_COMMAND 1 /* Send out raw data (as is) */ -+#define ACTION_WAIT_EVENT 2 /* Wait for data */ -+#define ACTION_SERIAL_PORT_PARAMETERS 3 -+#define ACTION_DELAY 4 -+#define ACTION_RUN_SCRIPT 5 -+#define ACTION_REMARKS 6 -+ -+/* -+ * Structure for ACTION_SEND_COMMAND -+ */ -+typedef struct tagCActionCommand -+{ -+ unsigned char data[1]; /* Data to send */ -+} action_command_t; -+ -+/* -+ * Structure for ACTION_WAIT_EVENT -+ */ -+typedef struct tagCActionWaitEvent -+{ -+ unsigned long msec; /* in milliseconds */ -+ unsigned long size; -+ unsigned char data[1]; /* Data to wait for */ -+} action_wait_t; -+ -+ -+/* -+ * Structure for ACTION_SERIAL_PORT_PARAMETERS -+ */ -+typedef struct tagCActionSerialPortParameters -+{ -+ unsigned long baud; -+ unsigned long flow_control; -+} action_serial_t; -+ -+/* Flow Control Type */ -+#define FCT_NONE 0 -+#define FCT_HARDWARE 1 -+ -+#define DONT_CHANGE 0xFFFFFFFF /* For both baud rate and flow control */ -+ -+ -+/* -+ * Structure for ACTION_DELAY -+ */ -+typedef struct tagCActionDelay -+{ -+ unsigned long msec; /* in milliseconds */ -+} action_delay_t; -+ -+/* -+ * Structure for ACTION_RUN_SCRIPT -+ */ -+typedef struct tagCActionRunScript -+{ -+ char filename[1]; -+} action_run_t; -+ -+/* -+ * Structure for ACTION_REMARKS -+ */ -+typedef struct tagCActionRemarks -+{ -+ char m_szRemarks[1]; -+} action_remarks_t; -+ -+ -+const char *cis_create_filename(const unsigned char* cmdparms); -+bts_t * bts_load_script(const char* fname, unsigned long* version); -+unsigned long bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, -+ unsigned long nMaxSize, unsigned short* ptype); -+void bts_unload_script(bts_t* bts_fp); -+ -+#ifdef __cplusplus -+}; -+#endif -+ -+#endif /* BT_SCRIPT_H */ -+ ---- bluez-utils-3.1/tools/ti_bts.c.orig 2006-07-23 14:07:28.000000000 +0200 -+++ bluez-utils-3.1/tools/ti_bts.c 2006-07-23 14:07:46.000000000 +0200 -@@ -0,0 +1,149 @@ -+/* -+ * Copyright (c) 2005 Texas Instruments, Inc. -+ * Ported by SDG Systems, LLC -+ * -+ * 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; -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. -+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY -+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * -+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, -+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS -+ * SOFTWARE IS DISCLAIMED. -+ * -+ */ -+ -+ -+#include -+#include -+#include "ti_bts.h" -+ -+#ifndef MAKEWORD -+#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) | ((unsigned short)((unsigned char)(b))) << 8)) -+#endif -+ -+#define TI_MANUFACTURER_ID 13 -+ -+/* -+ * Common Init Script specific -+ */ -+const char * -+cis_create_filename(const unsigned char* cmdparms) -+{ -+ static char bts_file[50]; -+ -+ /* Check for TI's id */ -+ unsigned short manfid = MAKEWORD(cmdparms[8], cmdparms[9]); -+ -+ if (TI_MANUFACTURER_ID == manfid) { -+ unsigned short version = MAKEWORD(cmdparms[10], cmdparms[11]); -+ -+ unsigned short chip = (version & 0x7C00) >> 10; -+ unsigned short min_ver = (version & 0x007F); -+ unsigned short maj_ver = (version & 0x0380) >> 7; -+ -+ if (0 != (version & 0x8000)) { -+ maj_ver |= 0x0008; -+ } -+ -+ sprintf( bts_file, "TIInit_%d.%d.%d.bts", -+ (int)chip, (int)maj_ver, (int)min_ver); -+ -+ return &bts_file[0]; -+ } -+ return NULL; -+} -+ -+typedef struct tagCHeader -+{ -+ unsigned long magic; -+ unsigned long version; -+ unsigned char future[24]; -+} cheader_t; -+ -+ -+/* The value 0x42535442 stands for (in ASCII) BTSB */ -+/* which is Bluetooth Script Binary */ -+#define FILE_HEADER_MAGIC 0x42535442 -+ -+ -+bts_t * -+bts_load_script(const char* fname, unsigned long* version) -+{ -+ bts_t* bts = NULL; -+ FILE* fp = fopen(fname, "rb"); -+ -+ if (NULL != fp) { -+ /* Read header */ -+ cheader_t header; -+ -+ /* Read header */ -+ if (1 == fread(&header, sizeof(header), 1, fp)) { -+ /* Check magic number for correctness */ -+ if (header.magic == FILE_HEADER_MAGIC) { -+ /* If user wants the version number */ -+ if (NULL != version) { -+ *version = header.version; -+ } -+ bts = (bts_t*)fp; -+ } -+ } -+ /* If failed reading the file, close it */ -+ if (NULL == bts) { -+ fclose(fp); -+ } -+ } -+ return bts; -+} -+ -+unsigned long -+bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, -+ unsigned long nMaxSize, unsigned short* ptype) -+{ -+ unsigned long bytes = 0; -+ FILE* fp = (FILE*)bts_fp; -+ unsigned char action_hdr[4]; -+ -+ if (bts_fp == NULL) -+ return 0; -+ -+ /* Each Action has the following: */ -+ /* UINT16 type of this action */ -+ /* UINT16 size of rest */ -+ /* BYTE[] action buffer (for HCI, includes the type byte e.g. 1 for hci command) */ -+ -+ if (1 == fread(&action_hdr[0], sizeof(action_hdr), 1, fp)) { -+ unsigned short type = *(unsigned short*)&action_hdr[0]; -+ unsigned short size = *(unsigned short*)&action_hdr[2]; -+ -+ if (size <= nMaxSize) { -+ int nread = fread(action_buf, sizeof(action_buf[0]), size, fp); -+ -+ if (nread == size) { -+ *ptype = type; -+ bytes = (unsigned long)size; -+ } -+ } -+ } -+ -+ return bytes; -+} -+ -+void -+bts_unload_script(bts_t* bts_fp) -+{ -+ FILE* fp = (FILE*)bts_fp; -+ -+ if (NULL != fp) { -+ fclose(fp); -+ } -+} -+ ---- bluez-utils-3.1/tools/Makefile.am.orig 2006-07-23 14:06:59.000000000 +0200 -+++ bluez-utils-3.1/tools/Makefile.am 2006-07-23 14:07:18.000000000 +0200 -@@ -45,7 +45,7 @@ - - noinst_PROGRAMS = hcisecfilter ppporc - --hciattach_SOURCES = hciattach.c hciattach_st.c -+hciattach_SOURCES = hciattach.c hciattach_st.c ti_bts.h ti_bts.c - hciattach_LDADD = @BLUEZ_LIBS@ - - hciconfig_SOURCES = hciconfig.c csr.h csr.c -- cgit v1.2.3 From 8314927eacf95b2f0cb38d4a81ce2b0d555e293d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 28 Jan 2008 00:46:38 +0000 Subject: bluez-utils: Move version-overridable stuff away from files/. * Or it will be pulled in randomly. --- packages/bluez/bluez-utils-3.x/.mtn2git_empty | 0 .../bluez/bluez-utils-3.x/hciattach-ti-bts.patch | 489 +++++++++++++++++++++ packages/bluez/bluez-utils-3.x/hcid.conf | 72 +++ packages/bluez/files/hciattach-ti-bts.patch | 489 --------------------- packages/bluez/files/hcid.conf | 72 --- 5 files changed, 561 insertions(+), 561 deletions(-) create mode 100644 packages/bluez/bluez-utils-3.x/.mtn2git_empty create mode 100644 packages/bluez/bluez-utils-3.x/hciattach-ti-bts.patch create mode 100644 packages/bluez/bluez-utils-3.x/hcid.conf delete mode 100644 packages/bluez/files/hciattach-ti-bts.patch delete mode 100644 packages/bluez/files/hcid.conf diff --git a/packages/bluez/bluez-utils-3.x/.mtn2git_empty b/packages/bluez/bluez-utils-3.x/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/bluez/bluez-utils-3.x/hciattach-ti-bts.patch b/packages/bluez/bluez-utils-3.x/hciattach-ti-bts.patch new file mode 100644 index 0000000000..8fe37de9d3 --- /dev/null +++ b/packages/bluez/bluez-utils-3.x/hciattach-ti-bts.patch @@ -0,0 +1,489 @@ +--- bluez-utils-2.24/tools/hciattach.c.orig 2005-12-10 15:14:36.000000000 +0100 ++++ bluez-utils-2.24/tools/hciattach.c 2006-01-22 13:56:13.000000000 +0100 +@@ -57,6 +57,8 @@ + #define HCI_UART_3WIRE 2 + #define HCI_UART_H4DS 3 + ++#include "ti_bts.h" ++ + struct uart_t { + char *type; + int m_id; +@@ -66,6 +68,7 @@ + int speed; + int flags; + int (*init) (int fd, struct uart_t *u, struct termios *ti); ++ char *bts; /* bluetooth script */ + }; + + #define FLOW_CTL 0x0001 +@@ -241,6 +244,114 @@ + return 0; + } + ++static int brf6150(int fd, struct uart_t *u, struct termios *ti) ++{ ++ bts_t *bfp; ++ int i; ++ unsigned long vers; ++ unsigned char actionbuf[256]; ++ unsigned char resp[128]; /* Response */ ++ unsigned long count; ++ unsigned short atype; ++ ++ if (u->bts == NULL) /* no script, ignore */ ++ return 0; ++ ++ bfp = bts_load_script( u->bts, &vers ); ++ if (bfp == NULL) ++ return -1; ++ ++ fprintf( stderr, "Loading BTS script version %lu\n", vers ); ++ ++ while ((count = bts_next_action( bfp, actionbuf, ++ sizeof actionbuf - 1, &atype )) != 0) { ++ if (atype == ACTION_REMARKS) { ++ if (actionbuf[0] != 0) ++ fprintf( stderr, "%s\n", actionbuf ); ++ } ++ else if (atype == ACTION_SEND_COMMAND) { ++#if 0 ++ fprintf( stderr, "ACTION_SEND_COMMAND: ", (int)atype ); ++ for (i=0; idata[i] ); ++ } ++ fprintf( stderr, "\n" ); ++#endif ++ usleep(wait->msec); /* seems they give usec, not msec */ ++ /* Read reply. */ ++ if ((count = read_hci_event(fd, resp, sizeof resp)) < 0) { ++ perror("Failed to read TI command response"); ++ return -1; ++ } ++ if (count < wait->size) { ++ fprintf( stderr, "TI command response is short."); ++ } ++ for (i=0; isize; i++) { ++ if (i == 3) continue; /* ignore */ ++ if (resp[i] != wait->data[i]) { ++ fprintf( stderr, "TI command response does not match expected result.\n" ); ++ } ++ } ++ } ++ else if (atype == ACTION_SERIAL_PORT_PARAMETERS) { ++ action_serial_t *sercmd = (action_serial_t *)actionbuf; ++ ++ /* Set actual baudrate */ ++ fprintf( stderr, ++ "BTS changing baud rate to %u, flow control to %u\n", ++ sercmd->baud, sercmd->flow_control ); ++ ++ tcflush(fd, TCIOFLUSH); ++ ++ if (sercmd->flow_control) ++ ti->c_cflag |= CRTSCTS; ++ else ++ ti->c_cflag &= ~CRTSCTS; ++ if (tcsetattr(fd, TCSANOW, ti) < 0) { ++ perror("Can't set port settings"); ++ return -1; ++ } ++ ++ u->speed = sercmd->baud; ++ ++ tcflush(fd, TCIOFLUSH); ++ if (set_speed(fd, ti, sercmd->baud) < 0) { ++ perror("Can't set baud rate"); ++ return -1; ++ } ++ } ++ else if (atype == ACTION_DELAY) { ++ action_delay_t *delay = (action_delay_t *)actionbuf; ++ usleep(delay->msec); /* seems they give usec, not msec */ ++ } ++ else { ++ fprintf( stderr, "BTS action type = %d: ", (int)atype ); ++ for (i=0; i> 2) == 3) { ++ int err; ++ nanosleep(&tm, NULL); ++ ++ /* BRF6150 */ ++ if ((err=brf6150( fd, u, ti )) != 0) { ++ fprintf( stderr, "TI script failed (err=%d)\n", ++ err ); ++ return -1; ++ } ++ } + + nanosleep(&tm, NULL); + return 0; +@@ -953,7 +1075,7 @@ + { + printf("hciattach - HCI UART driver initialization utility\n"); + printf("Usage:\n"); +- printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [speed] [flow|noflow]\n"); ++ printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [-S bts-script] [speed] [flow|noflow]\n"); + printf("\thciattach -l\n"); + } + +@@ -970,11 +1092,12 @@ + pid_t pid; + struct sigaction sa; + char dev[PATH_MAX]; ++ char *bts = NULL; + + detach = 1; + printpid = 0; + +- while ((opt=getopt(argc, argv, "bnpt:s:l")) != EOF) { ++ while ((opt=getopt(argc, argv, "bnpt:s:S:l")) != EOF) { + switch(opt) { + case 'b': + send_break = 1; +@@ -996,6 +1119,10 @@ + init_speed = atoi(optarg); + break; + ++ case 'S': ++ bts = optarg; ++ break; ++ + case 'l': + for (i = 0; uart[i].type; i++) { + printf("%-10s0x%04x,0x%04x\n", uart[i].type, +@@ -1067,6 +1194,8 @@ + if (init_speed) + u->init_speed = init_speed; + ++ u->bts = bts; ++ + memset(&sa, 0, sizeof(sa)); + sa.sa_flags = SA_NOCLDSTOP; + sa.sa_handler = sig_alarm; +--- bluez-utils-2.24/tools/Makefile.am.orig 2005-12-03 07:22:16.000000000 +0100 ++++ bluez-utils-2.24/tools/Makefile.am 2006-01-22 13:53:59.000000000 +0100 +@@ -37,6 +37,9 @@ + + noinst_PROGRAMS = hcisecfilter ppporc + ++hciattach_SOURCES = hciattach.c ti_bts.h ti_bts.c ++hciattach_LDADD = @BLUEZ_LIBS@ ++ + hciconfig_SOURCES = hciconfig.c csr.h csr.c + hciconfig_LDADD = @BLUEZ_LIBS@ $(top_builddir)/common/libtextfile.a + +--- bluez-utils-2.24/tools/ti_bts.h.orig 2006-01-22 13:56:38.000000000 +0100 ++++ bluez-utils-2.24/tools/ti_bts.h 2006-01-22 13:53:59.000000000 +0100 +@@ -0,0 +1,116 @@ ++/* ++ * Copyright (c) 2005 Texas Instruments, Inc. ++ * Ported by SDG Systems, LLC ++ * ++ * 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; ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. ++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY ++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ * ++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, ++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS ++ * SOFTWARE IS DISCLAIMED. ++ * ++ */ ++ ++#ifndef BT_SCRIPT_H ++#define BT_SCRIPT_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* ++ * Define the interface of Bluetooth Script ++ */ ++ ++typedef void bts_t; ++ ++ ++#define ACTION_SEND_COMMAND 1 /* Send out raw data (as is) */ ++#define ACTION_WAIT_EVENT 2 /* Wait for data */ ++#define ACTION_SERIAL_PORT_PARAMETERS 3 ++#define ACTION_DELAY 4 ++#define ACTION_RUN_SCRIPT 5 ++#define ACTION_REMARKS 6 ++ ++/* ++ * Structure for ACTION_SEND_COMMAND ++ */ ++typedef struct tagCActionCommand ++{ ++ unsigned char data[1]; /* Data to send */ ++} action_command_t; ++ ++/* ++ * Structure for ACTION_WAIT_EVENT ++ */ ++typedef struct tagCActionWaitEvent ++{ ++ unsigned long msec; /* in milliseconds */ ++ unsigned long size; ++ unsigned char data[1]; /* Data to wait for */ ++} action_wait_t; ++ ++ ++/* ++ * Structure for ACTION_SERIAL_PORT_PARAMETERS ++ */ ++typedef struct tagCActionSerialPortParameters ++{ ++ unsigned long baud; ++ unsigned long flow_control; ++} action_serial_t; ++ ++/* Flow Control Type */ ++#define FCT_NONE 0 ++#define FCT_HARDWARE 1 ++ ++#define DONT_CHANGE 0xFFFFFFFF /* For both baud rate and flow control */ ++ ++ ++/* ++ * Structure for ACTION_DELAY ++ */ ++typedef struct tagCActionDelay ++{ ++ unsigned long msec; /* in milliseconds */ ++} action_delay_t; ++ ++/* ++ * Structure for ACTION_RUN_SCRIPT ++ */ ++typedef struct tagCActionRunScript ++{ ++ char filename[1]; ++} action_run_t; ++ ++/* ++ * Structure for ACTION_REMARKS ++ */ ++typedef struct tagCActionRemarks ++{ ++ char m_szRemarks[1]; ++} action_remarks_t; ++ ++ ++const char *cis_create_filename(const unsigned char* cmdparms); ++bts_t * bts_load_script(const char* fname, unsigned long* version); ++unsigned long bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, ++ unsigned long nMaxSize, unsigned short* ptype); ++void bts_unload_script(bts_t* bts_fp); ++ ++#ifdef __cplusplus ++}; ++#endif ++ ++#endif /* BT_SCRIPT_H */ ++ +--- bluez-utils-2.24/tools/ti_bts.c.orig 2006-01-22 13:56:36.000000000 +0100 ++++ bluez-utils-2.24/tools/ti_bts.c 2006-01-22 13:56:31.000000000 +0100 +@@ -0,0 +1,149 @@ ++/* ++ * Copyright (c) 2005 Texas Instruments, Inc. ++ * Ported by SDG Systems, LLC ++ * ++ * 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; ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. ++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY ++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ * ++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, ++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS ++ * SOFTWARE IS DISCLAIMED. ++ * ++ */ ++ ++ ++#include ++#include ++#include "ti_bts.h" ++ ++#ifndef MAKEWORD ++#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) | ((unsigned short)((unsigned char)(b))) << 8)) ++#endif ++ ++#define TI_MANUFACTURER_ID 13 ++ ++/* ++ * Common Init Script specific ++ */ ++const char * ++cis_create_filename(const unsigned char* cmdparms) ++{ ++ static char bts_file[50]; ++ ++ /* Check for TI's id */ ++ unsigned short manfid = MAKEWORD(cmdparms[8], cmdparms[9]); ++ ++ if (TI_MANUFACTURER_ID == manfid) { ++ unsigned short version = MAKEWORD(cmdparms[10], cmdparms[11]); ++ ++ unsigned short chip = (version & 0x7C00) >> 10; ++ unsigned short min_ver = (version & 0x007F); ++ unsigned short maj_ver = (version & 0x0380) >> 7; ++ ++ if (0 != (version & 0x8000)) { ++ maj_ver |= 0x0008; ++ } ++ ++ sprintf( bts_file, "TIInit_%d.%d.%d.bts", ++ (int)chip, (int)maj_ver, (int)min_ver); ++ ++ return &bts_file[0]; ++ } ++ return NULL; ++} ++ ++typedef struct tagCHeader ++{ ++ unsigned long magic; ++ unsigned long version; ++ unsigned char future[24]; ++} cheader_t; ++ ++ ++/* The value 0x42535442 stands for (in ASCII) BTSB */ ++/* which is Bluetooth Script Binary */ ++#define FILE_HEADER_MAGIC 0x42535442 ++ ++ ++bts_t * ++bts_load_script(const char* fname, unsigned long* version) ++{ ++ bts_t* bts = NULL; ++ FILE* fp = fopen(fname, "rb"); ++ ++ if (NULL != fp) { ++ /* Read header */ ++ cheader_t header; ++ ++ /* Read header */ ++ if (1 == fread(&header, sizeof(header), 1, fp)) { ++ /* Check magic number for correctness */ ++ if (header.magic == FILE_HEADER_MAGIC) { ++ /* If user wants the version number */ ++ if (NULL != version) { ++ *version = header.version; ++ } ++ bts = (bts_t*)fp; ++ } ++ } ++ /* If failed reading the file, close it */ ++ if (NULL == bts) { ++ fclose(fp); ++ } ++ } ++ return bts; ++} ++ ++unsigned long ++bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, ++ unsigned long nMaxSize, unsigned short* ptype) ++{ ++ unsigned long bytes = 0; ++ FILE* fp = (FILE*)bts_fp; ++ unsigned char action_hdr[4]; ++ ++ if (bts_fp == NULL) ++ return 0; ++ ++ /* Each Action has the following: */ ++ /* UINT16 type of this action */ ++ /* UINT16 size of rest */ ++ /* BYTE[] action buffer (for HCI, includes the type byte e.g. 1 for hci command) */ ++ ++ if (1 == fread(&action_hdr[0], sizeof(action_hdr), 1, fp)) { ++ unsigned short type = *(unsigned short*)&action_hdr[0]; ++ unsigned short size = *(unsigned short*)&action_hdr[2]; ++ ++ if (size <= nMaxSize) { ++ int nread = fread(action_buf, sizeof(action_buf[0]), size, fp); ++ ++ if (nread == size) { ++ *ptype = type; ++ bytes = (unsigned long)size; ++ } ++ } ++ } ++ ++ return bytes; ++} ++ ++void ++bts_unload_script(bts_t* bts_fp) ++{ ++ FILE* fp = (FILE*)bts_fp; ++ ++ if (NULL != fp) { ++ fclose(fp); ++ } ++} ++ diff --git a/packages/bluez/bluez-utils-3.x/hcid.conf b/packages/bluez/bluez-utils-3.x/hcid.conf new file mode 100644 index 0000000000..44e9c46fb0 --- /dev/null +++ b/packages/bluez/bluez-utils-3.x/hcid.conf @@ -0,0 +1,72 @@ +# +# HCI daemon configuration file. +# +# $Id: hcid.conf,v 1.4 2004/04/29 20:14:21 holtmann Exp $ +# + +# HCId options +options { + # Automatically initialize new devices + autoinit yes; + + # Security Manager mode + # none - Security manager disabled + # auto - Use local PIN for incoming connections + # user - Always ask user for a PIN + # + security auto; + + # Pairing mode + # none - Pairing disabled + # multi - Allow pairing with already paired devices + # once - Pair once and deny successive attempts + pairing multi; + + # PIN helper + pin_helper /bin/bluepin; + + # D-Bus PIN helper + # dbus_pin_helper; +} + +# Default settings for HCI devices +device { + # Local device name + # %d - device id + # %h - host name + name "%h"; + + # Local device class + class 0x120112; + + # Default packet type + #pkt_type DH1,DM1,HV1; + + # Inquiry and Page scan + iscan enable; pscan enable; + + # Default link mode + # none - no specific policy + # accept - always accept incoming connections + # master - become master on incoming connections, + # deny role switch on outgoing connections + # + #lm accept,master; + # + lm accept; + + # Default link policy + # none - no specific policy + # rswitch - allow role switch + # hold - allow hold mode + # sniff - allow sniff mode + # park - allow park mode + # + #lp hold,sniff; + # + lp rswitch,hold,sniff,park; + + # Authentication and Encryption + #auth enable; + encrypt enable; +} diff --git a/packages/bluez/files/hciattach-ti-bts.patch b/packages/bluez/files/hciattach-ti-bts.patch deleted file mode 100644 index 8fe37de9d3..0000000000 --- a/packages/bluez/files/hciattach-ti-bts.patch +++ /dev/null @@ -1,489 +0,0 @@ ---- bluez-utils-2.24/tools/hciattach.c.orig 2005-12-10 15:14:36.000000000 +0100 -+++ bluez-utils-2.24/tools/hciattach.c 2006-01-22 13:56:13.000000000 +0100 -@@ -57,6 +57,8 @@ - #define HCI_UART_3WIRE 2 - #define HCI_UART_H4DS 3 - -+#include "ti_bts.h" -+ - struct uart_t { - char *type; - int m_id; -@@ -66,6 +68,7 @@ - int speed; - int flags; - int (*init) (int fd, struct uart_t *u, struct termios *ti); -+ char *bts; /* bluetooth script */ - }; - - #define FLOW_CTL 0x0001 -@@ -241,6 +244,114 @@ - return 0; - } - -+static int brf6150(int fd, struct uart_t *u, struct termios *ti) -+{ -+ bts_t *bfp; -+ int i; -+ unsigned long vers; -+ unsigned char actionbuf[256]; -+ unsigned char resp[128]; /* Response */ -+ unsigned long count; -+ unsigned short atype; -+ -+ if (u->bts == NULL) /* no script, ignore */ -+ return 0; -+ -+ bfp = bts_load_script( u->bts, &vers ); -+ if (bfp == NULL) -+ return -1; -+ -+ fprintf( stderr, "Loading BTS script version %lu\n", vers ); -+ -+ while ((count = bts_next_action( bfp, actionbuf, -+ sizeof actionbuf - 1, &atype )) != 0) { -+ if (atype == ACTION_REMARKS) { -+ if (actionbuf[0] != 0) -+ fprintf( stderr, "%s\n", actionbuf ); -+ } -+ else if (atype == ACTION_SEND_COMMAND) { -+#if 0 -+ fprintf( stderr, "ACTION_SEND_COMMAND: ", (int)atype ); -+ for (i=0; idata[i] ); -+ } -+ fprintf( stderr, "\n" ); -+#endif -+ usleep(wait->msec); /* seems they give usec, not msec */ -+ /* Read reply. */ -+ if ((count = read_hci_event(fd, resp, sizeof resp)) < 0) { -+ perror("Failed to read TI command response"); -+ return -1; -+ } -+ if (count < wait->size) { -+ fprintf( stderr, "TI command response is short."); -+ } -+ for (i=0; isize; i++) { -+ if (i == 3) continue; /* ignore */ -+ if (resp[i] != wait->data[i]) { -+ fprintf( stderr, "TI command response does not match expected result.\n" ); -+ } -+ } -+ } -+ else if (atype == ACTION_SERIAL_PORT_PARAMETERS) { -+ action_serial_t *sercmd = (action_serial_t *)actionbuf; -+ -+ /* Set actual baudrate */ -+ fprintf( stderr, -+ "BTS changing baud rate to %u, flow control to %u\n", -+ sercmd->baud, sercmd->flow_control ); -+ -+ tcflush(fd, TCIOFLUSH); -+ -+ if (sercmd->flow_control) -+ ti->c_cflag |= CRTSCTS; -+ else -+ ti->c_cflag &= ~CRTSCTS; -+ if (tcsetattr(fd, TCSANOW, ti) < 0) { -+ perror("Can't set port settings"); -+ return -1; -+ } -+ -+ u->speed = sercmd->baud; -+ -+ tcflush(fd, TCIOFLUSH); -+ if (set_speed(fd, ti, sercmd->baud) < 0) { -+ perror("Can't set baud rate"); -+ return -1; -+ } -+ } -+ else if (atype == ACTION_DELAY) { -+ action_delay_t *delay = (action_delay_t *)actionbuf; -+ usleep(delay->msec); /* seems they give usec, not msec */ -+ } -+ else { -+ fprintf( stderr, "BTS action type = %d: ", (int)atype ); -+ for (i=0; i> 2) == 3) { -+ int err; -+ nanosleep(&tm, NULL); -+ -+ /* BRF6150 */ -+ if ((err=brf6150( fd, u, ti )) != 0) { -+ fprintf( stderr, "TI script failed (err=%d)\n", -+ err ); -+ return -1; -+ } -+ } - - nanosleep(&tm, NULL); - return 0; -@@ -953,7 +1075,7 @@ - { - printf("hciattach - HCI UART driver initialization utility\n"); - printf("Usage:\n"); -- printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [speed] [flow|noflow]\n"); -+ printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [-S bts-script] [speed] [flow|noflow]\n"); - printf("\thciattach -l\n"); - } - -@@ -970,11 +1092,12 @@ - pid_t pid; - struct sigaction sa; - char dev[PATH_MAX]; -+ char *bts = NULL; - - detach = 1; - printpid = 0; - -- while ((opt=getopt(argc, argv, "bnpt:s:l")) != EOF) { -+ while ((opt=getopt(argc, argv, "bnpt:s:S:l")) != EOF) { - switch(opt) { - case 'b': - send_break = 1; -@@ -996,6 +1119,10 @@ - init_speed = atoi(optarg); - break; - -+ case 'S': -+ bts = optarg; -+ break; -+ - case 'l': - for (i = 0; uart[i].type; i++) { - printf("%-10s0x%04x,0x%04x\n", uart[i].type, -@@ -1067,6 +1194,8 @@ - if (init_speed) - u->init_speed = init_speed; - -+ u->bts = bts; -+ - memset(&sa, 0, sizeof(sa)); - sa.sa_flags = SA_NOCLDSTOP; - sa.sa_handler = sig_alarm; ---- bluez-utils-2.24/tools/Makefile.am.orig 2005-12-03 07:22:16.000000000 +0100 -+++ bluez-utils-2.24/tools/Makefile.am 2006-01-22 13:53:59.000000000 +0100 -@@ -37,6 +37,9 @@ - - noinst_PROGRAMS = hcisecfilter ppporc - -+hciattach_SOURCES = hciattach.c ti_bts.h ti_bts.c -+hciattach_LDADD = @BLUEZ_LIBS@ -+ - hciconfig_SOURCES = hciconfig.c csr.h csr.c - hciconfig_LDADD = @BLUEZ_LIBS@ $(top_builddir)/common/libtextfile.a - ---- bluez-utils-2.24/tools/ti_bts.h.orig 2006-01-22 13:56:38.000000000 +0100 -+++ bluez-utils-2.24/tools/ti_bts.h 2006-01-22 13:53:59.000000000 +0100 -@@ -0,0 +1,116 @@ -+/* -+ * Copyright (c) 2005 Texas Instruments, Inc. -+ * Ported by SDG Systems, LLC -+ * -+ * 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; -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. -+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY -+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * -+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, -+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS -+ * SOFTWARE IS DISCLAIMED. -+ * -+ */ -+ -+#ifndef BT_SCRIPT_H -+#define BT_SCRIPT_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* -+ * Define the interface of Bluetooth Script -+ */ -+ -+typedef void bts_t; -+ -+ -+#define ACTION_SEND_COMMAND 1 /* Send out raw data (as is) */ -+#define ACTION_WAIT_EVENT 2 /* Wait for data */ -+#define ACTION_SERIAL_PORT_PARAMETERS 3 -+#define ACTION_DELAY 4 -+#define ACTION_RUN_SCRIPT 5 -+#define ACTION_REMARKS 6 -+ -+/* -+ * Structure for ACTION_SEND_COMMAND -+ */ -+typedef struct tagCActionCommand -+{ -+ unsigned char data[1]; /* Data to send */ -+} action_command_t; -+ -+/* -+ * Structure for ACTION_WAIT_EVENT -+ */ -+typedef struct tagCActionWaitEvent -+{ -+ unsigned long msec; /* in milliseconds */ -+ unsigned long size; -+ unsigned char data[1]; /* Data to wait for */ -+} action_wait_t; -+ -+ -+/* -+ * Structure for ACTION_SERIAL_PORT_PARAMETERS -+ */ -+typedef struct tagCActionSerialPortParameters -+{ -+ unsigned long baud; -+ unsigned long flow_control; -+} action_serial_t; -+ -+/* Flow Control Type */ -+#define FCT_NONE 0 -+#define FCT_HARDWARE 1 -+ -+#define DONT_CHANGE 0xFFFFFFFF /* For both baud rate and flow control */ -+ -+ -+/* -+ * Structure for ACTION_DELAY -+ */ -+typedef struct tagCActionDelay -+{ -+ unsigned long msec; /* in milliseconds */ -+} action_delay_t; -+ -+/* -+ * Structure for ACTION_RUN_SCRIPT -+ */ -+typedef struct tagCActionRunScript -+{ -+ char filename[1]; -+} action_run_t; -+ -+/* -+ * Structure for ACTION_REMARKS -+ */ -+typedef struct tagCActionRemarks -+{ -+ char m_szRemarks[1]; -+} action_remarks_t; -+ -+ -+const char *cis_create_filename(const unsigned char* cmdparms); -+bts_t * bts_load_script(const char* fname, unsigned long* version); -+unsigned long bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, -+ unsigned long nMaxSize, unsigned short* ptype); -+void bts_unload_script(bts_t* bts_fp); -+ -+#ifdef __cplusplus -+}; -+#endif -+ -+#endif /* BT_SCRIPT_H */ -+ ---- bluez-utils-2.24/tools/ti_bts.c.orig 2006-01-22 13:56:36.000000000 +0100 -+++ bluez-utils-2.24/tools/ti_bts.c 2006-01-22 13:56:31.000000000 +0100 -@@ -0,0 +1,149 @@ -+/* -+ * Copyright (c) 2005 Texas Instruments, Inc. -+ * Ported by SDG Systems, LLC -+ * -+ * 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; -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. -+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY -+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * -+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, -+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS -+ * SOFTWARE IS DISCLAIMED. -+ * -+ */ -+ -+ -+#include -+#include -+#include "ti_bts.h" -+ -+#ifndef MAKEWORD -+#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) | ((unsigned short)((unsigned char)(b))) << 8)) -+#endif -+ -+#define TI_MANUFACTURER_ID 13 -+ -+/* -+ * Common Init Script specific -+ */ -+const char * -+cis_create_filename(const unsigned char* cmdparms) -+{ -+ static char bts_file[50]; -+ -+ /* Check for TI's id */ -+ unsigned short manfid = MAKEWORD(cmdparms[8], cmdparms[9]); -+ -+ if (TI_MANUFACTURER_ID == manfid) { -+ unsigned short version = MAKEWORD(cmdparms[10], cmdparms[11]); -+ -+ unsigned short chip = (version & 0x7C00) >> 10; -+ unsigned short min_ver = (version & 0x007F); -+ unsigned short maj_ver = (version & 0x0380) >> 7; -+ -+ if (0 != (version & 0x8000)) { -+ maj_ver |= 0x0008; -+ } -+ -+ sprintf( bts_file, "TIInit_%d.%d.%d.bts", -+ (int)chip, (int)maj_ver, (int)min_ver); -+ -+ return &bts_file[0]; -+ } -+ return NULL; -+} -+ -+typedef struct tagCHeader -+{ -+ unsigned long magic; -+ unsigned long version; -+ unsigned char future[24]; -+} cheader_t; -+ -+ -+/* The value 0x42535442 stands for (in ASCII) BTSB */ -+/* which is Bluetooth Script Binary */ -+#define FILE_HEADER_MAGIC 0x42535442 -+ -+ -+bts_t * -+bts_load_script(const char* fname, unsigned long* version) -+{ -+ bts_t* bts = NULL; -+ FILE* fp = fopen(fname, "rb"); -+ -+ if (NULL != fp) { -+ /* Read header */ -+ cheader_t header; -+ -+ /* Read header */ -+ if (1 == fread(&header, sizeof(header), 1, fp)) { -+ /* Check magic number for correctness */ -+ if (header.magic == FILE_HEADER_MAGIC) { -+ /* If user wants the version number */ -+ if (NULL != version) { -+ *version = header.version; -+ } -+ bts = (bts_t*)fp; -+ } -+ } -+ /* If failed reading the file, close it */ -+ if (NULL == bts) { -+ fclose(fp); -+ } -+ } -+ return bts; -+} -+ -+unsigned long -+bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, -+ unsigned long nMaxSize, unsigned short* ptype) -+{ -+ unsigned long bytes = 0; -+ FILE* fp = (FILE*)bts_fp; -+ unsigned char action_hdr[4]; -+ -+ if (bts_fp == NULL) -+ return 0; -+ -+ /* Each Action has the following: */ -+ /* UINT16 type of this action */ -+ /* UINT16 size of rest */ -+ /* BYTE[] action buffer (for HCI, includes the type byte e.g. 1 for hci command) */ -+ -+ if (1 == fread(&action_hdr[0], sizeof(action_hdr), 1, fp)) { -+ unsigned short type = *(unsigned short*)&action_hdr[0]; -+ unsigned short size = *(unsigned short*)&action_hdr[2]; -+ -+ if (size <= nMaxSize) { -+ int nread = fread(action_buf, sizeof(action_buf[0]), size, fp); -+ -+ if (nread == size) { -+ *ptype = type; -+ bytes = (unsigned long)size; -+ } -+ } -+ } -+ -+ return bytes; -+} -+ -+void -+bts_unload_script(bts_t* bts_fp) -+{ -+ FILE* fp = (FILE*)bts_fp; -+ -+ if (NULL != fp) { -+ fclose(fp); -+ } -+} -+ diff --git a/packages/bluez/files/hcid.conf b/packages/bluez/files/hcid.conf deleted file mode 100644 index 44e9c46fb0..0000000000 --- a/packages/bluez/files/hcid.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# HCI daemon configuration file. -# -# $Id: hcid.conf,v 1.4 2004/04/29 20:14:21 holtmann Exp $ -# - -# HCId options -options { - # Automatically initialize new devices - autoinit yes; - - # Security Manager mode - # none - Security manager disabled - # auto - Use local PIN for incoming connections - # user - Always ask user for a PIN - # - security auto; - - # Pairing mode - # none - Pairing disabled - # multi - Allow pairing with already paired devices - # once - Pair once and deny successive attempts - pairing multi; - - # PIN helper - pin_helper /bin/bluepin; - - # D-Bus PIN helper - # dbus_pin_helper; -} - -# Default settings for HCI devices -device { - # Local device name - # %d - device id - # %h - host name - name "%h"; - - # Local device class - class 0x120112; - - # Default packet type - #pkt_type DH1,DM1,HV1; - - # Inquiry and Page scan - iscan enable; pscan enable; - - # Default link mode - # none - no specific policy - # accept - always accept incoming connections - # master - become master on incoming connections, - # deny role switch on outgoing connections - # - #lm accept,master; - # - lm accept; - - # Default link policy - # none - no specific policy - # rswitch - allow role switch - # hold - allow hold mode - # sniff - allow sniff mode - # park - allow park mode - # - #lp hold,sniff; - # - lp rswitch,hold,sniff,park; - - # Authentication and Encryption - #auth enable; - encrypt enable; -} -- cgit v1.2.3 From ded00f268307c513cc2166b8437e49d2895b32b5 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 28 Jan 2008 01:45:51 +0000 Subject: libvncserver: update to version 0.9 * latest version 0.9.1 fails, needs some looking into * consolidate bb file into packages/vnc directory * reorder fields according to StyleGuide --- packages/libvncserver/.mtn2git_empty | 0 packages/libvncserver/libvncserver_0.8.2.bb | 32 ----------------------------- packages/vnc/libvncserver_0.9.bb | 32 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 32 deletions(-) delete mode 100644 packages/libvncserver/.mtn2git_empty delete mode 100644 packages/libvncserver/libvncserver_0.8.2.bb create mode 100644 packages/vnc/libvncserver_0.9.bb diff --git a/packages/libvncserver/.mtn2git_empty b/packages/libvncserver/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libvncserver/libvncserver_0.8.2.bb b/packages/libvncserver/libvncserver_0.8.2.bb deleted file mode 100644 index 188b22a14e..0000000000 --- a/packages/libvncserver/libvncserver_0.8.2.bb +++ /dev/null @@ -1,32 +0,0 @@ -DESCRIPTION = "A library to support implementations of RDP/VNC servers" -LICENSE = "GPLv2" -HOMEPAGE = "http://sourceforge.net/projects/libvncserver" -AUTHOR = "Johannes Schindelin " -SECTION = "libs" -PRIORITY = "optional" -PROVIDES = "x11vnc" -DEPENDS = "virtual/libsdl virtual/libx11 zlib jpeg libxext" -PR = "r2" - -SRC_URI = "${SOURCEFORGE_MIRROR}/libvncserver/LibVNCServer-${PV}.tar.gz;md5sum=17a18e398af6c1730f72068022a152aa" -S = "${WORKDIR}/LibVNCServer-${PV}" - -inherit autotools - -do_stage() { - autotools_stage_all -} - -do_install_append() { - install -d ${D}${bindir} - install -m 0755 examples/storepasswd ${D}${bindir} - install -d ${D}${datadir}/fbvncserver/classes - install -m 0644 classes/index.vnc ${D}${datadir}/fbvncserver/classes/ - install -m 0644 classes/VncViewer.jar ${D}${datadir}/fbvncserver/classes/ -} - -PACKAGES =+ "x11vnc libvncserver-storepasswd libvncserver-javaapplet" -FILES_x11vnc = "${bindir}/x11vnc ${bindir}/LinuxVNC" -FILES_libvncserver-storepasswd = "${bindir}/storepasswd" -FILES_libvncserver-javaapplet = "${datadir}/fbvncserver/classes/index.vnc \ - ${datadir}/fbvncserver/classes/VncViewer.jar" diff --git a/packages/vnc/libvncserver_0.9.bb b/packages/vnc/libvncserver_0.9.bb new file mode 100644 index 0000000000..7aca752c0b --- /dev/null +++ b/packages/vnc/libvncserver_0.9.bb @@ -0,0 +1,32 @@ +DESCRIPTION = "A library to support implementations of RDP/VNC servers" +AUTHOR = "Johannes Schindelin " +HOMEPAGE = "http://sourceforge.net/projects/libvncserver" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "GPLv2" +DEPENDS = "virtual/libsdl virtual/libx11 zlib jpeg libxext" +PROVIDES = "x11vnc" +PR = "r2" + +SRC_URI = "${SOURCEFORGE_MIRROR}/libvncserver/LibVNCServer-${PV}.tar.gz" +S = "${WORKDIR}/LibVNCServer-${PV}" + +inherit autotools + +do_stage() { + autotools_stage_all +} + +do_install_append() { + install -d ${D}${bindir} + install -m 0755 examples/storepasswd ${D}${bindir} + install -d ${D}${datadir}/fbvncserver/classes + install -m 0644 classes/index.vnc ${D}${datadir}/fbvncserver/classes/ + install -m 0644 classes/VncViewer.jar ${D}${datadir}/fbvncserver/classes/ +} + +PACKAGES =+ "x11vnc libvncserver-storepasswd libvncserver-javaapplet" +FILES_x11vnc = "${bindir}/x11vnc ${bindir}/LinuxVNC" +FILES_libvncserver-storepasswd = "${bindir}/storepasswd" +FILES_libvncserver-javaapplet = "${datadir}/fbvncserver/classes/index.vnc \ + ${datadir}/fbvncserver/classes/VncViewer.jar" -- cgit v1.2.3 From 51f60345dd97eead636879516201100d586969b0 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 28 Jan 2008 02:15:16 +0000 Subject: libvncserver: add recipe for version 0.9.1 as proposed in 2411 * this has disabled x11vnc and the SDL viewer. DEFAULT_PREF is -1 * add Patrick to MAINTAINERS file as requested in 2125 --- MAINTAINERS | 4 ++++ packages/vnc/libvncserver/.mtn2git_empty | 0 packages/vnc/libvncserver/configure_ac.patch | 15 +++++++++++++++ packages/vnc/libvncserver_0.9.1.bb | 25 +++++++++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 packages/vnc/libvncserver/.mtn2git_empty create mode 100644 packages/vnc/libvncserver/configure_ac.patch create mode 100644 packages/vnc/libvncserver_0.9.1.bb diff --git a/MAINTAINERS b/MAINTAINERS index 9e5f8f4387..69594e61ba 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -157,6 +157,10 @@ Machines: fic-gta01, fic-gta02, nokia810, x86, qemuarm, qemux86 Interests: Core OE infrastructure, everything Python, EFL, E17, Qt4 Recipes: *python*, efl/*, e17* +Person: Patrick Gfeller +Mail: gfellerpatrik@gmx.net +Recipes: libvncserver, fbvncserver + Person: Paul Sokolovsky Mail: pmiscml@gmail.com Machines: h3900, h4000, hx4700 diff --git a/packages/vnc/libvncserver/.mtn2git_empty b/packages/vnc/libvncserver/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/vnc/libvncserver/configure_ac.patch b/packages/vnc/libvncserver/configure_ac.patch new file mode 100644 index 0000000000..07c067ce7f --- /dev/null +++ b/packages/vnc/libvncserver/configure_ac.patch @@ -0,0 +1,15 @@ +--- LibVNCServer-0.9.1-org/configure.ac 2007-06-02 21:36:29.000000000 +0200 ++++ LibVNCServer-0.9.1-org-org/configure.ac 2007-05-27 17:14:22.000000000 +0200 +@@ -676,9 +676,9 @@ + libvncserver-config + LibVNCServer.spec]) + # x11vnc only: +-if test "$build_x11vnc" = "yes"; then +- AC_CONFIG_FILES([x11vnc/Makefile x11vnc/misc/Makefile]) +-fi ++# if test "$build_x11vnc" = "yes"; then ++# AC_CONFIG_FILES([x11vnc/Makefile x11vnc/misc/Makefile]) ++# fi + + AC_CONFIG_COMMANDS([chmod-libvncserver-config],[chmod a+x libvncserver-config]) + AC_OUTPUT diff --git a/packages/vnc/libvncserver_0.9.1.bb b/packages/vnc/libvncserver_0.9.1.bb new file mode 100644 index 0000000000..c079fdeb15 --- /dev/null +++ b/packages/vnc/libvncserver_0.9.1.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "library for easy implementation of a RDP/VNC server" +AUTHOR = "Johannes Schindelin create libvncserver only +EXTRA_OEMAKE_append=" SUBDIRS='libvncserver' " + +inherit autotools +do_stage() { + autotools_stage_all +} + + + -- cgit v1.2.3 From 2c7c8e8d65c63b9492ccc6f754fed2a4307908cd Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 28 Jan 2008 02:49:39 +0000 Subject: fbvncserver + x11vnc: consolidate all VNC related stuff in packages/vnc/ --- packages/fbvncserver/.mtn2git_empty | 0 packages/fbvncserver/fbvncserver-kmodule_0.9.4.bb | 25 ---------- packages/fbvncserver/fbvncserver_0.9.4.bb | 55 -------------------- packages/fbvncserver/files/.mtn2git_empty | 0 packages/fbvncserver/files/buildfix.patch | 31 ------------ packages/fbvncserver/files/init | 8 --- packages/fbvncserver/files/ipaq.patch | 35 ------------- packages/fbvncserver/files/kernelinclude.patch | 12 ----- packages/fbvncserver/files/libvncs0.6.patch | 61 ----------------------- packages/fbvncserver/files/paths.patch | 52 ------------------- packages/vnc/fbvncserver-kmodule_0.9.4.bb | 25 ++++++++++ packages/vnc/fbvncserver_0.9.4.bb | 55 ++++++++++++++++++++ packages/vnc/files/.mtn2git_empty | 0 packages/vnc/files/buildfix.patch | 31 ++++++++++++ packages/vnc/files/init | 8 +++ packages/vnc/files/ipaq.patch | 35 +++++++++++++ packages/vnc/files/kernelinclude.patch | 12 +++++ packages/vnc/files/libvncs0.6.patch | 61 +++++++++++++++++++++++ packages/vnc/files/paths.patch | 52 +++++++++++++++++++ packages/vnc/x11vnc_0.9.3.bb | 11 ++++ packages/x11vnc/.mtn2git_empty | 0 packages/x11vnc/x11vnc_0.9.3.bb | 11 ---- 22 files changed, 290 insertions(+), 290 deletions(-) delete mode 100644 packages/fbvncserver/.mtn2git_empty delete mode 100644 packages/fbvncserver/fbvncserver-kmodule_0.9.4.bb delete mode 100644 packages/fbvncserver/fbvncserver_0.9.4.bb delete mode 100644 packages/fbvncserver/files/.mtn2git_empty delete mode 100644 packages/fbvncserver/files/buildfix.patch delete mode 100644 packages/fbvncserver/files/init delete mode 100644 packages/fbvncserver/files/ipaq.patch delete mode 100644 packages/fbvncserver/files/kernelinclude.patch delete mode 100644 packages/fbvncserver/files/libvncs0.6.patch delete mode 100644 packages/fbvncserver/files/paths.patch create mode 100644 packages/vnc/fbvncserver-kmodule_0.9.4.bb create mode 100644 packages/vnc/fbvncserver_0.9.4.bb create mode 100644 packages/vnc/files/.mtn2git_empty create mode 100644 packages/vnc/files/buildfix.patch create mode 100644 packages/vnc/files/init create mode 100644 packages/vnc/files/ipaq.patch create mode 100644 packages/vnc/files/kernelinclude.patch create mode 100644 packages/vnc/files/libvncs0.6.patch create mode 100644 packages/vnc/files/paths.patch create mode 100644 packages/vnc/x11vnc_0.9.3.bb delete mode 100644 packages/x11vnc/.mtn2git_empty delete mode 100644 packages/x11vnc/x11vnc_0.9.3.bb diff --git a/packages/fbvncserver/.mtn2git_empty b/packages/fbvncserver/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/fbvncserver/fbvncserver-kmodule_0.9.4.bb b/packages/fbvncserver/fbvncserver-kmodule_0.9.4.bb deleted file mode 100644 index 4abdb6c7b0..0000000000 --- a/packages/fbvncserver/fbvncserver-kmodule_0.9.4.bb +++ /dev/null @@ -1,25 +0,0 @@ -DESCRIPTION = "Framebuffer VNC server keyboard events module" -SECTION = "kernel/modules" -LICENSE = "GPL" -PR = "r1" - -SRC_URI = "http://sdgsystems.com/download/fbvncserver-${PV}.tar.gz \ - file://libvncs0.6.patch;patch=1 \ - file://paths.patch;patch=1 \ - file://kernelinclude.patch;patch=1 \ - file://ipaq.patch;patch=1" - -S = "${WORKDIR}/fbvncserver-${PV}" - -inherit module - -FBVNCSERVER_SYSTEM = "zaurus" -FBVNCSERVER_SYSTEM_h3600 = "ipaq" -FBVNCSERVER_SYSTEM_h3900 = "ipaq" - -EXTRA_OEMAKE = "KERNEL_INCLUDES=-I${STAGING_KERNEL_DIR}/include ${FBVNCSERVER_SYSTEM}_kbdsim.o" - -do_install () { - install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/misc - install -m 0644 ${FBVNCSERVER_SYSTEM}_kbdsim.o ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/misc/kbdsim.o -} diff --git a/packages/fbvncserver/fbvncserver_0.9.4.bb b/packages/fbvncserver/fbvncserver_0.9.4.bb deleted file mode 100644 index e7c8151e18..0000000000 --- a/packages/fbvncserver/fbvncserver_0.9.4.bb +++ /dev/null @@ -1,55 +0,0 @@ -DESCRIPTION = "Framebuffer VNC server" -LICENSE = "GPL" -SECTION = "console/utils" -#DEPENDS = "libvncserver jpeg zlib" -# using older version due of error with libvncserver-0.7.1 -# fbvncserver.c:577: error: structure has no member named `rfbAlwaysShared' -# fbvncserver.c:602: error: structure has no member named `rfbClientHead' -DEPENDS = "libvncserver-0.6 jpeg zlib" -RDEPENDS = "fbvncserver-kmodule libvncserver-storepasswd libvncserver-javaapplet" -PR = "r2" - -SRC_URI = "http://sdgsystems.com/download/fbvncserver-${PV}.tar.gz \ - file://libvncs0.6.patch;patch=1 \ - file://paths.patch;patch=1 \ - file://kernelinclude.patch;patch=1 \ - file://buildfix.patch;patch=1 \ - file://ipaq.patch;patch=1 \ - file://init" - -S = "${WORKDIR}/fbvncserver-${PV}" - -export INCLUDES = "-I${STAGING_INCDIR}" - -export LIBS = "-L${STAGING_LIBDIR} -lpthread" -export VNCSERVER_DIR = "${STAGING_LIBDIR}" -export ZAURUS_ZLIB_LIBS = "${STAGING_LIBDIR}" -export ZAURUS_JPEG_LIBS = "${STAGING_LIBDIR}" - -inherit update-rc.d - -INITSCRIPT_NAME = "fbvncinput" -INITSCRIPT_PARAMS = "defaults 97" - -FBVNCSERVER_SYSTEM = "zaurus" -FBVNCSERVER_SYSTEM_h3600 = "ipaq" -FBVNCSERVER_SYSTEM_h3900 = "ipaq" - -do_compile () { - oe_runmake ${FBVNCSERVER_SYSTEM}_fbvncserver ${FBVNCSERVER_SYSTEM}_tssimd -} - -do_install () { - install -d ${D}${bindir} - install -m 0755 ${FBVNCSERVER_SYSTEM}_fbvncserver ${D}${bindir}/fbvncserver - install -m 0755 ${FBVNCSERVER_SYSTEM}_tssimd ${D}${bindir}/tssimd - - install -d ${D}${datadir}/fbvncserver - install -m 0644 ${FBVNCSERVER_SYSTEM}_panel.jpg ${D}${datadir}/fbvncserver/ - - install -d ${D}${sysconfdir}/init.d - install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/fbvncinput -} - -FILES_${PN} += " /usr/share/fbvncserver/*.jpg" - diff --git a/packages/fbvncserver/files/.mtn2git_empty b/packages/fbvncserver/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/fbvncserver/files/buildfix.patch b/packages/fbvncserver/files/buildfix.patch deleted file mode 100644 index 302dbd9e8e..0000000000 --- a/packages/fbvncserver/files/buildfix.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- fbvncserver-0.9.4/fbvncserver.c.orig 2005-07-31 15:01:32.552177176 +0200 -+++ fbvncserver-0.9.4/fbvncserver.c 2005-07-31 15:02:47.287366483 +0200 -@@ -574,7 +574,6 @@ - rfbScreen = rfbGetScreen(&argc,argv,rfb_width,rfb_height,5,2,2); - rfbScreen->desktopName = DESKTOP_NAME; - rfbScreen->frameBuffer = (char *)rfbbuf; -- rfbScreen->rfbAlwaysShared = TRUE; - rfbScreen->ptrAddEvent = ptrevent; - rfbScreen->kbdAddEvent = keyevent; - rfbScreen->newClientHook = newclient; -@@ -595,18 +594,12 @@ - varblock.b_offset = vscrinfo.blue.offset+vscrinfo.blue.length-5; - varblock.rfb_xres = vscrinfo.yres; - varblock.rfb_maxy = vscrinfo.xres-1; -- while(1) -+ while(1) - { -- /* If no clients are connected, just wait for events and don't bother -- updating the rfb, to save CPU */ -- while(rfbScreen->rfbClientHead==NULL) { -- rfbProcessEvents(rfbScreen,100000); /* We still run a tight loop -- so http clients don't wait */ -- } - /* Process events for a while */ - do - { -- got_event=0; -+ got_event=0; - rfbProcessEvents(rfbScreen,30000); - } - while(got_event); diff --git a/packages/fbvncserver/files/init b/packages/fbvncserver/files/init deleted file mode 100644 index b01a1ebd79..0000000000 --- a/packages/fbvncserver/files/init +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -rm -f /dev/ts -mkfifo /dev/ts -mkfifo /dev/tssim -mknod /dev/kbdsim c 61 0 -insmod -f kbdsim -/usr/bin/tssimd diff --git a/packages/fbvncserver/files/ipaq.patch b/packages/fbvncserver/files/ipaq.patch deleted file mode 100644 index e8070c0f25..0000000000 --- a/packages/fbvncserver/files/ipaq.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff -Nurd fbvncserver-0.9.4.old/fbvncserver.c fbvncserver-0.9.4/fbvncserver.c ---- fbvncserver-0.9.4.old/fbvncserver.c 2005-07-27 22:25:25.069921936 +0200 -+++ fbvncserver-0.9.4/fbvncserver.c 2005-07-27 22:27:21.087284616 +0200 -@@ -28,7 +28,7 @@ - - - #ifdef IPAQ --#define FANCY_PANEL_JPG "/usr/local/vnc/ipaq_panel.jpg" -+#define FANCY_PANEL_JPG "/usr/share/fbvncserver/ipaq_panel.jpg" - #define DESKTOP_NAME "iPAQ" - #else /* #ifdef ZAURUS */ - #define FANCY_PANEL_JPG "/usr/share/fbvncserver/zaurus_panel.jpg" -diff -Nurd fbvncserver-0.9.4.old/Makefile fbvncserver-0.9.4/Makefile ---- fbvncserver-0.9.4.old/Makefile 2005-07-27 22:25:25.068922088 +0200 -+++ fbvncserver-0.9.4/Makefile 2005-07-27 22:26:49.983013184 +0200 -@@ -89,7 +89,7 @@ - ${CC} ${KERNEL_INCLUDES} -Wall -D__KERNEL__ -c -o $@ $< - - ipaq_kbdsim.o: kbdsim.c -- ${CC} -DIPAQ -Wall -D__KERNEL__ -c -o $@ $< -+ ${CC} ${KERNEL_INCLUDES} -DIPAQ -Wall -D__KERNEL__ -c -o $@ $< - - loadjpeg.o: loadjpeg.c \ - loadjpeg.h -diff -Nurd fbvncserver-0.9.4.old/tssimd.c fbvncserver-0.9.4/tssimd.c ---- fbvncserver-0.9.4.old/tssimd.c 2005-07-27 22:25:25.070921784 +0200 -+++ fbvncserver-0.9.4/tssimd.c 2005-07-27 22:25:53.595585376 +0200 -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - #include - #include - #include diff --git a/packages/fbvncserver/files/kernelinclude.patch b/packages/fbvncserver/files/kernelinclude.patch deleted file mode 100644 index b17d4e09c2..0000000000 --- a/packages/fbvncserver/files/kernelinclude.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -urN fbvncserver-0.9.4.old/Makefile fbvncserver-0.9.4/Makefile ---- fbvncserver-0.9.4.old/Makefile 2003-05-19 22:52:24.000000000 -0400 -+++ fbvncserver-0.9.4/Makefile 2004-02-27 10:49:27.000000000 -0500 -@@ -86,7 +86,7 @@ - ${STRIP} $@ - - zaurus_kbdsim.o: kbdsim.c -- ${CC} -Wall -D__KERNEL__ -c -o $@ $< -+ ${CC} ${KERNEL_INCLUDES} -Wall -D__KERNEL__ -c -o $@ $< - - ipaq_kbdsim.o: kbdsim.c - ${CC} -DIPAQ -Wall -D__KERNEL__ -c -o $@ $< diff --git a/packages/fbvncserver/files/libvncs0.6.patch b/packages/fbvncserver/files/libvncs0.6.patch deleted file mode 100644 index 0975c376bd..0000000000 --- a/packages/fbvncserver/files/libvncs0.6.patch +++ /dev/null @@ -1,61 +0,0 @@ -diff -urN fbvncserver-0.9.4.old/fbvncserver.c fbvncserver-0.9.4/fbvncserver.c ---- fbvncserver-0.9.4.old/fbvncserver.c 2003-03-03 01:00:09.000000000 -0500 -+++ fbvncserver-0.9.4/fbvncserver.c 2004-02-12 20:49:40.000000000 -0500 -@@ -18,8 +18,8 @@ - #include - #include - #include --#include "rfb.h" --#include "keysym.h" -+#include "rfb/rfb.h" -+#include "rfb/keysym.h" - #include "keysym2scancode.h" - #include "loadjpeg.h" - #include "panelzones.h" -@@ -42,7 +42,7 @@ - /* Types */ - struct ClientData - { -- Bool oldButton; -+ rfbBool oldButton; - int oldx,oldy; - }; - -@@ -304,7 +304,7 @@ - - - /* Keyboard events handler */ --void keyevent(Bool down,KeySym key,rfbClientPtr cl) -+void keyevent(rfbBool down,rfbKeySym key,rfbClientPtr cl) - { - unsigned char *scancodes; - -diff -urN fbvncserver-0.9.4.old/keysym2scancode.c fbvncserver-0.9.4/keysym2scancode.c ---- fbvncserver-0.9.4.old/keysym2scancode.c 2002-11-16 15:32:04.000000000 -0500 -+++ fbvncserver-0.9.4/keysym2scancode.c 2004-02-12 20:50:33.000000000 -0500 -@@ -7,8 +7,8 @@ - - (c) Pierre-Philippe Coupard, 27/01/2002 - */ --#include "keysym.h" --#include "rfb.h" -+#include "rfb/keysym.h" -+#include "rfb/rfb.h" - #include "keysym2scancode.h" - - -@@ -290,7 +290,7 @@ - - /* Turn a received keysym into a Zaurus keyboard scancode sequence. Each - sequence is terminated by 0xff. Return NULL if no scancode could be found */ --unsigned char *keysym2scancodes(Bool down, KeySym key) -+unsigned char *keysym2scancodes(rfbBool down, rfbKeySym key) - { - #ifndef IPAQ - static int control_down = 0; -diff -urN fbvncserver-0.9.4.old/keysym2scancode.h fbvncserver-0.9.4/keysym2scancode.h ---- fbvncserver-0.9.4.old/keysym2scancode.h 2002-09-05 22:20:10.000000000 -0400 -+++ fbvncserver-0.9.4/keysym2scancode.h 2004-02-12 20:48:19.000000000 -0500 -@@ -1 +1 @@ --unsigned char *keysym2scancodes(Bool down, KeySym key); -+unsigned char *keysym2scancodes(rfbBool down, rfbKeySym key); diff --git a/packages/fbvncserver/files/paths.patch b/packages/fbvncserver/files/paths.patch deleted file mode 100644 index 7c122efc67..0000000000 --- a/packages/fbvncserver/files/paths.patch +++ /dev/null @@ -1,52 +0,0 @@ -diff -urN fbvncserver-0.9.4.old/fbvncserver.c fbvncserver-0.9.4/fbvncserver.c ---- fbvncserver-0.9.4.old/fbvncserver.c 2003-03-03 01:00:09.000000000 -0500 -+++ fbvncserver-0.9.4/fbvncserver.c 2004-02-27 11:35:36.000000000 -0500 -@@ -31,7 +31,7 @@ - #define FANCY_PANEL_JPG "/usr/local/vnc/ipaq_panel.jpg" - #define DESKTOP_NAME "iPAQ" - #else /* #ifdef ZAURUS */ --#define FANCY_PANEL_JPG "/home/root/Applications/fbvncserver/zaurus_panel.jpg" -+#define FANCY_PANEL_JPG "/usr/share/fbvncserver/zaurus_panel.jpg" - #define DESKTOP_NAME "Zaurus" - #endif - -@@ -578,7 +578,7 @@ - rfbScreen->ptrAddEvent = ptrevent; - rfbScreen->kbdAddEvent = keyevent; - rfbScreen->newClientHook = newclient; -- rfbScreen->httpDir = "/home/root/Applications/fbvncserver/classes"; -+ rfbScreen->httpDir = "/usr/share/fbvncserver/classes"; - rfbInitServer(rfbScreen); - - /* Make sure we catch EPIPE so we don't get killed by closed sockets when -diff -urN fbvncserver-0.9.4.old/launch/subclass.cpp fbvncserver-0.9.4/launch/subclass.cpp ---- fbvncserver-0.9.4.old/launch/subclass.cpp 2003-05-10 19:20:02.000000000 -0400 -+++ fbvncserver-0.9.4/launch/subclass.cpp 2004-02-27 11:35:55.000000000 -0500 -@@ -17,13 +17,13 @@ - #include - #include - --#define SCRIPT_LOCATION "/usr/local/bin" -+#define SCRIPT_LOCATION "/usr/bin" - - - mainDialog::mainDialog(QWidget *parent, const char *name, WFlags fl) - : mainDialogSuper(parent, name, fl) - { -- QPixmap qi("/home/root/Applications/fbvncserver/sdglogo.png", "PNG"); -+ QPixmap qi("/usr/share/fbvncserver/sdglogo.png", "PNG"); - QSizePolicy qsp(QSizePolicy::Fixed, QSizePolicy::Fixed); - SDG_Pixmap->setSizePolicy(qsp); - SDG_Pixmap->setPixmap(qi); -diff -urN fbvncserver-0.9.4.old/splash/subclass.cpp fbvncserver-0.9.4/splash/subclass.cpp ---- fbvncserver-0.9.4.old/splash/subclass.cpp 2003-04-29 23:23:41.000000000 -0400 -+++ fbvncserver-0.9.4/splash/subclass.cpp 2004-02-27 11:35:36.000000000 -0500 -@@ -17,7 +17,7 @@ - fbvncserverSplash::fbvncserverSplash(QWidget *parent, const char *name, bool modal, WFlags fl) - : fbvncserverSplashSuper(parent, name, modal, fl) - { -- QPixmap qi("/home/root/Applications/fbvncserver/sdglogo.png", "PNG"); -+ QPixmap qi("/usr/share/fbvncserver/sdglogo.png", "PNG"); - QSizePolicy qsp(QSizePolicy::Fixed, QSizePolicy::Fixed); - SDG_Pixmap->setSizePolicy(qsp); - SDG_Pixmap->setPixmap(qi); diff --git a/packages/vnc/fbvncserver-kmodule_0.9.4.bb b/packages/vnc/fbvncserver-kmodule_0.9.4.bb new file mode 100644 index 0000000000..4abdb6c7b0 --- /dev/null +++ b/packages/vnc/fbvncserver-kmodule_0.9.4.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "Framebuffer VNC server keyboard events module" +SECTION = "kernel/modules" +LICENSE = "GPL" +PR = "r1" + +SRC_URI = "http://sdgsystems.com/download/fbvncserver-${PV}.tar.gz \ + file://libvncs0.6.patch;patch=1 \ + file://paths.patch;patch=1 \ + file://kernelinclude.patch;patch=1 \ + file://ipaq.patch;patch=1" + +S = "${WORKDIR}/fbvncserver-${PV}" + +inherit module + +FBVNCSERVER_SYSTEM = "zaurus" +FBVNCSERVER_SYSTEM_h3600 = "ipaq" +FBVNCSERVER_SYSTEM_h3900 = "ipaq" + +EXTRA_OEMAKE = "KERNEL_INCLUDES=-I${STAGING_KERNEL_DIR}/include ${FBVNCSERVER_SYSTEM}_kbdsim.o" + +do_install () { + install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/misc + install -m 0644 ${FBVNCSERVER_SYSTEM}_kbdsim.o ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/misc/kbdsim.o +} diff --git a/packages/vnc/fbvncserver_0.9.4.bb b/packages/vnc/fbvncserver_0.9.4.bb new file mode 100644 index 0000000000..e7c8151e18 --- /dev/null +++ b/packages/vnc/fbvncserver_0.9.4.bb @@ -0,0 +1,55 @@ +DESCRIPTION = "Framebuffer VNC server" +LICENSE = "GPL" +SECTION = "console/utils" +#DEPENDS = "libvncserver jpeg zlib" +# using older version due of error with libvncserver-0.7.1 +# fbvncserver.c:577: error: structure has no member named `rfbAlwaysShared' +# fbvncserver.c:602: error: structure has no member named `rfbClientHead' +DEPENDS = "libvncserver-0.6 jpeg zlib" +RDEPENDS = "fbvncserver-kmodule libvncserver-storepasswd libvncserver-javaapplet" +PR = "r2" + +SRC_URI = "http://sdgsystems.com/download/fbvncserver-${PV}.tar.gz \ + file://libvncs0.6.patch;patch=1 \ + file://paths.patch;patch=1 \ + file://kernelinclude.patch;patch=1 \ + file://buildfix.patch;patch=1 \ + file://ipaq.patch;patch=1 \ + file://init" + +S = "${WORKDIR}/fbvncserver-${PV}" + +export INCLUDES = "-I${STAGING_INCDIR}" + +export LIBS = "-L${STAGING_LIBDIR} -lpthread" +export VNCSERVER_DIR = "${STAGING_LIBDIR}" +export ZAURUS_ZLIB_LIBS = "${STAGING_LIBDIR}" +export ZAURUS_JPEG_LIBS = "${STAGING_LIBDIR}" + +inherit update-rc.d + +INITSCRIPT_NAME = "fbvncinput" +INITSCRIPT_PARAMS = "defaults 97" + +FBVNCSERVER_SYSTEM = "zaurus" +FBVNCSERVER_SYSTEM_h3600 = "ipaq" +FBVNCSERVER_SYSTEM_h3900 = "ipaq" + +do_compile () { + oe_runmake ${FBVNCSERVER_SYSTEM}_fbvncserver ${FBVNCSERVER_SYSTEM}_tssimd +} + +do_install () { + install -d ${D}${bindir} + install -m 0755 ${FBVNCSERVER_SYSTEM}_fbvncserver ${D}${bindir}/fbvncserver + install -m 0755 ${FBVNCSERVER_SYSTEM}_tssimd ${D}${bindir}/tssimd + + install -d ${D}${datadir}/fbvncserver + install -m 0644 ${FBVNCSERVER_SYSTEM}_panel.jpg ${D}${datadir}/fbvncserver/ + + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/fbvncinput +} + +FILES_${PN} += " /usr/share/fbvncserver/*.jpg" + diff --git a/packages/vnc/files/.mtn2git_empty b/packages/vnc/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/vnc/files/buildfix.patch b/packages/vnc/files/buildfix.patch new file mode 100644 index 0000000000..302dbd9e8e --- /dev/null +++ b/packages/vnc/files/buildfix.patch @@ -0,0 +1,31 @@ +--- fbvncserver-0.9.4/fbvncserver.c.orig 2005-07-31 15:01:32.552177176 +0200 ++++ fbvncserver-0.9.4/fbvncserver.c 2005-07-31 15:02:47.287366483 +0200 +@@ -574,7 +574,6 @@ + rfbScreen = rfbGetScreen(&argc,argv,rfb_width,rfb_height,5,2,2); + rfbScreen->desktopName = DESKTOP_NAME; + rfbScreen->frameBuffer = (char *)rfbbuf; +- rfbScreen->rfbAlwaysShared = TRUE; + rfbScreen->ptrAddEvent = ptrevent; + rfbScreen->kbdAddEvent = keyevent; + rfbScreen->newClientHook = newclient; +@@ -595,18 +594,12 @@ + varblock.b_offset = vscrinfo.blue.offset+vscrinfo.blue.length-5; + varblock.rfb_xres = vscrinfo.yres; + varblock.rfb_maxy = vscrinfo.xres-1; +- while(1) ++ while(1) + { +- /* If no clients are connected, just wait for events and don't bother +- updating the rfb, to save CPU */ +- while(rfbScreen->rfbClientHead==NULL) { +- rfbProcessEvents(rfbScreen,100000); /* We still run a tight loop +- so http clients don't wait */ +- } + /* Process events for a while */ + do + { +- got_event=0; ++ got_event=0; + rfbProcessEvents(rfbScreen,30000); + } + while(got_event); diff --git a/packages/vnc/files/init b/packages/vnc/files/init new file mode 100644 index 0000000000..b01a1ebd79 --- /dev/null +++ b/packages/vnc/files/init @@ -0,0 +1,8 @@ +#!/bin/sh + +rm -f /dev/ts +mkfifo /dev/ts +mkfifo /dev/tssim +mknod /dev/kbdsim c 61 0 +insmod -f kbdsim +/usr/bin/tssimd diff --git a/packages/vnc/files/ipaq.patch b/packages/vnc/files/ipaq.patch new file mode 100644 index 0000000000..e8070c0f25 --- /dev/null +++ b/packages/vnc/files/ipaq.patch @@ -0,0 +1,35 @@ +diff -Nurd fbvncserver-0.9.4.old/fbvncserver.c fbvncserver-0.9.4/fbvncserver.c +--- fbvncserver-0.9.4.old/fbvncserver.c 2005-07-27 22:25:25.069921936 +0200 ++++ fbvncserver-0.9.4/fbvncserver.c 2005-07-27 22:27:21.087284616 +0200 +@@ -28,7 +28,7 @@ + + + #ifdef IPAQ +-#define FANCY_PANEL_JPG "/usr/local/vnc/ipaq_panel.jpg" ++#define FANCY_PANEL_JPG "/usr/share/fbvncserver/ipaq_panel.jpg" + #define DESKTOP_NAME "iPAQ" + #else /* #ifdef ZAURUS */ + #define FANCY_PANEL_JPG "/usr/share/fbvncserver/zaurus_panel.jpg" +diff -Nurd fbvncserver-0.9.4.old/Makefile fbvncserver-0.9.4/Makefile +--- fbvncserver-0.9.4.old/Makefile 2005-07-27 22:25:25.068922088 +0200 ++++ fbvncserver-0.9.4/Makefile 2005-07-27 22:26:49.983013184 +0200 +@@ -89,7 +89,7 @@ + ${CC} ${KERNEL_INCLUDES} -Wall -D__KERNEL__ -c -o $@ $< + + ipaq_kbdsim.o: kbdsim.c +- ${CC} -DIPAQ -Wall -D__KERNEL__ -c -o $@ $< ++ ${CC} ${KERNEL_INCLUDES} -DIPAQ -Wall -D__KERNEL__ -c -o $@ $< + + loadjpeg.o: loadjpeg.c \ + loadjpeg.h +diff -Nurd fbvncserver-0.9.4.old/tssimd.c fbvncserver-0.9.4/tssimd.c +--- fbvncserver-0.9.4.old/tssimd.c 2005-07-27 22:25:25.070921784 +0200 ++++ fbvncserver-0.9.4/tssimd.c 2005-07-27 22:25:53.595585376 +0200 +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + #include + #include + #include diff --git a/packages/vnc/files/kernelinclude.patch b/packages/vnc/files/kernelinclude.patch new file mode 100644 index 0000000000..b17d4e09c2 --- /dev/null +++ b/packages/vnc/files/kernelinclude.patch @@ -0,0 +1,12 @@ +diff -urN fbvncserver-0.9.4.old/Makefile fbvncserver-0.9.4/Makefile +--- fbvncserver-0.9.4.old/Makefile 2003-05-19 22:52:24.000000000 -0400 ++++ fbvncserver-0.9.4/Makefile 2004-02-27 10:49:27.000000000 -0500 +@@ -86,7 +86,7 @@ + ${STRIP} $@ + + zaurus_kbdsim.o: kbdsim.c +- ${CC} -Wall -D__KERNEL__ -c -o $@ $< ++ ${CC} ${KERNEL_INCLUDES} -Wall -D__KERNEL__ -c -o $@ $< + + ipaq_kbdsim.o: kbdsim.c + ${CC} -DIPAQ -Wall -D__KERNEL__ -c -o $@ $< diff --git a/packages/vnc/files/libvncs0.6.patch b/packages/vnc/files/libvncs0.6.patch new file mode 100644 index 0000000000..0975c376bd --- /dev/null +++ b/packages/vnc/files/libvncs0.6.patch @@ -0,0 +1,61 @@ +diff -urN fbvncserver-0.9.4.old/fbvncserver.c fbvncserver-0.9.4/fbvncserver.c +--- fbvncserver-0.9.4.old/fbvncserver.c 2003-03-03 01:00:09.000000000 -0500 ++++ fbvncserver-0.9.4/fbvncserver.c 2004-02-12 20:49:40.000000000 -0500 +@@ -18,8 +18,8 @@ + #include + #include + #include +-#include "rfb.h" +-#include "keysym.h" ++#include "rfb/rfb.h" ++#include "rfb/keysym.h" + #include "keysym2scancode.h" + #include "loadjpeg.h" + #include "panelzones.h" +@@ -42,7 +42,7 @@ + /* Types */ + struct ClientData + { +- Bool oldButton; ++ rfbBool oldButton; + int oldx,oldy; + }; + +@@ -304,7 +304,7 @@ + + + /* Keyboard events handler */ +-void keyevent(Bool down,KeySym key,rfbClientPtr cl) ++void keyevent(rfbBool down,rfbKeySym key,rfbClientPtr cl) + { + unsigned char *scancodes; + +diff -urN fbvncserver-0.9.4.old/keysym2scancode.c fbvncserver-0.9.4/keysym2scancode.c +--- fbvncserver-0.9.4.old/keysym2scancode.c 2002-11-16 15:32:04.000000000 -0500 ++++ fbvncserver-0.9.4/keysym2scancode.c 2004-02-12 20:50:33.000000000 -0500 +@@ -7,8 +7,8 @@ + + (c) Pierre-Philippe Coupard, 27/01/2002 + */ +-#include "keysym.h" +-#include "rfb.h" ++#include "rfb/keysym.h" ++#include "rfb/rfb.h" + #include "keysym2scancode.h" + + +@@ -290,7 +290,7 @@ + + /* Turn a received keysym into a Zaurus keyboard scancode sequence. Each + sequence is terminated by 0xff. Return NULL if no scancode could be found */ +-unsigned char *keysym2scancodes(Bool down, KeySym key) ++unsigned char *keysym2scancodes(rfbBool down, rfbKeySym key) + { + #ifndef IPAQ + static int control_down = 0; +diff -urN fbvncserver-0.9.4.old/keysym2scancode.h fbvncserver-0.9.4/keysym2scancode.h +--- fbvncserver-0.9.4.old/keysym2scancode.h 2002-09-05 22:20:10.000000000 -0400 ++++ fbvncserver-0.9.4/keysym2scancode.h 2004-02-12 20:48:19.000000000 -0500 +@@ -1 +1 @@ +-unsigned char *keysym2scancodes(Bool down, KeySym key); ++unsigned char *keysym2scancodes(rfbBool down, rfbKeySym key); diff --git a/packages/vnc/files/paths.patch b/packages/vnc/files/paths.patch new file mode 100644 index 0000000000..7c122efc67 --- /dev/null +++ b/packages/vnc/files/paths.patch @@ -0,0 +1,52 @@ +diff -urN fbvncserver-0.9.4.old/fbvncserver.c fbvncserver-0.9.4/fbvncserver.c +--- fbvncserver-0.9.4.old/fbvncserver.c 2003-03-03 01:00:09.000000000 -0500 ++++ fbvncserver-0.9.4/fbvncserver.c 2004-02-27 11:35:36.000000000 -0500 +@@ -31,7 +31,7 @@ + #define FANCY_PANEL_JPG "/usr/local/vnc/ipaq_panel.jpg" + #define DESKTOP_NAME "iPAQ" + #else /* #ifdef ZAURUS */ +-#define FANCY_PANEL_JPG "/home/root/Applications/fbvncserver/zaurus_panel.jpg" ++#define FANCY_PANEL_JPG "/usr/share/fbvncserver/zaurus_panel.jpg" + #define DESKTOP_NAME "Zaurus" + #endif + +@@ -578,7 +578,7 @@ + rfbScreen->ptrAddEvent = ptrevent; + rfbScreen->kbdAddEvent = keyevent; + rfbScreen->newClientHook = newclient; +- rfbScreen->httpDir = "/home/root/Applications/fbvncserver/classes"; ++ rfbScreen->httpDir = "/usr/share/fbvncserver/classes"; + rfbInitServer(rfbScreen); + + /* Make sure we catch EPIPE so we don't get killed by closed sockets when +diff -urN fbvncserver-0.9.4.old/launch/subclass.cpp fbvncserver-0.9.4/launch/subclass.cpp +--- fbvncserver-0.9.4.old/launch/subclass.cpp 2003-05-10 19:20:02.000000000 -0400 ++++ fbvncserver-0.9.4/launch/subclass.cpp 2004-02-27 11:35:55.000000000 -0500 +@@ -17,13 +17,13 @@ + #include + #include + +-#define SCRIPT_LOCATION "/usr/local/bin" ++#define SCRIPT_LOCATION "/usr/bin" + + + mainDialog::mainDialog(QWidget *parent, const char *name, WFlags fl) + : mainDialogSuper(parent, name, fl) + { +- QPixmap qi("/home/root/Applications/fbvncserver/sdglogo.png", "PNG"); ++ QPixmap qi("/usr/share/fbvncserver/sdglogo.png", "PNG"); + QSizePolicy qsp(QSizePolicy::Fixed, QSizePolicy::Fixed); + SDG_Pixmap->setSizePolicy(qsp); + SDG_Pixmap->setPixmap(qi); +diff -urN fbvncserver-0.9.4.old/splash/subclass.cpp fbvncserver-0.9.4/splash/subclass.cpp +--- fbvncserver-0.9.4.old/splash/subclass.cpp 2003-04-29 23:23:41.000000000 -0400 ++++ fbvncserver-0.9.4/splash/subclass.cpp 2004-02-27 11:35:36.000000000 -0500 +@@ -17,7 +17,7 @@ + fbvncserverSplash::fbvncserverSplash(QWidget *parent, const char *name, bool modal, WFlags fl) + : fbvncserverSplashSuper(parent, name, modal, fl) + { +- QPixmap qi("/home/root/Applications/fbvncserver/sdglogo.png", "PNG"); ++ QPixmap qi("/usr/share/fbvncserver/sdglogo.png", "PNG"); + QSizePolicy qsp(QSizePolicy::Fixed, QSizePolicy::Fixed); + SDG_Pixmap->setSizePolicy(qsp); + SDG_Pixmap->setPixmap(qi); diff --git a/packages/vnc/x11vnc_0.9.3.bb b/packages/vnc/x11vnc_0.9.3.bb new file mode 100644 index 0000000000..04ac87b444 --- /dev/null +++ b/packages/vnc/x11vnc_0.9.3.bb @@ -0,0 +1,11 @@ +DESCRIPTION = "Export your X session on-the-fly via VNC" +SECTION = "x11/utils" +HOMEPAGE = "http://www.karlrunge.com/x11vnc/" +AUTHOR = "Karl Runge" +LICENSE = "GPL" +DEPENDS = "openssl virtual/libx11 libxext avahi jpeg zlib" + +SRC_URI = "http://www.karlrunge.com/x11vnc/x11vnc-0.9.3.tar.gz" + +inherit autotools + diff --git a/packages/x11vnc/.mtn2git_empty b/packages/x11vnc/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/x11vnc/x11vnc_0.9.3.bb b/packages/x11vnc/x11vnc_0.9.3.bb deleted file mode 100644 index 04ac87b444..0000000000 --- a/packages/x11vnc/x11vnc_0.9.3.bb +++ /dev/null @@ -1,11 +0,0 @@ -DESCRIPTION = "Export your X session on-the-fly via VNC" -SECTION = "x11/utils" -HOMEPAGE = "http://www.karlrunge.com/x11vnc/" -AUTHOR = "Karl Runge" -LICENSE = "GPL" -DEPENDS = "openssl virtual/libx11 libxext avahi jpeg zlib" - -SRC_URI = "http://www.karlrunge.com/x11vnc/x11vnc-0.9.3.tar.gz" - -inherit autotools - -- cgit v1.2.3 From 85b5683120b7aa53f10639b4356ead1f1c0d8d47 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 28 Jan 2008 09:15:03 +0000 Subject: xorg-xserver-common.inc: fix typo --- packages/xorg-xserver/xorg-xserver-common.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xorg-xserver/xorg-xserver-common.inc b/packages/xorg-xserver/xorg-xserver-common.inc index 2e8535ef30..819be742d4 100644 --- a/packages/xorg-xserver/xorg-xserver-common.inc +++ b/packages/xorg-xserver/xorg-xserver-common.inc @@ -13,7 +13,7 @@ resourceproto xineramaproto xtrans evieext libxkbfile libxfont libxau \ libfontenc libxdmcp libxxf86vm libxaw libxmu libxt libxpm libxext libx11 \ libxkbui libxxf86misc libxi libdmx libxtst libxres mesa" -REPENDS="rgb" +RDEPENDS_${PN} = "rgb" XORG_PN = "xorg-server" SRC_URI = "${XORG_MIRROR}/individual/xserver/${XORG_PN}-${PV}.tar.bz2 \ -- cgit v1.2.3 From a9a239b1b486b9355f0d92422594e135680b05a5 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 28 Jan 2008 11:05:14 +0000 Subject: divers: delete 22 empty directories * skipping packages/netbase/ since those seem to be used albeit incorrectly --- packages/base-files/base-files/ghi270/.mtn2git_empty | 0 packages/bluez/files/ghi270/.mtn2git_empty | 0 packages/bluez/files/r1000/.mtn2git_empty | 0 packages/efl1/etk-native/.mtn2git_empty | 0 packages/fakeroot/fakeroot-1.8.3/.mtn2git_empty | 0 packages/glibc/eglibc-svn/.mtn2git_empty | 0 packages/gtk+/gtk+-2.2.4/.mtn2git_empty | 0 packages/gtk+/gtk+-2.4.13/.mtn2git_empty | 0 packages/libmutil/.mtn2git_empty | 0 packages/libopieobex/files/.mtn2git_empty | 0 packages/libxml/files/.mtn2git_empty | 0 packages/linux/linux-handhelds-2.6-2.6.21/ghi270/.mtn2git_empty | 0 packages/llvm/files/.mtn2git_empty | 0 packages/nonworking/redboot-utils/.mtn2git_empty | 0 packages/openmoko-panel-plugins/files/.mtn2git_empty | 0 packages/opie-bluetoothapplet/files/.mtn2git_empty | 0 packages/python/python-formencode/.mtn2git_empty | 0 packages/uclibc/uclibc/.mtn2git_empty | 0 packages/xserver-common/files/ghi270/.mtn2git_empty | 0 packages/xserver-kdrive-common/xserver-kdrive-common/etc/.mtn2git_empty | 0 .../xserver-kdrive-common/xserver-kdrive-common/etc/X11/.mtn2git_empty | 0 .../xserver-kdrive-common/etc/X11/Xsession.d/.mtn2git_empty | 0 22 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/base-files/base-files/ghi270/.mtn2git_empty delete mode 100644 packages/bluez/files/ghi270/.mtn2git_empty delete mode 100644 packages/bluez/files/r1000/.mtn2git_empty delete mode 100644 packages/efl1/etk-native/.mtn2git_empty delete mode 100644 packages/fakeroot/fakeroot-1.8.3/.mtn2git_empty delete mode 100644 packages/glibc/eglibc-svn/.mtn2git_empty delete mode 100644 packages/gtk+/gtk+-2.2.4/.mtn2git_empty delete mode 100644 packages/gtk+/gtk+-2.4.13/.mtn2git_empty delete mode 100644 packages/libmutil/.mtn2git_empty delete mode 100644 packages/libopieobex/files/.mtn2git_empty delete mode 100644 packages/libxml/files/.mtn2git_empty delete mode 100644 packages/linux/linux-handhelds-2.6-2.6.21/ghi270/.mtn2git_empty delete mode 100644 packages/llvm/files/.mtn2git_empty delete mode 100644 packages/nonworking/redboot-utils/.mtn2git_empty delete mode 100644 packages/openmoko-panel-plugins/files/.mtn2git_empty delete mode 100644 packages/opie-bluetoothapplet/files/.mtn2git_empty delete mode 100644 packages/python/python-formencode/.mtn2git_empty delete mode 100644 packages/uclibc/uclibc/.mtn2git_empty delete mode 100644 packages/xserver-common/files/ghi270/.mtn2git_empty delete mode 100644 packages/xserver-kdrive-common/xserver-kdrive-common/etc/.mtn2git_empty delete mode 100644 packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/.mtn2git_empty delete mode 100644 packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xsession.d/.mtn2git_empty diff --git a/packages/base-files/base-files/ghi270/.mtn2git_empty b/packages/base-files/base-files/ghi270/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/bluez/files/ghi270/.mtn2git_empty b/packages/bluez/files/ghi270/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/bluez/files/r1000/.mtn2git_empty b/packages/bluez/files/r1000/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/efl1/etk-native/.mtn2git_empty b/packages/efl1/etk-native/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/fakeroot/fakeroot-1.8.3/.mtn2git_empty b/packages/fakeroot/fakeroot-1.8.3/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/glibc/eglibc-svn/.mtn2git_empty b/packages/glibc/eglibc-svn/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gtk+/gtk+-2.2.4/.mtn2git_empty b/packages/gtk+/gtk+-2.2.4/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gtk+/gtk+-2.4.13/.mtn2git_empty b/packages/gtk+/gtk+-2.4.13/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libmutil/.mtn2git_empty b/packages/libmutil/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libopieobex/files/.mtn2git_empty b/packages/libopieobex/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libxml/files/.mtn2git_empty b/packages/libxml/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/ghi270/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/ghi270/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/llvm/files/.mtn2git_empty b/packages/llvm/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/nonworking/redboot-utils/.mtn2git_empty b/packages/nonworking/redboot-utils/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/openmoko-panel-plugins/files/.mtn2git_empty b/packages/openmoko-panel-plugins/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/opie-bluetoothapplet/files/.mtn2git_empty b/packages/opie-bluetoothapplet/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/python/python-formencode/.mtn2git_empty b/packages/python/python-formencode/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/uclibc/uclibc/.mtn2git_empty b/packages/uclibc/uclibc/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xserver-common/files/ghi270/.mtn2git_empty b/packages/xserver-common/files/ghi270/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/.mtn2git_empty b/packages/xserver-kdrive-common/xserver-kdrive-common/etc/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/.mtn2git_empty b/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xsession.d/.mtn2git_empty b/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xsession.d/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 -- cgit v1.2.3 From b82d11fb2d53a2f2c00041786c92e2f75e1a565f Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 28 Jan 2008 11:19:44 +0000 Subject: fbvncserver: remove dependency on version 0.6 of libvncserver. 0.8.x and 0.9 are fine. * unbreaks build when RDEPENDS line is commented out (the kmodule still fails to build) * reorder fields according to StyleGuide * closes 1732 --- packages/vnc/fbvncserver_0.9.4.bb | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/vnc/fbvncserver_0.9.4.bb b/packages/vnc/fbvncserver_0.9.4.bb index e7c8151e18..4e6ee15a86 100644 --- a/packages/vnc/fbvncserver_0.9.4.bb +++ b/packages/vnc/fbvncserver_0.9.4.bb @@ -1,13 +1,10 @@ DESCRIPTION = "Framebuffer VNC server" -LICENSE = "GPL" SECTION = "console/utils" -#DEPENDS = "libvncserver jpeg zlib" -# using older version due of error with libvncserver-0.7.1 -# fbvncserver.c:577: error: structure has no member named `rfbAlwaysShared' -# fbvncserver.c:602: error: structure has no member named `rfbClientHead' -DEPENDS = "libvncserver-0.6 jpeg zlib" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "libvncserver jpeg zlib" RDEPENDS = "fbvncserver-kmodule libvncserver-storepasswd libvncserver-javaapplet" -PR = "r2" +PR = "r3" SRC_URI = "http://sdgsystems.com/download/fbvncserver-${PV}.tar.gz \ file://libvncs0.6.patch;patch=1 \ @@ -20,7 +17,6 @@ SRC_URI = "http://sdgsystems.com/download/fbvncserver-${PV}.tar.gz \ S = "${WORKDIR}/fbvncserver-${PV}" export INCLUDES = "-I${STAGING_INCDIR}" - export LIBS = "-L${STAGING_LIBDIR} -lpthread" export VNCSERVER_DIR = "${STAGING_LIBDIR}" export ZAURUS_ZLIB_LIBS = "${STAGING_LIBDIR}" -- cgit v1.2.3 From 43f3297970d794c9720998ea07ad45d57b371b71 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 28 Jan 2008 11:27:21 +0000 Subject: linux-ezx: add 2.6.24 --- packages/linux/linux-ezx-2.6.24/.mtn2git_empty | 0 .../linux/linux-ezx-2.6.24/a1200/.mtn2git_empty | 0 packages/linux/linux-ezx-2.6.24/a1200/defconfig | 1208 +++++ .../linux/linux-ezx-2.6.24/a780/.mtn2git_empty | 0 packages/linux/linux-ezx-2.6.24/a780/defconfig | 1502 ++++++ .../linux/linux-ezx-2.6.24/e680/.mtn2git_empty | 0 packages/linux/linux-ezx-2.6.24/e680/defconfig | 1584 ++++++ .../linux/linux-ezx-2.6.24/patches/.mtn2git_empty | 0 .../linux-ezx-2.6.24/patches/Makefile.OpenEZX | 77 + .../linux/linux-ezx-2.6.24/patches/a1200-eoc.patch | 20 + .../linux-ezx-2.6.24/patches/a1200-flip.patch | 47 + .../linux/linux-ezx-2.6.24/patches/a1200-kbd.patch | 98 + .../linux/linux-ezx-2.6.24/patches/a1200-mci.patch | 124 + .../linux-ezx-2.6.24/patches/a1200-pcap.patch | 66 + .../linux/linux-ezx-2.6.24/patches/a1200-ts.patch | 39 + .../linux/linux-ezx-2.6.24/patches/a780-emu.patch | 38 + .../linux/linux-ezx-2.6.24/patches/a780-flip.patch | 46 + .../linux/linux-ezx-2.6.24/patches/a780-kbd.patch | 90 + .../linux/linux-ezx-2.6.24/patches/a780-leds.patch | 187 + .../linux/linux-ezx-2.6.24/patches/a780-mci.patch | 125 + .../linux/linux-ezx-2.6.24/patches/a780-pcap.patch | 90 + .../linux/linux-ezx-2.6.24/patches/a780-ts.patch | 39 + .../linux-ezx-2.6.24/patches/a780-vibrator.patch | 102 + .../patches/asoc-fix-loopback.patch | 14 + .../linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch | 755 +++ .../patches/binutils-buildid-arm.patch | 16 + .../linux/linux-ezx-2.6.24/patches/defconfig-a1200 | 1205 +++++ .../linux/linux-ezx-2.6.24/patches/defconfig-a780 | 1502 ++++++ .../linux/linux-ezx-2.6.24/patches/defconfig-e2 | 1188 +++++ .../linux/linux-ezx-2.6.24/patches/defconfig-e6 | 1200 +++++ .../linux/linux-ezx-2.6.24/patches/defconfig-e680 | 1211 +++++ .../linux/linux-ezx-2.6.24/patches/dmesg-a780.log | 299 ++ .../linux/linux-ezx-2.6.24/patches/e6-eoc.patch | 20 + .../linux/linux-ezx-2.6.24/patches/e6-mci.patch | 124 + .../linux/linux-ezx-2.6.24/patches/e6-pcap.patch | 66 + .../linux/linux-ezx-2.6.24/patches/e6-ts.patch | 39 + .../linux/linux-ezx-2.6.24/patches/e680-emu.patch | 38 + .../linux/linux-ezx-2.6.24/patches/e680-kbd.patch | 93 + .../linux/linux-ezx-2.6.24/patches/e680-leds.patch | 300 ++ .../linux-ezx-2.6.24/patches/e680-locksw.patch | 45 + .../linux/linux-ezx-2.6.24/patches/e680-mci.patch | 126 + .../linux/linux-ezx-2.6.24/patches/e680-pcap.patch | 90 + .../linux/linux-ezx-2.6.24/patches/e680-ts.patch | 39 + .../linux/linux-ezx-2.6.24/patches/ezx-asoc.patch | 1302 +++++ .../linux-ezx-2.6.24/patches/ezx-backlight.patch | 203 + .../linux/linux-ezx-2.6.24/patches/ezx-bp.patch | 351 ++ .../linux/linux-ezx-2.6.24/patches/ezx-core.patch | 1042 ++++ .../linux/linux-ezx-2.6.24/patches/ezx-emu.patch | 269 + .../patches/ezx-enable-stuart.patch | 99 + .../linux/linux-ezx-2.6.24/patches/ezx-eoc.patch | 295 ++ .../linux-ezx-2.6.24/patches/ezx-mtd-map.patch | 309 ++ .../linux/linux-ezx-2.6.24/patches/ezx-pcap.patch | 852 ++++ .../linux/linux-ezx-2.6.24/patches/ezx-pm.patch | 108 + .../patches/ezx-serial-bug-workaround.patch | 45 + .../patches/mux-fix-init-errorpath.patch | 20 + .../patches/mux-fix-makefile.patch | 14 + .../patches/mux-fix-tty-driver.patch | 125 + .../linux/linux-ezx-2.6.24/patches/mux-fix.patch | 164 + .../patches/mux-ifdef-ezx-features.patch | 99 + .../patches/mux-linux-2.6.21-fix.patch | 297 ++ .../patches/mux-remove-flipbuffers.patch | 269 + .../patches/mux-remove-get_halted_bit.patch | 22 + .../patches/mux-remove-usbh_finished_resume.patch | 22 + .../linux/linux-ezx-2.6.24/patches/mux_cli.patch | 5396 ++++++++++++++++++++ .../linux/linux-ezx-2.6.24/patches/mux_debug.patch | 551 ++ .../linux/linux-ezx-2.6.24/patches/pcap-ts.patch | 363 ++ .../linux/linux-ezx-2.6.24/patches/pxa-kbd.patch | 547 ++ .../patches/pxa27x-udc-fix-a1200.patch | 45 + .../patches/pxa27x-udc-support.3.patch | 3114 +++++++++++ .../patches/pxa27x_overlay-r8.patch | 2439 +++++++++ .../linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml | 1204 +++++ .../linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml | 1330 +++++ .../linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml | 282 + .../linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml | 781 +++ .../linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml | 882 ++++ .../linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml | 100 + .../linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml | 113 + packages/linux/linux-ezx-2.6.24/patches/series | 105 + .../linux/linux-ezx-2.6.24/rokre2/.mtn2git_empty | 0 packages/linux/linux-ezx-2.6.24/rokre2/defconfig | 1189 +++++ .../linux/linux-ezx-2.6.24/rokre6/.mtn2git_empty | 0 packages/linux/linux-ezx-2.6.24/rokre6/defconfig | 1203 +++++ packages/linux/linux-ezx-2.6.24/update_patches.sh | 16 + packages/linux/linux-ezx_2.6.24.bb | 111 + 84 files changed, 39530 insertions(+) create mode 100644 packages/linux/linux-ezx-2.6.24/.mtn2git_empty create mode 100644 packages/linux/linux-ezx-2.6.24/a1200/.mtn2git_empty create mode 100755 packages/linux/linux-ezx-2.6.24/a1200/defconfig create mode 100644 packages/linux/linux-ezx-2.6.24/a780/.mtn2git_empty create mode 100755 packages/linux/linux-ezx-2.6.24/a780/defconfig create mode 100644 packages/linux/linux-ezx-2.6.24/e680/.mtn2git_empty create mode 100755 packages/linux/linux-ezx-2.6.24/e680/defconfig create mode 100644 packages/linux/linux-ezx-2.6.24/patches/.mtn2git_empty create mode 100644 packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/binutils-buildid-arm.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/defconfig-a1200 create mode 100644 packages/linux/linux-ezx-2.6.24/patches/defconfig-a780 create mode 100644 packages/linux/linux-ezx-2.6.24/patches/defconfig-e2 create mode 100644 packages/linux/linux-ezx-2.6.24/patches/defconfig-e6 create mode 100644 packages/linux/linux-ezx-2.6.24/patches/defconfig-e680 create mode 100644 packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux-fix.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml create mode 100644 packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml create mode 100644 packages/linux/linux-ezx-2.6.24/patches/series create mode 100644 packages/linux/linux-ezx-2.6.24/rokre2/.mtn2git_empty create mode 100755 packages/linux/linux-ezx-2.6.24/rokre2/defconfig create mode 100644 packages/linux/linux-ezx-2.6.24/rokre6/.mtn2git_empty create mode 100755 packages/linux/linux-ezx-2.6.24/rokre6/defconfig create mode 100644 packages/linux/linux-ezx-2.6.24/update_patches.sh create mode 100644 packages/linux/linux-ezx_2.6.24.bb diff --git a/packages/linux/linux-ezx-2.6.24/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-ezx-2.6.24/a1200/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/a1200/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-ezx-2.6.24/a1200/defconfig b/packages/linux/linux-ezx-2.6.24/a1200/defconfig new file mode 100755 index 0000000000..4649d7ba96 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/a1200/defconfig @@ -0,0 +1,1208 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23.1 +# Wed Oct 24 18:03:17 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +CONFIG_PXA_EZX=y +# CONFIG_PXA_EZX_E680 is not set +# CONFIG_PXA_EZX_A780 is not set +# CONFIG_PXA_EZX_E2 is not set +CONFIG_PXA_EZX_A1200=y +# CONFIG_PXA_EZX_E6 is not set +# CONFIG_EZX_BP is not set +CONFIG_EZX_PCAP=y +CONFIG_EZX_EOC=y +# CONFIG_EZX_EMU is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=y + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +CONFIG_MTD_EZX=y +# CONFIG_MTD_EZX_A780 is not set +# CONFIG_MTD_EZX_A780_ALTERNATE is not set +CONFIG_MTD_EZX_A1200=y +# CONFIG_MTD_EZX_E2 is not set +# CONFIG_MTD_EZX_E6 is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=y +CONFIG_INPUT_TSDEV_SCREEN_X=240 +CONFIG_INPUT_TSDEV_SCREEN_Y=320 +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_TOUCHSCREEN_PCAP=y +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +# CONFIG_WATCHDOG is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_HWMON is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_EZX is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +CONFIG_RTC_LIB=y +# CONFIG_RTC_CLASS is not set + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.24/a780/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/a780/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-ezx-2.6.24/a780/defconfig b/packages/linux/linux-ezx-2.6.24/a780/defconfig new file mode 100755 index 0000000000..b10c2e908d --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/a780/defconfig @@ -0,0 +1,1502 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24 +# Sun Jan 27 15:19:17 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA_EZX=y +# CONFIG_PXA_EZX_E680 is not set +CONFIG_PXA_EZX_A780=y +# CONFIG_PXA_EZX_E2 is not set +# CONFIG_PXA_EZX_A1200 is not set +# CONFIG_PXA_EZX_E6 is not set +CONFIG_EZX_BP=y +CONFIG_EZX_PCAP=y +# CONFIG_EZX_EOC is not set +CONFIG_EZX_EMU=y +CONFIG_EZX_EMU_USB=y +# CONFIG_EZX_EMU_UART is not set +# CONFIG_EZX_EMU_NOTHING is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +# CONFIG_NO_HZ is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 root=/dev/mmcblk0p2 rootfstype=ext2 rootdelay=1 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_SCH_FIFO=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIUART_LL is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y + +# +# Wireless +# +CONFIG_CFG80211=m +CONFIG_NL80211=y +CONFIG_WIRELESS_EXT=y +CONFIG_MAC80211=m +CONFIG_MAC80211_RCSIMPLE=y +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUG is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PXA2XX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +CONFIG_MTD_EZX=y +CONFIG_MTD_EZX_A780=y +# CONFIG_MTD_EZX_A780_ALTERNATE is not set +# CONFIG_MTD_EZX_A1200 is not set +# CONFIG_MTD_EZX_E2 is not set +# CONFIG_MTD_EZX_E6 is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_TOUCHSCREEN_PCAP=y +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_TS0710_MUX=y +CONFIG_TS0710_MUX_USB=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +# CONFIG_V4L_USB_DRIVERS is not set +CONFIG_RADIO_ADAPTERS=y +# CONFIG_USB_DSBR is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_EZX=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# SPI devices +# + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_SDIO_UART=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +# CONFIG_MMC_SPI is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_A780=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=m + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=m +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_SECURITY is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_XFS_RT is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +# CONFIG_ROOT_NFS is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +# CONFIG_CRYPTO_WP512 is not set +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +# CONFIG_CRYPTO_ANUBIS is not set +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +# CONFIG_CRYPTO_CAMELLIA is not set +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.24/e680/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/e680/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-ezx-2.6.24/e680/defconfig b/packages/linux/linux-ezx-2.6.24/e680/defconfig new file mode 100755 index 0000000000..9a30ce673f --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/e680/defconfig @@ -0,0 +1,1584 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.21.4 +# Sun Sep 9 16:51:47 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_ELF_CORE is not set +# CONFIG_BASE_FULL is not set +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SHMEM=y +CONFIG_SLAB=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=1 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LSF=y + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +CONFIG_PXA_EZX=y +CONFIG_PXA_EZX_E680=y +# CONFIG_PXA_EZX_A780 is not set +# CONFIG_PXA_EZX_E2 is not set +# CONFIG_PXA_EZX_A1200 is not set +# CONFIG_PXA_EZX_E6 is not set +CONFIG_EZX_BP=y +CONFIG_EZX_PCAP=y +CONFIG_EZX_EMU=y +CONFIG_EZX_EMU_USB=y +# CONFIG_EZX_EMU_UART is not set +# CONFIG_EZX_EMU_NOTHING is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_PREEMPT=y +CONFIG_NO_IDLE_HZ=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +# CONFIG_PM_SYSFS_DEPRECATED is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +# CONFIG_IPV6_ROUTE_INFO is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK_SUPPORT=y +# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set +CONFIG_NET_CLS_ROUTE=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +# CONFIG_IEEE80211_CRYPT_TKIP is not set +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_WIRELESS_EXT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +CONFIG_CONNECTOR=m + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +CONFIG_MTD_EZX=y +CONFIG_MTD_EZX_A780=y +# CONFIG_MTD_EZX_A780_ALTERNATE is not set +# CONFIG_MTD_EZX_E2 is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_NETLINK is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# +# CONFIG_ATA is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m + +# +# PHY device support +# + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +CONFIG_NET_WIRELESS_RTNETLINK=y + +# +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_HOSTAP is not set +# CONFIG_ZD1211RW is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +CONFIG_SLHC=m +CONFIG_SHAPER=m +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=y +CONFIG_INPUT_TSDEV_SCREEN_X=240 +CONFIG_INPUT_TSDEV_SCREEN_Y=320 +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +CONFIG_TOUCHSCREEN_PCAP=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +CONFIG_TS0710_MUX=y +CONFIG_TS0710_MUX_USB=y + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +CONFIG_I2C_PXA=m +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# LED devices +# +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +# CONFIG_LEDS_E680 is not set +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y + +# +# Video Capture Adapters +# + +# +# Video Capture Adapters +# +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set + +# +# V4L USB devices +# +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_USBVISION is not set +# CONFIG_USB_VICAM is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_USB_W9968CF is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_SN9C102 is not set +# CONFIG_USB_STV680 is not set +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set + +# +# Radio Adapters +# +# CONFIG_USB_DSBR is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_BACKLIGHT_EZX=y +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set + +# +# Logo configuration +# +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_DUMMY=m +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set + +# +# SoC audio support +# +CONFIG_SND_SOC=y + +# +# SoC Platforms +# + +# +# SoC Audio for the Atmel AT91 +# + +# +# SoC Audio for the Intel PXA2xx +# +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m + +# +# HID Devices +# +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_ACECAD is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_TOUCHSCREEN is not set +# CONFIG_USB_YEALINK is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set +# CONFIG_USB_ATI_REMOTE2 is not set +# CONFIG_USB_KEYSPAN_REMOTE is not set +# CONFIG_USB_APPLETOUCH is not set +# CONFIG_USB_GTCO is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set + +# +# MMC/SD Card support +# +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=y +CONFIG_MMC_PXA=y + +# +# Real Time Clock +# +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=m + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=m +CONFIG_RTC_INTF_PROC=m +CONFIG_RTC_INTF_DEV=m +CONFIG_RTC_INTF_DEV_UIE_EMUL=y + +# +# RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_SA1100=m +# CONFIG_RTC_DRV_TEST is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=n +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=m +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_SECURITY is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_XFS_RT is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set +CONFIG_GENERIC_ACL=y + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m + +# +# Hardware crypto devices +# + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +CONFIG_CRC32=y +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y diff --git a/packages/linux/linux-ezx-2.6.24/patches/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/patches/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX b/packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX new file mode 100644 index 0000000000..e7e9115e3c --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX @@ -0,0 +1,77 @@ +# Makefile used to build binary images of OpenEZX kernels +# +# If you are currently in the linux kernel toplevel dir, +# you can call this Makefile with: +# $ make -f path_to/Makefile.OpenEZX +# +# Note that you can set the CROSS_COMPILE and QUILT_PATCHES variable +# in your environment. +# + +PHONES = a780 e680 a1200 e6 e2 + +CROSS_COMPILE ?= /home/wyrm/ezx/dev/cross/bin/arm-angstrom-linux-gnueabi- +QUILT_PATCHES ?= patches + +LV ?= ezxdev# replace LOCALVERSION string +J ?= 2 # simultaneous jobs +SIG ?= 0 # BOOL sign md5sums file + +DATE = $(shell date +%Y%m%d) +DEPLOY_SERVER ?= people.openezx.org +DEPLOY_DIR ?= public_html/images/$(DATE)/ + +all: $(foreach p, $(PHONES), zImage-$(p) modules-$(p).tar.gz) + +zImages: $(foreach p, $(PHONES), zImage-$(p)) + +modules: $(foreach p, $(PHONES), modules-$(p).tar.gz) + +config: $(foreach p, $(PHONES), config-$(p)) + +config-%: $(QUILT_PATCHES)/defconfig-% + cp $< .config + make ARCH=arm oldconfig + cp .config $< + +deploy: release + ssh $(DEPLOY_SERVER) \ + mkdir -p $(DEPLOY_DIR) + scp ezxrelease-$(DATE).tar $(DEPLOY_SERVER):$(DEPLOY_DIR) + ssh $(DEPLOY_SERVER) \ + cd $(DEPLOY_DIR)\; \ + tar -xf ezxrelease-$(DATE).tar\; \ + rm -f ezxrelease-$(DATE).tar + +release: $(foreach p, $(PHONES), tag-$(p)) + cp md5sums.tmp md5sums + test "$(SIG)" = "1" && \ + cat md5sums.tmp | gpg --clearsign > md5sums \ + ; echo + tar -rf ezxrelease.tar md5sums + rm -f md5sums.tmp md5sums + mv ezxrelease.tar ezxrelease-$(DATE).tar + +tag-%: zImage-% modules-%.tar.gz + p=$(patsubst tag-%,%,$@) && \ + tag=$(shell cat include/config/kernel.release)-$(DATE) && \ + mv zImage-$$p zImage-$$tag-$$p && \ + mv modules-$$p.tar.gz modules-$$tag-$$p.tar.gz && \ + tar -rf ezxrelease.tar zImage-$$tag-$$p modules-$$tag-$$p.tar.gz && \ + md5sum zImage-$$tag-$$p modules-$$tag-$$p.tar.gz >> md5sums.tmp && \ + rm -f zImage-$$tag-$$p modules-$$tag-$$p.tar.gz + +zImage-%: $(QUILT_PATCHES)/defconfig-% + cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config + make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) zImage + mv arch/arm/boot/zImage $@ + +modules-%.tar.gz: $(QUILT_PATCHES)/defconfig-% + cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config + -find . -name "*.ko" -print0 | xargs -r0 rm + mkdir -p Makefile.OpenEZX-tmp/$@ + make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules + make -j1 ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) \ + INSTALL_MOD_PATH=Makefile.OpenEZX-tmp/$@ modules_install + tar -C Makefile.OpenEZX-tmp/$@ -czf $@ . + rm -rf Makefile.OpenEZX-tmp/ diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch new file mode 100644 index 0000000000..d69c6ec75f --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch @@ -0,0 +1,20 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:08.000000000 -0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:24.000000000 -0200 +@@ -186,8 +186,15 @@ + }, + }; + ++ ++struct platform_device a1200_eoc_device = { ++ .name = "ezx-eoc", ++ .id = -1, ++}; ++ + static struct platform_device *devices[] __initdata = { + &a1200_pcap_device, ++ &a1200_eoc_device, + }; + + static void __init a1200_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch new file mode 100644 index 0000000000..cc36d36c51 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch @@ -0,0 +1,47 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:42.000000000 -0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:50.000000000 -0200 +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -275,11 +276,34 @@ + .num_resources = ARRAY_SIZE(pcap_ts_resources), + .resource = pcap_ts_resources, + }; ++/* Flip */ ++#undef GPIO_FLIP_PIN ++#define GPIO_FLIP_PIN 15 /* FIXME */ ++static struct gpio_keys_button a1200flip_buttons[] = { ++ [0] = { ++ .code = KEY_SLEEP, ++ .gpio = GPIO_FLIP_PIN, ++ .desc = "A1200 flip", ++ }, ++}; ++ ++static struct gpio_keys_platform_data a1200flip_platform_data = { ++ .buttons = a1200flip_buttons, ++ .nbuttons = 1, ++}; ++static struct platform_device a1200flip_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .dev = { ++ .platform_data = &a1200flip_platform_data, ++ }, ++}; + + static struct platform_device *devices[] __initdata = { + &a1200_pcap_device, + &a1200_eoc_device, + &pcap_ts_device, ++ &a1200flip_device, + }; + + static void __init a1200_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch new file mode 100644 index 0000000000..1e1a68c5b8 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch @@ -0,0 +1,98 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:24.000000000 -0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:35.000000000 -0200 +@@ -15,6 +15,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -23,11 +24,13 @@ + #include + #include + #include ++#include + + #include "generic.h" + + extern void ezx_lcd_power(int, struct fb_var_screeninfo *); + extern void ezx_backlight_power(int); ++extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *); + + #ifdef CONFIG_EZX_PCAP + extern int ezx_pcap_mmcsd_power(int); +@@ -192,6 +195,63 @@ + .id = -1, + }; + ++/* Keypad */ ++static unsigned char a1200_keycode[] = { ++ /* row 0 */ ++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, ++ /* row 1 */ ++ KEY_RIGHT, KEY_DOWN, KEY_KPENTER, KEY_UP, KEY_LEFT, ++ /* row 2 */ ++ KEY_PAGEDOWN, KEY_CAMERA, KEY_RECORD, KEY_HOME, KEY_PAGEUP, ++ /* row 3 */ ++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, ++ /* row 4 */ ++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, ++ /* row 5 */ ++ KEY_RESERVED, KEY_RESERVED, KEY_MENU, KEY_RESERVED, KEY_RESERVED, ++}; ++/* ++static unsigned char a1200_direct_keycode[] = { ++ KEY_CAMERA, ++}; ++*/ ++ ++static int a1200_kbd_init(void) ++{ ++ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */ ++ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */ ++ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */ ++ pxa_gpio_mode(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */ ++ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */ ++ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */ ++ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */ ++ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */ ++ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */ ++ pxa_gpio_mode(107 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<4> */ ++ pxa_gpio_mode(108 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<5> */ ++ ++ PKWR = 0xEC000; ++ PGSR3 |= 0x1F80; ++ return 0; ++} ++ ++static struct pxakbd_platform_data a1200_kbd_platform_data = { ++ .init = &a1200_kbd_init, ++ .scan_interval = HZ/40, ++ .matrix = { ++ .keycode = a1200_keycode, ++ .cols = 6, ++ .rows = 5, ++ }, ++/* ++ .direct = { ++ .keycode = a1200_direct_keycode, ++ .num = 1, ++ }, ++*/ ++}; ++ ++ + static struct platform_device *devices[] __initdata = { + &a1200_pcap_device, + &a1200_eoc_device, +@@ -201,6 +261,7 @@ + { + set_pxa_fb_info(&a1200_fb_info); + pxa_set_mci_info(&a1200_mci_platform_data); ++ pxa_set_kbd_info(&a1200_kbd_platform_data); + + platform_add_devices(devices, ARRAY_SIZE(devices)); + } diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch new file mode 100644 index 0000000000..caa897eddf --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch @@ -0,0 +1,124 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c +@@ -13,6 +13,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -20,12 +22,102 @@ + #include + #include + #include ++#include + + #include "generic.h" + + extern void ezx_lcd_power(int, struct fb_var_screeninfo *); + extern void ezx_backlight_power(int); + ++#ifdef CONFIG_EZX_PCAP ++extern int ezx_pcap_mmcsd_power(int); ++extern void ezx_pcap_mmcsd_voltage(u_int32_t); ++#else ++#define ezx_pcap_mmcsd_voltage(x) {} ++#define ezx_pcap_mmcsd_power(x) {} ++#endif ++ ++static struct pxamci_platform_data a1200_mci_platform_data; ++ ++static u_int8_t mmc_voltage[] = { ++ [ilog2(MMC_VDD_165_195)] = 6, ++ [ilog2(MMC_VDD_20_21)] = 7, ++ [ilog2(MMC_VDD_21_22)] = 8, ++ [ilog2(MMC_VDD_22_23)] = 8, ++ [ilog2(MMC_VDD_23_24)] = 9, ++ [ilog2(MMC_VDD_24_25)] = 9, ++ [ilog2(MMC_VDD_25_26)] = 10, ++ [ilog2(MMC_VDD_26_27)] = 10, ++ [ilog2(MMC_VDD_27_28)] = 11, ++ [ilog2(MMC_VDD_28_29)] = 11, ++ [ilog2(MMC_VDD_29_30)] = 12, ++ [ilog2(MMC_VDD_30_31)] = 12, ++ [ilog2(MMC_VDD_31_32)] = 13, ++ [ilog2(MMC_VDD_32_33)] = 13, ++ [ilog2(MMC_VDD_33_34)] = 14, ++ [ilog2(MMC_VDD_34_35)] = 14, ++ [ilog2(MMC_VDD_35_36)] = 15, ++}; ++ ++static int a1200_mci_init(struct device *dev, ++ irqreturn_t (*ezx_detect_int)(int, void *), ++ void *data) ++{ ++ int err; ++ ++ /* Setup GPIO for PXA27x MMC/SD controller */ ++ pxa_gpio_mode(GPIO32_MMCCLK_MD); ++ pxa_gpio_mode(GPIO112_MMCCMD_MD); ++ pxa_gpio_mode(GPIO92_MMCDAT0_MD); ++ pxa_gpio_mode(GPIO109_MMCDAT1_MD); ++ pxa_gpio_mode(GPIO110_MMCDAT2_MD); ++ pxa_gpio_mode(GPIO111_MMCDAT3_MD); ++ ++ ezx_pcap_mmcsd_power(1); ++ ++ a1200_mci_platform_data.detect_delay = msecs_to_jiffies(250); ++ ++ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED, ++ "MMC card detect", data); ++ if (err) { ++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request " ++ "MMC card detect IRQ\n"); ++ return -1; ++ } ++ ++ set_irq_type(0x0b, IRQT_BOTHEDGE); ++ ++ return 0; ++} ++ ++static void a1200_mci_setpower(struct device *dev, unsigned int vdd) ++{ ++ struct pxamci_platform_data* p_d = dev->platform_data; ++ ++ if (( 1 << vdd) & p_d->ocr_mask) ++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]); ++ ++ ezx_pcap_mmcsd_power(1); ++} ++ ++static void a1200_mci_exit(struct device *dev, void *data) ++{ ++ ezx_pcap_mmcsd_power(0); ++ free_irq(0x49, data); ++} ++ ++static struct pxamci_platform_data a1200_mci_platform_data = { ++ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22 ++ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25 ++ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28 ++ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31 ++ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34 ++ |MMC_VDD_34_35|MMC_VDD_35_36, ++ .init = a1200_mci_init, ++ .setpower = a1200_mci_setpower, ++ .exit = a1200_mci_exit, ++}; ++ + static struct pxafb_mode_info mode_a1200 = { + .pixclock = 192308, + .xres = 240, +@@ -101,6 +193,7 @@ + static void __init a1200_init(void) + { + set_pxa_fb_info(&a1200_fb_info); ++ pxa_set_mci_info(&a1200_mci_platform_data); + + platform_add_devices(devices, ARRAY_SIZE(devices)); + } diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch new file mode 100644 index 0000000000..c725886630 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch @@ -0,0 +1,66 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include "generic.h" + +@@ -48,7 +49,53 @@ + .pxafb_lcd_power = &ezx_lcd_power, + }; + ++/* PCAP */ ++static int a1200_pcap_init(void) ++{ ++ /* FIXME */ ++ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */ ++ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */ ++ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */ ++ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */ ++ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */ ++ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */ ++ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */ ++ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */ ++ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c); ++ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */ ++ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */ ++ ++ return 0; ++} ++ ++static struct pcap_platform_data a1200_pcap_platform_data = { ++ .port = 1, ++ .cs = GPIO_SPI_CE, ++ .flags = PCAP_CS_AH | PCAP_MCI_TF, ++ .clk = 1, ++ .init = a1200_pcap_init, ++}; ++ ++static struct resource a1200_pcap_resources[] = { ++ [0] = { ++ .start = IRQ_GPIO1, ++ .end = IRQ_GPIO1, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++struct platform_device a1200_pcap_device = { ++ .name = "ezx-pcap", ++ .id = -1, ++ .num_resources = ARRAY_SIZE(a1200_pcap_resources), ++ .resource = a1200_pcap_resources, ++ .dev = { ++ .platform_data = &a1200_pcap_platform_data, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { ++ &a1200_pcap_device, + }; + + static void __init a1200_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch new file mode 100644 index 0000000000..66409d12b0 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch @@ -0,0 +1,39 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:35.000000000 -0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:42.000000000 -0200 +@@ -252,9 +252,34 @@ + }; + + ++/* PCAP_TS */ ++struct resource pcap_ts_resources[] = { ++ [0] = { ++ .start = EZX_IRQ_ADCDONE, ++ .end = EZX_IRQ_ADCDONE, ++ .flags = IORESOURCE_IRQ, ++ }, ++ [1] = { ++ .start = EZX_IRQ_TS, ++ .end = EZX_IRQ_TS, ++ .flags = IORESOURCE_IRQ, ++ } ++}; ++ ++struct platform_device pcap_ts_device = { ++ .name = "pcap-ts", ++ .id = -1, ++ .dev = { ++ .parent = &a1200_pcap_device.dev, ++ }, ++ .num_resources = ARRAY_SIZE(pcap_ts_resources), ++ .resource = pcap_ts_resources, ++}; ++ + static struct platform_device *devices[] __initdata = { + &a1200_pcap_device, + &a1200_eoc_device, ++ &pcap_ts_device, + }; + + static void __init a1200_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch new file mode 100644 index 0000000000..ae9237394d --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch @@ -0,0 +1,38 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:03:48.000000000 +0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:04:03.000000000 +0200 +@@ -212,8 +212,33 @@ + }, + }; + ++/* EMU */ ++static struct resource a780_emu_resources[] = { ++ [0] = { ++ .start = EZX_IRQ_USB4V, ++ .end = EZX_IRQ_USB4V, ++ .flags = IORESOURCE_IRQ, ++ }, ++ [1] = { ++ .start = EZX_IRQ_USB1V, ++ .end = EZX_IRQ_USB1V, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++struct platform_device a780_emu_device = { ++ .name = "ezx-emu", ++ .id = -1, ++ .dev = { ++ .parent = &a780_pcap_device.dev, ++ }, ++ .num_resources = ARRAY_SIZE(a780_emu_resources), ++ .resource = a780_emu_resources, ++}; ++ + static struct platform_device *devices[] __initdata = { + &a780_pcap_device, ++ &a780_emu_device, + }; + + static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch new file mode 100644 index 0000000000..44b97880ca --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch @@ -0,0 +1,46 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:38:04.000000000 +0200 +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -312,10 +313,33 @@ + .resource = pcap_ts_resources, + }; + ++static struct gpio_keys_button a780flip_buttons[] = { ++ [0] = { ++ .code = KEY_SLEEP, ++ .gpio = GPIO_FLIP_PIN, ++ .desc = "A780 flip", ++ }, ++}; ++ ++static struct gpio_keys_platform_data a780flip_platform_data = { ++ .buttons = a780flip_buttons, ++ .nbuttons = 1, ++}; ++ ++static struct platform_device a780flip_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .dev = { ++ .platform_data = &a780flip_platform_data, ++ }, ++}; ++ ++ + static struct platform_device *devices[] __initdata = { + &a780_pcap_device, + &a780_emu_device, + &pcap_ts_device, ++ &a780flip_device, + }; + + static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch new file mode 100644 index 0000000000..fa22c72a6b --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch @@ -0,0 +1,90 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -25,11 +26,13 @@ + #include + #include + #include ++#include + + #include "generic.h" + + extern void ezx_lcd_power(int, struct fb_var_screeninfo *); + extern void ezx_backlight_power(int); ++extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *); + + #ifdef CONFIG_EZX_PCAP + extern int ezx_pcap_mmcsd_power(int); +@@ -236,6 +239,55 @@ + .resource = a780_emu_resources, + }; + ++static unsigned char a780_keycode[] = { ++ /* row 0 */ ++ KEY_PHONE, KEY_MENU, KEY_CANCEL, KEY_PAGEUP, KEY_UP, ++ /* row 1 */ ++ KEY_KP1, KEY_KP2, KEY_KP3, KEY_ENTER, KEY_KPENTER, /*center joypad */ ++ /* row 2 */ ++ KEY_KP4, KEY_KP5, KEY_KP6, KEY_RECORD, KEY_LEFT, ++ /* row 3 */ ++ KEY_KP7, KEY_KP8, KEY_KP9, KEY_HOME, KEY_RIGHT, ++ /* row 4 */ ++ KEY_KPASTERISK, KEY_KP0, KEY_KPDOT, KEY_PAGEDOWN, KEY_DOWN, ++}; ++ ++static unsigned char a780_direct_keycode[] = { ++ KEY_CAMERA, ++}; ++ ++static int a780_kbd_init(void) ++{ ++ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, voice_rec */ ++ pxa_gpio_mode(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */ ++ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */ ++ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */ ++ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */ ++ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */ ++ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */ ++ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */ ++ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */ ++ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */ ++ pxa_gpio_mode(107 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<4> */ ++ PKWR = 0xec400; ++ PGSR3 |= 0xf80; ++ return 0; ++} ++ ++static struct pxakbd_platform_data a780_kbd_platform_data = { ++ .init = &a780_kbd_init, ++ .scan_interval = HZ/40, ++ .matrix = { ++ .keycode = a780_keycode, ++ .cols = 5, ++ .rows = 5, ++ }, ++ .direct = { ++ .keycode = a780_direct_keycode, ++ .num = 1, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { + &a780_pcap_device, + &a780_emu_device, +@@ -256,6 +308,7 @@ + + set_pxa_fb_info(&a780_fb_info); + pxa_set_mci_info(&a780_mci_platform_data); ++ pxa_set_kbd_info(&a780_kbd_platform_data); + + /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ + pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch new file mode 100644 index 0000000000..edcc7136a1 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch @@ -0,0 +1,187 @@ + +# +# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher +# + +Index: linux-2.6.24/drivers/leds/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/leds/Kconfig ++++ linux-2.6.24/drivers/leds/Kconfig +@@ -123,6 +123,13 @@ + These triggers allow kernel events to drive the LEDs and can + be configured via sysfs. If unsure, say Y. + ++config LEDS_A780 ++ tristate "LED Support for the Motorola A780 GSM Phone" ++ depends on LEDS_CLASS && PXA_EZX_A780 ++ help ++ This option enables support for the LEDs on the ++ Motorola A780 GSM Phone. ++ + config LEDS_TRIGGER_TIMER + tristate "LED Timer Trigger" + depends on LEDS_TRIGGERS +Index: linux-2.6.24/drivers/leds/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/leds/Makefile ++++ linux-2.6.24/drivers/leds/Makefile +@@ -19,6 +19,7 @@ + obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o + obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o + obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o ++obj-$(CONFIG_LEDS_A780) += leds-a780.o + + # LED Triggers + obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o +Index: linux-2.6.24/drivers/leds/leds-a780.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/leds/leds-a780.c +@@ -0,0 +1,122 @@ ++/* ++ * EZX Platform LED Driver for the Motorola A780 GSM Phone ++ * ++ * Copyright 2006 Vanille-Media ++ * ++ * Author: Michael Lauer ++ * ++ * Based on keylight.c by Motorola and leds-corgi.c by Richard Purdie ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++ ++static void a780led_main_set(struct led_classdev *led_cdev, enum led_brightness value) ++{ ++ if ( value > 31 ) value = 31; ++ printk( KERN_DEBUG "a780led_main_set: %d\n", value ); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL0, value & 0x01); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL1, value & 0x02); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL2, value & 0x04); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL3, value & 0x08); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL4, value & 0x10); ++} ++ ++static void a780led_aux_set(struct led_classdev *led_cdev, enum led_brightness value) ++{ ++ if ( value > 31 ) value = 31; ++ printk( KERN_DEBUG "a780led_aux_set: %d\n", value ); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL0, value & 0x01); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL1, value & 0x02); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL2, value & 0x04); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL3, value & 0x08); ++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL4, value & 0x10); ++} ++ ++static struct led_classdev a780_main_led = { ++ .name = "a780:main", ++ .default_trigger = "none", ++ .brightness_set = a780led_main_set, ++}; ++ ++static struct led_classdev a780_aux_led = { ++ .name = "a780:aux", ++ .default_trigger = "none", ++ .brightness_set = a780led_aux_set, ++}; ++ ++#ifdef CONFIG_PM ++static int a780led_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ led_classdev_suspend(&a780_main_led); ++ led_classdev_suspend(&a780_aux_led); ++ return 0; ++} ++ ++static int a780led_resume(struct platform_device *dev) ++{ ++ led_classdev_resume(&a780_main_led); ++ led_classdev_resume(&a780_aux_led); ++ return 0; ++} ++#endif ++ ++static int a780led_probe(struct platform_device *pdev) ++{ ++ int ret; ++ ++ ret = led_classdev_register(&pdev->dev, &a780_main_led); ++ if (ret < 0) ++ return ret; ++ ++ ret = led_classdev_register(&pdev->dev, &a780_aux_led); ++ if (ret < 0) ++ led_classdev_unregister(&a780_main_led); ++ ++ return ret; ++} ++ ++static int a780led_remove(struct platform_device *pdev) ++{ ++ led_classdev_unregister(&a780_main_led); ++ led_classdev_unregister(&a780_aux_led); ++ return 0; ++} ++ ++static struct platform_driver a780led_driver = { ++ .probe = a780led_probe, ++ .remove = a780led_remove, ++#ifdef CONFIG_PM ++ .suspend = a780led_suspend, ++ .resume = a780led_resume, ++#endif ++ .driver = { ++ .name = "a780-led", ++ }, ++}; ++ ++static int __init a780led_init(void) ++{ ++ return platform_driver_register(&a780led_driver); ++} ++ ++static void __exit a780led_exit(void) ++{ ++ a780led_main_set( &a780_main_led, 0 ); ++ a780led_aux_set( &a780_aux_led, 0 ); ++ platform_driver_unregister(&a780led_driver); ++} ++ ++module_init(a780led_init); ++module_exit(a780led_exit); ++ ++MODULE_AUTHOR("Michael Lauer "); ++MODULE_DESCRIPTION("Motorola A780 LED driver"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx-a780.c ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c +@@ -334,12 +334,20 @@ + }, + }; + ++static struct platform_device a780led_device = { ++ .name = "a780-led", ++ .id = -1, ++ .dev = { ++ .parent = &a780_pcap_device.dev, ++ }, ++}; + + static struct platform_device *devices[] __initdata = { + &a780_pcap_device, + &a780_emu_device, + &pcap_ts_device, + &a780flip_device, ++ &a780led_device, + }; + + static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch new file mode 100644 index 0000000000..591db70a26 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch @@ -0,0 +1,125 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c +@@ -14,6 +14,9 @@ + #include + #include + #include ++#include ++#include ++#include + + #include + #include +@@ -21,12 +24,102 @@ + #include + #include + #include ++#include + + #include "generic.h" + + extern void ezx_lcd_power(int, struct fb_var_screeninfo *); + extern void ezx_backlight_power(int); + ++#ifdef CONFIG_EZX_PCAP ++extern int ezx_pcap_mmcsd_power(int); ++extern void ezx_pcap_mmcsd_voltage(u_int32_t); ++#else ++#define ezx_pcap_mmcsd_voltage(x) {} ++#define ezx_pcap_mmcsd_power(x) {} ++#endif ++ ++static struct pxamci_platform_data a780_mci_platform_data; ++ ++static u_int8_t mmc_voltage[] = { ++ [ilog2(MMC_VDD_165_195)] = 6, ++ [ilog2(MMC_VDD_20_21)] = 7, ++ [ilog2(MMC_VDD_21_22)] = 8, ++ [ilog2(MMC_VDD_22_23)] = 8, ++ [ilog2(MMC_VDD_23_24)] = 9, ++ [ilog2(MMC_VDD_24_25)] = 9, ++ [ilog2(MMC_VDD_25_26)] = 10, ++ [ilog2(MMC_VDD_26_27)] = 10, ++ [ilog2(MMC_VDD_27_28)] = 11, ++ [ilog2(MMC_VDD_28_29)] = 11, ++ [ilog2(MMC_VDD_29_30)] = 12, ++ [ilog2(MMC_VDD_30_31)] = 12, ++ [ilog2(MMC_VDD_31_32)] = 13, ++ [ilog2(MMC_VDD_32_33)] = 13, ++ [ilog2(MMC_VDD_33_34)] = 14, ++ [ilog2(MMC_VDD_34_35)] = 14, ++ [ilog2(MMC_VDD_35_36)] = 15, ++}; ++ ++static int a780_mci_init(struct device *dev, ++ irqreturn_t (*ezx_detect_int)(int, void *), ++ void *data) ++{ ++ int err; ++ ++ /* Setup GPIO for PXA27x MMC/SD controller */ ++ pxa_gpio_mode(GPIO32_MMCCLK_MD); ++ pxa_gpio_mode(GPIO112_MMCCMD_MD); ++ pxa_gpio_mode(GPIO92_MMCDAT0_MD); ++ pxa_gpio_mode(GPIO109_MMCDAT1_MD); ++ pxa_gpio_mode(GPIO110_MMCDAT2_MD); ++ pxa_gpio_mode(GPIO111_MMCDAT3_MD); ++ ++ ezx_pcap_mmcsd_power(1); ++ ++ a780_mci_platform_data.detect_delay = msecs_to_jiffies(250); ++ ++ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED, ++ "MMC card detect", data); ++ if (err) { ++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request " ++ "MMC card detect IRQ\n"); ++ return -1; ++ } ++ ++ set_irq_type(0x0b, IRQT_BOTHEDGE); ++ ++ return 0; ++} ++ ++static void a780_mci_setpower(struct device *dev, unsigned int vdd) ++{ ++ struct pxamci_platform_data* p_d = dev->platform_data; ++ ++ if (( 1 << vdd) & p_d->ocr_mask) ++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]); ++ ++ ezx_pcap_mmcsd_power(1); ++} ++ ++static void a780_mci_exit(struct device *dev, void *data) ++{ ++ ezx_pcap_mmcsd_power(0); ++ free_irq(0x49, data); ++} ++ ++static struct pxamci_platform_data a780_mci_platform_data = { ++ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22 ++ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25 ++ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28 ++ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31 ++ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34 ++ |MMC_VDD_34_35|MMC_VDD_35_36, ++ .init = a780_mci_init, ++ .setpower = a780_mci_setpower, ++ .exit = a780_mci_exit, ++}; ++ + static struct pxafb_mode_info mode_a780 = { + .pixclock = 150000, + .xres = 240, +@@ -137,6 +230,7 @@ + PSLR = 0x05800f00; + + set_pxa_fb_info(&a780_fb_info); ++ pxa_set_mci_info(&a780_mci_platform_data); + + /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ + pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch new file mode 100644 index 0000000000..5533433dec --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch @@ -0,0 +1,90 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-11-24 19:58:16.000000000 -0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-11-24 20:09:28.000000000 -0200 +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #include "generic.h" + +@@ -49,7 +50,77 @@ + .pxafb_lcd_power = &ezx_lcd_power, + }; + ++/* PCAP */ ++static int a780_pcap_init(void) ++{ ++ /* initialize PCAP registers */ ++ /* set SW1 sleep to keep SW1 1.3v in sync mode */ ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0); ++ ++ /* SW1 active in sync mode */ ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0); ++ ++ /* at SW1 -core voltage to 1.30V */ ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0); ++ ++ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */ ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0); ++ ++ /* ++ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 --- ++ * camera for e680 ++ */ ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0); ++ ++ /* set Vc to low power mode when AP sleep */ ++// SSP_PCAP_bit_set(PCAP_BIT_LOWPWR_CTRL_VC_STBY); ++ ++ /* set VAUX2 to low power mode when AP sleep */ ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1); ++ ++ return 0; ++} ++ ++static struct pcap_platform_data a780_pcap_platform_data = { ++ .port = 1, ++ .cs = GPIO_SPI_CE, ++ .flags = PCAP_MCI_TF, ++ .clk = 1, ++ .init = a780_pcap_init, ++}; ++ ++static struct resource a780_pcap_resources[] = { ++ [0] = { ++ .start = IRQ_GPIO1, ++ .end = IRQ_GPIO1, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++struct platform_device a780_pcap_device = { ++ .name = "ezx-pcap", ++ .id = -1, ++ .num_resources = ARRAY_SIZE(a780_pcap_resources), ++ .resource = a780_pcap_resources, ++ .dev = { ++ .platform_data = &a780_pcap_platform_data, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { ++ &a780_pcap_device, + }; + + static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch new file mode 100644 index 0000000000..e1dd6ca5c6 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch @@ -0,0 +1,39 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:43.000000000 +0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200 +@@ -288,9 +288,34 @@ + }, + }; + ++/* PCAP_TS */ ++struct resource pcap_ts_resources[] = { ++ [0] = { ++ .start = EZX_IRQ_ADCDONE2, ++ .end = EZX_IRQ_ADCDONE2, ++ .flags = IORESOURCE_IRQ, ++ }, ++ [1] = { ++ .start = EZX_IRQ_TS, ++ .end = EZX_IRQ_TS, ++ .flags = IORESOURCE_IRQ, ++ } ++}; ++ ++struct platform_device pcap_ts_device = { ++ .name = "pcap-ts", ++ .id = -1, ++ .dev = { ++ .parent = &a780_pcap_device.dev, ++ }, ++ .num_resources = ARRAY_SIZE(pcap_ts_resources), ++ .resource = pcap_ts_resources, ++}; ++ + static struct platform_device *devices[] __initdata = { + &a780_pcap_device, + &a780_emu_device, ++ &pcap_ts_device, + }; + + static void __init a780_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch new file mode 100644 index 0000000000..8e431fbd6c --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch @@ -0,0 +1,102 @@ +Index: linux-2.6.24/drivers/leds/leds-a780.c +=================================================================== +--- linux-2.6.24.orig/drivers/leds/leds-a780.c ++++ linux-2.6.24/drivers/leds/leds-a780.c +@@ -40,6 +40,17 @@ + ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL4, value & 0x10); + } + ++static void a780vibrator_set(struct led_classdev *led_cdev, enum led_brightness value) ++{ ++ if (value > 4) value = 4; ++ printk( KERN_DEBUG "a780vibrator_set: %d\n", value ); ++ ezx_pcap_vibrator_level(value-1); ++ if (value == 0) ++ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 0); ++ else ++ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 1); ++} ++ + static struct led_classdev a780_main_led = { + .name = "a780:main", + .default_trigger = "none", +@@ -52,11 +63,18 @@ + .brightness_set = a780led_aux_set, + }; + ++static struct led_classdev a780_vibrator = { ++ .name = "a780:vibrator", ++ .default_trigger = "none", ++ .brightness_set = a780vibrator_set, ++}; ++ + #ifdef CONFIG_PM + static int a780led_suspend(struct platform_device *dev, pm_message_t state) + { + led_classdev_suspend(&a780_main_led); + led_classdev_suspend(&a780_aux_led); ++ led_classdev_suspend(&a780_vibrator); + return 0; + } + +@@ -64,6 +82,7 @@ + { + led_classdev_resume(&a780_main_led); + led_classdev_resume(&a780_aux_led); ++ led_classdev_resume(&a780_vibrator); + return 0; + } + #endif +@@ -77,8 +96,16 @@ + return ret; + + ret = led_classdev_register(&pdev->dev, &a780_aux_led); +- if (ret < 0) ++ if (ret < 0) { ++ led_classdev_unregister(&a780_main_led); ++ return ret; ++ } ++ ++ ret = led_classdev_register(&pdev->dev, &a780_vibrator); ++ if (ret < 0) { + led_classdev_unregister(&a780_main_led); ++ led_classdev_unregister(&a780_aux_led); ++ } + + return ret; + } +@@ -87,6 +114,7 @@ + { + led_classdev_unregister(&a780_main_led); + led_classdev_unregister(&a780_aux_led); ++ led_classdev_unregister(&a780_vibrator); + return 0; + } + +@@ -111,6 +139,7 @@ + { + a780led_main_set( &a780_main_led, 0 ); + a780led_aux_set( &a780_aux_led, 0 ); ++ a780vibrator_set( &a780_vibrator, 0 ); + platform_driver_unregister(&a780led_driver); + } + +Index: linux-2.6.24/drivers/leds/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/leds/Kconfig ++++ linux-2.6.24/drivers/leds/Kconfig +@@ -124,11 +124,11 @@ + be configured via sysfs. If unsure, say Y. + + config LEDS_A780 +- tristate "LED Support for the Motorola A780 GSM Phone" ++ tristate "LED/Vibrator Support for the Motorola A780 GSM Phone" + depends on LEDS_CLASS && PXA_EZX_A780 + help +- This option enables support for the LEDs on the +- Motorola A780 GSM Phone. ++ This option enables support for the LEDs and the ++ vibrator on the Motorola A780 GSM Phone. + + config LEDS_E680 + tristate "LED Support for the Motorola E680(i) GSM Phone" diff --git a/packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch b/packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch new file mode 100644 index 0000000000..feea138984 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch @@ -0,0 +1,14 @@ +Index: linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c +=================================================================== +--- linux-2.6.21.orig/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:30:56.000000000 -0300 ++++ linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:36:26.000000000 -0300 +@@ -153,7 +153,8 @@ + static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream) + { + struct pxa2xx_runtime_data *prtd = substream->runtime->private_data; +- ++ /* no dma if on loopback */ ++ if (!prtd->params) return 0; + DCSR(prtd->dma_ch) &= ~DCSR_RUN; + DCSR(prtd->dma_ch) = 0; + DCMD(prtd->dma_ch) = 0; diff --git a/packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch b/packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch new file mode 100644 index 0000000000..e53b61c352 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch @@ -0,0 +1,755 @@ +Index: linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c 2007-10-22 22:27:11.000000000 +0200 +@@ -0,0 +1,671 @@ ++/* ++ * pxa2xx-ssp.c -- ALSA Soc Audio Layer ++ * ++ * Copyright 2005 Wolfson Microelectronics PLC. ++ * Author: Liam Girdwood ++ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ * ++ * Revision history ++ * 12th Aug 2005 Initial version. ++ * ++ * TODO: ++ * o The SSP driver _mostly_ works, however is in need of testing and ++ * someone with time to complete it. ++ * o Test network mode for > 16bit sample size ++ */ ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "pxa2xx-pcm.h" ++#include "pxa2xx-ssp.h" ++ ++#define PXA_SSP_DEBUG 0 ++ ++/* ++ * The following should be defined in pxa-regs.h ++ */ ++#define SSCR0_ACS (1 << 30) /* Audio Clock Select */ ++#define SSACD_SCDB (1 << 3) /* SSPSYSCLK Divider Bypass (SSCR0[ACS] must be set) */ ++#define SSACD_ACPS(x) (x << 4) /* Audio clock PLL select */ ++#define SSACD_ACDS(x) (x << 0) /* Audio clock divider select */ ++ ++/* ++ * SSP audio private data ++ */ ++struct ssp_priv { ++ unsigned int sysclk; ++}; ++ ++static struct ssp_priv ssp_clk[3]; ++static struct ssp_dev ssp[3]; ++#ifdef CONFIG_PM ++static struct ssp_state ssp_state[3]; ++#endif ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_out = { ++ .name = "SSP1 PCM Mono out", ++ .dev_addr = __PREG(SSDR_P1), ++ .drcmr = &DRCMRTXSSDR, ++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | ++ DCMD_BURST16 | DCMD_WIDTH2, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_in = { ++ .name = "SSP1 PCM Mono in", ++ .dev_addr = __PREG(SSDR_P1), ++ .drcmr = &DRCMRRXSSDR, ++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | ++ DCMD_BURST16 | DCMD_WIDTH2, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_out = { ++ .name = "SSP1 PCM Stereo out", ++ .dev_addr = __PREG(SSDR_P1), ++ .drcmr = &DRCMRTXSSDR, ++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | ++ DCMD_BURST16 | DCMD_WIDTH4, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_in = { ++ .name = "SSP1 PCM Stereo in", ++ .dev_addr = __PREG(SSDR_P1), ++ .drcmr = &DRCMRRXSSDR, ++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | ++ DCMD_BURST16 | DCMD_WIDTH4, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_out = { ++ .name = "SSP2 PCM Mono out", ++ .dev_addr = __PREG(SSDR_P2), ++ .drcmr = &DRCMRTXSS2DR, ++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | ++ DCMD_BURST16 | DCMD_WIDTH2, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_in = { ++ .name = "SSP2 PCM Mono in", ++ .dev_addr = __PREG(SSDR_P2), ++ .drcmr = &DRCMRRXSS2DR, ++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | ++ DCMD_BURST16 | DCMD_WIDTH2, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_out = { ++ .name = "SSP2 PCM Stereo out", ++ .dev_addr = __PREG(SSDR_P2), ++ .drcmr = &DRCMRTXSS2DR, ++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | ++ DCMD_BURST16 | DCMD_WIDTH4, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_in = { ++ .name = "SSP2 PCM Stereo in", ++ .dev_addr = __PREG(SSDR_P2), ++ .drcmr = &DRCMRRXSS2DR, ++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | ++ DCMD_BURST16 | DCMD_WIDTH4, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_out = { ++ .name = "SSP3 PCM Mono out", ++ .dev_addr = __PREG(SSDR_P3), ++ .drcmr = &DRCMRTXSS3DR, ++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | ++ DCMD_BURST16 | DCMD_WIDTH2, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_in = { ++ .name = "SSP3 PCM Mono in", ++ .dev_addr = __PREG(SSDR_P3), ++ .drcmr = &DRCMRRXSS3DR, ++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | ++ DCMD_BURST16 | DCMD_WIDTH2, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_out = { ++ .name = "SSP3 PCM Stereo out", ++ .dev_addr = __PREG(SSDR_P3), ++ .drcmr = &DRCMRTXSS3DR, ++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | ++ DCMD_BURST16 | DCMD_WIDTH4, ++}; ++ ++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_in = { ++ .name = "SSP3 PCM Stereo in", ++ .dev_addr = __PREG(SSDR_P3), ++ .drcmr = &DRCMRRXSS3DR, ++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | ++ DCMD_BURST16 | DCMD_WIDTH4, ++}; ++ ++static struct pxa2xx_pcm_dma_params *ssp_dma_params[3][4] = { ++ {&pxa2xx_ssp1_pcm_mono_out, &pxa2xx_ssp1_pcm_mono_in, ++ &pxa2xx_ssp1_pcm_stereo_out,&pxa2xx_ssp1_pcm_stereo_in,}, ++ {&pxa2xx_ssp2_pcm_mono_out, &pxa2xx_ssp2_pcm_mono_in, ++ &pxa2xx_ssp2_pcm_stereo_out, &pxa2xx_ssp2_pcm_stereo_in,}, ++ {&pxa2xx_ssp3_pcm_mono_out, &pxa2xx_ssp3_pcm_mono_in, ++ &pxa2xx_ssp3_pcm_stereo_out,&pxa2xx_ssp3_pcm_stereo_in,}, ++}; ++ ++static int pxa2xx_ssp_startup(struct snd_pcm_substream *substream) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; ++ int ret = 0; ++ ++ if (!rtd->dai->cpu_dai->active) { ++ ret = ssp_init (&ssp[cpu_dai->id], cpu_dai->id + 1, ++ SSP_NO_IRQ); ++ if (ret < 0) ++ return ret; ++ ssp_disable(&ssp[cpu_dai->id]); ++ } ++ return ret; ++} ++ ++static void pxa2xx_ssp_shutdown(struct snd_pcm_substream *substream) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; ++ ++ if (!cpu_dai->active) { ++ ssp_disable(&ssp[cpu_dai->id]); ++ ssp_exit(&ssp[cpu_dai->id]); ++ } ++} ++ ++#if defined (CONFIG_PXA27x) ++static int cken[3] = {CKEN_SSP1, CKEN_SSP2, CKEN_SSP3}; ++#else ++static int cken[3] = {CKEN_SSP, CKEN_NSSP, CKEN_ASSP}; ++#endif ++ ++#ifdef CONFIG_PM ++ ++static int pxa2xx_ssp_suspend(struct platform_device *pdev, ++ struct snd_soc_cpu_dai *dai) ++{ ++ if (!dai->active) ++ return 0; ++ ++ ssp_save_state(&ssp[dai->id], &ssp_state[dai->id]); ++ pxa_set_cken(cken[dai->id], 0); ++ return 0; ++} ++ ++static int pxa2xx_ssp_resume(struct platform_device *pdev, ++ struct snd_soc_cpu_dai *dai) ++{ ++ if (!dai->active) ++ return 0; ++ ++ pxa_set_cken(cken[dai->id], 1); ++ ssp_restore_state(&ssp[dai->id], &ssp_state[dai->id]); ++ ssp_enable(&ssp[dai->id]); ++ ++ return 0; ++} ++ ++#else ++#define pxa2xx_ssp_suspend NULL ++#define pxa2xx_ssp_resume NULL ++#endif ++ ++/* ++ * Set the SSP ports SYSCLK. ++ */ ++static int pxa2xx_ssp_set_dai_sysclk(struct snd_soc_cpu_dai *cpu_dai, ++ int clk_id, unsigned int freq, int dir) ++{ ++ int port = cpu_dai->id + 1; ++ u32 sscr0 = SSCR0_P(port) & ++ ~(SSCR0_ECS | SSCR0_NCS | SSCR0_MOD | SSCR0_ACS); ++ ++ switch (clk_id) { ++ case PXA2XX_SSP_CLK_PLL: ++ /* Internal PLL is fixed on pxa25x and pxa27x */ ++#ifdef CONFIG_PXA27x ++ ssp_clk[cpu_dai->id].sysclk = 13000000; ++#else ++ ssp_clk[cpu_dai->id].sysclk = 1843200; ++#endif ++ break; ++ case PXA2XX_SSP_CLK_EXT: ++ ssp_clk[cpu_dai->id].sysclk = freq; ++ sscr0 |= SSCR0_ECS; ++ break; ++ case PXA2XX_SSP_CLK_NET: ++ ssp_clk[cpu_dai->id].sysclk = freq; ++ sscr0 |= SSCR0_NCS | SSCR0_MOD; ++ break; ++ case PXA2XX_SSP_CLK_AUDIO: ++ ssp_clk[cpu_dai->id].sysclk = 0; ++ SSCR0_P(port) |= SSCR0_SerClkDiv(1); ++ sscr0 |= SSCR0_ACS; ++ break; ++ default: ++ return -ENODEV; ++ } ++ ++ /* the SSP CKEN clock must be disabled when changing SSP clock mode */ ++ pxa_set_cken(cken[cpu_dai->id], 0); ++ SSCR0_P(port) |= sscr0; ++ pxa_set_cken(cken[cpu_dai->id], 1); ++ return 0; ++} ++ ++/* ++ * Set the SSP clock dividers. ++ */ ++static int pxa2xx_ssp_set_dai_clkdiv(struct snd_soc_cpu_dai *cpu_dai, ++ int div_id, int div) ++{ ++ int port = cpu_dai->id + 1; ++ ++ switch (div_id) { ++ case PXA2XX_SSP_AUDIO_DIV_ACDS: ++ SSACD_P(port) &= ~ 0x7; ++ SSACD_P(port) |= SSACD_ACDS(div); ++ break; ++ case PXA2XX_SSP_AUDIO_DIV_SCDB: ++ SSACD_P(port) &= ~0x8; ++ if (div == PXA2XX_SSP_CLK_SCDB_1) ++ SSACD_P(port) |= SSACD_SCDB; ++ break; ++ case PXA2XX_SSP_DIV_SCR: ++ SSCR0_P(port) &= ~SSCR0_SCR; ++ SSCR0_P(port) |= SSCR0_SerClkDiv(div); ++ break; ++ default: ++ return -ENODEV; ++ } ++ ++ return 0; ++} ++ ++/* ++ * Configure the PLL frequency pxa27x and (afaik - pxa320 only) ++ */ ++static int pxa2xx_ssp_set_dai_pll(struct snd_soc_cpu_dai *cpu_dai, ++ int pll_id, unsigned int freq_in, unsigned int freq_out) ++{ ++ int port = cpu_dai->id + 1; ++ ++ SSACD_P(port) &= ~0x70; ++ switch (freq_out) { ++ case 5622000: ++ break; ++ case 11345000: ++ SSACD_P(port) |= (0x1 << 4); ++ break; ++ case 12235000: ++ SSACD_P(port) |= (0x2 << 4); ++ break; ++ case 14857000: ++ SSACD_P(port) |= (0x3 << 4); ++ break; ++ case 32842000: ++ SSACD_P(port) |= (0x4 << 4); ++ break; ++ case 48000000: ++ SSACD_P(port) |= (0x5 << 4); ++ break; ++ } ++ return 0; ++} ++ ++/* ++ * Set the active slots in TDM/Network mode ++ */ ++static int pxa2xx_ssp_set_dai_tdm_slot(struct snd_soc_cpu_dai *cpu_dai, ++ unsigned int mask, int slots) ++{ ++ int port = cpu_dai->id + 1; ++ ++ SSCR0_P(port) &= ~SSCR0_SlotsPerFrm(7); ++ ++ /* set number of active slots */ ++ SSCR0_P(port) |= SSCR0_SlotsPerFrm(slots); ++ ++ /* set active slot mask */ ++ SSTSA_P(port) = mask; ++ SSRSA_P(port) = mask; ++ return 0; ++} ++ ++/* ++ * Tristate the SSP DAI lines ++ */ ++static int pxa2xx_ssp_set_dai_tristate(struct snd_soc_cpu_dai *cpu_dai, ++ int tristate) ++{ ++ int port = cpu_dai->id + 1; ++ ++ if (tristate) ++ SSCR1_P(port) &= ~SSCR1_TTE; ++ else ++ SSCR1_P(port) |= SSCR1_TTE; ++ ++ return 0; ++} ++ ++/* ++ * Set up the SSP DAI format. ++ * The SSP Port must be inactive before calling this function as the ++ * physical interface format is changed. ++ */ ++static int pxa2xx_ssp_set_dai_fmt(struct snd_soc_cpu_dai *cpu_dai, ++ unsigned int fmt) ++{ ++ int port = cpu_dai->id + 1; ++ ++ /* reset port settings */ ++ SSCR0_P(port) = 0; ++ SSCR1_P(port) = 0; ++ SSPSP_P(port) = 0; ++ ++ /* NOTE: I2S emulation is still very much work in progress here */ ++ ++ /* FIXME: this is what wince uses for msb */ ++ if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_MSB) { ++ SSCR0_P(port) = SSCR0_EDSS | SSCR0_TISSP | SSCR0_DataSize(16); ++ ++// SSCR1_P(port) = SSCR1_RxTresh(8) | SSCR1_TxTresh(8); /* doesn't seem to be needed */ ++ return 0; ++ } ++ ++ /* check for I2S emulation mode - handle it separately */ ++ if (((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_I2S) || ++ ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_MSB)) { ++ /* 8.4.11 */ ++ ++ /* Only SSCR0[NCS] or SSCR0[ECS] bit fields settings are optional */ ++ SSCR0_P(port) = SSCR0_EDSS | SSCR0_PSP | SSCR0_DataSize(16); ++ ++ /* SSCR1 = 0x203C3C03 */ ++ /* SSCR1[SCLKDIR] and SSCR1[SFRMDIR] must be cleared (master only ???), ++ * all other bit fields settings are optional. */ ++ //SSCR1_P(port) &= ~(SSCR1_SCLKDIR | SSCR1_SFRMDIR); ++ ++ /* set FIFO thresholds */ ++ SSCR1_P(port) = SSCR1_RxTresh(14) | SSCR1_TxTresh(1); ++ ++ /* normal: */ ++ /* all bit fields must be cleared except: FSRT = 1 and ++ * SFRMWDTH = 16, DMYSTART=0,1) */ ++ SSPSP_P(port) = SSPSP_FSRT | SSPSP_SFRMWDTH(16) | SSPSP_DMYSTRT(0); ++ return 0; ++ } ++ ++ SSCR0_P(port) |= SSCR0_PSP; ++ SSCR1_P(port) = SSCR1_RxTresh(14) | SSCR1_TxTresh(1) | ++ SSCR1_TRAIL | SSCR1_RWOT; ++ ++ switch(fmt & SND_SOC_DAIFMT_MASTER_MASK) { ++ case SND_SOC_DAIFMT_CBM_CFM: ++ SSCR1_P(port) |= (SSCR1_SCLKDIR | SSCR1_SFRMDIR); ++ break; ++ case SND_SOC_DAIFMT_CBM_CFS: ++ SSCR1_P(port) |= SSCR1_SCLKDIR; ++ break; ++ case SND_SOC_DAIFMT_CBS_CFM: ++ SSCR1_P(port) |= SSCR1_SFRMDIR; ++ break; ++ case SND_SOC_DAIFMT_CBS_CFS: ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ switch (fmt & SND_SOC_DAIFMT_INV_MASK) { ++ case SND_SOC_DAIFMT_NB_NF: ++ SSPSP_P(port) |= SSPSP_SFRMP | SSPSP_FSRT; ++ break; ++ case SND_SOC_DAIFMT_IB_IF: ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { ++ case SND_SOC_DAIFMT_DSP_A: ++ SSPSP_P(port) |= SSPSP_DMYSTRT(1); ++ case SND_SOC_DAIFMT_DSP_B: ++ SSPSP_P(port) |= SSPSP_SCMODE(2); ++ break; ++ case SND_SOC_DAIFMT_I2S: ++ case SND_SOC_DAIFMT_MSB: ++ /* handled above */ ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++/* ++ * Set the SSP audio DMA parameters and sample size. ++ * Can be called multiple times by oss emulation. ++ */ ++static int pxa2xx_ssp_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; ++ int dma = 0, chn = params_channels(params); ++ int port = cpu_dai->id + 1; ++ ++ /* select correct DMA params */ ++ if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK) ++ dma = 1; /* capture DMA offset is 1,3 */ ++ if (chn == 2) ++ dma += 2; /* stereo DMA offset is 2, mono is 0 */ ++ cpu_dai->dma_data = ssp_dma_params[cpu_dai->id][dma]; ++ ++ /* we can only change the settings if the port is not in use */ ++ if (SSCR0_P(port) & SSCR0_SSE) ++ return 0; ++ ++ /* clear selected SSP bits */ ++ SSCR0_P(port) &= ~(SSCR0_DSS | SSCR0_EDSS); ++ ++ /* bit size */ ++ switch(params_format(params)) { ++ case SNDRV_PCM_FORMAT_S16_LE: ++ SSCR0_P(port) |= SSCR0_DataSize(16); ++ break; ++ case SNDRV_PCM_FORMAT_S24_LE: ++ SSCR0_P(port) |=(SSCR0_EDSS | SSCR0_DataSize(8)); ++ /* we must be in network mode (2 slots) for 24 bit stereo */ ++ break; ++ case SNDRV_PCM_FORMAT_S32_LE: ++ SSCR0_P(port) |= (SSCR0_EDSS | SSCR0_DataSize(16)); ++ /* we must be in network mode (2 slots) for 32 bit stereo */ ++ break; ++ } ++ ++#if PXA_SSP_DEBUG ++ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x SSACD %x\n", ++ SSCR0_P(port), SSCR1_P(port), ++ SSTO_P(port), SSPSP_P(port), ++ SSSR_P(port), SSACD_P(port)); ++#endif ++ return 0; ++} ++ ++static int pxa2xx_ssp_trigger(struct snd_pcm_substream *substream, int cmd) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; ++ int ret = 0; ++ int port = cpu_dai->id + 1; ++ ++ switch (cmd) { ++ case SNDRV_PCM_TRIGGER_RESUME: ++ ssp_enable(&ssp[cpu_dai->id]); ++ break; ++ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: ++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ++ SSCR1_P(port) |= SSCR1_TSRE; ++ else ++ SSCR1_P(port) |= SSCR1_RSRE; ++ SSSR_P(port) |= SSSR_P(port); ++ break; ++ case SNDRV_PCM_TRIGGER_START: ++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ++ SSCR1_P(port) |= SSCR1_TSRE; ++ else ++ SSCR1_P(port) |= SSCR1_RSRE; ++ ssp_enable(&ssp[cpu_dai->id]); ++ break; ++ case SNDRV_PCM_TRIGGER_STOP: ++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ++ SSCR1_P(port) &= ~SSCR1_TSRE; ++ else ++ SSCR1_P(port) &= ~SSCR1_RSRE; ++ break; ++ case SNDRV_PCM_TRIGGER_SUSPEND: ++ ssp_disable(&ssp[cpu_dai->id]); ++ break; ++ case SNDRV_PCM_TRIGGER_PAUSE_PUSH: ++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ++ SSCR1_P(port) &= ~SSCR1_TSRE; ++ else ++ SSCR1_P(port) &= ~SSCR1_RSRE; ++ break; ++ ++ default: ++ ret = -EINVAL; ++ } ++#if PXA_SSP_DEBUG ++ printk("trig cmd %d\n", cmd); ++ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x\n", ++ SSCR0_P(port), SSCR1_P(port), ++ SSTO_P(port), SSPSP_P(port), ++ SSSR_P(port)); ++#endif ++ return ret; ++} ++ ++#define PXA2XX_SSP_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ ++ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \ ++ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000) ++ ++#define PXA2XX_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\ ++ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE) ++ ++struct snd_soc_cpu_dai pxa_ssp_dai[] = { ++ { .name = "pxa2xx-ssp1", ++ .id = 0, ++ .type = SND_SOC_DAI_PCM, ++ .suspend = pxa2xx_ssp_suspend, ++ .resume = pxa2xx_ssp_resume, ++ .playback = { ++ .channels_min = 1, ++ .channels_max = 2, ++ .rates = PXA2XX_SSP_RATES, ++ .formats = PXA2XX_SSP_FORMATS,}, ++ .capture = { ++ .channels_min = 1, ++ .channels_max = 2, ++ .rates = PXA2XX_SSP_RATES, ++ .formats = PXA2XX_SSP_FORMATS,}, ++ .ops = { ++ .startup = pxa2xx_ssp_startup, ++ .shutdown = pxa2xx_ssp_shutdown, ++ .trigger = pxa2xx_ssp_trigger, ++ .hw_params = pxa2xx_ssp_hw_params,}, ++ .dai_ops = { ++ .set_sysclk = pxa2xx_ssp_set_dai_sysclk, ++ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv, ++ .set_pll = pxa2xx_ssp_set_dai_pll, ++ .set_fmt = pxa2xx_ssp_set_dai_fmt, ++ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot, ++ .set_tristate = pxa2xx_ssp_set_dai_tristate, ++ }, ++ }, ++ { .name = "pxa2xx-ssp2", ++ .id = 1, ++ .type = SND_SOC_DAI_PCM, ++ .suspend = pxa2xx_ssp_suspend, ++ .resume = pxa2xx_ssp_resume, ++ .playback = { ++ .channels_min = 1, ++ .channels_max = 2, ++ .rates = PXA2XX_SSP_RATES, ++ .formats = PXA2XX_SSP_FORMATS,}, ++ .capture = { ++ .channels_min = 1, ++ .channels_max = 2, ++ .rates = PXA2XX_SSP_RATES, ++ .formats = PXA2XX_SSP_FORMATS,}, ++ .ops = { ++ .startup = pxa2xx_ssp_startup, ++ .shutdown = pxa2xx_ssp_shutdown, ++ .trigger = pxa2xx_ssp_trigger, ++ .hw_params = pxa2xx_ssp_hw_params,}, ++ .dai_ops = { ++ .set_sysclk = pxa2xx_ssp_set_dai_sysclk, ++ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv, ++ .set_pll = pxa2xx_ssp_set_dai_pll, ++ .set_fmt = pxa2xx_ssp_set_dai_fmt, ++ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot, ++ .set_tristate = pxa2xx_ssp_set_dai_tristate, ++ }, ++ }, ++ { .name = "pxa2xx-ssp3", ++ .id = 2, ++ .type = SND_SOC_DAI_PCM, ++ .suspend = pxa2xx_ssp_suspend, ++ .resume = pxa2xx_ssp_resume, ++ .playback = { ++ .channels_min = 1, ++ .channels_max = 2, ++ .rates = PXA2XX_SSP_RATES, ++ .formats = PXA2XX_SSP_FORMATS,}, ++ .capture = { ++ .channels_min = 1, ++ .channels_max = 2, ++ .rates = PXA2XX_SSP_RATES, ++ .formats = PXA2XX_SSP_FORMATS,}, ++ .ops = { ++ .startup = pxa2xx_ssp_startup, ++ .shutdown = pxa2xx_ssp_shutdown, ++ .trigger = pxa2xx_ssp_trigger, ++ .hw_params = pxa2xx_ssp_hw_params,}, ++ .dai_ops = { ++ .set_sysclk = pxa2xx_ssp_set_dai_sysclk, ++ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv, ++ .set_pll = pxa2xx_ssp_set_dai_pll, ++ .set_fmt = pxa2xx_ssp_set_dai_fmt, ++ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot, ++ .set_tristate = pxa2xx_ssp_set_dai_tristate, ++ }, ++ }, ++}; ++EXPORT_SYMBOL_GPL(pxa_ssp_dai); ++ ++/* Module information */ ++MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com"); ++MODULE_DESCRIPTION("pxa2xx SSP/PCM SoC Interface"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.h 2007-10-22 22:27:11.000000000 +0200 +@@ -0,0 +1,42 @@ ++/* ++ * linux/sound/arm/pxa2xx-ssp.h ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#ifndef _PXA2XX_SSP_H ++#define _PXA2XX_SSP_H ++ ++/* pxa2xx DAI SSP ID's */ ++#define PXA2XX_DAI_SSP1 0 ++#define PXA2XX_DAI_SSP2 1 ++#define PXA2XX_DAI_SSP3 2 ++ ++/* SSP clock sources */ ++#define PXA2XX_SSP_CLK_PLL 0 ++#define PXA2XX_SSP_CLK_EXT 1 ++#define PXA2XX_SSP_CLK_NET 2 ++#define PXA2XX_SSP_CLK_AUDIO 3 ++ ++/* SSP audio dividers */ ++#define PXA2XX_SSP_AUDIO_DIV_ACDS 0 ++#define PXA2XX_SSP_AUDIO_DIV_SCDB 1 ++#define PXA2XX_SSP_DIV_SCR 2 ++ ++/* SSP ACDS audio dividers values */ ++#define PXA2XX_SSP_CLK_AUDIO_DIV_1 0 ++#define PXA2XX_SSP_CLK_AUDIO_DIV_2 1 ++#define PXA2XX_SSP_CLK_AUDIO_DIV_4 2 ++#define PXA2XX_SSP_CLK_AUDIO_DIV_8 3 ++#define PXA2XX_SSP_CLK_AUDIO_DIV_16 4 ++#define PXA2XX_SSP_CLK_AUDIO_DIV_32 5 ++ ++/* SSP divider bypass */ ++#define PXA2XX_SSP_CLK_SCDB_4 0 ++#define PXA2XX_SSP_CLK_SCDB_1 1 ++ ++extern struct snd_soc_cpu_dai pxa_ssp_dai[3]; ++ ++#endif +Index: linux-2.6.23/sound/soc/pxa/Kconfig +=================================================================== +--- linux-2.6.23.orig/sound/soc/pxa/Kconfig 2007-10-10 09:38:42.000000000 +0200 ++++ linux-2.6.23/sound/soc/pxa/Kconfig 2007-10-22 22:27:11.000000000 +0200 +@@ -18,6 +18,10 @@ + config SND_PXA2XX_SOC_I2S + tristate + ++config SND_PXA2XX_SOC_SSP ++ tristate ++ select PXA_SSP ++ + config SND_PXA2XX_SOC_CORGI + tristate "SoC Audio support for Sharp Zaurus SL-C7x0" + depends on SND_PXA2XX_SOC && PXA_SHARP_C7xx +Index: linux-2.6.23/sound/soc/pxa/Makefile +=================================================================== +--- linux-2.6.23.orig/sound/soc/pxa/Makefile 2007-10-10 09:38:42.000000000 +0200 ++++ linux-2.6.23/sound/soc/pxa/Makefile 2007-10-22 22:27:11.000000000 +0200 +@@ -2,10 +2,12 @@ + snd-soc-pxa2xx-objs := pxa2xx-pcm.o + snd-soc-pxa2xx-ac97-objs := pxa2xx-ac97.o + snd-soc-pxa2xx-i2s-objs := pxa2xx-i2s.o ++snd-soc-pxa2xx-ssp-objs := pxa2xx-ssp.o + + obj-$(CONFIG_SND_PXA2XX_SOC) += snd-soc-pxa2xx.o + obj-$(CONFIG_SND_PXA2XX_SOC_AC97) += snd-soc-pxa2xx-ac97.o + obj-$(CONFIG_SND_PXA2XX_SOC_I2S) += snd-soc-pxa2xx-i2s.o ++obj-$(CONFIG_SND_PXA2XX_SOC_SSP) += snd-soc-pxa2xx-ssp.o + + # PXA Machine Support + snd-soc-corgi-objs := corgi.o diff --git a/packages/linux/linux-ezx-2.6.24/patches/binutils-buildid-arm.patch b/packages/linux/linux-ezx-2.6.24/patches/binutils-buildid-arm.patch new file mode 100644 index 0000000000..68e35e89e1 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/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-ezx-2.6.24/patches/defconfig-a1200 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a1200 new file mode 100644 index 0000000000..b77950a96e --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a1200 @@ -0,0 +1,1205 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24 +# Sun Jan 27 16:09:08 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA_EZX=y +# CONFIG_PXA_EZX_E680 is not set +# CONFIG_PXA_EZX_A780 is not set +# CONFIG_PXA_EZX_E2 is not set +CONFIG_PXA_EZX_A1200=y +# CONFIG_PXA_EZX_E6 is not set +# CONFIG_EZX_BP is not set +CONFIG_EZX_PCAP=y +CONFIG_EZX_EOC=y +# CONFIG_EZX_EMU is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=y + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIUART_LL is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PXA2XX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +CONFIG_MTD_EZX=y +# CONFIG_MTD_EZX_A780 is not set +# CONFIG_MTD_EZX_A780_ALTERNATE is not set +CONFIG_MTD_EZX_A1200=y +# CONFIG_MTD_EZX_E2 is not set +# CONFIG_MTD_EZX_E6 is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_TOUCHSCREEN_PCAP=y +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +# CONFIG_BACKLIGHT_EZX is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# SPI devices +# + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_SDIO_UART=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +# CONFIG_MMC_SPI is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_LIB=y +# CONFIG_RTC_CLASS is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-a780 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a780 new file mode 100644 index 0000000000..b10c2e908d --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a780 @@ -0,0 +1,1502 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24 +# Sun Jan 27 15:19:17 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA_EZX=y +# CONFIG_PXA_EZX_E680 is not set +CONFIG_PXA_EZX_A780=y +# CONFIG_PXA_EZX_E2 is not set +# CONFIG_PXA_EZX_A1200 is not set +# CONFIG_PXA_EZX_E6 is not set +CONFIG_EZX_BP=y +CONFIG_EZX_PCAP=y +# CONFIG_EZX_EOC is not set +CONFIG_EZX_EMU=y +CONFIG_EZX_EMU_USB=y +# CONFIG_EZX_EMU_UART is not set +# CONFIG_EZX_EMU_NOTHING is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +# CONFIG_NO_HZ is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 root=/dev/mmcblk0p2 rootfstype=ext2 rootdelay=1 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_SCH_FIFO=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIUART_LL is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y + +# +# Wireless +# +CONFIG_CFG80211=m +CONFIG_NL80211=y +CONFIG_WIRELESS_EXT=y +CONFIG_MAC80211=m +CONFIG_MAC80211_RCSIMPLE=y +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUG is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PXA2XX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +CONFIG_MTD_EZX=y +CONFIG_MTD_EZX_A780=y +# CONFIG_MTD_EZX_A780_ALTERNATE is not set +# CONFIG_MTD_EZX_A1200 is not set +# CONFIG_MTD_EZX_E2 is not set +# CONFIG_MTD_EZX_E6 is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_TOUCHSCREEN_PCAP=y +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_TS0710_MUX=y +CONFIG_TS0710_MUX_USB=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +# CONFIG_V4L_USB_DRIVERS is not set +CONFIG_RADIO_ADAPTERS=y +# CONFIG_USB_DSBR is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_EZX=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# SPI devices +# + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_SDIO_UART=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +# CONFIG_MMC_SPI is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_A780=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=m + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=m +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_SECURITY is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_XFS_RT is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +# CONFIG_ROOT_NFS is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +# CONFIG_CRYPTO_WP512 is not set +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +# CONFIG_CRYPTO_ANUBIS is not set +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +# CONFIG_CRYPTO_CAMELLIA is not set +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e2 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e2 new file mode 100644 index 0000000000..8f870b8ff5 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e2 @@ -0,0 +1,1188 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24 +# Sun Jan 27 16:13:35 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA_EZX=y +# CONFIG_PXA_EZX_E680 is not set +# CONFIG_PXA_EZX_A780 is not set +# CONFIG_PXA_EZX_E2 is not set +CONFIG_PXA_EZX_A1200=y +# CONFIG_PXA_EZX_E6 is not set +# CONFIG_EZX_BP is not set +CONFIG_EZX_PCAP=y +CONFIG_EZX_EOC=y +# CONFIG_EZX_EMU is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=y + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIUART_LL is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PXA2XX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +# CONFIG_MTD_EZX is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +# CONFIG_BACKLIGHT_EZX is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# SPI devices +# + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_SDIO_UART=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +# CONFIG_MMC_SPI is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_LIB=y +# CONFIG_RTC_CLASS is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e6 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e6 new file mode 100644 index 0000000000..7e89e529d9 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e6 @@ -0,0 +1,1200 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24 +# Sun Jan 27 16:14:27 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA_EZX=y +# CONFIG_PXA_EZX_E680 is not set +# CONFIG_PXA_EZX_A780 is not set +# CONFIG_PXA_EZX_E2 is not set +# CONFIG_PXA_EZX_A1200 is not set +CONFIG_PXA_EZX_E6=y +# CONFIG_EZX_BP is not set +CONFIG_EZX_PCAP=y +CONFIG_EZX_EOC=y +# CONFIG_EZX_EMU is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=y + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIUART_LL is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PXA2XX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +# CONFIG_MTD_EZX is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_TOUCHSCREEN_PCAP=y +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +# CONFIG_BACKLIGHT_EZX is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# SPI devices +# + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_SDIO_UART=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +# CONFIG_MMC_SPI is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_LIB=y +# CONFIG_RTC_CLASS is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e680 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e680 new file mode 100644 index 0000000000..cb31751393 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e680 @@ -0,0 +1,1211 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24 +# Sun Jan 27 16:15:42 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA_EZX=y +CONFIG_PXA_EZX_E680=y +# CONFIG_PXA_EZX_A780 is not set +# CONFIG_PXA_EZX_E2 is not set +# CONFIG_PXA_EZX_A1200 is not set +# CONFIG_PXA_EZX_E6 is not set +CONFIG_EZX_BP=y +CONFIG_EZX_PCAP=y +# CONFIG_EZX_EOC is not set +CONFIG_EZX_EMU=y +CONFIG_EZX_EMU_USB=y +# CONFIG_EZX_EMU_UART is not set +# CONFIG_EZX_EMU_NOTHING is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=y + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIUART_LL is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PXA2XX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +CONFIG_MTD_EZX=y +CONFIG_MTD_EZX_A780=y +# CONFIG_MTD_EZX_A780_ALTERNATE is not set +# CONFIG_MTD_EZX_A1200 is not set +# CONFIG_MTD_EZX_E2 is not set +# CONFIG_MTD_EZX_E6 is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_TOUCHSCREEN_PCAP=y +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_TS0710_MUX=y +CONFIG_TS0710_MUX_USB=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_EZX=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# SPI devices +# + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_SDIO_UART=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +# CONFIG_MMC_SPI is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_E680=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_LIB=y +# CONFIG_RTC_CLASS is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log b/packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log new file mode 100644 index 0000000000..6b15077676 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log @@ -0,0 +1,299 @@ +<5>Linux version 2.6.21-ezxdev (wyrm@vault) (gcc version 4.1.1) #222 PREEMPT Tue May 8 15:19:34 BRT 2007 +<4>CPU: XScale-PXA270 [69054117] revision 7 (ARMv5TE), cr=0000397f +<4>Machine: Motorola Ezx Platform +<4>Memory policy: ECC disabled, Data cache writeback +<7>On node 0 totalpages: 12288 +<7> DMA zone: 416 pages used for memmap +<7> DMA zone: 0 pages reserved +<7> DMA zone: 11872 pages, LIFO batch:1 +<7> Normal zone: 0 pages used for memmap +<6>Run Mode clock: 195.00MHz (*15) +<6>Turbo Mode clock: 292.50MHz (*1.5, active) +<6>Memory clock: 195.00MHz (/2) +<6>System bus clock: 195.00MHz +<4>CPU0: D VIVT undefined 5 cache +<4>CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets +<4>CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets +<4>Built 1 zonelists. Total pages: 11872 +<5>Kernel command line: console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169.254.1.11:169.254.1.10:169.254.1.10:255.255.255.254:ezx:usb0:off debug mem=32M@0xA0000000 mem=16M@0xAC000000 +<4>PID hash table entries: 256 (order: 8, 1024 bytes) +<4>Console: colour dummy device 80x30 +<4>Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) +<4>Inode-cache hash table entries: 4096 (order: 2, 16384 bytes) +<6>Memory: 32MB 16MB = 48MB total +<5>Memory: 46084KB available (2264K code, 217K data, 84K init) +<7>Calibrating delay loop... 291.63 BogoMIPS (lpj=1458176) +<4>Mount-cache hash table entries: 512 +<6>CPU: Testing write buffer coherency: ok +<6>NET: Registered protocol family 16 +<6>usbcore: registered new interface driver usbfs +<6>usbcore: registered new interface driver hub +<6>usbcore: registered new device driver usb +<6>Time: pxa_timer clocksource has been installed. +<6>NET: Registered protocol family 2 +<4>IP route cache hash table entries: 1024 (order: 0, 4096 bytes) +<4>TCP established hash table entries: 2048 (order: 2, 16384 bytes) +<4>TCP bind hash table entries: 2048 (order: 1, 8192 bytes) +<6>TCP: Hash tables configured (established 2048 bind 2048) +<6>TCP reno registered +<4>bp handshake entered! +<4>ezx-bp: handshake step 2 +<4>BP rdy irq +<4>bp handshake entered! +<5>ezx-bp: handshake passed +<4>ezx-pcap: ssp driver registered +<6>io scheduler noop registered +<6>io scheduler deadline registered (default) +<4>pxa2xx-fb pxa2xx-fb: machine LCCR0 setting contains illegal bits: 00200878 +<4>pxa2xx-fb pxa2xx-fb: machine LCCR3 setting contains illegal bits: 00300008 +<4>Console: switching to colour frame buffer device 60x53 +<6>usbcore: registered new interface driver usb ipc +<6>drivers/char/ts0710_mux_usb.c: USB Host(Bulverde) IPC driver registered. +<6>drivers/char/ts0710_mux_usb.c: 1.0alpha1:USB IPC Driver (TS07.10 lowlevel) +<6>pxa2xx-uart.0: ttyS0 at MMIO 0x40100000 (irq = 22) is a FFUART +<6>pxa2xx-uart.1: ttyS1 at MMIO 0x40200000 (irq = 21) is a BTUART +<6>pxa2xx-uart.2: ttyS2 at MMIO 0x40700000 (irq = 20) is a STUART +<7>ohci_hcd: 2006 August 04 USB 1.1 'Open' Host Controller (OHCI) Driver +<6>pxa27x-ohci pxa27x-ohci: PXA27x OHCI +<6>pxa27x-ohci pxa27x-ohci: new USB bus registered, assigned bus number 1 +<6>pxa27x-ohci pxa27x-ohci: irq 3, io mem 0x4c000000 +<6>usb usb1: configuration #1 chosen from 1 choice +<6>hub 1-0:1.0: USB hub found +<6>hub 1-0:1.0: 3 ports detected +<6>pxa27x_udc: version 08-Feb-2007 +<5>USB cmd disconnect +<5>USB cmd disconnect +<4>ether gadget: using random self ethernet address +<4>ether gadget: using random host ethernet address +<6>usb0: Ethernet Gadget, version: May Day 2005 +<6>usb0: using pxa27x_udc, OUT Bulk-out-2 IN Bulk-in-1 +<6>usb0: MAC 46:86:e0:79:e7:fb +<5>USB cmd connect +<5>USB cmd connect +<6>input: gpio-keys as /class/input/input0 +<6>input: pxa-keyboard as /class/input/input1 +<6>input: pcap-touchscreen as /class/input/input2 +<6>sa1100-rtc sa1100-rtc: rtc core: registered sa1100-rtc as rtc0 +<6>Registered led device: a780:main +<6>Registered led device: a780:aux +<6>Registered led device: a780:vibrator +<6>TCP cubic registered +<6>NET: Registered protocol family 1 +<6>NET: Registered protocol family 17 +<6>XScale iWMMXt coprocessor detected. +<6>sa1100-rtc sa1100-rtc: setting the system clock to 1970-01-01 00:00:16 (16) +<6>mmcblk0: mmc0:bffc SU02G 1985024KiB +<6>udc: USB reset +<6> mmcblk0:<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 2 +<4> p1 p2 p3 < p5 p6 p7 > +<6>udc: USB reset +<3>usb 1-3: device descriptor read/64, error -62 +<6>usb0: full speed config #1: 100 mA, Ethernet Gadget, using CDC Ethernet Subset +<3>usb 1-3: device descriptor read/64, error -62 +<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 3 +<3>usb 1-3: device descriptor read/64, error -62 +<4>IP-Config: Complete: +<4> device=usb0, addr=169.254.1.11, mask=255.255.255.254, gw=169.254.1.10, +<4> host=ezx, domain=, nis-domain=(none), +<4> bootserver=169.254.1.10, rootserver=169.254.1.10, rootpath= +<6>kjournald starting. Commit interval 5 seconds +<4>EXT3-fs warning: maximal mount count reached, running e2fsck is recommended +<6>EXT3 FS on mmcblk0p2, internal journal +<6>EXT3-fs: recovery complete. +<6>EXT3-fs: mounted filesystem with ordered data mode. +<4>VFS: Mounted root (ext3 filesystem). +<6>Freeing init memory: 84K +<3>usb 1-3: device descriptor read/64, error -110 +<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 4 +<3>usb 1-3: device descriptor read/8, error -62 +<4>usb 1-3: config 1 has an invalid interface number: 13 but max is 2 +<4>usb 1-3: config 1 has an invalid interface number: 6 but max is 2 +<4>usb 1-3: config 1 has an invalid interface number: 7 but max is 2 +<4>usb 1-3: config 1 has no interface number 0 +<4>usb 1-3: config 1 has no interface number 1 +<4>usb 1-3: config 1 has no interface number 2 +<6>usb 1-3: configuration #1 chosen from 1 choice +<4>usb_ipc_probe: completed probe! +<6>drivers/char/ts0710_mux_usb.c: usb_ipc_probe: Only two endpoints supported. +<4>usb ipc: probe of 1-3:1.6 failed with error -1 +<6>drivers/char/ts0710_mux_usb.c: usb_ipc_probe: Only two endpoints supported. +<4>usb ipc: probe of 1-3:1.7 failed with error -1 +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 7 bytes. +<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 17 bytes. +<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 7 bytes. +<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. +<4>Read 21 bytes. +<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 17 bytes. +<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 7 bytes. +<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. +<4>Read 21 bytes. +<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 17 bytes. +<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 7 bytes. +<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. +<4>Read 21 bytes. +<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 17 bytes. +<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 7 bytes. +<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. +<4>Read 21 bytes. +<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 17 bytes. +<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 7 bytes. +<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 2009 bytes from ts0710_mux_usb inbuf. +<4>Read 21 bytes. +<4>Reading max 1988 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 17 bytes. +<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 7 bytes. +<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 17 bytes. +<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 11 bytes. +<4>Reading max 2037 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 7 bytes. +<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 17 bytes. +<4>Reading max 2031 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 11 bytes. +<4>Reading max 2037 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 7 bytes. +<4>Reading max 2041 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 11 bytes. +<4>Reading max 2037 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 2016 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1984 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1952 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1920 bytes from ts0710_mux_usb inbuf. +<4>Read 6 bytes. +<4>Reading max 1914 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1882 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1850 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1818 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1786 bytes from ts0710_mux_usb inbuf. +<4>Read 6 bytes. +<4>Reading max 1780 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1748 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1716 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1684 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1652 bytes from ts0710_mux_usb inbuf. +<4>Read 6 bytes. +<4>Reading max 1646 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 2016 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1984 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1952 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1920 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1888 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1856 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1824 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1792 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1760 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1728 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1696 bytes from ts0710_mux_usb inbuf. +<4>Read 16 bytes. +<4>Reading max 1680 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 2016 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1984 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1952 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1920 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1888 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1856 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1824 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1792 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1760 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1728 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 1696 bytes from ts0710_mux_usb inbuf. +<4>Read 13 bytes. +<4>Reading max 1683 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 14 bytes. +<4>Reading max 2034 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>Read 32 bytes. +<4>Reading max 2016 bytes from ts0710_mux_usb inbuf. +<4>Read 2 bytes. +<4>Reading max 2014 bytes from ts0710_mux_usb inbuf. +<4>Reading max 2048 bytes from ts0710_mux_usb inbuf. +<4>nonzero read bulk status received: -104 diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch new file mode 100644 index 0000000000..80849bd261 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch @@ -0,0 +1,20 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:15.000000000 -0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:27.000000000 -0200 +@@ -186,8 +186,15 @@ + }, + }; + ++ ++struct platform_device e6_eoc_device = { ++ .name = "ezx-eoc", ++ .id = -1, ++}; ++ + static struct platform_device *devices[] __initdata = { + &e6_pcap_device, ++ &e6_eoc_device, + }; + + static void __init e6_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch new file mode 100644 index 0000000000..62046802d8 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch @@ -0,0 +1,124 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c +@@ -13,6 +13,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -20,12 +22,102 @@ + #include + #include + #include ++#include + + #include "generic.h" + + extern void ezx_lcd_power(int, struct fb_var_screeninfo *); + extern void ezx_backlight_power(int); + ++#ifdef CONFIG_EZX_PCAP ++extern int ezx_pcap_mmcsd_power(int); ++extern void ezx_pcap_mmcsd_voltage(u_int32_t); ++#else ++#define ezx_pcap_mmcsd_voltage(x) {} ++#define ezx_pcap_mmcsd_power(x) {} ++#endif ++ ++static struct pxamci_platform_data e6_mci_platform_data; ++ ++static u_int8_t mmc_voltage[] = { ++ [ilog2(MMC_VDD_165_195)] = 6, ++ [ilog2(MMC_VDD_20_21)] = 7, ++ [ilog2(MMC_VDD_21_22)] = 8, ++ [ilog2(MMC_VDD_22_23)] = 8, ++ [ilog2(MMC_VDD_23_24)] = 9, ++ [ilog2(MMC_VDD_24_25)] = 9, ++ [ilog2(MMC_VDD_25_26)] = 10, ++ [ilog2(MMC_VDD_26_27)] = 10, ++ [ilog2(MMC_VDD_27_28)] = 11, ++ [ilog2(MMC_VDD_28_29)] = 11, ++ [ilog2(MMC_VDD_29_30)] = 12, ++ [ilog2(MMC_VDD_30_31)] = 12, ++ [ilog2(MMC_VDD_31_32)] = 13, ++ [ilog2(MMC_VDD_32_33)] = 13, ++ [ilog2(MMC_VDD_33_34)] = 14, ++ [ilog2(MMC_VDD_34_35)] = 14, ++ [ilog2(MMC_VDD_35_36)] = 15, ++}; ++ ++static int e6_mci_init(struct device *dev, ++ irqreturn_t (*ezx_detect_int)(int, void *), ++ void *data) ++{ ++ int err; ++ ++ /* Setup GPIO for PXA27x MMC/SD controller */ ++ pxa_gpio_mode(GPIO32_MMCCLK_MD); ++ pxa_gpio_mode(GPIO112_MMCCMD_MD); ++ pxa_gpio_mode(GPIO92_MMCDAT0_MD); ++ pxa_gpio_mode(GPIO109_MMCDAT1_MD); ++ pxa_gpio_mode(GPIO110_MMCDAT2_MD); ++ pxa_gpio_mode(GPIO111_MMCDAT3_MD); ++ ++ ezx_pcap_mmcsd_power(1); ++ ++ e6_mci_platform_data.detect_delay = msecs_to_jiffies(250); ++ ++ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED, ++ "MMC card detect", data); ++ if (err) { ++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request " ++ "MMC card detect IRQ\n"); ++ return -1; ++ } ++ ++ set_irq_type(0x0b, IRQT_BOTHEDGE); ++ ++ return 0; ++} ++ ++static void e6_mci_setpower(struct device *dev, unsigned int vdd) ++{ ++ struct pxamci_platform_data* p_d = dev->platform_data; ++ ++ if (( 1 << vdd) & p_d->ocr_mask) ++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]); ++ ++ ezx_pcap_mmcsd_power(1); ++} ++ ++static void e6_mci_exit(struct device *dev, void *data) ++{ ++ ezx_pcap_mmcsd_power(0); ++ free_irq(0x49, data); ++} ++ ++static struct pxamci_platform_data e6_mci_platform_data = { ++ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22 ++ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25 ++ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28 ++ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31 ++ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34 ++ |MMC_VDD_34_35|MMC_VDD_35_36, ++ .init = e6_mci_init, ++ .setpower = e6_mci_setpower, ++ .exit = e6_mci_exit, ++}; ++ + static struct pxafb_mode_info mode_e6 = { + .pixclock = 192308, + .xres = 240, +@@ -101,6 +193,7 @@ + static void __init e6_init(void) + { + set_pxa_fb_info(&e6_fb_info); ++ pxa_set_mci_info(&e6_mci_platform_data); + + platform_add_devices(devices, ARRAY_SIZE(devices)); + } diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch new file mode 100644 index 0000000000..656f5a33f3 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch @@ -0,0 +1,66 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include "generic.h" + +@@ -48,7 +49,53 @@ + .pxafb_lcd_power = &ezx_lcd_power, + }; + ++/* PCAP */ ++static int e6_pcap_init(void) ++{ ++ /* FIXME */ ++ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */ ++ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */ ++ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */ ++ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */ ++ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */ ++ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */ ++ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */ ++ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */ ++ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c); ++ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */ ++ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */ ++ ++ return 0; ++} ++ ++static struct pcap_platform_data e6_pcap_platform_data = { ++ .port = 1, ++ .cs = GPIO_SPI_CE, ++ .flags = PCAP_CS_AH | PCAP_MCI_SD, ++ .clk = 1, ++ .init = e6_pcap_init, ++}; ++ ++static struct resource e6_pcap_resources[] = { ++ [0] = { ++ .start = IRQ_GPIO1, ++ .end = IRQ_GPIO1, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++struct platform_device e6_pcap_device = { ++ .name = "ezx-pcap", ++ .id = -1, ++ .num_resources = ARRAY_SIZE(e6_pcap_resources), ++ .resource = e6_pcap_resources, ++ .dev = { ++ .platform_data = &e6_pcap_platform_data, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { ++ &e6_pcap_device, + }; + + static void __init e6_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch new file mode 100644 index 0000000000..f79f8663c7 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch @@ -0,0 +1,39 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:27.000000000 -0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:44.000000000 -0200 +@@ -192,9 +192,34 @@ + .id = -1, + }; + ++/* PCAP_TS */ ++struct resource pcap_ts_resources[] = { ++ [0] = { ++ .start = EZX_IRQ_ADCDONE, ++ .end = EZX_IRQ_ADCDONE, ++ .flags = IORESOURCE_IRQ, ++ }, ++ [1] = { ++ .start = EZX_IRQ_TS, ++ .end = EZX_IRQ_TS, ++ .flags = IORESOURCE_IRQ, ++ } ++}; ++ ++struct platform_device pcap_ts_device = { ++ .name = "pcap-ts", ++ .id = -1, ++ .dev = { ++ .parent = &e6_pcap_device.dev, ++ }, ++ .num_resources = ARRAY_SIZE(pcap_ts_resources), ++ .resource = pcap_ts_resources, ++}; ++ + static struct platform_device *devices[] __initdata = { + &e6_pcap_device, + &e6_eoc_device, ++ &pcap_ts_device, + }; + + static void __init e6_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch new file mode 100644 index 0000000000..6302bba8c7 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch @@ -0,0 +1,38 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:32.000000000 +0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:37.000000000 +0200 +@@ -212,8 +212,33 @@ + }, + }; + ++/* EMU */ ++static struct resource e680_emu_resources[] = { ++ [0] = { ++ .start = EZX_IRQ_USB4V, ++ .end = EZX_IRQ_USB4V, ++ .flags = IORESOURCE_IRQ, ++ }, ++ [1] = { ++ .start = EZX_IRQ_USB1V, ++ .end = EZX_IRQ_USB1V, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++struct platform_device e680_emu_device = { ++ .name = "ezx-emu", ++ .id = -1, ++ .dev = { ++ .parent = &e680_pcap_device.dev, ++ }, ++ .num_resources = ARRAY_SIZE(e680_emu_resources), ++ .resource = e680_emu_resources, ++}; ++ + static struct platform_device *devices[] __initdata = { + &e680_pcap_device, ++ &e680_emu_device, + }; + + static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch new file mode 100644 index 0000000000..c313ec1452 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch @@ -0,0 +1,93 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c +@@ -15,6 +15,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -23,11 +24,13 @@ + #include + #include + #include ++#include + + #include "generic.h" + + extern void ezx_lcd_power(int, struct fb_var_screeninfo *); + extern void ezx_backlight_power(int); ++extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *); + + #ifdef CONFIG_EZX_PCAP + extern int ezx_pcap_mmcsd_power(int); +@@ -236,6 +239,58 @@ + .resource = e680_emu_resources, + }; + ++static unsigned char e680_keycode[] = { ++ /* row 0 */ ++ KEY_UP, KEY_RIGHT, KEY_RESERVED, KEY_PHONE, ++ /* row 1 */ ++ KEY_DOWN, KEY_LEFT, KEY_VOLUMEUP, KEY_VOLUMEDOWN, ++ /* row 2 */ ++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_KPENTER, ++}; ++ ++static unsigned char e680_direct_keycode[] = { ++ KEY_CAMERA, ++ KEY_RESERVED, ++ KEY_RESERVED, ++ KEY_HOME, ++ KEY_POWER, ++ KEY_MENU, ++}; ++ ++static int e680_kbd_init(void) ++{ ++ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, VR Key */ ++ pxa_gpio_mode(96 | GPIO_ALT_FN_1_IN); /* KP_DKIN<3>, GAME_A */ ++ pxa_gpio_mode(97 | GPIO_ALT_FN_1_IN); /* KP_DKIN<4>, power key */ ++ pxa_gpio_mode(98 | GPIO_ALT_FN_1_IN); /* KP_DKIN<5>, GAME_B */ ++ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */ ++ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */ ++ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */ ++ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */ ++ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */ ++ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */ ++ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */ ++ pxa_gpio_mode(GPIO_TC_MM_EN); ++ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN); ++ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN); ++ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN); ++ return 0; ++} ++ ++static struct pxakbd_platform_data e680_kbd_platform_data = { ++ .init = &e680_kbd_init, ++ .scan_interval = HZ/40, ++ .matrix = { ++ .keycode = e680_keycode, ++ .cols = 4, ++ .rows = 3, ++ }, ++ .direct = { ++ .keycode = e680_direct_keycode, ++ .num = 6, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { + &e680_pcap_device, + &e680_emu_device, +@@ -256,6 +311,7 @@ + + set_pxa_fb_info(&e680_fb_info); + pxa_set_mci_info(&e680_mci_platform_data); ++ pxa_set_kbd_info(&e680_kbd_platform_data); + + /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ + pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch new file mode 100644 index 0000000000..9de1f0fa8f --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch @@ -0,0 +1,300 @@ + +# +# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher +# + +Index: linux-2.6.24/drivers/leds/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/leds/Kconfig ++++ linux-2.6.24/drivers/leds/Kconfig +@@ -130,6 +130,13 @@ + This option enables support for the LEDs on the + Motorola A780 GSM Phone. + ++config LEDS_E680 ++ tristate "LED Support for the Motorola E680(i) GSM Phone" ++ depends on LEDS_CLASS && PXA_EZX_E680 ++ help ++ This options enables support for the LEDs on the ++ Motorola E680(i) GSM Phone. ++ + config LEDS_TRIGGER_TIMER + tristate "LED Timer Trigger" + depends on LEDS_TRIGGERS +Index: linux-2.6.24/drivers/leds/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/leds/Makefile ++++ linux-2.6.24/drivers/leds/Makefile +@@ -20,6 +20,7 @@ + obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o + obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o + obj-$(CONFIG_LEDS_A780) += leds-a780.o ++obj-$(CONFIG_LEDS_E680) += leds-e680.o + + # LED Triggers + obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o +Index: linux-2.6.24/drivers/leds/leds-e680.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/leds/leds-e680.c +@@ -0,0 +1,235 @@ ++/* ++ * EZX Platform LED Driver for the Motorola E680(i) GSM Phone ++ * ++ * Copyright 2006 Vanille-Media ++ * ++ * Author: Michael Lauer ++ * ++ * Based on the Motorola 2.4 leds-e680.c and leds-corgi.c by Richard Purdie ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++//FIXME move defines to a common header file ++#define IND_CNTL_R_BUL 46 ++#define IND_CNTL_G_BUL 47 ++#define SSP_PCAP_LED_MASK 0x000fffe0 ++#define SSP_PCAP_LED_SHIFT 5 ++#define GPIO_TC_MM_EN 99 ++ ++extern int ezx_pcap_read(u_int8_t, u_int32_t *); ++extern int ezx_pcap_write(u_int8_t, u_int32_t); ++ ++typedef struct { ++ u_int8_t ind_GPIO_red; /*Indicator Red control GPIO 46: 0 active, 1 inactive */ ++ u_int8_t ind_GPIO_green; /*Indicator Green control GPIO 47: 0 inactive, 1 active */ ++ u_int8_t pcap_LEDR_en; /*pcap LEDR_EN bit value: 1 =Red LED(&Green) sink circuit enabled*/ ++ u_int8_t pcap_LEDG_en; /*pcap LEDG_EN bit value:1 =Green(->Blue)LED sink circuit enabled*/ ++ u_int8_t pcap_LEDR_CTRL; /* 4bits Sets the timing for the red(&Green) LED sink circuit*/ ++ u_int8_t pcap_LEDG_CTRL; /* 4bits Sets the timing for the GREEN (->Blue) LED sink circuit*/ ++ u_int8_t pcap_LEDR_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDR*/ ++ u_int8_t pcap_LEDG_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDG*/ ++// u_int8_t pcap_SKIP_on; /*1=The ON timing sequence defined by LEDx_CTRL is executed on every other cycle*/ ++} PCAP2_LED_REGISTER_VALUE; ++ ++const PCAP2_LED_REGISTER_VALUE led_register_value[]= ++{ ++ {0x1,0x0, 0x0,0x0, 0x0,0x0, 0x1,0x0}, /* 0 OFF */ ++ ++ {0x0,0x0, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 1 RED */ ++ {0x1,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 2 GREEN */ ++ {0x0,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 3 ORANGE */ ++ {0x1,0x0, 0x0,0x1, 0x0,0xf, 0x0,0x0}, /* 4 BLUE */ ++ {0x0,0x0, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 5 MAGENTA */ ++ {0x1,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 6 CYAN */ ++ {0x0,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 7 WHITE */ ++}; ++ ++static void e680led_set(struct led_classdev *led_cdev, enum led_brightness value) ++{ ++ unsigned int tempValue; ++ unsigned char gpio_red, gpio_green, ledr_en, ledg_en, ledr_ctrl, ++ ledg_ctrl, ledr_i, ledg_i, skip, t, color; ++ unsigned char t_mask[2] = { 0xc, 0xc }; ++ ++ skip = 0; ++ if (value & 128) { ++ value &= (~128); ++ skip = 1; ++ } ++ ++ /* 7 colors - simple on */ ++ if (value <= 7) ++ color = value; ++ /* 4 colors - 11 timed on */ ++ else if (value <= 51) { ++ value -= 7; ++ color = ((value-1)%4)+1; ++ t = ((value-1)/4)+1; ++ t_mask[0] = t; ++ t_mask[1] = t; ++ } ++ /* 3 colors - 22 change color */ ++ else if (value <= 84) { ++ value -= 51; ++ color = ((value-1)%3)+5; ++ t = ((value-1)/3)+1; ++ t_mask[1] = t; ++ } ++ else if (value <= 117) { ++ value -= 84; ++ color = ((value-1)%3)+5; ++ t = ((value-1)/3)+1; ++ t_mask[0] = t; ++ } ++ /* 3 colors - alternate with blue */ ++ else if (value <= 120) { ++ color = value-113; ++ t_mask[0] = 0xa; ++ t_mask[1] = 0xb; ++ } ++ /* invalid value */ ++ else ++ color = 1; ++ ++ gpio_red = led_register_value[color].ind_GPIO_red; ++ gpio_green = led_register_value[color].ind_GPIO_green; ++ ledr_en = led_register_value[color].pcap_LEDR_en; ++ ledg_en = led_register_value[color].pcap_LEDG_en; ++ ledr_ctrl = led_register_value[color].pcap_LEDR_CTRL & t_mask[0]; ++ ledg_ctrl = led_register_value[color].pcap_LEDG_CTRL & t_mask[1]; ++ ledr_i = led_register_value[color].pcap_LEDR_I; ++ ledg_i = led_register_value[color].pcap_LEDG_I; ++ ++ ezx_pcap_read(PCAP_REG_PERIPH,&tempValue); ++ ++ tempValue &= (~SSP_PCAP_LED_MASK); ++ ++ pxa_gpio_set_value(IND_CNTL_R_BUL, gpio_red); ++ pxa_gpio_set_value(IND_CNTL_G_BUL, gpio_green); ++ ++ /* Write PCAP LED Peripheral Control Register*/ ++ tempValue = ((ledr_en | (ledg_en << 1) | (ledr_ctrl << 2) | ++ (ledg_ctrl << 6) | (ledr_i << 10) | (ledg_i << 12) | ++ (skip << 14)) & 0x7fff) << SSP_PCAP_LED_SHIFT; ++ ++ ezx_pcap_write(PCAP_REG_PERIPH,tempValue); ++} ++ ++static void e680led_keypad_set(struct led_classdev *led_cdev, enum led_brightness value) ++{ ++ /* this is not working yet, as there is something else missing */ ++#if 0 ++ printk( KERN_DEBUG "e680led_keypad_set: %d\n", value ); ++ ++ pxa_gpio_mode(GPIO_TC_MM_EN); ++ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN); ++ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN); ++ ++ udelay( 100 ); ++ ++ if ( value ) { ++ GPCR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN); ++ PGSR3 &= ~GPIO_bit(GPIO_TC_MM_EN); ++ } else { ++ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN); ++ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN); ++ } ++#endif ++} ++ ++static struct led_classdev e680_led = { ++ .name = "e680:led", ++ .default_trigger = "none", ++ .brightness_set = e680led_set, ++}; ++ ++static struct led_classdev e680_keypad = { ++ .name = "e680:keypad", ++ .default_trigger = "none", ++ .brightness_set = e680led_keypad_set, ++}; ++ ++#ifdef CONFIG_PM ++static int e680led_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ led_classdev_suspend(&e680_led); ++ led_classdev_suspend(&e680_keypad); ++ return 0; ++} ++ ++static int e680led_resume(struct platform_device *dev) ++{ ++ led_classdev_resume(&e680_led); ++ led_classdev_resume(&e680_keypad); ++ return 0; ++} ++#endif ++ ++static int e680led_probe(struct platform_device *pdev) ++{ ++ int ret; ++ ++ /* configure GPIOs as output */ ++ pxa_gpio_mode(IND_CNTL_R_BUL | GPIO_OUT); ++ pxa_gpio_mode(IND_CNTL_G_BUL | GPIO_OUT); ++ ++ ret = led_classdev_register(&pdev->dev, &e680_led); ++ if (ret < 0) ++ return ret; ++ ++ ret = led_classdev_register(&pdev->dev, &e680_keypad); ++ if (ret < 0) { ++ led_classdev_unregister(&e680_led); ++ } ++ return ret; ++} ++ ++static int e680led_remove(struct platform_device *pdev) ++{ ++ led_classdev_unregister(&e680_led); ++ led_classdev_unregister(&e680_keypad); ++ return 0; ++} ++ ++static struct platform_driver e680led_driver = { ++ .probe = e680led_probe, ++ .remove = e680led_remove, ++#ifdef CONFIG_PM ++ .suspend = e680led_suspend, ++ .resume = e680led_resume, ++#endif ++ .driver = { ++ .name = "e680-led", ++ }, ++}; ++ ++static int __init e680led_init(void) ++{ ++ return platform_driver_register(&e680led_driver); ++} ++ ++static void __exit e680led_exit(void) ++{ ++ platform_driver_unregister(&e680led_driver); ++} ++ ++module_init(e680led_init); ++module_exit(e680led_exit); ++ ++MODULE_AUTHOR("Michael Lauer "); ++MODULE_DESCRIPTION("Motorola E680 LED driver"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx-e680.c ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c +@@ -337,11 +337,20 @@ + }, + }; + ++static struct platform_device e680led_device = { ++ .name = "e680-led", ++ .id = -1, ++ .dev = { ++ .parent = &e680_pcap_device.dev, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { + &e680_pcap_device, + &e680_emu_device, + &pcap_ts_device, + &e680locksw_device, ++ &e680led_device, + }; + + static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch new file mode 100644 index 0000000000..6bb6687400 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch @@ -0,0 +1,45 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:58:55.000000000 +0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:59:23.000000000 +0200 +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -315,10 +316,32 @@ + .resource = pcap_ts_resources, + }; + ++static struct gpio_keys_button e680locksw_buttons[] = { ++ [0] = { ++ .code = KEY_SLEEP, ++ .gpio = GPIO_LOCK_SCREEN_PIN, ++ .desc = "E680 lockscreen sw", ++ }, ++}; ++ ++static struct gpio_keys_platform_data e680locksw_platform_data = { ++ .buttons = e680locksw_buttons, ++ .nbuttons = 1, ++}; ++ ++static struct platform_device e680locksw_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .dev = { ++ .platform_data = &e680locksw_platform_data, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { + &e680_pcap_device, + &e680_emu_device, + &pcap_ts_device, ++ &e680locksw_device, + }; + + static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch new file mode 100644 index 0000000000..0cea75d2c6 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch @@ -0,0 +1,126 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c +@@ -13,6 +13,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -20,12 +22,104 @@ + #include + #include + #include ++#include + + #include "generic.h" + + extern void ezx_lcd_power(int, struct fb_var_screeninfo *); + extern void ezx_backlight_power(int); + ++#ifdef CONFIG_EZX_PCAP ++extern int ezx_pcap_mmcsd_power(int); ++extern void ezx_pcap_mmcsd_voltage(u_int32_t); ++#else ++#define ezx_pcap_mmcsd_voltage(x) {} ++#define ezx_pcap_mmcsd_power(x) {} ++#endif ++ ++static struct pxamci_platform_data e680_mci_platform_data; ++ ++static u_int8_t mmc_voltage[] = { ++ [ilog2(MMC_VDD_165_195)] = 3, ++ [ilog2(MMC_VDD_20_21)] = 3, ++ [ilog2(MMC_VDD_21_22)] = 3, ++ [ilog2(MMC_VDD_22_23)] = 3, ++ [ilog2(MMC_VDD_23_24)] = 3, ++ [ilog2(MMC_VDD_24_25)] = 3, ++ [ilog2(MMC_VDD_25_26)] = 3, ++ [ilog2(MMC_VDD_26_27)] = 3, ++ [ilog2(MMC_VDD_27_28)] = 3, ++ [ilog2(MMC_VDD_28_29)] = 3, ++ [ilog2(MMC_VDD_29_30)] = 3, ++ [ilog2(MMC_VDD_30_31)] = 3, ++ [ilog2(MMC_VDD_31_32)] = 3, ++ [ilog2(MMC_VDD_32_33)] = 3, ++ [ilog2(MMC_VDD_33_34)] = 3, ++ [ilog2(MMC_VDD_34_35)] = 3, ++ [ilog2(MMC_VDD_35_36)] = 3, ++}; ++ ++static int e680_mci_init(struct device *dev, ++ irqreturn_t (*ezx_detect_int)(int, void *), ++ void *data) ++{ ++ int err; ++ ++ /* Setup GPIO for PXA27x MMC/SD controller */ ++ pxa_gpio_mode(GPIO32_MMCCLK_MD); ++ pxa_gpio_mode(GPIO112_MMCCMD_MD); ++ pxa_gpio_mode(GPIO92_MMCDAT0_MD); ++ pxa_gpio_mode(GPIO109_MMCDAT1_MD); ++ pxa_gpio_mode(GPIO110_MMCDAT2_MD); ++ pxa_gpio_mode(GPIO111_MMCDAT3_MD); ++ ++ ezx_pcap_mmcsd_power(1); ++ ++ e680_mci_platform_data.detect_delay = msecs_to_jiffies(250); ++ ++ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED, ++ "MMC card detect", data); ++ if (err) { ++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request " ++ "MMC card detect IRQ\n"); ++ return -1; ++ } ++ ++ set_irq_type(0x0b, IRQT_BOTHEDGE); ++ ++ return 0; ++} ++ ++ ++static inline int e680_mci_get_ro(struct device *dev) ++{ ++ return (GPLR3 & 0x800); ++} ++ ++static void e680_mci_setpower(struct device *dev, unsigned int vdd) ++{ ++ struct pxamci_platform_data* p_d = dev->platform_data; ++ ++ if (( 1 << vdd) & p_d->ocr_mask) ++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]); ++ ++ ezx_pcap_mmcsd_power(1); ++} ++ ++static void e680_mci_exit(struct device *dev, void *data) ++{ ++ ezx_pcap_mmcsd_power(0); ++ free_irq(0x49, data); ++} ++ ++static struct pxamci_platform_data e680_mci_platform_data = { ++ .ocr_mask = MMC_VDD_27_28, ++ .init = e680_mci_init, ++ .get_ro = e680_mci_get_ro, ++ .setpower = e680_mci_setpower, ++ .exit = e680_mci_exit, ++}; ++ + static struct pxafb_mode_info mode_e680 = { + .pixclock = 150000, + .xres = 240, +@@ -136,6 +230,7 @@ + PSLR = 0x05800f00; + + set_pxa_fb_info(&e680_fb_info); ++ pxa_set_mci_info(&e680_mci_platform_data); + + /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ + pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch new file mode 100644 index 0000000000..a02ccb42c8 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch @@ -0,0 +1,90 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-11-24 20:09:00.000000000 -0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-11-24 20:09:46.000000000 -0200 +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include "generic.h" + +@@ -48,7 +49,77 @@ + .pxafb_lcd_power = &ezx_lcd_power, + }; + ++/* PCAP */ ++static int e680_pcap_init(void) ++{ ++ /* initialize PCAP registers */ ++ /* set SW1 sleep to keep SW1 1.3v in sync mode */ ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0); ++ ++ /* SW1 active in sync mode */ ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0); ++ ++ /* at SW1 -core voltage to 1.30V */ ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0); ++ ++ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */ ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0); ++ ++ /* ++ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 --- ++ * camera for e680 ++ */ ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0); ++ ++ /* set Vc to low power mode when AP sleep */ ++// SSP_PCAP_bit_set( PCAP_BIT_LOWPWR_CTRL_VC_STBY); ++ ++ /* set VAUX2 to low power mode when AP sleep */ ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1); ++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1); ++ ++ return 0; ++} ++ ++static struct pcap_platform_data e680_pcap_platform_data = { ++ .port = 1, ++ .cs = GPIO_SPI_CE, ++ .flags = PCAP_MCI_SD, ++ .clk = 1, ++ .init = e680_pcap_init, ++}; ++ ++static struct resource e680_pcap_resources[] = { ++ [0] = { ++ .start = IRQ_GPIO1, ++ .end = IRQ_GPIO1, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++struct platform_device e680_pcap_device = { ++ .name = "ezx-pcap", ++ .id = -1, ++ .num_resources = ARRAY_SIZE(e680_pcap_resources), ++ .resource = e680_pcap_resources, ++ .dev = { ++ .platform_data = &e680_pcap_platform_data, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { ++ &e680_pcap_device, + }; + + static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch new file mode 100644 index 0000000000..2350b2de82 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch @@ -0,0 +1,39 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:49.000000000 +0200 ++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:58.000000000 +0200 +@@ -291,9 +291,34 @@ + }, + }; + ++/* PCAP_TS */ ++struct resource pcap_ts_resources[] = { ++ [0] = { ++ .start = EZX_IRQ_ADCDONE2, ++ .end = EZX_IRQ_ADCDONE2, ++ .flags = IORESOURCE_IRQ, ++ }, ++ [1] = { ++ .start = EZX_IRQ_TS, ++ .end = EZX_IRQ_TS, ++ .flags = IORESOURCE_IRQ, ++ } ++}; ++ ++struct platform_device pcap_ts_device = { ++ .name = "pcap-ts", ++ .id = -1, ++ .dev = { ++ .parent = &e680_pcap_device.dev, ++ }, ++ .num_resources = ARRAY_SIZE(pcap_ts_resources), ++ .resource = pcap_ts_resources, ++}; ++ + static struct platform_device *devices[] __initdata = { + &e680_pcap_device, + &e680_emu_device, ++ &pcap_ts_device, + }; + + static void __init e680_init(void) diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch new file mode 100644 index 0000000000..4ba0f4cddf --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch @@ -0,0 +1,1302 @@ +Index: linux-2.6.24/sound/soc/codecs/pcap2.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/sound/soc/codecs/pcap2.c +@@ -0,0 +1,796 @@ ++/* ++ * pcap2.c - PCAP2 ASIC Audio driver ++ * ++ * Copyright (C) 2007 Daniel Ribeiro ++ * ++ * 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 "pcap2.h" ++ ++#define AUDIO_NAME "pcap2-codec" ++#define PCAP2_VERSION "0.1" ++ ++extern int ezx_pcap_write(u_int8_t, u_int32_t); ++extern int ezx_pcap_read(u_int8_t, u_int32_t *); ++static struct snd_soc_device *pcap2_codec_socdev; ++ ++/* ++ * Debug ++ */ ++ ++//#define PCAP2_DEBUG ++ ++#ifdef PCAP2_DEBUG ++#define dbg(format, arg...) \ ++ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg) ++#else ++#define dbg(format, arg...) ++#endif ++ ++#define err(format, arg...) \ ++ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg) ++#define info(format, arg...) \ ++ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg) ++#define warn(format, arg...) \ ++ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg) ++ ++#define dump_registers() pcap2_codec_read(NULL, 13); \ ++ pcap2_codec_read(NULL, 12); \ ++ pcap2_codec_read(NULL, 11); \ ++ pcap2_codec_read(NULL, 26); ++ ++ ++ ++ ++/* ++ * ASoC limits register value to 16 bits and pcap uses 32 bit registers ++ * to work around this, we get 16 bits from low, mid or high positions. ++ * ASoC limits register number to 8 bits we use 0x1f for register ++ * number and 0xe0 for register offset. -WM ++ */ ++static int pcap2_codec_write(struct snd_soc_codec *codec, unsigned int reg, ++ unsigned int value) ++{ ++ unsigned int tmp; ++ ++ ezx_pcap_read((reg & 0x1f), &tmp); ++ ++ if (reg & SL) { ++ tmp &= 0xffff0000; ++ tmp |= (value & 0xffff); ++ } ++ else if (reg & SM) { ++ tmp &= 0xff0000ff; ++ tmp |= ((value << 8) & 0x00ffff00); ++ } ++ else if (reg & SH) { ++ tmp &= 0xffff; ++ tmp |= ((value << 16) & 0xffff0000); ++ } ++ else ++ tmp = value; ++ ++ dbg("codec_write reg=%x, rval=%08x, fval=%08x", reg, tmp, value); ++ ezx_pcap_write((reg & 0x1f), tmp); ++ return 0; ++ ++} ++ ++static unsigned int pcap2_codec_read(struct snd_soc_codec *codec, unsigned int reg) ++{ ++ unsigned int tmp, ret; ++ ++ ezx_pcap_read((reg & 0x1f), &tmp); ++ ret = tmp; ++ if (reg & SL) ++ ret = (tmp & 0xffff); ++ else if (reg & SM) ++ ret = ((tmp >> 8) & 0xffff); ++ else if (reg & SH) ++ ret = ((tmp >> 16) & 0xffff); ++ ++ dbg("codec_read reg=%x, rval=%08x, fval=%08x", reg, tmp, ret); ++ return(ret); ++ ++} ++ ++static const char *pcap2_output_select[] = {"2ch", "2->1ch", "2->1ch -3db", "2->1ch -6db"}; ++ ++static const struct soc_enum pcap2_enum[] = { ++SOC_ENUM_SINGLE((PCAP2_OUTPUT_AMP|SH), 3, 4, pcap2_output_select), ++}; ++ ++static const struct snd_kcontrol_new pcap2_input_mixer_controls[] = { ++SOC_DAPM_SINGLE("A3 Switch", (PCAP2_INPUT_AMP|SL), 6, 1, 0), ++SOC_DAPM_SINGLE("A5 Switch", (PCAP2_INPUT_AMP|SL), 8, 1, 0), ++}; ++ ++static const struct snd_kcontrol_new pcap2_output_mixer_controls[] = { ++SOC_DAPM_SINGLE("A1 Switch", (PCAP2_OUTPUT_AMP|SL), 0, 1, 0), ++SOC_DAPM_SINGLE("A2 Switch", (PCAP2_OUTPUT_AMP|SL), 1, 1, 0), ++SOC_DAPM_SINGLE("AR Switch", (PCAP2_OUTPUT_AMP|SL), 5, 1, 0), ++SOC_DAPM_SINGLE("AL Switch", (PCAP2_OUTPUT_AMP|SL), 6, 1, 0), ++}; ++ ++/* pcap2 codec non DAPM controls */ ++static const struct snd_kcontrol_new pcap2_codec_snd_controls[] = { ++SOC_SINGLE("Output gain", (PCAP2_OUTPUT_AMP|SM), 5, 15, 0), ++SOC_SINGLE("Input gain", (PCAP2_INPUT_AMP|SL), 0, 31, 0), ++}; ++ ++static const struct snd_kcontrol_new pcap2_codec_dm_mux_control[] = { ++ SOC_DAPM_ENUM("Output Mode", pcap2_enum[0]), ++}; ++ ++/* add non dapm controls */ ++static int pcap2_codec_add_controls(struct snd_soc_codec *codec) ++{ ++ int err, i; ++ ++ for (i = 0; i < ARRAY_SIZE(pcap2_codec_snd_controls); i++) { ++ if ((err = snd_ctl_add(codec->card, ++ snd_soc_cnew(&pcap2_codec_snd_controls[i],codec, NULL))) < 0) ++ return err; ++ } ++ ++ return 0; ++} ++ ++/* pcap2 codec DAPM controls */ ++static const struct snd_soc_dapm_widget pcap2_codec_dapm_widgets[] = { ++ SND_SOC_DAPM_DAC("ST_DAC", "ST_DAC playback", SND_SOC_NOPM, 0, 0), ++ SND_SOC_DAPM_DAC("CDC_DAC", "CDC_DAC playback", SND_SOC_NOPM, 0, 0), ++ SND_SOC_DAPM_ADC("CDC_ADC", "CDC_DAC capture", SND_SOC_NOPM, 0, 0), ++ SND_SOC_DAPM_PGA("PGA_ST", (PCAP2_OUTPUT_AMP|SL), 9, 0, NULL, 0), ++ SND_SOC_DAPM_PGA("PGA_CDC", (PCAP2_OUTPUT_AMP|SL), 8, 0, NULL, 0), ++ SND_SOC_DAPM_PGA("PGA_R", (PCAP2_OUTPUT_AMP|SL), 11, 0, NULL, 0), ++ SND_SOC_DAPM_PGA("PGA_L", (PCAP2_OUTPUT_AMP|SL), 12, 0, NULL, 0), ++ SND_SOC_DAPM_MUX("Downmixer", SND_SOC_NOPM, 0, 0, pcap2_codec_dm_mux_control), ++ SND_SOC_DAPM_PGA("PGA_A1CTRL", (PCAP2_OUTPUT_AMP|SH), 1, 1, NULL, 0), ++ SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0, &pcap2_output_mixer_controls[0], ARRAY_SIZE(pcap2_output_mixer_controls)), ++ SND_SOC_DAPM_OUTPUT("A1"), /* Earpiece */ ++ SND_SOC_DAPM_OUTPUT("A2"), /* LoudSpeaker */ ++ SND_SOC_DAPM_OUTPUT("AR"), /* headset right */ ++ SND_SOC_DAPM_OUTPUT("AL"), /* headset left */ ++ ++ SND_SOC_DAPM_MICBIAS("BIAS1", (PCAP2_INPUT_AMP|SL), 10, 0), ++ SND_SOC_DAPM_MICBIAS("BIAS2", (PCAP2_INPUT_AMP|SL), 11, 0), ++ SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, &pcap2_input_mixer_controls[0], ARRAY_SIZE(pcap2_input_mixer_controls)), ++ SND_SOC_DAPM_INPUT("A3"), /* Headset Mic */ ++ SND_SOC_DAPM_INPUT("A5"), /* Builtin Mic */ ++}; ++ ++static const char *audio_map[][3] = { ++ { "A1", NULL, "Output Mixer" }, ++ { "A2", NULL, "Output Mixer" }, ++ { "AR", NULL, "Output Mixer" }, ++ { "AL", NULL, "Output Mixer" }, ++ ++ { "Output Mixer", "A1 Switch", "PGA_A1CTRL" }, ++ { "Output Mixer", "A2 Switch", "Downmixer" }, ++ { "Output Mixer", "AR Switch", "PGA_R" }, ++ { "Output Mixer", "AL Switch", "PGA_L" }, ++ ++ { "PGA_A1CTRL", NULL, "Downmixer" }, ++ ++ { "Downmixer", "2->1ch", "PGA_L" }, ++ { "Downmixer", "2->1ch", "PGA_R" }, ++ { "Downmixer", "2->1ch -3db", "PGA_L" }, ++ { "Downmixer", "2->1ch -3db", "PGA_R" }, ++ { "Downmixer", "2->1ch -6db", "PGA_L" }, ++ { "Downmixer", "2->1ch -6db", "PGA_R" }, ++ { "Downmixer", "2ch", "PGA_R" }, ++ ++ { "PGA_R", NULL, "PGA_ST" }, ++ { "PGA_L", NULL, "PGA_ST" }, ++ { "PGA_R", NULL, "PGA_CDC" }, ++ ++ { "PGA_ST", NULL, "ST_DAC" }, ++ { "PGA_CDC", NULL, "CDC_DAC" }, ++ ++ /* input path */ ++ { "BIAS1", NULL, "A3" }, ++ { "BIAS2", NULL, "A5" }, ++ ++ { "Input Mixer", "A3 Switch", "BIAS1" }, ++ { "Input Mixer", "A5 Switch", "BIAS2" }, ++ ++ { "PGA_R", NULL, "Input Mixer" }, ++ ++ { "PGA_CDC", NULL, "PGA_R" }, ++ { "CDC_ADC", NULL, "PGA_CDC" }, ++ ++ /* terminator */ ++ {NULL, NULL, NULL}, ++}; ++ ++static int pcap2_codec_add_widgets(struct snd_soc_codec *codec) ++{ ++ int i; ++ ++ for(i = 0; i < ARRAY_SIZE(pcap2_codec_dapm_widgets); i++) { ++ snd_soc_dapm_new_control(codec, &pcap2_codec_dapm_widgets[i]); ++ } ++ ++ /* set up audio path interconnects */ ++ for(i = 0; audio_map[i][0] != NULL; i++) { ++ snd_soc_dapm_connect_input(codec, audio_map[i][0], ++ audio_map[i][1], audio_map[i][2]); ++ } ++ ++ snd_soc_dapm_new_widgets(codec); ++ return 0; ++} ++ ++static int pcap2_codec_dapm_event(struct snd_soc_codec *codec, int event) ++{ ++ unsigned int input = pcap2_codec_read(codec, PCAP2_INPUT_AMP); ++ ++ input &= ~PCAP2_INPUT_AMP_LOWPWR; ++ ++ switch (event) { ++ case SNDRV_CTL_POWER_D0: ++ case SNDRV_CTL_POWER_D1: ++ case SNDRV_CTL_POWER_D2: ++ case SNDRV_CTL_POWER_D3hot: /* Off, with power */ ++ dbg("dapm: ON\n"); ++ break; ++ case SNDRV_CTL_POWER_D3cold: /* Off, without power */ ++ input |= PCAP2_INPUT_AMP_LOWPWR; ++ dbg("dapm: OFF\n"); ++ break; ++ } ++ codec->dapm_state = event; ++ pcap2_codec_write(codec, PCAP2_INPUT_AMP, input); ++ return 0; ++} ++ ++static int pcap2_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; ++ struct snd_soc_codec *codec = codec_dai->codec; ++ unsigned int tmp; ++ ++ if (codec_dai->id == PCAP2_STEREO_DAI) { ++ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC); ++ ++ tmp &= ~PCAP2_ST_DAC_RATE_MASK; ++ switch(params_rate(params)) { ++ case 8000: ++ break; ++ case 11025: ++ tmp |= PCAP2_ST_DAC_RATE_11025; ++ break; ++ case 12000: ++ tmp |= PCAP2_ST_DAC_RATE_12000; ++ break; ++ case 16000: ++ tmp |= PCAP2_ST_DAC_RATE_16000; ++ break; ++ case 22050: ++ tmp |= PCAP2_ST_DAC_RATE_22050; ++ break; ++ case 24000: ++ tmp |= PCAP2_ST_DAC_RATE_24000; ++ break; ++ case 32000: ++ tmp |= PCAP2_ST_DAC_RATE_32000; ++ break; ++ case 44100: ++ tmp |= PCAP2_ST_DAC_RATE_44100; ++ break; ++ case 48000: ++ tmp |= PCAP2_ST_DAC_RATE_48000; ++ break; ++ default: ++ return -EINVAL; ++ } ++ tmp |= PCAP2_ST_DAC_RESET_DF; ++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); ++ } ++ else { ++ tmp = pcap2_codec_read(codec, PCAP2_CODEC); ++ ++ tmp &= ~PCAP2_CODEC_RATE_MASK; ++ switch(params_rate(params)) { ++ case 8000: ++ break; ++ case 16000: ++ tmp |= PCAP2_CODEC_RATE_16000; ++ break; ++ default: ++ return -EINVAL; ++ } ++ tmp |= PCAP2_CODEC_RESET_DF; ++ pcap2_codec_write(codec, PCAP2_CODEC, tmp); ++ } ++ ++ return 0; ++} ++ ++static int pcap2_hw_free(struct snd_pcm_substream *substream) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; ++ struct snd_soc_codec *codec = codec_dai->codec; ++ struct snd_soc_dapm_widget *w; ++ unsigned int tmp; ++ ++ if (codec_dai->id == PCAP2_STEREO_DAI) { ++ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0); ++ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC); ++ tmp &= ~(PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN); ++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); ++ } ++ else { ++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ++ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0); ++ else ++ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0); ++ list_for_each_entry(w, &codec->dapm_widgets, list) { ++ if ((!strcmp(w->name, "CDC_DAC") || !strcmp(w->name, "CDC_ADC")) && w->connected) ++ goto in_use; ++ } ++ tmp = pcap2_codec_read(codec, PCAP2_CODEC); ++ tmp &= ~(PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN); ++ pcap2_codec_write(codec, PCAP2_CODEC, tmp); ++ } ++in_use: ++ snd_soc_dapm_sync_endpoints(codec); ++ ++ return 0; ++} ++ ++static int pcap2_set_dai_sysclk(struct snd_soc_codec_dai *codec_dai, ++ int clk_id, unsigned int freq, int dir) ++{ ++ struct snd_soc_codec *codec = codec_dai->codec; ++ ++ unsigned int tmp; ++ if (codec_dai->id == PCAP2_STEREO_DAI) { ++ /* ST_DAC */ ++ ++ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC); ++ ++ tmp &= ~PCAP2_ST_DAC_CLKSEL_MASK; ++ switch (clk_id) { ++ case PCAP2_CLK_AP: ++ tmp |= PCAP2_ST_DAC_CLKSEL_AP; ++ break; ++ case PCAP2_CLK_BP: ++ break; ++ default: ++ return -ENODEV; ++ } ++ ++ tmp &= ~PCAP2_ST_DAC_CLK_MASK; ++ switch (freq) { ++ case 13000000: ++ break; ++/* case 15M36: ++ tmp |= PCAP2_ST_DAC_CLK_15M36; ++ break; ++ case 16M8: ++ tmp |= PCAP2_ST_DAC_CLK_16M8; ++ break; ++ case 19M44: ++ tmp |= PCAP2_ST_DAC_CLK_19M44; ++ break; ++*/ case 26000000: ++ tmp |= PCAP2_ST_DAC_CLK_26M; ++ break; ++/* case EXT_MCLK: ++ tmp |= PCAP2_ST_DAC_CLK_MCLK; ++ break; ++ case FSYNC: ++ tmp |= PCAP2_ST_DAC_CLK_FSYNC; ++ break; ++ case BITCLK: ++ tmp |= PCAP2_ST_DAC_CLK_BITCLK; ++ break; ++*/ default: ++ return -EINVAL; ++ } ++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); ++ } ++ else { ++ /* MONO_DAC */ ++ tmp = pcap2_codec_read(codec, PCAP2_CODEC); ++ ++ tmp &= ~PCAP2_CODEC_CLKSEL_MASK; ++ switch (clk_id) { ++ case PCAP2_CLK_AP: ++ tmp |= PCAP2_CODEC_CLKSEL_AP; ++ break; ++ case PCAP2_CLK_BP: ++ break; ++ default: ++ return -ENODEV; ++ } ++ ++ tmp &= ~PCAP2_CODEC_CLK_MASK; ++ switch (freq) { ++ case 13000000: ++ break; ++/* case 15M36: ++ tmp |= PCAP2_CODEC_CLK_15M36; ++ break; ++ case 16M8: ++ tmp |= PCAP2_CODEC_CLK_16M8; ++ break; ++ case 19M44: ++ tmp |= PCAP2_CODEC_CLK_19M44; ++ break; ++*/ case 26000000: ++ tmp |= PCAP2_CODEC_CLK_26M; ++ break; ++ default: ++ return -EINVAL; ++ } ++ pcap2_codec_write(codec, PCAP2_CODEC, tmp); ++ } ++ return 0; ++} ++ ++static int pcap2_set_dai_fmt(struct snd_soc_codec_dai *codec_dai, ++ unsigned int fmt) ++{ ++ struct snd_soc_codec *codec = codec_dai->codec; ++ unsigned int tmp = 0; ++ ++ if (codec_dai->id == PCAP2_STEREO_DAI) { ++ /* ST_DAC */ ++ ++ /* disable CODEC */ ++ pcap2_codec_write(codec, PCAP2_CODEC, 0); ++ ++ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { ++ case SND_SOC_DAIFMT_CBM_CFM: ++ break; ++ case SND_SOC_DAIFMT_CBS_CFS: ++ tmp |= 0x1; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { ++ case SND_SOC_DAIFMT_I2S: ++ tmp |= 0x4000; ++ break; ++/* case SND_SOC_NET: ++ tmp |= 0x2000; ++ break; ++*/ case SND_SOC_DAIFMT_DSP_B: ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ switch (fmt & SND_SOC_DAIFMT_INV_MASK) { ++ case SND_SOC_DAIFMT_IB_IF: ++ break; ++ case SND_SOC_DAIFMT_NB_NF: ++ tmp |= 0x60000; ++ break; ++ case SND_SOC_DAIFMT_IB_NF: ++ tmp |= 0x40000; ++ break; ++ case SND_SOC_DAIFMT_NB_IF: ++ tmp |= 0x20000; ++ break; ++ } ++ /* set dai to AP */ ++ tmp |= 0x1000; ++ ++ /* set BCLK */ ++ tmp |= 0x18000; ++ ++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); ++ } ++ else { ++ /* MONO_DAC */ ++ ++ /* disable ST_DAC */ ++ pcap2_codec_write(codec, PCAP2_ST_DAC, 0); ++ ++ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { ++ case SND_SOC_DAIFMT_CBM_CFM: ++ break; ++ case SND_SOC_DAIFMT_CBS_CFS: ++ tmp |= 0x2; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { ++ case SND_SOC_DAIFMT_DSP_B: ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ switch (fmt & SND_SOC_DAIFMT_INV_MASK) { ++ case SND_SOC_DAIFMT_IB_IF: ++ break; ++ case SND_SOC_DAIFMT_NB_NF: ++ tmp |= 0x600; ++ break; ++ case SND_SOC_DAIFMT_IB_NF: ++ tmp |= 0x400; ++ break; ++ case SND_SOC_DAIFMT_NB_IF: ++ tmp |= 0x200; ++ break; ++ } ++ if (codec_dai->id == PCAP2_MONO_DAI) ++ /* set dai to AP */ ++ tmp |= 0x8000; ++ ++ tmp |= 0x5; /* IHF / OHF */ ++ ++ pcap2_codec_write(codec, PCAP2_CODEC, tmp); ++ } ++ return 0; ++} ++ ++static int pcap2_prepare(struct snd_pcm_substream *substream) ++{ ++ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; ++ struct snd_soc_codec *codec = codec_dai->codec; ++ unsigned int tmp; ++ /* FIXME enable clock only if codec is master */ ++ if (codec_dai->id == PCAP2_STEREO_DAI) { ++ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 1); ++ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0); ++ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0); ++ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC); ++ tmp |= (PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN); ++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp); ++ } ++ else { ++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ++ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 1); ++ else ++ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 1); ++ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0); ++ tmp = pcap2_codec_read(codec, PCAP2_CODEC); ++ tmp |= (PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN); ++ pcap2_codec_write(codec, PCAP2_CODEC, tmp); ++ } ++ snd_soc_dapm_sync_endpoints(codec); ++ mdelay(1); ++#ifdef PCAP2_DEBUG ++ dump_registers(); ++#endif ++ return 0; ++} ++ ++/* ++ * Define codec DAI. ++ */ ++struct snd_soc_codec_dai pcap2_dai[] = { ++{ ++ .name = "PCAP2 MONO", ++ .id = 0, ++ .playback = { ++ .stream_name = "CDC_DAC playback", ++ .channels_min = 1, ++ .channels_max = 1, ++ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000), ++ .formats = SNDRV_PCM_FMTBIT_S16_LE, ++ }, ++ .capture = { ++ .stream_name = "CDC_DAC capture", ++ .channels_min = 1, ++ .channels_max = 1, ++ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000), ++ .formats = SNDRV_PCM_FMTBIT_S16_LE, ++ }, ++ .ops = { ++ .prepare = pcap2_prepare, ++ .hw_params = pcap2_hw_params, ++ .hw_free = pcap2_hw_free, ++ }, ++ .dai_ops = { ++// .digital_mute = pcap2_mute, ++ .set_fmt = pcap2_set_dai_fmt, ++ .set_sysclk = pcap2_set_dai_sysclk, ++ }, ++}, ++{ ++ .name = "PCAP2 STEREO", ++ .id = 1, ++ .playback = { ++ .stream_name = "ST_DAC playback", ++ .channels_min = 1, ++ .channels_max = 2, ++ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | ++ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | ++ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | ++ SNDRV_PCM_RATE_48000), ++ .formats = SNDRV_PCM_FMTBIT_S16_LE, ++ }, ++ .capture = { /* FIXME: PCAP support this?? */ ++ .stream_name = "ST_DAC capture", ++ .channels_min = 1, ++ .channels_max = 1, ++ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | ++ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | ++ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | ++ SNDRV_PCM_RATE_48000), ++ .formats = SNDRV_PCM_FMTBIT_S16_LE, ++ }, ++ .ops = { ++ .prepare = pcap2_prepare, ++ .hw_params = pcap2_hw_params, ++ .hw_free = pcap2_hw_free, ++ }, ++ .dai_ops = { ++// .digital_mute = pcap2_mute, ++ .set_fmt = pcap2_set_dai_fmt, ++ .set_sysclk = pcap2_set_dai_sysclk, ++ }, ++}, ++{ ++ .name = "PCAP2 BP", ++ .id = 2, ++ .playback = { ++ .stream_name = "BP playback", ++ .channels_min = 1, ++ .channels_max = 1, ++ .rates = SNDRV_PCM_RATE_8000, ++ .formats = SNDRV_PCM_FMTBIT_S16_LE, ++ }, ++ .ops = { ++ .prepare = pcap2_prepare, ++ .hw_params = pcap2_hw_params, ++ .hw_free = pcap2_hw_free, ++ }, ++ .dai_ops = { ++// .digital_mute = pcap2_mute, ++ .set_fmt = pcap2_set_dai_fmt, ++ .set_sysclk = pcap2_set_dai_sysclk, ++ }, ++}, ++}; ++EXPORT_SYMBOL_GPL(pcap2_dai); ++ ++static int pcap2_codec_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ struct snd_soc_device *socdev = platform_get_drvdata(pdev); ++ struct snd_soc_codec *codec = socdev->codec; ++ ++ dbg("pcap2_codec_suspend"); ++ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold); ++ return 0; ++} ++ ++static int pcap2_codec_resume(struct platform_device *pdev) ++{ ++ struct snd_soc_device *socdev = platform_get_drvdata(pdev); ++ struct snd_soc_codec *codec = socdev->codec; ++ ++ dbg("pcap2_codec_resume"); ++ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot); ++ pcap2_codec_dapm_event(codec, codec->suspend_dapm_state); ++ return 0; ++} ++ ++/* ++ * initialise the PCAP2 driver ++ * register the mixer and dsp interfaces with the kernel ++ */ ++static int pcap2_codec_init(struct snd_soc_device *socdev) ++{ ++ struct snd_soc_codec *codec = socdev->codec; ++ int ret = 0; ++ ++ dbg("pcap2_codec_init"); ++ codec->name = "PCAP2 Audio"; ++ codec->owner = THIS_MODULE; ++ codec->read = pcap2_codec_read; ++ codec->write = pcap2_codec_write; ++ codec->dapm_event = pcap2_codec_dapm_event; ++ codec->dai = pcap2_dai; ++ codec->num_dai = ARRAY_SIZE(pcap2_dai); ++ ++ /* register pcms */ ++ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); ++ if (ret < 0) { ++ return ret; ++ } ++ /* power on device */ ++ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot); ++ /* set the update bits */ ++ ++ pcap2_codec_add_controls(codec); ++ pcap2_codec_add_widgets(codec); ++ ret = snd_soc_register_card(socdev); ++ if (ret < 0) { ++ snd_soc_free_pcms(socdev); ++ snd_soc_dapm_free(socdev); ++ } ++ ++ return ret; ++} ++ ++static int pcap2_codec_probe(struct platform_device *pdev) ++{ ++ struct snd_soc_device *socdev = platform_get_drvdata(pdev); ++ struct pcap2_codec_setup_data *setup; ++ struct snd_soc_codec *codec; ++ int ret = 0; ++ info("PCAP2 Audio Codec %s", PCAP2_VERSION); ++ ++ setup = socdev->codec_data; ++ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL); ++ if (codec == NULL) ++ return -ENOMEM; ++ ++ socdev->codec = codec; ++ mutex_init(&codec->mutex); ++ INIT_LIST_HEAD(&codec->dapm_widgets); ++ INIT_LIST_HEAD(&codec->dapm_paths); ++ ++ pcap2_codec_socdev = socdev; ++ ++ ret = pcap2_codec_init(socdev); ++ return ret; ++} ++ ++/* power down chip and remove */ ++static int pcap2_codec_remove(struct platform_device *pdev) ++{ ++ struct snd_soc_device *socdev = platform_get_drvdata(pdev); ++ struct snd_soc_codec *codec = socdev->codec; ++ if (codec->control_data) ++ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold); ++ snd_soc_free_pcms(socdev); ++ snd_soc_dapm_free(socdev); ++ ++ kfree(codec); ++ ++ return 0; ++} ++ ++/* codec device ops */ ++struct snd_soc_codec_device soc_codec_dev_pcap2 = { ++ .probe = pcap2_codec_probe, ++ .remove = pcap2_codec_remove, ++ .suspend = pcap2_codec_suspend, ++ .resume = pcap2_codec_resume, ++}; ++ ++EXPORT_SYMBOL_GPL(soc_codec_dev_pcap2); ++ ++MODULE_DESCRIPTION("ASoC PCAP2 codec"); ++MODULE_AUTHOR("Daniel Ribeiro"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.24/sound/soc/codecs/pcap2.h +=================================================================== +--- /dev/null ++++ linux-2.6.24/sound/soc/codecs/pcap2.h +@@ -0,0 +1,81 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#ifndef _PCAP2_H ++#define _PCAP2_H ++ ++/* 16 bit reads/writes on pcap registers (ugly workaround) */ ++#define SL (1 << 5) /* lower 16 bits */ ++#define SM (1 << 6) /* mid 16 bits */ ++#define SH (1 << 7) /* higher 16 bits */ ++ ++/* PCAP2 register space */ ++#define PCAP2_CODEC 0x0b ++#define PCAP2_OUTPUT_AMP 0x0c ++#define PCAP2_ST_DAC 0x0d ++#define PCAP2_INPUT_AMP 0x1a ++ ++#define PCAP2_MONO_DAI 0 ++#define PCAP2_STEREO_DAI 1 ++#define PCAP2_BP_DAI 2 ++ ++#define PCAP2_CLK_BP 0 ++#define PCAP2_CLK_AP 1 ++ ++#define PCAP2_CODEC_EN 0x2000 ++#define PCAP2_CODEC_CLK_EN 0x1000 ++#define PCAP2_CODEC_RESET_DF 0x800 ++#define PCAP2_CODEC_RATE_MASK 0x4000 ++#define PCAP2_CODEC_RATE_8000 0x0 ++#define PCAP2_CODEC_RATE_16000 0x4000 ++#define PCAP2_CODEC_CLKSEL_MASK 0x10000 ++#define PCAP2_CODEC_CLKSEL_AP 0x10000 ++#define PCAP2_CODEC_CLKSEL_BP 0x0 ++#define PCAP2_CODEC_CLK_MASK 0x1c0 ++#define PCAP2_CODEC_CLK_13M 0x0 ++#define PCAP2_CODEC_CLK_15M36 0x40 ++#define PCAP2_CODEC_CLK_16M8 0x80 ++#define PCAP2_CODEC_CLK_19M44 0xc0 ++#define PCAP2_CODEC_CLK_26M 0x100 ++ ++#define PCAP2_ST_DAC_EN 0x80 ++#define PCAP2_ST_DAC_CLK_EN 0x20 ++#define PCAP2_ST_DAC_RESET_DF 0x40 ++#define PCAP2_ST_DAC_RATE_MASK 0xf00 ++#define PCAP2_ST_DAC_RATE_8000 0x0 ++#define PCAP2_ST_DAC_RATE_11025 0x100 ++#define PCAP2_ST_DAC_RATE_12000 0x200 ++#define PCAP2_ST_DAC_RATE_16000 0x300 ++#define PCAP2_ST_DAC_RATE_22050 0x400 ++#define PCAP2_ST_DAC_RATE_24000 0x500 ++#define PCAP2_ST_DAC_RATE_32000 0x600 ++#define PCAP2_ST_DAC_RATE_44100 0x700 ++#define PCAP2_ST_DAC_RATE_48000 0x800 ++#define PCAP2_ST_DAC_CLKSEL_MASK 0x80000 ++#define PCAP2_ST_DAC_CLKSEL_AP 0x80000 ++#define PCAP2_ST_DAC_CLKSEL_BP 0x0 ++#define PCAP2_ST_DAC_CLK_MASK 0x1c ++#define PCAP2_ST_DAC_CLK_13M 0x0 ++#define PCAP2_ST_DAC_CLK_15M36 0x4 ++#define PCAP2_ST_DAC_CLK_16M8 0x8 ++#define PCAP2_ST_DAC_CLK_19M44 0xc ++#define PCAP2_ST_DAC_CLK_26M 0x10 ++#define PCAP2_ST_DAC_CLK_MCLK 0x14 ++#define PCAP2_ST_DAC_CLK_FSYNC 0x18 ++#define PCAP2_ST_DAC_CLK_BITCLK 0x1c ++ ++#define PCAP2_INPUT_AMP_LOWPWR 0x80000 ++#define PCAP2_INPUT_AMP_V2EN2 0x200000 ++ ++#define PCAP2_OUTPUT_AMP_PGAR_EN 0x800 ++#define PCAP2_OUTPUT_AMP_PGAL_EN 0x1000 ++#define PCAP2_OUTPUT_AMP_CDC_SW 0x100 ++#define PCAP2_OUTPUT_AMP_ST_DAC_SW 0x200 ++ ++extern struct snd_soc_codec_dai pcap2_dai[]; ++extern struct snd_soc_codec_device soc_codec_dev_pcap2; ++ ++#endif +Index: linux-2.6.24/sound/soc/pxa/Kconfig +=================================================================== +--- linux-2.6.24.orig/sound/soc/pxa/Kconfig ++++ linux-2.6.24/sound/soc/pxa/Kconfig +@@ -57,3 +57,12 @@ + help + Say Y if you want to add support for SoC audio on Sharp + Zaurus SL-C6000x models (Tosa). ++ ++config SND_PXA2XX_SOC_EZX ++ tristate "SoC Audio support for EZX" ++ depends on SND_PXA2XX_SOC && PXA_EZX ++ select SND_PXA2XX_SOC_SSP ++ select SND_SOC_PCAP2 ++ help ++ Say Y if you want to add support for SoC audio on ++ Motorola EZX Phones (a780/e680). +Index: linux-2.6.24/sound/soc/pxa/ezx.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/sound/soc/pxa/ezx.c +@@ -0,0 +1,349 @@ ++/* ++ * ezx.c - Machine specific code for EZX phones ++ * ++ * Copyright (C) 2007 Daniel Ribeiro ++ * ++ * 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 ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++ ++#include "../codecs/pcap2.h" ++#include "pxa2xx-pcm.h" ++#include "pxa2xx-ssp.h" ++ ++#define GPIO_HW_ATTENUATE_A780 96 ++ ++static struct snd_soc_codec *control_codec; ++ ++static void ezx_ext_control(struct snd_soc_codec *codec) ++{ ++ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_A1))) ++ snd_soc_dapm_set_endpoint(codec, "Headset", 1); ++ else ++ snd_soc_dapm_set_endpoint(codec, "Headset", 0); ++ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_MB2))) ++ snd_soc_dapm_set_endpoint(codec, "External Mic", 1); ++ else ++ snd_soc_dapm_set_endpoint(codec, "External Mic", 0); ++ ++ snd_soc_dapm_sync_endpoints(codec); ++} ++ ++static irqreturn_t jack_irq(int irq, void *data) ++{ ++ ezx_ext_control(control_codec); ++ return IRQ_HANDLED; ++} ++ ++ ++/* ++ * Alsa operations ++ * Only implement the required operations for your platform. ++ * These operations are specific to the machine only. ++ */ ++ ++ /* ++ * Called by ALSA when a PCM substream is opened, private data can be allocated. ++ */ ++static int ezx_machine_startup(struct snd_pcm_substream *substream) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec *codec = rtd->socdev->codec; ++ ++ /* check the jack status at stream startup */ ++ ezx_ext_control(codec); ++ return 0; ++} ++ ++/* ++ * Called by ALSA when the hardware params are set by application. This ++ * function can also be called multiple times and can allocate buffers ++ * (using snd_pcm_lib_* ). It's non-atomic. ++ */ ++static int ezx_machine_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; ++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; ++ int ret; ++ ++ /* set codec DAI configuration */ ++ if (codec_dai->id == PCAP2_STEREO_DAI) ++ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B | ++ SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_CBM_CFM); ++ else ++ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B | ++ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM); ++ if(ret < 0) ++ return ret; ++ ++ /* Turn on clock output on CLK_PIO */ ++ OSCC |= 0x8; ++ ++ /* set clock source */ ++ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_AP, ++ 13000000, SND_SOC_CLOCK_IN); ++ if(ret < 0) ++ return ret; ++ ++ /* set cpu DAI configuration */ ++ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, SND_SOC_DAIFMT_DSP_B | ++ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM); ++ if (ret < 0) ++ return ret; ++ ++ ret = cpu_dai->dai_ops.set_tristate(cpu_dai, 0); ++ if (ret < 0) ++ return ret; ++ ++ ret = cpu_dai->dai_ops.set_sysclk(cpu_dai,PXA2XX_SSP_CLK_EXT, ++ 0, SND_SOC_CLOCK_IN); ++ if (ret < 0) ++ return ret; ++ ++ return 0; ++} ++ ++/* ++ * Free's resources allocated by hw_params, can be called multiple times ++ */ ++static int ezx_machine_hw_free(struct snd_pcm_substream *substream) ++{ ++ OSCC &= ~0x8; /* turn off clock output on CLK_PIO */ ++ ++ return 0; ++} ++ ++static int ezx_machine_prepare(struct snd_pcm_substream *substream) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; ++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; ++ ++ if (codec_dai->id == PCAP2_STEREO_DAI) { ++ /* override pxa2xx-ssp sample size for stereo/network mode */ ++ SSCR0_P(cpu_dai->id+1) &= ~(SSCR0_DSS | SSCR0_EDSS); ++ SSCR0_P(cpu_dai->id+1) |= (SSCR0_EDSS | SSCR0_DataSize(16)); ++ } ++ return 0; ++} ++ ++/* machine Alsa PCM operations */ ++static struct snd_soc_ops ezx_ops = { ++ .startup = ezx_machine_startup, ++ .prepare = ezx_machine_prepare, ++ .hw_free = ezx_machine_hw_free, ++ .hw_params = ezx_machine_hw_params, ++}; ++ ++static int bp_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; ++// struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; ++ int ret = 0; ++ /* set codec DAI configuration */ ++ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B | ++ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM); ++ if(ret < 0) ++ return ret; ++ ++ /* set clock source */ ++ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_BP, ++ 13000000, SND_SOC_CLOCK_IN); ++ ++ return ret; ++} ++ ++ ++ ++/* machine dapm widgets */ ++static const struct snd_soc_dapm_widget ezx_dapm_widgets[] = { ++ SND_SOC_DAPM_HP("Headset", NULL), ++ SND_SOC_DAPM_SPK("Earpiece", NULL), ++ SND_SOC_DAPM_SPK("Loudspeaker", NULL), ++ SND_SOC_DAPM_MIC("Built-in Mic", NULL), ++ SND_SOC_DAPM_MIC("External Mic", NULL), ++}; ++ ++/* machine audio map (connections to the codec pins) */ ++static const char *audio_map[][3] = { ++ { "Headset", NULL, "AR" }, ++ { "Headset", NULL, "AL" }, ++ { "Earpiece", NULL, "A1" }, ++ { "Loudspeaker", NULL, "A2" }, ++ ++ { "Built-in Mic", NULL, "A5" }, ++ { "External Mic", NULL, "A3" }, ++ ++ {NULL, NULL, NULL}, ++}; ++ ++/* ++ * Initialise the machine audio subsystem. ++ */ ++static int ezx_machine_init(struct snd_soc_codec *codec) ++{ ++ int i; ++ /* mark unused codec pins as NC */ ++// snd_soc_dapm_set_endpoint(codec, "FIXME", 0); ++ control_codec = codec; ++ ++ /* Add ezx specific controls */ ++// for (i = 0; i < ARRAY_SIZE(ezx_controls); i++) { ++// if ((err = snd_ctl_add(codec->card, snd_soc_cnew(&ezx_controls[i], codec, NULL))) < 0) ++// return err; ++// } ++ ++ /* Add ezx specific widgets */ ++ for(i = 0; i < ARRAY_SIZE(ezx_dapm_widgets); i++) { ++ snd_soc_dapm_new_control(codec, &ezx_dapm_widgets[i]); ++ } ++ /* Set up ezx specific audio path interconnects */ ++ for(i = 0; audio_map[i][0] != NULL; i++) { ++ snd_soc_dapm_connect_input(codec, audio_map[i][0], audio_map[i][1], audio_map[i][2]); ++ } ++ ++ /* synchronise subsystem */ ++ snd_soc_dapm_sync_endpoints(codec); ++ return 0; ++} ++ ++static struct snd_soc_cpu_dai bp_dai = ++{ ++ .name = "Baseband", ++ .id = 0, ++ .type = SND_SOC_DAI_PCM, ++ .playback = { ++ .channels_min = 1, ++ .channels_max = 1, ++ .rates = SNDRV_PCM_RATE_8000, ++ .formats = SNDRV_PCM_FMTBIT_S16_LE, ++ }, ++ .capture = { ++ .channels_min = 1, ++ .channels_max = 1, ++ .rates = SNDRV_PCM_RATE_8000, ++ .formats = SNDRV_PCM_FMTBIT_S16_LE, ++ }, ++ .ops = { ++// .startup = bp_startup, ++// .shutdown = bp_shutdown, ++ .hw_params = bp_hw_params, ++// .hw_free = bp_hw_free, ++ }, ++}; ++ ++/* template digital audio interface glue - connects codec <--> CPU */ ++static struct snd_soc_dai_link ezx_dai[] = { ++{ ++ .name = "PCAP2 STEREO", ++ .stream_name = "stereo playback", ++ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3], ++ .codec_dai = &pcap2_dai[PCAP2_STEREO_DAI], ++ .init = ezx_machine_init, ++ .ops = &ezx_ops, ++}, ++{ ++ .name = "PCAP2 MONO", ++ .stream_name = "mono playback", ++ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3], ++ .codec_dai = &pcap2_dai[PCAP2_MONO_DAI], ++// .init = ezx_machine_init, /* the stereo call already registered our controls */ ++ .ops = &ezx_ops, ++}, ++{ ++ .name = "PCAP2 BP", ++ .stream_name = "BP Audio", ++ .cpu_dai = &bp_dai, ++ .codec_dai = &pcap2_dai[PCAP2_BP_DAI], ++}, ++}; ++ ++/* template audio machine driver */ ++static struct snd_soc_machine snd_soc_machine_ezx = { ++ .name = "Motorola EZX", ++// .probe ++// .remove ++// .suspend_pre ++// .resume_post ++ .dai_link = ezx_dai, ++ .num_links = ARRAY_SIZE(ezx_dai), ++}; ++ ++/* template audio subsystem */ ++static struct snd_soc_device ezx_snd_devdata = { ++ .machine = &snd_soc_machine_ezx, ++ .platform = &pxa2xx_soc_platform, ++ .codec_dev = &soc_codec_dev_pcap2, ++}; ++ ++static struct platform_device *ezx_snd_device; ++ ++static int __init ezx_init(void) ++{ ++ int ret; ++ ezx_snd_device = platform_device_alloc("soc-audio", -1); ++ if (!ezx_snd_device) ++ return -ENOMEM; ++ ++ platform_set_drvdata(ezx_snd_device, &ezx_snd_devdata); ++ ezx_snd_devdata.dev = &ezx_snd_device->dev; ++ ret = platform_device_add(ezx_snd_device); ++ ++ if (ret) ++ platform_device_put(ezx_snd_device); ++ /* configure gpio for ssp3 */ ++ pxa_gpio_mode(GPIO83_SFRM3_MD); /* SFRM */ ++ pxa_gpio_mode(GPIO81_STXD3_MD); /* TXD */ ++ pxa_gpio_mode(GPIO52_SCLK3_MD); /* SCLK */ ++ pxa_gpio_mode(GPIO89_SRXD3_MD); /* RXD */ ++ ++ /* configure gpio for ssp2 */ ++ pxa_gpio_mode(37 | GPIO_IN); /* SFRM */ ++ pxa_gpio_mode(38 | GPIO_IN); /* TXD */ ++ pxa_gpio_mode(22 | GPIO_IN); /* SCLK */ ++ pxa_gpio_mode(88 | GPIO_IN); /* RXD */ ++ ++ pxa_gpio_mode(GPIO_HW_ATTENUATE_A780 | GPIO_OUT); ++ pxa_gpio_set_value(GPIO_HW_ATTENUATE_A780, 1); ++ ++ /* request jack irq */ ++ request_irq(EZX_IRQ_HEADJACK, &jack_irq, IRQF_DISABLED, "headphone jack", NULL); ++ request_irq(EZX_IRQ_MIC, &jack_irq, IRQF_DISABLED, "mic jack", NULL); ++ ++ return ret; ++} ++ ++static void __exit ezx_exit(void) ++{ ++ free_irq(EZX_IRQ_HEADJACK, NULL); ++ free_irq(EZX_IRQ_MIC, NULL); ++ platform_device_unregister(ezx_snd_device); ++} ++ ++module_init(ezx_init); ++module_exit(ezx_exit); ++ +Index: linux-2.6.24/sound/soc/codecs/Makefile +=================================================================== +--- linux-2.6.24.orig/sound/soc/codecs/Makefile ++++ linux-2.6.24/sound/soc/codecs/Makefile +@@ -4,6 +4,7 @@ + snd-soc-wm8753-objs := wm8753.o + snd-soc-wm9712-objs := wm9712.o + snd-soc-cs4270-objs := cs4270.o ++snd-soc-pcap2-objs := pcap2.o + + obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o + obj-$(CONFIG_SND_SOC_WM8731) += snd-soc-wm8731.o +@@ -11,3 +12,4 @@ + obj-$(CONFIG_SND_SOC_WM8753) += snd-soc-wm8753.o + obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o + obj-$(CONFIG_SND_SOC_CS4270) += snd-soc-cs4270.o ++obj-$(CONFIG_SND_SOC_PCAP2) += snd-soc-pcap2.o +Index: linux-2.6.24/sound/soc/codecs/Kconfig +=================================================================== +--- linux-2.6.24.orig/sound/soc/codecs/Kconfig ++++ linux-2.6.24/sound/soc/codecs/Kconfig +@@ -37,3 +37,6 @@ + bool + depends on SND_SOC_CS4270 + ++config SND_SOC_PCAP2 ++ tristate ++ depends on SND_SOC && EZX_PCAP +Index: linux-2.6.24/sound/soc/pxa/Makefile +=================================================================== +--- linux-2.6.24.orig/sound/soc/pxa/Makefile ++++ linux-2.6.24/sound/soc/pxa/Makefile +@@ -14,9 +14,10 @@ + snd-soc-poodle-objs := poodle.o + snd-soc-tosa-objs := tosa.o + snd-soc-spitz-objs := spitz.o ++snd-soc-ezx-objs := ezx.o + + obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o + obj-$(CONFIG_SND_PXA2XX_SOC_POODLE) += snd-soc-poodle.o + obj-$(CONFIG_SND_PXA2XX_SOC_TOSA) += snd-soc-tosa.o + obj-$(CONFIG_SND_PXA2XX_SOC_SPITZ) += snd-soc-spitz.o +- ++obj-$(CONFIG_SND_PXA2XX_SOC_EZX) += snd-soc-ezx.o diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch new file mode 100644 index 0000000000..a2a707014d --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch @@ -0,0 +1,203 @@ + +# +# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher +# + +Index: linux-2.6.24/drivers/video/backlight/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/video/backlight/Kconfig ++++ linux-2.6.24/drivers/video/backlight/Kconfig +@@ -90,3 +90,12 @@ + help + If you have a Intel LE80578 (Carillo Ranch) say Y to enable the + backlight driver. ++ ++config BACKLIGHT_EZX ++ tristate "Motorola EXZ Backlight Driver (A780/E680/E680i)" ++ depends on BACKLIGHT_CLASS_DEVICE && PXA_EZX ++ default y ++ help ++ If you have a Motorola A780 or E680(i), say y to enable the ++ backlight driver. ++ +Index: linux-2.6.24/drivers/video/backlight/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/video/backlight/Makefile ++++ linux-2.6.24/drivers/video/backlight/Makefile +@@ -9,3 +9,4 @@ + obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o + obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o + obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o ++obj-$(CONFIG_BACKLIGHT_EZX) += ezx_bl.o +Index: linux-2.6.24/drivers/video/backlight/ezx_bl.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/video/backlight/ezx_bl.c +@@ -0,0 +1,142 @@ ++/* ++ * Backlight Driver for Motorola A780 and E680(i) GSM Phones. ++ * ++ * Copyright 2006 Vanille Media ++ * ++ * Author: Michael Lauer ++ * ++ * 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 ++ ++#define EZX_MIN_INTENSITY 0 ++#define EZX_MAX_INTENSITY 50 ++#define EZX_DEFAULT_INTENSITY 30 ++ ++static struct backlight_device *ezx_backlight_device; ++static int last_intensity; ++static int suspended; ++ ++static int ezxbl_send_intensity(struct backlight_device *bd) ++{ ++ int intensity = bd->props.brightness; ++ ++ if (suspended || bd->props.power != FB_BLANK_UNBLANK || ++ bd->props.fb_blank != FB_BLANK_UNBLANK) ++ intensity = 0; ++ ++ if ( !last_intensity && intensity ) { ++ PWM_CTRL0 = 2; /* pre-scaler */ ++ PWM_PWDUTY0 = intensity; /* duty cycle */ ++ PWM_PERVAL0 = 49; /* period */ ++ pxa_gpio_mode(GPIO16_PWM0_MD); /* set GPIO16 as alternate function + output */ ++ pxa_set_cken(CKEN_PWM0, 1); /* clock enable */ ++ } ++ else if ( last_intensity && !intensity ) { ++ PWM_PWDUTY0 = 0; ++ GAFR0_U &= 0xFFFFFFFC; /* ??? */ ++ pxa_set_cken(CKEN_PWM0, 0); /* clock disable */ ++ pxa_gpio_mode(GPIO16_PWM0); /* set GPIO16 as input */ ++ } else if ( last_intensity && intensity ) { ++ PWM_PWDUTY0 = intensity; /* duty cycle */ ++ } ++ last_intensity = intensity; ++ return 0; ++} ++ ++static int ezxbl_get_intensity(struct backlight_device *bd) ++{ ++ return last_intensity; ++} ++ ++static int ezxbl_set_intensity(struct backlight_device *bd) ++{ ++ return ezxbl_send_intensity(ezx_backlight_device); ++} ++ ++#ifdef CONFIG_PM ++static int ezxbl_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ suspended = 1; ++ ezxbl_set_intensity(ezx_backlight_device); ++ return 0; ++} ++ ++static int ezxbl_resume(struct platform_device *pdev) ++{ ++ suspended = 0; ++ ezxbl_set_intensity(ezx_backlight_device); ++ return 0; ++} ++#else ++#define ezxbl_suspend NULL ++#define ezxbl_resume NULL ++#endif ++ ++static struct backlight_ops ezxbl_ops = { ++ .get_brightness = ezxbl_get_intensity, ++ .update_status = ezxbl_set_intensity, ++}; ++ ++static int __init ezxbl_probe(struct platform_device *pdev) ++{ ++ ezx_backlight_device = backlight_device_register ("ezx-bl", ++ &pdev->dev, NULL, &ezxbl_ops); ++ if (IS_ERR (ezx_backlight_device)) ++ return PTR_ERR (ezx_backlight_device); ++ ++ platform_set_drvdata(pdev, ezx_backlight_device); ++ ++ ezx_backlight_device->props.power = FB_BLANK_UNBLANK; ++ ezx_backlight_device->props.max_brightness = EZX_MAX_INTENSITY; ++ ezx_backlight_device->props.brightness = EZX_DEFAULT_INTENSITY; ++ ezxbl_set_intensity(ezx_backlight_device); ++ backlight_update_status(ezx_backlight_device); ++ ++ return 0; ++} ++ ++static int ezxbl_remove(struct platform_device *pdev) ++{ ++ backlight_device_unregister(ezx_backlight_device); ++ return 0; ++} ++ ++static struct platform_driver ezxbl_driver = { ++ .probe = ezxbl_probe, ++ .remove = ezxbl_remove, ++ .suspend = ezxbl_suspend, ++ .resume = ezxbl_resume, ++ .driver = { ++ .name = "ezx-bl", ++ }, ++}; ++ ++static int __init ezxbl_init(void) ++{ ++ return platform_driver_register(&ezxbl_driver); ++} ++ ++static void __exit ezxbl_exit(void) ++{ ++ platform_driver_unregister(&ezxbl_driver); ++} ++ ++module_init(ezxbl_init); ++module_exit(ezxbl_exit); ++ ++MODULE_AUTHOR("Michael Lauer "); ++MODULE_DESCRIPTION("Backlight Driver for Motorola A780|E680(i)"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c ++++ linux-2.6.24/arch/arm/mach-pxa/ezx.c +@@ -66,6 +66,12 @@ + #endif + EXPORT_SYMBOL_GPL(ezx_backlight_power); + ++/* EZX LCD Backlight */ ++static struct platform_device ezxbacklight_device = { ++ .name = "ezx-bl", ++ .id = -1, ++}; ++ + /* OHCI Controller */ + static int ezx_ohci_init(struct device *dev) + { +@@ -107,6 +113,7 @@ + + static struct platform_device *devices[] __initdata = { + &ezxbp_device, ++ &ezxbacklight_device, + }; + + /* PM */ diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch new file mode 100644 index 0000000000..e45cb4bd22 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch @@ -0,0 +1,351 @@ +This patch adds support for the handshake with the BP (baseband processor) +of the Motorola EZX smartphones. + +Signed-off-by: Daniel Ribeiro + +Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c ++++ linux-2.6.24/arch/arm/mach-pxa/ezx.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include "generic.h" + +@@ -86,8 +87,25 @@ + .init = ezx_ohci_init, + }; + ++/* BP */ ++static struct ezxbp_config ezxbp_data = { ++ .gpio_reset = GPIO_BB_RESET, ++ .gpio_wdi = GPIO_BB_WDI, ++ .gpio_wdi2 = GPIO_BB_WDI2, ++ .gpio_rdy = GPIO_BP_RDY, ++ .gpio_mcu_int_sw = GPIO_MCU_INT_SW, ++}; ++ ++static struct platform_device ezxbp_device = { ++ .name = "ezx-bp", ++ .dev = { ++ .platform_data = &ezxbp_data, ++ }, ++ .id = -1, ++}; + + static struct platform_device *devices[] __initdata = { ++ &ezxbp_device, + }; + + static int __init ezx_init(void) +Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig ++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig +@@ -133,6 +133,12 @@ + + endchoice + ++config EZX_BP ++ bool "Baseband Processor control for EZX platform" ++ help ++ This enables control code for the BP (baseband processor) found in ++ Motorola's EZX smartphone platform. ++ + endif + + endmenu +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-bp.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-bp.c +@@ -0,0 +1,261 @@ ++/* ++ * BP handshake code for Motorola EZX phones ++ * ++ * Copyright (c) 2007 Daniel Ribeiro ++ * ++ * Based on Motorola's a780.c Copyright (c) 2003-2005 Motorola ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++/* BP Handshake */ ++#define FIRST_STEP 2 ++#define LAST_STEP 3 ++#define BP_RDY_TIMEOUT 0x000c0000 ++ ++#if 1 ++#define DEBUGP(x, args ...) printk(x, ##args) ++#else ++#define DEBUGP(x, args ...) ++#endif ++ ++extern void usb_send_readurb(void); ++ ++static struct ezxbp_config *bp; ++ ++/* check power down condition */ ++static inline void check_power_off(void) ++{ ++ if (pxa_gpio_get_value(bp->gpio_wdi2) == 0) { ++ DEBUGP("BP request poweroff!\n"); ++ /* ++ * It is correct to power off here, the following line is ++ * commented out because e680 lowers WDI2 when BP is in ++ * flash mode, otherwise WDI2 is used to detect low ++ * battery. You can safely uncomment this line if you are ++ * using this kernel with BP in normal mode. ++ */ ++#if 0 /* some versions of BP firmware doesnt honor this */ ++ pm_power_off(); ++#endif ++ } ++} ++ ++static int step = FIRST_STEP; ++ ++inline int bp_handshake_passed(void) ++{ ++ return (step > LAST_STEP); ++} ++EXPORT_SYMBOL_GPL(bp_handshake_passed); ++ ++static void handshake(void) ++{ ++ /* step 1: check MCU_INT_SW or BP_RDY is low (now it is checked in apboot) */ ++ DEBUGP("bp handshake entered!\n"); ++ if (step == 1) { ++ int timeout = BP_RDY_TIMEOUT; ++ ++ /* config MCU_INT_SW, BP_RDY as input */ ++ pxa_gpio_mode(bp->gpio_mcu_int_sw | GPIO_IN); ++ pxa_gpio_mode(bp->gpio_rdy | GPIO_IN); ++ ++ while (timeout--) { ++ if (pxa_gpio_get_value(bp->gpio_mcu_int_sw) == 0 ++ || pxa_gpio_get_value(bp->gpio_rdy) == 0) { ++ step++; ++ break; ++ } ++ ++ check_power_off(); ++ } ++ DEBUGP("ezx-bp: handshake step 1\n"); ++ } ++ ++ /* step 2: wait BP_RDY is low */ ++ if (step == 2) { ++ if (pxa_gpio_get_value(bp->gpio_rdy) == 0) { ++ /* config MCU_INT_SW as output */ ++ pxa_gpio_mode(bp->gpio_mcu_int_sw | GPIO_OUT); ++ pxa_gpio_set_value(bp->gpio_mcu_int_sw, 0); ++ ++ step++; ++ DEBUGP("ezx-bp: handshake step 2\n"); ++ } ++ } ++ ++ /* step 3: wait BP_RDY is high */ ++ else if (step == 3) { ++ if (pxa_gpio_get_value(bp->gpio_rdy)) { ++ step++; ++ /* FIXME delay_bklight(); */ ++ pxa_gpio_set_value(bp->gpio_mcu_int_sw, 1); ++ printk(KERN_NOTICE "ezx-bp: handshake passed\n"); ++ } ++ } ++} ++ ++irqreturn_t bp_wdi_handler(int irq, void *dev_id) ++{ ++ DEBUGP("BP Lowered WDI line. This is not good :(\n"); ++ /* ++ * this means that BP is not responsive. ++ * we could try to reset BP and then handshake again ++ * but i doubt its possible to bring it up again. ++ */ ++ return IRQ_HANDLED; ++} ++ ++static irqreturn_t bp_rdy_handler(int irq, void *dev_id) ++{ ++// struct bp *bp = dev_id; ++ DEBUGP("BP rdy irq\n"); ++ if (!bp_handshake_passed()) { ++ handshake(); ++ if (bp_handshake_passed()) { ++ /* FIXME: (test) try to not disable irq_wdi2 and drain battery */ ++ disable_irq(IRQ_GPIO(bp->gpio_wdi2)); ++ ++ /* set bp_rdy handle for usb ipc */ ++ set_irq_type(IRQ_GPIO(bp->gpio_rdy), IRQT_FALLING); ++ } ++ } ++#ifdef CONFIG_TS0710_MUX_USB ++ else usb_send_readurb(); ++#endif ++ return IRQ_HANDLED; ++} ++ ++/* BP request for poweroff */ ++static irqreturn_t bp_wdi2_handler(int irq, void *dev_id) ++{ ++ DEBUGP("BP request poweroff!\n"); ++ /* same case as check_power_off() */ ++#ifndef CONFIG_PXA_EZX_E680 ++ pm_power_off(); ++#endif ++ return IRQ_HANDLED; ++} ++ ++static int __init ezxbp_probe(struct platform_device *pdev) ++{ ++ int ret; ++ bp = pdev->dev.platform_data; ++ ++// bp = kzalloc(sizeof(*bp), GFP_KERNEL); ++// if (!bp) ++// return -ENOMEM; ++ ++/* bp->irq_rdy = platform_get_irq(dev, 0); ++ if (bp->irq_rdy < 0) { ++ ret = bp->irq_rdy; ++ goto fail; ++ } ++ ++ bp->irq_wdi2 = platform_get_irq(dev, 1); ++ if (bp->irq_wdi2 < 0) { ++ ret = bp->irq_wdi2; ++ goto fail; ++ } ++ ++ bp->irq_wdi = platform_get_irq(dev, 2); ++ if (bp->irq_wdi < 0) { ++ ret = bp->irq_wdi; ++ goto fail; ++ } ++*/ ++ ++ set_irq_type(IRQ_GPIO(bp->gpio_wdi), IRQT_FALLING); ++ request_irq(IRQ_GPIO(bp->gpio_wdi), bp_wdi_handler, IRQF_DISABLED, ++ "bp wdi", bp); ++ ++ set_irq_type(IRQ_GPIO(bp->gpio_rdy), IRQT_BOTHEDGE); ++ request_irq(IRQ_GPIO(bp->gpio_rdy), bp_rdy_handler, IRQF_DISABLED, ++ "bp rdy", bp); ++ ++ set_irq_type(IRQ_GPIO(bp->gpio_wdi2), IRQT_FALLING); ++ request_irq(IRQ_GPIO(bp->gpio_wdi2), bp_wdi2_handler, IRQF_DISABLED, ++ "bp wdi2", bp); ++ ++ /* turn on BP */ ++ pxa_gpio_mode(bp->gpio_reset|GPIO_OUT); ++ pxa_gpio_set_value(bp->gpio_reset, 1); ++ ++ check_power_off(); ++ handshake(); ++ ++ return 0; ++fail: ++ kfree(bp); ++ return ret; ++} ++ ++static int ezxbp_remove(struct platform_device *dev) ++{ ++// struct bp *bp = platform_get_drvdata(dev); ++ ++ free_irq(IRQ_GPIO(bp->gpio_wdi), bp); ++ free_irq(IRQ_GPIO(bp->gpio_wdi2), bp); ++ free_irq(IRQ_GPIO(bp->gpio_rdy), bp); ++ kfree(bp); ++ ++ return 0; ++} ++ ++static int ezxbp_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ DEBUGP("bp suspend!\n"); ++/* pxa_gpio_set_value(bp->gpio_mcu_int_sw, 0); */ ++ return 0; ++} ++ ++static int ezxbp_resume(struct platform_device *dev) ++{ ++ DEBUGP("bp resume!\n"); ++/* pxa_gpio_set_value(bp->gpio_mcu_int_sw, 1); */ ++ return 0; ++} ++static struct platform_driver ezxbp_driver = { ++ .probe = ezxbp_probe, ++ .remove = ezxbp_remove, ++#warning FIXME: missing suspend/resume support ++ .suspend = ezxbp_suspend, ++ .resume = ezxbp_resume, ++ .driver = { ++ .name = "ezx-bp", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++int __init ezxbp_init(void) ++{ ++ return platform_driver_register(&ezxbp_driver); ++} ++ ++void ezxbp_fini(void) ++{ ++ return platform_driver_unregister(&ezxbp_driver); ++} ++ ++module_init(ezxbp_init); ++module_exit(ezxbp_fini); ++ ++MODULE_DESCRIPTION("Motorola BP Control driver"); ++MODULE_AUTHOR("Daniel Ribeiro "); ++MODULE_LICENSE("GPL"); ++ +Index: linux-2.6.24/arch/arm/mach-pxa/Makefile +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile ++++ linux-2.6.24/arch/arm/mach-pxa/Makefile +@@ -36,6 +36,7 @@ + obj-$(CONFIG_PXA_EZX_E2) += ezx-e2.o + obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o + obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o ++obj-$(CONFIG_EZX_BP) += ezx-bp.o + + # Support for blinky lights + led-y := leds.o +Index: linux-2.6.24/include/asm-arm/arch-pxa/ezx-bp.h +=================================================================== +--- /dev/null ++++ linux-2.6.24/include/asm-arm/arch-pxa/ezx-bp.h +@@ -0,0 +1,8 @@ ++struct ezxbp_config { ++ /* gpios for handshake */ ++ int gpio_reset; ++ int gpio_wdi; ++ int gpio_wdi2; ++ int gpio_rdy; ++ int gpio_mcu_int_sw; ++}; diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch new file mode 100644 index 0000000000..6221a88794 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch @@ -0,0 +1,1042 @@ +This patch adds the core EZX support for the Motorola E680/A780/A1200/E6 +smartphones. + +Signed-off-by: Daniel Ribeiro +Signed-off-by: Harald Welte + +Index: linux-2.6.24/arch/arm/boot/compressed/head-xscale.S +=================================================================== +--- linux-2.6.24.orig/arch/arm/boot/compressed/head-xscale.S ++++ linux-2.6.24/arch/arm/boot/compressed/head-xscale.S +@@ -44,3 +44,6 @@ + str r1, [r0, #0x18] + #endif + ++#ifdef CONFIG_ARCH_EZX ++ mov r7, #MACH_TYPE_EZX ++#endif +Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig ++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig +@@ -68,6 +68,10 @@ + select PXA27x + select IWMMXT + ++config PXA_EZX ++ bool "Motorola EZX Platform" ++ select PXA_SSP ++ + endchoice + + if PXA_SHARPSL +@@ -102,6 +106,35 @@ + + endif + ++if PXA_EZX ++ ++choice ++ prompt "Select target EZX device" ++ ++config PXA_EZX_E680 ++ bool "Motorola E680 GSM Phone" ++ select PXA27x ++ ++config PXA_EZX_A780 ++ bool "Motorola A780 GSM Phone" ++ select PXA27x ++ ++config PXA_EZX_E2 ++ bool "Motorola E2 GSM Phone" ++ select PXA27x ++ ++config PXA_EZX_A1200 ++ bool "Motorola A1200 GSM Phone" ++ select PXA27x ++ ++config PXA_EZX_E6 ++ bool "Motorola E6 GSM Phone" ++ select PXA27x ++ ++endchoice ++ ++endif ++ + endmenu + + config MACH_POODLE +@@ -180,4 +213,5 @@ + tristate + help + Enable support for PXA2xx SSP ports ++ + endif +Index: linux-2.6.24/arch/arm/mach-pxa/Makefile +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile ++++ linux-2.6.24/arch/arm/mach-pxa/Makefile +@@ -30,6 +30,12 @@ + endif + + obj-$(CONFIG_MACH_ARMCORE) += cm-x270.o ++obj-$(CONFIG_PXA_EZX) += ezx.o ++obj-$(CONFIG_PXA_EZX_A780) += ezx-a780.o ++obj-$(CONFIG_PXA_EZX_E680) += ezx-e680.o ++obj-$(CONFIG_PXA_EZX_E2) += ezx-e2.o ++obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o ++obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o + + # Support for blinky lights + led-y := leds.o +Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx.c +@@ -0,0 +1,118 @@ ++/* ++ * ezx.c - Common code for EZX platform. ++ * ++ * Copyright (c) 2005-2007 OpenEZX Team (www.openezx.org) ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "generic.h" ++ ++/* EZX PXA Framebuffer */ ++void ezx_lcd_power(int on, struct fb_var_screeninfo *var) ++{ ++ if (on) { ++ msleep(1); ++ GPSR3 = 0x00100000; ++ msleep(10); ++ GPCR3 = 0x00100000; ++ GPDR3 |= 0x00100000; ++ } else { ++ GPSR3 = 0x00100000; ++ PGSR3 |= 0x00100000; ++ msleep(41); ++ LCCR0 &= ~LCCR0_LDM; /* disable lcd disable done interrupt */ ++ LCCR0 |= LCCR0_DIS; /* normal disable lcd */ ++ msleep(18); ++ } ++} ++EXPORT_SYMBOL_GPL(ezx_lcd_power); ++ ++/* failsafe if we are not using the backlight platform driver */ ++#ifndef CONFIG_BACKLIGHT_EZX ++void ezx_backlight_power(int on) ++{ ++ if (on) { ++ pxa_gpio_mode(GPIO16_PWM0_MD); ++ pxa_set_cken(CKEN_PWM0, 1); ++ PWM_CTRL0 = 0; ++ PWM_PWDUTY0 = 0x3ff; ++ PWM_PERVAL0 = 0x3ff; ++ } else { ++ PWM_CTRL0 = 0; ++ PWM_PWDUTY0 = 0x0; ++ PWM_PERVAL0 = 0x3FF; ++ pxa_set_cken(CKEN_PWM0, 0); ++ } ++} ++#else ++void ezx_backlight_power(int on) {} ++#endif ++EXPORT_SYMBOL_GPL(ezx_backlight_power); ++ ++/* OHCI Controller */ ++static int ezx_ohci_init(struct device *dev) ++{ ++ /* for A780 support (connected with Neptune) */ ++ pxa_gpio_mode(GPIO30_USB_P3_2); /* GPIO30 - USB_P3_2/ICL_TXENB */ ++ pxa_gpio_mode(GPIO31_USB_P3_6); /* GPIO31 - USB_P3_6/ICL_VPOUT */ ++ pxa_gpio_mode(GPIO90_USB_P3_5); /* GPIO90 - USB_P3_5/ICL_VPIN */ ++ pxa_gpio_mode(GPIO91_USB_P3_1); /* GPIO91 - USB_P3_1/ICL_XRXD */ ++ pxa_gpio_mode(GPIO56_USB_P3_4); /* GPIO56 - USB_P3_4/ICL_VMOUT */ ++ pxa_gpio_mode(GPIO113_USB_P3_3);/* GPIO113 - USB_P3_3/ICL_VMIN */ ++ UP3OCR = 0x00000002; ++ ++ UHCHR = UHCHR & ~(UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE); ++ ++ return 0; ++} ++ ++static struct pxaohci_platform_data ezx_ohci_platform_data = { ++ .port_mode = PMM_NPS_MODE, ++ .init = ezx_ohci_init, ++}; ++ ++ ++static struct platform_device *devices[] __initdata = { ++}; ++ ++static int __init ezx_init(void) ++{ ++ CKEN = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC); ++ ++ pxa_gpio_mode(GPIO_ICL_FFRXD_MD); ++ pxa_gpio_mode(GPIO_ICL_FFTXD_MD); ++ pxa_gpio_mode(GPIO_ICL_FFCTS_MD); ++ pxa_gpio_mode(GPIO_ICL_FFRTS_MD); ++ ++ pxa_gpio_mode(GPIO42_BTRXD_MD); ++ pxa_gpio_mode(GPIO43_BTTXD_MD); ++ pxa_gpio_mode(GPIO44_BTCTS_MD); ++ pxa_gpio_mode(GPIO45_BTRTS_MD); ++ ++ /* Standard UART */ ++ pxa_gpio_mode(GPIO46_STRXD_MD); ++ pxa_gpio_mode(GPIO47_STTXD_MD); ++ ++ pxa_set_ohci_info(&ezx_ohci_platform_data); ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++ ++ return 0; ++} ++ ++subsys_initcall(ezx_init); +Index: linux-2.6.24/include/asm-arm/arch-pxa/ezx.h +=================================================================== +--- /dev/null ++++ linux-2.6.24/include/asm-arm/arch-pxa/ezx.h +@@ -0,0 +1,225 @@ ++/* ++ * linux/include/asm-arm/arch-pxa/ezx.h ++ * ++ * Specific macro defines for Motorola Ezx Development Platform ++ * ++ * Author: Zhuang Xiaofan ++ * Created: Nov 25, 2003 ++ * Copyright: Motorola Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* support E680 p3 and ealier PCB */ ++/*#define E680_P3_AND_EARLY*/ ++ ++#define GPIO_is_high(x) (GPLR(x) & GPIO_bit(x)) ++#define set_GPIO(x) (GPSR(x) = GPIO_bit(x)) ++#define clr_GPIO(x) (GPCR(x) = GPIO_bit(x)) ++ ++/* ++ * Flags in memory for sleep use ++ */ ++#define FLAG_ADDR PHYS_OFFSET ++#define RESUME_ADDR (PHYS_OFFSET + 4) ++#define BPSIG_ADDR (PHYS_OFFSET + 8) ++ ++#define USER_OFF_FLAG 0x5a5a5a5a ++#define SLEEP_FLAG 0x6b6b6b6b ++#define OFF_FLAG 0x7c7c7c7c ++#define REFLASH_FLAG 0x0C1D2E3F ++#define PASS_THRU_FLAG 0x12345678 ++ ++#define WDI_FLAG 0xbb00dead ++#define NO_FLAG 0xaa00dead ++ ++/* ++ * GPIO control pin, have to change when hardware lock down ++ */ ++ ++#ifdef E680_P3_AND_EARLY ++ ++/* shakehand with BP's PIN */ ++#define GPIO_BP_RDY 0 /* BP_RDY */ ++#define GPIO_BB_WDI 13 /* BB_WDI */ ++#define GPIO_BB_WDI2 3 /* BB_WDI2 */ ++#define GPIO_BB_RESET 57 /* BB_RESET */ ++#define GPIO_MCU_INT_SW 115 /* MCU_INT_SW */ ++#define GPIO_TC_MM_EN 89 /* TC_MM_EN */ ++ ++/* control PCAP direct PIN */ ++#define GPIO_WDI_AP 4 /* WDI_AP */ ++#define GPIO_SYS_RESTART 55 /* restart PCAP power */ ++#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */ ++ ++/* communicate with PCAP's PIN */ ++#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */ ++#define GPIO_SPI_CLK 23 /* PCAP SPI port clock */ ++#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */ ++#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */ ++#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */ ++ ++/* blue tooth control PIN */ ++#define GPIO_BT_WAKEUP 2 /* AP wake up bluetooth module */ ++#define GPIO_BT_HOSTWAKE 14 /* bluetooth module wake up Ap module */ ++#define GPIO_BT_RESET 56 /* AP reset bluetooth module */ ++ ++/* control LCD high - OFF low -- ON */ ++#define GPIO_LCD_OFF 116 /* control LCD */ ++ ++/* FFUART PIN */ ++#define GPIO_ICL_FFRXD_MD (34 | GPIO_ALT_FN_1_IN) ++#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN) ++#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT) ++#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) ++ ++#elif defined(A780_P1_AND_EARLY) ++ ++/* shakehand with BP's PIN */ ++#define GPIO_BP_RDY 0 /* BP_RDY */ ++#define GPIO_BB_WDI 13 /* BB_WDI */ ++#define GPIO_BB_WDI2 3 /* BB_WDI2 */ ++#define GPIO_BB_RESET 82 /* BB_RESET */ ++#define GPIO_MCU_INT_SW 57 /* MCU_INT_SW */ ++#define GPIO_TC_MM_EN 89 /* TC_MM_EN */ ++ ++/* control PCAP direct PIN */ ++#define GPIO_WDI_AP 4 /* WDI_AP */ ++#define GPIO_SYS_RESTART 55 /* restart PCAP power */ ++#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */ ++ ++/* communicate with PCAP's PIN */ ++#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */ ++#define GPIO_SPI_CLK 29 /* PCAP SPI port clock */ ++#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */ ++#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */ ++#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */ ++ ++/* blue tooth control PIN */ ++#define GPIO_BT_WAKEUP 2 /* AP wake up bluetooth module */ ++#define GPIO_BT_HOSTWAKE 14 /* bluetooth module wake up Ap module */ ++#define GPIO_BT_RESET 56 /* AP reset bluetooth module */ ++ ++/* control LCD high - OFF low -- ON */ ++#define GPIO_LCD_OFF 116 /* control LCD */ ++ ++/* FFUART PIN */ ++#define GPIO_ICL_FFRXD_MD (53 | GPIO_ALT_FN_1_IN) ++#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN) ++#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT) ++#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) ++ ++#else ++ ++/* shakehand with BP's PIN */ ++#define GPIO_BP_RDY 0 /* BP_RDY */ ++#define GPIO_BB_WDI 13 /* BB_WDI */ ++#define GPIO_BB_WDI2 3 /* BB_WDI2 */ ++#define GPIO_BB_RESET 82 /* BB_RESET */ ++#define GPIO_MCU_INT_SW 57 /* MCU_INT_SW */ ++#define GPIO_TC_MM_EN 99 /* TC_MM_EN */ ++ ++/* control PCAP direct PIN */ ++#define GPIO_WDI_AP 4 /* WDI_AP */ ++#define GPIO_SYS_RESTART 55 /* restart PCAP power */ ++/*#define GPIO_AP_STANDBY 28 */ /* make pcap enter standby mode */ ++ ++/* communicate with PCAP's PIN */ ++#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */ ++#define GPIO_SPI_CLK 29 /* PCAP SPI port clock */ ++#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */ ++#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */ ++#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */ ++ ++/* blue tooth control PIN */ ++#define GPIO_BT_WAKEUP 28 /* AP wake up bluetooth module */ ++#define GPIO_BT_HOSTWAKE 14 /* AP wake up bluetooth module */ ++#define GPIO_BT_RESET 48 /* AP reset bluetooth module */ ++ ++/* control LCD high - OFF low -- ON */ ++#define GPIO_LCD_OFF 116 /* control LCD */ ++ ++/* FFUART PIN */ ++#define GPIO_ICL_FFRXD_MD (53 | GPIO_ALT_FN_1_IN) ++#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN) ++#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT) ++#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) ++ ++#endif ++/* ++ * ezx platform, wake up source edge detect bit ++ */ ++#define PEDR_INT_SEC 1 ++ ++#define GPIO_FLIP_PIN 12 ++/*E680 screen lock button*/ ++ ++#define GPIO_LOCK_SCREEN_PIN GPIO_FLIP_PIN ++ ++/* MMC interface */ ++#define GPIO_MMC_DETECT 11 ++#define GPIO_MMC_CLK 32 ++#define GPIO_MMC_DATA0 92 ++#define GPIO_MMC_WP 107 ++#define GPIO_MMC_DATA1 109 ++#define GPIO_MMC_DATA2 110 ++#define GPIO_MMC_DATA3 111 ++#define GPIO_MMC_CMD 112 ++ ++/* interface function */ ++#define GPIO_MMC_CLK_MD (GPIO_MMC_CLK | GPIO_ALT_FN_2_OUT) ++#define GPIO_MMC_DATA0_MD (GPIO_MMC_DATA0 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) ++#define GPIO_MMC_DATA1_MD (GPIO_MMC_DATA1 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) ++#define GPIO_MMC_DATA2_MD (GPIO_MMC_DATA2 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) ++#define GPIO_MMC_DATA3_MD (GPIO_MMC_DATA3 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) ++ ++#define GPIO_MMC_CMD_MD (GPIO_MMC_CMD | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT) ++ ++/* EMU GPIO 119 ---MUX2 120 --- MUX1 */ ++#define GPIO_EMU_MUX1 120 ++#define GPIO_EMU_MUX2 119 ++#define GPIO_SNP_INT_CTL 86 ++#define GPIO_SNP_INT_IN 87 ++ ++ ++/* audio related pins */ ++#define AP_13MHZ_OUTPUT_PIN 9 ++ ++#ifdef CONFIG_ARCH_EZX_E680 ++#define GPIO_VA_SEL_BUL 79 ++#define GPIO_FLT_SEL_BUL 80 /* out filter select pin */ ++#define GPIO_MIDI_RESET 78 /* GPIO used by MIDI chipset */ ++#define GPIO_MIDI_CS 33 ++#define GPIO_MIDI_IRQ 15 ++#define GPIO_MIDI_NPWE 49 ++#define GPIO_MIDI_RDY 18 ++#endif ++ ++#ifdef CONFIG_ARCH_EZX_A780 ++#define GPIO_HW_ATTENUATE_A780 96 /* hw noise attenuation be used or bypassed, for receiver or louderspeaker mode */ ++#endif ++ ++ ++/* bp status pin */ ++#define GPIO_BP_STATE 41 ++ ++/* define usb related pin */ ++#define GPIO34_TXENB 34 ++#define GPIO35_XRXD 35 ++#define GPIO36_VMOUT 36 ++#define GPIO39_VPOUT 39 ++#define GPIO40_VPIN 40 ++#define GPIO53_VMIN 53 ++ ++/* USB client 6 pin defination */ ++#define GPIO34_TXENB_MD (GPIO34_TXENB | GPIO_ALT_FN_1_OUT) ++#define GPIO35_XRXD_MD (GPIO35_XRXD | GPIO_ALT_FN_2_IN) ++#define GPIO36_VMOUT_MD (GPIO36_VMOUT | GPIO_ALT_FN_1_OUT) ++#define GPIO39_VPOUT_MD (GPIO39_VPOUT | GPIO_ALT_FN_1_OUT) ++#define GPIO40_VPIN_MD (GPIO40_VPIN | GPIO_ALT_FN_3_IN) ++#define GPIO53_VMIN_MD (GPIO53_VMIN | GPIO_ALT_FN_2_IN) ++ ++#define GPIO53_FFRXD_MD (53 | GPIO_ALT_FN_1_IN) ++ +Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h ++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h +@@ -859,6 +859,8 @@ + #define UP2OCR_HXOE (1 << 17) /* Host Port 2 Transceiver Output Enable */ + #define UP2OCR_SEOS (1 << 24) /* Single-Ended Output Select */ + ++#define UP3OCR __REG(0x40600024) /* USB Port 3 Output Control register */ ++ + #define UDCCSN(x) __REG2(0x40600100, (x) << 2) + #define UDCCSR0 __REG(0x40600100) /* UDC Control/Status register - Endpoint 0 */ + #define UDCCSR0_SA (1 << 7) /* Setup Active */ +@@ -1262,6 +1264,7 @@ + #define GPIO33_nCS_5 33 /* chip select 5 */ + #define GPIO34_FFRXD 34 /* FFUART receive */ + #define GPIO34_MMCCS0 34 /* MMC Chip Select 0 */ ++#define GPIO34_USB_P2_2 34 /* USB Port2 Pin 2 */ + #define GPIO35_FFCTS 35 /* FFUART Clear to send */ + #define GPIO36_FFDCD 36 /* FFUART Data carrier detect */ + #define GPIO37_FFDSR 37 /* FFUART data set ready */ +@@ -1375,6 +1378,7 @@ + #define GPIO18_RDY_MD (18 | GPIO_ALT_FN_1_IN) + #define GPIO19_DREQ1_MD (19 | GPIO_ALT_FN_1_IN) + #define GPIO20_DREQ0_MD (20 | GPIO_ALT_FN_1_IN) ++#define GPIO22_SCLK2_MD (22 | GPIO_ALT_FN_3_IN) + #define GPIO23_SCLK_MD (23 | GPIO_ALT_FN_2_OUT) + #define GPIO24_SFRM_MD (24 | GPIO_ALT_FN_2_OUT) + #define GPIO25_STXD_MD (25 | GPIO_ALT_FN_2_OUT) +@@ -1385,23 +1389,33 @@ + #define GPIO28_BITCLK_OUT_I2S_MD (28 | GPIO_ALT_FN_1_OUT) + #define GPIO29_SDATA_IN_AC97_MD (29 | GPIO_ALT_FN_1_IN) + #define GPIO29_SDATA_IN_I2S_MD (29 | GPIO_ALT_FN_2_IN) ++#define GPIO29_SCLK_MD (29 | GPIO_ALT_FN_3_IN) + #define GPIO30_SDATA_OUT_AC97_MD (30 | GPIO_ALT_FN_2_OUT) + #define GPIO30_SDATA_OUT_I2S_MD (30 | GPIO_ALT_FN_1_OUT) ++#define GPIO30_USB_P3_2 (30 | GPIO_ALT_FN_3_OUT) + #define GPIO31_SYNC_I2S_MD (31 | GPIO_ALT_FN_1_OUT) + #define GPIO31_SYNC_AC97_MD (31 | GPIO_ALT_FN_2_OUT) ++#define GPIO31_USB_P3_6 (31 | GPIO_ALT_FN_3_OUT) + #define GPIO32_SDATA_IN1_AC97_MD (32 | GPIO_ALT_FN_1_IN) + #define GPIO32_SYSCLK_I2S_MD (32 | GPIO_ALT_FN_1_OUT) + #define GPIO32_MMCCLK_MD ( 32 | GPIO_ALT_FN_2_OUT) + #define GPIO33_nCS_5_MD (33 | GPIO_ALT_FN_2_OUT) + #define GPIO34_FFRXD_MD (34 | GPIO_ALT_FN_1_IN) + #define GPIO34_MMCCS0_MD (34 | GPIO_ALT_FN_2_OUT) ++#define GPIO34_USB_P2_2_MD (34 | GPIO_ALT_FN_1_OUT) + #define GPIO35_FFCTS_MD (35 | GPIO_ALT_FN_1_IN) ++#define GPIO35_USB_P2_1_MD (35 | GPIO_ALT_FN_2_IN) + #define GPIO36_FFDCD_MD (36 | GPIO_ALT_FN_1_IN) ++#define GPIO36_USB_P2_4_MD (36 | GPIO_ALT_FN_1_OUT) + #define GPIO37_FFDSR_MD (37 | GPIO_ALT_FN_1_IN) ++#define GPIO37_SFRM2_MD (37 | GPIO_ALT_FN_2_IN) + #define GPIO38_FFRI_MD (38 | GPIO_ALT_FN_1_IN) ++#define GPIO38_STXD2_MD (38 | GPIO_ALT_FN_2_OUT) + #define GPIO39_MMCCS1_MD (39 | GPIO_ALT_FN_1_OUT) + #define GPIO39_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT) ++#define GPIO39_USB_P2_6_MD (39 | GPIO_ALT_FN_1_OUT) + #define GPIO40_FFDTR_MD (40 | GPIO_ALT_FN_2_OUT) ++#define GPIO40_USB_P2_5_MD (40 | GPIO_ALT_FN_3_IN) + #define GPIO41_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) + #define GPIO42_BTRXD_MD (42 | GPIO_ALT_FN_1_IN) + #define GPIO42_HWRXD_MD (42 | GPIO_ALT_FN_3_IN) +@@ -1426,13 +1440,17 @@ + #define GPIO51_HWRTS_MD (51 | GPIO_ALT_FN_1_OUT) + #define GPIO51_nPIOW_MD (51 | GPIO_ALT_FN_2_OUT) + #define GPIO52_nPCE_1_MD (52 | GPIO_ALT_FN_2_OUT) ++#define GPIO52_SCLK3_MD (52 | GPIO_ALT_FN_2_OUT) + #define GPIO53_nPCE_2_MD (53 | GPIO_ALT_FN_2_OUT) + #define GPIO53_MMCCLK_MD (53 | GPIO_ALT_FN_1_OUT) ++#define GPIO53_FFRXD_MD (53 | GPIO_ALT_FN_1_IN) ++#define GPIO53_USB_P2_3_MD (53 | GPIO_ALT_FN_2_IN) + #define GPIO54_MMCCLK_MD (54 | GPIO_ALT_FN_1_OUT) + #define GPIO54_nPCE_2_MD (54 | GPIO_ALT_FN_2_OUT) + #define GPIO54_pSKTSEL_MD (54 | GPIO_ALT_FN_2_OUT) + #define GPIO55_nPREG_MD (55 | GPIO_ALT_FN_2_OUT) + #define GPIO56_nPWAIT_MD (56 | GPIO_ALT_FN_1_IN) ++#define GPIO56_USB_P3_4 (56 | GPIO_ALT_FN_1_OUT) + #define GPIO57_nIOIS16_MD (57 | GPIO_ALT_FN_1_IN) + #define GPIO58_LDD_0_MD (58 | GPIO_ALT_FN_2_OUT) + #define GPIO59_LDD_1_MD (59 | GPIO_ALT_FN_2_OUT) +@@ -1468,13 +1486,19 @@ + #define GPIO80_nCS_4_MD (80 | GPIO_ALT_FN_2_OUT) + #define GPIO81_NSSP_CLK_OUT (81 | GPIO_ALT_FN_1_OUT) + #define GPIO81_NSSP_CLK_IN (81 | GPIO_ALT_FN_1_IN) ++#define GPIO81_STXD3_MD (81 | GPIO_ALT_FN_1_OUT) + #define GPIO82_NSSP_FRM_OUT (82 | GPIO_ALT_FN_1_OUT) + #define GPIO82_NSSP_FRM_IN (82 | GPIO_ALT_FN_1_IN) + #define GPIO83_NSSP_TX (83 | GPIO_ALT_FN_1_OUT) + #define GPIO83_NSSP_RX (83 | GPIO_ALT_FN_2_IN) ++#define GPIO83_SFRM3_MD (83 | GPIO_ALT_FN_1_IN) + #define GPIO84_NSSP_TX (84 | GPIO_ALT_FN_1_OUT) + #define GPIO84_NSSP_RX (84 | GPIO_ALT_FN_2_IN) + #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT) ++#define GPIO88_SRXD2_MD (88 | GPIO_ALT_FN_2_IN) ++#define GPIO89_SRXD3_MD (89 | GPIO_ALT_FN_1_IN) ++#define GPIO90_USB_P3_5 (90 | GPIO_ALT_FN_2_IN) ++#define GPIO91_USB_P3_1 (91 | GPIO_ALT_FN_2_IN) + #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT) + #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT) + #define GPIO104_pSKTSEL_MD (104 | GPIO_ALT_FN_1_OUT) +@@ -1486,6 +1510,7 @@ + #define GPIO112_MMCCMD_MD (112 | GPIO_ALT_FN_1_OUT) + #define GPIO113_I2S_SYSCLK_MD (113 | GPIO_ALT_FN_1_OUT) + #define GPIO113_AC97_RESET_N_MD (113 | GPIO_ALT_FN_2_OUT) ++#define GPIO113_USB_P3_3 (113 | GPIO_ALT_FN_3_IN) + #define GPIO117_I2CSCL_MD (117 | GPIO_ALT_FN_1_IN) + #define GPIO118_I2CSDA_MD (118 | GPIO_ALT_FN_1_IN) + +@@ -1501,6 +1526,7 @@ + #define PFER __REG(0x40F00014) /* Power Manager GPIO Falling-Edge Detect Enable Register */ + #define PEDR __REG(0x40F00018) /* Power Manager GPIO Edge Detect Status Register */ + #define PCFR __REG(0x40F0001C) /* Power Manager General Configuration Register */ ++#define PGSR(x) (__REG(0x40F00020 + ((unsigned long)(x)/32*4))) + #define PGSR0 __REG(0x40F00020) /* Power Manager GPIO Sleep State Register for GP[31-0] */ + #define PGSR1 __REG(0x40F00024) /* Power Manager GPIO Sleep State Register for GP[63-32] */ + #define PGSR2 __REG(0x40F00028) /* Power Manager GPIO Sleep State Register for GP[84-64] */ +Index: linux-2.6.24/arch/arm/boot/compressed/head.S +=================================================================== +--- linux-2.6.24.orig/arch/arm/boot/compressed/head.S ++++ linux-2.6.24/arch/arm/boot/compressed/head.S +@@ -117,6 +117,9 @@ + mov r0, r0 + .endr + ++ mov r1, #0x300 @ mach_id 0x363 is official EZX ++ orr r1, r1, #0x63 @ bootloader JUMP doesn't set r1 ++ + b 1f + .word 0x016f2818 @ Magic numbers to help the loader + .word start @ absolute load/run zImage address +Index: linux-2.6.24/include/asm-arm/arch-pxa/uncompress.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/arch-pxa/uncompress.h ++++ linux-2.6.24/include/asm-arm/arch-pxa/uncompress.h +@@ -14,14 +14,14 @@ + #define STUART ((volatile unsigned long *)0x40700000) + #define HWUART ((volatile unsigned long *)0x41600000) + +-#define UART FFUART ++#define UART STUART + + + static inline void putc(char c) + { +- while (!(UART[5] & 0x20)) ++/* while (!(UART[5] & 0x40)) + barrier(); +- UART[0] = c; ++ UART[0] = c;*/ + } + + /* +Index: linux-2.6.24/arch/arm/mm/init.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mm/init.c ++++ linux-2.6.24/arch/arm/mm/init.c +@@ -240,6 +240,10 @@ + */ + reserve_bootmem_node(pgdat, boot_pfn << PAGE_SHIFT, + boot_pages << PAGE_SHIFT); ++#ifdef CONFIG_PXA_EZX ++ /* reserve the first page memory for exiting sleep and user off */ ++ reserve_bootmem_node(pgdat, PHYS_OFFSET, PAGE_SIZE); ++#endif + + #ifdef CONFIG_BLK_DEV_INITRD + /* +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c +@@ -0,0 +1,88 @@ ++/* ++ * ezx-a780.c - Code specific to A780 GSM Phone. ++ * ++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "generic.h" ++ ++extern void ezx_lcd_power(int, struct fb_var_screeninfo *); ++extern void ezx_backlight_power(int); ++ ++static struct pxafb_mode_info mode_a780 = { ++ .pixclock = 150000, ++ .xres = 240, ++ .yres = 320, ++ .bpp = 16, ++ .hsync_len = 10, ++ .left_margin = 20, ++ .right_margin = 10, ++ .vsync_len = 2, ++ .upper_margin = 3, ++ .lower_margin = 2, ++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, ++}; ++ ++static struct pxafb_mach_info a780_fb_info = { ++ .modes = &mode_a780, ++ .num_modes = 1, ++ .lccr0 = 0x002008F8, ++ .lccr3 = 0x0430FF09, ++ .pxafb_backlight_power = &ezx_backlight_power, ++ .pxafb_lcd_power = &ezx_lcd_power, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++}; ++ ++static void __init a780_init(void) ++{ ++ /* setup sleep mode values */ ++ PWER = 0xc0007803; /* disable usb, GPIO15 NC */ ++ PFER = 0x00007803; ++ PRER = 0x00001802; ++ PGSR0 = 0x00000010; ++ PGSR1 = 0x02800000; ++ PGSR2 = 0x00040000; ++ PGSR3 = 0x00000008; ++ PCFR = PCFR_DC_EN | PCFR_FS | PCFR_FP | PCFR_OPDE; ++ PSLR = 0x05800f00; ++ ++ set_pxa_fb_info(&a780_fb_info); ++ ++ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ ++ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); ++ clr_GPIO(GPIO_EMU_MUX1); ++ pxa_gpio_mode(GPIO_EMU_MUX2|GPIO_OUT); ++ clr_GPIO(GPIO_EMU_MUX2); ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++} ++ ++MACHINE_START(EZX, "Motorola Ezx Platform") ++ /* Maintainer: OpenEZX Team (www.openezx.org) */ ++ .phys_io = 0x40000000, ++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, ++ .boot_params = 0xa0000100, ++ .map_io = pxa_map_io, ++ .init_irq = pxa27x_init_irq, ++ .timer = &pxa_timer, ++ .init_machine = a780_init, ++MACHINE_END +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e2.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-e2.c +@@ -0,0 +1,70 @@ ++/* ++ * ezx-e2.c - Code specific to E2 GSM Phone. ++ * ++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "generic.h" ++ ++extern void ezx_lcd_power(int, struct fb_var_screeninfo *); ++extern void ezx_backlight_power(int); ++ ++static struct pxafb_mode_info mode_e2 = { ++ .pixclock = 192308, ++ xres = 240, ++ .yres = 320, ++ .bpp = 8, ++ .hsync_len = 10, ++ .left_margin = 20, ++ .right_margin = 10, ++ .vsync_len = 2, ++ .upper_margin = 3, ++ .lower_margin = 2, ++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, ++}; ++ ++static struct pxafb_mach_info e2_fb_info = { ++ .modes = &mode_e2, ++ .num_modes = 1, ++ .lccr0 = 0x022008B8, ++ .lccr3 = 0xC130FF13, ++ .pxafb_backlight_power = &ezx_backlight_power, ++ .pxafb_lcd_power = &ezx_lcd_power, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++}; ++ ++static void __init e2_init(void) ++{ ++ set_pxa_fb_info(&e2_fb_info); ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++} ++ ++MACHINE_START(EZX, "Motorola Ezx Platform") ++ /* Maintainer: OpenEZX Team (www.openezx.org) */ ++ .phys_io = 0x40000000, ++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, ++ .boot_params = 0xa0000200, ++ .map_io = pxa_map_io, ++ .init_irq = pxa27x_init_irq, ++ .timer = &pxa_timer, ++ .init_machine = e2_init, ++MACHINE_END +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c +@@ -0,0 +1,87 @@ ++/* ++ * ezx-e680.c - Code specific to E680 GSM Phone. ++ * ++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "generic.h" ++ ++extern void ezx_lcd_power(int, struct fb_var_screeninfo *); ++extern void ezx_backlight_power(int); ++ ++static struct pxafb_mode_info mode_e680 = { ++ .pixclock = 150000, ++ .xres = 240, ++ .yres = 320, ++ .bpp = 16, ++ .hsync_len = 10, ++ .left_margin = 20, ++ .right_margin = 10, ++ .vsync_len = 2, ++ .upper_margin = 3, ++ .lower_margin = 2, ++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, ++}; ++ ++static struct pxafb_mach_info e680_fb_info = { ++ .modes = &mode_e680, ++ .num_modes = 1, ++ .lccr0 = 0x002008F8, ++ .lccr3 = 0x0430FF09, ++ .pxafb_backlight_power = &ezx_backlight_power, ++ .pxafb_lcd_power = &ezx_lcd_power, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++}; ++ ++static void __init e680_init(void) ++{ ++ /* setup sleep mode values */ ++ PWER = 0xc000f803; /* disable usb 0xdc00f803; */ ++ PFER = 0x0000f803; ++ PRER = 0x00001802; ++ PGSR0 = 0x00000010; ++ PGSR1 = 0x02800000; ++ PGSR2 = 0x00040000; ++ PGSR3 = 0x00000000; ++ PCFR = PCFR_DC_EN | PCFR_FS | PCFR_FP | PCFR_OPDE; ++ PSLR = 0x05800f00; ++ ++ set_pxa_fb_info(&e680_fb_info); ++ ++ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */ ++ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT); ++ clr_GPIO(GPIO_EMU_MUX1); ++ pxa_gpio_mode(GPIO_EMU_MUX2|GPIO_OUT); ++ clr_GPIO(GPIO_EMU_MUX2); ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++} ++ ++MACHINE_START(EZX, "Motorola Ezx Platform") ++ /* Maintainer: OpenEZX Team (www.openezx.org) */ ++ .phys_io = 0x40000000, ++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, ++ .boot_params = 0xa0000100, ++ .map_io = pxa_map_io, ++ .init_irq = pxa27x_init_irq, ++ .timer = &pxa_timer, ++ .init_machine = e680_init, ++MACHINE_END +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-a1200.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-a1200.c +@@ -0,0 +1,70 @@ ++/* ++ * ezx-a1200.c - Code specific to A1200 GSM Phone. ++ * ++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "generic.h" ++ ++extern void ezx_lcd_power(int, struct fb_var_screeninfo *); ++extern void ezx_backlight_power(int); ++ ++static struct pxafb_mode_info mode_a1200 = { ++ .pixclock = 192308, ++ .xres = 240, ++ .yres = 320, ++ .bpp = 8, ++ .hsync_len = 10, ++ .left_margin = 20, ++ .right_margin = 10, ++ .vsync_len = 2, ++ .upper_margin = 3, ++ .lower_margin = 2, ++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, ++}; ++ ++static struct pxafb_mach_info a1200_fb_info = { ++ .modes = &mode_a1200, ++ .num_modes = 1, ++ .lccr0 = 0x022008B8, ++ .lccr3 = 0xC130FF13, ++ .pxafb_backlight_power = &ezx_backlight_power, ++ .pxafb_lcd_power = &ezx_lcd_power, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++}; ++ ++static void __init a1200_init(void) ++{ ++ set_pxa_fb_info(&a1200_fb_info); ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++} ++ ++MACHINE_START(EZX, "Motorola Ezx Platform") ++ /* Maintainer: OpenEZX Team (www.openezx.org) */ ++ .phys_io = 0x40000000, ++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, ++ .boot_params = 0xa0000200, ++ .map_io = pxa_map_io, ++ .init_irq = pxa27x_init_irq, ++ .timer = &pxa_timer, ++ .init_machine = a1200_init, ++MACHINE_END +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e6.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-e6.c +@@ -0,0 +1,70 @@ ++/* ++ * ezx-e6.c - Code specific to E6 GSM Phone. ++ * ++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org) ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "generic.h" ++ ++extern void ezx_lcd_power(int, struct fb_var_screeninfo *); ++extern void ezx_backlight_power(int); ++ ++static struct pxafb_mode_info mode_e6 = { ++ .pixclock = 192308, ++ .xres = 240, ++ .yres = 320, ++ .bpp = 8, ++ .hsync_len = 10, ++ .left_margin = 20, ++ .right_margin = 10, ++ .vsync_len = 2, ++ .upper_margin = 3, ++ .lower_margin = 2, ++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, ++}; ++ ++static struct pxafb_mach_info e6_fb_info = { ++ .modes = &mode_e6, ++ .num_modes = 1, ++ .lccr0 = 0x022008B8, ++ .lccr3 = 0xC130FF13, ++ .pxafb_backlight_power = &ezx_backlight_power, ++ .pxafb_lcd_power = &ezx_lcd_power, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++}; ++ ++static void __init e6_init(void) ++{ ++ set_pxa_fb_info(&e6_fb_info); ++ ++ platform_add_devices(devices, ARRAY_SIZE(devices)); ++} ++ ++MACHINE_START(EZX, "Motorola Ezx Platform") ++ /* Maintainer: OpenEZX Team (www.openezx.org) */ ++ .phys_io = 0x40000000, ++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, ++ .boot_params = 0xa0000200, ++ .map_io = pxa_map_io, ++ .init_irq = pxa27x_init_irq, ++ .timer = &pxa_timer, ++ .init_machine = e6_init, ++MACHINE_END +Index: linux-2.6.24/MAINTAINERS +=================================================================== +--- linux-2.6.24.orig/MAINTAINERS ++++ linux-2.6.24/MAINTAINERS +@@ -2581,6 +2581,15 @@ + W: http://popies.net/meye/ + S: Maintained + ++MOTOROLA EZX SMARTPHONES (E680, A780, A1200, E2, E6) ++P: Daniel Ribeiro ++M: wyrm@openezx.org ++P: Harald Welte ++M: laforge@openezx.org ++L: openezx-devel@lists.openezx.org ++W: http://www.openezx.org/ ++S: Maintained ++ + MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER + P: Pavel Pisa + M: ppisa@pikron.com diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch new file mode 100644 index 0000000000..f7ae47751b --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch @@ -0,0 +1,269 @@ +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-emu.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-emu.c +@@ -0,0 +1,219 @@ ++/* ++ * EMU Driver for Motorola EZX phones ++ * ++ * Copyright (c) 2007 Daniel Ribeiro ++ * ++ * 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 ++ ++static struct pxa2xx_udc_mach_info ezx_udc_info; ++extern int ezx_pcap_bit_set(u_int32_t, u_int8_t); ++extern int ezx_pcap_read_bit(u_int32_t); ++static int emu_irq_usb4v; ++static int emu_irq_usb1v; ++ ++ ++#if defined CONFIG_EZX_EMU_USB ++#define emu_switch_to_default() emu_switch_to_usb() ++#elif defined CONFIG_EZX_EMU_UART ++#define emu_switch_to_default() emu_switch_to_uart() ++#else ++#define emu_switch_to_default() emu_switch_to_nothing() ++#endif ++ ++static void emu_switch_to_usb(void) ++{ ++ printk(KERN_NOTICE "EMU: Switching to USB\n"); ++ pxa_gpio_mode(GPIO34_USB_P2_2_MD); ++ pxa_gpio_mode(GPIO35_USB_P2_1_MD); ++ pxa_gpio_mode(GPIO36_USB_P2_4_MD); ++ pxa_gpio_mode(GPIO39_USB_P2_6_MD); ++ pxa_gpio_mode(GPIO40_USB_P2_5_MD); ++ pxa_gpio_mode(GPIO53_USB_P2_3_MD); ++ UP2OCR = 0x02000000; ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 1); ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_FSENB, 0); ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 1); ++ clr_GPIO(GPIO_EMU_MUX1); ++ clr_GPIO(GPIO_EMU_MUX2); ++} ++ ++static void emu_switch_to_uart(void) ++{ ++ printk(KERN_NOTICE "EMU: Switching to UART\n"); ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN,0); ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 0); ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232_DIR, 1); ++ set_GPIO(GPIO39_FFTXD); ++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT); ++ set_GPIO(GPIO34_TXENB); ++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN); ++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN); ++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN); ++ pxa_gpio_mode(GPIO39_FFTXD_MD); ++ pxa_gpio_mode(GPIO53_FFRXD_MD); ++ pxa_set_cken(CKEN_FFUART, 1); ++ clr_GPIO(GPIO_EMU_MUX1); ++ clr_GPIO(GPIO_EMU_MUX2); ++ ++} ++ ++static void emu_switch_to_audio(int stereo) ++{ ++ printk(KERN_NOTICE "EMU: Switching to audio(%s)\n", (stereo ? "stereo" : "mono")); ++ clr_GPIO(GPIO39_VPOUT); ++ if (stereo) { ++ pxa_gpio_mode(GPIO34_TXENB | GPIO_IN); ++ clr_GPIO(GPIO39_VPOUT); ++ } else { ++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT); ++ set_GPIO(GPIO34_TXENB); ++ } ++ ++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN); ++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN); ++ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN); ++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN); ++ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN); ++ set_GPIO(GPIO_EMU_MUX1); ++ if (stereo) ++ set_GPIO(GPIO_EMU_MUX2); ++ else ++ clr_GPIO(GPIO_EMU_MUX2); ++} ++ ++static void emu_switch_to_nothing(void) ++{ ++ printk(KERN_NOTICE "EMU: Switching to disconnected\n"); ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 0); ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 1); ++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT); ++ set_GPIO(GPIO34_TXENB); ++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN); ++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN); ++ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN); ++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN); ++ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN); ++} ++ ++ ++static irqreturn_t emu_irq(int irq, void *data) ++{ ++ switch (irq) { ++ case EZX_IRQ_USB4V: ++ if(ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V))) ++ emu_switch_to_default(); ++ break; ++ case EZX_IRQ_USB1V: ++ if(!ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB1V))) ++ emu_switch_to_nothing(); ++ break; ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++static int __init ezx_emu_probe(struct platform_device *dev) ++{ ++ pxa_gpio_mode(GPIO_SNP_INT_IN | GPIO_IN); ++ pxa_gpio_mode(GPIO_EMU_MUX1 | GPIO_OUT); ++ pxa_gpio_mode(GPIO_EMU_MUX2 | GPIO_OUT); ++ ++ emu_irq_usb4v = platform_get_irq(dev, 0); ++ if(emu_irq_usb4v < 0) { ++ printk(KERN_ERR "Unable to get IRQ for USB4V!\n"); ++ return emu_irq_usb4v; ++ } ++ emu_irq_usb1v = platform_get_irq(dev, 1); ++ if(emu_irq_usb1v < 0) { ++ printk(KERN_ERR "Unable to get IRQ for USB1V!\n"); ++ return emu_irq_usb1v; ++ } ++ ++ request_irq(emu_irq_usb4v, &emu_irq, IRQF_DISABLED, "usb 4v", NULL); ++ request_irq(emu_irq_usb1v, &emu_irq, IRQF_DISABLED, "usb 1v", NULL); ++ ++ pxa_set_udc_info(&ezx_udc_info); ++ ++ if(ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V))) ++ emu_switch_to_default(); ++ else ++ emu_switch_to_nothing(); ++ ++ return 0; ++} ++ ++static int ezx_emu_remove(struct platform_device *dev) ++{ ++ free_irq(emu_irq_usb4v, NULL); ++ free_irq(emu_irq_usb1v, NULL); ++ ++ return 0; ++} ++ ++/* USB Device Controller */ ++static int udc_connected_status; ++static void ezx_udc_command(int cmd) ++{ ++ switch (cmd) { ++ case PXA2XX_UDC_CMD_DISCONNECT: ++ printk(KERN_NOTICE "USB cmd disconnect\n"); ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,0); ++ udc_connected_status = 0; ++ break; ++ case PXA2XX_UDC_CMD_CONNECT: ++ printk(KERN_NOTICE "USB cmd connect\n"); ++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,1); ++ udc_connected_status = 1; ++ break; ++ } ++} ++ ++static int ezx_udc_is_connected(void) ++{ ++ return udc_connected_status; ++} ++ ++static struct pxa2xx_udc_mach_info ezx_udc_info __initdata = { ++ .udc_is_connected = ezx_udc_is_connected, ++ .udc_command = ezx_udc_command, ++}; ++ ++static struct platform_driver ezxemu_driver = { ++ .probe = ezx_emu_probe, ++ .remove = ezx_emu_remove, ++ .driver = { ++ .name = "ezx-emu", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++int __init ezx_emu_init(void) ++{ ++ return platform_driver_register(&ezxemu_driver); ++} ++ ++void ezx_emu_fini(void) ++{ ++ return platform_driver_unregister(&ezxemu_driver); ++} ++ ++module_init(ezx_emu_init); ++module_exit(ezx_emu_fini); ++ ++MODULE_DESCRIPTION("Motorola Enchanced Mini Usb driver"); ++MODULE_AUTHOR("Daniel Ribeiro "); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig ++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig +@@ -142,6 +142,28 @@ + config EZX_PCAP + bool "PCAP Support" + ++config EZX_EMU ++ bool "Motorola Enchanced Mini Usb" ++ depends on EZX_PCAP ++ ++if EZX_EMU ++ ++choice ++ prompt "Select default EMU mode" ++ ++config EZX_EMU_USB ++ bool "USB" ++ ++config EZX_EMU_UART ++ bool "UART" ++ ++config EZX_EMU_NOTHING ++ bool "nothing" ++ ++endchoice ++ ++endif ++ + endif + + endmenu +Index: linux-2.6.24/arch/arm/mach-pxa/Makefile +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile ++++ linux-2.6.24/arch/arm/mach-pxa/Makefile +@@ -38,6 +38,7 @@ + obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o + obj-$(CONFIG_EZX_BP) += ezx-bp.o + obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o ++obj-$(CONFIG_EZX_EMU) += ezx-emu.o + + # Support for blinky lights + led-y := leds.o diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch new file mode 100644 index 0000000000..6f1a2c1ba4 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch @@ -0,0 +1,99 @@ +Index: linux-2.6.21/arch/arm/boot/compressed/head.S +=================================================================== +--- linux-2.6.21.orig/arch/arm/boot/compressed/head.S 2007-05-19 11:22:56.000000000 -0300 ++++ linux-2.6.21/arch/arm/boot/compressed/head.S 2007-05-19 11:50:29.000000000 -0300 +@@ -10,6 +10,7 @@ + */ + #include + ++#define DEBUG + /* + * Debugging stuff + * +@@ -117,6 +118,8 @@ + mov r0, r0 + .endr + ++ inituart r10, r11 ++ + mov r1, #0x300 @ mach_id 0x363 is official EZX + orr r1, r1, #0x63 @ bootloader JUMP doesn't set r1 + +Index: linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h +=================================================================== +--- linux-2.6.21.orig/include/asm-arm/arch-pxa/uncompress.h 2007-05-19 11:22:56.000000000 -0300 ++++ linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h 2007-05-19 11:30:38.000000000 -0300 +@@ -19,9 +19,9 @@ + + static inline void putc(char c) + { +-/* while (!(UART[5] & 0x40)) ++ while (!(UART[5] & 0x40)) + barrier(); +- UART[0] = c;*/ ++ UART[0] = c; + } + + /* +Index: linux-2.6.21/include/asm-arm/arch-pxa/debug-macro.S +=================================================================== +--- linux-2.6.21.orig/include/asm-arm/arch-pxa/debug-macro.S 2007-05-19 11:30:54.000000000 -0300 ++++ linux-2.6.21/include/asm-arm/arch-pxa/debug-macro.S 2007-05-19 11:49:35.000000000 -0300 +@@ -14,11 +14,52 @@ + #include "hardware.h" + + .macro addruart,rx +- mrc p15, 0, \rx, c1, c0 +- tst \rx, #1 @ MMU enabled? +- moveq \rx, #0x40000000 @ physical +- movne \rx, #io_p2v(0x40000000) @ virtual +- orr \rx, \rx, #0x00100000 ++@ mrc p15, 0, \rx, c1, c0 ++@ tst \rx, #1 @ MMU enabled? ++ mov \rx, #0x40000000 ++@ moveq \rx, #0x40000000 @ physical ++@ movne \rx, #io_p2v(0x40000000) @ virtual ++ orr \rx, \rx, #0x00700000 ++ .endm ++ ++ .macro inituart,rd,rx ++ ldr \rd, =0x41300004 @ CKEN ++ ldr \rx, [\rd] ++ orr \rx, \rx, #0x20 ++ str \rx, [\rd] ++ ++ ldr \rd, =0x40E0005C ++ ldr \rx, [\rd] ++ bic \rx, \rx, #0xF0000000 @ clear GPIO46/47 config ++ orr \rx, \rx, #0x60000000 @ set GPIO46: AF2, GPIO47: AF1 ++ str \rx, [\rd] ++ ldr \rd, =0x40E00010 ++ ldr \rx, [\rd] ++ bic \rx, \rx, #0x0000c000 @ clear GPIO46/47 direction ++ orr \rx, \rx, #0x00008000 @ set GPIO 47 out, 46 in ++ str \rx, [\rd] ++ ++ addruart \rd ++ mov \rx, #0x83 @ DLAB = 1 ++ strb \rx, [\rd, #0x0c] ++ ++ mov \rx, #0x08 @ Divisor 8 => 115200 bps ++ strb \rx, [\rd, #0x00] ++ ++ mov \rx, #0x00 ++ strb \rx, [\rd, #0x04] @ Divisor high = 0 ++ ++ mov \rx, #0x03 ++ strb \rx, [\rd, #0x0c] @ DLAB = 0, n81 ++ ++ mov \rx, #0x00 ++ strb \rx, [\rd, #0x10] @ MCR = 0 ++ ++ mov \rx, #0x00 ++ strb \rx, [\rd, #0x28] @ disable autobaud ++ ++ mov \rx, #0x40 ++ strb \rx, [\rd, #0x04] @ IER UUE (UART Enable) + .endm + + #define UART_SHIFT 2 diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch new file mode 100644 index 0000000000..b7247b881c --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch @@ -0,0 +1,295 @@ +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-eoc.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-eoc.c +@@ -0,0 +1,261 @@ ++/* ++ * EZX EOC Driver for Motorola EZX phones ++ * ++ * Copyright (C) 2007 Alex Zhang ++ * ++ * 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 ++ ++#if 1 ++#define EOC_DBG printk ++#else ++#define EOC_DBG(x, args...) ++#endif ++ ++#define REG_INT_STATUS 32 ++#define REG_INT_MASK 33 ++#define REG_INT_SENSE 34 ++#define REG_POWER_CONTROL_0 35 ++#define REG_POWER_CONTROL_1 36 ++#define REG_CONN_CONTROL 37 ++ ++#define EOC_REG_ADDR_SIZE 1 ++#define EOC_REG_DATA_SIZE 3 ++#define EOC_FUNC_NOTHING 0 ++#define EOC_FUNC_USB_NET 1 ++ ++static const char eoc_i2c_driver_name[] = "ezx-eoc"; ++static int eoc_func = EOC_FUNC_USB_NET; ++static struct pxa2xx_udc_mach_info ezx_udc_info; ++ ++static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter); ++static int ezx_eoc_detach_client(struct i2c_client *client); ++ ++static struct i2c_client *eoc_i2c_client = NULL; ++ ++static struct i2c_driver eoc_i2c_driver = { ++ .driver = { ++ .name = (char *)eoc_i2c_driver_name, ++ }, ++ .attach_adapter = ezx_eoc_attach_adapter, ++ .detach_client = ezx_eoc_detach_client, ++}; ++ ++int eoc_reg_read(int reg, unsigned int *reg_value) ++{ ++ unsigned char reg_num = reg; ++ unsigned char value[EOC_REG_DATA_SIZE]; ++ int retval; ++ ++ struct i2c_msg msgs[2] = ++ { ++ { eoc_i2c_client->addr, 0, EOC_REG_ADDR_SIZE, ®_num }, ++ { eoc_i2c_client->addr, I2C_M_RD, EOC_REG_DATA_SIZE, value } ++ }; ++ ++ /* transfer message to client */ ++ retval = i2c_transfer(eoc_i2c_client->adapter, msgs, 2); ++ if (retval < 0) ++ return retval; ++ ++ *reg_value = (value[2] << 0); ++ *reg_value |= (value[1] << 8); ++ *reg_value |= (value[0] << 16); ++ return 0; ++} ++ ++int eoc_reg_write(int reg, unsigned int reg_value) ++{ ++ unsigned char value[EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE]; ++ int retval; ++ ++ /* Copy the data into a buffer into the correct format */ ++ value[0] = reg; ++ value[1] = (reg_value >> 16) & 0xFF; ++ value[2] = (reg_value >> 8) & 0xFF; ++ value[3] = (reg_value >> 0) & 0xFF; ++ ++ /* Write the data to the EOC */ ++ retval = i2c_master_send (eoc_i2c_client, value, EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE); ++ if (retval < 0) ++ return retval; ++ return 0; ++} ++ ++static void eoc_switch_to_usb(void) ++{ ++ EOC_DBG("EOC: Switching to USB\n"); ++ pxa_gpio_mode(GPIO34_USB_P2_2_MD); ++ pxa_gpio_mode(GPIO35_USB_P2_1_MD); ++ pxa_gpio_mode(GPIO36_USB_P2_4_MD); ++ pxa_gpio_mode(GPIO39_USB_P2_6_MD); ++ pxa_gpio_mode(GPIO40_USB_P2_5_MD); ++ pxa_gpio_mode(GPIO53_USB_P2_3_MD); ++ UP2OCR = 0x02000000; ++ /* FIXME change eoc bits to USB */ ++ ++} ++ ++static void eoc_switch_to_nothing(void) ++{ ++ EOC_DBG("EOC: Switching do disconnected\n"); ++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT); ++ set_GPIO(GPIO34_TXENB); ++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN); ++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN); ++ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN); ++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN); ++ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN); ++ /* FIXME disconnect mini usb port */ ++} ++ ++static void eoc_switch_to_default(void) ++{ ++ switch (eoc_func) { ++ case EOC_FUNC_USB_NET: ++ eoc_switch_to_usb(); ++ break; ++ case EOC_FUNC_NOTHING: ++ eoc_switch_to_nothing(); ++ break; ++ } ++} ++ ++static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter) ++{ ++ int err = 0; ++ EOC_DBG(">>>>attach adapter enter\n"); ++ ++ if (eoc_i2c_client != NULL) { ++ EOC_DBG(">>>>already loaded!!!\n"); ++ return 0; ++ } ++ ++ if (!(eoc_i2c_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL))) ++ return -ENOMEM; ++ ++ eoc_i2c_client->addr = 0x17; ++ eoc_i2c_client->adapter = adapter; ++ eoc_i2c_client->driver = &eoc_i2c_driver; ++ eoc_i2c_client->flags = 0; ++ strlcpy(eoc_i2c_client->name, eoc_i2c_driver_name, I2C_NAME_SIZE); ++ ++ if ((err = i2c_attach_client(eoc_i2c_client))) { ++ kfree(eoc_i2c_client); ++ eoc_i2c_client = NULL; ++ return err; ++ } ++ eoc_reg_write(REG_INT_MASK, 0x0000FEF); ++ eoc_reg_write(REG_POWER_CONTROL_0, 0x0000C00); ++ eoc_reg_write(REG_POWER_CONTROL_1, 0x000000C); ++ eoc_reg_write(REG_CONN_CONTROL,0x0021044); ++ ++ eoc_switch_to_default(); ++ EOC_DBG(">>>>attach adapter exit\n"); ++ return 0; ++ ++} ++ ++static int ezx_eoc_detach_client(struct i2c_client *client) ++{ ++ return i2c_detach_client(client); ++} ++ ++static int __init ezx_eoc_probe(struct platform_device *dev) ++{ ++ int ret; ++ ++ ret = i2c_add_driver(&eoc_i2c_driver); ++ if (ret != 0) ++ return -EINVAL; ++ ++ pxa_set_udc_info(&ezx_udc_info); ++ ++ return 0; ++} ++ ++static int ezx_eoc_remove(struct platform_device *dev) ++{ ++ i2c_del_driver(&eoc_i2c_driver); ++ return 0; ++} ++ ++static int ezx_eoc_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ eoc_switch_to_nothing(); ++ return 0; ++} ++ ++static int ezx_eoc_resume(struct platform_device *dev) ++{ ++ eoc_switch_to_default(); ++ return 0; ++} ++ ++/* USB Device Controller */ ++static int udc_connected_status; ++static void ezx_udc_command(int cmd) ++{ ++ switch (cmd) { ++ case PXA2XX_UDC_CMD_DISCONNECT: ++ printk(KERN_NOTICE "USB cmd disconnect\n"); ++// ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,0); ++ udc_connected_status = 0; ++ break; ++ case PXA2XX_UDC_CMD_CONNECT: ++ printk(KERN_NOTICE "USB cmd connect\n"); ++// ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,1); ++ udc_connected_status = 1; ++ break; ++ } ++} ++ ++static int ezx_udc_is_connected(void) ++{ ++ return udc_connected_status; ++} ++ ++static struct pxa2xx_udc_mach_info ezx_udc_info __initdata = { ++ .udc_is_connected = ezx_udc_is_connected, ++ .udc_command = ezx_udc_command, ++}; ++ ++static struct platform_driver ezx_eoc_driver = { ++ .probe = ezx_eoc_probe, ++ .remove = ezx_eoc_remove, ++ .suspend = ezx_eoc_suspend, ++ .resume = ezx_eoc_resume, ++ .driver = { ++ .name = "ezx-eoc", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++int __init ezx_eoc_init(void) ++{ ++ return platform_driver_register(&ezx_eoc_driver); ++} ++ ++void ezx_eoc_exit(void) ++{ ++ return platform_driver_unregister(&ezx_eoc_driver); ++} ++ ++MODULE_AUTHOR("Alex Zhang "); ++MODULE_DESCRIPTION("EZX EOC I2C driver"); ++MODULE_LICENSE("GPL"); ++ ++module_init(ezx_eoc_init); ++module_exit(ezx_eoc_exit); +Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig ++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig +@@ -142,6 +142,12 @@ + config EZX_PCAP + bool "PCAP Support" + ++config EZX_EOC ++ tristate "EOC i2c driver of Motorola EZX phones" ++ depends on I2C && EXPERIMENTAL ++ help ++ EOC i2c driver of Motorola EZX phones ++ + config EZX_EMU + bool "Motorola Enchanced Mini Usb" + depends on EZX_PCAP +Index: linux-2.6.24/arch/arm/mach-pxa/Makefile +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile ++++ linux-2.6.24/arch/arm/mach-pxa/Makefile +@@ -39,6 +39,7 @@ + obj-$(CONFIG_EZX_BP) += ezx-bp.o + obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o + obj-$(CONFIG_EZX_EMU) += ezx-emu.o ++obj-$(CONFIG_EZX_EOC) += ezx-eoc.o + + # Support for blinky lights + led-y := leds.o diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch new file mode 100644 index 0000000000..9ed4906d78 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch @@ -0,0 +1,309 @@ +Index: linux-2.6.24/drivers/mtd/maps/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/mtd/maps/Kconfig ++++ linux-2.6.24/drivers/mtd/maps/Kconfig +@@ -588,6 +588,34 @@ + Map driver for a NOR flash bank located on the Expansion Bus of the + Intel Vermilion Range chipset. + ++config MTD_EZX ++ tristate "Map driver for Motorola EZX Platform" ++ depends on MTD && PXA_EZX ++ ++if MTD_EZX ++ ++choice ++ prompt "Select partition mapping for EZX platform" ++ ++config MTD_EZX_A780 ++ bool "A780/E680 Original Mapping" ++ ++config MTD_EZX_A780_ALTERNATE ++ bool "A780/E680 Alternate Mapping for BLOB2" ++ ++config MTD_EZX_A1200 ++ bool "A1200 Original Mapping" ++ ++config MTD_EZX_E2 ++ bool "E2 Original Mapping" ++ ++config MTD_EZX_E6 ++ bool "E6 Original Mapping" ++ ++endchoice ++ ++endif ++ + config MTD_PLATRAM + tristate "Map driver for platform device RAM (mtd-ram)" + select MTD_RAM +Index: linux-2.6.24/drivers/mtd/maps/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/mtd/maps/Makefile ++++ linux-2.6.24/drivers/mtd/maps/Makefile +@@ -69,3 +69,4 @@ + obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o + obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o + obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o ++obj-$(CONFIG_MTD_EZX) += ezx-flash.o +Index: linux-2.6.24/drivers/mtd/maps/ezx-flash.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/mtd/maps/ezx-flash.c +@@ -0,0 +1,256 @@ ++/* ++ * Map driver for the PXA27x ++ * ++ * Author: Harald Welte ++ * Copyright: (C) 2001 MontaVista Software Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#define WINDOW_ADDR 0x0 ++#define WINDOW_SIZE (32*1024*1024) ++#define WINDOW_CACHE_ADDR 0x0 ++#define WINDOW_CACHE_SIZE 0x1a00000 ++ ++static void pxa27x_map_inval_cache(struct map_info *map, unsigned long from, ++ ssize_t len) ++{ ++ flush_ioremap_region(map->phys, map->cached, from, len); ++} ++ ++ ++struct map_info pxa27x_map = { ++ .name = "PXA27x flash", ++ .size = WINDOW_SIZE, ++ .phys = WINDOW_ADDR, ++ .inval_cache = &pxa27x_map_inval_cache, ++}; ++ ++#if defined CONFIG_MTD_EZX_A780_ALTERNATE ++static struct mtd_partition pxa27x_partitions[] = { ++ { ++ .name = "Bootloader (RO)", ++ .size = 0x00020000, ++ .offset = 0, ++ .mask_flags = MTD_WRITEABLE, ++ }, { ++ .name = "Bootloader 2", ++ .size = 0x00020000, ++ .offset = 0x00020000, ++ } , { ++ .name = "Moto Kernel", ++ .size = 0x000e0000, // 896KB ++ .offset = 0x00040000, ++ } , { ++ .name = "rootfs", ++ .size = 0x01760000, ++ .offset = 0x00120000, ++ } , { ++ .name = "OpenEZX Kernel", ++ .size = 0x00180000, // 1.5MB ++ .offset = 0x01880000, ++ } , { ++ .name = "ezxlocal", ++ .size = 0x005a0000, ++ .offset = 0x01a00000, ++ } , { ++ .name = "setup", ++ .size = 0x00020000, ++ .offset = 0x01fa0000, ++ } , { ++ .name = "Logo", ++ .size = 0x00020000, ++ .offset = 0x01fc0000, ++ }, ++}; ++#elif defined CONFIG_MTD_EZX_A780 ++static struct mtd_partition pxa27x_partitions[] = { ++ { ++ .name = "Bootloader", ++ .size = 0x00020000, ++ .offset = 0, ++ .mask_flags = MTD_WRITEABLE, ++ }, { ++ .name = "Kernel", ++ .size = 0x000e0000, ++ .offset = 0x00020000, ++ } , { ++ .name = "rootfs", ++ .size = 0x018e0000, ++ .offset = 0x00120000, ++ } , { ++ .name = "VFM_Filesystem", ++ .size = 0x00580000, ++ .offset = 0x01a00000, ++ } , { ++ .name = "setup", ++ .size = 0x00020000, ++ .offset = 0x01fa0000, ++ } , { ++ .name = "Logo", ++ .size = 0x00020000, ++ .offset = 0x01fc0000, ++ }, ++}; ++#elif defined CONFIG_MTD_EZX_A1200 ++static struct mtd_partition pxa27x_partitions[] = { ++ { ++ .name = "Caddo 2", ++ .size = 0x00008000, ++ .offset = 0, ++ }, { ++ .name = "Itunes", ++ .size = 0x00008000, ++ .offset = 0x00008000, ++ }, { ++ .name = "Caddo 1", ++ .size = 0x00008000, ++ .offset = 0x00010000, ++ }, { ++ .name = "Fota rev", ++ .size = 0x00008000, ++ .offset = 0x00018000, ++ }, { ++ .name = "MBM", ++ .size = 0x00040000, ++ .offset = 0x00020000, ++ .mask_flags = MTD_WRITEABLE, ++ }, { ++ .name = "Blob", ++ .size = 0x00020000, ++ .offset = 0x00080000, ++ .mask_flags = MTD_WRITEABLE, ++ }, { ++ .name = "Kernel", ++ .size = 0x00100000, ++ .offset = 0x000A0000, ++ } , { ++ .name = "UserFS DB", ++ .size = 0x00600000, ++ .offset = 0x00AA0000, ++ }, { ++ .name = "UserFS", ++ .size = 0x007E0000, ++ .offset = 0x010A0000, ++ }, { ++ .name = "Test cmd", ++ .size = 0x00020000, ++ .offset = 0x018C0000, ++ } , { ++ .name = "Logo", ++ .size = 0x00020000, ++ .offset = 0x018E0000, ++ } , { ++ .name = "Fota", ++ .size = 0x000c0000, ++ .offset = 0x01900000, ++ }, { ++ .name = "Reserve", ++ .size = 0x00020000, ++ .offset = 0x019c0000, ++ } ++}; ++#else ++#error "please define partition for this PXA27x implementation" ++#endif ++ ++ ++static struct mtd_info *mymtd; ++static struct mtd_partition *parsed_parts; ++ ++static const char *probes[] = { "RedBoot", "cmdlinepart", NULL }; ++ ++static int __init init_pxa27x(void) ++{ ++ struct mtd_partition *parts; ++ int nb_parts = 0; ++ int parsed_nr_parts = 0; ++ char *part_type = "static"; ++ ++ pxa27x_map.bankwidth = (BOOT_DEF & 1) ? 2 : 4; ++ ++ printk("Probing PXA27x flash at physical address 0x%08x (%d-bit bankwidth)\n", ++ WINDOW_ADDR, pxa27x_map.bankwidth * 8); ++ pxa27x_map.virt = ioremap(pxa27x_map.phys, pxa27x_map.size); ++ ++ if (!pxa27x_map.virt) { ++ printk("Failed to ioremap\n"); ++ return -EIO; ++ } ++ ++ mymtd = do_map_probe("cfi_probe", &pxa27x_map); ++ if (!mymtd) { ++ iounmap((void *)pxa27x_map.virt); ++ return -ENXIO; ++ } ++ mymtd->owner = THIS_MODULE; ++ ++ simple_map_init(&pxa27x_map); ++ ++ if (parsed_nr_parts == 0) { ++ int ret = parse_mtd_partitions(mymtd, probes, &parsed_parts, 0); ++ ++ if (ret > 0) { ++ part_type = "RedBoot"; ++ parsed_nr_parts = ret; ++ } ++ } ++ ++ if (parsed_nr_parts > 0) { ++ parts = parsed_parts; ++ nb_parts = parsed_nr_parts; ++ } else { ++ parts = pxa27x_partitions; ++ nb_parts = ARRAY_SIZE(pxa27x_partitions); ++ } ++ ++ if (nb_parts) { ++ printk(KERN_NOTICE "Using %s partition definition\n", part_type); ++ add_mtd_partitions(mymtd, parts, nb_parts); ++ } else { ++ add_mtd_device(mymtd); ++ } ++ return 0; ++} ++ ++static void __exit cleanup_pxa27x(void) ++{ ++ if (mymtd) { ++ del_mtd_partitions(mymtd); ++ map_destroy(mymtd); ++ if (parsed_parts) ++ kfree(parsed_parts); ++ } ++ if (pxa27x_map.virt) ++ iounmap((void *)pxa27x_map.virt); ++ if (pxa27x_map.cached) ++ iounmap((void *)pxa27x_map.cached); ++ return; ++} ++ ++module_init(init_pxa27x); ++module_exit(cleanup_pxa27x); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Harald Welte "); ++MODULE_DESCRIPTION("MTD map driver for Motorola EZX platform"); diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch new file mode 100644 index 0000000000..f38a5e52da --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch @@ -0,0 +1,852 @@ +Index: linux-2.6.24/arch/arm/mach-pxa/ezx-pcap.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/arch/arm/mach-pxa/ezx-pcap.c +@@ -0,0 +1,513 @@ ++/* Driver for Motorola PCAP2 as present in EZX phones ++ * ++ * This is both a SPI device driver for PCAP itself, as well as ++ * an IRQ demultiplexer for handling PCAP generated events such as ++ * headphone jack sense by downstream drivers. ++ * ++ * Copyright (C) 2006 Harald Welte ++ * Copyright (C) 2007 Daniel Ribeiro ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP(x, args...) printk(x, ## args) ++#else ++#define DEBUGP(x, args...) ++#endif ++ ++static DEFINE_SPINLOCK(ezx_ssp_lock); ++static struct ssp_dev ezx_ssp_dev; ++static struct ssp_state ezx_ssp_state; ++static struct pcap_platform_data *pcap_data; ++static int pcap_irq; ++ ++static unsigned long ezx_ssp_pcap_putget(ulong data) ++{ ++ unsigned long flag; ++ u32 ret = 0; ++ ++ spin_lock_irqsave(&ezx_ssp_lock, flag); ++ if (pcap_data->cs >= 0) { ++ if (pcap_data->flags & PCAP_CS_AH) ++ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs); ++ else ++ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs); ++ } ++ ++ ssp_write_word(&ezx_ssp_dev,data); ++ ssp_read_word(&ezx_ssp_dev, &ret); ++ ++ if (pcap_data->cs >= 0) { ++ if(pcap_data->flags & PCAP_CS_AH) ++ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs); ++ else ++ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs); ++ } ++ ++ spin_unlock_irqrestore(&ezx_ssp_lock, flag); ++ ++ return ret; ++} ++ ++int ezx_pcap_write(u_int8_t reg_num, u_int32_t value) ++{ ++ value &= PCAP_REGISTER_VALUE_MASK; ++ value |= PCAP_REGISTER_WRITE_OP_BIT ++ | (reg_num<> PCAP_REGISTER_ADDRESS_SHIFT; ++ ++ ret = ezx_pcap_read(reg_num, &tmp); ++ if (ret < 0) ++ return ret; ++ ++ if (to == 0) ++ tmp &= ~bit; ++ else ++ tmp |= bit; ++ ++ return ezx_pcap_write(reg_num, tmp); ++} ++EXPORT_SYMBOL_GPL(ezx_pcap_bit_set); ++ ++int ezx_pcap_read_bit(u_int32_t bit) ++{ ++ int ret; ++ u_int32_t tmp; ++ u_int8_t reg_num = (bit & PCAP_REGISTER_ADDRESS_MASK) ++ >> PCAP_REGISTER_ADDRESS_SHIFT; ++ ++ ret = ezx_pcap_read(reg_num, &tmp); ++ if (ret < 0) ++ return ret; ++ ++ return tmp & (bit & PCAP_REGISTER_VALUE_MASK); ++} ++EXPORT_SYMBOL_GPL(ezx_pcap_read_bit); ++ ++/* /proc/pcap support */ ++#ifdef CONFIG_PROC_FS ++ ++static struct proc_dir_entry *proc_pcap; ++ ++char *pcap_registers[] = { ++ "ISR\t", "MSR\t", "PSTAT\t", "INT_SEL\t", "SWCTRL\t", "VREG1\t", ++ "VREG2\t", "VREG\t", "BATT_DAC", "ADC1\t", "ADC2\t", "AUD_CODEC", ++ "RX_AUD_AMPS", "ST_DAC\t", "RTC_TOD\t", "RTC_TODA", "RTC_DAY\t", ++ "RTC_DAYA", "MTRTMR\t", "PWRCTRL\t", "BUSCTRL\t", "PERIPH\t", ++ "AUXVREG_MASK", "VENDOR_REV", "LOWPWR_CTRL", "PERIPH_MASK", ++ "TX_AUD_AMPS", "GP\t", ++ NULL, NULL, NULL, NULL ++}; ++ ++static int pcap_read_proc(char *page, char **start, off_t off, int count, ++ int *eof, void *data_unused) ++{ ++ int len = 0; ++ u_int8_t r; ++ u_int32_t v; ++ off_t begin = 0; ++ ++ for(r = 0; r < 32; r++) { ++ if (pcap_registers[r] == NULL) ++ continue; ++ ezx_pcap_read(r, &v); ++ len += sprintf(page+len, "%s\t%08X\n", pcap_registers[r], v); ++ if(len + begin > off + count) ++ goto done; ++ if(len + begin < off) { ++ begin += len; ++ len = 0; ++ } ++ } ++ *eof = 1; ++done: ++ if (off >= len+begin) ++ return 0; ++ *start = page + (off-begin); ++ return ((count < begin+len-off) ? count : begin+len-off); ++} ++#endif ++ ++void ezx_pcap_vibrator_level(u_int32_t value) ++{ ++ u_int32_t tmp; ++ ++ ezx_pcap_read(PCAP_REG_AUXVREG, &tmp); ++ ++ tmp &= ~PCAP_AUXVREG_V_VIB_MASK; ++ tmp |= ((value << PCAP_AUXVREG_V_VIB_SHIFT) & PCAP_AUXVREG_V_VIB_MASK); ++ ++ ezx_pcap_write(PCAP_REG_AUXVREG, tmp); ++} ++EXPORT_SYMBOL_GPL(ezx_pcap_vibrator_level); ++ ++/* MMC/SD specific functions */ ++ ++void ezx_pcap_mmcsd_voltage(u_int32_t bits) ++{ ++ unsigned int tmp; ++ ezx_pcap_read(PCAP_REG_AUXVREG, &tmp); ++ if (pcap_data->flags & PCAP_MCI_SD) { ++ tmp &= ~PCAP_AUXVREG_VAUX2_MASK; ++ tmp |= ((bits << PCAP_AUXVREG_VAUX2_SHIFT) & ++ PCAP_AUXVREG_VAUX2_MASK); ++ } ++ else if (pcap_data->flags & PCAP_MCI_TF) { ++ tmp &= ~PCAP_AUXVREG_VAUX3_MASK; ++ tmp |= ((bits << PCAP_AUXVREG_VAUX3_SHIFT) & ++ PCAP_AUXVREG_VAUX3_MASK); ++ } ++ ezx_pcap_write(PCAP_REG_AUXVREG, tmp); ++} ++EXPORT_SYMBOL_GPL(ezx_pcap_mmcsd_voltage); ++ ++int ezx_pcap_mmcsd_power(int on) ++{ ++ if (on > 0) on = 1; ++ else on = 0; ++ ++ if (pcap_data->flags & PCAP_MCI_SD) ++ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX2_EN, on); ++ else if (pcap_data->flags & PCAP_MCI_TF) ++ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX3_EN, on); ++ else ++ return -ENODEV; ++} ++EXPORT_SYMBOL_GPL(ezx_pcap_mmcsd_power); ++ ++/* IRQ Handling */ ++ ++/* Array indexed by BIT POSITION of PCAP register, returns IRQ number */ ++static unsigned int pcap2irq[] = { ++ [0] = EZX_IRQ_ADCDONE, ++ [1] = EZX_IRQ_TS, ++ [2] = EZX_IRQ_1HZ, /* 1HZ */ ++ [3] = EZX_IRQ_WH, /* WH */ ++ [4] = EZX_IRQ_WL, /* WL */ ++ [5] = EZX_IRQ_TODA, /* TODA */ ++ [6] = EZX_IRQ_USB4V, ++ [7] = EZX_IRQ_ONOFF, /* ONOFF */ ++ [8] = EZX_IRQ_ONOFF2, /* ONOFF2 */ ++ [9] = EZX_IRQ_USB1V, ++ [10] = EZX_IRQ_MOBPORT, /* MOBPORT */ ++ [11] = EZX_IRQ_MIC, ++ [12] = EZX_IRQ_HEADJACK, ++ [13] = EZX_IRQ_ST, /* ST */ ++ [14] = EZX_IRQ_PC, /* PC */ ++ [15] = EZX_IRQ_WARM, /* WARM */ ++ [16] = EZX_IRQ_EOL, /* EOL */ ++ [17] = EZX_IRQ_CLK, /* CLK */ ++ [18] = EZX_IRQ_SYSRST, /* SYSRST */ ++ [19] = 0, ++ [20] = EZX_IRQ_ADCDONE2, ++ [21] = EZX_IRQ_SOFTRESET, /* SOFTRESET */ ++ [22] = EZX_IRQ_MNEXB, /* MNEXB */ ++}; ++ ++/* Array indexed by IRQ NUMBER, returns PCAP absolute value */ ++static unsigned int irq2pcap[] = { ++ [EZX_IRQ_MNEXB] = PCAP_IRQ_MNEXB, ++ [EZX_IRQ_SOFTRESET] = PCAP_IRQ_SOFTRESET, ++ [EZX_IRQ_SYSRST] = PCAP_IRQ_SYSRST, ++ [EZX_IRQ_CLK] = PCAP_IRQ_CLK, ++ [EZX_IRQ_EOL] = PCAP_IRQ_EOL, ++ [EZX_IRQ_WARM] = PCAP_IRQ_WARM, ++ [EZX_IRQ_PC] = PCAP_IRQ_PC, ++ [EZX_IRQ_ST] = PCAP_IRQ_ST, ++ [EZX_IRQ_MOBPORT] = PCAP_IRQ_MOBPORT, ++ [EZX_IRQ_ONOFF2] = PCAP_IRQ_ONOFF2, ++ [EZX_IRQ_ONOFF] = PCAP_IRQ_ONOFF, ++ [EZX_IRQ_TODA] = PCAP_IRQ_TODA, ++ [EZX_IRQ_WL] = PCAP_IRQ_WL, ++ [EZX_IRQ_WH] = PCAP_IRQ_WH, ++ [EZX_IRQ_1HZ] = PCAP_IRQ_1HZ, ++ [EZX_IRQ_USB4V] = PCAP_IRQ_USB4V, ++ [EZX_IRQ_USB1V] = PCAP_IRQ_USB1V, ++ [EZX_IRQ_HEADJACK] = PCAP_IRQ_A1, ++ [EZX_IRQ_MIC] = PCAP_IRQ_MB2, ++ [EZX_IRQ_TS] = PCAP_IRQ_TS, ++ [EZX_IRQ_ADCDONE] = PCAP_IRQ_ADCDONE, ++ [EZX_IRQ_ADCDONE2] = PCAP_IRQ_ADCDONE2, ++}; ++ ++static void pcap_ack_irq(unsigned int irq) ++{ ++ DEBUGP("pcap_ack_irq: %u\n", irq); ++ ezx_pcap_write(PCAP_REG_ISR, irq2pcap[irq]); ++} ++ ++static void pcap_mask_irq(unsigned int irq) ++{ ++ u_int32_t reg; ++ unsigned long flag; ++ ++ spin_lock_irqsave(&ezx_ssp_lock, flag); ++ DEBUGP("pcap_mask_irq: %u\n", irq); ++ ezx_pcap_read(PCAP_REG_MSR, ®); ++ reg |= irq2pcap[irq]; ++ ezx_pcap_write(PCAP_REG_MSR, reg); ++ spin_unlock_irqrestore(&ezx_ssp_lock, flag); ++} ++ ++static void pcap_unmask_irq(unsigned int irq) ++{ ++ u_int32_t tmp; ++ unsigned long flag; ++ ++ spin_lock_irqsave(&ezx_ssp_lock, flag); ++ DEBUGP("pcap_unmask_irq: %u\n", irq); ++ ezx_pcap_read(PCAP_REG_MSR, &tmp); ++ tmp &= ~irq2pcap[irq]; ++ ezx_pcap_write(PCAP_REG_MSR, tmp); ++ spin_unlock_irqrestore(&ezx_ssp_lock, flag); ++} ++ ++static struct irq_chip pcap_chip = { ++ .ack = pcap_ack_irq, ++ .mask = pcap_mask_irq, ++ .unmask = pcap_unmask_irq, ++}; ++ ++/* handler for interrupt received from PCAP via GPIO */ ++static void pcap_irq_demux_handler(unsigned int irq, struct irq_desc *desc) ++{ ++ const unsigned int cpu = smp_processor_id(); ++ int i; ++ u_int32_t isr, msr; ++ ++ spin_lock(&desc->lock); ++ desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); ++ if (unlikely(desc->status & (IRQ_INPROGRESS | IRQ_DISABLED))) { ++ desc->status |= (IRQ_PENDING | IRQ_MASKED); ++ desc->chip->mask(irq); ++ desc->chip->ack(irq); ++ goto out_unlock; ++ } ++ kstat_cpu(cpu).irqs[irq]++; ++ desc->chip->ack(irq); ++ desc->status |= IRQ_INPROGRESS; ++ do { ++ if (unlikely((desc->status & ++ (IRQ_PENDING | IRQ_MASKED | IRQ_DISABLED)) == ++ (IRQ_PENDING | IRQ_MASKED))) { ++ desc->chip->unmask(irq); ++ desc->status &= ~IRQ_MASKED; ++ } ++ desc->status &= ~IRQ_PENDING; ++ ++ ezx_pcap_read(PCAP_REG_ISR, &isr); ++ ezx_pcap_read(PCAP_REG_MSR, &msr); ++ for (i = ARRAY_SIZE(pcap2irq)-1; i >= 0; i--) { ++ unsigned int pirq = pcap2irq[i]; ++ struct irq_desc *subdesc; ++ if (pirq == 0 || !(isr & irq2pcap[pirq])) ++ continue; ++ subdesc = irq_desc + pirq; ++ if (msr & irq2pcap[pirq]) ++ continue; ++ DEBUGP("found irq %u\n", pirq); ++ spin_unlock(&desc->lock); ++ desc_handle_irq(pirq, subdesc); ++ spin_lock(&desc->lock); ++ } ++ ++ } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); ++ ++ desc->status &= ~IRQ_INPROGRESS; ++out_unlock: ++ spin_unlock(&desc->lock); ++} ++ ++static int ezx_pcap_remove(struct platform_device *pdev) ++{ ++ int irq; ++ DEBUGP("exz_pcap_remove entered\n"); ++ ++ set_irq_chained_handler(pcap_irq, NULL); ++ ++ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) { ++ set_irq_chip(irq, NULL); ++ set_irq_handler(irq, NULL); ++ set_irq_flags(irq, 0); ++ } ++ ++ ssp_exit(&ezx_ssp_dev); ++ ++ return 0; ++} ++ ++static int __init ezx_pcap_probe(struct platform_device *pdev) ++{ ++ unsigned int ret, irq; ++ DEBUGP("ezx_pcap_probe entered\n"); ++ ++ pcap_data = pdev->dev.platform_data; ++ ++ /* configure ssp port */ ++ pxa_gpio_mode(29|GPIO_ALT_FN_3_OUT); ++ pxa_gpio_mode(GPIO24_SFRM_MD); ++ pxa_gpio_mode(GPIO25_STXD_MD); ++ pxa_gpio_mode(GPIO26_SRXD_MD); ++ ++ if (pcap_data->cs >= 0) { ++ if (pcap_data->flags & PCAP_CS_AH) ++ pxa_gpio_mode(pcap_data->cs | GPIO_OUT); ++ else ++ pxa_gpio_mode(pcap_data->cs | GPIO_OUT ++ | GPIO_DFLT_HIGH); ++ } ++ pcap_irq = platform_get_irq(pdev, 0); ++ if(pcap_irq < 0) { ++ printk(KERN_ERR "Unable to get IRQ for pcap!\n"); ++ return pcap_irq; ++ } ++ ++ ret = ssp_init(&ezx_ssp_dev, pcap_data->port, 0); ++ if (ret) { ++ printk(KERN_ERR "Unable to register SSP handler!\n"); ++ return ret; ++ } ++ ++ ssp_disable(&ezx_ssp_dev); ++ ssp_config(&ezx_ssp_dev, ++ (SSCR0_Motorola | SSCR0_DataSize(16) | SSCR0_EDSS), ++ (SSCR1_TxTresh(1) | SSCR1_RxTresh(1)), ++ 0, SSCR0_SerClkDiv(pcap_data->clk)); ++ ssp_enable(&ezx_ssp_dev); ++ ++ /* mask/ack all PCAP interrupts */ ++ ezx_pcap_write(PCAP_REG_MSR, PCAP_MASK_ALL_INTERRUPT); ++ ezx_pcap_write(PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER); ++ ++ if (pcap_data->init) ++ pcap_data->init(); ++ ++ /* set up interrupt demultiplexing code for PCAP2 irqs */ ++ set_irq_type(pcap_irq, IRQT_RISING); ++ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) { ++ set_irq_chip(irq, &pcap_chip); ++ set_irq_handler(irq, handle_level_irq); ++ set_irq_flags(irq, IRQF_VALID); ++ } ++ set_irq_chained_handler(pcap_irq, pcap_irq_demux_handler); ++ set_irq_wake(pcap_irq, 1); ++ ++ printk("ezx-pcap: ssp driver registered\n"); ++ return ret; ++} ++ ++static int ezx_pcap_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ DEBUGP("pcap suspend!\n"); ++ ssp_flush(&ezx_ssp_dev); ++ ssp_save_state(&ezx_ssp_dev, &ezx_ssp_state); ++ if (pcap_data->cs >= 0) ++ pxa_gpio_mode(pcap_data->cs | GPIO_IN); ++ return 0; ++} ++ ++static int ezx_pcap_resume(struct platform_device *dev) ++{ ++ DEBUGP("pcap resume!\n"); ++ ++ if (pcap_data->cs >= 0) { ++ if (pcap_data->flags & PCAP_CS_AH) { ++ pxa_gpio_mode(pcap_data->cs | GPIO_OUT); ++ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs); ++ } ++ else { ++ pxa_gpio_mode(pcap_data->cs | GPIO_OUT | GPIO_DFLT_HIGH); ++ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs); ++ } ++ } ++ ssp_restore_state(&ezx_ssp_dev,&ezx_ssp_state); ++ ssp_enable(&ezx_ssp_dev); ++ ++ ezx_pcap_write(PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER); ++ ++ return 0; ++} ++ ++static struct platform_driver ezxpcap_driver = { ++ .probe = ezx_pcap_probe, ++ .remove = ezx_pcap_remove, ++ .suspend = ezx_pcap_suspend, ++ .resume = ezx_pcap_resume, ++ .driver = { ++ .name = "ezx-pcap", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __init ezx_pcap_init(void) ++{ ++ DEBUGP("ezx_pcap_init entered\n"); ++ ++#ifdef CONFIG_PROC_FS ++ if((proc_pcap = create_proc_entry("pcap", 0, NULL))) ++ proc_pcap->read_proc = pcap_read_proc; ++#endif ++ ++ return platform_driver_register(&ezxpcap_driver); ++} ++ ++static void __exit ezx_pcap_exit(void) ++{ ++#ifdef CONFIG_PROC_FS ++ if (proc_pcap) ++ remove_proc_entry("pcap", NULL); ++#endif ++ ++ return platform_driver_unregister(&ezxpcap_driver); ++} ++ ++module_init(ezx_pcap_init); ++module_exit(ezx_pcap_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Harald Welte"); ++MODULE_DESCRIPTION("SPI Driver for Motorola PCAP2"); ++ +Index: linux-2.6.24/include/asm-arm/arch-pxa/ezx-pcap.h +=================================================================== +--- /dev/null ++++ linux-2.6.24/include/asm-arm/arch-pxa/ezx-pcap.h +@@ -0,0 +1,248 @@ ++/* ++ * Copyright 2007 Daniel Ribeiro ++ */ ++ ++#ifndef EZX_PCAP_H ++#define EZX_PCAP_H ++ ++struct pcap_platform_data { ++ int port; /* SSP port */ ++ int cs; /* CS gpio */ ++ int clk; ++ int flags; /* driver flags */ ++ int (*init)(void); /* board specific driver init */ ++}; ++ ++/* driver configuration */ ++#define PCAP_CS_AH (1 << 0) /* CS pin is active high */ ++#define PCAP_MCI_SD (1 << 1) /* SD card slot */ ++#define PCAP_MCI_TF (1 << 2) /* TF card slot */ ++ ++#define PCAP_REGISTER_WRITE_OP_BIT 0x80000000 ++#define PCAP_REGISTER_READ_OP_BIT 0x00000000 ++ ++#define PCAP_REGISTER_VALUE_MASK 0x01ffffff ++#define PCAP_REGISTER_ADDRESS_MASK 0x7c000000 ++#define PCAP_REGISTER_ADDRESS_SHIFT 26 ++#define PCAP_REGISTER_NUMBER 32 ++#define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff ++#define PCAP_MASK_ALL_INTERRUPT 0x01ffffff ++ ++ ++#define pbit(reg, bit) ((reg << PCAP_REGISTER_ADDRESS_SHIFT) | bit) ++ ++/* registers acessible by both pcap ports */ ++#define PCAP_REG_ISR 0x0 /* Interrupt Status */ ++#define PCAP_REG_MSR 0x1 /* Interrupt Mask */ ++#define PCAP_REG_PSTAT 0x2 /* Processor Status */ ++#define PCAP_REG_VREG2 0x6 /* Regulator Bank 2 Control */ ++#define PCAP_REG_AUXVREG 0x7 /* Auxiliary Regulator Control */ ++#define PCAP_REG_BATT 0x8 /* Battery Control */ ++#define PCAP_REG_ADC1 0x9 /* AD Control */ ++#define PCAP_REG_ADC2 0xa /* AD Result */ ++#define PCAP_REG_CODEC 0xb /* Audio Codec Control */ ++#define PCAP_REG_RX_AMPS 0xc /* RX Audio Amplifiers Control */ ++#define PCAP_REG_ST_DAC 0xd /* Stereo DAC Control */ ++#define PCAP_REG_BUSCTRL 0x14 /* Connectivity Control */ ++#define PCAP_REG_PERIPH 0x15 /* Peripheral Control */ ++#define PCAP_REG_LOWPWR 0x18 /* Regulator Low Power Control */ ++#define PCAP_REG_TX_AMPS 0x1a /* TX Audio Amplifiers Control */ ++#define PCAP_REG_GP 0x1b /* General Purpose */ ++ ++/* registers acessible by pcap port 1 only (a1200, e2 & e6) */ ++#define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */ ++#define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */ ++#define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */ ++#define PCAP_REG_RTC_TOD 0xe /* RTC Time of Day */ ++#define PCAP_REG_RTC_TODA 0xf /* RTC Time of Day Alarm */ ++#define PCAP_REG_RTC_DAY 0x10 /* RTC Day */ ++#define PCAP_REG_RTC_DAYA 0x11 /* RTC Day Alarm */ ++#define PCAP_REG_MTRTMR 0x12 /* AD Monitor Timer */ ++#define PCAP_REG_PWR 0x13 /* Power Control */ ++#define PCAP_REG_AUXVREG_MASK 0x16 /* Auxiliary Regulator Mask */ ++#define PCAP_REG_VENDOR_REV 0x17 ++#define PCAP_REG_PERIPH_MASK 0x19 /* Peripheral Mask */ ++ ++/* interrupts - registers 0, 1, 2, 3 */ ++#define PCAP_IRQ_ADCDONE (1 << 0) /* AD Conversion Done Port 1 */ ++#define PCAP_IRQ_TS (1 << 1) /* Touch Screen */ ++#define PCAP_IRQ_1HZ (1 << 2) /* 1HZ Timer */ ++#define PCAP_IRQ_WH (1 << 3) ++#define PCAP_IRQ_WL (1 << 4) ++#define PCAP_IRQ_TODA (1 << 5) ++#define PCAP_IRQ_USB4V (1 << 6) ++#define PCAP_IRQ_ONOFF (1 << 7) ++#define PCAP_IRQ_ONOFF2 (1 << 8) ++#define PCAP_IRQ_USB1V (1 << 9) ++#define PCAP_IRQ_MOBPORT (1 << 10) ++#define PCAP_IRQ_MB2 (1 << 11) /* Mic */ ++#define PCAP_IRQ_A1 (1 << 12) /* Audio jack */ ++#define PCAP_IRQ_ST (1 << 13) ++#define PCAP_IRQ_PC (1 << 14) ++#define PCAP_IRQ_WARM (1 << 15) ++#define PCAP_IRQ_EOL (1 << 16) ++#define PCAP_IRQ_CLK (1 << 17) ++#define PCAP_IRQ_SYSRST (1 << 18) ++#define PCAP_IRQ_ADCDONE2 (1 << 20) /* AD Conversion Done Port 2 */ ++#define PCAP_IRQ_SOFTRESET (1 << 21) ++#define PCAP_IRQ_MNEXB (1 << 22) ++ ++#define PCAP_BIT_VREG2_V1_STBY pbit(PCAP_REG_VREG2, (1 << 0)) ++#define PCAP_BIT_VREG2_V2_STBY pbit(PCAP_REG_VREG2, (1 << 1)) ++#define PCAP_BIT_VREG2_V3_STBY pbit(PCAP_REG_VREG2, (1 << 2)) ++#define PCAP_BIT_VREG2_V4_STBY pbit(PCAP_REG_VREG2, (1 << 3)) ++#define PCAP_BIT_VREG2_V5_STBY pbit(PCAP_REG_VREG2, (1 << 4)) ++#define PCAP_BIT_VREG2_V6_STBY pbit(PCAP_REG_VREG2, (1 << 5)) ++#define PCAP_BIT_VREG2_V7_STBY pbit(PCAP_REG_VREG2, (1 << 6)) ++#define PCAP_BIT_VREG2_V8_STBY pbit(PCAP_REG_VREG2, (1 << 7)) ++#define PCAP_BIT_VREG2_V9_STBY pbit(PCAP_REG_VREG2, (1 << 8)) ++#define PCAP_BIT_VREG2_V10_STBY pbit(PCAP_REG_VREG2, (1 << 9)) ++#define PCAP_BIT_VREG2_V1_LOWPWR pbit(PCAP_REG_VREG2, (1 << 10)) ++#define PCAP_BIT_VREG2_V2_LOWPWR pbit(PCAP_REG_VREG2, (1 << 11)) ++#define PCAP_BIT_VREG2_V3_LOWPWR pbit(PCAP_REG_VREG2, (1 << 12)) ++#define PCAP_BIT_VREG2_V4_LOWPWR pbit(PCAP_REG_VREG2, (1 << 13)) ++#define PCAP_BIT_VREG2_V5_LOWPWR pbit(PCAP_REG_VREG2, (1 << 14)) ++#define PCAP_BIT_VREG2_V6_LOWPWR pbit(PCAP_REG_VREG2, (1 << 15)) ++#define PCAP_BIT_VREG2_V7_LOWPWR pbit(PCAP_REG_VREG2, (1 << 16)) ++#define PCAP_BIT_VREG2_V8_LOWPWR pbit(PCAP_REG_VREG2, (1 << 17)) ++#define PCAP_BIT_VREG2_V9_LOWPWR pbit(PCAP_REG_VREG2, (1 << 18)) ++#define PCAP_BIT_VREG2_V10_LOWPWR pbit(PCAP_REG_VREG2, (1 << 19)) ++ ++#define PCAP_BIT_AUXVREG_VAUX1_EN pbit(PCAP_REG_AUXVREG, (1 << 1)) ++#define PCAP_AUXVREG_VAUX1_MASK 0x0000000c ++#define PCAP_AUXVREG_VAUX1_SHIFT 2 ++#define PCAP_BIT_AUXVREG_VAUX2_EN pbit(PCAP_REG_AUXVREG, (1 << 4)) ++#define PCAP_AUXVREG_VAUX2_MASK 0x00000060 ++#define PCAP_AUXVREG_VAUX2_SHIFT 5 ++#define PCAP_BIT_AUXVREG_VAUX3_EN pbit(PCAP_REG_AUXVREG, (1 << 7)) ++#define PCAP_AUXVREG_VAUX3_MASK 0x00000f00 ++#define PCAP_AUXVREG_VAUX3_SHIFT 8 ++#define PCAP_BIT_AUXVREG_VAUX4_EN pbit(PCAP_REG_AUXVREG, (1 << 12)) ++#define PCAP_AUXVREG_VAUX4_MASK 0x00006000 ++#define PCAP_AUXVREG_VAUX4_SHIFT 13 ++#define PCAP_BIT_AUXVREG_VSIM2_EN pbit(PCAP_REG_AUXVREG, (1 << 16)) ++#define PCAP_BIT_AUXVREG_VSIM_EN pbit(PCAP_REG_AUXVREG, (1 << 17)) ++#define PCAP_BIT_AUXVREG_VSIM_0 pbit(PCAP_REG_AUXVREG, (1 << 18)) ++#define PCAP_BIT_AUXVREG_V_VIB_EN pbit(PCAP_REG_AUXVREG, (1 << 19)) ++#define PCAP_AUXVREG_V_VIB_MASK 0x00300000 ++#define PCAP_AUXVREG_V_VIB_SHIFT 20 ++#define PCAP_BIT_AUXVREG_VAUX1_STBY pbit(PCAP_REG_AUXVREG, (1 << 22)) ++#define PCAP_BIT_AUXVREG_VAUX1_LOWPWR pbit(PCAP_REG_AUXVREG, (1 << 23)) ++#define PCAP_BIT_AUXVREG_SW3_STBY pbit(PCAP_REG_AUXVREG, (1 << 24)) ++ ++#define PCAP_BATT_DAC_MASK 0x000000ff ++#define PCAP_BATT_DAC_SHIFT 0 ++#define PCAP_BIT_BATT_B_FDBK pbit(PCAP_REG_BATT, (1 << 8)) ++#define PCAP_BIT_BATT_EXT_ISENSE pbit(PCAP_REG_BATT, (1 << 9)) ++#define PCAP_BATT_V_COIN_MASK 0x00003c00 ++#define PCAP_BATT_V_COIN_SHIFT 10 ++#define PCAP_BIT_BATT_I_COIN pbit(PCAP_REG_BATT, (1 << 14)) ++#define PCAP_BIT_BATT_COIN_CH_EN pbit(PCAP_REG_BATT, (1 << 15)) ++#define PCAP_BATT_EOL_SEL_MASK 0x000e0000 ++#define PCAP_BATT_EOL_SEL_SHIFT 17 ++#define PCAP_BIT_BATT_EOL_CMP_EN pbit(PCAP_REG_BATT, (1 << 20)) ++#define PCAP_BIT_BATT_BATT_DET_EN pbit(PCAP_REG_BATT, (1 << 21)) ++#define PCAP_BIT_BATT_THERMBIAS_CTRL pbit(PCAP_REG_BATT, (1 << 22)) ++ ++#define PCAP_BIT_ADC1_ADEN pbit(PCAP_REG_ADC1, (1 << 0)) ++#define PCAP_BIT_ADC1_RAND pbit(PCAP_REG_ADC1, (1 << 1)) ++#define PCAP_BIT_ADC1_AD_SEL1 pbit(PCAP_REG_ADC1, (1 << 2)) ++#define PCAP_BIT_ADC1_AD_SEL2 pbit(PCAP_REG_ADC1, (1 << 3)) ++#define PCAP_ADC1_ADA1_MASK 0x00000070 ++#define PCAP_ADC1_ADA1_SHIFT 4 ++#define PCAP_ADC1_ADA2_MASK 0x00000380 ++#define PCAP_ADC1_ADA2_SHIFT 7 ++#define PCAP_ADC1_ATO_MASK 0x00003c00 ++#define PCAP_ADC1_ATO_SHIFT 10 ++#define PCAP_BIT_ADC1_ATOX pbit(PCAP_REG_ADC1, (1 << 14)) ++#define PCAP_BIT_ADC1_MTR1 pbit(PCAP_REG_ADC1, (1 << 15)) ++#define PCAP_BIT_ADC1_MTR2 pbit(PCAP_REG_ADC1, (1 << 16)) ++#define PCAP_ADC1_TS_M_MASK 0x000e0000 ++#define PCAP_ADC1_TS_M_SHIFT 17 ++#define PCAP_BIT_ADC1_TS_REF_LOWPWR pbit(PCAP_REG_ADC1, (1 << 20)) ++#define PCAP_BIT_ADC1_TS_REFENB pbit(PCAP_REG_ADC1, (1 << 21)) ++#define PCAP_BIT_ADC1_BATT_I_POLARITY pbit(PCAP_REG_ADC1, (1 << 22)) ++#define PCAP_BIT_ADC1_BATT_I_ADC pbit(PCAP_REG_ADC1, (1 << 23)) ++ ++#define PCAP_ADC2_ADD1_MASK 0x000003ff ++#define PCAP_ADC2_ADD1_SHIFT 0 ++#define PCAP_ADC2_ADD2_MASK 0x000ffc00 ++#define PCAP_ADC2_ADD2_SHIFT 10 ++#define PCAP_BIT_ADC2_ADINC1 pbit(PCAP_REG_ADC2, (1 << 20)) ++#define PCAP_BIT_ADC2_ADINC2 pbit(PCAP_REG_ADC2, (1 << 21)) ++#define PCAP_BIT_ADC2_ASC pbit(PCAP_REG_ADC2, (1 << 22)) ++ ++#define PCAP_BIT_BUSCTRL_FSENB 0x50000001 ++#define PCAP_BIT_BUSCTRL_USB_SUSPEND 0x50000002 ++#define PCAP_BIT_BUSCTRL_USB_PU 0x50000004 ++#define PCAP_BIT_BUSCTRL_USB_PD 0x50000008 ++#define PCAP_BIT_BUSCTRL_VUSB_EN 0x50000010 ++#define PCAP_BIT_BUSCTRL_USB_PS 0x50000020 ++#define PCAP_BIT_BUSCTRL_VUSB_MSTR_EN 0x50000040 ++#define PCAP_BIT_BUSCTRL_VBUS_PD_ENB 0x50000080 ++#define PCAP_BIT_BUSCTRL_CURRLIM 0x50000100 ++#define PCAP_BIT_BUSCTRL_RS232ENB 0x50000200 ++#define PCAP_BIT_BUSCTRL_RS232_DIR 0x50000400 ++#define PCAP_BIT_BUSCTRL_SE0_CONN 0x50000800 ++#define PCAP_BIT_BUSCTRL_USB_PDM 0x50001000 ++#define PCAP_BIT_BUSCTRL_BUS_PRI_ADJ 0x51000000 ++ ++#define PCAP_BIT_PERIPH_BL_CTRL0 0x54000001 ++#define PCAP_BIT_PERIPH_BL_CTRL1 0x54000002 ++#define PCAP_BIT_PERIPH_BL_CTRL2 0x54000004 ++#define PCAP_BIT_PERIPH_BL_CTRL3 0x54000008 ++#define PCAP_BIT_PERIPH_BL_CTRL4 0x54000010 ++#define PCAP_BIT_PERIPH_LEDR_EN 0x54000020 ++#define PCAP_BIT_PERIPH_LEDG_EN 0x54000040 ++#define PCAP_BIT_PERIPH_LEDR_CTRL0 0x54000080 ++#define PCAP_BIT_PERIPH_LEDR_CTRL1 0x54000100 ++#define PCAP_BIT_PERIPH_LEDR_CTRL2 0x54000200 ++#define PCAP_BIT_PERIPH_LEDR_CTRL3 0x54000400 ++#define PCAP_BIT_PERIPH_LEDG_CTRL0 0x54000800 ++#define PCAP_BIT_PERIPH_LEDG_CTRL1 0x54001000 ++#define PCAP_BIT_PERIPH_LEDG_CTRL2 0x54002000 ++#define PCAP_BIT_PERIPH_LEDG_CTRL3 0x54004000 ++#define PCAP_BIT_PERIPH_LEDR_I0 0x54008000 ++#define PCAP_BIT_PERIPH_LEDR_I1 0x54010000 ++#define PCAP_BIT_PERIPH_LEDG_I0 0x54020000 ++#define PCAP_BIT_PERIPH_LEDG_I1 0x54040000 ++#define PCAP_BIT_PERIPH_SKIP 0x54080000 ++#define PCAP_BIT_PERIPH_BL2_CTRL0 0x54100000 ++#define PCAP_BIT_PERIPH_BL2_CTRL1 0x54200000 ++#define PCAP_BIT_PERIPH_BL2_CTRL2 0x54400000 ++#define PCAP_BIT_PERIPH_BL2_CTRL3 0x54800000 ++#define PCAP_BIT_PERIPH_BL2_CTRL4 0x55000000 ++ ++#define PCAP_BIT_LOWPWR_VAUX2_STBY 0x60000001 ++#define PCAP_BIT_LOWPWR_VAUX2_LOWPWR 0x60000002 ++#define PCAP_BIT_LOWPWR_VAUX3_STBY 0x60000004 ++#define PCAP_BIT_LOWPWR_VAUX3_LOWPWR 0x60000008 ++#define PCAP_BIT_LOWPWR_VAUX4_STBY 0x60000010 ++#define PCAP_BIT_LOWPWR_VAUX4_LOWPWR 0x60000020 ++#define PCAP_BIT_LOWPWR_VSIM_LOWPWR 0x60000040 ++#define PCAP_BIT_LOWPWR_VSIM2_LOWPWR 0x60000080 ++#define PCAP_BIT_LOWPWR_SW1_MODE00 0x60000100 ++#define PCAP_BIT_LOWPWR_SW1_MODE01 0x60000200 ++#define PCAP_BIT_LOWPWR_SW1_MODE10 0x60000400 ++#define PCAP_BIT_LOWPWR_SW1_MODE11 0x60000800 ++#define PCAP_BIT_LOWPWR_SW10_DVS 0x60001000 ++#define PCAP_BIT_LOWPWR_SW11_DVS 0x60002000 ++#define PCAP_BIT_LOWPWR_SW12_DVS 0x60004000 ++#define PCAP_BIT_LOWPWR_SW13_DVS 0x60008000 ++#define PCAP_BIT_LOWPWR_SW2_MODE00 0x60010000 ++#define PCAP_BIT_LOWPWR_SW2_MODE01 0x60020000 ++#define PCAP_BIT_LOWPWR_SW2_MODE10 0x60040000 ++#define PCAP_BIT_LOWPWR_SW2_MODE11 0x60080000 ++#define PCAP_BIT_LOWPWR_SW20_DVS 0x60100000 ++#define PCAP_BIT_LOWPWR_SW21_DVS 0x60200000 ++#define PCAP_BIT_LOWPWR_SW22_DVS 0x60400000 ++#define PCAP_BIT_LOWPWR_SW23_DVS 0x60800000 ++#define PCAP_BIT_LOWPWR_VC_STBY 0x61000000 ++ ++extern int ezx_pcap_write(u_int8_t, u_int32_t); ++extern int ezx_pcap_read(u_int8_t, u_int32_t *); ++extern int ezx_pcap_bit_set(u_int32_t, u_int8_t); ++extern int ezx_pcap_bit_get(u_int32_t); ++extern int ezx_pcap_read_bit(u_int32_t); ++extern void ezx_pcap_vibrator_level(u_int32_t); ++#endif +Index: linux-2.6.24/include/asm-arm/arch-pxa/irqs.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/arch-pxa/irqs.h ++++ linux-2.6.24/include/asm-arm/arch-pxa/irqs.h +@@ -89,7 +89,7 @@ + * within sensible limits. + */ + #define IRQ_BOARD_START (PXA_GPIO_IRQ_BASE + PXA_GPIO_IRQ_NUM) +-#define IRQ_BOARD_END (IRQ_BOARD_START + 16) ++#define IRQ_BOARD_END (IRQ_BOARD_START + 22) + + #define IRQ_SA1111_START (IRQ_BOARD_END) + #define IRQ_GPAIN0 (IRQ_BOARD_END + 0) +@@ -180,7 +180,8 @@ + #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1) + #elif defined(CONFIG_ARCH_LUBBOCK) || \ + defined(CONFIG_MACH_LOGICPD_PXA270) || \ +- defined(CONFIG_MACH_MAINSTONE) ++ defined(CONFIG_MACH_MAINSTONE) || \ ++ defined(CONFIG_PXA_EZX) + #define NR_IRQS (IRQ_BOARD_END) + #else + #define NR_IRQS (IRQ_BOARD_START) +@@ -227,6 +228,31 @@ + #define IRQ_LOCOMO_LT_BASE (IRQ_BOARD_START + 2) + #define IRQ_LOCOMO_SPI_BASE (IRQ_BOARD_START + 3) + ++/* EZX Interrupts (CONFIG_EZX) */ ++#define EZX_IRQ(x) (IRQ_BOARD_START + (x)) ++#define EZX_IRQ_USB4V EZX_IRQ(0) /* EMU */ ++#define EZX_IRQ_USB1V EZX_IRQ(1) /* EMU */ ++#define EZX_IRQ_HEADJACK EZX_IRQ(2) /* Audio connector */ ++#define EZX_IRQ_MIC EZX_IRQ(3) /* Audio connector */ ++#define EZX_IRQ_ADCDONE EZX_IRQ(4) ++#define EZX_IRQ_TS EZX_IRQ(5) /* TS touch */ ++#define EZX_IRQ_ADCDONE2 EZX_IRQ(6) /* TS x/y ADC ready */ ++#define EZX_IRQ_WH EZX_IRQ(7) ++#define EZX_IRQ_WL EZX_IRQ(8) ++#define EZX_IRQ_ONOFF EZX_IRQ(9) ++#define EZX_IRQ_ONOFF2 EZX_IRQ(10) ++#define EZX_IRQ_MOBPORT EZX_IRQ(11) ++#define EZX_IRQ_TODA EZX_IRQ(12) ++#define EZX_IRQ_1HZ EZX_IRQ(13) ++#define EZX_IRQ_MNEXB EZX_IRQ(14) ++#define EZX_IRQ_ST EZX_IRQ(15) ++#define EZX_IRQ_PC EZX_IRQ(16) ++#define EZX_IRQ_SYSRST EZX_IRQ(17) ++#define EZX_IRQ_SOFTRESET EZX_IRQ(18) ++#define EZX_IRQ_EOL EZX_IRQ(19) ++#define EZX_IRQ_CLK EZX_IRQ(20) ++#define EZX_IRQ_WARM EZX_IRQ(21) ++ + /* ITE8152 irqs */ + /* add IT8152 IRQs beyond BOARD_END */ + #ifdef CONFIG_PCI_HOST_ITE8152 +Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig ++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig +@@ -139,6 +139,9 @@ + This enables control code for the BP (baseband processor) found in + Motorola's EZX smartphone platform. + ++config EZX_PCAP ++ bool "PCAP Support" ++ + endif + + endmenu +Index: linux-2.6.24/arch/arm/mach-pxa/Makefile +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile ++++ linux-2.6.24/arch/arm/mach-pxa/Makefile +@@ -37,6 +37,7 @@ + obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o + obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o + obj-$(CONFIG_EZX_BP) += ezx-bp.o ++obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o + + # Support for blinky lights + led-y := leds.o diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch new file mode 100644 index 0000000000..cc08fddfc6 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch @@ -0,0 +1,108 @@ +Index: linux-2.6.24/arch/arm/mach-pxa/pxa27x.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/pxa27x.c ++++ linux-2.6.24/arch/arm/mach-pxa/pxa27x.c +@@ -25,6 +25,10 @@ + #include + #include + ++#ifdef CONFIG_PXA_EZX ++#include ++#endif ++ + #include "generic.h" + #include "devices.h" + #include "clock.h" +@@ -231,7 +235,12 @@ + void pxa27x_cpu_pm_restore(unsigned long *sleep_save) + { + /* ensure not to come back here if it wasn't intended */ ++#ifdef CONFIG_PXA_EZX ++ *(unsigned long *)(phys_to_virt(RESUME_ADDR)) = 0; ++ *(unsigned long *)(phys_to_virt(FLAG_ADDR)) = OFF_FLAG; ++#else + PSPR = 0; ++#endif + + /* restore registers */ + RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); +@@ -281,7 +290,13 @@ + break; + case PM_SUSPEND_MEM: + /* set resume return address */ ++#ifdef CONFIG_PXA_EZX ++ /* set EZX flags for blob - WM */ ++ *(unsigned long *)(phys_to_virt(RESUME_ADDR)) = virt_to_phys(pxa_cpu_resume); ++ *(unsigned long *)(phys_to_virt(FLAG_ADDR)) = SLEEP_FLAG; ++#else + PSPR = virt_to_phys(pxa_cpu_resume); ++#endif + pxa27x_cpu_suspend(PWRMODE_SLEEP); + break; + } +Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c ++++ linux-2.6.24/arch/arm/mach-pxa/ezx.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -108,8 +109,53 @@ + &ezxbp_device, + }; + ++/* PM */ ++extern int bp_handshake_passed(void); ++ ++static void ezx_reboot_poweroff(char mode) ++{ ++ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = NO_FLAG; ++ cpu_proc_fin(); ++ ++#ifdef CONFIG_EZX_BP ++ if (pxa_gpio_get_value(GPIO_BB_WDI) == 0) { ++ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = WDI_FLAG; ++ ++ /* reset BP */ ++ pxa_gpio_set_value(GPIO_BB_RESET, 0); ++ mdelay(1); ++ pxa_gpio_set_value(GPIO_BB_RESET, 1); ++ ++ if (mode == 'z') { ++ arch_reset('h'); ++ while (1); ++ } ++ } ++#endif ++ if (mode == 'z') ++ /* Panic! Ask PCAP to turn both processors off */ ++ pxa_gpio_set_value(GPIO_WDI_AP, 0); ++ else ++ arm_machine_restart(mode); ++ ++ while (1); ++} ++ ++static inline void ezx_poweroff(void) ++{ ++ ezx_reboot_poweroff('z'); ++} ++ ++static inline void ezx_restart(char mode) ++{ ++ ezx_reboot_poweroff(mode); ++} ++ + static int __init ezx_init(void) + { ++ pm_power_off = ezx_poweroff; ++ arm_pm_restart = ezx_restart; ++ + CKEN = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC); + + pxa_gpio_mode(GPIO_ICL_FFRXD_MD); diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch new file mode 100644 index 0000000000..efff7e06a5 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch @@ -0,0 +1,45 @@ +Work around some errata in the pxa serial code (copied from motorolas 2.4.x tree) + +Index: linux-2.6.24/drivers/serial/pxa.c +=================================================================== +--- linux-2.6.24.orig/drivers/serial/pxa.c ++++ linux-2.6.24/drivers/serial/pxa.c +@@ -29,6 +29,10 @@ + #define SUPPORT_SYSRQ + #endif + ++#define pxa_buggy_port(x) ({ \ ++ int cpu_ver; asm("mrc%? p15, 0, %0, c0, c0" : "=r" (cpu_ver)); \ ++ ((x) == PORT_PXA && (cpu_ver & ~1) == 0x69052100); }) ++ + #include + #include + #include +@@ -196,7 +200,7 @@ + if (uart_circ_empty(xmit)) + serial_pxa_stop_tx(&up->port); + } +- ++static inline irqreturn_t serial_pxa_irq(int, void *); + static void serial_pxa_start_tx(struct uart_port *port) + { + struct uart_pxa_port *up = (struct uart_pxa_port *)port; +@@ -204,6 +208,8 @@ + if (!(up->ier & UART_IER_THRI)) { + up->ier |= UART_IER_THRI; + serial_out(up, UART_IER, up->ier); ++ if (pxa_buggy_port(up->port.type)) ++ serial_pxa_irq(up->port.irq, NULL); + } + } + +@@ -299,6 +305,9 @@ + + mcr |= up->mcr; + ++ if (pxa_buggy_port(up->port.type) && up->port.irq != 0) ++ mcr ^= UART_MCR_OUT2; ++ + serial_out(up, UART_MCR, mcr); + } + diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch new file mode 100644 index 0000000000..716ef86fd1 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch @@ -0,0 +1,20 @@ +Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c +=================================================================== +--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 00:10:32.000000000 +0100 ++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 00:42:23.000000000 +0100 +@@ -811,7 +811,6 @@ + /*init the related mux interface*/ + if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) { + err("usb_ipc_init: Out of memory."); +- usb_deregister(&usb_ipc_driver); + return -ENOMEM; + } + bvd_dbg("usb_ipc_init: Address of bvd_ipc:%p", bvd_ipc); +@@ -819,7 +818,6 @@ + if (!(bvd_ipc->xmit.buf = kmalloc(IPC_USB_XMIT_SIZE, GFP_KERNEL))) { + err("usb_ipc_init: Not enough memory for the input buffer."); + kfree(bvd_ipc); +- usb_deregister(&usb_ipc_driver); + return -ENOMEM; + } + bvd_dbg("usb_ipc_init: bvd_ipc->xmit.buf address:%p", diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch new file mode 100644 index 0000000000..9e5ae18263 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch @@ -0,0 +1,14 @@ +Index: linux-2.6.23/drivers/char/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/char/Makefile 2007-10-22 22:26:50.000000000 +0200 ++++ linux-2.6.23/drivers/char/Makefile 2007-10-22 22:26:59.000000000 +0200 +@@ -111,7 +111,8 @@ + obj-$(CONFIG_JS_RTC) += js-rtc.o + js-rtc-y = rtc.o + +-obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o ts0710_mux_usb.o ++obj-$(CONFIG_TS0710_MUX_USB) += ts0710_mux_usb.o ++obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o + + + # Files generated that shall be removed upon make clean diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch new file mode 100644 index 0000000000..2e1aabd952 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch @@ -0,0 +1,125 @@ +Index: linux-2.6.20.7/drivers/char/ts0710_mux.c +=================================================================== +--- linux-2.6.20.7.orig/drivers/char/ts0710_mux.c 2007-04-22 10:51:31.000000000 +0200 ++++ linux-2.6.20.7/drivers/char/ts0710_mux.c 2007-04-22 10:53:05.000000000 +0200 +@@ -241,7 +241,8 @@ + static volatile __u8 mux_recv_info_flags[NR_MUXS]; + static mux_recv_struct *mux_recv_queue = NULL; + +-static struct tty_driver mux_driver; ++// Local for 2.6? ++static struct tty_driver *mux_driver; + + #ifdef USB_FOR_MUX + #define COMM_FOR_MUX_DRIVER usb_for_mux_driver +@@ -3007,6 +3008,7 @@ + #else + mux_tty[line]++; + dlci = tty2dlci[line]; ++ mux_table[line] = tty; + + /* if( dlci == 1 ) { */ + /* Open server channel 0 first */ +@@ -3087,6 +3089,7 @@ + } + } + ++ + retval = 0; + #endif + out: +@@ -3894,43 +3897,50 @@ + INIT_WORK(&receive_tqueue, receive_worker, NULL); + INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL); + +- memset(&mux_driver, 0, sizeof(struct tty_driver)); +- memset(&mux_tty, 0, sizeof(mux_tty)); +- mux_driver.magic = TTY_DRIVER_MAGIC; +- mux_driver.driver_name = "ts0710mux"; +- mux_driver.name = "ts0710mux"; +- mux_driver.major = TS0710MUX_MAJOR; +- mux_driver.minor_start = TS0710MUX_MINOR_START; +- mux_driver.num = NR_MUXS; +- mux_driver.type = TTY_DRIVER_TYPE_SERIAL; +- mux_driver.subtype = SERIAL_TYPE_NORMAL; +- mux_driver.init_termios = tty_std_termios; +- mux_driver.init_termios.c_iflag = 0; +- mux_driver.init_termios.c_oflag = 0; +- mux_driver.init_termios.c_cflag = B38400 | CS8 | CREAD; +- mux_driver.init_termios.c_lflag = 0; +- mux_driver.flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW; +- +- mux_driver.ttys = mux_table; +- mux_driver.termios = mux_termios; +- mux_driver.termios_locked = mux_termios_locked; ++ mux_driver = alloc_tty_driver(NR_MUXS); ++ if (!mux_driver) ++ return -ENOMEM; ++ ++ mux_driver->owner = THIS_MODULE; ++ mux_driver->driver_name = "ts0710mux"; ++ mux_driver->name = "mux"; ++ mux_driver->devfs_name = "mux"; ++ mux_driver->major = TS0710MUX_MAJOR; ++ mux_driver->minor_start = TS0710MUX_MINOR_START; ++ mux_driver->type = TTY_DRIVER_TYPE_SERIAL; ++ mux_driver->subtype = SERIAL_TYPE_NORMAL; ++ mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW; ++ ++ mux_driver->init_termios = tty_std_termios; ++ mux_driver->init_termios.c_iflag = 0; ++ mux_driver->init_termios.c_oflag = 0; ++ mux_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; ++ mux_driver->init_termios.c_lflag = 0; ++ ++// mux_driver.ttys = mux_table; ++ mux_driver->termios = mux_termios; ++ mux_driver->termios_locked = mux_termios_locked; + // mux_driver.driver_state = mux_state; +- mux_driver.other = NULL; ++ mux_driver->other = NULL; + +- mux_driver.open = mux_open; +- mux_driver.close = mux_close; +- mux_driver.write = mux_write; +- mux_driver.write_room = mux_write_room; +- mux_driver.flush_buffer = mux_flush_buffer; +- mux_driver.chars_in_buffer = mux_chars_in_buffer; +- mux_driver.throttle = mux_throttle; +- mux_driver.unthrottle = mux_unthrottle; +- mux_driver.ioctl = mux_ioctl; +- mux_driver.owner = THIS_MODULE; ++ mux_driver->open = mux_open; ++ mux_driver->close = mux_close; ++ mux_driver->write = mux_write; ++ mux_driver->write_room = mux_write_room; ++ mux_driver->flush_buffer = mux_flush_buffer; ++ mux_driver->chars_in_buffer = mux_chars_in_buffer; ++ mux_driver->throttle = mux_throttle; ++ mux_driver->unthrottle = mux_unthrottle; ++ mux_driver->ioctl = mux_ioctl; + +- if (tty_register_driver(&mux_driver)) ++ // FIXME: No panic() here ++ if (tty_register_driver(mux_driver)) + panic("Couldn't register mux driver"); + ++ for (j=0; jcur_altsetting->desc; +- endpoint = &intf->cur_altsetting->endpoint[0].desc; + /* Start checking for two bulk endpoints or ... FIXME: This is a future + * enhancement...*/ + bvd_dbg("usb_ipc_probe: Number of Endpoints:%d", +@@ -638,30 +637,26 @@ + + ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0; + +- bvd_dbg("usb_ipc_probe: endpoint[0] is:%x", +- (&endpoint[0])->bEndpointAddress); +- bvd_dbg("usb_ipc_probe: endpoint[1] is:%x ", +- (&endpoint[1])->bEndpointAddress); +- + while (ep_cnt < interface->bNumEndpoints) { +- +- if (!have_bulk_in_mux && IS_EP_BULK_IN(endpoint[ep_cnt])) { +- bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is:%x ", +- (&endpoint[ep_cnt])->bEndpointAddress); +- have_bulk_in_mux = +- (&endpoint[ep_cnt])->bEndpointAddress; +- readsize = (&endpoint[ep_cnt])->wMaxPacketSize; ++ endpoint = &intf->cur_altsetting->endpoint[ep_cnt].desc; ++ bvd_dbg("usb_ipc_probe: endpoint[%i] is: %x", ep_cnt, ++ endpoint->bEndpointAddress); ++ ++ if (!have_bulk_in_mux && IS_EP_BULK_IN(*endpoint)) { ++ bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is: %x ", ++ endpoint->bEndpointAddress); ++ have_bulk_in_mux = endpoint->bEndpointAddress; ++ readsize = endpoint->wMaxPacketSize; + bvd_dbg("usb_ipc_probe: readsize=%d", readsize); + ep_cnt++; + continue; + } + +- if (!have_bulk_out_mux && IS_EP_BULK_OUT(endpoint[ep_cnt])) { +- bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is:%x ", +- (&endpoint[ep_cnt])->bEndpointAddress); +- have_bulk_out_mux = +- (&endpoint[ep_cnt])->bEndpointAddress; +- writesize = (&endpoint[ep_cnt])->wMaxPacketSize; ++ if (!have_bulk_out_mux && IS_EP_BULK_OUT(*endpoint)) { ++ bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is: %x ", ++ endpoint->bEndpointAddress); ++ have_bulk_out_mux = endpoint->bEndpointAddress; ++ writesize = endpoint->wMaxPacketSize; + bvd_dbg("usb_ipc_probe: writesize=%d", writesize); + ep_cnt++; + continue; +@@ -718,21 +713,27 @@ + bvd_ipc->bh_bp.func = usbipc_bh_bp_func; + bvd_ipc->bh_bp.data = (unsigned long) bvd_ipc; + ++ bvd_dbg("after assignements"); + /*Build a write urb*/ ++ usb_init_urb(&bvd_ipc->writeurb_mux); + usb_fill_bulk_urb(&bvd_ipc->writeurb_mux, usbdev, + usb_sndbulkpipe(bvd_ipc->ipc_dev, + bvd_ipc->bulk_out_ep_mux), + bvd_ipc->obuf, writesize, usb_ipc_write_bulk, + bvd_ipc); + //bvd_ipc->writeurb_mux.transfer_flags |= USB_ASYNC_UNLINK; ++ bvd_dbg("after write urb"); + + /*Build a read urb and send a IN token first time*/ ++ usb_init_urb(&bvd_ipc->readurb_mux); + usb_fill_bulk_urb(&bvd_ipc->readurb_mux, usbdev, + usb_rcvbulkpipe(usbdev, bvd_ipc->bulk_in_ep_mux), + bvd_ipc->ibuf, readsize, usb_ipc_read_bulk, bvd_ipc); + //bvd_ipc->readurb_mux.transfer_flags |= USB_ASYNC_UNLINK; ++ bvd_dbg("after read urb"); + +- usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc); ++ //usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc); ++ bvd_dbg("after claim interface"); + //usb_driver_claim_interface(&usb_ipc_driver, &ipccfg->interface[1], bvd_ipc); + + // a2590c: dsplog is not supported by this driver +@@ -740,6 +741,8 @@ + // &ipccfg->interface[2], bvd_ipc); + /*send a IN token first time*/ + bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; ++ bvd_dbg("after assignement"); ++ + if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) + printk("usb_ipc_prob: usb_submit_urb(read mux bulk) failed!\n"); + +@@ -750,7 +753,7 @@ + tasklet_schedule(&bvd_ipc->bh); + } + +- printk("usb_ipc_probe: completed probe!"); ++ printk("usb_ipc_probe: completed probe!\n"); + usb_set_intfdata(intf, &bvd_ipc); + return 0; + } +@@ -760,21 +763,23 @@ + //struct usb_device *usbdev = interface_to_usbdev(intf); + struct ipc_usb_data *bvd_ipc_disconnect = usb_get_intfdata(intf); + +- printk("usb_ipc_disconnect:*** \n"); + ++ printk("usb_ipc_disconnect. bvd_ipc_disconnect address: %p\n", bvd_ipc_disconnect); ++ ++ //FIXME: Memory leak? + if ((UHCRHPS3 & 0x4) == 0) +- usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux); ++ // usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux); + +- usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux); ++ //usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux); + + bvd_ipc_disconnect->ipc_flag = IPC_USB_PROBE_NOT_READY; + kfree(bvd_ipc_disconnect->ibuf); + kfree(bvd_ipc_disconnect->obuf); + +- usb_driver_release_interface(&usb_ipc_driver, +- bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]); +- usb_driver_release_interface(&usb_ipc_driver, +- bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]); ++ //usb_driver_release_interface(&usb_ipc_driver, ++ // bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]); ++ //usb_driver_release_interface(&usb_ipc_driver, ++ // bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]); + + //a2590c: dsplog interface is not supported by this driver + //usb_driver_release_interface(&usb_ipc_driver, &bvd_ipc_disconnect->ipc_dev->actconfig->interface[2]); +@@ -803,13 +808,6 @@ + int result; + + bvd_dbg("init usb_ipc"); +- /* register driver at the USB subsystem */ +- result = usb_register(&usb_ipc_driver); +- if (result < 0) { +- err ("usb ipc driver could not be registered"); +- return result; +- } +- + /*init the related mux interface*/ + if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) { + err("usb_ipc_init: Out of memory."); +@@ -836,6 +834,14 @@ + usb_for_mux_driver = &ipcusb_tty_driver; + usb_for_mux_tty = &ipcusb_tty; + ++ /* register driver at the USB subsystem */ ++ // this was called before bvd_ipc was allocated ++ result = usb_register(&usb_ipc_driver); ++ if (result < 0) { ++ err ("usb ipc driver could not be registered"); ++ return result; ++ } ++ + /* init timers for ipcusb read process and usb suspend */ + init_timer(&ipcusb_timer); + ipcusb_timer.function = ipcusb_timeout; diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch new file mode 100644 index 0000000000..a3a6a8249a --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch @@ -0,0 +1,99 @@ +Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c +=================================================================== +--- linux-2.6.21.orig/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:33.000000000 +0200 ++++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:45.000000000 +0200 +@@ -35,10 +35,14 @@ + #include + #include + #include ++ ++#ifdef CONFIG_PXA_EZX + #include + #include + #include + #include ++#endif ++ + #include + #include + #include +@@ -341,8 +345,10 @@ + + static void wakeup_timeout(unsigned long data) + { ++#ifdef CONFIG_PXA_EZX + GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); + bvd_dbg("wakup_timeout: send GPIO_MCU_INT_SW signal!"); ++#endif + } + + static void suspend_timeout(unsigned long data) +@@ -353,10 +359,12 @@ + bvd_dbg("suspend_timeout: add the suspend timer again"); + } else { + unlink_urbs(&bvd_ipc->readurb_mux); ++#ifdef CONFIG_PXA_EZX + UHCRHPS3 = 0x4; + mdelay(40); + bvd_dbg("suspend_timeout: send SUSPEND signal! UHCRHPS3=0x%x", + UHCRHPS3); ++#endif + } + } + +@@ -404,6 +412,7 @@ + bvd_ipc->writeurb_mux.transfer_buffer_length = buf_num; + bvd_dbg("ipcusb_xmit_data: copy data to write urb finished! "); + ++#ifdef CONFIG_PXA_EZX + if ((UHCRHPS3 & 0x4) == 0x4) { + static int ret; + int time = 0; +@@ -442,6 +451,7 @@ + "failed! status=%d\n", ret); + bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!"); + } ++#endif + + sumbit_times++; + bvd_ipc->write_finished_flag = 0; +@@ -464,12 +474,16 @@ + + static void usbipc_bh_bp_func(unsigned long param) + { ++#ifdef CONFIG_PXA_EZX + if ((UHCRHPS3 & 0x4) == 0x4) { + UHCRHPS3 = 0x8; ++#endif + mdelay(40); ++#ifdef CONFIG_PXA_EZX + bvd_dbg("ipcusb_softint_send_readurb: Send RESUME signal! " + "UHCRHPS3=0x%x", UHCRHPS3); + } ++#endif + if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) { + //get_halted_bit(); + +@@ -735,7 +749,9 @@ + printk("usb_ipc_disconnect. bvd_ipc_disconnect address: %p\n", bvd_ipc_disconnect); + + //FIXME: Memory leak? ++#ifdef CONFIG_PXA_EZX + if ((UHCRHPS3 & 0x4) == 0) ++#endif + // usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux); + + //usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux); +Index: linux-2.6.21/drivers/char/Kconfig +=================================================================== +--- linux-2.6.21.orig/drivers/char/Kconfig 2007-09-29 10:52:18.000000000 +0200 ++++ linux-2.6.21/drivers/char/Kconfig 2007-09-29 10:52:30.000000000 +0200 +@@ -1073,7 +1073,7 @@ + + config TS0710_MUX + tristate "GSM TS 07.10 Multiplex driver" +- depends on EZX_BP ++ depends on EZX_BP || X86 + help + This implements the GSM 07.10 multiplex. + diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch new file mode 100644 index 0000000000..8d5299e3bd --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch @@ -0,0 +1,297 @@ +Index: linux-2.6.21/drivers/char/ts0710.h +=================================================================== +--- linux-2.6.21.orig/drivers/char/ts0710.h 2007-04-27 20:35:44.000000000 -0300 ++++ linux-2.6.21/drivers/char/ts0710.h 2007-04-27 20:36:03.000000000 -0300 +@@ -45,7 +45,6 @@ + * 11/18/2002 Modified + */ + +-#include + #include + + #include +@@ -58,7 +57,6 @@ + #include + #include + #include +-#include + + #include + #include +Index: linux-2.6.21/drivers/char/ts0710_mux.c +=================================================================== +--- linux-2.6.21.orig/drivers/char/ts0710_mux.c 2007-04-27 20:35:44.000000000 -0300 ++++ linux-2.6.21/drivers/char/ts0710_mux.c 2007-04-27 20:36:03.000000000 -0300 +@@ -46,7 +46,6 @@ + * 11/18/2002 Second version + * 04/21/2004 Add GPRS PROC + */ +-#include + #include + #include + +@@ -70,15 +69,12 @@ + #include + #include + #include +-#include +-//#include + + #include + #include + #include + + #ifdef USB_FOR_MUX +-//#include + #include "ts0710_mux_usb.h" + #endif + +@@ -268,8 +264,8 @@ + static struct work_struct post_recv_tqueue; + + static struct tty_struct *mux_table[NR_MUXS]; +-static struct termios *mux_termios[NR_MUXS]; +-static struct termios *mux_termios_locked[NR_MUXS]; ++static struct ktermios *mux_termios[NR_MUXS]; ++static struct ktermios *mux_termios_locked[NR_MUXS]; + static volatile short int mux_tty[NR_MUXS]; + + #ifdef min +@@ -1894,11 +1890,7 @@ + if (test_bit(TTY_THROTTLED, &tty->flags)) { + queue_data = 1; + } else { +- if (test_bit +- (TTY_DONT_FLIP, &tty->flags)) { +- queue_data = 1; +- post_recv = 1; +- } else if (recv_info->total) { ++ if (recv_info->total) { + queue_data = 1; + post_recv = 1; + } else if (recv_room < uih_len) { +@@ -3149,10 +3141,10 @@ + + /*For BP UART problem End*/ + +-static void receive_worker(void *private_) ++static void receive_worker(struct work_struct *work) + { + struct tty_struct *tty = COMM_FOR_MUX_TTY; +- int i, count, tbuf_free, tbuf_read; ++ int count, tbuf_free, tbuf_read; + static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; + static unsigned char *tbuf_ptr = &tbuf[0]; + static unsigned char *start_flag = 0; +@@ -3168,7 +3160,7 @@ + __u32 uih_len; + /*For BP UART problem End */ + +- UNUSED_PARAM(private_); ++ UNUSED_PARAM(work); + + if (!tty) + return; +@@ -3440,7 +3432,7 @@ + clear_bit(RECV_RUNNING, &mux_recv_flags); + } + +-static void post_recv_worker(void *private_) ++static void post_recv_worker(struct work_struct *work) + { + ts0710_con *ts0710 = &ts0710_connection; + int tty_idx; +@@ -3453,7 +3445,7 @@ + mux_recv_packet *recv_packet, *recv_packet2; + __u8 j; + +- UNUSED_PARAM(private_); ++ UNUSED_PARAM(work); + + if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) { + schedule_work(&post_recv_tqueue); +@@ -3499,10 +3491,6 @@ + if (test_bit(TTY_THROTTLED, &tty->flags)) { + add_post_recv_queue(&post_recv_q, recv_info); + continue; +- } else if (test_bit(TTY_DONT_FLIP, &tty->flags)) { +- post_recv = 1; +- add_post_recv_queue(&post_recv_q, recv_info); +- continue; + } + + flow_control = 0; +@@ -3635,7 +3623,7 @@ + } + } + +-static void send_worker(void *private_) ++static void send_worker(struct work_struct *work) + { + ts0710_con *ts0710 = &ts0710_connection; + __u8 j; +@@ -3644,7 +3632,7 @@ + struct tty_struct *tty; + __u8 dlci; + +- UNUSED_PARAM(private_); ++ UNUSED_PARAM(work); + + TS0710_DEBUG("Enter into send_worker"); + +@@ -3819,7 +3807,8 @@ + gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes = + get_count(TS0710MUX_GPRS2_SEND_COUNT_IDX); + +- copy_to_user(buf, gprsData, bufLen); ++ if(copy_to_user(buf, gprsData, bufLen)) ++ return -EFAULT; + + return bufLen; + } +@@ -3836,7 +3825,8 @@ + + memset(gprsData, 0, bufLen); + +- copy_from_user(gprsData, buf, bufLen); ++ if(copy_from_user(gprsData, buf, bufLen)) ++ return -EFAULT; + + set_count(TS0710MUX_GPRS1_RECV_COUNT_IDX, gprsData[0].recvBytes); + set_count(TS0710MUX_GPRS1_SEND_COUNT_IDX, gprsData[0].sentBytes); +@@ -3893,9 +3883,9 @@ + } + post_recv_count_flag = 0; + +- INIT_WORK(&send_tqueue, send_worker, NULL); +- INIT_WORK(&receive_tqueue, receive_worker, NULL); +- INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL); ++ INIT_WORK(&send_tqueue, send_worker); ++ INIT_WORK(&receive_tqueue, receive_worker); ++ INIT_WORK(&post_recv_tqueue, post_recv_worker); + + mux_driver = alloc_tty_driver(NR_MUXS); + if (!mux_driver) +@@ -3904,12 +3894,11 @@ + mux_driver->owner = THIS_MODULE; + mux_driver->driver_name = "ts0710mux"; + mux_driver->name = "mux"; +- mux_driver->devfs_name = "mux"; + mux_driver->major = TS0710MUX_MAJOR; + mux_driver->minor_start = TS0710MUX_MINOR_START; + mux_driver->type = TTY_DRIVER_TYPE_SERIAL; + mux_driver->subtype = SERIAL_TYPE_NORMAL; +- mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW; ++ mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; + + mux_driver->init_termios = tty_std_termios; + mux_driver->init_termios.c_iflag = 0; +@@ -3917,10 +3906,10 @@ + mux_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; + mux_driver->init_termios.c_lflag = 0; + +-// mux_driver.ttys = mux_table; ++ //mux_driver.ttys = mux_table; + mux_driver->termios = mux_termios; + mux_driver->termios_locked = mux_termios_locked; +-// mux_driver.driver_state = mux_state; ++ //mux_driver.driver_state = mux_state; + mux_driver->other = NULL; + + mux_driver->open = mux_open; +Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c +=================================================================== +--- linux-2.6.21.orig/drivers/char/ts0710_mux_usb.c 2007-04-27 20:35:44.000000000 -0300 ++++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-04-27 22:34:31.000000000 -0300 +@@ -188,7 +188,8 @@ + buf_list_t *inbuf; + int count = urb->actual_length; + +- inbuf = kmalloc(sizeof(buf_list_t), GFP_KERNEL); ++ // we are called from interrupt context. ++ inbuf = kmalloc(sizeof(buf_list_t), GFP_ATOMIC); + if (!inbuf) { + printk("append_to_inbuf_list: (%d) out of memory!\n", + sizeof(buf_list_t)); +@@ -196,7 +197,7 @@ + } + + inbuf->size = count; +- inbuf->body = kmalloc(sizeof(char)*count, GFP_KERNEL); ++ inbuf->body = kmalloc(sizeof(char)*count, GFP_ATOMIC); + if (!inbuf->body) { + kfree(inbuf); + printk("append_to_inbuf_list: (%d) out of memory!\n", +@@ -222,7 +223,7 @@ + inbuf = list_entry(ptr, buf_list_t, list); + src_count = inbuf->size; + if (dst_count >= src_count) { +- memcpy(buf, inbuf->body, src_count); ++ memcpy((unsigned char *)buf, inbuf->body, src_count); + ret = src_count; + list_del(ptr); + kfree(inbuf->body); +@@ -282,9 +283,8 @@ + spin_unlock(&bvd_ipc->in_buf_lock); + } + +-static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs) ++static void usb_ipc_read_bulk(struct urb *urb) + { +- buf_list_t *inbuf; + int count = urb->actual_length; + struct tty_struct *tty = &ipcusb_tty; + +@@ -319,7 +319,7 @@ + bvd_dbg("usb_ipc_read_bulk: completed!!!"); + } + +-static void usb_ipc_write_bulk(struct urb *urb, struct pt_regs *regs) ++static void usb_ipc_write_bulk(struct urb *urb) + { + callback_times++; + bvd_ipc->write_finished_flag = 1; +@@ -437,7 +437,7 @@ + /*send IN token*/ + bvd_ipc->readurb_mux.actual_length = 0; + bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; +- if (ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) ++ if ((ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))) + printk("ipcusb_xmit_data: usb_submit_urb(read mux bulk)" + "failed! status=%d\n", ret); + bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!"); +@@ -447,7 +447,7 @@ + bvd_ipc->write_finished_flag = 0; + //printk("%s: clear write_finished_flag:%d\n", __FUNCTION__, bvd_ipc->write_finished_flag); + bvd_ipc->writeurb_mux.dev = bvd_ipc->ipc_dev; +- if (result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC)) ++ if ((result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC))) + warn("ipcusb_xmit_data: funky result! result=%d\n", result); + + bvd_dbg("ipcusb_xmit_data: usb_submit_urb finished! result:%d", result); +@@ -498,7 +498,7 @@ + return 0; + + if (*ipcusb_ap_to_bp != NULL) +- (*ipcusb_ap_to_bp)(buf, count); ++ (*ipcusb_ap_to_bp)((unsigned char *)buf, count); + + bvd_ipc->suspend_flag = 1; + +@@ -602,6 +602,7 @@ + } + + ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0; ++ readsize = writesize = 0; + + while (ep_cnt < interface->bNumEndpoints) { + endpoint = &intf->cur_altsetting->endpoint[ep_cnt].desc; +@@ -792,6 +793,8 @@ + bvd_ipc->ipc_dev = NULL; + bvd_ipc->xmit.head = bvd_ipc->xmit.tail = 0; + bvd_ipc->write_flag = IPC_USB_WRITE_INIT; ++ spin_lock_init(&bvd_ipc->lock); ++ spin_lock_init(&bvd_ipc->in_buf_lock); + + ipcusb_tty_driver.write = usb_ipc_write; + ipcusb_tty_driver.chars_in_buffer = usb_ipc_chars_in_buffer; diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch new file mode 100644 index 0000000000..d4781f9fc7 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch @@ -0,0 +1,269 @@ +Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c +=================================================================== +--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 00:52:25.000000000 +0100 ++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 00:52:26.000000000 +0100 +@@ -133,6 +133,7 @@ + + struct circ_buf xmit; /* write cric bufffer */ + struct list_head in_buf_list; ++ spinlock_t in_buf_lock; + char bulk_in_ep_mux, + bulk_out_ep_mux, + bulk_in_ep_dsplog; +@@ -204,9 +205,39 @@ + return; + } + memcpy(inbuf->body, (unsigned char*)urb->transfer_buffer, count); ++ spin_lock(&bvd_ipc->in_buf_lock); + list_add_tail(&inbuf->list, &bvd_ipc->in_buf_list); ++ spin_unlock(&bvd_ipc->in_buf_lock); + } + ++int get_from_inbuf_list(const unsigned char *buf, int dst_count) ++{ ++ int ret = 0; ++ spin_lock(&bvd_ipc->in_buf_lock); ++ if (!(list_empty(&bvd_ipc->in_buf_list))) { ++ int src_count; ++ buf_list_t *inbuf; ++ struct list_head *ptr; ++ ++ ptr = bvd_ipc->in_buf_list.next; ++ inbuf = list_entry(ptr, buf_list_t, list); ++ src_count = inbuf->size; ++ if (dst_count >= src_count) { ++ memcpy(buf, inbuf->body, src_count); ++ ret = src_count; ++ list_del(ptr); ++ kfree(inbuf->body); ++ kfree(inbuf); ++ } else { ++ bvd_dbg("get_from_inbuf_list: not enough space in destination buffer"); ++ } ++ } ++ spin_unlock(&bvd_ipc->in_buf_lock); ++ ++ return ret; ++} ++EXPORT_SYMBOL(get_from_inbuf_list); ++ + static void ipcusb_timeout(unsigned long data) + { + struct tty_struct *tty = &ipcusb_tty; +@@ -214,13 +245,14 @@ + + bvd_dbg("ipcusb_timeout***"); + ++ spin_lock(&bvd_ipc->in_buf_lock); + while (!(list_empty(&bvd_ipc->in_buf_list))) { + int count; + buf_list_t *inbuf; + struct list_head *ptr = NULL; + + ptr = bvd_ipc->in_buf_list.next; +- inbuf = list_entry (ptr, buf_list_t, list); ++ inbuf = list_entry(ptr, buf_list_t, list); + count = inbuf->size; + if (tty_insert_flip_string(tty, inbuf->body, count) >= count) { + list_del(ptr); +@@ -232,10 +264,12 @@ + break; + } + } ++ spin_unlock(&bvd_ipc->in_buf_lock); + + if (usb_mux_dispatcher) + usb_mux_dispatcher(tty); /**call Liu changhui's func.**/ + ++ spin_lock(&bvd_ipc->in_buf_lock); + if (list_empty(&bvd_ipc->in_buf_list)) { + urb->actual_length = 0; + urb->dev = bvd_ipc->ipc_dev; +@@ -246,6 +280,7 @@ + ipcusb_timer.data = (unsigned long)urb; + mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); + } ++ spin_unlock(&bvd_ipc->in_buf_lock); + } + + static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs) +@@ -266,69 +301,11 @@ + if (count > 0 && ((*ipcusb_bp_to_ap) != NULL)) + (*ipcusb_bp_to_ap)(urb->transfer_buffer, urb->actual_length); + +- if (!(list_empty(&bvd_ipc->in_buf_list))) { +- int need_mux = 0; +- +- bvd_dbg("usb_ipc_read_bulk: some urbs in_buf_list"); +- if (count > 0) { +- bvd_ipc->suspend_flag = 1; +- append_to_inbuf_list(urb); /* append the current received urb */ +-#if 0 +- if(jiffies - last_jiff > ICL_EVENT_INTERVAL) +- { +- last_jiff = jiffies; +- queue_apm_event(KRNL_ICL, NULL); +- } +-#endif +- } +- +- while (!(list_empty(&bvd_ipc->in_buf_list))) { +- struct list_head* ptr = NULL; +- ptr = bvd_ipc->in_buf_list.next; +- inbuf = list_entry(ptr, buf_list_t, list); +- count = inbuf->size; +- need_mux = 1; +- +- tty_insert_flip_string(tty, inbuf->body, count); +- +- list_del(ptr); +- kfree(inbuf->body); +- inbuf->body = NULL; +- kfree(inbuf); +- } +- +- if (usb_mux_dispatcher && need_mux) +- usb_mux_dispatcher(tty); /* call Liu changhui's func. */ +- +- if (list_empty(&bvd_ipc->in_buf_list)) { +- urb->actual_length = 0; +- urb->dev = bvd_ipc->ipc_dev; +- if (usb_submit_urb(urb, GFP_ATOMIC)) +- bvd_dbg("usb_ipc_read_bulk: " +- "failed resubmitting read urb"); +- bvd_dbg("usb_ipc_read_bulk: resubmited read urb"); +- } else { +- ipcusb_timer.data = (unsigned long)urb; +- mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); +- } +- } else if (count > 0) { +- bvd_dbg("usb_ipc_read_bulk: no urbs in_buf_list"); ++ if (count > 0) { ++ bvd_dbg("usb_ipc_read_bulk: inserting buffer into in_buf_list"); + bvd_ipc->suspend_flag = 1; + +- if (tty_insert_flip_string(tty, urb->transfer_buffer, +- count) < count) { +- bvd_ipc->suspend_flag = 1; +- append_to_inbuf_list(urb); +- ipcusb_timer.data = (unsigned long)urb; +- mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); +-#if 0 +- if(jiffies - last_jiff > ICL_EVENT_INTERVAL) +- { +- last_jiff = jiffies; +- queue_apm_event(KRNL_ICL, NULL); +- } +-#endif +- } ++ append_to_inbuf_list(urb); + + if (usb_mux_dispatcher) + usb_mux_dispatcher(tty); /* call Liu changhui's func. */ +@@ -337,13 +314,6 @@ + urb->dev = bvd_ipc->ipc_dev; + if (usb_submit_urb(urb, GFP_ATOMIC)) + bvd_dbg("failed resubmitting read urb"); +-#if 0 +- if(jiffies - last_jiff > ICL_EVENT_INTERVAL) +- { +- last_jiff = jiffies; +- queue_apm_event(KRNL_ICL, NULL); +- } +-#endif + bvd_dbg("usb_ipc_read_bulk: resubmited read urb"); + } + +@@ -705,7 +675,8 @@ + bvd_ipc->bulk_out_ep_mux= have_bulk_out_mux; + bvd_ipc->ipc_dev = usbdev; + bvd_ipc->writesize = writesize; +- INIT_LIST_HEAD (&bvd_ipc->in_buf_list); ++ INIT_LIST_HEAD(&bvd_ipc->in_buf_list); ++ bvd_ipc->in_buf_lock = SPIN_LOCK_UNLOCKED; + + bvd_ipc->bh.func = usbipc_bh_func; + bvd_ipc->bh.data = (unsigned long) bvd_ipc; +Index: linux-2.6.16/drivers/char/ts0710_mux.c +=================================================================== +--- linux-2.6.16.orig/drivers/char/ts0710_mux.c 2007-01-17 00:52:23.000000000 +0100 ++++ linux-2.6.16/drivers/char/ts0710_mux.c 2007-01-17 00:52:26.000000000 +0100 +@@ -3149,7 +3149,7 @@ + static void receive_worker(void *private_) + { + struct tty_struct *tty = COMM_FOR_MUX_TTY; +- int i, count; ++ int i, count, tbuf_free, tbuf_read; + static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; + static unsigned char *tbuf_ptr = &tbuf[0]; + static unsigned char *start_flag = 0; +@@ -3167,29 +3167,39 @@ + + UNUSED_PARAM(private_); + +- if (!tty) +- return; ++ if (!tty) ++ return; ++ ++ while (1) { ++ tbuf_free = TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf); ++ TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free); ++ tbuf_read = get_from_inbuf_list(tbuf_ptr, tbuf_free); ++ if (tbuf_read == 0) { ++ break; ++ } else { ++ TS0710_PRINTK("Read %i bytes.\n", tbuf_read); ++ }; ++ tbuf_ptr += tbuf_read; ++ }; ++ ++ count = (tbuf_ptr - tbuf); ++ ++ // Should be impossible? ++ //if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) { ++ // TS0710_PRINTK ++ // ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n"); ++ // count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf)); ++ //} + + #ifdef USB_FOR_MUX +- TS0710_DEBUG("Receive following bytes from IPC-USB"); ++ TS0710_DEBUG("Received following bytes from IPC-USB"); + #else +- TS0710_DEBUG("Receive following bytes from UART"); ++ TS0710_DEBUG("Received following bytes from UART"); + #endif +- +- TS0710_DEBUGHEX(cp, count); +- +- if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) { +- TS0710_PRINTK +- ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n"); +- count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf)); +- } +- +- count = tty_buffer_request_room(tty, count); +- +- for (i = 0; i < count; i++) +- tty_insert_flip_char(tty, tbuf_ptr[i], TTY_NORMAL); +- +- tbuf_ptr += count; ++ TS0710_DEBUGHEX(tbuf, count); ++ ++ //gets updated above ++ //tbuf_ptr += count; + search = &tbuf[0]; + + if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) { +Index: linux-2.6.16/drivers/char/ts0710_mux_usb.h +=================================================================== +--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.h 2007-01-17 00:52:23.000000000 +0100 ++++ linux-2.6.16/drivers/char/ts0710_mux_usb.h 2007-01-17 00:52:26.000000000 +0100 +@@ -27,3 +27,6 @@ + extern struct tty_struct *usb_for_mux_tty; + extern void (*usb_mux_dispatcher)(struct tty_struct *tty); + extern void (*usb_mux_sender)(void); ++ ++extern int get_from_inbuf_list(const unsigned char *buf, int dst_count); ++ diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch new file mode 100644 index 0000000000..0ebe27d03b --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch @@ -0,0 +1,22 @@ +Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c +=================================================================== +--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 01:06:21.000000000 +0100 ++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 01:06:31.000000000 +0100 +@@ -461,7 +461,7 @@ + ipcusb_xmit_data(); + } + +-extern void get_halted_bit(void); ++//extern void get_halted_bit(void); + + static void usbipc_bh_bp_func(unsigned long param) + { +@@ -472,7 +472,7 @@ + "UHCRHPS3=0x%x", UHCRHPS3); + } + if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) { +- get_halted_bit(); ++ //get_halted_bit(); + + /*send a IN token*/ + bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch new file mode 100644 index 0000000000..c415ded428 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch @@ -0,0 +1,22 @@ +Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c +=================================================================== +--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 01:12:23.000000000 +0100 ++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 01:12:37.000000000 +0100 +@@ -97,7 +97,6 @@ + static int sumbit_times = 0; + static int callback_times = 0; + //static unsigned long last_jiff = 0; +-extern int usbh_finished_resume; + /*end global values defined*/ + + MODULE_AUTHOR(DRIVER_AUTHOR); +@@ -546,9 +545,6 @@ + void usb_send_readurb(void) + { + //printk("usb_send_readurb: begining!UHCRHPS3=0x%x, usbh_finished_resume=%d\n", UHCRHPS3, usbh_finished_resume); +- +- if (usbh_finished_resume == 0) +- return; + + tasklet_schedule(&bvd_ipc->bh_bp); + } diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch b/packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch new file mode 100644 index 0000000000..3e8e3e2604 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch @@ -0,0 +1,5396 @@ +Index: linux-2.6.24/drivers/char/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/char/Kconfig ++++ linux-2.6.24/drivers/char/Kconfig +@@ -1040,5 +1040,18 @@ + + source "drivers/s390/char/Kconfig" + ++config TS0710_MUX ++ tristate "GSM TS 07.10 Multiplex driver" ++ depends on EZX_BP ++ help ++ This implements the GSM 07.10 multiplex. ++ ++config TS0710_MUX_USB ++ tristate "Motorola USB support for TS 07.10 Multiplex driver" ++ depends on TS0710_MUX ++ help ++ This ads support for TS 07.10 over USB, as found in motorola ++ Smartphones. ++ + endmenu + +Index: linux-2.6.24/drivers/char/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/char/Makefile ++++ linux-2.6.24/drivers/char/Makefile +@@ -111,6 +111,9 @@ + obj-$(CONFIG_JS_RTC) += js-rtc.o + js-rtc-y = rtc.o + ++obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o ts0710_mux_usb.o ++ ++ + # Files generated that shall be removed upon make clean + clean-files := consolemap_deftbl.c defkeymap.c + +Index: linux-2.6.24/drivers/char/ts0710.h +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/char/ts0710.h +@@ -0,0 +1,368 @@ ++/* ++ * File: ts0710.h ++ * ++ * Portions derived from rfcomm.c, original header as follows: ++ * ++ * Copyright (C) 2000, 2001 Axis Communications AB ++ * ++ * Author: Mats Friden ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * Exceptionally, Axis Communications AB grants discretionary and ++ * conditional permissions for additional use of the text contained ++ * in the company's release of the AXIS OpenBT Stack under the ++ * provisions set forth hereunder. ++ * ++ * Provided that, if you use the AXIS OpenBT Stack with other files, ++ * that do not implement functionality as specified in the Bluetooth ++ * System specification, to produce an executable, this does not by ++ * itself cause the resulting executable to be covered by the GNU ++ * General Public License. Your use of that executable is in no way ++ * restricted on account of using the AXIS OpenBT Stack code with it. ++ * ++ * This exception does not however invalidate any other reasons why ++ * the executable file might be covered by the provisions of the GNU ++ * General Public License. ++ * ++ */ ++/* ++ * Copyright (C) 2002 Motorola ++ * ++ * 07/28/2002 Initial version based on rfcomm.c ++ * 11/18/2002 Modified ++ */ ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++#define TS0710_MAX_CHN 14 ++ ++#define SET_PF(ctr) ((ctr) | (1 << 4)) ++#define CLR_PF(ctr) ((ctr) & 0xef) ++#define GET_PF(ctr) (((ctr) >> 4) & 0x1) ++ ++#define GET_PN_MSG_FRAME_SIZE(pn) ( ((pn)->frame_sizeh << 8) | ((pn)->frame_sizel)) ++#define SET_PN_MSG_FRAME_SIZE(pn, size) ({ (pn)->frame_sizel = (size) & 0xff; \ ++ (pn)->frame_sizeh = (size) >> 8; }) ++ ++#define GET_LONG_LENGTH(a) ( ((a).h_len << 7) | ((a).l_len) ) ++#define SET_LONG_LENGTH(a, length) ({ (a).ea = 0; \ ++ (a).l_len = length & 0x7F; \ ++ (a).h_len = (length >> 7) & 0xFF; }) ++ ++#define SHORT_CRC_CHECK 3 ++#define LONG_CRC_CHECK 4 ++ ++/* FIXME: Should thsi one be define here? */ ++#define SHORT_PAYLOAD_SIZE 127 ++ ++#define EA 1 ++#define FCS_SIZE 1 ++#define FLAG_SIZE 2 ++ ++#define TS0710_MAX_HDR_SIZE 5 ++#define DEF_TS0710_MTU 256 ++ ++#define TS0710_BASIC_FLAG 0xF9 ++/* the control field */ ++#define SABM 0x2f ++#define SABM_SIZE 4 ++#define UA 0x63 ++#define UA_SIZE 4 ++#define DM 0x0f ++#define DISC 0x43 ++#define UIH 0xef ++ ++/* the type field in a multiplexer command packet */ ++#define TEST 0x8 ++#define FCON 0x28 ++#define FCOFF 0x18 ++#define MSC 0x38 ++#define RPN 0x24 ++#define RLS 0x14 ++#define PN 0x20 ++#define NSC 0x4 ++ ++/* V.24 modem control signals */ ++#define FC 0x2 ++#define RTC 0x4 ++#define RTR 0x8 ++#define IC 0x40 ++#define DV 0x80 ++ ++#define CTRL_CHAN 0 /* The control channel is defined as DLCI 0 */ ++#define MCC_CMD 1 /* Multiplexer command cr */ ++#define MCC_RSP 0 /* Multiplexer response cr */ ++ ++#ifdef __LITTLE_ENDIAN_BITFIELD ++ ++typedef struct { ++ __u8 ea:1; ++ __u8 cr:1; ++ __u8 d:1; ++ __u8 server_chn:5; ++} __attribute__ ((packed)) address_field; ++ ++typedef struct { ++ __u8 ea:1; ++ __u8 len:7; ++} __attribute__ ((packed)) short_length; ++ ++typedef struct { ++ __u8 ea:1; ++ __u8 l_len:7; ++ __u8 h_len; ++} __attribute__ ((packed)) long_length; ++ ++typedef struct { ++ address_field addr; ++ __u8 control; ++ short_length length; ++} __attribute__ ((packed)) short_frame_head; ++ ++typedef struct { ++ short_frame_head h; ++ __u8 data[0]; ++} __attribute__ ((packed)) short_frame; ++ ++typedef struct { ++ address_field addr; ++ __u8 control; ++ long_length length; ++ __u8 data[0]; ++} __attribute__ ((packed)) long_frame_head; ++ ++typedef struct { ++ long_frame_head h; ++ __u8 data[0]; ++} __attribute__ ((packed)) long_frame; ++ ++/* Typedefinitions for structures used for the multiplexer commands */ ++typedef struct { ++ __u8 ea:1; ++ __u8 cr:1; ++ __u8 type:6; ++} __attribute__ ((packed)) mcc_type; ++ ++typedef struct { ++ mcc_type type; ++ short_length length; ++ __u8 value[0]; ++} __attribute__ ((packed)) mcc_short_frame_head; ++ ++typedef struct { ++ mcc_short_frame_head h; ++ __u8 value[0]; ++} __attribute__ ((packed)) mcc_short_frame; ++ ++typedef struct { ++ mcc_type type; ++ long_length length; ++ __u8 value[0]; ++} __attribute__ ((packed)) mcc_long_frame_head; ++ ++typedef struct { ++ mcc_long_frame_head h; ++ __u8 value[0]; ++} __attribute__ ((packed)) mcc_long_frame; ++ ++/* MSC-command */ ++typedef struct { ++ __u8 ea:1; ++ __u8 fc:1; ++ __u8 rtc:1; ++ __u8 rtr:1; ++ __u8 reserved:2; ++ __u8 ic:1; ++ __u8 dv:1; ++} __attribute__ ((packed)) v24_sigs; ++ ++typedef struct { ++ __u8 ea:1; ++ __u8 b1:1; ++ __u8 b2:1; ++ __u8 b3:1; ++ __u8 len:4; ++} __attribute__ ((packed)) brk_sigs; ++ ++typedef struct { ++ short_frame_head s_head; ++ mcc_short_frame_head mcc_s_head; ++ address_field dlci; ++ __u8 v24_sigs; ++ //brk_sigs break_signals; ++ __u8 fcs; ++} __attribute__ ((packed)) msc_msg; ++ ++#if 0 ++/* conflict with termios.h */ ++/* RPN command */ ++#define B2400 0 ++#define B4800 1 ++#define B7200 2 ++#define B9600 3 ++#define B19200 4 ++#define B38400 5 ++#define B57600 6 ++#define B115200 7 ++#define D230400 8 ++#endif ++ ++/* ++typedef struct{ ++ __u8 bit_rate:1; ++ __u8 data_bits:1; ++ __u8 stop_bit:1; ++ __u8 parity:1; ++ __u8 parity_type:1; ++ __u8 xon_u8:1; ++ __u8 xoff_u8:1; ++ __u8 res1:1; ++ __u8 xon_input:1; ++ __u8 xon_output:1; ++ __u8 rtr_input:1; ++ __u8 rtr_output:1; ++ __u8 rtc_input:1; ++ __u8 rtc_output:1; ++ __u8 res2:2; ++} __attribute__((packed)) parameter_mask; ++ ++typedef struct{ ++ __u8 bit_rate; ++ __u8 data_bits:2; ++ __u8 stop_bit:1; ++ __u8 parity:1; ++ __u8 parity_type:2; ++ __u8 res1:2; ++ __u8 xon_input:1; ++ __u8 xon_output:1; ++ __u8 rtr_input:1; ++ __u8 rtr_output:1; ++ __u8 rtc_input:1; ++ __u8 rtc_output:1; ++ __u8 res2:2; ++ __u8 xon_u8; ++ __u8 xoff_u8; ++ parameter_mask pm; ++} __attribute__((packed)) rpn_values; ++ ++typedef struct{ ++ short_frame_head s_head; ++ mcc_short_frame_head mcc_s_head; ++ address_field dlci; ++ rpn_values rpn_val; ++ __u8 fcs; ++} __attribute__((packed)) rpn_msg; ++*/ ++ ++/* RLS-command */ ++/* ++typedef struct{ ++ short_frame_head s_head; ++ mcc_short_frame_head mcc_s_head; ++ address_field dlci; ++ __u8 error:4; ++ __u8 res:4; ++ __u8 fcs; ++} __attribute__((packed)) rls_msg; ++*/ ++ ++/* PN-command */ ++typedef struct { ++ short_frame_head s_head; ++ mcc_short_frame_head mcc_s_head; ++ __u8 dlci:6; ++ __u8 res1:2; ++ __u8 frame_type:4; ++ __u8 credit_flow:4; ++ __u8 prior:6; ++ __u8 res2:2; ++ __u8 ack_timer; ++ __u8 frame_sizel; ++ __u8 frame_sizeh; ++ __u8 max_nbrof_retrans; ++ __u8 credits; ++ __u8 fcs; ++} __attribute__ ((packed)) pn_msg; ++ ++/* NSC-command */ ++typedef struct { ++ short_frame_head s_head; ++ mcc_short_frame_head mcc_s_head; ++ mcc_type command_type; ++ __u8 fcs; ++} __attribute__ ((packed)) nsc_msg; ++ ++#else ++#error Only littel-endianess supported now! ++#endif ++ ++enum { ++ REJECTED = 0, ++ DISCONNECTED, ++ CONNECTING, ++ NEGOTIATING, ++ CONNECTED, ++ DISCONNECTING, ++ FLOW_STOPPED ++}; ++ ++enum ts0710_events { ++ CONNECT_IND, ++ CONNECT_CFM, ++ DISCONN_CFM ++}; ++ ++typedef struct { ++ volatile __u8 state; ++ volatile __u8 flow_control; ++ volatile __u8 initiated; ++ volatile __u8 initiator; ++ volatile __u16 mtu; ++ wait_queue_head_t open_wait; ++ wait_queue_head_t close_wait; ++} dlci_struct; ++ ++/* user space interfaces */ ++typedef struct { ++ volatile __u8 initiator; ++ volatile __u8 c_dlci; ++ volatile __u16 mtu; ++ volatile __u8 be_testing; ++ volatile __u32 test_errs; ++ wait_queue_head_t test_wait; ++ ++ dlci_struct dlci[TS0710_MAX_CHN]; ++} ts0710_con; +Index: linux-2.6.24/drivers/char/ts0710_mux.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/char/ts0710_mux.c +@@ -0,0 +1,3966 @@ ++/* ++ * File: mux_driver.c ++ * ++ * Portions derived from rfcomm.c, original header as follows: ++ * ++ * Copyright (C) 2000, 2001 Axis Communications AB ++ * ++ * Author: Mats Friden ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * Exceptionally, Axis Communications AB grants discretionary and ++ * conditional permissions for additional use of the text contained ++ * in the company's release of the AXIS OpenBT Stack under the ++ * provisions set forth hereunder. ++ * ++ * Provided that, if you use the AXIS OpenBT Stack with other files, ++ * that do not implement functionality as specified in the Bluetooth ++ * System specification, to produce an executable, this does not by ++ * itself cause the resulting executable to be covered by the GNU ++ * General Public License. Your use of that executable is in no way ++ * restricted on account of using the AXIS OpenBT Stack code with it. ++ * ++ * This exception does not however invalidate any other reasons why ++ * the executable file might be covered by the provisions of the GNU ++ * General Public License. ++ * ++ */ ++/* ++ * Copyright (C) 2002-2004 Motorola ++ * Copyright (C) 2006 Harald Welte ++ * ++ * 07/28/2002 Initial version ++ * 11/18/2002 Second version ++ * 04/21/2004 Add GPRS PROC ++ */ ++#include ++#include ++#include ++ ++#include ++#include ++ ++#define USB_FOR_MUX ++ ++#ifndef USB_FOR_MUX ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++//#include ++ ++#include ++#include ++#include ++ ++#ifdef USB_FOR_MUX ++//#include ++#include "ts0710_mux_usb.h" ++#endif ++ ++#include "ts0710.h" ++#include "ts0710_mux.h" ++ ++#define TS0710MUX_GPRS_SESSION_MAX 2 ++#define TS0710MUX_MAJOR 250 ++#define TS0710MUX_MINOR_START 0 ++#define NR_MUXS 16 ++ ++ /*#define TS0710MUX_TIME_OUT 30 *//* 300ms */ ++#define TS0710MUX_TIME_OUT 250 /* 2500ms, for BP UART hardware flow control AP UART */ ++ ++#define TS0710MUX_IO_DLCI_FC_ON 0x54F2 ++#define TS0710MUX_IO_DLCI_FC_OFF 0x54F3 ++#define TS0710MUX_IO_FC_ON 0x54F4 ++#define TS0710MUX_IO_FC_OFF 0x54F5 ++ ++#define TS0710MUX_MAX_BUF_SIZE 2048 ++ ++#define TS0710MUX_SEND_BUF_OFFSET 10 ++#define TS0710MUX_SEND_BUF_SIZE (DEF_TS0710_MTU + TS0710MUX_SEND_BUF_OFFSET + 34) ++#define TS0710MUX_RECV_BUF_SIZE TS0710MUX_SEND_BUF_SIZE ++ ++/*For BP UART problem Begin*/ ++#ifdef TS0710SEQ2 ++#define ACK_SPACE 66 /* 6 * 11(ACK frame size) */ ++#else ++#define ACK_SPACE 42 /* 6 * 7(ACK frame size) */ ++#endif ++/*For BP UART problem End*/ ++ ++ /*#define TS0710MUX_SERIAL_BUF_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE)*//* For BP UART problem */ ++#define TS0710MUX_SERIAL_BUF_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE + ACK_SPACE) /* For BP UART problem: ACK_SPACE */ ++ ++#define TS0710MUX_MAX_TOTAL_FRAME_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE + FLAG_SIZE) ++#define TS0710MUX_MAX_CHARS_IN_BUF 65535 ++#define TS0710MUX_THROTTLE_THRESHOLD DEF_TS0710_MTU ++ ++#define TEST_PATTERN_SIZE 250 ++ ++#define CMDTAG 0x55 ++#define DATATAG 0xAA ++ ++#define ACK 0x4F /*For BP UART problem */ ++ ++/*For BP UART problem Begin*/ ++#ifdef TS0710SEQ2 ++#define FIRST_BP_SEQ_OFFSET 1 /*offset from start flag */ ++#define SECOND_BP_SEQ_OFFSET 2 /*offset from start flag */ ++#define FIRST_AP_SEQ_OFFSET 3 /*offset from start flag */ ++#define SECOND_AP_SEQ_OFFSET 4 /*offset from start flag */ ++#define SLIDE_BP_SEQ_OFFSET 5 /*offset from start flag */ ++#define SEQ_FIELD_SIZE 5 ++#else ++#define SLIDE_BP_SEQ_OFFSET 1 /*offset from start flag */ ++#define SEQ_FIELD_SIZE 1 ++#endif ++ ++#define ADDRESS_FIELD_OFFSET (1 + SEQ_FIELD_SIZE) /*offset from start flag */ ++/*For BP UART problem End*/ ++ ++#ifndef UNUSED_PARAM ++#define UNUSED_PARAM(v) (void)(v) ++#endif ++ ++#define TS0710MUX_GPRS1_DLCI 7 ++#define TS0710MUX_GPRS2_DLCI 8 ++ ++#define TS0710MUX_GPRS1_RECV_COUNT_IDX 0 ++#define TS0710MUX_GPRS1_SEND_COUNT_IDX 1 ++#define TS0710MUX_GPRS2_RECV_COUNT_IDX 2 ++#define TS0710MUX_GPRS2_SEND_COUNT_IDX 3 ++#define TS0710MUX_COUNT_MAX_IDX 3 ++#define TS0710MUX_COUNT_IDX_NUM (TS0710MUX_COUNT_MAX_IDX + 1) ++ ++static volatile int mux_data_count[TS0710MUX_COUNT_IDX_NUM] = { 0, 0, 0, 0 }; ++static volatile int mux_data_count2[TS0710MUX_COUNT_IDX_NUM] = { 0, 0, 0, 0 }; ++static struct semaphore mux_data_count_mutex[TS0710MUX_COUNT_IDX_NUM]; ++static volatile __u8 post_recv_count_flag = 0; ++ ++/*PROC file*/ ++struct proc_dir_entry *gprs_proc_file = NULL; ++ssize_t file_proc_read(struct file *file, char *buf, size_t size, ++ loff_t * ppos); ++ssize_t file_proc_write(struct file *file, const char *buf, size_t count, ++ loff_t * ppos); ++struct file_operations file_proc_operations = { ++ read:file_proc_read, ++ write:file_proc_write, ++}; ++typedef struct { ++ int recvBytes; ++ int sentBytes; ++} gprs_bytes; ++ ++static __u8 tty2dlci[NR_MUXS] = ++ { 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 12, 13 }; ++static __u8 iscmdtty[NR_MUXS] = ++ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; ++typedef struct { ++ __u8 cmdtty; ++ __u8 datatty; ++} dlci_tty; ++static dlci_tty dlci2tty[] = { {0, 0}, /* DLCI 0 */ ++{0, 0}, /* DLCI 1 */ ++{1, 1}, /* DLCI 2 */ ++{2, 2}, /* DLCI 3 */ ++{3, 3}, /* DLCI 4 */ ++{4, 4}, /* DLCI 5 */ ++{5, 8}, /* DLCI 6 */ ++{6, 9}, /* DLCI 7 */ ++{7, 10}, /* DLCI 8 */ ++{11, 11}, /* DLCI 9 */ ++{12, 12}, /* DLCI 10 */ ++{13, 13}, /* DLCI 11 */ ++{14, 14}, /* DLCI 12 */ ++{15, 15} ++}; /* DLCI 13 */ ++ ++typedef struct { ++ volatile __u8 buf[TS0710MUX_SEND_BUF_SIZE]; ++ volatile __u8 *frame; ++ unsigned long flags; ++ volatile __u16 length; ++ volatile __u8 filled; ++ volatile __u8 dummy; /* Allignment to 4*n bytes */ ++} mux_send_struct; ++ ++/* Bit number in flags of mux_send_struct */ ++#define BUF_BUSY 0 ++ ++struct mux_recv_packet_tag { ++ __u8 *data; ++ __u32 length; ++ struct mux_recv_packet_tag *next; ++}; ++typedef struct mux_recv_packet_tag mux_recv_packet; ++ ++struct mux_recv_struct_tag { ++ __u8 data[TS0710MUX_RECV_BUF_SIZE]; ++ __u32 length; ++ __u32 total; ++ mux_recv_packet *mux_packet; ++ struct mux_recv_struct_tag *next; ++ int no_tty; ++ volatile __u8 post_unthrottle; ++}; ++typedef struct mux_recv_struct_tag mux_recv_struct; ++ ++#define RECV_RUNNING 0 ++static unsigned long mux_recv_flags = 0; ++ ++static mux_send_struct *mux_send_info[NR_MUXS]; ++static volatile __u8 mux_send_info_flags[NR_MUXS]; ++static volatile __u8 mux_send_info_idx = NR_MUXS; ++ ++static mux_recv_struct *mux_recv_info[NR_MUXS]; ++static volatile __u8 mux_recv_info_flags[NR_MUXS]; ++static mux_recv_struct *mux_recv_queue = NULL; ++ ++static struct tty_driver mux_driver; ++ ++#ifdef USB_FOR_MUX ++#define COMM_FOR_MUX_DRIVER usb_for_mux_driver ++#define COMM_FOR_MUX_TTY usb_for_mux_tty ++#define COMM_MUX_DISPATCHER usb_mux_dispatcher ++#define COMM_MUX_SENDER usb_mux_sender ++#else ++#define COMM_FOR_MUX_DRIVER serial_for_mux_driver ++#define COMM_FOR_MUX_TTY serial_for_mux_tty ++#define COMM_MUX_DISPATCHER serial_mux_dispatcher ++#define COMM_MUX_SENDER serial_mux_sender ++ ++extern struct list_head *tq_serial_for_mux; ++#endif ++ ++extern struct tty_driver *COMM_FOR_MUX_DRIVER; ++extern struct tty_struct *COMM_FOR_MUX_TTY; ++extern void (*COMM_MUX_DISPATCHER) (struct tty_struct * tty); ++extern void (*COMM_MUX_SENDER) (void); ++ ++static struct work_struct send_tqueue; ++static struct work_struct receive_tqueue; ++static struct work_struct post_recv_tqueue; ++ ++static struct tty_struct *mux_table[NR_MUXS]; ++static struct termios *mux_termios[NR_MUXS]; ++static struct termios *mux_termios_locked[NR_MUXS]; ++static volatile short int mux_tty[NR_MUXS]; ++ ++#ifdef min ++#undef min ++#define min(a,b) ( (a)<(b) ? (a):(b) ) ++#endif ++ ++static int get_count(__u8 idx); ++static int set_count(__u8 idx, int count); ++static int add_count(__u8 idx, int count); ++ ++static int send_ua(ts0710_con * ts0710, __u8 dlci); ++static int send_dm(ts0710_con * ts0710, __u8 dlci); ++static int send_sabm(ts0710_con * ts0710, __u8 dlci); ++static int send_disc(ts0710_con * ts0710, __u8 dlci); ++static void queue_uih(mux_send_struct * send_info, __u16 len, ++ ts0710_con * ts0710, __u8 dlci); ++static int send_pn_msg(ts0710_con * ts0710, __u8 prior, __u32 frame_size, ++ __u8 credit_flow, __u8 credits, __u8 dlci, __u8 cr); ++static int send_nsc_msg(ts0710_con * ts0710, mcc_type cmd, __u8 cr); ++static void set_uih_hdr(short_frame * uih_pkt, __u8 dlci, __u32 len, __u8 cr); ++ ++static __u32 crc_check(__u8 * data, __u32 length, __u8 check_sum); ++static __u8 crc_calc(__u8 * data, __u32 length); ++static void create_crctable(__u8 table[]); ++ ++static void mux_sched_send(void); ++ ++static __u8 crctable[256]; ++ ++static ts0710_con ts0710_connection; ++/* ++static rpn_values rpn_val; ++*/ ++ ++static int valid_dlci(__u8 dlci) ++{ ++ if ((dlci < TS0710_MAX_CHN) && (dlci > 0)) ++ return 1; ++ else ++ return 0; ++} ++ ++#ifdef TS0710DEBUG ++ ++#ifdef PRINT_OUTPUT_PRINTK ++#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX " __FUNCTION__ ": " fmt "\n" , ## arg) ++#else ++#include "ezxlog.h" ++static __u8 strDebug[256]; ++#define TS0710_DEBUG(fmt, arg...) ({ snprintf(strDebug, sizeof(strDebug), "MUX " __FUNCTION__ ": " fmt "\n" , ## arg); \ ++ /*printk("%s", strDebug)*/ezxlogk("MX", strDebug, strlen(strDebug)); }) ++#endif /* End #ifdef PRINT_OUTPUT_PRINTK */ ++ ++#else ++#define TS0710_DEBUG(fmt...) ++#endif /* End #ifdef TS0710DEBUG */ ++ ++#ifdef TS0710LOG ++static unsigned char g_tbuf[TS0710MUX_MAX_BUF_SIZE]; ++#ifdef PRINT_OUTPUT_PRINTK ++#define TS0710_LOG(fmt, arg...) printk(fmt, ## arg) ++#define TS0710_PRINTK(fmt, arg...) printk(fmt, ## arg) ++#else ++#include "ezxlog.h" ++static __u8 strLog[256]; ++#define TS0710_LOG(fmt, arg...) ({ snprintf(strLog, sizeof(strLog), fmt, ## arg); \ ++ /*printk("%s", strLog)*/ezxlogk("MX", strLog, strlen(strLog)); }) ++#define TS0710_PRINTK(fmt, arg...) ({ printk(fmt, ## arg); \ ++ TS0710_LOG(fmt, ## arg); }) ++#endif /* End #ifdef PRINT_OUTPUT_PRINTK */ ++ ++#else ++#define TS0710_LOG(fmt...) ++#define TS0710_PRINTK(fmt, arg...) printk(fmt, ## arg) ++#endif /* End #ifdef TS0710LOG */ ++ ++#ifdef TS0710DEBUG ++static void TS0710_DEBUGHEX(__u8 * buf, int len) ++{ ++ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; ++ ++ int i; ++ int c; ++ ++ if (len <= 0) { ++ return; ++ } ++ ++ c = 0; ++ for (i = 0; (i < len) && (c < (TS0710MUX_MAX_BUF_SIZE - 3)); i++) { ++ sprintf(&tbuf[c], "%02x ", buf[i]); ++ c += 3; ++ } ++ tbuf[c] = 0; ++ ++#ifdef PRINT_OUTPUT_PRINTK ++ TS0710_DEBUG("%s", tbuf); ++#else ++ /*printk("%s\n", tbuf) */ ezxlogk("MX", tbuf, c); ++#endif ++} ++static void TS0710_DEBUGSTR(__u8 * buf, int len) ++{ ++ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; ++ ++ if (len <= 0) { ++ return; ++ } ++ ++ if (len > (TS0710MUX_MAX_BUF_SIZE - 1)) { ++ len = (TS0710MUX_MAX_BUF_SIZE - 1); ++ } ++ ++ memcpy(tbuf, buf, len); ++ tbuf[len] = 0; ++ ++#ifdef PRINT_OUTPUT_PRINTK ++ /* 0x00 byte in the string pointed by tbuf may truncate the print result */ ++ TS0710_DEBUG("%s", tbuf); ++#else ++ /*printk("%s\n", tbuf) */ ezxlogk("MX", tbuf, len); ++#endif ++} ++#else ++#define TS0710_DEBUGHEX(buf, len) ++#define TS0710_DEBUGSTR(buf, len) ++#endif /* End #ifdef TS0710DEBUG */ ++ ++#ifdef TS0710LOG ++static void TS0710_LOGSTR_FRAME(__u8 send, __u8 * data, int len) ++{ ++ short_frame *short_pkt; ++ long_frame *long_pkt; ++ __u8 *uih_data_start; ++ __u32 uih_len; ++ __u8 dlci; ++ int pos; ++ ++ if (len <= 0) { ++ return; ++ } ++ ++ pos = 0; ++ if (send) { ++ pos += sprintf(&g_tbuf[pos], "<"); ++ short_pkt = (short_frame *) (data + 1); /*For BP UART problem */ ++ } else { ++ /*For BP UART problem */ ++ /*pos += sprintf(&g_tbuf[pos], ">"); */ ++ pos += sprintf(&g_tbuf[pos], ">%d ", *(data + SLIDE_BP_SEQ_OFFSET)); /*For BP UART problem */ ++ ++#ifdef TS0710SEQ2 ++ pos += sprintf(&g_tbuf[pos], "%02x %02x %02x %02x ", *(data + FIRST_BP_SEQ_OFFSET), *(data + SECOND_BP_SEQ_OFFSET), *(data + FIRST_AP_SEQ_OFFSET), *(data + SECOND_AP_SEQ_OFFSET)); /*For BP UART problem */ ++#endif ++ ++ short_pkt = (short_frame *) (data + ADDRESS_FIELD_OFFSET); /*For BP UART problem */ ++ } ++ ++ /*For BP UART problem */ ++ /*short_pkt = (short_frame *)(data + 1); */ ++ ++ dlci = short_pkt->h.addr.server_chn << 1 | short_pkt->h.addr.d; ++ switch (CLR_PF(short_pkt->h.control)) { ++ case SABM: ++ pos += sprintf(&g_tbuf[pos], "C SABM %d ::", dlci); ++ break; ++ case UA: ++ pos += sprintf(&g_tbuf[pos], "C UA %d ::", dlci); ++ break; ++ case DM: ++ pos += sprintf(&g_tbuf[pos], "C DM %d ::", dlci); ++ break; ++ case DISC: ++ pos += sprintf(&g_tbuf[pos], "C DISC %d ::", dlci); ++ break; ++ ++ /*For BP UART problem Begin */ ++ case ACK: ++ pos += sprintf(&g_tbuf[pos], "C ACK %d ", short_pkt->data[0]); ++ ++#ifdef TS0710SEQ2 ++ pos += sprintf(&g_tbuf[pos], "%02x %02x %02x %02x ", short_pkt->data[1], short_pkt->data[2], short_pkt->data[3], short_pkt->data[4]); /*For BP UART problem */ ++#endif ++ ++ pos += sprintf(&g_tbuf[pos], "::"); ++ break; ++ /*For BP UART problem End */ ++ ++ case UIH: ++ if (!dlci) { ++ pos += sprintf(&g_tbuf[pos], "C MCC %d ::", dlci); ++ } else { ++ ++ if ((short_pkt->h.length.ea) == 0) { ++ long_pkt = (long_frame *) short_pkt; ++ uih_len = GET_LONG_LENGTH(long_pkt->h.length); ++ uih_data_start = long_pkt->h.data; ++ } else { ++ uih_len = short_pkt->h.length.len; ++ uih_data_start = short_pkt->data; ++ } ++ switch (*uih_data_start) { ++ case CMDTAG: ++ pos += ++ sprintf(&g_tbuf[pos], "I %d A %d ::", dlci, ++ uih_len); ++ break; ++ case DATATAG: ++ default: ++ pos += ++ sprintf(&g_tbuf[pos], "I %d D %d ::", dlci, ++ uih_len); ++ break; ++ } ++ ++ } ++ break; ++ default: ++ pos += sprintf(&g_tbuf[pos], "N!!! %d ::", dlci); ++ break; ++ } ++ ++ if (len > (sizeof(g_tbuf) - pos - 1)) { ++ len = (sizeof(g_tbuf) - pos - 1); ++ } ++ ++ memcpy(&g_tbuf[pos], data, len); ++ pos += len; ++ g_tbuf[pos] = 0; ++ ++#ifdef PRINT_OUTPUT_PRINTK ++ /* 0x00 byte in the string pointed by g_tbuf may truncate the print result */ ++ TS0710_LOG("%s\n", g_tbuf); ++#else ++ /*printk("%s\n", g_tbuf) */ ezxlogk("MX", g_tbuf, pos); ++#endif ++} ++#else ++#define TS0710_LOGSTR_FRAME(send, data, len) ++#endif ++ ++#ifdef TS0710SIG ++#define my_for_each_task(p) \ ++ for ((p) = current; ((p) = (p)->next_task) != current; ) ++ ++static void TS0710_SIG2APLOGD(void) ++{ ++ struct task_struct *p; ++ static __u8 sig = 0; ++ ++ if (sig) { ++ return; ++ } ++ ++ read_lock(&tasklist_lock); ++ my_for_each_task(p) { ++ if (strncmp(p->comm, "aplogd", 6) == 0) { ++ sig = 1; ++ if (send_sig(SIGUSR2, p, 1) == 0) { ++ TS0710_PRINTK ++ ("MUX: success to send SIGUSR2 to aplogd!\n"); ++ } else { ++ TS0710_PRINTK ++ ("MUX: failure to send SIGUSR2 to aplogd!\n"); ++ } ++ break; ++ } ++ } ++ read_unlock(&tasklist_lock); ++ ++ if (!sig) { ++ TS0710_PRINTK("MUX: not found aplogd!\n"); ++ } ++} ++#else ++#define TS0710_SIG2APLOGD() ++#endif ++ ++static int basic_write(ts0710_con * ts0710, __u8 * buf, int len) ++{ ++ int res; ++ ++ UNUSED_PARAM(ts0710); ++ ++ buf[0] = TS0710_BASIC_FLAG; ++ buf[len + 1] = TS0710_BASIC_FLAG; ++ ++ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) { ++ TS0710_PRINTK ++ ("MUX basic_write: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n"); ++ ++#ifndef USB_FOR_MUX ++ TS0710_PRINTK ++ ("MUX basic_write: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n"); ++ TS0710_SIG2APLOGD(); ++#endif ++ ++ return -1; ++ } ++ ++ TS0710_LOGSTR_FRAME(1, buf, len + 2); ++ TS0710_DEBUGHEX(buf, len + 2); ++ ++ res = COMM_FOR_MUX_DRIVER->write(COMM_FOR_MUX_TTY, buf, len + 2); ++ ++ if (res != len + 2) { ++ TS0710_PRINTK("MUX basic_write: Write Error!\n"); ++ return -1; ++ } ++ ++ return len + 2; ++} ++ ++/* Functions for the crc-check and calculation */ ++ ++#define CRC_VALID 0xcf ++ ++static __u32 crc_check(__u8 * data, __u32 length, __u8 check_sum) ++{ ++ __u8 fcs = 0xff; ++ ++ while (length--) { ++ fcs = crctable[fcs ^ *data++]; ++ } ++ fcs = crctable[fcs ^ check_sum]; ++ TS0710_DEBUG("fcs : %d\n", fcs); ++ if (fcs == (uint) 0xcf) { /*CRC_VALID) */ ++ TS0710_DEBUG("crc_check: CRC check OK\n"); ++ return 0; ++ } else { ++ TS0710_PRINTK("MUX crc_check: CRC check failed\n"); ++ return 1; ++ } ++} ++ ++/* Calculates the checksum according to the ts0710 specification */ ++ ++static __u8 crc_calc(__u8 * data, __u32 length) ++{ ++ __u8 fcs = 0xff; ++ ++ while (length--) { ++ fcs = crctable[fcs ^ *data++]; ++ } ++ ++ return 0xff - fcs; ++} ++ ++/* Calulates a reversed CRC table for the FCS check */ ++ ++static void create_crctable(__u8 table[]) ++{ ++ int i, j; ++ ++ __u8 data; ++ __u8 code_word = (__u8) 0xe0; ++ __u8 sr = (__u8) 0; ++ ++ for (j = 0; j < 256; j++) { ++ data = (__u8) j; ++ ++ for (i = 0; i < 8; i++) { ++ if ((data & 0x1) ^ (sr & 0x1)) { ++ sr >>= 1; ++ sr ^= code_word; ++ } else { ++ sr >>= 1; ++ } ++ ++ data >>= 1; ++ sr &= 0xff; ++ } ++ ++ table[j] = sr; ++ sr = 0; ++ } ++} ++ ++static void ts0710_reset_dlci(__u8 j) ++{ ++ if (j >= TS0710_MAX_CHN) ++ return; ++ ++ ts0710_connection.dlci[j].state = DISCONNECTED; ++ ts0710_connection.dlci[j].flow_control = 0; ++ ts0710_connection.dlci[j].mtu = DEF_TS0710_MTU; ++ ts0710_connection.dlci[j].initiated = 0; ++ ts0710_connection.dlci[j].initiator = 0; ++ init_waitqueue_head(&ts0710_connection.dlci[j].open_wait); ++ init_waitqueue_head(&ts0710_connection.dlci[j].close_wait); ++} ++ ++static void ts0710_reset_con(void) ++{ ++ __u8 j; ++ ++ ts0710_connection.initiator = 0; ++ ts0710_connection.mtu = DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE; ++ ts0710_connection.be_testing = 0; ++ ts0710_connection.test_errs = 0; ++ init_waitqueue_head(&ts0710_connection.test_wait); ++ ++ for (j = 0; j < TS0710_MAX_CHN; j++) { ++ ts0710_reset_dlci(j); ++ } ++} ++ ++static void ts0710_init(void) ++{ ++ create_crctable(crctable); ++ ++ ts0710_reset_con(); ++ ++ /* Set the values in the rpn octets */ ++/* ++ rpn_val.bit_rate = 7; ++ rpn_val.data_bits = 3; ++ rpn_val.stop_bit = 0; ++ rpn_val.parity = 0; ++ rpn_val.parity_type = 0; ++ rpn_val.res1 = 0; ++ rpn_val.xon_input = 0; ++ rpn_val.xon_output = 0; ++ rpn_val.rtr_input = 0; ++ rpn_val.rtr_output = 0; ++ rpn_val.rtc_input = 0; ++ rpn_val.rtc_output = 0; ++ rpn_val.res2 = 0; ++ rpn_val.xon_u8 = 0x11; ++ rpn_val.xoff_u8 = 0x13; ++ memset(&rpn_val.pm, 0 , 2); *//* Set the mask to zero */ ++} ++ ++static void ts0710_upon_disconnect(void) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ __u8 j; ++ ++ for (j = 0; j < TS0710_MAX_CHN; j++) { ++ ts0710->dlci[j].state = DISCONNECTED; ++ wake_up_interruptible(&ts0710->dlci[j].open_wait); ++ wake_up_interruptible(&ts0710->dlci[j].close_wait); ++ } ++ ts0710->be_testing = 0; ++ wake_up_interruptible(&ts0710->test_wait); ++ ts0710_reset_con(); ++} ++ ++/* Sending packet functions */ ++ ++/* Creates a UA packet and puts it at the beginning of the pkt pointer */ ++ ++static int send_ua(ts0710_con * ts0710, __u8 dlci) ++{ ++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE]; ++ short_frame *ua; ++ ++ TS0710_DEBUG("send_ua: Creating UA packet to DLCI %d\n", dlci); ++ ++ ua = (short_frame *) (buf + 1); ++ ua->h.addr.ea = 1; ++ ua->h.addr.cr = ((~(ts0710->initiator)) & 0x1); ++ ua->h.addr.d = (dlci) & 0x1; ++ ua->h.addr.server_chn = (dlci) >> 0x1; ++ ua->h.control = SET_PF(UA); ++ ua->h.length.ea = 1; ++ ua->h.length.len = 0; ++ ua->data[0] = crc_calc((__u8 *) ua, SHORT_CRC_CHECK); ++ ++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE); ++} ++ ++/* Creates a DM packet and puts it at the beginning of the pkt pointer */ ++ ++static int send_dm(ts0710_con * ts0710, __u8 dlci) ++{ ++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE]; ++ short_frame *dm; ++ ++ TS0710_DEBUG("send_dm: Creating DM packet to DLCI %d\n", dlci); ++ ++ dm = (short_frame *) (buf + 1); ++ dm->h.addr.ea = 1; ++ dm->h.addr.cr = ((~(ts0710->initiator)) & 0x1); ++ dm->h.addr.d = dlci & 0x1; ++ dm->h.addr.server_chn = dlci >> 0x1; ++ dm->h.control = SET_PF(DM); ++ dm->h.length.ea = 1; ++ dm->h.length.len = 0; ++ dm->data[0] = crc_calc((__u8 *) dm, SHORT_CRC_CHECK); ++ ++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE); ++} ++ ++static int send_sabm(ts0710_con * ts0710, __u8 dlci) ++{ ++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE]; ++ short_frame *sabm; ++ ++ TS0710_DEBUG("send_sabm: Creating SABM packet to DLCI %d\n", dlci); ++ ++ sabm = (short_frame *) (buf + 1); ++ sabm->h.addr.ea = 1; ++ sabm->h.addr.cr = ((ts0710->initiator) & 0x1); ++ sabm->h.addr.d = dlci & 0x1; ++ sabm->h.addr.server_chn = dlci >> 0x1; ++ sabm->h.control = SET_PF(SABM); ++ sabm->h.length.ea = 1; ++ sabm->h.length.len = 0; ++ sabm->data[0] = crc_calc((__u8 *) sabm, SHORT_CRC_CHECK); ++ ++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE); ++} ++ ++static int send_disc(ts0710_con * ts0710, __u8 dlci) ++{ ++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE]; ++ short_frame *disc; ++ ++ TS0710_DEBUG("send_disc: Creating DISC packet to DLCI %d\n", dlci); ++ ++ disc = (short_frame *) (buf + 1); ++ disc->h.addr.ea = 1; ++ disc->h.addr.cr = ((ts0710->initiator) & 0x1); ++ disc->h.addr.d = dlci & 0x1; ++ disc->h.addr.server_chn = dlci >> 0x1; ++ disc->h.control = SET_PF(DISC); ++ disc->h.length.ea = 1; ++ disc->h.length.len = 0; ++ disc->data[0] = crc_calc((__u8 *) disc, SHORT_CRC_CHECK); ++ ++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE); ++} ++ ++static void queue_uih(mux_send_struct * send_info, __u16 len, ++ ts0710_con * ts0710, __u8 dlci) ++{ ++ __u32 size; ++ ++ TS0710_DEBUG ++ ("queue_uih: Creating UIH packet with %d bytes data to DLCI %d\n", ++ len, dlci); ++ ++ if (len > SHORT_PAYLOAD_SIZE) { ++ long_frame *l_pkt; ++ ++ size = sizeof(long_frame) + len + FCS_SIZE; ++ l_pkt = (long_frame *) (send_info->frame - sizeof(long_frame)); ++ set_uih_hdr((void *)l_pkt, dlci, len, ts0710->initiator); ++ l_pkt->data[len] = crc_calc((__u8 *) l_pkt, LONG_CRC_CHECK); ++ send_info->frame = ((__u8 *) l_pkt) - 1; ++ } else { ++ short_frame *s_pkt; ++ ++ size = sizeof(short_frame) + len + FCS_SIZE; ++ s_pkt = ++ (short_frame *) (send_info->frame - sizeof(short_frame)); ++ set_uih_hdr((void *)s_pkt, dlci, len, ts0710->initiator); ++ s_pkt->data[len] = crc_calc((__u8 *) s_pkt, SHORT_CRC_CHECK); ++ send_info->frame = ((__u8 *) s_pkt) - 1; ++ } ++ send_info->length = size; ++} ++ ++/* Multiplexer command packets functions */ ++ ++/* Turns on the ts0710 flow control */ ++ ++static int ts0710_fcon_msg(ts0710_con * ts0710, __u8 cr) ++{ ++ __u8 buf[30]; ++ mcc_short_frame *mcc_pkt; ++ short_frame *uih_pkt; ++ __u32 size; ++ ++ size = sizeof(short_frame) + sizeof(mcc_short_frame) + FCS_SIZE; ++ uih_pkt = (short_frame *) (buf + 1); ++ set_uih_hdr(uih_pkt, CTRL_CHAN, sizeof(mcc_short_frame), ++ ts0710->initiator); ++ uih_pkt->data[sizeof(mcc_short_frame)] = ++ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK); ++ mcc_pkt = (mcc_short_frame *) (uih_pkt->data); ++ ++ mcc_pkt->h.type.ea = EA; ++ mcc_pkt->h.type.cr = cr; ++ mcc_pkt->h.type.type = FCON; ++ mcc_pkt->h.length.ea = EA; ++ mcc_pkt->h.length.len = 0; ++ ++ return basic_write(ts0710, buf, size); ++} ++ ++/* Turns off the ts0710 flow control */ ++ ++static int ts0710_fcoff_msg(ts0710_con * ts0710, __u8 cr) ++{ ++ __u8 buf[30]; ++ mcc_short_frame *mcc_pkt; ++ short_frame *uih_pkt; ++ __u32 size; ++ ++ size = (sizeof(short_frame) + sizeof(mcc_short_frame) + FCS_SIZE); ++ uih_pkt = (short_frame *) (buf + 1); ++ set_uih_hdr(uih_pkt, CTRL_CHAN, sizeof(mcc_short_frame), ++ ts0710->initiator); ++ uih_pkt->data[sizeof(mcc_short_frame)] = ++ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK); ++ mcc_pkt = (mcc_short_frame *) (uih_pkt->data); ++ ++ mcc_pkt->h.type.ea = 1; ++ mcc_pkt->h.type.cr = cr; ++ mcc_pkt->h.type.type = FCOFF; ++ mcc_pkt->h.length.ea = 1; ++ mcc_pkt->h.length.len = 0; ++ ++ return basic_write(ts0710, buf, size); ++} ++ ++/* ++static int ts0710_rpn_msg(ts0710_con *ts0710, __u8 cr, __u8 dlci, __u8 req) ++{ ++ char buf[100]; ++ rpn_msg* rpn_pkt; ++ __u32 fsize; ++ __u32 psize; ++ ++ fsize = sizeof(rpn_msg); ++ ++ if (req) { ++ fsize -= sizeof(rpn_values); ++ } ++ ++ psize = (fsize - sizeof(short_frame) - FCS_SIZE); ++ ++ rpn_pkt = (rpn_msg *) buf; ++ ++ set_uih_hdr((short_frame *) rpn_pkt, CTRL_CHAN, psize, ts0710->initiator); ++ ++ rpn_pkt->fcs = crc_calc((__u8*) rpn_pkt, SHORT_CRC_CHECK); ++ ++ rpn_pkt->mcc_s_head.type.ea = EA; ++ rpn_pkt->mcc_s_head.type.cr = cr; ++ rpn_pkt->mcc_s_head.type.type = RPN; ++ rpn_pkt->mcc_s_head.length.ea = EA; ++ ++ rpn_pkt->dlci.ea = EA; ++ rpn_pkt->dlci.cr = 1; ++ rpn_pkt->dlci.d = dlci & 1; ++ rpn_pkt->dlci.server_chn = (dlci >> 1); ++ ++ if (req) { ++ rpn_pkt->mcc_s_head.length.len = 1; ++ rpn_pkt->rpn_val.bit_rate = rpn_pkt->fcs; ++ } else { ++ rpn_pkt->mcc_s_head.length.len = 8; ++ memcpy(&(rpn_pkt->rpn_val), &rpn_val, sizeof(rpn_values)); ++ } ++ return basic_write(ts0710, buf, fsize); ++} ++*/ ++/* ++static int ts0710_rls_msg(ts0710_con *ts0710, __u8 cr, __u8 dlci, __u8 err_code) ++{ ++ char buf[100]; ++ rls_msg *rls_pkt; ++ __u32 fsize; ++ __u32 psize; ++ ++ fsize = sizeof(rls_msg); ++ psize = fsize - sizeof(short_frame) - FCS_SIZE; ++ rls_pkt = (rls_msg *) buf; ++ ++ set_uih_hdr((short_frame *) rls_pkt, CTRL_CHAN, psize, ts0710->initiator); ++ rls_pkt->fcs = crc_calc((__u8*) rls_pkt, SHORT_CRC_CHECK); ++ ++ rls_pkt->mcc_s_head.type.ea = EA; ++ rls_pkt->mcc_s_head.type.cr = cr; ++ rls_pkt->mcc_s_head.type.type = RLS; ++ rls_pkt->mcc_s_head.length.ea = EA; ++ rls_pkt->mcc_s_head.length.len = 2; ++ ++ rls_pkt->dlci.ea = EA; ++ rls_pkt->dlci.cr = 1; ++ rls_pkt->dlci.d = dlci & 1; ++ rls_pkt->dlci.server_chn = dlci >> 1; ++ rls_pkt->error = err_code; ++ rls_pkt->res = 0; ++ ++ return basic_write(ts0710, buf, fsize); ++} ++*/ ++ ++/* Sends an PN-messages and sets the not negotiable parameters to their ++ default values in ts0710 */ ++ ++static int send_pn_msg(ts0710_con * ts0710, __u8 prior, __u32 frame_size, ++ __u8 credit_flow, __u8 credits, __u8 dlci, __u8 cr) ++{ ++ __u8 buf[30]; ++ pn_msg *pn_pkt; ++ __u32 size; ++ TS0710_DEBUG ++ ("send_pn_msg: DLCI 0x%02x, prior:0x%02x, frame_size:%d, credit_flow:%x, credits:%d, cr:%x\n", ++ dlci, prior, frame_size, credit_flow, credits, cr); ++ ++ size = sizeof(pn_msg); ++ pn_pkt = (pn_msg *) (buf + 1); ++ ++ set_uih_hdr((void *)pn_pkt, CTRL_CHAN, ++ size - (sizeof(short_frame) + FCS_SIZE), ts0710->initiator); ++ pn_pkt->fcs = crc_calc((__u8 *) pn_pkt, SHORT_CRC_CHECK); ++ ++ pn_pkt->mcc_s_head.type.ea = 1; ++ pn_pkt->mcc_s_head.type.cr = cr; ++ pn_pkt->mcc_s_head.type.type = PN; ++ pn_pkt->mcc_s_head.length.ea = 1; ++ pn_pkt->mcc_s_head.length.len = 8; ++ ++ pn_pkt->res1 = 0; ++ pn_pkt->res2 = 0; ++ pn_pkt->dlci = dlci; ++ pn_pkt->frame_type = 0; ++ pn_pkt->credit_flow = credit_flow; ++ pn_pkt->prior = prior; ++ pn_pkt->ack_timer = 0; ++ SET_PN_MSG_FRAME_SIZE(pn_pkt, frame_size); ++ pn_pkt->credits = credits; ++ pn_pkt->max_nbrof_retrans = 0; ++ ++ return basic_write(ts0710, buf, size); ++} ++ ++/* Send a Not supported command - command, which needs 3 bytes */ ++ ++static int send_nsc_msg(ts0710_con * ts0710, mcc_type cmd, __u8 cr) ++{ ++ __u8 buf[30]; ++ nsc_msg *nsc_pkt; ++ __u32 size; ++ ++ size = sizeof(nsc_msg); ++ nsc_pkt = (nsc_msg *) (buf + 1); ++ ++ set_uih_hdr((void *)nsc_pkt, CTRL_CHAN, ++ sizeof(nsc_msg) - sizeof(short_frame) - FCS_SIZE, ++ ts0710->initiator); ++ ++ nsc_pkt->fcs = crc_calc((__u8 *) nsc_pkt, SHORT_CRC_CHECK); ++ ++ nsc_pkt->mcc_s_head.type.ea = 1; ++ nsc_pkt->mcc_s_head.type.cr = cr; ++ nsc_pkt->mcc_s_head.type.type = NSC; ++ nsc_pkt->mcc_s_head.length.ea = 1; ++ nsc_pkt->mcc_s_head.length.len = 1; ++ ++ nsc_pkt->command_type.ea = 1; ++ nsc_pkt->command_type.cr = cmd.cr; ++ nsc_pkt->command_type.type = cmd.type; ++ ++ return basic_write(ts0710, buf, size); ++} ++ ++static int ts0710_msc_msg(ts0710_con * ts0710, __u8 value, __u8 cr, __u8 dlci) ++{ ++ __u8 buf[30]; ++ msc_msg *msc_pkt; ++ __u32 size; ++ ++ size = sizeof(msc_msg); ++ msc_pkt = (msc_msg *) (buf + 1); ++ ++ set_uih_hdr((void *)msc_pkt, CTRL_CHAN, ++ sizeof(msc_msg) - sizeof(short_frame) - FCS_SIZE, ++ ts0710->initiator); ++ ++ msc_pkt->fcs = crc_calc((__u8 *) msc_pkt, SHORT_CRC_CHECK); ++ ++ msc_pkt->mcc_s_head.type.ea = 1; ++ msc_pkt->mcc_s_head.type.cr = cr; ++ msc_pkt->mcc_s_head.type.type = MSC; ++ msc_pkt->mcc_s_head.length.ea = 1; ++ msc_pkt->mcc_s_head.length.len = 2; ++ ++ msc_pkt->dlci.ea = 1; ++ msc_pkt->dlci.cr = 1; ++ msc_pkt->dlci.d = dlci & 1; ++ msc_pkt->dlci.server_chn = (dlci >> 1) & 0x1f; ++ ++ msc_pkt->v24_sigs = value; ++ ++ return basic_write(ts0710, buf, size); ++} ++ ++static int ts0710_test_msg(ts0710_con * ts0710, __u8 * test_pattern, __u32 len, ++ __u8 cr, __u8 * f_buf /*Frame buf */ ) ++{ ++ __u32 size; ++ ++ if (len > SHORT_PAYLOAD_SIZE) { ++ long_frame *uih_pkt; ++ mcc_long_frame *mcc_pkt; ++ ++ size = ++ (sizeof(long_frame) + sizeof(mcc_long_frame) + len + ++ FCS_SIZE); ++ uih_pkt = (long_frame *) (f_buf + 1); ++ ++ set_uih_hdr((short_frame *) uih_pkt, CTRL_CHAN, len + ++ sizeof(mcc_long_frame), ts0710->initiator); ++ uih_pkt->data[GET_LONG_LENGTH(uih_pkt->h.length)] = ++ crc_calc((__u8 *) uih_pkt, LONG_CRC_CHECK); ++ mcc_pkt = (mcc_long_frame *) uih_pkt->data; ++ ++ mcc_pkt->h.type.ea = EA; ++ /* cr tells whether it is a commmand (1) or a response (0) */ ++ mcc_pkt->h.type.cr = cr; ++ mcc_pkt->h.type.type = TEST; ++ SET_LONG_LENGTH(mcc_pkt->h.length, len); ++ memcpy(mcc_pkt->value, test_pattern, len); ++ } else if (len > (SHORT_PAYLOAD_SIZE - sizeof(mcc_short_frame))) { ++ long_frame *uih_pkt; ++ mcc_short_frame *mcc_pkt; ++ ++ /* Create long uih packet and short mcc packet */ ++ size = ++ (sizeof(long_frame) + sizeof(mcc_short_frame) + len + ++ FCS_SIZE); ++ uih_pkt = (long_frame *) (f_buf + 1); ++ ++ set_uih_hdr((short_frame *) uih_pkt, CTRL_CHAN, ++ len + sizeof(mcc_short_frame), ts0710->initiator); ++ uih_pkt->data[GET_LONG_LENGTH(uih_pkt->h.length)] = ++ crc_calc((__u8 *) uih_pkt, LONG_CRC_CHECK); ++ mcc_pkt = (mcc_short_frame *) uih_pkt->data; ++ ++ mcc_pkt->h.type.ea = EA; ++ mcc_pkt->h.type.cr = cr; ++ mcc_pkt->h.type.type = TEST; ++ mcc_pkt->h.length.ea = EA; ++ mcc_pkt->h.length.len = len; ++ memcpy(mcc_pkt->value, test_pattern, len); ++ } else { ++ short_frame *uih_pkt; ++ mcc_short_frame *mcc_pkt; ++ ++ size = ++ (sizeof(short_frame) + sizeof(mcc_short_frame) + len + ++ FCS_SIZE); ++ uih_pkt = (short_frame *) (f_buf + 1); ++ ++ set_uih_hdr((void *)uih_pkt, CTRL_CHAN, len ++ + sizeof(mcc_short_frame), ts0710->initiator); ++ uih_pkt->data[uih_pkt->h.length.len] = ++ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK); ++ mcc_pkt = (mcc_short_frame *) uih_pkt->data; ++ ++ mcc_pkt->h.type.ea = EA; ++ mcc_pkt->h.type.cr = cr; ++ mcc_pkt->h.type.type = TEST; ++ mcc_pkt->h.length.ea = EA; ++ mcc_pkt->h.length.len = len; ++ memcpy(mcc_pkt->value, test_pattern, len); ++ ++ } ++ return basic_write(ts0710, f_buf, size); ++} ++ ++static void set_uih_hdr(short_frame * uih_pkt, __u8 dlci, __u32 len, __u8 cr) ++{ ++ uih_pkt->h.addr.ea = 1; ++ uih_pkt->h.addr.cr = cr; ++ uih_pkt->h.addr.d = dlci & 0x1; ++ uih_pkt->h.addr.server_chn = dlci >> 1; ++ uih_pkt->h.control = CLR_PF(UIH); ++ ++ if (len > SHORT_PAYLOAD_SIZE) { ++ SET_LONG_LENGTH(((long_frame *) uih_pkt)->h.length, len); ++ } else { ++ uih_pkt->h.length.ea = 1; ++ uih_pkt->h.length.len = len; ++ } ++} ++ ++/* Parses a multiplexer control channel packet */ ++ ++void process_mcc(__u8 * data, __u32 len, ts0710_con * ts0710, int longpkt) ++{ ++ __u8 *tbuf = NULL; ++ mcc_short_frame *mcc_short_pkt; ++ int j; ++ ++ if (longpkt) { ++ mcc_short_pkt = ++ (mcc_short_frame *) (((long_frame *) data)->data); ++ } else { ++ mcc_short_pkt = ++ (mcc_short_frame *) (((short_frame *) data)->data); ++ } ++ ++ switch (mcc_short_pkt->h.type.type) { ++ case TEST: ++ if (mcc_short_pkt->h.type.cr == MCC_RSP) { ++ TS0710_DEBUG("Received test command response\n"); ++ ++ if (ts0710->be_testing) { ++ if ((mcc_short_pkt->h.length.ea) == 0) { ++ mcc_long_frame *mcc_long_pkt; ++ mcc_long_pkt = ++ (mcc_long_frame *) mcc_short_pkt; ++ if (GET_LONG_LENGTH ++ (mcc_long_pkt->h.length) != ++ TEST_PATTERN_SIZE) { ++ ts0710->test_errs = ++ TEST_PATTERN_SIZE; ++ TS0710_DEBUG ++ ("Err: received test pattern is %d bytes long, not expected %d\n", ++ GET_LONG_LENGTH ++ (mcc_long_pkt->h.length), ++ TEST_PATTERN_SIZE); ++ } else { ++ ts0710->test_errs = 0; ++ for (j = 0; ++ j < TEST_PATTERN_SIZE; ++ j++) { ++ if (mcc_long_pkt-> ++ value[j] != ++ (j & 0xFF)) { ++ (ts0710-> ++ test_errs)++; ++ } ++ } ++ } ++ ++ } else { ++ ++#if TEST_PATTERN_SIZE < 128 ++ if (mcc_short_pkt->h.length.len != ++ TEST_PATTERN_SIZE) { ++#endif ++ ++ ts0710->test_errs = ++ TEST_PATTERN_SIZE; ++ TS0710_DEBUG ++ ("Err: received test pattern is %d bytes long, not expected %d\n", ++ mcc_short_pkt->h.length. ++ len, TEST_PATTERN_SIZE); ++ ++#if TEST_PATTERN_SIZE < 128 ++ } else { ++ ts0710->test_errs = 0; ++ for (j = 0; ++ j < TEST_PATTERN_SIZE; ++ j++) { ++ if (mcc_short_pkt-> ++ value[j] != ++ (j & 0xFF)) { ++ (ts0710-> ++ test_errs)++; ++ } ++ } ++ } ++#endif ++ ++ } ++ ++ ts0710->be_testing = 0; /* Clear the flag */ ++ wake_up_interruptible(&ts0710->test_wait); ++ } else { ++ TS0710_DEBUG ++ ("Err: shouldn't or late to get test cmd response\n"); ++ } ++ } else { ++ tbuf = (__u8 *) kmalloc(len + 32, GFP_ATOMIC); ++ if (!tbuf) { ++ break; ++ } ++ ++ if ((mcc_short_pkt->h.length.ea) == 0) { ++ mcc_long_frame *mcc_long_pkt; ++ mcc_long_pkt = (mcc_long_frame *) mcc_short_pkt; ++ ts0710_test_msg(ts0710, mcc_long_pkt->value, ++ GET_LONG_LENGTH(mcc_long_pkt->h. ++ length), ++ MCC_RSP, tbuf); ++ } else { ++ ts0710_test_msg(ts0710, mcc_short_pkt->value, ++ mcc_short_pkt->h.length.len, ++ MCC_RSP, tbuf); ++ } ++ ++ kfree(tbuf); ++ } ++ break; ++ ++ case FCON: /*Flow control on command */ ++ TS0710_PRINTK ++ ("MUX Received Flow control(all channels) on command\n"); ++ if (mcc_short_pkt->h.type.cr == MCC_CMD) { ++ ts0710->dlci[0].state = CONNECTED; ++ ts0710_fcon_msg(ts0710, MCC_RSP); ++ mux_sched_send(); ++ } ++ break; ++ ++ case FCOFF: /*Flow control off command */ ++ TS0710_PRINTK ++ ("MUX Received Flow control(all channels) off command\n"); ++ if (mcc_short_pkt->h.type.cr == MCC_CMD) { ++ for (j = 0; j < TS0710_MAX_CHN; j++) { ++ ts0710->dlci[j].state = FLOW_STOPPED; ++ } ++ ts0710_fcoff_msg(ts0710, MCC_RSP); ++ } ++ break; ++ ++ case MSC: /*Modem status command */ ++ { ++ __u8 dlci; ++ __u8 v24_sigs; ++ ++ dlci = (mcc_short_pkt->value[0]) >> 2; ++ v24_sigs = mcc_short_pkt->value[1]; ++ ++ if ((ts0710->dlci[dlci].state != CONNECTED) ++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { ++ send_dm(ts0710, dlci); ++ break; ++ } ++ if (mcc_short_pkt->h.type.cr == MCC_CMD) { ++ TS0710_DEBUG("Received Modem status command\n"); ++ if (v24_sigs & 2) { ++ if (ts0710->dlci[dlci].state == ++ CONNECTED) { ++ TS0710_LOG ++ ("MUX Received Flow off on dlci %d\n", ++ dlci); ++ ts0710->dlci[dlci].state = ++ FLOW_STOPPED; ++ } ++ } else { ++ if (ts0710->dlci[dlci].state == ++ FLOW_STOPPED) { ++ ts0710->dlci[dlci].state = ++ CONNECTED; ++ TS0710_LOG ++ ("MUX Received Flow on on dlci %d\n", ++ dlci); ++ mux_sched_send(); ++ } ++ } ++ ++ ts0710_msc_msg(ts0710, v24_sigs, MCC_RSP, dlci); ++/* ++ if (!(ts0710->dlci[dlci].initiated) && !(ts0710->dlci[dlci].initiator)) { ++ ts0710_msc_msg(ts0710, EA | RTR | RTC | DV, MCC_CMD, dlci); ++ ts0710->dlci[dlci].initiated = 1; ++ } ++*/ ++ } else { ++ TS0710_DEBUG ++ ("Received Modem status response\n"); ++ ++ if (v24_sigs & 2) { ++ TS0710_DEBUG("Flow stop accepted\n"); ++ } ++ } ++ break; ++ } ++ ++ /* case RPN: *//*Remote port negotiation command */ ++ ++/* { ++ __u8 dlci; ++ ++ dlci = (mcc_short_pkt->value[0]) >> 2; ++ ++ if (mcc_short_pkt->h.type.cr == MCC_CMD) { ++ if (mcc_short_pkt->h.length.len == 1) { ++ TS0710_DEBUG("Received Remote port negotiation command\n"); ++ ts0710_rpn_msg(ts0710, MCC_RSP, dlci, 0); ++ } else { ++*/ ++ /* Accept the other sides settings (accept all for now) */ ++/* TS0710_DEBUG("Received Remote port negotiation respons\n"); ++ memcpy(&rpn_val, &mcc_short_pkt->value[1], 8); ++ ts0710_rpn_msg(ts0710, MCC_RSP, dlci, 0); ++*/ ++ /* Zero the parametermask after response */ ++/* memset(&rpn_val.pm, 0, 2); ++ } ++ } ++ break; ++ } ++*/ ++/* ++ case RLS: *//*Remote line status */ ++/* { ++ __u8 dlci; ++ __u8 err_code; ++ ++ TS0710_DEBUG("Received Remote line status\n"); ++ if (mcc_short_pkt->h.type.cr == MCC_CMD) { ++ dlci = mcc_short_pkt->value[0] >> 2; ++ err_code = mcc_short_pkt->value[1]; ++ ++ ts0710_rls_msg(ts0710, MCC_RSP, dlci, err_code); ++ } ++ break; ++ } ++*/ ++ case PN: /*DLC parameter negotiation */ ++ { ++ __u8 dlci; ++ __u16 frame_size; ++ pn_msg *pn_pkt; ++ ++ pn_pkt = (pn_msg *) data; ++ dlci = pn_pkt->dlci; ++ frame_size = GET_PN_MSG_FRAME_SIZE(pn_pkt); ++ TS0710_DEBUG ++ ("Received DLC parameter negotiation, PN\n"); ++ if (pn_pkt->mcc_s_head.type.cr == MCC_CMD) { ++ TS0710_DEBUG("received PN command with:\n"); ++ TS0710_DEBUG("Frame size:%d\n", frame_size); ++ ++ frame_size = ++ min(frame_size, ts0710->dlci[dlci].mtu); ++ send_pn_msg(ts0710, pn_pkt->prior, frame_size, ++ 0, 0, dlci, MCC_RSP); ++ ts0710->dlci[dlci].mtu = frame_size; ++ TS0710_DEBUG("process_mcc : mtu set to %d\n", ++ ts0710->dlci[dlci].mtu); ++ } else { ++ TS0710_DEBUG("received PN response with:\n"); ++ TS0710_DEBUG("Frame size:%d\n", frame_size); ++ ++ frame_size = ++ min(frame_size, ts0710->dlci[dlci].mtu); ++ ts0710->dlci[dlci].mtu = frame_size; ++ ++ TS0710_DEBUG ++ ("process_mcc : mtu set on dlci:%d to %d\n", ++ dlci, ts0710->dlci[dlci].mtu); ++ ++ if (ts0710->dlci[dlci].state == NEGOTIATING) { ++ ts0710->dlci[dlci].state = CONNECTING; ++ wake_up_interruptible(&ts0710-> ++ dlci[dlci]. ++ open_wait); ++ } ++ } ++ break; ++ } ++ ++ case NSC: /*Non supported command resonse */ ++ TS0710_LOG("MUX Received Non supported command response\n"); ++ break; ++ ++ default: /*Non supported command received */ ++ TS0710_LOG("MUX Received a non supported command\n"); ++ send_nsc_msg(ts0710, mcc_short_pkt->h.type, MCC_RSP); ++ break; ++ } ++} ++ ++static mux_recv_packet *get_mux_recv_packet(__u32 size) ++{ ++ mux_recv_packet *recv_packet; ++ ++ TS0710_DEBUG("Enter into get_mux_recv_packet"); ++ ++ recv_packet = ++ (mux_recv_packet *) kmalloc(sizeof(mux_recv_packet), GFP_ATOMIC); ++ if (!recv_packet) { ++ return 0; ++ } ++ ++ recv_packet->data = (__u8 *) kmalloc(size, GFP_ATOMIC); ++ if (!(recv_packet->data)) { ++ kfree(recv_packet); ++ return 0; ++ } ++ recv_packet->length = 0; ++ recv_packet->next = 0; ++ return recv_packet; ++} ++ ++static void free_mux_recv_packet(mux_recv_packet * recv_packet) ++{ ++ TS0710_DEBUG("Enter into free_mux_recv_packet"); ++ ++ if (!recv_packet) { ++ return; ++ } ++ ++ if (recv_packet->data) { ++ kfree(recv_packet->data); ++ } ++ kfree(recv_packet); ++} ++ ++static void free_mux_recv_struct(mux_recv_struct * recv_info) ++{ ++ mux_recv_packet *recv_packet1, *recv_packet2; ++ ++ if (!recv_info) { ++ return; ++ } ++ ++ recv_packet1 = recv_info->mux_packet; ++ while (recv_packet1) { ++ recv_packet2 = recv_packet1->next; ++ free_mux_recv_packet(recv_packet1); ++ recv_packet1 = recv_packet2; ++ } ++ ++ kfree(recv_info); ++} ++ ++static inline void add_post_recv_queue(mux_recv_struct ** head, ++ mux_recv_struct * new_item) ++{ ++ new_item->next = *head; ++ *head = new_item; ++} ++ ++static void ts0710_flow_on(__u8 dlci, ts0710_con * ts0710) ++{ ++ int i; ++ __u8 cmdtty; ++ __u8 datatty; ++ struct tty_struct *tty; ++ mux_recv_struct *recv_info; ++ ++ if ((ts0710->dlci[0].state != CONNECTED) ++ && (ts0710->dlci[0].state != FLOW_STOPPED)) { ++ return; ++ } else if ((ts0710->dlci[dlci].state != CONNECTED) ++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { ++ return; ++ } ++ ++ if (!(ts0710->dlci[dlci].flow_control)) { ++ return; ++ } ++ ++ cmdtty = dlci2tty[dlci].cmdtty; ++ datatty = dlci2tty[dlci].datatty; ++ ++ if (cmdtty != datatty) { ++ /* Check AT cmd tty */ ++ tty = mux_table[cmdtty]; ++ if (mux_tty[cmdtty] && tty) { ++ if (test_bit(TTY_THROTTLED, &tty->flags)) { ++ return; ++ } ++ } ++ recv_info = mux_recv_info[cmdtty]; ++ if (mux_recv_info_flags[cmdtty] && recv_info) { ++ if (recv_info->total) { ++ return; ++ } ++ } ++ ++ /* Check data tty */ ++ tty = mux_table[datatty]; ++ if (mux_tty[datatty] && tty) { ++ if (test_bit(TTY_THROTTLED, &tty->flags)) { ++ return; ++ } ++ } ++ recv_info = mux_recv_info[datatty]; ++ if (mux_recv_info_flags[datatty] && recv_info) { ++ if (recv_info->total) { ++ return; ++ } ++ } ++ } ++ ++ for (i = 0; i < 3; i++) { ++ if (ts0710_msc_msg(ts0710, EA | RTC | RTR | DV, MCC_CMD, dlci) < ++ 0) { ++ continue; ++ } else { ++ TS0710_LOG("MUX send Flow on on dlci %d\n", dlci); ++ ts0710->dlci[dlci].flow_control = 0; ++ break; ++ } ++ } ++} ++ ++static void ts0710_flow_off(struct tty_struct *tty, __u8 dlci, ++ ts0710_con * ts0710) ++{ ++ int i; ++ ++ if (test_and_set_bit(TTY_THROTTLED, &tty->flags)) { ++ return; ++ } ++ ++ if ((ts0710->dlci[0].state != CONNECTED) ++ && (ts0710->dlci[0].state != FLOW_STOPPED)) { ++ return; ++ } else if ((ts0710->dlci[dlci].state != CONNECTED) ++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { ++ return; ++ } ++ ++ if (ts0710->dlci[dlci].flow_control) { ++ return; ++ } ++ ++ for (i = 0; i < 3; i++) { ++ if (ts0710_msc_msg ++ (ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, dlci) < 0) { ++ continue; ++ } else { ++ TS0710_LOG("MUX send Flow off on dlci %d\n", dlci); ++ ts0710->dlci[dlci].flow_control = 1; ++ break; ++ } ++ } ++} ++ ++int ts0710_recv_data(ts0710_con * ts0710, char *data, int len) ++{ ++ short_frame *short_pkt; ++ long_frame *long_pkt; ++ __u8 *uih_data_start; ++ __u32 uih_len; ++ __u8 dlci; ++ __u8 be_connecting; ++#ifdef TS0710DEBUG ++ unsigned long t; ++#endif ++ ++ short_pkt = (short_frame *) data; ++ ++ dlci = short_pkt->h.addr.server_chn << 1 | short_pkt->h.addr.d; ++ switch (CLR_PF(short_pkt->h.control)) { ++ case SABM: ++ TS0710_DEBUG("SABM-packet received\n"); ++ ++/*For BP UART problem ++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) ) ++ break; ++*/ ++ ++ if (!dlci) { ++ TS0710_DEBUG("server channel == 0\n"); ++ ts0710->dlci[0].state = CONNECTED; ++ ++ TS0710_DEBUG("sending back UA - control channel\n"); ++ send_ua(ts0710, dlci); ++ wake_up_interruptible(&ts0710->dlci[0].open_wait); ++ ++ } else if (valid_dlci(dlci)) { ++ ++ TS0710_DEBUG("Incomming connect on channel %d\n", dlci); ++ ++ TS0710_DEBUG("sending UA, dlci %d\n", dlci); ++ send_ua(ts0710, dlci); ++ ++ ts0710->dlci[dlci].state = CONNECTED; ++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait); ++ ++ } else { ++ TS0710_DEBUG("invalid dlci %d, sending DM\n", dlci); ++ send_dm(ts0710, dlci); ++ } ++ ++ break; ++ ++ case UA: ++ TS0710_DEBUG("UA packet received\n"); ++ ++/*For BP UART problem ++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) ) ++ break; ++*/ ++ ++ if (!dlci) { ++ TS0710_DEBUG("server channel == 0\n"); ++ ++ if (ts0710->dlci[0].state == CONNECTING) { ++ ts0710->dlci[0].state = CONNECTED; ++ wake_up_interruptible(&ts0710->dlci[0]. ++ open_wait); ++ } else if (ts0710->dlci[0].state == DISCONNECTING) { ++ ts0710_upon_disconnect(); ++ } else { ++ TS0710_DEBUG ++ (" Something wrong receiving UA packet\n"); ++ } ++ } else if (valid_dlci(dlci)) { ++ TS0710_DEBUG("Incomming UA on channel %d\n", dlci); ++ ++ if (ts0710->dlci[dlci].state == CONNECTING) { ++ ts0710->dlci[dlci].state = CONNECTED; ++ wake_up_interruptible(&ts0710->dlci[dlci]. ++ open_wait); ++ } else if (ts0710->dlci[dlci].state == DISCONNECTING) { ++ ts0710->dlci[dlci].state = DISCONNECTED; ++ wake_up_interruptible(&ts0710->dlci[dlci]. ++ open_wait); ++ wake_up_interruptible(&ts0710->dlci[dlci]. ++ close_wait); ++ ts0710_reset_dlci(dlci); ++ } else { ++ TS0710_DEBUG ++ (" Something wrong receiving UA packet\n"); ++ } ++ } else { ++ TS0710_DEBUG("invalid dlci %d\n", dlci); ++ } ++ ++ break; ++ ++ case DM: ++ TS0710_DEBUG("DM packet received\n"); ++ ++/*For BP UART problem ++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) ) ++ break; ++*/ ++ ++ if (!dlci) { ++ TS0710_DEBUG("server channel == 0\n"); ++ ++ if (ts0710->dlci[0].state == CONNECTING) { ++ be_connecting = 1; ++ } else { ++ be_connecting = 0; ++ } ++ ts0710_upon_disconnect(); ++ if (be_connecting) { ++ ts0710->dlci[0].state = REJECTED; ++ } ++ } else if (valid_dlci(dlci)) { ++ TS0710_DEBUG("Incomming DM on channel %d\n", dlci); ++ ++ if (ts0710->dlci[dlci].state == CONNECTING) { ++ ts0710->dlci[dlci].state = REJECTED; ++ } else { ++ ts0710->dlci[dlci].state = DISCONNECTED; ++ } ++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait); ++ wake_up_interruptible(&ts0710->dlci[dlci].close_wait); ++ ts0710_reset_dlci(dlci); ++ } else { ++ TS0710_DEBUG("invalid dlci %d\n", dlci); ++ } ++ ++ break; ++ ++ case DISC: ++ TS0710_DEBUG("DISC packet received\n"); ++ ++/*For BP UART problem ++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) ) ++ break; ++*/ ++ ++ if (!dlci) { ++ TS0710_DEBUG("server channel == 0\n"); ++ ++ send_ua(ts0710, dlci); ++ TS0710_DEBUG("DISC, sending back UA\n"); ++ ++ ts0710_upon_disconnect(); ++ } else if (valid_dlci(dlci)) { ++ TS0710_DEBUG("Incomming DISC on channel %d\n", dlci); ++ ++ send_ua(ts0710, dlci); ++ TS0710_DEBUG("DISC, sending back UA\n"); ++ ++ ts0710->dlci[dlci].state = DISCONNECTED; ++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait); ++ wake_up_interruptible(&ts0710->dlci[dlci].close_wait); ++ ts0710_reset_dlci(dlci); ++ } else { ++ TS0710_DEBUG("invalid dlci %d\n", dlci); ++ } ++ ++ break; ++ ++ case UIH: ++ TS0710_DEBUG("UIH packet received\n"); ++ ++ if ((dlci >= TS0710_MAX_CHN)) { ++ TS0710_DEBUG("invalid dlci %d\n", dlci); ++ send_dm(ts0710, dlci); ++ break; ++ } ++ ++ if (GET_PF(short_pkt->h.control)) { ++ TS0710_LOG ++ ("MUX Error %s: UIH packet with P/F set, discard it!\n", ++ __FUNCTION__); ++ break; ++ } ++ ++ if ((ts0710->dlci[dlci].state != CONNECTED) ++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { ++ TS0710_LOG ++ ("MUX Error %s: DLCI %d not connected, discard it!\n", ++ __FUNCTION__, dlci); ++ send_dm(ts0710, dlci); ++ break; ++ } ++ ++ if ((short_pkt->h.length.ea) == 0) { ++ TS0710_DEBUG("Long UIH packet received\n"); ++ long_pkt = (long_frame *) data; ++ uih_len = GET_LONG_LENGTH(long_pkt->h.length); ++ uih_data_start = long_pkt->h.data; ++ TS0710_DEBUG("long packet length %d\n", uih_len); ++ ++/*For BP UART problem ++ if (crc_check(data, LONG_CRC_CHECK, *(uih_data_start + uih_len))) ++ break; ++*/ ++ } else { ++ TS0710_DEBUG("Short UIH pkt received\n"); ++ uih_len = short_pkt->h.length.len; ++ uih_data_start = short_pkt->data; ++ ++/*For BP UART problem ++ if (crc_check(data, SHORT_CRC_CHECK, *(uih_data_start + uih_len))) ++ break; ++*/ ++ } ++ ++ if (dlci == 0) { ++ TS0710_DEBUG("UIH on serv_channel 0\n"); ++ process_mcc(data, len, ts0710, ++ !(short_pkt->h.length.ea)); ++ } else if (valid_dlci(dlci)) { ++ /* do tty dispatch */ ++ __u8 tag; ++ __u8 tty_idx; ++ struct tty_struct *tty; ++ __u8 queue_data; ++ __u8 post_recv; ++ __u8 flow_control; ++ mux_recv_struct *recv_info; ++ int recv_room; ++ mux_recv_packet *recv_packet, *recv_packet2; ++ ++ TS0710_DEBUG("UIH on channel %d\n", dlci); ++ ++ if (uih_len > ts0710->dlci[dlci].mtu) { ++ TS0710_PRINTK ++ ("MUX Error: DLCI:%d, uih_len:%d is bigger than mtu:%d, discard data!\n", ++ dlci, uih_len, ts0710->dlci[dlci].mtu); ++ break; ++ } ++ ++ tag = *uih_data_start; ++ uih_data_start++; ++ uih_len--; ++ ++ if (!uih_len) { ++ break; ++ } ++ ++ switch (tag) { ++ case CMDTAG: ++ tty_idx = dlci2tty[dlci].cmdtty; ++ TS0710_DEBUG("CMDTAG on DLCI:%d, /dev/mux%d\n", ++ dlci, tty_idx); ++ TS0710_DEBUGSTR(uih_data_start, uih_len); ++ if (!(iscmdtty[tty_idx])) { ++ TS0710_PRINTK ++ ("MUX Error: %s: Wrong CMDTAG on DLCI:%d, /dev/mux%d\n", ++ __FUNCTION__, dlci, tty_idx); ++ } ++ break; ++ case DATATAG: ++ default: ++ tty_idx = dlci2tty[dlci].datatty; ++ TS0710_DEBUG ++ ("NON-CMDTAG on DLCI:%d, /dev/mux%d\n", ++ dlci, tty_idx); ++ if (iscmdtty[tty_idx]) { ++ TS0710_PRINTK ++ ("MUX Error: %s: Wrong NON-CMDTAG on DLCI:%d, /dev/mux%d\n", ++ __FUNCTION__, dlci, tty_idx); ++ } ++ break; ++ } ++ tty = mux_table[tty_idx]; ++ if ((!mux_tty[tty_idx]) || (!tty)) { ++ TS0710_PRINTK ++ ("MUX: No application waiting for, discard it! /dev/mux%d\n", ++ tty_idx); ++ } else { /* Begin processing received data */ ++ if ((!mux_recv_info_flags[tty_idx]) ++ || (!mux_recv_info[tty_idx])) { ++ TS0710_PRINTK ++ ("MUX Error: No mux_recv_info, discard it! /dev/mux%d\n", ++ tty_idx); ++ break; ++ } ++ ++ recv_info = mux_recv_info[tty_idx]; ++ if (recv_info->total > 8192) { ++ TS0710_PRINTK ++ ("MUX : discard data for tty_idx:%d, recv_info->total > 8192 \n", ++ tty_idx); ++ break; ++ } ++ ++ queue_data = 0; ++ post_recv = 0; ++ flow_control = 0; ++ recv_room = 65535; ++ if (tty->receive_room) ++ recv_room = tty->receive_room; ++ ++ if (test_bit(TTY_THROTTLED, &tty->flags)) { ++ queue_data = 1; ++ } else { ++ if (test_bit ++ (TTY_DONT_FLIP, &tty->flags)) { ++ queue_data = 1; ++ post_recv = 1; ++ } else if (recv_info->total) { ++ queue_data = 1; ++ post_recv = 1; ++ } else if (recv_room < uih_len) { ++ queue_data = 1; ++ flow_control = 1; ++ } ++ ++ if ((recv_room - ++ (uih_len + recv_info->total)) < ++ ts0710->dlci[dlci].mtu) { ++ flow_control = 1; ++ } ++ } ++ ++ if (!queue_data) { ++ /* Put received data into read buffer of tty */ ++ TS0710_DEBUG ++ ("Put received data into read buffer of /dev/mux%d", ++ tty_idx); ++ ++#ifdef TS0710DEBUG ++ t = jiffies; ++#endif ++ ++ (tty->ldisc.receive_buf) (tty, ++ uih_data_start, ++ NULL, ++ uih_len); ++ ++#ifdef TS0710DEBUG ++ TS0710_DEBUG ++ ("tty->ldisc.receive_buf take ticks: %lu", ++ (jiffies - t)); ++#endif ++ ++ } else { /* Queue data */ ++ ++ TS0710_DEBUG ++ ("Put received data into recv queue of /dev/mux%d", ++ tty_idx); ++ if (recv_info->total) { ++ /* recv_info is already linked into mux_recv_queue */ ++ ++ recv_packet = ++ get_mux_recv_packet ++ (uih_len); ++ if (!recv_packet) { ++ TS0710_PRINTK ++ ("MUX %s: no memory\n", ++ __FUNCTION__); ++ break; ++ } ++ ++ memcpy(recv_packet->data, ++ uih_data_start, uih_len); ++ recv_packet->length = uih_len; ++ recv_info->total += uih_len; ++ recv_packet->next = NULL; ++ ++ if (!(recv_info->mux_packet)) { ++ recv_info->mux_packet = ++ recv_packet; ++ } else { ++ recv_packet2 = ++ recv_info-> ++ mux_packet; ++ while (recv_packet2-> ++ next) { ++ recv_packet2 = ++ recv_packet2-> ++ next; ++ } ++ recv_packet2->next = ++ recv_packet; ++ } /* End if( !(recv_info->mux_packet) ) */ ++ } else { /* recv_info->total == 0 */ ++ if (uih_len > ++ TS0710MUX_RECV_BUF_SIZE) { ++ TS0710_PRINTK ++ ("MUX Error: tty_idx:%d, uih_len == %d is too big\n", ++ tty_idx, uih_len); ++ uih_len = ++ TS0710MUX_RECV_BUF_SIZE; ++ } ++ memcpy(recv_info->data, ++ uih_data_start, uih_len); ++ recv_info->length = uih_len; ++ recv_info->total = uih_len; ++ ++ add_post_recv_queue ++ (&mux_recv_queue, ++ recv_info); ++ } /* End recv_info->total == 0 */ ++ } /* End Queue data */ ++ ++ if (flow_control) { ++ /* Do something for flow control */ ++ ts0710_flow_off(tty, dlci, ts0710); ++ } ++ ++ if (tty_idx == ++ dlci2tty[TS0710MUX_GPRS1_DLCI].datatty) { ++ if (add_count ++ (TS0710MUX_GPRS1_RECV_COUNT_IDX, ++ uih_len) < 0) { ++ post_recv_count_flag = 1; ++ post_recv = 1; ++ mux_data_count2 ++ [TS0710MUX_GPRS1_RECV_COUNT_IDX] ++ += uih_len; ++ } ++ } else if (tty_idx == ++ dlci2tty[TS0710MUX_GPRS2_DLCI]. ++ datatty) { ++ if (add_count ++ (TS0710MUX_GPRS2_RECV_COUNT_IDX, ++ uih_len) < 0) { ++ post_recv_count_flag = 1; ++ post_recv = 1; ++ mux_data_count2 ++ [TS0710MUX_GPRS2_RECV_COUNT_IDX] ++ += uih_len; ++ } ++ } ++ ++ if (post_recv) ++ schedule_work(&post_recv_tqueue); ++ } /* End processing received data */ ++ } else { ++ TS0710_DEBUG("invalid dlci %d\n", dlci); ++ } ++ ++ break; ++ ++ default: ++ TS0710_DEBUG("illegal packet\n"); ++ break; ++ } ++ return 0; ++} ++ ++/* ++int ts0710_send_data(ts0710_con *ts0710, __u8 dlci, __u8 *data, __u32 count) ++{ ++ __u32 c, total = 0; ++ __u8 tag, first; ++ ++ if( ts0710->dlci[0].state == FLOW_STOPPED ){ ++ TS0710_DEBUG("Flow stopped on all channels, returning zero\n"); ++*/ ++/* ++ return -EFLOWSTOPPED; ++ } else if( ts0710->dlci[dlci].state == FLOW_STOPPED ){ ++ TS0710_DEBUG("Flow stopped, returning zero\n"); ++*/ ++/* ++ return -EFLOWSTOPPED; ++ } else if( ts0710->dlci[dlci].state == CONNECTED ){ ++ ++ TS0710_DEBUG("trying to send %d bytes\n", count); ++ tag = *data; ++ first = 1; ++*/ ++ /* The first byte is always a Cmd/Data tag */ ++/* ++ while( count > 1 ){ ++ ++ c = min(count, ts0710->dlci[dlci].mtu); ++ if( queue_uih(data, c, ts0710, dlci) <= 0 ) { ++ break; ++ } ++ ++ total += (c - 1); ++ data += (c - 1); ++ *data = tag; ++ count -= (c - 1); ++ ++ if( first ) { ++ first = 0; ++ total++; ++ } ++ } ++ TS0710_DEBUG("sent %d bytes\n", total); ++ return total; ++ } else { ++ TS0710_DEBUG("DLCI %d not connected\n", dlci); ++ return -EDISCONNECTED; ++ } ++} ++*/ ++ ++/* Close ts0710 channel */ ++static void ts0710_close_channel(__u8 dlci) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int try; ++ unsigned long t; ++ ++ TS0710_DEBUG("ts0710_disc_command on channel %d\n", dlci); ++ ++ if ((ts0710->dlci[dlci].state == DISCONNECTED) ++ || (ts0710->dlci[dlci].state == REJECTED)) { ++ return; ++ } else if (ts0710->dlci[dlci].state == DISCONNECTING) { ++ /* Reentry */ ++ return; ++ } else { ++ ts0710->dlci[dlci].state = DISCONNECTING; ++ try = 3; ++ while (try--) { ++ t = jiffies; ++ send_disc(ts0710, dlci); ++ interruptible_sleep_on_timeout(&ts0710->dlci[dlci]. ++ close_wait, ++ TS0710MUX_TIME_OUT); ++ if (ts0710->dlci[dlci].state == DISCONNECTED) { ++ break; ++ } else if (signal_pending(current)) { ++ TS0710_PRINTK ++ ("MUX DLCI %d Send DISC got signal!\n", ++ dlci); ++ break; ++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { ++ TS0710_PRINTK ++ ("MUX DLCI %d Send DISC timeout!\n", dlci); ++ continue; ++ } ++ } ++ ++ if (ts0710->dlci[dlci].state != DISCONNECTED) { ++ if (dlci == 0) { /* Control Channel */ ++ ts0710_upon_disconnect(); ++ } else { /* Other Channel */ ++ ts0710->dlci[dlci].state = DISCONNECTED; ++ wake_up_interruptible(&ts0710->dlci[dlci]. ++ close_wait); ++ ts0710_reset_dlci(dlci); ++ } ++ } ++ } ++} ++ ++int ts0710_open_channel(__u8 dlci) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int try; ++ int retval; ++ unsigned long t; ++ ++ retval = -ENODEV; ++ if (dlci == 0) { // control channel ++ if ((ts0710->dlci[0].state == CONNECTED) ++ || (ts0710->dlci[0].state == FLOW_STOPPED)) { ++ return 0; ++ } else if (ts0710->dlci[0].state == CONNECTING) { ++ /* Reentry */ ++ TS0710_PRINTK ++ ("MUX DLCI: 0, reentry to open DLCI 0, pid: %d, %s !\n", ++ current->pid, current->comm); ++ try = 11; ++ while (try--) { ++ t = jiffies; ++ interruptible_sleep_on_timeout(&ts0710->dlci[0]. ++ open_wait, ++ TS0710MUX_TIME_OUT); ++ if ((ts0710->dlci[0].state == CONNECTED) ++ || (ts0710->dlci[0].state == ++ FLOW_STOPPED)) { ++ retval = 0; ++ break; ++ } else if (ts0710->dlci[0].state == REJECTED) { ++ retval = -EREJECTED; ++ break; ++ } else if (ts0710->dlci[0].state == ++ DISCONNECTED) { ++ break; ++ } else if (signal_pending(current)) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Wait for connecting got signal!\n", ++ dlci); ++ retval = -EAGAIN; ++ break; ++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Wait for connecting timeout!\n", ++ dlci); ++ continue; ++ } else if (ts0710->dlci[0].state == CONNECTING) { ++ continue; ++ } ++ } ++ ++ if (ts0710->dlci[0].state == CONNECTING) { ++ ts0710->dlci[0].state = DISCONNECTED; ++ } ++ } else if ((ts0710->dlci[0].state != DISCONNECTED) ++ && (ts0710->dlci[0].state != REJECTED)) { ++ TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci); ++ return retval; ++ } else { ++ ts0710->initiator = 1; ++ ts0710->dlci[0].state = CONNECTING; ++ ts0710->dlci[0].initiator = 1; ++ try = 10; ++ while (try--) { ++ t = jiffies; ++ send_sabm(ts0710, 0); ++ interruptible_sleep_on_timeout(&ts0710->dlci[0]. ++ open_wait, ++ TS0710MUX_TIME_OUT); ++ if ((ts0710->dlci[0].state == CONNECTED) ++ || (ts0710->dlci[0].state == ++ FLOW_STOPPED)) { ++ retval = 0; ++ break; ++ } else if (ts0710->dlci[0].state == REJECTED) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Send SABM got rejected!\n", ++ dlci); ++ retval = -EREJECTED; ++ break; ++ } else if (signal_pending(current)) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Send SABM got signal!\n", ++ dlci); ++ retval = -EAGAIN; ++ break; ++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Send SABM timeout!\n", ++ dlci); ++ continue; ++ } ++ } ++ ++ if (ts0710->dlci[0].state == CONNECTING) { ++ ts0710->dlci[0].state = DISCONNECTED; ++ } ++ wake_up_interruptible(&ts0710->dlci[0].open_wait); ++ } ++ } else { // other channel ++ if ((ts0710->dlci[0].state != CONNECTED) ++ && (ts0710->dlci[0].state != FLOW_STOPPED)) { ++ return retval; ++ } else if ((ts0710->dlci[dlci].state == CONNECTED) ++ || (ts0710->dlci[dlci].state == FLOW_STOPPED)) { ++ return 0; ++ } else if ((ts0710->dlci[dlci].state == NEGOTIATING) ++ || (ts0710->dlci[dlci].state == CONNECTING)) { ++ /* Reentry */ ++ try = 8; ++ while (try--) { ++ t = jiffies; ++ interruptible_sleep_on_timeout(&ts0710-> ++ dlci[dlci]. ++ open_wait, ++ TS0710MUX_TIME_OUT); ++ if ((ts0710->dlci[dlci].state == CONNECTED) ++ || (ts0710->dlci[dlci].state == ++ FLOW_STOPPED)) { ++ retval = 0; ++ break; ++ } else if (ts0710->dlci[dlci].state == REJECTED) { ++ retval = -EREJECTED; ++ break; ++ } else if (ts0710->dlci[dlci].state == ++ DISCONNECTED) { ++ break; ++ } else if (signal_pending(current)) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Wait for connecting got signal!\n", ++ dlci); ++ retval = -EAGAIN; ++ break; ++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Wait for connecting timeout!\n", ++ dlci); ++ continue; ++ } else ++ if ((ts0710->dlci[dlci].state == ++ NEGOTIATING) ++ || (ts0710->dlci[dlci].state == ++ CONNECTING)) { ++ continue; ++ } ++ } ++ ++ if ((ts0710->dlci[dlci].state == NEGOTIATING) ++ || (ts0710->dlci[dlci].state == CONNECTING)) { ++ ts0710->dlci[dlci].state = DISCONNECTED; ++ } ++ } else if ((ts0710->dlci[dlci].state != DISCONNECTED) ++ && (ts0710->dlci[dlci].state != REJECTED)) { ++ TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci); ++ return retval; ++ } else { ++ ts0710->dlci[dlci].state = NEGOTIATING; ++ ts0710->dlci[dlci].initiator = 1; ++ try = 3; ++ while (try--) { ++ t = jiffies; ++ send_pn_msg(ts0710, 7, ts0710->dlci[dlci].mtu, ++ 0, 0, dlci, 1); ++ interruptible_sleep_on_timeout(&ts0710-> ++ dlci[dlci]. ++ open_wait, ++ TS0710MUX_TIME_OUT); ++ if (ts0710->dlci[dlci].state == CONNECTING) { ++ break; ++ } else if (signal_pending(current)) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Send pn_msg got signal!\n", ++ dlci); ++ retval = -EAGAIN; ++ break; ++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Send pn_msg timeout!\n", ++ dlci); ++ continue; ++ } ++ } ++ ++ if (ts0710->dlci[dlci].state == CONNECTING) { ++ try = 3; ++ while (try--) { ++ t = jiffies; ++ send_sabm(ts0710, dlci); ++ interruptible_sleep_on_timeout(&ts0710-> ++ dlci ++ [dlci]. ++ open_wait, ++ TS0710MUX_TIME_OUT); ++ if ((ts0710->dlci[dlci].state == ++ CONNECTED) ++ || (ts0710->dlci[dlci].state == ++ FLOW_STOPPED)) { ++ retval = 0; ++ break; ++ } else if (ts0710->dlci[dlci].state == ++ REJECTED) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Send SABM got rejected!\n", ++ dlci); ++ retval = -EREJECTED; ++ break; ++ } else if (signal_pending(current)) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Send SABM got signal!\n", ++ dlci); ++ retval = -EAGAIN; ++ break; ++ } else if ((jiffies - t) >= ++ TS0710MUX_TIME_OUT) { ++ TS0710_PRINTK ++ ("MUX DLCI:%d Send SABM timeout!\n", ++ dlci); ++ continue; ++ } ++ } ++ } ++ ++ if ((ts0710->dlci[dlci].state == NEGOTIATING) ++ || (ts0710->dlci[dlci].state == CONNECTING)) { ++ ts0710->dlci[dlci].state = DISCONNECTED; ++ } ++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait); ++ } ++ } ++ return retval; ++} ++ ++static int ts0710_exec_test_cmd(void) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ __u8 *f_buf; /* Frame buffer */ ++ __u8 *d_buf; /* Data buffer */ ++ int retval = -EFAULT; ++ int j; ++ unsigned long t; ++ ++ if (ts0710->be_testing) { ++ /* Reentry */ ++ t = jiffies; ++ interruptible_sleep_on_timeout(&ts0710->test_wait, ++ 3 * TS0710MUX_TIME_OUT); ++ if (ts0710->be_testing == 0) { ++ if (ts0710->test_errs == 0) { ++ retval = 0; ++ } else { ++ retval = -EFAULT; ++ } ++ } else if (signal_pending(current)) { ++ TS0710_DEBUG ++ ("Wait for Test_cmd response got signal!\n"); ++ retval = -EAGAIN; ++ } else if ((jiffies - t) >= 3 * TS0710MUX_TIME_OUT) { ++ TS0710_DEBUG("Wait for Test_cmd response timeout!\n"); ++ retval = -EFAULT; ++ } ++ } else { ++ ts0710->be_testing = 1; /* Set the flag */ ++ ++ f_buf = (__u8 *) kmalloc(TEST_PATTERN_SIZE + 32, GFP_KERNEL); ++ d_buf = (__u8 *) kmalloc(TEST_PATTERN_SIZE + 32, GFP_KERNEL); ++ if ((!f_buf) || (!d_buf)) { ++ if (f_buf) { ++ kfree(f_buf); ++ } ++ if (d_buf) { ++ kfree(d_buf); ++ } ++ ++ ts0710->be_testing = 0; /* Clear the flag */ ++ ts0710->test_errs = TEST_PATTERN_SIZE; ++ wake_up_interruptible(&ts0710->test_wait); ++ return -ENOMEM; ++ } ++ ++ for (j = 0; j < TEST_PATTERN_SIZE; j++) { ++ d_buf[j] = j & 0xFF; ++ } ++ ++ t = jiffies; ++ ts0710_test_msg(ts0710, d_buf, TEST_PATTERN_SIZE, MCC_CMD, ++ f_buf); ++ interruptible_sleep_on_timeout(&ts0710->test_wait, ++ 2 * TS0710MUX_TIME_OUT); ++ if (ts0710->be_testing == 0) { ++ if (ts0710->test_errs == 0) { ++ retval = 0; ++ } else { ++ retval = -EFAULT; ++ } ++ } else if (signal_pending(current)) { ++ TS0710_DEBUG("Send Test_cmd got signal!\n"); ++ retval = -EAGAIN; ++ } else if ((jiffies - t) >= 2 * TS0710MUX_TIME_OUT) { ++ TS0710_DEBUG("Send Test_cmd timeout!\n"); ++ ts0710->test_errs = TEST_PATTERN_SIZE; ++ retval = -EFAULT; ++ } ++ ++ ts0710->be_testing = 0; /* Clear the flag */ ++ wake_up_interruptible(&ts0710->test_wait); ++ ++ /* Release buffer */ ++ if (f_buf) { ++ kfree(f_buf); ++ } ++ if (d_buf) { ++ kfree(d_buf); ++ } ++ } ++ ++ return retval; ++} ++ ++static void mux_sched_send(void) ++{ ++ ++#ifdef USB_FOR_MUX ++ schedule_work(&send_tqueue); ++#else ++ if (!tq_serial_for_mux) { ++ TS0710_PRINTK("MUX Error: %s: tq_serial_for_mux == 0\n", ++ __FUNCTION__); ++ return; ++ } ++ schedule_work(&send_tqueue); ++ mark_bh(SERIAL_BH); ++#endif ++ ++} ++ ++/**************************** ++ * TTY driver routines ++*****************************/ ++ ++static void mux_close(struct tty_struct *tty, struct file *filp) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int line; ++ __u8 dlci; ++ __u8 cmdtty; ++ __u8 datatty; ++ ++ UNUSED_PARAM(filp); ++ ++ if (!tty) { ++ return; ++ } ++ line = tty->index; ++ if ((line < 0) || (line >= NR_MUXS)) { ++ return; ++ } ++ if (mux_tty[line] > 0) ++ mux_tty[line]--; ++ ++ dlci = tty2dlci[line]; ++ cmdtty = dlci2tty[dlci].cmdtty; ++ datatty = dlci2tty[dlci].datatty; ++ if ((mux_tty[cmdtty] == 0) && (mux_tty[datatty] == 0)) { ++ if (dlci == 1) { ++ ts0710_close_channel(0); ++ TS0710_PRINTK ++ ("MUX mux_close: tapisrv might be down!!! Close DLCI 1\n"); ++ TS0710_SIG2APLOGD(); ++ } ++ ts0710_close_channel(dlci); ++ } ++ ++ if (mux_tty[line] == 0) { ++ if ((mux_send_info_flags[line]) ++ && (mux_send_info[line]) ++ /*&& (mux_send_info[line]->filled == 0) */ ++ ) { ++ mux_send_info_flags[line] = 0; ++ kfree(mux_send_info[line]); ++ mux_send_info[line] = 0; ++ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line); ++ } ++ ++ if ((mux_recv_info_flags[line]) ++ && (mux_recv_info[line]) ++ && (mux_recv_info[line]->total == 0)) { ++ mux_recv_info_flags[line] = 0; ++ free_mux_recv_struct(mux_recv_info[line]); ++ mux_recv_info[line] = 0; ++ TS0710_DEBUG("Free mux_recv_info for /dev/mux%d", line); ++ } ++ ++ ts0710_flow_on(dlci, ts0710); ++ schedule_work(&post_recv_tqueue); ++ ++ wake_up_interruptible(&tty->read_wait); ++ wake_up_interruptible(&tty->write_wait); ++ tty->packet = 0; ++ } ++} ++ ++static void mux_throttle(struct tty_struct *tty) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int line; ++ int i; ++ __u8 dlci; ++ ++ if (!tty) { ++ return; ++ } ++ ++ line = tty->index; ++ if ((line < 0) || (line >= NR_MUXS)) { ++ return; ++ } ++ ++ TS0710_DEBUG("Enter into %s, minor number is: %d\n", __FUNCTION__, ++ line); ++ ++ dlci = tty2dlci[line]; ++ if ((ts0710->dlci[0].state != CONNECTED) ++ && (ts0710->dlci[0].state != FLOW_STOPPED)) { ++ return; ++ } else if ((ts0710->dlci[dlci].state != CONNECTED) ++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) { ++ return; ++ } ++ ++ if (ts0710->dlci[dlci].flow_control) { ++ return; ++ } ++ ++ for (i = 0; i < 3; i++) { ++ if (ts0710_msc_msg ++ (ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, dlci) < 0) { ++ continue; ++ } else { ++ TS0710_LOG("MUX Send Flow off on dlci %d\n", dlci); ++ ts0710->dlci[dlci].flow_control = 1; ++ break; ++ } ++ } ++} ++ ++static void mux_unthrottle(struct tty_struct *tty) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int line; ++ __u8 dlci; ++ mux_recv_struct *recv_info; ++ ++ if (!tty) { ++ return; ++ } ++ line = tty->index; ++ if ((line < 0) || (line >= NR_MUXS)) { ++ return; ++ } ++ ++ if ((!mux_recv_info_flags[line]) || (!mux_recv_info[line])) { ++ return; ++ } ++ ++ TS0710_DEBUG("Enter into %s, minor number is: %d\n", __FUNCTION__, ++ line); ++ ++ recv_info = mux_recv_info[line]; ++ dlci = tty2dlci[line]; ++ ++ if (recv_info->total) { ++ recv_info->post_unthrottle = 1; ++ schedule_work(&post_recv_tqueue); ++ } else { ++ ts0710_flow_on(dlci, ts0710); ++ } ++} ++ ++static int mux_chars_in_buffer(struct tty_struct *tty) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int retval; ++ int line; ++ __u8 dlci; ++ mux_send_struct *send_info; ++ ++ retval = TS0710MUX_MAX_CHARS_IN_BUF; ++ if (!tty) { ++ goto out; ++ } ++ line = tty->index; ++ if ((line < 0) || (line >= NR_MUXS)) { ++ goto out; ++ } ++ ++ dlci = tty2dlci[line]; ++ if (ts0710->dlci[0].state == FLOW_STOPPED) { ++ TS0710_DEBUG ++ ("Flow stopped on all channels, returning MAX chars in buffer\n"); ++ goto out; ++ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) { ++ TS0710_DEBUG("Flow stopped, returning MAX chars in buffer\n"); ++ goto out; ++ } else if (ts0710->dlci[dlci].state != CONNECTED) { ++ TS0710_DEBUG("DLCI %d not connected\n", dlci); ++ goto out; ++ } ++ ++ if (!(mux_send_info_flags[line])) { ++ goto out; ++ } ++ send_info = mux_send_info[line]; ++ if (!send_info) { ++ goto out; ++ } ++ if (send_info->filled) { ++ goto out; ++ } ++ ++ retval = 0; ++ ++ out: ++ return retval; ++} ++ ++static int mux_chars_in_serial_buffer(struct tty_struct *tty) ++{ ++ UNUSED_PARAM(tty); ++ ++ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) { ++ TS0710_PRINTK ++ ("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", ++ __FUNCTION__); ++ ++#ifndef USB_FOR_MUX ++ TS0710_PRINTK ++ ("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", ++ __FUNCTION__); ++ TS0710_SIG2APLOGD(); ++#endif ++ ++ return 0; ++ } ++ return COMM_FOR_MUX_DRIVER->chars_in_buffer(COMM_FOR_MUX_TTY); ++} ++ ++static int mux_write(struct tty_struct *tty, ++ const unsigned char *buf, int count) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int line; ++ __u8 dlci; ++ mux_send_struct *send_info; ++ __u8 *d_buf; ++ __u16 c; ++ __u8 post_recv; ++ ++ if (count <= 0) { ++ return 0; ++ } ++ ++ if (!tty) { ++ return 0; ++ } ++ ++ line = tty->index; ++ if ((line < 0) || (line >= NR_MUXS)) ++ return -ENODEV; ++ ++ dlci = tty2dlci[line]; ++ if (ts0710->dlci[0].state == FLOW_STOPPED) { ++ TS0710_DEBUG ++ ("Flow stopped on all channels, returning zero /dev/mux%d\n", ++ line); ++ return 0; ++ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) { ++ TS0710_DEBUG("Flow stopped, returning zero /dev/mux%d\n", line); ++ return 0; ++ } else if (ts0710->dlci[dlci].state == CONNECTED) { ++ ++ if (!(mux_send_info_flags[line])) { ++ TS0710_PRINTK ++ ("MUX Error: mux_write: mux_send_info_flags[%d] == 0\n", ++ line); ++ return -ENODEV; ++ } ++ send_info = mux_send_info[line]; ++ if (!send_info) { ++ TS0710_PRINTK ++ ("MUX Error: mux_write: mux_send_info[%d] == 0\n", ++ line); ++ return -ENODEV; ++ } ++ ++ c = min(count, (ts0710->dlci[dlci].mtu - 1)); ++ if (c <= 0) { ++ return 0; ++ } ++ ++ if (test_and_set_bit(BUF_BUSY, &send_info->flags)) ++ return 0; ++ ++ if (send_info->filled) { ++ clear_bit(BUF_BUSY, &send_info->flags); ++ return 0; ++ } ++ ++ d_buf = ((__u8 *) send_info->buf) + TS0710MUX_SEND_BUF_OFFSET; ++ memcpy(&d_buf[1], buf, c); ++ ++ TS0710_DEBUG("Prepare to send %d bytes from /dev/mux%d", c, ++ line); ++ if (iscmdtty[line]) { ++ TS0710_DEBUGSTR(&d_buf[1], c); ++ TS0710_DEBUG("CMDTAG"); ++ d_buf[0] = CMDTAG; ++ } else { ++ TS0710_DEBUG("DATATAG"); ++ d_buf[0] = DATATAG; ++ } ++ ++ TS0710_DEBUGHEX(d_buf, c + 1); ++ ++ send_info->frame = d_buf; ++ queue_uih(send_info, c + 1, ts0710, dlci); ++ send_info->filled = 1; ++ clear_bit(BUF_BUSY, &send_info->flags); ++ ++ post_recv = 0; ++ if (dlci == TS0710MUX_GPRS1_DLCI) { ++ if (add_count ++ (TS0710MUX_GPRS1_SEND_COUNT_IDX, c) < 0) { ++ post_recv_count_flag = 1; ++ post_recv = 1; ++ mux_data_count2[TS0710MUX_GPRS1_SEND_COUNT_IDX] ++ += c; ++ } ++ } else if (dlci == TS0710MUX_GPRS2_DLCI) { ++ if (add_count ++ (TS0710MUX_GPRS2_SEND_COUNT_IDX, c) < 0) { ++ post_recv_count_flag = 1; ++ post_recv = 1; ++ mux_data_count2[TS0710MUX_GPRS2_SEND_COUNT_IDX] ++ += c; ++ } ++ } ++ ++ if (post_recv) ++ schedule_work(&post_recv_tqueue); ++ ++ if (mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY) == 0) { ++ /* Sending bottom half should be ++ run after return from this function */ ++ mux_sched_send(); ++ } ++ return c; ++ } else { ++ TS0710_PRINTK("MUX mux_write: DLCI %d not connected\n", dlci); ++ return -EDISCONNECTED; ++ } ++} ++ ++static int mux_write_room(struct tty_struct *tty) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int retval; ++ int line; ++ __u8 dlci; ++ mux_send_struct *send_info; ++ ++ retval = 0; ++ if (!tty) { ++ goto out; ++ } ++ line = tty->index; ++ if ((line < 0) || (line >= NR_MUXS)) { ++ goto out; ++ } ++ ++ dlci = tty2dlci[line]; ++ if (ts0710->dlci[0].state == FLOW_STOPPED) { ++ TS0710_DEBUG("Flow stopped on all channels, returning ZERO\n"); ++ goto out; ++ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) { ++ TS0710_DEBUG("Flow stopped, returning ZERO\n"); ++ goto out; ++ } else if (ts0710->dlci[dlci].state != CONNECTED) { ++ TS0710_DEBUG("DLCI %d not connected\n", dlci); ++ goto out; ++ } ++ ++ if (!(mux_send_info_flags[line])) { ++ goto out; ++ } ++ send_info = mux_send_info[line]; ++ if (!send_info) { ++ goto out; ++ } ++ if (send_info->filled) { ++ goto out; ++ } ++ ++ retval = ts0710->dlci[dlci].mtu - 1; ++ ++ out: ++ return retval; ++} ++ ++static int mux_ioctl(struct tty_struct *tty, struct file *file, ++ unsigned int cmd, unsigned long arg) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int line; ++ __u8 dlci; ++ ++ UNUSED_PARAM(file); ++ UNUSED_PARAM(arg); ++ ++ if (!tty) { ++ return -EIO; ++ } ++ line = tty->index; ++ if ((line < 0) || (line >= NR_MUXS)) { ++ return -ENODEV; ++ } ++ ++ dlci = tty2dlci[line]; ++ switch (cmd) { ++ case TS0710MUX_IO_MSC_HANGUP: ++ if (ts0710_msc_msg(ts0710, EA | RTR | DV, MCC_CMD, dlci) < 0) { ++ return -EAGAIN; ++ } else { ++ return 0; ++ } ++ ++ case TS0710MUX_IO_TEST_CMD: ++ return ts0710_exec_test_cmd(); ++/* ++ case TS0710MUX_IO_DLCI_FC_ON: ++ if( line == 0 ) { ++ break; ++ } ++ if( ts0710_msc_msg(ts0710, EA | RTC | RTR | DV, MCC_CMD, (__u8)line) < 0) { ++ return -EAGAIN; ++ } else { ++ return 0; ++ } ++ ++ case TS0710MUX_IO_DLCI_FC_OFF: ++ if( line == 0 ) { ++ break; ++ } ++ if( ts0710_msc_msg(ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, (__u8)line) < 0) { ++ return -EAGAIN; ++ } else { ++ return 0; ++ } ++ ++ case TS0710MUX_IO_FC_ON: ++ if( line != 0 ) { ++ break; ++ } ++ if( ts0710_fcon_msg(ts0710, MCC_CMD) < 0) { ++ return -EAGAIN; ++ } else { ++ return 0; ++ } ++ ++ case TS0710MUX_IO_FC_OFF: ++ if( line != 0 ) { ++ break; ++ } ++ if( ts0710_fcoff_msg(ts0710, MCC_CMD) < 0) { ++ return -EAGAIN; ++ } else { ++ return 0; ++ } ++*/ ++ default: ++ break; ++ } ++ return -ENOIOCTLCMD; ++} ++ ++static void mux_flush_buffer(struct tty_struct *tty) ++{ ++ int line; ++ ++ if (!tty) { ++ return; ++ } ++ ++ line = tty->index; ++ if ((line < 0) || (line >= NR_MUXS)) { ++ return; ++ } ++ ++ TS0710_PRINTK("MUX %s: line is:%d\n", __FUNCTION__, line); ++ ++ if ((mux_send_info_flags[line]) ++ && (mux_send_info[line]) ++ && (mux_send_info[line]->filled)) { ++ ++ mux_send_info[line]->filled = 0; ++ } ++ ++ wake_up_interruptible(&tty->write_wait); ++#ifdef SERIAL_HAVE_POLL_WAIT ++ wake_up_interruptible(&tty->poll_wait); ++#endif ++ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && ++ tty->ldisc.write_wakeup) { ++ (tty->ldisc.write_wakeup) (tty); ++ } ++ ++/* ++ if( (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0) ) { ++ TS0710_PRINTK("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__); ++ ++#ifndef USB_FOR_MUX ++ TS0710_PRINTK("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__); ++ TS0710_SIG2APLOGD(); ++#endif ++ ++ return; ++ } ++ return COMM_FOR_MUX_DRIVER->flush_buffer(COMM_FOR_MUX_TTY); ++*/ ++} ++ ++static int mux_open(struct tty_struct *tty, struct file *filp) ++{ ++ int retval; ++ int line; ++ __u8 dlci; ++ __u8 cmdtty; ++ __u8 datatty; ++ mux_send_struct *send_info; ++ mux_recv_struct *recv_info; ++ ++ UNUSED_PARAM(filp); ++ ++ retval = -ENODEV; ++ if ((COMM_FOR_MUX_DRIVER == NULL) || (COMM_FOR_MUX_TTY == NULL)) { ++ ++#ifdef USB_FOR_MUX ++ TS0710_PRINTK("MUX: please install and open IPC-USB first\n"); ++#else ++ TS0710_PRINTK("MUX: please install and open ttyS0 first\n"); ++#endif ++ ++ goto out; ++ } ++ ++ if (!tty) { ++ goto out; ++ } ++ line = tty->index; ++ if ((line < 0) || (line >= NR_MUXS)) { ++ goto out; ++ } ++#ifdef TS0710SERVER ++ /* do nothing as a server */ ++ mux_tty[line]++; ++ retval = 0; ++#else ++ mux_tty[line]++; ++ dlci = tty2dlci[line]; ++ ++/* if( dlci == 1 ) { */ ++ /* Open server channel 0 first */ ++ if ((retval = ts0710_open_channel(0)) != 0) { ++ TS0710_PRINTK("MUX: Can't connect server channel 0!\n"); ++ ts0710_init(); ++ ++ mux_tty[line]--; ++ goto out; ++ } ++/* } */ ++ ++ /* Allocate memory first. As soon as connection has been established, MUX may receive */ ++ if (mux_send_info_flags[line] == 0) { ++ send_info = ++ (mux_send_struct *) kmalloc(sizeof(mux_send_struct), ++ GFP_KERNEL); ++ if (!send_info) { ++ retval = -ENOMEM; ++ ++ mux_tty[line]--; ++ goto out; ++ } ++ send_info->length = 0; ++ send_info->flags = 0; ++ send_info->filled = 0; ++ mux_send_info[line] = send_info; ++ mux_send_info_flags[line] = 1; ++ TS0710_DEBUG("Allocate mux_send_info for /dev/mux%d", line); ++ } ++ ++ if (mux_recv_info_flags[line] == 0) { ++ recv_info = ++ (mux_recv_struct *) kmalloc(sizeof(mux_recv_struct), ++ GFP_KERNEL); ++ if (!recv_info) { ++ mux_send_info_flags[line] = 0; ++ kfree(mux_send_info[line]); ++ mux_send_info[line] = 0; ++ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line); ++ retval = -ENOMEM; ++ ++ mux_tty[line]--; ++ goto out; ++ } ++ recv_info->length = 0; ++ recv_info->total = 0; ++ recv_info->mux_packet = 0; ++ recv_info->next = 0; ++ recv_info->no_tty = line; ++ recv_info->post_unthrottle = 0; ++ mux_recv_info[line] = recv_info; ++ mux_recv_info_flags[line] = 1; ++ TS0710_DEBUG("Allocate mux_recv_info for /dev/mux%d", line); ++ } ++ ++ /* Now establish DLCI connection */ ++ cmdtty = dlci2tty[dlci].cmdtty; ++ datatty = dlci2tty[dlci].datatty; ++ if ((mux_tty[cmdtty] > 0) || (mux_tty[datatty] > 0)) { ++ if ((retval = ts0710_open_channel(dlci)) != 0) { ++ TS0710_PRINTK("MUX: Can't connected channel %d!\n", ++ dlci); ++ ts0710_reset_dlci(dlci); ++ ++ mux_send_info_flags[line] = 0; ++ kfree(mux_send_info[line]); ++ mux_send_info[line] = 0; ++ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line); ++ ++ mux_recv_info_flags[line] = 0; ++ free_mux_recv_struct(mux_recv_info[line]); ++ mux_recv_info[line] = 0; ++ TS0710_DEBUG("Free mux_recv_info for /dev/mux%d", line); ++ ++ mux_tty[line]--; ++ goto out; ++ } ++ } ++ ++ retval = 0; ++#endif ++ out: ++ return retval; ++} ++ ++/* mux dispatcher, call from serial.c receiver_chars() */ ++void mux_dispatcher(struct tty_struct *tty) ++{ ++ UNUSED_PARAM(tty); ++ ++ schedule_work(&receive_tqueue); ++} ++ ++/*For BP UART problem Begin*/ ++#ifdef TS0710SEQ2 ++static int send_ack(ts0710_con * ts0710, __u8 seq_num, __u8 bp_seq1, ++ __u8 bp_seq2) ++#else ++static int send_ack(ts0710_con * ts0710, __u8 seq_num) ++#endif ++{ ++ __u8 buf[20]; ++ short_frame *ack; ++ ++#ifdef TS0710SEQ2 ++ static __u16 ack_seq = 0; ++#endif ++ ++ ack = (short_frame *) (buf + 1); ++ ack->h.addr.ea = 1; ++ ack->h.addr.cr = ((ts0710->initiator) & 0x1); ++ ack->h.addr.d = 0; ++ ack->h.addr.server_chn = 0; ++ ack->h.control = ACK; ++ ack->h.length.ea = 1; ++ ++#ifdef TS0710SEQ2 ++ ack->h.length.len = 5; ++ ack->data[0] = seq_num; ++ ack->data[1] = bp_seq1; ++ ack->data[2] = bp_seq2; ++ ack->data[3] = (ack_seq & 0xFF); ++ ack->data[4] = (ack_seq >> 8) & 0xFF; ++ ack_seq++; ++ ack->data[5] = crc_calc((__u8 *) ack, SHORT_CRC_CHECK); ++#else ++ ack->h.length.len = 1; ++ ack->data[0] = seq_num; ++ ack->data[1] = crc_calc((__u8 *) ack, SHORT_CRC_CHECK); ++#endif ++ ++ return basic_write(ts0710, buf, ++ (sizeof(short_frame) + FCS_SIZE + ++ ack->h.length.len)); ++} ++ ++/*For BP UART problem End*/ ++ ++static void receive_worker(void *private_) ++{ ++ struct tty_struct *tty = COMM_FOR_MUX_TTY; ++ int i, count; ++ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE]; ++ static unsigned char *tbuf_ptr = &tbuf[0]; ++ static unsigned char *start_flag = 0; ++ unsigned char *search, *to, *from; ++ short_frame *short_pkt; ++ long_frame *long_pkt; ++ static int framelen = -1; ++ ++ /*For BP UART problem Begin */ ++ static __u8 expect_seq = 0; ++ __u32 crc_error; ++ __u8 *uih_data_start; ++ __u32 uih_len; ++ /*For BP UART problem End */ ++ ++ UNUSED_PARAM(private_); ++ ++ if (!tty) ++ return; ++ ++#ifdef USB_FOR_MUX ++ TS0710_DEBUG("Receive following bytes from IPC-USB"); ++#else ++ TS0710_DEBUG("Receive following bytes from UART"); ++#endif ++ ++ TS0710_DEBUGHEX(cp, count); ++ ++ if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) { ++ TS0710_PRINTK ++ ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n"); ++ count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf)); ++ } ++ ++ count = tty_buffer_request_room(tty, count); ++ ++ for (i = 0; i < count; i++) ++ tty_insert_flip_char(tty, tbuf_ptr[i], TTY_NORMAL); ++ ++ tbuf_ptr += count; ++ search = &tbuf[0]; ++ ++ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) { ++ schedule_work(&receive_tqueue); ++ return; ++ } ++ ++ if ((start_flag != 0) && (framelen != -1)) { ++ if ((tbuf_ptr - start_flag) < framelen) { ++ clear_bit(RECV_RUNNING, &mux_recv_flags); ++ return; ++ } ++ } ++ ++ while (1) { ++ if (start_flag == 0) { /* Frame Start Flag not found */ ++ framelen = -1; ++ while (search < tbuf_ptr) { ++ if (*search == TS0710_BASIC_FLAG) { ++ start_flag = search; ++ break; ++ } ++#ifdef TS0710LOG ++ else { ++ TS0710_LOG(">S %02x %c\n", *search, ++ *search); ++ } ++#endif ++ ++ search++; ++ } ++ ++ if (start_flag == 0) { ++ tbuf_ptr = &tbuf[0]; ++ break; ++ } ++ } else { /* Frame Start Flag found */ ++ /* 1 start flag + 1 address + 1 control + 1 or 2 length + lengths data + 1 FCS + 1 end flag */ ++ /* For BP UART problem 1 start flag + 1 seq_num + 1 address + ...... */ ++ /*if( (framelen == -1) && ((tbuf_ptr - start_flag) > TS0710_MAX_HDR_SIZE) ) */ ++ if ((framelen == -1) && ((tbuf_ptr - start_flag) > (TS0710_MAX_HDR_SIZE + SEQ_FIELD_SIZE))) { /*For BP UART problem */ ++ /*short_pkt = (short_frame *) (start_flag + 1); */ ++ short_pkt = (short_frame *) (start_flag + ADDRESS_FIELD_OFFSET); /*For BP UART problem */ ++ if (short_pkt->h.length.ea == 1) { /* short frame */ ++ /*framelen = TS0710_MAX_HDR_SIZE + short_pkt->h.length.len + 1; */ ++ framelen = TS0710_MAX_HDR_SIZE + short_pkt->h.length.len + 1 + SEQ_FIELD_SIZE; /*For BP UART problem */ ++ } else { /* long frame */ ++ /*long_pkt = (long_frame *) (start_flag + 1); */ ++ long_pkt = (long_frame *) (start_flag + ADDRESS_FIELD_OFFSET); /*For BP UART problem */ ++ /*framelen = TS0710_MAX_HDR_SIZE + GET_LONG_LENGTH( long_pkt->h.length ) + 2; */ ++ framelen = TS0710_MAX_HDR_SIZE + GET_LONG_LENGTH(long_pkt->h.length) + 2 + SEQ_FIELD_SIZE; /*For BP UART problem */ ++ } ++ ++ /*if( framelen > TS0710MUX_MAX_TOTAL_FRAME_SIZE ) { */ ++ if (framelen > (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)) { /*For BP UART problem */ ++ TS0710_LOGSTR_FRAME(0, start_flag, ++ (tbuf_ptr - ++ start_flag)); ++ TS0710_PRINTK ++ ("MUX Error: %s: frame length:%d is bigger than Max total frame size:%d\n", ++ /*__FUNCTION__, framelen, TS0710MUX_MAX_TOTAL_FRAME_SIZE);*/ ++ __FUNCTION__, framelen, (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)); /*For BP UART problem */ ++ search = start_flag + 1; ++ start_flag = 0; ++ framelen = -1; ++ continue; ++ } ++ } ++ ++ if ((framelen != -1) ++ && ((tbuf_ptr - start_flag) >= framelen)) { ++ if (*(start_flag + framelen - 1) == TS0710_BASIC_FLAG) { /* OK, We got one frame */ ++ ++ /*For BP UART problem Begin */ ++ TS0710_LOGSTR_FRAME(0, start_flag, ++ framelen); ++ TS0710_DEBUGHEX(start_flag, framelen); ++ ++ short_pkt = ++ (short_frame *) (start_flag + ++ ADDRESS_FIELD_OFFSET); ++ if ((short_pkt->h.length.ea) == 0) { ++ long_pkt = ++ (long_frame *) (start_flag + ++ ADDRESS_FIELD_OFFSET); ++ uih_len = ++ GET_LONG_LENGTH(long_pkt->h. ++ length); ++ uih_data_start = ++ long_pkt->h.data; ++ ++ crc_error = ++ crc_check((__u8 ++ *) (start_flag + ++ SLIDE_BP_SEQ_OFFSET), ++ LONG_CRC_CHECK + ++ 1, ++ *(uih_data_start + ++ uih_len)); ++ } else { ++ uih_len = ++ short_pkt->h.length.len; ++ uih_data_start = ++ short_pkt->data; ++ ++ crc_error = ++ crc_check((__u8 ++ *) (start_flag + ++ SLIDE_BP_SEQ_OFFSET), ++ SHORT_CRC_CHECK + ++ 1, ++ *(uih_data_start + ++ uih_len)); ++ } ++ ++ if (!crc_error) { ++ if (expect_seq == ++ *(start_flag + ++ SLIDE_BP_SEQ_OFFSET)) { ++ expect_seq++; ++ if (expect_seq >= 4) { ++ expect_seq = 0; ++ } ++#ifdef TS0710SEQ2 ++ send_ack ++ (&ts0710_connection, ++ expect_seq, ++ *(start_flag + ++ FIRST_BP_SEQ_OFFSET), ++ *(start_flag + ++ SECOND_BP_SEQ_OFFSET)); ++#else ++ send_ack ++ (&ts0710_connection, ++ expect_seq); ++#endif ++ ++ ts0710_recv_data ++ (&ts0710_connection, ++ start_flag + ++ ADDRESS_FIELD_OFFSET, ++ framelen - 2 - ++ SEQ_FIELD_SIZE); ++ } else { ++ ++#ifdef TS0710DEBUG ++ if (* ++ (start_flag + ++ SLIDE_BP_SEQ_OFFSET) ++ != 0x9F) { ++#endif ++ ++ TS0710_LOG ++ ("MUX sequence number %d is not expected %d, discard data!\n", ++ * ++ (start_flag ++ + ++ SLIDE_BP_SEQ_OFFSET), ++ expect_seq); ++ ++#ifdef TS0710SEQ2 ++ send_ack ++ (&ts0710_connection, ++ expect_seq, ++ * ++ (start_flag ++ + ++ FIRST_BP_SEQ_OFFSET), ++ * ++ (start_flag ++ + ++ SECOND_BP_SEQ_OFFSET)); ++#else ++ send_ack ++ (&ts0710_connection, ++ expect_seq); ++#endif ++ ++#ifdef TS0710DEBUG ++ } else { ++ *(uih_data_start ++ + uih_len) = ++ 0; ++ TS0710_PRINTK ++ ("MUX bp log: %s\n", ++ uih_data_start); ++ } ++#endif ++ ++ } ++ } else { /* crc_error */ ++ search = start_flag + 1; ++ start_flag = 0; ++ framelen = -1; ++ continue; ++ } /*End if(!crc_error) */ ++ ++ /*For BP UART problem End */ ++ ++/*For BP UART problem ++ TS0710_LOGSTR_FRAME(0, start_flag, framelen); ++ TS0710_DEBUGHEX(start_flag, framelen); ++ ts0710_recv_data(&ts0710_connection, start_flag + 1, framelen - 2); ++*/ ++ search = start_flag + framelen; ++ } else { ++ TS0710_LOGSTR_FRAME(0, start_flag, ++ framelen); ++ TS0710_DEBUGHEX(start_flag, framelen); ++ TS0710_PRINTK ++ ("MUX: Lost synchronization!\n"); ++ search = start_flag + 1; ++ } ++ ++ start_flag = 0; ++ framelen = -1; ++ continue; ++ } ++ ++ if (start_flag != &tbuf[0]) { ++ to = tbuf; ++ from = start_flag; ++ count = tbuf_ptr - start_flag; ++ while (count--) { ++ *to++ = *from++; ++ } ++ ++ tbuf_ptr -= (start_flag - tbuf); ++ start_flag = tbuf; ++ } ++ break; ++ } /* End Frame Start Flag found */ ++ } /* End while(1) */ ++ ++ clear_bit(RECV_RUNNING, &mux_recv_flags); ++} ++ ++static void post_recv_worker(void *private_) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ int tty_idx; ++ struct tty_struct *tty; ++ __u8 post_recv; ++ __u8 flow_control; ++ __u8 dlci; ++ mux_recv_struct *recv_info, *recv_info2, *post_recv_q; ++ int recv_room; ++ mux_recv_packet *recv_packet, *recv_packet2; ++ __u8 j; ++ ++ UNUSED_PARAM(private_); ++ ++ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) { ++ schedule_work(&post_recv_tqueue); ++ return; ++ } ++ ++ TS0710_DEBUG("Enter into post_recv_worker"); ++ ++ post_recv = 0; ++ if (!mux_recv_queue) { ++ goto out; ++ } ++ ++ post_recv_q = NULL; ++ recv_info2 = mux_recv_queue; ++ while ((recv_info = recv_info2)) { ++ recv_info2 = recv_info->next; ++ ++ if (!(recv_info->total)) { ++ TS0710_PRINTK ++ ("MUX Error: %s: Should not get here, recv_info->total == 0 \n", ++ __FUNCTION__); ++ continue; ++ } ++ ++ tty_idx = recv_info->no_tty; ++ dlci = tty2dlci[tty_idx]; ++ tty = mux_table[tty_idx]; ++ if ((!mux_tty[tty_idx]) || (!tty)) { ++ TS0710_PRINTK ++ ("MUX: No application waiting for, free recv_info! tty_idx:%d\n", ++ tty_idx); ++ mux_recv_info_flags[tty_idx] = 0; ++ free_mux_recv_struct(mux_recv_info[tty_idx]); ++ mux_recv_info[tty_idx] = 0; ++ ts0710_flow_on(dlci, ts0710); ++ continue; ++ } ++ ++ TS0710_DEBUG("/dev/mux%d recv_info->total is: %d", tty_idx, ++ recv_info->total); ++ ++ if (test_bit(TTY_THROTTLED, &tty->flags)) { ++ add_post_recv_queue(&post_recv_q, recv_info); ++ continue; ++ } else if (test_bit(TTY_DONT_FLIP, &tty->flags)) { ++ post_recv = 1; ++ add_post_recv_queue(&post_recv_q, recv_info); ++ continue; ++ } ++ ++ flow_control = 0; ++ recv_packet2 = recv_info->mux_packet; ++ while (recv_info->total) { ++ recv_room = 65535; ++ if (tty->receive_room) ++ recv_room = tty->receive_room; ++ ++ if (recv_info->length) { ++ if (recv_room < recv_info->length) { ++ flow_control = 1; ++ break; ++ } ++ ++ /* Put queued data into read buffer of tty */ ++ TS0710_DEBUG ++ ("Put queued recv data into read buffer of /dev/mux%d", ++ tty_idx); ++ TS0710_DEBUGHEX(recv_info->data, ++ recv_info->length); ++ (tty->ldisc.receive_buf) (tty, recv_info->data, ++ NULL, ++ recv_info->length); ++ recv_info->total -= recv_info->length; ++ recv_info->length = 0; ++ } else { /* recv_info->length == 0 */ ++ if ((recv_packet = recv_packet2)) { ++ recv_packet2 = recv_packet->next; ++ ++ if (recv_room < recv_packet->length) { ++ flow_control = 1; ++ recv_info->mux_packet = ++ recv_packet; ++ break; ++ } ++ ++ /* Put queued data into read buffer of tty */ ++ TS0710_DEBUG ++ ("Put queued recv data into read buffer of /dev/mux%d", ++ tty_idx); ++ TS0710_DEBUGHEX(recv_packet->data, ++ recv_packet->length); ++ (tty->ldisc.receive_buf) (tty, ++ recv_packet-> ++ data, NULL, ++ recv_packet-> ++ length); ++ recv_info->total -= recv_packet->length; ++ free_mux_recv_packet(recv_packet); ++ } else { ++ TS0710_PRINTK ++ ("MUX Error: %s: Should not get here, recv_info->total is:%u \n", ++ __FUNCTION__, recv_info->total); ++ } ++ } /* End recv_info->length == 0 */ ++ } /* End while( recv_info->total ) */ ++ ++ if (!(recv_info->total)) { ++ /* Important clear */ ++ recv_info->mux_packet = 0; ++ ++ if (recv_info->post_unthrottle) { ++ /* Do something for post_unthrottle */ ++ ts0710_flow_on(dlci, ts0710); ++ recv_info->post_unthrottle = 0; ++ } ++ } else { ++ add_post_recv_queue(&post_recv_q, recv_info); ++ ++ if (flow_control) { ++ /* Do something for flow control */ ++ if (recv_info->post_unthrottle) { ++ set_bit(TTY_THROTTLED, &tty->flags); ++ recv_info->post_unthrottle = 0; ++ } else { ++ ts0710_flow_off(tty, dlci, ts0710); ++ } ++ } /* End if( flow_control ) */ ++ } ++ } /* End while( (recv_info = recv_info2) ) */ ++ ++ mux_recv_queue = post_recv_q; ++ ++ out: ++ if (post_recv_count_flag) { ++ post_recv_count_flag = 0; ++ for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) { ++ if (mux_data_count2[j] > 0) { ++ if (add_count(j, mux_data_count2[j]) == 0) { ++ mux_data_count2[j] = 0; ++ } else { ++ post_recv_count_flag = 1; ++ post_recv = 1; ++ } ++ } ++ } /* End for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) */ ++ } ++ /* End if( post_recv_count_flag ) */ ++ if (post_recv) ++ schedule_work(&post_recv_tqueue); ++ clear_bit(RECV_RUNNING, &mux_recv_flags); ++} ++ ++/* mux sender, call from serial.c transmit_chars() */ ++void mux_sender(void) ++{ ++ mux_send_struct *send_info; ++ int chars; ++ __u8 idx; ++ ++ chars = mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY); ++ if (!chars) { ++ /* chars == 0 */ ++ TS0710_LOG("<[]\n"); ++ mux_sched_send(); ++ return; ++ } ++ ++ idx = mux_send_info_idx; ++ if ((idx < NR_MUXS) && (mux_send_info_flags[idx])) { ++ send_info = mux_send_info[idx]; ++ if ((send_info) ++ && (send_info->filled) ++ && (send_info->length <= ++ (TS0710MUX_SERIAL_BUF_SIZE - chars))) { ++ ++ mux_sched_send(); ++ } ++ } ++} ++ ++static void send_worker(void *private_) ++{ ++ ts0710_con *ts0710 = &ts0710_connection; ++ __u8 j; ++ mux_send_struct *send_info; ++ int chars; ++ struct tty_struct *tty; ++ __u8 dlci; ++ ++ UNUSED_PARAM(private_); ++ ++ TS0710_DEBUG("Enter into send_worker"); ++ ++ mux_send_info_idx = NR_MUXS; ++ ++ if (ts0710->dlci[0].state == FLOW_STOPPED) { ++ TS0710_DEBUG("Flow stopped on all channels\n"); ++ return; ++ } ++ ++ for (j = 0; j < NR_MUXS; j++) { ++ ++ if (!(mux_send_info_flags[j])) { ++ continue; ++ } ++ ++ send_info = mux_send_info[j]; ++ if (!send_info) { ++ continue; ++ } ++ ++ if (!(send_info->filled)) { ++ continue; ++ } ++ ++ dlci = tty2dlci[j]; ++ if (ts0710->dlci[dlci].state == FLOW_STOPPED) { ++ TS0710_DEBUG("Flow stopped on channel DLCI: %d\n", ++ dlci); ++ continue; ++ } else if (ts0710->dlci[dlci].state != CONNECTED) { ++ TS0710_DEBUG("DLCI %d not connected\n", dlci); ++ send_info->filled = 0; ++ continue; ++ } ++ ++ chars = mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY); ++ if (send_info->length <= (TS0710MUX_SERIAL_BUF_SIZE - chars)) { ++ TS0710_DEBUG("Send queued UIH for /dev/mux%d", j); ++ basic_write(ts0710, (__u8 *) send_info->frame, ++ send_info->length); ++ send_info->length = 0; ++ send_info->filled = 0; ++ } else { ++ mux_send_info_idx = j; ++ break; ++ } ++ } /* End for() loop */ ++ ++ /* Queue UIH data to be transmitted */ ++ for (j = 0; j < NR_MUXS; j++) { ++ ++ if (!(mux_send_info_flags[j])) { ++ continue; ++ } ++ ++ send_info = mux_send_info[j]; ++ if (!send_info) { ++ continue; ++ } ++ ++ if (send_info->filled) { ++ continue; ++ } ++ ++ /* Now queue UIH data to send_info->buf */ ++ ++ if (!mux_tty[j]) { ++ continue; ++ } ++ ++ tty = mux_table[j]; ++ if (!tty) { ++ continue; ++ } ++ ++ dlci = tty2dlci[j]; ++ if (ts0710->dlci[dlci].state == FLOW_STOPPED) { ++ TS0710_DEBUG("Flow stopped on channel DLCI: %d\n", ++ dlci); ++ continue; ++ } else if (ts0710->dlci[dlci].state != CONNECTED) { ++ TS0710_DEBUG("DLCI %d not connected\n", dlci); ++ continue; ++ } ++ ++ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) ++ && tty->ldisc.write_wakeup) { ++ (tty->ldisc.write_wakeup) (tty); ++ } ++ wake_up_interruptible(&tty->write_wait); ++ ++#ifdef SERIAL_HAVE_POLL_WAIT ++ wake_up_interruptible(&tty->poll_wait); ++#endif ++ ++ if (send_info->filled) { ++ if (j < mux_send_info_idx) { ++ mux_send_info_idx = j; ++ } ++ } ++ } /* End for() loop */ ++} ++ ++static int get_count(__u8 idx) ++{ ++ int ret; ++ ++ if (idx > TS0710MUX_COUNT_MAX_IDX) { ++ TS0710_PRINTK("MUX get_count: invalid idx: %d!\n", idx); ++ return -1; ++ } ++ ++ down(&mux_data_count_mutex[idx]); ++ ret = mux_data_count[idx]; ++ up(&mux_data_count_mutex[idx]); ++ ++ return ret; ++} ++ ++static int set_count(__u8 idx, int count) ++{ ++ if (idx > TS0710MUX_COUNT_MAX_IDX) { ++ TS0710_PRINTK("MUX set_count: invalid idx: %d!\n", idx); ++ return -1; ++ } ++ if (count < 0) { ++ TS0710_PRINTK("MUX set_count: invalid count: %d!\n", count); ++ return -1; ++ } ++ ++ down(&mux_data_count_mutex[idx]); ++ mux_data_count[idx] = count; ++ up(&mux_data_count_mutex[idx]); ++ ++ return 0; ++} ++ ++static int add_count(__u8 idx, int count) ++{ ++ if (idx > TS0710MUX_COUNT_MAX_IDX) { ++ TS0710_PRINTK("MUX add_count: invalid idx: %d!\n", idx); ++ return -1; ++ } ++ if (count <= 0) { ++ TS0710_PRINTK("MUX add_count: invalid count: %d!\n", count); ++ return -1; ++ } ++ ++ if (down_trylock(&mux_data_count_mutex[idx])) ++ return -1; ++ mux_data_count[idx] += count; ++ up(&mux_data_count_mutex[idx]); ++ ++ return 0; ++} ++ ++ssize_t file_proc_read(struct file * file, char *buf, size_t size, ++ loff_t * ppos) ++{ ++ gprs_bytes gprsData[TS0710MUX_GPRS_SESSION_MAX]; ++ int bufLen = sizeof(gprs_bytes) * TS0710MUX_GPRS_SESSION_MAX; ++ ++ UNUSED_PARAM(file); ++ UNUSED_PARAM(size); ++ UNUSED_PARAM(ppos); ++ ++ gprsData[0].recvBytes = get_count(TS0710MUX_GPRS1_RECV_COUNT_IDX); ++ gprsData[0].sentBytes = get_count(TS0710MUX_GPRS1_SEND_COUNT_IDX); ++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].recvBytes = ++ get_count(TS0710MUX_GPRS2_RECV_COUNT_IDX); ++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes = ++ get_count(TS0710MUX_GPRS2_SEND_COUNT_IDX); ++ ++ copy_to_user(buf, gprsData, bufLen); ++ ++ return bufLen; ++} ++ ++ssize_t file_proc_write(struct file * file, const char *buf, size_t count, ++ loff_t * ppos) ++{ ++ gprs_bytes gprsData[TS0710MUX_GPRS_SESSION_MAX]; ++ int bufLen = sizeof(gprs_bytes) * TS0710MUX_GPRS_SESSION_MAX; ++ ++ UNUSED_PARAM(file); ++ UNUSED_PARAM(count); ++ UNUSED_PARAM(ppos); ++ ++ memset(gprsData, 0, bufLen); ++ ++ copy_from_user(gprsData, buf, bufLen); ++ ++ set_count(TS0710MUX_GPRS1_RECV_COUNT_IDX, gprsData[0].recvBytes); ++ set_count(TS0710MUX_GPRS1_SEND_COUNT_IDX, gprsData[0].sentBytes); ++ set_count(TS0710MUX_GPRS2_RECV_COUNT_IDX, ++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].recvBytes); ++ set_count(TS0710MUX_GPRS2_SEND_COUNT_IDX, ++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes); ++ ++ return bufLen; ++} ++ ++static void gprs_proc_init(void) ++{ ++ gprs_proc_file = ++ create_proc_entry("gprsbytes", S_IRUSR | S_IWUSR, NULL); ++ gprs_proc_file->proc_fops = &file_proc_operations; ++} ++ ++static void gprs_proc_exit(void) ++{ ++ remove_proc_entry("gprsbytes", gprs_proc_file); ++} ++ ++static int __init mux_init(void) ++{ ++ __u8 j; ++ ++ if (COMM_FOR_MUX_DRIVER == NULL) { ++ ++#ifdef USB_FOR_MUX ++ panic("please install IPC-USB first\n"); ++#else ++ panic("please install ttyS0 first\n"); ++#endif ++ ++ } ++ ++ ts0710_init(); ++ ++ for (j = 0; j < NR_MUXS; j++) { ++ mux_send_info_flags[j] = 0; ++ mux_send_info[j] = 0; ++ mux_recv_info_flags[j] = 0; ++ mux_recv_info[j] = 0; ++ } ++ mux_send_info_idx = NR_MUXS; ++ mux_recv_queue = NULL; ++ mux_recv_flags = 0; ++ ++ for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) { ++ mux_data_count[j] = 0; ++ mux_data_count2[j] = 0; ++ init_MUTEX(&mux_data_count_mutex[j]); ++ } ++ post_recv_count_flag = 0; ++ ++ INIT_WORK(&send_tqueue, send_worker, NULL); ++ INIT_WORK(&receive_tqueue, receive_worker, NULL); ++ INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL); ++ ++ memset(&mux_driver, 0, sizeof(struct tty_driver)); ++ memset(&mux_tty, 0, sizeof(mux_tty)); ++ mux_driver.magic = TTY_DRIVER_MAGIC; ++ mux_driver.driver_name = "ts0710mux"; ++ mux_driver.name = "ts0710mux"; ++ mux_driver.major = TS0710MUX_MAJOR; ++ mux_driver.minor_start = TS0710MUX_MINOR_START; ++ mux_driver.num = NR_MUXS; ++ mux_driver.type = TTY_DRIVER_TYPE_SERIAL; ++ mux_driver.subtype = SERIAL_TYPE_NORMAL; ++ mux_driver.init_termios = tty_std_termios; ++ mux_driver.init_termios.c_iflag = 0; ++ mux_driver.init_termios.c_oflag = 0; ++ mux_driver.init_termios.c_cflag = B38400 | CS8 | CREAD; ++ mux_driver.init_termios.c_lflag = 0; ++ mux_driver.flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW; ++ ++ mux_driver.ttys = mux_table; ++ mux_driver.termios = mux_termios; ++ mux_driver.termios_locked = mux_termios_locked; ++// mux_driver.driver_state = mux_state; ++ mux_driver.other = NULL; ++ ++ mux_driver.open = mux_open; ++ mux_driver.close = mux_close; ++ mux_driver.write = mux_write; ++ mux_driver.write_room = mux_write_room; ++ mux_driver.flush_buffer = mux_flush_buffer; ++ mux_driver.chars_in_buffer = mux_chars_in_buffer; ++ mux_driver.throttle = mux_throttle; ++ mux_driver.unthrottle = mux_unthrottle; ++ mux_driver.ioctl = mux_ioctl; ++ mux_driver.owner = THIS_MODULE; ++ ++ if (tty_register_driver(&mux_driver)) ++ panic("Couldn't register mux driver"); ++ ++ COMM_MUX_DISPATCHER = mux_dispatcher; ++ COMM_MUX_SENDER = mux_sender; ++ ++ gprs_proc_init(); ++ ++ return 0; ++} ++ ++static void __exit mux_exit(void) ++{ ++ __u8 j; ++ ++ COMM_MUX_DISPATCHER = NULL; ++ COMM_MUX_SENDER = NULL; ++ ++ gprs_proc_exit(); ++ ++ mux_send_info_idx = NR_MUXS; ++ mux_recv_queue = NULL; ++ for (j = 0; j < NR_MUXS; j++) { ++ if ((mux_send_info_flags[j]) && (mux_send_info[j])) { ++ kfree(mux_send_info[j]); ++ } ++ mux_send_info_flags[j] = 0; ++ mux_send_info[j] = 0; ++ ++ if ((mux_recv_info_flags[j]) && (mux_recv_info[j])) { ++ free_mux_recv_struct(mux_recv_info[j]); ++ } ++ mux_recv_info_flags[j] = 0; ++ mux_recv_info[j] = 0; ++ } ++ ++ if (tty_unregister_driver(&mux_driver)) ++ panic("Couldn't unregister mux driver"); ++} ++ ++module_init(mux_init); ++module_exit(mux_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Harald Welte "); ++MODULE_DESCRIPTION("TS 07.10 Multiplexer"); +Index: linux-2.6.24/drivers/char/ts0710_mux.h +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/char/ts0710_mux.h +@@ -0,0 +1,103 @@ ++/* ++ * mux_macro.h ++ * ++ * Copyright (C) 2002 2005 Motorola ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ * ++ * 11/18/2002 (Motorola) - Initial version ++ * ++ */ ++ ++/* ++* This header file should be included by both MUX and other applications ++* which access MUX device files. It gives the additional macro definitions ++* shared between MUX and applications. ++*/ ++ ++/* MUX DLCI(Data Link Connection Identifier) Configuration */ ++/* ++* DLCI Service ++* 0 Control Channel ++* 1 Voice Call & Network-related ++* 2 SMS MO ++* 3 SMS MT ++* 4 Phonebook & related ++* 5 MISC ++* 6 CSD/FAX ++* 7 GPRS1 ++* 8 GPRS2 ++* 9 Logger CMD ++* 10 Logger Data ++* 11 Test CMD ++* 12 AGPS ++* 13 Net Monitor ++*/ ++ ++/* Mapping between DLCI and MUX device files */ ++/* ++* File Name Minor DLCI AT Command/Data ++* /dev/mux0 0 1 AT Command ++* /dev/mux1 1 2 AT Command ++* /dev/mux2 2 3 AT Command ++* /dev/mux3 3 4 AT Command ++* /dev/mux4 4 5 AT Command ++* /dev/mux5 5 6 AT Command ++* /dev/mux6 6 7 AT Command ++* /dev/mux7 7 8 AT Command ++* /dev/mux8 8 6 Data ++* /dev/mux9 9 7 Data ++* /dev/mux10 10 8 Data ++* /dev/mux11 11 9 Data ++* /dev/mux12 12 10 Data ++* /dev/mux13 13 11 Data ++* /dev/mux14 14 12 Data ++* /dev/mux15 15 13 Data ++*/ ++ ++#define MUX_CMD_FILE_VOICE_CALL "/dev/mux0" ++#define MUX_CMD_FILE_SMS_MO "/dev/mux1" ++#define MUX_CMD_FILE_SMS_MT "/dev/mux2" ++#define MUX_CMD_FILE_PHONEBOOK "/dev/mux3" ++#define MUX_CMD_FILE_MISC "/dev/mux4" ++#define MUX_CMD_FILE_CSD "/dev/mux5" ++#define MUX_CMD_FILE_GPRS1 "/dev/mux6" ++#define MUX_CMD_FILE_GPRS2 "/dev/mux7" ++ ++#define MUX_DATA_FILE_CSD "/dev/mux8" ++#define MUX_DATA_FILE_GPRS1 "/dev/mux9" ++#define MUX_DATA_FILE_GPRS2 "/dev/mux10" ++#define MUX_DATA_FILE_LOGGER_CMD "/dev/mux11" ++#define MUX_DATA_FILE_LOGGER_DATA "/dev/mux12" ++#define MUX_DATA_FILE_TEST_CMD "/dev/mux13" ++#define MUX_DATA_FILE_AGPS "/dev/mux14" ++#define MUX_DATA_FILE_NET_MONITOR "/dev/mux15" ++ ++#define NUM_MUX_CMD_FILES 8 ++#define NUM_MUX_DATA_FILES 8 ++#define NUM_MUX_FILES ( NUM_MUX_CMD_FILES + NUM_MUX_DATA_FILES ) ++ ++/* Special ioctl() upon a MUX device file for hanging up a call */ ++#define TS0710MUX_IO_MSC_HANGUP 0x54F0 ++ ++/* Special ioctl() upon a MUX device file for MUX loopback test */ ++#define TS0710MUX_IO_TEST_CMD 0x54F1 ++ ++/* Special Error code might be return from write() to a MUX device file */ ++#define EDISCONNECTED 900 /* Logical data link is disconnected */ ++ ++/* Special Error code might be return from open() to a MUX device file */ ++#define EREJECTED 901 /* Logical data link connection request is rejected */ +Index: linux-2.6.24/drivers/char/ts0710_mux_usb.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/char/ts0710_mux_usb.c +@@ -0,0 +1,868 @@ ++/* ++ * linux/drivers/usb/ipcusb.c ++ * ++ * Implementation of a ipc driver based Intel's Bulverde USB Host ++ * Controller. ++ * ++ * Copyright (C) 2003-2005 Motorola ++ * Copyright (C) 2006 Harald Welte ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ * 2003-Nov-03 - (Motorola) created ++ * 2004-Feb-20 - (Motorola) Add Power Manager codes ++ * 2004-Apr-14 - (Motorola) Update Suspend/Resume codes ++ * 2004-May-10 - (Motorola) Add unlink_urbs codes and do some updates of send ++ * out urb sequence ++ * 2006-Jun-22 - (Harald Welte) port to Linux 2.6.x ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "ts0710_mux_usb.h" ++ ++/*Macro defined for this driver*/ ++#define DRIVER_VERSION "1.0alpha1" ++#define DRIVER_AUTHOR "Motorola / Harald Welte " ++#define DRIVER_DESC "USB IPC Driver (TS07.10 lowlevel)" ++#define MOTO_IPC_VID 0x22b8 ++#define MOTO_IPC_PID 0x3006 ++#define IBUF_SIZE 32 /*urb size*/ ++#define IPC_USB_XMIT_SIZE 1024 ++#define IPC_URB_SIZE 32 ++#define IPC_USB_WRITE_INIT 0 ++#define IPC_USB_WRITE_XMIT 1 ++#define IPC_USB_PROBE_READY 3 ++#define IPC_USB_PROBE_NOT_READY 4 ++#define DBG_MAX_BUF_SIZE 1024 ++#define ICL_EVENT_INTERVAL (HZ) ++#undef BVD_DEBUG ++ ++#define IS_EP_BULK(ep) ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0) ++#define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) ++#define IS_EP_BULK_OUT(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) ++/*End defined macro*/ ++ ++/*global values defined*/ ++static struct usb_driver usb_ipc_driver; ++static struct timer_list ipcusb_timer; ++static struct timer_list suspend_timer; ++static struct timer_list wakeup_timer; ++static struct tty_struct ipcusb_tty; /* the coresponding tty struct, we just use flip buffer here. */ ++static struct tty_driver ipcusb_tty_driver; /* the coresponding tty driver, we just use write and chars in buff here*/ ++struct tty_driver *usb_for_mux_driver = NULL; ++struct tty_struct *usb_for_mux_tty = NULL; ++void (*usb_mux_dispatcher)(struct tty_struct *tty) = NULL; ++void (*usb_mux_sender)(void) = NULL; ++void (*ipcusb_ap_to_bp)(unsigned char*, int) = NULL; ++void (*ipcusb_bp_to_ap)(unsigned char*, int) = NULL; ++EXPORT_SYMBOL(usb_for_mux_driver); ++EXPORT_SYMBOL(usb_for_mux_tty); ++EXPORT_SYMBOL(usb_mux_dispatcher); ++EXPORT_SYMBOL(usb_mux_sender); ++EXPORT_SYMBOL(ipcusb_ap_to_bp); ++EXPORT_SYMBOL(ipcusb_bp_to_ap); ++static int sumbit_times = 0; ++static int callback_times = 0; ++//static unsigned long last_jiff = 0; ++extern int usbh_finished_resume; ++/*end global values defined*/ ++ ++MODULE_AUTHOR(DRIVER_AUTHOR); ++MODULE_DESCRIPTION(DRIVER_DESC); ++MODULE_LICENSE("GPL"); ++ ++#ifdef BVD_DEBUG ++#define bvd_dbg(format, arg...) printk(__FILE__ ": " format "\n" , ## arg) ++#else ++#define bvd_dbg(format, arg...) do {} while (0) ++#endif ++ ++/* USB device context */ ++typedef struct { ++ struct list_head list; ++ int size; ++ char *body; ++} buf_list_t; ++ ++struct ipc_usb_data { ++ u_int8_t write_finished_flag; ++ u_int8_t write_flag, ++ ipc_flag, ++ suspend_flag; ++ struct usb_device *ipc_dev; ++ struct urb readurb_mux, ++ writeurb_mux, ++ writeurb_dsplog; ++ char *obuf, *ibuf; ++ int writesize; /* max packet size for the ++ output bulk endpoint * ++ transfer buffers */ ++ ++ struct circ_buf xmit; /* write cric bufffer */ ++ struct list_head in_buf_list; ++ char bulk_in_ep_mux, ++ bulk_out_ep_mux, ++ bulk_in_ep_dsplog; ++ unsigned int ifnum; ++ ++ struct tasklet_struct bh, ++ bh_bp; ++ ++ spinlock_t lock; ++}; ++ ++struct ipc_usb_data *bvd_ipc; ++ ++#ifdef BVD_DEBUG ++static void bvd_dbg_hex(__u8 *buf, int len) ++{ ++ static unsigned char tbuf[DBG_MAX_BUF_SIZE]; ++ int i, c; ++ ++ if (len <= 0) ++ return; ++ ++ c = 0; ++ for (i=0; (i < len) && (c < (DBG_MAX_BUF_SIZE - 3)); i++) { ++ sprintf(&tbuf[c], "%02x ",buf[i]); ++ c += 3; ++ } ++ tbuf[c] = 0; ++ ++ printk("%s: %s\n", __FUNCTION__, tbuf); ++} ++#else ++#define bvd_dbg_hex(buf, len) ++#endif ++ ++static int unlink_urbs(struct urb *urb) ++{ ++ unsigned long flags; ++ int retval; ++ ++ spin_lock_irqsave(&bvd_ipc->lock, flags); ++ ++ retval = usb_unlink_urb(urb); ++ if (retval != -EINPROGRESS && retval != 0) ++ printk("unlink urb err, %d", retval); ++ ++ spin_unlock_irqrestore(&bvd_ipc->lock, flags); ++ return retval; ++} ++ ++static void append_to_inbuf_list(struct urb *urb) ++{ ++ buf_list_t *inbuf; ++ int count = urb->actual_length; ++ ++ inbuf = kmalloc(sizeof(buf_list_t), GFP_KERNEL); ++ if (!inbuf) { ++ printk("append_to_inbuf_list: (%d) out of memory!\n", ++ sizeof(buf_list_t)); ++ return; ++ } ++ ++ inbuf->size = count; ++ inbuf->body = kmalloc(sizeof(char)*count, GFP_KERNEL); ++ if (!inbuf->body) { ++ kfree(inbuf); ++ printk("append_to_inbuf_list: (%d) out of memory!\n", ++ sizeof(char)*count); ++ return; ++ } ++ memcpy(inbuf->body, (unsigned char*)urb->transfer_buffer, count); ++ list_add_tail(&inbuf->list, &bvd_ipc->in_buf_list); ++} ++ ++static void ipcusb_timeout(unsigned long data) ++{ ++ struct tty_struct *tty = &ipcusb_tty; ++ struct urb *urb = (struct urb *)data; ++ ++ bvd_dbg("ipcusb_timeout***"); ++ ++ while (!(list_empty(&bvd_ipc->in_buf_list))) { ++ int count; ++ buf_list_t *inbuf; ++ struct list_head *ptr = NULL; ++ ++ ptr = bvd_ipc->in_buf_list.next; ++ inbuf = list_entry (ptr, buf_list_t, list); ++ count = inbuf->size; ++ if (tty_insert_flip_string(tty, inbuf->body, count) >= count) { ++ list_del(ptr); ++ kfree(inbuf->body); ++ inbuf->body = NULL; ++ kfree(inbuf); ++ } else { ++ bvd_dbg("ipcusb_timeout: bvd_ipc->in_buf_list empty!"); ++ break; ++ } ++ } ++ ++ if (usb_mux_dispatcher) ++ usb_mux_dispatcher(tty); /**call Liu changhui's func.**/ ++ ++ if (list_empty(&bvd_ipc->in_buf_list)) { ++ urb->actual_length = 0; ++ urb->dev = bvd_ipc->ipc_dev; ++ if (usb_submit_urb(urb, GFP_ATOMIC)) ++ bvd_dbg("ipcusb_timeout: failed resubmitting read urb"); ++ bvd_dbg("ipcusb_timeout: resubmited read urb"); ++ } else { ++ ipcusb_timer.data = (unsigned long)urb; ++ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); ++ } ++} ++ ++static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs) ++{ ++ buf_list_t *inbuf; ++ int count = urb->actual_length; ++ struct tty_struct *tty = &ipcusb_tty; ++ ++ bvd_dbg("usb_ipc_read_bulk: begining!"); ++ if (urb->status) ++ printk("nonzero read bulk status received: %d\n", urb->status); ++ ++ bvd_dbg("usb_ipc_read_bulk: urb->actual_length=%d", urb->actual_length); ++ bvd_dbg("usb_ipc_read_bulk: urb->transfer_buffer:"); ++ ++ bvd_dbg_hex((unsigned char*)urb->transfer_buffer, urb->actual_length); ++ ++ if (count > 0 && ((*ipcusb_bp_to_ap) != NULL)) ++ (*ipcusb_bp_to_ap)(urb->transfer_buffer, urb->actual_length); ++ ++ if (!(list_empty(&bvd_ipc->in_buf_list))) { ++ int need_mux = 0; ++ ++ bvd_dbg("usb_ipc_read_bulk: some urbs in_buf_list"); ++ if (count > 0) { ++ bvd_ipc->suspend_flag = 1; ++ append_to_inbuf_list(urb); /* append the current received urb */ ++#if 0 ++ if(jiffies - last_jiff > ICL_EVENT_INTERVAL) ++ { ++ last_jiff = jiffies; ++ queue_apm_event(KRNL_ICL, NULL); ++ } ++#endif ++ } ++ ++ while (!(list_empty(&bvd_ipc->in_buf_list))) { ++ struct list_head* ptr = NULL; ++ ptr = bvd_ipc->in_buf_list.next; ++ inbuf = list_entry(ptr, buf_list_t, list); ++ count = inbuf->size; ++ need_mux = 1; ++ ++ tty_insert_flip_string(tty, inbuf->body, count); ++ ++ list_del(ptr); ++ kfree(inbuf->body); ++ inbuf->body = NULL; ++ kfree(inbuf); ++ } ++ ++ if (usb_mux_dispatcher && need_mux) ++ usb_mux_dispatcher(tty); /* call Liu changhui's func. */ ++ ++ if (list_empty(&bvd_ipc->in_buf_list)) { ++ urb->actual_length = 0; ++ urb->dev = bvd_ipc->ipc_dev; ++ if (usb_submit_urb(urb, GFP_ATOMIC)) ++ bvd_dbg("usb_ipc_read_bulk: " ++ "failed resubmitting read urb"); ++ bvd_dbg("usb_ipc_read_bulk: resubmited read urb"); ++ } else { ++ ipcusb_timer.data = (unsigned long)urb; ++ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); ++ } ++ } else if (count > 0) { ++ bvd_dbg("usb_ipc_read_bulk: no urbs in_buf_list"); ++ bvd_ipc->suspend_flag = 1; ++ ++ if (tty_insert_flip_string(tty, urb->transfer_buffer, ++ count) < count) { ++ bvd_ipc->suspend_flag = 1; ++ append_to_inbuf_list(urb); ++ ipcusb_timer.data = (unsigned long)urb; ++ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000)); ++#if 0 ++ if(jiffies - last_jiff > ICL_EVENT_INTERVAL) ++ { ++ last_jiff = jiffies; ++ queue_apm_event(KRNL_ICL, NULL); ++ } ++#endif ++ } ++ ++ if (usb_mux_dispatcher) ++ usb_mux_dispatcher(tty); /* call Liu changhui's func. */ ++ ++ urb->actual_length = 0; ++ urb->dev = bvd_ipc->ipc_dev; ++ if (usb_submit_urb(urb, GFP_ATOMIC)) ++ bvd_dbg("failed resubmitting read urb"); ++#if 0 ++ if(jiffies - last_jiff > ICL_EVENT_INTERVAL) ++ { ++ last_jiff = jiffies; ++ queue_apm_event(KRNL_ICL, NULL); ++ } ++#endif ++ bvd_dbg("usb_ipc_read_bulk: resubmited read urb"); ++ } ++ ++ bvd_dbg("usb_ipc_read_bulk: completed!!!"); ++} ++ ++static void usb_ipc_write_bulk(struct urb *urb, struct pt_regs *regs) ++{ ++ callback_times++; ++ bvd_ipc->write_finished_flag = 1; ++ ++ bvd_dbg("usb_ipc_write_bulk: begining!"); ++ //printk("%s: write_finished_flag=%d\n", __FUNCTION__, bvd_ipc->write_finished_flag); ++ ++ if (urb->status) ++ printk("nonzero write bulk status received: %d\n", urb->status); ++ ++ if (usb_mux_sender) ++ usb_mux_sender(); /**call Liu changhui's func**/ ++ ++ //printk("usb_ipc_write_bulk: mark ipcusb_softint!\n"); ++ tasklet_schedule(&bvd_ipc->bh); ++ ++ bvd_dbg("usb_ipc_write_bulk: finished!"); ++} ++ ++static void wakeup_timeout(unsigned long data) ++{ ++ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); ++ bvd_dbg("wakup_timeout: send GPIO_MCU_INT_SW signal!"); ++} ++ ++static void suspend_timeout(unsigned long data) ++{ ++ if (bvd_ipc->suspend_flag == 1) { ++ bvd_ipc->suspend_flag = 0; ++ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000)); ++ bvd_dbg("suspend_timeout: add the suspend timer again"); ++ } else { ++ unlink_urbs(&bvd_ipc->readurb_mux); ++ UHCRHPS3 = 0x4; ++ mdelay(40); ++ bvd_dbg("suspend_timeout: send SUSPEND signal! UHCRHPS3=0x%x", ++ UHCRHPS3); ++ } ++} ++ ++static void ipcusb_xmit_data(void) ++{ ++ int c, count = IPC_URB_SIZE; ++ int result = 0; ++ int buf_flag = 0; ++ int buf_num = 0; ++ ++ //printk("%s: sumbit_times=%d, callback_times=%d\n", __FUNCTION__, sumbit_times, callback_times); ++ if (bvd_ipc->write_finished_flag == 0) ++ return; ++ ++ while (1) { ++ c = CIRC_CNT_TO_END(bvd_ipc->xmit.head, bvd_ipc->xmit.tail, ++ IPC_USB_XMIT_SIZE); ++ if (count < c) ++ c = count; ++ if (c <= 0) ++ break; ++ ++ memcpy(bvd_ipc->obuf+buf_num, ++ bvd_ipc->xmit.buf + bvd_ipc->xmit.tail, c); ++ buf_flag = 1; ++ bvd_ipc->xmit.tail = ((bvd_ipc->xmit.tail + c) ++ & (IPC_USB_XMIT_SIZE-1)); ++ count -= c; ++ buf_num += c; ++ } ++ ++ if (buf_num == 0) { ++ bvd_dbg("ipcusb_xmit_data: buf_num=%d, add suspend_timer", ++ buf_num); ++ bvd_ipc->suspend_flag = 0; ++ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000)); ++ } ++ ++ bvd_dbg("ipcusb_xmit_data: buf_num=%d", buf_num); ++ bvd_dbg("ipcusb_xmit_data: bvd_ipc->obuf: "); ++ ++ bvd_dbg_hex((bvd_ipc->obuf)-buf_num, buf_num); ++ ++ if (buf_flag) { ++ bvd_ipc->writeurb_mux.transfer_buffer_length = buf_num; ++ bvd_dbg("ipcusb_xmit_data: copy data to write urb finished! "); ++ ++ if ((UHCRHPS3 & 0x4) == 0x4) { ++ static int ret; ++ int time = 0; ++ ++ /* if BP sleep, wake up BP first */ ++ pxa_gpio_mode(GPIO_IN | 41); ++ if (GPIO_is_high(41)) { ++ if (GPIO_is_high(GPIO_MCU_INT_SW)) ++ GPCR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); ++ else ++ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); ++ ++ time = jiffies; ++ while (GPIO_is_high(41) && (jiffies < (time+HZ))); ++ ++ if (GPIO_is_high(41)) { ++ printk("%s: Wakeup BP timeout! BP state is %d\n", ++ __FUNCTION__, GPIO_is_high(41)); ++ } ++ if (GPIO_is_high(GPIO_MCU_INT_SW)) ++ GPCR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); ++ else ++ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW); ++ } ++ ++ /* Resume BP */ ++ UHCRHPS3 = 0x8; ++ mdelay(40); ++ bvd_dbg("ipcusb_xmit_data: Send RESUME signal! UHCRHPS3=0x%x", ++ UHCRHPS3); ++ /*send IN token*/ ++ bvd_ipc->readurb_mux.actual_length = 0; ++ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; ++ if (ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) ++ printk("ipcusb_xmit_data: usb_submit_urb(read mux bulk)" ++ "failed! status=%d\n", ret); ++ bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!"); ++ } ++ ++ sumbit_times++; ++ bvd_ipc->write_finished_flag = 0; ++ //printk("%s: clear write_finished_flag:%d\n", __FUNCTION__, bvd_ipc->write_finished_flag); ++ bvd_ipc->writeurb_mux.dev = bvd_ipc->ipc_dev; ++ if (result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC)) ++ warn("ipcusb_xmit_data: funky result! result=%d\n", result); ++ ++ bvd_dbg("ipcusb_xmit_data: usb_submit_urb finished! result:%d", result); ++ ++ } ++} ++ ++static void usbipc_bh_func(unsigned long param) ++{ ++ ipcusb_xmit_data(); ++} ++ ++extern void get_halted_bit(void); ++ ++static void usbipc_bh_bp_func(unsigned long param) ++{ ++ if ((UHCRHPS3 & 0x4) == 0x4) { ++ UHCRHPS3 = 0x8; ++ mdelay(40); ++ bvd_dbg("ipcusb_softint_send_readurb: Send RESUME signal! " ++ "UHCRHPS3=0x%x", UHCRHPS3); ++ } ++ if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) { ++ get_halted_bit(); ++ ++ /*send a IN token*/ ++ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; ++ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) { ++ bvd_dbg("ipcusb_softint_send_readurb: " ++ "usb_submit_urb(read mux bulk) failed!"); ++ } ++ bvd_dbg("ipcusb_softint_send_readurb: Send a IN token successfully!"); ++ bvd_ipc->suspend_flag = 0; ++ bvd_dbg("ipcusb_softint_send_readurb: add suspend_timer"); ++ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000)); ++ } ++} ++ ++static int usb_ipc_write(struct tty_struct *tty, ++ const unsigned char *buf, int count) ++{ ++ int c, ret = 0; ++ ++ bvd_dbg("usb_ipc_write: count=%d, buf: ", count); ++ bvd_dbg_hex(buf, count); ++ ++ if (count <= 0) ++ return 0; ++ ++ if (*ipcusb_ap_to_bp != NULL) ++ (*ipcusb_ap_to_bp)(buf, count); ++ ++ bvd_ipc->suspend_flag = 1; ++ ++ if ((bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) && ++ (bvd_ipc->xmit.head == bvd_ipc->xmit.tail)) { ++ bvd_dbg("usb_ipc_write: set write_flag"); ++ bvd_ipc->write_flag = IPC_USB_WRITE_XMIT; ++ } ++ ++ while (1) { ++ c = CIRC_SPACE_TO_END(bvd_ipc->xmit.head, ++ bvd_ipc->xmit.tail, IPC_USB_XMIT_SIZE); ++ if (count < c) ++ c = count; ++ if (c <= 0) ++ break; ++ ++ memcpy(bvd_ipc->xmit.buf + bvd_ipc->xmit.head, buf, c); ++ bvd_ipc->xmit.head = ((bvd_ipc->xmit.head + c) ++ & (IPC_USB_XMIT_SIZE-1)); ++ buf += c; ++ count -= c; ++ ret += c; ++ } ++ bvd_dbg("usb_ipc_write: ret=%d, bvd_ipc->xmit.buf: ", ret); ++ ++ bvd_dbg_hex(bvd_ipc->xmit.buf, ret); ++ ++ if (bvd_ipc->write_flag == IPC_USB_WRITE_XMIT) { ++ bvd_ipc->write_flag = IPC_USB_WRITE_INIT; ++ bvd_dbg("usb_ipc_write: mark ipcusb_softint"); ++ tasklet_schedule(&bvd_ipc->bh); ++ } ++ ++ bvd_dbg("usb_ipc_write: ret=%d\n", ret); ++ return ret; ++} ++ ++static int usb_ipc_chars_in_buffer(struct tty_struct *tty) ++{ ++ return CIRC_CNT(bvd_ipc->xmit.head, bvd_ipc->xmit.tail, IPC_USB_XMIT_SIZE); ++} ++ ++void usb_send_readurb(void) ++{ ++ //printk("usb_send_readurb: begining!UHCRHPS3=0x%x, usbh_finished_resume=%d\n", UHCRHPS3, usbh_finished_resume); ++ ++ if (usbh_finished_resume == 0) ++ return; ++ ++ tasklet_schedule(&bvd_ipc->bh_bp); ++} ++ ++static int usb_ipc_probe(struct usb_interface *intf, ++ const struct usb_device_id *id) ++{ ++ struct usb_device *usbdev = interface_to_usbdev(intf); ++ struct usb_config_descriptor *ipccfg; ++ struct usb_interface_descriptor *interface; ++ struct usb_endpoint_descriptor *endpoint; ++ int ep_cnt, readsize, writesize; ++ char have_bulk_in_mux, have_bulk_out_mux; ++ ++ bvd_dbg("usb_ipc_probe: vendor id 0x%x, device id 0x%x", ++ usbdev->descriptor.idVendor, usbdev->descriptor.idProduct); ++ ++ if ((usbdev->descriptor.idVendor != MOTO_IPC_VID) || ++ (usbdev->descriptor.idProduct != MOTO_IPC_PID)) ++ return -ENODEV; ++ ++ /* a2590c : dsplog interface is not supported by this driver */ ++ if (intf->minor == 2) /* dsplog interface number is 2 */ ++ return -1; ++ ++ bvd_dbg("usb_ipc_probe: USB dev address:%p", usbdev); ++ bvd_dbg("usb_ipc_probe: ifnum:%u", intf->minor); ++ ++ ipccfg = &usbdev->actconfig->desc; ++ bvd_dbg("usb_ipc_prob: config%d", ipccfg->bConfigurationValue); ++ bvd_dbg("usb_ipc_prob: bNumInterfaces = %d", ipccfg->bNumInterfaces); ++ ++ /* After this point we can be a little noisy about what we are trying ++ * to configure, hehe. */ ++ if (usbdev->descriptor.bNumConfigurations != 1) { ++ info("usb_ipc_probe: Only one device configuration " ++ "is supported."); ++ return -1; ++ } ++ ++ if (usbdev->config[0].desc.bNumInterfaces != 3) { ++ info("usb_ipc_probe: Only three device interfaces are " ++ "supported."); ++ return -1; ++ } ++ ++ interface = &intf->cur_altsetting->desc; ++ endpoint = &intf->cur_altsetting->endpoint[0].desc; ++ /* Start checking for two bulk endpoints or ... FIXME: This is a future ++ * enhancement...*/ ++ bvd_dbg("usb_ipc_probe: Number of Endpoints:%d", ++ (int) interface->bNumEndpoints); ++ if (interface->bNumEndpoints != 2) { ++ info("usb_ipc_probe: Only two endpoints supported."); ++ return -1; ++ } ++ ++ ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0; ++ ++ bvd_dbg("usb_ipc_probe: endpoint[0] is:%x", ++ (&endpoint[0])->bEndpointAddress); ++ bvd_dbg("usb_ipc_probe: endpoint[1] is:%x ", ++ (&endpoint[1])->bEndpointAddress); ++ ++ while (ep_cnt < interface->bNumEndpoints) { ++ ++ if (!have_bulk_in_mux && IS_EP_BULK_IN(endpoint[ep_cnt])) { ++ bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is:%x ", ++ (&endpoint[ep_cnt])->bEndpointAddress); ++ have_bulk_in_mux = ++ (&endpoint[ep_cnt])->bEndpointAddress; ++ readsize = (&endpoint[ep_cnt])->wMaxPacketSize; ++ bvd_dbg("usb_ipc_probe: readsize=%d", readsize); ++ ep_cnt++; ++ continue; ++ } ++ ++ if (!have_bulk_out_mux && IS_EP_BULK_OUT(endpoint[ep_cnt])) { ++ bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is:%x ", ++ (&endpoint[ep_cnt])->bEndpointAddress); ++ have_bulk_out_mux = ++ (&endpoint[ep_cnt])->bEndpointAddress; ++ writesize = (&endpoint[ep_cnt])->wMaxPacketSize; ++ bvd_dbg("usb_ipc_probe: writesize=%d", writesize); ++ ep_cnt++; ++ continue; ++ } ++ ++ info("usb_ipc_probe: Undetected endpoint ^_^ "); ++ /* Shouldn't ever get here unless we have something weird */ ++ return -1; ++ } ++ ++ /* Perform a quick check to make sure that everything worked as it ++ * should have. */ ++ ++ switch (interface->bNumEndpoints) { ++ case 2: ++ if (!have_bulk_in_mux || !have_bulk_out_mux) { ++ info("usb_ipc_probe: Two bulk endpoints required."); ++ return -1; ++ } ++ break; ++ default: ++ info("usb_ipc_probe: Endpoint determination failed ^_^ "); ++ return -1; ++ } ++ ++ /* Ok, now initialize all the relevant values */ ++ if (!(bvd_ipc->obuf = (char *)kmalloc(writesize, GFP_KERNEL))) { ++ err("usb_ipc_probe: Not enough memory for the output buffer."); ++ kfree(bvd_ipc); ++ return -1; ++ } ++ bvd_dbg("usb_ipc_probe: obuf address:%p", bvd_ipc->obuf); ++ ++ if (!(bvd_ipc->ibuf = (char *)kmalloc(readsize, GFP_KERNEL))) { ++ err("usb_ipc_probe: Not enough memory for the input buffer."); ++ kfree(bvd_ipc->obuf); ++ kfree(bvd_ipc); ++ return -1; ++ } ++ bvd_dbg("usb_ipc_probe: ibuf address:%p", bvd_ipc->ibuf); ++ ++ bvd_ipc->ipc_flag = IPC_USB_PROBE_READY; ++ bvd_ipc->write_finished_flag = 1; ++ bvd_ipc->suspend_flag = 1; ++ bvd_ipc->bulk_in_ep_mux= have_bulk_in_mux; ++ bvd_ipc->bulk_out_ep_mux= have_bulk_out_mux; ++ bvd_ipc->ipc_dev = usbdev; ++ bvd_ipc->writesize = writesize; ++ INIT_LIST_HEAD (&bvd_ipc->in_buf_list); ++ ++ bvd_ipc->bh.func = usbipc_bh_func; ++ bvd_ipc->bh.data = (unsigned long) bvd_ipc; ++ ++ bvd_ipc->bh_bp.func = usbipc_bh_bp_func; ++ bvd_ipc->bh_bp.data = (unsigned long) bvd_ipc; ++ ++ /*Build a write urb*/ ++ usb_fill_bulk_urb(&bvd_ipc->writeurb_mux, usbdev, ++ usb_sndbulkpipe(bvd_ipc->ipc_dev, ++ bvd_ipc->bulk_out_ep_mux), ++ bvd_ipc->obuf, writesize, usb_ipc_write_bulk, ++ bvd_ipc); ++ //bvd_ipc->writeurb_mux.transfer_flags |= USB_ASYNC_UNLINK; ++ ++ /*Build a read urb and send a IN token first time*/ ++ usb_fill_bulk_urb(&bvd_ipc->readurb_mux, usbdev, ++ usb_rcvbulkpipe(usbdev, bvd_ipc->bulk_in_ep_mux), ++ bvd_ipc->ibuf, readsize, usb_ipc_read_bulk, bvd_ipc); ++ //bvd_ipc->readurb_mux.transfer_flags |= USB_ASYNC_UNLINK; ++ ++ usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc); ++ //usb_driver_claim_interface(&usb_ipc_driver, &ipccfg->interface[1], bvd_ipc); ++ ++ // a2590c: dsplog is not supported by this driver ++ // usb_driver_claim_interface(&usb_ipc_driver, ++ // &ipccfg->interface[2], bvd_ipc); ++ /*send a IN token first time*/ ++ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev; ++ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) ++ printk("usb_ipc_prob: usb_submit_urb(read mux bulk) failed!\n"); ++ ++ bvd_dbg("usb_ipc_prob: Send a IN token successfully!"); ++ ++ if (bvd_ipc->xmit.head != bvd_ipc->xmit.tail) { ++ printk("usb_ipc_probe: mark ipcusb_softint!\n"); ++ tasklet_schedule(&bvd_ipc->bh); ++ } ++ ++ printk("usb_ipc_probe: completed probe!"); ++ usb_set_intfdata(intf, &bvd_ipc); ++ return 0; ++} ++ ++static void usb_ipc_disconnect(struct usb_interface *intf) ++{ ++ //struct usb_device *usbdev = interface_to_usbdev(intf); ++ struct ipc_usb_data *bvd_ipc_disconnect = usb_get_intfdata(intf); ++ ++ printk("usb_ipc_disconnect:*** \n"); ++ ++ if ((UHCRHPS3 & 0x4) == 0) ++ usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux); ++ ++ usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux); ++ ++ bvd_ipc_disconnect->ipc_flag = IPC_USB_PROBE_NOT_READY; ++ kfree(bvd_ipc_disconnect->ibuf); ++ kfree(bvd_ipc_disconnect->obuf); ++ ++ usb_driver_release_interface(&usb_ipc_driver, ++ bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]); ++ usb_driver_release_interface(&usb_ipc_driver, ++ bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]); ++ ++ //a2590c: dsplog interface is not supported by this driver ++ //usb_driver_release_interface(&usb_ipc_driver, &bvd_ipc_disconnect->ipc_dev->actconfig->interface[2]); ++ ++ bvd_ipc_disconnect->ipc_dev = NULL; ++ ++ usb_set_intfdata(intf, NULL); ++ ++ printk("usb_ipc_disconnect completed!\n"); ++} ++ ++static struct usb_device_id usb_ipc_id_table[] = { ++ { USB_DEVICE(MOTO_IPC_VID, MOTO_IPC_PID) }, ++ { } /* Terminating entry */ ++}; ++ ++static struct usb_driver usb_ipc_driver = { ++ .name = "usb ipc", ++ .probe = usb_ipc_probe, ++ .disconnect = usb_ipc_disconnect, ++ .id_table = usb_ipc_id_table, ++}; ++ ++static int __init usb_ipc_init(void) ++{ ++ int result; ++ ++ bvd_dbg("init usb_ipc"); ++ /* register driver at the USB subsystem */ ++ result = usb_register(&usb_ipc_driver); ++ if (result < 0) { ++ err ("usb ipc driver could not be registered"); ++ return result; ++ } ++ ++ /*init the related mux interface*/ ++ if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) { ++ err("usb_ipc_init: Out of memory."); ++ usb_deregister(&usb_ipc_driver); ++ return -ENOMEM; ++ } ++ bvd_dbg("usb_ipc_init: Address of bvd_ipc:%p", bvd_ipc); ++ ++ if (!(bvd_ipc->xmit.buf = kmalloc(IPC_USB_XMIT_SIZE, GFP_KERNEL))) { ++ err("usb_ipc_init: Not enough memory for the input buffer."); ++ kfree(bvd_ipc); ++ usb_deregister(&usb_ipc_driver); ++ return -ENOMEM; ++ } ++ bvd_dbg("usb_ipc_init: bvd_ipc->xmit.buf address:%p", ++ bvd_ipc->xmit.buf); ++ bvd_ipc->ipc_dev = NULL; ++ bvd_ipc->xmit.head = bvd_ipc->xmit.tail = 0; ++ bvd_ipc->write_flag = IPC_USB_WRITE_INIT; ++ ++ ipcusb_tty_driver.write = usb_ipc_write; ++ ipcusb_tty_driver.chars_in_buffer = usb_ipc_chars_in_buffer; ++ ++ usb_for_mux_driver = &ipcusb_tty_driver; ++ usb_for_mux_tty = &ipcusb_tty; ++ ++ /* init timers for ipcusb read process and usb suspend */ ++ init_timer(&ipcusb_timer); ++ ipcusb_timer.function = ipcusb_timeout; ++ ++ init_timer(&suspend_timer); ++ suspend_timer.function = suspend_timeout; ++ ++ init_timer(&wakeup_timer); ++ wakeup_timer.function = wakeup_timeout; ++ ++ info("USB Host(Bulverde) IPC driver registered."); ++ info(DRIVER_VERSION ":" DRIVER_DESC); ++ ++ return 0; ++} ++ ++static void __exit usb_ipc_exit(void) ++{ ++ bvd_dbg("cleanup bvd_ipc"); ++ ++ kfree(bvd_ipc->xmit.buf); ++ kfree(bvd_ipc); ++ usb_deregister(&usb_ipc_driver); ++ ++ info("USB Host(Bulverde) IPC driver deregistered."); ++} ++ ++module_init(usb_ipc_init); ++module_exit(usb_ipc_exit); ++EXPORT_SYMBOL(usb_send_readurb); +Index: linux-2.6.24/drivers/char/ts0710_mux_usb.h +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/char/ts0710_mux_usb.h +@@ -0,0 +1,29 @@ ++/* ++ * linux/drivers/usb/ipcusb.h ++ * ++ * Implementation of a ipc driver based Intel's Bulverde USB Host ++ * Controller. ++ * ++ * Copyright (C) 2003-2005 Motorola ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ * 2003-Nov-18 - (Motorola) created ++ * ++ */ ++extern struct tty_driver *usb_for_mux_driver; ++extern struct tty_struct *usb_for_mux_tty; ++extern void (*usb_mux_dispatcher)(struct tty_struct *tty); ++extern void (*usb_mux_sender)(void); diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch b/packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch new file mode 100644 index 0000000000..58cb25a0b6 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch @@ -0,0 +1,551 @@ +Index: linux-2.6.20.7/drivers/char/ts0710_mux.c +=================================================================== +--- linux-2.6.20.7.orig/drivers/char/ts0710_mux.c 2007-04-22 12:24:18.000000000 +0200 ++++ linux-2.6.20.7/drivers/char/ts0710_mux.c 2007-04-22 12:26:47.000000000 +0200 +@@ -85,6 +85,9 @@ + #include "ts0710.h" + #include "ts0710_mux.h" + ++#define TS0710DEBUG ++#define PRINT_OUTPUT_PRINTK ++ + #define TS0710MUX_GPRS_SESSION_MAX 2 + #define TS0710MUX_MAJOR 250 + #define TS0710MUX_MINOR_START 0 +@@ -316,7 +319,7 @@ + #ifdef TS0710DEBUG + + #ifdef PRINT_OUTPUT_PRINTK +-#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX " __FUNCTION__ ": " fmt "\n" , ## arg) ++#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX %s: " fmt "\n" , __func__, ## arg) + #else + #include "ezxlog.h" + static __u8 strDebug[256]; +@@ -530,10 +533,10 @@ + if (strncmp(p->comm, "aplogd", 6) == 0) { + sig = 1; + if (send_sig(SIGUSR2, p, 1) == 0) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX: success to send SIGUSR2 to aplogd!\n"); + } else { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX: failure to send SIGUSR2 to aplogd!\n"); + } + break; +@@ -542,7 +545,7 @@ + read_unlock(&tasklist_lock); + + if (!sig) { +- TS0710_PRINTK("MUX: not found aplogd!\n"); ++ TS0710_DEBUG("MUX: not found aplogd!\n"); + } + } + #else +@@ -559,11 +562,11 @@ + buf[len + 1] = TS0710_BASIC_FLAG; + + if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX basic_write: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n"); + + #ifndef USB_FOR_MUX +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX basic_write: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n"); + TS0710_SIG2APLOGD(); + #endif +@@ -577,7 +580,7 @@ + res = COMM_FOR_MUX_DRIVER->write(COMM_FOR_MUX_TTY, buf, len + 2); + + if (res != len + 2) { +- TS0710_PRINTK("MUX basic_write: Write Error!\n"); ++ TS0710_DEBUG("MUX basic_write: Write Error!\n"); + return -1; + } + +@@ -601,7 +604,7 @@ + TS0710_DEBUG("crc_check: CRC check OK\n"); + return 0; + } else { +- TS0710_PRINTK("MUX crc_check: CRC check failed\n"); ++ TS0710_DEBUG("MUX crc_check: CRC check failed\n"); + return 1; + } + } +@@ -1266,7 +1269,7 @@ + break; + + case FCON: /*Flow control on command */ +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Received Flow control(all channels) on command\n"); + if (mcc_short_pkt->h.type.cr == MCC_CMD) { + ts0710->dlci[0].state = CONNECTED; +@@ -1276,7 +1279,7 @@ + break; + + case FCOFF: /*Flow control off command */ +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Received Flow control(all channels) off command\n"); + if (mcc_short_pkt->h.type.cr == MCC_CMD) { + for (j = 0; j < TS0710_MAX_CHN; j++) { +@@ -1823,7 +1826,7 @@ + TS0710_DEBUG("UIH on channel %d\n", dlci); + + if (uih_len > ts0710->dlci[dlci].mtu) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: DLCI:%d, uih_len:%d is bigger than mtu:%d, discard data!\n", + dlci, uih_len, ts0710->dlci[dlci].mtu); + break; +@@ -1844,7 +1847,7 @@ + dlci, tty_idx); + TS0710_DEBUGSTR(uih_data_start, uih_len); + if (!(iscmdtty[tty_idx])) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: %s: Wrong CMDTAG on DLCI:%d, /dev/mux%d\n", + __FUNCTION__, dlci, tty_idx); + } +@@ -1856,7 +1859,7 @@ + ("NON-CMDTAG on DLCI:%d, /dev/mux%d\n", + dlci, tty_idx); + if (iscmdtty[tty_idx]) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: %s: Wrong NON-CMDTAG on DLCI:%d, /dev/mux%d\n", + __FUNCTION__, dlci, tty_idx); + } +@@ -1864,13 +1867,14 @@ + } + tty = mux_table[tty_idx]; + if ((!mux_tty[tty_idx]) || (!tty)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX: No application waiting for, discard it! /dev/mux%d\n", + tty_idx); ++ TS0710_DEBUG("MUX: mux_tty[%d] = %d, tty is at %i", tty_idx, mux_tty[tty_idx], tty); + } else { /* Begin processing received data */ + if ((!mux_recv_info_flags[tty_idx]) + || (!mux_recv_info[tty_idx])) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: No mux_recv_info, discard it! /dev/mux%d\n", + tty_idx); + break; +@@ -1878,7 +1882,7 @@ + + recv_info = mux_recv_info[tty_idx]; + if (recv_info->total > 8192) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX : discard data for tty_idx:%d, recv_info->total > 8192 \n", + tty_idx); + break; +@@ -1949,7 +1953,7 @@ + get_mux_recv_packet + (uih_len); + if (!recv_packet) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX %s: no memory\n", + __FUNCTION__); + break; +@@ -1980,7 +1984,7 @@ + } else { /* recv_info->total == 0 */ + if (uih_len > + TS0710MUX_RECV_BUF_SIZE) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: tty_idx:%d, uih_len == %d is too big\n", + tty_idx, uih_len); + uih_len = +@@ -2120,12 +2124,12 @@ + if (ts0710->dlci[dlci].state == DISCONNECTED) { + break; + } else if (signal_pending(current)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI %d Send DISC got signal!\n", + dlci); + break; + } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI %d Send DISC timeout!\n", dlci); + continue; + } +@@ -2158,7 +2162,7 @@ + return 0; + } else if (ts0710->dlci[0].state == CONNECTING) { + /* Reentry */ +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI: 0, reentry to open DLCI 0, pid: %d, %s !\n", + current->pid, current->comm); + try = 11; +@@ -2179,13 +2183,13 @@ + DISCONNECTED) { + break; + } else if (signal_pending(current)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Wait for connecting got signal!\n", + dlci); + retval = -EAGAIN; + break; + } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Wait for connecting timeout!\n", + dlci); + continue; +@@ -2199,7 +2203,7 @@ + } + } else if ((ts0710->dlci[0].state != DISCONNECTED) + && (ts0710->dlci[0].state != REJECTED)) { +- TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci); ++ TS0710_DEBUG("MUX DLCI:%d state is invalid!\n", dlci); + return retval; + } else { + ts0710->initiator = 1; +@@ -2218,19 +2222,19 @@ + retval = 0; + break; + } else if (ts0710->dlci[0].state == REJECTED) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Send SABM got rejected!\n", + dlci); + retval = -EREJECTED; + break; + } else if (signal_pending(current)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Send SABM got signal!\n", + dlci); + retval = -EAGAIN; + break; + } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Send SABM timeout!\n", + dlci); + continue; +@@ -2271,13 +2275,13 @@ + DISCONNECTED) { + break; + } else if (signal_pending(current)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Wait for connecting got signal!\n", + dlci); + retval = -EAGAIN; + break; + } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Wait for connecting timeout!\n", + dlci); + continue; +@@ -2296,7 +2300,7 @@ + } + } else if ((ts0710->dlci[dlci].state != DISCONNECTED) + && (ts0710->dlci[dlci].state != REJECTED)) { +- TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci); ++ TS0710_DEBUG("MUX DLCI:%d state is invalid!\n", dlci); + return retval; + } else { + ts0710->dlci[dlci].state = NEGOTIATING; +@@ -2313,13 +2317,13 @@ + if (ts0710->dlci[dlci].state == CONNECTING) { + break; + } else if (signal_pending(current)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Send pn_msg got signal!\n", + dlci); + retval = -EAGAIN; + break; + } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Send pn_msg timeout!\n", + dlci); + continue; +@@ -2344,20 +2348,20 @@ + break; + } else if (ts0710->dlci[dlci].state == + REJECTED) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Send SABM got rejected!\n", + dlci); + retval = -EREJECTED; + break; + } else if (signal_pending(current)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Send SABM got signal!\n", + dlci); + retval = -EAGAIN; + break; + } else if ((jiffies - t) >= + TS0710MUX_TIME_OUT) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX DLCI:%d Send SABM timeout!\n", + dlci); + continue; +@@ -2468,7 +2472,7 @@ + schedule_work(&send_tqueue); + #else + if (!tq_serial_for_mux) { +- TS0710_PRINTK("MUX Error: %s: tq_serial_for_mux == 0\n", ++ TS0710_DEBUG("MUX Error: %s: tq_serial_for_mux == 0\n", + __FUNCTION__); + return; + } +@@ -2508,7 +2512,7 @@ + if ((mux_tty[cmdtty] == 0) && (mux_tty[datatty] == 0)) { + if (dlci == 1) { + ts0710_close_channel(0); +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX mux_close: tapisrv might be down!!! Close DLCI 1\n"); + TS0710_SIG2APLOGD(); + } +@@ -2673,12 +2677,12 @@ + UNUSED_PARAM(tty); + + if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", + __FUNCTION__); + + #ifndef USB_FOR_MUX +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", + __FUNCTION__); + TS0710_SIG2APLOGD(); +@@ -2724,14 +2728,14 @@ + } else if (ts0710->dlci[dlci].state == CONNECTED) { + + if (!(mux_send_info_flags[line])) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: mux_write: mux_send_info_flags[%d] == 0\n", + line); + return -ENODEV; + } + send_info = mux_send_info[line]; + if (!send_info) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: mux_write: mux_send_info[%d] == 0\n", + line); + return -ENODEV; +@@ -2800,7 +2804,7 @@ + } + return c; + } else { +- TS0710_PRINTK("MUX mux_write: DLCI %d not connected\n", dlci); ++ TS0710_DEBUG("MUX mux_write: DLCI %d not connected\n", dlci); + return -EDISCONNECTED; + } + } +@@ -2940,7 +2944,7 @@ + return; + } + +- TS0710_PRINTK("MUX %s: line is:%d\n", __FUNCTION__, line); ++ TS0710_DEBUG("MUX %s: line is:%d\n", __FUNCTION__, line); + + if ((mux_send_info_flags[line]) + && (mux_send_info[line]) +@@ -2960,10 +2964,10 @@ + + /* + if( (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0) ) { +- TS0710_PRINTK("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__); ++ TS0710_DEBUG("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__); + + #ifndef USB_FOR_MUX +- TS0710_PRINTK("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__); ++ TS0710_DEBUG("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__); + TS0710_SIG2APLOGD(); + #endif + +@@ -2989,9 +2993,9 @@ + if ((COMM_FOR_MUX_DRIVER == NULL) || (COMM_FOR_MUX_TTY == NULL)) { + + #ifdef USB_FOR_MUX +- TS0710_PRINTK("MUX: please install and open IPC-USB first\n"); ++ TS0710_DEBUG("MUX: please install and open IPC-USB first\n"); + #else +- TS0710_PRINTK("MUX: please install and open ttyS0 first\n"); ++ TS0710_DEBUG("MUX: please install and open ttyS0 first\n"); + #endif + + goto out; +@@ -3016,7 +3020,7 @@ + /* if( dlci == 1 ) { */ + /* Open server channel 0 first */ + if ((retval = ts0710_open_channel(0)) != 0) { +- TS0710_PRINTK("MUX: Can't connect server channel 0!\n"); ++ TS0710_DEBUG("MUX: Can't connect server channel 0!\n"); + ts0710_init(); + + mux_tty[line]--; +@@ -3073,7 +3077,7 @@ + datatty = dlci2tty[dlci].datatty; + if ((mux_tty[cmdtty] > 0) || (mux_tty[datatty] > 0)) { + if ((retval = ts0710_open_channel(dlci)) != 0) { +- TS0710_PRINTK("MUX: Can't connected channel %d!\n", ++ TS0710_DEBUG("MUX: Can't connected channel %d!\n", + dlci); + ts0710_reset_dlci(dlci); + +@@ -3096,6 +3100,7 @@ + retval = 0; + #endif + out: ++ TS0710_DEBUG("returning %d for open of /dev/mux%d (mux_tty[%d] = %d", retval, line, line, mux_tty[line]); + return retval; + } + +@@ -3178,12 +3183,12 @@ + + while (1) { + tbuf_free = TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf); +- TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free); ++ TS0710_DEBUG("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free); + tbuf_read = get_from_inbuf_list(tbuf_ptr, tbuf_free); + if (tbuf_read == 0) { + break; + } else { +- TS0710_PRINTK("Read %i bytes.\n", tbuf_read); ++ TS0710_DEBUG("Read %i bytes.\n", tbuf_read); + }; + tbuf_ptr += tbuf_read; + }; +@@ -3192,7 +3197,7 @@ + + // Should be impossible? + //if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) { +- // TS0710_PRINTK ++ // TS0710_DEBUG + // ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n"); + // count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf)); + //} +@@ -3264,7 +3269,7 @@ + TS0710_LOGSTR_FRAME(0, start_flag, + (tbuf_ptr - + start_flag)); +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: %s: frame length:%d is bigger than Max total frame size:%d\n", + /*__FUNCTION__, framelen, TS0710MUX_MAX_TOTAL_FRAME_SIZE);*/ + __FUNCTION__, framelen, (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)); /*For BP UART problem */ +@@ -3389,7 +3394,7 @@ + *(uih_data_start + + uih_len) = + 0; +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX bp log: %s\n", + uih_data_start); + } +@@ -3415,7 +3420,7 @@ + TS0710_LOGSTR_FRAME(0, start_flag, + framelen); + TS0710_DEBUGHEX(start_flag, framelen); +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX: Lost synchronization!\n"); + search = start_flag + 1; + } +@@ -3476,7 +3481,7 @@ + recv_info2 = recv_info->next; + + if (!(recv_info->total)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: %s: Should not get here, recv_info->total == 0 \n", + __FUNCTION__); + continue; +@@ -3486,7 +3491,7 @@ + dlci = tty2dlci[tty_idx]; + tty = mux_table[tty_idx]; + if ((!mux_tty[tty_idx]) || (!tty)) { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX: No application waiting for, free recv_info! tty_idx:%d\n", + tty_idx); + mux_recv_info_flags[tty_idx] = 0; +@@ -3560,7 +3565,7 @@ + recv_info->total -= recv_packet->length; + free_mux_recv_packet(recv_packet); + } else { +- TS0710_PRINTK ++ TS0710_DEBUG + ("MUX Error: %s: Should not get here, recv_info->total is:%u \n", + __FUNCTION__, recv_info->total); + } +@@ -3760,7 +3765,7 @@ + int ret; + + if (idx > TS0710MUX_COUNT_MAX_IDX) { +- TS0710_PRINTK("MUX get_count: invalid idx: %d!\n", idx); ++ TS0710_DEBUG("MUX get_count: invalid idx: %d!\n", idx); + return -1; + } + +@@ -3774,11 +3779,11 @@ + static int set_count(__u8 idx, int count) + { + if (idx > TS0710MUX_COUNT_MAX_IDX) { +- TS0710_PRINTK("MUX set_count: invalid idx: %d!\n", idx); ++ TS0710_DEBUG("MUX set_count: invalid idx: %d!\n", idx); + return -1; + } + if (count < 0) { +- TS0710_PRINTK("MUX set_count: invalid count: %d!\n", count); ++ TS0710_DEBUG("MUX set_count: invalid count: %d!\n", count); + return -1; + } + +@@ -3792,11 +3797,11 @@ + static int add_count(__u8 idx, int count) + { + if (idx > TS0710MUX_COUNT_MAX_IDX) { +- TS0710_PRINTK("MUX add_count: invalid idx: %d!\n", idx); ++ TS0710_DEBUG("MUX add_count: invalid idx: %d!\n", idx); + return -1; + } + if (count <= 0) { +- TS0710_PRINTK("MUX add_count: invalid count: %d!\n", count); ++ TS0710_DEBUG("MUX add_count: invalid count: %d!\n", count); + return -1; + } + +Index: linux-2.6.20.7/drivers/char/ts0710_mux_usb.c +=================================================================== +--- linux-2.6.20.7.orig/drivers/char/ts0710_mux_usb.c 2007-04-22 12:26:47.000000000 +0200 ++++ linux-2.6.20.7/drivers/char/ts0710_mux_usb.c 2007-04-22 12:26:47.000000000 +0200 +@@ -72,7 +72,8 @@ + #define IPC_USB_PROBE_NOT_READY 4 + #define DBG_MAX_BUF_SIZE 1024 + #define ICL_EVENT_INTERVAL (HZ) +-#undef BVD_DEBUG ++ ++#define BVD_DEBUG + + #define IS_EP_BULK(ep) ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0) + #define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) diff --git a/packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch new file mode 100644 index 0000000000..47cc1a36bb --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch @@ -0,0 +1,363 @@ +Index: linux-2.6.24/drivers/input/touchscreen/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/input/touchscreen/Kconfig ++++ linux-2.6.24/drivers/input/touchscreen/Kconfig +@@ -263,4 +263,13 @@ + bool "GoTop Super_Q2/GogoPen/PenPower tablet device support" if EMBEDDED + depends on TOUCHSCREEN_USB_COMPOSITE + ++config TOUCHSCREEN_PCAP ++ tristate "Motorola PCAP touchscreen" ++ depends on EZX_PCAP ++ help ++ Say Y here if you have a Motorola EZX telephone and ++ want to support the built-in touchscreen. ++ ++ If unsure, say N. ++ + endif +Index: linux-2.6.24/drivers/input/touchscreen/pcap_ts.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/input/touchscreen/pcap_ts.c +@@ -0,0 +1,331 @@ ++/* ++ * pcap_ts.c - Touchscreen driver for Motorola PCAP2 based touchscreen as found ++ * in the EZX phone platform. ++ * ++ * Copyright (C) 2006 Harald Welte ++ * Copyright (C) 2007 Daniel Ribeiro ++ * ++ * Based on information found in the original Motorola 2.4.x ezx-ts.c driver. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * TODO: ++ * split this in a hardirq handler and a tasklet/bh ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP(x, args ...) printk(x, ## args) ++#else ++#define DEBUGP(x, args ...) ++#endif ++ ++#define POSITION_X_MEASUREMENT 0 ++#define POSITION_XY_MEASUREMENT 1 ++#define PRESSURE_MEASUREMENT 2 ++#define PLATE_X_MEASUREMENT 3 ++#define PLATE_Y_MEASUREMENT 4 ++#define STANDBY_MODE 5 ++#define NONTS_MODE 6 ++ ++struct pcap_ts { ++ int irq_xy; ++ int irq_touch; ++ struct input_dev *input; ++ struct timer_list timer; ++ u_int16_t x, y; ++ u_int16_t pressure; ++ u_int8_t read_state; ++}; ++ ++#define X_AXIS_MIN 0 ++#define X_AXIS_MAX 1023 ++ ++#define Y_AXIS_MAX X_AXIS_MAX ++#define Y_AXIS_MIN X_AXIS_MIN ++ ++#define PRESSURE_MAX X_AXIS_MAX ++#define PRESSURE_MIN X_AXIS_MIN ++ ++/* if we try to read faster, pressure reading becomes unreliable */ ++#define SAMPLE_INTERVAL (HZ/50) ++ ++ ++static void pcap_ts_mode(struct pcap_ts *pcap_ts, u_int32_t mode) ++{ ++ u_int32_t tmp; ++ ++ pcap_ts->read_state = mode; ++ ezx_pcap_read(PCAP_REG_ADC1, &tmp); ++ tmp &= ~PCAP_ADC1_TS_M_MASK; ++ tmp |= ((mode << PCAP_ADC1_TS_M_SHIFT) & PCAP_ADC1_TS_M_MASK); ++ ezx_pcap_write(PCAP_REG_ADC1, tmp); ++} ++ ++/* issue a XY read command to the ADC of PCAP2. Well get an ADCDONE interrupt ++ * once the result of the conversion is available */ ++static void pcap_ts_start_xy_read(struct pcap_ts *pcap_ts) ++{ ++ u_int32_t tmp; ++ ++ ezx_pcap_read(PCAP_REG_ADC1, &tmp); ++ tmp &= ~(PCAP_BIT_ADC1_RAND | PCAP_ADC1_ADA1_MASK | ++ PCAP_ADC1_ADA2_MASK); ++ tmp |= (PCAP_BIT_ADC1_ADEN | PCAP_BIT_ADC1_AD_SEL1 | ++ PCAP_BIT_ADC1_AD_SEL2 | (5 << PCAP_ADC1_ADA1_SHIFT) | ++ (3 << PCAP_ADC1_ADA2_SHIFT)); ++ ezx_pcap_write(PCAP_REG_ADC1, tmp); ++ ezx_pcap_bit_set(PCAP_BIT_ADC2_ASC, 1); ++} ++ ++/* read the XY result from the ADC of PCAP2 */ ++static void pcap_ts_get_xy_value(struct pcap_ts *pcap_ts) ++{ ++ u_int32_t tmp; ++ ++ ezx_pcap_read(PCAP_REG_ADC2, &tmp); ++ ++ if (pcap_ts->read_state == POSITION_XY_MEASUREMENT) { ++ pcap_ts->x = (tmp & PCAP_ADC2_ADD1_MASK) >> ++ PCAP_ADC2_ADD1_SHIFT; ++ pcap_ts->y = (tmp & PCAP_ADC2_ADD2_MASK) >> ++ PCAP_ADC2_ADD2_SHIFT; ++ } else { ++ pcap_ts->pressure = (tmp & PCAP_ADC2_ADD2_MASK) >> ++ PCAP_ADC2_ADD2_SHIFT; ++ } ++} ++ ++/* PCAP2 interrupts us when ADC conversion result is available */ ++static irqreturn_t pcap_ts_irq_xy(int irq, void *dev_id) ++{ ++ struct pcap_ts *pcap_ts = dev_id; ++ ++ pcap_ts_get_xy_value(pcap_ts); ++ DEBUGP(KERN_DEBUG "%s X=%4d, Y=%4d Z=%4d ", ++ pcap_ts->read_state == POSITION_XY_MEASUREMENT ? "COORD" : ++ "PRESS", pcap_ts->x, pcap_ts->y, pcap_ts->pressure); ++ switch (pcap_ts->read_state) { ++ case PRESSURE_MEASUREMENT: ++ if (pcap_ts->pressure >= PRESSURE_MAX || ++ pcap_ts->pressure <= PRESSURE_MIN ) { ++ /* pen has been released (or cant read pressure - WM)*/ ++ DEBUGP("UP\n"); ++ /* do nothing */ ++ } else { ++ /* pen has been touched down */ ++ DEBUGP("DOWN\n"); ++ input_report_key(pcap_ts->input, BTN_TOUCH, 1); ++ input_report_abs(pcap_ts->input, ABS_PRESSURE, pcap_ts->pressure); ++ } ++ /* switch state machine into coordinate read mode */ ++ pcap_ts_mode(pcap_ts, POSITION_XY_MEASUREMENT); ++ pcap_ts_start_xy_read(pcap_ts); ++ break; ++ case POSITION_XY_MEASUREMENT: ++ if (pcap_ts->x <= X_AXIS_MIN || pcap_ts->x >= X_AXIS_MAX || ++ pcap_ts->y <= Y_AXIS_MIN || pcap_ts->y >= Y_AXIS_MAX) { ++ /* pen has been released */ ++ DEBUGP("UP END\n"); ++ ++ input_report_key(pcap_ts->input, BTN_TOUCH, 0); ++ input_report_abs(pcap_ts->input, ABS_PRESSURE, 0); ++ ++ /* no need for timer, we'll get interrupted with ++ * next touch down event */ ++ del_timer(&pcap_ts->timer); ++ ++ /* ask PCAP2 to interrupt us if touch event happens ++ * again */ ++ pcap_ts_mode(pcap_ts, STANDBY_MODE); ++ enable_irq(pcap_ts->irq_touch); ++ } else { ++ DEBUGP("DOWN\n"); ++ input_report_abs(pcap_ts->input, ABS_X, pcap_ts->x); ++ input_report_abs(pcap_ts->input, ABS_Y, pcap_ts->y); ++ ++ /* switch back to pressure read mode */ ++ pcap_ts_mode(pcap_ts, PRESSURE_MEASUREMENT); ++ mod_timer(&pcap_ts->timer, jiffies + SAMPLE_INTERVAL); ++ } ++ input_sync(pcap_ts->input); ++ break; ++ default: ++ DEBUGP("ERROR\n"); ++ break; ++ } ++ return IRQ_HANDLED; ++} ++ ++/* PCAP2 interrupts us if the pen touches down (interrupts also on pen up - WM)*/ ++static irqreturn_t pcap_ts_irq_touch(int irq, void *dev_id) ++{ ++ struct pcap_ts *pcap_ts = dev_id; ++ /* mask Touchscreen interrupt bit, prevents further touch events ++ * from being reported to us until we're finished with reading ++ * both pressure and x/y from ADC */ ++ disable_irq(pcap_ts->irq_touch); ++ ++ DEBUGP("touched!!\n"); ++ pcap_ts_mode(pcap_ts, PRESSURE_MEASUREMENT); ++ pcap_ts_start_xy_read(pcap_ts); ++ return IRQ_HANDLED; ++} ++ ++static void pcap_ts_timer_fn(unsigned long data) ++{ ++ struct pcap_ts *pcap_ts = (struct pcap_ts *) data; ++ ++ pcap_ts_start_xy_read(pcap_ts); ++} ++ ++static int __init ezxts_probe(struct platform_device *pdev) ++{ ++ struct pcap_ts *pcap_ts; ++ struct input_dev *input_dev; ++ int err = -ENOMEM; ++ ++ pcap_ts = kzalloc(sizeof(*pcap_ts), GFP_KERNEL); ++ input_dev = input_allocate_device(); ++ if (!pcap_ts || !input_dev) ++ goto fail; ++ ++ pcap_ts->irq_xy = platform_get_irq(pdev, 0); ++ if (pcap_ts->irq_xy < 0) { ++ err = pcap_ts->irq_xy; ++ goto fail; ++ } ++ ++ pcap_ts->irq_touch = platform_get_irq(pdev, 1); ++ if (pcap_ts->irq_touch < 0) { ++ err = pcap_ts->irq_touch; ++ goto fail; ++ } ++ ++ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REFENB, 0); ++ pcap_ts_mode(pcap_ts, STANDBY_MODE); ++ ++ err = request_irq(pcap_ts->irq_xy, pcap_ts_irq_xy, IRQF_DISABLED, ++ "pcap-ts X/Y", pcap_ts); ++ if (err < 0) { ++ printk(KERN_ERR "pcap_ts: can't grab xy irq %d: %d\n", ++ pcap_ts->irq_xy, err); ++ goto fail; ++ } ++ ++ err = request_irq(pcap_ts->irq_touch, pcap_ts_irq_touch, IRQF_DISABLED, ++ "pcap-ts touch", pcap_ts); ++ if (err < 0) { ++ printk(KERN_ERR "pcap_ts: can't grab touch irq %d: %d\n", ++ pcap_ts->irq_touch, err); ++ goto fail_xy; ++ } ++ ++ pcap_ts->input = input_dev; ++ init_timer(&pcap_ts->timer); ++ pcap_ts->timer.data = (unsigned long) pcap_ts; ++ pcap_ts->timer.function = &pcap_ts_timer_fn; ++ ++ platform_set_drvdata(pdev, pcap_ts); ++ ++ input_dev->name = "pcap-touchscreen"; ++ input_dev->phys = "ezxts/input0"; ++ input_dev->id.bustype = BUS_HOST; ++ input_dev->id.vendor = 0x0001; ++ input_dev->id.product = 0x0002; ++ input_dev->id.version = 0x0100; ++ input_dev->cdev.dev = &pdev->dev; ++ input_dev->private = pcap_ts; ++ ++ input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); ++ input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); ++ input_set_abs_params(input_dev, ABS_X, X_AXIS_MIN, X_AXIS_MAX, 0, 0); ++ input_set_abs_params(input_dev, ABS_Y, Y_AXIS_MIN, Y_AXIS_MAX, 0, 0); ++ input_set_abs_params(input_dev, ABS_PRESSURE, PRESSURE_MIN, ++ PRESSURE_MAX, 0, 0); ++ ++ input_register_device(pcap_ts->input); ++ ++ return 0; ++ ++fail_xy: ++ free_irq(pcap_ts->irq_xy, pcap_ts); ++fail: ++ input_free_device(input_dev); ++ kfree(pcap_ts); ++ ++ return err; ++} ++ ++static int ezxts_remove(struct platform_device *pdev) ++{ ++ struct pcap_ts *pcap_ts = platform_get_drvdata(pdev); ++ ++ del_timer_sync(&pcap_ts->timer); ++ ++ free_irq(pcap_ts->irq_touch, pcap_ts); ++ free_irq(pcap_ts->irq_xy, pcap_ts); ++ ++ input_unregister_device(pcap_ts->input); ++ kfree(pcap_ts); ++ ++ return 0; ++} ++ ++static int ezxts_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REF_LOWPWR, 1); ++ return 0; ++} ++ ++static int ezxts_resume(struct platform_device *dev) ++{ ++ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REF_LOWPWR, 0); ++ /* just in case we suspend with TSI masked. */ ++// ezx_pcap_bit_set(PCAP_BIT_MSR_TSM, 0); ++ return 0; ++} ++ ++ ++static struct platform_driver ezxts_driver = { ++ .probe = ezxts_probe, ++ .remove = ezxts_remove, ++ .suspend = ezxts_suspend, ++ .resume = ezxts_resume, ++ .driver = { ++ .name = "pcap-ts", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __init ezxts_init(void) ++{ ++ return platform_driver_register(&ezxts_driver); ++} ++ ++static void __exit ezxts_exit(void) ++{ ++ platform_driver_unregister(&ezxts_driver); ++} ++ ++module_init(ezxts_init); ++module_exit(ezxts_exit); ++ ++MODULE_DESCRIPTION("Motorola PCAP2 touchscreen driver"); ++MODULE_AUTHOR("Harald Welte "); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.24/drivers/input/touchscreen/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/input/touchscreen/Makefile ++++ linux-2.6.24/drivers/input/touchscreen/Makefile +@@ -19,3 +19,4 @@ + obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o + obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o + obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o ++obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch new file mode 100644 index 0000000000..d272a701ba --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch @@ -0,0 +1,547 @@ +Index: linux-2.6.24/arch/arm/mach-pxa/generic.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/generic.c ++++ linux-2.6.24/arch/arm/mach-pxa/generic.c +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + + #include "devices.h" + #include "generic.h" +@@ -479,3 +480,28 @@ + .name = "sa1100-rtc", + .id = -1, + }; ++ ++static struct resource pxa_kbd_resources[] = { ++ { ++ .start = IRQ_KEYPAD, ++ .end = IRQ_KEYPAD, ++ .flags = IORESOURCE_IRQ, ++ }, { ++ .start = 0x41500000, ++ .end = 0x4150004c, ++ .flags = IORESOURCE_MEM, ++ }, ++}; ++ ++struct platform_device pxa_device_kbd = { ++ .name = "pxa-keyboard", ++ .id = -1, ++ .resource = pxa_kbd_resources, ++ .num_resources = ARRAY_SIZE(pxa_kbd_resources), ++}; ++ ++void __init pxa_set_kbd_info(struct pxakbd_platform_data *info) ++{ ++ pxa_device_kbd.dev.platform_data = info; ++} ++ +Index: linux-2.6.24/drivers/input/keyboard/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/input/keyboard/Kconfig ++++ linux-2.6.24/drivers/input/keyboard/Kconfig +@@ -293,4 +293,11 @@ + To compile this driver as a module, choose M here: the + module will be called bf54x-keys. + ++config KEYBOARD_PXA ++ tristate "Intel PXA keyboard support" ++ depends on ARCH_PXA ++ help ++ This add support for a driver of the Intel PXA2xx keyboard ++ controller. ++ + endif +Index: linux-2.6.24/drivers/input/keyboard/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/input/keyboard/Makefile ++++ linux-2.6.24/drivers/input/keyboard/Makefile +@@ -25,3 +25,4 @@ + obj-$(CONFIG_KEYBOARD_HP7XX) += jornada720_kbd.o + obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o + obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o ++obj-$(CONFIG_KEYBOARD_PXA) += pxakbd.o +Index: linux-2.6.24/include/asm-arm/arch-pxa/kbd.h +=================================================================== +--- /dev/null ++++ linux-2.6.24/include/asm-arm/arch-pxa/kbd.h +@@ -0,0 +1,28 @@ ++/* ++ * kbd_pxa.h ++ * ++ * Copyright (C) 2006 Harald Welte ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++#ifndef _KBD_PXA_H_ ++#define _KBD_PXA_H_ ++ ++struct pxakbd_platform_data { ++ int (*init)(void); /* init gpio, etc. */ ++ unsigned int scan_interval; ++ struct { ++ unsigned int rows; ++ unsigned int cols; ++ unsigned char *keycode; ++ } matrix; ++ struct { ++ unsigned int num; ++ unsigned char *keycode; ++ } direct; ++}; ++ ++#endif +Index: linux-2.6.24/drivers/input/keyboard/pxakbd.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/input/keyboard/pxakbd.c +@@ -0,0 +1,403 @@ ++/* ++ * Driver for Motorola EZX phone "keyboard" ++ * ++ * (C) 2006 by Harald Welte ++ * ++ * May, 2007 - Daniel Ribeiro ++ * pm callbacks ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP(x, args ...) printk(x, ## args) ++#else ++#define DEBUGP(x, args ...) ++#endif ++ ++/* per-keyboard private data structure */ ++struct pxakbd { ++ struct input_dev *input; ++ struct timer_list timer; ++ spinlock_t lock; ++ ++ struct resource *res; ++ unsigned int irq; ++ u_int32_t kpc; ++ u_int32_t kpkdi; ++ ++ struct pxakbd_platform_data *pd; ++}; ++ ++static int pxakbd_scan_direct(struct pxakbd *pxakbd) ++{ ++ u_int32_t kpdk; ++ unsigned int i; ++ int num_pressed = 0; ++ ++ kpdk = KPDK & 0x000000ff; ++ for (i = 0; i < pxakbd->pd->direct.num; i++) { ++ int pressed = 0; ++ ++ if (kpdk & (1 << i)) { ++ pressed = 1; ++ num_pressed++; ++ DEBUGP("pxakbd: pressed: direct %u\n", i); ++ } ++ if (pxakbd->pd->direct.keycode[i] != KEY_RESERVED) { ++ DEBUGP( "pxakbd: sending to input layer: keycode = %d, pressed = %d\n", pxakbd->pd->direct.keycode[i], pressed ); ++ input_report_key(pxakbd->input, pxakbd->pd->direct.keycode[i], ++ pressed); ++ } ++ } ++ return num_pressed; ++} ++ ++/* read the full 8x8 matrix from the PXA27x keypad controller */ ++static inline void __read_matrix(u_int8_t *matrix) ++{ ++ u_int32_t tmp; ++ u_int8_t row; ++ ++ /* Fill the matrix by rows */ ++ ++ tmp = KPASMKP0; ++ for (row=0; row<8; row++) { ++ /* zero the matrix on the first time, then keep ORing */ ++ matrix[row] = ((tmp >> row) & 1); ++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 1; ++ } ++ ++ tmp = KPASMKP1; ++ for (row=0; row<8; row++) { ++ matrix[row] |= ((tmp >> row) & 1) << 2; ++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 3; ++ } ++ ++ tmp = KPASMKP2; ++ for (row=0; row<8; row++) { ++ matrix[row] |= ((tmp >> row) & 1) << 4; ++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 5; ++ } ++ ++ tmp = KPASMKP3; ++ for (row=0; row<8; row++) { ++ matrix[row] |= ((tmp >> row) & 1) << 6; ++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 7; ++ } ++} ++ ++/* compare current matrix with last, generate 'diff' events */ ++static int __cmp_matrix_gen_events(struct pxakbd *pxakbd, u_int8_t *matrix) ++{ ++ unsigned int i; ++ int num_pressed = 0; ++ ++ /* iterate over the matrix */ ++ for (i = 0; i < pxakbd->pd->matrix.rows; i++) { ++ unsigned int j; ++ for (j = 0; j < pxakbd->pd->matrix.cols; j++) { ++ u_int32_t scancode = ++ (i * pxakbd->pd->matrix.cols) + j; ++ int pressed = matrix[i] & (1 << j); ++ ++ if (pressed) { ++ DEBUGP("pxakbd: pressed: %u/%u\n", i, j); ++ num_pressed++; ++ } ++ ++ input_report_key(pxakbd->input, ++ pxakbd->pd->matrix.keycode[scancode], pressed); ++ } ++ } ++ ++ return num_pressed; ++} ++ ++/* scan the matrix keypad */ ++static int pxakbd_scan_matrix(struct pxakbd *pxakbd) ++{ ++ int num_pressed; ++ u_int32_t kpas; ++ u_int8_t matrix[8]; ++ ++ kpas = KPAS; ++ ++ if ((kpas & KPAS_MUKP) == KPAS_MUKP_NONE) { ++ /* no keys pressed */ ++ memset(matrix, 0, sizeof(matrix)); ++ } else if ((kpas & KPAS_MUKP) == KPAS_MUKP_ONE) { ++ /* one key pressed */ ++ u_int8_t row = (kpas & KPAS_RP) >> 4; ++ u_int8_t col = kpas & KPAS_CP; ++ ++ if (row == 0x0f || col == 0x0f) { ++ printk(KERN_WARNING "pxakbd: col or row invalid!\n"); ++ return -1; ++ } ++ ++ /* clear the matrix and set the single pressed key */ ++ memset(matrix, 0, sizeof(matrix)); ++ matrix[row] |= (1 << col); ++ } else { ++ /* multiple keys pressed */ ++ __read_matrix(matrix); ++ } ++ ++ num_pressed = __cmp_matrix_gen_events(pxakbd, matrix); ++ ++ return num_pressed; ++} ++ ++static void pxakbd_timer_callback(unsigned long data) ++{ ++ unsigned long flags; ++ struct pxakbd *pxakbd = (struct pxakbd *) data; ++ unsigned int num_pressed; ++ ++ spin_lock_irqsave(&pxakbd->lock, flags); ++ ++ num_pressed = pxakbd_scan_direct(pxakbd); ++ num_pressed += pxakbd_scan_matrix(pxakbd); ++ ++ spin_unlock_irqrestore(&pxakbd->lock, flags); ++ ++ /* propagate events up the input stack */ ++ input_sync(pxakbd->input); ++} ++ ++static irqreturn_t pxakbd_interrupt(int irq, void *dummy) ++{ ++ struct pxakbd *pxakbd = dummy; ++ u_int32_t kpc; ++ int handled = 0; ++ int num_pressed = 0; ++ ++ /* read and clear interrupt */ ++ kpc = KPC; ++ ++ if (kpc & KPC_DI) { ++ num_pressed += pxakbd_scan_direct(pxakbd); ++ handled = 1; ++ } ++ ++ if (kpc & KPC_MI) { ++ while (KPAS & KPAS_SO) { ++ /* wait for scan to complete beforereading scan regs */ ++ cpu_relax(); ++ } ++ num_pressed += pxakbd_scan_matrix(pxakbd); ++ handled = 1; ++ } ++ ++ /* If any keys are currently pressed, we need to start the timer to detect ++ * key release. */ ++ if (num_pressed) ++ mod_timer(&pxakbd->timer, jiffies + pxakbd->pd->scan_interval); ++ ++ /* propagate events up the input stack */ ++ input_sync(pxakbd->input); ++ ++ return IRQ_RETVAL(handled); ++} ++ ++static int __init pxakbd_probe(struct platform_device *pdev) ++{ ++ struct pxakbd *pxakbd; ++ struct input_dev *input_dev; ++ struct resource *r; ++ int i; ++ int ret = -ENOMEM; ++ ++ int rows, cols, n_direct; ++ ++ if (!pdev->dev.platform_data) { ++ printk(KERN_ERR "pxakbd: platform data not set\n"); ++ ret = -ENODEV; ++ goto out; ++ } ++ ++ pxakbd = kzalloc(sizeof(*pxakbd), GFP_KERNEL); ++ if (!pxakbd) ++ goto out; ++ ++ input_dev = input_allocate_device(); ++ if (!input_dev) ++ goto out_pxa; ++ ++ spin_lock_init(&pxakbd->lock); ++ pxakbd->irq = platform_get_irq(pdev, 0); ++ r = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!r || pxakbd->irq == NO_IRQ) { ++ printk(KERN_ERR "pxakbd: invalid resources\n"); ++ ret = -EBUSY; ++ goto out_idev; ++ } ++ ++ pxakbd->input = input_dev; ++ init_timer(&pxakbd->timer); ++ pxakbd->timer.function = pxakbd_timer_callback; ++ pxakbd->timer.data = (unsigned long) pxakbd; ++ pxakbd->pd = pdev->dev.platform_data; ++ pxakbd->res = r; ++ ++ rows = pxakbd->pd->matrix.rows; ++ cols = pxakbd->pd->matrix.cols; ++ n_direct = pxakbd->pd->direct.num; ++ ++ input_dev->name = "pxa-keyboard"; ++ input_dev->phys = "pxakbd/input0"; ++ input_dev->id.bustype = BUS_HOST; ++ input_dev->id.vendor = 0x0001; ++ input_dev->id.product = 0x0001; ++ input_dev->id.version = 0x0001; ++ input_dev->cdev.dev = &pdev->dev; ++ input_dev->private = pxakbd; ++ ++ input_dev->evbit[0] = BIT(EV_KEY)|BIT(EV_REP); ++ ++ input_dev->keycodesize = sizeof(unsigned char); ++ input_dev->keycodemax = (rows*cols)+n_direct; ++ input_dev->keycode = kmalloc(input_dev->keycodemax*input_dev->keycodesize, ++ GFP_KERNEL); ++ if (!input_dev->keycode){ ++ ret = -ENOMEM; ++ goto out_idev; ++ } ++ ++ memcpy(input_dev->keycode, pxakbd->pd->matrix.keycode, rows*cols); ++ ++ memcpy(input_dev->keycode+(rows*cols), ++ pxakbd->pd->direct.keycode, ++ n_direct); ++ ++ for (i = 0; i < rows*cols; i++) ++ set_bit(pxakbd->pd->matrix.keycode[i], input_dev->keybit); ++ ++ for (i = 0; i < n_direct; i++) ++ set_bit(pxakbd->pd->direct.keycode[i], input_dev->keybit); ++ ++ clear_bit(0, input_dev->keybit); ++ ++ if (request_irq(pxakbd->irq, pxakbd_interrupt, 0, "pxakbd", pxakbd)) { ++ printk(KERN_ERR "pxakbd: can't request irq %d\n", pxakbd->irq); ++ ret = -EBUSY; ++ goto out_idev; ++ } ++ ++ r = request_mem_region(r->start, 0x4c, "pxakbd"); ++ if (!r) { ++ printk(KERN_ERR "pxakbd: can't request memregion\n"); ++ ret = -EBUSY; ++ goto out_irq; ++ } ++ ++ /* set up gpio */ ++ pxakbd->pd->init(); ++ ++ /* set keypad control register */ ++ KPC = (KPC_ASACT | /* automatic scan on activity */ ++ KPC_ME | KPC_DE | /* matrix and direct keypad enabled */ ++ ((pxakbd->pd->matrix.cols-1)<<23) | /* columns */ ++ ((pxakbd->pd->matrix.rows-1)<<26) | /* rows */ ++ ((pxakbd->pd->direct.num-1)<<6) | /* direct keys */ ++ KPC_MS_ALL); /* scan all columns */ ++ ++ pxa_set_cken(CKEN_KEYPAD, 1); ++ ++ KPC |= (KPC_DIE | KPC_MIE); /* enable matrix and direct keyboard */ ++ ++ KPKDI = 0x40; /* matrix key debounce interval: 0x40 */ ++ ++ platform_set_drvdata(pdev, pxakbd); ++ ++ return input_register_device(pxakbd->input); ++ ++out_drvdata: ++ platform_set_drvdata(pdev, NULL); ++out_mem: ++ release_resource(r); ++out_irq: ++ free_irq(pxakbd->irq, pxakbd); ++out_idev: ++ kfree(input_dev->keycode); ++ input_free_device(input_dev); ++out_pxa: ++ kfree(pxakbd); ++out: ++ return ret; ++} ++ ++static int pxakbd_remove(struct platform_device *pdev) ++{ ++ struct pxakbd *pxakbd = platform_get_drvdata(pdev); ++ ++ kfree(pxakbd->input->keycode); ++ input_unregister_device(pxakbd->input); ++ platform_set_drvdata(pdev, NULL); ++ release_resource(pxakbd->res); ++ free_irq(pxakbd->irq, pxakbd); ++ kfree(pxakbd); ++ ++ return 0; ++} ++ ++static int pxakbd_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ struct pxakbd *pxakbd = platform_get_drvdata(pdev); ++ ++ pxakbd->kpc = KPC; ++ pxakbd->kpkdi = KPKDI; ++ ++ return 0; ++} ++ ++static int pxakbd_resume(struct platform_device *pdev) ++{ ++ struct pxakbd *pxakbd = platform_get_drvdata(pdev); ++ ++ KPC = pxakbd->kpc; ++ KPKDI = pxakbd->kpkdi; ++ ++ return 0; ++} ++ ++static struct platform_driver pxakbd_driver = { ++ .probe = &pxakbd_probe, ++ .remove = &pxakbd_remove, ++ .suspend = &pxakbd_suspend, ++ .resume = &pxakbd_resume, ++ .driver = { ++ .name = "pxa-keyboard", ++ }, ++}; ++ ++static int __devinit pxakbd_init(void) ++{ ++ return platform_driver_register(&pxakbd_driver); ++} ++ ++static void __exit pxakbd_exit(void) ++{ ++ platform_driver_unregister(&pxakbd_driver); ++} ++ ++module_init(pxakbd_init); ++module_exit(pxakbd_exit); ++ ++MODULE_AUTHOR("Harald Welte "); ++MODULE_DESCRIPTION("Driver for Intel PXA27x keypad controller"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h ++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h +@@ -2271,6 +2271,11 @@ + #define KPMK_MKP (0x1 << 31) + #define KPAS_SO (0x1 << 31) + #define KPASMKPx_SO (0x1 << 31) ++#define KPAS_RP (0x000000f0) ++#define KPAS_CP (0x0000000f) ++#define KPAS_MUKP (0x7c000000) ++#define KPAS_MUKP_ONE (0x04000000) ++#define KPAS_MUKP_NONE (0x00000000) + + /* + * UHC: USB Host Controller (OHCI-like) register definitions +Index: linux-2.6.24/arch/arm/mach-pxa/pxa27x.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/pxa27x.c ++++ linux-2.6.24/arch/arm/mach-pxa/pxa27x.c +@@ -451,6 +451,7 @@ + &pxa_device_rtc, + &pxa27x_device_i2c_power, + &pxa27x_device_ohci, ++ &pxa_device_kbd, + }; + + static int __init pxa27x_init(void) +Index: linux-2.6.24/arch/arm/mach-pxa/devices.h +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/devices.h ++++ linux-2.6.24/arch/arm/mach-pxa/devices.h +@@ -9,6 +9,7 @@ + extern struct platform_device pxa_device_i2s; + extern struct platform_device pxa_device_ficp; + extern struct platform_device pxa_device_rtc; ++extern struct platform_device pxa_device_kbd; + + extern struct platform_device pxa27x_device_i2c_power; + extern struct platform_device pxa27x_device_ohci; diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch new file mode 100644 index 0000000000..4b9a9abeef --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch @@ -0,0 +1,45 @@ +This hack hardcodes pxa27x-udc to ether_gadget. This is just a temp workaround. +Index: linux-2.6.24/drivers/usb/gadget/ether.c +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/ether.c ++++ linux-2.6.24/drivers/usb/gadget/ether.c +@@ -2687,10 +2687,16 @@ + MODULE_LICENSE ("GPL"); + + +-static int __init init (void) ++// Alex add FIXME ++int usb_ether_init (void) + { + return usb_gadget_register_driver (ð_driver); + } ++ ++static int __init init (void) ++{ ++// return usb_gadget_register_driver (ð_driver); ++} + module_init (init); + + static void __exit cleanup (void) +Index: linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/pxa27x_udc.c ++++ linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c +@@ -65,6 +65,8 @@ + //#include + #include + ++extern int usb_ether_init(void); ++ + /* + * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x + * series processors. +@@ -2277,6 +2279,8 @@ + udc_init_ep(udc); + udc_reinit(udc); + ++ usb_ether_init(); // Alex add FIXME ++ + /* irq setup after old hardware state is cleaned up */ + retval = request_irq(irq, pxa27x_udc_irq, 0, driver_name, udc); + if (retval != 0) { diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch new file mode 100644 index 0000000000..5823e8023a --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch @@ -0,0 +1,3114 @@ +Index: linux-2.6.24/arch/arm/mach-pxa/generic.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/generic.c ++++ linux-2.6.24/arch/arm/mach-pxa/generic.c +@@ -290,7 +290,11 @@ + static u64 udc_dma_mask = ~(u32)0; + + struct platform_device pxa_device_udc = { ++#ifdef CONFIG_PXA27x ++ .name = "pxa27x-udc", ++#else + .name = "pxa2xx-udc", ++#endif + .id = -1, + .resource = pxa2xx_udc_resources, + .num_resources = ARRAY_SIZE(pxa2xx_udc_resources), +Index: linux-2.6.24/drivers/usb/gadget/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/Kconfig ++++ linux-2.6.24/drivers/usb/gadget/Kconfig +@@ -192,6 +192,24 @@ + default USB_GADGET + select USB_GADGET_SELECTED + ++config USB_GADGET_PXA27X ++ boolean "PXA 27x" ++ depends on ARCH_PXA && PXA27x ++ help ++ Intel's PXA 27x series XScale processors include an integrated ++ full speed USB 1.1 device controller. ++ ++ Say "y" to link the driver statically, or "m" to build a ++ dynamically linked module called "pxa2xx_udc" and force all ++ gadget drivers to also be dynamically linked. ++ ++ ++config USB_PXA27X ++ tristate ++ depends on USB_GADGET_PXA27X ++ default USB_GADGET ++ select USB_GADGET_SELECTED ++ + # if there's only one gadget driver, using only two bulk endpoints, + # don't waste memory for the other endpoints + config USB_PXA2XX_SMALL +Index: linux-2.6.24/drivers/usb/gadget/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/Makefile ++++ linux-2.6.24/drivers/usb/gadget/Makefile +@@ -9,6 +9,7 @@ + obj-$(CONFIG_USB_NET2280) += net2280.o + obj-$(CONFIG_USB_AMD5536UDC) += amd5536udc.o + obj-$(CONFIG_USB_PXA2XX) += pxa2xx_udc.o ++obj-$(CONFIG_USB_PXA27X) += pxa27x_udc.o + obj-$(CONFIG_USB_GOKU) += goku_udc.o + obj-$(CONFIG_USB_OMAP) += omap_udc.o + obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o +Index: linux-2.6.24/drivers/usb/gadget/epautoconf.c +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/epautoconf.c ++++ linux-2.6.24/drivers/usb/gadget/epautoconf.c +@@ -230,7 +230,8 @@ + */ + struct usb_ep * __devinit usb_ep_autoconfig ( + struct usb_gadget *gadget, +- struct usb_endpoint_descriptor *desc ++ struct usb_endpoint_descriptor *desc, ++ int config, int interface, int alt + ) + { + struct usb_ep *ep; +@@ -238,6 +239,11 @@ + + type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; + ++ /* If have ep_alloc() function use it! */ ++ if (gadget->ops->ep_alloc) ++ return gadget->ops->ep_alloc(gadget, desc, ++ config, interface, alt); ++ + /* First, apply chip-specific "best usage" knowledge. + * This might make a good usb_gadget_ops hook ... + */ +Index: linux-2.6.24/drivers/usb/gadget/ether.c +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/ether.c ++++ linux-2.6.24/drivers/usb/gadget/ether.c +@@ -235,10 +235,6 @@ + #define DEV_CONFIG_CDC + #endif + +-#ifdef CONFIG_USB_GADGET_PXA27X +-#define DEV_CONFIG_CDC +-#endif +- + #ifdef CONFIG_USB_GADGET_S3C2410 + #define DEV_CONFIG_CDC + #endif +@@ -270,6 +266,10 @@ + #define DEV_CONFIG_SUBSET + #endif + ++#ifdef CONFIG_USB_GADGET_PXA27X ++#define DEV_CONFIG_SUBSET ++#endif ++ + #ifdef CONFIG_USB_GADGET_SUPERH + #define DEV_CONFIG_SUBSET + #endif +@@ -1012,13 +1012,12 @@ + static int + set_ether_config (struct eth_dev *dev, gfp_t gfp_flags) + { +- int result = 0; +- struct usb_gadget *gadget = dev->gadget; ++ int result = 0; + + #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS) + /* status endpoint used for RNDIS and (optionally) CDC */ + if (!subset_active(dev) && dev->status_ep) { +- dev->status = ep_desc (gadget, &hs_status_desc, ++ dev->status = ep_desc (dev->gadget, &hs_status_desc, + &fs_status_desc); + dev->status_ep->driver_data = dev; + +@@ -1031,10 +1030,10 @@ + } + #endif + +- dev->in = ep_desc(gadget, &hs_source_desc, &fs_source_desc); ++ dev->in = ep_desc(dev->gadget, &hs_source_desc, &fs_source_desc); + dev->in_ep->driver_data = dev; + +- dev->out = ep_desc(gadget, &hs_sink_desc, &fs_sink_desc); ++ dev->out = ep_desc(dev->gadget, &hs_sink_desc, &fs_sink_desc); + dev->out_ep->driver_data = dev; + + /* With CDC, the host isn't allowed to use these two data +@@ -2298,6 +2297,9 @@ + * non-CDC to be compatible with ARM Linux-2.4 "usb-eth". + */ + cdc = 0; ++ } else if (gadget_is_pxa27x(gadget)) { ++ /* hardware can't write zlps */ ++ zlp = 0; + } + + gcnum = usb_gadget_controller_number (gadget); +@@ -2364,7 +2366,22 @@ + + /* all we really need is bulk IN/OUT */ + usb_ep_autoconfig_reset (gadget); +- in_ep = usb_ep_autoconfig (gadget, &fs_source_desc); ++#ifdef CONFIG_USB_ETH_RNDIS ++ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc, ++ DEV_RNDIS_CONFIG_VALUE, ++ (int)rndis_data_intf.bInterfaceNumber, ++ (int)rndis_data_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_CDC) ++ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc, ++ DEV_CONFIG_VALUE, ++ (int)data_intf.bInterfaceNumber, ++ (int)data_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_SUBSET) ++ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc, ++ DEV_CONFIG_VALUE, ++ (int)subset_data_intf.bInterfaceNumber, ++ (int)subset_data_intf.bAlternateSetting); ++#endif /* CONFIG_USB_ETH_RNDIS */ + if (!in_ep) { + autoconf_fail: + dev_err (&gadget->dev, +@@ -2374,7 +2391,23 @@ + } + in_ep->driver_data = in_ep; /* claim */ + +- out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc); ++#ifdef CONFIG_USB_ETH_RNDIS ++ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc, ++ DEV_RNDIS_CONFIG_VALUE, ++ (int)rndis_data_intf.bInterfaceNumber, ++ (int)rndis_data_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_CDC) ++ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc, ++ DEV_CONFIG_VALUE, ++ (int)data_intf.bInterfaceNumber, ++ (int)data_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_SUBSET) ++ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc, ++ DEV_CONFIG_VALUE, ++ (int)subset_data_intf.bInterfaceNumber, ++ (int)subset_data_intf.bAlternateSetting); ++#endif /* CONFIG_USB_ETH_RNDIS */ ++ + if (!out_ep) + goto autoconf_fail; + out_ep->driver_data = out_ep; /* claim */ +@@ -2384,7 +2417,18 @@ + * Since some hosts expect one, try to allocate one anyway. + */ + if (cdc || rndis) { +- status_ep = usb_ep_autoconfig (gadget, &fs_status_desc); ++#ifdef CONFIG_USB_ETH_RNDIS ++ status_ep = usb_ep_autoconfig (gadget, &fs_status_desc, ++ DEV_RNDIS_CONFIG_VALUE, ++ (int)rndis_control_intf.bInterfaceNumber, ++ (int)rndis_control_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_CDC) ++ status_ep = usb_ep_autoconfig (gadget, &fs_status_desc, ++ DEV_CONFIG_VALUE, ++ (int)control_intf.bInterfaceNumber, ++ (int)control_intf.bAlternateSetting); ++#endif /* CONFIG_USB_ETH_RNDIS */ ++ + if (status_ep) { + status_ep->driver_data = status_ep; /* claim */ + } else if (rndis) { +@@ -2392,13 +2436,14 @@ + "can't run RNDIS on %s\n", + gadget->name); + return -ENODEV; ++ } + #ifdef DEV_CONFIG_CDC +- /* pxa25x only does CDC subset; often used with RNDIS */ +- } else if (cdc) { ++ /* pxa25x only does CDC subset; often used with RNDIS */ ++ else if (cdc) { + control_intf.bNumEndpoints = 0; + /* FIXME remove endpoint from descriptor list */ +-#endif + } ++#endif + } + #endif + +Index: linux-2.6.24/drivers/usb/gadget/file_storage.c +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/file_storage.c ++++ linux-2.6.24/drivers/usb/gadget/file_storage.c +@@ -3877,20 +3877,20 @@ + + /* Find all the endpoints we will use */ + usb_ep_autoconfig_reset(gadget); +- ep = usb_ep_autoconfig(gadget, &fs_bulk_in_desc); ++ ep = usb_ep_autoconfig(gadget, &fs_bulk_in_desc, 0, 0, 0); + if (!ep) + goto autoconf_fail; + ep->driver_data = fsg; // claim the endpoint + fsg->bulk_in = ep; + +- ep = usb_ep_autoconfig(gadget, &fs_bulk_out_desc); ++ ep = usb_ep_autoconfig(gadget, &fs_bulk_out_desc, 0, 0, 0); + if (!ep) + goto autoconf_fail; + ep->driver_data = fsg; // claim the endpoint + fsg->bulk_out = ep; + + if (transport_is_cbi()) { +- ep = usb_ep_autoconfig(gadget, &fs_intr_in_desc); ++ ep = usb_ep_autoconfig(gadget, &fs_intr_in_desc, 0, 0, 0); + if (!ep) + goto autoconf_fail; + ep->driver_data = fsg; // claim the endpoint +Index: linux-2.6.24/drivers/usb/gadget/gmidi.c +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/gmidi.c ++++ linux-2.6.24/drivers/usb/gadget/gmidi.c +@@ -1188,7 +1188,7 @@ + * but there may also be important quirks to address. + */ + usb_ep_autoconfig_reset(gadget); +- in_ep = usb_ep_autoconfig(gadget, &bulk_in_desc); ++ in_ep = usb_ep_autoconfig(gadget, &bulk_in_desc, 0, 0, 0); + if (!in_ep) { + autoconf_fail: + printk(KERN_ERR "%s: can't autoconfigure on %s\n", +@@ -1198,7 +1198,7 @@ + EP_IN_NAME = in_ep->name; + in_ep->driver_data = in_ep; /* claim */ + +- out_ep = usb_ep_autoconfig(gadget, &bulk_out_desc); ++ out_ep = usb_ep_autoconfig(gadget, &bulk_out_desc, 0, 0, 0); + if (!out_ep) { + goto autoconf_fail; + } +Index: linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c +@@ -0,0 +1,2410 @@ ++/* ++ * linux/drivers/usb/gadget/pxa27x_udc.c ++ * Intel PXA2xx and IXP4xx on-chip full speed USB device controllers ++ * ++ * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker) ++ * Copyright (C) 2003 Robert Schwebel, Pengutronix ++ * Copyright (C) 2003 Benedikt Spranger, Pengutronix ++ * Copyright (C) 2003 David Brownell ++ * Copyright (C) 2003 Joshua Wise ++ * Copyright (C) 2004 Intel Corporation ++ * Copyright (C) 2007 Rodolfo Giometti ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ */ ++ ++#undef DEBUG ++/* #define VERBOSE DBG_VERBOSE */ ++ ++#include ++#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 ++#include ++//#include ++ ++#include ++#include ++ ++//#include ++#include ++ ++/* ++ * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x ++ * series processors. ++ * Such controller drivers work with a gadget driver. The gadget driver ++ * returns descriptors, implements configuration and data protocols used ++ * by the host to interact with this device, and allocates endpoints to ++ * the different protocol interfaces. The controller driver virtualizes ++ * usb hardware so that the gadget drivers will be more portable. ++ * ++ * This UDC hardware wants to implement a bit too much USB protocol, so ++ * it constrains the sorts of USB configuration change events that work. ++ * The errata for these chips are misleading; some "fixed" bugs from ++ * pxa250 a0/a1 b0/b1/b2 sure act like they're still there. ++ */ ++ ++#define DRIVER_VERSION "28-Jun-2007" ++#define DRIVER_DESC "PXA 27x USB Device Controller driver" ++ ++static const char driver_name[] = "pxa27x_udc"; ++ ++static const char ep0name[] = "ep0"; ++ ++#undef USE_DMA ++#undef DISABLE_TEST_MODE ++ ++#ifdef CONFIG_PROC_FS ++#define UDC_PROC_FILE ++#endif ++ ++#include "pxa27x_udc.h" ++ ++#ifdef CONFIG_EMBEDDED ++/* few strings, and little code to use them */ ++#undef DEBUG ++#undef UDC_PROC_FILE ++#endif ++ ++#ifdef USE_DMA ++static int use_dma = 1; ++module_param(use_dma, bool, 0); ++MODULE_PARM_DESC(use_dma, "true to use dma"); ++ ++static void dma_nodesc_handler(int dmach, void *_ep); ++static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req); ++ ++#define DMASTR " (dma support)" ++ ++#else /* !USE_DMA */ ++#define DMASTR " (pio only)" ++#endif ++ ++#ifdef CONFIG_USB_PXA27X_SMALL ++#define SIZE_STR " (small)" ++#else ++#define SIZE_STR "" ++#endif ++ ++#ifdef DISABLE_TEST_MODE ++/* (mode == 0) == no undocumented chip tweaks ++ * (mode & 1) == double buffer bulk IN ++ * (mode & 2) == double buffer bulk OUT ++ * ... so mode = 3 (or 7, 15, etc) does it for both ++ */ ++static ushort fifo_mode = 0; ++module_param(fifo_mode, ushort, 0); ++MODULE_PARM_DESC(fifo_mode, "pxa27x udc fifo mode"); ++#endif ++ ++#define UDCISR0_IR0 0x3 ++#define UDCISR_INT_MASK (UDC_INT_FIFOERROR | UDC_INT_PACKETCMP) ++#define UDCICR_INT_MASK UDCISR_INT_MASK ++ ++#define UDCCSR_MASK (UDCCSR_FST | UDCCSR_DME) ++/* --------------------------------------------------------------------------- ++ * endpoint related parts of the api to the usb controller hardware, ++ * used by gadget driver; and the inner talker-to-hardware core. ++ * --------------------------------------------------------------------------- ++ */ ++ ++static void pxa27x_ep_fifo_flush(struct usb_ep *ep); ++static void nuke(struct pxa27x_ep *, int status); ++ ++/* one GPIO should control a D+ pullup, so host sees this device (or not) */ ++static void pullup_off(void) ++{ ++ struct pxa2xx_udc_mach_info *mach = the_controller->mach; ++ ++ if (mach->gpio_pullup) ++ gpio_set_value(mach->gpio_pullup, 0); ++ else if (mach->udc_command) ++ mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT); ++} ++ ++static void pullup_on(void) ++{ ++ struct pxa2xx_udc_mach_info *mach = the_controller->mach; ++ ++ if (mach->gpio_pullup) ++ gpio_set_value(mach->gpio_pullup, 1); ++ else if (mach->udc_command) ++ mach->udc_command(PXA2XX_UDC_CMD_CONNECT); ++} ++ ++static void pio_irq_enable(int ep_num) ++{ ++ if (ep_num < 16) ++ UDCICR0 |= 3 << (ep_num * 2); ++ else { ++ ep_num -= 16; ++ UDCICR1 |= 3 << (ep_num * 2); ++ } ++} ++ ++static void pio_irq_disable(int ep_num) ++{ ++ ep_num &= 0xf; ++ if (ep_num < 16) ++ UDCICR0 &= ~(3 << (ep_num * 2)); ++ else { ++ ep_num -= 16; ++ UDCICR1 &= ~(3 << (ep_num * 2)); ++ } ++} ++ ++/* The UDCCR reg contains mask and interrupt status bits, ++ * so using '|=' isn't safe as it may ack an interrupt. ++ */ ++#define UDCCR_MASK_BITS (UDCCR_OEN | UDCCR_UDE) ++ ++static inline void udc_set_mask_UDCCR(int mask) ++{ ++ UDCCR = (UDCCR & UDCCR_MASK_BITS) | (mask & UDCCR_MASK_BITS); ++} ++ ++static inline void udc_clear_mask_UDCCR(int mask) ++{ ++ UDCCR = (UDCCR & UDCCR_MASK_BITS) & ~(mask & UDCCR_MASK_BITS); ++} ++ ++static inline void udc_ack_int_UDCCR(int mask) ++{ ++ /* udccr contains the bits we dont want to change */ ++ __u32 udccr = UDCCR & UDCCR_MASK_BITS; ++ ++ UDCCR = udccr | (mask & ~UDCCR_MASK_BITS); ++} ++ ++/* ++ * endpoint enable/disable ++ * ++ * we need to verify the descriptors used to enable endpoints. since pxa27x ++ * endpoint configurations are fixed, and are pretty much always enabled, ++ * there's not a lot to manage here. ++ * ++ * because pxa27x can't selectively initialize bulk (or interrupt) endpoints, ++ * (resetting endpoint halt and toggle), SET_INTERFACE is unusable except ++ * for a single interface (with only the default altsetting) and for gadget ++ * drivers that don't halt endpoints (not reset by set_interface). that also ++ * means that if you use ISO, you must violate the USB spec rule that all ++ * iso endpoints must be in non-default altsettings. ++ */ ++static int pxa27x_ep_enable(struct usb_ep *_ep, ++ const struct usb_endpoint_descriptor *desc) ++{ ++ struct pxa27x_ep *ep; ++ struct pxa27x_udc *dev; ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (!_ep || !desc || _ep->name == ep0name ++ || desc->bDescriptorType != USB_DT_ENDPOINT ++ || ep->fifo_size < le16_to_cpu(desc->wMaxPacketSize)) { ++ DMSG("%s, bad ep or descriptor\n", __FUNCTION__); ++ return -EINVAL; ++ } ++ ++ /* xfer types must match, except that interrupt ~= bulk */ ++ if (ep->ep_type != USB_ENDPOINT_XFER_BULK ++ && desc->bmAttributes != USB_ENDPOINT_XFER_INT) { ++ DMSG("%s, %s type mismatch\n", __FUNCTION__, _ep->name); ++ return -EINVAL; ++ } ++ ++ /* hardware _could_ do smaller, but driver doesn't */ ++ if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK ++ && le16_to_cpu(desc->wMaxPacketSize) ++ != BULK_FIFO_SIZE) ++ || !desc->wMaxPacketSize) { ++ DMSG("%s, bad %s maxpacket\n", __FUNCTION__, _ep->name); ++ return -ERANGE; ++ } ++ ++ dev = ep->dev; ++ if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) { ++ DMSG("%s, bogus device state\n", __FUNCTION__); ++ return -ESHUTDOWN; ++ } ++ ++ ep->desc = desc; ++ ep->dma = -1; ++ ep->stopped = 0; ++ ep->pio_irqs = ep->dma_irqs = 0; ++ ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize); ++ ++ /* flush fifo (mostly for OUT buffers) */ ++ pxa27x_ep_fifo_flush(_ep); ++ ++ /* ... reset halt state too, if we could ... */ ++ ++#ifdef USE_DMA ++ /* for (some) bulk and ISO endpoints, try to get a DMA channel and ++ * bind it to the endpoint. otherwise use PIO. ++ */ ++ DMSG("%s: called attributes=%d\n", __FUNCTION__, ep->ep_type); ++ switch (ep->ep_type) { ++ case USB_ENDPOINT_XFER_ISOC: ++ if (le16_to_cpu(desc->wMaxPacketSize) % 32) ++ break; ++ /* fall through */ ++ case USB_ENDPOINT_XFER_BULK: ++ if (!use_dma || !ep->reg_drcmr) ++ break; ++ ep->dma = pxa_request_dma((char *)_ep->name, ++ (le16_to_cpu(desc->wMaxPacketSize) > 64) ++ ? DMA_PRIO_MEDIUM /* some iso */ ++ : DMA_PRIO_LOW, ++ dma_nodesc_handler, ep); ++ if (ep->dma >= 0) { ++ *ep->reg_drcmr = DRCMR_MAPVLD | ep->dma; ++ DMSG("%s using dma%d\n", _ep->name, ep->dma); ++ } ++ default: ++ break; ++ } ++#endif ++ DBG(DBG_VERBOSE, "enabled %s\n", _ep->name); ++ return 0; ++} ++ ++static int pxa27x_ep_disable(struct usb_ep *_ep) ++{ ++ struct pxa27x_ep *ep; ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (!_ep || !ep->desc) { ++ DMSG("%s, %s not enabled\n", __FUNCTION__, ++ _ep ? ep->ep.name : NULL); ++ return -EINVAL; ++ } ++ nuke(ep, -ESHUTDOWN); ++ ++#ifdef USE_DMA ++ if (ep->dma >= 0) { ++ *ep->reg_drcmr = 0; ++ pxa_free_dma(ep->dma); ++ ep->dma = -1; ++ } ++#endif ++ ++ /* flush fifo (mostly for IN buffers) */ ++ pxa27x_ep_fifo_flush(_ep); ++ ++ ep->desc = 0; ++ ep->stopped = 1; ++ ++ DBG(DBG_VERBOSE, "%s disabled\n", _ep->name); ++ return 0; ++} ++ ++/*-------------------------------------------------------------------------*/ ++ ++/* for the pxa27x, these can just wrap kmalloc/kfree. gadget drivers ++ * must still pass correctly initialized endpoints, since other controller ++ * drivers may care about how it's currently set up (dma issues etc). ++ */ ++ ++/* ++ * pxa27x_ep_alloc_request - allocate a request data structure ++ */ ++static struct usb_request *pxa27x_ep_alloc_request(struct usb_ep *_ep, ++ unsigned int gfp_flags) ++{ ++ struct pxa27x_request *req; ++ ++ req = kmalloc(sizeof *req, gfp_flags); ++ if (!req) ++ return 0; ++ ++ memset(req, 0, sizeof *req); ++ INIT_LIST_HEAD(&req->queue); ++ return &req->req; ++} ++ ++/* ++ * pxa27x_ep_free_request - deallocate a request data structure ++ */ ++static void pxa27x_ep_free_request(struct usb_ep *_ep, struct usb_request *_req) ++{ ++ struct pxa27x_request *req; ++ ++ req = container_of(_req, struct pxa27x_request, req); ++ WARN_ON(!list_empty(&req->queue)); ++ kfree(req); ++} ++ ++/* PXA cache needs flushing with DMA I/O (it's dma-incoherent), but there's ++ * no device-affinity and the heap works perfectly well for i/o buffers. ++ * It wastes much less memory than dma_alloc_coherent() would, and even ++ * prevents cacheline (32 bytes wide) sharing problems. ++ */ ++static void *pxa27x_ep_alloc_buffer(struct usb_ep *_ep, unsigned bytes, ++ dma_addr_t * dma, unsigned int gfp_flags) ++{ ++ char *retval; ++ ++ retval = kmalloc(bytes, gfp_flags & ~(__GFP_DMA | __GFP_HIGHMEM)); ++ if (retval) ++#ifdef USE_DMA ++ *dma = virt_to_bus(retval); ++#else ++ *dma = (dma_addr_t) ~0; ++#endif ++ return retval; ++} ++ ++static void ++pxa27x_ep_free_buffer(struct usb_ep *_ep, void *buf, dma_addr_t dma, ++ unsigned bytes) ++{ ++ kfree(buf); ++} ++ ++/*-------------------------------------------------------------------------*/ ++ ++/* ++ * done - retire a request; caller blocked irqs ++ */ ++static void done(struct pxa27x_ep *ep, struct pxa27x_request *req, int status) ++{ ++ list_del_init(&req->queue); ++ if (likely(req->req.status == -EINPROGRESS)) ++ req->req.status = status; ++ else ++ status = req->req.status; ++ ++ if (status && status != -ESHUTDOWN) ++ DBG(DBG_VERBOSE, "complete %s req %p stat %d len %u/%u\n", ++ ep->ep.name, &req->req, status, ++ req->req.actual, req->req.length); ++ ++ /* don't modify queue heads during completion callback */ ++ req->req.complete(&ep->ep, &req->req); ++} ++ ++static inline void ep0_idle(struct pxa27x_udc *dev) ++{ ++ dev->ep0state = EP0_IDLE; ++ LED_EP0_OFF; ++} ++ ++static int ++write_packet(volatile u32 * uddr, struct pxa27x_request *req, unsigned max) ++{ ++ u32 *buf; ++ int length, count, remain; ++ ++ buf = (u32 *) (req->req.buf + req->req.actual); ++ prefetch(buf); ++ ++ /* how big will this packet be? */ ++ length = min(req->req.length - req->req.actual, max); ++ req->req.actual += length; ++ ++ remain = length & 0x3; ++ count = length & ~(0x3); ++ ++ while (likely(count)) { ++ *uddr = *buf++; ++ count -= 4; ++ } ++ ++ if (remain) { ++ volatile u8 *reg = (u8 *) uddr; ++ char *rd = (u8 *) buf; ++ ++ while (remain--) { ++ *reg = *rd++; ++ } ++ } ++ ++ return length; ++} ++ ++/* ++ * write to an IN endpoint fifo, as many packets as possible. ++ * irqs will use this to write the rest later. ++ * caller guarantees at least one packet buffer is ready (or a zlp). ++ */ ++static int write_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ unsigned max; ++ ++ max = le16_to_cpu(ep->desc->wMaxPacketSize); ++ do { ++ int count; ++ int is_last, is_short; ++ ++ count = write_packet(ep->reg_udcdr, req, max); ++ ++ /* last packet is usually short (or a zlp) */ ++ if (unlikely(count != max)) ++ is_last = is_short = 1; ++ else { ++ if (likely(req->req.length != req->req.actual) ++ || req->req.zero) ++ is_last = 0; ++ else ++ is_last = 1; ++ /* interrupt/iso maxpacket may not fill the fifo */ ++ is_short = unlikely(max < ep->fifo_size); ++ } ++ ++ DMSG("wrote %s count:%d bytes%s%s %d left %p\n", ++ ep->ep.name, count, ++ is_last ? "/L" : "", is_short ? "/S" : "", ++ req->req.length - req->req.actual, &req->req); ++ ++ /* let loose that packet. maybe try writing another one, ++ * double buffering might work. TSP, TPC, and TFS ++ * bit values are the same for all normal IN endpoints. ++ */ ++ *ep->reg_udccsr = UDCCSR_PC; ++ if (is_short) ++ *ep->reg_udccsr = UDCCSR_SP; ++ ++ /* requests complete when all IN data is in the FIFO */ ++ if (is_last) { ++ done(ep, req, 0); ++ if (list_empty(&ep->queue) || unlikely(ep->dma >= 0)) { ++ pio_irq_disable(ep->ep_num); ++#ifdef USE_DMA ++ /* unaligned data and zlps couldn't use dma */ ++ if (unlikely(!list_empty(&ep->queue))) { ++ req = list_entry(ep->queue.next, ++ struct pxa27x_request, ++ queue); ++ kick_dma(ep, req); ++ return 0; ++ } ++#endif ++ } ++ return 1; ++ } ++ /* TODO experiment: how robust can fifo mode tweaking be? ++ * double buffering is off in the default fifo mode, which ++ * prevents TFS from being set here. ++ */ ++ ++ } while (*ep->reg_udccsr & UDCCSR_FS); ++ return 0; ++} ++ ++/* caller asserts req->pending (ep0 irq status nyet cleared); starts ++ * ep0 data stage. these chips want very simple state transitions. ++ */ ++static inline void ep0start(struct pxa27x_udc *dev, u32 flags, const char *tag) ++{ ++ UDCCSR0 = flags | UDCCSR0_SA | UDCCSR0_OPC; ++ UDCISR0 = UDCICR_INT(0, UDC_INT_FIFOERROR | UDC_INT_PACKETCMP); ++ dev->req_pending = 0; ++ DBG(DBG_VERY_NOISY, "%s %s, %02x/%02x\n", ++ __FUNCTION__, tag, UDCCSR0, flags); ++} ++ ++static int write_ep0_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ unsigned count; ++ int is_short; ++ ++ count = write_packet(&UDCDR0, req, EP0_FIFO_SIZE); ++ ep->dev->stats.write.bytes += count; ++ ++ /* last packet "must be" short (or a zlp) */ ++ is_short = (count != EP0_FIFO_SIZE); ++ ++ DBG(DBG_VERY_NOISY, "ep0in %d bytes %d left %p\n", count, ++ req->req.length - req->req.actual, &req->req); ++ ++ if (unlikely(is_short)) { ++ if (ep->dev->req_pending) ++ ep0start(ep->dev, UDCCSR0_IPR, "short IN"); ++ else ++ UDCCSR0 = UDCCSR0_IPR; ++ ++ count = req->req.length; ++ done(ep, req, 0); ++ ep0_idle(ep->dev); ++#if 0 ++ /* This seems to get rid of lost status irqs in some cases: ++ * host responds quickly, or next request involves config ++ * change automagic, or should have been hidden, or ... ++ * ++ * FIXME get rid of all udelays possible... ++ */ ++ if (count >= EP0_FIFO_SIZE) { ++ count = 100; ++ do { ++ if ((UDCCSR0 & UDCCSR0_OPC) != 0) { ++ /* clear OPC, generate ack */ ++ UDCCSR0 = UDCCSR0_OPC; ++ break; ++ } ++ count--; ++ udelay(1); ++ } while (count); ++ } ++#endif ++ } else if (ep->dev->req_pending) ++ ep0start(ep->dev, 0, "IN"); ++ return is_short; ++} ++ ++/* ++ * read_fifo - unload packet(s) from the fifo we use for usb OUT ++ * transfers and put them into the request. caller should have made ++ * sure there's at least one packet ready. ++ * ++ * returns true if the request completed because of short packet or the ++ * request buffer having filled (and maybe overran till end-of-packet). ++ */ ++static int read_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ for (;;) { ++ u32 *buf; ++ int bufferspace, count, is_short; ++ ++ /* make sure there's a packet in the FIFO. */ ++ if (unlikely((*ep->reg_udccsr & UDCCSR_PC) == 0)) ++ break; ++ buf = (u32 *) (req->req.buf + req->req.actual); ++ prefetchw(buf); ++ bufferspace = req->req.length - req->req.actual; ++ ++ /* read all bytes from this packet */ ++ if (likely(*ep->reg_udccsr & UDCCSR_BNE)) { ++ count = 0x3ff & *ep->reg_udcbcr; ++ req->req.actual += min(count, bufferspace); ++ } else /* zlp */ ++ count = 0; ++ ++ is_short = (count < ep->ep.maxpacket); ++ DMSG("read %s udccsr:%02x, count:%d bytes%s req %p %d/%d\n", ++ ep->ep.name, *ep->reg_udccsr, count, ++ is_short ? "/S" : "", ++ &req->req, req->req.actual, req->req.length); ++ ++#if 0 ++ dump_regs(ep->ep_num ); ++#endif ++ count = min(count, bufferspace); ++ while (likely(count > 0)) { ++ *buf++ = *ep->reg_udcdr; ++ count -= 4; ++ } ++ DMSG("Buf:0x%p\n", req->req.buf); ++ ++ *ep->reg_udccsr = UDCCSR_PC; ++ /* RPC/RSP/RNE could now reflect the other packet buffer */ ++ ++ /* completion */ ++ if (is_short || req->req.actual == req->req.length) { ++ done(ep, req, 0); ++ if (list_empty(&ep->queue)) ++ pio_irq_disable(ep->ep_num); ++ return 1; ++ } ++ ++ /* finished that packet. the next one may be waiting... */ ++ } ++ return 0; ++} ++ ++/* ++ * special ep0 version of the above. no UBCR0 or double buffering; status ++ * handshaking is magic. most device protocols don't need control-OUT. ++ * CDC vendor commands (and RNDIS), mass storage CB/CBI, and some other ++ * protocols do use them. ++ */ ++static int read_ep0_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ u32 *buf, word; ++ unsigned bufferspace; ++ ++ buf = (u32 *) (req->req.buf + req->req.actual); ++ bufferspace = req->req.length - req->req.actual; ++ ++ while (UDCCSR0 & UDCCSR0_RNE) { ++ word = UDCDR0; ++ ++ if (unlikely(bufferspace == 0)) { ++ /* this happens when the driver's buffer ++ * is smaller than what the host sent. ++ * discard the extra data. ++ */ ++ if (req->req.status != -EOVERFLOW) ++ DMSG("%s overflow\n", ep->ep.name); ++ req->req.status = -EOVERFLOW; ++ } else { ++ *buf++ = word; ++ req->req.actual += 4; ++ bufferspace -= 4; ++ } ++ } ++ ++ UDCCSR0 = UDCCSR0_OPC; ++ ++ /* completion */ ++ if (req->req.actual >= req->req.length) ++ return 1; ++ ++ /* finished that packet. the next one may be waiting... */ ++ return 0; ++} ++ ++#ifdef USE_DMA ++ ++#define MAX_IN_DMA ((DCMD_LENGTH + 1) - BULK_FIFO_SIZE) ++static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ u32 dcmd = 0; ++ u32 len = req->req.length; ++ u32 buf = req->req.dma; ++ u32 fifo = io_v2p((u32) ep->reg_udcdr); ++ ++ buf += req->req.actual; ++ len -= req->req.actual; ++ ep->dma_con = 0; ++ ++ DMSG("%s: req:0x%p length:%d, actual:%d dma:%d\n", ++ __FUNCTION__, &req->req, req->req.length, ++ req->req.actual, ep->dma); ++ ++ /* no-descriptor mode can be simple for bulk-in, iso-in, iso-out */ ++ DCSR(ep->dma) = DCSR_NODESC; ++ if (buf & 0x3) ++ DALGN |= 1 << ep->dma; ++ else ++ DALGN &= ~(1 << ep->dma); ++ ++ if (ep->dir_in) { ++ DSADR(ep->dma) = buf; ++ DTADR(ep->dma) = fifo; ++ if (len > MAX_IN_DMA) { ++ len = MAX_IN_DMA; ++ ep->dma_con = 1; ++ } else if (len >= ep->ep.maxpacket) { ++ if ((ep->dma_con = (len % ep->ep.maxpacket) != 0)) ++ len = ep->ep.maxpacket; ++ } ++ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN ++ | DCMD_FLOWTRG | DCMD_INCSRCADDR; ++ } else { ++ DSADR(ep->dma) = fifo; ++ DTADR(ep->dma) = buf; ++ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN ++ | DCMD_FLOWSRC | DCMD_INCTRGADDR; ++ } ++ *ep->reg_udccsr = UDCCSR_DME; ++ DCMD(ep->dma) = dcmd; ++ DCSR(ep->dma) = DCSR_NODESC | DCSR_EORIRQEN ++ | ((ep->dir_in) ? DCSR_STOPIRQEN : 0); ++ *ep->reg_drcmr = ep->dma | DRCMR_MAPVLD; ++ DCSR(ep->dma) |= DCSR_RUN; ++} ++ ++static void cancel_dma(struct pxa27x_ep *ep) ++{ ++ struct pxa27x_request *req; ++ u32 tmp; ++ ++ if (DCSR(ep->dma) == 0 || list_empty(&ep->queue)) ++ return; ++ ++ DMSG("hehe dma:%d,dcsr:0x%x\n", ep->dma, DCSR(ep->dma)); ++ DCSR(ep->dma) = 0; ++ while ((DCSR(ep->dma) & DCSR_STOPSTATE) == 0) ++ cpu_relax(); ++ ++ req = list_entry(ep->queue.next, struct pxa27x_request, queue); ++ tmp = DCMD(ep->dma) & DCMD_LENGTH; ++ req->req.actual = req->req.length - tmp; ++ ++ /* the last tx packet may be incomplete, so flush the fifo. ++ * FIXME correct req.actual if we can ++ */ ++ *ep->reg_udccsr = UDCCSR_FEF; ++} ++ ++static void dma_nodesc_handler(int dmach, void *_ep, struct pt_regs *r) ++{ ++ struct pxa27x_ep *ep = _ep; ++ struct pxa27x_request *req, *req_next; ++ u32 dcsr, tmp, completed; ++ ++ local_irq_disable(); ++ ++ req = list_entry(ep->queue.next, struct pxa27x_request, queue); ++ ++ DMSG("%s, buf:0x%p\n", __FUNCTION__, req->req.buf); ++ ++ ep->dma_irqs++; ++ ep->dev->stats.irqs++; ++ HEX_DISPLAY(ep->dev->stats.irqs); ++ ++ completed = 0; ++ ++ dcsr = DCSR(dmach); ++ DCSR(ep->dma) &= ~DCSR_RUN; ++ ++ if (dcsr & DCSR_BUSERR) { ++ DCSR(dmach) = DCSR_BUSERR; ++ printk(KERN_ERR " Buss Error\n"); ++ req->req.status = -EIO; ++ completed = 1; ++ } else if (dcsr & DCSR_ENDINTR) { ++ DCSR(dmach) = DCSR_ENDINTR; ++ if (ep->dir_in) { ++ tmp = req->req.length - req->req.actual; ++ /* Last packet is a short one */ ++ if (tmp < ep->ep.maxpacket) { ++ int count = 0; ++ ++ *ep->reg_udccsr = UDCCSR_SP | ++ (*ep->reg_udccsr & UDCCSR_MASK); ++ /*Wait for packet out */ ++ while ((count++ < 10000) && ++ !(*ep->reg_udccsr & UDCCSR_FS)) ; ++ if (count >= 10000) ++ DMSG("Failed to send packet\n"); ++ else ++ DMSG("%s: short packet sent len:%d," ++ "length:%d,actual:%d\n", ++ __FUNCTION__, tmp, req->req.length, ++ req->req.actual); ++ req->req.actual = req->req.length; ++ completed = 1; ++ /* There are still packets to transfer */ ++ } else if (ep->dma_con) { ++ DMSG("%s: more packets,length:%d,actual:%d\n", ++ __FUNCTION__, req->req.length, ++ req->req.actual); ++ req->req.actual += ep->ep.maxpacket; ++ completed = 0; ++ } else { ++ DMSG("%s: no more packets,length:%d," ++ "actual:%d\n", __FUNCTION__, ++ req->req.length, req->req.actual); ++ req->req.actual = req->req.length; ++ completed = 1; ++ } ++ } else { ++ req->req.actual = req->req.length; ++ completed = 1; ++ } ++ } else if (dcsr & DCSR_EORINTR) { /* Only happened in OUT DMA */ ++ int remain, udccsr; ++ ++ DCSR(dmach) = DCSR_EORINTR; ++ remain = DCMD(dmach) & DCMD_LENGTH; ++ req->req.actual = req->req.length - remain; ++ ++ udccsr = *ep->reg_udccsr; ++ if (udccsr & UDCCSR_SP) { ++ *ep->reg_udccsr = UDCCSR_PC | (udccsr & UDCCSR_MASK); ++ completed = 1; ++ } ++ DMSG("%s: length:%d actual:%d\n", ++ __FUNCTION__, req->req.length, req->req.actual); ++ } else ++ DMSG("%s: Others dma:%d DCSR:0x%x DCMD:0x%x\n", ++ __FUNCTION__, dmach, DCSR(dmach), DCMD(dmach)); ++ ++ if (likely(completed)) { ++ if (req->queue.next != &ep->queue) { ++ req_next = list_entry(req->queue.next, ++ struct pxa27x_request, queue); ++ kick_dma(ep, req_next); ++ } ++ done(ep, req, 0); ++ } else { ++ kick_dma(ep, req); ++ } ++ ++ local_irq_enable(); ++} ++ ++#endif ++/*-------------------------------------------------------------------------*/ ++ ++static int ++pxa27x_ep_queue(struct usb_ep *_ep, struct usb_request *_req, ++ unsigned int gfp_flags) ++{ ++ struct pxa27x_ep *ep; ++ struct pxa27x_request *req; ++ struct pxa27x_udc *dev; ++ unsigned long flags; ++ ++ req = container_of(_req, struct pxa27x_request, req); ++ if (unlikely(!_req || !_req->complete || !_req->buf || ++ !list_empty(&req->queue))) { ++ DMSG("%s, bad params\n", __FUNCTION__); ++ return -EINVAL; ++ } ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name))) { ++ DMSG("%s, bad ep\n", __FUNCTION__); ++ return -EINVAL; ++ } ++ ++ DMSG("%s, ep point %d is queue\n", __FUNCTION__, ep->ep_num); ++ ++ dev = ep->dev; ++ if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)) { ++ DMSG("%s, bogus device state\n", __FUNCTION__); ++ return -ESHUTDOWN; ++ } ++ ++ /* iso is always one packet per request, that's the only way ++ * we can report per-packet status. that also helps with dma. ++ */ ++ if (unlikely(ep->ep_type == USB_ENDPOINT_XFER_ISOC ++ && req->req.length > le16_to_cpu ++ (ep->desc->wMaxPacketSize))) ++ return -EMSGSIZE; ++ ++#ifdef USE_DMA ++ /* FIXME: caller may already have done the dma mapping */ ++ if (ep->dma >= 0) { ++ _req->dma = dma_map_single(dev->dev, _req->buf, _req->length, ++ (ep-> ++ dir_in) ? DMA_TO_DEVICE : ++ DMA_FROM_DEVICE); ++ } ++#endif ++ ++ DBG(DBG_NOISY, "%s queue req %p, len %d buf %p\n", ++ _ep->name, _req, _req->length, _req->buf); ++ ++ local_irq_save(flags); ++ ++ _req->status = -EINPROGRESS; ++ _req->actual = 0; ++ ++ /* kickstart this i/o queue? */ ++ if (list_empty(&ep->queue) && !ep->stopped) { ++ if (ep->desc == 0 /* ep0 */ ) { ++ unsigned length = _req->length; ++ ++ switch (dev->ep0state) { ++ case EP0_IN_DATA_PHASE: ++ dev->stats.write.ops++; ++ if (write_ep0_fifo(ep, req)) ++ req = 0; ++ break; ++ ++ case EP0_OUT_DATA_PHASE: ++ dev->stats.read.ops++; ++ if (dev->req_pending) ++ ep0start(dev, UDCCSR0_IPR, "OUT"); ++ if (length == 0 || ((UDCCSR0 & UDCCSR0_RNE) != 0 ++ && read_ep0_fifo(ep, ++ req))) { ++ ep0_idle(dev); ++ done(ep, req, 0); ++ req = 0; ++ } ++ break; ++ case EP0_NO_ACTION: ++ ep0_idle(dev); ++ req = 0; ++ break; ++ default: ++ DMSG("ep0 i/o, odd state %d\n", dev->ep0state); ++ local_irq_restore(flags); ++ return -EL2HLT; ++ } ++#ifdef USE_DMA ++ /* either start dma or prime pio pump */ ++ } else if (ep->dma >= 0) { ++ kick_dma(ep, req); ++#endif ++ /* can the FIFO can satisfy the request immediately? */ ++ } else if (ep->dir_in ++ && (*ep->reg_udccsr & UDCCSR_FS) != 0 ++ && write_fifo(ep, req)) { ++ req = 0; ++ } else if ((*ep->reg_udccsr & UDCCSR_FS) != 0 ++ && read_fifo(ep, req)) { ++ req = 0; ++ } ++ DMSG("req:%p,ep->desc:%p,ep->dma:%d\n", req, ep->desc, ep->dma); ++ if (likely(req && ep->desc) && ep->dma < 0) ++ pio_irq_enable(ep->ep_num); ++ } ++ ++ /* pio or dma irq handler advances the queue. */ ++ if (likely(req != 0)) ++ list_add_tail(&req->queue, &ep->queue); ++ local_irq_restore(flags); ++ ++ return 0; ++} ++ ++/* ++ * nuke - dequeue ALL requests ++ */ ++static void nuke(struct pxa27x_ep *ep, int status) ++{ ++ struct pxa27x_request *req; ++ ++ /* called with irqs blocked */ ++#ifdef USE_DMA ++ if (ep->dma >= 0 && !ep->stopped) ++ cancel_dma(ep); ++#endif ++ while (!list_empty(&ep->queue)) { ++ req = list_entry(ep->queue.next, struct pxa27x_request, queue); ++ done(ep, req, status); ++ } ++ if (ep->desc) ++ pio_irq_disable(ep->ep_num); ++} ++ ++/* dequeue JUST ONE request */ ++static int pxa27x_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req) ++{ ++ struct pxa27x_ep *ep; ++ struct pxa27x_request *req; ++ unsigned long flags; ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (!_ep || ep->ep.name == ep0name) ++ return -EINVAL; ++ ++ local_irq_save(flags); ++ ++ /* make sure it's actually queued on this endpoint */ ++ list_for_each_entry(req, &ep->queue, queue) { ++ if (&req->req == _req) ++ break; ++ } ++ if (&req->req != _req) { ++ local_irq_restore(flags); ++ return -EINVAL; ++ } ++#ifdef USE_DMA ++ if (ep->dma >= 0 && ep->queue.next == &req->queue && !ep->stopped) { ++ cancel_dma(ep); ++ done(ep, req, -ECONNRESET); ++ /* restart i/o */ ++ if (!list_empty(&ep->queue)) { ++ req = list_entry(ep->queue.next, ++ struct pxa27x_request, queue); ++ kick_dma(ep, req); ++ } ++ } else ++#endif ++ done(ep, req, -ECONNRESET); ++ ++ local_irq_restore(flags); ++ return 0; ++} ++ ++/*-------------------------------------------------------------------------*/ ++ ++static int pxa27x_ep_set_halt(struct usb_ep *_ep, int value) ++{ ++ struct pxa27x_ep *ep; ++ unsigned long flags; ++ ++ DMSG("%s is called\n", __FUNCTION__); ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name)) ++ || ep->ep_type == USB_ENDPOINT_XFER_ISOC) { ++ DMSG("%s, bad ep\n", __FUNCTION__); ++ return -EINVAL; ++ } ++ if (value == 0) { ++ /* this path (reset toggle+halt) is needed to implement ++ * SET_INTERFACE on normal hardware. but it can't be ++ * done from software on the PXA UDC, and the hardware ++ * forgets to do it as part of SET_INTERFACE automagic. ++ */ ++ DMSG("only host can clear %s halt\n", _ep->name); ++ return -EROFS; ++ } ++ ++ local_irq_save(flags); ++ ++ if (ep->dir_in && ((*ep->reg_udccsr & UDCCSR_FS) == 0 ++ || !list_empty(&ep->queue))) { ++ local_irq_restore(flags); ++ return -EAGAIN; ++ } ++ ++ /* FST bit is the same for control, bulk in, bulk out, interrupt in */ ++ *ep->reg_udccsr = UDCCSR_FST | UDCCSR_FEF; ++ ++ /* ep0 needs special care */ ++ if (!ep->desc) { ++ start_watchdog(ep->dev); ++ ep->dev->req_pending = 0; ++ ep->dev->ep0state = EP0_STALL; ++ LED_EP0_OFF; ++ ++ /* and bulk/intr endpoints like dropping stalls too */ ++ } else { ++ unsigned i; ++ for (i = 0; i < 1000; i += 20) { ++ if (*ep->reg_udccsr & UDCCSR_SST) ++ break; ++ udelay(20); ++ } ++ } ++ local_irq_restore(flags); ++ ++ DBG(DBG_VERBOSE, "%s halt\n", _ep->name); ++ return 0; ++} ++ ++static int pxa27x_ep_fifo_status(struct usb_ep *_ep) ++{ ++ struct pxa27x_ep *ep; ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (!_ep) { ++ DMSG("%s, bad ep\n", __FUNCTION__); ++ return -ENODEV; ++ } ++ /* pxa can't report unclaimed bytes from IN fifos */ ++ if (ep->dir_in) ++ return -EOPNOTSUPP; ++ if (ep->dev->gadget.speed == USB_SPEED_UNKNOWN ++ || (*ep->reg_udccsr & UDCCSR_FS) == 0) ++ return 0; ++ else ++ return (*ep->reg_udcbcr & 0xfff) + 1; ++} ++ ++static void pxa27x_ep_fifo_flush(struct usb_ep *_ep) ++{ ++ struct pxa27x_ep *ep; ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (!_ep || ep->ep.name == ep0name || !list_empty(&ep->queue)) { ++ DMSG("%s, bad ep\n", __FUNCTION__); ++ return; ++ } ++ ++ /* toggle and halt bits stay unchanged */ ++ ++ /* for OUT, just read and discard the FIFO contents. */ ++ if (!ep->dir_in) { ++ while (((*ep->reg_udccsr) & UDCCSR_BNE) != 0) ++ (void)*ep->reg_udcdr; ++ return; ++ } ++ ++ /* most IN status is the same, but ISO can't stall */ ++ *ep->reg_udccsr = UDCCSR_PC | UDCCSR_FST | UDCCSR_TRN ++ | (ep->ep_type == USB_ENDPOINT_XFER_ISOC) ++ ? 0 : UDCCSR_SST; ++} ++ ++static struct usb_ep_ops pxa27x_ep_ops = { ++ .enable = pxa27x_ep_enable, ++ .disable = pxa27x_ep_disable, ++ ++ .alloc_request = pxa27x_ep_alloc_request, ++ .free_request = pxa27x_ep_free_request, ++ ++#warning "CHECK comments here" ++ /* ++ .alloc_buffer = pxa27x_ep_alloc_buffer, ++ .free_buffer = pxa27x_ep_free_buffer, ++ */ ++ ++ .queue = pxa27x_ep_queue, ++ .dequeue = pxa27x_ep_dequeue, ++ ++ .set_halt = pxa27x_ep_set_halt, ++ .fifo_status = pxa27x_ep_fifo_status, ++ .fifo_flush = pxa27x_ep_fifo_flush, ++}; ++ ++/* --------------------------------------------------------------------------- ++ * device-scoped parts of the api to the usb controller hardware ++ * --------------------------------------------------------------------------- ++ */ ++ ++static inline void validate_fifo_size(struct pxa27x_ep *pxa_ep, u8 bmAttributes) ++{ ++ switch (bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) { ++ case USB_ENDPOINT_XFER_CONTROL: ++ pxa_ep->fifo_size = EP0_FIFO_SIZE; ++ break; ++ case USB_ENDPOINT_XFER_ISOC: ++ pxa_ep->fifo_size = ISO_FIFO_SIZE; ++ break; ++ case USB_ENDPOINT_XFER_BULK: ++ pxa_ep->fifo_size = BULK_FIFO_SIZE; ++ break; ++ case USB_ENDPOINT_XFER_INT: ++ pxa_ep->fifo_size = INT_FIFO_SIZE; ++ break; ++ default: ++ break; ++ } ++} ++ ++#define NAME_SIZE 18 ++struct usb_ep *pxa27x_ep_alloc(struct usb_gadget *gadget, ++ struct usb_endpoint_descriptor *desc, int config, ++ int interface, int alt) ++{ ++ u32 tmp; ++ unsigned i; ++ char *name; ++ struct usb_ep *ep = NULL; ++ struct pxa27x_ep *pxa_ep = NULL; ++ struct pxa27x_udc *dev = the_controller; ++ ++ DMSG("pxa27x_config_ep is called\n"); ++ DMSG(" usb endpoint descriptor is:\n" ++ " bLength:%d\n" ++ " bDescriptorType:%x\n" ++ " bEndpointAddress:%x\n" ++ " bmAttributes:%x\n" ++ " wMaxPacketSize:%d\n", ++ desc->bLength, ++ desc->bDescriptorType, desc->bEndpointAddress, ++ desc->bmAttributes, desc->wMaxPacketSize); ++ ++ for (i = 1; i < UDC_EP_NUM; i++) { ++ if (!dev->ep[i].assigned) { ++ pxa_ep = &dev->ep[i]; ++ pxa_ep->assigned = 1; ++ pxa_ep->ep_num = i; ++ break; ++ } ++ } ++ if (unlikely(i == UDC_EP_NUM)) { ++ printk(KERN_ERR __FILE__ ": Failed to find a spare endpoint\n"); ++ return ep; ++ } ++ ++ ep = &pxa_ep->ep; ++ ++ pxa_ep->dev = dev; ++ pxa_ep->desc = desc; ++ pxa_ep->pio_irqs = pxa_ep->dma_irqs = 0; ++ pxa_ep->dma = -1; ++ ++ if (!(desc->bEndpointAddress & 0xF)) ++ desc->bEndpointAddress |= i; ++ ++ if (!(desc->wMaxPacketSize)) { ++ validate_fifo_size(pxa_ep, desc->bmAttributes); ++ desc->wMaxPacketSize = pxa_ep->fifo_size; ++ } else ++ pxa_ep->fifo_size = desc->wMaxPacketSize; ++ ++ pxa_ep->dir_in = (desc->bEndpointAddress & USB_DIR_IN) ? 1 : 0; ++ pxa_ep->ep_type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; ++ pxa_ep->stopped = 1; ++ pxa_ep->dma_con = 0; ++ pxa_ep->config = config; ++ pxa_ep->interface = interface; ++ pxa_ep->aisn = alt; ++ ++ pxa_ep->reg_udccsr = &UDCCSR0 + i; ++ pxa_ep->reg_udcbcr = &UDCBCR0 + i; ++ pxa_ep->reg_udcdr = &UDCDR0 + i; ++ pxa_ep->reg_udccr = &UDCCRA - 1 + i; ++#ifdef USE_DMA ++ pxa_ep->reg_drcmr = &DRCMR24 + i; ++#endif ++ ++ DMSG("udccsr=0x%8x, udcbcr=0x%8x, udcdr=0x%8x," ++ "udccr0=0x%8x\n", ++ (unsigned)pxa_ep->reg_udccsr, ++ (unsigned)pxa_ep->reg_udcbcr, ++ (unsigned)pxa_ep->reg_udcdr, (unsigned)pxa_ep->reg_udccr); ++ ++ /* Configure UDCCR */ ++ tmp = 0; ++ tmp |= (pxa_ep->config << UDCCONR_CN_S) & UDCCONR_CN; ++#if 0 ++ tmp |= (pxa_ep->interface << UDCCONR_IN_S) & UDCCONR_IN; ++ tmp |= (pxa_ep->aisn << UDCCONR_AISN_S) & UDCCONR_AISN; ++#else ++ tmp |= (0 << UDCCONR_IN_S) & UDCCONR_IN; ++ tmp |= (0 << UDCCONR_AISN_S) & UDCCONR_AISN; ++#endif ++ tmp |= (desc->bEndpointAddress << UDCCONR_EN_S) & UDCCONR_EN; ++ tmp |= (pxa_ep->ep_type << UDCCONR_ET_S) & UDCCONR_ET; ++ tmp |= (pxa_ep->dir_in) ? UDCCONR_ED : 0; ++ tmp |= (min(pxa_ep->fifo_size, (unsigned)desc->wMaxPacketSize) ++ << UDCCONR_MPS_S) & UDCCONR_MPS; ++ tmp |= UDCCONR_DE | UDCCONR_EE; ++#if 0 ++ tmp |= UDCCONR_EE; ++#endif ++ ++ *pxa_ep->reg_udccr = tmp; ++ ++#ifdef USE_DMA ++ /* Only BULK use DMA */ ++ if ((pxa_ep->ep_type & USB_ENDPOINT_XFERTYPE_MASK) ++ == USB_ENDPOINT_XFER_BULK) ++ *pxa_ep->reg_udccsr = UDCCSR_DME; ++#endif ++ ++ DMSG("UDCCR: 0x%p is 0x%x\n", pxa_ep->reg_udccr, *pxa_ep->reg_udccr); ++ ++ /* Fill ep name */ ++ name = kmalloc(NAME_SIZE, GFP_KERNEL); ++ if (!name) { ++ printk(KERN_ERR "%s: Error\n", __FUNCTION__); ++ return NULL; ++ } ++ ++ switch (pxa_ep->ep_type) { ++ case USB_ENDPOINT_XFER_BULK: ++ sprintf(name, "Bulk-%s-%d", (pxa_ep->dir_in ? "in" : "out"), i); ++ break; ++ case USB_ENDPOINT_XFER_INT: ++ sprintf(name, "Interrupt-%s-%d", (pxa_ep->dir_in ? ++ "in" : "out"), i); ++ break; ++ default: ++ sprintf(name, "endpoint-%s-%d", (pxa_ep->dir_in ? ++ "in" : "out"), i); ++ break; ++ } ++ ep->name = name; ++ ++ ep->ops = &pxa27x_ep_ops; ++ ep->maxpacket = min((ushort) pxa_ep->fifo_size, desc->wMaxPacketSize); ++ ++ list_add_tail(&ep->ep_list, &gadget->ep_list); ++ return ep; ++} ++ ++static int pxa27x_udc_get_frame(struct usb_gadget *_gadget) ++{ ++ return (UDCFNR & 0x3FF); ++} ++ ++static int pxa27x_udc_wakeup(struct usb_gadget *_gadget) ++{ ++ /* host may not have enabled remote wakeup */ ++ if ((UDCCR & UDCCR_DWRE) == 0) ++ return -EHOSTUNREACH; ++ udc_set_mask_UDCCR(UDCCR_UDR); ++ return 0; ++} ++ ++static const struct usb_gadget_ops pxa27x_udc_ops = { ++ .ep_alloc = pxa27x_ep_alloc, ++ .get_frame = pxa27x_udc_get_frame, ++ .wakeup = pxa27x_udc_wakeup, ++ /* current versions must always be self-powered */ ++}; ++ ++/*-------------------------------------------------------------------------*/ ++ ++#ifdef UDC_PROC_FILE ++ ++static const char proc_node_name[] = "driver/udc"; ++ ++static int ++udc_proc_read(char *page, char **start, off_t off, int count, ++ int *eof, void *_dev) ++{ ++ char *buf = page; ++ struct pxa27x_udc *dev = _dev; ++ char *next = buf; ++ unsigned size = count; ++ unsigned long flags; ++ int i, t; ++ u32 tmp; ++ ++ if (off != 0) ++ return 0; ++ ++ local_irq_save(flags); ++ ++ /* basic device status */ ++ t = scnprintf(next, size, DRIVER_DESC "\n" ++ "%s version: %s\nGadget driver: %s\n", ++ driver_name, DRIVER_VERSION SIZE_STR DMASTR, ++ dev->driver ? dev->driver->driver.name : "(none)"); ++ size -= t; ++ next += t; ++ ++ /* registers for device and ep0 */ ++ t = scnprintf(next, size, ++ "uicr %02X.%02X, usir %02X.%02x, ufnr %02X\n", ++ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR); ++ size -= t; ++ next += t; ++ ++ tmp = UDCCR; ++ t = scnprintf(next, size, ++ "udccr %02X =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n", ++ tmp, (tmp & UDCCR_OEN) ? " oen" : "", ++ (tmp & UDCCR_AALTHNP) ? " aalthnp" : "", ++ (tmp & UDCCR_AHNP) ? " rem" : "", ++ (tmp & UDCCR_BHNP) ? " rstir" : "", ++ (tmp & UDCCR_DWRE) ? " dwre" : "", ++ (tmp & UDCCR_SMAC) ? " smac" : "", ++ (tmp & UDCCR_EMCE) ? " emce" : "", ++ (tmp & UDCCR_UDR) ? " udr" : "", ++ (tmp & UDCCR_UDA) ? " uda" : "", ++ (tmp & UDCCR_UDE) ? " ude" : "", ++ (tmp & UDCCR_ACN) >> UDCCR_ACN_S, ++ (tmp & UDCCR_AIN) >> UDCCR_AIN_S, ++ (tmp & UDCCR_AAISN) >> UDCCR_AAISN_S); ++ ++ size -= t; ++ next += t; ++ ++ tmp = UDCCSR0; ++ t = scnprintf(next, size, ++ "udccsr0 %02X =%s%s%s%s%s%s%s\n", tmp, ++ (tmp & UDCCSR0_SA) ? " sa" : "", ++ (tmp & UDCCSR0_RNE) ? " rne" : "", ++ (tmp & UDCCSR0_FST) ? " fst" : "", ++ (tmp & UDCCSR0_SST) ? " sst" : "", ++ (tmp & UDCCSR0_DME) ? " dme" : "", ++ (tmp & UDCCSR0_IPR) ? " ipr" : "", ++ (tmp & UDCCSR0_OPC) ? " opc" : ""); ++ size -= t; ++ next += t; ++ ++ if (!dev->driver) ++ goto done; ++ ++ t = scnprintf(next, size, "ep0 IN %lu/%lu, OUT %lu/%lu\nirqs %lu\n\n", ++ dev->stats.write.bytes, dev->stats.write.ops, ++ dev->stats.read.bytes, dev->stats.read.ops, ++ dev->stats.irqs); ++ size -= t; ++ next += t; ++ ++ /* dump endpoint queues */ ++ for (i = 0; i < UDC_EP_NUM; i++) { ++ struct pxa27x_ep *ep = &dev->ep[i]; ++ struct pxa27x_request *req; ++ int t; ++ ++ if (i != 0) { ++ const struct usb_endpoint_descriptor *d; ++ ++ d = ep->desc; ++ if (!d) ++ continue; ++ tmp = *dev->ep[i].reg_udccsr; ++ t = scnprintf(next, size, ++ "%s max %d %s udccs %02x udccr:0x%x\n", ++ ep->ep.name, ++ le16_to_cpu(d->wMaxPacketSize), ++ (ep->dma >= 0) ? "dma" : "pio", tmp, ++ *dev->ep[i].reg_udccr); ++ /* TODO translate all five groups of udccs bits! */ ++ ++ } else /* ep0 should only have one transfer queued */ ++ t = scnprintf(next, size, "ep0 max 16 pio irqs %lu\n", ++ ep->pio_irqs); ++ if (t <= 0 || t > size) ++ goto done; ++ size -= t; ++ next += t; ++ ++ if (list_empty(&ep->queue)) { ++ t = scnprintf(next, size, "\t(nothing queued)\n"); ++ if (t <= 0 || t > size) ++ goto done; ++ size -= t; ++ next += t; ++ continue; ++ } ++ list_for_each_entry(req, &ep->queue, queue) { ++#ifdef USE_DMA ++ if (ep->dma >= 0 && req->queue.prev == &ep->queue) ++ t = scnprintf(next, size, ++ "\treq %p len %d/%d " ++ "buf %p (dma%d dcmd %08x)\n", ++ &req->req, req->req.actual, ++ req->req.length, req->req.buf, ++ ep->dma, DCMD(ep->dma) ++ /* low 13 bits == bytes-to-go */ ++ ); ++ else ++#endif ++ t = scnprintf(next, size, ++ "\treq %p len %d/%d buf %p\n", ++ &req->req, req->req.actual, ++ req->req.length, req->req.buf); ++ if (t <= 0 || t > size) ++ goto done; ++ size -= t; ++ next += t; ++ } ++ } ++ ++ done: ++ local_irq_restore(flags); ++ *eof = 1; ++ return count - size; ++} ++ ++#define create_proc_files() \ ++ create_proc_read_entry(proc_node_name, 0, NULL, udc_proc_read, dev) ++#define remove_proc_files() \ ++ remove_proc_entry(proc_node_name, NULL) ++ ++#else /* !UDC_PROC_FILE */ ++#define create_proc_files() do {} while (0) ++#define remove_proc_files() do {} while (0) ++ ++#endif /* UDC_PROC_FILE */ ++ ++/* "function" sysfs attribute */ ++static ssize_t ++show_function(struct device *_dev, struct device_attribute *attr, char *buf) ++{ ++ struct pxa27x_udc *dev = dev_get_drvdata(_dev); ++ ++ if (!dev->driver ++ || !dev->driver->function ++ || strlen(dev->driver->function) > PAGE_SIZE) ++ return 0; ++ return scnprintf(buf, PAGE_SIZE, "%s\n", dev->driver->function); ++} ++ ++static DEVICE_ATTR(function, S_IRUGO, show_function, NULL); ++ ++/*-------------------------------------------------------------------------*/ ++ ++/* ++ * udc_disable - disable USB device controller ++ */ ++static void udc_disable(struct pxa27x_udc *dev) ++{ ++ UDCICR0 = 0x00000000; ++ UDCICR1 = 0x00000000; ++ ++ udc_clear_mask_UDCCR(UDCCR_UDE); ++ ++ /* Disable clock for USB device */ ++ pxa_set_cken(CKEN_USB, 0); ++ ++ ep0_idle(dev); ++ dev->gadget.speed = USB_SPEED_UNKNOWN; ++ ++ pullup_off(); ++} ++ ++/* ++ * udc_reinit - initialize software state ++ */ ++static void udc_reinit(struct pxa27x_udc *dev) ++{ ++ u32 i; ++ ++ dev->ep0state = EP0_IDLE; ++ ++ /* basic endpoint records init */ ++ for (i = 0; i < UDC_EP_NUM; i++) { ++ struct pxa27x_ep *ep = &dev->ep[i]; ++ ++ ep->stopped = 0; ++ ep->pio_irqs = ep->dma_irqs = 0; ++ } ++ dev->configuration = 0; ++ dev->interface = 0; ++ dev->alternate = 0; ++ /* the rest was statically initialized, and is read-only */ ++} ++ ++/* until it's enabled, this UDC should be completely invisible ++ * to any USB host. ++ */ ++static void udc_enable(struct pxa27x_udc *dev) ++{ ++ udc_clear_mask_UDCCR(UDCCR_UDE); ++ ++ /* Enable clock for USB device */ ++ pxa_set_cken(CKEN_USB, 1); ++ ++ UDCICR0 = UDCICR1 = 0; ++ ++ ep0_idle(dev); ++ dev->gadget.speed = USB_SPEED_FULL; ++ dev->stats.irqs = 0; ++ ++ udc_set_mask_UDCCR(UDCCR_UDE); ++ udelay(2); ++ if (UDCCR & UDCCR_EMCE) { ++ printk(KERN_ERR ++ ": There are error in configuration, udc disabled\n"); ++ } ++ ++ /* caller must be able to sleep in order to cope ++ * with startup transients. ++ */ ++ msleep(100); ++ ++ /* enable suspend/resume and reset irqs */ ++ UDCICR1 = UDCICR1_IECC | UDCICR1_IERU | UDCICR1_IESU | UDCICR1_IERS; ++ ++ /* enable ep0 irqs */ ++ UDCICR0 = UDCICR_INT(0, UDCICR_INT_MASK); ++#if 0 ++ for (i = 1; i < UDC_EP_NUM; i++) { ++ if (dev->ep[i].assigned) ++ pio_irq_enable(i); ++ } ++#endif ++ ++ pullup_on(); ++} ++ ++/* when a driver is successfully registered, it will receive ++ * control requests including set_configuration(), which enables ++ * non-control requests. then usb traffic follows until a ++ * disconnect is reported. then a host may connect again, or ++ * the driver might get unbound. ++ */ ++int usb_gadget_register_driver(struct usb_gadget_driver *driver) ++{ ++ struct pxa27x_udc *dev = the_controller; ++ int retval; ++ ++ DMSG("dev=0x%x, driver=0x%x, speed=%d, " ++ "bind=0x%x, unbind=0x%x, disconnect=0x%x, setup=0x%x\n", ++ (unsigned)dev, (unsigned)driver, driver->speed, ++ (unsigned)driver->bind, (unsigned)driver->unbind, ++ (unsigned)driver->disconnect, (unsigned)driver->setup); ++ ++ if (!driver || driver->speed != USB_SPEED_FULL ++ || !driver->bind ++ || !driver->unbind || !driver->disconnect || !driver->setup) ++ return -EINVAL; ++ if (!dev) ++ return -ENODEV; ++ if (dev->driver) ++ return -EBUSY; ++ ++ /* first hook up the driver ... */ ++ dev->driver = driver; ++ dev->gadget.dev.driver = &driver->driver; ++ ++ retval = device_add(&dev->gadget.dev); ++ if (retval) { ++ DMSG("unable to add device for %s --> error %d\n", ++ driver->driver.name, retval); ++ goto device_add_error; ++ } ++ retval = driver->bind(&dev->gadget); ++ if (retval) { ++ DMSG("bind to driver %s --> error %d\n", ++ driver->driver.name, retval); ++ goto device_bind_error; ++ } ++ retval = device_create_file(dev->dev, &dev_attr_function); ++ if (retval) { ++ DMSG("unable to create file for %s --> error %d\n", ++ driver->driver.name, retval); ++ goto create_file_error; ++ } ++ ++ /* ... then enable host detection and ep0; and we're ready ++ * for set_configuration as well as eventual disconnect. ++ * NOTE: this shouldn't power up until later. ++ */ ++ DMSG("registered gadget driver '%s'\n", driver->driver.name); ++ udc_enable(dev); ++ dump_state(dev); ++ ++ return 0; ++ ++ create_file_error: ++ driver->unbind(&dev->gadget); ++ ++ device_bind_error: ++ device_del(&dev->gadget.dev); ++ ++ device_add_error: ++ dev->driver = 0; ++ dev->gadget.dev.driver = 0; ++ ++ return retval; ++} ++ ++EXPORT_SYMBOL(usb_gadget_register_driver); ++ ++static void ++stop_activity(struct pxa27x_udc *dev, struct usb_gadget_driver *driver) ++{ ++ int i; ++ ++ DMSG("Trace path 1\n"); ++ /* don't disconnect drivers more than once */ ++ if (dev->gadget.speed == USB_SPEED_UNKNOWN) ++ driver = 0; ++ dev->gadget.speed = USB_SPEED_UNKNOWN; ++ ++ /* prevent new request submissions, kill any outstanding requests */ ++ for (i = 0; i < UDC_EP_NUM; i++) { ++ struct pxa27x_ep *ep = &dev->ep[i]; ++ ++ ep->stopped = 1; ++ nuke(ep, -ESHUTDOWN); ++ } ++ del_timer_sync(&dev->timer); ++ ++ /* report disconnect; the driver is already quiesced */ ++ if (driver) ++ driver->disconnect(&dev->gadget); ++ ++ /* re-init driver-visible data structures */ ++ udc_reinit(dev); ++} ++ ++int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) ++{ ++ struct pxa27x_udc *dev = the_controller; ++ ++ if (!dev) ++ return -ENODEV; ++ if (!driver || driver != dev->driver) ++ return -EINVAL; ++ ++ local_irq_disable(); ++ udc_disable(dev); ++ stop_activity(dev, driver); ++ local_irq_enable(); ++ ++ driver->unbind(&dev->gadget); ++ dev->driver = 0; ++ ++ device_del(&dev->gadget.dev); ++ device_remove_file(dev->dev, &dev_attr_function); ++ ++ DMSG("unregistered gadget driver '%s'\n", driver->driver.name); ++ dump_state(dev); ++ return 0; ++} ++ ++EXPORT_SYMBOL(usb_gadget_unregister_driver); ++ ++#ifndef enable_disconnect_irq ++#define enable_disconnect_irq() do {} while (0) ++#define disable_disconnect_irq() do {} while (0) ++#endif ++ ++/*-------------------------------------------------------------------------*/ ++ ++static inline void clear_ep_state(struct pxa27x_udc *dev) ++{ ++ unsigned i; ++ ++ /* hardware SET_{CONFIGURATION,INTERFACE} automagic resets endpoint ++ * fifos, and pending transactions mustn't be continued in any case. ++ */ ++ for (i = 1; i < UDC_EP_NUM; i++) ++ nuke(&dev->ep[i], -ECONNABORTED); ++} ++ ++static void udc_watchdog(unsigned long _dev) ++{ ++ struct pxa27x_udc *dev = (void *)_dev; ++ ++ local_irq_disable(); ++ if (dev->ep0state == EP0_STALL ++ && (UDCCSR0 & UDCCSR0_FST) == 0 && (UDCCSR0 & UDCCSR0_SST) == 0) { ++ UDCCSR0 = UDCCSR0_FST | UDCCSR0_FTF; ++ DBG(DBG_VERBOSE, "ep0 re-stall\n"); ++ start_watchdog(dev); ++ } ++ local_irq_enable(); ++} ++ ++static void handle_ep0(struct pxa27x_udc *dev) ++{ ++ u32 udccsr0 = UDCCSR0; ++ struct pxa27x_ep *ep = &dev->ep[0]; ++ struct pxa27x_request *req; ++ union { ++ struct usb_ctrlrequest r; ++ u8 raw[8]; ++ u32 word[2]; ++ } u; ++ ++ if (list_empty(&ep->queue)) ++ req = 0; ++ else ++ req = list_entry(ep->queue.next, struct pxa27x_request, queue); ++ ++ /* clear stall status */ ++ if (udccsr0 & UDCCSR0_SST) { ++ nuke(ep, -EPIPE); ++ UDCCSR0 = UDCCSR0_SST; ++ del_timer(&dev->timer); ++ ep0_idle(dev); ++ } ++ ++ /* previous request unfinished? non-error iff back-to-back ... */ ++ if ((udccsr0 & UDCCSR0_SA) != 0 && dev->ep0state != EP0_IDLE) { ++ nuke(ep, 0); ++ del_timer(&dev->timer); ++ ep0_idle(dev); ++ } ++ ++ switch (dev->ep0state) { ++ case EP0_NO_ACTION: ++ printk(KERN_INFO "%s: Busy\n", __FUNCTION__); ++ /*Fall through */ ++ case EP0_IDLE: ++ /* late-breaking status? */ ++ udccsr0 = UDCCSR0; ++ ++ /* start control request? */ ++ if (likely((udccsr0 & (UDCCSR0_OPC | UDCCSR0_SA | UDCCSR0_RNE)) ++ == (UDCCSR0_OPC | UDCCSR0_SA | UDCCSR0_RNE))) { ++ int i; ++ ++ nuke(ep, -EPROTO); ++ /* read SETUP packet */ ++ for (i = 0; i < 2; i++) { ++ if (unlikely(!(UDCCSR0 & UDCCSR0_RNE))) { ++ bad_setup: ++ DMSG("SETUP %d!\n", i); ++ goto stall; ++ } ++ u.word[i] = UDCDR0; ++ } ++ if (unlikely((UDCCSR0 & UDCCSR0_RNE) != 0)) ++ goto bad_setup; ++ ++ le16_to_cpus(&u.r.wValue); ++ le16_to_cpus(&u.r.wIndex); ++ le16_to_cpus(&u.r.wLength); ++ ++ LED_EP0_ON; ++ ++ DBG(DBG_VERBOSE, "SETUP %02x.%02x v%04x i%04x l%04x\n", ++ u.r.bRequestType, u.r.bRequest, ++ u.r.wValue, u.r.wIndex, u.r.wLength); ++ /* cope with automagic for some standard requests. */ ++ dev->req_std = (u.r.bRequestType & USB_TYPE_MASK) ++ == USB_TYPE_STANDARD; ++ dev->req_config = 0; ++ dev->req_pending = 1; ++#if 0 ++ switch (u.r.bRequest) { ++ /* hardware was supposed to hide this */ ++ case USB_REQ_SET_CONFIGURATION: ++ case USB_REQ_SET_INTERFACE: ++ case USB_REQ_SET_ADDRESS: ++ printk(KERN_ERR "Should not come here\n"); ++ break; ++ } ++ ++#endif ++ if (u.r.bRequestType & USB_DIR_IN) ++ dev->ep0state = EP0_IN_DATA_PHASE; ++ else ++ dev->ep0state = EP0_OUT_DATA_PHASE; ++ i = dev->driver->setup(&dev->gadget, &u.r); ++ ++ if (i < 0) { ++ /* hardware automagic preventing STALL... */ ++ if (dev->req_config) { ++ /* hardware sometimes neglects to tell ++ * tell us about config change events, ++ * so later ones may fail... ++ */ ++ WARN("config change %02x fail %d?\n", ++ u.r.bRequest, i); ++ return; ++ /* TODO experiment: if has_cfr, ++ * hardware didn't ACK; maybe we ++ * could actually STALL! ++ */ ++ } ++ DBG(DBG_VERBOSE, "protocol STALL, " ++ "%02x err %d\n", UDCCSR0, i); ++ stall: ++ /* the watchdog timer helps deal with cases ++ * where udc seems to clear FST wrongly, and ++ * then NAKs instead of STALLing. ++ */ ++ ep0start(dev, UDCCSR0_FST | UDCCSR0_FTF, ++ "stall"); ++ start_watchdog(dev); ++ dev->ep0state = EP0_STALL; ++ LED_EP0_OFF; ++ ++ /* deferred i/o == no response yet */ ++ } else if (dev->req_pending) { ++ if (likely(dev->ep0state == EP0_IN_DATA_PHASE ++ || dev->req_std || u.r.wLength)) ++ ep0start(dev, 0, "defer"); ++ else ++ ep0start(dev, UDCCSR0_IPR, "defer/IPR"); ++ } ++ ++ /* expect at least one data or status stage irq */ ++ return; ++ ++ } else { ++ /* some random early IRQ: ++ * - we acked FST ++ * - IPR cleared ++ * - OPC got set, without SA (likely status stage) ++ */ ++ UDCCSR0 = udccsr0 & (UDCCSR0_SA | UDCCSR0_OPC); ++ } ++ break; ++ case EP0_IN_DATA_PHASE: /* GET_DESCRIPTOR etc */ ++ if (udccsr0 & UDCCSR0_OPC) { ++ UDCCSR0 = UDCCSR0_OPC | UDCCSR0_FTF; ++ DBG(DBG_VERBOSE, "ep0in premature status\n"); ++ if (req) ++ done(ep, req, 0); ++ ep0_idle(dev); ++ } else { /* irq was IPR clearing */ ++ ++ if (req) { ++ /* this IN packet might finish the request */ ++ (void)write_ep0_fifo(ep, req); ++ } /* else IN token before response was written */ ++ } ++ break; ++ case EP0_OUT_DATA_PHASE: /* SET_DESCRIPTOR etc */ ++ if (udccsr0 & UDCCSR0_OPC) { ++ if (req) { ++ /* this OUT packet might finish the request */ ++ if (read_ep0_fifo(ep, req)) ++ done(ep, req, 0); ++ /* else more OUT packets expected */ ++ } /* else OUT token before read was issued */ ++ } else { /* irq was IPR clearing */ ++ ++ DBG(DBG_VERBOSE, "ep0out premature status\n"); ++ if (req) ++ done(ep, req, 0); ++ ep0_idle(dev); ++ } ++ break; ++ case EP0_STALL: ++ UDCCSR0 = UDCCSR0_FST; ++ break; ++ } ++ UDCISR0 = UDCISR_INT(0, UDCISR_INT_MASK); ++} ++ ++static void handle_ep(struct pxa27x_ep *ep) ++{ ++ struct pxa27x_request *req; ++ int completed; ++ u32 udccsr = 0; ++ ++ DMSG("%s is called\n", __FUNCTION__); ++ do { ++ completed = 0; ++ if (likely(!list_empty(&ep->queue))) { ++ req = list_entry(ep->queue.next, ++ struct pxa27x_request, queue); ++ } else ++ req = 0; ++ ++#if 0 ++ udccsr = *ep->reg_udccsr; ++#endif ++ DMSG("%s: req:%p, udcisr0:0x%x udccsr %p:0x%x\n", __FUNCTION__, ++ req, UDCISR0, ep->reg_udccsr, *ep->reg_udccsr); ++ if (unlikely(ep->dir_in)) { ++ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr; ++ if (unlikely(udccsr)) ++ *ep->reg_udccsr = udccsr; ++ ++ if (req && likely((*ep->reg_udccsr & UDCCSR_FS) != 0)) ++ completed = write_fifo(ep, req); ++ ++ } else { ++ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr; ++ if (unlikely(udccsr)) ++ *ep->reg_udccsr = udccsr; ++ ++ /* fifos can hold packets, ready for reading... */ ++ if (likely(req)) { ++ completed = read_fifo(ep, req); ++ } else { ++ pio_irq_disable(ep->ep_num); ++ *ep->reg_udccsr = UDCCSR_FEF; ++ DMSG("%s: no req for out data\n", __FUNCTION__); ++ } ++ } ++ ep->pio_irqs++; ++ } while (completed); ++} ++ ++static void pxa27x_change_configuration(struct pxa27x_udc *dev) ++{ ++ struct usb_ctrlrequest req; ++ ++ req.bRequestType = 0; ++ req.bRequest = USB_REQ_SET_CONFIGURATION; ++ req.wValue = dev->configuration; ++ req.wIndex = 0; ++ req.wLength = 0; ++ ++ dev->ep0state = EP0_NO_ACTION; ++ dev->driver->setup(&dev->gadget, &req); ++ ++} ++ ++static void pxa27x_change_interface(struct pxa27x_udc *dev) ++{ ++ struct usb_ctrlrequest req; ++ ++ req.bRequestType = USB_RECIP_INTERFACE; ++ req.bRequest = USB_REQ_SET_INTERFACE; ++ req.wValue = dev->alternate; ++ req.wIndex = dev->interface; ++ req.wLength = 0; ++ ++ dev->ep0state = EP0_NO_ACTION; ++ dev->driver->setup(&dev->gadget, &req); ++} ++ ++/* ++ * pxa27x_udc_irq - interrupt handler ++ * ++ * avoid delays in ep0 processing. the control handshaking isn't always ++ * under software control (pxa250c0 and the pxa255 are better), and delays ++ * could cause usb protocol errors. ++ */ ++static irqreturn_t pxa27x_udc_irq(int irq, void *_dev) ++{ ++ struct pxa27x_udc *dev = _dev; ++ int handled; ++ ++ dev->stats.irqs++; ++ HEX_DISPLAY(dev->stats.irqs); ++ ++ DBG(DBG_VERBOSE, "Interrupt, UDCISR0:0x%08x, UDCISR1:0x%08x, " ++ "UDCCR:0x%08x\n", UDCISR0, UDCISR1, UDCCR); ++ ++ do { ++ u32 udcir = UDCISR1 & 0xF8000000; ++ ++ handled = 0; ++ ++ /* SUSpend Interrupt Request */ ++ if (unlikely(udcir & UDCISR1_IRSU)) { ++ UDCISR1 = UDCISR1_IRSU; ++ handled = 1; ++ DBG(DBG_VERBOSE, "USB suspend\n"); ++ if (dev->gadget.speed != USB_SPEED_UNKNOWN ++ && dev->driver && dev->driver->suspend) ++ dev->driver->suspend(&dev->gadget); ++ ep0_idle(dev); ++ } ++ ++ /* RESume Interrupt Request */ ++ if (unlikely(udcir & UDCISR1_IRRU)) { ++ UDCISR1 = UDCISR1_IRRU; ++ handled = 1; ++ DBG(DBG_VERBOSE, "USB resume\n"); ++ ++ if (dev->gadget.speed != USB_SPEED_UNKNOWN ++ && dev->driver && dev->driver->resume) ++ dev->driver->resume(&dev->gadget); ++ } ++ ++ if (unlikely(udcir & UDCISR1_IRCC)) { ++ unsigned config, interface, alternate; ++ ++ handled = 1; ++ DBG(DBG_VERBOSE, "USB SET_CONFIGURATION or " ++ "SET_INTERFACE command received\n"); ++ ++ UDCCR |= UDCCR_SMAC; ++ ++ config = (UDCCR & UDCCR_ACN) >> UDCCR_ACN_S; ++ ++ if (dev->configuration != config) { ++ dev->configuration = config; ++ pxa27x_change_configuration(dev); ++ } ++ ++ interface = (UDCCR & UDCCR_AIN) >> UDCCR_AIN_S; ++ alternate = (UDCCR & UDCCR_AAISN) >> UDCCR_AAISN_S; ++ ++ if ((dev->configuration != interface) || ++ (dev->alternate != alternate)) { ++ dev->interface = config; ++ dev->alternate = alternate; ++ pxa27x_change_interface(dev); ++ } ++ ++ UDCISR1 = UDCISR1_IRCC; ++ DMSG("%s: con:%d,inter:%d,alt:%d\n", ++ __FUNCTION__, config, interface, alternate); ++ } ++ ++ /* ReSeT Interrupt Request - USB reset */ ++ if (unlikely(udcir & UDCISR1_IRRS)) { ++ UDCISR1 = UDCISR1_IRRS; ++ handled = 1; ++ ++ if ((UDCCR & UDCCR_UDA) == 0) { ++ DBG(DBG_VERBOSE, "SB reset start\n"); ++ ++ /* reset driver and endpoints, ++ * in case that's not yet done ++ */ ++ stop_activity(dev, dev->driver); ++ ++ } ++ INFO("USB reset\n"); ++ dev->gadget.speed = USB_SPEED_FULL; ++ memset(&dev->stats, 0, sizeof dev->stats); ++ ++ } else { ++ u32 udcisr0 = UDCISR0; ++ u32 udcisr1 = UDCISR1 & 0xFFFF; ++ int i; ++ ++ if (unlikely(!udcisr0 && !udcisr1)) ++ continue; ++ ++ DBG(DBG_VERY_NOISY, "irq %02x.%02x\n", udcisr1, ++ udcisr0); ++ ++ /* control traffic */ ++ if (udcisr0 & UDCISR0_IR0) { ++ dev->ep[0].pio_irqs++; ++ handle_ep0(dev); ++ handled = 1; ++ } ++ ++ udcisr0 >>= 2; ++ /* endpoint data transfers */ ++ for (i = 1; udcisr0 != 0 && i < 16; udcisr0 >>= 2, i++) { ++ UDCISR0 = UDCISR_INT(i, UDCISR_INT_MASK); ++ ++ if (udcisr0 & UDC_INT_FIFOERROR) ++ printk(KERN_ERR ++ " Endpoint %d Fifo error\n", i); ++ if (udcisr0 & UDC_INT_PACKETCMP) { ++ handle_ep(&dev->ep[i]); ++ handled = 1; ++ } ++ ++ } ++ ++ for (i = 0; udcisr1 != 0 && i < 8; udcisr1 >>= 2, i++) { ++ UDCISR1 = UDCISR_INT(i, UDCISR_INT_MASK); ++ ++ if (udcisr1 & UDC_INT_FIFOERROR) { ++ printk(KERN_ERR ++ " Endpoint %d fifo error\n", ++ (i + 16)); ++ } ++ ++ if (udcisr1 & UDC_INT_PACKETCMP) { ++ handle_ep(&dev->ep[i + 16]); ++ handled = 1; ++ } ++ } ++ } ++ ++ /* we could also ask for 1 msec SOF (SIR) interrupts */ ++ ++ } while (handled); ++ return IRQ_HANDLED; ++} ++ ++static void udc_init_ep(struct pxa27x_udc *dev) ++{ ++ int i; ++ ++ INIT_LIST_HEAD(&dev->gadget.ep_list); ++ INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); ++ ++ for (i = 0; i < UDC_EP_NUM; i++) { ++ struct pxa27x_ep *ep = &dev->ep[i]; ++ ++ ep->dma = -1; ++ if (i != 0) { ++ memset(ep, 0, sizeof(*ep)); ++ } ++ INIT_LIST_HEAD(&ep->queue); ++ } ++} ++ ++/*-------------------------------------------------------------------------*/ ++ ++static void nop_release(struct device *dev) ++{ ++ DMSG("%s %s\n", __FUNCTION__, dev->bus_id); ++} ++ ++/* this uses load-time allocation and initialization (instead of ++ * doing it at run-time) to save code, eliminate fault paths, and ++ * be more obviously correct. ++ */ ++static struct pxa27x_udc memory = { ++ .gadget = { ++ .ops = &pxa27x_udc_ops, ++ .ep0 = &memory.ep[0].ep, ++ .name = driver_name, ++ .dev = { ++ .bus_id = "gadget", ++ .release = nop_release, ++ }, ++ }, ++ ++ /* control endpoint */ ++ .ep[0] = { ++ .ep = { ++ .name = ep0name, ++ .ops = &pxa27x_ep_ops, ++ .maxpacket = EP0_FIFO_SIZE, ++ }, ++ .dev = &memory, ++ .reg_udccsr = &UDCCSR0, ++ .reg_udcdr = &UDCDR0, ++ } ++}; ++ ++#define CP15R0_VENDOR_MASK 0xffffe000 ++ ++#define CP15R0_XSCALE_VALUE 0x69054000 /* intel/arm/xscale */ ++ ++/* ++ * probe - binds to the platform device ++ */ ++static int __init pxa27x_udc_probe(struct platform_device *pdev) ++{ ++ struct device *dev = &pdev->dev; ++ struct pxa27x_udc *udc = &memory; ++ int irq, retval; ++ u32 chiprev; ++ ++ /* insist on Intel/ARM/XScale */ ++ asm("mrc%? p15, 0, %0, c0, c0":"=r"(chiprev)); ++ if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) { ++ printk(KERN_ERR "%s: not XScale!\n", driver_name); ++ return -ENODEV; ++ } ++ ++ irq = platform_get_irq(pdev, 0); ++ if (irq < 0) ++ return -ENODEV; ++ pr_debug("%s: IRQ %d\n", driver_name, irq); ++ ++ /* other non-static parts of init */ ++ udc->dev = dev; ++ udc->mach = dev->platform_data; ++ ++ /* Disable irq, erase old events and disable the pull up on the bus */ ++ UDCICR0 = 0x00000000; ++ UDCICR1 = 0x00000000; ++ UDCISR0 = 0xffffffff; ++ UDCISR1 = 0xffffffff; ++ if (udc->mach->gpio_pullup) { ++ if ((retval = gpio_request(udc->mach->gpio_pullup, ++ "pca2xx_udc GPIO PULLUP"))) { ++ dev_dbg(&pdev->dev, ++ "can't get pullup gpio %d, err: %d\n", ++ udc->mach->gpio_pullup, retval); ++ if (udc->mach->gpio_vbus) ++ gpio_free(udc->mach->gpio_vbus); ++ return -EBUSY; ++ } ++ gpio_direction_output(udc->mach->gpio_pullup, 0); ++ } ++ ++ init_timer(&udc->timer); ++ udc->timer.function = udc_watchdog; ++ udc->timer.data = (unsigned long)udc; ++ ++ device_initialize(&udc->gadget.dev); ++ udc->gadget.dev.parent = dev; ++ udc->gadget.dev.dma_mask = dev->dma_mask; ++ ++ the_controller = udc; ++ dev_set_drvdata(dev, udc); ++ ++ udc_disable(udc); ++ udc_init_ep(udc); ++ udc_reinit(udc); ++ ++ /* irq setup after old hardware state is cleaned up */ ++ retval = request_irq(irq, pxa27x_udc_irq, 0, driver_name, udc); ++ if (retval != 0) { ++ printk(KERN_ERR "%s: can't get irq %i, err %d\n", ++ driver_name, irq, retval); ++ return -EBUSY; ++ } ++ udc->got_irq = 1; ++ ++ create_proc_files(); ++ ++ return 0; ++} ++ ++static void pxa27x_udc_shutdown(struct platform_device *_dev) ++{ ++ pullup_off(); ++} ++ ++static int __exit pxa27x_udc_remove(struct platform_device *pdev) ++{ ++ struct device *dev = &pdev->dev; ++ struct pxa27x_udc *udc = dev->driver_data; ++ ++ udc_disable(udc); ++ remove_proc_files(); ++ usb_gadget_unregister_driver(udc->driver); ++ ++ if (udc->got_irq) { ++ free_irq(platform_get_irq(pdev, 0), udc); ++ udc->got_irq = 0; ++ } ++ if (machine_is_lubbock() && udc->got_disc) { ++ free_irq(LUBBOCK_USB_DISC_IRQ, udc); ++ udc->got_disc = 0; ++ } ++ dev_set_drvdata(dev, 0); ++ the_controller = 0; ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int pxa27x_udc_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ struct device *dev = &pdev->dev; ++ struct pxa27x_udc *udc = dev->driver_data; ++ int i; ++ ++ DMSG("%s will go into SUSPEND_POWER_DOWN\n", __FUNCTION__); ++ udc->udccsr0 = UDCCSR0; ++ for (i = 1; (i < UDC_EP_NUM); i++) { ++ if (udc->ep[i].assigned) { ++ struct pxa27x_ep *ep = &udc->ep[i]; ++ ++ ep->udccsr_value = *ep->reg_udccsr; ++ ep->udccr_value = *ep->reg_udccr; ++ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n", ++ i, *ep->reg_udccsr, *ep->reg_udccr); ++ } ++ } ++ ++ udc_clear_mask_UDCCR(UDCCR_UDE); ++ pxa_set_cken(CKEN_USB, 0); ++ ++ return 0; ++} ++ ++static int pxa27x_udc_resume(struct platform_device *pdev) ++{ ++ struct device *dev = &pdev->dev; ++ struct pxa27x_udc *udc = dev->driver_data; ++ int i; ++ ++ DMSG("%s: udc resume\n", __FUNCTION__); ++ ++ UDCCSR0 = udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME); ++ for (i = 1; i < UDC_EP_NUM; i++) { ++ if (udc->ep[i].assigned) { ++ struct pxa27x_ep *ep = &udc->ep[i]; ++ ++ *ep->reg_udccsr = ep->udccsr_value; ++ *ep->reg_udccr = ep->udccr_value; ++ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n", ++ i, *ep->reg_udccsr, *ep->reg_udccr); ++ } ++ } ++ udc_enable(udc); ++ /* OTGPH bit is set when sleep mode is entered. ++ * it indicates that OTG pad is retaining its state. ++ * Upon exit from sleep mode and before clearing OTGPH, ++ * Software must configure the USB OTG pad, UDC, and UHC ++ * to the state they were in before entering sleep mode.*/ ++ PSSR |= PSSR_OTGPH; ++ ++ return 0; ++} ++#else ++#define pxa27x_udc_suspend NULL ++#define pxa27x_udc_resume NULL ++#endif ++ ++/*-------------------------------------------------------------------------*/ ++ ++static struct platform_driver pxa27x_udc_driver = { ++ .shutdown = pxa27x_udc_shutdown, ++ .remove = __exit_p(pxa27x_udc_remove), ++ .suspend = pxa27x_udc_suspend, ++ .resume = pxa27x_udc_resume, ++ .driver = { ++ .owner = THIS_MODULE, ++ .name = "pxa27x-udc", ++ }, ++}; ++ ++static int __init udc_init(void) ++{ ++ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION); ++ return platform_driver_probe(&pxa27x_udc_driver, pxa27x_udc_probe); ++} ++ ++static void __exit udc_exit(void) ++{ ++ platform_driver_unregister(&pxa27x_udc_driver); ++} ++ ++module_init(udc_init); ++module_exit(udc_exit); ++ ++MODULE_DESCRIPTION(DRIVER_DESC); ++MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell, Rodolfo Giometti"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.24/drivers/usb/gadget/pxa27x_udc.h +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/usb/gadget/pxa27x_udc.h +@@ -0,0 +1,304 @@ ++/* ++ * linux/drivers/usb/gadget/pxa27x_udc.h ++ * Intel PXA27x on-chip full speed USB device controller ++ * ++ * Copyright (C) 2003 Robert Schwebel , Pengutronix ++ * Copyright (C) 2003 David Brownell ++ * Copyright (C) 2004 Intel Corporation ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#ifndef __LINUX_USB_GADGET_PXA27X_H ++#define __LINUX_USB_GADGET_PXA27X_H ++ ++#include ++ ++struct pxa27x_udc; ++ ++struct pxa27x_ep { ++ struct usb_ep ep; ++ struct pxa27x_udc *dev; ++ ++ const struct usb_endpoint_descriptor *desc; ++ struct list_head queue; ++ unsigned long pio_irqs; ++ unsigned long dma_irqs; ++ ++ int dma; ++ unsigned fifo_size; ++ unsigned ep_num; ++ unsigned ep_type; ++ ++ unsigned stopped : 1; ++ unsigned dma_con : 1; ++ unsigned dir_in : 1; ++ unsigned assigned : 1; ++ ++ unsigned config; ++ unsigned interface; ++ unsigned aisn; ++ /* UDCCSR = UDC Control/Status Register for this EP ++ * UBCR = UDC Byte Count Remaining (contents of OUT fifo) ++ * UDCDR = UDC Endpoint Data Register (the fifo) ++ * UDCCR = UDC Endpoint Configuration Registers ++ * DRCM = DMA Request Channel Map ++ */ ++ volatile u32 *reg_udccsr; ++ volatile u32 *reg_udcbcr; ++ volatile u32 *reg_udcdr; ++ volatile u32 *reg_udccr; ++#ifdef USE_DMA ++ volatile u32 *reg_drcmr; ++#define drcmr(n) .reg_drcmr = & DRCMR ## n , ++#else ++#define drcmr(n) ++#endif ++ ++#ifdef CONFIG_PM ++ unsigned udccsr_value; ++ unsigned udccr_value; ++#endif ++}; ++ ++struct pxa27x_request { ++ struct usb_request req; ++ struct list_head queue; ++}; ++ ++enum ep0_state { ++ EP0_IDLE, ++ EP0_IN_DATA_PHASE, ++ EP0_OUT_DATA_PHASE, ++// EP0_END_XFER, ++ EP0_STALL, ++ EP0_NO_ACTION ++}; ++ ++#define EP0_FIFO_SIZE ((unsigned)16) ++#define BULK_FIFO_SIZE ((unsigned)64) ++#define ISO_FIFO_SIZE ((unsigned)256) ++#define INT_FIFO_SIZE ((unsigned)8) ++ ++struct udc_stats { ++ struct ep0stats { ++ unsigned long ops; ++ unsigned long bytes; ++ } read, write; ++ unsigned long irqs; ++}; ++ ++#ifdef CONFIG_USB_PXA27X_SMALL ++/* when memory's tight, SMALL config saves code+data. */ ++//#undef USE_DMA ++//#define UDC_EP_NUM 3 ++#endif ++ ++#ifndef UDC_EP_NUM ++#define UDC_EP_NUM 24 ++#endif ++ ++struct pxa27x_udc { ++ struct usb_gadget gadget; ++ struct usb_gadget_driver *driver; ++ ++ enum ep0_state ep0state; ++ struct udc_stats stats; ++ unsigned got_irq : 1, ++ got_disc : 1, ++ has_cfr : 1, ++ req_pending : 1, ++ req_std : 1, ++ req_config : 1; ++ ++#define start_watchdog(dev) mod_timer(&dev->timer, jiffies + (HZ/200)) ++ struct timer_list timer; ++ ++ struct device *dev; ++ struct pxa2xx_udc_mach_info *mach; ++ u64 dma_mask; ++ struct pxa27x_ep ep [UDC_EP_NUM]; ++ ++ unsigned configuration, ++ interface, ++ alternate; ++#ifdef CONFIG_PM ++ unsigned udccsr0; ++#endif ++}; ++ ++/*-------------------------------------------------------------------------*/ ++#if 0 ++#ifdef DEBUG ++#define HEX_DISPLAY(n) do { \ ++ if (machine_is_mainstone())\ ++ { MST_LEDDAT1 = (n); } \ ++ } while(0) ++ ++#define HEX_DISPLAY1(n) HEX_DISPLAY(n) ++ ++#define HEX_DISPLAY2(n) do { \ ++ if (machine_is_mainstone()) \ ++ { MST_LEDDAT2 = (n); } \ ++ } while(0) ++ ++#endif /* DEBUG */ ++#endif ++/*-------------------------------------------------------------------------*/ ++ ++/* LEDs are only for debug */ ++#ifndef HEX_DISPLAY ++#define HEX_DISPLAY(n) do {} while(0) ++#endif ++ ++#ifndef LED_CONNECTED_ON ++#define LED_CONNECTED_ON do {} while(0) ++#define LED_CONNECTED_OFF do {} while(0) ++#endif ++#ifndef LED_EP0_ON ++#define LED_EP0_ON do {} while (0) ++#define LED_EP0_OFF do {} while (0) ++#endif ++ ++static struct pxa27x_udc *the_controller; ++ ++/*-------------------------------------------------------------------------*/ ++ ++/* ++ * Debugging support vanishes in non-debug builds. DBG_NORMAL should be ++ * mostly silent during normal use/testing, with no timing side-effects. ++ */ ++#define DBG_NORMAL 1 /* error paths, device state transitions */ ++#define DBG_VERBOSE 2 /* add some success path trace info */ ++#define DBG_NOISY 3 /* ... even more: request level */ ++#define DBG_VERY_NOISY 4 /* ... even more: packet level */ ++ ++#ifdef DEBUG ++ ++static const char *state_name[] = { ++ "EP0_IDLE", ++ "EP0_IN_DATA_PHASE", "EP0_OUT_DATA_PHASE", ++ "EP0_END_XFER", "EP0_STALL" ++}; ++ ++#define DMSG(stuff...) printk(KERN_ERR "udc: " stuff) ++ ++#ifdef VERBOSE ++# define UDC_DEBUG DBG_VERBOSE ++#else ++# define UDC_DEBUG DBG_NORMAL ++#endif ++ ++static void __attribute__ ((__unused__)) ++dump_udccr(const char *label) ++{ ++ u32 udccr = UDCCR; ++ DMSG("%s 0x%08x =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n", ++ label, udccr, ++ (udccr & UDCCR_OEN) ? " oen":"", ++ (udccr & UDCCR_AALTHNP) ? " aalthnp":"", ++ (udccr & UDCCR_AHNP) ? " rem" : "", ++ (udccr & UDCCR_BHNP) ? " rstir" : "", ++ (udccr & UDCCR_DWRE) ? " dwre" : "", ++ (udccr & UDCCR_SMAC) ? " smac" : "", ++ (udccr & UDCCR_EMCE) ? " emce" : "", ++ (udccr & UDCCR_UDR) ? " udr" : "", ++ (udccr & UDCCR_UDA) ? " uda" : "", ++ (udccr & UDCCR_UDE) ? " ude" : "", ++ (udccr & UDCCR_ACN) >> UDCCR_ACN_S, ++ (udccr & UDCCR_AIN) >> UDCCR_AIN_S, ++ (udccr & UDCCR_AAISN)>> UDCCR_AAISN_S ); ++} ++ ++static void __attribute__ ((__unused__)) ++dump_udccsr0(const char *label) ++{ ++ u32 udccsr0 = UDCCSR0; ++ ++ DMSG("%s %s 0x%08x =%s%s%s%s%s%s%s\n", ++ label, state_name[the_controller->ep0state], udccsr0, ++ (udccsr0 & UDCCSR0_SA) ? " sa" : "", ++ (udccsr0 & UDCCSR0_RNE) ? " rne" : "", ++ (udccsr0 & UDCCSR0_FST) ? " fst" : "", ++ (udccsr0 & UDCCSR0_SST) ? " sst" : "", ++ (udccsr0 & UDCCSR0_DME) ? " dme" : "", ++ (udccsr0 & UDCCSR0_IPR) ? " ipr" : "", ++ (udccsr0 & UDCCSR0_OPC) ? " opr" : ""); ++} ++ ++static void __attribute__ ((__unused__)) ++dump_state(struct pxa27x_udc *dev) ++{ ++ unsigned i; ++ ++ DMSG("%s, udcicr %02X.%02X, udcsir %02X.%02x, udcfnr %02X\n", ++ state_name[dev->ep0state], ++ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR); ++ dump_udccr("udccr"); ++ ++ if (!dev->driver) { ++ DMSG("no gadget driver bound\n"); ++ return; ++ } else ++ DMSG("ep0 driver '%s'\n", dev->driver->driver.name); ++ ++ ++ dump_udccsr0 ("udccsr0"); ++ DMSG("ep0 IN %lu/%lu, OUT %lu/%lu\n", ++ dev->stats.write.bytes, dev->stats.write.ops, ++ dev->stats.read.bytes, dev->stats.read.ops); ++ ++ for (i = 1; i < UDC_EP_NUM; i++) { ++ if (dev->ep [i].desc == 0) ++ continue; ++ DMSG ("udccs%d = %02x\n", i, *dev->ep->reg_udccsr); ++ } ++} ++ ++#if 0 ++static void dump_regs(u8 ep) ++{ ++ DMSG("EP:%d UDCCSR:0x%08x UDCBCR:0x%08x\n UDCCR:0x%08x\n", ++ ep,UDCCSN(ep), UDCBCN(ep), UDCCN(ep)); ++} ++static void dump_req (struct pxa27x_request *req) ++{ ++ struct usb_request *r = &req->req; ++ ++ DMSG("%s: buf:0x%08x length:%d dma:0x%08x actual:%d\n", ++ __FUNCTION__, (unsigned)r->buf, r->length, ++ r->dma, r->actual); ++} ++#endif ++ ++#else ++ ++#define DMSG(stuff...) do{}while(0) ++ ++#define dump_udccr(x) do{}while(0) ++#define dump_udccsr0(x) do{}while(0) ++#define dump_state(x) do{}while(0) ++ ++#define UDC_DEBUG ((unsigned)0) ++ ++#endif ++ ++#define DBG(lvl, stuff...) do{if ((lvl) <= UDC_DEBUG) DMSG(stuff);}while(0) ++ ++#define WARN(stuff...) printk(KERN_WARNING "udc: " stuff) ++#define INFO(stuff...) printk(KERN_INFO "udc: " stuff) ++ ++ ++#endif /* __LINUX_USB_GADGET_PXA27X_H */ +Index: linux-2.6.24/drivers/usb/gadget/serial.c +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/serial.c ++++ linux-2.6.24/drivers/usb/gadget/serial.c +@@ -1360,20 +1360,20 @@ + + usb_ep_autoconfig_reset(gadget); + +- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc); ++ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc, 0, 0, 0); + if (!ep) + goto autoconf_fail; + EP_IN_NAME = ep->name; + ep->driver_data = ep; /* claim the endpoint */ + +- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc); ++ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc, 0, 0, 0); + if (!ep) + goto autoconf_fail; + EP_OUT_NAME = ep->name; + ep->driver_data = ep; /* claim the endpoint */ + + if (use_acm) { +- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc); ++ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc, 0, 0, 0); + if (!ep) { + printk(KERN_ERR "gs_bind: cannot run ACM on %s\n", gadget->name); + goto autoconf_fail; +Index: linux-2.6.24/drivers/usb/gadget/zero.c +=================================================================== +--- linux-2.6.24.orig/drivers/usb/gadget/zero.c ++++ linux-2.6.24/drivers/usb/gadget/zero.c +@@ -1112,7 +1112,7 @@ + * but there may also be important quirks to address. + */ + usb_ep_autoconfig_reset (gadget); +- ep = usb_ep_autoconfig (gadget, &fs_source_desc); ++ ep = usb_ep_autoconfig (gadget, &fs_source_desc, 0, 0, 0); + if (!ep) { + autoconf_fail: + printk (KERN_ERR "%s: can't autoconfigure on %s\n", +@@ -1122,7 +1122,7 @@ + EP_IN_NAME = ep->name; + ep->driver_data = ep; /* claim */ + +- ep = usb_ep_autoconfig (gadget, &fs_sink_desc); ++ ep = usb_ep_autoconfig (gadget, &fs_sink_desc, 0, 0, 0); + if (!ep) + goto autoconf_fail; + EP_OUT_NAME = ep->name; +Index: linux-2.6.24/include/asm-arm/arch-pxa/udc.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/arch-pxa/udc.h ++++ linux-2.6.24/include/asm-arm/arch-pxa/udc.h +@@ -2,6 +2,7 @@ + * linux/include/asm-arm/arch-pxa/udc.h + * + */ ++#include + #include + + extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info); +Index: linux-2.6.24/include/linux/usb/gadget.h +=================================================================== +--- linux-2.6.24.orig/include/linux/usb/gadget.h ++++ linux-2.6.24/include/linux/usb/gadget.h +@@ -397,10 +397,28 @@ + + struct usb_gadget; + ++/** ++ * struct usb_endpoint_config - possible configurations of a given endpoint ++ * @config: the configuration number ++ * @interface: the interface number ++ * @altinterface: the altinterface number ++ * ++ * Used as an array to pass information about the possible configurations ++ * of a given endpoint to the bus controller. ++ */ ++struct usb_endpoint_config { ++ int config; ++ int interface; ++ int altinterface; ++}; ++ + /* the rest of the api to the controller hardware: device operations, + * which don't involve endpoints (or i/o). + */ + struct usb_gadget_ops { ++ struct usb_ep* (*ep_alloc)(struct usb_gadget *gadget, ++ struct usb_endpoint_descriptor *desc, ++ int config, int interface, int alt); + int (*get_frame)(struct usb_gadget *); + int (*wakeup)(struct usb_gadget *); + int (*set_selfpowered) (struct usb_gadget *, int is_selfpowered); +@@ -857,7 +875,8 @@ + /* utility wrapping a simple endpoint selection policy */ + + extern struct usb_ep *usb_ep_autoconfig (struct usb_gadget *, +- struct usb_endpoint_descriptor *) __devinit; ++ struct usb_endpoint_descriptor *, ++ int, int, int) __devinit; + + extern void usb_ep_autoconfig_reset (struct usb_gadget *) __devinit; + diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch new file mode 100644 index 0000000000..17749a98ba --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch @@ -0,0 +1,2439 @@ + drivers/video/Kconfig | 18 + drivers/video/Makefile | 1 + drivers/video/pxafb.c | 305 +++++-- + drivers/video/pxafb.h | 65 + + drivers/video/pxafb_overlay.c | 1525 ++++++++++++++++++++++++++++++++++++ + include/asm-arm/arch-pxa/pxa-regs.h | 111 ++ + 6 files changed, 1969 insertions(+), 56 deletions(-) + +Index: linux-2.6.24/drivers/video/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/video/Kconfig ++++ linux-2.6.24/drivers/video/Kconfig +@@ -1729,6 +1729,24 @@ + + If unsure, say N. + ++choice ++ prompt "PXA LCD type" ++ depends on FB_PXA ++ ++config FB_PXA_LCD_QVGA ++ bool "QVGA(320x240)" ++ ++config FB_PXA_LCD_VGA ++ bool "VGA (640x480)" ++ ++endchoice ++ ++config FB_PXA_OVERLAY ++ tristate "PXA LCD overlay support" ++ depends on FB_PXA ++ ---help--- ++ Frame buffer overlay driver for PXA27x ++ + config FB_PXA_PARAMETERS + bool "PXA LCD command line parameters" + default n +Index: linux-2.6.24/drivers/video/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/video/Makefile ++++ linux-2.6.24/drivers/video/Makefile +@@ -96,6 +96,7 @@ + obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o + obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o + obj-$(CONFIG_FB_PXA) += pxafb.o ++obj-$(CONFIG_FB_PXA_OVERLAY) += pxafb_overlay.o + obj-$(CONFIG_FB_W100) += w100fb.o + obj-$(CONFIG_FB_AU1100) += au1100fb.o + obj-$(CONFIG_FB_AU1200) += au1200fb.o +Index: linux-2.6.24/drivers/video/pxafb.c +=================================================================== +--- linux-2.6.24.orig/drivers/video/pxafb.c ++++ linux-2.6.24/drivers/video/pxafb.c +@@ -59,17 +59,49 @@ + #define LCCR0_INVALID_CONFIG_MASK (LCCR0_OUM|LCCR0_BM|LCCR0_QDM|LCCR0_DIS|LCCR0_EFM|LCCR0_IUM|LCCR0_SFM|LCCR0_LDM|LCCR0_ENB) + #define LCCR3_INVALID_CONFIG_MASK (LCCR3_HSP|LCCR3_VSP|LCCR3_PCD|LCCR3_BPP) + ++wait_queue_head_t fcs_wait_eof; ++int fcs_in_eof; ++static DECLARE_MUTEX(fcs_lcd_sem); ++ + static void (*pxafb_backlight_power)(int); + static void (*pxafb_lcd_power)(int, struct fb_var_screeninfo *); + + static int pxafb_activate_var(struct fb_var_screeninfo *var, struct pxafb_info *); +-static void set_ctrlr_state(struct pxafb_info *fbi, u_int state); ++void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state); + + #ifdef CONFIG_FB_PXA_PARAMETERS + #define PXAFB_OPTIONS_SIZE 256 + static char g_options[PXAFB_OPTIONS_SIZE] __devinitdata = ""; + #endif + ++static struct pxafb_rgb def_rgb_8 = { ++ red: { offset: 0, length: 8, }, ++ green: { offset: 0, length: 8, }, ++ blue: { offset: 0, length: 8, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgb_16 = { ++ red: { offset: 11, length: 5, }, ++ green: { offset: 5, length: 6, }, ++ blue: { offset: 0, length: 5, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgb_18 = { ++ red: { offset: 12, length: 6, }, ++ green: { offset: 6, length: 6, }, ++ blue: { offset: 0, length: 6, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgb_24 = { ++ red: { offset: 16, length: 8, }, ++ green: { offset: 8, length: 8, }, ++ blue: { offset: 0, length: 8, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ + static inline void pxafb_schedule_work(struct pxafb_info *fbi, u_int state) + { + unsigned long flags; +@@ -209,6 +241,10 @@ + case 4: ret = LCCR3_4BPP; break; + case 8: ret = LCCR3_8BPP; break; + case 16: ret = LCCR3_16BPP; break; ++ case 18: ret = LCCR3_18BPP; break; ++ case 19: ret = LCCR3_19BPP; break; ++ case 24: ret = LCCR3_24BPP; break; ++ case 25: ret = LCCR3_25BPP; break; + } + return ret; + } +@@ -320,18 +356,34 @@ + * The pixel packing format is described on page 7-11 of the + * PXA2XX Developer's Manual. + */ +- if (var->bits_per_pixel == 16) { +- var->red.offset = 11; var->red.length = 5; +- var->green.offset = 5; var->green.length = 6; +- var->blue.offset = 0; var->blue.length = 5; +- var->transp.offset = var->transp.length = 0; +- } else { +- var->red.offset = var->green.offset = var->blue.offset = var->transp.offset = 0; +- var->red.length = 8; +- var->green.length = 8; +- var->blue.length = 8; +- var->transp.length = 0; +- } ++ switch (var->bits_per_pixel) { ++ case 16: ++ /* 2 pixels per line */ ++ var->red = def_rgb_16.red; ++ var->green = def_rgb_16.green; ++ var->blue = def_rgb_16.blue; ++ var->transp = def_rgb_16.transp; ++ break; ++ case 18: ++ case 19: ++ var->red = def_rgb_18.red; ++ var->green = def_rgb_18.green; ++ var->blue = def_rgb_18.blue; ++ var->transp = def_rgb_18.transp; ++ break; ++ case 24: ++ case 25: ++ var->red = def_rgb_24.red; ++ var->green = def_rgb_24.green; ++ var->blue = def_rgb_24.blue; ++ var->transp = def_rgb_24.transp; ++ break; ++ default: ++ var->red = def_rgb_8.red; ++ var->green = def_rgb_8.green; ++ var->blue = def_rgb_8.blue; ++ var->transp = def_rgb_8.transp; ++ } + + #ifdef CONFIG_CPU_FREQ + pr_debug("pxafb: dma period = %d ps, clock = %d kHz\n", +@@ -345,7 +397,7 @@ + static inline void pxafb_set_truecolor(u_int is_true_color) + { + pr_debug("pxafb: true_color = %d\n", is_true_color); +- // do your machine-specific setup if needed ++ /* do your machine-specific setup if needed */ + } + + /* +@@ -360,7 +412,8 @@ + + pr_debug("pxafb: set_par\n"); + +- if (var->bits_per_pixel == 16) ++ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19 ++ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25) + fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR; + else if (!fbi->cmap_static) + fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; +@@ -373,12 +426,25 @@ + fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR; + } + +- fbi->fb.fix.line_length = var->xres_virtual * +- var->bits_per_pixel / 8; +- if (var->bits_per_pixel == 16) +- fbi->palette_size = 0; +- else +- fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel; ++ switch (var->bits_per_pixel) { ++ case 16: ++ fbi->fb.fix.line_length = var->xres_virtual * 2; ++ fbi->palette_size = 0; ++ break; ++ case 18: ++ case 19: ++ fbi->fb.fix.line_length = var->xres_virtual * 3; ++ fbi->palette_size = 0; ++ break; ++ case 24: ++ case 25: ++ fbi->fb.fix.line_length = var->xres_virtual * 4; ++ fbi->palette_size = 0; ++ break; ++ default: ++ fbi->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8; ++ fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel; ++ } + + if ((fbi->lccr4 & LCCR4_PAL_FOR_MASK) == LCCR4_PAL_FOR_0) + palette_mem_size = fbi->palette_size * sizeof(u16); +@@ -395,7 +461,8 @@ + */ + pxafb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR); + +- if (fbi->fb.var.bits_per_pixel == 16) ++ if (fbi->fb.var.bits_per_pixel == 16 || fbi->fb.var.bits_per_pixel == 18 ||fbi->fb.var.bits_per_pixel == 19 ++ || fbi->fb.var.bits_per_pixel == 24 || fbi->fb.var.bits_per_pixel == 25) + fb_dealloc_cmap(&fbi->fb.cmap); + else + fb_alloc_cmap(&fbi->fb.cmap, 1<fb.var.bits_per_pixel, 0); +@@ -441,7 +508,7 @@ + * 16 bpp mode does not really use the palette, so this will not + * blank the display in all modes. + */ +-static int pxafb_blank(int blank, struct fb_info *info) ++int pxafb_blank(int blank, struct fb_info *info) + { + struct pxafb_info *fbi = (struct pxafb_info *)info; + int i; +@@ -458,19 +525,20 @@ + for (i = 0; i < fbi->palette_size; i++) + pxafb_setpalettereg(i, 0, 0, 0, 0, info); + +- pxafb_schedule_work(fbi, C_DISABLE); +- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); ++ pxafb_schedule_work(fbi, C_BLANK); ++ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */ + break; + + case FB_BLANK_UNBLANK: +- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); ++ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */ + if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR || + fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) + fb_set_cmap(&fbi->fb.cmap, info); +- pxafb_schedule_work(fbi, C_ENABLE); ++ pxafb_schedule_work(fbi, C_UNBLANK); + } + return 0; + } ++EXPORT_SYMBOL(pxafb_blank); + + static int pxafb_mmap(struct fb_info *info, + struct vm_area_struct *vma) +@@ -606,6 +674,10 @@ + case 4: + case 8: + case 16: ++ case 18: ++ case 19: ++ case 24: ++ case 25: + break; + default: + printk(KERN_ERR "%s: invalid bit depth %d\n", +@@ -637,7 +709,10 @@ + + new_regs.lccr0 = fbi->lccr0 | + (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM | +- LCCR0_QDM | LCCR0_BM | LCCR0_OUM); ++#ifdef CONFIG_PXA27x /* Enable overlay for PXA27x */ ++ LCCR0_OUC | LCCR0_CMDIM | LCCR0_RDSTM | ++#endif ++ LCCR0_QDM | LCCR0_BM | LCCR0_OUM); + + new_regs.lccr1 = + LCCR1_DisWdth(var->xres) + +@@ -696,7 +771,7 @@ + + fbi->dmadesc_fbhigh_cpu->fsadr = fbi->screen_dma; + fbi->dmadesc_fbhigh_cpu->fidr = 0; +- fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL; ++ fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL | LDCMD_EOFINT; + + fbi->dmadesc_palette_cpu->fsadr = fbi->palette_dma; + fbi->dmadesc_palette_cpu->fidr = 0; +@@ -708,7 +783,8 @@ + sizeof(u32); + fbi->dmadesc_palette_cpu->ldcmd |= LDCMD_PAL; + +- if (var->bits_per_pixel == 16) { ++ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19 ++ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25) { + /* palette shouldn't be loaded in true-color mode */ + fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_fbhigh_dma; + fbi->fdadr0 = fbi->dmadesc_fbhigh_dma; /* no pal just fbhigh */ +@@ -763,8 +839,8 @@ + } + + /* +- * NOTE! The following functions are purely helpers for set_ctrlr_state. +- * Do not call them directly; set_ctrlr_state does the correct serialisation ++ * NOTE! The following functions are purely helpers for pxafb_set_ctrlr_state. ++ * Do not call them directly; pxafb_set_ctrlr_state does the correct serialisation + * to ensure that things happen in the right way 100% of time time. + * -- rmk + */ +@@ -786,7 +862,8 @@ + + static void pxafb_setup_gpio(struct pxafb_info *fbi) + { +- int gpio, ldd_bits; ++ int gpio; ++ int ldd_bits = 0; + unsigned int lccr0 = fbi->lccr0; + + /* +@@ -796,28 +873,56 @@ + /* 4 bit interface */ + if ((lccr0 & LCCR0_CMS) == LCCR0_Mono && + (lccr0 & LCCR0_SDS) == LCCR0_Sngl && +- (lccr0 & LCCR0_DPD) == LCCR0_4PixMono) ++ (lccr0 & LCCR0_DPD) == LCCR0_4PixMono) { + ldd_bits = 4; +- ++ } + /* 8 bit interface */ + else if (((lccr0 & LCCR0_CMS) == LCCR0_Mono && + ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_DPD) == LCCR0_8PixMono)) || + ((lccr0 & LCCR0_CMS) == LCCR0_Color && +- (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl)) ++ (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl)) { + ldd_bits = 8; +- ++ } + /* 16 bit interface */ +- else if ((lccr0 & LCCR0_CMS) == LCCR0_Color && +- ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act)) +- ldd_bits = 16; ++ else if ((lccr0 & LCCR0_CMS) == LCCR0_Color && ++ ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act)) { ++ switch (fbi->fb.var.bits_per_pixel) { ++ case 16: ++#ifdef CONFIG_PXA27x ++ /* bits 58-77 */ ++ GPDR1 |= (0x3f << 26); ++ GPDR2 |= 0x00003fff; + ++ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20); ++ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa; ++#endif ++ ldd_bits = 16; ++ break; ++ case 18: ++ case 19: ++ case 24: ++ case 25: ++#ifdef CONFIG_PXA27x ++ /* bits 58-77 and 86, 87 */ ++ GPDR1 |= (0x3f << 26); ++ GPDR2 |= 0x00c03fff; ++ ++ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20); ++ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa; ++ GAFR2_U = (GAFR2_U & 0xffff0fff) | 0xa000; ++#endif ++ ldd_bits = 25; ++ break; ++ } ++ } + else { + printk(KERN_ERR "pxafb_setup_gpio: unable to determine bits per pixel\n"); + return; + } + +- for (gpio = 58; ldd_bits; gpio++, ldd_bits--) ++ for (gpio = 58; ldd_bits > 0; gpio++, ldd_bits--) { + pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT); ++ } + pxa_gpio_mode(GPIO74_LCD_FCLK_MD); + pxa_gpio_mode(GPIO75_LCD_LCLK_MD); + pxa_gpio_mode(GPIO76_LCD_PCLK_MD); +@@ -837,6 +942,7 @@ + /* enable LCD controller clock */ + clk_enable(fbi->clk); + ++ down(&fcs_lcd_sem); + /* Sequence from 11.7.10 */ + LCCR3 = fbi->reg_lccr3; + LCCR2 = fbi->reg_lccr2; +@@ -847,6 +953,8 @@ + FDADR1 = fbi->fdadr1; + LCCR0 |= LCCR0_ENB; + ++ up(&fcs_lcd_sem); ++ + pr_debug("FDADR0 0x%08x\n", (unsigned int) FDADR0); + pr_debug("FDADR1 0x%08x\n", (unsigned int) FDADR1); + pr_debug("LCCR0 0x%08x\n", (unsigned int) LCCR0); +@@ -862,6 +970,7 @@ + + pr_debug("pxafb: disabling LCD controller\n"); + ++ down(&fcs_lcd_sem); + set_current_state(TASK_UNINTERRUPTIBLE); + add_wait_queue(&fbi->ctrlr_wait, &wait); + +@@ -871,6 +980,7 @@ + + schedule_timeout(200 * HZ / 1000); + remove_wait_queue(&fbi->ctrlr_wait, &wait); ++ up(&fcs_lcd_sem); + + /* disable LCD controller clock */ + clk_disable(fbi->clk); +@@ -888,6 +998,11 @@ + LCCR0 |= LCCR0_LDM; + wake_up(&fbi->ctrlr_wait); + } ++ if (lcsr & LCSR_EOF && fcs_in_eof) { ++ LCCR0 |= LCCR0_EFM; ++ fcs_in_eof = 0; ++ wake_up(&fcs_wait_eof); ++ } + + LCSR = lcsr; + return IRQ_HANDLED; +@@ -898,7 +1013,7 @@ + * sleep when disabling the LCD controller, or if we get two contending + * processes trying to alter state. + */ +-static void set_ctrlr_state(struct pxafb_info *fbi, u_int state) ++void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state) + { + u_int old_state; + +@@ -920,7 +1035,9 @@ + */ + if (old_state != C_DISABLE && old_state != C_DISABLE_PM) { + fbi->state = state; +- //TODO __pxafb_lcd_power(fbi, 0); ++ /* TODO __pxafb_lcd_power(fbi, 0); */ ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE); + pxafb_disable_controller(fbi); + } + break; +@@ -934,6 +1051,8 @@ + fbi->state = state; + __pxafb_backlight_power(fbi, 0); + __pxafb_lcd_power(fbi, 0); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE); + if (old_state != C_DISABLE_CLKCHANGE) + pxafb_disable_controller(fbi); + } +@@ -947,7 +1066,9 @@ + if (old_state == C_DISABLE_CLKCHANGE) { + fbi->state = C_ENABLE; + pxafb_enable_controller(fbi); +- //TODO __pxafb_lcd_power(fbi, 1); ++ /* TODO __pxafb_lcd_power(fbi, 1); */ ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE); + } + break; + +@@ -959,9 +1080,13 @@ + */ + if (old_state == C_ENABLE) { + __pxafb_lcd_power(fbi, 0); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE); + pxafb_disable_controller(fbi); + pxafb_setup_gpio(fbi); + pxafb_enable_controller(fbi); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE); + __pxafb_lcd_power(fbi, 1); + } + break; +@@ -987,11 +1112,46 @@ + pxafb_enable_controller(fbi); + __pxafb_lcd_power(fbi, 1); + __pxafb_backlight_power(fbi, 1); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE); + } + break; ++ ++ case C_BLANK: ++ /* ++ * Disable controller, blank overlays if exist. ++ */ ++ if ((old_state != C_DISABLE) && (old_state != C_BLANK)) { ++ fbi->state = state; ++ __pxafb_backlight_power(fbi, 0); ++ __pxafb_lcd_power(fbi, 0); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_BLANK); ++ if (old_state != C_DISABLE_CLKCHANGE) ++ pxafb_disable_controller(fbi); ++ } ++ break; ++ ++ case C_UNBLANK: ++ /* ++ * Power up the LCD screen, enable controller, and ++ * turn on the backlight, unblank overlays if exist. ++ */ ++ if ((old_state != C_ENABLE) && (old_state != C_UNBLANK)) { ++ fbi->state = C_UNBLANK; ++ pxafb_setup_gpio(fbi); ++ pxafb_enable_controller(fbi); ++ __pxafb_lcd_power(fbi, 1); ++ __pxafb_backlight_power(fbi, 1); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_UNBLANK); ++ } ++ break; ++ + } + up(&fbi->ctrlr_sem); + } ++EXPORT_SYMBOL(pxafb_set_ctrlr_state); + + /* + * Our LCD controller task (which is called when we blank or unblank) +@@ -1003,7 +1163,7 @@ + container_of(work, struct pxafb_info, task); + u_int state = xchg(&fbi->task_state, -1); + +- set_ctrlr_state(fbi, state); ++ pxafb_set_ctrlr_state(fbi, state); + } + + #ifdef CONFIG_CPU_FREQ +@@ -1018,19 +1178,29 @@ + pxafb_freq_transition(struct notifier_block *nb, unsigned long val, void *data) + { + struct pxafb_info *fbi = TO_INF(nb, freq_transition); +- //TODO struct cpufreq_freqs *f = data; ++ /* TODO struct cpufreq_freqs *f = data; */ ++ struct cpufreq_freqs *clkinfo; + u_int pcd; ++ u_int lccr3; + + switch (val) { + case CPUFREQ_PRECHANGE: +- set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE); ++ pxafb_set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE); + break; + + case CPUFREQ_POSTCHANGE: +- pcd = get_pcd(fbi, fbi->fb.var.pixclock); ++ clkinfo = (struct cpufreq_freqs *)data; ++ /* If leaving a 13kHz state with the LCD sustained */ ++ if ((clkinfo->old == 13000)) ++ break; ++ ++ pcd = get_pcd(fbi->fb.var.pixclock); ++ lccr3 = fbi->reg_lccr3; + set_hsync_time(fbi, pcd); + fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd); +- set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE); ++ pxafb_set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE); ++ if (lccr3 != fbi->reg_lccr3 && !((LCCR0 & LCCR0_DIS) || !(LCCR0 & LCCR0_ENB))) ++ LCCR3 = fbi->reg_lccr3; + break; + } + return 0; +@@ -1049,7 +1219,7 @@ + printk(KERN_DEBUG "min dma period: %d ps, " + "new clock %d kHz\n", pxafb_display_dma_period(var), + policy->max); +- // TODO: fill in min/max values ++ /* TODO: fill in min/max values */ + break; + #if 0 + case CPUFREQ_NOTIFY: +@@ -1075,7 +1245,7 @@ + { + struct pxafb_info *fbi = platform_get_drvdata(dev); + +- set_ctrlr_state(fbi, C_DISABLE_PM); ++ pxafb_set_ctrlr_state(fbi, C_DISABLE_PM); + return 0; + } + +@@ -1083,7 +1253,11 @@ + { + struct pxafb_info *fbi = platform_get_drvdata(dev); + +- set_ctrlr_state(fbi, C_ENABLE_PM); ++ pxafb_set_ctrlr_state(fbi, C_ENABLE_PM); ++//RP#ifdef CONFIG_PXA27x ++//RP LCCR4 |= (1 << 31); /* Disable the PCD Divisor, PCDDIV */ ++//RP LCCR4 |= (5 << 17); /* Undocumented feature */ ++//RP#endif + return 0; + } + #else +@@ -1197,11 +1371,21 @@ + fbi->task_state = (u_char)-1; + + for (i = 0; i < inf->num_modes; i++) { +- smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8; ++ if (mode[i].bpp <= 16) { /* 8, 16 bpp */ ++ smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8; ++ } else if ( mode[i].bpp > 19 ) { /* 24, 25 bpp */ ++ smemlen = mode[i].xres * mode[i].yres * 4; ++ } else { /* 18, 19 bpp */ ++ /* packed format */ ++ smemlen = mode[i].xres * mode[i].yres * 3; ++ } ++ + if (smemlen > fbi->fb.fix.smem_len) + fbi->fb.fix.smem_len = smemlen; + } + ++ fbi->set_overlay_ctrlr_state = NULL; ++ + init_waitqueue_head(&fbi->ctrlr_wait); + INIT_WORK(&fbi->task, pxafb_task); + init_MUTEX(&fbi->ctrlr_sem); +@@ -1268,6 +1452,10 @@ + case 4: + case 8: + case 16: ++ case 18: ++ case 19: ++ case 24: ++ case 25: + inf->modes[0].bpp = bpp; + dev_info(dev, "overriding bit depth: %d\n", bpp); + break; +@@ -1416,7 +1604,7 @@ + fbi = pxafb_init_fbinfo(&dev->dev); + if (!fbi) { + dev_err(&dev->dev, "Failed to initialize framebuffer device\n"); +- ret = -ENOMEM; // only reason for pxafb_init_fbinfo to fail is kmalloc ++ ret = -ENOMEM; /* only reason for pxafb_init_fbinfo to fail is kmalloc */ + goto failed; + } + +@@ -1451,7 +1639,7 @@ + } + + #ifdef CONFIG_PM +- // TODO ++ /* TODO */ + #endif + + #ifdef CONFIG_CPU_FREQ +@@ -1464,7 +1652,12 @@ + /* + * Ok, now enable the LCD controller + */ +- set_ctrlr_state(fbi, C_ENABLE); ++ pxafb_set_ctrlr_state(fbi, C_ENABLE); ++//#ifdef CONFIG_PXA27x ++// LCCR4 |= (1 << 31); /* Disabel the PCD Divisor, PCDDIV */ ++// LCCR4 |= (5 << 17); /* Undocumented feature */ ++//#endif ++ init_waitqueue_head(&fcs_wait_eof); + + return 0; + +Index: linux-2.6.24/drivers/video/pxafb.h +=================================================================== +--- linux-2.6.24.orig/drivers/video/pxafb.h ++++ linux-2.6.24/drivers/video/pxafb.h +@@ -29,6 +29,60 @@ + unsigned int lccr3; + }; + ++struct pxafb_rgb { ++ struct fb_bitfield red; ++ struct fb_bitfield green; ++ struct fb_bitfield blue; ++ struct fb_bitfield transp; ++}; ++ ++#ifdef CONFIG_PXA27x ++/* PXA Overlay Framebuffer Support */ ++struct overlayfb_info ++{ ++ struct fb_info fb; ++ ++ struct fb_var_screeninfo old_var; ++ ++ struct semaphore mutex; ++ unsigned long refcount; ++ ++ struct pxafb_info *basefb; ++ ++ unsigned long map_cpu; ++ unsigned long screen_cpu; ++ unsigned long palette_cpu; ++ unsigned long map_size; ++ unsigned long palette_size; ++ ++ dma_addr_t screen_dma; ++ dma_addr_t map_dma; ++ dma_addr_t palette_dma; ++ ++ volatile u_char state; ++ ++ /* overlay specific info */ ++ unsigned long xpos; /* screen position (x, y)*/ ++ unsigned long ypos; ++ unsigned long format; ++ ++ /* additional */ ++ union { ++ struct pxafb_dma_descriptor *dma0; ++ struct pxafb_dma_descriptor *dma1; ++ struct { ++ struct pxafb_dma_descriptor *dma2; ++ struct pxafb_dma_descriptor *dma3; ++ struct pxafb_dma_descriptor *dma4; ++ }; ++ struct { ++ struct pxafb_dma_descriptor *dma5_pal; ++ struct pxafb_dma_descriptor *dma5_frame; ++ }; ++ }; ++}; ++#endif ++ + /* PXA LCD DMA descriptor */ + struct pxafb_dma_descriptor { + unsigned int fdadr; +@@ -90,6 +144,14 @@ + wait_queue_head_t ctrlr_wait; + struct work_struct task; + ++#ifdef CONFIG_PXA27x ++ /* PXA Overlay Framebuffer Support */ ++ struct overlayfb_info *overlay1fb; ++ struct overlayfb_info *overlay2fb; ++ struct overlayfb_info *cursorfb; ++#endif ++ void (*set_overlay_ctrlr_state)(struct pxafb_info *, u_int); ++ + #ifdef CONFIG_CPU_FREQ + struct notifier_block freq_transition; + struct notifier_block freq_policy; +@@ -109,6 +171,9 @@ + #define C_DISABLE_PM (5) + #define C_ENABLE_PM (6) + #define C_STARTUP (7) ++#define C_BLANK (8) ++#define C_UNBLANK (9) ++ + + #define PXA_NAME "PXA" + +Index: linux-2.6.24/drivers/video/pxafb_overlay.c +=================================================================== +--- /dev/null ++++ linux-2.6.24/drivers/video/pxafb_overlay.c +@@ -0,0 +1,1525 @@ ++/* ++ * linux/drivers/video/pxafb_overlay.c ++ * ++ * Copyright (c) 2004, Intel Corporation ++ * ++ * Code Status: ++ * 2004/10/28: ++ * - Ported to 2.6 kernel ++ * - Made overlay driver a loadable module ++ * - Merged overlay optimized patch ++ * 2004/03/10: ++ * - Fixed Bugs ++ * - Added workaround for overlay1&2 ++ * 2003/08/27: ++ * - Added Overlay 1 & Overlay2 & Hardware Cursor support ++ * ++ * ++ * This software program is licensed subject to the GNU Lesser General ++ * Public License (LGPL). Version 2.1, February 1999, available at ++ * http://www.gnu.org/copyleft/lesser.html ++ * ++ * Intel PXA27x LCD Controller Frame Buffer Overlay Driver ++ * ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "pxafb.h" ++ ++/* LCD enhancement : Overlay 1 & 2 & Hardware Cursor */ ++ ++/* ++ * LCD enhancement : Overlay 1 ++ * ++ * Features: ++ * - support 16bpp (No palette) ++ */ ++/* ++ * debugging? ++ */ ++#define DEBUG 0 ++ ++#ifdef DEBUG ++#define dbg(fmt,arg...) printk(KERN_ALERT "%s(): " fmt "\n", __FUNCTION__, ##arg) ++#else ++#define dbg(fmt,arg...) ++#endif ++ ++static int overlay1fb_enable(struct fb_info *info); ++static int overlay2fb_enable(struct fb_info *info); ++static int cursorfb_enable(struct fb_info *info); ++ ++static int overlay1fb_disable(struct fb_info *info); ++static int overlay2fb_disable(struct fb_info *info); ++static int cursorfb_disable(struct fb_info *info); ++ ++static int overlay1fb_blank(int blank, struct fb_info *info); ++static int overlay2fb_blank(int blank, struct fb_info *info); ++static int cursorfb_blank(int blank, struct fb_info *info); ++ ++extern void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state); ++extern int pxafb_blank(int blank, struct fb_info *info); ++ ++static struct pxafb_rgb def_rgb_18 = { ++ red: { offset: 12, length: 6, }, ++ green: { offset: 6, length: 6, }, ++ blue: { offset: 0, length: 6, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgbt_16 = { ++ red: { offset: 10, length: 5, }, ++ green: { offset: 5, length: 5, }, ++ blue: { offset: 0, length: 5, }, ++ transp: { offset: 15, length: 1, }, ++}; ++ ++static struct pxafb_rgb def_rgbt_19 = { ++ red: { offset: 12, length: 6, }, ++ green: { offset: 6, length: 6, }, ++ blue: { offset: 0, length: 6, }, ++ transp: { offset: 18, length: 1, }, ++}; ++ ++static struct pxafb_rgb def_rgbt_24 = { ++ red: { offset: 16, length: 7, }, ++ green: { offset: 8, length: 8, }, ++ blue: { offset: 0, length: 8, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgbt_25 = { ++ red: { offset: 16, length: 8, }, ++ green: { offset: 8, length: 8, }, ++ blue: { offset: 0, length: 8, }, ++ transp: { offset: 24, length: 1, }, ++}; ++ ++#define CLEAR_LCD_INTR(reg, intr) do { \ ++ reg = (intr); \ ++}while(0) ++ ++#define WAIT_FOR_LCD_INTR(reg,intr,timeout) ({ \ ++ int __done =0; \ ++ int __t = timeout; \ ++ while (__t) { \ ++ __done = (reg) & (intr); \ ++ if (__done) break; \ ++ mdelay(10); \ ++ __t--; \ ++ } \ ++ if (!__t) dbg("wait " #intr " timeount");\ ++ __done; \ ++}) ++ ++#define DISABLE_OVERLAYS(fbi) do { \ ++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \ ++ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \ ++ } \ ++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \ ++ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \ ++ } \ ++ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \ ++ cursorfb_disable((struct fb_info*)fbi->cursorfb); \ ++ } \ ++}while(0) ++ ++#define ENABLE_OVERLAYS(fbi) do { \ ++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_DISABLE)) { \ ++ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \ ++ } \ ++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_DISABLE)) { \ ++ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \ ++ } \ ++ if (fbi->cursorfb && (fbi->cursorfb->state == C_DISABLE)) { \ ++ cursorfb_enable((struct fb_info*)fbi->cursorfb); \ ++ } \ ++}while(0) ++ ++#define BLANK_OVERLAYS(fbi) do { \ ++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \ ++ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \ ++ fbi->overlay1fb->state = C_BLANK; \ ++ } \ ++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \ ++ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \ ++ fbi->overlay2fb->state = C_BLANK; \ ++ } \ ++ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \ ++ cursorfb_disable((struct fb_info*)fbi->cursorfb); \ ++ fbi->cursorfb->state = C_BLANK; \ ++ } \ ++}while(0) ++ ++#define UNBLANK_OVERLAYS(fbi) do { \ ++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_BLANK)) { \ ++ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \ ++ fbi->overlay1fb->state = C_ENABLE; \ ++ } \ ++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_BLANK)) { \ ++ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \ ++ fbi->overlay2fb->state = C_ENABLE; \ ++ } \ ++ if (fbi->cursorfb && (fbi->cursorfb->state == C_BLANK)) { \ ++ cursorfb_enable((struct fb_info*)fbi->cursorfb); \ ++ fbi->cursorfb->state = C_ENABLE; \ ++ } \ ++}while(0) ++ ++static int overlay1fb_open(struct fb_info *info, int user) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ int ret = 0; ++ ++/* If basefb is disable, enable fb. */ ++ if (fbi->basefb && fbi->basefb->state != C_ENABLE) ++ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb)); ++ ++ down(&fbi->mutex); ++ ++ if (fbi->refcount) ++ ret = -EACCES; ++ else ++ fbi->refcount ++; ++ ++ up(&fbi->mutex); ++ ++ /* Initialize the variables in overlay1 framebuffer. */ ++ fbi->fb.var.xres = fbi->fb.var.yres = 0; ++ fbi->fb.var.bits_per_pixel = 0; ++ ++ return ret; ++} ++ ++static int overlay1fb_release(struct fb_info *info, int user) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ down(&fbi->mutex); ++ ++ if (fbi->refcount) ++ fbi->refcount --; ++ ++ up(&fbi->mutex); ++ /* disable overlay when released */ ++ overlay1fb_blank(1, info); ++ ++ return 0; ++} ++ ++static int overlay1fb_map_video_memory(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ ++ if (fbi->map_cpu) ++ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma); ++ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); ++ ++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, ++ &fbi->map_dma, GFP_KERNEL ); ++ ++ if (!fbi->map_cpu) return -ENOMEM; ++ ++ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE; ++ fbi->screen_dma = fbi->map_dma + PAGE_SIZE; ++ ++ fbi->fb.fix.smem_start = fbi->screen_dma; ++ ++ /* setup dma descriptor */ ++ fbi->dma1 = (struct pxafb_dma_descriptor*) ++ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor)); ++ ++ fbi->dma1->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma1->fsadr = fbi->screen_dma; ++ fbi->dma1->fidr = 0; ++ fbi->dma1->ldcmd = fbi->fb.fix.smem_len; ++ ++ return 0; ++} ++ ++static int overlay1fb_enable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ unsigned long bpp1; ++ ++ if (!fbi->map_cpu) return -EINVAL; ++ ++ switch (fbi->fb.var.bits_per_pixel) { ++ case 16: ++ bpp1 = 0x4; ++ break; ++ case 18: ++ bpp1 = 0x6; ++ break; ++ case 19: ++ bpp1 = 0x8; ++ break; ++ case 24: ++ bpp1 = 0x9; ++ break; ++ case 25: ++ bpp1 = 0xa; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ /* disable branch/start/end of frame interrupt */ ++ LCCR5 |= (LCCR5_IUM1 | LCCR5_BSM1 | LCCR5_EOFM1 | LCCR5_SOFM1); ++ ++ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) ++ FDADR1 = (fbi->dma1->fdadr); ++ else ++ FBR1 = fbi->dma1->fdadr | 0x1; ++ ++ /* enable overlay 1 window */ ++ OVL1C2 = (fbi->ypos << 10) | fbi->xpos; ++ OVL1C1 = OVL1C1_O1EN | (bpp1 << 20) | ((fbi->fb.var.yres-1)<<10) | (fbi->fb.var.xres-1); ++ ++ fbi->state = C_ENABLE; ++ ++ return 0; ++} ++ ++static int overlay1fb_disable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*)info; ++ int done; ++ ++ if ((fbi->state == C_DISABLE) || (fbi->state == C_BLANK)) ++ return 0; ++ ++ fbi->state = C_DISABLE; ++ ++ /* clear O1EN */ ++ OVL1C1 &= ~OVL1C1_O1EN; ++ ++ CLEAR_LCD_INTR(LCSR1, LCSR1_BS1); ++ FBR1 = 0x3; ++ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS1, 100); ++ ++ if (!done) { ++ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__); ++ return -1; ++ } ++ return 0; ++} ++ ++static int overlay1fb_blank(int blank, struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ int err=0; ++ ++ switch (blank) { ++ case 0: ++ err = overlay1fb_enable(info); ++ if (err) { ++ fbi->state = C_DISABLE; ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ } ++ break; ++ case 1: ++ err = overlay1fb_disable(info); ++ if (err) { ++ fbi->state = C_DISABLE; ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ } ++ break; ++ default: ++ break; ++ } ++ ++ return err; ++} ++ ++static int overlay1fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info) ++{ ++ int xpos, ypos; ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ ++ /* must in base frame */ ++ xpos = (var->nonstd & 0x3ff); ++ ypos = ((var->nonstd>>10) & 0x3ff); ++ ++ if ( (xpos + var->xres) > fbi->basefb->fb.var.xres ) ++ return -EINVAL; ++ ++ if ( (ypos + var->yres) > fbi->basefb->fb.var.yres ) ++ return -EINVAL; ++ ++ switch (var->bits_per_pixel) { ++ case 16: ++ if ( var->xres & 0x1 ) { ++ printk("xres should be a multiple of 2 pixels!\n"); ++ return -EINVAL; ++ } ++ break; ++ case 18: ++ case 19: ++ if ( var->xres & 0x7 ) { ++ printk("xres should be a multiple of 8 pixels!\n"); ++ return -EINVAL; ++ } ++ break; ++ default: ++ break; ++ } ++ ++ fbi->old_var=*var; ++ ++ var->activate=FB_ACTIVATE_NOW; ++ ++ return 0; ++} ++ ++ ++static int overlay1fb_set_par(struct fb_info *info) ++{ ++ int nbytes=0, err=0, pixels_per_line=0; ++ ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ struct fb_var_screeninfo *var = &fbi->fb.var; ++ ++ info->flags &= ~FBINFO_MISC_USEREVENT; ++ ++ if (fbi->state == C_BLANK) ++ return 0; ++ ++ if (fbi->state == C_DISABLE) ++ goto out1; ++ ++ /* only xpos & ypos change */ ++ if ( (var->xres == fbi->old_var.xres) && ++ (var->yres == fbi->old_var.yres) && ++ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) ) ++ goto out2; ++ ++out1: ++ switch(var->bits_per_pixel) { ++ case 16: ++ /* 2 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1); ++ nbytes = 2; ++ ++ var->red = def_rgbt_16.red; ++ var->green = def_rgbt_16.green; ++ var->blue = def_rgbt_16.blue; ++ var->transp = def_rgbt_16.transp; ++ ++ break; ++ case 18: ++ /* 8 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); ++ nbytes = 3; ++ ++ var->red = def_rgb_18.red; ++ var->green = def_rgb_18.green; ++ var->blue = def_rgb_18.blue; ++ var->transp = def_rgb_18.transp; ++ ++ break; ++ case 19: ++ /* 8 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); ++ nbytes = 3; ++ ++ var->red = def_rgbt_19.red; ++ var->green = def_rgbt_19.green; ++ var->blue = def_rgbt_19.blue; ++ var->transp = def_rgbt_19.transp; ++ ++ break; ++ case 24: ++ pixels_per_line = fbi->fb.var.xres; ++ nbytes = 4; ++ ++ var->red = def_rgbt_24.red; ++ var->green = def_rgbt_24.green; ++ var->blue = def_rgbt_24.blue; ++ var->transp = def_rgbt_24.transp; ++ ++ break; ++ case 25: ++ pixels_per_line = fbi->fb.var.xres; ++ nbytes = 4; ++ ++ var->red = def_rgbt_25.red; ++ var->green = def_rgbt_25.green; ++ var->blue = def_rgbt_25.blue; ++ var->transp = def_rgbt_25.transp; ++ ++ break; ++ } ++ ++ fbi->fb.fix.line_length = nbytes * pixels_per_line; ++ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres; ++ ++ err= overlay1fb_map_video_memory((struct fb_info*)fbi); ++ ++ if (err) ++ return err; ++ ++out2: ++ fbi->xpos = var->nonstd & 0x3ff; ++ fbi->ypos = (var->nonstd>>10) & 0x3ff; ++ ++ overlay1fb_enable(info); ++ ++ return 0; ++ ++} ++ ++static struct fb_ops overlay1fb_ops = { ++ .owner = THIS_MODULE, ++ .fb_open = overlay1fb_open, ++ .fb_release = overlay1fb_release, ++ .fb_check_var = overlay1fb_check_var, ++ .fb_set_par = overlay1fb_set_par, ++ .fb_blank = overlay1fb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++}; ++ ++ /* ++ * LCD enhancement : Overlay 2 ++ * ++ * Features: ++ * - support planar YCbCr420/YCbCr422/YCbCr444; ++ */ ++static int overlay2fb_open(struct fb_info *info, int user) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ int ret = 0; ++ ++ /* if basefb is disable, enable fb. */ ++ if (fbi->basefb && fbi->basefb->state != C_ENABLE) ++ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb)); ++ ++ down(&fbi->mutex); ++ ++ if (fbi->refcount) ++ ret = -EACCES; ++ else ++ fbi->refcount ++; ++ ++ up(&fbi->mutex); ++ fbi->fb.var.xres = fbi->fb.var.yres = 0; ++ ++ return ret; ++} ++ ++static int overlay2fb_release(struct fb_info *info, int user) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ ++ down(&fbi->mutex); ++ ++ if (fbi->refcount) ++ fbi->refcount --; ++ ++ up(&fbi->mutex); ++ ++ /* disable overlay when released */ ++ overlay2fb_blank(1, info); ++ ++ return 0; ++} ++ ++static int overlay2fb_map_YUV_memory( struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ unsigned int ylen, cblen, crlen, aylen, acblen, acrlen; ++ unsigned int yoff, cboff, croff; ++ unsigned int xres,yres; ++ unsigned int nbytes; ++ ++ ylen = cblen = crlen = aylen = acblen = acrlen = 0; ++ yoff = cboff = croff = 0; ++ ++ if (fbi->map_cpu) ++ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma); ++ ++ yres = fbi->fb.var.yres; ++ ++ switch(fbi->format) { ++ case 0x4: /* YCbCr 4:2:0 planar */ ++ pr_debug("420 planar\n"); ++ /* 16 pixels per line */ ++ xres = (fbi->fb.var.xres + 0xf) & (~0xf); ++ fbi->fb.fix.line_length = xres; ++ ++ nbytes = xres * yres; ++ ylen = nbytes; ++ cblen = crlen = (nbytes/4); ++ ++ break; ++ case 0x3: /* YCbCr 4:2:2 planar */ ++ /* 8 pixles per line */ ++ pr_debug("422 planar\n"); ++ xres = (fbi->fb.var.xres + 0x7) & (~0x7); ++ fbi->fb.fix.line_length = xres; ++ ++ nbytes = xres * yres; ++ ylen = nbytes; ++ cblen = crlen = (nbytes/2); ++ ++ break; ++ case 0x2: /* YCbCr 4:4:4 planar */ ++ /* 4 pixels per line */ ++ pr_debug("444 planar\n"); ++ xres = (fbi->fb.var.xres + 0x3) & (~0x3); ++ fbi->fb.fix.line_length = xres; ++ ++ nbytes = xres * yres; ++ ylen = cblen = crlen = nbytes; ++ break; ++ } ++ ++ /* 16-bytes alignment for DMA */ ++ aylen = (ylen + 0xf) & (~0xf); ++ acblen = (cblen + 0xf) & (~0xf); ++ acrlen = (crlen + 0xf) & (~0xf); ++ ++ fbi->fb.fix.smem_len = aylen + acblen + acrlen; ++ ++ /* alloc memory */ ++ ++ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); ++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, ++ &fbi->map_dma, GFP_KERNEL ); ++ ++ if (!fbi->map_cpu) return -ENOMEM; ++ ++ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE; ++ fbi->screen_dma = fbi->map_dma + PAGE_SIZE; ++ ++ fbi->fb.fix.smem_start = fbi->screen_dma; ++ ++ /* setup dma for Planar format */ ++ fbi->dma2 = (struct pxafb_dma_descriptor*) ++ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma3 = fbi->dma2 - 1; ++ fbi->dma4 = fbi->dma3 - 1; ++ ++ /* offset */ ++ yoff = 0; ++ cboff = aylen; ++ croff = cboff + acblen; ++ ++ /* Y vector */ ++ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma2->fsadr = fbi->screen_dma + yoff; ++ fbi->dma2->fidr = 0; ++ fbi->dma2->ldcmd = ylen; ++ ++ /* Cb vector */ ++ fbi->dma3->fdadr = (fbi->dma2->fdadr - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma3->fsadr = (fbi->screen_dma + cboff); ++ fbi->dma3->fidr = 0; ++ fbi->dma3->ldcmd = cblen; ++ ++ /* Cr vector */ ++ ++ fbi->dma4->fdadr = (fbi->dma3->fdadr - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma4->fsadr = (fbi->screen_dma + croff); ++ fbi->dma4->fidr = 0; ++ fbi->dma4->ldcmd = crlen; ++ ++ /* adjust for user */ ++ fbi->fb.var.red.length = ylen; ++ fbi->fb.var.red.offset = yoff; ++ fbi->fb.var.green.length = cblen; ++ fbi->fb.var.green.offset = cboff; ++ fbi->fb.var.blue.length = crlen; ++ fbi->fb.var.blue.offset = croff; ++ ++ return 0; ++}; ++ ++static int overlay2fb_map_RGB_memory( struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ struct fb_var_screeninfo *var = &fbi->fb.var; ++ int pixels_per_line=0 , nbytes=0; ++ ++ if (fbi->map_cpu) ++ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma); ++ ++ switch(var->bits_per_pixel) { ++ case 16: ++ /* 2 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1); ++ nbytes = 2; ++ ++ var->red = def_rgbt_16.red; ++ var->green = def_rgbt_16.green; ++ var->blue = def_rgbt_16.blue; ++ var->transp = def_rgbt_16.transp; ++ break; ++ ++ case 18: ++ /* 8 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); ++ nbytes = 3; ++ ++ var->red = def_rgb_18.red; ++ var->green = def_rgb_18.green; ++ var->blue = def_rgb_18.blue; ++ var->transp = def_rgb_18.transp; ++ ++ break; ++ case 19: ++ /* 8 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); ++ nbytes = 3; ++ ++ var->red = def_rgbt_19.red; ++ var->green = def_rgbt_19.green; ++ var->blue = def_rgbt_19.blue; ++ var->transp = def_rgbt_19.transp; ++ ++ break; ++ case 24: ++ pixels_per_line = fbi->fb.var.xres; ++ nbytes = 4; ++ ++ var->red = def_rgbt_24.red; ++ var->green = def_rgbt_24.green; ++ var->blue = def_rgbt_24.blue; ++ var->transp = def_rgbt_24.transp; ++ ++ break; ++ ++ case 25: ++ pixels_per_line = fbi->fb.var.xres; ++ nbytes = 4; ++ ++ var->red = def_rgbt_25.red; ++ var->green = def_rgbt_25.green; ++ var->blue = def_rgbt_25.blue; ++ var->transp = def_rgbt_25.transp; ++ ++ break; ++ } ++ ++ fbi->fb.fix.line_length = nbytes * pixels_per_line; ++ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres; ++ ++ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); ++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, ++ &fbi->map_dma, GFP_KERNEL ); ++ ++ if (!fbi->map_cpu) return -ENOMEM; ++ ++ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE; ++ fbi->screen_dma = fbi->map_dma + PAGE_SIZE; ++ ++ fbi->fb.fix.smem_start = fbi->screen_dma; ++ ++ /* setup dma descriptor */ ++ fbi->dma2 = (struct pxafb_dma_descriptor*) ++ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor)); ++ ++ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma2->fsadr = fbi->screen_dma; ++ fbi->dma2->fidr = 0; ++ fbi->dma2->ldcmd = fbi->fb.fix.smem_len; ++ ++ return 0; ++} ++ ++static int overlay2fb_enable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ unsigned long bpp2; ++ unsigned int xres, yres; ++ ++ if (!fbi->map_cpu) return -EINVAL; ++ ++ switch(fbi->fb.var.bits_per_pixel) { ++ case 16: ++ bpp2 = 0x4; ++ break; ++ case 18: ++ bpp2 = 0x6; ++ break; ++ case 19: ++ bpp2 = 0x8; ++ break; ++ case 24: ++ bpp2 = 0x9; ++ break; ++ case 25: ++ bpp2 = 0xa; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ /* disable branch/start/end of frame interrupt */ ++ LCCR5 |= (LCCR5_IUM4 | LCCR5_IUM3 | LCCR5_IUM2 | ++ LCCR5_BSM4 | LCCR5_BSM3 | LCCR5_BSM2 | ++ LCCR5_EOFM4 | LCCR5_EOFM3 | LCCR5_EOFM2 | ++ LCCR5_SOFM4 | LCCR5_SOFM3 | LCCR5_SOFM2); ++ ++ if (fbi->format == 0) { ++ /* overlay2 RGB resolution, RGB and YUV have different xres value*/ ++ xres = fbi->fb.var.xres; ++ yres = fbi->fb.var.yres; ++ ++ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos; ++ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1); ++ /* setup RGB DMA */ ++ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) ++ FDADR2 = fbi->dma2->fdadr; ++ else ++ FBR2 = fbi->dma2->fdadr | 0x1; ++ } else { ++ /* overlay2 YUV resolution */ ++ xres = fbi->fb.fix.line_length; ++ yres = fbi->fb.var.yres; ++ ++ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos; ++ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1); ++ ++ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) { ++ FDADR2 = fbi->dma2->fdadr; ++ FDADR3 = fbi->dma3->fdadr; ++ FDADR4 = fbi->dma4->fdadr; ++ } else { ++ FBR2 = fbi->dma2->fdadr | 0x01; ++ FBR3 = fbi->dma3->fdadr | 0x01; ++ FBR4 = fbi->dma4->fdadr | 0x01; ++ } ++ } ++ ++ fbi->state = C_ENABLE; ++ return 0; ++} ++ ++static int overlay2fb_disable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*)info; ++ int done; ++ ++ if (fbi->state == C_DISABLE) ++ return 0; ++ if (fbi->state == C_BLANK) { ++ fbi->state = C_DISABLE; ++ return 0; ++ } ++ ++ fbi->state = C_DISABLE; ++ ++ /* clear O2EN */ ++ OVL2C1 &= ~OVL2C1_O2EN; ++ ++ /* Make overlay2 can't disable/enable ++ * correctly sometimes. ++ */ ++ CLEAR_LCD_INTR(LCSR1, LCSR1_BS2); ++ ++ if (fbi->format == 0) ++ FBR2 = 0x3; ++ else { ++ FBR2 = 0x3; ++ FBR3 = 0x3; ++ FBR4 = 0x3; ++ } ++ ++ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS2, 100); ++ ++ if (!done) { ++ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__); ++ return -1; ++ } ++ return 0; ++} ++ ++static int overlay2fb_blank(int blank, struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ int err=0; ++ ++ switch(blank) ++ { ++ case 0: ++ err = overlay2fb_enable(info); ++ if (err) { ++ fbi->state = C_DISABLE; ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ } ++ break; ++ case 1: ++ err = overlay2fb_disable(info); ++ if (err) { ++ fbi->state = C_DISABLE; ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ } ++ break; ++ default: ++ /* reserved */ ++ break; ++ } ++ ++ return err; ++} ++ ++ ++static int overlay2fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info) ++{ ++ int xpos, ypos, xres, yres; ++ int format; ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ ++ xres=yres=0; ++ ++ xpos = (var->nonstd & 0x3ff); ++ ypos = (var->nonstd >> 10) & 0x3ff; ++ format = (var->nonstd >>20) & 0x7; ++ ++ ++ /* Palnar YCbCr444, YCbCr422, YCbCr420 */ ++ if ( (format != 0x4) && (format != 0x3) && (format != 0x2) && (format !=0x0)) ++ return -EINVAL; ++ ++ /* dummy pixels */ ++ switch(format) { ++ case 0x0: /* RGB */ ++ xres = var->xres; ++ break; ++ case 0x2: /* 444 */ ++ xres = (var->xres + 0x3) & ~(0x3); ++ break; ++ case 0x3: /* 422 */ ++ xres = (var->xres + 0x7) & ~(0x7); ++ break; ++ case 0x4: /* 420 */ ++ xres = (var->xres + 0xf) & ~(0xf); ++ break; ++ } ++ yres = var->yres; ++ ++ if ( (xpos + xres) > fbi->basefb->fb.var.xres ) ++ return -EINVAL; ++ ++ if ( (ypos + yres) > fbi->basefb->fb.var.yres ) ++ return -EINVAL; ++ ++ fbi->old_var=*var; ++ ++ var->activate=FB_ACTIVATE_NOW; ++ ++ return 0; ++ ++} ++ ++ ++/* ++ * overlay2fb_set_var() ++ * ++ * var.nonstd is used as YCbCr format. ++ * var.red/green/blue is used as (Y/Cb/Cr) vector ++ */ ++ ++static int overlay2fb_set_par(struct fb_info *info) ++{ ++ unsigned int xpos, ypos; ++ int format, err; ++ ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ struct fb_var_screeninfo *var = &fbi->fb.var; ++ ++ info->flags &= ~FBINFO_MISC_USEREVENT; ++ ++ if (fbi->state == C_BLANK) ++ return 0; ++ ++ if (fbi->state == C_DISABLE) ++ goto out1; ++ ++ if ( (var->xres == fbi->old_var.xres) && ++ (var->yres == fbi->old_var.yres) && ++ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) && ++ (((var->nonstd>>20) & 0x7) == fbi->format) ) ++ goto out2; ++ ++out1: ++ xpos = var->nonstd & 0x3ff; ++ ypos = (var->nonstd>>10) & 0x3ff; ++ format = (var->nonstd>>20) & 0x7; ++ ++ ++ fbi->format = format; ++ if ( fbi->format==0 ) ++ err = overlay2fb_map_RGB_memory(info); ++ else ++ err = overlay2fb_map_YUV_memory(info); ++ ++ if (err) return err; ++ ++out2: ++ /* position */ ++ fbi->xpos = var->nonstd & 0x3ff; ++ fbi->ypos = (var->nonstd>>10) & 0x3ff; ++ ++ overlay2fb_enable(info); ++ ++ return 0; ++} ++ ++static struct fb_ops overlay2fb_ops = { ++ .owner = THIS_MODULE, ++ .fb_open = overlay2fb_open, ++ .fb_release = overlay2fb_release, ++ .fb_check_var = overlay2fb_check_var, ++ .fb_set_par = overlay2fb_set_par, ++ .fb_blank = overlay2fb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++}; ++ ++/* Hardware cursor */ ++ ++/* Bulverde Cursor Modes */ ++struct cursorfb_mode{ ++ int xres; ++ int yres; ++ int bpp; ++}; ++ ++static struct cursorfb_mode cursorfb_modes[]={ ++ { 32, 32, 2}, ++ { 32, 32, 2}, ++ { 32, 32, 2}, ++ { 64, 64, 2}, ++ { 64, 64, 2}, ++ { 64, 64, 2}, ++ {128, 128, 1}, ++ {128, 128, 1} ++}; ++ ++static int cursorfb_enable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ ++ if (!fbi->map_cpu) return -EINVAL; ++ ++ CCR &= ~CCR_CEN; ++ ++ /* set palette format ++ * ++ * FIXME: if only cursor uses palette ++ */ ++ LCCR4 = (LCCR4 & (~(0x3<<15))) | (0x1<<15); ++ ++ /* disable branch/start/end of frame interrupt */ ++ LCCR5 |= (LCCR5_IUM5 | LCCR5_BSM5 | LCCR5_EOFM5 | LCCR5_SOFM5); ++ ++ /* load palette and frame data */ ++ if (fbi->state == C_DISABLE) { ++ FDADR5 = fbi->dma5_pal->fdadr; ++ udelay(1); ++ FDADR5 = fbi->dma5_frame->fdadr; ++ udelay(1); ++ ++ } ++ else { ++ FBR5 = fbi->dma5_pal->fdadr | 0x1; ++ udelay(1); ++ FBR5 = fbi->dma5_frame->fdadr | 0x1; ++ udelay(1); ++ } ++ ++ CCR = CCR_CEN | (fbi->ypos << 15) | (fbi->xpos << 5) | (fbi->format); ++ ++ fbi->state = C_ENABLE; ++ ++ return 0; ++} ++ ++static int cursorfb_disable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*)info; ++ int done, ret = 0; ++ ++ fbi->state = C_DISABLE; ++ ++ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS5, 100); ++ if (!done) ret = -1; ++ ++ CCR &= ~CCR_CEN; ++ ++ return ret; ++} ++ ++static int cursorfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ++ u_int trans, struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info *)info; ++ u_int val, ret = 1; ++ u_int *pal=(u_int*) fbi->palette_cpu; ++ ++ /* 25bit with Transparcy for 16bpp format */ ++ if (regno < fbi->palette_size) { ++ val = ((trans << 24) & 0x1000000); ++ val |= ((red << 16) & 0x0ff0000); ++ val |= ((green << 8 ) & 0x000ff00); ++ val |= ((blue << 0) & 0x00000ff); ++ ++ pal[regno] = val; ++ ret = 0; ++ } ++ return ret; ++} ++ ++int cursorfb_blank(int blank, struct fb_info *info) ++{ ++ switch(blank) ++ { ++ case 0: ++ cursorfb_enable(info); ++ break; ++ case 1: ++ cursorfb_disable(info); ++ break; ++ default: ++ /* reserved */ ++ break; ++ } ++ return 0; ++} ++ ++static int cursorfb_check_var( struct fb_var_screeninfo *var, struct fb_info *info) ++{ ++ int xpos, ypos, xres, yres; ++ int mode; ++ struct cursorfb_mode *cursor; ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ ++ mode = var->nonstd & 0x7; ++ xpos = (var->nonstd>>5) & 0x3ff; ++ ypos = (var->nonstd>>15) & 0x3ff; ++ ++ if (mode>7 || mode <0 ) ++ return -EINVAL; ++ ++ cursor = cursorfb_modes + mode; ++ ++ xres = cursor->xres; ++ yres = cursor->yres; ++ ++ if ( (xpos + xres) > fbi->basefb->fb.var.xres ) ++ return -EINVAL; ++ ++ if ( (ypos + yres) > fbi->basefb->fb.var.yres ) ++ return -EINVAL; ++ ++ return 0; ++ ++} ++ ++static int cursorfb_set_par(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ struct fb_var_screeninfo *var = &fbi->fb.var; ++ struct cursorfb_mode *cursor; ++ int mode, xpos, ypos; ++ int err; ++ ++ info->flags &= ~FBINFO_MISC_USEREVENT; ++ ++ mode = var->nonstd & 0x7; ++ xpos = (var->nonstd>>5) & 0x3ff; ++ ypos = (var->nonstd>>15) & 0x3ff; ++ ++ if (mode != fbi->format) { ++ cursor = cursorfb_modes + mode; ++ ++ /* update "var" info */ ++ fbi->fb.var.xres = cursor->xres; ++ fbi->fb.var.yres = cursor->yres; ++ fbi->fb.var.bits_per_pixel = cursor->bpp; ++ ++ /* alloc video memory ++ * ++ * 4k is engouh for 128x128x1 cursor, ++ * - 2k for cursor pixels, ++ * - 2k for palette data, plus 2 dma descriptor ++ */ ++ if (!fbi->map_cpu) { ++ fbi->map_size = PAGE_SIZE; ++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, ++ &fbi->map_dma, GFP_KERNEL ); ++ if (!fbi->map_cpu) return -ENOMEM; ++ } ++ ++ cursor = cursorfb_modes + mode; ++ ++ /* update overlay & fix "info" */ ++ fbi->screen_cpu = fbi->map_cpu; ++ fbi->palette_cpu = fbi->map_cpu + (PAGE_SIZE/2); ++ fbi->screen_dma = fbi->map_dma; ++ fbi->palette_dma = fbi->map_dma + (PAGE_SIZE/2); ++ ++ fbi->format = mode; ++ fbi->palette_size = (1<bpp); ++ fbi->fb.fix.smem_start = fbi->screen_dma; ++ fbi->fb.fix.smem_len = cursor->xres * cursor->yres * cursor->bpp / 8; ++ fbi->fb.fix.line_length = cursor->xres * cursor->bpp / 8; ++ ++ fbi->dma5_pal = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 16 ); ++ fbi->dma5_pal->fdadr = (fbi->map_dma + PAGE_SIZE - 16); ++ fbi->dma5_pal->fsadr = fbi->palette_dma; ++ fbi->dma5_pal->fidr = 0; ++ fbi->dma5_pal->ldcmd = (fbi->palette_size<<2) | LDCMD_PAL; ++ ++ fbi->dma5_frame = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 32 ); ++ fbi->dma5_frame->fdadr = (fbi->map_dma + PAGE_SIZE - 32); ++ fbi->dma5_frame->fsadr = fbi->screen_dma; ++ fbi->dma5_frame->fidr = 0; ++ fbi->dma5_frame->ldcmd = fbi->fb.fix.smem_len; ++ ++ /* alloc & set default cmap */ ++ err = fb_alloc_cmap(&fbi->fb.cmap, fbi->palette_size, 0); ++ if (err) return err; ++ err = fb_set_cmap(&fbi->fb.cmap, info); ++ if (err) return err; ++ } ++ ++ /* update overlay info */ ++ if ( (xpos != fbi->xpos) || (ypos != fbi->ypos) ) { ++ fbi->xpos = xpos; ++ fbi->ypos = ypos; ++ } ++ ++ cursorfb_enable(info); ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ ++ return 0; ++} ++ ++static struct fb_ops cursorfb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = cursorfb_check_var, ++ .fb_set_par = cursorfb_set_par, ++ .fb_blank = cursorfb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++ .fb_setcolreg = cursorfb_setcolreg, ++}; ++ ++static struct overlayfb_info * __init overlay1fb_init_fbinfo(void) ++{ ++ struct overlayfb_info *fbi; ++ ++ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL); ++ if (!fbi) ++ return NULL; ++ ++ memset(fbi, 0, sizeof(struct overlayfb_info) ); ++ ++ fbi->refcount = 0; ++ init_MUTEX(&fbi->mutex); ++ ++ strcpy(fbi->fb.fix.id, "overlay1"); ++ ++ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; ++ fbi->fb.fix.type_aux = 0; ++ fbi->fb.fix.xpanstep = 0; ++ fbi->fb.fix.ypanstep = 0; ++ fbi->fb.fix.ywrapstep = 0; ++ fbi->fb.fix.accel = FB_ACCEL_NONE; ++ ++ fbi->fb.var.nonstd = 0; ++ fbi->fb.var.activate = FB_ACTIVATE_NOW; ++ fbi->fb.var.height = -1; ++ fbi->fb.var.width = -1; ++ fbi->fb.var.accel_flags = 0; ++ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; ++ ++ ++ fbi->fb.fbops = &overlay1fb_ops; ++ fbi->fb.flags = FBINFO_FLAG_DEFAULT; ++ fbi->fb.node = -1; ++ fbi->fb.pseudo_palette = NULL; ++ ++ fbi->xpos = 0; ++ fbi->ypos = 0; ++ fbi->format = -1; ++ fbi->state = C_DISABLE; ++ ++ return fbi; ++} ++ ++static struct overlayfb_info * __init overlay2fb_init_fbinfo(void) ++{ ++ struct overlayfb_info *fbi; ++ ++ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL); ++ if (!fbi) ++ return NULL; ++ ++ memset(fbi, 0, sizeof(struct overlayfb_info) ); ++ ++ fbi->refcount = 0; ++ init_MUTEX(&fbi->mutex); ++ ++ strcpy(fbi->fb.fix.id, "overlay2"); ++ ++ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; ++ fbi->fb.fix.type_aux = 0; ++ fbi->fb.fix.xpanstep = 0; ++ fbi->fb.fix.ypanstep = 0; ++ fbi->fb.fix.ywrapstep = 0; ++ fbi->fb.fix.accel = FB_ACCEL_NONE; ++ ++ fbi->fb.var.nonstd = 0; ++ fbi->fb.var.activate = FB_ACTIVATE_NOW; ++ fbi->fb.var.height = -1; ++ fbi->fb.var.width = -1; ++ fbi->fb.var.accel_flags = 0; ++ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; ++ ++ fbi->fb.fbops = &overlay2fb_ops; ++ fbi->fb.flags = FBINFO_FLAG_DEFAULT; ++ fbi->fb.node = -1; ++ fbi->fb.pseudo_palette = NULL; ++ ++ fbi->xpos = 0; ++ fbi->ypos = 0; ++ fbi->format = -1; ++ fbi->state = C_DISABLE; ++ ++ return fbi; ++} ++ ++static struct overlayfb_info * __init cursorfb_init_fbinfo(void) ++{ ++ struct overlayfb_info *fbi; ++ ++ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL); ++ if (!fbi) ++ return NULL; ++ ++ memset(fbi, 0, sizeof(struct overlayfb_info) ); ++ ++ fbi->refcount = 0; ++ init_MUTEX(&fbi->mutex); ++ ++ strcpy(fbi->fb.fix.id, "cursor"); ++ ++ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; ++ fbi->fb.fix.type_aux = 0; ++ fbi->fb.fix.xpanstep = 0; ++ fbi->fb.fix.ypanstep = 0; ++ fbi->fb.fix.ywrapstep = 0; ++ fbi->fb.fix.accel = FB_ACCEL_NONE; ++ ++ fbi->fb.var.nonstd = 0; ++ fbi->fb.var.activate = FB_ACTIVATE_NOW; ++ fbi->fb.var.height = -1; ++ fbi->fb.var.width = -1; ++ fbi->fb.var.accel_flags = 0; ++ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; ++ ++ fbi->fb.fbops = &cursorfb_ops; ++ fbi->fb.flags = FBINFO_FLAG_DEFAULT; ++ fbi->fb.node = -1; ++ fbi->fb.pseudo_palette = NULL; ++ ++ ++ fbi->xpos = 0; ++ fbi->ypos = 0; ++ fbi->format = -1; ++ fbi->state = C_DISABLE; ++ ++ return fbi; ++} ++ ++ ++void pxa_set_overlay_ctrlr_state(struct pxafb_info *fbi, u_int state) ++{ ++ switch (state) { ++ case C_DISABLE: ++ DISABLE_OVERLAYS(fbi); ++ break; ++ case C_ENABLE: ++ ENABLE_OVERLAYS(fbi); ++ break; ++ case C_BLANK: ++ BLANK_OVERLAYS(fbi); ++ break; ++ case C_UNBLANK: ++ UNBLANK_OVERLAYS(fbi); ++ break; ++ default: ++ break; ++ } ++} ++ ++static int is_pxafb_device(struct device * dev, void * data) ++{ ++ struct platform_device *pdev = container_of(dev, struct platform_device, dev); ++ ++ return (strncmp(pdev->name, "pxa2xx-fb", 9) == 0); ++} ++ ++static int __devinit pxafb_overlay_init(void) ++{ ++ int ret; ++ struct overlayfb_info *overlay1fb, *overlay2fb, *cursorfb; ++ struct pxafb_info *fbi; ++ struct device *dev; ++ ++ ret = -1; ++ overlay1fb = overlay2fb = cursorfb = NULL; ++ fbi = NULL; ++ ++ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); ++ if (!dev) { ++ printk(KERN_INFO "Base framebuffer not exists, failed to load overlay driver!\n"); ++ return ret; ++ } ++ ++ fbi = dev_get_drvdata(dev); ++ if (fbi == NULL) { ++ printk(KERN_INFO "Base framebuffer not initialized, failed to load overlay driver!\n"); ++ return ret; ++ } ++ ++ /* Overlay 1 windows */ ++ overlay1fb = overlay1fb_init_fbinfo(); ++ ++ if (!overlay1fb) { ++ ret = -ENOMEM; ++ printk("overlay1fb_init_fbinfo failed\n"); ++ goto failed; ++ } ++ ++ ret = register_framebuffer(&overlay1fb->fb); ++ if (ret < 0) ++ goto failed; ++ ++ /* Overlay 2 window */ ++ overlay2fb = overlay2fb_init_fbinfo(); ++ ++ if (!overlay2fb) { ++ ret = -ENOMEM; ++ printk("overlay2fb_init_fbinfo failed\n"); ++ goto failed; ++ } ++ ++ ret = register_framebuffer(&overlay2fb->fb); ++ if (ret < 0) goto failed; ++ ++ /* Hardware cursor window */ ++ cursorfb = cursorfb_init_fbinfo(); ++ ++ if (!cursorfb) { ++ ret = -ENOMEM; ++ printk("cursorfb_init_fbinfo failed\n"); ++ goto failed; ++ } ++ ++ ret = register_framebuffer(&cursorfb->fb); ++ if (ret < 0) goto failed; ++ ++ ++ /* set refernce to Overlays */ ++ fbi->overlay1fb = overlay1fb; ++ fbi->overlay2fb = overlay2fb; ++ fbi->cursorfb = cursorfb; ++ fbi->set_overlay_ctrlr_state=pxa_set_overlay_ctrlr_state; ++ ++ /* set refernce to BaseFrame */ ++ overlay1fb->basefb = fbi; ++ overlay2fb->basefb = fbi; ++ cursorfb->basefb = fbi; ++ ++ printk(KERN_INFO "Load PXA Overlay driver successfully!\n"); ++ ++ return 0; ++ ++failed: ++ if (overlay1fb) ++ kfree(overlay1fb); ++ if (overlay2fb) ++ kfree(overlay2fb); ++ if (cursorfb) ++ kfree(cursorfb); ++ printk(KERN_INFO "Load PXA Overlay driver failed!\n"); ++ return ret; ++} ++ ++static void __exit pxafb_overlay_exit(void) ++{ ++ struct pxafb_info *fbi; ++ struct device *dev; ++ ++ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); ++ if (!dev) ++ return; ++ ++ fbi = dev_get_drvdata(dev); ++ if (!fbi) ++ return; ++ ++ if (fbi->overlay1fb) { ++ unregister_framebuffer(&(fbi->overlay1fb->fb)); ++ kfree(fbi->overlay1fb); ++ fbi->overlay1fb = NULL; ++ } ++ ++ if (fbi->overlay2fb) { ++ unregister_framebuffer(&(fbi->overlay2fb->fb)); ++ kfree(fbi->overlay2fb); ++ fbi->overlay2fb = NULL; ++ } ++ ++ if (fbi->cursorfb) { ++ unregister_framebuffer(&(fbi->cursorfb->fb)); ++ kfree(fbi->cursorfb); ++ fbi->cursorfb = NULL; ++ } ++ ++ fbi->set_overlay_ctrlr_state = NULL; ++ ++ printk(KERN_INFO "Unload PXA Overlay driver successfully!\n"); ++ return; ++} ++ ++ ++module_init(pxafb_overlay_init); ++module_exit(pxafb_overlay_exit); ++ ++MODULE_DESCRIPTION("Loadable framebuffer overlay driver for PXA"); ++MODULE_LICENSE("GPL"); ++ +Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h ++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h +@@ -792,11 +792,18 @@ + #define UDC_INT_PACKETCMP (0x1) + + #define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2)) ++/* Older defines, do not use. */ + #define UDCICR1_IECC (1 << 31) /* IntEn - Configuration Change */ + #define UDCICR1_IESOF (1 << 30) /* IntEn - Start of Frame */ + #define UDCICR1_IERU (1 << 29) /* IntEn - Resume */ + #define UDCICR1_IESU (1 << 28) /* IntEn - Suspend */ + #define UDCICR1_IERS (1 << 27) /* IntEn - Reset */ ++/* New defines. */ ++#define UDCISR1_IRCC (1 << 31) /* IntEn - Configuration Change */ ++#define UDCISR1_IRSOF (1 << 30) /* IntEn - Start of Frame */ ++#define UDCISR1_IRRU (1 << 29) /* IntEn - Resume */ ++#define UDCISR1_IRSU (1 << 28) /* IntEn - Suspend */ ++#define UDCISR1_IRRS (1 << 27) /* IntEn - Reset */ + + #define UDCISR0 __REG(0x4060000C) /* UDC Interrupt Status Register 0 */ + #define UDCISR1 __REG(0x40600010) /* UDC Interrupt Status Register 1 */ +@@ -1831,6 +1838,8 @@ + #define DFBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */ + #define DFBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */ + #define LCSR __REG(0x44000038) /* LCD Controller Status Register */ ++#define LCSR0 __REG(0x44000038) /* LCD Controller Status Register */ ++#define LCSR1 __REG(0x44000034) /* LCD Controller Status Register */ + #define LIIDR __REG(0x4400003C) /* LCD Controller Interrupt ID Register */ + #define TMEDRGBR __REG(0x44000040) /* TMED RGB Seed Register */ + #define TMEDCR __REG(0x44000044) /* TMED Control Register */ +@@ -1840,6 +1849,10 @@ + #define LCCR3_4BPP (2 << 24) + #define LCCR3_8BPP (3 << 24) + #define LCCR3_16BPP (4 << 24) ++#define LCCR3_18BPP (6 << 24) ++#define LCCR3_19BPP (8 << 24) ++#define LCCR3_24BPP (9 << 24) ++#define LCCR3_25BPP (10<< 24) + + #define LCCR3_PDFOR_0 (0 << 30) + #define LCCR3_PDFOR_1 (1 << 30) +@@ -2014,6 +2027,104 @@ + + #define LDCMD_PAL (1 << 26) /* instructs DMA to load palette buffer */ + ++/* Overlay1 & Overlay2 & Hardware Cursor */ ++#define LCSR1_SOF1 (1 << 0) ++#define LCSR1_SOF2 (1 << 1) ++#define LCSR1_SOF3 (1 << 2) ++#define LCSR1_SOF4 (1 << 3) ++#define LCSR1_SOF5 (1 << 4) ++#define LCSR1_SOF6 (1 << 5) ++ ++#define LCSR1_EOF1 (1 << 8) ++#define LCSR1_EOF2 (1 << 9) ++#define LCSR1_EOF3 (1 << 10) ++#define LCSR1_EOF4 (1 << 11) ++#define LCSR1_EOF5 (1 << 12) ++#define LCSR1_EOF6 (1 << 13) ++ ++#define LCSR1_BS1 (1 << 16) ++#define LCSR1_BS2 (1 << 17) ++#define LCSR1_BS3 (1 << 18) ++#define LCSR1_BS4 (1 << 19) ++#define LCSR1_BS5 (1 << 20) ++#define LCSR1_BS6 (1 << 21) ++ ++#define LCSR1_IU2 (1 << 25) ++#define LCSR1_IU3 (1 << 26) ++#define LCSR1_IU4 (1 << 27) ++#define LCSR1_IU5 (1 << 28) ++#define LCSR1_IU6 (1 << 29) ++ ++#define LDCMD_SOFINT (1 << 22) ++#define LDCMD_EOFINT (1 << 21) ++ ++ ++#define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */ ++#define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */ ++#define LCCR5_SOFM3 (1<<2) /* Start Of Frame Mask for Overlay 2 (channel 3) */ ++#define LCCR5_SOFM4 (1<<3) /* Start Of Frame Mask for Overlay 2 (channel 4) */ ++#define LCCR5_SOFM5 (1<<4) /* Start Of Frame Mask for cursor (channel 5) */ ++#define LCCR5_SOFM6 (1<<5) /* Start Of Frame Mask for command data (channel 6) */ ++ ++#define LCCR5_EOFM1 (1<<8) /* End Of Frame Mask for Overlay 1 (channel 1) */ ++#define LCCR5_EOFM2 (1<<9) /* End Of Frame Mask for Overlay 2 (channel 2) */ ++#define LCCR5_EOFM3 (1<<10) /* End Of Frame Mask for Overlay 2 (channel 3) */ ++#define LCCR5_EOFM4 (1<<11) /* End Of Frame Mask for Overlay 2 (channel 4) */ ++#define LCCR5_EOFM5 (1<<12) /* End Of Frame Mask for cursor (channel 5) */ ++#define LCCR5_EOFM6 (1<<13) /* End Of Frame Mask for command data (channel 6) */ ++ ++#define LCCR5_BSM1 (1<<16) /* Branch mask for Overlay 1 (channel 1) */ ++#define LCCR5_BSM2 (1<<17) /* Branch mask for Overlay 2 (channel 2) */ ++#define LCCR5_BSM3 (1<<18) /* Branch mask for Overlay 2 (channel 3) */ ++#define LCCR5_BSM4 (1<<19) /* Branch mask for Overlay 2 (channel 4) */ ++#define LCCR5_BSM5 (1<<20) /* Branch mask for cursor (channel 5) */ ++#define LCCR5_BSM6 (1<<21) /* Branch mask for data command (channel 6) */ ++ ++#define LCCR5_IUM1 (1<<24) /* Input FIFO Underrun Mask for Overlay 1 */ ++#define LCCR5_IUM2 (1<<25) /* Input FIFO Underrun Mask for Overlay 2 */ ++#define LCCR5_IUM3 (1<<26) /* Input FIFO Underrun Mask for Overlay 2 */ ++#define LCCR5_IUM4 (1<<27) /* Input FIFO Underrun Mask for Overlay 2 */ ++#define LCCR5_IUM5 (1<<28) /* Input FIFO Underrun Mask for cursor */ ++#define LCCR5_IUM6 (1<<29) /* Input FIFO Underrun Mask for data command */ ++ ++#define OVL1C1_O1EN (1<<31) /* Enable bit for Overlay 1 */ ++#define OVL2C1_O2EN (1<<31) /* Enable bit for Overlay 2 */ ++#define CCR_CEN (1<<31) /* Enable bit for Cursor */ ++ ++/* LCD registers */ ++#define LCCR4 __REG(0x44000010) /* LCD Controller Control Register 4 */ ++#define LCCR5 __REG(0x44000014) /* LCD Controller Control Register 5 */ ++#define FBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */ ++#define FBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */ ++#define FBR2 __REG(0x44000028) /* DMA Channel 2 Frame Branch Register */ ++#define FBR3 __REG(0x4400002C) /* DMA Channel 3 Frame Branch Register */ ++#define FBR4 __REG(0x44000030) /* DMA Channel 4 Frame Branch Register */ ++#define FDADR2 __REG(0x44000220) /* DMA Channel 2 Frame Descriptor Address Register */ ++#define FSADR2 __REG(0x44000224) /* DMA Channel 2 Frame Source Address Register */ ++#define FIDR2 __REG(0x44000228) /* DMA Channel 2 Frame ID Register */ ++#define LDCMD2 __REG(0x4400022C) /* DMA Channel 2 Command Register */ ++#define FDADR3 __REG(0x44000230) /* DMA Channel 3 Frame Descriptor Address Register */ ++#define FSADR3 __REG(0x44000234) /* DMA Channel 3 Frame Source Address Register */ ++#define FIDR3 __REG(0x44000238) /* DMA Channel 3 Frame ID Register */ ++#define LDCMD3 __REG(0x4400023C) /* DMA Channel 3 Command Register */ ++#define FDADR4 __REG(0x44000240) /* DMA Channel 4 Frame Descriptor Address Register */ ++#define FSADR4 __REG(0x44000244) /* DMA Channel 4 Frame Source Address Register */ ++#define FIDR4 __REG(0x44000248) /* DMA Channel 4 Frame ID Register */ ++#define LDCMD4 __REG(0x4400024C) /* DMA Channel 4 Command Register */ ++#define FDADR5 __REG(0x44000250) /* DMA Channel 5 Frame Descriptor Address Register */ ++#define FSADR5 __REG(0x44000254) /* DMA Channel 5 Frame Source Address Register */ ++#define FIDR5 __REG(0x44000258) /* DMA Channel 5 Frame ID Register */ ++#define LDCMD5 __REG(0x4400025C) /* DMA Channel 5 Command Register */ ++ ++#define OVL1C1 __REG(0x44000050) /* Overlay 1 Control Register 1 */ ++#define OVL1C2 __REG(0x44000060) /* Overlay 1 Control Register 2 */ ++#define OVL2C1 __REG(0x44000070) /* Overlay 2 Control Register 1 */ ++#define OVL2C2 __REG(0x44000080) /* Overlay 2 Control Register 2 */ ++#define CCR __REG(0x44000090) /* Cursor Control Register */ ++ ++#define FBR5 __REG(0x44000110) /* DMA Channel 5 Frame Branch Register */ ++#define FBR6 __REG(0x44000114) /* DMA Channel 6 Frame Branch Register */ ++ + /* + * Memory controller + */ diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml new file mode 100644 index 0000000000..eabcc41830 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml @@ -0,0 +1,1204 @@ +Path: news.gmane.org!not-for-mail +From: Guennadi Liakhovetski +Newsgroups: gmane.comp.video.video4linux +Subject: [RFC PATCH 1/8] soc_camera V4L2 driver for directly-connected + SoC-based cameras +Date: Wed, 23 Jan 2008 18:41:18 +0100 (CET) +Lines: 1132 +Approved: news@gmane.org +Message-ID: +References: +NNTP-Posting-Host: lo.gmane.org +Mime-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Trace: ger.gmane.org 1201110130 28779 80.91.229.12 (23 Jan 2008 17:42:10 GMT) +X-Complaints-To: usenet@ger.gmane.org +NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:10 +0000 (UTC) +To: video4linux-list@redhat.com +Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:28 2008 +Return-path: +Envelope-to: rh-video4linux-list@gmane.org +Original-Received: from hormel.redhat.com ([209.132.177.30]) + by lo.gmane.org with esmtp (Exim 4.50) + id 1JHjbz-0002oq-Us + for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:09 +0100 +Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110]) + by hormel.redhat.com (Postfix) with ESMTP + id 7B895730A6; Wed, 23 Jan 2008 12:41:41 -0500 (EST) +Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com + [172.16.52.254]) + by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id + m0NHfdRS017082 for ; + Wed, 23 Jan 2008 12:41:39 -0500 +Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32]) + by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHfcrF027810 + for ; Wed, 23 Jan 2008 12:41:38 -0500 +Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) + by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHf62e000540 + for ; Wed, 23 Jan 2008 12:41:06 -0500 +Original-Received: (qmail invoked by alias); 23 Jan 2008 17:40:59 -0000 +Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange) + [87.189.47.31] + by mail.gmx.net (mp048) with SMTP; 23 Jan 2008 18:40:59 +0100 +X-Authenticated: #20450766 +X-Provags-ID: V01U2FsdGVkX19NlXt5RoZNpQ4LqFuDqiXHZ3kHYCmxz52UMExHFC + yqWM+gBlp24/e9 +Original-Received: from lyakh (helo=localhost) + by axis700.grange with local-esmtp (Exim 4.63) + (envelope-from ) id 1JHjbC-00029n-Kf + for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:18 +0100 +X-X-Sender: lyakh@axis700.grange +In-Reply-To: +X-Y-GMX-Trusted: 0 +X-RedHat-Spam-Score: 0 +X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 +X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32 +X-loop: video4linux-list@redhat.com +X-BeenThere: video4linux-list@redhat.com +X-Mailman-Version: 2.1.5 +Precedence: junk +List-Id: Linux and Kernel Video +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Original-Sender: video4linux-list-bounces@redhat.com +Errors-To: video4linux-list-bounces@redhat.com +Xref: news.gmane.org gmane.comp.video.video4linux:36470 +Archived-At: + +This driver provides an interface between platform-specific camera +busses and camera devices. It should be used if the camera is connected +not over a "proper" bus like PCI or USB, but over a special bus, like, +for example, the Quick Capture interface on PXA270 SoCs. Later it should +also be used for i.MX31 SoCs from Freescale. It can handle multiple +cameras and / or multiple busses, which can be used, e.g., in +stereo-vision applications. + +Signed-off-by: Guennadi Liakhovetski +--- + drivers/media/video/Kconfig | 8 + + drivers/media/video/Makefile | 2 + + drivers/media/video/soc_camera.c | 928 ++++++++++++++++++++++++++++++++++++++ + include/media/soc_camera.h | 138 ++++++ + 4 files changed, 1076 insertions(+), 0 deletions(-) + create mode 100644 drivers/media/video/soc_camera.c + create mode 100644 include/media/soc_camera.h + +diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig +index e204e7b..be54183 100644 +--- a/drivers/media/video/Kconfig ++++ b/drivers/media/video/Kconfig +@@ -795,4 +795,12 @@ config USB_ZR364XX + + endif # V4L_USB_DRIVERS + ++config SOC_CAMERA ++ tristate "SoC camera support" ++ depends on VIDEO_V4L2 ++ help ++ SoC Camera is a common API to several cameras, not connecting ++ over a bus like PCI or USB. For example some i2c camera hanging ++ directly on the data bus of an SoC. ++ + endif # VIDEO_CAPTURE_DRIVERS +diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile +index 10b4d44..97a9135 100644 +--- a/drivers/media/video/Makefile ++++ b/drivers/media/video/Makefile +@@ -116,4 +116,6 @@ obj-$(CONFIG_USB_QUICKCAM_MESSENGER) += usbvideo/ + + obj-$(CONFIG_VIDEO_VIVI) += vivi.o + ++obj-$(CONFIG_SOC_CAMERA) += soc_camera.o ++ + EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core +diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c +new file mode 100644 +index 0000000..5ec652e +--- /dev/null ++++ b/drivers/media/video/soc_camera.c +@@ -0,0 +1,928 @@ ++/* ++ * camera image capture (abstract) bus driver ++ * ++ * Copyright (C) 2008, Guennadi Liakhovetski ++ * ++ * This driver provides an interface between platform-specific camera ++ * busses and camera devices. It should be used if the camera is ++ * connected not over a "proper" bus like PCI or USB, but over a ++ * special bus, like, for example, the Quick Capture interface on PXA270 ++ * SoCs. Later it should also be used for i.MX31 SoCs from Freescale. ++ * It can handle multiple cameras and / or multiple busses, which can ++ * be used, e.g., in stereo-vision applications. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++static LIST_HEAD(hosts); ++static LIST_HEAD(devices); ++static DEFINE_MUTEX(list_lock); ++static DEFINE_MUTEX(video_lock); ++ ++const static struct soc_camera_data_format* ++format_by_fourcc(struct soc_camera_device *icd, unsigned int fourcc) ++{ ++ unsigned int i; ++ ++ for (i = 0; i < icd->ops->num_formats; i++) ++ if (icd->ops->formats[i].fourcc == fourcc) ++ return icd->ops->formats + i; ++ return NULL; ++} ++ ++static int soc_camera_try_fmt_cap(struct file *file, void *priv, ++ struct v4l2_format *f) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ enum v4l2_field field; ++ const struct soc_camera_data_format *fmt; ++ int ret; ++ ++ WARN_ON(priv != file->private_data); ++ ++ fmt = format_by_fourcc(icd, f->fmt.pix.pixelformat); ++ if (!fmt) { ++ pr_debug("%s: invalid format 0x%08x\n", __FUNCTION__, ++ f->fmt.pix.pixelformat); ++ return -EINVAL; ++ } ++ ++ pr_debug("%s: fmt: 0x%08x\n", __FUNCTION__, fmt->fourcc); ++ ++ field = f->fmt.pix.field; ++ ++ if (field == V4L2_FIELD_ANY) { ++ field = V4L2_FIELD_NONE; ++ } else if (V4L2_FIELD_NONE != field) { ++ printk("Field type invalid.\n"); ++ return -EINVAL; ++ } ++ ++ /* limit to host capabilities */ ++ ret = ici->try_fmt_cap(ici, f); ++ ++ /* limit to sensor capabilities */ ++ if (!ret) ++ ret = icd->ops->try_fmt_cap(icd, f); ++ ++ /* calculate missing fields */ ++ f->fmt.pix.field = field; ++ f->fmt.pix.bytesperline = ++ (f->fmt.pix.width * fmt->depth) >> 3; ++ f->fmt.pix.sizeimage = ++ f->fmt.pix.height * f->fmt.pix.bytesperline; ++ ++ return ret; ++} ++ ++static int soc_camera_enum_input(struct file *file, void *priv, ++ struct v4l2_input *inp) ++{ ++ if (inp->index != 0) ++ return -EINVAL; ++ ++ inp->type = V4L2_INPUT_TYPE_CAMERA; ++ inp->std = V4L2_STD_UNKNOWN; ++ strcpy(inp->name, "Camera"); ++ ++ return 0; ++} ++ ++static int soc_camera_g_input(struct file *file, void *priv, unsigned int *i) ++{ ++ *i = 0; ++ ++ return 0; ++} ++ ++static int soc_camera_s_input(struct file *file, void *priv, unsigned int i) ++{ ++ if (i > 0) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static int soc_camera_s_std(struct file *file, void *priv, v4l2_std_id *a) ++{ ++ return 0; ++} ++ ++static int soc_camera_reqbufs(struct file *file, void *priv, struct v4l2_requestbuffers *p) ++{ ++ int ret; ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ ++ WARN_ON(priv != file->private_data); ++ ++ pr_debug("%s: %d\n", __FUNCTION__, p->memory); ++ ++ ret = videobuf_reqbufs(&icf->vb_vidq, p); ++ if (ret < 0) ++ return ret; ++ ++ return ici->reqbufs(icf, p); ++ ++ return ret; ++} ++ ++static int soc_camera_querybuf(struct file *file, void *priv, struct v4l2_buffer *p) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ ++ WARN_ON(priv != file->private_data); ++ ++ return videobuf_querybuf(&icf->vb_vidq, p); ++} ++ ++static int soc_camera_qbuf(struct file *file, void *priv, struct v4l2_buffer *p) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ ++ WARN_ON(priv != file->private_data); ++ ++ return videobuf_qbuf(&icf->vb_vidq, p); ++} ++ ++static int soc_camera_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ ++ WARN_ON(priv != file->private_data); ++ ++ return videobuf_dqbuf(&icf->vb_vidq, p, file->f_flags & O_NONBLOCK); ++} ++ ++static int soc_camera_open(struct inode *inode, struct file *file) ++{ ++ struct soc_camera_host *ici; ++ struct soc_camera_device *icd; ++ struct video_device *vdev; ++ struct soc_camera_file *icf; ++ int ret; ++ ++ mutex_lock(&video_lock); ++ list_for_each_entry(icd, &devices, list) { ++ if (icd->vdev && icd->vdev->minor == iminor(inode)) ++ break; ++ } ++ mutex_unlock(&video_lock); ++ ++ if (&icd->list == &devices) ++ return -ENODEV; ++ ++ icf = vmalloc(sizeof(*icf)); ++ if (!icf) ++ return -ENOMEM; ++ ++ icf->icd = icd; ++ ++ if (!try_module_get(icd->ops->owner)) { ++ printk(KERN_INFO "Couldn't lock sensor driver.\n"); ++ ret = -EINVAL; ++ goto emgd; ++ } ++ ++ ici = to_soc_camera_host(icd->dev.parent); ++ ++ if (!try_module_get(ici->owner)) { ++ printk(KERN_INFO "Couldn't lock capture bus driver.\n"); ++ ret = -EINVAL; ++ goto emgi; ++ } ++ ++ vdev = icd->vdev; ++ ++ file->private_data = icf; ++ dev_dbg(vdev->dev, "camera device open\n"); ++ ++ vdev = icd->vdev; ++ ++ videobuf_queue_init(&icf->vb_vidq, ici->vbq_ops, ++ icd, NULL, ++ V4L2_BUF_TYPE_VIDEO_CAPTURE, ++ V4L2_FIELD_NONE, ++ ici->msize, icd); ++ ++ return 0; ++ ++emgi: ++ module_put(icd->ops->owner); ++emgd: ++ vfree(icf); ++ return ret; ++} ++ ++static int soc_camera_close(struct inode *inode, struct file *file) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); ++ struct video_device *vdev = icd->vdev; ++ ++ module_put(icd->ops->owner); ++ module_put(ici->owner); ++ vfree(file->private_data); ++ ++ dev_dbg(vdev->dev, "camera device close\n"); ++ ++ return 0; ++} ++ ++static int soc_camera_read(struct file *file, char __user *buf, ++ size_t count, loff_t *ppos) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ struct video_device *vdev = icd->vdev; ++ int err = -EINVAL; ++ ++ dev_err(vdev->dev, "camera device read not implemented\n"); ++ ++ return err; ++} ++ ++static int soc_camera_mmap(struct file *file, struct vm_area_struct *vma) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ int err; ++ ++ pr_debug("mmap called, vma=0x%08lx\n",(unsigned long)vma); ++ ++ err = videobuf_mmap_mapper(&icf->vb_vidq, vma); ++ ++ pr_debug ("vma start=0x%08lx, size=%ld, ret=%d\n", ++ (unsigned long)vma->vm_start, ++ (unsigned long)vma->vm_end-(unsigned long)vma->vm_start, ++ err); ++ ++ return err; ++} ++ ++static unsigned int soc_camera_poll(struct file *file, poll_table *pt) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ ++ if (list_empty(&icf->vb_vidq.stream)) { ++ printk("---------- urgs\n"); ++ return POLLERR; ++ } ++ ++ return ici->poll(file, pt); ++} ++ ++ ++static struct file_operations soc_camera_fops = { ++ .owner = THIS_MODULE, ++ .open = soc_camera_open, ++ .release = soc_camera_close, ++ .ioctl = video_ioctl2, ++ .read = soc_camera_read, ++ .mmap = soc_camera_mmap, ++ .poll = soc_camera_poll, ++ .llseek = no_llseek, ++}; ++ ++ ++static int soc_camera_s_fmt_cap(struct file *file, void *priv, ++ struct v4l2_format *f) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ int ret; ++ struct v4l2_rect rect; ++ const static struct soc_camera_data_format *data_fmt; ++ ++ WARN_ON(priv != file->private_data); ++ ++ data_fmt = format_by_fourcc(icd, f->fmt.pix.pixelformat); ++ if (!data_fmt) ++ return -EINVAL; ++ ++ /* cached_datawidth may be further adjusted by the ici */ ++ icd->cached_datawidth = data_fmt->depth; ++ ++ ret = soc_camera_try_fmt_cap(file, icf, f); ++ if (ret < 0) ++ return ret; ++ ++ rect.left = icd->x_current; ++ rect.top = icd->y_current; ++ rect.width = f->fmt.pix.width; ++ rect.height = f->fmt.pix.height; ++ ret = ici->set_capture_format(icd, f->fmt.pix.pixelformat, &rect); ++ ++ if (!ret) { ++ icd->current_fmt = data_fmt; ++ icd->width = rect.width; ++ icd->height = rect.height; ++ icf->vb_vidq.field = f->fmt.pix.field; ++ if (V4L2_BUF_TYPE_VIDEO_CAPTURE != f->type) ++ printk("Attention! Wrong buf-type %d\n", f->type); ++ ++ dev_dbg(&icd->dev, "set width: %d height: %d\n", ++ icd->width, icd->height); ++ } ++ ++ return ret; ++} ++ ++static int soc_camera_enum_fmt_cap(struct file *file, void *priv, ++ struct v4l2_fmtdesc *f) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ const struct soc_camera_data_format *format; ++ ++ WARN_ON(priv != file->private_data); ++ ++ if (f->index >= icd->ops->num_formats) ++ return -EINVAL; ++ ++ format = &icd->ops->formats[f->index]; ++ ++ strlcpy(f->description, format->name, sizeof(f->description)); ++ f->pixelformat = format->fourcc; ++ return 0; ++} ++ ++static int soc_camera_g_fmt_cap(struct file *file, void *priv, ++ struct v4l2_format *f) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ ++ WARN_ON(priv != file->private_data); ++ ++ f->fmt.pix.width = icd->width; ++ f->fmt.pix.height = icd->height; ++ f->fmt.pix.field = icf->vb_vidq.field; ++ f->fmt.pix.pixelformat = icd->current_fmt->fourcc; ++ f->fmt.pix.bytesperline = ++ (f->fmt.pix.width * icd->current_fmt->depth) >> 3; ++ f->fmt.pix.sizeimage = ++ f->fmt.pix.height * f->fmt.pix.bytesperline; ++ printk("%s: current_fmt->fourcc: 0x%08x\n", ++ __FUNCTION__, icd->current_fmt->fourcc); ++ return 0; ++} ++ ++static int soc_camera_querycap(struct file *file, void *priv, ++ struct v4l2_capability *cap) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ ++ WARN_ON(priv != file->private_data); ++ ++ strlcpy(cap->driver, ici->drv_name, sizeof(cap->driver)); ++ return ici->querycap(ici, cap); ++} ++ ++static int soc_camera_streamon(struct file *file, void *priv, enum v4l2_buf_type i) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++// struct vivi_dev *dev = fh->dev; ++ ++ WARN_ON(priv != file->private_data); ++ ++ pr_debug("%s\n",__FUNCTION__); ++ ++ if (i != V4L2_BUF_TYPE_VIDEO_CAPTURE) ++ return -EINVAL; ++ ++// if (!res_get(dev,fh)) ++// return -EBUSY; ++// CIFR = CIFR_RESET_F | CIFR_FEN0; ++ ++ icd->ops->start_capture(icd); ++ ++ /* This calls buf_queue from host driver's videobuf_queue_ops */ ++ return videobuf_streamon(&icf->vb_vidq); ++} ++ ++static int soc_camera_streamoff(struct file *file, void *priv, ++ enum v4l2_buf_type i) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++// struct vivi_dev *dev = fh->dev; ++ ++ WARN_ON(priv != file->private_data); ++ ++ pr_debug("%s\n",__FUNCTION__); ++ ++ if (i != V4L2_BUF_TYPE_VIDEO_CAPTURE) ++ return -EINVAL; ++ ++// CICR0 |= CICR0_DIS; ++// while(CICR0 & CICR0_ENB); ++ ++ /* This calls buf_release from host driver's videobuf_queue_ops for all ++ * remaining buffers. When the last buffer is freed, stop capture */ ++ videobuf_streamoff(&icf->vb_vidq); ++ ++ icd->ops->stop_capture(icd); ++ ++// res_free(dev,fh); ++ ++ return 0; ++} ++ ++static int soc_camera_queryctrl(struct file *file, void *priv, ++ struct v4l2_queryctrl *qc) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ int i; ++ ++ WARN_ON(priv != file->private_data); ++ ++ for (i = 0; i < icd->ops->num_controls; i++) ++ if (qc->id && qc->id == icd->ops->controls[i].id) { ++ memcpy(qc, &(icd->ops->controls[i]), ++ sizeof(*qc)); ++ return 0; ++ } ++ ++ return -EINVAL; ++} ++ ++static int soc_camera_g_ctrl(struct file *file, void *priv, ++ struct v4l2_control *ctrl) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ ++ WARN_ON(priv != file->private_data); ++ ++ switch (ctrl->id) { ++ case V4L2_CID_GAIN: ++ if (icd->gain == (unsigned short)~0) ++ return -EINVAL; ++ ctrl->value = icd->gain; ++ return 0; ++ case V4L2_CID_EXPOSURE: ++ if (icd->exposure == (unsigned short)~0) ++ return -EINVAL; ++ ctrl->value = icd->exposure; ++ return 0; ++ } ++ ++ if (icd->ops->get_control) ++ return icd->ops->get_control(icd, ctrl); ++ return -EINVAL; ++} ++ ++static int soc_camera_s_ctrl(struct file *file, void *priv, ++ struct v4l2_control *ctrl) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ ++ WARN_ON(priv != file->private_data); ++ ++ if (icd->ops->set_control) ++ return icd->ops->set_control(icd, ctrl); ++ return -EINVAL; ++} ++ ++static int soc_camera_cropcap(struct file *file, void *fh, ++ struct v4l2_cropcap *a) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ ++ a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ++ a->bounds.left = icd->x_min; ++ a->bounds.top = icd->y_min; ++ a->bounds.width = icd->width_max; ++ a->bounds.height = icd->height_max; ++ a->defrect.left = icd->x_min; ++ a->defrect.top = icd->y_min; ++ a->defrect.width = 640; ++ a->defrect.height = 480; ++ a->pixelaspect.numerator = 1; ++ a->pixelaspect.denominator = 1; ++ ++ return 0; ++} ++ ++static int soc_camera_g_crop(struct file *file, void *fh, ++ struct v4l2_crop *a) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ ++ a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ++ a->c.left = icd->x_current; ++ a->c.top = icd->y_current; ++ a->c.width = icd->width; ++ a->c.height = icd->height; ++ ++ return 0; ++} ++ ++static int soc_camera_s_crop(struct file *file, void *fh, ++ struct v4l2_crop *a) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct soc_camera_device *icd = icf->icd; ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ int ret; ++ ++ if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) ++ return -EINVAL; ++ ++ ret = ici->set_capture_format(icd, 0, &a->c); ++ if (!ret) { ++ icd->width = a->c.width; ++ icd->height = a->c.height; ++ icd->x_current = a->c.left; ++ icd->y_current = a->c.top; ++ } ++ ++ return ret; ++} ++ ++static int device_register_link(struct soc_camera_device *icd) ++{ ++ int ret = device_register(&icd->dev); ++ if (!ret && icd->control) ++ if (sysfs_create_link(&icd->dev.kobj, &icd->control->kobj, "control")) ++ dev_warn(&icd->dev, ++ "Couldn't create a symlink to the control device\n"); ++ return ret; ++} ++ ++/* The two functions below return: 0 if no match found or a match found and ++ * device_register() successful, error code otherwise */ ++static int scan_add_host(struct soc_camera_host *ici) ++{ ++ struct soc_camera_device *icd; ++ int ret = 0; ++ ++ mutex_lock(&list_lock); ++ ++ list_for_each_entry(icd, &devices, list) { ++ if (icd->iface == ici->nr) { ++ ret = 1; ++ icd->dev.parent = &ici->dev; ++ break; ++ } ++ } ++ ++ mutex_unlock(&list_lock); ++ ++ if (ret) ++ ret = device_register_link(icd); ++ ++ return ret; ++} ++ ++static int scan_add_device(struct soc_camera_device *icd) ++{ ++ struct soc_camera_host *ici; ++ int ret = 0; ++ ++ mutex_lock(&list_lock); ++ ++ list_add_tail(&icd->list, &devices); ++ ++ /* Watch out for class_for_each_device / class_find_device API by ++ * Dave Young */ ++ list_for_each_entry(ici, &hosts, list) { ++ if (icd->iface == ici->nr) { ++ ret = 1; ++ icd->dev.parent = &ici->dev; ++ break; ++ } ++ } ++ ++ mutex_unlock(&list_lock); ++ ++ if (ret) ++ ret = device_register_link(icd); ++ ++ return ret; ++} ++ ++static int soc_camera_probe(struct device *dev) ++{ ++ struct soc_camera_device *icd = to_soc_camera_dev(dev); ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ int ret; ++ ++ if (!icd->probe) ++ return -ENODEV; ++ ++ if (!(ret = ici->add(icd))) ++ ret = icd->probe(icd); ++ ++ if (!ret) { ++ const struct v4l2_queryctrl *qctrl = ++ soc_camera_find_qctrl(icd->ops, V4L2_CID_GAIN); ++ icd->gain = qctrl ? qctrl->default_value : (unsigned short)~0; ++ qctrl = soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE); ++ icd->exposure = qctrl ? qctrl->default_value : (unsigned short)~0; ++ ++ } ++ ++ return ret; ++} ++ ++/* This is called on device_unregister, which only means we have to disconnect ++ * from the host, but not remove ourselves from the device list */ ++static int soc_camera_remove(struct device *dev) ++{ ++ struct soc_camera_device *icd = to_soc_camera_dev(dev); ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ ++ if (icd->remove) ++ icd->remove(icd); ++ ++ ici->remove(icd); ++ ++ return 0; ++} ++ ++static struct bus_type soc_camera_bus_type = { ++ .name = "soc-camera", ++ .probe = soc_camera_probe, ++ .remove = soc_camera_remove, ++}; ++ ++static struct device_driver ic_drv = { ++ .name = "camera", ++ .bus = &soc_camera_bus_type, ++ .owner = THIS_MODULE, ++}; ++ ++/* ++ * Image capture host - this is a host device, not a bus device, so, ++ * no bus reference, no probing. ++ */ ++static struct class soc_camera_host_class = { ++ .owner = THIS_MODULE, ++ .name = "camera_host", ++}; ++ ++static void dummy_release(struct device *dev) ++{ ++} ++ ++int soc_camera_host_register(struct soc_camera_host *ici, struct module *owner) ++{ ++ int ret; ++ ++ if (!ici->vbq_ops || !ici->add || !ici->remove || !owner) ++ return -EINVAL; ++ ++ /* Number might be equal to the platform device ID, ++ * hopefully, device core will fail nicely if we try ++ * to register a second device with the same bus_id */ ++#warning "verify whether device_register will fail, or scan the list yourself for duplicate IDs" ++ sprintf(ici->dev.bus_id, "camera_host%d", ici->nr); ++ ici->dev.class = &soc_camera_host_class; ++ ++ mutex_lock(&list_lock); ++ list_add_tail(&ici->list, &hosts); ++ mutex_unlock(&list_lock); ++ ++ ici->owner = owner; ++ ici->dev.release = dummy_release; ++ ++ ret = device_register(&ici->dev); ++ ++ if (ret) ++ goto edevr; ++ ++ return scan_add_host(ici); ++ ++edevr: ++ mutex_lock(&list_lock); ++ list_del(&ici->list); ++ mutex_unlock(&list_lock); ++ ++ return ret; ++} ++EXPORT_SYMBOL(soc_camera_host_register); ++ ++/* Unregister all clients! */ ++void soc_camera_host_unregister(struct soc_camera_host *ici) ++{ ++ struct soc_camera_device *icd; ++ ++ mutex_lock(&list_lock); ++ ++ list_del(&ici->list); ++ ++ list_for_each_entry(icd, &devices, list) { ++ printk("list: %p %p\n", icd->dev.parent, &ici->dev); ++ if (icd->dev.parent == &ici->dev) { ++ device_unregister(&icd->dev); ++ /* Not before device_unregister(), .remove ++ * needs parent to call ici->remove() */ ++ icd->dev.parent = NULL; ++ } ++ } ++ ++ mutex_unlock(&list_lock); ++ ++ device_unregister(&ici->dev); ++} ++EXPORT_SYMBOL(soc_camera_host_unregister); ++ ++/* Image capture device */ ++int soc_camera_device_register(struct soc_camera_device *icd) ++{ ++ struct soc_camera_device *ix; ++ int num = -1, i; ++ ++ if (!icd) ++ return -EINVAL; ++ ++ for (i = 0; i < 256 && num < 0; i++) { ++ num = i; ++ list_for_each_entry(ix, &devices, list) { ++ if (ix->iface == icd->iface && ix->devnum == i) { ++ num = -1; ++ break; ++ } ++ } ++ } ++ ++ if (num < 0) ++ /* ok, we have 256 cameras on this host... man, stay reasonable... */ ++ return -ENOMEM; ++ ++ icd->devnum = num; ++ icd->dev.bus = &soc_camera_bus_type; ++// icd->dev.driver = &ic_drv; ++ snprintf(icd->dev.bus_id, sizeof(icd->dev.bus_id), ++ "%u-%u", icd->iface, icd->devnum); ++ ++ icd->dev.release = dummy_release; ++ ++ if (icd->ops->get_datawidth) ++ icd->cached_datawidth = icd->ops->get_datawidth(icd); ++ ++ return scan_add_device(icd); ++} ++EXPORT_SYMBOL(soc_camera_device_register); ++ ++void soc_camera_device_unregister(struct soc_camera_device *icd) ++{ ++ mutex_lock(&list_lock); ++ list_del(&icd->list); ++ ++ /* The bus->remove will be eventually called */ ++ if (icd->dev.parent) ++ device_unregister(&icd->dev); ++ mutex_unlock(&list_lock); ++} ++EXPORT_SYMBOL(soc_camera_device_unregister); ++ ++int soc_camera_video_start(struct soc_camera_device *icd) ++{ ++ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); ++ int err = -ENOMEM; ++ struct video_device *vdev; ++ ++ if (!icd->dev.parent) ++ return -ENODEV; ++ ++ if (!(vdev = video_device_alloc())) ++ goto evidallocd; ++ dev_dbg(&ici->dev, "%s: Allocated video_device %p\n", __FUNCTION__, vdev); ++ ++ strlcpy(vdev->name, ici->drv_name, sizeof(vdev->name)); ++ /* Maybe better &ici->dev */ ++ vdev->dev = &icd->dev; ++ vdev->type = VID_TYPE_CAPTURE; ++ vdev->current_norm = V4L2_STD_UNKNOWN; ++ vdev->fops = &soc_camera_fops; ++ vdev->release = video_device_release; ++ vdev->minor = -1; ++ vdev->tvnorms = V4L2_STD_UNKNOWN, ++ vdev->vidioc_querycap = soc_camera_querycap; ++ vdev->vidioc_g_fmt_cap = soc_camera_g_fmt_cap; ++ vdev->vidioc_enum_fmt_cap = soc_camera_enum_fmt_cap; ++ vdev->vidioc_s_fmt_cap = soc_camera_s_fmt_cap; ++ vdev->vidioc_enum_input = soc_camera_enum_input; ++ vdev->vidioc_g_input = soc_camera_g_input; ++ vdev->vidioc_s_input = soc_camera_s_input; ++ vdev->vidioc_s_std = soc_camera_s_std; ++ vdev->vidioc_reqbufs = soc_camera_reqbufs; ++ vdev->vidioc_try_fmt_cap = soc_camera_try_fmt_cap; ++ vdev->vidioc_querybuf = soc_camera_querybuf; ++ vdev->vidioc_qbuf = soc_camera_qbuf; ++ vdev->vidioc_dqbuf = soc_camera_dqbuf; ++ vdev->vidioc_streamon = soc_camera_streamon; ++ vdev->vidioc_streamoff = soc_camera_streamoff; ++ vdev->vidioc_queryctrl = soc_camera_queryctrl; ++ vdev->vidioc_g_ctrl = soc_camera_g_ctrl; ++ vdev->vidioc_s_ctrl = soc_camera_s_ctrl; ++ vdev->vidioc_cropcap = soc_camera_cropcap; ++ vdev->vidioc_g_crop = soc_camera_g_crop; ++ vdev->vidioc_s_crop = soc_camera_s_crop; ++ ++ icd->current_fmt = &icd->ops->formats[0]; ++ ++ err = video_register_device(vdev, VFL_TYPE_GRABBER, vdev->minor); ++ if (err < 0) { ++ dev_err(vdev->dev, "%s: video_register_device failed\n", __FUNCTION__); ++ goto evidregd; ++ } ++ icd->vdev = vdev; ++ ++ return 0; ++ ++evidregd: ++ video_device_release(vdev); ++evidallocd: ++ return err; ++} ++EXPORT_SYMBOL(soc_camera_video_start); ++ ++void soc_camera_video_stop(struct soc_camera_device *icd) ++{ ++ struct video_device *vdev = icd->vdev; ++ ++ dev_dbg(&icd->dev, "%s\n", __FUNCTION__); ++ ++ if (!icd->dev.parent || !vdev) ++ return; ++ ++ mutex_lock(&video_lock); ++ video_unregister_device(vdev); ++ icd->vdev = NULL; ++ mutex_unlock(&video_lock); ++} ++EXPORT_SYMBOL(soc_camera_video_stop); ++ ++static int __init soc_camera_init(void) ++{ ++ int ret = bus_register(&soc_camera_bus_type); ++ if (ret) ++ return ret; ++ ret = driver_register(&ic_drv); ++ if (ret) ++ goto edrvr; ++ ret = class_register(&soc_camera_host_class); ++ if (ret) ++ goto eclr; ++ ++ return 0; ++ ++eclr: ++ driver_unregister(&ic_drv); ++edrvr: ++ bus_unregister(&soc_camera_bus_type); ++ return ret; ++} ++ ++static void __exit soc_camera_exit(void) ++{ ++ class_unregister(&soc_camera_host_class); ++ driver_unregister(&ic_drv); ++ bus_unregister(&soc_camera_bus_type); ++} ++ ++module_init(soc_camera_init); ++module_exit(soc_camera_exit); ++ ++MODULE_DESCRIPTION("Image capture bus driver"); ++MODULE_AUTHOR("Guennadi Liakhovetski "); ++MODULE_LICENSE("GPL"); +diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h +new file mode 100644 +index 0000000..f416959 +--- /dev/null ++++ b/include/media/soc_camera.h +@@ -0,0 +1,138 @@ ++/* ++ * camera image capture (abstract) bus driver header ++ * ++ * Copyright (C) 2006, Sascha Hauer, Pengutronix ++ * Copyright (C) 2008, Guennadi Liakhovetski ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#ifndef SOC_CAMERA_H ++#define SOC_CAMERA_H ++ ++#include ++#include ++ ++struct soc_camera_device { ++ struct list_head list; ++ struct device dev; ++ struct device *control; ++ unsigned short width; /* Current window */ ++ unsigned short height; /* sizes */ ++ unsigned short x_min; /* Camera capabilities */ ++ unsigned short y_min; ++ unsigned short x_current; /* Current window location */ ++ unsigned short y_current; ++ unsigned short width_min; ++ unsigned short width_max; ++ unsigned short height_min; ++ unsigned short height_max; ++ unsigned short y_skip_top; /* Lines to skip at the top */ ++ unsigned short gain; ++ unsigned short exposure; ++ unsigned char iface; /* Host number */ ++ unsigned char devnum; /* Device number per host */ ++ unsigned char cached_datawidth; /* See comment in .c */ ++ struct soc_camera_ops *ops; ++ struct video_device *vdev; ++ const struct soc_camera_data_format *current_fmt; ++ int (*probe)(struct soc_camera_device *icd); ++ void (*remove)(struct soc_camera_device *icd); ++ struct module *owner; ++}; ++ ++struct soc_camera_file { ++ struct soc_camera_device *icd; ++ struct videobuf_queue vb_vidq; ++}; ++ ++struct soc_camera_host { ++ struct list_head list; ++ struct device dev; ++ unsigned char nr; /* Host number */ ++ size_t msize; ++ struct videobuf_queue_ops *vbq_ops; ++ struct module *owner; ++ void *priv; ++ char *drv_name; ++ int (*add)(struct soc_camera_device *); ++ void (*remove)(struct soc_camera_device *); ++ int (*set_capture_format)(struct soc_camera_device *, __u32, ++ struct v4l2_rect *); ++ int (*try_fmt_cap)(struct soc_camera_host *, struct v4l2_format *); ++ int (*reqbufs)(struct soc_camera_file *, struct v4l2_requestbuffers *); ++ int (*querycap)(struct soc_camera_host *, struct v4l2_capability *); ++ unsigned int (*poll)(struct file *, poll_table *); ++}; ++ ++struct soc_camera_link { ++ int bus_id; ++ struct i2c_client **extender; ++}; ++ ++static inline struct soc_camera_device *to_soc_camera_dev(struct device *dev) ++{ ++ return container_of(dev, struct soc_camera_device, dev); ++} ++ ++static inline struct soc_camera_host *to_soc_camera_host(struct device *dev) ++{ ++ return container_of(dev, struct soc_camera_host, dev); ++} ++ ++extern int soc_camera_host_register(struct soc_camera_host *ici, struct module *owner); ++extern void soc_camera_host_unregister(struct soc_camera_host *ici); ++extern int soc_camera_device_register(struct soc_camera_device *icd); ++extern void soc_camera_device_unregister(struct soc_camera_device *icd); ++ ++extern int soc_camera_video_start(struct soc_camera_device *icd); ++extern void soc_camera_video_stop(struct soc_camera_device *icd); ++ ++struct soc_camera_data_format { ++ char *name; ++ unsigned int depth; ++ __u32 fourcc; ++ enum v4l2_colorspace colorspace; ++}; ++ ++struct soc_camera_ops { ++ struct module *owner; ++ int (*init)(struct soc_camera_device *); ++ int (*release)(struct soc_camera_device *); ++ int (*start_capture)(struct soc_camera_device *); ++ int (*stop_capture)(struct soc_camera_device *); ++ int (*set_capture_format)(struct soc_camera_device *, __u32, ++ struct v4l2_rect *, unsigned int); ++ int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *); ++ const struct soc_camera_data_format *formats; ++ int num_formats; ++ int (*get_control)(struct soc_camera_device *, struct v4l2_control *); ++ int (*set_control)(struct soc_camera_device *, struct v4l2_control *); ++ const struct v4l2_queryctrl *controls; ++ int num_controls; ++ unsigned int(*get_datawidth)(struct soc_camera_device *icd); ++}; ++ ++static inline struct v4l2_queryctrl const *soc_camera_find_qctrl( ++ struct soc_camera_ops *ops, int id) ++{ ++ int i; ++ ++ for (i = 0; i < ops->num_controls; i++) ++ if (ops->controls[i].id == id) ++ return &ops->controls[i]; ++ ++ return NULL; ++} ++ ++#define IS_MASTER (1<<0) ++#define IS_HSYNC_ACTIVE_HIGH (1<<1) ++#define IS_VSYNC_ACTIVE_HIGH (1<<2) ++#define IS_DATAWIDTH_8 (1<<3) ++#define IS_DATAWIDTH_9 (1<<4) ++#define IS_DATAWIDTH_10 (1<<5) ++#define IS_PCLK_SAMPLE_RISING (1<<6) ++ ++#endif +-- +1.5.3.4 + +-- +video4linux-list mailing list +Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe +https://www.redhat.com/mailman/listinfo/video4linux-list + diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml new file mode 100644 index 0000000000..a681d2ad2e --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml @@ -0,0 +1,1330 @@ +Path: news.gmane.org!not-for-mail +From: Guennadi Liakhovetski +Newsgroups: gmane.comp.video.video4linux +Subject: [RFC PATCH 2/8] V4L2 soc_camera driver for PXA27x processors +Date: Wed, 23 Jan 2008 18:41:30 +0100 (CET) +Lines: 1259 +Approved: news@gmane.org +Message-ID: +References: +NNTP-Posting-Host: lo.gmane.org +Mime-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Trace: ger.gmane.org 1201110136 28805 80.91.229.12 (23 Jan 2008 17:42:16 GMT) +X-Complaints-To: usenet@ger.gmane.org +NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:16 +0000 (UTC) +To: video4linux-list@redhat.com +Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:35 2008 +Return-path: +Envelope-to: rh-video4linux-list@gmane.org +Original-Received: from hormel.redhat.com ([209.132.177.30]) + by lo.gmane.org with esmtp (Exim 4.50) + id 1JHjc5-0002rt-JS + for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:14 +0100 +Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110]) + by hormel.redhat.com (Postfix) with ESMTP + id 2A84F730D3; Wed, 23 Jan 2008 12:41:44 -0500 (EST) +Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com + [172.16.52.254]) + by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id + m0NHffgW017091 for ; + Wed, 23 Jan 2008 12:41:41 -0500 +Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32]) + by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHffAN027831 + for ; Wed, 23 Jan 2008 12:41:41 -0500 +Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) + by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfHEp000673 + for ; Wed, 23 Jan 2008 12:41:18 -0500 +Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:10 -0000 +Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange) + [87.189.47.31] + by mail.gmx.net (mp032) with SMTP; 23 Jan 2008 18:41:10 +0100 +X-Authenticated: #20450766 +X-Provags-ID: V01U2FsdGVkX1+0is8xDaK0Koc8XTQH0vhXxt8dgUbjrW8SVR/i+1 + dGRci20BqQXyog +Original-Received: from lyakh (helo=localhost) + by axis700.grange with local-esmtp (Exim 4.63) + (envelope-from ) id 1JHjbO-00029q-7k + for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:30 +0100 +X-X-Sender: lyakh@axis700.grange +In-Reply-To: +X-Y-GMX-Trusted: 0 +X-RedHat-Spam-Score: 0 +X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 +X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32 +X-loop: video4linux-list@redhat.com +X-BeenThere: video4linux-list@redhat.com +X-Mailman-Version: 2.1.5 +Precedence: junk +List-Id: Linux and Kernel Video +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Original-Sender: video4linux-list-bounces@redhat.com +Errors-To: video4linux-list-bounces@redhat.com +Xref: news.gmane.org gmane.comp.video.video4linux:36472 +Archived-At: + +This patch adds a driver for the Quick Capture Interface on the PXA270. It +is based on the original driver from Intel, but has been re-worked +multiple times since then, this time with the V4L2 API support. + +Signed-off-by: Guennadi Liakhovetski +--- + drivers/media/video/Kconfig | 8 + + drivers/media/video/Makefile | 1 + + drivers/media/video/pxa_camera.c | 895 +++++++++++++++++++++++++++++++++++ + include/asm-arm/arch-pxa/pxa-regs.h | 94 ++++ + include/asm-arm/arch-pxa/pxa_cif.h | 48 ++ + 5 files changed, 1046 insertions(+), 0 deletions(-) + create mode 100644 drivers/media/video/pxa_camera.c + create mode 100644 include/asm-arm/arch-pxa/pxa_cif.h + +diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig +index be54183..dc0dfec 100644 +--- a/drivers/media/video/Kconfig ++++ b/drivers/media/video/Kconfig +@@ -803,4 +803,12 @@ config SOC_CAMERA + over a bus like PCI or USB. For example some i2c camera hanging + directly on the data bus of an SoC. + ++config VIDEO_PXA27X ++ tristate "PXA27x Quick Capture Interface driver" ++ depends on VIDEO_DEV && PXA27x ++ select VIDEO_BUF ++ select SOC_CAMERA ++ ---help--- ++ This is a v4l2 driver for the PXA27x Quick Capture Interface ++ + endif # VIDEO_CAPTURE_DRIVERS +diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile +index 97a9135..81b7cd6 100644 +--- a/drivers/media/video/Makefile ++++ b/drivers/media/video/Makefile +@@ -116,6 +116,7 @@ obj-$(CONFIG_USB_QUICKCAM_MESSENGER) += usbvideo/ + + obj-$(CONFIG_VIDEO_VIVI) += vivi.o + ++obj-$(CONFIG_VIDEO_PXA27X) += pxa_camera.o + obj-$(CONFIG_SOC_CAMERA) += soc_camera.o + + EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core +diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c +new file mode 100644 +index 0000000..78927fb +--- /dev/null ++++ b/drivers/media/video/pxa_camera.c +@@ -0,0 +1,895 @@ ++/* ++ * V4L2 Driver for PXA camera host ++ * ++ * Copyright (C) 2006, Sascha Hauer, Pengutronix ++ * Copyright (C) 2008, Guennadi Liakhovetski ++ * ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#include ++#include ++ ++#define PXA_CAM_VERSION_CODE KERNEL_VERSION(0, 0, 5) ++#define PXA_CAM_DRV_NAME "pxa2xx-camera" ++ ++#define CICR0_IRQ_MASK (CICR0_TOM | CICR0_RDAVM | CICR0_FEM | CICR0_EOLM | \ ++ CICR0_PERRM | CICR0_QDM | CICR0_CDM | CICR0_SOFM | \ ++ CICR0_EOFM | CICR0_FOM) ++ ++/* ++ * Structures ++ */ ++ ++/* buffer for one video frame */ ++struct pxa_buffer { ++ /* common v4l buffer stuff -- must be first */ ++ struct videobuf_buffer vb; ++ ++ const struct soc_camera_data_format *fmt; ++ ++ /* our descriptor list needed for the PXA DMA engine */ ++ dma_addr_t sg_dma; ++ struct pxa_dma_desc *sg_cpu; ++ size_t sg_size; ++ int inwork; ++}; ++ ++struct pxa_framebuffer_queue { ++ dma_addr_t sg_last_dma; ++ struct pxa_dma_desc *sg_last_cpu; ++}; ++ ++struct pxa_camera_dev { ++ struct device *dev; ++ ++ unsigned int irq; ++ void __iomem *base; ++ unsigned int dma_chan_y; ++ ++ enum v4l2_buf_type type; ++ ++ struct pxacamera_platform_data *pdata; ++ struct resource *res; ++ unsigned long platform_flags; ++ unsigned long platform_mclk_10khz; ++ ++ struct list_head capture; ++ ++ spinlock_t lock; ++ ++ int dma_running; ++ ++ struct pxa_buffer *active; ++}; ++ ++static const char *pxa_cam_driver_description = "PXA_Camera"; ++ ++static unsigned int vid_limit = 16; /* Video memory limit, in Mb */ ++ ++/* ++ * Videobuf operations ++ */ ++static int ++pxa_videobuf_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size) ++{ ++ struct soc_camera_device *icd = vq->priv_data; ++ ++ pr_debug("%s: count=%d, size=%d\n", __FUNCTION__, *count, *size); ++ ++ *size = icd->width * icd->height * ((icd->current_fmt->depth + 7) >> 3); ++ ++ if (0 == *count) ++ *count = 32; ++ while (*size * *count > vid_limit * 1024 * 1024) ++ (*count)--; ++ ++ return 0; ++} ++ ++static void free_buffer(struct videobuf_queue *vq, struct pxa_buffer *buf) ++{ ++ struct soc_camera_device *icd = vq->priv_data; ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ struct pxa_camera_dev *pcdev = ici->priv; ++ ++ BUG_ON(in_interrupt()); ++ ++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__, &buf->vb, buf->vb.baddr, buf->vb.bsize); ++ ++ /* This waits until this buffer is out of danger, i.e., until it is no longer ++ * in STATE_QUEUED or STATE_ACTIVE */ ++ videobuf_waiton(&buf->vb, 0, 0); ++ videobuf_dma_unmap(vq, &buf->vb.dma); ++ videobuf_dma_free(&buf->vb.dma); ++ ++ if (buf->sg_cpu) ++ dma_free_coherent(pcdev->dev, buf->sg_size, buf->sg_cpu, buf->sg_dma); ++ buf->sg_cpu = NULL; ++ ++ buf->vb.state = STATE_NEEDS_INIT; ++} ++ ++static int ++pxa_videobuf_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb, ++ enum v4l2_field field) ++{ ++ struct soc_camera_device *icd = vq->priv_data; ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ struct pxa_camera_dev *pcdev = ici->priv; ++ struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb); ++// unsigned long flags; ++ int i, ret; ++ ++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__, vb, vb->baddr, vb->bsize); ++ ++ /* Added list head initialization on alloc */ ++ WARN_ON(!list_empty(&vb->queue)); ++ ++#ifdef DEBUG ++ /* This can be useful if you want to see if we actually fill ++ * the buffer with something */ ++ memset((void *)vb->baddr, 0xaa, vb->bsize); ++#endif ++ ++ BUG_ON(NULL == icd->current_fmt); ++ ++ /* I think, in buf_prepare you only have to protect global data, ++ * the actual buffer is yours */ ++// spin_lock_irqsave(&pcdev->lock, flags); ++ buf->inwork = 1; ++ ++ if (buf->fmt != icd->current_fmt || ++ vb->width != icd->width || ++ vb->height != icd->height || ++ vb->field != field) { ++ buf->fmt = icd->current_fmt; ++ vb->width = icd->width; ++ vb->height = icd->height; ++ vb->field = field; ++ vb->state = STATE_NEEDS_INIT; ++ } ++ ++ vb->size = vb->width * vb->height * ((buf->fmt->depth + 7) >> 3); ++ if (0 != vb->baddr && vb->bsize < vb->size) { ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ if (vb->state == STATE_NEEDS_INIT) { ++ unsigned int size = vb->size; ++ ++ if (0 != (ret = videobuf_iolock(vq, vb, NULL))) ++ goto fail; ++ ++ if (buf->sg_cpu) ++ dma_free_coherent(pcdev->dev, buf->sg_size, buf->sg_cpu, buf->sg_dma); ++ ++ buf->sg_size = (vb->dma.sglen + 1) * sizeof(struct pxa_dma_desc); ++ buf->sg_cpu = dma_alloc_coherent(pcdev->dev, ++ buf->sg_size, ++ &buf->sg_dma, GFP_KERNEL); ++ if (!buf->sg_cpu) { ++ ret = -ENOMEM; ++ goto fail; ++ } ++ ++ pr_debug("%s nents=%d size: %d sg=0x%p\n", __FUNCTION__, vb->dma.sglen, size, vb->dma.sglist); ++ for (i = 0; i < vb->dma.sglen; i++ ) { ++ struct scatterlist *sg = vb->dma.sglist; ++ unsigned int dma_len = sg_dma_len(&sg[i]), xfer_len; ++ ++ BUG_ON(!sg[i].page); ++ ++ sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset; ++ ++ buf->sg_cpu[i].dsadr = pcdev->res->start + 0x28; /* CIBR0 */ ++ buf->sg_cpu[i].dtadr = sg_dma_address(&sg[i]); ++ /* PXA27x Developer's Manual 27.4.4.1: round up to 8 bytes */ ++// xfer_len = (min(dma_len, size) + 7) & ~7; ++ xfer_len = min(dma_len, size); ++ if (xfer_len & 7) ++ dev_err(&icd->dev, "Unaligned buffer: dma_len %u, size %u\n", ++ dma_len, size); ++ buf->sg_cpu[i].dcmd = DCMD_FLOWSRC | DCMD_BURST8 | DCMD_INCTRGADDR | ++ xfer_len; ++ size -= dma_len; ++ buf->sg_cpu[i].ddadr = buf->sg_dma + (i + 1) * ++ sizeof(struct pxa_dma_desc); ++ } ++ buf->sg_cpu[vb->dma.sglen - 1].ddadr = DDADR_STOP; ++ buf->sg_cpu[vb->dma.sglen - 1].dcmd |= DCMD_ENDIRQEN; ++ ++ vb->state = STATE_PREPARED; ++ } ++ ++ buf->inwork = 0; ++// spin_unlock_irqrestore(&pcdev->lock, flags); ++ ++ return 0; ++ ++fail: ++ free_buffer(vq,buf); ++out: ++ buf->inwork = 0; ++// spin_unlock_irqrestore(&pcdev->lock, flags); ++ return ret; ++} ++ ++static void ++pxa_videobuf_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb) ++{ ++ struct soc_camera_device *icd = vq->priv_data; ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ struct pxa_camera_dev *pcdev = ici->priv; ++ struct pxa_buffer *buf = container_of(vb,struct pxa_buffer,vb); ++ struct pxa_buffer *active = pcdev->active; ++ int nents = vb->dma.sglen; ++ unsigned long flags; ++ ++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__, vb, vb->baddr, vb->bsize); ++ spin_lock_irqsave(&pcdev->lock, flags); ++ ++ list_add_tail(&vb->queue, &pcdev->capture); ++ ++ vb->state = STATE_ACTIVE; ++ ++ if (!pcdev->active) { ++ CIFR |= CIFR_RESET_F; ++ DDADR(pcdev->dma_chan_y) = buf->sg_dma; ++ DCSR(pcdev->dma_chan_y) = DCSR_RUN; ++ pcdev->active = buf; ++ CICR0 |= CICR0_ENB; ++ } else { ++ /* Stop DMA engine */ ++ DCSR(pcdev->dma_chan_y) = 0; ++ ++ /* Add the descriptors we just initialized to the currently ++ * running chain ++ */ ++ pcdev->active->sg_cpu[active->vb.dma.sglen - 1].ddadr = buf->sg_dma; ++ ++ /* Setup a dummy descriptor with the DMA engines current ++ * state ++ */ ++ buf->sg_cpu[nents].dsadr = pcdev->res->start + 0x28; /* CIBR0 */ ++ buf->sg_cpu[nents].dtadr = DTADR(pcdev->dma_chan_y); ++ buf->sg_cpu[nents].dcmd = DCMD(pcdev->dma_chan_y); ++ ++ if (DDADR(pcdev->dma_chan_y) == DDADR_STOP) { ++ /* The DMA engine is on the last descriptor, set the ++ * next descriptors address to the descriptors ++ * we just initialized ++ */ ++ buf->sg_cpu[nents].ddadr = buf->sg_dma; ++ } else { ++ buf->sg_cpu[nents].ddadr = DDADR(pcdev->dma_chan_y); ++ } ++ ++ /* The next descriptor is the dummy descriptor */ ++ DDADR(pcdev->dma_chan_y) = buf->sg_dma + nents * ++ sizeof(struct pxa_dma_desc); ++ ++ DCSR(pcdev->dma_chan_y) = DCSR_RUN; ++#if 0 ++ if(CISR & CISR_IFO_0) { ++ printk("%s: fifo ovl. repeat last\n",__FUNCTION__); ++ DDADR(pcdev->dma_chan_y) = pcdev->active->sg_dma; ++ ++ CICR0 &= ~CICR0_ENB; ++ CIFR |= CIFR_RESET_F; ++ DCSR(pcdev->dma_chan_y) = DCSR_RUN; ++ CICR0 |= CICR0_ENB; ++ } else { ++ DCSR(pcdev->dma_chan_y) = DCSR_RUN; ++// printk("no fifo ovl\n"); ++ } ++#endif ++ } ++ ++ spin_unlock_irqrestore(&pcdev->lock, flags); ++ ++} ++ ++static void pxa_videobuf_release(struct videobuf_queue *vq, struct videobuf_buffer *vb) ++{ ++ struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb); ++ ++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__,vb, vb->baddr, vb->bsize); ++ ++#ifdef DEBUG ++ switch(vb->state) { ++ case STATE_ACTIVE: ++ printk("%s (active)\n",__FUNCTION__); ++ break; ++ case STATE_QUEUED: ++ printk("%s (queued)\n",__FUNCTION__); ++ break; ++ case STATE_PREPARED: ++ printk("%s (prepared)\n",__FUNCTION__); ++ break; ++ default: ++ printk("%s (unknown)\n",__FUNCTION__); ++ break; ++ } ++#endif ++ ++ free_buffer(vq, buf); ++} ++ ++static int pxa_videobuf_map_sg(void *dev, struct scatterlist *sg, int nents, ++ int direction) ++{ ++ pr_debug("%s, number of pages=%d\n", __FUNCTION__,nents); ++ BUG_ON(direction == DMA_NONE); ++ ++ dma_map_sg(dev, sg, nents, DMA_FROM_DEVICE); ++ ++ return nents; ++} ++ ++static int pxa_videobuf_unmap_sg(void *dev, struct scatterlist *sg, int nents, ++ int direction) ++{ ++ pr_debug("%s\n", __FUNCTION__); ++ dma_unmap_sg(dev, sg, nents, DMA_FROM_DEVICE); ++ return 0; ++} ++ ++static int pxa_videobuf_dma_sync_sg(void *dev, struct scatterlist *sg, int nents, ++ int direction) ++{ ++ return 0; ++} ++ ++static void pxa_camera_dma_irq_y(int channel, void *data) ++{ ++ struct pxa_camera_dev *pcdev = data; ++ struct pxa_buffer *buf; ++ unsigned long flags; ++ unsigned int status; ++ struct videobuf_buffer *vb; ++ ++ spin_lock_irqsave(&pcdev->lock, flags); ++ ++ status = DCSR(pcdev->dma_chan_y); ++ if (status & DCSR_BUSERR) { ++ printk("%s: Bus Error\n",__FUNCTION__); ++ DCSR(pcdev->dma_chan_y) |= DCSR_BUSERR; ++ goto out; ++ } ++ ++ if (!(status & DCSR_ENDINTR)) { ++ printk("%s: unknown dma interrupt source. status: 0x%08x\n", ++ __FUNCTION__, status); ++ goto out; ++ } ++ ++ DCSR(pcdev->dma_chan_y) |= DCSR_ENDINTR; ++ ++ if (!pcdev->active) { ++ printk("%s: no active buf\n",__FUNCTION__); ++ goto out; ++ } ++ ++ vb = &pcdev->active->vb; ++ buf = container_of(vb, struct pxa_buffer, vb); ++ WARN_ON(buf->inwork || list_empty(&vb->queue)); ++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__,vb, vb->baddr, vb->bsize); ++ ++ /* _init is used to debug races, see comment in pxa_is_reqbufs() */ ++ list_del_init(&vb->queue); ++ vb->state = STATE_DONE; ++ do_gettimeofday(&vb->ts); ++ vb->field_count++; ++ wake_up(&vb->done); ++ ++ if (list_empty(&pcdev->capture)) { ++ pcdev->active = NULL; ++ DCSR(pcdev->dma_chan_y) = 0; ++ CICR0 &= ~CICR0_ENB; ++ goto out; ++ } ++ ++ pcdev->active = list_entry(pcdev->capture.next, struct pxa_buffer, vb.queue); ++ ++out: ++ spin_unlock_irqrestore(&pcdev->lock, flags); ++} ++ ++static struct videobuf_queue_ops pxa_video_ops = { ++ .buf_setup = pxa_videobuf_setup, ++ .buf_prepare = pxa_videobuf_prepare, ++ .buf_queue = pxa_videobuf_queue, ++ .buf_release = pxa_videobuf_release, ++ ++ /* Non-pci handling routines */ ++ .vb_map_sg = pxa_videobuf_map_sg, ++ .vb_dma_sync_sg = pxa_videobuf_dma_sync_sg, ++ .vb_unmap_sg = pxa_videobuf_unmap_sg, ++}; ++ ++static int mclk_get_divisor(unsigned int mclk_10khz) ++{ ++ unsigned long div; ++ unsigned long lcdclk; ++ ++ lcdclk = get_lcdclk_frequency_10khz(); ++ ++ /* We verify platform_mclk_10khz != 0, so this is only against future bugs */ ++ if (unlikely(!mclk_10khz)) ++ return 0; ++ ++ div = (lcdclk + 2 * mclk_10khz - 1) / (2 * mclk_10khz) - 1; ++ ++ pr_debug("pxa_camera: LCD clock %lukHz, platform target freq %dkHz, divisor %lu\n", ++ lcdclk * 10, mclk_10khz * 10, div); ++ ++ return div; ++} ++ ++static void pxa_is_activate(struct pxa_camera_dev *pcdev) ++{ ++ struct pxacamera_platform_data *pdata = pcdev->pdata; ++ ++ printk("Registered platform device at %p data %p\n", pcdev, pdata); ++ ++ if (pdata && pdata->init) { ++ dev_dbg(pcdev->dev, "%s: Init gpios\n", __FUNCTION__); ++ pdata->init(pcdev->dev); ++ } ++ ++ if (pdata && pdata->power) { ++ dev_dbg(pcdev->dev, "%s: Power on camera\n", __FUNCTION__); ++ pdata->power(pcdev->dev, 1); ++ } ++ ++ if (pdata && pdata->reset) { ++ dev_dbg(pcdev->dev, "%s: Releasing camera reset\n", __FUNCTION__); ++ pdata->reset(pcdev->dev, 1); ++ } ++ ++ CICR0 = 0x3FF; /* disable all interrupts */ ++ pxa_set_cken(CKEN_CAMERA, 1); ++} ++ ++static void pxa_is_deactivate(struct pxa_camera_dev *pdev) ++{ ++ struct pxacamera_platform_data *board = pdev->pdata; ++ ++ pxa_set_cken(CKEN_CAMERA, 0); ++/* ++ dev_dbg(&pdev->dev, "%s: Asserting camera reset\n", __FUNCTION__); ++ if (board && board->reset) { ++ board->reset(&pdev->dev, 0); ++ } ++*/ ++ dev_dbg(pdev->dev, "%s: Power off camera\n", __FUNCTION__); ++ if (board && board->power) ++ board->power(pdev->dev, 0); ++} ++ ++static irqreturn_t pxa_camera_irq(int irq, void *data) ++{ ++// struct pxa_camera_dev *pcdev = (struct pxa_camera_dev *)data; ++// printk("%s: 0x%08x\n",__FUNCTION__,CISR); ++ unsigned int status = CISR; ++// if(status & CISR_SOF) printk("Start of frame\n"); ++// if(status & CISR_EOF) printk("End of frame\n"); ++// printk("%s 0x%08x\n",__FUNCTION__,status); ++ CISR = status; ++ ++ return IRQ_HANDLED; ++} ++ ++/* The following two functions absolutely depend on the fact, that ++ * there can be only one camera on PXA quick capture interface */ ++static int pxa_is_add_device(struct soc_camera_device *icd) ++{ ++ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); ++ struct pxa_camera_dev *pcdev = ici->priv; ++ ++ dev_info(&icd->dev, "PXA Camera driver loaded for host %d\n", ++ icd->iface); ++ ++ pxa_is_activate(pcdev); ++// udelay(200); ++ return icd->ops->init(icd); ++} ++ ++static void pxa_is_remove_device(struct soc_camera_device *icd) ++{ ++ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); ++ struct pxa_camera_dev *pcdev = ici->priv; ++ ++ dev_dbg(pcdev->dev, "%s\n", __FUNCTION__); ++ ++ /* disable capture, disable interrupts */ ++ CICR0 = 0x3ff; ++ /* Stop DMA engine */ ++ DCSR(pcdev->dma_chan_y) = 0; ++ ++ icd->ops->release(icd); ++ ++ pxa_is_deactivate(pcdev); ++} ++ ++static int pxa_is_set_capture_format(struct soc_camera_device *icd, ++ __u32 pixfmt, struct v4l2_rect *rect) ++{ ++ struct soc_camera_host *ici = ++ to_soc_camera_host(icd->dev.parent); ++ struct pxa_camera_dev *pcdev = ici->priv; ++ unsigned int datawidth = 0, dw, bpp; ++ u32 cicr0, cicr4 = 0; ++ int ret; ++ ++ /* If requested data width is supported by the platform, use it */ ++ switch (icd->cached_datawidth) { ++ case 10: ++ if (pcdev->platform_flags & PXACIF_DATAWIDTH_10) ++ datawidth = IS_DATAWIDTH_10; ++ break; ++ case 9: ++ if (pcdev->platform_flags & PXACIF_DATAWIDTH_9) ++ datawidth = IS_DATAWIDTH_9; ++ break; ++ case 8: ++ if (pcdev->platform_flags & PXACIF_DATAWIDTH_8) ++ datawidth = IS_DATAWIDTH_8; ++ } ++ if (!datawidth) ++ return -EINVAL; ++ ++ ret = icd->ops->set_capture_format(icd, pixfmt, rect, ++ datawidth | ++ (pcdev->platform_flags & PXACIF_MASTER ? ++ IS_MASTER : 0) | ++ (pcdev->platform_flags & PXACIF_HSP ? ++ 0 : IS_HSYNC_ACTIVE_HIGH) | ++ (pcdev->platform_flags & PXACIF_VSP ? ++ 0 : IS_VSYNC_ACTIVE_HIGH) | ++ (pcdev->platform_flags & PXACIF_PCP ? ++ 0 : IS_PCLK_SAMPLE_RISING)); ++ if (ret < 0) ++ return ret; ++ ++ /* Datawidth is now guaranteed to be equal to one of the three values. ++ * We fix bit-per-pixel equal to data-width... */ ++ switch (datawidth) { ++ case IS_DATAWIDTH_10: ++ icd->cached_datawidth = 10; ++ dw = 4; ++ bpp = 0x40; ++ break; ++ case IS_DATAWIDTH_9: ++ icd->cached_datawidth = 9; ++ dw = 3; ++ bpp = 0x20; ++ break; ++ case IS_DATAWIDTH_8: ++ icd->cached_datawidth = 8; ++ dw = 2; ++ bpp = 0; ++ } ++ ++ if (pcdev->platform_flags & PXACIF_PCLK_EN) ++ cicr4 |= CICR4_PCLK_EN; ++ if (pcdev->platform_flags & PXACIF_MCLK_EN) ++ cicr4 |= CICR4_MCLK_EN; ++ if (pcdev->platform_flags & PXACIF_PCP) ++ cicr4 |= CICR4_PCP; ++ if (pcdev->platform_flags & PXACIF_HSP) ++ cicr4 |= CICR4_HSP; ++ if (pcdev->platform_flags & PXACIF_VSP) ++ cicr4 |= CICR4_VSP; ++ ++ cicr0 = CICR0; ++ if (cicr0 & CICR0_ENB) ++ CICR0 = cicr0 & ~CICR0_ENB; ++ CICR1 = CICR1_PPL_VAL(rect->width - 1) | bpp | dw; ++ CICR2 = 0; ++ CICR3 = CICR3_LPF_VAL(rect->height - 1) | ++ CICR3_BFW_VAL(min((unsigned short)255, icd->y_skip_top)); ++ CICR4 = mclk_get_divisor(pcdev->platform_mclk_10khz) | cicr4; ++ ++ /* CIF interrupts are not used, only DMA */ ++ CICR0 = (pcdev->platform_flags & PXACIF_MASTER ? ++ 0 : (CICR0_SL_CAP_EN | CICR0_SIM_SP)) | ++ CICR0_DMAEN | CICR0_IRQ_MASK | (cicr0 & CICR0_ENB); ++ ++ return 0; ++} ++ ++static int pxa_is_try_fmt_cap(struct soc_camera_host *ici, struct v4l2_format *f) ++{ ++ /* limit to pxa hardware capabilities */ ++ if (f->fmt.pix.height < 32) ++ f->fmt.pix.height = 32; ++ if (f->fmt.pix.height > 2048) ++ f->fmt.pix.height = 2048; ++ if (f->fmt.pix.width < 48) ++ f->fmt.pix.width = 48; ++ if (f->fmt.pix.width > 2048) ++ f->fmt.pix.width = 2048; ++ f->fmt.pix.width &= ~0x01; ++ ++ return 0; ++} ++ ++static int pxa_is_reqbufs(struct soc_camera_file *icf, struct v4l2_requestbuffers *p) ++{ ++ int i; ++ ++ /* This is for locking debugging only. I removed spinlocks and now I ++ * check whether .prepare is ever called on a linked buffer, or whether ++ * a dma IRQ can occur for an in-work or unlinked buffer. Until now ++ * it hadn't triggered */ ++ for (i = 0; i < p->count; i++) { ++ struct pxa_buffer *buf = container_of(icf->vb_vidq.bufs[i], ++ struct pxa_buffer, vb); ++ buf->inwork = 0; ++ INIT_LIST_HEAD(&buf->vb.queue); ++ } ++ ++ return 0; ++} ++ ++static unsigned int pxa_is_poll(struct file *file, poll_table *pt) ++{ ++ struct soc_camera_file *icf = file->private_data; ++ struct pxa_buffer *buf; ++ ++ buf = list_entry(icf->vb_vidq.stream.next, struct pxa_buffer, vb.stream); ++ ++ poll_wait(file, &buf->vb.done, pt); ++ ++ if (buf->vb.state == STATE_DONE || ++ buf->vb.state == STATE_ERROR) ++ return POLLIN|POLLRDNORM; ++ ++ return 0; ++} ++ ++static int pxa_is_querycap(struct soc_camera_host *ici, ++ struct v4l2_capability *cap) ++{ ++ /* cap->name is set by the firendly caller:-> */ ++ strlcpy(cap->card, pxa_cam_driver_description, sizeof(cap->card)); ++ cap->version = PXA_CAM_VERSION_CODE; ++ cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; ++ ++ return 0; ++} ++ ++/* Should beallocated dynamically too, but we have only one. */ ++static struct soc_camera_host pxa_soc_camera_host = { ++ .drv_name = PXA_CAM_DRV_NAME, ++ .vbq_ops = &pxa_video_ops, ++ .add = pxa_is_add_device, ++ .remove = pxa_is_remove_device, ++ .msize = sizeof(struct pxa_buffer), ++ .set_capture_format = pxa_is_set_capture_format, ++ .try_fmt_cap = pxa_is_try_fmt_cap, ++ .reqbufs = pxa_is_reqbufs, ++ .poll = pxa_is_poll, ++ .querycap = pxa_is_querycap, ++}; ++ ++static int pxa_camera_probe(struct platform_device *pdev) ++{ ++ struct pxa_camera_dev *pcdev; ++ struct resource *res; ++ void __iomem *base; ++ unsigned int irq; ++ int err = 0; ++ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ irq = platform_get_irq(pdev, 0); ++ if (!res || !irq) { ++ err = -ENODEV; ++ goto exit; ++ } ++ ++ pcdev = kzalloc(sizeof(*pcdev), GFP_KERNEL); ++ if (!pcdev) { ++ dev_err(&pdev->dev, "%s: Could not allocate pcdev\n", __FUNCTION__); ++ err = -ENOMEM; ++ goto exit; ++ } ++ ++ dev_set_drvdata(&pdev->dev, pcdev); ++ pcdev->res = res; ++ ++ pcdev->pdata = pdev->dev.platform_data; ++ pcdev->platform_flags = pcdev->pdata->flags; ++ if (! pcdev->platform_flags & (PXACIF_DATAWIDTH_8 | PXACIF_DATAWIDTH_9 | ++ PXACIF_DATAWIDTH_10)) { ++ /* Platform hasn't set available data widths. This is bad. ++ * Warn and use a default. */ ++ dev_warn(&pdev->dev, "WARNING! Platform hasn't set available " ++ "data widths, using default 10 bit\n"); ++ pcdev->platform_flags |= PXACIF_DATAWIDTH_10; ++ } ++ pcdev->platform_mclk_10khz = pcdev->pdata->mclk_10khz; ++ if (!pcdev->platform_mclk_10khz) { ++ dev_warn(&pdev->dev, ++ "mclk_10khz == 0! Please, fix your platform data. " ++ "Using default 20MHz\n"); ++ pcdev->platform_mclk_10khz = 2000; ++ } ++ ++ INIT_LIST_HEAD(&pcdev->capture); ++ spin_lock_init(&pcdev->lock); ++ ++ /* ++ * Request the regions. ++ */ ++ if (!request_mem_region(res->start, res->end - res->start + 1, PXA_CAM_DRV_NAME)) { ++ err = -EBUSY; ++ goto exit_kfree; ++ } ++ ++ base = ioremap(res->start, res->end - res->start + 1); ++ if (!base) { ++ err = -ENOMEM; ++ goto exit_release; ++ } ++ pcdev->irq = irq; ++ pcdev->base = base; ++ pcdev->dev = &pdev->dev; ++ ++ /* request dma */ ++ pcdev->dma_chan_y = pxa_request_dma("CI_Y", DMA_PRIO_HIGH, pxa_camera_dma_irq_y, pcdev); ++ if (pcdev->dma_chan_y < 0) { ++ printk(KERN_ERR "Can't request DMA for Y\n"); ++ err = -ENOMEM; ++ goto exit_iounmap; ++ } ++ pr_debug("got DMA channel %d\n", pcdev->dma_chan_y); ++ ++ DRCMR68 = pcdev->dma_chan_y | DRCMR_MAPVLD; ++ ++ /* request irq */ ++ err = request_irq(pcdev->irq, pxa_camera_irq, 0, PXA_CAM_DRV_NAME, pcdev); ++ if (err) { ++ printk ("Camera interrupt register failed \n"); ++ goto exit_free_dma; ++ } ++ ++ pxa_soc_camera_host.priv = pcdev; ++ pxa_soc_camera_host.dev.parent = &pdev->dev; ++ pxa_soc_camera_host.nr = pdev->id; ++ err = soc_camera_host_register(&pxa_soc_camera_host, THIS_MODULE); ++ if (err) ++ goto exit_free_irq; ++ ++ return 0; ++ ++ exit_free_irq: ++ free_irq(pcdev->irq, pcdev); ++ exit_free_dma: ++ pxa_free_dma(pcdev->dma_chan_y); ++ exit_iounmap: ++ iounmap(base); ++ exit_release: ++ release_mem_region(res->start, res->end - res->start + 1); ++ exit_kfree: ++ kfree(pcdev); ++ exit: ++ return err; ++} ++ ++static int __devexit pxa_camera_remove(struct platform_device *pdev) ++{ ++ struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev); ++ struct resource *res; ++ ++ pxa_free_dma(pcdev->dma_chan_y); ++ free_irq(pcdev->irq, pcdev); ++ ++ soc_camera_host_unregister(&pxa_soc_camera_host); ++ ++ iounmap(pcdev->base); ++ ++ res = pcdev->res; ++ release_mem_region(res->start, res->end - res->start + 1); ++ ++ kfree(pcdev); ++ ++ dev_info(&pdev->dev, "%s: PXA Camera driver unloaded\n", __FUNCTION__); ++ ++ return 0; ++} ++ ++/* ++ * Suspend the Camera Module. ++ */ ++static int pxa_camera_suspend(struct platform_device *pdev, pm_message_t level) ++{ ++ struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev); ++ ++ dev_info(&pdev->dev, "camera suspend\n"); ++ disable_irq(pcdev->irq); ++ return 0; ++} ++ ++/* ++ * Resume the Camera Module. ++ */ ++static int pxa_camera_resume(struct platform_device *pdev) ++{ ++ struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev); ++ ++ dev_info(&pdev->dev, "camera resume\n"); ++ enable_irq(pcdev->irq); ++ ++ /* if (pcdev) { */ /* FIXME: dev in use? */ ++/* DRCMR68 = pcdev->dma_chan_y | DRCMR_MAPVLD; */ ++/* DRCMR69 = pcdev->dma_chan_cb | DRCMR_MAPVLD; */ ++/* DRCMR70 = pcdev->dma_chan_cr | DRCMR_MAPVLD; */ ++/* } */ ++ ++ return 0; ++} ++ ++ ++static struct platform_driver pxa_camera_driver = { ++ .driver = { ++ .name = PXA_CAM_DRV_NAME, ++ }, ++ .probe = pxa_camera_probe, ++ .remove = __exit_p(pxa_camera_remove), ++ .suspend = pxa_camera_suspend, ++ .resume = pxa_camera_resume, ++}; ++ ++ ++static int __devinit pxa_camera_init(void) ++{ ++ return platform_driver_register(&pxa_camera_driver); ++} ++ ++static void __exit pxa_camera_exit(void) ++{ ++ return platform_driver_unregister(&pxa_camera_driver); ++} ++ ++module_init(pxa_camera_init); ++module_exit(pxa_camera_exit); ++ ++MODULE_DESCRIPTION("PXA27x SoC Camera Host driver"); ++MODULE_AUTHOR("Guennadi Liakhovetski "); ++MODULE_LICENSE("GPL"); +diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h +index e68b593..f587c83 100644 +--- a/include/asm-arm/arch-pxa/pxa-regs.h ++++ b/include/asm-arm/arch-pxa/pxa-regs.h +@@ -1229,19 +1229,26 @@ + #define GPIO10_RTCCLK 10 /* real time clock (1 Hz) */ + #define GPIO11_3_6MHz 11 /* 3.6 MHz oscillator out */ + #define GPIO12_32KHz 12 /* 32 kHz out */ ++#define GPIO12_CIF_DD7 12 /* Capture Interface D7 (PXA27x) */ + #define GPIO13_MBGNT 13 /* memory controller grant */ + #define GPIO14_MBREQ 14 /* alternate bus master request */ + #define GPIO15_nCS_1 15 /* chip select 1 */ + #define GPIO16_PWM0 16 /* PWM0 output */ + #define GPIO17_PWM1 17 /* PWM1 output */ ++#define GPIO17_CIF_DD6 17 /* Capture Interface D6 (PXA27x) */ + #define GPIO18_RDY 18 /* Ext. Bus Ready */ + #define GPIO19_DREQ1 19 /* External DMA Request */ + #define GPIO20_DREQ0 20 /* External DMA Request */ + #define GPIO23_SCLK 23 /* SSP clock */ ++#define GPIO23_CIF_MCLK 23 /* Capture Interface MCLK (PXA27x) */ + #define GPIO24_SFRM 24 /* SSP Frame */ ++#define GPIO24_CIF_FV 24 /* Capture Interface FV (PXA27x) */ + #define GPIO25_STXD 25 /* SSP transmit */ ++#define GPIO25_CIF_LV 25 /* Capture Interface LV (PXA27x) */ + #define GPIO26_SRXD 26 /* SSP receive */ ++#define GPIO26_CIF_PCLK 26 /* Capture Interface PCLK (PXA27x) */ + #define GPIO27_SEXTCLK 27 /* SSP ext_clk */ ++#define GPIO27_CIF_DD0 27 /* Capture Interface D0 (PXA27x) */ + #define GPIO28_BITCLK 28 /* AC97/I2S bit_clk */ + #define GPIO29_SDATA_IN 29 /* AC97 Sdata_in0 / I2S Sdata_in */ + #define GPIO30_SDATA_OUT 30 /* AC97/I2S Sdata_out */ +@@ -1262,28 +1269,40 @@ + #define GPIO41_FFRTS 41 /* FFUART request to send */ + #define GPIO42_BTRXD 42 /* BTUART receive data */ + #define GPIO42_HWRXD 42 /* HWUART receive data */ ++#define GPIO42_CIF_MCLK 42 /* Capture interface MCLK (PXA27x) */ + #define GPIO43_BTTXD 43 /* BTUART transmit data */ + #define GPIO43_HWTXD 43 /* HWUART transmit data */ ++#define GPIO43_CIF_FV 43 /* Capture interface FV (PXA27x) */ + #define GPIO44_BTCTS 44 /* BTUART clear to send */ + #define GPIO44_HWCTS 44 /* HWUART clear to send */ ++#define GPIO44_CIF_LV 44 /* Capture interface LV (PXA27x) */ + #define GPIO45_BTRTS 45 /* BTUART request to send */ + #define GPIO45_HWRTS 45 /* HWUART request to send */ + #define GPIO45_AC97_SYSCLK 45 /* AC97 System Clock */ ++#define GPIO45_CIF_PCLK 45 /* Capture interface PCLK (PXA27x) */ + #define GPIO46_ICPRXD 46 /* ICP receive data */ + #define GPIO46_STRXD 46 /* STD_UART receive data */ + #define GPIO47_ICPTXD 47 /* ICP transmit data */ + #define GPIO47_STTXD 47 /* STD_UART transmit data */ ++#define GPIO47_CIF_DD0 47 /* Capture interface D0 (PXA27x) */ + #define GPIO48_nPOE 48 /* Output Enable for Card Space */ ++#define GPIO48_CIF_DD5 48 /* Capture interface D5 (PXA27x) */ + #define GPIO49_nPWE 49 /* Write Enable for Card Space */ + #define GPIO50_nPIOR 50 /* I/O Read for Card Space */ ++#define GPIO50_CIF_DD3 50 /* Capture interface D3 (PXA27x) */ + #define GPIO51_nPIOW 51 /* I/O Write for Card Space */ ++#define GPIO51_CIF_DD2 51 /* Capture interface D2 (PXA27x) */ + #define GPIO52_nPCE_1 52 /* Card Enable for Card Space */ ++#define GPIO52_CIF_DD4 52 /* Capture interface D4 (PXA27x) */ + #define GPIO53_nPCE_2 53 /* Card Enable for Card Space */ + #define GPIO53_MMCCLK 53 /* MMC Clock */ ++#define GPIO53_CIF_MCLK 53 /* Capture interface MCLK (PXA27x) */ + #define GPIO54_MMCCLK 54 /* MMC Clock */ + #define GPIO54_pSKTSEL 54 /* Socket Select for Card Space */ + #define GPIO54_nPCE_2 54 /* Card Enable for Card Space (PXA27x) */ ++#define GPIO54_CIF_PCLK 54 /* Capture interface PCLK (PXA27x) */ + #define GPIO55_nPREG 55 /* Card Address bit 26 */ ++#define GPIO55_CIF_DD1 55 /* Capture interface D1 (PXA27x) */ + #define GPIO56_nPWAIT 56 /* Wait signal for Card Space */ + #define GPIO57_nIOIS16 57 /* Bus Width select for I/O Card Space */ + #define GPIO58_LDD_0 58 /* LCD data pin 0 */ +@@ -1318,11 +1337,28 @@ + #define GPIO79_nCS_3 79 /* chip select 3 */ + #define GPIO80_nCS_4 80 /* chip select 4 */ + #define GPIO81_NSCLK 81 /* NSSP clock */ ++#define GPIO81_CIF_DD0 81 /* Capture Interface D0 (PXA27x) */ + #define GPIO82_NSFRM 82 /* NSSP Frame */ ++#define GPIO82_CIF_DD5 82 /* Capture Interface D5 (PXA27x) */ + #define GPIO83_NSTXD 83 /* NSSP transmit */ ++#define GPIO83_CIF_DD4 83 /* Capture Interface D4 (PXA27x) */ + #define GPIO84_NSRXD 84 /* NSSP receive */ ++#define GPIO84_CIF_FV 84 /* Capture Interface FV (PXA27x) */ + #define GPIO85_nPCE_1 85 /* Card Enable for Card Space (PXA27x) */ ++#define GPIO85_CIF_LV 85 /* Capture Interface LV (PXA27x) */ ++#define GPIO90_CIF_DD4 90 /* Capture Interface DD4 (PXA27x) */ ++#define GPIO91_CIF_DD5 91 /* Capture Interface DD5 (PXA27x) */ + #define GPIO92_MMCDAT0 92 /* MMC DAT0 (PXA27x) */ ++#define GPIO93_CIF_DD6 93 /* Capture interface D6 (PXA27x) */ ++#define GPIO94_CIF_DD5 94 /* Capture interface D5 (PXA27x) */ ++#define GPIO95_CIF_DD4 95 /* Capture interface D4 (PXA27x) */ ++#define GPIO98_CIF_DD0 98 /* Capture interface D0 (PXA27x) */ ++#define GPIO103_CIF_DD3 103 /* Capture interface D3 (PXA27x) */ ++#define GPIO104_CIF_DD2 104 /* Capture interface D2 (PXA27x) */ ++#define GPIO105_CIF_DD1 105 /* Capture interface D1 (PXA27x) */ ++#define GPIO106_CIF_DD9 106 /* Capture interface D9 (PXA27x) */ ++#define GPIO107_CIF_DD8 107 /* Capture interface D8 (PXA27x) */ ++#define GPIO108_CIF_DD7 108 /* Capture interface D7 (PXA27x) */ + #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */ + #define GPIO109_MMCDAT1 109 /* MMC DAT1 (PXA27x) */ + #define GPIO110_MMCDAT2 110 /* MMC DAT2 (PXA27x) */ +@@ -1332,6 +1368,9 @@ + #define GPIO112_MMCCMD 112 /* MMC CMD (PXA27x) */ + #define GPIO113_I2S_SYSCLK 113 /* I2S System Clock (PXA27x) */ + #define GPIO113_AC97_RESET_N 113 /* AC97 NRESET on (PXA27x) */ ++#define GPIO114_CIF_DD1 114 /* Capture interface D1 (PXA27x) */ ++#define GPIO115_CIF_DD3 115 /* Capture interface D3 (PXA27x) */ ++#define GPIO116_CIF_DD2 116 /* Capture interface D2 (PXA27x) */ + + /* GPIO alternate function mode & direction */ + +@@ -1357,19 +1396,26 @@ + #define GPIO10_RTCCLK_MD (10 | GPIO_ALT_FN_1_OUT) + #define GPIO11_3_6MHz_MD (11 | GPIO_ALT_FN_1_OUT) + #define GPIO12_32KHz_MD (12 | GPIO_ALT_FN_1_OUT) ++#define GPIO12_CIF_DD7_MD (12 | GPIO_ALT_FN_2_IN) + #define GPIO13_MBGNT_MD (13 | GPIO_ALT_FN_2_OUT) + #define GPIO14_MBREQ_MD (14 | GPIO_ALT_FN_1_IN) + #define GPIO15_nCS_1_MD (15 | GPIO_ALT_FN_2_OUT) + #define GPIO16_PWM0_MD (16 | GPIO_ALT_FN_2_OUT) + #define GPIO17_PWM1_MD (17 | GPIO_ALT_FN_2_OUT) ++#define GPIO17_CIF_DD6_MD (17 | GPIO_ALT_FN_2_IN) + #define GPIO18_RDY_MD (18 | GPIO_ALT_FN_1_IN) + #define GPIO19_DREQ1_MD (19 | GPIO_ALT_FN_1_IN) + #define GPIO20_DREQ0_MD (20 | GPIO_ALT_FN_1_IN) ++#define GPIO23_CIF_MCLK_MD (23 | GPIO_ALT_FN_1_OUT) + #define GPIO23_SCLK_MD (23 | GPIO_ALT_FN_2_OUT) ++#define GPIO24_CIF_FV_MD (24 | GPIO_ALT_FN_1_OUT) + #define GPIO24_SFRM_MD (24 | GPIO_ALT_FN_2_OUT) ++#define GPIO25_CIF_LV_MD (25 | GPIO_ALT_FN_1_OUT) + #define GPIO25_STXD_MD (25 | GPIO_ALT_FN_2_OUT) + #define GPIO26_SRXD_MD (26 | GPIO_ALT_FN_1_IN) ++#define GPIO26_CIF_PCLK_MD (26 | GPIO_ALT_FN_2_IN) + #define GPIO27_SEXTCLK_MD (27 | GPIO_ALT_FN_1_IN) ++#define GPIO27_CIF_DD0_MD (27 | GPIO_ALT_FN_3_IN) + #define GPIO28_BITCLK_AC97_MD (28 | GPIO_ALT_FN_1_IN) + #define GPIO28_BITCLK_IN_I2S_MD (28 | GPIO_ALT_FN_2_IN) + #define GPIO28_BITCLK_OUT_I2S_MD (28 | GPIO_ALT_FN_1_OUT) +@@ -1394,34 +1440,46 @@ + #define GPIO40_FFDTR_MD (40 | GPIO_ALT_FN_2_OUT) + #define GPIO41_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) + #define GPIO42_BTRXD_MD (42 | GPIO_ALT_FN_1_IN) ++#define GPIO42_CIF_MCLK_MD (42 | GPIO_ALT_FN_3_OUT) + #define GPIO42_HWRXD_MD (42 | GPIO_ALT_FN_3_IN) + #define GPIO43_BTTXD_MD (43 | GPIO_ALT_FN_2_OUT) ++#define GPIO43_CIF_FV_MD (43 | GPIO_ALT_FN_3_OUT) + #define GPIO43_HWTXD_MD (43 | GPIO_ALT_FN_3_OUT) + #define GPIO44_BTCTS_MD (44 | GPIO_ALT_FN_1_IN) + #define GPIO44_HWCTS_MD (44 | GPIO_ALT_FN_3_IN) ++#define GPIO44_CIF_LV_MD (44 | GPIO_ALT_FN_3_OUT) + #define GPIO45_BTRTS_MD (45 | GPIO_ALT_FN_2_OUT) + #define GPIO45_HWRTS_MD (45 | GPIO_ALT_FN_3_OUT) + #define GPIO45_SYSCLK_AC97_MD (45 | GPIO_ALT_FN_1_OUT) ++#define GPIO45_CIF_PCLK_MD (45 | GPIO_ALT_FN_3_IN) + #define GPIO46_ICPRXD_MD (46 | GPIO_ALT_FN_1_IN) + #define GPIO46_STRXD_MD (46 | GPIO_ALT_FN_2_IN) + #define GPIO47_ICPTXD_MD (47 | GPIO_ALT_FN_2_OUT) + #define GPIO47_STTXD_MD (47 | GPIO_ALT_FN_1_OUT) ++#define GPIO47_CIF_DD0_MD (47 | GPIO_ALT_FN_1_IN) + #define GPIO48_nPOE_MD (48 | GPIO_ALT_FN_2_OUT) ++#define GPIO48_CIF_DD5_MD (48 | GPIO_ALT_FN_1_IN) + #define GPIO48_HWTXD_MD (48 | GPIO_ALT_FN_1_OUT) + #define GPIO48_nPOE_MD (48 | GPIO_ALT_FN_2_OUT) + #define GPIO49_HWRXD_MD (49 | GPIO_ALT_FN_1_IN) + #define GPIO49_nPWE_MD (49 | GPIO_ALT_FN_2_OUT) + #define GPIO50_nPIOR_MD (50 | GPIO_ALT_FN_2_OUT) ++#define GPIO50_CIF_DD3_MD (50 | GPIO_ALT_FN_1_IN) + #define GPIO50_HWCTS_MD (50 | GPIO_ALT_FN_1_IN) + #define GPIO51_HWRTS_MD (51 | GPIO_ALT_FN_1_OUT) + #define GPIO51_nPIOW_MD (51 | GPIO_ALT_FN_2_OUT) ++#define GPIO51_CIF_DD2_MD (51 | GPIO_ALT_FN_1_IN) + #define GPIO52_nPCE_1_MD (52 | GPIO_ALT_FN_2_OUT) ++#define GPIO52_CIF_DD4_MD (52 | GPIO_ALT_FN_1_IN) + #define GPIO53_nPCE_2_MD (53 | GPIO_ALT_FN_2_OUT) + #define GPIO53_MMCCLK_MD (53 | GPIO_ALT_FN_1_OUT) ++#define GPIO53_CIF_MCLK_MD (53 | GPIO_ALT_FN_2_OUT) + #define GPIO54_MMCCLK_MD (54 | GPIO_ALT_FN_1_OUT) + #define GPIO54_nPCE_2_MD (54 | GPIO_ALT_FN_2_OUT) + #define GPIO54_pSKTSEL_MD (54 | GPIO_ALT_FN_2_OUT) ++#define GPIO54_CIF_PCLK_MD (54 | GPIO_ALT_FN_3_IN) + #define GPIO55_nPREG_MD (55 | GPIO_ALT_FN_2_OUT) ++#define GPIO55_CIF_DD1_MD (55 | GPIO_ALT_FN_1_IN) + #define GPIO56_nPWAIT_MD (56 | GPIO_ALT_FN_1_IN) + #define GPIO57_nIOIS16_MD (57 | GPIO_ALT_FN_1_IN) + #define GPIO58_LDD_0_MD (58 | GPIO_ALT_FN_2_OUT) +@@ -1458,16 +1516,33 @@ + #define GPIO80_nCS_4_MD (80 | GPIO_ALT_FN_2_OUT) + #define GPIO81_NSSP_CLK_OUT (81 | GPIO_ALT_FN_1_OUT) + #define GPIO81_NSSP_CLK_IN (81 | GPIO_ALT_FN_1_IN) ++#define GPIO81_CIF_DD0_MD (81 | GPIO_ALT_FN_2_IN) + #define GPIO82_NSSP_FRM_OUT (82 | GPIO_ALT_FN_1_OUT) + #define GPIO82_NSSP_FRM_IN (82 | GPIO_ALT_FN_1_IN) ++#define GPIO82_CIF_DD5_MD (82 | GPIO_ALT_FN_3_IN) + #define GPIO83_NSSP_TX (83 | GPIO_ALT_FN_1_OUT) + #define GPIO83_NSSP_RX (83 | GPIO_ALT_FN_2_IN) ++#define GPIO83_CIF_DD4_MD (83 | GPIO_ALT_FN_3_IN) + #define GPIO84_NSSP_TX (84 | GPIO_ALT_FN_1_OUT) + #define GPIO84_NSSP_RX (84 | GPIO_ALT_FN_2_IN) ++#define GPIO84_CIF_FV_MD (84 | GPIO_ALT_FN_3_OUT) + #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT) ++#define GPIO85_CIF_LV_MD (85 | GPIO_ALT_FN_3_OUT) ++#define GPIO90_CIF_DD4_MD (90 | GPIO_ALT_FN_3_IN) ++#define GPIO91_CIF_DD5_MD (91 | GPIO_ALT_FN_3_IN) + #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT) ++#define GPIO93_CIF_DD6_MD (93 | GPIO_ALT_FN_2_IN) ++#define GPIO94_CIF_DD5_MD (94 | GPIO_ALT_FN_2_IN) ++#define GPIO95_CIF_DD4_MD (95 | GPIO_ALT_FN_2_IN) ++#define GPIO98_CIF_DD0_MD (98 | GPIO_ALT_FN_2_IN) + #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT) ++#define GPIO103_CIF_DD3_MD (103 | GPIO_ALT_FN_1_IN) + #define GPIO104_pSKTSEL_MD (104 | GPIO_ALT_FN_1_OUT) ++#define GPIO104_CIF_DD2_MD (104 | GPIO_ALT_FN_1_IN) ++#define GPIO105_CIF_DD1_MD (105 | GPIO_ALT_FN_1_IN) ++#define GPIO106_CIF_DD9_MD (106 | GPIO_ALT_FN_1_IN) ++#define GPIO107_CIF_DD8_MD (107 | GPIO_ALT_FN_1_IN) ++#define GPIO108_CIF_DD7_MD (108 | GPIO_ALT_FN_1_IN) + #define GPIO109_MMCDAT1_MD (109 | GPIO_ALT_FN_1_OUT) + #define GPIO110_MMCDAT2_MD (110 | GPIO_ALT_FN_1_OUT) + #define GPIO110_MMCCS0_MD (110 | GPIO_ALT_FN_1_OUT) +@@ -2207,6 +2282,11 @@ + #define CICR0_ENB (1 << 28) /* Camera interface enable */ + #define CICR0_DIS (1 << 27) /* Camera interface disable */ + #define CICR0_SIM (0x7 << 24) /* Sensor interface mode mask */ ++#define CICR0_SIM_MP (0 << 24) ++#define CICR0_SIM_SP (1 << 24) ++#define CICR0_SIM_MS (2 << 24) ++#define CICR0_SIM_EP (3 << 24) ++#define CICR0_SIM_ES (4 << 24) + #define CICR0_TOM (1 << 9) /* Time-out mask */ + #define CICR0_RDAVM (1 << 8) /* Receive-data-available mask */ + #define CICR0_FEM (1 << 7) /* FIFO-empty mask */ +@@ -2257,6 +2337,20 @@ + #define CICR4_FR_RATE (0x7 << 8) /* Frame rate mask */ + #define CICR4_DIV (0xff << 0) /* Clock divisor mask */ + ++#define CICR1_DW_VAL(x) ((x) & CICR1_DW) /* Data bus width */ ++#define CICR1_PPL_VAL(x) (((x) << 15) & CICR1_PPL) /* Pixels per line */ ++ ++#define CICR2_BLW_VAL(x) (((x) << 24) & CICR2_BLW) /* Beginning-of-line pixel clock wait count */ ++#define CICR2_ELW_VAL(x) (((x) << 16) & CICR2_ELW) /* End-of-line pixel clock wait count */ ++#define CICR2_HSW_VAL(x) (((x) << 10) & CICR2_HSW) /* Horizontal sync pulse width */ ++#define CICR2_BFPW_VAL(x) (((x) << 3) & CICR2_BFPW) /* Beginning-of-frame pixel clock wait count */ ++#define CICR2_FSW_VAL(x) (((x) << 0) & CICR2_FSW) /* Frame stabilization wait count */ ++ ++#define CICR3_BFW_VAL(x) (((x) << 24) & CICR3_BFW) /* Beginning-of-frame line clock wait count */ ++#define CICR3_EFW_VAL(x) (((x) << 16) & CICR3_EFW) /* End-of-frame line clock wait count */ ++#define CICR3_VSW_VAL(x) (((x) << 11) & CICR3_VSW) /* Vertical sync pulse width */ ++#define CICR3_LPF_VAL(x) (((x) << 0) & CICR3_LPF) /* Lines per frame */ ++ + #define CISR_FTO (1 << 15) /* FIFO time-out */ + #define CISR_RDAV_2 (1 << 14) /* Channel 2 receive data available */ + #define CISR_RDAV_1 (1 << 13) /* Channel 1 receive data available */ +diff --git a/include/asm-arm/arch-pxa/pxa_cif.h b/include/asm-arm/arch-pxa/pxa_cif.h +new file mode 100644 +index 0000000..ca1e5a2 +--- /dev/null ++++ b/include/asm-arm/arch-pxa/pxa_cif.h +@@ -0,0 +1,48 @@ ++/* ++ pxa_camera - PXA camera driver header file ++ ++ Copyright (C) 2003, Intel Corporation ++ Copyright (C) 2008, Guennadi Liakhovetski ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++*/ ++ ++#ifndef __PXA_CIF_H_ ++#define __PXA_CIF_H_ ++ ++#define PXACIF_MASTER 1 ++#define PXACIF_DATAWIDTH_4 2 ++#define PXACIF_DATAWIDTH_5 4 ++#define PXACIF_DATAWIDTH_8 8 ++#define PXACIF_DATAWIDTH_9 0x10 ++#define PXACIF_DATAWIDTH_10 0x20 ++#define PXACIF_PCLK_EN 0x40 ++#define PXACIF_MCLK_EN 0x80 ++#define PXACIF_PCP 0x100 ++#define PXACIF_HSP 0x200 ++#define PXACIF_VSP 0x400 ++ ++struct pxacamera_platform_data { ++ int (*init)(struct device *); ++ int (*power)(struct device *, int on); ++ int (*reset)(struct device *, int set); ++ ++ unsigned long flags; ++ unsigned long mclk_10khz; ++}; ++ ++extern void pxa_set_cif_info(struct pxacamera_platform_data *info); ++ ++#endif /* __PXA_CIF_H_ */ +-- +1.5.3.4 + +-- +video4linux-list mailing list +Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe +https://www.redhat.com/mailman/listinfo/video4linux-list + diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml new file mode 100644 index 0000000000..22abad6b1c --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml @@ -0,0 +1,282 @@ +Path: news.gmane.org!not-for-mail +From: Guennadi Liakhovetski +Newsgroups: gmane.comp.video.video4linux,gmane.linux.drivers.i2c +Subject: [RFC PATCH 3/8] Philips PCA9536 4 bit I2C GPIO extender driver +Date: Wed, 23 Jan 2008 18:41:39 +0100 (CET) +Lines: 210 +Approved: news@gmane.org +Message-ID: +References: +NNTP-Posting-Host: lo.gmane.org +Mime-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Trace: ger.gmane.org 1201110131 28782 80.91.229.12 (23 Jan 2008 17:42:11 GMT) +X-Complaints-To: usenet@ger.gmane.org +NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:11 +0000 (UTC) +Cc: i2c@lm-sensors.org +To: video4linux-list@redhat.com +Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:30 2008 +Return-path: +Envelope-to: rh-video4linux-list@gmane.org +Original-Received: from hormel.redhat.com ([209.132.177.30]) + by lo.gmane.org with esmtp (Exim 4.50) + id 1JHjcK-0002zY-Jd + for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:29 +0100 +Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110]) + by hormel.redhat.com (Postfix) with ESMTP + id 1D07D72F5C; Wed, 23 Jan 2008 12:42:02 -0500 (EST) +Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com + [172.16.52.254]) + by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id + m0NHfx7t017217 for ; + Wed, 23 Jan 2008 12:41:59 -0500 +Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32]) + by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHfxW4028112 + for ; Wed, 23 Jan 2008 12:41:59 -0500 +Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) + by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfPdF000786 + for ; Wed, 23 Jan 2008 12:41:25 -0500 +Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:19 -0000 +Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange) + [87.189.47.31] + by mail.gmx.net (mp021) with SMTP; 23 Jan 2008 18:41:19 +0100 +X-Authenticated: #20450766 +X-Provags-ID: V01U2FsdGVkX18gZ14xakQgr3grhg4ys0olRWzKeUW5G+x4WUV9jY + iLvi2phxgtwjvM +Original-Received: from lyakh (helo=localhost) + by axis700.grange with local-esmtp (Exim 4.63) + (envelope-from ) + id 1JHjbX-00029t-5A; Wed, 23 Jan 2008 18:41:39 +0100 +X-X-Sender: lyakh@axis700.grange +In-Reply-To: +X-Y-GMX-Trusted: 0 +X-RedHat-Spam-Score: 0 +X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 +X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32 +X-loop: video4linux-list@redhat.com +X-BeenThere: video4linux-list@redhat.com +X-Mailman-Version: 2.1.5 +Precedence: junk +List-Id: Linux and Kernel Video +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Original-Sender: video4linux-list-bounces@redhat.com +Errors-To: video4linux-list-bounces@redhat.com +Xref: news.gmane.org gmane.comp.video.video4linux:36471 gmane.linux.drivers.i2c:251 +Archived-At: + +This driver will be used by the mt9m001 and the mt9v022 camera drivers, +that can use a pca9536 to switch between 8 and 10 bit modes. + +Signed-off-by: Guennadi Liakhovetski +--- + drivers/i2c/chips/Kconfig | 10 +++ + drivers/i2c/chips/Makefile | 1 + + drivers/i2c/chips/pca9536.c | 153 +++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 164 insertions(+), 0 deletions(-) + create mode 100644 drivers/i2c/chips/pca9536.c + +diff --git a/drivers/i2c/chips/Kconfig b/drivers/i2c/chips/Kconfig +index 2e1c24f..6f492f1 100644 +--- a/drivers/i2c/chips/Kconfig ++++ b/drivers/i2c/chips/Kconfig +@@ -65,6 +65,16 @@ config SENSORS_PCF8574 + These devices are hard to detect and rarely found on mainstream + hardware. If unsure, say N. + ++config SENSORS_PCA9536 ++ tristate "Philips PCA9536 4-bit I/O port" ++ depends on EXPERIMENTAL ++ help ++ If you say yes here you get support for the Philips PCA9539 ++ 4-bit I/O port. ++ ++ This driver can also be built as a module. If so, the module ++ will be called pca9536. ++ + config SENSORS_PCA9539 + tristate "Philips PCA9539 16-bit I/O port" + depends on EXPERIMENTAL +diff --git a/drivers/i2c/chips/Makefile b/drivers/i2c/chips/Makefile +index ca924e1..e24c582 100644 +--- a/drivers/i2c/chips/Makefile ++++ b/drivers/i2c/chips/Makefile +@@ -8,6 +8,7 @@ obj-$(CONFIG_DS1682) += ds1682.o + obj-$(CONFIG_SENSORS_EEPROM) += eeprom.o + obj-$(CONFIG_SENSORS_MAX6875) += max6875.o + obj-$(CONFIG_SENSORS_M41T00) += m41t00.o ++obj-$(CONFIG_SENSORS_PCA9536) += pca9536.o + obj-$(CONFIG_SENSORS_PCA9539) += pca9539.o + obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o + obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o +diff --git a/drivers/i2c/chips/pca9536.c b/drivers/i2c/chips/pca9536.c +new file mode 100644 +index 0000000..08e5d8b +--- /dev/null ++++ b/drivers/i2c/chips/pca9536.c +@@ -0,0 +1,152 @@ ++/* ++ * Driver for PCA9536 I/O Expander ++ * ++ * Copyright (C) 2008, Guennadi Liakhovetski ++ * ++ * 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 ++ ++#define PCA9536_INPUT 0 ++#define PCA9536_OUTPUT 1 ++#define PCA9536_INVERT 2 ++#define PCA9536_DIRECTION 3 ++ ++/* following are the sysfs callback functions */ ++static ssize_t pca9536_show(struct device *dev, struct device_attribute *attr, ++ char *buf) ++{ ++ struct sensor_device_attribute *psa = to_sensor_dev_attr(attr); ++ struct i2c_client *client = to_i2c_client(dev); ++ ++ return sprintf(buf, "%d\n", i2c_smbus_read_byte_data(client, ++ psa->index)); ++} ++ ++static ssize_t pca9536_store(struct device *dev, struct device_attribute *attr, ++ const char *buf, size_t count) ++{ ++ struct sensor_device_attribute *psa = to_sensor_dev_attr(attr); ++ struct i2c_client *client = to_i2c_client(dev); ++ unsigned long val = simple_strtoul(buf, NULL, 0); ++ ++ if (val > 0xff) ++ return -EINVAL; ++ ++ i2c_smbus_write_byte_data(client, psa->index, val); ++ return count; ++} ++ ++int pca9536_set_level(struct i2c_client *client, u8 pin, u8 level) ++{ ++ s32 data; ++ ++ if (pin > 3) ++ return -EINVAL; ++ ++ /* Switch to output */ ++ data = i2c_smbus_read_byte_data(client, PCA9536_DIRECTION); ++ if (data < 0) ++ return data; ++ data = i2c_smbus_write_byte_data(client, PCA9536_DIRECTION, ++ data & ~(1 << pin)); ++ if (data < 0) ++ return data; ++ ++ /* Set level */ ++ data = i2c_smbus_read_byte_data(client, PCA9536_OUTPUT); ++ if (data < 0) ++ return data; ++ if (level) ++ data |= (1 << pin); ++ else ++ data &= ~(1 << pin); ++ data = i2c_smbus_write_byte_data(client, PCA9536_OUTPUT, data); ++ ++ return data; ++} ++EXPORT_SYMBOL(pca9536_set_level); ++ ++/* Define the device attributes */ ++ ++#define PCA9536_ENTRY_RO(name, reg) \ ++ static SENSOR_DEVICE_ATTR(name, S_IRUGO, pca9536_show, NULL, reg) ++ ++#define PCA9536_ENTRY_RW(name, reg) \ ++ static SENSOR_DEVICE_ATTR(name, S_IRUGO | S_IWUSR, pca9536_show, \ ++ pca9536_store, reg) ++ ++PCA9536_ENTRY_RO(input, PCA9536_INPUT); ++PCA9536_ENTRY_RW(output, PCA9536_OUTPUT); ++PCA9536_ENTRY_RW(invert, PCA9536_INVERT); ++PCA9536_ENTRY_RW(direction, PCA9536_DIRECTION); ++ ++static struct attribute *pca9536_attributes[] = { ++ &sensor_dev_attr_input.dev_attr.attr, ++ &sensor_dev_attr_output.dev_attr.attr, ++ &sensor_dev_attr_invert.dev_attr.attr, ++ &sensor_dev_attr_direction.dev_attr.attr, ++ NULL ++}; ++ ++static struct attribute_group pca9536_defattr_group = { ++ .attrs = pca9536_attributes, ++}; ++ ++static int pca9536_probe(struct i2c_client *client) ++{ ++ struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); ++ ++ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { ++ pr_debug("%s: I2C-Adapter doesn't support I2C_FUNC_SMBUS_BYTE\n", __FUNCTION__); ++ return -EIO; ++ } ++ ++ if (client->dev.platform_data) ++ /* This chip is going to be used from the kernel */ ++ *(struct i2c_client **)client->dev.platform_data = client; ++ ++ /* Register sysfs hooks */ ++ return sysfs_create_group(&client->dev.kobj, ++ &pca9536_defattr_group); ++} ++ ++static int pca9536_remove(struct i2c_client *client) ++{ ++ sysfs_remove_group(&client->dev.kobj, &pca9536_defattr_group); ++ return 0; ++} ++ ++static struct i2c_driver pca9536_i2c_driver = { ++ .driver = { ++ .name = "pca9536", ++ }, ++ .probe = pca9536_probe, ++ .remove = pca9536_remove, ++}; ++ ++static int __init pca9536_mod_init(void) ++{ ++ return i2c_add_driver(&pca9536_i2c_driver); ++} ++ ++static void __exit pca9536_mod_exit(void) ++{ ++ i2c_del_driver(&pca9536_i2c_driver); ++} ++ ++module_init(pca9536_mod_init); ++module_exit(pca9536_mod_exit); ++ ++MODULE_DESCRIPTION("PCA9536 driver"); ++MODULE_AUTHOR("Guennadi Liakhovetski "); ++MODULE_LICENSE("GPL"); +-- +1.5.3.4 + +-- +video4linux-list mailing list +Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe +https://www.redhat.com/mailman/listinfo/video4linux-list + diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml new file mode 100644 index 0000000000..4ac9b73ff3 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml @@ -0,0 +1,781 @@ +Path: news.gmane.org!not-for-mail +From: Guennadi Liakhovetski +Newsgroups: gmane.comp.video.video4linux +Subject: [RFC PATCH 4/8] Add support for the MT9M001 camera +Date: Wed, 23 Jan 2008 18:41:48 +0100 (CET) +Lines: 710 +Approved: news@gmane.org +Message-ID: +References: +NNTP-Posting-Host: lo.gmane.org +Mime-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Trace: ger.gmane.org 1201110157 28881 80.91.229.12 (23 Jan 2008 17:42:37 GMT) +X-Complaints-To: usenet@ger.gmane.org +NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:37 +0000 (UTC) +To: video4linux-list@redhat.com +Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:56 2008 +Return-path: +Envelope-to: rh-video4linux-list@gmane.org +Original-Received: from hormel.redhat.com ([209.132.177.30]) + by lo.gmane.org with esmtp (Exim 4.50) + id 1JHjcT-00035B-5V + for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:38 +0100 +Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110]) + by hormel.redhat.com (Postfix) with ESMTP + id 9E85472FB4; Wed, 23 Jan 2008 12:42:10 -0500 (EST) +Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com + [172.16.52.254]) + by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id + m0NHg8l9017245 for ; + Wed, 23 Jan 2008 12:42:08 -0500 +Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32]) + by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHg8vG028189 + for ; Wed, 23 Jan 2008 12:42:08 -0500 +Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) + by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfZHu001044 + for ; Wed, 23 Jan 2008 12:41:35 -0500 +Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:29 -0000 +Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange) + [87.189.47.31] + by mail.gmx.net (mp052) with SMTP; 23 Jan 2008 18:41:29 +0100 +X-Authenticated: #20450766 +X-Provags-ID: V01U2FsdGVkX18JzEdNfKMJtAD7BzHkb2TLaDIMUqlssnktvE95Pt + 3/al7Wqsw8NYli +Original-Received: from lyakh (helo=localhost) + by axis700.grange with local-esmtp (Exim 4.63) + (envelope-from ) id 1JHjbg-00029w-Ku + for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:48 +0100 +X-X-Sender: lyakh@axis700.grange +In-Reply-To: +X-Y-GMX-Trusted: 0 +X-RedHat-Spam-Score: 0 +X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 +X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32 +X-loop: video4linux-list@redhat.com +X-BeenThere: video4linux-list@redhat.com +X-Mailman-Version: 2.1.5 +Precedence: junk +List-Id: Linux and Kernel Video +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Original-Sender: video4linux-list-bounces@redhat.com +Errors-To: video4linux-list-bounces@redhat.com +Xref: news.gmane.org gmane.comp.video.video4linux:36473 +Archived-At: + +This driver supports Micron MT9M001 monochrome and colour cameras. + +Signed-off-by: Guennadi Liakhovetski +--- + drivers/media/video/Kconfig | 15 + + drivers/media/video/Makefile | 1 + + drivers/media/video/mt9m001.c | 649 +++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 665 insertions(+), 0 deletions(-) + create mode 100644 drivers/media/video/mt9m001.c + +diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig +index dc0dfec..def5246 100644 +--- a/drivers/media/video/Kconfig ++++ b/drivers/media/video/Kconfig +@@ -803,6 +803,21 @@ config SOC_CAMERA + over a bus like PCI or USB. For example some i2c camera hanging + directly on the data bus of an SoC. + ++config SOC_CAMERA_MT9M001 ++ tristate "mt9m001 support" ++ depends on SOC_CAMERA ++ select SENSORS_PCA9536 if MT9M001_PCA9536_SWITCH ++ help ++ This driver supports MT9M001 cameras from Micron, monochrome ++ and colour models. ++ ++config MT9M001_PCA9536_SWITCH ++ bool "pca9536 datawidth switch for mt9m001" ++ depends on SOC_CAMERA_MT9M001 ++ help ++ Select this if your MT9M001 camera uses a PCA9536 I2C GPIO ++ extender to switch between 8 and 10 bit datawidth modes ++ + config VIDEO_PXA27X + tristate "PXA27x Quick Capture Interface driver" + depends on VIDEO_DEV && PXA27x +diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile +index 81b7cd6..c56bfdb 100644 +--- a/drivers/media/video/Makefile ++++ b/drivers/media/video/Makefile +@@ -118,5 +118,6 @@ obj-$(CONFIG_VIDEO_VIVI) += vivi.o + + obj-$(CONFIG_VIDEO_PXA27X) += pxa_camera.o + obj-$(CONFIG_SOC_CAMERA) += soc_camera.o ++obj-$(CONFIG_SOC_CAMERA_MT9M001) += mt9m001.o + + EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core +diff --git a/drivers/media/video/mt9m001.c b/drivers/media/video/mt9m001.c +new file mode 100644 +index 0000000..dc4cc8f +--- /dev/null ++++ b/drivers/media/video/mt9m001.c +@@ -0,0 +1,649 @@ ++/* ++ * Driver for MT9M001 CMOS Image Sensor from Micron ++ * ++ * Copyright (C) 2008, Guennadi Liakhovetski ++ * ++ * 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 ++ ++/* mt9m001 i2c address 0x5d ++ * The platform has to define i2c_board_info ++ * and call i2c_register_board_info() */ ++ ++/* mt9m001 selected register addresses */ ++#define MT9M001_CHIP_VERSION 0x00 ++#define MT9M001_ROW_START 0x01 ++#define MT9M001_COLUMN_START 0x02 ++#define MT9M001_WINDOW_HEIGHT 0x03 ++#define MT9M001_WINDOW_WIDTH 0x04 ++#define MT9M001_HORIZONTAL_BLANKING 0x05 ++#define MT9M001_VERTICAL_BLANKING 0x06 ++#define MT9M001_OUTPUT_CONTROL 0x07 ++#define MT9M001_SHUTTER_WIDTH 0x09 ++#define MT9M001_FRAME_RESTART 0x0b ++#define MT9M001_SHUTTER_DELAY 0x0c ++#define MT9M001_RESET 0x0d ++#define MT9M001_READ_OPTIONS1 0x1e ++#define MT9M001_READ_OPTIONS2 0x20 ++#define MT9M001_GLOBAL_GAIN 0x35 ++#define MT9M001_CHIP_ENABLE 0xF1 ++ ++/* must be 32 bit, bitwise coded by reg_to_int and int_to_reg below */ ++struct reg_access { ++ u16 value; ++ u8 address; ++ u8 rw; ++} __attribute__ ((packed)); ++ ++union reg_access_32 { ++ struct reg_access reg; ++ u32 ctrl; ++}; ++ ++enum reg_rw { REG_READ = 0, REG_WRITE = 1, }; ++ ++/* ++#define reg_to_int(rw, address, value) ({ \ ++ union reg_access_32 u = {.reg = {value, address, rw}}; \ ++ u.i32; \ ++}) ++*/ ++ ++/* rw has to be numerically most significant, because ++ * maximum, minimum and value are signed */ ++#ifdef __LITTLE_ENDIAN ++#define reg_to_int(rw, address, value) (((value) & 0xffff) | (((address) & 0xff) << 16) | (((rw) & 0x7f) << 24)) ++#else ++#define reg_to_int(rw, address, value) ((((value) & 0xffff) << 16) | (((address) & 0xff) << 8) | ((rw) & 0x7f)) ++#endif ++ ++static const struct soc_camera_data_format mt9m001_colour_formats[]= { ++ { ++ .name = "RGB Bayer (sRGB)", ++ .depth = 16, ++ .fourcc = V4L2_PIX_FMT_SBGGR8, ++ .colorspace = V4L2_COLORSPACE_SRGB, ++ } ++}; ++ ++static const struct soc_camera_data_format mt9m001_monochrome_formats[]= { ++ { ++ .name = "Monochrome 10 bit", ++ .depth = 10, ++ .fourcc = V4L2_PIX_FMT_Y16, ++ }, { ++ .name = "Monochrome 8 bit", ++ .depth = 8, ++ .fourcc = V4L2_PIX_FMT_GREY, ++ }, ++}; ++ ++enum mt9m001_model { ++ MT9M001C12ST, ++ MT9M001C12STM ++}; ++ ++struct mt9m001 { ++ struct i2c_client *client; ++ struct soc_camera_device icd; ++ enum mt9m001_model model; ++ struct i2c_client *data_switch; ++ unsigned char autoexposure; ++ unsigned char datawidth; ++}; ++ ++static int reg_read(struct soc_camera_device *icd, const u8 reg) ++{ ++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd); ++ struct i2c_client *client = mt9m001->client; ++ s32 data = i2c_smbus_read_word_data(client, reg); ++ return data < 0 ? data : swab16(data); ++} ++ ++static int reg_write(struct soc_camera_device *icd, const u8 reg, ++ const u16 data) ++{ ++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd); ++ return i2c_smbus_write_word_data(mt9m001->client, reg, swab16(data)); ++} ++ ++static int reg_set(struct soc_camera_device *icd, const u8 reg, ++ const u16 data) ++{ ++ int ret; ++ ++ if ((ret = reg_read(icd, reg)) < 0) ++ return ret; ++ return reg_write(icd, reg, ret | data); ++} ++ ++static int reg_clear(struct soc_camera_device *icd, const u8 reg, ++ const u16 data) ++{ ++ int ret; ++ ++ if ((ret = reg_read(icd, reg)) < 0) ++ return ret; ++ return reg_write(icd, reg, ret & ~data); ++} ++ ++static int mt9m001_init(struct soc_camera_device *icd) ++{ ++ int ret; ++ ++ /* Disable chip, synchronous option update */ ++ dev_dbg(icd->vdev->dev, "%s\n", __FUNCTION__); ++ ++ ret = reg_write(icd, MT9M001_RESET, 1); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9M001_RESET, 0); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9M001_OUTPUT_CONTROL, 0); ++ ++ return ret >= 0 ? 0 : -EIO; ++} ++ ++static int mt9m001_release(struct soc_camera_device *icd) ++{ ++ /* Disable the chip */ ++ reg_write(icd, MT9M001_OUTPUT_CONTROL, 0); ++ return 0; ++} ++ ++static int mt9m001_start_capture(struct soc_camera_device *icd) ++{ ++ /* Switch to master "normal" mode */ ++ if (reg_write(icd, MT9M001_OUTPUT_CONTROL, 2) < 0) ++ return -EIO; ++ return 0; ++} ++ ++static int mt9m001_stop_capture(struct soc_camera_device *icd) ++{ ++ /* Stop sensor readout */ ++ if (reg_write(icd, MT9M001_OUTPUT_CONTROL, 0) < 0) ++ return -EIO; ++ return 0; ++} ++ ++extern int pca9536_set_level(struct i2c_client *client, u8 pin, u8 level); ++ ++static int external_bus_switch(struct i2c_client *extender, int go8bit) ++{ ++ if (! extender) ++ return -ENODEV; ++ ++#ifdef CONFIG_MT9M001_PCA9536_SWITCH ++ return pca9536_set_level(extender, 0, go8bit); ++#else ++ return -ENODEV; ++#endif ++} ++ ++static int mt9m001_set_capture_format(struct soc_camera_device *icd, __u32 pixfmt, ++ struct v4l2_rect *rect, unsigned int flags) ++{ ++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd); ++ unsigned int width_flag = flags & (IS_DATAWIDTH_10 | IS_DATAWIDTH_9 | ++ IS_DATAWIDTH_8); ++ int ret; ++ const u16 hblank = 9, vblank = 25; ++ ++ /* MT9M001 has all capture_format parameters fixed */ ++ if (! (flags & IS_MASTER) || ++ ! (flags & IS_PCLK_SAMPLE_RISING) || ++ ! (flags & IS_HSYNC_ACTIVE_HIGH) || ++ ! (flags & IS_VSYNC_ACTIVE_HIGH)) { ++ return -EINVAL; ++ } ++ ++ /* Only one width bit may be set */ ++ if (!is_power_of_2(width_flag)) ++ return -EINVAL; ++ ++ if ((mt9m001->datawidth != 10 && (width_flag == IS_DATAWIDTH_10)) || ++ (mt9m001->datawidth != 9 && (width_flag == IS_DATAWIDTH_9)) || ++ (mt9m001->datawidth != 8 && (width_flag == IS_DATAWIDTH_8))) { ++ /* data width switch requested */ ++ if (! mt9m001->data_switch) ++ return -EINVAL; ++ ++ /* Well, we actually only can do 10 or 8 bits... */ ++ if (width_flag == IS_DATAWIDTH_9) ++ return -EINVAL; ++ ret = external_bus_switch(mt9m001->data_switch, ++ width_flag == IS_DATAWIDTH_8); ++ if (ret < 0) ++ return ret; ++ ++ mt9m001->datawidth = width_flag == IS_DATAWIDTH_8 ? 8 : 10; ++ } ++ ++ /* Blanking and start values - default... */ ++ ret = reg_write(icd, MT9M001_HORIZONTAL_BLANKING, hblank); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9M001_VERTICAL_BLANKING, vblank); ++ ++ /* The caller provides a supported format, as verified per ++ * call to icd->try_fmt_cap() */ ++ if (ret >= 0) ++ ret = reg_write(icd, MT9M001_COLUMN_START, rect->left); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9M001_ROW_START, rect->top); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9M001_WINDOW_WIDTH, rect->width - 1); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9M001_WINDOW_HEIGHT, rect->height + icd->y_skip_top - 1); ++ if (ret >= 0 && mt9m001->autoexposure) { ++ ret = reg_write(icd, MT9M001_SHUTTER_WIDTH, rect->height + icd->y_skip_top + vblank); ++ if (ret >= 0) { ++ const struct v4l2_queryctrl *qctrl = ++ soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE); ++ icd->exposure = (524 + (rect->height + icd->y_skip_top + vblank - 1) * ++ (qctrl->maximum - qctrl->minimum)) / ++ 1048 + qctrl->minimum; ++ } ++ } ++ ++ return ret < 0 ? ret : 0; ++} ++ ++static int mt9m001_try_fmt_cap(struct soc_camera_device *icd, ++ struct v4l2_format *f) ++{ ++ if (f->fmt.pix.height < 32 + icd->y_skip_top) ++ f->fmt.pix.height = 32 + icd->y_skip_top; ++ if (f->fmt.pix.height > 1024 + icd->y_skip_top) ++ f->fmt.pix.height = 1024 + icd->y_skip_top; ++ if (f->fmt.pix.width < 48) ++ f->fmt.pix.width = 48; ++ if (f->fmt.pix.width > 1280) ++ f->fmt.pix.width = 1280; ++ f->fmt.pix.width &= ~0x01; /* has to be even, unsure why was ~3 */ ++ ++ return 0; ++} ++ ++static unsigned int mt9m001_get_datawidth(struct soc_camera_device *icd) ++{ ++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd); ++ return mt9m001->datawidth; ++} ++ ++const struct v4l2_queryctrl mt9m001_controls[] = { ++ { ++ .id = V4L2_CID_VFLIP, ++ .type = V4L2_CTRL_TYPE_BOOLEAN, ++ .name = "Flip Vertically", ++ .minimum = 0, ++ .maximum = 1, ++ .step = 1, ++ .default_value = 0, ++ }, { ++ .id = V4L2_CID_GAIN, ++ .type = V4L2_CTRL_TYPE_INTEGER, ++ .name = "Gain", ++ .minimum = 0, ++ .maximum = 127, ++ .step = 1, ++ .default_value = 64, ++ .flags = V4L2_CTRL_FLAG_SLIDER, ++ }, { ++ .id = V4L2_CID_EXPOSURE, ++ .type = V4L2_CTRL_TYPE_INTEGER, ++ .name = "Exposure", ++ .minimum = 1, ++ .maximum = 255, ++ .step = 1, ++ .default_value = 255, ++ .flags = V4L2_CTRL_FLAG_SLIDER, ++ }, { ++ .id = V4L2_CID_AUTOEXPOSURE, ++ .type = V4L2_CTRL_TYPE_BOOLEAN, ++ .name = "Automatic Exposure", ++ .minimum = 0, ++ .maximum = 1, ++ .step = 1, ++ .default_value = 1, ++ }, { ++ .id = V4L2_CID_PRIVATE_BASE, ++ .type = V4L2_CTRL_TYPE_INTEGER, ++ .name = "Register access", ++ .minimum = reg_to_int(REG_READ, 0, 0), ++ .maximum = reg_to_int(REG_WRITE, 0xff, (1 << 16) - 1), ++ .step = 1, ++ .default_value = 1, ++ } ++}; ++ ++static int mt9m001_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl); ++static int mt9m001_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl); ++ ++static struct soc_camera_ops mt9m001_ops = { ++ .owner = THIS_MODULE, ++ .init = mt9m001_init, ++ .release = mt9m001_release, ++ .start_capture = mt9m001_start_capture, ++ .stop_capture = mt9m001_stop_capture, ++ .set_capture_format = mt9m001_set_capture_format, ++ .try_fmt_cap = mt9m001_try_fmt_cap, ++ .formats = NULL, /* Filled in later depending on the */ ++ .num_formats = 0, /* camera type and data widths */ ++ .get_datawidth = mt9m001_get_datawidth, ++ .controls = mt9m001_controls, ++ .num_controls = ARRAY_SIZE(mt9m001_controls), ++ .get_control = mt9m001_get_control, ++ .set_control = mt9m001_set_control, ++}; ++ ++static int mt9m001_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl) ++{ ++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd); ++ int data; ++ ++ switch (ctrl->id) { ++ case V4L2_CID_VFLIP: ++ data = reg_read(icd, MT9M001_READ_OPTIONS2); ++ if (data < 0) ++ return -EIO; ++ ctrl->value = !!(data & 0x8000); ++ break; ++ case V4L2_CID_AUTOEXPOSURE: ++ ctrl->value = mt9m001->autoexposure; ++ break; ++ case V4L2_CID_PRIVATE_BASE: ++ if (1) { ++ union reg_access_32 u; ++ ++ u.ctrl = ctrl->value; ++ if (u.reg.rw != REG_READ) ++ return -EINVAL; ++ data = reg_read(icd, u.reg.address); ++ if (data < 0) ++ return -EIO; ++ u.reg.value = data; ++ ctrl->value = u.ctrl; ++ } ++ } ++ return 0; ++} ++ ++static int mt9m001_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl) ++{ ++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd); ++ const struct v4l2_queryctrl *qctrl; ++ int data; ++ ++ qctrl = soc_camera_find_qctrl(&mt9m001_ops, ctrl->id); ++ ++ if (!qctrl) ++ return -EINVAL; ++ ++ switch (ctrl->id) { ++ case V4L2_CID_VFLIP: ++ if (ctrl->value) ++ data = reg_set(icd, MT9M001_READ_OPTIONS2, 0x8000); ++ else ++ data = reg_clear(icd, MT9M001_READ_OPTIONS2, 0x8000); ++ if (data < 0) ++ return -EIO; ++ break; ++ case V4L2_CID_GAIN: ++ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum) ++ return -EINVAL; ++ /* See Datasheet Table 7, Gain settings. */ ++ if (ctrl->value <= qctrl->default_value) { ++ /* Pack it into 0..1 step 0.125, register values 0..8 */ ++ unsigned long range = qctrl->default_value - qctrl->minimum; ++ data = ((ctrl->value - qctrl->minimum) * 8 + range / 2) / range; ++ ++ printk("Setting gain %d\n", data); ++ data = reg_write(icd, MT9M001_GLOBAL_GAIN, data); ++ if (data < 0) ++ return -EIO; ++ } else { ++ /* Pack it into 1.125..15 variable step, register values 9..67 */ ++ /* We assume qctrl->maximum - qctrl->default_value - 1 > 0 */ ++ unsigned long range = qctrl->maximum - qctrl->default_value - 1; ++ unsigned long gain = ((ctrl->value - qctrl->default_value - 1) * ++ 111 + range / 2) / range + 9; ++ ++ if (gain <= 32) ++ data = gain; ++ else if (gain <= 64) ++ data = ((gain - 32) * 16 + 16) / 32 + 80; ++ else ++ data = ((gain - 64) * 7 + 28) / 56 + 96; ++ ++ dev_info(&icd->dev, "Setting gain from %d to %d\n", ++ reg_read(icd, MT9M001_GLOBAL_GAIN), data); ++ data = reg_write(icd, MT9M001_GLOBAL_GAIN, data); ++ if (data < 0) ++ return -EIO; ++ } ++ ++ /* Success */ ++ icd->gain = ctrl->value; ++ break; ++ case V4L2_CID_EXPOSURE: ++ /* mt9m001 has maximum == default */ ++ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum) ++ return -EINVAL; ++ else { ++ unsigned long range = qctrl->maximum - qctrl->minimum; ++ unsigned long shutter = ((ctrl->value - qctrl->minimum) * 1048 + ++ range / 2) / range + 1; ++ ++ dev_info(&icd->dev, "Setting shutter width from %d to %lu\n", ++ reg_read(icd, MT9M001_SHUTTER_WIDTH), shutter); ++ if (reg_write(icd, MT9M001_SHUTTER_WIDTH, shutter) < 0) ++ return -EIO; ++ icd->exposure = ctrl->value; ++ mt9m001->autoexposure = 0; ++ } ++ break; ++ case V4L2_CID_AUTOEXPOSURE: ++ if (ctrl->value) { ++ const u16 vblank = 25; ++ if (reg_write(icd, MT9M001_SHUTTER_WIDTH, icd->height + ++ icd->y_skip_top + vblank) < 0) ++ return -EIO; ++ qctrl = soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE); ++ icd->exposure = (524 + (icd->height + icd->y_skip_top + vblank - 1) * ++ (qctrl->maximum - qctrl->minimum)) / ++ 1048 + qctrl->minimum; ++ mt9m001->autoexposure = 1; ++ } else ++ mt9m001->autoexposure = 0; ++ break; ++ case V4L2_CID_PRIVATE_BASE: ++ if (1) { ++ union reg_access_32 u; ++ ++ u.ctrl = ctrl->value; ++ if (u.reg.rw != REG_WRITE) ++ return -EINVAL; ++ data = reg_write(icd, u.reg.address, u.reg.value); ++ if (data < 0) ++ return -EIO; ++ } ++ } ++ return 0; ++} ++ ++/* Interface active, can use i2c. If it fails, it can indeed mean, that ++ * this wasn't our capture interface, so, we wait for the right one */ ++static int mt9m001_video_probe(struct soc_camera_device *icd) ++{ ++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd); ++ s32 data; ++ int ret; ++ ++ /* We must have a parent by now. And it cannot be a wrong one. ++ * So this entire test is completely redundant. */ ++ if (!icd->dev.parent || ++ to_soc_camera_host(icd->dev.parent)->nr != icd->iface) ++ return -ENODEV; ++ ++ /* Enable the chip */ ++ data = reg_write(&mt9m001->icd, MT9M001_CHIP_ENABLE, 1); ++ dev_dbg(&icd->dev, "write: %d\n", data); ++ ++ /* Read out the chip version register */ ++ data = reg_read(icd, MT9M001_CHIP_VERSION); ++ ++ /* must be 0x8411 or 0x8421 for colour sensor and 8431 for bw */ ++ switch (data) { ++ case 0x8411: ++ case 0x8421: ++ mt9m001->model = MT9M001C12ST; ++ mt9m001_ops.formats = mt9m001_colour_formats; ++ mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_colour_formats); ++ break; ++ case 0x8431: ++ mt9m001->model = MT9M001C12STM; ++ mt9m001_ops.formats = mt9m001_monochrome_formats; ++ if (mt9m001->client->dev.platform_data) ++ mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_monochrome_formats); ++ else ++ mt9m001_ops.num_formats = 1; ++ break; ++ default: ++ ret = -ENODEV; ++ dev_err(&icd->dev, ++ "No MT9M001 chip detected, register read %x\n", data); ++ goto ei2c; ++ } ++ ++ dev_info(&icd->dev, "Detected a MT9M001 chip ID %x (%s)\n", data, ++ data == 0x8431 ? "C12STM" : "C12ST"); ++ ++ /* Now that we know the model, we can start video */ ++ ret = soc_camera_video_start(icd); ++ if (ret) ++ goto eisis; ++ ++ return 0; ++ ++eisis: ++ei2c: ++ return ret; ++} ++ ++static void mt9m001_video_remove(struct soc_camera_device *icd) ++{ ++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd); ++ ++ dev_dbg(&icd->dev, "Video %x removed: %p, %p\n", mt9m001->client->addr, ++ mt9m001->icd.dev.parent, mt9m001->icd.vdev); ++ soc_camera_video_stop(&mt9m001->icd); ++} ++ ++static int mt9m001_probe(struct i2c_client *client) ++{ ++ struct mt9m001 *mt9m001; ++ struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); ++ int ret; ++ ++ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) { ++ pr_debug("%s: I2C-Adapter doesn't support I2C_FUNC_SMBUS_WORD\n", __FUNCTION__); ++ return -EIO; ++ } ++ ++ if (!(mt9m001 = kzalloc(sizeof(struct mt9m001), GFP_KERNEL))) ++ return -ENOMEM; ++ ++ mt9m001->client = client; ++ i2c_set_clientdata(client, mt9m001); ++ ++ /* Second stage probe - when a capture adapter is there */ ++ mt9m001->icd.probe = mt9m001_video_probe; ++ mt9m001->icd.remove = mt9m001_video_remove; ++ mt9m001->icd.ops = &mt9m001_ops; ++ mt9m001->icd.control = &client->dev; ++ mt9m001->icd.x_min = 20; ++ mt9m001->icd.y_min = 12; ++ mt9m001->icd.x_current = 20; ++ mt9m001->icd.y_current = 12; ++ mt9m001->icd.width_min = 48; ++ mt9m001->icd.width_max = 1280; ++ mt9m001->icd.height_min = 32; ++ mt9m001->icd.height_max = 1024; ++ mt9m001->icd.y_skip_top = 1; ++ /* Default datawidth - this is the only width this camera (normally) ++ * supports. It is only with extra logic that it can support ++ * other widths. Therefore it seems to be a sensible default. */ ++ mt9m001->datawidth = 10; ++ /* Simulated autoexposure. If enabled, we calculate shutter width ++ * ourselves in the driver based on vertical blanking and frame width */ ++ mt9m001->autoexposure = 1; ++ ++ if (client->dev.platform_data) { ++ struct soc_camera_link *icl = client->dev.platform_data; ++ /* We have a data bus switch. We call pca9536 functions ++ * explicitly by name so the driver will not be unloaded, ++ * and we'll check mt9m001->data_switch anyway every time ++ * before calling. The only concern is that the driver ++ * doesn't detach itself from the device, but so far it is ++ * not supported by the I2C layer */ ++ if (icl->extender) ++ mt9m001->data_switch = *icl->extender; ++ mt9m001->icd.iface = icl->bus_id; ++ } ++ ++ ret = soc_camera_device_register(&mt9m001->icd); ++ if (ret) ++ goto eisdr; ++ ++ return 0; ++ ++eisdr: ++ kfree(mt9m001); ++ return ret; ++} ++ ++static int mt9m001_remove(struct i2c_client *client) ++{ ++ struct mt9m001 *mt9m001 = i2c_get_clientdata(client); ++ ++ soc_camera_device_unregister(&mt9m001->icd); ++ kfree(mt9m001); ++ ++ return 0; ++} ++ ++static struct i2c_driver mt9m001_i2c_driver = { ++ .driver = { ++ .name = "mt9m001", ++ }, ++ .probe = mt9m001_probe, ++ .remove = mt9m001_remove, ++}; ++ ++static int __init mt9m001_mod_init(void) ++{ ++ return i2c_add_driver(&mt9m001_i2c_driver); ++} ++ ++static void __exit mt9m001_mod_exit(void) ++{ ++ i2c_del_driver(&mt9m001_i2c_driver); ++} ++ ++module_init(mt9m001_mod_init); ++module_exit(mt9m001_mod_exit); ++ ++MODULE_DESCRIPTION("Micron MT9M001 Camera driver"); ++MODULE_AUTHOR("Guennadi Liakhovetski "); ++MODULE_LICENSE("GPL"); +-- +1.5.3.4 + +-- +video4linux-list mailing list +Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe +https://www.redhat.com/mailman/listinfo/video4linux-list + diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml new file mode 100644 index 0000000000..33fbf12e20 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml @@ -0,0 +1,882 @@ +Path: news.gmane.org!not-for-mail +From: Guennadi Liakhovetski +Newsgroups: gmane.comp.video.video4linux +Subject: [RFC PATCH 5/8] Add support for the MT9V022 camera +Date: Wed, 23 Jan 2008 18:41:55 +0100 (CET) +Lines: 811 +Approved: news@gmane.org +Message-ID: +References: +NNTP-Posting-Host: lo.gmane.org +Mime-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Trace: ger.gmane.org 1201110170 28931 80.91.229.12 (23 Jan 2008 17:42:50 GMT) +X-Complaints-To: usenet@ger.gmane.org +NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:50 +0000 (UTC) +To: video4linux-list@redhat.com +Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:43:08 2008 +Return-path: +Envelope-to: rh-video4linux-list@gmane.org +Original-Received: from hormel.redhat.com ([209.132.177.30]) + by lo.gmane.org with esmtp (Exim 4.50) + id 1JHjcd-0003BV-40 + for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:47 +0100 +Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110]) + by hormel.redhat.com (Postfix) with ESMTP + id C4D7773103; Wed, 23 Jan 2008 12:42:17 -0500 (EST) +Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com + [172.16.52.254]) + by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id + m0NHgEOS017265 for ; + Wed, 23 Jan 2008 12:42:14 -0500 +Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32]) + by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHgDux028248 + for ; Wed, 23 Jan 2008 12:42:13 -0500 +Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) + by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfhB0001132 + for ; Wed, 23 Jan 2008 12:41:43 -0500 +Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:36 -0000 +Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange) + [87.189.47.31] + by mail.gmx.net (mp007) with SMTP; 23 Jan 2008 18:41:36 +0100 +X-Authenticated: #20450766 +X-Provags-ID: V01U2FsdGVkX195mwEUb8x5N9fm4LtKVLZ+GalahBZqOqI6J/GHUG + kn7bBfBiSjX3u4 +Original-Received: from lyakh (helo=localhost) + by axis700.grange with local-esmtp (Exim 4.63) + (envelope-from ) id 1JHjbn-00029z-Tk + for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:55 +0100 +X-X-Sender: lyakh@axis700.grange +In-Reply-To: +X-Y-GMX-Trusted: 0 +X-RedHat-Spam-Score: 0 +X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 +X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32 +X-loop: video4linux-list@redhat.com +X-BeenThere: video4linux-list@redhat.com +X-Mailman-Version: 2.1.5 +Precedence: junk +List-Id: Linux and Kernel Video +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Original-Sender: video4linux-list-bounces@redhat.com +Errors-To: video4linux-list-bounces@redhat.com +Xref: news.gmane.org gmane.comp.video.video4linux:36476 +Archived-At: + +This driver supports Micron MT9V022 colour camera. + +Signed-off-by: Guennadi Liakhovetski +--- + drivers/media/video/Kconfig | 14 + + drivers/media/video/Makefile | 1 + + drivers/media/video/mt9v022.c | 751 +++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 766 insertions(+), 0 deletions(-) + create mode 100644 drivers/media/video/mt9v022.c + +diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig +index def5246..1359f8f 100644 +--- a/drivers/media/video/Kconfig ++++ b/drivers/media/video/Kconfig +@@ -818,6 +818,20 @@ config MT9M001_PCA9536_SWITCH + Select this if your MT9M001 camera uses a PCA9536 I2C GPIO + extender to switch between 8 and 10 bit datawidth modes + ++config SOC_CAMERA_MT9V022 ++ tristate "mt9v022 support" ++ depends on SOC_CAMERA ++ select SENSORS_PCA9536 if MT9V022_PCA9536_SWITCH ++ help ++ This driver supports MT9V022 cameras from Micron ++ ++config MT9V022_PCA9536_SWITCH ++ bool "pca9536 datawidth switch for mt9v022" ++ depends on SOC_CAMERA_MT9V022 ++ help ++ Select this if your MT9V022 camera uses a PCA9536 I2C GPIO ++ extender to switch between 8 and 10 bit datawidth modes ++ + config VIDEO_PXA27X + tristate "PXA27x Quick Capture Interface driver" + depends on VIDEO_DEV && PXA27x +diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile +index c56bfdb..6eaf0ad 100644 +--- a/drivers/media/video/Makefile ++++ b/drivers/media/video/Makefile +@@ -119,5 +119,6 @@ obj-$(CONFIG_VIDEO_VIVI) += vivi.o + obj-$(CONFIG_VIDEO_PXA27X) += pxa_camera.o + obj-$(CONFIG_SOC_CAMERA) += soc_camera.o + obj-$(CONFIG_SOC_CAMERA_MT9M001) += mt9m001.o ++obj-$(CONFIG_SOC_CAMERA_MT9V022) += mt9v022.o + + EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core +diff --git a/drivers/media/video/mt9v022.c b/drivers/media/video/mt9v022.c +new file mode 100644 +index 0000000..d13b965 +--- /dev/null ++++ b/drivers/media/video/mt9v022.c +@@ -0,0 +1,751 @@ ++/* ++ * Driver for MT9V022 CMOS Image Sensor from Micron ++ * ++ * Copyright (C) 2008, Guennadi Liakhovetski ++ * ++ * 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 ++ ++/* mt9v022 i2c address 0x48, 0x4c, 0x58, 0x5c ++ * The platform has to define i2c_board_info ++ * and call i2c_register_board_info() */ ++ ++static char *sensor_type; ++module_param(sensor_type, charp, S_IRUGO); ++MODULE_PARM_DESC(sensor_type, "Sensor type: \"colour\" or \"monochrome\"\n"); ++ ++/* mt9v022 selected register addresses */ ++#define MT9V022_CHIP_VERSION 0x00 ++#define MT9V022_COLUMN_START 0x01 ++#define MT9V022_ROW_START 0x02 ++#define MT9V022_WINDOW_HEIGHT 0x03 ++#define MT9V022_WINDOW_WIDTH 0x04 ++#define MT9V022_HORIZONTAL_BLANKING 0x05 ++#define MT9V022_VERTICAL_BLANKING 0x06 ++#define MT9V022_CHIP_CONTROL 0x07 ++#define MT9V022_SHUTTER_WIDTH1 0x08 ++#define MT9V022_SHUTTER_WIDTH2 0x09 ++#define MT9V022_SHUTTER_WIDTH_CTRL 0x0a ++#define MT9V022_TOTAL_SHUTTER_WIDTH 0x0b ++#define MT9V022_RESET 0x0c ++#define MT9V022_READ_MODE 0x0d ++#define MT9V022_MONITOR_MODE 0x0e ++#define MT9V022_PIXEL_OPERATION_MODE 0x0f ++#define MT9V022_LED_OUT_CONTROL 0x1b ++#define MT9V022_ADC_MODE_CONTROL 0x1c ++#define MT9V022_ANALOG_GAIN 0x34 ++#define MT9V022_BLACK_LEVEL_CALIB_CTRL 0x47 ++#define MT9V022_PIXCLK_FV_LV 0x74 ++#define MT9V022_DIGITAL_TEST_PATTERN 0x7f ++#define MT9V022_AEC_AGC_ENABLE 0xAF ++#define MT9V022_MAX_TOTAL_SHUTTER_WIDTH 0xBD ++ ++/* Progressive scan, master, defaults */ ++#define MT9V022_CHIP_CONTROL_DEFAULT 0x188 ++ ++/* must be 32 bit, bitwise coded by reg_to_int and int_to_reg below */ ++struct reg_access { ++ u16 value; ++ u8 address; ++ u8 rw; ++} __attribute__ ((packed)); ++ ++union reg_access_32 { ++ struct reg_access reg; ++ u32 ctrl; ++}; ++ ++enum reg_rw { REG_READ = 0, REG_WRITE = 1, }; ++ ++/* ++#define reg_to_int(rw, address, value) ({ \ ++ union reg_access_32 u = {.reg = {value, address, rw}}; \ ++ u.i32; \ ++}) ++*/ ++ ++/* rw has to be numerically most significant, because ++ * maximum, minimum and value are signed */ ++#ifdef __LITTLE_ENDIAN ++#define reg_to_int(rw, address, value) (((value) & 0xffff) | (((address) & 0xff) << 16) | (((rw) & 0x7f) << 24)) ++#else ++#define reg_to_int(rw, address, value) ((((value) & 0xffff) << 16) | (((address) & 0xff) << 8) | ((rw) & 0x7f)) ++#endif ++ ++static const struct soc_camera_data_format mt9v022_formats[]= { ++ { ++ .name = "RGB Bayer (sRGB)", ++ .depth = 8, ++ .fourcc = V4L2_PIX_FMT_SBGGR8, ++ .colorspace = V4L2_COLORSPACE_SRGB, ++ }, { ++ .name = "RGB Bayer (sRGB)", ++ .depth = 10, ++ .fourcc = V4L2_PIX_FMT_SBGGR16, ++ .colorspace = V4L2_COLORSPACE_SRGB, ++ }, { ++ .name = "Monochrome 10 bit", ++ .depth = 10, ++ .fourcc = V4L2_PIX_FMT_Y16, ++ }, { ++ .name = "Monochrome 8 bit", ++ .depth = 8, ++ .fourcc = V4L2_PIX_FMT_GREY, ++ }, ++}; ++ ++enum mt9v022_sensor { ++ MT9V022_SENSOR_MONOCHROME, ++ MT9V022_SENSOR_COLOUR, ++}; ++ ++struct mt9v022 { ++ struct i2c_client *client; ++ struct soc_camera_device icd; ++ enum mt9v022_sensor sensor; ++ struct i2c_client *data_switch; ++ u16 chip_control; ++ unsigned char datawidth; ++}; ++ ++static int reg_read(struct soc_camera_device *icd, const u8 reg) ++{ ++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); ++ struct i2c_client *client = mt9v022->client; ++ s32 data = i2c_smbus_read_word_data(client, reg); ++ return data < 0 ? data : swab16(data); ++} ++ ++static int reg_write(struct soc_camera_device *icd, const u8 reg, ++ const u16 data) ++{ ++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); ++ return i2c_smbus_write_word_data(mt9v022->client, reg, swab16(data)); ++} ++ ++static int reg_set(struct soc_camera_device *icd, const u8 reg, ++ const u16 data) ++{ ++ int ret; ++ ++ if ((ret = reg_read(icd, reg)) < 0) ++ return ret; ++ return reg_write(icd, reg, ret | data); ++} ++ ++static int reg_clear(struct soc_camera_device *icd, const u8 reg, ++ const u16 data) ++{ ++ int ret; ++ ++ if ((ret = reg_read(icd, reg)) < 0) ++ return ret; ++ return reg_write(icd, reg, ret & ~data); ++} ++ ++static int mt9v022_init(struct soc_camera_device *icd) ++{ ++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); ++ int ret; ++ ++ /* Almost the default mode: master, parallel, simultaneous, and an ++ * undocumented bit 0x200, which is present in table 7, but not in 8, ++ * plus snapshot mode to disable scan for now */ ++// mt9v022->chip_control |= 0x10; ++ ret = reg_write(icd, MT9V022_CHIP_CONTROL, mt9v022->chip_control); ++ if (ret >= 0) ++ reg_write(icd, MT9V022_READ_MODE, 0x300); ++ ++ /* All defaults */ ++ if (ret >= 0) ++ ret = reg_set(icd, MT9V022_AEC_AGC_ENABLE, 0x3); /* AEC, AGC on */ ++ if (ret >= 0) ++ ret = reg_write(icd, MT9V022_MAX_TOTAL_SHUTTER_WIDTH, 480); ++ if (ret >= 0) ++ ret = reg_clear(icd, MT9V022_BLACK_LEVEL_CALIB_CTRL, 1); /* default - auto */ ++ if (ret >= 0) ++ ret = reg_write(icd, MT9V022_DIGITAL_TEST_PATTERN, 0); ++ ++ return ret < 0 ? ret :0; ++} ++ ++static int mt9v022_release(struct soc_camera_device *icd) ++{ ++ /* Nothing? */ ++ return 0; ++} ++ ++static int mt9v022_start_capture(struct soc_camera_device *icd) ++{ ++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); ++ /* Switch to master "normal" mode */ ++ mt9v022->chip_control &= ~0x10; ++ if (reg_write(icd, MT9V022_CHIP_CONTROL, ++ mt9v022->chip_control) < 0) ++ return -EIO; ++ return 0; ++} ++ ++static int mt9v022_stop_capture(struct soc_camera_device *icd) ++{ ++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); ++ /* Switch to snapshot mode */ ++// mt9v022->chip_control |= 0x10; ++ if (reg_write(icd, MT9V022_CHIP_CONTROL, ++ mt9v022->chip_control) < 0) ++ return -EIO; ++ return 0; ++} ++ ++extern int pca9536_set_level(struct i2c_client *client, u8 pin, u8 level); ++ ++static int external_bus_switch(struct i2c_client *extender, int go8bit) ++{ ++ if (! extender) ++ return -ENODEV; ++ ++#ifdef CONFIG_MT9V022_PCA9536_SWITCH ++ return pca9536_set_level(extender, 0, go8bit); ++#else ++ return -ENODEV; ++#endif ++} ++ ++static int mt9v022_set_capture_format(struct soc_camera_device *icd, __u32 pixfmt, ++ struct v4l2_rect *rect, unsigned int flags) ++{ ++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); ++ unsigned int width_flag = flags & (IS_DATAWIDTH_10 | IS_DATAWIDTH_9 | ++ IS_DATAWIDTH_8); ++ u16 pixclk = 0; ++ int ret; ++ ++ /* Only one width bit may be set */ ++ if (!is_power_of_2(width_flag)) ++ return -EINVAL; ++ ++ /* The caller provides a supported format, as verified per call to ++ * icd->try_fmt_cap(), datawidth is from our supported format list */ ++ switch (pixfmt) { ++ case V4L2_PIX_FMT_GREY: ++ case V4L2_PIX_FMT_Y16: ++ if (mt9v022->sensor != MT9V022_SENSOR_MONOCHROME) ++ return -EINVAL; ++ break; ++ case V4L2_PIX_FMT_SBGGR8: ++ case V4L2_PIX_FMT_SBGGR16: ++ if (mt9v022->sensor != MT9V022_SENSOR_COLOUR) ++ return -EINVAL; ++ break; ++ case 0: ++ /* No format change, only geometry */ ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ /* Like in example app. Contradicts the datasheet though */ ++ ret = reg_read(icd, MT9V022_AEC_AGC_ENABLE); ++ if (ret >= 0) { ++ if (ret & 1) /* Autoexposure */ ++ ret = reg_write(icd, MT9V022_MAX_TOTAL_SHUTTER_WIDTH, ++ rect->height + icd->y_skip_top + 43); ++ else ++ ret = reg_write(icd, MT9V022_TOTAL_SHUTTER_WIDTH, ++ rect->height + icd->y_skip_top + 43); ++ } ++ /* Setup frame format: defaults apart from width and height */ ++ if (ret >= 0) ++ ret = reg_write(icd, MT9V022_COLUMN_START, rect->left); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9V022_ROW_START, rect->top); ++ if (ret >= 0) ++ /* Default 94, Phytec driver says: "width + horizontal blank >= 660" */ ++ ret = reg_write(icd, MT9V022_HORIZONTAL_BLANKING, ++ rect->width > 660 - 43 ? 43 : 660 - rect->width); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9V022_VERTICAL_BLANKING, 45); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9V022_WINDOW_WIDTH, rect->width); ++ if (ret >= 0) ++ ret = reg_write(icd, MT9V022_WINDOW_HEIGHT, rect->height + icd->y_skip_top); ++ ++ if (ret < 0) ++ return ret; ++ ++ dev_dbg(&icd->dev, "Frame %ux%u pixel\n", rect->width, rect->height); ++ ++ if ((mt9v022->datawidth != 10 && (width_flag == IS_DATAWIDTH_10)) || ++ (mt9v022->datawidth != 9 && (width_flag == IS_DATAWIDTH_9)) || ++ (mt9v022->datawidth != 8 && (width_flag == IS_DATAWIDTH_8))) { ++ /* data width switch requested */ ++ if (! mt9v022->data_switch) ++ return -EINVAL; ++ ++ /* Well, we actually only can do 10 or 8 bits... */ ++ if (width_flag == IS_DATAWIDTH_9) ++ return -EINVAL; ++ ++ ret = external_bus_switch(mt9v022->data_switch, ++ width_flag == IS_DATAWIDTH_8); ++ if (ret < 0) ++ return ret; ++ ++ mt9v022->datawidth = width_flag == IS_DATAWIDTH_8 ? 8 : 10; ++ } ++ ++ if (flags & IS_PCLK_SAMPLE_RISING) ++ pixclk |= 0x10; ++ ++ if (! (flags & IS_HSYNC_ACTIVE_HIGH)) ++ pixclk |= 0x1; ++ ++ if (! (flags & IS_VSYNC_ACTIVE_HIGH)) ++ pixclk |= 0x2; ++ ++ if ((ret = reg_write(icd, MT9V022_PIXCLK_FV_LV, pixclk)) < 0) ++ return ret; ++ ++ if (! (flags & IS_MASTER)) ++ mt9v022->chip_control &= ~0x8; ++ ++ if ((ret = reg_write(icd, MT9V022_CHIP_CONTROL, mt9v022->chip_control)) < 0) ++ return ret; ++ ++ dev_dbg(&icd->dev, "Calculated pixclk 0x%x, chip control 0x%x\n", ++ pixclk, mt9v022->chip_control); ++ ++ return 0; ++} ++ ++static int mt9v022_try_fmt_cap(struct soc_camera_device *icd, ++ struct v4l2_format *f) ++{ ++ if (f->fmt.pix.height < 32 + icd->y_skip_top) ++ f->fmt.pix.height = 32 + icd->y_skip_top; ++ if (f->fmt.pix.height > 480 + icd->y_skip_top) ++ f->fmt.pix.height = 480 + icd->y_skip_top; ++ if (f->fmt.pix.width < 48) ++ f->fmt.pix.width = 48; ++ if (f->fmt.pix.width > 752) ++ f->fmt.pix.width = 752; ++ f->fmt.pix.width &= ~0x03; /* ? */ ++ ++ return 0; ++} ++ ++static unsigned int mt9v022_get_datawidth(struct soc_camera_device *icd) ++{ ++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); ++ return mt9v022->datawidth; ++} ++ ++const struct v4l2_queryctrl mt9v022_controls[] = { ++ { ++ .id = V4L2_CID_VFLIP, ++ .type = V4L2_CTRL_TYPE_BOOLEAN, ++ .name = "Flip Vertically", ++ .minimum = 0, ++ .maximum = 1, ++ .step = 1, ++ .default_value = 0, ++ }, { ++ .id = V4L2_CID_HFLIP, ++ .type = V4L2_CTRL_TYPE_BOOLEAN, ++ .name = "Flip Horizontally", ++ .minimum = 0, ++ .maximum = 1, ++ .step = 1, ++ .default_value = 0, ++ }, { ++ .id = V4L2_CID_GAIN, ++ .type = V4L2_CTRL_TYPE_INTEGER, ++ .name = "Analog Gain", ++ .minimum = 64, ++ .maximum = 127, ++ .step = 1, ++ .default_value = 64, ++ .flags = V4L2_CTRL_FLAG_SLIDER, ++ }, { ++ .id = V4L2_CID_EXPOSURE, ++ .type = V4L2_CTRL_TYPE_INTEGER, ++ .name = "Exposure", ++ .minimum = 1, ++ .maximum = 255, ++ .step = 1, ++ .default_value = 255, ++ .flags = V4L2_CTRL_FLAG_SLIDER, ++ }, { ++ .id = V4L2_CID_AUTOGAIN, ++ .type = V4L2_CTRL_TYPE_BOOLEAN, ++ .name = "Automatic Gain", ++ .minimum = 0, ++ .maximum = 1, ++ .step = 1, ++ .default_value = 1, ++ }, { ++ .id = V4L2_CID_AUTOEXPOSURE, ++ .type = V4L2_CTRL_TYPE_BOOLEAN, ++ .name = "Automatic Exposure", ++ .minimum = 0, ++ .maximum = 1, ++ .step = 1, ++ .default_value = 1, ++ }, { ++ .id = V4L2_CID_PRIVATE_BASE, ++ .type = V4L2_CTRL_TYPE_INTEGER, ++ .name = "Register access", ++ .minimum = reg_to_int(REG_READ, 0, 0), ++ .maximum = reg_to_int(REG_WRITE, 0xff, (1 << 16) - 1), ++ .step = 1, ++ .default_value = 1, ++ } ++}; ++ ++static int mt9v022_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl); ++static int mt9v022_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl); ++ ++static struct soc_camera_ops mt9v022_ops = { ++ .owner = THIS_MODULE, ++ .init = mt9v022_init, ++ .release = mt9v022_release, ++ .start_capture = mt9v022_start_capture, ++ .stop_capture = mt9v022_stop_capture, ++ .set_capture_format = mt9v022_set_capture_format, ++ .try_fmt_cap = mt9v022_try_fmt_cap, ++ .formats = mt9v022_formats, ++ .num_formats = ARRAY_SIZE(mt9v022_formats), ++ .get_datawidth = mt9v022_get_datawidth, ++ .controls = mt9v022_controls, ++ .num_controls = ARRAY_SIZE(mt9v022_controls), ++ .get_control = mt9v022_get_control, ++ .set_control = mt9v022_set_control, ++}; ++ ++static int mt9v022_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl) ++{ ++ int data; ++ ++ switch (ctrl->id) { ++ case V4L2_CID_VFLIP: ++ data = reg_read(icd, MT9V022_READ_MODE); ++ if (data < 0) ++ return -EIO; ++ ctrl->value = !!(data & 0x10); ++ break; ++ case V4L2_CID_HFLIP: ++ data = reg_read(icd, MT9V022_READ_MODE); ++ if (data < 0) ++ return -EIO; ++ ctrl->value = !!(data & 0x20); ++ break; ++ case V4L2_CID_AUTOEXPOSURE: ++ data = reg_read(icd, MT9V022_AEC_AGC_ENABLE); ++ if (data < 0) ++ return -EIO; ++ ctrl->value = !!(data & 0x1); ++ break; ++ case V4L2_CID_AUTOGAIN: ++ data = reg_read(icd, MT9V022_AEC_AGC_ENABLE); ++ if (data < 0) ++ return -EIO; ++ ctrl->value = !!(data & 0x2); ++ break; ++ case V4L2_CID_PRIVATE_BASE: ++ if (1) { ++ union reg_access_32 u; ++ ++ u.ctrl = ctrl->value; ++ if (u.reg.rw != REG_READ) ++ return -EINVAL; ++ data = reg_read(icd, u.reg.address); ++ if (data < 0) ++ return -EIO; ++ u.reg.value = data; ++ ctrl->value = u.ctrl; ++ } ++ } ++ return 0; ++} ++ ++static int mt9v022_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl) ++{ ++ int data; ++ const struct v4l2_queryctrl *qctrl; ++ ++ qctrl = soc_camera_find_qctrl(&mt9v022_ops, ctrl->id); ++ ++ if (!qctrl) ++ return -EINVAL; ++ ++ switch (ctrl->id) { ++ case V4L2_CID_VFLIP: ++ if (ctrl->value) ++ data = reg_set(icd, MT9V022_READ_MODE, 0x10); ++ else ++ data = reg_clear(icd, MT9V022_READ_MODE, 0x10); ++ if (data < 0) ++ return -EIO; ++ break; ++ case V4L2_CID_HFLIP: ++ if (ctrl->value) ++ data = reg_set(icd, MT9V022_READ_MODE, 0x20); ++ else ++ data = reg_clear(icd, MT9V022_READ_MODE, 0x20); ++ if (data < 0) ++ return -EIO; ++ break; ++ case V4L2_CID_GAIN: ++ /* mt9v022 has minimum == default */ ++ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum) ++ return -EINVAL; ++ else { ++ unsigned long range = qctrl->maximum - qctrl->minimum; ++ /* Datasheet says 16 to 64. autogain only works properly ++ * after setting gain to maximum 14. Larger values ++ * produce "white fly" noise effect. On the whole, ++ * manually setting analog gain does no good. */ ++ unsigned long gain = ((ctrl->value - qctrl->minimum) * 10 + ++ range / 2) / range + 4; ++ if (gain >= 32) ++ gain &= ~1; ++ /* The user wants to set gain manually, hope, she ++ * knows, what she's doing... Switch AGC off. */ ++ ++ if (reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x2) < 0) ++ return -EIO; ++ ++ dev_info(&icd->dev, "Setting gain from %d to %lu\n", ++ reg_read(icd, MT9V022_ANALOG_GAIN), gain); ++ if (reg_write(icd, MT9V022_ANALOG_GAIN, gain) < 0) ++ return -EIO; ++ icd->gain = ctrl->value; ++ } ++ break; ++ case V4L2_CID_EXPOSURE: ++ /* mt9v022 has maximum == default */ ++ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum) ++ return -EINVAL; ++ else { ++ unsigned long range = qctrl->maximum - qctrl->minimum; ++ unsigned long shutter = ((ctrl->value - qctrl->minimum) * 479 + ++ range / 2) / range + 1; ++ /* The user wants to set shutter width manually, hope, she ++ * knows, what she's doing... Switch AEC off. */ ++ ++ if (reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x1) < 0) ++ return -EIO; ++ ++ dev_info(&icd->dev, "Setting shutter width from %d to %lu\n", ++ reg_read(icd, MT9V022_TOTAL_SHUTTER_WIDTH), shutter); ++ if (reg_write(icd, MT9V022_TOTAL_SHUTTER_WIDTH, shutter) < 0) ++ return -EIO; ++ icd->exposure = ctrl->value; ++ } ++ break; ++ case V4L2_CID_AUTOGAIN: ++ if (ctrl->value) ++ data = reg_set(icd, MT9V022_AEC_AGC_ENABLE, 0x2); ++ else ++ data = reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x2); ++ if (data < 0) ++ return -EIO; ++ break; ++ case V4L2_CID_AUTOEXPOSURE: ++ if (ctrl->value) ++ data = reg_set(icd, MT9V022_AEC_AGC_ENABLE, 0x1); ++ else ++ data = reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x1); ++ if (data < 0) ++ return -EIO; ++ break; ++ case V4L2_CID_PRIVATE_BASE: ++ if (1) { ++ union reg_access_32 u; ++ ++ u.ctrl = ctrl->value; ++ if (u.reg.rw != REG_WRITE) ++ return -EINVAL; ++ data = reg_write(icd, u.reg.address, u.reg.value); ++ if (data < 0) ++ return -EIO; ++ } ++ } ++ return 0; ++} ++ ++/* Interface active, can use i2c. If it fails, it can indeed mean, that ++ * this wasn't our capture interface, so, we wait for the right one */ ++static int mt9v022_video_probe(struct soc_camera_device *icd) ++{ ++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); ++ s32 data; ++ int ret; ++ ++ if (!icd->dev.parent || ++ to_soc_camera_host(icd->dev.parent)->nr != icd->iface) ++ return -ENODEV; ++ ++ /* Read out the chip version register */ ++ data = reg_read(icd, MT9V022_CHIP_VERSION); ++ ++ /* must be 0x1311 or 0x1313 */ ++ if (data != 0x1311 && data != 0x1313) { ++ ret = -ENODEV; ++ dev_info(&icd->dev, "No MT9V022 detected, ID register 0x%x\n", ++ data); ++ goto ei2c; ++ } ++ ++ /* Soft reset */ ++ ret = reg_write(icd, MT9V022_RESET, 1); ++ if (ret < 0) ++ goto ei2c; ++ /* 15 clock cycles */ ++ udelay(200); ++ if (reg_read(icd, MT9V022_RESET)) { ++ dev_err(&icd->dev, "Resetting MT9V022 failed!\n"); ++ goto ei2c; ++ } ++ ++ /* Set monochrome or colour sensor type */ ++ if (sensor_type && (!strcmp("colour", sensor_type) || ++ !strcmp("color", sensor_type))) { ++ ret = reg_write(icd, MT9V022_PIXEL_OPERATION_MODE, 4 | 0x11); ++ mt9v022->sensor = MT9V022_SENSOR_COLOUR; ++ } else { ++ ret = reg_write(icd, MT9V022_PIXEL_OPERATION_MODE, 0x11); ++ mt9v022->sensor = MT9V022_SENSOR_MONOCHROME; ++ } ++ ++ if (ret >= 0) ++ ret = soc_camera_video_start(icd); ++ if (ret < 0) ++ goto eisis; ++ ++ dev_info(&icd->dev, "Detected a MT9V022 chip ID %x, %s sensor\n", ++ data, mt9v022->sensor == MT9V022_SENSOR_MONOCHROME ? ++ "monochrome" : "colour"); ++ ++ return 0; ++ ++eisis: ++ei2c: ++ return ret; ++} ++ ++static void mt9v022_video_remove(struct soc_camera_device *icd) ++{ ++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); ++ ++ dev_dbg(&icd->dev, "Video %x removed: %p, %p\n", mt9v022->client->addr, ++ mt9v022->icd.dev.parent, mt9v022->icd.vdev); ++ soc_camera_video_stop(&mt9v022->icd); ++} ++ ++static int mt9v022_probe(struct i2c_client *client) ++{ ++ struct mt9v022 *mt9v022; ++ struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); ++ int ret; ++ ++ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) { ++ pr_debug("%s: I2C-Adapter doesn't support I2C_FUNC_SMBUS_WORD\n", __FUNCTION__); ++ return -EIO; ++ } ++ ++ if (!(mt9v022 = kzalloc(sizeof(struct mt9v022), GFP_KERNEL))) ++ return -ENOMEM; ++ ++ mt9v022->chip_control = MT9V022_CHIP_CONTROL_DEFAULT; ++ mt9v022->client = client; ++ i2c_set_clientdata(client, mt9v022); ++ ++ mt9v022->icd.probe = mt9v022_video_probe; ++ mt9v022->icd.remove = mt9v022_video_remove; ++ mt9v022->icd.ops = &mt9v022_ops; ++ mt9v022->icd.control = &client->dev; ++ mt9v022->icd.x_min = 1; ++ mt9v022->icd.y_min = 4; ++ mt9v022->icd.x_current = 1; ++ mt9v022->icd.y_current = 4; ++ mt9v022->icd.width_min = 48; ++ mt9v022->icd.width_max = 752; ++ mt9v022->icd.height_min = 32; ++ mt9v022->icd.height_max = 480; ++ mt9v022->icd.y_skip_top = 1; ++ /* Default datawidth - this is the only width this camera (normally) ++ * supports. It is only with extra logic that it can support ++ * other widths. Therefore it seems to be a sensible default. */ ++ mt9v022->datawidth = 10; ++ ++ if (client->dev.platform_data) { ++ struct soc_camera_link *icl = client->dev.platform_data; ++ /* We have a data bus switch. We call pca9536 functions ++ * explicitly by name so the driver will not be unloaded, ++ * and we'll check mt9v022->data_switch anyway every time ++ * before calling. The only concern is that the driver ++ * doesn't detach itself from the device, but so far it is ++ * not supported by the I2C layer */ ++ if (icl->extender) ++ mt9v022->data_switch = *icl->extender; ++ mt9v022->icd.iface = icl->bus_id; ++ } ++ ++ ret = soc_camera_device_register(&mt9v022->icd); ++ if (ret) ++ goto eisdr; ++ ++ return 0; ++ ++eisdr: ++ kfree(mt9v022); ++ return ret; ++} ++ ++static int mt9v022_remove(struct i2c_client *client) ++{ ++ struct mt9v022 *mt9v022 = i2c_get_clientdata(client); ++ ++ soc_camera_device_unregister(&mt9v022->icd); ++ kfree(mt9v022); ++ ++ return 0; ++} ++ ++static struct i2c_driver mt9v022_i2c_driver = { ++ .driver = { ++ .name = "mt9v022", ++ }, ++ .probe = mt9v022_probe, ++ .remove = mt9v022_remove, ++}; ++ ++static int __init mt9v022_mod_init(void) ++{ ++ return i2c_add_driver(&mt9v022_i2c_driver); ++} ++ ++static void __exit mt9v022_mod_exit(void) ++{ ++ i2c_del_driver(&mt9v022_i2c_driver); ++} ++ ++module_init(mt9v022_mod_init); ++module_exit(mt9v022_mod_exit); ++ ++MODULE_DESCRIPTION("Micron MT9V022 Camera driver"); ++MODULE_AUTHOR("Guennadi Liakhovetski "); ++MODULE_LICENSE("GPL"); +-- +1.5.3.4 + +-- +video4linux-list mailing list +Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe +https://www.redhat.com/mailman/listinfo/video4linux-list + diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml new file mode 100644 index 0000000000..bc771f238b --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml @@ -0,0 +1,100 @@ +Path: news.gmane.org!not-for-mail +From: Guennadi Liakhovetski +Newsgroups: gmane.comp.video.video4linux +Subject: [RFC PATCH 6/8] Add V4L2_CID_AUTOEXPOSURE control +Date: Wed, 23 Jan 2008 18:42:01 +0100 (CET) +Lines: 29 +Approved: news@gmane.org +Message-ID: +References: +NNTP-Posting-Host: lo.gmane.org +Mime-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Trace: ger.gmane.org 1201110161 28894 80.91.229.12 (23 Jan 2008 17:42:41 GMT) +X-Complaints-To: usenet@ger.gmane.org +NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:41 +0000 (UTC) +To: video4linux-list@redhat.com +Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:43:01 2008 +Return-path: +Envelope-to: rh-video4linux-list@gmane.org +Original-Received: from hormel.redhat.com ([209.132.177.30]) + by lo.gmane.org with esmtp (Exim 4.50) + id 1JHjcY-000394-S3 + for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:43 +0100 +Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110]) + by hormel.redhat.com (Postfix) with ESMTP + id 3B00D730EB; Wed, 23 Jan 2008 12:42:16 -0500 (EST) +Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com + [172.16.52.254]) + by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id + m0NHgEoZ017266 for ; + Wed, 23 Jan 2008 12:42:14 -0500 +Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32]) + by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHgDXf028250 + for ; Wed, 23 Jan 2008 12:42:13 -0500 +Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) + by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfl3q001210 + for ; Wed, 23 Jan 2008 12:41:48 -0500 +Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:42 -0000 +Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange) + [87.189.47.31] + by mail.gmx.net (mp003) with SMTP; 23 Jan 2008 18:41:42 +0100 +X-Authenticated: #20450766 +X-Provags-ID: V01U2FsdGVkX19s1mA+rThsOt7hg+tJ7j4mHAPKhlRXDzhjWNVMNr + iM1Yi7GSzlRBY8 +Original-Received: from lyakh (helo=localhost) + by axis700.grange with local-esmtp (Exim 4.63) + (envelope-from ) id 1JHjbt-0002A2-Vj + for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:42:01 +0100 +X-X-Sender: lyakh@axis700.grange +In-Reply-To: +X-Y-GMX-Trusted: 0 +X-RedHat-Spam-Score: 0 +X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 +X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32 +X-loop: video4linux-list@redhat.com +X-BeenThere: video4linux-list@redhat.com +X-Mailman-Version: 2.1.5 +Precedence: junk +List-Id: Linux and Kernel Video +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Original-Sender: video4linux-list-bounces@redhat.com +Errors-To: video4linux-list-bounces@redhat.com +Xref: news.gmane.org gmane.comp.video.video4linux:36474 +Archived-At: + +The MT9V022 camera has hardware AEC support, that can be switched on and +off in software. MT9M001 emulates Autoexposure control in software. Add a +V4L2 control, similar to already present Autogain. + +Signed-off-by: Guennadi Liakhovetski +--- + include/linux/videodev2.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h +index ae9b24c..05b8c22 100644 +--- a/include/linux/videodev2.h ++++ b/include/linux/videodev2.h +@@ -946,6 +946,7 @@ struct v4l2_querymenu + #define V4L2_CID_HCENTER (V4L2_CID_BASE+22) + #define V4L2_CID_VCENTER (V4L2_CID_BASE+23) + #define V4L2_CID_LASTP1 (V4L2_CID_BASE+24) /* last CID + 1 */ ++#define V4L2_CID_AUTOEXPOSURE (V4L2_CID_BASE+25) + + /* MPEG-class control IDs defined by V4L2 */ + #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) +-- +1.5.3.4 + +-- +video4linux-list mailing list +Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe +https://www.redhat.com/mailman/listinfo/video4linux-list + diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml new file mode 100644 index 0000000000..31d42cfbee --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml @@ -0,0 +1,113 @@ +Path: news.gmane.org!not-for-mail +From: Guennadi Liakhovetski +Newsgroups: gmane.comp.video.video4linux +Subject: [RFC PATCH 7/8] Add two new fourcc codes for 16bpp formats +Date: Wed, 23 Jan 2008 18:42:09 +0100 (CET) +Lines: 42 +Approved: news@gmane.org +Message-ID: +References: +NNTP-Posting-Host: lo.gmane.org +Mime-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +X-Trace: ger.gmane.org 1201110167 28919 80.91.229.12 (23 Jan 2008 17:42:47 GMT) +X-Complaints-To: usenet@ger.gmane.org +NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:47 +0000 (UTC) +To: video4linux-list@redhat.com +Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:43:06 2008 +Return-path: +Envelope-to: rh-video4linux-list@gmane.org +Original-Received: from hormel.redhat.com ([209.132.177.30]) + by lo.gmane.org with esmtp (Exim 4.50) + id 1JHjci-0003Dp-8K + for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:52 +0100 +Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110]) + by hormel.redhat.com (Postfix) with ESMTP + id 6BF2372FF8; Wed, 23 Jan 2008 12:42:25 -0500 (EST) +Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com + [172.16.52.254]) + by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id + m0NHgO9P017291 for ; + Wed, 23 Jan 2008 12:42:24 -0500 +Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32]) + by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHgNmZ028352 + for ; Wed, 23 Jan 2008 12:42:23 -0500 +Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) + by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfucU001324 + for ; Wed, 23 Jan 2008 12:41:56 -0500 +Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:50 -0000 +Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange) + [87.189.47.31] + by mail.gmx.net (mp009) with SMTP; 23 Jan 2008 18:41:50 +0100 +X-Authenticated: #20450766 +X-Provags-ID: V01U2FsdGVkX19aKoUhVR5aPjFgx0HR7/IruYd7urwvhZz+IuYK4j + /KvctzVVJXbtdS +Original-Received: from lyakh (helo=localhost) + by axis700.grange with local-esmtp (Exim 4.63) + (envelope-from ) id 1JHjc1-0002A6-Re + for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:42:09 +0100 +X-X-Sender: lyakh@axis700.grange +In-Reply-To: +X-Y-GMX-Trusted: 0 +X-RedHat-Spam-Score: 0 +X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 +X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32 +X-loop: video4linux-list@redhat.com +X-BeenThere: video4linux-list@redhat.com +X-Mailman-Version: 2.1.5 +Precedence: junk +List-Id: Linux and Kernel Video +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Original-Sender: video4linux-list-bounces@redhat.com +Errors-To: video4linux-list-bounces@redhat.com +Xref: news.gmane.org gmane.comp.video.video4linux:36475 +Archived-At: + +This adds two new fourcc codes (as per info at fourcc.org) +for 16bpp mono and 16bpp Bayer formats. + +Signed-off-by: Steven Whitehouse +--- +This is a resend of the patch earlier sent by Steven Whitehouse. For some +reason, I didn't see the patch in both his emails sent to the list, only +in copies I got directly by cc. So, strictly speaking this patch doesn't +belong to this series, but I need these 2 codes, and I'm giving the full +credit to the original author:-) + + include/linux/videodev2.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h +index 05b8c22..b2c47c4 100644 +--- a/include/linux/videodev2.h ++++ b/include/linux/videodev2.h +@@ -280,6 +280,7 @@ struct v4l2_pix_format + #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B','G','R','4') /* 32 BGR-8-8-8-8 */ + #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R','G','B','4') /* 32 RGB-8-8-8-8 */ + #define V4L2_PIX_FMT_GREY v4l2_fourcc('G','R','E','Y') /* 8 Greyscale */ ++#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y','1','6',' ') /* 16 Greyscale */ + #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y','V','U','9') /* 9 YVU 4:1:0 */ + #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y','V','1','2') /* 12 YVU 4:2:0 */ + #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y','U','Y','V') /* 16 YUV 4:2:2 */ +@@ -302,6 +303,7 @@ struct v4l2_pix_format + + /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ + #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */ ++#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B','Y','R','2') /* 16 BGBG.. GRGR.. */ + + /* compressed formats */ + #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M','J','P','G') /* Motion-JPEG */ +-- +1.5.3.4 + +-- +video4linux-list mailing list +Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe +https://www.redhat.com/mailman/listinfo/video4linux-list + diff --git a/packages/linux/linux-ezx-2.6.24/patches/series b/packages/linux/linux-ezx-2.6.24/patches/series new file mode 100644 index 0000000000..5fb6a2bc23 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/patches/series @@ -0,0 +1,105 @@ +binutils-buildid-arm.patch +pxa27x_overlay-r8.patch + +ezx-core.patch +# ezx-core TODO: should be ezx-common +# look at the pxa-regs.h diff and put each definition on the proper patch +# register a machine type for each phone model + +# enable this patch ONLY if you have STUART connected and dont forget +# to change your cmdline if you want console on STUART. +#ezx-enable-stuart.patch + +ezx-bp.patch +# ezx-bp TODO: +# try to run this as a module - this may solve timing issues for opentapi. +# suspend/resume (not sure if it can be handled here) +# implement 2nd gen handshake support +# move platform device to ezx-phone.c + +ezx-pm.patch + +ezx-pcap.patch +# ezx-pcap TODO: +# move vibrator level function to the vibrator driver + +a780-pcap.patch +e680-pcap.patch +a1200-pcap.patch +e6-pcap.patch + +a780-mci.patch +e680-mci.patch +a1200-mci.patch +e6-mci.patch + +pxa27x-udc-support.3.patch + +ezx-emu.patch +# ezx-emu TODO: +# userspace interface for controling emu +# read adc to find which accessory is plugged +a780-emu.patch +e680-emu.patch + +pxa27x-udc-fix-a1200.patch #(see ezx-a1200.c) +ezx-eoc.patch +a1200-eoc.patch +e6-eoc.patch + +ezx-mtd-map.patch + +ezx-serial-bug-workaround.patch + +pxa-kbd.patch +a780-kbd.patch +e680-kbd.patch +a1200-kbd.patch + +pcap-ts.patch +a780-ts.patch +e680-ts.patch +a1200-ts.patch +e6-ts.patch + +ezx-backlight.patch + +a780-flip.patch +e680-locksw.patch +a1200-flip.patch + +a780-leds.patch +e680-leds.patch + +a780-vibrator.patch + +# mux_cli patches +mux_cli.patch +mux-fix.patch +mux-fix-init-errorpath.patch +mux-remove-flipbuffers.patch +mux-remove-get_halted_bit.patch +mux-remove-usbh_finished_resume.patch +mux-fix-makefile.patch +mux-fix-tty-driver.patch +mux-linux-2.6.21-fix.patch +#mux-ifdef-ezx-features.patch +#mux_debug.patch + +asoc-pxa-ssp.patch +asoc-fix-loopback.patch +ezx-asoc.patch + +# mux_cli TODO: +# merge patches +# try to understand the code and cleanup (painful) + +# Global TODO: +# compile everything as module and test for insmod/rmmod +# can NOT run as module (yet) +# pxa-ohci, ts0710_mux, ts0710_mux_usb, ezx-bp + +# the folowing break too much stuff on other phones. + +# incomplete + diff --git a/packages/linux/linux-ezx-2.6.24/rokre2/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/rokre2/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-ezx-2.6.24/rokre2/defconfig b/packages/linux/linux-ezx-2.6.24/rokre2/defconfig new file mode 100755 index 0000000000..206ae45fc7 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/rokre2/defconfig @@ -0,0 +1,1189 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23.1 +# Wed Oct 24 18:05:01 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +CONFIG_PXA_EZX=y +# CONFIG_PXA_EZX_E680 is not set +# CONFIG_PXA_EZX_A780 is not set +# CONFIG_PXA_EZX_E2 is not set +CONFIG_PXA_EZX_A1200=y +# CONFIG_PXA_EZX_E6 is not set +# CONFIG_EZX_BP is not set +CONFIG_EZX_PCAP=y +CONFIG_EZX_EOC=y +# CONFIG_EZX_EMU is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=y + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +# CONFIG_MTD_EZX is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +# CONFIG_WATCHDOG is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_HWMON is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_EZX is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +CONFIG_RTC_LIB=y +# CONFIG_RTC_CLASS is not set + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.24/rokre6/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/rokre6/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-ezx-2.6.24/rokre6/defconfig b/packages/linux/linux-ezx-2.6.24/rokre6/defconfig new file mode 100755 index 0000000000..733566adc6 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/rokre6/defconfig @@ -0,0 +1,1203 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23.1 +# Wed Oct 24 18:07:51 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-ezxdev" +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +CONFIG_PXA_EZX=y +# CONFIG_PXA_EZX_E680 is not set +# CONFIG_PXA_EZX_A780 is not set +# CONFIG_PXA_EZX_E2 is not set +# CONFIG_PXA_EZX_A1200 is not set +CONFIG_PXA_EZX_E6=y +# CONFIG_EZX_BP is not set +CONFIG_EZX_PCAP=y +CONFIG_EZX_EOC=y +# CONFIG_EZX_EMU is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=y + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_XIP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +# CONFIG_MTD_EZX is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=y +CONFIG_INPUT_TSDEV_SCREEN_X=240 +CONFIG_INPUT_TSDEV_SCREEN_Y=320 +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_PXA=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_TOUCHSCREEN_PCAP=y +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=y + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +# CONFIG_WATCHDOG is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_HWMON is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_EZX is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_PXA2XX_SOC=y +CONFIG_SND_PXA2XX_SOC_SSP=y +CONFIG_SND_PXA2XX_SOC_EZX=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_PCAP2=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +# CONFIG_USB_ETH_RNDIS is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +CONFIG_RTC_LIB=y +# CONFIG_RTC_CLASS is not set + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +# CONFIG_NFS_V4 is not set +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +# CONFIG_NFSD_V4 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ezx-2.6.24/update_patches.sh b/packages/linux/linux-ezx-2.6.24/update_patches.sh new file mode 100644 index 0000000000..9a8d36e461 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.24/update_patches.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -e + +# Helper script to update patches and speedup filling the SRC_URI section of our .bb +# Run it while in packages/linux/linux-ezx-2.6.x/ + +[ -d patches ] && mtn drop -R patches +rm -rf patches + +svn --quiet co http://svn.openezx.org/branches/kernel-2.6.24.x-patches patches +find patches -type f -print0 +mtn add patches patches/* + +cat patches/series | grep ^[0-9A-Za-z] | sed -e 's/.*/\tfile:\/\/patches\/\0;patch=1 \\/' +ls -1 patches/defconfig-* | sed -e 's/.*/\tfile:\/\/\0 \\/' + diff --git a/packages/linux/linux-ezx_2.6.24.bb b/packages/linux/linux-ezx_2.6.24.bb new file mode 100644 index 0000000000..093ee1e94a --- /dev/null +++ b/packages/linux/linux-ezx_2.6.24.bb @@ -0,0 +1,111 @@ +DESCRIPTION = "2.6 Linux Development Kernel for the Motorola GSM phones A780 and E680" +AUTHOR = "The OpenEZX Team " +HOMEPAGE = "http://www.openezx.org" +EZX = "ezxdev" +PR = "${EZX}-r0" + +# unstable branch, use 2.6.21 if you want something working +DEFAULT_PREFERENCE = "-99" +DEFAULT_PREFERENCE_a780 = "99" + + +# last sync: svn revision XXX + +require linux.inc + +RPSRC = "http://www.rpsys.net/openzaurus/patches/archive" + +SRC_URI = " \ + ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \ + file://logo_linux_clut224.ppm \ + \ + file://patches/binutils-buildid-arm.patch;patch=1 \ + file://patches/pxa27x_overlay-r8.patch;patch=1 \ + file://patches/ezx-core.patch;patch=1 \ + file://patches/ezx-bp.patch;patch=1 \ + file://patches/ezx-pm.patch;patch=1 \ + file://patches/ezx-pcap.patch;patch=1 \ + file://patches/a780-pcap.patch;patch=1 \ + file://patches/e680-pcap.patch;patch=1 \ + file://patches/a1200-pcap.patch;patch=1 \ + file://patches/e6-pcap.patch;patch=1 \ + file://patches/a780-mci.patch;patch=1 \ + file://patches/e680-mci.patch;patch=1 \ + file://patches/a1200-mci.patch;patch=1 \ + file://patches/e6-mci.patch;patch=1 \ + file://patches/pxa27x-udc-support.3.patch;patch=1 \ + file://patches/ezx-emu.patch;patch=1 \ + file://patches/a780-emu.patch;patch=1 \ + file://patches/e680-emu.patch;patch=1 \ + file://patches/pxa27x-udc-fix-a1200.patch;patch=1 \ + file://patches/ezx-eoc.patch;patch=1 \ + file://patches/a1200-eoc.patch;patch=1 \ + file://patches/e6-eoc.patch;patch=1 \ + file://patches/ezx-mtd-map.patch;patch=1 \ + file://patches/ezx-serial-bug-workaround.patch;patch=1 \ + file://patches/pxa-kbd.patch;patch=1 \ + file://patches/a780-kbd.patch;patch=1 \ + file://patches/e680-kbd.patch;patch=1 \ + file://patches/a1200-kbd.patch;patch=1 \ + file://patches/pcap-ts.patch;patch=1 \ + file://patches/a780-ts.patch;patch=1 \ + file://patches/e680-ts.patch;patch=1 \ + file://patches/a1200-ts.patch;patch=1 \ + file://patches/e6-ts.patch;patch=1 \ + file://patches/ezx-backlight.patch;patch=1 \ + file://patches/a780-flip.patch;patch=1 \ + file://patches/e680-locksw.patch;patch=1 \ + file://patches/a1200-flip.patch;patch=1 \ + file://patches/a780-leds.patch;patch=1 \ + file://patches/e680-leds.patch;patch=1 \ + file://patches/a780-vibrator.patch;patch=1 \ + file://patches/mux_cli.patch;patch=1 \ + file://patches/mux-fix.patch;patch=1 \ + file://patches/mux-fix-init-errorpath.patch;patch=1 \ + file://patches/mux-remove-flipbuffers.patch;patch=1 \ + file://patches/mux-remove-get_halted_bit.patch;patch=1 \ + file://patches/mux-remove-usbh_finished_resume.patch;patch=1 \ + file://patches/mux-fix-makefile.patch;patch=1 \ + file://patches/mux-fix-tty-driver.patch;patch=1 \ + file://patches/mux-linux-2.6.21-fix.patch;patch=1 \ + file://patches/asoc-pxa-ssp.patch;patch=1 \ + file://patches/asoc-fix-loopback.patch;patch=1 \ + file://patches/ezx-asoc.patch;patch=1 \ + file://defconfig \ + " + +S = "${WORKDIR}/linux-${PV}" + + +############################################################## +# kernel image resides on a seperate flash partition (for now) +# But we can flash it from userspace (flash_unlock /dev/mtdX && flash_eraseall /dev/mtdX && flashcp /boot/zImage /dev/mtdX) +# so lets make a package of it. What about a postinst that flashes the new kernel? + +COMPATIBLE_HOST = "arm.*-linux" +COMPATIBLE_MACHINE = '(a780|e680|a1200|rorkre2|rokre6)' + +# For now the code for serial console is disabled in compress.c +#CMDLINE_CON = "console=ttyS2,115200n8 console=tty1 " +CMDLINE_CON = "console=tty1 " + +CMDLINE_ROOT = "root=/dev/mmcblk0p2 rootfstype=ext2 rootwait=1" +CMDLINE_NFSROOT = "root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.200:/export/ezx-image rootdelay=1 " +# Uncomment to enable dyntick +#CMDLINE_OTHER = "dyntick=enable" +CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}' +CMDLINE_IP = "ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0" +CMDLINE_MEM = "mem=32M@0xA0000000 mem=16M@0xAC000000" +CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}" +# Uncomment to use root-over-nfs-over-usb +#CMDLINE_NFSROOT_USB = "${CMDLINE_CON} ${CMDLINE_NFSROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}" + +# 1024x1024 once was the maximum kernel size for boot-over-usb -- is it still? +#KERNEL_IMAGE_MAXSIZE = "1294336" + +############################################################### +# module configs specific to this kernel +# +#module_autoload_pxaficp_ir = "pxaficp_ir" +#module_autoload_snd-pcm-oss = "snd-pcm-oss" + -- cgit v1.2.3 From d68972c8d42cebcadbad5d51389a4357affef358 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 28 Jan 2008 13:21:27 +0000 Subject: mysql: make sure all files are packaged. Add -dbg package while we are at it. --- packages/mysql/mysql_4.1.18.bb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/mysql/mysql_4.1.18.bb b/packages/mysql/mysql_4.1.18.bb index b509b81311..cd32f929e3 100644 --- a/packages/mysql/mysql_4.1.18.bb +++ b/packages/mysql/mysql_4.1.18.bb @@ -1,9 +1,9 @@ DESCRIPTION = "The MySQL Open Source Database System" -SECTION = "libs" HOMEPAGE = "http://www.mysql.com/" -DEPENDS += "ncurses mysql-native" +SECTION = "libs" LICENSE = "GPL" -PR="r2" +DEPENDS += "ncurses mysql-native" +PR = "r3" SRC_URI = "http://downloads.mysql.com/archives/mysql-4.1/mysql-${PV}.tar.gz \ file://autofoo.patch;patch=1 \ @@ -63,7 +63,7 @@ pkg_postrm_mysql-server () { grep mysql /etc/passwd && deluser mysql } -PACKAGES = "${PN} libmysqlclient libmysqlclient-dev mysql-client mysql-server" +PACKAGES = "${PN}-dbg ${PN} libmysqlclient libmysqlclient-dev mysql-client mysql-server ${PN}-leftovers" FILES_${PN} = " " RDEPENDS_${PN} = "mysql-client mysql-server" @@ -138,3 +138,6 @@ ${datadir}/mysql/ \ ${localstatedir}/mysql/ \ ${sysconfdir}/init.d \ ${sysconfdir}/my.cnf" + +DESCRIPTION_${PN}-leftovers = "unpackaged and probably unneeded files for ${PN}" +FILES_${PN}-leftovers = "/" -- cgit v1.2.3 From c5eb38dbacd45160840308061f811165a87b7df4 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 28 Jan 2008 13:48:13 +0000 Subject: conf/machine: Go back to treating all Strongarm devices the same. * http://lists.linuxtogo.org/pipermail/openembedded-devel/2008-January/004031.html gcc does not differentiate between the different Strongarm flavors, why should OE? --- conf/machine/collie.conf | 2 +- conf/machine/h3600.conf | 2 +- conf/machine/htcwallaby.conf | 2 +- conf/machine/include/tune-strongarm.inc | 6 ++++++ conf/machine/include/tune-strongarm1100.inc | 5 ----- conf/machine/jornada56x.conf | 2 +- conf/machine/jornada7xx.conf | 2 +- conf/machine/shark.conf | 2 +- conf/machine/simpad.conf | 2 +- 9 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 conf/machine/include/tune-strongarm.inc delete mode 100644 conf/machine/include/tune-strongarm1100.inc diff --git a/conf/machine/collie.conf b/conf/machine/collie.conf index 04e0e83051..5170f8993e 100644 --- a/conf/machine/collie.conf +++ b/conf/machine/collie.conf @@ -3,10 +3,10 @@ #@DESCRIPTION: Machine configuration for the SA1100 based Sharp Zaurus SL-5000 and SL-5500 devices TARGET_ARCH = "arm" -TARGET_CC_ARCH = "-march=armv4 -mtune=strongarm1110" MACHINE_KERNEL_VERSION ?= "2.6" require conf/machine/include/zaurus-${MACHINE_KERNEL_VERSION}.inc +require conf/machine/include/tune-strongarm.inc PREFERRED_PROVIDER_xserver = "xserver-kdrive" diff --git a/conf/machine/h3600.conf b/conf/machine/h3600.conf index 6f0e37b803..c037226154 100644 --- a/conf/machine/h3600.conf +++ b/conf/machine/h3600.conf @@ -8,7 +8,7 @@ TARGET_ARCH = "arm" PACKAGE_EXTRA_ARCHS = "armv4 " -require conf/machine/include/tune-strongarm1100.inc +require conf/machine/include/tune-strongarm.inc # h3700, h3800 have 32, but let that be the bonus ROOT_FLASH_SIZE = "16" diff --git a/conf/machine/htcwallaby.conf b/conf/machine/htcwallaby.conf index 515700d9e6..34255a1536 100644 --- a/conf/machine/htcwallaby.conf +++ b/conf/machine/htcwallaby.conf @@ -8,7 +8,7 @@ TARGET_ARCH = "arm" PACKAGE_EXTRA_ARCHS = "armv4 " -require conf/machine/include/tune-strongarm1100.inc +require conf/machine/include/tune-strongarm.inc ROOT_FLASH_SIZE = "16" VOLATILE_STORAGE_SIZE = "32" diff --git a/conf/machine/include/tune-strongarm.inc b/conf/machine/include/tune-strongarm.inc new file mode 100644 index 0000000000..448b28c91f --- /dev/null +++ b/conf/machine/include/tune-strongarm.inc @@ -0,0 +1,6 @@ +# This machine lists common configuration options for Strongarm devices +# gcc does not differentiate between the different Strongarm versions, so neither do we +# http://lists.linuxtogo.org/pipermail/openembedded-devel/2008-January/004031.html + +TARGET_CC_ARCH = "-march=armv4 -mtune=strongarm" + diff --git a/conf/machine/include/tune-strongarm1100.inc b/conf/machine/include/tune-strongarm1100.inc deleted file mode 100644 index f136710409..0000000000 --- a/conf/machine/include/tune-strongarm1100.inc +++ /dev/null @@ -1,5 +0,0 @@ -# This machine lists common configuration options for Strongarm 1100 devices -# NOTE: The Zaurus Collie also has a Strongarm processor, but uses the 1110 type - -TARGET_CC_ARCH = "-march=armv4 -mtune=strongarm1100" - diff --git a/conf/machine/jornada56x.conf b/conf/machine/jornada56x.conf index a42dd8c127..72fff1ed5e 100644 --- a/conf/machine/jornada56x.conf +++ b/conf/machine/jornada56x.conf @@ -12,4 +12,4 @@ EXTRA_IMAGECMD_jornada56x_jffs2 = "-e 0x40000 -p" SERIAL_CONSOLE = "115200 ttySA0" -require conf/machine/include/tune-strongarm1100.inc +require conf/machine/include/tune-strongarm.inc diff --git a/conf/machine/jornada7xx.conf b/conf/machine/jornada7xx.conf index ee9117e406..8741eb4ff6 100644 --- a/conf/machine/jornada7xx.conf +++ b/conf/machine/jornada7xx.conf @@ -4,7 +4,7 @@ TARGET_ARCH = "arm" -require conf/machine/include/tune-strongarm1100.inc +require conf/machine/include/tune-strongarm.inc PREFERRED_PROVIDER_virtual/kernel = "linux-jlime-jornada7xx" PCMCIA_MANAGER = "pcmciautils" diff --git a/conf/machine/shark.conf b/conf/machine/shark.conf index 87c260856d..d7d35cfda1 100644 --- a/conf/machine/shark.conf +++ b/conf/machine/shark.conf @@ -15,7 +15,7 @@ SERIAL_CONSOLE = "ttySA0 115200 vt100" ROOT_FLASH_SIZE = "16" USE_VT = "0" -require conf/machine/include/tune-strongarm1100.inc +require conf/machine/include/tune-strongarm.inc MACHINE_FEATURES = "kernel26 apm alsa pcmcia keyboard ext2" MACHINE_EXTRA_RDEPENDS_append = " mpg321 mpd madplay " diff --git a/conf/machine/simpad.conf b/conf/machine/simpad.conf index e187ee1e75..6334d34171 100644 --- a/conf/machine/simpad.conf +++ b/conf/machine/simpad.conf @@ -9,7 +9,7 @@ TARGET_ARCH = "arm" MACHINE_FEATURES = "apm pcmcia irda screen touchscreen vfat" include conf/machine/include/simpad-${MACHINE_KERNEL_VERSION}.inc -require conf/machine/include/tune-strongarm1100.inc +require conf/machine/include/tune-strongarm.inc ROOT_FLASH_SIZE = "16" -- cgit v1.2.3 From f86d71cee62b0edd68ab0b00bb2a66b20018a0ca Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 28 Jan 2008 13:57:03 +0000 Subject: dbus 1.1.1 update to 1.1.4 (aka 1.2.0 RC2) --- packages/dbus/dbus-1.1.1/.mtn2git_empty | 0 packages/dbus/dbus-1.1.1/cross.patch | 10 -- packages/dbus/dbus-1.1.1/dbus-1.init | 110 ---------------------- packages/dbus/dbus-1.1.1/fix-install-daemon.patch | 13 --- packages/dbus/dbus-1.1.1/tmpdir.patch | 30 ------ packages/dbus/dbus-1.1.4/.mtn2git_empty | 0 packages/dbus/dbus-1.1.4/cross.patch | 10 ++ packages/dbus/dbus-1.1.4/dbus-1.init | 110 ++++++++++++++++++++++ packages/dbus/dbus-1.1.4/fix-install-daemon.patch | 13 +++ packages/dbus/dbus-1.1.4/tmpdir.patch | 30 ++++++ packages/dbus/dbus_1.1.1.bb | 63 ------------- packages/dbus/dbus_1.1.4.bb | 10 ++ 12 files changed, 173 insertions(+), 226 deletions(-) delete mode 100644 packages/dbus/dbus-1.1.1/.mtn2git_empty delete mode 100644 packages/dbus/dbus-1.1.1/cross.patch delete mode 100644 packages/dbus/dbus-1.1.1/dbus-1.init delete mode 100644 packages/dbus/dbus-1.1.1/fix-install-daemon.patch delete mode 100644 packages/dbus/dbus-1.1.1/tmpdir.patch create mode 100644 packages/dbus/dbus-1.1.4/.mtn2git_empty create mode 100644 packages/dbus/dbus-1.1.4/cross.patch create mode 100644 packages/dbus/dbus-1.1.4/dbus-1.init create mode 100644 packages/dbus/dbus-1.1.4/fix-install-daemon.patch create mode 100644 packages/dbus/dbus-1.1.4/tmpdir.patch delete mode 100644 packages/dbus/dbus_1.1.1.bb create mode 100644 packages/dbus/dbus_1.1.4.bb diff --git a/packages/dbus/dbus-1.1.1/.mtn2git_empty b/packages/dbus/dbus-1.1.1/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/dbus/dbus-1.1.1/cross.patch b/packages/dbus/dbus-1.1.1/cross.patch deleted file mode 100644 index 268a3ae3de..0000000000 --- a/packages/dbus/dbus-1.1.1/cross.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- /tmp/configure.in 2006-11-09 21:47:10.000000000 +0100 -+++ dbus-0.95/configure.in 2006-11-09 21:48:13.108554000 +0100 -@@ -719,6 +719,7 @@ - exit (0); - ]])], - [ac_cv_have_abstract_sockets=yes], -+ [ac_cv_have_abstract_sockets=no], - [ac_cv_have_abstract_sockets=no] - )]) - AC_LANG_POP(C) diff --git a/packages/dbus/dbus-1.1.1/dbus-1.init b/packages/dbus/dbus-1.1.1/dbus-1.init deleted file mode 100644 index 0725083c69..0000000000 --- a/packages/dbus/dbus-1.1.1/dbus-1.init +++ /dev/null @@ -1,110 +0,0 @@ -#! /bin/sh -# -*- coding: utf-8 -*- -# Debian init.d script for D-BUS -# Copyright © 2003 Colin Walters - -set -e - -DAEMON=/usr/bin/dbus-daemon -NAME=dbus -DAEMONUSER=messagebus -PIDDIR=/var/run/dbus -PIDFILE=$PIDDIR/pid -UUIDDIR=/var/lib/dbus -DESC="system message bus" -EVENTDIR=/etc/dbus-1/event.d - -test -x $DAEMON || exit 0 - -# Source defaults file; edit that file to configure this script. -ENABLED=1 -PARAMS="" -if [ -e /etc/default/dbus ]; then - . /etc/default/dbus -fi - -test "$ENABLED" != "0" || exit 0 - -start_it_up() -{ - if [ ! -d $PIDDIR ]; then - mkdir -p $PIDDIR - chown $DAEMONUSER $PIDDIR - chgrp $DAEMONUSER $PIDDIR - fi - if [ -e $PIDFILE ]; then - PIDDIR=/proc/$(cat $PIDFILE) - if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then - echo "$DESC already started; not starting." - else - echo "Removing stale PID file $PIDFILE." - rm -f $PIDFILE - fi - fi - - if [ ! -d $UUIDDIR ]; then - mkdir -p $UUIDDIR - chown $DAEMONUSER $UUIDDIR - chgrp $DAEMONUSER $UUIDDIR - fi - - dbus-uuidgen --ensure - - echo -n "Starting $DESC: " - start-stop-daemon --start --quiet --pidfile $PIDFILE \ - --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS - echo "$NAME." - if [ -d $EVENTDIR ]; then - run-parts --arg=start $EVENTDIR - fi -} - -shut_it_down() -{ - if [ -d $EVENTDIR ]; then - # TODO: --reverse when busybox supports it - run-parts --arg=stop $EVENTDIR - fi - echo -n "Stopping $DESC: " - start-stop-daemon --stop --quiet --pidfile $PIDFILE \ - --user $DAEMONUSER - # We no longer include these arguments so that start-stop-daemon - # can do its job even given that we may have been upgraded. - # We rely on the pidfile being sanely managed - # --exec $DAEMON -- --system $PARAMS - echo "$NAME." - rm -f $PIDFILE -} - -reload_it() -{ - echo -n "Reloading $DESC config: " - dbus-send --print-reply --system --type=method_call \ - --dest=org.freedesktop.DBus \ - / org.freedesktop.DBus.ReloadConfig > /dev/null - # hopefully this is enough time for dbus to reload it's config file. - echo "done." -} - -case "$1" in - start) - start_it_up - ;; - stop) - shut_it_down - ;; - reload|force-reload) - reload_it - ;; - restart) - shut_it_down - sleep 1 - start_it_up - ;; - *) - echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload}" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/packages/dbus/dbus-1.1.1/fix-install-daemon.patch b/packages/dbus/dbus-1.1.1/fix-install-daemon.patch deleted file mode 100644 index c31786357d..0000000000 --- a/packages/dbus/dbus-1.1.1/fix-install-daemon.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: dbus-0.94/bus/Makefile.am -=================================================================== ---- dbus-0.94.orig/bus/Makefile.am 2006-10-01 17:36:18.000000000 +0200 -+++ dbus-0.94/bus/Makefile.am 2006-10-14 21:40:05.000000000 +0200 -@@ -110,7 +110,7 @@ - $(mkinstalldirs) $(DESTDIR)$(DBUS_DAEMONDIR); \ - chmod 755 $(DESTDIR)$(DBUS_DAEMONDIR); \ - fi -- $(INSTALL_PROGRAM) dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR) -+ $(INSTALL_PROGRAM) .libs/dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR) - $(mkinstalldirs) $(DESTDIR)$(localstatedir)/run/dbus - $(mkinstalldirs) $(DESTDIR)$(configdir)/system.d - $(mkinstalldirs) $(DESTDIR)$(datadir)/dbus-1/services diff --git a/packages/dbus/dbus-1.1.1/tmpdir.patch b/packages/dbus/dbus-1.1.1/tmpdir.patch deleted file mode 100644 index 838b903f0a..0000000000 --- a/packages/dbus/dbus-1.1.1/tmpdir.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- dbus-0.22/configure.in.orig 2004-08-13 00:57:16.000000000 +0200 -+++ dbus-0.22/configure.in 2004-12-30 21:15:57.000000000 +0100 -@@ -1047,15 +1048,18 @@ - AC_SUBST(ABSOLUTE_TOP_BUILDDIR) - - #### Find socket directories --if ! test -z "$TMPDIR" ; then -- DEFAULT_SOCKET_DIR=$TMPDIR --elif ! test -z "$TEMP" ; then -- DEFAULT_SOCKET_DIR=$TEMP --elif ! test -z "$TMP" ; then -- DEFAULT_SOCKET_DIR=$TMP --else -- DEFAULT_SOCKET_DIR=/tmp --fi -+#if ! test -z "$TMPDIR" ; then -+# DEFAULT_SOCKET_DIR=$TMPDIR -+#elif ! test -z "$TEMP" ; then -+# DEFAULT_SOCKET_DIR=$TEMP -+#elif ! test -z "$TMP" ; then -+# DEFAULT_SOCKET_DIR=$TMP -+#else -+# DEFAULT_SOCKET_DIR=/tmp -+#fi -+ -+# checks disabled to avoid expanding this at build time -+DEFAULT_SOCKET_DIR=/tmp - - if ! test -z "$with_test_socket_dir" ; then - TEST_SOCKET_DIR="$with_test_socket_dir" diff --git a/packages/dbus/dbus-1.1.4/.mtn2git_empty b/packages/dbus/dbus-1.1.4/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/dbus/dbus-1.1.4/cross.patch b/packages/dbus/dbus-1.1.4/cross.patch new file mode 100644 index 0000000000..268a3ae3de --- /dev/null +++ b/packages/dbus/dbus-1.1.4/cross.patch @@ -0,0 +1,10 @@ +--- /tmp/configure.in 2006-11-09 21:47:10.000000000 +0100 ++++ dbus-0.95/configure.in 2006-11-09 21:48:13.108554000 +0100 +@@ -719,6 +719,7 @@ + exit (0); + ]])], + [ac_cv_have_abstract_sockets=yes], ++ [ac_cv_have_abstract_sockets=no], + [ac_cv_have_abstract_sockets=no] + )]) + AC_LANG_POP(C) diff --git a/packages/dbus/dbus-1.1.4/dbus-1.init b/packages/dbus/dbus-1.1.4/dbus-1.init new file mode 100644 index 0000000000..0725083c69 --- /dev/null +++ b/packages/dbus/dbus-1.1.4/dbus-1.init @@ -0,0 +1,110 @@ +#! /bin/sh +# -*- coding: utf-8 -*- +# Debian init.d script for D-BUS +# Copyright © 2003 Colin Walters + +set -e + +DAEMON=/usr/bin/dbus-daemon +NAME=dbus +DAEMONUSER=messagebus +PIDDIR=/var/run/dbus +PIDFILE=$PIDDIR/pid +UUIDDIR=/var/lib/dbus +DESC="system message bus" +EVENTDIR=/etc/dbus-1/event.d + +test -x $DAEMON || exit 0 + +# Source defaults file; edit that file to configure this script. +ENABLED=1 +PARAMS="" +if [ -e /etc/default/dbus ]; then + . /etc/default/dbus +fi + +test "$ENABLED" != "0" || exit 0 + +start_it_up() +{ + if [ ! -d $PIDDIR ]; then + mkdir -p $PIDDIR + chown $DAEMONUSER $PIDDIR + chgrp $DAEMONUSER $PIDDIR + fi + if [ -e $PIDFILE ]; then + PIDDIR=/proc/$(cat $PIDFILE) + if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then + echo "$DESC already started; not starting." + else + echo "Removing stale PID file $PIDFILE." + rm -f $PIDFILE + fi + fi + + if [ ! -d $UUIDDIR ]; then + mkdir -p $UUIDDIR + chown $DAEMONUSER $UUIDDIR + chgrp $DAEMONUSER $UUIDDIR + fi + + dbus-uuidgen --ensure + + echo -n "Starting $DESC: " + start-stop-daemon --start --quiet --pidfile $PIDFILE \ + --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS + echo "$NAME." + if [ -d $EVENTDIR ]; then + run-parts --arg=start $EVENTDIR + fi +} + +shut_it_down() +{ + if [ -d $EVENTDIR ]; then + # TODO: --reverse when busybox supports it + run-parts --arg=stop $EVENTDIR + fi + echo -n "Stopping $DESC: " + start-stop-daemon --stop --quiet --pidfile $PIDFILE \ + --user $DAEMONUSER + # We no longer include these arguments so that start-stop-daemon + # can do its job even given that we may have been upgraded. + # We rely on the pidfile being sanely managed + # --exec $DAEMON -- --system $PARAMS + echo "$NAME." + rm -f $PIDFILE +} + +reload_it() +{ + echo -n "Reloading $DESC config: " + dbus-send --print-reply --system --type=method_call \ + --dest=org.freedesktop.DBus \ + / org.freedesktop.DBus.ReloadConfig > /dev/null + # hopefully this is enough time for dbus to reload it's config file. + echo "done." +} + +case "$1" in + start) + start_it_up + ;; + stop) + shut_it_down + ;; + reload|force-reload) + reload_it + ;; + restart) + shut_it_down + sleep 1 + start_it_up + ;; + *) + echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/packages/dbus/dbus-1.1.4/fix-install-daemon.patch b/packages/dbus/dbus-1.1.4/fix-install-daemon.patch new file mode 100644 index 0000000000..c31786357d --- /dev/null +++ b/packages/dbus/dbus-1.1.4/fix-install-daemon.patch @@ -0,0 +1,13 @@ +Index: dbus-0.94/bus/Makefile.am +=================================================================== +--- dbus-0.94.orig/bus/Makefile.am 2006-10-01 17:36:18.000000000 +0200 ++++ dbus-0.94/bus/Makefile.am 2006-10-14 21:40:05.000000000 +0200 +@@ -110,7 +110,7 @@ + $(mkinstalldirs) $(DESTDIR)$(DBUS_DAEMONDIR); \ + chmod 755 $(DESTDIR)$(DBUS_DAEMONDIR); \ + fi +- $(INSTALL_PROGRAM) dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR) ++ $(INSTALL_PROGRAM) .libs/dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR) + $(mkinstalldirs) $(DESTDIR)$(localstatedir)/run/dbus + $(mkinstalldirs) $(DESTDIR)$(configdir)/system.d + $(mkinstalldirs) $(DESTDIR)$(datadir)/dbus-1/services diff --git a/packages/dbus/dbus-1.1.4/tmpdir.patch b/packages/dbus/dbus-1.1.4/tmpdir.patch new file mode 100644 index 0000000000..838b903f0a --- /dev/null +++ b/packages/dbus/dbus-1.1.4/tmpdir.patch @@ -0,0 +1,30 @@ +--- dbus-0.22/configure.in.orig 2004-08-13 00:57:16.000000000 +0200 ++++ dbus-0.22/configure.in 2004-12-30 21:15:57.000000000 +0100 +@@ -1047,15 +1048,18 @@ + AC_SUBST(ABSOLUTE_TOP_BUILDDIR) + + #### Find socket directories +-if ! test -z "$TMPDIR" ; then +- DEFAULT_SOCKET_DIR=$TMPDIR +-elif ! test -z "$TEMP" ; then +- DEFAULT_SOCKET_DIR=$TEMP +-elif ! test -z "$TMP" ; then +- DEFAULT_SOCKET_DIR=$TMP +-else +- DEFAULT_SOCKET_DIR=/tmp +-fi ++#if ! test -z "$TMPDIR" ; then ++# DEFAULT_SOCKET_DIR=$TMPDIR ++#elif ! test -z "$TEMP" ; then ++# DEFAULT_SOCKET_DIR=$TEMP ++#elif ! test -z "$TMP" ; then ++# DEFAULT_SOCKET_DIR=$TMP ++#else ++# DEFAULT_SOCKET_DIR=/tmp ++#fi ++ ++# checks disabled to avoid expanding this at build time ++DEFAULT_SOCKET_DIR=/tmp + + if ! test -z "$with_test_socket_dir" ; then + TEST_SOCKET_DIR="$with_test_socket_dir" diff --git a/packages/dbus/dbus_1.1.1.bb b/packages/dbus/dbus_1.1.1.bb deleted file mode 100644 index 07d2e5dd6c..0000000000 --- a/packages/dbus/dbus_1.1.1.bb +++ /dev/null @@ -1,63 +0,0 @@ -DEFAULT_PREFERENCE = "-1" - -SECTION = "base" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" -DESCRIPTION = "message bus system for applications to talk to one another" -LICENSE = "GPL" -DEPENDS = "expat glib-2.0 virtual/libintl" - -PR = "r4" - -SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \ - file://tmpdir.patch;patch=1 \ - file://dbus-1.init \ - file://cross.patch;patch=1 \ - file://fix-install-daemon.patch;patch=1" - -inherit autotools pkgconfig update-rc.d gettext - -INITSCRIPT_NAME = "dbus-1" -INITSCRIPT_PARAMS = "defaults" - -CONFFILES_${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf" - -FILES_${PN} = "${bindir}/dbus-daemon ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${bindir}/dbus-uuidgen ${sysconfdir} ${datadir}/dbus-1/services ${libdir}/lib*.so.*" -FILES_${PN}-dev += "${libdir}/dbus-1.0/include" - -pkg_postinst_dbus() { -#!/bin/sh - -# can't do adduser stuff offline -if [ "x$D" != "x" ]; then - exit 1 -fi - -MESSAGEUSER=messagebus -MESSAGEHOME=/var/run/dbus - -mkdir -p $MESSAGEHOME || true -chgrp "$MESSAGEUSER" "$MESSAGEHOME" 2>/dev/null || addgroup "$MESSAGEUSER" -chown "$MESSAGEUSER"."$MESSAGEUSER" "$MESSAGEHOME" 2>/dev/null || adduser --system --home "$MESSAGEHOME" --no-create-home --disabled-password --ingroup "$MESSAGEUSER" "$MESSAGEUSER" -} - -EXTRA_OECONF = " --disable-tests --disable-checks --disable-xml-docs \ - --disable-doxygen-docs --with-xml=expat --without-x" - -do_stage () { - oe_libinstall -so -C dbus libdbus-1 ${STAGING_LIBDIR} - - autotools_stage_includes - - mkdir -p ${STAGING_LIBDIR}/dbus-1.0/include/dbus/ - install -m 0644 dbus/dbus-arch-deps.h ${STAGING_LIBDIR}/dbus-1.0/include/dbus/ -} - -do_install_append () { - install -d ${D}${sysconfdir}/init.d - install -m 0755 ${WORKDIR}/dbus-1.init ${D}${sysconfdir}/init.d/dbus-1 -} - -python populate_packages_prepend () { - if (bb.data.getVar('DEBIAN_NAMES', d, 1)): - bb.data.setVar('PKG_dbus', 'dbus-1', d) -} diff --git a/packages/dbus/dbus_1.1.4.bb b/packages/dbus/dbus_1.1.4.bb new file mode 100644 index 0000000000..85885beb8f --- /dev/null +++ b/packages/dbus/dbus_1.1.4.bb @@ -0,0 +1,10 @@ +include dbus.inc + +PR = "r0" + +SRC_URI += "file://fix-install-daemon.patch;patch=1" + +python populate_packages_prepend () { + if (bb.data.getVar('DEBIAN_NAMES', d, 1)): + bb.data.setVar('PKG_dbus', 'dbus-1', d) +} -- cgit v1.2.3 From 37630086504c668adf55b3709f6e9b908cb07884 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 28 Jan 2008 14:50:26 +0000 Subject: Add qemu 0.9.1 from poky and make it the deafult since it fixed a ton of bugs --- packages/qemu/qemu-0.9.1/.mtn2git_empty | 0 packages/qemu/qemu-native_0.9.1.bb | 2 ++ packages/qemu/qemu_0.9.1.bb | 56 +++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 packages/qemu/qemu-0.9.1/.mtn2git_empty create mode 100644 packages/qemu/qemu-native_0.9.1.bb create mode 100644 packages/qemu/qemu_0.9.1.bb diff --git a/packages/qemu/qemu-0.9.1/.mtn2git_empty b/packages/qemu/qemu-0.9.1/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/qemu/qemu-native_0.9.1.bb b/packages/qemu/qemu-native_0.9.1.bb new file mode 100644 index 0000000000..16984a3f6a --- /dev/null +++ b/packages/qemu/qemu-native_0.9.1.bb @@ -0,0 +1,2 @@ +require qemu_${PV}.bb +require qemu-native.inc diff --git a/packages/qemu/qemu_0.9.1.bb b/packages/qemu/qemu_0.9.1.bb new file mode 100644 index 0000000000..41194ff73f --- /dev/null +++ b/packages/qemu/qemu_0.9.1.bb @@ -0,0 +1,56 @@ +LICENSE = "GPL" +DEPENDS = "zlib" +PR = "r4" + +FILESPATH = "${FILE_DIRNAME}/qemu-${PV}:${FILE_DIRNAME}/files" +FILESDIR = "${WORKDIR}" + +SRC_URI = "\ + http://fabrice.bellard.free.fr/qemu/qemu-0.9.1.tar.gz \ + file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \ + file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \ + file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \ + file://06_exit_segfault.patch;patch=1;pnum=0 \ + file://10_signal_jobs.patch;patch=1;pnum=0 \ + file://11_signal_sigaction.patch;patch=1;pnum=0 \ + file://22_net_tuntap_stall.patch;patch=1;pnum=0 \ + file://31_syscalls.patch;patch=1;pnum=0 \ + file://32_syscall_sysctl.patch;patch=1;pnum=0 \ + file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \ + file://39_syscall_fadvise64.patch;patch=1;pnum=0 \ + file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \ + file://52_ne2000_return.patch;patch=1;pnum=1 \ + file://61_safe_64bit_int.patch;patch=1;pnum=0 \ + file://63_sparc_build.patch;patch=1;pnum=0 \ + file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \ + file://65_kfreebsd.patch;patch=1;pnum=0 \ + file://66_tls_ld.patch;patch=1;pnum=0 \ + file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \ + file://qemu-0.9.0-nptl.patch;patch=1 \ + file://qemu-0.9.0-nptl-update.patch;patch=1 \ + file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \ + file://workaround_bad_futex_headers.patch;patch=1 \ + file://fix_segfault.patch;patch=1 \ + file://configure_symlinkpath_fix.patch;patch=1 \ + file://disable-error-in-configure.patch;patch=1" + +# svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \ +# file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \ +# file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \ +# file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \ +# file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \ +# file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \ +# file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \ +# file://debian/patches/96-x.patch;patch=1" + +S = "${WORKDIR}/qemu-${PV}" + +#EXTRA_OECONF += "--disable-sdl" +#EXTRA_OECONF += "--target-list=arm-linux-user,arm-softmmu" +EXTRA_OECONF += "--disable-gfx-check" + +inherit autotools + +do_configure() { + oe_runconf +} -- cgit v1.2.3 From 164e5360d809af7b7023de88df75b773afa924ce Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Mon, 28 Jan 2008 14:54:35 +0000 Subject: chinook-compat.conf : a distro to make packages for n8x0 machines without reflashing them. From Robert Schuster. --- conf/distro/chinook-compat.conf | 166 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 conf/distro/chinook-compat.conf diff --git a/conf/distro/chinook-compat.conf b/conf/distro/chinook-compat.conf new file mode 100644 index 0000000000..05dc674c13 --- /dev/null +++ b/conf/distro/chinook-compat.conf @@ -0,0 +1,166 @@ +#@-------------------------------------------------------------------- +#@TYPE: Distribution +#@NAME: Chinook-compatible +#@-------------------------------------------------------------------- + +DISTRO = "chinook-compat" +DISTRO_NAME = "Chinook-compat" +DISTRO_VERSION = "test-${DATE}" +DISTRO_TYPE = "debug" +#DISTRO_TYPE = "release" + +require conf/distro/include/angstrom-glibc.inc +FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -O1" + +INHERIT += "package_deb debian" +TARGET_OS = "linux-gnueabi" + +TARGET_FPU_nokia770 = "soft" +TARGET_FPU_nokia800 = "hard" + +DPKG_ARCH_nokia770 = "armel" +DPKG_ARCH_nokia800 = "armel" + +FEED_ARCH_nokia770 = "armv5te" + +# Actually n800 is armv6 but we are using armv5te because qemu does not emulate +# armv6 yet. +FEED_ARCH_nokia800 = "armv5te" +#FEED_ARCH_nokia800 = "armv6" + +#Make sure we use 2.6 on machines with a 2.4/2.6 selector +KERNEL = "kernel26" +MACHINE_KERNEL_VERSION = "2.6" + +PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial" +PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross" +PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross" + +PREFERRED_PROVIDER_virtual/libc = "glibc" + +# NPTL stuff +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc-intermediate" +PREFERRED_PROVIDER_virtual/arm-linux-gnueabi-libc-for-gcc = "glibc-intermediate" + +PREFERRED_PROVIDER_virtual/arm-linux-gnueabi-binutils = "binutils-cross" +PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-header" + +PREFERRED_VERSION_automake-native = "1.9.6" + +PREFERRED_VERSION_binutils = "2.17.50.0.12" +PREFERRED_VERSION_binutils-cross = "2.18" + +PREFERRED_VERSION_gcc = "3.4.4+csl-arm-2005q3" +PREFERRED_VERSION_gcc-cross = "3.4.4+csl-arm-2005q3" +PREFERRED_VERSION_gcc-cross-initial = "3.4.4+csl-arm-2005q3" + +# Use recent enough version of the headers to let HAL build successfully. +PREFERRED_VERSION_linux-libc-headers = "2.6.20" + +PREFERRED_VERSION_glibc = "2.5" +PREFERRED_VERSION_glibc-intermediate = "2.5" +PREFERRED_VERSION_glibc-initial = "2.5" + +PREFERRED_VERSION_libtool = "1.5.6" + +require conf/distro/include/sane-srcrevs.inc + +PREFERRED_VERSION_fontconfig = "2.4.1" +PREFERRED_VERSION_freetype = "2.2.1" +PREFERRED_VERSION_freetype-native = "2.2.1" +PREFERRED_VERSION_cairo = "1.4.10" +PREFERRED_VERSION_glib-2.0 = "2.12.12" +PREFERRED_VERSION_pango = "1.16.4" +PREFERRED_VERSION_atk = "1.18.0" +PREFERRED_VERSION_gtk+ = "2.10.14" + +PREFERRED_VERSION_gnome-vfs = "2.16" +# 3.9.1 would be correct +PREFERRED_VERSION_gtkhtml-3.8 = "3.8.2" +# 2.6.27 would be correct +PREFERRED_VERSION_libxml = "2.6.29" +# 2.16 would be correct +PREFERRED_VERSION_gconf = "2.6.1" + +# gstreamer +# 0.10.13 would be correct (+ maemo patches) +PREFERRED_VERSION_gstreamer = "0.10.14" +PREFERRED_VERSION_gst-plugins-good = "0.10.6" +# 0.10.13 would be correct (+ maemo patches) +PREFERRED_VERSION_gst-plugins-base = "0.10.14" +# 0.11.3 would be correct ( + maemo patches) +PREFERRED_VERSION_gst-ffmpeg = "0.10.2" + +PREFERRED_PROVIDER_virtual/db = "db" +PREFERRED_PROVIDER_virtual/db-native = "db-native" +PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive" + +# This is a hack to avoid building mesa which crashes the compiler +PREFERRED_PROVIDER_virtual/libsdl = "libsdl-directfb" + +PREFERRED_PROVIDER_xserver = "xserver-kdrive" + +PREFERRED_VERSION_xserver-kdrive = "1.3.0.0" +PREFERRED_VERSION_libxrandr = "1.2.1" +PREFERRED_VERSION_xrandr = "1.2.0" +PREFERRED_VERSION_randrproto = "1.2.1" + +PREFERRED_VERSION_libgnomeui = "2.18.1" + +PREFERRED_PROVIDER_gtk+ = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-ani = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-gif = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-ico = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-png = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-ras = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-tga = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm = "gtk+" +PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm = "gtk+" + +PREFERRED_PROVIDER_gconf = "gconf" + +PREFERRED_VERSION_pixman = "0.9.6" + +PREFERRED_PROVIDER_virtual/libqte2 = "qte-mt" +PREFERRED_PROVIDER_avahi = "avahi" + +# Prevent chosing jikes-native (until java bootstrap patch is merged). +PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native" + +PREFERRED_PROVIDER_swt3.4-gtk = "swt3.4-gtk-hildon" + +PREFERRED_VERSION_libsoup = "2.2.7" +PREFERRED_VERSION_libglade = "2.4.2" +PREFERRED_VERSION_gnutls = "1.4.5" +PREFERRED_VERSION_libgpg-error = "1.0" +PREFERRED_VERSION_libgcrypt = "1.2.3" + +PREFERRED_VERSION_gpe-scap = "1.3" + +# Does not compile with the CodeSourcery compiler .. :( +PREFERRED_VERSION_kaffe = "1.1.8+cvs20080120" +PREFERRED_VERSION_kaffeh-native = "1.1.8+cvs20080120" + +# WARNING: If you change these values after the respective package has +# been built the change will have no effect. Edit the package's file in +# ${STAGING}/pkgdata/runtime then. +PKG_ncurses = "libncurses5" +PKG_ncurses-tools = "ncurses-bin" +PKG_ncurses-terminfo = "ncurses-base" + +PKG_gtk+ = "libgtk2.0-0" +PKG_pango = "libpango1.0-0" +PKG_atk = "libatk1.0-0" +PKG_glib-2.0 = "libglib2.0-0" +PKG_gconf = "libgconf2-6" +DEBIANNAME_dbus_pn-dbus = "dbus" +PKG_hildon-1 = "libhildon1" + +PKG_zlib = "zlib1g" +PKG_libglade = "libglade2-0" +PKG_libsoup = "libsoup2.2-8" -- cgit v1.2.3 From 560857434263e6ecc93efbc6835b53377f850ea9 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 28 Jan 2008 14:55:32 +0000 Subject: clean up dbus directory, remove unused patches, make better use of .inc file --- packages/dbus/dbus-1.0.1/.mtn2git_empty | 0 packages/dbus/dbus-1.0.1/cross.patch | 10 - packages/dbus/dbus-1.0.1/dbus-1.init | 96 ----- packages/dbus/dbus-1.0.1/dbus-exploit-fix.patch | 21 -- packages/dbus/dbus-1.0.1/fix-install-daemon.patch | 13 - packages/dbus/dbus-1.0.2/tmpdir.patch | 30 ++ packages/dbus/dbus-glib-native/.mtn2git_empty | 0 .../run-with-tmp-session-bus.patch | 32 -- packages/dbus/dbus-native_1.0.1.bb | 31 -- packages/dbus/dbus-native_1.0.2.bb | 28 ++ packages/dbus/dbus-native_1.1.1.bb | 31 -- packages/dbus/dbus-native_1.1.4.bb | 25 ++ packages/dbus/dbus.inc | 21 +- packages/dbus/dbus/.mtn2git_empty | 0 packages/dbus/dbus/0.23.1.diff | 308 ---------------- packages/dbus/dbus/config.diff | 17 - packages/dbus/dbus/cross.patch | 15 - packages/dbus/dbus/dbus-1.init | 86 ----- packages/dbus/dbus/dbus-monitor.patch | 150 -------- .../dbus/dbus/dbus-quiesce-startup-errors.patch | 23 -- packages/dbus/dbus/dbussend.patch | 399 --------------------- packages/dbus/dbus/gettext.patch | 164 --------- packages/dbus/dbus/no-bindings.patch | 12 - packages/dbus/dbus/no-examples.patch | 8 - packages/dbus/dbus/no-introspect.patch | 19 - packages/dbus/dbus/no-static.patch | 22 -- packages/dbus/dbus/spawn-priority.diff | 17 - packages/dbus/dbus/tmpdir.patch | 30 -- packages/dbus/dbus/tools.diff | 12 - packages/dbus/dbus_1.0.1.bb | 5 - packages/dbus/dbus_1.0.2.bb | 8 - packages/dbus/dbus_1.1.4.bb | 7 - 32 files changed, 94 insertions(+), 1546 deletions(-) delete mode 100644 packages/dbus/dbus-1.0.1/.mtn2git_empty delete mode 100644 packages/dbus/dbus-1.0.1/cross.patch delete mode 100644 packages/dbus/dbus-1.0.1/dbus-1.init delete mode 100644 packages/dbus/dbus-1.0.1/dbus-exploit-fix.patch delete mode 100644 packages/dbus/dbus-1.0.1/fix-install-daemon.patch create mode 100644 packages/dbus/dbus-1.0.2/tmpdir.patch delete mode 100644 packages/dbus/dbus-glib-native/.mtn2git_empty delete mode 100644 packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch delete mode 100644 packages/dbus/dbus-native_1.0.1.bb create mode 100644 packages/dbus/dbus-native_1.0.2.bb delete mode 100644 packages/dbus/dbus-native_1.1.1.bb create mode 100644 packages/dbus/dbus-native_1.1.4.bb delete mode 100644 packages/dbus/dbus/.mtn2git_empty delete mode 100644 packages/dbus/dbus/0.23.1.diff delete mode 100644 packages/dbus/dbus/config.diff delete mode 100644 packages/dbus/dbus/cross.patch delete mode 100644 packages/dbus/dbus/dbus-1.init delete mode 100644 packages/dbus/dbus/dbus-monitor.patch delete mode 100644 packages/dbus/dbus/dbus-quiesce-startup-errors.patch delete mode 100644 packages/dbus/dbus/dbussend.patch delete mode 100644 packages/dbus/dbus/gettext.patch delete mode 100644 packages/dbus/dbus/no-bindings.patch delete mode 100644 packages/dbus/dbus/no-examples.patch delete mode 100644 packages/dbus/dbus/no-introspect.patch delete mode 100644 packages/dbus/dbus/no-static.patch delete mode 100644 packages/dbus/dbus/spawn-priority.diff delete mode 100644 packages/dbus/dbus/tmpdir.patch delete mode 100644 packages/dbus/dbus/tools.diff delete mode 100644 packages/dbus/dbus_1.0.1.bb diff --git a/packages/dbus/dbus-1.0.1/.mtn2git_empty b/packages/dbus/dbus-1.0.1/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/dbus/dbus-1.0.1/cross.patch b/packages/dbus/dbus-1.0.1/cross.patch deleted file mode 100644 index 268a3ae3de..0000000000 --- a/packages/dbus/dbus-1.0.1/cross.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- /tmp/configure.in 2006-11-09 21:47:10.000000000 +0100 -+++ dbus-0.95/configure.in 2006-11-09 21:48:13.108554000 +0100 -@@ -719,6 +719,7 @@ - exit (0); - ]])], - [ac_cv_have_abstract_sockets=yes], -+ [ac_cv_have_abstract_sockets=no], - [ac_cv_have_abstract_sockets=no] - )]) - AC_LANG_POP(C) diff --git a/packages/dbus/dbus-1.0.1/dbus-1.init b/packages/dbus/dbus-1.0.1/dbus-1.init deleted file mode 100644 index 38e7574ad5..0000000000 --- a/packages/dbus/dbus-1.0.1/dbus-1.init +++ /dev/null @@ -1,96 +0,0 @@ -#! /bin/sh -# -*- coding: utf-8 -*- -# Debian init.d script for D-BUS -# Copyright © 2003 Colin Walters - -set -e - -DAEMON=/usr/bin/dbus-daemon -NAME=dbus -DAEMONUSER=messagebus -PIDDIR=/var/run/dbus -PIDFILE=$PIDDIR/pid -UUIDDIR=/var/lib/dbus -DESC="system message bus" -EVENTDIR=/etc/dbus-1/event.d - -test -x $DAEMON || exit 0 - -# Source defaults file; edit that file to configure this script. -ENABLED=1 -PARAMS="" -if [ -e /etc/default/dbus ]; then - . /etc/default/dbus -fi - -test "$ENABLED" != "0" || exit 0 - -start_it_up() -{ - if [ ! -d $PIDDIR ]; then - mkdir -p $PIDDIR - chown $DAEMONUSER $PIDDIR - chgrp $DAEMONUSER $PIDDIR - fi - if [ -e $PIDFILE ]; then - PIDDIR=/proc/$(cat $PIDFILE) - if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then - echo "$DESC already started; not starting." - else - echo "Removing stale PID file $PIDFILE." - rm -f $PIDFILE - fi - fi - - if [ ! -d $UUIDDIR ]; then - mkdir -p $UUIDDIR - chown $DAEMONUSER $UUIDDIR - chgrp $DAEMONUSER $UUIDDIR - fi - - dbus-uuidgen --ensure - - echo -n "Starting $DESC: " - start-stop-daemon --start --quiet --pidfile $PIDFILE \ - --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS - echo "$NAME." - if [ -d $EVENTDIR ]; then - run-parts --arg=start $EVENTDIR - fi -} - -shut_it_down() -{ - if [ -d $EVENTDIR ]; then - run-parts --reverse --arg=stop $EVENTDIR - fi - echo -n "Stopping $DESC: " - start-stop-daemon --stop --quiet --pidfile $PIDFILE \ - --user $DAEMONUSER - # We no longer include these arguments so that start-stop-daemon - # can do its job even given that we may have been upgraded. - # We rely on the pidfile being sanely managed - # --exec $DAEMON -- --system $PARAMS - echo "$NAME." - rm -f $PIDFILE -} - -case "$1" in - start) - start_it_up - ;; - stop) - shut_it_down - ;; - restart|force-reload) - shut_it_down - sleep 1 - start_it_up - ;; - *) - echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/packages/dbus/dbus-1.0.1/dbus-exploit-fix.patch b/packages/dbus/dbus-1.0.1/dbus-exploit-fix.patch deleted file mode 100644 index 7d36dbdf22..0000000000 --- a/packages/dbus/dbus-1.0.1/dbus-exploit-fix.patch +++ /dev/null @@ -1,21 +0,0 @@ -https://bugs.freedesktop.org/show_bug.cgi?id=9142 - -[..] the use case was the following. There -are three processes A, B, and C. All of them add the same match (same value). A -is started first, then B, and lastly C. Now, B and C are closed: if B is closed -before C, A's match is removed; but if C is closed before B, A's match is not -removed (no buggy behaviour). (B and C call dbus_bus_remove_match on exit.) - -diff -pur 0.61-osso23/bus/signals.c 0.61-osso23.new/bus/signals.c ---- 0.61-osso23/bus/signals.c 2006-11-23 16:46:52.589602192 +0200 -+++ 0.61-osso23.new/bus/signals.c 2006-11-23 16:49:28.873843376 +0200 -@@ -1067,6 +1067,9 @@ match_rule_equal (BusMatchRule *a, - if (a->flags != b->flags) - return FALSE; - -+ if (a->matches_go_to != b->matches_go_to) -+ return FALSE; -+ - if ((a->flags & BUS_MATCH_MESSAGE_TYPE) && - a->message_type != b->message_type) - return FALSE; diff --git a/packages/dbus/dbus-1.0.1/fix-install-daemon.patch b/packages/dbus/dbus-1.0.1/fix-install-daemon.patch deleted file mode 100644 index c31786357d..0000000000 --- a/packages/dbus/dbus-1.0.1/fix-install-daemon.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: dbus-0.94/bus/Makefile.am -=================================================================== ---- dbus-0.94.orig/bus/Makefile.am 2006-10-01 17:36:18.000000000 +0200 -+++ dbus-0.94/bus/Makefile.am 2006-10-14 21:40:05.000000000 +0200 -@@ -110,7 +110,7 @@ - $(mkinstalldirs) $(DESTDIR)$(DBUS_DAEMONDIR); \ - chmod 755 $(DESTDIR)$(DBUS_DAEMONDIR); \ - fi -- $(INSTALL_PROGRAM) dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR) -+ $(INSTALL_PROGRAM) .libs/dbus-daemon $(DESTDIR)$(DBUS_DAEMONDIR) - $(mkinstalldirs) $(DESTDIR)$(localstatedir)/run/dbus - $(mkinstalldirs) $(DESTDIR)$(configdir)/system.d - $(mkinstalldirs) $(DESTDIR)$(datadir)/dbus-1/services diff --git a/packages/dbus/dbus-1.0.2/tmpdir.patch b/packages/dbus/dbus-1.0.2/tmpdir.patch new file mode 100644 index 0000000000..838b903f0a --- /dev/null +++ b/packages/dbus/dbus-1.0.2/tmpdir.patch @@ -0,0 +1,30 @@ +--- dbus-0.22/configure.in.orig 2004-08-13 00:57:16.000000000 +0200 ++++ dbus-0.22/configure.in 2004-12-30 21:15:57.000000000 +0100 +@@ -1047,15 +1048,18 @@ + AC_SUBST(ABSOLUTE_TOP_BUILDDIR) + + #### Find socket directories +-if ! test -z "$TMPDIR" ; then +- DEFAULT_SOCKET_DIR=$TMPDIR +-elif ! test -z "$TEMP" ; then +- DEFAULT_SOCKET_DIR=$TEMP +-elif ! test -z "$TMP" ; then +- DEFAULT_SOCKET_DIR=$TMP +-else +- DEFAULT_SOCKET_DIR=/tmp +-fi ++#if ! test -z "$TMPDIR" ; then ++# DEFAULT_SOCKET_DIR=$TMPDIR ++#elif ! test -z "$TEMP" ; then ++# DEFAULT_SOCKET_DIR=$TEMP ++#elif ! test -z "$TMP" ; then ++# DEFAULT_SOCKET_DIR=$TMP ++#else ++# DEFAULT_SOCKET_DIR=/tmp ++#fi ++ ++# checks disabled to avoid expanding this at build time ++DEFAULT_SOCKET_DIR=/tmp + + if ! test -z "$with_test_socket_dir" ; then + TEST_SOCKET_DIR="$with_test_socket_dir" diff --git a/packages/dbus/dbus-glib-native/.mtn2git_empty b/packages/dbus/dbus-glib-native/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch b/packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch deleted file mode 100644 index 186abdb56b..0000000000 --- a/packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- dbus-glib-0.71/tools/Makefile.am.orig 2006-08-27 12:54:34.351198198 +0200 -+++ dbus-glib-0.71/tools/Makefile.am 2006-08-27 12:55:12.533584373 +0200 -@@ -9,7 +9,7 @@ - BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml - - dbus-bus-introspect.xml: -- DBUS_TOP_BUILDDIR=$(top_builddir) dbus-send --system --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml -+ DBUS_TOP_BUILDDIR=$(top_builddir) ./run-with-tmp-session-bus.sh dbus-send --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml - - EXTRA_DIST = run-with-tmp-session-bus.sh - ---- dbus-glib-0.71/tools/run-with-tmp-session-bus.sh.orig 2006-08-27 11:52:17.497666746 +0200 -+++ dbus-glib-0.71/tools/run-with-tmp-session-bus.sh 2006-08-27 12:53:22.626715838 +0200 -@@ -27,16 +27,15 @@ - echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2 - - ## create a configuration file based on the standard session.conf --cat $DBUS_TOP_BUILDDIR/tools/session.conf | \ -+cat $datadir/dbus/session.conf | \ - sed -e 's/.*$/'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \ - sed -e 's/ $CONFIG_FILE - - echo "Created configuration file $CONFIG_FILE" >&2 - --export PATH=$DBUS_TOP_BUILDDIR/bus:$PATH - ## the libtool script found by the path search should already do this, but --export LD_LIBRARY_PATH=$DBUS_TOP_BUILDDIR/dbus/.libs:$LD_LIBRARY_PATH -+export LD_LIBRARY_PATH=$libdir:$LD_LIBRARY_PATH - - unset DBUS_SESSION_BUS_ADDRESS - unset DBUS_SESSION_BUS_PID diff --git a/packages/dbus/dbus-native_1.0.1.bb b/packages/dbus/dbus-native_1.0.1.bb deleted file mode 100644 index 1ad5cf246a..0000000000 --- a/packages/dbus/dbus-native_1.0.1.bb +++ /dev/null @@ -1,31 +0,0 @@ -DESCRIPTION = "Message bus system for applications to talk to one another" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" -LICENSE = "GPL" -SECTION = "base" - -PR = "r0" - -DEPENDS = "glib-2.0-native libxml2-native expat-native" - - -FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-1.0.1" -SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \ - file://cross.patch;patch=1 \ - " - -inherit autotools pkgconfig gettext native - -S = "${WORKDIR}/dbus-${PV}" - -EXTRA_OECONF = "--disable-qt --disable-qt3 --disable-gtk --disable-tests \ - --disable-checks --disable-xml-docs --disable-doxygen-docs \ - --with-xml=expat --without-x" - -do_stage () { - oe_runmake install - autotools_stage_all - - # for dbus-glib-native introspection generation - install -d ${STAGING_DATADIR}/dbus - install -m 0644 bus/session.conf ${STAGING_DATADIR}/dbus/session.conf -} diff --git a/packages/dbus/dbus-native_1.0.2.bb b/packages/dbus/dbus-native_1.0.2.bb new file mode 100644 index 0000000000..ebd57b2876 --- /dev/null +++ b/packages/dbus/dbus-native_1.0.2.bb @@ -0,0 +1,28 @@ +require dbus.inc +DEFAULT_PREFERENCE = "1" + +inherit native + +DEPENDS = "glib-2.0-native libxml2-native expat-native" +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-${PV}" + +SRC_URI = "\ + http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \ + file://cross.patch;patch=1 \ + file://tmpdir.patch;patch=1 \ + file://dbus-1.init \ +" + +do_stage() { + oe_runmake install + autotools_stage_all + + # for dbus-glib-native introspection generation + install -d ${STAGING_DATADIR}/dbus + install -m 0644 bus/session.conf ${STAGING_DATADIR}/dbus/session.conf +} + +do_install() { + : +} + diff --git a/packages/dbus/dbus-native_1.1.1.bb b/packages/dbus/dbus-native_1.1.1.bb deleted file mode 100644 index 72e2190f78..0000000000 --- a/packages/dbus/dbus-native_1.1.1.bb +++ /dev/null @@ -1,31 +0,0 @@ -DESCRIPTION = "message bus system for applications to talk to one another" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" -LICENSE = "GPL" -SECTION = "base" - -PR = "r0" - -DEPENDS = "glib-2.0-native libxml2-native expat-native" - -DEFAULT_PREFERENCE = "-1" - -FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-1.0.2" -SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \ - file://cross.patch;patch=1 \ - " - -inherit autotools pkgconfig gettext native - -S = "${WORKDIR}/dbus-${PV}" - -EXTRA_OECONF = " --disable-tests --disable-checks --disable-xml-docs \ - --disable-doxygen-docs --with-xml=expat --without-x" - -do_stage () { - oe_runmake install - autotools_stage_all - - # for dbus-glib-native introspection generation - install -d ${STAGING_DATADIR}/dbus - install -m 0644 bus/session.conf ${STAGING_DATADIR}/dbus/session.conf -} diff --git a/packages/dbus/dbus-native_1.1.4.bb b/packages/dbus/dbus-native_1.1.4.bb new file mode 100644 index 0000000000..a006965a32 --- /dev/null +++ b/packages/dbus/dbus-native_1.1.4.bb @@ -0,0 +1,25 @@ +require dbus.inc +inherit native + +DEPENDS = "glib-2.0-native libxml2-native expat-native" +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-${PV}" + +SRC_URI = "\ + http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \ + file://cross.patch;patch=1 \ + file://tmpdir.patch;patch=1 \ + file://dbus-1.init \ +" + +do_stage() { + oe_runmake install + autotools_stage_all + + # for dbus-glib-native introspection generation + install -d ${STAGING_DATADIR}/dbus + install -m 0644 bus/session.conf ${STAGING_DATADIR}/dbus/session.conf +} + +do_install() { + : +} diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc index ecd3d18e70..09fc7e389a 100644 --- a/packages/dbus/dbus.inc +++ b/packages/dbus/dbus.inc @@ -1,16 +1,18 @@ -SECTION = "base" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" +HOMEPAGE = "http://dbus.freedesktop.org" DESCRIPTION = "Message bus system for applications to talk to one another" LICENSE = "GPL" DEPENDS = "expat glib-2.0 virtual/libintl" DEFAULT_PREFERENCE = "-1" -SRC_URI = "http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \ - file://cross.patch;patch=1 \ - file://tmpdir.patch;patch=1 \ - file://dbus-1.init \ - " +SRC_URI = "\ + http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \ + file://cross.patch;patch=1 \ + file://tmpdir.patch;patch=1 \ + file://fix-install-daemon.patch;patch=1 \ + file://dbus-1.init \ +" +S = "${WORKDIR}/dbus-${PV}" inherit autotools pkgconfig update-rc.d gettext @@ -51,7 +53,7 @@ EXTRA_OECONF = "--disable-qt --disable-qt3 --disable-gtk --disable-tests \ --with-xml=expat --without-x" -do_stage () { +do_stage() { oe_libinstall -so -C dbus libdbus-1 ${STAGING_LIBDIR} autotools_stage_includes @@ -60,8 +62,7 @@ do_stage () { install -m 0644 dbus/dbus-arch-deps.h ${STAGING_LIBDIR}/dbus-1.0/include/dbus/ } -do_install_append () { +do_install_append() { install -d ${D}${sysconfdir}/init.d install -m 0755 ${WORKDIR}/dbus-1.init ${D}${sysconfdir}/init.d/dbus-1 } - diff --git a/packages/dbus/dbus/.mtn2git_empty b/packages/dbus/dbus/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/dbus/dbus/0.23.1.diff b/packages/dbus/dbus/0.23.1.diff deleted file mode 100644 index d56e1afc9c..0000000000 --- a/packages/dbus/dbus/0.23.1.diff +++ /dev/null @@ -1,308 +0,0 @@ -diff -ur dbus-0.23/ChangeLog dbus-0.23.1/ChangeLog ---- dbus-0.23/ChangeLog 2005-01-13 00:48:43.000000000 +0200 -+++ dbus-0.23.1/ChangeLog 2005-02-11 20:25:48.000000000 +0200 -@@ -1,3 +1,33 @@ -+2005-02-11 Joe Shaw -+ -+ * NEWS: Update for 0.23.1 -+ -+ * configure.in: Release 0.23.1 -+ -+2005-02-10 Joe Shaw -+ -+ * dbus/dbus-connection.c -+ (_dbus_connection_queue_received_message_link, -+ _dbus_connection_message_sent): Add the path to -+ the verbose output. -+ (_dbus_connection_send_preallocated_and_unlock): Added. Calls -+ _dbus_connection_send_preallocated_unlocked(), updated the -+ dispatch status, and unlocks. Fixes a bug where certain -+ situations (like a broken pipe) could cause a Disconnect message -+ to not be sent, tricking the bus into thinking a service was still -+ there when the process had quit. -+ (_dbus_connection_send_preallocated): Call -+ _dbus_connection_send_preallocated_and_unlock(). -+ (_dbus_connection_send_and_unlock): Added. Calls -+ _dbus_connection_send_preallocated_and_unlock(). -+ (dbus_connection_send): Call _dbus_connection_send_and_unlock(). -+ (dbus_connection_send_with_reply): Update the dispatch status and -+ unlock. -+ -+ * mono/Service.cs (~Service): Added. Removes the filter so that -+ we don't get unmanaged code calling back into a GCed delegate. -+ (RemoveFilter); Added. -+ - 2005-01-12 Joe Shaw - - * NEWS: Update for 0.23. -diff -ur dbus-0.23/NEWS dbus-0.23.1/NEWS ---- dbus-0.23/NEWS 2005-01-13 00:20:40.000000000 +0200 -+++ dbus-0.23.1/NEWS 2005-02-11 20:25:16.000000000 +0200 -@@ -1,3 +1,11 @@ -+D-BUS 0.23.1 (11 Feb 2005) -+=== -+- fix a bug in which the bus daemon wouldn't recognize that a service -+ owner quit -+- fix a bug in the mono bindings that would cause unmanaged code to -+ call back into a delegate that had been garbage collected and -+ crashed. -+ - D-BUS 0.23 (11 Jan 2005) - === - -diff -ur dbus-0.23/configure dbus-0.23.1/configure ---- dbus-0.23/configure 2005-01-13 00:21:25.000000000 +0200 -+++ dbus-0.23.1/configure 2005-02-11 19:53:33.000000000 +0200 -@@ -1826,7 +1826,7 @@ - - # Define the identity of the package. - PACKAGE=dbus -- VERSION=0.23 -+ VERSION=0.23.1 - - - cat >>confdefs.h <<_ACEOF -diff -ur dbus-0.23/configure.in dbus-0.23.1/configure.in ---- dbus-0.23/configure.in 2005-01-13 00:20:40.000000000 +0200 -+++ dbus-0.23.1/configure.in 2005-02-11 19:53:09.000000000 +0200 -@@ -3,7 +3,7 @@ - - AC_INIT(dbus/dbus.h) - --AM_INIT_AUTOMAKE(dbus, 0.23) -+AM_INIT_AUTOMAKE(dbus, 0.23.1) - - AM_CONFIG_HEADER(config.h) - -diff -ur dbus-0.23/dbus/dbus-connection.c dbus-0.23.1/dbus/dbus-connection.c ---- dbus-0.23/dbus/dbus-connection.c 2005-01-11 21:31:56.000000000 +0200 -+++ dbus-0.23.1/dbus/dbus-connection.c 2005-02-11 19:52:47.000000000 +0200 -@@ -358,9 +358,10 @@ - - _dbus_connection_wakeup_mainloop (connection); - -- _dbus_verbose ("Message %p (%d %s %s '%s') added to incoming queue %p, %d incoming\n", -+ _dbus_verbose ("Message %p (%d %s %s %s '%s') added to incoming queue %p, %d incoming\n", - message, - dbus_message_get_type (message), -+ dbus_message_get_path (message), - dbus_message_get_interface (message) ? - dbus_message_get_interface (message) : - "no interface", -@@ -473,9 +474,10 @@ - - connection->n_outgoing -= 1; - -- _dbus_verbose ("Message %p (%d %s %s '%s') removed from outgoing queue %p, %d left to send\n", -+ _dbus_verbose ("Message %p (%d %s %s %s '%s') removed from outgoing queue %p, %d left to send\n", - message, - dbus_message_get_type (message), -+ dbus_message_get_path (message), - dbus_message_get_interface (message) ? - dbus_message_get_interface (message) : - "no interface", -@@ -1572,9 +1574,10 @@ - } - #endif - -- _dbus_verbose ("Message %p (%d %s %s '%s') added to outgoing queue %p, %d pending to send\n", -+ _dbus_verbose ("Message %p (%d %s %s %s '%s') added to outgoing queue %p, %d pending to send\n", - message, - dbus_message_get_type (message), -+ dbus_message_get_path (message), - dbus_message_get_interface (message) ? - dbus_message_get_interface (message) : - "no interface", -@@ -1606,12 +1609,30 @@ - _dbus_connection_do_iteration (connection, - DBUS_ITERATION_DO_WRITING, - -1); -- -+ - /* If stuff is still queued up, be sure we wake up the main loop */ - if (connection->n_outgoing > 0) - _dbus_connection_wakeup_mainloop (connection); - } - -+static void -+_dbus_connection_send_preallocated_and_unlock (DBusConnection *connection, -+ DBusPreallocatedSend *preallocated, -+ DBusMessage *message, -+ dbus_uint32_t *client_serial) -+{ -+ DBusDispatchStatus status; -+ -+ _dbus_connection_send_preallocated_unlocked (connection, -+ preallocated, -+ message, client_serial); -+ -+ status = _dbus_connection_get_dispatch_status_unlocked (connection); -+ -+ /* this calls out to user code */ -+ _dbus_connection_update_dispatch_status_and_unlock (connection, status); -+} -+ - /** - * Sends a message using preallocated resources. This function cannot fail. - * It works identically to dbus_connection_send() in other respects. -@@ -1642,10 +1663,9 @@ - dbus_message_get_member (message) != NULL)); - - CONNECTION_LOCK (connection); -- _dbus_connection_send_preallocated_unlocked (connection, -- preallocated, -- message, client_serial); -- CONNECTION_UNLOCK (connection); -+ _dbus_connection_send_preallocated_and_unlock (connection, -+ preallocated, -+ message, client_serial); - } - - static dbus_bool_t -@@ -1670,6 +1690,27 @@ - return TRUE; - } - -+static dbus_bool_t -+_dbus_connection_send_and_unlock (DBusConnection *connection, -+ DBusMessage *message, -+ dbus_uint32_t *client_serial) -+{ -+ DBusPreallocatedSend *preallocated; -+ -+ _dbus_assert (connection != NULL); -+ _dbus_assert (message != NULL); -+ -+ preallocated = _dbus_connection_preallocate_send_unlocked (connection); -+ if (preallocated == NULL) -+ return FALSE; -+ -+ _dbus_connection_send_preallocated_and_unlock (connection, -+ preallocated, -+ message, -+ client_serial); -+ return TRUE; -+} -+ - /** - * Adds a message to the outgoing message queue. Does not block to - * write the message to the network; that happens asynchronously. To -@@ -1698,14 +1739,9 @@ - - CONNECTION_LOCK (connection); - -- if (!_dbus_connection_send_unlocked (connection, message, client_serial)) -- { -- CONNECTION_UNLOCK (connection); -- return FALSE; -- } -- -- CONNECTION_UNLOCK (connection); -- return TRUE; -+ return _dbus_connection_send_and_unlock (connection, -+ message, -+ client_serial); - } - - static dbus_bool_t -@@ -1784,6 +1820,7 @@ - DBusMessage *reply; - DBusList *reply_link; - dbus_int32_t serial = -1; -+ DBusDispatchStatus status; - - _dbus_return_val_if_fail (connection != NULL, FALSE); - _dbus_return_val_if_fail (message != NULL, FALSE); -@@ -1845,8 +1882,11 @@ - else - dbus_pending_call_unref (pending); - -- CONNECTION_UNLOCK (connection); -- -+ status = _dbus_connection_get_dispatch_status_unlocked (connection); -+ -+ /* this calls out to user code */ -+ _dbus_connection_update_dispatch_status_and_unlock (connection, status); -+ - return TRUE; - - error: -@@ -2256,9 +2296,10 @@ - link = _dbus_list_pop_first_link (&connection->incoming_messages); - connection->n_incoming -= 1; - -- _dbus_verbose ("Message %p (%d %s %s '%s') removed from incoming queue %p, %d incoming\n", -+ _dbus_verbose ("Message %p (%d %s %s %s '%s') removed from incoming queue %p, %d incoming\n", - link->data, - dbus_message_get_type (link->data), -+ dbus_message_get_path (link->data), - dbus_message_get_interface (link->data) ? - dbus_message_get_interface (link->data) : - "no interface", -diff -ur dbus-0.23/mono/Service.cs dbus-0.23.1/mono/Service.cs ---- dbus-0.23/mono/Service.cs 2004-08-31 06:59:14.000000000 +0300 -+++ dbus-0.23.1/mono/Service.cs 2005-02-11 19:52:47.000000000 +0200 -@@ -23,6 +23,9 @@ - private static AssemblyBuilder proxyAssembly; - private ModuleBuilder module = null; - -+ // Add a match for signals. FIXME: Can we filter the service? -+ private const string MatchRule = "type='signal'"; -+ - internal Service(string name, Connection connection) - { - this.name = name; -@@ -47,6 +50,12 @@ - this.local = true; - } - -+ ~Service () -+ { -+ if (this.filterCalled != null) -+ RemoveFilter (); -+ } -+ - public static bool Exists(Connection connection, string name) - { - Error error = new Error(); -@@ -113,9 +122,17 @@ - IntPtr.Zero)) - throw new OutOfMemoryException(); - -- // Add a match for signals. FIXME: Can we filter the service? -- string rule = "type='signal'"; -- dbus_bus_add_match(connection.RawConnection, rule, IntPtr.Zero); -+ dbus_bus_add_match(connection.RawConnection, MatchRule, IntPtr.Zero); -+ } -+ -+ private void RemoveFilter() -+ { -+ dbus_connection_remove_filter (Connection.RawConnection, -+ this.filterCalled, -+ IntPtr.Zero); -+ this.filterCalled = null; -+ -+ dbus_bus_remove_match (connection.RawConnection, MatchRule, IntPtr.Zero); - } - - private int Service_FilterCalled(IntPtr rawConnection, -@@ -200,9 +217,19 @@ - IntPtr freeData); - - [DllImport("dbus-1")] -+ private extern static void dbus_connection_remove_filter(IntPtr rawConnection, -+ DBusHandleMessageFunction filter, -+ IntPtr userData); -+ -+ [DllImport("dbus-1")] - private extern static void dbus_bus_add_match(IntPtr rawConnection, - string rule, - IntPtr erro); - -+ [DllImport("dbus-1")] -+ private extern static void dbus_bus_remove_match(IntPtr rawConnection, -+ string rule, -+ IntPtr erro); -+ - } - } diff --git a/packages/dbus/dbus/config.diff b/packages/dbus/dbus/config.diff deleted file mode 100644 index b67c8d72fe..0000000000 --- a/packages/dbus/dbus/config.diff +++ /dev/null @@ -1,17 +0,0 @@ -Only in /home/kihamala/svn/dbus/bus: .svn -diff -ur bus/session.conf.in /home/kihamala/svn/dbus/bus/session.conf.in ---- bus/session.conf.in 2004-10-25 21:48:58.000000000 +0300 -+++ /home/kihamala/svn/dbus/bus/session.conf.in 2005-02-15 11:03:26.000000000 +0200 -@@ -8,9 +8,10 @@ - - session - -- unix:tmpdir=@DBUS_SESSION_SOCKET_DIR@ -+ unix:path=/tmp/session_bus_socket - -- @EXPANDED_DATADIR@/dbus-1/services -+ @EXPANDED_LIBDIR@/dbus-1.0/services -+ - - - diff --git a/packages/dbus/dbus/cross.patch b/packages/dbus/dbus/cross.patch deleted file mode 100644 index 6d1d9d8e7e..0000000000 --- a/packages/dbus/dbus/cross.patch +++ /dev/null @@ -1,15 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- dbus-0.20/configure.in~cross -+++ dbus-0.20/configure.in -@@ -466,6 +466,7 @@ - exit (0); - ]])], - [have_abstract_sockets=yes], -+ [have_abstract_sockets=no], - [have_abstract_sockets=no]) - AC_LANG_POP(C) - AC_MSG_RESULT($have_abstract_sockets) diff --git a/packages/dbus/dbus/dbus-1.init b/packages/dbus/dbus/dbus-1.init deleted file mode 100644 index adefe7c5b1..0000000000 --- a/packages/dbus/dbus/dbus-1.init +++ /dev/null @@ -1,86 +0,0 @@ -#! /bin/sh -# -*- coding: utf-8 -*- -# Debian init.d script for D-BUS -# Copyright © 2003 Colin Walters - -set -e - -DAEMON=/usr/bin/dbus-daemon-1 -NAME=dbus-1 -DAEMONUSER=messagebus -PIDDIR=/var/run/dbus -PIDFILE=$PIDDIR/pid -DESC="system message bus" -EVENTDIR=/etc/dbus-1/event.d - -test -x $DAEMON || exit 0 - -# Source defaults file; edit that file to configure this script. -ENABLED=1 -PARAMS="" -if [ -e /etc/default/dbus-1 ]; then - . /etc/default/dbus-1 -fi - -test "$ENABLED" != "0" || exit 0 - -start_it_up() -{ - if [ ! -d $PIDDIR ]; then - mkdir -p $PIDDIR - chown $DAEMONUSER $PIDDIR - chgrp $DAEMONUSER $PIDDIR - fi - if [ -e $PIDFILE ]; then - PIDDIR=/proc/$(cat $PIDFILE) - if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then - echo "$DESC already started; not starting." - else - echo "Removing stale PID file $PIDFILE." - rm -f $PIDFILE - fi - fi - echo -n "Starting $DESC: " - start-stop-daemon --start --quiet --pidfile $PIDFILE \ - --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS - echo "$NAME." - if [ -d $EVENTDIR ]; then - run-parts --arg=start $EVENTDIR - fi -} - -shut_it_down() -{ - if [ -d $EVENTDIR ]; then - run-parts --reverse --arg=stop $EVENTDIR - fi - echo -n "Stopping $DESC: " - start-stop-daemon --stop --quiet --pidfile $PIDFILE \ - --user $DAEMONUSER - # We no longer include these arguments so that start-stop-daemon - # can do its job even given that we may have been upgraded. - # We rely on the pidfile being sanely managed - # --exec $DAEMON -- --system $PARAMS - echo "$NAME." - rm -f $PIDFILE -} - -case "$1" in - start) - start_it_up - ;; - stop) - shut_it_down - ;; - restart|force-reload) - shut_it_down - sleep 1 - start_it_up - ;; - *) - echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/packages/dbus/dbus/dbus-monitor.patch b/packages/dbus/dbus/dbus-monitor.patch deleted file mode 100644 index c2f90c885b..0000000000 --- a/packages/dbus/dbus/dbus-monitor.patch +++ /dev/null @@ -1,150 +0,0 @@ -diff -urN dbus-0.22.orig/tools/dbus-monitor.1 dbus-0.22/tools/dbus-monitor.1 ---- dbus-0.22.orig/tools/dbus-monitor.1 2004-10-10 20:47:19.906823680 +1000 -+++ dbus-0.22/tools/dbus-monitor.1 2004-10-10 20:47:27.791625008 +1000 -@@ -9,6 +9,7 @@ - .PP - .B dbus-monitor - [\-\-system | \-\-session] -+[watch expressions] - - .SH DESCRIPTION - -@@ -25,6 +26,11 @@ - monitor the system or session buses respectively. If neither is - specified, \fIdbus-monitor\fP monitors the session bus. - -+.PP -+In order to get \fIdbus-monitor\fP to see the messages you are interested -+in, you should specify a set of watch expressions as you would expect to -+be passed to the \fIdbus_bus_add_watch\fP function. -+ - .PP - The message bus configuration may keep \fIdbus-monitor\fP from seeing - all messages, especially if you run the monitor as a non-root user. -@@ -37,6 +43,15 @@ - .I "--session" - Monitor the session message bus. (This is the default.) - -+.SH EXAMPLE -+Here is an example of using dbus-monitor to watch for the gnome typing -+monitor to say things -+.nf -+ -+ dbus-monitor "type='signal',sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'" -+ -+.fi -+ - .SH AUTHOR - dbus-monitor was written by Philip Blundell. - ---- dbus-0.22-1ubuntu1/tools/dbus-monitor.c 2004-08-10 13:03:37.000000000 +1000 -+++ dbus-0.22/tools/dbus-monitor.c 2004-10-10 21:38:08.532362152 +1000 -@@ -45,7 +45,7 @@ - static void - usage (char *name, int ecode) - { -- fprintf (stderr, "Usage: %s [--system | --session]\n", name); -+ fprintf (stderr, "Usage: %s [--system | --session] [watch expressions]\n", name); - exit (ecode); - } - -@@ -56,8 +56,8 @@ - DBusError error; - DBusBusType type = DBUS_BUS_SESSION; - GMainLoop *loop; -- int i; -- -+ int i = 0, j = 0, numFilters = 0; -+ char **filters = NULL; - for (i = 1; i < argc; i++) - { - char *arg = argv[i]; -@@ -69,14 +69,18 @@ - else if (!strcmp (arg, "--help")) - usage (argv[0], 0); - else if (!strcmp (arg, "--")) -- break; -+ continue; - else if (arg[0] == '-') - usage (argv[0], 1); -+ else { -+ numFilters++; -+ filters = (char **)realloc(filters, numFilters * sizeof(char *)); -+ filters[j] = (char *)malloc((strlen(arg) + 1) * sizeof(char *)); -+ snprintf(filters[j], strlen(arg) + 1, "%s", arg); -+ j++; -+ } - } - -- if (argc > 2) -- usage (argv[0], 1); -- - loop = g_main_loop_new (NULL, FALSE); - - dbus_error_init (&error); -@@ -92,26 +102,45 @@ - - dbus_connection_setup_with_g_main (connection, NULL); - -- dbus_bus_add_match (connection, -- "type='signal'", -- &error); -- if (dbus_error_is_set (&error)) -- goto lose; -- dbus_bus_add_match (connection, -- "type='method_call'", -- &error); -- if (dbus_error_is_set (&error)) -- goto lose; -- dbus_bus_add_match (connection, -- "type='method_return'", -- &error); -- if (dbus_error_is_set (&error)) -- goto lose; -- dbus_bus_add_match (connection, -- "type='error'", -- &error); -- if (dbus_error_is_set (&error)) -- goto lose; -+ if (numFilters) -+ { -+ for (i = 0; i < j; i++) -+ { -+ dbus_bus_add_match (connection, filters[i], &error); -+ if (dbus_error_is_set (&error)) -+ { -+ fprintf (stderr, "Failed to setup match \"%s\": %s\n", -+ filters[i], error.message); -+ dbus_error_free (&error); -+ exit (1); -+ } -+ free(filters[i]); -+ } -+ } -+ else -+ { -+ dbus_bus_add_match (connection, -+ "type='signal'", -+ &error); -+ if (dbus_error_is_set (&error)) -+ goto lose; -+ dbus_bus_add_match (connection, -+ "type='method_call'", -+ &error); -+ if (dbus_error_is_set (&error)) -+ goto lose; -+ dbus_bus_add_match (connection, -+ "type='method_return'", -+ &error); -+ if (dbus_error_is_set (&error)) -+ goto lose; -+ dbus_bus_add_match (connection, -+ "type='error'", -+ &error); -+ if (dbus_error_is_set (&error)) -+ goto lose; -+ } -+ - if (!dbus_connection_add_filter (connection, filter_func, NULL, NULL)) { - fprintf (stderr, "Couldn't add filter!\n"); - exit (1); diff --git a/packages/dbus/dbus/dbus-quiesce-startup-errors.patch b/packages/dbus/dbus/dbus-quiesce-startup-errors.patch deleted file mode 100644 index ba5142af2f..0000000000 --- a/packages/dbus/dbus/dbus-quiesce-startup-errors.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- dbus-0.20-virgin-patches/bus/config-parser.c 2003-10-14 21:30:21.000000000 +0100 -+++ dbus-0.20/bus/config-parser.c 2004-02-10 00:40:05.000000000 +0000 -@@ -1710,8 +1710,18 @@ - { - if (!include_file (parser, &full_path, TRUE, error)) - { -- _dbus_string_free (&full_path); -- goto failed; -+ /* Debian patch to skip malformed /etc/dbus-1/system.d entries */ -+ /* -+ * _dbus_string_free (&full_path); -+ * goto failed; -+ */ -+ if (dbus_error_is_set (error)) -+ { -+ _dbus_warn("\nEncountered error '%s' while parsing '%s'\n", -+ error->message, -+ _dbus_string_get_const_data(&full_path)); -+ dbus_error_free (error); -+ } - } - } - diff --git a/packages/dbus/dbus/dbussend.patch b/packages/dbus/dbus/dbussend.patch deleted file mode 100644 index 49a251bbb0..0000000000 --- a/packages/dbus/dbus/dbussend.patch +++ /dev/null @@ -1,399 +0,0 @@ -Index: dbus-send.1 -=================================================================== ---- tools/dbus-send.1 (revision 691) -+++ tools/dbus-send.1 (working copy) -@@ -36,8 +36,8 @@ - specified. Following arguments, if any, are the message contents - (message arguments). These are given as a type name, a colon, and - then the value of the argument. The possible type names are: string, --int32, uint32, double, byte, boolean. (D-BUS supports more types than --these, but \fIdbus-send\fP currently does not.) -+int32, uint32, double, byte, boolean, array. (D-BUS supports more types -+than these, but \fIdbus-send\fP currently does not.) - - .PP - Here is an example invocation: -@@ -46,7 +46,8 @@ - dbus-send \-\-dest='org.freedesktop.ExampleService' \\ - /org/freedesktop/sample/object/name \\ - org.freedesktop.ExampleInterface.ExampleMethod \\ -- int32:47 string:'hello world' double:65.32 -+ int32:47 string:'hello world' double:65.32 \\ -+ array:byte[0,1,2] - - .fi - -Index: dbus-print-message.c -=================================================================== ---- tools/dbus-print-message.c (revision 691) -+++ tools/dbus-print-message.c (working copy) -@@ -39,6 +39,78 @@ - } - } - -+static void -+iterate (DBusMessageIter* iter, int entry_type) -+{ -+ do -+ { -+ char *str; -+ dbus_uint32_t uint32; -+ dbus_int32_t int32; -+ double d; -+ unsigned char byte; -+ dbus_bool_t boolean; -+ int type = dbus_message_iter_get_arg_type (iter); -+ -+ DBusMessageIter array_iter; -+ int array_type = DBUS_TYPE_INVALID; -+ -+ if (type == DBUS_TYPE_INVALID) -+ { -+ if (entry_type == DBUS_TYPE_INVALID) -+ break; -+ else -+ type == entry_type; -+ } -+ -+ switch (type) -+ { -+ case DBUS_TYPE_STRING: -+ str = dbus_message_iter_get_string (iter); -+ printf ("string:%s\n", str); -+ break; -+ -+ case DBUS_TYPE_INT32: -+ int32 = dbus_message_iter_get_int32 (iter); -+ printf ("int32:%d\n", int32); -+ break; -+ -+ case DBUS_TYPE_UINT32: -+ uint32 = dbus_message_iter_get_uint32 (iter); -+ printf ("int32:%u\n", uint32); -+ break; -+ -+ case DBUS_TYPE_DOUBLE: -+ d = dbus_message_iter_get_double (iter); -+ printf ("double:%f\n", d); -+ break; -+ -+ case DBUS_TYPE_BYTE: -+ byte = dbus_message_iter_get_byte (iter); -+ printf ("byte:%d\n", byte); -+ break; -+ -+ case DBUS_TYPE_BOOLEAN: -+ boolean = dbus_message_iter_get_boolean (iter); -+ printf ("boolean:%s\n", boolean ? "true" : "false"); -+ break; -+ -+ case DBUS_TYPE_ARRAY: -+ dbus_message_iter_init_array_iterator (iter, -+ &array_iter, -+ &array_type); -+ printf ("array[\n"); -+ iterate (&array_iter, array_type); -+ printf ("]\n"); -+ break; -+ -+ default: -+ printf ("(unknown arg type %d)\n", type); -+ break; -+ } -+ } while (dbus_message_iter_next (iter)); -+} -+ - void - print_message (DBusMessage *message) - { -@@ -81,55 +153,6 @@ - - dbus_message_iter_init (message, &iter); - -- do -- { -- int type = dbus_message_iter_get_arg_type (&iter); -- char *str; -- dbus_uint32_t uint32; -- dbus_int32_t int32; -- double d; -- unsigned char byte; -- dbus_bool_t boolean; -- -- if (type == DBUS_TYPE_INVALID) -- break; -- -- switch (type) -- { -- case DBUS_TYPE_STRING: -- str = dbus_message_iter_get_string (&iter); -- printf ("string:%s\n", str); -- break; -- -- case DBUS_TYPE_INT32: -- int32 = dbus_message_iter_get_int32 (&iter); -- printf ("int32:%d\n", int32); -- break; -- -- case DBUS_TYPE_UINT32: -- uint32 = dbus_message_iter_get_uint32 (&iter); -- printf ("int32:%u\n", uint32); -- break; -- -- case DBUS_TYPE_DOUBLE: -- d = dbus_message_iter_get_double (&iter); -- printf ("double:%f\n", d); -- break; -- -- case DBUS_TYPE_BYTE: -- byte = dbus_message_iter_get_byte (&iter); -- printf ("byte:%d\n", byte); -- break; -- -- case DBUS_TYPE_BOOLEAN: -- boolean = dbus_message_iter_get_boolean (&iter); -- printf ("boolean:%s\n", boolean ? "true" : "false"); -- break; -- -- default: -- printf ("(unknown arg type %d)\n", type); -- break; -- } -- } while (dbus_message_iter_next (&iter)); -+ iterate (&iter, DBUS_TYPE_INVALID); - } - -Index: dbus-send.c -=================================================================== ---- tools/dbus-send.c (revision 691) -+++ tools/dbus-send.c (working copy) -@@ -34,6 +34,146 @@ - exit (ecode); - } - -+ -+static int -+get_type (char **argv, char *arg) -+{ -+ int type; -+ -+ if (arg[0] == 0 || !strcmp (arg, "string")) -+ type = DBUS_TYPE_STRING; -+ else if (!strcmp (arg, "int32")) -+ type = DBUS_TYPE_INT32; -+ else if (!strcmp (arg, "uint32")) -+ type = DBUS_TYPE_UINT32; -+ else if (!strcmp (arg, "double")) -+ type = DBUS_TYPE_DOUBLE; -+ else if (!strcmp (arg, "byte")) -+ type = DBUS_TYPE_BYTE; -+ else if (!strcmp (arg, "boolean")) -+ type = DBUS_TYPE_BOOLEAN; -+ else if (!strcmp (arg, "array")) -+ type = DBUS_TYPE_ARRAY; -+ else -+ { -+ fprintf (stderr, "%s: Unknown type \"%s\"\n", argv[0], arg); -+ exit (1); -+ } -+ -+ return type; -+} -+ -+ -+static void -+append (char **argv, char *arg, char *c, DBusMessageIter *iter) -+{ -+ int type, atype = 0; -+ dbus_uint32_t uint32; -+ dbus_int32_t int32; -+ double d; -+ unsigned char byte; -+ DBusMessageIter array_iter; -+ int end_found = 0; -+ char *next; -+ -+ /* FIXME - we are ignoring OOM returns on all these functions */ -+ -+ type = get_type(argv, arg); -+ if (type == DBUS_TYPE_ARRAY) -+ { -+ arg = c; -+ c = strchr (c, '['); -+ if (c == NULL) -+ { -+ fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg); -+ exit (1); -+ } -+ -+ if (strchr(c, ']') == NULL) -+ { -+ fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg); -+ exit (1); -+ } -+ -+ *(c++) = 0; -+ -+ atype = get_type(argv, arg); -+ } -+ -+ -+ switch (type) -+ { -+ case DBUS_TYPE_BYTE: -+ byte = strtoul (c, NULL, 0); -+ dbus_message_iter_append_byte (iter, byte); -+ break; -+ -+ case DBUS_TYPE_DOUBLE: -+ d = strtod (c, NULL); -+ dbus_message_iter_append_double (iter, d); -+ break; -+ -+ case DBUS_TYPE_INT32: -+ int32 = strtol (c, NULL, 0); -+ dbus_message_iter_append_int32 (iter, int32); -+ break; -+ -+ case DBUS_TYPE_UINT32: -+ uint32 = strtoul (c, NULL, 0); -+ dbus_message_iter_append_uint32 (iter, uint32); -+ break; -+ -+ case DBUS_TYPE_STRING: -+ dbus_message_iter_append_string (iter, c); -+ break; -+ -+ case DBUS_TYPE_BOOLEAN: -+ if (strcmp(c, "true") == 0) -+ dbus_message_iter_append_boolean (iter, TRUE); -+ else if (strcmp(c, "false") == 0) -+ dbus_message_iter_append_boolean (iter, FALSE); -+ else -+ { -+ fprintf (stderr, "%s: Expected \"true\" or \"false\" instead of \"%s\"\n", argv[0], c); -+ exit (1); -+ } -+ break; -+ -+ case DBUS_TYPE_ARRAY: -+ /* Decompose parameters and put it as array */ -+ dbus_message_iter_append_array(iter, &array_iter, atype); -+ -+ while(!end_found) -+ { -+ next = strchr(c, ','); -+ if (next == NULL) -+ { -+ next = strchr(c, ']'); -+ -+ if (next != NULL) -+ next[0] = 0; -+ else -+ break; -+ -+ end_found = 1; -+ } -+ else -+ { -+ next[0] = 0; -+ next++; -+ } -+ -+ append (argv, arg, c, &array_iter); -+ c = next; -+ } -+ break; -+ -+ default: -+ fprintf (stderr, "%s: Unsupported data type\n", argv[0]); -+ exit (1); -+ } -+} -+ - int - main (int argc, char *argv[]) - { -@@ -174,12 +314,7 @@ - { - char *arg; - char *c; -- int type; -- dbus_uint32_t uint32; -- dbus_int32_t int32; -- double d; -- unsigned char byte; -- -+ - type = DBUS_TYPE_INVALID; - arg = argv[i++]; - c = strchr (arg, ':'); -@@ -192,67 +327,7 @@ - - *(c++) = 0; - -- if (arg[0] == 0 || !strcmp (arg, "string")) -- type = DBUS_TYPE_STRING; -- else if (!strcmp (arg, "int32")) -- type = DBUS_TYPE_INT32; -- else if (!strcmp (arg, "uint32")) -- type = DBUS_TYPE_UINT32; -- else if (!strcmp (arg, "double")) -- type = DBUS_TYPE_DOUBLE; -- else if (!strcmp (arg, "byte")) -- type = DBUS_TYPE_BYTE; -- else if (!strcmp (arg, "boolean")) -- type = DBUS_TYPE_BOOLEAN; -- else -- { -- fprintf (stderr, "%s: Unknown type \"%s\"\n", argv[0], arg); -- exit (1); -- } -- -- /* FIXME - we are ignoring OOM returns on all these functions */ -- switch (type) -- { -- case DBUS_TYPE_BYTE: -- byte = strtoul (c, NULL, 0); -- dbus_message_iter_append_byte (&iter, byte); -- break; -- -- case DBUS_TYPE_DOUBLE: -- d = strtod (c, NULL); -- dbus_message_iter_append_double (&iter, d); -- break; -- -- case DBUS_TYPE_INT32: -- int32 = strtol (c, NULL, 0); -- dbus_message_iter_append_int32 (&iter, int32); -- break; -- -- case DBUS_TYPE_UINT32: -- uint32 = strtoul (c, NULL, 0); -- dbus_message_iter_append_uint32 (&iter, uint32); -- break; -- -- case DBUS_TYPE_STRING: -- dbus_message_iter_append_string (&iter, c); -- break; -- -- case DBUS_TYPE_BOOLEAN: -- if (strcmp(c, "true") == 0) -- dbus_message_iter_append_boolean (&iter, TRUE); -- else if (strcmp(c, "false") == 0) -- dbus_message_iter_append_boolean (&iter, FALSE); -- else -- { -- fprintf (stderr, "%s: Expected \"true\" or \"false\" instead of \"%s\"\n", argv[0], c); -- exit (1); -- } -- break; -- -- default: -- fprintf (stderr, "%s: Unsupported data type\n", argv[0]); -- exit (1); -- } -+ append (argv, arg, c, &iter); - } - - if (print_reply) diff --git a/packages/dbus/dbus/gettext.patch b/packages/dbus/dbus/gettext.patch deleted file mode 100644 index 7042bd0903..0000000000 --- a/packages/dbus/dbus/gettext.patch +++ /dev/null @@ -1,164 +0,0 @@ -Index: dbus-0.23/configure.in -=================================================================== ---- dbus-0.23.orig/configure.in 2005-04-02 17:14:37.780040976 -0500 -+++ dbus-0.23/configure.in 2005-04-02 17:14:38.024003888 -0500 -@@ -22,6 +22,9 @@ - AC_ISC_POSIX - AC_HEADER_STDC - -+AM_GNU_GETTEXT_VERSION(0.11.5) -+AM_GNU_GETTEXT([external], [need-ngettext]) -+ - AC_ARG_ENABLE(qt, [ --enable-qt enable Qt-friendly client library],enable_qt=$enableval,enable_qt=auto) - AC_ARG_ENABLE(glib, [ --enable-glib enable GLib-friendly client library],enable_glib=$enableval,enable_glib=auto) - AC_ARG_ENABLE(gtk, [ --enable-gtk enable GTK-requiring executables],enable_gtk=$enableval,enable_gtk=auto) -Index: dbus-0.23/glib/Makefile.am -=================================================================== ---- dbus-0.23.orig/glib/Makefile.am 2004-07-29 04:00:45.000000000 -0400 -+++ dbus-0.23/glib/Makefile.am 2005-04-02 17:22:27.302662688 -0500 -@@ -15,7 +15,7 @@ - dbus-gvalue.c \ - dbus-gvalue.h - --libdbus_glib_1_la_LIBADD= $(DBUS_GLIB_LIBS) $(top_builddir)/dbus/libdbus-1.la -+libdbus_glib_1_la_LIBADD= $(DBUS_GLIB_LIBS) $(LIBINTL) $(top_builddir)/dbus/libdbus-1.la - ## don't export symbols that start with "_" (we use this - ## convention for internal symbols) - libdbus_glib_1_la_LDFLAGS= -export-symbols-regex "^[^_].*" -Index: dbus-0.23/glib/dbus-glib-tool.c -=================================================================== ---- dbus-0.23.orig/glib/dbus-glib-tool.c 2004-08-09 23:07:00.000000000 -0400 -+++ dbus-0.23/glib/dbus-glib-tool.c 2005-04-02 17:14:38.024003888 -0500 -@@ -26,8 +26,13 @@ - #include "dbus-gparser.h" - #include "dbus-gutils.h" - #include -+ -+#ifdef HAVE_GETTEXT - #include - #define _(x) dgettext (GETTEXT_PACKAGE, x) -+#else -+#define _(x) x -+#endif - #define N_(x) x - #include - #include -Index: dbus-0.23/glib/dbus-glib.c -=================================================================== ---- dbus-0.23.orig/glib/dbus-glib.c 2004-08-09 23:07:00.000000000 -0400 -+++ dbus-0.23/glib/dbus-glib.c 2005-04-02 17:14:38.024003888 -0500 -@@ -27,8 +27,12 @@ - #include "dbus-gtest.h" - #include "dbus-gutils.h" - -+#ifdef HAVE_GETTEXT - #include - #define _(x) dgettext (GETTEXT_PACKAGE, x) -+#else -+#define _(x) x -+#endif - #define N_(x) x - - /** -Index: dbus-0.23/glib/dbus-gmain.c -=================================================================== ---- dbus-0.23.orig/glib/dbus-gmain.c 2004-11-13 02:07:47.000000000 -0500 -+++ dbus-0.23/glib/dbus-gmain.c 2005-04-02 17:14:38.025003736 -0500 -@@ -27,8 +27,12 @@ - #include "dbus-gtest.h" - #include "dbus-gutils.h" - -+#ifdef HAVE_GETTEXT - #include - #define _(x) dgettext (GETTEXT_PACKAGE, x) -+#else -+#define _(x) x -+#endif - #define N_(x) x - - /** -Index: dbus-0.23/glib/dbus-gparser.c -=================================================================== ---- dbus-0.23.orig/glib/dbus-gparser.c 2004-08-09 23:07:00.000000000 -0400 -+++ dbus-0.23/glib/dbus-gparser.c 2005-04-02 17:14:38.025003736 -0500 -@@ -20,12 +20,18 @@ - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -+ -+#include - #include "dbus-gparser.h" - #include "dbus-gidl.h" - #include - -+#ifdef HAVE_GETTEXT - #include - #define _(x) gettext ((x)) -+#else -+#define _(x) x -+#endif - #define N_(x) x - - #ifndef DOXYGEN_SHOULD_SKIP_THIS -Index: dbus-0.23/tools/Makefile.am -=================================================================== ---- dbus-0.23.orig/tools/Makefile.am 2004-04-21 17:29:07.000000000 -0400 -+++ dbus-0.23/tools/Makefile.am 2005-04-02 17:22:00.712704976 -0500 -@@ -37,8 +37,8 @@ - - dbus_send_LDADD= $(top_builddir)/dbus/libdbus-1.la - dbus_monitor_LDADD= $(top_builddir)/glib/libdbus-glib-1.la --dbus_launch_LDADD= $(DBUS_X_LIBS) --dbus_viewer_LDADD= $(DBUS_GLIB_TOOL_LIBS) $(top_builddir)/glib/libdbus-gtool.la $(DBUS_GTK_LIBS) -+dbus_launch_LDADD= $(DBUS_X_LIBS) $(LIBINTL) -+dbus_viewer_LDADD= $(DBUS_GLIB_TOOL_LIBS) $(LIBINTL) $(top_builddir)/glib/libdbus-gtool.la $(DBUS_GTK_LIBS) - - man_MANS = dbus-send.1 dbus-monitor.1 dbus-launch.1 dbus-cleanup-sockets.1 - EXTRA_DIST = $(man_MANS) -Index: dbus-0.23/tools/dbus-launch.c -=================================================================== ---- dbus-0.23.orig/tools/dbus-launch.c 2004-08-09 23:07:01.000000000 -0400 -+++ dbus-0.23/tools/dbus-launch.c 2005-04-02 17:14:38.026003584 -0500 -@@ -22,6 +22,8 @@ - */ - #include - #include -+#include -+#include - #include - #include - #include -Index: dbus-0.23/tools/dbus-tree-view.c -=================================================================== ---- dbus-0.23.orig/tools/dbus-tree-view.c 2004-08-09 23:07:01.000000000 -0400 -+++ dbus-0.23/tools/dbus-tree-view.c 2005-04-02 17:14:38.026003584 -0500 -@@ -24,8 +24,12 @@ - #include - #include "dbus-tree-view.h" - -+#ifdef HAVE_GETTEXT - #include - #define _(x) dgettext (GETTEXT_PACKAGE, x) -+#else -+#define _(x) x -+#endif - #define N_(x) x - - enum -Index: dbus-0.23/tools/dbus-viewer.c -=================================================================== ---- dbus-0.23.orig/tools/dbus-viewer.c 2004-08-09 23:07:01.000000000 -0400 -+++ dbus-0.23/tools/dbus-viewer.c 2005-04-02 17:14:38.027003432 -0500 -@@ -30,8 +30,12 @@ - #include - #include - -+#ifdef HAVE_GETTEXT - #include - #define _(x) dgettext (GETTEXT_PACKAGE, x) -+#else -+#define _(x) x -+#endif - #define N_(x) x - - typedef struct diff --git a/packages/dbus/dbus/no-bindings.patch b/packages/dbus/dbus/no-bindings.patch deleted file mode 100644 index 12ba00ff70..0000000000 --- a/packages/dbus/dbus/no-bindings.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- dbus-0.34/tools/Makefile.am.old 2005-06-27 21:48:44.000000000 +0100 -+++ dbus-0.34/tools/Makefile.am 2005-06-27 21:49:04.000000000 +0100 -@@ -6,9 +6,6 @@ - nodist_libdbus_glib_HEADERS = dbus-glib-bindings.h - libdbus_glibdir = $(includedir)/dbus-1.0/dbus - --dbus-glib-bindings.h: dbus-bus-introspect.xml $(top_builddir)/glib/dbus-binding-tool -- $(top_builddir)/glib/dbus-binding-tool --mode=glib-client --output=dbus-glib-bindings.h dbus-bus-introspect.xml -- - BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml - - else diff --git a/packages/dbus/dbus/no-examples.patch b/packages/dbus/dbus/no-examples.patch deleted file mode 100644 index 8767705cee..0000000000 --- a/packages/dbus/dbus/no-examples.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- dbus-0.36.2/glib/Makefile.am.orig 2005-09-06 17:30:26 +0200 -+++ dbus-0.36.2/glib/Makefile.am 2005-09-06 17:30:34 +0200 -@@ -1,4 +1,4 @@ --SUBDIRS = . examples -+SUBDIRS = . - - INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_GLIB_TOOL_CFLAGS) -DDBUS_COMPILATION=1 -DDBUS_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" - diff --git a/packages/dbus/dbus/no-introspect.patch b/packages/dbus/dbus/no-introspect.patch deleted file mode 100644 index d7ae8e4cad..0000000000 --- a/packages/dbus/dbus/no-introspect.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- dbus-0.34/tools/Makefile.am.old 2005-06-27 20:54:36.000000000 +0100 -+++ dbus-0.34/tools/Makefile.am 2005-06-27 20:54:43.000000000 +0100 -@@ -21,16 +21,6 @@ - GTK_TOOLS= - endif - --if HAVE_GLIB --noinst_PROGRAMS = print-introspect -- --print_introspect_SOURCES = print-introspect.c --print_introspect_LDADD = $(top_builddir)/glib/libdbus-glib-1.la -- --dbus-bus-introspect.xml: $(top_builddir)/bus/dbus-daemon dbus-launch print-introspect $(top_builddir)/bus/dbus-daemon -- DBUS_TOP_BUILDDIR=$(top_builddir) $(srcdir)/run-with-tmp-session-bus.sh ./print-introspect org.freedesktop.DBus /org/freedesktop/DBus > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml --endif -- - bin_PROGRAMS=dbus-send $(GLIB_TOOLS) dbus-launch dbus-cleanup-sockets $(GTK_TOOLS) - - dbus_send_SOURCES= \ diff --git a/packages/dbus/dbus/no-static.patch b/packages/dbus/dbus/no-static.patch deleted file mode 100644 index a28a582681..0000000000 --- a/packages/dbus/dbus/no-static.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- dbus-0.23.4/bus/Makefile.am.old 2006-02-04 11:51:26.000000000 +0000 -+++ dbus-0.23.4/bus/Makefile.am 2006-02-04 11:51:27.000000000 +0000 -@@ -63,7 +63,7 @@ - dbus_daemon_1_LDADD= \ - $(EFENCE) \ - $(DBUS_BUS_LIBS) \ -- $(top_builddir)/dbus/libdbus-convenience.la -+ $(top_builddir)/dbus/libdbus-1.la $(top_builddir)/dbus/libdbus-convenience.la - - ## note that TESTS has special meaning (stuff to use in make check) - ## so if adding tests not to be run in make check, don't add them to ---- dbus-0.23.4/dbus/Makefile.am.old 2006-02-04 13:27:03.000000000 +0000 -+++ dbus-0.23.4/dbus/Makefile.am 2006-02-04 13:27:04.000000000 +0000 -@@ -144,7 +144,7 @@ - libdbus_1_la_LIBADD= $(DBUS_CLIENT_LIBS) - ## don't export symbols that start with "_" (we use this - ## convention for internal symbols) --libdbus_1_la_LDFLAGS= -export-symbols-regex "^[^_].*" -+#libdbus_1_la_LDFLAGS= -export-symbols-regex "^[^_].*" - - ## note that TESTS has special meaning (stuff to use in make check) - ## so if adding tests not to be run in make check, don't add them to diff --git a/packages/dbus/dbus/spawn-priority.diff b/packages/dbus/dbus/spawn-priority.diff deleted file mode 100644 index 954d2512fa..0000000000 --- a/packages/dbus/dbus/spawn-priority.diff +++ /dev/null @@ -1,17 +0,0 @@ -diff -ur dbus/dbus/dbus-spawn.c dbus.work/dbus/dbus-spawn.c ---- dbus/dbus/dbus-spawn.c 2005-03-14 14:25:02.849823496 +0200 -+++ dbus.work/dbus/dbus-spawn.c 2005-03-14 14:34:43.947483224 +0200 -@@ -1117,6 +1117,12 @@ - } - else if (grandchild_pid == 0) - { -+ int p; -+ errno = 0; -+ p = getpriority(PRIO_PROCESS, 0); -+ if (!errno && p < 0) { -+ setpriority(PRIO_PROCESS, 0, 0); -+ } - do_exec (child_err_report_pipe[WRITE_END], - argv, - child_setup, user_data); -Only in dbus.work/dbus: dbus-spawn.c~ diff --git a/packages/dbus/dbus/tmpdir.patch b/packages/dbus/dbus/tmpdir.patch deleted file mode 100644 index 838b903f0a..0000000000 --- a/packages/dbus/dbus/tmpdir.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- dbus-0.22/configure.in.orig 2004-08-13 00:57:16.000000000 +0200 -+++ dbus-0.22/configure.in 2004-12-30 21:15:57.000000000 +0100 -@@ -1047,15 +1048,18 @@ - AC_SUBST(ABSOLUTE_TOP_BUILDDIR) - - #### Find socket directories --if ! test -z "$TMPDIR" ; then -- DEFAULT_SOCKET_DIR=$TMPDIR --elif ! test -z "$TEMP" ; then -- DEFAULT_SOCKET_DIR=$TEMP --elif ! test -z "$TMP" ; then -- DEFAULT_SOCKET_DIR=$TMP --else -- DEFAULT_SOCKET_DIR=/tmp --fi -+#if ! test -z "$TMPDIR" ; then -+# DEFAULT_SOCKET_DIR=$TMPDIR -+#elif ! test -z "$TEMP" ; then -+# DEFAULT_SOCKET_DIR=$TEMP -+#elif ! test -z "$TMP" ; then -+# DEFAULT_SOCKET_DIR=$TMP -+#else -+# DEFAULT_SOCKET_DIR=/tmp -+#fi -+ -+# checks disabled to avoid expanding this at build time -+DEFAULT_SOCKET_DIR=/tmp - - if ! test -z "$with_test_socket_dir" ; then - TEST_SOCKET_DIR="$with_test_socket_dir" diff --git a/packages/dbus/dbus/tools.diff b/packages/dbus/dbus/tools.diff deleted file mode 100644 index d9e8712983..0000000000 --- a/packages/dbus/dbus/tools.diff +++ /dev/null @@ -1,12 +0,0 @@ -Only in /home/kihamala/svn/dbus/tools: .svn -diff -ur tools/dbus-launch.c /home/kihamala/svn/dbus/tools/dbus-launch.c ---- tools/dbus-launch.c 2004-08-10 06:07:01.000000000 +0300 -+++ /home/kihamala/svn/dbus/tools/dbus-launch.c 2005-02-09 17:59:05.000000000 +0200 -@@ -20,6 +20,7 @@ - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -+#include - #include - #include - #include diff --git a/packages/dbus/dbus_1.0.1.bb b/packages/dbus/dbus_1.0.1.bb deleted file mode 100644 index edc4f11a48..0000000000 --- a/packages/dbus/dbus_1.0.1.bb +++ /dev/null @@ -1,5 +0,0 @@ -require dbus.inc - -SRC_URI += "file://dbus-exploit-fix.patch;patch=1" - -PR = "r5" diff --git a/packages/dbus/dbus_1.0.2.bb b/packages/dbus/dbus_1.0.2.bb index ec5052e342..e803cb7189 100644 --- a/packages/dbus/dbus_1.0.2.bb +++ b/packages/dbus/dbus_1.0.2.bb @@ -1,14 +1,6 @@ require dbus.inc - DEFAULT_PREFERENCE = "1" PR = "r9" -SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \ - file://tmpdir.patch;patch=1 \ - file://dbus-1.init \ - file://cross.patch;patch=1 \ - file://fix-install-daemon.patch;patch=1" - - diff --git a/packages/dbus/dbus_1.1.4.bb b/packages/dbus/dbus_1.1.4.bb index 85885beb8f..f331b140aa 100644 --- a/packages/dbus/dbus_1.1.4.bb +++ b/packages/dbus/dbus_1.1.4.bb @@ -1,10 +1,3 @@ include dbus.inc PR = "r0" - -SRC_URI += "file://fix-install-daemon.patch;patch=1" - -python populate_packages_prepend () { - if (bb.data.getVar('DEBIAN_NAMES', d, 1)): - bb.data.setVar('PKG_dbus', 'dbus-1', d) -} -- cgit v1.2.3 From 2341180574deb73dbdcefe6974dd62780ee15d62 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 28 Jan 2008 14:57:38 +0000 Subject: remove maemo-1.0.conf which is clearly outdated ("include familiar"...) --- conf/distro/maemo-1.0.conf | 38 -------------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 conf/distro/maemo-1.0.conf diff --git a/conf/distro/maemo-1.0.conf b/conf/distro/maemo-1.0.conf deleted file mode 100644 index b8592fdf68..0000000000 --- a/conf/distro/maemo-1.0.conf +++ /dev/null @@ -1,38 +0,0 @@ -require conf/distro/include/familiar.inc - -DISTRO = "maemo" -DISTRO_NAME = "Maemo Linux" -DISTRO_VERSION = "v1.0b-${DATE}" - -DISTRO_TYPE = "debug" -#DISTRO_TYPE = "release" - -FEED_URIS += " \ - " -#SRCDATE = 20050331 - -PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial" -PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc:gcc-cross" -PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}g++:gcc-cross" - -#PREFERRED_VERSION_binutils-cross = "2.15.91.0.2" -#PREFERRED_VERSION_gcc-cross = "3.4.4" -#PREFERRED_VERSION_gcc-cross-initial = "3.4.4 -#PREFERRED_VERSION_libtool-native = "1.5.6" -#PREFERRED_VERSION_libtool-cross= "1.5.6" - -# -# GPE -# - -PREFERRED_PROVIDERS += "virtual/xserver:xserver-kdrive" -PREFERRED_PROVIDERS += "virtual/gconf:gconf-dbus" -PREFERRED_PROVIDER_virtual/libx11 = "diet-x11" - -require conf/distro/include/preferred-gpe-versions.inc - -# -# Maemo -# - -require conf/distro/include/maemo-preferred.inc -- cgit v1.2.3 From 2a7d6f00f3b73eef0a1e83829fabc79577ec60af Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 28 Jan 2008 15:01:26 +0000 Subject: qemu: Remove versions with negative default preferences and cleanup --- packages/qemu/files/.mtn2git_empty | 0 packages/qemu/files/02_snapshot_use_tmpdir.patch | 23 - .../qemu/files/03_machines_list_no_error.patch | 18 - .../files/04_do_not_print_rtc_freq_if_ok.patch | 25 - .../files/05_non-fatal_if_linux_hd_missing.patch | 17 - packages/qemu/files/06_exit_segfault.patch | 45 - packages/qemu/files/10_signal_jobs.patch | 26 - packages/qemu/files/11_signal_sigaction.patch | 21 - .../qemu/files/12_signal_powerpc_support.patch | 401 --------- packages/qemu/files/22_net_tuntap_stall.patch | 18 - packages/qemu/files/30_syscall_ipc.patch | 34 - packages/qemu/files/31_syscalls.patch | 49 -- packages/qemu/files/32_syscall_sysctl.patch | 56 -- packages/qemu/files/33_syscall_ppc_clone.patch | 22 - packages/qemu/files/39_syscall_fadvise64.patch | 21 - packages/qemu/files/41_arm_fpa_sigfpe.patch | 105 --- packages/qemu/files/52_ne2000_return.patch | 17 - packages/qemu/files/61_safe_64bit_int.patch | 27 - packages/qemu/files/63_sparc_build.patch | 18 - packages/qemu/files/64_ppc_asm_constraints.patch | 18 - packages/qemu/files/65_kfreebsd.patch | 44 - packages/qemu/files/66_tls_ld.patch | 55 -- packages/qemu/files/91-oh-sdl-cursor.patch | 18 - packages/qemu/files/93-oh-pl110-rgb.patch | 223 ----- packages/qemu/files/arm_nptl.patch | 857 ------------------- packages/qemu/files/compiler.patch | 10 - packages/qemu/files/configure.patch | 13 - packages/qemu/files/fix_segfault.patch | 46 - packages/qemu/files/makefile.patch | 37 - packages/qemu/files/no-strip.patch | 22 - packages/qemu/files/pl110_rgb-r0.patch | 219 ----- packages/qemu/files/qemu-0.9.0-nptl-update.patch | 294 ------- packages/qemu/files/qemu-0.9.0-nptl.patch | 892 -------------------- .../qemu/files/qemu-amd64-32b-mapping-0.9.0.patch | 31 - packages/qemu/files/qemu-pci-irq-sharing.patch | 52 -- packages/qemu/files/qemu-sdl-cursor.patch | 13 - packages/qemu/files/qemu-usb-wacom-0.8.2.patch | 445 ---------- packages/qemu/files/qemu-usb-wacom-buttons.patch | 23 - packages/qemu/files/qemu-usb-wacom-pressure.patch | 28 - .../qemu/files/workaround_bad_futex_headers.patch | 25 - .../qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty | 0 .../02_snapshot_use_tmpdir.patch | 23 + .../03_machines_list_no_error.patch | 18 + .../04_do_not_print_rtc_freq_if_ok.patch | 25 + .../05_non-fatal_if_linux_hd_missing.patch | 17 + .../qemu-0.9.0+cvs20070613/06_exit_segfault.patch | 45 + .../qemu-0.9.0+cvs20070613/10_signal_jobs.patch | 26 + .../11_signal_sigaction.patch | 21 + .../12_signal_powerpc_support.patch | 401 +++++++++ .../22_net_tuntap_stall.patch | 18 + .../qemu-0.9.0+cvs20070613/30_syscall_ipc.patch | 34 + .../qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch | 49 ++ .../qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch | 56 ++ .../33_syscall_ppc_clone.patch | 22 + .../39_syscall_fadvise64.patch | 21 + .../qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch | 105 +++ .../qemu-0.9.0+cvs20070613/52_ne2000_return.patch | 17 + .../qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch | 27 + .../qemu-0.9.0+cvs20070613/63_sparc_build.patch | 18 + .../64_ppc_asm_constraints.patch | 18 + .../qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch | 44 + .../qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch | 55 ++ .../qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch | 18 + .../qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch | 223 +++++ .../qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch | 857 +++++++++++++++++++ .../qemu/qemu-0.9.0+cvs20070613/compiler.patch | 10 + .../qemu/qemu-0.9.0+cvs20070613/configure.patch | 13 + .../qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch | 46 + .../qemu/qemu-0.9.0+cvs20070613/makefile.patch | 37 + .../qemu/qemu-0.9.0+cvs20070613/no-strip.patch | 22 + .../qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch | 219 +++++ .../qemu-0.9.0-nptl-update.patch | 294 +++++++ .../qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch | 892 ++++++++++++++++++++ .../qemu-amd64-32b-mapping-0.9.0.patch | 31 + .../qemu-pci-irq-sharing.patch | 52 ++ .../qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch | 13 + .../qemu-usb-wacom-0.8.2.patch | 445 ++++++++++ .../qemu-usb-wacom-buttons.patch | 23 + .../qemu-usb-wacom-pressure.patch | 28 + .../workaround_bad_futex_headers.patch | 25 + .../qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty | 0 .../qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch | 853 ------------------- .../qemu-0.9.0+cvs20070701/configure-0.9.0.patch | 12 - .../pl110_rgb-r0-0.9.0.patch | 217 ----- .../qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch | 881 ------------------- .../qemu-amd64-32b-mapping-0.9.0.patch | 21 - .../qemu-sdl-cursor-0.9.0.patch | 12 - .../qemu/qemu-0.9.0+cvs20071121/.mtn2git_empty | 0 .../02_snapshot_use_tmpdir.patch | 23 - .../04_do_not_print_rtc_freq_if_ok.patch | 26 - .../05_non-fatal_if_linux_hd_missing.patch | 17 - .../qemu-0.9.0+cvs20071121/06_exit_segfault.patch | 45 - .../qemu-0.9.0+cvs20071121/10_signal_jobs.patch | 26 - .../11_signal_sigaction.patch | 21 - .../22_net_tuntap_stall.patch | 18 - .../qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch | 48 -- .../qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch | 55 -- .../33_syscall_ppc_clone.patch | 22 - .../39_syscall_fadvise64.patch | 21 - .../qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch | 104 --- .../qemu-0.9.0+cvs20071121/52_ne2000_return.patch | 17 - .../qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch | 27 - .../qemu-0.9.0+cvs20071121/63_sparc_build.patch | 18 - .../64_ppc_asm_constraints.patch | 18 - .../qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch | 35 - .../qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch | 55 -- .../qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch | 18 - .../disable-error-in-configure.patch | 17 - .../qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch | 37 - .../qemu/qemu-0.9.0+cvs20071121/no-strip.patch | 22 - .../qemu-0.9.0-nptl-update.patch | 219 ----- .../qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch | 929 --------------------- .../qemu-amd64-32b-mapping-0.9.0.patch | 37 - .../workaround_bad_futex_headers.patch | 25 - .../qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch | 23 + .../04_do_not_print_rtc_freq_if_ok.patch | 26 + .../05_non-fatal_if_linux_hd_missing.patch | 17 + packages/qemu/qemu-0.9.1/06_exit_segfault.patch | 45 + packages/qemu/qemu-0.9.1/10_signal_jobs.patch | 26 + packages/qemu/qemu-0.9.1/11_signal_sigaction.patch | 21 + packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch | 18 + packages/qemu/qemu-0.9.1/31_syscalls.patch | 48 ++ packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch | 55 ++ .../qemu/qemu-0.9.1/33_syscall_ppc_clone.patch | 22 + .../qemu/qemu-0.9.1/39_syscall_fadvise64.patch | 21 + packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch | 104 +++ packages/qemu/qemu-0.9.1/52_ne2000_return.patch | 17 + packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch | 27 + packages/qemu/qemu-0.9.1/63_sparc_build.patch | 18 + .../qemu/qemu-0.9.1/64_ppc_asm_constraints.patch | 18 + packages/qemu/qemu-0.9.1/65_kfreebsd.patch | 35 + packages/qemu/qemu-0.9.1/66_tls_ld.patch | 55 ++ packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch | 18 + .../qemu-0.9.1/configure_symlinkpath_fix.patch | 28 + .../qemu-0.9.1/disable-error-in-configure.patch | 17 + packages/qemu/qemu-0.9.1/fix_segfault.patch | 37 + .../qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch | 219 +++++ packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch | 929 +++++++++++++++++++++ .../qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch | 37 + packages/qemu/qemu-0.9.1/series | 25 + .../qemu-0.9.1/workaround_bad_futex_headers.patch | 25 + packages/qemu/qemu-native_0.9.0+cvs.bb | 3 - packages/qemu/qemu-native_20071121.bb | 8 - packages/qemu/qemu_0.9.0+cvs.bb | 22 - packages/qemu/qemu_20071121.bb | 60 -- 145 files changed, 6239 insertions(+), 8297 deletions(-) delete mode 100644 packages/qemu/files/.mtn2git_empty delete mode 100644 packages/qemu/files/02_snapshot_use_tmpdir.patch delete mode 100644 packages/qemu/files/03_machines_list_no_error.patch delete mode 100644 packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch delete mode 100644 packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch delete mode 100644 packages/qemu/files/06_exit_segfault.patch delete mode 100644 packages/qemu/files/10_signal_jobs.patch delete mode 100644 packages/qemu/files/11_signal_sigaction.patch delete mode 100644 packages/qemu/files/12_signal_powerpc_support.patch delete mode 100644 packages/qemu/files/22_net_tuntap_stall.patch delete mode 100644 packages/qemu/files/30_syscall_ipc.patch delete mode 100644 packages/qemu/files/31_syscalls.patch delete mode 100644 packages/qemu/files/32_syscall_sysctl.patch delete mode 100644 packages/qemu/files/33_syscall_ppc_clone.patch delete mode 100644 packages/qemu/files/39_syscall_fadvise64.patch delete mode 100644 packages/qemu/files/41_arm_fpa_sigfpe.patch delete mode 100644 packages/qemu/files/52_ne2000_return.patch delete mode 100644 packages/qemu/files/61_safe_64bit_int.patch delete mode 100644 packages/qemu/files/63_sparc_build.patch delete mode 100644 packages/qemu/files/64_ppc_asm_constraints.patch delete mode 100644 packages/qemu/files/65_kfreebsd.patch delete mode 100644 packages/qemu/files/66_tls_ld.patch delete mode 100644 packages/qemu/files/91-oh-sdl-cursor.patch delete mode 100644 packages/qemu/files/93-oh-pl110-rgb.patch delete mode 100644 packages/qemu/files/arm_nptl.patch delete mode 100644 packages/qemu/files/compiler.patch delete mode 100644 packages/qemu/files/configure.patch delete mode 100644 packages/qemu/files/fix_segfault.patch delete mode 100644 packages/qemu/files/makefile.patch delete mode 100644 packages/qemu/files/no-strip.patch delete mode 100644 packages/qemu/files/pl110_rgb-r0.patch delete mode 100644 packages/qemu/files/qemu-0.9.0-nptl-update.patch delete mode 100644 packages/qemu/files/qemu-0.9.0-nptl.patch delete mode 100644 packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch delete mode 100644 packages/qemu/files/qemu-pci-irq-sharing.patch delete mode 100644 packages/qemu/files/qemu-sdl-cursor.patch delete mode 100644 packages/qemu/files/qemu-usb-wacom-0.8.2.patch delete mode 100644 packages/qemu/files/qemu-usb-wacom-buttons.patch delete mode 100644 packages/qemu/files/qemu-usb-wacom-pressure.patch delete mode 100644 packages/qemu/files/workaround_bad_futex_headers.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/configure.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/.mtn2git_empty delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/02_snapshot_use_tmpdir.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/04_do_not_print_rtc_freq_if_ok.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/05_non-fatal_if_linux_hd_missing.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/06_exit_segfault.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/10_signal_jobs.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/11_signal_sigaction.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/22_net_tuntap_stall.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/33_syscall_ppc_clone.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/39_syscall_fadvise64.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/52_ne2000_return.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/63_sparc_build.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/64_ppc_asm_constraints.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/disable-error-in-configure.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/no-strip.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl-update.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/qemu-amd64-32b-mapping-0.9.0.patch delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/workaround_bad_futex_headers.patch create mode 100644 packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch create mode 100644 packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch create mode 100644 packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch create mode 100644 packages/qemu/qemu-0.9.1/06_exit_segfault.patch create mode 100644 packages/qemu/qemu-0.9.1/10_signal_jobs.patch create mode 100644 packages/qemu/qemu-0.9.1/11_signal_sigaction.patch create mode 100644 packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch create mode 100644 packages/qemu/qemu-0.9.1/31_syscalls.patch create mode 100644 packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch create mode 100644 packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch create mode 100644 packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch create mode 100644 packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch create mode 100644 packages/qemu/qemu-0.9.1/52_ne2000_return.patch create mode 100644 packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch create mode 100644 packages/qemu/qemu-0.9.1/63_sparc_build.patch create mode 100644 packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch create mode 100644 packages/qemu/qemu-0.9.1/65_kfreebsd.patch create mode 100644 packages/qemu/qemu-0.9.1/66_tls_ld.patch create mode 100644 packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch create mode 100644 packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch create mode 100644 packages/qemu/qemu-0.9.1/disable-error-in-configure.patch create mode 100644 packages/qemu/qemu-0.9.1/fix_segfault.patch create mode 100644 packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch create mode 100644 packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch create mode 100644 packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch create mode 100644 packages/qemu/qemu-0.9.1/series create mode 100644 packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch delete mode 100644 packages/qemu/qemu-native_0.9.0+cvs.bb delete mode 100644 packages/qemu/qemu-native_20071121.bb delete mode 100644 packages/qemu/qemu_0.9.0+cvs.bb delete mode 100644 packages/qemu/qemu_20071121.bb diff --git a/packages/qemu/files/.mtn2git_empty b/packages/qemu/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/qemu/files/02_snapshot_use_tmpdir.patch b/packages/qemu/files/02_snapshot_use_tmpdir.patch deleted file mode 100644 index bd955b6db3..0000000000 --- a/packages/qemu/files/02_snapshot_use_tmpdir.patch +++ /dev/null @@ -1,23 +0,0 @@ -#DPATCHLEVEL=0 ---- -# block.c | 6 +++++- -# 1 file changed, 5 insertions(+), 1 deletion(-) -# -Index: block.c -=================================================================== ---- block.c.orig 2007-06-13 11:51:52.000000000 +0100 -+++ block.c 2007-06-13 11:51:53.000000000 +0100 -@@ -188,8 +188,12 @@ void get_tmp_filename(char *filename, in - void get_tmp_filename(char *filename, int size) - { - int fd; -+ char *tmpdir; - /* XXX: race condition possible */ -- pstrcpy(filename, size, "/tmp/vl.XXXXXX"); -+ tmpdir = getenv("TMPDIR"); -+ if (!tmpdir) -+ tmpdir = "/tmp"; -+ snprintf(filename, size, "%s/vl.XXXXXX", tmpdir); - fd = mkstemp(filename); - close(fd); - } diff --git a/packages/qemu/files/03_machines_list_no_error.patch b/packages/qemu/files/03_machines_list_no_error.patch deleted file mode 100644 index 73f31550fe..0000000000 --- a/packages/qemu/files/03_machines_list_no_error.patch +++ /dev/null @@ -1,18 +0,0 @@ -#DPATCHLEVEL=0 ---- -# vl.c | 2 +- -# 1 file changed, 1 insertion(+), 1 deletion(-) -# -Index: vl.c -=================================================================== ---- vl.c.orig 2007-06-13 11:51:52.000000000 +0100 -+++ vl.c 2007-06-13 11:52:24.000000000 +0100 -@@ -7242,7 +7242,7 @@ int main(int argc, char **argv) - m->name, m->desc, - m == first_machine ? " (default)" : ""); - } -- exit(1); -+ exit(strcmp(optarg, "?")); - } - break; - case QEMU_OPTION_cpu: diff --git a/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch deleted file mode 100644 index 1575cbce63..0000000000 --- a/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch +++ /dev/null @@ -1,25 +0,0 @@ -#DPATCHLEVEL=1 ---- -# vl.c | 6 +++++- -# 1 file changed, 5 insertions(+), 1 deletion(-) -# -Index: qemu/vl.c -=================================================================== ---- qemu.orig/vl.c 2007-06-13 11:51:53.000000000 +0100 -+++ qemu/vl.c 2007-06-13 11:52:19.000000000 +0100 -@@ -1026,10 +1026,14 @@ static int rtc_fd; - - static int start_rtc_timer(void) - { -+ unsigned long current_rtc_freq = 0; -+ - rtc_fd = open("/dev/rtc", O_RDONLY); - if (rtc_fd < 0) - return -1; -- if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { -+ ioctl(rtc_fd, RTC_IRQP_READ, ¤t_rtc_freq); -+ if (current_rtc_freq != RTC_FREQ && -+ ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { - fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n" - "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n" - "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n"); diff --git a/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch deleted file mode 100644 index b7c4732f24..0000000000 --- a/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch +++ /dev/null @@ -1,17 +0,0 @@ -#DPATCHLEVEL=1 ---- -# hw/pc.c | 1 - -# 1 file changed, 1 deletion(-) -# -Index: qemu/hw/pc.c -=================================================================== ---- qemu.orig/hw/pc.c 2007-06-13 11:51:52.000000000 +0100 -+++ qemu/hw/pc.c 2007-06-13 11:51:53.000000000 +0100 -@@ -355,7 +355,6 @@ static void generate_bootsect(uint32_t g - if (bs_table[0] == NULL) { - fprintf(stderr, "A disk image must be given for 'hda' when booting " - "a Linux kernel\n"); -- exit(1); - } - - memset(bootsect, 0, sizeof(bootsect)); diff --git a/packages/qemu/files/06_exit_segfault.patch b/packages/qemu/files/06_exit_segfault.patch deleted file mode 100644 index 447c3550b8..0000000000 --- a/packages/qemu/files/06_exit_segfault.patch +++ /dev/null @@ -1,45 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/main.c | 8 ++++---- -# 1 file changed, 4 insertions(+), 4 deletions(-) -# -Index: linux-user/main.c -=================================================================== ---- linux-user/main.c.orig 2007-06-13 11:51:52.000000000 +0100 -+++ linux-user/main.c 2007-06-13 11:52:16.000000000 +0100 -@@ -642,7 +642,7 @@ void cpu_loop (CPUSPARCState *env) - default: - printf ("Unhandled trap: 0x%x\n", trapnr); - cpu_dump_state(env, stderr, fprintf, 0); -- exit (1); -+ _exit (1); - } - process_pending_signals (env); - } -@@ -1471,7 +1471,7 @@ void cpu_loop (CPUState *env) - default: - printf ("Unhandled trap: 0x%x\n", trapnr); - cpu_dump_state(env, stderr, fprintf, 0); -- exit (1); -+ _exit (1); - } - process_pending_signals (env); - } -@@ -1735,7 +1735,7 @@ int main(int argc, char **argv) - for(item = cpu_log_items; item->mask != 0; item++) { - printf("%-10s %s\n", item->name, item->help); - } -- exit(1); -+ _exit(1); - } - cpu_set_log(mask); - } else if (!strcmp(r, "s")) { -@@ -1754,7 +1754,7 @@ int main(int argc, char **argv) - if (qemu_host_page_size == 0 || - (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) { - fprintf(stderr, "page size must be a power of two\n"); -- exit(1); -+ _exit(1); - } - } else if (!strcmp(r, "g")) { - gdbstub_port = atoi(argv[optind++]); diff --git a/packages/qemu/files/10_signal_jobs.patch b/packages/qemu/files/10_signal_jobs.patch deleted file mode 100644 index 794a538676..0000000000 --- a/packages/qemu/files/10_signal_jobs.patch +++ /dev/null @@ -1,26 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/signal.c | 7 ++++++- -# 1 file changed, 6 insertions(+), 1 deletion(-) -# -Index: linux-user/signal.c -=================================================================== ---- linux-user/signal.c.orig 2007-06-13 11:51:52.000000000 +0100 -+++ linux-user/signal.c 2007-06-13 11:52:21.000000000 +0100 -@@ -341,10 +341,15 @@ int queue_signal(int sig, target_siginfo - k = &sigact_table[sig - 1]; - handler = k->sa._sa_handler; - if (handler == TARGET_SIG_DFL) { -+ if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) { -+ kill(getpid(),SIGSTOP); -+ return 0; -+ } else - /* default handler : ignore some signal. The other are fatal */ - if (sig != TARGET_SIGCHLD && - sig != TARGET_SIGURG && -- sig != TARGET_SIGWINCH) { -+ sig != TARGET_SIGWINCH && -+ sig != TARGET_SIGCONT) { - force_sig(sig); - } else { - return 0; /* indicate ignored */ diff --git a/packages/qemu/files/11_signal_sigaction.patch b/packages/qemu/files/11_signal_sigaction.patch deleted file mode 100644 index 5446efc562..0000000000 --- a/packages/qemu/files/11_signal_sigaction.patch +++ /dev/null @@ -1,21 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/signal.c | 5 +++++ -# 1 file changed, 5 insertions(+) -# -Index: linux-user/signal.c -=================================================================== ---- linux-user/signal.c.orig 2007-06-13 11:51:54.000000000 +0100 -+++ linux-user/signal.c 2007-06-13 11:52:20.000000000 +0100 -@@ -429,6 +429,11 @@ int do_sigaction(int sig, const struct t - - if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP) - return -EINVAL; -+ -+ /* no point doing the stuff as those are not allowed for sigaction */ -+ if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP)) -+ return -EINVAL; -+ - k = &sigact_table[sig - 1]; - #if defined(DEBUG_SIGNAL) - fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n", diff --git a/packages/qemu/files/12_signal_powerpc_support.patch b/packages/qemu/files/12_signal_powerpc_support.patch deleted file mode 100644 index d8d4198784..0000000000 --- a/packages/qemu/files/12_signal_powerpc_support.patch +++ /dev/null @@ -1,401 +0,0 @@ -#DPATCHLEVEL=1 ---- -# linux-user/signal.c | 371 ++++++++++++++++++++++++++++++++++++++++++++++++++++ -# 1 file changed, 371 insertions(+) -# -Index: qemu/linux-user/signal.c -=================================================================== ---- qemu.orig/linux-user/signal.c 2007-06-13 11:51:54.000000000 +0100 -+++ qemu/linux-user/signal.c 2007-06-13 11:51:54.000000000 +0100 -@@ -2,6 +2,7 @@ - * Emulation of Linux signals - * - * Copyright (c) 2003 Fabrice Bellard -+ * Copyright (c) 2005 Josh Triplett - * - * 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 -@@ -16,6 +17,12 @@ - * 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. -+ * -+ * Various portions adapted from the Linux kernel: -+ * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) -+ * Derived from "arch/i386/kernel/signal.c" -+ * Copyright (C) 1991, 1992 Linus Torvalds -+ * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson - */ - #include - #include -@@ -1964,6 +1971,370 @@ long do_rt_sigreturn(CPUState *env) - return -ENOSYS; - } - -+#elif defined(TARGET_PPC) -+/* Adapted from the Linux kernel: -+ * arch/ppc/kernel/signal.c -+ * include/asm-ppc/elf.h -+ * include/asm-ppc/ptrace.h -+ * include/asm-ppc/sigcontext.h -+ * include/asm-ppc/ucontext.h -+ */ -+ -+/* -+ * When we have signals to deliver, we set up on the -+ * user stack, going down from the original stack pointer: -+ * a sigregs struct -+ * a sigcontext struct -+ * a gap of __SIGNAL_FRAMESIZE bytes -+ * -+ * Each of these things must be a multiple of 16 bytes in size. -+ * -+ */ -+ -+#define TARGET_ELF_NGREG 48 /* includes nip, msr, lr, etc. */ -+#define TARGET_ELF_NFPREG 33 /* includes fpscr */ -+#define TARGET_ELF_NVRREG 33 /* includes vscr */ -+ -+/* General registers */ -+typedef unsigned long target_elf_greg_t; -+typedef target_elf_greg_t target_elf_gregset_t[TARGET_ELF_NGREG]; -+ -+/* Floating point registers */ -+typedef double target_elf_fpreg_t; -+typedef target_elf_fpreg_t target_elf_fpregset_t[TARGET_ELF_NFPREG]; -+ -+/* Altivec registers */ -+/* FIXME: Altivec not supported yet. */ -+/* typedef __vector128 elf_vrreg_t; */ -+typedef uint64_t target_elf_vrreg_t[2]; -+typedef target_elf_vrreg_t target_elf_vrregset_t[TARGET_ELF_NVRREG]; -+ -+struct target_mcontext { -+ target_elf_gregset_t mc_gregs; -+ target_elf_fpregset_t mc_fregs; -+ /* The kernel calls this mc_pad, but does #define tramp mc_pad */ -+ target_ulong tramp[2]; -+ target_elf_vrregset_t mc_vregs __attribute__((__aligned__(16))); -+}; -+ -+struct target_sigregs { -+ struct target_mcontext mctx; /* all the register values */ -+ /* Programs using the rs6000/xcoff abi can save up to 19 gp regs -+ and 18 fp regs below sp before decrementing it. */ -+ int abigap[56]; -+}; -+ -+struct target_sigcontext { -+ target_ulong _unused[4]; -+ uint32_t signal; -+ target_ulong handler; -+ target_ulong oldmask; -+ struct target_pt_regs *regs; -+}; -+ -+#define __SIGNAL_FRAMESIZE 64 -+ -+static int -+save_user_regs(CPUState *env, struct target_mcontext *frame, int sigret) -+{ -+ /* save general and floating-point registers */ -+#if 0 /* FIXME: handle floating-point, Altivec, SPE */ -+ CHECK_FULL_REGS(regs); -+ preempt_disable(); -+ if (regs->msr & MSR_FP) -+ giveup_fpu(current); -+#ifdef CONFIG_ALTIVEC -+ if (current->thread.used_vr && (regs->msr & MSR_VEC)) -+ giveup_altivec(current); -+#endif /* CONFIG_ALTIVEC */ -+#ifdef CONFIG_SPE -+ if (current->thread.used_spe && (regs->msr & MSR_SPE)) -+ giveup_spe(current); -+#endif /* CONFIG_ALTIVEC */ -+ preempt_enable(); -+#endif /* 0 */ -+ -+ /* Note: this needs to be in the same order as target_pt_regs */ -+ if(!memcpy(&frame->mc_gregs, env->gpr, -+ 32*sizeof(target_elf_greg_t)) -+ || __put_user(env->nip, &frame->mc_gregs[32]) -+ || __put_user(do_load_msr(env), &frame->mc_gregs[33]) -+ /* FIXME: || __put_user(orig_gpr3, &frame->mc_gregs[34]) */ -+ || __put_user(env->ctr, &frame->mc_gregs[35]) -+ || __put_user(env->lr, &frame->mc_gregs[36]) -+ || __put_user(do_load_xer(env), &frame->mc_gregs[37]) -+ || __put_user(do_load_cr(env), &frame->mc_gregs[38]) -+ || __put_user(env->spr[SPR_MQ], &frame->mc_gregs[39]) -+ /* FIXME: || __put_user(trap, &frame->mc_gregs[40]) */ -+ || __put_user(env->spr[SPR_DAR], &frame->mc_gregs[41]) -+ || __put_user(env->spr[SPR_DSISR], &frame->mc_gregs[42]) -+ /* FIXME: || __put_user(result, &frame->mc_gregs[43]) */) -+ return 1; -+ -+ if(!memcpy(&frame->mc_fregs, env->fpr, -+ 32*sizeof(target_elf_fpreg_t)) -+ || __put_user(do_load_fpscr(env), &frame->mc_fregs[32])) -+ -+ do_store_fpscr(env, 0, 0xFF); /* turn off all fp exceptions */ -+ -+#if 0 /* FIXME: handle Altivec, SPE */ -+#ifdef CONFIG_ALTIVEC -+ /* save altivec registers */ -+ if (current->thread.used_vr) { -+ if (!memcpy(&frame->mc_vregs, current->thread.vr, -+ ELF_NVRREG * sizeof(vector128))) -+ return 1; -+ /* set MSR_VEC in the saved MSR value to indicate that -+ frame->mc_vregs contains valid data */ -+ if (__put_user(regs->msr | MSR_VEC, &frame->mc_gregs[PT_MSR])) -+ return 1; -+ } -+ /* else assert((regs->msr & MSR_VEC) == 0) */ -+ -+ /* We always copy to/from vrsave, it's 0 if we don't have or don't -+ * use altivec. Since VSCR only contains 32 bits saved in the least -+ * significant bits of a vector, we "cheat" and stuff VRSAVE in the -+ * most significant bits of that same vector. --BenH -+ */ -+ if (__put_user(current->thread.vrsave, (u32 __user *)&frame->mc_vregs[32])) -+ return 1; -+#endif /* CONFIG_ALTIVEC */ -+ -+#ifdef CONFIG_SPE -+ /* save spe registers */ -+ if (current->thread.used_spe) { -+ if (!memcpy(&frame->mc_vregs, current->thread.evr, -+ ELF_NEVRREG * sizeof(u32))) -+ return 1; -+ /* set MSR_SPE in the saved MSR value to indicate that -+ frame->mc_vregs contains valid data */ -+ if (__put_user(regs->msr | MSR_SPE, &frame->mc_gregs[PT_MSR])) -+ return 1; -+ } -+ /* else assert((regs->msr & MSR_SPE) == 0) */ -+ -+ /* We always copy to/from spefscr */ -+ if (__put_user(current->thread.spefscr, (u32 *)&frame->mc_vregs + ELF_NEVRREG)) -+ return 1; -+#endif /* CONFIG_SPE */ -+#endif /* 0 */ -+ -+ if (sigret) { -+ /* Set up the sigreturn trampoline: li r0,sigret; sc */ -+ if (__put_user(0x38000000UL + sigret, &frame->tramp[0]) -+ || __put_user(0x44000002UL, &frame->tramp[1])) -+ return 1; -+#if 0 -+ flush_icache_range((unsigned long) &frame->tramp[0], -+ (unsigned long) &frame->tramp[2]); -+#endif -+ } -+ -+ return 0; -+} -+ -+static int -+restore_user_regs(CPUState *env, struct target_mcontext *sr, int sig) -+{ -+ target_ulong save_r2 = 0; -+ target_ulong saved_xer; -+ target_ulong saved_cr; -+ double saved_fpscr; -+ -+#if 0 /* FIXME: handle Altivec, SPE */ -+#if defined(CONFIG_ALTIVEC) || defined(CONFIG_SPE) -+ unsigned long msr; -+#endif -+#endif /* 0 */ -+ -+ /* backup/restore the TLS as we don't want it to be modified */ -+ if (!sig) -+ save_r2 = env->gpr[2]; -+ -+ /* Copy all registers except MSR */ -+ /* Note: this needs to be in the same order as target_pt_regs */ -+ if(!memcpy(env->gpr, &sr->mc_gregs, -+ 32*sizeof(target_elf_greg_t)) -+ || __get_user(env->nip, &sr->mc_gregs[32]) -+ /* FIXME: || __get_user(orig_gpr3, &sr->mc_gregs[34]) */ -+ || __get_user(env->ctr, &sr->mc_gregs[35]) -+ || __get_user(env->lr, &sr->mc_gregs[36]) -+ || __get_user(saved_xer, &sr->mc_gregs[37]) -+ || __get_user(saved_cr, &sr->mc_gregs[38]) -+ || __get_user(env->spr[SPR_MQ], &sr->mc_gregs[39]) -+ /* FIXME: || __get_user(trap, &sr->mc_gregs[40]) */ -+ || __get_user(env->spr[SPR_DAR], &sr->mc_gregs[41]) -+ || __get_user(env->spr[SPR_DSISR], &sr->mc_gregs[42]) -+ /* FIXME: || __get_user(result, &sr->mc_gregs[43]) */) -+ return 1; -+ do_store_xer(env, saved_xer); -+ do_store_cr(env, saved_cr, 0xFF); -+ -+ if (!sig) -+ env->gpr[2] = save_r2; -+ -+ /* The kernel delays restoring the floating-point registers until the -+ * thread uses floating-point again. For simplicity, just restore the -+ * registers now. */ -+ if(!memcpy(env->fpr, &sr->mc_fregs, -+ 32*sizeof(target_elf_fpreg_t)) -+ || __get_user(saved_fpscr, &sr->mc_fregs[32])) -+ return 1; -+ do_store_fpscr(env, saved_fpscr, 0xFF); -+ -+#if 0 /* FIXME: handle Altivec, SPE */ -+#ifdef CONFIG_ALTIVEC -+ /* force the process to reload the altivec registers from -+ current->thread when it next does altivec instructions */ -+ regs->msr &= ~MSR_VEC; -+ if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_VEC) != 0) { -+ /* restore altivec registers from the stack */ -+ if (!memcpy(current->thread.vr, &sr->mc_vregs, -+ sizeof(sr->mc_vregs))) -+ return 1; -+ } else if (current->thread.used_vr) -+ memset(¤t->thread.vr, 0, ELF_NVRREG * sizeof(vector128)); -+ -+ /* Always get VRSAVE back */ -+ if (__get_user(current->thread.vrsave, (u32 __user *)&sr->mc_vregs[32])) -+ return 1; -+#endif /* CONFIG_ALTIVEC */ -+ -+#ifdef CONFIG_SPE -+ /* force the process to reload the spe registers from -+ current->thread when it next does spe instructions */ -+ regs->msr &= ~MSR_SPE; -+ if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_SPE) != 0) { -+ /* restore spe registers from the stack */ -+ if (!memcpy(current->thread.evr, &sr->mc_vregs, -+ ELF_NEVRREG * sizeof(u32))) -+ return 1; -+ } else if (current->thread.used_spe) -+ memset(¤t->thread.evr, 0, ELF_NEVRREG * sizeof(u32)); -+ -+ /* Always get SPEFSCR back */ -+ if (__get_user(current->thread.spefscr, (u32 *)&sr->mc_vregs + ELF_NEVRREG)) -+ return 1; -+#endif /* CONFIG_SPE */ -+#endif /* 0 */ -+ -+#if 0 /* FIXME: handle floating-point, Altivec, SPE */ -+#ifndef CONFIG_SMP -+ preempt_disable(); -+ if (last_task_used_math == current) -+ last_task_used_math = NULL; -+ if (last_task_used_altivec == current) -+ last_task_used_altivec = NULL; -+ if (last_task_used_spe == current) -+ last_task_used_spe = NULL; -+ preempt_enable(); -+#endif -+#endif /* 0 */ -+ return 0; -+} -+ -+static void setup_frame(int sig, struct emulated_sigaction *ka, -+ target_sigset_t *oldset, CPUState *env) -+{ -+ struct target_sigcontext *sc; -+ struct target_sigregs *frame; -+ target_ulong origsp = env->gpr[1]; -+ target_ulong newsp = origsp; -+ -+ /* Set up Signal Frame */ -+ newsp -= sizeof(struct target_sigregs); -+ frame = (struct target_sigregs *) newsp; -+ -+ /* Put a sigcontext on the stack */ -+ newsp -= sizeof(*sc); -+ sc = (struct target_sigcontext *) newsp; -+ -+ /* create a stack frame for the caller of the handler */ -+ newsp -= __SIGNAL_FRAMESIZE; -+ -+ if (!access_ok(VERIFY_WRITE, (void *) newsp, origsp - newsp)) -+ goto badframe; -+ -+#if TARGET_NSIG != 64 -+#error "Please adjust handle_signal()" -+#endif -+ if (__put_user((target_ulong) ka->sa._sa_handler, &sc->handler) -+ || __put_user(oldset->sig[0], &sc->oldmask) -+ || __put_user(oldset->sig[1], &sc->_unused[3]) -+ || __put_user(frame, (target_ulong *)&sc->regs) -+ || __put_user(sig, &sc->signal)) -+ goto badframe; -+ -+ if (save_user_regs(env, &frame->mctx, TARGET_NR_sigreturn)) -+ goto badframe; -+ -+ if (put_user(env->gpr[1], (unsigned long *)newsp)) -+ goto badframe; -+ env->gpr[1] = newsp; -+ env->gpr[3] = sig; -+ env->gpr[4] = (unsigned long) sc; -+ env->nip = (unsigned long) ka->sa._sa_handler; -+ env->lr = (unsigned long) frame->mctx.tramp; -+ /* FIXME: env->trap = 0; */ -+ -+ return; -+ -+badframe: -+#ifdef DEBUG_SIGNAL -+ fprintf(stderr, -+ "badframe in handle_signal, frame=%p newsp=%lx\n", -+ frame, newsp); -+#endif -+ force_sig(TARGET_SIGSEGV); -+} -+ -+static void setup_rt_frame(int sig, struct emulated_sigaction *ka, -+ target_siginfo_t *info, -+ target_sigset_t *set, CPUState *env) -+{ -+ fprintf(stderr, "setup_rt_frame: not implemented\n"); -+} -+ -+long do_sigreturn(CPUState *env) -+{ -+ struct target_sigcontext *sc; -+ struct target_sigcontext sigctx; -+ struct target_mcontext *sr; -+ target_sigset_t set; -+ sigset_t host_set; -+ -+ /* Always make any pending restarted system calls return -EINTR */ -+#if 0 /* FIXME */ -+ current_thread_info()->restart_block.fn = do_no_restart_syscall; -+#endif -+ -+ sc = (struct target_sigcontext *)(env->gpr[1] + __SIGNAL_FRAMESIZE); -+ if (!memcpy(&sigctx, sc, sizeof(sigctx))) -+ goto badframe; -+ -+ set.sig[0] = sigctx.oldmask; -+ set.sig[1] = sigctx._unused[3]; -+ target_to_host_sigset_internal(&host_set, &set); -+ sigprocmask(SIG_SETMASK, &host_set, NULL); -+ -+ sr = (struct target_mcontext *) tswapl((target_ulong)sigctx.regs); -+ if (!access_ok(VERIFY_READ, sr, sizeof(*sr)) -+ || restore_user_regs(env, sr, 1)) -+ goto badframe; -+ -+ return 0; -+ -+badframe: -+ force_sig(TARGET_SIGSEGV); -+ return 0; -+} -+ -+long do_rt_sigreturn(CPUState *env) -+{ -+ fprintf(stderr, "do_rt_sigreturn: not implemented\n"); -+ return -ENOSYS; -+} -+ - #else - - static void setup_frame(int sig, struct emulated_sigaction *ka, diff --git a/packages/qemu/files/22_net_tuntap_stall.patch b/packages/qemu/files/22_net_tuntap_stall.patch deleted file mode 100644 index e9b31dfe40..0000000000 --- a/packages/qemu/files/22_net_tuntap_stall.patch +++ /dev/null @@ -1,18 +0,0 @@ -#DPATCHLEVEL=0 ---- -# vl.c | 2 +- -# 1 file changed, 1 insertion(+), 1 deletion(-) -# -Index: vl.c -=================================================================== ---- vl.c.orig 2007-06-13 11:51:53.000000000 +0100 -+++ vl.c 2007-06-13 11:52:10.000000000 +0100 -@@ -3617,7 +3617,7 @@ static int tap_open(char *ifname, int if - return -1; - } - memset(&ifr, 0, sizeof(ifr)); -- ifr.ifr_flags = IFF_TAP | IFF_NO_PI; -+ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE; - if (ifname[0] != '\0') - pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname); - else diff --git a/packages/qemu/files/30_syscall_ipc.patch b/packages/qemu/files/30_syscall_ipc.patch deleted file mode 100644 index 3dc58102ad..0000000000 --- a/packages/qemu/files/30_syscall_ipc.patch +++ /dev/null @@ -1,34 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/syscall.c | 7 +++++-- -# 1 file changed, 5 insertions(+), 2 deletions(-) -# -Index: linux-user/syscall.c -=================================================================== ---- linux-user/syscall.c.orig 2007-04-18 13:25:40.000000000 +0100 -+++ linux-user/syscall.c 2007-04-18 13:37:27.000000000 +0100 -@@ -43,7 +43,10 @@ - #include - #include - #include -+#include - #include -+#include -+#include - #include - #include - #include -@@ -1240,11 +1243,11 @@ static long do_ipc(long call, long first - ret = get_errno(shmctl(first, second, NULL)); - break; - default: -- goto unimplemented; -+ ret = get_errno(shmctl(first, second, (struct shmid_ds *) ptr)); -+ break; - } - break; - default: -- unimplemented: - gemu_log("Unsupported ipc call: %ld (version %d)\n", call, version); - ret = -ENOSYS; - break; diff --git a/packages/qemu/files/31_syscalls.patch b/packages/qemu/files/31_syscalls.patch deleted file mode 100644 index 3878079f19..0000000000 --- a/packages/qemu/files/31_syscalls.patch +++ /dev/null @@ -1,49 +0,0 @@ -#DPATCHLEVEL=0 ---- -# Makefile.target | 2 +- -# linux-user/syscall.c | 11 ++++++++--- -# 2 files changed, 9 insertions(+), 4 deletions(-) -# -Index: linux-user/syscall.c -=================================================================== ---- linux-user/syscall.c.orig 2007-06-13 11:51:52.000000000 +0100 -+++ linux-user/syscall.c 2007-06-13 11:52:18.000000000 +0100 -@@ -180,6 +180,7 @@ extern int getresuid(uid_t *, uid_t *, u - extern int setresgid(gid_t, gid_t, gid_t); - extern int getresgid(gid_t *, gid_t *, gid_t *); - extern int setgroups(int, gid_t *); -+extern int uselib(const char*); - - /* - * This list is the union of errno values overidden in asm-/errno.h -@@ -3215,7 +3216,8 @@ long do_syscall(void *cpu_env, int num, - break; - #ifdef TARGET_NR_uselib - case TARGET_NR_uselib: -- goto unimplemented; -+ ret = get_errno(uselib(path((const char*)arg1))); -+ break; - #endif - #ifdef TARGET_NR_swapon - case TARGET_NR_swapon: -@@ -4405,7 +4407,9 @@ long do_syscall(void *cpu_env, int num, - goto unimplemented; - #ifdef TARGET_NR_mincore - case TARGET_NR_mincore: -- goto unimplemented; -+ page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE); -+ ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); -+ break; - #endif - #ifdef TARGET_NR_madvise - case TARGET_NR_madvise: -@@ -4539,7 +4543,8 @@ long do_syscall(void *cpu_env, int num, - break; - #ifdef TARGET_NR_readahead - case TARGET_NR_readahead: -- goto unimplemented; -+ ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3)); -+ break; - #endif - #ifdef TARGET_NR_setxattr - case TARGET_NR_setxattr: diff --git a/packages/qemu/files/32_syscall_sysctl.patch b/packages/qemu/files/32_syscall_sysctl.patch deleted file mode 100644 index d175cf96ba..0000000000 --- a/packages/qemu/files/32_syscall_sysctl.patch +++ /dev/null @@ -1,56 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/syscall.c | 33 ++++++++++++++++++++++++++++++--- -# 1 file changed, 30 insertions(+), 3 deletions(-) -# -Index: linux-user/syscall.c -=================================================================== ---- linux-user/syscall.c.orig 2007-06-13 11:51:54.000000000 +0100 -+++ linux-user/syscall.c 2007-06-13 11:52:17.000000000 +0100 -@@ -52,6 +52,7 @@ - //#include - #include - #include -+#include - - #define termios host_termios - #define winsize host_winsize -@@ -3912,9 +3913,35 @@ long do_syscall(void *cpu_env, int num, - break; - #endif - case TARGET_NR__sysctl: -- /* We don't implement this, but ENODIR is always a safe -- return value. */ -- return -ENOTDIR; -+ { -+ struct __sysctl_args *args = (struct __sysctl_args *) arg1; -+ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i; -+ void *oldval, *newval; -+ -+ name_target = (int *) tswapl((long) args->name); -+ nlen = tswapl(args->nlen); -+ oldval = (void *) tswapl((long) args->oldval); -+ oldlenp = (int *) tswapl((long) args->oldlenp); -+ oldlen = tswapl(*oldlenp); -+ newval = (void *) tswapl((long) args->newval); -+ newlen = tswapl(args->newlen); -+ -+ name = alloca(nlen * sizeof (int)); -+ for (i = 0; i < nlen; i++) -+ name[i] = tswapl(name_target[i]); -+ -+ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) { -+ ret = get_errno( -+ sysctl(name, nlen, oldval, &oldlen, newval, newlen)); -+ if (!is_error(ret)) { -+ *oldlenp = tswapl(oldlen); -+ } -+ } else { -+ gemu_log("qemu: Unsupported sysctl name\n"); -+ ret = -ENOSYS; -+ } -+ } -+ break; - case TARGET_NR_sched_setparam: - { - struct sched_param *target_schp; diff --git a/packages/qemu/files/33_syscall_ppc_clone.patch b/packages/qemu/files/33_syscall_ppc_clone.patch deleted file mode 100644 index a71f8b1944..0000000000 --- a/packages/qemu/files/33_syscall_ppc_clone.patch +++ /dev/null @@ -1,22 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/syscall.c | 6 +----- -# 1 file changed, 1 insertion(+), 5 deletions(-) -# -Index: linux-user/syscall.c -=================================================================== ---- linux-user/syscall.c.orig 2007-06-13 11:51:54.000000000 +0100 -+++ linux-user/syscall.c 2007-06-13 11:52:17.000000000 +0100 -@@ -2177,11 +2177,7 @@ int do_fork(CPUState *env, unsigned int - if (!newsp) - newsp = env->gpr[1]; - new_env->gpr[1] = newsp; -- { -- int i; -- for (i = 7; i < 32; i++) -- new_env->gpr[i] = 0; -- } -+ new_env->gpr[3] = 0; - #elif defined(TARGET_SH4) - if (!newsp) - newsp = env->gregs[15]; diff --git a/packages/qemu/files/39_syscall_fadvise64.patch b/packages/qemu/files/39_syscall_fadvise64.patch deleted file mode 100644 index 0a7f4c48dd..0000000000 --- a/packages/qemu/files/39_syscall_fadvise64.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- - linux-user/syscall.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -Index: linux-user/syscall.c -=================================================================== ---- linux-user/syscall.c.orig 2007-06-13 11:51:55.000000000 +0100 -+++ linux-user/syscall.c 2007-06-13 11:52:13.000000000 +0100 -@@ -4434,6 +4434,12 @@ long do_syscall(void *cpu_env, int num, - ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); - break; - #endif -+#ifdef TARGET_NR_fadvise64_64 -+ case TARGET_NR_fadvise64_64: -+ /* Just return success */ -+ ret = get_errno(0); -+ break; -+#endif - #ifdef TARGET_NR_madvise - case TARGET_NR_madvise: - /* A straight passthrough may not be safe because qemu sometimes diff --git a/packages/qemu/files/41_arm_fpa_sigfpe.patch b/packages/qemu/files/41_arm_fpa_sigfpe.patch deleted file mode 100644 index d579dbc66e..0000000000 --- a/packages/qemu/files/41_arm_fpa_sigfpe.patch +++ /dev/null @@ -1,105 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/main.c | 53 +++++++++++++++++++++++++++++++++++++++++++++-- -# target-arm/nwfpe/fpa11.c | 7 ++++++ -# 2 files changed, 58 insertions(+), 2 deletions(-) -# -Index: linux-user/main.c -=================================================================== ---- linux-user/main.c.orig 2007-06-13 11:51:53.000000000 +0100 -+++ linux-user/main.c 2007-06-13 11:52:07.000000000 +0100 -@@ -339,18 +339,67 @@ void cpu_loop(CPUARMState *env) - { - TaskState *ts = env->opaque; - uint32_t opcode; -+ int rc; - - /* we handle the FPU emulation here, as Linux */ - /* we get the opcode */ - opcode = tget32(env->regs[15]); - -- if (EmulateAll(opcode, &ts->fpa, env) == 0) { -+ rc = EmulateAll(opcode, &ts->fpa, env); -+ if (rc == 0) { /* illegal instruction */ - info.si_signo = SIGILL; - info.si_errno = 0; - info.si_code = TARGET_ILL_ILLOPN; - info._sifields._sigfault._addr = env->regs[15]; - queue_signal(info.si_signo, &info); -- } else { -+ } else if (rc < 0) { /* FP exception */ -+ int arm_fpe=0; -+ -+ /* translate softfloat flags to FPSR flags */ -+ if (-rc & float_flag_invalid) -+ arm_fpe |= BIT_IOC; -+ if (-rc & float_flag_divbyzero) -+ arm_fpe |= BIT_DZC; -+ if (-rc & float_flag_overflow) -+ arm_fpe |= BIT_OFC; -+ if (-rc & float_flag_underflow) -+ arm_fpe |= BIT_UFC; -+ if (-rc & float_flag_inexact) -+ arm_fpe |= BIT_IXC; -+ -+ FPSR fpsr = ts->fpa.fpsr; -+ //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe); -+ -+ if (fpsr & (arm_fpe << 16)) { /* exception enabled? */ -+ info.si_signo = SIGFPE; -+ info.si_errno = 0; -+ -+ /* ordered by priority, least first */ -+ if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES; -+ if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND; -+ if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF; -+ if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV; -+ if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV; -+ -+ info._sifields._sigfault._addr = env->regs[15]; -+ queue_signal(info.si_signo, &info); -+ } else { -+ env->regs[15] += 4; -+ } -+ -+ /* accumulate unenabled exceptions */ -+ if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC)) -+ fpsr |= BIT_IXC; -+ if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC)) -+ fpsr |= BIT_UFC; -+ if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC)) -+ fpsr |= BIT_OFC; -+ if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC)) -+ fpsr |= BIT_DZC; -+ if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC)) -+ fpsr |= BIT_IOC; -+ ts->fpa.fpsr=fpsr; -+ } else { /* everything OK */ - /* increment PC */ - env->regs[15] += 4; - } -Index: target-arm/nwfpe/fpa11.c -=================================================================== ---- target-arm/nwfpe/fpa11.c.orig 2007-06-13 11:51:52.000000000 +0100 -+++ target-arm/nwfpe/fpa11.c 2007-06-13 11:51:55.000000000 +0100 -@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc - fpa11->initflag = 1; - } - -+ set_float_exception_flags(0, &fpa11->fp_status); -+ - if (TEST_OPCODE(opcode,MASK_CPRT)) - { - //fprintf(stderr,"emulating CPRT\n"); -@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc - } - - // restore_flags(flags); -+ if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status)) -+ { -+ //printf("fef 0x%x\n",float_exception_flags); -+ nRc=-get_float_exception_flags(&fpa11->fp_status); -+ } - - //printf("returning %d\n",nRc); - return(nRc); diff --git a/packages/qemu/files/52_ne2000_return.patch b/packages/qemu/files/52_ne2000_return.patch deleted file mode 100644 index f0316c8042..0000000000 --- a/packages/qemu/files/52_ne2000_return.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- - hw/ne2000.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: qemu/hw/ne2000.c -=================================================================== ---- qemu.orig/hw/ne2000.c 2007-06-13 11:51:52.000000000 +0100 -+++ qemu/hw/ne2000.c 2007-06-13 11:51:55.000000000 +0100 -@@ -214,7 +214,7 @@ static int ne2000_can_receive(void *opaq - NE2000State *s = opaque; - - if (s->cmd & E8390_STOP) -- return 1; -+ return 0; - return !ne2000_buffer_full(s); - } - diff --git a/packages/qemu/files/61_safe_64bit_int.patch b/packages/qemu/files/61_safe_64bit_int.patch deleted file mode 100644 index 553e57623e..0000000000 --- a/packages/qemu/files/61_safe_64bit_int.patch +++ /dev/null @@ -1,27 +0,0 @@ -#DPATCHLEVEL=0 ---- -# dyngen-exec.h | 4 ++-- -# 1 file changed, 2 insertions(+), 2 deletions(-) -# -Index: dyngen-exec.h -=================================================================== ---- dyngen-exec.h.orig 2007-06-13 11:48:22.000000000 +0100 -+++ dyngen-exec.h 2007-06-13 11:51:55.000000000 +0100 -@@ -38,7 +38,7 @@ typedef unsigned int uint32_t; - // Linux/Sparc64 defines uint64_t - #if !(defined (__sparc_v9__) && defined(__linux__)) - /* XXX may be done for all 64 bits targets ? */ --#if defined (__x86_64__) || defined(__ia64) -+#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__) - typedef unsigned long uint64_t; - #else - typedef unsigned long long uint64_t; -@@ -55,7 +55,7 @@ typedef signed short int16_t; - typedef signed int int32_t; - // Linux/Sparc64 defines int64_t - #if !(defined (__sparc_v9__) && defined(__linux__)) --#if defined (__x86_64__) || defined(__ia64) -+#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__) - typedef signed long int64_t; - #else - typedef signed long long int64_t; diff --git a/packages/qemu/files/63_sparc_build.patch b/packages/qemu/files/63_sparc_build.patch deleted file mode 100644 index 32a6bc0ee0..0000000000 --- a/packages/qemu/files/63_sparc_build.patch +++ /dev/null @@ -1,18 +0,0 @@ -#DPATCHLEVEL=0 ---- -# sparc.ld | 2 +- -# 1 file changed, 1 insertion(+), 1 deletion(-) -# -Index: sparc.ld -=================================================================== ---- sparc.ld.orig 2007-06-13 11:48:22.000000000 +0100 -+++ sparc.ld 2007-06-13 11:51:56.000000000 +0100 -@@ -6,7 +6,7 @@ ENTRY(_start) - SECTIONS - { - /* Read-only sections, merged into text segment: */ -- . = 0x60000000 + SIZEOF_HEADERS; -+ . = 0x60000000 + 0x400; - .interp : { *(.interp) } - .hash : { *(.hash) } - .dynsym : { *(.dynsym) } diff --git a/packages/qemu/files/64_ppc_asm_constraints.patch b/packages/qemu/files/64_ppc_asm_constraints.patch deleted file mode 100644 index e4858b79d7..0000000000 --- a/packages/qemu/files/64_ppc_asm_constraints.patch +++ /dev/null @@ -1,18 +0,0 @@ -#DPATCHLEVEL=1 ---- -# cpu-all.h | 2 +- -# 1 file changed, 1 insertion(+), 1 deletion(-) -# -Index: qemu/cpu-all.h -=================================================================== ---- qemu.orig/cpu-all.h 2007-06-13 11:48:22.000000000 +0100 -+++ qemu/cpu-all.h 2007-06-13 11:51:56.000000000 +0100 -@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i - static inline void stl_le_p(void *ptr, int v) - { - #ifdef __powerpc__ -- __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr)); -+ __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory"); - #else - uint8_t *p = ptr; - p[0] = v; diff --git a/packages/qemu/files/65_kfreebsd.patch b/packages/qemu/files/65_kfreebsd.patch deleted file mode 100644 index ea060811a1..0000000000 --- a/packages/qemu/files/65_kfreebsd.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- - configure | 6 ++++++ - vl.c | 4 +++- - 2 files changed, 9 insertions(+), 1 deletion(-) - -Index: configure -=================================================================== ---- configure.orig 2007-06-13 11:48:22.000000000 +0100 -+++ configure 2007-06-13 11:52:07.000000000 +0100 -@@ -112,6 +112,12 @@ OS_CFLAGS="-mno-cygwin" - MINGW32*) - mingw32="yes" - ;; -+GNU/kFreeBSD) -+oss="yes" -+if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then -+ kqemu="yes" -+fi -+;; - FreeBSD) - bsd="yes" - oss="yes" -Index: vl.c -=================================================================== ---- vl.c.orig 2007-06-13 11:51:54.000000000 +0100 -+++ vl.c 2007-06-13 11:51:56.000000000 +0100 -@@ -47,6 +47,8 @@ - #ifndef __APPLE__ - #include - #endif -+#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__) -+#include - #else - #ifndef __sun__ - #include -@@ -3454,7 +3456,7 @@ static TAPState *net_tap_fd_init(VLANSta - return s; - } - --#ifdef _BSD -+#if defined (_BSD) || defined (__FreeBSD_kernel__) - static int tap_open(char *ifname, int ifname_size) - { - int fd; diff --git a/packages/qemu/files/66_tls_ld.patch b/packages/qemu/files/66_tls_ld.patch deleted file mode 100644 index 54e02eff8b..0000000000 --- a/packages/qemu/files/66_tls_ld.patch +++ /dev/null @@ -1,55 +0,0 @@ ---- - arm.ld | 7 +++++++ - i386.ld | 7 +++++++ - 2 files changed, 14 insertions(+) - -Index: arm.ld -=================================================================== ---- arm.ld.orig 2007-06-13 11:48:22.000000000 +0100 -+++ arm.ld 2007-06-13 11:51:56.000000000 +0100 -@@ -26,6 +26,10 @@ SECTIONS - { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } - .rela.rodata : - { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } -+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } -+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } -+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } -+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.ctors : { *(.rel.ctors) } -@@ -58,6 +62,9 @@ SECTIONS - .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } - __exidx_end = .; - .reginfo : { *(.reginfo) } -+ /* Thread Local Storage sections */ -+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } -+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } - /* Adjust the address for the data segment. We want to adjust up to - the same address within the page on the next page up. */ - . = ALIGN(0x100000) + (. & (0x100000 - 1)); -Index: i386.ld -=================================================================== ---- i386.ld.orig 2007-06-13 11:48:22.000000000 +0100 -+++ i386.ld 2007-06-13 11:51:56.000000000 +0100 -@@ -28,6 +28,10 @@ SECTIONS - { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } - .rela.rodata : - { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } -+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } -+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } -+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } -+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.ctors : { *(.rel.ctors) } -@@ -53,6 +57,9 @@ SECTIONS - _etext = .; - PROVIDE (etext = .); - .fini : { *(.fini) } =0x47ff041f -+ /* Thread Local Storage sections */ -+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } -+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } - . = ALIGN(32 / 8); - PROVIDE (__preinit_array_start = .); - .preinit_array : { *(.preinit_array) } diff --git a/packages/qemu/files/91-oh-sdl-cursor.patch b/packages/qemu/files/91-oh-sdl-cursor.patch deleted file mode 100644 index 5280a5bd4a..0000000000 --- a/packages/qemu/files/91-oh-sdl-cursor.patch +++ /dev/null @@ -1,18 +0,0 @@ -=== modified file 'sdl.c' ---- - sdl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: sdl.c -=================================================================== ---- sdl.c.orig 2007-06-13 11:48:22.000000000 +0100 -+++ sdl.c 2007-06-13 11:51:56.000000000 +0100 -@@ -241,7 +241,7 @@ static void sdl_hide_cursor(void) - - if (kbd_mouse_is_absolute()) { - SDL_ShowCursor(1); -- SDL_SetCursor(sdl_cursor_hidden); -+ /* SDL_SetCursor(sdl_cursor_hidden); */ - } else { - SDL_ShowCursor(0); - } diff --git a/packages/qemu/files/93-oh-pl110-rgb.patch b/packages/qemu/files/93-oh-pl110-rgb.patch deleted file mode 100644 index 4911ac131f..0000000000 --- a/packages/qemu/files/93-oh-pl110-rgb.patch +++ /dev/null @@ -1,223 +0,0 @@ -=== modified file 'hw/pl110.c' ---- - hw/pl110.c | 13 ++++-- - hw/pl110_template.h | 107 ++++++++++++++++++++++++++++++++++++---------------- - 2 files changed, 86 insertions(+), 34 deletions(-) - -Index: hw/pl110.c -=================================================================== ---- hw/pl110.c.orig 2007-06-13 11:48:22.000000000 +0100 -+++ hw/pl110.c 2007-06-13 11:51:57.000000000 +0100 -@@ -10,6 +10,7 @@ - #include "vl.h" - - #define PL110_CR_EN 0x001 -+#define PL110_CR_BGR 0x100 - #define PL110_CR_BEBO 0x200 - #define PL110_CR_BEPO 0x400 - #define PL110_CR_PWR 0x800 -@@ -114,6 +115,7 @@ static void pl110_update_display(void *o - int first, last = 0; - int dirty, new_dirty; - int i; -+ int bpp_offset; - - if (!pl110_enabled(s)) - return; -@@ -145,12 +147,17 @@ static void pl110_update_display(void *o - fprintf(stderr, "pl110: Bad color depth\n"); - exit(1); - } -+ if (s->cr & PL110_CR_BGR) -+ bpp_offset = 0; -+ else -+ bpp_offset = 18; -+ - if (s->cr & PL110_CR_BEBO) -- fn = fntable[s->bpp + 6]; -+ fn = fntable[s->bpp + 6 + bpp_offset]; - else if (s->cr & PL110_CR_BEPO) -- fn = fntable[s->bpp + 12]; -+ fn = fntable[s->bpp + 12 + bpp_offset]; - else -- fn = fntable[s->bpp]; -+ fn = fntable[s->bpp + bpp_offset]; - - src_width = s->cols; - switch (s->bpp) { -Index: hw/pl110_template.h -=================================================================== ---- hw/pl110_template.h.orig 2007-06-13 11:48:22.000000000 +0100 -+++ hw/pl110_template.h 2007-06-13 11:51:57.000000000 +0100 -@@ -24,6 +24,16 @@ - #error unknown bit depth - #endif - -+#undef RGB -+#define BORDER bgr -+#define ORDER 0 -+#include "pl110_template.h" -+#define ORDER 1 -+#include "pl110_template.h" -+#define ORDER 2 -+#include "pl110_template.h" -+#define RGB -+#define BORDER rgb - #define ORDER 0 - #include "pl110_template.h" - #define ORDER 1 -@@ -33,26 +43,47 @@ - - static drawfn glue(pl110_draw_fn_,BITS)[18] = - { -- glue(pl110_draw_line1_lblp,BITS), -- glue(pl110_draw_line2_lblp,BITS), -- glue(pl110_draw_line4_lblp,BITS), -- glue(pl110_draw_line8_lblp,BITS), -- glue(pl110_draw_line16_lblp,BITS), -- glue(pl110_draw_line32_lblp,BITS), -+ glue(pl110_draw_line1_lblp_bgr,BITS), -+ glue(pl110_draw_line2_lblp_bgr,BITS), -+ glue(pl110_draw_line4_lblp_bgr,BITS), -+ glue(pl110_draw_line8_lblp_bgr,BITS), -+ glue(pl110_draw_line16_lblp_bgr,BITS), -+ glue(pl110_draw_line32_lblp_bgr,BITS), - -- glue(pl110_draw_line1_bbbp,BITS), -- glue(pl110_draw_line2_bbbp,BITS), -- glue(pl110_draw_line4_bbbp,BITS), -- glue(pl110_draw_line8_bbbp,BITS), -- glue(pl110_draw_line16_bbbp,BITS), -- glue(pl110_draw_line32_bbbp,BITS), -+ glue(pl110_draw_line1_bbbp_bgr,BITS), -+ glue(pl110_draw_line2_bbbp_bgr,BITS), -+ glue(pl110_draw_line4_bbbp_bgr,BITS), -+ glue(pl110_draw_line8_bbbp_bgr,BITS), -+ glue(pl110_draw_line16_bbbp_bgr,BITS), -+ glue(pl110_draw_line32_bbbp_bgr,BITS), - -- glue(pl110_draw_line1_lbbp,BITS), -- glue(pl110_draw_line2_lbbp,BITS), -- glue(pl110_draw_line4_lbbp,BITS), -- glue(pl110_draw_line8_lbbp,BITS), -- glue(pl110_draw_line16_lbbp,BITS), -- glue(pl110_draw_line32_lbbp,BITS) -+ glue(pl110_draw_line1_lbbp_bgr,BITS), -+ glue(pl110_draw_line2_lbbp_bgr,BITS), -+ glue(pl110_draw_line4_lbbp_bgr,BITS), -+ glue(pl110_draw_line8_lbbp_bgr,BITS), -+ glue(pl110_draw_line16_lbbp_bgr,BITS), -+ glue(pl110_draw_line32_lbbp_bgr,BITS), -+ -+ glue(pl110_draw_line1_lblp_rgb,BITS), -+ glue(pl110_draw_line2_lblp_rgb,BITS), -+ glue(pl110_draw_line4_lblp_rgb,BITS), -+ glue(pl110_draw_line8_lblp_rgb,BITS), -+ glue(pl110_draw_line16_lblp_rgb,BITS), -+ glue(pl110_draw_line32_lblp_rgb,BITS), -+ -+ glue(pl110_draw_line1_bbbp_rgb,BITS), -+ glue(pl110_draw_line2_bbbp_rgb,BITS), -+ glue(pl110_draw_line4_bbbp_rgb,BITS), -+ glue(pl110_draw_line8_bbbp_rgb,BITS), -+ glue(pl110_draw_line16_bbbp_rgb,BITS), -+ glue(pl110_draw_line32_bbbp_rgb,BITS), -+ -+ glue(pl110_draw_line1_lbbp_rgb,BITS), -+ glue(pl110_draw_line2_lbbp_rgb,BITS), -+ glue(pl110_draw_line4_lbbp_rgb,BITS), -+ glue(pl110_draw_line8_lbbp_rgb,BITS), -+ glue(pl110_draw_line16_lbbp_rgb,BITS), -+ glue(pl110_draw_line32_lbbp_rgb,BITS), - }; - - #undef BITS -@@ -61,18 +92,18 @@ static drawfn glue(pl110_draw_fn_,BITS)[ - #else - - #if ORDER == 0 --#define NAME glue(lblp, BITS) -+#define NAME glue(glue(lblp_, BORDER), BITS) - #ifdef WORDS_BIGENDIAN - #define SWAP_WORDS 1 - #endif - #elif ORDER == 1 --#define NAME glue(bbbp, BITS) -+#define NAME glue(glue(bbbp_, BORDER), BITS) - #ifndef WORDS_BIGENDIAN - #define SWAP_WORDS 1 - #endif - #else - #define SWAP_PIXELS 1 --#define NAME glue(lbbp, BITS) -+#define NAME glue(glue(lbbp_, BORDER), BITS) - #ifdef WORDS_BIGENDIAN - #define SWAP_WORDS 1 - #endif -@@ -195,27 +226,34 @@ static void glue(pl110_draw_line16_,NAME - #ifdef SWAP_WORDS - data = bswap32(data); - #endif -+#ifdef RGB -+#define LSB r -+#define MSB b -+#else -+#define LSB b -+#define MSB r -+#endif - #if 0 -- r = data & 0x1f; -+ LSB = data & 0x1f; - data >>= 5; - g = data & 0x3f; - data >>= 6; -- b = data & 0x1f; -+ MSB = data & 0x1f; - data >>= 5; - #else -- r = (data & 0x1f) << 3; -+ LSB = (data & 0x1f) << 3; - data >>= 5; - g = (data & 0x3f) << 2; - data >>= 6; -- b = (data & 0x1f) << 3; -+ MSB = (data & 0x1f) << 3; - data >>= 5; - #endif - COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); -- r = (data & 0x1f) << 3; -+ LSB = (data & 0x1f) << 3; - data >>= 5; - g = (data & 0x3f) << 2; - data >>= 6; -- b = (data & 0x1f) << 3; -+ MSB = (data & 0x1f) << 3; - data >>= 5; - COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); - width -= 2; -@@ -229,14 +267,21 @@ static void glue(pl110_draw_line32_,NAME - unsigned int r, g, b; - while (width > 0) { - data = *(uint32_t *)src; -+#ifdef RGB -+#define LSB r -+#define MSB b -+#else -+#define LSB b -+#define MSB r -+#endif - #ifdef SWAP_WORDS -- r = data & 0xff; -+ LSB = data & 0xff; - g = (data >> 8) & 0xff; -- b = (data >> 16) & 0xff; -+ MSB = (data >> 16) & 0xff; - #else -- r = (data >> 24) & 0xff; -+ LSB = (data >> 24) & 0xff; - g = (data >> 16) & 0xff; -- b = (data >> 8) & 0xff; -+ MSB = (data >> 8) & 0xff; - #endif - COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); - width--; diff --git a/packages/qemu/files/arm_nptl.patch b/packages/qemu/files/arm_nptl.patch deleted file mode 100644 index f9b10aebc5..0000000000 --- a/packages/qemu/files/arm_nptl.patch +++ /dev/null @@ -1,857 +0,0 @@ -Index: qemu/configure -=================================================================== ---- qemu.orig/configure 2006-08-26 16:31:53.000000000 +0100 -+++ qemu/configure 2006-08-26 16:31:53.000000000 +0100 -@@ -97,6 +97,7 @@ - build_docs="no" - build_acpi_tables="no" - uname_release="" -+nptl="yes" - - # OS specific - targetos=`uname -s` -@@ -243,6 +244,8 @@ - ;; - --enable-iasl) build_acpi_tables="yes" - ;; -+ --disable-nptl) nptl="no" -+ ;; - esac - done - -@@ -441,6 +444,23 @@ - fi - fi - -+# check NPTL support -+cat > $TMPC < -+void foo() -+{ -+#ifndef CLONE_SETTLS -+#error bork -+#endif -+} -+EOF -+ -+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then -+ : -+else -+ nptl="no" -+fi -+ - ########################################## - # SDL probe - -@@ -559,6 +579,7 @@ - fi - echo "FMOD support $fmod $fmod_support" - echo "kqemu support $kqemu" -+echo "NPTL support $nptl" - echo "Documentation $build_docs" - [ ! -z "$uname_release" ] && \ - echo "uname -r $uname_release" -@@ -880,6 +901,14 @@ - echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak - fi - fi -+else -+ if test "$nptl" = "yes" ; then -+ case "$target_cpu" in -+ arm | armeb) -+ echo "#define USE_NPTL 1" >> $config_h -+ ;; -+ esac -+ fi - fi - - if test "$cocoa" = "yes" ; then -Index: qemu/exec-all.h -=================================================================== ---- qemu.orig/exec-all.h 2006-08-26 16:28:32.000000000 +0100 -+++ qemu/exec-all.h 2006-08-26 16:31:53.000000000 +0100 -@@ -347,163 +347,7 @@ - extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; - extern void *io_mem_opaque[IO_MEM_NB_ENTRIES]; - --#ifdef __powerpc__ --static inline int testandset (int *p) --{ -- int ret; -- __asm__ __volatile__ ( -- "0: lwarx %0,0,%1\n" -- " xor. %0,%3,%0\n" -- " bne 1f\n" -- " stwcx. %2,0,%1\n" -- " bne- 0b\n" -- "1: " -- : "=&r" (ret) -- : "r" (p), "r" (1), "r" (0) -- : "cr0", "memory"); -- return ret; --} --#endif -- --#ifdef __i386__ --static inline int testandset (int *p) --{ -- long int readval = 0; -- -- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -- : "+m" (*p), "+a" (readval) -- : "r" (1) -- : "cc"); -- return readval; --} --#endif -- --#ifdef __x86_64__ --static inline int testandset (int *p) --{ -- long int readval = 0; -- -- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -- : "+m" (*p), "+a" (readval) -- : "r" (1) -- : "cc"); -- return readval; --} --#endif -- --#ifdef __s390__ --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" -- " jl 0b" -- : "=&d" (ret) -- : "r" (1), "a" (p), "0" (*p) -- : "cc", "memory" ); -- return ret; --} --#endif -- --#ifdef __alpha__ --static inline int testandset (int *p) --{ -- int ret; -- unsigned long one; -- -- __asm__ __volatile__ ("0: mov 1,%2\n" -- " ldl_l %0,%1\n" -- " stl_c %2,%1\n" -- " beq %2,1f\n" -- ".subsection 2\n" -- "1: br 0b\n" -- ".previous" -- : "=r" (ret), "=m" (*p), "=r" (one) -- : "m" (*p)); -- return ret; --} --#endif -- --#ifdef __sparc__ --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__("ldstub [%1], %0" -- : "=r" (ret) -- : "r" (p) -- : "memory"); -- -- return (ret ? 1 : 0); --} --#endif -- --#ifdef __arm__ --static inline int testandset (int *spinlock) --{ -- register unsigned int ret; -- __asm__ __volatile__("swp %0, %1, [%2]" -- : "=r"(ret) -- : "0"(1), "r"(spinlock)); -- -- return ret; --} --#endif -- --#ifdef __mc68000 --static inline int testandset (int *p) --{ -- char ret; -- __asm__ __volatile__("tas %1; sne %0" -- : "=r" (ret) -- : "m" (p) -- : "cc","memory"); -- return ret; --} --#endif -- --#ifdef __ia64 --#include -- --static inline int testandset (int *p) --{ -- return __sync_lock_test_and_set (p, 1); --} --#endif -- --typedef int spinlock_t; -- --#define SPIN_LOCK_UNLOCKED 0 -- --#if defined(CONFIG_USER_ONLY) --static inline void spin_lock(spinlock_t *lock) --{ -- while (testandset(lock)); --} -- --static inline void spin_unlock(spinlock_t *lock) --{ -- *lock = 0; --} -- --static inline int spin_trylock(spinlock_t *lock) --{ -- return !testandset(lock); --} --#else --static inline void spin_lock(spinlock_t *lock) --{ --} -- --static inline void spin_unlock(spinlock_t *lock) --{ --} -- --static inline int spin_trylock(spinlock_t *lock) --{ -- return 1; --} --#endif -+#include "qemu_spinlock.h" - - extern spinlock_t tb_lock; - -Index: qemu/linux-user/arm/syscall.h -=================================================================== ---- qemu.orig/linux-user/arm/syscall.h 2006-03-09 19:18:11.000000000 +0000 -+++ qemu/linux-user/arm/syscall.h 2006-08-26 16:31:53.000000000 +0100 -@@ -28,7 +28,9 @@ - #define ARM_SYSCALL_BASE 0x900000 - #define ARM_THUMB_SYSCALL 0 - --#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2) -+#define ARM_NR_BASE 0xf0000 -+#define ARM_NR_cacheflush (ARM_NR_BASE + 2) -+#define ARM_NR_set_tls (ARM_NR_BASE + 5) - - #define ARM_NR_semihosting 0x123456 - #define ARM_NR_thumb_semihosting 0xAB -Index: qemu/linux-user/main.c -=================================================================== ---- qemu.orig/linux-user/main.c 2006-08-26 16:28:40.000000000 +0100 -+++ qemu/linux-user/main.c 2006-08-26 16:31:53.000000000 +0100 -@@ -309,6 +309,50 @@ - } - } - -+/* Handle a jump to the kernel code page. */ -+static int -+do_kernel_trap(CPUARMState *env) -+{ -+ uint32_t addr; -+ uint32_t *ptr; -+ uint32_t cpsr; -+ -+ switch (env->regs[15]) { -+ case 0xffff0fc0: /* __kernel_cmpxchg */ -+ /* XXX: This only works between threads, not between processes. -+ Use native atomic operations. */ -+ /* ??? This probably breaks horribly if the access segfaults. */ -+ cpu_lock(); -+ ptr = (uint32_t *)env->regs[2]; -+ cpsr = cpsr_read(env); -+ if (*ptr == env->regs[0]) { -+ *ptr = env->regs[1]; -+ env->regs[0] = 0; -+ cpsr |= CPSR_C; -+ } else { -+ env->regs[0] = -1; -+ cpsr &= ~CPSR_C; -+ } -+ cpsr_write(env, cpsr, CPSR_C); -+ cpu_unlock(); -+ break; -+ case 0xffff0fe0: /* __kernel_get_tls */ -+ env->regs[0] = env->cp15.c13_tls; -+ break; -+ default: -+ return 1; -+ } -+ /* Jump back to the caller. */ -+ addr = env->regs[14]; -+ if (addr & 1) { -+ env->thumb = 1; -+ addr &= ~1; -+ } -+ env->regs[15] = addr; -+ -+ return 0; -+} -+ - void cpu_loop(CPUARMState *env) - { - int trapnr; -@@ -365,10 +409,8 @@ - } - } - -- if (n == ARM_NR_cacheflush) { -- arm_cache_flush(env->regs[0], env->regs[1]); -- } else if (n == ARM_NR_semihosting -- || n == ARM_NR_thumb_semihosting) { -+ if (n == ARM_NR_semihosting -+ || n == ARM_NR_thumb_semihosting) { - env->regs[0] = do_arm_semihosting (env); - } else if (n == 0 || n >= ARM_SYSCALL_BASE - || (env->thumb && n == ARM_THUMB_SYSCALL)) { -@@ -379,14 +421,34 @@ - n -= ARM_SYSCALL_BASE; - env->eabi = 0; - } -- env->regs[0] = do_syscall(env, -- n, -- env->regs[0], -- env->regs[1], -- env->regs[2], -- env->regs[3], -- env->regs[4], -- env->regs[5]); -+ if ( n > ARM_NR_BASE) { -+ switch (n) -+ { -+ case ARM_NR_cacheflush: -+ arm_cache_flush(env->regs[0], env->regs[1]); -+ break; -+#ifdef USE_NPTL -+ case ARM_NR_set_tls: -+ cpu_set_tls(env, env->regs[0]); -+ env->regs[0] = 0; -+ break; -+#endif -+ default: -+ printf ("Error: Bad syscall: %x\n", n); -+ goto error; -+ } -+ } -+ else -+ { -+ env->regs[0] = do_syscall(env, -+ n, -+ env->regs[0], -+ env->regs[1], -+ env->regs[2], -+ env->regs[3], -+ env->regs[4], -+ env->regs[5]); -+ } - } else { - goto error; - } -@@ -425,6 +487,10 @@ - } - } - break; -+ case EXCP_KERNEL_TRAP: -+ if (do_kernel_trap(env)) -+ goto error; -+ break; - default: - error: - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", -@@ -1639,6 +1705,10 @@ - ts->heap_base = info->brk; - /* This will be filled in on the first SYS_HEAPINFO call. */ - ts->heap_limit = 0; -+ /* Register the magic kernel code page. The cpu will generate a -+ special exception when it tries to execute code here. We can't -+ put real code here because it may be in use by the host kernel. */ -+ page_set_flags(0xffff0000, 0xffff0fff, 0); - } - #elif defined(TARGET_SPARC) - { -Index: qemu/linux-user/qemu.h -=================================================================== ---- qemu.orig/linux-user/qemu.h 2006-08-26 16:28:40.000000000 +0100 -+++ qemu/linux-user/qemu.h 2006-08-26 16:33:50.000000000 +0100 -@@ -75,6 +75,9 @@ - uint32_t v86mask; - #endif - int used; /* non zero if used */ -+#ifdef USE_NPTL -+ uint32_t *child_tidptr; -+#endif - struct image_info *info; - uint8_t stack[0]; - } __attribute__((aligned(16))) TaskState; -Index: qemu/linux-user/syscall.c -=================================================================== ---- qemu.orig/linux-user/syscall.c 2006-08-26 16:28:40.000000000 +0100 -+++ qemu/linux-user/syscall.c 2006-08-26 16:31:53.000000000 +0100 -@@ -66,9 +66,18 @@ - #include - - #include "qemu.h" -+#include "qemu_spinlock.h" - - //#define DEBUG - -+#ifdef USE_NPTL -+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \ -+ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID) -+#else -+/* XXX: Hardcode the above values. */ -+#define CLONE_NPTL_FLAGS2 0 -+#endif -+ - #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) - /* 16 bit uid wrappers emulation */ - #define USE_UID16 -@@ -1602,20 +1611,38 @@ - thread/process */ - #define NEW_STACK_SIZE 8192 - -+#ifdef USE_NPTL -+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED; -+#endif -+ - static int clone_func(void *arg) - { - CPUState *env = arg; -+#ifdef HAVE_NPTL -+ /* Wait until the parent has finshed initializing the tls state. */ -+ while (!spin_trylock(&nptl_lock)) -+ usleep(1); -+ spin_unlock(&nptl_lock); -+#endif - cpu_loop(env); - /* never exits */ - return 0; - } - --int do_fork(CPUState *env, unsigned int flags, unsigned long newsp) -+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp, -+ uint32_t *parent_tidptr, void *newtls, -+ uint32_t *child_tidptr) - { - int ret; - TaskState *ts; - uint8_t *new_stack; - CPUState *new_env; -+#ifdef USE_NPTL -+ unsigned int nptl_flags; -+ -+ if (flags & CLONE_PARENT_SETTID) -+ *parent_tidptr = gettid(); -+#endif - - if (flags & CLONE_VM) { - ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); -@@ -1665,16 +1692,60 @@ - #error unsupported target CPU - #endif - new_env->opaque = ts; -+#ifdef USE_NPTL -+ nptl_flags = flags; -+ flags &= ~CLONE_NPTL_FLAGS2; -+ if (nptl_flags & CLONE_CHILD_CLEARTID) { -+ ts->child_tidptr = child_tidptr; -+ } -+ if (nptl_flags & CLONE_SETTLS) -+ cpu_set_tls (new_env, newtls); -+ /* Grab the global cpu lock so that the thread setup appears -+ atomic. */ -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ spin_lock(&nptl_lock); -+#else -+ if (flags & CLONE_NPTL_FLAGS2) -+ return -EINVAL; -+#endif -+ - #ifdef __ia64__ - ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); - #else - ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); - #endif -+#ifdef USE_NPTL -+ if (ret != -1) { -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ *child_tidptr = ret; -+ } -+ /* Allow the child to continue. */ -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ spin_unlock(&nptl_lock); -+#endif - } else { -- /* if no CLONE_VM, we consider it is a fork */ -- if ((flags & ~CSIGNAL) != 0) -- return -EINVAL; -- ret = fork(); -+ /* if no CLONE_VM, we consider it is a fork */ -+ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0) -+ return -EINVAL; -+ ret = fork(); -+#ifdef USE_NPTL -+ /* There is a race condition here. The parent process could -+ theoretically read the TID in the child process before the child -+ tid is set. This would require using either ptrace -+ (not implemented) or having *_tidptr to point at a shared memory -+ mapping. We can't repeat the spinlock hack used above because -+ the child process gets its own copy of the lock. */ -+ if (ret == 0) { -+ /* Child Process. */ -+ if (flags & CLONE_CHILD_SETTID) -+ *child_tidptr = gettid(); -+ ts = (TaskState *)env->opaque; -+ if (flags & CLONE_CHILD_CLEARTID) -+ ts->child_tidptr = child_tidptr; -+ if (flags & CLONE_SETTLS) -+ cpu_set_tls (env, newtls); -+ } -+#endif - } - return ret; - } -@@ -1918,7 +1989,7 @@ - ret = do_brk(arg1); - break; - case TARGET_NR_fork: -- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0)); -+ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL)); - break; - case TARGET_NR_waitpid: - { -@@ -2989,7 +3060,8 @@ - ret = get_errno(fsync(arg1)); - break; - case TARGET_NR_clone: -- ret = get_errno(do_fork(cpu_env, arg1, arg2)); -+ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3, -+ (void *)arg4, (uint32_t *)arg5)); - break; - #ifdef __NR_exit_group - /* new thread calls */ -@@ -3339,7 +3411,8 @@ - #endif - #ifdef TARGET_NR_vfork - case TARGET_NR_vfork: -- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0)); -+ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0, -+ NULL, NULL, NULL)); - break; - #endif - #ifdef TARGET_NR_ugetrlimit -@@ -3838,4 +3911,3 @@ - #endif - return ret; - } -- -Index: qemu/target-arm/cpu.h -=================================================================== ---- qemu.orig/target-arm/cpu.h 2006-03-09 19:18:27.000000000 +0000 -+++ qemu/target-arm/cpu.h 2006-08-26 16:31:53.000000000 +0100 -@@ -35,6 +35,9 @@ - #define EXCP_IRQ 5 - #define EXCP_FIQ 6 - #define EXCP_BKPT 7 -+#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */ -+ -+ - - /* We currently assume float and double are IEEE single and double - precision respectively. -@@ -85,6 +88,7 @@ - uint32_t c9_data; - uint32_t c13_fcse; /* FCSE PID. */ - uint32_t c13_context; /* Context ID. */ -+ uint32_t c13_tls; /* Paul Brook told me to just add this ;) */ - } cp15; - - /* Internal CPU feature flags. */ -@@ -135,6 +139,15 @@ - int cpu_arm_signal_handler(int host_signum, struct siginfo *info, - void *puc); - -+void cpu_lock(void); -+void cpu_unlock(void); -+#if defined(USE_NPTL) -+static inline void cpu_set_tls(CPUARMState *env, void *newtls) -+{ -+ env->cp15.c13_tls = (uint32_t)newtls; -+} -+#endif -+ - #define CPSR_M (0x1f) - #define CPSR_T (1 << 5) - #define CPSR_F (1 << 6) -@@ -146,7 +159,11 @@ - #define CPSR_J (1 << 24) - #define CPSR_IT_0_1 (3 << 25) - #define CPSR_Q (1 << 27) --#define CPSR_NZCV (0xf << 28) -+#define CPSR_V (1 << 28) -+#define CPSR_C (1 << 29) -+#define CPSR_Z (1 << 30) -+#define CPSR_N (1 << 31) -+#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V) - - #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV) - /* Return the current CPSR value. */ -Index: qemu/target-arm/exec.h -=================================================================== ---- qemu.orig/target-arm/exec.h 2006-03-09 19:18:27.000000000 +0000 -+++ qemu/target-arm/exec.h 2006-08-26 16:31:53.000000000 +0100 -@@ -51,8 +51,6 @@ - - /* In op_helper.c */ - --void cpu_lock(void); --void cpu_unlock(void); - void helper_set_cp15(CPUState *, uint32_t, uint32_t); - uint32_t helper_get_cp15(CPUState *, uint32_t); - -Index: qemu/target-arm/op.c -=================================================================== ---- qemu.orig/target-arm/op.c 2006-08-26 16:28:48.000000000 +0100 -+++ qemu/target-arm/op.c 2006-08-26 16:31:53.000000000 +0100 -@@ -891,6 +891,12 @@ - cpu_loop_exit(); - } - -+void OPPROTO op_kernel_trap(void) -+{ -+ env->exception_index = EXCP_KERNEL_TRAP; -+ cpu_loop_exit(); -+} -+ - /* VFP support. We follow the convention used for VFP instrunctions: - Single precition routines have a "s" suffix, double precision a - "d" suffix. */ -Index: qemu/target-arm/translate.c -=================================================================== ---- qemu.orig/target-arm/translate.c 2006-08-26 16:28:48.000000000 +0100 -+++ qemu/target-arm/translate.c 2006-08-26 16:31:53.000000000 +0100 -@@ -2382,6 +2382,7 @@ - s->is_jmp = DISAS_JUMP; - } - -+ - /* generate intermediate code in gen_opc_buf and gen_opparam_buf for - basic block 'tb'. If search_pc is TRUE, also generate PC - information for each intermediate instruction. */ -@@ -2416,6 +2417,15 @@ - nb_gen_labels = 0; - lj = -1; - do { -+#ifdef CONFIG_USER_ONLY -+ /* Intercept jump to the magic kernel page. */ -+ if (dc->pc > 0xffff0000) { -+ gen_op_kernel_trap(); -+ dc->is_jmp = DISAS_UPDATE; -+ break; -+ } -+#endif -+ - if (env->nb_breakpoints > 0) { - for(j = 0; j < env->nb_breakpoints; j++) { - if (env->breakpoints[j] == dc->pc) { -Index: qemu/qemu_spinlock.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ qemu/qemu_spinlock.h 2006-08-26 16:31:53.000000000 +0100 -@@ -0,0 +1,182 @@ -+/* -+ * internal execution defines for qemu -+ * -+ * Copyright (c) 2003 Fabrice Bellard -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+ -+#ifndef _QEMU_SPINLOCK_H -+#define _QEMU_SPINLOCK_H -+ -+#ifdef __powerpc__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ __asm__ __volatile__ ( -+ "0: lwarx %0,0,%1\n" -+ " xor. %0,%3,%0\n" -+ " bne 1f\n" -+ " stwcx. %2,0,%1\n" -+ " bne- 0b\n" -+ "1: " -+ : "=&r" (ret) -+ : "r" (p), "r" (1), "r" (0) -+ : "cr0", "memory"); -+ return ret; -+} -+#endif -+ -+#ifdef __i386__ -+static inline int testandset (int *p) -+{ -+ long int readval = 0; -+ -+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -+ : "+m" (*p), "+a" (readval) -+ : "r" (1) -+ : "cc"); -+ return readval; -+} -+#endif -+ -+#ifdef __x86_64__ -+static inline int testandset (int *p) -+{ -+ long int readval = 0; -+ -+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -+ : "+m" (*p), "+a" (readval) -+ : "r" (1) -+ : "cc"); -+ return readval; -+} -+#endif -+ -+#ifdef __s390__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ -+ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" -+ " jl 0b" -+ : "=&d" (ret) -+ : "r" (1), "a" (p), "0" (*p) -+ : "cc", "memory" ); -+ return ret; -+} -+#endif -+ -+#ifdef __alpha__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ unsigned long one; -+ -+ __asm__ __volatile__ ("0: mov 1,%2\n" -+ " ldl_l %0,%1\n" -+ " stl_c %2,%1\n" -+ " beq %2,1f\n" -+ ".subsection 2\n" -+ "1: br 0b\n" -+ ".previous" -+ : "=r" (ret), "=m" (*p), "=r" (one) -+ : "m" (*p)); -+ return ret; -+} -+#endif -+ -+#ifdef __sparc__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ -+ __asm__ __volatile__("ldstub [%1], %0" -+ : "=r" (ret) -+ : "r" (p) -+ : "memory"); -+ -+ return (ret ? 1 : 0); -+} -+#endif -+ -+#ifdef __arm__ -+static inline int testandset (int *spinlock) -+{ -+ register unsigned int ret; -+ __asm__ __volatile__("swp %0, %1, [%2]" -+ : "=r"(ret) -+ : "0"(1), "r"(spinlock)); -+ -+ return ret; -+} -+#endif -+ -+#ifdef __mc68000 -+static inline int testandset (int *p) -+{ -+ char ret; -+ __asm__ __volatile__("tas %1; sne %0" -+ : "=r" (ret) -+ : "m" (p) -+ : "cc","memory"); -+ return ret; -+} -+#endif -+ -+#ifdef __ia64 -+#include -+ -+static inline int testandset (int *p) -+{ -+ return __sync_lock_test_and_set (p, 1); -+} -+#endif -+ -+typedef int spinlock_t; -+ -+#define SPIN_LOCK_UNLOCKED 0 -+ -+#if defined(CONFIG_USER_ONLY) -+static inline void spin_lock(spinlock_t *lock) -+{ -+ while (testandset(lock)); -+} -+ -+static inline void spin_unlock(spinlock_t *lock) -+{ -+ *lock = 0; -+} -+ -+static inline int spin_trylock(spinlock_t *lock) -+{ -+ return !testandset(lock); -+} -+#else -+static inline void spin_lock(spinlock_t *lock) -+{ -+} -+ -+static inline void spin_unlock(spinlock_t *lock) -+{ -+} -+ -+static inline int spin_trylock(spinlock_t *lock) -+{ -+ return 1; -+} -+#endif -+ -+#endif /* ! _QEMU_SPINLOCK_H */ diff --git a/packages/qemu/files/compiler.patch b/packages/qemu/files/compiler.patch deleted file mode 100644 index dad18b3a61..0000000000 --- a/packages/qemu/files/compiler.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- qemu/usb-linux.c~ 2006-07-19 19:06:15.000000000 +0100 -+++ qemu/usb-linux.c 2006-10-02 12:49:00.000000000 +0100 -@@ -26,7 +26,6 @@ - #if defined(__linux__) - #include - #include --#include - #include - #include - diff --git a/packages/qemu/files/configure.patch b/packages/qemu/files/configure.patch deleted file mode 100644 index ea83f8cd6d..0000000000 --- a/packages/qemu/files/configure.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: qemu/configure -=================================================================== ---- qemu.orig/configure 2006-02-09 17:58:47.000000000 +0000 -+++ qemu/configure 2006-02-21 17:47:31.000000000 +0000 -@@ -482,7 +482,7 @@ - fi - echo "HOST_CC=$host_cc" >> $config_mak - echo "AR=$ar" >> $config_mak --echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak -+echo "STRIP=$strip" >> $config_mak - echo "CFLAGS=$CFLAGS" >> $config_mak - echo "LDFLAGS=$LDFLAGS" >> $config_mak - echo "EXESUF=$EXESUF" >> $config_mak diff --git a/packages/qemu/files/fix_segfault.patch b/packages/qemu/files/fix_segfault.patch deleted file mode 100644 index 976c75cd60..0000000000 --- a/packages/qemu/files/fix_segfault.patch +++ /dev/null @@ -1,46 +0,0 @@ -Index: qemu/Makefile.target -=================================================================== ---- qemu.orig/Makefile.target 2007-06-29 10:57:58.000000000 +0000 -+++ qemu/Makefile.target 2007-06-29 10:58:01.000000000 +0000 -@@ -241,7 +241,6 @@ - ifdef CONFIG_LINUX_USER - OBJS= main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o \ - elfload.o linuxload.o --LIBS+= $(AIOLIBS) - ifdef TARGET_HAS_BFLT - OBJS+= flatload.o - endif -Index: qemu/linux-user/syscall.c -=================================================================== ---- qemu.orig/linux-user/syscall.c 2007-06-29 10:58:01.000000000 +0000 -+++ qemu/linux-user/syscall.c 2007-06-29 10:58:30.000000000 +0000 -@@ -4872,29 +4872,6 @@ - goto unimplemented_nowarn; - #endif - --#ifdef TARGET_NR_clock_gettime -- case TARGET_NR_clock_gettime: -- { -- struct timespec ts; -- ret = get_errno(clock_gettime(arg1, &ts)); -- if (!is_error(ret)) { -- host_to_target_timespec(arg2, &ts); -- } -- break; -- } --#endif --#ifdef TARGET_NR_clock_getres -- case TARGET_NR_clock_getres: -- { -- struct timespec ts; -- ret = get_errno(clock_getres(arg1, &ts)); -- if (!is_error(ret)) { -- host_to_target_timespec(arg2, &ts); -- } -- break; -- } --#endif -- - default: - unimplemented: - gemu_log("qemu: Unsupported syscall: %d\n", num); diff --git a/packages/qemu/files/makefile.patch b/packages/qemu/files/makefile.patch deleted file mode 100644 index 75b5ac9c71..0000000000 --- a/packages/qemu/files/makefile.patch +++ /dev/null @@ -1,37 +0,0 @@ -Index: qemu/Makefile -=================================================================== ---- qemu.orig/Makefile 2007-07-30 18:25:50.000000000 +0200 -+++ qemu/Makefile 2007-07-30 18:26:13.000000000 +0200 -@@ -5,14 +5,14 @@ - .PHONY: all clean distclean dvi info install install-doc tar tarbin \ - speed test test2 html dvi info - --CFLAGS=-Wall -O2 -g -fno-strict-aliasing -I. -+CFLAGS+=-Wall -O2 -g -fno-strict-aliasing -I. - ifdef CONFIG_DARWIN - CFLAGS+= -mdynamic-no-pic - endif - ifeq ($(ARCH),sparc) - CFLAGS+=-mcpu=ultrasparc - endif --LDFLAGS=-g -+LDFLAGS+=-g - LIBS= - DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE - TOOLS=qemu-img$(EXESUF) -Index: qemu/Makefile.target -=================================================================== ---- qemu.orig/Makefile.target 2007-07-30 18:27:17.000000000 +0200 -+++ qemu/Makefile.target 2007-07-30 18:27:23.000000000 +0200 -@@ -17,9 +17,9 @@ - VPATH+=:$(SRC_PATH)/linux-user - DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH) - endif --CFLAGS=-Wall -O2 -g -fno-strict-aliasing -+CFLAGS+=-Wall -O2 -g -fno-strict-aliasing - #CFLAGS+=-Werror --LDFLAGS=-g -+LDFLAGS+=-g - LIBS= - HELPER_CFLAGS=$(CFLAGS) - DYNGEN=../dyngen$(EXESUF) diff --git a/packages/qemu/files/no-strip.patch b/packages/qemu/files/no-strip.patch deleted file mode 100644 index 59ed8771fe..0000000000 --- a/packages/qemu/files/no-strip.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- qemu.orig/Makefile -+++ qemu/Makefile -@@ -68,7 +68,7 @@ - - install: all $(if $(BUILD_DOCS),install-doc) - mkdir -p "$(DESTDIR)$(bindir)" -- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)" -+ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)" - mkdir -p "$(DESTDIR)$(datadir)" - for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \ - video.x openbios-sparc32 pxe-ne2k_pci.bin \ ---- qemu.orig/Makefile.target -+++ qemu/Makefile.target -@@ -655,7 +655,7 @@ - - install: all - ifneq ($(PROGS),) -- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)" -+ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)" - endif - - ifneq ($(wildcard .depend),) diff --git a/packages/qemu/files/pl110_rgb-r0.patch b/packages/qemu/files/pl110_rgb-r0.patch deleted file mode 100644 index 09e5898d3a..0000000000 --- a/packages/qemu/files/pl110_rgb-r0.patch +++ /dev/null @@ -1,219 +0,0 @@ -Index: qemu/hw/pl110.c -=================================================================== ---- qemu.orig/hw/pl110.c 2006-04-11 21:49:46.000000000 +0100 -+++ qemu/hw/pl110.c 2006-05-24 22:53:00.000000000 +0100 -@@ -10,6 +10,7 @@ - #include "vl.h" - - #define PL110_CR_EN 0x001 -+#define PL110_CR_BGR 0x100 - #define PL110_CR_BEBO 0x200 - #define PL110_CR_BEPO 0x400 - #define PL110_CR_PWR 0x800 -@@ -115,6 +116,7 @@ - int first, last = 0; - int dirty, new_dirty; - int i; -+ int bpp_offset; - - if (!pl110_enabled(s)) - return; -@@ -146,12 +148,17 @@ - fprintf(stderr, "pl110: Bad color depth\n"); - exit(1); - } -+ if (s->cr & PL110_CR_BGR) -+ bpp_offset = 0; -+ else -+ bpp_offset = 18; -+ - if (s->cr & PL110_CR_BEBO) -- fn = fntable[s->bpp + 6]; -+ fn = fntable[s->bpp + 6 + bpp_offset]; - else if (s->cr & PL110_CR_BEPO) -- fn = fntable[s->bpp + 12]; -+ fn = fntable[s->bpp + 12 + bpp_offset]; - else -- fn = fntable[s->bpp]; -+ fn = fntable[s->bpp + bpp_offset]; - - src_width = s->cols; - switch (s->bpp) { -Index: qemu/hw/pl110_template.h -=================================================================== ---- qemu.orig/hw/pl110_template.h 2006-02-19 12:31:32.000000000 +0000 -+++ qemu/hw/pl110_template.h 2006-05-24 23:04:03.000000000 +0100 -@@ -24,6 +24,16 @@ - #error unknown bit depth - #endif - -+#undef RGB -+#define BORDER bgr -+#define ORDER 0 -+#include "pl110_template.h" -+#define ORDER 1 -+#include "pl110_template.h" -+#define ORDER 2 -+#include "pl110_template.h" -+#define RGB -+#define BORDER rgb - #define ORDER 0 - #include "pl110_template.h" - #define ORDER 1 -@@ -33,26 +43,47 @@ - - static drawfn glue(pl110_draw_fn_,BITS)[18] = - { -- glue(pl110_draw_line1_lblp,BITS), -- glue(pl110_draw_line2_lblp,BITS), -- glue(pl110_draw_line4_lblp,BITS), -- glue(pl110_draw_line8_lblp,BITS), -- glue(pl110_draw_line16_lblp,BITS), -- glue(pl110_draw_line32_lblp,BITS), -- -- glue(pl110_draw_line1_bbbp,BITS), -- glue(pl110_draw_line2_bbbp,BITS), -- glue(pl110_draw_line4_bbbp,BITS), -- glue(pl110_draw_line8_bbbp,BITS), -- glue(pl110_draw_line16_bbbp,BITS), -- glue(pl110_draw_line32_bbbp,BITS), -- -- glue(pl110_draw_line1_lbbp,BITS), -- glue(pl110_draw_line2_lbbp,BITS), -- glue(pl110_draw_line4_lbbp,BITS), -- glue(pl110_draw_line8_lbbp,BITS), -- glue(pl110_draw_line16_lbbp,BITS), -- glue(pl110_draw_line32_lbbp,BITS) -+ glue(pl110_draw_line1_lblp_bgr,BITS), -+ glue(pl110_draw_line2_lblp_bgr,BITS), -+ glue(pl110_draw_line4_lblp_bgr,BITS), -+ glue(pl110_draw_line8_lblp_bgr,BITS), -+ glue(pl110_draw_line16_lblp_bgr,BITS), -+ glue(pl110_draw_line32_lblp_bgr,BITS), -+ -+ glue(pl110_draw_line1_bbbp_bgr,BITS), -+ glue(pl110_draw_line2_bbbp_bgr,BITS), -+ glue(pl110_draw_line4_bbbp_bgr,BITS), -+ glue(pl110_draw_line8_bbbp_bgr,BITS), -+ glue(pl110_draw_line16_bbbp_bgr,BITS), -+ glue(pl110_draw_line32_bbbp_bgr,BITS), -+ -+ glue(pl110_draw_line1_lbbp_bgr,BITS), -+ glue(pl110_draw_line2_lbbp_bgr,BITS), -+ glue(pl110_draw_line4_lbbp_bgr,BITS), -+ glue(pl110_draw_line8_lbbp_bgr,BITS), -+ glue(pl110_draw_line16_lbbp_bgr,BITS), -+ glue(pl110_draw_line32_lbbp_bgr,BITS), -+ -+ glue(pl110_draw_line1_lblp_rgb,BITS), -+ glue(pl110_draw_line2_lblp_rgb,BITS), -+ glue(pl110_draw_line4_lblp_rgb,BITS), -+ glue(pl110_draw_line8_lblp_rgb,BITS), -+ glue(pl110_draw_line16_lblp_rgb,BITS), -+ glue(pl110_draw_line32_lblp_rgb,BITS), -+ -+ glue(pl110_draw_line1_bbbp_rgb,BITS), -+ glue(pl110_draw_line2_bbbp_rgb,BITS), -+ glue(pl110_draw_line4_bbbp_rgb,BITS), -+ glue(pl110_draw_line8_bbbp_rgb,BITS), -+ glue(pl110_draw_line16_bbbp_rgb,BITS), -+ glue(pl110_draw_line32_bbbp_rgb,BITS), -+ -+ glue(pl110_draw_line1_lbbp_rgb,BITS), -+ glue(pl110_draw_line2_lbbp_rgb,BITS), -+ glue(pl110_draw_line4_lbbp_rgb,BITS), -+ glue(pl110_draw_line8_lbbp_rgb,BITS), -+ glue(pl110_draw_line16_lbbp_rgb,BITS), -+ glue(pl110_draw_line32_lbbp_rgb,BITS), - }; - - #undef BITS -@@ -61,18 +92,18 @@ - #else - - #if ORDER == 0 --#define NAME glue(lblp, BITS) -+#define NAME glue(glue(lblp_, BORDER), BITS) - #ifdef WORDS_BIGENDIAN - #define SWAP_WORDS 1 - #endif - #elif ORDER == 1 --#define NAME glue(bbbp, BITS) -+#define NAME glue(glue(bbbp_, BORDER), BITS) - #ifndef WORDS_BIGENDIAN - #define SWAP_WORDS 1 - #endif - #else - #define SWAP_PIXELS 1 --#define NAME glue(lbbp, BITS) -+#define NAME glue(glue(lbbp_, BORDER), BITS) - #ifdef WORDS_BIGENDIAN - #define SWAP_WORDS 1 - #endif -@@ -195,27 +226,34 @@ - #ifdef SWAP_WORDS - data = bswap32(data); - #endif -+#ifdef RGB -+#define LSB r -+#define MSB b -+#else -+#define LSB b -+#define MSB r -+#endif - #if 0 -- r = data & 0x1f; -+ LSB = data & 0x1f; - data >>= 5; - g = data & 0x3f; - data >>= 6; -- b = data & 0x1f; -+ MSB = data & 0x1f; - data >>= 5; - #else -- r = (data & 0x1f) << 3; -+ LSB = (data & 0x1f) << 3; - data >>= 5; - g = (data & 0x3f) << 2; - data >>= 6; -- b = (data & 0x1f) << 3; -+ MSB = (data & 0x1f) << 3; - data >>= 5; - #endif - COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); -- r = (data & 0x1f) << 3; -+ LSB = (data & 0x1f) << 3; - data >>= 5; - g = (data & 0x3f) << 2; - data >>= 6; -- b = (data & 0x1f) << 3; -+ MSB = (data & 0x1f) << 3; - data >>= 5; - COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); - width -= 2; -@@ -229,14 +267,21 @@ - unsigned int r, g, b; - while (width > 0) { - data = *(uint32_t *)src; -+#ifdef RGB -+#define LSB r -+#define MSB b -+#else -+#define LSB b -+#define MSB r -+#endif - #ifdef SWAP_WORDS -- r = data & 0xff; -+ LSB = data & 0xff; - g = (data >> 8) & 0xff; -- b = (data >> 16) & 0xff; -+ MSB = (data >> 16) & 0xff; - #else -- r = (data >> 24) & 0xff; -+ LSB = (data >> 24) & 0xff; - g = (data >> 16) & 0xff; -- b = (data >> 8) & 0xff; -+ MSB = (data >> 8) & 0xff; - #endif - COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); - width--; diff --git a/packages/qemu/files/qemu-0.9.0-nptl-update.patch b/packages/qemu/files/qemu-0.9.0-nptl-update.patch deleted file mode 100644 index 869acba2cf..0000000000 --- a/packages/qemu/files/qemu-0.9.0-nptl-update.patch +++ /dev/null @@ -1,294 +0,0 @@ -Index: qemu/linux-user/main.c -=================================================================== ---- qemu.orig/linux-user/main.c 2007-06-29 10:47:58.000000000 +0000 -+++ qemu/linux-user/main.c 2007-06-29 10:47:58.000000000 +0000 -@@ -156,7 +156,7 @@ - p[1] = tswapl(e2); - } - --uint64_t gdt_table[6]; -+uint64_t gdt_table[9]; - uint64_t idt_table[256]; - - /* only dpl matters as we do only user space emulation */ -@@ -1768,7 +1768,11 @@ - int optind; - const char *r; - int gdbstub_port = 0; -- -+ char *assume_kernel = getenv("QEMU_ASSUME_KERNEL"); -+ -+ if (assume_kernel) -+ setenv("LD_ASSUME_KERNEL", assume_kernel, 1); -+ - if (argc <= 1) - usage(); - -Index: qemu/linux-user/syscall.c -=================================================================== ---- qemu.orig/linux-user/syscall.c 2007-06-29 10:47:58.000000000 +0000 -+++ qemu/linux-user/syscall.c 2007-06-29 10:53:44.000000000 +0000 -@@ -60,6 +60,7 @@ - #define tchars host_tchars /* same as target */ - #define ltchars host_ltchars /* same as target */ - -+#include - #include - #include - #include -@@ -2122,6 +2123,80 @@ - return ret; - } - -+int do_set_thread_area(CPUX86State *env, target_ulong ptr) -+{ -+ uint64_t *gdt_table = g2h(env->gdt.base); -+ struct target_modify_ldt_ldt_s ldt_info; -+ struct target_modify_ldt_ldt_s *target_ldt_info; -+ int seg_32bit, contents, read_exec_only, limit_in_pages; -+ int seg_not_present, useable; -+ uint32_t *lp, entry_1, entry_2; -+ int i; -+ -+ lock_user_struct(target_ldt_info, ptr, 1); -+ ldt_info.entry_number = tswap32(target_ldt_info->entry_number); -+ ldt_info.base_addr = tswapl(target_ldt_info->base_addr); -+ ldt_info.limit = tswap32(target_ldt_info->limit); -+ ldt_info.flags = tswap32(target_ldt_info->flags); -+ if (ldt_info.entry_number == -1) { -+ for (i=6; i<8; i++) -+ if (gdt_table[i] == 0) { -+ ldt_info.entry_number = i; -+ target_ldt_info->entry_number = tswap32(i); -+ break; -+ } -+ } -+ unlock_user_struct(target_ldt_info, ptr, 0); -+ -+ if (ldt_info.entry_number < 6 || ldt_info.entry_number > 8) -+ return -EINVAL; -+ seg_32bit = ldt_info.flags & 1; -+ contents = (ldt_info.flags >> 1) & 3; -+ read_exec_only = (ldt_info.flags >> 3) & 1; -+ limit_in_pages = (ldt_info.flags >> 4) & 1; -+ seg_not_present = (ldt_info.flags >> 5) & 1; -+ useable = (ldt_info.flags >> 6) & 1; -+ -+ if (contents == 3) { -+ if (seg_not_present == 0) -+ return -EINVAL; -+ } -+ -+ /* NOTE: same code as Linux kernel */ -+ /* Allow LDTs to be cleared by the user. */ -+ if (ldt_info.base_addr == 0 && ldt_info.limit == 0) { -+ if ((contents == 0 && -+ read_exec_only == 1 && -+ seg_32bit == 0 && -+ limit_in_pages == 0 && -+ seg_not_present == 1 && -+ useable == 0 )) { -+ entry_1 = 0; -+ entry_2 = 0; -+ goto install; -+ } -+ } -+ -+ entry_1 = ((ldt_info.base_addr & 0x0000ffff) << 16) | -+ (ldt_info.limit & 0x0ffff); -+ entry_2 = (ldt_info.base_addr & 0xff000000) | -+ ((ldt_info.base_addr & 0x00ff0000) >> 16) | -+ (ldt_info.limit & 0xf0000) | -+ ((read_exec_only ^ 1) << 9) | -+ (contents << 10) | -+ ((seg_not_present ^ 1) << 15) | -+ (seg_32bit << 22) | -+ (limit_in_pages << 23) | -+ (useable << 20) | -+ 0x7000; -+ -+ /* Install the new entry ... */ -+install: -+ lp = (uint32_t *)(gdt_table + ldt_info.entry_number); -+ lp[0] = tswap32(entry_1); -+ lp[1] = tswap32(entry_2); -+ return 0; -+} - #endif /* defined(TARGET_I386) */ - - /* this stack is the equivalent of the kernel stack associated with a -@@ -2154,15 +2229,20 @@ - TaskState *ts; - uint8_t *new_stack; - CPUState *new_env; -+#if defined(TARGET_I386) -+ uint64_t *new_gdt_table; -+#endif - #ifdef USE_NPTL - unsigned int nptl_flags; - - if (flags & CLONE_PARENT_SETTID) - *parent_tidptr = gettid(); - #endif -- -+ - if (flags & CLONE_VM) { - ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); -+ if (!ts) -+ return -ENOMEM; - memset(ts, 0, sizeof(TaskState)); - new_stack = ts->stack; - ts->used = 1; -@@ -2174,6 +2254,29 @@ - #if defined(TARGET_I386) - if (!newsp) - newsp = env->regs[R_ESP]; -+ new_gdt_table = malloc(9 * 8); -+ if (!new_gdt_table) { -+ free(new_env); -+ return -ENOMEM; -+ } -+ /* Copy main GDT table from parent, but clear TLS entries */ -+ memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8); -+ memset(&new_gdt_table[6], 0, 3 * 8); -+ new_env->gdt.base = h2g(new_gdt_table); -+ if (flags & 0x00080000 /* CLONE_SETTLS */) { -+ ret = do_set_thread_area(new_env, new_env->regs[R_ESI]); -+ if (ret) { -+ free(new_gdt_table); -+ free(new_env); -+ return ret; -+ } -+ } -+ cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]); -+ cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]); -+ cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]); -+ cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]); -+ cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]); -+ cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]); - new_env->regs[R_ESP] = newsp; - new_env->regs[R_EAX] = 0; - #elif defined(TARGET_ARM) -@@ -2517,6 +2620,68 @@ - unlock_user_struct(target_ts, target_addr, 1); - } - -+static long do_futex(target_ulong uaddr, int op, uint32_t val, -+ target_ulong utime, target_ulong uaddr2, -+ uint32_t val3) -+{ -+ struct timespec host_utime; -+ unsigned long val2 = utime; -+ -+ if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) { -+ target_to_host_timespec(&host_utime, utime); -+ val2 = (unsigned long)&host_utime; -+ } -+ -+#ifdef BSWAP_NEEDED -+ switch(op) { -+ case FUTEX_CMP_REQUEUE: -+ val3 = tswap32(val3); -+ case FUTEX_REQUEUE: -+ val2 = tswap32(val2); -+ case FUTEX_WAIT: -+ case FUTEX_WAKE: -+ val = tswap32(val); -+ case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */ -+ case FUTEX_UNLOCK_PI: -+ break; -+ default: -+ gemu_log("qemu: Unsupported futex op %d\n", op); -+ return -ENOSYS; -+ } -+#if 0 /* No, it's worse than this */ -+ if (op == FUTEX_WAKE_OP) { -+ /* Need to munge the secondary operation (val3) */ -+ val3 = tswap32(val3); -+ int op2 = (val3 >> 28) & 7; -+ int cmp = (val3 >> 24) & 15; -+ int oparg = (val3 << 8) >> 20; -+ int cmparg = (val3 << 20) >> 20; -+ int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28); -+ -+ if (shift) -+ oparg = (oparg & 7) + 24 - (oparg & 24); -+ else oparg = -+ if (op2 == FUTEX_OP_ADD) { -+ gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n"); -+ return -ENOSYS; -+ } -+ if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE || -+ cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) { -+ gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg); -+ return -ENOSYS; -+ } -+ val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg; -+ } -+#endif -+#endif -+ return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3); -+} -+ -+int do_set_tid_address(target_ulong tidptr) -+{ -+ return syscall(__NR_set_tid_address, g2h(tidptr)); -+} -+ - long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, - long arg4, long arg5, long arg6) - { -@@ -2534,7 +2699,7 @@ - _mcleanup(); - #endif - gdb_exit(cpu_env, arg1); -- /* XXX: should free thread stack and CPU env */ -+ /* XXX: should free thread stack, GDT and CPU env */ - _exit(arg1); - ret = 0; /* avoid warning */ - break; -@@ -4642,6 +4807,9 @@ - ((CPUMIPSState *) cpu_env)->tls_value = arg1; - ret = 0; - break; -+#elif TARGET_i386 -+ ret = get_errno(do_set_thread_area(cpu_env, arg1)); -+ break; - #else - goto unimplemented_nowarn; - #endif -@@ -4655,6 +4823,21 @@ - goto unimplemented_nowarn; - #endif - -+#ifdef TARGET_NR_futex -+ case TARGET_NR_futex: -+ ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6)); -+ break; -+#endif -+#ifdef TARGET_NR_set_tid_address -+ case TARGET_NR_set_tid_address: -+ ret = get_errno(do_set_tid_address(arg1)); -+ break; -+#endif -+#ifdef TARGET_NR_set_robust_list -+ case TARGET_NR_set_robust_list: -+ goto unimplemented_nowarn; -+#endif -+ - #ifdef TARGET_NR_clock_gettime - case TARGET_NR_clock_gettime: - { -@@ -4678,12 +4861,6 @@ - } - #endif - --#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) -- case TARGET_NR_set_tid_address: -- ret = get_errno(set_tid_address((int *) arg1)); -- break; --#endif -- - default: - unimplemented: - gemu_log("qemu: Unsupported syscall: %d\n", num); diff --git a/packages/qemu/files/qemu-0.9.0-nptl.patch b/packages/qemu/files/qemu-0.9.0-nptl.patch deleted file mode 100644 index fc7b0cfa4b..0000000000 --- a/packages/qemu/files/qemu-0.9.0-nptl.patch +++ /dev/null @@ -1,892 +0,0 @@ -These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single -ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1 -immediately dies saying: - Error: f0005 - qemu: uncaught target signal 6 (Aborted) - exiting -while qemu-0.8.2 dies saying: - qemu: Unsupported syscall: 983045 - cannot set up thread-local storage: unknown error - -This file is a rediffing of the patches visible at -https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006 -which "patch" fails to apply automatically. -See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html - - Martin Guy, 27 Sept 2006 - -Index: qemu/configure -=================================================================== ---- qemu.orig/configure 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/configure 2007-06-29 10:47:58.000000000 +0000 -@@ -101,6 +101,7 @@ - darwin_user="no" - build_docs="no" - uname_release="" -+nptl="yes" - - # OS specific - targetos=`uname -s` -@@ -281,6 +282,8 @@ - *) echo "undefined SPARC architecture. Exiting";exit 1;; - esac - ;; -+ --disable-nptl) nptl="no" -+ ;; - esac - done - -@@ -355,6 +358,7 @@ - echo " --disable-linux-user disable all linux usermode emulation targets" - echo " --enable-darwin-user enable all darwin usermode emulation targets" - echo " --disable-darwin-user disable all darwin usermode emulation targets" -+echo " --disable-nptl disable usermode NPTL guest support" - echo " --fmod-lib path to FMOD library" - echo " --fmod-inc path to FMOD includes" - echo " --enable-uname-release=R Return R for uname -r in usermode emulation" -@@ -524,6 +528,23 @@ - } - EOF - -+# check NPTL support -+cat > $TMPC < -+void foo() -+{ -+#ifndef CLONE_SETTLS -+#error bork -+#endif -+} -+EOF -+ -+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then -+ : -+else -+ nptl="no" -+fi -+ - ########################################## - # SDL probe - -@@ -678,6 +699,7 @@ - echo "Documentation $build_docs" - [ ! -z "$uname_release" ] && \ - echo "uname -r $uname_release" -+echo "NPTL support $nptl" - - if test $sdl_too_old = "yes"; then - echo "-> Your SDL version is too old - please upgrade to have SDL support" -@@ -1057,6 +1079,14 @@ - echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak - fi - fi -+else -+ if test "$nptl" = "yes" ; then -+ case "$target_cpu" in -+ arm | armeb) -+ echo "#define USE_NPTL 1" >> $config_h -+ ;; -+ esac -+ fi - fi - - if test "$cocoa" = "yes" ; then -Index: qemu/exec-all.h -=================================================================== ---- qemu.orig/exec-all.h 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/exec-all.h 2007-06-29 10:47:58.000000000 +0000 -@@ -360,170 +360,7 @@ - extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; - extern void *io_mem_opaque[IO_MEM_NB_ENTRIES]; - --#if defined(__powerpc__) --static inline int testandset (int *p) --{ -- int ret; -- __asm__ __volatile__ ( -- "0: lwarx %0,0,%1\n" -- " xor. %0,%3,%0\n" -- " bne 1f\n" -- " stwcx. %2,0,%1\n" -- " bne- 0b\n" -- "1: " -- : "=&r" (ret) -- : "r" (p), "r" (1), "r" (0) -- : "cr0", "memory"); -- return ret; --} --#elif defined(__i386__) --static inline int testandset (int *p) --{ -- long int readval = 0; -- -- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -- : "+m" (*p), "+a" (readval) -- : "r" (1) -- : "cc"); -- return readval; --} --#elif defined(__x86_64__) --static inline int testandset (int *p) --{ -- long int readval = 0; -- -- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -- : "+m" (*p), "+a" (readval) -- : "r" (1) -- : "cc"); -- return readval; --} --#elif defined(__s390__) --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" -- " jl 0b" -- : "=&d" (ret) -- : "r" (1), "a" (p), "0" (*p) -- : "cc", "memory" ); -- return ret; --} --#elif defined(__alpha__) --static inline int testandset (int *p) --{ -- int ret; -- unsigned long one; -- -- __asm__ __volatile__ ("0: mov 1,%2\n" -- " ldl_l %0,%1\n" -- " stl_c %2,%1\n" -- " beq %2,1f\n" -- ".subsection 2\n" -- "1: br 0b\n" -- ".previous" -- : "=r" (ret), "=m" (*p), "=r" (one) -- : "m" (*p)); -- return ret; --} --#elif defined(__sparc__) --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__("ldstub [%1], %0" -- : "=r" (ret) -- : "r" (p) -- : "memory"); -- -- return (ret ? 1 : 0); --} --#elif defined(__arm__) --static inline int testandset (int *spinlock) --{ -- register unsigned int ret; -- __asm__ __volatile__("swp %0, %1, [%2]" -- : "=r"(ret) -- : "0"(1), "r"(spinlock)); -- -- return ret; --} --#elif defined(__mc68000) --static inline int testandset (int *p) --{ -- char ret; -- __asm__ __volatile__("tas %1; sne %0" -- : "=r" (ret) -- : "m" (p) -- : "cc","memory"); -- return ret; --} --#elif defined(__ia64) -- --#include -- --static inline int testandset (int *p) --{ -- return __sync_lock_test_and_set (p, 1); --} --#elif defined(__mips__) --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__ ( -- " .set push \n" -- " .set noat \n" -- " .set mips2 \n" -- "1: li $1, 1 \n" -- " ll %0, %1 \n" -- " sc $1, %1 \n" -- " beqz $1, 1b \n" -- " .set pop " -- : "=r" (ret), "+R" (*p) -- : -- : "memory"); -- -- return ret; --} --#else --#error unimplemented CPU support --#endif -- --typedef int spinlock_t; -- --#define SPIN_LOCK_UNLOCKED 0 -- --#if defined(CONFIG_USER_ONLY) --static inline void spin_lock(spinlock_t *lock) --{ -- while (testandset(lock)); --} -- --static inline void spin_unlock(spinlock_t *lock) --{ -- *lock = 0; --} -- --static inline int spin_trylock(spinlock_t *lock) --{ -- return !testandset(lock); --} --#else --static inline void spin_lock(spinlock_t *lock) --{ --} -- --static inline void spin_unlock(spinlock_t *lock) --{ --} -- --static inline int spin_trylock(spinlock_t *lock) --{ -- return 1; --} --#endif -+#include "qemu_spinlock.h" - - extern spinlock_t tb_lock; - -Index: qemu/linux-user/arm/syscall.h -=================================================================== ---- qemu.orig/linux-user/arm/syscall.h 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/linux-user/arm/syscall.h 2007-06-29 10:47:58.000000000 +0000 -@@ -28,7 +28,9 @@ - #define ARM_SYSCALL_BASE 0x900000 - #define ARM_THUMB_SYSCALL 0 - --#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2) -+#define ARM_NR_BASE 0xf0000 -+#define ARM_NR_cacheflush (ARM_NR_BASE + 2) -+#define ARM_NR_set_tls (ARM_NR_BASE + 5) - - #define ARM_NR_semihosting 0x123456 - #define ARM_NR_thumb_semihosting 0xAB -Index: qemu/linux-user/main.c -=================================================================== ---- qemu.orig/linux-user/main.c 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/linux-user/main.c 2007-06-29 10:53:47.000000000 +0000 -@@ -325,6 +325,50 @@ - } - } - -+/* Handle a jump to the kernel code page. */ -+static int -+do_kernel_trap(CPUARMState *env) -+{ -+ uint32_t addr; -+ uint32_t *ptr; -+ uint32_t cpsr; -+ -+ switch (env->regs[15]) { -+ case 0xffff0fc0: /* __kernel_cmpxchg */ -+ /* XXX: This only works between threads, not between processes. -+ Use native atomic operations. */ -+ /* ??? This probably breaks horribly if the access segfaults. */ -+ cpu_lock(); -+ ptr = (uint32_t *)env->regs[2]; -+ cpsr = cpsr_read(env); -+ if (*ptr == env->regs[0]) { -+ *ptr = env->regs[1]; -+ env->regs[0] = 0; -+ cpsr |= CPSR_C; -+ } else { -+ env->regs[0] = -1; -+ cpsr &= ~CPSR_C; -+ } -+ cpsr_write(env, cpsr, CPSR_C); -+ cpu_unlock(); -+ break; -+ case 0xffff0fe0: /* __kernel_get_tls */ -+ env->regs[0] = env->cp15.c13_tls; -+ break; -+ default: -+ return 1; -+ } -+ /* Jump back to the caller. */ -+ addr = env->regs[14]; -+ if (addr & 1) { -+ env->thumb = 1; -+ addr &= ~1; -+ } -+ env->regs[15] = addr; -+ -+ return 0; -+} -+ - void cpu_loop(CPUARMState *env) - { - int trapnr; -@@ -381,10 +425,8 @@ - } - } - -- if (n == ARM_NR_cacheflush) { -- arm_cache_flush(env->regs[0], env->regs[1]); -- } else if (n == ARM_NR_semihosting -- || n == ARM_NR_thumb_semihosting) { -+ if (n == ARM_NR_semihosting -+ || n == ARM_NR_thumb_semihosting) { - env->regs[0] = do_arm_semihosting (env); - } else if (n == 0 || n >= ARM_SYSCALL_BASE - || (env->thumb && n == ARM_THUMB_SYSCALL)) { -@@ -395,14 +437,34 @@ - n -= ARM_SYSCALL_BASE; - env->eabi = 0; - } -- env->regs[0] = do_syscall(env, -- n, -- env->regs[0], -- env->regs[1], -- env->regs[2], -- env->regs[3], -- env->regs[4], -- env->regs[5]); -+ if ( n > ARM_NR_BASE) { -+ switch (n) -+ { -+ case ARM_NR_cacheflush: -+ arm_cache_flush(env->regs[0], env->regs[1]); -+ break; -+#ifdef USE_NPTL -+ case ARM_NR_set_tls: -+ cpu_set_tls(env, env->regs[0]); -+ env->regs[0] = 0; -+ break; -+#endif -+ default: -+ printf ("Error: Bad syscall: %x\n", n); -+ goto error; -+ } -+ } -+ else -+ { -+ env->regs[0] = do_syscall(env, -+ n, -+ env->regs[0], -+ env->regs[1], -+ env->regs[2], -+ env->regs[3], -+ env->regs[4], -+ env->regs[5]); -+ } - } else { - goto error; - } -@@ -441,6 +503,10 @@ - } - } - break; -+ case EXCP_KERNEL_TRAP: -+ if (do_kernel_trap(env)) -+ goto error; -+ break; - default: - error: - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", -@@ -2047,6 +2113,10 @@ - ts->heap_base = info->brk; - /* This will be filled in on the first SYS_HEAPINFO call. */ - ts->heap_limit = 0; -+ /* Register the magic kernel code page. The cpu will generate a -+ special exception when it tries to execute code here. We can't -+ put real code here because it may be in use by the host kernel. */ -+ page_set_flags(0xffff0000, 0xffff0fff, 0); - #endif - - if (gdbstub_port) { -Index: qemu/linux-user/qemu.h -=================================================================== ---- qemu.orig/linux-user/qemu.h 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/linux-user/qemu.h 2007-06-29 10:47:58.000000000 +0000 -@@ -80,6 +80,9 @@ - uint32_t heap_base; - uint32_t heap_limit; - #endif -+#ifdef USE_NPTL -+ uint32_t *child_tidptr; -+#endif - int used; /* non zero if used */ - struct image_info *info; - uint8_t stack[0]; -Index: qemu/linux-user/syscall.c -=================================================================== ---- qemu.orig/linux-user/syscall.c 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/linux-user/syscall.c 2007-06-29 10:53:47.000000000 +0000 -@@ -70,9 +70,18 @@ - #include - - #include "qemu.h" -+#include "qemu_spinlock.h" - - //#define DEBUG - -+#ifdef USE_NPTL -+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \ -+ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID) -+#else -+/* XXX: Hardcode the above values. */ -+#define CLONE_NPTL_FLAGS2 0 -+#endif -+ - #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \ - || defined(TARGET_M68K) || defined(TARGET_SH4) - /* 16 bit uid wrappers emulation */ -@@ -2119,20 +2128,38 @@ - thread/process */ - #define NEW_STACK_SIZE 8192 - -+#ifdef USE_NPTL -+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED; -+#endif -+ - static int clone_func(void *arg) - { - CPUState *env = arg; -+#ifdef HAVE_NPTL -+ /* Wait until the parent has finshed initializing the tls state. */ -+ while (!spin_trylock(&nptl_lock)) -+ usleep(1); -+ spin_unlock(&nptl_lock); -+#endif - cpu_loop(env); - /* never exits */ - return 0; - } - --int do_fork(CPUState *env, unsigned int flags, unsigned long newsp) -+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp, -+ uint32_t *parent_tidptr, void *newtls, -+ uint32_t *child_tidptr) - { - int ret; - TaskState *ts; - uint8_t *new_stack; - CPUState *new_env; -+#ifdef USE_NPTL -+ unsigned int nptl_flags; -+ -+ if (flags & CLONE_PARENT_SETTID) -+ *parent_tidptr = gettid(); -+#endif - - if (flags & CLONE_VM) { - ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); -@@ -2199,16 +2226,67 @@ - #error unsupported target CPU - #endif - new_env->opaque = ts; -+#ifdef USE_NPTL -+ nptl_flags = flags; -+ flags &= ~CLONE_NPTL_FLAGS2; -+ -+ if (nptl_flags & CLONE_CHILD_CLEARTID) { -+ ts->child_tidptr = child_tidptr; -+ } -+ -+ if (nptl_flags & CLONE_SETTLS) -+ cpu_set_tls (new_env, newtls); -+ -+ /* Grab the global cpu lock so that the thread setup appears -+ atomic. */ -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ spin_lock(&nptl_lock); -+ -+#else -+ if (flags & CLONE_NPTL_FLAGS2) -+ return -EINVAL; -+#endif -+ -+ if (CLONE_VFORK & flags) -+ flags ^= CLONE_VM; - #ifdef __ia64__ - ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); - #else - ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); - #endif -+#ifdef USE_NPTL -+ if (ret != -1) { -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ *child_tidptr = ret; -+ } -+ -+ /* Allow the child to continue. */ -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ spin_unlock(&nptl_lock); -+#endif - } else { - /* if no CLONE_VM, we consider it is a fork */ -- if ((flags & ~CSIGNAL) != 0) -+ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0) - return -EINVAL; - ret = fork(); -+#ifdef USE_NPTL -+ /* There is a race condition here. The parent process could -+ theoretically read the TID in the child process before the child -+ tid is set. This would require using either ptrace -+ (not implemented) or having *_tidptr to point at a shared memory -+ mapping. We can't repeat the spinlock hack used above because -+ the child process gets its own copy of the lock. */ -+ if (ret == 0) { -+ /* Child Process. */ -+ if (flags & CLONE_CHILD_SETTID) -+ *child_tidptr = gettid(); -+ ts = (TaskState *)env->opaque; -+ if (flags & CLONE_CHILD_CLEARTID) -+ ts->child_tidptr = child_tidptr; -+ if (flags & CLONE_SETTLS) -+ cpu_set_tls (env, newtls); -+ } -+#endif - } - return ret; - } -@@ -2485,7 +2563,7 @@ - ret = do_brk(arg1); - break; - case TARGET_NR_fork: -- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0)); -+ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL)); - break; - #ifdef TARGET_NR_waitpid - case TARGET_NR_waitpid: -@@ -3649,7 +3727,8 @@ - ret = get_errno(fsync(arg1)); - break; - case TARGET_NR_clone: -- ret = get_errno(do_fork(cpu_env, arg1, arg2)); -+ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3, -+ (void *)arg4, (uint32_t *)arg5)); - break; - #ifdef __NR_exit_group - /* new thread calls */ -@@ -4037,7 +4116,8 @@ - #endif - #ifdef TARGET_NR_vfork - case TARGET_NR_vfork: -- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0)); -+ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0, -+ NULL, NULL, NULL)); - break; - #endif - #ifdef TARGET_NR_ugetrlimit -@@ -4619,4 +4699,3 @@ - #endif - return ret; - } -- -Index: qemu/qemu_spinlock.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ qemu/qemu_spinlock.h 2007-06-29 10:47:58.000000000 +0000 -@@ -0,0 +1,181 @@ -+/* -+ * Atomic operation helper include -+ * -+ * Copyright (c) 2005 Fabrice Bellard -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+#ifndef QEMU_SPINLOCK_H -+#define QEMU_SPINLOCK_H -+ -+#ifdef __powerpc__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ __asm__ __volatile__ ( -+ "0: lwarx %0,0,%1\n" -+ " xor. %0,%3,%0\n" -+ " bne 1f\n" -+ " stwcx. %2,0,%1\n" -+ " bne- 0b\n" -+ "1: " -+ : "=&r" (ret) -+ : "r" (p), "r" (1), "r" (0) -+ : "cr0", "memory"); -+ return ret; -+} -+#endif -+ -+#ifdef __i386__ -+static inline int testandset (int *p) -+{ -+ long int readval = 0; -+ -+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -+ : "+m" (*p), "+a" (readval) -+ : "r" (1) -+ : "cc"); -+ return readval; -+} -+#endif -+ -+#ifdef __x86_64__ -+static inline int testandset (int *p) -+{ -+ long int readval = 0; -+ -+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -+ : "+m" (*p), "+a" (readval) -+ : "r" (1) -+ : "cc"); -+ return readval; -+} -+#endif -+ -+#ifdef __s390__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ -+ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" -+ " jl 0b" -+ : "=&d" (ret) -+ : "r" (1), "a" (p), "0" (*p) -+ : "cc", "memory" ); -+ return ret; -+} -+#endif -+ -+#ifdef __alpha__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ unsigned long one; -+ -+ __asm__ __volatile__ ("0: mov 1,%2\n" -+ " ldl_l %0,%1\n" -+ " stl_c %2,%1\n" -+ " beq %2,1f\n" -+ ".subsection 2\n" -+ "1: br 0b\n" -+ ".previous" -+ : "=r" (ret), "=m" (*p), "=r" (one) -+ : "m" (*p)); -+ return ret; -+} -+#endif -+ -+#ifdef __sparc__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ -+ __asm__ __volatile__("ldstub [%1], %0" -+ : "=r" (ret) -+ : "r" (p) -+ : "memory"); -+ -+ return (ret ? 1 : 0); -+} -+#endif -+ -+#ifdef __arm__ -+static inline int testandset (int *spinlock) -+{ -+ register unsigned int ret; -+ __asm__ __volatile__("swp %0, %1, [%2]" -+ : "=r"(ret) -+ : "0"(1), "r"(spinlock)); -+ -+ return ret; -+} -+#endif -+ -+#ifdef __mc68000 -+static inline int testandset (int *p) -+{ -+ char ret; -+ __asm__ __volatile__("tas %1; sne %0" -+ : "=r" (ret) -+ : "m" (p) -+ : "cc","memory"); -+ return ret; -+} -+#endif -+ -+#ifdef __ia64 -+#include -+ -+static inline int testandset (int *p) -+{ -+ return __sync_lock_test_and_set (p, 1); -+} -+#endif -+ -+typedef int spinlock_t; -+ -+#define SPIN_LOCK_UNLOCKED 0 -+ -+#if defined(CONFIG_USER_ONLY) -+static inline void spin_lock(spinlock_t *lock) -+{ -+ while (testandset(lock)); -+} -+ -+static inline void spin_unlock(spinlock_t *lock) -+{ -+ *lock = 0; -+} -+ -+static inline int spin_trylock(spinlock_t *lock) -+{ -+ return !testandset(lock); -+} -+#else -+static inline void spin_lock(spinlock_t *lock) -+{ -+} -+ -+static inline void spin_unlock(spinlock_t *lock) -+{ -+} -+ -+static inline int spin_trylock(spinlock_t *lock) -+{ -+ return 1; -+} -+#endif -+ -+#endif -Index: qemu/target-arm/cpu.h -=================================================================== ---- qemu.orig/target-arm/cpu.h 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/target-arm/cpu.h 2007-06-29 10:47:58.000000000 +0000 -@@ -37,6 +37,7 @@ - #define EXCP_IRQ 5 - #define EXCP_FIQ 6 - #define EXCP_BKPT 7 -+#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */ - - typedef void ARMWriteCPFunc(void *opaque, int cp_info, - int srcreg, int operand, uint32_t value); -@@ -97,6 +98,7 @@ - uint32_t c9_data; - uint32_t c13_fcse; /* FCSE PID. */ - uint32_t c13_context; /* Context ID. */ -+ uint32_t c13_tls; /* Context ID. */ - uint32_t c15_cpar; /* XScale Coprocessor Access Register */ - } cp15; - -@@ -169,6 +171,15 @@ - int cpu_arm_signal_handler(int host_signum, void *pinfo, - void *puc); - -+void cpu_lock(void); -+void cpu_unlock(void); -+#if defined(USE_NPTL) -+static inline void cpu_set_tls(CPUARMState *env, void *newtls) -+{ -+ env->cp15.c13_tls = (uint32_t)(long)newtls; -+} -+#endif -+ - #define CPSR_M (0x1f) - #define CPSR_T (1 << 5) - #define CPSR_F (1 << 6) -@@ -180,7 +191,11 @@ - #define CPSR_J (1 << 24) - #define CPSR_IT_0_1 (3 << 25) - #define CPSR_Q (1 << 27) --#define CPSR_NZCV (0xf << 28) -+#define CPSR_V (1 << 28) -+#define CPSR_C (1 << 29) -+#define CPSR_Z (1 << 30) -+#define CPSR_N (1 << 31) -+#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V) - - #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV) - /* Return the current CPSR value. */ -Index: qemu/target-arm/exec.h -=================================================================== ---- qemu.orig/target-arm/exec.h 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/target-arm/exec.h 2007-06-29 10:47:58.000000000 +0000 -@@ -68,8 +68,6 @@ - - /* In op_helper.c */ - --void cpu_lock(void); --void cpu_unlock(void); - void helper_set_cp(CPUState *, uint32_t, uint32_t); - uint32_t helper_get_cp(CPUState *, uint32_t); - void helper_set_cp15(CPUState *, uint32_t, uint32_t); -Index: qemu/target-arm/op.c -=================================================================== ---- qemu.orig/target-arm/op.c 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/target-arm/op.c 2007-06-29 10:47:58.000000000 +0000 -@@ -891,6 +891,12 @@ - cpu_loop_exit(); - } - -+void OPPROTO op_kernel_trap(void) -+{ -+ env->exception_index = EXCP_KERNEL_TRAP; -+ cpu_loop_exit(); -+} -+ - /* VFP support. We follow the convention used for VFP instrunctions: - Single precition routines have a "s" suffix, double precision a - "d" suffix. */ -Index: qemu/target-arm/op_mem.h -=================================================================== ---- qemu.orig/target-arm/op_mem.h 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/target-arm/op_mem.h 2007-06-29 10:47:58.000000000 +0000 -@@ -1,5 +1,6 @@ - /* ARM memory operations. */ - -+void helper_ld(uint32_t); - /* Load from address T1 into T0. */ - #define MEM_LD_OP(name) \ - void OPPROTO glue(op_ld##name,MEMSUFFIX)(void) \ -Index: qemu/target-arm/translate.c -=================================================================== ---- qemu.orig/target-arm/translate.c 2007-06-29 10:47:39.000000000 +0000 -+++ qemu/target-arm/translate.c 2007-06-29 10:47:58.000000000 +0000 -@@ -3548,6 +3548,15 @@ - nb_gen_labels = 0; - lj = -1; - do { -+#ifdef CONFIG_USER_ONLY -+ /* Intercept jump to the magic kernel page. */ -+ if (dc->pc > 0xffff0000) { -+ gen_op_kernel_trap(); -+ dc->is_jmp = DISAS_UPDATE; -+ break; -+ } -+#endif -+ - if (env->nb_breakpoints > 0) { - for(j = 0; j < env->nb_breakpoints; j++) { - if (env->breakpoints[j] == dc->pc) { diff --git a/packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch deleted file mode 100644 index d9303e3464..0000000000 --- a/packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- qemu.orig/linux-user/mmap.c -+++ qemu/linux-user/mmap.c -@@ -29,6 +29,10 @@ - - //#define DEBUG_MMAP - -+#ifndef MAP_32BIT -+#define MAP_32BIT 0 -+#endif -+ - /* NOTE: all the constants are the HOST ones, but addresses are target. */ - int target_mprotect(target_ulong start, target_ulong len, int prot) - { -@@ -234,7 +238,7 @@ - host_offset = offset & qemu_host_page_mask; - host_len = len + offset - host_offset; - host_start = (long)mmap(real_start ? g2h(real_start) : NULL, -- host_len, prot, flags, fd, host_offset); -+ host_len, prot, (flags | MAP_32BIT), fd, host_offset); - if (host_start == -1) - return host_start; - /* update start so that it points to the file position at 'offset' */ -@@ -388,7 +392,7 @@ - int prot; - - /* XXX: use 5 args syscall */ -- new_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags); -+ new_addr = (long)mremap(g2h(old_addr), old_size, new_size, (flags | MAP_32BIT)); - if (new_addr == -1) - return new_addr; - new_addr = h2g(new_addr); diff --git a/packages/qemu/files/qemu-pci-irq-sharing.patch b/packages/qemu/files/qemu-pci-irq-sharing.patch deleted file mode 100644 index c47e89895f..0000000000 --- a/packages/qemu/files/qemu-pci-irq-sharing.patch +++ /dev/null @@ -1,52 +0,0 @@ -diff -pNaur qemu-cvs-ts-orig/hw/pci.c qemu-cvs-ts/hw/pci.c ---- qemu-cvs-ts-orig/hw/pci.c 2006-08-17 10:46:34.000000000 +0000 -+++ qemu-cvs-ts/hw/pci.c 2006-09-23 17:02:41.000000000 +0000 -@@ -34,6 +34,7 @@ struct PCIBus { - SetIRQFunc *low_set_irq; - void *irq_opaque; - PCIDevice *devices[256]; -+ int irq_count[4]; - }; - - static void pci_update_mappings(PCIDevice *d); -@@ -49,6 +50,7 @@ PCIBus *pci_register_bus(pci_set_irq_fn - bus->set_irq = set_irq; - bus->irq_opaque = pic; - bus->devfn_min = devfn_min; -+ memset(bus->irq_count, 0, sizeof(bus->irq_count)); - first_bus = bus; - return bus; - } -@@ -100,6 +102,7 @@ PCIDevice *pci_register_device(PCIBus *b - pci_dev->bus = bus; - pci_dev->devfn = devfn; - pstrcpy(pci_dev->name, sizeof(pci_dev->name), name); -+ memset(pci_dev->irq_state, 0, sizeof(pci_dev->irq_state)); - - if (!config_read) - config_read = pci_default_read_config; -@@ -404,7 +407,10 @@ uint32_t pci_data_read(void *opaque, uin - void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level) - { - PCIBus *bus = pci_dev->bus; -- bus->set_irq(pci_dev, bus->irq_opaque, irq_num, level); -+ bus->irq_count[irq_num] += level - pci_dev->irq_state[irq_num]; -+ pci_dev->irq_state[irq_num] = level; -+ bus->set_irq(pci_dev, bus->irq_opaque, -+ irq_num, !!bus->irq_count[irq_num]); - } - - /***********************************************************/ -diff -pNaur qemu-cvs-ts-orig/vl.h qemu-cvs-ts/vl.h ---- qemu-cvs-ts-orig/vl.h 2006-09-18 01:15:29.000000000 +0000 -+++ qemu-cvs-ts/vl.h 2006-09-23 17:15:21.000000000 +0000 -@@ -733,6 +733,9 @@ struct PCIDevice { - PCIConfigWriteFunc *config_write; - /* ??? This is a PC-specific hack, and should be removed. */ - int irq_index; -+ -+ /* remember last irq levels */ -+ int irq_state[4]; - }; - - PCIDevice *pci_register_device(PCIBus *bus, const char *name, diff --git a/packages/qemu/files/qemu-sdl-cursor.patch b/packages/qemu/files/qemu-sdl-cursor.patch deleted file mode 100644 index bd6a51a1f5..0000000000 --- a/packages/qemu/files/qemu-sdl-cursor.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: qemu/sdl.c -=================================================================== ---- qemu.orig/sdl.c 2006-10-02 17:06:12.000000000 +0100 -+++ qemu/sdl.c 2006-10-02 17:06:59.000000000 +0100 -@@ -287,7 +287,7 @@ - { - if (kbd_mouse_is_absolute()) { - SDL_ShowCursor(1); -- SDL_SetCursor(sdl_cursor_hidden); -+ /* SDL_SetCursor(sdl_cursor_hidden); */ - } else { - SDL_ShowCursor(0); - } diff --git a/packages/qemu/files/qemu-usb-wacom-0.8.2.patch b/packages/qemu/files/qemu-usb-wacom-0.8.2.patch deleted file mode 100644 index 33a6db3f18..0000000000 --- a/packages/qemu/files/qemu-usb-wacom-0.8.2.patch +++ /dev/null @@ -1,445 +0,0 @@ -diff -pNaur qemu-cvs-ts-orig/hw/usb-wacom.c qemu-cvs-ts/hw/usb-wacom.c ---- qemu-cvs-ts-orig/hw/usb-wacom.c 1970-01-01 01:00:00.000000000 +0100 -+++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-22 20:44:26.000000000 +0200 -@@ -0,0 +1,408 @@ -+/* -+ * Wacom PenPartner USB tablet emulation. -+ * -+ * Copyright (c) 2006 Openedhand Ltd. -+ * -+ * Author: Andrzej Zaborowski -+ * -+ * Based on hw/usb-hid.c: -+ * Copyright (c) 2005 Fabrice Bellard -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a copy -+ * of this software and associated documentation files (the "Software"), to deal -+ * in the Software without restriction, including without limitation the rights -+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+ * copies of the Software, and to permit persons to whom the Software is -+ * furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -+ * THE SOFTWARE. -+ */ -+#include "vl.h" -+ -+/* Interface requests */ -+#define WACOM_GET_REPORT 0x2101 -+#define WACOM_SET_REPORT 0x2109 -+ -+/* HID interface requests */ -+#define HID_GET_REPORT 0xa101 -+#define HID_GET_IDLE 0xa102 -+#define HID_GET_PROTOCOL 0xa103 -+#define HID_SET_IDLE 0x210a -+#define HID_SET_PROTOCOL 0x210b -+ -+#define WACOM_MODE_HID 1 -+#define WACOM_MODE_WACOM 2 -+ -+typedef struct USBWacomState { -+ USBDevice dev; -+ int dx, dy, dz, buttons_state; -+ int x, y; -+ int mouse_grabbed; -+ int mode; -+} USBWacomState; -+ -+static const uint8_t qemu_wacom_dev_descriptor[] = { -+ 0x12, /* u8 bLength; */ -+ 0x01, /* u8 bDescriptorType; Device */ -+ 0x10, 0x10, /* u16 bcdUSB; v1.10 */ -+ -+ 0x00, /* u8 bDeviceClass; */ -+ 0x00, /* u8 bDeviceSubClass; */ -+ 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */ -+ 0x08, /* u8 bMaxPacketSize0; 8 Bytes */ -+ -+ 0x6a, 0x05, /* u16 idVendor; */ -+ 0x00, 0x00, /* u16 idProduct; */ -+ 0x10, 0x42, /* u16 bcdDevice */ -+ -+ 0x01, /* u8 iManufacturer; */ -+ 0x02, /* u8 iProduct; */ -+ 0x00, /* u8 iSerialNumber; */ -+ 0x01, /* u8 bNumConfigurations; */ -+}; -+ -+static const uint8_t qemu_wacom_config_descriptor[] = { -+ /* one configuration */ -+ 0x09, /* u8 bLength; */ -+ 0x02, /* u8 bDescriptorType; Configuration */ -+ 0x22, 0x00, /* u16 wTotalLength; */ -+ 0x01, /* u8 bNumInterfaces; (1) */ -+ 0x01, /* u8 bConfigurationValue; */ -+ 0x00, /* u8 iConfiguration; */ -+ 0x80, /* u8 bmAttributes; -+ Bit 7: must be set, -+ 6: Self-powered, -+ 5: Remote wakeup, -+ 4..0: resvd */ -+ 40, /* u8 MaxPower; */ -+ -+ /* one interface */ -+ 0x09, /* u8 if_bLength; */ -+ 0x04, /* u8 if_bDescriptorType; Interface */ -+ 0x00, /* u8 if_bInterfaceNumber; */ -+ 0x00, /* u8 if_bAlternateSetting; */ -+ 0x01, /* u8 if_bNumEndpoints; */ -+ 0x03, /* u8 if_bInterfaceClass; HID */ -+ 0x01, /* u8 if_bInterfaceSubClass; Boot */ -+ 0x02, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */ -+ 0x00, /* u8 if_iInterface; */ -+ -+ /* HID descriptor */ -+ 0x09, /* u8 bLength; */ -+ 0x21, /* u8 bDescriptorType; */ -+ 0x01, 0x10, /* u16 HID_class */ -+ 0x00, /* u8 country_code */ -+ 0x01, /* u8 num_descriptors */ -+ 0x22, /* u8 type; Report */ -+ 0x6e, 0x00, /* u16 len */ -+ -+ /* one endpoint (status change endpoint) */ -+ 0x07, /* u8 ep_bLength; */ -+ 0x05, /* u8 ep_bDescriptorType; Endpoint */ -+ 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */ -+ 0x03, /* u8 ep_bmAttributes; Interrupt */ -+ 0x08, 0x00, /* u16 ep_wMaxPacketSize; */ -+ 0x0a, /* u8 ep_bInterval; */ -+}; -+ -+static void usb_mouse_event(void *opaque, -+ int dx1, int dy1, int dz1, int buttons_state) -+{ -+ USBWacomState *s = opaque; -+ -+ s->dx += dx1; -+ s->dy += dy1; -+ s->dz += dz1; -+ s->buttons_state = buttons_state; -+} -+ -+static void usb_wacom_event(void *opaque, -+ int x, int y, int dz, int buttons_state) -+{ -+ USBWacomState *s = opaque; -+ -+ s->x = x; -+ s->y = y; -+ s->dz += dz; -+ s->buttons_state = buttons_state; -+} -+ -+static inline int int_clamp(int val, int vmin, int vmax) -+{ -+ if (val < vmin) -+ return vmin; -+ else if (val > vmax) -+ return vmax; -+ else -+ return val; -+} -+ -+static int usb_mouse_poll(USBWacomState *s, uint8_t *buf, int len) -+{ -+ int dx, dy, dz, b, l; -+ -+ if (!s->mouse_grabbed) { -+ qemu_add_mouse_event_handler(usb_mouse_event, s, 1); -+ s->mouse_grabbed = 1; -+ } -+ -+ dx = int_clamp(s->dx, -128, 127); -+ dy = int_clamp(s->dy, -128, 127); -+ dz = int_clamp(s->dz, -128, 127); -+ -+ s->dx -= dx; -+ s->dy -= dy; -+ s->dz -= dz; -+ -+ b = 0; -+ if (s->buttons_state & MOUSE_EVENT_LBUTTON) -+ b |= 0x01; -+ if (s->buttons_state & MOUSE_EVENT_RBUTTON) -+ b |= 0x02; -+ if (s->buttons_state & MOUSE_EVENT_MBUTTON) -+ b |= 0x04; -+ -+ buf[0] = b; -+ buf[1] = dx; -+ buf[2] = dy; -+ l = 3; -+ if (len >= 4) { -+ buf[3] = dz; -+ l = 4; -+ } -+ return l; -+} -+ -+static int usb_wacom_poll(USBWacomState *s, uint8_t *buf, int len) -+{ -+ int b; -+ -+ if (!s->mouse_grabbed) { -+ qemu_add_mouse_event_handler(usb_wacom_event, s, 1); -+ s->mouse_grabbed = 1; -+ } -+ -+ b = 0; -+ if (s->buttons_state & MOUSE_EVENT_LBUTTON) -+ b |= 0x01; -+ if (s->buttons_state & MOUSE_EVENT_RBUTTON) -+ b |= 0x02; -+ if (s->buttons_state & MOUSE_EVENT_MBUTTON) -+ b |= 0x04; -+ -+ if (len < 7) -+ return 0; -+ -+ buf[0] = s->mode; -+ buf[1] = s->x & 0xff; -+ buf[2] = s->x >> 8; -+ buf[3] = s->y & 0xff; -+ buf[4] = s->y >> 8; -+ if (b) { -+ buf[5] = 0x40; -+ buf[6] = 0; -+ } else { -+ buf[5] = 0x00; -+ buf[6] = (unsigned char) -120; -+ } -+ -+ return 7; -+} -+ -+static void usb_wacom_handle_reset(USBDevice *dev) -+{ -+ USBWacomState *s = (USBWacomState *) dev; -+ -+ s->dx = 0; -+ s->dy = 0; -+ s->dz = 0; -+ s->x = 0; -+ s->y = 0; -+ s->buttons_state = 0; -+ s->mode = WACOM_MODE_HID; -+} -+ -+static int usb_wacom_handle_control(USBDevice *dev, int request, int value, -+ int index, int length, uint8_t *data) -+{ -+ USBWacomState *s = (USBWacomState *) dev; -+ int ret = 0; -+ -+ switch (request) { -+ case DeviceRequest | USB_REQ_GET_STATUS: -+ data[0] = (1 << USB_DEVICE_SELF_POWERED) | -+ (dev->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP); -+ data[1] = 0x00; -+ ret = 2; -+ break; -+ case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: -+ if (value == USB_DEVICE_REMOTE_WAKEUP) { -+ dev->remote_wakeup = 0; -+ } else { -+ goto fail; -+ } -+ ret = 0; -+ break; -+ case DeviceOutRequest | USB_REQ_SET_FEATURE: -+ if (value == USB_DEVICE_REMOTE_WAKEUP) { -+ dev->remote_wakeup = 1; -+ } else { -+ goto fail; -+ } -+ ret = 0; -+ break; -+ case DeviceOutRequest | USB_REQ_SET_ADDRESS: -+ dev->addr = value; -+ ret = 0; -+ break; -+ case DeviceRequest | USB_REQ_GET_DESCRIPTOR: -+ switch (value >> 8) { -+ case USB_DT_DEVICE: -+ memcpy(data, qemu_wacom_dev_descriptor, -+ sizeof(qemu_wacom_dev_descriptor)); -+ ret = sizeof(qemu_wacom_dev_descriptor); -+ break; -+ case USB_DT_CONFIG: -+ memcpy(data, qemu_wacom_config_descriptor, -+ sizeof(qemu_wacom_config_descriptor)); -+ ret = sizeof(qemu_wacom_config_descriptor); -+ break; -+ case USB_DT_STRING: -+ switch (value & 0xff) { -+ case 0: -+ /* language ids */ -+ data[0] = 4; -+ data[1] = 3; -+ data[2] = 0x09; -+ data[3] = 0x04; -+ ret = 4; -+ break; -+ case 1: -+ /* serial number */ -+ ret = set_usb_string(data, "1"); -+ break; -+ case 2: -+ ret = set_usb_string(data, "Wacom PenPartner"); -+ break; -+ case 3: -+ /* vendor description */ -+ ret = set_usb_string(data, "QEMU " QEMU_VERSION); -+ break; -+ case 4: -+ ret = set_usb_string(data, "Wacom Tablet"); -+ break; -+ case 5: -+ ret = set_usb_string(data, "Endpoint1 Interrupt Pipe"); -+ break; -+ default: -+ goto fail; -+ } -+ break; -+ default: -+ goto fail; -+ } -+ break; -+ case DeviceRequest | USB_REQ_GET_CONFIGURATION: -+ data[0] = 1; -+ ret = 1; -+ break; -+ case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: -+ ret = 0; -+ break; -+ case DeviceRequest | USB_REQ_GET_INTERFACE: -+ data[0] = 0; -+ ret = 1; -+ break; -+ case DeviceOutRequest | USB_REQ_SET_INTERFACE: -+ ret = 0; -+ break; -+ case WACOM_SET_REPORT: -+ qemu_add_mouse_event_handler(NULL, NULL, 0); -+ s->mouse_grabbed = 0; -+ s->mode = data[0]; -+ ret = 0; -+ break; -+ case WACOM_GET_REPORT: -+ data[0] = 0; -+ data[1] = s->mode; -+ ret = 2; -+ break; -+ /* USB HID requests */ -+ case HID_GET_REPORT: -+ if (s->mode == WACOM_MODE_HID) -+ ret = usb_mouse_poll(s, data, length); -+ else if (s->mode == WACOM_MODE_WACOM) -+ ret = usb_wacom_poll(s, data, length); -+ break; -+ case HID_SET_IDLE: -+ ret = 0; -+ break; -+ default: -+ fail: -+ ret = USB_RET_STALL; -+ break; -+ } -+ return ret; -+} -+ -+static int usb_wacom_handle_data(USBDevice *dev, int pid, -+ uint8_t devep, uint8_t *data, int len) -+{ -+ USBWacomState *s = (USBWacomState *) dev; -+ int ret = 0; -+ -+ switch (pid) { -+ case USB_TOKEN_IN: -+ if (devep == 1) { -+ if (s->mode == WACOM_MODE_HID) -+ ret = usb_mouse_poll(s, data, len); -+ else if (s->mode == WACOM_MODE_WACOM) -+ ret = usb_wacom_poll(s, data, len); -+ break; -+ } -+ /* Fall through. */ -+ case USB_TOKEN_OUT: -+ default: -+ ret = USB_RET_STALL; -+ break; -+ } -+ return ret; -+} -+ -+static void usb_wacom_handle_destroy(USBDevice *dev) -+{ -+ USBWacomState *s = (USBWacomState *) dev; -+ -+ qemu_add_mouse_event_handler(NULL, NULL, 0); -+ qemu_free(s); -+} -+ -+USBDevice *usb_wacom_init(void) -+{ -+ USBWacomState *s; -+ -+ s = qemu_mallocz(sizeof(USBWacomState)); -+ if (!s) -+ return NULL; -+ s->dev.speed = USB_SPEED_FULL; -+ s->dev.handle_packet = usb_generic_handle_packet; -+ -+ s->dev.handle_reset = usb_wacom_handle_reset; -+ s->dev.handle_control = usb_wacom_handle_control; -+ s->dev.handle_data = usb_wacom_handle_data; -+ s->dev.handle_destroy = usb_wacom_handle_destroy; -+ -+ pstrcpy(s->dev.devname, sizeof(s->dev.devname), -+ "QEMU PenPartner Tablet"); -+ -+ return (USBDevice *) s; -+} -diff -pNaur qemu-cvs-ts-orig/hw/usb.h qemu-cvs-ts/hw/usb.h ---- qemu-cvs-ts-orig/hw/usb.h 2006-08-12 03:04:27.000000000 +0200 -+++ qemu-cvs-ts/hw/usb.h 2006-09-21 01:40:40.000000000 +0200 -@@ -218,3 +218,6 @@ USBDevice *usb_tablet_init(void); - - /* usb-msd.c */ - USBDevice *usb_msd_init(const char *filename); -+ -+/* usb-wacom.c */ -+USBDevice *usb_wacom_init(void); -diff -pNaur qemu-cvs-ts-orig/vl.c qemu-cvs-ts/vl.c ---- qemu-cvs-ts-orig/vl.c 2006-09-10 16:39:54.000000000 +0200 -+++ qemu-cvs-ts/vl.c 2006-09-21 01:45:16.000000000 +0200 -@@ -3765,6 +3765,8 @@ static int usb_device_add(const char *de - dev = usb_tablet_init(); - } else if (strstart(devname, "disk:", &p)) { - dev = usb_msd_init(p); -+ } else if (!strcmp(devname, "wacom-tablet")) { -+ dev = usb_wacom_init(); - } else { - return -1; - } -diff -pNaur qemu-cvs-ts-orig/Makefile.target qemu-cvs-ts/Makefile.target ---- qemu-cvs-ts-orig/Makefile.target 2006-09-18 03:15:29.000000000 +0200 -+++ qemu-cvs-ts/Makefile.target 2006-09-21 02:32:19.000000000 +0200 -@@ -330,6 +330,7 @@ VL_OBJS+= scsi-disk.o cdrom.o lsi53c895a - - # USB layer - VL_OBJS+= usb.o usb-hub.o usb-linux.o usb-hid.o usb-ohci.o usb-msd.o -+VL_OBJS+= usb-wacom.o - - # PCI network cards - VL_OBJS+= ne2000.o rtl8139.o pcnet.o diff --git a/packages/qemu/files/qemu-usb-wacom-buttons.patch b/packages/qemu/files/qemu-usb-wacom-buttons.patch deleted file mode 100644 index ee24c15780..0000000000 --- a/packages/qemu/files/qemu-usb-wacom-buttons.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- qemu-cvs-ts-orig/hw/usb-wacom.c 2006-09-29 22:53:06.000000000 +0000 -+++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-29 22:44:14.000000000 +0000 -@@ -203,19 +203,18 @@ static int usb_wacom_poll(USBWacomState - return 0; - - buf[0] = s->mode; -+ buf[5] = 0x00; - if (b) { - buf[1] = s->x & 0xff; - buf[2] = s->x >> 8; - buf[3] = s->y & 0xff; - buf[4] = s->y >> 8; -- buf[5] = 0x40; - buf[6] = 0; - } else { - buf[1] = 0; - buf[2] = 0; - buf[3] = 0; - buf[4] = 0; -- buf[5] = 0x00; - buf[6] = (unsigned char) -127; - } - diff --git a/packages/qemu/files/qemu-usb-wacom-pressure.patch b/packages/qemu/files/qemu-usb-wacom-pressure.patch deleted file mode 100644 index 668d50d5f2..0000000000 --- a/packages/qemu/files/qemu-usb-wacom-pressure.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- qemu-cvs-ts-orig/hw/usb-wacom.c 2006-09-29 17:27:43.000000000 +0000 -+++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-29 17:48:13.000000000 +0000 -@@ -203,16 +203,20 @@ static int usb_wacom_poll(USBWacomState - return 0; - - buf[0] = s->mode; -- buf[1] = s->x & 0xff; -- buf[2] = s->x >> 8; -- buf[3] = s->y & 0xff; -- buf[4] = s->y >> 8; - if (b) { -+ buf[1] = s->x & 0xff; -+ buf[2] = s->x >> 8; -+ buf[3] = s->y & 0xff; -+ buf[4] = s->y >> 8; - buf[5] = 0x40; - buf[6] = 0; - } else { -+ buf[1] = 0; -+ buf[2] = 0; -+ buf[3] = 0; -+ buf[4] = 0; - buf[5] = 0x00; -- buf[6] = (unsigned char) -120; -+ buf[6] = (unsigned char) -127; - } - - return 7; diff --git a/packages/qemu/files/workaround_bad_futex_headers.patch b/packages/qemu/files/workaround_bad_futex_headers.patch deleted file mode 100644 index cc122ebdba..0000000000 --- a/packages/qemu/files/workaround_bad_futex_headers.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- - linux-user/syscall.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -Index: qemu/linux-user/syscall.c -=================================================================== ---- qemu.orig/linux-user/syscall.c 2007-08-09 20:28:06.000000000 +0100 -+++ qemu/linux-user/syscall.c 2007-08-09 20:28:41.000000000 +0100 -@@ -61,7 +61,15 @@ - #define tchars host_tchars /* same as target */ - #define ltchars host_ltchars /* same as target */ - --#include -+#define FUTEX_WAIT 0 -+#define FUTEX_WAKE 1 -+#define FUTEX_FD 2 -+#define FUTEX_REQUEUE 3 -+#define FUTEX_CMP_REQUEUE 4 -+#define FUTEX_WAKE_OP 5 -+#define FUTEX_LOCK_PI 6 -+#define FUTEX_UNLOCK_PI 7 -+ - #include - #include - #include diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty b/packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch b/packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch new file mode 100644 index 0000000000..bd955b6db3 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch @@ -0,0 +1,23 @@ +#DPATCHLEVEL=0 +--- +# block.c | 6 +++++- +# 1 file changed, 5 insertions(+), 1 deletion(-) +# +Index: block.c +=================================================================== +--- block.c.orig 2007-06-13 11:51:52.000000000 +0100 ++++ block.c 2007-06-13 11:51:53.000000000 +0100 +@@ -188,8 +188,12 @@ void get_tmp_filename(char *filename, in + void get_tmp_filename(char *filename, int size) + { + int fd; ++ char *tmpdir; + /* XXX: race condition possible */ +- pstrcpy(filename, size, "/tmp/vl.XXXXXX"); ++ tmpdir = getenv("TMPDIR"); ++ if (!tmpdir) ++ tmpdir = "/tmp"; ++ snprintf(filename, size, "%s/vl.XXXXXX", tmpdir); + fd = mkstemp(filename); + close(fd); + } diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch b/packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch new file mode 100644 index 0000000000..73f31550fe --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch @@ -0,0 +1,18 @@ +#DPATCHLEVEL=0 +--- +# vl.c | 2 +- +# 1 file changed, 1 insertion(+), 1 deletion(-) +# +Index: vl.c +=================================================================== +--- vl.c.orig 2007-06-13 11:51:52.000000000 +0100 ++++ vl.c 2007-06-13 11:52:24.000000000 +0100 +@@ -7242,7 +7242,7 @@ int main(int argc, char **argv) + m->name, m->desc, + m == first_machine ? " (default)" : ""); + } +- exit(1); ++ exit(strcmp(optarg, "?")); + } + break; + case QEMU_OPTION_cpu: diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch new file mode 100644 index 0000000000..1575cbce63 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch @@ -0,0 +1,25 @@ +#DPATCHLEVEL=1 +--- +# vl.c | 6 +++++- +# 1 file changed, 5 insertions(+), 1 deletion(-) +# +Index: qemu/vl.c +=================================================================== +--- qemu.orig/vl.c 2007-06-13 11:51:53.000000000 +0100 ++++ qemu/vl.c 2007-06-13 11:52:19.000000000 +0100 +@@ -1026,10 +1026,14 @@ static int rtc_fd; + + static int start_rtc_timer(void) + { ++ unsigned long current_rtc_freq = 0; ++ + rtc_fd = open("/dev/rtc", O_RDONLY); + if (rtc_fd < 0) + return -1; +- if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { ++ ioctl(rtc_fd, RTC_IRQP_READ, ¤t_rtc_freq); ++ if (current_rtc_freq != RTC_FREQ && ++ ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { + fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n" + "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n" + "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n"); diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch new file mode 100644 index 0000000000..b7c4732f24 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch @@ -0,0 +1,17 @@ +#DPATCHLEVEL=1 +--- +# hw/pc.c | 1 - +# 1 file changed, 1 deletion(-) +# +Index: qemu/hw/pc.c +=================================================================== +--- qemu.orig/hw/pc.c 2007-06-13 11:51:52.000000000 +0100 ++++ qemu/hw/pc.c 2007-06-13 11:51:53.000000000 +0100 +@@ -355,7 +355,6 @@ static void generate_bootsect(uint32_t g + if (bs_table[0] == NULL) { + fprintf(stderr, "A disk image must be given for 'hda' when booting " + "a Linux kernel\n"); +- exit(1); + } + + memset(bootsect, 0, sizeof(bootsect)); diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch new file mode 100644 index 0000000000..447c3550b8 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch @@ -0,0 +1,45 @@ +#DPATCHLEVEL=0 +--- +# linux-user/main.c | 8 ++++---- +# 1 file changed, 4 insertions(+), 4 deletions(-) +# +Index: linux-user/main.c +=================================================================== +--- linux-user/main.c.orig 2007-06-13 11:51:52.000000000 +0100 ++++ linux-user/main.c 2007-06-13 11:52:16.000000000 +0100 +@@ -642,7 +642,7 @@ void cpu_loop (CPUSPARCState *env) + default: + printf ("Unhandled trap: 0x%x\n", trapnr); + cpu_dump_state(env, stderr, fprintf, 0); +- exit (1); ++ _exit (1); + } + process_pending_signals (env); + } +@@ -1471,7 +1471,7 @@ void cpu_loop (CPUState *env) + default: + printf ("Unhandled trap: 0x%x\n", trapnr); + cpu_dump_state(env, stderr, fprintf, 0); +- exit (1); ++ _exit (1); + } + process_pending_signals (env); + } +@@ -1735,7 +1735,7 @@ int main(int argc, char **argv) + for(item = cpu_log_items; item->mask != 0; item++) { + printf("%-10s %s\n", item->name, item->help); + } +- exit(1); ++ _exit(1); + } + cpu_set_log(mask); + } else if (!strcmp(r, "s")) { +@@ -1754,7 +1754,7 @@ int main(int argc, char **argv) + if (qemu_host_page_size == 0 || + (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) { + fprintf(stderr, "page size must be a power of two\n"); +- exit(1); ++ _exit(1); + } + } else if (!strcmp(r, "g")) { + gdbstub_port = atoi(argv[optind++]); diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch b/packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch new file mode 100644 index 0000000000..794a538676 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch @@ -0,0 +1,26 @@ +#DPATCHLEVEL=0 +--- +# linux-user/signal.c | 7 ++++++- +# 1 file changed, 6 insertions(+), 1 deletion(-) +# +Index: linux-user/signal.c +=================================================================== +--- linux-user/signal.c.orig 2007-06-13 11:51:52.000000000 +0100 ++++ linux-user/signal.c 2007-06-13 11:52:21.000000000 +0100 +@@ -341,10 +341,15 @@ int queue_signal(int sig, target_siginfo + k = &sigact_table[sig - 1]; + handler = k->sa._sa_handler; + if (handler == TARGET_SIG_DFL) { ++ if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) { ++ kill(getpid(),SIGSTOP); ++ return 0; ++ } else + /* default handler : ignore some signal. The other are fatal */ + if (sig != TARGET_SIGCHLD && + sig != TARGET_SIGURG && +- sig != TARGET_SIGWINCH) { ++ sig != TARGET_SIGWINCH && ++ sig != TARGET_SIGCONT) { + force_sig(sig); + } else { + return 0; /* indicate ignored */ diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch b/packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch new file mode 100644 index 0000000000..5446efc562 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch @@ -0,0 +1,21 @@ +#DPATCHLEVEL=0 +--- +# linux-user/signal.c | 5 +++++ +# 1 file changed, 5 insertions(+) +# +Index: linux-user/signal.c +=================================================================== +--- linux-user/signal.c.orig 2007-06-13 11:51:54.000000000 +0100 ++++ linux-user/signal.c 2007-06-13 11:52:20.000000000 +0100 +@@ -429,6 +429,11 @@ int do_sigaction(int sig, const struct t + + if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP) + return -EINVAL; ++ ++ /* no point doing the stuff as those are not allowed for sigaction */ ++ if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP)) ++ return -EINVAL; ++ + k = &sigact_table[sig - 1]; + #if defined(DEBUG_SIGNAL) + fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n", diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch b/packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch new file mode 100644 index 0000000000..d8d4198784 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch @@ -0,0 +1,401 @@ +#DPATCHLEVEL=1 +--- +# linux-user/signal.c | 371 ++++++++++++++++++++++++++++++++++++++++++++++++++++ +# 1 file changed, 371 insertions(+) +# +Index: qemu/linux-user/signal.c +=================================================================== +--- qemu.orig/linux-user/signal.c 2007-06-13 11:51:54.000000000 +0100 ++++ qemu/linux-user/signal.c 2007-06-13 11:51:54.000000000 +0100 +@@ -2,6 +2,7 @@ + * Emulation of Linux signals + * + * Copyright (c) 2003 Fabrice Bellard ++ * Copyright (c) 2005 Josh Triplett + * + * 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 +@@ -16,6 +17,12 @@ + * 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. ++ * ++ * Various portions adapted from the Linux kernel: ++ * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) ++ * Derived from "arch/i386/kernel/signal.c" ++ * Copyright (C) 1991, 1992 Linus Torvalds ++ * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson + */ + #include + #include +@@ -1964,6 +1971,370 @@ long do_rt_sigreturn(CPUState *env) + return -ENOSYS; + } + ++#elif defined(TARGET_PPC) ++/* Adapted from the Linux kernel: ++ * arch/ppc/kernel/signal.c ++ * include/asm-ppc/elf.h ++ * include/asm-ppc/ptrace.h ++ * include/asm-ppc/sigcontext.h ++ * include/asm-ppc/ucontext.h ++ */ ++ ++/* ++ * When we have signals to deliver, we set up on the ++ * user stack, going down from the original stack pointer: ++ * a sigregs struct ++ * a sigcontext struct ++ * a gap of __SIGNAL_FRAMESIZE bytes ++ * ++ * Each of these things must be a multiple of 16 bytes in size. ++ * ++ */ ++ ++#define TARGET_ELF_NGREG 48 /* includes nip, msr, lr, etc. */ ++#define TARGET_ELF_NFPREG 33 /* includes fpscr */ ++#define TARGET_ELF_NVRREG 33 /* includes vscr */ ++ ++/* General registers */ ++typedef unsigned long target_elf_greg_t; ++typedef target_elf_greg_t target_elf_gregset_t[TARGET_ELF_NGREG]; ++ ++/* Floating point registers */ ++typedef double target_elf_fpreg_t; ++typedef target_elf_fpreg_t target_elf_fpregset_t[TARGET_ELF_NFPREG]; ++ ++/* Altivec registers */ ++/* FIXME: Altivec not supported yet. */ ++/* typedef __vector128 elf_vrreg_t; */ ++typedef uint64_t target_elf_vrreg_t[2]; ++typedef target_elf_vrreg_t target_elf_vrregset_t[TARGET_ELF_NVRREG]; ++ ++struct target_mcontext { ++ target_elf_gregset_t mc_gregs; ++ target_elf_fpregset_t mc_fregs; ++ /* The kernel calls this mc_pad, but does #define tramp mc_pad */ ++ target_ulong tramp[2]; ++ target_elf_vrregset_t mc_vregs __attribute__((__aligned__(16))); ++}; ++ ++struct target_sigregs { ++ struct target_mcontext mctx; /* all the register values */ ++ /* Programs using the rs6000/xcoff abi can save up to 19 gp regs ++ and 18 fp regs below sp before decrementing it. */ ++ int abigap[56]; ++}; ++ ++struct target_sigcontext { ++ target_ulong _unused[4]; ++ uint32_t signal; ++ target_ulong handler; ++ target_ulong oldmask; ++ struct target_pt_regs *regs; ++}; ++ ++#define __SIGNAL_FRAMESIZE 64 ++ ++static int ++save_user_regs(CPUState *env, struct target_mcontext *frame, int sigret) ++{ ++ /* save general and floating-point registers */ ++#if 0 /* FIXME: handle floating-point, Altivec, SPE */ ++ CHECK_FULL_REGS(regs); ++ preempt_disable(); ++ if (regs->msr & MSR_FP) ++ giveup_fpu(current); ++#ifdef CONFIG_ALTIVEC ++ if (current->thread.used_vr && (regs->msr & MSR_VEC)) ++ giveup_altivec(current); ++#endif /* CONFIG_ALTIVEC */ ++#ifdef CONFIG_SPE ++ if (current->thread.used_spe && (regs->msr & MSR_SPE)) ++ giveup_spe(current); ++#endif /* CONFIG_ALTIVEC */ ++ preempt_enable(); ++#endif /* 0 */ ++ ++ /* Note: this needs to be in the same order as target_pt_regs */ ++ if(!memcpy(&frame->mc_gregs, env->gpr, ++ 32*sizeof(target_elf_greg_t)) ++ || __put_user(env->nip, &frame->mc_gregs[32]) ++ || __put_user(do_load_msr(env), &frame->mc_gregs[33]) ++ /* FIXME: || __put_user(orig_gpr3, &frame->mc_gregs[34]) */ ++ || __put_user(env->ctr, &frame->mc_gregs[35]) ++ || __put_user(env->lr, &frame->mc_gregs[36]) ++ || __put_user(do_load_xer(env), &frame->mc_gregs[37]) ++ || __put_user(do_load_cr(env), &frame->mc_gregs[38]) ++ || __put_user(env->spr[SPR_MQ], &frame->mc_gregs[39]) ++ /* FIXME: || __put_user(trap, &frame->mc_gregs[40]) */ ++ || __put_user(env->spr[SPR_DAR], &frame->mc_gregs[41]) ++ || __put_user(env->spr[SPR_DSISR], &frame->mc_gregs[42]) ++ /* FIXME: || __put_user(result, &frame->mc_gregs[43]) */) ++ return 1; ++ ++ if(!memcpy(&frame->mc_fregs, env->fpr, ++ 32*sizeof(target_elf_fpreg_t)) ++ || __put_user(do_load_fpscr(env), &frame->mc_fregs[32])) ++ ++ do_store_fpscr(env, 0, 0xFF); /* turn off all fp exceptions */ ++ ++#if 0 /* FIXME: handle Altivec, SPE */ ++#ifdef CONFIG_ALTIVEC ++ /* save altivec registers */ ++ if (current->thread.used_vr) { ++ if (!memcpy(&frame->mc_vregs, current->thread.vr, ++ ELF_NVRREG * sizeof(vector128))) ++ return 1; ++ /* set MSR_VEC in the saved MSR value to indicate that ++ frame->mc_vregs contains valid data */ ++ if (__put_user(regs->msr | MSR_VEC, &frame->mc_gregs[PT_MSR])) ++ return 1; ++ } ++ /* else assert((regs->msr & MSR_VEC) == 0) */ ++ ++ /* We always copy to/from vrsave, it's 0 if we don't have or don't ++ * use altivec. Since VSCR only contains 32 bits saved in the least ++ * significant bits of a vector, we "cheat" and stuff VRSAVE in the ++ * most significant bits of that same vector. --BenH ++ */ ++ if (__put_user(current->thread.vrsave, (u32 __user *)&frame->mc_vregs[32])) ++ return 1; ++#endif /* CONFIG_ALTIVEC */ ++ ++#ifdef CONFIG_SPE ++ /* save spe registers */ ++ if (current->thread.used_spe) { ++ if (!memcpy(&frame->mc_vregs, current->thread.evr, ++ ELF_NEVRREG * sizeof(u32))) ++ return 1; ++ /* set MSR_SPE in the saved MSR value to indicate that ++ frame->mc_vregs contains valid data */ ++ if (__put_user(regs->msr | MSR_SPE, &frame->mc_gregs[PT_MSR])) ++ return 1; ++ } ++ /* else assert((regs->msr & MSR_SPE) == 0) */ ++ ++ /* We always copy to/from spefscr */ ++ if (__put_user(current->thread.spefscr, (u32 *)&frame->mc_vregs + ELF_NEVRREG)) ++ return 1; ++#endif /* CONFIG_SPE */ ++#endif /* 0 */ ++ ++ if (sigret) { ++ /* Set up the sigreturn trampoline: li r0,sigret; sc */ ++ if (__put_user(0x38000000UL + sigret, &frame->tramp[0]) ++ || __put_user(0x44000002UL, &frame->tramp[1])) ++ return 1; ++#if 0 ++ flush_icache_range((unsigned long) &frame->tramp[0], ++ (unsigned long) &frame->tramp[2]); ++#endif ++ } ++ ++ return 0; ++} ++ ++static int ++restore_user_regs(CPUState *env, struct target_mcontext *sr, int sig) ++{ ++ target_ulong save_r2 = 0; ++ target_ulong saved_xer; ++ target_ulong saved_cr; ++ double saved_fpscr; ++ ++#if 0 /* FIXME: handle Altivec, SPE */ ++#if defined(CONFIG_ALTIVEC) || defined(CONFIG_SPE) ++ unsigned long msr; ++#endif ++#endif /* 0 */ ++ ++ /* backup/restore the TLS as we don't want it to be modified */ ++ if (!sig) ++ save_r2 = env->gpr[2]; ++ ++ /* Copy all registers except MSR */ ++ /* Note: this needs to be in the same order as target_pt_regs */ ++ if(!memcpy(env->gpr, &sr->mc_gregs, ++ 32*sizeof(target_elf_greg_t)) ++ || __get_user(env->nip, &sr->mc_gregs[32]) ++ /* FIXME: || __get_user(orig_gpr3, &sr->mc_gregs[34]) */ ++ || __get_user(env->ctr, &sr->mc_gregs[35]) ++ || __get_user(env->lr, &sr->mc_gregs[36]) ++ || __get_user(saved_xer, &sr->mc_gregs[37]) ++ || __get_user(saved_cr, &sr->mc_gregs[38]) ++ || __get_user(env->spr[SPR_MQ], &sr->mc_gregs[39]) ++ /* FIXME: || __get_user(trap, &sr->mc_gregs[40]) */ ++ || __get_user(env->spr[SPR_DAR], &sr->mc_gregs[41]) ++ || __get_user(env->spr[SPR_DSISR], &sr->mc_gregs[42]) ++ /* FIXME: || __get_user(result, &sr->mc_gregs[43]) */) ++ return 1; ++ do_store_xer(env, saved_xer); ++ do_store_cr(env, saved_cr, 0xFF); ++ ++ if (!sig) ++ env->gpr[2] = save_r2; ++ ++ /* The kernel delays restoring the floating-point registers until the ++ * thread uses floating-point again. For simplicity, just restore the ++ * registers now. */ ++ if(!memcpy(env->fpr, &sr->mc_fregs, ++ 32*sizeof(target_elf_fpreg_t)) ++ || __get_user(saved_fpscr, &sr->mc_fregs[32])) ++ return 1; ++ do_store_fpscr(env, saved_fpscr, 0xFF); ++ ++#if 0 /* FIXME: handle Altivec, SPE */ ++#ifdef CONFIG_ALTIVEC ++ /* force the process to reload the altivec registers from ++ current->thread when it next does altivec instructions */ ++ regs->msr &= ~MSR_VEC; ++ if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_VEC) != 0) { ++ /* restore altivec registers from the stack */ ++ if (!memcpy(current->thread.vr, &sr->mc_vregs, ++ sizeof(sr->mc_vregs))) ++ return 1; ++ } else if (current->thread.used_vr) ++ memset(¤t->thread.vr, 0, ELF_NVRREG * sizeof(vector128)); ++ ++ /* Always get VRSAVE back */ ++ if (__get_user(current->thread.vrsave, (u32 __user *)&sr->mc_vregs[32])) ++ return 1; ++#endif /* CONFIG_ALTIVEC */ ++ ++#ifdef CONFIG_SPE ++ /* force the process to reload the spe registers from ++ current->thread when it next does spe instructions */ ++ regs->msr &= ~MSR_SPE; ++ if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_SPE) != 0) { ++ /* restore spe registers from the stack */ ++ if (!memcpy(current->thread.evr, &sr->mc_vregs, ++ ELF_NEVRREG * sizeof(u32))) ++ return 1; ++ } else if (current->thread.used_spe) ++ memset(¤t->thread.evr, 0, ELF_NEVRREG * sizeof(u32)); ++ ++ /* Always get SPEFSCR back */ ++ if (__get_user(current->thread.spefscr, (u32 *)&sr->mc_vregs + ELF_NEVRREG)) ++ return 1; ++#endif /* CONFIG_SPE */ ++#endif /* 0 */ ++ ++#if 0 /* FIXME: handle floating-point, Altivec, SPE */ ++#ifndef CONFIG_SMP ++ preempt_disable(); ++ if (last_task_used_math == current) ++ last_task_used_math = NULL; ++ if (last_task_used_altivec == current) ++ last_task_used_altivec = NULL; ++ if (last_task_used_spe == current) ++ last_task_used_spe = NULL; ++ preempt_enable(); ++#endif ++#endif /* 0 */ ++ return 0; ++} ++ ++static void setup_frame(int sig, struct emulated_sigaction *ka, ++ target_sigset_t *oldset, CPUState *env) ++{ ++ struct target_sigcontext *sc; ++ struct target_sigregs *frame; ++ target_ulong origsp = env->gpr[1]; ++ target_ulong newsp = origsp; ++ ++ /* Set up Signal Frame */ ++ newsp -= sizeof(struct target_sigregs); ++ frame = (struct target_sigregs *) newsp; ++ ++ /* Put a sigcontext on the stack */ ++ newsp -= sizeof(*sc); ++ sc = (struct target_sigcontext *) newsp; ++ ++ /* create a stack frame for the caller of the handler */ ++ newsp -= __SIGNAL_FRAMESIZE; ++ ++ if (!access_ok(VERIFY_WRITE, (void *) newsp, origsp - newsp)) ++ goto badframe; ++ ++#if TARGET_NSIG != 64 ++#error "Please adjust handle_signal()" ++#endif ++ if (__put_user((target_ulong) ka->sa._sa_handler, &sc->handler) ++ || __put_user(oldset->sig[0], &sc->oldmask) ++ || __put_user(oldset->sig[1], &sc->_unused[3]) ++ || __put_user(frame, (target_ulong *)&sc->regs) ++ || __put_user(sig, &sc->signal)) ++ goto badframe; ++ ++ if (save_user_regs(env, &frame->mctx, TARGET_NR_sigreturn)) ++ goto badframe; ++ ++ if (put_user(env->gpr[1], (unsigned long *)newsp)) ++ goto badframe; ++ env->gpr[1] = newsp; ++ env->gpr[3] = sig; ++ env->gpr[4] = (unsigned long) sc; ++ env->nip = (unsigned long) ka->sa._sa_handler; ++ env->lr = (unsigned long) frame->mctx.tramp; ++ /* FIXME: env->trap = 0; */ ++ ++ return; ++ ++badframe: ++#ifdef DEBUG_SIGNAL ++ fprintf(stderr, ++ "badframe in handle_signal, frame=%p newsp=%lx\n", ++ frame, newsp); ++#endif ++ force_sig(TARGET_SIGSEGV); ++} ++ ++static void setup_rt_frame(int sig, struct emulated_sigaction *ka, ++ target_siginfo_t *info, ++ target_sigset_t *set, CPUState *env) ++{ ++ fprintf(stderr, "setup_rt_frame: not implemented\n"); ++} ++ ++long do_sigreturn(CPUState *env) ++{ ++ struct target_sigcontext *sc; ++ struct target_sigcontext sigctx; ++ struct target_mcontext *sr; ++ target_sigset_t set; ++ sigset_t host_set; ++ ++ /* Always make any pending restarted system calls return -EINTR */ ++#if 0 /* FIXME */ ++ current_thread_info()->restart_block.fn = do_no_restart_syscall; ++#endif ++ ++ sc = (struct target_sigcontext *)(env->gpr[1] + __SIGNAL_FRAMESIZE); ++ if (!memcpy(&sigctx, sc, sizeof(sigctx))) ++ goto badframe; ++ ++ set.sig[0] = sigctx.oldmask; ++ set.sig[1] = sigctx._unused[3]; ++ target_to_host_sigset_internal(&host_set, &set); ++ sigprocmask(SIG_SETMASK, &host_set, NULL); ++ ++ sr = (struct target_mcontext *) tswapl((target_ulong)sigctx.regs); ++ if (!access_ok(VERIFY_READ, sr, sizeof(*sr)) ++ || restore_user_regs(env, sr, 1)) ++ goto badframe; ++ ++ return 0; ++ ++badframe: ++ force_sig(TARGET_SIGSEGV); ++ return 0; ++} ++ ++long do_rt_sigreturn(CPUState *env) ++{ ++ fprintf(stderr, "do_rt_sigreturn: not implemented\n"); ++ return -ENOSYS; ++} ++ + #else + + static void setup_frame(int sig, struct emulated_sigaction *ka, diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch b/packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch new file mode 100644 index 0000000000..e9b31dfe40 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch @@ -0,0 +1,18 @@ +#DPATCHLEVEL=0 +--- +# vl.c | 2 +- +# 1 file changed, 1 insertion(+), 1 deletion(-) +# +Index: vl.c +=================================================================== +--- vl.c.orig 2007-06-13 11:51:53.000000000 +0100 ++++ vl.c 2007-06-13 11:52:10.000000000 +0100 +@@ -3617,7 +3617,7 @@ static int tap_open(char *ifname, int if + return -1; + } + memset(&ifr, 0, sizeof(ifr)); +- ifr.ifr_flags = IFF_TAP | IFF_NO_PI; ++ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE; + if (ifname[0] != '\0') + pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname); + else diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch b/packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch new file mode 100644 index 0000000000..3dc58102ad --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch @@ -0,0 +1,34 @@ +#DPATCHLEVEL=0 +--- +# linux-user/syscall.c | 7 +++++-- +# 1 file changed, 5 insertions(+), 2 deletions(-) +# +Index: linux-user/syscall.c +=================================================================== +--- linux-user/syscall.c.orig 2007-04-18 13:25:40.000000000 +0100 ++++ linux-user/syscall.c 2007-04-18 13:37:27.000000000 +0100 +@@ -43,7 +43,10 @@ + #include + #include + #include ++#include + #include ++#include ++#include + #include + #include + #include +@@ -1240,11 +1243,11 @@ static long do_ipc(long call, long first + ret = get_errno(shmctl(first, second, NULL)); + break; + default: +- goto unimplemented; ++ ret = get_errno(shmctl(first, second, (struct shmid_ds *) ptr)); ++ break; + } + break; + default: +- unimplemented: + gemu_log("Unsupported ipc call: %ld (version %d)\n", call, version); + ret = -ENOSYS; + break; diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch b/packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch new file mode 100644 index 0000000000..3878079f19 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch @@ -0,0 +1,49 @@ +#DPATCHLEVEL=0 +--- +# Makefile.target | 2 +- +# linux-user/syscall.c | 11 ++++++++--- +# 2 files changed, 9 insertions(+), 4 deletions(-) +# +Index: linux-user/syscall.c +=================================================================== +--- linux-user/syscall.c.orig 2007-06-13 11:51:52.000000000 +0100 ++++ linux-user/syscall.c 2007-06-13 11:52:18.000000000 +0100 +@@ -180,6 +180,7 @@ extern int getresuid(uid_t *, uid_t *, u + extern int setresgid(gid_t, gid_t, gid_t); + extern int getresgid(gid_t *, gid_t *, gid_t *); + extern int setgroups(int, gid_t *); ++extern int uselib(const char*); + + /* + * This list is the union of errno values overidden in asm-/errno.h +@@ -3215,7 +3216,8 @@ long do_syscall(void *cpu_env, int num, + break; + #ifdef TARGET_NR_uselib + case TARGET_NR_uselib: +- goto unimplemented; ++ ret = get_errno(uselib(path((const char*)arg1))); ++ break; + #endif + #ifdef TARGET_NR_swapon + case TARGET_NR_swapon: +@@ -4405,7 +4407,9 @@ long do_syscall(void *cpu_env, int num, + goto unimplemented; + #ifdef TARGET_NR_mincore + case TARGET_NR_mincore: +- goto unimplemented; ++ page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE); ++ ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); ++ break; + #endif + #ifdef TARGET_NR_madvise + case TARGET_NR_madvise: +@@ -4539,7 +4543,8 @@ long do_syscall(void *cpu_env, int num, + break; + #ifdef TARGET_NR_readahead + case TARGET_NR_readahead: +- goto unimplemented; ++ ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3)); ++ break; + #endif + #ifdef TARGET_NR_setxattr + case TARGET_NR_setxattr: diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch b/packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch new file mode 100644 index 0000000000..d175cf96ba --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch @@ -0,0 +1,56 @@ +#DPATCHLEVEL=0 +--- +# linux-user/syscall.c | 33 ++++++++++++++++++++++++++++++--- +# 1 file changed, 30 insertions(+), 3 deletions(-) +# +Index: linux-user/syscall.c +=================================================================== +--- linux-user/syscall.c.orig 2007-06-13 11:51:54.000000000 +0100 ++++ linux-user/syscall.c 2007-06-13 11:52:17.000000000 +0100 +@@ -52,6 +52,7 @@ + //#include + #include + #include ++#include + + #define termios host_termios + #define winsize host_winsize +@@ -3912,9 +3913,35 @@ long do_syscall(void *cpu_env, int num, + break; + #endif + case TARGET_NR__sysctl: +- /* We don't implement this, but ENODIR is always a safe +- return value. */ +- return -ENOTDIR; ++ { ++ struct __sysctl_args *args = (struct __sysctl_args *) arg1; ++ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i; ++ void *oldval, *newval; ++ ++ name_target = (int *) tswapl((long) args->name); ++ nlen = tswapl(args->nlen); ++ oldval = (void *) tswapl((long) args->oldval); ++ oldlenp = (int *) tswapl((long) args->oldlenp); ++ oldlen = tswapl(*oldlenp); ++ newval = (void *) tswapl((long) args->newval); ++ newlen = tswapl(args->newlen); ++ ++ name = alloca(nlen * sizeof (int)); ++ for (i = 0; i < nlen; i++) ++ name[i] = tswapl(name_target[i]); ++ ++ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) { ++ ret = get_errno( ++ sysctl(name, nlen, oldval, &oldlen, newval, newlen)); ++ if (!is_error(ret)) { ++ *oldlenp = tswapl(oldlen); ++ } ++ } else { ++ gemu_log("qemu: Unsupported sysctl name\n"); ++ ret = -ENOSYS; ++ } ++ } ++ break; + case TARGET_NR_sched_setparam: + { + struct sched_param *target_schp; diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch b/packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch new file mode 100644 index 0000000000..a71f8b1944 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch @@ -0,0 +1,22 @@ +#DPATCHLEVEL=0 +--- +# linux-user/syscall.c | 6 +----- +# 1 file changed, 1 insertion(+), 5 deletions(-) +# +Index: linux-user/syscall.c +=================================================================== +--- linux-user/syscall.c.orig 2007-06-13 11:51:54.000000000 +0100 ++++ linux-user/syscall.c 2007-06-13 11:52:17.000000000 +0100 +@@ -2177,11 +2177,7 @@ int do_fork(CPUState *env, unsigned int + if (!newsp) + newsp = env->gpr[1]; + new_env->gpr[1] = newsp; +- { +- int i; +- for (i = 7; i < 32; i++) +- new_env->gpr[i] = 0; +- } ++ new_env->gpr[3] = 0; + #elif defined(TARGET_SH4) + if (!newsp) + newsp = env->gregs[15]; diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch b/packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch new file mode 100644 index 0000000000..0a7f4c48dd --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch @@ -0,0 +1,21 @@ +--- + linux-user/syscall.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Index: linux-user/syscall.c +=================================================================== +--- linux-user/syscall.c.orig 2007-06-13 11:51:55.000000000 +0100 ++++ linux-user/syscall.c 2007-06-13 11:52:13.000000000 +0100 +@@ -4434,6 +4434,12 @@ long do_syscall(void *cpu_env, int num, + ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); + break; + #endif ++#ifdef TARGET_NR_fadvise64_64 ++ case TARGET_NR_fadvise64_64: ++ /* Just return success */ ++ ret = get_errno(0); ++ break; ++#endif + #ifdef TARGET_NR_madvise + case TARGET_NR_madvise: + /* A straight passthrough may not be safe because qemu sometimes diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch b/packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch new file mode 100644 index 0000000000..d579dbc66e --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch @@ -0,0 +1,105 @@ +#DPATCHLEVEL=0 +--- +# linux-user/main.c | 53 +++++++++++++++++++++++++++++++++++++++++++++-- +# target-arm/nwfpe/fpa11.c | 7 ++++++ +# 2 files changed, 58 insertions(+), 2 deletions(-) +# +Index: linux-user/main.c +=================================================================== +--- linux-user/main.c.orig 2007-06-13 11:51:53.000000000 +0100 ++++ linux-user/main.c 2007-06-13 11:52:07.000000000 +0100 +@@ -339,18 +339,67 @@ void cpu_loop(CPUARMState *env) + { + TaskState *ts = env->opaque; + uint32_t opcode; ++ int rc; + + /* we handle the FPU emulation here, as Linux */ + /* we get the opcode */ + opcode = tget32(env->regs[15]); + +- if (EmulateAll(opcode, &ts->fpa, env) == 0) { ++ rc = EmulateAll(opcode, &ts->fpa, env); ++ if (rc == 0) { /* illegal instruction */ + info.si_signo = SIGILL; + info.si_errno = 0; + info.si_code = TARGET_ILL_ILLOPN; + info._sifields._sigfault._addr = env->regs[15]; + queue_signal(info.si_signo, &info); +- } else { ++ } else if (rc < 0) { /* FP exception */ ++ int arm_fpe=0; ++ ++ /* translate softfloat flags to FPSR flags */ ++ if (-rc & float_flag_invalid) ++ arm_fpe |= BIT_IOC; ++ if (-rc & float_flag_divbyzero) ++ arm_fpe |= BIT_DZC; ++ if (-rc & float_flag_overflow) ++ arm_fpe |= BIT_OFC; ++ if (-rc & float_flag_underflow) ++ arm_fpe |= BIT_UFC; ++ if (-rc & float_flag_inexact) ++ arm_fpe |= BIT_IXC; ++ ++ FPSR fpsr = ts->fpa.fpsr; ++ //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe); ++ ++ if (fpsr & (arm_fpe << 16)) { /* exception enabled? */ ++ info.si_signo = SIGFPE; ++ info.si_errno = 0; ++ ++ /* ordered by priority, least first */ ++ if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES; ++ if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND; ++ if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF; ++ if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV; ++ if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV; ++ ++ info._sifields._sigfault._addr = env->regs[15]; ++ queue_signal(info.si_signo, &info); ++ } else { ++ env->regs[15] += 4; ++ } ++ ++ /* accumulate unenabled exceptions */ ++ if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC)) ++ fpsr |= BIT_IXC; ++ if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC)) ++ fpsr |= BIT_UFC; ++ if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC)) ++ fpsr |= BIT_OFC; ++ if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC)) ++ fpsr |= BIT_DZC; ++ if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC)) ++ fpsr |= BIT_IOC; ++ ts->fpa.fpsr=fpsr; ++ } else { /* everything OK */ + /* increment PC */ + env->regs[15] += 4; + } +Index: target-arm/nwfpe/fpa11.c +=================================================================== +--- target-arm/nwfpe/fpa11.c.orig 2007-06-13 11:51:52.000000000 +0100 ++++ target-arm/nwfpe/fpa11.c 2007-06-13 11:51:55.000000000 +0100 +@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc + fpa11->initflag = 1; + } + ++ set_float_exception_flags(0, &fpa11->fp_status); ++ + if (TEST_OPCODE(opcode,MASK_CPRT)) + { + //fprintf(stderr,"emulating CPRT\n"); +@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc + } + + // restore_flags(flags); ++ if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status)) ++ { ++ //printf("fef 0x%x\n",float_exception_flags); ++ nRc=-get_float_exception_flags(&fpa11->fp_status); ++ } + + //printf("returning %d\n",nRc); + return(nRc); diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch b/packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch new file mode 100644 index 0000000000..f0316c8042 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch @@ -0,0 +1,17 @@ +--- + hw/ne2000.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: qemu/hw/ne2000.c +=================================================================== +--- qemu.orig/hw/ne2000.c 2007-06-13 11:51:52.000000000 +0100 ++++ qemu/hw/ne2000.c 2007-06-13 11:51:55.000000000 +0100 +@@ -214,7 +214,7 @@ static int ne2000_can_receive(void *opaq + NE2000State *s = opaque; + + if (s->cmd & E8390_STOP) +- return 1; ++ return 0; + return !ne2000_buffer_full(s); + } + diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch b/packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch new file mode 100644 index 0000000000..553e57623e --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch @@ -0,0 +1,27 @@ +#DPATCHLEVEL=0 +--- +# dyngen-exec.h | 4 ++-- +# 1 file changed, 2 insertions(+), 2 deletions(-) +# +Index: dyngen-exec.h +=================================================================== +--- dyngen-exec.h.orig 2007-06-13 11:48:22.000000000 +0100 ++++ dyngen-exec.h 2007-06-13 11:51:55.000000000 +0100 +@@ -38,7 +38,7 @@ typedef unsigned int uint32_t; + // Linux/Sparc64 defines uint64_t + #if !(defined (__sparc_v9__) && defined(__linux__)) + /* XXX may be done for all 64 bits targets ? */ +-#if defined (__x86_64__) || defined(__ia64) ++#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__) + typedef unsigned long uint64_t; + #else + typedef unsigned long long uint64_t; +@@ -55,7 +55,7 @@ typedef signed short int16_t; + typedef signed int int32_t; + // Linux/Sparc64 defines int64_t + #if !(defined (__sparc_v9__) && defined(__linux__)) +-#if defined (__x86_64__) || defined(__ia64) ++#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__) + typedef signed long int64_t; + #else + typedef signed long long int64_t; diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch b/packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch new file mode 100644 index 0000000000..32a6bc0ee0 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch @@ -0,0 +1,18 @@ +#DPATCHLEVEL=0 +--- +# sparc.ld | 2 +- +# 1 file changed, 1 insertion(+), 1 deletion(-) +# +Index: sparc.ld +=================================================================== +--- sparc.ld.orig 2007-06-13 11:48:22.000000000 +0100 ++++ sparc.ld 2007-06-13 11:51:56.000000000 +0100 +@@ -6,7 +6,7 @@ ENTRY(_start) + SECTIONS + { + /* Read-only sections, merged into text segment: */ +- . = 0x60000000 + SIZEOF_HEADERS; ++ . = 0x60000000 + 0x400; + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch b/packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch new file mode 100644 index 0000000000..e4858b79d7 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch @@ -0,0 +1,18 @@ +#DPATCHLEVEL=1 +--- +# cpu-all.h | 2 +- +# 1 file changed, 1 insertion(+), 1 deletion(-) +# +Index: qemu/cpu-all.h +=================================================================== +--- qemu.orig/cpu-all.h 2007-06-13 11:48:22.000000000 +0100 ++++ qemu/cpu-all.h 2007-06-13 11:51:56.000000000 +0100 +@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i + static inline void stl_le_p(void *ptr, int v) + { + #ifdef __powerpc__ +- __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr)); ++ __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory"); + #else + uint8_t *p = ptr; + p[0] = v; diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch b/packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch new file mode 100644 index 0000000000..ea060811a1 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch @@ -0,0 +1,44 @@ +--- + configure | 6 ++++++ + vl.c | 4 +++- + 2 files changed, 9 insertions(+), 1 deletion(-) + +Index: configure +=================================================================== +--- configure.orig 2007-06-13 11:48:22.000000000 +0100 ++++ configure 2007-06-13 11:52:07.000000000 +0100 +@@ -112,6 +112,12 @@ OS_CFLAGS="-mno-cygwin" + MINGW32*) + mingw32="yes" + ;; ++GNU/kFreeBSD) ++oss="yes" ++if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then ++ kqemu="yes" ++fi ++;; + FreeBSD) + bsd="yes" + oss="yes" +Index: vl.c +=================================================================== +--- vl.c.orig 2007-06-13 11:51:54.000000000 +0100 ++++ vl.c 2007-06-13 11:51:56.000000000 +0100 +@@ -47,6 +47,8 @@ + #ifndef __APPLE__ + #include + #endif ++#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__) ++#include + #else + #ifndef __sun__ + #include +@@ -3454,7 +3456,7 @@ static TAPState *net_tap_fd_init(VLANSta + return s; + } + +-#ifdef _BSD ++#if defined (_BSD) || defined (__FreeBSD_kernel__) + static int tap_open(char *ifname, int ifname_size) + { + int fd; diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch b/packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch new file mode 100644 index 0000000000..54e02eff8b --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch @@ -0,0 +1,55 @@ +--- + arm.ld | 7 +++++++ + i386.ld | 7 +++++++ + 2 files changed, 14 insertions(+) + +Index: arm.ld +=================================================================== +--- arm.ld.orig 2007-06-13 11:48:22.000000000 +0100 ++++ arm.ld 2007-06-13 11:51:56.000000000 +0100 +@@ -26,6 +26,10 @@ SECTIONS + { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } + .rela.rodata : + { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } ++ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } ++ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } ++ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } ++ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } +@@ -58,6 +62,9 @@ SECTIONS + .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } + __exidx_end = .; + .reginfo : { *(.reginfo) } ++ /* Thread Local Storage sections */ ++ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } ++ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } + /* Adjust the address for the data segment. We want to adjust up to + the same address within the page on the next page up. */ + . = ALIGN(0x100000) + (. & (0x100000 - 1)); +Index: i386.ld +=================================================================== +--- i386.ld.orig 2007-06-13 11:48:22.000000000 +0100 ++++ i386.ld 2007-06-13 11:51:56.000000000 +0100 +@@ -28,6 +28,10 @@ SECTIONS + { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } + .rela.rodata : + { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } ++ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } ++ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } ++ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } ++ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } +@@ -53,6 +57,9 @@ SECTIONS + _etext = .; + PROVIDE (etext = .); + .fini : { *(.fini) } =0x47ff041f ++ /* Thread Local Storage sections */ ++ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } ++ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } + . = ALIGN(32 / 8); + PROVIDE (__preinit_array_start = .); + .preinit_array : { *(.preinit_array) } diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch b/packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch new file mode 100644 index 0000000000..5280a5bd4a --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch @@ -0,0 +1,18 @@ +=== modified file 'sdl.c' +--- + sdl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: sdl.c +=================================================================== +--- sdl.c.orig 2007-06-13 11:48:22.000000000 +0100 ++++ sdl.c 2007-06-13 11:51:56.000000000 +0100 +@@ -241,7 +241,7 @@ static void sdl_hide_cursor(void) + + if (kbd_mouse_is_absolute()) { + SDL_ShowCursor(1); +- SDL_SetCursor(sdl_cursor_hidden); ++ /* SDL_SetCursor(sdl_cursor_hidden); */ + } else { + SDL_ShowCursor(0); + } diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch b/packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch new file mode 100644 index 0000000000..4911ac131f --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch @@ -0,0 +1,223 @@ +=== modified file 'hw/pl110.c' +--- + hw/pl110.c | 13 ++++-- + hw/pl110_template.h | 107 ++++++++++++++++++++++++++++++++++++---------------- + 2 files changed, 86 insertions(+), 34 deletions(-) + +Index: hw/pl110.c +=================================================================== +--- hw/pl110.c.orig 2007-06-13 11:48:22.000000000 +0100 ++++ hw/pl110.c 2007-06-13 11:51:57.000000000 +0100 +@@ -10,6 +10,7 @@ + #include "vl.h" + + #define PL110_CR_EN 0x001 ++#define PL110_CR_BGR 0x100 + #define PL110_CR_BEBO 0x200 + #define PL110_CR_BEPO 0x400 + #define PL110_CR_PWR 0x800 +@@ -114,6 +115,7 @@ static void pl110_update_display(void *o + int first, last = 0; + int dirty, new_dirty; + int i; ++ int bpp_offset; + + if (!pl110_enabled(s)) + return; +@@ -145,12 +147,17 @@ static void pl110_update_display(void *o + fprintf(stderr, "pl110: Bad color depth\n"); + exit(1); + } ++ if (s->cr & PL110_CR_BGR) ++ bpp_offset = 0; ++ else ++ bpp_offset = 18; ++ + if (s->cr & PL110_CR_BEBO) +- fn = fntable[s->bpp + 6]; ++ fn = fntable[s->bpp + 6 + bpp_offset]; + else if (s->cr & PL110_CR_BEPO) +- fn = fntable[s->bpp + 12]; ++ fn = fntable[s->bpp + 12 + bpp_offset]; + else +- fn = fntable[s->bpp]; ++ fn = fntable[s->bpp + bpp_offset]; + + src_width = s->cols; + switch (s->bpp) { +Index: hw/pl110_template.h +=================================================================== +--- hw/pl110_template.h.orig 2007-06-13 11:48:22.000000000 +0100 ++++ hw/pl110_template.h 2007-06-13 11:51:57.000000000 +0100 +@@ -24,6 +24,16 @@ + #error unknown bit depth + #endif + ++#undef RGB ++#define BORDER bgr ++#define ORDER 0 ++#include "pl110_template.h" ++#define ORDER 1 ++#include "pl110_template.h" ++#define ORDER 2 ++#include "pl110_template.h" ++#define RGB ++#define BORDER rgb + #define ORDER 0 + #include "pl110_template.h" + #define ORDER 1 +@@ -33,26 +43,47 @@ + + static drawfn glue(pl110_draw_fn_,BITS)[18] = + { +- glue(pl110_draw_line1_lblp,BITS), +- glue(pl110_draw_line2_lblp,BITS), +- glue(pl110_draw_line4_lblp,BITS), +- glue(pl110_draw_line8_lblp,BITS), +- glue(pl110_draw_line16_lblp,BITS), +- glue(pl110_draw_line32_lblp,BITS), ++ glue(pl110_draw_line1_lblp_bgr,BITS), ++ glue(pl110_draw_line2_lblp_bgr,BITS), ++ glue(pl110_draw_line4_lblp_bgr,BITS), ++ glue(pl110_draw_line8_lblp_bgr,BITS), ++ glue(pl110_draw_line16_lblp_bgr,BITS), ++ glue(pl110_draw_line32_lblp_bgr,BITS), + +- glue(pl110_draw_line1_bbbp,BITS), +- glue(pl110_draw_line2_bbbp,BITS), +- glue(pl110_draw_line4_bbbp,BITS), +- glue(pl110_draw_line8_bbbp,BITS), +- glue(pl110_draw_line16_bbbp,BITS), +- glue(pl110_draw_line32_bbbp,BITS), ++ glue(pl110_draw_line1_bbbp_bgr,BITS), ++ glue(pl110_draw_line2_bbbp_bgr,BITS), ++ glue(pl110_draw_line4_bbbp_bgr,BITS), ++ glue(pl110_draw_line8_bbbp_bgr,BITS), ++ glue(pl110_draw_line16_bbbp_bgr,BITS), ++ glue(pl110_draw_line32_bbbp_bgr,BITS), + +- glue(pl110_draw_line1_lbbp,BITS), +- glue(pl110_draw_line2_lbbp,BITS), +- glue(pl110_draw_line4_lbbp,BITS), +- glue(pl110_draw_line8_lbbp,BITS), +- glue(pl110_draw_line16_lbbp,BITS), +- glue(pl110_draw_line32_lbbp,BITS) ++ glue(pl110_draw_line1_lbbp_bgr,BITS), ++ glue(pl110_draw_line2_lbbp_bgr,BITS), ++ glue(pl110_draw_line4_lbbp_bgr,BITS), ++ glue(pl110_draw_line8_lbbp_bgr,BITS), ++ glue(pl110_draw_line16_lbbp_bgr,BITS), ++ glue(pl110_draw_line32_lbbp_bgr,BITS), ++ ++ glue(pl110_draw_line1_lblp_rgb,BITS), ++ glue(pl110_draw_line2_lblp_rgb,BITS), ++ glue(pl110_draw_line4_lblp_rgb,BITS), ++ glue(pl110_draw_line8_lblp_rgb,BITS), ++ glue(pl110_draw_line16_lblp_rgb,BITS), ++ glue(pl110_draw_line32_lblp_rgb,BITS), ++ ++ glue(pl110_draw_line1_bbbp_rgb,BITS), ++ glue(pl110_draw_line2_bbbp_rgb,BITS), ++ glue(pl110_draw_line4_bbbp_rgb,BITS), ++ glue(pl110_draw_line8_bbbp_rgb,BITS), ++ glue(pl110_draw_line16_bbbp_rgb,BITS), ++ glue(pl110_draw_line32_bbbp_rgb,BITS), ++ ++ glue(pl110_draw_line1_lbbp_rgb,BITS), ++ glue(pl110_draw_line2_lbbp_rgb,BITS), ++ glue(pl110_draw_line4_lbbp_rgb,BITS), ++ glue(pl110_draw_line8_lbbp_rgb,BITS), ++ glue(pl110_draw_line16_lbbp_rgb,BITS), ++ glue(pl110_draw_line32_lbbp_rgb,BITS), + }; + + #undef BITS +@@ -61,18 +92,18 @@ static drawfn glue(pl110_draw_fn_,BITS)[ + #else + + #if ORDER == 0 +-#define NAME glue(lblp, BITS) ++#define NAME glue(glue(lblp_, BORDER), BITS) + #ifdef WORDS_BIGENDIAN + #define SWAP_WORDS 1 + #endif + #elif ORDER == 1 +-#define NAME glue(bbbp, BITS) ++#define NAME glue(glue(bbbp_, BORDER), BITS) + #ifndef WORDS_BIGENDIAN + #define SWAP_WORDS 1 + #endif + #else + #define SWAP_PIXELS 1 +-#define NAME glue(lbbp, BITS) ++#define NAME glue(glue(lbbp_, BORDER), BITS) + #ifdef WORDS_BIGENDIAN + #define SWAP_WORDS 1 + #endif +@@ -195,27 +226,34 @@ static void glue(pl110_draw_line16_,NAME + #ifdef SWAP_WORDS + data = bswap32(data); + #endif ++#ifdef RGB ++#define LSB r ++#define MSB b ++#else ++#define LSB b ++#define MSB r ++#endif + #if 0 +- r = data & 0x1f; ++ LSB = data & 0x1f; + data >>= 5; + g = data & 0x3f; + data >>= 6; +- b = data & 0x1f; ++ MSB = data & 0x1f; + data >>= 5; + #else +- r = (data & 0x1f) << 3; ++ LSB = (data & 0x1f) << 3; + data >>= 5; + g = (data & 0x3f) << 2; + data >>= 6; +- b = (data & 0x1f) << 3; ++ MSB = (data & 0x1f) << 3; + data >>= 5; + #endif + COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); +- r = (data & 0x1f) << 3; ++ LSB = (data & 0x1f) << 3; + data >>= 5; + g = (data & 0x3f) << 2; + data >>= 6; +- b = (data & 0x1f) << 3; ++ MSB = (data & 0x1f) << 3; + data >>= 5; + COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); + width -= 2; +@@ -229,14 +267,21 @@ static void glue(pl110_draw_line32_,NAME + unsigned int r, g, b; + while (width > 0) { + data = *(uint32_t *)src; ++#ifdef RGB ++#define LSB r ++#define MSB b ++#else ++#define LSB b ++#define MSB r ++#endif + #ifdef SWAP_WORDS +- r = data & 0xff; ++ LSB = data & 0xff; + g = (data >> 8) & 0xff; +- b = (data >> 16) & 0xff; ++ MSB = (data >> 16) & 0xff; + #else +- r = (data >> 24) & 0xff; ++ LSB = (data >> 24) & 0xff; + g = (data >> 16) & 0xff; +- b = (data >> 8) & 0xff; ++ MSB = (data >> 8) & 0xff; + #endif + COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); + width--; diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch b/packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch new file mode 100644 index 0000000000..f9b10aebc5 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch @@ -0,0 +1,857 @@ +Index: qemu/configure +=================================================================== +--- qemu.orig/configure 2006-08-26 16:31:53.000000000 +0100 ++++ qemu/configure 2006-08-26 16:31:53.000000000 +0100 +@@ -97,6 +97,7 @@ + build_docs="no" + build_acpi_tables="no" + uname_release="" ++nptl="yes" + + # OS specific + targetos=`uname -s` +@@ -243,6 +244,8 @@ + ;; + --enable-iasl) build_acpi_tables="yes" + ;; ++ --disable-nptl) nptl="no" ++ ;; + esac + done + +@@ -441,6 +444,23 @@ + fi + fi + ++# check NPTL support ++cat > $TMPC < ++void foo() ++{ ++#ifndef CLONE_SETTLS ++#error bork ++#endif ++} ++EOF ++ ++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then ++ : ++else ++ nptl="no" ++fi ++ + ########################################## + # SDL probe + +@@ -559,6 +579,7 @@ + fi + echo "FMOD support $fmod $fmod_support" + echo "kqemu support $kqemu" ++echo "NPTL support $nptl" + echo "Documentation $build_docs" + [ ! -z "$uname_release" ] && \ + echo "uname -r $uname_release" +@@ -880,6 +901,14 @@ + echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak + fi + fi ++else ++ if test "$nptl" = "yes" ; then ++ case "$target_cpu" in ++ arm | armeb) ++ echo "#define USE_NPTL 1" >> $config_h ++ ;; ++ esac ++ fi + fi + + if test "$cocoa" = "yes" ; then +Index: qemu/exec-all.h +=================================================================== +--- qemu.orig/exec-all.h 2006-08-26 16:28:32.000000000 +0100 ++++ qemu/exec-all.h 2006-08-26 16:31:53.000000000 +0100 +@@ -347,163 +347,7 @@ + extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; + extern void *io_mem_opaque[IO_MEM_NB_ENTRIES]; + +-#ifdef __powerpc__ +-static inline int testandset (int *p) +-{ +- int ret; +- __asm__ __volatile__ ( +- "0: lwarx %0,0,%1\n" +- " xor. %0,%3,%0\n" +- " bne 1f\n" +- " stwcx. %2,0,%1\n" +- " bne- 0b\n" +- "1: " +- : "=&r" (ret) +- : "r" (p), "r" (1), "r" (0) +- : "cr0", "memory"); +- return ret; +-} +-#endif +- +-#ifdef __i386__ +-static inline int testandset (int *p) +-{ +- long int readval = 0; +- +- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" +- : "+m" (*p), "+a" (readval) +- : "r" (1) +- : "cc"); +- return readval; +-} +-#endif +- +-#ifdef __x86_64__ +-static inline int testandset (int *p) +-{ +- long int readval = 0; +- +- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" +- : "+m" (*p), "+a" (readval) +- : "r" (1) +- : "cc"); +- return readval; +-} +-#endif +- +-#ifdef __s390__ +-static inline int testandset (int *p) +-{ +- int ret; +- +- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" +- " jl 0b" +- : "=&d" (ret) +- : "r" (1), "a" (p), "0" (*p) +- : "cc", "memory" ); +- return ret; +-} +-#endif +- +-#ifdef __alpha__ +-static inline int testandset (int *p) +-{ +- int ret; +- unsigned long one; +- +- __asm__ __volatile__ ("0: mov 1,%2\n" +- " ldl_l %0,%1\n" +- " stl_c %2,%1\n" +- " beq %2,1f\n" +- ".subsection 2\n" +- "1: br 0b\n" +- ".previous" +- : "=r" (ret), "=m" (*p), "=r" (one) +- : "m" (*p)); +- return ret; +-} +-#endif +- +-#ifdef __sparc__ +-static inline int testandset (int *p) +-{ +- int ret; +- +- __asm__ __volatile__("ldstub [%1], %0" +- : "=r" (ret) +- : "r" (p) +- : "memory"); +- +- return (ret ? 1 : 0); +-} +-#endif +- +-#ifdef __arm__ +-static inline int testandset (int *spinlock) +-{ +- register unsigned int ret; +- __asm__ __volatile__("swp %0, %1, [%2]" +- : "=r"(ret) +- : "0"(1), "r"(spinlock)); +- +- return ret; +-} +-#endif +- +-#ifdef __mc68000 +-static inline int testandset (int *p) +-{ +- char ret; +- __asm__ __volatile__("tas %1; sne %0" +- : "=r" (ret) +- : "m" (p) +- : "cc","memory"); +- return ret; +-} +-#endif +- +-#ifdef __ia64 +-#include +- +-static inline int testandset (int *p) +-{ +- return __sync_lock_test_and_set (p, 1); +-} +-#endif +- +-typedef int spinlock_t; +- +-#define SPIN_LOCK_UNLOCKED 0 +- +-#if defined(CONFIG_USER_ONLY) +-static inline void spin_lock(spinlock_t *lock) +-{ +- while (testandset(lock)); +-} +- +-static inline void spin_unlock(spinlock_t *lock) +-{ +- *lock = 0; +-} +- +-static inline int spin_trylock(spinlock_t *lock) +-{ +- return !testandset(lock); +-} +-#else +-static inline void spin_lock(spinlock_t *lock) +-{ +-} +- +-static inline void spin_unlock(spinlock_t *lock) +-{ +-} +- +-static inline int spin_trylock(spinlock_t *lock) +-{ +- return 1; +-} +-#endif ++#include "qemu_spinlock.h" + + extern spinlock_t tb_lock; + +Index: qemu/linux-user/arm/syscall.h +=================================================================== +--- qemu.orig/linux-user/arm/syscall.h 2006-03-09 19:18:11.000000000 +0000 ++++ qemu/linux-user/arm/syscall.h 2006-08-26 16:31:53.000000000 +0100 +@@ -28,7 +28,9 @@ + #define ARM_SYSCALL_BASE 0x900000 + #define ARM_THUMB_SYSCALL 0 + +-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2) ++#define ARM_NR_BASE 0xf0000 ++#define ARM_NR_cacheflush (ARM_NR_BASE + 2) ++#define ARM_NR_set_tls (ARM_NR_BASE + 5) + + #define ARM_NR_semihosting 0x123456 + #define ARM_NR_thumb_semihosting 0xAB +Index: qemu/linux-user/main.c +=================================================================== +--- qemu.orig/linux-user/main.c 2006-08-26 16:28:40.000000000 +0100 ++++ qemu/linux-user/main.c 2006-08-26 16:31:53.000000000 +0100 +@@ -309,6 +309,50 @@ + } + } + ++/* Handle a jump to the kernel code page. */ ++static int ++do_kernel_trap(CPUARMState *env) ++{ ++ uint32_t addr; ++ uint32_t *ptr; ++ uint32_t cpsr; ++ ++ switch (env->regs[15]) { ++ case 0xffff0fc0: /* __kernel_cmpxchg */ ++ /* XXX: This only works between threads, not between processes. ++ Use native atomic operations. */ ++ /* ??? This probably breaks horribly if the access segfaults. */ ++ cpu_lock(); ++ ptr = (uint32_t *)env->regs[2]; ++ cpsr = cpsr_read(env); ++ if (*ptr == env->regs[0]) { ++ *ptr = env->regs[1]; ++ env->regs[0] = 0; ++ cpsr |= CPSR_C; ++ } else { ++ env->regs[0] = -1; ++ cpsr &= ~CPSR_C; ++ } ++ cpsr_write(env, cpsr, CPSR_C); ++ cpu_unlock(); ++ break; ++ case 0xffff0fe0: /* __kernel_get_tls */ ++ env->regs[0] = env->cp15.c13_tls; ++ break; ++ default: ++ return 1; ++ } ++ /* Jump back to the caller. */ ++ addr = env->regs[14]; ++ if (addr & 1) { ++ env->thumb = 1; ++ addr &= ~1; ++ } ++ env->regs[15] = addr; ++ ++ return 0; ++} ++ + void cpu_loop(CPUARMState *env) + { + int trapnr; +@@ -365,10 +409,8 @@ + } + } + +- if (n == ARM_NR_cacheflush) { +- arm_cache_flush(env->regs[0], env->regs[1]); +- } else if (n == ARM_NR_semihosting +- || n == ARM_NR_thumb_semihosting) { ++ if (n == ARM_NR_semihosting ++ || n == ARM_NR_thumb_semihosting) { + env->regs[0] = do_arm_semihosting (env); + } else if (n == 0 || n >= ARM_SYSCALL_BASE + || (env->thumb && n == ARM_THUMB_SYSCALL)) { +@@ -379,14 +421,34 @@ + n -= ARM_SYSCALL_BASE; + env->eabi = 0; + } +- env->regs[0] = do_syscall(env, +- n, +- env->regs[0], +- env->regs[1], +- env->regs[2], +- env->regs[3], +- env->regs[4], +- env->regs[5]); ++ if ( n > ARM_NR_BASE) { ++ switch (n) ++ { ++ case ARM_NR_cacheflush: ++ arm_cache_flush(env->regs[0], env->regs[1]); ++ break; ++#ifdef USE_NPTL ++ case ARM_NR_set_tls: ++ cpu_set_tls(env, env->regs[0]); ++ env->regs[0] = 0; ++ break; ++#endif ++ default: ++ printf ("Error: Bad syscall: %x\n", n); ++ goto error; ++ } ++ } ++ else ++ { ++ env->regs[0] = do_syscall(env, ++ n, ++ env->regs[0], ++ env->regs[1], ++ env->regs[2], ++ env->regs[3], ++ env->regs[4], ++ env->regs[5]); ++ } + } else { + goto error; + } +@@ -425,6 +487,10 @@ + } + } + break; ++ case EXCP_KERNEL_TRAP: ++ if (do_kernel_trap(env)) ++ goto error; ++ break; + default: + error: + fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", +@@ -1639,6 +1705,10 @@ + ts->heap_base = info->brk; + /* This will be filled in on the first SYS_HEAPINFO call. */ + ts->heap_limit = 0; ++ /* Register the magic kernel code page. The cpu will generate a ++ special exception when it tries to execute code here. We can't ++ put real code here because it may be in use by the host kernel. */ ++ page_set_flags(0xffff0000, 0xffff0fff, 0); + } + #elif defined(TARGET_SPARC) + { +Index: qemu/linux-user/qemu.h +=================================================================== +--- qemu.orig/linux-user/qemu.h 2006-08-26 16:28:40.000000000 +0100 ++++ qemu/linux-user/qemu.h 2006-08-26 16:33:50.000000000 +0100 +@@ -75,6 +75,9 @@ + uint32_t v86mask; + #endif + int used; /* non zero if used */ ++#ifdef USE_NPTL ++ uint32_t *child_tidptr; ++#endif + struct image_info *info; + uint8_t stack[0]; + } __attribute__((aligned(16))) TaskState; +Index: qemu/linux-user/syscall.c +=================================================================== +--- qemu.orig/linux-user/syscall.c 2006-08-26 16:28:40.000000000 +0100 ++++ qemu/linux-user/syscall.c 2006-08-26 16:31:53.000000000 +0100 +@@ -66,9 +66,18 @@ + #include + + #include "qemu.h" ++#include "qemu_spinlock.h" + + //#define DEBUG + ++#ifdef USE_NPTL ++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \ ++ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID) ++#else ++/* XXX: Hardcode the above values. */ ++#define CLONE_NPTL_FLAGS2 0 ++#endif ++ + #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) + /* 16 bit uid wrappers emulation */ + #define USE_UID16 +@@ -1602,20 +1611,38 @@ + thread/process */ + #define NEW_STACK_SIZE 8192 + ++#ifdef USE_NPTL ++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED; ++#endif ++ + static int clone_func(void *arg) + { + CPUState *env = arg; ++#ifdef HAVE_NPTL ++ /* Wait until the parent has finshed initializing the tls state. */ ++ while (!spin_trylock(&nptl_lock)) ++ usleep(1); ++ spin_unlock(&nptl_lock); ++#endif + cpu_loop(env); + /* never exits */ + return 0; + } + +-int do_fork(CPUState *env, unsigned int flags, unsigned long newsp) ++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp, ++ uint32_t *parent_tidptr, void *newtls, ++ uint32_t *child_tidptr) + { + int ret; + TaskState *ts; + uint8_t *new_stack; + CPUState *new_env; ++#ifdef USE_NPTL ++ unsigned int nptl_flags; ++ ++ if (flags & CLONE_PARENT_SETTID) ++ *parent_tidptr = gettid(); ++#endif + + if (flags & CLONE_VM) { + ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); +@@ -1665,16 +1692,60 @@ + #error unsupported target CPU + #endif + new_env->opaque = ts; ++#ifdef USE_NPTL ++ nptl_flags = flags; ++ flags &= ~CLONE_NPTL_FLAGS2; ++ if (nptl_flags & CLONE_CHILD_CLEARTID) { ++ ts->child_tidptr = child_tidptr; ++ } ++ if (nptl_flags & CLONE_SETTLS) ++ cpu_set_tls (new_env, newtls); ++ /* Grab the global cpu lock so that the thread setup appears ++ atomic. */ ++ if (nptl_flags & CLONE_CHILD_SETTID) ++ spin_lock(&nptl_lock); ++#else ++ if (flags & CLONE_NPTL_FLAGS2) ++ return -EINVAL; ++#endif ++ + #ifdef __ia64__ + ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); + #else + ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); + #endif ++#ifdef USE_NPTL ++ if (ret != -1) { ++ if (nptl_flags & CLONE_CHILD_SETTID) ++ *child_tidptr = ret; ++ } ++ /* Allow the child to continue. */ ++ if (nptl_flags & CLONE_CHILD_SETTID) ++ spin_unlock(&nptl_lock); ++#endif + } else { +- /* if no CLONE_VM, we consider it is a fork */ +- if ((flags & ~CSIGNAL) != 0) +- return -EINVAL; +- ret = fork(); ++ /* if no CLONE_VM, we consider it is a fork */ ++ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0) ++ return -EINVAL; ++ ret = fork(); ++#ifdef USE_NPTL ++ /* There is a race condition here. The parent process could ++ theoretically read the TID in the child process before the child ++ tid is set. This would require using either ptrace ++ (not implemented) or having *_tidptr to point at a shared memory ++ mapping. We can't repeat the spinlock hack used above because ++ the child process gets its own copy of the lock. */ ++ if (ret == 0) { ++ /* Child Process. */ ++ if (flags & CLONE_CHILD_SETTID) ++ *child_tidptr = gettid(); ++ ts = (TaskState *)env->opaque; ++ if (flags & CLONE_CHILD_CLEARTID) ++ ts->child_tidptr = child_tidptr; ++ if (flags & CLONE_SETTLS) ++ cpu_set_tls (env, newtls); ++ } ++#endif + } + return ret; + } +@@ -1918,7 +1989,7 @@ + ret = do_brk(arg1); + break; + case TARGET_NR_fork: +- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0)); ++ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL)); + break; + case TARGET_NR_waitpid: + { +@@ -2989,7 +3060,8 @@ + ret = get_errno(fsync(arg1)); + break; + case TARGET_NR_clone: +- ret = get_errno(do_fork(cpu_env, arg1, arg2)); ++ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3, ++ (void *)arg4, (uint32_t *)arg5)); + break; + #ifdef __NR_exit_group + /* new thread calls */ +@@ -3339,7 +3411,8 @@ + #endif + #ifdef TARGET_NR_vfork + case TARGET_NR_vfork: +- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0)); ++ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0, ++ NULL, NULL, NULL)); + break; + #endif + #ifdef TARGET_NR_ugetrlimit +@@ -3838,4 +3911,3 @@ + #endif + return ret; + } +- +Index: qemu/target-arm/cpu.h +=================================================================== +--- qemu.orig/target-arm/cpu.h 2006-03-09 19:18:27.000000000 +0000 ++++ qemu/target-arm/cpu.h 2006-08-26 16:31:53.000000000 +0100 +@@ -35,6 +35,9 @@ + #define EXCP_IRQ 5 + #define EXCP_FIQ 6 + #define EXCP_BKPT 7 ++#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */ ++ ++ + + /* We currently assume float and double are IEEE single and double + precision respectively. +@@ -85,6 +88,7 @@ + uint32_t c9_data; + uint32_t c13_fcse; /* FCSE PID. */ + uint32_t c13_context; /* Context ID. */ ++ uint32_t c13_tls; /* Paul Brook told me to just add this ;) */ + } cp15; + + /* Internal CPU feature flags. */ +@@ -135,6 +139,15 @@ + int cpu_arm_signal_handler(int host_signum, struct siginfo *info, + void *puc); + ++void cpu_lock(void); ++void cpu_unlock(void); ++#if defined(USE_NPTL) ++static inline void cpu_set_tls(CPUARMState *env, void *newtls) ++{ ++ env->cp15.c13_tls = (uint32_t)newtls; ++} ++#endif ++ + #define CPSR_M (0x1f) + #define CPSR_T (1 << 5) + #define CPSR_F (1 << 6) +@@ -146,7 +159,11 @@ + #define CPSR_J (1 << 24) + #define CPSR_IT_0_1 (3 << 25) + #define CPSR_Q (1 << 27) +-#define CPSR_NZCV (0xf << 28) ++#define CPSR_V (1 << 28) ++#define CPSR_C (1 << 29) ++#define CPSR_Z (1 << 30) ++#define CPSR_N (1 << 31) ++#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V) + + #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV) + /* Return the current CPSR value. */ +Index: qemu/target-arm/exec.h +=================================================================== +--- qemu.orig/target-arm/exec.h 2006-03-09 19:18:27.000000000 +0000 ++++ qemu/target-arm/exec.h 2006-08-26 16:31:53.000000000 +0100 +@@ -51,8 +51,6 @@ + + /* In op_helper.c */ + +-void cpu_lock(void); +-void cpu_unlock(void); + void helper_set_cp15(CPUState *, uint32_t, uint32_t); + uint32_t helper_get_cp15(CPUState *, uint32_t); + +Index: qemu/target-arm/op.c +=================================================================== +--- qemu.orig/target-arm/op.c 2006-08-26 16:28:48.000000000 +0100 ++++ qemu/target-arm/op.c 2006-08-26 16:31:53.000000000 +0100 +@@ -891,6 +891,12 @@ + cpu_loop_exit(); + } + ++void OPPROTO op_kernel_trap(void) ++{ ++ env->exception_index = EXCP_KERNEL_TRAP; ++ cpu_loop_exit(); ++} ++ + /* VFP support. We follow the convention used for VFP instrunctions: + Single precition routines have a "s" suffix, double precision a + "d" suffix. */ +Index: qemu/target-arm/translate.c +=================================================================== +--- qemu.orig/target-arm/translate.c 2006-08-26 16:28:48.000000000 +0100 ++++ qemu/target-arm/translate.c 2006-08-26 16:31:53.000000000 +0100 +@@ -2382,6 +2382,7 @@ + s->is_jmp = DISAS_JUMP; + } + ++ + /* generate intermediate code in gen_opc_buf and gen_opparam_buf for + basic block 'tb'. If search_pc is TRUE, also generate PC + information for each intermediate instruction. */ +@@ -2416,6 +2417,15 @@ + nb_gen_labels = 0; + lj = -1; + do { ++#ifdef CONFIG_USER_ONLY ++ /* Intercept jump to the magic kernel page. */ ++ if (dc->pc > 0xffff0000) { ++ gen_op_kernel_trap(); ++ dc->is_jmp = DISAS_UPDATE; ++ break; ++ } ++#endif ++ + if (env->nb_breakpoints > 0) { + for(j = 0; j < env->nb_breakpoints; j++) { + if (env->breakpoints[j] == dc->pc) { +Index: qemu/qemu_spinlock.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ qemu/qemu_spinlock.h 2006-08-26 16:31:53.000000000 +0100 +@@ -0,0 +1,182 @@ ++/* ++ * internal execution defines for qemu ++ * ++ * Copyright (c) 2003 Fabrice Bellard ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#ifndef _QEMU_SPINLOCK_H ++#define _QEMU_SPINLOCK_H ++ ++#ifdef __powerpc__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ __asm__ __volatile__ ( ++ "0: lwarx %0,0,%1\n" ++ " xor. %0,%3,%0\n" ++ " bne 1f\n" ++ " stwcx. %2,0,%1\n" ++ " bne- 0b\n" ++ "1: " ++ : "=&r" (ret) ++ : "r" (p), "r" (1), "r" (0) ++ : "cr0", "memory"); ++ return ret; ++} ++#endif ++ ++#ifdef __i386__ ++static inline int testandset (int *p) ++{ ++ long int readval = 0; ++ ++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" ++ : "+m" (*p), "+a" (readval) ++ : "r" (1) ++ : "cc"); ++ return readval; ++} ++#endif ++ ++#ifdef __x86_64__ ++static inline int testandset (int *p) ++{ ++ long int readval = 0; ++ ++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" ++ : "+m" (*p), "+a" (readval) ++ : "r" (1) ++ : "cc"); ++ return readval; ++} ++#endif ++ ++#ifdef __s390__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ ++ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" ++ " jl 0b" ++ : "=&d" (ret) ++ : "r" (1), "a" (p), "0" (*p) ++ : "cc", "memory" ); ++ return ret; ++} ++#endif ++ ++#ifdef __alpha__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ unsigned long one; ++ ++ __asm__ __volatile__ ("0: mov 1,%2\n" ++ " ldl_l %0,%1\n" ++ " stl_c %2,%1\n" ++ " beq %2,1f\n" ++ ".subsection 2\n" ++ "1: br 0b\n" ++ ".previous" ++ : "=r" (ret), "=m" (*p), "=r" (one) ++ : "m" (*p)); ++ return ret; ++} ++#endif ++ ++#ifdef __sparc__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ ++ __asm__ __volatile__("ldstub [%1], %0" ++ : "=r" (ret) ++ : "r" (p) ++ : "memory"); ++ ++ return (ret ? 1 : 0); ++} ++#endif ++ ++#ifdef __arm__ ++static inline int testandset (int *spinlock) ++{ ++ register unsigned int ret; ++ __asm__ __volatile__("swp %0, %1, [%2]" ++ : "=r"(ret) ++ : "0"(1), "r"(spinlock)); ++ ++ return ret; ++} ++#endif ++ ++#ifdef __mc68000 ++static inline int testandset (int *p) ++{ ++ char ret; ++ __asm__ __volatile__("tas %1; sne %0" ++ : "=r" (ret) ++ : "m" (p) ++ : "cc","memory"); ++ return ret; ++} ++#endif ++ ++#ifdef __ia64 ++#include ++ ++static inline int testandset (int *p) ++{ ++ return __sync_lock_test_and_set (p, 1); ++} ++#endif ++ ++typedef int spinlock_t; ++ ++#define SPIN_LOCK_UNLOCKED 0 ++ ++#if defined(CONFIG_USER_ONLY) ++static inline void spin_lock(spinlock_t *lock) ++{ ++ while (testandset(lock)); ++} ++ ++static inline void spin_unlock(spinlock_t *lock) ++{ ++ *lock = 0; ++} ++ ++static inline int spin_trylock(spinlock_t *lock) ++{ ++ return !testandset(lock); ++} ++#else ++static inline void spin_lock(spinlock_t *lock) ++{ ++} ++ ++static inline void spin_unlock(spinlock_t *lock) ++{ ++} ++ ++static inline int spin_trylock(spinlock_t *lock) ++{ ++ return 1; ++} ++#endif ++ ++#endif /* ! _QEMU_SPINLOCK_H */ diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch b/packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch new file mode 100644 index 0000000000..dad18b3a61 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch @@ -0,0 +1,10 @@ +--- qemu/usb-linux.c~ 2006-07-19 19:06:15.000000000 +0100 ++++ qemu/usb-linux.c 2006-10-02 12:49:00.000000000 +0100 +@@ -26,7 +26,6 @@ + #if defined(__linux__) + #include + #include +-#include + #include + #include + diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/configure.patch b/packages/qemu/qemu-0.9.0+cvs20070613/configure.patch new file mode 100644 index 0000000000..ea83f8cd6d --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/configure.patch @@ -0,0 +1,13 @@ +Index: qemu/configure +=================================================================== +--- qemu.orig/configure 2006-02-09 17:58:47.000000000 +0000 ++++ qemu/configure 2006-02-21 17:47:31.000000000 +0000 +@@ -482,7 +482,7 @@ + fi + echo "HOST_CC=$host_cc" >> $config_mak + echo "AR=$ar" >> $config_mak +-echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak ++echo "STRIP=$strip" >> $config_mak + echo "CFLAGS=$CFLAGS" >> $config_mak + echo "LDFLAGS=$LDFLAGS" >> $config_mak + echo "EXESUF=$EXESUF" >> $config_mak diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch new file mode 100644 index 0000000000..976c75cd60 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch @@ -0,0 +1,46 @@ +Index: qemu/Makefile.target +=================================================================== +--- qemu.orig/Makefile.target 2007-06-29 10:57:58.000000000 +0000 ++++ qemu/Makefile.target 2007-06-29 10:58:01.000000000 +0000 +@@ -241,7 +241,6 @@ + ifdef CONFIG_LINUX_USER + OBJS= main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o \ + elfload.o linuxload.o +-LIBS+= $(AIOLIBS) + ifdef TARGET_HAS_BFLT + OBJS+= flatload.o + endif +Index: qemu/linux-user/syscall.c +=================================================================== +--- qemu.orig/linux-user/syscall.c 2007-06-29 10:58:01.000000000 +0000 ++++ qemu/linux-user/syscall.c 2007-06-29 10:58:30.000000000 +0000 +@@ -4872,29 +4872,6 @@ + goto unimplemented_nowarn; + #endif + +-#ifdef TARGET_NR_clock_gettime +- case TARGET_NR_clock_gettime: +- { +- struct timespec ts; +- ret = get_errno(clock_gettime(arg1, &ts)); +- if (!is_error(ret)) { +- host_to_target_timespec(arg2, &ts); +- } +- break; +- } +-#endif +-#ifdef TARGET_NR_clock_getres +- case TARGET_NR_clock_getres: +- { +- struct timespec ts; +- ret = get_errno(clock_getres(arg1, &ts)); +- if (!is_error(ret)) { +- host_to_target_timespec(arg2, &ts); +- } +- break; +- } +-#endif +- + default: + unimplemented: + gemu_log("qemu: Unsupported syscall: %d\n", num); diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch b/packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch new file mode 100644 index 0000000000..75b5ac9c71 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch @@ -0,0 +1,37 @@ +Index: qemu/Makefile +=================================================================== +--- qemu.orig/Makefile 2007-07-30 18:25:50.000000000 +0200 ++++ qemu/Makefile 2007-07-30 18:26:13.000000000 +0200 +@@ -5,14 +5,14 @@ + .PHONY: all clean distclean dvi info install install-doc tar tarbin \ + speed test test2 html dvi info + +-CFLAGS=-Wall -O2 -g -fno-strict-aliasing -I. ++CFLAGS+=-Wall -O2 -g -fno-strict-aliasing -I. + ifdef CONFIG_DARWIN + CFLAGS+= -mdynamic-no-pic + endif + ifeq ($(ARCH),sparc) + CFLAGS+=-mcpu=ultrasparc + endif +-LDFLAGS=-g ++LDFLAGS+=-g + LIBS= + DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE + TOOLS=qemu-img$(EXESUF) +Index: qemu/Makefile.target +=================================================================== +--- qemu.orig/Makefile.target 2007-07-30 18:27:17.000000000 +0200 ++++ qemu/Makefile.target 2007-07-30 18:27:23.000000000 +0200 +@@ -17,9 +17,9 @@ + VPATH+=:$(SRC_PATH)/linux-user + DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH) + endif +-CFLAGS=-Wall -O2 -g -fno-strict-aliasing ++CFLAGS+=-Wall -O2 -g -fno-strict-aliasing + #CFLAGS+=-Werror +-LDFLAGS=-g ++LDFLAGS+=-g + LIBS= + HELPER_CFLAGS=$(CFLAGS) + DYNGEN=../dyngen$(EXESUF) diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch b/packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch new file mode 100644 index 0000000000..59ed8771fe --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch @@ -0,0 +1,22 @@ +--- qemu.orig/Makefile ++++ qemu/Makefile +@@ -68,7 +68,7 @@ + + install: all $(if $(BUILD_DOCS),install-doc) + mkdir -p "$(DESTDIR)$(bindir)" +- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)" ++ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)" + mkdir -p "$(DESTDIR)$(datadir)" + for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \ + video.x openbios-sparc32 pxe-ne2k_pci.bin \ +--- qemu.orig/Makefile.target ++++ qemu/Makefile.target +@@ -655,7 +655,7 @@ + + install: all + ifneq ($(PROGS),) +- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)" ++ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)" + endif + + ifneq ($(wildcard .depend),) diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch b/packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch new file mode 100644 index 0000000000..09e5898d3a --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch @@ -0,0 +1,219 @@ +Index: qemu/hw/pl110.c +=================================================================== +--- qemu.orig/hw/pl110.c 2006-04-11 21:49:46.000000000 +0100 ++++ qemu/hw/pl110.c 2006-05-24 22:53:00.000000000 +0100 +@@ -10,6 +10,7 @@ + #include "vl.h" + + #define PL110_CR_EN 0x001 ++#define PL110_CR_BGR 0x100 + #define PL110_CR_BEBO 0x200 + #define PL110_CR_BEPO 0x400 + #define PL110_CR_PWR 0x800 +@@ -115,6 +116,7 @@ + int first, last = 0; + int dirty, new_dirty; + int i; ++ int bpp_offset; + + if (!pl110_enabled(s)) + return; +@@ -146,12 +148,17 @@ + fprintf(stderr, "pl110: Bad color depth\n"); + exit(1); + } ++ if (s->cr & PL110_CR_BGR) ++ bpp_offset = 0; ++ else ++ bpp_offset = 18; ++ + if (s->cr & PL110_CR_BEBO) +- fn = fntable[s->bpp + 6]; ++ fn = fntable[s->bpp + 6 + bpp_offset]; + else if (s->cr & PL110_CR_BEPO) +- fn = fntable[s->bpp + 12]; ++ fn = fntable[s->bpp + 12 + bpp_offset]; + else +- fn = fntable[s->bpp]; ++ fn = fntable[s->bpp + bpp_offset]; + + src_width = s->cols; + switch (s->bpp) { +Index: qemu/hw/pl110_template.h +=================================================================== +--- qemu.orig/hw/pl110_template.h 2006-02-19 12:31:32.000000000 +0000 ++++ qemu/hw/pl110_template.h 2006-05-24 23:04:03.000000000 +0100 +@@ -24,6 +24,16 @@ + #error unknown bit depth + #endif + ++#undef RGB ++#define BORDER bgr ++#define ORDER 0 ++#include "pl110_template.h" ++#define ORDER 1 ++#include "pl110_template.h" ++#define ORDER 2 ++#include "pl110_template.h" ++#define RGB ++#define BORDER rgb + #define ORDER 0 + #include "pl110_template.h" + #define ORDER 1 +@@ -33,26 +43,47 @@ + + static drawfn glue(pl110_draw_fn_,BITS)[18] = + { +- glue(pl110_draw_line1_lblp,BITS), +- glue(pl110_draw_line2_lblp,BITS), +- glue(pl110_draw_line4_lblp,BITS), +- glue(pl110_draw_line8_lblp,BITS), +- glue(pl110_draw_line16_lblp,BITS), +- glue(pl110_draw_line32_lblp,BITS), +- +- glue(pl110_draw_line1_bbbp,BITS), +- glue(pl110_draw_line2_bbbp,BITS), +- glue(pl110_draw_line4_bbbp,BITS), +- glue(pl110_draw_line8_bbbp,BITS), +- glue(pl110_draw_line16_bbbp,BITS), +- glue(pl110_draw_line32_bbbp,BITS), +- +- glue(pl110_draw_line1_lbbp,BITS), +- glue(pl110_draw_line2_lbbp,BITS), +- glue(pl110_draw_line4_lbbp,BITS), +- glue(pl110_draw_line8_lbbp,BITS), +- glue(pl110_draw_line16_lbbp,BITS), +- glue(pl110_draw_line32_lbbp,BITS) ++ glue(pl110_draw_line1_lblp_bgr,BITS), ++ glue(pl110_draw_line2_lblp_bgr,BITS), ++ glue(pl110_draw_line4_lblp_bgr,BITS), ++ glue(pl110_draw_line8_lblp_bgr,BITS), ++ glue(pl110_draw_line16_lblp_bgr,BITS), ++ glue(pl110_draw_line32_lblp_bgr,BITS), ++ ++ glue(pl110_draw_line1_bbbp_bgr,BITS), ++ glue(pl110_draw_line2_bbbp_bgr,BITS), ++ glue(pl110_draw_line4_bbbp_bgr,BITS), ++ glue(pl110_draw_line8_bbbp_bgr,BITS), ++ glue(pl110_draw_line16_bbbp_bgr,BITS), ++ glue(pl110_draw_line32_bbbp_bgr,BITS), ++ ++ glue(pl110_draw_line1_lbbp_bgr,BITS), ++ glue(pl110_draw_line2_lbbp_bgr,BITS), ++ glue(pl110_draw_line4_lbbp_bgr,BITS), ++ glue(pl110_draw_line8_lbbp_bgr,BITS), ++ glue(pl110_draw_line16_lbbp_bgr,BITS), ++ glue(pl110_draw_line32_lbbp_bgr,BITS), ++ ++ glue(pl110_draw_line1_lblp_rgb,BITS), ++ glue(pl110_draw_line2_lblp_rgb,BITS), ++ glue(pl110_draw_line4_lblp_rgb,BITS), ++ glue(pl110_draw_line8_lblp_rgb,BITS), ++ glue(pl110_draw_line16_lblp_rgb,BITS), ++ glue(pl110_draw_line32_lblp_rgb,BITS), ++ ++ glue(pl110_draw_line1_bbbp_rgb,BITS), ++ glue(pl110_draw_line2_bbbp_rgb,BITS), ++ glue(pl110_draw_line4_bbbp_rgb,BITS), ++ glue(pl110_draw_line8_bbbp_rgb,BITS), ++ glue(pl110_draw_line16_bbbp_rgb,BITS), ++ glue(pl110_draw_line32_bbbp_rgb,BITS), ++ ++ glue(pl110_draw_line1_lbbp_rgb,BITS), ++ glue(pl110_draw_line2_lbbp_rgb,BITS), ++ glue(pl110_draw_line4_lbbp_rgb,BITS), ++ glue(pl110_draw_line8_lbbp_rgb,BITS), ++ glue(pl110_draw_line16_lbbp_rgb,BITS), ++ glue(pl110_draw_line32_lbbp_rgb,BITS), + }; + + #undef BITS +@@ -61,18 +92,18 @@ + #else + + #if ORDER == 0 +-#define NAME glue(lblp, BITS) ++#define NAME glue(glue(lblp_, BORDER), BITS) + #ifdef WORDS_BIGENDIAN + #define SWAP_WORDS 1 + #endif + #elif ORDER == 1 +-#define NAME glue(bbbp, BITS) ++#define NAME glue(glue(bbbp_, BORDER), BITS) + #ifndef WORDS_BIGENDIAN + #define SWAP_WORDS 1 + #endif + #else + #define SWAP_PIXELS 1 +-#define NAME glue(lbbp, BITS) ++#define NAME glue(glue(lbbp_, BORDER), BITS) + #ifdef WORDS_BIGENDIAN + #define SWAP_WORDS 1 + #endif +@@ -195,27 +226,34 @@ + #ifdef SWAP_WORDS + data = bswap32(data); + #endif ++#ifdef RGB ++#define LSB r ++#define MSB b ++#else ++#define LSB b ++#define MSB r ++#endif + #if 0 +- r = data & 0x1f; ++ LSB = data & 0x1f; + data >>= 5; + g = data & 0x3f; + data >>= 6; +- b = data & 0x1f; ++ MSB = data & 0x1f; + data >>= 5; + #else +- r = (data & 0x1f) << 3; ++ LSB = (data & 0x1f) << 3; + data >>= 5; + g = (data & 0x3f) << 2; + data >>= 6; +- b = (data & 0x1f) << 3; ++ MSB = (data & 0x1f) << 3; + data >>= 5; + #endif + COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); +- r = (data & 0x1f) << 3; ++ LSB = (data & 0x1f) << 3; + data >>= 5; + g = (data & 0x3f) << 2; + data >>= 6; +- b = (data & 0x1f) << 3; ++ MSB = (data & 0x1f) << 3; + data >>= 5; + COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); + width -= 2; +@@ -229,14 +267,21 @@ + unsigned int r, g, b; + while (width > 0) { + data = *(uint32_t *)src; ++#ifdef RGB ++#define LSB r ++#define MSB b ++#else ++#define LSB b ++#define MSB r ++#endif + #ifdef SWAP_WORDS +- r = data & 0xff; ++ LSB = data & 0xff; + g = (data >> 8) & 0xff; +- b = (data >> 16) & 0xff; ++ MSB = (data >> 16) & 0xff; + #else +- r = (data >> 24) & 0xff; ++ LSB = (data >> 24) & 0xff; + g = (data >> 16) & 0xff; +- b = (data >> 8) & 0xff; ++ MSB = (data >> 8) & 0xff; + #endif + COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); + width--; diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch new file mode 100644 index 0000000000..869acba2cf --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch @@ -0,0 +1,294 @@ +Index: qemu/linux-user/main.c +=================================================================== +--- qemu.orig/linux-user/main.c 2007-06-29 10:47:58.000000000 +0000 ++++ qemu/linux-user/main.c 2007-06-29 10:47:58.000000000 +0000 +@@ -156,7 +156,7 @@ + p[1] = tswapl(e2); + } + +-uint64_t gdt_table[6]; ++uint64_t gdt_table[9]; + uint64_t idt_table[256]; + + /* only dpl matters as we do only user space emulation */ +@@ -1768,7 +1768,11 @@ + int optind; + const char *r; + int gdbstub_port = 0; +- ++ char *assume_kernel = getenv("QEMU_ASSUME_KERNEL"); ++ ++ if (assume_kernel) ++ setenv("LD_ASSUME_KERNEL", assume_kernel, 1); ++ + if (argc <= 1) + usage(); + +Index: qemu/linux-user/syscall.c +=================================================================== +--- qemu.orig/linux-user/syscall.c 2007-06-29 10:47:58.000000000 +0000 ++++ qemu/linux-user/syscall.c 2007-06-29 10:53:44.000000000 +0000 +@@ -60,6 +60,7 @@ + #define tchars host_tchars /* same as target */ + #define ltchars host_ltchars /* same as target */ + ++#include + #include + #include + #include +@@ -2122,6 +2123,80 @@ + return ret; + } + ++int do_set_thread_area(CPUX86State *env, target_ulong ptr) ++{ ++ uint64_t *gdt_table = g2h(env->gdt.base); ++ struct target_modify_ldt_ldt_s ldt_info; ++ struct target_modify_ldt_ldt_s *target_ldt_info; ++ int seg_32bit, contents, read_exec_only, limit_in_pages; ++ int seg_not_present, useable; ++ uint32_t *lp, entry_1, entry_2; ++ int i; ++ ++ lock_user_struct(target_ldt_info, ptr, 1); ++ ldt_info.entry_number = tswap32(target_ldt_info->entry_number); ++ ldt_info.base_addr = tswapl(target_ldt_info->base_addr); ++ ldt_info.limit = tswap32(target_ldt_info->limit); ++ ldt_info.flags = tswap32(target_ldt_info->flags); ++ if (ldt_info.entry_number == -1) { ++ for (i=6; i<8; i++) ++ if (gdt_table[i] == 0) { ++ ldt_info.entry_number = i; ++ target_ldt_info->entry_number = tswap32(i); ++ break; ++ } ++ } ++ unlock_user_struct(target_ldt_info, ptr, 0); ++ ++ if (ldt_info.entry_number < 6 || ldt_info.entry_number > 8) ++ return -EINVAL; ++ seg_32bit = ldt_info.flags & 1; ++ contents = (ldt_info.flags >> 1) & 3; ++ read_exec_only = (ldt_info.flags >> 3) & 1; ++ limit_in_pages = (ldt_info.flags >> 4) & 1; ++ seg_not_present = (ldt_info.flags >> 5) & 1; ++ useable = (ldt_info.flags >> 6) & 1; ++ ++ if (contents == 3) { ++ if (seg_not_present == 0) ++ return -EINVAL; ++ } ++ ++ /* NOTE: same code as Linux kernel */ ++ /* Allow LDTs to be cleared by the user. */ ++ if (ldt_info.base_addr == 0 && ldt_info.limit == 0) { ++ if ((contents == 0 && ++ read_exec_only == 1 && ++ seg_32bit == 0 && ++ limit_in_pages == 0 && ++ seg_not_present == 1 && ++ useable == 0 )) { ++ entry_1 = 0; ++ entry_2 = 0; ++ goto install; ++ } ++ } ++ ++ entry_1 = ((ldt_info.base_addr & 0x0000ffff) << 16) | ++ (ldt_info.limit & 0x0ffff); ++ entry_2 = (ldt_info.base_addr & 0xff000000) | ++ ((ldt_info.base_addr & 0x00ff0000) >> 16) | ++ (ldt_info.limit & 0xf0000) | ++ ((read_exec_only ^ 1) << 9) | ++ (contents << 10) | ++ ((seg_not_present ^ 1) << 15) | ++ (seg_32bit << 22) | ++ (limit_in_pages << 23) | ++ (useable << 20) | ++ 0x7000; ++ ++ /* Install the new entry ... */ ++install: ++ lp = (uint32_t *)(gdt_table + ldt_info.entry_number); ++ lp[0] = tswap32(entry_1); ++ lp[1] = tswap32(entry_2); ++ return 0; ++} + #endif /* defined(TARGET_I386) */ + + /* this stack is the equivalent of the kernel stack associated with a +@@ -2154,15 +2229,20 @@ + TaskState *ts; + uint8_t *new_stack; + CPUState *new_env; ++#if defined(TARGET_I386) ++ uint64_t *new_gdt_table; ++#endif + #ifdef USE_NPTL + unsigned int nptl_flags; + + if (flags & CLONE_PARENT_SETTID) + *parent_tidptr = gettid(); + #endif +- ++ + if (flags & CLONE_VM) { + ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); ++ if (!ts) ++ return -ENOMEM; + memset(ts, 0, sizeof(TaskState)); + new_stack = ts->stack; + ts->used = 1; +@@ -2174,6 +2254,29 @@ + #if defined(TARGET_I386) + if (!newsp) + newsp = env->regs[R_ESP]; ++ new_gdt_table = malloc(9 * 8); ++ if (!new_gdt_table) { ++ free(new_env); ++ return -ENOMEM; ++ } ++ /* Copy main GDT table from parent, but clear TLS entries */ ++ memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8); ++ memset(&new_gdt_table[6], 0, 3 * 8); ++ new_env->gdt.base = h2g(new_gdt_table); ++ if (flags & 0x00080000 /* CLONE_SETTLS */) { ++ ret = do_set_thread_area(new_env, new_env->regs[R_ESI]); ++ if (ret) { ++ free(new_gdt_table); ++ free(new_env); ++ return ret; ++ } ++ } ++ cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]); ++ cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]); ++ cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]); ++ cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]); ++ cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]); ++ cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]); + new_env->regs[R_ESP] = newsp; + new_env->regs[R_EAX] = 0; + #elif defined(TARGET_ARM) +@@ -2517,6 +2620,68 @@ + unlock_user_struct(target_ts, target_addr, 1); + } + ++static long do_futex(target_ulong uaddr, int op, uint32_t val, ++ target_ulong utime, target_ulong uaddr2, ++ uint32_t val3) ++{ ++ struct timespec host_utime; ++ unsigned long val2 = utime; ++ ++ if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) { ++ target_to_host_timespec(&host_utime, utime); ++ val2 = (unsigned long)&host_utime; ++ } ++ ++#ifdef BSWAP_NEEDED ++ switch(op) { ++ case FUTEX_CMP_REQUEUE: ++ val3 = tswap32(val3); ++ case FUTEX_REQUEUE: ++ val2 = tswap32(val2); ++ case FUTEX_WAIT: ++ case FUTEX_WAKE: ++ val = tswap32(val); ++ case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */ ++ case FUTEX_UNLOCK_PI: ++ break; ++ default: ++ gemu_log("qemu: Unsupported futex op %d\n", op); ++ return -ENOSYS; ++ } ++#if 0 /* No, it's worse than this */ ++ if (op == FUTEX_WAKE_OP) { ++ /* Need to munge the secondary operation (val3) */ ++ val3 = tswap32(val3); ++ int op2 = (val3 >> 28) & 7; ++ int cmp = (val3 >> 24) & 15; ++ int oparg = (val3 << 8) >> 20; ++ int cmparg = (val3 << 20) >> 20; ++ int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28); ++ ++ if (shift) ++ oparg = (oparg & 7) + 24 - (oparg & 24); ++ else oparg = ++ if (op2 == FUTEX_OP_ADD) { ++ gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n"); ++ return -ENOSYS; ++ } ++ if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE || ++ cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) { ++ gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg); ++ return -ENOSYS; ++ } ++ val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg; ++ } ++#endif ++#endif ++ return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3); ++} ++ ++int do_set_tid_address(target_ulong tidptr) ++{ ++ return syscall(__NR_set_tid_address, g2h(tidptr)); ++} ++ + long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, + long arg4, long arg5, long arg6) + { +@@ -2534,7 +2699,7 @@ + _mcleanup(); + #endif + gdb_exit(cpu_env, arg1); +- /* XXX: should free thread stack and CPU env */ ++ /* XXX: should free thread stack, GDT and CPU env */ + _exit(arg1); + ret = 0; /* avoid warning */ + break; +@@ -4642,6 +4807,9 @@ + ((CPUMIPSState *) cpu_env)->tls_value = arg1; + ret = 0; + break; ++#elif TARGET_i386 ++ ret = get_errno(do_set_thread_area(cpu_env, arg1)); ++ break; + #else + goto unimplemented_nowarn; + #endif +@@ -4655,6 +4823,21 @@ + goto unimplemented_nowarn; + #endif + ++#ifdef TARGET_NR_futex ++ case TARGET_NR_futex: ++ ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6)); ++ break; ++#endif ++#ifdef TARGET_NR_set_tid_address ++ case TARGET_NR_set_tid_address: ++ ret = get_errno(do_set_tid_address(arg1)); ++ break; ++#endif ++#ifdef TARGET_NR_set_robust_list ++ case TARGET_NR_set_robust_list: ++ goto unimplemented_nowarn; ++#endif ++ + #ifdef TARGET_NR_clock_gettime + case TARGET_NR_clock_gettime: + { +@@ -4678,12 +4861,6 @@ + } + #endif + +-#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) +- case TARGET_NR_set_tid_address: +- ret = get_errno(set_tid_address((int *) arg1)); +- break; +-#endif +- + default: + unimplemented: + gemu_log("qemu: Unsupported syscall: %d\n", num); diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch new file mode 100644 index 0000000000..fc7b0cfa4b --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch @@ -0,0 +1,892 @@ +These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single +ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1 +immediately dies saying: + Error: f0005 + qemu: uncaught target signal 6 (Aborted) - exiting +while qemu-0.8.2 dies saying: + qemu: Unsupported syscall: 983045 + cannot set up thread-local storage: unknown error + +This file is a rediffing of the patches visible at +https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006 +which "patch" fails to apply automatically. +See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html + + Martin Guy, 27 Sept 2006 + +Index: qemu/configure +=================================================================== +--- qemu.orig/configure 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/configure 2007-06-29 10:47:58.000000000 +0000 +@@ -101,6 +101,7 @@ + darwin_user="no" + build_docs="no" + uname_release="" ++nptl="yes" + + # OS specific + targetos=`uname -s` +@@ -281,6 +282,8 @@ + *) echo "undefined SPARC architecture. Exiting";exit 1;; + esac + ;; ++ --disable-nptl) nptl="no" ++ ;; + esac + done + +@@ -355,6 +358,7 @@ + echo " --disable-linux-user disable all linux usermode emulation targets" + echo " --enable-darwin-user enable all darwin usermode emulation targets" + echo " --disable-darwin-user disable all darwin usermode emulation targets" ++echo " --disable-nptl disable usermode NPTL guest support" + echo " --fmod-lib path to FMOD library" + echo " --fmod-inc path to FMOD includes" + echo " --enable-uname-release=R Return R for uname -r in usermode emulation" +@@ -524,6 +528,23 @@ + } + EOF + ++# check NPTL support ++cat > $TMPC < ++void foo() ++{ ++#ifndef CLONE_SETTLS ++#error bork ++#endif ++} ++EOF ++ ++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then ++ : ++else ++ nptl="no" ++fi ++ + ########################################## + # SDL probe + +@@ -678,6 +699,7 @@ + echo "Documentation $build_docs" + [ ! -z "$uname_release" ] && \ + echo "uname -r $uname_release" ++echo "NPTL support $nptl" + + if test $sdl_too_old = "yes"; then + echo "-> Your SDL version is too old - please upgrade to have SDL support" +@@ -1057,6 +1079,14 @@ + echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak + fi + fi ++else ++ if test "$nptl" = "yes" ; then ++ case "$target_cpu" in ++ arm | armeb) ++ echo "#define USE_NPTL 1" >> $config_h ++ ;; ++ esac ++ fi + fi + + if test "$cocoa" = "yes" ; then +Index: qemu/exec-all.h +=================================================================== +--- qemu.orig/exec-all.h 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/exec-all.h 2007-06-29 10:47:58.000000000 +0000 +@@ -360,170 +360,7 @@ + extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; + extern void *io_mem_opaque[IO_MEM_NB_ENTRIES]; + +-#if defined(__powerpc__) +-static inline int testandset (int *p) +-{ +- int ret; +- __asm__ __volatile__ ( +- "0: lwarx %0,0,%1\n" +- " xor. %0,%3,%0\n" +- " bne 1f\n" +- " stwcx. %2,0,%1\n" +- " bne- 0b\n" +- "1: " +- : "=&r" (ret) +- : "r" (p), "r" (1), "r" (0) +- : "cr0", "memory"); +- return ret; +-} +-#elif defined(__i386__) +-static inline int testandset (int *p) +-{ +- long int readval = 0; +- +- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" +- : "+m" (*p), "+a" (readval) +- : "r" (1) +- : "cc"); +- return readval; +-} +-#elif defined(__x86_64__) +-static inline int testandset (int *p) +-{ +- long int readval = 0; +- +- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" +- : "+m" (*p), "+a" (readval) +- : "r" (1) +- : "cc"); +- return readval; +-} +-#elif defined(__s390__) +-static inline int testandset (int *p) +-{ +- int ret; +- +- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" +- " jl 0b" +- : "=&d" (ret) +- : "r" (1), "a" (p), "0" (*p) +- : "cc", "memory" ); +- return ret; +-} +-#elif defined(__alpha__) +-static inline int testandset (int *p) +-{ +- int ret; +- unsigned long one; +- +- __asm__ __volatile__ ("0: mov 1,%2\n" +- " ldl_l %0,%1\n" +- " stl_c %2,%1\n" +- " beq %2,1f\n" +- ".subsection 2\n" +- "1: br 0b\n" +- ".previous" +- : "=r" (ret), "=m" (*p), "=r" (one) +- : "m" (*p)); +- return ret; +-} +-#elif defined(__sparc__) +-static inline int testandset (int *p) +-{ +- int ret; +- +- __asm__ __volatile__("ldstub [%1], %0" +- : "=r" (ret) +- : "r" (p) +- : "memory"); +- +- return (ret ? 1 : 0); +-} +-#elif defined(__arm__) +-static inline int testandset (int *spinlock) +-{ +- register unsigned int ret; +- __asm__ __volatile__("swp %0, %1, [%2]" +- : "=r"(ret) +- : "0"(1), "r"(spinlock)); +- +- return ret; +-} +-#elif defined(__mc68000) +-static inline int testandset (int *p) +-{ +- char ret; +- __asm__ __volatile__("tas %1; sne %0" +- : "=r" (ret) +- : "m" (p) +- : "cc","memory"); +- return ret; +-} +-#elif defined(__ia64) +- +-#include +- +-static inline int testandset (int *p) +-{ +- return __sync_lock_test_and_set (p, 1); +-} +-#elif defined(__mips__) +-static inline int testandset (int *p) +-{ +- int ret; +- +- __asm__ __volatile__ ( +- " .set push \n" +- " .set noat \n" +- " .set mips2 \n" +- "1: li $1, 1 \n" +- " ll %0, %1 \n" +- " sc $1, %1 \n" +- " beqz $1, 1b \n" +- " .set pop " +- : "=r" (ret), "+R" (*p) +- : +- : "memory"); +- +- return ret; +-} +-#else +-#error unimplemented CPU support +-#endif +- +-typedef int spinlock_t; +- +-#define SPIN_LOCK_UNLOCKED 0 +- +-#if defined(CONFIG_USER_ONLY) +-static inline void spin_lock(spinlock_t *lock) +-{ +- while (testandset(lock)); +-} +- +-static inline void spin_unlock(spinlock_t *lock) +-{ +- *lock = 0; +-} +- +-static inline int spin_trylock(spinlock_t *lock) +-{ +- return !testandset(lock); +-} +-#else +-static inline void spin_lock(spinlock_t *lock) +-{ +-} +- +-static inline void spin_unlock(spinlock_t *lock) +-{ +-} +- +-static inline int spin_trylock(spinlock_t *lock) +-{ +- return 1; +-} +-#endif ++#include "qemu_spinlock.h" + + extern spinlock_t tb_lock; + +Index: qemu/linux-user/arm/syscall.h +=================================================================== +--- qemu.orig/linux-user/arm/syscall.h 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/linux-user/arm/syscall.h 2007-06-29 10:47:58.000000000 +0000 +@@ -28,7 +28,9 @@ + #define ARM_SYSCALL_BASE 0x900000 + #define ARM_THUMB_SYSCALL 0 + +-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2) ++#define ARM_NR_BASE 0xf0000 ++#define ARM_NR_cacheflush (ARM_NR_BASE + 2) ++#define ARM_NR_set_tls (ARM_NR_BASE + 5) + + #define ARM_NR_semihosting 0x123456 + #define ARM_NR_thumb_semihosting 0xAB +Index: qemu/linux-user/main.c +=================================================================== +--- qemu.orig/linux-user/main.c 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/linux-user/main.c 2007-06-29 10:53:47.000000000 +0000 +@@ -325,6 +325,50 @@ + } + } + ++/* Handle a jump to the kernel code page. */ ++static int ++do_kernel_trap(CPUARMState *env) ++{ ++ uint32_t addr; ++ uint32_t *ptr; ++ uint32_t cpsr; ++ ++ switch (env->regs[15]) { ++ case 0xffff0fc0: /* __kernel_cmpxchg */ ++ /* XXX: This only works between threads, not between processes. ++ Use native atomic operations. */ ++ /* ??? This probably breaks horribly if the access segfaults. */ ++ cpu_lock(); ++ ptr = (uint32_t *)env->regs[2]; ++ cpsr = cpsr_read(env); ++ if (*ptr == env->regs[0]) { ++ *ptr = env->regs[1]; ++ env->regs[0] = 0; ++ cpsr |= CPSR_C; ++ } else { ++ env->regs[0] = -1; ++ cpsr &= ~CPSR_C; ++ } ++ cpsr_write(env, cpsr, CPSR_C); ++ cpu_unlock(); ++ break; ++ case 0xffff0fe0: /* __kernel_get_tls */ ++ env->regs[0] = env->cp15.c13_tls; ++ break; ++ default: ++ return 1; ++ } ++ /* Jump back to the caller. */ ++ addr = env->regs[14]; ++ if (addr & 1) { ++ env->thumb = 1; ++ addr &= ~1; ++ } ++ env->regs[15] = addr; ++ ++ return 0; ++} ++ + void cpu_loop(CPUARMState *env) + { + int trapnr; +@@ -381,10 +425,8 @@ + } + } + +- if (n == ARM_NR_cacheflush) { +- arm_cache_flush(env->regs[0], env->regs[1]); +- } else if (n == ARM_NR_semihosting +- || n == ARM_NR_thumb_semihosting) { ++ if (n == ARM_NR_semihosting ++ || n == ARM_NR_thumb_semihosting) { + env->regs[0] = do_arm_semihosting (env); + } else if (n == 0 || n >= ARM_SYSCALL_BASE + || (env->thumb && n == ARM_THUMB_SYSCALL)) { +@@ -395,14 +437,34 @@ + n -= ARM_SYSCALL_BASE; + env->eabi = 0; + } +- env->regs[0] = do_syscall(env, +- n, +- env->regs[0], +- env->regs[1], +- env->regs[2], +- env->regs[3], +- env->regs[4], +- env->regs[5]); ++ if ( n > ARM_NR_BASE) { ++ switch (n) ++ { ++ case ARM_NR_cacheflush: ++ arm_cache_flush(env->regs[0], env->regs[1]); ++ break; ++#ifdef USE_NPTL ++ case ARM_NR_set_tls: ++ cpu_set_tls(env, env->regs[0]); ++ env->regs[0] = 0; ++ break; ++#endif ++ default: ++ printf ("Error: Bad syscall: %x\n", n); ++ goto error; ++ } ++ } ++ else ++ { ++ env->regs[0] = do_syscall(env, ++ n, ++ env->regs[0], ++ env->regs[1], ++ env->regs[2], ++ env->regs[3], ++ env->regs[4], ++ env->regs[5]); ++ } + } else { + goto error; + } +@@ -441,6 +503,10 @@ + } + } + break; ++ case EXCP_KERNEL_TRAP: ++ if (do_kernel_trap(env)) ++ goto error; ++ break; + default: + error: + fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", +@@ -2047,6 +2113,10 @@ + ts->heap_base = info->brk; + /* This will be filled in on the first SYS_HEAPINFO call. */ + ts->heap_limit = 0; ++ /* Register the magic kernel code page. The cpu will generate a ++ special exception when it tries to execute code here. We can't ++ put real code here because it may be in use by the host kernel. */ ++ page_set_flags(0xffff0000, 0xffff0fff, 0); + #endif + + if (gdbstub_port) { +Index: qemu/linux-user/qemu.h +=================================================================== +--- qemu.orig/linux-user/qemu.h 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/linux-user/qemu.h 2007-06-29 10:47:58.000000000 +0000 +@@ -80,6 +80,9 @@ + uint32_t heap_base; + uint32_t heap_limit; + #endif ++#ifdef USE_NPTL ++ uint32_t *child_tidptr; ++#endif + int used; /* non zero if used */ + struct image_info *info; + uint8_t stack[0]; +Index: qemu/linux-user/syscall.c +=================================================================== +--- qemu.orig/linux-user/syscall.c 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/linux-user/syscall.c 2007-06-29 10:53:47.000000000 +0000 +@@ -70,9 +70,18 @@ + #include + + #include "qemu.h" ++#include "qemu_spinlock.h" + + //#define DEBUG + ++#ifdef USE_NPTL ++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \ ++ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID) ++#else ++/* XXX: Hardcode the above values. */ ++#define CLONE_NPTL_FLAGS2 0 ++#endif ++ + #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \ + || defined(TARGET_M68K) || defined(TARGET_SH4) + /* 16 bit uid wrappers emulation */ +@@ -2119,20 +2128,38 @@ + thread/process */ + #define NEW_STACK_SIZE 8192 + ++#ifdef USE_NPTL ++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED; ++#endif ++ + static int clone_func(void *arg) + { + CPUState *env = arg; ++#ifdef HAVE_NPTL ++ /* Wait until the parent has finshed initializing the tls state. */ ++ while (!spin_trylock(&nptl_lock)) ++ usleep(1); ++ spin_unlock(&nptl_lock); ++#endif + cpu_loop(env); + /* never exits */ + return 0; + } + +-int do_fork(CPUState *env, unsigned int flags, unsigned long newsp) ++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp, ++ uint32_t *parent_tidptr, void *newtls, ++ uint32_t *child_tidptr) + { + int ret; + TaskState *ts; + uint8_t *new_stack; + CPUState *new_env; ++#ifdef USE_NPTL ++ unsigned int nptl_flags; ++ ++ if (flags & CLONE_PARENT_SETTID) ++ *parent_tidptr = gettid(); ++#endif + + if (flags & CLONE_VM) { + ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); +@@ -2199,16 +2226,67 @@ + #error unsupported target CPU + #endif + new_env->opaque = ts; ++#ifdef USE_NPTL ++ nptl_flags = flags; ++ flags &= ~CLONE_NPTL_FLAGS2; ++ ++ if (nptl_flags & CLONE_CHILD_CLEARTID) { ++ ts->child_tidptr = child_tidptr; ++ } ++ ++ if (nptl_flags & CLONE_SETTLS) ++ cpu_set_tls (new_env, newtls); ++ ++ /* Grab the global cpu lock so that the thread setup appears ++ atomic. */ ++ if (nptl_flags & CLONE_CHILD_SETTID) ++ spin_lock(&nptl_lock); ++ ++#else ++ if (flags & CLONE_NPTL_FLAGS2) ++ return -EINVAL; ++#endif ++ ++ if (CLONE_VFORK & flags) ++ flags ^= CLONE_VM; + #ifdef __ia64__ + ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); + #else + ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); + #endif ++#ifdef USE_NPTL ++ if (ret != -1) { ++ if (nptl_flags & CLONE_CHILD_SETTID) ++ *child_tidptr = ret; ++ } ++ ++ /* Allow the child to continue. */ ++ if (nptl_flags & CLONE_CHILD_SETTID) ++ spin_unlock(&nptl_lock); ++#endif + } else { + /* if no CLONE_VM, we consider it is a fork */ +- if ((flags & ~CSIGNAL) != 0) ++ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0) + return -EINVAL; + ret = fork(); ++#ifdef USE_NPTL ++ /* There is a race condition here. The parent process could ++ theoretically read the TID in the child process before the child ++ tid is set. This would require using either ptrace ++ (not implemented) or having *_tidptr to point at a shared memory ++ mapping. We can't repeat the spinlock hack used above because ++ the child process gets its own copy of the lock. */ ++ if (ret == 0) { ++ /* Child Process. */ ++ if (flags & CLONE_CHILD_SETTID) ++ *child_tidptr = gettid(); ++ ts = (TaskState *)env->opaque; ++ if (flags & CLONE_CHILD_CLEARTID) ++ ts->child_tidptr = child_tidptr; ++ if (flags & CLONE_SETTLS) ++ cpu_set_tls (env, newtls); ++ } ++#endif + } + return ret; + } +@@ -2485,7 +2563,7 @@ + ret = do_brk(arg1); + break; + case TARGET_NR_fork: +- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0)); ++ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL)); + break; + #ifdef TARGET_NR_waitpid + case TARGET_NR_waitpid: +@@ -3649,7 +3727,8 @@ + ret = get_errno(fsync(arg1)); + break; + case TARGET_NR_clone: +- ret = get_errno(do_fork(cpu_env, arg1, arg2)); ++ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3, ++ (void *)arg4, (uint32_t *)arg5)); + break; + #ifdef __NR_exit_group + /* new thread calls */ +@@ -4037,7 +4116,8 @@ + #endif + #ifdef TARGET_NR_vfork + case TARGET_NR_vfork: +- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0)); ++ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0, ++ NULL, NULL, NULL)); + break; + #endif + #ifdef TARGET_NR_ugetrlimit +@@ -4619,4 +4699,3 @@ + #endif + return ret; + } +- +Index: qemu/qemu_spinlock.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ qemu/qemu_spinlock.h 2007-06-29 10:47:58.000000000 +0000 +@@ -0,0 +1,181 @@ ++/* ++ * Atomic operation helper include ++ * ++ * Copyright (c) 2005 Fabrice Bellard ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++#ifndef QEMU_SPINLOCK_H ++#define QEMU_SPINLOCK_H ++ ++#ifdef __powerpc__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ __asm__ __volatile__ ( ++ "0: lwarx %0,0,%1\n" ++ " xor. %0,%3,%0\n" ++ " bne 1f\n" ++ " stwcx. %2,0,%1\n" ++ " bne- 0b\n" ++ "1: " ++ : "=&r" (ret) ++ : "r" (p), "r" (1), "r" (0) ++ : "cr0", "memory"); ++ return ret; ++} ++#endif ++ ++#ifdef __i386__ ++static inline int testandset (int *p) ++{ ++ long int readval = 0; ++ ++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" ++ : "+m" (*p), "+a" (readval) ++ : "r" (1) ++ : "cc"); ++ return readval; ++} ++#endif ++ ++#ifdef __x86_64__ ++static inline int testandset (int *p) ++{ ++ long int readval = 0; ++ ++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" ++ : "+m" (*p), "+a" (readval) ++ : "r" (1) ++ : "cc"); ++ return readval; ++} ++#endif ++ ++#ifdef __s390__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ ++ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" ++ " jl 0b" ++ : "=&d" (ret) ++ : "r" (1), "a" (p), "0" (*p) ++ : "cc", "memory" ); ++ return ret; ++} ++#endif ++ ++#ifdef __alpha__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ unsigned long one; ++ ++ __asm__ __volatile__ ("0: mov 1,%2\n" ++ " ldl_l %0,%1\n" ++ " stl_c %2,%1\n" ++ " beq %2,1f\n" ++ ".subsection 2\n" ++ "1: br 0b\n" ++ ".previous" ++ : "=r" (ret), "=m" (*p), "=r" (one) ++ : "m" (*p)); ++ return ret; ++} ++#endif ++ ++#ifdef __sparc__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ ++ __asm__ __volatile__("ldstub [%1], %0" ++ : "=r" (ret) ++ : "r" (p) ++ : "memory"); ++ ++ return (ret ? 1 : 0); ++} ++#endif ++ ++#ifdef __arm__ ++static inline int testandset (int *spinlock) ++{ ++ register unsigned int ret; ++ __asm__ __volatile__("swp %0, %1, [%2]" ++ : "=r"(ret) ++ : "0"(1), "r"(spinlock)); ++ ++ return ret; ++} ++#endif ++ ++#ifdef __mc68000 ++static inline int testandset (int *p) ++{ ++ char ret; ++ __asm__ __volatile__("tas %1; sne %0" ++ : "=r" (ret) ++ : "m" (p) ++ : "cc","memory"); ++ return ret; ++} ++#endif ++ ++#ifdef __ia64 ++#include ++ ++static inline int testandset (int *p) ++{ ++ return __sync_lock_test_and_set (p, 1); ++} ++#endif ++ ++typedef int spinlock_t; ++ ++#define SPIN_LOCK_UNLOCKED 0 ++ ++#if defined(CONFIG_USER_ONLY) ++static inline void spin_lock(spinlock_t *lock) ++{ ++ while (testandset(lock)); ++} ++ ++static inline void spin_unlock(spinlock_t *lock) ++{ ++ *lock = 0; ++} ++ ++static inline int spin_trylock(spinlock_t *lock) ++{ ++ return !testandset(lock); ++} ++#else ++static inline void spin_lock(spinlock_t *lock) ++{ ++} ++ ++static inline void spin_unlock(spinlock_t *lock) ++{ ++} ++ ++static inline int spin_trylock(spinlock_t *lock) ++{ ++ return 1; ++} ++#endif ++ ++#endif +Index: qemu/target-arm/cpu.h +=================================================================== +--- qemu.orig/target-arm/cpu.h 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/target-arm/cpu.h 2007-06-29 10:47:58.000000000 +0000 +@@ -37,6 +37,7 @@ + #define EXCP_IRQ 5 + #define EXCP_FIQ 6 + #define EXCP_BKPT 7 ++#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */ + + typedef void ARMWriteCPFunc(void *opaque, int cp_info, + int srcreg, int operand, uint32_t value); +@@ -97,6 +98,7 @@ + uint32_t c9_data; + uint32_t c13_fcse; /* FCSE PID. */ + uint32_t c13_context; /* Context ID. */ ++ uint32_t c13_tls; /* Context ID. */ + uint32_t c15_cpar; /* XScale Coprocessor Access Register */ + } cp15; + +@@ -169,6 +171,15 @@ + int cpu_arm_signal_handler(int host_signum, void *pinfo, + void *puc); + ++void cpu_lock(void); ++void cpu_unlock(void); ++#if defined(USE_NPTL) ++static inline void cpu_set_tls(CPUARMState *env, void *newtls) ++{ ++ env->cp15.c13_tls = (uint32_t)(long)newtls; ++} ++#endif ++ + #define CPSR_M (0x1f) + #define CPSR_T (1 << 5) + #define CPSR_F (1 << 6) +@@ -180,7 +191,11 @@ + #define CPSR_J (1 << 24) + #define CPSR_IT_0_1 (3 << 25) + #define CPSR_Q (1 << 27) +-#define CPSR_NZCV (0xf << 28) ++#define CPSR_V (1 << 28) ++#define CPSR_C (1 << 29) ++#define CPSR_Z (1 << 30) ++#define CPSR_N (1 << 31) ++#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V) + + #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV) + /* Return the current CPSR value. */ +Index: qemu/target-arm/exec.h +=================================================================== +--- qemu.orig/target-arm/exec.h 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/target-arm/exec.h 2007-06-29 10:47:58.000000000 +0000 +@@ -68,8 +68,6 @@ + + /* In op_helper.c */ + +-void cpu_lock(void); +-void cpu_unlock(void); + void helper_set_cp(CPUState *, uint32_t, uint32_t); + uint32_t helper_get_cp(CPUState *, uint32_t); + void helper_set_cp15(CPUState *, uint32_t, uint32_t); +Index: qemu/target-arm/op.c +=================================================================== +--- qemu.orig/target-arm/op.c 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/target-arm/op.c 2007-06-29 10:47:58.000000000 +0000 +@@ -891,6 +891,12 @@ + cpu_loop_exit(); + } + ++void OPPROTO op_kernel_trap(void) ++{ ++ env->exception_index = EXCP_KERNEL_TRAP; ++ cpu_loop_exit(); ++} ++ + /* VFP support. We follow the convention used for VFP instrunctions: + Single precition routines have a "s" suffix, double precision a + "d" suffix. */ +Index: qemu/target-arm/op_mem.h +=================================================================== +--- qemu.orig/target-arm/op_mem.h 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/target-arm/op_mem.h 2007-06-29 10:47:58.000000000 +0000 +@@ -1,5 +1,6 @@ + /* ARM memory operations. */ + ++void helper_ld(uint32_t); + /* Load from address T1 into T0. */ + #define MEM_LD_OP(name) \ + void OPPROTO glue(op_ld##name,MEMSUFFIX)(void) \ +Index: qemu/target-arm/translate.c +=================================================================== +--- qemu.orig/target-arm/translate.c 2007-06-29 10:47:39.000000000 +0000 ++++ qemu/target-arm/translate.c 2007-06-29 10:47:58.000000000 +0000 +@@ -3548,6 +3548,15 @@ + nb_gen_labels = 0; + lj = -1; + do { ++#ifdef CONFIG_USER_ONLY ++ /* Intercept jump to the magic kernel page. */ ++ if (dc->pc > 0xffff0000) { ++ gen_op_kernel_trap(); ++ dc->is_jmp = DISAS_UPDATE; ++ break; ++ } ++#endif ++ + if (env->nb_breakpoints > 0) { + for(j = 0; j < env->nb_breakpoints; j++) { + if (env->breakpoints[j] == dc->pc) { diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch new file mode 100644 index 0000000000..d9303e3464 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch @@ -0,0 +1,31 @@ +--- qemu.orig/linux-user/mmap.c ++++ qemu/linux-user/mmap.c +@@ -29,6 +29,10 @@ + + //#define DEBUG_MMAP + ++#ifndef MAP_32BIT ++#define MAP_32BIT 0 ++#endif ++ + /* NOTE: all the constants are the HOST ones, but addresses are target. */ + int target_mprotect(target_ulong start, target_ulong len, int prot) + { +@@ -234,7 +238,7 @@ + host_offset = offset & qemu_host_page_mask; + host_len = len + offset - host_offset; + host_start = (long)mmap(real_start ? g2h(real_start) : NULL, +- host_len, prot, flags, fd, host_offset); ++ host_len, prot, (flags | MAP_32BIT), fd, host_offset); + if (host_start == -1) + return host_start; + /* update start so that it points to the file position at 'offset' */ +@@ -388,7 +392,7 @@ + int prot; + + /* XXX: use 5 args syscall */ +- new_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags); ++ new_addr = (long)mremap(g2h(old_addr), old_size, new_size, (flags | MAP_32BIT)); + if (new_addr == -1) + return new_addr; + new_addr = h2g(new_addr); diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch new file mode 100644 index 0000000000..c47e89895f --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch @@ -0,0 +1,52 @@ +diff -pNaur qemu-cvs-ts-orig/hw/pci.c qemu-cvs-ts/hw/pci.c +--- qemu-cvs-ts-orig/hw/pci.c 2006-08-17 10:46:34.000000000 +0000 ++++ qemu-cvs-ts/hw/pci.c 2006-09-23 17:02:41.000000000 +0000 +@@ -34,6 +34,7 @@ struct PCIBus { + SetIRQFunc *low_set_irq; + void *irq_opaque; + PCIDevice *devices[256]; ++ int irq_count[4]; + }; + + static void pci_update_mappings(PCIDevice *d); +@@ -49,6 +50,7 @@ PCIBus *pci_register_bus(pci_set_irq_fn + bus->set_irq = set_irq; + bus->irq_opaque = pic; + bus->devfn_min = devfn_min; ++ memset(bus->irq_count, 0, sizeof(bus->irq_count)); + first_bus = bus; + return bus; + } +@@ -100,6 +102,7 @@ PCIDevice *pci_register_device(PCIBus *b + pci_dev->bus = bus; + pci_dev->devfn = devfn; + pstrcpy(pci_dev->name, sizeof(pci_dev->name), name); ++ memset(pci_dev->irq_state, 0, sizeof(pci_dev->irq_state)); + + if (!config_read) + config_read = pci_default_read_config; +@@ -404,7 +407,10 @@ uint32_t pci_data_read(void *opaque, uin + void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level) + { + PCIBus *bus = pci_dev->bus; +- bus->set_irq(pci_dev, bus->irq_opaque, irq_num, level); ++ bus->irq_count[irq_num] += level - pci_dev->irq_state[irq_num]; ++ pci_dev->irq_state[irq_num] = level; ++ bus->set_irq(pci_dev, bus->irq_opaque, ++ irq_num, !!bus->irq_count[irq_num]); + } + + /***********************************************************/ +diff -pNaur qemu-cvs-ts-orig/vl.h qemu-cvs-ts/vl.h +--- qemu-cvs-ts-orig/vl.h 2006-09-18 01:15:29.000000000 +0000 ++++ qemu-cvs-ts/vl.h 2006-09-23 17:15:21.000000000 +0000 +@@ -733,6 +733,9 @@ struct PCIDevice { + PCIConfigWriteFunc *config_write; + /* ??? This is a PC-specific hack, and should be removed. */ + int irq_index; ++ ++ /* remember last irq levels */ ++ int irq_state[4]; + }; + + PCIDevice *pci_register_device(PCIBus *bus, const char *name, diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch new file mode 100644 index 0000000000..bd6a51a1f5 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch @@ -0,0 +1,13 @@ +Index: qemu/sdl.c +=================================================================== +--- qemu.orig/sdl.c 2006-10-02 17:06:12.000000000 +0100 ++++ qemu/sdl.c 2006-10-02 17:06:59.000000000 +0100 +@@ -287,7 +287,7 @@ + { + if (kbd_mouse_is_absolute()) { + SDL_ShowCursor(1); +- SDL_SetCursor(sdl_cursor_hidden); ++ /* SDL_SetCursor(sdl_cursor_hidden); */ + } else { + SDL_ShowCursor(0); + } diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch new file mode 100644 index 0000000000..33a6db3f18 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch @@ -0,0 +1,445 @@ +diff -pNaur qemu-cvs-ts-orig/hw/usb-wacom.c qemu-cvs-ts/hw/usb-wacom.c +--- qemu-cvs-ts-orig/hw/usb-wacom.c 1970-01-01 01:00:00.000000000 +0100 ++++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-22 20:44:26.000000000 +0200 +@@ -0,0 +1,408 @@ ++/* ++ * Wacom PenPartner USB tablet emulation. ++ * ++ * Copyright (c) 2006 Openedhand Ltd. ++ * ++ * Author: Andrzej Zaborowski ++ * ++ * Based on hw/usb-hid.c: ++ * Copyright (c) 2005 Fabrice Bellard ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++#include "vl.h" ++ ++/* Interface requests */ ++#define WACOM_GET_REPORT 0x2101 ++#define WACOM_SET_REPORT 0x2109 ++ ++/* HID interface requests */ ++#define HID_GET_REPORT 0xa101 ++#define HID_GET_IDLE 0xa102 ++#define HID_GET_PROTOCOL 0xa103 ++#define HID_SET_IDLE 0x210a ++#define HID_SET_PROTOCOL 0x210b ++ ++#define WACOM_MODE_HID 1 ++#define WACOM_MODE_WACOM 2 ++ ++typedef struct USBWacomState { ++ USBDevice dev; ++ int dx, dy, dz, buttons_state; ++ int x, y; ++ int mouse_grabbed; ++ int mode; ++} USBWacomState; ++ ++static const uint8_t qemu_wacom_dev_descriptor[] = { ++ 0x12, /* u8 bLength; */ ++ 0x01, /* u8 bDescriptorType; Device */ ++ 0x10, 0x10, /* u16 bcdUSB; v1.10 */ ++ ++ 0x00, /* u8 bDeviceClass; */ ++ 0x00, /* u8 bDeviceSubClass; */ ++ 0x00, /* u8 bDeviceProtocol; [ low/full speeds only ] */ ++ 0x08, /* u8 bMaxPacketSize0; 8 Bytes */ ++ ++ 0x6a, 0x05, /* u16 idVendor; */ ++ 0x00, 0x00, /* u16 idProduct; */ ++ 0x10, 0x42, /* u16 bcdDevice */ ++ ++ 0x01, /* u8 iManufacturer; */ ++ 0x02, /* u8 iProduct; */ ++ 0x00, /* u8 iSerialNumber; */ ++ 0x01, /* u8 bNumConfigurations; */ ++}; ++ ++static const uint8_t qemu_wacom_config_descriptor[] = { ++ /* one configuration */ ++ 0x09, /* u8 bLength; */ ++ 0x02, /* u8 bDescriptorType; Configuration */ ++ 0x22, 0x00, /* u16 wTotalLength; */ ++ 0x01, /* u8 bNumInterfaces; (1) */ ++ 0x01, /* u8 bConfigurationValue; */ ++ 0x00, /* u8 iConfiguration; */ ++ 0x80, /* u8 bmAttributes; ++ Bit 7: must be set, ++ 6: Self-powered, ++ 5: Remote wakeup, ++ 4..0: resvd */ ++ 40, /* u8 MaxPower; */ ++ ++ /* one interface */ ++ 0x09, /* u8 if_bLength; */ ++ 0x04, /* u8 if_bDescriptorType; Interface */ ++ 0x00, /* u8 if_bInterfaceNumber; */ ++ 0x00, /* u8 if_bAlternateSetting; */ ++ 0x01, /* u8 if_bNumEndpoints; */ ++ 0x03, /* u8 if_bInterfaceClass; HID */ ++ 0x01, /* u8 if_bInterfaceSubClass; Boot */ ++ 0x02, /* u8 if_bInterfaceProtocol; [usb1.1 or single tt] */ ++ 0x00, /* u8 if_iInterface; */ ++ ++ /* HID descriptor */ ++ 0x09, /* u8 bLength; */ ++ 0x21, /* u8 bDescriptorType; */ ++ 0x01, 0x10, /* u16 HID_class */ ++ 0x00, /* u8 country_code */ ++ 0x01, /* u8 num_descriptors */ ++ 0x22, /* u8 type; Report */ ++ 0x6e, 0x00, /* u16 len */ ++ ++ /* one endpoint (status change endpoint) */ ++ 0x07, /* u8 ep_bLength; */ ++ 0x05, /* u8 ep_bDescriptorType; Endpoint */ ++ 0x81, /* u8 ep_bEndpointAddress; IN Endpoint 1 */ ++ 0x03, /* u8 ep_bmAttributes; Interrupt */ ++ 0x08, 0x00, /* u16 ep_wMaxPacketSize; */ ++ 0x0a, /* u8 ep_bInterval; */ ++}; ++ ++static void usb_mouse_event(void *opaque, ++ int dx1, int dy1, int dz1, int buttons_state) ++{ ++ USBWacomState *s = opaque; ++ ++ s->dx += dx1; ++ s->dy += dy1; ++ s->dz += dz1; ++ s->buttons_state = buttons_state; ++} ++ ++static void usb_wacom_event(void *opaque, ++ int x, int y, int dz, int buttons_state) ++{ ++ USBWacomState *s = opaque; ++ ++ s->x = x; ++ s->y = y; ++ s->dz += dz; ++ s->buttons_state = buttons_state; ++} ++ ++static inline int int_clamp(int val, int vmin, int vmax) ++{ ++ if (val < vmin) ++ return vmin; ++ else if (val > vmax) ++ return vmax; ++ else ++ return val; ++} ++ ++static int usb_mouse_poll(USBWacomState *s, uint8_t *buf, int len) ++{ ++ int dx, dy, dz, b, l; ++ ++ if (!s->mouse_grabbed) { ++ qemu_add_mouse_event_handler(usb_mouse_event, s, 1); ++ s->mouse_grabbed = 1; ++ } ++ ++ dx = int_clamp(s->dx, -128, 127); ++ dy = int_clamp(s->dy, -128, 127); ++ dz = int_clamp(s->dz, -128, 127); ++ ++ s->dx -= dx; ++ s->dy -= dy; ++ s->dz -= dz; ++ ++ b = 0; ++ if (s->buttons_state & MOUSE_EVENT_LBUTTON) ++ b |= 0x01; ++ if (s->buttons_state & MOUSE_EVENT_RBUTTON) ++ b |= 0x02; ++ if (s->buttons_state & MOUSE_EVENT_MBUTTON) ++ b |= 0x04; ++ ++ buf[0] = b; ++ buf[1] = dx; ++ buf[2] = dy; ++ l = 3; ++ if (len >= 4) { ++ buf[3] = dz; ++ l = 4; ++ } ++ return l; ++} ++ ++static int usb_wacom_poll(USBWacomState *s, uint8_t *buf, int len) ++{ ++ int b; ++ ++ if (!s->mouse_grabbed) { ++ qemu_add_mouse_event_handler(usb_wacom_event, s, 1); ++ s->mouse_grabbed = 1; ++ } ++ ++ b = 0; ++ if (s->buttons_state & MOUSE_EVENT_LBUTTON) ++ b |= 0x01; ++ if (s->buttons_state & MOUSE_EVENT_RBUTTON) ++ b |= 0x02; ++ if (s->buttons_state & MOUSE_EVENT_MBUTTON) ++ b |= 0x04; ++ ++ if (len < 7) ++ return 0; ++ ++ buf[0] = s->mode; ++ buf[1] = s->x & 0xff; ++ buf[2] = s->x >> 8; ++ buf[3] = s->y & 0xff; ++ buf[4] = s->y >> 8; ++ if (b) { ++ buf[5] = 0x40; ++ buf[6] = 0; ++ } else { ++ buf[5] = 0x00; ++ buf[6] = (unsigned char) -120; ++ } ++ ++ return 7; ++} ++ ++static void usb_wacom_handle_reset(USBDevice *dev) ++{ ++ USBWacomState *s = (USBWacomState *) dev; ++ ++ s->dx = 0; ++ s->dy = 0; ++ s->dz = 0; ++ s->x = 0; ++ s->y = 0; ++ s->buttons_state = 0; ++ s->mode = WACOM_MODE_HID; ++} ++ ++static int usb_wacom_handle_control(USBDevice *dev, int request, int value, ++ int index, int length, uint8_t *data) ++{ ++ USBWacomState *s = (USBWacomState *) dev; ++ int ret = 0; ++ ++ switch (request) { ++ case DeviceRequest | USB_REQ_GET_STATUS: ++ data[0] = (1 << USB_DEVICE_SELF_POWERED) | ++ (dev->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP); ++ data[1] = 0x00; ++ ret = 2; ++ break; ++ case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: ++ if (value == USB_DEVICE_REMOTE_WAKEUP) { ++ dev->remote_wakeup = 0; ++ } else { ++ goto fail; ++ } ++ ret = 0; ++ break; ++ case DeviceOutRequest | USB_REQ_SET_FEATURE: ++ if (value == USB_DEVICE_REMOTE_WAKEUP) { ++ dev->remote_wakeup = 1; ++ } else { ++ goto fail; ++ } ++ ret = 0; ++ break; ++ case DeviceOutRequest | USB_REQ_SET_ADDRESS: ++ dev->addr = value; ++ ret = 0; ++ break; ++ case DeviceRequest | USB_REQ_GET_DESCRIPTOR: ++ switch (value >> 8) { ++ case USB_DT_DEVICE: ++ memcpy(data, qemu_wacom_dev_descriptor, ++ sizeof(qemu_wacom_dev_descriptor)); ++ ret = sizeof(qemu_wacom_dev_descriptor); ++ break; ++ case USB_DT_CONFIG: ++ memcpy(data, qemu_wacom_config_descriptor, ++ sizeof(qemu_wacom_config_descriptor)); ++ ret = sizeof(qemu_wacom_config_descriptor); ++ break; ++ case USB_DT_STRING: ++ switch (value & 0xff) { ++ case 0: ++ /* language ids */ ++ data[0] = 4; ++ data[1] = 3; ++ data[2] = 0x09; ++ data[3] = 0x04; ++ ret = 4; ++ break; ++ case 1: ++ /* serial number */ ++ ret = set_usb_string(data, "1"); ++ break; ++ case 2: ++ ret = set_usb_string(data, "Wacom PenPartner"); ++ break; ++ case 3: ++ /* vendor description */ ++ ret = set_usb_string(data, "QEMU " QEMU_VERSION); ++ break; ++ case 4: ++ ret = set_usb_string(data, "Wacom Tablet"); ++ break; ++ case 5: ++ ret = set_usb_string(data, "Endpoint1 Interrupt Pipe"); ++ break; ++ default: ++ goto fail; ++ } ++ break; ++ default: ++ goto fail; ++ } ++ break; ++ case DeviceRequest | USB_REQ_GET_CONFIGURATION: ++ data[0] = 1; ++ ret = 1; ++ break; ++ case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: ++ ret = 0; ++ break; ++ case DeviceRequest | USB_REQ_GET_INTERFACE: ++ data[0] = 0; ++ ret = 1; ++ break; ++ case DeviceOutRequest | USB_REQ_SET_INTERFACE: ++ ret = 0; ++ break; ++ case WACOM_SET_REPORT: ++ qemu_add_mouse_event_handler(NULL, NULL, 0); ++ s->mouse_grabbed = 0; ++ s->mode = data[0]; ++ ret = 0; ++ break; ++ case WACOM_GET_REPORT: ++ data[0] = 0; ++ data[1] = s->mode; ++ ret = 2; ++ break; ++ /* USB HID requests */ ++ case HID_GET_REPORT: ++ if (s->mode == WACOM_MODE_HID) ++ ret = usb_mouse_poll(s, data, length); ++ else if (s->mode == WACOM_MODE_WACOM) ++ ret = usb_wacom_poll(s, data, length); ++ break; ++ case HID_SET_IDLE: ++ ret = 0; ++ break; ++ default: ++ fail: ++ ret = USB_RET_STALL; ++ break; ++ } ++ return ret; ++} ++ ++static int usb_wacom_handle_data(USBDevice *dev, int pid, ++ uint8_t devep, uint8_t *data, int len) ++{ ++ USBWacomState *s = (USBWacomState *) dev; ++ int ret = 0; ++ ++ switch (pid) { ++ case USB_TOKEN_IN: ++ if (devep == 1) { ++ if (s->mode == WACOM_MODE_HID) ++ ret = usb_mouse_poll(s, data, len); ++ else if (s->mode == WACOM_MODE_WACOM) ++ ret = usb_wacom_poll(s, data, len); ++ break; ++ } ++ /* Fall through. */ ++ case USB_TOKEN_OUT: ++ default: ++ ret = USB_RET_STALL; ++ break; ++ } ++ return ret; ++} ++ ++static void usb_wacom_handle_destroy(USBDevice *dev) ++{ ++ USBWacomState *s = (USBWacomState *) dev; ++ ++ qemu_add_mouse_event_handler(NULL, NULL, 0); ++ qemu_free(s); ++} ++ ++USBDevice *usb_wacom_init(void) ++{ ++ USBWacomState *s; ++ ++ s = qemu_mallocz(sizeof(USBWacomState)); ++ if (!s) ++ return NULL; ++ s->dev.speed = USB_SPEED_FULL; ++ s->dev.handle_packet = usb_generic_handle_packet; ++ ++ s->dev.handle_reset = usb_wacom_handle_reset; ++ s->dev.handle_control = usb_wacom_handle_control; ++ s->dev.handle_data = usb_wacom_handle_data; ++ s->dev.handle_destroy = usb_wacom_handle_destroy; ++ ++ pstrcpy(s->dev.devname, sizeof(s->dev.devname), ++ "QEMU PenPartner Tablet"); ++ ++ return (USBDevice *) s; ++} +diff -pNaur qemu-cvs-ts-orig/hw/usb.h qemu-cvs-ts/hw/usb.h +--- qemu-cvs-ts-orig/hw/usb.h 2006-08-12 03:04:27.000000000 +0200 ++++ qemu-cvs-ts/hw/usb.h 2006-09-21 01:40:40.000000000 +0200 +@@ -218,3 +218,6 @@ USBDevice *usb_tablet_init(void); + + /* usb-msd.c */ + USBDevice *usb_msd_init(const char *filename); ++ ++/* usb-wacom.c */ ++USBDevice *usb_wacom_init(void); +diff -pNaur qemu-cvs-ts-orig/vl.c qemu-cvs-ts/vl.c +--- qemu-cvs-ts-orig/vl.c 2006-09-10 16:39:54.000000000 +0200 ++++ qemu-cvs-ts/vl.c 2006-09-21 01:45:16.000000000 +0200 +@@ -3765,6 +3765,8 @@ static int usb_device_add(const char *de + dev = usb_tablet_init(); + } else if (strstart(devname, "disk:", &p)) { + dev = usb_msd_init(p); ++ } else if (!strcmp(devname, "wacom-tablet")) { ++ dev = usb_wacom_init(); + } else { + return -1; + } +diff -pNaur qemu-cvs-ts-orig/Makefile.target qemu-cvs-ts/Makefile.target +--- qemu-cvs-ts-orig/Makefile.target 2006-09-18 03:15:29.000000000 +0200 ++++ qemu-cvs-ts/Makefile.target 2006-09-21 02:32:19.000000000 +0200 +@@ -330,6 +330,7 @@ VL_OBJS+= scsi-disk.o cdrom.o lsi53c895a + + # USB layer + VL_OBJS+= usb.o usb-hub.o usb-linux.o usb-hid.o usb-ohci.o usb-msd.o ++VL_OBJS+= usb-wacom.o + + # PCI network cards + VL_OBJS+= ne2000.o rtl8139.o pcnet.o diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch new file mode 100644 index 0000000000..ee24c15780 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch @@ -0,0 +1,23 @@ +--- qemu-cvs-ts-orig/hw/usb-wacom.c 2006-09-29 22:53:06.000000000 +0000 ++++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-29 22:44:14.000000000 +0000 +@@ -203,19 +203,18 @@ static int usb_wacom_poll(USBWacomState + return 0; + + buf[0] = s->mode; ++ buf[5] = 0x00; + if (b) { + buf[1] = s->x & 0xff; + buf[2] = s->x >> 8; + buf[3] = s->y & 0xff; + buf[4] = s->y >> 8; +- buf[5] = 0x40; + buf[6] = 0; + } else { + buf[1] = 0; + buf[2] = 0; + buf[3] = 0; + buf[4] = 0; +- buf[5] = 0x00; + buf[6] = (unsigned char) -127; + } + diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch new file mode 100644 index 0000000000..668d50d5f2 --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch @@ -0,0 +1,28 @@ +--- qemu-cvs-ts-orig/hw/usb-wacom.c 2006-09-29 17:27:43.000000000 +0000 ++++ qemu-cvs-ts/hw/usb-wacom.c 2006-09-29 17:48:13.000000000 +0000 +@@ -203,16 +203,20 @@ static int usb_wacom_poll(USBWacomState + return 0; + + buf[0] = s->mode; +- buf[1] = s->x & 0xff; +- buf[2] = s->x >> 8; +- buf[3] = s->y & 0xff; +- buf[4] = s->y >> 8; + if (b) { ++ buf[1] = s->x & 0xff; ++ buf[2] = s->x >> 8; ++ buf[3] = s->y & 0xff; ++ buf[4] = s->y >> 8; + buf[5] = 0x40; + buf[6] = 0; + } else { ++ buf[1] = 0; ++ buf[2] = 0; ++ buf[3] = 0; ++ buf[4] = 0; + buf[5] = 0x00; +- buf[6] = (unsigned char) -120; ++ buf[6] = (unsigned char) -127; + } + + return 7; diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch b/packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch new file mode 100644 index 0000000000..cc122ebdba --- /dev/null +++ b/packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch @@ -0,0 +1,25 @@ +--- + linux-user/syscall.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +Index: qemu/linux-user/syscall.c +=================================================================== +--- qemu.orig/linux-user/syscall.c 2007-08-09 20:28:06.000000000 +0100 ++++ qemu/linux-user/syscall.c 2007-08-09 20:28:41.000000000 +0100 +@@ -61,7 +61,15 @@ + #define tchars host_tchars /* same as target */ + #define ltchars host_ltchars /* same as target */ + +-#include ++#define FUTEX_WAIT 0 ++#define FUTEX_WAKE 1 ++#define FUTEX_FD 2 ++#define FUTEX_REQUEUE 3 ++#define FUTEX_CMP_REQUEUE 4 ++#define FUTEX_WAKE_OP 5 ++#define FUTEX_LOCK_PI 6 ++#define FUTEX_UNLOCK_PI 7 ++ + #include + #include + #include diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty b/packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch deleted file mode 100644 index fe1f0945b6..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch +++ /dev/null @@ -1,853 +0,0 @@ -diff -Naru qemu-snapshot-2007-06-24_05.orig/configure qemu-snapshot-2007-06-24_05/configure ---- qemu-snapshot-2007-06-24_05.orig/configure 2007-06-24 16:31:54.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/configure 2007-06-24 16:33:58.000000000 +0200 -@@ -101,6 +101,7 @@ - darwin_user="no" - build_docs="no" - uname_release="" -+nptl="yes" - - # OS specific - targetos=`uname -s` -@@ -287,6 +288,8 @@ - *) echo "undefined SPARC architecture. Exiting";exit 1;; - esac - ;; -+ --disable-nptl) nptl="no" -+ ;; - esac - done - -@@ -530,6 +533,23 @@ - } - EOF - -+# check NPTL support -+cat > $TMPC < -+void foo() -+{ -+#ifndef CLONE_SETTLS -+#error bork -+#endif -+} -+EOF -+ -+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then -+ : -+else -+ nptl="no" -+fi -+ - ########################################## - # SDL probe - -@@ -681,6 +701,7 @@ - echo "Target Sparc Arch $sparc_cpu" - fi - echo "kqemu support $kqemu" -+echo "NPTL support $nptl" - echo "Documentation $build_docs" - [ ! -z "$uname_release" ] && \ - echo "uname -r $uname_release" -@@ -1063,6 +1084,14 @@ - echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak - fi - fi -+else -+ if test "$nptl" = "yes" ; then -+ case "$target_cpu" in -+ arm | armeb) -+ echo "#define USE_NPTL 1" >> $config_h -+ ;; -+ esac -+ fi - fi - - if test "$cocoa" = "yes" ; then -diff -Naru qemu-snapshot-2007-06-24_05.orig/exec-all.h qemu-snapshot-2007-06-24_05/exec-all.h ---- qemu-snapshot-2007-06-24_05.orig/exec-all.h 2007-05-23 21:58:10.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/exec-all.h 2007-06-24 16:33:58.000000000 +0200 -@@ -360,170 +360,7 @@ - extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; - extern void *io_mem_opaque[IO_MEM_NB_ENTRIES]; - --#if defined(__powerpc__) --static inline int testandset (int *p) --{ -- int ret; -- __asm__ __volatile__ ( -- "0: lwarx %0,0,%1\n" -- " xor. %0,%3,%0\n" -- " bne 1f\n" -- " stwcx. %2,0,%1\n" -- " bne- 0b\n" -- "1: " -- : "=&r" (ret) -- : "r" (p), "r" (1), "r" (0) -- : "cr0", "memory"); -- return ret; --} --#elif defined(__i386__) --static inline int testandset (int *p) --{ -- long int readval = 0; -- -- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -- : "+m" (*p), "+a" (readval) -- : "r" (1) -- : "cc"); -- return readval; --} --#elif defined(__x86_64__) --static inline int testandset (int *p) --{ -- long int readval = 0; -- -- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -- : "+m" (*p), "+a" (readval) -- : "r" (1) -- : "cc"); -- return readval; --} --#elif defined(__s390__) --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" -- " jl 0b" -- : "=&d" (ret) -- : "r" (1), "a" (p), "0" (*p) -- : "cc", "memory" ); -- return ret; --} --#elif defined(__alpha__) --static inline int testandset (int *p) --{ -- int ret; -- unsigned long one; -- -- __asm__ __volatile__ ("0: mov 1,%2\n" -- " ldl_l %0,%1\n" -- " stl_c %2,%1\n" -- " beq %2,1f\n" -- ".subsection 2\n" -- "1: br 0b\n" -- ".previous" -- : "=r" (ret), "=m" (*p), "=r" (one) -- : "m" (*p)); -- return ret; --} --#elif defined(__sparc__) --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__("ldstub [%1], %0" -- : "=r" (ret) -- : "r" (p) -- : "memory"); -- -- return (ret ? 1 : 0); --} --#elif defined(__arm__) --static inline int testandset (int *spinlock) --{ -- register unsigned int ret; -- __asm__ __volatile__("swp %0, %1, [%2]" -- : "=r"(ret) -- : "0"(1), "r"(spinlock)); -- -- return ret; --} --#elif defined(__mc68000) --static inline int testandset (int *p) --{ -- char ret; -- __asm__ __volatile__("tas %1; sne %0" -- : "=r" (ret) -- : "m" (p) -- : "cc","memory"); -- return ret; --} --#elif defined(__ia64) -- --#include -- --static inline int testandset (int *p) --{ -- return __sync_lock_test_and_set (p, 1); --} --#elif defined(__mips__) --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__ ( -- " .set push \n" -- " .set noat \n" -- " .set mips2 \n" -- "1: li $1, 1 \n" -- " ll %0, %1 \n" -- " sc $1, %1 \n" -- " beqz $1, 1b \n" -- " .set pop " -- : "=r" (ret), "+R" (*p) -- : -- : "memory"); -- -- return ret; --} --#else --#error unimplemented CPU support --#endif -- --typedef int spinlock_t; -- --#define SPIN_LOCK_UNLOCKED 0 -- --#if defined(CONFIG_USER_ONLY) --static inline void spin_lock(spinlock_t *lock) --{ -- while (testandset(lock)); --} -- --static inline void spin_unlock(spinlock_t *lock) --{ -- *lock = 0; --} -- --static inline int spin_trylock(spinlock_t *lock) --{ -- return !testandset(lock); --} --#else --static inline void spin_lock(spinlock_t *lock) --{ --} -- --static inline void spin_unlock(spinlock_t *lock) --{ --} -- --static inline int spin_trylock(spinlock_t *lock) --{ -- return 1; --} --#endif -+#include "qemu_spinlock.h" - - extern spinlock_t tb_lock; - -diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/arm/syscall.h qemu-snapshot-2007-06-24_05/linux-user/arm/syscall.h ---- qemu-snapshot-2007-06-24_05.orig/linux-user/arm/syscall.h 2005-04-27 22:11:21.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/linux-user/arm/syscall.h 2007-06-24 16:33:58.000000000 +0200 -@@ -28,7 +28,9 @@ - #define ARM_SYSCALL_BASE 0x900000 - #define ARM_THUMB_SYSCALL 0 - --#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2) -+#define ARM_NR_BASE 0xf0000 -+#define ARM_NR_cacheflush (ARM_NR_BASE + 2) -+#define ARM_NR_set_tls (ARM_NR_BASE + 5) - - #define ARM_NR_semihosting 0x123456 - #define ARM_NR_thumb_semihosting 0xAB -diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/main.c qemu-snapshot-2007-06-24_05/linux-user/main.c ---- qemu-snapshot-2007-06-24_05.orig/linux-user/main.c 2007-06-22 00:55:02.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/linux-user/main.c 2007-06-24 16:33:58.000000000 +0200 -@@ -325,6 +325,50 @@ - } - } - -+/* Handle a jump to the kernel code page. */ -+static int -+do_kernel_trap(CPUARMState *env) -+{ -+ uint32_t addr; -+ uint32_t *ptr; -+ uint32_t cpsr; -+ -+ switch (env->regs[15]) { -+ case 0xffff0fc0: /* __kernel_cmpxchg */ -+ /* XXX: This only works between threads, not between processes. -+ Use native atomic operations. */ -+ /* ??? This probably breaks horribly if the access segfaults. */ -+ cpu_lock(); -+ ptr = (uint32_t *)env->regs[2]; -+ cpsr = cpsr_read(env); -+ if (*ptr == env->regs[0]) { -+ *ptr = env->regs[1]; -+ env->regs[0] = 0; -+ cpsr |= CPSR_C; -+ } else { -+ env->regs[0] = -1; -+ cpsr &= ~CPSR_C; -+ } -+ cpsr_write(env, cpsr, CPSR_C); -+ cpu_unlock(); -+ break; -+ case 0xffff0fe0: /* __kernel_get_tls */ -+ env->regs[0] = env->cp15.c13_tls; -+ break; -+ default: -+ return 1; -+ } -+ /* Jump back to the caller. */ -+ addr = env->regs[14]; -+ if (addr & 1) { -+ env->thumb = 1; -+ addr &= ~1; -+ } -+ env->regs[15] = addr; -+ -+ return 0; -+} -+ - void cpu_loop(CPUARMState *env) - { - int trapnr; -@@ -381,10 +425,8 @@ - } - } - -- if (n == ARM_NR_cacheflush) { -- arm_cache_flush(env->regs[0], env->regs[1]); -- } else if (n == ARM_NR_semihosting -- || n == ARM_NR_thumb_semihosting) { -+ if (n == ARM_NR_semihosting -+ || n == ARM_NR_thumb_semihosting) { - env->regs[0] = do_arm_semihosting (env); - } else if (n == 0 || n >= ARM_SYSCALL_BASE - || (env->thumb && n == ARM_THUMB_SYSCALL)) { -@@ -395,14 +437,34 @@ - n -= ARM_SYSCALL_BASE; - env->eabi = 0; - } -- env->regs[0] = do_syscall(env, -- n, -- env->regs[0], -- env->regs[1], -- env->regs[2], -- env->regs[3], -- env->regs[4], -- env->regs[5]); -+ if ( n > ARM_NR_BASE) { -+ switch (n) -+ { -+ case ARM_NR_cacheflush: -+ arm_cache_flush(env->regs[0], env->regs[1]); -+ break; -+#ifdef USE_NPTL -+ case ARM_NR_set_tls: -+ cpu_set_tls(env, env->regs[0]); -+ env->regs[0] = 0; -+ break; -+#endif -+ default: -+ printf ("Error: Bad syscall: %x\n", n); -+ goto error; -+ } -+ } -+ else -+ { -+ env->regs[0] = do_syscall(env, -+ n, -+ env->regs[0], -+ env->regs[1], -+ env->regs[2], -+ env->regs[3], -+ env->regs[4], -+ env->regs[5]); -+ } - } else { - goto error; - } -@@ -441,6 +503,10 @@ - } - } - break; -+ case EXCP_KERNEL_TRAP: -+ if (do_kernel_trap(env)) -+ goto error; -+ break; - default: - error: - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", -@@ -2074,6 +2140,10 @@ - ts->heap_base = info->brk; - /* This will be filled in on the first SYS_HEAPINFO call. */ - ts->heap_limit = 0; -+ /* Register the magic kernel code page. The cpu will generate a -+ special exception when it tries to execute code here. We can't -+ put real code here because it may be in use by the host kernel. */ -+ page_set_flags(0xffff0000, 0xffff0fff, 0); - #endif - - if (gdbstub_port) { -diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/qemu.h qemu-snapshot-2007-06-24_05/linux-user/qemu.h ---- qemu-snapshot-2007-06-24_05.orig/linux-user/qemu.h 2007-05-26 17:09:38.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/linux-user/qemu.h 2007-06-24 16:33:58.000000000 +0200 -@@ -81,6 +81,9 @@ - uint32_t heap_limit; - #endif - int used; /* non zero if used */ -+#ifdef USE_NPTL -+ uint32_t *child_tidptr; -+#endif - struct image_info *info; - uint8_t stack[0]; - } __attribute__((aligned(16))) TaskState; -diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/syscall.c qemu-snapshot-2007-06-24_05/linux-user/syscall.c ---- qemu-snapshot-2007-06-24_05.orig/linux-user/syscall.c 2007-06-21 23:57:11.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/linux-user/syscall.c 2007-06-24 16:33:58.000000000 +0200 -@@ -70,9 +70,18 @@ - #include - - #include "qemu.h" -+#include "qemu_spinlock.h" - - //#define DEBUG - -+#ifdef USE_NPTL -+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \ -+ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID) -+#else -+/* XXX: Hardcode the above values. */ -+#define CLONE_NPTL_FLAGS2 0 -+#endif -+ - #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \ - || defined(TARGET_M68K) || defined(TARGET_SH4) - /* 16 bit uid wrappers emulation */ -@@ -2121,20 +2130,38 @@ - thread/process */ - #define NEW_STACK_SIZE 8192 - -+#ifdef USE_NPTL -+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED; -+#endif -+ - static int clone_func(void *arg) - { - CPUState *env = arg; -+#ifdef HAVE_NPTL -+ /* Wait until the parent has finshed initializing the tls state. */ -+ while (!spin_trylock(&nptl_lock)) -+ usleep(1); -+ spin_unlock(&nptl_lock); -+#endif - cpu_loop(env); - /* never exits */ - return 0; - } - --int do_fork(CPUState *env, unsigned int flags, unsigned long newsp) -+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp, -+ uint32_t *parent_tidptr, void *newtls, -+ uint32_t *child_tidptr) - { - int ret; - TaskState *ts; - uint8_t *new_stack; - CPUState *new_env; -+#ifdef USE_NPTL -+ unsigned int nptl_flags; -+ -+ if (flags & CLONE_PARENT_SETTID) -+ *parent_tidptr = gettid(); -+#endif - - if (flags & CLONE_VM) { - ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); -@@ -2201,16 +2228,60 @@ - #error unsupported target CPU - #endif - new_env->opaque = ts; -+#ifdef USE_NPTL -+ nptl_flags = flags; -+ flags &= ~CLONE_NPTL_FLAGS2; -+ if (nptl_flags & CLONE_CHILD_CLEARTID) { -+ ts->child_tidptr = child_tidptr; -+ } -+ if (nptl_flags & CLONE_SETTLS) -+ cpu_set_tls (new_env, newtls); -+ /* Grab the global cpu lock so that the thread setup appears -+ atomic. */ -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ spin_lock(&nptl_lock); -+#else -+ if (flags & CLONE_NPTL_FLAGS2) -+ return -EINVAL; -+#endif -+ - #ifdef __ia64__ - ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); - #else - ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); - #endif -+#ifdef USE_NPTL -+ if (ret != -1) { -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ *child_tidptr = ret; -+ } -+ /* Allow the child to continue. */ -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ spin_unlock(&nptl_lock); -+#endif - } else { -- /* if no CLONE_VM, we consider it is a fork */ -- if ((flags & ~CSIGNAL) != 0) -- return -EINVAL; -- ret = fork(); -+ /* if no CLONE_VM, we consider it is a fork */ -+ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0) -+ return -EINVAL; -+ ret = fork(); -+#ifdef USE_NPTL -+ /* There is a race condition here. The parent process could -+ theoretically read the TID in the child process before the child -+ tid is set. This would require using either ptrace -+ (not implemented) or having *_tidptr to point at a shared memory -+ mapping. We can't repeat the spinlock hack used above because -+ the child process gets its own copy of the lock. */ -+ if (ret == 0) { -+ /* Child Process. */ -+ if (flags & CLONE_CHILD_SETTID) -+ *child_tidptr = gettid(); -+ ts = (TaskState *)env->opaque; -+ if (flags & CLONE_CHILD_CLEARTID) -+ ts->child_tidptr = child_tidptr; -+ if (flags & CLONE_SETTLS) -+ cpu_set_tls (env, newtls); -+ } -+#endif - } - return ret; - } -@@ -2487,7 +2558,7 @@ - ret = do_brk(arg1); - break; - case TARGET_NR_fork: -- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0)); -+ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL)); - break; - #ifdef TARGET_NR_waitpid - case TARGET_NR_waitpid: -@@ -3651,7 +3722,8 @@ - ret = get_errno(fsync(arg1)); - break; - case TARGET_NR_clone: -- ret = get_errno(do_fork(cpu_env, arg1, arg2)); -+ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3, -+ (void *)arg4, (uint32_t *)arg5)); - break; - #ifdef __NR_exit_group - /* new thread calls */ -@@ -4039,7 +4111,8 @@ - #endif - #ifdef TARGET_NR_vfork - case TARGET_NR_vfork: -- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0)); -+ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0, -+ NULL, NULL, NULL)); - break; - #endif - #ifdef TARGET_NR_ugetrlimit -@@ -4632,4 +4705,3 @@ - #endif - return ret; - } -- -diff -Naru qemu-snapshot-2007-06-24_05.orig/qemu_spinlock.h qemu-snapshot-2007-06-24_05/qemu_spinlock.h ---- qemu-snapshot-2007-06-24_05.orig/qemu_spinlock.h 1970-01-01 01:00:00.000000000 +0100 -+++ qemu-snapshot-2007-06-24_05/qemu_spinlock.h 2007-06-24 16:33:58.000000000 +0200 -@@ -0,0 +1,182 @@ -+/* -+ * internal execution defines for qemu -+ * -+ * Copyright (c) 2003 Fabrice Bellard -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+ -+#ifndef _QEMU_SPINLOCK_H -+#define _QEMU_SPINLOCK_H -+ -+#ifdef __powerpc__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ __asm__ __volatile__ ( -+ "0: lwarx %0,0,%1\n" -+ " xor. %0,%3,%0\n" -+ " bne 1f\n" -+ " stwcx. %2,0,%1\n" -+ " bne- 0b\n" -+ "1: " -+ : "=&r" (ret) -+ : "r" (p), "r" (1), "r" (0) -+ : "cr0", "memory"); -+ return ret; -+} -+#endif -+ -+#ifdef __i386__ -+static inline int testandset (int *p) -+{ -+ long int readval = 0; -+ -+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -+ : "+m" (*p), "+a" (readval) -+ : "r" (1) -+ : "cc"); -+ return readval; -+} -+#endif -+ -+#ifdef __x86_64__ -+static inline int testandset (int *p) -+{ -+ long int readval = 0; -+ -+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -+ : "+m" (*p), "+a" (readval) -+ : "r" (1) -+ : "cc"); -+ return readval; -+} -+#endif -+ -+#ifdef __s390__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ -+ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" -+ " jl 0b" -+ : "=&d" (ret) -+ : "r" (1), "a" (p), "0" (*p) -+ : "cc", "memory" ); -+ return ret; -+} -+#endif -+ -+#ifdef __alpha__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ unsigned long one; -+ -+ __asm__ __volatile__ ("0: mov 1,%2\n" -+ " ldl_l %0,%1\n" -+ " stl_c %2,%1\n" -+ " beq %2,1f\n" -+ ".subsection 2\n" -+ "1: br 0b\n" -+ ".previous" -+ : "=r" (ret), "=m" (*p), "=r" (one) -+ : "m" (*p)); -+ return ret; -+} -+#endif -+ -+#ifdef __sparc__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ -+ __asm__ __volatile__("ldstub [%1], %0" -+ : "=r" (ret) -+ : "r" (p) -+ : "memory"); -+ -+ return (ret ? 1 : 0); -+} -+#endif -+ -+#ifdef __arm__ -+static inline int testandset (int *spinlock) -+{ -+ register unsigned int ret; -+ __asm__ __volatile__("swp %0, %1, [%2]" -+ : "=r"(ret) -+ : "0"(1), "r"(spinlock)); -+ -+ return ret; -+} -+#endif -+ -+#ifdef __mc68000 -+static inline int testandset (int *p) -+{ -+ char ret; -+ __asm__ __volatile__("tas %1; sne %0" -+ : "=r" (ret) -+ : "m" (p) -+ : "cc","memory"); -+ return ret; -+} -+#endif -+ -+#ifdef __ia64 -+#include -+ -+static inline int testandset (int *p) -+{ -+ return __sync_lock_test_and_set (p, 1); -+} -+#endif -+ -+typedef int spinlock_t; -+ -+#define SPIN_LOCK_UNLOCKED 0 -+ -+#if defined(CONFIG_USER_ONLY) -+static inline void spin_lock(spinlock_t *lock) -+{ -+ while (testandset(lock)); -+} -+ -+static inline void spin_unlock(spinlock_t *lock) -+{ -+ *lock = 0; -+} -+ -+static inline int spin_trylock(spinlock_t *lock) -+{ -+ return !testandset(lock); -+} -+#else -+static inline void spin_lock(spinlock_t *lock) -+{ -+} -+ -+static inline void spin_unlock(spinlock_t *lock) -+{ -+} -+ -+static inline int spin_trylock(spinlock_t *lock) -+{ -+ return 1; -+} -+#endif -+ -+#endif /* ! _QEMU_SPINLOCK_H */ -diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/cpu.h qemu-snapshot-2007-06-24_05/target-arm/cpu.h ---- qemu-snapshot-2007-06-24_05.orig/target-arm/cpu.h 2007-06-03 23:02:37.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/target-arm/cpu.h 2007-06-24 16:33:58.000000000 +0200 -@@ -37,6 +37,9 @@ - #define EXCP_IRQ 5 - #define EXCP_FIQ 6 - #define EXCP_BKPT 7 -+#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */ -+ -+ - - typedef void ARMWriteCPFunc(void *opaque, int cp_info, - int srcreg, int operand, uint32_t value); -@@ -97,6 +100,7 @@ - uint32_t c9_data; - uint32_t c13_fcse; /* FCSE PID. */ - uint32_t c13_context; /* Context ID. */ -+ uint32_t c13_tls; /* Paul Brook told me to just add this ;) */ - uint32_t c15_cpar; /* XScale Coprocessor Access Register */ - } cp15; - -@@ -169,6 +173,15 @@ - int cpu_arm_signal_handler(int host_signum, void *pinfo, - void *puc); - -+void cpu_lock(void); -+void cpu_unlock(void); -+#if defined(USE_NPTL) -+static inline void cpu_set_tls(CPUARMState *env, void *newtls) -+{ -+ env->cp15.c13_tls = (uint32_t)newtls; -+} -+#endif -+ - #define CPSR_M (0x1f) - #define CPSR_T (1 << 5) - #define CPSR_F (1 << 6) -@@ -180,7 +193,11 @@ - #define CPSR_J (1 << 24) - #define CPSR_IT_0_1 (3 << 25) - #define CPSR_Q (1 << 27) --#define CPSR_NZCV (0xf << 28) -+#define CPSR_V (1 << 28) -+#define CPSR_C (1 << 29) -+#define CPSR_Z (1 << 30) -+#define CPSR_N (1 << 31) -+#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V) - - #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV) - /* Return the current CPSR value. */ -diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/exec.h qemu-snapshot-2007-06-24_05/target-arm/exec.h ---- qemu-snapshot-2007-06-24_05.orig/target-arm/exec.h 2007-06-03 19:44:36.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/target-arm/exec.h 2007-06-24 16:33:58.000000000 +0200 -@@ -68,8 +68,6 @@ - - /* In op_helper.c */ - --void cpu_lock(void); --void cpu_unlock(void); - void helper_set_cp(CPUState *, uint32_t, uint32_t); - uint32_t helper_get_cp(CPUState *, uint32_t); - void helper_set_cp15(CPUState *, uint32_t, uint32_t); -diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/op.c qemu-snapshot-2007-06-24_05/target-arm/op.c ---- qemu-snapshot-2007-06-24_05.orig/target-arm/op.c 2007-05-21 19:48:01.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/target-arm/op.c 2007-06-24 16:33:58.000000000 +0200 -@@ -891,6 +891,12 @@ - cpu_loop_exit(); - } - -+void OPPROTO op_kernel_trap(void) -+{ -+ env->exception_index = EXCP_KERNEL_TRAP; -+ cpu_loop_exit(); -+} -+ - /* VFP support. We follow the convention used for VFP instrunctions: - Single precition routines have a "s" suffix, double precision a - "d" suffix. */ -diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/translate.c qemu-snapshot-2007-06-24_05/target-arm/translate.c ---- qemu-snapshot-2007-06-24_05.orig/target-arm/translate.c 2007-06-11 20:59:35.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/target-arm/translate.c 2007-06-24 16:33:58.000000000 +0200 -@@ -3513,6 +3513,7 @@ - s->is_jmp = DISAS_JUMP; - } - -+ - /* generate intermediate code in gen_opc_buf and gen_opparam_buf for - basic block 'tb'. If search_pc is TRUE, also generate PC - information for each intermediate instruction. */ -@@ -3548,6 +3549,15 @@ - nb_gen_labels = 0; - lj = -1; - do { -+#ifdef CONFIG_USER_ONLY -+ /* Intercept jump to the magic kernel page. */ -+ if (dc->pc > 0xffff0000) { -+ gen_op_kernel_trap(); -+ dc->is_jmp = DISAS_UPDATE; -+ break; -+ } -+#endif -+ - if (env->nb_breakpoints > 0) { - for(j = 0; j < env->nb_breakpoints; j++) { - if (env->breakpoints[j] == dc->pc) { diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch deleted file mode 100644 index d92f6a8264..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naru qemu-snapshot-2007-06-24_05.orig/configure qemu-snapshot-2007-06-24_05/configure ---- qemu-snapshot-2007-06-24_05.orig/configure 2007-06-23 18:03:35.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/configure 2007-06-24 16:30:32.000000000 +0200 -@@ -711,7 +711,7 @@ - echo "CC=$cc" >> $config_mak - echo "HOST_CC=$host_cc" >> $config_mak - echo "AR=$ar" >> $config_mak --echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak -+echo "STRIP=$strip" >> $config_mak - echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak - echo "OS_LDFLAGS=$OS_LDFLAGS" >> $config_mak - echo "ARCH_CFLAGS=$ARCH_CFLAGS" >> $config_mak diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch deleted file mode 100644 index 3ad4115e73..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch +++ /dev/null @@ -1,217 +0,0 @@ -diff -Naru qemu-neo1973.orig/hw/pl110.c qemu-neo1973/hw/pl110.c ---- qemu-neo1973.orig/hw/pl110.c 2007-06-24 13:56:37.000000000 +0200 -+++ qemu-neo1973/hw/pl110.c 2007-06-24 14:12:09.000000000 +0200 -@@ -10,6 +10,7 @@ - #include "vl.h" - - #define PL110_CR_EN 0x001 -+#define PL110_CR_BGR 0x100 - #define PL110_CR_BEBO 0x200 - #define PL110_CR_BEPO 0x400 - #define PL110_CR_PWR 0x800 -@@ -114,6 +115,7 @@ - int first, last = 0; - int dirty, new_dirty; - int i; -+ int bpp_offset; - - if (!pl110_enabled(s)) - return; -@@ -145,12 +147,17 @@ - fprintf(stderr, "pl110: Bad color depth\n"); - exit(1); - } -+ if (s->cr & PL110_CR_BGR) -+ bpp_offset = 0; -+ else -+ bpp_offset = 18; -+ - if (s->cr & PL110_CR_BEBO) -- fn = fntable[s->bpp + 6]; -+ fn = fntable[s->bpp + 6 + bpp_offset]; - else if (s->cr & PL110_CR_BEPO) -- fn = fntable[s->bpp + 12]; -+ fn = fntable[s->bpp + 12 + bpp_offset]; - else -- fn = fntable[s->bpp]; -+ fn = fntable[s->bpp + bpp_offset]; - - src_width = s->cols; - switch (s->bpp) { -diff -Naru qemu-neo1973.orig/hw/pl110_template.h qemu-neo1973/hw/pl110_template.h ---- qemu-neo1973.orig/hw/pl110_template.h 2007-06-24 13:56:37.000000000 +0200 -+++ qemu-neo1973/hw/pl110_template.h 2007-06-24 14:12:09.000000000 +0200 -@@ -24,6 +24,16 @@ - #error unknown bit depth - #endif - -+#undef RGB -+#define BORDER bgr -+#define ORDER 0 -+#include "pl110_template.h" -+#define ORDER 1 -+#include "pl110_template.h" -+#define ORDER 2 -+#include "pl110_template.h" -+#define RGB -+#define BORDER rgb - #define ORDER 0 - #include "pl110_template.h" - #define ORDER 1 -@@ -33,26 +43,47 @@ - - static drawfn glue(pl110_draw_fn_,BITS)[18] = - { -- glue(pl110_draw_line1_lblp,BITS), -- glue(pl110_draw_line2_lblp,BITS), -- glue(pl110_draw_line4_lblp,BITS), -- glue(pl110_draw_line8_lblp,BITS), -- glue(pl110_draw_line16_lblp,BITS), -- glue(pl110_draw_line32_lblp,BITS), -- -- glue(pl110_draw_line1_bbbp,BITS), -- glue(pl110_draw_line2_bbbp,BITS), -- glue(pl110_draw_line4_bbbp,BITS), -- glue(pl110_draw_line8_bbbp,BITS), -- glue(pl110_draw_line16_bbbp,BITS), -- glue(pl110_draw_line32_bbbp,BITS), -- -- glue(pl110_draw_line1_lbbp,BITS), -- glue(pl110_draw_line2_lbbp,BITS), -- glue(pl110_draw_line4_lbbp,BITS), -- glue(pl110_draw_line8_lbbp,BITS), -- glue(pl110_draw_line16_lbbp,BITS), -- glue(pl110_draw_line32_lbbp,BITS) -+ glue(pl110_draw_line1_lblp_bgr,BITS), -+ glue(pl110_draw_line2_lblp_bgr,BITS), -+ glue(pl110_draw_line4_lblp_bgr,BITS), -+ glue(pl110_draw_line8_lblp_bgr,BITS), -+ glue(pl110_draw_line16_lblp_bgr,BITS), -+ glue(pl110_draw_line32_lblp_bgr,BITS), -+ -+ glue(pl110_draw_line1_bbbp_bgr,BITS), -+ glue(pl110_draw_line2_bbbp_bgr,BITS), -+ glue(pl110_draw_line4_bbbp_bgr,BITS), -+ glue(pl110_draw_line8_bbbp_bgr,BITS), -+ glue(pl110_draw_line16_bbbp_bgr,BITS), -+ glue(pl110_draw_line32_bbbp_bgr,BITS), -+ -+ glue(pl110_draw_line1_lbbp_bgr,BITS), -+ glue(pl110_draw_line2_lbbp_bgr,BITS), -+ glue(pl110_draw_line4_lbbp_bgr,BITS), -+ glue(pl110_draw_line8_lbbp_bgr,BITS), -+ glue(pl110_draw_line16_lbbp_bgr,BITS), -+ glue(pl110_draw_line32_lbbp_bgr,BITS), -+ -+ glue(pl110_draw_line1_lblp_rgb,BITS), -+ glue(pl110_draw_line2_lblp_rgb,BITS), -+ glue(pl110_draw_line4_lblp_rgb,BITS), -+ glue(pl110_draw_line8_lblp_rgb,BITS), -+ glue(pl110_draw_line16_lblp_rgb,BITS), -+ glue(pl110_draw_line32_lblp_rgb,BITS), -+ -+ glue(pl110_draw_line1_bbbp_rgb,BITS), -+ glue(pl110_draw_line2_bbbp_rgb,BITS), -+ glue(pl110_draw_line4_bbbp_rgb,BITS), -+ glue(pl110_draw_line8_bbbp_rgb,BITS), -+ glue(pl110_draw_line16_bbbp_rgb,BITS), -+ glue(pl110_draw_line32_bbbp_rgb,BITS), -+ -+ glue(pl110_draw_line1_lbbp_rgb,BITS), -+ glue(pl110_draw_line2_lbbp_rgb,BITS), -+ glue(pl110_draw_line4_lbbp_rgb,BITS), -+ glue(pl110_draw_line8_lbbp_rgb,BITS), -+ glue(pl110_draw_line16_lbbp_rgb,BITS), -+ glue(pl110_draw_line32_lbbp_rgb,BITS), - }; - - #undef BITS -@@ -61,18 +92,18 @@ - #else - - #if ORDER == 0 --#define NAME glue(lblp, BITS) -+#define NAME glue(glue(lblp_, BORDER), BITS) - #ifdef WORDS_BIGENDIAN - #define SWAP_WORDS 1 - #endif - #elif ORDER == 1 --#define NAME glue(bbbp, BITS) -+#define NAME glue(glue(bbbp_, BORDER), BITS) - #ifndef WORDS_BIGENDIAN - #define SWAP_WORDS 1 - #endif - #else - #define SWAP_PIXELS 1 --#define NAME glue(lbbp, BITS) -+#define NAME glue(glue(lbbp_, BORDER), BITS) - #ifdef WORDS_BIGENDIAN - #define SWAP_WORDS 1 - #endif -@@ -195,27 +226,34 @@ - #ifdef SWAP_WORDS - data = bswap32(data); - #endif -+#ifdef RGB -+#define LSB r -+#define MSB b -+#else -+#define LSB b -+#define MSB r -+#endif - #if 0 -- r = data & 0x1f; -+ LSB = data & 0x1f; - data >>= 5; - g = data & 0x3f; - data >>= 6; -- b = data & 0x1f; -+ MSB = data & 0x1f; - data >>= 5; - #else -- r = (data & 0x1f) << 3; -+ LSB = (data & 0x1f) << 3; - data >>= 5; - g = (data & 0x3f) << 2; - data >>= 6; -- b = (data & 0x1f) << 3; -+ MSB = (data & 0x1f) << 3; - data >>= 5; - #endif - COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); -- r = (data & 0x1f) << 3; -+ LSB = (data & 0x1f) << 3; - data >>= 5; - g = (data & 0x3f) << 2; - data >>= 6; -- b = (data & 0x1f) << 3; -+ MSB = (data & 0x1f) << 3; - data >>= 5; - COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); - width -= 2; -@@ -229,14 +267,21 @@ - unsigned int r, g, b; - while (width > 0) { - data = *(uint32_t *)src; -+#ifdef RGB -+#define LSB r -+#define MSB b -+#else -+#define LSB b -+#define MSB r -+#endif - #ifdef SWAP_WORDS -- r = data & 0xff; -+ LSB = data & 0xff; - g = (data >> 8) & 0xff; -- b = (data >> 16) & 0xff; -+ MSB = (data >> 16) & 0xff; - #else -- r = (data >> 24) & 0xff; -+ LSB = (data >> 24) & 0xff; - g = (data >> 16) & 0xff; -- b = (data >> 8) & 0xff; -+ MSB = (data >> 8) & 0xff; - #endif - COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b)); - width--; diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch deleted file mode 100644 index 189cd09b67..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch +++ /dev/null @@ -1,881 +0,0 @@ -diff -Naru qemu-neo1973.orig/dyngen.c qemu-neo1973/dyngen.c ---- qemu-neo1973.orig/dyngen.c 2007-06-24 13:56:38.000000000 +0200 -+++ qemu-neo1973/dyngen.c 2007-06-24 14:33:11.000000000 +0200 -@@ -32,6 +32,8 @@ - - #include "config-host.h" - -+//#define DEBUG_OP -+ - /* NOTE: we test CONFIG_WIN32 instead of _WIN32 to enabled cross - compilation */ - #if defined(CONFIG_WIN32) -@@ -1429,6 +1431,644 @@ - #endif - - -+#if defined(HOST_I386) || defined(HOST_X86_64) -+ -+/* This byte is the first byte of an instruction. */ -+#define FLAG_INSN (1 << 0) -+/* This byte has been processed as part of an instruction. */ -+#define FLAG_SCANNED (1 << 1) -+/* This instruction is a return instruction. Gcc cometimes generates prefix -+ bytes, so may be more than one byte long. */ -+#define FLAG_RET (1 << 2) -+/* This is either the target of a jump, or the preceeding instruction uses -+ a pc-relative offset. */ -+#define FLAG_TARGET (1 << 3) -+/* This is a magic instruction that needs fixing up. */ -+#define FLAG_EXIT (1 << 4) -+#define MAX_EXITS 5 -+ -+static void -+bad_opcode(const char *name, uint32_t op) -+{ -+ error("Unsupported opcode %0*x in %s", (op > 0xff) ? 4 : 2, op, name); -+} -+ -+/* Mark len bytes as scanned, Returns insn_size + len. Reports an error -+ if these bytes have already been scanned. */ -+static int -+eat_bytes(const char *name, char *flags, int insn, int insn_size, int len) -+{ -+ while (len > 0) { -+ /* This should never occur in sane code. */ -+ if (flags[insn + insn_size] & FLAG_SCANNED) -+ error ("Overlapping instructions in %s", name); -+ flags[insn + insn_size] |= FLAG_SCANNED; -+ insn_size++; -+ len--; -+ } -+ return insn_size; -+} -+ -+static void -+trace_i386_insn (const char *name, uint8_t *start_p, char *flags, int insn, -+ int len) -+{ -+ uint8_t *ptr; -+ uint8_t op; -+ int modrm; -+ int is_prefix; -+ int op_size; -+ int addr_size; -+ int insn_size; -+ int is_ret; -+ int is_condjmp; -+ int is_jmp; -+ int is_exit; -+ int is_pcrel; -+ int immed; -+ int seen_rexw; -+ int32_t disp; -+ -+ ptr = start_p + insn; -+ /* nonzero if this insn has a ModR/M byte. */ -+ modrm = 1; -+ /* The size of the immediate value in this instruction. */ -+ immed = 0; -+ /* The operand size. */ -+ op_size = 4; -+ /* The address size */ -+ addr_size = 4; -+ /* The total length of this instruction. */ -+ insn_size = 0; -+ is_prefix = 1; -+ is_ret = 0; -+ is_condjmp = 0; -+ is_jmp = 0; -+ is_exit = 0; -+ seen_rexw = 0; -+ is_pcrel = 0; -+ -+ while (is_prefix) { -+ op = ptr[insn_size]; -+ insn_size = eat_bytes(name, flags, insn, insn_size, 1); -+ is_prefix = 0; -+ switch (op >> 4) { -+ case 0: -+ case 1: -+ case 2: -+ case 3: -+ if (op == 0x0f) { -+ /* two-byte opcode. */ -+ op = ptr[insn_size]; -+ insn_size = eat_bytes(name, flags, insn, insn_size, 1); -+ switch (op >> 4) { -+ case 0: -+ if ((op & 0xf) > 3) -+ modrm = 0; -+ break; -+ case 1: /* vector move or prefetch */ -+ case 2: /* various moves and vector compares. */ -+ case 4: /* cmov */ -+ case 5: /* vector instructions */ -+ case 6: -+ case 13: -+ case 14: -+ case 15: -+ break; -+ case 7: /* mmx */ -+ if (op & 0x77) /* emms */ -+ modrm = 0; -+ break; -+ case 3: /* wrmsr, rdtsc, rdmsr, rdpmc, sysenter, sysexit */ -+ modrm = 0; -+ break; -+ case 8: /* long conditional jump */ -+ is_condjmp = 1; -+ immed = op_size; -+ modrm = 0; -+ break; -+ case 9: /* setcc */ -+ break; -+ case 10: -+ switch (op & 0x7) { -+ case 0: /* push fs/gs */ -+ case 1: /* pop fs/gs */ -+ case 2: /* cpuid/rsm */ -+ modrm = 0; -+ break; -+ case 4: /* shld/shrd immediate */ -+ immed = 1; -+ break; -+ default: /* Normal instructions with a ModR/M byte. */ -+ break; -+ } -+ break; -+ case 11: -+ switch (op & 0xf) { -+ case 10: /* bt, bts, btr, btc */ -+ immed = 1; -+ break; -+ default: -+ /* cmpxchg, lss, btr, lfs, lgs, movzx, btc, bsf, bsr -+ undefined, and movsx */ -+ break; -+ } -+ break; -+ case 12: -+ if (op & 8) { -+ /* bswap */ -+ modrm = 0; -+ } else { -+ switch (op & 0x7) { -+ case 2: -+ case 4: -+ case 5: -+ case 6: -+ immed = 1; -+ break; -+ default: -+ break; -+ } -+ } -+ break; -+ } -+ } else if ((op & 0x07) <= 0x3) { -+ /* General arithmentic ax. */ -+ } else if ((op & 0x07) <= 0x5) { -+ /* General arithmetic ax, immediate. */ -+ if (op & 0x01) -+ immed = op_size; -+ else -+ immed = 1; -+ modrm = 0; -+ } else if ((op & 0x23) == 0x22) { -+ /* Segment prefix. */ -+ is_prefix = 1; -+ } else { -+ /* Segment register push/pop or DAA/AAA/DAS/AAS. */ -+ modrm = 0; -+ } -+ break; -+ -+#if defined(HOST_X86_64) -+ case 4: /* rex prefix. */ -+ is_prefix = 1; -+ /* The address/operand size is actually 64-bit, but the immediate -+ values in the instruction are still 32-bit. */ -+ op_size = 4; -+ addr_size = 4; -+ if (op & 8) -+ seen_rexw = 1; -+ break; -+#else -+ case 4: /* inc/dec register. */ -+#endif -+ case 5: /* push/pop general register. */ -+ modrm = 0; -+ break; -+ -+ case 6: -+ switch (op & 0x0f) { -+ case 0: /* pusha */ -+ case 1: /* popa */ -+ modrm = 0; -+ break; -+ case 2: /* bound */ -+ case 3: /* arpl */ -+ break; -+ case 4: /* FS */ -+ case 5: /* GS */ -+ is_prefix = 1; -+ break; -+ case 6: /* opcode size prefix. */ -+ op_size = 2; -+ is_prefix = 1; -+ break; -+ case 7: /* Address size prefix. */ -+ addr_size = 2; -+ is_prefix = 1; -+ break; -+ case 8: /* push immediate */ -+ immed = op_size; -+ modrm = 0; -+ break; -+ case 10: /* push 8-bit immediate */ -+ immed = 1; -+ modrm = 0; -+ break; -+ case 9: /* imul immediate */ -+ immed = op_size; -+ break; -+ case 11: /* imul 8-bit immediate */ -+ immed = 1; -+ break; -+ case 12: /* insb */ -+ case 13: /* insw */ -+ case 14: /* outsb */ -+ case 15: /* outsw */ -+ modrm = 0; -+ break; -+ } -+ break; -+ -+ case 7: /* Short conditional jump. */ -+ is_condjmp = 1; -+ immed = 1; -+ modrm = 0; -+ break; -+ -+ case 8: -+ if ((op & 0xf) <= 3) { -+ /* arithmetic immediate. */ -+ if ((op & 3) == 1) -+ immed = op_size; -+ else -+ immed = 1; -+ } -+ /* else test, xchg, mov, lea or pop general. */ -+ break; -+ -+ case 9: -+ /* Various single-byte opcodes with no modrm byte. */ -+ modrm = 0; -+ if (op == 10) { -+ /* Call */ -+ immed = 4; -+ } -+ break; -+ -+ case 10: -+ switch ((op & 0xe) >> 1) { -+ case 0: /* mov absoliute immediate. */ -+ case 1: -+ if (seen_rexw) -+ immed = 8; -+ else -+ immed = addr_size; -+ break; -+ case 4: /* test immediate. */ -+ if (op & 1) -+ immed = op_size; -+ else -+ immed = 1; -+ break; -+ default: /* Various string ops. */ -+ break; -+ } -+ modrm = 0; -+ break; -+ -+ case 11: /* move immediate to register */ -+ if (op & 8) { -+ if (seen_rexw) -+ immed = 8; -+ else -+ immed = op_size; -+ } else { -+ immed = 1; -+ } -+ modrm = 0; -+ break; -+ -+ case 12: -+ switch (op & 0xf) { -+ case 0: /* shift immediate */ -+ case 1: -+ immed = 1; -+ break; -+ case 2: /* ret immediate */ -+ immed = 2; -+ modrm = 0; -+ bad_opcode(name, op); -+ break; -+ case 3: /* ret */ -+ modrm = 0; -+ is_ret = 1; -+ case 4: /* les */ -+ case 5: /* lds */ -+ break; -+ case 6: /* mov immediate byte */ -+ immed = 1; -+ break; -+ case 7: /* mov immediate */ -+ immed = op_size; -+ break; -+ case 8: /* enter */ -+ /* TODO: Is this right? */ -+ immed = 3; -+ modrm = 0; -+ break; -+ case 10: /* retf immediate */ -+ immed = 2; -+ modrm = 0; -+ bad_opcode(name, op); -+ break; -+ case 13: /* int */ -+ immed = 1; -+ modrm = 0; -+ break; -+ case 11: /* retf */ -+ case 15: /* iret */ -+ modrm = 0; -+ bad_opcode(name, op); -+ break; -+ default: /* leave, int3 or into */ -+ modrm = 0; -+ break; -+ } -+ break; -+ -+ case 13: -+ if ((op & 0xf) >= 8) { -+ /* Coprocessor escape. For our purposes this is just a normal -+ instruction with a ModR/M byte. */ -+ } else if ((op & 0xf) >= 4) { -+ /* AAM, AAD or XLAT */ -+ modrm = 0; -+ } -+ /* else shift instruction */ -+ break; -+ -+ case 14: -+ switch ((op & 0xc) >> 2) { -+ case 0: /* loop or jcxz */ -+ is_condjmp = 1; -+ immed = 1; -+ break; -+ case 1: /* in/out immed */ -+ immed = 1; -+ break; -+ case 2: /* call or jmp */ -+ switch (op & 3) { -+ case 0: /* call */ -+ immed = op_size; -+ break; -+ case 1: /* long jump */ -+ immed = 4; -+ is_jmp = 1; -+ break; -+ case 2: /* far jmp */ -+ bad_opcode(name, op); -+ break; -+ case 3: /* short jmp */ -+ immed = 1; -+ is_jmp = 1; -+ break; -+ } -+ break; -+ case 3: /* in/out register */ -+ break; -+ } -+ modrm = 0; -+ break; -+ -+ case 15: -+ switch ((op & 0xe) >> 1) { -+ case 0: -+ case 1: -+ is_prefix = 1; -+ break; -+ case 2: -+ case 4: -+ case 5: -+ case 6: -+ modrm = 0; -+ /* Some privileged insns are used as markers. */ -+ switch (op) { -+ case 0xf4: /* hlt: Exit translation block. */ -+ is_exit = 1; -+ break; -+ case 0xfa: /* cli: Jump to label. */ -+ is_exit = 1; -+ immed = 4; -+ break; -+ case 0xfb: /* sti: TB patch jump. */ -+ /* Mark the insn for patching, but continue sscanning. */ -+ flags[insn] |= FLAG_EXIT; -+ immed = 4; -+ break; -+ } -+ break; -+ case 3: /* unary grp3 */ -+ if ((ptr[insn_size] & 0x38) == 0) { -+ if (op == 0xf7) -+ immed = op_size; -+ else -+ immed = 1; /* test immediate */ -+ } -+ break; -+ case 7: /* inc/dec grp4/5 */ -+ /* TODO: This includes indirect jumps. We should fail if we -+ encounter one of these. */ -+ break; -+ } -+ break; -+ } -+ } -+ -+ if (modrm) { -+ if (addr_size != 4) -+ error("16-bit addressing mode used in %s", name); -+ -+ disp = 0; -+ modrm = ptr[insn_size]; -+ insn_size = eat_bytes(name, flags, insn, insn_size, 1); -+ modrm &= 0xc7; -+ switch ((modrm & 0xc0) >> 6) { -+ case 0: -+ if (modrm == 5) -+ disp = 4; -+ break; -+ case 1: -+ disp = 1; -+ break; -+ case 2: -+ disp = 4; -+ break; -+ } -+ if ((modrm & 0xc0) != 0xc0 && (modrm & 0x7) == 4) { -+ /* SIB byte */ -+ if (modrm == 4 && (ptr[insn_size] & 0x7) == 5) { -+ disp = 4; -+ is_pcrel = 1; -+ } -+ insn_size = eat_bytes(name, flags, insn, insn_size, 1); -+ } -+ insn_size = eat_bytes(name, flags, insn, insn_size, disp); -+ } -+ insn_size = eat_bytes(name, flags, insn, insn_size, immed); -+ if (is_condjmp || is_jmp) { -+ if (immed == 1) { -+ disp = (int8_t)*(ptr + insn_size - 1); -+ } else { -+ disp = (((int32_t)*(ptr + insn_size - 1)) << 24) -+ | (((int32_t)*(ptr + insn_size - 2)) << 16) -+ | (((int32_t)*(ptr + insn_size - 3)) << 8) -+ | *(ptr + insn_size - 4); -+ } -+ disp += insn_size; -+ /* Jumps to external symbols point to the address of the offset -+ before relocation. */ -+ /* ??? These are probably a tailcall. We could fix them up by -+ replacing them with jmp to EOB + call, but it's easier to just -+ prevent the compiler generating them. */ -+ if (disp == 1) -+ error("Unconditional jump (sibcall?) in %s", name); -+ disp += insn; -+ if (disp < 0 || disp > len) -+ error("Jump outside instruction in %s", name); -+ -+ if ((flags[disp] & (FLAG_INSN | FLAG_SCANNED)) == FLAG_SCANNED) -+ error("Overlapping instructions in %s", name); -+ -+ flags[disp] |= (FLAG_INSN | FLAG_TARGET); -+ is_pcrel = 1; -+ } -+ if (is_pcrel) { -+ /* Mark the following insn as a jump target. This will stop -+ this instruction being moved. */ -+ flags[insn + insn_size] |= FLAG_TARGET; -+ } -+ if (is_ret) -+ flags[insn] |= FLAG_RET; -+ -+ if (is_exit) -+ flags[insn] |= FLAG_EXIT; -+ -+ if (!(is_jmp || is_ret || is_exit)) -+ flags[insn + insn_size] |= FLAG_INSN; -+} -+ -+/* Scan a function body. Returns the position of the return sequence. -+ Sets *patch_bytes to the number of bytes that need to be copied from that -+ location. If no patching is required (ie. the return is the last insn) -+ *patch_bytes will be set to -1. *plen is the number of code bytes to copy. -+ */ -+static int trace_i386_op(const char * name, uint8_t *start_p, int *plen, -+ int *patch_bytes, int *exit_addrs) -+{ -+ char *flags; -+ int more; -+ int insn; -+ int retpos; -+ int bytes; -+ int num_exits; -+ int len; -+ int last_insn; -+ -+ len = *plen; -+ flags = malloc(len + 1); -+ memset(flags, 0, len + 1); -+ flags[0] |= FLAG_INSN; -+ more = 1; -+ while (more) { -+ more = 0; -+ for (insn = 0; insn < len; insn++) { -+ if ((flags[insn] & (FLAG_INSN | FLAG_SCANNED)) == FLAG_INSN) { -+ trace_i386_insn(name, start_p, flags, insn, len); -+ more = 1; -+ } -+ } -+ } -+ -+ /* Strip any unused code at the end of the function. */ -+ while (len > 0 && flags[len - 1] == 0) -+ len--; -+ -+ retpos = -1; -+ num_exits = 0; -+ last_insn = 0; -+ for (insn = 0; insn < len; insn++) { -+ if (flags[insn] & FLAG_RET) { -+ /* ??? In theory it should be possible to handle multiple return -+ points. In practice it's not worth the effort. */ -+ if (retpos != -1) -+ error("Multiple return instructions in %s", name); -+ retpos = insn; -+ } -+ if (flags[insn] & FLAG_EXIT) { -+ if (num_exits == MAX_EXITS) -+ error("Too many block exits in %s", name); -+ exit_addrs[num_exits] = insn; -+ num_exits++; -+ } -+ if (flags[insn] & FLAG_INSN) -+ last_insn = insn; -+ } -+ -+ exit_addrs[num_exits] = -1; -+ if (retpos == -1) { -+ if (num_exits == 0) { -+ error ("No return instruction found in %s", name); -+ } else { -+ retpos = len; -+ last_insn = len; -+ } -+ } -+ -+ /* If the return instruction is the last instruction we can just -+ remove it. */ -+ if (retpos == last_insn) -+ *patch_bytes = -1; -+ else -+ *patch_bytes = 0; -+ -+ /* Back up over any nop instructions. */ -+ while (retpos > 0 -+ && (flags[retpos] & FLAG_TARGET) == 0 -+ && (flags[retpos - 1] & FLAG_INSN) != 0 -+ && start_p[retpos - 1] == 0x90) { -+ retpos--; -+ } -+ -+ if (*patch_bytes == -1) { -+ *plen = retpos; -+ free (flags); -+ return retpos; -+ } -+ *plen = len; -+ -+ /* The ret is in the middle of the function. Find four more bytes that -+ so the ret can be replaced by a jmp. */ -+ /* ??? Use a short jump where possible. */ -+ bytes = 4; -+ insn = retpos + 1; -+ /* We can clobber everything up to the next jump target. */ -+ while (insn < len && bytes > 0 && (flags[insn] & FLAG_TARGET) == 0) { -+ insn++; -+ bytes--; -+ } -+ if (bytes > 0) { -+ /* ???: Strip out nop blocks. */ -+ /* We can't do the replacement without clobbering anything important. -+ Copy preceeding instructions(s) to give us some space. */ -+ while (retpos > 0) { -+ /* If this byte is the target of a jmp we can't move it. */ -+ if (flags[retpos] & FLAG_TARGET) -+ break; -+ -+ (*patch_bytes)++; -+ bytes--; -+ retpos--; -+ -+ /* Break out of the loop if we have enough space and this is either -+ the first byte of an instruction or a pad byte. */ -+ if ((flags[retpos] & (FLAG_INSN | FLAG_SCANNED)) != FLAG_SCANNED -+ && bytes <= 0) { -+ break; -+ } -+ } -+ } -+ -+ if (bytes > 0) -+ error("Unable to replace ret with jmp in %s\n", name); -+ -+ free(flags); -+ return retpos; -+} -+ -+#endif -+ - #define MAX_ARGS 3 - - /* generate op code */ -@@ -1442,6 +2082,11 @@ - uint8_t args_present[MAX_ARGS]; - const char *sym_name, *p; - EXE_RELOC *rel; -+#if defined(HOST_I386) || defined(HOST_X86_64) -+ int patch_bytes; -+ int retpos; -+ int exit_addrs[MAX_EXITS]; -+#endif - - /* Compute exact size excluding prologue and epilogue instructions. - * Increment start_offset to skip epilogue instructions, then compute -@@ -1452,33 +2097,12 @@ - p_end = p_start + size; - start_offset = offset; - #if defined(HOST_I386) || defined(HOST_X86_64) --#ifdef CONFIG_FORMAT_COFF -- { -- uint8_t *p; -- p = p_end - 1; -- if (p == p_start) -- error("empty code for %s", name); -- while (*p != 0xc3) { -- p--; -- if (p <= p_start) -- error("ret or jmp expected at the end of %s", name); -- } -- copy_size = p - p_start; -- } --#else - { - int len; - len = p_end - p_start; -- if (len == 0) -- error("empty code for %s", name); -- if (p_end[-1] == 0xc3) { -- len--; -- } else { -- error("ret or jmp expected at the end of %s", name); -- } -+ retpos = trace_i386_op(name, p_start, &len, &patch_bytes, exit_addrs); - copy_size = len; - } --#endif - #elif defined(HOST_PPC) - { - uint8_t *p; -@@ -1710,6 +2334,13 @@ - } - - if (gen_switch == 2) { -+#if defined(HOST_I386) || defined(HOST_X86_64) -+ if (patch_bytes != -1) -+ copy_size += patch_bytes; -+#ifdef DEBUG_OP -+ copy_size += 2; -+#endif -+#endif - fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, copy_size); - } else if (gen_switch == 1) { - -@@ -1915,7 +2546,43 @@ - #error unsupport object format - #endif - } -+ } -+ /* Replace the marker instructions with the actual opcodes. */ -+ for (i = 0; exit_addrs[i] != -1; i++) { -+ int op; -+ switch (p_start[exit_addrs[i]]) -+ { -+ case 0xf4: op = 0xc3; break; /* hlt -> ret */ -+ case 0xfa: op = 0xe9; break; /* cli -> jmp */ -+ case 0xfb: op = 0xe9; break; /* sti -> jmp */ -+ default: error("Internal error"); -+ } -+ fprintf(outfile, -+ " *(uint8_t *)(gen_code_ptr + %d) = 0x%x;\n", -+ exit_addrs[i], op); - } -+ /* Fix up the return instruction. */ -+ if (patch_bytes != -1) { -+ if (patch_bytes) { -+ fprintf(outfile, " memcpy(gen_code_ptr + %d," -+ "gen_code_ptr + %d, %d);\n", -+ copy_size, retpos, patch_bytes); -+ } -+ fprintf(outfile, -+ " *(uint8_t *)(gen_code_ptr + %d) = 0xe9;\n", -+ retpos); -+ fprintf(outfile, -+ " *(uint32_t *)(gen_code_ptr + %d) = 0x%x;\n", -+ retpos + 1, copy_size - (retpos + 5)); -+ -+ copy_size += patch_bytes; -+ } -+#ifdef DEBUG_OP -+ fprintf(outfile, -+ " *(uint16_t *)(gen_code_ptr + %d) = 0x9090;\n", -+ copy_size); -+ copy_size += 2; -+#endif - } - #elif defined(HOST_X86_64) - { -@@ -1949,6 +2616,42 @@ - } - } - } -+ /* Replace the marker instructions with the actual opcodes. */ -+ for (i = 0; exit_addrs[i] != -1; i++) { -+ int op; -+ switch (p_start[exit_addrs[i]]) -+ { -+ case 0xf4: op = 0xc3; break; /* hlt -> ret */ -+ case 0xfa: op = 0xe9; break; /* cli -> jmp */ -+ case 0xfb: op = 0xe9; break; /* sti -> jmp */ -+ default: error("Internal error"); -+ } -+ fprintf(outfile, -+ " *(uint8_t *)(gen_code_ptr + %d) = 0x%x;\n", -+ exit_addrs[i], op); -+ } -+ /* Fix up the return instruction. */ -+ if (patch_bytes != -1) { -+ if (patch_bytes) { -+ fprintf(outfile, " memcpy(gen_code_ptr + %d," -+ "gen_code_ptr + %d, %d);\n", -+ copy_size, retpos, patch_bytes); -+ } -+ fprintf(outfile, -+ " *(uint8_t *)(gen_code_ptr + %d) = 0xe9;\n", -+ retpos); -+ fprintf(outfile, -+ " *(uint32_t *)(gen_code_ptr + %d) = 0x%x;\n", -+ retpos + 1, copy_size - (retpos + 5)); -+ -+ copy_size += patch_bytes; -+ } -+#ifdef DEBUG_OP -+ fprintf(outfile, -+ " *(uint16_t *)(gen_code_ptr + %d) = 0x9090;\n", -+ copy_size); -+ copy_size += 2; -+#endif - } - #elif defined(HOST_PPC) - { -diff -Naru qemu-neo1973.orig/dyngen-exec.h qemu-neo1973/dyngen-exec.h ---- qemu-neo1973.orig/dyngen-exec.h 2007-06-24 13:56:38.000000000 +0200 -+++ qemu-neo1973/dyngen-exec.h 2007-06-24 14:35:52.000000000 +0200 -@@ -194,7 +194,12 @@ - #endif - - /* force GCC to generate only one epilog at the end of the function */ -+#if defined(__i386__) || defined(__x86_64__) -+/* Also add 4 bytes of padding so that we can replace the ret with a jmp. */ -+#define FORCE_RET() asm volatile ("nop;nop;nop;nop"); -+#else - #define FORCE_RET() __asm__ __volatile__("" : : : "memory"); -+#endif - - #ifndef OPPROTO - #define OPPROTO -@@ -244,11 +249,18 @@ - #endif - - #if defined(__i386__) --#define EXIT_TB() asm volatile ("ret") --#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n) -+/* Dyngen will replace hlt instructions with a ret instruction. Inserting a -+ ret directly would confuse dyngen. */ -+#define EXIT_TB() asm volatile ("hlt") -+/* Dyngen will replace cli with 0x9e (jmp). -+ We generate the offset manually. */ -+#define GOTO_LABEL_PARAM(n) \ -+ asm volatile ("cli;.long " ASM_NAME(__op_gen_label) #n " - 1f;1:") - #elif defined(__x86_64__) --#define EXIT_TB() asm volatile ("ret") --#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n) -+/* The same as i386. */ -+#define EXIT_TB() asm volatile ("hlt") -+#define GOTO_LABEL_PARAM(n) \ -+ asm volatile ("cli;.long " ASM_NAME(__op_gen_label) #n " - 1f;1:") - #elif defined(__powerpc__) - #define EXIT_TB() asm volatile ("blr") - #define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n) -diff -Naru qemu-neo1973.orig/exec-all.h qemu-neo1973/exec-all.h ---- qemu-neo1973.orig/exec-all.h 2007-06-24 14:31:58.000000000 +0200 -+++ qemu-neo1973/exec-all.h 2007-06-24 14:33:11.000000000 +0200 -@@ -329,14 +329,15 @@ - - #elif defined(__i386__) && defined(USE_DIRECT_JUMP) - --/* we patch the jump instruction directly */ -+/* we patch the jump instruction directly. Use sti in place of the actual -+ jmp instruction so that dyngen can patch in the correct result. */ - #define GOTO_TB(opname, tbparam, n)\ - do {\ - asm volatile (".section .data\n"\ - ASM_OP_LABEL_NAME(n, opname) ":\n"\ - ".long 1f\n"\ - ASM_PREVIOUS_SECTION \ -- "jmp " ASM_NAME(__op_jmp) #n "\n"\ -+ "sti;.long " ASM_NAME(__op_jmp) #n " - 1f\n"\ - "1:\n");\ - } while (0) - -diff -Naru qemu-neo1973.orig/target-ppc/exec.h qemu-neo1973/target-ppc/exec.h ---- qemu-neo1973.orig/target-ppc/exec.h 2007-06-24 13:56:32.000000000 +0200 -+++ qemu-neo1973/target-ppc/exec.h 2007-06-24 14:33:11.000000000 +0200 -@@ -66,11 +66,7 @@ - #define FT1 (env->ft1) - #define FT2 (env->ft2) - --#if defined (DEBUG_OP) --# define RETURN() __asm__ __volatile__("nop" : : : "memory"); --#else --# define RETURN() __asm__ __volatile__("" : : : "memory"); --#endif -+#define RETURN() FORCE_RET() - - static inline target_ulong rotl8 (target_ulong i, int n) - { diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch deleted file mode 100644 index 8f5e9d8b4b..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -Naru qemu-snapshot-2007-07-01_05.orig/linux-user/mmap.c qemu-snapshot-2007-07-01_05/linux-user/mmap.c ---- qemu-snapshot-2007-07-01_05.orig/linux-user/mmap.c 2007-06-03 17:31:32.000000000 +0200 -+++ qemu-snapshot-2007-07-01_05/linux-user/mmap.c 2007-07-02 14:00:30.000000000 +0200 -@@ -234,7 +234,7 @@ - host_offset = offset & qemu_host_page_mask; - host_len = len + offset - host_offset; - host_start = (long)mmap(real_start ? g2h(real_start) : NULL, -- host_len, prot, flags, fd, host_offset); -+ host_len, prot, (flags | MAP_32BIT), fd, host_offset); - if (host_start == -1) - return host_start; - /* update start so that it points to the file position at 'offset' */ -@@ -388,7 +388,7 @@ - int prot; - - /* XXX: use 5 args syscall */ -- new_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags); -+ new_addr = (long)mremap(g2h(old_addr), old_size, new_size, (flags | MAP_32BIT)); - if (new_addr == -1) - return new_addr; - new_addr = h2g(new_addr); diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch deleted file mode 100644 index 08d5513f36..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naru qemu-snapshot-2007-06-24_05.orig/sdl.c qemu-snapshot-2007-06-24_05/sdl.c ---- qemu-snapshot-2007-06-24_05.orig/sdl.c 2007-06-21 23:08:02.000000000 +0200 -+++ qemu-snapshot-2007-06-24_05/sdl.c 2007-06-24 16:33:20.000000000 +0200 -@@ -245,7 +245,7 @@ - - if (kbd_mouse_is_absolute()) { - SDL_ShowCursor(1); -- SDL_SetCursor(sdl_cursor_hidden); -+ /* SDL_SetCursor(sdl_cursor_hidden); */ - } else { - SDL_ShowCursor(0); - } diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/.mtn2git_empty b/packages/qemu/qemu-0.9.0+cvs20071121/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/02_snapshot_use_tmpdir.patch b/packages/qemu/qemu-0.9.0+cvs20071121/02_snapshot_use_tmpdir.patch deleted file mode 100644 index 40264ed443..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/02_snapshot_use_tmpdir.patch +++ /dev/null @@ -1,23 +0,0 @@ -#DPATCHLEVEL=0 ---- -# block.c | 6 +++++- -# 1 file changed, 5 insertions(+), 1 deletion(-) -# -Index: block.c -=================================================================== ---- block.c.orig 2007-12-03 23:47:25.000000000 +0000 -+++ block.c 2007-12-03 23:47:31.000000000 +0000 -@@ -191,8 +191,12 @@ void get_tmp_filename(char *filename, in - void get_tmp_filename(char *filename, int size) - { - int fd; -+ char *tmpdir; - /* XXX: race condition possible */ -- pstrcpy(filename, size, "/tmp/vl.XXXXXX"); -+ tmpdir = getenv("TMPDIR"); -+ if (!tmpdir) -+ tmpdir = "/tmp"; -+ snprintf(filename, size, "%s/vl.XXXXXX", tmpdir); - fd = mkstemp(filename); - close(fd); - } diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/qemu-0.9.0+cvs20071121/04_do_not_print_rtc_freq_if_ok.patch deleted file mode 100644 index 31c9da491d..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/04_do_not_print_rtc_freq_if_ok.patch +++ /dev/null @@ -1,26 +0,0 @@ -#DPATCHLEVEL=1 ---- -# vl.c | 5 ++++- -# 1 file changed, 4 insertions(+), 1 deletion(-) -# -Index: qemu/vl.c -=================================================================== ---- qemu.orig/vl.c 2007-12-03 15:44:35.000000000 +0000 -+++ qemu/vl.c 2007-12-03 15:51:03.000000000 +0000 -@@ -1289,12 +1289,15 @@ static void hpet_stop_timer(struct qemu_ - - static int rtc_start_timer(struct qemu_alarm_timer *t) - { -+ unsigned long current_rtc_freq = 0; - int rtc_fd; - - TFR(rtc_fd = open("/dev/rtc", O_RDONLY)); - if (rtc_fd < 0) - return -1; -- if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { -+ ioctl(rtc_fd, RTC_IRQP_READ, ¤t_rtc_freq); -+ if (current_rtc_freq != RTC_FREQ && -+ ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { - fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n" - "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n" - "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n"); diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/qemu-0.9.0+cvs20071121/05_non-fatal_if_linux_hd_missing.patch deleted file mode 100644 index fdd922605e..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/05_non-fatal_if_linux_hd_missing.patch +++ /dev/null @@ -1,17 +0,0 @@ -#DPATCHLEVEL=1 ---- -# hw/pc.c | 1 - -# 1 file changed, 1 deletion(-) -# -Index: qemu/hw/pc.c -=================================================================== ---- qemu.orig/hw/pc.c 2007-12-03 23:47:25.000000000 +0000 -+++ qemu/hw/pc.c 2007-12-03 23:47:38.000000000 +0000 -@@ -385,7 +385,6 @@ static void generate_bootsect(uint32_t g - if (bs_table[0] == NULL) { - fprintf(stderr, "A disk image must be given for 'hda' when booting " - "a Linux kernel\n"); -- exit(1); - } - - memset(bootsect, 0, sizeof(bootsect)); diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/06_exit_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20071121/06_exit_segfault.patch deleted file mode 100644 index 06123d0626..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/06_exit_segfault.patch +++ /dev/null @@ -1,45 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/main.c | 8 ++++---- -# 1 file changed, 4 insertions(+), 4 deletions(-) -# -Index: linux-user/main.c -=================================================================== ---- linux-user/main.c.orig 2007-12-03 23:47:25.000000000 +0000 -+++ linux-user/main.c 2007-12-03 23:47:41.000000000 +0000 -@@ -714,7 +714,7 @@ void cpu_loop (CPUSPARCState *env) - default: - printf ("Unhandled trap: 0x%x\n", trapnr); - cpu_dump_state(env, stderr, fprintf, 0); -- exit (1); -+ _exit (1); - } - process_pending_signals (env); - } -@@ -1634,7 +1634,7 @@ void cpu_loop (CPUState *env) - default: - printf ("Unhandled trap: 0x%x\n", trapnr); - cpu_dump_state(env, stderr, fprintf, 0); -- exit (1); -+ _exit (1); - } - process_pending_signals (env); - } -@@ -1954,7 +1954,7 @@ int main(int argc, char **argv) - for(item = cpu_log_items; item->mask != 0; item++) { - printf("%-10s %s\n", item->name, item->help); - } -- exit(1); -+ _exit(1); - } - cpu_set_log(mask); - } else if (!strcmp(r, "s")) { -@@ -1973,7 +1973,7 @@ int main(int argc, char **argv) - if (qemu_host_page_size == 0 || - (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) { - fprintf(stderr, "page size must be a power of two\n"); -- exit(1); -+ _exit(1); - } - } else if (!strcmp(r, "g")) { - gdbstub_port = atoi(argv[optind++]); diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/10_signal_jobs.patch b/packages/qemu/qemu-0.9.0+cvs20071121/10_signal_jobs.patch deleted file mode 100644 index 34282adc9d..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/10_signal_jobs.patch +++ /dev/null @@ -1,26 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/signal.c | 7 ++++++- -# 1 file changed, 6 insertions(+), 1 deletion(-) -# -Index: linux-user/signal.c -=================================================================== ---- linux-user/signal.c.orig 2007-12-03 15:40:26.000000000 +0000 -+++ linux-user/signal.c 2007-12-03 15:55:49.000000000 +0000 -@@ -364,10 +364,15 @@ int queue_signal(int sig, target_siginfo - k = &sigact_table[sig - 1]; - handler = k->sa._sa_handler; - if (handler == TARGET_SIG_DFL) { -+ if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) { -+ kill(getpid(),SIGSTOP); -+ return 0; -+ } else - /* default handler : ignore some signal. The other are fatal */ - if (sig != TARGET_SIGCHLD && - sig != TARGET_SIGURG && -- sig != TARGET_SIGWINCH) { -+ sig != TARGET_SIGWINCH && -+ sig != TARGET_SIGCONT) { - force_sig(sig); - } else { - return 0; /* indicate ignored */ diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/11_signal_sigaction.patch b/packages/qemu/qemu-0.9.0+cvs20071121/11_signal_sigaction.patch deleted file mode 100644 index 33c5e8b12d..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/11_signal_sigaction.patch +++ /dev/null @@ -1,21 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/signal.c | 5 +++++ -# 1 file changed, 5 insertions(+) -# -Index: linux-user/signal.c -=================================================================== ---- linux-user/signal.c.orig 2007-12-03 23:47:44.000000000 +0000 -+++ linux-user/signal.c 2007-12-03 23:47:46.000000000 +0000 -@@ -512,6 +512,11 @@ int do_sigaction(int sig, const struct t - - if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP) - return -EINVAL; -+ -+ /* no point doing the stuff as those are not allowed for sigaction */ -+ if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP)) -+ return -EINVAL; -+ - k = &sigact_table[sig - 1]; - #if defined(DEBUG_SIGNAL) - fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n", diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/22_net_tuntap_stall.patch b/packages/qemu/qemu-0.9.0+cvs20071121/22_net_tuntap_stall.patch deleted file mode 100644 index 6017df0f6d..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/22_net_tuntap_stall.patch +++ /dev/null @@ -1,18 +0,0 @@ -#DPATCHLEVEL=0 ---- -# vl.c | 2 +- -# 1 file changed, 1 insertion(+), 1 deletion(-) -# -Index: vl.c -=================================================================== ---- vl.c.orig 2007-12-03 23:47:36.000000000 +0000 -+++ vl.c 2007-12-03 23:47:48.000000000 +0000 -@@ -4023,7 +4023,7 @@ static int tap_open(char *ifname, int if - return -1; - } - memset(&ifr, 0, sizeof(ifr)); -- ifr.ifr_flags = IFF_TAP | IFF_NO_PI; -+ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE; - if (ifname[0] != '\0') - pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname); - else diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch b/packages/qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch deleted file mode 100644 index 95a7332ee8..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch +++ /dev/null @@ -1,48 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/syscall.c | 11 ++++++++--- -# 1 file changed, 8 insertions(+), 3 deletions(-) -# -Index: linux-user/syscall.c -=================================================================== ---- linux-user/syscall.c.orig 2007-12-03 19:32:56.000000000 +0000 -+++ linux-user/syscall.c 2007-12-03 19:33:41.000000000 +0000 -@@ -250,6 +250,7 @@ extern int getresuid(uid_t *, uid_t *, u - extern int setresgid(gid_t, gid_t, gid_t); - extern int getresgid(gid_t *, gid_t *, gid_t *); - extern int setgroups(int, gid_t *); -+extern int uselib(const char*); - - #define ERRNO_TABLE_SIZE 1200 - -@@ -4024,7 +4025,8 @@ abi_long do_syscall(void *cpu_env, int n - #endif - #ifdef TARGET_NR_uselib - case TARGET_NR_uselib: -- goto unimplemented; -+ ret = get_errno(uselib(path((const char*)arg1))); -+ break; - #endif - #ifdef TARGET_NR_swapon - case TARGET_NR_swapon: -@@ -5289,7 +5291,9 @@ abi_long do_syscall(void *cpu_env, int n - goto unimplemented; - #ifdef TARGET_NR_mincore - case TARGET_NR_mincore: -- goto unimplemented; -+ /*page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);*/ -+ ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); -+ break; - #endif - #ifdef TARGET_NR_madvise - case TARGET_NR_madvise: -@@ -5429,7 +5433,8 @@ abi_long do_syscall(void *cpu_env, int n - break; - #ifdef TARGET_NR_readahead - case TARGET_NR_readahead: -- goto unimplemented; -+ ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3)); -+ break; - #endif - #ifdef TARGET_NR_setxattr - case TARGET_NR_setxattr: diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch b/packages/qemu/qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch deleted file mode 100644 index 5e8dd75b0e..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch +++ /dev/null @@ -1,55 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/syscall.c | 32 +++++++++++++++++++++++++++++--- -# 1 file changed, 29 insertions(+), 3 deletions(-) -# -Index: linux-user/syscall.c -=================================================================== ---- linux-user/syscall.c.orig 2007-12-03 15:56:24.000000000 +0000 -+++ linux-user/syscall.c 2007-12-03 15:57:36.000000000 +0000 -@@ -52,6 +52,7 @@ - //#include - #include - #include -+#include - - #define termios host_termios - #define winsize host_winsize -@@ -4739,9 +4740,34 @@ abi_long do_syscall(void *cpu_env, int n - break; - #endif - case TARGET_NR__sysctl: -- /* We don't implement this, but ENOTDIR is always a safe -- return value. */ -- ret = -TARGET_ENOTDIR; -+ { -+ struct __sysctl_args *args = (struct __sysctl_args *) arg1; -+ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i; -+ void *oldval, *newval; -+ -+ name_target = (int *) tswapl((long) args->name); -+ nlen = tswapl(args->nlen); -+ oldval = (void *) tswapl((long) args->oldval); -+ oldlenp = (int *) tswapl((long) args->oldlenp); -+ oldlen = tswapl(*oldlenp); -+ newval = (void *) tswapl((long) args->newval); -+ newlen = tswapl(args->newlen); -+ -+ name = alloca(nlen * sizeof (int)); -+ for (i = 0; i < nlen; i++) -+ name[i] = tswapl(name_target[i]); -+ -+ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) { -+ ret = get_errno( -+ sysctl(name, nlen, oldval, &oldlen, newval, newlen)); -+ if (!is_error(ret)) { -+ *oldlenp = tswapl(oldlen); -+ } -+ } else { -+ gemu_log("qemu: Unsupported sysctl name\n"); -+ ret = -ENOSYS; -+ } -+ } - break; - case TARGET_NR_sched_setparam: - { diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/33_syscall_ppc_clone.patch b/packages/qemu/qemu-0.9.0+cvs20071121/33_syscall_ppc_clone.patch deleted file mode 100644 index 3f733b6ab8..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/33_syscall_ppc_clone.patch +++ /dev/null @@ -1,22 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/syscall.c | 6 +----- -# 1 file changed, 1 insertion(+), 5 deletions(-) -# -Index: linux-user/syscall.c -=================================================================== ---- linux-user/syscall.c.orig 2007-12-03 15:58:11.000000000 +0000 -+++ linux-user/syscall.c 2007-12-03 15:58:46.000000000 +0000 -@@ -2750,11 +2750,7 @@ int do_fork(CPUState *env, unsigned int - if (!newsp) - newsp = env->gpr[1]; - new_env->gpr[1] = newsp; -- { -- int i; -- for (i = 7; i < 32; i++) -- new_env->gpr[i] = 0; -- } -+ new_env->gpr[3] = 0; - #elif defined(TARGET_SH4) - if (!newsp) - newsp = env->gregs[15]; diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/39_syscall_fadvise64.patch b/packages/qemu/qemu-0.9.0+cvs20071121/39_syscall_fadvise64.patch deleted file mode 100644 index 54ee3e0948..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/39_syscall_fadvise64.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- - linux-user/syscall.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -Index: linux-user/syscall.c -=================================================================== ---- linux-user/syscall.c.orig 2007-12-03 19:33:47.000000000 +0000 -+++ linux-user/syscall.c 2007-12-03 19:33:48.000000000 +0000 -@@ -5317,6 +5317,12 @@ abi_long do_syscall(void *cpu_env, int n - ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); - break; - #endif -+#ifdef TARGET_NR_fadvise64_64 -+ case TARGET_NR_fadvise64_64: -+ /* Just return success */ -+ ret = get_errno(0); -+ break; -+#endif - #ifdef TARGET_NR_madvise - case TARGET_NR_madvise: - /* A straight passthrough may not be safe because qemu sometimes diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch b/packages/qemu/qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch deleted file mode 100644 index cea3afc7ff..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch +++ /dev/null @@ -1,104 +0,0 @@ -#DPATCHLEVEL=0 ---- -# linux-user/main.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++- -# target-arm/nwfpe/fpa11.c | 7 ++++++ -# 2 files changed, 57 insertions(+), 1 deletion(-) -# -Index: linux-user/main.c -=================================================================== ---- linux-user/main.c.orig 2007-12-03 15:59:10.000000000 +0000 -+++ linux-user/main.c 2007-12-03 16:01:27.000000000 +0000 -@@ -377,18 +377,67 @@ void cpu_loop(CPUARMState *env) - { - TaskState *ts = env->opaque; - uint32_t opcode; -+ int rc; - - /* we handle the FPU emulation here, as Linux */ - /* we get the opcode */ - /* FIXME - what to do if get_user() fails? */ - get_user_u32(opcode, env->regs[15]); - -- if (EmulateAll(opcode, &ts->fpa, env) == 0) { -+ rc = EmulateAll(opcode, &ts->fpa, env); -+ if (rc == 0) { /* illegal instruction */ - info.si_signo = SIGILL; - info.si_errno = 0; - info.si_code = TARGET_ILL_ILLOPN; - info._sifields._sigfault._addr = env->regs[15]; - queue_signal(info.si_signo, &info); -+ } else if (rc < 0) { /* FP exception */ -+ int arm_fpe=0; -+ -+ /* translate softfloat flags to FPSR flags */ -+ if (-rc & float_flag_invalid) -+ arm_fpe |= BIT_IOC; -+ if (-rc & float_flag_divbyzero) -+ arm_fpe |= BIT_DZC; -+ if (-rc & float_flag_overflow) -+ arm_fpe |= BIT_OFC; -+ if (-rc & float_flag_underflow) -+ arm_fpe |= BIT_UFC; -+ if (-rc & float_flag_inexact) -+ arm_fpe |= BIT_IXC; -+ -+ FPSR fpsr = ts->fpa.fpsr; -+ //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe); -+ -+ if (fpsr & (arm_fpe << 16)) { /* exception enabled? */ -+ info.si_signo = SIGFPE; -+ info.si_errno = 0; -+ -+ /* ordered by priority, least first */ -+ if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES; -+ if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND; -+ if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF; -+ if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV; -+ if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV; -+ -+ info._sifields._sigfault._addr = env->regs[15]; -+ queue_signal(info.si_signo, &info); -+ } else { -+ env->regs[15] += 4; -+ } -+ -+ /* accumulate unenabled exceptions */ -+ if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC)) -+ fpsr |= BIT_IXC; -+ if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC)) -+ fpsr |= BIT_UFC; -+ if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC)) -+ fpsr |= BIT_OFC; -+ if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC)) -+ fpsr |= BIT_DZC; -+ if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC)) -+ fpsr |= BIT_IOC; -+ ts->fpa.fpsr=fpsr; - } else { - /* increment PC */ - env->regs[15] += 4; -Index: target-arm/nwfpe/fpa11.c -=================================================================== ---- target-arm/nwfpe/fpa11.c.orig 2007-12-03 15:40:26.000000000 +0000 -+++ target-arm/nwfpe/fpa11.c 2007-12-03 15:59:11.000000000 +0000 -@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc - fpa11->initflag = 1; - } - -+ set_float_exception_flags(0, &fpa11->fp_status); -+ - if (TEST_OPCODE(opcode,MASK_CPRT)) - { - //fprintf(stderr,"emulating CPRT\n"); -@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc - } - - // restore_flags(flags); -+ if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status)) -+ { -+ //printf("fef 0x%x\n",float_exception_flags); -+ nRc=-get_float_exception_flags(&fpa11->fp_status); -+ } - - //printf("returning %d\n",nRc); - return(nRc); diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/52_ne2000_return.patch b/packages/qemu/qemu-0.9.0+cvs20071121/52_ne2000_return.patch deleted file mode 100644 index e4ea33f2c6..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/52_ne2000_return.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- - hw/ne2000.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: qemu/hw/ne2000.c -=================================================================== ---- qemu.orig/hw/ne2000.c 2007-12-03 19:32:52.000000000 +0000 -+++ qemu/hw/ne2000.c 2007-12-03 19:33:55.000000000 +0000 -@@ -217,7 +217,7 @@ static int ne2000_can_receive(void *opaq - NE2000State *s = opaque; - - if (s->cmd & E8390_STOP) -- return 1; -+ return 0; - return !ne2000_buffer_full(s); - } - diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch b/packages/qemu/qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch deleted file mode 100644 index bdb0d2e232..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch +++ /dev/null @@ -1,27 +0,0 @@ -#DPATCHLEVEL=0 ---- -# dyngen-exec.h | 4 ++-- -# 1 file changed, 2 insertions(+), 2 deletions(-) -# -Index: dyngen-exec.h -=================================================================== ---- dyngen-exec.h.orig 2007-12-03 15:40:26.000000000 +0000 -+++ dyngen-exec.h 2007-12-03 16:03:29.000000000 +0000 -@@ -38,7 +38,7 @@ typedef unsigned int uint32_t; - // Linux/Sparc64 defines uint64_t - #if !(defined (__sparc_v9__) && defined(__linux__)) - /* XXX may be done for all 64 bits targets ? */ --#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) -+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__) - typedef unsigned long uint64_t; - #else - typedef unsigned long long uint64_t; -@@ -55,7 +55,7 @@ typedef signed short int16_t; - typedef signed int int32_t; - // Linux/Sparc64 defines int64_t - #if !(defined (__sparc_v9__) && defined(__linux__)) --#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) -+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__) - typedef signed long int64_t; - #else - typedef signed long long int64_t; diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/63_sparc_build.patch b/packages/qemu/qemu-0.9.0+cvs20071121/63_sparc_build.patch deleted file mode 100644 index 37b38f641b..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/63_sparc_build.patch +++ /dev/null @@ -1,18 +0,0 @@ -#DPATCHLEVEL=0 ---- -# sparc.ld | 2 +- -# 1 file changed, 1 insertion(+), 1 deletion(-) -# -Index: sparc.ld -=================================================================== ---- sparc.ld.orig 2007-12-03 15:40:26.000000000 +0000 -+++ sparc.ld 2007-12-03 16:05:06.000000000 +0000 -@@ -6,7 +6,7 @@ ENTRY(_start) - SECTIONS - { - /* Read-only sections, merged into text segment: */ -- . = 0x60000000 + SIZEOF_HEADERS; -+ . = 0x60000000 + 0x400; - .interp : { *(.interp) } - .hash : { *(.hash) } - .dynsym : { *(.dynsym) } diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/64_ppc_asm_constraints.patch b/packages/qemu/qemu-0.9.0+cvs20071121/64_ppc_asm_constraints.patch deleted file mode 100644 index e4858b79d7..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/64_ppc_asm_constraints.patch +++ /dev/null @@ -1,18 +0,0 @@ -#DPATCHLEVEL=1 ---- -# cpu-all.h | 2 +- -# 1 file changed, 1 insertion(+), 1 deletion(-) -# -Index: qemu/cpu-all.h -=================================================================== ---- qemu.orig/cpu-all.h 2007-06-13 11:48:22.000000000 +0100 -+++ qemu/cpu-all.h 2007-06-13 11:51:56.000000000 +0100 -@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i - static inline void stl_le_p(void *ptr, int v) - { - #ifdef __powerpc__ -- __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr)); -+ __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory"); - #else - uint8_t *p = ptr; - p[0] = v; diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch b/packages/qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch deleted file mode 100644 index dfece800ac..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- - configure | 6 ++++++ - vl.c | 2 ++ - 2 files changed, 8 insertions(+) - -Index: configure -=================================================================== ---- configure.orig 2007-12-03 15:40:26.000000000 +0000 -+++ configure 2007-12-03 16:05:34.000000000 +0000 -@@ -129,6 +129,12 @@ if [ "$cpu" = "i386" -o "$cpu" = "x86_64 - kqemu="yes" - fi - ;; -+GNU/kFreeBSD) -+oss="yes" -+if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then -+ kqemu="yes" -+fi -+;; - FreeBSD) - bsd="yes" - oss="yes" -Index: vl.c -=================================================================== ---- vl.c.orig 2007-12-03 16:05:32.000000000 +0000 -+++ vl.c 2007-12-03 16:05:34.000000000 +0000 -@@ -97,6 +97,8 @@ - #include - #endif - #endif -+#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__) -+#include - #else - #include - int inet_aton(const char *cp, struct in_addr *ia); diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch b/packages/qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch deleted file mode 100644 index 54e02eff8b..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch +++ /dev/null @@ -1,55 +0,0 @@ ---- - arm.ld | 7 +++++++ - i386.ld | 7 +++++++ - 2 files changed, 14 insertions(+) - -Index: arm.ld -=================================================================== ---- arm.ld.orig 2007-06-13 11:48:22.000000000 +0100 -+++ arm.ld 2007-06-13 11:51:56.000000000 +0100 -@@ -26,6 +26,10 @@ SECTIONS - { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } - .rela.rodata : - { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } -+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } -+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } -+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } -+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.ctors : { *(.rel.ctors) } -@@ -58,6 +62,9 @@ SECTIONS - .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } - __exidx_end = .; - .reginfo : { *(.reginfo) } -+ /* Thread Local Storage sections */ -+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } -+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } - /* Adjust the address for the data segment. We want to adjust up to - the same address within the page on the next page up. */ - . = ALIGN(0x100000) + (. & (0x100000 - 1)); -Index: i386.ld -=================================================================== ---- i386.ld.orig 2007-06-13 11:48:22.000000000 +0100 -+++ i386.ld 2007-06-13 11:51:56.000000000 +0100 -@@ -28,6 +28,10 @@ SECTIONS - { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } - .rela.rodata : - { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } -+ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } -+ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } -+ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } -+ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.ctors : { *(.rel.ctors) } -@@ -53,6 +57,9 @@ SECTIONS - _etext = .; - PROVIDE (etext = .); - .fini : { *(.fini) } =0x47ff041f -+ /* Thread Local Storage sections */ -+ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } -+ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } - . = ALIGN(32 / 8); - PROVIDE (__preinit_array_start = .); - .preinit_array : { *(.preinit_array) } diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch b/packages/qemu/qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch deleted file mode 100644 index 0d60c1c306..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch +++ /dev/null @@ -1,18 +0,0 @@ -=== modified file 'sdl.c' ---- - sdl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: sdl.c -=================================================================== ---- sdl.c.orig 2007-12-03 19:32:15.000000000 +0000 -+++ sdl.c 2007-12-03 19:34:04.000000000 +0000 -@@ -247,7 +247,7 @@ static void sdl_hide_cursor(void) - - if (kbd_mouse_is_absolute()) { - SDL_ShowCursor(1); -- SDL_SetCursor(sdl_cursor_hidden); -+ /* SDL_SetCursor(sdl_cursor_hidden); */ - } else { - SDL_ShowCursor(0); - } diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/disable-error-in-configure.patch b/packages/qemu/qemu-0.9.0+cvs20071121/disable-error-in-configure.patch deleted file mode 100644 index 017f9f6355..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/disable-error-in-configure.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- - configure | 2 -- - 1 file changed, 2 deletions(-) - -Index: qemu/configure -=================================================================== ---- qemu.orig/configure 2007-12-03 16:38:38.000000000 +0000 -+++ qemu/configure 2007-12-03 16:38:39.000000000 +0000 -@@ -323,8 +323,6 @@ for opt do - ;; - --disable-werror) werror="no" - ;; -- *) echo "ERROR: unknown option $opt"; show_help="yes" -- ;; - --disable-nptl) nptl="no" - ;; - esac diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch deleted file mode 100644 index 443c330650..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- - linux-user/syscall.c | 22 ---------------------- - 1 file changed, 22 deletions(-) - -Index: qemu/linux-user/syscall.c -=================================================================== ---- qemu.orig/linux-user/syscall.c 2007-12-03 23:40:11.000000000 +0000 -+++ qemu/linux-user/syscall.c 2007-12-03 23:40:21.000000000 +0000 -@@ -5695,28 +5695,6 @@ abi_long do_syscall(void *cpu_env, int n - goto unimplemented_nowarn; - #endif - --#ifdef TARGET_NR_clock_gettime -- case TARGET_NR_clock_gettime: -- { -- struct timespec ts; -- ret = get_errno(clock_gettime(arg1, &ts)); -- if (!is_error(ret)) { -- host_to_target_timespec(arg2, &ts); -- } -- break; -- } --#endif --#ifdef TARGET_NR_clock_getres -- case TARGET_NR_clock_getres: -- { -- struct timespec ts; -- ret = get_errno(clock_getres(arg1, &ts)); -- if (!is_error(ret)) { -- host_to_target_timespec(arg2, &ts); -- } -- break; -- } --#endif - - #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) - case TARGET_NR_set_tid_address: diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/no-strip.patch b/packages/qemu/qemu-0.9.0+cvs20071121/no-strip.patch deleted file mode 100644 index fe90f36182..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/no-strip.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/Makefile.org 2007-11-18 23:33:07.000000000 +0200 -+++ a/Makefile 2008-01-01 19:09:25.000000000 +0200 -@@ -165,7 +165,7 @@ - install: all $(if $(BUILD_DOCS),install-doc) - mkdir -p "$(DESTDIR)$(bindir)" - ifneq ($(TOOLS),) -- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)" -+ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)" - endif - mkdir -p "$(DESTDIR)$(datadir)" - for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \ ---- a/Makefile.target.org 2007-11-19 00:34:46.000000000 +0200 -+++ a/Makefile.target 2008-01-01 19:10:02.000000000 +0200 -@@ -629,7 +629,7 @@ - - install: all - ifneq ($(PROGS),) -- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)" -+ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)" - endif - - ifneq ($(wildcard .depend),) diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl-update.patch b/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl-update.patch deleted file mode 100644 index ebc996e873..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl-update.patch +++ /dev/null @@ -1,219 +0,0 @@ ---- - linux-user/main.c | 7 ++- - linux-user/syscall.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++----- - 2 files changed, 111 insertions(+), 10 deletions(-) - -Index: qemu/linux-user/main.c -=================================================================== ---- qemu.orig/linux-user/main.c 2007-12-03 19:34:09.000000000 +0000 -+++ qemu/linux-user/main.c 2007-12-03 23:44:45.000000000 +0000 -@@ -391,7 +391,7 @@ do_kernel_trap(CPUARMState *env) - cpu_unlock(); - break; - case 0xffff0fe0: /* __kernel_get_tls */ -- env->regs[0] = env->cp15.c13_tls; -+ env->regs[0] = env->cp15.c13_tls2; - break; - default: - return 1; -@@ -2037,6 +2037,11 @@ int main(int argc, char **argv) - int drop_ld_preload = 0, environ_count = 0; - char **target_environ, **wrk, **dst; - -+ char *assume_kernel = getenv("QEMU_ASSUME_KERNEL"); -+ -+ if (assume_kernel) -+ setenv("LD_ASSUME_KERNEL", assume_kernel, 1); -+ - if (argc <= 1) - usage(); - -Index: qemu/linux-user/syscall.c -=================================================================== ---- qemu.orig/linux-user/syscall.c 2007-12-03 19:34:09.000000000 +0000 -+++ qemu/linux-user/syscall.c 2007-12-03 23:46:54.000000000 +0000 -@@ -61,6 +61,7 @@ - #define tchars host_tchars /* same as target */ - #define ltchars host_ltchars /* same as target */ - -+#include - #include - #include - #include -@@ -2694,7 +2695,6 @@ abi_long do_arch_prctl(CPUX86State *env, - return 0; - } - #endif -- - #endif /* defined(TARGET_I386) */ - - /* this stack is the equivalent of the kernel stack associated with a -@@ -2729,16 +2729,19 @@ int do_fork(CPUState *env, unsigned int - TaskState *ts; - uint8_t *new_stack; - CPUState *new_env; -- -+#if defined(TARGET_I386) -+ uint64_t *new_gdt_table; -+#endif - #ifdef USE_NPTL - unsigned int nptl_flags; - - if (flags & CLONE_PARENT_SETTID) - *parent_tidptr = gettid(); - #endif -- - if (flags & CLONE_VM) { - ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); -+ if (!ts) -+ return -ENOMEM; - memset(ts, 0, sizeof(TaskState)); - new_stack = ts->stack; - ts->used = 1; -@@ -2750,6 +2753,29 @@ int do_fork(CPUState *env, unsigned int - #if defined(TARGET_I386) - if (!newsp) - newsp = env->regs[R_ESP]; -+ new_gdt_table = malloc(9 * 8); -+ if (!new_gdt_table) { -+ free(new_env); -+ return -ENOMEM; -+ } -+ /* Copy main GDT table from parent, but clear TLS entries */ -+ memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8); -+ memset(&new_gdt_table[6], 0, 3 * 8); -+ new_env->gdt.base = h2g(new_gdt_table); -+ if (flags & 0x00080000 /* CLONE_SETTLS */) { -+ ret = do_set_thread_area(new_env, new_env->regs[R_ESI]); -+ if (ret) { -+ free(new_gdt_table); -+ free(new_env); -+ return ret; -+ } -+ } -+ cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]); -+ cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]); -+ cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]); -+ cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]); -+ cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]); -+ cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]); - new_env->regs[R_ESP] = newsp; - new_env->regs[R_EAX] = 0; - #elif defined(TARGET_ARM) -@@ -3121,6 +3147,68 @@ static inline abi_long host_to_target_ti - unlock_user_struct(target_ts, target_addr, 1); - } - -+static long do_futex(target_ulong uaddr, int op, uint32_t val, -+ target_ulong utime, target_ulong uaddr2, -+ uint32_t val3) -+{ -+ struct timespec host_utime; -+ unsigned long val2 = utime; -+ -+ if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) { -+ target_to_host_timespec(&host_utime, utime); -+ val2 = (unsigned long)&host_utime; -+ } -+ -+#ifdef BSWAP_NEEDED -+ switch(op) { -+ case FUTEX_CMP_REQUEUE: -+ val3 = tswap32(val3); -+ case FUTEX_REQUEUE: -+ val2 = tswap32(val2); -+ case FUTEX_WAIT: -+ case FUTEX_WAKE: -+ val = tswap32(val); -+ case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */ -+ case FUTEX_UNLOCK_PI: -+ break; -+ default: -+ gemu_log("qemu: Unsupported futex op %d\n", op); -+ return -ENOSYS; -+ } -+#if 0 /* No, it's worse than this */ -+ if (op == FUTEX_WAKE_OP) { -+ /* Need to munge the secondary operation (val3) */ -+ val3 = tswap32(val3); -+ int op2 = (val3 >> 28) & 7; -+ int cmp = (val3 >> 24) & 15; -+ int oparg = (val3 << 8) >> 20; -+ int cmparg = (val3 << 20) >> 20; -+ int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28); -+ -+ if (shift) -+ oparg = (oparg & 7) + 24 - (oparg & 24); -+ else oparg = -+ if (op2 == FUTEX_OP_ADD) { -+ gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n"); -+ return -ENOSYS; -+ } -+ if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE || -+ cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) { -+ gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg); -+ return -ENOSYS; -+ } -+ val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg; -+ } -+#endif -+#endif -+ return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3); -+} -+ -+int do_set_tid_address(target_ulong tidptr) -+{ -+ return syscall(__NR_set_tid_address, g2h(tidptr)); -+} -+ - /* do_syscall() should always have a single exit point at the end so - that actions, such as logging of syscall results, can be performed. - All errnos that do_syscall() returns must be -TARGET_. */ -@@ -3145,7 +3233,7 @@ abi_long do_syscall(void *cpu_env, int n - _mcleanup(); - #endif - gdb_exit(cpu_env, arg1); -- /* XXX: should free thread stack and CPU env */ -+ /* XXX: should free thread stack, GDT and CPU env */ - _exit(arg1); - ret = 0; /* avoid warning */ - break; -@@ -5569,6 +5657,9 @@ abi_long do_syscall(void *cpu_env, int n - #elif defined(TARGET_I386) && defined(TARGET_ABI32) - ret = do_set_thread_area(cpu_env, arg1); - break; -+#elif TARGET_i386 -+ ret = get_errno(do_set_thread_area(cpu_env, arg1)); -+ break; - #else - goto unimplemented_nowarn; - #endif -@@ -5586,6 +5677,16 @@ abi_long do_syscall(void *cpu_env, int n - goto unimplemented_nowarn; - #endif - -+#ifdef TARGET_NR_futex -+ case TARGET_NR_futex: -+ ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6)); -+ break; -+#endif -+#ifdef TARGET_NR_set_robust_list -+ case TARGET_NR_set_robust_list: -+ goto unimplemented_nowarn; -+#endif -+ - #ifdef TARGET_NR_clock_gettime - case TARGET_NR_clock_gettime: - { -@@ -5627,11 +5728,6 @@ abi_long do_syscall(void *cpu_env, int n - break; - #endif - --#ifdef TARGET_NR_set_robust_list -- case TARGET_NR_set_robust_list: -- goto unimplemented_nowarn; --#endif -- - #if defined(TARGET_NR_utimensat) && defined(__NR_utimensat) - case TARGET_NR_utimensat: - { diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch b/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch deleted file mode 100644 index 10e3cc04a5..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch +++ /dev/null @@ -1,929 +0,0 @@ -These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single -ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1 -immediately dies saying: - Error: f0005 - qemu: uncaught target signal 6 (Aborted) - exiting -while qemu-0.8.2 dies saying: - qemu: Unsupported syscall: 983045 - cannot set up thread-local storage: unknown error - -This file is a rediffing of the patches visible at -https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006 -which "patch" fails to apply automatically. -See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html - - Martin Guy, 27 Sept 2006 - ---- - configure | 25 ++++++ - exec-all.h | 165 ------------------------------------------ - linux-user/arm/syscall.h | 4 - - linux-user/main.c | 94 +++++++++++++++++++++--- - linux-user/qemu.h | 3 - linux-user/syscall.c | 91 ++++++++++++++++++++++- - qemu_spinlock.h | 181 +++++++++++++++++++++++++++++++++++++++++++++++ - target-arm/cpu.h | 10 ++ - target-arm/op.c | 6 + - target-arm/translate.c | 9 ++ - 10 files changed, 405 insertions(+), 183 deletions(-) - ---- qemu.orig/configure -+++ qemu/configure -@@ -103,10 +103,11 @@ check_gcc="yes" - softmmu="yes" - linux_user="no" - darwin_user="no" - build_docs="no" - uname_release="" -+nptl="yes" - - # OS specific - targetos=`uname -s` - case $targetos in - CYGWIN*) -@@ -322,10 +323,12 @@ for opt do - ;; - --disable-werror) werror="no" - ;; - *) echo "ERROR: unknown option $opt"; show_help="yes" - ;; -+ --disable-nptl) nptl="no" -+ ;; - esac - done - - if [ "$bsd" = "yes" -o "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then - AIOLIBS= -@@ -417,10 +420,11 @@ echo " --enable-system enable - echo " --disable-system disable all system emulation targets" - echo " --enable-linux-user enable all linux usermode emulation targets" - echo " --disable-linux-user disable all linux usermode emulation targets" - echo " --enable-darwin-user enable all darwin usermode emulation targets" - echo " --disable-darwin-user disable all darwin usermode emulation targets" -+echo " --disable-nptl disable usermode NPTL guest support" - echo " --fmod-lib path to FMOD library" - echo " --fmod-inc path to FMOD includes" - echo " --enable-uname-release=R Return R for uname -r in usermode emulation" - echo " --sparc_cpu=V Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9" - echo "" -@@ -583,10 +587,27 @@ fi - cat > $TMPC < $TMPC < -+void foo() -+{ -+#ifndef CLONE_SETTLS -+#error bork -+#endif -+} -+EOF -+ -+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then -+ : -+else -+ nptl="no" -+fi -+ - ########################################## - # SDL probe - - sdl_too_old=no - -@@ -747,10 +768,11 @@ if test -n "$sparc_cpu"; then - fi - echo "kqemu support $kqemu" - echo "Documentation $build_docs" - [ ! -z "$uname_release" ] && \ - echo "uname -r $uname_release" -+echo "NPTL support $nptl" - - if test $sdl_too_old = "yes"; then - echo "-> Your SDL version is too old - please upgrade to have SDL support" - fi - if [ -s /tmp/qemu-$$-sdl-config.log ]; then -@@ -1063,10 +1085,13 @@ if test "$target_cpu" = "i386" ; then - fi - elif test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then - echo "TARGET_ARCH=arm" >> $config_mak - echo "#define TARGET_ARCH \"arm\"" >> $config_h - echo "#define TARGET_ARM 1" >> $config_h -+ if test "$nptl" = "yes" ; then -+ echo "#define USE_NPTL 1" >> $config_h -+ fi - bflt="yes" - elif test "$target_cpu" = "sparc" ; then - echo "TARGET_ARCH=sparc" >> $config_mak - echo "#define TARGET_ARCH \"sparc\"" >> $config_h - echo "#define TARGET_SPARC 1" >> $config_h ---- qemu.orig/exec-all.h -+++ qemu/exec-all.h -@@ -338,174 +338,11 @@ dummy_label ## n: ;\ - - extern CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4]; - extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; - extern void *io_mem_opaque[IO_MEM_NB_ENTRIES]; - --#if defined(__powerpc__) --static inline int testandset (int *p) --{ -- int ret; -- __asm__ __volatile__ ( -- "0: lwarx %0,0,%1\n" -- " xor. %0,%3,%0\n" -- " bne 1f\n" -- " stwcx. %2,0,%1\n" -- " bne- 0b\n" -- "1: " -- : "=&r" (ret) -- : "r" (p), "r" (1), "r" (0) -- : "cr0", "memory"); -- return ret; --} --#elif defined(__i386__) --static inline int testandset (int *p) --{ -- long int readval = 0; -- -- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -- : "+m" (*p), "+a" (readval) -- : "r" (1) -- : "cc"); -- return readval; --} --#elif defined(__x86_64__) --static inline int testandset (int *p) --{ -- long int readval = 0; -- -- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -- : "+m" (*p), "+a" (readval) -- : "r" (1) -- : "cc"); -- return readval; --} --#elif defined(__s390__) --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" -- " jl 0b" -- : "=&d" (ret) -- : "r" (1), "a" (p), "0" (*p) -- : "cc", "memory" ); -- return ret; --} --#elif defined(__alpha__) --static inline int testandset (int *p) --{ -- int ret; -- unsigned long one; -- -- __asm__ __volatile__ ("0: mov 1,%2\n" -- " ldl_l %0,%1\n" -- " stl_c %2,%1\n" -- " beq %2,1f\n" -- ".subsection 2\n" -- "1: br 0b\n" -- ".previous" -- : "=r" (ret), "=m" (*p), "=r" (one) -- : "m" (*p)); -- return ret; --} --#elif defined(__sparc__) --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__("ldstub [%1], %0" -- : "=r" (ret) -- : "r" (p) -- : "memory"); -- -- return (ret ? 1 : 0); --} --#elif defined(__arm__) --static inline int testandset (int *spinlock) --{ -- register unsigned int ret; -- __asm__ __volatile__("swp %0, %1, [%2]" -- : "=r"(ret) -- : "0"(1), "r"(spinlock)); -- -- return ret; --} --#elif defined(__mc68000) --static inline int testandset (int *p) --{ -- char ret; -- __asm__ __volatile__("tas %1; sne %0" -- : "=r" (ret) -- : "m" (p) -- : "cc","memory"); -- return ret; --} --#elif defined(__ia64) -- --#include -- --static inline int testandset (int *p) --{ -- return __sync_lock_test_and_set (p, 1); --} --#elif defined(__mips__) --static inline int testandset (int *p) --{ -- int ret; -- -- __asm__ __volatile__ ( -- " .set push \n" -- " .set noat \n" -- " .set mips2 \n" -- "1: li $1, 1 \n" -- " ll %0, %1 \n" -- " sc $1, %1 \n" -- " beqz $1, 1b \n" -- " .set pop " -- : "=r" (ret), "+R" (*p) -- : -- : "memory"); -- -- return ret; --} --#else --#error unimplemented CPU support --#endif -- --typedef int spinlock_t; -- --#define SPIN_LOCK_UNLOCKED 0 -- --#if defined(CONFIG_USER_ONLY) --static inline void spin_lock(spinlock_t *lock) --{ -- while (testandset(lock)); --} -- --static inline void spin_unlock(spinlock_t *lock) --{ -- *lock = 0; --} -- --static inline int spin_trylock(spinlock_t *lock) --{ -- return !testandset(lock); --} --#else --static inline void spin_lock(spinlock_t *lock) --{ --} -- --static inline void spin_unlock(spinlock_t *lock) --{ --} -- --static inline int spin_trylock(spinlock_t *lock) --{ -- return 1; --} --#endif -+#include "qemu_spinlock.h" - - extern spinlock_t tb_lock; - - extern int tb_invalidated_flag; - ---- qemu.orig/linux-user/arm/syscall.h -+++ qemu/linux-user/arm/syscall.h -@@ -26,11 +26,13 @@ struct target_pt_regs { - #define ARM_ORIG_r0 uregs[17] - - #define ARM_SYSCALL_BASE 0x900000 - #define ARM_THUMB_SYSCALL 0 - --#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2) -+#define ARM_NR_BASE 0xf0000 -+#define ARM_NR_cacheflush (ARM_NR_BASE + 2) -+#define ARM_NR_set_tls (ARM_NR_BASE + 5) - - #define ARM_NR_semihosting 0x123456 - #define ARM_NR_thumb_semihosting 0xAB - - #if defined(TARGET_WORDS_BIGENDIAN) ---- qemu.orig/linux-user/main.c -+++ qemu/linux-user/main.c -@@ -361,10 +361,54 @@ static void arm_cache_flush(abi_ulong st - break; - addr = last1 + 1; - } - } - -+/* Handle a jump to the kernel code page. */ -+static int -+do_kernel_trap(CPUARMState *env) -+{ -+ uint32_t addr; -+ uint32_t *ptr; -+ uint32_t cpsr; -+ -+ switch (env->regs[15]) { -+ case 0xffff0fc0: /* __kernel_cmpxchg */ -+ /* XXX: This only works between threads, not between processes. -+ Use native atomic operations. */ -+ /* ??? This probably breaks horribly if the access segfaults. */ -+ cpu_lock(); -+ ptr = (uint32_t *)env->regs[2]; -+ cpsr = cpsr_read(env); -+ if (*ptr == env->regs[0]) { -+ *ptr = env->regs[1]; -+ env->regs[0] = 0; -+ cpsr |= CPSR_C; -+ } else { -+ env->regs[0] = -1; -+ cpsr &= ~CPSR_C; -+ } -+ cpsr_write(env, cpsr, CPSR_C); -+ cpu_unlock(); -+ break; -+ case 0xffff0fe0: /* __kernel_get_tls */ -+ env->regs[0] = env->cp15.c13_tls; -+ break; -+ default: -+ return 1; -+ } -+ /* Jump back to the caller. */ -+ addr = env->regs[14]; -+ if (addr & 1) { -+ env->thumb = 1; -+ addr &= ~1; -+ } -+ env->regs[15] = addr; -+ -+ return 0; -+} -+ - void cpu_loop(CPUARMState *env) - { - int trapnr; - unsigned int n, insn; - target_siginfo_t info; -@@ -471,32 +515,50 @@ void cpu_loop(CPUARMState *env) - get_user_u32(insn, env->regs[15] - 4); - n = insn & 0xffffff; - } - } - -- if (n == ARM_NR_cacheflush) { -- arm_cache_flush(env->regs[0], env->regs[1]); -- } else if (n == ARM_NR_semihosting -- || n == ARM_NR_thumb_semihosting) { -+ if (n == ARM_NR_semihosting -+ || n == ARM_NR_thumb_semihosting) { - env->regs[0] = do_arm_semihosting (env); - } else if (n == 0 || n >= ARM_SYSCALL_BASE - || (env->thumb && n == ARM_THUMB_SYSCALL)) { - /* linux syscall */ - if (env->thumb || n == 0) { - n = env->regs[7]; - } else { - n -= ARM_SYSCALL_BASE; - env->eabi = 0; - } -- env->regs[0] = do_syscall(env, -- n, -- env->regs[0], -- env->regs[1], -- env->regs[2], -- env->regs[3], -- env->regs[4], -- env->regs[5]); -+ if ( n > ARM_NR_BASE) { -+ switch (n) -+ { -+ case ARM_NR_cacheflush: -+ arm_cache_flush(env->regs[0], env->regs[1]); -+ break; -+#ifdef USE_NPTL -+ case ARM_NR_set_tls: -+ cpu_set_tls(env, env->regs[0]); -+ env->regs[0] = 0; -+ break; -+#endif -+ default: -+ printf ("Error: Bad syscall: %x\n", n); -+ goto error; -+ } -+ } -+ else -+ { -+ env->regs[0] = do_syscall(env, -+ n, -+ env->regs[0], -+ env->regs[1], -+ env->regs[2], -+ env->regs[3], -+ env->regs[4], -+ env->regs[5]); -+ } - } else { - goto error; - } - } - break; -@@ -531,10 +593,14 @@ void cpu_loop(CPUARMState *env) - info.si_code = TARGET_TRAP_BRKPT; - queue_signal(info.si_signo, &info); - } - } - break; -+ case EXCP_KERNEL_TRAP: -+ if (do_kernel_trap(env)) -+ goto error; -+ break; - default: - error: - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", - trapnr); - cpu_dump_state(env, stderr, fprintf, 0); -@@ -2378,10 +2444,14 @@ int main(int argc, char **argv) - #if defined(TARGET_ARM) || defined(TARGET_M68K) - ts->stack_base = info->start_stack; - ts->heap_base = info->brk; - /* This will be filled in on the first SYS_HEAPINFO call. */ - ts->heap_limit = 0; -+ /* Register the magic kernel code page. The cpu will generate a -+ special exception when it tries to execute code here. We can't -+ put real code here because it may be in use by the host kernel. */ -+ page_set_flags(0xffff0000, 0xffff0fff, 0); - #endif - - if (gdbstub_port) { - gdbserver_start (gdbstub_port); - gdb_handlesig(env, 0); ---- qemu.orig/linux-user/qemu.h -+++ qemu/linux-user/qemu.h -@@ -100,10 +100,13 @@ typedef struct TaskState { - /* Extra fields for semihosted binaries. */ - uint32_t stack_base; - uint32_t heap_base; - uint32_t heap_limit; - #endif -+#ifdef USE_NPTL -+ uint32_t *child_tidptr; -+#endif - int used; /* non zero if used */ - struct image_info *info; - uint8_t stack[0]; - } __attribute__((aligned(16))) TaskState; - ---- qemu.orig/linux-user/syscall.c -+++ qemu/linux-user/syscall.c -@@ -69,13 +69,22 @@ - #include - #include - #include - - #include "qemu.h" -+#include "qemu_spinlock.h" - - //#define DEBUG - -+#ifdef USE_NPTL -+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \ -+ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID) -+#else -+/* XXX: Hardcode the above values. */ -+#define CLONE_NPTL_FLAGS2 0 -+#endif -+ - #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \ - || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS) - /* 16 bit uid wrappers emulation */ - #define USE_UID16 - #endif -@@ -2690,27 +2699,46 @@ abi_long do_arch_prctl(CPUX86State *env, - - /* this stack is the equivalent of the kernel stack associated with a - thread/process */ - #define NEW_STACK_SIZE 8192 - -+#ifdef USE_NPTL -+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED; -+#endif -+ - static int clone_func(void *arg) - { - CPUState *env = arg; -+#ifdef HAVE_NPTL -+ /* Wait until the parent has finshed initializing the tls state. */ -+ while (!spin_trylock(&nptl_lock)) -+ usleep(1); -+ spin_unlock(&nptl_lock); -+#endif - cpu_loop(env); - /* never exits */ - return 0; - } - - /* do_fork() Must return host values and target errnos (unlike most - do_*() functions). */ --int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp) -+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp, -+ uint32_t *parent_tidptr, void *newtls, -+ uint32_t *child_tidptr) - { - int ret; - TaskState *ts; - uint8_t *new_stack; - CPUState *new_env; - -+#ifdef USE_NPTL -+ unsigned int nptl_flags; -+ -+ if (flags & CLONE_PARENT_SETTID) -+ *parent_tidptr = gettid(); -+#endif -+ - if (flags & CLONE_VM) { - ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); - memset(ts, 0, sizeof(TaskState)); - new_stack = ts->stack; - ts->used = 1; -@@ -2772,20 +2800,71 @@ int do_fork(CPUState *env, unsigned int - new_env->regs[14] = newsp; - #else - #error unsupported target CPU - #endif - new_env->opaque = ts; -+#ifdef USE_NPTL -+ nptl_flags = flags; -+ flags &= ~CLONE_NPTL_FLAGS2; -+ -+ if (nptl_flags & CLONE_CHILD_CLEARTID) { -+ ts->child_tidptr = child_tidptr; -+ } -+ -+ if (nptl_flags & CLONE_SETTLS) -+ cpu_set_tls (new_env, newtls); -+ -+ /* Grab the global cpu lock so that the thread setup appears -+ atomic. */ -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ spin_lock(&nptl_lock); -+ -+#else -+ if (flags & CLONE_NPTL_FLAGS2) -+ return -EINVAL; -+#endif -+ -+ if (CLONE_VFORK & flags) -+ flags ^= CLONE_VM; - #ifdef __ia64__ - ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); - #else - ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); - #endif -+#ifdef USE_NPTL -+ if (ret != -1) { -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ *child_tidptr = ret; -+ } -+ -+ /* Allow the child to continue. */ -+ if (nptl_flags & CLONE_CHILD_SETTID) -+ spin_unlock(&nptl_lock); -+#endif - } else { - /* if no CLONE_VM, we consider it is a fork */ -- if ((flags & ~CSIGNAL) != 0) -+ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0) - return -EINVAL; - ret = fork(); -+#ifdef USE_NPTL -+ /* There is a race condition here. The parent process could -+ theoretically read the TID in the child process before the child -+ tid is set. This would require using either ptrace -+ (not implemented) or having *_tidptr to point at a shared memory -+ mapping. We can't repeat the spinlock hack used above because -+ the child process gets its own copy of the lock. */ -+ if (ret == 0) { -+ /* Child Process. */ -+ if (flags & CLONE_CHILD_SETTID) -+ *child_tidptr = gettid(); -+ ts = (TaskState *)env->opaque; -+ if (flags & CLONE_CHILD_CLEARTID) -+ ts->child_tidptr = child_tidptr; -+ if (flags & CLONE_SETTLS) -+ cpu_set_tls (env, newtls); -+ } -+#endif - } - return ret; - } - - static abi_long do_fcntl(int fd, int cmd, abi_ulong arg) -@@ -3106,11 +3185,11 @@ abi_long do_syscall(void *cpu_env, int n - break; - case TARGET_NR_brk: - ret = do_brk(arg1); - break; - case TARGET_NR_fork: -- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0)); -+ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL)); - break; - #ifdef TARGET_NR_waitpid - case TARGET_NR_waitpid: - { - int status; -@@ -4463,11 +4542,12 @@ abi_long do_syscall(void *cpu_env, int n - #endif - case TARGET_NR_fsync: - ret = get_errno(fsync(arg1)); - break; - case TARGET_NR_clone: -- ret = get_errno(do_fork(cpu_env, arg1, arg2)); -+ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3, -+ (void *)arg4, (uint32_t *)arg5)); - break; - #ifdef __NR_exit_group - /* new thread calls */ - case TARGET_NR_exit_group: - gdb_exit(cpu_env, arg1); -@@ -4908,11 +4988,12 @@ abi_long do_syscall(void *cpu_env, int n - case TARGET_NR_putpmsg: - goto unimplemented; - #endif - #ifdef TARGET_NR_vfork - case TARGET_NR_vfork: -- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0)); -+ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0, -+ NULL, NULL, NULL)); - break; - #endif - #ifdef TARGET_NR_ugetrlimit - case TARGET_NR_ugetrlimit: - { ---- /dev/null -+++ qemu/qemu_spinlock.h -@@ -0,0 +1,181 @@ -+/* -+ * Atomic operation helper include -+ * -+ * Copyright (c) 2005 Fabrice Bellard -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+#ifndef QEMU_SPINLOCK_H -+#define QEMU_SPINLOCK_H -+ -+#ifdef __powerpc__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ __asm__ __volatile__ ( -+ "0: lwarx %0,0,%1\n" -+ " xor. %0,%3,%0\n" -+ " bne 1f\n" -+ " stwcx. %2,0,%1\n" -+ " bne- 0b\n" -+ "1: " -+ : "=&r" (ret) -+ : "r" (p), "r" (1), "r" (0) -+ : "cr0", "memory"); -+ return ret; -+} -+#endif -+ -+#ifdef __i386__ -+static inline int testandset (int *p) -+{ -+ long int readval = 0; -+ -+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -+ : "+m" (*p), "+a" (readval) -+ : "r" (1) -+ : "cc"); -+ return readval; -+} -+#endif -+ -+#ifdef __x86_64__ -+static inline int testandset (int *p) -+{ -+ long int readval = 0; -+ -+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" -+ : "+m" (*p), "+a" (readval) -+ : "r" (1) -+ : "cc"); -+ return readval; -+} -+#endif -+ -+#ifdef __s390__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ -+ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" -+ " jl 0b" -+ : "=&d" (ret) -+ : "r" (1), "a" (p), "0" (*p) -+ : "cc", "memory" ); -+ return ret; -+} -+#endif -+ -+#ifdef __alpha__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ unsigned long one; -+ -+ __asm__ __volatile__ ("0: mov 1,%2\n" -+ " ldl_l %0,%1\n" -+ " stl_c %2,%1\n" -+ " beq %2,1f\n" -+ ".subsection 2\n" -+ "1: br 0b\n" -+ ".previous" -+ : "=r" (ret), "=m" (*p), "=r" (one) -+ : "m" (*p)); -+ return ret; -+} -+#endif -+ -+#ifdef __sparc__ -+static inline int testandset (int *p) -+{ -+ int ret; -+ -+ __asm__ __volatile__("ldstub [%1], %0" -+ : "=r" (ret) -+ : "r" (p) -+ : "memory"); -+ -+ return (ret ? 1 : 0); -+} -+#endif -+ -+#ifdef __arm__ -+static inline int testandset (int *spinlock) -+{ -+ register unsigned int ret; -+ __asm__ __volatile__("swp %0, %1, [%2]" -+ : "=r"(ret) -+ : "0"(1), "r"(spinlock)); -+ -+ return ret; -+} -+#endif -+ -+#ifdef __mc68000 -+static inline int testandset (int *p) -+{ -+ char ret; -+ __asm__ __volatile__("tas %1; sne %0" -+ : "=r" (ret) -+ : "m" (p) -+ : "cc","memory"); -+ return ret; -+} -+#endif -+ -+#ifdef __ia64 -+#include -+ -+static inline int testandset (int *p) -+{ -+ return __sync_lock_test_and_set (p, 1); -+} -+#endif -+ -+typedef int spinlock_t; -+ -+#define SPIN_LOCK_UNLOCKED 0 -+ -+#if defined(CONFIG_USER_ONLY) -+static inline void spin_lock(spinlock_t *lock) -+{ -+ while (testandset(lock)); -+} -+ -+static inline void spin_unlock(spinlock_t *lock) -+{ -+ *lock = 0; -+} -+ -+static inline int spin_trylock(spinlock_t *lock) -+{ -+ return !testandset(lock); -+} -+#else -+static inline void spin_lock(spinlock_t *lock) -+{ -+} -+ -+static inline void spin_unlock(spinlock_t *lock) -+{ -+} -+ -+static inline int spin_trylock(spinlock_t *lock) -+{ -+ return 1; -+} -+#endif -+ -+#endif ---- qemu.orig/target-arm/cpu.h -+++ qemu/target-arm/cpu.h -@@ -36,10 +36,11 @@ - #define EXCP_DATA_ABORT 4 - #define EXCP_IRQ 5 - #define EXCP_FIQ 6 - #define EXCP_BKPT 7 - #define EXCP_EXCEPTION_EXIT 8 /* Return from v7M exception. */ -+#define EXCP_KERNEL_TRAP 9 /* Jumped to kernel code page. */ - - #define ARMV7M_EXCP_RESET 1 - #define ARMV7M_EXCP_NMI 2 - #define ARMV7M_EXCP_HARD 3 - #define ARMV7M_EXCP_MEM 4 -@@ -220,10 +221,19 @@ int cpu_arm_signal_handler(int host_sign - void *puc); - - void cpu_lock(void); - void cpu_unlock(void); - -+void cpu_lock(void); -+void cpu_unlock(void); -+#if defined(USE_NPTL) -+static inline void cpu_set_tls(CPUARMState *env, void *newtls) -+{ -+ env->cp15.c13_tls2 = (uint32_t)(long)newtls; -+} -+#endif -+ - #define CPSR_M (0x1f) - #define CPSR_T (1 << 5) - #define CPSR_F (1 << 6) - #define CPSR_I (1 << 7) - #define CPSR_A (1 << 8) ---- qemu.orig/target-arm/op.c -+++ qemu/target-arm/op.c -@@ -1007,10 +1007,16 @@ void OPPROTO op_exception_exit(void) - { - env->exception_index = EXCP_EXCEPTION_EXIT; - cpu_loop_exit(); - } - -+void OPPROTO op_kernel_trap(void) -+{ -+ env->exception_index = EXCP_KERNEL_TRAP; -+ cpu_loop_exit(); -+} -+ - /* VFP support. We follow the convention used for VFP instrunctions: - Single precition routines have a "s" suffix, double precision a - "d" suffix. */ - - #define VFP_OP(name, p) void OPPROTO op_vfp_##name##p(void) ---- qemu.orig/target-arm/translate.c -+++ qemu/target-arm/translate.c -@@ -7518,11 +7518,18 @@ static inline int gen_intermediate_code_ - /* We always get here via a jump, so know we are not in a - conditional execution block. */ - gen_op_exception_exit(); - } - #endif -- -+#ifdef CONFIG_USER_ONLY -+ /* Intercept jump to the magic kernel page. */ -+ if (dc->pc > 0xffff0000) { -+ gen_op_kernel_trap(); -+ dc->is_jmp = DISAS_UPDATE; -+ break; -+ } -+#endif - if (env->nb_breakpoints > 0) { - for(j = 0; j < env->nb_breakpoints; j++) { - if (env->breakpoints[j] == dc->pc) { - gen_set_condexec(dc); - gen_op_movl_T0_im((long)dc->pc); diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20071121/qemu-amd64-32b-mapping-0.9.0.patch deleted file mode 100644 index c7f36d8110..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-amd64-32b-mapping-0.9.0.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- - linux-user/mmap.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -Index: qemu/linux-user/mmap.c -=================================================================== ---- qemu.orig/linux-user/mmap.c 2007-12-03 15:40:25.000000000 +0000 -+++ qemu/linux-user/mmap.c 2007-12-03 16:37:21.000000000 +0000 -@@ -29,6 +29,10 @@ - - //#define DEBUG_MMAP - -+#ifndef MAP_32BIT -+#define MAP_32BIT 0 -+#endif -+ - /* NOTE: all the constants are the HOST ones, but addresses are target. */ - int target_mprotect(abi_ulong start, abi_ulong len, int prot) - { -@@ -251,7 +255,7 @@ abi_long target_mmap(abi_ulong start, ab - especially important if qemu_host_page_size > - qemu_real_host_page_size */ - p = mmap(g2h(mmap_start), -- host_len, prot, flags | MAP_FIXED, fd, host_offset); -+ host_len, prot, flags | MAP_FIXED | MAP_32BIT, fd, host_offset); - if (p == MAP_FAILED) - return -1; - /* update start so that it points to the file position at 'offset' */ -@@ -406,7 +410,7 @@ abi_long target_mremap(abi_ulong old_add - unsigned long host_addr; - - /* XXX: use 5 args syscall */ -- host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags); -+ host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags | MAP_32BIT); - if (host_addr == -1) - return -1; - new_addr = h2g(host_addr); diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/workaround_bad_futex_headers.patch b/packages/qemu/qemu-0.9.0+cvs20071121/workaround_bad_futex_headers.patch deleted file mode 100644 index cc122ebdba..0000000000 --- a/packages/qemu/qemu-0.9.0+cvs20071121/workaround_bad_futex_headers.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- - linux-user/syscall.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -Index: qemu/linux-user/syscall.c -=================================================================== ---- qemu.orig/linux-user/syscall.c 2007-08-09 20:28:06.000000000 +0100 -+++ qemu/linux-user/syscall.c 2007-08-09 20:28:41.000000000 +0100 -@@ -61,7 +61,15 @@ - #define tchars host_tchars /* same as target */ - #define ltchars host_ltchars /* same as target */ - --#include -+#define FUTEX_WAIT 0 -+#define FUTEX_WAKE 1 -+#define FUTEX_FD 2 -+#define FUTEX_REQUEUE 3 -+#define FUTEX_CMP_REQUEUE 4 -+#define FUTEX_WAKE_OP 5 -+#define FUTEX_LOCK_PI 6 -+#define FUTEX_UNLOCK_PI 7 -+ - #include - #include - #include diff --git a/packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch b/packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch new file mode 100644 index 0000000000..40264ed443 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch @@ -0,0 +1,23 @@ +#DPATCHLEVEL=0 +--- +# block.c | 6 +++++- +# 1 file changed, 5 insertions(+), 1 deletion(-) +# +Index: block.c +=================================================================== +--- block.c.orig 2007-12-03 23:47:25.000000000 +0000 ++++ block.c 2007-12-03 23:47:31.000000000 +0000 +@@ -191,8 +191,12 @@ void get_tmp_filename(char *filename, in + void get_tmp_filename(char *filename, int size) + { + int fd; ++ char *tmpdir; + /* XXX: race condition possible */ +- pstrcpy(filename, size, "/tmp/vl.XXXXXX"); ++ tmpdir = getenv("TMPDIR"); ++ if (!tmpdir) ++ tmpdir = "/tmp"; ++ snprintf(filename, size, "%s/vl.XXXXXX", tmpdir); + fd = mkstemp(filename); + close(fd); + } diff --git a/packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch new file mode 100644 index 0000000000..31c9da491d --- /dev/null +++ b/packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch @@ -0,0 +1,26 @@ +#DPATCHLEVEL=1 +--- +# vl.c | 5 ++++- +# 1 file changed, 4 insertions(+), 1 deletion(-) +# +Index: qemu/vl.c +=================================================================== +--- qemu.orig/vl.c 2007-12-03 15:44:35.000000000 +0000 ++++ qemu/vl.c 2007-12-03 15:51:03.000000000 +0000 +@@ -1289,12 +1289,15 @@ static void hpet_stop_timer(struct qemu_ + + static int rtc_start_timer(struct qemu_alarm_timer *t) + { ++ unsigned long current_rtc_freq = 0; + int rtc_fd; + + TFR(rtc_fd = open("/dev/rtc", O_RDONLY)); + if (rtc_fd < 0) + return -1; +- if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { ++ ioctl(rtc_fd, RTC_IRQP_READ, ¤t_rtc_freq); ++ if (current_rtc_freq != RTC_FREQ && ++ ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) { + fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n" + "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n" + "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n"); diff --git a/packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch new file mode 100644 index 0000000000..fdd922605e --- /dev/null +++ b/packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch @@ -0,0 +1,17 @@ +#DPATCHLEVEL=1 +--- +# hw/pc.c | 1 - +# 1 file changed, 1 deletion(-) +# +Index: qemu/hw/pc.c +=================================================================== +--- qemu.orig/hw/pc.c 2007-12-03 23:47:25.000000000 +0000 ++++ qemu/hw/pc.c 2007-12-03 23:47:38.000000000 +0000 +@@ -385,7 +385,6 @@ static void generate_bootsect(uint32_t g + if (bs_table[0] == NULL) { + fprintf(stderr, "A disk image must be given for 'hda' when booting " + "a Linux kernel\n"); +- exit(1); + } + + memset(bootsect, 0, sizeof(bootsect)); diff --git a/packages/qemu/qemu-0.9.1/06_exit_segfault.patch b/packages/qemu/qemu-0.9.1/06_exit_segfault.patch new file mode 100644 index 0000000000..06123d0626 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/06_exit_segfault.patch @@ -0,0 +1,45 @@ +#DPATCHLEVEL=0 +--- +# linux-user/main.c | 8 ++++---- +# 1 file changed, 4 insertions(+), 4 deletions(-) +# +Index: linux-user/main.c +=================================================================== +--- linux-user/main.c.orig 2007-12-03 23:47:25.000000000 +0000 ++++ linux-user/main.c 2007-12-03 23:47:41.000000000 +0000 +@@ -714,7 +714,7 @@ void cpu_loop (CPUSPARCState *env) + default: + printf ("Unhandled trap: 0x%x\n", trapnr); + cpu_dump_state(env, stderr, fprintf, 0); +- exit (1); ++ _exit (1); + } + process_pending_signals (env); + } +@@ -1634,7 +1634,7 @@ void cpu_loop (CPUState *env) + default: + printf ("Unhandled trap: 0x%x\n", trapnr); + cpu_dump_state(env, stderr, fprintf, 0); +- exit (1); ++ _exit (1); + } + process_pending_signals (env); + } +@@ -1954,7 +1954,7 @@ int main(int argc, char **argv) + for(item = cpu_log_items; item->mask != 0; item++) { + printf("%-10s %s\n", item->name, item->help); + } +- exit(1); ++ _exit(1); + } + cpu_set_log(mask); + } else if (!strcmp(r, "s")) { +@@ -1973,7 +1973,7 @@ int main(int argc, char **argv) + if (qemu_host_page_size == 0 || + (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) { + fprintf(stderr, "page size must be a power of two\n"); +- exit(1); ++ _exit(1); + } + } else if (!strcmp(r, "g")) { + gdbstub_port = atoi(argv[optind++]); diff --git a/packages/qemu/qemu-0.9.1/10_signal_jobs.patch b/packages/qemu/qemu-0.9.1/10_signal_jobs.patch new file mode 100644 index 0000000000..34282adc9d --- /dev/null +++ b/packages/qemu/qemu-0.9.1/10_signal_jobs.patch @@ -0,0 +1,26 @@ +#DPATCHLEVEL=0 +--- +# linux-user/signal.c | 7 ++++++- +# 1 file changed, 6 insertions(+), 1 deletion(-) +# +Index: linux-user/signal.c +=================================================================== +--- linux-user/signal.c.orig 2007-12-03 15:40:26.000000000 +0000 ++++ linux-user/signal.c 2007-12-03 15:55:49.000000000 +0000 +@@ -364,10 +364,15 @@ int queue_signal(int sig, target_siginfo + k = &sigact_table[sig - 1]; + handler = k->sa._sa_handler; + if (handler == TARGET_SIG_DFL) { ++ if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) { ++ kill(getpid(),SIGSTOP); ++ return 0; ++ } else + /* default handler : ignore some signal. The other are fatal */ + if (sig != TARGET_SIGCHLD && + sig != TARGET_SIGURG && +- sig != TARGET_SIGWINCH) { ++ sig != TARGET_SIGWINCH && ++ sig != TARGET_SIGCONT) { + force_sig(sig); + } else { + return 0; /* indicate ignored */ diff --git a/packages/qemu/qemu-0.9.1/11_signal_sigaction.patch b/packages/qemu/qemu-0.9.1/11_signal_sigaction.patch new file mode 100644 index 0000000000..33c5e8b12d --- /dev/null +++ b/packages/qemu/qemu-0.9.1/11_signal_sigaction.patch @@ -0,0 +1,21 @@ +#DPATCHLEVEL=0 +--- +# linux-user/signal.c | 5 +++++ +# 1 file changed, 5 insertions(+) +# +Index: linux-user/signal.c +=================================================================== +--- linux-user/signal.c.orig 2007-12-03 23:47:44.000000000 +0000 ++++ linux-user/signal.c 2007-12-03 23:47:46.000000000 +0000 +@@ -512,6 +512,11 @@ int do_sigaction(int sig, const struct t + + if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP) + return -EINVAL; ++ ++ /* no point doing the stuff as those are not allowed for sigaction */ ++ if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP)) ++ return -EINVAL; ++ + k = &sigact_table[sig - 1]; + #if defined(DEBUG_SIGNAL) + fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n", diff --git a/packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch b/packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch new file mode 100644 index 0000000000..6017df0f6d --- /dev/null +++ b/packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch @@ -0,0 +1,18 @@ +#DPATCHLEVEL=0 +--- +# vl.c | 2 +- +# 1 file changed, 1 insertion(+), 1 deletion(-) +# +Index: vl.c +=================================================================== +--- vl.c.orig 2007-12-03 23:47:36.000000000 +0000 ++++ vl.c 2007-12-03 23:47:48.000000000 +0000 +@@ -4023,7 +4023,7 @@ static int tap_open(char *ifname, int if + return -1; + } + memset(&ifr, 0, sizeof(ifr)); +- ifr.ifr_flags = IFF_TAP | IFF_NO_PI; ++ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE; + if (ifname[0] != '\0') + pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname); + else diff --git a/packages/qemu/qemu-0.9.1/31_syscalls.patch b/packages/qemu/qemu-0.9.1/31_syscalls.patch new file mode 100644 index 0000000000..95a7332ee8 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/31_syscalls.patch @@ -0,0 +1,48 @@ +#DPATCHLEVEL=0 +--- +# linux-user/syscall.c | 11 ++++++++--- +# 1 file changed, 8 insertions(+), 3 deletions(-) +# +Index: linux-user/syscall.c +=================================================================== +--- linux-user/syscall.c.orig 2007-12-03 19:32:56.000000000 +0000 ++++ linux-user/syscall.c 2007-12-03 19:33:41.000000000 +0000 +@@ -250,6 +250,7 @@ extern int getresuid(uid_t *, uid_t *, u + extern int setresgid(gid_t, gid_t, gid_t); + extern int getresgid(gid_t *, gid_t *, gid_t *); + extern int setgroups(int, gid_t *); ++extern int uselib(const char*); + + #define ERRNO_TABLE_SIZE 1200 + +@@ -4024,7 +4025,8 @@ abi_long do_syscall(void *cpu_env, int n + #endif + #ifdef TARGET_NR_uselib + case TARGET_NR_uselib: +- goto unimplemented; ++ ret = get_errno(uselib(path((const char*)arg1))); ++ break; + #endif + #ifdef TARGET_NR_swapon + case TARGET_NR_swapon: +@@ -5289,7 +5291,9 @@ abi_long do_syscall(void *cpu_env, int n + goto unimplemented; + #ifdef TARGET_NR_mincore + case TARGET_NR_mincore: +- goto unimplemented; ++ /*page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);*/ ++ ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); ++ break; + #endif + #ifdef TARGET_NR_madvise + case TARGET_NR_madvise: +@@ -5429,7 +5433,8 @@ abi_long do_syscall(void *cpu_env, int n + break; + #ifdef TARGET_NR_readahead + case TARGET_NR_readahead: +- goto unimplemented; ++ ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3)); ++ break; + #endif + #ifdef TARGET_NR_setxattr + case TARGET_NR_setxattr: diff --git a/packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch b/packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch new file mode 100644 index 0000000000..5e8dd75b0e --- /dev/null +++ b/packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch @@ -0,0 +1,55 @@ +#DPATCHLEVEL=0 +--- +# linux-user/syscall.c | 32 +++++++++++++++++++++++++++++--- +# 1 file changed, 29 insertions(+), 3 deletions(-) +# +Index: linux-user/syscall.c +=================================================================== +--- linux-user/syscall.c.orig 2007-12-03 15:56:24.000000000 +0000 ++++ linux-user/syscall.c 2007-12-03 15:57:36.000000000 +0000 +@@ -52,6 +52,7 @@ + //#include + #include + #include ++#include + + #define termios host_termios + #define winsize host_winsize +@@ -4739,9 +4740,34 @@ abi_long do_syscall(void *cpu_env, int n + break; + #endif + case TARGET_NR__sysctl: +- /* We don't implement this, but ENOTDIR is always a safe +- return value. */ +- ret = -TARGET_ENOTDIR; ++ { ++ struct __sysctl_args *args = (struct __sysctl_args *) arg1; ++ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i; ++ void *oldval, *newval; ++ ++ name_target = (int *) tswapl((long) args->name); ++ nlen = tswapl(args->nlen); ++ oldval = (void *) tswapl((long) args->oldval); ++ oldlenp = (int *) tswapl((long) args->oldlenp); ++ oldlen = tswapl(*oldlenp); ++ newval = (void *) tswapl((long) args->newval); ++ newlen = tswapl(args->newlen); ++ ++ name = alloca(nlen * sizeof (int)); ++ for (i = 0; i < nlen; i++) ++ name[i] = tswapl(name_target[i]); ++ ++ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) { ++ ret = get_errno( ++ sysctl(name, nlen, oldval, &oldlen, newval, newlen)); ++ if (!is_error(ret)) { ++ *oldlenp = tswapl(oldlen); ++ } ++ } else { ++ gemu_log("qemu: Unsupported sysctl name\n"); ++ ret = -ENOSYS; ++ } ++ } + break; + case TARGET_NR_sched_setparam: + { diff --git a/packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch b/packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch new file mode 100644 index 0000000000..3f733b6ab8 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch @@ -0,0 +1,22 @@ +#DPATCHLEVEL=0 +--- +# linux-user/syscall.c | 6 +----- +# 1 file changed, 1 insertion(+), 5 deletions(-) +# +Index: linux-user/syscall.c +=================================================================== +--- linux-user/syscall.c.orig 2007-12-03 15:58:11.000000000 +0000 ++++ linux-user/syscall.c 2007-12-03 15:58:46.000000000 +0000 +@@ -2750,11 +2750,7 @@ int do_fork(CPUState *env, unsigned int + if (!newsp) + newsp = env->gpr[1]; + new_env->gpr[1] = newsp; +- { +- int i; +- for (i = 7; i < 32; i++) +- new_env->gpr[i] = 0; +- } ++ new_env->gpr[3] = 0; + #elif defined(TARGET_SH4) + if (!newsp) + newsp = env->gregs[15]; diff --git a/packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch b/packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch new file mode 100644 index 0000000000..54ee3e0948 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch @@ -0,0 +1,21 @@ +--- + linux-user/syscall.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Index: linux-user/syscall.c +=================================================================== +--- linux-user/syscall.c.orig 2007-12-03 19:33:47.000000000 +0000 ++++ linux-user/syscall.c 2007-12-03 19:33:48.000000000 +0000 +@@ -5317,6 +5317,12 @@ abi_long do_syscall(void *cpu_env, int n + ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3)); + break; + #endif ++#ifdef TARGET_NR_fadvise64_64 ++ case TARGET_NR_fadvise64_64: ++ /* Just return success */ ++ ret = get_errno(0); ++ break; ++#endif + #ifdef TARGET_NR_madvise + case TARGET_NR_madvise: + /* A straight passthrough may not be safe because qemu sometimes diff --git a/packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch b/packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch new file mode 100644 index 0000000000..cea3afc7ff --- /dev/null +++ b/packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch @@ -0,0 +1,104 @@ +#DPATCHLEVEL=0 +--- +# linux-user/main.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++- +# target-arm/nwfpe/fpa11.c | 7 ++++++ +# 2 files changed, 57 insertions(+), 1 deletion(-) +# +Index: linux-user/main.c +=================================================================== +--- linux-user/main.c.orig 2007-12-03 15:59:10.000000000 +0000 ++++ linux-user/main.c 2007-12-03 16:01:27.000000000 +0000 +@@ -377,18 +377,67 @@ void cpu_loop(CPUARMState *env) + { + TaskState *ts = env->opaque; + uint32_t opcode; ++ int rc; + + /* we handle the FPU emulation here, as Linux */ + /* we get the opcode */ + /* FIXME - what to do if get_user() fails? */ + get_user_u32(opcode, env->regs[15]); + +- if (EmulateAll(opcode, &ts->fpa, env) == 0) { ++ rc = EmulateAll(opcode, &ts->fpa, env); ++ if (rc == 0) { /* illegal instruction */ + info.si_signo = SIGILL; + info.si_errno = 0; + info.si_code = TARGET_ILL_ILLOPN; + info._sifields._sigfault._addr = env->regs[15]; + queue_signal(info.si_signo, &info); ++ } else if (rc < 0) { /* FP exception */ ++ int arm_fpe=0; ++ ++ /* translate softfloat flags to FPSR flags */ ++ if (-rc & float_flag_invalid) ++ arm_fpe |= BIT_IOC; ++ if (-rc & float_flag_divbyzero) ++ arm_fpe |= BIT_DZC; ++ if (-rc & float_flag_overflow) ++ arm_fpe |= BIT_OFC; ++ if (-rc & float_flag_underflow) ++ arm_fpe |= BIT_UFC; ++ if (-rc & float_flag_inexact) ++ arm_fpe |= BIT_IXC; ++ ++ FPSR fpsr = ts->fpa.fpsr; ++ //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe); ++ ++ if (fpsr & (arm_fpe << 16)) { /* exception enabled? */ ++ info.si_signo = SIGFPE; ++ info.si_errno = 0; ++ ++ /* ordered by priority, least first */ ++ if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES; ++ if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND; ++ if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF; ++ if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV; ++ if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV; ++ ++ info._sifields._sigfault._addr = env->regs[15]; ++ queue_signal(info.si_signo, &info); ++ } else { ++ env->regs[15] += 4; ++ } ++ ++ /* accumulate unenabled exceptions */ ++ if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC)) ++ fpsr |= BIT_IXC; ++ if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC)) ++ fpsr |= BIT_UFC; ++ if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC)) ++ fpsr |= BIT_OFC; ++ if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC)) ++ fpsr |= BIT_DZC; ++ if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC)) ++ fpsr |= BIT_IOC; ++ ts->fpa.fpsr=fpsr; + } else { + /* increment PC */ + env->regs[15] += 4; +Index: target-arm/nwfpe/fpa11.c +=================================================================== +--- target-arm/nwfpe/fpa11.c.orig 2007-12-03 15:40:26.000000000 +0000 ++++ target-arm/nwfpe/fpa11.c 2007-12-03 15:59:11.000000000 +0000 +@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc + fpa11->initflag = 1; + } + ++ set_float_exception_flags(0, &fpa11->fp_status); ++ + if (TEST_OPCODE(opcode,MASK_CPRT)) + { + //fprintf(stderr,"emulating CPRT\n"); +@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc + } + + // restore_flags(flags); ++ if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status)) ++ { ++ //printf("fef 0x%x\n",float_exception_flags); ++ nRc=-get_float_exception_flags(&fpa11->fp_status); ++ } + + //printf("returning %d\n",nRc); + return(nRc); diff --git a/packages/qemu/qemu-0.9.1/52_ne2000_return.patch b/packages/qemu/qemu-0.9.1/52_ne2000_return.patch new file mode 100644 index 0000000000..e4ea33f2c6 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/52_ne2000_return.patch @@ -0,0 +1,17 @@ +--- + hw/ne2000.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: qemu/hw/ne2000.c +=================================================================== +--- qemu.orig/hw/ne2000.c 2007-12-03 19:32:52.000000000 +0000 ++++ qemu/hw/ne2000.c 2007-12-03 19:33:55.000000000 +0000 +@@ -217,7 +217,7 @@ static int ne2000_can_receive(void *opaq + NE2000State *s = opaque; + + if (s->cmd & E8390_STOP) +- return 1; ++ return 0; + return !ne2000_buffer_full(s); + } + diff --git a/packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch b/packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch new file mode 100644 index 0000000000..9b1ace81a5 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch @@ -0,0 +1,27 @@ +#DPATCHLEVEL=0 +--- +# dyngen-exec.h | 4 ++-- +# 1 file changed, 2 insertions(+), 2 deletions(-) +# +Index: dyngen-exec.h +=================================================================== +--- dyngen-exec.h.orig 2007-12-31 13:06:21.000000000 +0000 ++++ dyngen-exec.h 2007-12-31 13:08:54.000000000 +0000 +@@ -38,7 +38,7 @@ + // Linux/Sparc64 defines uint64_t + #if !(defined (__sparc_v9__) && defined(__linux__)) + /* XXX may be done for all 64 bits targets ? */ +-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) ++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__) + typedef unsigned long uint64_t; + #else + typedef unsigned long long uint64_t; +@@ -55,7 +55,7 @@ + typedef signed int int32_t; + // Linux/Sparc64 defines int64_t + #if !(defined (__sparc_v9__) && defined(__linux__)) +-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) ++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__) + typedef signed long int64_t; + #else + typedef signed long long int64_t; diff --git a/packages/qemu/qemu-0.9.1/63_sparc_build.patch b/packages/qemu/qemu-0.9.1/63_sparc_build.patch new file mode 100644 index 0000000000..37b38f641b --- /dev/null +++ b/packages/qemu/qemu-0.9.1/63_sparc_build.patch @@ -0,0 +1,18 @@ +#DPATCHLEVEL=0 +--- +# sparc.ld | 2 +- +# 1 file changed, 1 insertion(+), 1 deletion(-) +# +Index: sparc.ld +=================================================================== +--- sparc.ld.orig 2007-12-03 15:40:26.000000000 +0000 ++++ sparc.ld 2007-12-03 16:05:06.000000000 +0000 +@@ -6,7 +6,7 @@ ENTRY(_start) + SECTIONS + { + /* Read-only sections, merged into text segment: */ +- . = 0x60000000 + SIZEOF_HEADERS; ++ . = 0x60000000 + 0x400; + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } diff --git a/packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch b/packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch new file mode 100644 index 0000000000..e4858b79d7 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch @@ -0,0 +1,18 @@ +#DPATCHLEVEL=1 +--- +# cpu-all.h | 2 +- +# 1 file changed, 1 insertion(+), 1 deletion(-) +# +Index: qemu/cpu-all.h +=================================================================== +--- qemu.orig/cpu-all.h 2007-06-13 11:48:22.000000000 +0100 ++++ qemu/cpu-all.h 2007-06-13 11:51:56.000000000 +0100 +@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i + static inline void stl_le_p(void *ptr, int v) + { + #ifdef __powerpc__ +- __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr)); ++ __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory"); + #else + uint8_t *p = ptr; + p[0] = v; diff --git a/packages/qemu/qemu-0.9.1/65_kfreebsd.patch b/packages/qemu/qemu-0.9.1/65_kfreebsd.patch new file mode 100644 index 0000000000..dfece800ac --- /dev/null +++ b/packages/qemu/qemu-0.9.1/65_kfreebsd.patch @@ -0,0 +1,35 @@ +--- + configure | 6 ++++++ + vl.c | 2 ++ + 2 files changed, 8 insertions(+) + +Index: configure +=================================================================== +--- configure.orig 2007-12-03 15:40:26.000000000 +0000 ++++ configure 2007-12-03 16:05:34.000000000 +0000 +@@ -129,6 +129,12 @@ if [ "$cpu" = "i386" -o "$cpu" = "x86_64 + kqemu="yes" + fi + ;; ++GNU/kFreeBSD) ++oss="yes" ++if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then ++ kqemu="yes" ++fi ++;; + FreeBSD) + bsd="yes" + oss="yes" +Index: vl.c +=================================================================== +--- vl.c.orig 2007-12-03 16:05:32.000000000 +0000 ++++ vl.c 2007-12-03 16:05:34.000000000 +0000 +@@ -97,6 +97,8 @@ + #include + #endif + #endif ++#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__) ++#include + #else + #include + int inet_aton(const char *cp, struct in_addr *ia); diff --git a/packages/qemu/qemu-0.9.1/66_tls_ld.patch b/packages/qemu/qemu-0.9.1/66_tls_ld.patch new file mode 100644 index 0000000000..54e02eff8b --- /dev/null +++ b/packages/qemu/qemu-0.9.1/66_tls_ld.patch @@ -0,0 +1,55 @@ +--- + arm.ld | 7 +++++++ + i386.ld | 7 +++++++ + 2 files changed, 14 insertions(+) + +Index: arm.ld +=================================================================== +--- arm.ld.orig 2007-06-13 11:48:22.000000000 +0100 ++++ arm.ld 2007-06-13 11:51:56.000000000 +0100 +@@ -26,6 +26,10 @@ SECTIONS + { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } + .rela.rodata : + { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } ++ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } ++ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } ++ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } ++ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } +@@ -58,6 +62,9 @@ SECTIONS + .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } + __exidx_end = .; + .reginfo : { *(.reginfo) } ++ /* Thread Local Storage sections */ ++ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } ++ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } + /* Adjust the address for the data segment. We want to adjust up to + the same address within the page on the next page up. */ + . = ALIGN(0x100000) + (. & (0x100000 - 1)); +Index: i386.ld +=================================================================== +--- i386.ld.orig 2007-06-13 11:48:22.000000000 +0100 ++++ i386.ld 2007-06-13 11:51:56.000000000 +0100 +@@ -28,6 +28,10 @@ SECTIONS + { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } + .rela.rodata : + { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } ++ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } ++ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } ++ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } ++ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } +@@ -53,6 +57,9 @@ SECTIONS + _etext = .; + PROVIDE (etext = .); + .fini : { *(.fini) } =0x47ff041f ++ /* Thread Local Storage sections */ ++ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } ++ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } + . = ALIGN(32 / 8); + PROVIDE (__preinit_array_start = .); + .preinit_array : { *(.preinit_array) } diff --git a/packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch b/packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch new file mode 100644 index 0000000000..0d60c1c306 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch @@ -0,0 +1,18 @@ +=== modified file 'sdl.c' +--- + sdl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: sdl.c +=================================================================== +--- sdl.c.orig 2007-12-03 19:32:15.000000000 +0000 ++++ sdl.c 2007-12-03 19:34:04.000000000 +0000 +@@ -247,7 +247,7 @@ static void sdl_hide_cursor(void) + + if (kbd_mouse_is_absolute()) { + SDL_ShowCursor(1); +- SDL_SetCursor(sdl_cursor_hidden); ++ /* SDL_SetCursor(sdl_cursor_hidden); */ + } else { + SDL_ShowCursor(0); + } diff --git a/packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch b/packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch new file mode 100644 index 0000000000..3ec304a38c --- /dev/null +++ b/packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch @@ -0,0 +1,28 @@ +Index: qemu-0.9.1/configure +=================================================================== +--- qemu-0.9.1.orig/configure 2008-01-24 15:33:13.000000000 +0000 ++++ qemu-0.9.1/configure 2008-01-24 15:45:50.000000000 +0000 +@@ -209,15 +209,17 @@ + + # find source path + source_path=`dirname "$0"` ++source_path_used="no" ++workdir=`pwd` ++workdir=`readlink -f $workdir` + if [ -z "$source_path" ]; then +- source_path=`pwd` ++ source_path=$workdir + else + source_path=`cd "$source_path"; pwd` +-fi +-if test "$source_path" = `pwd` ; then +- source_path_used="no" +-else +- source_path_used="yes" ++ source_path=`readlink -f $source_path` ++ if test "$source_path" != "$workdir" ; then ++ source_path_used="yes" ++ fi + fi + + werror="no" diff --git a/packages/qemu/qemu-0.9.1/disable-error-in-configure.patch b/packages/qemu/qemu-0.9.1/disable-error-in-configure.patch new file mode 100644 index 0000000000..017f9f6355 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/disable-error-in-configure.patch @@ -0,0 +1,17 @@ +--- + configure | 2 -- + 1 file changed, 2 deletions(-) + +Index: qemu/configure +=================================================================== +--- qemu.orig/configure 2007-12-03 16:38:38.000000000 +0000 ++++ qemu/configure 2007-12-03 16:38:39.000000000 +0000 +@@ -323,8 +323,6 @@ for opt do + ;; + --disable-werror) werror="no" + ;; +- *) echo "ERROR: unknown option $opt"; show_help="yes" +- ;; + --disable-nptl) nptl="no" + ;; + esac diff --git a/packages/qemu/qemu-0.9.1/fix_segfault.patch b/packages/qemu/qemu-0.9.1/fix_segfault.patch new file mode 100644 index 0000000000..443c330650 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/fix_segfault.patch @@ -0,0 +1,37 @@ +--- + linux-user/syscall.c | 22 ---------------------- + 1 file changed, 22 deletions(-) + +Index: qemu/linux-user/syscall.c +=================================================================== +--- qemu.orig/linux-user/syscall.c 2007-12-03 23:40:11.000000000 +0000 ++++ qemu/linux-user/syscall.c 2007-12-03 23:40:21.000000000 +0000 +@@ -5695,28 +5695,6 @@ abi_long do_syscall(void *cpu_env, int n + goto unimplemented_nowarn; + #endif + +-#ifdef TARGET_NR_clock_gettime +- case TARGET_NR_clock_gettime: +- { +- struct timespec ts; +- ret = get_errno(clock_gettime(arg1, &ts)); +- if (!is_error(ret)) { +- host_to_target_timespec(arg2, &ts); +- } +- break; +- } +-#endif +-#ifdef TARGET_NR_clock_getres +- case TARGET_NR_clock_getres: +- { +- struct timespec ts; +- ret = get_errno(clock_getres(arg1, &ts)); +- if (!is_error(ret)) { +- host_to_target_timespec(arg2, &ts); +- } +- break; +- } +-#endif + + #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) + case TARGET_NR_set_tid_address: diff --git a/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch new file mode 100644 index 0000000000..ebc996e873 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch @@ -0,0 +1,219 @@ +--- + linux-user/main.c | 7 ++- + linux-user/syscall.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++----- + 2 files changed, 111 insertions(+), 10 deletions(-) + +Index: qemu/linux-user/main.c +=================================================================== +--- qemu.orig/linux-user/main.c 2007-12-03 19:34:09.000000000 +0000 ++++ qemu/linux-user/main.c 2007-12-03 23:44:45.000000000 +0000 +@@ -391,7 +391,7 @@ do_kernel_trap(CPUARMState *env) + cpu_unlock(); + break; + case 0xffff0fe0: /* __kernel_get_tls */ +- env->regs[0] = env->cp15.c13_tls; ++ env->regs[0] = env->cp15.c13_tls2; + break; + default: + return 1; +@@ -2037,6 +2037,11 @@ int main(int argc, char **argv) + int drop_ld_preload = 0, environ_count = 0; + char **target_environ, **wrk, **dst; + ++ char *assume_kernel = getenv("QEMU_ASSUME_KERNEL"); ++ ++ if (assume_kernel) ++ setenv("LD_ASSUME_KERNEL", assume_kernel, 1); ++ + if (argc <= 1) + usage(); + +Index: qemu/linux-user/syscall.c +=================================================================== +--- qemu.orig/linux-user/syscall.c 2007-12-03 19:34:09.000000000 +0000 ++++ qemu/linux-user/syscall.c 2007-12-03 23:46:54.000000000 +0000 +@@ -61,6 +61,7 @@ + #define tchars host_tchars /* same as target */ + #define ltchars host_ltchars /* same as target */ + ++#include + #include + #include + #include +@@ -2694,7 +2695,6 @@ abi_long do_arch_prctl(CPUX86State *env, + return 0; + } + #endif +- + #endif /* defined(TARGET_I386) */ + + /* this stack is the equivalent of the kernel stack associated with a +@@ -2729,16 +2729,19 @@ int do_fork(CPUState *env, unsigned int + TaskState *ts; + uint8_t *new_stack; + CPUState *new_env; +- ++#if defined(TARGET_I386) ++ uint64_t *new_gdt_table; ++#endif + #ifdef USE_NPTL + unsigned int nptl_flags; + + if (flags & CLONE_PARENT_SETTID) + *parent_tidptr = gettid(); + #endif +- + if (flags & CLONE_VM) { + ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); ++ if (!ts) ++ return -ENOMEM; + memset(ts, 0, sizeof(TaskState)); + new_stack = ts->stack; + ts->used = 1; +@@ -2750,6 +2753,29 @@ int do_fork(CPUState *env, unsigned int + #if defined(TARGET_I386) + if (!newsp) + newsp = env->regs[R_ESP]; ++ new_gdt_table = malloc(9 * 8); ++ if (!new_gdt_table) { ++ free(new_env); ++ return -ENOMEM; ++ } ++ /* Copy main GDT table from parent, but clear TLS entries */ ++ memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8); ++ memset(&new_gdt_table[6], 0, 3 * 8); ++ new_env->gdt.base = h2g(new_gdt_table); ++ if (flags & 0x00080000 /* CLONE_SETTLS */) { ++ ret = do_set_thread_area(new_env, new_env->regs[R_ESI]); ++ if (ret) { ++ free(new_gdt_table); ++ free(new_env); ++ return ret; ++ } ++ } ++ cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]); ++ cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]); ++ cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]); ++ cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]); ++ cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]); ++ cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]); + new_env->regs[R_ESP] = newsp; + new_env->regs[R_EAX] = 0; + #elif defined(TARGET_ARM) +@@ -3121,6 +3147,68 @@ static inline abi_long host_to_target_ti + unlock_user_struct(target_ts, target_addr, 1); + } + ++static long do_futex(target_ulong uaddr, int op, uint32_t val, ++ target_ulong utime, target_ulong uaddr2, ++ uint32_t val3) ++{ ++ struct timespec host_utime; ++ unsigned long val2 = utime; ++ ++ if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) { ++ target_to_host_timespec(&host_utime, utime); ++ val2 = (unsigned long)&host_utime; ++ } ++ ++#ifdef BSWAP_NEEDED ++ switch(op) { ++ case FUTEX_CMP_REQUEUE: ++ val3 = tswap32(val3); ++ case FUTEX_REQUEUE: ++ val2 = tswap32(val2); ++ case FUTEX_WAIT: ++ case FUTEX_WAKE: ++ val = tswap32(val); ++ case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */ ++ case FUTEX_UNLOCK_PI: ++ break; ++ default: ++ gemu_log("qemu: Unsupported futex op %d\n", op); ++ return -ENOSYS; ++ } ++#if 0 /* No, it's worse than this */ ++ if (op == FUTEX_WAKE_OP) { ++ /* Need to munge the secondary operation (val3) */ ++ val3 = tswap32(val3); ++ int op2 = (val3 >> 28) & 7; ++ int cmp = (val3 >> 24) & 15; ++ int oparg = (val3 << 8) >> 20; ++ int cmparg = (val3 << 20) >> 20; ++ int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28); ++ ++ if (shift) ++ oparg = (oparg & 7) + 24 - (oparg & 24); ++ else oparg = ++ if (op2 == FUTEX_OP_ADD) { ++ gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n"); ++ return -ENOSYS; ++ } ++ if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE || ++ cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) { ++ gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg); ++ return -ENOSYS; ++ } ++ val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg; ++ } ++#endif ++#endif ++ return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3); ++} ++ ++int do_set_tid_address(target_ulong tidptr) ++{ ++ return syscall(__NR_set_tid_address, g2h(tidptr)); ++} ++ + /* do_syscall() should always have a single exit point at the end so + that actions, such as logging of syscall results, can be performed. + All errnos that do_syscall() returns must be -TARGET_. */ +@@ -3145,7 +3233,7 @@ abi_long do_syscall(void *cpu_env, int n + _mcleanup(); + #endif + gdb_exit(cpu_env, arg1); +- /* XXX: should free thread stack and CPU env */ ++ /* XXX: should free thread stack, GDT and CPU env */ + _exit(arg1); + ret = 0; /* avoid warning */ + break; +@@ -5569,6 +5657,9 @@ abi_long do_syscall(void *cpu_env, int n + #elif defined(TARGET_I386) && defined(TARGET_ABI32) + ret = do_set_thread_area(cpu_env, arg1); + break; ++#elif TARGET_i386 ++ ret = get_errno(do_set_thread_area(cpu_env, arg1)); ++ break; + #else + goto unimplemented_nowarn; + #endif +@@ -5586,6 +5677,16 @@ abi_long do_syscall(void *cpu_env, int n + goto unimplemented_nowarn; + #endif + ++#ifdef TARGET_NR_futex ++ case TARGET_NR_futex: ++ ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6)); ++ break; ++#endif ++#ifdef TARGET_NR_set_robust_list ++ case TARGET_NR_set_robust_list: ++ goto unimplemented_nowarn; ++#endif ++ + #ifdef TARGET_NR_clock_gettime + case TARGET_NR_clock_gettime: + { +@@ -5627,11 +5728,6 @@ abi_long do_syscall(void *cpu_env, int n + break; + #endif + +-#ifdef TARGET_NR_set_robust_list +- case TARGET_NR_set_robust_list: +- goto unimplemented_nowarn; +-#endif +- + #if defined(TARGET_NR_utimensat) && defined(__NR_utimensat) + case TARGET_NR_utimensat: + { diff --git a/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch new file mode 100644 index 0000000000..10e3cc04a5 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch @@ -0,0 +1,929 @@ +These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single +ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1 +immediately dies saying: + Error: f0005 + qemu: uncaught target signal 6 (Aborted) - exiting +while qemu-0.8.2 dies saying: + qemu: Unsupported syscall: 983045 + cannot set up thread-local storage: unknown error + +This file is a rediffing of the patches visible at +https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006 +which "patch" fails to apply automatically. +See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html + + Martin Guy, 27 Sept 2006 + +--- + configure | 25 ++++++ + exec-all.h | 165 ------------------------------------------ + linux-user/arm/syscall.h | 4 - + linux-user/main.c | 94 +++++++++++++++++++++--- + linux-user/qemu.h | 3 + linux-user/syscall.c | 91 ++++++++++++++++++++++- + qemu_spinlock.h | 181 +++++++++++++++++++++++++++++++++++++++++++++++ + target-arm/cpu.h | 10 ++ + target-arm/op.c | 6 + + target-arm/translate.c | 9 ++ + 10 files changed, 405 insertions(+), 183 deletions(-) + +--- qemu.orig/configure ++++ qemu/configure +@@ -103,10 +103,11 @@ check_gcc="yes" + softmmu="yes" + linux_user="no" + darwin_user="no" + build_docs="no" + uname_release="" ++nptl="yes" + + # OS specific + targetos=`uname -s` + case $targetos in + CYGWIN*) +@@ -322,10 +323,12 @@ for opt do + ;; + --disable-werror) werror="no" + ;; + *) echo "ERROR: unknown option $opt"; show_help="yes" + ;; ++ --disable-nptl) nptl="no" ++ ;; + esac + done + + if [ "$bsd" = "yes" -o "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then + AIOLIBS= +@@ -417,10 +420,11 @@ echo " --enable-system enable + echo " --disable-system disable all system emulation targets" + echo " --enable-linux-user enable all linux usermode emulation targets" + echo " --disable-linux-user disable all linux usermode emulation targets" + echo " --enable-darwin-user enable all darwin usermode emulation targets" + echo " --disable-darwin-user disable all darwin usermode emulation targets" ++echo " --disable-nptl disable usermode NPTL guest support" + echo " --fmod-lib path to FMOD library" + echo " --fmod-inc path to FMOD includes" + echo " --enable-uname-release=R Return R for uname -r in usermode emulation" + echo " --sparc_cpu=V Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9" + echo "" +@@ -583,10 +587,27 @@ fi + cat > $TMPC < $TMPC < ++void foo() ++{ ++#ifndef CLONE_SETTLS ++#error bork ++#endif ++} ++EOF ++ ++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then ++ : ++else ++ nptl="no" ++fi ++ + ########################################## + # SDL probe + + sdl_too_old=no + +@@ -747,10 +768,11 @@ if test -n "$sparc_cpu"; then + fi + echo "kqemu support $kqemu" + echo "Documentation $build_docs" + [ ! -z "$uname_release" ] && \ + echo "uname -r $uname_release" ++echo "NPTL support $nptl" + + if test $sdl_too_old = "yes"; then + echo "-> Your SDL version is too old - please upgrade to have SDL support" + fi + if [ -s /tmp/qemu-$$-sdl-config.log ]; then +@@ -1063,10 +1085,13 @@ if test "$target_cpu" = "i386" ; then + fi + elif test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then + echo "TARGET_ARCH=arm" >> $config_mak + echo "#define TARGET_ARCH \"arm\"" >> $config_h + echo "#define TARGET_ARM 1" >> $config_h ++ if test "$nptl" = "yes" ; then ++ echo "#define USE_NPTL 1" >> $config_h ++ fi + bflt="yes" + elif test "$target_cpu" = "sparc" ; then + echo "TARGET_ARCH=sparc" >> $config_mak + echo "#define TARGET_ARCH \"sparc\"" >> $config_h + echo "#define TARGET_SPARC 1" >> $config_h +--- qemu.orig/exec-all.h ++++ qemu/exec-all.h +@@ -338,174 +338,11 @@ dummy_label ## n: ;\ + + extern CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4]; + extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; + extern void *io_mem_opaque[IO_MEM_NB_ENTRIES]; + +-#if defined(__powerpc__) +-static inline int testandset (int *p) +-{ +- int ret; +- __asm__ __volatile__ ( +- "0: lwarx %0,0,%1\n" +- " xor. %0,%3,%0\n" +- " bne 1f\n" +- " stwcx. %2,0,%1\n" +- " bne- 0b\n" +- "1: " +- : "=&r" (ret) +- : "r" (p), "r" (1), "r" (0) +- : "cr0", "memory"); +- return ret; +-} +-#elif defined(__i386__) +-static inline int testandset (int *p) +-{ +- long int readval = 0; +- +- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" +- : "+m" (*p), "+a" (readval) +- : "r" (1) +- : "cc"); +- return readval; +-} +-#elif defined(__x86_64__) +-static inline int testandset (int *p) +-{ +- long int readval = 0; +- +- __asm__ __volatile__ ("lock; cmpxchgl %2, %0" +- : "+m" (*p), "+a" (readval) +- : "r" (1) +- : "cc"); +- return readval; +-} +-#elif defined(__s390__) +-static inline int testandset (int *p) +-{ +- int ret; +- +- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" +- " jl 0b" +- : "=&d" (ret) +- : "r" (1), "a" (p), "0" (*p) +- : "cc", "memory" ); +- return ret; +-} +-#elif defined(__alpha__) +-static inline int testandset (int *p) +-{ +- int ret; +- unsigned long one; +- +- __asm__ __volatile__ ("0: mov 1,%2\n" +- " ldl_l %0,%1\n" +- " stl_c %2,%1\n" +- " beq %2,1f\n" +- ".subsection 2\n" +- "1: br 0b\n" +- ".previous" +- : "=r" (ret), "=m" (*p), "=r" (one) +- : "m" (*p)); +- return ret; +-} +-#elif defined(__sparc__) +-static inline int testandset (int *p) +-{ +- int ret; +- +- __asm__ __volatile__("ldstub [%1], %0" +- : "=r" (ret) +- : "r" (p) +- : "memory"); +- +- return (ret ? 1 : 0); +-} +-#elif defined(__arm__) +-static inline int testandset (int *spinlock) +-{ +- register unsigned int ret; +- __asm__ __volatile__("swp %0, %1, [%2]" +- : "=r"(ret) +- : "0"(1), "r"(spinlock)); +- +- return ret; +-} +-#elif defined(__mc68000) +-static inline int testandset (int *p) +-{ +- char ret; +- __asm__ __volatile__("tas %1; sne %0" +- : "=r" (ret) +- : "m" (p) +- : "cc","memory"); +- return ret; +-} +-#elif defined(__ia64) +- +-#include +- +-static inline int testandset (int *p) +-{ +- return __sync_lock_test_and_set (p, 1); +-} +-#elif defined(__mips__) +-static inline int testandset (int *p) +-{ +- int ret; +- +- __asm__ __volatile__ ( +- " .set push \n" +- " .set noat \n" +- " .set mips2 \n" +- "1: li $1, 1 \n" +- " ll %0, %1 \n" +- " sc $1, %1 \n" +- " beqz $1, 1b \n" +- " .set pop " +- : "=r" (ret), "+R" (*p) +- : +- : "memory"); +- +- return ret; +-} +-#else +-#error unimplemented CPU support +-#endif +- +-typedef int spinlock_t; +- +-#define SPIN_LOCK_UNLOCKED 0 +- +-#if defined(CONFIG_USER_ONLY) +-static inline void spin_lock(spinlock_t *lock) +-{ +- while (testandset(lock)); +-} +- +-static inline void spin_unlock(spinlock_t *lock) +-{ +- *lock = 0; +-} +- +-static inline int spin_trylock(spinlock_t *lock) +-{ +- return !testandset(lock); +-} +-#else +-static inline void spin_lock(spinlock_t *lock) +-{ +-} +- +-static inline void spin_unlock(spinlock_t *lock) +-{ +-} +- +-static inline int spin_trylock(spinlock_t *lock) +-{ +- return 1; +-} +-#endif ++#include "qemu_spinlock.h" + + extern spinlock_t tb_lock; + + extern int tb_invalidated_flag; + +--- qemu.orig/linux-user/arm/syscall.h ++++ qemu/linux-user/arm/syscall.h +@@ -26,11 +26,13 @@ struct target_pt_regs { + #define ARM_ORIG_r0 uregs[17] + + #define ARM_SYSCALL_BASE 0x900000 + #define ARM_THUMB_SYSCALL 0 + +-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2) ++#define ARM_NR_BASE 0xf0000 ++#define ARM_NR_cacheflush (ARM_NR_BASE + 2) ++#define ARM_NR_set_tls (ARM_NR_BASE + 5) + + #define ARM_NR_semihosting 0x123456 + #define ARM_NR_thumb_semihosting 0xAB + + #if defined(TARGET_WORDS_BIGENDIAN) +--- qemu.orig/linux-user/main.c ++++ qemu/linux-user/main.c +@@ -361,10 +361,54 @@ static void arm_cache_flush(abi_ulong st + break; + addr = last1 + 1; + } + } + ++/* Handle a jump to the kernel code page. */ ++static int ++do_kernel_trap(CPUARMState *env) ++{ ++ uint32_t addr; ++ uint32_t *ptr; ++ uint32_t cpsr; ++ ++ switch (env->regs[15]) { ++ case 0xffff0fc0: /* __kernel_cmpxchg */ ++ /* XXX: This only works between threads, not between processes. ++ Use native atomic operations. */ ++ /* ??? This probably breaks horribly if the access segfaults. */ ++ cpu_lock(); ++ ptr = (uint32_t *)env->regs[2]; ++ cpsr = cpsr_read(env); ++ if (*ptr == env->regs[0]) { ++ *ptr = env->regs[1]; ++ env->regs[0] = 0; ++ cpsr |= CPSR_C; ++ } else { ++ env->regs[0] = -1; ++ cpsr &= ~CPSR_C; ++ } ++ cpsr_write(env, cpsr, CPSR_C); ++ cpu_unlock(); ++ break; ++ case 0xffff0fe0: /* __kernel_get_tls */ ++ env->regs[0] = env->cp15.c13_tls; ++ break; ++ default: ++ return 1; ++ } ++ /* Jump back to the caller. */ ++ addr = env->regs[14]; ++ if (addr & 1) { ++ env->thumb = 1; ++ addr &= ~1; ++ } ++ env->regs[15] = addr; ++ ++ return 0; ++} ++ + void cpu_loop(CPUARMState *env) + { + int trapnr; + unsigned int n, insn; + target_siginfo_t info; +@@ -471,32 +515,50 @@ void cpu_loop(CPUARMState *env) + get_user_u32(insn, env->regs[15] - 4); + n = insn & 0xffffff; + } + } + +- if (n == ARM_NR_cacheflush) { +- arm_cache_flush(env->regs[0], env->regs[1]); +- } else if (n == ARM_NR_semihosting +- || n == ARM_NR_thumb_semihosting) { ++ if (n == ARM_NR_semihosting ++ || n == ARM_NR_thumb_semihosting) { + env->regs[0] = do_arm_semihosting (env); + } else if (n == 0 || n >= ARM_SYSCALL_BASE + || (env->thumb && n == ARM_THUMB_SYSCALL)) { + /* linux syscall */ + if (env->thumb || n == 0) { + n = env->regs[7]; + } else { + n -= ARM_SYSCALL_BASE; + env->eabi = 0; + } +- env->regs[0] = do_syscall(env, +- n, +- env->regs[0], +- env->regs[1], +- env->regs[2], +- env->regs[3], +- env->regs[4], +- env->regs[5]); ++ if ( n > ARM_NR_BASE) { ++ switch (n) ++ { ++ case ARM_NR_cacheflush: ++ arm_cache_flush(env->regs[0], env->regs[1]); ++ break; ++#ifdef USE_NPTL ++ case ARM_NR_set_tls: ++ cpu_set_tls(env, env->regs[0]); ++ env->regs[0] = 0; ++ break; ++#endif ++ default: ++ printf ("Error: Bad syscall: %x\n", n); ++ goto error; ++ } ++ } ++ else ++ { ++ env->regs[0] = do_syscall(env, ++ n, ++ env->regs[0], ++ env->regs[1], ++ env->regs[2], ++ env->regs[3], ++ env->regs[4], ++ env->regs[5]); ++ } + } else { + goto error; + } + } + break; +@@ -531,10 +593,14 @@ void cpu_loop(CPUARMState *env) + info.si_code = TARGET_TRAP_BRKPT; + queue_signal(info.si_signo, &info); + } + } + break; ++ case EXCP_KERNEL_TRAP: ++ if (do_kernel_trap(env)) ++ goto error; ++ break; + default: + error: + fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", + trapnr); + cpu_dump_state(env, stderr, fprintf, 0); +@@ -2378,10 +2444,14 @@ int main(int argc, char **argv) + #if defined(TARGET_ARM) || defined(TARGET_M68K) + ts->stack_base = info->start_stack; + ts->heap_base = info->brk; + /* This will be filled in on the first SYS_HEAPINFO call. */ + ts->heap_limit = 0; ++ /* Register the magic kernel code page. The cpu will generate a ++ special exception when it tries to execute code here. We can't ++ put real code here because it may be in use by the host kernel. */ ++ page_set_flags(0xffff0000, 0xffff0fff, 0); + #endif + + if (gdbstub_port) { + gdbserver_start (gdbstub_port); + gdb_handlesig(env, 0); +--- qemu.orig/linux-user/qemu.h ++++ qemu/linux-user/qemu.h +@@ -100,10 +100,13 @@ typedef struct TaskState { + /* Extra fields for semihosted binaries. */ + uint32_t stack_base; + uint32_t heap_base; + uint32_t heap_limit; + #endif ++#ifdef USE_NPTL ++ uint32_t *child_tidptr; ++#endif + int used; /* non zero if used */ + struct image_info *info; + uint8_t stack[0]; + } __attribute__((aligned(16))) TaskState; + +--- qemu.orig/linux-user/syscall.c ++++ qemu/linux-user/syscall.c +@@ -69,13 +69,22 @@ + #include + #include + #include + + #include "qemu.h" ++#include "qemu_spinlock.h" + + //#define DEBUG + ++#ifdef USE_NPTL ++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \ ++ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID) ++#else ++/* XXX: Hardcode the above values. */ ++#define CLONE_NPTL_FLAGS2 0 ++#endif ++ + #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \ + || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS) + /* 16 bit uid wrappers emulation */ + #define USE_UID16 + #endif +@@ -2690,27 +2699,46 @@ abi_long do_arch_prctl(CPUX86State *env, + + /* this stack is the equivalent of the kernel stack associated with a + thread/process */ + #define NEW_STACK_SIZE 8192 + ++#ifdef USE_NPTL ++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED; ++#endif ++ + static int clone_func(void *arg) + { + CPUState *env = arg; ++#ifdef HAVE_NPTL ++ /* Wait until the parent has finshed initializing the tls state. */ ++ while (!spin_trylock(&nptl_lock)) ++ usleep(1); ++ spin_unlock(&nptl_lock); ++#endif + cpu_loop(env); + /* never exits */ + return 0; + } + + /* do_fork() Must return host values and target errnos (unlike most + do_*() functions). */ +-int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp) ++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp, ++ uint32_t *parent_tidptr, void *newtls, ++ uint32_t *child_tidptr) + { + int ret; + TaskState *ts; + uint8_t *new_stack; + CPUState *new_env; + ++#ifdef USE_NPTL ++ unsigned int nptl_flags; ++ ++ if (flags & CLONE_PARENT_SETTID) ++ *parent_tidptr = gettid(); ++#endif ++ + if (flags & CLONE_VM) { + ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE); + memset(ts, 0, sizeof(TaskState)); + new_stack = ts->stack; + ts->used = 1; +@@ -2772,20 +2800,71 @@ int do_fork(CPUState *env, unsigned int + new_env->regs[14] = newsp; + #else + #error unsupported target CPU + #endif + new_env->opaque = ts; ++#ifdef USE_NPTL ++ nptl_flags = flags; ++ flags &= ~CLONE_NPTL_FLAGS2; ++ ++ if (nptl_flags & CLONE_CHILD_CLEARTID) { ++ ts->child_tidptr = child_tidptr; ++ } ++ ++ if (nptl_flags & CLONE_SETTLS) ++ cpu_set_tls (new_env, newtls); ++ ++ /* Grab the global cpu lock so that the thread setup appears ++ atomic. */ ++ if (nptl_flags & CLONE_CHILD_SETTID) ++ spin_lock(&nptl_lock); ++ ++#else ++ if (flags & CLONE_NPTL_FLAGS2) ++ return -EINVAL; ++#endif ++ ++ if (CLONE_VFORK & flags) ++ flags ^= CLONE_VM; + #ifdef __ia64__ + ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); + #else + ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); + #endif ++#ifdef USE_NPTL ++ if (ret != -1) { ++ if (nptl_flags & CLONE_CHILD_SETTID) ++ *child_tidptr = ret; ++ } ++ ++ /* Allow the child to continue. */ ++ if (nptl_flags & CLONE_CHILD_SETTID) ++ spin_unlock(&nptl_lock); ++#endif + } else { + /* if no CLONE_VM, we consider it is a fork */ +- if ((flags & ~CSIGNAL) != 0) ++ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0) + return -EINVAL; + ret = fork(); ++#ifdef USE_NPTL ++ /* There is a race condition here. The parent process could ++ theoretically read the TID in the child process before the child ++ tid is set. This would require using either ptrace ++ (not implemented) or having *_tidptr to point at a shared memory ++ mapping. We can't repeat the spinlock hack used above because ++ the child process gets its own copy of the lock. */ ++ if (ret == 0) { ++ /* Child Process. */ ++ if (flags & CLONE_CHILD_SETTID) ++ *child_tidptr = gettid(); ++ ts = (TaskState *)env->opaque; ++ if (flags & CLONE_CHILD_CLEARTID) ++ ts->child_tidptr = child_tidptr; ++ if (flags & CLONE_SETTLS) ++ cpu_set_tls (env, newtls); ++ } ++#endif + } + return ret; + } + + static abi_long do_fcntl(int fd, int cmd, abi_ulong arg) +@@ -3106,11 +3185,11 @@ abi_long do_syscall(void *cpu_env, int n + break; + case TARGET_NR_brk: + ret = do_brk(arg1); + break; + case TARGET_NR_fork: +- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0)); ++ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL)); + break; + #ifdef TARGET_NR_waitpid + case TARGET_NR_waitpid: + { + int status; +@@ -4463,11 +4542,12 @@ abi_long do_syscall(void *cpu_env, int n + #endif + case TARGET_NR_fsync: + ret = get_errno(fsync(arg1)); + break; + case TARGET_NR_clone: +- ret = get_errno(do_fork(cpu_env, arg1, arg2)); ++ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3, ++ (void *)arg4, (uint32_t *)arg5)); + break; + #ifdef __NR_exit_group + /* new thread calls */ + case TARGET_NR_exit_group: + gdb_exit(cpu_env, arg1); +@@ -4908,11 +4988,12 @@ abi_long do_syscall(void *cpu_env, int n + case TARGET_NR_putpmsg: + goto unimplemented; + #endif + #ifdef TARGET_NR_vfork + case TARGET_NR_vfork: +- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0)); ++ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0, ++ NULL, NULL, NULL)); + break; + #endif + #ifdef TARGET_NR_ugetrlimit + case TARGET_NR_ugetrlimit: + { +--- /dev/null ++++ qemu/qemu_spinlock.h +@@ -0,0 +1,181 @@ ++/* ++ * Atomic operation helper include ++ * ++ * Copyright (c) 2005 Fabrice Bellard ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++#ifndef QEMU_SPINLOCK_H ++#define QEMU_SPINLOCK_H ++ ++#ifdef __powerpc__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ __asm__ __volatile__ ( ++ "0: lwarx %0,0,%1\n" ++ " xor. %0,%3,%0\n" ++ " bne 1f\n" ++ " stwcx. %2,0,%1\n" ++ " bne- 0b\n" ++ "1: " ++ : "=&r" (ret) ++ : "r" (p), "r" (1), "r" (0) ++ : "cr0", "memory"); ++ return ret; ++} ++#endif ++ ++#ifdef __i386__ ++static inline int testandset (int *p) ++{ ++ long int readval = 0; ++ ++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" ++ : "+m" (*p), "+a" (readval) ++ : "r" (1) ++ : "cc"); ++ return readval; ++} ++#endif ++ ++#ifdef __x86_64__ ++static inline int testandset (int *p) ++{ ++ long int readval = 0; ++ ++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0" ++ : "+m" (*p), "+a" (readval) ++ : "r" (1) ++ : "cc"); ++ return readval; ++} ++#endif ++ ++#ifdef __s390__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ ++ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n" ++ " jl 0b" ++ : "=&d" (ret) ++ : "r" (1), "a" (p), "0" (*p) ++ : "cc", "memory" ); ++ return ret; ++} ++#endif ++ ++#ifdef __alpha__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ unsigned long one; ++ ++ __asm__ __volatile__ ("0: mov 1,%2\n" ++ " ldl_l %0,%1\n" ++ " stl_c %2,%1\n" ++ " beq %2,1f\n" ++ ".subsection 2\n" ++ "1: br 0b\n" ++ ".previous" ++ : "=r" (ret), "=m" (*p), "=r" (one) ++ : "m" (*p)); ++ return ret; ++} ++#endif ++ ++#ifdef __sparc__ ++static inline int testandset (int *p) ++{ ++ int ret; ++ ++ __asm__ __volatile__("ldstub [%1], %0" ++ : "=r" (ret) ++ : "r" (p) ++ : "memory"); ++ ++ return (ret ? 1 : 0); ++} ++#endif ++ ++#ifdef __arm__ ++static inline int testandset (int *spinlock) ++{ ++ register unsigned int ret; ++ __asm__ __volatile__("swp %0, %1, [%2]" ++ : "=r"(ret) ++ : "0"(1), "r"(spinlock)); ++ ++ return ret; ++} ++#endif ++ ++#ifdef __mc68000 ++static inline int testandset (int *p) ++{ ++ char ret; ++ __asm__ __volatile__("tas %1; sne %0" ++ : "=r" (ret) ++ : "m" (p) ++ : "cc","memory"); ++ return ret; ++} ++#endif ++ ++#ifdef __ia64 ++#include ++ ++static inline int testandset (int *p) ++{ ++ return __sync_lock_test_and_set (p, 1); ++} ++#endif ++ ++typedef int spinlock_t; ++ ++#define SPIN_LOCK_UNLOCKED 0 ++ ++#if defined(CONFIG_USER_ONLY) ++static inline void spin_lock(spinlock_t *lock) ++{ ++ while (testandset(lock)); ++} ++ ++static inline void spin_unlock(spinlock_t *lock) ++{ ++ *lock = 0; ++} ++ ++static inline int spin_trylock(spinlock_t *lock) ++{ ++ return !testandset(lock); ++} ++#else ++static inline void spin_lock(spinlock_t *lock) ++{ ++} ++ ++static inline void spin_unlock(spinlock_t *lock) ++{ ++} ++ ++static inline int spin_trylock(spinlock_t *lock) ++{ ++ return 1; ++} ++#endif ++ ++#endif +--- qemu.orig/target-arm/cpu.h ++++ qemu/target-arm/cpu.h +@@ -36,10 +36,11 @@ + #define EXCP_DATA_ABORT 4 + #define EXCP_IRQ 5 + #define EXCP_FIQ 6 + #define EXCP_BKPT 7 + #define EXCP_EXCEPTION_EXIT 8 /* Return from v7M exception. */ ++#define EXCP_KERNEL_TRAP 9 /* Jumped to kernel code page. */ + + #define ARMV7M_EXCP_RESET 1 + #define ARMV7M_EXCP_NMI 2 + #define ARMV7M_EXCP_HARD 3 + #define ARMV7M_EXCP_MEM 4 +@@ -220,10 +221,19 @@ int cpu_arm_signal_handler(int host_sign + void *puc); + + void cpu_lock(void); + void cpu_unlock(void); + ++void cpu_lock(void); ++void cpu_unlock(void); ++#if defined(USE_NPTL) ++static inline void cpu_set_tls(CPUARMState *env, void *newtls) ++{ ++ env->cp15.c13_tls2 = (uint32_t)(long)newtls; ++} ++#endif ++ + #define CPSR_M (0x1f) + #define CPSR_T (1 << 5) + #define CPSR_F (1 << 6) + #define CPSR_I (1 << 7) + #define CPSR_A (1 << 8) +--- qemu.orig/target-arm/op.c ++++ qemu/target-arm/op.c +@@ -1007,10 +1007,16 @@ void OPPROTO op_exception_exit(void) + { + env->exception_index = EXCP_EXCEPTION_EXIT; + cpu_loop_exit(); + } + ++void OPPROTO op_kernel_trap(void) ++{ ++ env->exception_index = EXCP_KERNEL_TRAP; ++ cpu_loop_exit(); ++} ++ + /* VFP support. We follow the convention used for VFP instrunctions: + Single precition routines have a "s" suffix, double precision a + "d" suffix. */ + + #define VFP_OP(name, p) void OPPROTO op_vfp_##name##p(void) +--- qemu.orig/target-arm/translate.c ++++ qemu/target-arm/translate.c +@@ -7518,11 +7518,18 @@ static inline int gen_intermediate_code_ + /* We always get here via a jump, so know we are not in a + conditional execution block. */ + gen_op_exception_exit(); + } + #endif +- ++#ifdef CONFIG_USER_ONLY ++ /* Intercept jump to the magic kernel page. */ ++ if (dc->pc > 0xffff0000) { ++ gen_op_kernel_trap(); ++ dc->is_jmp = DISAS_UPDATE; ++ break; ++ } ++#endif + if (env->nb_breakpoints > 0) { + for(j = 0; j < env->nb_breakpoints; j++) { + if (env->breakpoints[j] == dc->pc) { + gen_set_condexec(dc); + gen_op_movl_T0_im((long)dc->pc); diff --git a/packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch new file mode 100644 index 0000000000..c7f36d8110 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch @@ -0,0 +1,37 @@ +--- + linux-user/mmap.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +Index: qemu/linux-user/mmap.c +=================================================================== +--- qemu.orig/linux-user/mmap.c 2007-12-03 15:40:25.000000000 +0000 ++++ qemu/linux-user/mmap.c 2007-12-03 16:37:21.000000000 +0000 +@@ -29,6 +29,10 @@ + + //#define DEBUG_MMAP + ++#ifndef MAP_32BIT ++#define MAP_32BIT 0 ++#endif ++ + /* NOTE: all the constants are the HOST ones, but addresses are target. */ + int target_mprotect(abi_ulong start, abi_ulong len, int prot) + { +@@ -251,7 +255,7 @@ abi_long target_mmap(abi_ulong start, ab + especially important if qemu_host_page_size > + qemu_real_host_page_size */ + p = mmap(g2h(mmap_start), +- host_len, prot, flags | MAP_FIXED, fd, host_offset); ++ host_len, prot, flags | MAP_FIXED | MAP_32BIT, fd, host_offset); + if (p == MAP_FAILED) + return -1; + /* update start so that it points to the file position at 'offset' */ +@@ -406,7 +410,7 @@ abi_long target_mremap(abi_ulong old_add + unsigned long host_addr; + + /* XXX: use 5 args syscall */ +- host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags); ++ host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags | MAP_32BIT); + if (host_addr == -1) + return -1; + new_addr = h2g(host_addr); diff --git a/packages/qemu/qemu-0.9.1/series b/packages/qemu/qemu-0.9.1/series new file mode 100644 index 0000000000..e6ffdcc6bd --- /dev/null +++ b/packages/qemu/qemu-0.9.1/series @@ -0,0 +1,25 @@ +02_snapshot_use_tmpdir.patch -p0 +04_do_not_print_rtc_freq_if_ok.patch -p1 +05_non-fatal_if_linux_hd_missing.patch -p1 +06_exit_segfault.patch -p0 +10_signal_jobs.patch -p0 +11_signal_sigaction.patch -p0 +22_net_tuntap_stall.patch -p0 +31_syscalls.patch -p0 +32_syscall_sysctl.patch -p0 +33_syscall_ppc_clone.patch -p0 +39_syscall_fadvise64.patch -p0 +41_arm_fpa_sigfpe.patch -p0 +52_ne2000_return.patch -p1 +61_safe_64bit_int.patch -p0 +63_sparc_build.patch -p0 +64_ppc_asm_constraints.patch -p1 +65_kfreebsd.patch -p0 +66_tls_ld.patch -p0 +91-oh-sdl-cursor.patch -p0 +qemu-0.9.0-nptl.patch -p1 +qemu-0.9.0-nptl-update.patch -p1 +qemu-amd64-32b-mapping-0.9.0.patch -p1 +workaround_bad_futex_headers.patch -p1 +fix_segfault.patch -p1 +disable-error-in-configure.patch -p1 diff --git a/packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch b/packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch new file mode 100644 index 0000000000..cc122ebdba --- /dev/null +++ b/packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch @@ -0,0 +1,25 @@ +--- + linux-user/syscall.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +Index: qemu/linux-user/syscall.c +=================================================================== +--- qemu.orig/linux-user/syscall.c 2007-08-09 20:28:06.000000000 +0100 ++++ qemu/linux-user/syscall.c 2007-08-09 20:28:41.000000000 +0100 +@@ -61,7 +61,15 @@ + #define tchars host_tchars /* same as target */ + #define ltchars host_ltchars /* same as target */ + +-#include ++#define FUTEX_WAIT 0 ++#define FUTEX_WAKE 1 ++#define FUTEX_FD 2 ++#define FUTEX_REQUEUE 3 ++#define FUTEX_CMP_REQUEUE 4 ++#define FUTEX_WAKE_OP 5 ++#define FUTEX_LOCK_PI 6 ++#define FUTEX_UNLOCK_PI 7 ++ + #include + #include + #include diff --git a/packages/qemu/qemu-native_0.9.0+cvs.bb b/packages/qemu/qemu-native_0.9.0+cvs.bb deleted file mode 100644 index 65a7908a5c..0000000000 --- a/packages/qemu/qemu-native_0.9.0+cvs.bb +++ /dev/null @@ -1,3 +0,0 @@ -require qemu_0.9.0+cvs.bb -inherit native -require qemu-native.inc diff --git a/packages/qemu/qemu-native_20071121.bb b/packages/qemu/qemu-native_20071121.bb deleted file mode 100644 index a813528d87..0000000000 --- a/packages/qemu/qemu-native_20071121.bb +++ /dev/null @@ -1,8 +0,0 @@ -SRCDATE_qemu-native = "20071121" -require qemu_${PV}.bb -inherit native -PR = "r1" -DEPENDS = "zlib-native" -prefix = "${STAGING_DIR_NATIVE}/${layout_prefix}" - -require qemu-gcc3-check.inc diff --git a/packages/qemu/qemu_0.9.0+cvs.bb b/packages/qemu/qemu_0.9.0+cvs.bb deleted file mode 100644 index 8a89b805a2..0000000000 --- a/packages/qemu/qemu_0.9.0+cvs.bb +++ /dev/null @@ -1,22 +0,0 @@ -DESCRIPTION = "Qemu is an open source processor emulator." -HOMEPAGE = "http://fabrice.bellard.free.fr/qemu/" -SECTION = "devel" -LICENSE = "GPL" -SRCDATE="20070701" -PV = "0.9.0+cvs${SRCDATE}" -PR = "r1" - -SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu;date=${SRCDATE} \ - file://configure-0.9.0.patch;patch=1 \ - file://qemu-sdl-cursor-0.9.0.patch;patch=1 \ - file://arm_nptl-0.9.0.patch;patch=1 \ - file://pl110_rgb-r0-0.9.0.patch;patch=1 \ - file://qemu-0.9.0-gcc4.patch;patch=1 \ - file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1" -S = "${WORKDIR}/qemu" - -EXTRA_OECONF="--disable-gcc-check" - -inherit autotools - -DEFAULT_PREFERENCE = "-1" diff --git a/packages/qemu/qemu_20071121.bb b/packages/qemu/qemu_20071121.bb deleted file mode 100644 index 2b6f289974..0000000000 --- a/packages/qemu/qemu_20071121.bb +++ /dev/null @@ -1,60 +0,0 @@ -LICENSE = "GPL" -DEPENDS = "zlib" -SRCDATE = "20071121" -PV = "0.9.0+cvs${SRCDATE}" -PR = "r1" - -DEFAULT_PREFERENCE = "-1" - -FILESPATH = "${FILE_DIRNAME}/qemu-${PV}:${FILE_DIRNAME}/files" -FILESDIR = "${WORKDIR}" - -SRC_URI = "\ - cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \ - file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \ - file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \ - file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \ - file://06_exit_segfault.patch;patch=1;pnum=0 \ - file://10_signal_jobs.patch;patch=1;pnum=0 \ - file://11_signal_sigaction.patch;patch=1;pnum=0 \ - file://22_net_tuntap_stall.patch;patch=1;pnum=0 \ - file://31_syscalls.patch;patch=1;pnum=0 \ - file://32_syscall_sysctl.patch;patch=1;pnum=0 \ - file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \ - file://39_syscall_fadvise64.patch;patch=1;pnum=0 \ - file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \ - file://52_ne2000_return.patch;patch=1;pnum=1 \ - file://61_safe_64bit_int.patch;patch=1;pnum=0 \ - file://63_sparc_build.patch;patch=1;pnum=0 \ - file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \ - file://65_kfreebsd.patch;patch=1;pnum=0 \ - file://66_tls_ld.patch;patch=1;pnum=0 \ - file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \ - file://qemu-0.9.0-nptl.patch;patch=1 \ - file://qemu-0.9.0-nptl-update.patch;patch=1 \ - file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \ - file://workaround_bad_futex_headers.patch;patch=1 \ - file://fix_segfault.patch;patch=1 \ - file://disable-error-in-configure.patch;patch=1 \ - file://no-strip.patch;patch=1" - -# svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \ -# file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \ -# file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \ -# file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \ -# file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \ -# file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \ -# file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \ -# file://debian/patches/96-x.patch;patch=1" - -S = "${WORKDIR}/qemu" - -#EXTRA_OECONF += "--disable-sdl" -#EXTRA_OECONF += "--target-list=arm-linux-user" -EXTRA_OECONF += "--disable-gfx-check" - -inherit autotools - -do_configure() { - oe_runconf -} -- cgit v1.2.3 From 5fa11b8c743d2ae2e59345e45cbbd6a377d4ae66 Mon Sep 17 00:00:00 2001 From: Phil Blundell Date: Mon, 28 Jan 2008 15:20:03 +0000 Subject: gcc-cross-kernel: permute targets in do_stage to avoid 'No such file or directory' --- packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb b/packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb index 7f274bee30..ba89452187 100644 --- a/packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb +++ b/packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb @@ -12,6 +12,6 @@ do_install () { do_stage () { cd gcc - oe_runmake install-common install-headers install-libgcc + oe_runmake install-libgcc install-common install-headers install -m 0755 xgcc ${CROSS_DIR}/bin/${TARGET_PREFIX}gcc-${PV} } -- cgit v1.2.3 From 9054912ea5c0be88da088b92ed33749bc11e3779 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 28 Jan 2008 16:06:10 +0000 Subject: commit latest collie work from thesing (zaurus-2.6.inc, linux-rp*, task-base) --- conf/machine/include/zaurus-2.6.inc | 2 + packages/linux/linux-rp-2.6.24/defconfig-collie | 94 ++++--------------------- packages/linux/linux-rp.inc | 8 ++- packages/linux/linux-rp_2.6.24.bb | 2 +- packages/tasks/task-base.bb | 5 +- 5 files changed, 27 insertions(+), 84 deletions(-) diff --git a/conf/machine/include/zaurus-2.6.inc b/conf/machine/include/zaurus-2.6.inc index 2037931803..f6d1ec0d8e 100644 --- a/conf/machine/include/zaurus-2.6.inc +++ b/conf/machine/include/zaurus-2.6.inc @@ -32,6 +32,8 @@ MACHINE_EXTRA_RRECOMMENDS_c7x0 = "kernel-module-snd-soc-corgi kernel-module-px MACHINE_EXTRA_RRECOMMENDS_akita = "kernel-module-snd-soc-spitz kernel-module-pxa2xx-cs kernel-module-pcmcia" MACHINE_EXTRA_RRECOMMENDS_spitz = "kernel-module-snd-soc-spitz" MACHINE_EXTRA_RRECOMMENDS_poodle = "kernel-module-snd-soc-poodle" +MACHINE_EXTRA_RRECOMMENDS_collie = "kernel-module-locomo-spi kernel-module-sa1100-cs kernel-module-mmc-block \ + kernel-module-collie-ts kernel-module-leds-locomo kernel-module-locomokbd" GUI_MACHINE_CLASS = "bigscreen" GUI_MACHINE_CLASS_collie = "smallscreen" diff --git a/packages/linux/linux-rp-2.6.24/defconfig-collie b/packages/linux/linux-rp-2.6.24/defconfig-collie index d4b813e2cf..e1b80f94ab 100644 --- a/packages/linux/linux-rp-2.6.24/defconfig-collie +++ b/packages/linux/linux-rp-2.6.24/defconfig-collie @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.24-rc8 -# Mon Jan 21 22:14:20 2008 +# Linux kernel version: 2.6.24 +# Sun Jan 27 14:12:17 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -219,8 +219,7 @@ CONFIG_PCMCIA_SA1100=m CONFIG_PREEMPT=y CONFIG_NO_IDLE_HZ=y CONFIG_HZ=100 -CONFIG_AEABI=y -CONFIG_OABI_COMPAT=y +# CONFIG_AEABI is not set CONFIG_ARCH_DISCONTIGMEM_ENABLE=y CONFIG_NODES_SHIFT=2 CONFIG_SELECT_MEMORY_MODEL=y @@ -245,7 +244,7 @@ CONFIG_ALIGNMENT_TRAP=y # CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=ttySA0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=32M fbcon=rotate:1 dyntick=enable debug" +CONFIG_CMDLINE="console=ttySA0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=64M fbcon=rotate:1 dyntick=enable debug" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y CONFIG_ATAGS_PROC=y @@ -272,6 +271,7 @@ CONFIG_FPE_NWFPE=y CONFIG_BINFMT_ELF=y CONFIG_BINFMT_AOUT=m CONFIG_BINFMT_MISC=m +# CONFIG_ARTHUR is not set # # Power management options @@ -282,7 +282,7 @@ CONFIG_PM=y CONFIG_PM_SLEEP=y CONFIG_SUSPEND_UP_POSSIBLE=y CONFIG_SUSPEND=y -CONFIG_APM_EMULATION=m +CONFIG_APM_EMULATION=y # # Networking @@ -294,7 +294,7 @@ CONFIG_NET=y # CONFIG_PACKET=m CONFIG_PACKET_MMAP=y -CONFIG_UNIX=m +CONFIG_UNIX=y CONFIG_XFRM=y CONFIG_XFRM_USER=m # CONFIG_XFRM_SUB_POLICY is not set @@ -324,7 +324,6 @@ CONFIG_INET_TCP_DIAG=m 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 @@ -343,75 +342,7 @@ 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_NETFILTER is not set # CONFIG_IP_DCCP is not set # CONFIG_IP_SCTP is not set # CONFIG_TIPC is not set @@ -893,6 +824,7 @@ CONFIG_SPI_MASTER=y # SPI Master Controller Drivers # # CONFIG_SPI_BITBANG is not set +# CONFIG_SPI_LOCOMO is not set # # SPI Protocol Masters @@ -915,6 +847,8 @@ CONFIG_SSB_POSSIBLE=y # Multifunction device drivers # # CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set # # Multimedia Capabilities Port drivers @@ -1330,14 +1264,14 @@ CONFIG_INSTRUMENTATION=y # CONFIG_PRINTK_TIME is not set CONFIG_ENABLE_WARN_DEPRECATED=y CONFIG_ENABLE_MUST_CHECK=y -CONFIG_MAGIC_SYSRQ=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_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set # CONFIG_SCHEDSTATS is not set # CONFIG_TIMER_STATS is not set # CONFIG_DEBUG_SLAB is not set diff --git a/packages/linux/linux-rp.inc b/packages/linux/linux-rp.inc index 4137b991d1..e823839afd 100644 --- a/packages/linux/linux-rp.inc +++ b/packages/linux/linux-rp.inc @@ -56,9 +56,15 @@ module_autoload_snd-soc-corgi_c7x0 = "snd-soc-corgi" module_autoload_snd-soc-spitz_akita = "snd-soc-spitz" module_autoload_snd-soc-spitz_spitz = "snd-soc-spitz" module_autoload_snd-soc-poodle_poodle = "snd-soc-poodle" + module_autoload_locomo-spi_collie = "locomo-spi" module_autoload_mmc_block_collie = "mmc_block" -module_autoload_locomo-kbd_collie = "locomo-kbd" +module_autoload_locomokbd_collie = "locomokbd" +module_autoload_sa1100-cs_collie = "sa1100_cs" +module_autoload_collie-ts_collie = "collie-ts" +module_autoload_leds-locomo_collie = "leds-locomo" +module_autoload_unix_collie = "unix" + do_configure() { rm -f ${S}/.config diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb index f236586b03..593a70a48b 100644 --- a/packages/linux/linux-rp_2.6.24.bb +++ b/packages/linux/linux-rp_2.6.24.bb @@ -1,6 +1,6 @@ require linux-rp.inc -PR = "r1" +PR = "r2" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_collie = "1" diff --git a/packages/tasks/task-base.bb b/packages/tasks/task-base.bb index 8f2f7935eb..a44056f316 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 = "r57" +PR = "r58" inherit task @@ -168,7 +168,8 @@ RRECOMMENDS_task-base-kernel26 = "\ kernel-module-rtc-dev \ kernel-module-rtc-proc \ kernel-module-rtc-sysfs \ - kernel-module-rtc-sa1100" + kernel-module-rtc-sa1100 \ + kernel-module-unix" RDEPENDS_task-base-keyboard = "\ keymaps" -- cgit v1.2.3 From cdd4a5cedce39a419cb8b217770edf5dd7e7f319 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 28 Jan 2008 17:28:09 +0000 Subject: xorg-font-common.inc: Fix SRC_URI --- packages/xorg-font/xorg-font-common.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xorg-font/xorg-font-common.inc b/packages/xorg-font/xorg-font-common.inc index 7ffe818cb2..c2977c8db9 100644 --- a/packages/xorg-font/xorg-font-common.inc +++ b/packages/xorg-font/xorg-font-common.inc @@ -6,7 +6,7 @@ DEPENDS = " encodings font-alias font-util-native mkfontdir-native mkfontscale-n RDEPENDS = "encodings font-util font-alias" XORG_PN = "${PN}" -SRC_URI = "${XORG_MIRROR}/individual/data/${XORG_PN}-${PV}.tar.bz2" +SRC_URI = "${XORG_MIRROR}/individual/font/${XORG_PN}-${PV}.tar.bz2" S = "${WORKDIR}/${XORG_PN}-${PV}" inherit autotools pkgconfig -- cgit v1.2.3 From 6244c13450c89414df2fe9189daa6a3f0fdf3163 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 28 Jan 2008 21:43:52 +0000 Subject: qemu: Fix missing inherit native and cleanup various files --- packages/qemu/qemu-native.inc | 6 ++-- packages/qemu/qemu-native_20070613.bb | 5 +-- packages/qemu/qemu-native_cvs.bb | 1 - packages/qemu/qemu_0.9.1.bb | 11 +----- packages/qemu/qemu_20070613.bb | 10 +----- packages/qemu/qemu_cvs.bb | 67 +++++++++++++++++++++++++---------- 6 files changed, 53 insertions(+), 47 deletions(-) diff --git a/packages/qemu/qemu-native.inc b/packages/qemu/qemu-native.inc index a20f5056b5..c0e8f89bd0 100644 --- a/packages/qemu/qemu-native.inc +++ b/packages/qemu/qemu-native.inc @@ -1,8 +1,6 @@ -FILESPATH =. "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qemu-${PV}:" +inherit native + DEPENDS = "libsdl-native zlib-native" require qemu-gcc3-check.inc -do_stage() { - find . -name "qemu-*" -type f -perm -755 -exec install -m 0755 {} ${STAGING_BINDIR} \; -} diff --git a/packages/qemu/qemu-native_20070613.bb b/packages/qemu/qemu-native_20070613.bb index d440d560e8..dc9852bd8c 100644 --- a/packages/qemu/qemu-native_20070613.bb +++ b/packages/qemu/qemu-native_20070613.bb @@ -1,7 +1,4 @@ require qemu_${PV}.bb -inherit native -DEPENDS = "zlib-native" -prefix = "${STAGING_DIR_NATIVE}/${layout_prefix}" +require qemu-native.inc -require qemu-gcc3-check.inc diff --git a/packages/qemu/qemu-native_cvs.bb b/packages/qemu/qemu-native_cvs.bb index 639f9a6a7c..c9db5e35b9 100644 --- a/packages/qemu/qemu-native_cvs.bb +++ b/packages/qemu/qemu-native_cvs.bb @@ -1,3 +1,2 @@ require qemu_cvs.bb -inherit native require qemu-native.inc diff --git a/packages/qemu/qemu_0.9.1.bb b/packages/qemu/qemu_0.9.1.bb index 41194ff73f..59aa55bbed 100644 --- a/packages/qemu/qemu_0.9.1.bb +++ b/packages/qemu/qemu_0.9.1.bb @@ -2,7 +2,7 @@ LICENSE = "GPL" DEPENDS = "zlib" PR = "r4" -FILESPATH = "${FILE_DIRNAME}/qemu-${PV}:${FILE_DIRNAME}/files" +FILESPATH = "${FILE_DIRNAME}/qemu-${PV}" FILESDIR = "${WORKDIR}" SRC_URI = "\ @@ -34,15 +34,6 @@ SRC_URI = "\ file://configure_symlinkpath_fix.patch;patch=1 \ file://disable-error-in-configure.patch;patch=1" -# svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \ -# file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \ -# file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \ -# file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \ -# file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \ -# file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \ -# file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \ -# file://debian/patches/96-x.patch;patch=1" - S = "${WORKDIR}/qemu-${PV}" #EXTRA_OECONF += "--disable-sdl" diff --git a/packages/qemu/qemu_20070613.bb b/packages/qemu/qemu_20070613.bb index 6584bcc3ed..533848963b 100644 --- a/packages/qemu/qemu_20070613.bb +++ b/packages/qemu/qemu_20070613.bb @@ -4,6 +4,7 @@ SRCDATE = "20070613" PV = "0.9.0+cvs${SRCDATE}" PR = "r5" +FILESPATH = "${FILE_DIRNAME}/qemu-${PV}" FILESDIR = "${WORKDIR}" SRC_URI = "\ @@ -37,15 +38,6 @@ SRC_URI = "\ file://fix_segfault.patch;patch=1 \ file://no-strip.patch;patch=1" -# svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \ -# file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \ -# file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \ -# file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \ -# file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \ -# file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \ -# file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \ -# file://debian/patches/96-x.patch;patch=1" - S = "${WORKDIR}/qemu" #EXTRA_OECONF = "--disable-sdl" diff --git a/packages/qemu/qemu_cvs.bb b/packages/qemu/qemu_cvs.bb index d76bfa2834..137262ca2d 100644 --- a/packages/qemu/qemu_cvs.bb +++ b/packages/qemu/qemu_cvs.bb @@ -1,26 +1,55 @@ -DESCRIPTION = "Qemu is an open source processor emulator." -HOMEPAGE = "http://fabrice.bellard.free.fr/qemu/" -SECTION = "devel" LICENSE = "GPL" -PV = "0.8.2+cvs${SRCDATE}" -PR = "r2" +DEPENDS = "zlib" +PV = "0.9.0+cvs${SRCDATE}" +PR = "r4" + +DEFAULT_PREFERENCE = "-1" +FILESDIR = "${WORKDIR}" + +SRC_URI = "\ + cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \ + file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \ + file://03_machines_list_no_error.patch;patch=1;pnum=0 \ + file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \ + file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \ + file://06_exit_segfault.patch;patch=1;pnum=0 \ + file://10_signal_jobs.patch;patch=1;pnum=0 \ + file://11_signal_sigaction.patch;patch=1;pnum=0 \ + file://12_signal_powerpc_support.patch;patch=1;pnum=1 \ + file://22_net_tuntap_stall.patch;patch=1;pnum=0 \ + file://31_syscalls.patch;patch=1;pnum=0 \ + file://32_syscall_sysctl.patch;patch=1;pnum=0 \ + file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \ + file://39_syscall_fadvise64.patch;patch=1;pnum=0 \ + file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \ + file://52_ne2000_return.patch;patch=1;pnum=1 \ + file://61_safe_64bit_int.patch;patch=1;pnum=0 \ + file://63_sparc_build.patch;patch=1;pnum=0 \ + file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \ + file://65_kfreebsd.patch;patch=1;pnum=0 \ + file://66_tls_ld.patch;patch=1;pnum=0 \ + file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \ + file://93-oh-pl110-rgb.patch;patch=1;pnum=0 \ + file://qemu-0.9.0-nptl.patch;patch=1 \ + file://qemu-0.9.0-nptl-update.patch;patch=1 \ + file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \ + file://workaround_bad_futex_headers.patch;patch=1 \ + file://fix_segfault.patch;patch=1" + +# svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \ +# file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \ +# file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \ +# file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \ +# file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \ +# file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \ +# file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \ +# file://debian/patches/96-x.patch;patch=1" -SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \ - file://configure.patch;patch=1 \ - file://makefile.patch;patch=1 \ - file://qemu-sdl-cursor.patch;patch=1 \ - file://arm_nptl.patch;patch=1 \ - file://pl110_rgb-r0.patch;patch=1 \ - file://qemu-pci-irq-sharing.patch;patch=1 \ - file://compiler.patch;patch=1 \ - file://qemu-usb-wacom-0.8.2.patch;patch=1 \ - file://qemu-usb-wacom-pressure.patch;patch=1 \ - file://qemu-usb-wacom-buttons.patch;patch=1 \ - http://www.busybox.net/downloads/qemu/qemu-gcc-4-all.patch;patch=1" S = "${WORKDIR}/qemu" -EXTRA_OECONF="--disable-gcc-check" +#EXTRA_OECONF += "--disable-sdl" +#EXTRA_OECONF += "--target-list=arm-linux-user" +EXTRA_OECONF += "--disable-gfx-check" inherit autotools -DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From 9dd959cd1e4e4f00f4778d0432638f4c38a29997 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Mon, 28 Jan 2008 22:21:29 +0000 Subject: chinook-compat: - Added description and a note --- conf/distro/chinook-compat.conf | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/conf/distro/chinook-compat.conf b/conf/distro/chinook-compat.conf index 05dc674c13..581d4f31d0 100644 --- a/conf/distro/chinook-compat.conf +++ b/conf/distro/chinook-compat.conf @@ -1,8 +1,18 @@ #@-------------------------------------------------------------------- #@TYPE: Distribution #@NAME: Chinook-compatible +#@DESCRIPTION: Distribution which allows building packages compatible to OS 2008 #@-------------------------------------------------------------------- +# Note: This is not a complete distribution. Just some definitions to make +# it possible to build packages that are compatible to Nokia's OS2008. +# You should *not* replace core libraries of the operating system (glibc, +# glib, gtk+, ..) with those you build in OE. +# +# Furthermore it may be possible that OpenEmbedded lacks specific versions +# of some packages. If you encounter such a problem please provide a recipe +# or file a bug! + DISTRO = "chinook-compat" DISTRO_NAME = "Chinook-compat" DISTRO_VERSION = "test-${DATE}" -- cgit v1.2.3 From 591b1261f4ebfa9fcb7bea31845b6bb8843c913f Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Mon, 28 Jan 2008 22:27:00 +0000 Subject: dbus-java: Added recipe. libmatthew: Added recipe (dependency for dbus-java). --- packages/dbus-java/.mtn2git_empty | 0 packages/dbus-java/dbus-java_2.3.bb | 98 +++++++++++++++++++++++++++++++++++ packages/libmatthew/.mtn2git_empty | 0 packages/libmatthew/libmatthew_0.5.bb | 54 +++++++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 packages/dbus-java/.mtn2git_empty create mode 100644 packages/dbus-java/dbus-java_2.3.bb create mode 100644 packages/libmatthew/.mtn2git_empty create mode 100644 packages/libmatthew/libmatthew_0.5.bb diff --git a/packages/dbus-java/.mtn2git_empty b/packages/dbus-java/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/dbus-java/dbus-java_2.3.bb b/packages/dbus-java/dbus-java_2.3.bb new file mode 100644 index 0000000000..72d99c3854 --- /dev/null +++ b/packages/dbus-java/dbus-java_2.3.bb @@ -0,0 +1,98 @@ +DESCRIPTION = "A pure Java D-Bus Implementation" +DESCRIPTION_dbus-java-viewer = "${DESCRIPTION} (DBusViewer Binary)" +DESCRIPTION_dbus-java-bin = "${DESCRIPTION} (Binaries)" + +LICENSE = "GPLv2 AFL" +SECTION = "libs" +MAINTAINER = "Fabian Koester, tarent GmbH Bonn " +HOMEPAGE = "http://jalimo.org" +AUTHOR = "Matthew Johnson " + +PR = "r2" + +inherit java-library + +SRC_URI = "http://dbus.freedesktop.org/releases/dbus-java/dbus-java-${PV}.tar.gz" + +S = "${WORKDIR}/dbus-java-${PV}" + +DEPENDS = "libmatthew docbook-utils-native docbook-sgml-dtd-4.1-native" +RSUGGESTS_libdbus-java = "libmatthew-java dbus" +RDEPENDS_dbus-java-viewer = "java2-runtime libmatthew-java ${JPN}" +RDEPENDS_dbus-java-bin = "java2-runtime libmatthew-java ${JPN}" + +do_compile () { + # run target .binclasses first to fix a brokenness in the Makefile + oe_runmake \ + JCFLAGS="-source 1.5" \ + JAVAC="javac" \ + JARPREFIX="${STAGING_DATADIR}/java" \ + JAVAUNIXJARDIR="${STAGING_DATADIR}/java" \ + CLASSPATH="${S}/classes" \ + JAR="fastjar" \ + .binclasses + + oe_runmake \ + JCFLAGS="-source 1.5" \ + JAVAC="javac" \ + JARPREFIX="${STAGING_DATADIR}/java" \ + JAVAUNIXJARDIR="${STAGING_DATADIR}/java" \ + CLASSPATH="${S}/classes" \ + JAR="fastjar" \ + all + + # Generated shell scripts will have staging paths inside them. + rm bin/* + + # Generate them again with target paths. + oe_runmake \ + JAVAC="oefatal \"No Java compilation expected here.\"" \ + JAR="oefatal \"No jar invocation expected here.\"" \ + JARPREFIX=${datadir}/java \ + JAVAUNIXPATH=${datadir}/java \ + all + + # Trigger generation of all documentation files to prevent this + # being happen at the target 'install-man' in do_install. + oe_runmake \ + JAVAC="oefatal \"No Java compilation expected here.\"" \ + JAR="oefatal \"No jar invocation expected here.\"" \ + JARPREFIX=${datadir}/java \ + JAVAUNIXPATH=${datadir}/java \ + CreateInterface.1 ListDBus.1 DBusDaemon.1 DBusViewer.1 changelog AUTHORS COPYING README INSTALL DBusCall.1 +} + +do_staging () { + oe_jarinstall -s ${JPN}-${PV}.jar ${JPN}.jar +} + +do_install () { + oe_jarinstall ${JPN}-${PV}.jar ${JPN}.jar + oe_jarinstall dbus-java-viewer-${PV}.jar dbus-java-viewer.jar + oe_jarinstall dbus-java-bin-${PV}.jar dbus-java-bin.jar + + install -d ${D}${bindir} + install bin/DBusViewer ${D}${bindir} + install bin/DBusCall ${D}${bindir} + install bin/CreateInterface ${D}${bindir} + install bin/ListDBus ${D}${bindir} + install bin/DBusDaemon ${D}${bindir} + + oe_runmake \ + JAVAC="oefatal \"No Java compilation expected here.\"" \ + JAR="oefatal \"No jar invocation expected here.\"" \ + MANPREFIX=${D}${mandir} \ + DOCPREFIX=${D}${docdir}/${JPN} \ + install-man +} + +# ${JPN} must be last otherwise it would pick up dbus-viewer*.jar +# and dbus-bin*.jar +PACKAGES = "dbus-java-viewer dbus-java-viewer-doc dbus-java-bin dbus-java-bin-doc ${JPN}" + +PACKAGE_ARCH = "all" + +FILES_dbus-java-viewer = "${datadir}/java/dbus-java-viewer*.jar ${bindir}/DBusViewer" +FILES_dbus-java-viewer-doc = "${mandir}/DBusViewer*" +FILES_dbus-java-bin = "${datadir}/java/dbus-java-bin*.jar ${bindir}" +FILES_dbus-java-bin-doc = "${mandir} ${docdir}/${JPN}" diff --git a/packages/libmatthew/.mtn2git_empty b/packages/libmatthew/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libmatthew/libmatthew_0.5.bb b/packages/libmatthew/libmatthew_0.5.bb new file mode 100644 index 0000000000..23ee04ed26 --- /dev/null +++ b/packages/libmatthew/libmatthew_0.5.bb @@ -0,0 +1,54 @@ +DESCRIPTION = "Unix socket, debug and hexdump libraries" +LICENSE = "LGPL" +SECTION = "libs" +MAINTAINER = "Fabian Koester, tarent GmbH Bonn " +HOMEPAGE = "http://jalimo.org" +AUTHOR = "Matthew Johnson " + +inherit java-library + +DEPENDS = "classpath-native classpath" + +SRC_URI = "http://www.matthew.ath.cx/projects/java/libmatthew-java-${PV}.tar.gz" + +S = "${WORKDIR}/libmatthew-java-${PV}" + +do_compile() { + oe_runmake \ + JCFLAGS="-source 1.5" \ + JAVAC="javac" \ + JAR="fastjar" \ + JAVAH="gjavah" \ + INCLUDES="-I${STAGING_INCDIR}/classpath" \ + LDFLAGS="-fpic -shared -lc ${LDFLAGS}" \ + LD="${CC}" +} + +do_stage() { + oe_jarinstall -s cgi-0.5.jar cgi.jar + oe_jarinstall -s debug-disable-1.1.jar debug-disable.jar + oe_jarinstall -s debug-enable-1.1.jar debug-enable.jar + oe_jarinstall -s hexdump-0.1.jar hexdump.jar + oe_jarinstall -s io-0.1.jar io.jar + oe_jarinstall -s unix-0.2.jar unix.jar +} + +do_install() { + oe_jarinstall cgi-0.5.jar cgi.jar + oe_jarinstall debug-disable-1.1.jar debug-disable.jar + oe_jarinstall debug-enable-1.1.jar debug-enable.jar + oe_jarinstall hexdump-0.1.jar hexdump.jar + oe_jarinstall io-0.1.jar io.jar + oe_jarinstall unix-0.2.jar unix.jar + + oe_libinstall -so libcgi-java ${D}${libdir}/jni + oe_libinstall -so libunix-java ${D}${libdir}/jni +} + +PACKAGES += "${PN}-jni ${PN}-jni-dbg" + +RDEPENDS_${JPN} = "${PN}-jni" + +FILES_${PN}-jni = "${libdir}/jni/lib*.so" +FILES_${PN}-jni-dbg = "${libdir}/jni/.debug/lib*.so" + -- cgit v1.2.3 From f45fd4d5ba65cf4eb6dd795de6953a5ff3dc9dbc Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 28 Jan 2008 23:00:13 +0000 Subject: native.bbclass: Change prefix so its within the build-arch directory, hence moving on step closer to sysroot. Nothing much uses the prefix path from native.bbclass apart from qemu which this change fixes a problem with --- classes/native.bbclass | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/classes/native.bbclass b/classes/native.bbclass index d51c675909..934303cc0c 100644 --- a/classes/native.bbclass +++ b/classes/native.bbclass @@ -49,9 +49,9 @@ export STRIP = "${HOST_PREFIX}strip" # Path prefixes -base_prefix = "${exec_prefix}" -prefix = "${STAGING_DIR}" -exec_prefix = "${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}" +base_prefix = "${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}" +prefix = "${base_prefix}" +exec_prefix = "${base_prefix}" # Base paths base_bindir = "${base_prefix}/bin" -- cgit v1.2.3 From 1ace4fe69b9778f345ca3c59c266c8aba4416403 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 28 Jan 2008 23:03:11 +0000 Subject: gcc-native-3.4.4: Add PROVIDES gcc-native3 --- packages/gcc/gcc-native_3.4.4.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/gcc/gcc-native_3.4.4.bb b/packages/gcc/gcc-native_3.4.4.bb index 2e5d3ac263..eb1fb5716e 100644 --- a/packages/gcc/gcc-native_3.4.4.bb +++ b/packages/gcc/gcc-native_3.4.4.bb @@ -1,2 +1,3 @@ require gcc_${PV}.bb require gcc-native.inc +PROVIDES += "gcc-native3" \ No newline at end of file -- cgit v1.2.3 From 71e4a55a525e5195692e5c7aab01006f2569f261 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 28 Jan 2008 23:04:30 +0000 Subject: qemu: Bump PR to make sure nobody is bitten by the native.bbclass prefix issue. Add DEPENDS on gcc-native3 --- packages/qemu/qemu-native.inc | 2 +- packages/qemu/qemu_0.9.1.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/qemu/qemu-native.inc b/packages/qemu/qemu-native.inc index c0e8f89bd0..c05dc41d46 100644 --- a/packages/qemu/qemu-native.inc +++ b/packages/qemu/qemu-native.inc @@ -1,6 +1,6 @@ inherit native -DEPENDS = "libsdl-native zlib-native" +DEPENDS = "libsdl-native zlib-native gcc-native3" require qemu-gcc3-check.inc diff --git a/packages/qemu/qemu_0.9.1.bb b/packages/qemu/qemu_0.9.1.bb index 59aa55bbed..9f07f45f05 100644 --- a/packages/qemu/qemu_0.9.1.bb +++ b/packages/qemu/qemu_0.9.1.bb @@ -1,6 +1,6 @@ LICENSE = "GPL" DEPENDS = "zlib" -PR = "r4" +PR = "r5" FILESPATH = "${FILE_DIRNAME}/qemu-${PV}" FILESDIR = "${WORKDIR}" -- cgit v1.2.3 From 48b5c3908e0e85774c5f3a81ee05710db23643ce Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 28 Jan 2008 23:05:38 +0000 Subject: local.conf.sample: Document how to avoid compiling gcc-native3, cleanup other ASSUME_PROVIDED documentation --- conf/local.conf.sample | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/conf/local.conf.sample b/conf/local.conf.sample index 0fa2b7d122..4d60fa729b 100644 --- a/conf/local.conf.sample +++ b/conf/local.conf.sample @@ -33,12 +33,19 @@ BBMASK = "" # Uncomment this if you want to use a prebuilt toolchain. You will need to # provide packages for toolchain and additional libraries yourself. You also # have to set PATH in your environment to make sure BitBake finds additional binaries. -# Note: You will definitely need to say: -# ASSUME_PROVIDED += "virtual/arm-linux-gcc-2.95" -# to build any of two Linux 2.4 Embedix kernels, +# ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}gcc virtual/libc" + +# Uncomment this if you're building for an arch that uses emulated locale +# generation under qemu (mainly arm glibc) and have an external gcc 3.x compiler +# that OE recognises. This will mean the gcc-native build is skipped, speeding +# builds up. +# ASSUME_PROVIDED += "gcc-native3" + +# Uncomment this if you are building Linux 2.4 Embedix kernels. # i.e. openzaurus-sa-2.4.18 and openzaurus-pxa-2.4.18 - and don't forget # to rename the binaries as instructed in the Wiki. -# ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}gcc virtual/libc" +# Most users do not need this anymore thankfully! +# ASSUME_PROVIDED += "virtual/arm-linux-gcc-2.95" # Select between multiple alternative providers, if more than one is eligible. PREFERRED_PROVIDERS = "virtual/qte:qte virtual/libqpe:libqpe-opie" -- cgit v1.2.3 From fc98537d1272baf818ed71604e73d7221d49dbf1 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 29 Jan 2008 08:34:29 +0000 Subject: qpf-fonts: rename qpf.bbclass to qpf.inc and dependent changes as discussed on ml. Partly closes 2430. --- classes/qpf.bbclass | 32 ------------------------------ packages/qpf-fonts/qpf-arabic_1.0.bb | 2 +- packages/qpf-fonts/qpf-freemono_1.0.bb | 2 +- packages/qpf-fonts/qpf-freeserif_1.0.bb | 2 +- packages/qpf-fonts/qpf-helvetica_1.0.bb | 2 +- packages/qpf-fonts/qpf-hunkysans_0.3.0.bb | 2 +- packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb | 2 +- packages/qpf-fonts/qpf-qte_2.3.10.bb | 2 +- packages/qpf-fonts/qpf-unifont_1.0.bb | 2 +- packages/qpf-fonts/qpf-unismall_1.0.0.bb | 2 +- packages/qpf-fonts/qpf-utopia_1.0.bb | 2 +- packages/qpf-fonts/qpf.inc | 32 ++++++++++++++++++++++++++++++ packages/qpf-fonts/terminus.bb | 2 +- 13 files changed, 43 insertions(+), 43 deletions(-) delete mode 100644 classes/qpf.bbclass create mode 100644 packages/qpf-fonts/qpf.inc diff --git a/classes/qpf.bbclass b/classes/qpf.bbclass deleted file mode 100644 index 67761bd4be..0000000000 --- a/classes/qpf.bbclass +++ /dev/null @@ -1,32 +0,0 @@ -PACKAGE_ARCH = "all" - -do_configure() { - : -} - -do_compile() { - : -} - -pkg_postinst_fonts() { -. /etc/profile -${sbindir}/update-qtfontdir -} - -pkg_postrm_fonts() { -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -python populate_packages_prepend() { - postinst = bb.data.getVar('pkg_postinst_fonts', d, 1) - postrm = bb.data.getVar('pkg_postrm_fonts', d, 1) - fontdir = bb.data.getVar('palmtopdir', d, 1) + '/lib/fonts' - pkgregex = "^([a-z-]*_[0-9]*).*.qpf$" - pkgpattern = bb.data.getVar('QPF_PKGPATTERN', d, 1) or 'qpf-%s' - pkgdescription = bb.data.getVar('QPF_DESCRIPTION', d, 1) or 'QPF font %s' - - do_split_packages(d, root=fontdir, file_regex=pkgregex, output_pattern=pkgpattern, - description=pkgdescription, postinst=postinst, postrm=postrm, recursive=True, hook=None, - extra_depends='qpf-font-common') -} diff --git a/packages/qpf-fonts/qpf-arabic_1.0.bb b/packages/qpf-fonts/qpf-arabic_1.0.bb index 1d73f880c8..8a7a6549b5 100644 --- a/packages/qpf-fonts/qpf-arabic_1.0.bb +++ b/packages/qpf-fonts/qpf-arabic_1.0.bb @@ -15,4 +15,4 @@ do_install () { done } -inherit qpf +require qpf.inc diff --git a/packages/qpf-fonts/qpf-freemono_1.0.bb b/packages/qpf-fonts/qpf-freemono_1.0.bb index d10fda6117..550bdd587d 100644 --- a/packages/qpf-fonts/qpf-freemono_1.0.bb +++ b/packages/qpf-fonts/qpf-freemono_1.0.bb @@ -16,4 +16,4 @@ do_install () { done } -inherit qpf +require qpf.inc diff --git a/packages/qpf-fonts/qpf-freeserif_1.0.bb b/packages/qpf-fonts/qpf-freeserif_1.0.bb index 116c48d5d1..01d667c4cb 100644 --- a/packages/qpf-fonts/qpf-freeserif_1.0.bb +++ b/packages/qpf-fonts/qpf-freeserif_1.0.bb @@ -17,4 +17,4 @@ do_install () { done } -inherit qpf +require qpf.inc diff --git a/packages/qpf-fonts/qpf-helvetica_1.0.bb b/packages/qpf-fonts/qpf-helvetica_1.0.bb index 9607030393..2b5c767caa 100644 --- a/packages/qpf-fonts/qpf-helvetica_1.0.bb +++ b/packages/qpf-fonts/qpf-helvetica_1.0.bb @@ -15,4 +15,4 @@ do_install () { done } -inherit qpf +require qpf.inc diff --git a/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb b/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb index f4c50faf71..efdf913edb 100644 --- a/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb +++ b/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb @@ -17,4 +17,4 @@ do_install () { done } -inherit qpf +require qpf.inc diff --git a/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb b/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb index 8c1d8d02bc..22948c5475 100644 --- a/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb +++ b/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb @@ -17,4 +17,4 @@ do_install () { done } -inherit qpf +require qpf.inc diff --git a/packages/qpf-fonts/qpf-qte_2.3.10.bb b/packages/qpf-fonts/qpf-qte_2.3.10.bb index 4d7d739f79..7cc4789c4a 100644 --- a/packages/qpf-fonts/qpf-qte_2.3.10.bb +++ b/packages/qpf-fonts/qpf-qte_2.3.10.bb @@ -26,7 +26,7 @@ RPROVIDES_qte-font-japanese += "virtual/japanese-font" SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-${PV}-free.tar.gz" S = "${WORKDIR}/qt-${PV}" -inherit qpf +require qpf.inc QPF_PKGPATTERN = "qte-font-%s" QPF_DESCRIPTION = "Qt/E font %s" diff --git a/packages/qpf-fonts/qpf-unifont_1.0.bb b/packages/qpf-fonts/qpf-unifont_1.0.bb index ec3a9de4ca..14a63783c2 100644 --- a/packages/qpf-fonts/qpf-unifont_1.0.bb +++ b/packages/qpf-fonts/qpf-unifont_1.0.bb @@ -16,4 +16,4 @@ do_install () { done } -inherit qpf +require qpf.inc diff --git a/packages/qpf-fonts/qpf-unismall_1.0.0.bb b/packages/qpf-fonts/qpf-unismall_1.0.0.bb index 7dd724d306..62d84225ff 100644 --- a/packages/qpf-fonts/qpf-unismall_1.0.0.bb +++ b/packages/qpf-fonts/qpf-unismall_1.0.0.bb @@ -21,6 +21,6 @@ do_install () { done } -inherit qpf +require qpf.inc PACKAGE_ARCH = "all" diff --git a/packages/qpf-fonts/qpf-utopia_1.0.bb b/packages/qpf-fonts/qpf-utopia_1.0.bb index 87cb4d758b..148af3a758 100644 --- a/packages/qpf-fonts/qpf-utopia_1.0.bb +++ b/packages/qpf-fonts/qpf-utopia_1.0.bb @@ -16,4 +16,4 @@ do_install () { done } -inherit qpf +require qpf.inc diff --git a/packages/qpf-fonts/qpf.inc b/packages/qpf-fonts/qpf.inc new file mode 100644 index 0000000000..67761bd4be --- /dev/null +++ b/packages/qpf-fonts/qpf.inc @@ -0,0 +1,32 @@ +PACKAGE_ARCH = "all" + +do_configure() { + : +} + +do_compile() { + : +} + +pkg_postinst_fonts() { +. /etc/profile +${sbindir}/update-qtfontdir +} + +pkg_postrm_fonts() { +. /etc/profile +${sbindir}/update-qtfontdir -f +} + +python populate_packages_prepend() { + postinst = bb.data.getVar('pkg_postinst_fonts', d, 1) + postrm = bb.data.getVar('pkg_postrm_fonts', d, 1) + fontdir = bb.data.getVar('palmtopdir', d, 1) + '/lib/fonts' + pkgregex = "^([a-z-]*_[0-9]*).*.qpf$" + pkgpattern = bb.data.getVar('QPF_PKGPATTERN', d, 1) or 'qpf-%s' + pkgdescription = bb.data.getVar('QPF_DESCRIPTION', d, 1) or 'QPF font %s' + + do_split_packages(d, root=fontdir, file_regex=pkgregex, output_pattern=pkgpattern, + description=pkgdescription, postinst=postinst, postrm=postrm, recursive=True, hook=None, + extra_depends='qpf-font-common') +} diff --git a/packages/qpf-fonts/terminus.bb b/packages/qpf-fonts/terminus.bb index 6d2e4ab85f..868dd74e0d 100644 --- a/packages/qpf-fonts/terminus.bb +++ b/packages/qpf-fonts/terminus.bb @@ -15,4 +15,4 @@ do_install() { cp *.qpf ${D}${palmqtdir}/lib/fonts } -inherit qpf +require qpf.inc -- cgit v1.2.3 From 501f302fb41e747f2997984a57974ecc0e000b27 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 29 Jan 2008 09:45:33 +0000 Subject: opie-ttf-support: prepare for update-font-common. partly closes 2430. --- packages/opie-ttf-support/opie-ttf-support_1.1.bb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/opie-ttf-support/opie-ttf-support_1.1.bb b/packages/opie-ttf-support/opie-ttf-support_1.1.bb index 74de9116b7..d11d8ea75f 100644 --- a/packages/opie-ttf-support/opie-ttf-support_1.1.bb +++ b/packages/opie-ttf-support/opie-ttf-support_1.1.bb @@ -1,7 +1,7 @@ DESCRIPTION = "Meta-package for Opie TTF support" -DEPENDS = "freetype" SECTION = "opie/fonts" -PR = "r2" +DEPENDS = "freetype" +PR = "r3" SRC_URI = "file://update-qtttffontdir.c" S = "${WORKDIR}" @@ -12,12 +12,12 @@ do_compile() { do_install() { install -d ${D}${sbindir} + install -d ${D}${sysconfdir}/update-fonts-common.d/ install -m 0755 update-qtttffontdir ${D}${sbindir} -} - -pkg_postinst() { + echo " #!/bin/sh -if [ -n "$D" ]; then exit 1; fi -mkdir -p ${palmtopdir}/lib/fonts/ -${sbindir}/update-qtttffontdir ${datadir}/fonts/truetype >${palmtopdir}/lib/fonts/fontdir +# Author: Rolf Leggewie + +${sbindir}/update-qtttffontdir ${datadir}/fonts/truetype > ${palmtopdir}/lib/fonts/fontdir +" > ${D}${sysconfdir}/update-fonts-common.d/02qtttffont-update } -- cgit v1.2.3 From 9e42fdd5e33e745cabe1589d01d8b5e5bcf2f11c Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 29 Jan 2008 09:57:33 +0000 Subject: ttf.inc: add RDEPENDS on font-update-common and call the update script in postinst/postrm. Partly closes 2430. --- packages/ttf-fonts/ttf.inc | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/ttf-fonts/ttf.inc b/packages/ttf-fonts/ttf.inc index e0d1dd6a54..69561e8506 100644 --- a/packages/ttf-fonts/ttf.inc +++ b/packages/ttf-fonts/ttf.inc @@ -1,18 +1,18 @@ SECTION = "fonts" PRIORITY = "optional" -PACKAGE_ARCH = "all" -#DEPENDS = "fontconfig opie-ttf-support" -#RSUGGESTS = "fontconfig-utils opie-ttf-support" - -# I dont want TTF fonts to depend on fontconfig on device -# as those fonts are used not only in X11 enviroment +RDEPENDS += "font-update-common" do_install() { install -d ${D}${datadir}/fonts/truetype/ install -m 0644 ${S}/*.ttf ${D}${datadir}/fonts/truetype/ } -#pkg_postinst () { -##!/bin/sh -#fc-cache -#} +pkg_postinst_append() { + update-fonts +} + +pkg_postrm_append() { + update-fonts +} + +PACKAGE_ARCH = "all" -- cgit v1.2.3 From 4e048dc923520f093e78b63809df129522056599 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 29 Jan 2008 10:10:48 +0000 Subject: fontconfig: prepare for font-update-common. Partly closes 2430. --- packages/fontconfig/files/01fc-cache | 4 ++++ packages/fontconfig/fontconfig.inc | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 packages/fontconfig/files/01fc-cache diff --git a/packages/fontconfig/files/01fc-cache b/packages/fontconfig/files/01fc-cache new file mode 100644 index 0000000000..963aaec8ca --- /dev/null +++ b/packages/fontconfig/files/01fc-cache @@ -0,0 +1,4 @@ +#!/bin/sh +# Author: Rolf Leggewie + +fc-cache diff --git a/packages/fontconfig/fontconfig.inc b/packages/fontconfig/fontconfig.inc index 2b3dc39c36..252b843340 100644 --- a/packages/fontconfig/fontconfig.inc +++ b/packages/fontconfig/fontconfig.inc @@ -9,7 +9,8 @@ RREPLACES_fontconfig-utils = "libfontconfig-utils" RCONFLICTS_fontconfig-utils = "libfontconfig-utils" DEBIAN_NOAUTONAME_fontconfig-utils = "1" -SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz" +SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \ + file://01fc-cache" S = "${WORKDIR}/fontconfig-${PV}" @@ -32,6 +33,10 @@ python do_unpack () { bb.build.exec_func('fontconfig_do_unpack', d) } +fontconfig-utils_do_install_prepend() { + install -m 0755 ${WORKDIR}/01fc-cache ${D}${sysconfdir}/update-fonts-common.d/ +} + PACKAGES =+ "fontconfig-utils-dbg fontconfig-utils " -FILES_fontconfig-utils-dbg = "${bindir}/*.dbg" +FILES_fontconfig-utils-dbg += "${bindir}/*.dbg" FILES_fontconfig-utils = "${bindir}/*" -- cgit v1.2.3 From 610cbd420e2197a6ac847cd56da035f52d533e35 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 29 Jan 2008 10:39:13 +0000 Subject: ttf-fonts: some clean-up and PR bumping after introduction of font-update-common. --- packages/ttf-fonts/ttf-bitstream-vera_1.10.bb | 14 +++----------- packages/ttf-fonts/ttf-dejavu_2.18.bb | 8 ++++---- packages/ttf-fonts/ttf-gentium_1.02.bb | 8 ++++---- packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb | 9 ++++----- packages/ttf-fonts/ttf-liberation_0.2.bb | 7 ++++--- packages/ttf-fonts/ttf-sazanami_20040629.bb | 2 +- packages/ttf-fonts/ttf.inc | 2 +- 7 files changed, 21 insertions(+), 29 deletions(-) diff --git a/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb b/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb index 871bc1d37c..6ddfa7aac0 100644 --- a/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb +++ b/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb @@ -1,10 +1,8 @@ +require ttf.inc + DESCRIPTION = "The Bitstream Vera fonts - TTF Edition" -SECTION = "x11/fonts" -PRIORITY = "optional" LICENSE = "Bitstream Vera" -PACKAGE_ARCH = "all" -PR = "r3" -RDEPENDS = "fontconfig-utils" +PR = "r4" SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/ttf-bitstream-vera-${PV}.tar.bz2" @@ -25,10 +23,4 @@ do_install () { done } -pkg_postinst () { -#!/bin/sh -fc-cache -} - - FILES_${PN} = "/etc ${datadir}/fonts" diff --git a/packages/ttf-fonts/ttf-dejavu_2.18.bb b/packages/ttf-fonts/ttf-dejavu_2.18.bb index cd8c8e2655..6f05cef5d6 100644 --- a/packages/ttf-fonts/ttf-dejavu_2.18.bb +++ b/packages/ttf-fonts/ttf-dejavu_2.18.bb @@ -1,15 +1,15 @@ +require ttf.inc + DESCRIPTION = "DejaVu font - TTF Edition" +HOMEPAGE = "http://dejavu.sourceforge.net/wiki/" LICENSE = "Bitstream Vera" -HOMEPAGE = "http://dejavu.sourceforge.net/wiki/index.php/Main_Page" RDEPENDS = "ttf-dejavu-common" RDEPENDS_ttf-dejavu-common = "" -PR = "r1" +PR = "r2" SRC_URI = "${SOURCEFORGE_MIRROR}/dejavu/dejavu-ttf-${PV}.tar.bz2 \ file://30-dejavu-aliases.conf" -require ttf.inc - S = "${WORKDIR}/dejavu-ttf-${PV}" do_install_append () { diff --git a/packages/ttf-fonts/ttf-gentium_1.02.bb b/packages/ttf-fonts/ttf-gentium_1.02.bb index e6c0a0c464..bf2a416e08 100644 --- a/packages/ttf-fonts/ttf-gentium_1.02.bb +++ b/packages/ttf-fonts/ttf-gentium_1.02.bb @@ -1,13 +1,14 @@ +require ttf.inc + DESCRIPTION = "Gentium fonts - TTF Version" -LICENSE = "SIL Open Font License" HOMEPAGE = "http://scripts.sil.org/gentium" +LICENSE = "SIL Open Font License" LICENSE_URL = "http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=OFL" +PR = "r1" SRC_URI = "${DEBIAN_MIRROR}/main/t/ttf-gentium/ttf-gentium_${PV}.orig.tar.gz \ file://OFL.gz" -require ttf.inc - S = "${WORKDIR}/ttf-sil-gentium-${PV}" do_install_append() { @@ -20,7 +21,6 @@ do_install_append() { } - PACKAGES = "${PN}-dbg ${PN} ${PN}-alt" FILES_ttf-gentium-alt = "${datadir}/fonts/truetype/GenAI*.ttf \ diff --git a/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb b/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb index 72ec432f45..2964d7a7d8 100644 --- a/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb +++ b/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb @@ -1,15 +1,14 @@ +require ttf.inc + DESCRIPTION = "Hunky fonts - TTF Version" -LICENSE = "LGPL" HOMEPAGE = "http://sourceforge.net/projects/hunkyfonts" -PR = "r0" +LICENSE = "LGPL" +PR = "r1" SRC_URI = "${SOURCEFORGE_MIRROR}/hunkyfonts/hunkyfonts-${PV}.tar.bz2" S = "${WORKDIR}/hunkyfonts-${PV}/TTF/" -require ttf.inc - PACKAGES = "${PN}-dbg ttf-hunky-sans ttf-hunky-serif" - FILES_ttf-hunky-sans = "${datadir}/fonts/truetype/HunkySans*.ttf" FILES_ttf-hunky-serif = "${datadir}/fonts/truetype/HunkySerif*.ttf" diff --git a/packages/ttf-fonts/ttf-liberation_0.2.bb b/packages/ttf-fonts/ttf-liberation_0.2.bb index 09a909c4b6..08d450e2ab 100644 --- a/packages/ttf-fonts/ttf-liberation_0.2.bb +++ b/packages/ttf-fonts/ttf-liberation_0.2.bb @@ -1,8 +1,9 @@ +require ttf.inc + DESCRIPTION = "Liberation fonts - TTF Version" -LICENSE = "Liberation" HOMEPAGE = "https://www.redhat.com/promo/fonts/" - -require ttf.inc +LICENSE = "Liberation" +PR = "r1" SRC_URI = "http://www.redhat.com/f/fonts/liberation-fonts-ttf-3.tar.gz" S = "${WORKDIR}/liberation-fonts-${PV}" diff --git a/packages/ttf-fonts/ttf-sazanami_20040629.bb b/packages/ttf-fonts/ttf-sazanami_20040629.bb index a48c54c9ad..ef65d40b6b 100644 --- a/packages/ttf-fonts/ttf-sazanami_20040629.bb +++ b/packages/ttf-fonts/ttf-sazanami_20040629.bb @@ -8,7 +8,7 @@ HOMEPAGE = "http://sourceforge.jp/projects/efont/" LICENSE = "${PN}" SRC_DISTRIBUTE_LICENSES += "${PN}" RPROVIDES = "virtual/japanese-font" -PR = "r1" +PR = "r2" SRC_URI = "http://download.sourceforge.jp/efont/10087/sazanami-20040629.tar.bz2" S = "${WORKDIR}/sazanami-20040629" diff --git a/packages/ttf-fonts/ttf.inc b/packages/ttf-fonts/ttf.inc index 69561e8506..00363c565f 100644 --- a/packages/ttf-fonts/ttf.inc +++ b/packages/ttf-fonts/ttf.inc @@ -1,6 +1,6 @@ SECTION = "fonts" PRIORITY = "optional" -RDEPENDS += "font-update-common" +RRECOMMENDS += "font-update-common" do_install() { install -d ${D}${datadir}/fonts/truetype/ -- cgit v1.2.3 From 849474e1d48a4c5e44abe5ef901d368ad615086d Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 29 Jan 2008 11:03:10 +0000 Subject: terminus: rename to qpf-terminus --- packages/qpf-fonts/qpf-terminus.bb | 18 ++++++++++++++++++ packages/qpf-fonts/terminus.bb | 18 ------------------ packages/tasks/task-qpe.bb | 2 +- 3 files changed, 19 insertions(+), 19 deletions(-) create mode 100644 packages/qpf-fonts/qpf-terminus.bb delete mode 100644 packages/qpf-fonts/terminus.bb diff --git a/packages/qpf-fonts/qpf-terminus.bb b/packages/qpf-fonts/qpf-terminus.bb new file mode 100644 index 0000000000..868dd74e0d --- /dev/null +++ b/packages/qpf-fonts/qpf-terminus.bb @@ -0,0 +1,18 @@ +DESCRIPTION = "Qt/Embedded terminus font" +HOMEPAGE = "http://www.is-vn.bg/hamster/jimmy-en.html" +SECTION = "opie/fonts" +PRIORITY = "optional" +LICENSE = "GPL" +PACKAGE_ARCH = "all" +PR = "r2" + +#SRC_URI = "http://www.mn-solutions.de/downloads/mnci/terminus-fonts.tar.bz2" -> 404 error +SRC_URI = "http://openzaurus.linuxtogo.org/download/3.5.4/sources/terminus-fonts.tar.bz2" +S = "${WORKDIR}/terminus-fonts" + +do_install() { + mkdir -p ${D}${palmqtdir}/lib/fonts + cp *.qpf ${D}${palmqtdir}/lib/fonts +} + +require qpf.inc diff --git a/packages/qpf-fonts/terminus.bb b/packages/qpf-fonts/terminus.bb deleted file mode 100644 index 868dd74e0d..0000000000 --- a/packages/qpf-fonts/terminus.bb +++ /dev/null @@ -1,18 +0,0 @@ -DESCRIPTION = "Qt/Embedded terminus font" -HOMEPAGE = "http://www.is-vn.bg/hamster/jimmy-en.html" -SECTION = "opie/fonts" -PRIORITY = "optional" -LICENSE = "GPL" -PACKAGE_ARCH = "all" -PR = "r2" - -#SRC_URI = "http://www.mn-solutions.de/downloads/mnci/terminus-fonts.tar.bz2" -> 404 error -SRC_URI = "http://openzaurus.linuxtogo.org/download/3.5.4/sources/terminus-fonts.tar.bz2" -S = "${WORKDIR}/terminus-fonts" - -do_install() { - mkdir -p ${D}${palmqtdir}/lib/fonts - cp *.qpf ${D}${palmqtdir}/lib/fonts -} - -require qpf.inc diff --git a/packages/tasks/task-qpe.bb b/packages/tasks/task-qpe.bb index 347a4525b8..c13b5d48ef 100644 --- a/packages/tasks/task-qpe.bb +++ b/packages/tasks/task-qpe.bb @@ -136,7 +136,7 @@ RDEPENDS_task-qpe-fonts = "\ qpf-helvetica \ qpf-unifont \ qpf-utopia \ - terminus" + qpf-terminus" RDEPENDS_task-qpe-settings += "\ qclockchange" -- cgit v1.2.3 From 77cb724357c5ced429a7c5445c4db6aa18fe84d7 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Tue, 29 Jan 2008 11:32:23 +0000 Subject: kxml2: Reworked to be build from source. xmlpull: Added recipe. --- packages/kxml2/files/.mtn2git_empty | 0 packages/kxml2/files/makefile.patch | 421 ++++++++++++++++++++++++++++++++++ packages/kxml2/kxml2_2.3.0.bb | 44 ++-- packages/xmlpull/.mtn2git_empty | 0 packages/xmlpull/files/.mtn2git_empty | 0 packages/xmlpull/files/makefile.patch | 411 +++++++++++++++++++++++++++++++++ packages/xmlpull/xmlpull_1.1.3.4c.bb | 35 +++ 7 files changed, 892 insertions(+), 19 deletions(-) create mode 100644 packages/kxml2/files/.mtn2git_empty create mode 100644 packages/kxml2/files/makefile.patch create mode 100644 packages/xmlpull/.mtn2git_empty create mode 100644 packages/xmlpull/files/.mtn2git_empty create mode 100644 packages/xmlpull/files/makefile.patch create mode 100644 packages/xmlpull/xmlpull_1.1.3.4c.bb diff --git a/packages/kxml2/files/.mtn2git_empty b/packages/kxml2/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/kxml2/files/makefile.patch b/packages/kxml2/files/makefile.patch new file mode 100644 index 0000000000..9119971a64 --- /dev/null +++ b/packages/kxml2/files/makefile.patch @@ -0,0 +1,421 @@ +Index: kxml2-2/src/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kxml2-2/src/Makefile 2007-11-30 04:17:21.000000000 +0100 +@@ -0,0 +1,416 @@ ++# ++# Makefile created at Fri Nov 30 04:17:22 2007, by mmake ++# ++ ++# Programs (with common options): ++SHELL = /bin/sh ++CP = cp ++RM = rm -f ++MV = mv -f ++SED = sed ++ETAGS = etags ++XARGS = xargs ++CAT = cat ++FIND = find ++CPP = cpp -C -P ++ ++INSTALL = install ++INSTALL_PROG = $(INSTALL) -m $(MODE_PROGS) ++INSTALL_FILE = $(INSTALL) -m $(MODE_FILES) ++INSTALL_DIR = $(INSTALL) -m $(MODE_DIRS) -d ++ ++# Install modes ++MODE_PROGS = 555 ++MODE_FILES = 444 ++MODE_DIRS = 2755 ++ ++# Build programs ++JAVAC = javac ++JAVADOC = gjavadoc ++JAR = fastjar ++ ++# Build flags ++JAVAC_FLAGS = -source 1.3 -target 1.1 ++JAVADOC_FLAGS = -version -author ++JAR_FLAGS = cvf ++JIKES_DEP_FLAG = +M ++ ++# ------------------------------------------------------------------- # ++ ++# Prefix for every install directory ++PREFIX = ++ ++# Where to start installing the class files. Set this to an empty value ++# if you dont want to install classes ++CLASS_DIR = $(PREFIX)classes ++ ++# The directory to install the jar file in. Set this to an empty value ++# if you dont want to install a jar file ++JAR_DIR = $(PREFIX)lib ++ ++# The directory to install the app bundle in. Set this to an empty value ++# if you dont want to install an app bundle ++BUNDLE_DIR = $(PREFIX)lib ++ ++ ++# The directory to install html files generated by javadoc ++DOC_DIR = $(PREFIX)doc/api-docs ++ ++# The directory to install script files in ++SCRIPT_DIR = $(PREFIX)bin ++ ++# ------------------------------------------------------------------- # ++ ++# The name of the jar file to install ++JAR_FILE = kxml2-2.3.0.jar ++ ++# ++# The VERSION variable below should be set to a value ++# that will be tested in the .xjava code and Info.plist. ++# ++VERSION = CHANGE_ME ++ ++# ------------------------------------------------------------------- # ++ ++# The name of the OS X Application Bundle to install ++BUNDLE_FILE = ++ ++# Folder containing App Bundle resources (Info.plist, *.icns, etc.) ++BUNDLE_RESOURCE_DIR = misc/macosx ++ ++# Items to copy to the Resources folder of the bundle ++BUNDLE_RESOURCES = $(addsuffix .icns, $(basename $(APP_FILE)) Document) ++ ++# Location of JavaApplicatonStub ++JAVA_STUB = /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub ++ ++# ------------------------------------------------------------------- # ++ ++# Resource files: ++# Extend the list to install other files of your choice ++RESOURCE_SRC := *.properties *.gif *.au ++ ++# Objects that should go into the jar file. (find syntax) ++JAR_OBJS := \( -name '*.class' -o -name '*.gif' -o -name "*.au" \ ++ -o -name '*.properties' \) ++ ++# Include the separate variables file if it exists ++MAKEFILE_VARS = makefile.vars ++VARS = $(wildcard $(MAKEFILE_VARS)) ++ifneq ($(VARS),) ++ include $(MAKEFILE_VARS) ++endif ++ ++ ++# Packages we should compile ++PACKAGES = \ ++ org.kxml2.wap.wml \ ++ org.kxml2.wap.wv \ ++ org.kxml2.wap \ ++ org.kxml2.io \ ++ org.kxml2.wap.syncml \ ++ org.kxml2.kdom ++ ++ ++# All packages that can be recursively compiled. ++ALL_PACKAGES = \ ++ org \ ++ org.kxml2 \ ++ $(PACKAGES) ++ ++ ++# Packages to generate docs for. ++JAVADOC_PACKAGES = $(PACKAGES) ++ ++ ++# Resource packages ++RESOURCES = ++ ++ ++# Directories with shell scripts ++SCRIPTS = ++ ++# ------------------------------------------------------------------- # ++ ++# A marker variable for the top level directory ++TOPLEVEL := . ++ ++# Subdirectories with java files: ++JAVA_DIRS := $(subst .,/,$(PACKAGES)) $(TOPLEVEL) ++ ++# Subdirectories with only resource files: ++RESOURCE_DIRS := $(subst .,/,$(RESOURCES)) ++ ++# All the .xjava source files: ++XJAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.xjava)) ++ ++# All the xjava files to build ++XJAVA_OBJS := $(XJAVA_SRC:.xjava=.java) ++ ++# Directory coresponding to a package ++PACKAGE_DIR = $(subst .,/,$(1)) ++ ++# All the (x)java files in a package ++PACKAGE_SRC = $(shell $(FIND) $(PACKAGE_DIR) \( -name '*.java' -or -name '*.xjava' \) ) ++ ++# All the classes to build in a package ++PACKAGE_OBJS = $(patsubst %.java,%.class,$(PACKAGE_SRC: %.xjava=%.java)) ++ ++# All the .java source files: ++JAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.java)) ++JAVA_SRC := $(XJAVA_OBJS) $(JAVA_SRC) ++ ++# Dependency files: ++DEPEND_OBJS := $(JAVA_SRC:.java=.u) ++ ++# The intermediate java files and main classes we should build: ++JAVA_OBJS := $(XJAVA_OBJS) $(JAVA_SRC:.java=.class) ++ ++# Search for resource files in both JAVA_DIRS and RESOURCE_DIRS ++RESOURCE_OBJS := $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \ ++ $(wildcard $(foreach file, $(RESOURCE_SRC), \ ++ $(dir)/$(file)))) ++ ++# All the shell scripts source ++SCRIPT_SRCS := $(foreach dir, $(SCRIPTS), $(wildcard $(dir)/*.sh)) ++# All shell scripts we should install ++SCRIPT_OBJS := $(SCRIPT_SRCS:.sh=) ++ ++# All the files to install into CLASS_DIR ++INSTALL_OBJS := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.class)) ++# Escape inner class delimiter $ ++INSTALL_OBJS := $(subst $$,\$$,$(INSTALL_OBJS)) ++# Add the resource files to be installed as well ++INSTALL_OBJS := $(INSTALL_OBJS) $(RESOURCE_OBJS) ++ ++ ++# ------------------------------------------------------------------- # ++ ++ ++define check-exit ++|| exit 1 ++ ++endef ++ ++ ++# ----------- ++# Build Rules ++# ----------- ++ ++%.java: %.xjava ++ $(CPP) -D$(VERSION) $< $@ ++ ++%.class: %.java ++ $(JAVAC) $(JAVAC_FLAGS) $< ++ ++%.jar: $(JAVA_OBJS) $(RESOURCE_OBJS) ++ $(FIND) $(TOPLEVEL) $(JAR_OBJS) -print | $(XARGS) \ ++ $(JAR) $(JAR_FLAGS) $(JAR_FILE) ++ ++%.u: %.java ++ $(JAVAC) $(JIKES_DEP_FLAG) $< ++ ++ ++# ------- ++# Targets ++# ------- ++ ++.PHONY: all jar install uninstall doc clean depend tags bundle \ ++ help $(ALL_PACKAGES) ++ ++all:: $(JAVA_OBJS) ++ ++help: ++ @echo "Usage: make {all|jar|srcjar|bundle|install|uninstall|doc|clean|depend|tags|PACKAGE_NAME}" ++ @echo " all: build all classes" ++ @echo " jar: build jar file" ++ @echo " srcjar: build source jar file" ++ @echo " bundle: build OS X app bundle" ++ @echo " install: install classes into $(CLASS_DIR)" ++ @echo " jar into $(JAR_DIR)" ++ @echo " bundle into $(BUNDLE_DIR)" ++ @echo " javadocs into $(DOC_DIR)" ++ @echo " scripts into $(SCRIPT_DIR)" ++ @echo " uninstall: remove installed files" ++ @echo " doc: generate api docs from javadoc comments" ++ @echo " clean: remove classes and temporary files" ++ @echo " depend: build class dependency info using jikes" ++ @echo " tags: build emacs tags file" ++ @echo " PACKAGE_NAME: builds all classes in this package and any subpackages." ++ ++# Jar target ++ifneq ($(strip $(JAR_FILE)),) ++jar: $(JAR_FILE) ++ifneq ($(strip $(JAR_DIR)),) ++install:: $(JAR_FILE) ++ @echo "===> [Installing jar file, $(JAR_FILE) in $(JAR_DIR)] " ++ $(INSTALL_DIR) $(JAR_DIR) $(check-exit) ++ $(INSTALL_FILE) $(JAR_FILE) $(JAR_DIR) $(check-exit) ++uninstall:: ++ @echo "===> [Removing jar file, $(JAR_FILE) from $(JAR_DIR)] " ++ $(RM) $(JAR_DIR)/$(JAR_FILE) $(check-exit) ++else ++install:: ++ @echo "No jar install dir defined" ++endif ++clean:: ++ $(RM) $(JAR_FILE) ++else ++jar: ++ @echo "No jar file defined" ++endif ++ ++SRC_JAR_FILE := $(basename $(JAR_FILE))-src$(suffix $JAR_FILE) ++ ++# Source jar target ++srcjar : $(SRC_JAR_FILE) ++$(SRC_JAR_FILE): $(JAVA_SRC) $(RESOURCE_OBJS) ++ $(FIND) $(TOPLEVEL) $(JAR_OBJS: .class=.java) -print | $(XARGS) \ ++ $(JAR) $(JAR_FLAGS) $@ ++ ++# Bundle target ++ifneq ($(strip $(BUNDLE_FILE)),) ++bundle: $(BUNDLE_FILE) ++$(BUNDLE_FILE) : $(JAR_FILE) ++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/Resources/Java $(check-exit) ++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/MacOS $(check-exit) ++ $(INSTALL_PROG) $(JAVA_STUB) $(BUNDLE_FILE)/Contents/MacOS/ \ ++ $(check-exit) ++ ( $(CAT) $(BUNDLE_RESOURCE_DIR)/Info.plist | $(SED) -e \ ++ s/VERSION/$(VERSION)/ >98762infoplist876 ) $(check-exit) ++ $(INSTALL_FILE) 98762infoplist876 \ ++ $(BUNDLE_FILE)/Contents/Info.plist $(check-exit) ++ $(RM) 98762infoplist876 $(check-exit) ++ $(INSTALL_FILE) $(JAR_FILE) $(BUNDLE_FILE)/Contents/Resources/Java ++ checkexit="";for f in $(BUNDLE_RESOURCES); do \ ++ $(INSTALL_FILE) $(BUNDLE_RESOURCE_DIR)$$f $(BUNDLE_FILE)/Contents/Resources/ \ ++ || checkexit=$?; \ ++ done; test -z $$checkexit ++ ++ifneq ($(strip $(BUNDLE_DIR)),) ++# This is probably bad, but I don't know how else to do it ++install:: $(BUNDLE_FILE) ++ @echo "===> [Installing app bundle, $(BUNDLE_FILE) in $(BUNDLE_DIR)] " ++ $(INSTALL_DIR) $(BUNDLE_DIR) $(check-exit) ++ $(CP) -R $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit) ++ $(INSTALL_FILE) $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit) ++uninstall:: ++ @echo "===> [Removing bundle file, $(BUNDLE_FILE) from $(BUNDLE_DIR)] " ++ $(RM) -r $(BUNDLE_DIR)/$(BUNDLE_FILE) $(check-exit) ++else ++install:: ++ @echo "No bundle install dir defined" ++endif ++clean:: ++ $(RM) -r $(BUNDLE_FILE) ++else ++bundle: ++ @echo "No bundle file defined" ++endif ++ ++ ++# Install target for Classes and Resources ++ifneq ($(strip $(CLASS_DIR)),) ++install:: $(JAVA_OBJS) ++ @echo "===> [Installing classes in $(CLASS_DIR)] " ++ $(INSTALL_DIR) $(CLASS_DIR) $(check-exit) ++ $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \ ++ $(INSTALL_DIR) $(CLASS_DIR)/$(dir) $(check-exit)) ++ $(foreach file, $(INSTALL_OBJS), \ ++ $(INSTALL_FILE) $(file) $(CLASS_DIR)/$(file) \ ++ $(check-exit)) ++uninstall:: ++ @echo "===> [Removing class-files from $(CLASS_DIR)] " ++ $(foreach file, $(INSTALL_OBJS), \ ++ $(RM) $(CLASS_DIR)/$(file) \ ++ $(check-exit)) ++else ++# Print a warning here if you like. (No class install dir defined) ++endif ++ ++ ++ ++# Depend target ++ifeq ($(findstring jikes,$(JAVAC)),jikes) ++depend: $(XJAVA_OBJS) $(DEPEND_OBJS) ++ ( $(CAT) $(DEPEND_OBJS) | $(SED) -e '/\.class$$/d' \ ++ -e '/.*$$.*/d' > $(MAKEFILE_DEPEND); $(RM) $(DEPEND_OBJS); ) ++else ++depend: ++ @echo "mmake needs the jikes compiler to build class dependencies" ++endif ++ ++ ++ ++# Doc target ++ifneq ($(strip $(JAVADOC_PACKAGES)),) ++doc: $(JAVA_SRC) ++ @echo "===> [Installing java documentation in $(DOC_DIR)] " ++ $(INSTALL_DIR) $(DOC_DIR) $(check-exit) ++ $(JAVADOC) $(JAVADOC_FLAGS) -d $(DOC_DIR) $(JAVADOC_PACKAGES) ++else ++doc: ++ @echo "You must put your source files in a package to run make doc" ++endif ++ ++ ++ ++# Script target ++ifneq ($(strip $(SCRIPT_OBJS)),) ++all:: $(SCRIPT_OBJS) ++ifneq ($(strip $(SCRIPT_DIR)),) ++install:: $(SCRIPT_OBJS) ++ @echo "===> [Installing shell-scripts in $(SCRIPT_DIR)] " ++ $(INSTALL_DIR) $(SCRIPT_DIR) $(check-exit) ++ $(foreach file, $(SCRIPT_OBJS), \ ++ $(INSTALL_PROG) $(file) $(SCRIPT_DIR) $(check-exit)) ++uninstall:: ++ @echo "===> [Removing shell-scripts from $(SCRIPT_DIR)] " ++ $(foreach file, $(SCRIPT_OBJS), \ ++ $(RM) $(SCRIPT_DIR)/$(file) $(check-exit)) ++else ++# Print a warning here if you like. (No script install dir defined) ++endif ++clean:: ++ rm -f $(SCRIPT_OBJS) ++endif ++ ++ ++ ++# Tag target ++tags: ++ @echo "Tagging" ++ $(ETAGS) $(filter-out $(XJAVA_OBJS), $(JAVA_SRC)) $(XJAVA_SRC) ++ ++ ++ ++# Various cleanup routines ++clean:: ++ $(FIND) . \( -name '*~' -o -name '*.class' \) -print | \ ++ $(XARGS) $(RM) ++ $(FIND) . -name '*.u' -print | $(XARGS) $(RM) ++ ++ifneq ($(strip $(XJAVA_SRC)),) ++clean:: ++ $(RM) $(XJAVA_OBJS) ++endif ++ ++# ---------------------------------------- ++# Include the dependency graph if it exist ++# ---------------------------------------- ++MAKEFILE_DEPEND = makefile.dep ++DEPEND = $(wildcard $(MAKEFILE_DEPEND)) ++ifneq ($(DEPEND),) ++ include $(MAKEFILE_DEPEND) ++endif ++ ++#package targets ++org : $(call PACKAGE_OBJS,org) ++org.kxml2 : $(call PACKAGE_OBJS,org.kxml2) ++org.kxml2.wap.wml : $(call PACKAGE_OBJS,org.kxml2.wap.wml) ++org.kxml2.wap.wv : $(call PACKAGE_OBJS,org.kxml2.wap.wv) ++org.kxml2.wap : $(call PACKAGE_OBJS,org.kxml2.wap) ++org.kxml2.io : $(call PACKAGE_OBJS,org.kxml2.io) ++org.kxml2.wap.syncml : $(call PACKAGE_OBJS,org.kxml2.wap.syncml) ++org.kxml2.kdom : $(call PACKAGE_OBJS,org.kxml2.kdom) ++ diff --git a/packages/kxml2/kxml2_2.3.0.bb b/packages/kxml2/kxml2_2.3.0.bb index 7682e84311..994a0a5799 100644 --- a/packages/kxml2/kxml2_2.3.0.bb +++ b/packages/kxml2/kxml2_2.3.0.bb @@ -1,32 +1,38 @@ -DESCRIPTION = "kxml2 is a small XML pull parser" -HOMEPAGE = "http://kxml.sourceforge.net/" -LICENSE = "BSD" +DESCRIPTION = "A small XML pull parser, specially designed for constrained environments such as Applets, Personal Java or MIDP devices" +HOMEPAGE = "http://kxml.sourceforge.net" PRIORITY = "optional" -PR = "r0" +SECTION = "libs" +LICENSE = "BSD CPL LGPL" +PR = "r1" +inherit java-library -JAR = ${PN}-${PV}.jar +DEPENDS = "xmlpull" +RDEPENDS = "libxmlpull-java" -SRC_URI = "http://downloads.sourceforge.net/kxml/${JAR}" +S = "${WORKDIR}" +JAR = "${PN}-${PV}.jar" -do_unpack() { - : -} - -do_install() { +SRC_URI = "\ + http://belnet.dl.sourceforge.net/sourceforge/kxml/${PN}-src-${PV}.zip \ + file://makefile.patch;patch=1 \ + " -install -d ${D}${datadir}/java -install -m 0644 ${DL_DIR}/${JAR} ${D}${datadir}/java +do_compile() { + oe_runmake -C src \ + JAVAC_FLAGS="-sourcepath . -cp ${STAGING_DATADIR}/java/xmlpull.jar" \ + JAR="oefatal \"No jar invocation expected here.\"" \ + oe_runmake -C src \ + JAVAC="oefatal \"No Java compilation expected here.\"" \ + jar } do_stage() { - -install -d ${STAGING_DATADIR}/java -install -m 0644 ${DL_DIR}/${JAR} ${STAGING_DATADIR}/java - + oe_jarinstall -s src/${JAR} ${PN}.jar } - -FILES_${PN} = "${datadir}/java/${JAR}" +do_install() { + oe_jarinstall src/${JAR} ${PN}.jar +} diff --git a/packages/xmlpull/.mtn2git_empty b/packages/xmlpull/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/xmlpull/files/.mtn2git_empty b/packages/xmlpull/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/xmlpull/files/makefile.patch b/packages/xmlpull/files/makefile.patch new file mode 100644 index 0000000000..6b0af10d8c --- /dev/null +++ b/packages/xmlpull/files/makefile.patch @@ -0,0 +1,411 @@ +Index: xmlpull_1_1_3_4c/src/java/api/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ xmlpull_1_1_3_4c/src/java/api/Makefile 2007-11-30 03:49:02.000000000 +0100 +@@ -0,0 +1,406 @@ ++# ++# Makefile created at Fri Nov 30 03:45:26 2007, by mmake ++# ++ ++# Programs (with common options): ++SHELL = /bin/sh ++CP = cp ++RM = rm -f ++MV = mv -f ++SED = sed ++ETAGS = etags ++XARGS = xargs ++CAT = cat ++FIND = find ++CPP = cpp -C -P ++ ++INSTALL = install ++INSTALL_PROG = $(INSTALL) -m $(MODE_PROGS) ++INSTALL_FILE = $(INSTALL) -m $(MODE_FILES) ++INSTALL_DIR = $(INSTALL) -m $(MODE_DIRS) -d ++ ++# Install modes ++MODE_PROGS = 555 ++MODE_FILES = 444 ++MODE_DIRS = 2755 ++ ++# Build programs ++JAVAC = javac ++JAVADOC = gjavadoc ++JAR = fastjar ++ ++# Build flags ++JAVAC_FLAGS = -source 1.3 -target 1.1 ++JAVADOC_FLAGS = -version -author ++JAR_FLAGS = cvf ++JIKES_DEP_FLAG = +M ++ ++# ------------------------------------------------------------------- # ++ ++# Prefix for every install directory ++PREFIX = ++ ++# Where to start installing the class files. Set this to an empty value ++# if you dont want to install classes ++CLASS_DIR = $(PREFIX)classes ++ ++# The directory to install the jar file in. Set this to an empty value ++# if you dont want to install a jar file ++JAR_DIR = $(PREFIX)lib ++ ++# The directory to install the app bundle in. Set this to an empty value ++# if you dont want to install an app bundle ++BUNDLE_DIR = $(PREFIX)lib ++ ++ ++# The directory to install html files generated by javadoc ++DOC_DIR = $(PREFIX)doc/api-docs ++ ++# The directory to install script files in ++SCRIPT_DIR = $(PREFIX)bin ++ ++# ------------------------------------------------------------------- # ++ ++# The name of the jar file to install ++JAR_FILE = xmlpull-1.1.3.4c.jar ++ ++# ++# The VERSION variable below should be set to a value ++# that will be tested in the .xjava code and Info.plist. ++# ++VERSION = CHANGE_ME ++ ++# ------------------------------------------------------------------- # ++ ++# The name of the OS X Application Bundle to install ++BUNDLE_FILE = ++ ++# Folder containing App Bundle resources (Info.plist, *.icns, etc.) ++BUNDLE_RESOURCE_DIR = misc/macosx ++ ++# Items to copy to the Resources folder of the bundle ++BUNDLE_RESOURCES = $(addsuffix .icns, $(basename $(APP_FILE)) Document) ++ ++# Location of JavaApplicatonStub ++JAVA_STUB = /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub ++ ++# ------------------------------------------------------------------- # ++ ++# Resource files: ++# Extend the list to install other files of your choice ++RESOURCE_SRC := *.properties *.gif *.au ++ ++# Objects that should go into the jar file. (find syntax) ++JAR_OBJS := \( -name '*.class' -o -name '*.gif' -o -name "*.au" \ ++ -o -name '*.properties' \) ++ ++# Include the separate variables file if it exists ++MAKEFILE_VARS = makefile.vars ++VARS = $(wildcard $(MAKEFILE_VARS)) ++ifneq ($(VARS),) ++ include $(MAKEFILE_VARS) ++endif ++ ++ ++# Packages we should compile ++PACKAGES = \ ++ org.xmlpull.v1 ++ ++ ++# All packages that can be recursively compiled. ++ALL_PACKAGES = \ ++ org \ ++ org.xmlpull \ ++ $(PACKAGES) ++ ++ ++# Packages to generate docs for. ++JAVADOC_PACKAGES = $(PACKAGES) ++ ++ ++# Resource packages ++RESOURCES = ++ ++ ++# Directories with shell scripts ++SCRIPTS = ++ ++# ------------------------------------------------------------------- # ++ ++# A marker variable for the top level directory ++TOPLEVEL := . ++ ++# Subdirectories with java files: ++JAVA_DIRS := $(subst .,/,$(PACKAGES)) $(TOPLEVEL) ++ ++# Subdirectories with only resource files: ++RESOURCE_DIRS := $(subst .,/,$(RESOURCES)) ++ ++# All the .xjava source files: ++XJAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.xjava)) ++ ++# All the xjava files to build ++XJAVA_OBJS := $(XJAVA_SRC:.xjava=.java) ++ ++# Directory coresponding to a package ++PACKAGE_DIR = $(subst .,/,$(1)) ++ ++# All the (x)java files in a package ++PACKAGE_SRC = $(shell $(FIND) $(PACKAGE_DIR) \( -name '*.java' -or -name '*.xjava' \) ) ++ ++# All the classes to build in a package ++PACKAGE_OBJS = $(patsubst %.java,%.class,$(PACKAGE_SRC: %.xjava=%.java)) ++ ++# All the .java source files: ++JAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.java)) ++JAVA_SRC := $(XJAVA_OBJS) $(JAVA_SRC) ++ ++# Dependency files: ++DEPEND_OBJS := $(JAVA_SRC:.java=.u) ++ ++# The intermediate java files and main classes we should build: ++JAVA_OBJS := $(XJAVA_OBJS) $(JAVA_SRC:.java=.class) ++ ++# Search for resource files in both JAVA_DIRS and RESOURCE_DIRS ++RESOURCE_OBJS := $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \ ++ $(wildcard $(foreach file, $(RESOURCE_SRC), \ ++ $(dir)/$(file)))) ++ ++# All the shell scripts source ++SCRIPT_SRCS := $(foreach dir, $(SCRIPTS), $(wildcard $(dir)/*.sh)) ++# All shell scripts we should install ++SCRIPT_OBJS := $(SCRIPT_SRCS:.sh=) ++ ++# All the files to install into CLASS_DIR ++INSTALL_OBJS := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.class)) ++# Escape inner class delimiter $ ++INSTALL_OBJS := $(subst $$,\$$,$(INSTALL_OBJS)) ++# Add the resource files to be installed as well ++INSTALL_OBJS := $(INSTALL_OBJS) $(RESOURCE_OBJS) ++ ++ ++# ------------------------------------------------------------------- # ++ ++ ++define check-exit ++|| exit 1 ++ ++endef ++ ++ ++# ----------- ++# Build Rules ++# ----------- ++ ++%.java: %.xjava ++ $(CPP) -D$(VERSION) $< $@ ++ ++%.class: %.java ++ $(JAVAC) $(JAVAC_FLAGS) $< ++ ++%.jar: $(JAVA_OBJS) $(RESOURCE_OBJS) ++ $(FIND) $(TOPLEVEL) $(JAR_OBJS) -print | $(XARGS) \ ++ $(JAR) $(JAR_FLAGS) $(JAR_FILE) ++ ++%.u: %.java ++ $(JAVAC) $(JIKES_DEP_FLAG) $< ++ ++ ++# ------- ++# Targets ++# ------- ++ ++.PHONY: all jar install uninstall doc clean depend tags bundle \ ++ help $(ALL_PACKAGES) ++ ++all:: $(JAVA_OBJS) ++ ++help: ++ @echo "Usage: make {all|jar|srcjar|bundle|install|uninstall|doc|clean|depend|tags|PACKAGE_NAME}" ++ @echo " all: build all classes" ++ @echo " jar: build jar file" ++ @echo " srcjar: build source jar file" ++ @echo " bundle: build OS X app bundle" ++ @echo " install: install classes into $(CLASS_DIR)" ++ @echo " jar into $(JAR_DIR)" ++ @echo " bundle into $(BUNDLE_DIR)" ++ @echo " javadocs into $(DOC_DIR)" ++ @echo " scripts into $(SCRIPT_DIR)" ++ @echo " uninstall: remove installed files" ++ @echo " doc: generate api docs from javadoc comments" ++ @echo " clean: remove classes and temporary files" ++ @echo " depend: build class dependency info using jikes" ++ @echo " tags: build emacs tags file" ++ @echo " PACKAGE_NAME: builds all classes in this package and any subpackages." ++ ++# Jar target ++ifneq ($(strip $(JAR_FILE)),) ++jar: $(JAR_FILE) ++ifneq ($(strip $(JAR_DIR)),) ++install:: $(JAR_FILE) ++ @echo "===> [Installing jar file, $(JAR_FILE) in $(JAR_DIR)] " ++ $(INSTALL_DIR) $(JAR_DIR) $(check-exit) ++ $(INSTALL_FILE) $(JAR_FILE) $(JAR_DIR) $(check-exit) ++uninstall:: ++ @echo "===> [Removing jar file, $(JAR_FILE) from $(JAR_DIR)] " ++ $(RM) $(JAR_DIR)/$(JAR_FILE) $(check-exit) ++else ++install:: ++ @echo "No jar install dir defined" ++endif ++clean:: ++ $(RM) $(JAR_FILE) ++else ++jar: ++ @echo "No jar file defined" ++endif ++ ++SRC_JAR_FILE := $(basename $(JAR_FILE))-src$(suffix $JAR_FILE) ++ ++# Source jar target ++srcjar : $(SRC_JAR_FILE) ++$(SRC_JAR_FILE): $(JAVA_SRC) $(RESOURCE_OBJS) ++ $(FIND) $(TOPLEVEL) $(JAR_OBJS: .class=.java) -print | $(XARGS) \ ++ $(JAR) $(JAR_FLAGS) $@ ++ ++# Bundle target ++ifneq ($(strip $(BUNDLE_FILE)),) ++bundle: $(BUNDLE_FILE) ++$(BUNDLE_FILE) : $(JAR_FILE) ++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/Resources/Java $(check-exit) ++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/MacOS $(check-exit) ++ $(INSTALL_PROG) $(JAVA_STUB) $(BUNDLE_FILE)/Contents/MacOS/ \ ++ $(check-exit) ++ ( $(CAT) $(BUNDLE_RESOURCE_DIR)/Info.plist | $(SED) -e \ ++ s/VERSION/$(VERSION)/ >98762infoplist876 ) $(check-exit) ++ $(INSTALL_FILE) 98762infoplist876 \ ++ $(BUNDLE_FILE)/Contents/Info.plist $(check-exit) ++ $(RM) 98762infoplist876 $(check-exit) ++ $(INSTALL_FILE) $(JAR_FILE) $(BUNDLE_FILE)/Contents/Resources/Java ++ checkexit="";for f in $(BUNDLE_RESOURCES); do \ ++ $(INSTALL_FILE) $(BUNDLE_RESOURCE_DIR)$$f $(BUNDLE_FILE)/Contents/Resources/ \ ++ || checkexit=$?; \ ++ done; test -z $$checkexit ++ ++ifneq ($(strip $(BUNDLE_DIR)),) ++# This is probably bad, but I don't know how else to do it ++install:: $(BUNDLE_FILE) ++ @echo "===> [Installing app bundle, $(BUNDLE_FILE) in $(BUNDLE_DIR)] " ++ $(INSTALL_DIR) $(BUNDLE_DIR) $(check-exit) ++ $(CP) -R $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit) ++ $(INSTALL_FILE) $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit) ++uninstall:: ++ @echo "===> [Removing bundle file, $(BUNDLE_FILE) from $(BUNDLE_DIR)] " ++ $(RM) -r $(BUNDLE_DIR)/$(BUNDLE_FILE) $(check-exit) ++else ++install:: ++ @echo "No bundle install dir defined" ++endif ++clean:: ++ $(RM) -r $(BUNDLE_FILE) ++else ++bundle: ++ @echo "No bundle file defined" ++endif ++ ++ ++# Install target for Classes and Resources ++ifneq ($(strip $(CLASS_DIR)),) ++install:: $(JAVA_OBJS) ++ @echo "===> [Installing classes in $(CLASS_DIR)] " ++ $(INSTALL_DIR) $(CLASS_DIR) $(check-exit) ++ $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \ ++ $(INSTALL_DIR) $(CLASS_DIR)/$(dir) $(check-exit)) ++ $(foreach file, $(INSTALL_OBJS), \ ++ $(INSTALL_FILE) $(file) $(CLASS_DIR)/$(file) \ ++ $(check-exit)) ++uninstall:: ++ @echo "===> [Removing class-files from $(CLASS_DIR)] " ++ $(foreach file, $(INSTALL_OBJS), \ ++ $(RM) $(CLASS_DIR)/$(file) \ ++ $(check-exit)) ++else ++# Print a warning here if you like. (No class install dir defined) ++endif ++ ++ ++ ++# Depend target ++ifeq ($(findstring jikes,$(JAVAC)),jikes) ++depend: $(XJAVA_OBJS) $(DEPEND_OBJS) ++ ( $(CAT) $(DEPEND_OBJS) | $(SED) -e '/\.class$$/d' \ ++ -e '/.*$$.*/d' > $(MAKEFILE_DEPEND); $(RM) $(DEPEND_OBJS); ) ++else ++depend: ++ @echo "mmake needs the jikes compiler to build class dependencies" ++endif ++ ++ ++ ++# Doc target ++ifneq ($(strip $(JAVADOC_PACKAGES)),) ++doc: $(JAVA_SRC) ++ @echo "===> [Installing java documentation in $(DOC_DIR)] " ++ $(INSTALL_DIR) $(DOC_DIR) $(check-exit) ++ $(JAVADOC) $(JAVADOC_FLAGS) -d $(DOC_DIR) $(JAVADOC_PACKAGES) ++else ++doc: ++ @echo "You must put your source files in a package to run make doc" ++endif ++ ++ ++ ++# Script target ++ifneq ($(strip $(SCRIPT_OBJS)),) ++all:: $(SCRIPT_OBJS) ++ifneq ($(strip $(SCRIPT_DIR)),) ++install:: $(SCRIPT_OBJS) ++ @echo "===> [Installing shell-scripts in $(SCRIPT_DIR)] " ++ $(INSTALL_DIR) $(SCRIPT_DIR) $(check-exit) ++ $(foreach file, $(SCRIPT_OBJS), \ ++ $(INSTALL_PROG) $(file) $(SCRIPT_DIR) $(check-exit)) ++uninstall:: ++ @echo "===> [Removing shell-scripts from $(SCRIPT_DIR)] " ++ $(foreach file, $(SCRIPT_OBJS), \ ++ $(RM) $(SCRIPT_DIR)/$(file) $(check-exit)) ++else ++# Print a warning here if you like. (No script install dir defined) ++endif ++clean:: ++ rm -f $(SCRIPT_OBJS) ++endif ++ ++ ++ ++# Tag target ++tags: ++ @echo "Tagging" ++ $(ETAGS) $(filter-out $(XJAVA_OBJS), $(JAVA_SRC)) $(XJAVA_SRC) ++ ++ ++ ++# Various cleanup routines ++clean:: ++ $(FIND) . \( -name '*~' -o -name '*.class' \) -print | \ ++ $(XARGS) $(RM) ++ $(FIND) . -name '*.u' -print | $(XARGS) $(RM) ++ ++ifneq ($(strip $(XJAVA_SRC)),) ++clean:: ++ $(RM) $(XJAVA_OBJS) ++endif ++ ++# ---------------------------------------- ++# Include the dependency graph if it exist ++# ---------------------------------------- ++MAKEFILE_DEPEND = makefile.dep ++DEPEND = $(wildcard $(MAKEFILE_DEPEND)) ++ifneq ($(DEPEND),) ++ include $(MAKEFILE_DEPEND) ++endif ++ ++#package targets ++org : $(call PACKAGE_OBJS,org) ++org.xmlpull : $(call PACKAGE_OBJS,org.xmlpull) ++org.xmlpull.v1 : $(call PACKAGE_OBJS,org.xmlpull.v1) ++ diff --git a/packages/xmlpull/xmlpull_1.1.3.4c.bb b/packages/xmlpull/xmlpull_1.1.3.4c.bb new file mode 100644 index 0000000000..1ba09f79b6 --- /dev/null +++ b/packages/xmlpull/xmlpull_1.1.3.4c.bb @@ -0,0 +1,35 @@ +DESCRIPTION = "XML pull parser API" +HOMEPAGE = "http://www.xmlpull.org" +PRIORITY = "optional" +SECTION = "libs" +LICENSE = "public domain" +PR = "r1" + +inherit java-library + +S = "${WORKDIR}/${PN}_1_1_3_4c" + +JAR = "${PN}-${PV}.jar" + +SRC_URI = "\ + http://xmlpull.org/v1/download/xmlpull_1_1_3_4c_src.tgz \ + file://makefile.patch;patch=1 \ + " + +do_compile() { + oe_runmake -C src/java/api \ + JAVAC_FLAGS="-sourcepath ." \ + JAR="oefatal \"No jar invocation expected here.\"" \ + + oe_runmake -C src/java/api \ + JAVAC="oefatal \"No Java compilation expected here.\"" \ + jar +} + +do_stage() { + oe_jarinstall -s ${S}/src/java/api/${JAR} ${PN}.jar +} + +do_install() { + oe_jarinstall src/java/api/${JAR} ${PN}.jar +} -- cgit v1.2.3 From 38b67b4fae5ff0e168f80c157e372ede8ca4e8f1 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Tue, 29 Jan 2008 11:58:52 +0000 Subject: libxml2: Provide common include - added 2.6.27 recipe (for Maemo) - changed 2.6.29 recipe to use the include chinook-compat.conf: - fixed version preference for libxml2 --- conf/distro/chinook-compat.conf | 3 +-- packages/libxml/libxml2.inc | 29 +++++++++++++++++++++++++++++ packages/libxml/libxml2_2.6.27.bb | 3 +++ packages/libxml/libxml2_2.6.29.bb | 30 ++---------------------------- 4 files changed, 35 insertions(+), 30 deletions(-) create mode 100644 packages/libxml/libxml2.inc create mode 100644 packages/libxml/libxml2_2.6.27.bb diff --git a/conf/distro/chinook-compat.conf b/conf/distro/chinook-compat.conf index 581d4f31d0..f0e1ec2ad8 100644 --- a/conf/distro/chinook-compat.conf +++ b/conf/distro/chinook-compat.conf @@ -87,8 +87,7 @@ PREFERRED_VERSION_gtk+ = "2.10.14" PREFERRED_VERSION_gnome-vfs = "2.16" # 3.9.1 would be correct PREFERRED_VERSION_gtkhtml-3.8 = "3.8.2" -# 2.6.27 would be correct -PREFERRED_VERSION_libxml = "2.6.29" +PREFERRED_VERSION_libxml2 = "2.6.27" # 2.16 would be correct PREFERRED_VERSION_gconf = "2.6.1" diff --git a/packages/libxml/libxml2.inc b/packages/libxml/libxml2.inc new file mode 100644 index 0000000000..3f83f76ed5 --- /dev/null +++ b/packages/libxml/libxml2.inc @@ -0,0 +1,29 @@ +DESCRIPTION = "GNOME XML Parser library" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "MIT" + +SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz" + +inherit autotools pkgconfig binconfig + +EXTRA_OECONF = "--without-python --without-debug --without-legacy --without-catalog --without-docbook --with-c14n" + +export LDFLAGS += "-ldl" + +do_stage() { + autotools_stage_all + install -d ${STAGING_DATADIR}/aclocal/ + install -d ${STAGING_BINDIR_CROSS} + + install -m 0644 libxml.m4 ${STAGING_DATADIR}/aclocal/ + #this is need it by php during its install + install -m 0755 xml2-config ${STAGING_BINDIR_CROSS} +} + +DEBIANNAME_${PN} = "libxml2" + +PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-utils ${PN} ${PN}-doc ${PN}-locale" + +FILES_${PN}-dev += "${bindir}/*-config" +FILES_${PN}-utils += "${bindir}/*" diff --git a/packages/libxml/libxml2_2.6.27.bb b/packages/libxml/libxml2_2.6.27.bb new file mode 100644 index 0000000000..2a85ce8956 --- /dev/null +++ b/packages/libxml/libxml2_2.6.27.bb @@ -0,0 +1,3 @@ +# You want this old version for compatibility with Maemo OS2008. +require libxml2.inc + diff --git a/packages/libxml/libxml2_2.6.29.bb b/packages/libxml/libxml2_2.6.29.bb index 6f1c8632b1..b366a8278c 100644 --- a/packages/libxml/libxml2_2.6.29.bb +++ b/packages/libxml/libxml2_2.6.29.bb @@ -1,30 +1,4 @@ -DESCRIPTION = "GNOME XML Parser library" -SECTION = "libs" -PRIORITY = "optional" -LICENSE = "MIT" -PR = "r5" - -SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz" - -inherit autotools pkgconfig binconfig - -EXTRA_OECONF = "--without-python --without-debug --without-legacy --without-catalog --without-docbook --with-c14n" - -export LDFLAGS += "-ldl" +require libxml2.inc -do_stage() { - autotools_stage_all - install -d ${STAGING_DATADIR}/aclocal/ - install -d ${STAGING_BINDIR_CROSS} - - install -m 0644 libxml.m4 ${STAGING_DATADIR}/aclocal/ - #this is need it by php during its install - install -m 0755 xml2-config ${STAGING_BINDIR_CROSS} -} - -DEBIANNAME_${PN} = "libxml2" - -PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-utils ${PN} ${PN}-doc ${PN}-locale" +PR = "r5" -FILES_${PN}-dev += "${bindir}/*-config" -FILES_${PN}-utils += "${bindir}/*" -- cgit v1.2.3 From 4f0126c42b47a09b2f360f761c76fc35bb874d0e Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 29 Jan 2008 12:32:49 +0000 Subject: integrate qpf fonts into "font-update-common" framework. partly closes 2430. --- packages/qpf-fonts/qpf.inc | 10 +++++----- packages/qte-fonts-common/qte-fonts-common_3.3.5.bb | 15 +++++++++------ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/qpf-fonts/qpf.inc b/packages/qpf-fonts/qpf.inc index 67761bd4be..7597b436be 100644 --- a/packages/qpf-fonts/qpf.inc +++ b/packages/qpf-fonts/qpf.inc @@ -1,4 +1,4 @@ -PACKAGE_ARCH = "all" +RDEPENDS = "font-update-common qte-fonts-common" do_configure() { : @@ -9,13 +9,11 @@ do_compile() { } pkg_postinst_fonts() { -. /etc/profile -${sbindir}/update-qtfontdir + update-fonts } pkg_postrm_fonts() { -. /etc/profile -${sbindir}/update-qtfontdir -f + update-fonts } python populate_packages_prepend() { @@ -30,3 +28,5 @@ python populate_packages_prepend() { description=pkgdescription, postinst=postinst, postrm=postrm, recursive=True, hook=None, extra_depends='qpf-font-common') } + +PACKAGE_ARCH = "all" diff --git a/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb b/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb index 479ed55bb8..02d0663c3e 100644 --- a/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb +++ b/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb @@ -1,12 +1,14 @@ DESCRIPTION= "Tools to update the Qt fontdir" +HOMEPAGE = "http://www.trolltech.com" SECTION = "opie/base" LICENSE = "GPL QPL" -PACKAGE_ARCH = "all" -HOMEPAGE = "http://www.trolltech.com" -PR = "r3" +RDEPENDS = "font-update-common" +RDEPENDS_qte-font-common = "" +PR = "r4" + +SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-free-${PV}.tar.bz2 \ + file://update-qtfontdir" -SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-free-${PV}.tar.bz2" -SRC_URI += "file://update-qtfontdir" S = "${WORKDIR}/qt-embedded-free-${PV}" do_compile() { @@ -31,7 +33,6 @@ do_install() { PACKAGES = "qte-fonts-common" FILES_${PN} = "${sbindir}" - PACKAGES += "qte-font-fixed" PROVIDES += "qte-font-fixed" FILES_qte-font-fixed = "${palmtopdir}/lib/fonts/fixed*" @@ -226,3 +227,5 @@ ${sbindir}/update-qtfontdir -f #. /etc/profile #${sbindir}/update-qtfontdir -f #} + +PACKAGE_ARCH = "all" -- cgit v1.2.3 From c625a292aecd1db4e36a0a9cc4b4efa1901f328e Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 29 Jan 2008 12:36:08 +0000 Subject: qte-fonts-common: consolidate all qpf fonts in a single directory --- packages/qpf-fonts/qte-fonts-common/.mtn2git_empty | 0 .../qpf-fonts/qte-fonts-common/update-qtfontdir | 74 +++++++ packages/qpf-fonts/qte-fonts-common_3.3.5.bb | 231 +++++++++++++++++++++ packages/qte-fonts-common/.mtn2git_empty | 0 .../qte-fonts-common/.mtn2git_empty | 0 .../qte-fonts-common/update-qtfontdir | 74 ------- .../qte-fonts-common/qte-fonts-common_3.3.5.bb | 231 --------------------- 7 files changed, 305 insertions(+), 305 deletions(-) create mode 100644 packages/qpf-fonts/qte-fonts-common/.mtn2git_empty create mode 100755 packages/qpf-fonts/qte-fonts-common/update-qtfontdir create mode 100644 packages/qpf-fonts/qte-fonts-common_3.3.5.bb delete mode 100644 packages/qte-fonts-common/.mtn2git_empty delete mode 100644 packages/qte-fonts-common/qte-fonts-common/.mtn2git_empty delete mode 100755 packages/qte-fonts-common/qte-fonts-common/update-qtfontdir delete mode 100644 packages/qte-fonts-common/qte-fonts-common_3.3.5.bb diff --git a/packages/qpf-fonts/qte-fonts-common/.mtn2git_empty b/packages/qpf-fonts/qte-fonts-common/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/qpf-fonts/qte-fonts-common/update-qtfontdir b/packages/qpf-fonts/qte-fonts-common/update-qtfontdir new file mode 100755 index 0000000000..857dc6c0d5 --- /dev/null +++ b/packages/qpf-fonts/qte-fonts-common/update-qtfontdir @@ -0,0 +1,74 @@ +#!/bin/sh + +usage() +{ + echo "usage: $0 [font directory, defaults to \$QTDIR/lib/fonts]" + exit 1 +} + +setVar() +{ + eval "$1='$2'" +} + +getVar() +{ + eval "echo \$$1" +} + +handleQPF() +{ + base=`basename $1` + family=`echo $base|cut -d_ -f1` + pt=`echo $base|cut -d_ -f2` + weight=`echo $base|cut -d_ -f3|sed -e 's,i$,,'` + if (echo $base|cut -d_ -f3|grep -q 'i$'); then + italic="y" + else + italic="n" + fi + echo "$family $base.qpf QPF $italic $weight $pt u" +} + +if [ "$1" = "-f" ]; then + FORCE=1 + shift +else + FORCE=0 +fi + +if [ -z "$1" ]; then + if [ -n "$QTDIR" ]; then + fontdir=$QTDIR/lib/fonts + else + fontdir=/opt/QtPalmtop/lib/fonts + fi +else + fontdir=$1 +fi + +if ! [ -d $fontdir ]; then + echo Error: $fontdir not a directory + exit 1 +fi + +if [ -e $fontdir/fontdir ]; then + if find $fontdir -newer $fontdir/fontdir | grep -q "\(qpf\|ttf\)"; then + #echo "fontdir needs updating..." + : + elif [ "$FORCE" = "0" ]; then + #echo "fontdir already up to date - exiting" + exit 0 + fi + cat $fontdir/fontdir | grep -v '\.qpf' > $fontdir/fontdir.new +fi + +( + for file in `ls $fontdir/*.qpf 2>/dev/null |sed -e's,\.qpf$,,; s,_t[^_]*$,,;'|sort -u`; do + handleQPF $file + done +) >> $fontdir/fontdir.new + +mv $fontdir/fontdir.new $fontdir/fontdir + +exit 0 diff --git a/packages/qpf-fonts/qte-fonts-common_3.3.5.bb b/packages/qpf-fonts/qte-fonts-common_3.3.5.bb new file mode 100644 index 0000000000..02d0663c3e --- /dev/null +++ b/packages/qpf-fonts/qte-fonts-common_3.3.5.bb @@ -0,0 +1,231 @@ +DESCRIPTION= "Tools to update the Qt fontdir" +HOMEPAGE = "http://www.trolltech.com" +SECTION = "opie/base" +LICENSE = "GPL QPL" +RDEPENDS = "font-update-common" +RDEPENDS_qte-font-common = "" +PR = "r4" + +SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-free-${PV}.tar.bz2 \ + file://update-qtfontdir" + +S = "${WORKDIR}/qt-embedded-free-${PV}" + +do_compile() { + : +} + +do_install() { + mkdir -p ${D}${sbindir} + install -m 755 ${WORKDIR}/update-qtfontdir ${D}${sbindir} + mkdir -p ${D}${palmtopdir}/lib/fonts + cp -pPR lib/fonts/* ${D}${palmtopdir}/lib/fonts + # Delete all other font formats, Qt/E would have a dead slow + # application start time if it had to use any other font format + # as *.qpf ... + find ${D}${palmtopdir}/lib/fonts \ + -name "*.bdf" \ + -o -name "*.ttf" \ + -o -name "*.pfa" \ + -o -name "*.pfb" | xargs rm +} + +PACKAGES = "qte-fonts-common" +FILES_${PN} = "${sbindir}" + +PACKAGES += "qte-font-fixed" +PROVIDES += "qte-font-fixed" +FILES_qte-font-fixed = "${palmtopdir}/lib/fonts/fixed*" +RDEPENDS_qte-font-fixed = "qte-fonts-common" +pkg_postinst_qte-font-fixed() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir +} +pkg_postrm_qte-font-fixed() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir -f +} + +PACKAGES += "qte-font-helvetica-small" +PROVIDES += "qte-font-helvetica-small" +FILES_qte-font-helvetica-small = "${palmtopdir}/lib/fonts/helvetica_80*.qpf \ + ${palmtopdir}/lib/fonts/helvetica_100*.qpf ${palmtopdir}/lib/fonts/helvetica_120*.qpf" +RDEPENDS_qte-font-helvetica-small = "qte-fonts-common" +pkg_postinst_qte-font-helvetica-small() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir +} +pkg_postrm_qte-font-helvetica-small() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir -f +} + +PACKAGES += "qte-font-helvetica-large" +PROVIDES += "qte-font-helvetica-large" +FILES_qte-font-helvetica-large = "${palmtopdir}/lib/fonts/helvetica_140*.qpf \ + ${palmtopdir}/lib/fonts/helvetica_180*.qpf ${palmtopdir}/lib/fonts/helvetica_240*.qpf" +RDEPENDS_qte-font-helvetica-large = "qte-fonts-common" +pkg_postinst_qte-font-helvetica-large() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir +} +pkg_postrm_qte-font-helvetica-large() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir -f +} + +PACKAGES += "qte-font-smoothtimes" +PROVIDES += "qte-font-smoothtimes" +FILES_qte-font-smoothtimes = "${palmtopdir}/lib/fonts/smoothtimes*" +RDEPENDS_qte-font-smoothtimes = "qte-fonts-common" +pkg_postinst_qte-font-smoothtimes() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir +} +pkg_postrm_qte-font-smoothtimes() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir -f +} + +PACKAGES += "qte-font-smallsmooth" +PROVIDES += "qte-font-smallsmooth" +FILES_qte-font-smallsmooth = "${palmtopdir}/lib/fonts/smallsmooth*" +RDEPENDS_qte-smallsmooth = "qte-fonts-common" +pkg_postinst_qte-font-smallsmooth() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir +} +pkg_postrm_qte-font-smallsmooth() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir -f +} + +PACKAGES += "qte-font-unicode" +PROVIDES += "qte-font-unicode" +FILES_qte-font-unicode = "${palmtopdir}/lib/fonts/unifont*.qpf" +RDEPENDS_qte-font-unicode = "qte-fonts-common" +pkg_postinst_qte-font-unicode() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir +} +pkg_postrm_qte-font-unicode() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir -f +} + +PACKAGES += "qte-font-micro" +PROVIDES += "qte-font-micro" +FILES_qte-font-micro = "${palmtopdir}/lib/fonts/micro*.qpf" +#RDEPENDS_qte-font-micro = "qte-fonts-common" +pkg_postinst_qte-font-micro() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir +} +pkg_postrm_qte-font-micro() { +#!/bin/sh +if [ -n "$D" ]; then exit 1; fi +set -e +. /etc/profile +${sbindir}/update-qtfontdir -f +} + +# Not in the QtE/3 tar file: +#PACKAGES += "qte-font-lcd" +#PROVIDES += "qte-font-lcd" +#RDEPENDS_qte-font-lcd = "qte-fonts-common" +#FILES_qte-font-lcd = "${palmtopdir}/lib/fonts/lcd*" +#pkg_postinst_qte-font-lcd () { +##!/bin/sh +#if [ -n "$D" ]; then exit 1; fi +#set -e +#. /etc/profile +#${sbindir}/update-qtfontdir +#} +#pkg_postrm_qte-font-lcd() { +##!/bin/sh +#if [ -n "$D" ]; then exit 1; fi +#set -e +#. /etc/profile +#${sbindir}/update-qtfontdir -f +#} + +# Not in the QtE/3 tar file: +#PACKAGES += "qte-font-japanese" +#PROVIDES += "qte-font-japanese" +#FILES_qte-font-japanese = "${palmtopdir}/lib/fonts/japanese*" +#RDEPENDS_qte-font-japanese = "qte-fonts-common" +#pkg_postinst_qte-font-japanese() { +##!/bin/sh +#if [ -n "$D" ]; then exit 1; fi +#set -e +#. /etc/profile +#${sbindir}/update-qtfontdir +#} +#pkg_postrm_qte-font-japanese() { +##!/bin/sh +#if [ -n "$D" ]; then exit 1; fi +#set -e +#. /etc/profile +#${sbindir}/update-qtfontdir -f +#} + +# Not in the QtE/3 tar file: +#PACKAGES += "qte-font-courier" +#PROVIDES += "qte-font-courier" +#FILES_qte-font-courier = "${palmtopdir}/lib/fonts/cour*" +#RDEPENDS_qte-font-courier = "qte-fonts-common" +#pkg_postinst_qte-font-courier() { +##!/bin/sh +#if [ -n "$D" ]; then exit 1; fi +#set -e +#. /etc/profile +#${sbindir}/update-qtfontdir +#} +#pkg_postrm_qte-font-courier() { +##!/bin/sh +#if [ -n "$D" ]; then exit 1; fi +#set -e +#. /etc/profile +#${sbindir}/update-qtfontdir -f +#} + +PACKAGE_ARCH = "all" diff --git a/packages/qte-fonts-common/.mtn2git_empty b/packages/qte-fonts-common/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/qte-fonts-common/qte-fonts-common/.mtn2git_empty b/packages/qte-fonts-common/qte-fonts-common/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/qte-fonts-common/qte-fonts-common/update-qtfontdir b/packages/qte-fonts-common/qte-fonts-common/update-qtfontdir deleted file mode 100755 index 857dc6c0d5..0000000000 --- a/packages/qte-fonts-common/qte-fonts-common/update-qtfontdir +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/sh - -usage() -{ - echo "usage: $0 [font directory, defaults to \$QTDIR/lib/fonts]" - exit 1 -} - -setVar() -{ - eval "$1='$2'" -} - -getVar() -{ - eval "echo \$$1" -} - -handleQPF() -{ - base=`basename $1` - family=`echo $base|cut -d_ -f1` - pt=`echo $base|cut -d_ -f2` - weight=`echo $base|cut -d_ -f3|sed -e 's,i$,,'` - if (echo $base|cut -d_ -f3|grep -q 'i$'); then - italic="y" - else - italic="n" - fi - echo "$family $base.qpf QPF $italic $weight $pt u" -} - -if [ "$1" = "-f" ]; then - FORCE=1 - shift -else - FORCE=0 -fi - -if [ -z "$1" ]; then - if [ -n "$QTDIR" ]; then - fontdir=$QTDIR/lib/fonts - else - fontdir=/opt/QtPalmtop/lib/fonts - fi -else - fontdir=$1 -fi - -if ! [ -d $fontdir ]; then - echo Error: $fontdir not a directory - exit 1 -fi - -if [ -e $fontdir/fontdir ]; then - if find $fontdir -newer $fontdir/fontdir | grep -q "\(qpf\|ttf\)"; then - #echo "fontdir needs updating..." - : - elif [ "$FORCE" = "0" ]; then - #echo "fontdir already up to date - exiting" - exit 0 - fi - cat $fontdir/fontdir | grep -v '\.qpf' > $fontdir/fontdir.new -fi - -( - for file in `ls $fontdir/*.qpf 2>/dev/null |sed -e's,\.qpf$,,; s,_t[^_]*$,,;'|sort -u`; do - handleQPF $file - done -) >> $fontdir/fontdir.new - -mv $fontdir/fontdir.new $fontdir/fontdir - -exit 0 diff --git a/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb b/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb deleted file mode 100644 index 02d0663c3e..0000000000 --- a/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb +++ /dev/null @@ -1,231 +0,0 @@ -DESCRIPTION= "Tools to update the Qt fontdir" -HOMEPAGE = "http://www.trolltech.com" -SECTION = "opie/base" -LICENSE = "GPL QPL" -RDEPENDS = "font-update-common" -RDEPENDS_qte-font-common = "" -PR = "r4" - -SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-free-${PV}.tar.bz2 \ - file://update-qtfontdir" - -S = "${WORKDIR}/qt-embedded-free-${PV}" - -do_compile() { - : -} - -do_install() { - mkdir -p ${D}${sbindir} - install -m 755 ${WORKDIR}/update-qtfontdir ${D}${sbindir} - mkdir -p ${D}${palmtopdir}/lib/fonts - cp -pPR lib/fonts/* ${D}${palmtopdir}/lib/fonts - # Delete all other font formats, Qt/E would have a dead slow - # application start time if it had to use any other font format - # as *.qpf ... - find ${D}${palmtopdir}/lib/fonts \ - -name "*.bdf" \ - -o -name "*.ttf" \ - -o -name "*.pfa" \ - -o -name "*.pfb" | xargs rm -} - -PACKAGES = "qte-fonts-common" -FILES_${PN} = "${sbindir}" - -PACKAGES += "qte-font-fixed" -PROVIDES += "qte-font-fixed" -FILES_qte-font-fixed = "${palmtopdir}/lib/fonts/fixed*" -RDEPENDS_qte-font-fixed = "qte-fonts-common" -pkg_postinst_qte-font-fixed() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-fixed() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-helvetica-small" -PROVIDES += "qte-font-helvetica-small" -FILES_qte-font-helvetica-small = "${palmtopdir}/lib/fonts/helvetica_80*.qpf \ - ${palmtopdir}/lib/fonts/helvetica_100*.qpf ${palmtopdir}/lib/fonts/helvetica_120*.qpf" -RDEPENDS_qte-font-helvetica-small = "qte-fonts-common" -pkg_postinst_qte-font-helvetica-small() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-helvetica-small() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-helvetica-large" -PROVIDES += "qte-font-helvetica-large" -FILES_qte-font-helvetica-large = "${palmtopdir}/lib/fonts/helvetica_140*.qpf \ - ${palmtopdir}/lib/fonts/helvetica_180*.qpf ${palmtopdir}/lib/fonts/helvetica_240*.qpf" -RDEPENDS_qte-font-helvetica-large = "qte-fonts-common" -pkg_postinst_qte-font-helvetica-large() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-helvetica-large() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-smoothtimes" -PROVIDES += "qte-font-smoothtimes" -FILES_qte-font-smoothtimes = "${palmtopdir}/lib/fonts/smoothtimes*" -RDEPENDS_qte-font-smoothtimes = "qte-fonts-common" -pkg_postinst_qte-font-smoothtimes() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-smoothtimes() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-smallsmooth" -PROVIDES += "qte-font-smallsmooth" -FILES_qte-font-smallsmooth = "${palmtopdir}/lib/fonts/smallsmooth*" -RDEPENDS_qte-smallsmooth = "qte-fonts-common" -pkg_postinst_qte-font-smallsmooth() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-smallsmooth() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-unicode" -PROVIDES += "qte-font-unicode" -FILES_qte-font-unicode = "${palmtopdir}/lib/fonts/unifont*.qpf" -RDEPENDS_qte-font-unicode = "qte-fonts-common" -pkg_postinst_qte-font-unicode() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-unicode() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-micro" -PROVIDES += "qte-font-micro" -FILES_qte-font-micro = "${palmtopdir}/lib/fonts/micro*.qpf" -#RDEPENDS_qte-font-micro = "qte-fonts-common" -pkg_postinst_qte-font-micro() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-micro() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -# Not in the QtE/3 tar file: -#PACKAGES += "qte-font-lcd" -#PROVIDES += "qte-font-lcd" -#RDEPENDS_qte-font-lcd = "qte-fonts-common" -#FILES_qte-font-lcd = "${palmtopdir}/lib/fonts/lcd*" -#pkg_postinst_qte-font-lcd () { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -#} -#pkg_postrm_qte-font-lcd() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -f -#} - -# Not in the QtE/3 tar file: -#PACKAGES += "qte-font-japanese" -#PROVIDES += "qte-font-japanese" -#FILES_qte-font-japanese = "${palmtopdir}/lib/fonts/japanese*" -#RDEPENDS_qte-font-japanese = "qte-fonts-common" -#pkg_postinst_qte-font-japanese() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -#} -#pkg_postrm_qte-font-japanese() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -f -#} - -# Not in the QtE/3 tar file: -#PACKAGES += "qte-font-courier" -#PROVIDES += "qte-font-courier" -#FILES_qte-font-courier = "${palmtopdir}/lib/fonts/cour*" -#RDEPENDS_qte-font-courier = "qte-fonts-common" -#pkg_postinst_qte-font-courier() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -#} -#pkg_postrm_qte-font-courier() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -f -#} - -PACKAGE_ARCH = "all" -- cgit v1.2.3 From 48c7883a6f0fa1820a3307d109ceb26d1bcb7a41 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 29 Jan 2008 14:40:07 +0000 Subject: qpf-fonts: some major clean-up and bumping of PR after the "update-font-common" commits * unify * drop update-qtfontdir from qte-fonts-common, it is provided by qpf-font-common * replace dependencies on qte-fonts-common with qpf-font-common * rename qte-fonts-common_3.3.5 to qpf-qte_3.3.5 --- packages/qpf-fonts/qpf-arabic_1.0.bb | 17 +- .../qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb | 27 +-- packages/qpf-fonts/qpf-bitstream-vera_1.10.bb | 23 +- packages/qpf-fonts/qpf-font-common_1.0.bb | 8 +- packages/qpf-fonts/qpf-freemono_1.0.bb | 17 +- packages/qpf-fonts/qpf-freeserif_1.0.bb | 18 +- packages/qpf-fonts/qpf-helvetica_1.0.bb | 17 +- packages/qpf-fonts/qpf-hunkysans_0.3.0.bb | 18 +- packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb | 18 +- packages/qpf-fonts/qpf-qte_2.3.10.bb | 12 +- packages/qpf-fonts/qpf-qte_3.3.5.bb | 57 +++++ packages/qpf-fonts/qpf-terminus.bb | 14 +- packages/qpf-fonts/qpf-unifont_1.0.bb | 16 +- packages/qpf-fonts/qpf-unismall_1.0.0.bb | 23 +- packages/qpf-fonts/qpf-utopia_1.0.bb | 18 +- packages/qpf-fonts/qpf.inc | 2 +- packages/qpf-fonts/qte-fonts-common/.mtn2git_empty | 0 .../qpf-fonts/qte-fonts-common/update-qtfontdir | 74 ------- packages/qpf-fonts/qte-fonts-common_3.3.5.bb | 231 --------------------- 19 files changed, 112 insertions(+), 498 deletions(-) create mode 100644 packages/qpf-fonts/qpf-qte_3.3.5.bb delete mode 100644 packages/qpf-fonts/qte-fonts-common/.mtn2git_empty delete mode 100755 packages/qpf-fonts/qte-fonts-common/update-qtfontdir delete mode 100644 packages/qpf-fonts/qte-fonts-common_3.3.5.bb diff --git a/packages/qpf-fonts/qpf-arabic_1.0.bb b/packages/qpf-fonts/qpf-arabic_1.0.bb index 8a7a6549b5..d2ef3af639 100644 --- a/packages/qpf-fonts/qpf-arabic_1.0.bb +++ b/packages/qpf-fonts/qpf-arabic_1.0.bb @@ -1,18 +1,9 @@ +require qpf.inc + DESCRIPTION = "Arabic fonts from Arabeyes.org" -SECTION = "opie/fonts" -PRIORITY = "optional" -LICENSE = "GPL" HOMEPAGE = "http://www.arabeyes.org" -PR = "r0" +LICENSE = "GPL" +PR = "r1" SRC_URI = "${SOURCEFORGE_MIRROR}/arabeyes/arabic-fonts-${PV}.tar.gz" S = "${WORKDIR}" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - for i in *.qpf; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i} - done -} - -require qpf.inc diff --git a/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb b/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb index 5b9b9fcadc..8aaae9143e 100644 --- a/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb +++ b/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb @@ -1,8 +1,8 @@ +require qpf.inc + DESCRIPTION = "Bitstream Vera Monospaced Font, QPF for Qt/Embedded" -SECTION = "opie/fonts" LICENSE = "Bitstream Vera" -PACKAGE_ARCH = "all" -PR = "r3" +PR = "r4" PROVIDES += "qpf-bitstream-vera-sans-mono-small" PROVIDES += "qpf-bitstream-vera-sans-mono-larger" @@ -12,26 +12,7 @@ PROVIDES += "qpf-bitstream-vera-sans-mono-huge" SRC_URI = "http://openzaurus.org/mirror/fonts-bitstream-vera-sans-mono.tar.gz" S = "${WORKDIR}/verasansmono" -FILES_${PN} += "/opt" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - - cd ${WORKDIR} - files=`find . -name "*.qpf"` - for i in $files; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/ - done -} - -pkg_postinst () { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} - +FILES_${PN} += "${palmtopdir}" PACKAGES = "${PN}-dbg \ qpf-bitstream-vera-sans-mono-small \ diff --git a/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb b/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb index 93a8591002..b23653e0d6 100644 --- a/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb +++ b/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb @@ -1,31 +1,14 @@ +require qpf.inc + DESCRIPTION = "The Bitstream Vera fonts - QPF Edition" -SECTION = "opie/fonts" -PRIORITY = "optional" LICENSE = "Bitstream Vera" -PACKAGE_ARCH = "all" -PR = "r2" +PR = "r3" PROVIDES = "qpf-bitstream-vera-small qpf-bitstream-vera-large" SRC_URI = "http://openzaurus.org/mirror/vera-qpf_1.10-3.tar.gz" S = "${WORKDIR}/vera-qpf" -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - for i in *.qpf; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i} - done -} - -pkg_postinst () { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} - - PACKAGES = "${PN}-dbg qpf-bitstream-vera-small qpf-bitstream-vera-large" FILES_qpf-bitstream-vera-small = "${palmqtdir}/lib/fonts/vera_80_50* \ diff --git a/packages/qpf-fonts/qpf-font-common_1.0.bb b/packages/qpf-fonts/qpf-font-common_1.0.bb index 41bdad0a4a..ba4f0867ad 100644 --- a/packages/qpf-fonts/qpf-font-common_1.0.bb +++ b/packages/qpf-fonts/qpf-font-common_1.0.bb @@ -1,8 +1,6 @@ -DESCRIPTION = "Qt/Embedded Fonts Common Files" -SECTION = "opie/fonts" -PRIORITY = "optional" +DESCRIPTION = "Common files for Qt/Embedded fonts" LICENSE = "GPL QPL" -PR = "r3" +PR = "r4" SRC_URI = "file://update-qtfontdir" S = "${WORKDIR}/qt-${PV}" @@ -12,3 +10,5 @@ do_install() { install -m 0755 ${WORKDIR}/update-qtfontdir ${D}${sbindir}/ sed -i -e 's,@palmtopdir@,${palmtopdir},g' ${D}${sbindir}/update-qtfontdir } + +PACKAGE_ARCH = "all" diff --git a/packages/qpf-fonts/qpf-freemono_1.0.bb b/packages/qpf-fonts/qpf-freemono_1.0.bb index 550bdd587d..a4c73f2b7f 100644 --- a/packages/qpf-fonts/qpf-freemono_1.0.bb +++ b/packages/qpf-fonts/qpf-freemono_1.0.bb @@ -1,19 +1,10 @@ +require qpf.inc + DESCRIPTION = "FreeMono font - QPF Edition" -SECTION = "opie/fonts" -PRIORITY = "optional" -LICENSE = "GPL" HOMEPAGE = "http://savannah.nongnu.org/projects/freefont/" -PACKAGE_ARCH = "all" +LICENSE = "GPL" +PR = "r1" SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/${PN}-${PV}.tar.bz2" S = "${WORKDIR}/${PN}" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - for i in *.qpf; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i} - done -} - -require qpf.inc diff --git a/packages/qpf-fonts/qpf-freeserif_1.0.bb b/packages/qpf-fonts/qpf-freeserif_1.0.bb index 01d667c4cb..a45abbdcd3 100644 --- a/packages/qpf-fonts/qpf-freeserif_1.0.bb +++ b/packages/qpf-fonts/qpf-freeserif_1.0.bb @@ -1,20 +1,10 @@ +require qpf.inc + DESCRIPTION = "FreeSerif font - QPF Edition" -SECTION = "opie/fonts" -PRIORITY = "optional" -LICENSE = "GPL" HOMEPAGE = "http://savannah.nongnu.org/projects/freefont/" -PACKAGE_ARCH = "all" -PR = "r2" +LICENSE = "GPL" +PR = "r3" SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/${PN}-${PV}.tar.bz2" S = "${WORKDIR}/${PN}" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - for i in *.qpf; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i} - done -} - -require qpf.inc diff --git a/packages/qpf-fonts/qpf-helvetica_1.0.bb b/packages/qpf-fonts/qpf-helvetica_1.0.bb index 2b5c767caa..1d2c672bcb 100644 --- a/packages/qpf-fonts/qpf-helvetica_1.0.bb +++ b/packages/qpf-fonts/qpf-helvetica_1.0.bb @@ -1,18 +1,9 @@ +require qpf.inc + DESCRIPTION = "Helvetica fonts - QPF Edition" -LICENSE = "GPL QPL" -SECTION = "opie/fonts" -PRIORITY = "optional" HOMEPAGE = "http://www.pobox.sk/~mico/zaurus.html" -PR = "r1" +LICENSE = "GPL QPL" +PR = "r2" SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/qpf-helvetica.tar.bz2" S = "${WORKDIR}/helvetica" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - for font in *.qpf; do - install -m 644 $font ${D}${palmqtdir}/lib/fonts/ - done -} - -require qpf.inc diff --git a/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb b/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb index efdf913edb..6f9db1202c 100644 --- a/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb +++ b/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb @@ -1,20 +1,10 @@ +require qpf.inc + DESCRIPTION = "Hunky Sans font - QPF Edition" -SECTION = "opie/fonts" -PRIORITY = "optional" -LICENSE = "LGPL" HOMEPAGE = "http://www.yoper.com/ariszlo/hunky.html http://sourceforge.net/projects/hunkyfonts" -PACKAGE_ARCH = "all" -PR = "r5" +LICENSE = "LGPL" +PR = "r6" SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/${PN}-${PV}-r4.tar.bz2" S = "${WORKDIR}/${PN}" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - for i in *.qpf; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i} - done -} - -require qpf.inc diff --git a/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb b/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb index 22948c5475..f06599f9eb 100644 --- a/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb +++ b/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb @@ -1,20 +1,10 @@ +require qpf.inc + DESCRIPTION = "Hunky Serif font - QPF Edition" -SECTION = "opie/fonts" -PRIORITY = "optional" -LICENSE = "LGPL" HOMEPAGE = "http://www.yoper.com/ariszlo/hunky.html http://sourceforge.net/projects/hunkyfonts" -PACKAGE_ARCH = "all" -PR = "r5" +LICENSE = "LGPL" +PR = "r6" SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/${PN}-${PV}-r4.tar.bz2" S = "${WORKDIR}/${PN}" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - for i in *.qpf; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i} - done -} - -require qpf.inc diff --git a/packages/qpf-fonts/qpf-qte_2.3.10.bb b/packages/qpf-fonts/qpf-qte_2.3.10.bb index 7cc4789c4a..a1a589f003 100644 --- a/packages/qpf-fonts/qpf-qte_2.3.10.bb +++ b/packages/qpf-fonts/qpf-qte_2.3.10.bb @@ -1,9 +1,9 @@ -DESCRIPTION = "Qt/Embedded Fonts Version ${PV}" -SECTION = "opie/fonts" -PRIORITY = "optional" -LICENSE = "GPL QPL" +require qpf.inc + +DESCRIPTION = "Qt/Embedded fonts version ${PV}" HOMEPAGE = "http://www.trolltech.com" -PR = "r1" +LICENSE = "GPL QPL" +PR = "r2" PROVIDES = "qte-font-helvetica-100 qte-font-helvetica-120" PROVIDES += "qte-font-fixed-70 qte-font-fixed-120" @@ -26,8 +26,6 @@ RPROVIDES_qte-font-japanese += "virtual/japanese-font" SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-${PV}-free.tar.gz" S = "${WORKDIR}/qt-${PV}" -require qpf.inc - QPF_PKGPATTERN = "qte-font-%s" QPF_DESCRIPTION = "Qt/E font %s" diff --git a/packages/qpf-fonts/qpf-qte_3.3.5.bb b/packages/qpf-fonts/qpf-qte_3.3.5.bb new file mode 100644 index 0000000000..6ac091f29d --- /dev/null +++ b/packages/qpf-fonts/qpf-qte_3.3.5.bb @@ -0,0 +1,57 @@ +require qpf.inc + +DESCRIPTION = "Qt/Embedded fonts version ${PV}" +HOMEPAGE = "http://www.trolltech.com" +LICENSE = "GPL QPL" +PR = "r6" + +SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-free-${PV}.tar.bz2" +S = "${WORKDIR}/qt-embedded-free-${PV}" + +do_compile() { + : +} + +do_install() { + mkdir -p ${D}${sbindir} + mkdir -p ${D}${palmtopdir}/lib/fonts + cp -pPR lib/fonts/* ${D}${palmtopdir}/lib/fonts + # Delete all other font formats, Qt/E would have a dead slow + # application start time if it had to use any other font format + # as *.qpf ... + find ${D}${palmtopdir}/lib/fonts \ + -name "*.bdf" \ + -o -name "*.ttf" \ + -o -name "*.pfa" \ + -o -name "*.pfb" | xargs rm +} + +PACKAGES = "qte-font-fixed" +PROVIDES += "qte-font-fixed" +FILES_qte-font-fixed = "${palmtopdir}/lib/fonts/fixed*" + +PACKAGES += "qte-font-helvetica-small" +PROVIDES += "qte-font-helvetica-small" +FILES_qte-font-helvetica-small = "${palmtopdir}/lib/fonts/helvetica_80*.qpf \ + ${palmtopdir}/lib/fonts/helvetica_100*.qpf ${palmtopdir}/lib/fonts/helvetica_120*.qpf" + +PACKAGES += "qte-font-helvetica-large" +PROVIDES += "qte-font-helvetica-large" +FILES_qte-font-helvetica-large = "${palmtopdir}/lib/fonts/helvetica_140*.qpf \ + ${palmtopdir}/lib/fonts/helvetica_180*.qpf ${palmtopdir}/lib/fonts/helvetica_240*.qpf" + +PACKAGES += "qte-font-smoothtimes" +PROVIDES += "qte-font-smoothtimes" +FILES_qte-font-smoothtimes = "${palmtopdir}/lib/fonts/smoothtimes*" + +PACKAGES += "qte-font-smallsmooth" +PROVIDES += "qte-font-smallsmooth" +FILES_qte-font-smallsmooth = "${palmtopdir}/lib/fonts/smallsmooth*" + +PACKAGES += "qte-font-unicode" +PROVIDES += "qte-font-unicode" +FILES_qte-font-unicode = "${palmtopdir}/lib/fonts/unifont*.qpf" + +PACKAGES += "qte-font-micro" +PROVIDES += "qte-font-micro" +FILES_qte-font-micro = "${palmtopdir}/lib/fonts/micro*.qpf" diff --git a/packages/qpf-fonts/qpf-terminus.bb b/packages/qpf-fonts/qpf-terminus.bb index 868dd74e0d..7e8bbfe393 100644 --- a/packages/qpf-fonts/qpf-terminus.bb +++ b/packages/qpf-fonts/qpf-terminus.bb @@ -1,18 +1,10 @@ +require qpf.inc + DESCRIPTION = "Qt/Embedded terminus font" HOMEPAGE = "http://www.is-vn.bg/hamster/jimmy-en.html" -SECTION = "opie/fonts" -PRIORITY = "optional" LICENSE = "GPL" -PACKAGE_ARCH = "all" -PR = "r2" +PR = "r3" #SRC_URI = "http://www.mn-solutions.de/downloads/mnci/terminus-fonts.tar.bz2" -> 404 error SRC_URI = "http://openzaurus.linuxtogo.org/download/3.5.4/sources/terminus-fonts.tar.bz2" S = "${WORKDIR}/terminus-fonts" - -do_install() { - mkdir -p ${D}${palmqtdir}/lib/fonts - cp *.qpf ${D}${palmqtdir}/lib/fonts -} - -require qpf.inc diff --git a/packages/qpf-fonts/qpf-unifont_1.0.bb b/packages/qpf-fonts/qpf-unifont_1.0.bb index 14a63783c2..e91e762845 100644 --- a/packages/qpf-fonts/qpf-unifont_1.0.bb +++ b/packages/qpf-fonts/qpf-unifont_1.0.bb @@ -1,19 +1,9 @@ +require qpf.inc + DESCRIPTION = "Unicode fonts - QPF Edition" LICENSE = "GPL QPL" -SECTION = "opie/fonts" -PRIORITY = "optional" RPROVIDES = "virtual/japanese-font" -PACKAGE_ARCH = "all" -PR = "r1" +PR = "r2" SRC_URI = "http://www.openzaurus.org/mirror/qpf-unifont.tar.bz2" S = "${WORKDIR}" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - for i in *.qpf; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i} - done -} - -require qpf.inc diff --git a/packages/qpf-fonts/qpf-unismall_1.0.0.bb b/packages/qpf-fonts/qpf-unismall_1.0.0.bb index 62d84225ff..6298e2dfc4 100644 --- a/packages/qpf-fonts/qpf-unismall_1.0.0.bb +++ b/packages/qpf-fonts/qpf-unismall_1.0.0.bb @@ -1,26 +1,11 @@ +require qpf.inc + DESCRIPTION = "Lightweight Japanese font in 10 point suitable for 320x240 display" -SECTION = "opie/fonts" -PRIORITY = "optional" -LICENSE = "GPL" HOMEPAGE = "http://sourceforge.jp/projects/zaurus-ja/" +LICENSE = "GPL" RPROVIDES = "virtual/japanese-font" -PR = "r3" +PR = "r4" SRC_URI = "http://osdn.dl.sourceforge.jp/zaurus-ja/773/unismall-${PV}.tar.gz" S = "${WORKDIR}" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - cd unismall* - for i in *_100_*.qpf; do - ln -sf $i $(echo $i | sed 's/_100_/_160_/') - done - for i in *.qpf; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i} - done -} - -require qpf.inc - -PACKAGE_ARCH = "all" diff --git a/packages/qpf-fonts/qpf-utopia_1.0.bb b/packages/qpf-fonts/qpf-utopia_1.0.bb index 148af3a758..eaee2d07a4 100644 --- a/packages/qpf-fonts/qpf-utopia_1.0.bb +++ b/packages/qpf-fonts/qpf-utopia_1.0.bb @@ -1,19 +1,9 @@ +require qpf.inc + DESCRIPTION = "Utopia fonts - QPF Edition" -SECTION = "opie/fonts" -PRIORITY = "optional" -LICENSE = "GPL QPL" HOMEPAGE = "http://www.pobox.sk/~mico/zaurus.html" -PACKAGE_ARCH = "all" -PR = "r1" +LICENSE = "GPL QPL" +PR = "r2" SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/qpf-utopia.tar.bz2" S = "${WORKDIR}/utopia" - -do_install () { - install -d ${D}${palmqtdir}/lib/fonts/ - for i in *.qpf; do - install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i} - done -} - -require qpf.inc diff --git a/packages/qpf-fonts/qpf.inc b/packages/qpf-fonts/qpf.inc index 7597b436be..97e66587d2 100644 --- a/packages/qpf-fonts/qpf.inc +++ b/packages/qpf-fonts/qpf.inc @@ -1,4 +1,4 @@ -RDEPENDS = "font-update-common qte-fonts-common" +RDEPENDS = "font-update-common qpf-font-common" do_configure() { : diff --git a/packages/qpf-fonts/qte-fonts-common/.mtn2git_empty b/packages/qpf-fonts/qte-fonts-common/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/qpf-fonts/qte-fonts-common/update-qtfontdir b/packages/qpf-fonts/qte-fonts-common/update-qtfontdir deleted file mode 100755 index 857dc6c0d5..0000000000 --- a/packages/qpf-fonts/qte-fonts-common/update-qtfontdir +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/sh - -usage() -{ - echo "usage: $0 [font directory, defaults to \$QTDIR/lib/fonts]" - exit 1 -} - -setVar() -{ - eval "$1='$2'" -} - -getVar() -{ - eval "echo \$$1" -} - -handleQPF() -{ - base=`basename $1` - family=`echo $base|cut -d_ -f1` - pt=`echo $base|cut -d_ -f2` - weight=`echo $base|cut -d_ -f3|sed -e 's,i$,,'` - if (echo $base|cut -d_ -f3|grep -q 'i$'); then - italic="y" - else - italic="n" - fi - echo "$family $base.qpf QPF $italic $weight $pt u" -} - -if [ "$1" = "-f" ]; then - FORCE=1 - shift -else - FORCE=0 -fi - -if [ -z "$1" ]; then - if [ -n "$QTDIR" ]; then - fontdir=$QTDIR/lib/fonts - else - fontdir=/opt/QtPalmtop/lib/fonts - fi -else - fontdir=$1 -fi - -if ! [ -d $fontdir ]; then - echo Error: $fontdir not a directory - exit 1 -fi - -if [ -e $fontdir/fontdir ]; then - if find $fontdir -newer $fontdir/fontdir | grep -q "\(qpf\|ttf\)"; then - #echo "fontdir needs updating..." - : - elif [ "$FORCE" = "0" ]; then - #echo "fontdir already up to date - exiting" - exit 0 - fi - cat $fontdir/fontdir | grep -v '\.qpf' > $fontdir/fontdir.new -fi - -( - for file in `ls $fontdir/*.qpf 2>/dev/null |sed -e's,\.qpf$,,; s,_t[^_]*$,,;'|sort -u`; do - handleQPF $file - done -) >> $fontdir/fontdir.new - -mv $fontdir/fontdir.new $fontdir/fontdir - -exit 0 diff --git a/packages/qpf-fonts/qte-fonts-common_3.3.5.bb b/packages/qpf-fonts/qte-fonts-common_3.3.5.bb deleted file mode 100644 index 02d0663c3e..0000000000 --- a/packages/qpf-fonts/qte-fonts-common_3.3.5.bb +++ /dev/null @@ -1,231 +0,0 @@ -DESCRIPTION= "Tools to update the Qt fontdir" -HOMEPAGE = "http://www.trolltech.com" -SECTION = "opie/base" -LICENSE = "GPL QPL" -RDEPENDS = "font-update-common" -RDEPENDS_qte-font-common = "" -PR = "r4" - -SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-free-${PV}.tar.bz2 \ - file://update-qtfontdir" - -S = "${WORKDIR}/qt-embedded-free-${PV}" - -do_compile() { - : -} - -do_install() { - mkdir -p ${D}${sbindir} - install -m 755 ${WORKDIR}/update-qtfontdir ${D}${sbindir} - mkdir -p ${D}${palmtopdir}/lib/fonts - cp -pPR lib/fonts/* ${D}${palmtopdir}/lib/fonts - # Delete all other font formats, Qt/E would have a dead slow - # application start time if it had to use any other font format - # as *.qpf ... - find ${D}${palmtopdir}/lib/fonts \ - -name "*.bdf" \ - -o -name "*.ttf" \ - -o -name "*.pfa" \ - -o -name "*.pfb" | xargs rm -} - -PACKAGES = "qte-fonts-common" -FILES_${PN} = "${sbindir}" - -PACKAGES += "qte-font-fixed" -PROVIDES += "qte-font-fixed" -FILES_qte-font-fixed = "${palmtopdir}/lib/fonts/fixed*" -RDEPENDS_qte-font-fixed = "qte-fonts-common" -pkg_postinst_qte-font-fixed() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-fixed() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-helvetica-small" -PROVIDES += "qte-font-helvetica-small" -FILES_qte-font-helvetica-small = "${palmtopdir}/lib/fonts/helvetica_80*.qpf \ - ${palmtopdir}/lib/fonts/helvetica_100*.qpf ${palmtopdir}/lib/fonts/helvetica_120*.qpf" -RDEPENDS_qte-font-helvetica-small = "qte-fonts-common" -pkg_postinst_qte-font-helvetica-small() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-helvetica-small() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-helvetica-large" -PROVIDES += "qte-font-helvetica-large" -FILES_qte-font-helvetica-large = "${palmtopdir}/lib/fonts/helvetica_140*.qpf \ - ${palmtopdir}/lib/fonts/helvetica_180*.qpf ${palmtopdir}/lib/fonts/helvetica_240*.qpf" -RDEPENDS_qte-font-helvetica-large = "qte-fonts-common" -pkg_postinst_qte-font-helvetica-large() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-helvetica-large() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-smoothtimes" -PROVIDES += "qte-font-smoothtimes" -FILES_qte-font-smoothtimes = "${palmtopdir}/lib/fonts/smoothtimes*" -RDEPENDS_qte-font-smoothtimes = "qte-fonts-common" -pkg_postinst_qte-font-smoothtimes() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-smoothtimes() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-smallsmooth" -PROVIDES += "qte-font-smallsmooth" -FILES_qte-font-smallsmooth = "${palmtopdir}/lib/fonts/smallsmooth*" -RDEPENDS_qte-smallsmooth = "qte-fonts-common" -pkg_postinst_qte-font-smallsmooth() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-smallsmooth() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-unicode" -PROVIDES += "qte-font-unicode" -FILES_qte-font-unicode = "${palmtopdir}/lib/fonts/unifont*.qpf" -RDEPENDS_qte-font-unicode = "qte-fonts-common" -pkg_postinst_qte-font-unicode() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-unicode() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -PACKAGES += "qte-font-micro" -PROVIDES += "qte-font-micro" -FILES_qte-font-micro = "${palmtopdir}/lib/fonts/micro*.qpf" -#RDEPENDS_qte-font-micro = "qte-fonts-common" -pkg_postinst_qte-font-micro() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -} -pkg_postrm_qte-font-micro() { -#!/bin/sh -if [ -n "$D" ]; then exit 1; fi -set -e -. /etc/profile -${sbindir}/update-qtfontdir -f -} - -# Not in the QtE/3 tar file: -#PACKAGES += "qte-font-lcd" -#PROVIDES += "qte-font-lcd" -#RDEPENDS_qte-font-lcd = "qte-fonts-common" -#FILES_qte-font-lcd = "${palmtopdir}/lib/fonts/lcd*" -#pkg_postinst_qte-font-lcd () { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -#} -#pkg_postrm_qte-font-lcd() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -f -#} - -# Not in the QtE/3 tar file: -#PACKAGES += "qte-font-japanese" -#PROVIDES += "qte-font-japanese" -#FILES_qte-font-japanese = "${palmtopdir}/lib/fonts/japanese*" -#RDEPENDS_qte-font-japanese = "qte-fonts-common" -#pkg_postinst_qte-font-japanese() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -#} -#pkg_postrm_qte-font-japanese() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -f -#} - -# Not in the QtE/3 tar file: -#PACKAGES += "qte-font-courier" -#PROVIDES += "qte-font-courier" -#FILES_qte-font-courier = "${palmtopdir}/lib/fonts/cour*" -#RDEPENDS_qte-font-courier = "qte-fonts-common" -#pkg_postinst_qte-font-courier() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -#} -#pkg_postrm_qte-font-courier() { -##!/bin/sh -#if [ -n "$D" ]; then exit 1; fi -#set -e -#. /etc/profile -#${sbindir}/update-qtfontdir -f -#} - -PACKAGE_ARCH = "all" -- cgit v1.2.3 From 5167c78c542c14d410d04cd446d57044c40cf391 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 29 Jan 2008 16:27:17 +0000 Subject: edb cvs fix PV --- packages/efl1/edb_cvs.bb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/efl1/edb_cvs.bb b/packages/efl1/edb_cvs.bb index b7c85e8663..97dafb3931 100644 --- a/packages/efl1/edb_cvs.bb +++ b/packages/efl1/edb_cvs.bb @@ -1,5 +1,6 @@ -DESCRIPTION = "Edb is a database library" -LICENSE = "MIT" -PV = "0.0.0+cvs${SRCDATE}" +DESCRIPTION = "Edb is the Enlightenment database library" +LICENSE = "MIT BSD" +DEPENDS = "zlib" +PV = "1.0.5.042+cvs${SRCDATE}" inherit efl_library -- cgit v1.2.3 From 5b19dcc2dbc698777f75171d2e92ea7cd8673677 Mon Sep 17 00:00:00 2001 From: Ovidiu Sas Date: Tue, 29 Jan 2008 20:33:23 +0000 Subject: stunnel promoted for slugos --- packages/meta/slugos-packages.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb index 667b2b2e69..6e8d9e4089 100644 --- a/packages/meta/slugos-packages.bb +++ b/packages/meta/slugos-packages.bb @@ -205,6 +205,7 @@ SLUGOS_PACKAGES = "\ ssmtp \ strace \ streamripper \ + stunnel \ sudo \ sysfsutils \ tar \ -- cgit v1.2.3 From 93ec531fc6350057fd4503c2d3d45b9164f5700a Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 29 Jan 2008 20:59:20 +0000 Subject: efl: update to 20080129, fix some LICENSE entries, enable software-x11-16 engine again --- classes/efl_base.bbclass | 2 +- conf/distro/include/sane-srcdates.inc | 6 ++--- packages/e17/e-wm_0.16.999.041.bb | 50 ----------------------------------- packages/e17/e-wm_cvs.bb | 4 +-- packages/e17/rage_0.2.0.005.bb | 10 ------- packages/e17/rage_cvs.bb | 13 +++++++++ packages/efl1/ecore.inc | 8 +++--- packages/efl1/ecore_cvs.bb | 3 ++- packages/efl1/edje_cvs.bb | 7 +++-- packages/efl1/eet_cvs.bb | 9 +++---- packages/efl1/efreet_cvs.bb | 5 ++-- packages/efl1/embryo_cvs.bb | 10 +++---- packages/efl1/emotion_cvs.bb | 6 ++--- packages/efl1/epdf_cvs.bb | 8 +++--- packages/efl1/epsilon_cvs.bb | 4 +-- packages/efl1/esmart_cvs.bb | 4 +-- packages/efl1/etk_cvs.bb | 4 +-- packages/efl1/evas.inc | 10 ++----- packages/efl1/evas_cvs.bb | 2 +- packages/efl1/ewl_cvs.bb | 10 +++---- packages/efl1/imlib2_1.4.0.002.bb | 26 ------------------ packages/efl1/imlib2_1.4.1.000.bb | 26 ++++++++++++++++++ 22 files changed, 80 insertions(+), 147 deletions(-) delete mode 100644 packages/e17/e-wm_0.16.999.041.bb delete mode 100644 packages/e17/rage_0.2.0.005.bb create mode 100644 packages/e17/rage_cvs.bb delete mode 100644 packages/efl1/imlib2_1.4.0.002.bb create mode 100644 packages/efl1/imlib2_1.4.1.000.bb diff --git a/classes/efl_base.bbclass b/classes/efl_base.bbclass index 3865441779..023b2edf74 100644 --- a/classes/efl_base.bbclass +++ b/classes/efl_base.bbclass @@ -3,7 +3,7 @@ inherit autotools pkgconfig SECTION = "e/libs" HOMEPAGE = "http://www.enlightenment.org" SRCNAME = "${@bb.data.getVar('PN', d, 1).replace('-native', '')}" -SRC_URI = "http://download.enlightenment.org/snapshots/2007-07-10/${SRCNAME}-${PV}.tar.gz" +SRC_URI = "http://download.enlightenment.org/snapshots/2008-01-25/${SRCNAME}-${PV}.tar.gz" S = "${WORKDIR}/${SRCNAME}-${PV}" do_stage() { diff --git a/conf/distro/include/sane-srcdates.inc b/conf/distro/include/sane-srcdates.inc index cff6d7316b..aaf7b02a09 100644 --- a/conf/distro/include/sane-srcdates.inc +++ b/conf/distro/include/sane-srcdates.inc @@ -53,7 +53,7 @@ SRCDATE_gtkhtml2 ?= "20060323" # Enlightenment Foundation Libraries # Caution: This is not alphabetically, but (roughly) dependency-sorted. # Please leave it like that. -EFL_SRCDATE = "20080117" +EFL_SRCDATE = "20080129" SRCDATE_edb-native ?= "${EFL_SRCDATE}" SRCDATE_edb ?= "${EFL_SRCDATE}" SRCDATE_eet-native ?= "${EFL_SRCDATE}" @@ -107,9 +107,9 @@ SRCDATE_entice ?= "${EFL_SRCDATE}" SRCDATE_entrance ?= "${EFL_SRCDATE}" SRCDATE_e-utils ?= "${EFL_SRCDATE}" SRCDATE_e-wm ?= "${EFL_SRCDATE}" -SRCDATE_enna = "${EFL_SRCDATE}" -#SRCDATE_enna ?= "${EFL_SRCDATE}" +SRCDATE_enna ?= "${EFL_SRCDATE}" SRCDATE_exquisite ?= "${EFL_SRCDATE}" +SRCDATE_rage ?= "${EFL_SRCDATE}" # Misc packages, sorted by alphabet SRCDATE_avetanabt ?= "20060814" diff --git a/packages/e17/e-wm_0.16.999.041.bb b/packages/e17/e-wm_0.16.999.041.bb deleted file mode 100644 index 51e9e0d189..0000000000 --- a/packages/e17/e-wm_0.16.999.041.bb +++ /dev/null @@ -1,50 +0,0 @@ -DESCRIPTION = "E17 - the Enlightenment Window Mananger" -DEPENDS = "eet evas ecore edje efreet" -LICENSE = "MIT BSD" -PR = "r0" - -DEFAULT_PREFERENCE = "-1" - -inherit e update-alternatives - -SRC_URI = "http://download.enlightenment.org/snapshots/2007-08-26/enlightenment-${PV}.tar.gz \ - file://fix-configure.patch;patch=1 \ - file://set-autoscroll-defaults.patch;patch=1 \ - file://Xsession.d/98enlightenment \ - file://applications.menu \ - " - -S = "${WORKDIR}/enlightenment-${PV}" - -PROFILE = "LOWRES_PDA" -PROFILE_c7x0 = "HIRES_PDA" -PROFILE_tosa = "HIRES_PDA" -PROFILE_spitz = "HIRES_PDA" -PROFILE_akita = "HIRES_PDA" - -EXTRA_OECONF = "--with-profile=${PROFILE} \ - --with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \ - --x-includes=${STAGING_INCDIR}/X11 \ - --x-libraries=${STAGING_LIBDIR}" - -FILES_${PN} = "${bindir}/* ${libdir}/enlightenment/modules/*/*.edj ${libdir}/enlightenment/modules/*/*.desktop ${libdir}/enlightenment/modules/*/*/*.so ${libdir}/enlightenment/preload/*.so ${datadir} ${sysconfdir} ${libdir}/enlightenment/modules/cpufreq/*/freqset" -FILES_${PN}-dev += "${libdir}/enlightenment/modules/*/*/*.a ${libdir}/enlightenment/modules/*/*/*.la ${libdir}/enlightenment/preload/*.a ${libdir}/enlightenment/preload/*.la" -FILES_${PN}-dbg += "${libdir}/enlightenment/modules/*/*/.debug/ ${libdir}/enlightenment/preload/.debug/" - -do_compile_prepend() { - find ${S} -name Makefile | xargs sed -i 's:/usr/include:${STAGING_INCDIR}:' - find ${S} -name Makefile | xargs sed -i 's:/usr/X11R6/include:${STAGING_INCDIR}:' -} - -do_install_append() { - install -d ${D}/${sysconfdir}/X11/Xsession.d - install -m 755 ${WORKDIR}/Xsession.d/98enlightenment ${D}/${sysconfdir}/X11/Xsession.d - - install -d ${D}/${sysconfdir}/xdg/menus - install -m 644 ${WORKDIR}/applications.menu ${D}/${sysconfdir}/xdg/menus/ -} - -ALTERNATIVE_PATH = "${bindir}/enlightenment_start" -ALTERNATIVE_NAME = "x-window-manager" -ALTERNATIVE_LINK = "${bindir}/x-window-manager" -ALTERNATIVE_PRIORITY = "16" diff --git a/packages/e17/e-wm_cvs.bb b/packages/e17/e-wm_cvs.bb index 04e2ec7d59..e7af400a1c 100644 --- a/packages/e17/e-wm_cvs.bb +++ b/packages/e17/e-wm_cvs.bb @@ -1,7 +1,7 @@ -DESCRIPTION = "E17 - the Enlightenment Window Mananger" +DESCRIPTION = "The Enlightenment Window Mananger Version 17" DEPENDS = "eet evas ecore edje efreet" LICENSE = "MIT BSD" -PV = "0.16.999.041+cvs${SRCDATE}" +PV = "0.16.999.042+cvs${SRCDATE}" PR = "r0" inherit e update-alternatives diff --git a/packages/e17/rage_0.2.0.005.bb b/packages/e17/rage_0.2.0.005.bb deleted file mode 100644 index d2d6c3feae..0000000000 --- a/packages/e17/rage_0.2.0.005.bb +++ /dev/null @@ -1,10 +0,0 @@ -DESCRIPTION = "Rage is a media center application based on EFL" -AUTHOR = "Carsten 'The Rasterman' Heitzler" -HOMEPAGE = "http://www.rasterman.com" -LICENSE = "MIT BSD" -DEPENDS = "evas ecore edje" -SECTION = "x11/multimedia" - -SRC_URI = "http://download.enlightenment.org/snapshots/2007-08-26/rage-${PV}.tar.gz" - -inherit autotools diff --git a/packages/e17/rage_cvs.bb b/packages/e17/rage_cvs.bb new file mode 100644 index 0000000000..3b7bed7a11 --- /dev/null +++ b/packages/e17/rage_cvs.bb @@ -0,0 +1,13 @@ +DESCRIPTION = "Rage is a media center application based on EFL" +AUTHOR = "Carsten 'The Rasterman' Heitzler" +HOMEPAGE = "http://www.rasterman.com" +LICENSE = "MIT BSD" +DEPENDS = "evas ecore edje" +SECTION = "x11/multimedia" +PV = "0.3.0.042+cvs${SRCDATE}" + +inherit autotools + +SRC_URI = "${E_CVS};module=misc/rage" +S = "${WORKDIR}/rage" + diff --git a/packages/efl1/ecore.inc b/packages/efl1/ecore.inc index eacde2d012..6175c605c0 100644 --- a/packages/efl1/ecore.inc +++ b/packages/efl1/ecore.inc @@ -1,11 +1,9 @@ -DESCRIPTION = "Ecore is the core event abstraction layer for the enlightenment \ -foundation libraries. It makes makes doing selections, drag and drop, event loops, \ -timeouts and idle handlers fast, optimized, and convenient." -LICENSE = "MIT" +DESCRIPTION = "Ecore is the Enlightenment application framework library" +LICENSE = "MIT BSD" DEPENDS = "curl eet evas tslib" # optional # DEPENDS += "directfb libsdl-x11 openssl virtual/libiconv" -PV = "0.9.9.041+cvs${SRCDATE}" +PV = "0.9.9.042+cvs${SRCDATE}" inherit efl_library diff --git a/packages/efl1/ecore_cvs.bb b/packages/efl1/ecore_cvs.bb index cea3d7602d..b0a2a24f98 100644 --- a/packages/efl1/ecore_cvs.bb +++ b/packages/efl1/ecore_cvs.bb @@ -1,5 +1,5 @@ require ecore.inc -PR = "r2" +PR = "r0" EXTRA_OECONF = "\ --x-includes=${STAGING_INCDIR}/X11 \ @@ -15,6 +15,7 @@ EXTRA_OECONF = "\ --disable-ecore-sdl \ --enable-ecore-fb \ --enable-ecore-evas \ + --enable-ecore-evas-x11-16 \ --disable-ecore-evas-x11-gl \ --enable-ecore-evas-xrender \ --disable-ecore-evas-dfb \ diff --git a/packages/efl1/edje_cvs.bb b/packages/efl1/edje_cvs.bb index 734dccf56e..e930fc4795 100644 --- a/packages/efl1/edje_cvs.bb +++ b/packages/efl1/edje_cvs.bb @@ -1,9 +1,8 @@ -DESCRIPTION = "Edje is a complex graphical design & layout library." -# can also install vim data files +DESCRIPTION = "Edje is the Enlightenment graphical design & layout library" DEPENDS = "eet evas ecore embryo edje-native" LICENSE = "MIT BSD" -PV = "0.5.0.41+cvs${SRCDATE}" -PR = "r2" +PV = "0.5.0.042+cvs${SRCDATE}" +PR = "r0" inherit efl_library diff --git a/packages/efl1/eet_cvs.bb b/packages/efl1/eet_cvs.bb index f2ab6a7408..370b385bf8 100644 --- a/packages/efl1/eet_cvs.bb +++ b/packages/efl1/eet_cvs.bb @@ -1,10 +1,7 @@ -DESCRIPTION = "EET is a tiny library designed to write an \ -arbitary set of chunks of data to a file and optionally compress \ -each chunk (very much like a zip file) and allow fast \ -random-access reading of the file later on." +DESCRIPTION = "EET is the Enlightenment data storage library" DEPENDS = "zlib jpeg" LICENSE = "MIT BSD" -PV = "0.9.10.041+cvs${SRCDATE}" -PR = "r1" +PV = "0.9.10.042+cvs${SRCDATE}" +PR = "r0" inherit efl_library diff --git a/packages/efl1/efreet_cvs.bb b/packages/efl1/efreet_cvs.bb index 248dadd9bf..a1a027fc8f 100644 --- a/packages/efl1/efreet_cvs.bb +++ b/packages/efl1/efreet_cvs.bb @@ -1,8 +1,7 @@ -DESCRIPTION = "An implementation of freedesktop.org specs for the \ -Enlightenment Foundation Libraries" +DESCRIPTION = "The Enlightenment freedesktop.org library" DEPENDS = "ecore" LICENSE = "MIT BSD" -PV = "0.0.3.003+cvs${SRCDATE}" +PV = "0.0.3.042+cvs${SRCDATE}" PR = "r0" inherit efl_library diff --git a/packages/efl1/embryo_cvs.bb b/packages/efl1/embryo_cvs.bb index 15546e206f..2f5ab176ce 100644 --- a/packages/efl1/embryo_cvs.bb +++ b/packages/efl1/embryo_cvs.bb @@ -1,10 +1,6 @@ -DESCRIPTION = "Embryo implements a C like scripting language used in various parts \ -of the Enlightenment project, namely Edje. Embryo's scripting language is based on \ -CompuPhase's Small language that was introduced in Dr Dobb's Journal in 1999. \ -Embryo allows scripting capabilities in places that otherwise wouldn't support \ -basic programming structures such as in Edje EDCs." +DESCRIPTION = "The Enlightenment C-like scripting language for Edje" LICENSE = "MIT BSD" -PV = "0.9.1.041+cvs${SRCDATE}" -PR = "r1" +PV = "0.9.1.042+cvs${SRCDATE}" +PR = "r0" inherit efl_library diff --git a/packages/efl1/emotion_cvs.bb b/packages/efl1/emotion_cvs.bb index 84302e4793..36a5065e7a 100644 --- a/packages/efl1/emotion_cvs.bb +++ b/packages/efl1/emotion_cvs.bb @@ -1,9 +1,9 @@ -DESCRIPTION = "Emotion is a multimedia library with backends: gstreamer and libxine" -LICENSE = "MIT" +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" RRECOMMENDS_${PN} = "emotion-backend-gstreamer" -PV = "0.0.1+cvs${SRCDATE}" +PV = "0.1.0+cvs${SRCDATE}" PR = "r0" inherit efl_library diff --git a/packages/efl1/epdf_cvs.bb b/packages/efl1/epdf_cvs.bb index 27c475c37d..fa4f4282e1 100644 --- a/packages/efl1/epdf_cvs.bb +++ b/packages/efl1/epdf_cvs.bb @@ -1,13 +1,11 @@ DESCRIPTION = "Epdf is the glue between EFL and libpoppler" -LICENSE = "BSD" -DEPENDS = "poppler evas ecore etk" +LICENSE = "MIT BSD" +DEPENDS = "poppler evas ecore etk ewl" PV = "0.1.0+cvs${SRCDATE}" -PR = "r2" +PR = "r0" inherit efl_library -EXTRA_OECONF = "--disable-ewl" - SRC_URI = "${E_CVS};module=e17/proto/${SRCNAME} \ file://fix-plugin-path-check.patch;HACK=1;patch=1" diff --git a/packages/efl1/epsilon_cvs.bb b/packages/efl1/epsilon_cvs.bb index be2934dec8..8c71ef3e3d 100644 --- a/packages/efl1/epsilon_cvs.bb +++ b/packages/efl1/epsilon_cvs.bb @@ -1,9 +1,9 @@ DESCRIPTION = "Epsilon is a flexible and powerful image thumbnailing library \ that is compliant with the freedesktop.org Thumbnail Managing Standard." -LICENSE = "BSD" +LICENSE = "MIT BSD" # can also depend on xine for movie thumbnails DEPENDS = "imlib2 epeg libpng evas ecore edje perl-native" -PV = "0.3.0+cvs${SRCDATE}" +PV = "0.3.0.012+cvs${SRCDATE}" inherit efl_library diff --git a/packages/efl1/esmart_cvs.bb b/packages/efl1/esmart_cvs.bb index 17e1f42b95..fa35d60d30 100644 --- a/packages/efl1/esmart_cvs.bb +++ b/packages/efl1/esmart_cvs.bb @@ -1,7 +1,7 @@ DESCRIPTION = "ESmart is a collection of smart Evas objects" -LICENSE = "MIT" +LICENSE = "MIT BSD" DEPENDS = "evas ecore edje imlib2 epsilon libtool" -PV = "0.9.0+cvs${SRCDATE}" +PV = "0.9.0.042+cvs${SRCDATE}" inherit efl_library diff --git a/packages/efl1/etk_cvs.bb b/packages/efl1/etk_cvs.bb index 238d640a68..90df74e61c 100644 --- a/packages/efl1/etk_cvs.bb +++ b/packages/efl1/etk_cvs.bb @@ -1,8 +1,8 @@ DESCRIPTION = "Etk is an advanced widget toolkit based on the Enlightenment Foundation Libraries." DEPENDS = "evas ecore edje" LICENSE = "MIT" -PV = "0.1.0+cvs${SRCDATE}" -PR = "r1" +PV = "0.1.0.042+cvs${SRCDATE}" +PR = "r0" inherit efl_library diff --git a/packages/efl1/evas.inc b/packages/efl1/evas.inc index e05397067b..77ec2db308 100644 --- a/packages/efl1/evas.inc +++ b/packages/efl1/evas.inc @@ -1,18 +1,12 @@ -DESCRIPTION = "Evas is a hardware-accelerated canvas API that can draw \ -anti-aliased text, smooth super and sub-images, alpha-blend, as well as drop \ -down to using normal X11 primitives such as pixmaps, lines and rectangles if \ -your CPU or graphics hardware are too slow." +DESCRIPTION = "Evas is the Enlightenment canvas API" LICENSE = "MIT BSD" # can also depend on valgrind, libsdl-x11, directfb DEPENDS = "eet freetype jpeg libpng virtual/libx11 libxext libxrender" -PV = "0.9.9.041+cvs${SRCDATE}" +PV = "0.9.9.042+cvs${SRCDATE}" inherit efl_library -# SRC_URI += "file://fix-configure.patch;patch=1" - FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/evas" - EXTRA_OECONF = "" python populate_packages_prepend () { diff --git a/packages/efl1/evas_cvs.bb b/packages/efl1/evas_cvs.bb index d30a03d7c1..862cc51370 100644 --- a/packages/efl1/evas_cvs.bb +++ b/packages/efl1/evas_cvs.bb @@ -1,5 +1,5 @@ require evas.inc -PR = "r2" +PR = "r0" EXTRA_OECONF = "\ --x-includes=${STAGING_INCDIR}/X11 \ diff --git a/packages/efl1/ewl_cvs.bb b/packages/efl1/ewl_cvs.bb index 193efcbe18..15a777df67 100644 --- a/packages/efl1/ewl_cvs.bb +++ b/packages/efl1/ewl_cvs.bb @@ -1,10 +1,8 @@ -DESCRIPTION = "The Enlightened Widget Library, \ -a simple-to-use general purpose widget library \ -based on the enlightenment foundation libraries." +DESCRIPTION = "The Enlightened Widget Library" DEPENDS = "evas ecore edje emotion efreet epsilon" -LICENSE = "MIT" -PV = "0.5.1+cvs${SRCDATE}" -PR = "r2" +LICENSE = "MIT BSD" +PV = "0.5.2.042+cvs${SRCDATE}" +PR = "r0" inherit efl_library diff --git a/packages/efl1/imlib2_1.4.0.002.bb b/packages/efl1/imlib2_1.4.0.002.bb deleted file mode 100644 index baee4b62b0..0000000000 --- a/packages/efl1/imlib2_1.4.0.002.bb +++ /dev/null @@ -1,26 +0,0 @@ -DESCRIPTION = "A graphic library for file loading, saving, rendering, and manipulation." -LICENSE = "BSD" -# can also depend on tiff34, ungif or gif, z, bz2, id3tag -DEPENDS = "freetype libpng jpeg virtual/libx11 libxext" -PR = "r2" - -inherit efl_library - -SRC_URI += "file://remove-local-includes.patch;patch=1" - -EXTRA_OECONF = "--with-x" - -# TODO: Use more fine granular version -#OE_LT_RPATH_ALLOW=":${libdir}/imlib2/loaders:${libdir}/imlib2/filters:" -OE_LT_RPATH_ALLOW = "any" -OE_LT_RPATH_ALLOW[export]="1" - -PACKAGES =+ "imlib2-loaders-dbg imlib2-filters-dbg imlib2-loaders imlib2-filters" -FILES_${PN} = "${libdir}/lib*.so.* ${libdir}/imlib2/*/*.so" -FILES_${PN}-dbg = "${libdir}/.debug/ ${bindir}/.debug/" -FILES_${PN}-dev += "${bindir}/imlib2-config ${libdir}/*.so ${includedir}" -FILES_${PN}-bin = "${bindir}" -FILES_imlib2-loaders = "${libdir}/imlib2/loaders/*.so" -FILES_imlib2-filters = "${libdir}/imlib2/filters/*.so" -FILES_imlib2-loaders-dbg += "${libdir}/imlib2/loaders/.debug" -FILES_imlib2-filters-dbg += "${libdir}/imlib2/filters/.debug" diff --git a/packages/efl1/imlib2_1.4.1.000.bb b/packages/efl1/imlib2_1.4.1.000.bb new file mode 100644 index 0000000000..b0db13b5ce --- /dev/null +++ b/packages/efl1/imlib2_1.4.1.000.bb @@ -0,0 +1,26 @@ +DESCRIPTION = "A graphic library for file loading, saving, rendering, and manipulation." +LICENSE = "BSD" +# can also depend on tiff34, ungif or gif, z, bz2, id3tag +DEPENDS = "freetype libpng jpeg virtual/libx11 libxext" +PR = "r0" + +inherit efl_library + +SRC_URI += "file://remove-local-includes.patch;patch=1" + +EXTRA_OECONF = "--with-x" + +# TODO: Use more fine granular version +#OE_LT_RPATH_ALLOW=":${libdir}/imlib2/loaders:${libdir}/imlib2/filters:" +OE_LT_RPATH_ALLOW = "any" +OE_LT_RPATH_ALLOW[export]="1" + +PACKAGES =+ "imlib2-loaders-dbg imlib2-filters-dbg imlib2-loaders imlib2-filters" +FILES_${PN} = "${libdir}/lib*.so.* ${libdir}/imlib2/*/*.so" +FILES_${PN}-dbg = "${libdir}/.debug/ ${bindir}/.debug/" +FILES_${PN}-dev += "${bindir}/imlib2-config ${libdir}/*.so ${includedir}" +FILES_${PN}-bin = "${bindir}" +FILES_imlib2-loaders = "${libdir}/imlib2/loaders/*.so" +FILES_imlib2-filters = "${libdir}/imlib2/filters/*.so" +FILES_imlib2-loaders-dbg += "${libdir}/imlib2/loaders/.debug" +FILES_imlib2-filters-dbg += "${libdir}/imlib2/filters/.debug" -- cgit v1.2.3 From 2bf6b598ca6d64d572f51e7d30fe5487da731087 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Tue, 29 Jan 2008 22:04:32 +0000 Subject: bluez: add missing patch for -utils-3.24 --- packages/bluez/bluez-utils-3.24/.mtn2git_empty | 0 .../bluez/bluez-utils-3.24/hciattach-ti-bts.patch | 477 +++++++++++++++++++++ 2 files changed, 477 insertions(+) create mode 100644 packages/bluez/bluez-utils-3.24/.mtn2git_empty create mode 100644 packages/bluez/bluez-utils-3.24/hciattach-ti-bts.patch diff --git a/packages/bluez/bluez-utils-3.24/.mtn2git_empty b/packages/bluez/bluez-utils-3.24/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/bluez/bluez-utils-3.24/hciattach-ti-bts.patch b/packages/bluez/bluez-utils-3.24/hciattach-ti-bts.patch new file mode 100644 index 0000000000..1b208f7979 --- /dev/null +++ b/packages/bluez/bluez-utils-3.24/hciattach-ti-bts.patch @@ -0,0 +1,477 @@ +--- bluez-utils-3.1/tools/hciattach.c.orig 2006-07-23 14:02:14.000000000 +0200 ++++ bluez-utils-3.1/tools/hciattach.c 2006-07-23 14:06:29.000000000 +0200 +@@ -60,6 +60,8 @@ + #define HCI_UART_3WIRE 2 + #define HCI_UART_H4DS 3 + ++#include "ti_bts.h" ++ + struct uart_t { + char *type; + int m_id; +@@ -70,6 +72,7 @@ + int flags; + char *bdaddr; + int (*init) (int fd, struct uart_t *u, struct termios *ti); ++ char *bts; /* bluetooth script */ + }; + + #define FLOW_CTL 0x0001 +@@ -279,6 +282,114 @@ + return 0; + } + ++static int brf6150(int fd, struct uart_t *u, struct termios *ti) ++{ ++ bts_t *bfp; ++ int i; ++ unsigned long vers; ++ unsigned char actionbuf[256]; ++ unsigned char resp[128]; /* Response */ ++ unsigned long count; ++ unsigned short atype; ++ ++ if (u->bts == NULL) /* no script, ignore */ ++ return 0; ++ ++ bfp = bts_load_script( u->bts, &vers ); ++ if (bfp == NULL) ++ return -1; ++ ++ fprintf( stderr, "Loading BTS script version %lu\n", vers ); ++ ++ while ((count = bts_next_action( bfp, actionbuf, ++ sizeof actionbuf - 1, &atype )) != 0) { ++ if (atype == ACTION_REMARKS) { ++ if (actionbuf[0] != 0) ++ fprintf( stderr, "%s\n", actionbuf ); ++ } ++ else if (atype == ACTION_SEND_COMMAND) { ++#if 0 ++ fprintf( stderr, "ACTION_SEND_COMMAND: ", (int)atype ); ++ for (i=0; idata[i] ); ++ } ++ fprintf( stderr, "\n" ); ++#endif ++ usleep(wait->msec); /* seems they give usec, not msec */ ++ /* Read reply. */ ++ if ((count = read_hci_event(fd, resp, sizeof resp)) < 0) { ++ perror("Failed to read TI command response"); ++ return -1; ++ } ++ if (count < wait->size) { ++ fprintf( stderr, "TI command response is short."); ++ } ++ for (i=0; isize; i++) { ++ if (i == 3) continue; /* ignore */ ++ if (resp[i] != wait->data[i]) { ++ fprintf( stderr, "TI command response does not match expected result.\n" ); ++ } ++ } ++ } ++ else if (atype == ACTION_SERIAL_PORT_PARAMETERS) { ++ action_serial_t *sercmd = (action_serial_t *)actionbuf; ++ ++ /* Set actual baudrate */ ++ fprintf( stderr, ++ "BTS changing baud rate to %u, flow control to %u\n", ++ sercmd->baud, sercmd->flow_control ); ++ ++ tcflush(fd, TCIOFLUSH); ++ ++ if (sercmd->flow_control) ++ ti->c_cflag |= CRTSCTS; ++ else ++ ti->c_cflag &= ~CRTSCTS; ++ if (tcsetattr(fd, TCSANOW, ti) < 0) { ++ perror("Can't set port settings"); ++ return -1; ++ } ++ ++ u->speed = sercmd->baud; ++ ++ tcflush(fd, TCIOFLUSH); ++ if (set_speed(fd, ti, sercmd->baud) < 0) { ++ perror("Can't set baud rate"); ++ return -1; ++ } ++ } ++ else if (atype == ACTION_DELAY) { ++ action_delay_t *delay = (action_delay_t *)actionbuf; ++ usleep(delay->msec); /* seems they give usec, not msec */ ++ } ++ else { ++ fprintf( stderr, "BTS action type = %d: ", (int)atype ); ++ for (i=0; i> 2) == 3) { ++ /* BRF6150 */ ++ int err; ++ ++ nanosleep(&tm, NULL); ++ if ((err = brf6150(fd, u, ti)) != 0) { ++ fprintf(stderr, "Texas module script failed (err=%d)\n", err); ++ return -1; ++ } ++ } ++ + nanosleep(&tm, NULL); + return 0; + } +@@ -1204,7 +1326,7 @@ + { + printf("hciattach - HCI UART driver initialization utility\n"); + printf("Usage:\n"); +- printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [speed] [flow|noflow] [bdaddr]\n"); ++ printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [-S bts-script] [speed] [flow|noflow] [bdaddr]\n"); + printf("\thciattach -l\n"); + } + +@@ -1219,11 +1341,12 @@ + struct sigaction sa; + struct pollfd p; + char dev[PATH_MAX]; ++ char *bts = NULL; + + detach = 1; + printpid = 0; + +- while ((opt=getopt(argc, argv, "bnpt:s:l")) != EOF) { ++ while ((opt=getopt(argc, argv, "bnpt:s:S:l")) != EOF) { + switch(opt) { + case 'b': + send_break = 1; +@@ -1245,6 +1368,10 @@ + init_speed = atoi(optarg); + break; + ++ case 'S': ++ bts = optarg; ++ break; ++ + case 'l': + for (i = 0; uart[i].type; i++) { + printf("%-10s0x%04x,0x%04x\n", uart[i].type, +@@ -1320,6 +1447,8 @@ + if (init_speed) + u->init_speed = init_speed; + ++ u->bts = bts; ++ + memset(&sa, 0, sizeof(sa)); + sa.sa_flags = SA_NOCLDSTOP; + sa.sa_handler = sig_alarm; +--- bluez-utils-3.1/tools/ti_bts.h.orig 2006-07-23 14:07:26.000000000 +0200 ++++ bluez-utils-3.1/tools/ti_bts.h 2006-07-23 14:07:46.000000000 +0200 +@@ -0,0 +1,116 @@ ++/* ++ * Copyright (c) 2005 Texas Instruments, Inc. ++ * Ported by SDG Systems, LLC ++ * ++ * 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; ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. ++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY ++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ * ++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, ++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS ++ * SOFTWARE IS DISCLAIMED. ++ * ++ */ ++ ++#ifndef BT_SCRIPT_H ++#define BT_SCRIPT_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* ++ * Define the interface of Bluetooth Script ++ */ ++ ++typedef void bts_t; ++ ++ ++#define ACTION_SEND_COMMAND 1 /* Send out raw data (as is) */ ++#define ACTION_WAIT_EVENT 2 /* Wait for data */ ++#define ACTION_SERIAL_PORT_PARAMETERS 3 ++#define ACTION_DELAY 4 ++#define ACTION_RUN_SCRIPT 5 ++#define ACTION_REMARKS 6 ++ ++/* ++ * Structure for ACTION_SEND_COMMAND ++ */ ++typedef struct tagCActionCommand ++{ ++ unsigned char data[1]; /* Data to send */ ++} action_command_t; ++ ++/* ++ * Structure for ACTION_WAIT_EVENT ++ */ ++typedef struct tagCActionWaitEvent ++{ ++ unsigned long msec; /* in milliseconds */ ++ unsigned long size; ++ unsigned char data[1]; /* Data to wait for */ ++} action_wait_t; ++ ++ ++/* ++ * Structure for ACTION_SERIAL_PORT_PARAMETERS ++ */ ++typedef struct tagCActionSerialPortParameters ++{ ++ unsigned long baud; ++ unsigned long flow_control; ++} action_serial_t; ++ ++/* Flow Control Type */ ++#define FCT_NONE 0 ++#define FCT_HARDWARE 1 ++ ++#define DONT_CHANGE 0xFFFFFFFF /* For both baud rate and flow control */ ++ ++ ++/* ++ * Structure for ACTION_DELAY ++ */ ++typedef struct tagCActionDelay ++{ ++ unsigned long msec; /* in milliseconds */ ++} action_delay_t; ++ ++/* ++ * Structure for ACTION_RUN_SCRIPT ++ */ ++typedef struct tagCActionRunScript ++{ ++ char filename[1]; ++} action_run_t; ++ ++/* ++ * Structure for ACTION_REMARKS ++ */ ++typedef struct tagCActionRemarks ++{ ++ char m_szRemarks[1]; ++} action_remarks_t; ++ ++ ++const char *cis_create_filename(const unsigned char* cmdparms); ++bts_t * bts_load_script(const char* fname, unsigned long* version); ++unsigned long bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, ++ unsigned long nMaxSize, unsigned short* ptype); ++void bts_unload_script(bts_t* bts_fp); ++ ++#ifdef __cplusplus ++}; ++#endif ++ ++#endif /* BT_SCRIPT_H */ ++ +--- bluez-utils-3.1/tools/ti_bts.c.orig 2006-07-23 14:07:28.000000000 +0200 ++++ bluez-utils-3.1/tools/ti_bts.c 2006-07-23 14:07:46.000000000 +0200 +@@ -0,0 +1,149 @@ ++/* ++ * Copyright (c) 2005 Texas Instruments, Inc. ++ * Ported by SDG Systems, LLC ++ * ++ * 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; ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. ++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY ++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ * ++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, ++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS ++ * SOFTWARE IS DISCLAIMED. ++ * ++ */ ++ ++ ++#include ++#include ++#include "ti_bts.h" ++ ++#ifndef MAKEWORD ++#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) | ((unsigned short)((unsigned char)(b))) << 8)) ++#endif ++ ++#define TI_MANUFACTURER_ID 13 ++ ++/* ++ * Common Init Script specific ++ */ ++const char * ++cis_create_filename(const unsigned char* cmdparms) ++{ ++ static char bts_file[50]; ++ ++ /* Check for TI's id */ ++ unsigned short manfid = MAKEWORD(cmdparms[8], cmdparms[9]); ++ ++ if (TI_MANUFACTURER_ID == manfid) { ++ unsigned short version = MAKEWORD(cmdparms[10], cmdparms[11]); ++ ++ unsigned short chip = (version & 0x7C00) >> 10; ++ unsigned short min_ver = (version & 0x007F); ++ unsigned short maj_ver = (version & 0x0380) >> 7; ++ ++ if (0 != (version & 0x8000)) { ++ maj_ver |= 0x0008; ++ } ++ ++ sprintf( bts_file, "TIInit_%d.%d.%d.bts", ++ (int)chip, (int)maj_ver, (int)min_ver); ++ ++ return &bts_file[0]; ++ } ++ return NULL; ++} ++ ++typedef struct tagCHeader ++{ ++ unsigned long magic; ++ unsigned long version; ++ unsigned char future[24]; ++} cheader_t; ++ ++ ++/* The value 0x42535442 stands for (in ASCII) BTSB */ ++/* which is Bluetooth Script Binary */ ++#define FILE_HEADER_MAGIC 0x42535442 ++ ++ ++bts_t * ++bts_load_script(const char* fname, unsigned long* version) ++{ ++ bts_t* bts = NULL; ++ FILE* fp = fopen(fname, "rb"); ++ ++ if (NULL != fp) { ++ /* Read header */ ++ cheader_t header; ++ ++ /* Read header */ ++ if (1 == fread(&header, sizeof(header), 1, fp)) { ++ /* Check magic number for correctness */ ++ if (header.magic == FILE_HEADER_MAGIC) { ++ /* If user wants the version number */ ++ if (NULL != version) { ++ *version = header.version; ++ } ++ bts = (bts_t*)fp; ++ } ++ } ++ /* If failed reading the file, close it */ ++ if (NULL == bts) { ++ fclose(fp); ++ } ++ } ++ return bts; ++} ++ ++unsigned long ++bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, ++ unsigned long nMaxSize, unsigned short* ptype) ++{ ++ unsigned long bytes = 0; ++ FILE* fp = (FILE*)bts_fp; ++ unsigned char action_hdr[4]; ++ ++ if (bts_fp == NULL) ++ return 0; ++ ++ /* Each Action has the following: */ ++ /* UINT16 type of this action */ ++ /* UINT16 size of rest */ ++ /* BYTE[] action buffer (for HCI, includes the type byte e.g. 1 for hci command) */ ++ ++ if (1 == fread(&action_hdr[0], sizeof(action_hdr), 1, fp)) { ++ unsigned short type = *(unsigned short*)&action_hdr[0]; ++ unsigned short size = *(unsigned short*)&action_hdr[2]; ++ ++ if (size <= nMaxSize) { ++ int nread = fread(action_buf, sizeof(action_buf[0]), size, fp); ++ ++ if (nread == size) { ++ *ptype = type; ++ bytes = (unsigned long)size; ++ } ++ } ++ } ++ ++ return bytes; ++} ++ ++void ++bts_unload_script(bts_t* bts_fp) ++{ ++ FILE* fp = (FILE*)bts_fp; ++ ++ if (NULL != fp) { ++ fclose(fp); ++ } ++} ++ +--- bluez-utils-3.1/tools/Makefile.am.orig 2006-07-23 14:06:59.000000000 +0200 ++++ bluez-utils-3.1/tools/Makefile.am 2006-07-23 14:07:18.000000000 +0200 +@@ -45,7 +45,7 @@ + + noinst_PROGRAMS = hcisecfilter ppporc + +-hciattach_SOURCES = hciattach.c hciattach_st.c ++hciattach_SOURCES = hciattach.c hciattach_st.c ti_bts.h ti_bts.c + hciattach_LDADD = @BLUEZ_LIBS@ + + hciconfig_SOURCES = hciconfig.c csr.h csr.c -- cgit v1.2.3 From 1d7653a4040c77cc803a5e0cb5aebc824a66d58b Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 29 Jan 2008 23:27:41 +0000 Subject: glibc 2.5, 2.6.1: * check for updated resolv.conf before a nameserver call (see debian bug #272265) * remove bogus executable attribute for patch * clean up ugly mixing of tabs and spaces --- .../files/glibc-2.5-local-dynamic-resolvconf.patch | 44 ++++++++++++ .../glibc-2.5-soft-fp-separate-strong-alias.patch | 0 packages/glibc/glibc_2.5.bb | 83 ++++++++++------------ packages/glibc/glibc_2.6.1.bb | 73 +++++++++---------- 4 files changed, 115 insertions(+), 85 deletions(-) create mode 100644 packages/glibc/files/glibc-2.5-local-dynamic-resolvconf.patch mode change 100755 => 100644 packages/glibc/files/glibc-2.5-soft-fp-separate-strong-alias.patch diff --git a/packages/glibc/files/glibc-2.5-local-dynamic-resolvconf.patch b/packages/glibc/files/glibc-2.5-local-dynamic-resolvconf.patch new file mode 100644 index 0000000000..bab3747b1a --- /dev/null +++ b/packages/glibc/files/glibc-2.5-local-dynamic-resolvconf.patch @@ -0,0 +1,44 @@ +--- glibc-2.5.orig/debian/patches/any/local-dynamic-resolvconf.diff ++++ glibc-2.5/debian/patches/any/local-dynamic-resolvconf.diff +@@ -0,0 +1,41 @@ ++# All lines beginning with `# DP:' are a description of the patch. ++# DP: Description: allow dynamic long-running processes to ++# DP: re-read a dynamically updated resolv.conf on the fly ++# DP: Dpatch author: Adam Conrad ++# DP: Patch author: Thorsten Kukuk ++# DP: Upstream status: Ubuntu-Specific ++# DP: Date: 2006-01-13 08:14:21 UTC ++ ++Index: resolv/res_libc.c ++=================================================================== ++--- resolv/res_libc.c.orig +++++ resolv/res_libc.c ++@@ -22,7 +22,7 @@ ++ #include ++ #include ++ #include ++- +++#include ++ ++ /* The following bit is copied from res_data.c (where it is #ifdef'ed ++ out) since res_init() should go into libc.so but the rest of that ++@@ -94,8 +94,17 @@ ++ int ++ __res_maybe_init (res_state resp, int preinit) ++ { ++- if (resp->options & RES_INIT) { ++- if (__res_initstamp != resp->_u._ext.initstamp) { +++ static time_t last_mtime; +++ struct stat statbuf; +++ int ret; +++ +++ +++ if (resp->options & RES_INIT) { +++ ret = stat (_PATH_RESCONF, &statbuf); +++ if (__res_initstamp != resp->_u._ext.initstamp +++ || (ret == 0) && (last_mtime != statbuf.st_mtime)) +++ { +++ last_mtime = statbuf.st_mtime; ++ if (resp->nscount > 0) { ++ __res_iclose (resp, true); ++ return __res_vinit (resp, 1); diff --git a/packages/glibc/files/glibc-2.5-soft-fp-separate-strong-alias.patch b/packages/glibc/files/glibc-2.5-soft-fp-separate-strong-alias.patch old mode 100755 new mode 100644 diff --git a/packages/glibc/glibc_2.5.bb b/packages/glibc/glibc_2.5.bb index e30d357121..f50c85b1d0 100644 --- a/packages/glibc/glibc_2.5.bb +++ b/packages/glibc/glibc_2.5.bb @@ -1,17 +1,15 @@ require glibc.inc +PR = "r9" ARM_INSTRUCTION_SET = "arm" PACKAGES_DYNAMIC = "libc6*" RPROVIDES_${PN}-dev = "libc6-dev" -PR = "r8" - # the -isystem in bitbake.conf screws up glibc do_stage BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}" TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}" - FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-2.4" GLIBC_ADDONS ?= "ports,nptl,libidn" @@ -36,57 +34,52 @@ python __anonymous () { RDEPENDS_${PN}-dev = "linux-libc-headers-dev" -# file://noinfo.patch;patch=1 -# file://ldconfig.patch;patch=1;pnum=0 -# file://arm-machine-gmon.patch;patch=1;pnum=0 \ -# \ -# file://arm-ioperm.patch;patch=1;pnum=0 \ -# file://ldd.patch;patch=1;pnum=0 \ -SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \ - ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2 \ - ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2 \ - file://arm-memcpy.patch;patch=1 \ - file://arm-longlong.patch;patch=1 \ - file://fhs-linux-paths.patch;patch=1 \ - file://dl-cache-libcmp.patch;patch=1 \ - file://ldsocache-varrun.patch;patch=1 \ - file://nptl-crosscompile.patch;patch=1 \ - file://glibc-check_pf.patch;patch=1;pnum=0 \ -# file://glibc-2.4-compile.patch;patch=1 \ -# file://glibc-2.4-openat-3.patch;patch=1 \ -# file://fixup-aeabi-syscalls.patch;patch=1 \ - file://zecke-sane-readelf.patch;patch=1 \ - file://ldd-unbash.patch;patch=1 \ - file://generic-bits_select.h \ - file://generic-bits_types.h \ - file://generic-bits_typesizes.h \ - file://generic-bits_time.h \ - file://etc/ld.so.conf \ - file://generate-supported.mk" - +SRC_URI = "\ + ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \ + ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2 \ + ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2 \ + file://arm-memcpy.patch;patch=1 \ + file://arm-longlong.patch;patch=1 \ + file://fhs-linux-paths.patch;patch=1 \ + file://dl-cache-libcmp.patch;patch=1 \ + file://ldsocache-varrun.patch;patch=1 \ + file://nptl-crosscompile.patch;patch=1 \ + file://glibc-2.5-local-dynamic-resolvconf.patch;patch=1 \ + file://glibc-check_pf.patch;patch=1;pnum=0 \ + file://zecke-sane-readelf.patch;patch=1 \ + file://ldd-unbash.patch;patch=1 \ + file://generic-bits_select.h \ + file://generic-bits_types.h \ + file://generic-bits_typesizes.h \ + file://generic-bits_time.h \ + file://etc/ld.so.conf \ + file://generate-supported.mk \ +" # Build fails on sh3 and sh4 without additional patches SRC_URI_append_sh3 = " file://no-z-defs.patch;patch=1" SRC_URI_append_sh4 = " file://no-z-defs.patch;patch=1" -#powerpc patches to add support for soft-float -SRC_URI_append_powerpc= " file://ppc-sfp-machine.patch;patch=1 \ - file://ppc-soft-fp-20070115.patch;patch=1 \ - file://ppc-ld-nofpu-20070104.patch;patch=1 \ - file://ppc-ports-ld-nofpu-20070114.patch;patch=1 \ - file://powerpc-sqrt-hack.diff;patch=1 \ - file://glibc-2.5-soft-fp-separate-strong-alias.patch;patch=1" +# Powerpc patches to add support for soft-float +SRC_URI_append_powerpc = " file://ppc-sfp-machine.patch;patch=1 \ + file://ppc-soft-fp-20070115.patch;patch=1 \ + file://ppc-ld-nofpu-20070104.patch;patch=1 \ + file://ppc-ports-ld-nofpu-20070114.patch;patch=1 \ + file://powerpc-sqrt-hack.diff;patch=1 \ + file://glibc-2.5-soft-fp-separate-strong-alias.patch;patch=1" S = "${WORKDIR}/glibc-${PV}" B = "${WORKDIR}/build-${TARGET_SYS}" -EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \ - --without-cvs --disable-profile --disable-debug --without-gd \ - --enable-clocale=gnu \ - --enable-add-ons=${GLIBC_ADDONS} \ - --with-headers=${STAGING_INCDIR} \ - --without-selinux \ - ${GLIBC_EXTRA_OECONF}" +EXTRA_OECONF = "\ + --enable-kernel=${OLDEST_KERNEL} \ + --without-cvs --disable-profile --disable-debug --without-gd \ + --enable-clocale=gnu \ + --enable-add-ons=${GLIBC_ADDONS} \ + --with-headers=${STAGING_INCDIR} \ + --without-selinux \ + ${GLIBC_EXTRA_OECONF} \ +" EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}" diff --git a/packages/glibc/glibc_2.6.1.bb b/packages/glibc/glibc_2.6.1.bb index 46b56a0a65..d2816f83b1 100644 --- a/packages/glibc/glibc_2.6.1.bb +++ b/packages/glibc/glibc_2.6.1.bb @@ -1,12 +1,11 @@ require glibc.inc +PR = "r2" ARM_INSTRUCTION_SET = "arm" PACKAGES_DYNAMIC = "libc6*" RPROVIDES_${PN}-dev = "libc6-dev" -PR = "r1" - # the -isystem in bitbake.conf screws up glibc do_stage BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}" TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}" @@ -36,53 +35,47 @@ python __anonymous () { RDEPENDS_${PN}-dev = "linux-libc-headers-dev" -# file://noinfo.patch;patch=1 -# file://ldconfig.patch;patch=1;pnum=0 -# file://arm-machine-gmon.patch;patch=1;pnum=0 \ -# \ -# file://arm-ioperm.patch;patch=1;pnum=0 \ -# file://ldd.patch;patch=1;pnum=0 \ -SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \ - ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2 \ - ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2 \ - file://arm-memcpy.patch;patch=1 \ - file://arm-longlong.patch;patch=1 \ - file://fhs-linux-paths.patch;patch=1 \ - file://dl-cache-libcmp.patch;patch=1 \ - file://ldsocache-varrun.patch;patch=1 \ - file://nptl-crosscompile.patch;patch=1 \ - file://glibc-check_pf.patch;patch=1;pnum=0 \ -# file://glibc-2.4-compile.patch;patch=1 \ -# file://glibc-2.4-openat-3.patch;patch=1 \ -# file://fixup-aeabi-syscalls.patch;patch=1 \ - file://zecke-sane-readelf.patch;patch=1 \ - file://ldd-unbash.patch;patch=1 \ - file://generic-bits_select.h \ - file://generic-bits_types.h \ - file://generic-bits_typesizes.h \ - file://generic-bits_time.h \ - file://etc/ld.so.conf \ - file://generate-supported.mk" - +SRC_URI = "\ + ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \ + ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2 \ + ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2 \ + file://arm-memcpy.patch;patch=1 \ + file://arm-longlong.patch;patch=1 \ + file://fhs-linux-paths.patch;patch=1 \ + file://dl-cache-libcmp.patch;patch=1 \ + file://ldsocache-varrun.patch;patch=1 \ + file://nptl-crosscompile.patch;patch=1 \ + file://glibc-2.5-local-dynamic-resolvconf.patch;patch=1 \ + file://glibc-check_pf.patch;patch=1;pnum=0 \ + file://zecke-sane-readelf.patch;patch=1 \ + file://ldd-unbash.patch;patch=1 \ + file://generic-bits_select.h \ + file://generic-bits_types.h \ + file://generic-bits_typesizes.h \ + file://generic-bits_time.h \ + file://etc/ld.so.conf \ + file://generate-supported.mk \ +" # Build fails on sh3 and sh4 without additional patches SRC_URI_append_sh3 = " file://no-z-defs.patch;patch=1" SRC_URI_append_sh4 = " file://no-z-defs.patch;patch=1" -#powerpc patches to add support for soft-float -SRC_URI_append_powerpc= " \ - file://powerpc-sqrt-hack.diff;patch=1"" +# PowerPC Patches to add support for soft-float +SRC_URI_append_powerpc = "file://powerpc-sqrt-hack.diff;patch=1" S = "${WORKDIR}/glibc-${PV}" B = "${WORKDIR}/build-${TARGET_SYS}" -EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \ - --without-cvs --disable-profile --disable-debug --without-gd \ - --enable-clocale=gnu \ - --enable-add-ons=${GLIBC_ADDONS} \ - --with-headers=${STAGING_INCDIR} \ - --without-selinux \ - ${GLIBC_EXTRA_OECONF}" +EXTRA_OECONF = "\ + --enable-kernel=${OLDEST_KERNEL} \ + --without-cvs --disable-profile --disable-debug --without-gd \ + --enable-clocale=gnu \ + --enable-add-ons=${GLIBC_ADDONS} \ + --with-headers=${STAGING_INCDIR} \ + --without-selinux \ + ${GLIBC_EXTRA_OECONF} \ +" EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}" -- cgit v1.2.3 From 87dbb130cd82dc647e8082a2096b3add50dc2d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Wed, 30 Jan 2008 00:55:11 +0000 Subject: MAINTAINERS: add my entry --- MAINTAINERS | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 69594e61ba..089cf6e67c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,4 +1,4 @@ -OpenEmbedded Maintainers List +OpenEmbedded Maintainers List Please put you full name and email-address here for the areas of OE you want to support. @@ -86,6 +86,12 @@ Recipes: quagga, iputils, ndic6, hping2, lilo-sh, conserver, ipsec-tools, Recipes: lilo-sh, clamav, havp, p3scan, clamsmtp, librsync, rdiff-backup, Recipes: net-snmp, ebtables, ethtool, arpwatch, lib*-perl +Person: Jan Luebbe +Mail: jluebbe@lasnet.de +Website: http://sicherheitsschwankung.de +Machines: chumby +Recipes: chumby-*, initramfs-chumby + Person: Joaquim Duran Mail: joaquinduran@adtelecom.es Recipes: gtk+, gtkmm -- cgit v1.2.3 From 6487ebd038555122ab15a1fe6769e38e44f0b61c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Wed, 30 Jan 2008 00:56:18 +0000 Subject: chumby-firmware: package upstream firmware for a future kexec initramfs The initramfs will be able to run the factory default rootfs. --- packages/chumby/.mtn2git_empty | 0 packages/chumby/chumby-firmware_1.2.bb | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 packages/chumby/.mtn2git_empty create mode 100644 packages/chumby/chumby-firmware_1.2.bb diff --git a/packages/chumby/.mtn2git_empty b/packages/chumby/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/chumby/chumby-firmware_1.2.bb b/packages/chumby/chumby-firmware_1.2.bb new file mode 100644 index 0000000000..73e3a4a7a9 --- /dev/null +++ b/packages/chumby/chumby-firmware_1.2.bb @@ -0,0 +1,34 @@ +DESCRIPTION = "Binary Chumby firmware for kexec" +PACKAGES = "${PN}-k2 ${PN}-rfs2 ${PN}-bl ${PN}-psp ${PN}-k1 ${PN}-rfs1" +PR = "r1" + +SRC_URI = "http://files.chumby.com/resources/chumby_fw_1_2.zip" +S = ${WORKDIR} + +PACKAGE_ARCH = "chumby" +COMPATIBLE_MACHINES = "chumby" + +do_install () { + cd ${S}/update1 && unzip k2.bin.zip + cd ${S}/update1 && unzip rfs2.bin.zip + cd ${S}/update2 && unzip bl.bin.zip + cd ${S}/update2 && unzip psp.bin.zip + cd ${S}/update2 && unzip k1.bin.zip + cd ${S}/update2 && unzip rfs1.bin.zip + + install -d ${D}/boot/chumby-firmware/ + install -m 0644 ${S}/update1/k2.bin ${D}/boot/chumby-firmware/ + install -m 0644 ${S}/update1/rfs2.bin ${D}/boot/chumby-firmware/ + install -m 0644 ${S}/update2/bl.bin ${D}/boot/chumby-firmware/ + install -m 0644 ${S}/update2/psp.bin ${D}/boot/chumby-firmware/ + install -m 0644 ${S}/update2/k1.bin ${D}/boot/chumby-firmware/ + install -m 0644 ${S}/update2/rfs1.bin ${D}/boot/chumby-firmware/ +} + +FILES_${PN}-k2 = "/boot/chumby-firmware/k2.bin" +FILES_${PN}-rfs2 = "/boot/chumby-firmware/rfs2.bin" +FILES_${PN}-bl = "/boot/chumby-firmware/bl.bin" +FILES_${PN}-psp = "/boot/chumby-firmware/psp.bin" +FILES_${PN}-k1 = "/boot/chumby-firmware/k1.bin" +FILES_${PN}-rfs1 = "/boot/chumby-firmware/rfs1.bin" + -- cgit v1.2.3 From 731346c9c449cc97cd2781fd3b4f5422c341a829 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Wed, 30 Jan 2008 01:41:42 +0000 Subject: db_4.3.29: fix packaging QA --- packages/db/db_4.3.29.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/db/db_4.3.29.bb b/packages/db/db_4.3.29.bb index 750822fafe..026b45bd67 100644 --- a/packages/db/db_4.3.29.bb +++ b/packages/db/db_4.3.29.bb @@ -14,7 +14,7 @@ HOMEPAGE = "http://www.sleepycat.com" LICENSE = "BSD Sleepycat" VIRTUAL_NAME ?= "virtual/db" CONFLICTS = "db3" -PR = "r8" +PR = "r9" SRC_URI = "http://downloads.sleepycat.com/db-${PV}.tar.gz" #SRC_URI_MD5 = "http://downloads.sleepycat.com/db-${PV}.tar.gz.md5" @@ -44,7 +44,7 @@ B = "${WORKDIR}/db-${PV}/build_unix" PACKAGES += " ${PN}-bin" # Package contents -FILES_${PN} = "${libdir}/libdb-4*so*" +FILES_${PN} = "${libdir}/libdb-4.*.so*" FILES_${PN}-bin = "${bindir}/*" # The dev package has the .so link (as in db3) and the .a's - # it is therefore incompatible (cannot be installed at the -- cgit v1.2.3 From 9d301ebcc2a9dd9a5978068df01aca3c8cbb102d Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Wed, 30 Jan 2008 06:19:00 +0000 Subject: linux-ixp4xx: Added 2.6.24 kernel, but not made default until dsmg600 ethernet driver is fixed --- packages/linux/linux-ixp4xx/defconfig-2.6.24 | 1940 ++++++++++++++++++++ packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 | 1940 ++++++++++++++++++++ packages/linux/linux-ixp4xx_2.6.24.bb | 45 + 3 files changed, 3925 insertions(+) create mode 100644 packages/linux/linux-ixp4xx/defconfig-2.6.24 create mode 100644 packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 create mode 100644 packages/linux/linux-ixp4xx_2.6.24.bb diff --git a/packages/linux/linux-ixp4xx/defconfig-2.6.24 b/packages/linux/linux-ixp4xx/defconfig-2.6.24 new file mode 100644 index 0000000000..6aeb53b5ac --- /dev/null +++ b/packages/linux/linux-ixp4xx/defconfig-2.6.24 @@ -0,0 +1,1940 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23.8 +# Wed Nov 21 22:15:10 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=m +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +CONFIG_ARCH_IXP4XX=y +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y + +# +# Intel IXP4xx Implementation Options +# + +# +# IXP4xx Platforms +# +CONFIG_MACH_NSLU2=y +CONFIG_MACH_AVILA=y +CONFIG_MACH_LOFT=y +# CONFIG_ARCH_ADI_COYOTE is not set +# CONFIG_MACH_GATEWAY7001 is not set +# CONFIG_MACH_WG302V2 is not set +CONFIG_ARCH_IXDP425=y +CONFIG_MACH_IXDPG425=y +# CONFIG_MACH_IXDP465 is not set +# CONFIG_MACH_KIXRP435 is not set +CONFIG_ARCH_IXCDP1100=y +# CONFIG_ARCH_PRPMC1100 is not set +CONFIG_MACH_NAS100D=y +CONFIG_MACH_DSMG600=y +CONFIG_ARCH_IXDP4XX=y +CONFIG_MACH_FSG=y +# CONFIG_MACH_GTWX5715 is not set + +# +# IXP4xx Options +# +CONFIG_DMABOUNCE=y +# CONFIG_IXP4XX_INDIRECT_PCI is not set +CONFIG_IXP4XX_QMGR=y +CONFIG_IXP4XX_NPE=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +CONFIG_CPU_BIG_ENDIAN=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +# CONFIG_IWMMXT is not set +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +CONFIG_PCI=y +CONFIG_PCI_SYSCALL=y +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +# CONFIG_PM is not set +CONFIG_SUSPEND_UP_POSSIBLE=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +# CONFIG_NF_CT_PROTO_UDPLITE is not set +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +# CONFIG_IP6_NF_QUEUE is not set +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# Bridge: Netfilter Configuration +# +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_ULOG=m +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +CONFIG_TIPC=m +# CONFIG_TIPC_ADVANCED is not set +# CONFIG_TIPC_DEBUG is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_ATALK=m +CONFIG_DEV_APPLETALK=m +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set +CONFIG_NET_CLS_ROUTE=y + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_CMTP=m +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_RFKILL=m +# CONFIG_RFKILL_INPUT is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_CONCAT=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +CONFIG_NFTL=y +CONFIG_NFTL_RW=y +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +# CONFIG_MTD_CFI_NOSWAP is not set +CONFIG_MTD_CFI_BE_BYTE_SWAP=y +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_IXP4XX=y +# CONFIG_MTD_PCI is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=4 +CONFIG_BLK_DEV_RAM_SIZE=10240 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_ATA_OVER_ETH=m +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_ST=m +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +CONFIG_SCSI_ISCSI_ATTRS=m +# CONFIG_SCSI_SAS_LIBSAS is not set +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_SRP is not set +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_SVW is not set +# CONFIG_ATA_PIIX is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIL24 is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_ULI is not set +CONFIG_SATA_VIA=m +# CONFIG_SATA_VITESSE is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +CONFIG_PATA_ARTOP=m +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_PLATFORM is not set +CONFIG_PATA_IXP4XX_CF=m +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MD_RAID5_RESHAPE=y +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +# CONFIG_DM_SNAPSHOT is not set +# CONFIG_DM_MIRROR is not set +# CONFIG_DM_ZERO is not set +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_IEEE1394 is not set +# CONFIG_I2O is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_IXP4XX_ETH=y +# CONFIG_AX88796 is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_DGRS is not set +# CONFIG_EEPRO100 is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +CONFIG_NETDEV_1000=y +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_SK98LIN is not set +CONFIG_VIA_VELOCITY=m +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_DEBUG is not set +# CONFIG_HERMES is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +CONFIG_USB_ZD1201=m +# CONFIG_HOSTAP is not set +# CONFIG_BCM43XX is not set +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET_MII=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +CONFIG_USB_NET_ZAURUS=m +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +CONFIG_NETCONSOLE=m +CONFIG_NETPOLL=y +# CONFIG_NETPOLL_TRAP is not set +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_ISDN=m +# CONFIG_ISDN_I4L is not set +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_CAPI_TRACE=y +# CONFIG_ISDN_CAPI_MIDDLEWARE is not set +CONFIG_ISDN_CAPI_CAPI20=m + +# +# CAPI hardware drivers +# +# CONFIG_CAPI_AVM is not set +# CONFIG_CAPI_EICON is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +CONFIG_INPUT_IXP4XX_BEEPER=y +CONFIG_INPUT_ATI_REMOTE=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_KEYSPAN_REMOTE=m +# CONFIG_INPUT_POWERMATE is not set +CONFIG_INPUT_YEALINK=m +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_COMPUTONE is not set +# CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set +# CONFIG_DIGIEPCA is not set +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_MOXA_SMARTIO_NEW is not set +# CONFIG_ISI is not set +# CONFIG_SYNCLINKMP is not set +# CONFIG_SYNCLINK_GT is not set +CONFIG_N_HDLC=m +# CONFIG_RISCOM8 is not set +# CONFIG_SPECIALIX is not set +# CONFIG_SX is not set +# CONFIG_RIO is not set +# CONFIG_STALDRV is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=m +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_IXP4XX_WATCHDOG=m + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_IXP4XX=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +CONFIG_I2C_GPIO=y +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_IOP3XX is not set +# CONFIG_I2C_IXP4XX is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +CONFIG_I2C_TINY_USB=m +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +CONFIG_SENSORS_EEPROM=y +CONFIG_SENSORS_PCF8574=m +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +CONFIG_W1=m + +# +# 1-wire Bus Masters +# +# CONFIG_W1_MASTER_MATROX is not set +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m +# CONFIG_W1_MASTER_DS1WM is not set + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2433=m +CONFIG_W1_SLAVE_DS2433_CRC=y +# CONFIG_W1_SLAVE_DS2760 is not set +CONFIG_HWMON=m +CONFIG_HWMON_VID=m +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set +CONFIG_SENSORS_AD7418=m +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_FSCPOS is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +CONFIG_SENSORS_W83781D=m +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_MISC_DEVICES=y +# CONFIG_PHANTOM is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_IXP4XX is not set +CONFIG_LEDS_GPIO=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +# CONFIG_VIDEO_V4L1 is not set +# CONFIG_VIDEO_V4L1_COMPAT is not set +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +CONFIG_VIDEO_VIVI=m +CONFIG_VIDEO_SAA5246A=m +CONFIG_VIDEO_SAA5249=m +# CONFIG_TUNER_TEA5761 is not set +CONFIG_VIDEO_SAA7134=m +# CONFIG_VIDEO_SAA7134_ALSA is not set +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +# CONFIG_VIDEO_CX88_BLACKBIRD is not set +# CONFIG_VIDEO_CAFE_CCIC is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_USBVISION is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_USB_SN9C102 is not set +# CONFIG_USB_ZC0301 is not set +CONFIG_USB_ZR364XX=m +# CONFIG_RADIO_ADAPTERS is not set +# CONFIG_DVB_CORE is not set +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEO_BUF=m +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_IR_I2C=m +CONFIG_VIDEO_IR=m +CONFIG_VIDEO_TVEEPROM=m +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +# CONFIG_FB is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# ALSA ARM devices +# + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +CONFIG_USB_HIDDEV=y + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_SPLIT_ISO=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=m +# CONFIG_USB_U132_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +CONFIG_USB_STORAGE_FREECOM=y +# CONFIG_USB_STORAGE_DPCM is not set +CONFIG_USB_STORAGE_USBAT=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_STORAGE_ALAUDA=y +CONFIG_USB_STORAGE_ONETOUCH=y +CONFIG_USB_STORAGE_KARMA=y +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_AIRCABLE=m +# CONFIG_USB_SERIAL_AIRPRIME is not set +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP2101=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +CONFIG_USB_ADUTUX=m +# CONFIG_USB_AUERSWALD is not set +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +CONFIG_USB_BERRY_CHARGE=m +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +CONFIG_USB_PHIDGET=m +CONFIG_USB_PHIDGETKIT=m +CONFIG_USB_PHIDGETMOTORCONTROL=m +CONFIG_USB_PHIDGETSERVO=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_FTDI_ELAN=m +# CONFIG_USB_APPLEDISPLAY is not set +CONFIG_USB_SISUSBVGA=m +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=y +CONFIG_RTC_DRV_DS1672=y +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +CONFIG_RTC_DRV_ISL1208=y +CONFIG_RTC_DRV_X1205=y +CONFIG_RTC_DRV_PCF8563=y +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=m +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=m +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="utf8" +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_RW=y + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_BIND34=y +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +CONFIG_XOR_BLOCKS=m +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_XOR=m +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=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_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_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=y +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 new file mode 100644 index 0000000000..37d1054c2a --- /dev/null +++ b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 @@ -0,0 +1,1940 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23.8 +# Wed Nov 21 22:15:10 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=m +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +CONFIG_ARCH_IXP4XX=y +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y + +# +# Intel IXP4xx Implementation Options +# + +# +# IXP4xx Platforms +# +CONFIG_MACH_NSLU2=y +CONFIG_MACH_AVILA=y +CONFIG_MACH_LOFT=y +# CONFIG_ARCH_ADI_COYOTE is not set +# CONFIG_MACH_GATEWAY7001 is not set +# CONFIG_MACH_WG302V2 is not set +CONFIG_ARCH_IXDP425=y +CONFIG_MACH_IXDPG425=y +# CONFIG_MACH_IXDP465 is not set +# CONFIG_MACH_KIXRP435 is not set +CONFIG_ARCH_IXCDP1100=y +# CONFIG_ARCH_PRPMC1100 is not set +CONFIG_MACH_NAS100D=y +CONFIG_MACH_DSMG600=y +CONFIG_ARCH_IXDP4XX=y +CONFIG_MACH_FSG=y +# CONFIG_MACH_GTWX5715 is not set + +# +# IXP4xx Options +# +CONFIG_DMABOUNCE=y +# CONFIG_IXP4XX_INDIRECT_PCI is not set +CONFIG_IXP4XX_QMGR=y +CONFIG_IXP4XX_NPE=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +CONFIG_CPU_BIG_ENDIAN=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +# CONFIG_IWMMXT is not set +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +CONFIG_PCI=y +CONFIG_PCI_SYSCALL=y +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +# CONFIG_PM is not set +CONFIG_SUSPEND_UP_POSSIBLE=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +# CONFIG_NF_CT_PROTO_UDPLITE is not set +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +# CONFIG_IP6_NF_QUEUE is not set +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# Bridge: Netfilter Configuration +# +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_ULOG=m +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +CONFIG_TIPC=m +# CONFIG_TIPC_ADVANCED is not set +# CONFIG_TIPC_DEBUG is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_ATALK=m +CONFIG_DEV_APPLETALK=m +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set +CONFIG_NET_CLS_ROUTE=y + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_CMTP=m +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_RFKILL=m +# CONFIG_RFKILL_INPUT is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_CONCAT=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +CONFIG_NFTL=y +CONFIG_NFTL_RW=y +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +# CONFIG_MTD_CFI_NOSWAP is not set +CONFIG_MTD_CFI_BE_BYTE_SWAP=y +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_IXP4XX=y +# CONFIG_MTD_PCI is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=4 +CONFIG_BLK_DEV_RAM_SIZE=10240 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_ATA_OVER_ETH=m +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_ST=m +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +CONFIG_SCSI_ISCSI_ATTRS=m +# CONFIG_SCSI_SAS_LIBSAS is not set +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_SRP is not set +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_SVW is not set +# CONFIG_ATA_PIIX is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIL24 is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_ULI is not set +CONFIG_SATA_VIA=m +# CONFIG_SATA_VITESSE is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +CONFIG_PATA_ARTOP=m +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_PLATFORM is not set +CONFIG_PATA_IXP4XX_CF=m +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MD_RAID5_RESHAPE=y +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +# CONFIG_DM_SNAPSHOT is not set +# CONFIG_DM_MIRROR is not set +# CONFIG_DM_ZERO is not set +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_IEEE1394 is not set +# CONFIG_I2O is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_IXP4XX_ETH=y +# CONFIG_AX88796 is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_DGRS is not set +# CONFIG_EEPRO100 is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +CONFIG_NETDEV_1000=y +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_SK98LIN is not set +CONFIG_VIA_VELOCITY=m +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_DEBUG is not set +# CONFIG_HERMES is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +CONFIG_USB_ZD1201=m +# CONFIG_HOSTAP is not set +# CONFIG_BCM43XX is not set +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET_MII=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +CONFIG_USB_NET_ZAURUS=m +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +CONFIG_NETCONSOLE=m +CONFIG_NETPOLL=y +# CONFIG_NETPOLL_TRAP is not set +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_ISDN=m +# CONFIG_ISDN_I4L is not set +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_CAPI_TRACE=y +# CONFIG_ISDN_CAPI_MIDDLEWARE is not set +CONFIG_ISDN_CAPI_CAPI20=m + +# +# CAPI hardware drivers +# +# CONFIG_CAPI_AVM is not set +# CONFIG_CAPI_EICON is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +CONFIG_INPUT_IXP4XX_BEEPER=y +CONFIG_INPUT_ATI_REMOTE=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_KEYSPAN_REMOTE=m +# CONFIG_INPUT_POWERMATE is not set +CONFIG_INPUT_YEALINK=m +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_COMPUTONE is not set +# CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set +# CONFIG_DIGIEPCA is not set +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_MOXA_SMARTIO_NEW is not set +# CONFIG_ISI is not set +# CONFIG_SYNCLINKMP is not set +# CONFIG_SYNCLINK_GT is not set +CONFIG_N_HDLC=m +# CONFIG_RISCOM8 is not set +# CONFIG_SPECIALIX is not set +# CONFIG_SX is not set +# CONFIG_RIO is not set +# CONFIG_STALDRV is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=m +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_IXP4XX_WATCHDOG=m + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_IXP4XX=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +CONFIG_I2C_GPIO=y +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_IOP3XX is not set +# CONFIG_I2C_IXP4XX is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +CONFIG_I2C_TINY_USB=m +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +CONFIG_SENSORS_EEPROM=y +CONFIG_SENSORS_PCF8574=m +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +CONFIG_W1=m + +# +# 1-wire Bus Masters +# +# CONFIG_W1_MASTER_MATROX is not set +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m +# CONFIG_W1_MASTER_DS1WM is not set + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2433=m +CONFIG_W1_SLAVE_DS2433_CRC=y +# CONFIG_W1_SLAVE_DS2760 is not set +CONFIG_HWMON=m +CONFIG_HWMON_VID=m +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set +CONFIG_SENSORS_AD7418=m +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_FSCPOS is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +CONFIG_SENSORS_W83781D=m +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_MISC_DEVICES=y +# CONFIG_PHANTOM is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_IXP4XX is not set +CONFIG_LEDS_GPIO=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +# CONFIG_VIDEO_V4L1 is not set +# CONFIG_VIDEO_V4L1_COMPAT is not set +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +CONFIG_VIDEO_VIVI=m +CONFIG_VIDEO_SAA5246A=m +CONFIG_VIDEO_SAA5249=m +# CONFIG_TUNER_TEA5761 is not set +CONFIG_VIDEO_SAA7134=m +# CONFIG_VIDEO_SAA7134_ALSA is not set +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +# CONFIG_VIDEO_CX88_BLACKBIRD is not set +# CONFIG_VIDEO_CAFE_CCIC is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_USBVISION is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_USB_SN9C102 is not set +# CONFIG_USB_ZC0301 is not set +CONFIG_USB_ZR364XX=m +# CONFIG_RADIO_ADAPTERS is not set +# CONFIG_DVB_CORE is not set +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEO_BUF=m +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_IR_I2C=m +CONFIG_VIDEO_IR=m +CONFIG_VIDEO_TVEEPROM=m +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +# CONFIG_FB is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# ALSA ARM devices +# + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +CONFIG_USB_HIDDEV=y + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_SPLIT_ISO=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=m +# CONFIG_USB_U132_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +CONFIG_USB_STORAGE_FREECOM=y +# CONFIG_USB_STORAGE_DPCM is not set +CONFIG_USB_STORAGE_USBAT=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_STORAGE_ALAUDA=y +CONFIG_USB_STORAGE_ONETOUCH=y +CONFIG_USB_STORAGE_KARMA=y +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_AIRCABLE=m +# CONFIG_USB_SERIAL_AIRPRIME is not set +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP2101=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +CONFIG_USB_ADUTUX=m +# CONFIG_USB_AUERSWALD is not set +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +CONFIG_USB_BERRY_CHARGE=m +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +CONFIG_USB_PHIDGET=m +CONFIG_USB_PHIDGETKIT=m +CONFIG_USB_PHIDGETMOTORCONTROL=m +CONFIG_USB_PHIDGETSERVO=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_FTDI_ELAN=m +# CONFIG_USB_APPLEDISPLAY is not set +CONFIG_USB_SISUSBVGA=m +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=y +CONFIG_RTC_DRV_DS1672=y +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +CONFIG_RTC_DRV_ISL1208=y +CONFIG_RTC_DRV_X1205=y +CONFIG_RTC_DRV_PCF8563=y +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=m +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=m +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="utf8" +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_RW=y + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_BIND34=y +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +CONFIG_XOR_BLOCKS=m +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_XOR=m +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=y +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ixp4xx_2.6.24.bb b/packages/linux/linux-ixp4xx_2.6.24.bb new file mode 100644 index 0000000000..9942433b56 --- /dev/null +++ b/packages/linux/linux-ixp4xx_2.6.24.bb @@ -0,0 +1,45 @@ +# Keep this until the dsmg600 via-velocity BE patch is forward-ported +DEFAULT_PREFERENCE = "-1" + +require linux.inc +require linux-ixp4xx.inc + +VANILLA_VERSION = "2.6.24" +KERNEL_RELEASE = "2.6.24" + +# If you use a rc, you will need to use this: +#PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}+svnr${SRCREV}" + +PV = "${KERNEL_RELEASE}+svnr${SRCREV}" +PR = "r0" + +# ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${KERNEL_RELEASE}.bz2;patch=1 \ + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \ + svn://svn.nslu2-linux.org/svnroot/kernel/trunk/patches;module=${VANILLA_VERSION};proto=http \ + file://defconfig-${KERNEL_RELEASE}" + +S = "${WORKDIR}/linux-${VANILLA_VERSION}" + +# Apply the patches from the nslu2-linux project (after the patches in SRC_URI) +do_postpatch() { + # Move away OE patches which have been already applied. + [ -e patches ] && mv ${S}/patches ${S}/patches.oe + [ -e .pc ] && mv .pc .pc.oe + + # Move the NSLU2 patches in place for quilt and apply them. + mv ${WORKDIR}/${VANILLA_VERSION} ${S}/patches && cd ${S} && quilt push -av + + # Store the NSLU2 patches + mv ${S}/patches ${S}/patches.ixp4xx + mv .pc .pc.ixp4xx + + # And move back the OE patches + [ -e patches.oe ] && mv ${S}/patches.oe ${S}/patches + [ -e .pc.oe ] && mv .pc.oe .pc + + # Copy the defconfig into ${WORKDIR} + mv ${WORKDIR}/defconfig-${KERNEL_RELEASE} ${WORKDIR}/defconfig +} + +addtask postpatch after do_patch before do_configure -- cgit v1.2.3 From da46c139de71989d968aa7fd372f73506c07f525 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Wed, 30 Jan 2008 06:20:10 +0000 Subject: slugos.inc: Allow ixp4xx.conf to set the preferred kernel version --- conf/distro/include/slugos.inc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/conf/distro/include/slugos.inc b/conf/distro/include/slugos.inc index ea4980b55a..c13c9b6c75 100644 --- a/conf/distro/include/slugos.inc +++ b/conf/distro/include/slugos.inc @@ -119,11 +119,6 @@ PREFERRED_VERSION_glibc ?= "2.5" PREFERRED_VERSION_glibc-intermediate ?= "2.5" PREFERRED_VERSION_glibc-initial ?= "2.5" -# Select the correct versions of the kernel and modules (these are the -# defaults, override in the conf/distro top-level distro file). -PREFERRED_PROVIDER_virtual/kernel ?= "linux-ixp4xx" -PREFERRED_VERSION_ixp4xx-kernel ?= "2.6.21.6" - # Select the smallest provider of x11 libraries PREFERRED_PROVIDER_virtual/libx11 ?= "diet-x11" SRCDATE_diet-x11 ?= "20060106" -- cgit v1.2.3 From 7300b14cab3b462b9f41751f1b9fba4e13d4f2c5 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Wed, 30 Jan 2008 06:20:38 +0000 Subject: slugos.conf: Back to alpha quality due to new kernel --- conf/distro/slugos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/slugos.conf b/conf/distro/slugos.conf index 29c96ce384..012081f143 100644 --- a/conf/distro/slugos.conf +++ b/conf/distro/slugos.conf @@ -8,7 +8,7 @@ DISTRO_NAME = "SlugOS" # DISTRO_VERSION = "${SLUGOS_VERSION}${DISTRO_REVISION}-${DISTRO_TYPE}" # DISTRO_FEED = "unstable" -DISTRO_TYPE = "beta" +DISTRO_TYPE = "alpha" TARGET_ARCH ?= "armeb" ARM_INSTRUCTION_SET = "arm" TARGET_OS = "linux" -- cgit v1.2.3 From 489bdfa4573e3d1a4c3b16fd704b83170158e29f Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Wed, 30 Jan 2008 06:22:08 +0000 Subject: sane-srcrevs.inc: Update linux-ixp4xx kernel to latest patchset. --- 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 dd2033df19..50ba415363 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -44,7 +44,7 @@ SRCREV_pn-libowl ?= "277" SRCREV_pn-libxosd ?= "627" SRCREV_pn-linux-bfin ?= "3758" SRCREV_pn-linux-hackndev-2.6 ?= "1308" -SRCREV_pn-linux-ixp4xx ?= "990" +SRCREV_pn-linux-ixp4xx ?= "1021" SRCREV_pn-linux-openmoko ?= "3801" SRCREV_pn-llvm-gcc4 ?= "374" SRCREV_pn-llvm-gcc4-cross ?= "374" -- cgit v1.2.3 From 5e8b5638942148711880a4f51bfc632440680253 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 30 Jan 2008 09:16:16 +0000 Subject: generic.conf: start to make the generic DISTRO work again --- conf/distro/generic.conf | 44 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/conf/distro/generic.conf b/conf/distro/generic.conf index 0286666495..d67be1d738 100644 --- a/conf/distro/generic.conf +++ b/conf/distro/generic.conf @@ -36,28 +36,34 @@ MACHINE_KERNEL_VERSION = "2.6" # # Binutils & Compiler # -PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial" -PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross" -PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross" +PREFERRED_PROVIDER_virtual/arm-linux-binutils = "binutils-cross" +PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers" PREFERRED_VERSION_gcc ?= "4.1.1" PREFERRED_VERSION_gcc-cross ?= "4.1.1" PREFERRED_VERSION_gcc-cross-initial ?= "4.1.1" -PREFERRED_VERSION_binutils ?= "2.17.50.0.5" -PREFERRED_VERSION_binutils-cross ?= "2.17.50.0.5" +PREFERRED_VERSION_binutils ?= "2.18" +PREFERRED_VERSION_binutils-cross ?= "2.18" # # Target OS & FPU system -# +# TARGET_OS = "linux" TARGET_FPU_arm = "soft" TARGET_FPU_armeb = "soft" +# +# C library +# PREFERRED_PROVIDER_virtual/libiconv = "glibc" PREFERRED_PROVIDER_virtual/libintl = "glibc" PREFERRED_PROVIDER_virtual/libc = "glibc" PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc-intermediate" -PREFERRED_VERSION_linux-libc-headers ?= "2.6.18" +PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers" +PREFERRED_VERSION_linux-libc-headers ?= "2.6.23" PREFERRED_VERSION_glibc ?= "2.5" PREFERRED_VERSION_glibc-intermediate ?= "2.5" @@ -65,28 +71,12 @@ PREFERRED_VERSION_glibc-intermediate ?= "2.5" # Bootstrap & Init # PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap" -require conf/distro/include/sane-srcdates.inc - -# -# Framebuffer & X -# -PREFERRED_PROVIDER_virtual/libx11 ?= "diet-x11" -PREFERRED_PROVIDER_tslib ?= "tslib" -require conf/distro/include/preferred-xorg-versions-X11R7.2.inc # -# GPE +# Preferred versions # -require conf/distro/include/preferred-gpe-versions-2.8.inc -# -# Opie -# -QTE_VERSION = "2.3.10" -PALMTOP_USE_MULTITHREADED_QTE = "yes" -require conf/distro/include/preferred-opie-versions.inc +require conf/distro/include/sane-srcdates.inc +require conf/distro/include/sane-srcrevs.inc -# -# Enlightenment -# -require conf/distro/include/preferred-e-versions.inc +PREFERRED_PROVIDER_virtual/libx11 ?= "libx11" -- cgit v1.2.3 From c5dd5bfdffff19a8bbef1248789f102c7cab0493 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 30 Jan 2008 10:45:28 +0000 Subject: qemu_0.9.1.bb : add the no-strip patch from #3721 --- packages/qemu/qemu-0.9.1/no-strip.patch | 22 ++++++++++++++++++++++ packages/qemu/qemu_0.9.1.bb | 5 +++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 packages/qemu/qemu-0.9.1/no-strip.patch diff --git a/packages/qemu/qemu-0.9.1/no-strip.patch b/packages/qemu/qemu-0.9.1/no-strip.patch new file mode 100644 index 0000000000..fc69b37e16 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/no-strip.patch @@ -0,0 +1,22 @@ +--- qemu.orig/Makefile 2008-01-29 23:16:27.000000000 -0800 ++++ qemu-0.9.1/Makefile 2008-01-29 23:16:38.000000000 -0800 +@@ -174,7 +174,7 @@ + install: all $(if $(BUILD_DOCS),install-doc) + mkdir -p "$(DESTDIR)$(bindir)" + ifneq ($(TOOLS),) +- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)" ++ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)" + endif + mkdir -p "$(DESTDIR)$(datadir)" + for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \ +--- qemu.orig/Makefile.target 2008-01-29 23:16:27.000000000 -0800 ++++ qemu-0.9.1/Makefile.target 2008-01-29 23:17:33.000000000 -0800 +@@ -632,7 +632,7 @@ + + install: all + ifneq ($(PROGS),) +- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)" ++ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)" + endif + + ifneq ($(wildcard .depend),) diff --git a/packages/qemu/qemu_0.9.1.bb b/packages/qemu/qemu_0.9.1.bb index 9f07f45f05..2f0aba7e64 100644 --- a/packages/qemu/qemu_0.9.1.bb +++ b/packages/qemu/qemu_0.9.1.bb @@ -1,6 +1,6 @@ LICENSE = "GPL" DEPENDS = "zlib" -PR = "r5" +PR = "r6" FILESPATH = "${FILE_DIRNAME}/qemu-${PV}" FILESDIR = "${WORKDIR}" @@ -32,7 +32,8 @@ SRC_URI = "\ file://workaround_bad_futex_headers.patch;patch=1 \ file://fix_segfault.patch;patch=1 \ file://configure_symlinkpath_fix.patch;patch=1 \ - file://disable-error-in-configure.patch;patch=1" + file://disable-error-in-configure.patch;patch=1 \ + file://no-strip.patch;patch=1" S = "${WORKDIR}/qemu-${PV}" -- cgit v1.2.3 From 6014e161475141f4197807a0c43b409d9694db37 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Wed, 30 Jan 2008 11:50:03 +0000 Subject: speex: fix packaging *.h headers * remove hardcoded -I/usr/indlude is fine but remove all of the "includedir" strings in the Makefiles is an overreaction and causes problem during installation --- packages/speex/speex_1.1.12+1.2beta1.bb | 4 +--- packages/speex/speex_1.1.12.bb | 4 +--- packages/speex/speex_1.1.7.bb | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/speex/speex_1.1.12+1.2beta1.bb b/packages/speex/speex_1.1.12+1.2beta1.bb index 5430983e36..51ad2f506e 100644 --- a/packages/speex/speex_1.1.12+1.2beta1.bb +++ b/packages/speex/speex_1.1.12+1.2beta1.bb @@ -3,7 +3,7 @@ SECTION = "libs" LICENSE = "BSD" HOMEPAGE = "http://www.speex.org" DEPENDS = "libogg" -PR = "r1" +PR = "r2" SRC_URI = "http://downloads.us.xiph.org/releases/speex/speex-1.2beta1.tar.gz" S = "${WORKDIR}/${PN}-1.2beta1" @@ -27,8 +27,6 @@ EXTRA_OECONF_append_dht-walnut = " --enable-fixed-point " do_configure_append() { sed -i s/"^OGG_CFLAGS.*$"/"OGG_CFLAGS = "/g Makefile */Makefile */*/Makefile sed -i s/"^OGG_LIBS.*$"/"OGG_LIBS = -logg"/g Makefile */Makefile */*/Makefile - perl -pi -e 's:^includedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile - perl -pi -e 's:^oldincludedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile perl -pi -e 's:\s*-I/usr/include$::g' Makefile */Makefile */*/Makefile } diff --git a/packages/speex/speex_1.1.12.bb b/packages/speex/speex_1.1.12.bb index b18151e48d..7417ce4504 100644 --- a/packages/speex/speex_1.1.12.bb +++ b/packages/speex/speex_1.1.12.bb @@ -3,7 +3,7 @@ SECTION = "libs" LICENSE = "BSD" HOMEPAGE = "http://www.speex.org" DEPENDS = "libogg" -PR = "r1" +PR = "r2" SRC_URI = "http://downloads.us.xiph.org/releases/speex/speex-${PV}.tar.gz" @@ -25,8 +25,6 @@ EXTRA_OECONF_append_arm = " --enable-fixed-point " do_configure_append() { sed -i s/"^OGG_CFLAGS.*$"/"OGG_CFLAGS = "/g Makefile */Makefile */*/Makefile sed -i s/"^OGG_LIBS.*$"/"OGG_LIBS = -logg"/g Makefile */Makefile */*/Makefile - perl -pi -e 's:^includedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile - perl -pi -e 's:^oldincludedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile perl -pi -e 's:\s*-I/usr/include$::g' Makefile */Makefile */*/Makefile } diff --git a/packages/speex/speex_1.1.7.bb b/packages/speex/speex_1.1.7.bb index 00b51b1c2e..ef818794de 100644 --- a/packages/speex/speex_1.1.7.bb +++ b/packages/speex/speex_1.1.7.bb @@ -3,7 +3,7 @@ SECTION = "libs" LICENSE = "BSD" HOMEPAGE = "http://www.speex.org" DEPENDS = "libogg" -PR = "r0" +PR = "r1" SRC_URI = "http://www.speex.org/download/speex-${PV}.tar.gz" @@ -21,8 +21,6 @@ EXTRA_OECONF_append_openmn = " --enable-arm5e-asm --enable-fixed-point" do_configure_append() { sed -i s/"^OGG_CFLAGS.*$"/"OGG_CFLAGS = "/g Makefile */Makefile */*/Makefile sed -i s/"^OGG_LIBS.*$"/"OGG_LIBS = -logg"/g Makefile */Makefile */*/Makefile - perl -pi -e 's:^includedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile - perl -pi -e 's:^oldincludedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile perl -pi -e 's:\s*-I/usr/include$::g' Makefile */Makefile */*/Makefile } -- cgit v1.2.3 From 0b6c328bace288bbf872c0507330f79a866d4a29 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Wed, 30 Jan 2008 11:53:58 +0000 Subject: preferred-opie-versions-1.2.4-pre.inc: bump to a sane SRCDATE --- conf/distro/include/preferred-opie-versions-1.2.4-pre.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/include/preferred-opie-versions-1.2.4-pre.inc b/conf/distro/include/preferred-opie-versions-1.2.4-pre.inc index 324f4dd80c..0a95b1ff67 100644 --- a/conf/distro/include/preferred-opie-versions-1.2.4-pre.inc +++ b/conf/distro/include/preferred-opie-versions-1.2.4-pre.inc @@ -3,7 +3,7 @@ QTE_VERSION ?= "2.3.10" PALMTOP_USE_MULTITHREADED_QT ?= "yes" -OPIE_SRCDATE ?= "20070727" +OPIE_SRCDATE ?= "20080127" OPIE_VERSION ?= "1.2.3+cvs${OPIE_SRCDATE}" OPIE_CVS_PV ?= "1.2.3+cvs${OPIE_SRCDATE}" -- cgit v1.2.3 From f59d85a1212dd77dbac08e55a50f40b19b0a80ca Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 30 Jan 2008 13:01:55 +0000 Subject: gtkmm: update to 2.10.11 and make packaging a bit more robust. Closes 2804. --- packages/gtkmm/gtkmm.inc | 6 +++--- packages/gtkmm/gtkmm_2.10.10.bb | 4 ---- packages/gtkmm/gtkmm_2.10.11.bb | 4 ++++ 3 files changed, 7 insertions(+), 7 deletions(-) delete mode 100644 packages/gtkmm/gtkmm_2.10.10.bb create mode 100644 packages/gtkmm/gtkmm_2.10.11.bb diff --git a/packages/gtkmm/gtkmm.inc b/packages/gtkmm/gtkmm.inc index 9dd1e43d54..139d95239d 100644 --- a/packages/gtkmm/gtkmm.inc +++ b/packages/gtkmm/gtkmm.inc @@ -7,9 +7,6 @@ DEPENDS = "atk glibmm gtk+ cairomm" inherit gnome autotools pkgconfig flow-lossage -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-dev += "${libdir}/glibmm-2.4/include/" - LIBV = "2.4.0" do_stage () { @@ -19,3 +16,6 @@ do_stage () { install -m 0644 gdk/gdkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4 install -m 0644 gtk/gtkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4 } + +FILES_${PN} = "${libdir}/lib*.so.*" +FILES_${PN}-dev += "${libdir}/*/include ${libdir}/*/proc/m4" diff --git a/packages/gtkmm/gtkmm_2.10.10.bb b/packages/gtkmm/gtkmm_2.10.10.bb deleted file mode 100644 index b8ba69f50e..0000000000 --- a/packages/gtkmm/gtkmm_2.10.10.bb +++ /dev/null @@ -1,4 +0,0 @@ -require gtkmm.inc - -PR = "r0" - diff --git a/packages/gtkmm/gtkmm_2.10.11.bb b/packages/gtkmm/gtkmm_2.10.11.bb new file mode 100644 index 0000000000..b8ba69f50e --- /dev/null +++ b/packages/gtkmm/gtkmm_2.10.11.bb @@ -0,0 +1,4 @@ +require gtkmm.inc + +PR = "r0" + -- cgit v1.2.3 From be05e7eeeffa188d72642e6ae6d4091d6f118e86 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 30 Jan 2008 14:06:48 +0000 Subject: kanjipad: consolidate in kanjipad directory and unify --- packages/gnome/kanjipad_svn.bb | 19 ------------------- packages/kanjipad/kanjipad_svn.bb | 12 ++++++++++++ 2 files changed, 12 insertions(+), 19 deletions(-) delete mode 100644 packages/gnome/kanjipad_svn.bb create mode 100644 packages/kanjipad/kanjipad_svn.bb diff --git a/packages/gnome/kanjipad_svn.bb b/packages/gnome/kanjipad_svn.bb deleted file mode 100644 index 1e0d943da7..0000000000 --- a/packages/gnome/kanjipad_svn.bb +++ /dev/null @@ -1,19 +0,0 @@ -DESCRIPTION = "KanjiPad is a very simple program for handwriting recognition" -LICENSE = "GPLv2" - -DEPENDS = "gtk+ perl-native" - -PV = "2.0.0+svn${SRCDATE}" - -inherit pkgconfig - -SRC_URI = "svn://svn.gnome.org/svn/${PN}/;module=trunk" - -S = "${WORKDIR}/trunk" - -do_compile_prepend() { - export CFLAGS='${TARGET_CFLAGS} -DFOR_PILOT_COMPAT -DKP_LIBDIR="${libdir}/kanjipad" -DBINDIR="${bindir}" `pkg-config --cflags gtk+-2.0` `pkg-config --cflags glib-2.0`' -} - - - diff --git a/packages/kanjipad/kanjipad_svn.bb b/packages/kanjipad/kanjipad_svn.bb new file mode 100644 index 0000000000..73c6ddba0f --- /dev/null +++ b/packages/kanjipad/kanjipad_svn.bb @@ -0,0 +1,12 @@ +require kanjipad.inc + +DEPENDS += "perl-native" +PV = "2.0.0+svn${SRCDATE}" +PR = "r1" + +SRC_URI = "svn://svn.gnome.org/svn/${PN}/;module=trunk" +S = "${WORKDIR}/trunk" + +do_compile_prepend() { + export CFLAGS='${TARGET_CFLAGS} -DFOR_PILOT_COMPAT -DKP_LIBDIR="${libdir}/kanjipad" -DBINDIR="${bindir}" `pkg-config --cflags gtk+-2.0` `pkg-config --cflags glib-2.0`' +} -- cgit v1.2.3 From e3f096327dd31a78222158c277e30473759de035 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Wed, 30 Jan 2008 14:25:16 +0000 Subject: conf/machine/qemux86.conf: define TARGET_CC_ARCH, fixes build failure for glibc >= 2.6 --- conf/machine/qemux86.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/machine/qemux86.conf b/conf/machine/qemux86.conf index fe811ba54e..7fbdbfb1a7 100644 --- a/conf/machine/qemux86.conf +++ b/conf/machine/qemux86.conf @@ -3,6 +3,7 @@ #@DESCRIPTION: Machine configuration for running an x86 system under qemu emulation TARGET_ARCH = "i586" +TARGET_CC_ARCH = "-march=i586" PACKAGE_EXTRA_ARCHS = "x86" require conf/machine/include/qemu.inc -- cgit v1.2.3 From 365e2cefe6aa07e9fe726c7dddc5151a75724180 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Wed, 30 Jan 2008 15:19:54 +0000 Subject: linux-rp-2.6.23: build netfilter modules for qemux86 --- packages/linux/linux-rp-2.6.23/defconfig-qemux86 | 107 +++++++++++++++++------ packages/linux/linux-rp_2.6.23.bb | 2 +- 2 files changed, 79 insertions(+), 30 deletions(-) diff --git a/packages/linux/linux-rp-2.6.23/defconfig-qemux86 b/packages/linux/linux-rp-2.6.23/defconfig-qemux86 index 5bc9a9ec26..2d2762f7a0 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-qemux86 +++ b/packages/linux/linux-rp-2.6.23/defconfig-qemux86 @@ -350,40 +350,68 @@ CONFIG_NETFILTER=y # # Core Netfilter Configuration # -# CONFIG_NETFILTER_NETLINK is not set -# CONFIG_NF_CONNTRACK_ENABLED is not set -# CONFIG_NF_CONNTRACK is not set +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 is not set +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m CONFIG_NETFILTER_XTABLES=m -# CONFIG_NETFILTER_XT_TARGET_CLASSIFY 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_U32 is not set -# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m # # IP: Netfilter Configuration # +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y CONFIG_IP_NF_QUEUE=m CONFIG_IP_NF_IPTABLES=m CONFIG_IP_NF_MATCH_IPRANGE=m @@ -398,10 +426,26 @@ CONFIG_IP_NF_FILTER=m CONFIG_IP_NF_TARGET_REJECT=m CONFIG_IP_NF_TARGET_LOG=m CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m CONFIG_IP_NF_MANGLE=m CONFIG_IP_NF_TARGET_TOS=m CONFIG_IP_NF_TARGET_ECN=m CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m CONFIG_IP_NF_RAW=m CONFIG_IP_NF_ARPTABLES=m CONFIG_IP_NF_ARPFILTER=m @@ -425,6 +469,7 @@ CONFIG_IP_NF_ARP_MANGLE=m # QoS and/or fair queueing # # CONFIG_NET_SCHED is not set +CONFIG_NET_CLS_ROUTE=y # # Network testing @@ -1693,6 +1738,10 @@ CONFIG_CRC32=y # CONFIG_CRC7 is not set CONFIG_LIBCRC32C=m CONFIG_AUDIT_GENERIC=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m CONFIG_PLIST=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y diff --git a/packages/linux/linux-rp_2.6.23.bb b/packages/linux/linux-rp_2.6.23.bb index f0501f87f4..e8b8274d97 100644 --- a/packages/linux/linux-rp_2.6.23.bb +++ b/packages/linux/linux-rp_2.6.23.bb @@ -1,6 +1,6 @@ require linux-rp.inc -PR = "r24" +PR = "r25" # Handy URLs # git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 -- cgit v1.2.3 From 4ec55633a1302da27beb7885800a3141f908f317 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 30 Jan 2008 15:53:25 +0000 Subject: angstrom-2007.1-legacy.conf: Rename to angstrom-2008.1-legacy.conf * To correspond with content * Angstrom 2007 not supported in .dev. --- conf/distro/angstrom-2007.1-legacy.conf | 9 --------- conf/distro/angstrom-2008.1-legacy.conf | 9 +++++++++ 2 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 conf/distro/angstrom-2007.1-legacy.conf create mode 100644 conf/distro/angstrom-2008.1-legacy.conf diff --git a/conf/distro/angstrom-2007.1-legacy.conf b/conf/distro/angstrom-2007.1-legacy.conf deleted file mode 100644 index 358ed06cf2..0000000000 --- a/conf/distro/angstrom-2007.1-legacy.conf +++ /dev/null @@ -1,9 +0,0 @@ -#this is a special version of angstrom for legacy (e.g. kernel 2.4) software -# that means: -# * no udev -# * no sysfs -# * no EABI for ARM - -require conf/distro/angstrom-2008.1.conf - -# We'll have to fill this in as we go. diff --git a/conf/distro/angstrom-2008.1-legacy.conf b/conf/distro/angstrom-2008.1-legacy.conf new file mode 100644 index 0000000000..358ed06cf2 --- /dev/null +++ b/conf/distro/angstrom-2008.1-legacy.conf @@ -0,0 +1,9 @@ +#this is a special version of angstrom for legacy (e.g. kernel 2.4) software +# that means: +# * no udev +# * no sysfs +# * no EABI for ARM + +require conf/distro/angstrom-2008.1.conf + +# We'll have to fill this in as we go. -- cgit v1.2.3 From 6da2c98d37f6ca3c5d7699c146eb93bf19b110c8 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Wed, 30 Jan 2008 19:27:51 +0000 Subject: linux-rp-2.6.23: enable wireless extensions for qemux86 --- packages/linux/linux-rp-2.6.23/defconfig-qemux86 | 2 +- packages/linux/linux-rp_2.6.23.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-rp-2.6.23/defconfig-qemux86 b/packages/linux/linux-rp-2.6.23/defconfig-qemux86 index 2d2762f7a0..c5e91d989f 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-qemux86 +++ b/packages/linux/linux-rp-2.6.23/defconfig-qemux86 @@ -484,7 +484,7 @@ CONFIG_NET_CLS_ROUTE=y # Wireless # # CONFIG_CFG80211 is not set -# CONFIG_WIRELESS_EXT is not set +CONFIG_WIRELESS_EXT=y # CONFIG_MAC80211 is not set # CONFIG_IEEE80211 is not set # CONFIG_RFKILL is not set diff --git a/packages/linux/linux-rp_2.6.23.bb b/packages/linux/linux-rp_2.6.23.bb index e8b8274d97..a8c5f79f67 100644 --- a/packages/linux/linux-rp_2.6.23.bb +++ b/packages/linux/linux-rp_2.6.23.bb @@ -1,6 +1,6 @@ require linux-rp.inc -PR = "r25" +PR = "r26" # Handy URLs # git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 -- cgit v1.2.3 From d548412ae5175c709cd8cf72c756e0aab998df44 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 31 Jan 2008 07:52:22 +0000 Subject: xapian: initial commit for xapian-core. partly fixes 3712 on our way to an offline wikipedia. --- packages/xapian/.mtn2git_empty | 0 packages/xapian/xapian-core_1.0.5.bb | 16 ++++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 packages/xapian/.mtn2git_empty create mode 100644 packages/xapian/xapian-core_1.0.5.bb diff --git a/packages/xapian/.mtn2git_empty b/packages/xapian/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/xapian/xapian-core_1.0.5.bb b/packages/xapian/xapian-core_1.0.5.bb new file mode 100644 index 0000000000..2af709324f --- /dev/null +++ b/packages/xapian/xapian-core_1.0.5.bb @@ -0,0 +1,16 @@ +DESCRPITION = "Open Source Search Engine Library" +HOMEPAGE = "http://xapian.org" +SECTION = "devel/libs" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "zlib" +PR = "r0" + +SRC_URI = "http://www.oligarchy.co.uk/xapian/1.0.5/xapian-core-${PV}.tar.gz" + +inherit autotools + +do_stage () { + autotools_stage_all +} + -- cgit v1.2.3 From fc3a9d51f1e3a9eb5d4467a4ecf1551738c55af4 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 31 Jan 2008 10:16:23 +0000 Subject: xapian: initial commit of xapian-quickstartindex. Fixes 3712. --- packages/xapian/xapian-quickstartindex_1.0.bb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 packages/xapian/xapian-quickstartindex_1.0.bb diff --git a/packages/xapian/xapian-quickstartindex_1.0.bb b/packages/xapian/xapian-quickstartindex_1.0.bb new file mode 100644 index 0000000000..6deff9191e --- /dev/null +++ b/packages/xapian/xapian-quickstartindex_1.0.bb @@ -0,0 +1,18 @@ +DESCRIPTION = "Simplest possible indexer (from older release of xapian)" +HOMEPAGE = "http://users.softlab.ece.ntua.gr/~ttsiod/buildWikipediaOffline.html" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "xapian-core" +PR = "r0" + +SRC_URI = "http://users.softlab.ece.ntua.gr/~ttsiod/quickstartindex.cc" +S = "${WORKDIR}" + +do_compile() { + ${CXX} ${CXXLAGS} ${LDFLAGS} -lxapian -o quickstartindex quickstartindex.cc +} + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${WORKDIR}/quickstartindex ${D}${bindir}/ +} -- cgit v1.2.3 From e5228389378de2f9973d14c2f1ed230a62bcc9d5 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 31 Jan 2008 12:14:01 +0000 Subject: gcc-native 3.4.4: Rename PROVIDES gcc-native3 to gcc3-native. * Consistent with how other versioned native packages called. As discussed on ML. --- packages/gcc/gcc-native_3.4.4.bb | 2 +- packages/qemu/qemu-native.inc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gcc/gcc-native_3.4.4.bb b/packages/gcc/gcc-native_3.4.4.bb index eb1fb5716e..d70a4f5464 100644 --- a/packages/gcc/gcc-native_3.4.4.bb +++ b/packages/gcc/gcc-native_3.4.4.bb @@ -1,3 +1,3 @@ require gcc_${PV}.bb require gcc-native.inc -PROVIDES += "gcc-native3" \ No newline at end of file +PROVIDES += "gcc3-native" diff --git a/packages/qemu/qemu-native.inc b/packages/qemu/qemu-native.inc index c05dc41d46..3e6433cc5e 100644 --- a/packages/qemu/qemu-native.inc +++ b/packages/qemu/qemu-native.inc @@ -1,6 +1,6 @@ inherit native -DEPENDS = "libsdl-native zlib-native gcc-native3" +DEPENDS = "libsdl-native zlib-native gcc3-native" require qemu-gcc3-check.inc -- cgit v1.2.3 From d567423ad0029843daa5004cdd91304cacdb4491 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 31 Jan 2008 12:34:25 +0000 Subject: php4: fix unfetchable SRC_URI and update checksums.ini accordingly. * Some clean-up. * do_patch still fails. needs more work (or dropping). --- conf/checksums.ini | 2 +- packages/php/php.inc | 4 ++-- packages/php/php_4.4.4.bb | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/conf/checksums.ini b/conf/checksums.ini index 821a3a1ce5..36b7a8f4bf 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -8890,7 +8890,7 @@ sha256=6eb45f17b50d864157dac2028ee5d45f4f54548825f5a732e1a430d5aa2dd889 md5=195b684e025ff5c15617d6f757cf631f sha256=e14546d11e899e7e9f06ca58979fee14b273d53c637eb268d7c6fe3bf78d564d -[http://de3.php.net/distributions/php-4.4.4.tar.bz2] +[http://museum.php.net/php4/php-4.4.4.tar.bz2] md5=bc6fa8908e2ac36e93bab9f7d42cda3a sha256=9f0742fce014a255f8453c1264afee5de289a9e9dcd57c448c77b46978f6a76b diff --git a/packages/php/php.inc b/packages/php/php.inc index 6e2c26585a..33219d86c9 100644 --- a/packages/php/php.inc +++ b/packages/php/php.inc @@ -1,10 +1,10 @@ -SECTION = "console/network" DESCRIPTION = "A server-side, HTML-embedded scripting language. This package provides the CGI." +HOMEPAGE = "http://www.php.net" +SECTION = "console/network" LICENSE = "PHP" SRC_URI = "http://de3.php.net/distributions/php-${PV}.tar.bz2 \ file://${FILESDIR}/autotools.patch;patch=1 \ file://${FILESDIR}/pear.patch;patch=1" -S = "${WORKDIR}/php-${PV}" inherit autotools diff --git a/packages/php/php_4.4.4.bb b/packages/php/php_4.4.4.bb index c15a9ee486..356b45d4cd 100644 --- a/packages/php/php_4.4.4.bb +++ b/packages/php/php_4.4.4.bb @@ -1 +1,6 @@ require php.inc + +SRC_URI = "http://museum.php.net/php4/php-${PV}.tar.bz2 \ + file://${FILESDIR}/autotools.patch;patch=1 \ + file://${FILESDIR}/pear.patch;patch=1" + -- cgit v1.2.3 From 7ac5c78cc557fb33f6fb5626a756b3f4f4b57ece Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 31 Jan 2008 12:54:41 +0000 Subject: linux_2.6.23.bb: only include the CFS patch once! --- packages/linux/linux_2.6.23.bb | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb index 77137b0d9a..5322c51211 100644 --- a/packages/linux/linux_2.6.23.bb +++ b/packages/linux/linux_2.6.23.bb @@ -26,8 +26,6 @@ SRC_URI += "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-2.6.23.12.bz2;patch= SRC_URI += "http://people.redhat.com/mingo/cfs-scheduler/sched-cfs-v2.6.23.12-v24.1.patch;patch=1" # Add support for squashfs-lzma (a highly compressed read-only filesystem) SRC_URI += "http://kamikaze.waninkoko.info/patches/2.6.23/klight1/broken-out/squashfs-lzma-2.6.23.patch;patch=1" -# Completely fair scheduler -SRC_URI += "http://people.redhat.com/mingo/cfs-scheduler/sched-cfs-v2.6.23.12-v24.1.patch;patch=1" # The Atmel patch doesn't apply against 2.6.23.12 :( SRC_URI_avr32 = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ -- cgit v1.2.3 From 3a2ff6c671cec5287418f20398f111097f95dd9b Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 31 Jan 2008 13:18:33 +0000 Subject: php: unify --- packages/php/php-native_4.4.4.bb | 1 + packages/php/php-native_5.2.0.bb | 2 +- packages/php/php.inc | 8 +++++--- packages/php/php_4.4.4.bb | 2 ++ packages/php/php_5.1.4.bb | 19 ++----------------- packages/php/php_5.2.0.bb | 33 +++------------------------------ 6 files changed, 14 insertions(+), 51 deletions(-) diff --git a/packages/php/php-native_4.4.4.bb b/packages/php/php-native_4.4.4.bb index c90aa83c01..07b13be93a 100644 --- a/packages/php/php-native_4.4.4.bb +++ b/packages/php/php-native_4.4.4.bb @@ -3,3 +3,4 @@ require php_${PV}.bb inherit native FILESPATH = "${FILE_DIRNAME}/php-${PV}:${FILE_DIRNAME}/php:${FILE_DIRNAME}/files" DEPENDS = "zlib-native" +PR = "r1" diff --git a/packages/php/php-native_5.2.0.bb b/packages/php/php-native_5.2.0.bb index 7f5bc9fd94..b3bf7b56b4 100644 --- a/packages/php/php-native_5.2.0.bb +++ b/packages/php/php-native_5.2.0.bb @@ -6,4 +6,4 @@ export LD_LIBRARY_PATH = "${STAGING_LIBDIR}" FILESPATH = "${FILE_DIRNAME}/php-${PV}:${FILE_DIRNAME}/php:${FILE_DIRNAME}/files" DEPENDS = "zlib-native libxml2-native" - +PR = "r1" diff --git a/packages/php/php.inc b/packages/php/php.inc index 33219d86c9..321034bee7 100644 --- a/packages/php/php.inc +++ b/packages/php/php.inc @@ -2,9 +2,11 @@ DESCRIPTION = "A server-side, HTML-embedded scripting language. This package pro HOMEPAGE = "http://www.php.net" SECTION = "console/network" LICENSE = "PHP" -SRC_URI = "http://de3.php.net/distributions/php-${PV}.tar.bz2 \ - file://${FILESDIR}/autotools.patch;patch=1 \ - file://${FILESDIR}/pear.patch;patch=1" +DEPENDS = "zlib libxml2 mysql virtual/libiconv php-native" + +SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2\ + file://autotools.patch;patch=1 \ + file://acinclude-xml2-config.patch;patch=1" inherit autotools diff --git a/packages/php/php_4.4.4.bb b/packages/php/php_4.4.4.bb index 356b45d4cd..3000ad1fb6 100644 --- a/packages/php/php_4.4.4.bb +++ b/packages/php/php_4.4.4.bb @@ -1,5 +1,7 @@ require php.inc +PR = "r1" + SRC_URI = "http://museum.php.net/php4/php-${PV}.tar.bz2 \ file://${FILESDIR}/autotools.patch;patch=1 \ file://${FILESDIR}/pear.patch;patch=1" diff --git a/packages/php/php_5.1.4.bb b/packages/php/php_5.1.4.bb index a9ea9d2ed6..47475daca9 100644 --- a/packages/php/php_5.1.4.bb +++ b/packages/php/php_5.1.4.bb @@ -1,21 +1,12 @@ -SECTION = "console/network" -DESCRIPTION = "A server-side, HTML-embedded scripting language. This package provides the CGI." -LICENSE = "PHP" -DEPENDS = "zlib libxml2 mysql virtual/libiconv" +require php.inc -SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2\ - file://autotools.patch;patch=1 \ - file://acinclude-xml2-config.patch;patch=1" - -S = "${WORKDIR}/php-${PV}" -PR = "r2" +PR = "r3" inherit autotools export THREADS="pthread" export LIBS=" -lpthread " -CFLAGS += " -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED" EXTRA_OECONF = "--without-iconv \ --enable-discard-path \ --enable-sockets \ @@ -28,13 +19,7 @@ EXTRA_OECONF += " --without-pear --with-libxml-dir=${STAGING_BINDIR} " #EXTRA_OECONF += " --with-pear-php-cli=${STAGING_BINDIR_NATIVE}/php" #DEPENDS += " php-native" -acpaths = "" - do_configure_append() { find ${S} -type f | xargs sed -i 's:/usr/lib:${STAGING_LIBDIR}:' find ${S} -type f | xargs sed -i 's:/usr/include:${STAGING_INCDIR}:' } - -do_install () { - oe_runmake 'INSTALL_ROOT=${D}' install -} diff --git a/packages/php/php_5.2.0.bb b/packages/php/php_5.2.0.bb index ea4b0eaf7c..4ed88cf411 100644 --- a/packages/php/php_5.2.0.bb +++ b/packages/php/php_5.2.0.bb @@ -1,22 +1,12 @@ -SECTION = "console/network" -DESCRIPTION = "A server-side, HTML-embedded scripting language. This package provides the CGI." -LICENSE = "PHP" -DEPENDS = "zlib libxml2 mysql virtual/libiconv php-native" +require php.inc -SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2\ - file://autotools.patch;patch=1 \ - file://acinclude-xml2-config.patch;patch=1 \ - file://pear-makefile.patch;patch=1 \ - " -S = "${WORKDIR}/php-${PV}" -PR = "r1" +PR = "r2" -inherit autotools +SRC_URI += "file://pear-makefile.patch;patch=1 " export THREADS="pthread" export LIBS=" -lpthread " -CFLAGS += " -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED" EXTRA_OECONF = " --without-iconv \ --enable-discard-path \ --enable-sockets \ @@ -29,28 +19,16 @@ EXTRA_OECONF = " --without-iconv \ --with-mysqli="${STAGING_BINDIR_NATIVE}/mysql_config" \ " - - - -# Uncomment the following two lines, and comment the above to enable PEAR EXTRA_OECONF += " --with-pear-php-cli=${STAGING_BINDIR} --with-libxml-dir=${STAGING_BINDIR}" export LD_LIBRARY_PATH = "${STAGING_LIBDIR}" export PHP_NATIVE_DIR="${STAGING_BINDIR_NATIVE}" export PHP_PEAR_PHP_BIN="/usr/bin/php" -acpaths = "" - do_configure_append() { find ${S} -type f | xargs sed -i 's:I/usr/include:I${STAGING_INCDIR}:g' } -do_install () { - oe_runmake 'INSTALL_ROOT=${D}' install -} - - - PACKAGES = "${PN}-dbg \ ${PN}-cli \ ${PN}-pear \ @@ -76,17 +54,12 @@ FILES_${PN}-pear ="/usr/bin/pear* /usr/bin/pecl \ /usr/lib/php/.depdb /usr/lib/php/.depdblock /usr/lib/php/.filemap \ /usr/lib/php/.lock" - FILES_${PN}-dev ="/usr/include/php /usr/include/build \ /usr/bin/phpize /usr/bin/php-config" FILES_${PN} ="/usr/lib/php" FILES_${PN} +="/usr/bin" - - RDEPENDS_${PN}-pear =${PN} RDEPENDS_${PN}-cli =${PN} RDEPENDS_${PN}-dev =${PN} - - -- cgit v1.2.3 From e0eb0cd22f9410cf94665db7ced4fc006888e458 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 31 Jan 2008 14:13:42 +0000 Subject: angstrom-2007-preferred-versions.inc: Bump version of few GPE/GPEPhone libs. * Away from buggy/non-buildable versions. --- conf/distro/include/angstrom-2007-preferred-versions.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/distro/include/angstrom-2007-preferred-versions.inc b/conf/distro/include/angstrom-2007-preferred-versions.inc index 02e2399e4e..d712fadb8c 100644 --- a/conf/distro/include/angstrom-2007-preferred-versions.inc +++ b/conf/distro/include/angstrom-2007-preferred-versions.inc @@ -886,7 +886,7 @@ PREFERRED_VERSION_libgalago ?= "0.3.3" PREFERRED_VERSION_libgc ?= "6.7" PREFERRED_VERSION_libgcrypt ?= "1.2.3" PREFERRED_VERSION_libgeda ?= "20050820" -PREFERRED_VERSION_libgemwidget ?= "0.1" +PREFERRED_VERSION_libgemwidget ?= "1.0" PREFERRED_VERSION_libglade ?= "2.6.2" PREFERRED_VERSION_libglademm ?= "2.4.1" PREFERRED_VERSION_libgmime ?= "2.1.7" @@ -918,7 +918,7 @@ PREFERRED_VERSION_libhildonfm ?= "1.9.41" PREFERRED_VERSION_libhildonhelp ?= "1.9.1" PREFERRED_VERSION_libhildonmime ?= "1.9.5" PREFERRED_VERSION_libhtml-mason-perl ?= "1.35" -PREFERRED_VERSION_libiac ?= "0.1" +PREFERRED_VERSION_libiac ?= "1.0" PREFERRED_VERSION_libice ?= "1.0.4" PREFERRED_VERSION_libiconv ?= "1.11" PREFERRED_VERSION_libid3 ?= "1.1" @@ -946,7 +946,7 @@ PREFERRED_VERSION_libmailwrapper ?= "1.2.3" PREFERRED_VERSION_libmatchbox ?= "1.9" PREFERRED_VERSION_libmath-bigint-gmp-perl ?= "1.18" PREFERRED_VERSION_libmikmod ?= "3.2.0-beta2" -PREFERRED_VERSION_libmimedir ?= "0.3.1" +PREFERRED_VERSION_libmimedir ?= "0.4.2" PREFERRED_VERSION_libmng ?= "1.0.8" PREFERRED_VERSION_libmodplug ?= "0.7" PREFERRED_VERSION_libmodule-build-perl ?= "0.2805" -- cgit v1.2.3 From a05ddf7c28cc4500e62930dfd258c8a6b993f323 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 31 Jan 2008 16:51:24 +0000 Subject: u-boot_1.3.1.bb: package u-boot 1.3.1 with patches for mpc8313e-rdb * add patch for the NAND controller on mpc8313e-rdb boards * add patch to make mpc8313e-rdb boards autoboot after 3 seconds --- packages/u-boot/u-boot-1.3.1/.mtn2git_empty | 0 packages/u-boot/u-boot_1.3.1.bb | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100644 packages/u-boot/u-boot-1.3.1/.mtn2git_empty create mode 100644 packages/u-boot/u-boot_1.3.1.bb diff --git a/packages/u-boot/u-boot-1.3.1/.mtn2git_empty b/packages/u-boot/u-boot-1.3.1/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/u-boot/u-boot_1.3.1.bb b/packages/u-boot/u-boot_1.3.1.bb new file mode 100644 index 0000000000..60074d3ed9 --- /dev/null +++ b/packages/u-boot/u-boot_1.3.1.bb @@ -0,0 +1,9 @@ +require u-boot.inc + +DEFAULT_PREFERENCE = "-1" + +SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \ + file://mpc8313e-rdb-autoboot.patch;patch=1 \ + file://mpc8313e-rdb-nand.patch;patch=1" + +PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3 From d8918d114e1286ff97435a543b65d270e79a0f92 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 31 Jan 2008 16:52:21 +0000 Subject: mpc8313e-rdb.conf: make u-boot 1.3.1 the preferred version --- conf/machine/mpc8313e-rdb.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/mpc8313e-rdb.conf b/conf/machine/mpc8313e-rdb.conf index 81c3e29e91..3bc18e3f9e 100644 --- a/conf/machine/mpc8313e-rdb.conf +++ b/conf/machine/mpc8313e-rdb.conf @@ -10,7 +10,7 @@ PREFERRED_VERSION_u-boot = "git" MACHINE_FEATURES = "kernel26 usbhost ext2" -PREFERRED_VERSION_u-boot = "1.3.0" +PREFERRED_VERSION_u-boot = "1.3.1" UBOOT_MACHINE = "MPC8313ERDB_33_config" #rootfs on NAND flash -- cgit v1.2.3 From 12d48e2fdb36b8f02db189a370cf9c80fbd57189 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 31 Jan 2008 22:35:33 +0000 Subject: MAINTAINERS: Add me as a maintainer for the qemu recipes --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 089cf6e67c..9b1e8854dc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -193,7 +193,7 @@ Mail: rpurdie@rpsys.net Distros: poky, openzaurus, Ă…ngström Machines: poodle, c7x0, spitz, nokia770, qemuarm, qemux86, hx2xxx Interests: Kernels, Bitbake, Core OE infrastructure, Zaurus 2.6 -Recipes: linux-rp, udev, zaurusd, task-base +Recipes: linux-rp, udev, zaurusd, task-base, qemu Person: Rick Farina Mail: sidhayn@gmail.com -- cgit v1.2.3 From 11354f465781c02d050a56844a7589909a1ff385 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 31 Jan 2008 23:44:17 +0000 Subject: Restore files accidently removed in bad merge --- packages/gcc/gcc-4.1.0/.mtn2git_empty | 0 packages/strace/strace-4.5.14/.mtn2git_empty | 0 packages/strace/strace_4.5.14.bb | 17 +++++++++++++++++ 3 files changed, 17 insertions(+) create mode 100644 packages/gcc/gcc-4.1.0/.mtn2git_empty create mode 100644 packages/strace/strace-4.5.14/.mtn2git_empty create mode 100644 packages/strace/strace_4.5.14.bb diff --git a/packages/gcc/gcc-4.1.0/.mtn2git_empty b/packages/gcc/gcc-4.1.0/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/strace/strace-4.5.14/.mtn2git_empty b/packages/strace/strace-4.5.14/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/strace/strace_4.5.14.bb b/packages/strace/strace_4.5.14.bb new file mode 100644 index 0000000000..50baef86dc --- /dev/null +++ b/packages/strace/strace_4.5.14.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "strace is a system call tracing tool." +SECTION = "console/utils" +LICENSE = "GPL" +PR = "r4" + +SRC_URI = "${SOURCEFORGE_MIRROR}/strace/strace-${PV}.tar.bz2 \ + file://glibc-2.5.patch;patch=1 \ + file://arm-eabi.patch;patch=1 \ + file://drop-ctl-proc.patch;patch=1 \ + file://sh-arch-update.patch;patch=1 \ + file://sh-syscall-update.patch;patch=1 \ + file://strace-fix-arm-bad-syscall.patch;patch=1 \ + file://strace-undef-syscall.patch;patch=1 " + +inherit autotools + +export INCLUDES = "-I. -I./linux" -- cgit v1.2.3 From dbb12f666141bdd4a41ccce7c1ad6ed25e71dace Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Fri, 1 Feb 2008 06:39:07 +0000 Subject: linux-rp-2.6.23/24: spitz kernel patches, oebug 3283, courtesy of Stanislav Brabec utx@penguin.cz * see bug tracker and mailist for details --- packages/linux/linux-rp-2.6.23/defconfig-spitz | 3 +- packages/linux/linux-rp-2.6.23/mtd-module.patch | 13 + packages/linux/linux-rp-2.6.23/sharpsl-rc-r1.patch | 519 +++++++++++++++++++++ packages/linux/linux-rp-2.6.23/wm8750-treble.patch | 11 + packages/linux/linux-rp-2.6.24/defconfig-spitz | 3 +- packages/linux/linux-rp-2.6.24/mtd-module.patch | 13 + packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch | 519 +++++++++++++++++++++ packages/linux/linux-rp-2.6.24/wm8750-treble.patch | 11 + packages/linux/linux-rp_2.6.23.bb | 3 + packages/linux/linux-rp_2.6.24.bb | 3 + 10 files changed, 1096 insertions(+), 2 deletions(-) create mode 100644 packages/linux/linux-rp-2.6.23/mtd-module.patch create mode 100644 packages/linux/linux-rp-2.6.23/sharpsl-rc-r1.patch create mode 100644 packages/linux/linux-rp-2.6.23/wm8750-treble.patch create mode 100644 packages/linux/linux-rp-2.6.24/mtd-module.patch create mode 100644 packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch create mode 100644 packages/linux/linux-rp-2.6.24/wm8750-treble.patch diff --git a/packages/linux/linux-rp-2.6.23/defconfig-spitz b/packages/linux/linux-rp-2.6.23/defconfig-spitz index a18218f2d1..a4e849cba2 100644 --- a/packages/linux/linux-rp-2.6.23/defconfig-spitz +++ b/packages/linux/linux-rp-2.6.23/defconfig-spitz @@ -579,7 +579,7 @@ CONFIG_MTD_ROM=m # CONFIG_MTD_COMPLEX_MAPPINGS=y # CONFIG_MTD_PHYSMAP is not set -CONFIG_MTD_SHARP_SL=y +CONFIG_MTD_SHARP_SL=m # CONFIG_MTD_PLATRAM is not set # @@ -821,6 +821,7 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_CORGI is not set CONFIG_KEYBOARD_SPITZ=y +CONFIG_SHARPSL_RC=m # CONFIG_KEYBOARD_PXA27x is not set # CONFIG_KEYBOARD_GPIO is not set # CONFIG_INPUT_MOUSE is not set diff --git a/packages/linux/linux-rp-2.6.23/mtd-module.patch b/packages/linux/linux-rp-2.6.23/mtd-module.patch new file mode 100644 index 0000000000..4aa2f22aee --- /dev/null +++ b/packages/linux/linux-rp-2.6.23/mtd-module.patch @@ -0,0 +1,13 @@ +Index: linux-2.6.23/drivers/mtd/maps/Kconfig +=================================================================== +--- linux-2.6.23/drivers/mtd/maps/Kconfig ++++ linux-2.6.23/drivers/mtd/maps/Kconfig +@@ -600,7 +600,7 @@ + default "4" + + config MTD_SHARP_SL +- bool "ROM mapped on Sharp SL Series" ++ tristate "ROM mapped on Sharp SL Series" + depends on ARCH_PXA + help + This enables access to the flash chip on the Sharp SL Series of PDAs. diff --git a/packages/linux/linux-rp-2.6.23/sharpsl-rc-r1.patch b/packages/linux/linux-rp-2.6.23/sharpsl-rc-r1.patch new file mode 100644 index 0000000000..08f1f2e721 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23/sharpsl-rc-r1.patch @@ -0,0 +1,519 @@ +Index: linux-2.6.23/arch/arm/mach-pxa/spitz.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/spitz.c ++++ linux-2.6.23/arch/arm/mach-pxa/spitz.c +@@ -245,6 +245,13 @@ static struct platform_device spitzkbd_d + .id = -1, + }; + ++/* ++ * Spitz Remote Control Device ++ */ ++static struct platform_device sharpsl_rc_device = { ++ .name = "sharpsl-remote-control", ++ .id = -1, ++}; + + /* + * Spitz LEDs +@@ -477,6 +484,7 @@ static struct platform_device *devices[] + &spitzscoop_device, + &spitzssp_device, + &spitzkbd_device, ++ &sharpsl_rc_device, + &spitzts_device, + &spitzbl_device, + &spitzled_device, +Index: linux-2.6.23/drivers/input/keyboard/Kconfig +=================================================================== +--- linux-2.6.23.orig/drivers/input/keyboard/Kconfig ++++ linux-2.6.23/drivers/input/keyboard/Kconfig +@@ -154,6 +154,17 @@ config KEYBOARD_SPITZ + To compile this driver as a module, choose M here: the + module will be called spitzkbd. + ++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.23/drivers/input/keyboard/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/input/keyboard/Makefile ++++ linux-2.6.23/drivers/input/keyboard/Makefile +@@ -15,6 +15,7 @@ obj-$(CONFIG_KEYBOARD_NEWTON) += newton + obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o + obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o + obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o ++obj-$(CONFIG_SHARPSL_RC) += sharpsl_rc.o + obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o + obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o + obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o +Index: linux-2.6.23/drivers/input/keyboard/sharpsl_rc.c +=================================================================== +--- /dev/null ++++ linux-2.6.23/drivers/input/keyboard/sharpsl_rc.c +@@ -0,0 +1,291 @@ ++/* ++ * 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 ++ ++#ifdef CONFIG_MACH_SPITZ ++#include ++#endif ++#ifdef CONFIG_MACH_CORGI ++#include ++#endif ++ ++#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; ++}; ++ ++#ifdef CONFIG_MACH_SPITZ ++#define REMOTE_AKIN_PULLUP SPITZ_SCP2_AKIN_PULLUP ++#define REMOTE_SCOOP_DEVICE spitzscoop2_device ++#define REMOTE_GPIO_INT SPITZ_GPIO_AK_INT ++#define REMOTE_IRQ_INT SPITZ_IRQ_GPIO_AK_INT ++static struct remote_control_key remote_keys[] = { ++ { 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}, ++}; ++#endif ++#ifdef CONFIG_MACH_CORGI ++#define REMOTE_AKIN_PULLUP CORGI_SCP_AKIN_PULLUP ++#define REMOTE_SCOOP_DEVICE corgiscoop_device ++#define REMOTE_GPIO_INT CORGI_GPIO_AK_INT ++#define REMOTE_IRQ_INT CORGI_IRQ_GPIO_AK_INT ++static struct remote_control_key remote_keys[] = { ++ //These need to be fixed for the CE-RH1's 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}, ++}; ++#endif ++ ++#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; ++ ++ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM); ++ for (i = 0; i < ARRAY_SIZE(remote_keys); ++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 pt_regs *regs) ++{ ++ 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; ++ ++ reset_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_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 { ++ set_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_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; ++ ++ 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->cdev.dev = &pdev->dev; ++ input_dev->private = sharpsl_rc; ++ ++ input_dev->evbit[0] = BIT(EV_KEY); ++ ++ for (i = 0; i <= ARRAY_SIZE(remote_keys); i++) ++ set_bit(remote_keys[i].key, input_dev->keybit); ++ ++ input_register_device(sharpsl_rc->input); ++ ++ pxa_gpio_mode(REMOTE_GPIO_INT | GPIO_IN); ++ ret = request_irq(REMOTE_IRQ_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"); ++ ++ free_irq(REMOTE_IRQ_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.23/drivers/input/keyboard/spitzkbd.c +=================================================================== +--- linux-2.6.23.orig/drivers/input/keyboard/spitzkbd.c ++++ linux-2.6.23/drivers/input/keyboard/spitzkbd.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -279,13 +280,21 @@ static irqreturn_t spitzkbd_hinge_isr(in + 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; +@@ -299,9 +308,18 @@ static void spitzkbd_hinge_timer(unsigne + + 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)); +@@ -393,6 +411,7 @@ static int __init spitzkbd_probe(struct + 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) +@@ -430,9 +449,12 @@ static int __init spitzkbd_probe(struct + 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; + +@@ -453,6 +475,7 @@ static int spitzkbd_remove(struct platfo + 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.23/arch/arm/mach-pxa/sharpsl.h +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/sharpsl.h ++++ linux-2.6.23/arch/arm/mach-pxa/sharpsl.h +@@ -50,15 +50,10 @@ void spitz_wait_hsync(void); + + #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.23/arch/arm/mach-pxa/sharpsl_pm.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/sharpsl_pm.c ++++ linux-2.6.23/arch/arm/mach-pxa/sharpsl_pm.c +@@ -135,6 +135,8 @@ int sharpsl_pm_pxa_read_max1111(int chan + | 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.23/include/asm-arm/hardware/sharpsl_pm.h +=================================================================== +--- linux-2.6.23.orig/include/asm-arm/hardware/sharpsl_pm.h ++++ linux-2.6.23/include/asm-arm/hardware/sharpsl_pm.h +@@ -104,3 +104,10 @@ irqreturn_t sharpsl_ac_isr(int irq, void + 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.23/include/linux/input.h +=================================================================== +--- linux-2.6.23.orig/include/linux/input.h ++++ linux-2.6.23/include/linux/input.h +@@ -621,6 +621,7 @@ struct input_absinfo { + #define SW_TABLET_MODE 0x01 /* set = tablet mode */ + #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ + #define SW_RADIO 0x03 /* set = radio enabled */ ++#define SW_REMOTE_INSERT 0x04 /* set = remote */ + #define SW_MAX 0x0f + + /* +Index: linux-2.6.23/arch/arm/mach-pxa/spitz_pm.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/spitz_pm.c ++++ linux-2.6.23/arch/arm/mach-pxa/spitz_pm.c +@@ -162,6 +162,13 @@ static int spitz_should_wakeup(unsigned + 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.23/wm8750-treble.patch b/packages/linux/linux-rp-2.6.23/wm8750-treble.patch new file mode 100644 index 0000000000..07a8d8e141 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23/wm8750-treble.patch @@ -0,0 +1,11 @@ +--- linux-2.6.23/sound/soc/codecs/wm8750.c 2007-10-09 22:31:38.000000000 +0200 ++++ linux-2.6.23/sound/soc/codecs/wm8750.c 2007-11-02 16:47:35.000000000 +0100 +@@ -189,7 +189,7 @@ + SOC_ENUM("Bass Filter", wm8750_enum[1]), + SOC_SINGLE("Bass Volume", WM8750_BASS, 0, 15, 1), + +-SOC_SINGLE("Treble Volume", WM8750_TREBLE, 0, 15, 0), ++SOC_SINGLE("Treble Volume", WM8750_TREBLE, 0, 15, 1), + SOC_ENUM("Treble Cut-off", wm8750_enum[2]), + + SOC_SINGLE("3D Switch", WM8750_3D, 0, 1, 0), diff --git a/packages/linux/linux-rp-2.6.24/defconfig-spitz b/packages/linux/linux-rp-2.6.24/defconfig-spitz index d0226301f7..0322da0ec1 100644 --- a/packages/linux/linux-rp-2.6.24/defconfig-spitz +++ b/packages/linux/linux-rp-2.6.24/defconfig-spitz @@ -589,7 +589,7 @@ CONFIG_MTD_ROM=m # CONFIG_MTD_COMPLEX_MAPPINGS=y # CONFIG_MTD_PHYSMAP is not set -CONFIG_MTD_SHARP_SL=y +CONFIG_MTD_SHARP_SL=m # CONFIG_MTD_PLATRAM is not set # @@ -839,6 +839,7 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_CORGI is not set CONFIG_KEYBOARD_SPITZ=y +CONFIG_SHARPSL_RC=m # CONFIG_KEYBOARD_PXA27x is not set # CONFIG_KEYBOARD_GPIO is not set # CONFIG_INPUT_MOUSE is not set diff --git a/packages/linux/linux-rp-2.6.24/mtd-module.patch b/packages/linux/linux-rp-2.6.24/mtd-module.patch new file mode 100644 index 0000000000..4aa2f22aee --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/mtd-module.patch @@ -0,0 +1,13 @@ +Index: linux-2.6.23/drivers/mtd/maps/Kconfig +=================================================================== +--- linux-2.6.23/drivers/mtd/maps/Kconfig ++++ linux-2.6.23/drivers/mtd/maps/Kconfig +@@ -600,7 +600,7 @@ + default "4" + + config MTD_SHARP_SL +- bool "ROM mapped on Sharp SL Series" ++ tristate "ROM mapped on Sharp SL Series" + depends on ARCH_PXA + help + This enables access to the flash chip on the Sharp SL Series of PDAs. diff --git a/packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch b/packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch new file mode 100644 index 0000000000..453010a197 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch @@ -0,0 +1,519 @@ +Index: linux-2.6.24/arch/arm/mach-pxa/spitz.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/spitz.c 2008-01-27 02:10:17.000000000 +0000 ++++ linux-2.6.24/arch/arm/mach-pxa/spitz.c 2008-01-27 02:10:52.000000000 +0000 +@@ -259,6 +259,13 @@ + .id = -1, + }; + ++/* ++ * Spitz Remote Control Device ++ */ ++static struct platform_device sharpsl_rc_device = { ++ .name = "sharpsl-remote-control", ++ .id = -1, ++}; + + /* + * Spitz LEDs +@@ -548,6 +555,7 @@ + &spitzscoop_device, + &spitzssp_device, + &spitzkbd_device, ++ &sharpsl_rc_device, + &spitzts_device, + &spitzbl_device, + &spitzled_device, +Index: linux-2.6.24/drivers/input/keyboard/Kconfig +=================================================================== +--- linux-2.6.24.orig/drivers/input/keyboard/Kconfig 2008-01-27 02:10:20.000000000 +0000 ++++ linux-2.6.24/drivers/input/keyboard/Kconfig 2008-01-27 02:10:52.000000000 +0000 +@@ -154,6 +154,17 @@ + To compile this driver as a module, choose M here: the + module will be called spitzkbd. + ++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.24/drivers/input/keyboard/Makefile +=================================================================== +--- linux-2.6.24.orig/drivers/input/keyboard/Makefile 2008-01-27 02:10:20.000000000 +0000 ++++ linux-2.6.24/drivers/input/keyboard/Makefile 2008-01-27 02:11:43.000000000 +0000 +@@ -15,6 +15,7 @@ + obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o + obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o + obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o ++obj-$(CONFIG_SHARPSL_RC) += sharpsl_rc.o + obj-$(CONFIG_KEYBOARD_ASIC3) += asic3_keys.o + obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o + obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o +Index: linux-2.6.24/drivers/input/keyboard/sharpsl_rc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.24/drivers/input/keyboard/sharpsl_rc.c 2008-01-27 02:10:52.000000000 +0000 +@@ -0,0 +1,291 @@ ++/* ++ * 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 ++ ++#ifdef CONFIG_MACH_SPITZ ++#include ++#endif ++#ifdef CONFIG_MACH_CORGI ++#include ++#endif ++ ++#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; ++}; ++ ++#ifdef CONFIG_MACH_SPITZ ++#define REMOTE_AKIN_PULLUP SPITZ_SCP2_AKIN_PULLUP ++#define REMOTE_SCOOP_DEVICE spitzscoop2_device ++#define REMOTE_GPIO_INT SPITZ_GPIO_AK_INT ++#define REMOTE_IRQ_INT SPITZ_IRQ_GPIO_AK_INT ++static struct remote_control_key remote_keys[] = { ++ { 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}, ++}; ++#endif ++#ifdef CONFIG_MACH_CORGI ++#define REMOTE_AKIN_PULLUP CORGI_SCP_AKIN_PULLUP ++#define REMOTE_SCOOP_DEVICE corgiscoop_device ++#define REMOTE_GPIO_INT CORGI_GPIO_AK_INT ++#define REMOTE_IRQ_INT CORGI_IRQ_GPIO_AK_INT ++static struct remote_control_key remote_keys[] = { ++ //These need to be fixed for the CE-RH1's 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}, ++}; ++#endif ++ ++#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; ++ ++ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM); ++ for (i = 0; i < ARRAY_SIZE(remote_keys); ++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 pt_regs *regs) ++{ ++ 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; ++ ++ reset_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_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 { ++ set_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_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; ++ ++ 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->cdev.dev = &pdev->dev; ++ input_dev->private = sharpsl_rc; ++ ++ input_dev->evbit[0] = BIT(EV_KEY); ++ ++ for (i = 0; i <= ARRAY_SIZE(remote_keys); i++) ++ set_bit(remote_keys[i].key, input_dev->keybit); ++ ++ input_register_device(sharpsl_rc->input); ++ ++ pxa_gpio_mode(REMOTE_GPIO_INT | GPIO_IN); ++ ret = request_irq(REMOTE_IRQ_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"); ++ ++ free_irq(REMOTE_IRQ_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.24/drivers/input/keyboard/spitzkbd.c +=================================================================== +--- linux-2.6.24.orig/drivers/input/keyboard/spitzkbd.c 2008-01-24 22:58:37.000000000 +0000 ++++ linux-2.6.24/drivers/input/keyboard/spitzkbd.c 2008-01-27 02:10:52.000000000 +0000 +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -279,13 +280,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; +@@ -299,9 +308,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)); +@@ -395,6 +413,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) +@@ -432,9 +451,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; + +@@ -455,6 +477,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.24/arch/arm/mach-pxa/sharpsl.h +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/sharpsl.h 2008-01-27 02:10:15.000000000 +0000 ++++ linux-2.6.24/arch/arm/mach-pxa/sharpsl.h 2008-01-27 02:10:52.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.24/arch/arm/mach-pxa/sharpsl_pm.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/sharpsl_pm.c 2008-01-24 22:58:37.000000000 +0000 ++++ linux-2.6.24/arch/arm/mach-pxa/sharpsl_pm.c 2008-01-27 02:10:52.000000000 +0000 +@@ -135,6 +135,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.24/include/asm-arm/hardware/sharpsl_pm.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/hardware/sharpsl_pm.h 2008-01-24 22:58:37.000000000 +0000 ++++ linux-2.6.24/include/asm-arm/hardware/sharpsl_pm.h 2008-01-27 02:10:52.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.24/include/linux/input.h +=================================================================== +--- linux-2.6.24.orig/include/linux/input.h 2008-01-24 22:58:37.000000000 +0000 ++++ linux-2.6.24/include/linux/input.h 2008-01-27 02:10:52.000000000 +0000 +@@ -636,6 +636,7 @@ + #define SW_TABLET_MODE 0x01 /* set = tablet mode */ + #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ + #define SW_RADIO 0x03 /* set = radio enabled */ ++#define SW_REMOTE_INSERT 0x04 /* set = remote */ + #define SW_MAX 0x0f + #define SW_CNT (SW_MAX+1) + +Index: linux-2.6.24/arch/arm/mach-pxa/spitz_pm.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/spitz_pm.c 2008-01-24 22:58:37.000000000 +0000 ++++ linux-2.6.24/arch/arm/mach-pxa/spitz_pm.c 2008-01-27 02:10:52.000000000 +0000 +@@ -162,6 +162,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.24/wm8750-treble.patch b/packages/linux/linux-rp-2.6.24/wm8750-treble.patch new file mode 100644 index 0000000000..07a8d8e141 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/wm8750-treble.patch @@ -0,0 +1,11 @@ +--- linux-2.6.23/sound/soc/codecs/wm8750.c 2007-10-09 22:31:38.000000000 +0200 ++++ linux-2.6.23/sound/soc/codecs/wm8750.c 2007-11-02 16:47:35.000000000 +0100 +@@ -189,7 +189,7 @@ + SOC_ENUM("Bass Filter", wm8750_enum[1]), + SOC_SINGLE("Bass Volume", WM8750_BASS, 0, 15, 1), + +-SOC_SINGLE("Treble Volume", WM8750_TREBLE, 0, 15, 0), ++SOC_SINGLE("Treble Volume", WM8750_TREBLE, 0, 15, 1), + SOC_ENUM("Treble Cut-off", wm8750_enum[2]), + + SOC_SINGLE("3D Switch", WM8750_3D, 0, 1, 0), diff --git a/packages/linux/linux-rp_2.6.23.bb b/packages/linux/linux-rp_2.6.23.bb index a8c5f79f67..4775989b45 100644 --- a/packages/linux/linux-rp_2.6.23.bb +++ b/packages/linux/linux-rp_2.6.23.bb @@ -44,6 +44,9 @@ SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \ ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \ file://squashfs3.0-2.6.15.patch;patch=1;status=external \ + file://mtd-module.patch;patch=1;status=external \ + file://wm8750-treble.patch;patch=1;status=external \ + file://sharpsl-rc-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 \ diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb index 593a70a48b..8547083516 100644 --- a/packages/linux/linux-rp_2.6.24.bb +++ b/packages/linux/linux-rp_2.6.24.bb @@ -42,6 +42,8 @@ SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \ ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \ file://squashfs3.3.patch;patch=1;status=external \ + file://mtd-module.patch;patch=1;status=external \ + file://wm8750-treble.patch;patch=1;status=external \ ${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 \ @@ -54,6 +56,7 @@ SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ 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://sharpsl-rc-r1.patch;patch=1 \ file://binutils-buildid-arm.patch;patch=1 \ file://versatile-armv6.patch;patch=1 \ file://defconfig-c7x0 \ -- cgit v1.2.3 From 6e642c106cf936da3ef370717eb85c06cc7e535c Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Fri, 1 Feb 2008 06:58:22 +0000 Subject: linux-rp_2.6.23/24: bump PR for the previous commit --- packages/linux/linux-rp_2.6.23.bb | 2 +- packages/linux/linux-rp_2.6.24.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-rp_2.6.23.bb b/packages/linux/linux-rp_2.6.23.bb index 4775989b45..a087be7698 100644 --- a/packages/linux/linux-rp_2.6.23.bb +++ b/packages/linux/linux-rp_2.6.23.bb @@ -1,6 +1,6 @@ require linux-rp.inc -PR = "r26" +PR = "r27" # Handy URLs # git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb index 8547083516..b3b0f5be01 100644 --- a/packages/linux/linux-rp_2.6.24.bb +++ b/packages/linux/linux-rp_2.6.24.bb @@ -1,6 +1,6 @@ require linux-rp.inc -PR = "r2" +PR = "r3" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_collie = "1" -- cgit v1.2.3 From 8676aae43b79aa4b52255dd60c11e5dd171bf7aa Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Fri, 1 Feb 2008 07:02:51 +0000 Subject: xserver-kdrive-1.3/1.4: keycode MEDIUMRAW patch, oebug 2637, courtesy of Stanislav Brabec utx@penguin.cz * see details in bugtracker and mailinglist --- .../linux-keyboard-mediumraw.patch | 83 ++++++++++++++++++++++ .../linux-keyboard-mediumraw.patch | 44 ++++++++++++ packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb | 3 +- packages/xorg-xserver/xserver-kdrive_1.4.bb | 3 +- 4 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 packages/xorg-xserver/xserver-kdrive-1.3.0.0/linux-keyboard-mediumraw.patch create mode 100644 packages/xorg-xserver/xserver-kdrive-1.4/linux-keyboard-mediumraw.patch diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/linux-keyboard-mediumraw.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/linux-keyboard-mediumraw.patch new file mode 100644 index 0000000000..997028ad8d --- /dev/null +++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/linux-keyboard-mediumraw.patch @@ -0,0 +1,83 @@ +Index: xorg-server-1.3.0.0/hw/kdrive/linux/keyboard.c +=================================================================== +--- xorg-server-1.3.0.0.orig/hw/kdrive/linux/keyboard.c 2006-11-16 18:01:23.000000000 +0000 ++++ xorg-server-1.3.0.0/hw/kdrive/linux/keyboard.c 2007-08-12 12:14:29.000000000 +0000 +@@ -384,14 +384,35 @@ + LinuxKeyboardRead (int fd, void *closure) + { + unsigned char buf[256], *b; +- int n; ++ int n, mediumraw_data, mediumraw_event; ++ static enum { LOWKEY, BYTE1, BYTE2 } mediumraw_state = LOWKEY; + + while ((n = read (fd, buf, sizeof (buf))) > 0) + { + b = buf; + while (n--) + { +- KdEnqueueKeyboardEvent (b[0] & 0x7f, b[0] & 0x80); ++ switch (mediumraw_state) ++ { ++ case LOWKEY: ++ if ( (b[0] & 0x7f) == 0) ++ { ++ mediumraw_state = BYTE1; ++ mediumraw_event = b[0] & 0x80; ++ } ++ else ++ KdEnqueueKeyboardEvent (b[0] & 0x7f, b[0] & 0x80); ++ break; ++ case BYTE1: ++ mediumraw_data = (b[0] & 0x7f) << 7; ++ mediumraw_state = BYTE2; ++ break; ++ case BYTE2: ++ /* FIXME: KdEnqueueKeyboardEvent should accept word size */ ++ KdEnqueueKeyboardEvent ( mediumraw_data | (b[0] & 0x7f), mediumraw_event); ++ mediumraw_state = LOWKEY; ++ break; ++ } + b++; + } + } +Index: xorg-server-1.3.0.0/hw/xfree86/os-support/linux/lnx_kbd.c +=================================================================== +--- xorg-server-1.3.0.0.orig/hw/xfree86/os-support/linux/lnx_kbd.c 2006-11-16 18:01:25.000000000 +0000 ++++ xorg-server-1.3.0.0/hw/xfree86/os-support/linux/lnx_kbd.c 2007-08-12 12:14:29.000000000 +0000 +@@ -430,12 +430,32 @@ + { + KbdDevPtr pKbd = (KbdDevPtr) pInfo->private; + unsigned char rBuf[64]; +- int nBytes, i; ++ int nBytes, i, mediumraw_data, mediumraw_event; ++ static enum { LOWKEY, BYTE1, BYTE2 } mediumraw_state = LOWKEY; + if ((nBytes = read( pInfo->fd, (char *)rBuf, sizeof(rBuf))) > 0) { +- for (i = 0; i < nBytes; i++) +- pKbd->PostEvent(pInfo, rBuf[i] & 0x7f, +- rBuf[i] & 0x80 ? FALSE : TRUE); ++ for (i = 0; i < nBytes; i++) { ++ switch (mediumraw_state) { ++ case LOWKEY: ++ if ( (rBuf[i] & 0x7f) == 0) { ++ mediumraw_state = BYTE1; ++ mediumraw_event = rBuf[i] & 0x80; ++ } ++ else ++ pKbd->PostEvent(pInfo, rBuf[i] & 0x7f, ++ rBuf[i] & 0x80 ? FALSE : TRUE); ++ break; ++ case BYTE1: ++ mediumraw_data = (rBuf[i] & 0x7f) << 7; ++ mediumraw_state = BYTE2; ++ break; ++ case BYTE2: ++ pKbd->PostEvent(pInfo, mediumraw_data | (rBuf[i] & 0x7f), ++ mediumraw_event ? FALSE : TRUE); ++ mediumraw_state = LOWKEY; ++ break; ++ } + } ++ } + } + + static Bool diff --git a/packages/xorg-xserver/xserver-kdrive-1.4/linux-keyboard-mediumraw.patch b/packages/xorg-xserver/xserver-kdrive-1.4/linux-keyboard-mediumraw.patch new file mode 100644 index 0000000000..36d2f8eae8 --- /dev/null +++ b/packages/xorg-xserver/xserver-kdrive-1.4/linux-keyboard-mediumraw.patch @@ -0,0 +1,44 @@ +Index: git/hw/kdrive/linux/keyboard.c +=================================================================== +--- git.orig/hw/kdrive/linux/keyboard.c 2007-11-14 21:30:45.000000000 +0000 ++++ git/hw/kdrive/linux/keyboard.c 2007-11-15 12:00:11.000000000 +0000 +@@ -42,6 +42,8 @@ + #include + + extern int LinuxConsoleFd; ++static unsigned char mediumraw_data, mediumraw_up; ++static enum { DEFAULT, EXTBYTE1, EXTBYTE2 } mediumraw_state = DEFAULT; + + static const KeySym linux_to_x[256] = { + NoSymbol, NoSymbol, NoSymbol, NoSymbol, +@@ -701,7 +703,29 @@ + else + #endif + scancode = b[0] & 0x7f; +- KdEnqueueKeyboardEvent (closure, scancode, b[0] & 0x80); ++ /* This is extended medium raw mode interpreter ++ see linux/drivers/keyboard.c (kbd->kbdmode == VC_MEDIUMRAW) */ ++ switch (mediumraw_state) ++ { ++ case DEFAULT: ++ if (scancode == 0) ++ { ++ mediumraw_state = EXTBYTE1; ++ mediumraw_up = b[0] & 0x80; ++ } ++ else ++ KdEnqueueKeyboardEvent (closure, scancode, b[0] & 0x80); ++ break; ++ case EXTBYTE1: ++ mediumraw_data = scancode; ++ mediumraw_state = EXTBYTE2; ++ break; ++ case EXTBYTE2: ++ /* Note: Only codes < 256 will pass correctly through KdEnqueueKeyboardEvent() */ ++ KdEnqueueKeyboardEvent (closure, (int)mediumraw_data << 7 | scancode, mediumraw_up); ++ mediumraw_state = DEFAULT; ++ break; ++ } + b++; + } + } diff --git a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb index 71d0eccba8..755a51ca63 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb @@ -3,7 +3,7 @@ require xserver-kdrive-common.inc DEPENDS += "libxkbfile libxcalibrate" PE = "1" -PR = "r23" +PR = "r24" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ ${KDRIVE_COMMON_PATCHES} \ @@ -20,6 +20,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://w100-autofoo.patch;patch=1 \ file://w100-fix-offscreen-bmp.patch;patch=1 \ file://kdrive-1.3-18bpp.patch;patch=1 \ + file://linux-keyboard-mediumraw.patch;patch=1 \ file://gumstix-kmode.patch;patch=1 \ file://smedia-glamo.patch;patch=1 \ file://build-glamo.patch;patch=1 \ diff --git a/packages/xorg-xserver/xserver-kdrive_1.4.bb b/packages/xorg-xserver/xserver-kdrive_1.4.bb index f2d9810ec4..f4d5be38e1 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.4.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.4.bb @@ -3,7 +3,7 @@ require xserver-kdrive-common.inc DEPENDS += "hal libxkbfile libxcalibrate pixman" PE = "1" -PR = "r1" +PR = "r2" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ ${KDRIVE_COMMON_PATCHES} \ @@ -16,6 +16,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://w100-autofoo.patch;patch=1 \ file://w100-fix-offscreen-bmp.patch;patch=1 \ file://w100-new-input-world-order.patch;patch=1 \ + file://linux-keyboard-mediumraw.patch;patch=1 \ file://xcalibrate-new-input-world-order.patch;patch=1 \ file://tslib-default-device.patch;patch=1 \ file://fbdev-evdev.patch;patch=1 \ -- cgit v1.2.3 From 7d6f5da1af7e6c040b3af18240d6c3efafe39e6e Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Fri, 1 Feb 2008 07:06:31 +0000 Subject: navit: fix packaging, etc. * replace hardcoded directory * package *.la to -dev * fix .desktop QA * add SECTION --- packages/navit/files/navit.desktop | 4 +--- packages/navit/navit.inc | 11 ++++++----- packages/navit/navit_0.0.3.bb | 2 +- packages/navit/navit_cvs.bb | 4 ++-- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/navit/files/navit.desktop b/packages/navit/files/navit.desktop index 52aae31fce..4d7fda0e35 100644 --- a/packages/navit/files/navit.desktop +++ b/packages/navit/files/navit.desktop @@ -1,12 +1,10 @@ [Desktop Entry] -Encoding=UTF-8 Name=Navit Comment=GPS Navigation Exec=navit Icon=openmoko-terminal Terminal=false Type=Application -Categories=GTK;Application;Utilities; +Categories=GTK; MimeType=text/x-vcard; -SingleInstance=true StartupNotify=true diff --git a/packages/navit/navit.inc b/packages/navit/navit.inc index 06e3a72664..23e3f9b23d 100644 --- a/packages/navit/navit.inc +++ b/packages/navit/navit.inc @@ -1,5 +1,6 @@ DESCRIPTION = "Navit is a car navigation system with routing engine." LICENSE = "GPL" +SECTION = "x11/applications" DEPENDS = "glib-2.0 gtk+" RRECOMMENDS = "gpsd speechd flite" @@ -10,7 +11,7 @@ EXTRA_OECONF = "--disable-binding-python --disable-gui-sdl --disable-samplemap - PACKAGES = "${PN}-dbg ${PN}-dev ${PN} ${PN}-doc ${PN}-locale" FILES_${PN}-dbg += "${libdir}/${PN}/*/.debug" -FILES_${PN}-dev += "${libdir}/${PN}/*/*.so" +FILES_${PN}-dev += "${libdir}/${PN}/*/*.so ${libdir}/${PN}/*/*.la" SRC_URI_append = " \ file://navit.xml-so.patch;patch=1 \ @@ -19,9 +20,9 @@ SRC_URI_append = " \ " do_install_append() { - install -d ${D}/usr/share/applications/ - install -m 0644 ${WORKDIR}/navit.desktop ${D}/usr/share/applications/ + install -d ${D}${datadir}/applications/ + install -m 0644 ${WORKDIR}/navit.desktop ${D}${datadir}/applications/ - mv ${D}/usr/bin/navit ${D}/usr/bin/navit.real - install -m 0755 ${WORKDIR}/navit.launcher ${D}/usr/bin/navit + mv ${D}${bindir}/navit ${D}${bindir}/navit.real + install -m 0755 ${WORKDIR}/navit.launcher ${D}${bindir}/navit } diff --git a/packages/navit/navit_0.0.3.bb b/packages/navit/navit_0.0.3.bb index a926528faf..6688768b88 100644 --- a/packages/navit/navit_0.0.3.bb +++ b/packages/navit/navit_0.0.3.bb @@ -1,5 +1,5 @@ require navit.inc -PR = "r4" +PR = "r5" SRC_URI = "${SOURCEFORGE_MIRROR}/navit/navit-${PV}.tar.gz" diff --git a/packages/navit/navit_cvs.bb b/packages/navit/navit_cvs.bb index 014e7d3a53..f548c192df 100644 --- a/packages/navit/navit_cvs.bb +++ b/packages/navit/navit_cvs.bb @@ -1,7 +1,7 @@ require navit.inc -PV = "0.0.3+cvs${SRCDATE}" -PR = "r4" +PV = "0.0.4+cvs${SRCDATE}" +PR = "r5" S = "${WORKDIR}/navit" -- cgit v1.2.3 From 9e4dd4c0a91eeda9617498b3820e9e59e3d482e2 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Fri, 1 Feb 2008 07:50:37 +0000 Subject: linux-rp: fix previous commit, apply patches from Stanislav Brabec to akita/spitz only * sharpsl-rc-r1.patch interferes with tosa-keyboard-r19.patch --- packages/linux/linux-rp_2.6.23.bb | 15 ++++++++++++--- packages/linux/linux-rp_2.6.24.bb | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/packages/linux/linux-rp_2.6.23.bb b/packages/linux/linux-rp_2.6.23.bb index a087be7698..f4967e16ae 100644 --- a/packages/linux/linux-rp_2.6.23.bb +++ b/packages/linux/linux-rp_2.6.23.bb @@ -44,9 +44,6 @@ SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \ ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \ file://squashfs3.0-2.6.15.patch;patch=1;status=external \ - file://mtd-module.patch;patch=1;status=external \ - file://wm8750-treble.patch;patch=1;status=external \ - file://sharpsl-rc-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 \ @@ -133,6 +130,18 @@ SRC_URI_append_tosa = "\ " # ${DOSRC}/tosa-asoc-r1.patch;patch=1 " +SRC_URI_append_akita = "\ + file://sharpsl-rc-r1.patch;patch=1;status=external \ + file://wm8750-treble.patch;patch=1;status=external \ + file://mtd-module.patch;patch=1 \ + " + +SRC_URI_append_spitz = "\ + file://sharpsl-rc-r1.patch;patch=1;status=external \ + file://wm8750-treble.patch;patch=1;status=external \ + file://mtd-module.patch;patch=1 \ + " + SRC_URI_append_htcuniversal ="\ file://htcuni-acx.patch;patch=1;status=external \ " diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb index b3b0f5be01..cfa61853b1 100644 --- a/packages/linux/linux-rp_2.6.24.bb +++ b/packages/linux/linux-rp_2.6.24.bb @@ -42,8 +42,6 @@ SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \ ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \ file://squashfs3.3.patch;patch=1;status=external \ - file://mtd-module.patch;patch=1;status=external \ - file://wm8750-treble.patch;patch=1;status=external \ ${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 \ @@ -56,7 +54,6 @@ SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ 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://sharpsl-rc-r1.patch;patch=1 \ file://binutils-buildid-arm.patch;patch=1 \ file://versatile-armv6.patch;patch=1 \ file://defconfig-c7x0 \ @@ -139,6 +136,18 @@ SRC_URI_append_tosa = "\ " # ${DOSRC}/tosa-asoc-r1.patch;patch=1 " +SRC_URI_append_akita = "\ + file://mtd-module.patch;patch=1;status=external \ + file://wm8750-treble.patch;patch=1;status=external \ + file://sharpsl-rc-r1.patch;patch=1 \ + " + +SRC_URI_append_spitz = "\ + file://mtd-module.patch;patch=1;status=external \ + file://wm8750-treble.patch;patch=1;status=external \ + file://sharpsl-rc-r1.patch;patch=1 \ + " + SRC_URI_append_htcuniversal ="\ file://htcuni-acx.patch;patch=1;status=external \ " -- cgit v1.2.3 From 5bd085ca0397ccedb2bc2153d8244f93d478bc2f Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 1 Feb 2008 10:17:20 +0000 Subject: local.conf.sample: Fix bad gcc-native3 reference --- conf/local.conf.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/local.conf.sample b/conf/local.conf.sample index 4d60fa729b..5204039478 100644 --- a/conf/local.conf.sample +++ b/conf/local.conf.sample @@ -39,7 +39,7 @@ BBMASK = "" # generation under qemu (mainly arm glibc) and have an external gcc 3.x compiler # that OE recognises. This will mean the gcc-native build is skipped, speeding # builds up. -# ASSUME_PROVIDED += "gcc-native3" +# ASSUME_PROVIDED += "gcc3-native" # Uncomment this if you are building Linux 2.4 Embedix kernels. # i.e. openzaurus-sa-2.4.18 and openzaurus-pxa-2.4.18 - and don't forget -- cgit v1.2.3 From 71a356c08895b6012ae2fe23c2e92b47eb9d21e1 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Fri, 1 Feb 2008 10:33:39 +0000 Subject: libexosip2: add libexosip2, a high-level SIP library --- packages/libexosip2/.mtn2git_empty | 0 packages/libexosip2/files/.mtn2git_empty | 0 packages/libexosip2/files/simplify-flags.patch | 27 ++++++++++++++++++++++++++ packages/libexosip2/libexosip2_2.2.3.bb | 19 ++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 packages/libexosip2/.mtn2git_empty create mode 100644 packages/libexosip2/files/.mtn2git_empty create mode 100644 packages/libexosip2/files/simplify-flags.patch create mode 100644 packages/libexosip2/libexosip2_2.2.3.bb diff --git a/packages/libexosip2/.mtn2git_empty b/packages/libexosip2/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libexosip2/files/.mtn2git_empty b/packages/libexosip2/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libexosip2/files/simplify-flags.patch b/packages/libexosip2/files/simplify-flags.patch new file mode 100644 index 0000000000..62bb768861 --- /dev/null +++ b/packages/libexosip2/files/simplify-flags.patch @@ -0,0 +1,27 @@ +diff -urN libeXosip2-2.2.3.orig/src/Makefile.am libeXosip2-2.2.3/src/Makefile.am +--- libeXosip2-2.2.3.orig/src/Makefile.am 2005-10-07 14:44:38.000000000 +0200 ++++ libeXosip2-2.2.3/src/Makefile.am 2008-01-23 16:05:07.000000000 +0100 +@@ -27,7 +27,7 @@ + jpipe.c jpipe.h jauth.c \ + sdp_offans.c jpublish.c + +-libeXosip2_la_LDFLAGS = -L$(prefix)/lib -version-info $(LIBEXOSIP_SO_VERSION) ++libeXosip2_la_LDFLAGS = -version-info $(LIBEXOSIP_SO_VERSION) + libeXosip2_la_LIBADD = -losip2 @EXOSIP_LIB@ @PTHREAD_LIBS@ + +-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include -I$(includedir) ++INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include +diff -urN libeXosip2-2.2.3.orig/tools/Makefile.am libeXosip2-2.2.3/tools/Makefile.am +--- libeXosip2-2.2.3.orig/tools/Makefile.am 2005-07-24 02:11:43.000000000 +0200 ++++ libeXosip2-2.2.3/tools/Makefile.am 2008-01-23 16:11:07.000000000 +0100 +@@ -9,8 +9,8 @@ + + sip_reg_LDFLAGS = -O @EXOSIP_LIB@ @PTHREAD_LIBS@ @JOSUA_LIB@ + +-sip_reg_LDADD = -L$(prefix)/lib $(top_builddir)/src/libeXosip2.la -losip2 -losipparser2 ++sip_reg_LDADD = $(top_builddir)/src/libeXosip2.la -losip2 -losipparser2 + +-INCLUDES = -I$(prefix)/include -I$(top_srcdir) -I$(top_srcdir)/include -I$(includedir) ++INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include + + diff --git a/packages/libexosip2/libexosip2_2.2.3.bb b/packages/libexosip2/libexosip2_2.2.3.bb new file mode 100644 index 0000000000..5251d0e2e2 --- /dev/null +++ b/packages/libexosip2/libexosip2_2.2.3.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "High level Session Initiation Protocol (SIP) library" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "libosip2" +SRCNAME = "libeXosip2" +LEAD_SONAME = "libeXosip2" + +PR = "r0" +SRC_URI = "http://download.savannah.nongnu.org/releases/exosip/${SRCNAME}-${PV}.tar.gz \ + file://simplify-flags.patch;patch=1" +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit autotools pkgconfig +EXTRA_OECONF = "--disable-josua" + +do_stage() { + autotools_stage_all +} -- cgit v1.2.3 From 14d80f99d35b7f2f038c55e66e732fe280edf040 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Fri, 1 Feb 2008 10:41:47 +0000 Subject: libc-client: package University of Washington's mail protocol library --- packages/libc-client/.mtn2git_empty | 0 packages/libc-client/libc-client_2007.bb | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 packages/libc-client/.mtn2git_empty create mode 100644 packages/libc-client/libc-client_2007.bb diff --git a/packages/libc-client/.mtn2git_empty b/packages/libc-client/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libc-client/libc-client_2007.bb b/packages/libc-client/libc-client_2007.bb new file mode 100644 index 0000000000..87035afec4 --- /dev/null +++ b/packages/libc-client/libc-client_2007.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "UW c-client library for mail protocols" +SECTION = "devel" +PRIORITY = "optional" +LICENSE = "University of Washington's Free-Fork License" +DEPENDS = "libpam openssl" + +SRC_URI = "ftp://ftp.cac.washington.edu/imap/c-client.tar.Z" + +S = "${WORKDIR}/imap-2007" + +EXTRA_OEMAKE = "CC='${CC}'" + +HEADERS = "src/c-client/*.h src/osdep/unix/*.h c-client/auths.c c-client/linkage.c c-client/linkage.h c-client/osdep.h" + +do_compile() { + echo "SSLINCLUDE=${STAGING_INCDIR}/openssl SSLLIB=${STAGING_LIBDIR}" > ${S}/SPECIALS + oe_runmake lnp +} + +do_stage() { + install -d ${STAGING_INCDIR}/c-client + install ${HEADERS} ${STAGING_INCDIR}/c-client + install c-client/c-client.a ${STAGING_LIBDIR}/libc-client.a +} + -- cgit v1.2.3 From eb1a0024ec041857913cf8afa502bcd105ca9761 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Fri, 1 Feb 2008 10:48:37 +0000 Subject: lmsensors-apps_2.10.1.bb: fix build on non-x86 machines, update homepage --- packages/lm_sensors/lmsensors-apps_2.10.1.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/lm_sensors/lmsensors-apps_2.10.1.bb b/packages/lm_sensors/lmsensors-apps_2.10.1.bb index 6f89481f88..9d5a8af9fb 100644 --- a/packages/lm_sensors/lmsensors-apps_2.10.1.bb +++ b/packages/lm_sensors/lmsensors-apps_2.10.1.bb @@ -1,8 +1,8 @@ DESCRIPTION = "Hardware health monitoring applications" -HOMEPAGE = "http://secure.netroedge.com/~lm78/" +HOMEPAGE = "http://www.lm-sensors.org/" DEPENDS = "sysfsutils virtual/libiconv" LICENSE = "GPL" -PR = "r2" +PR = "r3" SRC_URI = "http://dl.lm-sensors.org/lm-sensors/releases/lm_sensors-${PV}.tar.gz \ file://prefix-fix.patch;patch=1 \ @@ -13,7 +13,7 @@ SRC_URI_append_uclibc = "file://iconv.patch;patch=1" S = "${WORKDIR}/lm_sensors-${PV}" do_compile() { - oe_runmake LINUX=${STAGING_KERNEL_DIR} EXLDFLAGS="${LDFLAGS}" user PROG_EXTRA=sensors + oe_runmake user LINUX=${STAGING_KERNEL_DIR} EXLDFLAGS="${LDFLAGS}" PROG_EXTRA=sensors MACHINE=${TARGET_ARCH} } do_install() { -- cgit v1.2.3 From e6a5f82f3296f3f6490e0560954bc37a6316e7c7 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Fri, 1 Feb 2008 11:10:31 +0000 Subject: ttf-dejavu: updated to 2.23 --- packages/ttf-fonts/ttf-dejavu_2.18.bb | 28 ---------------------------- packages/ttf-fonts/ttf-dejavu_2.23.bb | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 28 deletions(-) delete mode 100644 packages/ttf-fonts/ttf-dejavu_2.18.bb create mode 100644 packages/ttf-fonts/ttf-dejavu_2.23.bb diff --git a/packages/ttf-fonts/ttf-dejavu_2.18.bb b/packages/ttf-fonts/ttf-dejavu_2.18.bb deleted file mode 100644 index 6f05cef5d6..0000000000 --- a/packages/ttf-fonts/ttf-dejavu_2.18.bb +++ /dev/null @@ -1,28 +0,0 @@ -require ttf.inc - -DESCRIPTION = "DejaVu font - TTF Edition" -HOMEPAGE = "http://dejavu.sourceforge.net/wiki/" -LICENSE = "Bitstream Vera" -RDEPENDS = "ttf-dejavu-common" -RDEPENDS_ttf-dejavu-common = "" -PR = "r2" - -SRC_URI = "${SOURCEFORGE_MIRROR}/dejavu/dejavu-ttf-${PV}.tar.bz2 \ - file://30-dejavu-aliases.conf" - -S = "${WORKDIR}/dejavu-ttf-${PV}" - -do_install_append () { - install -d ${D}${sysconfdir}/fonts/conf.d/ - install -m 0644 ${WORKDIR}/30-dejavu-aliases.conf ${D}${sysconfdir}/fonts/conf.d/ -} - -PACKAGES = "${PN}-dbg ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed \ - ttf-dejavu-serif ttf-dejavu-serif-condensed ttf-dejavu-common" - -FILES_ttf-dejavu-sans = "${datadir}/fonts/truetype/DejaVuSans.ttf ${datadir}/fonts/truetype/DejaVuSans-*.ttf" -FILES_ttf-dejavu-sans-mono = "${datadir}/fonts/truetype/DejaVuSansMono*.ttf" -FILES_ttf-dejavu-sans-condensed = "${datadir}/fonts/truetype/DejaVuSansCondensed*.ttf" -FILES_ttf-dejavu-serif = "${datadir}/fonts/truetype/DejaVuSerif.ttf ${datadir}/fonts/truetype/DejaVuSerif-*.ttf" -FILES_ttf-dejavu-serif-condensed = "${datadir}/fonts/truetype/DejaVuSerifCondensed*.ttf" -FILES_ttf-dejavu-common = "${sysconfdir}" diff --git a/packages/ttf-fonts/ttf-dejavu_2.23.bb b/packages/ttf-fonts/ttf-dejavu_2.23.bb new file mode 100644 index 0000000000..c0655ec5f4 --- /dev/null +++ b/packages/ttf-fonts/ttf-dejavu_2.23.bb @@ -0,0 +1,27 @@ +require ttf.inc + +DESCRIPTION = "DejaVu font - TTF Edition" +HOMEPAGE = "http://dejavu.sourceforge.net/wiki/" +LICENSE = "Bitstream Vera" +RDEPENDS = "ttf-dejavu-common" +RDEPENDS_ttf-dejavu-common = "" + +SRC_URI = "${SOURCEFORGE_MIRROR}/dejavu/dejavu-fonts-ttf-${PV}.tar.bz2 \ + file://30-dejavu-aliases.conf" + +S = "${WORKDIR}/dejavu-fonts-ttf-${PV}/ttf" + +do_install_append () { + install -d ${D}${sysconfdir}/fonts/conf.d/ + install -m 0644 ${WORKDIR}/30-dejavu-aliases.conf ${D}${sysconfdir}/fonts/conf.d/ +} + +PACKAGES = "${PN}-dbg ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed \ + ttf-dejavu-serif ttf-dejavu-serif-condensed ttf-dejavu-common" + +FILES_ttf-dejavu-sans = "${datadir}/fonts/truetype/DejaVuSans.ttf ${datadir}/fonts/truetype/DejaVuSans-*.ttf" +FILES_ttf-dejavu-sans-mono = "${datadir}/fonts/truetype/DejaVuSansMono*.ttf" +FILES_ttf-dejavu-sans-condensed = "${datadir}/fonts/truetype/DejaVuSansCondensed*.ttf" +FILES_ttf-dejavu-serif = "${datadir}/fonts/truetype/DejaVuSerif.ttf ${datadir}/fonts/truetype/DejaVuSerif-*.ttf" +FILES_ttf-dejavu-serif-condensed = "${datadir}/fonts/truetype/DejaVuSerifCondensed*.ttf" +FILES_ttf-dejavu-common = "${sysconfdir}" -- cgit v1.2.3 From 7b244a6f48a5bdc5274414f192e196a23aef20c2 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Fri, 1 Feb 2008 14:14:26 +0000 Subject: strace 4.5.15: added missing patches (from Poky) --- packages/strace/strace-4.5.14/arm-eabi.patch | 65 +++++ packages/strace/strace-4.5.14/drop-ctl-proc.patch | 12 + packages/strace/strace-4.5.14/glibc-2.5.patch | 11 + packages/strace/strace-4.5.14/sh-arch-update.patch | 21 ++ .../strace/strace-4.5.14/sh-syscall-update.patch | 268 +++++++++++++++++++++ 5 files changed, 377 insertions(+) create mode 100644 packages/strace/strace-4.5.14/arm-eabi.patch create mode 100644 packages/strace/strace-4.5.14/drop-ctl-proc.patch create mode 100644 packages/strace/strace-4.5.14/glibc-2.5.patch create mode 100644 packages/strace/strace-4.5.14/sh-arch-update.patch create mode 100644 packages/strace/strace-4.5.14/sh-syscall-update.patch diff --git a/packages/strace/strace-4.5.14/arm-eabi.patch b/packages/strace/strace-4.5.14/arm-eabi.patch new file mode 100644 index 0000000000..53e27f8ce8 --- /dev/null +++ b/packages/strace/strace-4.5.14/arm-eabi.patch @@ -0,0 +1,65 @@ +2006-03-30 Daniel Jacobowitz + + * process.c (change_syscall): Add ARM support. + * syscall.c (get_scno): Handle ARM EABI. + +Index: strace/process.c +=================================================================== +--- strace.orig/process.c 2006-03-30 17:36:14.000000000 -0500 ++++ strace/process.c 2006-03-30 17:44:16.000000000 -0500 +@@ -694,6 +694,16 @@ int new; + 0x100000 | new) < 0) + return -1; + return 0; ++#elif defined(ARM) ++ /* Some kernels support this, some (pre-2.6.16 or so) don't. */ ++# ifndef PTRACE_SET_SYSCALL ++# define PTRACE_SET_SYSCALL 23 ++# endif ++ ++ if (ptrace (PTRACE_SET_SYSCALL, tcp->pid, 0, new) != 0) ++ return -1; ++ ++ return 0; + #else + #warning Do not know how to handle change_syscall for this architecture + #endif /* architecture */ +Index: strace/syscall.c +=================================================================== +--- strace.orig/syscall.c 2006-03-30 17:36:14.000000000 -0500 ++++ strace/syscall.c 2006-03-30 17:44:16.000000000 -0500 +@@ -1108,16 +1108,25 @@ struct tcb *tcp; + return 0; + } + +- if ((scno & 0x0ff00000) != 0x0f900000) { +- fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n", +- scno); +- return -1; +- } ++ /* Handle the EABI syscall convention. We do not ++ bother converting structures between the two ++ ABIs, but basic functionality should work even ++ if strace and the traced program have different ++ ABIs. */ ++ if (scno == 0xef000000) { ++ scno = regs.ARM_r7; ++ } else { ++ if ((scno & 0x0ff00000) != 0x0f900000) { ++ fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n", ++ scno); ++ return -1; ++ } + +- /* +- * Fixup the syscall number +- */ +- scno &= 0x000fffff; ++ /* ++ * Fixup the syscall number ++ */ ++ scno &= 0x000fffff; ++ } + } + + if (tcp->flags & TCB_INSYSCALL) { diff --git a/packages/strace/strace-4.5.14/drop-ctl-proc.patch b/packages/strace/strace-4.5.14/drop-ctl-proc.patch new file mode 100644 index 0000000000..468913774a --- /dev/null +++ b/packages/strace/strace-4.5.14/drop-ctl-proc.patch @@ -0,0 +1,12 @@ +Index: strace-4.5.14/system.c +=================================================================== +--- strace-4.5.14.orig/system.c 2006-10-01 13:02:08.000000000 +0200 ++++ strace-4.5.14/system.c 2006-10-01 13:02:27.000000000 +0200 +@@ -1578,7 +1578,6 @@ + { CTL_KERN, "CTL_KERN" }, + { CTL_VM, "CTL_VM" }, + { CTL_NET, "CTL_NET" }, +- { CTL_PROC, "CTL_PROC" }, + { CTL_FS, "CTL_FS" }, + { CTL_DEBUG, "CTL_DEBUG" }, + { CTL_DEV, "CTL_DEV" }, diff --git a/packages/strace/strace-4.5.14/glibc-2.5.patch b/packages/strace/strace-4.5.14/glibc-2.5.patch new file mode 100644 index 0000000000..3ee6b3de75 --- /dev/null +++ b/packages/strace/strace-4.5.14/glibc-2.5.patch @@ -0,0 +1,11 @@ +--- strace-4.5.14/strace.c~ 2006-10-14 14:54:54.000000000 +1000 ++++ strace-4.5.14/strace.c 2006-10-14 14:54:54.000000000 +1000 +@@ -2251,7 +2251,7 @@ + if (!cflag + && (qual_flags[WSTOPSIG(status)] & QUAL_SIGNAL)) { + unsigned long addr = 0, pc = 0; +-#ifdef PT_GETSIGINFO ++#if defined(PT_GETSIGINFO) && defined(IA64) + # define PSR_RI 41 + struct siginfo si; + unsigned long psr; diff --git a/packages/strace/strace-4.5.14/sh-arch-update.patch b/packages/strace/strace-4.5.14/sh-arch-update.patch new file mode 100644 index 0000000000..e40673a616 --- /dev/null +++ b/packages/strace/strace-4.5.14/sh-arch-update.patch @@ -0,0 +1,21 @@ +Strace doesn't know that sh3 and sh4 should be treated as sh and sh5 as +sh64. Originally this was solved by ac_cv_host in the site files, however +doing it in the site file breaks the glibc build, so teach strace about them +instead. + +--- strace-4.5.14/configure.ac 2006/05/11 07:12:05 1.1 ++++ strace-4.5.14/configure.ac 2006/05/11 07:15:42 +@@ -91,11 +91,11 @@ + arch=hppa + AC_DEFINE([HPPA], 1, [Define for the HPPA architecture.]) + ;; +-sh) ++sh|sh3*|sh4*) + arch=sh + AC_DEFINE([SH], 1, [Define for the SH architecture.]) + ;; +-sh64) ++sh64|sh5*) + arch=sh64 + AC_DEFINE([SH64], 1, [Define for the SH64 architecture.]) + ;; diff --git a/packages/strace/strace-4.5.14/sh-syscall-update.patch b/packages/strace/strace-4.5.14/sh-syscall-update.patch new file mode 100644 index 0000000000..15102934e7 --- /dev/null +++ b/packages/strace/strace-4.5.14/sh-syscall-update.patch @@ -0,0 +1,268 @@ +--- strace/linux/sh/syscallent.h 2006/07/03 04:32:27 1.1 ++++ strace/linux/sh/syscallent.h 2006/07/03 05:29:55 +@@ -46,7 +46,7 @@ + { 1, 0, sys_time, "time" }, /* 13 */ + { 3, TF, sys_mknod, "mknod" }, /* 14 */ + { 2, TF, sys_chmod, "chmod" }, /* 15 */ +- { 3, TF, sys_chown, "lchown" }, /* 16 */ ++ { 3, TF, sys_chown, "lchown" }, /* 16 */ + { 0, 0, sys_break, "break" }, /* 17 */ + { 2, TF, sys_oldstat, "oldstat" }, /* 18 */ + { 3, TD, sys_lseek, "lseek" }, /* 19 */ +@@ -229,109 +229,157 @@ + { 2, TF, sys_stat64, "stat64" }, /* 195 */ + { 2, TF, sys_lstat64, "lstat64" }, /* 196 */ + { 2, TD, sys_fstat64, "fstat64" }, /* 197 */ +-/*TODO*/{ 3, TF, printargs, "lchown32" }, /* 198 */ +-/*TODO*/{ 0, 0, printargs, "getuid32" }, /* 199 */ ++ { 3, TF, sys_chown, "lchown32" }, /* 198 */ ++ { 0, 0, sys_getuid, "getuid32" }, /* 199 */ + +- { 0, 0, printargs, "getgid32" }, /* 200 */ +- { 0, 0, printargs, "geteuid32" }, /* 201 */ +- { 0, 0, printargs, "getegid32" }, /* 202 */ +- { 2, 0, printargs, "setreuid32" }, /* 203 */ +- { 2, 0, printargs, "setregid32" }, /* 204 */ +- { 2, 0, sys_getgroups32, "getgroups32" }, /* 205 */ +- { 2, 0, sys_setgroups32, "setgroups32" }, /* 206 */ +- { 3, 0, printargs, "fchown32" }, /* 207 */ +- { 3, 0, printargs, "setresuid32" }, /* 208 */ +- { 3, 0, printargs, "getresuid32" }, /* 209 */ +- { 3, 0, printargs, "setresgid32" }, /* 210 */ +- { 3, 0, printargs, "getsetgid32" }, /* 211 */ +- { 3, TF, printargs, "chown32" }, /* 212 */ +- { 1, 0, printargs, "setuid32" }, /* 213 */ +- { 1, 0, printargs, "setgid32" }, /* 214 */ +- { 1, 0, printargs, "setfsuid32" }, /* 215 */ +- { 1, 0, printargs, "setfsgid32" }, /* 216 */ ++ { 0, 0, sys_getgid, "getgid32" }, /* 200 */ ++ { 0, 0, sys_geteuid, "geteuid32" }, /* 201 */ ++ { 0, 0, sys_getegid, "getegid32" }, /* 202 */ ++ { 2, 0, sys_setreuid, "setreuid32" }, /* 203 */ ++ { 2, 0, sys_setregid, "setregid32" }, /* 204 */ ++ { 2, 0, sys_getgroups, "getgroups32" }, /* 205 */ ++ { 2, 0, sys_setgroups, "setgroups32" }, /* 206 */ ++ { 3, 0, sys_fchown, "fchown32" }, /* 207 */ ++ { 3, 0, sys_setresuid, "setresuid32" }, /* 208 */ ++ { 3, 0, sys_getresuid, "getresuid32" }, /* 209 */ ++ { 3, 0, sys_setresgid, "setresgid32" }, /* 210 */ ++ { 3, 0, sys_getresgid, "getsetgid32" }, /* 211 */ ++ { 3, TF, sys_chown, "chown32" }, /* 212 */ ++ { 1, 0, sys_setuid, "setuid32" }, /* 213 */ ++ { 1, 0, sys_setgid, "setgid32" }, /* 214 */ ++ { 1, 0, sys_setfsuid, "setfsuid32" }, /* 215 */ ++ { 1, 0, sys_setfsgid, "setfsgid32" }, /* 216 */ + { 2, TF, sys_pivotroot, "pivot_root" }, /* 217 */ +- { 3, 0, printargs, "mincore" }, /* 218 */ ++ { 3, 0, sys_mincore, "mincore" }, /* 218 */ + { 3, 0, sys_madvise, "madvise" }, /* 219 */ +- { 4, 0, printargs, "getdents64" }, /* 220 */ ++ { 4, 0, sys_getdents64, "getdents64" }, /* 220 */ + { 3, TD, sys_fcntl, "fcntl64" }, /* 221 */ + { 4, 0, printargs, "SYS_222" }, /* 222 */ +- { 4, 0, printargs, "SYS_223" }, /* 223 */ +- { 4, 0, printargs, "SYS_224" }, /* 224 */ +- { 5, 0, printargs, "SYS_225" }, /* 225 */ +- { 5, 0, printargs, "SYS_226" }, /* 226 */ +- { 5, 0, printargs, "SYS_227" }, /* 227 */ +- { 5, 0, printargs, "SYS_228" }, /* 228 */ +- { 5, 0, printargs, "SYS_229" }, /* 229 */ +- +- { 8, 0, printargs, "socket_subcall"}, /* 230 */ +- { 3, TN, sys_socket, "socket" }, /* 231 */ +- { 3, TN, sys_bind, "bind" }, /* 232 */ +- { 3, TN, sys_connect, "connect" }, /* 233 */ +- { 2, TN, sys_listen, "listen" }, /* 234 */ +- { 3, TN, sys_accept, "accept" }, /* 235 */ +- { 3, TN, sys_getsockname, "getsockname" }, /* 236 */ +- { 3, TN, sys_getpeername, "getpeername" }, /* 237 */ +- { 4, TN, sys_socketpair, "socketpair" }, /* 238 */ +- { 4, TN, sys_send, "send" }, /* 239 */ +- { 4, TN, sys_recv, "recv" }, /* 240 */ +- { 6, TN, sys_sendto, "sendto" }, /* 241 */ +- { 6, TN, sys_recvfrom, "recvfrom" }, /* 242 */ +- { 2, TN, sys_shutdown, "shutdown" }, /* 243 */ +- { 5, TN, sys_setsockopt, "setsockopt" }, /* 244 */ +- { 5, TN, sys_getsockopt, "getsockopt" }, /* 245 */ +- { 5, TN, sys_sendmsg, "sendmsg" }, /* 246 */ +- { 5, TN, sys_recvmsg, "recvmsg" }, /* 247 */ +- { 5, 0, printargs, "SYS_248" }, /* 248 */ +- { 5, 0, printargs, "SYS_249" }, /* 249 */ +- +- { 4, 0, printargs, "ipc_subcall" }, /* 250 */ +- { 4, TI, sys_semop, "semop" }, /* 251 */ +- { 4, TI, sys_semget, "semget" }, /* 252 */ +- { 4, TI, sys_semctl, "semctl" }, /* 253 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 254 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 255 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 256 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 257 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 258 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 259 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 260 */ +- { 4, TI, sys_msgsnd, "msgsnd" }, /* 261 */ +- { 4, TI, sys_msgrcv, "msgrcv" }, /* 262 */ +- { 4, TI, sys_msgget, "msgget" }, /* 263 */ +- { 4, TI, sys_msgctl, "msgctl" }, /* 264 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 265 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 266 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 267 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 268 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 269 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 270 */ +- { 4, TI, sys_shmat, "shmat" }, /* 271 */ +- { 4, TI, sys_shmdt, "shmdt" }, /* 272 */ +- { 4, TI, sys_shmget, "shmget" }, /* 273 */ +- { 4, TI, sys_shmctl, "shmctl" }, /* 274 */ +- { 5, 0, printargs, "SYS_275" }, /* 275 */ +- { 5, 0, printargs, "SYS_276" }, /* 276 */ +- { 5, 0, printargs, "SYS_277" }, /* 277 */ +- { 5, 0, printargs, "SYS_278" }, /* 278 */ +- { 5, 0, printargs, "SYS_279" }, /* 279 */ +- +- { 8, 0, printargs, "socket_subcall"}, /* 280 */ +- { 3, TN, sys_socket, "socket" }, /* 281 */ +- { 3, TN, sys_bind, "bind" }, /* 282 */ +- { 3, TN, sys_connect, "connect" }, /* 283 */ +- { 2, TN, sys_listen, "listen" }, /* 284 */ +- { 3, TN, sys_accept, "accept" }, /* 285 */ +- { 3, TN, sys_getsockname, "getsockname" }, /* 286 */ +- { 3, TN, sys_getpeername, "getpeername" }, /* 287 */ +- { 4, TN, sys_socketpair, "socketpair" }, /* 288 */ +- { 4, TN, sys_send, "send" }, /* 289 */ +- { 4, TN, sys_recv, "recv" }, /* 290 */ +- { 6, TN, sys_sendto, "sendto" }, /* 291 */ +- { 6, TN, sys_recvfrom, "recvfrom" }, /* 292 */ +- { 2, TN, sys_shutdown, "shutdown" }, /* 293 */ +- { 5, TN, sys_setsockopt, "setsockopt" }, /* 294 */ +- { 5, TN, sys_getsockopt, "getsockopt" }, /* 295 */ +- { 5, TN, sys_sendmsg, "sendmsg" }, /* 296 */ +- { 5, TN, sys_recvmsg, "recvmsg" }, /* 297 */ ++ { 5, 0, printargs, "SYS_223" }, /* 223 */ ++ { 0, 0, printargs, "gettid" }, /* 224 */ ++ { 4, TD, sys_readahead, "readahead" }, /* 225 */ ++ { 5, TF, sys_setxattr, "setxattr" }, /* 226 */ ++ { 5, TF, sys_setxattr, "lsetxattr" }, /* 227 */ ++ { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 228 */ ++ { 4, TF, sys_getxattr, "getxattr" }, /* 229 */ ++ { 4, TF, sys_getxattr, "lgetxattr" }, /* 230 */ ++ { 4, 0, sys_fgetxattr, "fgetxattr" }, /* 231 */ ++ { 3, TF, sys_listxattr, "listxattr" }, /* 232 */ ++ { 3, TF, sys_listxattr, "llistxattr" }, /* 233 */ ++ { 3, 0, sys_flistxattr, "flistxattr" }, /* 234 */ ++ { 2, TF, sys_removexattr, "removexattr" }, /* 235 */ ++ { 2, TF, sys_removexattr, "lremovexattr" }, /* 236 */ ++ { 2, 0, sys_fremovexattr, "fremovexattr" }, /* 237 */ ++ { 2, TS, sys_kill, "tkill" }, /* 238 */ ++ { 4, TF, sys_sendfile64, "sendfile64" }, /* 239 */ ++ { 5, 0, sys_futex, "futex" }, /* 240 */ ++ { 3, 0, sys_sched_setaffinity, "sched_setaffinity" },/* 241 */ ++ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 242 */ ++ { 1, 0, printargs, "set_thread_area" }, /* 243 */ ++ { 1, 0, printargs, "get_thread_area" }, /* 244 */ ++ { 2, 0, sys_io_setup, "io_setup" }, /* 245 */ ++ { 1, 0, sys_io_destroy, "io_destroy" }, /* 246 */ ++ { 5, 0, sys_io_getevents, "io_getevents" }, /* 247 */ ++ { 3, 0, sys_io_submit, "io_submit" }, /* 248 */ ++ { 3, 0, sys_io_cancel, "io_cancel" }, /* 249 */ ++ { 5, 0, sys_fadvise64, "fadvise64" }, /* 250 */ ++ { 5, 0, printargs, "SYS_251" }, /* 251 */ ++ { 1, TP, sys_exit, "exit_group" }, /* 252 */ ++ { 4, 0, printargs, "lookup_dcookie"}, /* 253 */ ++ { 1, 0, sys_epoll_create, "epoll_create" }, /* 254 */ ++ { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 255 */ ++ { 4, 0, sys_epoll_wait, "epoll_wait" }, /* 256 */ ++ { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 257 */ ++ { 1, 0, printargs, "set_tid_address"}, /* 258 */ ++ { 3, 0, sys_timer_create, "timer_create" }, /* 259 */ ++ { 4, 0, sys_timer_settime, "timer_settime" }, /* 260 */ ++ { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 261 */ ++ { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 262 */ ++ { 1, 0, sys_timer_delete, "timer_delete" }, /* 263 */ ++ { 2, 0, sys_clock_settime, "clock_settime" }, /* 264 */ ++ { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 265 */ ++ { 2, 0, sys_clock_getres, "clock_getres" }, /* 266 */ ++ { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 267 */ ++ { 3, TF, sys_statfs64, "statfs64" }, /* 268 */ ++ { 3, 0, sys_fstatfs64, "fstatfs64" }, /* 269 */ ++ { 3, TS, sys_tgkill, "tgkill" }, /* 270 */ ++ { 2, TF, sys_utimes, "utimes" }, /* 271 */ ++ { 6, 0, sys_fadvise64_64, "fadvise64_64" }, /* 272 */ ++ { 5, 0, printargs, "vserver" }, /* 273 */ ++ { 5, 0, printargs, "mbind" }, /* 274 */ ++ { 5, 0, printargs, "get_mempolicy" }, /* 275 */ ++ { 5, 0, printargs, "set_mempolicy" }, /* 276 */ ++ { 4, 0, sys_mq_open, "mq_open" }, /* 277 */ ++ { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 278 */ ++ { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 279 */ ++ { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 280 */ ++ { 2, 0, sys_mq_notify, "mq_notify" }, /* 281 */ ++ { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 282 */ ++ { 5, 0, printargs, "sys_kexec_load"}, /* 283 */ ++ { 5, TP, sys_waitid, "waitid" }, /* 284 */ ++ { 5, 0, printargs, "add_key" }, /* 285 */ ++ { 5, 0, printargs, "request_key" }, /* 286 */ ++ { 5, 0, printargs, "keyctl" }, /* 287 */ ++ { 5, 0, printargs, "ioprio_set" }, /* 288 */ ++ { 5, 0, printargs, "ioprio_get" }, /* 289 */ ++ { 5, 0, printargs, "inotify_init" }, /* 290 */ ++ { 5, 0, printargs, "inotify_add_watch" }, /* 291 */ ++ { 5, 0, printargs, "inotify_rm_watch" }, /* 292 */ ++ { 5, 0, printargs, "SYS_293" }, /* 293 */ ++ { 5, 0, printargs, "SYS_294" }, /* 294 */ ++ { 5, 0, printargs, "SYS_295" }, /* 295 */ ++ { 5, 0, printargs, "SYS_296" }, /* 296 */ ++ { 5, 0, printargs, "SYS_297" }, /* 297 */ + { 5, 0, printargs, "SYS_298" }, /* 298 */ + { 5, 0, printargs, "SYS_299" }, /* 299 */ ++ ++#if SYS_socket_subcall != 300 ++ #error fix me ++#endif ++ { 8, 0, printargs, "socket_subcall"}, /* 300 */ ++ { 3, TN, sys_socket, "socket" }, /* 301 */ ++ { 3, TN, sys_bind, "bind" }, /* 302 */ ++ { 3, TN, sys_connect, "connect" }, /* 303 */ ++ { 2, TN, sys_listen, "listen" }, /* 304 */ ++ { 3, TN, sys_accept, "accept" }, /* 305 */ ++ { 3, TN, sys_getsockname, "getsockname" }, /* 306 */ ++ { 3, TN, sys_getpeername, "getpeername" }, /* 307 */ ++ { 4, TN, sys_socketpair, "socketpair" }, /* 308 */ ++ { 4, TN, sys_send, "send" }, /* 309 */ ++ { 4, TN, sys_recv, "recv" }, /* 310 */ ++ { 6, TN, sys_sendto, "sendto" }, /* 311 */ ++ { 6, TN, sys_recvfrom, "recvfrom" }, /* 312 */ ++ { 2, TN, sys_shutdown, "shutdown" }, /* 313 */ ++ { 5, TN, sys_setsockopt, "setsockopt" }, /* 314 */ ++ { 5, TN, sys_getsockopt, "getsockopt" }, /* 315 */ ++ { 5, TN, sys_sendmsg, "sendmsg" }, /* 316 */ ++ { 5, TN, sys_recvmsg, "recvmsg" }, /* 317 */ ++ ++#if SYS_ipc_subcall != 318 ++ #error fix me ++#endif ++ { 4, 0, printargs, "ipc_subcall" }, /* 318 */ ++ { 4, TI, sys_semop, "semop" }, /* 319 */ ++ { 4, TI, sys_semget, "semget" }, /* 320 */ ++ { 4, TI, sys_semctl, "semctl" }, /* 321 */ ++ { 5, TI, sys_semtimedop, "semtimedop" }, /* 322 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 323 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 324 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 325 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 326 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 327 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 328 */ ++ { 4, TI, sys_msgsnd, "msgsnd" }, /* 329 */ ++ { 4, TI, sys_msgrcv, "msgrcv" }, /* 330 */ ++ { 4, TI, sys_msgget, "msgget" }, /* 331 */ ++ { 4, TI, sys_msgctl, "msgctl" }, /* 332 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 333 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 334 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 335 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 336 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 337 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 338 */ ++ { 4, TI, sys_shmat, "shmat" }, /* 339 */ ++ { 4, TI, sys_shmdt, "shmdt" }, /* 340 */ ++ { 4, TI, sys_shmget, "shmget" }, /* 341 */ ++ { 4, TI, sys_shmctl, "shmctl" }, /* 342 */ -- cgit v1.2.3 From c04267425f5ed644b43c08f3346cd08f45045797 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Fri, 1 Feb 2008 15:30:30 +0000 Subject: strace-4.5.14 : add missing patches nicked from poky --- packages/strace/strace-4.5.14/arm-eabi.patch | 65 +++++ packages/strace/strace-4.5.14/drop-ctl-proc.patch | 12 + packages/strace/strace-4.5.14/glibc-2.5.patch | 11 + packages/strace/strace-4.5.14/sh-arch-update.patch | 21 ++ .../strace/strace-4.5.14/sh-syscall-update.patch | 268 +++++++++++++++++++++ 5 files changed, 377 insertions(+) create mode 100644 packages/strace/strace-4.5.14/arm-eabi.patch create mode 100644 packages/strace/strace-4.5.14/drop-ctl-proc.patch create mode 100644 packages/strace/strace-4.5.14/glibc-2.5.patch create mode 100644 packages/strace/strace-4.5.14/sh-arch-update.patch create mode 100644 packages/strace/strace-4.5.14/sh-syscall-update.patch diff --git a/packages/strace/strace-4.5.14/arm-eabi.patch b/packages/strace/strace-4.5.14/arm-eabi.patch new file mode 100644 index 0000000000..53e27f8ce8 --- /dev/null +++ b/packages/strace/strace-4.5.14/arm-eabi.patch @@ -0,0 +1,65 @@ +2006-03-30 Daniel Jacobowitz + + * process.c (change_syscall): Add ARM support. + * syscall.c (get_scno): Handle ARM EABI. + +Index: strace/process.c +=================================================================== +--- strace.orig/process.c 2006-03-30 17:36:14.000000000 -0500 ++++ strace/process.c 2006-03-30 17:44:16.000000000 -0500 +@@ -694,6 +694,16 @@ int new; + 0x100000 | new) < 0) + return -1; + return 0; ++#elif defined(ARM) ++ /* Some kernels support this, some (pre-2.6.16 or so) don't. */ ++# ifndef PTRACE_SET_SYSCALL ++# define PTRACE_SET_SYSCALL 23 ++# endif ++ ++ if (ptrace (PTRACE_SET_SYSCALL, tcp->pid, 0, new) != 0) ++ return -1; ++ ++ return 0; + #else + #warning Do not know how to handle change_syscall for this architecture + #endif /* architecture */ +Index: strace/syscall.c +=================================================================== +--- strace.orig/syscall.c 2006-03-30 17:36:14.000000000 -0500 ++++ strace/syscall.c 2006-03-30 17:44:16.000000000 -0500 +@@ -1108,16 +1108,25 @@ struct tcb *tcp; + return 0; + } + +- if ((scno & 0x0ff00000) != 0x0f900000) { +- fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n", +- scno); +- return -1; +- } ++ /* Handle the EABI syscall convention. We do not ++ bother converting structures between the two ++ ABIs, but basic functionality should work even ++ if strace and the traced program have different ++ ABIs. */ ++ if (scno == 0xef000000) { ++ scno = regs.ARM_r7; ++ } else { ++ if ((scno & 0x0ff00000) != 0x0f900000) { ++ fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n", ++ scno); ++ return -1; ++ } + +- /* +- * Fixup the syscall number +- */ +- scno &= 0x000fffff; ++ /* ++ * Fixup the syscall number ++ */ ++ scno &= 0x000fffff; ++ } + } + + if (tcp->flags & TCB_INSYSCALL) { diff --git a/packages/strace/strace-4.5.14/drop-ctl-proc.patch b/packages/strace/strace-4.5.14/drop-ctl-proc.patch new file mode 100644 index 0000000000..468913774a --- /dev/null +++ b/packages/strace/strace-4.5.14/drop-ctl-proc.patch @@ -0,0 +1,12 @@ +Index: strace-4.5.14/system.c +=================================================================== +--- strace-4.5.14.orig/system.c 2006-10-01 13:02:08.000000000 +0200 ++++ strace-4.5.14/system.c 2006-10-01 13:02:27.000000000 +0200 +@@ -1578,7 +1578,6 @@ + { CTL_KERN, "CTL_KERN" }, + { CTL_VM, "CTL_VM" }, + { CTL_NET, "CTL_NET" }, +- { CTL_PROC, "CTL_PROC" }, + { CTL_FS, "CTL_FS" }, + { CTL_DEBUG, "CTL_DEBUG" }, + { CTL_DEV, "CTL_DEV" }, diff --git a/packages/strace/strace-4.5.14/glibc-2.5.patch b/packages/strace/strace-4.5.14/glibc-2.5.patch new file mode 100644 index 0000000000..3ee6b3de75 --- /dev/null +++ b/packages/strace/strace-4.5.14/glibc-2.5.patch @@ -0,0 +1,11 @@ +--- strace-4.5.14/strace.c~ 2006-10-14 14:54:54.000000000 +1000 ++++ strace-4.5.14/strace.c 2006-10-14 14:54:54.000000000 +1000 +@@ -2251,7 +2251,7 @@ + if (!cflag + && (qual_flags[WSTOPSIG(status)] & QUAL_SIGNAL)) { + unsigned long addr = 0, pc = 0; +-#ifdef PT_GETSIGINFO ++#if defined(PT_GETSIGINFO) && defined(IA64) + # define PSR_RI 41 + struct siginfo si; + unsigned long psr; diff --git a/packages/strace/strace-4.5.14/sh-arch-update.patch b/packages/strace/strace-4.5.14/sh-arch-update.patch new file mode 100644 index 0000000000..e40673a616 --- /dev/null +++ b/packages/strace/strace-4.5.14/sh-arch-update.patch @@ -0,0 +1,21 @@ +Strace doesn't know that sh3 and sh4 should be treated as sh and sh5 as +sh64. Originally this was solved by ac_cv_host in the site files, however +doing it in the site file breaks the glibc build, so teach strace about them +instead. + +--- strace-4.5.14/configure.ac 2006/05/11 07:12:05 1.1 ++++ strace-4.5.14/configure.ac 2006/05/11 07:15:42 +@@ -91,11 +91,11 @@ + arch=hppa + AC_DEFINE([HPPA], 1, [Define for the HPPA architecture.]) + ;; +-sh) ++sh|sh3*|sh4*) + arch=sh + AC_DEFINE([SH], 1, [Define for the SH architecture.]) + ;; +-sh64) ++sh64|sh5*) + arch=sh64 + AC_DEFINE([SH64], 1, [Define for the SH64 architecture.]) + ;; diff --git a/packages/strace/strace-4.5.14/sh-syscall-update.patch b/packages/strace/strace-4.5.14/sh-syscall-update.patch new file mode 100644 index 0000000000..15102934e7 --- /dev/null +++ b/packages/strace/strace-4.5.14/sh-syscall-update.patch @@ -0,0 +1,268 @@ +--- strace/linux/sh/syscallent.h 2006/07/03 04:32:27 1.1 ++++ strace/linux/sh/syscallent.h 2006/07/03 05:29:55 +@@ -46,7 +46,7 @@ + { 1, 0, sys_time, "time" }, /* 13 */ + { 3, TF, sys_mknod, "mknod" }, /* 14 */ + { 2, TF, sys_chmod, "chmod" }, /* 15 */ +- { 3, TF, sys_chown, "lchown" }, /* 16 */ ++ { 3, TF, sys_chown, "lchown" }, /* 16 */ + { 0, 0, sys_break, "break" }, /* 17 */ + { 2, TF, sys_oldstat, "oldstat" }, /* 18 */ + { 3, TD, sys_lseek, "lseek" }, /* 19 */ +@@ -229,109 +229,157 @@ + { 2, TF, sys_stat64, "stat64" }, /* 195 */ + { 2, TF, sys_lstat64, "lstat64" }, /* 196 */ + { 2, TD, sys_fstat64, "fstat64" }, /* 197 */ +-/*TODO*/{ 3, TF, printargs, "lchown32" }, /* 198 */ +-/*TODO*/{ 0, 0, printargs, "getuid32" }, /* 199 */ ++ { 3, TF, sys_chown, "lchown32" }, /* 198 */ ++ { 0, 0, sys_getuid, "getuid32" }, /* 199 */ + +- { 0, 0, printargs, "getgid32" }, /* 200 */ +- { 0, 0, printargs, "geteuid32" }, /* 201 */ +- { 0, 0, printargs, "getegid32" }, /* 202 */ +- { 2, 0, printargs, "setreuid32" }, /* 203 */ +- { 2, 0, printargs, "setregid32" }, /* 204 */ +- { 2, 0, sys_getgroups32, "getgroups32" }, /* 205 */ +- { 2, 0, sys_setgroups32, "setgroups32" }, /* 206 */ +- { 3, 0, printargs, "fchown32" }, /* 207 */ +- { 3, 0, printargs, "setresuid32" }, /* 208 */ +- { 3, 0, printargs, "getresuid32" }, /* 209 */ +- { 3, 0, printargs, "setresgid32" }, /* 210 */ +- { 3, 0, printargs, "getsetgid32" }, /* 211 */ +- { 3, TF, printargs, "chown32" }, /* 212 */ +- { 1, 0, printargs, "setuid32" }, /* 213 */ +- { 1, 0, printargs, "setgid32" }, /* 214 */ +- { 1, 0, printargs, "setfsuid32" }, /* 215 */ +- { 1, 0, printargs, "setfsgid32" }, /* 216 */ ++ { 0, 0, sys_getgid, "getgid32" }, /* 200 */ ++ { 0, 0, sys_geteuid, "geteuid32" }, /* 201 */ ++ { 0, 0, sys_getegid, "getegid32" }, /* 202 */ ++ { 2, 0, sys_setreuid, "setreuid32" }, /* 203 */ ++ { 2, 0, sys_setregid, "setregid32" }, /* 204 */ ++ { 2, 0, sys_getgroups, "getgroups32" }, /* 205 */ ++ { 2, 0, sys_setgroups, "setgroups32" }, /* 206 */ ++ { 3, 0, sys_fchown, "fchown32" }, /* 207 */ ++ { 3, 0, sys_setresuid, "setresuid32" }, /* 208 */ ++ { 3, 0, sys_getresuid, "getresuid32" }, /* 209 */ ++ { 3, 0, sys_setresgid, "setresgid32" }, /* 210 */ ++ { 3, 0, sys_getresgid, "getsetgid32" }, /* 211 */ ++ { 3, TF, sys_chown, "chown32" }, /* 212 */ ++ { 1, 0, sys_setuid, "setuid32" }, /* 213 */ ++ { 1, 0, sys_setgid, "setgid32" }, /* 214 */ ++ { 1, 0, sys_setfsuid, "setfsuid32" }, /* 215 */ ++ { 1, 0, sys_setfsgid, "setfsgid32" }, /* 216 */ + { 2, TF, sys_pivotroot, "pivot_root" }, /* 217 */ +- { 3, 0, printargs, "mincore" }, /* 218 */ ++ { 3, 0, sys_mincore, "mincore" }, /* 218 */ + { 3, 0, sys_madvise, "madvise" }, /* 219 */ +- { 4, 0, printargs, "getdents64" }, /* 220 */ ++ { 4, 0, sys_getdents64, "getdents64" }, /* 220 */ + { 3, TD, sys_fcntl, "fcntl64" }, /* 221 */ + { 4, 0, printargs, "SYS_222" }, /* 222 */ +- { 4, 0, printargs, "SYS_223" }, /* 223 */ +- { 4, 0, printargs, "SYS_224" }, /* 224 */ +- { 5, 0, printargs, "SYS_225" }, /* 225 */ +- { 5, 0, printargs, "SYS_226" }, /* 226 */ +- { 5, 0, printargs, "SYS_227" }, /* 227 */ +- { 5, 0, printargs, "SYS_228" }, /* 228 */ +- { 5, 0, printargs, "SYS_229" }, /* 229 */ +- +- { 8, 0, printargs, "socket_subcall"}, /* 230 */ +- { 3, TN, sys_socket, "socket" }, /* 231 */ +- { 3, TN, sys_bind, "bind" }, /* 232 */ +- { 3, TN, sys_connect, "connect" }, /* 233 */ +- { 2, TN, sys_listen, "listen" }, /* 234 */ +- { 3, TN, sys_accept, "accept" }, /* 235 */ +- { 3, TN, sys_getsockname, "getsockname" }, /* 236 */ +- { 3, TN, sys_getpeername, "getpeername" }, /* 237 */ +- { 4, TN, sys_socketpair, "socketpair" }, /* 238 */ +- { 4, TN, sys_send, "send" }, /* 239 */ +- { 4, TN, sys_recv, "recv" }, /* 240 */ +- { 6, TN, sys_sendto, "sendto" }, /* 241 */ +- { 6, TN, sys_recvfrom, "recvfrom" }, /* 242 */ +- { 2, TN, sys_shutdown, "shutdown" }, /* 243 */ +- { 5, TN, sys_setsockopt, "setsockopt" }, /* 244 */ +- { 5, TN, sys_getsockopt, "getsockopt" }, /* 245 */ +- { 5, TN, sys_sendmsg, "sendmsg" }, /* 246 */ +- { 5, TN, sys_recvmsg, "recvmsg" }, /* 247 */ +- { 5, 0, printargs, "SYS_248" }, /* 248 */ +- { 5, 0, printargs, "SYS_249" }, /* 249 */ +- +- { 4, 0, printargs, "ipc_subcall" }, /* 250 */ +- { 4, TI, sys_semop, "semop" }, /* 251 */ +- { 4, TI, sys_semget, "semget" }, /* 252 */ +- { 4, TI, sys_semctl, "semctl" }, /* 253 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 254 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 255 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 256 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 257 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 258 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 259 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 260 */ +- { 4, TI, sys_msgsnd, "msgsnd" }, /* 261 */ +- { 4, TI, sys_msgrcv, "msgrcv" }, /* 262 */ +- { 4, TI, sys_msgget, "msgget" }, /* 263 */ +- { 4, TI, sys_msgctl, "msgctl" }, /* 264 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 265 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 266 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 267 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 268 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 269 */ +- { 4, 0, printargs, "ipc_subcall" }, /* 270 */ +- { 4, TI, sys_shmat, "shmat" }, /* 271 */ +- { 4, TI, sys_shmdt, "shmdt" }, /* 272 */ +- { 4, TI, sys_shmget, "shmget" }, /* 273 */ +- { 4, TI, sys_shmctl, "shmctl" }, /* 274 */ +- { 5, 0, printargs, "SYS_275" }, /* 275 */ +- { 5, 0, printargs, "SYS_276" }, /* 276 */ +- { 5, 0, printargs, "SYS_277" }, /* 277 */ +- { 5, 0, printargs, "SYS_278" }, /* 278 */ +- { 5, 0, printargs, "SYS_279" }, /* 279 */ +- +- { 8, 0, printargs, "socket_subcall"}, /* 280 */ +- { 3, TN, sys_socket, "socket" }, /* 281 */ +- { 3, TN, sys_bind, "bind" }, /* 282 */ +- { 3, TN, sys_connect, "connect" }, /* 283 */ +- { 2, TN, sys_listen, "listen" }, /* 284 */ +- { 3, TN, sys_accept, "accept" }, /* 285 */ +- { 3, TN, sys_getsockname, "getsockname" }, /* 286 */ +- { 3, TN, sys_getpeername, "getpeername" }, /* 287 */ +- { 4, TN, sys_socketpair, "socketpair" }, /* 288 */ +- { 4, TN, sys_send, "send" }, /* 289 */ +- { 4, TN, sys_recv, "recv" }, /* 290 */ +- { 6, TN, sys_sendto, "sendto" }, /* 291 */ +- { 6, TN, sys_recvfrom, "recvfrom" }, /* 292 */ +- { 2, TN, sys_shutdown, "shutdown" }, /* 293 */ +- { 5, TN, sys_setsockopt, "setsockopt" }, /* 294 */ +- { 5, TN, sys_getsockopt, "getsockopt" }, /* 295 */ +- { 5, TN, sys_sendmsg, "sendmsg" }, /* 296 */ +- { 5, TN, sys_recvmsg, "recvmsg" }, /* 297 */ ++ { 5, 0, printargs, "SYS_223" }, /* 223 */ ++ { 0, 0, printargs, "gettid" }, /* 224 */ ++ { 4, TD, sys_readahead, "readahead" }, /* 225 */ ++ { 5, TF, sys_setxattr, "setxattr" }, /* 226 */ ++ { 5, TF, sys_setxattr, "lsetxattr" }, /* 227 */ ++ { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 228 */ ++ { 4, TF, sys_getxattr, "getxattr" }, /* 229 */ ++ { 4, TF, sys_getxattr, "lgetxattr" }, /* 230 */ ++ { 4, 0, sys_fgetxattr, "fgetxattr" }, /* 231 */ ++ { 3, TF, sys_listxattr, "listxattr" }, /* 232 */ ++ { 3, TF, sys_listxattr, "llistxattr" }, /* 233 */ ++ { 3, 0, sys_flistxattr, "flistxattr" }, /* 234 */ ++ { 2, TF, sys_removexattr, "removexattr" }, /* 235 */ ++ { 2, TF, sys_removexattr, "lremovexattr" }, /* 236 */ ++ { 2, 0, sys_fremovexattr, "fremovexattr" }, /* 237 */ ++ { 2, TS, sys_kill, "tkill" }, /* 238 */ ++ { 4, TF, sys_sendfile64, "sendfile64" }, /* 239 */ ++ { 5, 0, sys_futex, "futex" }, /* 240 */ ++ { 3, 0, sys_sched_setaffinity, "sched_setaffinity" },/* 241 */ ++ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 242 */ ++ { 1, 0, printargs, "set_thread_area" }, /* 243 */ ++ { 1, 0, printargs, "get_thread_area" }, /* 244 */ ++ { 2, 0, sys_io_setup, "io_setup" }, /* 245 */ ++ { 1, 0, sys_io_destroy, "io_destroy" }, /* 246 */ ++ { 5, 0, sys_io_getevents, "io_getevents" }, /* 247 */ ++ { 3, 0, sys_io_submit, "io_submit" }, /* 248 */ ++ { 3, 0, sys_io_cancel, "io_cancel" }, /* 249 */ ++ { 5, 0, sys_fadvise64, "fadvise64" }, /* 250 */ ++ { 5, 0, printargs, "SYS_251" }, /* 251 */ ++ { 1, TP, sys_exit, "exit_group" }, /* 252 */ ++ { 4, 0, printargs, "lookup_dcookie"}, /* 253 */ ++ { 1, 0, sys_epoll_create, "epoll_create" }, /* 254 */ ++ { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 255 */ ++ { 4, 0, sys_epoll_wait, "epoll_wait" }, /* 256 */ ++ { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 257 */ ++ { 1, 0, printargs, "set_tid_address"}, /* 258 */ ++ { 3, 0, sys_timer_create, "timer_create" }, /* 259 */ ++ { 4, 0, sys_timer_settime, "timer_settime" }, /* 260 */ ++ { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 261 */ ++ { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 262 */ ++ { 1, 0, sys_timer_delete, "timer_delete" }, /* 263 */ ++ { 2, 0, sys_clock_settime, "clock_settime" }, /* 264 */ ++ { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 265 */ ++ { 2, 0, sys_clock_getres, "clock_getres" }, /* 266 */ ++ { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 267 */ ++ { 3, TF, sys_statfs64, "statfs64" }, /* 268 */ ++ { 3, 0, sys_fstatfs64, "fstatfs64" }, /* 269 */ ++ { 3, TS, sys_tgkill, "tgkill" }, /* 270 */ ++ { 2, TF, sys_utimes, "utimes" }, /* 271 */ ++ { 6, 0, sys_fadvise64_64, "fadvise64_64" }, /* 272 */ ++ { 5, 0, printargs, "vserver" }, /* 273 */ ++ { 5, 0, printargs, "mbind" }, /* 274 */ ++ { 5, 0, printargs, "get_mempolicy" }, /* 275 */ ++ { 5, 0, printargs, "set_mempolicy" }, /* 276 */ ++ { 4, 0, sys_mq_open, "mq_open" }, /* 277 */ ++ { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 278 */ ++ { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 279 */ ++ { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 280 */ ++ { 2, 0, sys_mq_notify, "mq_notify" }, /* 281 */ ++ { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 282 */ ++ { 5, 0, printargs, "sys_kexec_load"}, /* 283 */ ++ { 5, TP, sys_waitid, "waitid" }, /* 284 */ ++ { 5, 0, printargs, "add_key" }, /* 285 */ ++ { 5, 0, printargs, "request_key" }, /* 286 */ ++ { 5, 0, printargs, "keyctl" }, /* 287 */ ++ { 5, 0, printargs, "ioprio_set" }, /* 288 */ ++ { 5, 0, printargs, "ioprio_get" }, /* 289 */ ++ { 5, 0, printargs, "inotify_init" }, /* 290 */ ++ { 5, 0, printargs, "inotify_add_watch" }, /* 291 */ ++ { 5, 0, printargs, "inotify_rm_watch" }, /* 292 */ ++ { 5, 0, printargs, "SYS_293" }, /* 293 */ ++ { 5, 0, printargs, "SYS_294" }, /* 294 */ ++ { 5, 0, printargs, "SYS_295" }, /* 295 */ ++ { 5, 0, printargs, "SYS_296" }, /* 296 */ ++ { 5, 0, printargs, "SYS_297" }, /* 297 */ + { 5, 0, printargs, "SYS_298" }, /* 298 */ + { 5, 0, printargs, "SYS_299" }, /* 299 */ ++ ++#if SYS_socket_subcall != 300 ++ #error fix me ++#endif ++ { 8, 0, printargs, "socket_subcall"}, /* 300 */ ++ { 3, TN, sys_socket, "socket" }, /* 301 */ ++ { 3, TN, sys_bind, "bind" }, /* 302 */ ++ { 3, TN, sys_connect, "connect" }, /* 303 */ ++ { 2, TN, sys_listen, "listen" }, /* 304 */ ++ { 3, TN, sys_accept, "accept" }, /* 305 */ ++ { 3, TN, sys_getsockname, "getsockname" }, /* 306 */ ++ { 3, TN, sys_getpeername, "getpeername" }, /* 307 */ ++ { 4, TN, sys_socketpair, "socketpair" }, /* 308 */ ++ { 4, TN, sys_send, "send" }, /* 309 */ ++ { 4, TN, sys_recv, "recv" }, /* 310 */ ++ { 6, TN, sys_sendto, "sendto" }, /* 311 */ ++ { 6, TN, sys_recvfrom, "recvfrom" }, /* 312 */ ++ { 2, TN, sys_shutdown, "shutdown" }, /* 313 */ ++ { 5, TN, sys_setsockopt, "setsockopt" }, /* 314 */ ++ { 5, TN, sys_getsockopt, "getsockopt" }, /* 315 */ ++ { 5, TN, sys_sendmsg, "sendmsg" }, /* 316 */ ++ { 5, TN, sys_recvmsg, "recvmsg" }, /* 317 */ ++ ++#if SYS_ipc_subcall != 318 ++ #error fix me ++#endif ++ { 4, 0, printargs, "ipc_subcall" }, /* 318 */ ++ { 4, TI, sys_semop, "semop" }, /* 319 */ ++ { 4, TI, sys_semget, "semget" }, /* 320 */ ++ { 4, TI, sys_semctl, "semctl" }, /* 321 */ ++ { 5, TI, sys_semtimedop, "semtimedop" }, /* 322 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 323 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 324 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 325 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 326 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 327 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 328 */ ++ { 4, TI, sys_msgsnd, "msgsnd" }, /* 329 */ ++ { 4, TI, sys_msgrcv, "msgrcv" }, /* 330 */ ++ { 4, TI, sys_msgget, "msgget" }, /* 331 */ ++ { 4, TI, sys_msgctl, "msgctl" }, /* 332 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 333 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 334 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 335 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 336 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 337 */ ++ { 4, 0, printargs, "ipc_subcall" }, /* 338 */ ++ { 4, TI, sys_shmat, "shmat" }, /* 339 */ ++ { 4, TI, sys_shmdt, "shmdt" }, /* 340 */ ++ { 4, TI, sys_shmget, "shmget" }, /* 341 */ ++ { 4, TI, sys_shmctl, "shmctl" }, /* 342 */ -- cgit v1.2.3 From eef028138383abf4efee1fcd53149a341445717b Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Fri, 1 Feb 2008 15:32:43 +0000 Subject: disapproval of revision 'c1ca81bdb586cb1c19068b48f512fa424ce13b9f' --- packages/strace/strace-4.5.14/arm-eabi.patch | 65 ----- packages/strace/strace-4.5.14/drop-ctl-proc.patch | 12 - packages/strace/strace-4.5.14/glibc-2.5.patch | 11 - packages/strace/strace-4.5.14/sh-arch-update.patch | 21 -- .../strace/strace-4.5.14/sh-syscall-update.patch | 268 --------------------- 5 files changed, 377 deletions(-) delete mode 100644 packages/strace/strace-4.5.14/arm-eabi.patch delete mode 100644 packages/strace/strace-4.5.14/drop-ctl-proc.patch delete mode 100644 packages/strace/strace-4.5.14/glibc-2.5.patch delete mode 100644 packages/strace/strace-4.5.14/sh-arch-update.patch delete mode 100644 packages/strace/strace-4.5.14/sh-syscall-update.patch diff --git a/packages/strace/strace-4.5.14/arm-eabi.patch b/packages/strace/strace-4.5.14/arm-eabi.patch deleted file mode 100644 index 53e27f8ce8..0000000000 --- a/packages/strace/strace-4.5.14/arm-eabi.patch +++ /dev/null @@ -1,65 +0,0 @@ -2006-03-30 Daniel Jacobowitz - - * process.c (change_syscall): Add ARM support. - * syscall.c (get_scno): Handle ARM EABI. - -Index: strace/process.c -=================================================================== ---- strace.orig/process.c 2006-03-30 17:36:14.000000000 -0500 -+++ strace/process.c 2006-03-30 17:44:16.000000000 -0500 -@@ -694,6 +694,16 @@ int new; - 0x100000 | new) < 0) - return -1; - return 0; -+#elif defined(ARM) -+ /* Some kernels support this, some (pre-2.6.16 or so) don't. */ -+# ifndef PTRACE_SET_SYSCALL -+# define PTRACE_SET_SYSCALL 23 -+# endif -+ -+ if (ptrace (PTRACE_SET_SYSCALL, tcp->pid, 0, new) != 0) -+ return -1; -+ -+ return 0; - #else - #warning Do not know how to handle change_syscall for this architecture - #endif /* architecture */ -Index: strace/syscall.c -=================================================================== ---- strace.orig/syscall.c 2006-03-30 17:36:14.000000000 -0500 -+++ strace/syscall.c 2006-03-30 17:44:16.000000000 -0500 -@@ -1108,16 +1108,25 @@ struct tcb *tcp; - return 0; - } - -- if ((scno & 0x0ff00000) != 0x0f900000) { -- fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n", -- scno); -- return -1; -- } -+ /* Handle the EABI syscall convention. We do not -+ bother converting structures between the two -+ ABIs, but basic functionality should work even -+ if strace and the traced program have different -+ ABIs. */ -+ if (scno == 0xef000000) { -+ scno = regs.ARM_r7; -+ } else { -+ if ((scno & 0x0ff00000) != 0x0f900000) { -+ fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n", -+ scno); -+ return -1; -+ } - -- /* -- * Fixup the syscall number -- */ -- scno &= 0x000fffff; -+ /* -+ * Fixup the syscall number -+ */ -+ scno &= 0x000fffff; -+ } - } - - if (tcp->flags & TCB_INSYSCALL) { diff --git a/packages/strace/strace-4.5.14/drop-ctl-proc.patch b/packages/strace/strace-4.5.14/drop-ctl-proc.patch deleted file mode 100644 index 468913774a..0000000000 --- a/packages/strace/strace-4.5.14/drop-ctl-proc.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: strace-4.5.14/system.c -=================================================================== ---- strace-4.5.14.orig/system.c 2006-10-01 13:02:08.000000000 +0200 -+++ strace-4.5.14/system.c 2006-10-01 13:02:27.000000000 +0200 -@@ -1578,7 +1578,6 @@ - { CTL_KERN, "CTL_KERN" }, - { CTL_VM, "CTL_VM" }, - { CTL_NET, "CTL_NET" }, -- { CTL_PROC, "CTL_PROC" }, - { CTL_FS, "CTL_FS" }, - { CTL_DEBUG, "CTL_DEBUG" }, - { CTL_DEV, "CTL_DEV" }, diff --git a/packages/strace/strace-4.5.14/glibc-2.5.patch b/packages/strace/strace-4.5.14/glibc-2.5.patch deleted file mode 100644 index 3ee6b3de75..0000000000 --- a/packages/strace/strace-4.5.14/glibc-2.5.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- strace-4.5.14/strace.c~ 2006-10-14 14:54:54.000000000 +1000 -+++ strace-4.5.14/strace.c 2006-10-14 14:54:54.000000000 +1000 -@@ -2251,7 +2251,7 @@ - if (!cflag - && (qual_flags[WSTOPSIG(status)] & QUAL_SIGNAL)) { - unsigned long addr = 0, pc = 0; --#ifdef PT_GETSIGINFO -+#if defined(PT_GETSIGINFO) && defined(IA64) - # define PSR_RI 41 - struct siginfo si; - unsigned long psr; diff --git a/packages/strace/strace-4.5.14/sh-arch-update.patch b/packages/strace/strace-4.5.14/sh-arch-update.patch deleted file mode 100644 index e40673a616..0000000000 --- a/packages/strace/strace-4.5.14/sh-arch-update.patch +++ /dev/null @@ -1,21 +0,0 @@ -Strace doesn't know that sh3 and sh4 should be treated as sh and sh5 as -sh64. Originally this was solved by ac_cv_host in the site files, however -doing it in the site file breaks the glibc build, so teach strace about them -instead. - ---- strace-4.5.14/configure.ac 2006/05/11 07:12:05 1.1 -+++ strace-4.5.14/configure.ac 2006/05/11 07:15:42 -@@ -91,11 +91,11 @@ - arch=hppa - AC_DEFINE([HPPA], 1, [Define for the HPPA architecture.]) - ;; --sh) -+sh|sh3*|sh4*) - arch=sh - AC_DEFINE([SH], 1, [Define for the SH architecture.]) - ;; --sh64) -+sh64|sh5*) - arch=sh64 - AC_DEFINE([SH64], 1, [Define for the SH64 architecture.]) - ;; diff --git a/packages/strace/strace-4.5.14/sh-syscall-update.patch b/packages/strace/strace-4.5.14/sh-syscall-update.patch deleted file mode 100644 index 15102934e7..0000000000 --- a/packages/strace/strace-4.5.14/sh-syscall-update.patch +++ /dev/null @@ -1,268 +0,0 @@ ---- strace/linux/sh/syscallent.h 2006/07/03 04:32:27 1.1 -+++ strace/linux/sh/syscallent.h 2006/07/03 05:29:55 -@@ -46,7 +46,7 @@ - { 1, 0, sys_time, "time" }, /* 13 */ - { 3, TF, sys_mknod, "mknod" }, /* 14 */ - { 2, TF, sys_chmod, "chmod" }, /* 15 */ -- { 3, TF, sys_chown, "lchown" }, /* 16 */ -+ { 3, TF, sys_chown, "lchown" }, /* 16 */ - { 0, 0, sys_break, "break" }, /* 17 */ - { 2, TF, sys_oldstat, "oldstat" }, /* 18 */ - { 3, TD, sys_lseek, "lseek" }, /* 19 */ -@@ -229,109 +229,157 @@ - { 2, TF, sys_stat64, "stat64" }, /* 195 */ - { 2, TF, sys_lstat64, "lstat64" }, /* 196 */ - { 2, TD, sys_fstat64, "fstat64" }, /* 197 */ --/*TODO*/{ 3, TF, printargs, "lchown32" }, /* 198 */ --/*TODO*/{ 0, 0, printargs, "getuid32" }, /* 199 */ -+ { 3, TF, sys_chown, "lchown32" }, /* 198 */ -+ { 0, 0, sys_getuid, "getuid32" }, /* 199 */ - -- { 0, 0, printargs, "getgid32" }, /* 200 */ -- { 0, 0, printargs, "geteuid32" }, /* 201 */ -- { 0, 0, printargs, "getegid32" }, /* 202 */ -- { 2, 0, printargs, "setreuid32" }, /* 203 */ -- { 2, 0, printargs, "setregid32" }, /* 204 */ -- { 2, 0, sys_getgroups32, "getgroups32" }, /* 205 */ -- { 2, 0, sys_setgroups32, "setgroups32" }, /* 206 */ -- { 3, 0, printargs, "fchown32" }, /* 207 */ -- { 3, 0, printargs, "setresuid32" }, /* 208 */ -- { 3, 0, printargs, "getresuid32" }, /* 209 */ -- { 3, 0, printargs, "setresgid32" }, /* 210 */ -- { 3, 0, printargs, "getsetgid32" }, /* 211 */ -- { 3, TF, printargs, "chown32" }, /* 212 */ -- { 1, 0, printargs, "setuid32" }, /* 213 */ -- { 1, 0, printargs, "setgid32" }, /* 214 */ -- { 1, 0, printargs, "setfsuid32" }, /* 215 */ -- { 1, 0, printargs, "setfsgid32" }, /* 216 */ -+ { 0, 0, sys_getgid, "getgid32" }, /* 200 */ -+ { 0, 0, sys_geteuid, "geteuid32" }, /* 201 */ -+ { 0, 0, sys_getegid, "getegid32" }, /* 202 */ -+ { 2, 0, sys_setreuid, "setreuid32" }, /* 203 */ -+ { 2, 0, sys_setregid, "setregid32" }, /* 204 */ -+ { 2, 0, sys_getgroups, "getgroups32" }, /* 205 */ -+ { 2, 0, sys_setgroups, "setgroups32" }, /* 206 */ -+ { 3, 0, sys_fchown, "fchown32" }, /* 207 */ -+ { 3, 0, sys_setresuid, "setresuid32" }, /* 208 */ -+ { 3, 0, sys_getresuid, "getresuid32" }, /* 209 */ -+ { 3, 0, sys_setresgid, "setresgid32" }, /* 210 */ -+ { 3, 0, sys_getresgid, "getsetgid32" }, /* 211 */ -+ { 3, TF, sys_chown, "chown32" }, /* 212 */ -+ { 1, 0, sys_setuid, "setuid32" }, /* 213 */ -+ { 1, 0, sys_setgid, "setgid32" }, /* 214 */ -+ { 1, 0, sys_setfsuid, "setfsuid32" }, /* 215 */ -+ { 1, 0, sys_setfsgid, "setfsgid32" }, /* 216 */ - { 2, TF, sys_pivotroot, "pivot_root" }, /* 217 */ -- { 3, 0, printargs, "mincore" }, /* 218 */ -+ { 3, 0, sys_mincore, "mincore" }, /* 218 */ - { 3, 0, sys_madvise, "madvise" }, /* 219 */ -- { 4, 0, printargs, "getdents64" }, /* 220 */ -+ { 4, 0, sys_getdents64, "getdents64" }, /* 220 */ - { 3, TD, sys_fcntl, "fcntl64" }, /* 221 */ - { 4, 0, printargs, "SYS_222" }, /* 222 */ -- { 4, 0, printargs, "SYS_223" }, /* 223 */ -- { 4, 0, printargs, "SYS_224" }, /* 224 */ -- { 5, 0, printargs, "SYS_225" }, /* 225 */ -- { 5, 0, printargs, "SYS_226" }, /* 226 */ -- { 5, 0, printargs, "SYS_227" }, /* 227 */ -- { 5, 0, printargs, "SYS_228" }, /* 228 */ -- { 5, 0, printargs, "SYS_229" }, /* 229 */ -- -- { 8, 0, printargs, "socket_subcall"}, /* 230 */ -- { 3, TN, sys_socket, "socket" }, /* 231 */ -- { 3, TN, sys_bind, "bind" }, /* 232 */ -- { 3, TN, sys_connect, "connect" }, /* 233 */ -- { 2, TN, sys_listen, "listen" }, /* 234 */ -- { 3, TN, sys_accept, "accept" }, /* 235 */ -- { 3, TN, sys_getsockname, "getsockname" }, /* 236 */ -- { 3, TN, sys_getpeername, "getpeername" }, /* 237 */ -- { 4, TN, sys_socketpair, "socketpair" }, /* 238 */ -- { 4, TN, sys_send, "send" }, /* 239 */ -- { 4, TN, sys_recv, "recv" }, /* 240 */ -- { 6, TN, sys_sendto, "sendto" }, /* 241 */ -- { 6, TN, sys_recvfrom, "recvfrom" }, /* 242 */ -- { 2, TN, sys_shutdown, "shutdown" }, /* 243 */ -- { 5, TN, sys_setsockopt, "setsockopt" }, /* 244 */ -- { 5, TN, sys_getsockopt, "getsockopt" }, /* 245 */ -- { 5, TN, sys_sendmsg, "sendmsg" }, /* 246 */ -- { 5, TN, sys_recvmsg, "recvmsg" }, /* 247 */ -- { 5, 0, printargs, "SYS_248" }, /* 248 */ -- { 5, 0, printargs, "SYS_249" }, /* 249 */ -- -- { 4, 0, printargs, "ipc_subcall" }, /* 250 */ -- { 4, TI, sys_semop, "semop" }, /* 251 */ -- { 4, TI, sys_semget, "semget" }, /* 252 */ -- { 4, TI, sys_semctl, "semctl" }, /* 253 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 254 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 255 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 256 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 257 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 258 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 259 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 260 */ -- { 4, TI, sys_msgsnd, "msgsnd" }, /* 261 */ -- { 4, TI, sys_msgrcv, "msgrcv" }, /* 262 */ -- { 4, TI, sys_msgget, "msgget" }, /* 263 */ -- { 4, TI, sys_msgctl, "msgctl" }, /* 264 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 265 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 266 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 267 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 268 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 269 */ -- { 4, 0, printargs, "ipc_subcall" }, /* 270 */ -- { 4, TI, sys_shmat, "shmat" }, /* 271 */ -- { 4, TI, sys_shmdt, "shmdt" }, /* 272 */ -- { 4, TI, sys_shmget, "shmget" }, /* 273 */ -- { 4, TI, sys_shmctl, "shmctl" }, /* 274 */ -- { 5, 0, printargs, "SYS_275" }, /* 275 */ -- { 5, 0, printargs, "SYS_276" }, /* 276 */ -- { 5, 0, printargs, "SYS_277" }, /* 277 */ -- { 5, 0, printargs, "SYS_278" }, /* 278 */ -- { 5, 0, printargs, "SYS_279" }, /* 279 */ -- -- { 8, 0, printargs, "socket_subcall"}, /* 280 */ -- { 3, TN, sys_socket, "socket" }, /* 281 */ -- { 3, TN, sys_bind, "bind" }, /* 282 */ -- { 3, TN, sys_connect, "connect" }, /* 283 */ -- { 2, TN, sys_listen, "listen" }, /* 284 */ -- { 3, TN, sys_accept, "accept" }, /* 285 */ -- { 3, TN, sys_getsockname, "getsockname" }, /* 286 */ -- { 3, TN, sys_getpeername, "getpeername" }, /* 287 */ -- { 4, TN, sys_socketpair, "socketpair" }, /* 288 */ -- { 4, TN, sys_send, "send" }, /* 289 */ -- { 4, TN, sys_recv, "recv" }, /* 290 */ -- { 6, TN, sys_sendto, "sendto" }, /* 291 */ -- { 6, TN, sys_recvfrom, "recvfrom" }, /* 292 */ -- { 2, TN, sys_shutdown, "shutdown" }, /* 293 */ -- { 5, TN, sys_setsockopt, "setsockopt" }, /* 294 */ -- { 5, TN, sys_getsockopt, "getsockopt" }, /* 295 */ -- { 5, TN, sys_sendmsg, "sendmsg" }, /* 296 */ -- { 5, TN, sys_recvmsg, "recvmsg" }, /* 297 */ -+ { 5, 0, printargs, "SYS_223" }, /* 223 */ -+ { 0, 0, printargs, "gettid" }, /* 224 */ -+ { 4, TD, sys_readahead, "readahead" }, /* 225 */ -+ { 5, TF, sys_setxattr, "setxattr" }, /* 226 */ -+ { 5, TF, sys_setxattr, "lsetxattr" }, /* 227 */ -+ { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 228 */ -+ { 4, TF, sys_getxattr, "getxattr" }, /* 229 */ -+ { 4, TF, sys_getxattr, "lgetxattr" }, /* 230 */ -+ { 4, 0, sys_fgetxattr, "fgetxattr" }, /* 231 */ -+ { 3, TF, sys_listxattr, "listxattr" }, /* 232 */ -+ { 3, TF, sys_listxattr, "llistxattr" }, /* 233 */ -+ { 3, 0, sys_flistxattr, "flistxattr" }, /* 234 */ -+ { 2, TF, sys_removexattr, "removexattr" }, /* 235 */ -+ { 2, TF, sys_removexattr, "lremovexattr" }, /* 236 */ -+ { 2, 0, sys_fremovexattr, "fremovexattr" }, /* 237 */ -+ { 2, TS, sys_kill, "tkill" }, /* 238 */ -+ { 4, TF, sys_sendfile64, "sendfile64" }, /* 239 */ -+ { 5, 0, sys_futex, "futex" }, /* 240 */ -+ { 3, 0, sys_sched_setaffinity, "sched_setaffinity" },/* 241 */ -+ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 242 */ -+ { 1, 0, printargs, "set_thread_area" }, /* 243 */ -+ { 1, 0, printargs, "get_thread_area" }, /* 244 */ -+ { 2, 0, sys_io_setup, "io_setup" }, /* 245 */ -+ { 1, 0, sys_io_destroy, "io_destroy" }, /* 246 */ -+ { 5, 0, sys_io_getevents, "io_getevents" }, /* 247 */ -+ { 3, 0, sys_io_submit, "io_submit" }, /* 248 */ -+ { 3, 0, sys_io_cancel, "io_cancel" }, /* 249 */ -+ { 5, 0, sys_fadvise64, "fadvise64" }, /* 250 */ -+ { 5, 0, printargs, "SYS_251" }, /* 251 */ -+ { 1, TP, sys_exit, "exit_group" }, /* 252 */ -+ { 4, 0, printargs, "lookup_dcookie"}, /* 253 */ -+ { 1, 0, sys_epoll_create, "epoll_create" }, /* 254 */ -+ { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 255 */ -+ { 4, 0, sys_epoll_wait, "epoll_wait" }, /* 256 */ -+ { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 257 */ -+ { 1, 0, printargs, "set_tid_address"}, /* 258 */ -+ { 3, 0, sys_timer_create, "timer_create" }, /* 259 */ -+ { 4, 0, sys_timer_settime, "timer_settime" }, /* 260 */ -+ { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 261 */ -+ { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 262 */ -+ { 1, 0, sys_timer_delete, "timer_delete" }, /* 263 */ -+ { 2, 0, sys_clock_settime, "clock_settime" }, /* 264 */ -+ { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 265 */ -+ { 2, 0, sys_clock_getres, "clock_getres" }, /* 266 */ -+ { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 267 */ -+ { 3, TF, sys_statfs64, "statfs64" }, /* 268 */ -+ { 3, 0, sys_fstatfs64, "fstatfs64" }, /* 269 */ -+ { 3, TS, sys_tgkill, "tgkill" }, /* 270 */ -+ { 2, TF, sys_utimes, "utimes" }, /* 271 */ -+ { 6, 0, sys_fadvise64_64, "fadvise64_64" }, /* 272 */ -+ { 5, 0, printargs, "vserver" }, /* 273 */ -+ { 5, 0, printargs, "mbind" }, /* 274 */ -+ { 5, 0, printargs, "get_mempolicy" }, /* 275 */ -+ { 5, 0, printargs, "set_mempolicy" }, /* 276 */ -+ { 4, 0, sys_mq_open, "mq_open" }, /* 277 */ -+ { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 278 */ -+ { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 279 */ -+ { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 280 */ -+ { 2, 0, sys_mq_notify, "mq_notify" }, /* 281 */ -+ { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 282 */ -+ { 5, 0, printargs, "sys_kexec_load"}, /* 283 */ -+ { 5, TP, sys_waitid, "waitid" }, /* 284 */ -+ { 5, 0, printargs, "add_key" }, /* 285 */ -+ { 5, 0, printargs, "request_key" }, /* 286 */ -+ { 5, 0, printargs, "keyctl" }, /* 287 */ -+ { 5, 0, printargs, "ioprio_set" }, /* 288 */ -+ { 5, 0, printargs, "ioprio_get" }, /* 289 */ -+ { 5, 0, printargs, "inotify_init" }, /* 290 */ -+ { 5, 0, printargs, "inotify_add_watch" }, /* 291 */ -+ { 5, 0, printargs, "inotify_rm_watch" }, /* 292 */ -+ { 5, 0, printargs, "SYS_293" }, /* 293 */ -+ { 5, 0, printargs, "SYS_294" }, /* 294 */ -+ { 5, 0, printargs, "SYS_295" }, /* 295 */ -+ { 5, 0, printargs, "SYS_296" }, /* 296 */ -+ { 5, 0, printargs, "SYS_297" }, /* 297 */ - { 5, 0, printargs, "SYS_298" }, /* 298 */ - { 5, 0, printargs, "SYS_299" }, /* 299 */ -+ -+#if SYS_socket_subcall != 300 -+ #error fix me -+#endif -+ { 8, 0, printargs, "socket_subcall"}, /* 300 */ -+ { 3, TN, sys_socket, "socket" }, /* 301 */ -+ { 3, TN, sys_bind, "bind" }, /* 302 */ -+ { 3, TN, sys_connect, "connect" }, /* 303 */ -+ { 2, TN, sys_listen, "listen" }, /* 304 */ -+ { 3, TN, sys_accept, "accept" }, /* 305 */ -+ { 3, TN, sys_getsockname, "getsockname" }, /* 306 */ -+ { 3, TN, sys_getpeername, "getpeername" }, /* 307 */ -+ { 4, TN, sys_socketpair, "socketpair" }, /* 308 */ -+ { 4, TN, sys_send, "send" }, /* 309 */ -+ { 4, TN, sys_recv, "recv" }, /* 310 */ -+ { 6, TN, sys_sendto, "sendto" }, /* 311 */ -+ { 6, TN, sys_recvfrom, "recvfrom" }, /* 312 */ -+ { 2, TN, sys_shutdown, "shutdown" }, /* 313 */ -+ { 5, TN, sys_setsockopt, "setsockopt" }, /* 314 */ -+ { 5, TN, sys_getsockopt, "getsockopt" }, /* 315 */ -+ { 5, TN, sys_sendmsg, "sendmsg" }, /* 316 */ -+ { 5, TN, sys_recvmsg, "recvmsg" }, /* 317 */ -+ -+#if SYS_ipc_subcall != 318 -+ #error fix me -+#endif -+ { 4, 0, printargs, "ipc_subcall" }, /* 318 */ -+ { 4, TI, sys_semop, "semop" }, /* 319 */ -+ { 4, TI, sys_semget, "semget" }, /* 320 */ -+ { 4, TI, sys_semctl, "semctl" }, /* 321 */ -+ { 5, TI, sys_semtimedop, "semtimedop" }, /* 322 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 323 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 324 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 325 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 326 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 327 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 328 */ -+ { 4, TI, sys_msgsnd, "msgsnd" }, /* 329 */ -+ { 4, TI, sys_msgrcv, "msgrcv" }, /* 330 */ -+ { 4, TI, sys_msgget, "msgget" }, /* 331 */ -+ { 4, TI, sys_msgctl, "msgctl" }, /* 332 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 333 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 334 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 335 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 336 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 337 */ -+ { 4, 0, printargs, "ipc_subcall" }, /* 338 */ -+ { 4, TI, sys_shmat, "shmat" }, /* 339 */ -+ { 4, TI, sys_shmdt, "shmdt" }, /* 340 */ -+ { 4, TI, sys_shmget, "shmget" }, /* 341 */ -+ { 4, TI, sys_shmctl, "shmctl" }, /* 342 */ -- cgit v1.2.3 From be1d4d17a071c5acc7d9a281f958f7dd73627e49 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Fri, 1 Feb 2008 16:05:26 +0000 Subject: linux-openmoko_2.6.24.bb : new version of linux-openmoko --- packages/linux/linux-openmoko_2.6.24.bb | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 packages/linux/linux-openmoko_2.6.24.bb diff --git a/packages/linux/linux-openmoko_2.6.24.bb b/packages/linux/linux-openmoko_2.6.24.bb new file mode 100644 index 0000000000..d58f231d69 --- /dev/null +++ b/packages/linux/linux-openmoko_2.6.24.bb @@ -0,0 +1,60 @@ +require linux.inc +require linux-openmoko.inc + +DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko" +VANILLA_VERSION = "2.6.24" +KERNEL_RELEASE = "2.6.24" + +KERNEL_VERSION = "${KERNEL_RELEASE}" + +PV = "${VANILLA_VERSION}+svnr${SRCREV}" +PR = "r1" + +KERNEL_IMAGETYPE = "uImage" +UBOOT_ENTRYPOINT = "30008000" + +############################################################## +# source and patches +# +SRCREV_FORMAT = "patches-rconfig" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \ + svn://svn.openmoko.org/branches/src/target/kernel/2.6.24.x;module=patches;proto=http;name=patches \ + svn://svn.openmoko.org/branches/src/target/kernel/2.6.24.x;module=config;proto=http;name=config " + +S = "${WORKDIR}/linux-${VANILLA_VERSION}" + +############################################################## +# kernel image resides on a seperate flash partition (for now) +# +ALLOW_EMPTY = "1" + +COMPATIBLE_HOST = "arm.*-linux" +COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' + +CMDLINE = "unused -- bootloader passes ATAG list" + +############################################################### +# module configs specific to this kernel +# + +# usb +module_autoload_ohci-hcd = "ohci-hcd" +module_autoload_hci_usb = "hci_usb" +module_autoload_g_ether = "g_ether" +# audio +module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753" +module_autoload_snd-soc-neo1973-gta02-wm8753 = "snd-soc-neo1973-gta02-wm8753" +module_autoload_snd-pcm-oss = "snd-pcm-oss" +module_autoload_snd-mixer-oss = "snd-mixer-oss" +# sd/mmc +module_autoload_s3cmci = "s3cmci" + +do_prepatch() { + mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av + mv patches patches.openmoko + mv .pc .pc.old + mv ${WORKDIR}/config/defconfig-${KERNEL_VERSION} ${WORKDIR}/defconfig +} + +addtask prepatch after do_unpack before do_patch -- cgit v1.2.3 From ae9f6dcc023821f66ce3cb51e89f6113e3cc783c Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 1 Feb 2008 21:31:59 +0000 Subject: h5000.conf: Ship kernel-module-i2c-pxa. * Spotted by Milan Plzik * Fixes #2628 --- conf/machine/h5000.conf | 3 ++- packages/tasks/task-base.bb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/conf/machine/h5000.conf b/conf/machine/h5000.conf index c4c1237bae..1f29438061 100644 --- a/conf/machine/h5000.conf +++ b/conf/machine/h5000.conf @@ -27,7 +27,8 @@ EXTRA_IMAGECMD_jffs2 = "-e 0x40000 -p ; echo '${IMAGE_NAME} ${IMAGE_NAME}.rootf MACHINE_EXTRA_RDEPENDS = "kernel ipaq-boot-params" MACHINE_EXTRA_RRECOMMENDS = " kernel-module-h5400-lcd \ kernel-module-h5400-battery \ - kernel-module-snd-soc-h5000" + kernel-module-snd-soc-h5000 \ + kernel-module-i2c-pxa" # # Modules autoload and other boot properties diff --git a/packages/tasks/task-base.bb b/packages/tasks/task-base.bb index a44056f316..f8a94c63b2 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 = "r58" +PR = "r59" inherit task -- cgit v1.2.3 From fb8179540d23ef20ad0c1b2095a4775427070958 Mon Sep 17 00:00:00 2001 From: Ovidiu Sas Date: Sat, 2 Feb 2008 01:59:22 +0000 Subject: asterisk-core-sounds-en: 1.4.7 -> 1.4.8 --- .../asterisk/asterisk-core-sounds-en-alaw_1.4.7.bb | 46 --------------------- .../asterisk/asterisk-core-sounds-en-alaw_1.4.8.bb | 46 +++++++++++++++++++++ .../asterisk/asterisk-core-sounds-en-g729_1.4.7.bb | 46 --------------------- .../asterisk/asterisk-core-sounds-en-g729_1.4.8.bb | 46 +++++++++++++++++++++ .../asterisk/asterisk-core-sounds-en-gsm_1.4.7.bb | 48 ---------------------- .../asterisk/asterisk-core-sounds-en-gsm_1.4.8.bb | 48 ++++++++++++++++++++++ .../asterisk/asterisk-core-sounds-en-ulaw_1.4.7.bb | 46 --------------------- .../asterisk/asterisk-core-sounds-en-ulaw_1.4.8.bb | 46 +++++++++++++++++++++ 8 files changed, 186 insertions(+), 186 deletions(-) delete mode 100644 packages/asterisk/asterisk-core-sounds-en-alaw_1.4.7.bb create mode 100644 packages/asterisk/asterisk-core-sounds-en-alaw_1.4.8.bb delete mode 100644 packages/asterisk/asterisk-core-sounds-en-g729_1.4.7.bb create mode 100644 packages/asterisk/asterisk-core-sounds-en-g729_1.4.8.bb delete mode 100644 packages/asterisk/asterisk-core-sounds-en-gsm_1.4.7.bb create mode 100644 packages/asterisk/asterisk-core-sounds-en-gsm_1.4.8.bb delete mode 100644 packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.7.bb create mode 100644 packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.8.bb diff --git a/packages/asterisk/asterisk-core-sounds-en-alaw_1.4.7.bb b/packages/asterisk/asterisk-core-sounds-en-alaw_1.4.7.bb deleted file mode 100644 index f1b3d12cd7..0000000000 --- a/packages/asterisk/asterisk-core-sounds-en-alaw_1.4.7.bb +++ /dev/null @@ -1,46 +0,0 @@ -DESCRIPTION="The Asterisk open source software PBX" -HOMEPAGE="http://www.asterisk.org" -SECTION = "voip" -LICENSE="GPL" -#DEPENDS="asterisk" -#PR = "r1" - -SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-alaw-${PV}.tar.gz" - -do_install() { - install -d ${D}${localstatedir}/lib/asterisk/sounds - #install -m 644 ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate - #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/ - mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits - #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/ - mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme - #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/ - mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters - #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/ - mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic - #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ - mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence - #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/ - mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/ -} - -pkg_postinst_prepend() { - chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ -} - - diff --git a/packages/asterisk/asterisk-core-sounds-en-alaw_1.4.8.bb b/packages/asterisk/asterisk-core-sounds-en-alaw_1.4.8.bb new file mode 100644 index 0000000000..f1b3d12cd7 --- /dev/null +++ b/packages/asterisk/asterisk-core-sounds-en-alaw_1.4.8.bb @@ -0,0 +1,46 @@ +DESCRIPTION="The Asterisk open source software PBX" +HOMEPAGE="http://www.asterisk.org" +SECTION = "voip" +LICENSE="GPL" +#DEPENDS="asterisk" +#PR = "r1" + +SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-alaw-${PV}.tar.gz" + +do_install() { + install -d ${D}${localstatedir}/lib/asterisk/sounds + #install -m 644 ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate + #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/ + mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits + #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/ + mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme + #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/ + mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters + #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/ + mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic + #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ + mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence + #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/ + mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/ +} + +pkg_postinst_prepend() { + chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ +} + + diff --git a/packages/asterisk/asterisk-core-sounds-en-g729_1.4.7.bb b/packages/asterisk/asterisk-core-sounds-en-g729_1.4.7.bb deleted file mode 100644 index 205c8ff067..0000000000 --- a/packages/asterisk/asterisk-core-sounds-en-g729_1.4.7.bb +++ /dev/null @@ -1,46 +0,0 @@ -DESCRIPTION="The Asterisk open source software PBX" -HOMEPAGE="http://www.asterisk.org" -SECTION = "voip" -LICENSE="GPL" -#DEPENDS="asterisk" -#PR = "r1" - -SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-g729-${PV}.tar.gz" - -do_install() { - install -d ${D}${localstatedir}/lib/asterisk/sounds - #install -m 644 ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate - #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/ - mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits - #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/ - mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme - #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/ - mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters - #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/ - mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic - #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ - mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence - #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/ - mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/ -} - -pkg_postinst_prepend() { - chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ -} - - diff --git a/packages/asterisk/asterisk-core-sounds-en-g729_1.4.8.bb b/packages/asterisk/asterisk-core-sounds-en-g729_1.4.8.bb new file mode 100644 index 0000000000..205c8ff067 --- /dev/null +++ b/packages/asterisk/asterisk-core-sounds-en-g729_1.4.8.bb @@ -0,0 +1,46 @@ +DESCRIPTION="The Asterisk open source software PBX" +HOMEPAGE="http://www.asterisk.org" +SECTION = "voip" +LICENSE="GPL" +#DEPENDS="asterisk" +#PR = "r1" + +SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-g729-${PV}.tar.gz" + +do_install() { + install -d ${D}${localstatedir}/lib/asterisk/sounds + #install -m 644 ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate + #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/ + mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits + #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/ + mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme + #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/ + mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters + #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/ + mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic + #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ + mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence + #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/ + mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/ +} + +pkg_postinst_prepend() { + chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ +} + + diff --git a/packages/asterisk/asterisk-core-sounds-en-gsm_1.4.7.bb b/packages/asterisk/asterisk-core-sounds-en-gsm_1.4.7.bb deleted file mode 100644 index 2a46c74f84..0000000000 --- a/packages/asterisk/asterisk-core-sounds-en-gsm_1.4.7.bb +++ /dev/null @@ -1,48 +0,0 @@ -DESCRIPTION="The Asterisk open source software PBX" -HOMEPAGE="http://www.asterisk.org" -SECTION = "voip" -LICENSE="GPL" -#DEPENDS="asterisk" -#PR = "r1" - -SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-gsm-${PV}.tar.gz" - -do_install() { - install -d ${D}${localstatedir}/lib/asterisk/sounds - #install -m 644 ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate - #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/ - mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits - #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/ - mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme - #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/ - mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters - #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/ - mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic - #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ - mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence - #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/ - mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/ -} - -pkg_postinst_prepend() { - chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ -} - - diff --git a/packages/asterisk/asterisk-core-sounds-en-gsm_1.4.8.bb b/packages/asterisk/asterisk-core-sounds-en-gsm_1.4.8.bb new file mode 100644 index 0000000000..2a46c74f84 --- /dev/null +++ b/packages/asterisk/asterisk-core-sounds-en-gsm_1.4.8.bb @@ -0,0 +1,48 @@ +DESCRIPTION="The Asterisk open source software PBX" +HOMEPAGE="http://www.asterisk.org" +SECTION = "voip" +LICENSE="GPL" +#DEPENDS="asterisk" +#PR = "r1" + +SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-gsm-${PV}.tar.gz" + +do_install() { + install -d ${D}${localstatedir}/lib/asterisk/sounds + #install -m 644 ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate + #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/ + mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits + #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/ + mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme + #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/ + mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters + #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/ + mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic + #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ + mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence + #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/ + mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/ +} + +pkg_postinst_prepend() { + chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ +} + + diff --git a/packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.7.bb b/packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.7.bb deleted file mode 100644 index c29ae60f99..0000000000 --- a/packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.7.bb +++ /dev/null @@ -1,46 +0,0 @@ -DESCRIPTION="The Asterisk open source software PBX" -HOMEPAGE="http://www.asterisk.org" -SECTION = "voip" -LICENSE="GPL" -#DEPENDS="asterisk" -#PR = "r1" - -SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-ulaw-${PV}.tar.gz" - -do_install() { - install -d ${D}${localstatedir}/lib/asterisk/sounds - #install -m 644 ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate - #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/ - mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits - #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/ - mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme - #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/ - mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters - #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/ - mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic - #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ - mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence - #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/ - mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/ -} - -pkg_postinst_prepend() { - chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ -} - - diff --git a/packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.8.bb b/packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.8.bb new file mode 100644 index 0000000000..c29ae60f99 --- /dev/null +++ b/packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.8.bb @@ -0,0 +1,46 @@ +DESCRIPTION="The Asterisk open source software PBX" +HOMEPAGE="http://www.asterisk.org" +SECTION = "voip" +LICENSE="GPL" +#DEPENDS="asterisk" +#PR = "r1" + +SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-ulaw-${PV}.tar.gz" + +do_install() { + install -d ${D}${localstatedir}/lib/asterisk/sounds + #install -m 644 ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate + #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/ + mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits + #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/ + mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme + #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/ + mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters + #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/ + mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic + #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ + mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence + #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/ + mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/ +} + +pkg_postinst_prepend() { + chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ +} + + -- cgit v1.2.3 From 194b6bcbd05903eea48ea77856f5a9e9f7602323 Mon Sep 17 00:00:00 2001 From: Ovidiu Sas Date: Sat, 2 Feb 2008 02:22:28 +0000 Subject: asterisk-extra-sounds-en: 1.4.6 -> 1.4.7 --- .../asterisk-extra-sounds-en-alaw_1.4.6.bb | 37 ---------------------- .../asterisk-extra-sounds-en-alaw_1.4.7.bb | 31 ++++++++++++++++++ .../asterisk-extra-sounds-en-g729_1.4.6.bb | 37 ---------------------- .../asterisk-extra-sounds-en-g729_1.4.7.bb | 31 ++++++++++++++++++ .../asterisk/asterisk-extra-sounds-en-gsm_1.4.6.bb | 37 ---------------------- .../asterisk/asterisk-extra-sounds-en-gsm_1.4.7.bb | 31 ++++++++++++++++++ .../asterisk-extra-sounds-en-ulaw_1.4.6.bb | 37 ---------------------- .../asterisk-extra-sounds-en-ulaw_1.4.7.bb | 31 ++++++++++++++++++ 8 files changed, 124 insertions(+), 148 deletions(-) delete mode 100644 packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.6.bb create mode 100644 packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.7.bb delete mode 100644 packages/asterisk/asterisk-extra-sounds-en-g729_1.4.6.bb create mode 100644 packages/asterisk/asterisk-extra-sounds-en-g729_1.4.7.bb delete mode 100644 packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.6.bb create mode 100644 packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.7.bb delete mode 100644 packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.6.bb create mode 100644 packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.7.bb diff --git a/packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.6.bb b/packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.6.bb deleted file mode 100644 index f18d46258f..0000000000 --- a/packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.6.bb +++ /dev/null @@ -1,37 +0,0 @@ -DESCRIPTION="The Asterisk open source software PBX" -HOMEPAGE="http://www.asterisk.org" -SECTION = "voip" -LICENSE="GPL" -#DEPENDS="asterisk" -#PR = "r1" - -SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-alaw-${PV}.tar.gz" - -do_install() { - install -d ${D}${localstatedir}/lib/asterisk/sounds - # HACK: moving the files in chunkes (too many of them) - rm ${WORKDIR}/conf-thereare.alaw - rm ${WORKDIR}/invalid.alaw - mv ${WORKDIR}/[a-d]*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/[e-l]*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha - #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/ - mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic - #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ - mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx - #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/ - mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds -} - -pkg_postinst_prepend() { - chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ -} - - diff --git a/packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.7.bb b/packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.7.bb new file mode 100644 index 0000000000..2bea38c99b --- /dev/null +++ b/packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.7.bb @@ -0,0 +1,31 @@ +DESCRIPTION="The Asterisk open source software PBX" +HOMEPAGE="http://www.asterisk.org" +SECTION = "voip" +LICENSE="GPL" +#DEPENDS="asterisk" +#PR = "r1" + +SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-alaw-${PV}.tar.gz" + +do_install() { + install -d ${D}${localstatedir}/lib/asterisk/sounds + # HACK: moving the files in chunkes (too many of them) + mv ${WORKDIR}/[a-d]*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/[e-l]*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha + #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/ + mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx + #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/ + mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds +} + +pkg_postinst_prepend() { + chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ +} + + diff --git a/packages/asterisk/asterisk-extra-sounds-en-g729_1.4.6.bb b/packages/asterisk/asterisk-extra-sounds-en-g729_1.4.6.bb deleted file mode 100644 index 48fabbbdc4..0000000000 --- a/packages/asterisk/asterisk-extra-sounds-en-g729_1.4.6.bb +++ /dev/null @@ -1,37 +0,0 @@ -DESCRIPTION="The Asterisk open source software PBX" -HOMEPAGE="http://www.asterisk.org" -SECTION = "voip" -LICENSE="GPL" -#DEPENDS="asterisk" -#PR = "r1" - -SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-g729-${PV}.tar.gz" - -do_install() { - install -d ${D}${localstatedir}/lib/asterisk/sounds - # HACK: moving the files in chunks (too many files) - rm ${WORKDIR}/conf-thereare.g729 - rm ${WORKDIR}/invalid.g729 - mv ${WORKDIR}/[a-d]*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/[e-l]*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha - #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/ - mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic - #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ - mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx - #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/ - mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds -} - -pkg_postinst_prepend() { - chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ -} - - diff --git a/packages/asterisk/asterisk-extra-sounds-en-g729_1.4.7.bb b/packages/asterisk/asterisk-extra-sounds-en-g729_1.4.7.bb new file mode 100644 index 0000000000..0656ff1a95 --- /dev/null +++ b/packages/asterisk/asterisk-extra-sounds-en-g729_1.4.7.bb @@ -0,0 +1,31 @@ +DESCRIPTION="The Asterisk open source software PBX" +HOMEPAGE="http://www.asterisk.org" +SECTION = "voip" +LICENSE="GPL" +#DEPENDS="asterisk" +#PR = "r1" + +SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-g729-${PV}.tar.gz" + +do_install() { + install -d ${D}${localstatedir}/lib/asterisk/sounds + # HACK: moving the files in chunks (too many files) + mv ${WORKDIR}/[a-d]*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/[e-l]*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha + #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/ + mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx + #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/ + mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds +} + +pkg_postinst_prepend() { + chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ +} + + diff --git a/packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.6.bb b/packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.6.bb deleted file mode 100644 index da463391b1..0000000000 --- a/packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.6.bb +++ /dev/null @@ -1,37 +0,0 @@ -DESCRIPTION="The Asterisk open source software PBX" -HOMEPAGE="http://www.asterisk.org" -SECTION = "voip" -LICENSE="GPL" -#DEPENDS="asterisk" -#PR = "r1" - -SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-gsm-${PV}.tar.gz" - -do_install() { - install -d ${D}${localstatedir}/lib/asterisk/sounds - # HACK: moving the files in chunks (too many files) - rm ${WORKDIR}/conf-thereare.gsm - rm ${WORKDIR}/invalid.gsm - mv ${WORKDIR}/[a-d]*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/[e-l]*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha - #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/ - mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic - #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ - mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx - #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/ - mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds -} - -pkg_postinst_prepend() { - chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ -} - - diff --git a/packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.7.bb b/packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.7.bb new file mode 100644 index 0000000000..2d74d27996 --- /dev/null +++ b/packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.7.bb @@ -0,0 +1,31 @@ +DESCRIPTION="The Asterisk open source software PBX" +HOMEPAGE="http://www.asterisk.org" +SECTION = "voip" +LICENSE="GPL" +#DEPENDS="asterisk" +#PR = "r1" + +SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-gsm-${PV}.tar.gz" + +do_install() { + install -d ${D}${localstatedir}/lib/asterisk/sounds + # HACK: moving the files in chunks (too many files) + mv ${WORKDIR}/[a-d]*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/[e-l]*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha + #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/ + mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx + #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/ + mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds +} + +pkg_postinst_prepend() { + chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ +} + + diff --git a/packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.6.bb b/packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.6.bb deleted file mode 100644 index 6a6f3f5fba..0000000000 --- a/packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.6.bb +++ /dev/null @@ -1,37 +0,0 @@ -DESCRIPTION="The Asterisk open source software PBX" -HOMEPAGE="http://www.asterisk.org" -SECTION = "voip" -LICENSE="GPL" -#DEPENDS="asterisk" -#PR = "r1" - -SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-ulaw-${PV}.tar.gz" - -do_install() { - install -d ${D}${localstatedir}/lib/asterisk/sounds - # HACK: moving the files in chunkes (too many of them) - rm ${WORKDIR}/conf-thereare.ulaw - rm ${WORKDIR}/invalid.ulaw - mv ${WORKDIR}/[a-d]*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/[e-l]*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ - mv ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ - #install -m 644 ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha - #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/ - mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic - #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/ - mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds - - #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx - #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/ - mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds -} - -pkg_postinst_prepend() { - chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ -} - - diff --git a/packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.7.bb b/packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.7.bb new file mode 100644 index 0000000000..6d35c65177 --- /dev/null +++ b/packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.7.bb @@ -0,0 +1,31 @@ +DESCRIPTION="The Asterisk open source software PBX" +HOMEPAGE="http://www.asterisk.org" +SECTION = "voip" +LICENSE="GPL" +#DEPENDS="asterisk" +#PR = "r1" + +SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-ulaw-${PV}.tar.gz" + +do_install() { + install -d ${D}${localstatedir}/lib/asterisk/sounds + # HACK: moving the files in chunkes (too many of them) + mv ${WORKDIR}/[a-d]*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/[e-l]*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ + mv ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ + #install -m 644 ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/ + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha + #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/ + mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds + + #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx + #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/ + mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds +} + +pkg_postinst_prepend() { + chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/ +} + + -- cgit v1.2.3 From c13773acfc8d0aae1cf60b93bd129f0452752695 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 2 Feb 2008 14:04:45 +0000 Subject: python-edbus: fix dependency --- packages/python/python-edbus_cvs.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/python/python-edbus_cvs.bb b/packages/python/python-edbus_cvs.bb index 06a5a45c06..544a6f347f 100644 --- a/packages/python/python-edbus_cvs.bb +++ b/packages/python/python-edbus_cvs.bb @@ -1,7 +1,7 @@ require python-efl.inc -DEPENDS += "edbus dbus" +DEPENDS += "edbus python-dbus" -PR = "r2" +PR = "r3" SRC_URI = "${E_CVS};module=e17/proto/python-efl/python-e_dbus" S = "${WORKDIR}/python-e_dbus" -- cgit v1.2.3 From e3e8f31ef232a80edd2556edc87bd4a09c373a64 Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Sat, 2 Feb 2008 20:07:58 +0000 Subject: inetutils: bumped up to latest upstream revision --- packages/inetutils/inetutils_1.5.bb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 packages/inetutils/inetutils_1.5.bb diff --git a/packages/inetutils/inetutils_1.5.bb b/packages/inetutils/inetutils_1.5.bb new file mode 100644 index 0000000000..0971e58967 --- /dev/null +++ b/packages/inetutils/inetutils_1.5.bb @@ -0,0 +1,17 @@ +SECTION = "libs" +DEPENDS = "ncurses" +LICENSE = "GPL" +DESCRIPTION = "The GNU inetutils are a collection of common \ +networking utilities and servers including ftp, ftpd, rcp, \ +rexec, rlogin, rlogind, rsh, rshd, syslog, syslogd, talk, \ +talkd, telnet, telnetd, tftp, tftpd, and uucpd." + +SRC_URI = "${GNU_MIRROR}/inetutils/inetutils-${PV}.tar.gz" + +inherit autotools + +EXTRA_OECONF = "--with-ncurses-include-dir=${STAGING_INCDIR}" + +do_configure_prepend () { + rm -f ${S}/glob/configure* +} -- cgit v1.2.3 From 64d04dd1dca9f1dcc022d0c808bafc39ec04aadf Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Sat, 2 Feb 2008 23:05:52 +0000 Subject: bdftopcf-native: simplify recipe, use the same source tarball as bdftopcf --- packages/xorg-app/bdftopcf-native_1.0.0.bb | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/xorg-app/bdftopcf-native_1.0.0.bb b/packages/xorg-app/bdftopcf-native_1.0.0.bb index 8ab592b2b2..41049946e5 100644 --- a/packages/xorg-app/bdftopcf-native_1.0.0.bb +++ b/packages/xorg-app/bdftopcf-native_1.0.0.bb @@ -1,13 +1,8 @@ -DESCRIPTION = "Native bdftopdf utility" -SECTION = "x11/fonts" -LICENSE = "MIT-X" +inherit native +require xorg-app-common.inc PE = "1" -S="${WORKDIR}/bdftopcf-${PV}" +XORG_PN = "bdftopcf" DEPENDS = "libxfont-native" -SRC_URI = "${XORG_MIRROR}/X11R7.0/src/app/bdftopcf-X11R7.0-1.0.0.tar.gz" - -inherit native autotools pkgconfig - -- cgit v1.2.3 From 1bc7962516feae076b10cfcfd2212cd4fab4e480 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Sat, 2 Feb 2008 23:07:30 +0000 Subject: font-util-native: simplify recipe, use the same source tarball as font-util --- packages/xorg-font/font-util-native_1.0.1.bb | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/xorg-font/font-util-native_1.0.1.bb b/packages/xorg-font/font-util-native_1.0.1.bb index 8db0b71898..32ea62c3d5 100644 --- a/packages/xorg-font/font-util-native_1.0.1.bb +++ b/packages/xorg-font/font-util-native_1.0.1.bb @@ -1,13 +1,8 @@ -DESCRIPTION = "X font utils." -SECTION = "x11/fonts" -LICENSE = "MIT-X" +inherit native +require xorg-font-common.inc -S="${WORKDIR}/font-util-${PV}" +XORG_PN = "font-util" DEPENDS = "bdftopcf-native" PE = "1" - -SRC_URI = "${XORG_MIRROR}/X11R7.1/src/font/font-util-${PV}.tar.gz" - -inherit native autotools pkgconfig -- cgit v1.2.3 From 6746a39d827d29d7657add85613833f2fd49ab5e Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Sat, 2 Feb 2008 23:15:29 +0000 Subject: xserver-kdrive: remove a blocking read in the keyboard driver resume path --- .../keyboard-resume-workaround.patch | 18 ++++++++++++++++++ packages/xorg-xserver/xserver-kdrive_1.4.bb | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 packages/xorg-xserver/xserver-kdrive-1.4/keyboard-resume-workaround.patch diff --git a/packages/xorg-xserver/xserver-kdrive-1.4/keyboard-resume-workaround.patch b/packages/xorg-xserver/xserver-kdrive-1.4/keyboard-resume-workaround.patch new file mode 100644 index 0000000000..ced1904916 --- /dev/null +++ b/packages/xorg-xserver/xserver-kdrive-1.4/keyboard-resume-workaround.patch @@ -0,0 +1,18 @@ +Index: xorg-server-1.4/hw/kdrive/linux/keyboard.c +=================================================================== +--- xorg-server-1.4.orig/hw/kdrive/linux/keyboard.c 2007-09-29 18:31:15.000000000 +0200 ++++ xorg-server-1.4/hw/kdrive/linux/keyboard.c 2007-09-29 18:33:02.000000000 +0200 +@@ -743,11 +743,8 @@ + cfsetispeed(&nTty, 9600); + cfsetospeed(&nTty, 9600); + tcsetattr(fd, TCSANOW, &nTty); +- /* +- * Flush any pending keystrokes +- */ +- while ((n = read (fd, buf, sizeof (buf))) > 0) +- ; ++ n = fcntl(fd, F_GETFL); ++ fprintf(stderr, "LinuxConsoleFd status flags: %x (O_NONBLOCK = %x)\n", n, O_NONBLOCK); + KdRegisterFd (fd, LinuxKeyboardRead, ki); + return Success; + } diff --git a/packages/xorg-xserver/xserver-kdrive_1.4.bb b/packages/xorg-xserver/xserver-kdrive_1.4.bb index f4d5be38e1..c87090197c 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.4.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.4.bb @@ -3,7 +3,7 @@ require xserver-kdrive-common.inc DEPENDS += "hal libxkbfile libxcalibrate pixman" PE = "1" -PR = "r2" +PR = "r3" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ ${KDRIVE_COMMON_PATCHES} \ @@ -20,6 +20,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://xcalibrate-new-input-world-order.patch;patch=1 \ file://tslib-default-device.patch;patch=1 \ file://fbdev-evdev.patch;patch=1 \ + file://keyboard-resume-workaround.patch;patch=1 \ file://xorg-avr32-support.diff;patch=1 \ " -- cgit v1.2.3 From 008a8b2d36ff42916ccc1b84aadef456785019e2 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Sat, 2 Feb 2008 23:19:08 +0000 Subject: xserver-kdrive-1.4: remove debugging left-overs from keyboard-resume-workaround --- .../xorg-xserver/xserver-kdrive-1.4/keyboard-resume-workaround.patch | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/xorg-xserver/xserver-kdrive-1.4/keyboard-resume-workaround.patch b/packages/xorg-xserver/xserver-kdrive-1.4/keyboard-resume-workaround.patch index ced1904916..4964ff5479 100644 --- a/packages/xorg-xserver/xserver-kdrive-1.4/keyboard-resume-workaround.patch +++ b/packages/xorg-xserver/xserver-kdrive-1.4/keyboard-resume-workaround.patch @@ -2,7 +2,7 @@ Index: xorg-server-1.4/hw/kdrive/linux/keyboard.c =================================================================== --- xorg-server-1.4.orig/hw/kdrive/linux/keyboard.c 2007-09-29 18:31:15.000000000 +0200 +++ xorg-server-1.4/hw/kdrive/linux/keyboard.c 2007-09-29 18:33:02.000000000 +0200 -@@ -743,11 +743,8 @@ +@@ -743,11 +743,6 @@ cfsetispeed(&nTty, 9600); cfsetospeed(&nTty, 9600); tcsetattr(fd, TCSANOW, &nTty); @@ -11,8 +11,6 @@ Index: xorg-server-1.4/hw/kdrive/linux/keyboard.c - */ - while ((n = read (fd, buf, sizeof (buf))) > 0) - ; -+ n = fcntl(fd, F_GETFL); -+ fprintf(stderr, "LinuxConsoleFd status flags: %x (O_NONBLOCK = %x)\n", n, O_NONBLOCK); KdRegisterFd (fd, LinuxKeyboardRead, ki); return Success; } -- cgit v1.2.3 From 01f0994efc30b67cfccc803ddb1fa902d6b2d949 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 3 Feb 2008 00:15:59 +0000 Subject: qemu: Fix writev syscall null value handling, fixes glibc LC_CTYPE errors during locale generation --- packages/qemu/qemu-0.9.1/writev_fix.patch | 17 +++++++++++++++++ packages/qemu/qemu_0.9.1.bb | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 packages/qemu/qemu-0.9.1/writev_fix.patch diff --git a/packages/qemu/qemu-0.9.1/writev_fix.patch b/packages/qemu/qemu-0.9.1/writev_fix.patch new file mode 100644 index 0000000000..e0ed4af972 --- /dev/null +++ b/packages/qemu/qemu-0.9.1/writev_fix.patch @@ -0,0 +1,17 @@ +--- + linux-user/syscall.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: qemu-0.9.1/linux-user/syscall.c +=================================================================== +--- qemu-0.9.1.orig/linux-user/syscall.c 2008-02-03 00:00:00.000000000 +0000 ++++ qemu-0.9.1/linux-user/syscall.c 2008-02-03 00:00:38.000000000 +0000 +@@ -1048,7 +1048,7 @@ static abi_long lock_iovec(int type, str + base = tswapl(target_vec[i].iov_base); + vec[i].iov_len = tswapl(target_vec[i].iov_len); + vec[i].iov_base = lock_user(type, base, vec[i].iov_len, copy); +- if (!vec[i].iov_base) ++ if (!vec[i].iov_base && vec[i].iov_len) + goto fail; + } + unlock_user (target_vec, target_addr, 0); diff --git a/packages/qemu/qemu_0.9.1.bb b/packages/qemu/qemu_0.9.1.bb index 2f0aba7e64..164296b0d4 100644 --- a/packages/qemu/qemu_0.9.1.bb +++ b/packages/qemu/qemu_0.9.1.bb @@ -1,6 +1,6 @@ LICENSE = "GPL" DEPENDS = "zlib" -PR = "r6" +PR = "r7" FILESPATH = "${FILE_DIRNAME}/qemu-${PV}" FILESDIR = "${WORKDIR}" @@ -31,6 +31,7 @@ SRC_URI = "\ file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \ file://workaround_bad_futex_headers.patch;patch=1 \ file://fix_segfault.patch;patch=1 \ + file://writev_fix.patch;patch=1 \ file://configure_symlinkpath_fix.patch;patch=1 \ file://disable-error-in-configure.patch;patch=1 \ file://no-strip.patch;patch=1" -- cgit v1.2.3 From df21c09a84e69864b5fe1bd008c4e739252f4876 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Sun, 3 Feb 2008 14:57:10 +0000 Subject: opie-ttf-support: fix uninitialized ${palmtopdir}/lib/fonts/fontdir, oebug 3720 * replace tab with space --- packages/opie-ttf-support/opie-ttf-support_1.1.bb | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/opie-ttf-support/opie-ttf-support_1.1.bb b/packages/opie-ttf-support/opie-ttf-support_1.1.bb index d11d8ea75f..c6ed53ffbd 100644 --- a/packages/opie-ttf-support/opie-ttf-support_1.1.bb +++ b/packages/opie-ttf-support/opie-ttf-support_1.1.bb @@ -1,23 +1,33 @@ DESCRIPTION = "Meta-package for Opie TTF support" SECTION = "opie/fonts" DEPENDS = "freetype" -PR = "r3" +PR = "r4" SRC_URI = "file://update-qtttffontdir.c" S = "${WORKDIR}" do_compile() { - ${CC} ${CFLAGS} ${LDFLAGS} -I${STAGING_INCDIR}/freetype2 -lfreetype -o update-qtttffontdir update-qtttffontdir.c + ${CC} ${CFLAGS} ${LDFLAGS} -I${STAGING_INCDIR}/freetype2 -lfreetype -o update-qtttffontdir update-qtttffontdir.c } do_install() { - install -d ${D}${sbindir} - install -d ${D}${sysconfdir}/update-fonts-common.d/ - install -m 0755 update-qtttffontdir ${D}${sbindir} + echo " #!/bin/sh # Author: Rolf Leggewie ${sbindir}/update-qtttffontdir ${datadir}/fonts/truetype > ${palmtopdir}/lib/fonts/fontdir -" > ${D}${sysconfdir}/update-fonts-common.d/02qtttffont-update +" > ${WORKDIR}/02qtttffont-update + + install -d ${D}${sbindir} + install -d ${D}${sysconfdir}/update-fonts-common.d/ + install -m 0755 update-qtttffontdir ${D}${sbindir} + install -m 0755 02qtttffont-update ${D}${sysconfdir}/update-fonts-common.d/ +} + +pkg_postinst() { + if ! [ -d ${palmtopdir}/lib/fonts ]; then + mkdir -p ${palmtopdir}/lib/fonts + fi + ${sysconfdir}/update-fonts-common.d/02qtttffont-update } -- cgit v1.2.3 From cbfe7d32af3742c49392eb3ed3f3dcdac64ec3ab Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 3 Feb 2008 18:06:46 +0000 Subject: sane-srcrevs.inc : increment linux-openmoko for the 2.6.24 patches --- 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 50ba415363..3411f2bb19 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -45,7 +45,7 @@ SRCREV_pn-libxosd ?= "627" SRCREV_pn-linux-bfin ?= "3758" SRCREV_pn-linux-hackndev-2.6 ?= "1308" SRCREV_pn-linux-ixp4xx ?= "1021" -SRCREV_pn-linux-openmoko ?= "3801" +SRCREV_pn-linux-openmoko ?= "4013" SRCREV_pn-llvm-gcc4 ?= "374" SRCREV_pn-llvm-gcc4-cross ?= "374" SRCREV_pn-maemo-mapper ?= "118" -- cgit v1.2.3 From 7b2c14cc02aa5fdaa8c13c872dc14ecbd2cafaba Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 3 Feb 2008 19:57:51 +0000 Subject: gsmd.inc : update the location of reset and power on gta01/02 devices and bump PR --- packages/gsm/files/default | 5 +++++ packages/gsm/gsmd.inc | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/gsm/files/default b/packages/gsm/files/default index f113d8bab0..467bd339eb 100644 --- a/packages/gsm/files/default +++ b/packages/gsm/files/default @@ -5,8 +5,13 @@ case `machine_id` in "gta01"|"gta02") GSMD_OPTS="-s 115200 -F" + if [ -d '/sys/bus/platform/devices/gta01-pm-gsm.0' ] ; then GSM_POW="/sys/bus/platform/devices/gta01-pm-gsm.0/power_on" GSM_RES="/sys/bus/platform/devices/gta01-pm-gsm.0/reset" + else + GSM_POW="/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on" + GSM_RES="/sys/bus/platform/devices/neo1973-pm-gsm.0/reset" + fi GSM_DEV="/dev/ttySAC0" ;; "htc_apache"|"htc_blueangel"|"htc_universal") diff --git a/packages/gsm/gsmd.inc b/packages/gsm/gsmd.inc index f7d609e2c9..a6b6fb7a6a 100644 --- a/packages/gsm/gsmd.inc +++ b/packages/gsm/gsmd.inc @@ -5,7 +5,7 @@ SECTION = "libs/gsm" PROVIDES += "gsmd" RPROVIDES_${PN} = "libgsmd0 libgsmd gsmd gsmd-devel" PV = "0.1+svnr${SRCREV}" -PR = "r40" +PR = "r41" SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gsm;proto=http \ file://gsmd \ -- cgit v1.2.3 From 4f3ab3fe8e081cb25ca124f55ff2c21e6dd4072a Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 3 Feb 2008 20:50:31 +0000 Subject: nux-openmoko_2.6.24.bb : take account of KERNEL_LOCALVERSION and set right variables to the right values. Fixes sound. --- packages/linux/linux-openmoko_2.6.24.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/linux/linux-openmoko_2.6.24.bb b/packages/linux/linux-openmoko_2.6.24.bb index d58f231d69..0c63fc9bbd 100644 --- a/packages/linux/linux-openmoko_2.6.24.bb +++ b/packages/linux/linux-openmoko_2.6.24.bb @@ -5,10 +5,10 @@ DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ VANILLA_VERSION = "2.6.24" KERNEL_RELEASE = "2.6.24" -KERNEL_VERSION = "${KERNEL_RELEASE}" +KERNEL_VERSION = "${KERNEL_RELEASE}-moko11" PV = "${VANILLA_VERSION}+svnr${SRCREV}" -PR = "r1" +PR = "r2" KERNEL_IMAGETYPE = "uImage" UBOOT_ENTRYPOINT = "30008000" @@ -54,7 +54,7 @@ do_prepatch() { mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av mv patches patches.openmoko mv .pc .pc.old - mv ${WORKDIR}/config/defconfig-${KERNEL_VERSION} ${WORKDIR}/defconfig + mv ${WORKDIR}/config/defconfig-${KERNEL_RELEASE} ${WORKDIR}/defconfig } addtask prepatch after do_unpack before do_patch -- cgit v1.2.3 From 67ee8c0ad8aebfb5b8bd81ee37380bffa72ba9bc Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Sun, 3 Feb 2008 23:10:05 +0000 Subject: mpc83x3-rdb: Fix uImage kernel build. --- conf/machine/mpc8313e-rdb.conf | 2 ++ conf/machine/mpc8323e-rdb.conf | 2 ++ packages/linux/linux.inc | 9 +++++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/conf/machine/mpc8313e-rdb.conf b/conf/machine/mpc8313e-rdb.conf index 3bc18e3f9e..27706cbd4a 100644 --- a/conf/machine/mpc8313e-rdb.conf +++ b/conf/machine/mpc8313e-rdb.conf @@ -10,6 +10,8 @@ PREFERRED_VERSION_u-boot = "git" MACHINE_FEATURES = "kernel26 usbhost ext2" +KERNEL_IMAGETYPE = "uImage" + PREFERRED_VERSION_u-boot = "1.3.1" UBOOT_MACHINE = "MPC8313ERDB_33_config" diff --git a/conf/machine/mpc8323e-rdb.conf b/conf/machine/mpc8323e-rdb.conf index ee2c6144a9..38f3b1930c 100644 --- a/conf/machine/mpc8323e-rdb.conf +++ b/conf/machine/mpc8323e-rdb.conf @@ -10,6 +10,8 @@ PREFERRED_PROVIDER_virtual/kernel = "linux" MACHINE_FEATURES = "kernel26 usbhost pci ext2 uboot" +KERNEL_IMAGETYPE = "uImage" + PREFERRED_VERSION_u-boot = "1.1.6" UBOOT_MACHINE = "MPC8323ERDB_config" diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc index 23f314353e..b98b722d97 100644 --- a/packages/linux/linux.inc +++ b/packages/linux/linux.inc @@ -108,15 +108,20 @@ UBOOT_ENTRYPOINT ?= "20008000" do_compile_append() { if test "x${KERNEL_IMAGETYPE}" = "xuImage" ; then + if test "x${ARCH}" = "xpowerpc" ; then + UBOOT_ARCH=ppc + else + UBOOT_ARCH=$ARCH + fi if test -e arch/${ARCH}/boot/compressed/vmlinux ; then ${OBJCOPY} -O binary -R .note -R .comment -S arch/${ARCH}/boot/compressed/vmlinux linux.bin - uboot-mkimage -A ${ARCH} -O linux -T kernel -C none -a ${UBOOT_ENTRYPOINT} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage + uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_ENTRYPOINT} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage rm -f linux.bin else ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin rm -f linux.bin.gz gzip -9 linux.bin - uboot-mkimage -A ${ARCH} -O linux -T kernel -C gzip -a ${UBOOT_ENTRYPOINT} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage + uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_ENTRYPOINT} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage rm -f linux.bin.gz fi fi -- cgit v1.2.3 From 59016966acd6b2c966a5bf96c61ffaa5215d4cf0 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sun, 3 Feb 2008 23:42:34 +0000 Subject: linux-openmoko: 4014 removes the moko11 suffix again --- conf/distro/include/sane-srcrevs.inc | 2 +- packages/linux/linux-openmoko_2.6.24.bb | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 3411f2bb19..c8b67efb7a 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -45,7 +45,7 @@ SRCREV_pn-libxosd ?= "627" SRCREV_pn-linux-bfin ?= "3758" SRCREV_pn-linux-hackndev-2.6 ?= "1308" SRCREV_pn-linux-ixp4xx ?= "1021" -SRCREV_pn-linux-openmoko ?= "4013" +SRCREV_pn-linux-openmoko ?= "4014" SRCREV_pn-llvm-gcc4 ?= "374" SRCREV_pn-llvm-gcc4-cross ?= "374" SRCREV_pn-maemo-mapper ?= "118" diff --git a/packages/linux/linux-openmoko_2.6.24.bb b/packages/linux/linux-openmoko_2.6.24.bb index 0c63fc9bbd..b316f4ae4e 100644 --- a/packages/linux/linux-openmoko_2.6.24.bb +++ b/packages/linux/linux-openmoko_2.6.24.bb @@ -5,10 +5,11 @@ DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ VANILLA_VERSION = "2.6.24" KERNEL_RELEASE = "2.6.24" -KERNEL_VERSION = "${KERNEL_RELEASE}-moko11" +# need to synchronize with LOCALVERSION, if set +KERNEL_VERSION = "${KERNEL_RELEASE}" PV = "${VANILLA_VERSION}+svnr${SRCREV}" -PR = "r2" +PR = "r3" KERNEL_IMAGETYPE = "uImage" UBOOT_ENTRYPOINT = "30008000" -- cgit v1.2.3 From 50984c4e084f1032d9fa4a9ce770b5644c7ca4a1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 4 Feb 2008 09:59:30 +0000 Subject: linux.inc: sed out LOCALVERSION, it breaks too many things in kernel.bbclass and depmod --- packages/linux/linux.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc index b98b722d97..951bf16590 100644 --- a/packages/linux/linux.inc +++ b/packages/linux/linux.inc @@ -70,7 +70,8 @@ do_configure_prepend() { -e '/CONFIG_CPU_BIG_ENDIAN/d' \ -e '/CONFIG_LOGO=/d' \ -e '/CONFIG_LOGO_LINUX_CLUT224=/d' \ - < '${WORKDIR}/defconfig' >>'${S}/.config' + -e '/CONFIG_LOCALVERSION/d' \ + < '${WORKDIR}/defconfig' >>'${S}/.config' # # root-over-nfs-over-usb-eth support. Limited, but should cover some cases. -- cgit v1.2.3 From 2aef2ca43fe188f0c8c1209e535f0ca7a20b7809 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Mon, 4 Feb 2008 10:51:28 +0000 Subject: altboot: add kernel-module-loop as RRECOMMENDS, bump PR. * currently only tosa and collie set CONFIG_BLK_DEV_LOOP=m, other devices built it into kernel --- packages/altboot/altboot.inc | 2 +- packages/altboot/altboot_1.0.8+1.0.9_pre1.bb | 2 +- packages/altboot/altboot_1.0.8.bb | 2 +- packages/altboot/altboot_1.1.1+wip-SVNR78.bb | 2 +- packages/altboot/altboot_svn.bb | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/altboot/altboot.inc b/packages/altboot/altboot.inc index 8a1eae87e8..9fe1e7a03b 100644 --- a/packages/altboot/altboot.inc +++ b/packages/altboot/altboot.inc @@ -3,7 +3,7 @@ HOMEPAGE = "http://www.hentges.net/misc/openzaurus/index.shtml" LICENSE = "GPL" RDEPENDS_${PN} = "${PN}-conf" RDEPENDS_${PN}-conf = "${PN}" -RRECOMMENDS_${PN} = "e2fsprogs-e2fsck dosfstools kexec-tools" +RRECOMMENDS_${PN} = "e2fsprogs-e2fsck dosfstools kexec-tools kernel-module-loop" RRECOMMENDS_${PN}_spitz += " kernel-module-jffs2" S = "${WORKDIR}/trunk/" diff --git a/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb index 3128e794b9..aa359ff0c9 100644 --- a/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb +++ b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb @@ -9,7 +9,7 @@ DEFAULT_PREFERENCE = "-1" #RDEPENDS_${PN}_append_poodle = " kexec-tools" #RDEPENDS_${PN}-conf = "${PN}" -PR = "r0" +PR = "r1" SVN_REV="65" #TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-')}" diff --git a/packages/altboot/altboot_1.0.8.bb b/packages/altboot/altboot_1.0.8.bb index 96758871f9..de2a249010 100644 --- a/packages/altboot/altboot_1.0.8.bb +++ b/packages/altboot/altboot_1.0.8.bb @@ -1,6 +1,6 @@ require altboot.inc -PR = "r2" +PR = "r3" TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-')}" SRC_URI = "svn://hentges.net/public/altboot/tags/;module=${TAG};proto=svn" diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR78.bb b/packages/altboot/altboot_1.1.1+wip-SVNR78.bb index b74bc7baa4..be50911f69 100644 --- a/packages/altboot/altboot_1.1.1+wip-SVNR78.bb +++ b/packages/altboot/altboot_1.1.1+wip-SVNR78.bb @@ -1,6 +1,6 @@ require altboot.inc -PR = "r0" +PR = "r1" SVN_REV = "78" SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \ diff --git a/packages/altboot/altboot_svn.bb b/packages/altboot/altboot_svn.bb index 0d3c869482..a736ccd7c4 100644 --- a/packages/altboot/altboot_svn.bb +++ b/packages/altboot/altboot_svn.bb @@ -1,7 +1,7 @@ require altboot.inc PV = "1.1.1+wip-${SRCDATE}" -PR = "r2" +PR = "r3" SRC_URI = "svn://hentges.net/public/altboot;module=trunk;proto=svn" -- cgit v1.2.3 From 9689c616200a54b57096d8ec684a0212a40bc05d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 4 Feb 2008 11:44:10 +0000 Subject: binutils* 2.17: fix avr32 --- .../binutils-2.17/500-avr32-atmel.1.3.0.patch | 111130 ++++++++++++++++++ .../501-avr32-fix-pool-alignment.patch | 26 + packages/binutils/binutils_2.17.bb | 8 +- 3 files changed, 111159 insertions(+), 5 deletions(-) create mode 100644 packages/binutils/binutils-2.17/500-avr32-atmel.1.3.0.patch create mode 100644 packages/binutils/binutils-2.17/501-avr32-fix-pool-alignment.patch diff --git a/packages/binutils/binutils-2.17/500-avr32-atmel.1.3.0.patch b/packages/binutils/binutils-2.17/500-avr32-atmel.1.3.0.patch new file mode 100644 index 0000000000..28a7f00804 --- /dev/null +++ b/packages/binutils/binutils-2.17/500-avr32-atmel.1.3.0.patch @@ -0,0 +1,111130 @@ +diff -Nrup binutils-2.17/bfd/aclocal.m4 binutils-2.17.atmel.1.3.0/bfd/aclocal.m4 +--- binutils-2.17/bfd/aclocal.m4 2005-09-30 20:38:50.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/aclocal.m4 2007-03-26 10:30:51.000000000 +0200 +@@ -1,4 +1,4 @@ +-# generated automatically by aclocal 1.9.5 -*- Autoconf -*- ++# generated automatically by aclocal 1.9.6 -*- Autoconf -*- + + # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + # 2005 Free Software Foundation, Inc. +@@ -28,7 +28,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api + # Call AM_AUTOMAKE_VERSION so it can be traced. + # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. + AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +- [AM_AUTOMAKE_VERSION([1.9.5])]) ++ [AM_AUTOMAKE_VERSION([1.9.6])]) + + # AM_AUX_DIR_EXPAND -*- Autoconf -*- + +diff -Nrup binutils-2.17/bfd/archures.c binutils-2.17.atmel.1.3.0/bfd/archures.c +--- binutils-2.17/bfd/archures.c 2006-03-06 14:42:03.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/archures.c 2007-03-26 10:20:30.000000000 +0200 +@@ -334,6 +334,9 @@ DESCRIPTION + .#define bfd_mach_avr3 3 + .#define bfd_mach_avr4 4 + .#define bfd_mach_avr5 5 ++. bfd_arch_avr32, {* Atmel AVR32 *} ++.#define bfd_mach_avr32_ap 7000 ++.#define bfd_mach_avr32_uc 3000 + . bfd_arch_bfin, {* ADI Blackfin *} + .#define bfd_mach_bfin 1 + . bfd_arch_cr16c, {* National Semiconductor CompactRISC. *} +@@ -423,6 +426,7 @@ extern const bfd_arch_info_type bfd_alph + extern const bfd_arch_info_type bfd_arc_arch; + extern const bfd_arch_info_type bfd_arm_arch; + extern const bfd_arch_info_type bfd_avr_arch; ++extern const bfd_arch_info_type bfd_avr32_arch; + extern const bfd_arch_info_type bfd_bfin_arch; + extern const bfd_arch_info_type bfd_cr16c_arch; + extern const bfd_arch_info_type bfd_cris_arch; +@@ -490,6 +494,7 @@ static const bfd_arch_info_type * const + &bfd_arc_arch, + &bfd_arm_arch, + &bfd_avr_arch, ++ &bfd_avr32_arch, + &bfd_bfin_arch, + &bfd_cr16c_arch, + &bfd_cris_arch, +diff -Nrup binutils-2.17/bfd/bfd-in2.h binutils-2.17.atmel.1.3.0/bfd/bfd-in2.h +--- binutils-2.17/bfd/bfd-in2.h 2006-03-26 01:38:42.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/bfd-in2.h 2007-03-26 10:33:41.000000000 +0200 +@@ -1931,6 +1931,9 @@ enum bfd_architecture + #define bfd_mach_avr3 3 + #define bfd_mach_avr4 4 + #define bfd_mach_avr5 5 ++ bfd_arch_avr32, /* Atmel AVR32 */ ++#define bfd_mach_avr32_ap 7000 ++#define bfd_mach_avr32_uc 3000 + bfd_arch_bfin, /* ADI Blackfin */ + #define bfd_mach_bfin 1 + bfd_arch_cr16c, /* National Semiconductor CompactRISC. */ +@@ -3577,6 +3580,87 @@ instructions */ + instructions */ + BFD_RELOC_AVR_6_ADIW, + ++/* Difference between two labels: L2 - L1. The value of L1 is encoded ++as sym + addend, while the initial difference after assembly is ++inserted into the object file by the assembler. */ ++ BFD_RELOC_AVR32_DIFF32, ++ BFD_RELOC_AVR32_DIFF16, ++ BFD_RELOC_AVR32_DIFF8, ++ ++/* Reference to a symbol through the Global Offset Table. The linker ++will allocate an entry for symbol in the GOT and insert the offset ++of this entry as the relocation value. */ ++ BFD_RELOC_AVR32_GOT32, ++ BFD_RELOC_AVR32_GOT16, ++ BFD_RELOC_AVR32_GOT8, ++ ++/* Normal (non-pc-relative) code relocations. Alignment and signedness ++is indicated by the suffixes. S means signed, U means unsigned. W ++means word-aligned, H means halfword-aligned, neither means ++byte-aligned (no alignment.) SUB5 is the same relocation as 16S. */ ++ BFD_RELOC_AVR32_21S, ++ BFD_RELOC_AVR32_16U, ++ BFD_RELOC_AVR32_16S, ++ BFD_RELOC_AVR32_SUB5, ++ BFD_RELOC_AVR32_8S_EXT, ++ BFD_RELOC_AVR32_8S, ++ ++/* PC-relative relocations are signed if neither 'U' nor 'S' is ++specified. However, we explicitly tack on a 'B' to indicate no ++alignment, to avoid confusion with data relocs. All of these resolve ++to sym + addend - offset, except the one with 'N' (negated) suffix. ++This particular one resolves to offset - sym - addend. */ ++ BFD_RELOC_AVR32_22H_PCREL, ++ BFD_RELOC_AVR32_18W_PCREL, ++ BFD_RELOC_AVR32_16B_PCREL, ++ BFD_RELOC_AVR32_16N_PCREL, ++ BFD_RELOC_AVR32_14UW_PCREL, ++ BFD_RELOC_AVR32_11H_PCREL, ++ BFD_RELOC_AVR32_10UW_PCREL, ++ BFD_RELOC_AVR32_9H_PCREL, ++ BFD_RELOC_AVR32_9UW_PCREL, ++ ++/* Subtract the link-time address of the GOT from (symbol + addend) ++and insert the result. */ ++ BFD_RELOC_AVR32_GOTPC, ++ ++/* Reference to a symbol through the GOT. The linker will allocate an ++entry for symbol in the GOT and insert the offset of this entry as ++the relocation value. addend must be zero. As usual, 'S' means ++signed, 'W' means word-aligned, etc. */ ++ BFD_RELOC_AVR32_GOTCALL, ++ BFD_RELOC_AVR32_LDA_GOT, ++ BFD_RELOC_AVR32_GOT21S, ++ BFD_RELOC_AVR32_GOT18SW, ++ BFD_RELOC_AVR32_GOT16S, ++ ++/* 32-bit constant pool entry. I don't think 8- and 16-bit entries make ++a whole lot of sense. */ ++ BFD_RELOC_AVR32_32_CPENT, ++ ++/* Constant pool references. Some of these relocations are signed, ++others are unsigned. It doesn't really matter, since the constant ++pool always comes after the code that references it. */ ++ BFD_RELOC_AVR32_CPCALL, ++ BFD_RELOC_AVR32_16_CP, ++ BFD_RELOC_AVR32_9W_CP, ++ ++/* sym must be the absolute symbol. The addend specifies the alignment ++order, e.g. if addend is 2, the linker must add padding so that the ++next address is aligned to a 4-byte boundary. */ ++ BFD_RELOC_AVR32_ALIGN, ++ ++/* Code relocations that will never make it to the output file. */ ++ BFD_RELOC_AVR32_14UW, ++ BFD_RELOC_AVR32_10UW, ++ BFD_RELOC_AVR32_10SW, ++ BFD_RELOC_AVR32_STHH_W, ++ BFD_RELOC_AVR32_7UW, ++ BFD_RELOC_AVR32_6S, ++ BFD_RELOC_AVR32_6UW, ++ BFD_RELOC_AVR32_4UH, ++ BFD_RELOC_AVR32_3U, ++ + /* Direct 12 bit. */ + BFD_RELOC_390_12, + +diff -Nrup binutils-2.17/bfd/config.bfd binutils-2.17.atmel.1.3.0/bfd/config.bfd +--- binutils-2.17/bfd/config.bfd 2006-04-05 14:41:57.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/config.bfd 2007-03-26 10:20:30.000000000 +0200 +@@ -317,6 +317,10 @@ case "${targ}" in + targ_underscore=yes + ;; + ++ avr32-*-*) ++ targ_defvec=bfd_elf32_avr32_vec ++ ;; ++ + c30-*-*aout* | tic30-*-*aout*) + targ_defvec=tic30_aout_vec + ;; +diff -Nrup binutils-2.17/bfd/config.in binutils-2.17.atmel.1.3.0/bfd/config.in +--- binutils-2.17/bfd/config.in 2005-11-03 17:06:10.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/config.in 2007-03-26 10:30:55.000000000 +0200 +@@ -313,18 +313,18 @@ + /* Define to the version of this package. */ + #undef PACKAGE_VERSION + +-/* The size of a `long', as computed by sizeof. */ ++/* The size of `long', as computed by sizeof. */ + #undef SIZEOF_LONG + +-/* The size of a `long long', as computed by sizeof. */ ++/* The size of `long long', as computed by sizeof. */ + #undef SIZEOF_LONG_LONG + +-/* The size of a `off_t', as computed by sizeof. */ ++/* The size of `off_t', as computed by sizeof. */ + #undef SIZEOF_OFF_T + + /* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be +- automatically deduced at run-time. ++ automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +@@ -368,8 +368,8 @@ + #undef inline + #endif + +-/* Define to `long' if does not define. */ ++/* Define to `long int' if does not define. */ + #undef off_t + +-/* Define to `unsigned' if does not define. */ ++/* Define to `unsigned int' if does not define. */ + #undef size_t +diff -Nrup binutils-2.17/bfd/configure binutils-2.17.atmel.1.3.0/bfd/configure +--- binutils-2.17/bfd/configure 2006-06-23 20:17:03.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/configure 2007-03-26 10:30:54.000000000 +0200 +@@ -1,25 +1,54 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.59. ++# Generated by GNU Autoconf 2.61. + # +-# Copyright (C) 2003 Free Software Foundation, Inc. ++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + # This configure script is free software; the Free Software Foundation + # gives unlimited permission to copy, distribute and modify it. + ## --------------------- ## + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++ ++ ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -29,8 +58,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi ++ + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -44,18 +108,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -63,157 +128,388 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + ++# CDPATH. ++$as_unset CDPATH + +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits + +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh ++if test "x$CONFIG_SHELL" = x; then ++ if (eval ":") 2>/dev/null; then ++ as_have_required=yes ++else ++ as_have_required=no ++fi ++ ++ if test $as_have_required = yes && (eval ": ++(as_func_return () { ++ (exit \$1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. + fi + ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi + +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi + +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test \$exitcode = 0) || { (exit 1); exit 1; } ++ ++( ++ as_lineno_1=\$LINENO ++ as_lineno_2=\$LINENO ++ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && ++ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ++") 2> /dev/null; then ++ : ++else ++ as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH + do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in ++ case $as_dir in + /*) +- if ("$as_dir/$as_base" -c ' ++ for as_base in sh bash ksh sh5; do ++ as_candidate_shells="$as_candidate_shells $as_dir/$as_base" ++ done;; ++ esac ++done ++IFS=$as_save_IFS ++ ++ ++ for as_shell in $as_candidate_shells $SHELL; do ++ # Try only shells that exist, to save several forks. ++ if { test -f "$as_shell" || test -f "$as_shell.exe"; } && ++ { ("$as_shell") 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++: ++_ASEOF ++}; then ++ CONFIG_SHELL=$as_shell ++ as_have_required=yes ++ if { "$as_shell" 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++: ++(as_func_return () { ++ (exit $1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi ++ ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi ++ ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi ++ ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = "$1" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test $exitcode = 0) || { (exit 1); exit 1; } ++ ++( + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } ++ ++_ASEOF ++}; then ++ break ++fi ++ ++fi ++ ++ done ++ ++ if test "x$CONFIG_SHELL" != x; then ++ for as_var in BASH_ENV ENV ++ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++ done ++ export CONFIG_SHELL ++ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} ++fi ++ ++ ++ if test $as_have_required = no; then ++ echo This script requires a shell more modern than all the ++ echo shells that I found on your system. Please install a ++ echo modern shell, or manually run the script under such a ++ echo shell if you do have one. ++ { (exit 1); exit 1; } ++fi ++ ++ ++fi ++ ++fi ++ ++ ++ ++(eval "as_func_return () { ++ (exit \$1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi ++ ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi ++ ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi ++ ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test \$exitcode = 0") || { ++ echo No shell found that supports shell functions. ++ echo Please tell autoconf@gnu.org about your system, ++ echo including any error possibly output before this ++ echo message ++} ++ ++ ++ ++ as_lineno_1=$LINENO ++ as_lineno_2=$LINENO ++ test "x$as_lineno_1" != "x$as_lineno_2" && ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || ++ chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -222,7 +518,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -231,39 +548,27 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH + ++exec 7<&0 &1 + + # Name of the host. + # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, + # so uname gets run too. + ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +-exec 6>&1 +- + # + # Initializations. + # + ac_default_prefix=/usr/local ++ac_clean_files= + ac_config_libobj_dir=. ++LIBOBJS= + cross_compiling=no + subdirs= + MFLAGS= + MAKEFLAGS= + SHELL=${CONFIG_SHELL-/bin/sh} + +-# Maximum number of lines to put in a shell here document. +-# This variable seems obsolete. It should probably be removed, and +-# only ac_max_sed_lines should be used. +-: ${ac_max_here_lines=38} +- + # Identity of this package. + PACKAGE_NAME= + PACKAGE_TARNAME= +@@ -275,42 +580,199 @@ ac_unique_file="libbfd.c" + # Factoring default headers for most tests. + ac_includes_default="\ + #include +-#if HAVE_SYS_TYPES_H ++#ifdef HAVE_SYS_TYPES_H + # include + #endif +-#if HAVE_SYS_STAT_H ++#ifdef HAVE_SYS_STAT_H + # include + #endif +-#if STDC_HEADERS ++#ifdef STDC_HEADERS + # include + # include + #else +-# if HAVE_STDLIB_H ++# ifdef HAVE_STDLIB_H + # include + # endif + #endif +-#if HAVE_STRING_H +-# if !STDC_HEADERS && HAVE_MEMORY_H ++#ifdef HAVE_STRING_H ++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H + # include + # endif + # include + #endif +-#if HAVE_STRINGS_H ++#ifdef HAVE_STRINGS_H + # include + #endif +-#if HAVE_INTTYPES_H ++#ifdef HAVE_INTTYPES_H + # include +-#else +-# if HAVE_STDINT_H +-# include +-# endif + #endif +-#if HAVE_UNISTD_H ++#ifdef HAVE_STDINT_H ++# include ++#endif ++#ifdef HAVE_UNISTD_H + # include + #endif" + +-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE AR ac_ct_AR RANLIB ac_ct_RANLIB LN_S LIBTOOL WARN_CFLAGS NO_WERROR MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT INSTALL_LIBBFD_TRUE INSTALL_LIBBFD_FALSE host_noncanonical target_noncanonical bfdlibdir bfdincludedir CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l HDEFINES BFD_HOST_64BIT_LONG BFD_HOST_LONG_LONG BFD_HOST_64_BIT_DEFINED BFD_HOST_64_BIT BFD_HOST_U_64_BIT CC_FOR_BUILD EXEEXT_FOR_BUILD COREFILE COREFLAG WIN32LDFLAGS WIN32LIBADD TDEFINES wordsize bfd_libs all_backends bfd_backends bfd_machines bfd_default_target_size bfd_file_ptr bfd_ufile_ptr tdefaults datarootdir docdir htmldir LIBOBJS LTLIBOBJS' ++ac_subst_vars='SHELL ++PATH_SEPARATOR ++PACKAGE_NAME ++PACKAGE_TARNAME ++PACKAGE_VERSION ++PACKAGE_STRING ++PACKAGE_BUGREPORT ++exec_prefix ++prefix ++program_transform_name ++bindir ++sbindir ++libexecdir ++datarootdir ++datadir ++sysconfdir ++sharedstatedir ++localstatedir ++includedir ++oldincludedir ++docdir ++infodir ++htmldir ++dvidir ++pdfdir ++psdir ++libdir ++localedir ++mandir ++DEFS ++ECHO_C ++ECHO_N ++ECHO_T ++LIBS ++build_alias ++host_alias ++target_alias ++build ++build_cpu ++build_vendor ++build_os ++host ++host_cpu ++host_vendor ++host_os ++target ++target_cpu ++target_vendor ++target_os ++CC ++CFLAGS ++LDFLAGS ++CPPFLAGS ++ac_ct_CC ++EXEEXT ++OBJEXT ++INSTALL_PROGRAM ++INSTALL_SCRIPT ++INSTALL_DATA ++CYGPATH_W ++PACKAGE ++VERSION ++ACLOCAL ++AUTOCONF ++AUTOMAKE ++AUTOHEADER ++MAKEINFO ++install_sh ++STRIP ++INSTALL_STRIP_PROGRAM ++mkdir_p ++AWK ++SET_MAKE ++am__leading_dot ++AMTAR ++am__tar ++am__untar ++DEPDIR ++am__include ++am__quote ++AMDEP_TRUE ++AMDEP_FALSE ++AMDEPBACKSLASH ++CCDEPMODE ++am__fastdepCC_TRUE ++am__fastdepCC_FALSE ++AR ++RANLIB ++LN_S ++LIBTOOL ++WARN_CFLAGS ++NO_WERROR ++MAINTAINER_MODE_TRUE ++MAINTAINER_MODE_FALSE ++MAINT ++INSTALL_LIBBFD_TRUE ++INSTALL_LIBBFD_FALSE ++host_noncanonical ++target_noncanonical ++bfdlibdir ++bfdincludedir ++CPP ++GREP ++EGREP ++ALLOCA ++USE_NLS ++MSGFMT ++GMSGFMT ++XGETTEXT ++USE_INCLUDED_LIBINTL ++CATALOGS ++CATOBJEXT ++DATADIRNAME ++GMOFILES ++INSTOBJEXT ++INTLDEPS ++INTLLIBS ++INTLOBJS ++POFILES ++POSUB ++INCLUDE_LOCALE_H ++GT_NO ++GT_YES ++MKINSTALLDIRS ++l ++HDEFINES ++BFD_HOST_64BIT_LONG ++BFD_HOST_LONG_LONG ++BFD_HOST_64_BIT_DEFINED ++BFD_HOST_64_BIT ++BFD_HOST_U_64_BIT ++CC_FOR_BUILD ++EXEEXT_FOR_BUILD ++COREFILE ++COREFLAG ++WIN32LDFLAGS ++WIN32LIBADD ++TDEFINES ++wordsize ++bfd_libs ++all_backends ++bfd_backends ++bfd_machines ++bfd_default_target_size ++bfd_file_ptr ++bfd_ufile_ptr ++tdefaults ++LIBOBJS ++LTLIBOBJS' + ac_subst_files='' ++ ac_precious_vars='build_alias ++host_alias ++target_alias ++CC ++CFLAGS ++LDFLAGS ++LIBS ++CPPFLAGS ++CPP' ++ + + # Initialize some variables set by options. + ac_init_help= +@@ -337,34 +799,48 @@ x_libraries=NONE + # and all the variables that are supposed to be based on exec_prefix + # by default will actually change. + # Use braces instead of parens because sh, perl, etc. also accept them. ++# (The list follows the same order as the GNU Coding Standards.) + bindir='${exec_prefix}/bin' + sbindir='${exec_prefix}/sbin' + libexecdir='${exec_prefix}/libexec' +-datadir='${prefix}/share' ++datarootdir='${prefix}/share' ++datadir='${datarootdir}' + sysconfdir='${prefix}/etc' + sharedstatedir='${prefix}/com' + localstatedir='${prefix}/var' +-libdir='${exec_prefix}/lib' + includedir='${prefix}/include' + oldincludedir='/usr/include' +-infodir='${prefix}/info' +-mandir='${prefix}/man' ++docdir='${datarootdir}/doc/${PACKAGE}' ++infodir='${datarootdir}/info' ++htmldir='${docdir}' ++dvidir='${docdir}' ++pdfdir='${docdir}' ++psdir='${docdir}' ++libdir='${exec_prefix}/lib' ++localedir='${datarootdir}/locale' ++mandir='${datarootdir}/man' + + ac_prev= ++ac_dashdash= + for ac_option + do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then +- eval "$ac_prev=\$ac_option" ++ eval $ac_prev=\$ac_option + ac_prev= + continue + fi + +- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` ++ case $ac_option in ++ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; ++ *) ac_optarg=yes ;; ++ esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + +- case $ac_option in ++ case $ac_dashdash$ac_option in ++ --) ++ ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; +@@ -386,33 +862,45 @@ do + --config-cache | -C) + cache_file=config.cache ;; + +- -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ++ -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; +- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ +- | --da=*) ++ -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + ++ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ ++ | --dataroo | --dataro | --datar) ++ ac_prev=datarootdir ;; ++ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ ++ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) ++ datarootdir=$ac_optarg ;; ++ + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- eval "enable_$ac_feature=no" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=no ;; ++ ++ -docdir | --docdir | --docdi | --doc | --do) ++ ac_prev=docdir ;; ++ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) ++ docdir=$ac_optarg ;; ++ ++ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ++ ac_prev=dvidir ;; ++ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) ++ dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "enable_$ac_feature='$ac_optarg'" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ +@@ -439,6 +927,12 @@ do + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + ++ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ++ ac_prev=htmldir ;; ++ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ ++ | --ht=*) ++ htmldir=$ac_optarg ;; ++ + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; +@@ -463,13 +957,16 @@ do + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + ++ -localedir | --localedir | --localedi | --localed | --locale) ++ ac_prev=localedir ;; ++ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) ++ localedir=$ac_optarg ;; ++ + -localstatedir | --localstatedir | --localstatedi | --localstated \ +- | --localstate | --localstat | --localsta | --localst \ +- | --locals | --local | --loca | --loc | --lo) ++ | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ +- | --localstate=* | --localstat=* | --localsta=* | --localst=* \ +- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) ++ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) +@@ -534,6 +1031,16 @@ do + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + ++ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ++ ac_prev=pdfdir ;; ++ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) ++ pdfdir=$ac_optarg ;; ++ ++ -psdir | --psdir | --psdi | --psd | --ps) ++ ac_prev=psdir ;; ++ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) ++ psdir=$ac_optarg ;; ++ + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; +@@ -586,24 +1093,20 @@ do + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package| sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "with_$ac_package='$ac_optarg'" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package | sed 's/-/_/g'` +- eval "with_$ac_package=no" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. +@@ -634,8 +1137,7 @@ Try \`$0 --help' for more information." + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } +- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` +- eval "$ac_envvar='$ac_optarg'" ++ eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) +@@ -655,27 +1157,19 @@ if test -n "$ac_prev"; then + { (exit 1); exit 1; }; } + fi + +-# Be sure to have absolute paths. +-for ac_var in exec_prefix prefix +-do +- eval ac_val=$`echo $ac_var` +- case $ac_val in +- [\\/$]* | ?:[\\/]* | NONE | '' ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; +- esac +-done +- +-# Be sure to have absolute paths. +-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ +- localstatedir libdir includedir oldincludedir infodir mandir ++# Be sure to have absolute directory names. ++for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ ++ datadir sysconfdir sharedstatedir localstatedir includedir \ ++ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ ++ libdir localedir mandir + do +- eval ac_val=$`echo $ac_var` ++ eval ac_val=\$$ac_var + case $ac_val in +- [\\/$]* | ?:[\\/]* ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; ++ [\\/$]* | ?:[\\/]* ) continue;; ++ NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac ++ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 ++ { (exit 1); exit 1; }; } + done + + # There might be people who depend on the old broken behavior: `$host' +@@ -702,74 +1196,76 @@ test -n "$host_alias" && ac_tool_prefix= + test "$silent" = yes && exec 6>/dev/null + + ++ac_pwd=`pwd` && test -n "$ac_pwd" && ++ac_ls_di=`ls -di .` && ++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || ++ { echo "$as_me: error: Working directory cannot be determined" >&2 ++ { (exit 1); exit 1; }; } ++test "X$ac_ls_di" = "X$ac_pwd_ls_di" || ++ { echo "$as_me: error: pwd does not report name of working directory" >&2 ++ { (exit 1); exit 1; }; } ++ ++ + # Find the source files, if location was not specified. + if test -z "$srcdir"; then + ac_srcdir_defaulted=yes +- # Try the directory containing this script, then its parent. +- ac_confdir=`(dirname "$0") 2>/dev/null || ++ # Try the directory containing this script, then the parent directory. ++ ac_confdir=`$as_dirname -- "$0" || + $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X"$0" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + srcdir=$ac_confdir +- if test ! -r $srcdir/$ac_unique_file; then ++ if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi + else + ac_srcdir_defaulted=no + fi +-if test ! -r $srcdir/$ac_unique_file; then +- if test "$ac_srcdir_defaulted" = yes; then +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 +- { (exit 1); exit 1; }; } +- else +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 +- { (exit 1); exit 1; }; } +- fi +-fi +-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || +- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 +- { (exit 1); exit 1; }; } +-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +-ac_env_build_alias_set=${build_alias+set} +-ac_env_build_alias_value=$build_alias +-ac_cv_env_build_alias_set=${build_alias+set} +-ac_cv_env_build_alias_value=$build_alias +-ac_env_host_alias_set=${host_alias+set} +-ac_env_host_alias_value=$host_alias +-ac_cv_env_host_alias_set=${host_alias+set} +-ac_cv_env_host_alias_value=$host_alias +-ac_env_target_alias_set=${target_alias+set} +-ac_env_target_alias_value=$target_alias +-ac_cv_env_target_alias_set=${target_alias+set} +-ac_cv_env_target_alias_value=$target_alias +-ac_env_CC_set=${CC+set} +-ac_env_CC_value=$CC +-ac_cv_env_CC_set=${CC+set} +-ac_cv_env_CC_value=$CC +-ac_env_CFLAGS_set=${CFLAGS+set} +-ac_env_CFLAGS_value=$CFLAGS +-ac_cv_env_CFLAGS_set=${CFLAGS+set} +-ac_cv_env_CFLAGS_value=$CFLAGS +-ac_env_LDFLAGS_set=${LDFLAGS+set} +-ac_env_LDFLAGS_value=$LDFLAGS +-ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +-ac_cv_env_LDFLAGS_value=$LDFLAGS +-ac_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_env_CPPFLAGS_value=$CPPFLAGS +-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_cv_env_CPPFLAGS_value=$CPPFLAGS +-ac_env_CPP_set=${CPP+set} +-ac_env_CPP_value=$CPP +-ac_cv_env_CPP_set=${CPP+set} +-ac_cv_env_CPP_value=$CPP ++if test ! -r "$srcdir/$ac_unique_file"; then ++ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." ++ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 ++ { (exit 1); exit 1; }; } ++fi ++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ++ac_abs_confdir=`( ++ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 ++ { (exit 1); exit 1; }; } ++ pwd)` ++# When building in place, set srcdir=. ++if test "$ac_abs_confdir" = "$ac_pwd"; then ++ srcdir=. ++fi ++# Remove unnecessary trailing slashes from srcdir. ++# Double slashes in file names in object file debugging info ++# mess up M-x gdb in Emacs. ++case $srcdir in ++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; ++esac ++for ac_var in $ac_precious_vars; do ++ eval ac_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_env_${ac_var}_value=\$${ac_var} ++ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_cv_env_${ac_var}_value=\$${ac_var} ++done + + # + # Report the --help message. +@@ -798,9 +1294,6 @@ Configuration: + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +-_ACEOF +- +- cat <<_ACEOF + Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] +@@ -818,15 +1311,22 @@ Fine tuning of the installation director + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] +- --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] +- --infodir=DIR info documentation [PREFIX/info] +- --mandir=DIR man documentation [PREFIX/man] ++ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] ++ --datadir=DIR read-only architecture-independent data [DATAROOTDIR] ++ --infodir=DIR info documentation [DATAROOTDIR/info] ++ --localedir=DIR locale-dependent data [DATAROOTDIR/locale] ++ --mandir=DIR man documentation [DATAROOTDIR/man] ++ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] ++ --htmldir=DIR html documentation [DOCDIR] ++ --dvidir=DIR dvi documentation [DOCDIR] ++ --pdfdir=DIR pdf documentation [DOCDIR] ++ --psdir=DIR ps documentation [DOCDIR] + _ACEOF + + cat <<\_ACEOF +@@ -880,126 +1380,95 @@ Some influential environment variables: + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory +- CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have +- headers in a nonstandard directory ++ LIBS libraries to pass to the linker, e.g. -l ++ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if ++ you have headers in a nonstandard directory + CPP C preprocessor + + Use these variables to override the choices made by `configure' or to help + it to find libraries and programs with nonstandard names/locations. + + _ACEOF ++ac_status=$? + fi + + if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. +- ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue +- test -d $ac_dir || continue ++ test -d "$ac_dir" || continue + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac +- +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac +- +- cd $ac_dir +- # Check for guested configure; otherwise get Cygnus style configure. +- if test -f $ac_srcdir/configure.gnu; then +- echo +- $SHELL $ac_srcdir/configure.gnu --help=recursive +- elif test -f $ac_srcdir/configure; then +- echo +- $SHELL $ac_srcdir/configure --help=recursive +- elif test -f $ac_srcdir/configure.ac || +- test -f $ac_srcdir/configure.in; then +- echo +- $ac_configure --help ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix ++ ++ cd "$ac_dir" || { ac_status=$?; continue; } ++ # Check for guested configure. ++ if test -f "$ac_srcdir/configure.gnu"; then ++ echo && ++ $SHELL "$ac_srcdir/configure.gnu" --help=recursive ++ elif test -f "$ac_srcdir/configure"; then ++ echo && ++ $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 +- fi +- cd $ac_popdir ++ fi || ac_status=$? ++ cd "$ac_pwd" || { ac_status=$?; break; } + done + fi + +-test -n "$ac_init_help" && exit 0 ++test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF ++configure ++generated by GNU Autoconf 2.61 + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + This configure script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it. + _ACEOF +- exit 0 ++ exit + fi +-exec 5>config.log +-cat >&5 <<_ACEOF ++cat >config.log <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + + It was created by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + + _ACEOF ++exec 5>>config.log + { + cat <<_ASUNAME + ## --------- ## +@@ -1018,7 +1487,7 @@ uname -v = `(uname -v) 2>/dev/null || ec + /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` + /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` + /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +-hostinfo = `(hostinfo) 2>/dev/null || echo unknown` ++/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` + /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` + /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` + /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +@@ -1032,6 +1501,7 @@ do + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" + done ++IFS=$as_save_IFS + + } >&5 + +@@ -1053,7 +1523,6 @@ _ACEOF + ac_configure_args= + ac_configure_args0= + ac_configure_args1= +-ac_sep= + ac_must_keep_next=false + for ac_pass in 1 2 + do +@@ -1064,7 +1533,7 @@ do + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ++ *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in +@@ -1086,9 +1555,7 @@ do + -* ) ac_must_keep_next=true ;; + esac + fi +- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" +- # Get rid of the leading space. +- ac_sep=" " ++ ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +@@ -1099,8 +1566,8 @@ $as_unset ac_configure_args1 || test "${ + # When interrupted or exit'd, cleanup temporary files, and complete + # config.log. We remove comments because anyway the quotes in there + # would cause problems or look ugly. +-# WARNING: Be sure not to use single quotes in there, as some shells, +-# such as our DU 5.0 friend, will then `close' the trap. ++# WARNING: Use '\'' to represent an apostrophe within the trap. ++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. + trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { +@@ -1113,20 +1580,34 @@ trap 'exit_status=$? + _ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done + (set) 2>&1 | +- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + sed -n \ +- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; +- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" +- ;; ++ "s/'\''/'\''\\\\'\'''\''/g; ++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ++ ;; #( + *) +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} ++ esac | ++ sort ++) + echo + + cat <<\_ASBOX +@@ -1137,22 +1618,28 @@ _ASBOX + echo + for ac_var in $ac_subst_vars + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +-## ------------- ## +-## Output files. ## +-## ------------- ## ++## ------------------- ## ++## File substitutions. ## ++## ------------------- ## + _ASBOX + echo + for ac_var in $ac_subst_files + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi +@@ -1164,26 +1651,24 @@ _ASBOX + ## ----------- ## + _ASBOX + echo +- sed "/^$/d" confdefs.h | sort ++ cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 +- rm -f core *.core && +- rm -rf conftest* confdefs* conf$$* $ac_clean_files && ++ rm -f core *.core core.conftest.* && ++ rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +- ' 0 ++' 0 + for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + done + ac_signal=0 + + # confdefs.h avoids OS command line length limits that DEFS can exceed. +-rm -rf conftest* confdefs.h +-# AIX cpp loses on an empty file, so make sure it contains at least a newline. +-echo >confdefs.h ++rm -f -r conftest* confdefs.h + + # Predefined preprocessor variables. + +@@ -1214,14 +1699,17 @@ _ACEOF + + # Let the site file select an alternate cache file if it wants to. + # Prefer explicitly selected file to automatically selected ones. +-if test -z "$CONFIG_SITE"; then +- if test "x$prefix" != xNONE; then +- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" +- else +- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" +- fi ++if test -n "$CONFIG_SITE"; then ++ set x "$CONFIG_SITE" ++elif test "x$prefix" != xNONE; then ++ set x "$prefix/share/config.site" "$prefix/etc/config.site" ++else ++ set x "$ac_default_prefix/share/config.site" \ ++ "$ac_default_prefix/etc/config.site" + fi +-for ac_site_file in $CONFIG_SITE; do ++shift ++for ac_site_file ++do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 + echo "$as_me: loading site script $ac_site_file" >&6;} +@@ -1237,8 +1725,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -1250,12 +1738,11 @@ fi + # Check that the precious variables saved in the cache have kept the same + # value. + ac_cache_corrupted=false +-for ac_var in `(set) 2>&1 | +- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do ++for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set +- eval ac_old_val="\$ac_cv_env_${ac_var}_value" +- eval ac_new_val="\$ac_env_${ac_var}_value" ++ eval ac_old_val=\$ac_cv_env_${ac_var}_value ++ eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +@@ -1280,8 +1767,7 @@ echo "$as_me: current value: $ac_new_v + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) +- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; ++ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in +@@ -1298,12 +1784,6 @@ echo "$as_me: error: run \`make distclea + { (exit 1); exit 1; }; } + fi + +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- + + + +@@ -1320,109 +1800,164 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + ac_aux_dir= +-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do +- if test -f $ac_dir/install-sh; then ++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do ++ if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break +- elif test -f $ac_dir/install.sh; then ++ elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break +- elif test -f $ac_dir/shtool; then ++ elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi + done + if test -z "$ac_aux_dir"; then +- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} ++ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 ++echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } + fi +-ac_config_guess="$SHELL $ac_aux_dir/config.guess" +-ac_config_sub="$SHELL $ac_aux_dir/config.sub" +-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. ++ ++# These three variables are undocumented and unsupported, ++# and are intended to be withdrawn in a future Autoconf release. ++# They can cause serious problems if a builder's source tree is in a directory ++# whose full name contains unusual characters. ++ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ++ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ++ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ++ + + # Make sure we can run config.sub. +-$ac_config_sub sun4 >/dev/null 2>&1 || +- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +-echo "$as_me: error: cannot run $ac_config_sub" >&2;} ++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || ++ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 ++echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +-echo "$as_me:$LINENO: checking build system type" >&5 +-echo $ECHO_N "checking build system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking build system type" >&5 ++echo $ECHO_N "checking build system type... $ECHO_C" >&6; } + if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_build_alias=$build_alias +-test -z "$ac_cv_build_alias" && +- ac_cv_build_alias=`$ac_config_guess` +-test -z "$ac_cv_build_alias" && ++ ac_build_alias=$build_alias ++test "x$ac_build_alias" = x && ++ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` ++test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 + echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} ++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + + fi +-echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +-echo "${ECHO_T}$ac_cv_build" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 ++echo "${ECHO_T}$ac_cv_build" >&6; } ++case $ac_cv_build in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 ++echo "$as_me: error: invalid value of canonical build" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + build=$ac_cv_build +-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_build ++shift ++build_cpu=$1 ++build_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++build_os=$* ++IFS=$ac_save_IFS ++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking host system type" >&5 +-echo $ECHO_N "checking host system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking host system type" >&5 ++echo $ECHO_N "checking host system type... $ECHO_C" >&6; } + if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_host_alias=$host_alias +-test -z "$ac_cv_host_alias" && +- ac_cv_host_alias=$ac_cv_build_alias +-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} ++ if test "x$host_alias" = x; then ++ ac_cv_host=$ac_cv_build ++else ++ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +-echo "${ECHO_T}$ac_cv_host" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 ++echo "${ECHO_T}$ac_cv_host" >&6; } ++case $ac_cv_host in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 ++echo "$as_me: error: invalid value of canonical host" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + host=$ac_cv_host +-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_host ++shift ++host_cpu=$1 ++host_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++host_os=$* ++IFS=$ac_save_IFS ++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking target system type" >&5 +-echo $ECHO_N "checking target system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking target system type" >&5 ++echo $ECHO_N "checking target system type... $ECHO_C" >&6; } + if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_target_alias=$target_alias +-test "x$ac_cv_target_alias" = "x" && +- ac_cv_target_alias=$ac_cv_host_alias +-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} ++ if test "x$target_alias" = x; then ++ ac_cv_target=$ac_cv_host ++else ++ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +-echo "${ECHO_T}$ac_cv_target" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 ++echo "${ECHO_T}$ac_cv_target" >&6; } ++case $ac_cv_target in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 ++echo "$as_me: error: invalid value of canonical target" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + target=$ac_cv_target +-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_target ++shift ++target_cpu=$1 ++target_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++target_os=$* ++IFS=$ac_save_IFS ++case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + + # The aliases save the names the user supplied, while $host etc. +@@ -1439,8 +1974,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1453,32 +1988,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1491,36 +2028,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1533,74 +2085,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1614,7 +2126,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -1625,6 +2137,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -1642,22 +2155,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1670,36 +2184,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1712,29 +2228,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -1747,21 +2279,35 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +@@ -1786,47 +2332,77 @@ ac_clean_files="$ac_clean_files a.out a. + # Try to create an executable without -o first, disregard a.out. + # It will help us diagnose broken compilers, and finding out an intuition + # of exeext. +-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 ++echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } + ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 +- (eval $ac_link_default) 2>&5 ++# ++# List of possible output files, starting from the most likely. ++# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) ++# only as a last resort. b.out is created by i960 compilers. ++ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' ++# ++# The IRIX 6 linker writes into existing files which may not be ++# executable, retaining their permissions. Remove them first so a ++# subsequent execution test works. ++ac_rmfiles= ++for ac_file in $ac_files ++do ++ case $ac_file in ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; ++ * ) ac_rmfiles="$ac_rmfiles $ac_file";; ++ esac ++done ++rm -f $ac_rmfiles ++ ++if { (ac_try="$ac_link_default" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- # Find the output, starting from the most likely. This scheme is +-# not robust to junk in `.', hence go to wildcards (a.*) only as a last +-# resort. +- +-# Be careful to initialize this variable, since it used to be cached. +-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +-ac_cv_exeext= +-# b.out is created by i960 compilers. +-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out ++ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. ++# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' ++# in a Makefile. We should not override ac_cv_exeext if it was cached, ++# so that the user can short-circuit this test for compilers unknown to ++# Autoconf. ++for ac_file in $ac_files '' + do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) +- ;; +- conftest.$ac_ext ) +- # This is the source file. ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) +- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- # FIXME: I believe we export ac_cv_exeext for Libtool, +- # but it would be cool to find out if it's true. Does anybody +- # maintain Libtool? --akim. +- export ac_cv_exeext ++ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; ++ then :; else ++ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` ++ fi ++ # We set ac_cv_exeext here because the later test for it is not ++ # safe: cross compilers may not add the suffix if given an `-o' ++ # argument, so we may need to know it at that point already. ++ # Even if this section looks crufty: it has the advantage of ++ # actually working. + break;; + * ) + break;; + esac + done ++test "$ac_cv_exeext" = no && ac_cv_exeext= ++ + else ++ ac_file='' ++fi ++ ++{ echo "$as_me:$LINENO: result: $ac_file" >&5 ++echo "${ECHO_T}$ac_file" >&6; } ++if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +@@ -1838,19 +2414,21 @@ See \`config.log' for more details." >&2 + fi + + ac_exeext=$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_file" >&5 +-echo "${ECHO_T}$ac_file" >&6 + +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 ++echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } + # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 + # If not cross compiling, check that we can run a simple program. + if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -1869,22 +2447,27 @@ See \`config.log' for more details." >&2 + fi + fi + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + + rm -f a.out a.exe conftest$ac_cv_exeext b.out + ac_clean_files=$ac_clean_files_save +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +-echo "$as_me:$LINENO: result: $cross_compiling" >&5 +-echo "${ECHO_T}$cross_compiling" >&6 +- +-echo "$as_me:$LINENO: checking for suffix of executables" >&5 +-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 ++echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } ++{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 ++echo "${ECHO_T}$cross_compiling" >&6; } ++ ++{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 ++echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +@@ -1895,9 +2478,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_l + for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- export ac_cv_exeext + break;; + * ) break;; + esac +@@ -1911,14 +2493,14 @@ See \`config.log' for more details." >&2 + fi + + rm -f conftest$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +-echo "${ECHO_T}$ac_cv_exeext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 ++echo "${ECHO_T}$ac_cv_exeext" >&6; } + + rm -f conftest.$ac_ext + EXEEXT=$ac_cv_exeext + ac_exeext=$EXEEXT +-echo "$as_me:$LINENO: checking for suffix of object files" >&5 +-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 ++echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } + if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1938,14 +2520,20 @@ main () + } + _ACEOF + rm -f conftest.o conftest.obj +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>&5 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do ++ for ac_file in conftest.o conftest.obj conftest.*; do ++ test -f "$ac_file" || continue; + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +@@ -1963,12 +2551,12 @@ fi + + rm -f conftest.$ac_cv_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +-echo "${ECHO_T}$ac_cv_objext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 ++echo "${ECHO_T}$ac_cv_objext" >&6; } + OBJEXT=$ac_cv_objext + ac_objext=$OBJEXT +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1991,50 +2579,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -2050,38 +2637,118 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no ++ + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } + if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS + elif test $ac_cv_prog_cc_g = yes; then +@@ -2097,12 +2764,12 @@ else + CFLAGS= + fi + fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_prog_cc_stdc=no ++ ac_cv_prog_cc_c89=no + ac_save_CC=$CC + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -2136,12 +2803,17 @@ static char *f (char * (*g) (char **, in + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get ++ as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ ++ that's true only with -std. */ + int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ + int test (int i, double x); + struct s1 {int (*f) (int a);}; + struct s2 {int (*f) (double a);}; +@@ -2156,335 +2828,144 @@ return f (e, argv, 0) != argv[0] || f + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" + do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext ++ ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest.$ac_ext conftest.$ac_objext ++rm -f conftest.$ac_ext + CC=$ac_save_CC + + fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; + *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + esac + +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. ++ ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++{ echo "$as_me:$LINENO: checking for library containing strerror" >&5 ++echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } ++if test "${ac_cv_search_strerror+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_func_search_save_LIBS=$LIBS + cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-$ac_declaration +-#include ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char strerror (); + int + main () + { +-exit (42); ++return strerror (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++for ac_lib in '' cposix; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_strerror=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-continue +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h +-fi +- +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_strerror+set}" = set; then ++ break + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +-echo "$as_me:$LINENO: checking for library containing strerror" >&5 +-echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 ++done + if test "${ac_cv_search_strerror+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_func_search_save_LIBS=$LIBS +-ac_cv_search_strerror=no +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="none required" +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_strerror" = no; then +- for ac_lib in cposix; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="-l$ac_lib" +-break ++ : + else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++ ac_cv_search_strerror=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 +-echo "${ECHO_T}$ac_cv_search_strerror" >&6 +-if test "$ac_cv_search_strerror" != no; then +- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 ++echo "${ECHO_T}$ac_cv_search_strerror" >&6; } ++ac_res=$ac_cv_search_strerror ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + +@@ -2503,8 +2984,8 @@ am__api_version="1.9" + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -2526,7 +3007,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -2545,21 +3026,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -2569,8 +3051,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR + + test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +-echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 ++echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } + # Just in case + sleep 1 + echo timestamp > conftest.file +@@ -2612,20 +3094,20 @@ echo "$as_me: error: newly created file + Check your system clock" >&2;} + { (exit 1); exit 1; }; } + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + test "$program_prefix" != NONE && +- program_transform_name="s,^,$program_prefix,;$program_transform_name" ++ program_transform_name="s&^&$program_prefix&;$program_transform_name" + # Use a double $ so make ignores it. + test "$program_suffix" != NONE && +- program_transform_name="s,\$,$program_suffix,;$program_transform_name" ++ program_transform_name="s&\$&$program_suffix&;$program_transform_name" + # Double any \ or $. echo might interpret backslashes. + # By default was `s,x,x', remove it if useless. + cat <<\_ACEOF >conftest.sed + s/[\\$]/&&/g;s/;s,x,x,$// + _ACEOF + program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +-rm conftest.sed ++rm -f conftest.sed + + # expand $ac_aux_dir to an absolute path + am_aux_dir=`cd $ac_aux_dir && pwd` +@@ -2677,8 +3159,8 @@ for ac_prog in gawk mawk nawk awk + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2691,54 +3173,57 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + AWK=$ac_cv_prog_AWK + if test -n "$AWK"; then +- echo "$as_me:$LINENO: result: $AWK" >&5 +-echo "${ECHO_T}$AWK" >&6 ++ { echo "$as_me:$LINENO: result: $AWK" >&5 ++echo "${ECHO_T}$AWK" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$AWK" && break + done + +-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 ++echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } ++set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` ++if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.make <<\_ACEOF ++SHELL = /bin/sh + all: +- @echo 'ac_maketemp="$(MAKE)"' ++ @echo '@@@%%%=$(MAKE)=@@@%%%' + _ACEOF + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. +-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +-if test -n "$ac_maketemp"; then +- eval ac_cv_prog_make_${ac_make}_set=yes +-else +- eval ac_cv_prog_make_${ac_make}_set=no +-fi ++case `${MAKE-make} -f conftest.make 2>/dev/null` in ++ *@@@%%%=?*=@@@%%%*) ++ eval ac_cv_prog_make_${ac_make}_set=yes;; ++ *) ++ eval ac_cv_prog_make_${ac_make}_set=no;; ++esac + rm -f conftest.make + fi +-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + SET_MAKE= + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" + fi + +@@ -2753,7 +3238,7 @@ rmdir .tst 2>/dev/null + + DEPDIR="${am__leading_dot}deps" + +- ac_config_commands="$ac_config_commands depfiles" ++ac_config_commands="$ac_config_commands depfiles" + + + am_make=${MAKE-make} +@@ -2763,8 +3248,8 @@ am__doit: + .PHONY: am__doit + END + # If we don't find an include directive, just comment out the code. +-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 ++echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } + am__include="#" + am__quote= + _am_result=none +@@ -2791,15 +3276,15 @@ if test "$am__include" = "#"; then + fi + + +-echo "$as_me:$LINENO: result: $_am_result" >&5 +-echo "${ECHO_T}$_am_result" >&6 ++{ echo "$as_me:$LINENO: result: $_am_result" >&5 ++echo "${ECHO_T}$_am_result" >&6; } + rm -f confinc confmf + +-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. ++# Check whether --enable-dependency-tracking was given. + if test "${enable_dependency_tracking+set}" = set; then +- enableval="$enable_dependency_tracking" ++ enableval=$enable_dependency_tracking; ++fi + +-fi; + if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +@@ -2836,7 +3321,7 @@ fi + + # Define the identity of the package. + PACKAGE=bfd +- VERSION=2.17 ++ VERSION=2.17.atmel.0.0.99 + + + cat >>confdefs.h <<_ACEOF +@@ -2874,8 +3359,8 @@ if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2888,32 +3373,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2926,27 +3413,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -2967,8 +3468,8 @@ am__tar='${AMTAR} chof - "$$tardir"'; am + + depcc="$CC" am_compiler_list= + +-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 ++echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } + if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3057,8 +3558,8 @@ else + fi + + fi +-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 ++echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } + CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + +@@ -3079,8 +3580,8 @@ fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. + set dummy ${ac_tool_prefix}ar; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3093,32 +3594,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + AR=$ac_cv_prog_AR + if test -n "$AR"; then +- echo "$as_me:$LINENO: result: $AR" >&5 +-echo "${ECHO_T}$AR" >&6 ++ { echo "$as_me:$LINENO: result: $AR" >&5 ++echo "${ECHO_T}$AR" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. + set dummy ar; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3131,26 +3634,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_AR=$ac_cv_prog_ac_ct_AR + if test -n "$ac_ct_AR"; then +- echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +-echo "${ECHO_T}$ac_ct_AR" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 ++echo "${ECHO_T}$ac_ct_AR" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- AR=$ac_ct_AR ++ if test "x$ac_ct_AR" = x; then ++ AR="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ AR=$ac_ct_AR ++ fi + else + AR="$ac_cv_prog_AR" + fi +@@ -3158,8 +3676,8 @@ fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3172,32 +3690,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3210,36 +3730,49 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi + + +-# Check whether --enable-shared or --disable-shared was given. ++# Check whether --enable-shared was given. + if test "${enable_shared+set}" = set; then +- enableval="$enable_shared" +- p=${PACKAGE-default} ++ enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; +@@ -3257,12 +3790,12 @@ no) enable_shared=no ;; + esac + else + enable_shared=no +-fi; ++fi ++ + +-# Check whether --enable-static or --disable-static was given. ++# Check whether --enable-static was given. + if test "${enable_static+set}" = set; then +- enableval="$enable_static" +- p=${PACKAGE-default} ++ enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; +@@ -3280,11 +3813,11 @@ no) enable_static=no ;; + esac + else + enable_static=yes +-fi; +-# Check whether --enable-fast-install or --disable-fast-install was given. ++fi ++ ++# Check whether --enable-fast-install was given. + if test "${enable_fast_install+set}" = set; then +- enableval="$enable_fast_install" +- p=${PACKAGE-default} ++ enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; +@@ -3302,20 +3835,21 @@ no) enable_fast_install=no ;; + esac + else + enable_fast_install=yes +-fi; ++fi ++ + +-# Check whether --with-gnu-ld or --without-gnu-ld was given. ++# Check whether --with-gnu-ld was given. + if test "${with_gnu_ld+set}" = set; then +- withval="$with_gnu_ld" +- test "$withval" = no || with_gnu_ld=yes ++ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes + else + with_gnu_ld=no +-fi; ++fi ++ + ac_prog=ld + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. +- echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 ++echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw +@@ -3344,11 +3878,11 @@ echo $ECHO_N "checking for ld used by GC + ;; + esac + elif test "$with_gnu_ld" = yes; then +- echo "$as_me:$LINENO: checking for GNU ld" >&5 +-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for GNU ld" >&5 ++echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } + else +- echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 ++echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } + fi + if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -3377,17 +3911,17 @@ fi + + LD="$lt_cv_path_LD" + if test -n "$LD"; then +- echo "$as_me:$LINENO: result: $LD" >&5 +-echo "${ECHO_T}$LD" >&6 ++ { echo "$as_me:$LINENO: result: $LD" >&5 ++echo "${ECHO_T}$LD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 + echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 ++echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } + if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3398,25 +3932,25 @@ else + lt_cv_prog_gnu_ld=no + fi + fi +-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 +-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 ++echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } + with_gnu_ld=$lt_cv_prog_gnu_ld + + +-echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 ++echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } + if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + lt_cv_ld_reload_flag='-r' + fi +-echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +-echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 ++echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } + reload_flag=$lt_cv_ld_reload_flag + test -n "$reload_flag" && reload_flag=" $reload_flag" + +-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 ++echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } + if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3451,22 +3985,22 @@ fi + fi + + NM="$lt_cv_path_NM" +-echo "$as_me:$LINENO: result: $NM" >&5 +-echo "${ECHO_T}$NM" >&6 ++{ echo "$as_me:$LINENO: result: $NM" >&5 ++echo "${ECHO_T}$NM" >&6; } + +-echo "$as_me:$LINENO: checking whether ln -s works" >&5 +-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 ++echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } + LN_S=$as_ln_s + if test "$LN_S" = "ln -s"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + else +- echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +-echo "${ECHO_T}no, using $LN_S" >&6 ++ { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 ++echo "${ECHO_T}no, using $LN_S" >&6; } + fi + +-echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 +-echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 ++echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6; } + if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3628,8 +4162,8 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + esac + + fi +-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 ++echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } + file_magic_cmd=$lt_cv_file_magic_cmd + deplibs_check_method=$lt_cv_deplibs_check_method + +@@ -3639,8 +4173,8 @@ deplibs_check_method=$lt_cv_deplibs_chec + # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + + # find the maximum length of command line arguments +-echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +-echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 ++echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } + if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3691,11 +4225,11 @@ else + fi + + if test -n "$lt_cv_sys_max_cmd_len" ; then +- echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +-echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 ++ { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 ++echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } + else +- echo "$as_me:$LINENO: result: none" >&5 +-echo "${ECHO_T}none" >&6 ++ { echo "$as_me:$LINENO: result: none" >&5 ++echo "${ECHO_T}none" >&6; } + fi + + +@@ -3703,8 +4237,8 @@ fi + case $deplibs_check_method in + file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then +- echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 ++echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3758,17 +4292,17 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then +- echo "$as_me:$LINENO: checking for file" >&5 +-echo $ECHO_N "checking for file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for file" >&5 ++echo $ECHO_N "checking for file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3822,11 +4356,11 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + else +@@ -3841,8 +4375,8 @@ esac + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3855,32 +4389,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3893,27 +4429,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -3921,8 +4471,8 @@ fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3935,32 +4485,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3973,27 +4525,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -4008,22 +4574,22 @@ test "$GCC" = yes && libtool_flags="$lib + test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + + +-# Check whether --enable-libtool-lock or --disable-libtool-lock was given. ++# Check whether --enable-libtool-lock was given. + if test "${enable_libtool_lock+set}" = set; then +- enableval="$enable_libtool_lock" ++ enableval=$enable_libtool_lock; ++fi + +-fi; + test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" + test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + + +-# Check whether --with-pic or --without-pic was given. ++# Check whether --with-pic was given. + if test "${with_pic+set}" = set; then +- withval="$with_pic" +- pic_mode="$withval" ++ withval=$with_pic; pic_mode="$withval" + else + pic_mode=default +-fi; ++fi ++ + test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" + test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" + +@@ -4032,7 +4598,7 @@ test x"$pic_mode" = xno && libtool_flags + case $host in + *-*-irix6*) + # Find out which ABI we are using. +- echo '#line 4035 "configure"' > conftest.$ac_ext ++ echo '#line 4601 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? +@@ -4137,13 +4703,12 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*li + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" +- echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 ++echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } + if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + +- + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -4166,35 +4731,32 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-lt_cv_cc_needs_belf=no ++ lt_cv_cc_needs_belf=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' +@@ -4203,8 +4765,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +-echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 ++echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" +@@ -4234,39 +4796,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done ++ + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -4292,8 +4873,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -4319,10 +4900,9 @@ exec 5>>./config.log + + + +-# Check whether --enable-64-bit-bfd or --disable-64-bit-bfd was given. ++# Check whether --enable-64-bit-bfd was given. + if test "${enable_64_bit_bfd+set}" = set; then +- enableval="$enable_64_bit_bfd" +- case "${enableval}" in ++ enableval=$enable_64_bit_bfd; case "${enableval}" in + yes) want64=true ;; + no) want64=false ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for 64-bit-bfd option" >&5 +@@ -4331,10 +4911,10 @@ echo "$as_me: error: bad value ${enablev + esac + else + want64=false +-fi; # Check whether --enable-targets or --disable-targets was given. ++fi ++# Check whether --enable-targets was given. + if test "${enable_targets+set}" = set; then +- enableval="$enable_targets" +- case "${enableval}" in ++ enableval=$enable_targets; case "${enableval}" in + yes | "") { { echo "$as_me:$LINENO: error: enable-targets option must specify target names or 'all'" >&5 + echo "$as_me: error: enable-targets option must specify target names or 'all'" >&2;} + { (exit 1); exit 1; }; } +@@ -4342,21 +4922,21 @@ echo "$as_me: error: enable-targets opti + no) enable_targets= ;; + *) enable_targets=$enableval ;; + esac +-fi; # Check whether --enable-commonbfdlib or --disable-commonbfdlib was given. ++fi ++# Check whether --enable-commonbfdlib was given. + if test "${enable_commonbfdlib+set}" = set; then +- enableval="$enable_commonbfdlib" +- case "${enableval}" in ++ enableval=$enable_commonbfdlib; case "${enableval}" in + yes) commonbfdlib=true ;; + no) commonbfdlib=false ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for BFD commonbfdlib option" >&5 + echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;} + { (exit 1); exit 1; }; } ;; + esac +-fi; +-# Check whether --with-mmap or --without-mmap was given. ++fi ++ ++# Check whether --with-mmap was given. + if test "${with_mmap+set}" = set; then +- withval="$with_mmap" +- case "${withval}" in ++ withval=$with_mmap; case "${withval}" in + yes) want_mmap=true ;; + no) want_mmap=false ;; + *) { { echo "$as_me:$LINENO: error: bad value ${withval} for BFD with-mmap option" >&5 +@@ -4365,11 +4945,11 @@ echo "$as_me: error: bad value ${withval + esac + else + want_mmap=false +-fi; +-# Check whether --enable-secureplt or --disable-secureplt was given. ++fi ++ ++# Check whether --enable-secureplt was given. + if test "${enable_secureplt+set}" = set; then +- enableval="$enable_secureplt" +- case "${enableval}" in ++ enableval=$enable_secureplt; case "${enableval}" in + yes) use_secureplt=true ;; + no) use_secureplt=false ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for secureplt option" >&5 +@@ -4378,7 +4958,8 @@ echo "$as_me: error: bad value ${enablev + esac + else + use_secureplt=false +-fi; if test $use_secureplt = true; then ++fi ++if test $use_secureplt = true; then + + cat >>confdefs.h <<\_ACEOF + #define USE_SECUREPLT 1 +@@ -4389,17 +4970,17 @@ fi + + GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" + +-# Check whether --enable-werror or --disable-werror was given. ++# Check whether --enable-werror was given. + if test "${enable_werror+set}" = set; then +- enableval="$enable_werror" +- case "${enableval}" in ++ enableval=$enable_werror; case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-werror" >&5 + echo "$as_me: error: bad value ${enableval} for --enable-werror" >&2;} + { (exit 1); exit 1; }; } ;; + esac +-fi; ++fi ++ + + # Enable -Werror by default when using gcc + if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then +@@ -4416,10 +4997,9 @@ if test "${GCC}" = yes ; then + WARN_CFLAGS="${GCC_WARN_CFLAGS}" + fi + +-# Check whether --enable-build-warnings or --disable-build-warnings was given. ++# Check whether --enable-build-warnings was given. + if test "${enable_build_warnings+set}" = set; then +- enableval="$enable_build_warnings" +- case "${enableval}" in ++ enableval=$enable_build_warnings; case "${enableval}" in + yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; + no) if test "${GCC}" = yes ; then + WARN_CFLAGS="-w" +@@ -4430,7 +5010,8 @@ if test "${enable_build_warnings+set}" = + WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; + *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; + esac +-fi; ++fi ++ + + if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then + echo "Setting warning flags = $WARN_CFLAGS" 6>&1 +@@ -4440,7 +5021,7 @@ fi + + + +- ac_config_headers="$ac_config_headers config.h:config.in" ++ac_config_headers="$ac_config_headers config.h:config.in" + + + if test -z "$target" ; then +@@ -4449,17 +5030,17 @@ echo "$as_me: error: Unrecognized target + { (exit 1); exit 1; }; } + fi + +-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 +- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. ++{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 ++echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } ++ # Check whether --enable-maintainer-mode was given. + if test "${enable_maintainer_mode+set}" = set; then +- enableval="$enable_maintainer_mode" +- USE_MAINTAINER_MODE=$enableval ++ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval + else + USE_MAINTAINER_MODE=no +-fi; +- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 ++echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } + + + if test $USE_MAINTAINER_MODE = yes; then +@@ -4488,21 +5069,21 @@ esac + *) target_noncanonical=${target_alias} ;; + esac + +-echo "$as_me:$LINENO: checking whether to install libbfd" >&5 +-echo $ECHO_N "checking whether to install libbfd... $ECHO_C" >&6 +- # Check whether --enable-install-libbfd or --disable-install-libbfd was given. ++{ echo "$as_me:$LINENO: checking whether to install libbfd" >&5 ++echo $ECHO_N "checking whether to install libbfd... $ECHO_C" >&6; } ++ # Check whether --enable-install-libbfd was given. + if test "${enable_install_libbfd+set}" = set; then +- enableval="$enable_install_libbfd" +- install_libbfd_p=$enableval ++ enableval=$enable_install_libbfd; install_libbfd_p=$enableval + else + if test "${host}" = "${target}" || test "$enable_shared" = "yes"; then + install_libbfd_p=yes + else + install_libbfd_p=no + fi +-fi; +- echo "$as_me:$LINENO: result: $install_libbfd_p" >&5 +-echo "${ECHO_T}$install_libbfd_p" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $install_libbfd_p" >&5 ++echo "${ECHO_T}$install_libbfd_p" >&6; } + + + if test $install_libbfd_p = yes; then +@@ -4545,8 +5126,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4559,32 +5140,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4597,36 +5180,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4639,74 +5237,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4720,7 +5278,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -4731,6 +5289,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -4748,22 +5307,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4776,36 +5336,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4818,29 +5380,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -4853,27 +5431,41 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4896,50 +5488,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -4955,46 +5546,126 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +-if test "$ac_test_CFLAGS" = set; then +- CFLAGS=$ac_save_CFLAGS +-elif test $ac_cv_prog_cc_g = yes; then +- if test "$GCC" = yes; then +- CFLAGS="-g -O2" +- else +- CFLAGS="-g" +- fi ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } ++if test "$ac_test_CFLAGS" = set; then ++ CFLAGS=$ac_save_CFLAGS ++elif test $ac_cv_prog_cc_g = yes; then ++ if test "$GCC" = yes; then ++ CFLAGS="-g -O2" ++ else ++ CFLAGS="-g" ++ fi + else + if test "$GCC" = yes; then + CFLAGS="-O2" +@@ -5002,12 +5673,12 @@ else + CFLAGS= + fi + fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_prog_cc_stdc=no ++ ac_cv_prog_cc_c89=no + ac_save_CC=$CC + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5041,12 +5712,17 @@ static char *f (char * (*g) (char **, in + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get ++ as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ ++ that's true only with -std. */ + int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ + int test (int i, double x); + struct s1 {int (*f) (int a);}; + struct s2 {int (*f) (double a);}; +@@ -5061,205 +5737,57 @@ return f (e, argv, 0) != argv[0] || f + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" + do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext ++ ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest.$ac_ext conftest.$ac_objext ++rm -f conftest.$ac_ext + CC=$ac_save_CC + + fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; + *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + esac + +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. +-cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-#include +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-continue +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h +-fi +- +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -5277,8 +5805,8 @@ ALL_LINGUAS="fr tr ja es sv da zh_CN ro + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5291,32 +5819,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5329,27 +5859,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -5359,8 +5903,8 @@ ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' + ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' + ac_compiler_gnu=$ac_cv_c_compiler_gnu +-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 ++echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } + # On Suns, sometimes $CPP names a directory. + if test -n "$CPP" && test -d "$CPP"; then + CPP= +@@ -5394,24 +5938,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5420,9 +5962,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi ++ + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5432,24 +5975,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5460,6 +6001,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi ++ + rm -f conftest.err conftest.$ac_ext + + done +@@ -5477,8 +6019,8 @@ fi + else + ac_cv_prog_CPP=$CPP + fi +-echo "$as_me:$LINENO: result: $CPP" >&5 +-echo "${ECHO_T}$CPP" >&6 ++{ echo "$as_me:$LINENO: result: $CPP" >&5 ++echo "${ECHO_T}$CPP" >&6; } + ac_preproc_ok=false + for ac_c_preproc_warn_flag in '' yes + do +@@ -5501,24 +6043,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5527,9 +6067,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi ++ + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5539,24 +6080,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5567,6 +6106,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi ++ + rm -f conftest.err conftest.$ac_ext + + done +@@ -5589,87 +6129,230 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +-echo "$as_me:$LINENO: checking for egrep" >&5 +-echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +-if test "${ac_cv_prog_egrep+set}" = set; then ++{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 ++echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } ++if test "${ac_cv_path_GREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ # Extract the first word of "grep ggrep" to use in msg output ++if test -z "$GREP"; then ++set dummy grep ggrep; ac_prog_name=$2 ++if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- if echo a | (grep -E '(a|b)') >/dev/null 2>&1 +- then ac_cv_prog_egrep='grep -E' +- else ac_cv_prog_egrep='egrep' ++ ac_path_GREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in grep ggrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue ++ # Check for GNU ac_path_GREP and select it if it is found. ++ # Check for GNU $ac_path_GREP ++case `"$ac_path_GREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'GREP' >> "conftest.nl" ++ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_GREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_GREP="$ac_path_GREP" ++ ac_path_GREP_max=$ac_count + fi +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +-echo "${ECHO_T}$ac_cv_prog_egrep" >&6 +- EGREP=$ac_cv_prog_egrep ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac + + +-echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +-if test "${ac_cv_header_stdc+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +-#include +-#include +-#include ++ $ac_path_GREP_found && break 3 ++ done ++done + +-int +-main () +-{ ++done ++IFS=$as_save_IFS + +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_header_stdc=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_header_stdc=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +-if test $ac_cv_header_stdc = yes; then +- # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include ++GREP="$ac_cv_path_GREP" ++if test -z "$GREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi + +-_ACEOF ++else ++ ac_cv_path_GREP=$GREP ++fi ++ ++ ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 ++echo "${ECHO_T}$ac_cv_path_GREP" >&6; } ++ GREP="$ac_cv_path_GREP" ++ ++ ++{ echo "$as_me:$LINENO: checking for egrep" >&5 ++echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } ++if test "${ac_cv_path_EGREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 ++ then ac_cv_path_EGREP="$GREP -E" ++ else ++ # Extract the first word of "egrep" to use in msg output ++if test -z "$EGREP"; then ++set dummy egrep; ac_prog_name=$2 ++if test "${ac_cv_path_EGREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_path_EGREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in egrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue ++ # Check for GNU ac_path_EGREP and select it if it is found. ++ # Check for GNU $ac_path_EGREP ++case `"$ac_path_EGREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'EGREP' >> "conftest.nl" ++ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_EGREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_EGREP="$ac_path_EGREP" ++ ac_path_EGREP_max=$ac_count ++ fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac ++ ++ ++ $ac_path_EGREP_found && break 3 ++ done ++done ++ ++done ++IFS=$as_save_IFS ++ ++ ++fi ++ ++EGREP="$ac_cv_path_EGREP" ++if test -z "$EGREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi ++ ++else ++ ac_cv_path_EGREP=$EGREP ++fi ++ ++ ++ fi ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 ++echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } ++ EGREP="$ac_cv_path_EGREP" ++ ++ ++{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 ++echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } ++if test "${ac_cv_header_stdc+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++#include ++#include ++#include ++#include ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_header_stdc=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_cv_header_stdc=no ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++if test $ac_cv_header_stdc = yes; then ++ # SunOS 4.x string.h does not declare mem*, contrary to ANSI. ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++#include ++ ++_ACEOF + if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +@@ -5713,6 +6396,7 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include ++#include + #if ((' ' & 0x0FF) == 0x020) + # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') + # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +@@ -5732,18 +6416,27 @@ main () + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) +- exit(2); +- exit (0); ++ return 2; ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -5756,12 +6449,14 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_header_stdc=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +-echo "${ECHO_T}$ac_cv_header_stdc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 ++echo "${ECHO_T}$ac_cv_header_stdc" >&6; } + if test $ac_cv_header_stdc = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -5770,8 +6465,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 ++echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } + if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5789,10 +6484,10 @@ main () + #ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; +- const charset x; ++ const charset cs; + /* SunOS 4.1.1 cc rejects this. */ +- char const *const *ccp; +- char **p; ++ char const *const *pcpcc; ++ char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; +@@ -5801,16 +6496,17 @@ main () + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; +- ccp = &g + (g ? g-g : 0); ++ pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ +- ++ccp; +- p = (char**) ccp; +- ccp = (char const *const *) p; ++ ++pcpcc; ++ ppc = (char**) pcpcc; ++ pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; ++ if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; +@@ -5829,7 +6525,9 @@ main () + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; ++ if (!foo) return 0; + } ++ return !cs[0] && !zero.x; + #endif + + ; +@@ -5837,38 +6535,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_c_const=no ++ ac_cv_c_const=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +-echo "${ECHO_T}$ac_cv_c_const" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 ++echo "${ECHO_T}$ac_cv_c_const" >&6; } + if test $ac_cv_c_const = no; then + + cat >>confdefs.h <<\_ACEOF +@@ -5877,8 +6571,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for inline" >&5 +-echo $ECHO_N "checking for inline... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for inline" >&5 ++echo $ECHO_N "checking for inline... $ECHO_C" >&6; } + if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5898,39 +6592,37 @@ $ac_kw foo_t foo () {return 0; } + + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_c_inline=$ac_kw; break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_c_inline=$ac_kw + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ test "$ac_cv_c_inline" != no && break + done + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +-echo "${ECHO_T}$ac_cv_c_inline" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 ++echo "${ECHO_T}$ac_cv_c_inline" >&6; } + + + case $ac_cv_c_inline in +@@ -5962,9 +6654,9 @@ for ac_header in sys/types.h sys/stat.h + inttypes.h stdint.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -5978,38 +6670,35 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_Header=no" ++ eval "$as_ac_Header=no" + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +@@ -6020,8 +6709,8 @@ fi + done + + +-echo "$as_me:$LINENO: checking for off_t" >&5 +-echo $ECHO_N "checking for off_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for off_t" >&5 ++echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } + if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6032,62 +6721,59 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef off_t ac__type_new_; + int + main () + { +-if ((off_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (off_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_off_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_off_t=no ++ ac_cv_type_off_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +-echo "${ECHO_T}$ac_cv_type_off_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 ++echo "${ECHO_T}$ac_cv_type_off_t" >&6; } + if test $ac_cv_type_off_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define off_t long ++#define off_t long int + _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for size_t" >&5 +-echo $ECHO_N "checking for size_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for size_t" >&5 ++echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } + if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6098,64 +6784,61 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef size_t ac__type_new_; + int + main () + { +-if ((size_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (size_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_size_t=no ++ ac_cv_type_size_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +-echo "${ECHO_T}$ac_cv_type_size_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 ++echo "${ECHO_T}$ac_cv_type_size_t" >&6; } + if test $ac_cv_type_size_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define size_t unsigned ++#define size_t unsigned int + _ACEOF + + fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works + # for constant arguments. Useless! +-echo "$as_me:$LINENO: checking for working alloca.h" >&5 +-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 ++echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } + if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6170,44 +6853,42 @@ int + main () + { + char *p = (char *) alloca (2 * sizeof (int)); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_working_alloca_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_working_alloca_h=no ++ ac_cv_working_alloca_h=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +-echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 ++echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } + if test $ac_cv_working_alloca_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6216,8 +6897,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for alloca" >&5 +-echo $ECHO_N "checking for alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for alloca" >&5 ++echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } + if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6234,7 +6915,7 @@ cat >>conftest.$ac_ext <<_ACEOF + # include + # define alloca _alloca + # else +-# if HAVE_ALLOCA_H ++# ifdef HAVE_ALLOCA_H + # include + # else + # ifdef _AIX +@@ -6252,44 +6933,42 @@ int + main () + { + char *p = (char *) alloca (1); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_func_alloca_works=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_func_alloca_works=no ++ ac_cv_func_alloca_works=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +-echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 ++echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } + + if test $ac_cv_func_alloca_works = yes; then + +@@ -6303,15 +6982,15 @@ else + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + +-ALLOCA=alloca.$ac_objext ++ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + + cat >>confdefs.h <<\_ACEOF + #define C_ALLOCA 1 + _ACEOF + + +-echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +-echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 ++echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } + if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6321,7 +7000,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#if defined(CRAY) && ! defined(CRAY2) ++#if defined CRAY && ! defined CRAY2 + webecray + #else + wenotbecray +@@ -6337,14 +7016,14 @@ fi + rm -f conftest* + + fi +-echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +-echo "${ECHO_T}$ac_cv_os_cray" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 ++echo "${ECHO_T}$ac_cv_os_cray" >&6; } + if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6370,68 +7049,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -6444,8 +7115,8 @@ fi + done + fi + +-echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +-echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 ++echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } + if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6458,6 +7129,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ ++$ac_includes_default + int + find_stack_direction () + { +@@ -6475,17 +7147,26 @@ find_stack_direction () + int + main () + { +- exit (find_stack_direction () < 0); ++ return find_stack_direction () < 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6498,11 +7179,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_c_stack_direction=-1 + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +-echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 ++echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } + + cat >>confdefs.h <<_ACEOF + #define STACK_DIRECTION $ac_cv_c_stack_direction +@@ -6516,18 +7199,19 @@ fi + for ac_header in stdlib.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6538,41 +7222,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6581,24 +7261,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -6606,9 +7284,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -6632,25 +7311,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -6666,9 +7339,9 @@ done + for ac_func in getpagesize + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6694,68 +7367,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -6764,8 +7429,8 @@ _ACEOF + fi + done + +-echo "$as_me:$LINENO: checking for working mmap" >&5 +-echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working mmap" >&5 ++echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } + if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6807,21 +7472,21 @@ $ac_includes_default + #include + #include + +-#if !STDC_HEADERS && !HAVE_STDLIB_H ++#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H + char *malloc (); + #endif + + /* This mess was copied from the GNU getpagesize.h. */ +-#if !HAVE_GETPAGESIZE ++#ifndef HAVE_GETPAGESIZE + /* Assume that all systems that can run configure have sys/param.h. */ +-# if !HAVE_SYS_PARAM_H ++# ifndef HAVE_SYS_PARAM_H + # define HAVE_SYS_PARAM_H 1 + # endif + + # ifdef _SC_PAGESIZE + # define getpagesize() sysconf(_SC_PAGESIZE) + # else /* no _SC_PAGESIZE */ +-# if HAVE_SYS_PARAM_H ++# ifdef HAVE_SYS_PARAM_H + # include + # ifdef EXEC_PAGESIZE + # define getpagesize() EXEC_PAGESIZE +@@ -6860,15 +7525,15 @@ main () + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) +- exit (1); ++ return 1; + if (write (fd, data, pagesize) != pagesize) +- exit (1); ++ return 1; + close (fd); + + /* Next, try to mmap the file at a fixed address which already has +@@ -6876,17 +7541,17 @@ main () + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) +- exit (1); ++ return 1; + data2 = (char *) malloc (2 * pagesize); + if (!data2) +- exit (1); +- data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); ++ return 1; ++ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) +- exit (1); ++ return 1; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on +@@ -6895,24 +7560,33 @@ main () + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) +- exit (1); ++ return 1; + if (read (fd, data3, pagesize) != pagesize) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) +- exit (1); ++ return 1; + close (fd); +- exit (0); ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6925,11 +7599,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_func_mmap_fixed_mapped=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +-echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 ++echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } + if test $ac_cv_func_mmap_fixed_mapped = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6953,18 +7629,19 @@ for ac_header in argz.h limits.h locale. + unistd.h values.h sys/param.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6975,41 +7652,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7018,24 +7691,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -7043,9 +7714,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -7069,25 +7741,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -7113,9 +7779,9 @@ for ac_func in getcwd munmap putenv sete + __argz_count __argz_stringify __argz_next + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7141,68 +7807,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7217,9 +7875,9 @@ done + for ac_func in stpcpy + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7245,68 +7903,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7325,8 +7975,8 @@ _ACEOF + fi + + if test $ac_cv_header_locale_h = yes; then +- echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 +-echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 ++echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; } + if test "${am_cv_val_LC_MESSAGES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7346,39 +7996,36 @@ return LC_MESSAGES + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + am_cv_val_LC_MESSAGES=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-am_cv_val_LC_MESSAGES=no ++ am_cv_val_LC_MESSAGES=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 +-echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 ++echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; } + if test $am_cv_val_LC_MESSAGES = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -7387,34 +8034,34 @@ _ACEOF + + fi + fi +- echo "$as_me:$LINENO: checking whether NLS is requested" >&5 +-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 +- # Check whether --enable-nls or --disable-nls was given. ++ { echo "$as_me:$LINENO: checking whether NLS is requested" >&5 ++echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; } ++ # Check whether --enable-nls was given. + if test "${enable_nls+set}" = set; then +- enableval="$enable_nls" +- USE_NLS=$enableval ++ enableval=$enable_nls; USE_NLS=$enableval + else + USE_NLS=yes +-fi; +- echo "$as_me:$LINENO: result: $USE_NLS" >&5 +-echo "${ECHO_T}$USE_NLS" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $USE_NLS" >&5 ++echo "${ECHO_T}$USE_NLS" >&6; } + + + USE_INCLUDED_LIBINTL=no + + if test "$USE_NLS" = "yes"; then +- echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 +-echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 ++echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; } + +-# Check whether --with-included-gettext or --without-included-gettext was given. ++# Check whether --with-included-gettext was given. + if test "${with_included_gettext+set}" = set; then +- withval="$with_included_gettext" +- nls_cv_force_use_gnu_gettext=$withval ++ withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval + else + nls_cv_force_use_gnu_gettext=no +-fi; +- echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 +-echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 ++echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; } + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then +@@ -7423,17 +8070,17 @@ echo "${ECHO_T}$nls_cv_force_use_gnu_get + CATOBJEXT= + + if test "${ac_cv_header_libintl_h+set}" = set; then +- echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking libintl.h usability" >&5 +-echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h usability" >&5 ++echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7444,41 +8091,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking libintl.h presence" >&5 +-echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h presence" >&5 ++echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7487,24 +8130,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -7512,9 +8153,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -7538,30 +8180,23 @@ echo "$as_me: WARNING: libintl.h: se + echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_libintl_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + + fi + if test $ac_cv_header_libintl_h = yes; then +- echo "$as_me:$LINENO: checking for gettext in libc" >&5 +-echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libc" >&5 ++echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7581,43 +8216,40 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libc=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libc=no ++ gt_cv_func_gettext_libc=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6; } + + if test "$gt_cv_func_gettext_libc" != "yes"; then +- echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 +-echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 ++echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6; } + if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7630,59 +8262,56 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char bindtextdomain (); + int + main () + { +-bindtextdomain (); ++return bindtextdomain (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_lib_intl_bindtextdomain=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_intl_bindtextdomain=no ++ ac_cv_lib_intl_bindtextdomain=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$ac_check_lib_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 +-echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 ++echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6; } + if test $ac_cv_lib_intl_bindtextdomain = yes; then +- echo "$as_me:$LINENO: checking for gettext in libintl" >&5 +-echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libintl" >&5 ++echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libintl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7702,39 +8331,36 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libintl=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libintl=no ++ gt_cv_func_gettext_libintl=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6; } + fi + + fi +@@ -7748,8 +8374,8 @@ _ACEOF + + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7775,20 +8401,20 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + if test "$MSGFMT" != "no"; then + + for ac_func in dcgettext + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7814,68 +8440,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7886,8 +8504,8 @@ done + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7902,32 +8520,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7953,11 +8572,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + cat >conftest.$ac_ext <<_ACEOF +@@ -7977,37 +8596,34 @@ extern int _nl_msg_cat_cntr; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + CATOBJEXT=.gmo + DATADIRNAME=share + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-CATOBJEXT=.mo ++ CATOBJEXT=.mo + DATADIRNAME=lib + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + INSTOBJEXT=.mo + fi +@@ -8029,8 +8645,8 @@ fi + INTLOBJS="\$(GETTOBJS)" + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8056,17 +8672,17 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8081,32 +8697,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8132,11 +8749,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + +@@ -8155,8 +8772,8 @@ fi + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else +- echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 +-echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6 ++ { echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 ++echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6; } + XGETTEXT=":" + fi + fi +@@ -8205,8 +8822,8 @@ _ACEOF + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else +- echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 +-echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 ++echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6; } + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in +@@ -8214,8 +8831,8 @@ echo $ECHO_N "checking for catalogs to b + esac + done + LINGUAS=$NEW_LINGUAS +- echo "$as_me:$LINENO: result: $LINGUAS" >&5 +-echo "${ECHO_T}$LINGUAS" >&6 ++ { echo "$as_me:$LINENO: result: $LINGUAS" >&5 ++echo "${ECHO_T}$LINGUAS" >&6; } + fi + + if test -n "$LINGUAS"; then +@@ -8234,17 +8851,17 @@ echo "${ECHO_T}$LINGUAS" >&6 + if test -f $srcdir/po2tbl.sed.in; then + if test "$CATOBJEXT" = ".cat"; then + if test "${ac_cv_header_linux_version_h+set}" = set; then +- echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking linux/version.h usability" >&5 +-echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h usability" >&5 ++echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8255,41 +8872,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking linux/version.h presence" >&5 +-echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h presence" >&5 ++echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8298,24 +8911,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -8323,9 +8934,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -8349,25 +8961,18 @@ echo "$as_me: WARNING: linux/version.h: + echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/version.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: linux/version.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_linux_version_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + + fi + if test $ac_cv_header_linux_version_h = yes; then +@@ -8434,8 +9039,8 @@ fi + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -8457,7 +9062,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -8476,21 +9081,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -8507,8 +9113,8 @@ BFD_HOST_64_BIT_DEFINED=0 + BFD_HOST_64_BIT= + BFD_HOST_U_64_BIT= + +-echo "$as_me:$LINENO: checking for long long" >&5 +-echo $ECHO_N "checking for long long... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for long long" >&5 ++echo $ECHO_N "checking for long long... $ECHO_C" >&6; } + if test "${bfd_cv_has_long_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8528,43 +9134,39 @@ unsigned long long ll = 1844674407370955 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_has_long_long=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_has_long_long=no ++ bfd_cv_has_long_long=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bfd_cv_has_long_long" >&5 +-echo "${ECHO_T}$bfd_cv_has_long_long" >&6 ++{ echo "$as_me:$LINENO: result: $bfd_cv_has_long_long" >&5 ++echo "${ECHO_T}$bfd_cv_has_long_long" >&6; } + if test $bfd_cv_has_long_long = yes; then + BFD_HOST_LONG_LONG=1 +- echo "$as_me:$LINENO: checking for long long" >&5 +-echo $ECHO_N "checking for long long... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for long long" >&5 ++echo $ECHO_N "checking for long long... $ECHO_C" >&6; } + if test "${ac_cv_type_long_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8575,61 +9177,57 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef long long ac__type_new_; + int + main () + { +-if ((long long *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (long long)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_long_long=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_long_long=no ++ ac_cv_type_long_long=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 +-echo "${ECHO_T}$ac_cv_type_long_long" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 ++echo "${ECHO_T}$ac_cv_type_long_long" >&6; } + +-echo "$as_me:$LINENO: checking size of long long" >&5 +-echo $ECHO_N "checking size of long long... $ECHO_C" >&6 ++# The cast to long int works around a bug in the HP C Compiler ++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects ++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. ++# This bug is HP SR number 8606223364. ++{ echo "$as_me:$LINENO: checking size of long long" >&5 ++echo $ECHO_N "checking size of long long... $ECHO_C" >&6; } + if test "${ac_cv_sizeof_long_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- if test "$ac_cv_type_long_long" = yes; then +- # The cast to unsigned long works around a bug in the HP C Compiler +- # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +- # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +- # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. + cat >conftest.$ac_ext <<_ACEOF +@@ -8639,10 +9237,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; + test_array [0] = 0 + + ; +@@ -8650,27 +9249,22 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +@@ -8680,10 +9274,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; + test_array [0] = 0 + + ; +@@ -8691,56 +9286,53 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_lo=`expr $ac_mid + 1` +- if test $ac_lo -le $ac_mid; then +- ac_lo= ac_hi= +- break +- fi +- ac_mid=`expr 2 '*' $ac_mid + 1` ++ ac_lo=`expr $ac_mid + 1` ++ if test $ac_lo -le $ac_mid; then ++ ac_lo= ac_hi= ++ break ++ fi ++ ac_mid=`expr 2 '*' $ac_mid + 1` + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-cat >conftest.$ac_ext <<_ACEOF ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; + test_array [0] = 0 + + ; +@@ -8748,27 +9340,22 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +@@ -8778,10 +9365,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; + test_array [0] = 0 + + ; +@@ -8789,50 +9377,48 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_hi=`expr '(' $ac_mid ')' - 1` +- if test $ac_mid -le $ac_hi; then +- ac_lo= ac_hi= +- break +- fi +- ac_mid=`expr 2 '*' $ac_mid` ++ ac_hi=`expr '(' $ac_mid ')' - 1` ++ if test $ac_mid -le $ac_hi; then ++ ac_lo= ac_hi= ++ break ++ fi ++ ac_mid=`expr 2 '*' $ac_mid` + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_lo= ac_hi= ++ ac_lo= ac_hi= + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # Binary search between lo and hi bounds. + while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` +@@ -8843,10 +9429,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; + test_array [0] = 0 + + ; +@@ -8854,52 +9441,45 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_lo=`expr '(' $ac_mid ')' + 1` ++ ac_lo=`expr '(' $ac_mid ')' + 1` + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + case $ac_lo in + ?*) ac_cv_sizeof_long_long=$ac_lo;; +-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 ++'') if test "$ac_cv_type_long_long" = yes; then ++ { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long) + See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot compute sizeof (long long), 77 ++echo "$as_me: error: cannot compute sizeof (long long) + See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } ;; ++ { (exit 77); exit 77; }; } ++ else ++ ac_cv_sizeof_long_long=0 ++ fi ;; + esac + else +- if test "$cross_compiling" = yes; then +- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +-See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot run test program while cross compiling +-See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +-else + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8907,8 +9487,9 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default +-long longval () { return (long) (sizeof (long long)); } +-unsigned long ulongval () { return (long) (sizeof (long long)); } ++ typedef long long ac__type_sizeof_; ++static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } ++static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } + #include + #include + int +@@ -8917,35 +9498,44 @@ main () + + FILE *f = fopen ("conftest.val", "w"); + if (! f) +- exit (1); +- if (((long) (sizeof (long long))) < 0) ++ return 1; ++ if (((long int) (sizeof (ac__type_sizeof_))) < 0) + { +- long i = longval (); +- if (i != ((long) (sizeof (long long)))) +- exit (1); ++ long int i = longval (); ++ if (i != ((long int) (sizeof (ac__type_sizeof_)))) ++ return 1; + fprintf (f, "%ld\n", i); + } + else + { +- unsigned long i = ulongval (); +- if (i != ((long) (sizeof (long long)))) +- exit (1); ++ unsigned long int i = ulongval (); ++ if (i != ((long int) (sizeof (ac__type_sizeof_)))) ++ return 1; + fprintf (f, "%lu\n", i); + } +- exit (ferror (f) || fclose (f) != 0); ++ return ferror (f) || fclose (f) != 0; + + ; + return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -8956,22 +9546,25 @@ echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + ( exit $ac_status ) +-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 ++if test "$ac_cv_type_long_long" = yes; then ++ { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long) + See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot compute sizeof (long long), 77 ++echo "$as_me: error: cannot compute sizeof (long long) + See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +-fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++ { (exit 77); exit 77; }; } ++ else ++ ac_cv_sizeof_long_long=0 ++ fi + fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi + rm -f conftest.val +-else +- ac_cv_sizeof_long_long=0 +-fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 +-echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 ++echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; } ++ ++ ++ + cat >>confdefs.h <<_ACEOF + #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long + _ACEOF +@@ -8979,8 +9572,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for long" >&5 +-echo $ECHO_N "checking for long... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for long" >&5 ++echo $ECHO_N "checking for long... $ECHO_C" >&6; } + if test "${ac_cv_type_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8991,61 +9584,57 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef long ac__type_new_; + int + main () + { +-if ((long *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (long)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_long=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_long=no ++ ac_cv_type_long=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 +-echo "${ECHO_T}$ac_cv_type_long" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 ++echo "${ECHO_T}$ac_cv_type_long" >&6; } + +-echo "$as_me:$LINENO: checking size of long" >&5 +-echo $ECHO_N "checking size of long... $ECHO_C" >&6 ++# The cast to long int works around a bug in the HP C Compiler ++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects ++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. ++# This bug is HP SR number 8606223364. ++{ echo "$as_me:$LINENO: checking size of long" >&5 ++echo $ECHO_N "checking size of long... $ECHO_C" >&6; } + if test "${ac_cv_sizeof_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- if test "$ac_cv_type_long" = yes; then +- # The cast to unsigned long works around a bug in the HP C Compiler +- # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +- # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +- # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. + cat >conftest.$ac_ext <<_ACEOF +@@ -9055,10 +9644,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; + test_array [0] = 0 + + ; +@@ -9066,27 +9656,22 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +@@ -9096,10 +9681,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; + test_array [0] = 0 + + ; +@@ -9107,56 +9693,53 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_lo=`expr $ac_mid + 1` +- if test $ac_lo -le $ac_mid; then +- ac_lo= ac_hi= +- break +- fi +- ac_mid=`expr 2 '*' $ac_mid + 1` ++ ac_lo=`expr $ac_mid + 1` ++ if test $ac_lo -le $ac_mid; then ++ ac_lo= ac_hi= ++ break ++ fi ++ ac_mid=`expr 2 '*' $ac_mid + 1` + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-cat >conftest.$ac_ext <<_ACEOF ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; + test_array [0] = 0 + + ; +@@ -9164,27 +9747,22 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +@@ -9194,10 +9772,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; + test_array [0] = 0 + + ; +@@ -9205,50 +9784,48 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_hi=`expr '(' $ac_mid ')' - 1` +- if test $ac_mid -le $ac_hi; then +- ac_lo= ac_hi= +- break +- fi +- ac_mid=`expr 2 '*' $ac_mid` ++ ac_hi=`expr '(' $ac_mid ')' - 1` ++ if test $ac_mid -le $ac_hi; then ++ ac_lo= ac_hi= ++ break ++ fi ++ ac_mid=`expr 2 '*' $ac_mid` + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_lo= ac_hi= ++ ac_lo= ac_hi= + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # Binary search between lo and hi bounds. + while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` +@@ -9259,10 +9836,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef long ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; + test_array [0] = 0 + + ; +@@ -9270,52 +9848,45 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_lo=`expr '(' $ac_mid ')' + 1` ++ ac_lo=`expr '(' $ac_mid ')' + 1` + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + case $ac_lo in + ?*) ac_cv_sizeof_long=$ac_lo;; +-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 ++'') if test "$ac_cv_type_long" = yes; then ++ { { echo "$as_me:$LINENO: error: cannot compute sizeof (long) + See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot compute sizeof (long), 77 ++echo "$as_me: error: cannot compute sizeof (long) + See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } ;; ++ { (exit 77); exit 77; }; } ++ else ++ ac_cv_sizeof_long=0 ++ fi ;; + esac + else +- if test "$cross_compiling" = yes; then +- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +-See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot run test program while cross compiling +-See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +-else + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -9323,8 +9894,9 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default +-long longval () { return (long) (sizeof (long)); } +-unsigned long ulongval () { return (long) (sizeof (long)); } ++ typedef long ac__type_sizeof_; ++static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } ++static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } + #include + #include + int +@@ -9333,35 +9905,44 @@ main () + + FILE *f = fopen ("conftest.val", "w"); + if (! f) +- exit (1); +- if (((long) (sizeof (long))) < 0) ++ return 1; ++ if (((long int) (sizeof (ac__type_sizeof_))) < 0) + { +- long i = longval (); +- if (i != ((long) (sizeof (long)))) +- exit (1); ++ long int i = longval (); ++ if (i != ((long int) (sizeof (ac__type_sizeof_)))) ++ return 1; + fprintf (f, "%ld\n", i); + } + else + { +- unsigned long i = ulongval (); +- if (i != ((long) (sizeof (long)))) +- exit (1); ++ unsigned long int i = ulongval (); ++ if (i != ((long int) (sizeof (ac__type_sizeof_)))) ++ return 1; + fprintf (f, "%lu\n", i); + } +- exit (ferror (f) || fclose (f) != 0); ++ return ferror (f) || fclose (f) != 0; + + ; + return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -9372,22 +9953,25 @@ echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + ( exit $ac_status ) +-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 ++if test "$ac_cv_type_long" = yes; then ++ { { echo "$as_me:$LINENO: error: cannot compute sizeof (long) + See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot compute sizeof (long), 77 ++echo "$as_me: error: cannot compute sizeof (long) + See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +-fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++ { (exit 77); exit 77; }; } ++ else ++ ac_cv_sizeof_long=0 ++ fi + fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi + rm -f conftest.val +-else +- ac_cv_sizeof_long=0 +-fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 +-echo "${ECHO_T}$ac_cv_sizeof_long" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 ++echo "${ECHO_T}$ac_cv_sizeof_long" >&6; } ++ ++ ++ + cat >>confdefs.h <<_ACEOF + #define SIZEOF_LONG $ac_cv_sizeof_long + _ACEOF +@@ -9428,8 +10012,8 @@ fi + if test "x$cross_compiling" = "xno"; then + EXEEXT_FOR_BUILD='$(EXEEXT)' + else +- echo "$as_me:$LINENO: checking for build system executable suffix" >&5 +-echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for build system executable suffix" >&5 ++echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6; } + if test "${bfd_cv_build_exeext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9446,8 +10030,8 @@ else + rm -f conftest* + test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no + fi +-echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 +-echo "${ECHO_T}$bfd_cv_build_exeext" >&6 ++{ echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 ++echo "${ECHO_T}$bfd_cv_build_exeext" >&6; } + EXEEXT_FOR_BUILD="" + test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} + fi +@@ -9462,18 +10046,19 @@ fi + for ac_header in stddef.h string.h strings.h stdlib.h time.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -9484,41 +10069,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -9527,24 +10108,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -9552,9 +10131,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -9578,25 +10158,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -9614,18 +10188,19 @@ done + for ac_header in fcntl.h sys/file.h sys/time.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -9636,41 +10211,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -9679,24 +10250,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -9704,9 +10273,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -9730,25 +10300,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -9760,8 +10324,8 @@ fi + + done + +-echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 +-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 ++echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; } + if test "${ac_cv_header_time+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9785,38 +10349,34 @@ return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_header_time=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_header_time=no ++ ac_cv_header_time=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 +-echo "${ECHO_T}$ac_cv_header_time" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 ++echo "${ECHO_T}$ac_cv_header_time" >&6; } + if test $ac_cv_header_time = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -9833,9 +10393,9 @@ fi + ac_header_dirent=no + for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 +-echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 ++echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -9857,38 +10417,35 @@ return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_Header=no" ++ eval "$as_ac_Header=no" + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +@@ -9900,13 +10457,12 @@ fi + done + # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. + if test $ac_header_dirent = dirent.h; then +- echo "$as_me:$LINENO: checking for library containing opendir" >&5 +-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for library containing opendir" >&5 ++echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } + if test "${ac_cv_search_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_func_search_save_LIBS=$LIBS +-ac_cv_search_opendir=no + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -9914,126 +10470,83 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char opendir (); + int + main () + { +-opendir (); ++return opendir (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++for ac_lib in '' dir; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_opendir="none required" ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_opendir=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_opendir" = no; then +- for ac_lib in dir; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char opendir (); +-int +-main () +-{ +-opendir (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_opendir="-l$ac_lib" +-break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 ++fi + ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_opendir+set}" = set; then ++ break + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++done ++if test "${ac_cv_search_opendir+set}" = set; then ++ : ++else ++ ac_cv_search_opendir=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +-echo "${ECHO_T}$ac_cv_search_opendir" >&6 +-if test "$ac_cv_search_opendir" != no; then +- test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 ++echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ++ac_res=$ac_cv_search_opendir ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + + else +- echo "$as_me:$LINENO: checking for library containing opendir" >&5 +-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for library containing opendir" >&5 ++echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } + if test "${ac_cv_search_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_func_search_save_LIBS=$LIBS +-ac_cv_search_opendir=no + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -10041,122 +10554,80 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char opendir (); + int + main () + { +-opendir (); ++return opendir (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++for ac_lib in '' x; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_opendir="none required" ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_opendir=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_opendir" = no; then +- for ac_lib in x; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char opendir (); +-int +-main () +-{ +-opendir (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_opendir="-l$ac_lib" +-break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 ++fi + ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_opendir+set}" = set; then ++ break + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++done ++if test "${ac_cv_search_opendir+set}" = set; then ++ : ++else ++ ac_cv_search_opendir=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +-echo "${ECHO_T}$ac_cv_search_opendir" >&6 +-if test "$ac_cv_search_opendir" != no; then +- test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 ++echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ++ac_res=$ac_cv_search_opendir ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + + fi + +-echo "$as_me:$LINENO: checking whether string.h and strings.h may both be included" >&5 +-echo $ECHO_N "checking whether string.h and strings.h may both be included... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether string.h and strings.h may both be included" >&5 ++echo $ECHO_N "checking whether string.h and strings.h may both be included... $ECHO_C" >&6; } + if test "${gcc_cv_header_string+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10177,38 +10648,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + gcc_cv_header_string=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gcc_cv_header_string=no ++ gcc_cv_header_string=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gcc_cv_header_string" >&5 +-echo "${ECHO_T}$gcc_cv_header_string" >&6 ++{ echo "$as_me:$LINENO: result: $gcc_cv_header_string" >&5 ++echo "${ECHO_T}$gcc_cv_header_string" >&6; } + if test $gcc_cv_header_string = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -10227,9 +10694,9 @@ fi + for ac_func in fcntl getpagesize setitimer sysconf fdopen getuid getgid + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -10255,68 +10722,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -10329,9 +10788,9 @@ done + for ac_func in strtoull + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -10357,68 +10816,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -10428,8 +10879,8 @@ fi + done + + +-echo "$as_me:$LINENO: checking whether basename is declared" >&5 +-echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether basename is declared" >&5 ++echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_basename+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10444,7 +10895,7 @@ int + main () + { + #ifndef basename +- char *p = (char *) basename; ++ (void) basename; + #endif + + ; +@@ -10452,38 +10903,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_basename=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_basename=no ++ ac_cv_have_decl_basename=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_basename" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_basename" >&6; } + if test $ac_cv_have_decl_basename = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10500,8 +10947,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether ftello is declared" >&5 +-echo $ECHO_N "checking whether ftello is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether ftello is declared" >&5 ++echo $ECHO_N "checking whether ftello is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_ftello+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10516,7 +10963,7 @@ int + main () + { + #ifndef ftello +- char *p = (char *) ftello; ++ (void) ftello; + #endif + + ; +@@ -10524,38 +10971,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_ftello=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_ftello=no ++ ac_cv_have_decl_ftello=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_ftello" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_ftello" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_ftello" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_ftello" >&6; } + if test $ac_cv_have_decl_ftello = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10572,8 +11015,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether ftello64 is declared" >&5 +-echo $ECHO_N "checking whether ftello64 is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether ftello64 is declared" >&5 ++echo $ECHO_N "checking whether ftello64 is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_ftello64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10588,7 +11031,7 @@ int + main () + { + #ifndef ftello64 +- char *p = (char *) ftello64; ++ (void) ftello64; + #endif + + ; +@@ -10596,38 +11039,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_ftello64=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_ftello64=no ++ ac_cv_have_decl_ftello64=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_ftello64" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_ftello64" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_ftello64" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_ftello64" >&6; } + if test $ac_cv_have_decl_ftello64 = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10644,8 +11083,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether fseeko is declared" >&5 +-echo $ECHO_N "checking whether fseeko is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether fseeko is declared" >&5 ++echo $ECHO_N "checking whether fseeko is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_fseeko+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10660,7 +11099,7 @@ int + main () + { + #ifndef fseeko +- char *p = (char *) fseeko; ++ (void) fseeko; + #endif + + ; +@@ -10668,38 +11107,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_fseeko=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_fseeko=no ++ ac_cv_have_decl_fseeko=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fseeko" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_fseeko" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fseeko" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_fseeko" >&6; } + if test $ac_cv_have_decl_fseeko = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10716,8 +11151,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether fseeko64 is declared" >&5 +-echo $ECHO_N "checking whether fseeko64 is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether fseeko64 is declared" >&5 ++echo $ECHO_N "checking whether fseeko64 is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_fseeko64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10732,7 +11167,7 @@ int + main () + { + #ifndef fseeko64 +- char *p = (char *) fseeko64; ++ (void) fseeko64; + #endif + + ; +@@ -10740,38 +11175,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_fseeko64=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_fseeko64=no ++ ac_cv_have_decl_fseeko64=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fseeko64" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_fseeko64" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fseeko64" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_fseeko64" >&6; } + if test $ac_cv_have_decl_fseeko64 = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10799,8 +11230,8 @@ _ACEOF + ;; + esac + +-echo "$as_me:$LINENO: checking whether ffs is declared" >&5 +-echo $ECHO_N "checking whether ffs is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether ffs is declared" >&5 ++echo $ECHO_N "checking whether ffs is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_ffs+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10815,7 +11246,7 @@ int + main () + { + #ifndef ffs +- char *p = (char *) ffs; ++ (void) ffs; + #endif + + ; +@@ -10823,38 +11254,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_ffs=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_ffs=no ++ ac_cv_have_decl_ffs=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_ffs" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_ffs" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_ffs" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_ffs" >&6; } + if test $ac_cv_have_decl_ffs = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10871,8 +11298,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether free is declared" >&5 +-echo $ECHO_N "checking whether free is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether free is declared" >&5 ++echo $ECHO_N "checking whether free is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_free+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10887,7 +11314,7 @@ int + main () + { + #ifndef free +- char *p = (char *) free; ++ (void) free; + #endif + + ; +@@ -10895,38 +11322,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_free=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_free=no ++ ac_cv_have_decl_free=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_free" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_free" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_free" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_free" >&6; } + if test $ac_cv_have_decl_free = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10943,8 +11366,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether getenv is declared" >&5 +-echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether getenv is declared" >&5 ++echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_getenv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10959,7 +11382,7 @@ int + main () + { + #ifndef getenv +- char *p = (char *) getenv; ++ (void) getenv; + #endif + + ; +@@ -10967,38 +11390,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_getenv=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_getenv=no ++ ac_cv_have_decl_getenv=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6; } + if test $ac_cv_have_decl_getenv = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -11015,8 +11434,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether malloc is declared" >&5 +-echo $ECHO_N "checking whether malloc is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether malloc is declared" >&5 ++echo $ECHO_N "checking whether malloc is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_malloc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -11031,7 +11450,7 @@ int + main () + { + #ifndef malloc +- char *p = (char *) malloc; ++ (void) malloc; + #endif + + ; +@@ -11039,38 +11458,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_malloc=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_malloc=no ++ ac_cv_have_decl_malloc=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_malloc" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_malloc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_malloc" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_malloc" >&6; } + if test $ac_cv_have_decl_malloc = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -11087,8 +11502,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether realloc is declared" >&5 +-echo $ECHO_N "checking whether realloc is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether realloc is declared" >&5 ++echo $ECHO_N "checking whether realloc is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_realloc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -11103,7 +11518,7 @@ int + main () + { + #ifndef realloc +- char *p = (char *) realloc; ++ (void) realloc; + #endif + + ; +@@ -11111,38 +11526,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_realloc=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_realloc=no ++ ac_cv_have_decl_realloc=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_realloc" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_realloc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_realloc" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_realloc" >&6; } + if test $ac_cv_have_decl_realloc = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -11159,8 +11570,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 +-echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 ++echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_stpcpy+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -11175,7 +11586,7 @@ int + main () + { + #ifndef stpcpy +- char *p = (char *) stpcpy; ++ (void) stpcpy; + #endif + + ; +@@ -11183,38 +11594,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_stpcpy=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_stpcpy=no ++ ac_cv_have_decl_stpcpy=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6; } + if test $ac_cv_have_decl_stpcpy = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -11231,8 +11638,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether strstr is declared" >&5 +-echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether strstr is declared" >&5 ++echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_strstr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -11247,7 +11654,7 @@ int + main () + { + #ifndef strstr +- char *p = (char *) strstr; ++ (void) strstr; + #endif + + ; +@@ -11255,38 +11662,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_strstr=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_strstr=no ++ ac_cv_have_decl_strstr=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6; } + if test $ac_cv_have_decl_strstr = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -11303,8 +11706,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 +-echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 ++echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_snprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -11319,7 +11722,7 @@ int + main () + { + #ifndef snprintf +- char *p = (char *) snprintf; ++ (void) snprintf; + #endif + + ; +@@ -11327,38 +11730,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_snprintf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_snprintf=no ++ ac_cv_have_decl_snprintf=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6; } + if test $ac_cv_have_decl_snprintf = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -11375,8 +11774,8 @@ _ACEOF + fi + + +-echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 +-echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 ++echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_vsnprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -11391,7 +11790,7 @@ int + main () + { + #ifndef vsnprintf +- char *p = (char *) vsnprintf; ++ (void) vsnprintf; + #endif + + ; +@@ -11399,38 +11798,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_vsnprintf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_vsnprintf=no ++ ac_cv_have_decl_vsnprintf=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6; } + if test $ac_cv_have_decl_vsnprintf = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -11609,8 +12004,8 @@ if test "${target}" = "${host}"; then + COREFLAG="$COREFLAG -DAIX_CORE_DUMPX_CORE" + # Not all versions of AIX with -DAIX_CORE_DUMPX_CORE + # have c_impl as a member of struct core_dumpx +- echo "$as_me:$LINENO: checking for c_impl in struct core_dumpx" >&5 +-echo $ECHO_N "checking for c_impl in struct core_dumpx... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for c_impl in struct core_dumpx" >&5 ++echo $ECHO_N "checking for c_impl in struct core_dumpx... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -11627,42 +12022,38 @@ struct core_dumpx c; c.c_impl = 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + + cat >>confdefs.h <<\_ACEOF + #define HAVE_ST_C_IMPL 1 + _ACEOF + +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + rs6000-*-aix4*) COREFILE=rs6000-core.lo ;; + rs6000-*-*) COREFILE=rs6000-core.lo ;; +@@ -11726,18 +12117,19 @@ rm -f conftest.err conftest.$ac_objext c + for ac_header in sys/procfs.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -11748,41 +12140,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -11791,24 +12179,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -11816,9 +12202,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -11842,25 +12229,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -11873,8 +12254,8 @@ fi + done + + if test "$ac_cv_header_sys_procfs_h" = yes; then +- echo "$as_me:$LINENO: checking for prstatus_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for prstatus_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for prstatus_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for prstatus_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_prstatus_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -11896,36 +12277,32 @@ prstatus_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_prstatus_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_prstatus_t=no ++ bfd_cv_have_sys_procfs_type_prstatus_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_prstatus_t = yes; then +@@ -11935,11 +12312,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prstatus_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prstatus_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prstatus_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prstatus_t" >&6; } + +- echo "$as_me:$LINENO: checking for prstatus32_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for prstatus32_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for prstatus32_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for prstatus32_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_prstatus32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -11961,36 +12338,32 @@ prstatus32_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_prstatus32_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_prstatus32_t=no ++ bfd_cv_have_sys_procfs_type_prstatus32_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_prstatus32_t = yes; then +@@ -12000,11 +12373,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prstatus32_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prstatus32_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prstatus32_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prstatus32_t" >&6; } + +- echo "$as_me:$LINENO: checking for prstatus_t.pr_who in sys/procfs.h" >&5 +-echo $ECHO_N "checking for prstatus_t.pr_who in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for prstatus_t.pr_who in sys/procfs.h" >&5 ++echo $ECHO_N "checking for prstatus_t.pr_who in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12026,36 +12399,32 @@ prstatus_t avar; void* aref = (void*) &a + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who=no ++ bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who = yes; then +@@ -12065,11 +12434,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&6; } + +- echo "$as_me:$LINENO: checking for prstatus32_t.pr_who in sys/procfs.h" >&5 +-echo $ECHO_N "checking for prstatus32_t.pr_who in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for prstatus32_t.pr_who in sys/procfs.h" >&5 ++echo $ECHO_N "checking for prstatus32_t.pr_who in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12091,36 +12460,32 @@ prstatus32_t avar; void* aref = (void*) + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who=no ++ bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who = yes; then +@@ -12130,11 +12495,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&6; } + +- echo "$as_me:$LINENO: checking for pstatus_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for pstatus_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for pstatus_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for pstatus_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_pstatus_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12156,36 +12521,32 @@ pstatus_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_pstatus_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_pstatus_t=no ++ bfd_cv_have_sys_procfs_type_pstatus_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_pstatus_t = yes; then +@@ -12195,11 +12556,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_pstatus_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_pstatus_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_pstatus_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_pstatus_t" >&6; } + +- echo "$as_me:$LINENO: checking for pxstatus_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for pxstatus_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for pxstatus_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for pxstatus_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_pxstatus_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12221,36 +12582,32 @@ pxstatus_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_pxstatus_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_pxstatus_t=no ++ bfd_cv_have_sys_procfs_type_pxstatus_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_pxstatus_t = yes; then +@@ -12260,11 +12617,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_pxstatus_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_pxstatus_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_pxstatus_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_pxstatus_t" >&6; } + +- echo "$as_me:$LINENO: checking for pstatus32_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for pstatus32_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for pstatus32_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for pstatus32_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_pstatus32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12286,36 +12643,32 @@ pstatus32_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_pstatus32_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_pstatus32_t=no ++ bfd_cv_have_sys_procfs_type_pstatus32_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_pstatus32_t = yes; then +@@ -12325,11 +12678,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_pstatus32_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_pstatus32_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_pstatus32_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_pstatus32_t" >&6; } + +- echo "$as_me:$LINENO: checking for prpsinfo_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for prpsinfo_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for prpsinfo_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for prpsinfo_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_prpsinfo_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12351,36 +12704,32 @@ prpsinfo_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_prpsinfo_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_prpsinfo_t=no ++ bfd_cv_have_sys_procfs_type_prpsinfo_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_prpsinfo_t = yes; then +@@ -12390,11 +12739,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prpsinfo_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prpsinfo_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prpsinfo_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prpsinfo_t" >&6; } + +- echo "$as_me:$LINENO: checking for prpsinfo32_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for prpsinfo32_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for prpsinfo32_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for prpsinfo32_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_prpsinfo32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12416,36 +12765,32 @@ prpsinfo32_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_prpsinfo32_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_prpsinfo32_t=no ++ bfd_cv_have_sys_procfs_type_prpsinfo32_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_prpsinfo32_t = yes; then +@@ -12455,11 +12800,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&6; } + +- echo "$as_me:$LINENO: checking for psinfo_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for psinfo_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for psinfo_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for psinfo_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_psinfo_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12481,36 +12826,32 @@ psinfo_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_psinfo_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_psinfo_t=no ++ bfd_cv_have_sys_procfs_type_psinfo_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_psinfo_t = yes; then +@@ -12520,11 +12861,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_psinfo_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_psinfo_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_psinfo_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_psinfo_t" >&6; } + +- echo "$as_me:$LINENO: checking for psinfo32_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for psinfo32_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for psinfo32_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for psinfo32_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_psinfo32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12546,36 +12887,32 @@ psinfo32_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_psinfo32_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_psinfo32_t=no ++ bfd_cv_have_sys_procfs_type_psinfo32_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_psinfo32_t = yes; then +@@ -12585,11 +12922,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_psinfo32_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_psinfo32_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_psinfo32_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_psinfo32_t" >&6; } + +- echo "$as_me:$LINENO: checking for lwpstatus_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for lwpstatus_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for lwpstatus_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for lwpstatus_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_lwpstatus_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12611,36 +12948,32 @@ lwpstatus_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_lwpstatus_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_lwpstatus_t=no ++ bfd_cv_have_sys_procfs_type_lwpstatus_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_lwpstatus_t = yes; then +@@ -12650,11 +12983,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_lwpstatus_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_lwpstatus_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_lwpstatus_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_lwpstatus_t" >&6; } + +- echo "$as_me:$LINENO: checking for lwpxstatus_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for lwpxstatus_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for lwpxstatus_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for lwpxstatus_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_lwpxstatus_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12676,36 +13009,32 @@ lwpxstatus_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_lwpxstatus_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_lwpxstatus_t=no ++ bfd_cv_have_sys_procfs_type_lwpxstatus_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_lwpxstatus_t = yes; then +@@ -12715,11 +13044,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&6; } + +- echo "$as_me:$LINENO: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5 +-echo $ECHO_N "checking for lwpstatus_t.pr_context in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5 ++echo $ECHO_N "checking for lwpstatus_t.pr_context in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12741,36 +13070,32 @@ lwpstatus_t avar; void* aref = (void*) & + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context=no ++ bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context = yes; then +@@ -12780,11 +13105,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&6; } + +- echo "$as_me:$LINENO: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5 +-echo $ECHO_N "checking for lwpstatus_t.pr_reg in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5 ++echo $ECHO_N "checking for lwpstatus_t.pr_reg in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12806,36 +13131,32 @@ lwpstatus_t avar; void* aref = (void*) & + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg=no ++ bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg = yes; then +@@ -12845,11 +13166,11 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&6; } + +- echo "$as_me:$LINENO: checking for win32_pstatus_t in sys/procfs.h" >&5 +-echo $ECHO_N "checking for win32_pstatus_t in sys/procfs.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for win32_pstatus_t in sys/procfs.h" >&5 ++echo $ECHO_N "checking for win32_pstatus_t in sys/procfs.h... $ECHO_C" >&6; } + if test "${bfd_cv_have_sys_procfs_type_win32_pstatus_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -12871,36 +13192,32 @@ win32_pstatus_t avar + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bfd_cv_have_sys_procfs_type_win32_pstatus_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bfd_cv_have_sys_procfs_type_win32_pstatus_t=no ++ bfd_cv_have_sys_procfs_type_win32_pstatus_t=no + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + if test $bfd_cv_have_sys_procfs_type_win32_pstatus_t = yes; then +@@ -12910,8 +13227,8 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +- echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_win32_pstatus_t" >&5 +-echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_win32_pstatus_t" >&6 ++ { echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_win32_pstatus_t" >&5 ++echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_win32_pstatus_t" >&6; } + + fi + fi +@@ -13070,6 +13387,7 @@ do + bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; + bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; + bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; ++ bfd_elf32_avr32_vec) tb="$tb elf32-avr32.lo elf32.lo $elf" ;; + bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; + bfd_elf32_bfinfdpic_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; + bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;; +@@ -13389,8 +13707,8 @@ echo "$as_me: WARNING: your compiler may + fi + if test -n "$GCC" ; then + bad_64bit_gcc=no; +- echo "$as_me:$LINENO: checking for gcc version with buggy 64-bit support" >&5 +-echo $ECHO_N "checking for gcc version with buggy 64-bit support... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gcc version with buggy 64-bit support" >&5 ++echo $ECHO_N "checking for gcc version with buggy 64-bit support... $ECHO_C" >&6; } + # Add more tests for gcc versions with non-working 64-bit support here. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -13403,11 +13721,11 @@ _ACEOF + if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP ": 2 : 91 : 1 :" >/dev/null 2>&1; then + bad_64bit_gcc=yes; +- echo "$as_me:$LINENO: result: yes: egcs-1.1.2 on ix86 spotted" >&5 +-echo "${ECHO_T}yes: egcs-1.1.2 on ix86 spotted" >&6 ++ { echo "$as_me:$LINENO: result: yes: egcs-1.1.2 on ix86 spotted" >&5 ++echo "${ECHO_T}yes: egcs-1.1.2 on ix86 spotted" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + rm -f conftest* + +@@ -13445,9 +13763,9 @@ esac + for ac_func in ftello ftello64 fseeko fseeko64 fopen64 + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -13473,68 +13791,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -13544,8 +13854,8 @@ fi + done + + if test x"$ac_cv_func_ftello" = xyes -a x"$ac_cv_func_fseeko" = xyes; then +- echo "$as_me:$LINENO: checking for off_t" >&5 +-echo $ECHO_N "checking for off_t... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for off_t" >&5 ++echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } + if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -13556,61 +13866,57 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef off_t ac__type_new_; + int + main () + { +-if ((off_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (off_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_off_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_off_t=no ++ ac_cv_type_off_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +-echo "${ECHO_T}$ac_cv_type_off_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 ++echo "${ECHO_T}$ac_cv_type_off_t" >&6; } + +-echo "$as_me:$LINENO: checking size of off_t" >&5 +-echo $ECHO_N "checking size of off_t... $ECHO_C" >&6 ++# The cast to long int works around a bug in the HP C Compiler ++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects ++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. ++# This bug is HP SR number 8606223364. ++{ echo "$as_me:$LINENO: checking size of off_t" >&5 ++echo $ECHO_N "checking size of off_t... $ECHO_C" >&6; } + if test "${ac_cv_sizeof_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- if test "$ac_cv_type_off_t" = yes; then +- # The cast to unsigned long works around a bug in the HP C Compiler +- # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +- # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +- # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. + cat >conftest.$ac_ext <<_ACEOF +@@ -13620,10 +13926,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef off_t ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (off_t))) >= 0)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; + test_array [0] = 0 + + ; +@@ -13631,27 +13938,22 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +@@ -13661,10 +13963,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef off_t ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (off_t))) <= $ac_mid)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; + test_array [0] = 0 + + ; +@@ -13672,56 +13975,53 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_lo=`expr $ac_mid + 1` +- if test $ac_lo -le $ac_mid; then +- ac_lo= ac_hi= +- break +- fi +- ac_mid=`expr 2 '*' $ac_mid + 1` ++ ac_lo=`expr $ac_mid + 1` ++ if test $ac_lo -le $ac_mid; then ++ ac_lo= ac_hi= ++ break ++ fi ++ ac_mid=`expr 2 '*' $ac_mid + 1` + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-cat >conftest.$ac_ext <<_ACEOF ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef off_t ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (off_t))) < 0)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; + test_array [0] = 0 + + ; +@@ -13729,27 +14029,22 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +@@ -13759,10 +14054,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef off_t ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (off_t))) >= $ac_mid)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; + test_array [0] = 0 + + ; +@@ -13770,50 +14066,48 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_hi=`expr '(' $ac_mid ')' - 1` +- if test $ac_mid -le $ac_hi; then +- ac_lo= ac_hi= +- break +- fi +- ac_mid=`expr 2 '*' $ac_mid` ++ ac_hi=`expr '(' $ac_mid ')' - 1` ++ if test $ac_mid -le $ac_hi; then ++ ac_lo= ac_hi= ++ break ++ fi ++ ac_mid=`expr 2 '*' $ac_mid` + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_lo= ac_hi= ++ ac_lo= ac_hi= + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # Binary search between lo and hi bounds. + while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` +@@ -13824,10 +14118,11 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++ typedef off_t ac__type_sizeof_; + int + main () + { +-static int test_array [1 - 2 * !(((long) (sizeof (off_t))) <= $ac_mid)]; ++static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; + test_array [0] = 0 + + ; +@@ -13835,52 +14130,45 @@ test_array [0] = 0 + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_lo=`expr '(' $ac_mid ')' + 1` ++ ac_lo=`expr '(' $ac_mid ')' + 1` + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + case $ac_lo in + ?*) ac_cv_sizeof_off_t=$ac_lo;; +-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77 ++'') if test "$ac_cv_type_off_t" = yes; then ++ { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t) + See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot compute sizeof (off_t), 77 ++echo "$as_me: error: cannot compute sizeof (off_t) + See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } ;; ++ { (exit 77); exit 77; }; } ++ else ++ ac_cv_sizeof_off_t=0 ++ fi ;; + esac + else +- if test "$cross_compiling" = yes; then +- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +-See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot run test program while cross compiling +-See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +-else + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -13888,8 +14176,9 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default +-long longval () { return (long) (sizeof (off_t)); } +-unsigned long ulongval () { return (long) (sizeof (off_t)); } ++ typedef off_t ac__type_sizeof_; ++static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } ++static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } + #include + #include + int +@@ -13898,35 +14187,44 @@ main () + + FILE *f = fopen ("conftest.val", "w"); + if (! f) +- exit (1); +- if (((long) (sizeof (off_t))) < 0) ++ return 1; ++ if (((long int) (sizeof (ac__type_sizeof_))) < 0) + { +- long i = longval (); +- if (i != ((long) (sizeof (off_t)))) +- exit (1); ++ long int i = longval (); ++ if (i != ((long int) (sizeof (ac__type_sizeof_)))) ++ return 1; + fprintf (f, "%ld\n", i); + } + else + { +- unsigned long i = ulongval (); +- if (i != ((long) (sizeof (off_t)))) +- exit (1); ++ unsigned long int i = ulongval (); ++ if (i != ((long int) (sizeof (ac__type_sizeof_)))) ++ return 1; + fprintf (f, "%lu\n", i); + } +- exit (ferror (f) || fclose (f) != 0); ++ return ferror (f) || fclose (f) != 0; + + ; + return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -13937,30 +14235,33 @@ echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + ( exit $ac_status ) +-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77 ++if test "$ac_cv_type_off_t" = yes; then ++ { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t) + See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot compute sizeof (off_t), 77 ++echo "$as_me: error: cannot compute sizeof (off_t) + See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +-fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++ { (exit 77); exit 77; }; } ++ else ++ ac_cv_sizeof_off_t=0 ++ fi + fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi + rm -f conftest.val +-else +- ac_cv_sizeof_off_t=0 +-fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_sizeof_off_t" >&5 +-echo "${ECHO_T}$ac_cv_sizeof_off_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_off_t" >&5 ++echo "${ECHO_T}$ac_cv_sizeof_off_t" >&6; } ++ ++ ++ + cat >>confdefs.h <<_ACEOF + #define SIZEOF_OFF_T $ac_cv_sizeof_off_t + _ACEOF + + + fi +-echo "$as_me:$LINENO: checking file_ptr type" >&5 +-echo $ECHO_N "checking file_ptr type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking file_ptr type" >&5 ++echo $ECHO_N "checking file_ptr type... $ECHO_C" >&6; } + bfd_file_ptr="long" + bfd_ufile_ptr="unsigned long" + if test x"$ac_cv_func_ftello64" = xyes -a x"$ac_cv_func_fseeko64" = xyes \ +@@ -13968,8 +14269,8 @@ if test x"$ac_cv_func_ftello64" = xyes - + bfd_file_ptr=BFD_HOST_64_BIT + bfd_ufile_ptr=BFD_HOST_U_64_BIT + fi +-echo "$as_me:$LINENO: result: $bfd_file_ptr" >&5 +-echo "${ECHO_T}$bfd_file_ptr" >&6 ++{ echo "$as_me:$LINENO: result: $bfd_file_ptr" >&5 ++echo "${ECHO_T}$bfd_file_ptr" >&6; } + + + +@@ -13987,18 +14288,19 @@ test -n "${havevecs}" && tdefaults="${td + for ac_header in stdlib.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -14009,41 +14311,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -14052,24 +14350,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -14077,9 +14373,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -14103,25 +14400,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -14137,9 +14428,9 @@ done + for ac_func in getpagesize + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -14165,68 +14456,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -14235,8 +14518,8 @@ _ACEOF + fi + done + +-echo "$as_me:$LINENO: checking for working mmap" >&5 +-echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working mmap" >&5 ++echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } + if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -14278,21 +14561,21 @@ $ac_includes_default + #include + #include + +-#if !STDC_HEADERS && !HAVE_STDLIB_H ++#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H + char *malloc (); + #endif + + /* This mess was copied from the GNU getpagesize.h. */ +-#if !HAVE_GETPAGESIZE ++#ifndef HAVE_GETPAGESIZE + /* Assume that all systems that can run configure have sys/param.h. */ +-# if !HAVE_SYS_PARAM_H ++# ifndef HAVE_SYS_PARAM_H + # define HAVE_SYS_PARAM_H 1 + # endif + + # ifdef _SC_PAGESIZE + # define getpagesize() sysconf(_SC_PAGESIZE) + # else /* no _SC_PAGESIZE */ +-# if HAVE_SYS_PARAM_H ++# ifdef HAVE_SYS_PARAM_H + # include + # ifdef EXEC_PAGESIZE + # define getpagesize() EXEC_PAGESIZE +@@ -14331,15 +14614,15 @@ main () + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) +- exit (1); ++ return 1; + if (write (fd, data, pagesize) != pagesize) +- exit (1); ++ return 1; + close (fd); + + /* Next, try to mmap the file at a fixed address which already has +@@ -14347,17 +14630,17 @@ main () + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) +- exit (1); ++ return 1; + data2 = (char *) malloc (2 * pagesize); + if (!data2) +- exit (1); +- data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); ++ return 1; ++ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) +- exit (1); ++ return 1; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on +@@ -14366,24 +14649,33 @@ main () + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) +- exit (1); ++ return 1; + if (read (fd, data3, pagesize) != pagesize) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) +- exit (1); ++ return 1; + close (fd); +- exit (0); ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -14396,11 +14688,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_func_mmap_fixed_mapped=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +-echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 ++echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } + if test $ac_cv_func_mmap_fixed_mapped = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -14415,9 +14709,9 @@ rm -f conftest.mmap + for ac_func in madvise mprotect + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -14443,68 +14737,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -14522,9 +14808,9 @@ _ACEOF + esac + + rm -f doc/config.status +- ac_config_files="$ac_config_files Makefile doc/Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in" ++ac_config_files="$ac_config_files Makefile doc/Makefile bfd-in3.h:bfd-in2.h po/Makefile.in:po/Make-in" + +- ac_config_commands="$ac_config_commands default" ++ac_config_commands="$ac_config_commands default" + + + +@@ -14549,39 +14835,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done ++ + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -14590,32 +14895,18 @@ test "x$prefix" = xNONE && prefix=$ac_de + # Let make expand exec_prefix. + test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +-# VPATH may cause trouble with some makes, so we remove $(srcdir), +-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +-# trailing colons and then remove the whole line if VPATH becomes empty +-# (actually we leave an empty line to preserve line numbers). +-if test "x$srcdir" = x.; then +- ac_vpsub='/^[ ]*VPATH[ ]*=/{ +-s/:*\$(srcdir):*/:/; +-s/:*\${srcdir}:*/:/; +-s/:*@srcdir@:*/:/; +-s/^\([^=]*=[ ]*\):*/\1/; +-s/:*$//; +-s/^[^=]*=[ ]*$//; +-}' +-fi +- + DEFS=-DHAVE_CONFIG_H + + ac_libobjs= + ac_ltlibobjs= + for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. +- ac_i=`echo "$ac_i" | +- sed 's/\$U\././;s/\.o$//;s/\.obj$//'` +- # 2. Add them. +- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" +- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' ++ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ++ ac_i=`echo "$ac_i" | sed "$ac_script"` ++ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR ++ # will be set to the directory where LIBOBJS objects are built. ++ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ++ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + done + LIBOBJS=$ac_libobjs + +@@ -14674,17 +14965,45 @@ cat >>$CONFIG_STATUS <<\_ACEOF + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++ ++ ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -14694,8 +15013,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi ++ + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -14709,18 +15063,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -14728,159 +15083,120 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + +- +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits +- +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh +-fi ++# CDPATH. ++$as_unset CDPATH + + +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done + +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in +- /*) +- if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || +- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} ++ chmod +x "$as_me.lineno" || ++ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -14889,7 +15205,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -14898,31 +15235,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH +- + exec 6>&1 + +-# Open the log real soon, to keep \$[0] and so on meaningful, and to ++# Save the log message, to keep $[0] and so on meaningful, and to + # report actual input values of CONFIG_FILES etc. instead of their +-# values after options handling. Logging --version etc. is OK. +-exec 5>>config.log +-{ +- echo +- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +-## Running $as_me. ## +-_ASBOX +-} >&5 +-cat >&5 <<_CSEOF +- ++# values after options handling. ++ac_log=" + This file was extended by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS +@@ -14930,30 +15250,20 @@ generated by GNU Autoconf 2.59. Invocat + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +-_CSEOF +-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +-echo >&5 ++on `(hostname || uname -n) 2>/dev/null | sed 1q` ++" ++ + _ACEOF + ++cat >>$CONFIG_STATUS <<_ACEOF + # Files that config.status was made for. +-if test -n "$ac_config_files"; then +- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +-fi ++config_files="$ac_config_files" ++config_headers="$ac_config_headers" ++config_commands="$ac_config_commands" + +-if test -n "$ac_config_headers"; then +- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_links"; then +- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_commands"; then +- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +-fi ++_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +- + ac_cs_usage="\ + \`$as_me' instantiates files from templates according to the + current configuration. +@@ -14961,7 +15271,7 @@ current configuration. + Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit +- -V, --version print version number, then exit ++ -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions +@@ -14980,19 +15290,21 @@ Configuration commands: + $config_commands + + Report bugs to ." +-_ACEOF + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + ac_cs_version="\\ + config.status +-configured by $0, generated by GNU Autoconf 2.59, +- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" ++configured by $0, generated by GNU Autoconf 2.61, ++ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 2006 Free Software Foundation, Inc. + This config.status script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it." +-srcdir=$srcdir +-INSTALL="$INSTALL" ++ ++ac_pwd='$ac_pwd' ++srcdir='$srcdir' ++INSTALL='$INSTALL' + _ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +@@ -15003,39 +15315,24 @@ while test $# != 0 + do + case $1 in + --*=*) +- ac_option=`expr "x$1" : 'x\([^=]*\)='` +- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ++ ac_option=`expr "X$1" : 'X\([^=]*\)='` ++ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; +- -*) ++ *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; +- *) # This is not an option, so the user has probably given explicit +- # arguments. +- ac_option=$1 +- ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; +- --version | --vers* | -V ) +- echo "$ac_cs_version"; exit 0 ;; +- --he | --h) +- # Conflict between --help and --header +- { { echo "$as_me:$LINENO: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&2;} +- { (exit 1); exit 1; }; };; +- --help | --hel | -h ) +- echo "$ac_cs_usage"; exit 0 ;; +- --debug | --d* | -d ) ++ --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) ++ echo "$ac_cs_version"; exit ;; ++ --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift +@@ -15045,18 +15342,24 @@ Try \`$0 --help' for more information." + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; ++ --he | --h) ++ # Conflict between --help and --header ++ { echo "$as_me: error: ambiguous option: $1 ++Try \`$0 --help' for more information." >&2 ++ { (exit 1); exit 1; }; };; ++ --help | --hel | -h ) ++ echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. +- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&2;} ++ -*) { echo "$as_me: error: unrecognized option: $1 ++Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + +- *) ac_config_targets="$ac_config_targets $1" ;; ++ *) ac_config_targets="$ac_config_targets $1" ++ ac_need_defaults=false ;; + + esac + shift +@@ -15072,42 +15375,54 @@ fi + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + if \$ac_cs_recheck; then +- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 +- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion ++ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 ++ CONFIG_SHELL=$SHELL ++ export CONFIG_SHELL ++ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + fi + + _ACEOF ++cat >>$CONFIG_STATUS <<\_ACEOF ++exec 5>>config.log ++{ ++ echo ++ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ++## Running $as_me. ## ++_ASBOX ++ echo "$ac_log" ++} >&5 + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + # +-# INIT-COMMANDS section. ++# INIT-COMMANDS + # +- + AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + + _ACEOF + +- +- + cat >>$CONFIG_STATUS <<\_ACEOF ++ ++# Handling of arguments. + for ac_config_target in $ac_config_targets + do +- case "$ac_config_target" in +- # Handling of arguments. +- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; +- "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; +- "bfd-in3.h" ) CONFIG_FILES="$CONFIG_FILES bfd-in3.h:bfd-in2.h" ;; +- "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; +- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; +- "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; +- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ case $ac_config_target in ++ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; ++ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; ++ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; ++ "bfd-in3.h") CONFIG_FILES="$CONFIG_FILES bfd-in3.h:bfd-in2.h" ;; ++ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; ++ "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; ++ + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac + done + ++ + # If the user did not use the arguments to specify the items to instantiate, + # then the envvar interface is used. Set only those that are not. + # We use the long form for the default assignment because of an extremely +@@ -15119,401 +15434,504 @@ if $ac_need_defaults; then + fi + + # Have a temporary directory for convenience. Make it in the build tree +-# simply because there is no reason to put it here, and in addition, ++# simply because there is no reason against having it here, and in addition, + # creating and moving files from /tmp can sometimes cause problems. +-# Create a temporary directory, and hook for its removal unless debugging. ++# Hook for its removal unless debugging. ++# Note that there is a small window in which the directory will not be cleaned: ++# after its creation but before its name has been assigned to `$tmp'. + $debug || + { +- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 ++ tmp= ++ trap 'exit_status=$? ++ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ++' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 + } +- + # Create a (secure) tmp directory for tmp files. + + { +- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && ++ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" + } || + { +- tmp=./confstat$$-$RANDOM +- (umask 077 && mkdir $tmp) ++ tmp=./conf$$-$RANDOM ++ (umask 077 && mkdir "$tmp") + } || + { + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } + } + +-_ACEOF +- +-cat >>$CONFIG_STATUS <<_ACEOF +- + # +-# CONFIG_FILES section. ++# Set up the sed scripts for CONFIG_FILES section. + # + + # No need to generate the scripts if there are no CONFIG_FILES. + # This happens for instance when ./config.status config.h +-if test -n "\$CONFIG_FILES"; then +- # Protect against being on the right side of a sed subst in config.status. +- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; +- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +-s,@SHELL@,$SHELL,;t t +-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +-s,@exec_prefix@,$exec_prefix,;t t +-s,@prefix@,$prefix,;t t +-s,@program_transform_name@,$program_transform_name,;t t +-s,@bindir@,$bindir,;t t +-s,@sbindir@,$sbindir,;t t +-s,@libexecdir@,$libexecdir,;t t +-s,@datadir@,$datadir,;t t +-s,@sysconfdir@,$sysconfdir,;t t +-s,@sharedstatedir@,$sharedstatedir,;t t +-s,@localstatedir@,$localstatedir,;t t +-s,@libdir@,$libdir,;t t +-s,@includedir@,$includedir,;t t +-s,@oldincludedir@,$oldincludedir,;t t +-s,@infodir@,$infodir,;t t +-s,@mandir@,$mandir,;t t +-s,@build_alias@,$build_alias,;t t +-s,@host_alias@,$host_alias,;t t +-s,@target_alias@,$target_alias,;t t +-s,@DEFS@,$DEFS,;t t +-s,@ECHO_C@,$ECHO_C,;t t +-s,@ECHO_N@,$ECHO_N,;t t +-s,@ECHO_T@,$ECHO_T,;t t +-s,@LIBS@,$LIBS,;t t +-s,@build@,$build,;t t +-s,@build_cpu@,$build_cpu,;t t +-s,@build_vendor@,$build_vendor,;t t +-s,@build_os@,$build_os,;t t +-s,@host@,$host,;t t +-s,@host_cpu@,$host_cpu,;t t +-s,@host_vendor@,$host_vendor,;t t +-s,@host_os@,$host_os,;t t +-s,@target@,$target,;t t +-s,@target_cpu@,$target_cpu,;t t +-s,@target_vendor@,$target_vendor,;t t +-s,@target_os@,$target_os,;t t +-s,@CC@,$CC,;t t +-s,@CFLAGS@,$CFLAGS,;t t +-s,@LDFLAGS@,$LDFLAGS,;t t +-s,@CPPFLAGS@,$CPPFLAGS,;t t +-s,@ac_ct_CC@,$ac_ct_CC,;t t +-s,@EXEEXT@,$EXEEXT,;t t +-s,@OBJEXT@,$OBJEXT,;t t +-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +-s,@INSTALL_DATA@,$INSTALL_DATA,;t t +-s,@CYGPATH_W@,$CYGPATH_W,;t t +-s,@PACKAGE@,$PACKAGE,;t t +-s,@VERSION@,$VERSION,;t t +-s,@ACLOCAL@,$ACLOCAL,;t t +-s,@AUTOCONF@,$AUTOCONF,;t t +-s,@AUTOMAKE@,$AUTOMAKE,;t t +-s,@AUTOHEADER@,$AUTOHEADER,;t t +-s,@MAKEINFO@,$MAKEINFO,;t t +-s,@install_sh@,$install_sh,;t t +-s,@STRIP@,$STRIP,;t t +-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +-s,@mkdir_p@,$mkdir_p,;t t +-s,@AWK@,$AWK,;t t +-s,@SET_MAKE@,$SET_MAKE,;t t +-s,@am__leading_dot@,$am__leading_dot,;t t +-s,@AMTAR@,$AMTAR,;t t +-s,@am__tar@,$am__tar,;t t +-s,@am__untar@,$am__untar,;t t +-s,@DEPDIR@,$DEPDIR,;t t +-s,@am__include@,$am__include,;t t +-s,@am__quote@,$am__quote,;t t +-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +-s,@CCDEPMODE@,$CCDEPMODE,;t t +-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +-s,@AR@,$AR,;t t +-s,@ac_ct_AR@,$ac_ct_AR,;t t +-s,@RANLIB@,$RANLIB,;t t +-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +-s,@LN_S@,$LN_S,;t t +-s,@LIBTOOL@,$LIBTOOL,;t t +-s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t +-s,@NO_WERROR@,$NO_WERROR,;t t +-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +-s,@MAINT@,$MAINT,;t t +-s,@INSTALL_LIBBFD_TRUE@,$INSTALL_LIBBFD_TRUE,;t t +-s,@INSTALL_LIBBFD_FALSE@,$INSTALL_LIBBFD_FALSE,;t t +-s,@host_noncanonical@,$host_noncanonical,;t t +-s,@target_noncanonical@,$target_noncanonical,;t t +-s,@bfdlibdir@,$bfdlibdir,;t t +-s,@bfdincludedir@,$bfdincludedir,;t t +-s,@CPP@,$CPP,;t t +-s,@EGREP@,$EGREP,;t t +-s,@ALLOCA@,$ALLOCA,;t t +-s,@USE_NLS@,$USE_NLS,;t t +-s,@MSGFMT@,$MSGFMT,;t t +-s,@GMSGFMT@,$GMSGFMT,;t t +-s,@XGETTEXT@,$XGETTEXT,;t t +-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t +-s,@CATALOGS@,$CATALOGS,;t t +-s,@CATOBJEXT@,$CATOBJEXT,;t t +-s,@DATADIRNAME@,$DATADIRNAME,;t t +-s,@GMOFILES@,$GMOFILES,;t t +-s,@INSTOBJEXT@,$INSTOBJEXT,;t t +-s,@INTLDEPS@,$INTLDEPS,;t t +-s,@INTLLIBS@,$INTLLIBS,;t t +-s,@INTLOBJS@,$INTLOBJS,;t t +-s,@POFILES@,$POFILES,;t t +-s,@POSUB@,$POSUB,;t t +-s,@INCLUDE_LOCALE_H@,$INCLUDE_LOCALE_H,;t t +-s,@GT_NO@,$GT_NO,;t t +-s,@GT_YES@,$GT_YES,;t t +-s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +-s,@l@,$l,;t t +-s,@HDEFINES@,$HDEFINES,;t t +-s,@BFD_HOST_64BIT_LONG@,$BFD_HOST_64BIT_LONG,;t t +-s,@BFD_HOST_LONG_LONG@,$BFD_HOST_LONG_LONG,;t t +-s,@BFD_HOST_64_BIT_DEFINED@,$BFD_HOST_64_BIT_DEFINED,;t t +-s,@BFD_HOST_64_BIT@,$BFD_HOST_64_BIT,;t t +-s,@BFD_HOST_U_64_BIT@,$BFD_HOST_U_64_BIT,;t t +-s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t +-s,@EXEEXT_FOR_BUILD@,$EXEEXT_FOR_BUILD,;t t +-s,@COREFILE@,$COREFILE,;t t +-s,@COREFLAG@,$COREFLAG,;t t +-s,@WIN32LDFLAGS@,$WIN32LDFLAGS,;t t +-s,@WIN32LIBADD@,$WIN32LIBADD,;t t +-s,@TDEFINES@,$TDEFINES,;t t +-s,@wordsize@,$wordsize,;t t +-s,@bfd_libs@,$bfd_libs,;t t +-s,@all_backends@,$all_backends,;t t +-s,@bfd_backends@,$bfd_backends,;t t +-s,@bfd_machines@,$bfd_machines,;t t +-s,@bfd_default_target_size@,$bfd_default_target_size,;t t +-s,@bfd_file_ptr@,$bfd_file_ptr,;t t +-s,@bfd_ufile_ptr@,$bfd_ufile_ptr,;t t +-s,@tdefaults@,$tdefaults,;t t +-s,@datarootdir@,$datarootdir,;t t +-s,@docdir@,$docdir,;t t +-s,@htmldir@,$htmldir,;t t +-s,@LIBOBJS@,$LIBOBJS,;t t +-s,@LTLIBOBJS@,$LTLIBOBJS,;t t +-CEOF +- +-_ACEOF +- +- cat >>$CONFIG_STATUS <<\_ACEOF +- # Split the substitutions into bite-sized pieces for seds with +- # small command number limits, like on Digital OSF/1 and HP-UX. +- ac_max_sed_lines=48 +- ac_sed_frag=1 # Number of current file. +- ac_beg=1 # First line for current file. +- ac_end=$ac_max_sed_lines # Line after last line for current file. +- ac_more_lines=: +- ac_sed_cmds= +- while $ac_more_lines; do +- if test $ac_beg -gt 1; then +- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- else +- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- fi +- if test ! -s $tmp/subs.frag; then +- ac_more_lines=false +- else +- # The purpose of the label and of the branching condition is to +- # speed up the sed processing (if there are no `@' at all, there +- # is no need to browse any of the substitutions). +- # These are the two extra sed commands mentioned above. +- (echo ':t +- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" +- else +- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" +- fi +- ac_sed_frag=`expr $ac_sed_frag + 1` +- ac_beg=$ac_end +- ac_end=`expr $ac_end + $ac_max_sed_lines` +- fi +- done +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds=cat ++if test -n "$CONFIG_FILES"; then ++ ++_ACEOF ++ ++ ++ ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++SHELL!$SHELL$ac_delim ++PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim ++PACKAGE_NAME!$PACKAGE_NAME$ac_delim ++PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim ++PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim ++PACKAGE_STRING!$PACKAGE_STRING$ac_delim ++PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim ++exec_prefix!$exec_prefix$ac_delim ++prefix!$prefix$ac_delim ++program_transform_name!$program_transform_name$ac_delim ++bindir!$bindir$ac_delim ++sbindir!$sbindir$ac_delim ++libexecdir!$libexecdir$ac_delim ++datarootdir!$datarootdir$ac_delim ++datadir!$datadir$ac_delim ++sysconfdir!$sysconfdir$ac_delim ++sharedstatedir!$sharedstatedir$ac_delim ++localstatedir!$localstatedir$ac_delim ++includedir!$includedir$ac_delim ++oldincludedir!$oldincludedir$ac_delim ++docdir!$docdir$ac_delim ++infodir!$infodir$ac_delim ++htmldir!$htmldir$ac_delim ++dvidir!$dvidir$ac_delim ++pdfdir!$pdfdir$ac_delim ++psdir!$psdir$ac_delim ++libdir!$libdir$ac_delim ++localedir!$localedir$ac_delim ++mandir!$mandir$ac_delim ++DEFS!$DEFS$ac_delim ++ECHO_C!$ECHO_C$ac_delim ++ECHO_N!$ECHO_N$ac_delim ++ECHO_T!$ECHO_T$ac_delim ++LIBS!$LIBS$ac_delim ++build_alias!$build_alias$ac_delim ++host_alias!$host_alias$ac_delim ++target_alias!$target_alias$ac_delim ++build!$build$ac_delim ++build_cpu!$build_cpu$ac_delim ++build_vendor!$build_vendor$ac_delim ++build_os!$build_os$ac_delim ++host!$host$ac_delim ++host_cpu!$host_cpu$ac_delim ++host_vendor!$host_vendor$ac_delim ++host_os!$host_os$ac_delim ++target!$target$ac_delim ++target_cpu!$target_cpu$ac_delim ++target_vendor!$target_vendor$ac_delim ++target_os!$target_os$ac_delim ++CC!$CC$ac_delim ++CFLAGS!$CFLAGS$ac_delim ++LDFLAGS!$LDFLAGS$ac_delim ++CPPFLAGS!$CPPFLAGS$ac_delim ++ac_ct_CC!$ac_ct_CC$ac_delim ++EXEEXT!$EXEEXT$ac_delim ++OBJEXT!$OBJEXT$ac_delim ++INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim ++INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim ++INSTALL_DATA!$INSTALL_DATA$ac_delim ++CYGPATH_W!$CYGPATH_W$ac_delim ++PACKAGE!$PACKAGE$ac_delim ++VERSION!$VERSION$ac_delim ++ACLOCAL!$ACLOCAL$ac_delim ++AUTOCONF!$AUTOCONF$ac_delim ++AUTOMAKE!$AUTOMAKE$ac_delim ++AUTOHEADER!$AUTOHEADER$ac_delim ++MAKEINFO!$MAKEINFO$ac_delim ++install_sh!$install_sh$ac_delim ++STRIP!$STRIP$ac_delim ++INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim ++mkdir_p!$mkdir_p$ac_delim ++AWK!$AWK$ac_delim ++SET_MAKE!$SET_MAKE$ac_delim ++am__leading_dot!$am__leading_dot$ac_delim ++AMTAR!$AMTAR$ac_delim ++am__tar!$am__tar$ac_delim ++am__untar!$am__untar$ac_delim ++DEPDIR!$DEPDIR$ac_delim ++am__include!$am__include$ac_delim ++am__quote!$am__quote$ac_delim ++AMDEP_TRUE!$AMDEP_TRUE$ac_delim ++AMDEP_FALSE!$AMDEP_FALSE$ac_delim ++AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim ++CCDEPMODE!$CCDEPMODE$ac_delim ++am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim ++am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim ++AR!$AR$ac_delim ++RANLIB!$RANLIB$ac_delim ++LN_S!$LN_S$ac_delim ++LIBTOOL!$LIBTOOL$ac_delim ++WARN_CFLAGS!$WARN_CFLAGS$ac_delim ++NO_WERROR!$NO_WERROR$ac_delim ++MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim ++MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim ++MAINT!$MAINT$ac_delim ++INSTALL_LIBBFD_TRUE!$INSTALL_LIBBFD_TRUE$ac_delim ++INSTALL_LIBBFD_FALSE!$INSTALL_LIBBFD_FALSE$ac_delim ++_ACEOF ++ ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +-fi # test -n "$CONFIG_FILES" ++done ++ ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi + ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b ++_ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++CEOF$ac_eof ++_ACEOF ++ ++ ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++host_noncanonical!$host_noncanonical$ac_delim ++target_noncanonical!$target_noncanonical$ac_delim ++bfdlibdir!$bfdlibdir$ac_delim ++bfdincludedir!$bfdincludedir$ac_delim ++CPP!$CPP$ac_delim ++GREP!$GREP$ac_delim ++EGREP!$EGREP$ac_delim ++ALLOCA!$ALLOCA$ac_delim ++USE_NLS!$USE_NLS$ac_delim ++MSGFMT!$MSGFMT$ac_delim ++GMSGFMT!$GMSGFMT$ac_delim ++XGETTEXT!$XGETTEXT$ac_delim ++USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim ++CATALOGS!$CATALOGS$ac_delim ++CATOBJEXT!$CATOBJEXT$ac_delim ++DATADIRNAME!$DATADIRNAME$ac_delim ++GMOFILES!$GMOFILES$ac_delim ++INSTOBJEXT!$INSTOBJEXT$ac_delim ++INTLDEPS!$INTLDEPS$ac_delim ++INTLLIBS!$INTLLIBS$ac_delim ++INTLOBJS!$INTLOBJS$ac_delim ++POFILES!$POFILES$ac_delim ++POSUB!$POSUB$ac_delim ++INCLUDE_LOCALE_H!$INCLUDE_LOCALE_H$ac_delim ++GT_NO!$GT_NO$ac_delim ++GT_YES!$GT_YES$ac_delim ++MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim ++l!$l$ac_delim ++HDEFINES!$HDEFINES$ac_delim ++BFD_HOST_64BIT_LONG!$BFD_HOST_64BIT_LONG$ac_delim ++BFD_HOST_LONG_LONG!$BFD_HOST_LONG_LONG$ac_delim ++BFD_HOST_64_BIT_DEFINED!$BFD_HOST_64_BIT_DEFINED$ac_delim ++BFD_HOST_64_BIT!$BFD_HOST_64_BIT$ac_delim ++BFD_HOST_U_64_BIT!$BFD_HOST_U_64_BIT$ac_delim ++CC_FOR_BUILD!$CC_FOR_BUILD$ac_delim ++EXEEXT_FOR_BUILD!$EXEEXT_FOR_BUILD$ac_delim ++COREFILE!$COREFILE$ac_delim ++COREFLAG!$COREFLAG$ac_delim ++WIN32LDFLAGS!$WIN32LDFLAGS$ac_delim ++WIN32LIBADD!$WIN32LIBADD$ac_delim ++TDEFINES!$TDEFINES$ac_delim ++wordsize!$wordsize$ac_delim ++bfd_libs!$bfd_libs$ac_delim ++all_backends!$all_backends$ac_delim ++bfd_backends!$bfd_backends$ac_delim ++bfd_machines!$bfd_machines$ac_delim ++bfd_default_target_size!$bfd_default_target_size$ac_delim ++bfd_file_ptr!$bfd_file_ptr$ac_delim ++bfd_ufile_ptr!$bfd_ufile_ptr$ac_delim ++tdefaults!$tdefaults$ac_delim ++LIBOBJS!$LIBOBJS$ac_delim ++LTLIBOBJS!$LTLIBOBJS$ac_delim + _ACEOF ++ ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 52; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " ++ fi ++done ++ ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi ++ ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end ++_ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++:end ++s/|#_!!_#|//g ++CEOF$ac_eof ++_ACEOF ++ ++ ++# VPATH may cause trouble with some makes, so we remove $(srcdir), ++# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and ++# trailing colons and then remove the whole line if VPATH becomes empty ++# (actually we leave an empty line to preserve line numbers). ++if test "x$srcdir" = x.; then ++ ac_vpsub='/^[ ]*VPATH[ ]*=/{ ++s/:*\$(srcdir):*/:/ ++s/:*\${srcdir}:*/:/ ++s/:*@srcdir@:*/:/ ++s/^\([^=]*=[ ]*\):*/\1/ ++s/:*$// ++s/^[^=]*=[ ]*$// ++}' ++fi ++ + cat >>$CONFIG_STATUS <<\_ACEOF +-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". +- case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++fi # test -n "$CONFIG_FILES" ++ ++ ++for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS ++do ++ case $ac_tag in ++ :[FHLC]) ac_mode=$ac_tag; continue;; ++ esac ++ case $ac_mode$ac_tag in ++ :[FHL]*:*);; ++ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 ++echo "$as_me: error: Invalid tag $ac_tag." >&2;} ++ { (exit 1); exit 1; }; };; ++ :[FH]-) ac_tag=-:-;; ++ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; ++ esac ++ ac_save_IFS=$IFS ++ IFS=: ++ set x $ac_tag ++ IFS=$ac_save_IFS ++ shift ++ ac_file=$1 ++ shift ++ ++ case $ac_mode in ++ :L) ac_source=$1;; ++ :[FH]) ++ ac_file_inputs= ++ for ac_f ++ do ++ case $ac_f in ++ -) ac_f="$tmp/stdin";; ++ *) # Look for the file first in the build tree, then in the source tree ++ # (if the path is not absolute). The absolute path cannot be DOS-style, ++ # because $ac_f cannot contain `:'. ++ test -f "$ac_f" || ++ case $ac_f in ++ [\\/$]*) false;; ++ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; ++ esac || ++ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 ++echo "$as_me: error: cannot find input file: $ac_f" >&2;} ++ { (exit 1); exit 1; }; };; ++ esac ++ ac_file_inputs="$ac_file_inputs $ac_f" ++ done ++ ++ # Let's still pretend it is `configure' which instantiates (i.e., don't ++ # use $as_me), people would be surprised to read: ++ # /* config.h. Generated by config.status. */ ++ configure_input="Generated from "`IFS=: ++ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." ++ if test x"$ac_file" != x-; then ++ configure_input="$ac_file. $configure_input" ++ { echo "$as_me:$LINENO: creating $ac_file" >&5 ++echo "$as_me: creating $ac_file" >&6;} ++ fi ++ ++ case $ac_tag in ++ *:-:* | *:-) cat >"$tmp/stdin";; ++ esac ++ ;; + esac + +- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. +- ac_dir=`(dirname "$ac_file") 2>/dev/null || ++ ac_dir=`$as_dirname -- "$ac_file" || + $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir="$ac_dir" ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac + ++ case $ac_mode in ++ :F) ++ # ++ # CONFIG_FILE ++ # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; +- *) ac_INSTALL=$ac_top_builddir$INSTALL ;; ++ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac ++_ACEOF + +- if test x"$ac_file" != x-; then +- { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- rm -f "$ac_file" +- fi +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- configure_input= +- else +- configure_input="$ac_file. " +- fi +- configure_input=$configure_input"Generated from `echo $ac_file_in | +- sed 's,.*/,,'` by configure." +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } ++cat >>$CONFIG_STATUS <<\_ACEOF ++# If the template does not know about datarootdir, expand it. ++# FIXME: This hack should be removed a few years after 2.60. ++ac_datarootdir_hack=; ac_datarootdir_seen= ++ ++case `sed -n '/datarootdir/ { ++ p ++ q ++} ++/@datadir@/p ++/@docdir@/p ++/@infodir@/p ++/@localedir@/p ++/@mandir@/p ++' $ac_file_inputs` in ++*datarootdir*) ac_datarootdir_seen=yes;; ++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) ++ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 ++echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} ++_ACEOF ++cat >>$CONFIG_STATUS <<_ACEOF ++ ac_datarootdir_hack=' ++ s&@datadir@&$datadir&g ++ s&@docdir@&$docdir&g ++ s&@infodir@&$infodir&g ++ s&@localedir@&$localedir&g ++ s&@mandir@&$mandir&g ++ s&\\\${datarootdir}&$datarootdir&g' ;; ++esac + _ACEOF ++ ++# Neutralize VPATH when `$srcdir' = `.'. ++# Shell code in configure.ac might set extrasub. ++# FIXME: do we really want to maintain this feature? + cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub + $extrasub +@@ -15521,248 +15939,130 @@ _ACEOF + cat >>$CONFIG_STATUS <<\_ACEOF + :t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b +-s,@configure_input@,$configure_input,;t t +-s,@srcdir@,$ac_srcdir,;t t +-s,@abs_srcdir@,$ac_abs_srcdir,;t t +-s,@top_srcdir@,$ac_top_srcdir,;t t +-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +-s,@builddir@,$ac_builddir,;t t +-s,@abs_builddir@,$ac_abs_builddir,;t t +-s,@top_builddir@,$ac_top_builddir,;t t +-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +-s,@INSTALL@,$ac_INSTALL,;t t +-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out +- rm -f $tmp/stdin +- if test x"$ac_file" != x-; then +- mv $tmp/out $ac_file +- else +- cat $tmp/out +- rm -f $tmp/out +- fi +- +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_HEADER section. +-# +- +-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +-# NAME is the cpp macro being defined and VALUE is the value it is being given. +-# +-# ac_d sets the value in "#define NAME VALUE" lines. +-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +-ac_dB='[ ].*$,\1#\2' +-ac_dC=' ' +-ac_dD=',;t' +-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +-ac_uB='$,\1#\2define\3' +-ac_uC=' ' +-ac_uD=',;t' ++s&@configure_input@&$configure_input&;t t ++s&@top_builddir@&$ac_top_builddir_sub&;t t ++s&@srcdir@&$ac_srcdir&;t t ++s&@abs_srcdir@&$ac_abs_srcdir&;t t ++s&@top_srcdir@&$ac_top_srcdir&;t t ++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t ++s&@builddir@&$ac_builddir&;t t ++s&@abs_builddir@&$ac_abs_builddir&;t t ++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t ++s&@INSTALL@&$ac_INSTALL&;t t ++$ac_datarootdir_hack ++" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out ++ ++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && ++ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && ++ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && ++ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&5 ++echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&2;} + +-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". ++ rm -f "$tmp/stdin" + case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++ -) cat "$tmp/out"; rm -f "$tmp/out";; ++ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac ++ ;; ++ :H) ++ # ++ # CONFIG_HEADER ++ # ++_ACEOF ++ ++# Transform confdefs.h into a sed script `conftest.defines', that ++# substitutes the proper values into config.h.in to produce config.h. ++rm -f conftest.defines conftest.tail ++# First, append a space to every undef/define line, to ease matching. ++echo 's/$/ /' >conftest.defines ++# Then, protect against being on the right side of a sed subst, or in ++# an unquoted here document, in config.status. If some macros were ++# called several times there might be several #defines for the same ++# symbol, which is useless. But do not sort them, since the last ++# AC_DEFINE must be honored. ++ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* ++# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where ++# NAME is the cpp macro being defined, VALUE is the value it is being given. ++# PARAMS is the parameter list in the macro definition--in most cases, it's ++# just an empty string. ++ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ++ac_dB='\\)[ (].*,\\1define\\2' ++ac_dC=' ' ++ac_dD=' ,' + +- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- # Do quote $f, to prevent DOS paths from being IFS'd. +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } +- # Remove the trailing spaces. +- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in +- +-_ACEOF +- +-# Transform confdefs.h into two sed scripts, `conftest.defines' and +-# `conftest.undefs', that substitutes the proper values into +-# config.h.in to produce config.h. The first handles `#define' +-# templates, and the second `#undef' templates. +-# And first: Protect against being on the right side of a sed subst in +-# config.status. Protect against being in an unquoted here document +-# in config.status. +-rm -f conftest.defines conftest.undefs +-# Using a here document instead of a string reduces the quoting nightmare. +-# Putting comments in sed scripts is not portable. +-# +-# `end' is used to avoid that the second main sed command (meant for +-# 0-ary CPP macros) applies to n-ary macro definitions. +-# See the Autoconf documentation for `clear'. +-cat >confdef2sed.sed <<\_ACEOF +-s/[\\&,]/\\&/g +-s,[\\$`],\\&,g +-t clear +-: clear +-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +-t end +-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +-: end +-_ACEOF +-# If some macros were called several times there might be several times +-# the same #defines, which is useless. Nevertheless, we may not want to +-# sort them, since we want the *last* AC-DEFINE to be honored. +-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +-rm -f confdef2sed.sed ++uniq confdefs.h | ++ sed -n ' ++ t rset ++ :rset ++ s/^[ ]*#[ ]*define[ ][ ]*// ++ t ok ++ d ++ :ok ++ s/[\\&,]/\\&/g ++ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p ++ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ++ ' >>conftest.defines + +-# This sed command replaces #undef with comments. This is necessary, for ++# Remove the space that was appended to ease matching. ++# Then replace #undef with comments. This is necessary, for + # example, in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. +-cat >>conftest.undefs <<\_ACEOF +-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, ++# (The regexp can be short, since the line contains either #define or #undef.) ++echo 's/ $// ++s,^[ #]*u.*,/* & */,' >>conftest.defines ++ ++# Break up conftest.defines: ++ac_max_sed_lines=50 ++ ++# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" ++# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" ++# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" ++# et cetera. ++ac_in='$ac_file_inputs' ++ac_out='"$tmp/out1"' ++ac_nxt='"$tmp/out2"' ++ ++while : ++do ++ # Write a here document: ++ cat >>$CONFIG_STATUS <<_ACEOF ++ # First, check the format of the line: ++ cat >"\$tmp/defines.sed" <<\\CEOF ++/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def ++/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def ++b ++:def + _ACEOF +- +-# Break up conftest.defines because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +-echo ' :' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.defines >/dev/null +-do +- # Write a limited-size here document to $tmp/defines.sed. +- echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#define' lines. +- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS ++ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF +- sed -f $tmp/defines.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail ++ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ++ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in ++ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail ++ grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines + done +-rm -f conftest.defines +-echo ' fi # grep' >>$CONFIG_STATUS +-echo >>$CONFIG_STATUS +- +-# Break up conftest.undefs because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.undefs >/dev/null +-do +- # Write a limited-size here document to $tmp/undefs.sed. +- echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#undef' +- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS +- echo 'CEOF +- sed -f $tmp/undefs.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail +- rm -f conftest.undefs +- mv conftest.tail conftest.undefs +-done +-rm -f conftest.undefs ++rm -f conftest.defines conftest.tail + ++echo "ac_result=$ac_in" >>$CONFIG_STATUS + cat >>$CONFIG_STATUS <<\_ACEOF +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- echo "/* Generated by configure. */" >$tmp/config.h +- else +- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h +- fi +- cat $tmp/in >>$tmp/config.h +- rm -f $tmp/in + if test x"$ac_file" != x-; then +- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then ++ echo "/* $configure_input */" >"$tmp/config.h" ++ cat "$ac_result" >>"$tmp/config.h" ++ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 + echo "$as_me: $ac_file is unchanged" >&6;} + else +- ac_dir=`(dirname "$ac_file") 2>/dev/null || +-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_file" : 'X\(//\)[^/]' \| \ +- X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- + rm -f $ac_file +- mv $tmp/config.h $ac_file ++ mv "$tmp/config.h" $ac_file + fi + else +- cat $tmp/config.h +- rm -f $tmp/config.h ++ echo "/* $configure_input */" ++ cat "$ac_result" + fi ++ rm -f "$tmp/out12" + # Compute $ac_file's index in $config_headers. + _am_stamp_count=1 + for _am_header in $config_headers :; do +@@ -15773,135 +16073,39 @@ for _am_header in $config_headers :; do + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac + done +-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || ++echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || + $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ +- X$ac_file : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X$ac_file : 'X\(/\)' \| . 2>/dev/null || + echo X$ac_file | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'`/stamp-h$_am_stamp_count +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_COMMANDS section. +-# +-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue +- ac_dest=`echo "$ac_file" | sed 's,:.*,,'` +- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_dir=`(dirname "$ac_dest") 2>/dev/null || +-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_dest" : 'X\(//\)[^/]' \| \ +- X"$ac_dest" : 'X\(//\)$' \| \ +- X"$ac_dest" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_dest" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- +- ac_builddir=. +- +-if test "$ac_dir" != .; then +- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi +- +-case $srcdir in +- .) # No --srcdir option. We are building in place. +- ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. +- ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'`/stamp-h$_am_stamp_count ++ ;; + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac ++ :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 ++echo "$as_me: executing $ac_file commands" >&6;} ++ ;; ++ esac + + +- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +-echo "$as_me: executing $ac_dest commands" >&6;} +- case $ac_dest in +- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do ++ case $ac_file$ac_mode in ++ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. +@@ -15911,18 +16115,29 @@ echo "$as_me: executing $ac_dest command + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then +- dirpart=`(dirname "$mf") 2>/dev/null || ++ dirpart=`$as_dirname -- "$mf" || + $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ +- X"$mf" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$mf" : 'X\(/\)' \| . 2>/dev/null || + echo X"$mf" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + else + continue + fi +@@ -15944,54 +16159,80 @@ echo X"$mf" | + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue +- fdir=`(dirname "$file") 2>/dev/null || ++ fdir=`$as_dirname -- "$file" || + $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ +- X"$file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p $dirpart/$fdir +- else +- as_dir=$dirpart/$fdir ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir=$dirpart/$fdir ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done + ;; +- default ) sed -e '/SRC-POTFILES =/r po/SRC-POTFILES' -e '/BLD-POTFILES =/r po/BLD-POTFILES' po/Makefile.in > po/Makefile ;; ++ "default":C) sed -e '/SRC-POTFILES =/r po/SRC-POTFILES' -e '/BLD-POTFILES =/r po/BLD-POTFILES' po/Makefile.in > po/Makefile ;; ++ + esac +-done +-_ACEOF ++done # for ac_tag + +-cat >>$CONFIG_STATUS <<\_ACEOF + + { (exit 0); exit 0; } + _ACEOF +diff -Nrup binutils-2.17/bfd/configure.in binutils-2.17.atmel.1.3.0/bfd/configure.in +--- binutils-2.17/bfd/configure.in 2006-06-23 20:17:07.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/configure.in 2007-09-28 10:30:44.000000000 +0200 +@@ -8,7 +8,7 @@ AC_CONFIG_SRCDIR([libbfd.c]) + AC_CANONICAL_TARGET + AC_ISC_POSIX + +-AM_INIT_AUTOMAKE(bfd, 2.17) ++AM_INIT_AUTOMAKE(bfd, 2.17.atmel.1.2.0) + + dnl These must be called before AM_PROG_LIBTOOL, because it may want + dnl to call AC_CHECK_PROG. +@@ -583,6 +583,7 @@ do + bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; + bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; + bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; ++ bfd_elf32_avr32_vec) tb="$tb elf32-avr32.lo elf32.lo $elf" ;; + bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; + bfd_elf32_bfinfdpic_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; + bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;; +diff -Nrup binutils-2.17/bfd/cpu-avr32.c binutils-2.17.atmel.1.3.0/bfd/cpu-avr32.c +--- binutils-2.17/bfd/cpu-avr32.c 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/cpu-avr32.c 2007-05-31 17:03:36.000000000 +0200 +@@ -0,0 +1,49 @@ ++/* BFD library support routines for AVR32. ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This is part of BFD, the Binary File Descriptor library. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#include "bfd.h" ++#include "sysdep.h" ++#include "libbfd.h" ++ ++#define N(machine, print, default, next) \ ++ { \ ++ 32, /* 32 bits in a word */ \ ++ 32, /* 32 bits in an address */ \ ++ 8, /* 8 bits in a byte */ \ ++ bfd_arch_avr32, /* architecture */ \ ++ machine, /* machine */ \ ++ "avr32", /* arch name */ \ ++ print, /* printable name */ \ ++ 1, /* section align power */ \ ++ default, /* the default machine? */ \ ++ bfd_default_compatible, \ ++ bfd_default_scan, \ ++ next, \ ++ } ++ ++static const bfd_arch_info_type cpu_info[] = ++{ ++ N(bfd_mach_avr32_ap, "avr32:ap", FALSE, &cpu_info[1]), ++ N(bfd_mach_avr32_uc, "avr32:uc", FALSE, NULL), ++}; ++ ++const bfd_arch_info_type bfd_avr32_arch = ++ N(bfd_mach_avr32_ap, "avr32", TRUE, &cpu_info[0]); +diff -Nrup binutils-2.17/bfd/doc/bfd.info binutils-2.17.atmel.1.3.0/bfd/doc/bfd.info +--- binutils-2.17/bfd/doc/bfd.info 2006-06-12 15:37:32.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/doc/bfd.info 2007-03-26 10:34:02.000000000 +0200 +@@ -1,5 +1,7 @@ +-This is ../.././bfd/doc/bfd.info, produced by makeinfo version 4.8 from +-../.././bfd/doc/bfd.texinfo. ++This is ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/bfd/doc/bfd.info, ++produced by makeinfo version 4.8 from ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/bfd/doc/bfd.texinfo. + + START-INFO-DIR-ENTRY + * Bfd: (bfd). The Binary File Descriptor library. +@@ -10239,67 +10241,67 @@ Index + +  + Tag Table: +-Node: Top724 +-Node: Overview1056 +-Node: History2107 +-Node: How It Works3053 +-Node: What BFD Version 2 Can Do4595 +-Node: BFD information loss5910 +-Node: Canonical format8442 +-Node: BFD front end12814 +-Node: Memory Usage38428 +-Node: Initialization39656 +-Node: Sections40115 +-Node: Section Input40598 +-Node: Section Output41963 +-Node: typedef asection44449 +-Node: section prototypes69406 +-Node: Symbols79086 +-Node: Reading Symbols80681 +-Node: Writing Symbols81788 +-Node: Mini Symbols83497 +-Node: typedef asymbol84471 +-Node: symbol handling functions89389 +-Node: Archives94731 +-Node: Formats98457 +-Node: Relocations101405 +-Node: typedef arelent102132 +-Node: howto manager117943 +-Node: Core Files180223 +-Node: Targets182040 +-Node: bfd_target184010 +-Node: Architectures204090 +-Node: Opening and Closing225522 +-Node: Internal236524 +-Node: File Caching242857 +-Node: Linker Functions244771 +-Node: Creating a Linker Hash Table246444 +-Node: Adding Symbols to the Hash Table248182 +-Node: Differing file formats249082 +-Node: Adding symbols from an object file250830 +-Node: Adding symbols from an archive252981 +-Node: Performing the Final Link255395 +-Node: Information provided by the linker256637 +-Node: Relocating the section contents257791 +-Node: Writing the symbol table259542 +-Node: Hash Tables262535 +-Node: Creating and Freeing a Hash Table263733 +-Node: Looking Up or Entering a String264983 +-Node: Traversing a Hash Table266236 +-Node: Deriving a New Hash Table Type267025 +-Node: Define the Derived Structures268091 +-Node: Write the Derived Creation Routine269172 +-Node: Write Other Derived Routines271796 +-Node: BFD back ends273111 +-Node: What to Put Where273381 +-Node: aout273519 +-Node: coff279837 +-Node: elf304314 +-Node: mmo305177 +-Node: File layout306105 +-Node: Symbol-table311752 +-Node: mmo section mapping315521 +-Node: GNU Free Documentation License319173 +-Node: Index338898 ++Node: Top858 ++Node: Overview1190 ++Node: History2241 ++Node: How It Works3187 ++Node: What BFD Version 2 Can Do4729 ++Node: BFD information loss6044 ++Node: Canonical format8576 ++Node: BFD front end12948 ++Node: Memory Usage38562 ++Node: Initialization39790 ++Node: Sections40249 ++Node: Section Input40732 ++Node: Section Output42097 ++Node: typedef asection44583 ++Node: section prototypes69540 ++Node: Symbols79220 ++Node: Reading Symbols80815 ++Node: Writing Symbols81922 ++Node: Mini Symbols83631 ++Node: typedef asymbol84605 ++Node: symbol handling functions89523 ++Node: Archives94865 ++Node: Formats98591 ++Node: Relocations101539 ++Node: typedef arelent102266 ++Node: howto manager118077 ++Node: Core Files180357 ++Node: Targets182174 ++Node: bfd_target184144 ++Node: Architectures204224 ++Node: Opening and Closing225656 ++Node: Internal236658 ++Node: File Caching242991 ++Node: Linker Functions244905 ++Node: Creating a Linker Hash Table246578 ++Node: Adding Symbols to the Hash Table248316 ++Node: Differing file formats249216 ++Node: Adding symbols from an object file250964 ++Node: Adding symbols from an archive253115 ++Node: Performing the Final Link255529 ++Node: Information provided by the linker256771 ++Node: Relocating the section contents257925 ++Node: Writing the symbol table259676 ++Node: Hash Tables262669 ++Node: Creating and Freeing a Hash Table263867 ++Node: Looking Up or Entering a String265117 ++Node: Traversing a Hash Table266370 ++Node: Deriving a New Hash Table Type267159 ++Node: Define the Derived Structures268225 ++Node: Write the Derived Creation Routine269306 ++Node: Write Other Derived Routines271930 ++Node: BFD back ends273245 ++Node: What to Put Where273515 ++Node: aout273653 ++Node: coff279971 ++Node: elf304448 ++Node: mmo305311 ++Node: File layout306239 ++Node: Symbol-table311886 ++Node: mmo section mapping315655 ++Node: GNU Free Documentation License319307 ++Node: Index339032 +  + End Tag Table +diff -Nrup binutils-2.17/bfd/doc/Makefile.in binutils-2.17.atmel.1.3.0/bfd/doc/Makefile.in +--- binutils-2.17/bfd/doc/Makefile.in 2006-04-06 23:49:26.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/doc/Makefile.in 2007-03-26 10:30:55.000000000 +0200 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.9.5 from Makefile.am. ++# Makefile.in generated by automake 1.9.6 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -105,6 +105,7 @@ EXEEXT = @EXEEXT@ + EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ + GMOFILES = @GMOFILES@ + GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ + GT_NO = @GT_NO@ + GT_YES = @GT_YES@ + HDEFINES = @HDEFINES@ +@@ -154,10 +155,7 @@ WARN_CFLAGS = @WARN_CFLAGS@ + WIN32LDFLAGS = @WIN32LDFLAGS@ + WIN32LIBADD = @WIN32LIBADD@ + XGETTEXT = @XGETTEXT@ +-ac_ct_AR = @ac_ct_AR@ + ac_ct_CC = @ac_ct_CC@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ + all_backends = @all_backends@ + am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ + am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +@@ -183,6 +181,7 @@ build_vendor = @build_vendor@ + datadir = @datadir@ + datarootdir = @datarootdir@ + docdir = @docdir@ ++dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + host = @host@ + host_alias = @host_alias@ +@@ -197,12 +196,15 @@ install_sh = @install_sh@ + l = @l@ + libdir = @libdir@ + libexecdir = @libexecdir@ ++localedir = @localedir@ + localstatedir = @localstatedir@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ ++psdir = @psdir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ +@@ -364,9 +366,11 @@ distclean-libtool: + restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && cd $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ +- for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ +- if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ +- done; \ ++ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ ++ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ ++ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ ++ done; \ ++ else :; fi && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ $<; \ +@@ -408,6 +412,7 @@ bfd.dvi: bfd.texinfo + bfd.pdf: bfd.texinfo + bfd.html: bfd.texinfo + .dvi.ps: ++ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) -o $@ $< + + uninstall-info-am: +@@ -440,10 +445,13 @@ dist-info: $(INFO_DEPS) + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ +- for file in $$d/$$base*; do \ +- relfile=`expr "$$file" : "$$d/\(.*\)"`; \ +- test -f $(distdir)/$$relfile || \ +- cp -p $$file $(distdir)/$$relfile; \ ++ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ ++ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ ++ if test -f $$file; then \ ++ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ ++ test -f $(distdir)/$$relfile || \ ++ cp -p $$file $(distdir)/$$relfile; \ ++ else :; fi; \ + done; \ + done + +diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.c +--- binutils-2.17/bfd/elf32-avr32.c 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.c 2007-09-28 10:30:44.000000000 +0200 +@@ -0,0 +1,3881 @@ ++/* AVR32-specific support for 32-bit ELF. ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of BFD, the Binary File Descriptor library. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#include "bfd.h" ++#include "sysdep.h" ++#include "bfdlink.h" ++#include "libbfd.h" ++#include "elf-bfd.h" ++#include "elf/avr32.h" ++#include "elf32-avr32.h" ++ ++#define xDEBUG ++#define xRELAX_DEBUG ++ ++#ifdef DEBUG ++# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) ++#else ++# define pr_debug(fmt, args...) do { } while (0) ++#endif ++ ++#ifdef RELAX_DEBUG ++# define RDBG(fmt, args...) fprintf(stderr, fmt, ##args) ++#else ++# define RDBG(fmt, args...) do { } while (0) ++#endif ++ ++/* When things go wrong, we want it to blow up, damnit! */ ++#undef BFD_ASSERT ++#undef abort ++#define BFD_ASSERT(expr) \ ++ do \ ++ { \ ++ if (!(expr)) \ ++ { \ ++ bfd_assert(__FILE__, __LINE__); \ ++ abort(); \ ++ } \ ++ } \ ++ while (0) ++ ++/* The name of the dynamic interpreter. This is put in the .interp section. */ ++#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1" ++ ++#define AVR32_GOT_HEADER_SIZE 8 ++#define AVR32_FUNCTION_STUB_SIZE 8 ++ ++#define ELF_R_INFO(x, y) ELF32_R_INFO(x, y) ++#define ELF_R_TYPE(x) ELF32_R_TYPE(x) ++#define ELF_R_SYM(x) ELF32_R_SYM(x) ++ ++#define NOP_OPCODE 0xd703 ++ ++ ++/* Mapping between BFD relocations and ELF relocations */ ++ ++static reloc_howto_type * ++bfd_elf32_bfd_reloc_type_lookup(bfd *abfd, bfd_reloc_code_real_type code); ++static void ++avr32_info_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst); ++ ++/* Generic HOWTO */ ++#define GENH(name, align, size, bitsize, pcrel, bitpos, complain, mask) \ ++ HOWTO(name, align, size, bitsize, pcrel, bitpos, \ ++ complain_overflow_##complain, bfd_elf_generic_reloc, #name, \ ++ FALSE, 0, mask, pcrel) ++ ++static reloc_howto_type elf_avr32_howto_table[] = { ++ /* NAME ALN SZ BSZ PCREL BP COMPLAIN MASK */ ++ GENH(R_AVR32_NONE, 0, 0, 0, FALSE, 0, dont, 0x00000000), ++ ++ GENH(R_AVR32_32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_16, 0, 1, 16, FALSE, 0, bitfield, 0x0000ffff), ++ GENH(R_AVR32_8, 0, 0, 8, FALSE, 0, bitfield, 0x000000ff), ++ GENH(R_AVR32_32_PCREL, 0, 2, 32, TRUE, 0, signed, 0xffffffff), ++ GENH(R_AVR32_16_PCREL, 0, 1, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_8_PCREL, 0, 0, 8, TRUE, 0, signed, 0x000000ff), ++ ++ /* Difference between two symbol (sym2 - sym1). The reloc encodes ++ the value of sym1. The field contains the difference before any ++ relaxing is done. */ ++ GENH(R_AVR32_DIFF32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_DIFF16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_DIFF8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), ++ ++ GENH(R_AVR32_GOT32, 0, 2, 32, FALSE, 0, signed, 0xffffffff), ++ GENH(R_AVR32_GOT16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_GOT8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), ++ ++ GENH(R_AVR32_21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_16U, 0, 2, 16, FALSE, 0, unsigned, 0x0000ffff), ++ GENH(R_AVR32_16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_8S, 0, 1, 8, FALSE, 4, signed, 0x00000ff0), ++ GENH(R_AVR32_8S_EXT, 0, 2, 8, FALSE, 0, signed, 0x000000ff), ++ ++ GENH(R_AVR32_22H_PCREL, 1, 2, 21, TRUE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_18W_PCREL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_16B_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_16N_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_14UW_PCREL, 2, 2, 12, TRUE, 0, unsigned, 0x0000f0ff), ++ GENH(R_AVR32_11H_PCREL, 1, 1, 10, TRUE, 4, signed, 0x00000ff3), ++ GENH(R_AVR32_10UW_PCREL, 2, 2, 8, TRUE, 0, unsigned, 0x000000ff), ++ GENH(R_AVR32_9H_PCREL, 1, 1, 8, TRUE, 4, signed, 0x00000ff0), ++ GENH(R_AVR32_9UW_PCREL, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), ++ ++ GENH(R_AVR32_HI16, 16, 2, 16, FALSE, 0, dont, 0x0000ffff), ++ GENH(R_AVR32_LO16, 0, 2, 16, FALSE, 0, dont, 0x0000ffff), ++ ++ GENH(R_AVR32_GOTPC, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_GOTCALL, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_LDA_GOT, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_GOT21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_GOT18SW, 2, 2, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_GOT16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_GOT7UW, 2, 1, 5, FALSE, 4, unsigned, 0x000001f0), ++ ++ GENH(R_AVR32_32_CPENT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_CPCALL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_16_CP, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_9W_CP, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), ++ ++ GENH(R_AVR32_RELATIVE, 0, 2, 32, FALSE, 0, signed, 0xffffffff), ++ GENH(R_AVR32_GLOB_DAT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_JMP_SLOT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ ++ GENH(R_AVR32_ALIGN, 0, 1, 0, FALSE, 0, unsigned, 0x00000000), ++}; ++ ++struct elf_reloc_map ++{ ++ bfd_reloc_code_real_type bfd_reloc_val; ++ unsigned char elf_reloc_val; ++}; ++ ++static const struct elf_reloc_map avr32_reloc_map[] = ++{ ++ { BFD_RELOC_NONE, R_AVR32_NONE }, ++ ++ { BFD_RELOC_32, R_AVR32_32 }, ++ { BFD_RELOC_16, R_AVR32_16 }, ++ { BFD_RELOC_8, R_AVR32_8 }, ++ { BFD_RELOC_32_PCREL, R_AVR32_32_PCREL }, ++ { BFD_RELOC_16_PCREL, R_AVR32_16_PCREL }, ++ { BFD_RELOC_8_PCREL, R_AVR32_8_PCREL }, ++ { BFD_RELOC_AVR32_DIFF32, R_AVR32_DIFF32 }, ++ { BFD_RELOC_AVR32_DIFF16, R_AVR32_DIFF16 }, ++ { BFD_RELOC_AVR32_DIFF8, R_AVR32_DIFF8 }, ++ { BFD_RELOC_AVR32_GOT32, R_AVR32_GOT32 }, ++ { BFD_RELOC_AVR32_GOT16, R_AVR32_GOT16 }, ++ { BFD_RELOC_AVR32_GOT8, R_AVR32_GOT8 }, ++ ++ { BFD_RELOC_AVR32_21S, R_AVR32_21S }, ++ { BFD_RELOC_AVR32_16U, R_AVR32_16U }, ++ { BFD_RELOC_AVR32_16S, R_AVR32_16S }, ++ { BFD_RELOC_AVR32_SUB5, R_AVR32_16S }, ++ { BFD_RELOC_AVR32_8S_EXT, R_AVR32_8S_EXT }, ++ { BFD_RELOC_AVR32_8S, R_AVR32_8S }, ++ ++ { BFD_RELOC_AVR32_22H_PCREL, R_AVR32_22H_PCREL }, ++ { BFD_RELOC_AVR32_18W_PCREL, R_AVR32_18W_PCREL }, ++ { BFD_RELOC_AVR32_16B_PCREL, R_AVR32_16B_PCREL }, ++ { BFD_RELOC_AVR32_16N_PCREL, R_AVR32_16N_PCREL }, ++ { BFD_RELOC_AVR32_11H_PCREL, R_AVR32_11H_PCREL }, ++ { BFD_RELOC_AVR32_10UW_PCREL, R_AVR32_10UW_PCREL }, ++ { BFD_RELOC_AVR32_9H_PCREL, R_AVR32_9H_PCREL }, ++ { BFD_RELOC_AVR32_9UW_PCREL, R_AVR32_9UW_PCREL }, ++ ++ { BFD_RELOC_HI16, R_AVR32_HI16 }, ++ { BFD_RELOC_LO16, R_AVR32_LO16 }, ++ ++ { BFD_RELOC_AVR32_GOTPC, R_AVR32_GOTPC }, ++ { BFD_RELOC_AVR32_GOTCALL, R_AVR32_GOTCALL }, ++ { BFD_RELOC_AVR32_LDA_GOT, R_AVR32_LDA_GOT }, ++ { BFD_RELOC_AVR32_GOT21S, R_AVR32_GOT21S }, ++ { BFD_RELOC_AVR32_GOT18SW, R_AVR32_GOT18SW }, ++ { BFD_RELOC_AVR32_GOT16S, R_AVR32_GOT16S }, ++ /* GOT7UW should never be generated by the assembler */ ++ ++ { BFD_RELOC_AVR32_32_CPENT, R_AVR32_32_CPENT }, ++ { BFD_RELOC_AVR32_CPCALL, R_AVR32_CPCALL }, ++ { BFD_RELOC_AVR32_16_CP, R_AVR32_16_CP }, ++ { BFD_RELOC_AVR32_9W_CP, R_AVR32_9W_CP }, ++ ++ { BFD_RELOC_AVR32_ALIGN, R_AVR32_ALIGN }, ++}; ++ ++static reloc_howto_type * ++bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, ++ bfd_reloc_code_real_type code) ++{ ++ unsigned int i; ++ ++ for (i = 0; i < sizeof(avr32_reloc_map) / sizeof(struct elf_reloc_map); i++) ++ { ++ if (avr32_reloc_map[i].bfd_reloc_val == code) ++ return &elf_avr32_howto_table[avr32_reloc_map[i].elf_reloc_val]; ++ } ++ ++ return NULL; ++} ++ ++static void ++avr32_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, ++ arelent *cache_ptr, ++ Elf_Internal_Rela *dst) ++{ ++ unsigned int r_type; ++ ++ r_type = ELF32_R_TYPE (dst->r_info); ++ BFD_ASSERT (r_type < (unsigned int) R_AVR32_max); ++ cache_ptr->howto = &elf_avr32_howto_table[r_type]; ++} ++ ++ ++/* AVR32 ELF linker hash table and associated hash entries. */ ++ ++static struct bfd_hash_entry * ++avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, ++ struct bfd_hash_table *table, ++ const char *string); ++static void ++avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *dir, ++ struct elf_link_hash_entry *ind); ++static struct bfd_link_hash_table * ++avr32_elf_link_hash_table_create(bfd *abfd); ++ ++/* ++ Try to limit memory usage to something reasonable when sorting the ++ GOT. If we ever get more than this many references to the same ++ symbol, we may need to do something special. ++*/ ++#define MAX_NR_GOT_HOLES 8192 ++ ++/* ++ AVR32 GOT entry. We need to keep track of refcounts and offsets ++ simultaneously, since we need the offsets during relaxation, and we ++ also want to be able to drop GOT entries during relaxation. In ++ addition to this, we want to keep the list of GOT entries sorted so ++ that we can keep the most-used entries at the lowest offsets. ++*/ ++struct got_entry ++{ ++ struct got_entry *next; ++ struct got_entry **pprev; ++ int refcount; ++ bfd_signed_vma offset; ++}; ++ ++struct elf_avr32_link_hash_entry ++{ ++ struct elf_link_hash_entry root; ++ ++ /* Number of runtime relocations against this symbol. */ ++ unsigned int possibly_dynamic_relocs; ++ ++ /* If there are anything but R_AVR32_GOT18 relocations against this ++ symbol, it means that someone may be taking the address of the ++ function, and we should therefore not create a stub. */ ++ bfd_boolean no_fn_stub; ++ ++ /* If there is a R_AVR32_32 relocation in a read-only section ++ against this symbol, we could be in trouble. If we're linking a ++ shared library or this symbol is defined in one, it means we must ++ emit a run-time reloc for it and that's not allowed in read-only ++ sections. */ ++ asection *readonly_reloc_sec; ++ bfd_vma readonly_reloc_offset; ++ ++ /* Record which frag (if any) contains the symbol. This is used ++ during relaxation in order to avoid having to update all symbols ++ whenever we move something. For local symbols, this information ++ is in the local_sym_frag member of struct elf_obj_tdata. */ ++ struct fragment *sym_frag; ++}; ++#define avr32_elf_hash_entry(ent) ((struct elf_avr32_link_hash_entry *)(ent)) ++ ++struct elf_avr32_link_hash_table ++{ ++ struct elf_link_hash_table root; ++ ++ /* Shortcuts to get to dynamic linker sections. */ ++ asection *sgot; ++ asection *srelgot; ++ asection *sstub; ++ ++ /* We use a variation of Pigeonhole Sort to sort the GOT. After the ++ initial refcounts have been determined, we initialize ++ nr_got_holes to the highest refcount ever seen and allocate an ++ array of nr_got_holes entries for got_hole. Each GOT entry is ++ then stored in this array at the index given by its refcount. ++ ++ When a GOT entry has its refcount decremented during relaxation, ++ it is moved to a lower index in the got_hole array. ++ */ ++ struct got_entry **got_hole; ++ int nr_got_holes; ++ ++ /* Dynamic relocations to local symbols. Only used when linking a ++ shared library and -Bsymbolic is not given. */ ++ unsigned int local_dynamic_relocs; ++ ++ bfd_boolean relocations_analyzed; ++ bfd_boolean symbols_adjusted; ++ bfd_boolean repeat_pass; ++ bfd_boolean direct_data_refs; ++ unsigned int relax_iteration; ++ unsigned int relax_pass; ++}; ++#define avr32_elf_hash_table(p) \ ++ ((struct elf_avr32_link_hash_table *)((p)->hash)) ++ ++static struct bfd_hash_entry * ++avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, ++ struct bfd_hash_table *table, ++ const char *string) ++{ ++ struct elf_avr32_link_hash_entry *ret = avr32_elf_hash_entry(entry); ++ ++ /* Allocate the structure if it hasn't already been allocated by a ++ subclass */ ++ if (ret == NULL) ++ ret = (struct elf_avr32_link_hash_entry *) ++ bfd_hash_allocate(table, sizeof(struct elf_avr32_link_hash_entry)); ++ ++ if (ret == NULL) ++ return NULL; ++ ++ memset(ret, 0, sizeof(struct elf_avr32_link_hash_entry)); ++ ++ /* Give the superclass a chance */ ++ ret = (struct elf_avr32_link_hash_entry *) ++ _bfd_elf_link_hash_newfunc((struct bfd_hash_entry *)ret, table, string); ++ ++ return (struct bfd_hash_entry *)ret; ++} ++ ++/* Copy data from an indirect symbol to its direct symbol, hiding the ++ old indirect symbol. Process additional relocation information. ++ Also called for weakdefs, in which case we just let ++ _bfd_elf_link_hash_copy_indirect copy the flags for us. */ ++ ++static void ++avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *dir, ++ struct elf_link_hash_entry *ind) ++{ ++ struct elf_avr32_link_hash_entry *edir, *eind; ++ ++ _bfd_elf_link_hash_copy_indirect (info, dir, ind); ++ ++ if (ind->root.type != bfd_link_hash_indirect) ++ return; ++ ++ edir = (struct elf_avr32_link_hash_entry *)dir; ++ eind = (struct elf_avr32_link_hash_entry *)ind; ++ ++ edir->possibly_dynamic_relocs += eind->possibly_dynamic_relocs; ++ edir->no_fn_stub = edir->no_fn_stub || eind->no_fn_stub; ++} ++ ++static struct bfd_link_hash_table * ++avr32_elf_link_hash_table_create(bfd *abfd) ++{ ++ struct elf_avr32_link_hash_table *ret; ++ ++ ret = bfd_zmalloc(sizeof(*ret)); ++ if (ret == NULL) ++ return NULL; ++ ++ if (! _bfd_elf_link_hash_table_init(&ret->root, abfd, ++ avr32_elf_link_hash_newfunc, ++ sizeof (struct elf_avr32_link_hash_entry))) ++ { ++ free(ret); ++ return NULL; ++ } ++ ++ /* Prevent the BFD core from creating bogus got_entry pointers */ ++ ret->root.init_got_refcount.glist = NULL; ++ ret->root.init_plt_refcount.glist = NULL; ++ ret->root.init_got_offset.glist = NULL; ++ ret->root.init_plt_offset.glist = NULL; ++ ++ return &ret->root.root; ++} ++ ++ ++/* Initial analysis and creation of dynamic sections and symbols */ ++ ++static asection * ++create_dynamic_section(bfd *dynobj, const char *name, flagword flags, ++ unsigned int align_power); ++static struct elf_link_hash_entry * ++create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, ++ const char *name, asection *sec, ++ bfd_vma offset); ++static bfd_boolean ++avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info); ++static bfd_boolean ++avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info); ++static bfd_boolean ++avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, ++ const Elf_Internal_Rela *relocs); ++static bfd_boolean ++avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *h); ++ ++static asection * ++create_dynamic_section(bfd *dynobj, const char *name, flagword flags, ++ unsigned int align_power) ++{ ++ asection *sec; ++ ++ sec = bfd_make_section(dynobj, name); ++ if (!sec ++ || !bfd_set_section_flags(dynobj, sec, flags) ++ || !bfd_set_section_alignment(dynobj, sec, align_power)) ++ return NULL; ++ ++ return sec; ++} ++ ++static struct elf_link_hash_entry * ++create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, ++ const char *name, asection *sec, ++ bfd_vma offset) ++{ ++ struct bfd_link_hash_entry *bh = NULL; ++ struct elf_link_hash_entry *h; ++ const struct elf_backend_data *bed = get_elf_backend_data (dynobj); ++ ++ if (!(_bfd_generic_link_add_one_symbol ++ (info, dynobj, name, BSF_GLOBAL, sec, offset, NULL, FALSE, ++ bed->collect, &bh))) ++ return NULL; ++ ++ h = (struct elf_link_hash_entry *)bh; ++ h->def_regular = 1; ++ h->type = STT_OBJECT; ++ h->other = STV_HIDDEN; ++ ++ return h; ++} ++ ++static bfd_boolean ++avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ flagword flags; ++ const struct elf_backend_data *bed = get_elf_backend_data (dynobj); ++ ++ htab = avr32_elf_hash_table(info); ++ flags = bed->dynamic_sec_flags; ++ ++ if (htab->sgot) ++ return TRUE; ++ ++ htab->sgot = create_dynamic_section(dynobj, ".got", flags, 2); ++ if (!htab->srelgot) ++ htab->srelgot = create_dynamic_section(dynobj, ".rela.got", ++ flags | SEC_READONLY, 2); ++ ++ if (!htab->sgot || !htab->srelgot) ++ return FALSE; ++ ++ htab->root.hgot = create_dynamic_symbol(dynobj, info, "_GLOBAL_OFFSET_TABLE_", ++ htab->sgot, 0); ++ if (!htab->root.hgot) ++ return FALSE; ++ ++ /* Make room for the GOT header */ ++ htab->sgot->size += bed->got_header_size; ++ ++ return TRUE; ++} ++ ++/* (1) Create all dynamic (i.e. linker generated) sections that we may ++ need during the link */ ++ ++static bfd_boolean ++avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ flagword flags; ++ const struct elf_backend_data *bed = get_elf_backend_data (dynobj); ++ ++ pr_debug("(1) create dynamic sections\n"); ++ ++ htab = avr32_elf_hash_table(info); ++ flags = bed->dynamic_sec_flags; ++ ++ if (!avr32_elf_create_got_section (dynobj, info)) ++ return FALSE; ++ ++ if (!htab->sstub) ++ htab->sstub = create_dynamic_section(dynobj, ".stub", ++ flags | SEC_READONLY | SEC_CODE, 2); ++ ++ if (!htab->sstub) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++/* (2) Go through all the relocs and count any potential GOT- or ++ PLT-references to each symbol */ ++ ++static bfd_boolean ++avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, ++ const Elf_Internal_Rela *relocs) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ struct elf_avr32_link_hash_table *htab; ++ struct elf_link_hash_entry **sym_hashes; ++ const Elf_Internal_Rela *rel, *rel_end; ++ struct got_entry **local_got_ents; ++ struct got_entry *got; ++ const struct elf_backend_data *bed = get_elf_backend_data (abfd); ++ asection *sgot; ++ bfd *dynobj; ++ ++ pr_debug("(2) check relocs for %s:<%s> (size 0x%lx)\n", ++ abfd->filename, sec->name, sec->size); ++ ++ if (info->relocatable) ++ return TRUE; ++ ++ dynobj = elf_hash_table(info)->dynobj; ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ sym_hashes = elf_sym_hashes(abfd); ++ htab = avr32_elf_hash_table(info); ++ local_got_ents = elf_local_got_ents(abfd); ++ sgot = htab->sgot; ++ ++ rel_end = relocs + sec->reloc_count; ++ for (rel = relocs; rel < rel_end; rel++) ++ { ++ unsigned long r_symndx, r_type; ++ struct elf_avr32_link_hash_entry *h; ++ ++ r_symndx = ELF32_R_SYM(rel->r_info); ++ r_type = ELF32_R_TYPE(rel->r_info); ++ ++ /* Local symbols use local_got_ents, while others store the same ++ information in the hash entry */ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ pr_debug(" (2a) processing local symbol %lu\n", r_symndx); ++ h = NULL; ++ } ++ else ++ { ++ h = (struct elf_avr32_link_hash_entry *) ++ sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; ++ pr_debug(" (2a) processing symbol %s\n", h->root.root.root.string); ++ } ++ ++ /* Some relocs require special sections to be created. */ ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ if (rel->r_addend) ++ { ++ if (info->callbacks->reloc_dangerous ++ (info, _("Non-zero addend on GOT-relative relocation"), ++ abfd, sec, rel->r_offset) == FALSE) ++ return FALSE; ++ } ++ /* fall through */ ++ case R_AVR32_GOTPC: ++ if (dynobj == NULL) ++ elf_hash_table(info)->dynobj = dynobj = abfd; ++ if (sgot == NULL && !avr32_elf_create_got_section(dynobj, info)) ++ return FALSE; ++ break; ++ case R_AVR32_32: ++ /* We may need to create .rela.dyn later on. */ ++ if (dynobj == NULL ++ && (info->shared || h != NULL) ++ && (sec->flags & SEC_ALLOC)) ++ elf_hash_table(info)->dynobj = dynobj = abfd; ++ break; ++ } ++ ++ if (h != NULL && r_type != R_AVR32_GOT18SW) ++ h->no_fn_stub = TRUE; ++ ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ if (h != NULL) ++ { ++ got = h->root.got.glist; ++ if (!got) ++ { ++ got = bfd_zalloc(abfd, sizeof(struct got_entry)); ++ if (!got) ++ return FALSE; ++ h->root.got.glist = got; ++ } ++ } ++ else ++ { ++ if (!local_got_ents) ++ { ++ bfd_size_type size; ++ bfd_size_type i; ++ struct got_entry *tmp_entry; ++ ++ size = symtab_hdr->sh_info; ++ size *= sizeof(struct got_entry *) + sizeof(struct got_entry); ++ local_got_ents = bfd_zalloc(abfd, size); ++ if (!local_got_ents) ++ return FALSE; ++ ++ elf_local_got_ents(abfd) = local_got_ents; ++ ++ tmp_entry = (struct got_entry *)(local_got_ents ++ + symtab_hdr->sh_info); ++ for (i = 0; i < symtab_hdr->sh_info; i++) ++ local_got_ents[i] = &tmp_entry[i]; ++ } ++ ++ got = local_got_ents[r_symndx]; ++ } ++ ++ got->refcount++; ++ if (got->refcount > htab->nr_got_holes) ++ htab->nr_got_holes = got->refcount; ++ break; ++ ++ case R_AVR32_32: ++ if ((info->shared || h != NULL) ++ && (sec->flags & SEC_ALLOC)) ++ { ++ if (htab->srelgot == NULL) ++ { ++ htab->srelgot = create_dynamic_section(dynobj, ".rela.got", ++ bed->dynamic_sec_flags ++ | SEC_READONLY, 2); ++ if (htab->srelgot == NULL) ++ return FALSE; ++ } ++ ++ if (sec->flags & SEC_READONLY ++ && !h->readonly_reloc_sec) ++ { ++ h->readonly_reloc_sec = sec; ++ h->readonly_reloc_offset = rel->r_offset; ++ } ++ ++ if (h != NULL) ++ { ++ pr_debug("Non-GOT reference to symbol %s\n", ++ h->root.root.root.string); ++ h->possibly_dynamic_relocs++; ++ } ++ else ++ { ++ pr_debug("Non-GOT reference to local symbol %lu\n", ++ r_symndx); ++ htab->local_dynamic_relocs++; ++ } ++ } ++ ++ break; ++ ++ /* TODO: GNU_VTINHERIT and GNU_VTENTRY */ ++ } ++ } ++ ++ return TRUE; ++} ++ ++/* (3) Adjust a symbol defined by a dynamic object and referenced by a ++ regular object. The current definition is in some section of the ++ dynamic object, but we're not including those sections. We have to ++ change the definition to something the rest of the link can ++ understand. */ ++ ++static bfd_boolean ++avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *h) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct elf_avr32_link_hash_entry *havr; ++ bfd *dynobj; ++ ++ pr_debug("(3) adjust dynamic symbol %s\n", h->root.root.string); ++ ++ htab = avr32_elf_hash_table(info); ++ havr = (struct elf_avr32_link_hash_entry *)h; ++ dynobj = elf_hash_table(info)->dynobj; ++ ++ /* Make sure we know what is going on here. */ ++ BFD_ASSERT (dynobj != NULL ++ && (h->u.weakdef != NULL ++ || (h->def_dynamic ++ && h->ref_regular ++ && !h->def_regular))); ++ ++ /* We don't want dynamic relocations in read-only sections. */ ++ if (havr->readonly_reloc_sec) ++ { ++ if (info->callbacks->reloc_dangerous ++ (info, _("dynamic relocation in read-only section"), ++ havr->readonly_reloc_sec->owner, havr->readonly_reloc_sec, ++ havr->readonly_reloc_offset) == FALSE) ++ return FALSE; ++ } ++ ++ /* If this is a function, create a stub if possible and set the ++ symbol to the stub location. */ ++ if (0 && !havr->no_fn_stub) ++ { ++ if (!h->def_regular) ++ { ++ asection *s = htab->sstub; ++ ++ BFD_ASSERT(s != NULL); ++ ++ h->root.u.def.section = s; ++ h->root.u.def.value = s->size; ++ h->plt.offset = s->size; ++ s->size += AVR32_FUNCTION_STUB_SIZE; ++ ++ return TRUE; ++ } ++ } ++ else if (h->type == STT_FUNC) ++ { ++ /* This will set the entry for this symbol in the GOT to 0, and ++ the dynamic linker will take care of this. */ ++ h->root.u.def.value = 0; ++ return TRUE; ++ } ++ ++ /* If this is a weak symbol, and there is a real definition, the ++ processor independent code will have arranged for us to see the ++ real definition first, and we can just use the same value. */ ++ if (h->u.weakdef != NULL) ++ { ++ BFD_ASSERT(h->u.weakdef->root.type == bfd_link_hash_defined ++ || h->u.weakdef->root.type == bfd_link_hash_defweak); ++ h->root.u.def.section = h->u.weakdef->root.u.def.section; ++ h->root.u.def.value = h->u.weakdef->root.u.def.value; ++ return TRUE; ++ } ++ ++ /* This is a reference to a symbol defined by a dynamic object which ++ is not a function. */ ++ ++ return TRUE; ++} ++ ++ ++/* Garbage-collection of unused sections */ ++ ++static asection * ++avr32_elf_gc_mark_hook(asection *sec, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED, ++ Elf_Internal_Rela *rel, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym) ++{ ++ if (h) ++ { ++ switch (ELF32_R_TYPE(rel->r_info)) ++ { ++ /* TODO: VTINHERIT/VTENTRY */ ++ default: ++ switch (h->root.type) ++ { ++ case bfd_link_hash_defined: ++ case bfd_link_hash_defweak: ++ return h->root.u.def.section; ++ ++ case bfd_link_hash_common: ++ return h->root.u.c.p->section; ++ ++ default: ++ break; ++ } ++ } ++ } ++ else ++ return bfd_section_from_elf_index(sec->owner, sym->st_shndx); ++ ++ return NULL; ++} ++ ++/* Update the GOT entry reference counts for the section being removed. */ ++static bfd_boolean ++avr32_elf_gc_sweep_hook(bfd *abfd, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED, ++ asection *sec, ++ const Elf_Internal_Rela *relocs) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ struct elf_avr32_link_hash_entry **sym_hashes; ++ struct got_entry **local_got_ents; ++ const Elf_Internal_Rela *rel, *relend; ++ ++ if (!(sec->flags & SEC_ALLOC)) ++ return TRUE; ++ ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ sym_hashes = (struct elf_avr32_link_hash_entry **)elf_sym_hashes(abfd); ++ local_got_ents = elf_local_got_ents(abfd); ++ ++ relend = relocs + sec->reloc_count; ++ for (rel = relocs; rel < relend; rel++) ++ { ++ unsigned long r_symndx; ++ unsigned int r_type; ++ struct elf_avr32_link_hash_entry *h = NULL; ++ ++ r_symndx = ELF32_R_SYM(rel->r_info); ++ if (r_symndx >= symtab_hdr->sh_info) ++ { ++ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.root.type == bfd_link_hash_indirect ++ || h->root.root.type == bfd_link_hash_warning) ++ h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; ++ } ++ ++ r_type = ELF32_R_TYPE(rel->r_info); ++ ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ if (h) ++ h->root.got.glist->refcount--; ++ else ++ local_got_ents[r_symndx]->refcount--; ++ break; ++ ++ case R_AVR32_32: ++ if (info->shared || h) ++ { ++ if (h) ++ h->possibly_dynamic_relocs--; ++ else ++ avr32_elf_hash_table(info)->local_dynamic_relocs--; ++ } ++ ++ default: ++ break; ++ } ++ } ++ ++ return TRUE; ++} ++ ++/* Sizing and refcounting of dynamic sections */ ++ ++static void ++insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); ++static void ++unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); ++static void ++ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); ++static bfd_boolean ++assign_got_offsets(struct elf_avr32_link_hash_table *htab); ++static bfd_boolean ++allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info); ++static bfd_boolean ++avr32_elf_size_dynamic_sections (bfd *output_bfd, ++ struct bfd_link_info *info); ++ ++static void ++insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) ++{ ++ /* TODO: Support got_refcount > htab->nr_got_holes by using a ++ different sort algorithm for those. */ ++ BFD_ASSERT(got->refcount <= htab->nr_got_holes); ++ ++ got->pprev = &htab->got_hole[got->refcount]; ++ got->next = htab->got_hole[got->refcount]; ++ if (got->next) ++ got->next->pprev = &got->next; ++ ++ htab->got_hole[got->refcount] = got; ++} ++ ++/* Decrement the refcount of a GOT entry and update its position in ++ the pigeonhole array. */ ++static void ++unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) ++{ ++ BFD_ASSERT(got->refcount <= htab->nr_got_holes); ++ BFD_ASSERT(got->refcount > 0); ++ ++ if (got->next) ++ got->next->pprev = got->pprev; ++ ++ *(got->pprev) = got->next; ++ got->refcount--; ++ insert_got_entry(htab, got); ++} ++ ++static void ++ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) ++{ ++ if (got->next) ++ got->next->pprev = got->pprev; ++ ++ *(got->pprev) = got->next; ++ got->refcount++; ++ insert_got_entry(htab, got); ++ ++ BFD_ASSERT(got->refcount > 0); ++ BFD_ASSERT(got->refcount <= htab->nr_got_holes); ++} ++ ++/* Assign offsets to all GOT entries we intend to keep. The entries ++ that are referenced most often are placed at low offsets so that we ++ can use compact instructions as much as possible. ++ ++ Returns TRUE if any offsets or the total size of the GOT changed. */ ++ ++static bfd_boolean ++assign_got_offsets(struct elf_avr32_link_hash_table *htab) ++{ ++ struct got_entry *got; ++ bfd_size_type got_size = 0; ++ bfd_boolean changed = FALSE; ++ bfd_signed_vma offset; ++ int i; ++ ++ /* The GOT header provides the address of the DYNAMIC segment, so ++ we need that even if the GOT is otherwise empty. */ ++ if (htab->root.dynamic_sections_created) ++ got_size = AVR32_GOT_HEADER_SIZE; ++ ++ for (i = htab->nr_got_holes; i > 0; i--) ++ { ++ got = htab->got_hole[i]; ++ while (got) ++ { ++ if (got->refcount > 0) ++ { ++ offset = got_size; ++ if (got->offset != offset) ++ { ++ RDBG("GOT offset changed: %ld -> %ld\n", ++ got->offset, offset); ++ changed = TRUE; ++ } ++ got->offset = offset; ++ got_size += 4; ++ } ++ got = got->next; ++ } ++ } ++ ++ if (htab->sgot->size != got_size) ++ { ++ RDBG("GOT size changed: %lu -> %lu\n", htab->sgot->size, ++ got_size); ++ changed = TRUE; ++ } ++ htab->sgot->size = got_size; ++ ++ RDBG("assign_got_offsets: total size %lu (%s)\n", ++ got_size, changed ? "changed" : "no change"); ++ ++ return changed; ++} ++ ++static bfd_boolean ++allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info) ++{ ++ struct bfd_link_info *info = _info; ++ struct elf_avr32_link_hash_table *htab; ++ struct elf_avr32_link_hash_entry *havr; ++ struct got_entry *got; ++ ++ pr_debug(" (4b) allocate_dynrelocs: %s\n", h->root.root.string); ++ ++ if (h->root.type == bfd_link_hash_indirect) ++ return TRUE; ++ ++ if (h->root.type == bfd_link_hash_warning) ++ /* When warning symbols are created, they **replace** the "real" ++ entry in the hash table, thus we never get to see the real ++ symbol in a hash traversal. So look at it now. */ ++ h = (struct elf_link_hash_entry *) h->root.u.i.link; ++ ++ htab = avr32_elf_hash_table(info); ++ havr = (struct elf_avr32_link_hash_entry *)h; ++ ++ got = h->got.glist; ++ ++ /* If got is NULL, the symbol is never referenced through the GOT */ ++ if (got && got->refcount > 0) ++ { ++ insert_got_entry(htab, got); ++ ++ /* Shared libraries need relocs for all GOT entries unless the ++ symbol is forced local or -Bsymbolic is used. Others need ++ relocs for everything that is not guaranteed to be defined in ++ a regular object. */ ++ if ((info->shared ++ && !info->symbolic ++ && h->dynindx != -1) ++ || (htab->root.dynamic_sections_created ++ && h->def_dynamic ++ && !h->def_regular)) ++ htab->srelgot->size += sizeof(Elf32_External_Rela); ++ } ++ ++ if (havr->possibly_dynamic_relocs ++ && (info->shared ++ || (elf_hash_table(info)->dynamic_sections_created ++ && h->def_dynamic ++ && !h->def_regular))) ++ { ++ pr_debug("Allocating %d dynamic reloc against symbol %s...\n", ++ havr->possibly_dynamic_relocs, h->root.root.string); ++ htab->srelgot->size += (havr->possibly_dynamic_relocs ++ * sizeof(Elf32_External_Rela)); ++ } ++ ++ return TRUE; ++} ++ ++/* (4) Calculate the sizes of the linker-generated sections and ++ allocate memory for them. */ ++ ++static bfd_boolean ++avr32_elf_size_dynamic_sections (bfd *output_bfd, ++ struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ bfd *dynobj; ++ asection *s; ++ bfd *ibfd; ++ bfd_boolean relocs; ++ ++ pr_debug("(4) size dynamic sections\n"); ++ ++ htab = avr32_elf_hash_table(info); ++ dynobj = htab->root.dynobj; ++ BFD_ASSERT(dynobj != NULL); ++ ++ if (htab->root.dynamic_sections_created) ++ { ++ /* Initialize the contents of the .interp section to the name of ++ the dynamic loader */ ++ if (info->executable) ++ { ++ s = bfd_get_section_by_name(dynobj, ".interp"); ++ BFD_ASSERT(s != NULL); ++ s->size = sizeof(ELF_DYNAMIC_INTERPRETER); ++ s->contents = (unsigned char *)ELF_DYNAMIC_INTERPRETER; ++ } ++ } ++ ++ if (htab->nr_got_holes > 0) ++ { ++ /* Allocate holes for the pigeonhole sort algorithm */ ++ pr_debug("Highest GOT refcount: %d\n", htab->nr_got_holes); ++ if (htab->nr_got_holes >= MAX_NR_GOT_HOLES) ++ { ++ /* TODO: Do something clever (different sorting algorithm) */ ++ _bfd_error_handler(_("Highest refcount %d too high (max %d)\n"), ++ htab->nr_got_holes, MAX_NR_GOT_HOLES); ++ bfd_set_error(bfd_error_no_memory); ++ return FALSE; ++ } ++ htab->got_hole = bfd_zalloc(output_bfd, ++ sizeof(struct got_entry *) ++ * (htab->nr_got_holes + 1)); ++ if (!htab->got_hole) ++ return FALSE; ++ ++ /* Set up .got offsets for local syms. */ ++ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) ++ { ++ struct got_entry **local_got; ++ struct got_entry **end_local_got; ++ Elf_Internal_Shdr *symtab_hdr; ++ bfd_size_type locsymcount; ++ ++ pr_debug(" (4a) processing file %s...\n", ibfd->filename); ++ ++ BFD_ASSERT(bfd_get_flavour(ibfd) == bfd_target_elf_flavour); ++ ++ local_got = elf_local_got_ents(ibfd); ++ if (!local_got) ++ continue; ++ ++ symtab_hdr = &elf_tdata(ibfd)->symtab_hdr; ++ locsymcount = symtab_hdr->sh_info; ++ end_local_got = local_got + locsymcount; ++ ++ for (; local_got < end_local_got; ++local_got) ++ insert_got_entry(htab, *local_got); ++ } ++ } ++ ++ /* Allocate global sym .got entries and space for global sym ++ dynamic relocs */ ++ elf_link_hash_traverse(&htab->root, allocate_dynrelocs, info); ++ ++ /* Now that we have sorted the GOT entries, we are ready to ++ assign offsets and determine the initial size of the GOT. */ ++ if (htab->sgot) ++ assign_got_offsets(htab); ++ ++ /* Allocate space for local sym dynamic relocs */ ++ BFD_ASSERT(htab->local_dynamic_relocs == 0 || info->shared); ++ if (htab->local_dynamic_relocs) ++ htab->srelgot->size += (htab->local_dynamic_relocs ++ * sizeof(Elf32_External_Rela)); ++ ++ /* We now have determined the sizes of the various dynamic ++ sections. Allocate memory for them. */ ++ relocs = FALSE; ++ for (s = dynobj->sections; s; s = s->next) ++ { ++ if ((s->flags & SEC_LINKER_CREATED) == 0) ++ continue; ++ ++ if (s == htab->sgot ++ || s == htab->sstub) ++ { ++ /* Strip this section if we don't need it */ ++ } ++ else if (strncmp (bfd_get_section_name(dynobj, s), ".rela", 5) == 0) ++ { ++ if (s->size != 0) ++ relocs = TRUE; ++ ++ s->reloc_count = 0; ++ } ++ else ++ { ++ /* It's not one of our sections */ ++ continue; ++ } ++ ++ if (s->size == 0) ++ { ++ /* Strip unneeded sections */ ++ pr_debug("Stripping section %s from output...\n", s->name); ++ /* deleted function in 2.17 ++ _bfd_strip_section_from_output(info, s); ++ */ ++ continue; ++ } ++ ++ s->contents = bfd_zalloc(dynobj, s->size); ++ if (s->contents == NULL) ++ return FALSE; ++ } ++ ++ if (htab->root.dynamic_sections_created) ++ { ++ /* Add some entries to the .dynamic section. We fill in the ++ values later, in sh_elf_finish_dynamic_sections, but we ++ must add the entries now so that we get the correct size for ++ the .dynamic section. The DT_DEBUG entry is filled in by the ++ dynamic linker and used by the debugger. */ ++#define add_dynamic_entry(TAG, VAL) _bfd_elf_add_dynamic_entry(info, TAG, VAL) ++ ++ if (!add_dynamic_entry(DT_PLTGOT, 0)) ++ return FALSE; ++ if (!add_dynamic_entry(DT_AVR32_GOTSZ, 0)) ++ return FALSE; ++ ++ if (info->executable) ++ { ++ if (!add_dynamic_entry(DT_DEBUG, 0)) ++ return FALSE; ++ } ++ if (relocs) ++ { ++ if (!add_dynamic_entry(DT_RELA, 0) ++ || !add_dynamic_entry(DT_RELASZ, 0) ++ || !add_dynamic_entry(DT_RELAENT, ++ sizeof(Elf32_External_Rela))) ++ return FALSE; ++ } ++ } ++#undef add_dynamic_entry ++ ++ return TRUE; ++} ++ ++ ++/* Access to internal relocations, section contents and symbols. ++ (stolen from the xtensa port) */ ++ ++static Elf_Internal_Rela * ++retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory); ++static void ++pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); ++static void ++release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); ++static bfd_byte * ++retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory); ++/* ++static void ++pin_contents (asection *sec, bfd_byte *contents); ++*/ ++static void ++release_contents (asection *sec, bfd_byte *contents); ++static Elf_Internal_Sym * ++retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory); ++/* ++static void ++pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); ++*/ ++static void ++release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); ++ ++/* During relaxation, we need to modify relocations, section contents, ++ and symbol definitions, and we need to keep the original values from ++ being reloaded from the input files, i.e., we need to "pin" the ++ modified values in memory. We also want to continue to observe the ++ setting of the "keep-memory" flag. The following functions wrap the ++ standard BFD functions to take care of this for us. */ ++ ++static Elf_Internal_Rela * ++retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory) ++{ ++ /* _bfd_elf_link_read_relocs knows about caching, so no need for us ++ to be clever here. */ ++ return _bfd_elf_link_read_relocs(abfd, sec, NULL, NULL, keep_memory); ++} ++ ++static void ++pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) ++{ ++ elf_section_data (sec)->relocs = internal_relocs; ++} ++ ++static void ++release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) ++{ ++ if (internal_relocs ++ && elf_section_data (sec)->relocs != internal_relocs) ++ free (internal_relocs); ++} ++ ++static bfd_byte * ++retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory) ++{ ++ bfd_byte *contents; ++ bfd_size_type sec_size; ++ ++ sec_size = bfd_get_section_limit (abfd, sec); ++ contents = elf_section_data (sec)->this_hdr.contents; ++ ++ if (contents == NULL && sec_size != 0) ++ { ++ if (!bfd_malloc_and_get_section (abfd, sec, &contents)) ++ { ++ if (contents) ++ free (contents); ++ return NULL; ++ } ++ if (keep_memory) ++ elf_section_data (sec)->this_hdr.contents = contents; ++ } ++ return contents; ++} ++ ++/* ++static void ++pin_contents (asection *sec, bfd_byte *contents) ++{ ++ elf_section_data (sec)->this_hdr.contents = contents; ++} ++*/ ++static void ++release_contents (asection *sec, bfd_byte *contents) ++{ ++ if (contents && elf_section_data (sec)->this_hdr.contents != contents) ++ free (contents); ++} ++ ++static Elf_Internal_Sym * ++retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Sym *isymbuf; ++ size_t locsymcount; ++ ++ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; ++ locsymcount = symtab_hdr->sh_info; ++ ++ isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; ++ if (isymbuf == NULL && locsymcount != 0) ++ { ++ isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0, ++ NULL, NULL, NULL); ++ if (isymbuf && keep_memory) ++ symtab_hdr->contents = (unsigned char *) isymbuf; ++ } ++ ++ return isymbuf; ++} ++ ++/* ++static void ++pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) ++{ ++ elf_tdata (input_bfd)->symtab_hdr.contents = (unsigned char *)isymbuf; ++} ++ ++*/ ++static void ++release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) ++{ ++ if (isymbuf && (elf_tdata (input_bfd)->symtab_hdr.contents ++ != (unsigned char *)isymbuf)) ++ free (isymbuf); ++} ++ ++ /* Data structures used during relaxation. */ ++ ++enum relax_state_id { ++ RS_ERROR = -1, ++ RS_NONE = 0, ++ RS_ALIGN, ++ RS_CPENT, ++ RS_PIC_CALL, ++ RS_PIC_MCALL, ++ RS_PIC_RCALL2, ++ RS_PIC_RCALL1, ++ RS_PIC_LDA, ++ RS_PIC_LDW4, ++ RS_PIC_LDW3, ++ RS_PIC_SUB5, ++ RS_NOPIC_MCALL, ++ RS_NOPIC_RCALL2, ++ RS_NOPIC_RCALL1, ++ RS_NOPIC_LDW4, ++ RS_NOPIC_LDDPC, ++ RS_NOPIC_SUB5, ++ RS_NOPIC_MOV2, ++ RS_NOPIC_MOV1, ++ RS_RCALL2, ++ RS_RCALL1, ++ RS_BRC2, ++ RS_BRC1, ++ RS_BRAL, ++ RS_RJMP, ++ RS_MAX, ++}; ++ ++enum reference_type { ++ REF_ABSOLUTE, ++ REF_PCREL, ++ REF_CPOOL, ++ REF_GOT, ++}; ++ ++struct relax_state ++{ ++ const char *name; ++ enum relax_state_id id; ++ enum relax_state_id direct; ++ enum relax_state_id next; ++ enum relax_state_id prev; ++ ++ enum reference_type reftype; ++ ++ unsigned int r_type; ++ ++ bfd_vma opcode; ++ bfd_vma opcode_mask; ++ ++ bfd_signed_vma range_min; ++ bfd_signed_vma range_max; ++ ++ bfd_size_type size; ++}; ++ ++/* ++ * This is for relocs that ++ * a) has an addend or is of type R_AVR32_DIFF32, and ++ * b) references a different section than it's in, and ++ * c) references a section that is relaxable ++ * ++ * as well as relocs that references the constant pool, in which case ++ * the add_frag member points to the frag containing the constant pool ++ * entry. ++ * ++ * Such relocs must be fixed up whenever we delete any code. Sections ++ * that don't have any relocs with all of the above properties don't ++ * have any additional reloc data, but sections that do will have ++ * additional data for all its relocs. ++ */ ++struct avr32_reloc_data ++{ ++ struct fragment *add_frag; ++ struct fragment *sub_frag; ++}; ++ ++/* ++ * A 'fragment' is a relaxable entity, that is, code may be added or ++ * deleted at the end of a fragment. When this happens, all subsequent ++ * fragments in the list will have their offsets updated. ++ */ ++struct fragment ++{ ++ enum relax_state_id state; ++ enum relax_state_id initial_state; ++ ++ Elf_Internal_Rela *rela; ++ bfd_size_type size; ++ bfd_vma offset; ++ int size_adjust; ++ int offset_adjust; ++ bfd_boolean has_grown; ++ ++ /* Only used by constant pool entries. When this drops to zero, the ++ frag is discarded (i.e. size_adjust is set to -4.) */ ++ int refcount; ++}; ++ ++struct avr32_relax_data ++{ ++ unsigned int frag_count; ++ struct fragment *frag; ++ struct avr32_reloc_data *reloc_data; ++ ++ /* TRUE if this section has one or more relaxable relocations */ ++ bfd_boolean is_relaxable; ++ unsigned int iteration; ++}; ++ ++struct avr32_section_data ++{ ++ struct bfd_elf_section_data elf; ++ struct avr32_relax_data relax_data; ++}; ++ ++ /* Relax state definitions */ ++ ++#define PIC_MOV2_OPCODE 0xe0600000 ++#define PIC_MOV2_MASK 0xe1e00000 ++#define PIC_MOV2_RANGE_MIN (-1048576 * 4) ++#define PIC_MOV2_RANGE_MAX (1048575 * 4) ++#define PIC_MCALL_OPCODE 0xf0160000 ++#define PIC_MCALL_MASK 0xffff0000 ++#define PIC_MCALL_RANGE_MIN (-131072) ++#define PIC_MCALL_RANGE_MAX (131068) ++#define RCALL2_OPCODE 0xe0a00000 ++#define RCALL2_MASK 0xe1ef0000 ++#define RCALL2_RANGE_MIN (-2097152) ++#define RCALL2_RANGE_MAX (2097150) ++#define RCALL1_OPCODE 0xc00c0000 ++#define RCALL1_MASK 0xf00c0000 ++#define RCALL1_RANGE_MIN (-1024) ++#define RCALL1_RANGE_MAX (1022) ++#define PIC_LDW4_OPCODE 0xecf00000 ++#define PIC_LDW4_MASK 0xfff00000 ++#define PIC_LDW4_RANGE_MIN (-32768) ++#define PIC_LDW4_RANGE_MAX (32767) ++#define PIC_LDW3_OPCODE 0x6c000000 ++#define PIC_LDW3_MASK 0xfe000000 ++#define PIC_LDW3_RANGE_MIN (0) ++#define PIC_LDW3_RANGE_MAX (124) ++#define SUB5_PC_OPCODE 0xfec00000 ++#define SUB5_PC_MASK 0xfff00000 ++#define SUB5_PC_RANGE_MIN (-32768) ++#define SUB5_PC_RANGE_MAX (32767) ++#define NOPIC_MCALL_OPCODE 0xf01f0000 ++#define NOPIC_MCALL_MASK 0xffff0000 ++#define NOPIC_MCALL_RANGE_MIN PIC_MCALL_RANGE_MIN ++#define NOPIC_MCALL_RANGE_MAX PIC_MCALL_RANGE_MAX ++#define NOPIC_LDW4_OPCODE 0xfef00000 ++#define NOPIC_LDW4_MASK 0xfff00000 ++#define NOPIC_LDW4_RANGE_MIN PIC_LDW4_RANGE_MIN ++#define NOPIC_LDW4_RANGE_MAX PIC_LDW4_RANGE_MAX ++#define LDDPC_OPCODE 0x48000000 ++#define LDDPC_MASK 0xf8000000 ++#define LDDPC_RANGE_MIN 0 ++#define LDDPC_RANGE_MAX 508 ++ ++#define NOPIC_MOV2_OPCODE 0xe0600000 ++#define NOPIC_MOV2_MASK 0xe1e00000 ++#define NOPIC_MOV2_RANGE_MIN (-1048576) ++#define NOPIC_MOV2_RANGE_MAX (1048575) ++#define NOPIC_MOV1_OPCODE 0x30000000 ++#define NOPIC_MOV1_MASK 0xf0000000 ++#define NOPIC_MOV1_RANGE_MIN (-128) ++#define NOPIC_MOV1_RANGE_MAX (127) ++ ++/* Only brc2 variants with cond[3] == 0 is considered, since the ++ others are not relaxable. bral is a special case and is handled ++ separately. */ ++#define BRC2_OPCODE 0xe0800000 ++#define BRC2_MASK 0xe1e80000 ++#define BRC2_RANGE_MIN (-2097152) ++#define BRC2_RANGE_MAX (2097150) ++#define BRC1_OPCODE 0xc0000000 ++#define BRC1_MASK 0xf0080000 ++#define BRC1_RANGE_MIN (-256) ++#define BRC1_RANGE_MAX (254) ++#define BRAL_OPCODE 0xe08f0000 ++#define BRAL_MASK 0xe1ef0000 ++#define BRAL_RANGE_MIN BRC2_RANGE_MIN ++#define BRAL_RANGE_MAX BRC2_RANGE_MAX ++#define RJMP_OPCODE 0xc0080000 ++#define RJMP_MASK 0xf00c0000 ++#define RJMP_RANGE_MIN (-1024) ++#define RJMP_RANGE_MAX (1022) ++ ++/* Define a relax state using the GOT */ ++#define RG(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_GOT, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++/* Define a relax state using the Constant Pool */ ++#define RC(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_CPOOL, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++ ++/* Define a relax state using pc-relative direct reference */ ++#define RP(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_PCREL, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++ ++/* Define a relax state using non-pc-relative direct reference */ ++#define RD(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_ABSOLUTE, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++ ++/* Define a relax state that will be handled specially */ ++#define RS(id, r_type, size) \ ++ { "RS_"#id, RS_##id, RS_NONE, RS_NONE, RS_NONE, REF_ABSOLUTE, \ ++ R_AVR32_##r_type, 0, 0, 0, 0, size } ++ ++const struct relax_state relax_state[RS_MAX] = { ++ RS(NONE, NONE, 0), ++ RS(ALIGN, ALIGN, 0), ++ RS(CPENT, 32_CPENT, 4), ++ ++ RG(PIC_CALL, PIC_RCALL1, PIC_MCALL, NONE, GOTCALL, PIC_MOV2, 10), ++ RG(PIC_MCALL, PIC_RCALL1, NONE, PIC_CALL, GOT18SW, PIC_MCALL, 4), ++ RP(PIC_RCALL2, NONE, PIC_RCALL1, PIC_MCALL, 22H_PCREL, RCALL2, 4), ++ RP(PIC_RCALL1, NONE, NONE, PIC_RCALL2, 11H_PCREL, RCALL1, 2), ++ ++ RG(PIC_LDA, PIC_SUB5, PIC_LDW4, NONE, LDA_GOT, PIC_MOV2, 8), ++ RG(PIC_LDW4, PIC_SUB5, PIC_LDW3, PIC_LDA, GOT16S, PIC_LDW4, 4), ++ RG(PIC_LDW3, PIC_SUB5, NONE, PIC_LDW4, GOT7UW, PIC_LDW3, 2), ++ RP(PIC_SUB5, NONE, NONE, PIC_LDW3, 16N_PCREL, SUB5_PC, 4), ++ ++ RC(NOPIC_MCALL, NOPIC_RCALL1, NONE, NONE, CPCALL, NOPIC_MCALL, 4), ++ RP(NOPIC_RCALL2, NONE, NOPIC_RCALL1, NOPIC_MCALL, 22H_PCREL, RCALL2, 4), ++ RP(NOPIC_RCALL1, NONE, NONE, NOPIC_RCALL2, 11H_PCREL, RCALL1, 2), ++ ++ RC(NOPIC_LDW4, NOPIC_MOV1, NOPIC_LDDPC, NONE, 16_CP, NOPIC_LDW4, 4), ++ RC(NOPIC_LDDPC, NOPIC_MOV1, NONE, NOPIC_LDW4, 9W_CP, LDDPC, 2), ++ RP(NOPIC_SUB5, NOPIC_MOV1, NONE, NOPIC_LDDPC, 16N_PCREL, SUB5_PC, 4), ++ RD(NOPIC_MOV2, NONE, NOPIC_MOV1, NOPIC_SUB5, 21S, NOPIC_MOV2, 4), ++ RD(NOPIC_MOV1, NONE, NONE, NOPIC_MOV2, 8S, NOPIC_MOV1, 2), ++ ++ RP(RCALL2, NONE, RCALL1, NONE, 22H_PCREL, RCALL2, 4), ++ RP(RCALL1, NONE, NONE, RCALL2, 11H_PCREL, RCALL1, 2), ++ RP(BRC2, NONE, BRC1, NONE, 22H_PCREL, BRC2, 4), ++ RP(BRC1, NONE, NONE, BRC2, 9H_PCREL, BRC1, 2), ++ RP(BRAL, NONE, RJMP, NONE, 22H_PCREL, BRAL, 4), ++ RP(RJMP, NONE, NONE, BRAL, 11H_PCREL, RJMP, 2), ++}; ++ ++static bfd_boolean ++avr32_elf_new_section_hook(bfd *abfd, asection *sec) ++{ ++ struct avr32_section_data *sdata; ++ ++ sdata = bfd_zalloc(abfd, sizeof(struct avr32_section_data)); ++ if (!sdata) ++ return FALSE; ++ ++ sec->used_by_bfd = sdata; ++ return _bfd_elf_new_section_hook(abfd, sec); ++} ++ ++static struct avr32_relax_data * ++avr32_relax_data(asection *sec) ++{ ++ struct avr32_section_data *sdata; ++ ++ BFD_ASSERT(sec->used_by_bfd); ++ ++ sdata = (struct avr32_section_data *)elf_section_data(sec); ++ return &sdata->relax_data; ++} ++ ++ /* Link-time relaxation */ ++ ++static bfd_boolean ++avr32_elf_relax_section(bfd *abfd, asection *sec, ++ struct bfd_link_info *info, bfd_boolean *again); ++ ++enum relax_pass_id { ++ RELAX_PASS_SIZE_FRAGS, ++ RELAX_PASS_MOVE_DATA, ++}; ++ ++/* Stolen from the xtensa port */ ++static int ++internal_reloc_compare (const void *ap, const void *bp) ++{ ++ const Elf_Internal_Rela *a = (const Elf_Internal_Rela *) ap; ++ const Elf_Internal_Rela *b = (const Elf_Internal_Rela *) bp; ++ ++ if (a->r_offset != b->r_offset) ++ return (a->r_offset - b->r_offset); ++ ++ /* We don't need to sort on these criteria for correctness, ++ but enforcing a more strict ordering prevents unstable qsort ++ from behaving differently with different implementations. ++ Without the code below we get correct but different results ++ on Solaris 2.7 and 2.8. We would like to always produce the ++ same results no matter the host. */ ++ ++ if (a->r_info != b->r_info) ++ return (a->r_info - b->r_info); ++ ++ return (a->r_addend - b->r_addend); ++} ++ ++static enum relax_state_id ++get_pcrel22_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, ++ const Elf_Internal_Rela *rela) ++{ ++ bfd_byte *contents; ++ bfd_vma insn; ++ enum relax_state_id rs = RS_NONE; ++ ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ return RS_ERROR; ++ ++ insn = bfd_get_32(abfd, contents + rela->r_offset); ++ if ((insn & RCALL2_MASK) == RCALL2_OPCODE) ++ rs = RS_RCALL2; ++ else if ((insn & BRAL_MASK) == BRAL_OPCODE) ++ /* Optimizing bral -> rjmp gets us into all kinds of ++ trouble with jump tables. Better not do it. */ ++ rs = RS_NONE; ++ else if ((insn & BRC2_MASK) == BRC2_OPCODE) ++ rs = RS_BRC2; ++ ++ release_contents(sec, contents); ++ ++ return rs; ++} ++ ++static enum relax_state_id ++get_initial_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, ++ const Elf_Internal_Rela *rela) ++{ ++ switch (ELF_R_TYPE(rela->r_info)) ++ { ++ case R_AVR32_GOTCALL: ++ return RS_PIC_CALL; ++ case R_AVR32_GOT18SW: ++ return RS_PIC_MCALL; ++ case R_AVR32_LDA_GOT: ++ return RS_PIC_LDA; ++ case R_AVR32_GOT16S: ++ return RS_PIC_LDW4; ++ case R_AVR32_CPCALL: ++ return RS_NOPIC_MCALL; ++ case R_AVR32_16_CP: ++ return RS_NOPIC_LDW4; ++ case R_AVR32_9W_CP: ++ return RS_NOPIC_LDDPC; ++ case R_AVR32_ALIGN: ++ return RS_ALIGN; ++ case R_AVR32_32_CPENT: ++ return RS_CPENT; ++ case R_AVR32_22H_PCREL: ++ return get_pcrel22_relax_state(abfd, sec, info, rela); ++ case R_AVR32_9H_PCREL: ++ return RS_BRC1; ++ default: ++ return RS_NONE; ++ } ++} ++ ++static bfd_boolean ++reloc_is_cpool_ref(const Elf_Internal_Rela *rela) ++{ ++ switch (ELF_R_TYPE(rela->r_info)) ++ { ++ case R_AVR32_CPCALL: ++ case R_AVR32_16_CP: ++ case R_AVR32_9W_CP: ++ return TRUE; ++ default: ++ return FALSE; ++ } ++} ++ ++static struct fragment * ++new_frag(bfd *abfd ATTRIBUTE_UNUSED, asection *sec, ++ struct avr32_relax_data *rd, enum relax_state_id state, ++ Elf_Internal_Rela *rela) ++{ ++ struct fragment *frag; ++ bfd_size_type r_size; ++ bfd_vma r_offset; ++ unsigned int i = rd->frag_count; ++ ++ BFD_ASSERT(state >= RS_NONE && state < RS_MAX); ++ ++ rd->frag_count++; ++ frag = bfd_realloc(rd->frag, sizeof(struct fragment) * rd->frag_count); ++ if (!frag) ++ return NULL; ++ rd->frag = frag; ++ ++ frag += i; ++ memset(frag, 0, sizeof(struct fragment)); ++ ++ if (state == RS_ALIGN) ++ r_size = (((rela->r_offset + (1 << rela->r_addend) - 1) ++ & ~((1 << rela->r_addend) - 1)) - rela->r_offset); ++ else ++ r_size = relax_state[state].size; ++ ++ if (rela) ++ r_offset = rela->r_offset; ++ else ++ r_offset = sec->size; ++ ++ if (i == 0) ++ { ++ frag->offset = 0; ++ frag->size = r_offset + r_size; ++ } ++ else ++ { ++ frag->offset = rd->frag[i - 1].offset + rd->frag[i - 1].size; ++ frag->size = r_offset + r_size - frag->offset; ++ } ++ ++ if (state != RS_CPENT) ++ /* Make sure we don't discard this frag */ ++ frag->refcount = 1; ++ ++ frag->initial_state = frag->state = state; ++ frag->rela = rela; ++ ++ return frag; ++} ++ ++static struct fragment * ++find_frag(asection *sec, bfd_vma offset) ++{ ++ struct fragment *first, *last; ++ struct avr32_relax_data *rd = avr32_relax_data(sec); ++ ++ if (rd->frag_count == 0) ++ return NULL; ++ ++ first = &rd->frag[0]; ++ last = &rd->frag[rd->frag_count - 1]; ++ ++ /* This may be a reloc referencing the end of a section. The last ++ frag will never have a reloc associated with it, so its size will ++ never change, thus the offset adjustment of the last frag will ++ always be the same as the offset adjustment of the end of the ++ section. */ ++ if (offset == sec->size) ++ { ++ BFD_ASSERT(last->offset + last->size == sec->size); ++ BFD_ASSERT(!last->rela); ++ return last; ++ } ++ ++ while (first <= last) ++ { ++ struct fragment *mid; ++ ++ mid = (last - first) / 2 + first; ++ if ((mid->offset + mid->size) <= offset) ++ first = mid + 1; ++ else if (mid->offset > offset) ++ last = mid - 1; ++ else ++ return mid; ++ } ++ ++ return NULL; ++} ++ ++/* Look through all relocs in a section and determine if any relocs ++ may be affected by relaxation in other sections. If so, allocate ++ an array of additional relocation data which links the affected ++ relocations to the frag(s) where the relaxation may occur. ++ ++ This function also links cpool references to cpool entries and ++ increments the refcount of the latter when this happens. */ ++ ++static bfd_boolean ++allocate_reloc_data(bfd *abfd, asection *sec, Elf_Internal_Rela *relocs, ++ struct bfd_link_info *info) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Sym *isymbuf = NULL; ++ struct avr32_relax_data *rd; ++ unsigned int i; ++ bfd_boolean ret = FALSE; ++ ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ rd = avr32_relax_data(sec); ++ ++ RDBG("%s<%s>: allocate_reloc_data\n", abfd->filename, sec->name); ++ ++ for (i = 0; i < sec->reloc_count; i++) ++ { ++ Elf_Internal_Rela *rel = &relocs[i]; ++ asection *sym_sec; ++ unsigned long r_symndx; ++ bfd_vma sym_value; ++ ++ if (!rel->r_addend && ELF_R_TYPE(rel->r_info) != R_AVR32_DIFF32 ++ && !reloc_is_cpool_ref(rel)) ++ continue; ++ ++ r_symndx = ELF_R_SYM(rel->r_info); ++ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ Elf_Internal_Sym *isym; ++ ++ if (!isymbuf) ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ return FALSE; ++ ++ isym = &isymbuf[r_symndx]; ++ sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); ++ sym_value = isym->st_value; ++ } ++ else ++ { ++ struct elf_link_hash_entry *h; ++ ++ h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; ++ ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; ++ ++ if (h->root.type != bfd_link_hash_defined ++ && h->root.type != bfd_link_hash_defweak) ++ continue; ++ ++ sym_sec = h->root.u.def.section; ++ sym_value = h->root.u.def.value; ++ } ++ ++ if (sym_sec && avr32_relax_data(sym_sec)->is_relaxable) ++ { ++ bfd_size_type size; ++ struct fragment *frag; ++ ++ if (!rd->reloc_data) ++ { ++ size = sizeof(struct avr32_reloc_data) * sec->reloc_count; ++ rd->reloc_data = bfd_zalloc(abfd, size); ++ if (!rd->reloc_data) ++ goto out; ++ } ++ ++ RDBG("[%3d] 0x%04lx: target: 0x%lx + 0x%lx", ++ i, rel->r_offset, sym_value, rel->r_addend); ++ ++ frag = find_frag(sym_sec, sym_value + rel->r_addend); ++ BFD_ASSERT(frag); ++ rd->reloc_data[i].add_frag = frag; ++ ++ RDBG(" -> %s<%s>:%04lx\n", sym_sec->owner->filename, sym_sec->name, ++ frag->rela ? frag->rela->r_offset : sym_sec->size); ++ ++ if (reloc_is_cpool_ref(rel)) ++ { ++ BFD_ASSERT(ELF_R_TYPE(frag->rela->r_info) == R_AVR32_32_CPENT); ++ frag->refcount++; ++ } ++ ++ if (ELF_R_TYPE(rel->r_info) == R_AVR32_DIFF32) ++ { ++ bfd_byte *contents; ++ bfd_signed_vma diff; ++ ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ goto out; ++ ++ diff = bfd_get_signed_32(abfd, contents + rel->r_offset); ++ frag = find_frag(sym_sec, sym_value + rel->r_addend + diff); ++ BFD_ASSERT(frag); ++ rd->reloc_data[i].sub_frag = frag; ++ ++ release_contents(sec, contents); ++ } ++ } ++ } ++ ++ ret = TRUE; ++ ++ out: ++ release_local_syms(abfd, isymbuf); ++ return ret; ++} ++ ++static bfd_boolean ++global_sym_set_frag(struct elf_avr32_link_hash_entry *havr, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED) ++{ ++ struct fragment *frag; ++ asection *sec; ++ ++ if (havr->root.root.type != bfd_link_hash_defined ++ && havr->root.root.type != bfd_link_hash_defweak) ++ return TRUE; ++ ++ sec = havr->root.root.u.def.section; ++ if (bfd_is_const_section(sec) ++ || !avr32_relax_data(sec)->is_relaxable) ++ return TRUE; ++ ++ frag = find_frag(sec, havr->root.root.u.def.value); ++ if (!frag) ++ { ++ unsigned int i; ++ struct avr32_relax_data *rd = avr32_relax_data(sec); ++ ++ RDBG("In %s: No frag for %s <%s+%lu> (limit %lu)\n", ++ sec->owner->filename, havr->root.root.root.string, ++ sec->name, havr->root.root.u.def.value, sec->size); ++ for (i = 0; i < rd->frag_count; i++) ++ RDBG(" %8lu - %8lu\n", rd->frag[i].offset, ++ rd->frag[i].offset + rd->frag[i].size); ++ } ++ BFD_ASSERT(frag); ++ ++ havr->sym_frag = frag; ++ return TRUE; ++} ++ ++static bfd_boolean ++analyze_relocations(struct bfd_link_info *info) ++{ ++ bfd *abfd; ++ asection *sec; ++ ++ /* Divide all relaxable sections into fragments */ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ { ++ if (!(elf_elfheader(abfd)->e_flags & EF_AVR32_LINKRELAX)) ++ { ++ if (!(*info->callbacks->warning) ++ (info, _("input is not relaxable"), NULL, abfd, NULL, 0)) ++ return FALSE; ++ continue; ++ } ++ ++ for (sec = abfd->sections; sec; sec = sec->next) ++ { ++ struct avr32_relax_data *rd; ++ struct fragment *frag; ++ Elf_Internal_Rela *relocs; ++ unsigned int i; ++ bfd_boolean ret = TRUE; ++ ++ if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) ++ continue; ++ ++ rd = avr32_relax_data(sec); ++ ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ return FALSE; ++ ++ qsort(relocs, sec->reloc_count, sizeof(Elf_Internal_Rela), ++ internal_reloc_compare); ++ ++ for (i = 0; i < sec->reloc_count; i++) ++ { ++ enum relax_state_id state; ++ ++ ret = FALSE; ++ state = get_initial_relax_state(abfd, sec, info, &relocs[i]); ++ if (state == RS_ERROR) ++ break; ++ ++ if (state) ++ { ++ frag = new_frag(abfd, sec, rd, state, &relocs[i]); ++ if (!frag) ++ break; ++ ++ pin_internal_relocs(sec, relocs); ++ rd->is_relaxable = TRUE; ++ } ++ ++ ret = TRUE; ++ } ++ ++ release_internal_relocs(sec, relocs); ++ if (!ret) ++ return ret; ++ ++ if (rd->is_relaxable) ++ { ++ frag = new_frag(abfd, sec, rd, RS_NONE, NULL); ++ if (!frag) ++ return FALSE; ++ } ++ } ++ } ++ ++ /* Link each global symbol to the fragment where it's defined. */ ++ elf_link_hash_traverse(elf_hash_table(info), global_sym_set_frag, info); ++ ++ /* Do the same for local symbols. */ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ { ++ Elf_Internal_Sym *isymbuf, *isym; ++ struct fragment **local_sym_frag; ++ unsigned int i, sym_count; ++ ++ sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; ++ if (sym_count == 0) ++ continue; ++ ++ local_sym_frag = bfd_zalloc(abfd, sym_count * sizeof(struct fragment *)); ++ if (!local_sym_frag) ++ return FALSE; ++ elf_tdata(abfd)->local_sym_frag = local_sym_frag; ++ ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ return FALSE; ++ ++ for (i = 0; i < sym_count; i++) ++ { ++ struct avr32_relax_data *rd; ++ struct fragment *frag; ++ asection *sec; ++ ++ isym = &isymbuf[i]; ++ ++ sec = bfd_section_from_elf_index(abfd, isym->st_shndx); ++ if (!sec) ++ continue; ++ ++ rd = avr32_relax_data(sec); ++ if (!rd->is_relaxable) ++ continue; ++ ++ frag = find_frag(sec, isym->st_value); ++ BFD_ASSERT(frag); ++ ++ local_sym_frag[i] = frag; ++ } ++ ++ release_local_syms(abfd, isymbuf); ++ } ++ ++ /* And again for relocs with addends and constant pool references */ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ for (sec = abfd->sections; sec; sec = sec->next) ++ { ++ Elf_Internal_Rela *relocs; ++ bfd_boolean ret; ++ ++ if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) ++ continue; ++ ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ return FALSE; ++ ++ ret = allocate_reloc_data(abfd, sec, relocs, info); ++ ++ release_internal_relocs(sec, relocs); ++ if (ret == FALSE) ++ return ret; ++ } ++ ++ return TRUE; ++} ++ ++static bfd_boolean ++rs_is_good_enough(const struct relax_state *rs, struct fragment *frag, ++ bfd_vma symval, bfd_vma addr, struct got_entry *got, ++ struct avr32_reloc_data *ind_data, ++ bfd_signed_vma offset_adjust) ++{ ++ bfd_signed_vma target = 0; ++ ++ switch (rs->reftype) ++ { ++ case REF_ABSOLUTE: ++ target = symval; ++ break; ++ case REF_PCREL: ++ target = symval - addr; ++ break; ++ case REF_CPOOL: ++ /* cpool frags are always in the same section and always after ++ all frags referring to it. So it's always correct to add in ++ offset_adjust here. */ ++ target = (ind_data->add_frag->offset + ind_data->add_frag->offset_adjust ++ + offset_adjust - frag->offset - frag->offset_adjust); ++ break; ++ case REF_GOT: ++ target = got->offset; ++ break; ++ default: ++ abort(); ++ } ++ ++ if (target >= rs->range_min && target <= rs->range_max) ++ return TRUE; ++ else ++ return FALSE; ++} ++ ++static bfd_boolean ++avr32_size_frags(bfd *abfd, asection *sec, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct avr32_relax_data *rd; ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Rela *relocs = NULL; ++ Elf_Internal_Sym *isymbuf = NULL; ++ struct got_entry **local_got_ents; ++ struct fragment **local_sym_frag; ++ bfd_boolean ret = FALSE; ++ bfd_signed_vma delta = 0; ++ unsigned int i; ++ ++ htab = avr32_elf_hash_table(info); ++ rd = avr32_relax_data(sec); ++ ++ if (sec == htab->sgot) ++ { ++ RDBG("Relaxing GOT section (vma: 0x%lx)\n", ++ sec->output_section->vma + sec->output_offset); ++ if (assign_got_offsets(htab)) ++ htab->repeat_pass = TRUE; ++ return TRUE; ++ } ++ ++ if (!rd->is_relaxable) ++ return TRUE; ++ ++ if (!sec->rawsize) ++ sec->rawsize = sec->size; ++ ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ goto out; ++ ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ goto out; ++ ++ local_got_ents = elf_local_got_ents(abfd); ++ local_sym_frag = elf_tdata(abfd)->local_sym_frag; ++ ++ RDBG("size_frags: %s<%s>\n vma: 0x%08lx, size: 0x%08lx\n", ++ abfd->filename, sec->name, ++ sec->output_section->vma + sec->output_offset, sec->size); ++ ++ for (i = 0; i < rd->frag_count; i++) ++ { ++ struct fragment *frag = &rd->frag[i]; ++ struct avr32_reloc_data *r_data = NULL, *ind_data = NULL; ++ const struct relax_state *state, *next_state; ++ struct fragment *target_frag = NULL; ++ asection *sym_sec = NULL; ++ Elf_Internal_Rela *rela; ++ struct got_entry *got; ++ bfd_vma symval, r_offset, addend, addr; ++ bfd_signed_vma size_adjust = 0, distance; ++ unsigned long r_symndx; ++ bfd_boolean defined = TRUE, dynamic = FALSE; ++ unsigned char sym_type; ++ ++ frag->offset_adjust += delta; ++ state = next_state = &relax_state[frag->state]; ++ rela = frag->rela; ++ ++ BFD_ASSERT(state->id == frag->state); ++ ++ RDBG(" 0x%04lx%c%d: %s [size %ld]", rela ? rela->r_offset : sec->rawsize, ++ (frag->offset_adjust < 0)?'-':'+', ++ abs(frag->offset_adjust), state->name, state->size); ++ ++ if (!rela) ++ { ++ RDBG(": no reloc, ignoring\n"); ++ continue; ++ } ++ ++ BFD_ASSERT((unsigned int)(rela - relocs) < sec->reloc_count); ++ BFD_ASSERT(state != RS_NONE); ++ ++ r_offset = rela->r_offset + frag->offset_adjust; ++ addr = sec->output_section->vma + sec->output_offset + r_offset; ++ ++ switch (frag->state) ++ { ++ case RS_ALIGN: ++ size_adjust = ((addr + (1 << rela->r_addend) - 1) ++ & ~((1 << rela->r_addend) - 1)); ++ size_adjust -= (sec->output_section->vma + sec->output_offset ++ + frag->offset + frag->offset_adjust ++ + frag->size + frag->size_adjust); ++ ++ RDBG(": adjusting size %lu -> %lu\n", frag->size + frag->size_adjust, ++ frag->size + frag->size_adjust + size_adjust); ++ break; ++ ++ case RS_CPENT: ++ if (frag->refcount == 0 && frag->size_adjust == 0) ++ { ++ RDBG(": discarding frag\n"); ++ size_adjust = -4; ++ } ++ else if (frag->refcount > 0 && frag->size_adjust < 0) ++ { ++ RDBG(": un-discarding frag\n"); ++ size_adjust = 4; ++ } ++ break; ++ ++ default: ++ if (rd->reloc_data) ++ r_data = &rd->reloc_data[frag->rela - relocs]; ++ ++ /* If this is a cpool reference, we want the symbol that the ++ cpool entry refers to, not the symbol for the cpool entry ++ itself, as we already know what frag it's in. */ ++ if (relax_state[frag->initial_state].reftype == REF_CPOOL) ++ { ++ Elf_Internal_Rela *irela = r_data->add_frag->rela; ++ ++ r_symndx = ELF_R_SYM(irela->r_info); ++ addend = irela->r_addend; ++ ++ /* The constant pool must be in the same section as the ++ reloc referring to it. */ ++ BFD_ASSERT((unsigned long)(irela - relocs) < sec->reloc_count); ++ ++ ind_data = r_data; ++ r_data = &rd->reloc_data[irela - relocs]; ++ } ++ else ++ { ++ r_symndx = ELF_R_SYM(rela->r_info); ++ addend = rela->r_addend; ++ } ++ ++ /* Get the value of the symbol referred to by the reloc. */ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ Elf_Internal_Sym *isym; ++ ++ isym = isymbuf + r_symndx; ++ symval = 0; ++ ++ RDBG(" local sym %lu: ", r_symndx); ++ ++ if (isym->st_shndx == SHN_UNDEF) ++ defined = FALSE; ++ else if (isym->st_shndx == SHN_ABS) ++ sym_sec = bfd_abs_section_ptr; ++ else if (isym->st_shndx == SHN_COMMON) ++ sym_sec = bfd_com_section_ptr; ++ else ++ sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); ++ ++ symval = isym->st_value; ++ sym_type = ELF_ST_TYPE(isym->st_info); ++ target_frag = local_sym_frag[r_symndx]; ++ ++ if (local_got_ents) ++ got = local_got_ents[r_symndx]; ++ else ++ got = NULL; ++ } ++ else ++ { ++ /* Global symbol */ ++ unsigned long index; ++ struct elf_link_hash_entry *h; ++ struct elf_avr32_link_hash_entry *havr; ++ ++ index = r_symndx - symtab_hdr->sh_info; ++ h = elf_sym_hashes(abfd)[index]; ++ BFD_ASSERT(h != NULL); ++ ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; ++ ++ havr = (struct elf_avr32_link_hash_entry *)h; ++ got = h->got.glist; ++ ++ symval = 0; ++ ++ RDBG(" %s: ", h->root.root.string); ++ ++ if (h->root.type != bfd_link_hash_defined ++ && h->root.type != bfd_link_hash_defweak) ++ { ++ RDBG("(undef)"); ++ defined = FALSE; ++ } ++ else if ((info->shared && !info->symbolic && h->dynindx != -1) ++ || (htab->root.dynamic_sections_created ++ && h->def_dynamic && !h->def_regular)) ++ { ++ RDBG("(dynamic)"); ++ dynamic = TRUE; ++ sym_sec = h->root.u.def.section; ++ } ++ else ++ { ++ sym_sec = h->root.u.def.section; ++ symval = h->root.u.def.value; ++ target_frag = havr->sym_frag; ++ } ++ ++ sym_type = h->type; ++ } ++ ++ /* Thanks to elf32-ppc for this one. */ ++ if (sym_sec && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE) ++ { ++ /* At this stage in linking, no SEC_MERGE symbol has been ++ adjusted, so all references to such symbols need to be ++ passed through _bfd_merged_section_offset. (Later, in ++ relocate_section, all SEC_MERGE symbols *except* for ++ section symbols have been adjusted.) ++ ++ SEC_MERGE sections are not relaxed by us, as they ++ shouldn't contain any code. */ ++ ++ BFD_ASSERT(!target_frag && !(r_data && r_data->add_frag)); ++ ++ /* gas may reduce relocations against symbols in SEC_MERGE ++ sections to a relocation against the section symbol when ++ the original addend was zero. When the reloc is against ++ a section symbol we should include the addend in the ++ offset passed to _bfd_merged_section_offset, since the ++ location of interest is the original symbol. On the ++ other hand, an access to "sym+addend" where "sym" is not ++ a section symbol should not include the addend; Such an ++ access is presumed to be an offset from "sym"; The ++ location of interest is just "sym". */ ++ RDBG("\n MERGE: %s: 0x%lx+0x%lx+0x%lx -> ", ++ (sym_type == STT_SECTION)?"section":"not section", ++ sym_sec->output_section->vma + sym_sec->output_offset, ++ symval, addend); ++ ++ if (sym_type == STT_SECTION) ++ symval += addend; ++ ++ symval = (_bfd_merged_section_offset ++ (abfd, &sym_sec, ++ elf_section_data(sym_sec)->sec_info, symval)); ++ ++ if (sym_type != STT_SECTION) ++ symval += addend; ++ } ++ else ++ symval += addend; ++ ++ if (defined && !dynamic) ++ { ++ RDBG("0x%lx+0x%lx", ++ sym_sec->output_section->vma + sym_sec->output_offset, ++ symval); ++ symval += sym_sec->output_section->vma + sym_sec->output_offset; ++ } ++ ++ if (r_data && r_data->add_frag) ++ /* If the add_frag pointer is set, it means that this reloc ++ has an addend that may be affected by relaxation. */ ++ target_frag = r_data->add_frag; ++ ++ if (target_frag) ++ { ++ symval += target_frag->offset_adjust; ++ ++ /* If target_frag comes after this frag in the same ++ section, we should assume that it will be moved by ++ the same amount we are. */ ++ if ((target_frag - rd->frag) < (int)rd->frag_count ++ && target_frag > frag) ++ symval += delta; ++ } ++ ++ distance = symval - addr; ++ ++ /* First, try to make a direct reference. If the symbol is ++ dynamic or undefined, we must take care not to change its ++ reference type, that is, we can't make it direct. ++ ++ Also, it seems like some sections may actually be resized ++ after the relaxation code is done, so we can't really ++ trust that our "distance" is correct. There's really no ++ easy solution to this problem, so we'll just disallow ++ direct references to SEC_DATA sections. ++ ++ Oh, and .bss isn't actually SEC_DATA, so we disallow ++ !SEC_HAS_CONTENTS as well. */ ++ if (!dynamic && defined ++ && (htab->direct_data_refs ++ || (!(sym_sec->flags & SEC_DATA) ++ && (sym_sec->flags & SEC_HAS_CONTENTS))) ++ && next_state->direct) ++ { ++ next_state = &relax_state[next_state->direct]; ++ RDBG(" D-> %s", next_state->name); ++ } ++ ++ /* Iterate backwards until we find a state that fits. */ ++ while (next_state->prev ++ && !rs_is_good_enough(next_state, frag, symval, addr, ++ got, ind_data, delta)) ++ { ++ next_state = &relax_state[next_state->prev]; ++ RDBG(" P-> %s", next_state->name); ++ } ++ ++ /* Then try to find the best possible state. */ ++ while (next_state->next) ++ { ++ const struct relax_state *candidate; ++ ++ candidate = &relax_state[next_state->next]; ++ if (!rs_is_good_enough(candidate, frag, symval, addr, got, ++ ind_data, delta)) ++ break; ++ ++ next_state = candidate; ++ RDBG(" N-> %s", next_state->name); ++ } ++ ++ RDBG(" [size %ld]\n", next_state->size); ++ ++ BFD_ASSERT(next_state->id); ++ BFD_ASSERT(!dynamic || next_state->reftype == REF_GOT); ++ ++ size_adjust = next_state->size - state->size; ++ ++ /* There's a theoretical possibility that shrinking one frag ++ may cause another to grow, which may cause the first one to ++ grow as well, and we're back where we started. Avoid this ++ scenario by disallowing a frag that has grown to ever ++ shrink again. */ ++ if (state->reftype == REF_GOT && next_state->reftype != REF_GOT) ++ { ++ if (frag->has_grown) ++ next_state = state; ++ else ++ unref_got_entry(htab, got); ++ } ++ else if (state->reftype != REF_GOT && next_state->reftype == REF_GOT) ++ { ++ ref_got_entry(htab, got); ++ frag->has_grown = TRUE; ++ } ++ else if (state->reftype == REF_CPOOL ++ && next_state->reftype != REF_CPOOL) ++ { ++ if (frag->has_grown) ++ next_state = state; ++ else ++ ind_data->add_frag->refcount--; ++ } ++ else if (state->reftype != REF_CPOOL ++ && next_state->reftype == REF_CPOOL) ++ { ++ ind_data->add_frag->refcount++; ++ frag->has_grown = TRUE; ++ } ++ else ++ { ++ if (frag->has_grown && size_adjust < 0) ++ next_state = state; ++ else if (size_adjust > 0) ++ frag->has_grown = TRUE; ++ } ++ ++ size_adjust = next_state->size - state->size; ++ frag->state = next_state->id; ++ ++ break; ++ } ++ ++ if (size_adjust) ++ htab->repeat_pass = TRUE; ++ ++ frag->size_adjust += size_adjust; ++ sec->size += size_adjust; ++ delta += size_adjust; ++ ++ BFD_ASSERT((frag->offset + frag->offset_adjust ++ + frag->size + frag->size_adjust) ++ == (frag[1].offset + frag[1].offset_adjust + delta)); ++ } ++ ++ ret = TRUE; ++ ++ out: ++ release_local_syms(abfd, isymbuf); ++ release_internal_relocs(sec, relocs); ++ return ret; ++} ++ ++static bfd_boolean ++adjust_global_symbol(struct elf_avr32_link_hash_entry *havr, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED) ++{ ++ struct elf_link_hash_entry *h = &havr->root; ++ ++ if (havr->sym_frag && (h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak)) ++ { ++ RDBG("adjust_global_symbol: %s 0x%08lx -> 0x%08lx\n", ++ h->root.root.string, h->root.u.def.value, ++ h->root.u.def.value + havr->sym_frag->offset_adjust); ++ h->root.u.def.value += havr->sym_frag->offset_adjust; ++ } ++ return TRUE; ++} ++ ++static bfd_boolean ++adjust_syms(struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ bfd *abfd; ++ ++ htab = avr32_elf_hash_table(info); ++ elf_link_hash_traverse(&htab->root, adjust_global_symbol, info); ++ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ { ++ Elf_Internal_Sym *isymbuf; ++ struct fragment **local_sym_frag, *frag; ++ unsigned int i, sym_count; ++ ++ sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; ++ if (sym_count == 0) ++ continue; ++ ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ return FALSE; ++ ++ local_sym_frag = elf_tdata(abfd)->local_sym_frag; ++ ++ for (i = 0; i < sym_count; i++) ++ { ++ frag = local_sym_frag[i]; ++ if (frag) ++ { ++ RDBG("adjust_local_symbol: %s[%u] 0x%08lx -> 0x%08lx\n", ++ abfd->filename, i, isymbuf[i].st_value, ++ isymbuf[i].st_value + frag->offset_adjust); ++ isymbuf[i].st_value += frag->offset_adjust; ++ } ++ } ++ ++ release_local_syms(abfd, isymbuf); ++ } ++ ++ htab->symbols_adjusted = TRUE; ++ return TRUE; ++} ++ ++static bfd_boolean ++adjust_relocs(bfd *abfd, asection *sec, struct bfd_link_info *info) ++{ ++ struct avr32_relax_data *rd; ++ Elf_Internal_Rela *relocs; ++ Elf_Internal_Shdr *symtab_hdr; ++ unsigned int i; ++ bfd_boolean ret = FALSE; ++ ++ rd = avr32_relax_data(sec); ++ if (!rd->reloc_data) ++ return TRUE; ++ ++ RDBG("adjust_relocs: %s<%s> (count: %u)\n", abfd->filename, sec->name, ++ sec->reloc_count); ++ ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ return FALSE; ++ ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ ++ for (i = 0; i < sec->reloc_count; i++) ++ { ++ Elf_Internal_Rela *rela = &relocs[i]; ++ struct avr32_reloc_data *r_data = &rd->reloc_data[i]; ++ struct fragment *sym_frag; ++ unsigned long r_symndx; ++ ++ if (r_data->add_frag) ++ { ++ r_symndx = ELF_R_SYM(rela->r_info); ++ ++ if (r_symndx < symtab_hdr->sh_info) ++ sym_frag = elf_tdata(abfd)->local_sym_frag[r_symndx]; ++ else ++ { ++ struct elf_link_hash_entry *h; ++ ++ h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; ++ ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; ++ ++ BFD_ASSERT(h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak); ++ ++ sym_frag = ((struct elf_avr32_link_hash_entry *)h)->sym_frag; ++ } ++ ++ RDBG(" addend: 0x%08lx -> 0x%08lx\n", ++ rela->r_addend, ++ rela->r_addend + r_data->add_frag->offset_adjust ++ - (sym_frag ? sym_frag->offset_adjust : 0)); ++ ++ /* If this is against a section symbol, we won't find any ++ sym_frag, so we'll just adjust the addend. */ ++ rela->r_addend += r_data->add_frag->offset_adjust; ++ if (sym_frag) ++ rela->r_addend -= sym_frag->offset_adjust; ++ ++ if (r_data->sub_frag) ++ { ++ bfd_byte *contents; ++ bfd_signed_vma diff; ++ ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ goto out; ++ ++ /* I realize now that sub_frag is misnamed. It's ++ actually add_frag which is subtracted in this ++ case... */ ++ diff = bfd_get_signed_32(abfd, contents + rela->r_offset); ++ diff += (r_data->sub_frag->offset_adjust ++ - r_data->add_frag->offset_adjust); ++ bfd_put_32(abfd, diff, contents + rela->r_offset); ++ ++ RDBG(" 0x%lx: DIFF32 updated: 0x%lx\n", rela->r_offset, diff); ++ ++ release_contents(sec, contents); ++ } ++ } ++ else ++ BFD_ASSERT(!r_data->sub_frag); ++ } ++ ++ ret = TRUE; ++ ++ out: ++ release_internal_relocs(sec, relocs); ++ return ret; ++} ++ ++static bfd_boolean ++avr32_move_data(bfd *abfd, asection *sec, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct avr32_relax_data *rd; ++ struct fragment *frag, *fragend; ++ Elf_Internal_Rela *relocs = NULL; ++ bfd_byte *contents = NULL; ++ unsigned int i; ++ bfd_boolean ret = FALSE; ++ ++ htab = avr32_elf_hash_table(info); ++ rd = avr32_relax_data(sec); ++ ++ if (!htab->symbols_adjusted) ++ if (!adjust_syms(info)) ++ return FALSE; ++ ++ if (rd->is_relaxable) ++ { ++ /* Resize the section first, so that we can be sure that enough ++ memory is allocated in case the section has grown. */ ++ if (sec->size > sec->rawsize ++ && elf_section_data(sec)->this_hdr.contents) ++ { ++ /* We must not use cached data if the section has grown. */ ++ free(elf_section_data(sec)->this_hdr.contents); ++ elf_section_data(sec)->this_hdr.contents = NULL; ++ } ++ ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ goto out; ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ goto out; ++ ++ fragend = rd->frag + rd->frag_count; ++ ++ RDBG("move_data: %s<%s>: relocs=%p, contents=%p\n", ++ abfd->filename, sec->name, relocs, contents); ++ ++ /* First, move the data into place. We must take care to move ++ frags in the right order so that we don't accidentally ++ overwrite parts of the next frag. */ ++ for (frag = rd->frag; frag < fragend; frag++) ++ { ++ RDBG(" 0x%08lx%c0x%x: size 0x%lx%c0x%x\n", ++ frag->offset, frag->offset_adjust >= 0 ? '+' : '-', ++ abs(frag->offset_adjust), ++ frag->size, frag->size_adjust >= 0 ? '+' : '-', ++ abs(frag->size_adjust)); ++ if (frag->offset_adjust > 0) ++ { ++ struct fragment *prev = frag - 1; ++ struct fragment *last; ++ ++ for (last = frag; last < fragend && last->offset_adjust > 0; ++ last++) ; ++ ++ if (last == fragend) ++ last--; ++ ++ for (frag = last; frag != prev; frag--) ++ { ++ if (frag->offset_adjust ++ && frag->size + frag->size_adjust > 0) ++ { ++ RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", ++ frag->offset, frag->offset + frag->offset_adjust, ++ frag->size + frag->size_adjust); ++ memmove(contents + frag->offset + frag->offset_adjust, ++ contents + frag->offset, ++ frag->size + frag->size_adjust); ++ } ++ } ++ frag = last; ++ } ++ else if (frag->offset_adjust && frag->size + frag->size_adjust > 0) ++ { ++ RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", ++ frag->offset, frag->offset + frag->offset_adjust, ++ frag->size + frag->size_adjust); ++ memmove(contents + frag->offset + frag->offset_adjust, ++ contents + frag->offset, ++ frag->size + frag->size_adjust); ++ } ++ } ++ ++ i = 0; ++ ++ for (frag = rd->frag; frag < fragend; frag++) ++ { ++ const struct relax_state *state, *istate; ++ struct avr32_reloc_data *r_data = NULL; ++ ++ istate = &relax_state[frag->initial_state]; ++ state = &relax_state[frag->state]; ++ ++ if (rd->reloc_data) ++ r_data = &rd->reloc_data[frag->rela - relocs]; ++ ++ BFD_ASSERT((long)(frag->size + frag->size_adjust) >= 0); ++ BFD_ASSERT(state->reftype != REF_CPOOL ++ || r_data->add_frag->refcount > 0); ++ ++ if (istate->reftype == REF_CPOOL && state->reftype != REF_CPOOL) ++ { ++ struct fragment *ifrag; ++ ++ /* An indirect reference through the cpool has been ++ converted to a direct reference. We must update the ++ reloc to point to the symbol itself instead of the ++ constant pool entry. The reloc type will be updated ++ later. */ ++ ifrag = r_data->add_frag; ++ frag->rela->r_info = ifrag->rela->r_info; ++ frag->rela->r_addend = ifrag->rela->r_addend; ++ ++ /* Copy the reloc data so the addend will be adjusted ++ correctly later. */ ++ *r_data = rd->reloc_data[ifrag->rela - relocs]; ++ } ++ ++ /* Move all relocs covered by this frag. */ ++ if (frag->rela) ++ BFD_ASSERT(&relocs[i] <= frag->rela); ++ else ++ BFD_ASSERT((frag + 1) == fragend && frag->state == RS_NONE); ++ ++ if (frag == rd->frag) ++ BFD_ASSERT(i == 0); ++ else ++ BFD_ASSERT(&relocs[i] > frag[-1].rela); ++ ++ /* If non-null, frag->rela is the last relocation in the ++ fragment. frag->rela can only be null in the last ++ fragment, so in that case, we'll just do the rest. */ ++ for (; (i < sec->reloc_count ++ && (!frag->rela || &relocs[i] <= frag->rela)); i++) ++ { ++ RDBG("[%4u] r_offset 0x%08lx -> 0x%08lx\n", i, relocs[i].r_offset, ++ relocs[i].r_offset + frag->offset_adjust); ++ relocs[i].r_offset += frag->offset_adjust; ++ } ++ ++ if (frag->refcount == 0) ++ { ++ /* If this frag is to be discarded, make sure we won't ++ relocate it later on. */ ++ BFD_ASSERT(frag->state == RS_CPENT); ++ frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), ++ R_AVR32_NONE); ++ } ++ else if (frag->state == RS_ALIGN) ++ { ++ bfd_vma addr, addr_end; ++ ++ addr = frag->rela->r_offset; ++ addr_end = (frag->offset + frag->offset_adjust ++ + frag->size + frag->size_adjust); ++ ++ /* If the section is executable, insert NOPs. ++ Otherwise, insert zeroes. */ ++ if (sec->flags & SEC_CODE) ++ { ++ if (addr & 1) ++ { ++ bfd_put_8(abfd, 0, contents + addr); ++ addr++; ++ } ++ ++ BFD_ASSERT(!((addr_end - addr) & 1)); ++ ++ while (addr < addr_end) ++ { ++ bfd_put_16(abfd, NOP_OPCODE, contents + addr); ++ addr += 2; ++ } ++ } ++ else ++ memset(contents + addr, 0, addr_end - addr); ++ } ++ else if (state->opcode_mask) ++ { ++ bfd_vma insn; ++ ++ /* Update the opcode and the relocation type unless it's a ++ "special" relax state (i.e. RS_NONE, RS_ALIGN or ++ RS_CPENT.), in which case the opcode mask is zero. */ ++ insn = bfd_get_32(abfd, contents + frag->rela->r_offset); ++ insn &= ~state->opcode_mask; ++ insn |= state->opcode; ++ RDBG(" 0x%lx: inserting insn %08lx\n", ++ frag->rela->r_offset, insn); ++ bfd_put_32(abfd, insn, contents + frag->rela->r_offset); ++ ++ frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), ++ state->r_type); ++ } ++ ++ if ((frag + 1) == fragend) ++ BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust ++ + frag->size_adjust) == sec->size); ++ else ++ BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust ++ + frag->size_adjust) ++ == (frag[1].offset + frag[1].offset_adjust)); ++ } ++ } ++ ++ /* Adjust reloc addends and DIFF32 differences */ ++ if (!adjust_relocs(abfd, sec, info)) ++ return FALSE; ++ ++ ret = TRUE; ++ ++ out: ++ release_contents(sec, contents); ++ release_internal_relocs(sec, relocs); ++ return ret; ++} ++ ++static bfd_boolean ++avr32_elf_relax_section(bfd *abfd, asection *sec, ++ struct bfd_link_info *info, bfd_boolean *again) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct avr32_relax_data *rd; ++ ++ *again = FALSE; ++ if (info->relocatable) ++ return TRUE; ++ ++ htab = avr32_elf_hash_table(info); ++ if ((!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) ++ && sec != htab->sgot) ++ return TRUE; ++ ++ if (!htab->relocations_analyzed) ++ { ++ if (!analyze_relocations(info)) ++ return FALSE; ++ htab->relocations_analyzed = TRUE; ++ } ++ ++ rd = avr32_relax_data(sec); ++ ++ if (rd->iteration != htab->relax_iteration) ++ { ++ if (!htab->repeat_pass) ++ htab->relax_pass++; ++ htab->relax_iteration++; ++ htab->repeat_pass = FALSE; ++ } ++ ++ rd->iteration++; ++ ++ switch (htab->relax_pass) ++ { ++ case RELAX_PASS_SIZE_FRAGS: ++ if (!avr32_size_frags(abfd, sec, info)) ++ return FALSE; ++ *again = TRUE; ++ break; ++ case RELAX_PASS_MOVE_DATA: ++ if (!avr32_move_data(abfd, sec, info)) ++ return FALSE; ++ break; ++ } ++ ++ return TRUE; ++} ++ ++ ++/* Relocation */ ++ ++static bfd_reloc_status_type ++avr32_check_reloc_value(asection *sec, Elf_Internal_Rela *rela, ++ bfd_signed_vma relocation, reloc_howto_type *howto); ++static bfd_reloc_status_type ++avr32_final_link_relocate(reloc_howto_type *howto, bfd *input_bfd, ++ asection *input_section, bfd_byte *contents, ++ Elf_Internal_Rela *rel, bfd_vma value); ++static bfd_boolean ++avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, ++ bfd *input_bfd, asection *input_section, ++ bfd_byte *contents, Elf_Internal_Rela *relocs, ++ Elf_Internal_Sym *local_syms, ++ asection **local_sections); ++ ++ ++#define symbol_address(symbol) \ ++ symbol->value + symbol->section->output_section->vma \ ++ + symbol->section->output_offset ++ ++#define avr32_elf_insert_field(size, field, abfd, reloc_entry, data) \ ++ do \ ++ { \ ++ unsigned long x; \ ++ x = bfd_get_##size (abfd, data + reloc_entry->address); \ ++ x &= ~reloc_entry->howto->dst_mask; \ ++ x |= field & reloc_entry->howto->dst_mask; \ ++ bfd_put_##size (abfd, (bfd_vma) x, data + reloc_entry->address); \ ++ } \ ++ while(0) ++ ++static bfd_reloc_status_type ++avr32_check_reloc_value(asection *sec ATTRIBUTE_UNUSED, ++ Elf_Internal_Rela *rela ATTRIBUTE_UNUSED, ++ bfd_signed_vma relocation, ++ reloc_howto_type *howto) ++{ ++ bfd_vma reloc_u; ++ ++ /* We take "complain_overflow_dont" to mean "don't complain on ++ alignment either". This way, we don't have to special-case ++ R_AVR32_HI16 */ ++ if (howto->complain_on_overflow == complain_overflow_dont) ++ return bfd_reloc_ok; ++ ++ /* Check if the value is correctly aligned */ ++ if (relocation & ((1 << howto->rightshift) - 1)) ++ { ++ RDBG("misaligned: %s<%s+%lx>: %s: 0x%lx (align %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, relocation, howto->rightshift); ++ return bfd_reloc_overflow; ++ } ++ ++ /* Now, get rid of the unnecessary bits */ ++ relocation >>= howto->rightshift; ++ reloc_u = (bfd_vma)relocation; ++ ++ switch (howto->complain_on_overflow) ++ { ++ case complain_overflow_unsigned: ++ case complain_overflow_bitfield: ++ if (reloc_u > (unsigned long)((1 << howto->bitsize) - 1)) ++ { ++ RDBG("unsigned overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, reloc_u, howto->bitsize); ++ RDBG("reloc vma: 0x%lx\n", ++ sec->output_section->vma + sec->output_offset + rela->r_offset); ++ ++ return bfd_reloc_overflow; ++ } ++ break; ++ case complain_overflow_signed: ++ if (relocation > (1 << (howto->bitsize - 1)) - 1) ++ { ++ RDBG("signed overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, reloc_u, howto->bitsize); ++ RDBG("reloc vma: 0x%lx\n", ++ sec->output_section->vma + sec->output_offset + rela->r_offset); ++ ++ return bfd_reloc_overflow; ++ } ++ if (relocation < -(1 << (howto->bitsize - 1))) ++ { ++ RDBG("signed overflow: %s<%s+%lx>: %s: -0x%lx (size %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, -relocation, howto->bitsize); ++ RDBG("reloc vma: 0x%lx\n", ++ sec->output_section->vma + sec->output_offset + rela->r_offset); ++ ++ return bfd_reloc_overflow; ++ } ++ break; ++ default: ++ abort(); ++ } ++ ++ return bfd_reloc_ok; ++} ++ ++ ++static bfd_reloc_status_type ++avr32_final_link_relocate(reloc_howto_type *howto, ++ bfd *input_bfd, ++ asection *input_section, ++ bfd_byte *contents, ++ Elf_Internal_Rela *rel, ++ bfd_vma value) ++{ ++ bfd_vma field; ++ bfd_vma relocation; ++ bfd_reloc_status_type status; ++ bfd_byte *p = contents + rel->r_offset; ++ unsigned long x; ++ ++ pr_debug(" (6b) final link relocate\n"); ++ ++ /* Sanity check the address */ ++ if (rel->r_offset > input_section->size) ++ { ++ (*_bfd_error_handler) ++ ("%B: %A+0x%lx: offset out of range (section size: 0x%lx)", ++ input_bfd, input_section, rel->r_offset, input_section->size); ++ return bfd_reloc_outofrange; ++ } ++ ++ relocation = value + rel->r_addend; ++ ++ if (howto->pc_relative) ++ { ++ bfd_vma addr; ++ ++ addr = input_section->output_section->vma ++ + input_section->output_offset + rel->r_offset; ++ addr &= ~0UL << howto->rightshift; ++ relocation -= addr; ++ } ++ ++ switch (ELF32_R_TYPE(rel->r_info)) ++ { ++ case R_AVR32_16N_PCREL: ++ /* sub reg, pc, . - (sym + addend) */ ++ relocation = -relocation; ++ break; ++ } ++ ++ status = avr32_check_reloc_value(input_section, rel, relocation, howto); ++ ++ relocation >>= howto->rightshift; ++ if (howto->bitsize == 21) ++ field = (relocation & 0xffff) ++ | ((relocation & 0x10000) << 4) ++ | ((relocation & 0x1e0000) << 8); ++ else if (howto->bitsize == 12) ++ field = (relocation & 0xff) | ((relocation & 0xf00) << 4); ++ else if (howto->bitsize == 10) ++ field = ((relocation & 0xff) << 4) ++ | ((relocation & 0x300) >> 8); ++ else ++ field = relocation << howto->bitpos; ++ ++ switch (howto->size) ++ { ++ case 0: ++ x = bfd_get_8 (input_bfd, p); ++ x &= ~howto->dst_mask; ++ x |= field & howto->dst_mask; ++ bfd_put_8 (input_bfd, (bfd_vma) x, p); ++ break; ++ case 1: ++ x = bfd_get_16 (input_bfd, p); ++ x &= ~howto->dst_mask; ++ x |= field & howto->dst_mask; ++ bfd_put_16 (input_bfd, (bfd_vma) x, p); ++ break; ++ case 2: ++ x = bfd_get_32 (input_bfd, p); ++ x &= ~howto->dst_mask; ++ x |= field & howto->dst_mask; ++ bfd_put_32 (input_bfd, (bfd_vma) x, p); ++ break; ++ default: ++ abort(); ++ } ++ ++ return status; ++} ++ ++/* (6) Apply relocations to the normal (non-dynamic) sections */ ++ ++static bfd_boolean ++avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, ++ bfd *input_bfd, asection *input_section, ++ bfd_byte *contents, Elf_Internal_Rela *relocs, ++ Elf_Internal_Sym *local_syms, ++ asection **local_sections) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Rela *rel, *relend; ++ struct elf_link_hash_entry **sym_hashes; ++ struct got_entry **local_got_ents; ++ asection *sgot; ++ asection *srelgot; ++ ++ pr_debug("(6) relocate section %s:<%s> (size 0x%lx)\n", ++ input_bfd->filename, input_section->name, input_section->size); ++ ++ /* If we're doing a partial link, we don't have to do anything since ++ we're using RELA relocations */ ++ if (info->relocatable) ++ return TRUE; ++ ++ htab = avr32_elf_hash_table(info); ++ symtab_hdr = &elf_tdata(input_bfd)->symtab_hdr; ++ sym_hashes = elf_sym_hashes(input_bfd); ++ local_got_ents = elf_local_got_ents(input_bfd); ++ sgot = htab->sgot; ++ srelgot = htab->srelgot; ++ ++ relend = relocs + input_section->reloc_count; ++ for (rel = relocs; rel < relend; rel++) ++ { ++ unsigned long r_type, r_symndx; ++ reloc_howto_type *howto; ++ Elf_Internal_Sym *sym = NULL; ++ struct elf_link_hash_entry *h = NULL; ++ asection *sec = NULL; ++ bfd_vma value; ++ bfd_vma offset; ++ bfd_reloc_status_type status; ++ ++ r_type = ELF32_R_TYPE(rel->r_info); ++ r_symndx = ELF32_R_SYM(rel->r_info); ++ ++ if (r_type == R_AVR32_NONE ++ || r_type == R_AVR32_ALIGN ++ || r_type == R_AVR32_DIFF32 ++ || r_type == R_AVR32_DIFF16 ++ || r_type == R_AVR32_DIFF8) ++ continue; ++ ++ /* Sanity check */ ++ if (r_type > R_AVR32_max) ++ { ++ bfd_set_error(bfd_error_bad_value); ++ return FALSE; ++ } ++ ++ howto = &elf_avr32_howto_table[r_type]; ++ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ sym = local_syms + r_symndx; ++ sec = local_sections[r_symndx]; ++ ++ pr_debug(" (6a) processing %s against local symbol %lu\n", ++ howto->name, r_symndx); ++ ++ /* The following function changes rel->r_addend behind our back. */ ++ value = _bfd_elf_rela_local_sym(output_bfd, sym, &sec, rel); ++ pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); ++ } ++ else ++ { ++ if (sym_hashes == NULL) ++ return FALSE; ++ ++ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; ++ ++ pr_debug(" (6a) processing %s against symbol %s\n", ++ howto->name, h->root.root.string); ++ ++ if (h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak) ++ { ++ bfd_boolean dyn; ++ ++ dyn = htab->root.dynamic_sections_created; ++ sec = h->root.u.def.section; ++ ++ if (sec->output_section) ++ value = (h->root.u.def.value ++ + sec->output_section->vma ++ + sec->output_offset); ++ else ++ value = h->root.u.def.value; ++ } ++ else if (h->root.type == bfd_link_hash_undefweak) ++ value = 0; ++ else if (info->unresolved_syms_in_objects == RM_IGNORE ++ && ELF_ST_VISIBILITY(h->other) == STV_DEFAULT) ++ value = 0; ++ else ++ { ++ bfd_boolean err; ++ err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR ++ || ELF_ST_VISIBILITY(h->other) != STV_DEFAULT); ++ if (!info->callbacks->undefined_symbol ++ (info, h->root.root.string, input_bfd, ++ input_section, rel->r_offset, err)) ++ return FALSE; ++ value = 0; ++ } ++ ++ pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); ++ } ++ ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ BFD_ASSERT(sgot != NULL); ++ ++ if (h != NULL) ++ { ++ BFD_ASSERT(h->got.glist->refcount > 0); ++ offset = h->got.glist->offset; ++ ++ BFD_ASSERT(offset < sgot->size); ++ if (!elf_hash_table(info)->dynamic_sections_created ++ || (h->def_regular ++ && (!info->shared ++ || info->symbolic ++ || h->dynindx == -1))) ++ { ++ /* This is actually a static link, or it is a ++ -Bsymbolic link and the symbol is defined ++ locally, or the symbol was forced to be local. */ ++ bfd_put_32(output_bfd, value, sgot->contents + offset); ++ } ++ } ++ else ++ { ++ BFD_ASSERT(local_got_ents && ++ local_got_ents[r_symndx]->refcount > 0); ++ offset = local_got_ents[r_symndx]->offset; ++ ++ /* Local GOT entries don't have relocs. If this is a ++ shared library, the dynamic linker will add the load ++ address to the initial value at startup. */ ++ BFD_ASSERT(offset < sgot->size); ++ pr_debug("Initializing GOT entry at offset %lu: 0x%lx\n", ++ offset, value); ++ bfd_put_32 (output_bfd, value, sgot->contents + offset); ++ } ++ ++ value = sgot->output_offset + offset; ++ pr_debug("GOT reference: New value %lx\n", value); ++ break; ++ ++ case R_AVR32_GOTPC: ++ /* This relocation type is for constant pool entries used in ++ the calculation "Rd = PC - (PC - GOT)", where the ++ constant pool supplies the constant (PC - GOT) ++ offset. The symbol value + addend indicates where the ++ value of PC is taken. */ ++ value -= sgot->output_section->vma; ++ break; ++ ++ case R_AVR32_32_PCREL: ++ /* We must adjust r_offset to account for discarded data in ++ the .eh_frame section. This is probably not the right ++ way to do this, since AFAICS all other architectures do ++ it some other way. I just can't figure out how... */ ++ { ++ bfd_vma r_offset; ++ ++ r_offset = _bfd_elf_section_offset(output_bfd, info, ++ input_section, ++ rel->r_offset); ++ if (r_offset == (bfd_vma)-1 ++ || r_offset == (bfd_vma)-2) ++ continue; ++ rel->r_offset = r_offset; ++ } ++ break; ++ ++ case R_AVR32_32: ++ /* We need to emit a run-time relocation in the following cases: ++ - we're creating a shared library ++ - the symbol is not defined in any regular objects ++ ++ Of course, sections that aren't going to be part of the ++ run-time image will not get any relocs, and undefined ++ symbols won't have any either (only weak undefined ++ symbols should get this far). */ ++ if ((info->shared ++ || (elf_hash_table(info)->dynamic_sections_created ++ && h != NULL ++ && h->def_dynamic ++ && !h->def_regular)) ++ && r_symndx != 0 ++ && (input_section->flags & SEC_ALLOC)) ++ { ++ Elf_Internal_Rela outrel; ++ bfd_byte *loc; ++ bfd_boolean skip, relocate; ++ struct elf_avr32_link_hash_entry *avrh; ++ ++ pr_debug("Going to generate dynamic reloc...\n"); ++ ++ skip = FALSE; ++ relocate = FALSE; ++ ++ outrel.r_offset = _bfd_elf_section_offset(output_bfd, info, ++ input_section, ++ rel->r_offset); ++ if (outrel.r_offset == (bfd_vma)-1) ++ skip = TRUE; ++ else if (outrel.r_offset == (bfd_vma)-2) ++ skip = TRUE, relocate = TRUE; ++ ++ outrel.r_offset += (input_section->output_section->vma ++ + input_section->output_offset); ++ ++ pr_debug(" ... offset %lx, dynindx %ld\n", ++ outrel.r_offset, h ? h->dynindx : -1); ++ ++ if (skip) ++ memset(&outrel, 0, sizeof(outrel)); ++ else ++ { ++ avrh = (struct elf_avr32_link_hash_entry *)h; ++ /* h->dynindx may be -1 if this symbol was marked to ++ become local. */ ++ if (h == NULL ++ || ((info->symbolic || h->dynindx == -1) ++ && h->def_regular)) ++ { ++ relocate = TRUE; ++ outrel.r_info = ELF32_R_INFO(0, R_AVR32_RELATIVE); ++ outrel.r_addend = value + rel->r_addend; ++ pr_debug(" ... R_AVR32_RELATIVE\n"); ++ } ++ else ++ { ++ BFD_ASSERT(h->dynindx != -1); ++ relocate = TRUE; ++ outrel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); ++ outrel.r_addend = rel->r_addend; ++ pr_debug(" ... R_AVR32_GLOB_DAT\n"); ++ } ++ } ++ ++ pr_debug("srelgot reloc_count: %d, size %lu\n", ++ srelgot->reloc_count, srelgot->size); ++ ++ loc = srelgot->contents; ++ loc += srelgot->reloc_count++ * sizeof(Elf32_External_Rela); ++ bfd_elf32_swap_reloca_out(output_bfd, &outrel, loc); ++ ++ BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) ++ <= srelgot->size); ++ ++ if (!relocate) ++ continue; ++ } ++ break; ++ } ++ ++ status = avr32_final_link_relocate(howto, input_bfd, input_section, ++ contents, rel, value); ++ ++ switch (status) ++ { ++ case bfd_reloc_ok: ++ break; ++ ++ case bfd_reloc_overflow: ++ { ++ const char *name; ++ ++ if (h != NULL) ++ name = h->root.root.string; ++ else ++ { ++ name = bfd_elf_string_from_elf_section(input_bfd, ++ symtab_hdr->sh_link, ++ sym->st_name); ++ if (name == NULL) ++ return FALSE; ++ if (*name == '\0') ++ name = bfd_section_name(input_bfd, sec); ++ } ++ if (!((*info->callbacks->reloc_overflow) ++ (info, (h ? &h->root : NULL), name, howto->name, ++ rel->r_addend, input_bfd, input_section, rel->r_offset))) ++ return FALSE; ++ } ++ break; ++ ++ case bfd_reloc_outofrange: ++ default: ++ abort(); ++ } ++ } ++ ++ return TRUE; ++} ++ ++ ++/* Additional processing of dynamic sections after relocation */ ++ ++static bfd_boolean ++avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym); ++static bfd_boolean ++avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info); ++ ++ ++/* (7) Initialize the contents of a dynamic symbol and/or emit ++ relocations for it */ ++ ++static bfd_boolean ++avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct got_entry *got; ++ ++ pr_debug("(7) finish dynamic symbol: %s\n", h->root.root.string); ++ ++ htab = avr32_elf_hash_table(info); ++ got = h->got.glist; ++ ++ if (got && got->refcount > 0) ++ { ++ asection *sgot; ++ asection *srelgot; ++ Elf_Internal_Rela rel; ++ bfd_byte *loc; ++ ++ /* This symbol has an entry in the GOT. Set it up. */ ++ sgot = htab->sgot; ++ srelgot = htab->srelgot; ++ BFD_ASSERT(sgot && srelgot); ++ ++ rel.r_offset = (sgot->output_section->vma ++ + sgot->output_offset ++ + got->offset); ++ ++ /* If this is a static link, or it is a -Bsymbolic link and the ++ symbol is defined locally or was forced to be local because ++ of a version file, we just want to emit a RELATIVE reloc. The ++ entry in the global offset table will already have been ++ initialized in the relocate_section function. */ ++ if ((info->shared ++ && !info->symbolic ++ && h->dynindx != -1) ++ || (htab->root.dynamic_sections_created ++ && h->def_dynamic ++ && !h->def_regular)) ++ { ++ bfd_put_32(output_bfd, 0, sgot->contents + got->offset); ++ rel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); ++ rel.r_addend = 0; ++ ++ pr_debug("GOT reloc R_AVR32_GLOB_DAT, dynindx: %ld\n", h->dynindx); ++ pr_debug(" srelgot reloc_count: %d, size: %lu\n", ++ srelgot->reloc_count, srelgot->size); ++ ++ loc = (srelgot->contents ++ + srelgot->reloc_count++ * sizeof(Elf32_External_Rela)); ++ bfd_elf32_swap_reloca_out(output_bfd, &rel, loc); ++ ++ BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) ++ <= srelgot->size); ++ } ++ } ++ ++ /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute */ ++ if (strcmp(h->root.root.string, "_DYNAMIC") == 0 ++ || strcmp(h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) ++ sym->st_shndx = SHN_ABS; ++ ++ return TRUE; ++} ++ ++/* (8) Do any remaining initialization of the dynamic sections */ ++ ++static bfd_boolean ++avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ asection *sgot, *sdyn; ++ ++ pr_debug("(8) finish dynamic sections\n"); ++ ++ htab = avr32_elf_hash_table(info); ++ sgot = htab->sgot; ++ sdyn = bfd_get_section_by_name(htab->root.dynobj, ".dynamic"); ++ ++ if (htab->root.dynamic_sections_created) ++ { ++ Elf32_External_Dyn *dyncon, *dynconend; ++ ++ BFD_ASSERT(sdyn && sgot && sgot->size >= AVR32_GOT_HEADER_SIZE); ++ ++ dyncon = (Elf32_External_Dyn *)sdyn->contents; ++ dynconend = (Elf32_External_Dyn *)(sdyn->contents + sdyn->size); ++ for (; dyncon < dynconend; dyncon++) ++ { ++ Elf_Internal_Dyn dyn; ++ asection *s; ++ ++ bfd_elf32_swap_dyn_in(htab->root.dynobj, dyncon, &dyn); ++ ++ switch (dyn.d_tag) ++ { ++ default: ++ break; ++ ++ case DT_PLTGOT: ++ s = sgot->output_section; ++ BFD_ASSERT(s != NULL); ++ dyn.d_un.d_ptr = s->vma; ++ bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); ++ break; ++ ++ case DT_AVR32_GOTSZ: ++ s = sgot->output_section; ++ BFD_ASSERT(s != NULL); ++ dyn.d_un.d_val = s->size; ++ bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); ++ break; ++ } ++ } ++ ++ /* Fill in the first two entries in the global offset table */ ++ bfd_put_32(output_bfd, ++ sdyn->output_section->vma + sdyn->output_offset, ++ sgot->contents); ++ ++ /* The runtime linker will fill this one in with the address of ++ the run-time link map */ ++ bfd_put_32(output_bfd, 0, sgot->contents + 4); ++ } ++ ++ if (sgot) ++ elf_section_data(sgot->output_section)->this_hdr.sh_entsize = 4; ++ ++ return TRUE; ++} ++ ++ ++/* AVR32-specific private ELF data */ ++ ++static bfd_boolean ++avr32_elf_set_private_flags(bfd *abfd, flagword flags); ++static bfd_boolean ++avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd); ++static bfd_boolean ++avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd); ++static bfd_boolean ++avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr); ++ ++static bfd_boolean ++avr32_elf_set_private_flags(bfd *abfd, flagword flags) ++{ ++ elf_elfheader(abfd)->e_flags = flags; ++ elf_flags_init(abfd) = TRUE; ++ ++ return TRUE; ++} ++ ++/* Copy backend specific data from one object module to another. */ ++ ++static bfd_boolean ++avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd) ++{ ++ elf_elfheader(obfd)->e_flags = elf_elfheader(ibfd)->e_flags; ++ return TRUE; ++} ++ ++/* Merge backend specific data from an object file to the output ++ object file when linking. */ ++ ++static bfd_boolean ++avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd) ++{ ++ flagword out_flags, in_flags; ++ ++ pr_debug("(0) merge_private_bfd_data: %s -> %s\n", ++ ibfd->filename, obfd->filename); ++ ++ in_flags = elf_elfheader(ibfd)->e_flags; ++ out_flags = elf_elfheader(obfd)->e_flags; ++ ++ if (elf_flags_init(obfd)) ++ { ++ /* If one of the inputs are non-PIC, the output must be ++ considered non-PIC. The same applies to linkrelax. */ ++ if (!(in_flags & EF_AVR32_PIC)) ++ out_flags &= ~EF_AVR32_PIC; ++ if (!(in_flags & EF_AVR32_LINKRELAX)) ++ out_flags &= ~EF_AVR32_LINKRELAX; ++ } ++ else ++ { ++ elf_flags_init(obfd) = TRUE; ++ out_flags = in_flags; ++ } ++ ++ elf_elfheader(obfd)->e_flags = out_flags; ++ ++ return TRUE; ++} ++ ++static bfd_boolean ++avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr) ++{ ++ FILE *file = (FILE *)ptr; ++ unsigned long flags; ++ ++ BFD_ASSERT(abfd != NULL && ptr != NULL); ++ ++ _bfd_elf_print_private_bfd_data(abfd, ptr); ++ ++ flags = elf_elfheader(abfd)->e_flags; ++ ++ fprintf(file, _("private flags = %lx:"), elf_elfheader(abfd)->e_flags); ++ ++ if (flags & EF_AVR32_PIC) ++ fprintf(file, " [PIC]"); ++ if (flags & EF_AVR32_LINKRELAX) ++ fprintf(file, " [linker relaxable]"); ++ ++ flags &= ~(EF_AVR32_PIC | EF_AVR32_LINKRELAX); ++ ++ if (flags) ++ fprintf(file, _("")); ++ ++ fputc('\n', file); ++ ++ return TRUE; ++} ++ ++/* Set avr32-specific linker options. */ ++void bfd_elf32_avr32_set_options(struct bfd_link_info *info, ++ int direct_data_refs) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ ++ htab = avr32_elf_hash_table (info); ++ htab->direct_data_refs = !!direct_data_refs; ++} ++ ++ ++ ++/* Understanding core dumps */ ++ ++static bfd_boolean ++avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note); ++static bfd_boolean ++avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note); ++ ++static bfd_boolean ++avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note) ++{ ++ /* Linux/AVR32B elf_prstatus */ ++ if (note->descsz != 148) ++ return FALSE; ++ ++ /* pr_cursig */ ++ elf_tdata(abfd)->core_signal = bfd_get_16(abfd, note->descdata + 12); ++ ++ /* pr_pid */ ++ elf_tdata(abfd)->core_pid = bfd_get_32(abfd, note->descdata + 24); ++ ++ /* Make a ".reg/999" section for pr_reg. The size is for 16 ++ general-purpose registers, SR and r12_orig (18 * 4 = 72). */ ++ return _bfd_elfcore_make_pseudosection(abfd, ".reg", 72, ++ note->descpos + 72); ++} ++ ++static bfd_boolean ++avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note) ++{ ++ /* Linux/AVR32B elf_prpsinfo */ ++ if (note->descsz != 128) ++ return FALSE; ++ ++ elf_tdata(abfd)->core_program ++ = _bfd_elfcore_strndup(abfd, note->descdata + 32, 16); ++ elf_tdata(abfd)->core_command ++ = _bfd_elfcore_strndup(abfd, note->descdata + 48, 80); ++ ++ /* Note that for some reason, a spurious space is tacked ++ onto the end of the args in some (at least one anyway) ++ implementations, so strip it off if it exists. */ ++ ++ { ++ char *command = elf_tdata (abfd)->core_command; ++ int n = strlen (command); ++ ++ if (0 < n && command[n - 1] == ' ') ++ command[n - 1] = '\0'; ++ } ++ ++ return TRUE; ++} ++ ++ ++#define ELF_ARCH bfd_arch_avr32 ++#define ELF_MACHINE_CODE EM_AVR32 ++#define ELF_MAXPAGESIZE 0x1000 ++ ++#define TARGET_BIG_SYM bfd_elf32_avr32_vec ++#define TARGET_BIG_NAME "elf32-avr32" ++ ++#define elf_backend_grok_prstatus avr32_elf_grok_prstatus ++#define elf_backend_grok_psinfo avr32_elf_grok_psinfo ++ ++/* Only RELA relocations are used */ ++#define elf_backend_may_use_rel_p 0 ++#define elf_backend_may_use_rela_p 1 ++#define elf_backend_default_use_rela_p 1 ++#define elf_backend_rela_normal 1 ++#define elf_info_to_howto_rel NULL ++#define elf_info_to_howto avr32_info_to_howto ++ ++#define bfd_elf32_bfd_copy_private_bfd_data avr32_elf_copy_private_bfd_data ++#define bfd_elf32_bfd_merge_private_bfd_data avr32_elf_merge_private_bfd_data ++#define bfd_elf32_bfd_set_private_flags avr32_elf_set_private_flags ++#define bfd_elf32_bfd_print_private_bfd_data avr32_elf_print_private_bfd_data ++#define bfd_elf32_new_section_hook avr32_elf_new_section_hook ++ ++#define elf_backend_gc_mark_hook avr32_elf_gc_mark_hook ++#define elf_backend_gc_sweep_hook avr32_elf_gc_sweep_hook ++#define elf_backend_relocate_section avr32_elf_relocate_section ++#define elf_backend_copy_indirect_symbol avr32_elf_copy_indirect_symbol ++#define elf_backend_create_dynamic_sections avr32_elf_create_dynamic_sections ++#define bfd_elf32_bfd_link_hash_table_create avr32_elf_link_hash_table_create ++#define elf_backend_adjust_dynamic_symbol avr32_elf_adjust_dynamic_symbol ++#define elf_backend_size_dynamic_sections avr32_elf_size_dynamic_sections ++#define elf_backend_finish_dynamic_symbol avr32_elf_finish_dynamic_symbol ++#define elf_backend_finish_dynamic_sections avr32_elf_finish_dynamic_sections ++ ++#define bfd_elf32_bfd_relax_section avr32_elf_relax_section ++ ++/* Find out which symbols need an entry in .got. */ ++#define elf_backend_check_relocs avr32_check_relocs ++#define elf_backend_can_refcount 1 ++#define elf_backend_can_gc_sections 1 ++#define elf_backend_plt_readonly 1 ++#define elf_backend_plt_not_loaded 1 ++#define elf_backend_want_plt_sym 0 ++#define elf_backend_plt_alignment 2 ++#define elf_backend_want_dynbss 0 ++#define elf_backend_want_got_plt 0 ++#define elf_backend_want_got_sym 1 ++#define elf_backend_got_header_size AVR32_GOT_HEADER_SIZE ++ ++#include "elf32-target.h" +diff -Nrup binutils-2.17/bfd/elf32-avr32.c.orig binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.c.orig +--- binutils-2.17/bfd/elf32-avr32.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.c.orig 2007-05-31 17:03:36.000000000 +0200 +@@ -0,0 +1,3880 @@ ++/* AVR32-specific support for 32-bit ELF. ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of BFD, the Binary File Descriptor library. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#include "bfd.h" ++#include "sysdep.h" ++#include "bfdlink.h" ++#include "libbfd.h" ++#include "elf-bfd.h" ++#include "elf/avr32.h" ++ ++#define xDEBUG ++#define xRELAX_DEBUG ++ ++#ifdef DEBUG ++# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) ++#else ++# define pr_debug(fmt, args...) do { } while (0) ++#endif ++ ++#ifdef RELAX_DEBUG ++# define RDBG(fmt, args...) fprintf(stderr, fmt, ##args) ++#else ++# define RDBG(fmt, args...) do { } while (0) ++#endif ++ ++/* When things go wrong, we want it to blow up, damnit! */ ++#undef BFD_ASSERT ++#undef abort ++#define BFD_ASSERT(expr) \ ++ do \ ++ { \ ++ if (!(expr)) \ ++ { \ ++ bfd_assert(__FILE__, __LINE__); \ ++ abort(); \ ++ } \ ++ } \ ++ while (0) ++ ++/* The name of the dynamic interpreter. This is put in the .interp section. */ ++#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1" ++ ++#define AVR32_GOT_HEADER_SIZE 8 ++#define AVR32_FUNCTION_STUB_SIZE 8 ++ ++#define ELF_R_INFO(x, y) ELF32_R_INFO(x, y) ++#define ELF_R_TYPE(x) ELF32_R_TYPE(x) ++#define ELF_R_SYM(x) ELF32_R_SYM(x) ++ ++#define NOP_OPCODE 0xd703 ++ ++ ++/* Mapping between BFD relocations and ELF relocations */ ++ ++static reloc_howto_type * ++bfd_elf32_bfd_reloc_type_lookup(bfd *abfd, bfd_reloc_code_real_type code); ++static void ++avr32_info_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst); ++ ++/* Generic HOWTO */ ++#define GENH(name, align, size, bitsize, pcrel, bitpos, complain, mask) \ ++ HOWTO(name, align, size, bitsize, pcrel, bitpos, \ ++ complain_overflow_##complain, bfd_elf_generic_reloc, #name, \ ++ FALSE, 0, mask, pcrel) ++ ++static reloc_howto_type elf_avr32_howto_table[] = { ++ /* NAME ALN SZ BSZ PCREL BP COMPLAIN MASK */ ++ GENH(R_AVR32_NONE, 0, 0, 0, FALSE, 0, dont, 0x00000000), ++ ++ GENH(R_AVR32_32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_16, 0, 1, 16, FALSE, 0, bitfield, 0x0000ffff), ++ GENH(R_AVR32_8, 0, 0, 8, FALSE, 0, bitfield, 0x000000ff), ++ GENH(R_AVR32_32_PCREL, 0, 2, 32, TRUE, 0, signed, 0xffffffff), ++ GENH(R_AVR32_16_PCREL, 0, 1, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_8_PCREL, 0, 0, 8, TRUE, 0, signed, 0x000000ff), ++ ++ /* Difference between two symbol (sym2 - sym1). The reloc encodes ++ the value of sym1. The field contains the difference before any ++ relaxing is done. */ ++ GENH(R_AVR32_DIFF32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_DIFF16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_DIFF8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), ++ ++ GENH(R_AVR32_GOT32, 0, 2, 32, FALSE, 0, signed, 0xffffffff), ++ GENH(R_AVR32_GOT16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_GOT8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), ++ ++ GENH(R_AVR32_21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_16U, 0, 2, 16, FALSE, 0, unsigned, 0x0000ffff), ++ GENH(R_AVR32_16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_8S, 0, 1, 8, FALSE, 4, signed, 0x00000ff0), ++ GENH(R_AVR32_8S_EXT, 0, 2, 8, FALSE, 0, signed, 0x000000ff), ++ ++ GENH(R_AVR32_22H_PCREL, 1, 2, 21, TRUE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_18W_PCREL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_16B_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_16N_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_14UW_PCREL, 2, 2, 12, TRUE, 0, unsigned, 0x0000f0ff), ++ GENH(R_AVR32_11H_PCREL, 1, 1, 10, TRUE, 4, signed, 0x00000ff3), ++ GENH(R_AVR32_10UW_PCREL, 2, 2, 8, TRUE, 0, unsigned, 0x000000ff), ++ GENH(R_AVR32_9H_PCREL, 1, 1, 8, TRUE, 4, signed, 0x00000ff0), ++ GENH(R_AVR32_9UW_PCREL, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), ++ ++ GENH(R_AVR32_HI16, 16, 2, 16, FALSE, 0, dont, 0x0000ffff), ++ GENH(R_AVR32_LO16, 0, 2, 16, FALSE, 0, dont, 0x0000ffff), ++ ++ GENH(R_AVR32_GOTPC, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_GOTCALL, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_LDA_GOT, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_GOT21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_GOT18SW, 2, 2, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_GOT16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_GOT7UW, 2, 1, 5, FALSE, 4, unsigned, 0x000001f0), ++ ++ GENH(R_AVR32_32_CPENT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_CPCALL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_16_CP, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_9W_CP, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), ++ ++ GENH(R_AVR32_RELATIVE, 0, 2, 32, FALSE, 0, signed, 0xffffffff), ++ GENH(R_AVR32_GLOB_DAT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_JMP_SLOT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ ++ GENH(R_AVR32_ALIGN, 0, 1, 0, FALSE, 0, unsigned, 0x00000000), ++}; ++ ++struct elf_reloc_map ++{ ++ bfd_reloc_code_real_type bfd_reloc_val; ++ unsigned char elf_reloc_val; ++}; ++ ++static const struct elf_reloc_map avr32_reloc_map[] = ++{ ++ { BFD_RELOC_NONE, R_AVR32_NONE }, ++ ++ { BFD_RELOC_32, R_AVR32_32 }, ++ { BFD_RELOC_16, R_AVR32_16 }, ++ { BFD_RELOC_8, R_AVR32_8 }, ++ { BFD_RELOC_32_PCREL, R_AVR32_32_PCREL }, ++ { BFD_RELOC_16_PCREL, R_AVR32_16_PCREL }, ++ { BFD_RELOC_8_PCREL, R_AVR32_8_PCREL }, ++ { BFD_RELOC_AVR32_DIFF32, R_AVR32_DIFF32 }, ++ { BFD_RELOC_AVR32_DIFF16, R_AVR32_DIFF16 }, ++ { BFD_RELOC_AVR32_DIFF8, R_AVR32_DIFF8 }, ++ { BFD_RELOC_AVR32_GOT32, R_AVR32_GOT32 }, ++ { BFD_RELOC_AVR32_GOT16, R_AVR32_GOT16 }, ++ { BFD_RELOC_AVR32_GOT8, R_AVR32_GOT8 }, ++ ++ { BFD_RELOC_AVR32_21S, R_AVR32_21S }, ++ { BFD_RELOC_AVR32_16U, R_AVR32_16U }, ++ { BFD_RELOC_AVR32_16S, R_AVR32_16S }, ++ { BFD_RELOC_AVR32_SUB5, R_AVR32_16S }, ++ { BFD_RELOC_AVR32_8S_EXT, R_AVR32_8S_EXT }, ++ { BFD_RELOC_AVR32_8S, R_AVR32_8S }, ++ ++ { BFD_RELOC_AVR32_22H_PCREL, R_AVR32_22H_PCREL }, ++ { BFD_RELOC_AVR32_18W_PCREL, R_AVR32_18W_PCREL }, ++ { BFD_RELOC_AVR32_16B_PCREL, R_AVR32_16B_PCREL }, ++ { BFD_RELOC_AVR32_16N_PCREL, R_AVR32_16N_PCREL }, ++ { BFD_RELOC_AVR32_11H_PCREL, R_AVR32_11H_PCREL }, ++ { BFD_RELOC_AVR32_10UW_PCREL, R_AVR32_10UW_PCREL }, ++ { BFD_RELOC_AVR32_9H_PCREL, R_AVR32_9H_PCREL }, ++ { BFD_RELOC_AVR32_9UW_PCREL, R_AVR32_9UW_PCREL }, ++ ++ { BFD_RELOC_HI16, R_AVR32_HI16 }, ++ { BFD_RELOC_LO16, R_AVR32_LO16 }, ++ ++ { BFD_RELOC_AVR32_GOTPC, R_AVR32_GOTPC }, ++ { BFD_RELOC_AVR32_GOTCALL, R_AVR32_GOTCALL }, ++ { BFD_RELOC_AVR32_LDA_GOT, R_AVR32_LDA_GOT }, ++ { BFD_RELOC_AVR32_GOT21S, R_AVR32_GOT21S }, ++ { BFD_RELOC_AVR32_GOT18SW, R_AVR32_GOT18SW }, ++ { BFD_RELOC_AVR32_GOT16S, R_AVR32_GOT16S }, ++ /* GOT7UW should never be generated by the assembler */ ++ ++ { BFD_RELOC_AVR32_32_CPENT, R_AVR32_32_CPENT }, ++ { BFD_RELOC_AVR32_CPCALL, R_AVR32_CPCALL }, ++ { BFD_RELOC_AVR32_16_CP, R_AVR32_16_CP }, ++ { BFD_RELOC_AVR32_9W_CP, R_AVR32_9W_CP }, ++ ++ { BFD_RELOC_AVR32_ALIGN, R_AVR32_ALIGN }, ++}; ++ ++static reloc_howto_type * ++bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, ++ bfd_reloc_code_real_type code) ++{ ++ unsigned int i; ++ ++ for (i = 0; i < sizeof(avr32_reloc_map) / sizeof(struct elf_reloc_map); i++) ++ { ++ if (avr32_reloc_map[i].bfd_reloc_val == code) ++ return &elf_avr32_howto_table[avr32_reloc_map[i].elf_reloc_val]; ++ } ++ ++ return NULL; ++} ++ ++static void ++avr32_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, ++ arelent *cache_ptr, ++ Elf_Internal_Rela *dst) ++{ ++ unsigned int r_type; ++ ++ r_type = ELF32_R_TYPE (dst->r_info); ++ BFD_ASSERT (r_type < (unsigned int) R_AVR32_max); ++ cache_ptr->howto = &elf_avr32_howto_table[r_type]; ++} ++ ++ ++/* AVR32 ELF linker hash table and associated hash entries. */ ++ ++static struct bfd_hash_entry * ++avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, ++ struct bfd_hash_table *table, ++ const char *string); ++static void ++avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *dir, ++ struct elf_link_hash_entry *ind); ++static struct bfd_link_hash_table * ++avr32_elf_link_hash_table_create(bfd *abfd); ++ ++/* ++ Try to limit memory usage to something reasonable when sorting the ++ GOT. If we ever get more than this many references to the same ++ symbol, we may need to do something special. ++*/ ++#define MAX_NR_GOT_HOLES 8192 ++ ++/* ++ AVR32 GOT entry. We need to keep track of refcounts and offsets ++ simultaneously, since we need the offsets during relaxation, and we ++ also want to be able to drop GOT entries during relaxation. In ++ addition to this, we want to keep the list of GOT entries sorted so ++ that we can keep the most-used entries at the lowest offsets. ++*/ ++struct got_entry ++{ ++ struct got_entry *next; ++ struct got_entry **pprev; ++ int refcount; ++ bfd_signed_vma offset; ++}; ++ ++struct elf_avr32_link_hash_entry ++{ ++ struct elf_link_hash_entry root; ++ ++ /* Number of runtime relocations against this symbol. */ ++ unsigned int possibly_dynamic_relocs; ++ ++ /* If there are anything but R_AVR32_GOT18 relocations against this ++ symbol, it means that someone may be taking the address of the ++ function, and we should therefore not create a stub. */ ++ bfd_boolean no_fn_stub; ++ ++ /* If there is a R_AVR32_32 relocation in a read-only section ++ against this symbol, we could be in trouble. If we're linking a ++ shared library or this symbol is defined in one, it means we must ++ emit a run-time reloc for it and that's not allowed in read-only ++ sections. */ ++ asection *readonly_reloc_sec; ++ bfd_vma readonly_reloc_offset; ++ ++ /* Record which frag (if any) contains the symbol. This is used ++ during relaxation in order to avoid having to update all symbols ++ whenever we move something. For local symbols, this information ++ is in the local_sym_frag member of struct elf_obj_tdata. */ ++ struct fragment *sym_frag; ++}; ++#define avr32_elf_hash_entry(ent) ((struct elf_avr32_link_hash_entry *)(ent)) ++ ++struct elf_avr32_link_hash_table ++{ ++ struct elf_link_hash_table root; ++ ++ /* Shortcuts to get to dynamic linker sections. */ ++ asection *sgot; ++ asection *srelgot; ++ asection *sstub; ++ ++ /* We use a variation of Pigeonhole Sort to sort the GOT. After the ++ initial refcounts have been determined, we initialize ++ nr_got_holes to the highest refcount ever seen and allocate an ++ array of nr_got_holes entries for got_hole. Each GOT entry is ++ then stored in this array at the index given by its refcount. ++ ++ When a GOT entry has its refcount decremented during relaxation, ++ it is moved to a lower index in the got_hole array. ++ */ ++ struct got_entry **got_hole; ++ int nr_got_holes; ++ ++ /* Dynamic relocations to local symbols. Only used when linking a ++ shared library and -Bsymbolic is not given. */ ++ unsigned int local_dynamic_relocs; ++ ++ bfd_boolean relocations_analyzed; ++ bfd_boolean symbols_adjusted; ++ bfd_boolean repeat_pass; ++ unsigned int relax_iteration; ++ unsigned int relax_pass; ++}; ++#define avr32_elf_hash_table(p) \ ++ ((struct elf_avr32_link_hash_table *)((p)->hash)) ++ ++static struct bfd_hash_entry * ++avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, ++ struct bfd_hash_table *table, ++ const char *string) ++{ ++ struct elf_avr32_link_hash_entry *ret = avr32_elf_hash_entry(entry); ++ ++ /* Allocate the structure if it hasn't already been allocated by a ++ subclass */ ++ if (ret == NULL) ++ ret = (struct elf_avr32_link_hash_entry *) ++ bfd_hash_allocate(table, sizeof(struct elf_avr32_link_hash_entry)); ++ ++ if (ret == NULL) ++ return NULL; ++ ++ memset(ret, 0, sizeof(struct elf_avr32_link_hash_entry)); ++ ++ /* Give the superclass a chance */ ++ ret = (struct elf_avr32_link_hash_entry *) ++ _bfd_elf_link_hash_newfunc((struct bfd_hash_entry *)ret, table, string); ++ ++ return (struct bfd_hash_entry *)ret; ++} ++ ++/* Copy data from an indirect symbol to its direct symbol, hiding the ++ old indirect symbol. Process additional relocation information. ++ Also called for weakdefs, in which case we just let ++ _bfd_elf_link_hash_copy_indirect copy the flags for us. */ ++ ++static void ++avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *dir, ++ struct elf_link_hash_entry *ind) ++{ ++ struct elf_avr32_link_hash_entry *edir, *eind; ++ ++ _bfd_elf_link_hash_copy_indirect (info, dir, ind); ++ ++ if (ind->root.type != bfd_link_hash_indirect) ++ return; ++ ++ edir = (struct elf_avr32_link_hash_entry *)dir; ++ eind = (struct elf_avr32_link_hash_entry *)ind; ++ ++ edir->possibly_dynamic_relocs += eind->possibly_dynamic_relocs; ++ edir->no_fn_stub = edir->no_fn_stub || eind->no_fn_stub; ++} ++ ++static struct bfd_link_hash_table * ++avr32_elf_link_hash_table_create(bfd *abfd) ++{ ++ struct elf_avr32_link_hash_table *ret; ++ ++ ret = bfd_zmalloc(sizeof(*ret)); ++ if (ret == NULL) ++ return NULL; ++ ++ if (! _bfd_elf_link_hash_table_init(&ret->root, abfd, ++ avr32_elf_link_hash_newfunc, ++ sizeof (struct elf_avr32_link_hash_entry))) ++ { ++ free(ret); ++ return NULL; ++ } ++ ++ /* Prevent the BFD core from creating bogus got_entry pointers */ ++ ret->root.init_got_refcount.glist = NULL; ++ ret->root.init_plt_refcount.glist = NULL; ++ ++ return &ret->root.root; ++} ++ ++ ++/* Initial analysis and creation of dynamic sections and symbols */ ++ ++static asection * ++create_dynamic_section(bfd *dynobj, const char *name, flagword flags, ++ unsigned int align_power); ++static struct elf_link_hash_entry * ++create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, ++ const char *name, asection *sec, ++ bfd_vma offset); ++static bfd_boolean ++avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info); ++static bfd_boolean ++avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info); ++static bfd_boolean ++avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, ++ const Elf_Internal_Rela *relocs); ++static bfd_boolean ++avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *h); ++ ++static asection * ++create_dynamic_section(bfd *dynobj, const char *name, flagword flags, ++ unsigned int align_power) ++{ ++ asection *sec; ++ ++ sec = bfd_make_section(dynobj, name); ++ if (!sec ++ || !bfd_set_section_flags(dynobj, sec, flags) ++ || !bfd_set_section_alignment(dynobj, sec, align_power)) ++ return NULL; ++ ++ return sec; ++} ++ ++static struct elf_link_hash_entry * ++create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, ++ const char *name, asection *sec, ++ bfd_vma offset) ++{ ++ struct bfd_link_hash_entry *bh = NULL; ++ struct elf_link_hash_entry *h; ++ const struct elf_backend_data *bed = get_elf_backend_data (dynobj); ++ ++ if (!(_bfd_generic_link_add_one_symbol ++ (info, dynobj, name, BSF_GLOBAL, sec, offset, NULL, FALSE, ++ bed->collect, &bh))) ++ return NULL; ++ ++ h = (struct elf_link_hash_entry *)bh; ++ h->def_regular = 1; ++ h->type = STT_OBJECT; ++ h->other = STV_HIDDEN; ++ ++ return h; ++} ++ ++static bfd_boolean ++avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ flagword flags; ++ const struct elf_backend_data *bed = get_elf_backend_data (dynobj); ++ ++ htab = avr32_elf_hash_table(info); ++ flags = bed->dynamic_sec_flags; ++ ++ if (htab->sgot) ++ return TRUE; ++ ++ htab->sgot = create_dynamic_section(dynobj, ".got", flags, 2); ++ if (!htab->srelgot) ++ htab->srelgot = create_dynamic_section(dynobj, ".rela.got", ++ flags | SEC_READONLY, 2); ++ ++ if (!htab->sgot || !htab->srelgot) ++ return FALSE; ++ ++ htab->root.hgot = create_dynamic_symbol(dynobj, info, "_GLOBAL_OFFSET_TABLE_", ++ htab->sgot, 0); ++ if (!htab->root.hgot) ++ return FALSE; ++ ++ /* Make room for the GOT header */ ++ htab->sgot->size += bed->got_header_size; ++ ++ return TRUE; ++} ++ ++/* (1) Create all dynamic (i.e. linker generated) sections that we may ++ need during the link */ ++ ++static bfd_boolean ++avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ flagword flags; ++ const struct elf_backend_data *bed = get_elf_backend_data (dynobj); ++ ++ pr_debug("(1) create dynamic sections\n"); ++ ++ htab = avr32_elf_hash_table(info); ++ flags = bed->dynamic_sec_flags; ++ ++ if (!avr32_elf_create_got_section (dynobj, info)) ++ return FALSE; ++ ++ if (!htab->sstub) ++ htab->sstub = create_dynamic_section(dynobj, ".stub", ++ flags | SEC_READONLY | SEC_CODE, 2); ++ ++ if (!htab->sstub) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++/* (2) Go through all the relocs and count any potential GOT- or ++ PLT-references to each symbol */ ++ ++static bfd_boolean ++avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, ++ const Elf_Internal_Rela *relocs) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ struct elf_avr32_link_hash_table *htab; ++ struct elf_link_hash_entry **sym_hashes; ++ const Elf_Internal_Rela *rel, *rel_end; ++ struct got_entry **local_got_ents; ++ struct got_entry *got; ++ const struct elf_backend_data *bed = get_elf_backend_data (abfd); ++ asection *sgot; ++ bfd *dynobj; ++ ++ pr_debug("(2) check relocs for %s:<%s> (size 0x%lx)\n", ++ abfd->filename, sec->name, sec->size); ++ ++ if (info->relocatable) ++ return TRUE; ++ ++ dynobj = elf_hash_table(info)->dynobj; ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ sym_hashes = elf_sym_hashes(abfd); ++ htab = avr32_elf_hash_table(info); ++ local_got_ents = elf_local_got_ents(abfd); ++ sgot = htab->sgot; ++ ++ rel_end = relocs + sec->reloc_count; ++ for (rel = relocs; rel < rel_end; rel++) ++ { ++ unsigned long r_symndx, r_type; ++ struct elf_avr32_link_hash_entry *h; ++ ++ r_symndx = ELF32_R_SYM(rel->r_info); ++ r_type = ELF32_R_TYPE(rel->r_info); ++ ++ /* Local symbols use local_got_ents, while others store the same ++ information in the hash entry */ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ pr_debug(" (2a) processing local symbol %lu\n", r_symndx); ++ h = NULL; ++ } ++ else ++ { ++ h = (struct elf_avr32_link_hash_entry *) ++ sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; ++ pr_debug(" (2a) processing symbol %s\n", h->root.root.root.string); ++ } ++ ++ /* Some relocs require special sections to be created. */ ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ if (rel->r_addend) ++ { ++ if (info->callbacks->reloc_dangerous ++ (info, _("Non-zero addend on GOT-relative relocation"), ++ abfd, sec, rel->r_offset) == FALSE) ++ return FALSE; ++ } ++ /* fall through */ ++ case R_AVR32_GOTPC: ++ if (dynobj == NULL) ++ elf_hash_table(info)->dynobj = dynobj = abfd; ++ if (sgot == NULL && !avr32_elf_create_got_section(dynobj, info)) ++ return FALSE; ++ break; ++ case R_AVR32_32: ++ /* We may need to create .rela.dyn later on. */ ++ if (dynobj == NULL ++ && (info->shared || h != NULL) ++ && (sec->flags & SEC_ALLOC)) ++ elf_hash_table(info)->dynobj = dynobj = abfd; ++ break; ++ } ++ ++ if (h != NULL && r_type != R_AVR32_GOT18SW) ++ h->no_fn_stub = TRUE; ++ ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ if (h != NULL) ++ { ++ got = h->root.got.glist; ++ if (!got) ++ { ++ got = bfd_zalloc(abfd, sizeof(struct got_entry)); ++ if (!got) ++ return FALSE; ++ h->root.got.glist = got; ++ } ++ } ++ else ++ { ++ if (!local_got_ents) ++ { ++ bfd_size_type size; ++ bfd_size_type i; ++ struct got_entry *tmp_entry; ++ ++ size = symtab_hdr->sh_info; ++ size *= sizeof(struct got_entry *) + sizeof(struct got_entry); ++ local_got_ents = bfd_zalloc(abfd, size); ++ if (!local_got_ents) ++ return FALSE; ++ ++ elf_local_got_ents(abfd) = local_got_ents; ++ ++ tmp_entry = (struct got_entry *)(local_got_ents ++ + symtab_hdr->sh_info); ++ for (i = 0; i < symtab_hdr->sh_info; i++) ++ local_got_ents[i] = &tmp_entry[i]; ++ } ++ ++ got = local_got_ents[r_symndx]; ++ } ++ ++ got->refcount++; ++ if (got->refcount > htab->nr_got_holes) ++ htab->nr_got_holes = got->refcount; ++ break; ++ ++ case R_AVR32_32: ++ if ((info->shared || h != NULL) ++ && (sec->flags & SEC_ALLOC)) ++ { ++ if (htab->srelgot == NULL) ++ { ++ htab->srelgot = create_dynamic_section(dynobj, ".rela.got", ++ bed->dynamic_sec_flags ++ | SEC_READONLY, 2); ++ if (htab->srelgot == NULL) ++ return FALSE; ++ } ++ ++ if (sec->flags & SEC_READONLY ++ && !h->readonly_reloc_sec) ++ { ++ h->readonly_reloc_sec = sec; ++ h->readonly_reloc_offset = rel->r_offset; ++ } ++ ++ if (h != NULL) ++ { ++ pr_debug("Non-GOT reference to symbol %s\n", ++ h->root.root.root.string); ++ h->possibly_dynamic_relocs++; ++ } ++ else ++ { ++ pr_debug("Non-GOT reference to local symbol %lu\n", ++ r_symndx); ++ htab->local_dynamic_relocs++; ++ } ++ } ++ ++ break; ++ ++ /* TODO: GNU_VTINHERIT and GNU_VTENTRY */ ++ } ++ } ++ ++ return TRUE; ++} ++ ++/* (3) Adjust a symbol defined by a dynamic object and referenced by a ++ regular object. The current definition is in some section of the ++ dynamic object, but we're not including those sections. We have to ++ change the definition to something the rest of the link can ++ understand. */ ++ ++static bfd_boolean ++avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *h) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct elf_avr32_link_hash_entry *havr; ++ bfd *dynobj; ++ ++ pr_debug("(3) adjust dynamic symbol %s\n", h->root.root.string); ++ ++ htab = avr32_elf_hash_table(info); ++ havr = (struct elf_avr32_link_hash_entry *)h; ++ dynobj = elf_hash_table(info)->dynobj; ++ ++ /* Make sure we know what is going on here. */ ++ BFD_ASSERT (dynobj != NULL ++ && (h->u.weakdef != NULL ++ || (h->def_dynamic ++ && h->ref_regular ++ && !h->def_regular))); ++ ++ /* We don't want dynamic relocations in read-only sections. */ ++ if (havr->readonly_reloc_sec) ++ { ++ if (info->callbacks->reloc_dangerous ++ (info, _("dynamic relocation in read-only section"), ++ havr->readonly_reloc_sec->owner, havr->readonly_reloc_sec, ++ havr->readonly_reloc_offset) == FALSE) ++ return FALSE; ++ } ++ ++ /* If this is a function, create a stub if possible and set the ++ symbol to the stub location. */ ++ if (0 && !havr->no_fn_stub) ++ { ++ if (!h->def_regular) ++ { ++ asection *s = htab->sstub; ++ ++ BFD_ASSERT(s != NULL); ++ ++ h->root.u.def.section = s; ++ h->root.u.def.value = s->size; ++ h->plt.offset = s->size; ++ s->size += AVR32_FUNCTION_STUB_SIZE; ++ ++ return TRUE; ++ } ++ } ++ else if (h->type == STT_FUNC) ++ { ++ /* This will set the entry for this symbol in the GOT to 0, and ++ the dynamic linker will take care of this. */ ++ h->root.u.def.value = 0; ++ return TRUE; ++ } ++ ++ /* If this is a weak symbol, and there is a real definition, the ++ processor independent code will have arranged for us to see the ++ real definition first, and we can just use the same value. */ ++ if (h->u.weakdef != NULL) ++ { ++ BFD_ASSERT(h->u.weakdef->root.type == bfd_link_hash_defined ++ || h->u.weakdef->root.type == bfd_link_hash_defweak); ++ h->root.u.def.section = h->u.weakdef->root.u.def.section; ++ h->root.u.def.value = h->u.weakdef->root.u.def.value; ++ return TRUE; ++ } ++ ++ /* This is a reference to a symbol defined by a dynamic object which ++ is not a function. */ ++ ++ return TRUE; ++} ++ ++ ++/* Garbage-collection of unused sections */ ++ ++static asection * ++avr32_elf_gc_mark_hook(asection *sec, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED, ++ Elf_Internal_Rela *rel, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym) ++{ ++ if (h) ++ { ++ switch (ELF32_R_TYPE(rel->r_info)) ++ { ++ /* TODO: VTINHERIT/VTENTRY */ ++ default: ++ switch (h->root.type) ++ { ++ case bfd_link_hash_defined: ++ case bfd_link_hash_defweak: ++ return h->root.u.def.section; ++ ++ case bfd_link_hash_common: ++ return h->root.u.c.p->section; ++ ++ default: ++ break; ++ } ++ } ++ } ++ else ++ return bfd_section_from_elf_index(sec->owner, sym->st_shndx); ++ ++ return NULL; ++} ++ ++/* Update the GOT entry reference counts for the section being removed. */ ++static bfd_boolean ++avr32_elf_gc_sweep_hook(bfd *abfd, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED, ++ asection *sec, ++ const Elf_Internal_Rela *relocs) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ struct elf_avr32_link_hash_entry **sym_hashes; ++ struct got_entry **local_got_ents; ++ const Elf_Internal_Rela *rel, *relend; ++ ++ if (!(sec->flags & SEC_ALLOC)) ++ return TRUE; ++ ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ sym_hashes = (struct elf_avr32_link_hash_entry **)elf_sym_hashes(abfd); ++ local_got_ents = elf_local_got_ents(abfd); ++ ++ relend = relocs + sec->reloc_count; ++ for (rel = relocs; rel < relend; rel++) ++ { ++ unsigned long r_symndx; ++ unsigned int r_type; ++ struct elf_avr32_link_hash_entry *h = NULL; ++ ++ r_symndx = ELF32_R_SYM(rel->r_info); ++ if (r_symndx >= symtab_hdr->sh_info) ++ { ++ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.root.type == bfd_link_hash_indirect ++ || h->root.root.type == bfd_link_hash_warning) ++ h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; ++ } ++ ++ r_type = ELF32_R_TYPE(rel->r_info); ++ ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ if (h) ++ h->root.got.glist->refcount--; ++ else ++ local_got_ents[r_symndx]->refcount--; ++ break; ++ ++ case R_AVR32_32: ++ if (info->shared || h) ++ { ++ if (h) ++ h->possibly_dynamic_relocs--; ++ else ++ avr32_elf_hash_table(info)->local_dynamic_relocs--; ++ } ++ ++ default: ++ break; ++ } ++ } ++ ++ return TRUE; ++} ++ ++/* Sizing and refcounting of dynamic sections */ ++ ++static void ++insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); ++static void ++unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); ++static void ++ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); ++static bfd_boolean ++assign_got_offsets(struct elf_avr32_link_hash_table *htab); ++static bfd_boolean ++allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info); ++static bfd_boolean ++avr32_elf_size_dynamic_sections (bfd *output_bfd, ++ struct bfd_link_info *info); ++ ++static void ++insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) ++{ ++ /* TODO: Support got_refcount > htab->nr_got_holes by using a ++ different sort algorithm for those. */ ++ BFD_ASSERT(got->refcount <= htab->nr_got_holes); ++ ++ got->pprev = &htab->got_hole[got->refcount]; ++ got->next = htab->got_hole[got->refcount]; ++ if (got->next) ++ got->next->pprev = &got->next; ++ ++ htab->got_hole[got->refcount] = got; ++} ++ ++/* Decrement the refcount of a GOT entry and update its position in ++ the pigeonhole array. */ ++static void ++unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) ++{ ++ BFD_ASSERT(got->refcount <= htab->nr_got_holes); ++ BFD_ASSERT(got->refcount > 0); ++ ++ if (got->next) ++ got->next->pprev = got->pprev; ++ ++ *(got->pprev) = got->next; ++ got->refcount--; ++ insert_got_entry(htab, got); ++} ++ ++static void ++ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) ++{ ++ if (got->next) ++ got->next->pprev = got->pprev; ++ ++ *(got->pprev) = got->next; ++ got->refcount++; ++ insert_got_entry(htab, got); ++ ++ BFD_ASSERT(got->refcount > 0); ++ BFD_ASSERT(got->refcount <= htab->nr_got_holes); ++} ++ ++/* Assign offsets to all GOT entries we intend to keep. The entries ++ that are referenced most often are placed at low offsets so that we ++ can use compact instructions as much as possible. ++ ++ Returns TRUE if any offsets or the total size of the GOT changed. */ ++ ++static bfd_boolean ++assign_got_offsets(struct elf_avr32_link_hash_table *htab) ++{ ++ struct got_entry *got; ++ bfd_size_type got_size = 0; ++ bfd_boolean changed = FALSE; ++ bfd_signed_vma offset; ++ int i; ++ ++ /* The GOT header provides the address of the DYNAMIC segment, so ++ we need that even if the GOT is otherwise empty. */ ++ if (htab->root.dynamic_sections_created) ++ got_size = AVR32_GOT_HEADER_SIZE; ++ ++ for (i = htab->nr_got_holes; i > 0; i--) ++ { ++ got = htab->got_hole[i]; ++ while (got) ++ { ++ if (got->refcount > 0) ++ { ++ offset = got_size; ++ if (got->offset != offset) ++ { ++ RDBG("GOT offset changed: %ld -> %ld\n", ++ got->offset, offset); ++ changed = TRUE; ++ } ++ got->offset = offset; ++ got_size += 4; ++ } ++ got = got->next; ++ } ++ } ++ ++ if (htab->sgot->size != got_size) ++ { ++ RDBG("GOT size changed: %lu -> %lu\n", htab->sgot->size, ++ got_size); ++ changed = TRUE; ++ } ++ htab->sgot->size = got_size; ++ ++ RDBG("assign_got_offsets: total size %lu (%s)\n", ++ got_size, changed ? "changed" : "no change"); ++ ++ return changed; ++} ++ ++static bfd_boolean ++allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info) ++{ ++ struct bfd_link_info *info = _info; ++ struct elf_avr32_link_hash_table *htab; ++ struct elf_avr32_link_hash_entry *havr; ++ struct got_entry *got; ++ ++ pr_debug(" (4b) allocate_dynrelocs: %s\n", h->root.root.string); ++ ++ if (h->root.type == bfd_link_hash_indirect) ++ return TRUE; ++ ++ if (h->root.type == bfd_link_hash_warning) ++ /* When warning symbols are created, they **replace** the "real" ++ entry in the hash table, thus we never get to see the real ++ symbol in a hash traversal. So look at it now. */ ++ h = (struct elf_link_hash_entry *) h->root.u.i.link; ++ ++ htab = avr32_elf_hash_table(info); ++ havr = (struct elf_avr32_link_hash_entry *)h; ++ ++ got = h->got.glist; ++ ++ /* If got is NULL, the symbol is never referenced through the GOT */ ++ if (got && got->refcount > 0) ++ { ++ insert_got_entry(htab, got); ++ ++ /* Shared libraries need relocs for all GOT entries unless the ++ symbol is forced local or -Bsymbolic is used. Others need ++ relocs for everything that is not guaranteed to be defined in ++ a regular object. */ ++ if ((info->shared ++ && !info->symbolic ++ && h->dynindx != -1) ++ || (htab->root.dynamic_sections_created ++ && h->def_dynamic ++ && !h->def_regular)) ++ htab->srelgot->size += sizeof(Elf32_External_Rela); ++ } ++ ++ if (havr->possibly_dynamic_relocs ++ && (info->shared ++ || (elf_hash_table(info)->dynamic_sections_created ++ && h->def_dynamic ++ && !h->def_regular))) ++ { ++ pr_debug("Allocating %d dynamic reloc against symbol %s...\n", ++ havr->possibly_dynamic_relocs, h->root.root.string); ++ htab->srelgot->size += (havr->possibly_dynamic_relocs ++ * sizeof(Elf32_External_Rela)); ++ } ++ ++ return TRUE; ++} ++ ++/* (4) Calculate the sizes of the linker-generated sections and ++ allocate memory for them. */ ++ ++static bfd_boolean ++avr32_elf_size_dynamic_sections (bfd *output_bfd, ++ struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ bfd *dynobj; ++ asection *s; ++ bfd *ibfd; ++ bfd_boolean relocs; ++ ++ pr_debug("(4) size dynamic sections\n"); ++ ++ htab = avr32_elf_hash_table(info); ++ dynobj = htab->root.dynobj; ++ BFD_ASSERT(dynobj != NULL); ++ ++ if (htab->root.dynamic_sections_created) ++ { ++ /* Initialize the contents of the .interp section to the name of ++ the dynamic loader */ ++ if (info->executable) ++ { ++ s = bfd_get_section_by_name(dynobj, ".interp"); ++ BFD_ASSERT(s != NULL); ++ s->size = sizeof(ELF_DYNAMIC_INTERPRETER); ++ s->contents = (unsigned char *)ELF_DYNAMIC_INTERPRETER; ++ } ++ } ++ ++ if (htab->nr_got_holes > 0) ++ { ++ /* Allocate holes for the pigeonhole sort algorithm */ ++ pr_debug("Highest GOT refcount: %d\n", htab->nr_got_holes); ++ if (htab->nr_got_holes >= MAX_NR_GOT_HOLES) ++ { ++ /* TODO: Do something clever (different sorting algorithm) */ ++ _bfd_error_handler(_("Highest refcount %d too high (max %d)\n"), ++ htab->nr_got_holes, MAX_NR_GOT_HOLES); ++ bfd_set_error(bfd_error_no_memory); ++ return FALSE; ++ } ++ htab->got_hole = bfd_zalloc(output_bfd, ++ sizeof(struct got_entry *) ++ * (htab->nr_got_holes + 1)); ++ if (!htab->got_hole) ++ return FALSE; ++ ++ /* Set up .got offsets for local syms. */ ++ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) ++ { ++ struct got_entry **local_got; ++ struct got_entry **end_local_got; ++ Elf_Internal_Shdr *symtab_hdr; ++ bfd_size_type locsymcount; ++ ++ pr_debug(" (4a) processing file %s...\n", ibfd->filename); ++ ++ BFD_ASSERT(bfd_get_flavour(ibfd) == bfd_target_elf_flavour); ++ ++ local_got = elf_local_got_ents(ibfd); ++ if (!local_got) ++ continue; ++ ++ symtab_hdr = &elf_tdata(ibfd)->symtab_hdr; ++ locsymcount = symtab_hdr->sh_info; ++ end_local_got = local_got + locsymcount; ++ ++ for (; local_got < end_local_got; ++local_got) ++ insert_got_entry(htab, *local_got); ++ } ++ } ++ ++ /* Allocate global sym .got entries and space for global sym ++ dynamic relocs */ ++ elf_link_hash_traverse(&htab->root, allocate_dynrelocs, info); ++ ++ /* Now that we have sorted the GOT entries, we are ready to ++ assign offsets and determine the initial size of the GOT. */ ++ if (htab->sgot) ++ assign_got_offsets(htab); ++ ++ /* Allocate space for local sym dynamic relocs */ ++ BFD_ASSERT(htab->local_dynamic_relocs == 0 || info->shared); ++ if (htab->local_dynamic_relocs) ++ htab->srelgot->size += (htab->local_dynamic_relocs ++ * sizeof(Elf32_External_Rela)); ++ ++ /* We now have determined the sizes of the various dynamic ++ sections. Allocate memory for them. */ ++ relocs = FALSE; ++ for (s = dynobj->sections; s; s = s->next) ++ { ++ if ((s->flags & SEC_LINKER_CREATED) == 0) ++ continue; ++ ++ if (s == htab->sgot ++ || s == htab->sstub) ++ { ++ /* Strip this section if we don't need it */ ++ } ++ else if (strncmp (bfd_get_section_name(dynobj, s), ".rela", 5) == 0) ++ { ++ if (s->size != 0) ++ relocs = TRUE; ++ ++ s->reloc_count = 0; ++ } ++ else ++ { ++ /* It's not one of our sections */ ++ continue; ++ } ++ ++ if (s->size == 0) ++ { ++ /* Strip unneeded sections */ ++ pr_debug("Stripping section %s from output...\n", s->name); ++ /* deleted function in 2.17 ++ _bfd_strip_section_from_output(info, s); ++ */ ++ continue; ++ } ++ ++ s->contents = bfd_zalloc(dynobj, s->size); ++ if (s->contents == NULL) ++ return FALSE; ++ } ++ ++ if (htab->root.dynamic_sections_created) ++ { ++ /* Add some entries to the .dynamic section. We fill in the ++ values later, in sh_elf_finish_dynamic_sections, but we ++ must add the entries now so that we get the correct size for ++ the .dynamic section. The DT_DEBUG entry is filled in by the ++ dynamic linker and used by the debugger. */ ++#define add_dynamic_entry(TAG, VAL) _bfd_elf_add_dynamic_entry(info, TAG, VAL) ++ ++ if (!add_dynamic_entry(DT_PLTGOT, 0)) ++ return FALSE; ++ if (!add_dynamic_entry(DT_AVR32_GOTSZ, 0)) ++ return FALSE; ++ ++ if (info->executable) ++ { ++ if (!add_dynamic_entry(DT_DEBUG, 0)) ++ return FALSE; ++ } ++ if (relocs) ++ { ++ if (!add_dynamic_entry(DT_RELA, 0) ++ || !add_dynamic_entry(DT_RELASZ, 0) ++ || !add_dynamic_entry(DT_RELAENT, ++ sizeof(Elf32_External_Rela))) ++ return FALSE; ++ } ++ } ++#undef add_dynamic_entry ++ ++ return TRUE; ++} ++ ++ ++/* Access to internal relocations, section contents and symbols. ++ (stolen from the xtensa port) */ ++ ++static Elf_Internal_Rela * ++retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory); ++static void ++pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); ++static void ++release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); ++static bfd_byte * ++retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory); ++/* ++static void ++pin_contents (asection *sec, bfd_byte *contents); ++*/ ++static void ++release_contents (asection *sec, bfd_byte *contents); ++static Elf_Internal_Sym * ++retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory); ++/* ++static void ++pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); ++*/ ++static void ++release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); ++ ++/* During relaxation, we need to modify relocations, section contents, ++ and symbol definitions, and we need to keep the original values from ++ being reloaded from the input files, i.e., we need to "pin" the ++ modified values in memory. We also want to continue to observe the ++ setting of the "keep-memory" flag. The following functions wrap the ++ standard BFD functions to take care of this for us. */ ++ ++static Elf_Internal_Rela * ++retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory) ++{ ++ /* _bfd_elf_link_read_relocs knows about caching, so no need for us ++ to be clever here. */ ++ return _bfd_elf_link_read_relocs(abfd, sec, NULL, NULL, keep_memory); ++} ++ ++static void ++pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) ++{ ++ elf_section_data (sec)->relocs = internal_relocs; ++} ++ ++static void ++release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) ++{ ++ if (internal_relocs ++ && elf_section_data (sec)->relocs != internal_relocs) ++ free (internal_relocs); ++} ++ ++static bfd_byte * ++retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory) ++{ ++ bfd_byte *contents; ++ bfd_size_type sec_size; ++ ++ sec_size = bfd_get_section_limit (abfd, sec); ++ contents = elf_section_data (sec)->this_hdr.contents; ++ ++ if (contents == NULL && sec_size != 0) ++ { ++ if (!bfd_malloc_and_get_section (abfd, sec, &contents)) ++ { ++ if (contents) ++ free (contents); ++ return NULL; ++ } ++ if (keep_memory) ++ elf_section_data (sec)->this_hdr.contents = contents; ++ } ++ return contents; ++} ++ ++/* ++static void ++pin_contents (asection *sec, bfd_byte *contents) ++{ ++ elf_section_data (sec)->this_hdr.contents = contents; ++} ++*/ ++static void ++release_contents (asection *sec, bfd_byte *contents) ++{ ++ if (contents && elf_section_data (sec)->this_hdr.contents != contents) ++ free (contents); ++} ++ ++static Elf_Internal_Sym * ++retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Sym *isymbuf; ++ size_t locsymcount; ++ ++ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; ++ locsymcount = symtab_hdr->sh_info; ++ ++ isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; ++ if (isymbuf == NULL && locsymcount != 0) ++ { ++ isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0, ++ NULL, NULL, NULL); ++ if (isymbuf && keep_memory) ++ symtab_hdr->contents = (unsigned char *) isymbuf; ++ } ++ ++ return isymbuf; ++} ++ ++/* ++static void ++pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) ++{ ++ elf_tdata (input_bfd)->symtab_hdr.contents = (unsigned char *)isymbuf; ++} ++ ++*/ ++static void ++release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) ++{ ++ if (isymbuf && (elf_tdata (input_bfd)->symtab_hdr.contents ++ != (unsigned char *)isymbuf)) ++ free (isymbuf); ++} ++ ++ /* Data structures used during relaxation. */ ++ ++enum relax_state_id { ++ RS_ERROR = -1, ++ RS_NONE = 0, ++ RS_ALIGN, ++ RS_CPENT, ++ RS_PIC_CALL, ++ RS_PIC_MCALL, ++ RS_PIC_RCALL2, ++ RS_PIC_RCALL1, ++ RS_PIC_LDA, ++ RS_PIC_LDW4, ++ RS_PIC_LDW3, ++ RS_PIC_SUB5, ++ RS_NOPIC_MCALL, ++ RS_NOPIC_RCALL2, ++ RS_NOPIC_RCALL1, ++ RS_NOPIC_LDW4, ++ RS_NOPIC_LDDPC, ++ RS_NOPIC_SUB5, ++#ifdef DHRYSTONE_FIX ++ RS_NOPIC_MOV2, ++ RS_NOPIC_MOV1, ++#endif ++ RS_RCALL2, ++ RS_RCALL1, ++ RS_BRC2, ++ RS_BRC1, ++ RS_BRAL, ++ RS_RJMP, ++ RS_MAX, ++}; ++ ++enum reference_type { ++ REF_ABSOLUTE, ++ REF_PCREL, ++ REF_CPOOL, ++ REF_GOT, ++}; ++ ++struct relax_state ++{ ++ const char *name; ++ enum relax_state_id id; ++ enum relax_state_id direct; ++ enum relax_state_id next; ++ enum relax_state_id prev; ++ ++ enum reference_type reftype; ++ ++ unsigned int r_type; ++ ++ bfd_vma opcode; ++ bfd_vma opcode_mask; ++ ++ bfd_signed_vma range_min; ++ bfd_signed_vma range_max; ++ ++ bfd_size_type size; ++}; ++ ++/* ++ * This is for relocs that ++ * a) has an addend or is of type R_AVR32_DIFF32, and ++ * b) references a different section than it's in, and ++ * c) references a section that is relaxable ++ * ++ * as well as relocs that references the constant pool, in which case ++ * the add_frag member points to the frag containing the constant pool ++ * entry. ++ * ++ * Such relocs must be fixed up whenever we delete any code. Sections ++ * that don't have any relocs with all of the above properties don't ++ * have any additional reloc data, but sections that do will have ++ * additional data for all its relocs. ++ */ ++struct avr32_reloc_data ++{ ++ struct fragment *add_frag; ++ struct fragment *sub_frag; ++}; ++ ++/* ++ * A 'fragment' is a relaxable entity, that is, code may be added or ++ * deleted at the end of a fragment. When this happens, all subsequent ++ * fragments in the list will have their offsets updated. ++ */ ++struct fragment ++{ ++ enum relax_state_id state; ++ enum relax_state_id initial_state; ++ ++ Elf_Internal_Rela *rela; ++ bfd_size_type size; ++ bfd_vma offset; ++ int size_adjust; ++ int offset_adjust; ++ bfd_boolean has_grown; ++ ++ /* Only used by constant pool entries. When this drops to zero, the ++ frag is discarded (i.e. size_adjust is set to -4.) */ ++ int refcount; ++}; ++ ++struct avr32_relax_data ++{ ++ unsigned int frag_count; ++ struct fragment *frag; ++ struct avr32_reloc_data *reloc_data; ++ ++ /* TRUE if this section has one or more relaxable relocations */ ++ bfd_boolean is_relaxable; ++ unsigned int iteration; ++}; ++ ++struct avr32_section_data ++{ ++ struct bfd_elf_section_data elf; ++ struct avr32_relax_data relax_data; ++}; ++ ++ /* Relax state definitions */ ++ ++#define PIC_MOV2_OPCODE 0xe0600000 ++#define PIC_MOV2_MASK 0xe1e00000 ++#define PIC_MOV2_RANGE_MIN (-1048576 * 4) ++#define PIC_MOV2_RANGE_MAX (1048575 * 4) ++#define PIC_MCALL_OPCODE 0xf0160000 ++#define PIC_MCALL_MASK 0xffff0000 ++#define PIC_MCALL_RANGE_MIN (-131072) ++#define PIC_MCALL_RANGE_MAX (131068) ++#define RCALL2_OPCODE 0xe0a00000 ++#define RCALL2_MASK 0xe1ef0000 ++#define RCALL2_RANGE_MIN (-2097152) ++#define RCALL2_RANGE_MAX (2097150) ++#define RCALL1_OPCODE 0xc00c0000 ++#define RCALL1_MASK 0xf00c0000 ++#define RCALL1_RANGE_MIN (-1024) ++#define RCALL1_RANGE_MAX (1022) ++#define PIC_LDW4_OPCODE 0xecf00000 ++#define PIC_LDW4_MASK 0xfff00000 ++#define PIC_LDW4_RANGE_MIN (-32768) ++#define PIC_LDW4_RANGE_MAX (32767) ++#define PIC_LDW3_OPCODE 0x6c000000 ++#define PIC_LDW3_MASK 0xfe000000 ++#define PIC_LDW3_RANGE_MIN (0) ++#define PIC_LDW3_RANGE_MAX (124) ++#define SUB5_PC_OPCODE 0xfec00000 ++#define SUB5_PC_MASK 0xfff00000 ++#define SUB5_PC_RANGE_MIN (-32768) ++#define SUB5_PC_RANGE_MAX (32767) ++#define NOPIC_MCALL_OPCODE 0xf01f0000 ++#define NOPIC_MCALL_MASK 0xffff0000 ++#define NOPIC_MCALL_RANGE_MIN PIC_MCALL_RANGE_MIN ++#define NOPIC_MCALL_RANGE_MAX PIC_MCALL_RANGE_MAX ++#define NOPIC_LDW4_OPCODE 0xfef00000 ++#define NOPIC_LDW4_MASK 0xfff00000 ++#define NOPIC_LDW4_RANGE_MIN PIC_LDW4_RANGE_MIN ++#define NOPIC_LDW4_RANGE_MAX PIC_LDW4_RANGE_MAX ++#define LDDPC_OPCODE 0x48000000 ++#define LDDPC_MASK 0xf8000000 ++#define LDDPC_RANGE_MIN 0 ++#define LDDPC_RANGE_MAX 508 ++ ++#ifdef DHRYSTONE_FIX ++#define NOPIC_MOV2_OPCODE 0xe0600000 ++#define NOPIC_MOV2_MASK 0xe1e00000 ++#define NOPIC_MOV2_RANGE_MIN (-1048576) ++#define NOPIC_MOV2_RANGE_MAX (1048575) ++#define NOPIC_MOV1_OPCODE 0x30000000 ++#define NOPIC_MOV1_MASK 0xf0000000 ++#define NOPIC_MOV1_RANGE_MIN (-128) ++#define NOPIC_MOV1_RANGE_MAX (127) ++#endif ++ ++/* Only brc2 variants with cond[3] == 0 is considered, since the ++ others are not relaxable. bral is a special case and is handled ++ separately. */ ++#define BRC2_OPCODE 0xe0800000 ++#define BRC2_MASK 0xe1e80000 ++#define BRC2_RANGE_MIN (-2097152) ++#define BRC2_RANGE_MAX (2097150) ++#define BRC1_OPCODE 0xc0000000 ++#define BRC1_MASK 0xf0080000 ++#define BRC1_RANGE_MIN (-256) ++#define BRC1_RANGE_MAX (254) ++#define BRAL_OPCODE 0xe08f0000 ++#define BRAL_MASK 0xe1ef0000 ++#define BRAL_RANGE_MIN BRC2_RANGE_MIN ++#define BRAL_RANGE_MAX BRC2_RANGE_MAX ++#define RJMP_OPCODE 0xc0080000 ++#define RJMP_MASK 0xf00c0000 ++#define RJMP_RANGE_MIN (-1024) ++#define RJMP_RANGE_MAX (1022) ++ ++/* Define a relax state using the GOT */ ++#define RG(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_GOT, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++/* Define a relax state using the Constant Pool */ ++#define RC(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_CPOOL, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++ ++/* Define a relax state using pc-relative direct reference */ ++#define RP(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_PCREL, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++ ++#ifdef DHRYSTONE_FIX ++/* Define a relax state using non-pc-relative direct reference */ ++#define RD(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_ABSOLUTE, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++ ++#endif ++ ++/* Define a relax state that will be handled specially */ ++#define RS(id, r_type, size) \ ++ { "RS_"#id, RS_##id, RS_NONE, RS_NONE, RS_NONE, REF_ABSOLUTE, \ ++ R_AVR32_##r_type, 0, 0, 0, 0, size } ++ ++const struct relax_state relax_state[RS_MAX] = { ++ RS(NONE, NONE, 0), ++ RS(ALIGN, ALIGN, 0), ++ RS(CPENT, 32_CPENT, 4), ++ ++ RG(PIC_CALL, PIC_RCALL1, PIC_MCALL, NONE, GOTCALL, PIC_MOV2, 10), ++ RG(PIC_MCALL, PIC_RCALL1, NONE, PIC_CALL, GOT18SW, PIC_MCALL, 4), ++ RP(PIC_RCALL2, NONE, PIC_RCALL1, PIC_MCALL, 22H_PCREL, RCALL2, 4), ++ RP(PIC_RCALL1, NONE, NONE, PIC_RCALL2, 11H_PCREL, RCALL1, 2), ++ ++ RG(PIC_LDA, PIC_SUB5, PIC_LDW4, NONE, LDA_GOT, PIC_MOV2, 8), ++ RG(PIC_LDW4, PIC_SUB5, PIC_LDW3, PIC_LDA, GOT16S, PIC_LDW4, 4), ++ RG(PIC_LDW3, PIC_SUB5, NONE, PIC_LDW4, GOT7UW, PIC_LDW3, 2), ++ RP(PIC_SUB5, NONE, NONE, PIC_LDW3, 16N_PCREL, SUB5_PC, 4), ++ ++ RC(NOPIC_MCALL, NOPIC_RCALL1, NONE, NONE, CPCALL, NOPIC_MCALL, 4), ++ RP(NOPIC_RCALL2, NONE, NOPIC_RCALL1, NOPIC_MCALL, 22H_PCREL, RCALL2, 4), ++ RP(NOPIC_RCALL1, NONE, NONE, NOPIC_RCALL2, 11H_PCREL, RCALL1, 2), ++ ++#ifdef DHRYSTONE_FIX ++ RC(NOPIC_LDW4, NOPIC_MOV1, NOPIC_LDDPC, NONE, 16_CP, NOPIC_LDW4, 4), ++ RC(NOPIC_LDDPC, NOPIC_MOV1, NONE, NOPIC_LDW4, 9W_CP, LDDPC, 2), ++ RP(NOPIC_SUB5, NOPIC_MOV1, NONE, NOPIC_LDDPC, 16N_PCREL, SUB5_PC, 4), ++ RD(NOPIC_MOV2, NONE, NOPIC_MOV1, NOPIC_SUB5, 21S, NOPIC_MOV2, 4), ++ RD(NOPIC_MOV1, NONE, NONE, NOPIC_MOV2, 8S, NOPIC_MOV1, 2), ++#else ++ RC(NOPIC_LDW4, NOPIC_SUB5, NOPIC_LDDPC, NONE, 16_CP, NOPIC_LDW4, 4), ++ RC(NOPIC_LDDPC, NOPIC_SUB5, NONE, NOPIC_LDW4, 9W_CP, LDDPC, 2), ++ RP(NOPIC_SUB5, NONE, NONE, NOPIC_LDDPC, 16N_PCREL, SUB5_PC, 4), ++#endif ++ ++ RP(RCALL2, NONE, RCALL1, NONE, 22H_PCREL, RCALL2, 4), ++ RP(RCALL1, NONE, NONE, RCALL2, 11H_PCREL, RCALL1, 2), ++ RP(BRC2, NONE, BRC1, NONE, 22H_PCREL, BRC2, 4), ++ RP(BRC1, NONE, NONE, BRC2, 9H_PCREL, BRC1, 2), ++ RP(BRAL, NONE, RJMP, NONE, 22H_PCREL, BRAL, 4), ++ RP(RJMP, NONE, NONE, BRAL, 11H_PCREL, RJMP, 2), ++}; ++ ++static bfd_boolean ++avr32_elf_new_section_hook(bfd *abfd, asection *sec) ++{ ++ struct avr32_section_data *sdata; ++ ++ sdata = bfd_zalloc(abfd, sizeof(struct avr32_section_data)); ++ if (!sdata) ++ return FALSE; ++ ++ sec->used_by_bfd = sdata; ++ return _bfd_elf_new_section_hook(abfd, sec); ++} ++ ++static struct avr32_relax_data * ++avr32_relax_data(asection *sec) ++{ ++ struct avr32_section_data *sdata; ++ ++ BFD_ASSERT(sec->used_by_bfd); ++ ++ sdata = (struct avr32_section_data *)elf_section_data(sec); ++ return &sdata->relax_data; ++} ++ ++ /* Link-time relaxation */ ++ ++static bfd_boolean ++avr32_elf_relax_section(bfd *abfd, asection *sec, ++ struct bfd_link_info *info, bfd_boolean *again); ++ ++enum relax_pass_id { ++ RELAX_PASS_SIZE_FRAGS, ++ RELAX_PASS_MOVE_DATA, ++}; ++ ++/* Stolen from the xtensa port */ ++static int ++internal_reloc_compare (const void *ap, const void *bp) ++{ ++ const Elf_Internal_Rela *a = (const Elf_Internal_Rela *) ap; ++ const Elf_Internal_Rela *b = (const Elf_Internal_Rela *) bp; ++ ++ if (a->r_offset != b->r_offset) ++ return (a->r_offset - b->r_offset); ++ ++ /* We don't need to sort on these criteria for correctness, ++ but enforcing a more strict ordering prevents unstable qsort ++ from behaving differently with different implementations. ++ Without the code below we get correct but different results ++ on Solaris 2.7 and 2.8. We would like to always produce the ++ same results no matter the host. */ ++ ++ if (a->r_info != b->r_info) ++ return (a->r_info - b->r_info); ++ ++ return (a->r_addend - b->r_addend); ++} ++ ++static enum relax_state_id ++get_pcrel22_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, ++ const Elf_Internal_Rela *rela) ++{ ++ bfd_byte *contents; ++ bfd_vma insn; ++ enum relax_state_id rs = RS_NONE; ++ ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ return RS_ERROR; ++ ++ insn = bfd_get_32(abfd, contents + rela->r_offset); ++ if ((insn & RCALL2_MASK) == RCALL2_OPCODE) ++ rs = RS_RCALL2; ++ else if ((insn & BRAL_MASK) == BRAL_OPCODE) ++ /* Optimizing bral -> rjmp gets us into all kinds of ++ trouble with jump tables. Better not do it. */ ++ rs = RS_NONE; ++ else if ((insn & BRC2_MASK) == BRC2_OPCODE) ++ rs = RS_BRC2; ++ ++ release_contents(sec, contents); ++ ++ return rs; ++} ++ ++static enum relax_state_id ++get_initial_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, ++ const Elf_Internal_Rela *rela) ++{ ++ switch (ELF_R_TYPE(rela->r_info)) ++ { ++ case R_AVR32_GOTCALL: ++ return RS_PIC_CALL; ++ case R_AVR32_GOT18SW: ++ return RS_PIC_MCALL; ++ case R_AVR32_LDA_GOT: ++ return RS_PIC_LDA; ++ case R_AVR32_GOT16S: ++ return RS_PIC_LDW4; ++ case R_AVR32_CPCALL: ++ return RS_NOPIC_MCALL; ++ case R_AVR32_16_CP: ++ return RS_NOPIC_LDW4; ++ case R_AVR32_9W_CP: ++ return RS_NOPIC_LDDPC; ++ case R_AVR32_ALIGN: ++ return RS_ALIGN; ++ case R_AVR32_32_CPENT: ++ return RS_CPENT; ++ case R_AVR32_22H_PCREL: ++ return get_pcrel22_relax_state(abfd, sec, info, rela); ++ case R_AVR32_9H_PCREL: ++ return RS_BRC1; ++ default: ++ return RS_NONE; ++ } ++} ++ ++static bfd_boolean ++reloc_is_cpool_ref(const Elf_Internal_Rela *rela) ++{ ++ switch (ELF_R_TYPE(rela->r_info)) ++ { ++ case R_AVR32_CPCALL: ++ case R_AVR32_16_CP: ++ case R_AVR32_9W_CP: ++ return TRUE; ++ default: ++ return FALSE; ++ } ++} ++ ++static struct fragment * ++new_frag(bfd *abfd ATTRIBUTE_UNUSED, asection *sec, ++ struct avr32_relax_data *rd, enum relax_state_id state, ++ Elf_Internal_Rela *rela) ++{ ++ struct fragment *frag; ++ bfd_size_type r_size; ++ bfd_vma r_offset; ++ unsigned int i = rd->frag_count; ++ ++ BFD_ASSERT(state >= RS_NONE && state < RS_MAX); ++ ++ rd->frag_count++; ++ frag = bfd_realloc(rd->frag, sizeof(struct fragment) * rd->frag_count); ++ if (!frag) ++ return NULL; ++ rd->frag = frag; ++ ++ frag += i; ++ memset(frag, 0, sizeof(struct fragment)); ++ ++ if (state == RS_ALIGN) ++ r_size = (((rela->r_offset + (1 << rela->r_addend) - 1) ++ & ~((1 << rela->r_addend) - 1)) - rela->r_offset); ++ else ++ r_size = relax_state[state].size; ++ ++ if (rela) ++ r_offset = rela->r_offset; ++ else ++ r_offset = sec->size; ++ ++ if (i == 0) ++ { ++ frag->offset = 0; ++ frag->size = r_offset + r_size; ++ } ++ else ++ { ++ frag->offset = rd->frag[i - 1].offset + rd->frag[i - 1].size; ++ frag->size = r_offset + r_size - frag->offset; ++ } ++ ++ if (state != RS_CPENT) ++ /* Make sure we don't discard this frag */ ++ frag->refcount = 1; ++ ++ frag->initial_state = frag->state = state; ++ frag->rela = rela; ++ ++ return frag; ++} ++ ++static struct fragment * ++find_frag(asection *sec, bfd_vma offset) ++{ ++ struct fragment *first, *last; ++ struct avr32_relax_data *rd = avr32_relax_data(sec); ++ ++ if (rd->frag_count == 0) ++ return NULL; ++ ++ first = &rd->frag[0]; ++ last = &rd->frag[rd->frag_count - 1]; ++ ++ /* This may be a reloc referencing the end of a section. The last ++ frag will never have a reloc associated with it, so its size will ++ never change, thus the offset adjustment of the last frag will ++ always be the same as the offset adjustment of the end of the ++ section. */ ++ if (offset == sec->size) ++ { ++ BFD_ASSERT(last->offset + last->size == sec->size); ++ BFD_ASSERT(!last->rela); ++ return last; ++ } ++ ++ while (first <= last) ++ { ++ struct fragment *mid; ++ ++ mid = (last - first) / 2 + first; ++ if ((mid->offset + mid->size) <= offset) ++ first = mid + 1; ++ else if (mid->offset > offset) ++ last = mid - 1; ++ else ++ return mid; ++ } ++ ++ return NULL; ++} ++ ++/* Look through all relocs in a section and determine if any relocs ++ may be affected by relaxation in other sections. If so, allocate ++ an array of additional relocation data which links the affected ++ relocations to the frag(s) where the relaxation may occur. ++ ++ This function also links cpool references to cpool entries and ++ increments the refcount of the latter when this happens. */ ++ ++static bfd_boolean ++allocate_reloc_data(bfd *abfd, asection *sec, Elf_Internal_Rela *relocs, ++ struct bfd_link_info *info) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Sym *isymbuf = NULL; ++ struct avr32_relax_data *rd; ++ unsigned int i; ++ bfd_boolean ret = FALSE; ++ ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ rd = avr32_relax_data(sec); ++ ++ RDBG("%s<%s>: allocate_reloc_data\n", abfd->filename, sec->name); ++ ++ for (i = 0; i < sec->reloc_count; i++) ++ { ++ Elf_Internal_Rela *rel = &relocs[i]; ++ asection *sym_sec; ++ unsigned long r_symndx; ++ bfd_vma sym_value; ++ ++ if (!rel->r_addend && ELF_R_TYPE(rel->r_info) != R_AVR32_DIFF32 ++ && !reloc_is_cpool_ref(rel)) ++ continue; ++ ++ r_symndx = ELF_R_SYM(rel->r_info); ++ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ Elf_Internal_Sym *isym; ++ ++ if (!isymbuf) ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ return FALSE; ++ ++ isym = &isymbuf[r_symndx]; ++ sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); ++ sym_value = isym->st_value; ++ } ++ else ++ { ++ struct elf_link_hash_entry *h; ++ ++ h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; ++ ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; ++ ++ if (h->root.type != bfd_link_hash_defined ++ && h->root.type != bfd_link_hash_defweak) ++ continue; ++ ++ sym_sec = h->root.u.def.section; ++ sym_value = h->root.u.def.value; ++ } ++ ++ if (sym_sec && avr32_relax_data(sym_sec)->is_relaxable) ++ { ++ bfd_size_type size; ++ struct fragment *frag; ++ ++ if (!rd->reloc_data) ++ { ++ size = sizeof(struct avr32_reloc_data) * sec->reloc_count; ++ rd->reloc_data = bfd_zalloc(abfd, size); ++ if (!rd->reloc_data) ++ goto out; ++ } ++ ++ RDBG("[%3d] 0x%04lx: target: 0x%lx + 0x%lx", ++ i, rel->r_offset, sym_value, rel->r_addend); ++ ++ frag = find_frag(sym_sec, sym_value + rel->r_addend); ++ BFD_ASSERT(frag); ++ rd->reloc_data[i].add_frag = frag; ++ ++ RDBG(" -> %s<%s>:%04lx\n", sym_sec->owner->filename, sym_sec->name, ++ frag->rela ? frag->rela->r_offset : sym_sec->size); ++ ++ if (reloc_is_cpool_ref(rel)) ++ { ++ BFD_ASSERT(ELF_R_TYPE(frag->rela->r_info) == R_AVR32_32_CPENT); ++ frag->refcount++; ++ } ++ ++ if (ELF_R_TYPE(rel->r_info) == R_AVR32_DIFF32) ++ { ++ bfd_byte *contents; ++ bfd_signed_vma diff; ++ ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ goto out; ++ ++ diff = bfd_get_signed_32(abfd, contents + rel->r_offset); ++ frag = find_frag(sym_sec, sym_value + rel->r_addend + diff); ++ BFD_ASSERT(frag); ++ rd->reloc_data[i].sub_frag = frag; ++ ++ release_contents(sec, contents); ++ } ++ } ++ } ++ ++ ret = TRUE; ++ ++ out: ++ release_local_syms(abfd, isymbuf); ++ return ret; ++} ++ ++static bfd_boolean ++global_sym_set_frag(struct elf_avr32_link_hash_entry *havr, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED) ++{ ++ struct fragment *frag; ++ asection *sec; ++ ++ if (havr->root.root.type != bfd_link_hash_defined ++ && havr->root.root.type != bfd_link_hash_defweak) ++ return TRUE; ++ ++ sec = havr->root.root.u.def.section; ++ if (bfd_is_const_section(sec) ++ || !avr32_relax_data(sec)->is_relaxable) ++ return TRUE; ++ ++ frag = find_frag(sec, havr->root.root.u.def.value); ++ if (!frag) ++ { ++ unsigned int i; ++ struct avr32_relax_data *rd = avr32_relax_data(sec); ++ ++ RDBG("In %s: No frag for %s <%s+%lu> (limit %lu)\n", ++ sec->owner->filename, havr->root.root.root.string, ++ sec->name, havr->root.root.u.def.value, sec->size); ++ for (i = 0; i < rd->frag_count; i++) ++ RDBG(" %8lu - %8lu\n", rd->frag[i].offset, ++ rd->frag[i].offset + rd->frag[i].size); ++ } ++ BFD_ASSERT(frag); ++ ++ havr->sym_frag = frag; ++ return TRUE; ++} ++ ++static bfd_boolean ++analyze_relocations(struct bfd_link_info *info) ++{ ++ bfd *abfd; ++ asection *sec; ++ ++ /* Divide all relaxable sections into fragments */ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ { ++ if (!(elf_elfheader(abfd)->e_flags & EF_AVR32_LINKRELAX)) ++ { ++ if (!(*info->callbacks->warning) ++ (info, _("input is not relaxable"), NULL, abfd, NULL, 0)) ++ return FALSE; ++ continue; ++ } ++ ++ for (sec = abfd->sections; sec; sec = sec->next) ++ { ++ struct avr32_relax_data *rd; ++ struct fragment *frag; ++ Elf_Internal_Rela *relocs; ++ unsigned int i; ++ bfd_boolean ret = TRUE; ++ ++ if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) ++ continue; ++ ++ rd = avr32_relax_data(sec); ++ ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ return FALSE; ++ ++ qsort(relocs, sec->reloc_count, sizeof(Elf_Internal_Rela), ++ internal_reloc_compare); ++ ++ for (i = 0; i < sec->reloc_count; i++) ++ { ++ enum relax_state_id state; ++ ++ ret = FALSE; ++ state = get_initial_relax_state(abfd, sec, info, &relocs[i]); ++ if (state == RS_ERROR) ++ break; ++ ++ if (state) ++ { ++ frag = new_frag(abfd, sec, rd, state, &relocs[i]); ++ if (!frag) ++ break; ++ ++ pin_internal_relocs(sec, relocs); ++ rd->is_relaxable = TRUE; ++ } ++ ++ ret = TRUE; ++ } ++ ++ release_internal_relocs(sec, relocs); ++ if (!ret) ++ return ret; ++ ++ if (rd->is_relaxable) ++ { ++ frag = new_frag(abfd, sec, rd, RS_NONE, NULL); ++ if (!frag) ++ return FALSE; ++ } ++ } ++ } ++ ++ /* Link each global symbol to the fragment where it's defined. */ ++ elf_link_hash_traverse(elf_hash_table(info), global_sym_set_frag, info); ++ ++ /* Do the same for local symbols. */ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ { ++ Elf_Internal_Sym *isymbuf, *isym; ++ struct fragment **local_sym_frag; ++ unsigned int i, sym_count; ++ ++ sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; ++ if (sym_count == 0) ++ continue; ++ ++ local_sym_frag = bfd_zalloc(abfd, sym_count * sizeof(struct fragment *)); ++ if (!local_sym_frag) ++ return FALSE; ++ elf_tdata(abfd)->local_sym_frag = local_sym_frag; ++ ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ return FALSE; ++ ++ for (i = 0; i < sym_count; i++) ++ { ++ struct avr32_relax_data *rd; ++ struct fragment *frag; ++ asection *sec; ++ ++ isym = &isymbuf[i]; ++ ++ sec = bfd_section_from_elf_index(abfd, isym->st_shndx); ++ if (!sec) ++ continue; ++ ++ rd = avr32_relax_data(sec); ++ if (!rd->is_relaxable) ++ continue; ++ ++ frag = find_frag(sec, isym->st_value); ++ BFD_ASSERT(frag); ++ ++ local_sym_frag[i] = frag; ++ } ++ ++ release_local_syms(abfd, isymbuf); ++ } ++ ++ /* And again for relocs with addends and constant pool references */ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ for (sec = abfd->sections; sec; sec = sec->next) ++ { ++ Elf_Internal_Rela *relocs; ++ bfd_boolean ret; ++ ++ if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) ++ continue; ++ ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ return FALSE; ++ ++ ret = allocate_reloc_data(abfd, sec, relocs, info); ++ ++ release_internal_relocs(sec, relocs); ++ if (ret == FALSE) ++ return ret; ++ } ++ ++ return TRUE; ++} ++ ++static bfd_boolean ++rs_is_good_enough(const struct relax_state *rs, struct fragment *frag, ++ bfd_vma symval, bfd_vma addr, struct got_entry *got, ++ struct avr32_reloc_data *ind_data, ++ bfd_signed_vma offset_adjust) ++{ ++ bfd_signed_vma target = 0; ++ ++ switch (rs->reftype) ++ { ++ case REF_ABSOLUTE: ++ target = symval; ++ break; ++ case REF_PCREL: ++ target = symval - addr; ++ break; ++ case REF_CPOOL: ++ /* cpool frags are always in the same section and always after ++ all frags referring to it. So it's always correct to add in ++ offset_adjust here. */ ++ target = (ind_data->add_frag->offset + ind_data->add_frag->offset_adjust ++ + offset_adjust - frag->offset - frag->offset_adjust); ++ break; ++ case REF_GOT: ++ target = got->offset; ++ break; ++ default: ++ abort(); ++ } ++ ++ if (target >= rs->range_min && target <= rs->range_max) ++ return TRUE; ++ else ++ return FALSE; ++} ++ ++static bfd_boolean ++avr32_size_frags(bfd *abfd, asection *sec, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct avr32_relax_data *rd; ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Rela *relocs = NULL; ++ Elf_Internal_Sym *isymbuf = NULL; ++ struct got_entry **local_got_ents; ++ struct fragment **local_sym_frag; ++ bfd_boolean ret = FALSE; ++ bfd_signed_vma delta = 0; ++ unsigned int i; ++ ++ htab = avr32_elf_hash_table(info); ++ rd = avr32_relax_data(sec); ++ ++ if (sec == htab->sgot) ++ { ++ RDBG("Relaxing GOT section (vma: 0x%lx)\n", ++ sec->output_section->vma + sec->output_offset); ++ if (assign_got_offsets(htab)) ++ htab->repeat_pass = TRUE; ++ return TRUE; ++ } ++ ++ if (!rd->is_relaxable) ++ return TRUE; ++ ++ if (!sec->rawsize) ++ sec->rawsize = sec->size; ++ ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ goto out; ++ ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ goto out; ++ ++ local_got_ents = elf_local_got_ents(abfd); ++ local_sym_frag = elf_tdata(abfd)->local_sym_frag; ++ ++ RDBG("size_frags: %s<%s>\n vma: 0x%08lx, size: 0x%08lx\n", ++ abfd->filename, sec->name, ++ sec->output_section->vma + sec->output_offset, sec->size); ++ ++ for (i = 0; i < rd->frag_count; i++) ++ { ++ struct fragment *frag = &rd->frag[i]; ++ struct avr32_reloc_data *r_data = NULL, *ind_data = NULL; ++ const struct relax_state *state, *next_state; ++ struct fragment *target_frag = NULL; ++ asection *sym_sec = NULL; ++ Elf_Internal_Rela *rela; ++ struct got_entry *got; ++ bfd_vma symval, r_offset, addend, addr; ++ bfd_signed_vma size_adjust = 0, distance; ++ unsigned long r_symndx; ++ bfd_boolean defined = TRUE, dynamic = FALSE; ++ unsigned char sym_type; ++ ++ frag->offset_adjust += delta; ++ state = next_state = &relax_state[frag->state]; ++ rela = frag->rela; ++ ++ BFD_ASSERT(state->id == frag->state); ++ ++ RDBG(" 0x%04lx%c%d: %s [size %ld]", rela ? rela->r_offset : sec->rawsize, ++ (frag->offset_adjust < 0)?'-':'+', ++ abs(frag->offset_adjust), state->name, state->size); ++ ++ if (!rela) ++ { ++ RDBG(": no reloc, ignoring\n"); ++ continue; ++ } ++ ++ BFD_ASSERT((unsigned int)(rela - relocs) < sec->reloc_count); ++ BFD_ASSERT(state != RS_NONE); ++ ++ r_offset = rela->r_offset + frag->offset_adjust; ++ addr = sec->output_section->vma + sec->output_offset + r_offset; ++ ++ switch (frag->state) ++ { ++ case RS_ALIGN: ++ size_adjust = ((addr + (1 << rela->r_addend) - 1) ++ & ~((1 << rela->r_addend) - 1)); ++ size_adjust -= (sec->output_section->vma + sec->output_offset ++ + frag->offset + frag->offset_adjust ++ + frag->size + frag->size_adjust); ++ ++ RDBG(": adjusting size %lu -> %lu\n", frag->size + frag->size_adjust, ++ frag->size + frag->size_adjust + size_adjust); ++ break; ++ ++ case RS_CPENT: ++ if (frag->refcount == 0 && frag->size_adjust == 0) ++ { ++ RDBG(": discarding frag\n"); ++ size_adjust = -4; ++ } ++ else if (frag->refcount > 0 && frag->size_adjust < 0) ++ { ++ RDBG(": un-discarding frag\n"); ++ size_adjust = 4; ++ } ++ break; ++ ++ default: ++ if (rd->reloc_data) ++ r_data = &rd->reloc_data[frag->rela - relocs]; ++ ++ /* If this is a cpool reference, we want the symbol that the ++ cpool entry refers to, not the symbol for the cpool entry ++ itself, as we already know what frag it's in. */ ++ if (relax_state[frag->initial_state].reftype == REF_CPOOL) ++ { ++ Elf_Internal_Rela *irela = r_data->add_frag->rela; ++ ++ r_symndx = ELF_R_SYM(irela->r_info); ++ addend = irela->r_addend; ++ ++ /* The constant pool must be in the same section as the ++ reloc referring to it. */ ++ BFD_ASSERT((unsigned long)(irela - relocs) < sec->reloc_count); ++ ++ ind_data = r_data; ++ r_data = &rd->reloc_data[irela - relocs]; ++ } ++ else ++ { ++ r_symndx = ELF_R_SYM(rela->r_info); ++ addend = rela->r_addend; ++ } ++ ++ /* Get the value of the symbol referred to by the reloc. */ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ Elf_Internal_Sym *isym; ++ ++ isym = isymbuf + r_symndx; ++ symval = 0; ++ ++ RDBG(" local sym %lu: ", r_symndx); ++ ++ if (isym->st_shndx == SHN_UNDEF) ++ defined = FALSE; ++ else if (isym->st_shndx == SHN_ABS) ++ sym_sec = bfd_abs_section_ptr; ++ else if (isym->st_shndx == SHN_COMMON) ++ sym_sec = bfd_com_section_ptr; ++ else ++ sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); ++ ++ symval = isym->st_value; ++ sym_type = ELF_ST_TYPE(isym->st_info); ++ target_frag = local_sym_frag[r_symndx]; ++ ++ if (local_got_ents) ++ got = local_got_ents[r_symndx]; ++ else ++ got = NULL; ++ } ++ else ++ { ++ /* Global symbol */ ++ unsigned long index; ++ struct elf_link_hash_entry *h; ++ struct elf_avr32_link_hash_entry *havr; ++ ++ index = r_symndx - symtab_hdr->sh_info; ++ h = elf_sym_hashes(abfd)[index]; ++ BFD_ASSERT(h != NULL); ++ ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; ++ ++ havr = (struct elf_avr32_link_hash_entry *)h; ++ got = h->got.glist; ++ ++ symval = 0; ++ ++ RDBG(" %s: ", h->root.root.string); ++ ++ if (h->root.type != bfd_link_hash_defined ++ && h->root.type != bfd_link_hash_defweak) ++ { ++ RDBG("(undef)"); ++ defined = FALSE; ++ } ++ else if ((info->shared && !info->symbolic && h->dynindx != -1) ++ || (htab->root.dynamic_sections_created ++ && h->def_dynamic && !h->def_regular)) ++ { ++ RDBG("(dynamic)"); ++ dynamic = TRUE; ++ sym_sec = h->root.u.def.section; ++ } ++ else ++ { ++ sym_sec = h->root.u.def.section; ++ symval = h->root.u.def.value; ++ target_frag = havr->sym_frag; ++ } ++ ++ sym_type = h->type; ++ } ++ ++ /* Thanks to elf32-ppc for this one. */ ++ if (sym_sec && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE) ++ { ++ /* At this stage in linking, no SEC_MERGE symbol has been ++ adjusted, so all references to such symbols need to be ++ passed through _bfd_merged_section_offset. (Later, in ++ relocate_section, all SEC_MERGE symbols *except* for ++ section symbols have been adjusted.) ++ ++ SEC_MERGE sections are not relaxed by us, as they ++ shouldn't contain any code. */ ++ ++ BFD_ASSERT(!target_frag && !(r_data && r_data->add_frag)); ++ ++ /* gas may reduce relocations against symbols in SEC_MERGE ++ sections to a relocation against the section symbol when ++ the original addend was zero. When the reloc is against ++ a section symbol we should include the addend in the ++ offset passed to _bfd_merged_section_offset, since the ++ location of interest is the original symbol. On the ++ other hand, an access to "sym+addend" where "sym" is not ++ a section symbol should not include the addend; Such an ++ access is presumed to be an offset from "sym"; The ++ location of interest is just "sym". */ ++ RDBG("\n MERGE: %s: 0x%lx+0x%lx+0x%lx -> ", ++ (sym_type == STT_SECTION)?"section":"not section", ++ sym_sec->output_section->vma + sym_sec->output_offset, ++ symval, addend); ++ ++ if (sym_type == STT_SECTION) ++ symval += addend; ++ ++ symval = (_bfd_merged_section_offset ++ (abfd, &sym_sec, ++ elf_section_data(sym_sec)->sec_info, symval)); ++ ++ if (sym_type != STT_SECTION) ++ symval += addend; ++ } ++ else ++ symval += addend; ++ ++ if (defined && !dynamic) ++ { ++ RDBG("0x%lx+0x%lx", ++ sym_sec->output_section->vma + sym_sec->output_offset, ++ symval); ++ symval += sym_sec->output_section->vma + sym_sec->output_offset; ++ } ++ ++ if (r_data && r_data->add_frag) ++ /* If the add_frag pointer is set, it means that this reloc ++ has an addend that may be affected by relaxation. */ ++ target_frag = r_data->add_frag; ++ ++ if (target_frag) ++ { ++ symval += target_frag->offset_adjust; ++ ++ /* If target_frag comes after this frag in the same ++ section, we should assume that it will be moved by ++ the same amount we are. */ ++ if ((target_frag - rd->frag) < (int)rd->frag_count ++ && target_frag > frag) ++ symval += delta; ++ } ++ ++ distance = symval - addr; ++ ++ /* First, try to make a direct reference. If the symbol is ++ dynamic or undefined, we must take care not to change its ++ reference type, that is, we can't make it direct. ++ ++ Also, it seems like some sections may actually be resized ++ after the relaxation code is done, so we can't really ++ trust that our "distance" is correct. There's really no ++ easy solution to this problem, so we'll just disallow ++ direct references to SEC_DATA sections. ++ ++ Oh, and .bss isn't actually SEC_DATA, so we disallow ++ !SEC_HAS_CONTENTS as well. */ ++ if (!dynamic && defined ++#ifndef DHRYSTONE_FIX ++ && !(sym_sec->flags & SEC_DATA) ++#endif ++ && (sym_sec->flags & SEC_HAS_CONTENTS) ++ && next_state->direct) ++ { ++ next_state = &relax_state[next_state->direct]; ++ RDBG(" D-> %s", next_state->name); ++ } ++ ++ /* Iterate backwards until we find a state that fits. */ ++ while (next_state->prev ++ && !rs_is_good_enough(next_state, frag, symval, addr, ++ got, ind_data, delta)) ++ { ++ next_state = &relax_state[next_state->prev]; ++ RDBG(" P-> %s", next_state->name); ++ } ++ ++ /* Then try to find the best possible state. */ ++ while (next_state->next) ++ { ++ const struct relax_state *candidate; ++ ++ candidate = &relax_state[next_state->next]; ++ if (!rs_is_good_enough(candidate, frag, symval, addr, got, ++ ind_data, delta)) ++ break; ++ ++ next_state = candidate; ++ RDBG(" N-> %s", next_state->name); ++ } ++ ++ RDBG(" [size %ld]\n", next_state->size); ++ ++ BFD_ASSERT(next_state->id); ++ BFD_ASSERT(!dynamic || next_state->reftype == REF_GOT); ++ ++ size_adjust = next_state->size - state->size; ++ ++ /* There's a theoretical possibility that shrinking one frag ++ may cause another to grow, which may cause the first one to ++ grow as well, and we're back where we started. Avoid this ++ scenario by disallowing a frag that has grown to ever ++ shrink again. */ ++ if (state->reftype == REF_GOT && next_state->reftype != REF_GOT) ++ { ++ if (frag->has_grown) ++ next_state = state; ++ else ++ unref_got_entry(htab, got); ++ } ++ else if (state->reftype != REF_GOT && next_state->reftype == REF_GOT) ++ { ++ ref_got_entry(htab, got); ++ frag->has_grown = TRUE; ++ } ++ else if (state->reftype == REF_CPOOL ++ && next_state->reftype != REF_CPOOL) ++ { ++ if (frag->has_grown) ++ next_state = state; ++ else ++ ind_data->add_frag->refcount--; ++ } ++ else if (state->reftype != REF_CPOOL ++ && next_state->reftype == REF_CPOOL) ++ { ++ ind_data->add_frag->refcount++; ++ frag->has_grown = TRUE; ++ } ++ else ++ { ++ if (frag->has_grown && size_adjust < 0) ++ next_state = state; ++ else if (size_adjust > 0) ++ frag->has_grown = TRUE; ++ } ++ ++ size_adjust = next_state->size - state->size; ++ frag->state = next_state->id; ++ ++ break; ++ } ++ ++ if (size_adjust) ++ htab->repeat_pass = TRUE; ++ ++ frag->size_adjust += size_adjust; ++ sec->size += size_adjust; ++ delta += size_adjust; ++ ++ BFD_ASSERT((frag->offset + frag->offset_adjust ++ + frag->size + frag->size_adjust) ++ == (frag[1].offset + frag[1].offset_adjust + delta)); ++ } ++ ++ ret = TRUE; ++ ++ out: ++ release_local_syms(abfd, isymbuf); ++ release_internal_relocs(sec, relocs); ++ return ret; ++} ++ ++static bfd_boolean ++adjust_global_symbol(struct elf_avr32_link_hash_entry *havr, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED) ++{ ++ struct elf_link_hash_entry *h = &havr->root; ++ ++ if (havr->sym_frag && (h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak)) ++ { ++ RDBG("adjust_global_symbol: %s 0x%08lx -> 0x%08lx\n", ++ h->root.root.string, h->root.u.def.value, ++ h->root.u.def.value + havr->sym_frag->offset_adjust); ++ h->root.u.def.value += havr->sym_frag->offset_adjust; ++ } ++ return TRUE; ++} ++ ++static bfd_boolean ++adjust_syms(struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ bfd *abfd; ++ ++ htab = avr32_elf_hash_table(info); ++ elf_link_hash_traverse(&htab->root, adjust_global_symbol, info); ++ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ { ++ Elf_Internal_Sym *isymbuf; ++ struct fragment **local_sym_frag, *frag; ++ unsigned int i, sym_count; ++ ++ sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; ++ if (sym_count == 0) ++ continue; ++ ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ return FALSE; ++ ++ local_sym_frag = elf_tdata(abfd)->local_sym_frag; ++ ++ for (i = 0; i < sym_count; i++) ++ { ++ frag = local_sym_frag[i]; ++ if (frag) ++ { ++ RDBG("adjust_local_symbol: %s[%u] 0x%08lx -> 0x%08lx\n", ++ abfd->filename, i, isymbuf[i].st_value, ++ isymbuf[i].st_value + frag->offset_adjust); ++ isymbuf[i].st_value += frag->offset_adjust; ++ } ++ } ++ ++ release_local_syms(abfd, isymbuf); ++ } ++ ++ htab->symbols_adjusted = TRUE; ++ return TRUE; ++} ++ ++static bfd_boolean ++adjust_relocs(bfd *abfd, asection *sec, struct bfd_link_info *info) ++{ ++ struct avr32_relax_data *rd; ++ Elf_Internal_Rela *relocs; ++ Elf_Internal_Shdr *symtab_hdr; ++ unsigned int i; ++ bfd_boolean ret = FALSE; ++ ++ rd = avr32_relax_data(sec); ++ if (!rd->reloc_data) ++ return TRUE; ++ ++ RDBG("adjust_relocs: %s<%s> (count: %u)\n", abfd->filename, sec->name, ++ sec->reloc_count); ++ ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ return FALSE; ++ ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ ++ for (i = 0; i < sec->reloc_count; i++) ++ { ++ Elf_Internal_Rela *rela = &relocs[i]; ++ struct avr32_reloc_data *r_data = &rd->reloc_data[i]; ++ struct fragment *sym_frag; ++ unsigned long r_symndx; ++ ++ if (r_data->add_frag) ++ { ++ r_symndx = ELF_R_SYM(rela->r_info); ++ ++ if (r_symndx < symtab_hdr->sh_info) ++ sym_frag = elf_tdata(abfd)->local_sym_frag[r_symndx]; ++ else ++ { ++ struct elf_link_hash_entry *h; ++ ++ h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; ++ ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; ++ ++ BFD_ASSERT(h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak); ++ ++ sym_frag = ((struct elf_avr32_link_hash_entry *)h)->sym_frag; ++ } ++ ++ RDBG(" addend: 0x%08lx -> 0x%08lx\n", ++ rela->r_addend, ++ rela->r_addend + r_data->add_frag->offset_adjust ++ - (sym_frag ? sym_frag->offset_adjust : 0)); ++ ++ /* If this is against a section symbol, we won't find any ++ sym_frag, so we'll just adjust the addend. */ ++ rela->r_addend += r_data->add_frag->offset_adjust; ++ if (sym_frag) ++ rela->r_addend -= sym_frag->offset_adjust; ++ ++ if (r_data->sub_frag) ++ { ++ bfd_byte *contents; ++ bfd_signed_vma diff; ++ ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ goto out; ++ ++ /* I realize now that sub_frag is misnamed. It's ++ actually add_frag which is subtracted in this ++ case... */ ++ diff = bfd_get_signed_32(abfd, contents + rela->r_offset); ++ diff += (r_data->sub_frag->offset_adjust ++ - r_data->add_frag->offset_adjust); ++ bfd_put_32(abfd, diff, contents + rela->r_offset); ++ ++ RDBG(" 0x%lx: DIFF32 updated: 0x%lx\n", rela->r_offset, diff); ++ ++ release_contents(sec, contents); ++ } ++ } ++ else ++ BFD_ASSERT(!r_data->sub_frag); ++ } ++ ++ ret = TRUE; ++ ++ out: ++ release_internal_relocs(sec, relocs); ++ return ret; ++} ++ ++static bfd_boolean ++avr32_move_data(bfd *abfd, asection *sec, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct avr32_relax_data *rd; ++ struct fragment *frag, *fragend; ++ Elf_Internal_Rela *relocs = NULL; ++ bfd_byte *contents = NULL; ++ unsigned int i; ++ bfd_boolean ret = FALSE; ++ ++ htab = avr32_elf_hash_table(info); ++ rd = avr32_relax_data(sec); ++ ++ if (!htab->symbols_adjusted) ++ if (!adjust_syms(info)) ++ return FALSE; ++ ++ if (rd->is_relaxable) ++ { ++ /* Resize the section first, so that we can be sure that enough ++ memory is allocated in case the section has grown. */ ++ if (sec->size > sec->rawsize ++ && elf_section_data(sec)->this_hdr.contents) ++ { ++ /* We must not use cached data if the section has grown. */ ++ free(elf_section_data(sec)->this_hdr.contents); ++ elf_section_data(sec)->this_hdr.contents = NULL; ++ } ++ ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ goto out; ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ goto out; ++ ++ fragend = rd->frag + rd->frag_count; ++ ++ RDBG("move_data: %s<%s>: relocs=%p, contents=%p\n", ++ abfd->filename, sec->name, relocs, contents); ++ ++ /* First, move the data into place. We must take care to move ++ frags in the right order so that we don't accidentally ++ overwrite parts of the next frag. */ ++ for (frag = rd->frag; frag < fragend; frag++) ++ { ++ RDBG(" 0x%08lx%c0x%x: size 0x%lx%c0x%x\n", ++ frag->offset, frag->offset_adjust >= 0 ? '+' : '-', ++ abs(frag->offset_adjust), ++ frag->size, frag->size_adjust >= 0 ? '+' : '-', ++ abs(frag->size_adjust)); ++ if (frag->offset_adjust > 0) ++ { ++ struct fragment *prev = frag - 1; ++ struct fragment *last; ++ ++ for (last = frag; last < fragend && last->offset_adjust > 0; ++ last++) ; ++ ++ if (last == fragend) ++ last--; ++ ++ for (frag = last; frag != prev; frag--) ++ { ++ if (frag->offset_adjust ++ && frag->size + frag->size_adjust > 0) ++ { ++ RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", ++ frag->offset, frag->offset + frag->offset_adjust, ++ frag->size + frag->size_adjust); ++ memmove(contents + frag->offset + frag->offset_adjust, ++ contents + frag->offset, ++ frag->size + frag->size_adjust); ++ } ++ } ++ frag = last; ++ } ++ else if (frag->offset_adjust && frag->size + frag->size_adjust > 0) ++ { ++ RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", ++ frag->offset, frag->offset + frag->offset_adjust, ++ frag->size + frag->size_adjust); ++ memmove(contents + frag->offset + frag->offset_adjust, ++ contents + frag->offset, ++ frag->size + frag->size_adjust); ++ } ++ } ++ ++ i = 0; ++ ++ for (frag = rd->frag; frag < fragend; frag++) ++ { ++ const struct relax_state *state, *istate; ++ struct avr32_reloc_data *r_data = NULL; ++ ++ istate = &relax_state[frag->initial_state]; ++ state = &relax_state[frag->state]; ++ ++ if (rd->reloc_data) ++ r_data = &rd->reloc_data[frag->rela - relocs]; ++ ++ BFD_ASSERT((long)(frag->size + frag->size_adjust) >= 0); ++ BFD_ASSERT(state->reftype != REF_CPOOL ++ || r_data->add_frag->refcount > 0); ++ ++ if (istate->reftype == REF_CPOOL && state->reftype != REF_CPOOL) ++ { ++ struct fragment *ifrag; ++ ++ /* An indirect reference through the cpool has been ++ converted to a direct reference. We must update the ++ reloc to point to the symbol itself instead of the ++ constant pool entry. The reloc type will be updated ++ later. */ ++ ifrag = r_data->add_frag; ++ frag->rela->r_info = ifrag->rela->r_info; ++ frag->rela->r_addend = ifrag->rela->r_addend; ++ ++ /* Copy the reloc data so the addend will be adjusted ++ correctly later. */ ++ *r_data = rd->reloc_data[ifrag->rela - relocs]; ++ } ++ ++ /* Move all relocs covered by this frag. */ ++ if (frag->rela) ++ BFD_ASSERT(&relocs[i] <= frag->rela); ++ else ++ BFD_ASSERT((frag + 1) == fragend && frag->state == RS_NONE); ++ ++ if (frag == rd->frag) ++ BFD_ASSERT(i == 0); ++ else ++ BFD_ASSERT(&relocs[i] > frag[-1].rela); ++ ++ /* If non-null, frag->rela is the last relocation in the ++ fragment. frag->rela can only be null in the last ++ fragment, so in that case, we'll just do the rest. */ ++ for (; (i < sec->reloc_count ++ && (!frag->rela || &relocs[i] <= frag->rela)); i++) ++ { ++ RDBG("[%4u] r_offset 0x%08lx -> 0x%08lx\n", i, relocs[i].r_offset, ++ relocs[i].r_offset + frag->offset_adjust); ++ relocs[i].r_offset += frag->offset_adjust; ++ } ++ ++ if (frag->refcount == 0) ++ { ++ /* If this frag is to be discarded, make sure we won't ++ relocate it later on. */ ++ BFD_ASSERT(frag->state == RS_CPENT); ++ frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), ++ R_AVR32_NONE); ++ } ++ else if (frag->state == RS_ALIGN) ++ { ++ bfd_vma addr, addr_end; ++ ++ addr = frag->rela->r_offset; ++ addr_end = (frag->offset + frag->offset_adjust ++ + frag->size + frag->size_adjust); ++ ++ /* If the section is executable, insert NOPs. ++ Otherwise, insert zeroes. */ ++ if (sec->flags & SEC_CODE) ++ { ++ if (addr & 1) ++ { ++ bfd_put_8(abfd, 0, contents + addr); ++ addr++; ++ } ++ ++ BFD_ASSERT(!((addr_end - addr) & 1)); ++ ++ while (addr < addr_end) ++ { ++ bfd_put_16(abfd, NOP_OPCODE, contents + addr); ++ addr += 2; ++ } ++ } ++ else ++ memset(contents + addr, 0, addr_end - addr); ++ } ++ else if (state->opcode_mask) ++ { ++ bfd_vma insn; ++ ++ /* Update the opcode and the relocation type unless it's a ++ "special" relax state (i.e. RS_NONE, RS_ALIGN or ++ RS_CPENT.), in which case the opcode mask is zero. */ ++ insn = bfd_get_32(abfd, contents + frag->rela->r_offset); ++ insn &= ~state->opcode_mask; ++ insn |= state->opcode; ++ RDBG(" 0x%lx: inserting insn %08lx\n", ++ frag->rela->r_offset, insn); ++ bfd_put_32(abfd, insn, contents + frag->rela->r_offset); ++ ++ frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), ++ state->r_type); ++ } ++ ++ if ((frag + 1) == fragend) ++ BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust ++ + frag->size_adjust) == sec->size); ++ else ++ BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust ++ + frag->size_adjust) ++ == (frag[1].offset + frag[1].offset_adjust)); ++ } ++ } ++ ++ /* Adjust reloc addends and DIFF32 differences */ ++ if (!adjust_relocs(abfd, sec, info)) ++ return FALSE; ++ ++ ret = TRUE; ++ ++ out: ++ release_contents(sec, contents); ++ release_internal_relocs(sec, relocs); ++ return ret; ++} ++ ++static bfd_boolean ++avr32_elf_relax_section(bfd *abfd, asection *sec, ++ struct bfd_link_info *info, bfd_boolean *again) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct avr32_relax_data *rd; ++ ++ *again = FALSE; ++ if (info->relocatable) ++ return TRUE; ++ ++ htab = avr32_elf_hash_table(info); ++ if ((!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) ++ && sec != htab->sgot) ++ return TRUE; ++ ++ if (!htab->relocations_analyzed) ++ { ++ if (!analyze_relocations(info)) ++ return FALSE; ++ htab->relocations_analyzed = TRUE; ++ } ++ ++ rd = avr32_relax_data(sec); ++ ++ if (rd->iteration != htab->relax_iteration) ++ { ++ if (!htab->repeat_pass) ++ htab->relax_pass++; ++ htab->relax_iteration++; ++ htab->repeat_pass = FALSE; ++ } ++ ++ rd->iteration++; ++ ++ switch (htab->relax_pass) ++ { ++ case RELAX_PASS_SIZE_FRAGS: ++ if (!avr32_size_frags(abfd, sec, info)) ++ return FALSE; ++ *again = TRUE; ++ break; ++ case RELAX_PASS_MOVE_DATA: ++ if (!avr32_move_data(abfd, sec, info)) ++ return FALSE; ++ break; ++ } ++ ++ return TRUE; ++} ++ ++ ++/* Relocation */ ++ ++static bfd_reloc_status_type ++avr32_check_reloc_value(asection *sec, Elf_Internal_Rela *rela, ++ bfd_signed_vma relocation, reloc_howto_type *howto); ++static bfd_reloc_status_type ++avr32_final_link_relocate(reloc_howto_type *howto, bfd *input_bfd, ++ asection *input_section, bfd_byte *contents, ++ Elf_Internal_Rela *rel, bfd_vma value); ++static bfd_boolean ++avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, ++ bfd *input_bfd, asection *input_section, ++ bfd_byte *contents, Elf_Internal_Rela *relocs, ++ Elf_Internal_Sym *local_syms, ++ asection **local_sections); ++ ++ ++#define symbol_address(symbol) \ ++ symbol->value + symbol->section->output_section->vma \ ++ + symbol->section->output_offset ++ ++#define avr32_elf_insert_field(size, field, abfd, reloc_entry, data) \ ++ do \ ++ { \ ++ unsigned long x; \ ++ x = bfd_get_##size (abfd, data + reloc_entry->address); \ ++ x &= ~reloc_entry->howto->dst_mask; \ ++ x |= field & reloc_entry->howto->dst_mask; \ ++ bfd_put_##size (abfd, (bfd_vma) x, data + reloc_entry->address); \ ++ } \ ++ while(0) ++ ++static bfd_reloc_status_type ++avr32_check_reloc_value(asection *sec ATTRIBUTE_UNUSED, ++ Elf_Internal_Rela *rela ATTRIBUTE_UNUSED, ++ bfd_signed_vma relocation, ++ reloc_howto_type *howto) ++{ ++ bfd_vma reloc_u; ++ ++ /* We take "complain_overflow_dont" to mean "don't complain on ++ alignment either". This way, we don't have to special-case ++ R_AVR32_HI16 */ ++ if (howto->complain_on_overflow == complain_overflow_dont) ++ return bfd_reloc_ok; ++ ++ /* Check if the value is correctly aligned */ ++ if (relocation & ((1 << howto->rightshift) - 1)) ++ { ++ RDBG("misaligned: %s<%s+%lx>: %s: 0x%lx (align %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, relocation, howto->rightshift); ++ return bfd_reloc_overflow; ++ } ++ ++ /* Now, get rid of the unnecessary bits */ ++ relocation >>= howto->rightshift; ++ reloc_u = (bfd_vma)relocation; ++ ++ switch (howto->complain_on_overflow) ++ { ++ case complain_overflow_unsigned: ++ case complain_overflow_bitfield: ++ if (reloc_u > (unsigned long)((1 << howto->bitsize) - 1)) ++ { ++ RDBG("unsigned overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, reloc_u, howto->bitsize); ++ RDBG("reloc vma: 0x%lx\n", ++ sec->output_section->vma + sec->output_offset + rela->r_offset); ++ ++ return bfd_reloc_overflow; ++ } ++ break; ++ case complain_overflow_signed: ++ if (relocation > (1 << (howto->bitsize - 1)) - 1) ++ { ++ RDBG("signed overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, reloc_u, howto->bitsize); ++ RDBG("reloc vma: 0x%lx\n", ++ sec->output_section->vma + sec->output_offset + rela->r_offset); ++ ++ return bfd_reloc_overflow; ++ } ++ if (relocation < -(1 << (howto->bitsize - 1))) ++ { ++ RDBG("signed overflow: %s<%s+%lx>: %s: -0x%lx (size %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, -relocation, howto->bitsize); ++ RDBG("reloc vma: 0x%lx\n", ++ sec->output_section->vma + sec->output_offset + rela->r_offset); ++ ++ return bfd_reloc_overflow; ++ } ++ break; ++ default: ++ abort(); ++ } ++ ++ return bfd_reloc_ok; ++} ++ ++ ++static bfd_reloc_status_type ++avr32_final_link_relocate(reloc_howto_type *howto, ++ bfd *input_bfd, ++ asection *input_section, ++ bfd_byte *contents, ++ Elf_Internal_Rela *rel, ++ bfd_vma value) ++{ ++ bfd_vma field; ++ bfd_vma relocation; ++ bfd_reloc_status_type status; ++ bfd_byte *p = contents + rel->r_offset; ++ unsigned long x; ++ ++ pr_debug(" (6b) final link relocate\n"); ++ ++ /* Sanity check the address */ ++ if (rel->r_offset > input_section->size) ++ { ++ (*_bfd_error_handler) ++ ("%B: %A+0x%lx: offset out of range (section size: 0x%lx)", ++ input_bfd, input_section, rel->r_offset, input_section->size); ++ return bfd_reloc_outofrange; ++ } ++ ++ relocation = value + rel->r_addend; ++ ++ if (howto->pc_relative) ++ { ++ bfd_vma addr; ++ ++ addr = input_section->output_section->vma ++ + input_section->output_offset + rel->r_offset; ++ addr &= ~0UL << howto->rightshift; ++ relocation -= addr; ++ } ++ ++ switch (ELF32_R_TYPE(rel->r_info)) ++ { ++ case R_AVR32_16N_PCREL: ++ /* sub reg, pc, . - (sym + addend) */ ++ relocation = -relocation; ++ break; ++ } ++ ++ status = avr32_check_reloc_value(input_section, rel, relocation, howto); ++ ++ relocation >>= howto->rightshift; ++ if (howto->bitsize == 21) ++ field = (relocation & 0xffff) ++ | ((relocation & 0x10000) << 4) ++ | ((relocation & 0x1e0000) << 8); ++ else if (howto->bitsize == 12) ++ field = (relocation & 0xff) | ((relocation & 0xf00) << 4); ++ else if (howto->bitsize == 10) ++ field = ((relocation & 0xff) << 4) ++ | ((relocation & 0x300) >> 8); ++ else ++ field = relocation << howto->bitpos; ++ ++ switch (howto->size) ++ { ++ case 0: ++ x = bfd_get_8 (input_bfd, p); ++ x &= ~howto->dst_mask; ++ x |= field & howto->dst_mask; ++ bfd_put_8 (input_bfd, (bfd_vma) x, p); ++ break; ++ case 1: ++ x = bfd_get_16 (input_bfd, p); ++ x &= ~howto->dst_mask; ++ x |= field & howto->dst_mask; ++ bfd_put_16 (input_bfd, (bfd_vma) x, p); ++ break; ++ case 2: ++ x = bfd_get_32 (input_bfd, p); ++ x &= ~howto->dst_mask; ++ x |= field & howto->dst_mask; ++ bfd_put_32 (input_bfd, (bfd_vma) x, p); ++ break; ++ default: ++ abort(); ++ } ++ ++ return status; ++} ++ ++/* (6) Apply relocations to the normal (non-dynamic) sections */ ++ ++static bfd_boolean ++avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, ++ bfd *input_bfd, asection *input_section, ++ bfd_byte *contents, Elf_Internal_Rela *relocs, ++ Elf_Internal_Sym *local_syms, ++ asection **local_sections) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Rela *rel, *relend; ++ struct elf_link_hash_entry **sym_hashes; ++ struct got_entry **local_got_ents; ++ asection *sgot; ++ asection *srelgot; ++ ++ pr_debug("(6) relocate section %s:<%s> (size 0x%lx)\n", ++ input_bfd->filename, input_section->name, input_section->size); ++ ++ /* If we're doing a partial link, we don't have to do anything since ++ we're using RELA relocations */ ++ if (info->relocatable) ++ return TRUE; ++ ++ htab = avr32_elf_hash_table(info); ++ symtab_hdr = &elf_tdata(input_bfd)->symtab_hdr; ++ sym_hashes = elf_sym_hashes(input_bfd); ++ local_got_ents = elf_local_got_ents(input_bfd); ++ sgot = htab->sgot; ++ srelgot = htab->srelgot; ++ ++ relend = relocs + input_section->reloc_count; ++ for (rel = relocs; rel < relend; rel++) ++ { ++ unsigned long r_type, r_symndx; ++ reloc_howto_type *howto; ++ Elf_Internal_Sym *sym = NULL; ++ struct elf_link_hash_entry *h = NULL; ++ asection *sec = NULL; ++ bfd_vma value; ++ bfd_vma offset; ++ bfd_reloc_status_type status; ++ ++ r_type = ELF32_R_TYPE(rel->r_info); ++ r_symndx = ELF32_R_SYM(rel->r_info); ++ ++ if (r_type == R_AVR32_NONE ++ || r_type == R_AVR32_ALIGN ++ || r_type == R_AVR32_DIFF32 ++ || r_type == R_AVR32_DIFF16 ++ || r_type == R_AVR32_DIFF8) ++ continue; ++ ++ /* Sanity check */ ++ if (r_type > R_AVR32_max) ++ { ++ bfd_set_error(bfd_error_bad_value); ++ return FALSE; ++ } ++ ++ howto = &elf_avr32_howto_table[r_type]; ++ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ sym = local_syms + r_symndx; ++ sec = local_sections[r_symndx]; ++ ++ pr_debug(" (6a) processing %s against local symbol %lu\n", ++ howto->name, r_symndx); ++ ++ /* The following function changes rel->r_addend behind our back. */ ++ value = _bfd_elf_rela_local_sym(output_bfd, sym, &sec, rel); ++ pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); ++ } ++ else ++ { ++ if (sym_hashes == NULL) ++ return FALSE; ++ ++ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; ++ ++ pr_debug(" (6a) processing %s against symbol %s\n", ++ howto->name, h->root.root.string); ++ ++ if (h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak) ++ { ++ bfd_boolean dyn; ++ ++ dyn = htab->root.dynamic_sections_created; ++ sec = h->root.u.def.section; ++ ++ if (sec->output_section) ++ value = (h->root.u.def.value ++ + sec->output_section->vma ++ + sec->output_offset); ++ else ++ value = h->root.u.def.value; ++ } ++ else if (h->root.type == bfd_link_hash_undefweak) ++ value = 0; ++ else if (info->unresolved_syms_in_objects == RM_IGNORE ++ && ELF_ST_VISIBILITY(h->other) == STV_DEFAULT) ++ value = 0; ++ else ++ { ++ bfd_boolean err; ++ err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR ++ || ELF_ST_VISIBILITY(h->other) != STV_DEFAULT); ++ if (!info->callbacks->undefined_symbol ++ (info, h->root.root.string, input_bfd, ++ input_section, rel->r_offset, err)) ++ return FALSE; ++ value = 0; ++ } ++ ++ pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); ++ } ++ ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ BFD_ASSERT(sgot != NULL); ++ ++ if (h != NULL) ++ { ++ BFD_ASSERT(h->got.glist->refcount > 0); ++ offset = h->got.glist->offset; ++ ++ BFD_ASSERT(offset < sgot->size); ++ if (!elf_hash_table(info)->dynamic_sections_created ++ || (h->def_regular ++ && (!info->shared ++ || info->symbolic ++ || h->dynindx == -1))) ++ { ++ /* This is actually a static link, or it is a ++ -Bsymbolic link and the symbol is defined ++ locally, or the symbol was forced to be local. */ ++ bfd_put_32(output_bfd, value, sgot->contents + offset); ++ } ++ } ++ else ++ { ++ BFD_ASSERT(local_got_ents && ++ local_got_ents[r_symndx]->refcount > 0); ++ offset = local_got_ents[r_symndx]->offset; ++ ++ /* Local GOT entries don't have relocs. If this is a ++ shared library, the dynamic linker will add the load ++ address to the initial value at startup. */ ++ BFD_ASSERT(offset < sgot->size); ++ pr_debug("Initializing GOT entry at offset %lu: 0x%lx\n", ++ offset, value); ++ bfd_put_32 (output_bfd, value, sgot->contents + offset); ++ } ++ ++ value = sgot->output_offset + offset; ++ pr_debug("GOT reference: New value %lx\n", value); ++ break; ++ ++ case R_AVR32_GOTPC: ++ /* This relocation type is for constant pool entries used in ++ the calculation "Rd = PC - (PC - GOT)", where the ++ constant pool supplies the constant (PC - GOT) ++ offset. The symbol value + addend indicates where the ++ value of PC is taken. */ ++ value -= sgot->output_section->vma; ++ break; ++ ++ case R_AVR32_32_PCREL: ++ /* We must adjust r_offset to account for discarded data in ++ the .eh_frame section. This is probably not the right ++ way to do this, since AFAICS all other architectures do ++ it some other way. I just can't figure out how... */ ++ { ++ bfd_vma r_offset; ++ ++ r_offset = _bfd_elf_section_offset(output_bfd, info, ++ input_section, ++ rel->r_offset); ++ if (r_offset == (bfd_vma)-1 ++ || r_offset == (bfd_vma)-2) ++ continue; ++ rel->r_offset = r_offset; ++ } ++ break; ++ ++ case R_AVR32_32: ++ /* We need to emit a run-time relocation in the following cases: ++ - we're creating a shared library ++ - the symbol is not defined in any regular objects ++ ++ Of course, sections that aren't going to be part of the ++ run-time image will not get any relocs, and undefined ++ symbols won't have any either (only weak undefined ++ symbols should get this far). */ ++ if ((info->shared ++ || (elf_hash_table(info)->dynamic_sections_created ++ && h != NULL ++ && h->def_dynamic ++ && !h->def_regular)) ++ && r_symndx != 0 ++ && (input_section->flags & SEC_ALLOC)) ++ { ++ Elf_Internal_Rela outrel; ++ bfd_byte *loc; ++ bfd_boolean skip, relocate; ++ struct elf_avr32_link_hash_entry *avrh; ++ ++ pr_debug("Going to generate dynamic reloc...\n"); ++ ++ skip = FALSE; ++ relocate = FALSE; ++ ++ outrel.r_offset = _bfd_elf_section_offset(output_bfd, info, ++ input_section, ++ rel->r_offset); ++ if (outrel.r_offset == (bfd_vma)-1) ++ skip = TRUE; ++ else if (outrel.r_offset == (bfd_vma)-2) ++ skip = TRUE, relocate = TRUE; ++ ++ outrel.r_offset += (input_section->output_section->vma ++ + input_section->output_offset); ++ ++ pr_debug(" ... offset %lx, dynindx %ld\n", ++ outrel.r_offset, h ? h->dynindx : -1); ++ ++ if (skip) ++ memset(&outrel, 0, sizeof(outrel)); ++ else ++ { ++ avrh = (struct elf_avr32_link_hash_entry *)h; ++ /* h->dynindx may be -1 if this symbol was marked to ++ become local. */ ++ if (h == NULL ++ || ((info->symbolic || h->dynindx == -1) ++ && h->def_regular)) ++ { ++ relocate = TRUE; ++ outrel.r_info = ELF32_R_INFO(0, R_AVR32_RELATIVE); ++ outrel.r_addend = value + rel->r_addend; ++ pr_debug(" ... R_AVR32_RELATIVE\n"); ++ } ++ else ++ { ++ BFD_ASSERT(h->dynindx != -1); ++ relocate = TRUE; ++ outrel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); ++ outrel.r_addend = rel->r_addend; ++ pr_debug(" ... R_AVR32_GLOB_DAT\n"); ++ } ++ } ++ ++ pr_debug("srelgot reloc_count: %d, size %lu\n", ++ srelgot->reloc_count, srelgot->size); ++ ++ loc = srelgot->contents; ++ loc += srelgot->reloc_count++ * sizeof(Elf32_External_Rela); ++ bfd_elf32_swap_reloca_out(output_bfd, &outrel, loc); ++ ++ BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) ++ <= srelgot->size); ++ ++ if (!relocate) ++ continue; ++ } ++ break; ++ } ++ ++ status = avr32_final_link_relocate(howto, input_bfd, input_section, ++ contents, rel, value); ++ ++ switch (status) ++ { ++ case bfd_reloc_ok: ++ break; ++ ++ case bfd_reloc_overflow: ++ { ++ const char *name; ++ ++ if (h != NULL) ++ name = h->root.root.string; ++ else ++ { ++ name = bfd_elf_string_from_elf_section(input_bfd, ++ symtab_hdr->sh_link, ++ sym->st_name); ++ if (name == NULL) ++ return FALSE; ++ if (*name == '\0') ++ name = bfd_section_name(input_bfd, sec); ++ } ++ if (!((*info->callbacks->reloc_overflow) ++ (info, (h ? &h->root : NULL), name, howto->name, ++ rel->r_addend, input_bfd, input_section, rel->r_offset))) ++ return FALSE; ++ } ++ break; ++ ++ case bfd_reloc_outofrange: ++ default: ++ abort(); ++ } ++ } ++ ++ return TRUE; ++} ++ ++ ++/* Additional processing of dynamic sections after relocation */ ++ ++static bfd_boolean ++avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym); ++static bfd_boolean ++avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info); ++ ++ ++/* (7) Initialize the contents of a dynamic symbol and/or emit ++ relocations for it */ ++ ++static bfd_boolean ++avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct got_entry *got; ++ ++ pr_debug("(7) finish dynamic symbol: %s\n", h->root.root.string); ++ ++ htab = avr32_elf_hash_table(info); ++ got = h->got.glist; ++ ++ if (got && got->refcount > 0) ++ { ++ asection *sgot; ++ asection *srelgot; ++ Elf_Internal_Rela rel; ++ bfd_byte *loc; ++ ++ /* This symbol has an entry in the GOT. Set it up. */ ++ sgot = htab->sgot; ++ srelgot = htab->srelgot; ++ BFD_ASSERT(sgot && srelgot); ++ ++ rel.r_offset = (sgot->output_section->vma ++ + sgot->output_offset ++ + got->offset); ++ ++ /* If this is a static link, or it is a -Bsymbolic link and the ++ symbol is defined locally or was forced to be local because ++ of a version file, we just want to emit a RELATIVE reloc. The ++ entry in the global offset table will already have been ++ initialized in the relocate_section function. */ ++ if ((info->shared ++ && !info->symbolic ++ && h->dynindx != -1) ++ || (htab->root.dynamic_sections_created ++ && h->def_dynamic ++ && !h->def_regular)) ++ { ++ bfd_put_32(output_bfd, 0, sgot->contents + got->offset); ++ rel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); ++ rel.r_addend = 0; ++ ++ pr_debug("GOT reloc R_AVR32_GLOB_DAT, dynindx: %ld\n", h->dynindx); ++ pr_debug(" srelgot reloc_count: %d, size: %lu\n", ++ srelgot->reloc_count, srelgot->size); ++ ++ loc = (srelgot->contents ++ + srelgot->reloc_count++ * sizeof(Elf32_External_Rela)); ++ bfd_elf32_swap_reloca_out(output_bfd, &rel, loc); ++ ++ BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) ++ <= srelgot->size); ++ } ++ } ++ ++ /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute */ ++ if (strcmp(h->root.root.string, "_DYNAMIC") == 0 ++ || strcmp(h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) ++ sym->st_shndx = SHN_ABS; ++ ++ return TRUE; ++} ++ ++/* (8) Do any remaining initialization of the dynamic sections */ ++ ++static bfd_boolean ++avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ asection *sgot, *sdyn; ++ ++ pr_debug("(8) finish dynamic sections\n"); ++ ++ htab = avr32_elf_hash_table(info); ++ sgot = htab->sgot; ++ sdyn = bfd_get_section_by_name(htab->root.dynobj, ".dynamic"); ++ ++ if (htab->root.dynamic_sections_created) ++ { ++ Elf32_External_Dyn *dyncon, *dynconend; ++ ++ BFD_ASSERT(sdyn && sgot && sgot->size >= AVR32_GOT_HEADER_SIZE); ++ ++ dyncon = (Elf32_External_Dyn *)sdyn->contents; ++ dynconend = (Elf32_External_Dyn *)(sdyn->contents + sdyn->size); ++ for (; dyncon < dynconend; dyncon++) ++ { ++ Elf_Internal_Dyn dyn; ++ asection *s; ++ ++ bfd_elf32_swap_dyn_in(htab->root.dynobj, dyncon, &dyn); ++ ++ switch (dyn.d_tag) ++ { ++ default: ++ break; ++ ++ case DT_PLTGOT: ++ s = sgot->output_section; ++ BFD_ASSERT(s != NULL); ++ dyn.d_un.d_ptr = s->vma; ++ bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); ++ break; ++ ++ case DT_AVR32_GOTSZ: ++ s = sgot->output_section; ++ BFD_ASSERT(s != NULL); ++ dyn.d_un.d_val = s->size; ++ bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); ++ break; ++ } ++ } ++ ++ /* Fill in the first two entries in the global offset table */ ++ bfd_put_32(output_bfd, ++ sdyn->output_section->vma + sdyn->output_offset, ++ sgot->contents); ++ ++ /* The runtime linker will fill this one in with the address of ++ the run-time link map */ ++ bfd_put_32(output_bfd, 0, sgot->contents + 4); ++ } ++ ++ if (sgot) ++ elf_section_data(sgot->output_section)->this_hdr.sh_entsize = 4; ++ ++ return TRUE; ++} ++ ++ ++/* AVR32-specific private ELF data */ ++ ++static bfd_boolean ++avr32_elf_set_private_flags(bfd *abfd, flagword flags); ++static bfd_boolean ++avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd); ++static bfd_boolean ++avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd); ++static bfd_boolean ++avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr); ++ ++static bfd_boolean ++avr32_elf_set_private_flags(bfd *abfd, flagword flags) ++{ ++ elf_elfheader(abfd)->e_flags = flags; ++ elf_flags_init(abfd) = TRUE; ++ ++ return TRUE; ++} ++ ++/* Copy backend specific data from one object module to another. */ ++ ++static bfd_boolean ++avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd) ++{ ++ elf_elfheader(obfd)->e_flags = elf_elfheader(ibfd)->e_flags; ++ return TRUE; ++} ++ ++/* Merge backend specific data from an object file to the output ++ object file when linking. */ ++ ++static bfd_boolean ++avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd) ++{ ++ flagword out_flags, in_flags; ++ ++ pr_debug("(0) merge_private_bfd_data: %s -> %s\n", ++ ibfd->filename, obfd->filename); ++ ++ in_flags = elf_elfheader(ibfd)->e_flags; ++ out_flags = elf_elfheader(obfd)->e_flags; ++ ++ if (elf_flags_init(obfd)) ++ { ++ /* If one of the inputs are non-PIC, the output must be ++ considered non-PIC. The same applies to linkrelax. */ ++ if (!(in_flags & EF_AVR32_PIC)) ++ out_flags &= ~EF_AVR32_PIC; ++ if (!(in_flags & EF_AVR32_LINKRELAX)) ++ out_flags &= ~EF_AVR32_LINKRELAX; ++ } ++ else ++ { ++ elf_flags_init(obfd) = TRUE; ++ out_flags = in_flags; ++ } ++ ++ elf_elfheader(obfd)->e_flags = out_flags; ++ ++ return TRUE; ++} ++ ++static bfd_boolean ++avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr) ++{ ++ FILE *file = (FILE *)ptr; ++ unsigned long flags; ++ ++ BFD_ASSERT(abfd != NULL && ptr != NULL); ++ ++ _bfd_elf_print_private_bfd_data(abfd, ptr); ++ ++ flags = elf_elfheader(abfd)->e_flags; ++ ++ fprintf(file, _("private flags = %lx:"), elf_elfheader(abfd)->e_flags); ++ ++ if (flags & EF_AVR32_PIC) ++ fprintf(file, " [PIC]"); ++ if (flags & EF_AVR32_LINKRELAX) ++ fprintf(file, " [linker relaxable]"); ++ ++ flags &= ~(EF_AVR32_PIC | EF_AVR32_LINKRELAX); ++ ++ if (flags) ++ fprintf(file, _("")); ++ ++ fputc('\n', file); ++ ++ return TRUE; ++} ++ ++ ++/* Understanding core dumps */ ++ ++static bfd_boolean ++avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note); ++static bfd_boolean ++avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note); ++ ++static bfd_boolean ++avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note) ++{ ++ /* Linux/AVR32B elf_prstatus */ ++ if (note->descsz != 148) ++ return FALSE; ++ ++ /* pr_cursig */ ++ elf_tdata(abfd)->core_signal = bfd_get_16(abfd, note->descdata + 12); ++ ++ /* pr_pid */ ++ elf_tdata(abfd)->core_pid = bfd_get_32(abfd, note->descdata + 24); ++ ++ /* Make a ".reg/999" section for pr_reg. The size is for 16 ++ general-purpose registers, SR and r12_orig (18 * 4 = 72). */ ++ return _bfd_elfcore_make_pseudosection(abfd, ".reg", 72, ++ note->descpos + 72); ++} ++ ++static bfd_boolean ++avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note) ++{ ++ /* Linux/AVR32B elf_prpsinfo */ ++ if (note->descsz != 128) ++ return FALSE; ++ ++ elf_tdata(abfd)->core_program ++ = _bfd_elfcore_strndup(abfd, note->descdata + 32, 16); ++ elf_tdata(abfd)->core_command ++ = _bfd_elfcore_strndup(abfd, note->descdata + 48, 80); ++ ++ /* Note that for some reason, a spurious space is tacked ++ onto the end of the args in some (at least one anyway) ++ implementations, so strip it off if it exists. */ ++ ++ { ++ char *command = elf_tdata (abfd)->core_command; ++ int n = strlen (command); ++ ++ if (0 < n && command[n - 1] == ' ') ++ command[n - 1] = '\0'; ++ } ++ ++ return TRUE; ++} ++ ++ ++#define ELF_ARCH bfd_arch_avr32 ++#define ELF_MACHINE_CODE EM_AVR32 ++#define ELF_MAXPAGESIZE 0x1000 ++ ++#define TARGET_BIG_SYM bfd_elf32_avr32_vec ++#define TARGET_BIG_NAME "elf32-avr32" ++ ++#define elf_backend_grok_prstatus avr32_elf_grok_prstatus ++#define elf_backend_grok_psinfo avr32_elf_grok_psinfo ++ ++/* Only RELA relocations are used */ ++#define elf_backend_may_use_rel_p 0 ++#define elf_backend_may_use_rela_p 1 ++#define elf_backend_default_use_rela_p 1 ++#define elf_backend_rela_normal 1 ++#define elf_info_to_howto_rel NULL ++#define elf_info_to_howto avr32_info_to_howto ++ ++#define bfd_elf32_bfd_copy_private_bfd_data avr32_elf_copy_private_bfd_data ++#define bfd_elf32_bfd_merge_private_bfd_data avr32_elf_merge_private_bfd_data ++#define bfd_elf32_bfd_set_private_flags avr32_elf_set_private_flags ++#define bfd_elf32_bfd_print_private_bfd_data avr32_elf_print_private_bfd_data ++#define bfd_elf32_new_section_hook avr32_elf_new_section_hook ++ ++#define elf_backend_gc_mark_hook avr32_elf_gc_mark_hook ++#define elf_backend_gc_sweep_hook avr32_elf_gc_sweep_hook ++#define elf_backend_relocate_section avr32_elf_relocate_section ++#define elf_backend_copy_indirect_symbol avr32_elf_copy_indirect_symbol ++#define elf_backend_create_dynamic_sections avr32_elf_create_dynamic_sections ++#define bfd_elf32_bfd_link_hash_table_create avr32_elf_link_hash_table_create ++#define elf_backend_adjust_dynamic_symbol avr32_elf_adjust_dynamic_symbol ++#define elf_backend_size_dynamic_sections avr32_elf_size_dynamic_sections ++#define elf_backend_finish_dynamic_symbol avr32_elf_finish_dynamic_symbol ++#define elf_backend_finish_dynamic_sections avr32_elf_finish_dynamic_sections ++ ++#define bfd_elf32_bfd_relax_section avr32_elf_relax_section ++ ++/* Find out which symbols need an entry in .got. */ ++#define elf_backend_check_relocs avr32_check_relocs ++#define elf_backend_can_refcount 1 ++#define elf_backend_can_gc_sections 1 ++#define elf_backend_plt_readonly 1 ++#define elf_backend_plt_not_loaded 1 ++#define elf_backend_want_plt_sym 0 ++#define elf_backend_plt_alignment 2 ++#define elf_backend_want_dynbss 0 ++#define elf_backend_want_got_plt 0 ++#define elf_backend_want_got_sym 1 ++#define elf_backend_got_header_size AVR32_GOT_HEADER_SIZE ++ ++#include "elf32-target.h" +diff -Nrup binutils-2.17/bfd/elf32-avr32.h binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.h +--- binutils-2.17/bfd/elf32-avr32.h 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.h 2007-09-28 10:30:44.000000000 +0200 +@@ -0,0 +1,23 @@ ++/* AVR32-specific support for 32-bit ELF. ++ Copyright 2007 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of BFD, the Binary File Descriptor library. ++ ++ 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. */ ++ ++void bfd_elf32_avr32_set_options(struct bfd_link_info *info, ++ int direct_data_refs); +diff -Nrup binutils-2.17/bfd/elf-bfd.h binutils-2.17.atmel.1.3.0/bfd/elf-bfd.h +--- binutils-2.17/bfd/elf-bfd.h 2006-03-16 13:20:15.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/elf-bfd.h 2007-03-26 10:20:30.000000000 +0200 +@@ -1307,6 +1307,10 @@ struct elf_obj_tdata + find_nearest_line. */ + struct mips_elf_find_line *find_line_info; + ++ /* Used by AVR32 ELF relaxation code. Contains an array of pointers ++ for each local symbol to the fragment where it is defined. */ ++ struct fragment **local_sym_frag; ++ + /* A place to stash dwarf1 info for this bfd. */ + struct dwarf1_debug *dwarf1_find_line_info; + +diff -Nrup binutils-2.17/bfd/libbfd.h binutils-2.17.atmel.1.3.0/bfd/libbfd.h +--- binutils-2.17/bfd/libbfd.h 2006-03-26 01:38:42.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/libbfd.h 2007-03-26 10:33:41.000000000 +0200 +@@ -1518,6 +1518,47 @@ static const char *const bfd_reloc_code_ + "BFD_RELOC_AVR_LDI", + "BFD_RELOC_AVR_6", + "BFD_RELOC_AVR_6_ADIW", ++ "BFD_RELOC_AVR32_DIFF32", ++ "BFD_RELOC_AVR32_DIFF16", ++ "BFD_RELOC_AVR32_DIFF8", ++ "BFD_RELOC_AVR32_GOT32", ++ "BFD_RELOC_AVR32_GOT16", ++ "BFD_RELOC_AVR32_GOT8", ++ "BFD_RELOC_AVR32_21S", ++ "BFD_RELOC_AVR32_16U", ++ "BFD_RELOC_AVR32_16S", ++ "BFD_RELOC_AVR32_SUB5", ++ "BFD_RELOC_AVR32_8S_EXT", ++ "BFD_RELOC_AVR32_8S", ++ "BFD_RELOC_AVR32_22H_PCREL", ++ "BFD_RELOC_AVR32_18W_PCREL", ++ "BFD_RELOC_AVR32_16B_PCREL", ++ "BFD_RELOC_AVR32_16N_PCREL", ++ "BFD_RELOC_AVR32_14UW_PCREL", ++ "BFD_RELOC_AVR32_11H_PCREL", ++ "BFD_RELOC_AVR32_10UW_PCREL", ++ "BFD_RELOC_AVR32_9H_PCREL", ++ "BFD_RELOC_AVR32_9UW_PCREL", ++ "BFD_RELOC_AVR32_GOTPC", ++ "BFD_RELOC_AVR32_GOTCALL", ++ "BFD_RELOC_AVR32_LDA_GOT", ++ "BFD_RELOC_AVR32_GOT21S", ++ "BFD_RELOC_AVR32_GOT18SW", ++ "BFD_RELOC_AVR32_GOT16S", ++ "BFD_RELOC_AVR32_32_CPENT", ++ "BFD_RELOC_AVR32_CPCALL", ++ "BFD_RELOC_AVR32_16_CP", ++ "BFD_RELOC_AVR32_9W_CP", ++ "BFD_RELOC_AVR32_ALIGN", ++ "BFD_RELOC_AVR32_14UW", ++ "BFD_RELOC_AVR32_10UW", ++ "BFD_RELOC_AVR32_10SW", ++ "BFD_RELOC_AVR32_STHH_W", ++ "BFD_RELOC_AVR32_7UW", ++ "BFD_RELOC_AVR32_6S", ++ "BFD_RELOC_AVR32_6UW", ++ "BFD_RELOC_AVR32_4UH", ++ "BFD_RELOC_AVR32_3U", + "BFD_RELOC_390_12", + "BFD_RELOC_390_GOT12", + "BFD_RELOC_390_PLT32", +diff -Nrup binutils-2.17/bfd/Makefile.am binutils-2.17.atmel.1.3.0/bfd/Makefile.am +--- binutils-2.17/bfd/Makefile.am 2006-06-23 20:17:17.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/Makefile.am 2007-03-26 10:20:30.000000000 +0200 +@@ -3,7 +3,7 @@ + AUTOMAKE_OPTIONS = 1.9 cygnus + + # Uncomment the following line when doing a release. +-RELEASE=y ++# RELEASE=y + + INCDIR = $(srcdir)/../include + CSEARCH = -I. -I$(srcdir) -I$(INCDIR) +@@ -62,6 +62,7 @@ ALL_MACHINES = \ + cpu-arc.lo \ + cpu-arm.lo \ + cpu-avr.lo \ ++ cpu-avr32.lo \ + cpu-bfin.lo \ + cpu-cr16c.lo \ + cpu-cris.lo \ +@@ -234,6 +235,7 @@ BFD32_BACKENDS = \ + elf32-arc.lo \ + elf32-arm.lo \ + elf32-avr.lo \ ++ elf32-avr32.lo \ + elf32-bfin.lo \ + elf32-cr16c.lo \ + elf32-cris.lo \ +@@ -1265,6 +1267,10 @@ elf32-bfin.lo: elf32-bfin.c $(INCDIR)/fi + elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/bfin.h \ + $(INCDIR)/elf/reloc-macros.h elf32-target.h ++elf32-avr32.lo: elf32-avr32.c $(INCDIR)/filenames.h elf-bfd.h \ ++ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ ++ $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/reloc-macros.h \ ++ elf32-target.h + elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \ + $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \ + $(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \ +diff -Nrup binutils-2.17/bfd/Makefile.in binutils-2.17.atmel.1.3.0/bfd/Makefile.in +--- binutils-2.17/bfd/Makefile.in 2006-06-23 20:17:19.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/Makefile.in 2007-03-26 10:30:55.000000000 +0200 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.9.5 from Makefile.am. ++# Makefile.in generated by automake 1.9.6 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -15,8 +15,6 @@ + @SET_MAKE@ + + +-SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES) +- + srcdir = @srcdir@ + top_srcdir = @top_srcdir@ + VPATH = @srcdir@ +@@ -141,6 +139,7 @@ EXEEXT = @EXEEXT@ + EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ + GMOFILES = @GMOFILES@ + GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ + GT_NO = @GT_NO@ + GT_YES = @GT_YES@ + HDEFINES = @HDEFINES@ +@@ -190,10 +189,7 @@ WARN_CFLAGS = @WARN_CFLAGS@ + WIN32LDFLAGS = @WIN32LDFLAGS@ + WIN32LIBADD = @WIN32LIBADD@ + XGETTEXT = @XGETTEXT@ +-ac_ct_AR = @ac_ct_AR@ + ac_ct_CC = @ac_ct_CC@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ + all_backends = @all_backends@ + am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ + am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +@@ -219,6 +215,7 @@ build_vendor = @build_vendor@ + datadir = @datadir@ + datarootdir = @datarootdir@ + docdir = @docdir@ ++dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + host = @host@ + host_alias = @host_alias@ +@@ -233,12 +230,15 @@ install_sh = @install_sh@ + l = @l@ + libdir = @libdir@ + libexecdir = @libexecdir@ ++localedir = @localedir@ + localstatedir = @localstatedir@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ ++psdir = @psdir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ +@@ -253,7 +253,7 @@ wordsize = @wordsize@ + AUTOMAKE_OPTIONS = 1.9 cygnus + + # Uncomment the following line when doing a release. +-RELEASE=y ++# RELEASE=y + INCDIR = $(srcdir)/../include + CSEARCH = -I. -I$(srcdir) -I$(INCDIR) + MKDEP = gcc -MM +@@ -298,6 +298,7 @@ ALL_MACHINES = \ + cpu-arc.lo \ + cpu-arm.lo \ + cpu-avr.lo \ ++ cpu-avr32.lo \ + cpu-bfin.lo \ + cpu-cr16c.lo \ + cpu-cris.lo \ +@@ -471,6 +472,7 @@ BFD32_BACKENDS = \ + elf32-arc.lo \ + elf32-arm.lo \ + elf32-avr.lo \ ++ elf32-avr32.lo \ + elf32-bfin.lo \ + elf32-cr16c.lo \ + elf32-cris.lo \ +@@ -1831,6 +1833,10 @@ elf32-bfin.lo: elf32-bfin.c $(INCDIR)/fi + elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/bfin.h \ + $(INCDIR)/elf/reloc-macros.h elf32-target.h ++elf32-avr32.lo: elf32-avr32.c $(INCDIR)/filenames.h elf-bfd.h \ ++ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ ++ $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/reloc-macros.h \ ++ elf32-target.h + elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \ + $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \ + $(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \ +diff -Nrup binutils-2.17/bfd/reloc.c binutils-2.17.atmel.1.3.0/bfd/reloc.c +--- binutils-2.17/bfd/reloc.c 2006-03-26 01:38:42.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/reloc.c 2007-03-26 10:20:30.000000000 +0200 +@@ -3714,6 +3714,129 @@ ENUMDOC + instructions + + ENUM ++ BFD_RELOC_AVR32_DIFF32 ++ENUMX ++ BFD_RELOC_AVR32_DIFF16 ++ENUMX ++ BFD_RELOC_AVR32_DIFF8 ++ENUMDOC ++ Difference between two labels: L2 - L1. The value of L1 is encoded ++ as sym + addend, while the initial difference after assembly is ++ inserted into the object file by the assembler. ++ENUM ++ BFD_RELOC_AVR32_GOT32 ++ENUMX ++ BFD_RELOC_AVR32_GOT16 ++ENUMX ++ BFD_RELOC_AVR32_GOT8 ++ENUMDOC ++ Reference to a symbol through the Global Offset Table. The linker ++ will allocate an entry for symbol in the GOT and insert the offset ++ of this entry as the relocation value. ++ENUM ++ BFD_RELOC_AVR32_21S ++ENUMX ++ BFD_RELOC_AVR32_16U ++ENUMX ++ BFD_RELOC_AVR32_16S ++ENUMX ++ BFD_RELOC_AVR32_SUB5 ++ENUMX ++ BFD_RELOC_AVR32_8S_EXT ++ENUMX ++ BFD_RELOC_AVR32_8S ++ENUMDOC ++ Normal (non-pc-relative) code relocations. Alignment and signedness ++ is indicated by the suffixes. S means signed, U means unsigned. W ++ means word-aligned, H means halfword-aligned, neither means ++ byte-aligned (no alignment.) SUB5 is the same relocation as 16S. ++ENUM ++ BFD_RELOC_AVR32_22H_PCREL ++ENUMX ++ BFD_RELOC_AVR32_18W_PCREL ++ENUMX ++ BFD_RELOC_AVR32_16B_PCREL ++ENUMX ++ BFD_RELOC_AVR32_16N_PCREL ++ENUMX ++ BFD_RELOC_AVR32_14UW_PCREL ++ENUMX ++ BFD_RELOC_AVR32_11H_PCREL ++ENUMX ++ BFD_RELOC_AVR32_10UW_PCREL ++ENUMX ++ BFD_RELOC_AVR32_9H_PCREL ++ENUMX ++ BFD_RELOC_AVR32_9UW_PCREL ++ENUMDOC ++ PC-relative relocations are signed if neither 'U' nor 'S' is ++ specified. However, we explicitly tack on a 'B' to indicate no ++ alignment, to avoid confusion with data relocs. All of these resolve ++ to sym + addend - offset, except the one with 'N' (negated) suffix. ++ This particular one resolves to offset - sym - addend. ++ENUM ++ BFD_RELOC_AVR32_GOTPC ++ENUMDOC ++ Subtract the link-time address of the GOT from (symbol + addend) ++ and insert the result. ++ENUM ++ BFD_RELOC_AVR32_GOTCALL ++ENUMX ++ BFD_RELOC_AVR32_LDA_GOT ++ENUMX ++ BFD_RELOC_AVR32_GOT21S ++ENUMX ++ BFD_RELOC_AVR32_GOT18SW ++ENUMX ++ BFD_RELOC_AVR32_GOT16S ++ENUMDOC ++ Reference to a symbol through the GOT. The linker will allocate an ++ entry for symbol in the GOT and insert the offset of this entry as ++ the relocation value. addend must be zero. As usual, 'S' means ++ signed, 'W' means word-aligned, etc. ++ENUM ++ BFD_RELOC_AVR32_32_CPENT ++ENUMDOC ++ 32-bit constant pool entry. I don't think 8- and 16-bit entries make ++ a whole lot of sense. ++ENUM ++ BFD_RELOC_AVR32_CPCALL ++ENUMX ++ BFD_RELOC_AVR32_16_CP ++ENUMX ++ BFD_RELOC_AVR32_9W_CP ++ENUMDOC ++ Constant pool references. Some of these relocations are signed, ++ others are unsigned. It doesn't really matter, since the constant ++ pool always comes after the code that references it. ++ENUM ++ BFD_RELOC_AVR32_ALIGN ++ENUMDOC ++ sym must be the absolute symbol. The addend specifies the alignment ++ order, e.g. if addend is 2, the linker must add padding so that the ++ next address is aligned to a 4-byte boundary. ++ENUM ++ BFD_RELOC_AVR32_14UW ++ENUMX ++ BFD_RELOC_AVR32_10UW ++ENUMX ++ BFD_RELOC_AVR32_10SW ++ENUMX ++ BFD_RELOC_AVR32_STHH_W ++ENUMX ++ BFD_RELOC_AVR32_7UW ++ENUMX ++ BFD_RELOC_AVR32_6S ++ENUMX ++ BFD_RELOC_AVR32_6UW ++ENUMX ++ BFD_RELOC_AVR32_4UH ++ENUMX ++ BFD_RELOC_AVR32_3U ++ENUMDOC ++ Code relocations that will never make it to the output file. ++ ++ENUM + BFD_RELOC_390_12 + ENUMDOC + Direct 12 bit. +diff -Nrup binutils-2.17/bfd/targets.c binutils-2.17.atmel.1.3.0/bfd/targets.c +--- binutils-2.17/bfd/targets.c 2006-04-05 14:41:57.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/targets.c 2007-03-26 10:20:30.000000000 +0200 +@@ -553,6 +553,7 @@ extern const bfd_target b_out_vec_little + extern const bfd_target bfd_efi_app_ia32_vec; + extern const bfd_target bfd_efi_app_ia64_vec; + extern const bfd_target bfd_elf32_avr_vec; ++extern const bfd_target bfd_elf32_avr32_vec; + extern const bfd_target bfd_elf32_bfin_vec; + extern const bfd_target bfd_elf32_bfinfdpic_vec; + extern const bfd_target bfd_elf32_big_generic_vec; +@@ -855,6 +856,7 @@ static const bfd_target * const _bfd_tar + &bfd_efi_app_ia64_vec, + #endif + &bfd_elf32_avr_vec, ++ &bfd_elf32_avr32_vec, + &bfd_elf32_bfin_vec, + &bfd_elf32_bfinfdpic_vec, + +diff -Nrup binutils-2.17/binutils/config.in binutils-2.17.atmel.1.3.0/binutils/config.in +--- binutils-2.17/binutils/config.in 2006-02-14 09:59:10.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/binutils/config.in 2007-03-26 10:32:11.000000000 +0200 +@@ -218,7 +218,7 @@ + + /* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be +- automatically deduced at run-time. ++ automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +@@ -260,8 +260,8 @@ + #undef inline + #endif + +-/* Define to `long' if does not define. */ ++/* Define to `long int' if does not define. */ + #undef off_t + +-/* Define to `unsigned' if does not define. */ ++/* Define to `unsigned int' if does not define. */ + #undef size_t +diff -Nrup binutils-2.17/binutils/configure binutils-2.17.atmel.1.3.0/binutils/configure +--- binutils-2.17/binutils/configure 2006-04-06 23:49:29.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/configure 2007-03-26 10:32:09.000000000 +0200 +@@ -1,25 +1,54 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.59. ++# Generated by GNU Autoconf 2.61. + # +-# Copyright (C) 2003 Free Software Foundation, Inc. ++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + # This configure script is free software; the Free Software Foundation + # gives unlimited permission to copy, distribute and modify it. + ## --------------------- ## + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++ ++ ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -29,8 +58,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi ++ + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -44,18 +108,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -63,157 +128,388 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + ++# CDPATH. ++$as_unset CDPATH + +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits + +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh ++if test "x$CONFIG_SHELL" = x; then ++ if (eval ":") 2>/dev/null; then ++ as_have_required=yes ++else ++ as_have_required=no ++fi ++ ++ if test $as_have_required = yes && (eval ": ++(as_func_return () { ++ (exit \$1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. + fi + ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi + +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi + +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test \$exitcode = 0) || { (exit 1); exit 1; } ++ ++( ++ as_lineno_1=\$LINENO ++ as_lineno_2=\$LINENO ++ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && ++ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ++") 2> /dev/null; then ++ : ++else ++ as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH + do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in ++ case $as_dir in + /*) +- if ("$as_dir/$as_base" -c ' ++ for as_base in sh bash ksh sh5; do ++ as_candidate_shells="$as_candidate_shells $as_dir/$as_base" ++ done;; ++ esac ++done ++IFS=$as_save_IFS ++ ++ ++ for as_shell in $as_candidate_shells $SHELL; do ++ # Try only shells that exist, to save several forks. ++ if { test -f "$as_shell" || test -f "$as_shell.exe"; } && ++ { ("$as_shell") 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++: ++_ASEOF ++}; then ++ CONFIG_SHELL=$as_shell ++ as_have_required=yes ++ if { "$as_shell" 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++: ++(as_func_return () { ++ (exit $1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi ++ ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi ++ ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi ++ ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = "$1" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test $exitcode = 0) || { (exit 1); exit 1; } ++ ++( + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } ++ ++_ASEOF ++}; then ++ break ++fi ++ ++fi ++ ++ done ++ ++ if test "x$CONFIG_SHELL" != x; then ++ for as_var in BASH_ENV ENV ++ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++ done ++ export CONFIG_SHELL ++ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} ++fi ++ ++ ++ if test $as_have_required = no; then ++ echo This script requires a shell more modern than all the ++ echo shells that I found on your system. Please install a ++ echo modern shell, or manually run the script under such a ++ echo shell if you do have one. ++ { (exit 1); exit 1; } ++fi ++ ++ ++fi ++ ++fi ++ ++ ++ ++(eval "as_func_return () { ++ (exit \$1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi ++ ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi ++ ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi ++ ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test \$exitcode = 0") || { ++ echo No shell found that supports shell functions. ++ echo Please tell autoconf@gnu.org about your system, ++ echo including any error possibly output before this ++ echo message ++} ++ ++ ++ ++ as_lineno_1=$LINENO ++ as_lineno_2=$LINENO ++ test "x$as_lineno_1" != "x$as_lineno_2" && ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || ++ chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -222,7 +518,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -231,39 +548,27 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH + ++exec 7<&0 &1 + + # Name of the host. + # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, + # so uname gets run too. + ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +-exec 6>&1 +- + # + # Initializations. + # + ac_default_prefix=/usr/local ++ac_clean_files= + ac_config_libobj_dir=. ++LIBOBJS= + cross_compiling=no + subdirs= + MFLAGS= + MAKEFLAGS= + SHELL=${CONFIG_SHELL-/bin/sh} + +-# Maximum number of lines to put in a shell here document. +-# This variable seems obsolete. It should probably be removed, and +-# only ac_max_sed_lines should be used. +-: ${ac_max_here_lines=38} +- + # Identity of this package. + PACKAGE_NAME= + PACKAGE_TARNAME= +@@ -275,42 +580,193 @@ ac_unique_file="ar.c" + # Factoring default headers for most tests. + ac_includes_default="\ + #include +-#if HAVE_SYS_TYPES_H ++#ifdef HAVE_SYS_TYPES_H + # include + #endif +-#if HAVE_SYS_STAT_H ++#ifdef HAVE_SYS_STAT_H + # include + #endif +-#if STDC_HEADERS ++#ifdef STDC_HEADERS + # include + # include + #else +-# if HAVE_STDLIB_H ++# ifdef HAVE_STDLIB_H + # include + # endif + #endif +-#if HAVE_STRING_H +-# if !STDC_HEADERS && HAVE_MEMORY_H ++#ifdef HAVE_STRING_H ++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H + # include + # endif + # include + #endif +-#if HAVE_STRINGS_H ++#ifdef HAVE_STRINGS_H + # include + #endif +-#if HAVE_INTTYPES_H ++#ifdef HAVE_INTTYPES_H + # include +-#else +-# if HAVE_STDINT_H +-# include +-# endif + #endif +-#if HAVE_UNISTD_H ++#ifdef HAVE_STDINT_H ++# include ++#endif ++#ifdef HAVE_UNISTD_H + # include + #endif" + +-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL WARN_CFLAGS NO_WERROR YACC LEX LEXLIB LEX_OUTPUT_ROOT CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT HDEFINES AR CC_FOR_BUILD EXEEXT_FOR_BUILD DEMANGLER_NAME NLMCONV_DEFS BUILD_NLMCONV BUILD_SRCONV BUILD_DLLTOOL DLLTOOL_DEFS BUILD_WINDRES BUILD_DLLWRAP BUILD_MISC OBJDUMP_DEFS EMULATION EMULATION_VECTOR datarootdir docdir htmldir LIBOBJS LTLIBOBJS' ++ac_subst_vars='SHELL ++PATH_SEPARATOR ++PACKAGE_NAME ++PACKAGE_TARNAME ++PACKAGE_VERSION ++PACKAGE_STRING ++PACKAGE_BUGREPORT ++exec_prefix ++prefix ++program_transform_name ++bindir ++sbindir ++libexecdir ++datarootdir ++datadir ++sysconfdir ++sharedstatedir ++localstatedir ++includedir ++oldincludedir ++docdir ++infodir ++htmldir ++dvidir ++pdfdir ++psdir ++libdir ++localedir ++mandir ++DEFS ++ECHO_C ++ECHO_N ++ECHO_T ++LIBS ++build_alias ++host_alias ++target_alias ++build ++build_cpu ++build_vendor ++build_os ++host ++host_cpu ++host_vendor ++host_os ++target ++target_cpu ++target_vendor ++target_os ++CC ++CFLAGS ++LDFLAGS ++CPPFLAGS ++ac_ct_CC ++EXEEXT ++OBJEXT ++INSTALL_PROGRAM ++INSTALL_SCRIPT ++INSTALL_DATA ++CYGPATH_W ++PACKAGE ++VERSION ++ACLOCAL ++AUTOCONF ++AUTOMAKE ++AUTOHEADER ++MAKEINFO ++install_sh ++STRIP ++INSTALL_STRIP_PROGRAM ++mkdir_p ++AWK ++SET_MAKE ++am__leading_dot ++AMTAR ++am__tar ++am__untar ++DEPDIR ++am__include ++am__quote ++AMDEP_TRUE ++AMDEP_FALSE ++AMDEPBACKSLASH ++CCDEPMODE ++am__fastdepCC_TRUE ++am__fastdepCC_FALSE ++LN_S ++RANLIB ++LIBTOOL ++WARN_CFLAGS ++NO_WERROR ++YACC ++YFLAGS ++LEX ++LEX_OUTPUT_ROOT ++LEXLIB ++CPP ++GREP ++EGREP ++ALLOCA ++USE_NLS ++MSGFMT ++GMSGFMT ++XGETTEXT ++USE_INCLUDED_LIBINTL ++CATALOGS ++CATOBJEXT ++DATADIRNAME ++GMOFILES ++INSTOBJEXT ++INTLDEPS ++INTLLIBS ++INTLOBJS ++POFILES ++POSUB ++INCLUDE_LOCALE_H ++GT_NO ++GT_YES ++MKINSTALLDIRS ++l ++MAINTAINER_MODE_TRUE ++MAINTAINER_MODE_FALSE ++MAINT ++HDEFINES ++AR ++CC_FOR_BUILD ++EXEEXT_FOR_BUILD ++DEMANGLER_NAME ++NLMCONV_DEFS ++BUILD_NLMCONV ++BUILD_SRCONV ++BUILD_DLLTOOL ++DLLTOOL_DEFS ++BUILD_WINDRES ++BUILD_DLLWRAP ++BUILD_MISC ++OBJDUMP_DEFS ++EMULATION ++EMULATION_VECTOR ++LIBOBJS ++LTLIBOBJS' + ac_subst_files='' ++ ac_precious_vars='build_alias ++host_alias ++target_alias ++CC ++CFLAGS ++LDFLAGS ++LIBS ++CPPFLAGS ++YACC ++YFLAGS ++CPP' ++ + + # Initialize some variables set by options. + ac_init_help= +@@ -337,34 +793,48 @@ x_libraries=NONE + # and all the variables that are supposed to be based on exec_prefix + # by default will actually change. + # Use braces instead of parens because sh, perl, etc. also accept them. ++# (The list follows the same order as the GNU Coding Standards.) + bindir='${exec_prefix}/bin' + sbindir='${exec_prefix}/sbin' + libexecdir='${exec_prefix}/libexec' +-datadir='${prefix}/share' ++datarootdir='${prefix}/share' ++datadir='${datarootdir}' + sysconfdir='${prefix}/etc' + sharedstatedir='${prefix}/com' + localstatedir='${prefix}/var' +-libdir='${exec_prefix}/lib' + includedir='${prefix}/include' + oldincludedir='/usr/include' +-infodir='${prefix}/info' +-mandir='${prefix}/man' ++docdir='${datarootdir}/doc/${PACKAGE}' ++infodir='${datarootdir}/info' ++htmldir='${docdir}' ++dvidir='${docdir}' ++pdfdir='${docdir}' ++psdir='${docdir}' ++libdir='${exec_prefix}/lib' ++localedir='${datarootdir}/locale' ++mandir='${datarootdir}/man' + + ac_prev= ++ac_dashdash= + for ac_option + do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then +- eval "$ac_prev=\$ac_option" ++ eval $ac_prev=\$ac_option + ac_prev= + continue + fi + +- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` ++ case $ac_option in ++ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; ++ *) ac_optarg=yes ;; ++ esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + +- case $ac_option in ++ case $ac_dashdash$ac_option in ++ --) ++ ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; +@@ -386,33 +856,45 @@ do + --config-cache | -C) + cache_file=config.cache ;; + +- -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ++ -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; +- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ +- | --da=*) ++ -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + ++ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ ++ | --dataroo | --dataro | --datar) ++ ac_prev=datarootdir ;; ++ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ ++ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) ++ datarootdir=$ac_optarg ;; ++ + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- eval "enable_$ac_feature=no" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=no ;; ++ ++ -docdir | --docdir | --docdi | --doc | --do) ++ ac_prev=docdir ;; ++ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) ++ docdir=$ac_optarg ;; ++ ++ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ++ ac_prev=dvidir ;; ++ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) ++ dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "enable_$ac_feature='$ac_optarg'" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ +@@ -439,6 +921,12 @@ do + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + ++ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ++ ac_prev=htmldir ;; ++ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ ++ | --ht=*) ++ htmldir=$ac_optarg ;; ++ + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; +@@ -463,13 +951,16 @@ do + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + ++ -localedir | --localedir | --localedi | --localed | --locale) ++ ac_prev=localedir ;; ++ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) ++ localedir=$ac_optarg ;; ++ + -localstatedir | --localstatedir | --localstatedi | --localstated \ +- | --localstate | --localstat | --localsta | --localst \ +- | --locals | --local | --loca | --loc | --lo) ++ | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ +- | --localstate=* | --localstat=* | --localsta=* | --localst=* \ +- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) ++ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) +@@ -534,6 +1025,16 @@ do + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + ++ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ++ ac_prev=pdfdir ;; ++ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) ++ pdfdir=$ac_optarg ;; ++ ++ -psdir | --psdir | --psdi | --psd | --ps) ++ ac_prev=psdir ;; ++ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) ++ psdir=$ac_optarg ;; ++ + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; +@@ -586,24 +1087,20 @@ do + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package| sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "with_$ac_package='$ac_optarg'" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package | sed 's/-/_/g'` +- eval "with_$ac_package=no" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. +@@ -634,8 +1131,7 @@ Try \`$0 --help' for more information." + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } +- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` +- eval "$ac_envvar='$ac_optarg'" ++ eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) +@@ -655,27 +1151,19 @@ if test -n "$ac_prev"; then + { (exit 1); exit 1; }; } + fi + +-# Be sure to have absolute paths. +-for ac_var in exec_prefix prefix +-do +- eval ac_val=$`echo $ac_var` +- case $ac_val in +- [\\/$]* | ?:[\\/]* | NONE | '' ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; +- esac +-done +- +-# Be sure to have absolute paths. +-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ +- localstatedir libdir includedir oldincludedir infodir mandir ++# Be sure to have absolute directory names. ++for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ ++ datadir sysconfdir sharedstatedir localstatedir includedir \ ++ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ ++ libdir localedir mandir + do +- eval ac_val=$`echo $ac_var` ++ eval ac_val=\$$ac_var + case $ac_val in +- [\\/$]* | ?:[\\/]* ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; ++ [\\/$]* | ?:[\\/]* ) continue;; ++ NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac ++ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 ++ { (exit 1); exit 1; }; } + done + + # There might be people who depend on the old broken behavior: `$host' +@@ -702,74 +1190,76 @@ test -n "$host_alias" && ac_tool_prefix= + test "$silent" = yes && exec 6>/dev/null + + ++ac_pwd=`pwd` && test -n "$ac_pwd" && ++ac_ls_di=`ls -di .` && ++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || ++ { echo "$as_me: error: Working directory cannot be determined" >&2 ++ { (exit 1); exit 1; }; } ++test "X$ac_ls_di" = "X$ac_pwd_ls_di" || ++ { echo "$as_me: error: pwd does not report name of working directory" >&2 ++ { (exit 1); exit 1; }; } ++ ++ + # Find the source files, if location was not specified. + if test -z "$srcdir"; then + ac_srcdir_defaulted=yes +- # Try the directory containing this script, then its parent. +- ac_confdir=`(dirname "$0") 2>/dev/null || ++ # Try the directory containing this script, then the parent directory. ++ ac_confdir=`$as_dirname -- "$0" || + $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X"$0" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + srcdir=$ac_confdir +- if test ! -r $srcdir/$ac_unique_file; then ++ if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi + else + ac_srcdir_defaulted=no + fi +-if test ! -r $srcdir/$ac_unique_file; then +- if test "$ac_srcdir_defaulted" = yes; then +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 +- { (exit 1); exit 1; }; } +- else +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 +- { (exit 1); exit 1; }; } +- fi +-fi +-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || +- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 +- { (exit 1); exit 1; }; } +-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +-ac_env_build_alias_set=${build_alias+set} +-ac_env_build_alias_value=$build_alias +-ac_cv_env_build_alias_set=${build_alias+set} +-ac_cv_env_build_alias_value=$build_alias +-ac_env_host_alias_set=${host_alias+set} +-ac_env_host_alias_value=$host_alias +-ac_cv_env_host_alias_set=${host_alias+set} +-ac_cv_env_host_alias_value=$host_alias +-ac_env_target_alias_set=${target_alias+set} +-ac_env_target_alias_value=$target_alias +-ac_cv_env_target_alias_set=${target_alias+set} +-ac_cv_env_target_alias_value=$target_alias +-ac_env_CC_set=${CC+set} +-ac_env_CC_value=$CC +-ac_cv_env_CC_set=${CC+set} +-ac_cv_env_CC_value=$CC +-ac_env_CFLAGS_set=${CFLAGS+set} +-ac_env_CFLAGS_value=$CFLAGS +-ac_cv_env_CFLAGS_set=${CFLAGS+set} +-ac_cv_env_CFLAGS_value=$CFLAGS +-ac_env_LDFLAGS_set=${LDFLAGS+set} +-ac_env_LDFLAGS_value=$LDFLAGS +-ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +-ac_cv_env_LDFLAGS_value=$LDFLAGS +-ac_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_env_CPPFLAGS_value=$CPPFLAGS +-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_cv_env_CPPFLAGS_value=$CPPFLAGS +-ac_env_CPP_set=${CPP+set} +-ac_env_CPP_value=$CPP +-ac_cv_env_CPP_set=${CPP+set} +-ac_cv_env_CPP_value=$CPP ++if test ! -r "$srcdir/$ac_unique_file"; then ++ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." ++ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 ++ { (exit 1); exit 1; }; } ++fi ++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ++ac_abs_confdir=`( ++ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 ++ { (exit 1); exit 1; }; } ++ pwd)` ++# When building in place, set srcdir=. ++if test "$ac_abs_confdir" = "$ac_pwd"; then ++ srcdir=. ++fi ++# Remove unnecessary trailing slashes from srcdir. ++# Double slashes in file names in object file debugging info ++# mess up M-x gdb in Emacs. ++case $srcdir in ++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; ++esac ++for ac_var in $ac_precious_vars; do ++ eval ac_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_env_${ac_var}_value=\$${ac_var} ++ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_cv_env_${ac_var}_value=\$${ac_var} ++done + + # + # Report the --help message. +@@ -798,9 +1288,6 @@ Configuration: + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +-_ACEOF +- +- cat <<_ACEOF + Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] +@@ -818,15 +1305,22 @@ Fine tuning of the installation director + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] +- --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] +- --infodir=DIR info documentation [PREFIX/info] +- --mandir=DIR man documentation [PREFIX/man] ++ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] ++ --datadir=DIR read-only architecture-independent data [DATAROOTDIR] ++ --infodir=DIR info documentation [DATAROOTDIR/info] ++ --localedir=DIR locale-dependent data [DATAROOTDIR/locale] ++ --mandir=DIR man documentation [DATAROOTDIR/man] ++ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] ++ --htmldir=DIR html documentation [DOCDIR] ++ --dvidir=DIR dvi documentation [DOCDIR] ++ --pdfdir=DIR pdf documentation [DOCDIR] ++ --psdir=DIR ps documentation [DOCDIR] + _ACEOF + + cat <<\_ACEOF +@@ -876,126 +1370,100 @@ Some influential environment variables: + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory +- CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have +- headers in a nonstandard directory ++ LIBS libraries to pass to the linker, e.g. -l ++ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if ++ you have headers in a nonstandard directory ++ YACC The `Yet Another C Compiler' implementation to use. Defaults to ++ the first program found out of: `bison -y', `byacc', `yacc'. ++ YFLAGS The list of arguments that will be passed by default to $YACC. ++ This script will default YFLAGS to the empty string to avoid a ++ default value of `-d' given by some make applications. + CPP C preprocessor + + Use these variables to override the choices made by `configure' or to help + it to find libraries and programs with nonstandard names/locations. + + _ACEOF ++ac_status=$? + fi + + if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. +- ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue +- test -d $ac_dir || continue ++ test -d "$ac_dir" || continue + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac +- +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac +- +- cd $ac_dir +- # Check for guested configure; otherwise get Cygnus style configure. +- if test -f $ac_srcdir/configure.gnu; then +- echo +- $SHELL $ac_srcdir/configure.gnu --help=recursive +- elif test -f $ac_srcdir/configure; then +- echo +- $SHELL $ac_srcdir/configure --help=recursive +- elif test -f $ac_srcdir/configure.ac || +- test -f $ac_srcdir/configure.in; then +- echo +- $ac_configure --help ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix ++ ++ cd "$ac_dir" || { ac_status=$?; continue; } ++ # Check for guested configure. ++ if test -f "$ac_srcdir/configure.gnu"; then ++ echo && ++ $SHELL "$ac_srcdir/configure.gnu" --help=recursive ++ elif test -f "$ac_srcdir/configure"; then ++ echo && ++ $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 +- fi +- cd $ac_popdir ++ fi || ac_status=$? ++ cd "$ac_pwd" || { ac_status=$?; break; } + done + fi + +-test -n "$ac_init_help" && exit 0 ++test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF ++configure ++generated by GNU Autoconf 2.61 + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + This configure script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it. + _ACEOF +- exit 0 ++ exit + fi +-exec 5>config.log +-cat >&5 <<_ACEOF ++cat >config.log <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + + It was created by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + + _ACEOF ++exec 5>>config.log + { + cat <<_ASUNAME + ## --------- ## +@@ -1014,7 +1482,7 @@ uname -v = `(uname -v) 2>/dev/null || ec + /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` + /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` + /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +-hostinfo = `(hostinfo) 2>/dev/null || echo unknown` ++/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` + /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` + /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` + /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +@@ -1028,6 +1496,7 @@ do + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" + done ++IFS=$as_save_IFS + + } >&5 + +@@ -1049,7 +1518,6 @@ _ACEOF + ac_configure_args= + ac_configure_args0= + ac_configure_args1= +-ac_sep= + ac_must_keep_next=false + for ac_pass in 1 2 + do +@@ -1060,7 +1528,7 @@ do + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ++ *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in +@@ -1082,9 +1550,7 @@ do + -* ) ac_must_keep_next=true ;; + esac + fi +- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" +- # Get rid of the leading space. +- ac_sep=" " ++ ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +@@ -1095,8 +1561,8 @@ $as_unset ac_configure_args1 || test "${ + # When interrupted or exit'd, cleanup temporary files, and complete + # config.log. We remove comments because anyway the quotes in there + # would cause problems or look ugly. +-# WARNING: Be sure not to use single quotes in there, as some shells, +-# such as our DU 5.0 friend, will then `close' the trap. ++# WARNING: Use '\'' to represent an apostrophe within the trap. ++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. + trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { +@@ -1109,20 +1575,34 @@ trap 'exit_status=$? + _ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done + (set) 2>&1 | +- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + sed -n \ +- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; +- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" +- ;; ++ "s/'\''/'\''\\\\'\'''\''/g; ++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ++ ;; #( + *) +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} ++ esac | ++ sort ++) + echo + + cat <<\_ASBOX +@@ -1133,22 +1613,28 @@ _ASBOX + echo + for ac_var in $ac_subst_vars + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +-## ------------- ## +-## Output files. ## +-## ------------- ## ++## ------------------- ## ++## File substitutions. ## ++## ------------------- ## + _ASBOX + echo + for ac_var in $ac_subst_files + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi +@@ -1160,26 +1646,24 @@ _ASBOX + ## ----------- ## + _ASBOX + echo +- sed "/^$/d" confdefs.h | sort ++ cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 +- rm -f core *.core && +- rm -rf conftest* confdefs* conf$$* $ac_clean_files && ++ rm -f core *.core core.conftest.* && ++ rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +- ' 0 ++' 0 + for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + done + ac_signal=0 + + # confdefs.h avoids OS command line length limits that DEFS can exceed. +-rm -rf conftest* confdefs.h +-# AIX cpp loses on an empty file, so make sure it contains at least a newline. +-echo >confdefs.h ++rm -f -r conftest* confdefs.h + + # Predefined preprocessor variables. + +@@ -1210,14 +1694,17 @@ _ACEOF + + # Let the site file select an alternate cache file if it wants to. + # Prefer explicitly selected file to automatically selected ones. +-if test -z "$CONFIG_SITE"; then +- if test "x$prefix" != xNONE; then +- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" +- else +- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" +- fi ++if test -n "$CONFIG_SITE"; then ++ set x "$CONFIG_SITE" ++elif test "x$prefix" != xNONE; then ++ set x "$prefix/share/config.site" "$prefix/etc/config.site" ++else ++ set x "$ac_default_prefix/share/config.site" \ ++ "$ac_default_prefix/etc/config.site" + fi +-for ac_site_file in $CONFIG_SITE; do ++shift ++for ac_site_file ++do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 + echo "$as_me: loading site script $ac_site_file" >&6;} +@@ -1233,8 +1720,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -1246,12 +1733,11 @@ fi + # Check that the precious variables saved in the cache have kept the same + # value. + ac_cache_corrupted=false +-for ac_var in `(set) 2>&1 | +- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do ++for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set +- eval ac_old_val="\$ac_cv_env_${ac_var}_value" +- eval ac_new_val="\$ac_env_${ac_var}_value" ++ eval ac_old_val=\$ac_cv_env_${ac_var}_value ++ eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +@@ -1276,8 +1762,7 @@ echo "$as_me: current value: $ac_new_v + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) +- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; ++ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in +@@ -1294,12 +1779,6 @@ echo "$as_me: error: run \`make distclea + { (exit 1); exit 1; }; } + fi + +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- + + + +@@ -1316,108 +1795,163 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + ac_aux_dir= +-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do +- if test -f $ac_dir/install-sh; then ++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do ++ if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break +- elif test -f $ac_dir/install.sh; then ++ elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break +- elif test -f $ac_dir/shtool; then ++ elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi + done + if test -z "$ac_aux_dir"; then +- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} ++ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 ++echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } + fi +-ac_config_guess="$SHELL $ac_aux_dir/config.guess" +-ac_config_sub="$SHELL $ac_aux_dir/config.sub" +-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. ++ ++# These three variables are undocumented and unsupported, ++# and are intended to be withdrawn in a future Autoconf release. ++# They can cause serious problems if a builder's source tree is in a directory ++# whose full name contains unusual characters. ++ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ++ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ++ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ++ + + # Make sure we can run config.sub. +-$ac_config_sub sun4 >/dev/null 2>&1 || +- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +-echo "$as_me: error: cannot run $ac_config_sub" >&2;} ++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || ++ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 ++echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +-echo "$as_me:$LINENO: checking build system type" >&5 +-echo $ECHO_N "checking build system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking build system type" >&5 ++echo $ECHO_N "checking build system type... $ECHO_C" >&6; } + if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_build_alias=$build_alias +-test -z "$ac_cv_build_alias" && +- ac_cv_build_alias=`$ac_config_guess` +-test -z "$ac_cv_build_alias" && ++ ac_build_alias=$build_alias ++test "x$ac_build_alias" = x && ++ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` ++test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 + echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} ++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + + fi +-echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +-echo "${ECHO_T}$ac_cv_build" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 ++echo "${ECHO_T}$ac_cv_build" >&6; } ++case $ac_cv_build in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 ++echo "$as_me: error: invalid value of canonical build" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + build=$ac_cv_build +-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_build ++shift ++build_cpu=$1 ++build_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++build_os=$* ++IFS=$ac_save_IFS ++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking host system type" >&5 +-echo $ECHO_N "checking host system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking host system type" >&5 ++echo $ECHO_N "checking host system type... $ECHO_C" >&6; } + if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_host_alias=$host_alias +-test -z "$ac_cv_host_alias" && +- ac_cv_host_alias=$ac_cv_build_alias +-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} ++ if test "x$host_alias" = x; then ++ ac_cv_host=$ac_cv_build ++else ++ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +-echo "${ECHO_T}$ac_cv_host" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 ++echo "${ECHO_T}$ac_cv_host" >&6; } ++case $ac_cv_host in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 ++echo "$as_me: error: invalid value of canonical host" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + host=$ac_cv_host +-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_host ++shift ++host_cpu=$1 ++host_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++host_os=$* ++IFS=$ac_save_IFS ++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking target system type" >&5 +-echo $ECHO_N "checking target system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking target system type" >&5 ++echo $ECHO_N "checking target system type... $ECHO_C" >&6; } + if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_target_alias=$target_alias +-test "x$ac_cv_target_alias" = "x" && +- ac_cv_target_alias=$ac_cv_host_alias +-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} ++ if test "x$target_alias" = x; then ++ ac_cv_target=$ac_cv_host ++else ++ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +-echo "${ECHO_T}$ac_cv_target" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 ++echo "${ECHO_T}$ac_cv_target" >&6; } ++case $ac_cv_target in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 ++echo "$as_me: error: invalid value of canonical target" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + target=$ac_cv_target +-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_target ++shift ++target_cpu=$1 ++target_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++target_os=$* ++IFS=$ac_save_IFS ++case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + + # The aliases save the names the user supplied, while $host etc. +@@ -1434,8 +1968,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1448,32 +1982,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1486,36 +2022,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1528,74 +2079,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1609,7 +2120,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -1620,6 +2131,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -1637,22 +2149,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1665,36 +2178,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1707,29 +2222,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -1742,21 +2273,35 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +@@ -1781,47 +2326,77 @@ ac_clean_files="$ac_clean_files a.out a. + # Try to create an executable without -o first, disregard a.out. + # It will help us diagnose broken compilers, and finding out an intuition + # of exeext. +-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 ++echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } + ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 +- (eval $ac_link_default) 2>&5 ++# ++# List of possible output files, starting from the most likely. ++# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) ++# only as a last resort. b.out is created by i960 compilers. ++ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' ++# ++# The IRIX 6 linker writes into existing files which may not be ++# executable, retaining their permissions. Remove them first so a ++# subsequent execution test works. ++ac_rmfiles= ++for ac_file in $ac_files ++do ++ case $ac_file in ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; ++ * ) ac_rmfiles="$ac_rmfiles $ac_file";; ++ esac ++done ++rm -f $ac_rmfiles ++ ++if { (ac_try="$ac_link_default" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- # Find the output, starting from the most likely. This scheme is +-# not robust to junk in `.', hence go to wildcards (a.*) only as a last +-# resort. +- +-# Be careful to initialize this variable, since it used to be cached. +-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +-ac_cv_exeext= +-# b.out is created by i960 compilers. +-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out ++ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. ++# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' ++# in a Makefile. We should not override ac_cv_exeext if it was cached, ++# so that the user can short-circuit this test for compilers unknown to ++# Autoconf. ++for ac_file in $ac_files '' + do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) +- ;; +- conftest.$ac_ext ) +- # This is the source file. ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) +- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- # FIXME: I believe we export ac_cv_exeext for Libtool, +- # but it would be cool to find out if it's true. Does anybody +- # maintain Libtool? --akim. +- export ac_cv_exeext ++ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; ++ then :; else ++ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` ++ fi ++ # We set ac_cv_exeext here because the later test for it is not ++ # safe: cross compilers may not add the suffix if given an `-o' ++ # argument, so we may need to know it at that point already. ++ # Even if this section looks crufty: it has the advantage of ++ # actually working. + break;; + * ) + break;; + esac + done ++test "$ac_cv_exeext" = no && ac_cv_exeext= ++ + else ++ ac_file='' ++fi ++ ++{ echo "$as_me:$LINENO: result: $ac_file" >&5 ++echo "${ECHO_T}$ac_file" >&6; } ++if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +@@ -1833,19 +2408,21 @@ See \`config.log' for more details." >&2 + fi + + ac_exeext=$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_file" >&5 +-echo "${ECHO_T}$ac_file" >&6 + +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 ++echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } + # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 + # If not cross compiling, check that we can run a simple program. + if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -1864,22 +2441,27 @@ See \`config.log' for more details." >&2 + fi + fi + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + + rm -f a.out a.exe conftest$ac_cv_exeext b.out + ac_clean_files=$ac_clean_files_save +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +-echo "$as_me:$LINENO: result: $cross_compiling" >&5 +-echo "${ECHO_T}$cross_compiling" >&6 +- +-echo "$as_me:$LINENO: checking for suffix of executables" >&5 +-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 ++echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } ++{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 ++echo "${ECHO_T}$cross_compiling" >&6; } ++ ++{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 ++echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +@@ -1890,9 +2472,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_l + for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- export ac_cv_exeext + break;; + * ) break;; + esac +@@ -1906,14 +2487,14 @@ See \`config.log' for more details." >&2 + fi + + rm -f conftest$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +-echo "${ECHO_T}$ac_cv_exeext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 ++echo "${ECHO_T}$ac_cv_exeext" >&6; } + + rm -f conftest.$ac_ext + EXEEXT=$ac_cv_exeext + ac_exeext=$EXEEXT +-echo "$as_me:$LINENO: checking for suffix of object files" >&5 +-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 ++echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } + if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1933,14 +2514,20 @@ main () + } + _ACEOF + rm -f conftest.o conftest.obj +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>&5 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do ++ for ac_file in conftest.o conftest.obj conftest.*; do ++ test -f "$ac_file" || continue; + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +@@ -1958,12 +2545,12 @@ fi + + rm -f conftest.$ac_cv_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +-echo "${ECHO_T}$ac_cv_objext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 ++echo "${ECHO_T}$ac_cv_objext" >&6; } + OBJEXT=$ac_cv_objext + ac_objext=$OBJEXT +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1986,50 +2573,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -2045,38 +2631,118 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no ++ ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } + if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS + elif test $ac_cv_prog_cc_g = yes; then +@@ -2092,12 +2758,12 @@ else + CFLAGS= + fi + fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_prog_cc_stdc=no ++ ac_cv_prog_cc_c89=no + ac_save_CC=$CC + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -2131,12 +2797,17 @@ static char *f (char * (*g) (char **, in + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get ++ as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ ++ that's true only with -std. */ + int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ + int test (int i, double x); + struct s1 {int (*f) (int a);}; + struct s2 {int (*f) (double a);}; +@@ -2151,335 +2822,144 @@ return f (e, argv, 0) != argv[0] || f + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" + do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext ++ ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest.$ac_ext conftest.$ac_objext ++rm -f conftest.$ac_ext + CC=$ac_save_CC + + fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; + *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + esac + +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. ++ ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++{ echo "$as_me:$LINENO: checking for library containing strerror" >&5 ++echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } ++if test "${ac_cv_search_strerror+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_func_search_save_LIBS=$LIBS + cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-$ac_declaration +-#include ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char strerror (); + int + main () + { +-exit (42); ++return strerror (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++for ac_lib in '' cposix; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_strerror=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-continue +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h +-fi +- +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_strerror+set}" = set; then ++ break + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +-echo "$as_me:$LINENO: checking for library containing strerror" >&5 +-echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 ++done + if test "${ac_cv_search_strerror+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_func_search_save_LIBS=$LIBS +-ac_cv_search_strerror=no +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="none required" +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_strerror" = no; then +- for ac_lib in cposix; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="-l$ac_lib" +-break ++ : + else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++ ac_cv_search_strerror=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 +-echo "${ECHO_T}$ac_cv_search_strerror" >&6 +-if test "$ac_cv_search_strerror" != no; then +- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 ++echo "${ECHO_T}$ac_cv_search_strerror" >&6; } ++ac_res=$ac_cv_search_strerror ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + +@@ -2499,8 +2979,8 @@ am__api_version="1.9" + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -2522,7 +3002,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -2541,21 +3021,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -2565,8 +3046,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR + + test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +-echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 ++echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } + # Just in case + sleep 1 + echo timestamp > conftest.file +@@ -2608,20 +3089,20 @@ echo "$as_me: error: newly created file + Check your system clock" >&2;} + { (exit 1); exit 1; }; } + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + test "$program_prefix" != NONE && +- program_transform_name="s,^,$program_prefix,;$program_transform_name" ++ program_transform_name="s&^&$program_prefix&;$program_transform_name" + # Use a double $ so make ignores it. + test "$program_suffix" != NONE && +- program_transform_name="s,\$,$program_suffix,;$program_transform_name" ++ program_transform_name="s&\$&$program_suffix&;$program_transform_name" + # Double any \ or $. echo might interpret backslashes. + # By default was `s,x,x', remove it if useless. + cat <<\_ACEOF >conftest.sed + s/[\\$]/&&/g;s/;s,x,x,$// + _ACEOF + program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +-rm conftest.sed ++rm -f conftest.sed + + # expand $ac_aux_dir to an absolute path + am_aux_dir=`cd $ac_aux_dir && pwd` +@@ -2673,8 +3154,8 @@ for ac_prog in gawk mawk nawk awk + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2687,54 +3168,57 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + AWK=$ac_cv_prog_AWK + if test -n "$AWK"; then +- echo "$as_me:$LINENO: result: $AWK" >&5 +-echo "${ECHO_T}$AWK" >&6 ++ { echo "$as_me:$LINENO: result: $AWK" >&5 ++echo "${ECHO_T}$AWK" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$AWK" && break + done + +-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 ++echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } ++set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` ++if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.make <<\_ACEOF ++SHELL = /bin/sh + all: +- @echo 'ac_maketemp="$(MAKE)"' ++ @echo '@@@%%%=$(MAKE)=@@@%%%' + _ACEOF + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. +-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +-if test -n "$ac_maketemp"; then +- eval ac_cv_prog_make_${ac_make}_set=yes +-else +- eval ac_cv_prog_make_${ac_make}_set=no +-fi ++case `${MAKE-make} -f conftest.make 2>/dev/null` in ++ *@@@%%%=?*=@@@%%%*) ++ eval ac_cv_prog_make_${ac_make}_set=yes;; ++ *) ++ eval ac_cv_prog_make_${ac_make}_set=no;; ++esac + rm -f conftest.make + fi +-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + SET_MAKE= + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" + fi + +@@ -2749,7 +3233,7 @@ rmdir .tst 2>/dev/null + + DEPDIR="${am__leading_dot}deps" + +- ac_config_commands="$ac_config_commands depfiles" ++ac_config_commands="$ac_config_commands depfiles" + + + am_make=${MAKE-make} +@@ -2759,8 +3243,8 @@ am__doit: + .PHONY: am__doit + END + # If we don't find an include directive, just comment out the code. +-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 ++echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } + am__include="#" + am__quote= + _am_result=none +@@ -2787,15 +3271,15 @@ if test "$am__include" = "#"; then + fi + + +-echo "$as_me:$LINENO: result: $_am_result" >&5 +-echo "${ECHO_T}$_am_result" >&6 ++{ echo "$as_me:$LINENO: result: $_am_result" >&5 ++echo "${ECHO_T}$_am_result" >&6; } + rm -f confinc confmf + +-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. ++# Check whether --enable-dependency-tracking was given. + if test "${enable_dependency_tracking+set}" = set; then +- enableval="$enable_dependency_tracking" ++ enableval=$enable_dependency_tracking; ++fi + +-fi; + if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +@@ -2870,8 +3354,8 @@ if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2884,32 +3368,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2922,27 +3408,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -2963,8 +3463,8 @@ am__tar='${AMTAR} chof - "$$tardir"'; am + + depcc="$CC" am_compiler_list= + +-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 ++echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } + if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3053,8 +3553,8 @@ else + fi + + fi +-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 ++echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } + CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + +@@ -3072,10 +3572,9 @@ fi + + + +-# Check whether --enable-shared or --disable-shared was given. ++# Check whether --enable-shared was given. + if test "${enable_shared+set}" = set; then +- enableval="$enable_shared" +- p=${PACKAGE-default} ++ enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; +@@ -3093,11 +3592,11 @@ no) enable_shared=no ;; + esac + else + enable_shared=yes +-fi; +-# Check whether --enable-static or --disable-static was given. ++fi ++ ++# Check whether --enable-static was given. + if test "${enable_static+set}" = set; then +- enableval="$enable_static" +- p=${PACKAGE-default} ++ enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; +@@ -3115,11 +3614,11 @@ no) enable_static=no ;; + esac + else + enable_static=yes +-fi; +-# Check whether --enable-fast-install or --disable-fast-install was given. ++fi ++ ++# Check whether --enable-fast-install was given. + if test "${enable_fast_install+set}" = set; then +- enableval="$enable_fast_install" +- p=${PACKAGE-default} ++ enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; +@@ -3137,20 +3636,21 @@ no) enable_fast_install=no ;; + esac + else + enable_fast_install=yes +-fi; ++fi ++ + +-# Check whether --with-gnu-ld or --without-gnu-ld was given. ++# Check whether --with-gnu-ld was given. + if test "${with_gnu_ld+set}" = set; then +- withval="$with_gnu_ld" +- test "$withval" = no || with_gnu_ld=yes ++ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes + else + with_gnu_ld=no +-fi; ++fi ++ + ac_prog=ld + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. +- echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 ++echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw +@@ -3179,11 +3679,11 @@ echo $ECHO_N "checking for ld used by GC + ;; + esac + elif test "$with_gnu_ld" = yes; then +- echo "$as_me:$LINENO: checking for GNU ld" >&5 +-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for GNU ld" >&5 ++echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } + else +- echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 ++echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } + fi + if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -3212,17 +3712,17 @@ fi + + LD="$lt_cv_path_LD" + if test -n "$LD"; then +- echo "$as_me:$LINENO: result: $LD" >&5 +-echo "${ECHO_T}$LD" >&6 ++ { echo "$as_me:$LINENO: result: $LD" >&5 ++echo "${ECHO_T}$LD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 + echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 ++echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } + if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3233,25 +3733,25 @@ else + lt_cv_prog_gnu_ld=no + fi + fi +-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 +-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 ++echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } + with_gnu_ld=$lt_cv_prog_gnu_ld + + +-echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 ++echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } + if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + lt_cv_ld_reload_flag='-r' + fi +-echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +-echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 ++echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } + reload_flag=$lt_cv_ld_reload_flag + test -n "$reload_flag" && reload_flag=" $reload_flag" + +-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 ++echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } + if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3286,22 +3786,22 @@ fi + fi + + NM="$lt_cv_path_NM" +-echo "$as_me:$LINENO: result: $NM" >&5 +-echo "${ECHO_T}$NM" >&6 ++{ echo "$as_me:$LINENO: result: $NM" >&5 ++echo "${ECHO_T}$NM" >&6; } + +-echo "$as_me:$LINENO: checking whether ln -s works" >&5 +-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 ++echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } + LN_S=$as_ln_s + if test "$LN_S" = "ln -s"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + else +- echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +-echo "${ECHO_T}no, using $LN_S" >&6 ++ { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 ++echo "${ECHO_T}no, using $LN_S" >&6; } + fi + +-echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 +-echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 ++echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6; } + if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3463,8 +3963,8 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + esac + + fi +-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 ++echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } + file_magic_cmd=$lt_cv_file_magic_cmd + deplibs_check_method=$lt_cv_deplibs_check_method + +@@ -3474,8 +3974,8 @@ deplibs_check_method=$lt_cv_deplibs_chec + # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + + # find the maximum length of command line arguments +-echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +-echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 ++echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } + if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3526,11 +4026,11 @@ else + fi + + if test -n "$lt_cv_sys_max_cmd_len" ; then +- echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +-echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 ++ { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 ++echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } + else +- echo "$as_me:$LINENO: result: none" >&5 +-echo "${ECHO_T}none" >&6 ++ { echo "$as_me:$LINENO: result: none" >&5 ++echo "${ECHO_T}none" >&6; } + fi + + +@@ -3538,8 +4038,8 @@ fi + case $deplibs_check_method in + file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then +- echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 ++echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3593,17 +4093,17 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then +- echo "$as_me:$LINENO: checking for file" >&5 +-echo $ECHO_N "checking for file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for file" >&5 ++echo $ECHO_N "checking for file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3657,11 +4157,11 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + else +@@ -3676,8 +4176,8 @@ esac + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3690,32 +4190,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3728,27 +4230,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -3756,8 +4272,8 @@ fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3770,32 +4286,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3808,27 +4326,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -3843,22 +4375,22 @@ test "$GCC" = yes && libtool_flags="$lib + test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + + +-# Check whether --enable-libtool-lock or --disable-libtool-lock was given. ++# Check whether --enable-libtool-lock was given. + if test "${enable_libtool_lock+set}" = set; then +- enableval="$enable_libtool_lock" ++ enableval=$enable_libtool_lock; ++fi + +-fi; + test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" + test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + + +-# Check whether --with-pic or --without-pic was given. ++# Check whether --with-pic was given. + if test "${with_pic+set}" = set; then +- withval="$with_pic" +- pic_mode="$withval" ++ withval=$with_pic; pic_mode="$withval" + else + pic_mode=default +-fi; ++fi ++ + test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" + test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" + +@@ -3867,7 +4399,7 @@ test x"$pic_mode" = xno && libtool_flags + case $host in + *-*-irix6*) + # Find out which ABI we are using. +- echo '#line 3870 "configure"' > conftest.$ac_ext ++ echo '#line 4402 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? +@@ -3972,13 +4504,12 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*li + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" +- echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 ++echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } + if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + +- + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -4001,35 +4532,32 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-lt_cv_cc_needs_belf=no ++ lt_cv_cc_needs_belf=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' +@@ -4038,8 +4566,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +-echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 ++echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" +@@ -4069,39 +4597,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done ++ + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -4127,8 +4674,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -4154,10 +4701,9 @@ exec 5>>./config.log + + + +-# Check whether --enable-targets or --disable-targets was given. ++# Check whether --enable-targets was given. + if test "${enable_targets+set}" = set; then +- enableval="$enable_targets" +- case "${enableval}" in ++ enableval=$enable_targets; case "${enableval}" in + yes | "") { { echo "$as_me:$LINENO: error: enable-targets option must specify target names or 'all'" >&5 + echo "$as_me: error: enable-targets option must specify target names or 'all'" >&2;} + { (exit 1); exit 1; }; } +@@ -4165,31 +4711,32 @@ echo "$as_me: error: enable-targets opti + no) enable_targets= ;; + *) enable_targets=$enableval ;; + esac +-fi; # Check whether --enable-commonbfdlib or --disable-commonbfdlib was given. ++fi ++# Check whether --enable-commonbfdlib was given. + if test "${enable_commonbfdlib+set}" = set; then +- enableval="$enable_commonbfdlib" +- case "${enableval}" in ++ enableval=$enable_commonbfdlib; case "${enableval}" in + yes) commonbfdlib=true ;; + no) commonbfdlib=false ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for BFD commonbfdlib option" >&5 + echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;} + { (exit 1); exit 1; }; } ;; + esac +-fi; ++fi ++ + + GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" + +-# Check whether --enable-werror or --disable-werror was given. ++# Check whether --enable-werror was given. + if test "${enable_werror+set}" = set; then +- enableval="$enable_werror" +- case "${enableval}" in ++ enableval=$enable_werror; case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-werror" >&5 + echo "$as_me: error: bad value ${enableval} for --enable-werror" >&2;} + { (exit 1); exit 1; }; } ;; + esac +-fi; ++fi ++ + + # Enable -Werror by default when using gcc + if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then +@@ -4206,10 +4753,9 @@ if test "${GCC}" = yes ; then + WARN_CFLAGS="${GCC_WARN_CFLAGS}" + fi + +-# Check whether --enable-build-warnings or --disable-build-warnings was given. ++# Check whether --enable-build-warnings was given. + if test "${enable_build_warnings+set}" = set; then +- enableval="$enable_build_warnings" +- case "${enableval}" in ++ enableval=$enable_build_warnings; case "${enableval}" in + yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; + no) if test "${GCC}" = yes ; then + WARN_CFLAGS="-w" +@@ -4220,7 +4766,8 @@ if test "${enable_build_warnings+set}" = + WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; + *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; + esac +-fi; ++fi ++ + + if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then + echo "Setting warning flags = $WARN_CFLAGS" 6>&1 +@@ -4230,7 +4777,7 @@ fi + + + +- ac_config_headers="$ac_config_headers config.h:config.in" ++ac_config_headers="$ac_config_headers config.h:config.in" + + + if test -z "$target" ; then +@@ -4252,8 +4799,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4266,32 +4813,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4304,36 +4853,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4346,74 +4910,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4427,7 +4951,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -4438,6 +4962,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -4455,22 +4980,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4483,36 +5009,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4525,29 +5053,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -4560,27 +5104,41 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4603,50 +5161,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -4662,311 +5219,248 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +-if test "$ac_test_CFLAGS" = set; then +- CFLAGS=$ac_save_CFLAGS +-elif test $ac_cv_prog_cc_g = yes; then +- if test "$GCC" = yes; then +- CFLAGS="-g -O2" +- else +- CFLAGS="-g" +- fi +-else +- if test "$GCC" = yes; then +- CFLAGS="-O2" +- else +- CFLAGS= +- fi +-fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_cv_prog_cc_stdc=no +-ac_save_CC=$CC +-cat >conftest.$ac_ext <<_ACEOF ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#include +-#include +-#include +-#include +-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +-struct buf { int x; }; +-FILE * (*rcsopen) (struct buf *, struct stat *, int); +-static char *e (p, i) +- char **p; +- int i; +-{ +- return p[i]; +-} +-static char *f (char * (*g) (char **, int), char **p, ...) +-{ +- char *s; +- va_list v; +- va_start (v,p); +- s = g (p, va_arg (v,int)); +- va_end (v); +- return s; +-} + +-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has +- function prototypes and stuff, but not '\xHH' hex character constants. +- These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get +- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an +- array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ +-int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +- +-int test (int i, double x); +-struct s1 {int (*f) (int a);}; +-struct s2 {int (*f) (double a);}; +-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +-int argc; +-char **argv; + int + main () + { +-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ++ + ; + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +-do +- CC="$ac_save_CC $ac_arg" +- rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext +-done +-rm -f conftest.$ac_ext conftest.$ac_objext +-CC=$ac_save_CC +- +-fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; +- *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; +-esac +- +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. +-cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-$ac_declaration +-#include ++ + int + main () + { +-exit (42); ++ + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-continue ++ + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } ++if test "$ac_test_CFLAGS" = set; then ++ CFLAGS=$ac_save_CFLAGS ++elif test $ac_cv_prog_cc_g = yes; then ++ if test "$GCC" = yes; then ++ CFLAGS="-g -O2" ++ else ++ CFLAGS="-g" ++ fi ++else ++ if test "$GCC" = yes; then ++ CFLAGS="-O2" ++ else ++ CFLAGS= ++ fi ++fi ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_cv_prog_cc_c89=no ++ac_save_CC=$CC ++cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-$ac_declaration ++#include ++#include ++#include ++#include ++/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ ++struct buf { int x; }; ++FILE * (*rcsopen) (struct buf *, struct stat *, int); ++static char *e (p, i) ++ char **p; ++ int i; ++{ ++ return p[i]; ++} ++static char *f (char * (*g) (char **, int), char **p, ...) ++{ ++ char *s; ++ va_list v; ++ va_start (v,p); ++ s = g (p, va_arg (v,int)); ++ va_end (v); ++ return s; ++} ++ ++/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has ++ function prototypes and stuff, but not '\xHH' hex character constants. ++ These don't provoke an error unfortunately, instead are silently treated ++ as 'x'. The following induces an error, until -std is added to get ++ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an ++ array size at least. It's necessary to write '\x00'==0 to get something ++ that's true only with -std. */ ++int osf4_cc_array ['\x00' == 0 ? 1 : -1]; ++ ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ ++int test (int i, double x); ++struct s1 {int (*f) (int a);}; ++struct s2 {int (*f) (double a);}; ++int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); ++int argc; ++char **argv; + int + main () + { +-exit (42); ++return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++do ++ CC="$ac_save_CC $ac_arg" ++ rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h ++rm -f conftest.$ac_ext ++CC=$ac_save_CC ++ + fi ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; ++ *) ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; ++esac + +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -4984,8 +5478,8 @@ for ac_prog in 'bison -y' byacc + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_YACC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4998,25 +5492,27 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_YACC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + YACC=$ac_cv_prog_YACC + if test -n "$YACC"; then +- echo "$as_me:$LINENO: result: $YACC" >&5 +-echo "${ECHO_T}$YACC" >&6 ++ { echo "$as_me:$LINENO: result: $YACC" >&5 ++echo "${ECHO_T}$YACC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$YACC" && break + done + test -n "$YACC" || YACC="yacc" +@@ -5025,8 +5521,8 @@ for ac_prog in flex lex + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_LEX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5039,253 +5535,182 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LEX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + LEX=$ac_cv_prog_LEX + if test -n "$LEX"; then +- echo "$as_me:$LINENO: result: $LEX" >&5 +-echo "${ECHO_T}$LEX" >&6 ++ { echo "$as_me:$LINENO: result: $LEX" >&5 ++echo "${ECHO_T}$LEX" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$LEX" && break + done + test -n "$LEX" || LEX=":" + +-if test -z "$LEXLIB" +-then +- echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 +-echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 +-if test "${ac_cv_lib_fl_yywrap+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-lfl $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" ++if test "x$LEX" != "x:"; then ++ cat >conftest.l <<_ACEOF ++%% ++a { ECHO; } ++b { REJECT; } ++c { yymore (); } ++d { yyless (1); } ++e { yyless (input () != 0); } ++f { unput (yytext[0]); } ++. { BEGIN INITIAL; } ++%% ++#ifdef YYTEXT_POINTER ++extern char *yytext; + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char yywrap (); + int +-main () ++main (void) + { +-yywrap (); +- ; +- return 0; ++ return ! yylex () + ! yywrap (); + } + _ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++{ (ac_try="$LEX conftest.l" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$LEX conftest.l") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_lib_fl_yywrap=yes ++ (exit $ac_status); } ++{ echo "$as_me:$LINENO: checking lex output file root" >&5 ++echo $ECHO_N "checking lex output file root... $ECHO_C" >&6; } ++if test "${ac_cv_prog_lex_root+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_fl_yywrap=no ++if test -f lex.yy.c; then ++ ac_cv_prog_lex_root=lex.yy ++elif test -f lexyy.c; then ++ ac_cv_prog_lex_root=lexyy ++else ++ { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 ++echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} ++ { (exit 1); exit 1; }; } + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 +-echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 +-if test $ac_cv_lib_fl_yywrap = yes; then +- LEXLIB="-lfl" +-else +- echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 +-echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 +-if test "${ac_cv_lib_l_yywrap+set}" = set; then ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 ++echo "${ECHO_T}$ac_cv_prog_lex_root" >&6; } ++LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root ++ ++if test -z "${LEXLIB+set}"; then ++ { echo "$as_me:$LINENO: checking lex library" >&5 ++echo $ECHO_N "checking lex library... $ECHO_C" >&6; } ++if test "${ac_cv_lib_lex+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-ll $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char yywrap (); +-int +-main () +-{ +-yywrap (); +- ; +- return 0; +-} ++ ac_save_LIBS=$LIBS ++ ac_cv_lib_lex='none needed' ++ for ac_lib in '' -lfl -ll; do ++ LIBS="$ac_lib $ac_save_LIBS" ++ cat >conftest.$ac_ext <<_ACEOF ++`cat $LEX_OUTPUT_ROOT.c` + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_lib_l_yywrap=yes ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_lib_lex=$ac_lib + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_l_yywrap=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS +-fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 +-echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 +-if test $ac_cv_lib_l_yywrap = yes; then +- LEXLIB="-ll" +-fi +- +-fi +- +-fi + +-if test "x$LEX" != "x:"; then +- echo "$as_me:$LINENO: checking lex output file root" >&5 +-echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 +-if test "${ac_cv_prog_lex_root+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- # The minimal lex program is just a single line: %%. But some broken lexes +-# (Solaris, I think it was) want two %% lines, so accommodate them. +-cat >conftest.l <<_ACEOF +-%% +-%% +-_ACEOF +-{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 +- (eval $LEX conftest.l) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } +-if test -f lex.yy.c; then +- ac_cv_prog_lex_root=lex.yy +-elif test -f lexyy.c; then +- ac_cv_prog_lex_root=lexyy +-else +- { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 +-echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} +- { (exit 1); exit 1; }; } + fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext conftest.$ac_ext ++ test "$ac_cv_lib_lex" != 'none needed' && break ++ done ++ LIBS=$ac_save_LIBS ++ ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_lib_lex" >&5 ++echo "${ECHO_T}$ac_cv_lib_lex" >&6; } ++ test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 +-echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 +-rm -f conftest.l +-LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root + +-echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 +-echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 ++ ++{ echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 ++echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6; } + if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + # POSIX says lex can declare yytext either as a pointer or an array; the +-# default is implementation-dependent. Figure out which it is, since ++# default is implementation-dependent. Figure out which it is, since + # not all implementations provide the %pointer and %array declarations. + ac_cv_prog_lex_yytext_pointer=no +-echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c + ac_save_LIBS=$LIBS +-LIBS="$LIBS $LEXLIB" ++LIBS="$LEXLIB $ac_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF ++#define YYTEXT_POINTER 1 + `cat $LEX_OUTPUT_ROOT.c` + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_prog_lex_yytext_pointer=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$ac_save_LIBS +-rm -f "${LEX_OUTPUT_ROOT}.c" + + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 +-echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 ++echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6; } + if test $ac_cv_prog_lex_yytext_pointer = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -5293,6 +5718,7 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi ++rm -f conftest.l $LEX_OUTPUT_ROOT.c + + fi + if test "$LEX" = :; then +@@ -5303,8 +5729,8 @@ ALL_LINGUAS="fr tr ja es sv da zh_CN ru + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5317,32 +5743,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5355,27 +5783,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -5385,8 +5827,8 @@ ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' + ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' + ac_compiler_gnu=$ac_cv_c_compiler_gnu +-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 ++echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } + # On Suns, sometimes $CPP names a directory. + if test -n "$CPP" && test -d "$CPP"; then + CPP= +@@ -5420,24 +5862,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5446,9 +5886,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi ++ + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5458,24 +5899,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5486,6 +5925,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi ++ + rm -f conftest.err conftest.$ac_ext + + done +@@ -5503,8 +5943,8 @@ fi + else + ac_cv_prog_CPP=$CPP + fi +-echo "$as_me:$LINENO: result: $CPP" >&5 +-echo "${ECHO_T}$CPP" >&6 ++{ echo "$as_me:$LINENO: result: $CPP" >&5 ++echo "${ECHO_T}$CPP" >&6; } + ac_preproc_ok=false + for ac_c_preproc_warn_flag in '' yes + do +@@ -5527,24 +5967,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5553,9 +5991,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi ++ + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5565,24 +6004,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5593,6 +6030,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi ++ + rm -f conftest.err conftest.$ac_ext + + done +@@ -5615,23 +6053,170 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +-echo "$as_me:$LINENO: checking for egrep" >&5 +-echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +-if test "${ac_cv_prog_egrep+set}" = set; then ++{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 ++echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } ++if test "${ac_cv_path_GREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ # Extract the first word of "grep ggrep" to use in msg output ++if test -z "$GREP"; then ++set dummy grep ggrep; ac_prog_name=$2 ++if test "${ac_cv_path_GREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_path_GREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in grep ggrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue ++ # Check for GNU ac_path_GREP and select it if it is found. ++ # Check for GNU $ac_path_GREP ++case `"$ac_path_GREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'GREP' >> "conftest.nl" ++ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_GREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_GREP="$ac_path_GREP" ++ ac_path_GREP_max=$ac_count ++ fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac ++ ++ ++ $ac_path_GREP_found && break 3 ++ done ++done ++ ++done ++IFS=$as_save_IFS ++ ++ ++fi ++ ++GREP="$ac_cv_path_GREP" ++if test -z "$GREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi ++ ++else ++ ac_cv_path_GREP=$GREP ++fi ++ ++ ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 ++echo "${ECHO_T}$ac_cv_path_GREP" >&6; } ++ GREP="$ac_cv_path_GREP" ++ ++ ++{ echo "$as_me:$LINENO: checking for egrep" >&5 ++echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } ++if test "${ac_cv_path_EGREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 ++ then ac_cv_path_EGREP="$GREP -E" ++ else ++ # Extract the first word of "egrep" to use in msg output ++if test -z "$EGREP"; then ++set dummy egrep; ac_prog_name=$2 ++if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- if echo a | (grep -E '(a|b)') >/dev/null 2>&1 +- then ac_cv_prog_egrep='grep -E' +- else ac_cv_prog_egrep='egrep' ++ ac_path_EGREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in egrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue ++ # Check for GNU ac_path_EGREP and select it if it is found. ++ # Check for GNU $ac_path_EGREP ++case `"$ac_path_EGREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'EGREP' >> "conftest.nl" ++ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_EGREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_EGREP="$ac_path_EGREP" ++ ac_path_EGREP_max=$ac_count + fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac ++ ++ ++ $ac_path_EGREP_found && break 3 ++ done ++done ++ ++done ++IFS=$as_save_IFS ++ ++ ++fi ++ ++EGREP="$ac_cv_path_EGREP" ++if test -z "$EGREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi ++ ++else ++ ac_cv_path_EGREP=$EGREP ++fi ++ ++ ++ fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +-echo "${ECHO_T}$ac_cv_prog_egrep" >&6 +- EGREP=$ac_cv_prog_egrep ++{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 ++echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } ++ EGREP="$ac_cv_path_EGREP" + + +-echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 ++echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } + if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5655,35 +6240,31 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_header_stdc=no ++ ac_cv_header_stdc=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +@@ -5739,6 +6320,7 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include ++#include + #if ((' ' & 0x0FF) == 0x020) + # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') + # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +@@ -5758,18 +6340,27 @@ main () + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) +- exit(2); +- exit (0); ++ return 2; ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -5782,12 +6373,14 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_header_stdc=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +-echo "${ECHO_T}$ac_cv_header_stdc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 ++echo "${ECHO_T}$ac_cv_header_stdc" >&6; } + if test $ac_cv_header_stdc = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -5796,8 +6389,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 ++echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } + if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5815,10 +6408,10 @@ main () + #ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; +- const charset x; ++ const charset cs; + /* SunOS 4.1.1 cc rejects this. */ +- char const *const *ccp; +- char **p; ++ char const *const *pcpcc; ++ char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; +@@ -5827,16 +6420,17 @@ main () + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; +- ccp = &g + (g ? g-g : 0); ++ pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ +- ++ccp; +- p = (char**) ccp; +- ccp = (char const *const *) p; ++ ++pcpcc; ++ ppc = (char**) pcpcc; ++ pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; ++ if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; +@@ -5855,7 +6449,9 @@ main () + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; ++ if (!foo) return 0; + } ++ return !cs[0] && !zero.x; + #endif + + ; +@@ -5863,38 +6459,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_c_const=no ++ ac_cv_c_const=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +-echo "${ECHO_T}$ac_cv_c_const" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 ++echo "${ECHO_T}$ac_cv_c_const" >&6; } + if test $ac_cv_c_const = no; then + + cat >>confdefs.h <<\_ACEOF +@@ -5903,8 +6495,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for inline" >&5 +-echo $ECHO_N "checking for inline... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for inline" >&5 ++echo $ECHO_N "checking for inline... $ECHO_C" >&6; } + if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5924,39 +6516,37 @@ $ac_kw foo_t foo () {return 0; } + + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_c_inline=$ac_kw; break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_c_inline=$ac_kw + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ test "$ac_cv_c_inline" != no && break + done + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +-echo "${ECHO_T}$ac_cv_c_inline" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 ++echo "${ECHO_T}$ac_cv_c_inline" >&6; } + + + case $ac_cv_c_inline in +@@ -5988,9 +6578,9 @@ for ac_header in sys/types.h sys/stat.h + inttypes.h stdint.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6004,38 +6594,35 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_Header=no" ++ eval "$as_ac_Header=no" + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +@@ -6046,8 +6633,8 @@ fi + done + + +-echo "$as_me:$LINENO: checking for off_t" >&5 +-echo $ECHO_N "checking for off_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for off_t" >&5 ++echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } + if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6058,62 +6645,59 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef off_t ac__type_new_; + int + main () + { +-if ((off_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (off_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_off_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_off_t=no ++ ac_cv_type_off_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +-echo "${ECHO_T}$ac_cv_type_off_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 ++echo "${ECHO_T}$ac_cv_type_off_t" >&6; } + if test $ac_cv_type_off_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define off_t long ++#define off_t long int + _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for size_t" >&5 +-echo $ECHO_N "checking for size_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for size_t" >&5 ++echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } + if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6124,64 +6708,61 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef size_t ac__type_new_; + int + main () + { +-if ((size_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (size_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_size_t=no ++ ac_cv_type_size_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +-echo "${ECHO_T}$ac_cv_type_size_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 ++echo "${ECHO_T}$ac_cv_type_size_t" >&6; } + if test $ac_cv_type_size_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define size_t unsigned ++#define size_t unsigned int + _ACEOF + + fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works + # for constant arguments. Useless! +-echo "$as_me:$LINENO: checking for working alloca.h" >&5 +-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 ++echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } + if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6196,44 +6777,42 @@ int + main () + { + char *p = (char *) alloca (2 * sizeof (int)); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_working_alloca_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_working_alloca_h=no ++ ac_cv_working_alloca_h=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +-echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 ++echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } + if test $ac_cv_working_alloca_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6242,8 +6821,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for alloca" >&5 +-echo $ECHO_N "checking for alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for alloca" >&5 ++echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } + if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6260,7 +6839,7 @@ cat >>conftest.$ac_ext <<_ACEOF + # include + # define alloca _alloca + # else +-# if HAVE_ALLOCA_H ++# ifdef HAVE_ALLOCA_H + # include + # else + # ifdef _AIX +@@ -6278,44 +6857,42 @@ int + main () + { + char *p = (char *) alloca (1); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_func_alloca_works=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_func_alloca_works=no ++ ac_cv_func_alloca_works=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +-echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 ++echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } + + if test $ac_cv_func_alloca_works = yes; then + +@@ -6329,15 +6906,15 @@ else + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + +-ALLOCA=alloca.$ac_objext ++ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + + cat >>confdefs.h <<\_ACEOF + #define C_ALLOCA 1 + _ACEOF + + +-echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +-echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 ++echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } + if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6347,7 +6924,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#if defined(CRAY) && ! defined(CRAY2) ++#if defined CRAY && ! defined CRAY2 + webecray + #else + wenotbecray +@@ -6363,14 +6940,14 @@ fi + rm -f conftest* + + fi +-echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +-echo "${ECHO_T}$ac_cv_os_cray" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 ++echo "${ECHO_T}$ac_cv_os_cray" >&6; } + if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6396,68 +6973,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -6470,8 +7039,8 @@ fi + done + fi + +-echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +-echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 ++echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } + if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6484,6 +7053,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ ++$ac_includes_default + int + find_stack_direction () + { +@@ -6501,17 +7071,26 @@ find_stack_direction () + int + main () + { +- exit (find_stack_direction () < 0); ++ return find_stack_direction () < 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6524,11 +7103,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_c_stack_direction=-1 + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +-echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 ++echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } + + cat >>confdefs.h <<_ACEOF + #define STACK_DIRECTION $ac_cv_c_stack_direction +@@ -6542,18 +7123,19 @@ fi + for ac_header in stdlib.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6564,41 +7146,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6607,24 +7185,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -6632,9 +7208,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -6658,25 +7235,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -6692,9 +7263,9 @@ done + for ac_func in getpagesize + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6720,68 +7291,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -6790,8 +7353,8 @@ _ACEOF + fi + done + +-echo "$as_me:$LINENO: checking for working mmap" >&5 +-echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working mmap" >&5 ++echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } + if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6833,21 +7396,21 @@ $ac_includes_default + #include + #include + +-#if !STDC_HEADERS && !HAVE_STDLIB_H ++#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H + char *malloc (); + #endif + + /* This mess was copied from the GNU getpagesize.h. */ +-#if !HAVE_GETPAGESIZE ++#ifndef HAVE_GETPAGESIZE + /* Assume that all systems that can run configure have sys/param.h. */ +-# if !HAVE_SYS_PARAM_H ++# ifndef HAVE_SYS_PARAM_H + # define HAVE_SYS_PARAM_H 1 + # endif + + # ifdef _SC_PAGESIZE + # define getpagesize() sysconf(_SC_PAGESIZE) + # else /* no _SC_PAGESIZE */ +-# if HAVE_SYS_PARAM_H ++# ifdef HAVE_SYS_PARAM_H + # include + # ifdef EXEC_PAGESIZE + # define getpagesize() EXEC_PAGESIZE +@@ -6886,15 +7449,15 @@ main () + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) +- exit (1); ++ return 1; + if (write (fd, data, pagesize) != pagesize) +- exit (1); ++ return 1; + close (fd); + + /* Next, try to mmap the file at a fixed address which already has +@@ -6902,17 +7465,17 @@ main () + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) +- exit (1); ++ return 1; + data2 = (char *) malloc (2 * pagesize); + if (!data2) +- exit (1); +- data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); ++ return 1; ++ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) +- exit (1); ++ return 1; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on +@@ -6921,24 +7484,33 @@ main () + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) +- exit (1); ++ return 1; + if (read (fd, data3, pagesize) != pagesize) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) +- exit (1); ++ return 1; + close (fd); +- exit (0); ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6951,11 +7523,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_func_mmap_fixed_mapped=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +-echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 ++echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } + if test $ac_cv_func_mmap_fixed_mapped = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6979,18 +7553,19 @@ for ac_header in argz.h limits.h locale. + unistd.h values.h sys/param.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7001,41 +7576,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7044,24 +7615,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -7069,9 +7638,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -7095,25 +7665,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -7139,9 +7703,9 @@ for ac_func in getcwd munmap putenv sete + __argz_count __argz_stringify __argz_next + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7167,68 +7731,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7243,9 +7799,9 @@ done + for ac_func in stpcpy + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7271,68 +7827,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7351,8 +7899,8 @@ _ACEOF + fi + + if test $ac_cv_header_locale_h = yes; then +- echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 +-echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 ++echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; } + if test "${am_cv_val_LC_MESSAGES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7372,39 +7920,36 @@ return LC_MESSAGES + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + am_cv_val_LC_MESSAGES=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-am_cv_val_LC_MESSAGES=no ++ am_cv_val_LC_MESSAGES=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 +-echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 ++echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; } + if test $am_cv_val_LC_MESSAGES = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -7413,34 +7958,34 @@ _ACEOF + + fi + fi +- echo "$as_me:$LINENO: checking whether NLS is requested" >&5 +-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 +- # Check whether --enable-nls or --disable-nls was given. ++ { echo "$as_me:$LINENO: checking whether NLS is requested" >&5 ++echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; } ++ # Check whether --enable-nls was given. + if test "${enable_nls+set}" = set; then +- enableval="$enable_nls" +- USE_NLS=$enableval ++ enableval=$enable_nls; USE_NLS=$enableval + else + USE_NLS=yes +-fi; +- echo "$as_me:$LINENO: result: $USE_NLS" >&5 +-echo "${ECHO_T}$USE_NLS" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $USE_NLS" >&5 ++echo "${ECHO_T}$USE_NLS" >&6; } + + + USE_INCLUDED_LIBINTL=no + + if test "$USE_NLS" = "yes"; then +- echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 +-echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 ++echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; } + +-# Check whether --with-included-gettext or --without-included-gettext was given. ++# Check whether --with-included-gettext was given. + if test "${with_included_gettext+set}" = set; then +- withval="$with_included_gettext" +- nls_cv_force_use_gnu_gettext=$withval ++ withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval + else + nls_cv_force_use_gnu_gettext=no +-fi; +- echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 +-echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 ++echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; } + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then +@@ -7449,17 +7994,17 @@ echo "${ECHO_T}$nls_cv_force_use_gnu_get + CATOBJEXT= + + if test "${ac_cv_header_libintl_h+set}" = set; then +- echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking libintl.h usability" >&5 +-echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h usability" >&5 ++echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7470,41 +8015,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking libintl.h presence" >&5 +-echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h presence" >&5 ++echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7513,24 +8054,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -7538,9 +8077,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -7564,30 +8104,23 @@ echo "$as_me: WARNING: libintl.h: se + echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_libintl_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + + fi + if test $ac_cv_header_libintl_h = yes; then +- echo "$as_me:$LINENO: checking for gettext in libc" >&5 +-echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libc" >&5 ++echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7607,43 +8140,40 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libc=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libc=no ++ gt_cv_func_gettext_libc=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6; } + + if test "$gt_cv_func_gettext_libc" != "yes"; then +- echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 +-echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 ++echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6; } + if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7656,59 +8186,56 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char bindtextdomain (); + int + main () + { +-bindtextdomain (); ++return bindtextdomain (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_lib_intl_bindtextdomain=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_intl_bindtextdomain=no ++ ac_cv_lib_intl_bindtextdomain=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$ac_check_lib_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 +-echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 ++echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6; } + if test $ac_cv_lib_intl_bindtextdomain = yes; then +- echo "$as_me:$LINENO: checking for gettext in libintl" >&5 +-echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libintl" >&5 ++echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libintl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7728,39 +8255,36 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libintl=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libintl=no ++ gt_cv_func_gettext_libintl=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6; } + fi + + fi +@@ -7774,8 +8298,8 @@ _ACEOF + + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7801,20 +8325,20 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + if test "$MSGFMT" != "no"; then + + for ac_func in dcgettext + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7840,68 +8364,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7912,8 +8428,8 @@ done + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7928,32 +8444,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7979,11 +8496,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + cat >conftest.$ac_ext <<_ACEOF +@@ -8003,37 +8520,34 @@ extern int _nl_msg_cat_cntr; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + CATOBJEXT=.gmo + DATADIRNAME=share + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-CATOBJEXT=.mo ++ CATOBJEXT=.mo + DATADIRNAME=lib + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + INSTOBJEXT=.mo + fi +@@ -8055,8 +8569,8 @@ fi + INTLOBJS="\$(GETTOBJS)" + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8082,17 +8596,17 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8107,32 +8621,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8158,11 +8673,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + +@@ -8181,8 +8696,8 @@ fi + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else +- echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 +-echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6 ++ { echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 ++echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6; } + XGETTEXT=":" + fi + fi +@@ -8231,8 +8746,8 @@ _ACEOF + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else +- echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 +-echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 ++echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6; } + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in +@@ -8240,8 +8755,8 @@ echo $ECHO_N "checking for catalogs to b + esac + done + LINGUAS=$NEW_LINGUAS +- echo "$as_me:$LINENO: result: $LINGUAS" >&5 +-echo "${ECHO_T}$LINGUAS" >&6 ++ { echo "$as_me:$LINENO: result: $LINGUAS" >&5 ++echo "${ECHO_T}$LINGUAS" >&6; } + fi + + if test -n "$LINGUAS"; then +@@ -8260,17 +8775,17 @@ echo "${ECHO_T}$LINGUAS" >&6 + if test -f $srcdir/po2tbl.sed.in; then + if test "$CATOBJEXT" = ".cat"; then + if test "${ac_cv_header_linux_version_h+set}" = set; then +- echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking linux/version.h usability" >&5 +-echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h usability" >&5 ++echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8281,41 +8796,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking linux/version.h presence" >&5 +-echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h presence" >&5 ++echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8324,24 +8835,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -8349,9 +8858,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -8375,25 +8885,18 @@ echo "$as_me: WARNING: linux/version.h: + echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/version.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: linux/version.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_linux_version_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + + fi + if test $ac_cv_header_linux_version_h = yes; then +@@ -8443,17 +8946,17 @@ fi + fi + + +-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 +- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. ++{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 ++echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } ++ # Check whether --enable-maintainer-mode was given. + if test "${enable_maintainer_mode+set}" = set; then +- enableval="$enable_maintainer_mode" +- USE_MAINTAINER_MODE=$enableval ++ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval + else + USE_MAINTAINER_MODE=no +-fi; +- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 ++echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } + + + if test $USE_MAINTAINER_MODE = yes; then +@@ -8493,8 +8996,8 @@ AR=${AR-ar} + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8507,32 +9010,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8545,27 +9050,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -8583,8 +9102,8 @@ fi + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -8606,7 +9125,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -8625,21 +9144,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -8663,8 +9183,8 @@ fi + if test "x$cross_compiling" = "xno"; then + EXEEXT_FOR_BUILD='$(EXEEXT)' + else +- echo "$as_me:$LINENO: checking for build system executable suffix" >&5 +-echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for build system executable suffix" >&5 ++echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6; } + if test "${bfd_cv_build_exeext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8681,8 +9201,8 @@ else + rm -f conftest* + test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no + fi +-echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 +-echo "${ECHO_T}$bfd_cv_build_exeext" >&6 ++{ echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 ++echo "${ECHO_T}$bfd_cv_build_exeext" >&6; } + EXEEXT_FOR_BUILD="" + test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} + fi +@@ -8704,18 +9224,19 @@ esac + for ac_header in string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8726,41 +9247,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8769,24 +9286,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -8794,9 +9309,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -8820,25 +9336,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -8850,8 +9360,8 @@ fi + + done + +-echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 +-echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 ++echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; } + if test "${ac_cv_header_sys_wait_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8864,7 +9374,7 @@ cat >>conftest.$ac_ext <<_ACEOF + #include + #include + #ifndef WEXITSTATUS +-# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) ++# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) + #endif + #ifndef WIFEXITED + # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +@@ -8881,38 +9391,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_header_sys_wait_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_header_sys_wait_h=no ++ ac_cv_header_sys_wait_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 +-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 ++echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; } + if test $ac_cv_header_sys_wait_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -8923,8 +9429,8 @@ fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works + # for constant arguments. Useless! +-echo "$as_me:$LINENO: checking for working alloca.h" >&5 +-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 ++echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } + if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8939,44 +9445,42 @@ int + main () + { + char *p = (char *) alloca (2 * sizeof (int)); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_working_alloca_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_working_alloca_h=no ++ ac_cv_working_alloca_h=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +-echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 ++echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } + if test $ac_cv_working_alloca_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -8985,8 +9489,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for alloca" >&5 +-echo $ECHO_N "checking for alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for alloca" >&5 ++echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } + if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9003,7 +9507,7 @@ cat >>conftest.$ac_ext <<_ACEOF + # include + # define alloca _alloca + # else +-# if HAVE_ALLOCA_H ++# ifdef HAVE_ALLOCA_H + # include + # else + # ifdef _AIX +@@ -9021,44 +9525,42 @@ int + main () + { + char *p = (char *) alloca (1); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_func_alloca_works=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_func_alloca_works=no ++ ac_cv_func_alloca_works=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +-echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 ++echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } + + if test $ac_cv_func_alloca_works = yes; then + +@@ -9072,15 +9574,15 @@ else + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + +-ALLOCA=alloca.$ac_objext ++ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + + cat >>confdefs.h <<\_ACEOF + #define C_ALLOCA 1 + _ACEOF + + +-echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +-echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 ++echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } + if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9090,7 +9592,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#if defined(CRAY) && ! defined(CRAY2) ++#if defined CRAY && ! defined CRAY2 + webecray + #else + wenotbecray +@@ -9106,14 +9608,14 @@ fi + rm -f conftest* + + fi +-echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +-echo "${ECHO_T}$ac_cv_os_cray" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 ++echo "${ECHO_T}$ac_cv_os_cray" >&6; } + if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -9139,68 +9641,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -9213,8 +9707,8 @@ fi + done + fi + +-echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +-echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 ++echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } + if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9227,6 +9721,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ ++$ac_includes_default + int + find_stack_direction () + { +@@ -9244,17 +9739,26 @@ find_stack_direction () + int + main () + { +- exit (find_stack_direction () < 0); ++ return find_stack_direction () < 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -9267,11 +9771,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_c_stack_direction=-1 + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +-echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 ++echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } + + cat >>confdefs.h <<_ACEOF + #define STACK_DIRECTION $ac_cv_c_stack_direction +@@ -9288,9 +9794,9 @@ fi + for ac_func in sbrk utimes setmode getc_unlocked strcoll + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -9316,68 +9822,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -9389,8 +9887,8 @@ done + + # Check whether fopen64 is available and whether _LARGEFILE64_SOURCE + # needs to be defined for it +-echo "$as_me:$LINENO: checking for fopen64" >&5 +-echo $ECHO_N "checking for fopen64... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for fopen64" >&5 ++echo $ECHO_N "checking for fopen64... $ECHO_C" >&6; } + if test "${bu_cv_have_fopen64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9410,33 +9908,29 @@ FILE *f = fopen64 ("/tmp/foo","r"); + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + bu_cv_have_fopen64=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-saved_CPPFLAGS=$CPPFLAGS ++ saved_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -9454,44 +9948,42 @@ FILE *f = fopen64 ("/tmp/foo","r"); + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + bu_cv_have_fopen64="need -D_LARGEFILE64_SOURCE" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_have_fopen64=no ++ bu_cv_have_fopen64=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS=$saved_CPPFLAGS + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_have_fopen64" >&5 +-echo "${ECHO_T}$bu_cv_have_fopen64" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_have_fopen64" >&5 ++echo "${ECHO_T}$bu_cv_have_fopen64" >&6; } + if test "$bu_cv_have_fopen64" != no; then + + cat >>confdefs.h <<\_ACEOF +@@ -9499,8 +9991,8 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +-echo "$as_me:$LINENO: checking for stat64" >&5 +-echo $ECHO_N "checking for stat64... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for stat64" >&5 ++echo $ECHO_N "checking for stat64... $ECHO_C" >&6; } + if test "${bu_cv_have_stat64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9520,33 +10012,29 @@ struct stat64 st; stat64 ("/tmp/foo", &s + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + bu_cv_have_stat64=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-saved_CPPFLAGS=$CPPFLAGS ++ saved_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -9564,191 +10052,146 @@ struct stat64 st; stat64 ("/tmp/foo", &s + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + bu_cv_have_stat64="need -D_LARGEFILE64_SOURCE" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_have_stat64=no ++ bu_cv_have_stat64=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS=$saved_CPPFLAGS + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_have_stat64" >&5 +-echo "${ECHO_T}$bu_cv_have_stat64" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_have_stat64" >&5 ++echo "${ECHO_T}$bu_cv_have_stat64" >&6; } + if test "$bu_cv_have_stat64" != no; then + + cat >>confdefs.h <<\_ACEOF + #define HAVE_STAT64 1 + _ACEOF + +-fi +-if test "$bu_cv_have_fopen64" = "need -D_LARGEFILE64_SOURCE" \ +- || test "$bu_cv_have_stat64" = "need -D_LARGEFILE64_SOURCE"; then +- +-cat >>confdefs.h <<\_ACEOF +-#define _LARGEFILE64_SOURCE 1 +-_ACEOF +- +- CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" +-fi +- +-# Some systems have frexp only in -lm, not in -lc. +-echo "$as_me:$LINENO: checking for library containing frexp" >&5 +-echo $ECHO_N "checking for library containing frexp... $ECHO_C" >&6 +-if test "${ac_cv_search_frexp+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_func_search_save_LIBS=$LIBS +-ac_cv_search_frexp=no +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char frexp (); +-int +-main () +-{ +-frexp (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_frexp="none required" +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 ++fi ++if test "$bu_cv_have_fopen64" = "need -D_LARGEFILE64_SOURCE" \ ++ || test "$bu_cv_have_stat64" = "need -D_LARGEFILE64_SOURCE"; then ++ ++cat >>confdefs.h <<\_ACEOF ++#define _LARGEFILE64_SOURCE 1 ++_ACEOF + ++ CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_frexp" = no; then +- for ac_lib in m; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF ++ ++# Some systems have frexp only in -lm, not in -lc. ++{ echo "$as_me:$LINENO: checking for library containing frexp" >&5 ++echo $ECHO_N "checking for library containing frexp... $ECHO_C" >&6; } ++if test "${ac_cv_search_frexp+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_func_search_save_LIBS=$LIBS ++cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char frexp (); + int + main () + { +-frexp (); ++return frexp (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++for ac_lib in '' m; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_frexp="-l$ac_lib" +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_frexp=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_frexp+set}" = set; then ++ break ++fi ++done ++if test "${ac_cv_search_frexp+set}" = set; then ++ : ++else ++ ac_cv_search_frexp=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_frexp" >&5 +-echo "${ECHO_T}$ac_cv_search_frexp" >&6 +-if test "$ac_cv_search_frexp" != no; then +- test "$ac_cv_search_frexp" = "none required" || LIBS="$ac_cv_search_frexp $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_frexp" >&5 ++echo "${ECHO_T}$ac_cv_search_frexp" >&6; } ++ac_res=$ac_cv_search_frexp ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + + +-echo "$as_me:$LINENO: checking for time_t in time.h" >&5 +-echo $ECHO_N "checking for time_t in time.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for time_t in time.h" >&5 ++echo $ECHO_N "checking for time_t in time.h... $ECHO_C" >&6; } + if test "${bu_cv_decl_time_t_time_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9768,39 +10211,35 @@ time_t i; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bu_cv_decl_time_t_time_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_decl_time_t_time_h=no ++ bu_cv_decl_time_t_time_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_time_h" >&5 +-echo "${ECHO_T}$bu_cv_decl_time_t_time_h" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_time_h" >&5 ++echo "${ECHO_T}$bu_cv_decl_time_t_time_h" >&6; } + if test $bu_cv_decl_time_t_time_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -9809,8 +10248,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for time_t in sys/types.h" >&5 +-echo $ECHO_N "checking for time_t in sys/types.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for time_t in sys/types.h" >&5 ++echo $ECHO_N "checking for time_t in sys/types.h... $ECHO_C" >&6; } + if test "${bu_cv_decl_time_t_types_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9830,39 +10269,35 @@ time_t i; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bu_cv_decl_time_t_types_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_decl_time_t_types_h=no ++ bu_cv_decl_time_t_types_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_types_h" >&5 +-echo "${ECHO_T}$bu_cv_decl_time_t_types_h" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_types_h" >&5 ++echo "${ECHO_T}$bu_cv_decl_time_t_types_h" >&6; } + if test $bu_cv_decl_time_t_types_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -9871,8 +10306,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 +-echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 ++echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6; } + if test "${bu_cv_decl_getopt_unistd_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9892,39 +10327,35 @@ extern int getopt (int, char *const*, co + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bu_cv_decl_getopt_unistd_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_decl_getopt_unistd_h=no ++ bu_cv_decl_getopt_unistd_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_decl_getopt_unistd_h" >&5 +-echo "${ECHO_T}$bu_cv_decl_getopt_unistd_h" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_decl_getopt_unistd_h" >&5 ++echo "${ECHO_T}$bu_cv_decl_getopt_unistd_h" >&6; } + if test $bu_cv_decl_getopt_unistd_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -9935,8 +10366,8 @@ fi + + # Under Next 3.2 apparently does not define struct utimbuf + # by default. +-echo "$as_me:$LINENO: checking for utime.h" >&5 +-echo $ECHO_N "checking for utime.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for utime.h" >&5 ++echo $ECHO_N "checking for utime.h... $ECHO_C" >&6; } + if test "${bu_cv_header_utime_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9960,39 +10391,35 @@ struct utimbuf s; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bu_cv_header_utime_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_header_utime_h=no ++ bu_cv_header_utime_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_header_utime_h" >&5 +-echo "${ECHO_T}$bu_cv_header_utime_h" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_header_utime_h" >&5 ++echo "${ECHO_T}$bu_cv_header_utime_h" >&6; } + if test $bu_cv_header_utime_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -10001,8 +10428,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking whether fprintf is declared" >&5 +-echo $ECHO_N "checking whether fprintf is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether fprintf is declared" >&5 ++echo $ECHO_N "checking whether fprintf is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_fprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10017,7 +10444,7 @@ int + main () + { + #ifndef fprintf +- char *p = (char *) fprintf; ++ (void) fprintf; + #endif + + ; +@@ -10025,38 +10452,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_fprintf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_fprintf=no ++ ac_cv_have_decl_fprintf=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fprintf" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_fprintf" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fprintf" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_fprintf" >&6; } + if test $ac_cv_have_decl_fprintf = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10071,8 +10494,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 +-echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 ++echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_stpcpy+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10087,7 +10510,7 @@ int + main () + { + #ifndef stpcpy +- char *p = (char *) stpcpy; ++ (void) stpcpy; + #endif + + ; +@@ -10095,38 +10518,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_stpcpy=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_stpcpy=no ++ ac_cv_have_decl_stpcpy=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6; } + if test $ac_cv_have_decl_stpcpy = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10141,8 +10560,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether strstr is declared" >&5 +-echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether strstr is declared" >&5 ++echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_strstr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10157,7 +10576,7 @@ int + main () + { + #ifndef strstr +- char *p = (char *) strstr; ++ (void) strstr; + #endif + + ; +@@ -10165,38 +10584,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_strstr=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_strstr=no ++ ac_cv_have_decl_strstr=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6; } + if test $ac_cv_have_decl_strstr = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10211,8 +10626,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 +-echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 ++echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_sbrk+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10227,7 +10642,7 @@ int + main () + { + #ifndef sbrk +- char *p = (char *) sbrk; ++ (void) sbrk; + #endif + + ; +@@ -10235,38 +10650,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_sbrk=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_sbrk=no ++ ac_cv_have_decl_sbrk=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6; } + if test $ac_cv_have_decl_sbrk = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10281,8 +10692,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether getenv is declared" >&5 +-echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether getenv is declared" >&5 ++echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_getenv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10297,7 +10708,7 @@ int + main () + { + #ifndef getenv +- char *p = (char *) getenv; ++ (void) getenv; + #endif + + ; +@@ -10305,38 +10716,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_getenv=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_getenv=no ++ ac_cv_have_decl_getenv=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6; } + if test $ac_cv_have_decl_getenv = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10351,8 +10758,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether environ is declared" >&5 +-echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether environ is declared" >&5 ++echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_environ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10367,7 +10774,7 @@ int + main () + { + #ifndef environ +- char *p = (char *) environ; ++ (void) environ; + #endif + + ; +@@ -10375,38 +10782,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_environ=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_environ=no ++ ac_cv_have_decl_environ=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_environ" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_environ" >&6; } + if test $ac_cv_have_decl_environ = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10421,8 +10824,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5 +-echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5 ++echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10437,7 +10840,7 @@ int + main () + { + #ifndef getc_unlocked +- char *p = (char *) getc_unlocked; ++ (void) getc_unlocked; + #endif + + ; +@@ -10445,38 +10848,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_getc_unlocked=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_getc_unlocked=no ++ ac_cv_have_decl_getc_unlocked=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; } + if test $ac_cv_have_decl_getc_unlocked = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10491,8 +10890,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 +-echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 ++echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_snprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10507,7 +10906,7 @@ int + main () + { + #ifndef snprintf +- char *p = (char *) snprintf; ++ (void) snprintf; + #endif + + ; +@@ -10515,38 +10914,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_snprintf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_snprintf=no ++ ac_cv_have_decl_snprintf=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6; } + if test $ac_cv_have_decl_snprintf = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10561,8 +10956,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 +-echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 ++echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_vsnprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10577,7 +10972,7 @@ int + main () + { + #ifndef vsnprintf +- char *p = (char *) vsnprintf; ++ (void) vsnprintf; + #endif + + ; +@@ -10585,38 +10980,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_vsnprintf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_vsnprintf=no ++ ac_cv_have_decl_vsnprintf=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6; } + if test $ac_cv_have_decl_vsnprintf = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10817,8 +11208,10 @@ done + + + +- ac_config_files="$ac_config_files Makefile doc/Makefile po/Makefile.in:po/Make-in" +- ac_config_commands="$ac_config_commands default" ++ac_config_files="$ac_config_files Makefile doc/Makefile po/Makefile.in:po/Make-in" ++ ++ac_config_commands="$ac_config_commands default" ++ + cat >confcache <<\_ACEOF + # This file is a shell script that caches the results of configure + # tests run on this system so they can be shared between configure +@@ -10837,39 +11230,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done ++ + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -10878,32 +11290,18 @@ test "x$prefix" = xNONE && prefix=$ac_de + # Let make expand exec_prefix. + test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +-# VPATH may cause trouble with some makes, so we remove $(srcdir), +-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +-# trailing colons and then remove the whole line if VPATH becomes empty +-# (actually we leave an empty line to preserve line numbers). +-if test "x$srcdir" = x.; then +- ac_vpsub='/^[ ]*VPATH[ ]*=/{ +-s/:*\$(srcdir):*/:/; +-s/:*\${srcdir}:*/:/; +-s/:*@srcdir@:*/:/; +-s/^\([^=]*=[ ]*\):*/\1/; +-s/:*$//; +-s/^[^=]*=[ ]*$//; +-}' +-fi +- + DEFS=-DHAVE_CONFIG_H + + ac_libobjs= + ac_ltlibobjs= + for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. +- ac_i=`echo "$ac_i" | +- sed 's/\$U\././;s/\.o$//;s/\.obj$//'` +- # 2. Add them. +- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" +- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' ++ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ++ ac_i=`echo "$ac_i" | sed "$ac_script"` ++ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR ++ # will be set to the directory where LIBOBJS objects are built. ++ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ++ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + done + LIBOBJS=$ac_libobjs + +@@ -10955,17 +11353,45 @@ cat >>$CONFIG_STATUS <<\_ACEOF + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++ ++ ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -10975,8 +11401,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi ++ + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -10990,18 +11451,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -11009,159 +11471,120 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + +- +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits +- +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh +-fi ++# CDPATH. ++$as_unset CDPATH + + +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done + +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in +- /*) +- if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || +- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} ++ chmod +x "$as_me.lineno" || ++ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -11170,7 +11593,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -11179,31 +11623,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH +- + exec 6>&1 + +-# Open the log real soon, to keep \$[0] and so on meaningful, and to ++# Save the log message, to keep $[0] and so on meaningful, and to + # report actual input values of CONFIG_FILES etc. instead of their +-# values after options handling. Logging --version etc. is OK. +-exec 5>>config.log +-{ +- echo +- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +-## Running $as_me. ## +-_ASBOX +-} >&5 +-cat >&5 <<_CSEOF +- ++# values after options handling. ++ac_log=" + This file was extended by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS +@@ -11211,30 +11638,20 @@ generated by GNU Autoconf 2.59. Invocat + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +-_CSEOF +-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +-echo >&5 ++on `(hostname || uname -n) 2>/dev/null | sed 1q` ++" ++ + _ACEOF + ++cat >>$CONFIG_STATUS <<_ACEOF + # Files that config.status was made for. +-if test -n "$ac_config_files"; then +- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_headers"; then +- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_links"; then +- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +-fi ++config_files="$ac_config_files" ++config_headers="$ac_config_headers" ++config_commands="$ac_config_commands" + +-if test -n "$ac_config_commands"; then +- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +-fi ++_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +- + ac_cs_usage="\ + \`$as_me' instantiates files from templates according to the + current configuration. +@@ -11242,7 +11659,7 @@ current configuration. + Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit +- -V, --version print version number, then exit ++ -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions +@@ -11261,19 +11678,21 @@ Configuration commands: + $config_commands + + Report bugs to ." +-_ACEOF + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + ac_cs_version="\\ + config.status +-configured by $0, generated by GNU Autoconf 2.59, +- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" ++configured by $0, generated by GNU Autoconf 2.61, ++ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 2006 Free Software Foundation, Inc. + This config.status script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it." +-srcdir=$srcdir +-INSTALL="$INSTALL" ++ ++ac_pwd='$ac_pwd' ++srcdir='$srcdir' ++INSTALL='$INSTALL' + _ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +@@ -11284,39 +11703,24 @@ while test $# != 0 + do + case $1 in + --*=*) +- ac_option=`expr "x$1" : 'x\([^=]*\)='` +- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ++ ac_option=`expr "X$1" : 'X\([^=]*\)='` ++ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; +- -*) ++ *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; +- *) # This is not an option, so the user has probably given explicit +- # arguments. +- ac_option=$1 +- ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; +- --version | --vers* | -V ) +- echo "$ac_cs_version"; exit 0 ;; +- --he | --h) +- # Conflict between --help and --header +- { { echo "$as_me:$LINENO: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&2;} +- { (exit 1); exit 1; }; };; +- --help | --hel | -h ) +- echo "$ac_cs_usage"; exit 0 ;; +- --debug | --d* | -d ) ++ --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) ++ echo "$ac_cs_version"; exit ;; ++ --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift +@@ -11326,18 +11730,24 @@ Try \`$0 --help' for more information." + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; ++ --he | --h) ++ # Conflict between --help and --header ++ { echo "$as_me: error: ambiguous option: $1 ++Try \`$0 --help' for more information." >&2 ++ { (exit 1); exit 1; }; };; ++ --help | --hel | -h ) ++ echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. +- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&2;} ++ -*) { echo "$as_me: error: unrecognized option: $1 ++Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + +- *) ac_config_targets="$ac_config_targets $1" ;; ++ *) ac_config_targets="$ac_config_targets $1" ++ ac_need_defaults=false ;; + + esac + shift +@@ -11353,40 +11763,52 @@ fi + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + if \$ac_cs_recheck; then +- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 +- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion ++ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 ++ CONFIG_SHELL=$SHELL ++ export CONFIG_SHELL ++ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + fi + + _ACEOF ++cat >>$CONFIG_STATUS <<\_ACEOF ++exec 5>>config.log ++{ ++ echo ++ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ++## Running $as_me. ## ++_ASBOX ++ echo "$ac_log" ++} >&5 + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + # +-# INIT-COMMANDS section. ++# INIT-COMMANDS + # +- + AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + _ACEOF + +- +- + cat >>$CONFIG_STATUS <<\_ACEOF ++ ++# Handling of arguments. + for ac_config_target in $ac_config_targets + do +- case "$ac_config_target" in +- # Handling of arguments. +- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; +- "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; +- "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; +- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; +- "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; +- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ case $ac_config_target in ++ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; ++ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; ++ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; ++ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; ++ "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; ++ + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac + done + ++ + # If the user did not use the arguments to specify the items to instantiate, + # then the envvar interface is used. Set only those that are not. + # We use the long form for the default assignment because of an extremely +@@ -11398,391 +11820,496 @@ if $ac_need_defaults; then + fi + + # Have a temporary directory for convenience. Make it in the build tree +-# simply because there is no reason to put it here, and in addition, ++# simply because there is no reason against having it here, and in addition, + # creating and moving files from /tmp can sometimes cause problems. +-# Create a temporary directory, and hook for its removal unless debugging. ++# Hook for its removal unless debugging. ++# Note that there is a small window in which the directory will not be cleaned: ++# after its creation but before its name has been assigned to `$tmp'. + $debug || + { +- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 ++ tmp= ++ trap 'exit_status=$? ++ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ++' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 + } +- + # Create a (secure) tmp directory for tmp files. + + { +- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && ++ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" + } || + { +- tmp=./confstat$$-$RANDOM +- (umask 077 && mkdir $tmp) ++ tmp=./conf$$-$RANDOM ++ (umask 077 && mkdir "$tmp") + } || + { + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } + } + +-_ACEOF +- +-cat >>$CONFIG_STATUS <<_ACEOF +- + # +-# CONFIG_FILES section. ++# Set up the sed scripts for CONFIG_FILES section. + # + + # No need to generate the scripts if there are no CONFIG_FILES. + # This happens for instance when ./config.status config.h +-if test -n "\$CONFIG_FILES"; then +- # Protect against being on the right side of a sed subst in config.status. +- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; +- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +-s,@SHELL@,$SHELL,;t t +-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +-s,@exec_prefix@,$exec_prefix,;t t +-s,@prefix@,$prefix,;t t +-s,@program_transform_name@,$program_transform_name,;t t +-s,@bindir@,$bindir,;t t +-s,@sbindir@,$sbindir,;t t +-s,@libexecdir@,$libexecdir,;t t +-s,@datadir@,$datadir,;t t +-s,@sysconfdir@,$sysconfdir,;t t +-s,@sharedstatedir@,$sharedstatedir,;t t +-s,@localstatedir@,$localstatedir,;t t +-s,@libdir@,$libdir,;t t +-s,@includedir@,$includedir,;t t +-s,@oldincludedir@,$oldincludedir,;t t +-s,@infodir@,$infodir,;t t +-s,@mandir@,$mandir,;t t +-s,@build_alias@,$build_alias,;t t +-s,@host_alias@,$host_alias,;t t +-s,@target_alias@,$target_alias,;t t +-s,@DEFS@,$DEFS,;t t +-s,@ECHO_C@,$ECHO_C,;t t +-s,@ECHO_N@,$ECHO_N,;t t +-s,@ECHO_T@,$ECHO_T,;t t +-s,@LIBS@,$LIBS,;t t +-s,@build@,$build,;t t +-s,@build_cpu@,$build_cpu,;t t +-s,@build_vendor@,$build_vendor,;t t +-s,@build_os@,$build_os,;t t +-s,@host@,$host,;t t +-s,@host_cpu@,$host_cpu,;t t +-s,@host_vendor@,$host_vendor,;t t +-s,@host_os@,$host_os,;t t +-s,@target@,$target,;t t +-s,@target_cpu@,$target_cpu,;t t +-s,@target_vendor@,$target_vendor,;t t +-s,@target_os@,$target_os,;t t +-s,@CC@,$CC,;t t +-s,@CFLAGS@,$CFLAGS,;t t +-s,@LDFLAGS@,$LDFLAGS,;t t +-s,@CPPFLAGS@,$CPPFLAGS,;t t +-s,@ac_ct_CC@,$ac_ct_CC,;t t +-s,@EXEEXT@,$EXEEXT,;t t +-s,@OBJEXT@,$OBJEXT,;t t +-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +-s,@INSTALL_DATA@,$INSTALL_DATA,;t t +-s,@CYGPATH_W@,$CYGPATH_W,;t t +-s,@PACKAGE@,$PACKAGE,;t t +-s,@VERSION@,$VERSION,;t t +-s,@ACLOCAL@,$ACLOCAL,;t t +-s,@AUTOCONF@,$AUTOCONF,;t t +-s,@AUTOMAKE@,$AUTOMAKE,;t t +-s,@AUTOHEADER@,$AUTOHEADER,;t t +-s,@MAKEINFO@,$MAKEINFO,;t t +-s,@install_sh@,$install_sh,;t t +-s,@STRIP@,$STRIP,;t t +-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +-s,@mkdir_p@,$mkdir_p,;t t +-s,@AWK@,$AWK,;t t +-s,@SET_MAKE@,$SET_MAKE,;t t +-s,@am__leading_dot@,$am__leading_dot,;t t +-s,@AMTAR@,$AMTAR,;t t +-s,@am__tar@,$am__tar,;t t +-s,@am__untar@,$am__untar,;t t +-s,@DEPDIR@,$DEPDIR,;t t +-s,@am__include@,$am__include,;t t +-s,@am__quote@,$am__quote,;t t +-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +-s,@CCDEPMODE@,$CCDEPMODE,;t t +-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +-s,@LN_S@,$LN_S,;t t +-s,@RANLIB@,$RANLIB,;t t +-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +-s,@LIBTOOL@,$LIBTOOL,;t t +-s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t +-s,@NO_WERROR@,$NO_WERROR,;t t +-s,@YACC@,$YACC,;t t +-s,@LEX@,$LEX,;t t +-s,@LEXLIB@,$LEXLIB,;t t +-s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t +-s,@CPP@,$CPP,;t t +-s,@EGREP@,$EGREP,;t t +-s,@ALLOCA@,$ALLOCA,;t t +-s,@USE_NLS@,$USE_NLS,;t t +-s,@MSGFMT@,$MSGFMT,;t t +-s,@GMSGFMT@,$GMSGFMT,;t t +-s,@XGETTEXT@,$XGETTEXT,;t t +-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t +-s,@CATALOGS@,$CATALOGS,;t t +-s,@CATOBJEXT@,$CATOBJEXT,;t t +-s,@DATADIRNAME@,$DATADIRNAME,;t t +-s,@GMOFILES@,$GMOFILES,;t t +-s,@INSTOBJEXT@,$INSTOBJEXT,;t t +-s,@INTLDEPS@,$INTLDEPS,;t t +-s,@INTLLIBS@,$INTLLIBS,;t t +-s,@INTLOBJS@,$INTLOBJS,;t t +-s,@POFILES@,$POFILES,;t t +-s,@POSUB@,$POSUB,;t t +-s,@INCLUDE_LOCALE_H@,$INCLUDE_LOCALE_H,;t t +-s,@GT_NO@,$GT_NO,;t t +-s,@GT_YES@,$GT_YES,;t t +-s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +-s,@l@,$l,;t t +-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +-s,@MAINT@,$MAINT,;t t +-s,@HDEFINES@,$HDEFINES,;t t +-s,@AR@,$AR,;t t +-s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t +-s,@EXEEXT_FOR_BUILD@,$EXEEXT_FOR_BUILD,;t t +-s,@DEMANGLER_NAME@,$DEMANGLER_NAME,;t t +-s,@NLMCONV_DEFS@,$NLMCONV_DEFS,;t t +-s,@BUILD_NLMCONV@,$BUILD_NLMCONV,;t t +-s,@BUILD_SRCONV@,$BUILD_SRCONV,;t t +-s,@BUILD_DLLTOOL@,$BUILD_DLLTOOL,;t t +-s,@DLLTOOL_DEFS@,$DLLTOOL_DEFS,;t t +-s,@BUILD_WINDRES@,$BUILD_WINDRES,;t t +-s,@BUILD_DLLWRAP@,$BUILD_DLLWRAP,;t t +-s,@BUILD_MISC@,$BUILD_MISC,;t t +-s,@OBJDUMP_DEFS@,$OBJDUMP_DEFS,;t t +-s,@EMULATION@,$EMULATION,;t t +-s,@EMULATION_VECTOR@,$EMULATION_VECTOR,;t t +-s,@datarootdir@,$datarootdir,;t t +-s,@docdir@,$docdir,;t t +-s,@htmldir@,$htmldir,;t t +-s,@LIBOBJS@,$LIBOBJS,;t t +-s,@LTLIBOBJS@,$LTLIBOBJS,;t t +-CEOF +- +-_ACEOF +- +- cat >>$CONFIG_STATUS <<\_ACEOF +- # Split the substitutions into bite-sized pieces for seds with +- # small command number limits, like on Digital OSF/1 and HP-UX. +- ac_max_sed_lines=48 +- ac_sed_frag=1 # Number of current file. +- ac_beg=1 # First line for current file. +- ac_end=$ac_max_sed_lines # Line after last line for current file. +- ac_more_lines=: +- ac_sed_cmds= +- while $ac_more_lines; do +- if test $ac_beg -gt 1; then +- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- else +- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- fi +- if test ! -s $tmp/subs.frag; then +- ac_more_lines=false +- else +- # The purpose of the label and of the branching condition is to +- # speed up the sed processing (if there are no `@' at all, there +- # is no need to browse any of the substitutions). +- # These are the two extra sed commands mentioned above. +- (echo ':t +- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" +- else +- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" +- fi +- ac_sed_frag=`expr $ac_sed_frag + 1` +- ac_beg=$ac_end +- ac_end=`expr $ac_end + $ac_max_sed_lines` +- fi +- done +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds=cat ++if test -n "$CONFIG_FILES"; then ++ ++_ACEOF ++ ++ ++ ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++SHELL!$SHELL$ac_delim ++PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim ++PACKAGE_NAME!$PACKAGE_NAME$ac_delim ++PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim ++PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim ++PACKAGE_STRING!$PACKAGE_STRING$ac_delim ++PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim ++exec_prefix!$exec_prefix$ac_delim ++prefix!$prefix$ac_delim ++program_transform_name!$program_transform_name$ac_delim ++bindir!$bindir$ac_delim ++sbindir!$sbindir$ac_delim ++libexecdir!$libexecdir$ac_delim ++datarootdir!$datarootdir$ac_delim ++datadir!$datadir$ac_delim ++sysconfdir!$sysconfdir$ac_delim ++sharedstatedir!$sharedstatedir$ac_delim ++localstatedir!$localstatedir$ac_delim ++includedir!$includedir$ac_delim ++oldincludedir!$oldincludedir$ac_delim ++docdir!$docdir$ac_delim ++infodir!$infodir$ac_delim ++htmldir!$htmldir$ac_delim ++dvidir!$dvidir$ac_delim ++pdfdir!$pdfdir$ac_delim ++psdir!$psdir$ac_delim ++libdir!$libdir$ac_delim ++localedir!$localedir$ac_delim ++mandir!$mandir$ac_delim ++DEFS!$DEFS$ac_delim ++ECHO_C!$ECHO_C$ac_delim ++ECHO_N!$ECHO_N$ac_delim ++ECHO_T!$ECHO_T$ac_delim ++LIBS!$LIBS$ac_delim ++build_alias!$build_alias$ac_delim ++host_alias!$host_alias$ac_delim ++target_alias!$target_alias$ac_delim ++build!$build$ac_delim ++build_cpu!$build_cpu$ac_delim ++build_vendor!$build_vendor$ac_delim ++build_os!$build_os$ac_delim ++host!$host$ac_delim ++host_cpu!$host_cpu$ac_delim ++host_vendor!$host_vendor$ac_delim ++host_os!$host_os$ac_delim ++target!$target$ac_delim ++target_cpu!$target_cpu$ac_delim ++target_vendor!$target_vendor$ac_delim ++target_os!$target_os$ac_delim ++CC!$CC$ac_delim ++CFLAGS!$CFLAGS$ac_delim ++LDFLAGS!$LDFLAGS$ac_delim ++CPPFLAGS!$CPPFLAGS$ac_delim ++ac_ct_CC!$ac_ct_CC$ac_delim ++EXEEXT!$EXEEXT$ac_delim ++OBJEXT!$OBJEXT$ac_delim ++INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim ++INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim ++INSTALL_DATA!$INSTALL_DATA$ac_delim ++CYGPATH_W!$CYGPATH_W$ac_delim ++PACKAGE!$PACKAGE$ac_delim ++VERSION!$VERSION$ac_delim ++ACLOCAL!$ACLOCAL$ac_delim ++AUTOCONF!$AUTOCONF$ac_delim ++AUTOMAKE!$AUTOMAKE$ac_delim ++AUTOHEADER!$AUTOHEADER$ac_delim ++MAKEINFO!$MAKEINFO$ac_delim ++install_sh!$install_sh$ac_delim ++STRIP!$STRIP$ac_delim ++INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim ++mkdir_p!$mkdir_p$ac_delim ++AWK!$AWK$ac_delim ++SET_MAKE!$SET_MAKE$ac_delim ++am__leading_dot!$am__leading_dot$ac_delim ++AMTAR!$AMTAR$ac_delim ++am__tar!$am__tar$ac_delim ++am__untar!$am__untar$ac_delim ++DEPDIR!$DEPDIR$ac_delim ++am__include!$am__include$ac_delim ++am__quote!$am__quote$ac_delim ++AMDEP_TRUE!$AMDEP_TRUE$ac_delim ++AMDEP_FALSE!$AMDEP_FALSE$ac_delim ++AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim ++CCDEPMODE!$CCDEPMODE$ac_delim ++am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim ++am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim ++LN_S!$LN_S$ac_delim ++RANLIB!$RANLIB$ac_delim ++LIBTOOL!$LIBTOOL$ac_delim ++WARN_CFLAGS!$WARN_CFLAGS$ac_delim ++NO_WERROR!$NO_WERROR$ac_delim ++YACC!$YACC$ac_delim ++YFLAGS!$YFLAGS$ac_delim ++LEX!$LEX$ac_delim ++LEX_OUTPUT_ROOT!$LEX_OUTPUT_ROOT$ac_delim ++LEXLIB!$LEXLIB$ac_delim ++CPP!$CPP$ac_delim ++_ACEOF ++ ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +-fi # test -n "$CONFIG_FILES" ++done ++ ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi ++ ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b ++_ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++CEOF$ac_eof ++_ACEOF ++ ++ ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++GREP!$GREP$ac_delim ++EGREP!$EGREP$ac_delim ++ALLOCA!$ALLOCA$ac_delim ++USE_NLS!$USE_NLS$ac_delim ++MSGFMT!$MSGFMT$ac_delim ++GMSGFMT!$GMSGFMT$ac_delim ++XGETTEXT!$XGETTEXT$ac_delim ++USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim ++CATALOGS!$CATALOGS$ac_delim ++CATOBJEXT!$CATOBJEXT$ac_delim ++DATADIRNAME!$DATADIRNAME$ac_delim ++GMOFILES!$GMOFILES$ac_delim ++INSTOBJEXT!$INSTOBJEXT$ac_delim ++INTLDEPS!$INTLDEPS$ac_delim ++INTLLIBS!$INTLLIBS$ac_delim ++INTLOBJS!$INTLOBJS$ac_delim ++POFILES!$POFILES$ac_delim ++POSUB!$POSUB$ac_delim ++INCLUDE_LOCALE_H!$INCLUDE_LOCALE_H$ac_delim ++GT_NO!$GT_NO$ac_delim ++GT_YES!$GT_YES$ac_delim ++MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim ++l!$l$ac_delim ++MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim ++MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim ++MAINT!$MAINT$ac_delim ++HDEFINES!$HDEFINES$ac_delim ++AR!$AR$ac_delim ++CC_FOR_BUILD!$CC_FOR_BUILD$ac_delim ++EXEEXT_FOR_BUILD!$EXEEXT_FOR_BUILD$ac_delim ++DEMANGLER_NAME!$DEMANGLER_NAME$ac_delim ++NLMCONV_DEFS!$NLMCONV_DEFS$ac_delim ++BUILD_NLMCONV!$BUILD_NLMCONV$ac_delim ++BUILD_SRCONV!$BUILD_SRCONV$ac_delim ++BUILD_DLLTOOL!$BUILD_DLLTOOL$ac_delim ++DLLTOOL_DEFS!$DLLTOOL_DEFS$ac_delim ++BUILD_WINDRES!$BUILD_WINDRES$ac_delim ++BUILD_DLLWRAP!$BUILD_DLLWRAP$ac_delim ++BUILD_MISC!$BUILD_MISC$ac_delim ++OBJDUMP_DEFS!$OBJDUMP_DEFS$ac_delim ++EMULATION!$EMULATION$ac_delim ++EMULATION_VECTOR!$EMULATION_VECTOR$ac_delim ++LIBOBJS!$LIBOBJS$ac_delim ++LTLIBOBJS!$LTLIBOBJS$ac_delim ++_ACEOF ++ ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 44; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " ++ fi ++done + ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi ++ ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end ++_ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++:end ++s/|#_!!_#|//g ++CEOF$ac_eof + _ACEOF ++ ++ ++# VPATH may cause trouble with some makes, so we remove $(srcdir), ++# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and ++# trailing colons and then remove the whole line if VPATH becomes empty ++# (actually we leave an empty line to preserve line numbers). ++if test "x$srcdir" = x.; then ++ ac_vpsub='/^[ ]*VPATH[ ]*=/{ ++s/:*\$(srcdir):*/:/ ++s/:*\${srcdir}:*/:/ ++s/:*@srcdir@:*/:/ ++s/^\([^=]*=[ ]*\):*/\1/ ++s/:*$// ++s/^[^=]*=[ ]*$// ++}' ++fi ++ + cat >>$CONFIG_STATUS <<\_ACEOF +-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". +- case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++fi # test -n "$CONFIG_FILES" ++ ++ ++for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS ++do ++ case $ac_tag in ++ :[FHLC]) ac_mode=$ac_tag; continue;; ++ esac ++ case $ac_mode$ac_tag in ++ :[FHL]*:*);; ++ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 ++echo "$as_me: error: Invalid tag $ac_tag." >&2;} ++ { (exit 1); exit 1; }; };; ++ :[FH]-) ac_tag=-:-;; ++ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; ++ esac ++ ac_save_IFS=$IFS ++ IFS=: ++ set x $ac_tag ++ IFS=$ac_save_IFS ++ shift ++ ac_file=$1 ++ shift ++ ++ case $ac_mode in ++ :L) ac_source=$1;; ++ :[FH]) ++ ac_file_inputs= ++ for ac_f ++ do ++ case $ac_f in ++ -) ac_f="$tmp/stdin";; ++ *) # Look for the file first in the build tree, then in the source tree ++ # (if the path is not absolute). The absolute path cannot be DOS-style, ++ # because $ac_f cannot contain `:'. ++ test -f "$ac_f" || ++ case $ac_f in ++ [\\/$]*) false;; ++ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; ++ esac || ++ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 ++echo "$as_me: error: cannot find input file: $ac_f" >&2;} ++ { (exit 1); exit 1; }; };; ++ esac ++ ac_file_inputs="$ac_file_inputs $ac_f" ++ done ++ ++ # Let's still pretend it is `configure' which instantiates (i.e., don't ++ # use $as_me), people would be surprised to read: ++ # /* config.h. Generated by config.status. */ ++ configure_input="Generated from "`IFS=: ++ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." ++ if test x"$ac_file" != x-; then ++ configure_input="$ac_file. $configure_input" ++ { echo "$as_me:$LINENO: creating $ac_file" >&5 ++echo "$as_me: creating $ac_file" >&6;} ++ fi ++ ++ case $ac_tag in ++ *:-:* | *:-) cat >"$tmp/stdin";; ++ esac ++ ;; + esac + +- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. +- ac_dir=`(dirname "$ac_file") 2>/dev/null || ++ ac_dir=`$as_dirname -- "$ac_file" || + $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir="$ac_dir" ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac + ++ case $ac_mode in ++ :F) ++ # ++ # CONFIG_FILE ++ # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; +- *) ac_INSTALL=$ac_top_builddir$INSTALL ;; ++ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac ++_ACEOF + +- if test x"$ac_file" != x-; then +- { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- rm -f "$ac_file" +- fi +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- configure_input= +- else +- configure_input="$ac_file. " +- fi +- configure_input=$configure_input"Generated from `echo $ac_file_in | +- sed 's,.*/,,'` by configure." +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } ++cat >>$CONFIG_STATUS <<\_ACEOF ++# If the template does not know about datarootdir, expand it. ++# FIXME: This hack should be removed a few years after 2.60. ++ac_datarootdir_hack=; ac_datarootdir_seen= ++ ++case `sed -n '/datarootdir/ { ++ p ++ q ++} ++/@datadir@/p ++/@docdir@/p ++/@infodir@/p ++/@localedir@/p ++/@mandir@/p ++' $ac_file_inputs` in ++*datarootdir*) ac_datarootdir_seen=yes;; ++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) ++ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 ++echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} ++_ACEOF ++cat >>$CONFIG_STATUS <<_ACEOF ++ ac_datarootdir_hack=' ++ s&@datadir@&$datadir&g ++ s&@docdir@&$docdir&g ++ s&@infodir@&$infodir&g ++ s&@localedir@&$localedir&g ++ s&@mandir@&$mandir&g ++ s&\\\${datarootdir}&$datarootdir&g' ;; ++esac + _ACEOF ++ ++# Neutralize VPATH when `$srcdir' = `.'. ++# Shell code in configure.ac might set extrasub. ++# FIXME: do we really want to maintain this feature? + cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub + $extrasub +@@ -11790,248 +12317,130 @@ _ACEOF + cat >>$CONFIG_STATUS <<\_ACEOF + :t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b +-s,@configure_input@,$configure_input,;t t +-s,@srcdir@,$ac_srcdir,;t t +-s,@abs_srcdir@,$ac_abs_srcdir,;t t +-s,@top_srcdir@,$ac_top_srcdir,;t t +-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +-s,@builddir@,$ac_builddir,;t t +-s,@abs_builddir@,$ac_abs_builddir,;t t +-s,@top_builddir@,$ac_top_builddir,;t t +-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +-s,@INSTALL@,$ac_INSTALL,;t t +-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out +- rm -f $tmp/stdin +- if test x"$ac_file" != x-; then +- mv $tmp/out $ac_file +- else +- cat $tmp/out +- rm -f $tmp/out +- fi +- +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_HEADER section. +-# +- +-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +-# NAME is the cpp macro being defined and VALUE is the value it is being given. +-# +-# ac_d sets the value in "#define NAME VALUE" lines. +-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +-ac_dB='[ ].*$,\1#\2' +-ac_dC=' ' +-ac_dD=',;t' +-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +-ac_uB='$,\1#\2define\3' +-ac_uC=' ' +-ac_uD=',;t' ++s&@configure_input@&$configure_input&;t t ++s&@top_builddir@&$ac_top_builddir_sub&;t t ++s&@srcdir@&$ac_srcdir&;t t ++s&@abs_srcdir@&$ac_abs_srcdir&;t t ++s&@top_srcdir@&$ac_top_srcdir&;t t ++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t ++s&@builddir@&$ac_builddir&;t t ++s&@abs_builddir@&$ac_abs_builddir&;t t ++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t ++s&@INSTALL@&$ac_INSTALL&;t t ++$ac_datarootdir_hack ++" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out ++ ++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && ++ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && ++ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && ++ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&5 ++echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&2;} + +-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". ++ rm -f "$tmp/stdin" + case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++ -) cat "$tmp/out"; rm -f "$tmp/out";; ++ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac ++ ;; ++ :H) ++ # ++ # CONFIG_HEADER ++ # ++_ACEOF ++ ++# Transform confdefs.h into a sed script `conftest.defines', that ++# substitutes the proper values into config.h.in to produce config.h. ++rm -f conftest.defines conftest.tail ++# First, append a space to every undef/define line, to ease matching. ++echo 's/$/ /' >conftest.defines ++# Then, protect against being on the right side of a sed subst, or in ++# an unquoted here document, in config.status. If some macros were ++# called several times there might be several #defines for the same ++# symbol, which is useless. But do not sort them, since the last ++# AC_DEFINE must be honored. ++ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* ++# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where ++# NAME is the cpp macro being defined, VALUE is the value it is being given. ++# PARAMS is the parameter list in the macro definition--in most cases, it's ++# just an empty string. ++ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ++ac_dB='\\)[ (].*,\\1define\\2' ++ac_dC=' ' ++ac_dD=' ,' + +- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- # Do quote $f, to prevent DOS paths from being IFS'd. +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } +- # Remove the trailing spaces. +- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in +- +-_ACEOF +- +-# Transform confdefs.h into two sed scripts, `conftest.defines' and +-# `conftest.undefs', that substitutes the proper values into +-# config.h.in to produce config.h. The first handles `#define' +-# templates, and the second `#undef' templates. +-# And first: Protect against being on the right side of a sed subst in +-# config.status. Protect against being in an unquoted here document +-# in config.status. +-rm -f conftest.defines conftest.undefs +-# Using a here document instead of a string reduces the quoting nightmare. +-# Putting comments in sed scripts is not portable. +-# +-# `end' is used to avoid that the second main sed command (meant for +-# 0-ary CPP macros) applies to n-ary macro definitions. +-# See the Autoconf documentation for `clear'. +-cat >confdef2sed.sed <<\_ACEOF +-s/[\\&,]/\\&/g +-s,[\\$`],\\&,g +-t clear +-: clear +-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +-t end +-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +-: end +-_ACEOF +-# If some macros were called several times there might be several times +-# the same #defines, which is useless. Nevertheless, we may not want to +-# sort them, since we want the *last* AC-DEFINE to be honored. +-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +-rm -f confdef2sed.sed ++uniq confdefs.h | ++ sed -n ' ++ t rset ++ :rset ++ s/^[ ]*#[ ]*define[ ][ ]*// ++ t ok ++ d ++ :ok ++ s/[\\&,]/\\&/g ++ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p ++ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ++ ' >>conftest.defines + +-# This sed command replaces #undef with comments. This is necessary, for ++# Remove the space that was appended to ease matching. ++# Then replace #undef with comments. This is necessary, for + # example, in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. +-cat >>conftest.undefs <<\_ACEOF +-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, ++# (The regexp can be short, since the line contains either #define or #undef.) ++echo 's/ $// ++s,^[ #]*u.*,/* & */,' >>conftest.defines ++ ++# Break up conftest.defines: ++ac_max_sed_lines=50 ++ ++# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" ++# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" ++# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" ++# et cetera. ++ac_in='$ac_file_inputs' ++ac_out='"$tmp/out1"' ++ac_nxt='"$tmp/out2"' ++ ++while : ++do ++ # Write a here document: ++ cat >>$CONFIG_STATUS <<_ACEOF ++ # First, check the format of the line: ++ cat >"\$tmp/defines.sed" <<\\CEOF ++/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def ++/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def ++b ++:def + _ACEOF +- +-# Break up conftest.defines because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +-echo ' :' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.defines >/dev/null +-do +- # Write a limited-size here document to $tmp/defines.sed. +- echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#define' lines. +- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS ++ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF +- sed -f $tmp/defines.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail ++ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ++ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in ++ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail ++ grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines + done +-rm -f conftest.defines +-echo ' fi # grep' >>$CONFIG_STATUS +-echo >>$CONFIG_STATUS +- +-# Break up conftest.undefs because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.undefs >/dev/null +-do +- # Write a limited-size here document to $tmp/undefs.sed. +- echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#undef' +- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS +- echo 'CEOF +- sed -f $tmp/undefs.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail +- rm -f conftest.undefs +- mv conftest.tail conftest.undefs +-done +-rm -f conftest.undefs ++rm -f conftest.defines conftest.tail + ++echo "ac_result=$ac_in" >>$CONFIG_STATUS + cat >>$CONFIG_STATUS <<\_ACEOF +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- echo "/* Generated by configure. */" >$tmp/config.h +- else +- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h +- fi +- cat $tmp/in >>$tmp/config.h +- rm -f $tmp/in + if test x"$ac_file" != x-; then +- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then ++ echo "/* $configure_input */" >"$tmp/config.h" ++ cat "$ac_result" >>"$tmp/config.h" ++ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 + echo "$as_me: $ac_file is unchanged" >&6;} + else +- ac_dir=`(dirname "$ac_file") 2>/dev/null || +-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_file" : 'X\(//\)[^/]' \| \ +- X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- + rm -f $ac_file +- mv $tmp/config.h $ac_file ++ mv "$tmp/config.h" $ac_file + fi + else +- cat $tmp/config.h +- rm -f $tmp/config.h ++ echo "/* $configure_input */" ++ cat "$ac_result" + fi ++ rm -f "$tmp/out12" + # Compute $ac_file's index in $config_headers. + _am_stamp_count=1 + for _am_header in $config_headers :; do +@@ -12042,135 +12451,39 @@ for _am_header in $config_headers :; do + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac + done +-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || ++echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || + $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ +- X$ac_file : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X$ac_file : 'X\(/\)' \| . 2>/dev/null || + echo X$ac_file | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'`/stamp-h$_am_stamp_count +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_COMMANDS section. +-# +-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue +- ac_dest=`echo "$ac_file" | sed 's,:.*,,'` +- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_dir=`(dirname "$ac_dest") 2>/dev/null || +-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_dest" : 'X\(//\)[^/]' \| \ +- X"$ac_dest" : 'X\(//\)$' \| \ +- X"$ac_dest" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_dest" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- +- ac_builddir=. +- +-if test "$ac_dir" != .; then +- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi +- +-case $srcdir in +- .) # No --srcdir option. We are building in place. +- ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. +- ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'`/stamp-h$_am_stamp_count ++ ;; + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac ++ :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 ++echo "$as_me: executing $ac_file commands" >&6;} ++ ;; ++ esac + + +- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +-echo "$as_me: executing $ac_dest commands" >&6;} +- case $ac_dest in +- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do ++ case $ac_file$ac_mode in ++ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. +@@ -12180,18 +12493,29 @@ echo "$as_me: executing $ac_dest command + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then +- dirpart=`(dirname "$mf") 2>/dev/null || ++ dirpart=`$as_dirname -- "$mf" || + $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ +- X"$mf" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$mf" : 'X\(/\)' \| . 2>/dev/null || + echo X"$mf" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + else + continue + fi +@@ -12213,58 +12537,84 @@ echo X"$mf" | + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue +- fdir=`(dirname "$file") 2>/dev/null || ++ fdir=`$as_dirname -- "$file" || + $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ +- X"$file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p $dirpart/$fdir +- else +- as_dir=$dirpart/$fdir ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir=$dirpart/$fdir ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done + ;; +- default ) ++ "default":C) + case "x$CONFIG_FILES" in + *) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; + esac + ;; ++ + esac +-done +-_ACEOF ++done # for ac_tag + +-cat >>$CONFIG_STATUS <<\_ACEOF + + { (exit 0); exit 0; } + _ACEOF +diff -Nrup binutils-2.17/binutils/doc/binutils.info binutils-2.17.atmel.1.3.0/binutils/doc/binutils.info +--- binutils-2.17/binutils/doc/binutils.info 2006-06-23 20:19:48.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/doc/binutils.info 2007-03-26 10:34:44.000000000 +0200 +@@ -1,5 +1,7 @@ +-This is ../.././binutils/doc/binutils.info, produced by makeinfo +-version 4.8 from ../.././binutils/doc/binutils.texi. ++This is ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/binutils/doc/binutils.info, ++produced by makeinfo version 4.8 from ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/binutils/doc/binutils.texi. + + START-INFO-DIR-ENTRY + * Binutils: (binutils). The GNU binary utilities. +@@ -3803,33 +3805,33 @@ Index + +  + Tag Table: +-Node: Top1751 +-Node: ar3304 +-Node: ar cmdline5482 +-Node: ar scripts13625 +-Node: nm19313 +-Node: objcopy27509 +-Node: objdump50561 +-Node: ranlib65474 +-Node: size66229 +-Node: strings69076 +-Node: strip71426 +-Node: c++filt76905 +-Ref: c++filt-Footnote-181833 +-Node: addr2line81939 +-Node: nlmconv85210 +-Node: windres87816 +-Node: dlltool93549 +-Node: def file format104387 +-Node: readelf106125 +-Node: Common Options110833 +-Node: Selecting The Target System111873 +-Node: Target Selection112805 +-Node: Architecture Selection114787 +-Node: Reporting Bugs115615 +-Node: Bug Criteria116394 +-Node: Bug Reporting116947 +-Node: GNU Free Documentation License124041 +-Node: Index143773 ++Node: Top1885 ++Node: ar3438 ++Node: ar cmdline5616 ++Node: ar scripts13759 ++Node: nm19447 ++Node: objcopy27643 ++Node: objdump50695 ++Node: ranlib65608 ++Node: size66363 ++Node: strings69210 ++Node: strip71560 ++Node: c++filt77039 ++Ref: c++filt-Footnote-181967 ++Node: addr2line82073 ++Node: nlmconv85344 ++Node: windres87950 ++Node: dlltool93683 ++Node: def file format104521 ++Node: readelf106259 ++Node: Common Options110967 ++Node: Selecting The Target System112007 ++Node: Target Selection112939 ++Node: Architecture Selection114921 ++Node: Reporting Bugs115749 ++Node: Bug Criteria116528 ++Node: Bug Reporting117081 ++Node: GNU Free Documentation License124175 ++Node: Index143907 +  + End Tag Table +diff -Nrup binutils-2.17/binutils/doc/Makefile.in binutils-2.17.atmel.1.3.0/binutils/doc/Makefile.in +--- binutils-2.17/binutils/doc/Makefile.in 2006-06-03 06:45:50.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/doc/Makefile.in 2007-03-26 10:32:10.000000000 +0200 +@@ -109,6 +109,7 @@ EXEEXT = @EXEEXT@ + EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ + GMOFILES = @GMOFILES@ + GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ + GT_NO = @GT_NO@ + GT_YES = @GT_YES@ + HDEFINES = @HDEFINES@ +@@ -159,9 +160,8 @@ VERSION = @VERSION@ + WARN_CFLAGS = @WARN_CFLAGS@ + XGETTEXT = @XGETTEXT@ + YACC = @YACC@ ++YFLAGS = @YFLAGS@ + ac_ct_CC = @ac_ct_CC@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ + am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ + am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ + am__include = @am__include@ +@@ -178,6 +178,7 @@ build_vendor = @build_vendor@ + datadir = @datadir@ + datarootdir = @datarootdir@ + docdir = @docdir@ ++dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + host = @host@ + host_alias = @host_alias@ +@@ -191,12 +192,15 @@ install_sh = @install_sh@ + l = @l@ + libdir = @libdir@ + libexecdir = @libexecdir@ ++localedir = @localedir@ + localstatedir = @localstatedir@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ ++psdir = @psdir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ +@@ -368,10 +372,13 @@ dist-info: $(INFO_DEPS) + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ +- for file in $$d/$$base*; do \ +- relfile=`expr "$$file" : "$$d/\(.*\)"`; \ +- test -f $(distdir)/$$relfile || \ +- cp -p $$file $(distdir)/$$relfile; \ ++ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ ++ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ ++ if test -f $$file; then \ ++ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ ++ test -f $(distdir)/$$relfile || \ ++ cp -p $$file $(distdir)/$$relfile; \ ++ else :; fi; \ + done; \ + done + +diff -Nrup binutils-2.17/binutils/Makefile.am binutils-2.17.atmel.1.3.0/binutils/Makefile.am +--- binutils-2.17/binutils/Makefile.am 2006-04-06 23:49:26.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/Makefile.am 2007-03-26 10:20:22.000000000 +0200 +@@ -511,7 +511,7 @@ readelf.o: readelf.c dwarf.h ../bfd/bfd. + $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/common.h \ + $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/alpha.h \ + $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h \ +- $(INCDIR)/elf/avr.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ ++ $(INCDIR)/elf/avr.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ + $(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \ + $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/h8.h \ + $(INCDIR)/elf/hppa.h $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h \ +diff -Nrup binutils-2.17/binutils/Makefile.in binutils-2.17.atmel.1.3.0/binutils/Makefile.in +--- binutils-2.17/binutils/Makefile.in 2006-06-02 04:21:08.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/Makefile.in 2007-03-26 10:32:10.000000000 +0200 +@@ -266,6 +266,7 @@ EXEEXT = @EXEEXT@ + EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ + GMOFILES = @GMOFILES@ + GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ + GT_NO = @GT_NO@ + GT_YES = @GT_YES@ + HDEFINES = @HDEFINES@ +@@ -316,9 +317,8 @@ VERSION = @VERSION@ + WARN_CFLAGS = @WARN_CFLAGS@ + XGETTEXT = @XGETTEXT@ + YACC = `if [ -f ../bison/bison ]; then echo ../bison/bison -y -L$(srcdir)/../bison/; else echo @YACC@; fi` ++YFLAGS = -d + ac_ct_CC = @ac_ct_CC@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ + am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ + am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ + am__include = @am__include@ +@@ -335,6 +335,7 @@ build_vendor = @build_vendor@ + datadir = @datadir@ + datarootdir = @datarootdir@ + docdir = @docdir@ ++dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + host = @host@ + host_alias = @host_alias@ +@@ -348,12 +349,15 @@ install_sh = @install_sh@ + l = @l@ + libdir = @libdir@ + libexecdir = @libexecdir@ ++localedir = @localedir@ + localstatedir = @localstatedir@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ ++psdir = @psdir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ +@@ -365,7 +369,6 @@ target_vendor = @target_vendor@ + AUTOMAKE_OPTIONS = cygnus dejagnu + SUBDIRS = doc po + tooldir = $(exec_prefix)/$(target_alias) +-YFLAGS = -d + AM_CFLAGS = $(WARN_CFLAGS) + + # these two are almost the same program +@@ -1264,7 +1267,7 @@ readelf.o: readelf.c dwarf.h ../bfd/bfd. + $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/common.h \ + $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/alpha.h \ + $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h \ +- $(INCDIR)/elf/avr.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ ++ $(INCDIR)/elf/avr.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ + $(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \ + $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/h8.h \ + $(INCDIR)/elf/hppa.h $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h \ +diff -Nrup binutils-2.17/binutils/readelf.c binutils-2.17.atmel.1.3.0/binutils/readelf.c +--- binutils-2.17/binutils/readelf.c 2006-03-10 18:20:28.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/binutils/readelf.c 2007-03-26 10:20:22.000000000 +0200 +@@ -71,6 +71,7 @@ + #include "elf/arc.h" + #include "elf/arm.h" + #include "elf/avr.h" ++#include "elf/avr32.h" + #include "elf/bfin.h" + #include "elf/cris.h" + #include "elf/d10v.h" +@@ -590,6 +591,7 @@ guess_is_rela (unsigned long e_machine) + case EM_MCORE: + case EM_IA_64: + case EM_AVR: ++ case EM_AVR32: + case EM_AVR_OLD: + case EM_CRIS: + case EM_860: +@@ -959,6 +961,10 @@ dump_relocations (FILE *file, + rtype = elf_avr_reloc_type (type); + break; + ++ case EM_AVR32: ++ rtype = elf_avr32_reloc_type (type); ++ break; ++ + case EM_OLD_SPARCV9: + case EM_SPARC32PLUS: + case EM_SPARCV9: +@@ -1670,6 +1676,7 @@ get_machine_name (unsigned e_machine) + case EM_VAX: return "Digital VAX"; + case EM_AVR_OLD: + case EM_AVR: return "Atmel AVR 8-bit microcontroller"; ++ case EM_AVR32: return "Atmel AVR32"; + case EM_CRIS: return "Axis Communications 32-bit embedded processor"; + case EM_JAVELIN: return "Infineon Technologies 32-bit embedded cpu"; + case EM_FIREPATH: return "Element 14 64-bit DSP processor"; +diff -Nrup binutils-2.17/configure binutils-2.17.atmel.1.3.0/configure +--- binutils-2.17/configure 2006-04-06 23:49:25.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/configure 2007-03-26 10:30:30.000000000 +0200 +@@ -899,7 +899,7 @@ host_libs="intl mmalloc libiberty opcode + # know that we are building the simulator. + # binutils, gas and ld appear in that order because it makes sense to run + # "make check" in that particular order. +-host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools" ++host_tools="byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools" + + # libgcj represents the runtime libraries only used by gcj. + libgcj="target-libffi \ +@@ -1064,6 +1064,9 @@ unsupported_languages= + # exist yet. + + case "${host}" in ++ avr32*-*-*) ++ noconfigdirs="$noconfigdirs readline gdb" ++ ;; + hppa*64*-*-*) + noconfigdirs="$noconfigdirs byacc" + ;; +@@ -1863,7 +1866,7 @@ else + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:1867: checking for $ac_word" >&5 ++echo "configure:1870: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1893,7 +1896,7 @@ if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:1897: checking for $ac_word" >&5 ++echo "configure:1900: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1944,7 +1947,7 @@ fi + # Extract the first word of "cl", so it can be a program name with args. + set dummy cl; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:1948: checking for $ac_word" >&5 ++echo "configure:1951: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1976,7 +1979,7 @@ fi + fi + + echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +-echo "configure:1980: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ++echo "configure:1983: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + + ac_ext=c + # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +@@ -1987,12 +1990,12 @@ cross_compiling=$ac_cv_prog_cc_cross + + cat > conftest.$ac_ext << EOF + +-#line 1991 "configure" ++#line 1994 "configure" + #include "confdefs.h" + + main(){return(0);} + EOF +-if { (eval echo configure:1996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:1999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then +@@ -2018,12 +2021,12 @@ if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } + fi + echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +-echo "configure:2022: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 ++echo "configure:2025: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 + echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 + cross_compiling=$ac_cv_prog_cc_cross + + echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +-echo "configure:2027: checking whether we are using GNU C" >&5 ++echo "configure:2030: checking whether we are using GNU C" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2032,7 +2035,7 @@ else + yes; + #endif + EOF +-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2036: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ++if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2039: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes + else + ac_cv_prog_gcc=no +@@ -2051,7 +2054,7 @@ ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + CFLAGS= + echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +-echo "configure:2055: checking whether ${CC-cc} accepts -g" >&5 ++echo "configure:2058: checking whether ${CC-cc} accepts -g" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2118,7 +2121,7 @@ fi + # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args. + set dummy ${ac_tool_prefix}gnatbind; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:2122: checking for $ac_word" >&5 ++echo "configure:2125: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2150,7 +2153,7 @@ if test -n "$ac_tool_prefix"; then + # Extract the first word of "gnatbind", so it can be a program name with args. + set dummy gnatbind; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:2154: checking for $ac_word" >&5 ++echo "configure:2157: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2183,7 +2186,7 @@ fi + fi + + echo $ac_n "checking whether compiler driver understands Ada""... $ac_c" 1>&6 +-echo "configure:2187: checking whether compiler driver understands Ada" >&5 ++echo "configure:2190: checking whether compiler driver understands Ada" >&5 + if eval "test \"`echo '$''{'acx_cv_cc_gcc_supports_ada'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2215,7 +2218,7 @@ else + fi + + echo $ac_n "checking how to compare bootstrapped objects""... $ac_c" 1>&6 +-echo "configure:2219: checking how to compare bootstrapped objects" >&5 ++echo "configure:2222: checking how to compare bootstrapped objects" >&5 + if eval "test \"`echo '$''{'gcc_cv_prog_cmp_skip'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2313,9 +2316,9 @@ saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $gmpinc" + # Check GMP actually works + echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6 +-echo "configure:2317: checking for correct version of gmp.h" >&5 ++echo "configure:2320: checking for correct version of gmp.h" >&5 + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:2333: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 + else +@@ -2339,12 +2342,12 @@ rm -f conftest* + + if test x"$have_gmp" = xyes; then + echo $ac_n "checking for MPFR""... $ac_c" 1>&6 +-echo "configure:2343: checking for MPFR" >&5 ++echo "configure:2346: checking for MPFR" >&5 + + saved_LIBS="$LIBS" + LIBS="$LIBS $gmplibs" + cat > conftest.$ac_ext < + #include +@@ -2352,7 +2355,7 @@ int main() { + mpfr_t n; mpfr_init(n); + ; return 0; } + EOF +-if { (eval echo configure:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:2359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 + else +@@ -3403,7 +3406,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3407: checking for $ac_word" >&5 ++echo "configure:3410: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3443,7 +3446,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3447: checking for $ac_word" >&5 ++echo "configure:3450: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3482,7 +3485,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3486: checking for $ac_word" >&5 ++echo "configure:3489: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_M4'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3521,7 +3524,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3525: checking for $ac_word" >&5 ++echo "configure:3528: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3561,7 +3564,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3565: checking for $ac_word" >&5 ++echo "configure:3568: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3600,7 +3603,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3604: checking for $ac_word" >&5 ++echo "configure:3607: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3653,7 +3656,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3657: checking for $ac_word" >&5 ++echo "configure:3660: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_EXPECT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3694,7 +3697,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3698: checking for $ac_word" >&5 ++echo "configure:3701: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RUNTEST'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3742,7 +3745,7 @@ test -n "$target_alias" && ncn_target_to + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3746: checking for $ac_word" >&5 ++echo "configure:3749: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3773,7 +3776,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3777: checking for $ac_word" >&5 ++echo "configure:3780: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3817,7 +3820,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3821: checking for $ac_word" >&5 ++echo "configure:3824: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3848,7 +3851,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3852: checking for $ac_word" >&5 ++echo "configure:3855: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3892,7 +3895,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3896: checking for $ac_word" >&5 ++echo "configure:3899: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3923,7 +3926,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3927: checking for $ac_word" >&5 ++echo "configure:3930: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3967,7 +3970,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3971: checking for $ac_word" >&5 ++echo "configure:3974: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3998,7 +4001,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4002: checking for $ac_word" >&5 ++echo "configure:4005: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4042,7 +4045,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4046: checking for $ac_word" >&5 ++echo "configure:4049: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4073,7 +4076,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4077: checking for $ac_word" >&5 ++echo "configure:4080: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4117,7 +4120,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4121: checking for $ac_word" >&5 ++echo "configure:4124: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4148,7 +4151,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4152: checking for $ac_word" >&5 ++echo "configure:4155: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4192,7 +4195,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4196: checking for $ac_word" >&5 ++echo "configure:4199: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4223,7 +4226,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4227: checking for $ac_word" >&5 ++echo "configure:4230: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4262,7 +4265,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4266: checking for $ac_word" >&5 ++echo "configure:4269: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4293,7 +4296,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4297: checking for $ac_word" >&5 ++echo "configure:4300: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4332,7 +4335,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4336: checking for $ac_word" >&5 ++echo "configure:4339: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4363,7 +4366,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4367: checking for $ac_word" >&5 ++echo "configure:4370: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4407,7 +4410,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4411: checking for $ac_word" >&5 ++echo "configure:4414: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4438,7 +4441,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4442: checking for $ac_word" >&5 ++echo "configure:4445: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4482,7 +4485,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4486: checking for $ac_word" >&5 ++echo "configure:4489: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4513,7 +4516,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4517: checking for $ac_word" >&5 ++echo "configure:4520: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4577,7 +4580,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in cc gcc; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4581: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4584: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_CC_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4594,7 +4597,7 @@ if test -z "$ac_cv_prog_CC_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4598: checking for $ac_word" >&5 ++echo "configure:4601: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4625,7 +4628,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4629: checking for $ac_word" >&5 ++echo "configure:4632: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4668,7 +4671,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in c++ g++ cxx gxx; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4672: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4675: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_CXX_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4685,7 +4688,7 @@ if test -z "$ac_cv_prog_CXX_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4689: checking for $ac_word" >&5 ++echo "configure:4692: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4716,7 +4719,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4720: checking for $ac_word" >&5 ++echo "configure:4723: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4759,7 +4762,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in gcc; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4763: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4766: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_GCC_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4776,7 +4779,7 @@ if test -z "$ac_cv_prog_GCC_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4780: checking for $ac_word" >&5 ++echo "configure:4783: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4807,7 +4810,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4811: checking for $ac_word" >&5 ++echo "configure:4814: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4845,7 +4848,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in gcj; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4849: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4852: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_GCJ_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4862,7 +4865,7 @@ if test -z "$ac_cv_prog_GCJ_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4866: checking for $ac_word" >&5 ++echo "configure:4869: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4893,7 +4896,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4897: checking for $ac_word" >&5 ++echo "configure:4900: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4936,7 +4939,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in gfortran; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4940: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4943: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_GFORTRAN_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4953,7 +4956,7 @@ if test -z "$ac_cv_prog_GFORTRAN_FOR_TAR + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4957: checking for $ac_word" >&5 ++echo "configure:4960: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4984,7 +4987,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4988: checking for $ac_word" >&5 ++echo "configure:4991: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5091,7 +5094,7 @@ rm conftest.c + if test -z "$ac_cv_path_AR_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for ar in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5095: checking for ar in $with_build_time_tools" >&5 ++echo "configure:5098: checking for ar in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/ar; then + AR_FOR_TARGET=`cd $with_build_time_tools && pwd`/ar + ac_cv_path_AR_FOR_TARGET=$AR_FOR_TARGET +@@ -5109,7 +5112,7 @@ if test -z "$ac_cv_path_AR_FOR_TARGET" ; + # Extract the first word of "ar", so it can be a program name with args. + set dummy ar; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5113: checking for $ac_word" >&5 ++echo "configure:5116: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_AR_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5146,7 +5149,7 @@ if test -z "$ac_cv_path_AR_FOR_TARGET" ; + if test -n "$with_build_time_tools"; then + for ncn_progname in ar; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5150: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5153: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_AR_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5163,7 +5166,7 @@ if test -z "$ac_cv_prog_AR_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5167: checking for $ac_word" >&5 ++echo "configure:5170: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5194,7 +5197,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5198: checking for $ac_word" >&5 ++echo "configure:5201: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5244,7 +5247,7 @@ fi + if test -z "$ac_cv_path_AS_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for as in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5248: checking for as in $with_build_time_tools" >&5 ++echo "configure:5251: checking for as in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/as; then + AS_FOR_TARGET=`cd $with_build_time_tools && pwd`/as + ac_cv_path_AS_FOR_TARGET=$AS_FOR_TARGET +@@ -5262,7 +5265,7 @@ if test -z "$ac_cv_path_AS_FOR_TARGET" ; + # Extract the first word of "as", so it can be a program name with args. + set dummy as; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5266: checking for $ac_word" >&5 ++echo "configure:5269: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_AS_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5299,7 +5302,7 @@ if test -z "$ac_cv_path_AS_FOR_TARGET" ; + if test -n "$with_build_time_tools"; then + for ncn_progname in as; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5303: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5306: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_AS_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5316,7 +5319,7 @@ if test -z "$ac_cv_prog_AS_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5320: checking for $ac_word" >&5 ++echo "configure:5323: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5347,7 +5350,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5351: checking for $ac_word" >&5 ++echo "configure:5354: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5397,7 +5400,7 @@ fi + if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for dlltool in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5401: checking for dlltool in $with_build_time_tools" >&5 ++echo "configure:5404: checking for dlltool in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/dlltool; then + DLLTOOL_FOR_TARGET=`cd $with_build_time_tools && pwd`/dlltool + ac_cv_path_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET +@@ -5415,7 +5418,7 @@ if test -z "$ac_cv_path_DLLTOOL_FOR_TARG + # Extract the first word of "dlltool", so it can be a program name with args. + set dummy dlltool; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5419: checking for $ac_word" >&5 ++echo "configure:5422: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5452,7 +5455,7 @@ if test -z "$ac_cv_path_DLLTOOL_FOR_TARG + if test -n "$with_build_time_tools"; then + for ncn_progname in dlltool; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5456: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5459: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_DLLTOOL_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5469,7 +5472,7 @@ if test -z "$ac_cv_prog_DLLTOOL_FOR_TARG + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5473: checking for $ac_word" >&5 ++echo "configure:5476: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5500,7 +5503,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5504: checking for $ac_word" >&5 ++echo "configure:5507: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5550,7 +5553,7 @@ fi + if test -z "$ac_cv_path_LD_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for ld in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5554: checking for ld in $with_build_time_tools" >&5 ++echo "configure:5557: checking for ld in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/ld; then + LD_FOR_TARGET=`cd $with_build_time_tools && pwd`/ld + ac_cv_path_LD_FOR_TARGET=$LD_FOR_TARGET +@@ -5568,7 +5571,7 @@ if test -z "$ac_cv_path_LD_FOR_TARGET" ; + # Extract the first word of "ld", so it can be a program name with args. + set dummy ld; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5572: checking for $ac_word" >&5 ++echo "configure:5575: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_LD_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5605,7 +5608,7 @@ if test -z "$ac_cv_path_LD_FOR_TARGET" ; + if test -n "$with_build_time_tools"; then + for ncn_progname in ld; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5609: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5612: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_LD_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5622,7 +5625,7 @@ if test -z "$ac_cv_prog_LD_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5626: checking for $ac_word" >&5 ++echo "configure:5629: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5653,7 +5656,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5657: checking for $ac_word" >&5 ++echo "configure:5660: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5703,7 +5706,7 @@ fi + if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for lipo in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5707: checking for lipo in $with_build_time_tools" >&5 ++echo "configure:5710: checking for lipo in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/lipo; then + LIPO_FOR_TARGET=`cd $with_build_time_tools && pwd`/lipo + ac_cv_path_LIPO_FOR_TARGET=$LIPO_FOR_TARGET +@@ -5721,7 +5724,7 @@ if test -z "$ac_cv_path_LIPO_FOR_TARGET" + # Extract the first word of "lipo", so it can be a program name with args. + set dummy lipo; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5725: checking for $ac_word" >&5 ++echo "configure:5728: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_LIPO_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5758,7 +5761,7 @@ if test -z "$ac_cv_path_LIPO_FOR_TARGET" + if test -n "$with_build_time_tools"; then + for ncn_progname in lipo; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5762: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5765: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_LIPO_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5775,7 +5778,7 @@ if test -z "$ac_cv_prog_LIPO_FOR_TARGET" + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5779: checking for $ac_word" >&5 ++echo "configure:5782: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5806,7 +5809,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5810: checking for $ac_word" >&5 ++echo "configure:5813: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5856,7 +5859,7 @@ fi + if test -z "$ac_cv_path_NM_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for nm in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5860: checking for nm in $with_build_time_tools" >&5 ++echo "configure:5863: checking for nm in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/nm; then + NM_FOR_TARGET=`cd $with_build_time_tools && pwd`/nm + ac_cv_path_NM_FOR_TARGET=$NM_FOR_TARGET +@@ -5874,7 +5877,7 @@ if test -z "$ac_cv_path_NM_FOR_TARGET" ; + # Extract the first word of "nm", so it can be a program name with args. + set dummy nm; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5878: checking for $ac_word" >&5 ++echo "configure:5881: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_NM_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5911,7 +5914,7 @@ if test -z "$ac_cv_path_NM_FOR_TARGET" ; + if test -n "$with_build_time_tools"; then + for ncn_progname in nm; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5915: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5918: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_NM_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5928,7 +5931,7 @@ if test -z "$ac_cv_prog_NM_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5932: checking for $ac_word" >&5 ++echo "configure:5935: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5959,7 +5962,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5963: checking for $ac_word" >&5 ++echo "configure:5966: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6009,7 +6012,7 @@ fi + if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for objdump in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6013: checking for objdump in $with_build_time_tools" >&5 ++echo "configure:6016: checking for objdump in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/objdump; then + OBJDUMP_FOR_TARGET=`cd $with_build_time_tools && pwd`/objdump + ac_cv_path_OBJDUMP_FOR_TARGET=$OBJDUMP_FOR_TARGET +@@ -6027,7 +6030,7 @@ if test -z "$ac_cv_path_OBJDUMP_FOR_TARG + # Extract the first word of "objdump", so it can be a program name with args. + set dummy objdump; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6031: checking for $ac_word" >&5 ++echo "configure:6034: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6064,7 +6067,7 @@ if test -z "$ac_cv_path_OBJDUMP_FOR_TARG + if test -n "$with_build_time_tools"; then + for ncn_progname in objdump; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6068: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:6071: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_OBJDUMP_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -6081,7 +6084,7 @@ if test -z "$ac_cv_prog_OBJDUMP_FOR_TARG + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6085: checking for $ac_word" >&5 ++echo "configure:6088: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6112,7 +6115,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6116: checking for $ac_word" >&5 ++echo "configure:6119: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6162,7 +6165,7 @@ fi + if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for ranlib in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6166: checking for ranlib in $with_build_time_tools" >&5 ++echo "configure:6169: checking for ranlib in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/ranlib; then + RANLIB_FOR_TARGET=`cd $with_build_time_tools && pwd`/ranlib + ac_cv_path_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET +@@ -6180,7 +6183,7 @@ if test -z "$ac_cv_path_RANLIB_FOR_TARGE + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6184: checking for $ac_word" >&5 ++echo "configure:6187: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_RANLIB_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6217,7 +6220,7 @@ if test -z "$ac_cv_path_RANLIB_FOR_TARGE + if test -n "$with_build_time_tools"; then + for ncn_progname in ranlib; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6221: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:6224: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_RANLIB_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -6234,7 +6237,7 @@ if test -z "$ac_cv_prog_RANLIB_FOR_TARGE + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6238: checking for $ac_word" >&5 ++echo "configure:6241: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6265,7 +6268,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6269: checking for $ac_word" >&5 ++echo "configure:6272: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6315,7 +6318,7 @@ fi + if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for strip in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6319: checking for strip in $with_build_time_tools" >&5 ++echo "configure:6322: checking for strip in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/strip; then + STRIP_FOR_TARGET=`cd $with_build_time_tools && pwd`/strip + ac_cv_path_STRIP_FOR_TARGET=$STRIP_FOR_TARGET +@@ -6333,7 +6336,7 @@ if test -z "$ac_cv_path_STRIP_FOR_TARGET + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6337: checking for $ac_word" >&5 ++echo "configure:6340: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_STRIP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6370,7 +6373,7 @@ if test -z "$ac_cv_path_STRIP_FOR_TARGET + if test -n "$with_build_time_tools"; then + for ncn_progname in strip; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6374: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:6377: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_STRIP_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -6387,7 +6390,7 @@ if test -z "$ac_cv_prog_STRIP_FOR_TARGET + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6391: checking for $ac_word" >&5 ++echo "configure:6394: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6418,7 +6421,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6422: checking for $ac_word" >&5 ++echo "configure:6425: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6468,7 +6471,7 @@ fi + if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for windres in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6472: checking for windres in $with_build_time_tools" >&5 ++echo "configure:6475: checking for windres in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/windres; then + WINDRES_FOR_TARGET=`cd $with_build_time_tools && pwd`/windres + ac_cv_path_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET +@@ -6486,7 +6489,7 @@ if test -z "$ac_cv_path_WINDRES_FOR_TARG + # Extract the first word of "windres", so it can be a program name with args. + set dummy windres; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6490: checking for $ac_word" >&5 ++echo "configure:6493: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_WINDRES_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6523,7 +6526,7 @@ if test -z "$ac_cv_path_WINDRES_FOR_TARG + if test -n "$with_build_time_tools"; then + for ncn_progname in windres; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6527: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:6530: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_WINDRES_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -6540,7 +6543,7 @@ if test -z "$ac_cv_prog_WINDRES_FOR_TARG + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6544: checking for $ac_word" >&5 ++echo "configure:6547: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6571,7 +6574,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6575: checking for $ac_word" >&5 ++echo "configure:6578: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6619,7 +6622,7 @@ fi + RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET" + + echo $ac_n "checking where to find the target ar""... $ac_c" 1>&6 +-echo "configure:6623: checking where to find the target ar" >&5 ++echo "configure:6626: checking where to find the target ar" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6652,7 +6655,7 @@ else + fi + fi + echo $ac_n "checking where to find the target as""... $ac_c" 1>&6 +-echo "configure:6656: checking where to find the target as" >&5 ++echo "configure:6659: checking where to find the target as" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6685,7 +6688,7 @@ else + fi + fi + echo $ac_n "checking where to find the target cc""... $ac_c" 1>&6 +-echo "configure:6689: checking where to find the target cc" >&5 ++echo "configure:6692: checking where to find the target cc" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6718,7 +6721,7 @@ else + fi + fi + echo $ac_n "checking where to find the target c++""... $ac_c" 1>&6 +-echo "configure:6722: checking where to find the target c++" >&5 ++echo "configure:6725: checking where to find the target c++" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$CXX_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6754,7 +6757,7 @@ else + fi + fi + echo $ac_n "checking where to find the target c++ for libstdc++""... $ac_c" 1>&6 +-echo "configure:6758: checking where to find the target c++ for libstdc++" >&5 ++echo "configure:6761: checking where to find the target c++ for libstdc++" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$RAW_CXX_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6790,7 +6793,7 @@ else + fi + fi + echo $ac_n "checking where to find the target dlltool""... $ac_c" 1>&6 +-echo "configure:6794: checking where to find the target dlltool" >&5 ++echo "configure:6797: checking where to find the target dlltool" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6823,7 +6826,7 @@ else + fi + fi + echo $ac_n "checking where to find the target gcc""... $ac_c" 1>&6 +-echo "configure:6827: checking where to find the target gcc" >&5 ++echo "configure:6830: checking where to find the target gcc" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6856,7 +6859,7 @@ else + fi + fi + echo $ac_n "checking where to find the target gcj""... $ac_c" 1>&6 +-echo "configure:6860: checking where to find the target gcj" >&5 ++echo "configure:6863: checking where to find the target gcj" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6892,7 +6895,7 @@ else + fi + fi + echo $ac_n "checking where to find the target gfortran""... $ac_c" 1>&6 +-echo "configure:6896: checking where to find the target gfortran" >&5 ++echo "configure:6899: checking where to find the target gfortran" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6928,7 +6931,7 @@ else + fi + fi + echo $ac_n "checking where to find the target ld""... $ac_c" 1>&6 +-echo "configure:6932: checking where to find the target ld" >&5 ++echo "configure:6935: checking where to find the target ld" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6961,7 +6964,7 @@ else + fi + fi + echo $ac_n "checking where to find the target lipo""... $ac_c" 1>&6 +-echo "configure:6965: checking where to find the target lipo" >&5 ++echo "configure:6968: checking where to find the target lipo" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6984,7 +6987,7 @@ else + fi + fi + echo $ac_n "checking where to find the target nm""... $ac_c" 1>&6 +-echo "configure:6988: checking where to find the target nm" >&5 ++echo "configure:6991: checking where to find the target nm" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7017,7 +7020,7 @@ else + fi + fi + echo $ac_n "checking where to find the target objdump""... $ac_c" 1>&6 +-echo "configure:7021: checking where to find the target objdump" >&5 ++echo "configure:7024: checking where to find the target objdump" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7050,7 +7053,7 @@ else + fi + fi + echo $ac_n "checking where to find the target ranlib""... $ac_c" 1>&6 +-echo "configure:7054: checking where to find the target ranlib" >&5 ++echo "configure:7057: checking where to find the target ranlib" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7083,7 +7086,7 @@ else + fi + fi + echo $ac_n "checking where to find the target strip""... $ac_c" 1>&6 +-echo "configure:7087: checking where to find the target strip" >&5 ++echo "configure:7090: checking where to find the target strip" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7116,7 +7119,7 @@ else + fi + fi + echo $ac_n "checking where to find the target windres""... $ac_c" 1>&6 +-echo "configure:7120: checking where to find the target windres" >&5 ++echo "configure:7123: checking where to find the target windres" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7177,7 +7180,7 @@ fi + + + echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 +-echo "configure:7181: checking whether to enable maintainer-specific portions of Makefiles" >&5 ++echo "configure:7184: checking whether to enable maintainer-specific portions of Makefiles" >&5 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. + if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" +@@ -7334,34 +7337,15 @@ trap 'rm -f $CONFIG_STATUS conftest*; ex + # Transform confdefs.h into DEFS. + # Protect against shell expansion while executing Makefile rules. + # Protect against Makefile macro expansion. +-# +-# If the first sed substitution is executed (which looks for macros that +-# take arguments), then we branch to the quote section. Otherwise, +-# look for a macro that doesn't take arguments. +-cat >confdef2opt.sed <<\_ACEOF +-t clear +-: clear +-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +-t quote +-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g +-t quote +-d +-: quote +-s,[ `~#$^&*(){}\\|;'"<>?],\\&,g +-s,\[,\\&,g +-s,\],\\&,g +-s,\$,$$,g +-p +-_ACEOF +-# We use echo to avoid assuming a particular line-breaking character. +-# The extra dot is to prevent the shell from consuming trailing +-# line-breaks from the sub-command output. A line-break within +-# single-quotes doesn't work because, if this script is created in a +-# platform that uses two characters for line-breaks (e.g., DOS), tr +-# would break. +-ac_LF_and_DOT=`echo; echo .` +-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` +-rm -f confdef2opt.sed ++cat > conftest.defs <<\EOF ++s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g ++s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g ++s%\[%\\&%g ++s%\]%\\&%g ++s%\$%$$%g ++EOF ++DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` ++rm -f conftest.defs + + + # Without the "./", some shells look in PATH for config.status. +diff -Nrup binutils-2.17/configure.in binutils-2.17.atmel.1.3.0/configure.in +--- binutils-2.17/configure.in 2006-06-23 20:19:53.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/configure.in 2007-03-26 10:20:35.000000000 +0200 +@@ -269,6 +269,9 @@ unsupported_languages= + # exist yet. + + case "${host}" in ++ avr32*-*-*) ++ noconfigdirs="$noconfigdirs readline gdb" ++ ;; + hppa*64*-*-*) + noconfigdirs="$noconfigdirs byacc" + ;; +diff -Nrup binutils-2.17/gas/as.c binutils-2.17.atmel.1.3.0/gas/as.c +--- binutils-2.17/gas/as.c 2006-02-09 01:07:41.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/as.c 2007-03-26 10:20:16.000000000 +0200 +@@ -439,10 +439,10 @@ parse_args (int * pargc, char *** pargv) + the end of the preceeding line so that it is simpler to + selectively add and remove lines from this list. */ + {"alternate", no_argument, NULL, OPTION_ALTERNATE} +- /* The entry for "a" is here to prevent getopt_long_only() from +- considering that -a is an abbreviation for --alternate. This is +- necessary because -a= is a valid switch but getopt would +- normally reject it since --alternate does not take an argument. */ ++ /* The next two entries are here to prevent getopt_long_only() from ++ considering that -a or -al is an abbreviation for --alternate. ++ This is necessary because -a= is a valid switch but getopt ++ would normally reject it since --alternate does not take an argument. */ + ,{"a", optional_argument, NULL, 'a'} + /* Handle -al=. */ + ,{"al", optional_argument, NULL, OPTION_AL} +@@ -795,8 +795,15 @@ the GNU General Public License. This pr + case 'a': + if (optarg) + { +- if (optarg != old_argv[optind] && optarg[-1] == '=') +- --optarg; ++ /* If optarg is part of the -a switch and not a separate argument ++ in its own right, then scan backwards to the just after the -a. ++ This means skipping over both '=' and 'l' which might have been ++ taken to be part of the -a switch itself. */ ++ if (optarg != old_argv[optind]) ++ { ++ while (optarg[-1] == '=' || optarg[-1] == 'l') ++ --optarg; ++ } + + if (md_parse_option (optc, optarg) != 0) + break; +@@ -1189,7 +1196,7 @@ main (int argc, char ** argv) + keep_it = 0; + + if (!keep_it) +- unlink_if_ordinary (out_file_name); ++ unlink (out_file_name); + + input_scrub_end (); + +diff -Nrup binutils-2.17/gas/config/bfin-aux.h binutils-2.17.atmel.1.3.0/gas/config/bfin-aux.h +--- binutils-2.17/gas/config/bfin-aux.h 2005-09-30 17:05:06.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/config/bfin-aux.h 2007-03-26 10:20:14.000000000 +0200 +@@ -1,151 +1,151 @@ +-/* bfin-aux.h ADI Blackfin Header file for gas +- Copyright 2005 +- Free Software Foundation, Inc. +- +- This file is part of GAS, the GNU Assembler. +- +- GAS is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2, or (at your option) +- any later version. +- +- GAS 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 GAS; see the file COPYING. If not, write to the Free +- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA +- 02110-1301, USA. */ +- +-#include "bfin-defs.h" +- +-#define REG_T Register * +- +-INSTR_T +-bfin_gen_dsp32mac (int op1, int mm, int mmod, int w1, int p, +- int h01, int h11, int h00, int h10, +- int op0, REG_T dst, REG_T src0, REG_T src1, int w0); +- +-INSTR_T +-bfin_gen_dsp32mult (int op1, int mm, int mmod, int w1, int p, +- int h01, int h11, int h00, int h10, +- int op0, REG_T dst, REG_T src0, REG_T src1, int w0); +- +-INSTR_T +-bfin_gen_dsp32alu (int HL, int aopcde, int aop, int s, int x, +- REG_T dst0, REG_T dst1, REG_T src0, REG_T src1); +- +-INSTR_T +-bfin_gen_dsp32shift (int sopcde, REG_T dst0, REG_T src0, REG_T src1, +- int sop, int hls); +- +-INSTR_T +-bfin_gen_dsp32shiftimm (int sopcde, REG_T dst0, int immag, REG_T src1, +- int sop, int hls); +- +-INSTR_T +-bfin_gen_ldimmhalf (REG_T reg, int h, int s, int z, Expr_Node *hword, +- int reloc); +- +-INSTR_T +-bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int w, int sz, int z, +- Expr_Node *offset); +- +-INSTR_T +-bfin_gen_ldst (REG_T ptr, REG_T reg, int aop, int sz, int z, int w); +- +-INSTR_T +-bfin_gen_ldstii (REG_T ptr, REG_T reg, Expr_Node *offset, int w, int op); +- +-INSTR_T +-bfin_gen_ldstiifp (REG_T reg, Expr_Node *offset, int w); +- +-INSTR_T +-bfin_gen_ldstpmod (REG_T ptr, REG_T reg, int aop, int w, REG_T idx); +- +-INSTR_T +-bfin_gen_dspldst (REG_T i, REG_T reg, int aop, int w, int m); +- +-INSTR_T +-bfin_gen_alu2op (REG_T dst, REG_T src, int opc); +- +-INSTR_T +-bfin_gen_compi2opd (REG_T dst, int src, int op); +- +-INSTR_T +-bfin_gen_compi2opp (REG_T dst, int src, int op); +- +-INSTR_T +-bfin_gen_dagmodik (REG_T i, int op); +- +-INSTR_T +-bfin_gen_dagmodim (REG_T i, REG_T m, int op, int br); +- +-INSTR_T +-bfin_gen_ptr2op (REG_T dst, REG_T src, int opc); +- +-INSTR_T +-bfin_gen_logi2op (int dst, int src, int opc); +- +-INSTR_T +-bfin_gen_comp3op (REG_T src0, REG_T src1, REG_T dst, int opc); +- +-INSTR_T +-bfin_gen_ccmv (REG_T src, REG_T dst, int t); +- +-INSTR_T +-bfin_gen_ccflag (REG_T x, int y, int opc, int i, int g); +- +-INSTR_T +-bfin_gen_cc2stat (int cbit, int op, int d); +- +-INSTR_T +-bfin_gen_regmv (REG_T src, REG_T dst); +- +-INSTR_T +-bfin_gen_cc2dreg (int op, REG_T reg); +- +-INSTR_T +-bfin_gen_brcc (int t, int b, Expr_Node *offset); +- +-INSTR_T +-bfin_gen_ujump (Expr_Node *offset); +- +-INSTR_T +-bfin_gen_cactrl (REG_T reg, int a, int op); +- +-INSTR_T +-bfin_gen_progctrl (int prgfunc, int poprnd); +- +-INSTR_T +-bfin_gen_loopsetup (Expr_Node *soffset, REG_T c, int rop, +- Expr_Node *eoffset, REG_T reg); +- +-INSTR_T +-bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg); +- +-INSTR_T +-bfin_gen_pushpopmultiple (int dr, int pr, int d, int p, int w); +- +-INSTR_T +-bfin_gen_pushpopreg (REG_T reg, int w); +- +-INSTR_T +-bfin_gen_calla (Expr_Node *addr, int s); +- +-INSTR_T +-bfin_gen_linkage (int r, int framesize); +- +-INSTR_T +-bfin_gen_pseudodbg (int fn, int reg, int grp); +- +-INSTR_T +-bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected); +- +-bfd_boolean +-bfin_resource_conflict (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); +- +-INSTR_T +-bfin_gen_multi_instr (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); ++/* bfin-aux.h ADI Blackfin Header file for gas ++ Copyright 2005 ++ Free Software Foundation, Inc. ++ ++ This file is part of GAS, the GNU Assembler. ++ ++ GAS is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ GAS 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 GAS; see the file COPYING. If not, write to the Free ++ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA ++ 02110-1301, USA. */ ++ ++#include "bfin-defs.h" ++ ++#define REG_T Register * ++ ++INSTR_T ++bfin_gen_dsp32mac (int op1, int mm, int mmod, int w1, int p, ++ int h01, int h11, int h00, int h10, ++ int op0, REG_T dst, REG_T src0, REG_T src1, int w0); ++ ++INSTR_T ++bfin_gen_dsp32mult (int op1, int mm, int mmod, int w1, int p, ++ int h01, int h11, int h00, int h10, ++ int op0, REG_T dst, REG_T src0, REG_T src1, int w0); ++ ++INSTR_T ++bfin_gen_dsp32alu (int HL, int aopcde, int aop, int s, int x, ++ REG_T dst0, REG_T dst1, REG_T src0, REG_T src1); ++ ++INSTR_T ++bfin_gen_dsp32shift (int sopcde, REG_T dst0, REG_T src0, REG_T src1, ++ int sop, int hls); ++ ++INSTR_T ++bfin_gen_dsp32shiftimm (int sopcde, REG_T dst0, int immag, REG_T src1, ++ int sop, int hls); ++ ++INSTR_T ++bfin_gen_ldimmhalf (REG_T reg, int h, int s, int z, Expr_Node *hword, ++ int reloc); ++ ++INSTR_T ++bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int w, int sz, int z, ++ Expr_Node *offset); ++ ++INSTR_T ++bfin_gen_ldst (REG_T ptr, REG_T reg, int aop, int sz, int z, int w); ++ ++INSTR_T ++bfin_gen_ldstii (REG_T ptr, REG_T reg, Expr_Node *offset, int w, int op); ++ ++INSTR_T ++bfin_gen_ldstiifp (REG_T reg, Expr_Node *offset, int w); ++ ++INSTR_T ++bfin_gen_ldstpmod (REG_T ptr, REG_T reg, int aop, int w, REG_T idx); ++ ++INSTR_T ++bfin_gen_dspldst (REG_T i, REG_T reg, int aop, int w, int m); ++ ++INSTR_T ++bfin_gen_alu2op (REG_T dst, REG_T src, int opc); ++ ++INSTR_T ++bfin_gen_compi2opd (REG_T dst, int src, int op); ++ ++INSTR_T ++bfin_gen_compi2opp (REG_T dst, int src, int op); ++ ++INSTR_T ++bfin_gen_dagmodik (REG_T i, int op); ++ ++INSTR_T ++bfin_gen_dagmodim (REG_T i, REG_T m, int op, int br); ++ ++INSTR_T ++bfin_gen_ptr2op (REG_T dst, REG_T src, int opc); ++ ++INSTR_T ++bfin_gen_logi2op (int dst, int src, int opc); ++ ++INSTR_T ++bfin_gen_comp3op (REG_T src0, REG_T src1, REG_T dst, int opc); ++ ++INSTR_T ++bfin_gen_ccmv (REG_T src, REG_T dst, int t); ++ ++INSTR_T ++bfin_gen_ccflag (REG_T x, int y, int opc, int i, int g); ++ ++INSTR_T ++bfin_gen_cc2stat (int cbit, int op, int d); ++ ++INSTR_T ++bfin_gen_regmv (REG_T src, REG_T dst); ++ ++INSTR_T ++bfin_gen_cc2dreg (int op, REG_T reg); ++ ++INSTR_T ++bfin_gen_brcc (int t, int b, Expr_Node *offset); ++ ++INSTR_T ++bfin_gen_ujump (Expr_Node *offset); ++ ++INSTR_T ++bfin_gen_cactrl (REG_T reg, int a, int op); ++ ++INSTR_T ++bfin_gen_progctrl (int prgfunc, int poprnd); ++ ++INSTR_T ++bfin_gen_loopsetup (Expr_Node *soffset, REG_T c, int rop, ++ Expr_Node *eoffset, REG_T reg); ++ ++INSTR_T ++bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg); ++ ++INSTR_T ++bfin_gen_pushpopmultiple (int dr, int pr, int d, int p, int w); ++ ++INSTR_T ++bfin_gen_pushpopreg (REG_T reg, int w); ++ ++INSTR_T ++bfin_gen_calla (Expr_Node *addr, int s); ++ ++INSTR_T ++bfin_gen_linkage (int r, int framesize); ++ ++INSTR_T ++bfin_gen_pseudodbg (int fn, int reg, int grp); ++ ++INSTR_T ++bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected); ++ ++bfd_boolean ++bfin_resource_conflict (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); ++ ++INSTR_T ++bfin_gen_multi_instr (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); +diff -Nrup binutils-2.17/gas/config/tc-avr32.c binutils-2.17.atmel.1.3.0/gas/config/tc-avr32.c +--- binutils-2.17/gas/config/tc-avr32.c 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/config/tc-avr32.c 2007-09-28 10:30:46.000000000 +0200 +@@ -0,0 +1,4726 @@ ++/* Assembler implementation for AVR32. ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of GAS, the GNU Assembler. ++ ++ GAS is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ GAS 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 GAS; see the file COPYING. If not, write to the Free ++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#include ++#include "as.h" ++#include "safe-ctype.h" ++#include "subsegs.h" ++#include "symcat.h" ++#include "opcodes/avr32-opc.h" ++#include "opcodes/avr32-asm.h" ++#include "elf/avr32.h" ++#include "dwarf2dbg.h" ++ ++#define xDEBUG ++#define xOPC_CONSISTENCY_CHECK ++ ++#ifdef DEBUG ++# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) ++#else ++# define pr_debug(fmt, args...) ++#endif ++ ++/* 3 MSB of instruction word indicate group. Group 7 -> extended */ ++#define AVR32_COMPACT_P(opcode) ((opcode[0] & 0xe0) != 0xe0) ++ ++#define streq(a, b) (strcmp(a, b) == 0) ++#define skip_whitespace(str) do { while(*(str) == ' ') ++(str); } while(0) ++ ++/* Flags given on the command line */ ++static int avr32_pic = FALSE; ++int linkrelax = FALSE; ++int avr32_iarcompat = FALSE; ++int allow_direct_data_refs = FALSE; ++ ++/* This array holds the chars that always start a comment. */ ++const char comment_chars[] = "#"; ++ ++/* This array holds the chars that only start a comment at the ++ beginning of a line. We must include '#' here because the compiler ++ may produce #APP and #NO_APP in its output. */ ++const char line_comment_chars[] = "#"; ++ ++/* These may be used instead of newline (same as ';' in C). */ ++const char line_separator_chars[] = ";"; ++ ++/* Chars that can be used to separate mantissa from exponent in ++ floating point numbers. */ ++const char EXP_CHARS[] = "eE"; ++ ++/* Chars that mean this number is a floating point constant. */ ++const char FLT_CHARS[] = "dD"; ++ ++/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ ++symbolS *GOT_symbol; ++ ++static struct hash_control *avr32_mnemonic_htab; ++ ++struct avr32_ifield_data ++{ ++ bfd_vma value; ++ /* FIXME: Get rid of align_order and complain. complain is never ++ used, align_order is used in one place. Try to use the relax ++ table instead. */ ++ unsigned int align_order; ++}; ++ ++struct avr32_insn ++{ ++ const struct avr32_syntax *syntax; ++ expressionS immediate; ++ int pcrel; ++ int force_extended; ++ unsigned int next_slot; ++ bfd_reloc_code_real_type r_type; ++ struct avr32_ifield_data field_value[AVR32_MAX_FIELDS]; ++}; ++ ++static struct avr32_insn current_insn; ++ ++/* The target specific pseudo-ops we support. */ ++static void s_rseg (int); ++static void s_cpool(int); ++ ++const pseudo_typeS md_pseudo_table[] = ++{ ++ /* Make sure that .word is 32 bits */ ++ { "word", cons, 4 }, ++ { "file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0 }, ++ { "loc", dwarf2_directive_loc, 0 }, ++ ++ /* .lcomm requires an explicit alignment parameter */ ++ { "lcomm", s_lcomm, 1 }, ++ ++ /* AVR32-specific pseudo-ops */ ++ { "cpool", s_cpool, 0}, ++ ++ /* IAR compatible pseudo-ops */ ++ { "program", s_ignore, 0 }, ++ { "public", s_globl, 0 }, ++ { "extern", s_ignore, 0 }, ++ { "module", s_ignore, 0 }, ++ { "rseg", s_rseg, 0 }, ++ { "dc8", cons, 1 }, ++ { "dc16", cons, 2 }, ++ { "dc32", cons, 4 }, ++ ++ { NULL, NULL, 0 } ++}; ++ ++/* Questionable stuff starts here */ ++ ++enum avr32_opinfo { ++ AVR32_OPINFO_NONE = BFD_RELOC_NONE, ++ AVR32_OPINFO_GOT, ++ AVR32_OPINFO_TLSGD, ++ AVR32_OPINFO_HI, ++ AVR32_OPINFO_LO, ++}; ++ ++enum avr32_arch { ++ ARCH_TYPE_AP, ++ ARCH_TYPE_UC ++}; ++ ++struct arch_type_s ++{ ++ /* Architecture name */ ++ char *name; ++ /* Instruction Set Architecture Flags */ ++ unsigned long isa_flags; ++}; ++ ++struct part_type_s ++{ ++ /* Part name */ ++ char *name; ++ /* Architecture type */ ++ unsigned int arch; ++}; ++ ++static struct arch_type_s arch_types[] = ++{ ++ {"ap", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_PICO}, ++ {"uc", AVR32_V1 | AVR32_DSP | AVR32_RMW}, ++ {"all-insn", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_FP | AVR32_PICO}, ++ {NULL, 0} ++}; ++ ++static struct part_type_s part_types[] = { ++ {"ap7000", ARCH_TYPE_AP}, ++ {"ap7010", ARCH_TYPE_AP}, ++ {"ap7020", ARCH_TYPE_AP}, ++ {"uc3a0256", ARCH_TYPE_UC}, ++ {"uc3a0512", ARCH_TYPE_UC}, ++ {"uc3a1128", ARCH_TYPE_UC}, ++ {"uc3a1256", ARCH_TYPE_UC}, ++ {"uc3a1512", ARCH_TYPE_UC}, ++ {"uc3b064", ARCH_TYPE_UC}, ++ {"uc3b0128", ARCH_TYPE_UC}, ++ {"uc3b0256", ARCH_TYPE_UC}, ++ {"uc3b164", ARCH_TYPE_UC}, ++ {"uc3b1128", ARCH_TYPE_UC}, ++ {"uc3b1256", ARCH_TYPE_UC}, ++ {NULL, 0} ++}; ++ ++/* Current architecture type. */ ++static struct arch_type_s default_arch = {"all-insn", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_FP | AVR32_PICO }; ++static struct arch_type_s *avr32_arch = &default_arch; ++ ++/* Display nicely formatted list of known part- and architecture names. */ ++ ++static void ++show_arch_list (FILE *stream) ++{ ++ int i, x; ++ ++ fprintf (stream, _("Known architecture names:")); ++ x = 1000; ++ ++ for (i = 0; arch_types[i].name; i++) ++ { ++ int len = strlen (arch_types[i].name); ++ ++ x += len + 1; ++ ++ if (x < 75) ++ fprintf (stream, " %s", arch_types[i].name); ++ else ++ { ++ fprintf (stream, "\n %s", arch_types[i].name); ++ x = len + 2; ++ } ++ } ++ ++ fprintf (stream, "\n"); ++} ++ ++static void ++show_part_list (FILE *stream) ++{ ++ int i, x; ++ ++ fprintf (stream, _("Known part names:")); ++ x = 1000; ++ ++ for (i = 0; part_types[i].name; i++) ++ { ++ int len = strlen(part_types[i].name); ++ ++ x += len + 1; ++ ++ if (x < 75) ++ fprintf (stream, " %s", part_types[i].name); ++ else ++ { ++ fprintf(stream, "\n %s", part_types[i].name); ++ x = len + 2; ++ } ++ } ++ ++ fprintf (stream, "\n"); ++} ++ ++const char *md_shortopts = ""; ++struct option md_longopts[] = ++{ ++#define OPTION_ARCH (OPTION_MD_BASE) ++#define OPTION_PART (OPTION_ARCH + 1) ++#define OPTION_IAR (OPTION_PART + 1) ++#define OPTION_PIC (OPTION_IAR + 1) ++#define OPTION_NOPIC (OPTION_PIC + 1) ++#define OPTION_LINKRELAX (OPTION_NOPIC + 1) ++#define OPTION_NOLINKRELAX (OPTION_LINKRELAX + 1) ++#define OPTION_DIRECT_DATA_REFS (OPTION_NOLINKRELAX + 1) ++ {"march", required_argument, NULL, OPTION_ARCH}, ++ {"mpart", required_argument, NULL, OPTION_PART}, ++ {"iar", no_argument, NULL, OPTION_IAR}, ++ {"pic", no_argument, NULL, OPTION_PIC}, ++ {"no-pic", no_argument, NULL, OPTION_NOPIC}, ++ {"linkrelax", no_argument, NULL, OPTION_LINKRELAX}, ++ {"no-linkrelax", no_argument, NULL, OPTION_NOLINKRELAX}, ++ {"direct-data-refs", no_argument, NULL, OPTION_DIRECT_DATA_REFS}, ++ /* deprecated alias for -mpart=xxx */ ++ {"mcpu", required_argument, NULL, OPTION_PART}, ++ {NULL, no_argument, NULL, 0} ++}; ++ ++size_t md_longopts_size = sizeof (md_longopts); ++ ++void ++md_show_usage (FILE *stream) ++{ ++ fprintf (stream, _("\ ++AVR32 options:\n\ ++ -march=[arch-name] Select cpu architecture. [Default `all-insn']\n\ ++ -mpart=[part-name] Select specific part. [Default `none']\n\ ++ --pic Produce Position-Independent Code\n\ ++ --no-pic Don't produce Position-Independent Code\n\ ++ --linkrelax Produce output suitable for linker relaxing\n\ ++ --no-linkrelax Don't produce output suitable for linker relaxing\n\ ++ --direct-data-refs Allows direct references (i.e. mov or sub) to the data section\n")); ++ show_arch_list(stream); ++} ++ ++int ++md_parse_option (int c, char *arg ATTRIBUTE_UNUSED) ++{ ++ switch (c) ++ { ++ case OPTION_ARCH: ++ { ++ int i; ++ char *s = alloca (strlen (arg) + 1); ++ ++ { ++ char *t = s; ++ char *arg1 = arg; ++ ++ do ++ *t = TOLOWER (*arg1++); ++ while (*t++); ++ } ++ ++ for (i = 0; arch_types[i].name; ++i) ++ if (strcmp (arch_types[i].name, s) == 0) ++ break; ++ ++ if (!arch_types[i].name) ++ { ++ show_arch_list (stderr); ++ as_fatal (_("unknown architecture: %s\n"), arg); ++ } ++ ++ avr32_arch = &arch_types[i]; ++ break; ++ } ++ case OPTION_PART: ++ { ++ int i; ++ char *s = alloca (strlen (arg) + 1); ++ char *t = s; ++ char *p = arg; ++ ++ /* If arch type has already been set, don't bother. ++ -march= always overrides -mpart= */ ++ if (avr32_arch != &default_arch) ++ break; ++ ++ do ++ *t = TOLOWER (*p++); ++ while (*t++); ++ ++ for (i = 0; part_types[i].name; ++i) ++ if (strcmp (part_types[i].name, s) == 0) ++ break; ++ ++ if (!part_types[i].name) ++ { ++ show_part_list (stderr); ++ as_fatal (_("unknown part: %s\n"), arg); ++ } ++ ++ avr32_arch = &arch_types[part_types[i].arch]; ++ break; ++ } ++ case OPTION_IAR: ++ avr32_iarcompat = 1; ++ break; ++ case OPTION_PIC: ++ avr32_pic = 1; ++ break; ++ case OPTION_NOPIC: ++ avr32_pic = 0; ++ break; ++ case OPTION_LINKRELAX: ++ linkrelax = 1; ++ break; ++ case OPTION_NOLINKRELAX: ++ linkrelax = 0; ++ break; ++ case OPTION_DIRECT_DATA_REFS: ++ allow_direct_data_refs = 1; ++ break; ++ default: ++ return 0; ++ } ++ return 1; ++} ++ ++/* Can't use symbol_new here, so have to create a symbol and then at ++ a later date assign it a value. Thats what these functions do. ++ ++ Shamelessly stolen from ARM. */ ++ ++static void ++symbol_locate (symbolS * symbolP, ++ const char * name, /* It is copied, the caller can modify. */ ++ segT segment, /* Segment identifier (SEG_). */ ++ valueT valu, /* Symbol value. */ ++ fragS * frag) /* Associated fragment. */ ++{ ++ unsigned int name_length; ++ char * preserved_copy_of_name; ++ ++ name_length = strlen (name) + 1; /* +1 for \0. */ ++ obstack_grow (¬es, name, name_length); ++ preserved_copy_of_name = obstack_finish (¬es); ++#ifdef STRIP_UNDERSCORE ++ if (preserved_copy_of_name[0] == '_') ++ preserved_copy_of_name++; ++#endif ++ ++#ifdef tc_canonicalize_symbol_name ++ preserved_copy_of_name = ++ tc_canonicalize_symbol_name (preserved_copy_of_name); ++#endif ++ ++ S_SET_NAME (symbolP, preserved_copy_of_name); ++ ++ S_SET_SEGMENT (symbolP, segment); ++ S_SET_VALUE (symbolP, valu); ++ symbol_clear_list_pointers (symbolP); ++ ++ symbol_set_frag (symbolP, frag); ++ ++ /* Link to end of symbol chain. */ ++ { ++ extern int symbol_table_frozen; ++ ++ if (symbol_table_frozen) ++ abort (); ++ } ++ ++ symbol_append (symbolP, symbol_lastP, & symbol_rootP, & symbol_lastP); ++ ++ obj_symbol_new_hook (symbolP); ++ ++#ifdef tc_symbol_new_hook ++ tc_symbol_new_hook (symbolP); ++#endif ++ ++#ifdef DEBUG_SYMS ++ verify_symbol_chain (symbol_rootP, symbol_lastP); ++#endif /* DEBUG_SYMS */ ++} ++ ++struct cpool_entry ++{ ++ int refcount; ++ offsetT offset; ++ expressionS exp; ++}; ++ ++struct cpool ++{ ++ struct cpool *next; ++ int used; ++ struct cpool_entry *literals; ++ unsigned int padding; ++ unsigned int next_free_entry; ++ unsigned int id; ++ symbolS *symbol; ++ segT section; ++ subsegT sub_section; ++}; ++ ++struct cpool *cpool_list = NULL; ++ ++static struct cpool * ++find_cpool(segT section, subsegT sub_section) ++{ ++ struct cpool *pool; ++ ++ for (pool = cpool_list; pool != NULL; pool = pool->next) ++ { ++ if (!pool->used ++ && pool->section == section ++ && pool->sub_section == sub_section) ++ break; ++ } ++ ++ return pool; ++} ++ ++static struct cpool * ++find_or_make_cpool(segT section, subsegT sub_section) ++{ ++ static unsigned int next_cpool_id = 0; ++ struct cpool *pool; ++ ++ pool = find_cpool(section, sub_section); ++ ++ if (!pool) ++ { ++ pool = xmalloc(sizeof(*pool)); ++ if (!pool) ++ return NULL; ++ ++ pool->used = 0; ++ pool->literals = NULL; ++ pool->padding = 0; ++ pool->next_free_entry = 0; ++ pool->section = section; ++ pool->sub_section = sub_section; ++ pool->next = cpool_list; ++ pool->symbol = NULL; ++ ++ cpool_list = pool; ++ } ++ ++ /* NULL symbol means that the pool is new or has just been emptied. */ ++ if (!pool->symbol) ++ { ++ pool->symbol = symbol_create(FAKE_LABEL_NAME, undefined_section, ++ 0, &zero_address_frag); ++ pool->id = next_cpool_id++; ++ } ++ ++ return pool; ++} ++ ++static struct cpool * ++add_to_cpool(expressionS *exp, unsigned int *index, int ref) ++{ ++ struct cpool *pool; ++ unsigned int entry; ++ ++ pool = find_or_make_cpool(now_seg, now_subseg); ++ ++ /* Check if this constant is already in the pool. */ ++ for (entry = 0; entry < pool->next_free_entry; entry++) ++ { ++ if ((pool->literals[entry].exp.X_op == exp->X_op) ++ && (exp->X_op == O_constant) ++ && (pool->literals[entry].exp.X_add_number ++ == exp->X_add_number) ++ && (pool->literals[entry].exp.X_unsigned ++ == exp->X_unsigned)) ++ break; ++ ++ if ((pool->literals[entry].exp.X_op == exp->X_op) ++ && (exp->X_op == O_symbol) ++ && (pool->literals[entry].exp.X_add_number ++ == exp->X_add_number) ++ && (pool->literals[entry].exp.X_add_symbol ++ == exp->X_add_symbol) ++ && (pool->literals[entry].exp.X_op_symbol ++ == exp->X_op_symbol)) ++ break; ++ } ++ ++ /* Create an entry if we didn't find a match */ ++ if (entry == pool->next_free_entry) ++ { ++ pool->literals = xrealloc(pool->literals, ++ sizeof(struct cpool_entry) * (entry + 1)); ++ pool->literals[entry].exp = *exp; ++ pool->literals[entry].refcount = 0; ++ pool->next_free_entry++; ++ } ++ ++ if (index) ++ *index = entry; ++ if (ref) ++ pool->literals[entry].refcount++; ++ ++ return pool; ++} ++ ++struct avr32_operand ++{ ++ int id; ++ int is_signed; ++ int is_pcrel; ++ int align_order; ++ int (*match)(char *str); ++ void (*parse)(const struct avr32_operand *op, char *str, int opindex); ++}; ++ ++static int ++match_anything(char *str ATTRIBUTE_UNUSED) ++{ ++ return 1; ++} ++ ++static int ++match_intreg(char *str) ++{ ++ int regid, ret = 1; ++ ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ ++ pr_debug("match_intreg: `%s': %d\n", str, ret); ++ ++ return ret; ++} ++ ++static int ++match_intreg_predec(char *str) ++{ ++ int regid; ++ ++ if (str[0] != '-' || str[1] != '-') ++ return 0; ++ ++ regid = avr32_parse_intreg(str + 2); ++ if (regid < 0) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++match_intreg_postinc(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '+') ++ break; ++ ++ if (p[0] != '+' || p[1] != '+') ++ return 0; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ ++ *p = c; ++ return ret; ++} ++ ++static int ++match_intreg_lsl(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '<') ++ break; ++ ++ if (p[0] && p[1] != '<') ++ return 0; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ ++ *p = c; ++ return ret; ++} ++ ++static int ++match_intreg_lsr(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '>') ++ break; ++ ++ if (p[0] && p[1] != '>') ++ return 0; ++ ++ c = *p, *p = 0; ++ ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ ++ *p = c; ++ return ret; ++} ++ ++static int ++match_intreg_part(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == ':') ++ break; ++ ++ if (p[0] != ':' || !ISPRINT(p[1]) || p[2] != '\0') ++ return 0; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ ++ *p = c; ++ ++ return ret; ++} ++ ++#define match_intreg_disp match_anything ++ ++static int ++match_intreg_index(char *str) ++{ ++ int regid, ret = 1; ++ char *p, *end, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ /* don't allow empty displacement here (it makes no sense) */ ++ if (p[0] != '[') ++ return 0; ++ ++ for (end = p + 1; *end; end++) ; ++ if (*(--end) != ']') ++ return 0; ++ ++ c = *end, *end = 0; ++ if (!match_intreg_lsl(p + 1)) ++ ret = 0; ++ *end = c; ++ ++ if (ret) ++ { ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ *p = c; ++ } ++ ++ return ret; ++} ++ ++static int ++match_intreg_xindex(char *str) ++{ ++ int regid, ret = 1; ++ char *p, *end, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ /* empty displacement makes no sense here either */ ++ if (p[0] != '[') ++ return 0; ++ ++ for (end = p + 1; *end; end++) ++ if (*end == '<') ++ break; ++ ++ if (!streq(end, "<<2]")) ++ return 0; ++ ++ c = *end, *end = 0; ++ if (!match_intreg_part(p + 1)) ++ ret = 0; ++ *end = c; ++ ++ if (ret) ++ { ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ *p = c; ++ } ++ ++ return ret; ++} ++ ++/* The PC_UDISP_W operator may show up as a label or as a pc[disp] ++ expression. So there's no point in attempting to match this... */ ++#define match_pc_disp match_anything ++ ++static int ++match_sp(char *str) ++{ ++ /* SP in any form will do */ ++ return avr32_parse_intreg(str) == AVR32_REG_SP; ++} ++ ++static int ++match_sp_disp(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ /* allow empty displacement, meaning zero */ ++ if (p[0] == '[') ++ { ++ char *end; ++ for (end = p + 1; *end; end++) ; ++ if (end[-1] != ']') ++ return 0; ++ } ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid != AVR32_REG_SP) ++ ret = 0; ++ ++ *p = c; ++ return ret; ++} ++ ++static int ++match_cpno(char *str) ++{ ++ if (strncasecmp(str, "cp", 2) != 0) ++ return 0; ++ return 1; ++} ++ ++static int ++match_cpreg(char *str) ++{ ++ if (strncasecmp(str, "cr", 2) != 0) ++ return 0; ++ return 1; ++} ++ ++/* We allow complex expressions, and register names may show up as ++ symbols. Just make sure immediate expressions are always matched ++ last. */ ++#define match_const match_anything ++#define match_jmplabel match_anything ++#define match_number match_anything ++ ++/* Mnemonics that take reglists never accept anything else */ ++#define match_reglist8 match_anything ++#define match_reglist9 match_anything ++#define match_reglist16 match_anything ++#define match_reglist_ldm match_anything ++#define match_reglist_cp8 match_anything ++#define match_reglist_cpd8 match_anything ++ ++/* Ditto for retval, jospinc and mcall */ ++#define match_retval match_anything ++#define match_jospinc match_anything ++#define match_mcall match_anything ++ ++/* COH is used to select between two different syntaxes */ ++static int ++match_coh(char *str) ++{ ++ return strcasecmp(str, "coh") == 0; ++} ++ ++static int ++match_fpreg(char *str) ++{ ++ unsigned long regid; ++ char *endptr; ++ ++ if ((str[0] != 'f' && str[0] != 'F') ++ || (str[1] != 'r' && str[1] != 'R')) ++ return 0; ++ ++ str += 2; ++ regid = strtoul(str, &endptr, 10); ++ if (!*str || *endptr) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++match_picoreg(char *str) ++{ ++ int regid; ++ ++ regid = avr32_parse_picoreg(str); ++ if (regid < 0) ++ return 0; ++ return 1; ++} ++ ++#define match_pico_reglist_w match_anything ++#define match_pico_reglist_d match_anything ++ ++static int ++match_pico_in(char *str) ++{ ++ unsigned long regid; ++ char *end; ++ ++ if (strncasecmp(str, "in", 2) != 0) ++ return 0; ++ ++ str += 2; ++ regid = strtoul(str, &end, 10); ++ if (!*str || *end) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++match_pico_out0(char *str) ++{ ++ if (strcasecmp(str, "out0") != 0) ++ return 0; ++ return 1; ++} ++ ++static int ++match_pico_out1(char *str) ++{ ++ if (strcasecmp(str, "out1") != 0) ++ return 0; ++ return 1; ++} ++ ++static int ++match_pico_out2(char *str) ++{ ++ if (strcasecmp(str, "out2") != 0) ++ return 0; ++ return 1; ++} ++ ++static int ++match_pico_out3(char *str) ++{ ++ if (strcasecmp(str, "out3") != 0) ++ return 0; ++ return 1; ++} ++ ++static void parse_nothing(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str ATTRIBUTE_UNUSED, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ /* Do nothing (this is used for "match-only" operands like COH) */ ++} ++ ++static void ++parse_const(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ expressionS *sym_exp; ++ int slot; ++ char *save; ++ ++ pr_debug("parse_const: `%s' (signed: %d, pcrel: %d, align: %d)\n", ++ str, op->is_signed, op->is_pcrel, op->align_order); ++ ++ save = input_line_pointer; ++ input_line_pointer = str; ++ ++ expression(exp); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].align_order = op->align_order; ++ current_insn.pcrel = op->is_pcrel; ++ ++ switch (exp->X_op) ++ { ++ case O_illegal: ++ as_bad(_("illegal operand")); ++ break; ++ case O_absent: ++ as_bad(_("missing operand")); ++ break; ++ case O_constant: ++ pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); ++ current_insn.field_value[slot].value = exp->X_add_number; ++ break; ++ case O_uminus: ++ pr_debug(" -> uminus\n"); ++ sym_exp = symbol_get_value_expression(exp->X_add_symbol); ++ switch (sym_exp->X_op) { ++ case O_subtract: ++ pr_debug(" -> subtract: switching operands\n"); ++ exp->X_op_symbol = sym_exp->X_add_symbol; ++ exp->X_add_symbol = sym_exp->X_op_symbol; ++ exp->X_op = O_subtract; ++ /* TODO: Remove the old X_add_symbol */ ++ break; ++ default: ++ as_bad(_("Expression too complex\n")); ++ break; ++ } ++ break; ++#if 0 ++ case O_subtract: ++ /* Any expression subtracting a symbol from the current section ++ can be made PC-relative by adding the right offset. */ ++ if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) ++ current_insn.pcrel = TRUE; ++ pr_debug(" -> subtract: pcrel? %s\n", ++ current_insn.pcrel ? "yes" : "no"); ++ /* fall through */ ++#endif ++ default: ++ pr_debug(" -> (%p <%d> %p + %d)\n", ++ exp->X_add_symbol, exp->X_op, exp->X_op_symbol, ++ exp->X_add_number); ++ current_insn.field_value[slot].value = 0; ++ break; ++ } ++ ++ input_line_pointer = save; ++} ++ ++static void ++parse_jmplabel(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ int slot; ++ char *save; ++ ++ pr_debug("parse_jmplabel: `%s' (signed: %d, pcrel: %d, align: %d)\n", ++ str, op->is_signed, op->is_pcrel, op->align_order); ++ ++ save = input_line_pointer; ++ input_line_pointer = str; ++ ++ expression(exp); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].align_order = op->align_order; ++ current_insn.pcrel = TRUE; ++ ++ switch (exp->X_op) ++ { ++ case O_illegal: ++ as_bad(_("illegal operand")); ++ break; ++ case O_absent: ++ as_bad(_("missing operand")); ++ break; ++ case O_constant: ++ pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); ++ current_insn.field_value[slot].value = exp->X_add_number; ++ current_insn.pcrel = 0; ++ break; ++ default: ++ pr_debug(" -> (%p <%d> %p + %d)\n", ++ exp->X_add_symbol, exp->X_op, exp->X_op_symbol, ++ exp->X_add_number); ++ current_insn.field_value[slot].value = 0; ++ break; ++ } ++ ++ input_line_pointer = save; ++} ++ ++static void ++parse_intreg(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ int regid, slot; ++ ++ pr_debug("parse_intreg: `%s'\n", str); ++ ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ current_insn.field_value[slot].align_order = op->align_order; ++} ++ ++static void ++parse_intreg_predec(const struct avr32_operand *op, char *str, int opindex) ++{ ++ parse_intreg(op, str + 2, opindex); ++} ++ ++static void ++parse_intreg_postinc(const struct avr32_operand *op, char *str, int opindex) ++{ ++ char *p, c; ++ ++ pr_debug("parse_intreg_postinc: `%s'\n", str); ++ ++ for (p = str; *p != '+'; p++) ; ++ ++ c = *p, *p = 0; ++ parse_intreg(op, str, opindex); ++ *p = c; ++} ++ ++static void ++parse_intreg_shift(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ int regid, slot, shift = 0; ++ char *p, c; ++ char shiftop; ++ ++ pr_debug("parse Ry<') ++ break; ++ ++ shiftop = *p; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); ++ *p = c; ++ ++ if (c) ++ { ++ if (p[0] != shiftop || p[1] != shiftop) ++ as_bad(_("expected shift operator in `%s'"), p); ++ else ++ { ++ expressionS exp; ++ char *saved; ++ ++ saved = input_line_pointer; ++ input_line_pointer = p + 2; ++ expression(&exp); ++ input_line_pointer = saved; ++ ++ if (exp.X_op != O_constant) ++ as_bad(_("shift amount must be a numeric constant")); ++ else ++ shift = exp.X_add_number; ++ } ++ } ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = shift; ++} ++ ++/* The match() function selected the right opcode, so it doesn't ++ matter which way we shift any more. */ ++#define parse_intreg_lsl parse_intreg_shift ++#define parse_intreg_lsr parse_intreg_shift ++ ++static void ++parse_intreg_part(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ static const char bparts[] = { 'b', 'l', 'u', 't' }; ++ static const char hparts[] = { 'b', 't' }; ++ unsigned int slot, sel; ++ int regid; ++ char *p, c; ++ ++ pr_debug("parse reg:part `%s'\n", str); ++ ++ for (p = str; *p; p++) ++ if (*p == ':') ++ break; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); ++ *p = c; ++ ++ assert(c == ':'); ++ ++ if (op->align_order) ++ { ++ for (sel = 0; sel < sizeof(hparts); sel++) ++ if (TOLOWER(p[1]) == hparts[sel]) ++ break; ++ ++ if (sel >= sizeof(hparts)) ++ { ++ as_bad(_("invalid halfword selector `%c' (must be either b or t)"), ++ p[1]); ++ sel = 0; ++ } ++ } ++ else ++ { ++ for (sel = 0; sel < sizeof(bparts); sel++) ++ if (TOLOWER(p[1]) == bparts[sel]) ++ break; ++ ++ if (sel >= sizeof(bparts)) ++ { ++ as_bad(_("invalid byte selector `%c' (must be one of b,l,u,t)"), ++ p[1]); ++ sel = 0; ++ } ++ } ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = sel; ++} ++ ++/* This is the parser for "Rp[displacement]" expressions. In addition ++ to the "official" syntax, we accept a label as a replacement for ++ the register expression. This syntax implies Rp=PC and the ++ displacement is the pc-relative distance to the label. */ ++static void ++parse_intreg_disp(const struct avr32_operand *op, char *str, int opindex) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ int slot, regid; ++ char *save, *p, c; ++ ++ pr_debug("parse_intreg_disp: `%s' (signed: %d, pcrel: %d, align: %d)\n", ++ str, op->is_signed, op->is_pcrel, op->align_order); ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ slot = current_insn.next_slot++; ++ ++ /* First, check if we have a valid register either before '[' or as ++ the sole expression. If so, we use the Rp[disp] syntax. */ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ *p = c; ++ ++ if (regid >= 0) ++ { ++ current_insn.field_value[slot].value = regid; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].align_order = op->align_order; ++ ++ if (c == '[') ++ { ++ save = input_line_pointer; ++ input_line_pointer = p + 1; ++ ++ expression(exp); ++ ++ if (*input_line_pointer != ']') ++ as_bad(_("junk after displacement expression")); ++ ++ input_line_pointer = save; ++ ++ switch (exp->X_op) ++ { ++ case O_illegal: ++ as_bad(_("illegal displacement expression")); ++ break; ++ case O_absent: ++ as_bad(_("missing displacement expression")); ++ break; ++ case O_constant: ++ pr_debug(" -> constant: %ld\n", exp->X_add_number); ++ current_insn.field_value[slot].value = exp->X_add_number; ++ break; ++#if 0 ++ case O_subtract: ++ if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) ++ current_insn.pcrel = TRUE; ++ pr_debug(" -> subtract: pcrel? %s\n", ++ current_insn.pcrel ? "yes" : "no"); ++ /* fall through */ ++#endif ++ default: ++ pr_debug(" -> (%p <%d> %p + %d)\n", ++ exp->X_add_symbol, exp->X_op, exp->X_op_symbol, ++ exp->X_add_number); ++ current_insn.field_value[slot].value = 0; ++ } ++ } ++ else ++ { ++ exp->X_op = O_constant; ++ exp->X_add_number = 0; ++ current_insn.field_value[slot].value = 0; ++ } ++ } ++ else ++ { ++ /* Didn't find a valid register. Try parsing it as a label. */ ++ current_insn.field_value[slot].value = AVR32_REG_PC; ++ parse_jmplabel(op, str, opindex); ++ } ++} ++ ++static void ++parse_intreg_index(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ int slot, regid; ++ char *p, *end, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ assert(*p); ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); ++ *p = c; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ ++ p++; ++ for (end = p; *end; end++) ++ if (*end == ']' || *end == '<') ++ break; ++ ++ assert(*end); ++ ++ c = *end, *end = 0; ++ regid = avr32_parse_intreg(p); ++ assert(regid >= 0); ++ *end = c; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = 0; ++ ++ if (*end == '<') ++ { ++ expressionS exp; ++ char *save; ++ ++ p = end + 2; ++ for (end = p; *end; end++) ++ if (*end == ']') ++ break; ++ ++ assert(*end == ']'); ++ ++ c = *end, *end = 0; ++ save = input_line_pointer; ++ input_line_pointer = p; ++ expression(&exp); ++ ++ if (*input_line_pointer) ++ as_bad(_("junk after shift expression")); ++ ++ *end = c; ++ input_line_pointer = save; ++ ++ if (exp.X_op == O_constant) ++ current_insn.field_value[slot].value = exp.X_add_number; ++ else ++ as_bad(_("shift expression too complex")); ++ } ++} ++ ++static void ++parse_intreg_xindex(const struct avr32_operand *op, char *str, int opindex) ++{ ++ int slot, regid; ++ char *p, *end, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ assert(*p); ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); ++ *p = c; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ ++ p++; ++ for (end = p; *end; end++) ++ if (*end == '<') ++ break; ++ ++ assert(*end); ++ ++ c = *end, *end = 0; ++ parse_intreg_part(op, p, opindex); ++ *end = c; ++} ++ ++static void ++parse_pc_disp(const struct avr32_operand *op, char *str, int opindex) ++{ ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ /* The lddpc instruction comes in two different syntax variants: ++ lddpc reg, expression ++ lddpc reg, pc[disp] ++ If the operand contains a '[', we use the second form. */ ++ if (*p) ++ { ++ int regid; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ *p = c; ++ if (regid == AVR32_REG_PC) ++ { ++ char *end; ++ ++ for (end = ++p; *end; end++) ; ++ if (*(--end) != ']') ++ as_bad(_("unrecognized form of instruction: `%s'"), str); ++ else ++ { ++ c = *end, *end = 0; ++ parse_const(op, p, opindex); ++ *end = c; ++ current_insn.pcrel = 0; ++ } ++ } ++ else ++ as_bad(_("unrecognized form of instruction: `%s'"), str); ++ } ++ else ++ { ++ parse_jmplabel(op, str, opindex); ++ } ++} ++ ++static void parse_sp(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str ATTRIBUTE_UNUSED, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ int slot; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = AVR32_REG_SP; ++} ++ ++static void ++parse_sp_disp(const struct avr32_operand *op, char *str, int opindex) ++{ ++ char *p, c; ++ ++ for (; *str; str++) ++ if (*str == '[') ++ break; ++ ++ assert(*str); ++ ++ for (p = ++str; *p; p++) ++ if (*p == ']') ++ break; ++ ++ c = *p, *p = 0; ++ parse_const(op, str, opindex); ++ *p = c; ++} ++ ++static void ++parse_cpno(const struct avr32_operand *op ATTRIBUTE_UNUSED, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ int slot; ++ ++ str += 2; ++ if (*str == '#') ++ str++; ++ if (*str < '0' || *str > '7' || str[1]) ++ as_bad(_("invalid coprocessor `%s'"), str); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = *str - '0'; ++} ++ ++static void ++parse_cpreg(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned int crid; ++ int slot; ++ char *endptr; ++ ++ str += 2; ++ crid = strtoul(str, &endptr, 10); ++ if (*endptr || crid > 15 || crid & ((1 << op->align_order) - 1)) ++ as_bad(_("invalid coprocessor register `%s'"), str); ++ ++ crid >>= op->align_order; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = crid; ++} ++ ++static void ++parse_number(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ expressionS exp; ++ int slot; ++ char *save; ++ ++ save = input_line_pointer; ++ input_line_pointer = str; ++ expression(&exp); ++ input_line_pointer = save; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].align_order = op->align_order; ++ ++ if (exp.X_op == O_constant) ++ current_insn.field_value[slot].value = exp.X_add_number; ++ else ++ as_bad(_("invalid numeric expression `%s'"), str); ++} ++ ++static void ++parse_reglist8(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ unsigned long value = 0; ++ int slot; ++ char *tail; ++ ++ regmask = avr32_parse_reglist(str, &tail); ++ if (*tail) ++ as_bad(_("invalid register list `%s'"), str); ++ else ++ { ++ if (avr32_make_regmask8(regmask, &value)) ++ as_bad(_("register list `%s' doesn't fit"), str); ++ } ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = value; ++} ++ ++static int ++parse_reglist_tail(char *str, unsigned long regmask) ++{ ++ expressionS exp; ++ char *save, *p, c; ++ int regid; ++ ++ for (p = str + 1; *p; p++) ++ if (*p == '=') ++ break; ++ ++ if (!*p) ++ { ++ as_bad(_("invalid register list `%s'"), str); ++ return -2; ++ } ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ *p = c; ++ ++ if (regid != 12) ++ { ++ as_bad(_("invalid register list `%s'"), str); ++ return -2; ++ } ++ ++ /* If we have an assignment, we must pop PC and we must _not_ ++ pop LR or R12 */ ++ if (!(regmask & (1 << AVR32_REG_PC))) ++ { ++ as_bad(_("return value specified for non-return instruction")); ++ return -2; ++ } ++ else if (regmask & ((1 << AVR32_REG_R12) | (1 << AVR32_REG_LR))) ++ { ++ as_bad(_("can't pop LR or R12 when specifying return value")); ++ return -2; ++ } ++ ++ save = input_line_pointer; ++ input_line_pointer = p + 1; ++ expression(&exp); ++ input_line_pointer = save; ++ ++ if (exp.X_op != O_constant ++ || exp.X_add_number < -1 ++ || exp.X_add_number > 1) ++ { ++ as_bad(_("invalid return value `%s'"), str); ++ return -2; ++ } ++ ++ return exp.X_add_number; ++} ++ ++static void ++parse_reglist9(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ unsigned long value = 0, kbit = 0; ++ int slot; ++ char *tail; ++ ++ regmask = avr32_parse_reglist(str, &tail); ++ /* printf("parsed reglist16: %04lx, tail: `%s'\n", regmask, tail); */ ++ if (*tail) ++ { ++ int retval; ++ ++ retval = parse_reglist_tail(tail, regmask); ++ ++ switch (retval) ++ { ++ case -1: ++ regmask |= 1 << AVR32_REG_LR; ++ break; ++ case 0: ++ break; ++ case 1: ++ regmask |= 1 << AVR32_REG_R12; ++ break; ++ default: ++ break; ++ } ++ ++ kbit = 1; ++ } ++ ++ if (avr32_make_regmask8(regmask, &value)) ++ as_bad(_("register list `%s' doesn't fit"), str); ++ ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = (value << 1) | kbit; ++} ++ ++static void ++parse_reglist16(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ int slot; ++ char *tail; ++ ++ regmask = avr32_parse_reglist(str, &tail); ++ if (*tail) ++ as_bad(_("invalid register list `%s'"), str); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask; ++} ++ ++static void ++parse_reglist_ldm(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ int slot, rp, w_bit = 0; ++ char *tail, *p, c; ++ ++ for (p = str; *p && *p != ','; p++) ++ if (*p == '+') ++ break; ++ ++ c = *p, *p = 0; ++ rp = avr32_parse_intreg(str); ++ *p = c; ++ if (rp < 0) ++ { ++ as_bad(_("invalid destination register in `%s'"), str); ++ return; ++ } ++ ++ if (p[0] == '+' && p[1] == '+') ++ { ++ w_bit = 1; ++ p += 2; ++ } ++ ++ if (*p != ',') ++ { ++ as_bad(_("expected `,' after destination register in `%s'"), str); ++ return; ++ } ++ ++ str = p + 1; ++ regmask = avr32_parse_reglist(str, &tail); ++ if (*tail) ++ { ++ int retval; ++ ++ if (rp != AVR32_REG_SP) ++ { ++ as_bad(_("junk at end of line: `%s'"), tail); ++ return; ++ } ++ ++ rp = AVR32_REG_PC; ++ ++ retval = parse_reglist_tail(tail, regmask); ++ ++ switch (retval) ++ { ++ case -1: ++ regmask |= 1 << AVR32_REG_LR; ++ break; ++ case 0: ++ break; ++ case 1: ++ regmask |= 1 << AVR32_REG_R12; ++ break; ++ default: ++ return; ++ } ++ } ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = rp; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = w_bit; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask; ++} ++ ++static void ++parse_reglist_cp8(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ int slot, h_bit = 0; ++ char *tail; ++ ++ regmask = avr32_parse_cpreglist(str, &tail); ++ if (*tail) ++ as_bad(_("junk at end of line: `%s'"), tail); ++ else if (regmask & 0xffUL) ++ { ++ if (regmask & 0xff00UL) ++ as_bad(_("register list `%s' doesn't fit"), str); ++ regmask &= 0xff; ++ } ++ else if (regmask & 0xff00UL) ++ { ++ regmask >>= 8; ++ h_bit = 1; ++ } ++ else ++ as_warn(_("register list is empty")); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = h_bit; ++} ++ ++static void ++parse_reglist_cpd8(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask, regmask_d = 0; ++ int slot, i; ++ char *tail; ++ ++ regmask = avr32_parse_cpreglist(str, &tail); ++ if (*tail) ++ as_bad(_("junk at end of line: `%s'"), tail); ++ ++ for (i = 0; i < 8; i++) ++ { ++ if (regmask & 1) ++ { ++ if (!(regmask & 2)) ++ { ++ as_bad(_("register list `%s' doesn't fit"), str); ++ break; ++ } ++ regmask_d |= 1 << i; ++ } ++ else if (regmask & 2) ++ { ++ as_bad(_("register list `%s' doesn't fit"), str); ++ break; ++ } ++ ++ regmask >>= 2; ++ } ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask_d; ++} ++ ++static void ++parse_retval(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ int regid, slot; ++ ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ { ++ expressionS exp; ++ char *save; ++ ++ regid = 0; ++ ++ save = input_line_pointer; ++ input_line_pointer = str; ++ expression(&exp); ++ input_line_pointer = save; ++ ++ if (exp.X_op != O_constant) ++ as_bad(_("invalid return value `%s'"), str); ++ else ++ switch (exp.X_add_number) ++ { ++ case -1: ++ regid = AVR32_REG_LR; ++ break; ++ case 0: ++ regid = AVR32_REG_SP; ++ break; ++ case 1: ++ regid = AVR32_REG_PC; ++ break; ++ default: ++ as_bad(_("invalid return value `%s'"), str); ++ break; ++ } ++ } ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++} ++ ++#define parse_mcall parse_intreg_disp ++ ++static void ++parse_jospinc(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ expressionS exp; ++ int slot; ++ char *save; ++ ++ save = input_line_pointer; ++ input_line_pointer = str; ++ expression(&exp); ++ input_line_pointer = save; ++ ++ slot = current_insn.next_slot++; ++ ++ if (exp.X_op == O_constant) ++ { ++ if (exp.X_add_number > 0) ++ exp.X_add_number--; ++ current_insn.field_value[slot].value = exp.X_add_number; ++ } ++ else ++ as_bad(_("invalid numeric expression `%s'"), str); ++} ++ ++#define parse_coh parse_nothing ++ ++static void ++parse_fpreg(const struct avr32_operand *op, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regid; ++ int slot; ++ ++ regid = strtoul(str + 2, NULL, 10); ++ ++ if ((regid >= 16) || (regid & ((1 << op->align_order) - 1))) ++ as_bad(_("invalid floating-point register `%s'"), str); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ current_insn.field_value[slot].align_order = op->align_order; ++} ++ ++static void ++parse_picoreg(const struct avr32_operand *op, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regid; ++ int slot; ++ ++ regid = avr32_parse_picoreg(str); ++ if (regid & ((1 << op->align_order) - 1)) ++ as_bad(_("invalid double-word PiCo register `%s'"), str); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ current_insn.field_value[slot].align_order = op->align_order; ++} ++ ++static void ++parse_pico_reglist_w(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ int slot, h_bit = 0; ++ char *tail; ++ ++ regmask = avr32_parse_pico_reglist(str, &tail); ++ if (*tail) ++ as_bad(_("junk at end of line: `%s'"), tail); ++ ++ if (regmask & 0x00ffUL) ++ { ++ if (regmask & 0xff00UL) ++ as_bad(_("register list `%s' doesn't fit"), str); ++ regmask &= 0x00ffUL; ++ } ++ else if (regmask & 0xff00UL) ++ { ++ regmask >>= 8; ++ h_bit = 1; ++ } ++ else ++ as_warn(_("register list is empty")); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = h_bit; ++} ++ ++static void ++parse_pico_reglist_d(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask, regmask_d = 0; ++ int slot, i; ++ char *tail; ++ ++ regmask = avr32_parse_pico_reglist(str, &tail); ++ if (*tail) ++ as_bad(_("junk at end of line: `%s'"), tail); ++ ++ for (i = 0; i < 8; i++) ++ { ++ if (regmask & 1) ++ { ++ if (!(regmask & 2)) ++ { ++ as_bad(_("register list `%s' doesn't fit"), str); ++ break; ++ } ++ regmask_d |= 1 << i; ++ } ++ else if (regmask & 2) ++ { ++ as_bad(_("register list `%s' doesn't fit"), str); ++ break; ++ } ++ ++ regmask >>= 2; ++ } ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask_d; ++} ++ ++static void ++parse_pico_in(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regid; ++ int slot; ++ ++ regid = strtoul(str + 2, NULL, 10); ++ ++ if (regid >= 12) ++ as_bad(_("invalid PiCo IN register `%s'"), str); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ current_insn.field_value[slot].align_order = 0; ++} ++ ++#define parse_pico_out0 parse_nothing ++#define parse_pico_out1 parse_nothing ++#define parse_pico_out2 parse_nothing ++#define parse_pico_out3 parse_nothing ++ ++#define OP(name, sgn, pcrel, align, func) \ ++ { AVR32_OPERAND_##name, sgn, pcrel, align, match_##func, parse_##func } ++ ++struct avr32_operand avr32_operand_table[] = { ++ OP(INTREG, 0, 0, 0, intreg), ++ OP(INTREG_PREDEC, 0, 0, 0, intreg_predec), ++ OP(INTREG_POSTINC, 0, 0, 0, intreg_postinc), ++ OP(INTREG_LSL, 0, 0, 0, intreg_lsl), ++ OP(INTREG_LSR, 0, 0, 0, intreg_lsr), ++ OP(INTREG_BSEL, 0, 0, 0, intreg_part), ++ OP(INTREG_HSEL, 0, 0, 1, intreg_part), ++ OP(INTREG_SDISP, 1, 0, 0, intreg_disp), ++ OP(INTREG_SDISP_H, 1, 0, 1, intreg_disp), ++ OP(INTREG_SDISP_W, 1, 0, 2, intreg_disp), ++ OP(INTREG_UDISP, 0, 0, 0, intreg_disp), ++ OP(INTREG_UDISP_H, 0, 0, 1, intreg_disp), ++ OP(INTREG_UDISP_W, 0, 0, 2, intreg_disp), ++ OP(INTREG_INDEX, 0, 0, 0, intreg_index), ++ OP(INTREG_XINDEX, 0, 0, 0, intreg_xindex), ++ OP(DWREG, 0, 0, 1, intreg), ++ OP(PC_UDISP_W, 0, 1, 2, pc_disp), ++ OP(SP, 0, 0, 0, sp), ++ OP(SP_UDISP_W, 0, 0, 2, sp_disp), ++ OP(CPNO, 0, 0, 0, cpno), ++ OP(CPREG, 0, 0, 0, cpreg), ++ OP(CPREG_D, 0, 0, 1, cpreg), ++ OP(UNSIGNED_CONST, 0, 0, 0, const), ++ OP(UNSIGNED_CONST_W, 0, 0, 2, const), ++ OP(SIGNED_CONST, 1, 0, 0, const), ++ OP(SIGNED_CONST_W, 1, 0, 2, const), ++ OP(JMPLABEL, 1, 1, 1, jmplabel), ++ OP(UNSIGNED_NUMBER, 0, 0, 0, number), ++ OP(UNSIGNED_NUMBER_W, 0, 0, 2, number), ++ OP(REGLIST8, 0, 0, 0, reglist8), ++ OP(REGLIST9, 0, 0, 0, reglist9), ++ OP(REGLIST16, 0, 0, 0, reglist16), ++ OP(REGLIST_LDM, 0, 0, 0, reglist_ldm), ++ OP(REGLIST_CP8, 0, 0, 0, reglist_cp8), ++ OP(REGLIST_CPD8, 0, 0, 0, reglist_cpd8), ++ OP(RETVAL, 0, 0, 0, retval), ++ OP(MCALL, 1, 0, 2, mcall), ++ OP(JOSPINC, 0, 0, 0, jospinc), ++ OP(COH, 0, 0, 0, coh), ++ OP(FPREG_S, 0, 0, 0, fpreg), ++ OP(FPREG_D, 0, 0, 1, fpreg), ++ OP(PICO_REG_W, 0, 0, 0, picoreg), ++ OP(PICO_REG_D, 0, 0, 1, picoreg), ++ OP(PICO_REGLIST_W, 0, 0, 0, pico_reglist_w), ++ OP(PICO_REGLIST_D, 0, 0, 0, pico_reglist_d), ++ OP(PICO_IN, 0, 0, 0, pico_in), ++ OP(PICO_OUT0, 0, 0, 0, pico_out0), ++ OP(PICO_OUT1, 0, 0, 0, pico_out1), ++ OP(PICO_OUT2, 0, 0, 0, pico_out2), ++ OP(PICO_OUT3, 0, 0, 0, pico_out3), ++}; ++ ++symbolS * ++md_undefined_symbol (char *name ATTRIBUTE_UNUSED) ++{ ++ pr_debug("md_undefined_symbol: %s\n", name); ++ return 0; ++} ++ ++struct avr32_relax_type ++{ ++ long lower_bound; ++ long upper_bound; ++ unsigned char align; ++ unsigned char length; ++ signed short next; ++}; ++ ++#define EMPTY { 0, 0, 0, 0, -1 } ++#define C(lower, upper, align, next) \ ++ { (lower), (upper), (align), 2, AVR32_OPC_##next } ++#define E(lower, upper, align) \ ++ { (lower), (upper), (align), 4, -1 } ++ ++static const struct avr32_relax_type avr32_relax_table[] = ++ { ++ /* 0 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, ++ E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), ++ EMPTY, ++ /* 16 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ C(-256, 254, 1, BREQ2), C(-256, 254, 1, BRNE2), ++ C(-256, 254, 1, BRCC2), C(-256, 254, 1, BRCS2), ++ C(-256, 254, 1, BRGE2), C(-256, 254, 1, BRLT2), ++ C(-256, 254, 1, BRMI2), C(-256, 254, 1, BRPL2), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ /* 32 */ ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 48 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, ++ ++ C(-32, 31, 0, CP_W3), E(-1048576, 1048575, 0), ++ ++ EMPTY, EMPTY, EMPTY, ++ /* 64: csrfcz */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(0, 65535, 0), E(0, 65535, 0), ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(-32768, 32767, 0), ++ /* 80: LD_SB2 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ C(0, 7, 0, LD_UB4), E(-32768, 32767, 0), ++ ++ EMPTY, ++ EMPTY, EMPTY, ++ ++ C(0, 14, 1, LD_SH4), E(-32768, 32767, 0), ++ ++ EMPTY, EMPTY, EMPTY, ++ ++ C(0, 14, 1, LD_UH4), E(-32768, 32767, 0), ++ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ C(0, 124, 2, LD_W4), E(-32768, 32767, 0), ++ ++ E(0, 1020, 2), /* LDC_D1 */ ++ EMPTY, EMPTY, ++ E(0, 1020, 2), /* LDC_W1 */ ++ EMPTY, EMPTY, ++ E(0, 16380, 2), /* LDC0_D */ ++ E(0, 16380, 2), /* LDC0_W */ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ C(0, 508, 2, LDDPC_EXT), E(-32768, 32767, 0), ++ ++ EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 128: MACHH_W */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(-131072, 131068, 2), /* MCALL */ ++ E(0, 1020, 2), /* MFDR */ ++ E(0, 1020, 2), /* MFSR */ ++ EMPTY, EMPTY, ++ ++ C(-128, 127, 0, MOV2), E(-1048576, 1048575, 0), ++ ++ EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ E(-128, 127, 0), /* MOVEQ2 */ ++ E(-128, 127, 0), /* MOVNE2 */ ++ E(-128, 127, 0), /* MOVCC2 */ ++ E(-128, 127, 0), /* 160: MOVCS2 */ ++ E(-128, 127, 0), /* MOVGE2 */ ++ E(-128, 127, 0), /* MOVLT2 */ ++ E(-128, 127, 0), /* MOVMI2 */ ++ E(-128, 127, 0), /* MOVPL2 */ ++ E(-128, 127, 0), /* MOVLS2 */ ++ E(-128, 127, 0), /* MOVGT2 */ ++ E(-128, 127, 0), /* MOVLE2 */ ++ E(-128, 127, 0), /* MOVHI2 */ ++ E(-128, 127, 0), /* MOVVS2 */ ++ E(-128, 127, 0), /* MOVVC2 */ ++ E(-128, 127, 0), /* MOVQS2 */ ++ E(-128, 127, 0), /* MOVAL2 */ ++ ++ E(0, 1020, 2), /* MTDR */ ++ E(0, 1020, 2), /* MTSR */ ++ EMPTY, ++ EMPTY, ++ E(-128, 127, 0), /* MUL3 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 192: MVCR_W */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(0, 65535, 0), E(0, 65535, 0), ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 224: PASR_H */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 256: PUNPCKSB_H */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ C(-1024, 1022, 1, RCALL2), E(-2097152, 2097150, 1), ++ ++ EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, ++ ++ C(-1024, 1022, 1, BRAL), ++ ++ EMPTY, EMPTY, EMPTY, ++ E(-128, 127, 0), /* RSUB2 */ ++ /* 288: SATADD_H */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(0, 255, 0), /* SLEEP */ ++ EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 320: ST_B2 */ ++ EMPTY, EMPTY, ++ C(0, 7, 0, ST_B4), E(-32768, 32767, 0), ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ E(-32768, 32767, 0), ++ EMPTY, EMPTY, EMPTY, ++ C(0, 14, 1, ST_H4), E(-32768, 32767, 0), ++ EMPTY, EMPTY, ++ EMPTY, ++ C(0, 60, 2, ST_W4), E(-32768, 32767, 0), ++ E(0, 1020, 2), /* STC_D1 */ ++ EMPTY, EMPTY, ++ E(0, 1020, 2), /* STC_W1 */ ++ EMPTY, EMPTY, ++ E(0, 16380, 2), /* STC0_D */ ++ E(0, 16380, 2), /* STC0_W */ ++ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 352: STDSP */ ++ EMPTY, EMPTY, ++ E(0, 1020, 2), /* STHH_W1 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, ++ E(-32768, 32767, 0), ++ C(-512, 508, 2, SUB4), ++ C(-128, 127, 0, SUB4), E(-1048576, 1048576, 0), ++ /* SUB{cond} */ ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ /* SUBF{cond} */ ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ EMPTY, ++ ++ /* 400: SWAP_B */ ++ EMPTY, EMPTY, EMPTY, ++ E(0, 255, 0), /* SYNC */ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 408: TST */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 416: EXTRACT_B */ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ }; ++ ++#undef E ++#undef C ++#undef EMPTY ++ ++#define AVR32_RS_NONE (-1) ++ ++#define avr32_rs_size(state) (avr32_relax_table[(state)].length) ++#define avr32_rs_align(state) (avr32_relax_table[(state)].align) ++#define relax_more(state) (avr32_relax_table[(state)].next) ++ ++#define opc_initial_substate(opc) ((opc)->id) ++ ++static int need_relax(int subtype, offsetT distance) ++{ ++ offsetT upper_bound, lower_bound; ++ ++ upper_bound = avr32_relax_table[subtype].upper_bound; ++ lower_bound = avr32_relax_table[subtype].lower_bound; ++ ++ if (distance & ((1 << avr32_rs_align(subtype)) - 1)) ++ return 1; ++ if ((distance > upper_bound) || (distance < lower_bound)) ++ return 1; ++ ++ return 0; ++} ++ ++enum { ++ LDA_SUBTYPE_MOV1, ++ LDA_SUBTYPE_MOV2, ++ LDA_SUBTYPE_SUB, ++ LDA_SUBTYPE_LDDPC, ++ LDA_SUBTYPE_LDW, ++ LDA_SUBTYPE_GOTLOAD, ++ LDA_SUBTYPE_GOTLOAD_LARGE, ++}; ++ ++enum { ++ CALL_SUBTYPE_RCALL1, ++ CALL_SUBTYPE_RCALL2, ++ CALL_SUBTYPE_MCALL_CP, ++ CALL_SUBTYPE_MCALL_GOT, ++ CALL_SUBTYPE_MCALL_LARGE, ++}; ++ ++#define LDA_INITIAL_SIZE (avr32_pic ? 4 : 2) ++#define CALL_INITIAL_SIZE 2 ++ ++#define need_reloc(sym, seg, pcrel) \ ++ (!(S_IS_DEFINED(sym) \ ++ && ((pcrel && S_GET_SEGMENT(sym) == seg) \ ++ || (!pcrel && S_GET_SEGMENT(sym) == absolute_section))) \ ++ || S_FORCE_RELOC(sym, 1)) ++ ++/* Return an initial guess of the length by which a fragment must grow to ++ hold a branch to reach its destination. ++ Also updates fr_type/fr_subtype as necessary. ++ ++ Called just before doing relaxation. ++ Any symbol that is now undefined will not become defined. ++ The guess for fr_var is ACTUALLY the growth beyond fr_fix. ++ Whatever we do to grow fr_fix or fr_var contributes to our returned value. ++ Although it may not be explicit in the frag, pretend fr_var starts with a ++ 0 value. */ ++ ++static int ++avr32_default_estimate_size_before_relax (fragS *fragP, segT segment) ++{ ++ int growth = 0; ++ ++ assert(fragP); ++ assert(fragP->fr_symbol); ++ ++ if (fragP->tc_frag_data.force_extended ++ || need_reloc(fragP->fr_symbol, segment, fragP->tc_frag_data.pcrel)) ++ { ++ int largest_state = fragP->fr_subtype; ++ while (relax_more(largest_state) != AVR32_RS_NONE) ++ largest_state = relax_more(largest_state); ++ growth = avr32_rs_size(largest_state) - fragP->fr_var; ++ } ++ else ++ { ++ growth = avr32_rs_size(fragP->fr_subtype) - fragP->fr_var; ++ } ++ ++ pr_debug("%s:%d: md_estimate_size_before_relax: %d\n", ++ fragP->fr_file, fragP->fr_line, growth); ++ ++ return growth; ++} ++ ++static int ++avr32_lda_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) ++{ ++ return fragP->fr_var - LDA_INITIAL_SIZE; ++} ++ ++static int ++avr32_call_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) ++{ ++ return fragP->fr_var - CALL_INITIAL_SIZE; ++} ++ ++static int ++avr32_cpool_estimate_size_before_relax(fragS *fragP, ++ segT segment ATTRIBUTE_UNUSED) ++{ ++ return fragP->fr_var; ++} ++ ++/* This macro may be defined to relax a frag. GAS will call this with the ++ * segment, the frag, and the change in size of all previous frags; ++ * md_relax_frag should return the change in size of the frag. */ ++static long ++avr32_default_relax_frag (segT segment, fragS *fragP, long stretch) ++{ ++ int state, next_state; ++ symbolS *symbolP; /* The target symbol */ ++ long growth = 0; ++ ++ state = next_state = fragP->fr_subtype; ++ ++ symbolP = fragP->fr_symbol; ++ ++ if (fragP->tc_frag_data.force_extended ++ || need_reloc(symbolP, segment, fragP->tc_frag_data.pcrel)) ++ { ++ /* Symbol must be resolved by the linker. Emit the largest ++ possible opcode. */ ++ while (relax_more(next_state) != AVR32_RS_NONE) ++ next_state = relax_more(next_state); ++ } ++ else ++ { ++ addressT address; /* The address of fragP */ ++ addressT target; /* The address of the target symbol */ ++ offsetT distance; /* The distance between the insn and the symbol */ ++ fragS *sym_frag; ++ ++ address = fragP->fr_address; ++ target = fragP->fr_offset; ++ symbolP = fragP->fr_symbol; ++ sym_frag = symbol_get_frag(symbolP); ++ ++ address += fragP->fr_fix - fragP->fr_var; ++ target += S_GET_VALUE(symbolP); ++ ++ if (stretch != 0 ++ && sym_frag->relax_marker != fragP->relax_marker ++ && S_GET_SEGMENT(symbolP) == segment) ++ /* if it was correctly aligned before, make sure it stays aligned */ ++ target += stretch & (~0UL << avr32_rs_align(state)); ++ ++ if (fragP->tc_frag_data.pcrel) ++ distance = target - (address & (~0UL << avr32_rs_align(state))); ++ else ++ distance = target; ++ ++ pr_debug("%s:%d: relax more? 0x%x - 0x%x = 0x%x (%d), align %d\n", ++ fragP->fr_file, fragP->fr_line, target, address, ++ distance, distance, avr32_rs_align(state)); ++ ++ if (need_relax(state, distance)) ++ { ++ if (relax_more(state) != AVR32_RS_NONE) ++ next_state = relax_more(state); ++ pr_debug("%s:%d: relax more %d -> %d (%d - %d, align %d)\n", ++ fragP->fr_file, fragP->fr_line, state, next_state, ++ target, address, avr32_rs_align(state)); ++ } ++ } ++ ++ growth = avr32_rs_size(next_state) - avr32_rs_size(state); ++ fragP->fr_subtype = next_state; ++ ++ pr_debug("%s:%d: md_relax_frag: growth=%d, subtype=%d, opc=0x%08lx\n", ++ fragP->fr_file, fragP->fr_line, growth, fragP->fr_subtype, ++ avr32_opc_table[next_state].value); ++ ++ return growth; ++} ++ ++static long ++avr32_lda_relax_frag(segT segment, fragS *fragP, long stretch) ++{ ++ struct cpool *pool= NULL; ++ unsigned int entry = 0; ++ addressT address, target; ++ offsetT distance; ++ symbolS *symbolP; ++ fragS *sym_frag; ++ long old_size, new_size; ++ ++ symbolP = fragP->fr_symbol; ++ old_size = fragP->fr_var; ++ if (!avr32_pic) ++ { ++ pool = fragP->tc_frag_data.pool; ++ entry = fragP->tc_frag_data.pool_entry; ++ } ++ ++ address = fragP->fr_address; ++ address += fragP->fr_fix - LDA_INITIAL_SIZE; ++ ++ if (!S_IS_DEFINED(symbolP) || S_FORCE_RELOC(symbolP, 1)) ++ goto relax_max; ++ ++ target = fragP->fr_offset; ++ sym_frag = symbol_get_frag(symbolP); ++ target += S_GET_VALUE(symbolP); ++ ++ if (sym_frag->relax_marker != fragP->relax_marker ++ && S_GET_SEGMENT(symbolP) == segment) ++ target += stretch; ++ ++ distance = target - address; ++ ++ pr_debug("lda_relax_frag: target: %d, address: %d, var: %d\n", ++ target, address, fragP->fr_var); ++ ++ if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section ++ && target <= 127 && (offsetT)target >= -128) ++ { ++ if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC ++ || fragP->fr_subtype == LDA_SUBTYPE_LDW) ++ pool->literals[entry].refcount--; ++ new_size = 2; ++ fragP->fr_subtype = LDA_SUBTYPE_MOV1; ++ } ++ else if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section ++ && target <= 1048575 && (offsetT)target >= -1048576) ++ { ++ if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC ++ || fragP->fr_subtype == LDA_SUBTYPE_LDW) ++ pool->literals[entry].refcount--; ++ new_size = 4; ++ fragP->fr_subtype = LDA_SUBTYPE_MOV2; ++ } ++ else if (!linkrelax && S_GET_SEGMENT(symbolP) == segment ++ /* the field will be negated, so this is really -(-32768) ++ and -(32767) */ ++ && distance <= 32768 && distance >= -32767) ++ { ++ if (!avr32_pic ++ && (fragP->fr_subtype == LDA_SUBTYPE_LDDPC ++ || fragP->fr_subtype == LDA_SUBTYPE_LDW)) ++ pool->literals[entry].refcount--; ++ new_size = 4; ++ fragP->fr_subtype = LDA_SUBTYPE_SUB; ++ } ++ else ++ { ++ relax_max: ++ if (avr32_pic) ++ { ++ if (linkrelax) ++ { ++ new_size = 8; ++ fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD_LARGE; ++ } ++ else ++ { ++ new_size = 4; ++ fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD; ++ } ++ } ++ else ++ { ++ if (fragP->fr_subtype != LDA_SUBTYPE_LDDPC ++ && fragP->fr_subtype != LDA_SUBTYPE_LDW) ++ pool->literals[entry].refcount++; ++ ++ sym_frag = symbol_get_frag(pool->symbol); ++ target = (sym_frag->fr_address + sym_frag->fr_fix ++ + pool->padding + pool->literals[entry].offset); ++ ++ pr_debug("cpool sym address: 0x%lx\n", ++ sym_frag->fr_address + sym_frag->fr_fix); ++ ++ know(pool->section == segment); ++ ++ if (sym_frag->relax_marker != fragP->relax_marker) ++ target += stretch; ++ ++ distance = target - address; ++ if (distance <= 508 && distance >= 0) ++ { ++ new_size = 2; ++ fragP->fr_subtype = LDA_SUBTYPE_LDDPC; ++ } ++ else ++ { ++ new_size = 4; ++ fragP->fr_subtype = LDA_SUBTYPE_LDW; ++ } ++ ++ pr_debug("lda_relax_frag (cpool): target=0x%lx, address=0x%lx, refcount=%d\n", ++ target, address, pool->literals[entry].refcount); ++ } ++ } ++ ++ fragP->fr_var = new_size; ++ ++ pr_debug("%s:%d: lda: relax pass done. subtype: %d, growth: %ld\n", ++ fragP->fr_file, fragP->fr_line, ++ fragP->fr_subtype, new_size - old_size); ++ ++ return new_size - old_size; ++} ++ ++static long ++avr32_call_relax_frag(segT segment, fragS *fragP, long stretch) ++{ ++ struct cpool *pool = NULL; ++ unsigned int entry = 0; ++ addressT address, target; ++ offsetT distance; ++ symbolS *symbolP; ++ fragS *sym_frag; ++ long old_size, new_size; ++ ++ symbolP = fragP->fr_symbol; ++ old_size = fragP->fr_var; ++ if (!avr32_pic) ++ { ++ pool = fragP->tc_frag_data.pool; ++ entry = fragP->tc_frag_data.pool_entry; ++ } ++ ++ address = fragP->fr_address; ++ address += fragP->fr_fix - CALL_INITIAL_SIZE; ++ ++ if (need_reloc(symbolP, segment, 1)) ++ { ++ pr_debug("call: must emit reloc\n"); ++ goto relax_max; ++ } ++ ++ target = fragP->fr_offset; ++ sym_frag = symbol_get_frag(symbolP); ++ target += S_GET_VALUE(symbolP); ++ ++ if (sym_frag->relax_marker != fragP->relax_marker ++ && S_GET_SEGMENT(symbolP) == segment) ++ target += stretch; ++ ++ distance = target - address; ++ ++ if (distance <= 1022 && distance >= -1024) ++ { ++ pr_debug("call: distance is %d, emitting short rcall\n", distance); ++ if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) ++ pool->literals[entry].refcount--; ++ new_size = 2; ++ fragP->fr_subtype = CALL_SUBTYPE_RCALL1; ++ } ++ else if (distance <= 2097150 && distance >= -2097152) ++ { ++ pr_debug("call: distance is %d, emitting long rcall\n", distance); ++ if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) ++ pool->literals[entry].refcount--; ++ new_size = 4; ++ fragP->fr_subtype = CALL_SUBTYPE_RCALL2; ++ } ++ else ++ { ++ pr_debug("call: distance %d too far, emitting something big\n", distance); ++ ++ relax_max: ++ if (avr32_pic) ++ { ++ if (linkrelax) ++ { ++ new_size = 10; ++ fragP->fr_subtype = CALL_SUBTYPE_MCALL_LARGE; ++ } ++ else ++ { ++ new_size = 4; ++ fragP->fr_subtype = CALL_SUBTYPE_MCALL_GOT; ++ } ++ } ++ else ++ { ++ if (fragP->fr_subtype != CALL_SUBTYPE_MCALL_CP) ++ pool->literals[entry].refcount++; ++ ++ new_size = 4; ++ fragP->fr_subtype = CALL_SUBTYPE_MCALL_CP; ++ } ++ } ++ ++ fragP->fr_var = new_size; ++ ++ pr_debug("%s:%d: call: relax pass done, growth: %d, fr_var: %d\n", ++ fragP->fr_file, fragP->fr_line, ++ new_size - old_size, fragP->fr_var); ++ ++ return new_size - old_size; ++} ++ ++static long ++avr32_cpool_relax_frag(segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP, ++ long stretch ATTRIBUTE_UNUSED) ++{ ++ struct cpool *pool; ++ addressT address; ++ long old_size, new_size; ++ unsigned int entry; ++ ++ pool = fragP->tc_frag_data.pool; ++ address = fragP->fr_address + fragP->fr_fix; ++ old_size = fragP->fr_var; ++ new_size = 0; ++ ++ for (entry = 0; entry < pool->next_free_entry; entry++) ++ { ++ if (pool->literals[entry].refcount > 0) ++ { ++ pool->literals[entry].offset = new_size; ++ new_size += 4; ++ } ++ } ++ ++ fragP->fr_var = new_size; ++ ++ return new_size - old_size; ++} ++ ++/* *fragP has been relaxed to its final size, and now needs to have ++ the bytes inside it modified to conform to the new size. ++ ++ Called after relaxation is finished. ++ fragP->fr_type == rs_machine_dependent. ++ fragP->fr_subtype is the subtype of what the address relaxed to. */ ++ ++static void ++avr32_default_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, ++ segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP) ++{ ++ const struct avr32_opcode *opc; ++ const struct avr32_ifield *ifield; ++ bfd_reloc_code_real_type r_type; ++ symbolS *symbolP; ++ fixS *fixP; ++ bfd_vma value; ++ int subtype; ++ ++ opc = &avr32_opc_table[fragP->fr_subtype]; ++ ifield = opc->fields[opc->var_field]; ++ symbolP = fragP->fr_symbol; ++ subtype = fragP->fr_subtype; ++ r_type = opc->reloc_type; ++ ++ /* Clear the opcode bits and the bits belonging to the relaxed ++ field. We assume all other fields stay the same. */ ++ value = bfd_getb32(fragP->fr_opcode); ++ value &= ~(opc->mask | ifield->mask); ++ ++ /* Insert the new opcode */ ++ value |= opc->value; ++ bfd_putb32(value, fragP->fr_opcode); ++ ++ fragP->fr_fix += opc->size - fragP->fr_var; ++ ++ if (fragP->tc_frag_data.reloc_info != AVR32_OPINFO_NONE) ++ { ++ switch (fragP->tc_frag_data.reloc_info) ++ { ++ case AVR32_OPINFO_HI: ++ r_type = BFD_RELOC_HI16; ++ break; ++ case AVR32_OPINFO_LO: ++ r_type = BFD_RELOC_LO16; ++ break; ++ case AVR32_OPINFO_GOT: ++ switch (r_type) ++ { ++ case BFD_RELOC_AVR32_18W_PCREL: ++ r_type = BFD_RELOC_AVR32_GOT18SW; ++ break; ++ case BFD_RELOC_AVR32_16S: ++ r_type = BFD_RELOC_AVR32_GOT16S; ++ break; ++ default: ++ BAD_CASE(r_type); ++ break; ++ } ++ break; ++ default: ++ BAD_CASE(fragP->tc_frag_data.reloc_info); ++ break; ++ } ++ } ++ ++ pr_debug("%s:%d: convert_frag: new %s fixup\n", ++ fragP->fr_file, fragP->fr_line, ++ bfd_get_reloc_code_name(r_type)); ++ ++#if 1 ++ fixP = fix_new_exp(fragP, fragP->fr_fix - opc->size, opc->size, ++ &fragP->tc_frag_data.exp, ++ fragP->tc_frag_data.pcrel, r_type); ++#else ++ fixP = fix_new(fragP, fragP->fr_fix - opc->size, opc->size, symbolP, ++ fragP->fr_offset, fragP->tc_frag_data.pcrel, r_type); ++#endif ++ ++ /* Revert fix_new brain damage. "dot_value" is the value of PC at ++ the point of the fixup, relative to the frag address. fix_new() ++ and friends think they are only being called during the assembly ++ pass, not during relaxation or similar, so fx_dot_value, fx_file ++ and fx_line are all initialized to the wrong value. But we don't ++ know the size of the fixup until now, so we really can't live up ++ to the assumptions these functions make about the target. What ++ do these functions think the "where" and "frag" argument mean ++ anyway? */ ++ fixP->fx_dot_value = fragP->fr_fix - opc->size; ++ fixP->fx_file = fragP->fr_file; ++ fixP->fx_line = fragP->fr_line; ++ ++ fixP->tc_fix_data.ifield = ifield; ++ fixP->tc_fix_data.align = avr32_rs_align(subtype); ++ fixP->tc_fix_data.min = avr32_relax_table[subtype].lower_bound; ++ fixP->tc_fix_data.max = avr32_relax_table[subtype].upper_bound; ++} ++ ++static void ++avr32_lda_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, ++ segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP) ++{ ++ const struct avr32_opcode *opc; ++ const struct avr32_ifield *ifield; ++ bfd_reloc_code_real_type r_type; ++ expressionS exp; ++ struct cpool *pool; ++ fixS *fixP; ++ bfd_vma value; ++ int regid, pcrel = 0, align = 0; ++ char *p; ++ ++ r_type = BFD_RELOC_NONE; ++ regid = fragP->tc_frag_data.reloc_info; ++ p = fragP->fr_opcode; ++ exp.X_add_symbol = fragP->fr_symbol; ++ exp.X_add_number = fragP->fr_offset; ++ exp.X_op = O_symbol; ++ ++ pr_debug("%s:%d: lda_convert_frag, subtype: %d, fix: %d, var: %d, regid: %d\n", ++ fragP->fr_file, fragP->fr_line, ++ fragP->fr_subtype, fragP->fr_fix, fragP->fr_var, regid); ++ ++ switch (fragP->fr_subtype) ++ { ++ case LDA_SUBTYPE_MOV1: ++ opc = &avr32_opc_table[AVR32_OPC_MOV1]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ ifield = opc->fields[1]; ++ r_type = opc->reloc_type; ++ break; ++ case LDA_SUBTYPE_MOV2: ++ opc = &avr32_opc_table[AVR32_OPC_MOV2]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ ifield = opc->fields[1]; ++ r_type = opc->reloc_type; ++ break; ++ case LDA_SUBTYPE_SUB: ++ opc = &avr32_opc_table[AVR32_OPC_SUB5]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ opc->fields[1]->insert(opc->fields[1], p, AVR32_REG_PC); ++ ifield = opc->fields[2]; ++ r_type = BFD_RELOC_AVR32_16N_PCREL; ++ ++ /* Pretend that SUB5 isn't a "negated" pcrel expression for now. ++ We'll have to fix it up later when we know whether to ++ generate a reloc for it (in which case the linker will negate ++ it, so we shouldn't). */ ++ pcrel = 1; ++ break; ++ case LDA_SUBTYPE_LDDPC: ++ opc = &avr32_opc_table[AVR32_OPC_LDDPC]; ++ align = 2; ++ r_type = BFD_RELOC_AVR32_9W_CP; ++ goto cpool_common; ++ case LDA_SUBTYPE_LDW: ++ opc = &avr32_opc_table[AVR32_OPC_LDDPC_EXT]; ++ r_type = BFD_RELOC_AVR32_16_CP; ++ cpool_common: ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ ifield = opc->fields[1]; ++ pool = fragP->tc_frag_data.pool; ++ exp.X_add_symbol = pool->symbol; ++ exp.X_add_number = pool->literals[fragP->tc_frag_data.pool_entry].offset; ++ pcrel = 1; ++ break; ++ case LDA_SUBTYPE_GOTLOAD_LARGE: ++ /* ld.w Rd, r6[Rd << 2] (last) */ ++ opc = &avr32_opc_table[AVR32_OPC_LD_W5]; ++ bfd_putb32(opc->value, p + 4); ++ opc->fields[0]->insert(opc->fields[0], p + 4, regid); ++ opc->fields[1]->insert(opc->fields[1], p + 4, 6); ++ opc->fields[2]->insert(opc->fields[2], p + 4, regid); ++ opc->fields[3]->insert(opc->fields[3], p + 4, 2); ++ ++ /* mov Rd, (got_offset / 4) */ ++ opc = &avr32_opc_table[AVR32_OPC_MOV2]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ ifield = opc->fields[1]; ++ r_type = BFD_RELOC_AVR32_LDA_GOT; ++ break; ++ case LDA_SUBTYPE_GOTLOAD: ++ opc = &avr32_opc_table[AVR32_OPC_LD_W4]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ opc->fields[1]->insert(opc->fields[1], p, 6); ++ ifield = opc->fields[2]; ++ if (r_type == BFD_RELOC_NONE) ++ r_type = BFD_RELOC_AVR32_GOT16S; ++ break; ++ default: ++ BAD_CASE(fragP->fr_subtype); ++ } ++ ++ value = bfd_getb32(p); ++ value &= ~(opc->mask | ifield->mask); ++ value |= opc->value; ++ bfd_putb32(value, p); ++ ++ fragP->fr_fix += fragP->fr_var - LDA_INITIAL_SIZE; ++ ++ if (fragP->fr_next ++ && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) ++ != fragP->fr_fix)) ++ { ++ fprintf(stderr, "LDA frag: fr_fix is wrong! fragP->fr_var = %ld, r_type = %s\n", ++ fragP->fr_var, bfd_get_reloc_code_name(r_type)); ++ abort(); ++ } ++ ++ fixP = fix_new_exp(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, ++ &exp, pcrel, r_type); ++ ++ /* Revert fix_new brain damage. "dot_value" is the value of PC at ++ the point of the fixup, relative to the frag address. fix_new() ++ and friends think they are only being called during the assembly ++ pass, not during relaxation or similar, so fx_dot_value, fx_file ++ and fx_line are all initialized to the wrong value. But we don't ++ know the size of the fixup until now, so we really can't live up ++ to the assumptions these functions make about the target. What ++ do these functions think the "where" and "frag" argument mean ++ anyway? */ ++ fixP->fx_dot_value = fragP->fr_fix - opc->size; ++ fixP->fx_file = fragP->fr_file; ++ fixP->fx_line = fragP->fr_line; ++ ++ fixP->tc_fix_data.ifield = ifield; ++ fixP->tc_fix_data.align = align; ++ /* these are only used if the fixup can actually be resolved */ ++ fixP->tc_fix_data.min = -32768; ++ fixP->tc_fix_data.max = 32767; ++} ++ ++static void ++avr32_call_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, ++ segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP) ++{ ++ const struct avr32_opcode *opc = NULL; ++ const struct avr32_ifield *ifield; ++ bfd_reloc_code_real_type r_type; ++ symbolS *symbol; ++ offsetT offset; ++ fixS *fixP; ++ bfd_vma value; ++ int pcrel = 0, align = 0; ++ char *p; ++ ++ symbol = fragP->fr_symbol; ++ offset = fragP->fr_offset; ++ r_type = BFD_RELOC_NONE; ++ p = fragP->fr_opcode; ++ ++ pr_debug("%s:%d: call_convert_frag, subtype: %d, fix: %d, var: %d\n", ++ fragP->fr_file, fragP->fr_line, ++ fragP->fr_subtype, fragP->fr_fix, fragP->fr_var); ++ ++ switch (fragP->fr_subtype) ++ { ++ case CALL_SUBTYPE_RCALL1: ++ opc = &avr32_opc_table[AVR32_OPC_RCALL1]; ++ /* fall through */ ++ case CALL_SUBTYPE_RCALL2: ++ if (!opc) ++ opc = &avr32_opc_table[AVR32_OPC_RCALL2]; ++ ifield = opc->fields[0]; ++ r_type = opc->reloc_type; ++ pcrel = 1; ++ align = 1; ++ break; ++ case CALL_SUBTYPE_MCALL_CP: ++ opc = &avr32_opc_table[AVR32_OPC_MCALL]; ++ opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_PC); ++ ifield = opc->fields[1]; ++ r_type = BFD_RELOC_AVR32_CPCALL; ++ symbol = fragP->tc_frag_data.pool->symbol; ++ offset = fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].offset; ++ assert(fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].refcount > 0); ++ pcrel = 1; ++ align = 2; ++ break; ++ case CALL_SUBTYPE_MCALL_GOT: ++ opc = &avr32_opc_table[AVR32_OPC_MCALL]; ++ opc->fields[0]->insert(opc->fields[0], p, 6); ++ ifield = opc->fields[1]; ++ r_type = BFD_RELOC_AVR32_GOT18SW; ++ break; ++ case CALL_SUBTYPE_MCALL_LARGE: ++ assert(fragP->fr_var == 10); ++ /* ld.w lr, r6[lr << 2] */ ++ opc = &avr32_opc_table[AVR32_OPC_LD_W5]; ++ bfd_putb32(opc->value, p + 4); ++ opc->fields[0]->insert(opc->fields[0], p + 4, AVR32_REG_LR); ++ opc->fields[1]->insert(opc->fields[1], p + 4, 6); ++ opc->fields[2]->insert(opc->fields[2], p + 4, AVR32_REG_LR); ++ opc->fields[3]->insert(opc->fields[3], p + 4, 2); ++ ++ /* icall lr */ ++ opc = &avr32_opc_table[AVR32_OPC_ICALL]; ++ bfd_putb16(opc->value >> 16, p + 8); ++ opc->fields[0]->insert(opc->fields[0], p + 8, AVR32_REG_LR); ++ ++ /* mov lr, (got_offset / 4) */ ++ opc = &avr32_opc_table[AVR32_OPC_MOV2]; ++ opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_LR); ++ ifield = opc->fields[1]; ++ r_type = BFD_RELOC_AVR32_GOTCALL; ++ break; ++ default: ++ BAD_CASE(fragP->fr_subtype); ++ } ++ ++ /* Insert the opcode and clear the variable ifield */ ++ value = bfd_getb32(p); ++ value &= ~(opc->mask | ifield->mask); ++ value |= opc->value; ++ bfd_putb32(value, p); ++ ++ fragP->fr_fix += fragP->fr_var - CALL_INITIAL_SIZE; ++ ++ if (fragP->fr_next ++ && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) ++ != fragP->fr_fix)) ++ { ++ fprintf(stderr, "%s:%d: fr_fix %lu is wrong! fr_var=%lu, r_type=%s\n", ++ fragP->fr_file, fragP->fr_line, ++ fragP->fr_fix, fragP->fr_var, bfd_get_reloc_code_name(r_type)); ++ fprintf(stderr, "fr_fix should be %ld. next frag is %s:%d\n", ++ (offsetT)(fragP->fr_next->fr_address - fragP->fr_address), ++ fragP->fr_next->fr_file, fragP->fr_next->fr_line); ++ } ++ ++ fixP = fix_new(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, ++ symbol, offset, pcrel, r_type); ++ ++ /* Revert fix_new brain damage. "dot_value" is the value of PC at ++ the point of the fixup, relative to the frag address. fix_new() ++ and friends think they are only being called during the assembly ++ pass, not during relaxation or similar, so fx_dot_value, fx_file ++ and fx_line are all initialized to the wrong value. But we don't ++ know the size of the fixup until now, so we really can't live up ++ to the assumptions these functions make about the target. What ++ do these functions think the "where" and "frag" argument mean ++ anyway? */ ++ fixP->fx_dot_value = fragP->fr_fix - opc->size; ++ fixP->fx_file = fragP->fr_file; ++ fixP->fx_line = fragP->fr_line; ++ ++ fixP->tc_fix_data.ifield = ifield; ++ fixP->tc_fix_data.align = align; ++ /* these are only used if the fixup can actually be resolved */ ++ fixP->tc_fix_data.min = -2097152; ++ fixP->tc_fix_data.max = 2097150; ++} ++ ++static void ++avr32_cpool_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, ++ segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP) ++{ ++ struct cpool *pool; ++ addressT address; ++ unsigned int entry; ++ char *p; ++ char sym_name[20]; ++ ++ /* Did we get rid of the frag altogether? */ ++ if (!fragP->fr_var) ++ return; ++ ++ pool = fragP->tc_frag_data.pool; ++ address = fragP->fr_address + fragP->fr_fix; ++ p = fragP->fr_literal + fragP->fr_fix; ++ ++ sprintf(sym_name, "$$cp_\002%x", pool->id); ++ symbol_locate(pool->symbol, sym_name, pool->section, fragP->fr_fix, fragP); ++ symbol_table_insert(pool->symbol); ++ ++ for (entry = 0; entry < pool->next_free_entry; entry++) ++ { ++ if (pool->literals[entry].refcount > 0) ++ { ++ fix_new_exp(fragP, fragP->fr_fix, 4, &pool->literals[entry].exp, ++ FALSE, BFD_RELOC_AVR32_32_CPENT); ++ fragP->fr_fix += 4; ++ } ++ } ++} ++ ++static struct avr32_relaxer avr32_default_relaxer = { ++ .estimate_size = avr32_default_estimate_size_before_relax, ++ .relax_frag = avr32_default_relax_frag, ++ .convert_frag = avr32_default_convert_frag, ++}; ++static struct avr32_relaxer avr32_lda_relaxer = { ++ .estimate_size = avr32_lda_estimate_size_before_relax, ++ .relax_frag = avr32_lda_relax_frag, ++ .convert_frag = avr32_lda_convert_frag, ++}; ++static struct avr32_relaxer avr32_call_relaxer = { ++ .estimate_size = avr32_call_estimate_size_before_relax, ++ .relax_frag = avr32_call_relax_frag, ++ .convert_frag = avr32_call_convert_frag, ++}; ++static struct avr32_relaxer avr32_cpool_relaxer = { ++ .estimate_size = avr32_cpool_estimate_size_before_relax, ++ .relax_frag = avr32_cpool_relax_frag, ++ .convert_frag = avr32_cpool_convert_frag, ++}; ++ ++static void s_cpool(int arg ATTRIBUTE_UNUSED) ++{ ++ struct cpool *pool; ++ unsigned int max_size; ++ char *buf; ++ ++ pool = find_cpool(now_seg, now_subseg); ++ if (!pool || !pool->symbol || pool->next_free_entry == 0) ++ return; ++ ++ /* Make sure the constant pool is properly aligned */ ++ frag_align_code(2, 0); ++ ++ /* Assume none of the entries are discarded, and that we need the ++ maximum amount of alignment. But we're not going to allocate ++ anything up front. */ ++ max_size = pool->next_free_entry * 4 + 2; ++ frag_grow(max_size); ++ buf = frag_more(0); ++ ++ frag_now->tc_frag_data.relaxer = &avr32_cpool_relaxer; ++ frag_now->tc_frag_data.pool = pool; ++ ++ symbol_set_frag(pool->symbol, frag_now); ++ ++ /* Assume zero initial size, allowing other relaxers to be ++ optimistic about things. */ ++ frag_var(rs_machine_dependent, max_size, 0, ++ 0, pool->symbol, 0, NULL); ++ ++ /* Mark the pool as empty. */ ++ pool->used = 1; ++} ++ ++/* The location from which a PC relative jump should be calculated, ++ given a PC relative reloc. */ ++ ++long ++md_pcrel_from_section (fixS *fixP, segT sec) ++{ ++ pr_debug("pcrel_from_section, fx_offset = %d\n", fixP->fx_offset); ++ ++ if (fixP->fx_addsy != NULL ++ && (! S_IS_DEFINED (fixP->fx_addsy) ++ || S_GET_SEGMENT (fixP->fx_addsy) != sec ++ || S_FORCE_RELOC(fixP->fx_addsy, 1))) ++ { ++ pr_debug("Unknown pcrel symbol: %s\n", S_GET_NAME(fixP->fx_addsy)); ++ ++ /* The symbol is undefined (or is defined but not in this section). ++ Let the linker figure it out. */ ++ return 0; ++ } ++ ++ pr_debug("pcrel from %x + %x, symbol: %s (%x)\n", ++ fixP->fx_frag->fr_address, fixP->fx_where, ++ fixP->fx_addsy?S_GET_NAME(fixP->fx_addsy):"(null)", ++ fixP->fx_addsy?S_GET_VALUE(fixP->fx_addsy):0); ++ ++ return ((fixP->fx_frag->fr_address + fixP->fx_where) ++ & (~0UL << fixP->tc_fix_data.align)); ++} ++ ++valueT ++md_section_align (segT segment, valueT size) ++{ ++ int align = bfd_get_section_alignment (stdoutput, segment); ++ return ((size + (1 << align) - 1) & (-1 << align)); ++} ++ ++static int syntax_matches(const struct avr32_syntax *syntax, ++ char *str) ++{ ++ int i; ++ ++ pr_debug("syntax %d matches `%s'?\n", syntax->id, str); ++ ++ if (syntax->nr_operands < 0) ++ { ++ struct avr32_operand *op; ++ int optype; ++ ++ for (i = 0; i < (-syntax->nr_operands - 1); i++) ++ { ++ char *p; ++ char c; ++ ++ optype = syntax->operand[i]; ++ assert(optype < AVR32_NR_OPERANDS); ++ op = &avr32_operand_table[optype]; ++ ++ for (p = str; *p; p++) ++ if (*p == ',') ++ break; ++ ++ if (p == str) ++ return 0; ++ ++ c = *p; ++ *p = 0; ++ ++ if (!op->match(str)) ++ { ++ *p = c; ++ return 0; ++ } ++ ++ str = p; ++ *p = c; ++ if (c) ++ str++; ++ } ++ ++ optype = syntax->operand[i]; ++ assert(optype < AVR32_NR_OPERANDS); ++ op = &avr32_operand_table[optype]; ++ ++ if (!op->match(str)) ++ return 0; ++ return 1; ++ } ++ ++ for (i = 0; i < syntax->nr_operands; i++) ++ { ++ struct avr32_operand *op; ++ int optype = syntax->operand[i]; ++ char *p; ++ char c; ++ ++ assert(optype < AVR32_NR_OPERANDS); ++ op = &avr32_operand_table[optype]; ++ ++ for (p = str; *p; p++) ++ if (*p == ',') ++ break; ++ ++ if (p == str) ++ return 0; ++ ++ c = *p; ++ *p = 0; ++ ++ if (!op->match(str)) ++ { ++ *p = c; ++ return 0; ++ } ++ ++ str = p; ++ *p = c; ++ if (c) ++ str++; ++ } ++ ++ if (*str == '\0') ++ return 1; ++ ++ if ((*str == 'e' || *str == 'E') && !str[1]) ++ return 1; ++ ++ return 0; ++} ++ ++static int parse_operands(char *str) ++{ ++ int i; ++ ++ if (current_insn.syntax->nr_operands < 0) ++ { ++ int optype; ++ struct avr32_operand *op; ++ ++ for (i = 0; i < (-current_insn.syntax->nr_operands - 1); i++) ++ { ++ char *p; ++ char c; ++ ++ optype = current_insn.syntax->operand[i]; ++ op = &avr32_operand_table[optype]; ++ ++ for (p = str; *p; p++) ++ if (*p == ',') ++ break; ++ ++ assert(p != str); ++ ++ c = *p, *p = 0; ++ op->parse(op, str, i); ++ *p = c; ++ ++ str = p; ++ if (c) str++; ++ } ++ ++ /* give the rest of the line to the last operand */ ++ optype = current_insn.syntax->operand[i]; ++ op = &avr32_operand_table[optype]; ++ op->parse(op, str, i); ++ } ++ else ++ { ++ for (i = 0; i < current_insn.syntax->nr_operands; i++) ++ { ++ int optype = current_insn.syntax->operand[i]; ++ struct avr32_operand *op = &avr32_operand_table[optype]; ++ char *p; ++ char c; ++ ++ skip_whitespace(str); ++ ++ for (p = str; *p; p++) ++ if (*p == ',') ++ break; ++ ++ assert(p != str); ++ ++ c = *p, *p = 0; ++ op->parse(op, str, i); ++ *p = c; ++ ++ str = p; ++ if (c) str++; ++ } ++ ++ if (*str == 'E' || *str == 'e') ++ current_insn.force_extended = 1; ++ } ++ ++ return 0; ++} ++ ++static const char * ++finish_insn(const struct avr32_opcode *opc) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ unsigned int i; ++ int will_relax = 0; ++ char *buf; ++ ++ assert(current_insn.next_slot == opc->nr_fields); ++ ++ pr_debug("%s:%d: finish_insn: trying opcode %d\n", ++ frag_now->fr_file, frag_now->fr_line, opc->id); ++ ++ /* Go through the relaxation stage for all instructions that can ++ possibly take a symbolic immediate. The relax code will take ++ care of range checking and alignment. */ ++ if (opc->var_field != -1) ++ { ++ int substate, largest_substate; ++ symbolS *sym; ++ offsetT off; ++ ++ will_relax = 1; ++ substate = largest_substate = opc_initial_substate(opc); ++ ++ while (relax_more(largest_substate) != AVR32_RS_NONE) ++ largest_substate = relax_more(largest_substate); ++ ++ pr_debug("will relax. initial substate: %d (size %d), largest substate: %d (size %d)\n", ++ substate, avr32_rs_size(substate), ++ largest_substate, avr32_rs_size(largest_substate)); ++ ++ /* make sure we have enough room for the largest possible opcode */ ++ frag_grow(avr32_rs_size(largest_substate)); ++ buf = frag_more(opc->size); ++ ++ dwarf2_emit_insn(opc->size); ++ ++ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_NONE; ++ frag_now->tc_frag_data.pcrel = current_insn.pcrel; ++ frag_now->tc_frag_data.force_extended = current_insn.force_extended; ++ frag_now->tc_frag_data.relaxer = &avr32_default_relaxer; ++ ++ if (exp->X_op == O_hi) ++ { ++ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_HI; ++ exp->X_op = exp->X_md; ++ } ++ else if (exp->X_op == O_lo) ++ { ++ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_LO; ++ exp->X_op = exp->X_md; ++ } ++ else if (exp->X_op == O_got) ++ { ++ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_GOT; ++ exp->X_op = O_symbol; ++ } ++ ++#if 0 ++ if ((opc->reloc_type == BFD_RELOC_AVR32_SUB5) ++ && exp->X_op == O_subtract) ++ { ++ symbolS *tmp; ++ tmp = exp->X_add_symbol; ++ exp->X_add_symbol = exp->X_op_symbol; ++ exp->X_op_symbol = tmp; ++ } ++#endif ++ ++ frag_now->tc_frag_data.exp = current_insn.immediate; ++ ++ sym = exp->X_add_symbol; ++ off = exp->X_add_number; ++ if (exp->X_op != O_symbol) ++ { ++ sym = make_expr_symbol(exp); ++ off = 0; ++ } ++ ++ frag_var(rs_machine_dependent, ++ avr32_rs_size(largest_substate) - opc->size, ++ opc->size, ++ substate, sym, off, buf); ++ } ++ else ++ { ++ assert(avr32_rs_size(opc_initial_substate(opc)) == 0); ++ ++ /* Make sure we always have room for another whole word, as the ifield ++ inserters can only write words. */ ++ frag_grow(4); ++ buf = frag_more(opc->size); ++ dwarf2_emit_insn(opc->size); ++ } ++ ++ assert(!(opc->value & ~opc->mask)); ++ ++ pr_debug("inserting opcode: 0x%lx\n", opc->value); ++ bfd_putb32(opc->value, buf); ++ ++ for (i = 0; i < opc->nr_fields; i++) ++ { ++ const struct avr32_ifield *f = opc->fields[i]; ++ const struct avr32_ifield_data *fd = ¤t_insn.field_value[i]; ++ ++ pr_debug("inserting field: 0x%lx & 0x%lx\n", ++ fd->value >> fd->align_order, f->mask); ++ ++ f->insert(f, buf, fd->value >> fd->align_order); ++ } ++ ++ assert(will_relax || !current_insn.immediate.X_add_symbol); ++ return NULL; ++} ++ ++static const char * ++finish_alias(const struct avr32_alias *alias) ++{ ++ const struct avr32_opcode *opc; ++ struct { ++ unsigned long value; ++ unsigned long align; ++ } mapped_operand[AVR32_MAX_OPERANDS]; ++ unsigned int i; ++ ++ opc = alias->opc; ++ ++ /* Remap the operands from the alias to the real opcode */ ++ for (i = 0; i < opc->nr_fields; i++) ++ { ++ if (alias->operand_map[i].is_opindex) ++ { ++ struct avr32_ifield_data *fd; ++ fd = ¤t_insn.field_value[alias->operand_map[i].value]; ++ mapped_operand[i].value = fd->value; ++ mapped_operand[i].align = fd->align_order; ++ } ++ else ++ { ++ mapped_operand[i].value = alias->operand_map[i].value; ++ mapped_operand[i].align = 0; ++ } ++ } ++ ++ for (i = 0; i < opc->nr_fields; i++) ++ { ++ current_insn.field_value[i].value = mapped_operand[i].value; ++ if (opc->id == AVR32_OPC_COP) ++ current_insn.field_value[i].align_order = 0; ++ else ++ current_insn.field_value[i].align_order ++ = mapped_operand[i].align; ++ } ++ ++ current_insn.next_slot = opc->nr_fields; ++ ++ return finish_insn(opc); ++} ++ ++static const char * ++finish_lda(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ relax_substateT initial_subtype; ++ symbolS *sym; ++ offsetT off; ++ int initial_size, max_size; ++ char *buf; ++ ++ initial_size = LDA_INITIAL_SIZE; ++ ++ if (avr32_pic) ++ { ++ initial_subtype = LDA_SUBTYPE_SUB; ++ if (linkrelax) ++ max_size = 8; ++ else ++ max_size = 4; ++ } ++ else ++ { ++ initial_subtype = LDA_SUBTYPE_MOV1; ++ max_size = 4; ++ } ++ ++ frag_grow(max_size); ++ buf = frag_more(initial_size); ++ dwarf2_emit_insn(initial_size); ++ ++ if (exp->X_op == O_symbol) ++ { ++ sym = exp->X_add_symbol; ++ off = exp->X_add_number; ++ } ++ else ++ { ++ sym = make_expr_symbol(exp); ++ off = 0; ++ } ++ ++ frag_now->tc_frag_data.reloc_info = current_insn.field_value[0].value; ++ frag_now->tc_frag_data.relaxer = &avr32_lda_relaxer; ++ ++ if (!avr32_pic) ++ { ++ /* The relaxer will bump the refcount if necessary */ ++ frag_now->tc_frag_data.pool ++ = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); ++ } ++ ++ frag_var(rs_machine_dependent, max_size - initial_size, ++ initial_size, initial_subtype, sym, off, buf); ++ ++ return NULL; ++} ++ ++static const char * ++finish_call(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ symbolS *sym; ++ offsetT off; ++ int initial_size, max_size; ++ char *buf; ++ ++ initial_size = CALL_INITIAL_SIZE; ++ ++ if (avr32_pic) ++ { ++ if (linkrelax) ++ max_size = 10; ++ else ++ max_size = 4; ++ } ++ else ++ max_size = 4; ++ ++ frag_grow(max_size); ++ buf = frag_more(initial_size); ++ dwarf2_emit_insn(initial_size); ++ ++ frag_now->tc_frag_data.relaxer = &avr32_call_relaxer; ++ ++ if (exp->X_op == O_symbol) ++ { ++ sym = exp->X_add_symbol; ++ off = exp->X_add_number; ++ } ++ else ++ { ++ sym = make_expr_symbol(exp); ++ off = 0; ++ } ++ ++ if (!avr32_pic) ++ { ++ /* The relaxer will bump the refcount if necessary */ ++ frag_now->tc_frag_data.pool ++ = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); ++ } ++ ++ frag_var(rs_machine_dependent, max_size - initial_size, ++ initial_size, CALL_SUBTYPE_RCALL1, sym, off, buf); ++ ++ return NULL; ++} ++ ++void ++md_begin (void) ++{ ++ unsigned long flags = 0; ++ int i; ++ ++ avr32_mnemonic_htab = hash_new(); ++ ++ if (!avr32_mnemonic_htab) ++ as_fatal(_("virtual memory exhausted")); ++ ++ for (i = 0; i < AVR32_NR_MNEMONICS; i++) ++ { ++ hash_insert(avr32_mnemonic_htab, avr32_mnemonic_table[i].name, ++ (void *)&avr32_mnemonic_table[i]); ++ } ++ ++ if (linkrelax) ++ flags |= EF_AVR32_LINKRELAX; ++ if (avr32_pic) ++ flags |= EF_AVR32_PIC; ++ ++ bfd_set_private_flags(stdoutput, flags); ++ ++#ifdef OPC_CONSISTENCY_CHECK ++ if (sizeof(avr32_operand_table)/sizeof(avr32_operand_table[0]) ++ < AVR32_NR_OPERANDS) ++ as_fatal(_("operand table is incomplete")); ++ ++ for (i = 0; i < AVR32_NR_OPERANDS; i++) ++ if (avr32_operand_table[i].id != i) ++ as_fatal(_("operand table inconsistency found at index %d\n"), i); ++ pr_debug("%d operands verified\n", AVR32_NR_OPERANDS); ++ ++ for (i = 0; i < AVR32_NR_IFIELDS; i++) ++ if (avr32_ifield_table[i].id != i) ++ as_fatal(_("ifield table inconsistency found at index %d\n"), i); ++ pr_debug("%d instruction fields verified\n", AVR32_NR_IFIELDS); ++ ++ for (i = 0; i < AVR32_NR_OPCODES; i++) ++ { ++ if (avr32_opc_table[i].id != i) ++ as_fatal(_("opcode table inconsistency found at index %d\n"), i); ++ if ((avr32_opc_table[i].var_field == -1 ++ && avr32_relax_table[i].length != 0) ++ || (avr32_opc_table[i].var_field != -1 ++ && avr32_relax_table[i].length == 0)) ++ as_fatal(_("relax table inconsistency found at index %d\n"), i); ++ } ++ pr_debug("%d opcodes verified\n", AVR32_NR_OPCODES); ++ ++ for (i = 0; i < AVR32_NR_SYNTAX; i++) ++ if (avr32_syntax_table[i].id != i) ++ as_fatal(_("syntax table inconsistency found at index %d\n"), i); ++ pr_debug("%d syntax variants verified\n", AVR32_NR_SYNTAX); ++ ++ for (i = 0; i < AVR32_NR_ALIAS; i++) ++ if (avr32_alias_table[i].id != i) ++ as_fatal(_("alias table inconsistency found at index %d\n"), i); ++ pr_debug("%d aliases verified\n", AVR32_NR_ALIAS); ++ ++ for (i = 0; i < AVR32_NR_MNEMONICS; i++) ++ if (avr32_mnemonic_table[i].id != i) ++ as_fatal(_("mnemonic table inconsistency found at index %d\n"), i); ++ pr_debug("%d mnemonics verified\n", AVR32_NR_MNEMONICS); ++#endif ++} ++ ++void ++md_assemble (char *str) ++{ ++ struct avr32_mnemonic *mnemonic; ++ char *p, c; ++ ++ memset(¤t_insn, 0, sizeof(current_insn)); ++ current_insn.immediate.X_op = O_constant; ++ ++ skip_whitespace(str); ++ for (p = str; *p; p++) ++ if (*p == ' ') ++ break; ++ c = *p; ++ *p = 0; ++ ++ mnemonic = hash_find(avr32_mnemonic_htab, str); ++ *p = c; ++ if (c) p++; ++ ++ if (mnemonic) ++ { ++ const struct avr32_syntax *syntax; ++ ++ for (syntax = mnemonic->syntax; syntax; syntax = syntax->next) ++ { ++ const char *errmsg = NULL; ++ ++ if (syntax_matches(syntax, p)) ++ { ++ if (!(syntax->isa_flags & avr32_arch->isa_flags)) ++ { ++ as_bad(_("Selected architecture `%s' does not support `%s'"), ++ avr32_arch->name, str); ++ return; ++ } ++ ++ current_insn.syntax = syntax; ++ parse_operands(p); ++ ++ switch (syntax->type) ++ { ++ case AVR32_PARSER_NORMAL: ++ errmsg = finish_insn(syntax->u.opc); ++ break; ++ case AVR32_PARSER_ALIAS: ++ errmsg = finish_alias(syntax->u.alias); ++ break; ++ case AVR32_PARSER_LDA: ++ errmsg = finish_lda(syntax); ++ break; ++ case AVR32_PARSER_CALL: ++ errmsg = finish_call(syntax); ++ break; ++ default: ++ BAD_CASE(syntax->type); ++ break; ++ } ++ ++ if (errmsg) ++ as_bad("%s in `%s'", errmsg, str); ++ ++ return; ++ } ++ } ++ ++ as_bad(_("unrecognized form of instruction: `%s'"), str); ++ } ++ else ++ as_bad(_("unrecognized instruction `%s'"), str); ++} ++ ++void avr32_cleanup(void) ++{ ++ struct cpool *pool; ++ ++ /* Emit any constant pools that haven't been explicitly flushed with ++ a .cpool directive. */ ++ for (pool = cpool_list; pool; pool = pool->next) ++ { ++ subseg_set(pool->section, pool->sub_section); ++ s_cpool(0); ++ } ++} ++ ++/* Handle any PIC-related operands in data allocation pseudo-ops */ ++void ++avr32_cons_fix_new (fragS *frag, int off, int size, expressionS *exp) ++{ ++ bfd_reloc_code_real_type r_type = BFD_RELOC_UNUSED; ++ int pcrel = 0; ++ ++ pr_debug("%s:%u: cons_fix_new, add_sym: %s, op_sym: %s, op: %d, add_num: %d\n", ++ frag->fr_file, frag->fr_line, ++ exp->X_add_symbol?S_GET_NAME(exp->X_add_symbol):"(none)", ++ exp->X_op_symbol?S_GET_NAME(exp->X_op_symbol):"(none)", ++ exp->X_op, exp->X_add_number); ++ ++ if (exp->X_op == O_subtract && exp->X_op_symbol) ++ { ++ if (exp->X_op_symbol == GOT_symbol) ++ { ++ if (size != 4) ++ goto bad_size; ++ r_type = BFD_RELOC_AVR32_GOTPC; ++ exp->X_op = O_symbol; ++ exp->X_op_symbol = NULL; ++ } ++ } ++ else if (exp->X_op == O_got) ++ { ++ switch (size) ++ { ++ case 1: ++ r_type = BFD_RELOC_AVR32_GOT8; ++ break; ++ case 2: ++ r_type = BFD_RELOC_AVR32_GOT16; ++ break; ++ case 4: ++ r_type = BFD_RELOC_AVR32_GOT32; ++ break; ++ default: ++ goto bad_size; ++ } ++ ++ exp->X_op = O_symbol; ++ } ++ ++ if (r_type == BFD_RELOC_UNUSED) ++ switch (size) ++ { ++ case 1: ++ r_type = BFD_RELOC_8; ++ break; ++ case 2: ++ r_type = BFD_RELOC_16; ++ break; ++ case 4: ++ r_type = BFD_RELOC_32; ++ break; ++ default: ++ goto bad_size; ++ } ++ else if (size != 4) ++ { ++ bad_size: ++ as_bad(_("unsupported BFD relocation size %u"), size); ++ r_type = BFD_RELOC_UNUSED; ++ } ++ ++ fix_new_exp (frag, off, size, exp, pcrel, r_type); ++} ++ ++static void ++avr32_frob_section(bfd *abfd ATTRIBUTE_UNUSED, segT sec, ++ void *ignore ATTRIBUTE_UNUSED) ++{ ++ segment_info_type *seginfo; ++ fixS *fix; ++ ++ seginfo = seg_info(sec); ++ if (!seginfo) ++ return; ++ ++ for (fix = seginfo->fix_root; fix; fix = fix->fx_next) ++ { ++ if (fix->fx_done) ++ continue; ++ ++ if (fix->fx_r_type == BFD_RELOC_AVR32_SUB5 ++ && fix->fx_addsy && fix->fx_subsy) ++ { ++ if (S_GET_SEGMENT(fix->fx_addsy) != S_GET_SEGMENT(fix->fx_subsy) ++ || linkrelax) ++ { ++ symbolS *tmp; ++#ifdef DEBUG ++ fprintf(stderr, "Swapping symbols in fixup:\n"); ++ print_fixup(fix); ++#endif ++ tmp = fix->fx_addsy; ++ fix->fx_addsy = fix->fx_subsy; ++ fix->fx_subsy = tmp; ++ fix->fx_offset = -fix->fx_offset; ++ } ++ } ++ } ++} ++ ++/* We need to look for SUB5 instructions with expressions that will be ++ made PC-relative and switch fx_addsy with fx_subsy. This has to be ++ done before adjustment or the wrong symbol might be adjusted. ++ ++ This applies to fixups that are a result of expressions like -(sym ++ - .) and that will make it all the way to md_apply_fix3(). LDA ++ does the right thing in convert_frag, so we must not convert ++ those. */ ++void ++avr32_frob_file(void) ++{ ++ /* if (1 || !linkrelax) ++ return; */ ++ ++ bfd_map_over_sections(stdoutput, avr32_frob_section, NULL); ++} ++ ++static bfd_boolean ++convert_to_diff_reloc(fixS *fixP) ++{ ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_32: ++ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; ++ break; ++ case BFD_RELOC_16: ++ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF16; ++ break; ++ case BFD_RELOC_8: ++ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF8; ++ break; ++ default: ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++/* Simplify a fixup. If possible, the fixup is reduced to a single ++ constant which is written to the output file. Otherwise, a ++ relocation is generated so that the linker can take care of the ++ rest. ++ ++ ELF relocations have certain constraints: They can only take a ++ single symbol and a single addend. This means that for difference ++ expressions, we _must_ get rid of the fx_subsy symbol somehow. ++ ++ The difference between two labels in the same section can be ++ calculated directly unless 'linkrelax' is set, or a relocation is ++ forced. If so, we must emit a R_AVR32_DIFFxx relocation. If there ++ are addends involved at this point, we must be especially careful ++ as the relocation must point exactly to the symbol being ++ subtracted. ++ ++ When subtracting a symbol defined in the same section as the fixup, ++ we might be able to convert it to a PC-relative expression, unless ++ linkrelax is set. If this is the case, there's no way we can make ++ sure that the difference between the fixup and fx_subsy stays ++ constant. So for now, we're just going to disallow that. ++ */ ++void ++avr32_process_fixup(fixS *fixP, segT this_segment) ++{ ++ segT add_symbol_segment = absolute_section; ++ segT sub_symbol_segment = absolute_section; ++ symbolS *fx_addsy, *fx_subsy; ++ offsetT value = 0, fx_offset; ++ bfd_boolean apply = FALSE; ++ ++ assert(this_segment != absolute_section); ++ ++ if (fixP->fx_r_type >= BFD_RELOC_UNUSED) ++ { ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("Bad relocation type %d\n"), fixP->fx_r_type); ++ return; ++ } ++ ++ /* BFD_RELOC_AVR32_SUB5 fixups have been swapped by avr32_frob_section() */ ++ fx_addsy = fixP->fx_addsy; ++ fx_subsy = fixP->fx_subsy; ++ fx_offset = fixP->fx_offset; ++ ++ if (fx_addsy) ++ add_symbol_segment = S_GET_SEGMENT(fx_addsy); ++ ++ if (fx_subsy) ++ { ++ resolve_symbol_value(fx_subsy); ++ sub_symbol_segment = S_GET_SEGMENT(fx_subsy); ++ ++ if (sub_symbol_segment == this_segment ++ && (!linkrelax ++ || S_GET_VALUE(fx_subsy) == (fixP->fx_frag->fr_address ++ + fixP->fx_where))) ++ { ++ fixP->fx_pcrel = TRUE; ++ fx_offset += (fixP->fx_frag->fr_address + fixP->fx_where ++ - S_GET_VALUE(fx_subsy)); ++ fx_subsy = NULL; ++ } ++ else if (sub_symbol_segment == absolute_section) ++ { ++ /* The symbol is really a constant. */ ++ fx_offset -= S_GET_VALUE(fx_subsy); ++ fx_subsy = NULL; ++ } ++ else if (SEG_NORMAL(add_symbol_segment) ++ && sub_symbol_segment == add_symbol_segment ++ && (!linkrelax || convert_to_diff_reloc(fixP))) ++ { ++ /* Difference between two labels in the same section. */ ++ if (linkrelax) ++ { ++ /* convert_to_diff() has ensured that the reloc type is ++ either DIFF32, DIFF16 or DIFF8. */ ++ value = (S_GET_VALUE(fx_addsy) + fixP->fx_offset ++ - S_GET_VALUE(fx_subsy)); ++ ++ /* Try to convert it to a section symbol if possible */ ++ if (!S_FORCE_RELOC(fx_addsy, 1) ++ && !(sub_symbol_segment->flags & SEC_THREAD_LOCAL)) ++ { ++ fx_offset = S_GET_VALUE(fx_subsy); ++ fx_addsy = section_symbol(sub_symbol_segment); ++ } ++ else ++ { ++ fx_addsy = fx_subsy; ++ fx_offset = 0; ++ } ++ ++ fx_subsy = NULL; ++ apply = TRUE; ++ } ++ else ++ { ++ fx_offset += S_GET_VALUE(fx_addsy); ++ fx_offset -= S_GET_VALUE(fx_subsy); ++ fx_addsy = NULL; ++ fx_subsy = NULL; ++ } ++ } ++ else ++ { ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("can't resolve `%s' {%s section} - `%s' {%s section}"), ++ fx_addsy ? S_GET_NAME (fx_addsy) : "0", ++ segment_name (add_symbol_segment), ++ S_GET_NAME (fx_subsy), ++ segment_name (sub_symbol_segment)); ++ return; ++ } ++ } ++ ++ if (fx_addsy && !TC_FORCE_RELOCATION(fixP)) ++ { ++ if (add_symbol_segment == this_segment ++ && fixP->fx_pcrel) ++ { ++ value += S_GET_VALUE(fx_addsy); ++ value -= md_pcrel_from_section(fixP, this_segment); ++ fx_addsy = NULL; ++ fixP->fx_pcrel = FALSE; ++ } ++ else if (add_symbol_segment == absolute_section) ++ { ++ fx_offset += S_GET_VALUE(fixP->fx_addsy); ++ fx_addsy = NULL; ++ } ++ } ++ ++ if (!fx_addsy) ++ fixP->fx_done = TRUE; ++ ++ if (fixP->fx_pcrel) ++ { ++ if (fx_addsy != NULL ++ && S_IS_DEFINED(fx_addsy) ++ && S_GET_SEGMENT(fx_addsy) != this_segment) ++ value += md_pcrel_from_section(fixP, this_segment); ++ ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_32: ++ fixP->fx_r_type = BFD_RELOC_32_PCREL; ++ break; ++ case BFD_RELOC_16: ++ fixP->fx_r_type = BFD_RELOC_16_PCREL; ++ break; ++ case BFD_RELOC_8: ++ fixP->fx_r_type = BFD_RELOC_8_PCREL; ++ break; ++ case BFD_RELOC_AVR32_SUB5: ++ fixP->fx_r_type = BFD_RELOC_AVR32_16N_PCREL; ++ break; ++ case BFD_RELOC_AVR32_16S: ++ fixP->fx_r_type = BFD_RELOC_AVR32_16B_PCREL; ++ break; ++ case BFD_RELOC_AVR32_14UW: ++ fixP->fx_r_type = BFD_RELOC_AVR32_14UW_PCREL; ++ break; ++ case BFD_RELOC_AVR32_10UW: ++ fixP->fx_r_type = BFD_RELOC_AVR32_10UW_PCREL; ++ break; ++ default: ++ /* Should have been taken care of already */ ++ break; ++ } ++ } ++ ++ if (fixP->fx_done || apply) ++ { ++ const struct avr32_ifield *ifield; ++ char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; ++ ++ if (fixP->fx_done) ++ value += fx_offset; ++ ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_32: ++ case BFD_RELOC_16: ++ case BFD_RELOC_8: ++ case BFD_RELOC_AVR32_DIFF32: ++ case BFD_RELOC_AVR32_DIFF16: ++ case BFD_RELOC_AVR32_DIFF8: ++ md_number_to_chars(buf, value, fixP->fx_size); ++ break; ++ case BFD_RELOC_HI16: ++ value >>= 16; ++ case BFD_RELOC_LO16: ++ value &= 0xffff; ++ md_number_to_chars(buf + 2, value, 2); ++ break; ++ case BFD_RELOC_AVR32_16N_PCREL: ++ value = -value; ++ /* fall through */ ++ case BFD_RELOC_AVR32_22H_PCREL: ++ case BFD_RELOC_AVR32_18W_PCREL: ++ case BFD_RELOC_AVR32_16B_PCREL: ++ case BFD_RELOC_AVR32_11H_PCREL: ++ case BFD_RELOC_AVR32_9H_PCREL: ++ case BFD_RELOC_AVR32_9UW_PCREL: ++ case BFD_RELOC_AVR32_3U: ++ case BFD_RELOC_AVR32_4UH: ++ case BFD_RELOC_AVR32_6UW: ++ case BFD_RELOC_AVR32_6S: ++ case BFD_RELOC_AVR32_7UW: ++ case BFD_RELOC_AVR32_8S_EXT: ++ case BFD_RELOC_AVR32_8S: ++ case BFD_RELOC_AVR32_10UW: ++ case BFD_RELOC_AVR32_10SW: ++ case BFD_RELOC_AVR32_STHH_W: ++ case BFD_RELOC_AVR32_14UW: ++ case BFD_RELOC_AVR32_16S: ++ case BFD_RELOC_AVR32_16U: ++ case BFD_RELOC_AVR32_21S: ++ case BFD_RELOC_AVR32_SUB5: ++ case BFD_RELOC_AVR32_CPCALL: ++ case BFD_RELOC_AVR32_16_CP: ++ case BFD_RELOC_AVR32_9W_CP: ++ ifield = fixP->tc_fix_data.ifield; ++ pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", ++ fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, ++ fixP->tc_fix_data.align); ++ if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("operand out of range (%ld not between %ld and %ld)"), ++ value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); ++ if (value & ((1 << fixP->tc_fix_data.align) - 1)) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("misaligned operand (required alignment: %d)"), ++ 1 << fixP->tc_fix_data.align); ++ ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); ++ break; ++ case BFD_RELOC_AVR32_ALIGN: ++ /* Nothing to do */ ++ fixP->fx_done = FALSE; ++ break; ++ default: ++ as_fatal("reloc type %s not handled\n", ++ bfd_get_reloc_code_name(fixP->fx_r_type)); ++ } ++ } ++ ++ fixP->fx_addsy = fx_addsy; ++ fixP->fx_subsy = fx_subsy; ++ fixP->fx_offset = fx_offset; ++ ++ if (!fixP->fx_done) ++ { ++ if (!fixP->fx_addsy) ++ fixP->fx_addsy = abs_section_sym; ++ ++ symbol_mark_used_in_reloc(fixP->fx_addsy); ++ if (fixP->fx_subsy) ++ abort(); ++ } ++} ++ ++#if 0 ++void ++md_apply_fix3 (fixS *fixP, valueT *valP, segT seg) ++{ ++ const struct avr32_ifield *ifield; ++ offsetT value = *valP; ++ char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; ++ bfd_boolean apply; ++ ++ pr_debug("%s:%u: apply_fix3: r_type=%d value=%lx offset=%lx\n", ++ fixP->fx_file, fixP->fx_line, fixP->fx_r_type, *valP, ++ fixP->fx_offset); ++ ++ if (fixP->fx_r_type >= BFD_RELOC_UNUSED) ++ { ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("Bad relocation type %d\n"), fixP->fx_r_type); ++ return; ++ } ++ ++ if (!fixP->fx_addsy && !fixP->fx_subsy) ++ fixP->fx_done = 1; ++ ++ if (fixP->fx_pcrel) ++ { ++ if (fixP->fx_addsy != NULL ++ && S_IS_DEFINED(fixP->fx_addsy) ++ && S_GET_SEGMENT(fixP->fx_addsy) != seg) ++ value += md_pcrel_from_section(fixP, seg); ++ ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_32: ++ fixP->fx_r_type = BFD_RELOC_32_PCREL; ++ break; ++ case BFD_RELOC_16: ++ case BFD_RELOC_8: ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _("8- and 16-bit PC-relative relocations not supported")); ++ break; ++ case BFD_RELOC_AVR32_SUB5: ++ fixP->fx_r_type = BFD_RELOC_AVR32_PCREL_SUB5; ++ break; ++ case BFD_RELOC_AVR32_16S: ++ fixP->fx_r_type = BFD_RELOC_AVR32_16_PCREL; ++ break; ++ default: ++ /* Should have been taken care of already */ ++ break; ++ } ++ } ++ ++ if (fixP->fx_r_type == BFD_RELOC_32 ++ && fixP->fx_subsy) ++ { ++ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; ++ ++ /* Offsets are only allowed if it's a result of adjusting a ++ local symbol into a section-relative offset. ++ tc_fix_adjustable() should prevent any adjustment if there ++ was an offset involved before. */ ++ if (fixP->fx_offset && !symbol_section_p(fixP->fx_addsy)) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("cannot represent symbol difference with an offset")); ++ ++ value = (S_GET_VALUE(fixP->fx_addsy) + fixP->fx_offset ++ - S_GET_VALUE(fixP->fx_subsy)); ++ ++ /* The difference before any relaxing takes place is written ++ out, and the DIFF32 reloc identifies the address of the first ++ symbol (i.e. the on that's subtracted.) */ ++ *valP = value; ++ fixP->fx_offset -= value; ++ fixP->fx_subsy = NULL; ++ ++ md_number_to_chars(buf, value, fixP->fx_size); ++ } ++ ++ if (fixP->fx_done) ++ { ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_8: ++ case BFD_RELOC_16: ++ case BFD_RELOC_32: ++ md_number_to_chars(buf, value, fixP->fx_size); ++ break; ++ case BFD_RELOC_HI16: ++ value >>= 16; ++ case BFD_RELOC_LO16: ++ value &= 0xffff; ++ *valP = value; ++ md_number_to_chars(buf + 2, value, 2); ++ break; ++ case BFD_RELOC_AVR32_PCREL_SUB5: ++ value = -value; ++ /* fall through */ ++ case BFD_RELOC_AVR32_9_PCREL: ++ case BFD_RELOC_AVR32_11_PCREL: ++ case BFD_RELOC_AVR32_16_PCREL: ++ case BFD_RELOC_AVR32_18_PCREL: ++ case BFD_RELOC_AVR32_22_PCREL: ++ case BFD_RELOC_AVR32_3U: ++ case BFD_RELOC_AVR32_4UH: ++ case BFD_RELOC_AVR32_6UW: ++ case BFD_RELOC_AVR32_6S: ++ case BFD_RELOC_AVR32_7UW: ++ case BFD_RELOC_AVR32_8S: ++ case BFD_RELOC_AVR32_10UW: ++ case BFD_RELOC_AVR32_10SW: ++ case BFD_RELOC_AVR32_14UW: ++ case BFD_RELOC_AVR32_16S: ++ case BFD_RELOC_AVR32_16U: ++ case BFD_RELOC_AVR32_21S: ++ case BFD_RELOC_AVR32_BRC1: ++ case BFD_RELOC_AVR32_SUB5: ++ case BFD_RELOC_AVR32_CPCALL: ++ case BFD_RELOC_AVR32_16_CP: ++ case BFD_RELOC_AVR32_9_CP: ++ ifield = fixP->tc_fix_data.ifield; ++ pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", ++ fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, ++ fixP->tc_fix_data.align); ++ if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("operand out of range (%ld not between %ld and %ld)"), ++ value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); ++ if (value & ((1 << fixP->tc_fix_data.align) - 1)) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("misaligned operand (required alignment: %d)"), ++ 1 << fixP->tc_fix_data.align); ++ ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); ++ break; ++ case BFD_RELOC_AVR32_ALIGN: ++ /* Nothing to do */ ++ fixP->fx_done = FALSE; ++ break; ++ default: ++ as_fatal("reloc type %s not handled\n", ++ bfd_get_reloc_code_name(fixP->fx_r_type)); ++ } ++ } ++} ++#endif ++ ++arelent * ++tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, ++ fixS *fixp) ++{ ++ arelent *reloc; ++ bfd_reloc_code_real_type code; ++ ++ reloc = xmalloc (sizeof (arelent)); ++ ++ reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); ++ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); ++ reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; ++ reloc->addend = fixp->fx_offset; ++ code = fixp->fx_r_type; ++ ++ reloc->howto = bfd_reloc_type_lookup (stdoutput, code); ++ ++ if (reloc->howto == NULL) ++ { ++ as_bad_where (fixp->fx_file, fixp->fx_line, ++ _("cannot represent relocation %s in this object file format"), ++ bfd_get_reloc_code_name (code)); ++ return NULL; ++ } ++ ++ return reloc; ++} ++ ++bfd_boolean ++avr32_force_reloc(fixS *fixP) ++{ ++ if (linkrelax && fixP->fx_addsy ++ && !(S_GET_SEGMENT(fixP->fx_addsy)->flags & SEC_DEBUGGING) ++ && S_GET_SEGMENT(fixP->fx_addsy) != absolute_section) ++ { ++ pr_debug(stderr, "force reloc: addsy=%p, r_type=%d, sec=%s\n", ++ fixP->fx_addsy, fixP->fx_r_type, S_GET_SEGMENT(fixP->fx_addsy)->name); ++ return 1; ++ } ++ ++ return generic_force_reloc(fixP); ++} ++ ++bfd_boolean ++avr32_fix_adjustable(fixS *fixP) ++{ ++ switch (fixP->fx_r_type) ++ { ++ /* GOT relocations can't have addends since BFD treats all ++ references to a given symbol the same. This means that we ++ must avoid section-relative references to local symbols when ++ dealing with these kinds of relocs */ ++ case BFD_RELOC_AVR32_GOT32: ++ case BFD_RELOC_AVR32_GOT16: ++ case BFD_RELOC_AVR32_GOT8: ++ case BFD_RELOC_AVR32_GOT21S: ++ case BFD_RELOC_AVR32_GOT18SW: ++ case BFD_RELOC_AVR32_GOT16S: ++ case BFD_RELOC_AVR32_LDA_GOT: ++ case BFD_RELOC_AVR32_GOTCALL: ++ pr_debug("fix not adjustable\n"); ++ return 0; ++ ++ default: ++ break; ++ } ++ ++ return 1; ++} ++ ++/* When we want the linker to be able to relax the code, we need to ++ output a reloc for every .align directive requesting an alignment ++ to a four byte boundary or larger. If we don't do this, the linker ++ can't guarantee that the alignment is actually maintained in the ++ linker output. ++ ++ TODO: Might as well insert proper NOPs while we're at it... */ ++void ++avr32_handle_align(fragS *frag) ++{ ++ if (linkrelax ++ && frag->fr_type == rs_align_code ++ && frag->fr_address + frag->fr_fix > 0 ++ && frag->fr_offset > 0) ++ { ++ /* The alignment order (fr_offset) is stored in the addend. */ ++ fix_new(frag, frag->fr_fix, 2, &abs_symbol, frag->fr_offset, ++ FALSE, BFD_RELOC_AVR32_ALIGN); ++ } ++} ++ ++/* Relax_align. Advance location counter to next address that has 'alignment' ++ lowest order bits all 0s, return size of adjustment made. */ ++relax_addressT ++avr32_relax_align(segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP, ++ relax_addressT address) ++{ ++ relax_addressT mask; ++ relax_addressT new_address; ++ int alignment; ++ ++ alignment = fragP->fr_offset; ++ mask = ~((~0) << alignment); ++ new_address = (address + mask) & (~mask); ++ ++ return new_address - address; ++} ++ ++/* Turn a string in input_line_pointer into a floating point constant ++ of type type, and store the appropriate bytes in *litP. The number ++ of LITTLENUMS emitted is stored in *sizeP . An error message is ++ returned, or NULL on OK. */ ++ ++/* Equal to MAX_PRECISION in atof-ieee.c */ ++#define MAX_LITTLENUMS 6 ++ ++char * ++md_atof (type, litP, sizeP) ++char type; ++char * litP; ++int * sizeP; ++{ ++ int i; ++ int prec; ++ LITTLENUM_TYPE words [MAX_LITTLENUMS]; ++ char * t; ++ ++ switch (type) ++ { ++ case 'f': ++ case 'F': ++ case 's': ++ case 'S': ++ prec = 2; ++ break; ++ ++ case 'd': ++ case 'D': ++ case 'r': ++ case 'R': ++ prec = 4; ++ break; ++ ++ /* FIXME: Some targets allow other format chars for bigger sizes here. */ ++ ++ default: ++ * sizeP = 0; ++ return _("Bad call to md_atof()"); ++ } ++ ++ t = atof_ieee (input_line_pointer, type, words); ++ if (t) ++ input_line_pointer = t; ++ * sizeP = prec * sizeof (LITTLENUM_TYPE); ++ ++ for (i = 0; i < prec; i++) ++ { ++ md_number_to_chars (litP, (valueT) words[i], ++ sizeof (LITTLENUM_TYPE)); ++ litP += sizeof (LITTLENUM_TYPE); ++ } ++ ++ return 0; ++} ++ ++static char *avr32_end_of_match(char *cont, char *what) ++{ ++ int len = strlen (what); ++ ++ if (! is_part_of_name (cont[len]) ++ && strncasecmp (cont, what, len) == 0) ++ return cont + len; ++ ++ return NULL; ++} ++ ++int ++avr32_parse_name (char const *name, expressionS *exp, char *nextchar) ++{ ++ char *next = input_line_pointer; ++ char *next_end; ++ ++ pr_debug("parse_name: %s, nextchar=%c (%02x)\n", name, *nextchar, *nextchar); ++ ++ if (*nextchar == '(') ++ { ++ if (strcasecmp(name, "hi") == 0) ++ { ++ *next = *nextchar; ++ ++ expression(exp); ++ ++ if (exp->X_op == O_constant) ++ { ++ pr_debug(" -> constant hi(0x%08lx) -> 0x%04lx\n", ++ exp->X_add_number, exp->X_add_number >> 16); ++ exp->X_add_number = (exp->X_add_number >> 16) & 0xffff; ++ } ++ else ++ { ++ exp->X_md = exp->X_op; ++ exp->X_op = O_hi; ++ } ++ ++ return 1; ++ } ++ else if (strcasecmp(name, "lo") == 0) ++ { ++ *next = *nextchar; ++ ++ expression(exp); ++ ++ if (exp->X_op == O_constant) ++ exp->X_add_number &= 0xffff; ++ else ++ { ++ exp->X_md = exp->X_op; ++ exp->X_op = O_lo; ++ } ++ ++ return 1; ++ } ++ } ++ else if (*nextchar == '@') ++ { ++ exp->X_md = exp->X_op; ++ ++ if ((next_end = avr32_end_of_match (next + 1, "got"))) ++ exp->X_op = O_got; ++ else if ((next_end = avr32_end_of_match (next + 1, "tlsgd"))) ++ exp->X_op = O_tlsgd; ++ /* Add more as needed */ ++ else ++ { ++ char c; ++ input_line_pointer++; ++ c = get_symbol_end(); ++ as_bad (_("unknown relocation override `%s'"), next + 1); ++ *input_line_pointer = c; ++ input_line_pointer = next; ++ return 0; ++ } ++ ++ exp->X_op_symbol = NULL; ++ exp->X_add_symbol = symbol_find_or_make (name); ++ exp->X_add_number = 0; ++ ++ *input_line_pointer = *nextchar; ++ input_line_pointer = next_end; ++ *nextchar = *input_line_pointer; ++ *input_line_pointer = '\0'; ++ return 1; ++ } ++ else if (strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0) ++ { ++ if (!GOT_symbol) ++ GOT_symbol = symbol_find_or_make(name); ++ ++ exp->X_add_symbol = GOT_symbol; ++ exp->X_op = O_symbol; ++ exp->X_add_number = 0; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static void ++s_rseg (int value ATTRIBUTE_UNUSED) ++{ ++ /* Syntax: RSEG segment_name [:type] [NOROOT|ROOT] [(align)] ++ * Defaults: ++ * - type: undocumented ("typically CODE or DATA") ++ * - ROOT ++ * - align: 1 for code, 0 for others ++ * ++ * TODO: NOROOT is ignored. If gas supports discardable segments, it should ++ * be implemented. ++ */ ++ char *name, *end; ++ int length, type, attr; ++ int align = 0; ++ ++ SKIP_WHITESPACE(); ++ ++ end = input_line_pointer; ++ while (0 == strchr ("\n\t;:( ", *end)) ++ end++; ++ if (end == input_line_pointer) ++ { ++ as_warn (_("missing name")); ++ ignore_rest_of_line(); ++ return; ++ } ++ ++ name = xmalloc (end - input_line_pointer + 1); ++ memcpy (name, input_line_pointer, end - input_line_pointer); ++ name[end - input_line_pointer] = '\0'; ++ input_line_pointer = end; ++ ++ SKIP_WHITESPACE(); ++ ++ type = SHT_NULL; ++ attr = 0; ++ ++ if (*input_line_pointer == ':') ++ { ++ /* Skip the colon */ ++ ++input_line_pointer; ++ SKIP_WHITESPACE(); ++ ++ /* Possible options at this point: ++ * - flag (ROOT or NOROOT) ++ * - a segment type ++ */ ++ end = input_line_pointer; ++ while (0 == strchr ("\n\t;:( ", *end)) ++ end++; ++ length = end - input_line_pointer; ++ if (((length == 4) && (0 == strncasecmp( input_line_pointer, "ROOT", 4))) || ++ ((length == 6) && (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) ++ { ++ /* Ignore ROOT/NOROOT */ ++ input_line_pointer = end; ++ } ++ else ++ { ++ /* Must be a segment type */ ++ switch (*input_line_pointer) ++ { ++ case 'C': ++ case 'c': ++ if ((length == 4) && ++ (0 == strncasecmp (input_line_pointer, "CODE", 4))) ++ { ++ attr |= SHF_ALLOC | SHF_EXECINSTR; ++ type = SHT_PROGBITS; ++ align = 1; ++ break; ++ } ++ if ((length == 5) && ++ (0 == strncasecmp (input_line_pointer, "CONST", 5))) ++ { ++ attr |= SHF_ALLOC; ++ type = SHT_PROGBITS; ++ break; ++ } ++ goto de_fault; ++ ++ case 'D': ++ case 'd': ++ if ((length == 4) && ++ (0 == strncasecmp (input_line_pointer, "DATA", 4))) ++ { ++ attr |= SHF_ALLOC | SHF_WRITE; ++ type = SHT_PROGBITS; ++ break; ++ } ++ goto de_fault; ++ ++ /* TODO: Add FAR*, HUGE*, IDATA and NEAR* if necessary */ ++ ++ case 'U': ++ case 'u': ++ if ((length == 7) && ++ (0 == strncasecmp (input_line_pointer, "UNTYPED", 7))) ++ break; ++ goto de_fault; ++ ++ /* TODO: Add XDATA and ZPAGE if necessary */ ++ ++ de_fault: ++ default: ++ as_warn (_("unrecognized segment type")); ++ } ++ ++ input_line_pointer = end; ++ SKIP_WHITESPACE(); ++ ++ if (*input_line_pointer == ':') ++ { ++ /* ROOT/NOROOT */ ++ ++input_line_pointer; ++ SKIP_WHITESPACE(); ++ ++ end = input_line_pointer; ++ while (0 == strchr ("\n\t;:( ", *end)) ++ end++; ++ length = end - input_line_pointer; ++ if (! ((length == 4) && ++ (0 == strncasecmp( input_line_pointer, "ROOT", 4))) && ++ ! ((length == 6) && ++ (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) ++ { ++ as_warn (_("unrecognized segment flag")); ++ } ++ ++ input_line_pointer = end; ++ SKIP_WHITESPACE(); ++ } ++ } ++ } ++ ++ if (*input_line_pointer == '(') ++ { ++ align = get_absolute_expression (); ++ } ++ ++ demand_empty_rest_of_line(); ++ ++ obj_elf_change_section (name, type, attr, 0, NULL, 0, 0); ++#ifdef AVR32_DEBUG ++ fprintf( stderr, "RSEG: Changed section to %s, type: 0x%x, attr: 0x%x\n", ++ name, type, attr ); ++ fprintf( stderr, "RSEG: Aligning to 2**%d\n", align ); ++#endif ++ ++ if (align > 15) ++ { ++ align = 15; ++ as_warn (_("alignment too large: %u assumed"), align); ++ } ++ ++ /* Hope not, that is */ ++ assert (now_seg != absolute_section); ++ ++ /* Only make a frag if we HAVE to... */ ++ if (align != 0 && !need_pass_2) ++ { ++ if (subseg_text_p (now_seg)) ++ frag_align_code (align, 0); ++ else ++ frag_align (align, 0, 0); ++ } ++ ++ record_alignment (now_seg, align - OCTETS_PER_BYTE_POWER); ++} ++ ++/* vim: syntax=c sw=2 ++ */ +diff -Nrup binutils-2.17/gas/config/tc-avr32.h binutils-2.17.atmel.1.3.0/gas/config/tc-avr32.h +--- binutils-2.17/gas/config/tc-avr32.h 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/config/tc-avr32.h 2007-03-26 10:20:14.000000000 +0200 +@@ -0,0 +1,313 @@ ++/* Assembler definitions for AVR32. ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of GAS, the GNU Assembler. ++ ++ GAS is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ GAS 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 GAS; see the file COPYING. If not, write to the Free ++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#if 0 ++#define DEBUG ++#define DEBUG1 ++#define DEBUG2 ++#define DEBUG3 ++#define DEBUG4 ++#define DEBUG5 ++#endif ++ ++/* Are we trying to be compatible with the IAR assembler? (--iar) */ ++extern int avr32_iarcompat; ++ ++/* By convention, you should define this macro in the `.h' file. For ++ example, `tc-m68k.h' defines `TC_M68K'. You might have to use this ++ if it is necessary to add CPU specific code to the object format ++ file. */ ++#define TC_AVR32 ++ ++/* This macro is the BFD target name to use when creating the output ++ file. This will normally depend upon the `OBJ_FMT' macro. */ ++#define TARGET_FORMAT "elf32-avr32" ++ ++/* This macro is the BFD architecture to pass to `bfd_set_arch_mach'. */ ++#define TARGET_ARCH bfd_arch_avr32 ++ ++/* This macro is the BFD machine number to pass to ++ `bfd_set_arch_mach'. If it is not defined, GAS will use 0. */ ++#define TARGET_MACH 0 ++ ++/* UNDOCUMENTED: Allow //-style comments */ ++#define DOUBLESLASH_LINE_COMMENTS ++ ++/* You should define this macro to be non-zero if the target is big ++ endian, and zero if the target is little endian. */ ++#define TARGET_BYTES_BIG_ENDIAN 1 ++ ++/* FIXME: It seems that GAS only expects a one-byte opcode... ++ #define NOP_OPCODE 0xd703 */ ++ ++/* If you define this macro, GAS will warn about the use of ++ nonstandard escape sequences in a string. */ ++#undef ONLY_STANDARD_ESCAPES ++ ++#define DWARF2_FORMAT() dwarf2_format_32bit ++ ++/* Instructions are either 2 or 4 bytes long */ ++/* #define DWARF2_LINE_MIN_INSN_LENGTH 2 */ ++ ++/* GAS will call this function for any expression that can not be ++ recognized. When the function is called, `input_line_pointer' ++ will point to the start of the expression. */ ++#define md_operand(x) ++ ++#define md_parse_name(name, expr, mode, c) avr32_parse_name(name, expr, c) ++extern int avr32_parse_name(const char *, struct expressionS *, char *); ++ ++/* You may define this macro to generate a fixup for a data ++ allocation pseudo-op. */ ++#define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \ ++ avr32_cons_fix_new(FRAG, OFF, LEN, EXP) ++void avr32_cons_fix_new (fragS *, int, int, expressionS *); ++ ++/* `extsym - .' expressions can be emitted using PC-relative relocs */ ++#define DIFF_EXPR_OK ++ ++/* This is used to construct expressions out of @gotoff, etc. The ++ relocation type is stored in X_md */ ++#define O_got O_md1 ++#define O_hi O_md2 ++#define O_lo O_md3 ++#define O_tlsgd O_md4 ++ ++/* You may define this macro to parse an expression used in a data ++ allocation pseudo-op such as `.word'. You can use this to ++ recognize relocation directives that may appear in such directives. */ ++/* #define TC_PARSE_CONS_EXPRESSION(EXPR,N) avr_parse_cons_expression (EXPR,N) ++ void avr_parse_cons_expression (expressionS *exp, int nbytes); */ ++ ++/* This should just call either `number_to_chars_bigendian' or ++ `number_to_chars_littleendian', whichever is appropriate. On ++ targets like the MIPS which support options to change the ++ endianness, which function to call is a runtime decision. On ++ other targets, `md_number_to_chars' can be a simple macro. */ ++#define md_number_to_chars number_to_chars_bigendian ++ ++/* `md_short_jump_size' ++ `md_long_jump_size' ++ `md_create_short_jump' ++ `md_create_long_jump' ++ If `WORKING_DOT_WORD' is defined, GAS will not do broken word ++ processing (*note Broken words::.). Otherwise, you should set ++ `md_short_jump_size' to the size of a short jump (a jump that is ++ just long enough to jump around a long jmp) and ++ `md_long_jump_size' to the size of a long jump (a jump that can go ++ anywhere in the function), You should define ++ `md_create_short_jump' to create a short jump around a long jump, ++ and define `md_create_long_jump' to create a long jump. */ ++#define WORKING_DOT_WORD ++ ++/* If you define this macro, it means that `tc_gen_reloc' may return ++ multiple relocation entries for a single fixup. In this case, the ++ return value of `tc_gen_reloc' is a pointer to a null terminated ++ array. */ ++#undef RELOC_EXPANSION_POSSIBLE ++ ++/* If you define this macro, GAS will not require pseudo-ops to start with a . ++ character. */ ++#define NO_PSEUDO_DOT (avr32_iarcompat) ++ ++/* The IAR assembler uses $ as the location counter. Unfortunately, we ++ can't make this dependent on avr32_iarcompat... */ ++#define DOLLAR_DOT ++ ++/* Values passed to md_apply_fix3 don't include the symbol value. */ ++#define MD_APPLY_SYM_VALUE(FIX) 0 ++ ++/* The number of bytes to put into a word in a listing. This affects ++ the way the bytes are clumped together in the listing. For ++ example, a value of 2 might print `1234 5678' where a value of 1 ++ would print `12 34 56 78'. The default value is 4. */ ++#define LISTING_WORD_SIZE 4 ++ ++/* extern const struct relax_type md_relax_table[]; ++#define TC_GENERIC_RELAX_TABLE md_relax_table */ ++ ++/* ++ An `.lcomm' directive with no explicit alignment parameter will use ++ this macro to set P2VAR to the alignment that a request for SIZE ++ bytes will have. The alignment is expressed as a power of two. If ++ no alignment should take place, the macro definition should do ++ nothing. Some targets define a `.bss' directive that is also ++ affected by this macro. The default definition will set P2VAR to ++ the truncated power of two of sizes up to eight bytes. ++ ++ We want doublewords to be word-aligned, so we're going to modify the ++ default definition a tiny bit. ++*/ ++#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \ ++ do \ ++ { \ ++ if ((SIZE) >= 4) \ ++ (P2VAR) = 2; \ ++ else if ((SIZE) >= 2) \ ++ (P2VAR) = 1; \ ++ else \ ++ (P2VAR) = 0; \ ++ } \ ++ while (0) ++ ++/* When relaxing, we need to generate relocations for alignment ++ directives. */ ++#define HANDLE_ALIGN(frag) avr32_handle_align(frag) ++extern void avr32_handle_align(fragS *); ++ ++/* See internals doc for explanation. Oh wait... ++ Now, can you guess where "alignment" comes from? ;-) */ ++#define MAX_MEM_FOR_RS_ALIGN_CODE ((1 << alignment) - 1) ++ ++/* We need to stop gas from reducing certain expressions (e.g. GOT ++ references) */ ++#define tc_fix_adjustable(fix) avr32_fix_adjustable(fix) ++extern bfd_boolean avr32_fix_adjustable(struct fix *); ++ ++/* The linker needs to be passed a little more information when relaxing. */ ++#define TC_FORCE_RELOCATION(fix) avr32_force_reloc(fix) ++extern bfd_boolean avr32_force_reloc(struct fix *); ++ ++/* I'm tired of working around all the madness in fixup_segment(). ++ This hook will do basically the same things as the generic code, ++ and then it will "goto" right past it. */ ++#define TC_VALIDATE_FIX(FIX, SEG, SKIP) \ ++ do \ ++ { \ ++ avr32_process_fixup(FIX, SEG); \ ++ if (!(FIX)->fx_done) \ ++ ++seg_reloc_count; \ ++ goto SKIP; \ ++ } \ ++ while (0) ++extern void avr32_process_fixup(struct fix *fixP, segT this_segment); ++ ++/* We don't want the gas core to make any assumptions about our way of ++ doing linkrelaxing. */ ++#define TC_LINKRELAX_FIXUP(SEG) 0 ++ ++/* ... but we do want it to insert lots of padding. */ ++#define LINKER_RELAXING_SHRINKS_ONLY ++ ++/* Better do it ourselves, really... */ ++#define TC_RELAX_ALIGN(SEG, FRAG, ADDR) avr32_relax_align(SEG, FRAG, ADDR) ++extern relax_addressT ++avr32_relax_align(segT segment, fragS *fragP, relax_addressT address); ++ ++/* This is called by write_object_file() just before symbols are ++ attempted converted into section symbols. */ ++#define tc_frob_file_before_adjust() avr32_frob_file() ++extern void avr32_frob_file(void); ++ ++/* If you define this macro, GAS will call it at the end of each input ++ file. */ ++#define md_cleanup() avr32_cleanup() ++extern void avr32_cleanup(void); ++ ++/* There's an AVR32-specific hack in operand() which creates O_md ++ expressions when encountering HWRD or LWRD. We need to generate ++ proper relocs for them */ ++/* #define md_cgen_record_fixup_exp avr32_cgen_record_fixup_exp */ ++ ++/* I needed to add an extra hook in gas_cgen_finish_insn() for ++ conversion of O_md* operands because md_cgen_record_fixup_exp() ++ isn't called for relaxable insns */ ++/* #define md_cgen_convert_expr(exp, opinfo) avr32_cgen_convert_expr(exp, opinfo) ++ int avr32_cgen_convert_expr(expressionS *, int); */ ++ ++/* #define tc_gen_reloc gas_cgen_tc_gen_reloc */ ++ ++/* If you define this macro, it should return the position from which ++ the PC relative adjustment for a PC relative fixup should be ++ made. On many processors, the base of a PC relative instruction is ++ the next instruction, so this macro would return the length of an ++ instruction, plus the address of the PC relative fixup. The latter ++ can be calculated as fixp->fx_where + fixp->fx_frag->fr_address. */ ++extern long md_pcrel_from_section (struct fix *, segT); ++#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC) ++ ++#define LOCAL_LABEL(name) (name[0] == '.' && (name[1] == 'L')) ++#define LOCAL_LABELS_FB 1 ++ ++struct avr32_relaxer ++{ ++ int (*estimate_size)(fragS *, segT); ++ long (*relax_frag)(segT, fragS *, long); ++ void (*convert_frag)(bfd *, segT, fragS *); ++}; ++ ++/* AVR32 has quite complex instruction coding, which means we need ++ * lots of information in order to do the right thing during relaxing ++ * (basically, we need to be able to reconstruct a whole new opcode if ++ * necessary) */ ++#define TC_FRAG_TYPE struct avr32_frag_data ++ ++struct cpool; ++ ++struct avr32_frag_data ++{ ++ /* TODO: Maybe add an expression object here so that we can use ++ fix_new_exp() in md_convert_frag? We may have to decide ++ pcrel-ness in md_estimate_size_before_relax() as well...or we ++ might do it when parsing. Doing it while parsing may fail ++ because the sub_symbol is undefined then... */ ++ int pcrel; ++ int force_extended; ++ int reloc_info; ++ struct avr32_relaxer *relaxer; ++ expressionS exp; ++ ++ /* Points to associated constant pool, for use by LDA and CALL in ++ non-pic mode, and when relaxing the .cpool directive */ ++ struct cpool *pool; ++ unsigned int pool_entry; ++}; ++ ++/* We will have to initialize the fields explicitly when needed */ ++#define TC_FRAG_INIT(fragP) ++ ++#define md_estimate_size_before_relax(fragP, segT) \ ++ ((fragP)->tc_frag_data.relaxer->estimate_size(fragP, segT)) ++#define md_relax_frag(segment, fragP, stretch) \ ++ ((fragP)->tc_frag_data.relaxer->relax_frag(segment, fragP, stretch)) ++#define md_convert_frag(abfd, segment, fragP) \ ++ ((fragP)->tc_frag_data.relaxer->convert_frag(abfd, segment, fragP)) ++ ++#define TC_FIX_TYPE struct avr32_fix_data ++ ++struct avr32_fix_data ++{ ++ const struct avr32_ifield *ifield; ++ unsigned int align; ++ long min; ++ long max; ++}; ++ ++#define TC_INIT_FIX_DATA(fixP) \ ++ do \ ++ { \ ++ (fixP)->tc_fix_data.ifield = NULL; \ ++ (fixP)->tc_fix_data.align = 0; \ ++ (fixP)->tc_fix_data.min = 0; \ ++ (fixP)->tc_fix_data.max = 0; \ ++ } \ ++ while (0) +diff -Nrup binutils-2.17/gas/configure.tgt binutils-2.17.atmel.1.3.0/gas/configure.tgt +--- binutils-2.17/gas/configure.tgt 2006-04-05 14:41:57.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/configure.tgt 2007-03-26 10:20:16.000000000 +0200 +@@ -33,6 +33,7 @@ case ${cpu} in + am33_2.0) cpu_type=mn10300 endian=little ;; + arm*be|arm*b) cpu_type=arm endian=big ;; + arm*) cpu_type=arm endian=little ;; ++ avr32*) cpu_type=avr32 endian=big ;; + bfin*) cpu_type=bfin endian=little ;; + c4x*) cpu_type=tic4x ;; + crisv32) cpu_type=cris arch=crisv32 ;; +@@ -122,6 +123,9 @@ case ${generic_target} in + bfin-*-*) fmt=elf bfd_gas=yes ;; + bfin-*elf) fmt=elf ;; + ++ avr32-*-linux*) fmt=elf em=linux bfd_gas=yes ;; ++ avr32*) fmt=elf bfd_gas=yes ;; ++ + cris-*-linux-* | crisv32-*-linux-*) + fmt=multi em=linux ;; + cris-*-* | crisv32-*-*) fmt=multi ;; +diff -Nrup binutils-2.17/gas/doc/all.texi binutils-2.17.atmel.1.3.0/gas/doc/all.texi +--- binutils-2.17/gas/doc/all.texi 2006-02-17 15:36:25.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/doc/all.texi 2007-03-26 10:19:41.000000000 +0200 +@@ -29,6 +29,7 @@ + @set ALPHA + @set ARC + @set ARM ++@set AVR32 + @set BFIN + @set CRIS + @set D10V +diff -Nrup binutils-2.17/gas/doc/as.info binutils-2.17.atmel.1.3.0/gas/doc/as.info +--- binutils-2.17/gas/doc/as.info 2006-06-23 20:19:50.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/doc/as.info 2007-03-26 10:35:18.000000000 +0200 +@@ -1,5 +1,7 @@ +-This is ../.././gas/doc/as.info, produced by makeinfo version 4.8 from +-../.././gas/doc/as.texinfo. ++This is ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/gas/doc/as.info, ++produced by makeinfo version 4.8 from ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/gas/doc/as.texinfo. + + START-INFO-DIR-ENTRY + * As: (as). The GNU assembler. +@@ -17890,463 +17892,463 @@ Index + +  + Tag Table: +-Node: Top778 +-Node: Overview1695 +-Node: Manual28187 +-Node: GNU Assembler29131 +-Node: Object Formats30302 +-Node: Command Line30754 +-Node: Input Files31841 +-Node: Object33822 +-Node: Errors34718 +-Node: Invoking35913 +-Node: a37862 +-Node: alternate39634 +-Node: D39806 +-Node: f40039 +-Node: I40547 +-Node: K41091 +-Node: L41394 +-Node: listing42231 +-Node: M43823 +-Node: MD48224 +-Node: o48650 +-Node: R49105 +-Node: statistics50135 +-Node: traditional-format50542 +-Node: v51015 +-Node: W51290 +-Node: Z52197 +-Node: Syntax52719 +-Node: Preprocessing53310 +-Node: Whitespace54873 +-Node: Comments55269 +-Node: Symbol Intro57422 +-Node: Statements58112 +-Node: Constants60028 +-Node: Characters60659 +-Node: Strings61161 +-Node: Chars63327 +-Node: Numbers64081 +-Node: Integers64621 +-Node: Bignums65277 +-Node: Flonums65633 +-Node: Sections67380 +-Node: Secs Background67758 +-Node: Ld Sections72797 +-Node: As Sections75181 +-Node: Sub-Sections76091 +-Node: bss79238 +-Node: Symbols80188 +-Node: Labels80836 +-Node: Setting Symbols81567 +-Node: Symbol Names82063 +-Node: Dot86428 +-Node: Symbol Attributes86875 +-Node: Symbol Value87612 +-Node: Symbol Type88657 +-Node: a.out Symbols89045 +-Node: Symbol Desc89307 +-Node: Symbol Other89602 +-Node: COFF Symbols89771 +-Node: SOM Symbols90444 +-Node: Expressions90886 +-Node: Empty Exprs91635 +-Node: Integer Exprs91982 +-Node: Arguments92377 +-Node: Operators93483 +-Node: Prefix Ops93818 +-Node: Infix Ops94146 +-Node: Pseudo Ops96536 +-Node: Abort101731 +-Node: ABORT102136 +-Node: Align102323 +-Node: Ascii104605 +-Node: Asciz104914 +-Node: Balign105159 +-Node: Byte107022 +-Node: Comm107260 +-Node: CFI directives108634 +-Node: LNS directives110986 +-Node: Data113063 +-Node: Def113390 +-Node: Desc113622 +-Node: Dim114122 +-Node: Double114379 +-Node: Eject114717 +-Node: Else114892 +-Node: Elseif115188 +-Node: End115478 +-Node: Endef115693 +-Node: Endfunc115870 +-Node: Endif116045 +-Node: Equ116306 +-Node: Equiv116815 +-Node: Eqv117371 +-Node: Err117735 +-Node: Error118046 +-Node: Exitm118491 +-Node: Extern118660 +-Node: Fail118921 +-Node: File119366 +-Node: Fill119843 +-Node: Float120807 +-Node: Func121149 +-Node: Global121739 +-Node: Hidden122489 +-Node: hword123068 +-Node: Ident123396 +-Node: If123970 +-Node: Incbin127029 +-Node: Include127724 +-Node: Int128275 +-Node: Internal128656 +-Node: Irp129304 +-Node: Irpc130201 +-Node: Lcomm131118 +-Node: Lflags131866 +-Node: Line132060 +-Node: Linkonce132979 +-Node: Ln134208 +-Node: MRI134369 +-Node: List134707 +-Node: Long135315 +-Node: Macro135501 +-Node: Altmacro140064 +-Node: Noaltmacro141394 +-Node: Nolist141562 +-Node: Octa141992 +-Node: Org142326 +-Node: P2align143609 +-Node: Previous145537 +-Node: PopSection146231 +-Node: Print146739 +-Node: Protected146968 +-Node: Psize147615 +-Node: Purgem148299 +-Node: PushSection148520 +-Node: Quad149077 +-Node: Rept149532 +-Node: Sbttl149945 +-Node: Scl150310 +-Node: Section150651 +-Node: Set155791 +-Node: Short156428 +-Node: Single156748 +-Node: Size157093 +-Node: Sleb128157765 +-Node: Skip158087 +-Node: Space158409 +-Node: Stab159048 +-Node: String161050 +-Node: Struct161476 +-Node: SubSection162199 +-Node: Symver162760 +-Node: Tag165151 +-Node: Text165531 +-Node: Title165850 +-Node: Type166229 +-Node: Uleb128167306 +-Node: Val167630 +-Node: Version167880 +-Node: VTableEntry168155 +-Node: VTableInherit168445 +-Node: Warning168891 +-Node: Weak169125 +-Node: Weakref169794 +-Node: Word170759 +-Node: Deprecated172605 +-Node: Machine Dependencies172840 +-Node: Alpha-Dependent175604 +-Node: Alpha Notes176018 +-Node: Alpha Options176299 +-Node: Alpha Syntax178497 +-Node: Alpha-Chars178966 +-Node: Alpha-Regs179197 +-Node: Alpha-Relocs179584 +-Node: Alpha Floating Point185842 +-Node: Alpha Directives186064 +-Node: Alpha Opcodes191587 +-Node: ARC-Dependent191882 +-Node: ARC Options192265 +-Node: ARC Syntax193334 +-Node: ARC-Chars193566 +-Node: ARC-Regs193698 +-Node: ARC Floating Point193822 +-Node: ARC Directives194133 +-Node: ARC Opcodes200104 +-Node: ARM-Dependent200330 +-Node: ARM Options200757 +-Node: ARM Syntax206551 +-Node: ARM-Chars206783 +-Node: ARM-Regs207307 +-Node: ARM Floating Point207492 +-Node: ARM Directives207691 +-Node: ARM Opcodes214055 +-Node: ARM Mapping Symbols216143 +-Node: BFIN-Dependent216922 +-Node: BFIN Syntax217176 +-Node: BFIN Directives222873 +-Node: CRIS-Dependent223280 +-Node: CRIS-Opts223626 +-Ref: march-option225244 +-Node: CRIS-Expand227061 +-Node: CRIS-Symbols228244 +-Node: CRIS-Syntax229413 +-Node: CRIS-Chars229749 +-Node: CRIS-Pic230300 +-Ref: crispic230496 +-Node: CRIS-Regs234036 +-Node: CRIS-Pseudos234453 +-Ref: crisnous235229 +-Node: D10V-Dependent236511 +-Node: D10V-Opts236862 +-Node: D10V-Syntax237825 +-Node: D10V-Size238354 +-Node: D10V-Subs239327 +-Node: D10V-Chars240362 +-Node: D10V-Regs241966 +-Node: D10V-Addressing243011 +-Node: D10V-Word243697 +-Node: D10V-Float244212 +-Node: D10V-Opcodes244523 +-Node: D30V-Dependent244916 +-Node: D30V-Opts245269 +-Node: D30V-Syntax245944 +-Node: D30V-Size246476 +-Node: D30V-Subs247447 +-Node: D30V-Chars248482 +-Node: D30V-Guarded250780 +-Node: D30V-Regs251460 +-Node: D30V-Addressing252599 +-Node: D30V-Float253267 +-Node: D30V-Opcodes253578 +-Node: H8/300-Dependent253971 +-Node: H8/300 Options254381 +-Node: H8/300 Syntax254590 +-Node: H8/300-Chars254889 +-Node: H8/300-Regs255186 +-Node: H8/300-Addressing256103 +-Node: H8/300 Floating Point257142 +-Node: H8/300 Directives257467 +-Node: H8/300 Opcodes258593 +-Node: HPPA-Dependent266913 +-Node: HPPA Notes267346 +-Node: HPPA Options268102 +-Node: HPPA Syntax268295 +-Node: HPPA Floating Point269563 +-Node: HPPA Directives269767 +-Node: HPPA Opcodes278451 +-Node: ESA/390-Dependent278708 +-Node: ESA/390 Notes279168 +-Node: ESA/390 Options279959 +-Node: ESA/390 Syntax280169 +-Node: ESA/390 Floating Point282342 +-Node: ESA/390 Directives282621 +-Node: ESA/390 Opcodes285910 +-Node: i386-Dependent286172 +-Node: i386-Options287240 +-Node: i386-Syntax288430 +-Node: i386-Mnemonics290844 +-Node: i386-Regs293309 +-Node: i386-Prefixes295354 +-Node: i386-Memory298114 +-Node: i386-Jumps301051 +-Node: i386-Float302172 +-Node: i386-SIMD304001 +-Node: i386-16bit305110 +-Node: i386-Bugs307148 +-Node: i386-Arch307902 +-Node: i386-Notes310083 +-Node: i860-Dependent310941 +-Node: Notes-i860311337 +-Node: Options-i860312242 +-Node: Directives-i860313605 +-Node: Opcodes for i860314674 +-Node: i960-Dependent316841 +-Node: Options-i960317244 +-Node: Floating Point-i960321128 +-Node: Directives-i960321396 +-Node: Opcodes for i960323430 +-Node: callj-i960324047 +-Node: Compare-and-branch-i960324536 +-Node: IA-64-Dependent326440 +-Node: IA-64 Options326741 +-Node: IA-64 Syntax329901 +-Node: IA-64-Chars330264 +-Node: IA-64-Regs330494 +-Node: IA-64-Bits331420 +-Node: IA-64 Opcodes331929 +-Node: IP2K-Dependent332201 +-Node: IP2K-Opts332429 +-Node: M32C-Dependent332909 +-Node: M32C-Opts333433 +-Node: M32C-Modifiers333717 +-Node: M32R-Dependent335504 +-Node: M32R-Opts335825 +-Node: M32R-Directives339991 +-Node: M32R-Warnings343966 +-Node: M68K-Dependent346972 +-Node: M68K-Opts347439 +-Node: M68K-Syntax354818 +-Node: M68K-Moto-Syntax356657 +-Node: M68K-Float359246 +-Node: M68K-Directives359766 +-Node: M68K-opcodes361092 +-Node: M68K-Branch361318 +-Node: M68K-Chars365516 +-Node: M68HC11-Dependent365929 +-Node: M68HC11-Opts366460 +-Node: M68HC11-Syntax370276 +-Node: M68HC11-Modifiers372490 +-Node: M68HC11-Directives374318 +-Node: M68HC11-Float375694 +-Node: M68HC11-opcodes376222 +-Node: M68HC11-Branch376404 +-Node: MIPS-Dependent378851 +-Node: MIPS Opts379941 +-Node: MIPS Object387268 +-Node: MIPS Stabs388834 +-Node: MIPS symbol sizes389556 +-Node: MIPS ISA391225 +-Node: MIPS autoextend392374 +-Node: MIPS insn393104 +-Node: MIPS option stack393601 +-Node: MIPS ASE instruction generation overrides394375 +-Node: MMIX-Dependent395592 +-Node: MMIX-Opts395972 +-Node: MMIX-Expand399576 +-Node: MMIX-Syntax400891 +-Ref: mmixsite401248 +-Node: MMIX-Chars402089 +-Node: MMIX-Symbols402743 +-Node: MMIX-Regs404811 +-Node: MMIX-Pseudos405836 +-Ref: MMIX-loc405977 +-Ref: MMIX-local407057 +-Ref: MMIX-is407589 +-Ref: MMIX-greg407860 +-Ref: GREG-base408779 +-Ref: MMIX-byte410096 +-Ref: MMIX-constants410567 +-Ref: MMIX-prefix411213 +-Ref: MMIX-spec411587 +-Node: MMIX-mmixal411921 +-Node: MSP430-Dependent415418 +-Node: MSP430 Options415884 +-Node: MSP430 Syntax416170 +-Node: MSP430-Macros416486 +-Node: MSP430-Chars417217 +-Node: MSP430-Regs417530 +-Node: MSP430-Ext418090 +-Node: MSP430 Floating Point419911 +-Node: MSP430 Directives420135 +-Node: MSP430 Opcodes420926 +-Node: MSP430 Profiling Capability421321 +-Node: PDP-11-Dependent423650 +-Node: PDP-11-Options424039 +-Node: PDP-11-Pseudos429110 +-Node: PDP-11-Syntax429455 +-Node: PDP-11-Mnemonics430206 +-Node: PDP-11-Synthetic430508 +-Node: PJ-Dependent430726 +-Node: PJ Options430951 +-Node: PPC-Dependent431228 +-Node: PowerPC-Opts431515 +-Node: PowerPC-Pseudo433590 +-Node: SH-Dependent434189 +-Node: SH Options434601 +-Node: SH Syntax435529 +-Node: SH-Chars435802 +-Node: SH-Regs436096 +-Node: SH-Addressing436710 +-Node: SH Floating Point437619 +-Node: SH Directives438713 +-Node: SH Opcodes439083 +-Node: SH64-Dependent443405 +-Node: SH64 Options443768 +-Node: SH64 Syntax445485 +-Node: SH64-Chars445768 +-Node: SH64-Regs446068 +-Node: SH64-Addressing447164 +-Node: SH64 Directives448347 +-Node: SH64 Opcodes449457 +-Node: Sparc-Dependent450173 +-Node: Sparc-Opts450558 +-Node: Sparc-Aligned-Data452815 +-Node: Sparc-Float453670 +-Node: Sparc-Directives453871 +-Node: TIC54X-Dependent455831 +-Node: TIC54X-Opts456557 +-Node: TIC54X-Block457600 +-Node: TIC54X-Env457960 +-Node: TIC54X-Constants458308 +-Node: TIC54X-Subsyms458710 +-Node: TIC54X-Locals460619 +-Node: TIC54X-Builtins461363 +-Node: TIC54X-Ext463834 +-Node: TIC54X-Directives464405 +-Node: TIC54X-Macros475307 +-Node: TIC54X-MMRegs477417 +-Node: Z80-Dependent477633 +-Node: Z80 Options478021 +-Node: Z80 Syntax479444 +-Node: Z80-Chars480116 +-Node: Z80-Regs480649 +-Node: Z80-Case481001 +-Node: Z80 Floating Point481446 +-Node: Z80 Directives481640 +-Node: Z80 Opcodes483265 +-Node: Z8000-Dependent484607 +-Node: Z8000 Options485568 +-Node: Z8000 Syntax485785 +-Node: Z8000-Chars486075 +-Node: Z8000-Regs486308 +-Node: Z8000-Addressing487098 +-Node: Z8000 Directives488215 +-Node: Z8000 Opcodes489824 +-Node: Vax-Dependent499766 +-Node: VAX-Opts500283 +-Node: VAX-float504018 +-Node: VAX-directives504650 +-Node: VAX-opcodes505511 +-Node: VAX-branch505900 +-Node: VAX-operands508407 +-Node: VAX-no509170 +-Node: V850-Dependent509407 +-Node: V850 Options509805 +-Node: V850 Syntax512194 +-Node: V850-Chars512434 +-Node: V850-Regs512599 +-Node: V850 Floating Point514167 +-Node: V850 Directives514373 +-Node: V850 Opcodes515516 +-Node: Xtensa-Dependent521408 +-Node: Xtensa Options522137 +-Node: Xtensa Syntax524908 +-Node: Xtensa Opcodes526797 +-Node: Xtensa Registers528591 +-Node: Xtensa Optimizations529224 +-Node: Density Instructions529676 +-Node: Xtensa Automatic Alignment530778 +-Node: Xtensa Relaxation533524 +-Node: Xtensa Branch Relaxation534432 +-Node: Xtensa Call Relaxation535804 +-Node: Xtensa Immediate Relaxation537590 +-Node: Xtensa Directives540164 +-Node: Schedule Directive541872 +-Node: Longcalls Directive542212 +-Node: Transform Directive542756 +-Node: Literal Directive543498 +-Node: Literal Position Directive545283 +-Node: Literal Prefix Directive546982 +-Node: Absolute Literals Directive549145 +-Node: Reporting Bugs550452 +-Node: Bug Criteria551176 +-Node: Bug Reporting551941 +-Node: Acknowledgements558574 +-Ref: Acknowledgements-Footnote-1563472 +-Node: GNU Free Documentation License563498 +-Node: Index583225 ++Node: Top912 ++Node: Overview1829 ++Node: Manual28321 ++Node: GNU Assembler29265 ++Node: Object Formats30436 ++Node: Command Line30888 ++Node: Input Files31975 ++Node: Object33956 ++Node: Errors34852 ++Node: Invoking36047 ++Node: a37996 ++Node: alternate39768 ++Node: D39940 ++Node: f40173 ++Node: I40681 ++Node: K41225 ++Node: L41528 ++Node: listing42365 ++Node: M43957 ++Node: MD48358 ++Node: o48784 ++Node: R49239 ++Node: statistics50269 ++Node: traditional-format50676 ++Node: v51149 ++Node: W51424 ++Node: Z52331 ++Node: Syntax52853 ++Node: Preprocessing53444 ++Node: Whitespace55007 ++Node: Comments55403 ++Node: Symbol Intro57556 ++Node: Statements58246 ++Node: Constants60162 ++Node: Characters60793 ++Node: Strings61295 ++Node: Chars63461 ++Node: Numbers64215 ++Node: Integers64755 ++Node: Bignums65411 ++Node: Flonums65767 ++Node: Sections67514 ++Node: Secs Background67892 ++Node: Ld Sections72931 ++Node: As Sections75315 ++Node: Sub-Sections76225 ++Node: bss79372 ++Node: Symbols80322 ++Node: Labels80970 ++Node: Setting Symbols81701 ++Node: Symbol Names82197 ++Node: Dot86562 ++Node: Symbol Attributes87009 ++Node: Symbol Value87746 ++Node: Symbol Type88791 ++Node: a.out Symbols89179 ++Node: Symbol Desc89441 ++Node: Symbol Other89736 ++Node: COFF Symbols89905 ++Node: SOM Symbols90578 ++Node: Expressions91020 ++Node: Empty Exprs91769 ++Node: Integer Exprs92116 ++Node: Arguments92511 ++Node: Operators93617 ++Node: Prefix Ops93952 ++Node: Infix Ops94280 ++Node: Pseudo Ops96670 ++Node: Abort101865 ++Node: ABORT102270 ++Node: Align102457 ++Node: Ascii104739 ++Node: Asciz105048 ++Node: Balign105293 ++Node: Byte107156 ++Node: Comm107394 ++Node: CFI directives108768 ++Node: LNS directives111120 ++Node: Data113197 ++Node: Def113524 ++Node: Desc113756 ++Node: Dim114256 ++Node: Double114513 ++Node: Eject114851 ++Node: Else115026 ++Node: Elseif115322 ++Node: End115612 ++Node: Endef115827 ++Node: Endfunc116004 ++Node: Endif116179 ++Node: Equ116440 ++Node: Equiv116949 ++Node: Eqv117505 ++Node: Err117869 ++Node: Error118180 ++Node: Exitm118625 ++Node: Extern118794 ++Node: Fail119055 ++Node: File119500 ++Node: Fill119977 ++Node: Float120941 ++Node: Func121283 ++Node: Global121873 ++Node: Hidden122623 ++Node: hword123202 ++Node: Ident123530 ++Node: If124104 ++Node: Incbin127163 ++Node: Include127858 ++Node: Int128409 ++Node: Internal128790 ++Node: Irp129438 ++Node: Irpc130335 ++Node: Lcomm131252 ++Node: Lflags132000 ++Node: Line132194 ++Node: Linkonce133113 ++Node: Ln134342 ++Node: MRI134503 ++Node: List134841 ++Node: Long135449 ++Node: Macro135635 ++Node: Altmacro140198 ++Node: Noaltmacro141528 ++Node: Nolist141696 ++Node: Octa142126 ++Node: Org142460 ++Node: P2align143743 ++Node: Previous145671 ++Node: PopSection146365 ++Node: Print146873 ++Node: Protected147102 ++Node: Psize147749 ++Node: Purgem148433 ++Node: PushSection148654 ++Node: Quad149211 ++Node: Rept149666 ++Node: Sbttl150079 ++Node: Scl150444 ++Node: Section150785 ++Node: Set155925 ++Node: Short156562 ++Node: Single156882 ++Node: Size157227 ++Node: Sleb128157899 ++Node: Skip158221 ++Node: Space158543 ++Node: Stab159182 ++Node: String161184 ++Node: Struct161610 ++Node: SubSection162333 ++Node: Symver162894 ++Node: Tag165285 ++Node: Text165665 ++Node: Title165984 ++Node: Type166363 ++Node: Uleb128167440 ++Node: Val167764 ++Node: Version168014 ++Node: VTableEntry168289 ++Node: VTableInherit168579 ++Node: Warning169025 ++Node: Weak169259 ++Node: Weakref169928 ++Node: Word170893 ++Node: Deprecated172739 ++Node: Machine Dependencies172974 ++Node: Alpha-Dependent175738 ++Node: Alpha Notes176152 ++Node: Alpha Options176433 ++Node: Alpha Syntax178631 ++Node: Alpha-Chars179100 ++Node: Alpha-Regs179331 ++Node: Alpha-Relocs179718 ++Node: Alpha Floating Point185976 ++Node: Alpha Directives186198 ++Node: Alpha Opcodes191721 ++Node: ARC-Dependent192016 ++Node: ARC Options192399 ++Node: ARC Syntax193468 ++Node: ARC-Chars193700 ++Node: ARC-Regs193832 ++Node: ARC Floating Point193956 ++Node: ARC Directives194267 ++Node: ARC Opcodes200238 ++Node: ARM-Dependent200464 ++Node: ARM Options200891 ++Node: ARM Syntax206685 ++Node: ARM-Chars206917 ++Node: ARM-Regs207441 ++Node: ARM Floating Point207626 ++Node: ARM Directives207825 ++Node: ARM Opcodes214189 ++Node: ARM Mapping Symbols216277 ++Node: BFIN-Dependent217056 ++Node: BFIN Syntax217310 ++Node: BFIN Directives223007 ++Node: CRIS-Dependent223414 ++Node: CRIS-Opts223760 ++Ref: march-option225378 ++Node: CRIS-Expand227195 ++Node: CRIS-Symbols228378 ++Node: CRIS-Syntax229547 ++Node: CRIS-Chars229883 ++Node: CRIS-Pic230434 ++Ref: crispic230630 ++Node: CRIS-Regs234170 ++Node: CRIS-Pseudos234587 ++Ref: crisnous235363 ++Node: D10V-Dependent236645 ++Node: D10V-Opts236996 ++Node: D10V-Syntax237959 ++Node: D10V-Size238488 ++Node: D10V-Subs239461 ++Node: D10V-Chars240496 ++Node: D10V-Regs242100 ++Node: D10V-Addressing243145 ++Node: D10V-Word243831 ++Node: D10V-Float244346 ++Node: D10V-Opcodes244657 ++Node: D30V-Dependent245050 ++Node: D30V-Opts245403 ++Node: D30V-Syntax246078 ++Node: D30V-Size246610 ++Node: D30V-Subs247581 ++Node: D30V-Chars248616 ++Node: D30V-Guarded250914 ++Node: D30V-Regs251594 ++Node: D30V-Addressing252733 ++Node: D30V-Float253401 ++Node: D30V-Opcodes253712 ++Node: H8/300-Dependent254105 ++Node: H8/300 Options254515 ++Node: H8/300 Syntax254724 ++Node: H8/300-Chars255023 ++Node: H8/300-Regs255320 ++Node: H8/300-Addressing256237 ++Node: H8/300 Floating Point257276 ++Node: H8/300 Directives257601 ++Node: H8/300 Opcodes258727 ++Node: HPPA-Dependent267047 ++Node: HPPA Notes267480 ++Node: HPPA Options268236 ++Node: HPPA Syntax268429 ++Node: HPPA Floating Point269697 ++Node: HPPA Directives269901 ++Node: HPPA Opcodes278585 ++Node: ESA/390-Dependent278842 ++Node: ESA/390 Notes279302 ++Node: ESA/390 Options280093 ++Node: ESA/390 Syntax280303 ++Node: ESA/390 Floating Point282476 ++Node: ESA/390 Directives282755 ++Node: ESA/390 Opcodes286044 ++Node: i386-Dependent286306 ++Node: i386-Options287374 ++Node: i386-Syntax288564 ++Node: i386-Mnemonics290978 ++Node: i386-Regs293443 ++Node: i386-Prefixes295488 ++Node: i386-Memory298248 ++Node: i386-Jumps301185 ++Node: i386-Float302306 ++Node: i386-SIMD304135 ++Node: i386-16bit305244 ++Node: i386-Bugs307282 ++Node: i386-Arch308036 ++Node: i386-Notes310217 ++Node: i860-Dependent311075 ++Node: Notes-i860311471 ++Node: Options-i860312376 ++Node: Directives-i860313739 ++Node: Opcodes for i860314808 ++Node: i960-Dependent316975 ++Node: Options-i960317378 ++Node: Floating Point-i960321262 ++Node: Directives-i960321530 ++Node: Opcodes for i960323564 ++Node: callj-i960324181 ++Node: Compare-and-branch-i960324670 ++Node: IA-64-Dependent326574 ++Node: IA-64 Options326875 ++Node: IA-64 Syntax330035 ++Node: IA-64-Chars330398 ++Node: IA-64-Regs330628 ++Node: IA-64-Bits331554 ++Node: IA-64 Opcodes332063 ++Node: IP2K-Dependent332335 ++Node: IP2K-Opts332563 ++Node: M32C-Dependent333043 ++Node: M32C-Opts333567 ++Node: M32C-Modifiers333851 ++Node: M32R-Dependent335638 ++Node: M32R-Opts335959 ++Node: M32R-Directives340125 ++Node: M32R-Warnings344100 ++Node: M68K-Dependent347106 ++Node: M68K-Opts347573 ++Node: M68K-Syntax354952 ++Node: M68K-Moto-Syntax356791 ++Node: M68K-Float359380 ++Node: M68K-Directives359900 ++Node: M68K-opcodes361226 ++Node: M68K-Branch361452 ++Node: M68K-Chars365650 ++Node: M68HC11-Dependent366063 ++Node: M68HC11-Opts366594 ++Node: M68HC11-Syntax370410 ++Node: M68HC11-Modifiers372624 ++Node: M68HC11-Directives374452 ++Node: M68HC11-Float375828 ++Node: M68HC11-opcodes376356 ++Node: M68HC11-Branch376538 ++Node: MIPS-Dependent378985 ++Node: MIPS Opts380075 ++Node: MIPS Object387402 ++Node: MIPS Stabs388968 ++Node: MIPS symbol sizes389690 ++Node: MIPS ISA391359 ++Node: MIPS autoextend392508 ++Node: MIPS insn393238 ++Node: MIPS option stack393735 ++Node: MIPS ASE instruction generation overrides394509 ++Node: MMIX-Dependent395726 ++Node: MMIX-Opts396106 ++Node: MMIX-Expand399710 ++Node: MMIX-Syntax401025 ++Ref: mmixsite401382 ++Node: MMIX-Chars402223 ++Node: MMIX-Symbols402877 ++Node: MMIX-Regs404945 ++Node: MMIX-Pseudos405970 ++Ref: MMIX-loc406111 ++Ref: MMIX-local407191 ++Ref: MMIX-is407723 ++Ref: MMIX-greg407994 ++Ref: GREG-base408913 ++Ref: MMIX-byte410230 ++Ref: MMIX-constants410701 ++Ref: MMIX-prefix411347 ++Ref: MMIX-spec411721 ++Node: MMIX-mmixal412055 ++Node: MSP430-Dependent415552 ++Node: MSP430 Options416018 ++Node: MSP430 Syntax416304 ++Node: MSP430-Macros416620 ++Node: MSP430-Chars417351 ++Node: MSP430-Regs417664 ++Node: MSP430-Ext418224 ++Node: MSP430 Floating Point420045 ++Node: MSP430 Directives420269 ++Node: MSP430 Opcodes421060 ++Node: MSP430 Profiling Capability421455 ++Node: PDP-11-Dependent423784 ++Node: PDP-11-Options424173 ++Node: PDP-11-Pseudos429244 ++Node: PDP-11-Syntax429589 ++Node: PDP-11-Mnemonics430340 ++Node: PDP-11-Synthetic430642 ++Node: PJ-Dependent430860 ++Node: PJ Options431085 ++Node: PPC-Dependent431362 ++Node: PowerPC-Opts431649 ++Node: PowerPC-Pseudo433724 ++Node: SH-Dependent434323 ++Node: SH Options434735 ++Node: SH Syntax435663 ++Node: SH-Chars435936 ++Node: SH-Regs436230 ++Node: SH-Addressing436844 ++Node: SH Floating Point437753 ++Node: SH Directives438847 ++Node: SH Opcodes439217 ++Node: SH64-Dependent443539 ++Node: SH64 Options443902 ++Node: SH64 Syntax445619 ++Node: SH64-Chars445902 ++Node: SH64-Regs446202 ++Node: SH64-Addressing447298 ++Node: SH64 Directives448481 ++Node: SH64 Opcodes449591 ++Node: Sparc-Dependent450307 ++Node: Sparc-Opts450692 ++Node: Sparc-Aligned-Data452949 ++Node: Sparc-Float453804 ++Node: Sparc-Directives454005 ++Node: TIC54X-Dependent455965 ++Node: TIC54X-Opts456691 ++Node: TIC54X-Block457734 ++Node: TIC54X-Env458094 ++Node: TIC54X-Constants458442 ++Node: TIC54X-Subsyms458844 ++Node: TIC54X-Locals460753 ++Node: TIC54X-Builtins461497 ++Node: TIC54X-Ext463968 ++Node: TIC54X-Directives464539 ++Node: TIC54X-Macros475441 ++Node: TIC54X-MMRegs477551 ++Node: Z80-Dependent477767 ++Node: Z80 Options478155 ++Node: Z80 Syntax479578 ++Node: Z80-Chars480250 ++Node: Z80-Regs480783 ++Node: Z80-Case481135 ++Node: Z80 Floating Point481580 ++Node: Z80 Directives481774 ++Node: Z80 Opcodes483399 ++Node: Z8000-Dependent484741 ++Node: Z8000 Options485702 ++Node: Z8000 Syntax485919 ++Node: Z8000-Chars486209 ++Node: Z8000-Regs486442 ++Node: Z8000-Addressing487232 ++Node: Z8000 Directives488349 ++Node: Z8000 Opcodes489958 ++Node: Vax-Dependent499900 ++Node: VAX-Opts500417 ++Node: VAX-float504152 ++Node: VAX-directives504784 ++Node: VAX-opcodes505645 ++Node: VAX-branch506034 ++Node: VAX-operands508541 ++Node: VAX-no509304 ++Node: V850-Dependent509541 ++Node: V850 Options509939 ++Node: V850 Syntax512328 ++Node: V850-Chars512568 ++Node: V850-Regs512733 ++Node: V850 Floating Point514301 ++Node: V850 Directives514507 ++Node: V850 Opcodes515650 ++Node: Xtensa-Dependent521542 ++Node: Xtensa Options522271 ++Node: Xtensa Syntax525042 ++Node: Xtensa Opcodes526931 ++Node: Xtensa Registers528725 ++Node: Xtensa Optimizations529358 ++Node: Density Instructions529810 ++Node: Xtensa Automatic Alignment530912 ++Node: Xtensa Relaxation533658 ++Node: Xtensa Branch Relaxation534566 ++Node: Xtensa Call Relaxation535938 ++Node: Xtensa Immediate Relaxation537724 ++Node: Xtensa Directives540298 ++Node: Schedule Directive542006 ++Node: Longcalls Directive542346 ++Node: Transform Directive542890 ++Node: Literal Directive543632 ++Node: Literal Position Directive545417 ++Node: Literal Prefix Directive547116 ++Node: Absolute Literals Directive549279 ++Node: Reporting Bugs550586 ++Node: Bug Criteria551310 ++Node: Bug Reporting552075 ++Node: Acknowledgements558708 ++Ref: Acknowledgements-Footnote-1563606 ++Node: GNU Free Documentation License563632 ++Node: Index583359 +  + End Tag Table +diff -Nrup binutils-2.17/gas/doc/as.texinfo binutils-2.17.atmel.1.3.0/gas/doc/as.texinfo +--- binutils-2.17/gas/doc/as.texinfo 2006-04-17 17:16:27.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/doc/as.texinfo 2007-03-26 10:19:41.000000000 +0200 +@@ -6182,6 +6182,9 @@ subject, see the hardware manufacturer's + @ifset ARM + * ARM-Dependent:: ARM Dependent Features + @end ifset ++@ifset AVR32 ++* AVR32-Dependent:: AVR32 Dependent Features ++@end ifset + @ifset BFIN + * BFIN-Dependent:: BFIN Dependent Features + @end ifset +@@ -6298,6 +6301,10 @@ subject, see the hardware manufacturer's + @include c-arm.texi + @end ifset + ++@ifset AVR32 ++@include c-avr32.texi ++@end ifset ++ + @ifset BFIN + @include c-bfin.texi + @end ifset +diff -Nrup binutils-2.17/gas/doc/c-avr32.texi binutils-2.17.atmel.1.3.0/gas/doc/c-avr32.texi +--- binutils-2.17/gas/doc/c-avr32.texi 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/doc/c-avr32.texi 2007-09-28 10:30:46.000000000 +0200 +@@ -0,0 +1,254 @@ ++@c Copyright 2005, 2006 ++@c Atmel Corporation ++@c This is part of the GAS manual. ++@c For copying conditions, see the file as.texinfo. ++ ++@ifset GENERIC ++@page ++@node AVR32-Dependent ++@chapter AVR32 Dependent Features ++@end ifset ++ ++@ifclear GENERIC ++@node Machine Dependencies ++@chapter AVR32 Dependent Features ++@end ifclear ++ ++@cindex AVR32 support ++@menu ++* AVR32 Options:: Options ++* AVR32 Syntax:: Syntax ++* AVR32 Directives:: Directives ++* AVR32 Opcodes:: Opcodes ++@end menu ++ ++@node AVR32 Options ++@section Options ++@cindex AVR32 options ++@cindex options for AVR32 ++ ++There are currently no AVR32-specific options. However, the following ++options are planned: ++ ++@table @code ++ ++@cindex @code{--pic} command line option, AVR32 ++@cindex PIC code generation for AVR32 ++@item --pic ++This option specifies that the output of the assembler should be marked ++as position-independent code (PIC). It will also ensure that ++pseudo-instructions that deal with address calculation are output as ++PIC, and that all absolute address references in the code are marked as ++such. ++ ++@cindex @code{--linkrelax} command line option, AVR32 ++@item --linkrelax ++This option specifies that the output of the assembler should be marked ++as linker-relaxable. It will also ensure that all PC-relative operands ++that may change during linker relaxation get appropriate relocations. ++ ++@cindex @code{--direct-data-refs} command line option, AVR32 ++@item --direct-data-refs ++This option allows direct references (i.e. mov or sub) to the ++data section. This is default not allowed because the actual distance may ++change after the optimization passes are complete and the address and ++size of all sections are considered known. ++ ++@end table ++ ++ ++@node AVR32 Syntax ++@section Syntax ++@menu ++* AVR32-Chars:: Special Characters ++* AVR32-Symrefs:: Symbol references ++@end menu ++ ++@node AVR32-Chars ++@subsection Special Characters ++ ++@cindex line comment character, AVR32 ++@cindex AVR32 line comment character ++The presence of a @samp{//} on a line indicates the start of a comment ++that extends to the end of the current line. If a @samp{#} appears as ++the first character of a line, the whole line is treated as a comment. ++ ++@cindex line separator, AVR32 ++@cindex statement separator, AVR32 ++@cindex AVR32 line separator ++The @samp{;} character can be used instead of a newline to separate ++statements. ++ ++@node AVR32-Symrefs ++@subsection Symbol references ++ ++The absolute value of a symbol can be obtained by simply naming the ++symbol. However, as AVR32 symbols have 32-bit values, most symbols have ++values that are outside the range of any instructions. ++ ++Instructions that take a PC-relative offset, e.g. @code{lddpc} or ++@code{rcall}, can also reference a symbol by simply naming the symbol ++(no explicit calculations necessary). In this case, the assembler or ++linker subtracts the address of the instruction from the symbol's value ++and inserts the result into the instruction. Note that even though an ++overflow is less likely to happen for a relative reference than for an ++absolute reference, the assembler or linker will generate an error if ++the referenced symbol is too far away from the current location. ++ ++Relative references can be used for data as well. For example: ++ ++@smallexample ++ lddpc r0, 2f ++1: add r0, pc ++ ... ++ .align 2 ++2: .int @var{some_symbol} - 1b ++@end smallexample ++ ++Here, r0 will end up with the run-time address of @var{some_symbol} even ++if the program was loaded at a different address than it was linked ++(position-independent code). ++ ++@subsubsection Symbol modifiers ++ ++@table @code ++ ++@item @code{hi(@var{symbol})} ++Evaluates to the value of the symbol shifted right 16 bits. This will ++work even if @var{symbol} is defined in a different module. ++ ++@item @code{lo(@var{symbol})} ++Evaluates to the low 16 bits of the symbol's value. This will work even ++if @var{symbol} is defined in a different module. ++ ++@item @code{@var{symbol}@@got} ++Create a GOT entry for @var{symbol} and return the offset of that entry ++relative to the GOT base. ++ ++@end table ++ ++ ++@node AVR32 Directives ++@section Directives ++@cindex machine directives, AVR32 ++@cindex AVR32 directives ++ ++@table @code ++ ++@cindex @code{.cpool} directive, AVR32 ++@item .cpool ++This directive causes the current contents of the constant pool to be ++dumped into the current section at the current location (aligned to a ++word boundary). @code{GAS} maintains a separate constant pool for each ++section and each sub-section. The @code{.cpool} directive will only ++affect the constant pool of the current section and sub-section. At the ++end of assembly, all remaining, non-empty constant pools will ++automatically be dumped. ++ ++@end table ++ ++ ++@node AVR32 Opcodes ++@section Opcodes ++@cindex AVR32 opcodes ++@cindex opcodes for AVR32 ++ ++@code{@value{AS}} implements all the standard AVR32 opcodes. It also ++implements several pseudo-opcodes, which are recommended to use wherever ++possible because they give the tool chain better freedom to generate ++optimal code. ++ ++@table @code ++ ++@cindex @code{LDA.W reg, symbol} pseudo op, AVR32 ++@item LDA.W ++@smallexample ++ lda.w @var{reg}, @var{symbol} ++@end smallexample ++ ++This instruction will load the address of @var{symbol} into ++@var{reg}. The instruction will evaluate to one of the following, ++depending on the relative distance to the symbol, the relative distance ++to the constant pool and whether the @code{--pic} option has been ++specified. If the @code{--pic} option has not been specified, the ++alternatives are as follows: ++@smallexample ++ /* @var{symbol} evaluates to a small enough value */ ++ mov @var{reg}, @var{symbol} ++ ++ /* (. - @var{symbol}) evaluates to a small enough value */ ++ sub @var{reg}, pc, . - @var{symbol} ++ ++ /* Constant pool is close enough */ ++ lddpc @var{reg}, @var{cpent} ++ ... ++@var{cpent}: ++ .long @var{symbol} ++ ++ /* Otherwise (not implemented yet, probably not necessary) */ ++ mov @var{reg}, lo(@var{symbol}) ++ orh @var{reg}, hi(@var{symbol}) ++@end smallexample ++ ++If the @code{--pic} option has been specified, the alternatives are as ++follows: ++@smallexample ++ /* (. - @var{symbol}) evaluates to a small enough value */ ++ sub @var{reg}, pc, . - @var{symbol} ++ ++ /* If @code{--linkrelax} not specified */ ++ ld.w @var{reg}, r6[@var{symbol}@@got] ++ ++ /* Otherwise */ ++ mov @var{reg}, @var{symbol}@@got / 4 ++ ld.w @var{reg}, r6[@var{reg} << 2] ++@end smallexample ++ ++If @var{symbol} is not defined in the same file and section as the ++@code{LDA.W} instruction, the most pessimistic alternative of the ++above is selected. The linker may convert it back into the most ++optimal alternative when the final value of all symbols is known. ++ ++@cindex @code{CALL symbol} pseudo op, AVR32 ++@item CALL ++@smallexample ++ call @var{symbol} ++@end smallexample ++ ++This instruction will insert code to call the subroutine identified by ++@var{symbol}. It will evaluate to one of the following, depending on ++the relative distance to the symbol as well as the @code{--linkrelax} ++and @code{--pic} command-line options. ++ ++If @var{symbol} is defined in the same section and input file, and the ++distance is small enough, an @code{rcall} instruction is inserted: ++@smallexample ++ rcall @var{symbol} ++@end smallexample ++ ++Otherwise, if the @code{--pic} option has not been specified: ++@smallexample ++ mcall @var{cpent} ++ ... ++@var{cpent}: ++ .long @var{symbol} ++@end smallexample ++ ++Finally, if nothing else fits and the @code{--pic} option has been ++specified, the assembler will indirect the call through the Global ++Offset Table: ++@smallexample ++ /* If @code{--linkrelax} not specified */ ++ mcall r6[@var{symbol}@@got] ++ ++ /* If @code{--linkrelax} specified */ ++ mov lr, @var{symbol}@@got / 4 ++ ld.w lr, r6[lr << 2] ++ icall lr ++@end smallexample ++ ++The linker, after determining the final value of @var{symbol}, may ++convert any of these into more optimal alternatives. This includes ++deleting any superfluous constant pool- and GOT-entries. ++ ++@end table +diff -Nrup binutils-2.17/gas/doc/Makefile.am binutils-2.17.atmel.1.3.0/gas/doc/Makefile.am +--- binutils-2.17/gas/doc/Makefile.am 2006-06-03 06:45:50.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/doc/Makefile.am 2007-03-26 10:19:41.000000000 +0200 +@@ -29,6 +29,7 @@ CPU_DOCS = \ + c-alpha.texi \ + c-arc.texi \ + c-arm.texi \ ++ c-avr32.texi \ + c-bfin.texi \ + c-d10v.texi \ + c-cris.texi \ +diff -Nrup binutils-2.17/gas/Makefile.am binutils-2.17.atmel.1.3.0/gas/Makefile.am +--- binutils-2.17/gas/Makefile.am 2006-04-06 23:49:30.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/Makefile.am 2007-03-26 10:20:16.000000000 +0200 +@@ -45,6 +45,7 @@ CPU_TYPES = \ + arc \ + arm \ + avr \ ++ avr32 \ + bfin \ + cris \ + crx \ +@@ -229,6 +230,7 @@ TARGET_CPU_CFILES = \ + config/tc-arc.c \ + config/tc-arm.c \ + config/tc-avr.c \ ++ config/tc-avr32.c \ + config/tc-bfin.c \ + config/tc-cris.c \ + config/tc-crx.c \ +@@ -280,6 +282,7 @@ TARGET_CPU_HFILES = \ + config/tc-arc.h \ + config/tc-arm.h \ + config/tc-avr.h \ ++ config/tc-avr32.h \ + config/tc-bfin.h \ + config/tc-cris.h \ + config/tc-crx.h \ +@@ -1046,6 +1049,11 @@ DEPTC_avr_elf = $(INCDIR)/symcat.h $(src + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h \ + dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ + $(INCDIR)/opcode/avr.h ++DEPTC_avr32_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \ ++ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ ++ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr32.h \ ++ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ ++ $(srcdir)/../opcodes/avr32-opc.h $(srcdir)/../opcodes/avr32-asm.h + DEPTC_bfin_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \ + $(srcdir)/config/tc-bfin.h $(INCDIR)/coff/internal.h \ + $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h struc-symbol.h \ +@@ -1628,6 +1636,11 @@ DEPOBJ_bfin_elf = $(INCDIR)/symcat.h $(s + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \ + dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ + struc-symbol.h $(INCDIR)/aout/aout64.h ++DEPOBJ_avr32_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \ ++ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ ++ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr32.h \ ++ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ ++ struc-symbol.h dwarf2dbg.h + DEPOBJ_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \ + $(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \ + $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h +@@ -2095,6 +2108,9 @@ DEP_bfin_elf = $(srcdir)/config/obj-elf. + $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \ + dwarf2dbg.h ++DEP_avr32_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \ ++ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ ++ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr32.h + DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \ + $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h + DEP_cris_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \ +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/aliases.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/aliases.d +--- binutils-2.17/gas/testsuite/gas/avr32/aliases.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/aliases.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,19 @@ ++#as: ++#objdump: -dr ++#name: aliases ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: 19 80 [ \t]+ld\.ub r0,r12\[0x0\] ++ 2: f9 20 00 00[ \t]+ld\.sb r0,r12\[0\] ++ 6: 98 80 [ \t]+ld\.uh r0,r12\[0x0\] ++ 8: 98 00 [ \t]+ld\.sh r0,r12\[0x0\] ++ a: 78 00 [ \t]+ld\.w r0,r12\[0x0\] ++ ++0000000c : ++ c: b8 80 [ \t]+st\.b r12\[0x0\],r0 ++ e: b8 00 [ \t]+st\.h r12\[0x0\],r0 ++ 10: 99 00 [ \t]+st\.w r12\[0x0\],r0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/aliases.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/aliases.s +--- binutils-2.17/gas/testsuite/gas/avr32/aliases.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/aliases.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,14 @@ ++ .text ++ .global ld_nodisp ++ld_nodisp: ++ ld.ub r0, r12 ++ ld.sb r0, r12 ++ ld.uh r0, r12 ++ ld.sh r0, r12 ++ ld.w r0, r12 ++ ++ .global st_nodisp ++st_nodisp: ++ st.b r12, r0 ++ st.h r12, r0 ++ st.w r12, r0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.d +--- binutils-2.17/gas/testsuite/gas/avr32/allinsn.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,2900 @@ ++#as: ++#objdump: -dr ++#name: allinsn ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 02 3e ld\.d lr,pc\[pc<<0x3\] ++ *[0-9a-f]*: e0 00 02 00 ld\.d r0,r0\[r0\] ++ *[0-9a-f]*: ea 05 02 26 ld\.d r6,r5\[r5<<0x2\] ++ *[0-9a-f]*: e8 04 02 14 ld\.d r4,r4\[r4<<0x1\] ++ *[0-9a-f]*: fc 0e 02 1e ld\.d lr,lr\[lr<<0x1\] ++ *[0-9a-f]*: e6 0d 02 2a ld\.d r10,r3\[sp<<0x2\] ++ *[0-9a-f]*: f4 06 02 28 ld\.d r8,r10\[r6<<0x2\] ++ *[0-9a-f]*: ee 09 02 02 ld\.d r2,r7\[r9\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 03 0f ld\.w pc,pc\[pc\] ++ *[0-9a-f]*: f8 0c 03 3c ld\.w r12,r12\[r12<<0x3\] ++ *[0-9a-f]*: ea 05 03 25 ld\.w r5,r5\[r5<<0x2\] ++ *[0-9a-f]*: e8 04 03 14 ld\.w r4,r4\[r4<<0x1\] ++ *[0-9a-f]*: fc 0e 03 1e ld\.w lr,lr\[lr<<0x1\] ++ *[0-9a-f]*: f2 09 03 02 ld\.w r2,r9\[r9\] ++ *[0-9a-f]*: e4 06 03 0b ld\.w r11,r2\[r6\] ++ *[0-9a-f]*: e4 0d 03 30 ld\.w r0,r2\[sp<<0x3\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 04 0f ld\.sh pc,pc\[pc\] ++ *[0-9a-f]*: f8 0c 04 3c ld\.sh r12,r12\[r12<<0x3\] ++ *[0-9a-f]*: ea 05 04 25 ld\.sh r5,r5\[r5<<0x2\] ++ *[0-9a-f]*: e8 04 04 14 ld\.sh r4,r4\[r4<<0x1\] ++ *[0-9a-f]*: fc 0e 04 1e ld\.sh lr,lr\[lr<<0x1\] ++ *[0-9a-f]*: e0 0f 04 2b ld\.sh r11,r0\[pc<<0x2\] ++ *[0-9a-f]*: fa 06 04 2a ld\.sh r10,sp\[r6<<0x2\] ++ *[0-9a-f]*: e4 02 04 0c ld\.sh r12,r2\[r2\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 05 0f ld\.uh pc,pc\[pc\] ++ *[0-9a-f]*: f8 0c 05 3c ld\.uh r12,r12\[r12<<0x3\] ++ *[0-9a-f]*: ea 05 05 25 ld\.uh r5,r5\[r5<<0x2\] ++ *[0-9a-f]*: e8 04 05 14 ld\.uh r4,r4\[r4<<0x1\] ++ *[0-9a-f]*: fc 0e 05 1e ld\.uh lr,lr\[lr<<0x1\] ++ *[0-9a-f]*: fe 0e 05 38 ld\.uh r8,pc\[lr<<0x3\] ++ *[0-9a-f]*: e2 0f 05 16 ld\.uh r6,r1\[pc<<0x1\] ++ *[0-9a-f]*: fc 0d 05 16 ld\.uh r6,lr\[sp<<0x1\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 06 0f ld\.sb pc,pc\[pc\] ++ *[0-9a-f]*: f8 0c 06 3c ld\.sb r12,r12\[r12<<0x3\] ++ *[0-9a-f]*: ea 05 06 25 ld\.sb r5,r5\[r5<<0x2\] ++ *[0-9a-f]*: e8 04 06 14 ld\.sb r4,r4\[r4<<0x1\] ++ *[0-9a-f]*: fc 0e 06 1e ld\.sb lr,lr\[lr<<0x1\] ++ *[0-9a-f]*: e2 0f 06 39 ld\.sb r9,r1\[pc<<0x3\] ++ *[0-9a-f]*: e6 0b 06 10 ld\.sb r0,r3\[r11<<0x1\] ++ *[0-9a-f]*: ea 05 06 1a ld\.sb r10,r5\[r5<<0x1\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 07 0f ld\.ub pc,pc\[pc\] ++ *[0-9a-f]*: f8 0c 07 3c ld\.ub r12,r12\[r12<<0x3\] ++ *[0-9a-f]*: ea 05 07 25 ld\.ub r5,r5\[r5<<0x2\] ++ *[0-9a-f]*: e8 04 07 14 ld\.ub r4,r4\[r4<<0x1\] ++ *[0-9a-f]*: fc 0e 07 1e ld\.ub lr,lr\[lr<<0x1\] ++ *[0-9a-f]*: f8 07 07 36 ld\.ub r6,r12\[r7<<0x3\] ++ *[0-9a-f]*: ec 0c 07 02 ld\.ub r2,r6\[r12\] ++ *[0-9a-f]*: ee 0b 07 10 ld\.ub r0,r7\[r11<<0x1\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 08 0e st\.d pc\[pc\],lr ++ *[0-9a-f]*: f8 0c 08 3c st\.d r12\[r12<<0x3\],r12 ++ *[0-9a-f]*: ea 05 08 26 st\.d r5\[r5<<0x2\],r6 ++ *[0-9a-f]*: e8 04 08 14 st\.d r4\[r4<<0x1\],r4 ++ *[0-9a-f]*: fc 0e 08 1e st\.d lr\[lr<<0x1\],lr ++ *[0-9a-f]*: e2 09 08 14 st\.d r1\[r9<<0x1\],r4 ++ *[0-9a-f]*: f4 02 08 14 st\.d r10\[r2<<0x1\],r4 ++ *[0-9a-f]*: f8 06 08 0e st\.d r12\[r6\],lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 09 0f st\.w pc\[pc\],pc ++ *[0-9a-f]*: f8 0c 09 3c st\.w r12\[r12<<0x3\],r12 ++ *[0-9a-f]*: ea 05 09 25 st\.w r5\[r5<<0x2\],r5 ++ *[0-9a-f]*: e8 04 09 14 st\.w r4\[r4<<0x1\],r4 ++ *[0-9a-f]*: fc 0e 09 1e st\.w lr\[lr<<0x1\],lr ++ *[0-9a-f]*: e2 0a 09 03 st\.w r1\[r10\],r3 ++ *[0-9a-f]*: e0 0a 09 19 st\.w r0\[r10<<0x1\],r9 ++ *[0-9a-f]*: e8 05 09 3f st\.w r4\[r5<<0x3\],pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0a 0f st\.h pc\[pc\],pc ++ *[0-9a-f]*: f8 0c 0a 3c st\.h r12\[r12<<0x3\],r12 ++ *[0-9a-f]*: ea 05 0a 25 st\.h r5\[r5<<0x2\],r5 ++ *[0-9a-f]*: e8 04 0a 14 st\.h r4\[r4<<0x1\],r4 ++ *[0-9a-f]*: fc 0e 0a 1e st\.h lr\[lr<<0x1\],lr ++ *[0-9a-f]*: e4 09 0a 0b st\.h r2\[r9\],r11 ++ *[0-9a-f]*: ea 01 0a 2c st\.h r5\[r1<<0x2\],r12 ++ *[0-9a-f]*: fe 08 0a 23 st\.h pc\[r8<<0x2\],r3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0b 0f st\.b pc\[pc\],pc ++ *[0-9a-f]*: f8 0c 0b 3c st\.b r12\[r12<<0x3\],r12 ++ *[0-9a-f]*: ea 05 0b 25 st\.b r5\[r5<<0x2\],r5 ++ *[0-9a-f]*: e8 04 0b 14 st\.b r4\[r4<<0x1\],r4 ++ *[0-9a-f]*: fc 0e 0b 1e st\.b lr\[lr<<0x1\],lr ++ *[0-9a-f]*: e2 08 0b 16 st\.b r1\[r8<<0x1\],r6 ++ *[0-9a-f]*: fc 0e 0b 31 st\.b lr\[lr<<0x3\],r1 ++ *[0-9a-f]*: ea 00 0b 2f st\.b r5\[r0<<0x2\],pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0c 0f divs pc,pc,pc ++ *[0-9a-f]*: f8 0c 0c 0c divs r12,r12,r12 ++ *[0-9a-f]*: ea 05 0c 05 divs r5,r5,r5 ++ *[0-9a-f]*: e8 04 0c 04 divs r4,r4,r4 ++ *[0-9a-f]*: fc 0e 0c 0e divs lr,lr,lr ++ *[0-9a-f]*: fe 0f 0c 03 divs r3,pc,pc ++ *[0-9a-f]*: f8 02 0c 09 divs r9,r12,r2 ++ *[0-9a-f]*: e8 01 0c 07 divs r7,r4,r1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 0f add pc,pc ++ *[0-9a-f]*: 18 0c add r12,r12 ++ *[0-9a-f]*: 0a 05 add r5,r5 ++ *[0-9a-f]*: 08 04 add r4,r4 ++ *[0-9a-f]*: 1c 0e add lr,lr ++ *[0-9a-f]*: 12 0c add r12,r9 ++ *[0-9a-f]*: 06 06 add r6,r3 ++ *[0-9a-f]*: 18 0a add r10,r12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 1f sub pc,pc ++ *[0-9a-f]*: 18 1c sub r12,r12 ++ *[0-9a-f]*: 0a 15 sub r5,r5 ++ *[0-9a-f]*: 08 14 sub r4,r4 ++ *[0-9a-f]*: 1c 1e sub lr,lr ++ *[0-9a-f]*: 0c 1e sub lr,r6 ++ *[0-9a-f]*: 1a 10 sub r0,sp ++ *[0-9a-f]*: 18 16 sub r6,r12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 2f rsub pc,pc ++ *[0-9a-f]*: 18 2c rsub r12,r12 ++ *[0-9a-f]*: 0a 25 rsub r5,r5 ++ *[0-9a-f]*: 08 24 rsub r4,r4 ++ *[0-9a-f]*: 1c 2e rsub lr,lr ++ *[0-9a-f]*: 1a 2b rsub r11,sp ++ *[0-9a-f]*: 08 27 rsub r7,r4 ++ *[0-9a-f]*: 02 29 rsub r9,r1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 3f cp\.w pc,pc ++ *[0-9a-f]*: 18 3c cp\.w r12,r12 ++ *[0-9a-f]*: 0a 35 cp\.w r5,r5 ++ *[0-9a-f]*: 08 34 cp\.w r4,r4 ++ *[0-9a-f]*: 1c 3e cp\.w lr,lr ++ *[0-9a-f]*: 04 36 cp\.w r6,r2 ++ *[0-9a-f]*: 12 30 cp\.w r0,r9 ++ *[0-9a-f]*: 1a 33 cp\.w r3,sp ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 4f or pc,pc ++ *[0-9a-f]*: 18 4c or r12,r12 ++ *[0-9a-f]*: 0a 45 or r5,r5 ++ *[0-9a-f]*: 08 44 or r4,r4 ++ *[0-9a-f]*: 1c 4e or lr,lr ++ *[0-9a-f]*: 12 44 or r4,r9 ++ *[0-9a-f]*: 08 4b or r11,r4 ++ *[0-9a-f]*: 00 44 or r4,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 5f eor pc,pc ++ *[0-9a-f]*: 18 5c eor r12,r12 ++ *[0-9a-f]*: 0a 55 eor r5,r5 ++ *[0-9a-f]*: 08 54 eor r4,r4 ++ *[0-9a-f]*: 1c 5e eor lr,lr ++ *[0-9a-f]*: 16 5c eor r12,r11 ++ *[0-9a-f]*: 02 50 eor r0,r1 ++ *[0-9a-f]*: 1e 55 eor r5,pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 6f and pc,pc ++ *[0-9a-f]*: 18 6c and r12,r12 ++ *[0-9a-f]*: 0a 65 and r5,r5 ++ *[0-9a-f]*: 08 64 and r4,r4 ++ *[0-9a-f]*: 1c 6e and lr,lr ++ *[0-9a-f]*: 02 68 and r8,r1 ++ *[0-9a-f]*: 1a 60 and r0,sp ++ *[0-9a-f]*: 0a 6a and r10,r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 7f tst pc,pc ++ *[0-9a-f]*: 18 7c tst r12,r12 ++ *[0-9a-f]*: 0a 75 tst r5,r5 ++ *[0-9a-f]*: 08 74 tst r4,r4 ++ *[0-9a-f]*: 1c 7e tst lr,lr ++ *[0-9a-f]*: 18 70 tst r0,r12 ++ *[0-9a-f]*: 0c 7a tst r10,r6 ++ *[0-9a-f]*: 08 7d tst sp,r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 8f andn pc,pc ++ *[0-9a-f]*: 18 8c andn r12,r12 ++ *[0-9a-f]*: 0a 85 andn r5,r5 ++ *[0-9a-f]*: 08 84 andn r4,r4 ++ *[0-9a-f]*: 1c 8e andn lr,lr ++ *[0-9a-f]*: 18 89 andn r9,r12 ++ *[0-9a-f]*: 1a 8b andn r11,sp ++ *[0-9a-f]*: 0a 8c andn r12,r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e 9f mov pc,pc ++ *[0-9a-f]*: 18 9c mov r12,r12 ++ *[0-9a-f]*: 0a 95 mov r5,r5 ++ *[0-9a-f]*: 08 94 mov r4,r4 ++ *[0-9a-f]*: 1c 9e mov lr,lr ++ *[0-9a-f]*: 12 95 mov r5,r9 ++ *[0-9a-f]*: 16 9b mov r11,r11 ++ *[0-9a-f]*: 1c 92 mov r2,lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e af st\.w pc\+\+,pc ++ *[0-9a-f]*: 18 ac st\.w r12\+\+,r12 ++ *[0-9a-f]*: 0a a5 st\.w r5\+\+,r5 ++ *[0-9a-f]*: 08 a4 st\.w r4\+\+,r4 ++ *[0-9a-f]*: 1c ae st\.w lr\+\+,lr ++ *[0-9a-f]*: 02 ab st\.w r1\+\+,r11 ++ *[0-9a-f]*: 1a a0 st\.w sp\+\+,r0 ++ *[0-9a-f]*: 1a a1 st\.w sp\+\+,r1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e bf st\.h pc\+\+,pc ++ *[0-9a-f]*: 18 bc st\.h r12\+\+,r12 ++ *[0-9a-f]*: 0a b5 st\.h r5\+\+,r5 ++ *[0-9a-f]*: 08 b4 st\.h r4\+\+,r4 ++ *[0-9a-f]*: 1c be st\.h lr\+\+,lr ++ *[0-9a-f]*: 18 bd st\.h r12\+\+,sp ++ *[0-9a-f]*: 0e be st\.h r7\+\+,lr ++ *[0-9a-f]*: 0e b4 st\.h r7\+\+,r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e cf st\.b pc\+\+,pc ++ *[0-9a-f]*: 18 cc st\.b r12\+\+,r12 ++ *[0-9a-f]*: 0a c5 st\.b r5\+\+,r5 ++ *[0-9a-f]*: 08 c4 st\.b r4\+\+,r4 ++ *[0-9a-f]*: 1c ce st\.b lr\+\+,lr ++ *[0-9a-f]*: 12 cd st\.b r9\+\+,sp ++ *[0-9a-f]*: 02 cd st\.b r1\+\+,sp ++ *[0-9a-f]*: 00 c4 st\.b r0\+\+,r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e df st\.w --pc,pc ++ *[0-9a-f]*: 18 dc st\.w --r12,r12 ++ *[0-9a-f]*: 0a d5 st\.w --r5,r5 ++ *[0-9a-f]*: 08 d4 st\.w --r4,r4 ++ *[0-9a-f]*: 1c de st\.w --lr,lr ++ *[0-9a-f]*: 02 d7 st\.w --r1,r7 ++ *[0-9a-f]*: 06 d9 st\.w --r3,r9 ++ *[0-9a-f]*: 0a d5 st\.w --r5,r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e ef st\.h --pc,pc ++ *[0-9a-f]*: 18 ec st\.h --r12,r12 ++ *[0-9a-f]*: 0a e5 st\.h --r5,r5 ++ *[0-9a-f]*: 08 e4 st\.h --r4,r4 ++ *[0-9a-f]*: 1c ee st\.h --lr,lr ++ *[0-9a-f]*: 0a e7 st\.h --r5,r7 ++ *[0-9a-f]*: 10 e8 st\.h --r8,r8 ++ *[0-9a-f]*: 0e e2 st\.h --r7,r2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1e ff st\.b --pc,pc ++ *[0-9a-f]*: 18 fc st\.b --r12,r12 ++ *[0-9a-f]*: 0a f5 st\.b --r5,r5 ++ *[0-9a-f]*: 08 f4 st\.b --r4,r4 ++ *[0-9a-f]*: 1c fe st\.b --lr,lr ++ *[0-9a-f]*: 1a fd st\.b --sp,sp ++ *[0-9a-f]*: 1a fb st\.b --sp,r11 ++ *[0-9a-f]*: 08 f5 st\.b --r4,r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 0f ld\.w pc,pc\+\+ ++ *[0-9a-f]*: 19 0c ld\.w r12,r12\+\+ ++ *[0-9a-f]*: 0b 05 ld\.w r5,r5\+\+ ++ *[0-9a-f]*: 09 04 ld\.w r4,r4\+\+ ++ *[0-9a-f]*: 1d 0e ld\.w lr,lr\+\+ ++ *[0-9a-f]*: 0f 03 ld\.w r3,r7\+\+ ++ *[0-9a-f]*: 1d 03 ld\.w r3,lr\+\+ ++ *[0-9a-f]*: 0b 0c ld\.w r12,r5\+\+ ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 1f ld\.sh pc,pc\+\+ ++ *[0-9a-f]*: 19 1c ld\.sh r12,r12\+\+ ++ *[0-9a-f]*: 0b 15 ld\.sh r5,r5\+\+ ++ *[0-9a-f]*: 09 14 ld\.sh r4,r4\+\+ ++ *[0-9a-f]*: 1d 1e ld\.sh lr,lr\+\+ ++ *[0-9a-f]*: 05 1b ld\.sh r11,r2\+\+ ++ *[0-9a-f]*: 11 12 ld\.sh r2,r8\+\+ ++ *[0-9a-f]*: 0d 17 ld\.sh r7,r6\+\+ ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 2f ld\.uh pc,pc\+\+ ++ *[0-9a-f]*: 19 2c ld\.uh r12,r12\+\+ ++ *[0-9a-f]*: 0b 25 ld\.uh r5,r5\+\+ ++ *[0-9a-f]*: 09 24 ld\.uh r4,r4\+\+ ++ *[0-9a-f]*: 1d 2e ld\.uh lr,lr\+\+ ++ *[0-9a-f]*: 0f 26 ld\.uh r6,r7\+\+ ++ *[0-9a-f]*: 17 2a ld\.uh r10,r11\+\+ ++ *[0-9a-f]*: 09 2e ld\.uh lr,r4\+\+ ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 3f ld\.ub pc,pc\+\+ ++ *[0-9a-f]*: 19 3c ld\.ub r12,r12\+\+ ++ *[0-9a-f]*: 0b 35 ld\.ub r5,r5\+\+ ++ *[0-9a-f]*: 09 34 ld\.ub r4,r4\+\+ ++ *[0-9a-f]*: 1d 3e ld\.ub lr,lr\+\+ ++ *[0-9a-f]*: 1d 38 ld\.ub r8,lr\+\+ ++ *[0-9a-f]*: 19 3c ld\.ub r12,r12\+\+ ++ *[0-9a-f]*: 15 3b ld\.ub r11,r10\+\+ ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 4f ld\.w pc,--pc ++ *[0-9a-f]*: 19 4c ld\.w r12,--r12 ++ *[0-9a-f]*: 0b 45 ld\.w r5,--r5 ++ *[0-9a-f]*: 09 44 ld\.w r4,--r4 ++ *[0-9a-f]*: 1d 4e ld\.w lr,--lr ++ *[0-9a-f]*: 1d 4a ld\.w r10,--lr ++ *[0-9a-f]*: 13 4c ld\.w r12,--r9 ++ *[0-9a-f]*: 0b 46 ld\.w r6,--r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 5f ld\.sh pc,--pc ++ *[0-9a-f]*: 19 5c ld\.sh r12,--r12 ++ *[0-9a-f]*: 0b 55 ld\.sh r5,--r5 ++ *[0-9a-f]*: 09 54 ld\.sh r4,--r4 ++ *[0-9a-f]*: 1d 5e ld\.sh lr,--lr ++ *[0-9a-f]*: 15 5f ld\.sh pc,--r10 ++ *[0-9a-f]*: 07 56 ld\.sh r6,--r3 ++ *[0-9a-f]*: 0d 54 ld\.sh r4,--r6 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 6f ld\.uh pc,--pc ++ *[0-9a-f]*: 19 6c ld\.uh r12,--r12 ++ *[0-9a-f]*: 0b 65 ld\.uh r5,--r5 ++ *[0-9a-f]*: 09 64 ld\.uh r4,--r4 ++ *[0-9a-f]*: 1d 6e ld\.uh lr,--lr ++ *[0-9a-f]*: 05 63 ld\.uh r3,--r2 ++ *[0-9a-f]*: 01 61 ld\.uh r1,--r0 ++ *[0-9a-f]*: 13 62 ld\.uh r2,--r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 7f ld\.ub pc,--pc ++ *[0-9a-f]*: 19 7c ld\.ub r12,--r12 ++ *[0-9a-f]*: 0b 75 ld\.ub r5,--r5 ++ *[0-9a-f]*: 09 74 ld\.ub r4,--r4 ++ *[0-9a-f]*: 1d 7e ld\.ub lr,--lr ++ *[0-9a-f]*: 03 71 ld\.ub r1,--r1 ++ *[0-9a-f]*: 0d 70 ld\.ub r0,--r6 ++ *[0-9a-f]*: 0f 72 ld\.ub r2,--r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 8f ld\.ub pc,pc\[0x0\] ++ *[0-9a-f]*: 19 fc ld\.ub r12,r12\[0x7\] ++ *[0-9a-f]*: 0b c5 ld\.ub r5,r5\[0x4\] ++ *[0-9a-f]*: 09 b4 ld\.ub r4,r4\[0x3\] ++ *[0-9a-f]*: 1d 9e ld\.ub lr,lr\[0x1\] ++ *[0-9a-f]*: 13 e6 ld\.ub r6,r9\[0x6\] ++ *[0-9a-f]*: 1d c2 ld\.ub r2,lr\[0x4\] ++ *[0-9a-f]*: 11 81 ld\.ub r1,r8\[0x0\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 20 0d sub sp,0 ++ *[0-9a-f]*: 2f fd sub sp,-4 ++ *[0-9a-f]*: 28 0d sub sp,-512 ++ *[0-9a-f]*: 27 fd sub sp,508 ++ *[0-9a-f]*: 20 1d sub sp,4 ++ *[0-9a-f]*: 20 bd sub sp,44 ++ *[0-9a-f]*: 20 2d sub sp,8 ++ *[0-9a-f]*: 25 7d sub sp,348 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 20 0f sub pc,0 ++ *[0-9a-f]*: 2f fc sub r12,-1 ++ *[0-9a-f]*: 28 05 sub r5,-128 ++ *[0-9a-f]*: 27 f4 sub r4,127 ++ *[0-9a-f]*: 20 1e sub lr,1 ++ *[0-9a-f]*: 2d 76 sub r6,-41 ++ *[0-9a-f]*: 22 54 sub r4,37 ++ *[0-9a-f]*: 23 8c sub r12,56 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 30 0f mov pc,0 ++ *[0-9a-f]*: 3f fc mov r12,-1 ++ *[0-9a-f]*: 38 05 mov r5,-128 ++ *[0-9a-f]*: 37 f4 mov r4,127 ++ *[0-9a-f]*: 30 1e mov lr,1 ++ *[0-9a-f]*: 30 ef mov pc,14 ++ *[0-9a-f]*: 39 c6 mov r6,-100 ++ *[0-9a-f]*: 38 6e mov lr,-122 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 40 0f lddsp pc,sp\[0x0\] ++ *[0-9a-f]*: 47 fc lddsp r12,sp\[0x1fc\] ++ *[0-9a-f]*: 44 05 lddsp r5,sp\[0x100\] ++ *[0-9a-f]*: 43 f4 lddsp r4,sp\[0xfc\] ++ *[0-9a-f]*: 40 1e lddsp lr,sp\[0x4\] ++ *[0-9a-f]*: 44 0e lddsp lr,sp\[0x100\] ++ *[0-9a-f]*: 40 5c lddsp r12,sp\[0x14\] ++ *[0-9a-f]*: 47 69 lddsp r9,sp\[0x1d8\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 48 0f lddpc pc,[0-9a-f]* <.*> ++ *[0-9a-f]*: 4f f0 lddpc r0,[0-9a-f]* <.*> ++ *[0-9a-f]*: 4c 08 lddpc r8,[0-9a-f]* <.*> ++ *[0-9a-f]*: 4b f7 lddpc r7,[0-9a-f]* <.*> ++ *[0-9a-f]*: 48 1e lddpc lr,[0-9a-f]* <.*> ++ *[0-9a-f]*: 4f 6d lddpc sp,[0-9a-f]* <.*> ++ *[0-9a-f]*: 49 e6 lddpc r6,[0-9a-f]* <.*> ++ *[0-9a-f]*: 48 7b lddpc r11,[0-9a-f]* <.*> ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 50 0f stdsp sp\[0x0\],pc ++ *[0-9a-f]*: 57 fc stdsp sp\[0x1fc\],r12 ++ *[0-9a-f]*: 54 05 stdsp sp\[0x100\],r5 ++ *[0-9a-f]*: 53 f4 stdsp sp\[0xfc\],r4 ++ *[0-9a-f]*: 50 1e stdsp sp\[0x4\],lr ++ *[0-9a-f]*: 54 cf stdsp sp\[0x130\],pc ++ *[0-9a-f]*: 54 00 stdsp sp\[0x100\],r0 ++ *[0-9a-f]*: 55 45 stdsp sp\[0x150\],r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 58 0f cp.w pc,0 ++ *[0-9a-f]*: 5b fc cp.w r12,-1 ++ *[0-9a-f]*: 5a 05 cp.w r5,-32 ++ *[0-9a-f]*: 59 f4 cp.w r4,31 ++ *[0-9a-f]*: 58 1e cp.w lr,1 ++ *[0-9a-f]*: 58 38 cp.w r8,3 ++ *[0-9a-f]*: 59 0e cp.w lr,16 ++ *[0-9a-f]*: 5a 67 cp.w r7,-26 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 0f acr pc ++ *[0-9a-f]*: 5c 0c acr r12 ++ *[0-9a-f]*: 5c 05 acr r5 ++ *[0-9a-f]*: 5c 04 acr r4 ++ *[0-9a-f]*: 5c 0e acr lr ++ *[0-9a-f]*: 5c 02 acr r2 ++ *[0-9a-f]*: 5c 0c acr r12 ++ *[0-9a-f]*: 5c 0f acr pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 1f scr pc ++ *[0-9a-f]*: 5c 1c scr r12 ++ *[0-9a-f]*: 5c 15 scr r5 ++ *[0-9a-f]*: 5c 14 scr r4 ++ *[0-9a-f]*: 5c 1e scr lr ++ *[0-9a-f]*: 5c 1f scr pc ++ *[0-9a-f]*: 5c 16 scr r6 ++ *[0-9a-f]*: 5c 11 scr r1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 2f cpc pc ++ *[0-9a-f]*: 5c 2c cpc r12 ++ *[0-9a-f]*: 5c 25 cpc r5 ++ *[0-9a-f]*: 5c 24 cpc r4 ++ *[0-9a-f]*: 5c 2e cpc lr ++ *[0-9a-f]*: 5c 2f cpc pc ++ *[0-9a-f]*: 5c 24 cpc r4 ++ *[0-9a-f]*: 5c 29 cpc r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 3f neg pc ++ *[0-9a-f]*: 5c 3c neg r12 ++ *[0-9a-f]*: 5c 35 neg r5 ++ *[0-9a-f]*: 5c 34 neg r4 ++ *[0-9a-f]*: 5c 3e neg lr ++ *[0-9a-f]*: 5c 37 neg r7 ++ *[0-9a-f]*: 5c 31 neg r1 ++ *[0-9a-f]*: 5c 39 neg r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 4f abs pc ++ *[0-9a-f]*: 5c 4c abs r12 ++ *[0-9a-f]*: 5c 45 abs r5 ++ *[0-9a-f]*: 5c 44 abs r4 ++ *[0-9a-f]*: 5c 4e abs lr ++ *[0-9a-f]*: 5c 46 abs r6 ++ *[0-9a-f]*: 5c 46 abs r6 ++ *[0-9a-f]*: 5c 44 abs r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 5f castu\.b pc ++ *[0-9a-f]*: 5c 5c castu\.b r12 ++ *[0-9a-f]*: 5c 55 castu\.b r5 ++ *[0-9a-f]*: 5c 54 castu\.b r4 ++ *[0-9a-f]*: 5c 5e castu\.b lr ++ *[0-9a-f]*: 5c 57 castu\.b r7 ++ *[0-9a-f]*: 5c 5d castu\.b sp ++ *[0-9a-f]*: 5c 59 castu\.b r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 6f casts\.b pc ++ *[0-9a-f]*: 5c 6c casts\.b r12 ++ *[0-9a-f]*: 5c 65 casts\.b r5 ++ *[0-9a-f]*: 5c 64 casts\.b r4 ++ *[0-9a-f]*: 5c 6e casts\.b lr ++ *[0-9a-f]*: 5c 6b casts\.b r11 ++ *[0-9a-f]*: 5c 61 casts\.b r1 ++ *[0-9a-f]*: 5c 6a casts\.b r10 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 7f castu\.h pc ++ *[0-9a-f]*: 5c 7c castu\.h r12 ++ *[0-9a-f]*: 5c 75 castu\.h r5 ++ *[0-9a-f]*: 5c 74 castu\.h r4 ++ *[0-9a-f]*: 5c 7e castu\.h lr ++ *[0-9a-f]*: 5c 7a castu\.h r10 ++ *[0-9a-f]*: 5c 7b castu\.h r11 ++ *[0-9a-f]*: 5c 71 castu\.h r1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 8f casts\.h pc ++ *[0-9a-f]*: 5c 8c casts\.h r12 ++ *[0-9a-f]*: 5c 85 casts\.h r5 ++ *[0-9a-f]*: 5c 84 casts\.h r4 ++ *[0-9a-f]*: 5c 8e casts\.h lr ++ *[0-9a-f]*: 5c 80 casts\.h r0 ++ *[0-9a-f]*: 5c 85 casts\.h r5 ++ *[0-9a-f]*: 5c 89 casts\.h r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c 9f brev pc ++ *[0-9a-f]*: 5c 9c brev r12 ++ *[0-9a-f]*: 5c 95 brev r5 ++ *[0-9a-f]*: 5c 94 brev r4 ++ *[0-9a-f]*: 5c 9e brev lr ++ *[0-9a-f]*: 5c 95 brev r5 ++ *[0-9a-f]*: 5c 9a brev r10 ++ *[0-9a-f]*: 5c 98 brev r8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c af swap\.h pc ++ *[0-9a-f]*: 5c ac swap\.h r12 ++ *[0-9a-f]*: 5c a5 swap\.h r5 ++ *[0-9a-f]*: 5c a4 swap\.h r4 ++ *[0-9a-f]*: 5c ae swap\.h lr ++ *[0-9a-f]*: 5c a7 swap\.h r7 ++ *[0-9a-f]*: 5c a0 swap\.h r0 ++ *[0-9a-f]*: 5c a8 swap\.h r8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c bf swap\.b pc ++ *[0-9a-f]*: 5c bc swap\.b r12 ++ *[0-9a-f]*: 5c b5 swap\.b r5 ++ *[0-9a-f]*: 5c b4 swap\.b r4 ++ *[0-9a-f]*: 5c be swap\.b lr ++ *[0-9a-f]*: 5c ba swap\.b r10 ++ *[0-9a-f]*: 5c bc swap\.b r12 ++ *[0-9a-f]*: 5c b1 swap\.b r1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c cf swap\.bh pc ++ *[0-9a-f]*: 5c cc swap\.bh r12 ++ *[0-9a-f]*: 5c c5 swap\.bh r5 ++ *[0-9a-f]*: 5c c4 swap\.bh r4 ++ *[0-9a-f]*: 5c ce swap\.bh lr ++ *[0-9a-f]*: 5c c9 swap\.bh r9 ++ *[0-9a-f]*: 5c c4 swap\.bh r4 ++ *[0-9a-f]*: 5c c1 swap\.bh r1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c df com pc ++ *[0-9a-f]*: 5c dc com r12 ++ *[0-9a-f]*: 5c d5 com r5 ++ *[0-9a-f]*: 5c d4 com r4 ++ *[0-9a-f]*: 5c de com lr ++ *[0-9a-f]*: 5c d2 com r2 ++ *[0-9a-f]*: 5c d2 com r2 ++ *[0-9a-f]*: 5c d7 com r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c ef tnbz pc ++ *[0-9a-f]*: 5c ec tnbz r12 ++ *[0-9a-f]*: 5c e5 tnbz r5 ++ *[0-9a-f]*: 5c e4 tnbz r4 ++ *[0-9a-f]*: 5c ee tnbz lr ++ *[0-9a-f]*: 5c e8 tnbz r8 ++ *[0-9a-f]*: 5c ec tnbz r12 ++ *[0-9a-f]*: 5c ef tnbz pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5c ff rol pc ++ *[0-9a-f]*: 5c fc rol r12 ++ *[0-9a-f]*: 5c f5 rol r5 ++ *[0-9a-f]*: 5c f4 rol r4 ++ *[0-9a-f]*: 5c fe rol lr ++ *[0-9a-f]*: 5c fa rol r10 ++ *[0-9a-f]*: 5c f9 rol r9 ++ *[0-9a-f]*: 5c f5 rol r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5d 0f ror pc ++ *[0-9a-f]*: 5d 0c ror r12 ++ *[0-9a-f]*: 5d 05 ror r5 ++ *[0-9a-f]*: 5d 04 ror r4 ++ *[0-9a-f]*: 5d 0e ror lr ++ *[0-9a-f]*: 5d 08 ror r8 ++ *[0-9a-f]*: 5d 04 ror r4 ++ *[0-9a-f]*: 5d 07 ror r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5d 1f icall pc ++ *[0-9a-f]*: 5d 1c icall r12 ++ *[0-9a-f]*: 5d 15 icall r5 ++ *[0-9a-f]*: 5d 14 icall r4 ++ *[0-9a-f]*: 5d 1e icall lr ++ *[0-9a-f]*: 5d 13 icall r3 ++ *[0-9a-f]*: 5d 11 icall r1 ++ *[0-9a-f]*: 5d 13 icall r3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5d 2f mustr pc ++ *[0-9a-f]*: 5d 2c mustr r12 ++ *[0-9a-f]*: 5d 25 mustr r5 ++ *[0-9a-f]*: 5d 24 mustr r4 ++ *[0-9a-f]*: 5d 2e mustr lr ++ *[0-9a-f]*: 5d 21 mustr r1 ++ *[0-9a-f]*: 5d 24 mustr r4 ++ *[0-9a-f]*: 5d 2c mustr r12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5d 3f musfr pc ++ *[0-9a-f]*: 5d 3c musfr r12 ++ *[0-9a-f]*: 5d 35 musfr r5 ++ *[0-9a-f]*: 5d 34 musfr r4 ++ *[0-9a-f]*: 5d 3e musfr lr ++ *[0-9a-f]*: 5d 3b musfr r11 ++ *[0-9a-f]*: 5d 3c musfr r12 ++ *[0-9a-f]*: 5d 32 musfr r2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5e 0f reteq 1 ++ *[0-9a-f]*: 5e fc retal r12 ++ *[0-9a-f]*: 5e 85 retls r5 ++ *[0-9a-f]*: 5e 74 retpl r4 ++ *[0-9a-f]*: 5e 1e retne -1 ++ *[0-9a-f]*: 5e 90 retgt r0 ++ *[0-9a-f]*: 5e 9c retgt r12 ++ *[0-9a-f]*: 5e 4a retge r10 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 5f 0f sreq pc ++ *[0-9a-f]*: 5f fc sral r12 ++ *[0-9a-f]*: 5f 85 srls r5 ++ *[0-9a-f]*: 5f 74 srpl r4 ++ *[0-9a-f]*: 5f 1e srne lr ++ *[0-9a-f]*: 5f 50 srlt r0 ++ *[0-9a-f]*: 5f fd sral sp ++ *[0-9a-f]*: 5f 49 srge r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 7e 0f ld\.w pc,pc\[0x0\] ++ *[0-9a-f]*: 79 fc ld\.w r12,r12\[0x7c\] ++ *[0-9a-f]*: 6b 05 ld\.w r5,r5\[0x40\] ++ *[0-9a-f]*: 68 f4 ld\.w r4,r4\[0x3c\] ++ *[0-9a-f]*: 7c 1e ld\.w lr,lr\[0x4\] ++ *[0-9a-f]*: 64 dd ld\.w sp,r2\[0x34\] ++ *[0-9a-f]*: 62 29 ld\.w r9,r1\[0x8\] ++ *[0-9a-f]*: 7a f5 ld\.w r5,sp\[0x3c\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 9e 0f ld\.sh pc,pc\[0x0\] ++ *[0-9a-f]*: 98 7c ld\.sh r12,r12\[0xe\] ++ *[0-9a-f]*: 8a 45 ld\.sh r5,r5\[0x8\] ++ *[0-9a-f]*: 88 34 ld\.sh r4,r4\[0x6\] ++ *[0-9a-f]*: 9c 1e ld\.sh lr,lr\[0x2\] ++ *[0-9a-f]*: 84 44 ld\.sh r4,r2\[0x8\] ++ *[0-9a-f]*: 9c 5d ld\.sh sp,lr\[0xa\] ++ *[0-9a-f]*: 96 12 ld\.sh r2,r11\[0x2\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 9e 8f ld\.uh pc,pc\[0x0\] ++ *[0-9a-f]*: 98 fc ld\.uh r12,r12\[0xe\] ++ *[0-9a-f]*: 8a c5 ld\.uh r5,r5\[0x8\] ++ *[0-9a-f]*: 88 b4 ld\.uh r4,r4\[0x6\] ++ *[0-9a-f]*: 9c 9e ld\.uh lr,lr\[0x2\] ++ *[0-9a-f]*: 80 da ld\.uh r10,r0\[0xa\] ++ *[0-9a-f]*: 96 c8 ld\.uh r8,r11\[0x8\] ++ *[0-9a-f]*: 84 ea ld\.uh r10,r2\[0xc\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 9f 0f st\.w pc\[0x0\],pc ++ *[0-9a-f]*: 99 fc st\.w r12\[0x3c\],r12 ++ *[0-9a-f]*: 8b 85 st\.w r5\[0x20\],r5 ++ *[0-9a-f]*: 89 74 st\.w r4\[0x1c\],r4 ++ *[0-9a-f]*: 9d 1e st\.w lr\[0x4\],lr ++ *[0-9a-f]*: 8f bb st\.w r7\[0x2c\],r11 ++ *[0-9a-f]*: 85 66 st\.w r2\[0x18\],r6 ++ *[0-9a-f]*: 89 39 st\.w r4\[0xc\],r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: be 0f st\.h pc\[0x0\],pc ++ *[0-9a-f]*: b8 7c st\.h r12\[0xe\],r12 ++ *[0-9a-f]*: aa 45 st\.h r5\[0x8\],r5 ++ *[0-9a-f]*: a8 34 st\.h r4\[0x6\],r4 ++ *[0-9a-f]*: bc 1e st\.h lr\[0x2\],lr ++ *[0-9a-f]*: bc 5c st\.h lr\[0xa\],r12 ++ *[0-9a-f]*: ac 20 st\.h r6\[0x4\],r0 ++ *[0-9a-f]*: aa 6d st\.h r5\[0xc\],sp ++ ++[0-9a-f]* : ++ *[0-9a-f]*: be 8f st\.b pc\[0x0\],pc ++ *[0-9a-f]*: b8 fc st\.b r12\[0x7\],r12 ++ *[0-9a-f]*: aa c5 st\.b r5\[0x4\],r5 ++ *[0-9a-f]*: a8 b4 st\.b r4\[0x3\],r4 ++ *[0-9a-f]*: bc 9e st\.b lr\[0x1\],lr ++ *[0-9a-f]*: b8 e9 st\.b r12\[0x6\],r9 ++ *[0-9a-f]*: a4 be st\.b r2\[0x3\],lr ++ *[0-9a-f]*: a2 bb st\.b r1\[0x3\],r11 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: bf 00 ld\.d r0,pc ++ *[0-9a-f]*: b9 0e ld\.d lr,r12 ++ *[0-9a-f]*: ab 08 ld\.d r8,r5 ++ *[0-9a-f]*: a9 06 ld\.d r6,r4 ++ *[0-9a-f]*: bd 02 ld\.d r2,lr ++ *[0-9a-f]*: af 0e ld\.d lr,r7 ++ *[0-9a-f]*: a9 04 ld\.d r4,r4 ++ *[0-9a-f]*: bf 0e ld\.d lr,pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: bf 01 ld\.d r0,pc\+\+ ++ *[0-9a-f]*: b9 0f ld\.d lr,r12\+\+ ++ *[0-9a-f]*: ab 09 ld\.d r8,r5\+\+ ++ *[0-9a-f]*: a9 07 ld\.d r6,r4\+\+ ++ *[0-9a-f]*: bd 03 ld\.d r2,lr\+\+ ++ *[0-9a-f]*: ab 0f ld\.d lr,r5\+\+ ++ *[0-9a-f]*: b7 0d ld\.d r12,r11\+\+ ++ *[0-9a-f]*: b9 03 ld\.d r2,r12\+\+ ++ ++[0-9a-f]* : ++ *[0-9a-f]*: bf 10 ld\.d r0,--pc ++ *[0-9a-f]*: b9 1e ld\.d lr,--r12 ++ *[0-9a-f]*: ab 18 ld\.d r8,--r5 ++ *[0-9a-f]*: a9 16 ld\.d r6,--r4 ++ *[0-9a-f]*: bd 12 ld\.d r2,--lr ++ *[0-9a-f]*: a1 18 ld\.d r8,--r0 ++ *[0-9a-f]*: bf 1a ld\.d r10,--pc ++ *[0-9a-f]*: a9 12 ld\.d r2,--r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: bf 11 st\.d pc,r0 ++ *[0-9a-f]*: b9 1f st\.d r12,lr ++ *[0-9a-f]*: ab 19 st\.d r5,r8 ++ *[0-9a-f]*: a9 17 st\.d r4,r6 ++ *[0-9a-f]*: bd 13 st\.d lr,r2 ++ *[0-9a-f]*: a1 1d st\.d r0,r12 ++ *[0-9a-f]*: bb 15 st\.d sp,r4 ++ *[0-9a-f]*: b9 1d st\.d r12,r12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: bf 20 st\.d pc\+\+,r0 ++ *[0-9a-f]*: b9 2e st\.d r12\+\+,lr ++ *[0-9a-f]*: ab 28 st\.d r5\+\+,r8 ++ *[0-9a-f]*: a9 26 st\.d r4\+\+,r6 ++ *[0-9a-f]*: bd 22 st\.d lr\+\+,r2 ++ *[0-9a-f]*: bb 26 st\.d sp\+\+,r6 ++ *[0-9a-f]*: b5 26 st\.d r10\+\+,r6 ++ *[0-9a-f]*: af 22 st\.d r7\+\+,r2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: bf 21 st\.d --pc,r0 ++ *[0-9a-f]*: b9 2f st\.d --r12,lr ++ *[0-9a-f]*: ab 29 st\.d --r5,r8 ++ *[0-9a-f]*: a9 27 st\.d --r4,r6 ++ *[0-9a-f]*: bd 23 st\.d --lr,r2 ++ *[0-9a-f]*: a7 27 st\.d --r3,r6 ++ *[0-9a-f]*: bd 23 st\.d --lr,r2 ++ *[0-9a-f]*: a1 25 st\.d --r0,r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: bf 3f mul pc,pc ++ *[0-9a-f]*: b9 3c mul r12,r12 ++ *[0-9a-f]*: ab 35 mul r5,r5 ++ *[0-9a-f]*: a9 34 mul r4,r4 ++ *[0-9a-f]*: bd 3e mul lr,lr ++ *[0-9a-f]*: bd 3a mul r10,lr ++ *[0-9a-f]*: b1 30 mul r0,r8 ++ *[0-9a-f]*: ab 38 mul r8,r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: a1 4f asr pc,0x0 ++ *[0-9a-f]*: bf 5c asr r12,0x1f ++ *[0-9a-f]*: b1 45 asr r5,0x10 ++ *[0-9a-f]*: af 54 asr r4,0xf ++ *[0-9a-f]*: a1 5e asr lr,0x1 ++ *[0-9a-f]*: b7 56 asr r6,0x17 ++ *[0-9a-f]*: b3 46 asr r6,0x12 ++ *[0-9a-f]*: a9 45 asr r5,0x8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: a1 6f lsl pc,0x0 ++ *[0-9a-f]*: bf 7c lsl r12,0x1f ++ *[0-9a-f]*: b1 65 lsl r5,0x10 ++ *[0-9a-f]*: af 74 lsl r4,0xf ++ *[0-9a-f]*: a1 7e lsl lr,0x1 ++ *[0-9a-f]*: ad 7c lsl r12,0xd ++ *[0-9a-f]*: b1 66 lsl r6,0x10 ++ *[0-9a-f]*: b9 71 lsl r1,0x19 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: a1 8f lsr pc,0x0 ++ *[0-9a-f]*: bf 9c lsr r12,0x1f ++ *[0-9a-f]*: b1 85 lsr r5,0x10 ++ *[0-9a-f]*: af 94 lsr r4,0xf ++ *[0-9a-f]*: a1 9e lsr lr,0x1 ++ *[0-9a-f]*: a1 90 lsr r0,0x1 ++ *[0-9a-f]*: ab 88 lsr r8,0xa ++ *[0-9a-f]*: bb 87 lsr r7,0x1a ++ ++[0-9a-f]* : ++ *[0-9a-f]*: a1 af sbr pc,0x0 ++ *[0-9a-f]*: bf bc sbr r12,0x1f ++ *[0-9a-f]*: b1 a5 sbr r5,0x10 ++ *[0-9a-f]*: af b4 sbr r4,0xf ++ *[0-9a-f]*: a1 be sbr lr,0x1 ++ *[0-9a-f]*: bf b8 sbr r8,0x1f ++ *[0-9a-f]*: b7 a6 sbr r6,0x16 ++ *[0-9a-f]*: b7 b1 sbr r1,0x17 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: a1 cf cbr pc,0x0 ++ *[0-9a-f]*: bf dc cbr r12,0x1f ++ *[0-9a-f]*: b1 c5 cbr r5,0x10 ++ *[0-9a-f]*: af d4 cbr r4,0xf ++ *[0-9a-f]*: a1 de cbr lr,0x1 ++ *[0-9a-f]*: ab cc cbr r12,0xa ++ *[0-9a-f]*: b7 c7 cbr r7,0x16 ++ *[0-9a-f]*: a9 d8 cbr r8,0x9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: c0 00 breq [0-9a-f]* <.*> ++ *[0-9a-f]*: cf f7 brpl [0-9a-f]* <.*> ++ *[0-9a-f]*: c8 04 brge [0-9a-f]* <.*> ++ *[0-9a-f]*: c7 f3 brcs [0-9a-f]* <.*> ++ *[0-9a-f]*: c0 11 brne [0-9a-f]* <.*> ++ *[0-9a-f]*: c7 33 brcs [0-9a-f]* <.*> ++ *[0-9a-f]*: cf 70 breq [0-9a-f]* <.*> ++ *[0-9a-f]*: c0 60 breq [0-9a-f]* <.*> ++ ++[0-9a-f]* : ++ *[0-9a-f]*: c0 08 rjmp [0-9a-f]* <.*> ++ *[0-9a-f]*: cf fb rjmp [0-9a-f]* <.*> ++ *[0-9a-f]*: c0 0a rjmp [0-9a-f]* <.*> ++ *[0-9a-f]*: cf f9 rjmp [0-9a-f]* <.*> ++ *[0-9a-f]*: c0 18 rjmp [0-9a-f]* <.*> ++ *[0-9a-f]*: c1 fa rjmp [0-9a-f]* <.*> ++ *[0-9a-f]*: c0 78 rjmp [0-9a-f]* <.*> ++ *[0-9a-f]*: cf ea rjmp [0-9a-f]* <.*> ++ ++[0-9a-f]* : ++ *[0-9a-f]*: c0 0c rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: cf ff rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: c0 0e rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: cf fd rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: c0 1c rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: c6 cc rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: cf 7e rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: c1 ae rcall [0-9a-f]* <.*> ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d0 00 acall 0x0 ++ *[0-9a-f]*: df f0 acall 0x3fc ++ *[0-9a-f]*: d8 00 acall 0x200 ++ *[0-9a-f]*: d7 f0 acall 0x1fc ++ *[0-9a-f]*: d0 10 acall 0x4 ++ *[0-9a-f]*: d5 90 acall 0x164 ++ *[0-9a-f]*: d4 c0 acall 0x130 ++ *[0-9a-f]*: d2 b0 acall 0xac ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d7 33 scall ++ *[0-9a-f]*: d7 33 scall ++ *[0-9a-f]*: d7 33 scall ++ *[0-9a-f]*: d7 33 scall ++ *[0-9a-f]*: d7 33 scall ++ *[0-9a-f]*: d7 33 scall ++ *[0-9a-f]*: d7 33 scall ++ *[0-9a-f]*: d7 33 scall ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d8 02 popm pc ++ *[0-9a-f]*: dd fa popm r0-r11,pc,r12=-1 ++ *[0-9a-f]*: d4 02 popm lr ++ *[0-9a-f]*: db fa popm r0-r11,pc,r12=1 ++ *[0-9a-f]*: d0 12 popm r0-r3 ++ *[0-9a-f]*: d8 e2 popm r4-r10,pc ++ *[0-9a-f]*: d9 1a popm r0-r3,r11,pc,r12=0 ++ *[0-9a-f]*: d7 b2 popm r0-r7,r10-r12,lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d8 01 pushm pc ++ *[0-9a-f]*: df f1 pushm r0-r12,lr-pc ++ *[0-9a-f]*: d8 01 pushm pc ++ *[0-9a-f]*: d7 f1 pushm r0-r12,lr ++ *[0-9a-f]*: d0 11 pushm r0-r3 ++ *[0-9a-f]*: dc c1 pushm r8-r10,lr-pc ++ *[0-9a-f]*: d0 91 pushm r0-r3,r10 ++ *[0-9a-f]*: d2 41 pushm r8-r9,r12 ++ ++[0-9a-f]* : ++.* ++.* ++.* ++.* ++.* ++.* ++.* ++.* ++ ++[0-9a-f]* : ++.* ++.* ++.* ++.* ++.* ++.* ++.* ++.* ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d0 03 csrfcz 0x0 ++ *[0-9a-f]*: d1 f3 csrfcz 0x1f ++ *[0-9a-f]*: d1 03 csrfcz 0x10 ++ *[0-9a-f]*: d0 f3 csrfcz 0xf ++ *[0-9a-f]*: d0 13 csrfcz 0x1 ++ *[0-9a-f]*: d0 53 csrfcz 0x5 ++ *[0-9a-f]*: d0 d3 csrfcz 0xd ++ *[0-9a-f]*: d1 73 csrfcz 0x17 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d2 03 ssrf 0x0 ++ *[0-9a-f]*: d3 f3 ssrf 0x1f ++ *[0-9a-f]*: d3 03 ssrf 0x10 ++ *[0-9a-f]*: d2 f3 ssrf 0xf ++ *[0-9a-f]*: d2 13 ssrf 0x1 ++ *[0-9a-f]*: d3 d3 ssrf 0x1d ++ *[0-9a-f]*: d2 d3 ssrf 0xd ++ *[0-9a-f]*: d2 d3 ssrf 0xd ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d4 03 csrf 0x0 ++ *[0-9a-f]*: d5 f3 csrf 0x1f ++ *[0-9a-f]*: d5 03 csrf 0x10 ++ *[0-9a-f]*: d4 f3 csrf 0xf ++ *[0-9a-f]*: d4 13 csrf 0x1 ++ *[0-9a-f]*: d4 a3 csrf 0xa ++ *[0-9a-f]*: d4 f3 csrf 0xf ++ *[0-9a-f]*: d4 b3 csrf 0xb ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d6 03 rete ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d6 13 rets ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d6 23 retd ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d6 33 retj ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d6 43 tlbr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d6 53 tlbs ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d6 63 tlbw ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d6 73 breakpoint ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d6 83 incjosp 1 ++ *[0-9a-f]*: d6 93 incjosp 2 ++ *[0-9a-f]*: d6 a3 incjosp 3 ++ *[0-9a-f]*: d6 b3 incjosp 4 ++ *[0-9a-f]*: d6 c3 incjosp -4 ++ *[0-9a-f]*: d6 d3 incjosp -3 ++ *[0-9a-f]*: d6 e3 incjosp -2 ++ *[0-9a-f]*: d6 f3 incjosp -1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d7 03 nop ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d7 13 popjc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: d7 23 pushjc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 00 0f add pc,pc,pc ++ *[0-9a-f]*: f8 0c 00 3c add r12,r12,r12<<0x3 ++ *[0-9a-f]*: ea 05 00 25 add r5,r5,r5<<0x2 ++ *[0-9a-f]*: e8 04 00 14 add r4,r4,r4<<0x1 ++ *[0-9a-f]*: fc 0e 00 1e add lr,lr,lr<<0x1 ++ *[0-9a-f]*: f8 00 00 10 add r0,r12,r0<<0x1 ++ *[0-9a-f]*: f8 04 00 09 add r9,r12,r4 ++ *[0-9a-f]*: f8 07 00 2c add r12,r12,r7<<0x2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 01 0f sub pc,pc,pc ++ *[0-9a-f]*: f8 0c 01 3c sub r12,r12,r12<<0x3 ++ *[0-9a-f]*: ea 05 01 25 sub r5,r5,r5<<0x2 ++ *[0-9a-f]*: e8 04 01 14 sub r4,r4,r4<<0x1 ++ *[0-9a-f]*: fc 0e 01 1e sub lr,lr,lr<<0x1 ++ *[0-9a-f]*: e6 04 01 0d sub sp,r3,r4 ++ *[0-9a-f]*: ee 03 01 03 sub r3,r7,r3 ++ *[0-9a-f]*: f4 0d 01 1d sub sp,r10,sp<<0x1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0d 0f divu pc,pc,pc ++ *[0-9a-f]*: f8 0c 0d 0c divu r12,r12,r12 ++ *[0-9a-f]*: ea 05 0d 05 divu r5,r5,r5 ++ *[0-9a-f]*: e8 04 0d 04 divu r4,r4,r4 ++ *[0-9a-f]*: fc 0e 0d 0e divu lr,lr,lr ++ *[0-9a-f]*: e8 0f 0d 0d divu sp,r4,pc ++ *[0-9a-f]*: ea 0d 0d 05 divu r5,r5,sp ++ *[0-9a-f]*: fa 00 0d 0a divu r10,sp,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0e 0f addhh\.w pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 0e 3c addhh\.w r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 0e 35 addhh\.w r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 0e 04 addhh\.w r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 0e 3e addhh\.w lr,lr:t,lr:t ++ *[0-9a-f]*: e0 03 0e 00 addhh\.w r0,r0:b,r3:b ++ *[0-9a-f]*: f8 07 0e 2e addhh\.w lr,r12:t,r7:b ++ *[0-9a-f]*: f4 02 0e 23 addhh\.w r3,r10:t,r2:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0f 0f subhh\.w pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 0f 3c subhh\.w r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 0f 35 subhh\.w r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 0f 04 subhh\.w r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 0f 3e subhh\.w lr,lr:t,lr:t ++ *[0-9a-f]*: e2 07 0f 2a subhh\.w r10,r1:t,r7:b ++ *[0-9a-f]*: f4 0e 0f 3f subhh\.w pc,r10:t,lr:t ++ *[0-9a-f]*: e0 0c 0f 23 subhh\.w r3,r0:t,r12:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 00 4f adc pc,pc,pc ++ *[0-9a-f]*: f8 0c 00 4c adc r12,r12,r12 ++ *[0-9a-f]*: ea 05 00 45 adc r5,r5,r5 ++ *[0-9a-f]*: e8 04 00 44 adc r4,r4,r4 ++ *[0-9a-f]*: fc 0e 00 4e adc lr,lr,lr ++ *[0-9a-f]*: e0 07 00 44 adc r4,r0,r7 ++ *[0-9a-f]*: e8 03 00 4d adc sp,r4,r3 ++ *[0-9a-f]*: f8 00 00 42 adc r2,r12,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 01 4f sbc pc,pc,pc ++ *[0-9a-f]*: f8 0c 01 4c sbc r12,r12,r12 ++ *[0-9a-f]*: ea 05 01 45 sbc r5,r5,r5 ++ *[0-9a-f]*: e8 04 01 44 sbc r4,r4,r4 ++ *[0-9a-f]*: fc 0e 01 4e sbc lr,lr,lr ++ *[0-9a-f]*: ee 09 01 46 sbc r6,r7,r9 ++ *[0-9a-f]*: f0 05 01 40 sbc r0,r8,r5 ++ *[0-9a-f]*: e0 04 01 41 sbc r1,r0,r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 02 4f mul pc,pc,pc ++ *[0-9a-f]*: f8 0c 02 4c mul r12,r12,r12 ++ *[0-9a-f]*: ea 05 02 45 mul r5,r5,r5 ++ *[0-9a-f]*: e8 04 02 44 mul r4,r4,r4 ++ *[0-9a-f]*: fc 0e 02 4e mul lr,lr,lr ++ *[0-9a-f]*: e0 00 02 4f mul pc,r0,r0 ++ *[0-9a-f]*: fe 0e 02 48 mul r8,pc,lr ++ *[0-9a-f]*: f8 0f 02 44 mul r4,r12,pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 03 4f mac pc,pc,pc ++ *[0-9a-f]*: f8 0c 03 4c mac r12,r12,r12 ++ *[0-9a-f]*: ea 05 03 45 mac r5,r5,r5 ++ *[0-9a-f]*: e8 04 03 44 mac r4,r4,r4 ++ *[0-9a-f]*: fc 0e 03 4e mac lr,lr,lr ++ *[0-9a-f]*: e8 00 03 4a mac r10,r4,r0 ++ *[0-9a-f]*: fc 00 03 47 mac r7,lr,r0 ++ *[0-9a-f]*: f2 0c 03 42 mac r2,r9,r12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 04 4f muls\.d pc,pc,pc ++ *[0-9a-f]*: f8 0c 04 4c muls\.d r12,r12,r12 ++ *[0-9a-f]*: ea 05 04 45 muls\.d r5,r5,r5 ++ *[0-9a-f]*: e8 04 04 44 muls\.d r4,r4,r4 ++ *[0-9a-f]*: fc 0e 04 4e muls\.d lr,lr,lr ++ *[0-9a-f]*: f0 0e 04 42 muls\.d r2,r8,lr ++ *[0-9a-f]*: e0 0b 04 44 muls\.d r4,r0,r11 ++ *[0-9a-f]*: fc 06 04 45 muls\.d r5,lr,r6 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 05 40 macs\.d r0,pc,pc ++ *[0-9a-f]*: f8 0c 05 4e macs\.d lr,r12,r12 ++ *[0-9a-f]*: ea 05 05 48 macs\.d r8,r5,r5 ++ *[0-9a-f]*: e8 04 05 46 macs\.d r6,r4,r4 ++ *[0-9a-f]*: fc 0e 05 42 macs\.d r2,lr,lr ++ *[0-9a-f]*: e2 09 05 48 macs\.d r8,r1,r9 ++ *[0-9a-f]*: f0 08 05 4e macs\.d lr,r8,r8 ++ *[0-9a-f]*: e6 0c 05 44 macs\.d r4,r3,r12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 06 40 mulu\.d r0,pc,pc ++ *[0-9a-f]*: f8 0c 06 4e mulu\.d lr,r12,r12 ++ *[0-9a-f]*: ea 05 06 48 mulu\.d r8,r5,r5 ++ *[0-9a-f]*: e8 04 06 46 mulu\.d r6,r4,r4 ++ *[0-9a-f]*: fc 0e 06 42 mulu\.d r2,lr,lr ++ *[0-9a-f]*: ea 00 06 46 mulu\.d r6,r5,r0 ++ *[0-9a-f]*: ec 01 06 44 mulu\.d r4,r6,r1 ++ *[0-9a-f]*: f0 02 06 48 mulu\.d r8,r8,r2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 07 40 macu\.d r0,pc,pc ++ *[0-9a-f]*: f8 0c 07 4e macu\.d lr,r12,r12 ++ *[0-9a-f]*: ea 05 07 48 macu\.d r8,r5,r5 ++ *[0-9a-f]*: e8 04 07 46 macu\.d r6,r4,r4 ++ *[0-9a-f]*: fc 0e 07 42 macu\.d r2,lr,lr ++ *[0-9a-f]*: fa 0b 07 46 macu\.d r6,sp,r11 ++ *[0-9a-f]*: e8 08 07 42 macu\.d r2,r4,r8 ++ *[0-9a-f]*: f4 09 07 46 macu\.d r6,r10,r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 08 4f asr pc,pc,pc ++ *[0-9a-f]*: f8 0c 08 4c asr r12,r12,r12 ++ *[0-9a-f]*: ea 05 08 45 asr r5,r5,r5 ++ *[0-9a-f]*: e8 04 08 44 asr r4,r4,r4 ++ *[0-9a-f]*: fc 0e 08 4e asr lr,lr,lr ++ *[0-9a-f]*: ec 0f 08 4f asr pc,r6,pc ++ *[0-9a-f]*: ec 0c 08 40 asr r0,r6,r12 ++ *[0-9a-f]*: fa 00 08 44 asr r4,sp,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 09 4f lsl pc,pc,pc ++ *[0-9a-f]*: f8 0c 09 4c lsl r12,r12,r12 ++ *[0-9a-f]*: ea 05 09 45 lsl r5,r5,r5 ++ *[0-9a-f]*: e8 04 09 44 lsl r4,r4,r4 ++ *[0-9a-f]*: fc 0e 09 4e lsl lr,lr,lr ++ *[0-9a-f]*: ea 0e 09 4e lsl lr,r5,lr ++ *[0-9a-f]*: fe 03 09 45 lsl r5,pc,r3 ++ *[0-9a-f]*: fe 09 09 41 lsl r1,pc,r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0a 4f lsr pc,pc,pc ++ *[0-9a-f]*: f8 0c 0a 4c lsr r12,r12,r12 ++ *[0-9a-f]*: ea 05 0a 45 lsr r5,r5,r5 ++ *[0-9a-f]*: e8 04 0a 44 lsr r4,r4,r4 ++ *[0-9a-f]*: fc 0e 0a 4e lsr lr,lr,lr ++ *[0-9a-f]*: e8 01 0a 42 lsr r2,r4,r1 ++ *[0-9a-f]*: e2 06 0a 45 lsr r5,r1,r6 ++ *[0-9a-f]*: ec 07 0a 4d lsr sp,r6,r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0b 4f xchg pc,pc,pc ++ *[0-9a-f]*: f8 0c 0b 4c xchg r12,r12,r12 ++ *[0-9a-f]*: ea 05 0b 45 xchg r5,r5,r5 ++ *[0-9a-f]*: e8 04 0b 44 xchg r4,r4,r4 ++ *[0-9a-f]*: fc 0e 0b 4e xchg lr,lr,lr ++ *[0-9a-f]*: e8 0d 0b 4e xchg lr,r4,sp ++ *[0-9a-f]*: ea 0c 0b 41 xchg r1,r5,r12 ++ *[0-9a-f]*: f8 00 0b 4e xchg lr,r12,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0c 4f max pc,pc,pc ++ *[0-9a-f]*: f8 0c 0c 4c max r12,r12,r12 ++ *[0-9a-f]*: ea 05 0c 45 max r5,r5,r5 ++ *[0-9a-f]*: e8 04 0c 44 max r4,r4,r4 ++ *[0-9a-f]*: fc 0e 0c 4e max lr,lr,lr ++ *[0-9a-f]*: e4 0d 0c 4e max lr,r2,sp ++ *[0-9a-f]*: f4 09 0c 44 max r4,r10,r9 ++ *[0-9a-f]*: f2 0e 0c 4e max lr,r9,lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0d 4f min pc,pc,pc ++ *[0-9a-f]*: f8 0c 0d 4c min r12,r12,r12 ++ *[0-9a-f]*: ea 05 0d 45 min r5,r5,r5 ++ *[0-9a-f]*: e8 04 0d 44 min r4,r4,r4 ++ *[0-9a-f]*: fc 0e 0d 4e min lr,lr,lr ++ *[0-9a-f]*: ee 08 0d 49 min r9,r7,r8 ++ *[0-9a-f]*: ea 05 0d 4d min sp,r5,r5 ++ *[0-9a-f]*: e2 04 0d 44 min r4,r1,r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0e 4f addabs pc,pc,pc ++ *[0-9a-f]*: f8 0c 0e 4c addabs r12,r12,r12 ++ *[0-9a-f]*: ea 05 0e 45 addabs r5,r5,r5 ++ *[0-9a-f]*: e8 04 0e 44 addabs r4,r4,r4 ++ *[0-9a-f]*: fc 0e 0e 4e addabs lr,lr,lr ++ *[0-9a-f]*: f4 00 0e 47 addabs r7,r10,r0 ++ *[0-9a-f]*: f2 07 0e 49 addabs r9,r9,r7 ++ *[0-9a-f]*: f0 0c 0e 42 addabs r2,r8,r12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 01 8f mulnhh\.w pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 01 bc mulnhh\.w r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 01 b5 mulnhh\.w r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 01 84 mulnhh\.w r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 01 be mulnhh\.w lr,lr:t,lr:t ++ *[0-9a-f]*: fa 09 01 ab mulnhh\.w r11,sp:t,r9:b ++ *[0-9a-f]*: e8 0e 01 9d mulnhh\.w sp,r4:b,lr:t ++ *[0-9a-f]*: e4 0b 01 ac mulnhh\.w r12,r2:t,r11:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 02 80 mulnwh\.d r0,pc,pc:b ++ *[0-9a-f]*: f8 0c 02 9e mulnwh\.d lr,r12,r12:t ++ *[0-9a-f]*: ea 05 02 98 mulnwh\.d r8,r5,r5:t ++ *[0-9a-f]*: e8 04 02 86 mulnwh\.d r6,r4,r4:b ++ *[0-9a-f]*: fc 0e 02 92 mulnwh\.d r2,lr,lr:t ++ *[0-9a-f]*: e6 02 02 9e mulnwh\.d lr,r3,r2:t ++ *[0-9a-f]*: ea 09 02 84 mulnwh\.d r4,r5,r9:b ++ *[0-9a-f]*: e8 04 02 9c mulnwh\.d r12,r4,r4:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 04 8f machh\.w pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 04 bc machh\.w r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 04 b5 machh\.w r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 04 84 machh\.w r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 04 be machh\.w lr,lr:t,lr:t ++ *[0-9a-f]*: ea 01 04 9e machh\.w lr,r5:b,r1:t ++ *[0-9a-f]*: ec 07 04 89 machh\.w r9,r6:b,r7:b ++ *[0-9a-f]*: fc 0c 04 a5 machh\.w r5,lr:t,r12:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 05 80 machh\.d r0,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 05 be machh\.d lr,r12:t,r12:t ++ *[0-9a-f]*: ea 05 05 b8 machh\.d r8,r5:t,r5:t ++ *[0-9a-f]*: e8 04 05 86 machh\.d r6,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 05 b2 machh\.d r2,lr:t,lr:t ++ *[0-9a-f]*: e0 08 05 8a machh\.d r10,r0:b,r8:b ++ *[0-9a-f]*: e8 05 05 9e machh\.d lr,r4:b,r5:t ++ *[0-9a-f]*: e0 04 05 98 machh\.d r8,r0:b,r4:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 06 8f macsathh\.w pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 06 bc macsathh\.w r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 06 b5 macsathh\.w r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 06 84 macsathh\.w r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 06 be macsathh\.w lr,lr:t,lr:t ++ *[0-9a-f]*: ee 0f 06 b7 macsathh\.w r7,r7:t,pc:t ++ *[0-9a-f]*: e4 04 06 a4 macsathh\.w r4,r2:t,r4:b ++ *[0-9a-f]*: f0 03 06 b4 macsathh\.w r4,r8:t,r3:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 07 8f mulhh\.w pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 07 bc mulhh\.w r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 07 b5 mulhh\.w r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 07 84 mulhh\.w r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 07 be mulhh\.w lr,lr:t,lr:t ++ *[0-9a-f]*: e8 09 07 a7 mulhh\.w r7,r4:t,r9:b ++ *[0-9a-f]*: e6 07 07 bf mulhh\.w pc,r3:t,r7:t ++ *[0-9a-f]*: e8 09 07 9f mulhh\.w pc,r4:b,r9:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 08 8f mulsathh\.h pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 08 bc mulsathh\.h r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 08 b5 mulsathh\.h r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 08 84 mulsathh\.h r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 08 be mulsathh\.h lr,lr:t,lr:t ++ *[0-9a-f]*: e2 0d 08 83 mulsathh\.h r3,r1:b,sp:b ++ *[0-9a-f]*: fc 0b 08 ab mulsathh\.h r11,lr:t,r11:b ++ *[0-9a-f]*: f0 0b 08 98 mulsathh\.h r8,r8:b,r11:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 09 8f mulsathh\.w pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 09 bc mulsathh\.w r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 09 b5 mulsathh\.w r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 09 84 mulsathh\.w r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 09 be mulsathh\.w lr,lr:t,lr:t ++ *[0-9a-f]*: f6 06 09 ae mulsathh\.w lr,r11:t,r6:b ++ *[0-9a-f]*: ec 07 09 96 mulsathh\.w r6,r6:b,r7:t ++ *[0-9a-f]*: e4 03 09 8a mulsathh\.w r10,r2:b,r3:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0a 8f mulsatrndhh\.h pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 0a bc mulsatrndhh\.h r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 0a b5 mulsatrndhh\.h r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 0a 84 mulsatrndhh\.h r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 0a be mulsatrndhh\.h lr,lr:t,lr:t ++ *[0-9a-f]*: ec 09 0a 8b mulsatrndhh\.h r11,r6:b,r9:b ++ *[0-9a-f]*: e6 08 0a 9b mulsatrndhh\.h r11,r3:b,r8:t ++ *[0-9a-f]*: fa 07 0a b5 mulsatrndhh\.h r5,sp:t,r7:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0b 8f mulsatrndwh\.w pc,pc,pc:b ++ *[0-9a-f]*: f8 0c 0b 9c mulsatrndwh\.w r12,r12,r12:t ++ *[0-9a-f]*: ea 05 0b 95 mulsatrndwh\.w r5,r5,r5:t ++ *[0-9a-f]*: e8 04 0b 84 mulsatrndwh\.w r4,r4,r4:b ++ *[0-9a-f]*: fc 0e 0b 9e mulsatrndwh\.w lr,lr,lr:t ++ *[0-9a-f]*: f8 00 0b 85 mulsatrndwh\.w r5,r12,r0:b ++ *[0-9a-f]*: f4 0f 0b 87 mulsatrndwh\.w r7,r10,pc:b ++ *[0-9a-f]*: f0 05 0b 9a mulsatrndwh\.w r10,r8,r5:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0c 80 macwh\.d r0,pc,pc:b ++ *[0-9a-f]*: f8 0c 0c 9e macwh\.d lr,r12,r12:t ++ *[0-9a-f]*: ea 05 0c 98 macwh\.d r8,r5,r5:t ++ *[0-9a-f]*: e8 04 0c 86 macwh\.d r6,r4,r4:b ++ *[0-9a-f]*: fc 0e 0c 92 macwh\.d r2,lr,lr:t ++ *[0-9a-f]*: f4 0c 0c 94 macwh\.d r4,r10,r12:t ++ *[0-9a-f]*: ee 0d 0c 84 macwh\.d r4,r7,sp:b ++ *[0-9a-f]*: f2 0b 0c 8e macwh\.d lr,r9,r11:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0d 80 mulwh\.d r0,pc,pc:b ++ *[0-9a-f]*: f8 0c 0d 9e mulwh\.d lr,r12,r12:t ++ *[0-9a-f]*: ea 05 0d 98 mulwh\.d r8,r5,r5:t ++ *[0-9a-f]*: e8 04 0d 86 mulwh\.d r6,r4,r4:b ++ *[0-9a-f]*: fc 0e 0d 92 mulwh\.d r2,lr,lr:t ++ *[0-9a-f]*: ea 01 0d 8c mulwh\.d r12,r5,r1:b ++ *[0-9a-f]*: e2 03 0d 90 mulwh\.d r0,r1,r3:t ++ *[0-9a-f]*: f2 02 0d 80 mulwh\.d r0,r9,r2:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0e 8f mulsatwh\.w pc,pc,pc:b ++ *[0-9a-f]*: f8 0c 0e 9c mulsatwh\.w r12,r12,r12:t ++ *[0-9a-f]*: ea 05 0e 95 mulsatwh\.w r5,r5,r5:t ++ *[0-9a-f]*: e8 04 0e 84 mulsatwh\.w r4,r4,r4:b ++ *[0-9a-f]*: fc 0e 0e 9e mulsatwh\.w lr,lr,lr:t ++ *[0-9a-f]*: fe 0a 0e 9b mulsatwh\.w r11,pc,r10:t ++ *[0-9a-f]*: f8 09 0e 9d mulsatwh\.w sp,r12,r9:t ++ *[0-9a-f]*: e6 02 0e 90 mulsatwh\.w r0,r3,r2:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 0f 8f ld\.w pc,pc\[pc:b<<2\] ++ *[0-9a-f]*: f8 0c 0f bc ld\.w r12,r12\[r12:t<<2\] ++ *[0-9a-f]*: ea 05 0f a5 ld\.w r5,r5\[r5:u<<2\] ++ *[0-9a-f]*: e8 04 0f 94 ld\.w r4,r4\[r4:l<<2\] ++ *[0-9a-f]*: fc 0e 0f 9e ld\.w lr,lr\[lr:l<<2\] ++ *[0-9a-f]*: f4 06 0f 99 ld\.w r9,r10\[r6:l<<2\] ++ *[0-9a-f]*: f4 0a 0f 82 ld\.w r2,r10\[r10:b<<2\] ++ *[0-9a-f]*: ea 0f 0f 8b ld\.w r11,r5\[pc:b<<2\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 00 cf satadd\.w pc,pc,pc ++ *[0-9a-f]*: f8 0c 00 cc satadd\.w r12,r12,r12 ++ *[0-9a-f]*: ea 05 00 c5 satadd\.w r5,r5,r5 ++ *[0-9a-f]*: e8 04 00 c4 satadd\.w r4,r4,r4 ++ *[0-9a-f]*: fc 0e 00 ce satadd\.w lr,lr,lr ++ *[0-9a-f]*: f0 0b 00 c4 satadd\.w r4,r8,r11 ++ *[0-9a-f]*: f8 06 00 c3 satadd\.w r3,r12,r6 ++ *[0-9a-f]*: fc 09 00 c3 satadd\.w r3,lr,r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 01 cf satsub\.w pc,pc,pc ++ *[0-9a-f]*: f8 0c 01 cc satsub\.w r12,r12,r12 ++ *[0-9a-f]*: ea 05 01 c5 satsub\.w r5,r5,r5 ++ *[0-9a-f]*: e8 04 01 c4 satsub\.w r4,r4,r4 ++ *[0-9a-f]*: fc 0e 01 ce satsub\.w lr,lr,lr ++ *[0-9a-f]*: fa 00 01 c8 satsub\.w r8,sp,r0 ++ *[0-9a-f]*: f0 04 01 c9 satsub\.w r9,r8,r4 ++ *[0-9a-f]*: fc 02 01 cf satsub\.w pc,lr,r2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 02 cf satadd\.h pc,pc,pc ++ *[0-9a-f]*: f8 0c 02 cc satadd\.h r12,r12,r12 ++ *[0-9a-f]*: ea 05 02 c5 satadd\.h r5,r5,r5 ++ *[0-9a-f]*: e8 04 02 c4 satadd\.h r4,r4,r4 ++ *[0-9a-f]*: fc 0e 02 ce satadd\.h lr,lr,lr ++ *[0-9a-f]*: e6 09 02 c7 satadd\.h r7,r3,r9 ++ *[0-9a-f]*: e0 02 02 c1 satadd\.h r1,r0,r2 ++ *[0-9a-f]*: e8 0e 02 c1 satadd\.h r1,r4,lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 03 cf satsub\.h pc,pc,pc ++ *[0-9a-f]*: f8 0c 03 cc satsub\.h r12,r12,r12 ++ *[0-9a-f]*: ea 05 03 c5 satsub\.h r5,r5,r5 ++ *[0-9a-f]*: e8 04 03 c4 satsub\.h r4,r4,r4 ++ *[0-9a-f]*: fc 0e 03 ce satsub\.h lr,lr,lr ++ *[0-9a-f]*: fc 03 03 ce satsub\.h lr,lr,r3 ++ *[0-9a-f]*: ec 05 03 cb satsub\.h r11,r6,r5 ++ *[0-9a-f]*: fa 00 03 c3 satsub\.h r3,sp,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 10 00 mul pc,pc,0 ++ *[0-9a-f]*: f8 0c 10 ff mul r12,r12,-1 ++ *[0-9a-f]*: ea 05 10 80 mul r5,r5,-128 ++ *[0-9a-f]*: e8 04 10 7f mul r4,r4,127 ++ *[0-9a-f]*: fc 0e 10 01 mul lr,lr,1 ++ *[0-9a-f]*: e4 0c 10 f9 mul r12,r2,-7 ++ *[0-9a-f]*: fe 01 10 5f mul r1,pc,95 ++ *[0-9a-f]*: ec 04 10 13 mul r4,r6,19 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 11 00 rsub pc,pc,0 ++ *[0-9a-f]*: f8 0c 11 ff rsub r12,r12,-1 ++ *[0-9a-f]*: ea 05 11 80 rsub r5,r5,-128 ++ *[0-9a-f]*: e8 04 11 7f rsub r4,r4,127 ++ *[0-9a-f]*: fc 0e 11 01 rsub lr,lr,1 ++ *[0-9a-f]*: fc 09 11 60 rsub r9,lr,96 ++ *[0-9a-f]*: e2 0b 11 38 rsub r11,r1,56 ++ *[0-9a-f]*: ee 00 11 a9 rsub r0,r7,-87 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 12 00 clz pc,pc ++ *[0-9a-f]*: f8 0c 12 00 clz r12,r12 ++ *[0-9a-f]*: ea 05 12 00 clz r5,r5 ++ *[0-9a-f]*: e8 04 12 00 clz r4,r4 ++ *[0-9a-f]*: fc 0e 12 00 clz lr,lr ++ *[0-9a-f]*: e6 02 12 00 clz r2,r3 ++ *[0-9a-f]*: f6 05 12 00 clz r5,r11 ++ *[0-9a-f]*: e6 0f 12 00 clz pc,r3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 13 00 cpc pc,pc ++ *[0-9a-f]*: f8 0c 13 00 cpc r12,r12 ++ *[0-9a-f]*: ea 05 13 00 cpc r5,r5 ++ *[0-9a-f]*: e8 04 13 00 cpc r4,r4 ++ *[0-9a-f]*: fc 0e 13 00 cpc lr,lr ++ *[0-9a-f]*: e8 0f 13 00 cpc pc,r4 ++ *[0-9a-f]*: f2 05 13 00 cpc r5,r9 ++ *[0-9a-f]*: ee 06 13 00 cpc r6,r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 14 00 asr pc,pc,0x0 ++ *[0-9a-f]*: f8 0c 14 1f asr r12,r12,0x1f ++ *[0-9a-f]*: ea 05 14 10 asr r5,r5,0x10 ++ *[0-9a-f]*: e8 04 14 0f asr r4,r4,0xf ++ *[0-9a-f]*: fc 0e 14 01 asr lr,lr,0x1 ++ *[0-9a-f]*: f6 04 14 13 asr r4,r11,0x13 ++ *[0-9a-f]*: fe 0d 14 1a asr sp,pc,0x1a ++ *[0-9a-f]*: fa 0b 14 08 asr r11,sp,0x8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 15 00 lsl pc,pc,0x0 ++ *[0-9a-f]*: f8 0c 15 1f lsl r12,r12,0x1f ++ *[0-9a-f]*: ea 05 15 10 lsl r5,r5,0x10 ++ *[0-9a-f]*: e8 04 15 0f lsl r4,r4,0xf ++ *[0-9a-f]*: fc 0e 15 01 lsl lr,lr,0x1 ++ *[0-9a-f]*: f4 08 15 11 lsl r8,r10,0x11 ++ *[0-9a-f]*: fc 02 15 03 lsl r2,lr,0x3 ++ *[0-9a-f]*: f6 0e 15 0e lsl lr,r11,0xe ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 16 00 lsr pc,pc,0x0 ++ *[0-9a-f]*: f8 0c 16 1f lsr r12,r12,0x1f ++ *[0-9a-f]*: ea 05 16 10 lsr r5,r5,0x10 ++ *[0-9a-f]*: e8 04 16 0f lsr r4,r4,0xf ++ *[0-9a-f]*: fc 0e 16 01 lsr lr,lr,0x1 ++ *[0-9a-f]*: e6 04 16 1f lsr r4,r3,0x1f ++ *[0-9a-f]*: f2 0f 16 0e lsr pc,r9,0xe ++ *[0-9a-f]*: e0 03 16 06 lsr r3,r0,0x6 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 17 00 moveq pc,pc ++ *[0-9a-f]*: f8 0c 17 f0 moval r12,r12 ++ *[0-9a-f]*: ea 05 17 80 movls r5,r5 ++ *[0-9a-f]*: e8 04 17 70 movpl r4,r4 ++ *[0-9a-f]*: fc 0e 17 10 movne lr,lr ++ *[0-9a-f]*: f6 0f 17 10 movne pc,r11 ++ *[0-9a-f]*: e4 0a 17 60 movmi r10,r2 ++ *[0-9a-f]*: f8 08 17 80 movls r8,r12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 0f padd\.h pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 0c padd\.h r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 05 padd\.h r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 04 padd\.h r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 0e padd\.h lr,lr,lr ++ *[0-9a-f]*: e4 07 20 08 padd\.h r8,r2,r7 ++ *[0-9a-f]*: e0 03 20 00 padd\.h r0,r0,r3 ++ *[0-9a-f]*: f6 06 20 0d padd\.h sp,r11,r6 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 1f psub\.h pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 1c psub\.h r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 15 psub\.h r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 14 psub\.h r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 1e psub\.h lr,lr,lr ++ *[0-9a-f]*: ec 08 20 1e psub\.h lr,r6,r8 ++ *[0-9a-f]*: e2 0d 20 10 psub\.h r0,r1,sp ++ *[0-9a-f]*: fe 0d 20 1f psub\.h pc,pc,sp ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 2f paddx\.h pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 2c paddx\.h r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 25 paddx\.h r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 24 paddx\.h r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 2e paddx\.h lr,lr,lr ++ *[0-9a-f]*: fe 01 20 2f paddx\.h pc,pc,r1 ++ *[0-9a-f]*: e8 05 20 2a paddx\.h r10,r4,r5 ++ *[0-9a-f]*: fe 02 20 25 paddx\.h r5,pc,r2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 3f psubx\.h pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 3c psubx\.h r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 35 psubx\.h r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 34 psubx\.h r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 3e psubx\.h lr,lr,lr ++ *[0-9a-f]*: f8 05 20 35 psubx\.h r5,r12,r5 ++ *[0-9a-f]*: f0 03 20 33 psubx\.h r3,r8,r3 ++ *[0-9a-f]*: e4 03 20 35 psubx\.h r5,r2,r3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 4f padds\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 4c padds\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 45 padds\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 44 padds\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 4e padds\.sh lr,lr,lr ++ *[0-9a-f]*: fc 02 20 49 padds\.sh r9,lr,r2 ++ *[0-9a-f]*: f0 01 20 46 padds\.sh r6,r8,r1 ++ *[0-9a-f]*: e8 0a 20 46 padds\.sh r6,r4,r10 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 5f psubs\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 5c psubs\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 55 psubs\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 54 psubs\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 5e psubs\.sh lr,lr,lr ++ *[0-9a-f]*: fc 0b 20 56 psubs\.sh r6,lr,r11 ++ *[0-9a-f]*: f8 04 20 52 psubs\.sh r2,r12,r4 ++ *[0-9a-f]*: f2 00 20 50 psubs\.sh r0,r9,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 6f paddxs\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 6c paddxs\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 65 paddxs\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 64 paddxs\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 6e paddxs\.sh lr,lr,lr ++ *[0-9a-f]*: e6 09 20 60 paddxs\.sh r0,r3,r9 ++ *[0-9a-f]*: f4 0b 20 6f paddxs\.sh pc,r10,r11 ++ *[0-9a-f]*: f4 0f 20 6f paddxs\.sh pc,r10,pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 7f psubxs\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 7c psubxs\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 75 psubxs\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 74 psubxs\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 7e psubxs\.sh lr,lr,lr ++ *[0-9a-f]*: e8 04 20 77 psubxs\.sh r7,r4,r4 ++ *[0-9a-f]*: f0 03 20 77 psubxs\.sh r7,r8,r3 ++ *[0-9a-f]*: ec 05 20 7f psubxs\.sh pc,r6,r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 8f padds\.uh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 8c padds\.uh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 85 padds\.uh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 84 padds\.uh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 8e padds\.uh lr,lr,lr ++ *[0-9a-f]*: f6 07 20 8c padds\.uh r12,r11,r7 ++ *[0-9a-f]*: f0 0e 20 87 padds\.uh r7,r8,lr ++ *[0-9a-f]*: f2 07 20 86 padds\.uh r6,r9,r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 9f psubs\.uh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 9c psubs\.uh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 95 psubs\.uh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 94 psubs\.uh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 9e psubs\.uh lr,lr,lr ++ *[0-9a-f]*: f4 06 20 9e psubs\.uh lr,r10,r6 ++ *[0-9a-f]*: e4 0f 20 9d psubs\.uh sp,r2,pc ++ *[0-9a-f]*: f2 02 20 92 psubs\.uh r2,r9,r2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 af paddxs\.uh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 ac paddxs\.uh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 a5 paddxs\.uh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 a4 paddxs\.uh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 ae paddxs\.uh lr,lr,lr ++ *[0-9a-f]*: f2 05 20 a7 paddxs\.uh r7,r9,r5 ++ *[0-9a-f]*: e2 04 20 a9 paddxs\.uh r9,r1,r4 ++ *[0-9a-f]*: e4 03 20 a5 paddxs\.uh r5,r2,r3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 bf psubxs\.uh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 bc psubxs\.uh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 b5 psubxs\.uh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 b4 psubxs\.uh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 be psubxs\.uh lr,lr,lr ++ *[0-9a-f]*: ea 0d 20 bd psubxs\.uh sp,r5,sp ++ *[0-9a-f]*: ec 06 20 bd psubxs\.uh sp,r6,r6 ++ *[0-9a-f]*: f6 08 20 b3 psubxs\.uh r3,r11,r8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 cf paddh\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 cc paddh\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 c5 paddh\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 c4 paddh\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 ce paddh\.sh lr,lr,lr ++ *[0-9a-f]*: fa 03 20 cc paddh\.sh r12,sp,r3 ++ *[0-9a-f]*: ea 03 20 cf paddh\.sh pc,r5,r3 ++ *[0-9a-f]*: f0 0d 20 c8 paddh\.sh r8,r8,sp ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 df psubh\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 dc psubh\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 d5 psubh\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 d4 psubh\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 de psubh\.sh lr,lr,lr ++ *[0-9a-f]*: ea 08 20 d1 psubh\.sh r1,r5,r8 ++ *[0-9a-f]*: e6 06 20 d7 psubh\.sh r7,r3,r6 ++ *[0-9a-f]*: e6 03 20 d4 psubh\.sh r4,r3,r3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 ef paddxh\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 ec paddxh\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 e5 paddxh\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 e4 paddxh\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 ee paddxh\.sh lr,lr,lr ++ *[0-9a-f]*: e0 04 20 e6 paddxh\.sh r6,r0,r4 ++ *[0-9a-f]*: f0 09 20 e9 paddxh\.sh r9,r8,r9 ++ *[0-9a-f]*: e0 0d 20 e3 paddxh\.sh r3,r0,sp ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 20 ff psubxh\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 20 fc psubxh\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 20 f5 psubxh\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 20 f4 psubxh\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 20 fe psubxh\.sh lr,lr,lr ++ *[0-9a-f]*: fe 0c 20 f4 psubxh\.sh r4,pc,r12 ++ *[0-9a-f]*: e8 06 20 f8 psubxh\.sh r8,r4,r6 ++ *[0-9a-f]*: f2 04 20 fc psubxh\.sh r12,r9,r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 21 0f paddsub\.h pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 21 3c paddsub\.h r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 21 35 paddsub\.h r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 21 04 paddsub\.h r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 21 3e paddsub\.h lr,lr:t,lr:t ++ *[0-9a-f]*: e4 0e 21 25 paddsub\.h r5,r2:t,lr:b ++ *[0-9a-f]*: e2 08 21 07 paddsub\.h r7,r1:b,r8:b ++ *[0-9a-f]*: f4 05 21 36 paddsub\.h r6,r10:t,r5:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 21 4f psubadd\.h pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 21 7c psubadd\.h r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 21 75 psubadd\.h r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 21 44 psubadd\.h r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 21 7e psubadd\.h lr,lr:t,lr:t ++ *[0-9a-f]*: f6 08 21 79 psubadd\.h r9,r11:t,r8:t ++ *[0-9a-f]*: ee 0e 21 7a psubadd\.h r10,r7:t,lr:t ++ *[0-9a-f]*: fe 0f 21 66 psubadd\.h r6,pc:t,pc:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 21 8f paddsubs\.sh pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 21 bc paddsubs\.sh r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 21 b5 paddsubs\.sh r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 21 84 paddsubs\.sh r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 21 be paddsubs\.sh lr,lr:t,lr:t ++ *[0-9a-f]*: fc 00 21 a0 paddsubs\.sh r0,lr:t,r0:b ++ *[0-9a-f]*: e4 04 21 b9 paddsubs\.sh r9,r2:t,r4:t ++ *[0-9a-f]*: f2 0d 21 bc paddsubs\.sh r12,r9:t,sp:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 21 cf psubadds\.sh pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 21 fc psubadds\.sh r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 21 f5 psubadds\.sh r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 21 c4 psubadds\.sh r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 21 fe psubadds\.sh lr,lr:t,lr:t ++ *[0-9a-f]*: fc 01 21 df psubadds\.sh pc,lr:b,r1:t ++ *[0-9a-f]*: e6 0c 21 cb psubadds\.sh r11,r3:b,r12:b ++ *[0-9a-f]*: e4 08 21 fa psubadds\.sh r10,r2:t,r8:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 22 0f paddsubs\.uh pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 22 3c paddsubs\.uh r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 22 35 paddsubs\.uh r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 22 04 paddsubs\.uh r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 22 3e paddsubs\.uh lr,lr:t,lr:t ++ *[0-9a-f]*: e4 03 22 09 paddsubs\.uh r9,r2:b,r3:b ++ *[0-9a-f]*: fa 07 22 1d paddsubs\.uh sp,sp:b,r7:t ++ *[0-9a-f]*: e0 0a 22 1e paddsubs\.uh lr,r0:b,r10:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 22 4f psubadds\.uh pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 22 7c psubadds\.uh r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 22 75 psubadds\.uh r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 22 44 psubadds\.uh r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 22 7e psubadds\.uh lr,lr:t,lr:t ++ *[0-9a-f]*: f2 0f 22 7c psubadds\.uh r12,r9:t,pc:t ++ *[0-9a-f]*: ec 08 22 48 psubadds\.uh r8,r6:b,r8:b ++ *[0-9a-f]*: f0 04 22 48 psubadds\.uh r8,r8:b,r4:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 22 8f paddsubh\.sh pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 22 bc paddsubh\.sh r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 22 b5 paddsubh\.sh r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 22 84 paddsubh\.sh r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 22 be paddsubh\.sh lr,lr:t,lr:t ++ *[0-9a-f]*: f2 09 22 a8 paddsubh\.sh r8,r9:t,r9:b ++ *[0-9a-f]*: fa 01 22 b0 paddsubh\.sh r0,sp:t,r1:t ++ *[0-9a-f]*: e2 00 22 93 paddsubh\.sh r3,r1:b,r0:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 22 cf psubaddh\.sh pc,pc:b,pc:b ++ *[0-9a-f]*: f8 0c 22 fc psubaddh\.sh r12,r12:t,r12:t ++ *[0-9a-f]*: ea 05 22 f5 psubaddh\.sh r5,r5:t,r5:t ++ *[0-9a-f]*: e8 04 22 c4 psubaddh\.sh r4,r4:b,r4:b ++ *[0-9a-f]*: fc 0e 22 fe psubaddh\.sh lr,lr:t,lr:t ++ *[0-9a-f]*: e6 0a 22 e7 psubaddh\.sh r7,r3:t,r10:b ++ *[0-9a-f]*: e4 01 22 f7 psubaddh\.sh r7,r2:t,r1:t ++ *[0-9a-f]*: e6 06 22 cb psubaddh\.sh r11,r3:b,r6:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 0f padd\.b pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 0c padd\.b r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 05 padd\.b r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 04 padd\.b r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 0e padd\.b lr,lr,lr ++ *[0-9a-f]*: ec 0f 23 02 padd\.b r2,r6,pc ++ *[0-9a-f]*: f2 0c 23 08 padd\.b r8,r9,r12 ++ *[0-9a-f]*: f8 03 23 05 padd\.b r5,r12,r3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 1f psub\.b pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 1c psub\.b r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 15 psub\.b r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 14 psub\.b r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 1e psub\.b lr,lr,lr ++ *[0-9a-f]*: f8 0f 23 10 psub\.b r0,r12,pc ++ *[0-9a-f]*: fa 0a 23 17 psub\.b r7,sp,r10 ++ *[0-9a-f]*: fa 0c 23 15 psub\.b r5,sp,r12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 2f padds\.sb pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 2c padds\.sb r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 25 padds\.sb r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 24 padds\.sb r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 2e padds\.sb lr,lr,lr ++ *[0-9a-f]*: f6 04 23 2d padds\.sb sp,r11,r4 ++ *[0-9a-f]*: f4 0b 23 2b padds\.sb r11,r10,r11 ++ *[0-9a-f]*: f8 06 23 25 padds\.sb r5,r12,r6 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 3f psubs\.sb pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 3c psubs\.sb r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 35 psubs\.sb r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 34 psubs\.sb r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 3e psubs\.sb lr,lr,lr ++ *[0-9a-f]*: ec 08 23 37 psubs\.sb r7,r6,r8 ++ *[0-9a-f]*: f4 09 23 3c psubs\.sb r12,r10,r9 ++ *[0-9a-f]*: f6 00 23 3f psubs\.sb pc,r11,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 4f padds\.ub pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 4c padds\.ub r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 45 padds\.ub r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 44 padds\.ub r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 4e padds\.ub lr,lr,lr ++ *[0-9a-f]*: e4 0b 23 43 padds\.ub r3,r2,r11 ++ *[0-9a-f]*: f0 01 23 4a padds\.ub r10,r8,r1 ++ *[0-9a-f]*: f0 0a 23 4b padds\.ub r11,r8,r10 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 5f psubs\.ub pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 5c psubs\.ub r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 55 psubs\.ub r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 54 psubs\.ub r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 5e psubs\.ub lr,lr,lr ++ *[0-9a-f]*: e4 07 23 50 psubs\.ub r0,r2,r7 ++ *[0-9a-f]*: ea 03 23 5e psubs\.ub lr,r5,r3 ++ *[0-9a-f]*: ee 09 23 56 psubs\.ub r6,r7,r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 6f paddh\.ub pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 6c paddh\.ub r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 65 paddh\.ub r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 64 paddh\.ub r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 6e paddh\.ub lr,lr,lr ++ *[0-9a-f]*: e2 00 23 6e paddh\.ub lr,r1,r0 ++ *[0-9a-f]*: ee 07 23 62 paddh\.ub r2,r7,r7 ++ *[0-9a-f]*: e2 02 23 62 paddh\.ub r2,r1,r2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 7f psubh\.ub pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 7c psubh\.ub r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 75 psubh\.ub r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 74 psubh\.ub r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 7e psubh\.ub lr,lr,lr ++ *[0-9a-f]*: e2 06 23 70 psubh\.ub r0,r1,r6 ++ *[0-9a-f]*: fc 0a 23 74 psubh\.ub r4,lr,r10 ++ *[0-9a-f]*: f0 01 23 79 psubh\.ub r9,r8,r1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 8f pmax\.ub pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 8c pmax\.ub r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 85 pmax\.ub r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 84 pmax\.ub r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 8e pmax\.ub lr,lr,lr ++ *[0-9a-f]*: e4 0b 23 8f pmax\.ub pc,r2,r11 ++ *[0-9a-f]*: e2 01 23 8c pmax\.ub r12,r1,r1 ++ *[0-9a-f]*: e4 00 23 85 pmax\.ub r5,r2,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 9f pmax\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 9c pmax\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 95 pmax\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 94 pmax\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 9e pmax\.sh lr,lr,lr ++ *[0-9a-f]*: ec 0c 23 9e pmax\.sh lr,r6,r12 ++ *[0-9a-f]*: fe 05 23 92 pmax\.sh r2,pc,r5 ++ *[0-9a-f]*: e4 07 23 9f pmax\.sh pc,r2,r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 af pmin\.ub pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 ac pmin\.ub r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 a5 pmin\.ub r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 a4 pmin\.ub r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 ae pmin\.ub lr,lr,lr ++ *[0-9a-f]*: e2 05 23 a8 pmin\.ub r8,r1,r5 ++ *[0-9a-f]*: f0 03 23 a1 pmin\.ub r1,r8,r3 ++ *[0-9a-f]*: e4 07 23 a0 pmin\.ub r0,r2,r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 bf pmin\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 bc pmin\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 b5 pmin\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 b4 pmin\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 be pmin\.sh lr,lr,lr ++ *[0-9a-f]*: e8 0a 23 b8 pmin\.sh r8,r4,r10 ++ *[0-9a-f]*: f4 0c 23 be pmin\.sh lr,r10,r12 ++ *[0-9a-f]*: ec 02 23 b2 pmin\.sh r2,r6,r2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 cf pavg\.ub pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 cc pavg\.ub r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 c5 pavg\.ub r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 c4 pavg\.ub r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 ce pavg\.ub lr,lr,lr ++ *[0-9a-f]*: e2 06 23 c0 pavg\.ub r0,r1,r6 ++ *[0-9a-f]*: e6 06 23 c8 pavg\.ub r8,r3,r6 ++ *[0-9a-f]*: f8 0a 23 cf pavg\.ub pc,r12,r10 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 23 df pavg\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 23 dc pavg\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 23 d5 pavg\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 23 d4 pavg\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 23 de pavg\.sh lr,lr,lr ++ *[0-9a-f]*: fe 0d 23 d9 pavg\.sh r9,pc,sp ++ *[0-9a-f]*: fa 03 23 df pavg\.sh pc,sp,r3 ++ *[0-9a-f]*: e2 09 23 d6 pavg\.sh r6,r1,r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e0 0f 23 ef pabs\.sb pc,pc ++ *[0-9a-f]*: e0 0c 23 ec pabs\.sb r12,r12 ++ *[0-9a-f]*: e0 05 23 e5 pabs\.sb r5,r5 ++ *[0-9a-f]*: e0 04 23 e4 pabs\.sb r4,r4 ++ *[0-9a-f]*: e0 0e 23 ee pabs\.sb lr,lr ++ *[0-9a-f]*: e0 06 23 eb pabs\.sb r11,r6 ++ *[0-9a-f]*: e0 09 23 ee pabs\.sb lr,r9 ++ *[0-9a-f]*: e0 07 23 ed pabs\.sb sp,r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e0 0f 23 ff pabs\.sh pc,pc ++ *[0-9a-f]*: e0 0c 23 fc pabs\.sh r12,r12 ++ *[0-9a-f]*: e0 05 23 f5 pabs\.sh r5,r5 ++ *[0-9a-f]*: e0 04 23 f4 pabs\.sh r4,r4 ++ *[0-9a-f]*: e0 0e 23 fe pabs\.sh lr,lr ++ *[0-9a-f]*: e0 03 23 ff pabs\.sh pc,r3 ++ *[0-9a-f]*: e0 07 23 f5 pabs\.sh r5,r7 ++ *[0-9a-f]*: e0 00 23 f4 pabs\.sh r4,r0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 24 0f psad pc,pc,pc ++ *[0-9a-f]*: f8 0c 24 0c psad r12,r12,r12 ++ *[0-9a-f]*: ea 05 24 05 psad r5,r5,r5 ++ *[0-9a-f]*: e8 04 24 04 psad r4,r4,r4 ++ *[0-9a-f]*: fc 0e 24 0e psad lr,lr,lr ++ *[0-9a-f]*: f6 0b 24 09 psad r9,r11,r11 ++ *[0-9a-f]*: e8 0d 24 0e psad lr,r4,sp ++ *[0-9a-f]*: e8 05 24 0e psad lr,r4,r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 00 24 1f pasr\.b pc,pc,0x0 ++ *[0-9a-f]*: f8 07 24 1c pasr\.b r12,r12,0x7 ++ *[0-9a-f]*: ea 04 24 15 pasr\.b r5,r5,0x4 ++ *[0-9a-f]*: e8 03 24 14 pasr\.b r4,r4,0x3 ++ *[0-9a-f]*: fc 01 24 1e pasr\.b lr,lr,0x1 ++ *[0-9a-f]*: ee 01 24 1f pasr\.b pc,r7,0x1 ++ *[0-9a-f]*: fc 06 24 1d pasr\.b sp,lr,0x6 ++ *[0-9a-f]*: e6 02 24 1d pasr\.b sp,r3,0x2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 00 24 2f plsl\.b pc,pc,0x0 ++ *[0-9a-f]*: f8 07 24 2c plsl\.b r12,r12,0x7 ++ *[0-9a-f]*: ea 04 24 25 plsl\.b r5,r5,0x4 ++ *[0-9a-f]*: e8 03 24 24 plsl\.b r4,r4,0x3 ++ *[0-9a-f]*: fc 01 24 2e plsl\.b lr,lr,0x1 ++ *[0-9a-f]*: f6 04 24 22 plsl\.b r2,r11,0x4 ++ *[0-9a-f]*: ea 07 24 28 plsl\.b r8,r5,0x7 ++ *[0-9a-f]*: e0 02 24 2f plsl\.b pc,r0,0x2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 00 24 3f plsr\.b pc,pc,0x0 ++ *[0-9a-f]*: f8 07 24 3c plsr\.b r12,r12,0x7 ++ *[0-9a-f]*: ea 04 24 35 plsr\.b r5,r5,0x4 ++ *[0-9a-f]*: e8 03 24 34 plsr\.b r4,r4,0x3 ++ *[0-9a-f]*: fc 01 24 3e plsr\.b lr,lr,0x1 ++ *[0-9a-f]*: e2 02 24 3c plsr\.b r12,r1,0x2 ++ *[0-9a-f]*: fe 07 24 36 plsr\.b r6,pc,0x7 ++ *[0-9a-f]*: f6 02 24 3c plsr\.b r12,r11,0x2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 00 24 4f pasr\.h pc,pc,0x0 ++ *[0-9a-f]*: f8 0f 24 4c pasr\.h r12,r12,0xf ++ *[0-9a-f]*: ea 08 24 45 pasr\.h r5,r5,0x8 ++ *[0-9a-f]*: e8 07 24 44 pasr\.h r4,r4,0x7 ++ *[0-9a-f]*: fc 01 24 4e pasr\.h lr,lr,0x1 ++ *[0-9a-f]*: f6 0a 24 40 pasr\.h r0,r11,0xa ++ *[0-9a-f]*: ec 08 24 44 pasr\.h r4,r6,0x8 ++ *[0-9a-f]*: e4 04 24 46 pasr\.h r6,r2,0x4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 00 24 5f plsl\.h pc,pc,0x0 ++ *[0-9a-f]*: f8 0f 24 5c plsl\.h r12,r12,0xf ++ *[0-9a-f]*: ea 08 24 55 plsl\.h r5,r5,0x8 ++ *[0-9a-f]*: e8 07 24 54 plsl\.h r4,r4,0x7 ++ *[0-9a-f]*: fc 01 24 5e plsl\.h lr,lr,0x1 ++ *[0-9a-f]*: f4 09 24 55 plsl\.h r5,r10,0x9 ++ *[0-9a-f]*: fc 08 24 5d plsl\.h sp,lr,0x8 ++ *[0-9a-f]*: fc 07 24 50 plsl\.h r0,lr,0x7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 00 24 6f plsr\.h pc,pc,0x0 ++ *[0-9a-f]*: f8 0f 24 6c plsr\.h r12,r12,0xf ++ *[0-9a-f]*: ea 08 24 65 plsr\.h r5,r5,0x8 ++ *[0-9a-f]*: e8 07 24 64 plsr\.h r4,r4,0x7 ++ *[0-9a-f]*: fc 01 24 6e plsr\.h lr,lr,0x1 ++ *[0-9a-f]*: e0 0f 24 6b plsr\.h r11,r0,0xf ++ *[0-9a-f]*: e6 03 24 6e plsr\.h lr,r3,0x3 ++ *[0-9a-f]*: fc 0a 24 68 plsr\.h r8,lr,0xa ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 24 7f packw\.sh pc,pc,pc ++ *[0-9a-f]*: f8 0c 24 7c packw\.sh r12,r12,r12 ++ *[0-9a-f]*: ea 05 24 75 packw\.sh r5,r5,r5 ++ *[0-9a-f]*: e8 04 24 74 packw\.sh r4,r4,r4 ++ *[0-9a-f]*: fc 0e 24 7e packw\.sh lr,lr,lr ++ *[0-9a-f]*: f6 0a 24 7d packw\.sh sp,r11,r10 ++ *[0-9a-f]*: e4 0c 24 78 packw\.sh r8,r2,r12 ++ *[0-9a-f]*: e2 05 24 78 packw\.sh r8,r1,r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 00 24 8f punpckub\.h pc,pc:b ++ *[0-9a-f]*: f8 00 24 9c punpckub\.h r12,r12:t ++ *[0-9a-f]*: ea 00 24 95 punpckub\.h r5,r5:t ++ *[0-9a-f]*: e8 00 24 84 punpckub\.h r4,r4:b ++ *[0-9a-f]*: fc 00 24 9e punpckub\.h lr,lr:t ++ *[0-9a-f]*: e2 00 24 96 punpckub\.h r6,r1:t ++ *[0-9a-f]*: ea 00 24 8e punpckub\.h lr,r5:b ++ *[0-9a-f]*: e4 00 24 9e punpckub\.h lr,r2:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 00 24 af punpcksb\.h pc,pc:b ++ *[0-9a-f]*: f8 00 24 bc punpcksb\.h r12,r12:t ++ *[0-9a-f]*: ea 00 24 b5 punpcksb\.h r5,r5:t ++ *[0-9a-f]*: e8 00 24 a4 punpcksb\.h r4,r4:b ++ *[0-9a-f]*: fc 00 24 be punpcksb\.h lr,lr:t ++ *[0-9a-f]*: ee 00 24 b4 punpcksb\.h r4,r7:t ++ *[0-9a-f]*: fc 00 24 a6 punpcksb\.h r6,lr:b ++ *[0-9a-f]*: f8 00 24 bc punpcksb\.h r12,r12:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 24 cf packsh\.ub pc,pc,pc ++ *[0-9a-f]*: f8 0c 24 cc packsh\.ub r12,r12,r12 ++ *[0-9a-f]*: ea 05 24 c5 packsh\.ub r5,r5,r5 ++ *[0-9a-f]*: e8 04 24 c4 packsh\.ub r4,r4,r4 ++ *[0-9a-f]*: fc 0e 24 ce packsh\.ub lr,lr,lr ++ *[0-9a-f]*: ec 03 24 c3 packsh\.ub r3,r6,r3 ++ *[0-9a-f]*: e0 03 24 c8 packsh\.ub r8,r0,r3 ++ *[0-9a-f]*: e6 0e 24 c9 packsh\.ub r9,r3,lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe 0f 24 df packsh\.sb pc,pc,pc ++ *[0-9a-f]*: f8 0c 24 dc packsh\.sb r12,r12,r12 ++ *[0-9a-f]*: ea 05 24 d5 packsh\.sb r5,r5,r5 ++ *[0-9a-f]*: e8 04 24 d4 packsh\.sb r4,r4,r4 ++ *[0-9a-f]*: fc 0e 24 de packsh\.sb lr,lr,lr ++ *[0-9a-f]*: f0 01 24 d6 packsh\.sb r6,r8,r1 ++ *[0-9a-f]*: f2 08 24 de packsh\.sb lr,r9,r8 ++ *[0-9a-f]*: ec 06 24 dd packsh\.sb sp,r6,r6 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e0 1f 00 00 andl pc,0x0 ++ *[0-9a-f]*: e0 1c ff ff andl r12,0xffff ++ *[0-9a-f]*: e0 15 80 00 andl r5,0x8000 ++ *[0-9a-f]*: e0 14 7f ff andl r4,0x7fff ++ *[0-9a-f]*: e0 1e 00 01 andl lr,0x1 ++ *[0-9a-f]*: e0 1f 5a 58 andl pc,0x5a58 ++ *[0-9a-f]*: e0 18 b8 9e andl r8,0xb89e ++ *[0-9a-f]*: e0 17 35 97 andl r7,0x3597 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e2 1f 00 00 andl pc,0x0,COH ++ *[0-9a-f]*: e2 1c ff ff andl r12,0xffff,COH ++ *[0-9a-f]*: e2 15 80 00 andl r5,0x8000,COH ++ *[0-9a-f]*: e2 14 7f ff andl r4,0x7fff,COH ++ *[0-9a-f]*: e2 1e 00 01 andl lr,0x1,COH ++ *[0-9a-f]*: e2 16 58 e1 andl r6,0x58e1,COH ++ *[0-9a-f]*: e2 10 9e cd andl r0,0x9ecd,COH ++ *[0-9a-f]*: e2 14 bd c4 andl r4,0xbdc4,COH ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e4 1f 00 00 andh pc,0x0 ++ *[0-9a-f]*: e4 1c ff ff andh r12,0xffff ++ *[0-9a-f]*: e4 15 80 00 andh r5,0x8000 ++ *[0-9a-f]*: e4 14 7f ff andh r4,0x7fff ++ *[0-9a-f]*: e4 1e 00 01 andh lr,0x1 ++ *[0-9a-f]*: e4 1c cc 58 andh r12,0xcc58 ++ *[0-9a-f]*: e4 13 21 e3 andh r3,0x21e3 ++ *[0-9a-f]*: e4 12 a7 eb andh r2,0xa7eb ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e6 1f 00 00 andh pc,0x0,COH ++ *[0-9a-f]*: e6 1c ff ff andh r12,0xffff,COH ++ *[0-9a-f]*: e6 15 80 00 andh r5,0x8000,COH ++ *[0-9a-f]*: e6 14 7f ff andh r4,0x7fff,COH ++ *[0-9a-f]*: e6 1e 00 01 andh lr,0x1,COH ++ *[0-9a-f]*: e6 1b 86 0d andh r11,0x860d,COH ++ *[0-9a-f]*: e6 18 ce f6 andh r8,0xcef6,COH ++ *[0-9a-f]*: e6 1a 5c 83 andh r10,0x5c83,COH ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e8 1f 00 00 orl pc,0x0 ++ *[0-9a-f]*: e8 1c ff ff orl r12,0xffff ++ *[0-9a-f]*: e8 15 80 00 orl r5,0x8000 ++ *[0-9a-f]*: e8 14 7f ff orl r4,0x7fff ++ *[0-9a-f]*: e8 1e 00 01 orl lr,0x1 ++ *[0-9a-f]*: e8 1d 41 7e orl sp,0x417e ++ *[0-9a-f]*: e8 10 52 bd orl r0,0x52bd ++ *[0-9a-f]*: e8 1f ac 47 orl pc,0xac47 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ea 1f 00 00 orh pc,0x0 ++ *[0-9a-f]*: ea 1c ff ff orh r12,0xffff ++ *[0-9a-f]*: ea 15 80 00 orh r5,0x8000 ++ *[0-9a-f]*: ea 14 7f ff orh r4,0x7fff ++ *[0-9a-f]*: ea 1e 00 01 orh lr,0x1 ++ *[0-9a-f]*: ea 18 6e 7d orh r8,0x6e7d ++ *[0-9a-f]*: ea 1c 77 1c orh r12,0x771c ++ *[0-9a-f]*: ea 11 ea 1a orh r1,0xea1a ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ec 1f 00 00 eorl pc,0x0 ++ *[0-9a-f]*: ec 1c ff ff eorl r12,0xffff ++ *[0-9a-f]*: ec 15 80 00 eorl r5,0x8000 ++ *[0-9a-f]*: ec 14 7f ff eorl r4,0x7fff ++ *[0-9a-f]*: ec 1e 00 01 eorl lr,0x1 ++ *[0-9a-f]*: ec 14 c7 b9 eorl r4,0xc7b9 ++ *[0-9a-f]*: ec 16 fb dd eorl r6,0xfbdd ++ *[0-9a-f]*: ec 11 51 b1 eorl r1,0x51b1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ee 1f 00 00 eorh pc,0x0 ++ *[0-9a-f]*: ee 1c ff ff eorh r12,0xffff ++ *[0-9a-f]*: ee 15 80 00 eorh r5,0x8000 ++ *[0-9a-f]*: ee 14 7f ff eorh r4,0x7fff ++ *[0-9a-f]*: ee 1e 00 01 eorh lr,0x1 ++ *[0-9a-f]*: ee 10 2d d4 eorh r0,0x2dd4 ++ *[0-9a-f]*: ee 1a 94 b5 eorh r10,0x94b5 ++ *[0-9a-f]*: ee 19 df 2a eorh r9,0xdf2a ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f0 1f 00 00 mcall [0-9a-f]* <.*> ++ *[0-9a-f]*: f0 1c ff ff mcall r12\[-4\] ++ *[0-9a-f]*: f0 15 80 00 mcall r5\[-131072\] ++ *[0-9a-f]*: f0 14 7f ff mcall r4\[131068\] ++ *[0-9a-f]*: f0 1e 00 01 mcall lr\[4\] ++ *[0-9a-f]*: f0 1d 3b bf mcall sp\[61180\] ++ *[0-9a-f]*: f0 14 dd d2 mcall r4\[-35000\] ++ *[0-9a-f]*: f0 10 09 b1 mcall r0\[9924\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f2 1f 00 00 pref pc\[0\] ++ *[0-9a-f]*: f2 1c ff ff pref r12\[-1\] ++ *[0-9a-f]*: f2 15 80 00 pref r5\[-32768\] ++ *[0-9a-f]*: f2 14 7f ff pref r4\[32767\] ++ *[0-9a-f]*: f2 1e 00 01 pref lr\[1\] ++ *[0-9a-f]*: f2 17 1e 44 pref r7\[7748\] ++ *[0-9a-f]*: f2 17 e1 ed pref r7\[-7699\] ++ *[0-9a-f]*: f2 12 9a dc pref r2\[-25892\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f4 1f 00 00 cache pc\[0\],0x0 ++ *[0-9a-f]*: f4 1c ff ff cache r12\[-1\],0x1f ++ *[0-9a-f]*: f4 15 84 00 cache r5\[-1024\],0x10 ++ *[0-9a-f]*: f4 14 7b ff cache r4\[1023\],0xf ++ *[0-9a-f]*: f4 1e 08 01 cache lr\[1\],0x1 ++ *[0-9a-f]*: f4 13 8c 3c cache r3\[-964\],0x11 ++ *[0-9a-f]*: f4 14 b6 89 cache r4\[-375\],0x16 ++ *[0-9a-f]*: f4 13 8c 88 cache r3\[-888\],0x11 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 20 0f sub pc,0 ++ *[0-9a-f]*: 2f fc sub r12,-1 ++ *[0-9a-f]*: f0 25 00 00 sub r5,-1048576 ++ *[0-9a-f]*: ee 34 ff ff sub r4,1048575 ++ *[0-9a-f]*: 20 1e sub lr,1 ++ *[0-9a-f]*: f6 22 8d 6c sub r2,-619156 ++ *[0-9a-f]*: e6 3e 0a cd sub lr,461517 ++ *[0-9a-f]*: fc 38 2d 25 sub r8,-185051 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 58 0f cp.w pc,0 ++ *[0-9a-f]*: 5b fc cp.w r12,-1 ++ *[0-9a-f]*: f0 45 00 00 cp.w r5,-1048576 ++ *[0-9a-f]*: ee 54 ff ff cp.w r4,1048575 ++ *[0-9a-f]*: 58 1e cp.w lr,1 ++ *[0-9a-f]*: e0 51 e4 ae cp.w r1,124078 ++ *[0-9a-f]*: fa 40 37 e3 cp.w r0,-378909 ++ *[0-9a-f]*: fc 44 4a 14 cp.w r4,-243180 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 30 0f mov pc,0 ++ *[0-9a-f]*: 3f fc mov r12,-1 ++ *[0-9a-f]*: f0 65 00 00 mov r5,-1048576 ++ *[0-9a-f]*: ee 74 ff ff mov r4,1048575 ++ *[0-9a-f]*: 30 1e mov lr,1 ++ *[0-9a-f]*: fa 75 29 a3 mov r5,-317021 ++ *[0-9a-f]*: f4 6d 91 94 mov sp,-749164 ++ *[0-9a-f]*: ee 65 58 93 mov r5,940179 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: c0 00 breq [0-9a-f]* <.*> ++ *[0-9a-f]*: fe 9f ff ff bral [0-9a-f]* <.*> ++ *[0-9a-f]*: f0 88 00 00 brls [0-9a-f]* <.*> ++ *[0-9a-f]*: ee 97 ff ff brpl [0-9a-f]* <.*> ++ *[0-9a-f]*: c0 11 brne [0-9a-f]* <.*> ++ *[0-9a-f]*: f2 8b 4a 4d brhi [0-9a-f]* <.*> ++ *[0-9a-f]*: ea 8e 14 cc brqs [0-9a-f]* <.*> ++ *[0-9a-f]*: fa 98 98 33 brls [0-9a-f]* <.*> ++ ++[0-9a-f]* : ++ *[0-9a-f]*: c0 0c rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: cf ff rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: f0 a0 00 00 rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: ee b0 ff ff rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: c0 1c rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: e2 b0 ca 5a rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: e8 a0 47 52 rcall [0-9a-f]* <.*> ++ *[0-9a-f]*: fe b0 fd ef rcall [0-9a-f]* <.*> ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe cf 00 00 sub pc,pc,0 ++ *[0-9a-f]*: f8 cc ff ff sub r12,r12,-1 ++ *[0-9a-f]*: ea c5 80 00 sub r5,r5,-32768 ++ *[0-9a-f]*: e8 c4 7f ff sub r4,r4,32767 ++ *[0-9a-f]*: fc ce 00 01 sub lr,lr,1 ++ *[0-9a-f]*: fe cf ce 38 sub pc,pc,-12744 ++ *[0-9a-f]*: ee c7 95 1b sub r7,r7,-27365 ++ *[0-9a-f]*: f2 c2 bc 32 sub r2,r9,-17358 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe df 00 00 satsub\.w pc,pc,0 ++ *[0-9a-f]*: f8 dc ff ff satsub\.w r12,r12,-1 ++ *[0-9a-f]*: ea d5 80 00 satsub\.w r5,r5,-32768 ++ *[0-9a-f]*: e8 d4 7f ff satsub\.w r4,r4,32767 ++ *[0-9a-f]*: fc de 00 01 satsub\.w lr,lr,1 ++ *[0-9a-f]*: fc d2 f8 29 satsub\.w r2,lr,-2007 ++ *[0-9a-f]*: f8 d7 fc f0 satsub\.w r7,r12,-784 ++ *[0-9a-f]*: ee d4 5a 8c satsub\.w r4,r7,23180 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe e0 00 00 ld\.d r0,pc\[0\] ++ *[0-9a-f]*: f8 ee ff ff ld\.d lr,r12\[-1\] ++ *[0-9a-f]*: ea e8 80 00 ld\.d r8,r5\[-32768\] ++ *[0-9a-f]*: e8 e6 7f ff ld\.d r6,r4\[32767\] ++ *[0-9a-f]*: fc e2 00 01 ld\.d r2,lr\[1\] ++ *[0-9a-f]*: f6 ee 39 c0 ld\.d lr,r11\[14784\] ++ *[0-9a-f]*: f2 e6 b6 27 ld\.d r6,r9\[-18905\] ++ *[0-9a-f]*: e6 e2 e7 2d ld\.d r2,r3\[-6355\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 7e 0f ld\.w pc,pc\[0x0\] ++ *[0-9a-f]*: f8 fc ff ff ld\.w r12,r12\[-1\] ++ *[0-9a-f]*: ea f5 80 00 ld\.w r5,r5\[-32768\] ++ *[0-9a-f]*: e8 f4 7f ff ld\.w r4,r4\[32767\] ++ *[0-9a-f]*: fc fe 00 01 ld\.w lr,lr\[1\] ++ *[0-9a-f]*: f8 f0 a9 8b ld\.w r0,r12\[-22133\] ++ *[0-9a-f]*: fe fd af d7 ld\.w sp,pc\[-20521\] ++ *[0-9a-f]*: d7 03 nop ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 9e 0f ld\.sh pc,pc\[0x0\] ++ *[0-9a-f]*: f9 0c ff ff ld\.sh r12,r12\[-1\] ++ *[0-9a-f]*: eb 05 80 00 ld\.sh r5,r5\[-32768\] ++ *[0-9a-f]*: e9 04 7f ff ld\.sh r4,r4\[32767\] ++ *[0-9a-f]*: fd 0e 00 01 ld\.sh lr,lr\[1\] ++ *[0-9a-f]*: f5 06 78 d2 ld\.sh r6,r10\[30930\] ++ *[0-9a-f]*: f5 06 55 d5 ld\.sh r6,r10\[21973\] ++ *[0-9a-f]*: d7 03 nop ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 9e 8f ld\.uh pc,pc\[0x0\] ++ *[0-9a-f]*: f9 1c ff ff ld\.uh r12,r12\[-1\] ++ *[0-9a-f]*: eb 15 80 00 ld\.uh r5,r5\[-32768\] ++ *[0-9a-f]*: e9 14 7f ff ld\.uh r4,r4\[32767\] ++ *[0-9a-f]*: fd 1e 00 01 ld\.uh lr,lr\[1\] ++ *[0-9a-f]*: f3 11 cb d6 ld\.uh r1,r9\[-13354\] ++ *[0-9a-f]*: f7 1e 53 59 ld\.uh lr,r11\[21337\] ++ *[0-9a-f]*: d7 03 nop ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff 2f 00 00 ld\.sb pc,pc\[0\] ++ *[0-9a-f]*: f9 2c ff ff ld\.sb r12,r12\[-1\] ++ *[0-9a-f]*: eb 25 80 00 ld\.sb r5,r5\[-32768\] ++ *[0-9a-f]*: e9 24 7f ff ld\.sb r4,r4\[32767\] ++ *[0-9a-f]*: fd 2e 00 01 ld\.sb lr,lr\[1\] ++ *[0-9a-f]*: fb 27 90 09 ld\.sb r7,sp\[-28663\] ++ *[0-9a-f]*: e3 22 e9 09 ld\.sb r2,r1\[-5879\] ++ *[0-9a-f]*: e7 2c 49 2e ld\.sb r12,r3\[18734\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 1f 8f ld\.ub pc,pc\[0x0\] ++ *[0-9a-f]*: f9 3c ff ff ld\.ub r12,r12\[-1\] ++ *[0-9a-f]*: eb 35 80 00 ld\.ub r5,r5\[-32768\] ++ *[0-9a-f]*: e9 34 7f ff ld\.ub r4,r4\[32767\] ++ *[0-9a-f]*: 1d 9e ld\.ub lr,lr\[0x1\] ++ *[0-9a-f]*: e9 3f 20 55 ld\.ub pc,r4\[8277\] ++ *[0-9a-f]*: f9 35 4a e4 ld\.ub r5,r12\[19172\] ++ *[0-9a-f]*: fd 3a 66 eb ld\.ub r10,lr\[26347\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fe e1 00 00 st\.d pc\[0\],r0 ++ *[0-9a-f]*: f8 ef ff ff st\.d r12\[-1\],lr ++ *[0-9a-f]*: ea e9 80 00 st\.d r5\[-32768\],r8 ++ *[0-9a-f]*: e8 e7 7f ff st\.d r4\[32767\],r6 ++ *[0-9a-f]*: fc e3 00 01 st\.d lr\[1\],r2 ++ *[0-9a-f]*: ea eb 33 90 st\.d r5\[13200\],r10 ++ *[0-9a-f]*: ea eb 24 88 st\.d r5\[9352\],r10 ++ *[0-9a-f]*: ea e5 7e 75 st\.d r5\[32373\],r4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: 9f 0f st\.w pc\[0x0\],pc ++ *[0-9a-f]*: f9 4c ff ff st\.w r12\[-1\],r12 ++ *[0-9a-f]*: eb 45 80 00 st\.w r5\[-32768\],r5 ++ *[0-9a-f]*: e9 44 7f ff st\.w r4\[32767\],r4 ++ *[0-9a-f]*: fd 4e 00 01 st\.w lr\[1\],lr ++ *[0-9a-f]*: fb 47 17 f8 st\.w sp\[6136\],r7 ++ *[0-9a-f]*: ed 4c 69 cf st\.w r6\[27087\],r12 ++ *[0-9a-f]*: d7 03 nop ++ ++[0-9a-f]* : ++ *[0-9a-f]*: be 0f st\.h pc\[0x0\],pc ++ *[0-9a-f]*: f9 5c ff ff st\.h r12\[-1\],r12 ++ *[0-9a-f]*: eb 55 80 00 st\.h r5\[-32768\],r5 ++ *[0-9a-f]*: e9 54 7f ff st\.h r4\[32767\],r4 ++ *[0-9a-f]*: fd 5e 00 01 st\.h lr\[1\],lr ++ *[0-9a-f]*: e9 57 d9 16 st\.h r4\[-9962\],r7 ++ *[0-9a-f]*: f3 53 c0 86 st\.h r9\[-16250\],r3 ++ *[0-9a-f]*: d7 03 nop ++ ++[0-9a-f]* : ++ *[0-9a-f]*: be 8f st\.b pc\[0x0\],pc ++ *[0-9a-f]*: f9 6c ff ff st\.b r12\[-1\],r12 ++ *[0-9a-f]*: eb 65 80 00 st\.b r5\[-32768\],r5 ++ *[0-9a-f]*: e9 64 7f ff st\.b r4\[32767\],r4 ++ *[0-9a-f]*: bc 9e st\.b lr\[0x1\],lr ++ *[0-9a-f]*: f9 66 75 96 st\.b r12\[30102\],r6 ++ *[0-9a-f]*: eb 61 71 31 st\.b r5\[28977\],r1 ++ *[0-9a-f]*: e1 61 15 5e st\.b r0\[5470\],r1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 bf 00 00 mfsr pc,0x0 ++ *[0-9a-f]*: e1 bc 00 ff mfsr r12,0x3fc ++ *[0-9a-f]*: e1 b5 00 80 mfsr r5,0x200 ++ *[0-9a-f]*: e1 b4 00 7f mfsr r4,0x1fc ++ *[0-9a-f]*: e1 be 00 01 mfsr lr,0x4 ++ *[0-9a-f]*: e1 b2 00 ae mfsr r2,0x2b8 ++ *[0-9a-f]*: e1 b4 00 41 mfsr r4,0x104 ++ *[0-9a-f]*: e1 ba 00 fe mfsr r10,0x3f8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e3 bf 00 00 mtsr 0x0,pc ++ *[0-9a-f]*: e3 bc 00 ff mtsr 0x3fc,r12 ++ *[0-9a-f]*: e3 b5 00 80 mtsr 0x200,r5 ++ *[0-9a-f]*: e3 b4 00 7f mtsr 0x1fc,r4 ++ *[0-9a-f]*: e3 be 00 01 mtsr 0x4,lr ++ *[0-9a-f]*: e3 ba 00 38 mtsr 0xe0,r10 ++ *[0-9a-f]*: e3 bc 00 d1 mtsr 0x344,r12 ++ *[0-9a-f]*: e3 b9 00 4c mtsr 0x130,r9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 bf 00 00 mfdr pc,0x0 ++ *[0-9a-f]*: e5 bc 00 ff mfdr r12,0x3fc ++ *[0-9a-f]*: e5 b5 00 80 mfdr r5,0x200 ++ *[0-9a-f]*: e5 b4 00 7f mfdr r4,0x1fc ++ *[0-9a-f]*: e5 be 00 01 mfdr lr,0x4 ++ *[0-9a-f]*: e5 b6 00 e9 mfdr r6,0x3a4 ++ *[0-9a-f]*: e5 b5 00 09 mfdr r5,0x24 ++ *[0-9a-f]*: e5 b9 00 4b mfdr r9,0x12c ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e7 bf 00 00 mtdr 0x0,pc ++ *[0-9a-f]*: e7 bc 00 ff mtdr 0x3fc,r12 ++ *[0-9a-f]*: e7 b5 00 80 mtdr 0x200,r5 ++ *[0-9a-f]*: e7 b4 00 7f mtdr 0x1fc,r4 ++ *[0-9a-f]*: e7 be 00 01 mtdr 0x4,lr ++ *[0-9a-f]*: e7 b8 00 2d mtdr 0xb4,r8 ++ *[0-9a-f]*: e7 ba 00 b4 mtdr 0x2d0,r10 ++ *[0-9a-f]*: e7 be 00 66 mtdr 0x198,lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e9 b0 00 00 sleep 0x0 ++ *[0-9a-f]*: e9 b0 00 ff sleep 0xff ++ *[0-9a-f]*: e9 b0 00 80 sleep 0x80 ++ *[0-9a-f]*: e9 b0 00 7f sleep 0x7f ++ *[0-9a-f]*: e9 b0 00 01 sleep 0x1 ++ *[0-9a-f]*: e9 b0 00 fe sleep 0xfe ++ *[0-9a-f]*: e9 b0 00 0f sleep 0xf ++ *[0-9a-f]*: e9 b0 00 2b sleep 0x2b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: eb b0 00 00 sync 0x0 ++ *[0-9a-f]*: eb b0 00 ff sync 0xff ++ *[0-9a-f]*: eb b0 00 80 sync 0x80 ++ *[0-9a-f]*: eb b0 00 7f sync 0x7f ++ *[0-9a-f]*: eb b0 00 01 sync 0x1 ++ *[0-9a-f]*: eb b0 00 a6 sync 0xa6 ++ *[0-9a-f]*: eb b0 00 e6 sync 0xe6 ++ *[0-9a-f]*: eb b0 00 b4 sync 0xb4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed bf 00 00 bld pc,0x0 ++ *[0-9a-f]*: ed bc 00 1f bld r12,0x1f ++ *[0-9a-f]*: ed b5 00 10 bld r5,0x10 ++ *[0-9a-f]*: ed b4 00 0f bld r4,0xf ++ *[0-9a-f]*: ed be 00 01 bld lr,0x1 ++ *[0-9a-f]*: ed b9 00 0f bld r9,0xf ++ *[0-9a-f]*: ed b0 00 04 bld r0,0x4 ++ *[0-9a-f]*: ed be 00 1a bld lr,0x1a ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef bf 00 00 bst pc,0x0 ++ *[0-9a-f]*: ef bc 00 1f bst r12,0x1f ++ *[0-9a-f]*: ef b5 00 10 bst r5,0x10 ++ *[0-9a-f]*: ef b4 00 0f bst r4,0xf ++ *[0-9a-f]*: ef be 00 01 bst lr,0x1 ++ *[0-9a-f]*: ef ba 00 1c bst r10,0x1c ++ *[0-9a-f]*: ef b0 00 03 bst r0,0x3 ++ *[0-9a-f]*: ef bd 00 02 bst sp,0x2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f1 bf 00 00 sats pc,0x0 ++ *[0-9a-f]*: f1 bc 03 ff sats r12>>0x1f,0x1f ++ *[0-9a-f]*: f1 b5 02 10 sats r5>>0x10,0x10 ++ *[0-9a-f]*: f1 b4 01 ef sats r4>>0xf,0xf ++ *[0-9a-f]*: f1 be 00 21 sats lr>>0x1,0x1 ++ *[0-9a-f]*: f1 ba 02 63 sats r10>>0x3,0x13 ++ *[0-9a-f]*: f1 ba 03 42 sats r10>>0x2,0x1a ++ *[0-9a-f]*: f1 b1 00 34 sats r1>>0x14,0x1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f1 bf 04 00 satu pc,0x0 ++ *[0-9a-f]*: f1 bc 07 ff satu r12>>0x1f,0x1f ++ *[0-9a-f]*: f1 b5 06 10 satu r5>>0x10,0x10 ++ *[0-9a-f]*: f1 b4 05 ef satu r4>>0xf,0xf ++ *[0-9a-f]*: f1 be 04 21 satu lr>>0x1,0x1 ++ *[0-9a-f]*: f1 bf 04 e5 satu pc>>0x5,0x7 ++ *[0-9a-f]*: f1 b7 04 a5 satu r7>>0x5,0x5 ++ *[0-9a-f]*: f1 b2 06 7a satu r2>>0x1a,0x13 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f3 bf 00 00 satrnds pc,0x0 ++ *[0-9a-f]*: f3 bc 03 ff satrnds r12>>0x1f,0x1f ++ *[0-9a-f]*: f3 b5 02 10 satrnds r5>>0x10,0x10 ++ *[0-9a-f]*: f3 b4 01 ef satrnds r4>>0xf,0xf ++ *[0-9a-f]*: f3 be 00 21 satrnds lr>>0x1,0x1 ++ *[0-9a-f]*: f3 b0 02 75 satrnds r0>>0x15,0x13 ++ *[0-9a-f]*: f3 bd 00 40 satrnds sp,0x2 ++ *[0-9a-f]*: f3 b7 03 a6 satrnds r7>>0x6,0x1d ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f3 bf 04 00 satrndu pc,0x0 ++ *[0-9a-f]*: f3 bc 07 ff satrndu r12>>0x1f,0x1f ++ *[0-9a-f]*: f3 b5 06 10 satrndu r5>>0x10,0x10 ++ *[0-9a-f]*: f3 b4 05 ef satrndu r4>>0xf,0xf ++ *[0-9a-f]*: f3 be 04 21 satrndu lr>>0x1,0x1 ++ *[0-9a-f]*: f3 bc 07 40 satrndu r12,0x1a ++ *[0-9a-f]*: f3 b4 04 75 satrndu r4>>0x15,0x3 ++ *[0-9a-f]*: f3 ba 06 03 satrndu r10>>0x3,0x10 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f5 bf 00 00 subfeq pc,0 ++ *[0-9a-f]*: f5 bc 0f ff subfal r12,-1 ++ *[0-9a-f]*: f5 b5 08 80 subfls r5,-128 ++ *[0-9a-f]*: f5 b4 07 7f subfpl r4,127 ++ *[0-9a-f]*: f5 be 01 01 subfne lr,1 ++ *[0-9a-f]*: f5 ba 08 08 subfls r10,8 ++ *[0-9a-f]*: f5 bb 0d 63 subfvc r11,99 ++ *[0-9a-f]*: f5 b2 0c 49 subfvs r2,73 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f7 bf 00 00 subeq pc,0 ++ *[0-9a-f]*: f7 bc 0f ff subal r12,-1 ++ *[0-9a-f]*: f7 b5 08 80 subls r5,-128 ++ *[0-9a-f]*: f7 b4 07 7f subpl r4,127 ++ *[0-9a-f]*: f7 be 01 01 subne lr,1 ++ *[0-9a-f]*: f7 bc 08 76 subls r12,118 ++ *[0-9a-f]*: f7 be 0d f4 subvc lr,-12 ++ *[0-9a-f]*: f7 b4 06 f3 submi r4,-13 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f9 bf 00 00 moveq pc,0 ++ *[0-9a-f]*: f9 bc 0f ff moval r12,-1 ++ *[0-9a-f]*: f9 b5 08 80 movls r5,-128 ++ *[0-9a-f]*: f9 b4 07 7f movpl r4,127 ++ *[0-9a-f]*: f9 be 01 01 movne lr,1 ++ *[0-9a-f]*: f9 b3 05 86 movlt r3,-122 ++ *[0-9a-f]*: f9 b8 0d 02 movvc r8,2 ++ *[0-9a-f]*: f9 b7 01 91 movne r7,-111 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e0 0f 18 00 cp\.b pc,r0 ++ *[0-9a-f]*: fe 00 18 00 cp\.b r0,pc ++ *[0-9a-f]*: f0 07 18 00 cp\.b r7,r8 ++ *[0-9a-f]*: ee 08 18 00 cp\.b r8,r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e0 0f 19 00 cp\.h pc,r0 ++ *[0-9a-f]*: fe 00 19 00 cp\.h r0,pc ++ *[0-9a-f]*: f0 07 19 00 cp\.h r7,r8 ++ *[0-9a-f]*: ee 08 19 00 cp\.h r8,r7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 cf 00 7e ldm pc,r1-r6 ++ *[0-9a-f]*: e1 cc ff ff ldm r12,r0-pc ++ *[0-9a-f]*: e1 c5 80 00 ldm r5,pc ++ *[0-9a-f]*: e1 c4 7f ff ldm r4,r0-lr ++ *[0-9a-f]*: e1 ce 00 01 ldm lr,r0 ++ *[0-9a-f]*: e1 c9 40 22 ldm r9,r1,r5,lr ++ *[0-9a-f]*: e1 cb 81 ec ldm r11,r2-r3,r5-r8,pc ++ *[0-9a-f]*: e1 c6 a2 09 ldm r6,r0,r3,r9,sp,pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e3 cf 03 c0 ldm pc\+\+,r6-r9 ++ *[0-9a-f]*: e3 cc ff ff ldm r12\+\+,r0-pc ++ *[0-9a-f]*: e3 c5 80 00 ldm r5\+\+,pc ++ *[0-9a-f]*: e3 c4 7f ff ldm r4\+\+,r0-lr ++ *[0-9a-f]*: e3 ce 00 01 ldm lr\+\+,r0 ++ *[0-9a-f]*: e3 cc d5 38 ldm r12\+\+,r3-r5,r8,r10,r12,lr-pc ++ *[0-9a-f]*: e3 ca c0 74 ldm r10\+\+,r2,r4-r6,lr-pc ++ *[0-9a-f]*: e3 c6 7e 1a ldm r6\+\+,r1,r3-r4,r9-lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 cf 01 80 ldmts pc,r7-r8 ++ *[0-9a-f]*: e5 cc ff ff ldmts r12,r0-pc ++ *[0-9a-f]*: e5 c5 80 00 ldmts r5,pc ++ *[0-9a-f]*: e5 c4 7f ff ldmts r4,r0-lr ++ *[0-9a-f]*: e5 ce 00 01 ldmts lr,r0 ++ *[0-9a-f]*: e5 c0 18 06 ldmts r0,r1-r2,r11-r12 ++ *[0-9a-f]*: e5 ce 61 97 ldmts lr,r0-r2,r4,r7-r8,sp-lr ++ *[0-9a-f]*: e5 cc c2 3b ldmts r12,r0-r1,r3-r5,r9,lr-pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e7 cf 02 00 ldmts pc\+\+,r9 ++ *[0-9a-f]*: e7 cc ff ff ldmts r12\+\+,r0-pc ++ *[0-9a-f]*: e7 c5 80 00 ldmts r5\+\+,pc ++ *[0-9a-f]*: e7 c4 7f ff ldmts r4\+\+,r0-lr ++ *[0-9a-f]*: e7 ce 00 01 ldmts lr\+\+,r0 ++ *[0-9a-f]*: e7 cd 0a bd ldmts sp\+\+,r0,r2-r5,r7,r9,r11 ++ *[0-9a-f]*: e7 c5 0c 8e ldmts r5\+\+,r1-r3,r7,r10-r11 ++ *[0-9a-f]*: e7 c8 a1 9c ldmts r8\+\+,r2-r4,r7-r8,sp,pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e9 cf 00 80 stm pc,r7 ++ *[0-9a-f]*: e9 cc ff ff stm r12,r0-pc ++ *[0-9a-f]*: e9 c5 80 00 stm r5,pc ++ *[0-9a-f]*: e9 c4 7f ff stm r4,r0-lr ++ *[0-9a-f]*: e9 ce 00 01 stm lr,r0 ++ *[0-9a-f]*: e9 cd 49 2c stm sp,r2-r3,r5,r8,r11,lr ++ *[0-9a-f]*: e9 c4 4c 5f stm r4,r0-r4,r6,r10-r11,lr ++ *[0-9a-f]*: e9 c9 f2 22 stm r9,r1,r5,r9,r12-pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: eb cf 00 70 stm --pc,r4-r6 ++ *[0-9a-f]*: eb cc ff ff stm --r12,r0-pc ++ *[0-9a-f]*: eb c5 80 00 stm --r5,pc ++ *[0-9a-f]*: eb c4 7f ff stm --r4,r0-lr ++ *[0-9a-f]*: eb ce 00 01 stm --lr,r0 ++ *[0-9a-f]*: eb cb fb f1 stm --r11,r0,r4-r9,r11-pc ++ *[0-9a-f]*: eb cb 56 09 stm --r11,r0,r3,r9-r10,r12,lr ++ *[0-9a-f]*: eb c6 63 04 stm --r6,r2,r8-r9,sp-lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed cf 01 00 stmts pc,r8 ++ *[0-9a-f]*: ed cc ff ff stmts r12,r0-pc ++ *[0-9a-f]*: ed c5 80 00 stmts r5,pc ++ *[0-9a-f]*: ed c4 7f ff stmts r4,r0-lr ++ *[0-9a-f]*: ed ce 00 01 stmts lr,r0 ++ *[0-9a-f]*: ed c1 c6 5b stmts r1,r0-r1,r3-r4,r6,r9-r10,lr-pc ++ *[0-9a-f]*: ed c3 1d c1 stmts r3,r0,r6-r8,r10-r12 ++ *[0-9a-f]*: ed cb d6 d1 stmts r11,r0,r4,r6-r7,r9-r10,r12,lr-pc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef cf 01 c0 stmts --pc,r6-r8 ++ *[0-9a-f]*: ef cc ff ff stmts --r12,r0-pc ++ *[0-9a-f]*: ef c5 80 00 stmts --r5,pc ++ *[0-9a-f]*: ef c4 7f ff stmts --r4,r0-lr ++ *[0-9a-f]*: ef ce 00 01 stmts --lr,r0 ++ *[0-9a-f]*: ef c2 36 19 stmts --r2,r0,r3-r4,r9-r10,r12-sp ++ *[0-9a-f]*: ef c3 c0 03 stmts --r3,r0-r1,lr-pc ++ *[0-9a-f]*: ef c0 44 7d stmts --r0,r0,r2-r6,r10,lr ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df 00 00 ldins\.h pc:b,pc\[0\] ++ *[0-9a-f]*: f9 dc 1f ff ldins\.h r12:t,r12\[-2\] ++ *[0-9a-f]*: eb d5 18 00 ldins\.h r5:t,r5\[-4096\] ++ *[0-9a-f]*: e9 d4 07 ff ldins\.h r4:b,r4\[4094\] ++ *[0-9a-f]*: fd de 10 01 ldins\.h lr:t,lr\[2\] ++ *[0-9a-f]*: fd d0 13 c5 ldins\.h r0:t,lr\[1930\] ++ *[0-9a-f]*: ef d3 0e f5 ldins\.h r3:b,r7\[-534\] ++ *[0-9a-f]*: f9 d2 0b 9a ldins\.h r2:b,r12\[-2252\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df 40 00 ldins\.b pc:b,pc\[0\] ++ *[0-9a-f]*: f9 dc 7f ff ldins\.b r12:t,r12\[-1\] ++ *[0-9a-f]*: eb d5 68 00 ldins\.b r5:u,r5\[-2048\] ++ *[0-9a-f]*: e9 d4 57 ff ldins\.b r4:l,r4\[2047\] ++ *[0-9a-f]*: fd de 50 01 ldins\.b lr:l,lr\[1\] ++ *[0-9a-f]*: e9 d6 7d 6a ldins\.b r6:t,r4\[-662\] ++ *[0-9a-f]*: e3 d5 4f 69 ldins\.b r5:b,r1\[-151\] ++ *[0-9a-f]*: f7 da 78 7d ldins\.b r10:t,r11\[-1923\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df 20 00 ldswp\.sh pc,pc\[0\] ++ *[0-9a-f]*: f9 dc 2f ff ldswp\.sh r12,r12\[-2\] ++ *[0-9a-f]*: eb d5 28 00 ldswp\.sh r5,r5\[-4096\] ++ *[0-9a-f]*: e9 d4 27 ff ldswp\.sh r4,r4\[4094\] ++ *[0-9a-f]*: fd de 20 01 ldswp\.sh lr,lr\[2\] ++ *[0-9a-f]*: f5 d9 27 84 ldswp\.sh r9,r10\[3848\] ++ *[0-9a-f]*: f9 d4 2c 04 ldswp\.sh r4,r12\[-2040\] ++ *[0-9a-f]*: e5 da 26 08 ldswp\.sh r10,r2\[3088\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df 30 00 ldswp\.uh pc,pc\[0\] ++ *[0-9a-f]*: f9 dc 3f ff ldswp\.uh r12,r12\[-2\] ++ *[0-9a-f]*: eb d5 38 00 ldswp\.uh r5,r5\[-4096\] ++ *[0-9a-f]*: e9 d4 37 ff ldswp\.uh r4,r4\[4094\] ++ *[0-9a-f]*: fd de 30 01 ldswp\.uh lr,lr\[2\] ++ *[0-9a-f]*: f3 d4 37 46 ldswp\.uh r4,r9\[3724\] ++ *[0-9a-f]*: fb de 3c bc ldswp\.uh lr,sp\[-1672\] ++ *[0-9a-f]*: f9 d8 38 7d ldswp\.uh r8,r12\[-3846\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df 80 00 ldswp\.w pc,pc\[0\] ++ *[0-9a-f]*: f9 dc 8f ff ldswp\.w r12,r12\[-4\] ++ *[0-9a-f]*: eb d5 88 00 ldswp\.w r5,r5\[-8192\] ++ *[0-9a-f]*: e9 d4 87 ff ldswp\.w r4,r4\[8188\] ++ *[0-9a-f]*: fd de 80 01 ldswp\.w lr,lr\[4\] ++ *[0-9a-f]*: ef dd 81 d1 ldswp\.w sp,r7\[1860\] ++ *[0-9a-f]*: eb df 8c c1 ldswp\.w pc,r5\[-3324\] ++ *[0-9a-f]*: f5 dc 8c c8 ldswp\.w r12,r10\[-3296\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df 90 00 stswp\.h pc\[0\],pc ++ *[0-9a-f]*: f9 dc 9f ff stswp\.h r12\[-2\],r12 ++ *[0-9a-f]*: eb d5 98 00 stswp\.h r5\[-4096\],r5 ++ *[0-9a-f]*: e9 d4 97 ff stswp\.h r4\[4094\],r4 ++ *[0-9a-f]*: fd de 90 01 stswp\.h lr\[2\],lr ++ *[0-9a-f]*: ef da 90 20 stswp\.h r7\[64\],r10 ++ *[0-9a-f]*: f5 d2 95 e8 stswp\.h r10\[3024\],r2 ++ *[0-9a-f]*: e1 da 9b 74 stswp\.h r0\[-2328\],r10 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df a0 00 stswp\.w pc\[0\],pc ++ *[0-9a-f]*: f9 dc af ff stswp\.w r12\[-4\],r12 ++ *[0-9a-f]*: eb d5 a8 00 stswp\.w r5\[-8192\],r5 ++ *[0-9a-f]*: e9 d4 a7 ff stswp\.w r4\[8188\],r4 ++ *[0-9a-f]*: fd de a0 01 stswp\.w lr\[4\],lr ++ *[0-9a-f]*: ff d8 a1 21 stswp\.w pc\[1156\],r8 ++ *[0-9a-f]*: fb da a7 ce stswp\.w sp\[7992\],r10 ++ *[0-9a-f]*: f1 d5 ae db stswp\.w r8\[-1172\],r5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff ef 00 0f and pc,pc,pc ++ *[0-9a-f]*: f9 ec 01 fc and r12,r12,r12<<0x1f ++ *[0-9a-f]*: eb e5 01 05 and r5,r5,r5<<0x10 ++ *[0-9a-f]*: e9 e4 00 f4 and r4,r4,r4<<0xf ++ *[0-9a-f]*: fd ee 00 1e and lr,lr,lr<<0x1 ++ *[0-9a-f]*: e5 e1 00 1a and r10,r2,r1<<0x1 ++ *[0-9a-f]*: f1 eb 01 bc and r12,r8,r11<<0x1b ++ *[0-9a-f]*: ef e0 00 3a and r10,r7,r0<<0x3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff ef 02 0f and pc,pc,pc ++ *[0-9a-f]*: f9 ec 03 fc and r12,r12,r12>>0x1f ++ *[0-9a-f]*: eb e5 03 05 and r5,r5,r5>>0x10 ++ *[0-9a-f]*: e9 e4 02 f4 and r4,r4,r4>>0xf ++ *[0-9a-f]*: fd ee 02 1e and lr,lr,lr>>0x1 ++ *[0-9a-f]*: f1 e7 03 1c and r12,r8,r7>>0x11 ++ *[0-9a-f]*: e9 e9 03 4f and pc,r4,r9>>0x14 ++ *[0-9a-f]*: f3 ea 02 ca and r10,r9,r10>>0xc ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff ef 10 0f or pc,pc,pc ++ *[0-9a-f]*: f9 ec 11 fc or r12,r12,r12<<0x1f ++ *[0-9a-f]*: eb e5 11 05 or r5,r5,r5<<0x10 ++ *[0-9a-f]*: e9 e4 10 f4 or r4,r4,r4<<0xf ++ *[0-9a-f]*: fd ee 10 1e or lr,lr,lr<<0x1 ++ *[0-9a-f]*: fb eb 11 d8 or r8,sp,r11<<0x1d ++ *[0-9a-f]*: f3 e2 11 cf or pc,r9,r2<<0x1c ++ *[0-9a-f]*: e3 e2 10 35 or r5,r1,r2<<0x3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff ef 12 0f or pc,pc,pc ++ *[0-9a-f]*: f9 ec 13 fc or r12,r12,r12>>0x1f ++ *[0-9a-f]*: eb e5 13 05 or r5,r5,r5>>0x10 ++ *[0-9a-f]*: e9 e4 12 f4 or r4,r4,r4>>0xf ++ *[0-9a-f]*: fd ee 12 1e or lr,lr,lr>>0x1 ++ *[0-9a-f]*: fb ed 12 21 or r1,sp,sp>>0x2 ++ *[0-9a-f]*: e3 e1 13 d0 or r0,r1,r1>>0x1d ++ *[0-9a-f]*: f9 e8 12 84 or r4,r12,r8>>0x8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff ef 20 0f eor pc,pc,pc ++ *[0-9a-f]*: f9 ec 21 fc eor r12,r12,r12<<0x1f ++ *[0-9a-f]*: eb e5 21 05 eor r5,r5,r5<<0x10 ++ *[0-9a-f]*: e9 e4 20 f4 eor r4,r4,r4<<0xf ++ *[0-9a-f]*: fd ee 20 1e eor lr,lr,lr<<0x1 ++ *[0-9a-f]*: f3 e4 20 ba eor r10,r9,r4<<0xb ++ *[0-9a-f]*: e1 e1 21 f4 eor r4,r0,r1<<0x1f ++ *[0-9a-f]*: e5 ec 20 d6 eor r6,r2,r12<<0xd ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff ef 22 0f eor pc,pc,pc ++ *[0-9a-f]*: f9 ec 23 fc eor r12,r12,r12>>0x1f ++ *[0-9a-f]*: eb e5 23 05 eor r5,r5,r5>>0x10 ++ *[0-9a-f]*: e9 e4 22 f4 eor r4,r4,r4>>0xf ++ *[0-9a-f]*: fd ee 22 1e eor lr,lr,lr>>0x1 ++ *[0-9a-f]*: eb e5 23 65 eor r5,r5,r5>>0x16 ++ *[0-9a-f]*: e3 ee 22 3a eor r10,r1,lr>>0x3 ++ *[0-9a-f]*: fd ed 23 a7 eor r7,lr,sp>>0x1a ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff ef 8f 0f sthh\.w pc\[pc\],pc:b,pc:b ++ *[0-9a-f]*: f9 ec bc 3c sthh\.w r12\[r12<<0x3\],r12:t,r12:t ++ *[0-9a-f]*: eb e5 b5 25 sthh\.w r5\[r5<<0x2\],r5:t,r5:t ++ *[0-9a-f]*: e9 e4 84 14 sthh\.w r4\[r4<<0x1\],r4:b,r4:b ++ *[0-9a-f]*: fd ee be 1e sthh\.w lr\[lr<<0x1\],lr:t,lr:t ++ *[0-9a-f]*: e3 ec b6 3d sthh\.w sp\[r6<<0x3\],r1:t,r12:t ++ *[0-9a-f]*: f3 e9 b6 06 sthh\.w r6\[r6\],r9:t,r9:t ++ *[0-9a-f]*: e1 eb 93 0a sthh\.w r10\[r3\],r0:b,r11:t ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff ef c0 0f sthh\.w pc\[0x0\],pc:b,pc:b ++ *[0-9a-f]*: f9 ec ff fc sthh\.w r12\[0x3fc\],r12:t,r12:t ++ *[0-9a-f]*: eb e5 f8 05 sthh\.w r5\[0x200\],r5:t,r5:t ++ *[0-9a-f]*: e9 e4 c7 f4 sthh\.w r4\[0x1fc\],r4:b,r4:b ++ *[0-9a-f]*: fd ee f0 1e sthh\.w lr\[0x4\],lr:t,lr:t ++ *[0-9a-f]*: f3 e0 e6 54 sthh\.w r4\[0x194\],r9:t,r0:b ++ *[0-9a-f]*: e5 ea e5 78 sthh\.w r8\[0x15c\],r2:t,r10:b ++ *[0-9a-f]*: f3 e2 c2 bd sthh\.w sp\[0xac\],r9:b,r2:b ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a0 00 00 cop cp0,cr0,cr0,cr0,0x0 ++ *[0-9a-f]*: e7 af ff ff cop cp7,cr15,cr15,cr15,0x7f ++ *[0-9a-f]*: e3 a8 75 55 cop cp3,cr5,cr5,cr5,0x31 ++ *[0-9a-f]*: e3 a8 44 44 cop cp2,cr4,cr4,cr4,0x30 ++ *[0-9a-f]*: e5 ad a8 37 cop cp5,cr8,cr3,cr7,0x5a ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e9 a0 00 00 ldc\.w cp0,cr0,r0\[0x0\] ++ *[0-9a-f]*: e9 af ef ff ldc\.w cp7,cr15,pc\[0x3fc\] ++ *[0-9a-f]*: e9 a5 65 80 ldc\.w cp3,cr5,r5\[0x200\] ++ *[0-9a-f]*: e9 a4 44 7f ldc\.w cp2,cr4,r4\[0x1fc\] ++ *[0-9a-f]*: e9 ad 89 24 ldc\.w cp4,cr9,sp\[0x90\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef a0 00 40 ldc\.w cp0,cr0,--r0 ++ *[0-9a-f]*: ef af ef 40 ldc\.w cp7,cr15,--pc ++ *[0-9a-f]*: ef a5 65 40 ldc\.w cp3,cr5,--r5 ++ *[0-9a-f]*: ef a4 44 40 ldc\.w cp2,cr4,--r4 ++ *[0-9a-f]*: ef ad 89 40 ldc\.w cp4,cr9,--sp ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef a0 10 00 ldc\.w cp0,cr0,r0\[r0\] ++ *[0-9a-f]*: ef af ff 3f ldc\.w cp7,cr15,pc\[pc<<0x3\] ++ *[0-9a-f]*: ef a5 75 24 ldc\.w cp3,cr5,r5\[r4<<0x2\] ++ *[0-9a-f]*: ef a4 54 13 ldc\.w cp2,cr4,r4\[r3<<0x1\] ++ *[0-9a-f]*: ef ad 99 0c ldc\.w cp4,cr9,sp\[r12\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e9 a0 10 00 ldc\.d cp0,cr0,r0\[0x0\] ++ *[0-9a-f]*: e9 af fe ff ldc\.d cp7,cr14,pc\[0x3fc\] ++ *[0-9a-f]*: e9 a5 76 80 ldc\.d cp3,cr6,r5\[0x200\] ++ *[0-9a-f]*: e9 a4 54 7f ldc\.d cp2,cr4,r4\[0x1fc\] ++ *[0-9a-f]*: e9 ad 98 24 ldc\.d cp4,cr8,sp\[0x90\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef a0 00 50 ldc\.d cp0,cr0,--r0 ++ *[0-9a-f]*: ef af ee 50 ldc\.d cp7,cr14,--pc ++ *[0-9a-f]*: ef a5 66 50 ldc\.d cp3,cr6,--r5 ++ *[0-9a-f]*: ef a4 44 50 ldc\.d cp2,cr4,--r4 ++ *[0-9a-f]*: ef ad 88 50 ldc\.d cp4,cr8,--sp ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef a0 10 40 ldc\.d cp0,cr0,r0\[r0\] ++ *[0-9a-f]*: ef af fe 7f ldc\.d cp7,cr14,pc\[pc<<0x3\] ++ *[0-9a-f]*: ef a5 76 64 ldc\.d cp3,cr6,r5\[r4<<0x2\] ++ *[0-9a-f]*: ef a4 54 53 ldc\.d cp2,cr4,r4\[r3<<0x1\] ++ *[0-9a-f]*: ef ad 98 4c ldc\.d cp4,cr8,sp\[r12\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: eb a0 00 00 stc\.w cp0,r0\[0x0\],cr0 ++ *[0-9a-f]*: eb af ef ff stc\.w cp7,pc\[0x3fc\],cr15 ++ *[0-9a-f]*: eb a5 65 80 stc\.w cp3,r5\[0x200\],cr5 ++ *[0-9a-f]*: eb a4 44 7f stc\.w cp2,r4\[0x1fc\],cr4 ++ *[0-9a-f]*: eb ad 89 24 stc\.w cp4,sp\[0x90\],cr9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef a0 00 60 stc\.w cp0,r0\+\+,cr0 ++ *[0-9a-f]*: ef af ef 60 stc\.w cp7,pc\+\+,cr15 ++ *[0-9a-f]*: ef a5 65 60 stc\.w cp3,r5\+\+,cr5 ++ *[0-9a-f]*: ef a4 44 60 stc\.w cp2,r4\+\+,cr4 ++ *[0-9a-f]*: ef ad 89 60 stc\.w cp4,sp\+\+,cr9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef a0 10 80 stc\.w cp0,r0\[r0\],cr0 ++ *[0-9a-f]*: ef af ff bf stc\.w cp7,pc\[pc<<0x3\],cr15 ++ *[0-9a-f]*: ef a5 75 a4 stc\.w cp3,r5\[r4<<0x2\],cr5 ++ *[0-9a-f]*: ef a4 54 93 stc\.w cp2,r4\[r3<<0x1\],cr4 ++ *[0-9a-f]*: ef ad 99 8c stc\.w cp4,sp\[r12\],cr9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: eb a0 10 00 stc\.d cp0,r0\[0x0\],cr0 ++ *[0-9a-f]*: eb af fe ff stc\.d cp7,pc\[0x3fc\],cr14 ++ *[0-9a-f]*: eb a5 76 80 stc\.d cp3,r5\[0x200\],cr6 ++ *[0-9a-f]*: eb a4 54 7f stc\.d cp2,r4\[0x1fc\],cr4 ++ *[0-9a-f]*: eb ad 98 24 stc\.d cp4,sp\[0x90\],cr8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef a0 00 70 stc\.d cp0,r0\+\+,cr0 ++ *[0-9a-f]*: ef af ee 70 stc\.d cp7,pc\+\+,cr14 ++ *[0-9a-f]*: ef a5 66 70 stc\.d cp3,r5\+\+,cr6 ++ *[0-9a-f]*: ef a4 44 70 stc\.d cp2,r4\+\+,cr4 ++ *[0-9a-f]*: ef ad 88 70 stc\.d cp4,sp\+\+,cr8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef a0 10 c0 stc\.d cp0,r0\[r0\],cr0 ++ *[0-9a-f]*: ef af fe ff stc\.d cp7,pc\[pc<<0x3\],cr14 ++ *[0-9a-f]*: ef a5 76 e4 stc\.d cp3,r5\[r4<<0x2\],cr6 ++ *[0-9a-f]*: ef a4 54 d3 stc\.d cp2,r4\[r3<<0x1\],cr4 ++ *[0-9a-f]*: ef ad 98 cc stc\.d cp4,sp\[r12\],cr8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f1 a0 00 00 ldc0\.w cr0,r0\[0x0\] ++ *[0-9a-f]*: f1 af ff ff ldc0\.w cr15,pc\[0x3ffc\] ++ *[0-9a-f]*: f1 a5 85 00 ldc0\.w cr5,r5\[0x2000\] ++ *[0-9a-f]*: f1 a4 74 ff ldc0\.w cr4,r4\[0x1ffc\] ++ *[0-9a-f]*: f1 ad 09 93 ldc0\.w cr9,sp\[0x24c\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f3 a0 00 00 ldc0\.d cr0,r0\[0x0\] ++ *[0-9a-f]*: f3 af fe ff ldc0\.d cr14,pc\[0x3ffc\] ++ *[0-9a-f]*: f3 a5 86 00 ldc0\.d cr6,r5\[0x2000\] ++ *[0-9a-f]*: f3 a4 74 ff ldc0\.d cr4,r4\[0x1ffc\] ++ *[0-9a-f]*: f3 ad 08 93 ldc0\.d cr8,sp\[0x24c\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f5 a0 00 00 stc0\.w r0\[0x0\],cr0 ++ *[0-9a-f]*: f5 af ff ff stc0\.w pc\[0x3ffc\],cr15 ++ *[0-9a-f]*: f5 a5 85 00 stc0\.w r5\[0x2000\],cr5 ++ *[0-9a-f]*: f5 a4 74 ff stc0\.w r4\[0x1ffc\],cr4 ++ *[0-9a-f]*: f5 ad 09 93 stc0\.w sp\[0x24c\],cr9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f7 a0 00 00 stc0\.d r0\[0x0\],cr0 ++ *[0-9a-f]*: f7 af fe ff stc0\.d pc\[0x3ffc\],cr14 ++ *[0-9a-f]*: f7 a5 86 00 stc0\.d r5\[0x2000\],cr6 ++ *[0-9a-f]*: f7 a4 74 ff stc0\.d r4\[0x1ffc\],cr4 ++ *[0-9a-f]*: f7 ad 08 93 stc0\.d sp\[0x24c\],cr8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f6 10 00 00 memc 0,0x0 ++ *[0-9a-f]*: f6 1f ff ff memc -4,0x1f ++ *[0-9a-f]*: f6 18 40 00 memc -65536,0x10 ++ *[0-9a-f]*: f6 17 bf ff memc 65532,0xf ++ ++[0-9a-f]* : ++ *[0-9a-f]*: f8 10 00 00 mems 0,0x0 ++ *[0-9a-f]*: f8 1f ff ff mems -4,0x1f ++ *[0-9a-f]*: f8 18 40 00 mems -65536,0x10 ++ *[0-9a-f]*: f8 17 bf ff mems 65532,0xf ++ ++[0-9a-f]* : ++ *[0-9a-f]*: fa 10 00 00 memt 0,0x0 ++ *[0-9a-f]*: fa 1f ff ff memt -4,0x1f ++ *[0-9a-f]*: fa 18 40 00 memt -65536,0x10 ++ *[0-9a-f]*: fa 17 bf ff memt 65532,0xf ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 70 00 00 stcond r0\[0\],r0 ++ *[0-9a-f]*: ff 7f ff ff stcond pc\[-1\],pc ++ *[0-9a-f]*: f1 77 80 00 stcond r8\[-32768\],r7 ++ *[0-9a-f]*: ef 78 7f ff stcond r7\[32767\],r8 ++ *[0-9a-f]*: eb 7a 12 34 stcond r5\[4660\],r10 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 00 ff ldcm\.w cp0,pc,cr0-cr7 ++ *[0-9a-f]*: ed a0 e0 01 ldcm\.w cp7,r0,cr0 ++ *[0-9a-f]*: ed a4 90 7f ldcm\.w cp4,r4\+\+,cr0-cr6 ++ *[0-9a-f]*: ed a7 60 80 ldcm\.w cp3,r7,cr7 ++ *[0-9a-f]*: ed ac 30 72 ldcm\.w cp1,r12\+\+,cr1,cr4-cr6 ++ *[0-9a-f]*: ed af 01 ff ldcm\.w cp0,pc,cr8-cr15 ++ *[0-9a-f]*: ed a0 e1 01 ldcm\.w cp7,r0,cr8 ++ *[0-9a-f]*: ed a4 91 7f ldcm\.w cp4,r4\+\+,cr8-cr14 ++ *[0-9a-f]*: ed a7 61 80 ldcm\.w cp3,r7,cr15 ++ *[0-9a-f]*: ed ac 31 72 ldcm\.w cp1,r12\+\+,cr9,cr12-cr14 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 04 ff ldcm\.d cp0,pc,cr0-cr15 ++ *[0-9a-f]*: ed a0 e4 01 ldcm\.d cp7,r0,cr0-cr1 ++ *[0-9a-f]*: ed a4 94 7f ldcm\.d cp4,r4\+\+,cr0-cr13 ++ *[0-9a-f]*: ed a7 64 80 ldcm\.d cp3,r7,cr14-cr15 ++ *[0-9a-f]*: ed ac 54 93 ldcm\.d cp2,r12\+\+,cr0-cr3,cr8-cr9,cr14-cr15 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 02 ff stcm\.w cp0,pc,cr0-cr7 ++ *[0-9a-f]*: ed a0 e2 01 stcm\.w cp7,r0,cr0 ++ *[0-9a-f]*: ed a4 92 7f stcm\.w cp4,--r4,cr0-cr6 ++ *[0-9a-f]*: ed a7 62 80 stcm\.w cp3,r7,cr7 ++ *[0-9a-f]*: ed ac 32 72 stcm\.w cp1,--r12,cr1,cr4-cr6 ++ *[0-9a-f]*: ed af 03 ff stcm\.w cp0,pc,cr8-cr15 ++ *[0-9a-f]*: ed a0 e3 01 stcm\.w cp7,r0,cr8 ++ *[0-9a-f]*: ed a4 93 7f stcm\.w cp4,--r4,cr8-cr14 ++ *[0-9a-f]*: ed a7 63 80 stcm\.w cp3,r7,cr15 ++ *[0-9a-f]*: ed ac 33 72 stcm\.w cp1,--r12,cr9,cr12-cr14 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 05 ff stcm\.d cp0,pc,cr0-cr15 ++ *[0-9a-f]*: ed a0 e5 01 stcm\.d cp7,r0,cr0-cr1 ++ *[0-9a-f]*: ed a4 95 7f stcm\.d cp4,--r4,cr0-cr13 ++ *[0-9a-f]*: ed a7 65 80 stcm\.d cp3,r7,cr14-cr15 ++ *[0-9a-f]*: ed ac 55 93 stcm\.d cp2,--r12,cr0-cr3,cr8-cr9,cr14-cr15 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef af ef 00 mvcr\.w cp7,pc,cr15 ++ *[0-9a-f]*: ef a0 00 00 mvcr\.w cp0,r0,cr0 ++ *[0-9a-f]*: ef af 0f 00 mvcr\.w cp0,pc,cr15 ++ *[0-9a-f]*: ef a0 ef 00 mvcr\.w cp7,r0,cr15 ++ *[0-9a-f]*: ef af e0 00 mvcr\.w cp7,pc,cr0 ++ *[0-9a-f]*: ef a7 88 00 mvcr\.w cp4,r7,cr8 ++ *[0-9a-f]*: ef a8 67 00 mvcr\.w cp3,r8,cr7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef ae ee 10 mvcr\.d cp7,lr,cr14 ++ *[0-9a-f]*: ef a0 00 10 mvcr\.d cp0,r0,cr0 ++ *[0-9a-f]*: ef ae 0e 10 mvcr\.d cp0,lr,cr14 ++ *[0-9a-f]*: ef a0 ee 10 mvcr\.d cp7,r0,cr14 ++ *[0-9a-f]*: ef ae e0 10 mvcr\.d cp7,lr,cr0 ++ *[0-9a-f]*: ef a6 88 10 mvcr\.d cp4,r6,cr8 ++ *[0-9a-f]*: ef a8 66 10 mvcr\.d cp3,r8,cr6 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef af ef 20 mvrc\.w cp7,cr15,pc ++ *[0-9a-f]*: ef a0 00 20 mvrc\.w cp0,cr0,r0 ++ *[0-9a-f]*: ef af 0f 20 mvrc\.w cp0,cr15,pc ++ *[0-9a-f]*: ef a0 ef 20 mvrc\.w cp7,cr15,r0 ++ *[0-9a-f]*: ef af e0 20 mvrc\.w cp7,cr0,pc ++ *[0-9a-f]*: ef a7 88 20 mvrc\.w cp4,cr8,r7 ++ *[0-9a-f]*: ef a8 67 20 mvrc\.w cp3,cr7,r8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef ae ee 30 mvrc\.d cp7,cr14,lr ++ *[0-9a-f]*: ef a0 00 30 mvrc\.d cp0,cr0,r0 ++ *[0-9a-f]*: ef ae 0e 30 mvrc\.d cp0,cr14,lr ++ *[0-9a-f]*: ef a0 ee 30 mvrc\.d cp7,cr14,r0 ++ *[0-9a-f]*: ef ae e0 30 mvrc\.d cp7,cr0,lr ++ *[0-9a-f]*: ef a6 88 30 mvrc\.d cp4,cr8,r6 ++ *[0-9a-f]*: ef a8 66 30 mvrc\.d cp3,cr6,r8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df b3 ff bfexts pc,pc,0x1f,0x1f ++ *[0-9a-f]*: e1 d0 b0 00 bfexts r0,r0,0x0,0x0 ++ *[0-9a-f]*: e1 df b3 ff bfexts r0,pc,0x1f,0x1f ++ *[0-9a-f]*: ff d0 b3 ff bfexts pc,r0,0x1f,0x1f ++ *[0-9a-f]*: ff df b0 1f bfexts pc,pc,0x0,0x1f ++ *[0-9a-f]*: ff df b3 e0 bfexts pc,pc,0x1f,0x0 ++ *[0-9a-f]*: ef d8 b1 f0 bfexts r7,r8,0xf,0x10 ++ *[0-9a-f]*: f1 d7 b2 0f bfexts r8,r7,0x10,0xf ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df c3 ff bfextu pc,pc,0x1f,0x1f ++ *[0-9a-f]*: e1 d0 c0 00 bfextu r0,r0,0x0,0x0 ++ *[0-9a-f]*: e1 df c3 ff bfextu r0,pc,0x1f,0x1f ++ *[0-9a-f]*: ff d0 c3 ff bfextu pc,r0,0x1f,0x1f ++ *[0-9a-f]*: ff df c0 1f bfextu pc,pc,0x0,0x1f ++ *[0-9a-f]*: ff df c3 e0 bfextu pc,pc,0x1f,0x0 ++ *[0-9a-f]*: ef d8 c1 f0 bfextu r7,r8,0xf,0x10 ++ *[0-9a-f]*: f1 d7 c2 0f bfextu r8,r7,0x10,0xf ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ff df d3 ff bfins pc,pc,0x1f,0x1f ++ *[0-9a-f]*: e1 d0 d0 00 bfins r0,r0,0x0,0x0 ++ *[0-9a-f]*: e1 df d3 ff bfins r0,pc,0x1f,0x1f ++ *[0-9a-f]*: ff d0 d3 ff bfins pc,r0,0x1f,0x1f ++ *[0-9a-f]*: ff df d0 1f bfins pc,pc,0x0,0x1f ++ *[0-9a-f]*: ff df d3 e0 bfins pc,pc,0x1f,0x0 ++ *[0-9a-f]*: ef d8 d1 f0 bfins r7,r8,0xf,0x10 ++ *[0-9a-f]*: f1 d7 d2 0f bfins r8,r7,0x10,0xf +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.exp binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.exp +--- binutils-2.17/gas/testsuite/gas/avr32/allinsn.exp 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.exp 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,5 @@ ++# AVR32 assembler testsuite. -*- Tcl -*- ++ ++if [istarget avr32-*-*] { ++ run_dump_test "allinsn" ++} +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.s +--- binutils-2.17/gas/testsuite/gas/avr32/allinsn.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,3242 @@ ++ .data ++foodata: .word 42 ++ .text ++footext: ++ .text ++ .global ld_d5 ++ld_d5: ++ ld.d lr,pc[pc<<3] ++ ld.d r0,r0[r0<<0] ++ ld.d r6,r5[r5<<2] ++ ld.d r4,r4[r4<<1] ++ ld.d lr,lr[lr<<1] ++ ld.d r10,r3[sp<<2] ++ ld.d r8,r10[r6<<2] ++ ld.d r2,r7[r9<<0] ++ .text ++ .global ld_w5 ++ld_w5: ++ ld.w pc,pc[pc<<0] ++ ld.w r12,r12[r12<<3] ++ ld.w r5,r5[r5<<2] ++ ld.w r4,r4[r4<<1] ++ ld.w lr,lr[lr<<1] ++ ld.w r2,r9[r9<<0] ++ ld.w r11,r2[r6<<0] ++ ld.w r0,r2[sp<<3] ++ .text ++ .global ld_sh5 ++ld_sh5: ++ ld.sh pc,pc[pc<<0] ++ ld.sh r12,r12[r12<<3] ++ ld.sh r5,r5[r5<<2] ++ ld.sh r4,r4[r4<<1] ++ ld.sh lr,lr[lr<<1] ++ ld.sh r11,r0[pc<<2] ++ ld.sh r10,sp[r6<<2] ++ ld.sh r12,r2[r2<<0] ++ .text ++ .global ld_uh5 ++ld_uh5: ++ ld.uh pc,pc[pc<<0] ++ ld.uh r12,r12[r12<<3] ++ ld.uh r5,r5[r5<<2] ++ ld.uh r4,r4[r4<<1] ++ ld.uh lr,lr[lr<<1] ++ ld.uh r8,pc[lr<<3] ++ ld.uh r6,r1[pc<<1] ++ ld.uh r6,lr[sp<<1] ++ .text ++ .global ld_sb2 ++ld_sb2: ++ ld.sb pc,pc[pc<<0] ++ ld.sb r12,r12[r12<<3] ++ ld.sb r5,r5[r5<<2] ++ ld.sb r4,r4[r4<<1] ++ ld.sb lr,lr[lr<<1] ++ ld.sb r9,r1[pc<<3] ++ ld.sb r0,r3[r11<<1] ++ ld.sb r10,r5[r5<<1] ++ .text ++ .global ld_ub5 ++ld_ub5: ++ ld.ub pc,pc[pc<<0] ++ ld.ub r12,r12[r12<<3] ++ ld.ub r5,r5[r5<<2] ++ ld.ub r4,r4[r4<<1] ++ ld.ub lr,lr[lr<<1] ++ ld.ub r6,r12[r7<<3] ++ ld.ub r2,r6[r12<<0] ++ ld.ub r0,r7[r11<<1] ++ .text ++ .global st_d5 ++st_d5: ++ st.d pc[pc<<0],r14 ++ st.d r12[r12<<3],r12 ++ st.d r5[r5<<2],r6 ++ st.d r4[r4<<1],r4 ++ st.d lr[lr<<1],lr ++ st.d r1[r9<<1],r4 ++ st.d r10[r2<<1],r4 ++ st.d r12[r6<<0],lr ++ .text ++ .global st_w5 ++st_w5: ++ st.w pc[pc<<0],pc ++ st.w r12[r12<<3],r12 ++ st.w r5[r5<<2],r5 ++ st.w r4[r4<<1],r4 ++ st.w lr[lr<<1],lr ++ st.w r1[r10<<0],r3 ++ st.w r0[r10<<1],r9 ++ st.w r4[r5<<3],pc ++ .text ++ .global st_h5 ++st_h5: ++ st.h pc[pc<<0],pc ++ st.h r12[r12<<3],r12 ++ st.h r5[r5<<2],r5 ++ st.h r4[r4<<1],r4 ++ st.h lr[lr<<1],lr ++ st.h r2[r9<<0],r11 ++ st.h r5[r1<<2],r12 ++ st.h pc[r8<<2],r3 ++ .text ++ .global st_b5 ++st_b5: ++ st.b pc[pc<<0],pc ++ st.b r12[r12<<3],r12 ++ st.b r5[r5<<2],r5 ++ st.b r4[r4<<1],r4 ++ st.b lr[lr<<1],lr ++ st.b r1[r8<<1],r6 ++ st.b lr[lr<<3],r1 ++ st.b r5[r0<<2],pc ++ .text ++ .global divs ++divs: ++ divs pc,pc,pc ++ divs r12,r12,r12 ++ divs r5,r5,r5 ++ divs r4,r4,r4 ++ divs lr,lr,lr ++ divs r3,pc,pc ++ divs r9,r12,r2 ++ divs r7,r4,r1 ++ .text ++ .global add1 ++add1: ++ add pc,pc ++ add r12,r12 ++ add r5,r5 ++ add r4,r4 ++ add lr,lr ++ add r12,r9 ++ add r6,r3 ++ add r10,r12 ++ .text ++ .global sub1 ++sub1: ++ sub pc,pc ++ sub r12,r12 ++ sub r5,r5 ++ sub r4,r4 ++ sub lr,lr ++ sub lr,r6 ++ sub r0,sp ++ sub r6,r12 ++ .text ++ .global rsub1 ++rsub1: ++ rsub pc,pc ++ rsub r12,r12 ++ rsub r5,r5 ++ rsub r4,r4 ++ rsub lr,lr ++ rsub r11,sp ++ rsub r7,r4 ++ rsub r9,r1 ++ .text ++ .global cp1 ++cp1: ++ cp pc,pc ++ cp r12,r12 ++ cp r5,r5 ++ cp r4,r4 ++ cp lr,lr ++ cp r6,r2 ++ cp r0,r9 ++ cp r3,sp ++ .text ++ .global or1 ++or1: ++ or pc,pc ++ or r12,r12 ++ or r5,r5 ++ or r4,r4 ++ or lr,lr ++ or r4,r9 ++ or r11,r4 ++ or r4,r0 ++ .text ++ .global eor1 ++eor1: ++ eor pc,pc ++ eor r12,r12 ++ eor r5,r5 ++ eor r4,r4 ++ eor lr,lr ++ eor r12,r11 ++ eor r0,r1 ++ eor r5,pc ++ .text ++ .global and1 ++and1: ++ and pc,pc ++ and r12,r12 ++ and r5,r5 ++ and r4,r4 ++ and lr,lr ++ and r8,r1 ++ and r0,sp ++ and r10,r5 ++ .text ++ .global tst ++tst: ++ tst pc,pc ++ tst r12,r12 ++ tst r5,r5 ++ tst r4,r4 ++ tst lr,lr ++ tst r0,r12 ++ tst r10,r6 ++ tst sp,r4 ++ .text ++ .global andn ++andn: ++ andn pc,pc ++ andn r12,r12 ++ andn r5,r5 ++ andn r4,r4 ++ andn lr,lr ++ andn r9,r12 ++ andn r11,sp ++ andn r12,r5 ++ .text ++ .global mov3 ++mov3: ++ mov pc,pc ++ mov r12,r12 ++ mov r5,r5 ++ mov r4,r4 ++ mov lr,lr ++ mov r5,r9 ++ mov r11,r11 ++ mov r2,lr ++ .text ++ .global st_w1 ++st_w1: ++ st.w pc++,pc ++ st.w r12++,r12 ++ st.w r5++,r5 ++ st.w r4++,r4 ++ st.w lr++,lr ++ st.w r1++,r11 ++ st.w sp++,r0 ++ st.w sp++,r1 ++ .text ++ .global st_h1 ++st_h1: ++ st.h pc++,pc ++ st.h r12++,r12 ++ st.h r5++,r5 ++ st.h r4++,r4 ++ st.h lr++,lr ++ st.h r12++,sp ++ st.h r7++,lr ++ st.h r7++,r4 ++ .text ++ .global st_b1 ++st_b1: ++ st.b pc++,pc ++ st.b r12++,r12 ++ st.b r5++,r5 ++ st.b r4++,r4 ++ st.b lr++,lr ++ st.b r9++,sp ++ st.b r1++,sp ++ st.b r0++,r4 ++ .text ++ .global st_w2 ++st_w2: ++ st.w --pc,pc ++ st.w --r12,r12 ++ st.w --r5,r5 ++ st.w --r4,r4 ++ st.w --lr,lr ++ st.w --r1,r7 ++ st.w --r3,r9 ++ st.w --r5,r5 ++ .text ++ .global st_h2 ++st_h2: ++ st.h --pc,pc ++ st.h --r12,r12 ++ st.h --r5,r5 ++ st.h --r4,r4 ++ st.h --lr,lr ++ st.h --r5,r7 ++ st.h --r8,r8 ++ st.h --r7,r2 ++ .text ++ .global st_b2 ++st_b2: ++ st.b --pc,pc ++ st.b --r12,r12 ++ st.b --r5,r5 ++ st.b --r4,r4 ++ st.b --lr,lr ++ st.b --sp,sp ++ st.b --sp,r11 ++ st.b --r4,r5 ++ .text ++ .global ld_w1 ++ld_w1: ++ ld.w pc,pc++ ++ ld.w r12,r12++ ++ ld.w r5,r5++ ++ ld.w r4,r4++ ++ ld.w lr,lr++ ++ ld.w r3,r7++ ++ ld.w r3,lr++ ++ ld.w r12,r5++ ++ .text ++ .global ld_sh1 ++ld_sh1: ++ ld.sh pc,pc++ ++ ld.sh r12,r12++ ++ ld.sh r5,r5++ ++ ld.sh r4,r4++ ++ ld.sh lr,lr++ ++ ld.sh r11,r2++ ++ ld.sh r2,r8++ ++ ld.sh r7,r6++ ++ .text ++ .global ld_uh1 ++ld_uh1: ++ ld.uh pc,pc++ ++ ld.uh r12,r12++ ++ ld.uh r5,r5++ ++ ld.uh r4,r4++ ++ ld.uh lr,lr++ ++ ld.uh r6,r7++ ++ ld.uh r10,r11++ ++ ld.uh lr,r4++ ++ .text ++ .global ld_ub1 ++ld_ub1: ++ ld.ub pc,pc++ ++ ld.ub r12,r12++ ++ ld.ub r5,r5++ ++ ld.ub r4,r4++ ++ ld.ub lr,lr++ ++ ld.ub r8,lr++ ++ ld.ub r12,r12++ ++ ld.ub r11,r10++ ++ .text ++ .global ld_w2 ++ld_w2: ++ ld.w pc,--pc ++ ld.w r12,--r12 ++ ld.w r5,--r5 ++ ld.w r4,--r4 ++ ld.w lr,--lr ++ ld.w r10,--lr ++ ld.w r12,--r9 ++ ld.w r6,--r5 ++ .text ++ .global ld_sh2 ++ld_sh2: ++ ld.sh pc,--pc ++ ld.sh r12,--r12 ++ ld.sh r5,--r5 ++ ld.sh r4,--r4 ++ ld.sh lr,--lr ++ ld.sh pc,--r10 ++ ld.sh r6,--r3 ++ ld.sh r4,--r6 ++ .text ++ .global ld_uh2 ++ld_uh2: ++ ld.uh pc,--pc ++ ld.uh r12,--r12 ++ ld.uh r5,--r5 ++ ld.uh r4,--r4 ++ ld.uh lr,--lr ++ ld.uh r3,--r2 ++ ld.uh r1,--r0 ++ ld.uh r2,--r9 ++ .text ++ .global ld_ub2 ++ld_ub2: ++ ld.ub pc,--pc ++ ld.ub r12,--r12 ++ ld.ub r5,--r5 ++ ld.ub r4,--r4 ++ ld.ub lr,--lr ++ ld.ub r1,--r1 ++ ld.ub r0,--r6 ++ ld.ub r2,--r7 ++ .text ++ .global ld_ub3 ++ld_ub3: ++ ld.ub pc,pc[0] ++ ld.ub r12,r12[7] ++ ld.ub r5,r5[4] ++ ld.ub r4,r4[3] ++ ld.ub lr,lr[1] ++ ld.ub r6,r9[6] ++ ld.ub r2,lr[4] ++ ld.ub r1,r8[0] ++ .text ++ .global sub3_sp ++sub3_sp: ++ sub sp,0 ++ sub sp,-4 ++ sub sp,-512 ++ sub sp,508 ++ sub sp,4 ++ sub sp,44 ++ sub sp,8 ++ sub sp,348 ++ .text ++ .global sub3 ++sub3: ++ sub pc,0 ++ sub r12,-1 ++ sub r5,-128 ++ sub r4,127 ++ sub lr,1 ++ sub r6,-41 ++ sub r4,37 ++ sub r12,56 ++ .text ++ .global mov1 ++mov1: ++ mov pc,0 ++ mov r12,-1 ++ mov r5,-128 ++ mov r4,127 ++ mov lr,1 ++ mov pc,14 ++ mov r6,-100 ++ mov lr,-122 ++ .text ++ .global lddsp ++lddsp: ++ lddsp pc,sp[0] ++ lddsp r12,sp[508] ++ lddsp r5,sp[256] ++ lddsp r4,sp[252] ++ lddsp lr,sp[4] ++ lddsp lr,sp[256] ++ lddsp r12,sp[20] ++ lddsp r9,sp[472] ++ .text ++ .global lddpc ++lddpc: ++ lddpc pc,pc[0] ++ lddpc r0,pc[508] ++ lddpc r8,pc[256] ++ lddpc r7,pc[252] ++ lddpc lr,pc[4] ++ lddpc sp,pc[472] ++ lddpc r6,pc[120] ++ lddpc r11,pc[28] ++ .text ++ .global stdsp ++stdsp: ++ stdsp sp[0],pc ++ stdsp sp[508],r12 ++ stdsp sp[256],r5 ++ stdsp sp[252],r4 ++ stdsp sp[4],lr ++ stdsp sp[304],pc ++ stdsp sp[256],r0 ++ stdsp sp[336],r5 ++ .text ++ .global cp2 ++cp2: ++ cp pc,0 ++ cp r12,-1 ++ cp r5,-32 ++ cp r4,31 ++ cp lr,1 ++ cp r8,3 ++ cp lr,16 ++ cp r7,-26 ++ .text ++ .global acr ++acr: ++ acr pc ++ acr r12 ++ acr r5 ++ acr r4 ++ acr lr ++ acr r2 ++ acr r12 ++ acr pc ++ .text ++ .global scr ++scr: ++ scr pc ++ scr r12 ++ scr r5 ++ scr r4 ++ scr lr ++ scr pc ++ scr r6 ++ scr r1 ++ .text ++ .global cpc0 ++cpc0: ++ cpc pc ++ cpc r12 ++ cpc r5 ++ cpc r4 ++ cpc lr ++ cpc pc ++ cpc r4 ++ cpc r9 ++ .text ++ .global neg ++neg: ++ neg pc ++ neg r12 ++ neg r5 ++ neg r4 ++ neg lr ++ neg r7 ++ neg r1 ++ neg r9 ++ .text ++ .global abs ++abs: ++ abs pc ++ abs r12 ++ abs r5 ++ abs r4 ++ abs lr ++ abs r6 ++ abs r6 ++ abs r4 ++ .text ++ .global castu_b ++castu_b: ++ castu.b pc ++ castu.b r12 ++ castu.b r5 ++ castu.b r4 ++ castu.b lr ++ castu.b r7 ++ castu.b sp ++ castu.b r9 ++ .text ++ .global casts_b ++casts_b: ++ casts.b pc ++ casts.b r12 ++ casts.b r5 ++ casts.b r4 ++ casts.b lr ++ casts.b r11 ++ casts.b r1 ++ casts.b r10 ++ .text ++ .global castu_h ++castu_h: ++ castu.h pc ++ castu.h r12 ++ castu.h r5 ++ castu.h r4 ++ castu.h lr ++ castu.h r10 ++ castu.h r11 ++ castu.h r1 ++ .text ++ .global casts_h ++casts_h: ++ casts.h pc ++ casts.h r12 ++ casts.h r5 ++ casts.h r4 ++ casts.h lr ++ casts.h r0 ++ casts.h r5 ++ casts.h r9 ++ .text ++ .global brev ++brev: ++ brev pc ++ brev r12 ++ brev r5 ++ brev r4 ++ brev lr ++ brev r5 ++ brev r10 ++ brev r8 ++ .text ++ .global swap_h ++swap_h: ++ swap.h pc ++ swap.h r12 ++ swap.h r5 ++ swap.h r4 ++ swap.h lr ++ swap.h r7 ++ swap.h r0 ++ swap.h r8 ++ .text ++ .global swap_b ++swap_b: ++ swap.b pc ++ swap.b r12 ++ swap.b r5 ++ swap.b r4 ++ swap.b lr ++ swap.b r10 ++ swap.b r12 ++ swap.b r1 ++ .text ++ .global swap_bh ++swap_bh: ++ swap.bh pc ++ swap.bh r12 ++ swap.bh r5 ++ swap.bh r4 ++ swap.bh lr ++ swap.bh r9 ++ swap.bh r4 ++ swap.bh r1 ++ .text ++ .global One_s_compliment ++One_s_compliment: ++ com pc ++ com r12 ++ com r5 ++ com r4 ++ com lr ++ com r2 ++ com r2 ++ com r7 ++ .text ++ .global tnbz ++tnbz: ++ tnbz pc ++ tnbz r12 ++ tnbz r5 ++ tnbz r4 ++ tnbz lr ++ tnbz r8 ++ tnbz r12 ++ tnbz pc ++ .text ++ .global rol ++rol: ++ rol pc ++ rol r12 ++ rol r5 ++ rol r4 ++ rol lr ++ rol r10 ++ rol r9 ++ rol r5 ++ .text ++ .global ror ++ror: ++ ror pc ++ ror r12 ++ ror r5 ++ ror r4 ++ ror lr ++ ror r8 ++ ror r4 ++ ror r7 ++ .text ++ .global icall ++icall: ++ icall pc ++ icall r12 ++ icall r5 ++ icall r4 ++ icall lr ++ icall r3 ++ icall r1 ++ icall r3 ++ .text ++ .global mustr ++mustr: ++ mustr pc ++ mustr r12 ++ mustr r5 ++ mustr r4 ++ mustr lr ++ mustr r1 ++ mustr r4 ++ mustr r12 ++ .text ++ .global musfr ++musfr: ++ musfr pc ++ musfr r12 ++ musfr r5 ++ musfr r4 ++ musfr lr ++ musfr r11 ++ musfr r12 ++ musfr r2 ++ .text ++ .global ret_cond ++ret_cond: ++ reteq pc ++ retal r12 ++ retls r5 ++ retpl r4 ++ retne lr ++ retgt r0 ++ retgt r12 ++ retge r10 ++ .text ++ .global sr_cond ++sr_cond: ++ sreq pc ++ sral r12 ++ srls r5 ++ srpl r4 ++ srne lr ++ srlt r0 ++ sral sp ++ srge r9 ++ .text ++ .global ld_w3 ++ld_w3: ++ ld.w pc,pc[0] ++ ld.w r12,r12[124] ++ ld.w r5,r5[64] ++ ld.w r4,r4[60] ++ ld.w lr,lr[4] ++ ld.w sp,r2[52] ++ ld.w r9,r1[8] ++ ld.w r5,sp[60] ++ .text ++ .global ld_sh3 ++ld_sh3: ++ ld.sh pc,pc[0] ++ ld.sh r12,r12[14] ++ ld.sh r5,r5[8] ++ ld.sh r4,r4[6] ++ ld.sh lr,lr[2] ++ ld.sh r4,r2[8] ++ ld.sh sp,lr[10] ++ ld.sh r2,r11[2] ++ .text ++ .global ld_uh3 ++ld_uh3: ++ ld.uh pc,pc[0] ++ ld.uh r12,r12[14] ++ ld.uh r5,r5[8] ++ ld.uh r4,r4[6] ++ ld.uh lr,lr[2] ++ ld.uh r10,r0[10] ++ ld.uh r8,r11[8] ++ ld.uh r10,r2[12] ++ .text ++ .global st_w3 ++st_w3: ++ st.w pc[0],pc ++ st.w r12[60],r12 ++ st.w r5[32],r5 ++ st.w r4[28],r4 ++ st.w lr[4],lr ++ st.w r7[44],r11 ++ st.w r2[24],r6 ++ st.w r4[12],r9 ++ .text ++ .global st_h3 ++st_h3: ++ st.h pc[0],pc ++ st.h r12[14],r12 ++ st.h r5[8],r5 ++ st.h r4[6],r4 ++ st.h lr[2],lr ++ st.h lr[10],r12 ++ st.h r6[4],r0 ++ st.h r5[12],sp ++ .text ++ .global st_b3 ++st_b3: ++ st.b pc[0],pc ++ st.b r12[7],r12 ++ st.b r5[4],r5 ++ st.b r4[3],r4 ++ st.b lr[1],lr ++ st.b r12[6],r9 ++ st.b r2[3],lr ++ st.b r1[3],r11 ++ .text ++ .global ldd ++ldd: ++ ld.d r0,pc ++ ld.d r14,r12 ++ ld.d r8,r5 ++ ld.d r6,r4 ++ ld.d r2,lr ++ ld.d r14,r7 ++ ld.d r4,r4 ++ ld.d r14,pc ++ .text ++ .global ldd_postinc ++ldd_postinc: ++ ld.d r0,pc++ ++ ld.d r14,r12++ ++ ld.d r8,r5++ ++ ld.d r6,r4++ ++ ld.d r2,lr++ ++ ld.d r14,r5++ ++ ld.d r12,r11++ ++ ld.d r2,r12++ ++ .text ++ .global ldd_predec ++ldd_predec: ++ ld.d r0,--pc ++ ld.d r14,--r12 ++ ld.d r8,--r5 ++ ld.d r6,--r4 ++ ld.d r2,--lr ++ ld.d r8,--r0 ++ ld.d r10,--pc ++ ld.d r2,--r4 ++ .text ++ .global std ++std: ++ st.d pc,r0 ++ st.d r12,r14 ++ st.d r5,r8 ++ st.d r4,r6 ++ st.d lr,r2 ++ st.d r0,r12 ++ st.d sp,r4 ++ st.d r12,r12 ++ .text ++ .global std_postinc ++std_postinc: ++ st.d pc++,r0 ++ st.d r12++,r14 ++ st.d r5++,r8 ++ st.d r4++,r6 ++ st.d lr++,r2 ++ st.d sp++,r6 ++ st.d r10++,r6 ++ st.d r7++,r2 ++ .text ++ .global std_predec ++std_predec: ++ st.d --pc,r0 ++ st.d --r12,r14 ++ st.d --r5,r8 ++ st.d --r4,r6 ++ st.d --lr,r2 ++ st.d --r3,r6 ++ st.d --lr,r2 ++ st.d --r0,r4 ++ .text ++ .global mul ++mul: ++ mul pc,pc ++ mul r12,r12 ++ mul r5,r5 ++ mul r4,r4 ++ mul lr,lr ++ mul r10,lr ++ mul r0,r8 ++ mul r8,r5 ++ .text ++ .global asr_imm5 ++asr_imm5: ++ asr pc,0 ++ asr r12,31 ++ asr r5,16 ++ asr r4,15 ++ asr lr,1 ++ asr r6,23 ++ asr r6,18 ++ asr r5,8 ++ .text ++ .global lsl_imm5 ++lsl_imm5: ++ lsl pc,0 ++ lsl r12,31 ++ lsl r5,16 ++ lsl r4,15 ++ lsl lr,1 ++ lsl r12,13 ++ lsl r6,16 ++ lsl r1,25 ++ .text ++ .global lsr_imm5 ++lsr_imm5: ++ lsr pc,0 ++ lsr r12,31 ++ lsr r5,16 ++ lsr r4,15 ++ lsr lr,1 ++ lsr r0,1 ++ lsr r8,10 ++ lsr r7,26 ++ .text ++ .global sbr ++sbr: ++ sbr pc,0 ++ sbr r12,31 ++ sbr r5,16 ++ sbr r4,15 ++ sbr lr,1 ++ sbr r8,31 ++ sbr r6,22 ++ sbr r1,23 ++ .text ++ .global cbr ++cbr: ++ cbr pc,0 ++ cbr r12,31 ++ cbr r5,16 ++ cbr r4,15 ++ cbr lr,1 ++ cbr r12,10 ++ cbr r7,22 ++ cbr r8,9 ++ .text ++ .global brc1 ++brc1: ++ breq 0 ++ brpl -2 ++ brge -256 ++ brcs 254 ++ brne 2 ++ brcs 230 ++ breq -18 ++ breq 12 ++ .text ++ .global rjmp ++rjmp: ++ rjmp 0 ++ rjmp -2 ++ rjmp -1024 ++ rjmp 1022 ++ rjmp 2 ++ rjmp -962 ++ rjmp 14 ++ rjmp -516 ++ .text ++ .global rcall1 ++rcall1: ++ rcall 0 ++ rcall -2 ++ rcall -1024 ++ rcall 1022 ++ rcall 2 ++ rcall 216 ++ rcall -530 ++ rcall -972 ++ .text ++ .global acall ++acall: ++ acall 0 ++ acall 1020 ++ acall 512 ++ acall 508 ++ acall 4 ++ acall 356 ++ acall 304 ++ acall 172 ++ .text ++ .global scall ++scall: ++ scall ++ scall ++ scall ++ scall ++ scall ++ scall ++ scall ++ scall ++ .text ++ .global popm ++popm: ++ /* popm with no argument fails currently */ ++ popm pc ++ popm r0-r11,pc,r12=-1 ++ popm lr ++ popm r0-r11,pc,r12=1 ++ popm r0-r3 ++ popm r4-r10,pc ++ popm r0-r3,r11,pc,r12=0 ++ popm r0-r7,r10-r12,lr ++ .text ++ .global pushm ++pushm: ++ pushm pc ++ pushm r0-r12,lr,pc ++ pushm pc ++ pushm r0-r12,lr ++ pushm r0-r3 ++ pushm r8-r10,lr,pc ++ pushm r0-r3,r10 ++ pushm r8-r9,r12 ++ .text ++ .global popm_n ++popm_n: ++ popm pc ++ popm r0-r11,pc,r12=-1 ++ popm lr ++ popm r0-r11,pc,r12=1 ++ popm r0-r3 ++ popm r4-r10,pc ++ popm r0-r3,r11,pc,r12=0 ++ popm r0-r7,r10-r12,lr ++ .text ++ .global pushm_n ++pushm_n: ++ pushm pc ++ pushm r0-r12,lr,pc ++ pushm pc ++ pushm r0-r12,lr ++ pushm r0-r3 ++ pushm r8-r10,lr,pc ++ pushm r0-r3,r10 ++ pushm r8-r9,r12 ++ .text ++ .global csrfcz ++csrfcz: ++ csrfcz 0 ++ csrfcz 31 ++ csrfcz 16 ++ csrfcz 15 ++ csrfcz 1 ++ csrfcz 5 ++ csrfcz 13 ++ csrfcz 23 ++ .text ++ .global ssrf ++ssrf: ++ ssrf 0 ++ ssrf 31 ++ ssrf 16 ++ ssrf 15 ++ ssrf 1 ++ ssrf 29 ++ ssrf 13 ++ ssrf 13 ++ .text ++ .global csrf ++csrf: ++ csrf 0 ++ csrf 31 ++ csrf 16 ++ csrf 15 ++ csrf 1 ++ csrf 10 ++ csrf 15 ++ csrf 11 ++ .text ++ .global rete ++rete: ++ rete ++ .text ++ .global rets ++rets: ++ rets ++ .text ++ .global retd ++retd: ++ retd ++ .text ++ .global retj ++retj: ++ retj ++ .text ++ .global tlbr ++tlbr: ++ tlbr ++ .text ++ .global tlbs ++tlbs: ++ tlbs ++ .text ++ .global tlbw ++tlbw: ++ tlbw ++ .text ++ .global breakpoint ++breakpoint: ++ breakpoint ++ .text ++ .global incjosp ++incjosp: ++ incjosp 1 ++ incjosp 2 ++ incjosp 3 ++ incjosp 4 ++ incjosp -4 ++ incjosp -3 ++ incjosp -2 ++ incjosp -1 ++ .text ++ .global nop ++nop: ++ nop ++ .text ++ .global popjc ++popjc: ++ popjc ++ .text ++ .global pushjc ++pushjc: ++ pushjc ++ .text ++ .global add2 ++add2: ++ add pc,pc,pc<<0 ++ add r12,r12,r12<<3 ++ add r5,r5,r5<<2 ++ add r4,r4,r4<<1 ++ add lr,lr,lr<<1 ++ add r0,r12,r0<<1 ++ add r9,r12,r4<<0 ++ add r12,r12,r7<<2 ++ .text ++ .global sub2 ++sub2: ++ sub pc,pc,pc<<0 ++ sub r12,r12,r12<<3 ++ sub r5,r5,r5<<2 ++ sub r4,r4,r4<<1 ++ sub lr,lr,lr<<1 ++ sub sp,r3,r4<<0 ++ sub r3,r7,r3<<0 ++ sub sp,r10,sp<<1 ++ .text ++ .global divu ++divu: ++ divu pc,pc,pc ++ divu r12,r12,r12 ++ divu r5,r5,r5 ++ divu r4,r4,r4 ++ divu lr,lr,lr ++ divu sp,r4,pc ++ divu r5,r5,sp ++ divu r10,sp,r0 ++ .text ++ .global addhh_w ++addhh_w: ++ addhh.w pc,pc:b,pc:b ++ addhh.w r12,r12:t,r12:t ++ addhh.w r5,r5:t,r5:t ++ addhh.w r4,r4:b,r4:b ++ addhh.w lr,lr:t,lr:t ++ addhh.w r0,r0:b,r3:b ++ addhh.w lr,r12:t,r7:b ++ addhh.w r3,r10:t,r2:b ++ .text ++ .global subhh_w ++subhh_w: ++ subhh.w pc,pc:b,pc:b ++ subhh.w r12,r12:t,r12:t ++ subhh.w r5,r5:t,r5:t ++ subhh.w r4,r4:b,r4:b ++ subhh.w lr,lr:t,lr:t ++ subhh.w r10,r1:t,r7:b ++ subhh.w pc,r10:t,lr:t ++ subhh.w r3,r0:t,r12:b ++ .text ++ .global adc ++adc: ++ adc pc,pc,pc ++ adc r12,r12,r12 ++ adc r5,r5,r5 ++ adc r4,r4,r4 ++ adc lr,lr,lr ++ adc r4,r0,r7 ++ adc sp,r4,r3 ++ adc r2,r12,r0 ++ .text ++ .global sbc ++sbc: ++ sbc pc,pc,pc ++ sbc r12,r12,r12 ++ sbc r5,r5,r5 ++ sbc r4,r4,r4 ++ sbc lr,lr,lr ++ sbc r6,r7,r9 ++ sbc r0,r8,r5 ++ sbc r1,r0,r4 ++ .text ++ .global mul_2 ++mul_2: ++ mul pc,pc,pc ++ mul r12,r12,r12 ++ mul r5,r5,r5 ++ mul r4,r4,r4 ++ mul lr,lr,lr ++ mul pc,r0,r0 ++ mul r8,pc,lr ++ mul r4,r12,pc ++ .text ++ .global mac ++mac: ++ mac pc,pc,pc ++ mac r12,r12,r12 ++ mac r5,r5,r5 ++ mac r4,r4,r4 ++ mac lr,lr,lr ++ mac r10,r4,r0 ++ mac r7,lr,r0 ++ mac r2,r9,r12 ++ .text ++ .global mulsd ++mulsd: ++ muls.d pc,pc,pc ++ muls.d r12,r12,r12 ++ muls.d r5,r5,r5 ++ muls.d r4,r4,r4 ++ muls.d lr,lr,lr ++ muls.d r2,r8,lr ++ muls.d r4,r0,r11 ++ muls.d r5,lr,r6 ++ .text ++ .global macsd ++macsd: ++ macs.d r0,pc,pc ++ macs.d r14,r12,r12 ++ macs.d r8,r5,r5 ++ macs.d r6,r4,r4 ++ macs.d r2,lr,lr ++ macs.d r8,r1,r9 ++ macs.d r14,r8,r8 ++ macs.d r4,r3,r12 ++ .text ++ .global mulud ++mulud: ++ mulu.d r0,pc,pc ++ mulu.d r14,r12,r12 ++ mulu.d r8,r5,r5 ++ mulu.d r6,r4,r4 ++ mulu.d r2,lr,lr ++ mulu.d r6,r5,r0 ++ mulu.d r4,r6,r1 ++ mulu.d r8,r8,r2 ++ .text ++ .global macud ++macud: ++ macu.d r0,pc,pc ++ macu.d r14,r12,r12 ++ macu.d r8,r5,r5 ++ macu.d r6,r4,r4 ++ macu.d r2,lr,lr ++ macu.d r6,sp,r11 ++ macu.d r2,r4,r8 ++ macu.d r6,r10,r9 ++ .text ++ .global asr_1 ++asr_1: ++ asr pc,pc,pc ++ asr r12,r12,r12 ++ asr r5,r5,r5 ++ asr r4,r4,r4 ++ asr lr,lr,lr ++ asr pc,r6,pc ++ asr r0,r6,r12 ++ asr r4,sp,r0 ++ .text ++ .global lsl_1 ++lsl_1: ++ lsl pc,pc,pc ++ lsl r12,r12,r12 ++ lsl r5,r5,r5 ++ lsl r4,r4,r4 ++ lsl lr,lr,lr ++ lsl lr,r5,lr ++ lsl r5,pc,r3 ++ lsl r1,pc,r9 ++ .text ++ .global lsr_1 ++lsr_1: ++ lsr pc,pc,pc ++ lsr r12,r12,r12 ++ lsr r5,r5,r5 ++ lsr r4,r4,r4 ++ lsr lr,lr,lr ++ lsr r2,r4,r1 ++ lsr r5,r1,r6 ++ lsr sp,r6,r7 ++ .text ++ .global xchg ++xchg: ++ xchg pc,pc,pc ++ xchg r12,r12,r12 ++ xchg r5,r5,r5 ++ xchg r4,r4,r4 ++ xchg lr,lr,lr ++ xchg lr,r4,sp ++ xchg r1,r5,r12 ++ xchg lr,r12,r0 ++ .text ++ .global max ++max: ++ max pc,pc,pc ++ max r12,r12,r12 ++ max r5,r5,r5 ++ max r4,r4,r4 ++ max lr,lr,lr ++ max lr,r2,sp ++ max r4,r10,r9 ++ max lr,r9,lr ++ .text ++ .global min ++min: ++ min pc,pc,pc ++ min r12,r12,r12 ++ min r5,r5,r5 ++ min r4,r4,r4 ++ min lr,lr,lr ++ min r9,r7,r8 ++ min sp,r5,r5 ++ min r4,r1,r4 ++ .text ++ .global addabs ++addabs: ++ addabs pc,pc,pc ++ addabs r12,r12,r12 ++ addabs r5,r5,r5 ++ addabs r4,r4,r4 ++ addabs lr,lr,lr ++ addabs r7,r10,r0 ++ addabs r9,r9,r7 ++ addabs r2,r8,r12 ++ .text ++ .global mulnhh_w ++mulnhh_w: ++ mulnhh.w pc,pc:b,pc:b ++ mulnhh.w r12,r12:t,r12:t ++ mulnhh.w r5,r5:t,r5:t ++ mulnhh.w r4,r4:b,r4:b ++ mulnhh.w lr,lr:t,lr:t ++ mulnhh.w r11,sp:t,r9:b ++ mulnhh.w sp,r4:b,lr:t ++ mulnhh.w r12,r2:t,r11:b ++ .text ++ .global mulnwh_d ++mulnwh_d: ++ mulnwh.d r0,pc,pc:b ++ mulnwh.d r14,r12,r12:t ++ mulnwh.d r8,r5,r5:t ++ mulnwh.d r6,r4,r4:b ++ mulnwh.d r2,lr,lr:t ++ mulnwh.d r14,r3,r2:t ++ mulnwh.d r4,r5,r9:b ++ mulnwh.d r12,r4,r4:t ++ .text ++ .global machh_w ++machh_w: ++ machh.w pc,pc:b,pc:b ++ machh.w r12,r12:t,r12:t ++ machh.w r5,r5:t,r5:t ++ machh.w r4,r4:b,r4:b ++ machh.w lr,lr:t,lr:t ++ machh.w lr,r5:b,r1:t ++ machh.w r9,r6:b,r7:b ++ machh.w r5,lr:t,r12:b ++ .text ++ .global machh_d ++machh_d: ++ machh.d r0,pc:b,pc:b ++ machh.d r14,r12:t,r12:t ++ machh.d r8,r5:t,r5:t ++ machh.d r6,r4:b,r4:b ++ machh.d r2,lr:t,lr:t ++ machh.d r10,r0:b,r8:b ++ machh.d r14,r4:b,r5:t ++ machh.d r8,r0:b,r4:t ++ .text ++ .global macsathh_w ++macsathh_w: ++ macsathh.w pc,pc:b,pc:b ++ macsathh.w r12,r12:t,r12:t ++ macsathh.w r5,r5:t,r5:t ++ macsathh.w r4,r4:b,r4:b ++ macsathh.w lr,lr:t,lr:t ++ macsathh.w r7,r7:t,pc:t ++ macsathh.w r4,r2:t,r4:b ++ macsathh.w r4,r8:t,r3:t ++ .text ++ .global mulhh_w ++mulhh_w: ++ mulhh.w pc,pc:b,pc:b ++ mulhh.w r12,r12:t,r12:t ++ mulhh.w r5,r5:t,r5:t ++ mulhh.w r4,r4:b,r4:b ++ mulhh.w lr,lr:t,lr:t ++ mulhh.w r7,r4:t,r9:b ++ mulhh.w pc,r3:t,r7:t ++ mulhh.w pc,r4:b,r9:t ++ .text ++ .global mulsathh_h ++mulsathh_h: ++ mulsathh.h pc,pc:b,pc:b ++ mulsathh.h r12,r12:t,r12:t ++ mulsathh.h r5,r5:t,r5:t ++ mulsathh.h r4,r4:b,r4:b ++ mulsathh.h lr,lr:t,lr:t ++ mulsathh.h r3,r1:b,sp:b ++ mulsathh.h r11,lr:t,r11:b ++ mulsathh.h r8,r8:b,r11:t ++ .text ++ .global mulsathh_w ++mulsathh_w: ++ mulsathh.w pc,pc:b,pc:b ++ mulsathh.w r12,r12:t,r12:t ++ mulsathh.w r5,r5:t,r5:t ++ mulsathh.w r4,r4:b,r4:b ++ mulsathh.w lr,lr:t,lr:t ++ mulsathh.w lr,r11:t,r6:b ++ mulsathh.w r6,r6:b,r7:t ++ mulsathh.w r10,r2:b,r3:b ++ .text ++ .global mulsatrndhh_h ++mulsatrndhh_h: ++ mulsatrndhh.h pc,pc:b,pc:b ++ mulsatrndhh.h r12,r12:t,r12:t ++ mulsatrndhh.h r5,r5:t,r5:t ++ mulsatrndhh.h r4,r4:b,r4:b ++ mulsatrndhh.h lr,lr:t,lr:t ++ mulsatrndhh.h r11,r6:b,r9:b ++ mulsatrndhh.h r11,r3:b,r8:t ++ mulsatrndhh.h r5,sp:t,r7:t ++ .text ++ .global mulsatrndwh_w ++mulsatrndwh_w: ++ mulsatrndwh.w pc,pc,pc:b ++ mulsatrndwh.w r12,r12,r12:t ++ mulsatrndwh.w r5,r5,r5:t ++ mulsatrndwh.w r4,r4,r4:b ++ mulsatrndwh.w lr,lr,lr:t ++ mulsatrndwh.w r5,r12,r0:b ++ mulsatrndwh.w r7,r10,pc:b ++ mulsatrndwh.w r10,r8,r5:t ++ .text ++ .global macwh_d ++macwh_d: ++ macwh.d r0,pc,pc:b ++ macwh.d r14,r12,r12:t ++ macwh.d r8,r5,r5:t ++ macwh.d r6,r4,r4:b ++ macwh.d r2,lr,lr:t ++ macwh.d r4,r10,r12:t ++ macwh.d r4,r7,sp:b ++ macwh.d r14,r9,r11:b ++ .text ++ .global mulwh_d ++mulwh_d: ++ mulwh.d r0,pc,pc:b ++ mulwh.d r14,r12,r12:t ++ mulwh.d r8,r5,r5:t ++ mulwh.d r6,r4,r4:b ++ mulwh.d r2,lr,lr:t ++ mulwh.d r12,r5,r1:b ++ mulwh.d r0,r1,r3:t ++ mulwh.d r0,r9,r2:b ++ .text ++ .global mulsatwh_w ++mulsatwh_w: ++ mulsatwh.w pc,pc,pc:b ++ mulsatwh.w r12,r12,r12:t ++ mulsatwh.w r5,r5,r5:t ++ mulsatwh.w r4,r4,r4:b ++ mulsatwh.w lr,lr,lr:t ++ mulsatwh.w r11,pc,r10:t ++ mulsatwh.w sp,r12,r9:t ++ mulsatwh.w r0,r3,r2:t ++ .text ++ .global ldw7 ++ldw7: ++ ld.w pc,pc[pc:b<<2] ++ ld.w r12,r12[r12:t<<2] ++ ld.w r5,r5[r5:u<<2] ++ ld.w r4,r4[r4:l<<2] ++ ld.w lr,lr[lr:l<<2] ++ ld.w r9,r10[r6:l<<2] ++ ld.w r2,r10[r10:b<<2] ++ ld.w r11,r5[pc:b<<2] ++ .text ++ .global satadd_w ++satadd_w: ++ satadd.w pc,pc,pc ++ satadd.w r12,r12,r12 ++ satadd.w r5,r5,r5 ++ satadd.w r4,r4,r4 ++ satadd.w lr,lr,lr ++ satadd.w r4,r8,r11 ++ satadd.w r3,r12,r6 ++ satadd.w r3,lr,r9 ++ .text ++ .global satsub_w1 ++satsub_w1: ++ satsub.w pc,pc,pc ++ satsub.w r12,r12,r12 ++ satsub.w r5,r5,r5 ++ satsub.w r4,r4,r4 ++ satsub.w lr,lr,lr ++ satsub.w r8,sp,r0 ++ satsub.w r9,r8,r4 ++ satsub.w pc,lr,r2 ++ .text ++ .global satadd_h ++satadd_h: ++ satadd.h pc,pc,pc ++ satadd.h r12,r12,r12 ++ satadd.h r5,r5,r5 ++ satadd.h r4,r4,r4 ++ satadd.h lr,lr,lr ++ satadd.h r7,r3,r9 ++ satadd.h r1,r0,r2 ++ satadd.h r1,r4,lr ++ .text ++ .global satsub_h ++satsub_h: ++ satsub.h pc,pc,pc ++ satsub.h r12,r12,r12 ++ satsub.h r5,r5,r5 ++ satsub.h r4,r4,r4 ++ satsub.h lr,lr,lr ++ satsub.h lr,lr,r3 ++ satsub.h r11,r6,r5 ++ satsub.h r3,sp,r0 ++ .text ++ .global mul3 ++mul3: ++ mul pc,pc,0 ++ mul r12,r12,-1 ++ mul r5,r5,-128 ++ mul r4,r4,127 ++ mul lr,lr,1 ++ mul r12,r2,-7 ++ mul r1,pc,95 ++ mul r4,r6,19 ++ .text ++ .global rsub2 ++rsub2: ++ rsub pc,pc,0 ++ rsub r12,r12,-1 ++ rsub r5,r5,-128 ++ rsub r4,r4,127 ++ rsub lr,lr,1 ++ rsub r9,lr,96 ++ rsub r11,r1,56 ++ rsub r0,r7,-87 ++ .text ++ .global clz ++clz: ++ clz pc,pc ++ clz r12,r12 ++ clz r5,r5 ++ clz r4,r4 ++ clz lr,lr ++ clz r2,r3 ++ clz r5,r11 ++ clz pc,r3 ++ .text ++ .global cpc1 ++cpc1: ++ cpc pc,pc ++ cpc r12,r12 ++ cpc r5,r5 ++ cpc r4,r4 ++ cpc lr,lr ++ cpc pc,r4 ++ cpc r5,r9 ++ cpc r6,r7 ++ .text ++ .global asr3 ++asr3: ++ asr pc,pc,0 ++ asr r12,r12,31 ++ asr r5,r5,16 ++ asr r4,r4,15 ++ asr lr,lr,1 ++ asr r4,r11,19 ++ asr sp,pc,26 ++ asr r11,sp,8 ++ .text ++ .global lsl3 ++lsl3: ++ lsl pc,pc,0 ++ lsl r12,r12,31 ++ lsl r5,r5,16 ++ lsl r4,r4,15 ++ lsl lr,lr,1 ++ lsl r8,r10,17 ++ lsl r2,lr,3 ++ lsl lr,r11,14 ++ .text ++ .global lsr3 ++lsr3: ++ lsr pc,pc,0 ++ lsr r12,r12,31 ++ lsr r5,r5,16 ++ lsr r4,r4,15 ++ lsr lr,lr,1 ++ lsr r4,r3,31 ++ lsr pc,r9,14 ++ lsr r3,r0,6 ++/* .text ++ .global extract_b ++extract_b: ++ extract.b pc,pc:b ++ extract.b r12,r12:t ++ extract.b r5,r5:u ++ extract.b r4,r4:l ++ extract.b lr,lr:l ++ extract.b r2,r5:l ++ extract.b r12,r3:l ++ extract.b sp,r3:l ++ .text ++ .global insert_b ++insert_b: ++ insert.b pc:b,pc ++ insert.b r12:t,r12 ++ insert.b r5:u,r5 ++ insert.b r4:l,r4 ++ insert.b lr:l,lr ++ insert.b r12:u,r3 ++ insert.b r10:l,lr ++ insert.b r11:l,r12 ++ .text ++ .global extract_h ++extract_h: ++ extract.h pc,pc:b ++ extract.h r12,r12:t ++ extract.h r5,r5:t ++ extract.h r4,r4:b ++ extract.h lr,lr:t ++ extract.h r11,lr:b ++ extract.h r10,r0:b ++ extract.h r11,r12:b ++ .text ++ .global insert_h ++insert_h: ++ insert.h pc:b,pc ++ insert.h r12:t,r12 ++ insert.h r5:t,r5 ++ insert.h r4:b,r4 ++ insert.h lr:t,lr ++ insert.h r12:t,r11 ++ insert.h r7:b,r6 ++ insert.h r1:t,r11 */ ++ .text ++ .global movc1 ++movc1: ++ moveq pc,pc ++ moval r12,r12 ++ movls r5,r5 ++ movpl r4,r4 ++ movne lr,lr ++ movne pc,r11 ++ movmi r10,r2 ++ movls r8,r12 ++ .text ++ .global padd_h ++padd_h: ++ padd.h pc,pc,pc ++ padd.h r12,r12,r12 ++ padd.h r5,r5,r5 ++ padd.h r4,r4,r4 ++ padd.h lr,lr,lr ++ padd.h r8,r2,r7 ++ padd.h r0,r0,r3 ++ padd.h sp,r11,r6 ++ .text ++ .global psub_h ++psub_h: ++ psub.h pc,pc,pc ++ psub.h r12,r12,r12 ++ psub.h r5,r5,r5 ++ psub.h r4,r4,r4 ++ psub.h lr,lr,lr ++ psub.h lr,r6,r8 ++ psub.h r0,r1,sp ++ psub.h pc,pc,sp ++ .text ++ .global paddx_h ++paddx_h: ++ paddx.h pc,pc,pc ++ paddx.h r12,r12,r12 ++ paddx.h r5,r5,r5 ++ paddx.h r4,r4,r4 ++ paddx.h lr,lr,lr ++ paddx.h pc,pc,r1 ++ paddx.h r10,r4,r5 ++ paddx.h r5,pc,r2 ++ .text ++ .global psubx_h ++psubx_h: ++ psubx.h pc,pc,pc ++ psubx.h r12,r12,r12 ++ psubx.h r5,r5,r5 ++ psubx.h r4,r4,r4 ++ psubx.h lr,lr,lr ++ psubx.h r5,r12,r5 ++ psubx.h r3,r8,r3 ++ psubx.h r5,r2,r3 ++ .text ++ .global padds_sh ++padds_sh: ++ padds.sh pc,pc,pc ++ padds.sh r12,r12,r12 ++ padds.sh r5,r5,r5 ++ padds.sh r4,r4,r4 ++ padds.sh lr,lr,lr ++ padds.sh r9,lr,r2 ++ padds.sh r6,r8,r1 ++ padds.sh r6,r4,r10 ++ .text ++ .global psubs_sh ++psubs_sh: ++ psubs.sh pc,pc,pc ++ psubs.sh r12,r12,r12 ++ psubs.sh r5,r5,r5 ++ psubs.sh r4,r4,r4 ++ psubs.sh lr,lr,lr ++ psubs.sh r6,lr,r11 ++ psubs.sh r2,r12,r4 ++ psubs.sh r0,r9,r0 ++ .text ++ .global paddxs_sh ++paddxs_sh: ++ paddxs.sh pc,pc,pc ++ paddxs.sh r12,r12,r12 ++ paddxs.sh r5,r5,r5 ++ paddxs.sh r4,r4,r4 ++ paddxs.sh lr,lr,lr ++ paddxs.sh r0,r3,r9 ++ paddxs.sh pc,r10,r11 ++ paddxs.sh pc,r10,pc ++ .text ++ .global psubxs_sh ++psubxs_sh: ++ psubxs.sh pc,pc,pc ++ psubxs.sh r12,r12,r12 ++ psubxs.sh r5,r5,r5 ++ psubxs.sh r4,r4,r4 ++ psubxs.sh lr,lr,lr ++ psubxs.sh r7,r4,r4 ++ psubxs.sh r7,r8,r3 ++ psubxs.sh pc,r6,r5 ++ .text ++ .global padds_uh ++padds_uh: ++ padds.uh pc,pc,pc ++ padds.uh r12,r12,r12 ++ padds.uh r5,r5,r5 ++ padds.uh r4,r4,r4 ++ padds.uh lr,lr,lr ++ padds.uh r12,r11,r7 ++ padds.uh r7,r8,lr ++ padds.uh r6,r9,r7 ++ .text ++ .global psubs_uh ++psubs_uh: ++ psubs.uh pc,pc,pc ++ psubs.uh r12,r12,r12 ++ psubs.uh r5,r5,r5 ++ psubs.uh r4,r4,r4 ++ psubs.uh lr,lr,lr ++ psubs.uh lr,r10,r6 ++ psubs.uh sp,r2,pc ++ psubs.uh r2,r9,r2 ++ .text ++ .global paddxs_uh ++paddxs_uh: ++ paddxs.uh pc,pc,pc ++ paddxs.uh r12,r12,r12 ++ paddxs.uh r5,r5,r5 ++ paddxs.uh r4,r4,r4 ++ paddxs.uh lr,lr,lr ++ paddxs.uh r7,r9,r5 ++ paddxs.uh r9,r1,r4 ++ paddxs.uh r5,r2,r3 ++ .text ++ .global psubxs_uh ++psubxs_uh: ++ psubxs.uh pc,pc,pc ++ psubxs.uh r12,r12,r12 ++ psubxs.uh r5,r5,r5 ++ psubxs.uh r4,r4,r4 ++ psubxs.uh lr,lr,lr ++ psubxs.uh sp,r5,sp ++ psubxs.uh sp,r6,r6 ++ psubxs.uh r3,r11,r8 ++ .text ++ .global paddh_sh ++paddh_sh: ++ paddh.sh pc,pc,pc ++ paddh.sh r12,r12,r12 ++ paddh.sh r5,r5,r5 ++ paddh.sh r4,r4,r4 ++ paddh.sh lr,lr,lr ++ paddh.sh r12,sp,r3 ++ paddh.sh pc,r5,r3 ++ paddh.sh r8,r8,sp ++ .text ++ .global psubh_sh ++psubh_sh: ++ psubh.sh pc,pc,pc ++ psubh.sh r12,r12,r12 ++ psubh.sh r5,r5,r5 ++ psubh.sh r4,r4,r4 ++ psubh.sh lr,lr,lr ++ psubh.sh r1,r5,r8 ++ psubh.sh r7,r3,r6 ++ psubh.sh r4,r3,r3 ++ .text ++ .global paddxh_sh ++paddxh_sh: ++ paddxh.sh pc,pc,pc ++ paddxh.sh r12,r12,r12 ++ paddxh.sh r5,r5,r5 ++ paddxh.sh r4,r4,r4 ++ paddxh.sh lr,lr,lr ++ paddxh.sh r6,r0,r4 ++ paddxh.sh r9,r8,r9 ++ paddxh.sh r3,r0,sp ++ .text ++ .global psubxh_sh ++psubxh_sh: ++ psubxh.sh pc,pc,pc ++ psubxh.sh r12,r12,r12 ++ psubxh.sh r5,r5,r5 ++ psubxh.sh r4,r4,r4 ++ psubxh.sh lr,lr,lr ++ psubxh.sh r4,pc,r12 ++ psubxh.sh r8,r4,r6 ++ psubxh.sh r12,r9,r4 ++ .text ++ .global paddsub_h ++paddsub_h: ++ paddsub.h pc,pc:b,pc:b ++ paddsub.h r12,r12:t,r12:t ++ paddsub.h r5,r5:t,r5:t ++ paddsub.h r4,r4:b,r4:b ++ paddsub.h lr,lr:t,lr:t ++ paddsub.h r5,r2:t,lr:b ++ paddsub.h r7,r1:b,r8:b ++ paddsub.h r6,r10:t,r5:t ++ .text ++ .global psubadd_h ++psubadd_h: ++ psubadd.h pc,pc:b,pc:b ++ psubadd.h r12,r12:t,r12:t ++ psubadd.h r5,r5:t,r5:t ++ psubadd.h r4,r4:b,r4:b ++ psubadd.h lr,lr:t,lr:t ++ psubadd.h r9,r11:t,r8:t ++ psubadd.h r10,r7:t,lr:t ++ psubadd.h r6,pc:t,pc:b ++ .text ++ .global paddsubs_sh ++paddsubs_sh: ++ paddsubs.sh pc,pc:b,pc:b ++ paddsubs.sh r12,r12:t,r12:t ++ paddsubs.sh r5,r5:t,r5:t ++ paddsubs.sh r4,r4:b,r4:b ++ paddsubs.sh lr,lr:t,lr:t ++ paddsubs.sh r0,lr:t,r0:b ++ paddsubs.sh r9,r2:t,r4:t ++ paddsubs.sh r12,r9:t,sp:t ++ .text ++ .global psubadds_sh ++psubadds_sh: ++ psubadds.sh pc,pc:b,pc:b ++ psubadds.sh r12,r12:t,r12:t ++ psubadds.sh r5,r5:t,r5:t ++ psubadds.sh r4,r4:b,r4:b ++ psubadds.sh lr,lr:t,lr:t ++ psubadds.sh pc,lr:b,r1:t ++ psubadds.sh r11,r3:b,r12:b ++ psubadds.sh r10,r2:t,r8:t ++ .text ++ .global paddsubs_uh ++paddsubs_uh: ++ paddsubs.uh pc,pc:b,pc:b ++ paddsubs.uh r12,r12:t,r12:t ++ paddsubs.uh r5,r5:t,r5:t ++ paddsubs.uh r4,r4:b,r4:b ++ paddsubs.uh lr,lr:t,lr:t ++ paddsubs.uh r9,r2:b,r3:b ++ paddsubs.uh sp,sp:b,r7:t ++ paddsubs.uh lr,r0:b,r10:t ++ .text ++ .global psubadds_uh ++psubadds_uh: ++ psubadds.uh pc,pc:b,pc:b ++ psubadds.uh r12,r12:t,r12:t ++ psubadds.uh r5,r5:t,r5:t ++ psubadds.uh r4,r4:b,r4:b ++ psubadds.uh lr,lr:t,lr:t ++ psubadds.uh r12,r9:t,pc:t ++ psubadds.uh r8,r6:b,r8:b ++ psubadds.uh r8,r8:b,r4:b ++ .text ++ .global paddsubh_sh ++paddsubh_sh: ++ paddsubh.sh pc,pc:b,pc:b ++ paddsubh.sh r12,r12:t,r12:t ++ paddsubh.sh r5,r5:t,r5:t ++ paddsubh.sh r4,r4:b,r4:b ++ paddsubh.sh lr,lr:t,lr:t ++ paddsubh.sh r8,r9:t,r9:b ++ paddsubh.sh r0,sp:t,r1:t ++ paddsubh.sh r3,r1:b,r0:t ++ .text ++ .global psubaddh_sh ++psubaddh_sh: ++ psubaddh.sh pc,pc:b,pc:b ++ psubaddh.sh r12,r12:t,r12:t ++ psubaddh.sh r5,r5:t,r5:t ++ psubaddh.sh r4,r4:b,r4:b ++ psubaddh.sh lr,lr:t,lr:t ++ psubaddh.sh r7,r3:t,r10:b ++ psubaddh.sh r7,r2:t,r1:t ++ psubaddh.sh r11,r3:b,r6:b ++ .text ++ .global padd_b ++padd_b: ++ padd.b pc,pc,pc ++ padd.b r12,r12,r12 ++ padd.b r5,r5,r5 ++ padd.b r4,r4,r4 ++ padd.b lr,lr,lr ++ padd.b r2,r6,pc ++ padd.b r8,r9,r12 ++ padd.b r5,r12,r3 ++ .text ++ .global psub_b ++psub_b: ++ psub.b pc,pc,pc ++ psub.b r12,r12,r12 ++ psub.b r5,r5,r5 ++ psub.b r4,r4,r4 ++ psub.b lr,lr,lr ++ psub.b r0,r12,pc ++ psub.b r7,sp,r10 ++ psub.b r5,sp,r12 ++ .text ++ .global padds_sb ++padds_sb: ++ padds.sb pc,pc,pc ++ padds.sb r12,r12,r12 ++ padds.sb r5,r5,r5 ++ padds.sb r4,r4,r4 ++ padds.sb lr,lr,lr ++ padds.sb sp,r11,r4 ++ padds.sb r11,r10,r11 ++ padds.sb r5,r12,r6 ++ .text ++ .global psubs_sb ++psubs_sb: ++ psubs.sb pc,pc,pc ++ psubs.sb r12,r12,r12 ++ psubs.sb r5,r5,r5 ++ psubs.sb r4,r4,r4 ++ psubs.sb lr,lr,lr ++ psubs.sb r7,r6,r8 ++ psubs.sb r12,r10,r9 ++ psubs.sb pc,r11,r0 ++ .text ++ .global padds_ub ++padds_ub: ++ padds.ub pc,pc,pc ++ padds.ub r12,r12,r12 ++ padds.ub r5,r5,r5 ++ padds.ub r4,r4,r4 ++ padds.ub lr,lr,lr ++ padds.ub r3,r2,r11 ++ padds.ub r10,r8,r1 ++ padds.ub r11,r8,r10 ++ .text ++ .global psubs_ub ++psubs_ub: ++ psubs.ub pc,pc,pc ++ psubs.ub r12,r12,r12 ++ psubs.ub r5,r5,r5 ++ psubs.ub r4,r4,r4 ++ psubs.ub lr,lr,lr ++ psubs.ub r0,r2,r7 ++ psubs.ub lr,r5,r3 ++ psubs.ub r6,r7,r9 ++ .text ++ .global paddh_ub ++paddh_ub: ++ paddh.ub pc,pc,pc ++ paddh.ub r12,r12,r12 ++ paddh.ub r5,r5,r5 ++ paddh.ub r4,r4,r4 ++ paddh.ub lr,lr,lr ++ paddh.ub lr,r1,r0 ++ paddh.ub r2,r7,r7 ++ paddh.ub r2,r1,r2 ++ .text ++ .global psubh_ub ++psubh_ub: ++ psubh.ub pc,pc,pc ++ psubh.ub r12,r12,r12 ++ psubh.ub r5,r5,r5 ++ psubh.ub r4,r4,r4 ++ psubh.ub lr,lr,lr ++ psubh.ub r0,r1,r6 ++ psubh.ub r4,lr,r10 ++ psubh.ub r9,r8,r1 ++ .text ++ .global pmax_ub ++pmax_ub: ++ pmax.ub pc,pc,pc ++ pmax.ub r12,r12,r12 ++ pmax.ub r5,r5,r5 ++ pmax.ub r4,r4,r4 ++ pmax.ub lr,lr,lr ++ pmax.ub pc,r2,r11 ++ pmax.ub r12,r1,r1 ++ pmax.ub r5,r2,r0 ++ .text ++ .global pmax_sh ++pmax_sh: ++ pmax.sh pc,pc,pc ++ pmax.sh r12,r12,r12 ++ pmax.sh r5,r5,r5 ++ pmax.sh r4,r4,r4 ++ pmax.sh lr,lr,lr ++ pmax.sh lr,r6,r12 ++ pmax.sh r2,pc,r5 ++ pmax.sh pc,r2,r7 ++ .text ++ .global pmin_ub ++pmin_ub: ++ pmin.ub pc,pc,pc ++ pmin.ub r12,r12,r12 ++ pmin.ub r5,r5,r5 ++ pmin.ub r4,r4,r4 ++ pmin.ub lr,lr,lr ++ pmin.ub r8,r1,r5 ++ pmin.ub r1,r8,r3 ++ pmin.ub r0,r2,r7 ++ .text ++ .global pmin_sh ++pmin_sh: ++ pmin.sh pc,pc,pc ++ pmin.sh r12,r12,r12 ++ pmin.sh r5,r5,r5 ++ pmin.sh r4,r4,r4 ++ pmin.sh lr,lr,lr ++ pmin.sh r8,r4,r10 ++ pmin.sh lr,r10,r12 ++ pmin.sh r2,r6,r2 ++ .text ++ .global pavg_ub ++pavg_ub: ++ pavg.ub pc,pc,pc ++ pavg.ub r12,r12,r12 ++ pavg.ub r5,r5,r5 ++ pavg.ub r4,r4,r4 ++ pavg.ub lr,lr,lr ++ pavg.ub r0,r1,r6 ++ pavg.ub r8,r3,r6 ++ pavg.ub pc,r12,r10 ++ .text ++ .global pavg_sh ++pavg_sh: ++ pavg.sh pc,pc,pc ++ pavg.sh r12,r12,r12 ++ pavg.sh r5,r5,r5 ++ pavg.sh r4,r4,r4 ++ pavg.sh lr,lr,lr ++ pavg.sh r9,pc,sp ++ pavg.sh pc,sp,r3 ++ pavg.sh r6,r1,r9 ++ .text ++ .global pabs_sb ++pabs_sb: ++ pabs.sb pc,pc ++ pabs.sb r12,r12 ++ pabs.sb r5,r5 ++ pabs.sb r4,r4 ++ pabs.sb lr,lr ++ pabs.sb r11,r6 ++ pabs.sb lr,r9 ++ pabs.sb sp,r7 ++ .text ++ .global pabs_sh ++pabs_sh: ++ pabs.sh pc,pc ++ pabs.sh r12,r12 ++ pabs.sh r5,r5 ++ pabs.sh r4,r4 ++ pabs.sh lr,lr ++ pabs.sh pc,r3 ++ pabs.sh r5,r7 ++ pabs.sh r4,r0 ++ .text ++ .global psad ++psad: ++ psad pc,pc,pc ++ psad r12,r12,r12 ++ psad r5,r5,r5 ++ psad r4,r4,r4 ++ psad lr,lr,lr ++ psad r9,r11,r11 ++ psad lr,r4,sp ++ psad lr,r4,r5 ++ .text ++ .global pasr_b ++pasr_b: ++ pasr.b pc,pc,0 ++ pasr.b r12,r12,7 ++ pasr.b r5,r5,4 ++ pasr.b r4,r4,3 ++ pasr.b lr,lr,1 ++ pasr.b pc,r7,1 ++ pasr.b sp,lr,6 ++ pasr.b sp,r3,2 ++ .text ++ .global plsl_b ++plsl_b: ++ plsl.b pc,pc,0 ++ plsl.b r12,r12,7 ++ plsl.b r5,r5,4 ++ plsl.b r4,r4,3 ++ plsl.b lr,lr,1 ++ plsl.b r2,r11,4 ++ plsl.b r8,r5,7 ++ plsl.b pc,r0,2 ++ .text ++ .global plsr_b ++plsr_b: ++ plsr.b pc,pc,0 ++ plsr.b r12,r12,7 ++ plsr.b r5,r5,4 ++ plsr.b r4,r4,3 ++ plsr.b lr,lr,1 ++ plsr.b r12,r1,2 ++ plsr.b r6,pc,7 ++ plsr.b r12,r11,2 ++ .text ++ .global pasr_h ++pasr_h: ++ pasr.h pc,pc,0 ++ pasr.h r12,r12,15 ++ pasr.h r5,r5,8 ++ pasr.h r4,r4,7 ++ pasr.h lr,lr,1 ++ pasr.h r0,r11,10 ++ pasr.h r4,r6,8 ++ pasr.h r6,r2,4 ++ .text ++ .global plsl_h ++plsl_h: ++ plsl.h pc,pc,0 ++ plsl.h r12,r12,15 ++ plsl.h r5,r5,8 ++ plsl.h r4,r4,7 ++ plsl.h lr,lr,1 ++ plsl.h r5,r10,9 ++ plsl.h sp,lr,8 ++ plsl.h r0,lr,7 ++ .text ++ .global plsr_h ++plsr_h: ++ plsr.h pc,pc,0 ++ plsr.h r12,r12,15 ++ plsr.h r5,r5,8 ++ plsr.h r4,r4,7 ++ plsr.h lr,lr,1 ++ plsr.h r11,r0,15 ++ plsr.h lr,r3,3 ++ plsr.h r8,lr,10 ++ .text ++ .global packw_sh ++packw_sh: ++ packw.sh pc,pc,pc ++ packw.sh r12,r12,r12 ++ packw.sh r5,r5,r5 ++ packw.sh r4,r4,r4 ++ packw.sh lr,lr,lr ++ packw.sh sp,r11,r10 ++ packw.sh r8,r2,r12 ++ packw.sh r8,r1,r5 ++ .text ++ .global punpckub_h ++punpckub_h: ++ punpckub.h pc,pc:b ++ punpckub.h r12,r12:t ++ punpckub.h r5,r5:t ++ punpckub.h r4,r4:b ++ punpckub.h lr,lr:t ++ punpckub.h r6,r1:t ++ punpckub.h lr,r5:b ++ punpckub.h lr,r2:t ++ .text ++ .global punpcksb_h ++punpcksb_h: ++ punpcksb.h pc,pc:b ++ punpcksb.h r12,r12:t ++ punpcksb.h r5,r5:t ++ punpcksb.h r4,r4:b ++ punpcksb.h lr,lr:t ++ punpcksb.h r4,r7:t ++ punpcksb.h r6,lr:b ++ punpcksb.h r12,r12:t ++ .text ++ .global packsh_ub ++packsh_ub: ++ packsh.ub pc,pc,pc ++ packsh.ub r12,r12,r12 ++ packsh.ub r5,r5,r5 ++ packsh.ub r4,r4,r4 ++ packsh.ub lr,lr,lr ++ packsh.ub r3,r6,r3 ++ packsh.ub r8,r0,r3 ++ packsh.ub r9,r3,lr ++ .text ++ .global packsh_sb ++packsh_sb: ++ packsh.sb pc,pc,pc ++ packsh.sb r12,r12,r12 ++ packsh.sb r5,r5,r5 ++ packsh.sb r4,r4,r4 ++ packsh.sb lr,lr,lr ++ packsh.sb r6,r8,r1 ++ packsh.sb lr,r9,r8 ++ packsh.sb sp,r6,r6 ++ .text ++ .global andl ++andl: ++ andl pc,0 ++ andl r12,65535 ++ andl r5,32768 ++ andl r4,32767 ++ andl lr,1 ++ andl pc,23128 ++ andl r8,47262 ++ andl r7,13719 ++ .text ++ .global andl_coh ++andl_coh: ++ andl pc,0,COH ++ andl r12,65535,COH ++ andl r5,32768,COH ++ andl r4,32767,COH ++ andl lr,1,COH ++ andl r6,22753,COH ++ andl r0,40653,COH ++ andl r4,48580,COH ++ .text ++ .global andh ++andh: ++ andh pc,0 ++ andh r12,65535 ++ andh r5,32768 ++ andh r4,32767 ++ andh lr,1 ++ andh r12,52312 ++ andh r3,8675 ++ andh r2,42987 ++ .text ++ .global andh_coh ++andh_coh: ++ andh pc,0,COH ++ andh r12,65535,COH ++ andh r5,32768,COH ++ andh r4,32767,COH ++ andh lr,1,COH ++ andh r11,34317,COH ++ andh r8,52982,COH ++ andh r10,23683,COH ++ .text ++ .global orl ++orl: ++ orl pc,0 ++ orl r12,65535 ++ orl r5,32768 ++ orl r4,32767 ++ orl lr,1 ++ orl sp,16766 ++ orl r0,21181 ++ orl pc,44103 ++ .text ++ .global orh ++orh: ++ orh pc,0 ++ orh r12,65535 ++ orh r5,32768 ++ orh r4,32767 ++ orh lr,1 ++ orh r8,28285 ++ orh r12,30492 ++ orh r1,59930 ++ .text ++ .global eorl ++eorl: ++ eorl pc,0 ++ eorl r12,65535 ++ eorl r5,32768 ++ eorl r4,32767 ++ eorl lr,1 ++ eorl r4,51129 ++ eorl r6,64477 ++ eorl r1,20913 ++ .text ++ .global eorh ++eorh: ++ eorh pc,0 ++ eorh r12,65535 ++ eorh r5,32768 ++ eorh r4,32767 ++ eorh lr,1 ++ eorh r0,11732 ++ eorh r10,38069 ++ eorh r9,57130 ++ .text ++ .global mcall ++mcall: ++ mcall pc[0] ++ mcall r12[-4] ++ mcall r5[-131072] ++ mcall r4[131068] ++ mcall lr[4] ++ mcall sp[61180] ++ mcall r4[-35000] ++ mcall r0[9924] ++ .text ++ .global pref ++pref: ++ pref pc[0] ++ pref r12[-1] ++ pref r5[-32768] ++ pref r4[32767] ++ pref lr[1] ++ pref r7[7748] ++ pref r7[-7699] ++ pref r2[-25892] ++ .text ++ .global cache ++cache: ++ cache pc[0],0 ++ cache r12[-1],31 ++ cache r5[-1024],16 ++ cache r4[1023],15 ++ cache lr[1],1 ++ cache r3[-964],17 ++ cache r4[-375],22 ++ cache r3[-888],17 ++ .text ++ .global sub4 ++sub4: ++ sub pc,0 ++ sub r12,-1 ++ sub r5,-1048576 ++ sub r4,1048575 ++ sub lr,1 ++ sub r2,-619156 ++ sub lr,461517 ++ sub r8,-185051 ++ .text ++ .global cp3 ++cp3: ++ cp pc,0 ++ cp r12,-1 ++ cp r5,-1048576 ++ cp r4,1048575 ++ cp lr,1 ++ cp r1,124078 ++ cp r0,-378909 ++ cp r4,-243180 ++ .text ++ .global mov2 ++mov2: ++ mov pc,0 ++ mov r12,-1 ++ mov r5,-1048576 ++ mov r4,1048575 ++ mov lr,1 ++ mov r5,-317021 ++ mov sp,-749164 ++ mov r5,940179 ++ .text ++ .global brc2 ++brc2: ++ breq 0 ++ bral -2 ++ brls -2097152 ++ brpl 2097150 ++ brne 2 ++ brhi -1796966 ++ brqs 1321368 ++ brls -577434 ++ .text ++ .global rcall2 ++rcall2: ++ rcall 0 ++ rcall -2 ++ rcall -2097152 ++ rcall 2097150 ++ rcall 2 ++ rcall 496820 ++ rcall 1085092 ++ rcall -1058 ++ .text ++ .global sub5 ++sub5: ++ sub pc,pc,0 ++ sub r12,r12,-1 ++ sub r5,r5,-32768 ++ sub r4,r4,32767 ++ sub lr,lr,1 ++ sub pc,pc,-12744 ++ sub r7,r7,-27365 ++ sub r2,r9,-17358 ++ .text ++ .global satsub_w2 ++satsub_w2: ++ satsub.w pc,pc,0 ++ satsub.w r12,r12,-1 ++ satsub.w r5,r5,-32768 ++ satsub.w r4,r4,32767 ++ satsub.w lr,lr,1 ++ satsub.w r2,lr,-2007 ++ satsub.w r7,r12,-784 ++ satsub.w r4,r7,23180 ++ .text ++ .global ld_d4 ++ld_d4: ++ ld.d r0,pc[0] ++ ld.d r14,r12[-1] ++ ld.d r8,r5[-32768] ++ ld.d r6,r4[32767] ++ ld.d r2,lr[1] ++ ld.d r14,r11[14784] ++ ld.d r6,r9[-18905] ++ ld.d r2,r3[-6355] ++ .text ++ .global ld_w4 ++ld_w4: ++ ld.w pc,pc[0] ++ ld.w r12,r12[-1] ++ ld.w r5,r5[-32768] ++ ld.w r4,r4[32767] ++ ld.w lr,lr[1] ++ ld.w r0,r12[-22133] ++ ld.w sp,pc[-20521] ++ /* ld.w r3,r5[29035] */ ++ nop ++ .text ++ .global ld_sh4 ++ld_sh4: ++ ld.sh pc,pc[0] ++ ld.sh r12,r12[-1] ++ ld.sh r5,r5[-32768] ++ ld.sh r4,r4[32767] ++ ld.sh lr,lr[1] ++ ld.sh r6,r10[30930] ++ ld.sh r6,r10[21973] ++ /* ld.sh r11,r10[-2058] */ ++ nop ++ .text ++ .global ld_uh4 ++ld_uh4: ++ ld.uh pc,pc[0] ++ ld.uh r12,r12[-1] ++ ld.uh r5,r5[-32768] ++ ld.uh r4,r4[32767] ++ ld.uh lr,lr[1] ++ ld.uh r1,r9[-13354] ++ ld.uh lr,r11[21337] ++ /* ld.uh r2,lr[-25370] */ ++ nop ++ .text ++ .global ld_sb1 ++ld_sb1: ++ ld.sb pc,pc[0] ++ ld.sb r12,r12[-1] ++ ld.sb r5,r5[-32768] ++ ld.sb r4,r4[32767] ++ ld.sb lr,lr[1] ++ ld.sb r7,sp[-28663] ++ ld.sb r2,r1[-5879] ++ ld.sb r12,r3[18734] ++ .text ++ .global ld_ub4 ++ld_ub4: ++ ld.ub pc,pc[0] ++ ld.ub r12,r12[-1] ++ ld.ub r5,r5[-32768] ++ ld.ub r4,r4[32767] ++ ld.ub lr,lr[1] ++ ld.ub pc,r4[8277] ++ ld.ub r5,r12[19172] ++ ld.ub r10,lr[26347] ++ .text ++ .global st_d4 ++st_d4: ++ st.d pc[0],r0 ++ st.d r12[-1],r14 ++ st.d r5[-32768],r8 ++ st.d r4[32767],r6 ++ st.d lr[1],r2 ++ st.d r5[13200],r10 ++ st.d r5[9352],r10 ++ st.d r5[32373],r4 ++ .text ++ .global st_w4 ++st_w4: ++ st.w pc[0],pc ++ st.w r12[-1],r12 ++ st.w r5[-32768],r5 ++ st.w r4[32767],r4 ++ st.w lr[1],lr ++ st.w sp[6136],r7 ++ st.w r6[27087],r12 ++ /* st.w r3[20143],r7 */ ++ nop ++ .text ++ .global st_h4 ++st_h4: ++ st.h pc[0],pc ++ st.h r12[-1],r12 ++ st.h r5[-32768],r5 ++ st.h r4[32767],r4 ++ st.h lr[1],lr ++ st.h r4[-9962],r7 ++ st.h r9[-16250],r3 ++ /* st.h r8[-28810],r7 */ ++ nop ++ .text ++ .global st_b4 ++st_b4: ++ st.b pc[0],pc ++ st.b r12[-1],r12 ++ st.b r5[-32768],r5 ++ st.b r4[32767],r4 ++ st.b lr[1],lr ++ st.b r12[30102],r6 ++ st.b r5[28977],r1 ++ st.b r0[5470],r1 ++ .text ++ .global mfsr ++mfsr: ++ mfsr pc,0 ++ mfsr r12,1020 ++ mfsr r5,512 ++ mfsr r4,508 ++ mfsr lr,4 ++ mfsr r2,696 ++ mfsr r4,260 ++ mfsr r10,1016 ++ .text ++ .global mtsr ++mtsr: ++ mtsr 0,pc ++ mtsr 1020,r12 ++ mtsr 512,r5 ++ mtsr 508,r4 ++ mtsr 4,lr ++ mtsr 224,r10 ++ mtsr 836,r12 ++ mtsr 304,r9 ++ .text ++ .global mfdr ++mfdr: ++ mfdr pc,0 ++ mfdr r12,1020 ++ mfdr r5,512 ++ mfdr r4,508 ++ mfdr lr,4 ++ mfdr r6,932 ++ mfdr r5,36 ++ mfdr r9,300 ++ .text ++ .global mtdr ++mtdr: ++ mtdr 0,pc ++ mtdr 1020,r12 ++ mtdr 512,r5 ++ mtdr 508,r4 ++ mtdr 4,lr ++ mtdr 180,r8 ++ mtdr 720,r10 ++ mtdr 408,lr ++ .text ++ .global sleep ++sleep: ++ sleep 0 ++ sleep 255 ++ sleep 128 ++ sleep 127 ++ sleep 1 ++ sleep 254 ++ sleep 15 ++ sleep 43 ++ .text ++ .global sync ++sync: ++ sync 0 ++ sync 255 ++ sync 128 ++ sync 127 ++ sync 1 ++ sync 166 ++ sync 230 ++ sync 180 ++ .text ++ .global bld ++bld: ++ bld pc,0 ++ bld r12,31 ++ bld r5,16 ++ bld r4,15 ++ bld lr,1 ++ bld r9,15 ++ bld r0,4 ++ bld lr,26 ++ .text ++ .global bst ++bst: ++ bst pc,0 ++ bst r12,31 ++ bst r5,16 ++ bst r4,15 ++ bst lr,1 ++ bst r10,28 ++ bst r0,3 ++ bst sp,2 ++ .text ++ .global sats ++sats: ++ sats pc>>0,0 ++ sats r12>>31,31 ++ sats r5>>16,16 ++ sats r4>>15,15 ++ sats lr>>1,1 ++ sats r10>>3,19 ++ sats r10>>2,26 ++ sats r1>>20,1 ++ .text ++ .global satu ++satu: ++ satu pc>>0,0 ++ satu r12>>31,31 ++ satu r5>>16,16 ++ satu r4>>15,15 ++ satu lr>>1,1 ++ satu pc>>5,7 ++ satu r7>>5,5 ++ satu r2>>26,19 ++ .text ++ .global satrnds ++satrnds: ++ satrnds pc>>0,0 ++ satrnds r12>>31,31 ++ satrnds r5>>16,16 ++ satrnds r4>>15,15 ++ satrnds lr>>1,1 ++ satrnds r0>>21,19 ++ satrnds sp>>0,2 ++ satrnds r7>>6,29 ++ .text ++ .global satrndu ++satrndu: ++ satrndu pc>>0,0 ++ satrndu r12>>31,31 ++ satrndu r5>>16,16 ++ satrndu r4>>15,15 ++ satrndu lr>>1,1 ++ satrndu r12>>0,26 ++ satrndu r4>>21,3 ++ satrndu r10>>3,16 ++ .text ++ .global subfc ++subfc: ++ subfeq pc,0 ++ subfal r12,-1 ++ subfls r5,-128 ++ subfpl r4,127 ++ subfne lr,1 ++ subfls r10,8 ++ subfvc r11,99 ++ subfvs r2,73 ++ .text ++ .global subc ++subc: ++ subeq pc,0 ++ subal r12,-1 ++ subls r5,-128 ++ subpl r4,127 ++ subne lr,1 ++ subls r12,118 ++ subvc lr,-12 ++ submi r4,-13 ++ .text ++ .global movc2 ++movc2: ++ moveq pc,0 ++ moval r12,-1 ++ movls r5,-128 ++ movpl r4,127 ++ movne lr,1 ++ movlt r3,-122 ++ movvc r8,2 ++ movne r7,-111 ++ .text ++ .global cp_b ++cp_b: ++ cp.b pc,r0 ++ cp.b r0,pc ++ cp.b r7,r8 ++ cp.b r8,r7 ++ .text ++ .global cp_h ++cp_h: ++ cp.h pc,r0 ++ cp.h r0,pc ++ cp.h r7,r8 ++ cp.h r8,r7 ++ .text ++ .global ldm ++ldm: ++ ldm pc,r1-r6 ++ ldm r12,r0-r15 ++ ldm r5,r15 ++ ldm r4,r0-r14 ++ ldm lr,r0 ++ ldm r9,r1,r5,r14 ++ ldm r11,r2-r3,r5-r8,r15 ++ ldm r6,r0,r3,r9,r13,r15 ++ .text ++ .global ldm_pu ++ldm_pu: ++ ldm pc++,r6-r9 ++ ldm r12++,r0-r15 ++ ldm r5++,r15 ++ ldm r4++,r0-r14 ++ ldm lr++,r0 ++ ldm r12++,r3-r5,r8,r10,r12,r14-r15 ++ ldm r10++,r2,r4-r6,r14-r15 ++ ldm r6++,r1,r3-r4,r9-r14 ++ .text ++ .global ldmts ++ldmts: ++ ldmts pc,r7-r8 ++ ldmts r12,r0-r15 ++ ldmts r5,r15 ++ ldmts r4,r0-r14 ++ ldmts lr,r0 ++ ldmts r0,r1-r2,r11-r12 ++ ldmts lr,r0-r2,r4,r7-r8,r13-r14 ++ ldmts r12,r0-r1,r3-r5,r9,r14-r15 ++ .text ++ .global ldmts_pu ++ldmts_pu: ++ ldmts pc++,r9 ++ ldmts r12++,r0-r15 ++ ldmts r5++,r15 ++ ldmts r4++,r0-r14 ++ ldmts lr++,r0 ++ ldmts sp++,r0,r2-r5,r7,r9,r11 ++ ldmts r5++,r1-r3,r7,r10-r11 ++ ldmts r8++,r2-r4,r7-r8,r13,r15 ++ .text ++ .global stm ++stm: ++ stm pc,r7 ++ stm r12,r0-r15 ++ stm r5,r15 ++ stm r4,r0-r14 ++ stm lr,r0 ++ stm sp,r2-r3,r5,r8,r11,r14 ++ stm r4,r0-r4,r6,r10-r11,r14 ++ stm r9,r1,r5,r9,r12-r15 ++ .text ++ .global stm_pu ++stm_pu: ++ stm --pc,r4-r6 ++ stm --r12,r0-r15 ++ stm --r5,r15 ++ stm --r4,r0-r14 ++ stm --lr,r0 ++ stm --r11,r0,r4-r9,r11-r15 ++ stm --r11,r0,r3,r9-r10,r12,r14 ++ stm --r6,r2,r8-r9,r13-r14 ++ .text ++ .global stmts ++stmts: ++ stmts pc,r8 ++ stmts r12,r0-r15 ++ stmts r5,r15 ++ stmts r4,r0-r14 ++ stmts lr,r0 ++ stmts r1,r0-r1,r3-r4,r6,r9-r10,r14-r15 ++ stmts r3,r0,r6-r8,r10-r12 ++ stmts r11,r0,r4,r6-r7,r9-r10,r12,r14-r15 ++ .text ++ .global stmts_pu ++stmts_pu: ++ stmts --pc,r6-r8 ++ stmts --r12,r0-r15 ++ stmts --r5,r15 ++ stmts --r4,r0-r14 ++ stmts --lr,r0 ++ stmts --r2,r0,r3-r4,r9-r10,r12-r13 ++ stmts --r3,r0-r1,r14-r15 ++ stmts --r0,r0,r2-r6,r10,r14 ++ .text ++ .global ldins_h ++ldins_h: ++ ldins.h pc:b,pc[0] ++ ldins.h r12:t,r12[-2] ++ ldins.h r5:t,r5[-4096] ++ ldins.h r4:b,r4[4094] ++ ldins.h lr:t,lr[2] ++ ldins.h r0:t,lr[1930] ++ ldins.h r3:b,r7[-534] ++ ldins.h r2:b,r12[-2252] ++ .text ++ .global ldins_b ++ldins_b: ++ ldins.b pc:b,pc[0] ++ ldins.b r12:t,r12[-1] ++ ldins.b r5:u,r5[-2048] ++ ldins.b r4:l,r4[2047] ++ ldins.b lr:l,lr[1] ++ ldins.b r6:t,r4[-662] ++ ldins.b r5:b,r1[-151] ++ ldins.b r10:t,r11[-1923] ++ .text ++ .global ldswp_sh ++ldswp_sh: ++ ldswp.sh pc,pc[0] ++ ldswp.sh r12,r12[-2] ++ ldswp.sh r5,r5[-4096] ++ ldswp.sh r4,r4[4094] ++ ldswp.sh lr,lr[2] ++ ldswp.sh r9,r10[3848] ++ ldswp.sh r4,r12[-2040] ++ ldswp.sh r10,r2[3088] ++ .text ++ .global ldswp_uh ++ldswp_uh: ++ ldswp.uh pc,pc[0] ++ ldswp.uh r12,r12[-2] ++ ldswp.uh r5,r5[-4096] ++ ldswp.uh r4,r4[4094] ++ ldswp.uh lr,lr[2] ++ ldswp.uh r4,r9[3724] ++ ldswp.uh lr,sp[-1672] ++ ldswp.uh r8,r12[-3846] ++ .text ++ .global ldswp_w ++ldswp_w: ++ ldswp.w pc,pc[0] ++ ldswp.w r12,r12[-4] ++ ldswp.w r5,r5[-8192] ++ ldswp.w r4,r4[8188] ++ ldswp.w lr,lr[4] ++ ldswp.w sp,r7[1860] ++ ldswp.w pc,r5[-3324] ++ ldswp.w r12,r10[-3296] ++ .text ++ .global stswp_h ++stswp_h: ++ stswp.h pc[0],pc ++ stswp.h r12[-2],r12 ++ stswp.h r5[-4096],r5 ++ stswp.h r4[4094],r4 ++ stswp.h lr[2],lr ++ stswp.h r7[64],r10 ++ stswp.h r10[3024],r2 ++ stswp.h r0[-2328],r10 ++ .text ++ .global stswp_w ++stswp_w: ++ stswp.w pc[0],pc ++ stswp.w r12[-4],r12 ++ stswp.w r5[-8192],r5 ++ stswp.w r4[8188],r4 ++ stswp.w lr[4],lr ++ stswp.w pc[1156],r8 ++ stswp.w sp[7992],r10 ++ stswp.w r8[-1172],r5 ++ .text ++ .global and2 ++and2: ++ and pc,pc,pc<<0 ++ and r12,r12,r12<<31 ++ and r5,r5,r5<<16 ++ and r4,r4,r4<<15 ++ and lr,lr,lr<<1 ++ and r10,r2,r1<<1 ++ and r12,r8,r11<<27 ++ and r10,r7,r0<<3 ++ .text ++ .global and3 ++and3: ++ and pc,pc,pc>>0 ++ and r12,r12,r12>>31 ++ and r5,r5,r5>>16 ++ and r4,r4,r4>>15 ++ and lr,lr,lr>>1 ++ and r12,r8,r7>>17 ++ and pc,r4,r9>>20 ++ and r10,r9,r10>>12 ++ .text ++ .global or2 ++or2: ++ or pc,pc,pc<<0 ++ or r12,r12,r12<<31 ++ or r5,r5,r5<<16 ++ or r4,r4,r4<<15 ++ or lr,lr,lr<<1 ++ or r8,sp,r11<<29 ++ or pc,r9,r2<<28 ++ or r5,r1,r2<<3 ++ .text ++ .global or3 ++or3: ++ or pc,pc,pc>>0 ++ or r12,r12,r12>>31 ++ or r5,r5,r5>>16 ++ or r4,r4,r4>>15 ++ or lr,lr,lr>>1 ++ or r1,sp,sp>>2 ++ or r0,r1,r1>>29 ++ or r4,r12,r8>>8 ++ .text ++ .global eor2 ++eor2: ++ eor pc,pc,pc<<0 ++ eor r12,r12,r12<<31 ++ eor r5,r5,r5<<16 ++ eor r4,r4,r4<<15 ++ eor lr,lr,lr<<1 ++ eor r10,r9,r4<<11 ++ eor r4,r0,r1<<31 ++ eor r6,r2,r12<<13 ++ .text ++ .global eor3 ++eor3: ++ eor pc,pc,pc>>0 ++ eor r12,r12,r12>>31 ++ eor r5,r5,r5>>16 ++ eor r4,r4,r4>>15 ++ eor lr,lr,lr>>1 ++ eor r5,r5,r5>>22 ++ eor r10,r1,lr>>3 ++ eor r7,lr,sp>>26 ++ .text ++ .global sthh_w2 ++sthh_w2: ++ sthh.w pc[pc<<0],pc:b,pc:b ++ sthh.w r12[r12<<3],r12:t,r12:t ++ sthh.w r5[r5<<2],r5:t,r5:t ++ sthh.w r4[r4<<1],r4:b,r4:b ++ sthh.w lr[lr<<1],lr:t,lr:t ++ sthh.w sp[r6<<3],r1:t,r12:t ++ sthh.w r6[r6<<0],r9:t,r9:t ++ sthh.w r10[r3<<0],r0:b,r11:t ++ .text ++ .global sthh_w1 ++sthh_w1: ++ sthh.w pc[0],pc:b,pc:b ++ sthh.w r12[1020],r12:t,r12:t ++ sthh.w r5[512],r5:t,r5:t ++ sthh.w r4[508],r4:b,r4:b ++ sthh.w lr[4],lr:t,lr:t ++ sthh.w r4[404],r9:t,r0:b ++ sthh.w r8[348],r2:t,r10:b ++ sthh.w sp[172],r9:b,r2:b ++ .text ++ .global cop ++cop: ++ cop cp0,cr0,cr0,cr0,0 ++ cop cp7,cr15,cr15,cr15,0x7f ++ cop cp3,cr5,cr5,cr5,0x31 ++ cop cp2,cr4,cr4,cr4,0x30 ++ cop cp5,cr8,cr3,cr7,0x5a ++ .text ++ .global ldc_w1 ++ldc_w1: ++ ldc.w cp0,cr0,r0[0] ++ ldc.w cp7,cr15,pc[255<<2] ++ ldc.w cp3,cr5,r5[128<<2] ++ ldc.w cp2,cr4,r4[127<<2] ++ ldc.w cp4,cr9,r13[36<<2] ++ .text ++ .global ldc_w2 ++ldc_w2: ++ ldc.w cp0,cr0,--r0 ++ ldc.w cp7,cr15,--pc ++ ldc.w cp3,cr5,--r5 ++ ldc.w cp2,cr4,--r4 ++ ldc.w cp4,cr9,--r13 ++ .text ++ .global ldc_w3 ++ldc_w3: ++ ldc.w cp0,cr0,r0[r0] ++ ldc.w cp7,cr15,pc[pc<<3] ++ ldc.w cp3,cr5,r5[r4<<2] ++ ldc.w cp2,cr4,r4[r3<<1] ++ ldc.w cp4,cr9,r13[r12<<0] ++ .text ++ .global ldc_d1 ++ldc_d1: ++ ldc.d cp0,cr0,r0[0] ++ ldc.d cp7,cr14,pc[255<<2] ++ ldc.d cp3,cr6,r5[128<<2] ++ ldc.d cp2,cr4,r4[127<<2] ++ ldc.d cp4,cr8,r13[36<<2] ++ .text ++ .global ldc_d2 ++ldc_d2: ++ ldc.d cp0,cr0,--r0 ++ ldc.d cp7,cr14,--pc ++ ldc.d cp3,cr6,--r5 ++ ldc.d cp2,cr4,--r4 ++ ldc.d cp4,cr8,--r13 ++ .text ++ .global ldc_d3 ++ldc_d3: ++ ldc.d cp0,cr0,r0[r0] ++ ldc.d cp7,cr14,pc[pc<<3] ++ ldc.d cp3,cr6,r5[r4<<2] ++ ldc.d cp2,cr4,r4[r3<<1] ++ ldc.d cp4,cr8,r13[r12<<0] ++ .text ++ .global stc_w1 ++stc_w1: ++ stc.w cp0,r0[0],cr0 ++ stc.w cp7,pc[255<<2],cr15 ++ stc.w cp3,r5[128<<2],cr5 ++ stc.w cp2,r4[127<<2],cr4 ++ stc.w cp4,r13[36<<2],cr9 ++ .text ++ .global stc_w2 ++stc_w2: ++ stc.w cp0,r0++,cr0 ++ stc.w cp7,pc++,cr15 ++ stc.w cp3,r5++,cr5 ++ stc.w cp2,r4++,cr4 ++ stc.w cp4,r13++,cr9 ++ .text ++ .global stc_w3 ++stc_w3: ++ stc.w cp0,r0[r0],cr0 ++ stc.w cp7,pc[pc<<3],cr15 ++ stc.w cp3,r5[r4<<2],cr5 ++ stc.w cp2,r4[r3<<1],cr4 ++ stc.w cp4,r13[r12<<0],cr9 ++ .text ++ .global stc_d1 ++stc_d1: ++ stc.d cp0,r0[0],cr0 ++ stc.d cp7,pc[255<<2],cr14 ++ stc.d cp3,r5[128<<2],cr6 ++ stc.d cp2,r4[127<<2],cr4 ++ stc.d cp4,r13[36<<2],cr8 ++ .text ++ .global stc_d2 ++stc_d2: ++ stc.d cp0,r0++,cr0 ++ stc.d cp7,pc++,cr14 ++ stc.d cp3,r5++,cr6 ++ stc.d cp2,r4++,cr4 ++ stc.d cp4,r13++,cr8 ++ .text ++ .global stc_d3 ++stc_d3: ++ stc.d cp0,r0[r0],cr0 ++ stc.d cp7,pc[pc<<3],cr14 ++ stc.d cp3,r5[r4<<2],cr6 ++ stc.d cp2,r4[r3<<1],cr4 ++ stc.d cp4,r13[r12<<0],cr8 ++ .text ++ .global ldc0_w ++ldc0_w: ++ ldc0.w cr0,r0[0] ++ ldc0.w cr15,pc[4095<<2] ++ ldc0.w cr5,r5[2048<<2] ++ ldc0.w cr4,r4[2047<<2] ++ ldc0.w cr9,r13[147<<2] ++ .text ++ .global ldc0_d ++ldc0_d: ++ ldc0.d cr0,r0[0] ++ ldc0.d cr14,pc[4095<<2] ++ ldc0.d cr6,r5[2048<<2] ++ ldc0.d cr4,r4[2047<<2] ++ ldc0.d cr8,r13[147<<2] ++ .text ++ .global stc0_w ++stc0_w: ++ stc0.w r0[0],cr0 ++ stc0.w pc[4095<<2],cr15 ++ stc0.w r5[2048<<2],cr5 ++ stc0.w r4[2047<<2],cr4 ++ stc0.w r13[147<<2],cr9 ++ .text ++ .global stc0_d ++stc0_d: ++ stc0.d r0[0],cr0 ++ stc0.d pc[4095<<2],cr14 ++ stc0.d r5[2048<<2],cr6 ++ stc0.d r4[2047<<2],cr4 ++ stc0.d r13[147<<2],cr8 ++ .text ++ .global memc ++memc: ++ memc 0, 0 ++ memc -4, 31 ++ memc -65536, 16 ++ memc 65532, 15 ++ .text ++ .global mems ++mems: ++ mems 0, 0 ++ mems -4, 31 ++ mems -65536, 16 ++ mems 65532, 15 ++ .text ++ .global memt ++memt: ++ memt 0, 0 ++ memt -4, 31 ++ memt -65536, 16 ++ memt 65532, 15 ++ ++ .text ++ .global stcond ++stcond: ++ stcond r0[0], r0 ++ stcond pc[-1], pc ++ stcond r8[-32768], r7 ++ stcond r7[32767], r8 ++ stcond r5[0x1234], r10 ++ ++ldcm_w: ++ ldcm.w cp0,pc,cr0-cr7 ++ ldcm.w cp7,r0,cr0 ++ ldcm.w cp4,r4++,cr0-cr6 ++ ldcm.w cp3,r7,cr7 ++ ldcm.w cp1,r12++,cr1,cr4-cr6 ++ ldcm.w cp0,pc,cr8-cr15 ++ ldcm.w cp7,r0,cr8 ++ ldcm.w cp4,r4++,cr8-cr14 ++ ldcm.w cp3,r7,cr15 ++ ldcm.w cp1,r12++,cr9,cr12-cr14 ++ ++ldcm_d: ++ ldcm.d cp0,pc,cr0-cr15 ++ ldcm.d cp7,r0,cr0,cr1 ++ ldcm.d cp4,r4++,cr0-cr13 ++ ldcm.d cp3,r7,cr14-cr15 ++ ldcm.d cp2,r12++,cr0-cr3,cr8-cr9,cr14-cr15 ++ ++stcm_w: ++ stcm.w cp0,pc,cr0-cr7 ++ stcm.w cp7,r0,cr0 ++ stcm.w cp4,--r4,cr0-cr6 ++ stcm.w cp3,r7,cr7 ++ stcm.w cp1,--r12,cr1,cr4-cr6 ++ stcm.w cp0,pc,cr8-cr15 ++ stcm.w cp7,r0,cr8 ++ stcm.w cp4,--r4,cr8-cr14 ++ stcm.w cp3,r7,cr15 ++ stcm.w cp1,--r12,cr9,cr12-cr14 ++ ++stcm_d: ++ stcm.d cp0,pc,cr0-cr15 ++ stcm.d cp7,r0,cr0,cr1 ++ stcm.d cp4,--r4,cr0-cr13 ++ stcm.d cp3,r7,cr14-cr15 ++ stcm.d cp2,--r12,cr0-cr3,cr8-cr9,cr14-cr15 ++ ++mvcr_w: ++ mvcr.w cp7,pc,cr15 ++ mvcr.w cp0,r0,cr0 ++ mvcr.w cp0,pc,cr15 ++ mvcr.w cp7,r0,cr15 ++ mvcr.w cp7,pc,cr0 ++ mvcr.w cp4,r7,cr8 ++ mvcr.w cp3,r8,cr7 ++ ++mvcr_d: ++ mvcr.d cp7,lr,cr14 ++ mvcr.d cp0,r0,cr0 ++ mvcr.d cp0,lr,cr14 ++ mvcr.d cp7,r0,cr14 ++ mvcr.d cp7,lr,cr0 ++ mvcr.d cp4,r6,cr8 ++ mvcr.d cp3,r8,cr6 ++ ++mvrc_w: ++ mvrc.w cp7,cr15,pc ++ mvrc.w cp0,cr0,r0 ++ mvrc.w cp0,cr15,pc ++ mvrc.w cp7,cr15,r0 ++ mvrc.w cp7,cr0,pc ++ mvrc.w cp4,cr8,r7 ++ mvrc.w cp3,cr7,r8 ++ ++mvrc_d: ++ mvrc.d cp7,cr14,lr ++ mvrc.d cp0,cr0,r0 ++ mvrc.d cp0,cr14,lr ++ mvrc.d cp7,cr14,r0 ++ mvrc.d cp7,cr0,lr ++ mvrc.d cp4,cr8,r6 ++ mvrc.d cp3,cr6,r8 ++ ++bfexts: ++ bfexts pc,pc,31,31 ++ bfexts r0,r0,0,0 ++ bfexts r0,pc,31,31 ++ bfexts pc,r0,31,31 ++ bfexts pc,pc,0,31 ++ bfexts pc,pc,31,0 ++ bfexts r7,r8,15,16 ++ bfexts r8,r7,16,15 ++ ++bfextu: ++ bfextu pc,pc,31,31 ++ bfextu r0,r0,0,0 ++ bfextu r0,pc,31,31 ++ bfextu pc,r0,31,31 ++ bfextu pc,pc,0,31 ++ bfextu pc,pc,31,0 ++ bfextu r7,r8,15,16 ++ bfextu r8,r7,16,15 ++ ++bfins: ++ bfins pc,pc,31,31 ++ bfins r0,r0,0,0 ++ bfins r0,pc,31,31 ++ bfins pc,r0,31,31 ++ bfins pc,pc,0,31 ++ bfins pc,pc,31,0 ++ bfins r7,r8,15,16 ++ bfins r8,r7,16,15 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/avr32.exp binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/avr32.exp +--- binutils-2.17/gas/testsuite/gas/avr32/avr32.exp 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/avr32.exp 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,23 @@ ++# AVR32 assembler testsuite. -*- Tcl -*- ++ ++if [istarget avr32-*-*] { ++ run_dump_test "hwrd-lwrd" ++ run_dump_test "pcrel" ++ run_dump_test "aliases" ++ run_dump_test "dwarf2" ++ run_dump_test "pic_reloc" ++ run_dump_test "fpinsn" ++ run_dump_test "pico" ++ run_dump_test "lda_pic" ++ run_dump_test "lda_pic_linkrelax" ++ run_dump_test "lda_nopic" ++ run_dump_test "lda_nopic_linkrelax" ++ run_dump_test "call_pic" ++ run_dump_test "call_pic_linkrelax" ++ run_dump_test "call_nopic" ++ run_dump_test "call_nopic_linkrelax" ++ run_dump_test "jmptable" ++ run_dump_test "jmptable_linkrelax" ++ run_dump_test "symdiff" ++ run_dump_test "symdiff_linkrelax" ++} +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_nopic.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_nopic.d +--- binutils-2.17/gas/testsuite/gas/avr32/call_nopic.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_nopic.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,36 @@ ++#source: call.s ++#as: ++#objdump: -dr ++#name: call_nopic ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: d7 03 nop ++ ++00000002 : ++ \.\.\. ++ 1ffffe: 00 00 add r0,r0 ++ 200000: f0 a0 00 00 rcall 0 ++ 200004: f0 1f 00 0c mcall 200034 ++ 200008: f0 1f 00 0c mcall 200038 ++ 20000c: f0 1f 00 0c mcall 20003c ++ 200010: f0 1f 00 0c mcall 200040 ++ \.\.\. ++ 200030: ee b0 ff ff rcall 40002e ++ \.\.\. ++ 200034: R_AVR32_32_CPENT \.text\+0x2 ++ 200038: R_AVR32_32_CPENT \.text\.init ++ 20003c: R_AVR32_32_CPENT undefined ++ 200040: R_AVR32_32_CPENT \.text\+0x40002c ++ ++0040002c : ++ 40002c: d7 03 nop ++0040002e : ++ 40002e: d7 03 nop ++Disassembly of section \.text\.init: ++ ++00000000 : ++ 0: e2 c0 00 00 sub r0,r1,0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_nopic_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_nopic_linkrelax.d +--- binutils-2.17/gas/testsuite/gas/avr32/call_nopic_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_nopic_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,43 @@ ++#source: call.s ++#as: --linkrelax ++#objdump: -dr ++#name: call_nopic_linkrelax ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: d7 03 nop ++ ++00000002 : ++ \.\.\. ++ 1ffffe: 00 00 add r0,r0 ++ 200000: e0 a0 00 00 rcall 200000 ++ 200000: R_AVR32_22H_PCREL \.text ++ 200004: f0 1f 00 00 mcall 200004 ++ 200004: R_AVR32_CPCALL \.text\+0x200034 ++ 200008: f0 1f 00 00 mcall 200008 ++ 200008: R_AVR32_CPCALL \.text\+0x200038 ++ 20000c: f0 1f 00 00 mcall 20000c ++ 20000c: R_AVR32_CPCALL \.text\+0x20003c ++ 200010: f0 1f 00 00 mcall 200010 ++ 200010: R_AVR32_CPCALL \.text\+0x200040 ++ \.\.\. ++ 200030: e0 a0 00 00 rcall 200030 ++ 200030: R_AVR32_22H_PCREL \.text\+0x40002e ++ \.\.\. ++ 200034: R_AVR32_ALIGN \*ABS\*\+0x2 ++ 200034: R_AVR32_32_CPENT \.text\+0x2 ++ 200038: R_AVR32_32_CPENT \.text\.init ++ 20003c: R_AVR32_32_CPENT undefined ++ 200040: R_AVR32_32_CPENT \.text\+0x40002c ++ ++0040002c : ++ 40002c: d7 03 nop ++0040002e : ++ 40002e: d7 03 nop ++Disassembly of section \.text\.init: ++ ++00000000 : ++ 0: e2 c0 00 00 sub r0,r1,0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_pic.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_pic.d +--- binutils-2.17/gas/testsuite/gas/avr32/call_pic.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_pic.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,36 @@ ++#source: call.s ++#as: --pic ++#objdump: -dr ++#name: call_pic ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: d7 03 nop ++ ++00000002 : ++ \.\.\. ++ 1ffffe: 00 00 add r0,r0 ++ 200000: f0 a0 00 00 rcall 0 ++ 200004: f0 16 00 00 mcall r6\[0\] ++ 200004: R_AVR32_GOT18SW toofar_negative ++ 200008: f0 16 00 00 mcall r6\[0\] ++ 200008: R_AVR32_GOT18SW different_section ++ 20000c: f0 16 00 00 mcall r6\[0\] ++ 20000c: R_AVR32_GOT18SW undefined ++ 200010: f0 16 00 00 mcall r6\[0\] ++ 200010: R_AVR32_GOT18SW toofar_positive ++ \.\.\. ++ 200030: ee b0 ff ff rcall 40002e ++ \.\.\. ++ ++0040002c : ++ 40002c: d7 03 nop ++0040002e : ++ 40002e: d7 03 nop ++Disassembly of section \.text\.init: ++ ++00000000 : ++ 0: e2 c0 00 00 sub r0,r1,0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_pic_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_pic_linkrelax.d +--- binutils-2.17/gas/testsuite/gas/avr32/call_pic_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_pic_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,47 @@ ++#source: call.s ++#as: --pic --linkrelax ++#objdump: -dr ++#name: call_pic_linkrelax ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: d7 03 nop ++ ++00000002 : ++ \.\.\. ++ 1ffffe: 00 00 add r0,r0 ++ 200000: e0 a0 00 00 rcall 200000 ++ 200000: R_AVR32_22H_PCREL \.text ++ 200004: e0 6e 00 00 mov lr,0 ++ 200004: R_AVR32_GOTCALL toofar_negative ++ 200008: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] ++ 20000c: 5d 1e icall lr ++ 20000e: e0 6e 00 00 mov lr,0 ++ 20000e: R_AVR32_GOTCALL different_section ++ 200012: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] ++ 200016: 5d 1e icall lr ++ 200018: e0 6e 00 00 mov lr,0 ++ 200018: R_AVR32_GOTCALL undefined ++ 20001c: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] ++ 200020: 5d 1e icall lr ++ 200022: e0 6e 00 00 mov lr,0 ++ 200022: R_AVR32_GOTCALL toofar_positive ++ 200026: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] ++ 20002a: 5d 1e icall lr ++ 20002c: 00 00 add r0,r0 ++ 20002e: 00 00 add r0,r0 ++ 200030: e0 a0 00 00 rcall 200030 ++ 200030: R_AVR32_22H_PCREL \.text\+0x40002e ++ \.\.\. ++ ++0040002c : ++ 40002c: d7 03 nop ++0040002e : ++ 40002e: d7 03 nop ++Disassembly of section \.text\.init: ++ ++00000000 : ++ 0: e2 c0 00 00 sub r0,r1,0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call.s +--- binutils-2.17/gas/testsuite/gas/avr32/call.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,30 @@ ++ ++ .text ++ .global call_test ++call_test: ++far_negative: ++ nop ++toofar_negative: ++ ++ .org 0x200000 ++ ++ call far_negative ++ call toofar_negative ++ call different_section ++ call undefined ++ call toofar_positive ++ .org 0x200030 ++ call far_positive ++ ++ .cpool ++ ++ .org 0x40002c ++ ++toofar_positive: ++ nop ++far_positive: ++ nop ++ ++ .section .text.init,"ax",@progbits ++different_section: ++ sub r0, r1, 0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/dwarf2.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/dwarf2.d +--- binutils-2.17/gas/testsuite/gas/avr32/dwarf2.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/dwarf2.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,42 @@ ++#readelf: -wl ++#name: dwarf2 ++#source: dwarf2.s ++ ++Dump of debug contents of section \.debug_line: ++ ++ Length: 53 ++ DWARF Version: 2 ++ Prologue Length: 26 ++ Minimum Instruction Length: 1 ++ Initial value of 'is_stmt': 1 ++ Line Base: -5 ++ Line Range: 14 ++ Opcode Base: 10 ++ \(Pointer size: 4\) ++ ++ Opcodes: ++ Opcode 1 has 0 args ++ Opcode 2 has 1 args ++ Opcode 3 has 1 args ++ Opcode 4 has 1 args ++ Opcode 5 has 1 args ++ Opcode 6 has 0 args ++ Opcode 7 has 0 args ++ Opcode 8 has 0 args ++ Opcode 9 has 1 args ++ ++ The Directory Table is empty\. ++ ++ The File Name Table: ++ Entry Dir Time Size Name ++ 1 0 0 0 main\.c ++ ++ Line Number Statements: ++ Extended opcode 2: set Address to 0x0 ++ Advance Line by 87 to 88 ++ Copy ++ Advance Line by 23 to 111 ++ Special opcode .*: advance Address by 4 to 0x4 and Line by 0 to 111 ++ Special opcode .*: advance Address by 10 to 0xe and Line by 1 to 112 ++ Advance PC by 530 to 220 ++ Extended opcode 1: End of Sequence +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/dwarf2.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/dwarf2.s +--- binutils-2.17/gas/testsuite/gas/avr32/dwarf2.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/dwarf2.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,67 @@ ++# Source file used to test DWARF2 information for AVR32. ++ ++ .file "main.c" ++ ++ .section .debug_abbrev,"",@progbits ++.Ldebug_abbrev0: ++ .section .debug_info,"",@progbits ++.Ldebug_info0: ++ .section .debug_line,"",@progbits ++.Ldebug_line0: ++ ++ .text ++ .align 1 ++ .globl main ++ .type main, @function ++.Ltext0: ++main: ++ .file 1 "main.c" ++ .loc 1 88 0 ++ pushm r0-r7,lr ++ sub sp, 4 ++ .loc 1 111 0 ++ lddpc r12, .LC1 ++ lddpc r7, .LC1 ++ icall r7 ++ .loc 1 112 0 ++ lddpc r6, .LC4 ++ ++ .align 2 ++.LC4: .int 0 ++ ++ .fill 256, 2, 0 ++ ++ .align 2 ++.LC1: ++ .int 0 ++.LC2: ++ .int 0 ++.LC3: ++ .int 0 ++ .size main, . - main ++ ++.Letext0: ++ ++ .section .debug_info ++ .int .Ledebug_info0 - .Ldebug_info0 // size ++ .short 2 // version ++ .int .Ldebug_abbrev0 // abbrev offset ++ .byte 4 // bytes per addr ++ ++ .uleb128 1 // abbrev 1 ++ .int .Ldebug_line0 // DW_AT_stmt_list ++ .int .Letext0 // DW_AT_high_pc ++ .int .Ltext0 // DW_AT_low_pc ++ ++.Ledebug_info0: ++ ++ .section .debug_abbrev ++ .uleb128 0x01 ++ .uleb128 0x11 // DW_TAG_compile_unit ++ .byte 0 // DW_CHILDREN_no ++ .uleb128 0x10, 0x6 // DW_AT_stmt_list ++ .uleb128 0x12, 0x1 // DW_AT_high_pc ++ .uleb128 0x11, 0x1 // DW_AT_low_pc ++ .uleb128 0, 0 ++ ++ .byte 0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/fpinsn.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/fpinsn.d +--- binutils-2.17/gas/testsuite/gas/avr32/fpinsn.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/fpinsn.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,271 @@ ++#as: ++#objdump: -dr ++#name: fpinsn ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a2 0f ff cop cp0,cr15,cr15,cr15,0x4 ++ *[0-9a-f]*: e1 a2 00 00 cop cp0,cr0,cr0,cr0,0x4 ++ *[0-9a-f]*: e1 a2 00 ff cop cp0,cr0,cr15,cr15,0x4 ++ *[0-9a-f]*: e1 a2 0f 0f cop cp0,cr15,cr0,cr15,0x4 ++ *[0-9a-f]*: e1 a2 0f f0 cop cp0,cr15,cr15,cr0,0x4 ++ *[0-9a-f]*: e1 a2 07 88 cop cp0,cr7,cr8,cr8,0x4 ++ *[0-9a-f]*: e1 a2 08 78 cop cp0,cr8,cr7,cr8,0x4 ++ *[0-9a-f]*: e1 a2 08 87 cop cp0,cr8,cr8,cr7,0x4 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a2 1f ff cop cp0,cr15,cr15,cr15,0x5 ++ *[0-9a-f]*: e1 a2 10 00 cop cp0,cr0,cr0,cr0,0x5 ++ *[0-9a-f]*: e1 a2 10 ff cop cp0,cr0,cr15,cr15,0x5 ++ *[0-9a-f]*: e1 a2 1f 0f cop cp0,cr15,cr0,cr15,0x5 ++ *[0-9a-f]*: e1 a2 1f f0 cop cp0,cr15,cr15,cr0,0x5 ++ *[0-9a-f]*: e1 a2 17 88 cop cp0,cr7,cr8,cr8,0x5 ++ *[0-9a-f]*: e1 a2 18 78 cop cp0,cr8,cr7,cr8,0x5 ++ *[0-9a-f]*: e1 a2 18 87 cop cp0,cr8,cr8,cr7,0x5 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a0 0f ff cop cp0,cr15,cr15,cr15,0x0 ++ *[0-9a-f]*: e1 a0 00 00 cop cp0,cr0,cr0,cr0,0x0 ++ *[0-9a-f]*: e1 a0 00 ff cop cp0,cr0,cr15,cr15,0x0 ++ *[0-9a-f]*: e1 a0 0f 0f cop cp0,cr15,cr0,cr15,0x0 ++ *[0-9a-f]*: e1 a0 0f f0 cop cp0,cr15,cr15,cr0,0x0 ++ *[0-9a-f]*: e1 a0 07 88 cop cp0,cr7,cr8,cr8,0x0 ++ *[0-9a-f]*: e1 a0 08 78 cop cp0,cr8,cr7,cr8,0x0 ++ *[0-9a-f]*: e1 a0 08 87 cop cp0,cr8,cr8,cr7,0x0 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a0 1f ff cop cp0,cr15,cr15,cr15,0x1 ++ *[0-9a-f]*: e1 a0 10 00 cop cp0,cr0,cr0,cr0,0x1 ++ *[0-9a-f]*: e1 a0 10 ff cop cp0,cr0,cr15,cr15,0x1 ++ *[0-9a-f]*: e1 a0 1f 0f cop cp0,cr15,cr0,cr15,0x1 ++ *[0-9a-f]*: e1 a0 1f f0 cop cp0,cr15,cr15,cr0,0x1 ++ *[0-9a-f]*: e1 a0 17 88 cop cp0,cr7,cr8,cr8,0x1 ++ *[0-9a-f]*: e1 a0 18 78 cop cp0,cr8,cr7,cr8,0x1 ++ *[0-9a-f]*: e1 a0 18 87 cop cp0,cr8,cr8,cr7,0x1 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a1 0f ff cop cp0,cr15,cr15,cr15,0x2 ++ *[0-9a-f]*: e1 a1 00 00 cop cp0,cr0,cr0,cr0,0x2 ++ *[0-9a-f]*: e1 a1 00 ff cop cp0,cr0,cr15,cr15,0x2 ++ *[0-9a-f]*: e1 a1 0f 0f cop cp0,cr15,cr0,cr15,0x2 ++ *[0-9a-f]*: e1 a1 0f f0 cop cp0,cr15,cr15,cr0,0x2 ++ *[0-9a-f]*: e1 a1 07 88 cop cp0,cr7,cr8,cr8,0x2 ++ *[0-9a-f]*: e1 a1 08 78 cop cp0,cr8,cr7,cr8,0x2 ++ *[0-9a-f]*: e1 a1 08 87 cop cp0,cr8,cr8,cr7,0x2 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a1 1f ff cop cp0,cr15,cr15,cr15,0x3 ++ *[0-9a-f]*: e1 a1 10 00 cop cp0,cr0,cr0,cr0,0x3 ++ *[0-9a-f]*: e1 a1 10 ff cop cp0,cr0,cr15,cr15,0x3 ++ *[0-9a-f]*: e1 a1 1f 0f cop cp0,cr15,cr0,cr15,0x3 ++ *[0-9a-f]*: e1 a1 1f f0 cop cp0,cr15,cr15,cr0,0x3 ++ *[0-9a-f]*: e1 a1 17 88 cop cp0,cr7,cr8,cr8,0x3 ++ *[0-9a-f]*: e1 a1 18 78 cop cp0,cr8,cr7,cr8,0x3 ++ *[0-9a-f]*: e1 a1 18 87 cop cp0,cr8,cr8,cr7,0x3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a3 0f ff cop cp0,cr15,cr15,cr15,0x6 ++ *[0-9a-f]*: e1 a3 00 00 cop cp0,cr0,cr0,cr0,0x6 ++ *[0-9a-f]*: e1 a3 00 ff cop cp0,cr0,cr15,cr15,0x6 ++ *[0-9a-f]*: e1 a3 0f 0f cop cp0,cr15,cr0,cr15,0x6 ++ *[0-9a-f]*: e1 a3 0f f0 cop cp0,cr15,cr15,cr0,0x6 ++ *[0-9a-f]*: e1 a3 07 88 cop cp0,cr7,cr8,cr8,0x6 ++ *[0-9a-f]*: e1 a3 08 78 cop cp0,cr8,cr7,cr8,0x6 ++ *[0-9a-f]*: e1 a3 08 87 cop cp0,cr8,cr8,cr7,0x6 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a3 1f ff cop cp0,cr15,cr15,cr15,0x7 ++ *[0-9a-f]*: e1 a3 10 00 cop cp0,cr0,cr0,cr0,0x7 ++ *[0-9a-f]*: e1 a3 10 ff cop cp0,cr0,cr15,cr15,0x7 ++ *[0-9a-f]*: e1 a3 1f 0f cop cp0,cr15,cr0,cr15,0x7 ++ *[0-9a-f]*: e1 a3 1f f0 cop cp0,cr15,cr15,cr0,0x7 ++ *[0-9a-f]*: e1 a3 17 88 cop cp0,cr7,cr8,cr8,0x7 ++ *[0-9a-f]*: e1 a3 18 78 cop cp0,cr8,cr7,cr8,0x7 ++ *[0-9a-f]*: e1 a3 18 87 cop cp0,cr8,cr8,cr7,0x7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a4 0f f0 cop cp0,cr15,cr15,cr0,0x8 ++ *[0-9a-f]*: e1 a4 00 00 cop cp0,cr0,cr0,cr0,0x8 ++ *[0-9a-f]*: e1 a4 00 f0 cop cp0,cr0,cr15,cr0,0x8 ++ *[0-9a-f]*: e1 a4 0f 00 cop cp0,cr15,cr0,cr0,0x8 ++ *[0-9a-f]*: e1 a4 07 80 cop cp0,cr7,cr8,cr0,0x8 ++ *[0-9a-f]*: e1 a4 08 70 cop cp0,cr8,cr7,cr0,0x8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a4 1f f0 cop cp0,cr15,cr15,cr0,0x9 ++ *[0-9a-f]*: e1 a4 10 00 cop cp0,cr0,cr0,cr0,0x9 ++ *[0-9a-f]*: e1 a4 10 f0 cop cp0,cr0,cr15,cr0,0x9 ++ *[0-9a-f]*: e1 a4 1f 00 cop cp0,cr15,cr0,cr0,0x9 ++ *[0-9a-f]*: e1 a4 17 80 cop cp0,cr7,cr8,cr0,0x9 ++ *[0-9a-f]*: e1 a4 18 70 cop cp0,cr8,cr7,cr0,0x9 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a6 10 ff cop cp0,cr0,cr15,cr15,0xd ++ *[0-9a-f]*: e1 a6 10 00 cop cp0,cr0,cr0,cr0,0xd ++ *[0-9a-f]*: e1 a6 10 0f cop cp0,cr0,cr0,cr15,0xd ++ *[0-9a-f]*: e1 a6 10 f0 cop cp0,cr0,cr15,cr0,0xd ++ *[0-9a-f]*: e1 a6 10 78 cop cp0,cr0,cr7,cr8,0xd ++ *[0-9a-f]*: e1 a6 10 87 cop cp0,cr0,cr8,cr7,0xd ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a2 0e ee cop cp0,cr14,cr14,cr14,0x44 ++ *[0-9a-f]*: e5 a2 00 00 cop cp0,cr0,cr0,cr0,0x44 ++ *[0-9a-f]*: e5 a2 00 ee cop cp0,cr0,cr14,cr14,0x44 ++ *[0-9a-f]*: e5 a2 0e 0e cop cp0,cr14,cr0,cr14,0x44 ++ *[0-9a-f]*: e5 a2 0e e0 cop cp0,cr14,cr14,cr0,0x44 ++ *[0-9a-f]*: e5 a2 06 88 cop cp0,cr6,cr8,cr8,0x44 ++ *[0-9a-f]*: e5 a2 08 68 cop cp0,cr8,cr6,cr8,0x44 ++ *[0-9a-f]*: e5 a2 08 86 cop cp0,cr8,cr8,cr6,0x44 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a2 1e ee cop cp0,cr14,cr14,cr14,0x45 ++ *[0-9a-f]*: e5 a2 10 00 cop cp0,cr0,cr0,cr0,0x45 ++ *[0-9a-f]*: e5 a2 10 ee cop cp0,cr0,cr14,cr14,0x45 ++ *[0-9a-f]*: e5 a2 1e 0e cop cp0,cr14,cr0,cr14,0x45 ++ *[0-9a-f]*: e5 a2 1e e0 cop cp0,cr14,cr14,cr0,0x45 ++ *[0-9a-f]*: e5 a2 16 88 cop cp0,cr6,cr8,cr8,0x45 ++ *[0-9a-f]*: e5 a2 18 68 cop cp0,cr8,cr6,cr8,0x45 ++ *[0-9a-f]*: e5 a2 18 86 cop cp0,cr8,cr8,cr6,0x45 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a0 0e ee cop cp0,cr14,cr14,cr14,0x40 ++ *[0-9a-f]*: e5 a0 00 00 cop cp0,cr0,cr0,cr0,0x40 ++ *[0-9a-f]*: e5 a0 00 ee cop cp0,cr0,cr14,cr14,0x40 ++ *[0-9a-f]*: e5 a0 0e 0e cop cp0,cr14,cr0,cr14,0x40 ++ *[0-9a-f]*: e5 a0 0e e0 cop cp0,cr14,cr14,cr0,0x40 ++ *[0-9a-f]*: e5 a0 06 88 cop cp0,cr6,cr8,cr8,0x40 ++ *[0-9a-f]*: e5 a0 08 68 cop cp0,cr8,cr6,cr8,0x40 ++ *[0-9a-f]*: e5 a0 08 86 cop cp0,cr8,cr8,cr6,0x40 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a0 1e ee cop cp0,cr14,cr14,cr14,0x41 ++ *[0-9a-f]*: e5 a0 10 00 cop cp0,cr0,cr0,cr0,0x41 ++ *[0-9a-f]*: e5 a0 10 ee cop cp0,cr0,cr14,cr14,0x41 ++ *[0-9a-f]*: e5 a0 1e 0e cop cp0,cr14,cr0,cr14,0x41 ++ *[0-9a-f]*: e5 a0 1e e0 cop cp0,cr14,cr14,cr0,0x41 ++ *[0-9a-f]*: e5 a0 16 88 cop cp0,cr6,cr8,cr8,0x41 ++ *[0-9a-f]*: e5 a0 18 68 cop cp0,cr8,cr6,cr8,0x41 ++ *[0-9a-f]*: e5 a0 18 86 cop cp0,cr8,cr8,cr6,0x41 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a1 0e ee cop cp0,cr14,cr14,cr14,0x42 ++ *[0-9a-f]*: e5 a1 00 00 cop cp0,cr0,cr0,cr0,0x42 ++ *[0-9a-f]*: e5 a1 00 ee cop cp0,cr0,cr14,cr14,0x42 ++ *[0-9a-f]*: e5 a1 0e 0e cop cp0,cr14,cr0,cr14,0x42 ++ *[0-9a-f]*: e5 a1 0e e0 cop cp0,cr14,cr14,cr0,0x42 ++ *[0-9a-f]*: e5 a1 06 88 cop cp0,cr6,cr8,cr8,0x42 ++ *[0-9a-f]*: e5 a1 08 68 cop cp0,cr8,cr6,cr8,0x42 ++ *[0-9a-f]*: e5 a1 08 86 cop cp0,cr8,cr8,cr6,0x42 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a1 1e ee cop cp0,cr14,cr14,cr14,0x43 ++ *[0-9a-f]*: e5 a1 10 00 cop cp0,cr0,cr0,cr0,0x43 ++ *[0-9a-f]*: e5 a1 10 ee cop cp0,cr0,cr14,cr14,0x43 ++ *[0-9a-f]*: e5 a1 1e 0e cop cp0,cr14,cr0,cr14,0x43 ++ *[0-9a-f]*: e5 a1 1e e0 cop cp0,cr14,cr14,cr0,0x43 ++ *[0-9a-f]*: e5 a1 16 88 cop cp0,cr6,cr8,cr8,0x43 ++ *[0-9a-f]*: e5 a1 18 68 cop cp0,cr8,cr6,cr8,0x43 ++ *[0-9a-f]*: e5 a1 18 86 cop cp0,cr8,cr8,cr6,0x43 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a3 0e ee cop cp0,cr14,cr14,cr14,0x46 ++ *[0-9a-f]*: e5 a3 00 00 cop cp0,cr0,cr0,cr0,0x46 ++ *[0-9a-f]*: e5 a3 00 ee cop cp0,cr0,cr14,cr14,0x46 ++ *[0-9a-f]*: e5 a3 0e 0e cop cp0,cr14,cr0,cr14,0x46 ++ *[0-9a-f]*: e5 a3 0e e0 cop cp0,cr14,cr14,cr0,0x46 ++ *[0-9a-f]*: e5 a3 06 88 cop cp0,cr6,cr8,cr8,0x46 ++ *[0-9a-f]*: e5 a3 08 68 cop cp0,cr8,cr6,cr8,0x46 ++ *[0-9a-f]*: e5 a3 08 86 cop cp0,cr8,cr8,cr6,0x46 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a3 1e ee cop cp0,cr14,cr14,cr14,0x47 ++ *[0-9a-f]*: e5 a3 10 00 cop cp0,cr0,cr0,cr0,0x47 ++ *[0-9a-f]*: e5 a3 10 ee cop cp0,cr0,cr14,cr14,0x47 ++ *[0-9a-f]*: e5 a3 1e 0e cop cp0,cr14,cr0,cr14,0x47 ++ *[0-9a-f]*: e5 a3 1e e0 cop cp0,cr14,cr14,cr0,0x47 ++ *[0-9a-f]*: e5 a3 16 88 cop cp0,cr6,cr8,cr8,0x47 ++ *[0-9a-f]*: e5 a3 18 68 cop cp0,cr8,cr6,cr8,0x47 ++ *[0-9a-f]*: e5 a3 18 86 cop cp0,cr8,cr8,cr6,0x47 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a4 0e e0 cop cp0,cr14,cr14,cr0,0x48 ++ *[0-9a-f]*: e5 a4 00 00 cop cp0,cr0,cr0,cr0,0x48 ++ *[0-9a-f]*: e5 a4 00 e0 cop cp0,cr0,cr14,cr0,0x48 ++ *[0-9a-f]*: e5 a4 0e 00 cop cp0,cr14,cr0,cr0,0x48 ++ *[0-9a-f]*: e5 a4 06 80 cop cp0,cr6,cr8,cr0,0x48 ++ *[0-9a-f]*: e5 a4 08 60 cop cp0,cr8,cr6,cr0,0x48 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a4 1e e0 cop cp0,cr14,cr14,cr0,0x49 ++ *[0-9a-f]*: e5 a4 10 00 cop cp0,cr0,cr0,cr0,0x49 ++ *[0-9a-f]*: e5 a4 10 e0 cop cp0,cr0,cr14,cr0,0x49 ++ *[0-9a-f]*: e5 a4 1e 00 cop cp0,cr14,cr0,cr0,0x49 ++ *[0-9a-f]*: e5 a4 16 80 cop cp0,cr6,cr8,cr0,0x49 ++ *[0-9a-f]*: e5 a4 18 60 cop cp0,cr8,cr6,cr0,0x49 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a6 10 ee cop cp0,cr0,cr14,cr14,0x4d ++ *[0-9a-f]*: e5 a6 10 00 cop cp0,cr0,cr0,cr0,0x4d ++ *[0-9a-f]*: e5 a6 10 0e cop cp0,cr0,cr0,cr14,0x4d ++ *[0-9a-f]*: e5 a6 10 e0 cop cp0,cr0,cr14,cr0,0x4d ++ *[0-9a-f]*: e5 a6 10 68 cop cp0,cr0,cr6,cr8,0x4d ++ *[0-9a-f]*: e5 a6 10 86 cop cp0,cr0,cr8,cr6,0x4d ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a5 0f f0 cop cp0,cr15,cr15,cr0,0xa ++ *[0-9a-f]*: e1 a5 00 00 cop cp0,cr0,cr0,cr0,0xa ++ *[0-9a-f]*: e1 a5 0f 00 cop cp0,cr15,cr0,cr0,0xa ++ *[0-9a-f]*: e1 a5 00 f0 cop cp0,cr0,cr15,cr0,0xa ++ *[0-9a-f]*: e1 a5 08 70 cop cp0,cr8,cr7,cr0,0xa ++ *[0-9a-f]*: e1 a5 07 80 cop cp0,cr7,cr8,cr0,0xa ++ *[0-9a-f]*: ef af 0f 00 mvcr.w cp0,pc,cr15 ++ *[0-9a-f]*: ef a0 00 00 mvcr.w cp0,r0,cr0 ++ *[0-9a-f]*: ef af 00 00 mvcr.w cp0,pc,cr0 ++ *[0-9a-f]*: ef a0 0f 00 mvcr.w cp0,r0,cr15 ++ *[0-9a-f]*: ef a8 07 00 mvcr.w cp0,r8,cr7 ++ *[0-9a-f]*: ef a7 08 00 mvcr.w cp0,r7,cr8 ++ *[0-9a-f]*: ef af 0f 20 mvrc.w cp0,cr15,pc ++ *[0-9a-f]*: ef a0 00 20 mvrc.w cp0,cr0,r0 ++ *[0-9a-f]*: ef a0 0f 20 mvrc.w cp0,cr15,r0 ++ *[0-9a-f]*: ef af 00 20 mvrc.w cp0,cr0,pc ++ *[0-9a-f]*: ef a7 08 20 mvrc.w cp0,cr8,r7 ++ *[0-9a-f]*: ef a8 07 20 mvrc.w cp0,cr7,r8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e5 a5 0e e0 cop cp0,cr14,cr14,cr0,0x4a ++ *[0-9a-f]*: e5 a5 00 00 cop cp0,cr0,cr0,cr0,0x4a ++ *[0-9a-f]*: e5 a5 0e 00 cop cp0,cr14,cr0,cr0,0x4a ++ *[0-9a-f]*: e5 a5 00 e0 cop cp0,cr0,cr14,cr0,0x4a ++ *[0-9a-f]*: e5 a5 08 60 cop cp0,cr8,cr6,cr0,0x4a ++ *[0-9a-f]*: e5 a5 06 80 cop cp0,cr6,cr8,cr0,0x4a ++ *[0-9a-f]*: ef ae 0e 10 mvcr.d cp0,lr,cr14 ++ *[0-9a-f]*: ef a0 00 10 mvcr.d cp0,r0,cr0 ++ *[0-9a-f]*: ef ae 00 10 mvcr.d cp0,lr,cr0 ++ *[0-9a-f]*: ef a0 0e 10 mvcr.d cp0,r0,cr14 ++ *[0-9a-f]*: ef a8 06 10 mvcr.d cp0,r8,cr6 ++ *[0-9a-f]*: ef a6 08 10 mvcr.d cp0,r6,cr8 ++ *[0-9a-f]*: ef ae 0e 30 mvrc.d cp0,cr14,lr ++ *[0-9a-f]*: ef a0 00 30 mvrc.d cp0,cr0,r0 ++ *[0-9a-f]*: ef a0 0e 30 mvrc.d cp0,cr14,r0 ++ *[0-9a-f]*: ef ae 00 30 mvrc.d cp0,cr0,lr ++ *[0-9a-f]*: ef a6 08 30 mvrc.d cp0,cr8,r6 ++ *[0-9a-f]*: ef a8 06 30 mvrc.d cp0,cr6,r8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a7 1f e0 cop cp0,cr15,cr14,cr0,0xf ++ *[0-9a-f]*: e1 a7 10 00 cop cp0,cr0,cr0,cr0,0xf ++ *[0-9a-f]*: e1 a7 1f 00 cop cp0,cr15,cr0,cr0,0xf ++ *[0-9a-f]*: e1 a7 10 e0 cop cp0,cr0,cr14,cr0,0xf ++ *[0-9a-f]*: e1 a7 18 60 cop cp0,cr8,cr6,cr0,0xf ++ *[0-9a-f]*: e1 a7 17 80 cop cp0,cr7,cr8,cr0,0xf ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a8 0e f0 cop cp0,cr14,cr15,cr0,0x10 ++ *[0-9a-f]*: e1 a8 00 00 cop cp0,cr0,cr0,cr0,0x10 ++ *[0-9a-f]*: e1 a8 0e 00 cop cp0,cr14,cr0,cr0,0x10 ++ *[0-9a-f]*: e1 a8 00 f0 cop cp0,cr0,cr15,cr0,0x10 ++ *[0-9a-f]*: e1 a8 08 70 cop cp0,cr8,cr7,cr0,0x10 ++ *[0-9a-f]*: e1 a8 06 80 cop cp0,cr6,cr8,cr0,0x10 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/fpinsn.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/fpinsn.s +--- binutils-2.17/gas/testsuite/gas/avr32/fpinsn.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/fpinsn.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,266 @@ ++ ++ .text ++ .global fadd_s ++fadd_s: ++ fadd.s fr15, fr15, fr15 ++ fadd.s fr0, fr0, fr0 ++ fadd.s fr0, fr15, fr15 ++ fadd.s fr15, fr0, fr15 ++ fadd.s fr15, fr15, fr0 ++ fadd.s fr7, fr8, fr8 ++ fadd.s fr8, fr7, fr8 ++ fadd.s fr8, fr8, fr7 ++ .global fsub_s ++fsub_s: ++ fsub.s fr15, fr15, fr15 ++ fsub.s fr0, fr0, fr0 ++ fsub.s fr0, fr15, fr15 ++ fsub.s fr15, fr0, fr15 ++ fsub.s fr15, fr15, fr0 ++ fsub.s fr7, fr8, fr8 ++ fsub.s fr8, fr7, fr8 ++ fsub.s fr8, fr8, fr7 ++ .global fmac_s ++fmac_s: ++ fmac.s fr15, fr15, fr15 ++ fmac.s fr0, fr0, fr0 ++ fmac.s fr0, fr15, fr15 ++ fmac.s fr15, fr0, fr15 ++ fmac.s fr15, fr15, fr0 ++ fmac.s fr7, fr8, fr8 ++ fmac.s fr8, fr7, fr8 ++ fmac.s fr8, fr8, fr7 ++ .global fnmac_s ++fnmac_s: ++ fnmac.s fr15, fr15, fr15 ++ fnmac.s fr0, fr0, fr0 ++ fnmac.s fr0, fr15, fr15 ++ fnmac.s fr15, fr0, fr15 ++ fnmac.s fr15, fr15, fr0 ++ fnmac.s fr7, fr8, fr8 ++ fnmac.s fr8, fr7, fr8 ++ fnmac.s fr8, fr8, fr7 ++ .global fmsc_s ++fmsc_s: ++ fmsc.s fr15, fr15, fr15 ++ fmsc.s fr0, fr0, fr0 ++ fmsc.s fr0, fr15, fr15 ++ fmsc.s fr15, fr0, fr15 ++ fmsc.s fr15, fr15, fr0 ++ fmsc.s fr7, fr8, fr8 ++ fmsc.s fr8, fr7, fr8 ++ fmsc.s fr8, fr8, fr7 ++ .global fnmsc_s ++fnmsc_s: ++ fnmsc.s fr15, fr15, fr15 ++ fnmsc.s fr0, fr0, fr0 ++ fnmsc.s fr0, fr15, fr15 ++ fnmsc.s fr15, fr0, fr15 ++ fnmsc.s fr15, fr15, fr0 ++ fnmsc.s fr7, fr8, fr8 ++ fnmsc.s fr8, fr7, fr8 ++ fnmsc.s fr8, fr8, fr7 ++ .global fmul_s ++fmul_s: ++ fmul.s fr15, fr15, fr15 ++ fmul.s fr0, fr0, fr0 ++ fmul.s fr0, fr15, fr15 ++ fmul.s fr15, fr0, fr15 ++ fmul.s fr15, fr15, fr0 ++ fmul.s fr7, fr8, fr8 ++ fmul.s fr8, fr7, fr8 ++ fmul.s fr8, fr8, fr7 ++ .global fnmul_s ++fnmul_s: ++ fnmul.s fr15, fr15, fr15 ++ fnmul.s fr0, fr0, fr0 ++ fnmul.s fr0, fr15, fr15 ++ fnmul.s fr15, fr0, fr15 ++ fnmul.s fr15, fr15, fr0 ++ fnmul.s fr7, fr8, fr8 ++ fnmul.s fr8, fr7, fr8 ++ fnmul.s fr8, fr8, fr7 ++ .global fneg_s ++fneg_s: ++ fneg.s fr15, fr15 ++ fneg.s fr0, fr0 ++ fneg.s fr0, fr15 ++ fneg.s fr15, fr0 ++ fneg.s fr7, fr8 ++ fneg.s fr8, fr7 ++ .global fabs_s ++fabs_s: ++ fabs.s fr15, fr15 ++ fabs.s fr0, fr0 ++ fabs.s fr0, fr15 ++ fabs.s fr15, fr0 ++ fabs.s fr7, fr8 ++ fabs.s fr8, fr7 ++ .global fcmp_s ++fcmp_s: ++ fcmp.s fr15, fr15 ++ fcmp.s fr0, fr0 ++ fcmp.s fr0, fr15 ++ fcmp.s fr15, fr0 ++ fcmp.s fr7, fr8 ++ fcmp.s fr8, fr7 ++ .global fadd_d ++fadd_d: ++ fadd.d fr14, fr14, fr14 ++ fadd.d fr0, fr0, fr0 ++ fadd.d fr0, fr14, fr14 ++ fadd.d fr14, fr0, fr14 ++ fadd.d fr14, fr14, fr0 ++ fadd.d fr6, fr8, fr8 ++ fadd.d fr8, fr6, fr8 ++ fadd.d fr8, fr8, fr6 ++ .global fsub_d ++fsub_d: ++ fsub.d fr14, fr14, fr14 ++ fsub.d fr0, fr0, fr0 ++ fsub.d fr0, fr14, fr14 ++ fsub.d fr14, fr0, fr14 ++ fsub.d fr14, fr14, fr0 ++ fsub.d fr6, fr8, fr8 ++ fsub.d fr8, fr6, fr8 ++ fsub.d fr8, fr8, fr6 ++ .global fmac_d ++fmac_d: ++ fmac.d fr14, fr14, fr14 ++ fmac.d fr0, fr0, fr0 ++ fmac.d fr0, fr14, fr14 ++ fmac.d fr14, fr0, fr14 ++ fmac.d fr14, fr14, fr0 ++ fmac.d fr6, fr8, fr8 ++ fmac.d fr8, fr6, fr8 ++ fmac.d fr8, fr8, fr6 ++ .global fnmac_d ++fnmac_d: ++ fnmac.d fr14, fr14, fr14 ++ fnmac.d fr0, fr0, fr0 ++ fnmac.d fr0, fr14, fr14 ++ fnmac.d fr14, fr0, fr14 ++ fnmac.d fr14, fr14, fr0 ++ fnmac.d fr6, fr8, fr8 ++ fnmac.d fr8, fr6, fr8 ++ fnmac.d fr8, fr8, fr6 ++ .global fmsc_d ++fmsc_d: ++ fmsc.d fr14, fr14, fr14 ++ fmsc.d fr0, fr0, fr0 ++ fmsc.d fr0, fr14, fr14 ++ fmsc.d fr14, fr0, fr14 ++ fmsc.d fr14, fr14, fr0 ++ fmsc.d fr6, fr8, fr8 ++ fmsc.d fr8, fr6, fr8 ++ fmsc.d fr8, fr8, fr6 ++ .global fnmsc_d ++fnmsc_d: ++ fnmsc.d fr14, fr14, fr14 ++ fnmsc.d fr0, fr0, fr0 ++ fnmsc.d fr0, fr14, fr14 ++ fnmsc.d fr14, fr0, fr14 ++ fnmsc.d fr14, fr14, fr0 ++ fnmsc.d fr6, fr8, fr8 ++ fnmsc.d fr8, fr6, fr8 ++ fnmsc.d fr8, fr8, fr6 ++ .global fmul_d ++fmul_d: ++ fmul.d fr14, fr14, fr14 ++ fmul.d fr0, fr0, fr0 ++ fmul.d fr0, fr14, fr14 ++ fmul.d fr14, fr0, fr14 ++ fmul.d fr14, fr14, fr0 ++ fmul.d fr6, fr8, fr8 ++ fmul.d fr8, fr6, fr8 ++ fmul.d fr8, fr8, fr6 ++ .global fnmul_d ++fnmul_d: ++ fnmul.d fr14, fr14, fr14 ++ fnmul.d fr0, fr0, fr0 ++ fnmul.d fr0, fr14, fr14 ++ fnmul.d fr14, fr0, fr14 ++ fnmul.d fr14, fr14, fr0 ++ fnmul.d fr6, fr8, fr8 ++ fnmul.d fr8, fr6, fr8 ++ fnmul.d fr8, fr8, fr6 ++ .global fneg_d ++fneg_d: ++ fneg.d fr14, fr14 ++ fneg.d fr0, fr0 ++ fneg.d fr0, fr14 ++ fneg.d fr14, fr0 ++ fneg.d fr6, fr8 ++ fneg.d fr8, fr6 ++ .global fabs_d ++fabs_d: ++ fabs.d fr14, fr14 ++ fabs.d fr0, fr0 ++ fabs.d fr0, fr14 ++ fabs.d fr14, fr0 ++ fabs.d fr6, fr8 ++ fabs.d fr8, fr6 ++ .global fcmp_d ++fcmp_d: ++ fcmp.d fr14, fr14 ++ fcmp.d fr0, fr0 ++ fcmp.d fr0, fr14 ++ fcmp.d fr14, fr0 ++ fcmp.d fr6, fr8 ++ fcmp.d fr8, fr6 ++ .global fmov_s ++fmov_s: ++ fmov.s fr15, fr15 ++ fmov.s fr0, fr0 ++ fmov.s fr15, fr0 ++ fmov.s fr0, fr15 ++ fmov.s fr8, fr7 ++ fmov.s fr7, fr8 ++ fmov.s pc, fr15 ++ fmov.s r0, fr0 ++ fmov.s pc, fr0 ++ fmov.s r0, fr15 ++ fmov.s r8, fr7 ++ fmov.s r7, fr8 ++ fmov.s fr15, pc ++ fmov.s fr0, r0 ++ fmov.s fr15, r0 ++ fmov.s fr0, pc ++ fmov.s fr8, r7 ++ fmov.s fr7, r8 ++ .global fmov_d ++fmov_d: ++ fmov.d fr14, fr14 ++ fmov.d fr0, fr0 ++ fmov.d fr14, fr0 ++ fmov.d fr0, fr14 ++ fmov.d fr8, fr6 ++ fmov.d fr6, fr8 ++ fmov.d lr, fr14 ++ fmov.d r0, fr0 ++ fmov.d lr, fr0 ++ fmov.d r0, fr14 ++ fmov.d r8, fr6 ++ fmov.d r6, fr8 ++ fmov.d fr14, lr ++ fmov.d fr0, r0 ++ fmov.d fr14, r0 ++ fmov.d fr0, lr ++ fmov.d fr8, r6 ++ fmov.d fr6, r8 ++ .global fcasts_d ++fcasts_d: ++ fcasts.d fr15, fr14 ++ fcasts.d fr0, fr0 ++ fcasts.d fr15, fr0 ++ fcasts.d fr0, fr14 ++ fcasts.d fr8, fr6 ++ fcasts.d fr7, fr8 ++ .global fcastd_s ++fcastd_s: ++ fcastd.s fr14, fr15 ++ fcastd.s fr0, fr0 ++ fcastd.s fr14, fr0 ++ fcastd.s fr0, fr15 ++ fcastd.s fr8, fr7 ++ fcastd.s fr6, fr8 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/hwrd-lwrd.d +--- binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/hwrd-lwrd.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,47 @@ ++#as: ++#objdump: -dr ++#name: hwrd-lwrd ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: e0 60 87 65 mov r0,34661 ++ 4: e0 60 12 34 mov r0,4660 ++ 8: e0 60 00 00 mov r0,0 ++ 8: R_AVR32_HI16 \.text\+0x60 ++ c: e0 60 00 00 mov r0,0 ++ c: R_AVR32_HI16 extsym1 ++ 10: ea 10 87 65 orh r0,0x8765 ++ 14: ea 10 12 34 orh r0,0x1234 ++ 18: ea 10 00 00 orh r0,0x0 ++ 18: R_AVR32_HI16 \.text\+0x60 ++ 1c: ea 10 00 00 orh r0,0x0 ++ 1c: R_AVR32_HI16 extsym1 ++ 20: e4 10 87 65 andh r0,0x8765 ++ 24: e4 10 12 34 andh r0,0x1234 ++ 28: e4 10 00 00 andh r0,0x0 ++ 28: R_AVR32_HI16 \.text\+0x60 ++ 2c: e4 10 00 00 andh r0,0x0 ++ 2c: R_AVR32_HI16 extsym1 ++ ++00000030 : ++ 30: e0 60 43 21 mov r0,17185 ++ 34: e0 60 56 78 mov r0,22136 ++ 38: e0 60 00 00 mov r0,0 ++ 38: R_AVR32_LO16 \.text\+0x60 ++ 3c: e0 60 00 00 mov r0,0 ++ 3c: R_AVR32_LO16 extsym1 ++ 40: e8 10 43 21 orl r0,0x4321 ++ 44: e8 10 56 78 orl r0,0x5678 ++ 48: e8 10 00 00 orl r0,0x0 ++ 48: R_AVR32_LO16 \.text\+0x60 ++ 4c: e8 10 00 00 orl r0,0x0 ++ 4c: R_AVR32_LO16 extsym1 ++ 50: e0 10 43 21 andl r0,0x4321 ++ 54: e0 10 56 78 andl r0,0x5678 ++ 58: e0 10 00 00 andl r0,0x0 ++ 58: R_AVR32_LO16 \.text\+0x60 ++ 5c: e0 10 00 00 andl r0,0x0 ++ 5c: R_AVR32_LO16 extsym1 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/hwrd-lwrd.s +--- binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/hwrd-lwrd.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,39 @@ ++ ++ .equ sym1, 0x12345678 ++ ++ .text ++ .global test_hwrd ++test_hwrd: ++ mov r0, hi(0x87654321) ++ mov r0, hi(sym1) ++ mov r0, hi(sym2) ++ mov r0, hi(extsym1) ++ ++ orh r0, hi(0x87654321) ++ orh r0, hi(sym1) ++ orh r0, hi(sym2) ++ orh r0, hi(extsym1) ++ ++ andh r0, hi(0x87654321) ++ andh r0, hi(sym1) ++ andh r0, hi(sym2) ++ andh r0, hi(extsym1) ++ ++ .global test_lwrd ++test_lwrd: ++ mov r0, lo(0x87654321) ++ mov r0, lo(sym1) ++ mov r0, lo(sym2) ++ mov r0, lo(extsym1) ++ ++ orl r0, lo(0x87654321) ++ orl r0, lo(sym1) ++ orl r0, lo(sym2) ++ orl r0, lo(extsym1) ++ ++ andl r0, lo(0x87654321) ++ andl r0, lo(sym1) ++ andl r0, lo(sym2) ++ andl r0, lo(extsym1) ++ ++sym2: +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable.d +--- binutils-2.17/gas/testsuite/gas/avr32/jmptable.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,20 @@ ++#source: jmptable.s ++#as: ++#objdump: -dr ++#name: jmptable ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: fe c8 ff f4 sub r8,pc,-12 ++ 4: f0 00 00 2f add pc,r8,r0<<0x2 ++ 8: d7 03 nop ++ a: 00 00 add r0,r0 ++ c: c0 38 rjmp 12 ++ e: c0 38 rjmp 14 ++ 10: c0 38 rjmp 16 ++ 12: d7 03 nop ++ 14: d7 03 nop ++ 16: d7 03 nop +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable_linkrelax.d +--- binutils-2.17/gas/testsuite/gas/avr32/jmptable_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,25 @@ ++#source: jmptable.s ++#as: --linkrelax ++#objdump: -dr ++#name: jmptable_linkrelax ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: fe c8 00 00 sub r8,pc,0 ++ 0: R_AVR32_16N_PCREL \.text\+0xc ++ 4: f0 00 00 2f add pc,r8,r0<<0x2 ++ 8: d7 03 nop ++ a: 00 00 add r0,r0 ++ a: R_AVR32_ALIGN \*ABS\*\+0x2 ++ c: c0 08 rjmp c ++ c: R_AVR32_11H_PCREL \.text\+0x12 ++ e: c0 08 rjmp e ++ e: R_AVR32_11H_PCREL \.text\+0x14 ++ 10: c0 08 rjmp 10 ++ 10: R_AVR32_11H_PCREL \.text\+0x16 ++ 12: d7 03 nop ++ 14: d7 03 nop ++ 16: d7 03 nop +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable.s +--- binutils-2.17/gas/testsuite/gas/avr32/jmptable.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,14 @@ ++ ++ .text ++ .global jmptable_test ++jmptable_test: ++ sub r8, pc, -(.L1 - .) ++ add pc, r8, r0 << 2 ++ nop ++ .align 2 ++.L1: rjmp 1f ++ rjmp 2f ++ rjmp 3f ++1: nop ++2: nop ++3: nop +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_nopic.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_nopic.d +--- binutils-2.17/gas/testsuite/gas/avr32/lda_nopic.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_nopic.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,32 @@ ++#source: lda.s ++#as: ++#objdump: -dr ++#name: lda_nopic ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: f2 c8 00 00 sub r8,r9,0 ++ ++00000004 : ++ 4: f6 ca 00 00 sub r10,r11,0 ++ ... ++ 8000: fe c0 7f fc sub r0,pc,32764 ++ 8004: 48 31 lddpc r1,8010 ++ 8006: 48 42 lddpc r2,8014 ++ 8008: 48 43 lddpc r3,8018 ++ 800a: 48 54 lddpc r4,801c ++ 800c: fe c5 80 04 sub r5,pc,-32764 ++ ... ++ 8010: R_AVR32_32_CPENT \.text ++ 8014: R_AVR32_32_CPENT \.data ++ 8018: R_AVR32_32_CPENT undefined ++ 801c: R_AVR32_32_CPENT \.text\+0x1001c ++ ++00010008 : ++ 10008: fa cc 00 00 sub r12,sp,0 ++ ... ++0001001c : ++ 1001c: fe ce 00 00 sub lr,pc,0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d +--- binutils-2.17/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,41 @@ ++#source: lda.s ++#as: --linkrelax ++#objdump: -dr ++#name: lda_nopic_linkrelax ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: f2 c8 00 00 sub r8,r9,0 ++ ++00000004 : ++ 4: f6 ca 00 00 sub r10,r11,0 ++ \.\.\. ++ 8000: 48 00 lddpc r0,8000 ++ 8000: R_AVR32_9W_CP \.text\+0x800c ++ 8002: 48 01 lddpc r1,8000 ++ 8002: R_AVR32_9W_CP \.text\+0x8010 ++ 8004: 48 02 lddpc r2,8004 ++ 8004: R_AVR32_9W_CP \.text\+0x8014 ++ 8006: 48 03 lddpc r3,8004 ++ 8006: R_AVR32_9W_CP \.text\+0x8018 ++ 8008: 48 04 lddpc r4,8008 ++ 8008: R_AVR32_9W_CP \.text\+0x801c ++ 800a: 48 05 lddpc r5,8008 ++ 800a: R_AVR32_9W_CP \.text\+0x8020 ++ \.\.\. ++ 800c: R_AVR32_ALIGN \*ABS\*\+0x2 ++ 800c: R_AVR32_32_CPENT \.text\+0x4 ++ 8010: R_AVR32_32_CPENT \.text ++ 8014: R_AVR32_32_CPENT \.data ++ 8018: R_AVR32_32_CPENT undefined ++ 801c: R_AVR32_32_CPENT \.text\+0x10020 ++ 8020: R_AVR32_32_CPENT \.text\+0x1000c ++ ++0001000c : ++ 1000c: fa cc 00 00 sub r12,sp,0 ++ \.\.\. ++00010020 : ++ 10020: fe ce 00 00 sub lr,pc,0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_pic.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_pic.d +--- binutils-2.17/gas/testsuite/gas/avr32/lda_pic.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_pic.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,32 @@ ++#source: lda.s ++#as: --pic ++#objdump: -dr ++#name: lda_pic ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: f2 c8 00 00 sub r8,r9,0 ++ ++00000004 : ++ 4: f6 ca 00 00 sub r10,r11,0 ++ ... ++ 8000: fe c0 7f fc sub r0,pc,32764 ++ 8004: ec f1 00 00 ld.w r1,r6\[0\] ++ 8004: R_AVR32_GOT16S toofar_negative ++ 8008: ec f2 00 00 ld.w r2,r6\[0\] ++ 8008: R_AVR32_GOT16S different_section ++ 800c: ec f3 00 00 ld.w r3,r6\[0\] ++ 800c: R_AVR32_GOT16S undefined ++ 8010: ec f4 00 00 ld.w r4,r6\[0\] ++ 8010: R_AVR32_GOT16S toofar_positive ++ 8014: fe c5 80 14 sub r5,pc,-32748 ++ ... ++ ++00010000 : ++ 10000: fa cc 00 00 sub r12,sp,0 ++ ... ++00010014 : ++ 10014: fe ce 00 00 sub lr,pc,0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_pic_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_pic_linkrelax.d +--- binutils-2.17/gas/testsuite/gas/avr32/lda_pic_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_pic_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,40 @@ ++#source: lda.s ++#as: --pic --linkrelax ++#objdump: -dr ++#name: lda_pic_linkrelax ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: f2 c8 00 00 sub r8,r9,0 ++ ++00000004 : ++ 4: f6 ca 00 00 sub r10,r11,0 ++ ... ++ 8000: e0 60 00 00 mov r0,0 ++ 8000: R_AVR32_LDA_GOT far_negative ++ 8004: ec 00 03 20 ld\.w r0,r6\[r0<<0x2\] ++ 8008: e0 61 00 00 mov r1,0 ++ 8008: R_AVR32_LDA_GOT toofar_negative ++ 800c: ec 01 03 21 ld\.w r1,r6\[r1<<0x2\] ++ 8010: e0 62 00 00 mov r2,0 ++ 8010: R_AVR32_LDA_GOT different_section ++ 8014: ec 02 03 22 ld\.w r2,r6\[r2<<0x2\] ++ 8018: e0 63 00 00 mov r3,0 ++ 8018: R_AVR32_LDA_GOT undefined ++ 801c: ec 03 03 23 ld\.w r3,r6\[r3<<0x2\] ++ 8020: e0 64 00 00 mov r4,0 ++ 8020: R_AVR32_LDA_GOT toofar_positive ++ 8024: ec 04 03 24 ld\.w r4,r6\[r4<<0x2\] ++ 8028: e0 65 00 00 mov r5,0 ++ 8028: R_AVR32_LDA_GOT far_positive ++ 802c: ec 05 03 25 ld\.w r5,r6\[r5<<0x2\] ++ ... ++ ++00010018 : ++ 10018: fa cc 00 00 sub r12,sp,0 ++ ... ++0001002c : ++ 1002c: fe ce 00 00 sub lr,pc,0 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda.s +--- binutils-2.17/gas/testsuite/gas/avr32/lda.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,30 @@ ++ ++ .text ++ .global lda_test ++lda_test: ++toofar_negative: ++ sub r8, r9, 0 ++far_negative: ++ sub r10, r11, 0 ++ ++ .fill 32760, 1, 0x00 ++ ++ lda.w r0, far_negative ++ lda.w r1, toofar_negative ++ lda.w r2, different_section ++ lda.w r3, undefined ++ lda.w r4, toofar_positive ++ lda.w r5, far_positive ++ ++ .cpool ++ ++ .fill 32744, 1, 0x00 ++far_positive: ++ sub r12, sp, 0 ++ .fill 16, 1, 0x00 ++toofar_positive: ++ sub lr, pc, 0 ++ ++ .data ++different_section: ++ .long 0x12345678 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pcrel.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pcrel.d +--- binutils-2.17/gas/testsuite/gas/avr32/pcrel.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pcrel.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,64 @@ ++#as: ++#objdump: -dr ++#name: pcrel ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: d7 03 nop ++ 2: c0 28 rjmp 6 ++ 4: d7 03 nop ++ 6: e0 8f 00 00 bral 6 ++ 6: R_AVR32_22H_PCREL extsym10 ++ ++0000000a : ++ a: d7 03 nop ++0000000c : ++ c: c0 2c rcall 10 ++ e: d7 03 nop ++ 10: e0 a0 00 00 rcall 10 ++ 10: R_AVR32_22H_PCREL extsym21 ++ ++00000014 : ++ 14: c0 31 brne 1a ++ 16: e0 8f 00 00 bral 16 ++ 16: R_AVR32_22H_PCREL test_branch ++ 1a: e0 80 00 00 breq 1a ++ 1a: R_AVR32_22H_PCREL extsym21 ++ ++0000001e : ++ 1e: 48 30 lddpc r0,28 ++ 20: 48 20 lddpc r0,28 ++ 22: fe f0 00 00 ld.w r0,pc\[0\] ++ 22: R_AVR32_16B_PCREL extsym16 ++ \.\.\. ++ ++00000028 : ++ 28: d7 03 nop ++ 2a: d7 03 nop ++ ++0000002c : ++ 2c: 48 20 lddpc r0,34 ++ 2e: 48 30 lddpc r0,38 ++ 30: 48 20 lddpc r0,38 ++ 32: 00 00 add r0,r0 ++ 34: d7 03 nop ++ 36: d7 03 nop ++ 38: d7 03 nop ++ 3a: d7 03 nop ++ ++Disassembly of section \.text\.init: ++ ++00000000 : ++ 0: e0 a0 .. .. rcall [0-9a-f]+ <.*> ++ 0: R_AVR32_22H_PCREL test_rcall ++ 4: d7 03 nop ++ 6: e0 a0 .. .. rcall [0-9a-f]+ <.*> ++ 6: R_AVR32_22H_PCREL test_rcall ++ a: e0 a0 .. .. rcall [0-9a-z]+ <.*> ++ a: R_AVR32_22H_PCREL \.text\+0xc ++ e: d7 03 nop ++ 10: e0 a0 .. .. rcall [0-9a-f]+ <.*> ++ 10: R_AVR32_22H_PCREL \.text\+0xc +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pcrel.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pcrel.s +--- binutils-2.17/gas/testsuite/gas/avr32/pcrel.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pcrel.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,57 @@ ++ ++ .text ++ .global test_rjmp ++test_rjmp: ++ nop ++ rjmp 0f ++ nop ++0: rjmp extsym10 ++ ++ .global test_rcall ++test_rcall: ++ nop ++test_rcall2: ++ rcall 0f ++ nop ++0: rcall extsym21 ++ ++ .global test_branch ++test_branch: ++ brne 0f ++ /* This will generate a reloc since test_branch is global */ ++ bral test_branch ++0: breq extsym21 ++ ++ .global test_lddpc ++test_lddpc: ++ lddpc r0,sym1 ++ lddpc r0,sym1 ++ lddpc r0,extsym16 ++ ++ .align 2 ++sym1: nop ++ nop ++ ++ .global test_local ++test_local: ++ lddpc r0, .LC1 ++ lddpc r0, .LC2 ++ lddpc r0, .LC1 + 0x4 ++ ++ .align 2 ++.LC1: ++ nop ++ nop ++.LC2: ++ nop ++ nop ++ ++ .section .text.init,"ax" ++ .global test_inter_section ++test_inter_section: ++ rcall test_rcall ++ nop ++ rcall test_rcall ++ rcall test_rcall2 ++ nop ++ rcall test_rcall2 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pico.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pico.d +--- binutils-2.17/gas/testsuite/gas/avr32/pico.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pico.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,149 @@ ++#as: ++#objdump: -dr ++#name: pico ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a6 20 00 cop cp1,cr0,cr0,cr0,0xc ++ *[0-9a-f]*: e1 a7 2b bb cop cp1,cr11,cr11,cr11,0xe ++ *[0-9a-f]*: e1 a6 3a 05 cop cp1,cr10,cr0,cr5,0xd ++ *[0-9a-f]*: e1 a7 36 90 cop cp1,cr6,cr9,cr0,0xf ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a4 20 00 cop cp1,cr0,cr0,cr0,0x8 ++ *[0-9a-f]*: e1 a5 2b bb cop cp1,cr11,cr11,cr11,0xa ++ *[0-9a-f]*: e1 a4 3a 05 cop cp1,cr10,cr0,cr5,0x9 ++ *[0-9a-f]*: e1 a5 36 90 cop cp1,cr6,cr9,cr0,0xb ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a2 20 00 cop cp1,cr0,cr0,cr0,0x4 ++ *[0-9a-f]*: e1 a3 2b bb cop cp1,cr11,cr11,cr11,0x6 ++ *[0-9a-f]*: e1 a2 3a 05 cop cp1,cr10,cr0,cr5,0x5 ++ *[0-9a-f]*: e1 a3 36 90 cop cp1,cr6,cr9,cr0,0x7 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e1 a0 20 00 cop cp1,cr0,cr0,cr0,0x0 ++ *[0-9a-f]*: e1 a1 2b bb cop cp1,cr11,cr11,cr11,0x2 ++ *[0-9a-f]*: e1 a0 3a 05 cop cp1,cr10,cr0,cr5,0x1 ++ *[0-9a-f]*: e1 a1 36 90 cop cp1,cr6,cr9,cr0,0x3 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e9 af 3e ff ldc\.d cp1,cr14,pc\[0x3fc\] ++ *[0-9a-f]*: e9 a0 30 ff ldc\.d cp1,cr0,r0\[0x3fc\] ++ *[0-9a-f]*: e9 a0 30 00 ldc\.d cp1,cr0,r0\[0x0\] ++ *[0-9a-f]*: ef a8 26 50 ldc\.d cp1,cr6,--r8 ++ *[0-9a-f]*: ef a7 28 50 ldc\.d cp1,cr8,--r7 ++ *[0-9a-f]*: ef aa 32 65 ldc\.d cp1,cr2,r10\[r5<<0x2\] ++ *[0-9a-f]*: ef a3 3c 46 ldc\.d cp1,cr12,r3\[r6\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: e9 af 2f ff ldc\.w cp1,cr15,pc\[0x3fc\] ++ *[0-9a-f]*: e9 a0 20 ff ldc\.w cp1,cr0,r0\[0x3fc\] ++ *[0-9a-f]*: e9 a0 20 00 ldc\.w cp1,cr0,r0\[0x0\] ++ *[0-9a-f]*: ef a8 27 40 ldc\.w cp1,cr7,--r8 ++ *[0-9a-f]*: ef a7 28 40 ldc\.w cp1,cr8,--r7 ++ *[0-9a-f]*: ef aa 31 25 ldc\.w cp1,cr1,r10\[r5<<0x2\] ++ *[0-9a-f]*: ef a3 3d 06 ldc\.w cp1,cr13,r3\[r6\] ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 24 ff ldcm\.d cp1,pc,cr0-cr15 ++ *[0-9a-f]*: ed a0 24 01 ldcm\.d cp1,r0,cr0-cr1 ++ *[0-9a-f]*: ed a7 24 80 ldcm\.d cp1,r7,cr14-cr15 ++ *[0-9a-f]*: ed a8 24 7f ldcm\.d cp1,r8,cr0-cr13 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 34 ff ldcm\.d cp1,pc\+\+,cr0-cr15 ++ *[0-9a-f]*: ed a0 34 01 ldcm\.d cp1,r0\+\+,cr0-cr1 ++ *[0-9a-f]*: ed a7 34 80 ldcm\.d cp1,r7\+\+,cr14-cr15 ++ *[0-9a-f]*: ed a8 34 7f ldcm\.d cp1,r8\+\+,cr0-cr13 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 20 ff ldcm\.w cp1,pc,cr0-cr7 ++ *[0-9a-f]*: ed a0 20 01 ldcm\.w cp1,r0,cr0 ++ *[0-9a-f]*: ed a7 20 80 ldcm\.w cp1,r7,cr7 ++ *[0-9a-f]*: ed a8 20 7f ldcm\.w cp1,r8,cr0-cr6 ++ *[0-9a-f]*: ed af 21 ff ldcm\.w cp1,pc,cr8-cr15 ++ *[0-9a-f]*: ed a0 21 01 ldcm\.w cp1,r0,cr8 ++ *[0-9a-f]*: ed a7 21 80 ldcm\.w cp1,r7,cr15 ++ *[0-9a-f]*: ed a8 21 7f ldcm\.w cp1,r8,cr8-cr14 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 30 ff ldcm\.w cp1,pc\+\+,cr0-cr7 ++ *[0-9a-f]*: ed a0 30 01 ldcm\.w cp1,r0\+\+,cr0 ++ *[0-9a-f]*: ed a7 30 80 ldcm\.w cp1,r7\+\+,cr7 ++ *[0-9a-f]*: ed a8 30 7f ldcm\.w cp1,r8\+\+,cr0-cr6 ++ *[0-9a-f]*: ed af 31 ff ldcm\.w cp1,pc\+\+,cr8-cr15 ++ *[0-9a-f]*: ed a0 31 01 ldcm\.w cp1,r0\+\+,cr8 ++ *[0-9a-f]*: ed a7 31 80 ldcm\.w cp1,r7\+\+,cr15 ++ *[0-9a-f]*: ed a8 31 7f ldcm\.w cp1,r8\+\+,cr8-cr14 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef ae 2e 30 mvrc\.d cp1,cr14,lr ++ *[0-9a-f]*: ef a0 20 30 mvrc\.d cp1,cr0,r0 ++ *[0-9a-f]*: ef a8 26 30 mvrc\.d cp1,cr6,r8 ++ *[0-9a-f]*: ef a6 28 30 mvrc\.d cp1,cr8,r6 ++ *[0-9a-f]*: ef ae 2e 10 mvcr\.d cp1,lr,cr14 ++ *[0-9a-f]*: ef a0 20 10 mvcr\.d cp1,r0,cr0 ++ *[0-9a-f]*: ef a8 26 10 mvcr\.d cp1,r8,cr6 ++ *[0-9a-f]*: ef a6 28 10 mvcr\.d cp1,r6,cr8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ef af 2f 20 mvrc\.w cp1,cr15,pc ++ *[0-9a-f]*: ef a0 20 20 mvrc\.w cp1,cr0,r0 ++ *[0-9a-f]*: ef a8 27 20 mvrc\.w cp1,cr7,r8 ++ *[0-9a-f]*: ef a7 28 20 mvrc\.w cp1,cr8,r7 ++ *[0-9a-f]*: ef af 2f 00 mvcr\.w cp1,pc,cr15 ++ *[0-9a-f]*: ef a0 20 00 mvcr\.w cp1,r0,cr0 ++ *[0-9a-f]*: ef a8 27 00 mvcr\.w cp1,r8,cr7 ++ *[0-9a-f]*: ef a7 28 00 mvcr\.w cp1,r7,cr8 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: eb af 3e ff stc\.d cp1,pc\[0x3fc\],cr14 ++ *[0-9a-f]*: eb a0 30 00 stc\.d cp1,r0\[0x0\],cr0 ++ *[0-9a-f]*: ef a8 26 70 stc\.d cp1,r8\+\+,cr6 ++ *[0-9a-f]*: ef a7 28 70 stc\.d cp1,r7\+\+,cr8 ++ *[0-9a-f]*: ef aa 32 e5 stc\.d cp1,r10\[r5<<0x2\],cr2 ++ *[0-9a-f]*: ef a3 3c c6 stc\.d cp1,r3\[r6\],cr12 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: eb af 2f ff stc\.w cp1,pc\[0x3fc\],cr15 ++ *[0-9a-f]*: eb a0 20 00 stc\.w cp1,r0\[0x0\],cr0 ++ *[0-9a-f]*: ef a8 27 60 stc\.w cp1,r8\+\+,cr7 ++ *[0-9a-f]*: ef a7 28 60 stc\.w cp1,r7\+\+,cr8 ++ *[0-9a-f]*: ef aa 31 a5 stc\.w cp1,r10\[r5<<0x2\],cr1 ++ *[0-9a-f]*: ef a3 3d 86 stc\.w cp1,r3\[r6\],cr13 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 25 ff stcm\.d cp1,pc,cr0-cr15 ++ *[0-9a-f]*: ed a0 25 01 stcm\.d cp1,r0,cr0-cr1 ++ *[0-9a-f]*: ed a7 25 80 stcm\.d cp1,r7,cr14-cr15 ++ *[0-9a-f]*: ed a8 25 7f stcm\.d cp1,r8,cr0-cr13 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 35 ff stcm\.d cp1,--pc,cr0-cr15 ++ *[0-9a-f]*: ed a0 35 01 stcm\.d cp1,--r0,cr0-cr1 ++ *[0-9a-f]*: ed a7 35 80 stcm\.d cp1,--r7,cr14-cr15 ++ *[0-9a-f]*: ed a8 35 7f stcm\.d cp1,--r8,cr0-cr13 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 22 ff stcm\.w cp1,pc,cr0-cr7 ++ *[0-9a-f]*: ed a0 22 01 stcm\.w cp1,r0,cr0 ++ *[0-9a-f]*: ed a7 22 80 stcm\.w cp1,r7,cr7 ++ *[0-9a-f]*: ed a8 22 7f stcm\.w cp1,r8,cr0-cr6 ++ *[0-9a-f]*: ed af 23 ff stcm\.w cp1,pc,cr8-cr15 ++ *[0-9a-f]*: ed a0 23 01 stcm\.w cp1,r0,cr8 ++ *[0-9a-f]*: ed a7 23 80 stcm\.w cp1,r7,cr15 ++ *[0-9a-f]*: ed a8 23 7f stcm\.w cp1,r8,cr8-cr14 ++ ++[0-9a-f]* : ++ *[0-9a-f]*: ed af 32 ff stcm\.w cp1,--pc,cr0-cr7 ++ *[0-9a-f]*: ed a0 32 01 stcm\.w cp1,--r0,cr0 ++ *[0-9a-f]*: ed a7 32 80 stcm\.w cp1,--r7,cr7 ++ *[0-9a-f]*: ed a8 32 7f stcm\.w cp1,--r8,cr0-cr6 ++ *[0-9a-f]*: ed af 33 ff stcm\.w cp1,--pc,cr8-cr15 ++ *[0-9a-f]*: ed a0 33 01 stcm\.w cp1,--r0,cr8 ++ *[0-9a-f]*: ed a7 33 80 stcm\.w cp1,--r7,cr15 ++ *[0-9a-f]*: ed a8 33 7f stcm\.w cp1,--r8,cr8-cr14 +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pico.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pico.s +--- binutils-2.17/gas/testsuite/gas/avr32/pico.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pico.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,144 @@ ++ ++ .text ++ .global picosvmac ++picosvmac: ++ picosvmac out0, in0, in0, in0 ++ picosvmac out2, in11, in11, in11 ++ picosvmac out1, in10, in0, in5 ++ picosvmac out3, in6, in9, in0 ++ .global picosvmul ++picosvmul: ++ picosvmul out0, in0, in0, in0 ++ picosvmul out2, in11, in11, in11 ++ picosvmul out1, in10, in0, in5 ++ picosvmul out3, in6, in9, in0 ++ .global picovmac ++picovmac: ++ picovmac out0, in0, in0, in0 ++ picovmac out2, in11, in11, in11 ++ picovmac out1, in10, in0, in5 ++ picovmac out3, in6, in9, in0 ++ .global picovmul ++picovmul: ++ picovmul out0, in0, in0, in0 ++ picovmul out2, in11, in11, in11 ++ picovmul out1, in10, in0, in5 ++ picovmul out3, in6, in9, in0 ++ .global picold_d ++picold_d: ++ picold.d vmu2_out, pc[1020] ++ picold.d inpix2, r0[1020] ++ picold.d inpix2, r0[0] ++ picold.d coeff0_a, --r8 ++ picold.d coeff1_a, --r7 ++ picold.d inpix0, r10[r5 << 2] ++ picold.d vmu0_out, r3[r6 << 0] ++ .global picold_w ++picold_w: ++ picold.w config, pc[1020] ++ picold.w inpix2, r0[1020] ++ picold.w inpix2, r0[0] ++ picold.w coeff0_b, --r8 ++ picold.w coeff1_a, --r7 ++ picold.w inpix1, r10[r5 << 2] ++ picold.w vmu1_out, r3[r6 << 0] ++ .global picoldm_d ++picoldm_d: ++ picoldm.d pc, inpix2-config ++ picoldm.d r0, inpix2, inpix1 ++ picoldm.d r7, vmu2_out, config ++ picoldm.d r8, inpix2-vmu1_out ++ .global picoldm_d_pu ++picoldm_d_pu: ++ picoldm.d pc++, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out, vmu2_out, config ++ picoldm.d r0++, inpix2, inpix1 ++ picoldm.d r7++, vmu2_out, config ++ picoldm.d r8++, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out ++ .global picoldm_w ++picoldm_w: ++ picoldm.w pc, inpix2-coeff0_b ++ picoldm.w r0, inpix2 ++ picoldm.w r7, coeff0_b ++ picoldm.w r8, inpix2-coeff0_a ++ picoldm.w pc, coeff1_a-config ++ picoldm.w r0, coeff1_a ++ picoldm.w r7, config ++ picoldm.w r8, coeff1_a-vmu2_out ++ .global picoldm_w_pu ++picoldm_w_pu: ++ picoldm.w pc++, inpix2-coeff0_b ++ picoldm.w r0++, inpix2 ++ picoldm.w r7++, coeff0_b ++ picoldm.w r8++, inpix2-coeff0_a ++ picoldm.w pc++, coeff1_a-config ++ picoldm.w r0++, coeff1_a ++ picoldm.w r7++, config ++ picoldm.w r8++, coeff1_a-vmu2_out ++ .global picomv_d ++picomv_d: ++ picomv.d vmu2_out, lr ++ picomv.d inpix2, r0 ++ picomv.d coeff0_a, r8 ++ picomv.d coeff1_a, r6 ++ picomv.d pc, vmu2_out ++ picomv.d r0, inpix2 ++ picomv.d r8, coeff0_a ++ picomv.d r6, coeff1_a ++ .global picomv_w ++picomv_w: ++ picomv.w config, pc ++ picomv.w inpix2, r0 ++ picomv.w coeff0_b, r8 ++ picomv.w coeff1_a, r7 ++ picomv.w pc, config ++ picomv.w r0, inpix2 ++ picomv.w r8, coeff0_b ++ picomv.w r7, coeff1_a ++ .global picost_d ++picost_d: ++ picost.d pc[1020], vmu2_out ++ picost.d r0[0], inpix2 ++ picost.d r8++, coeff0_a ++ picost.d r7++, coeff1_a ++ picost.d r10[r5 << 2], inpix0 ++ picost.d r3[r6 << 0], vmu0_out ++ .global picost_w ++picost_w: ++ picost.w pc[1020], config ++ picost.w r0[0], inpix2 ++ picost.w r8++, coeff0_b ++ picost.w r7++, coeff1_a ++ picost.w r10[r5 << 2], inpix1 ++ picost.w r3[r6 << 0], vmu1_out ++ .global picostm_d ++picostm_d: ++ picostm.d pc, inpix2-config ++ picostm.d r0, inpix2, inpix1 ++ picostm.d r7, vmu2_out, config ++ picostm.d r8, inpix2-vmu1_out ++ .global picostm_d_pu ++picostm_d_pu: ++ picostm.d --pc, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out, vmu2_out, config ++ picostm.d --r0, inpix2, inpix1 ++ picostm.d --r7, vmu2_out, config ++ picostm.d --r8, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out ++ .global picostm_w ++picostm_w: ++ picostm.w pc, inpix2-coeff0_b ++ picostm.w r0, inpix2 ++ picostm.w r7, coeff0_b ++ picostm.w r8, inpix2-coeff0_a ++ picostm.w pc, coeff1_a-config ++ picostm.w r0, coeff1_a ++ picostm.w r7, config ++ picostm.w r8, coeff1_a-vmu2_out ++ .global picostm_w_pu ++picostm_w_pu: ++ picostm.w --pc, inpix2-coeff0_b ++ picostm.w --r0, inpix2 ++ picostm.w --r7, coeff0_b ++ picostm.w --r8, inpix2-coeff0_a ++ picostm.w --pc, coeff1_a-config ++ picostm.w --r0, coeff1_a ++ picostm.w --r7, config ++ picostm.w --r8, coeff1_a-vmu2_out +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pic_reloc.d +--- binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pic_reloc.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,27 @@ ++#as: ++#objdump: -dr ++#name: pic_reloc ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: f0 16 00 00 mcall r6\[0\] ++ 0: R_AVR32_GOT18SW extfunc ++ 4: f0 16 00 00 mcall r6\[0\] ++ 4: R_AVR32_GOT18SW \.L1 ++ 8: f0 16 00 00 mcall r6\[0\] ++ 8: R_AVR32_GOT18SW \.L2 ++ c: f0 16 00 00 mcall r6\[0\] ++ c: R_AVR32_GOT18SW mcall_got ++ ++00000010 : ++ 10: ec f0 00 00 ld.w r0,r6\[0\] ++ 10: R_AVR32_GOT16S extvar ++ 14: ec f0 00 00 ld.w r0,r6\[0\] ++ 14: R_AVR32_GOT16S \.L3 ++ 18: ec f0 00 00 ld.w r0,r6\[0\] ++ 18: R_AVR32_GOT16S \.L4 ++ 1c: ec f0 00 00 ld.w r0,r6\[0\] ++ 1c: R_AVR32_GOT16S ldw_got +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pic_reloc.s +--- binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pic_reloc.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,18 @@ ++ ++ .text ++ .global mcall_got ++mcall_got: ++.L1: ++ mcall r6[extfunc@got] ++ mcall r6[.L1@got] ++ mcall r6[.L2@got] ++ mcall r6[mcall_got@got] ++.L2: ++ ++ .global ldw_got ++ldw_got: ++.L3: ld.w r0,r6[extvar@got] ++ ld.w r0,r6[.L3@got] ++ ld.w r0,r6[.L4@got] ++ ld.w r0,r6[ldw_got@got] ++.L4: +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff.d +--- binutils-2.17/gas/testsuite/gas/avr32/symdiff.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,24 @@ ++#source: symdiff.s ++#as: ++#objdump: -dr ++#name: symdiff ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: 00 00 add r0,r0 ++ 2: 00 04 add r4,r0 ++ ++00000004 : ++ 4: 00 04 add r4,r0 ++ ++00000006 : ++ 6: 04 00 add r0,r2 ++ ++00000008 : ++ 8: d7 03 nop ++ a: d7 03 nop ++ c: d7 03 nop ++ e: d7 03 nop +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff_linkrelax.d +--- binutils-2.17/gas/testsuite/gas/avr32/symdiff_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,28 @@ ++#source: symdiff.s ++#as: --linkrelax ++#objdump: -dr ++#name: symdiff_linkrelax ++ ++.*: +file format .* ++ ++Disassembly of section \.text: ++ ++00000000 : ++ 0: 00 00 add r0,r0 ++ 0: R_AVR32_DIFF32 \.text\+0xa ++ 2: 00 04 add r4,r0 ++ ++00000004 : ++ 4: 00 04 add r4,r0 ++ 4: R_AVR32_DIFF16 \.text\+0xa ++ ++00000006 : ++ 6: 04 00 add r0,r2 ++ 6: R_AVR32_DIFF8 \.text\+0xa ++ 7: R_AVR32_ALIGN \*ABS\*\+0x1 ++ ++00000008 : ++ 8: d7 03 nop ++ a: d7 03 nop ++ c: d7 03 nop ++ e: d7 03 nop +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff.s +--- binutils-2.17/gas/testsuite/gas/avr32/symdiff.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff.s 2007-03-26 10:19:48.000000000 +0200 +@@ -0,0 +1,19 @@ ++ ++ .text ++ .global diff32 ++diff32: ++ .long .L2 - .L1 ++ .global diff16 ++diff16: ++ .short .L2 - .L1 ++ .global diff8 ++diff8: ++ .byte .L2 - .L1 ++ ++ .global symdiff_test ++ .align 1 ++symdiff_test: ++ nop ++.L1: nop ++ nop ++.L2: nop +diff -Nrup binutils-2.17/gas/write.c binutils-2.17.atmel.1.3.0/gas/write.c +--- binutils-2.17/gas/write.c 2006-05-10 15:43:37.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/write.c 2007-03-26 10:20:16.000000000 +0200 +@@ -126,7 +126,9 @@ static fixS *fix_new_internal (fragS *, + offsetT offset, int pcrel, + RELOC_ENUM r_type); + static long fixup_segment (fixS *, segT); ++#if !defined (TC_RELAX_ALIGN) + static relax_addressT relax_align (relax_addressT addr, int align); ++#endif + static fragS *chain_frchains_together_1 (segT, struct frchain *); + static void chain_frchains_together (bfd *, segT, PTR); + static void cvt_frag_to_fill (segT, fragS *); +@@ -1684,6 +1686,10 @@ relax_frag (segT segment, fragS *fragP, + + #endif /* defined (TC_GENERIC_RELAX_TABLE) */ + ++#ifdef TC_RELAX_ALIGN ++#define RELAX_ALIGN(SEG, FRAG, ADDR) TC_RELAX_ALIGN(SEG, FRAG, ADDR) ++#else ++#define RELAX_ALIGN(SEG, FRAG, ADDR) relax_align(ADDR, (FRAG)->fr_offset) + /* Relax_align. Advance location counter to next address that has 'alignment' + lowest order bits all 0s, return size of adjustment made. */ + static relax_addressT +@@ -1703,6 +1709,7 @@ relax_align (register relax_addressT add + #endif + return (new_address - address); + } ++#endif + + /* Now we have a segment, not a crowd of sub-segments, we can make + fr_address values. +@@ -1746,7 +1753,7 @@ relax_segment (struct frag *segment_frag + case rs_align_code: + case rs_align_test: + { +- addressT offset = relax_align (address, (int) fragP->fr_offset); ++ addressT offset = RELAX_ALIGN(segment, fragP, address); + + if (fragP->fr_subtype != 0 && offset > fragP->fr_subtype) + offset = 0; +@@ -1922,10 +1929,10 @@ relax_segment (struct frag *segment_frag + { + addressT oldoff, newoff; + +- oldoff = relax_align (was_address + fragP->fr_fix, +- (int) offset); +- newoff = relax_align (address + fragP->fr_fix, +- (int) offset); ++ oldoff = RELAX_ALIGN (segment, fragP, ++ was_address + fragP->fr_fix); ++ newoff = RELAX_ALIGN (segment, fragP, ++ address + fragP->fr_fix); + + if (fragP->fr_subtype != 0) + { +diff -Nrup binutils-2.17/include/dis-asm.h binutils-2.17.atmel.1.3.0/include/dis-asm.h +--- binutils-2.17/include/dis-asm.h 2006-02-17 15:36:26.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/include/dis-asm.h 2007-03-26 10:20:18.000000000 +0200 +@@ -223,6 +223,7 @@ extern int print_insn_big_arm (bfd_vma, + extern int print_insn_little_arm (bfd_vma, disassemble_info *); + extern int print_insn_sparc (bfd_vma, disassemble_info *); + extern int print_insn_avr (bfd_vma, disassemble_info *); ++extern int print_insn_avr32 (bfd_vma, disassemble_info *); + extern int print_insn_bfin (bfd_vma, disassemble_info *); + extern int print_insn_d10v (bfd_vma, disassemble_info *); + extern int print_insn_d30v (bfd_vma, disassemble_info *); +@@ -276,7 +277,9 @@ extern disassembler_ftype cris_get_disas + extern void print_mips_disassembler_options (FILE *); + extern void print_ppc_disassembler_options (FILE *); + extern void print_arm_disassembler_options (FILE *); ++extern void print_avr32_disassembler_options (FILE *); + extern void parse_arm_disassembler_option (char *); ++extern void parse_avr32_disassembler_option (char *); + extern int get_arm_regname_num_options (void); + extern int set_arm_regname_option (int); + extern int get_arm_regnames (int, const char **, const char **, const char *const **); +diff -Nrup binutils-2.17/include/elf/avr32.h binutils-2.17.atmel.1.3.0/include/elf/avr32.h +--- binutils-2.17/include/elf/avr32.h 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/include/elf/avr32.h 2007-03-26 10:20:17.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* AVR32 ELF support for BFD. ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of BFD, the Binary File Descriptor library. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#include "elf/reloc-macros.h" ++ ++/* CPU-specific flags for the ELF header e_flags field */ ++#define EF_AVR32_LINKRELAX 0x01 ++#define EF_AVR32_PIC 0x02 ++ ++START_RELOC_NUMBERS (elf_avr32_reloc_type) ++ RELOC_NUMBER (R_AVR32_NONE, 0) ++ ++ /* Data Relocations */ ++ RELOC_NUMBER (R_AVR32_32, 1) ++ RELOC_NUMBER (R_AVR32_16, 2) ++ RELOC_NUMBER (R_AVR32_8, 3) ++ RELOC_NUMBER (R_AVR32_32_PCREL, 4) ++ RELOC_NUMBER (R_AVR32_16_PCREL, 5) ++ RELOC_NUMBER (R_AVR32_8_PCREL, 6) ++ RELOC_NUMBER (R_AVR32_DIFF32, 7) ++ RELOC_NUMBER (R_AVR32_DIFF16, 8) ++ RELOC_NUMBER (R_AVR32_DIFF8, 9) ++ RELOC_NUMBER (R_AVR32_GOT32, 10) ++ RELOC_NUMBER (R_AVR32_GOT16, 11) ++ RELOC_NUMBER (R_AVR32_GOT8, 12) ++ ++ /* Normal Code Relocations */ ++ RELOC_NUMBER (R_AVR32_21S, 13) ++ RELOC_NUMBER (R_AVR32_16U, 14) ++ RELOC_NUMBER (R_AVR32_16S, 15) ++ RELOC_NUMBER (R_AVR32_8S, 16) ++ RELOC_NUMBER (R_AVR32_8S_EXT, 17) ++ ++ /* PC-Relative Code Relocations */ ++ RELOC_NUMBER (R_AVR32_22H_PCREL, 18) ++ RELOC_NUMBER (R_AVR32_18W_PCREL, 19) ++ RELOC_NUMBER (R_AVR32_16B_PCREL, 20) ++ RELOC_NUMBER (R_AVR32_16N_PCREL, 21) ++ RELOC_NUMBER (R_AVR32_14UW_PCREL, 22) ++ RELOC_NUMBER (R_AVR32_11H_PCREL, 23) ++ RELOC_NUMBER (R_AVR32_10UW_PCREL, 24) ++ RELOC_NUMBER (R_AVR32_9H_PCREL, 25) ++ RELOC_NUMBER (R_AVR32_9UW_PCREL, 26) ++ ++ /* Special Code Relocations */ ++ RELOC_NUMBER (R_AVR32_HI16, 27) ++ RELOC_NUMBER (R_AVR32_LO16, 28) ++ ++ /* PIC Relocations */ ++ RELOC_NUMBER (R_AVR32_GOTPC, 29) ++ RELOC_NUMBER (R_AVR32_GOTCALL, 30) ++ RELOC_NUMBER (R_AVR32_LDA_GOT, 31) ++ RELOC_NUMBER (R_AVR32_GOT21S, 32) ++ RELOC_NUMBER (R_AVR32_GOT18SW, 33) ++ RELOC_NUMBER (R_AVR32_GOT16S, 34) ++ RELOC_NUMBER (R_AVR32_GOT7UW, 35) ++ ++ /* Constant Pool Relocations */ ++ RELOC_NUMBER (R_AVR32_32_CPENT, 36) ++ RELOC_NUMBER (R_AVR32_CPCALL, 37) ++ RELOC_NUMBER (R_AVR32_16_CP, 38) ++ RELOC_NUMBER (R_AVR32_9W_CP, 39) ++ ++ /* Dynamic Relocations */ ++ RELOC_NUMBER (R_AVR32_RELATIVE, 40) ++ RELOC_NUMBER (R_AVR32_GLOB_DAT, 41) ++ RELOC_NUMBER (R_AVR32_JMP_SLOT, 42) ++ ++ /* Linkrelax Information */ ++ RELOC_NUMBER (R_AVR32_ALIGN, 43) ++END_RELOC_NUMBERS (R_AVR32_max) ++ ++/* Processor specific dynamic array tags. */ ++ ++/* The total size in bytes of the Global Offset Table */ ++#define DT_AVR32_GOTSZ 0x70000001 +diff -Nrup binutils-2.17/include/elf/common.h binutils-2.17.atmel.1.3.0/include/elf/common.h +--- binutils-2.17/include/elf/common.h 2006-02-17 15:36:26.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/include/elf/common.h 2007-03-26 10:20:17.000000000 +0200 +@@ -256,6 +256,9 @@ + /* V850 backend magic number. Written in the absense of an ABI. */ + #define EM_CYGNUS_V850 0x9080 + ++/* AVR32 magic number, picked by IAR Systems. */ ++#define EM_AVR32 0x18ad ++ + /* old S/390 backend magic number. Written in the absence of an ABI. */ + #define EM_S390_OLD 0xa390 + +diff -Nrup binutils-2.17/ld/configdoc.texi binutils-2.17.atmel.1.3.0/ld/configdoc.texi +--- binutils-2.17/ld/configdoc.texi 2006-05-10 15:43:46.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/configdoc.texi 2007-09-28 10:30:45.000000000 +0200 +@@ -6,6 +6,7 @@ + @set H8300 + @set I960 + @set ARM ++@set AVR32 + @set HPPA + @set MMIX + @set MSP430 +diff -Nrup binutils-2.17/ld/config.in binutils-2.17.atmel.1.3.0/ld/config.in +--- binutils-2.17/ld/config.in 2006-04-16 20:20:30.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/config.in 2007-03-26 10:32:23.000000000 +0200 +@@ -187,7 +187,7 @@ + + /* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be +- automatically deduced at run-time. ++ automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +@@ -215,8 +215,8 @@ + #undef inline + #endif + +-/* Define to `long' if does not define. */ ++/* Define to `long int' if does not define. */ + #undef off_t + +-/* Define to `unsigned' if does not define. */ ++/* Define to `unsigned int' if does not define. */ + #undef size_t +diff -Nrup binutils-2.17/ld/configure binutils-2.17.atmel.1.3.0/ld/configure +--- binutils-2.17/ld/configure 2006-04-11 12:36:26.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/configure 2007-03-26 10:32:22.000000000 +0200 +@@ -1,25 +1,54 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.59. ++# Generated by GNU Autoconf 2.61. + # +-# Copyright (C) 2003 Free Software Foundation, Inc. ++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + # This configure script is free software; the Free Software Foundation + # gives unlimited permission to copy, distribute and modify it. + ## --------------------- ## + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++ ++ ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -29,8 +58,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi ++ + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -44,18 +108,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -63,157 +128,388 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + ++# CDPATH. ++$as_unset CDPATH + +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits + +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh ++if test "x$CONFIG_SHELL" = x; then ++ if (eval ":") 2>/dev/null; then ++ as_have_required=yes ++else ++ as_have_required=no ++fi ++ ++ if test $as_have_required = yes && (eval ": ++(as_func_return () { ++ (exit \$1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. + fi + ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi + +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi + +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test \$exitcode = 0) || { (exit 1); exit 1; } ++ ++( ++ as_lineno_1=\$LINENO ++ as_lineno_2=\$LINENO ++ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && ++ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ++") 2> /dev/null; then ++ : ++else ++ as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH + do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in ++ case $as_dir in + /*) +- if ("$as_dir/$as_base" -c ' ++ for as_base in sh bash ksh sh5; do ++ as_candidate_shells="$as_candidate_shells $as_dir/$as_base" ++ done;; ++ esac ++done ++IFS=$as_save_IFS ++ ++ ++ for as_shell in $as_candidate_shells $SHELL; do ++ # Try only shells that exist, to save several forks. ++ if { test -f "$as_shell" || test -f "$as_shell.exe"; } && ++ { ("$as_shell") 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++: ++_ASEOF ++}; then ++ CONFIG_SHELL=$as_shell ++ as_have_required=yes ++ if { "$as_shell" 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++: ++(as_func_return () { ++ (exit $1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi ++ ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi ++ ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi ++ ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = "$1" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test $exitcode = 0) || { (exit 1); exit 1; } ++ ++( + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } ++ ++_ASEOF ++}; then ++ break ++fi ++ ++fi ++ ++ done ++ ++ if test "x$CONFIG_SHELL" != x; then ++ for as_var in BASH_ENV ENV ++ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++ done ++ export CONFIG_SHELL ++ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} ++fi ++ ++ ++ if test $as_have_required = no; then ++ echo This script requires a shell more modern than all the ++ echo shells that I found on your system. Please install a ++ echo modern shell, or manually run the script under such a ++ echo shell if you do have one. ++ { (exit 1); exit 1; } ++fi ++ ++ ++fi ++ ++fi ++ ++ ++ ++(eval "as_func_return () { ++ (exit \$1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi ++ ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi ++ ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi ++ ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test \$exitcode = 0") || { ++ echo No shell found that supports shell functions. ++ echo Please tell autoconf@gnu.org about your system, ++ echo including any error possibly output before this ++ echo message ++} ++ ++ ++ ++ as_lineno_1=$LINENO ++ as_lineno_2=$LINENO ++ test "x$as_lineno_1" != "x$as_lineno_2" && ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || ++ chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -222,7 +518,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -231,39 +548,27 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH + ++exec 7<&0 &1 + + # Name of the host. + # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, + # so uname gets run too. + ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +-exec 6>&1 +- + # + # Initializations. + # + ac_default_prefix=/usr/local ++ac_clean_files= + ac_config_libobj_dir=. ++LIBOBJS= + cross_compiling=no + subdirs= + MFLAGS= + MAKEFLAGS= + SHELL=${CONFIG_SHELL-/bin/sh} + +-# Maximum number of lines to put in a shell here document. +-# This variable seems obsolete. It should probably be removed, and +-# only ac_max_sed_lines should be used. +-: ${ac_max_here_lines=38} +- + # Identity of this package. + PACKAGE_NAME= + PACKAGE_TARNAME= +@@ -275,42 +580,191 @@ ac_unique_file="ldmain.c" + # Factoring default headers for most tests. + ac_includes_default="\ + #include +-#if HAVE_SYS_TYPES_H ++#ifdef HAVE_SYS_TYPES_H + # include + #endif +-#if HAVE_SYS_STAT_H ++#ifdef HAVE_SYS_STAT_H + # include + #endif +-#if STDC_HEADERS ++#ifdef STDC_HEADERS + # include + # include + #else +-# if HAVE_STDLIB_H ++# ifdef HAVE_STDLIB_H + # include + # endif + #endif +-#if HAVE_STRING_H +-# if !STDC_HEADERS && HAVE_MEMORY_H ++#ifdef HAVE_STRING_H ++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H + # include + # endif + # include + #endif +-#if HAVE_STRINGS_H ++#ifdef HAVE_STRINGS_H + # include + #endif +-#if HAVE_INTTYPES_H ++#ifdef HAVE_INTTYPES_H + # include +-#else +-# if HAVE_STDINT_H +-# include +-# endif + #endif +-#if HAVE_UNISTD_H ++#ifdef HAVE_STDINT_H ++# include ++#endif ++#ifdef HAVE_UNISTD_H + # include + #endif" + +-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL use_sysroot TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE WARN_CFLAGS NO_WERROR CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l YACC LEX LEXLIB LEX_OUTPUT_ROOT MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT HDEFINES HOSTING_CRT0 HOSTING_LIBS NATIVE_LIB_DIRS STRINGIFY EMUL EMULATION_OFILES EMUL_EXTRA_OFILES LIB_PATH EMULATION_LIBPATH TESTBFDLIB datarootdir docdir htmldir LIBOBJS LTLIBOBJS' ++ac_subst_vars='SHELL ++PATH_SEPARATOR ++PACKAGE_NAME ++PACKAGE_TARNAME ++PACKAGE_VERSION ++PACKAGE_STRING ++PACKAGE_BUGREPORT ++exec_prefix ++prefix ++program_transform_name ++bindir ++sbindir ++libexecdir ++datarootdir ++datadir ++sysconfdir ++sharedstatedir ++localstatedir ++includedir ++oldincludedir ++docdir ++infodir ++htmldir ++dvidir ++pdfdir ++psdir ++libdir ++localedir ++mandir ++DEFS ++ECHO_C ++ECHO_N ++ECHO_T ++LIBS ++build_alias ++host_alias ++target_alias ++build ++build_cpu ++build_vendor ++build_os ++host ++host_cpu ++host_vendor ++host_os ++target ++target_cpu ++target_vendor ++target_os ++CC ++CFLAGS ++LDFLAGS ++CPPFLAGS ++ac_ct_CC ++EXEEXT ++OBJEXT ++INSTALL_PROGRAM ++INSTALL_SCRIPT ++INSTALL_DATA ++CYGPATH_W ++PACKAGE ++VERSION ++ACLOCAL ++AUTOCONF ++AUTOMAKE ++AUTOHEADER ++MAKEINFO ++install_sh ++STRIP ++INSTALL_STRIP_PROGRAM ++mkdir_p ++AWK ++SET_MAKE ++am__leading_dot ++AMTAR ++am__tar ++am__untar ++DEPDIR ++am__include ++am__quote ++AMDEP_TRUE ++AMDEP_FALSE ++AMDEPBACKSLASH ++CCDEPMODE ++am__fastdepCC_TRUE ++am__fastdepCC_FALSE ++LN_S ++RANLIB ++LIBTOOL ++use_sysroot ++TARGET_SYSTEM_ROOT ++TARGET_SYSTEM_ROOT_DEFINE ++WARN_CFLAGS ++NO_WERROR ++CPP ++GREP ++EGREP ++ALLOCA ++USE_NLS ++MSGFMT ++GMSGFMT ++XGETTEXT ++USE_INCLUDED_LIBINTL ++CATALOGS ++CATOBJEXT ++DATADIRNAME ++GMOFILES ++INSTOBJEXT ++INTLDEPS ++INTLLIBS ++INTLOBJS ++POFILES ++POSUB ++INCLUDE_LOCALE_H ++GT_NO ++GT_YES ++MKINSTALLDIRS ++l ++YACC ++YFLAGS ++LEX ++LEX_OUTPUT_ROOT ++LEXLIB ++MAINTAINER_MODE_TRUE ++MAINTAINER_MODE_FALSE ++MAINT ++HDEFINES ++HOSTING_CRT0 ++HOSTING_LIBS ++NATIVE_LIB_DIRS ++STRINGIFY ++EMUL ++EMULATION_OFILES ++EMUL_EXTRA_OFILES ++LIB_PATH ++EMULATION_LIBPATH ++TESTBFDLIB ++LIBOBJS ++LTLIBOBJS' + ac_subst_files='TDIRS' ++ ac_precious_vars='build_alias ++host_alias ++target_alias ++CC ++CFLAGS ++LDFLAGS ++LIBS ++CPPFLAGS ++CPP ++YACC ++YFLAGS' ++ + + # Initialize some variables set by options. + ac_init_help= +@@ -337,34 +791,48 @@ x_libraries=NONE + # and all the variables that are supposed to be based on exec_prefix + # by default will actually change. + # Use braces instead of parens because sh, perl, etc. also accept them. ++# (The list follows the same order as the GNU Coding Standards.) + bindir='${exec_prefix}/bin' + sbindir='${exec_prefix}/sbin' + libexecdir='${exec_prefix}/libexec' +-datadir='${prefix}/share' ++datarootdir='${prefix}/share' ++datadir='${datarootdir}' + sysconfdir='${prefix}/etc' + sharedstatedir='${prefix}/com' + localstatedir='${prefix}/var' +-libdir='${exec_prefix}/lib' + includedir='${prefix}/include' + oldincludedir='/usr/include' +-infodir='${prefix}/info' +-mandir='${prefix}/man' ++docdir='${datarootdir}/doc/${PACKAGE}' ++infodir='${datarootdir}/info' ++htmldir='${docdir}' ++dvidir='${docdir}' ++pdfdir='${docdir}' ++psdir='${docdir}' ++libdir='${exec_prefix}/lib' ++localedir='${datarootdir}/locale' ++mandir='${datarootdir}/man' + + ac_prev= ++ac_dashdash= + for ac_option + do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then +- eval "$ac_prev=\$ac_option" ++ eval $ac_prev=\$ac_option + ac_prev= + continue + fi + +- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` ++ case $ac_option in ++ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; ++ *) ac_optarg=yes ;; ++ esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + +- case $ac_option in ++ case $ac_dashdash$ac_option in ++ --) ++ ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; +@@ -386,33 +854,45 @@ do + --config-cache | -C) + cache_file=config.cache ;; + +- -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ++ -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; +- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ +- | --da=*) ++ -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + ++ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ ++ | --dataroo | --dataro | --datar) ++ ac_prev=datarootdir ;; ++ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ ++ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) ++ datarootdir=$ac_optarg ;; ++ + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- eval "enable_$ac_feature=no" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=no ;; ++ ++ -docdir | --docdir | --docdi | --doc | --do) ++ ac_prev=docdir ;; ++ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) ++ docdir=$ac_optarg ;; ++ ++ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ++ ac_prev=dvidir ;; ++ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) ++ dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "enable_$ac_feature='$ac_optarg'" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ +@@ -439,6 +919,12 @@ do + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + ++ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ++ ac_prev=htmldir ;; ++ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ ++ | --ht=*) ++ htmldir=$ac_optarg ;; ++ + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; +@@ -463,13 +949,16 @@ do + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + ++ -localedir | --localedir | --localedi | --localed | --locale) ++ ac_prev=localedir ;; ++ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) ++ localedir=$ac_optarg ;; ++ + -localstatedir | --localstatedir | --localstatedi | --localstated \ +- | --localstate | --localstat | --localsta | --localst \ +- | --locals | --local | --loca | --loc | --lo) ++ | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ +- | --localstate=* | --localstat=* | --localsta=* | --localst=* \ +- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) ++ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) +@@ -534,6 +1023,16 @@ do + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + ++ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ++ ac_prev=pdfdir ;; ++ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) ++ pdfdir=$ac_optarg ;; ++ ++ -psdir | --psdir | --psdi | --psd | --ps) ++ ac_prev=psdir ;; ++ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) ++ psdir=$ac_optarg ;; ++ + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; +@@ -586,24 +1085,20 @@ do + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package| sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "with_$ac_package='$ac_optarg'" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package | sed 's/-/_/g'` +- eval "with_$ac_package=no" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. +@@ -634,8 +1129,7 @@ Try \`$0 --help' for more information." + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } +- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` +- eval "$ac_envvar='$ac_optarg'" ++ eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) +@@ -655,27 +1149,19 @@ if test -n "$ac_prev"; then + { (exit 1); exit 1; }; } + fi + +-# Be sure to have absolute paths. +-for ac_var in exec_prefix prefix ++# Be sure to have absolute directory names. ++for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ ++ datadir sysconfdir sharedstatedir localstatedir includedir \ ++ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ ++ libdir localedir mandir + do +- eval ac_val=$`echo $ac_var` ++ eval ac_val=\$$ac_var + case $ac_val in +- [\\/$]* | ?:[\\/]* | NONE | '' ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; +- esac +-done +- +-# Be sure to have absolute paths. +-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ +- localstatedir libdir includedir oldincludedir infodir mandir +-do +- eval ac_val=$`echo $ac_var` +- case $ac_val in +- [\\/$]* | ?:[\\/]* ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; ++ [\\/$]* | ?:[\\/]* ) continue;; ++ NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac ++ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 ++ { (exit 1); exit 1; }; } + done + + # There might be people who depend on the old broken behavior: `$host' +@@ -702,74 +1188,76 @@ test -n "$host_alias" && ac_tool_prefix= + test "$silent" = yes && exec 6>/dev/null + + ++ac_pwd=`pwd` && test -n "$ac_pwd" && ++ac_ls_di=`ls -di .` && ++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || ++ { echo "$as_me: error: Working directory cannot be determined" >&2 ++ { (exit 1); exit 1; }; } ++test "X$ac_ls_di" = "X$ac_pwd_ls_di" || ++ { echo "$as_me: error: pwd does not report name of working directory" >&2 ++ { (exit 1); exit 1; }; } ++ ++ + # Find the source files, if location was not specified. + if test -z "$srcdir"; then + ac_srcdir_defaulted=yes +- # Try the directory containing this script, then its parent. +- ac_confdir=`(dirname "$0") 2>/dev/null || ++ # Try the directory containing this script, then the parent directory. ++ ac_confdir=`$as_dirname -- "$0" || + $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X"$0" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + srcdir=$ac_confdir +- if test ! -r $srcdir/$ac_unique_file; then ++ if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi + else + ac_srcdir_defaulted=no + fi +-if test ! -r $srcdir/$ac_unique_file; then +- if test "$ac_srcdir_defaulted" = yes; then +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 +- { (exit 1); exit 1; }; } +- else +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 +- { (exit 1); exit 1; }; } +- fi +-fi +-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || +- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 +- { (exit 1); exit 1; }; } +-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +-ac_env_build_alias_set=${build_alias+set} +-ac_env_build_alias_value=$build_alias +-ac_cv_env_build_alias_set=${build_alias+set} +-ac_cv_env_build_alias_value=$build_alias +-ac_env_host_alias_set=${host_alias+set} +-ac_env_host_alias_value=$host_alias +-ac_cv_env_host_alias_set=${host_alias+set} +-ac_cv_env_host_alias_value=$host_alias +-ac_env_target_alias_set=${target_alias+set} +-ac_env_target_alias_value=$target_alias +-ac_cv_env_target_alias_set=${target_alias+set} +-ac_cv_env_target_alias_value=$target_alias +-ac_env_CC_set=${CC+set} +-ac_env_CC_value=$CC +-ac_cv_env_CC_set=${CC+set} +-ac_cv_env_CC_value=$CC +-ac_env_CFLAGS_set=${CFLAGS+set} +-ac_env_CFLAGS_value=$CFLAGS +-ac_cv_env_CFLAGS_set=${CFLAGS+set} +-ac_cv_env_CFLAGS_value=$CFLAGS +-ac_env_LDFLAGS_set=${LDFLAGS+set} +-ac_env_LDFLAGS_value=$LDFLAGS +-ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +-ac_cv_env_LDFLAGS_value=$LDFLAGS +-ac_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_env_CPPFLAGS_value=$CPPFLAGS +-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_cv_env_CPPFLAGS_value=$CPPFLAGS +-ac_env_CPP_set=${CPP+set} +-ac_env_CPP_value=$CPP +-ac_cv_env_CPP_set=${CPP+set} +-ac_cv_env_CPP_value=$CPP ++if test ! -r "$srcdir/$ac_unique_file"; then ++ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." ++ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 ++ { (exit 1); exit 1; }; } ++fi ++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ++ac_abs_confdir=`( ++ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 ++ { (exit 1); exit 1; }; } ++ pwd)` ++# When building in place, set srcdir=. ++if test "$ac_abs_confdir" = "$ac_pwd"; then ++ srcdir=. ++fi ++# Remove unnecessary trailing slashes from srcdir. ++# Double slashes in file names in object file debugging info ++# mess up M-x gdb in Emacs. ++case $srcdir in ++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; ++esac ++for ac_var in $ac_precious_vars; do ++ eval ac_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_env_${ac_var}_value=\$${ac_var} ++ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_cv_env_${ac_var}_value=\$${ac_var} ++done + + # + # Report the --help message. +@@ -798,9 +1286,6 @@ Configuration: + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +-_ACEOF +- +- cat <<_ACEOF + Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] +@@ -818,15 +1303,22 @@ Fine tuning of the installation director + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] +- --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] +- --infodir=DIR info documentation [PREFIX/info] +- --mandir=DIR man documentation [PREFIX/man] ++ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] ++ --datadir=DIR read-only architecture-independent data [DATAROOTDIR] ++ --infodir=DIR info documentation [DATAROOTDIR/info] ++ --localedir=DIR locale-dependent data [DATAROOTDIR/locale] ++ --mandir=DIR man documentation [DATAROOTDIR/man] ++ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] ++ --htmldir=DIR html documentation [DOCDIR] ++ --dvidir=DIR dvi documentation [DOCDIR] ++ --pdfdir=DIR pdf documentation [DOCDIR] ++ --psdir=DIR ps documentation [DOCDIR] + _ACEOF + + cat <<\_ACEOF +@@ -878,126 +1370,100 @@ Some influential environment variables: + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory +- CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have +- headers in a nonstandard directory ++ LIBS libraries to pass to the linker, e.g. -l ++ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if ++ you have headers in a nonstandard directory + CPP C preprocessor ++ YACC The `Yet Another C Compiler' implementation to use. Defaults to ++ the first program found out of: `bison -y', `byacc', `yacc'. ++ YFLAGS The list of arguments that will be passed by default to $YACC. ++ This script will default YFLAGS to the empty string to avoid a ++ default value of `-d' given by some make applications. + + Use these variables to override the choices made by `configure' or to help + it to find libraries and programs with nonstandard names/locations. + + _ACEOF ++ac_status=$? + fi + + if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. +- ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue +- test -d $ac_dir || continue ++ test -d "$ac_dir" || continue + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac +- +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac +- +- cd $ac_dir +- # Check for guested configure; otherwise get Cygnus style configure. +- if test -f $ac_srcdir/configure.gnu; then +- echo +- $SHELL $ac_srcdir/configure.gnu --help=recursive +- elif test -f $ac_srcdir/configure; then +- echo +- $SHELL $ac_srcdir/configure --help=recursive +- elif test -f $ac_srcdir/configure.ac || +- test -f $ac_srcdir/configure.in; then +- echo +- $ac_configure --help ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix ++ ++ cd "$ac_dir" || { ac_status=$?; continue; } ++ # Check for guested configure. ++ if test -f "$ac_srcdir/configure.gnu"; then ++ echo && ++ $SHELL "$ac_srcdir/configure.gnu" --help=recursive ++ elif test -f "$ac_srcdir/configure"; then ++ echo && ++ $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 +- fi +- cd $ac_popdir ++ fi || ac_status=$? ++ cd "$ac_pwd" || { ac_status=$?; break; } + done + fi + +-test -n "$ac_init_help" && exit 0 ++test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF ++configure ++generated by GNU Autoconf 2.61 + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + This configure script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it. + _ACEOF +- exit 0 ++ exit + fi +-exec 5>config.log +-cat >&5 <<_ACEOF ++cat >config.log <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + + It was created by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + + _ACEOF ++exec 5>>config.log + { + cat <<_ASUNAME + ## --------- ## +@@ -1016,7 +1482,7 @@ uname -v = `(uname -v) 2>/dev/null || ec + /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` + /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` + /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +-hostinfo = `(hostinfo) 2>/dev/null || echo unknown` ++/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` + /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` + /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` + /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +@@ -1030,6 +1496,7 @@ do + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" + done ++IFS=$as_save_IFS + + } >&5 + +@@ -1051,7 +1518,6 @@ _ACEOF + ac_configure_args= + ac_configure_args0= + ac_configure_args1= +-ac_sep= + ac_must_keep_next=false + for ac_pass in 1 2 + do +@@ -1062,7 +1528,7 @@ do + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ++ *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in +@@ -1084,9 +1550,7 @@ do + -* ) ac_must_keep_next=true ;; + esac + fi +- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" +- # Get rid of the leading space. +- ac_sep=" " ++ ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +@@ -1097,8 +1561,8 @@ $as_unset ac_configure_args1 || test "${ + # When interrupted or exit'd, cleanup temporary files, and complete + # config.log. We remove comments because anyway the quotes in there + # would cause problems or look ugly. +-# WARNING: Be sure not to use single quotes in there, as some shells, +-# such as our DU 5.0 friend, will then `close' the trap. ++# WARNING: Use '\'' to represent an apostrophe within the trap. ++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. + trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { +@@ -1111,20 +1575,34 @@ trap 'exit_status=$? + _ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done + (set) 2>&1 | +- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + sed -n \ +- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; +- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" +- ;; ++ "s/'\''/'\''\\\\'\'''\''/g; ++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ++ ;; #( + *) +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} ++ esac | ++ sort ++) + echo + + cat <<\_ASBOX +@@ -1135,22 +1613,28 @@ _ASBOX + echo + for ac_var in $ac_subst_vars + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +-## ------------- ## +-## Output files. ## +-## ------------- ## ++## ------------------- ## ++## File substitutions. ## ++## ------------------- ## + _ASBOX + echo + for ac_var in $ac_subst_files + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi +@@ -1162,26 +1646,24 @@ _ASBOX + ## ----------- ## + _ASBOX + echo +- sed "/^$/d" confdefs.h | sort ++ cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 +- rm -f core *.core && +- rm -rf conftest* confdefs* conf$$* $ac_clean_files && ++ rm -f core *.core core.conftest.* && ++ rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +- ' 0 ++' 0 + for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + done + ac_signal=0 + + # confdefs.h avoids OS command line length limits that DEFS can exceed. +-rm -rf conftest* confdefs.h +-# AIX cpp loses on an empty file, so make sure it contains at least a newline. +-echo >confdefs.h ++rm -f -r conftest* confdefs.h + + # Predefined preprocessor variables. + +@@ -1212,14 +1694,17 @@ _ACEOF + + # Let the site file select an alternate cache file if it wants to. + # Prefer explicitly selected file to automatically selected ones. +-if test -z "$CONFIG_SITE"; then +- if test "x$prefix" != xNONE; then +- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" +- else +- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" +- fi ++if test -n "$CONFIG_SITE"; then ++ set x "$CONFIG_SITE" ++elif test "x$prefix" != xNONE; then ++ set x "$prefix/share/config.site" "$prefix/etc/config.site" ++else ++ set x "$ac_default_prefix/share/config.site" \ ++ "$ac_default_prefix/etc/config.site" + fi +-for ac_site_file in $CONFIG_SITE; do ++shift ++for ac_site_file ++do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 + echo "$as_me: loading site script $ac_site_file" >&6;} +@@ -1235,8 +1720,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -1248,12 +1733,11 @@ fi + # Check that the precious variables saved in the cache have kept the same + # value. + ac_cache_corrupted=false +-for ac_var in `(set) 2>&1 | +- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do ++for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set +- eval ac_old_val="\$ac_cv_env_${ac_var}_value" +- eval ac_new_val="\$ac_env_${ac_var}_value" ++ eval ac_old_val=\$ac_cv_env_${ac_var}_value ++ eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +@@ -1278,8 +1762,7 @@ echo "$as_me: current value: $ac_new_v + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) +- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; ++ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in +@@ -1296,12 +1779,6 @@ echo "$as_me: error: run \`make distclea + { (exit 1); exit 1; }; } + fi + +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- + + + +@@ -1318,108 +1795,163 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + ac_aux_dir= +-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do +- if test -f $ac_dir/install-sh; then ++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do ++ if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break +- elif test -f $ac_dir/install.sh; then ++ elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break +- elif test -f $ac_dir/shtool; then ++ elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi + done + if test -z "$ac_aux_dir"; then +- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} ++ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 ++echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } + fi +-ac_config_guess="$SHELL $ac_aux_dir/config.guess" +-ac_config_sub="$SHELL $ac_aux_dir/config.sub" +-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. ++ ++# These three variables are undocumented and unsupported, ++# and are intended to be withdrawn in a future Autoconf release. ++# They can cause serious problems if a builder's source tree is in a directory ++# whose full name contains unusual characters. ++ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ++ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ++ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ++ + + # Make sure we can run config.sub. +-$ac_config_sub sun4 >/dev/null 2>&1 || +- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +-echo "$as_me: error: cannot run $ac_config_sub" >&2;} ++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || ++ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 ++echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +-echo "$as_me:$LINENO: checking build system type" >&5 +-echo $ECHO_N "checking build system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking build system type" >&5 ++echo $ECHO_N "checking build system type... $ECHO_C" >&6; } + if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_build_alias=$build_alias +-test -z "$ac_cv_build_alias" && +- ac_cv_build_alias=`$ac_config_guess` +-test -z "$ac_cv_build_alias" && ++ ac_build_alias=$build_alias ++test "x$ac_build_alias" = x && ++ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` ++test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 + echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} ++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + + fi +-echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +-echo "${ECHO_T}$ac_cv_build" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 ++echo "${ECHO_T}$ac_cv_build" >&6; } ++case $ac_cv_build in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 ++echo "$as_me: error: invalid value of canonical build" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + build=$ac_cv_build +-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_build ++shift ++build_cpu=$1 ++build_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++build_os=$* ++IFS=$ac_save_IFS ++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking host system type" >&5 +-echo $ECHO_N "checking host system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking host system type" >&5 ++echo $ECHO_N "checking host system type... $ECHO_C" >&6; } + if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_host_alias=$host_alias +-test -z "$ac_cv_host_alias" && +- ac_cv_host_alias=$ac_cv_build_alias +-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} ++ if test "x$host_alias" = x; then ++ ac_cv_host=$ac_cv_build ++else ++ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +-echo "${ECHO_T}$ac_cv_host" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 ++echo "${ECHO_T}$ac_cv_host" >&6; } ++case $ac_cv_host in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 ++echo "$as_me: error: invalid value of canonical host" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + host=$ac_cv_host +-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_host ++shift ++host_cpu=$1 ++host_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++host_os=$* ++IFS=$ac_save_IFS ++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking target system type" >&5 +-echo $ECHO_N "checking target system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking target system type" >&5 ++echo $ECHO_N "checking target system type... $ECHO_C" >&6; } + if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_target_alias=$target_alias +-test "x$ac_cv_target_alias" = "x" && +- ac_cv_target_alias=$ac_cv_host_alias +-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} ++ if test "x$target_alias" = x; then ++ ac_cv_target=$ac_cv_host ++else ++ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +-echo "${ECHO_T}$ac_cv_target" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 ++echo "${ECHO_T}$ac_cv_target" >&6; } ++case $ac_cv_target in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 ++echo "$as_me: error: invalid value of canonical target" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + target=$ac_cv_target +-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_target ++shift ++target_cpu=$1 ++target_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++target_os=$* ++IFS=$ac_save_IFS ++case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + + # The aliases save the names the user supplied, while $host etc. +@@ -1436,8 +1968,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1450,32 +1982,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1488,36 +2022,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1530,74 +2079,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1611,7 +2120,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -1622,6 +2131,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -1639,22 +2149,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1667,36 +2178,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1709,29 +2222,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -1744,21 +2273,35 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +@@ -1783,47 +2326,77 @@ ac_clean_files="$ac_clean_files a.out a. + # Try to create an executable without -o first, disregard a.out. + # It will help us diagnose broken compilers, and finding out an intuition + # of exeext. +-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 ++echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } + ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 +- (eval $ac_link_default) 2>&5 ++# ++# List of possible output files, starting from the most likely. ++# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) ++# only as a last resort. b.out is created by i960 compilers. ++ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' ++# ++# The IRIX 6 linker writes into existing files which may not be ++# executable, retaining their permissions. Remove them first so a ++# subsequent execution test works. ++ac_rmfiles= ++for ac_file in $ac_files ++do ++ case $ac_file in ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; ++ * ) ac_rmfiles="$ac_rmfiles $ac_file";; ++ esac ++done ++rm -f $ac_rmfiles ++ ++if { (ac_try="$ac_link_default" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- # Find the output, starting from the most likely. This scheme is +-# not robust to junk in `.', hence go to wildcards (a.*) only as a last +-# resort. +- +-# Be careful to initialize this variable, since it used to be cached. +-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +-ac_cv_exeext= +-# b.out is created by i960 compilers. +-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out ++ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. ++# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' ++# in a Makefile. We should not override ac_cv_exeext if it was cached, ++# so that the user can short-circuit this test for compilers unknown to ++# Autoconf. ++for ac_file in $ac_files '' + do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) +- ;; +- conftest.$ac_ext ) +- # This is the source file. ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) +- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- # FIXME: I believe we export ac_cv_exeext for Libtool, +- # but it would be cool to find out if it's true. Does anybody +- # maintain Libtool? --akim. +- export ac_cv_exeext ++ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; ++ then :; else ++ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` ++ fi ++ # We set ac_cv_exeext here because the later test for it is not ++ # safe: cross compilers may not add the suffix if given an `-o' ++ # argument, so we may need to know it at that point already. ++ # Even if this section looks crufty: it has the advantage of ++ # actually working. + break;; + * ) + break;; + esac + done ++test "$ac_cv_exeext" = no && ac_cv_exeext= ++ + else ++ ac_file='' ++fi ++ ++{ echo "$as_me:$LINENO: result: $ac_file" >&5 ++echo "${ECHO_T}$ac_file" >&6; } ++if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +@@ -1835,19 +2408,21 @@ See \`config.log' for more details." >&2 + fi + + ac_exeext=$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_file" >&5 +-echo "${ECHO_T}$ac_file" >&6 + +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 ++echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } + # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 + # If not cross compiling, check that we can run a simple program. + if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -1866,22 +2441,27 @@ See \`config.log' for more details." >&2 + fi + fi + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + + rm -f a.out a.exe conftest$ac_cv_exeext b.out + ac_clean_files=$ac_clean_files_save +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +-echo "$as_me:$LINENO: result: $cross_compiling" >&5 +-echo "${ECHO_T}$cross_compiling" >&6 +- +-echo "$as_me:$LINENO: checking for suffix of executables" >&5 +-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 ++echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } ++{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 ++echo "${ECHO_T}$cross_compiling" >&6; } ++ ++{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 ++echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +@@ -1892,9 +2472,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_l + for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- export ac_cv_exeext + break;; + * ) break;; + esac +@@ -1908,14 +2487,14 @@ See \`config.log' for more details." >&2 + fi + + rm -f conftest$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +-echo "${ECHO_T}$ac_cv_exeext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 ++echo "${ECHO_T}$ac_cv_exeext" >&6; } + + rm -f conftest.$ac_ext + EXEEXT=$ac_cv_exeext + ac_exeext=$EXEEXT +-echo "$as_me:$LINENO: checking for suffix of object files" >&5 +-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 ++echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } + if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1935,14 +2514,20 @@ main () + } + _ACEOF + rm -f conftest.o conftest.obj +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>&5 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do ++ for ac_file in conftest.o conftest.obj conftest.*; do ++ test -f "$ac_file" || continue; + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +@@ -1960,12 +2545,12 @@ fi + + rm -f conftest.$ac_cv_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +-echo "${ECHO_T}$ac_cv_objext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 ++echo "${ECHO_T}$ac_cv_objext" >&6; } + OBJEXT=$ac_cv_objext + ac_objext=$OBJEXT +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1988,50 +2573,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -2047,38 +2631,118 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no ++ ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } + if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS + elif test $ac_cv_prog_cc_g = yes; then +@@ -2094,12 +2758,12 @@ else + CFLAGS= + fi + fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_prog_cc_stdc=no ++ ac_cv_prog_cc_c89=no + ac_save_CC=$CC + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -2133,12 +2797,17 @@ static char *f (char * (*g) (char **, in + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get ++ as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ ++ that's true only with -std. */ + int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ + int test (int i, double x); + struct s1 {int (*f) (int a);}; + struct s2 {int (*f) (double a);}; +@@ -2153,335 +2822,144 @@ return f (e, argv, 0) != argv[0] || f + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" + do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext ++ ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest.$ac_ext conftest.$ac_objext ++rm -f conftest.$ac_ext + CC=$ac_save_CC + + fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; + *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + esac + +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. ++ ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++{ echo "$as_me:$LINENO: checking for library containing strerror" >&5 ++echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } ++if test "${ac_cv_search_strerror+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_func_search_save_LIBS=$LIBS + cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-$ac_declaration +-#include ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char strerror (); + int + main () + { +-exit (42); ++return strerror (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++for ac_lib in '' cposix; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_strerror=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-continue +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h +-fi +- +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_strerror+set}" = set; then ++ break + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +-echo "$as_me:$LINENO: checking for library containing strerror" >&5 +-echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 ++done + if test "${ac_cv_search_strerror+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_func_search_save_LIBS=$LIBS +-ac_cv_search_strerror=no +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="none required" +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_strerror" = no; then +- for ac_lib in cposix; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="-l$ac_lib" +-break ++ : + else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++ ac_cv_search_strerror=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 +-echo "${ECHO_T}$ac_cv_search_strerror" >&6 +-if test "$ac_cv_search_strerror" != no; then +- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 ++echo "${ECHO_T}$ac_cv_search_strerror" >&6; } ++ac_res=$ac_cv_search_strerror ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + +@@ -2501,8 +2979,8 @@ am__api_version="1.9" + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -2524,7 +3002,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -2543,21 +3021,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -2567,8 +3046,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR + + test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +-echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 ++echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } + # Just in case + sleep 1 + echo timestamp > conftest.file +@@ -2610,20 +3089,20 @@ echo "$as_me: error: newly created file + Check your system clock" >&2;} + { (exit 1); exit 1; }; } + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + test "$program_prefix" != NONE && +- program_transform_name="s,^,$program_prefix,;$program_transform_name" ++ program_transform_name="s&^&$program_prefix&;$program_transform_name" + # Use a double $ so make ignores it. + test "$program_suffix" != NONE && +- program_transform_name="s,\$,$program_suffix,;$program_transform_name" ++ program_transform_name="s&\$&$program_suffix&;$program_transform_name" + # Double any \ or $. echo might interpret backslashes. + # By default was `s,x,x', remove it if useless. + cat <<\_ACEOF >conftest.sed + s/[\\$]/&&/g;s/;s,x,x,$// + _ACEOF + program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +-rm conftest.sed ++rm -f conftest.sed + + # expand $ac_aux_dir to an absolute path + am_aux_dir=`cd $ac_aux_dir && pwd` +@@ -2675,8 +3154,8 @@ for ac_prog in gawk mawk nawk awk + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2689,54 +3168,57 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + AWK=$ac_cv_prog_AWK + if test -n "$AWK"; then +- echo "$as_me:$LINENO: result: $AWK" >&5 +-echo "${ECHO_T}$AWK" >&6 ++ { echo "$as_me:$LINENO: result: $AWK" >&5 ++echo "${ECHO_T}$AWK" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$AWK" && break + done + +-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 ++echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } ++set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` ++if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.make <<\_ACEOF ++SHELL = /bin/sh + all: +- @echo 'ac_maketemp="$(MAKE)"' ++ @echo '@@@%%%=$(MAKE)=@@@%%%' + _ACEOF + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. +-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +-if test -n "$ac_maketemp"; then +- eval ac_cv_prog_make_${ac_make}_set=yes +-else +- eval ac_cv_prog_make_${ac_make}_set=no +-fi ++case `${MAKE-make} -f conftest.make 2>/dev/null` in ++ *@@@%%%=?*=@@@%%%*) ++ eval ac_cv_prog_make_${ac_make}_set=yes;; ++ *) ++ eval ac_cv_prog_make_${ac_make}_set=no;; ++esac + rm -f conftest.make + fi +-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + SET_MAKE= + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" + fi + +@@ -2751,7 +3233,7 @@ rmdir .tst 2>/dev/null + + DEPDIR="${am__leading_dot}deps" + +- ac_config_commands="$ac_config_commands depfiles" ++ac_config_commands="$ac_config_commands depfiles" + + + am_make=${MAKE-make} +@@ -2761,8 +3243,8 @@ am__doit: + .PHONY: am__doit + END + # If we don't find an include directive, just comment out the code. +-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 ++echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } + am__include="#" + am__quote= + _am_result=none +@@ -2789,15 +3271,15 @@ if test "$am__include" = "#"; then + fi + + +-echo "$as_me:$LINENO: result: $_am_result" >&5 +-echo "${ECHO_T}$_am_result" >&6 ++{ echo "$as_me:$LINENO: result: $_am_result" >&5 ++echo "${ECHO_T}$_am_result" >&6; } + rm -f confinc confmf + +-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. ++# Check whether --enable-dependency-tracking was given. + if test "${enable_dependency_tracking+set}" = set; then +- enableval="$enable_dependency_tracking" ++ enableval=$enable_dependency_tracking; ++fi + +-fi; + if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +@@ -2872,8 +3354,8 @@ if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2886,32 +3368,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2924,27 +3408,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -2965,8 +3463,8 @@ am__tar='${AMTAR} chof - "$$tardir"'; am + + depcc="$CC" am_compiler_list= + +-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 ++echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } + if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3055,8 +3553,8 @@ else + fi + + fi +-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 ++echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } + CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + +@@ -3074,10 +3572,9 @@ fi + + + +-# Check whether --enable-shared or --disable-shared was given. ++# Check whether --enable-shared was given. + if test "${enable_shared+set}" = set; then +- enableval="$enable_shared" +- p=${PACKAGE-default} ++ enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; +@@ -3095,11 +3592,11 @@ no) enable_shared=no ;; + esac + else + enable_shared=yes +-fi; +-# Check whether --enable-static or --disable-static was given. ++fi ++ ++# Check whether --enable-static was given. + if test "${enable_static+set}" = set; then +- enableval="$enable_static" +- p=${PACKAGE-default} ++ enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; +@@ -3117,11 +3614,11 @@ no) enable_static=no ;; + esac + else + enable_static=yes +-fi; +-# Check whether --enable-fast-install or --disable-fast-install was given. ++fi ++ ++# Check whether --enable-fast-install was given. + if test "${enable_fast_install+set}" = set; then +- enableval="$enable_fast_install" +- p=${PACKAGE-default} ++ enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; +@@ -3139,20 +3636,21 @@ no) enable_fast_install=no ;; + esac + else + enable_fast_install=yes +-fi; ++fi ++ + +-# Check whether --with-gnu-ld or --without-gnu-ld was given. ++# Check whether --with-gnu-ld was given. + if test "${with_gnu_ld+set}" = set; then +- withval="$with_gnu_ld" +- test "$withval" = no || with_gnu_ld=yes ++ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes + else + with_gnu_ld=no +-fi; ++fi ++ + ac_prog=ld + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. +- echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 ++echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw +@@ -3181,11 +3679,11 @@ echo $ECHO_N "checking for ld used by GC + ;; + esac + elif test "$with_gnu_ld" = yes; then +- echo "$as_me:$LINENO: checking for GNU ld" >&5 +-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for GNU ld" >&5 ++echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } + else +- echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 ++echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } + fi + if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -3214,17 +3712,17 @@ fi + + LD="$lt_cv_path_LD" + if test -n "$LD"; then +- echo "$as_me:$LINENO: result: $LD" >&5 +-echo "${ECHO_T}$LD" >&6 ++ { echo "$as_me:$LINENO: result: $LD" >&5 ++echo "${ECHO_T}$LD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 + echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 ++echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } + if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3235,25 +3733,25 @@ else + lt_cv_prog_gnu_ld=no + fi + fi +-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 +-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 ++echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } + with_gnu_ld=$lt_cv_prog_gnu_ld + + +-echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 ++echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } + if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + lt_cv_ld_reload_flag='-r' + fi +-echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +-echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 ++echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } + reload_flag=$lt_cv_ld_reload_flag + test -n "$reload_flag" && reload_flag=" $reload_flag" + +-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 ++echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } + if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3288,22 +3786,22 @@ fi + fi + + NM="$lt_cv_path_NM" +-echo "$as_me:$LINENO: result: $NM" >&5 +-echo "${ECHO_T}$NM" >&6 ++{ echo "$as_me:$LINENO: result: $NM" >&5 ++echo "${ECHO_T}$NM" >&6; } + +-echo "$as_me:$LINENO: checking whether ln -s works" >&5 +-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 ++echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } + LN_S=$as_ln_s + if test "$LN_S" = "ln -s"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + else +- echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +-echo "${ECHO_T}no, using $LN_S" >&6 ++ { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 ++echo "${ECHO_T}no, using $LN_S" >&6; } + fi + +-echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 +-echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 ++echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6; } + if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3465,8 +3963,8 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + esac + + fi +-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 ++echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } + file_magic_cmd=$lt_cv_file_magic_cmd + deplibs_check_method=$lt_cv_deplibs_check_method + +@@ -3476,8 +3974,8 @@ deplibs_check_method=$lt_cv_deplibs_chec + # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + + # find the maximum length of command line arguments +-echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +-echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 ++echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } + if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3528,11 +4026,11 @@ else + fi + + if test -n "$lt_cv_sys_max_cmd_len" ; then +- echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +-echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 ++ { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 ++echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } + else +- echo "$as_me:$LINENO: result: none" >&5 +-echo "${ECHO_T}none" >&6 ++ { echo "$as_me:$LINENO: result: none" >&5 ++echo "${ECHO_T}none" >&6; } + fi + + +@@ -3540,8 +4038,8 @@ fi + case $deplibs_check_method in + file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then +- echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 ++echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3595,17 +4093,17 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then +- echo "$as_me:$LINENO: checking for file" >&5 +-echo $ECHO_N "checking for file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for file" >&5 ++echo $ECHO_N "checking for file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3659,11 +4157,11 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + else +@@ -3678,8 +4176,8 @@ esac + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3692,32 +4190,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3730,27 +4230,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -3758,8 +4272,8 @@ fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3772,32 +4286,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3810,27 +4326,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -3845,22 +4375,22 @@ test "$GCC" = yes && libtool_flags="$lib + test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + + +-# Check whether --enable-libtool-lock or --disable-libtool-lock was given. ++# Check whether --enable-libtool-lock was given. + if test "${enable_libtool_lock+set}" = set; then +- enableval="$enable_libtool_lock" ++ enableval=$enable_libtool_lock; ++fi + +-fi; + test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" + test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + + +-# Check whether --with-pic or --without-pic was given. ++# Check whether --with-pic was given. + if test "${with_pic+set}" = set; then +- withval="$with_pic" +- pic_mode="$withval" ++ withval=$with_pic; pic_mode="$withval" + else + pic_mode=default +-fi; ++fi ++ + test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" + test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" + +@@ -3869,7 +4399,7 @@ test x"$pic_mode" = xno && libtool_flags + case $host in + *-*-irix6*) + # Find out which ABI we are using. +- echo '#line 3872 "configure"' > conftest.$ac_ext ++ echo '#line 4402 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? +@@ -3974,13 +4504,12 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*li + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" +- echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 ++echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } + if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + +- + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -4003,35 +4532,32 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-lt_cv_cc_needs_belf=no ++ lt_cv_cc_needs_belf=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' +@@ -4040,8 +4566,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +-echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 ++echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" +@@ -4071,39 +4597,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done ++ + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -4129,8 +4674,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -4157,15 +4702,14 @@ exec 5>>./config.log + + + +-# Check whether --with-lib-path or --without-lib-path was given. ++# Check whether --with-lib-path was given. + if test "${with_lib_path+set}" = set; then +- withval="$with_lib_path" +- LIB_PATH=$withval +-fi; +-# Check whether --enable-targets or --disable-targets was given. ++ withval=$with_lib_path; LIB_PATH=$withval ++fi ++ ++# Check whether --enable-targets was given. + if test "${enable_targets+set}" = set; then +- enableval="$enable_targets" +- case "${enableval}" in ++ enableval=$enable_targets; case "${enableval}" in + yes | "") { { echo "$as_me:$LINENO: error: enable-targets option must specify target names or 'all'" >&5 + echo "$as_me: error: enable-targets option must specify target names or 'all'" >&2;} + { (exit 1); exit 1; }; } +@@ -4173,10 +4717,10 @@ echo "$as_me: error: enable-targets opti + no) enable_targets= ;; + *) enable_targets=$enableval ;; + esac +-fi; # Check whether --enable-64-bit-bfd or --disable-64-bit-bfd was given. ++fi ++# Check whether --enable-64-bit-bfd was given. + if test "${enable_64_bit_bfd+set}" = set; then +- enableval="$enable_64_bit_bfd" +- case "${enableval}" in ++ enableval=$enable_64_bit_bfd; case "${enableval}" in + yes) want64=true ;; + no) want64=false ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for 64-bit-bfd option" >&5 +@@ -4185,12 +4729,12 @@ echo "$as_me: error: bad value ${enablev + esac + else + want64=false +-fi; ++fi + +-# Check whether --with-sysroot or --without-sysroot was given. +-if test "${with_sysroot+set}" = set; then +- withval="$with_sysroot" + ++# Check whether --with-sysroot was given. ++if test "${with_sysroot+set}" = set; then ++ withval=$with_sysroot; + case ${with_sysroot} in + yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_alias}/sys-root' ;; + *) TARGET_SYSTEM_ROOT=$with_sysroot ;; +@@ -4222,7 +4766,8 @@ else + TARGET_SYSTEM_ROOT= + TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"\"' + +-fi; ++fi ++ + + + +@@ -4230,17 +4775,17 @@ fi; + + GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" + +-# Check whether --enable-werror or --disable-werror was given. ++# Check whether --enable-werror was given. + if test "${enable_werror+set}" = set; then +- enableval="$enable_werror" +- case "${enableval}" in ++ enableval=$enable_werror; case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-werror" >&5 + echo "$as_me: error: bad value ${enableval} for --enable-werror" >&2;} + { (exit 1); exit 1; }; } ;; + esac +-fi; ++fi ++ + + # Enable -Werror by default when using gcc + if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then +@@ -4257,10 +4802,9 @@ if test "${GCC}" = yes ; then + WARN_CFLAGS="${GCC_WARN_CFLAGS}" + fi + +-# Check whether --enable-build-warnings or --disable-build-warnings was given. ++# Check whether --enable-build-warnings was given. + if test "${enable_build_warnings+set}" = set; then +- enableval="$enable_build_warnings" +- case "${enableval}" in ++ enableval=$enable_build_warnings; case "${enableval}" in + yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; + no) if test "${GCC}" = yes ; then + WARN_CFLAGS="-w" +@@ -4271,7 +4815,8 @@ if test "${enable_build_warnings+set}" = + WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; + *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; + esac +-fi; ++fi ++ + + if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then + echo "Setting warning flags = $WARN_CFLAGS" 6>&1 +@@ -4281,7 +4826,7 @@ fi + + + +- ac_config_headers="$ac_config_headers config.h:config.in" ++ac_config_headers="$ac_config_headers config.h:config.in" + + + if test -z "$target" ; then +@@ -4305,8 +4850,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4319,32 +4864,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4357,36 +4904,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4399,74 +4961,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4480,7 +5002,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -4491,6 +5013,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -4508,22 +5031,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4536,36 +5060,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4578,29 +5104,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -4613,27 +5155,41 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4656,50 +5212,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -4715,59 +5270,139 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +-if test "$ac_test_CFLAGS" = set; then +- CFLAGS=$ac_save_CFLAGS +-elif test $ac_cv_prog_cc_g = yes; then +- if test "$GCC" = yes; then +- CFLAGS="-g -O2" +- else +- CFLAGS="-g" +- fi +-else +- if test "$GCC" = yes; then +- CFLAGS="-O2" +- else +- CFLAGS= +- fi +-fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_cv_prog_cc_stdc=no ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } ++if test "$ac_test_CFLAGS" = set; then ++ CFLAGS=$ac_save_CFLAGS ++elif test $ac_cv_prog_cc_g = yes; then ++ if test "$GCC" = yes; then ++ CFLAGS="-g -O2" ++ else ++ CFLAGS="-g" ++ fi ++else ++ if test "$GCC" = yes; then ++ CFLAGS="-O2" ++ else ++ CFLAGS= ++ fi ++fi ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_cv_prog_cc_c89=no + ac_save_CC=$CC + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -4801,12 +5436,17 @@ static char *f (char * (*g) (char **, in + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get ++ as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ ++ that's true only with -std. */ + int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ + int test (int i, double x); + struct s1 {int (*f) (int a);}; + struct s2 {int (*f) (double a);}; +@@ -4821,205 +5461,57 @@ return f (e, argv, 0) != argv[0] || f + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" + do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext ++ ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest.$ac_ext conftest.$ac_objext ++rm -f conftest.$ac_ext + CC=$ac_save_CC + + fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; + *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + esac + +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. +-cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-#include +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-continue +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h +-fi +- +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -5039,8 +5531,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -5062,7 +5554,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -5081,21 +5573,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -5110,8 +5603,8 @@ ALL_LINGUAS="fr sv tr es da vi zh_CN" + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5124,32 +5617,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5162,27 +5657,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -5192,8 +5701,8 @@ ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' + ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' + ac_compiler_gnu=$ac_cv_c_compiler_gnu +-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 ++echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } + # On Suns, sometimes $CPP names a directory. + if test -n "$CPP" && test -d "$CPP"; then + CPP= +@@ -5227,24 +5736,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5253,9 +5760,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi ++ + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5265,24 +5773,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5293,6 +5799,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi ++ + rm -f conftest.err conftest.$ac_ext + + done +@@ -5310,8 +5817,8 @@ fi + else + ac_cv_prog_CPP=$CPP + fi +-echo "$as_me:$LINENO: result: $CPP" >&5 +-echo "${ECHO_T}$CPP" >&6 ++{ echo "$as_me:$LINENO: result: $CPP" >&5 ++echo "${ECHO_T}$CPP" >&6; } + ac_preproc_ok=false + for ac_c_preproc_warn_flag in '' yes + do +@@ -5334,24 +5841,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5360,9 +5865,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi ++ + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5372,24 +5878,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5400,6 +5904,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi ++ + rm -f conftest.err conftest.$ac_ext + + done +@@ -5422,79 +5927,222 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +-echo "$as_me:$LINENO: checking for egrep" >&5 +-echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +-if test "${ac_cv_prog_egrep+set}" = set; then ++{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 ++echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } ++if test "${ac_cv_path_GREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ # Extract the first word of "grep ggrep" to use in msg output ++if test -z "$GREP"; then ++set dummy grep ggrep; ac_prog_name=$2 ++if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- if echo a | (grep -E '(a|b)') >/dev/null 2>&1 +- then ac_cv_prog_egrep='grep -E' +- else ac_cv_prog_egrep='egrep' ++ ac_path_GREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in grep ggrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue ++ # Check for GNU ac_path_GREP and select it if it is found. ++ # Check for GNU $ac_path_GREP ++case `"$ac_path_GREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'GREP' >> "conftest.nl" ++ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_GREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_GREP="$ac_path_GREP" ++ ac_path_GREP_max=$ac_count + fi +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +-echo "${ECHO_T}$ac_cv_prog_egrep" >&6 +- EGREP=$ac_cv_prog_egrep ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac + + +-echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +-if test "${ac_cv_header_stdc+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +-#include +-#include +-#include ++ $ac_path_GREP_found && break 3 ++ done ++done + +-int +-main () +-{ ++done ++IFS=$as_save_IFS + +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_header_stdc=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_header_stdc=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +-if test $ac_cv_header_stdc = yes; then +- # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +- cat >conftest.$ac_ext <<_ACEOF ++GREP="$ac_cv_path_GREP" ++if test -z "$GREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi ++ ++else ++ ac_cv_path_GREP=$GREP ++fi ++ ++ ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 ++echo "${ECHO_T}$ac_cv_path_GREP" >&6; } ++ GREP="$ac_cv_path_GREP" ++ ++ ++{ echo "$as_me:$LINENO: checking for egrep" >&5 ++echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } ++if test "${ac_cv_path_EGREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 ++ then ac_cv_path_EGREP="$GREP -E" ++ else ++ # Extract the first word of "egrep" to use in msg output ++if test -z "$EGREP"; then ++set dummy egrep; ac_prog_name=$2 ++if test "${ac_cv_path_EGREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_path_EGREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in egrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue ++ # Check for GNU ac_path_EGREP and select it if it is found. ++ # Check for GNU $ac_path_EGREP ++case `"$ac_path_EGREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'EGREP' >> "conftest.nl" ++ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_EGREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_EGREP="$ac_path_EGREP" ++ ac_path_EGREP_max=$ac_count ++ fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac ++ ++ ++ $ac_path_EGREP_found && break 3 ++ done ++done ++ ++done ++IFS=$as_save_IFS ++ ++ ++fi ++ ++EGREP="$ac_cv_path_EGREP" ++if test -z "$EGREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi ++ ++else ++ ac_cv_path_EGREP=$EGREP ++fi ++ ++ ++ fi ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 ++echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } ++ EGREP="$ac_cv_path_EGREP" ++ ++ ++{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 ++echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } ++if test "${ac_cv_header_stdc+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++#include ++#include ++#include ++#include ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_header_stdc=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_cv_header_stdc=no ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++if test $ac_cv_header_stdc = yes; then ++ # SunOS 4.x string.h does not declare mem*, contrary to ANSI. ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -5546,6 +6194,7 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include ++#include + #if ((' ' & 0x0FF) == 0x020) + # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') + # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +@@ -5565,18 +6214,27 @@ main () + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) +- exit(2); +- exit (0); ++ return 2; ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -5589,12 +6247,14 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_header_stdc=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +-echo "${ECHO_T}$ac_cv_header_stdc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 ++echo "${ECHO_T}$ac_cv_header_stdc" >&6; } + if test $ac_cv_header_stdc = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -5603,8 +6263,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 ++echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } + if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5622,10 +6282,10 @@ main () + #ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; +- const charset x; ++ const charset cs; + /* SunOS 4.1.1 cc rejects this. */ +- char const *const *ccp; +- char **p; ++ char const *const *pcpcc; ++ char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; +@@ -5634,16 +6294,17 @@ main () + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; +- ccp = &g + (g ? g-g : 0); ++ pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ +- ++ccp; +- p = (char**) ccp; +- ccp = (char const *const *) p; ++ ++pcpcc; ++ ppc = (char**) pcpcc; ++ pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; ++ if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; +@@ -5662,7 +6323,9 @@ main () + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; ++ if (!foo) return 0; + } ++ return !cs[0] && !zero.x; + #endif + + ; +@@ -5670,38 +6333,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_c_const=no ++ ac_cv_c_const=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +-echo "${ECHO_T}$ac_cv_c_const" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 ++echo "${ECHO_T}$ac_cv_c_const" >&6; } + if test $ac_cv_c_const = no; then + + cat >>confdefs.h <<\_ACEOF +@@ -5710,8 +6369,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for inline" >&5 +-echo $ECHO_N "checking for inline... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for inline" >&5 ++echo $ECHO_N "checking for inline... $ECHO_C" >&6; } + if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5731,39 +6390,37 @@ $ac_kw foo_t foo () {return 0; } + + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_c_inline=$ac_kw; break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_c_inline=$ac_kw + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ test "$ac_cv_c_inline" != no && break + done + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +-echo "${ECHO_T}$ac_cv_c_inline" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 ++echo "${ECHO_T}$ac_cv_c_inline" >&6; } + + + case $ac_cv_c_inline in +@@ -5795,9 +6452,9 @@ for ac_header in sys/types.h sys/stat.h + inttypes.h stdint.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -5811,38 +6468,35 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_Header=no" ++ eval "$as_ac_Header=no" + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +@@ -5853,8 +6507,8 @@ fi + done + + +-echo "$as_me:$LINENO: checking for off_t" >&5 +-echo $ECHO_N "checking for off_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for off_t" >&5 ++echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } + if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5865,62 +6519,59 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef off_t ac__type_new_; + int + main () + { +-if ((off_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (off_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_off_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_off_t=no ++ ac_cv_type_off_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +-echo "${ECHO_T}$ac_cv_type_off_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 ++echo "${ECHO_T}$ac_cv_type_off_t" >&6; } + if test $ac_cv_type_off_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define off_t long ++#define off_t long int + _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for size_t" >&5 +-echo $ECHO_N "checking for size_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for size_t" >&5 ++echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } + if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5931,64 +6582,61 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef size_t ac__type_new_; + int + main () + { +-if ((size_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (size_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_size_t=no ++ ac_cv_type_size_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +-echo "${ECHO_T}$ac_cv_type_size_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 ++echo "${ECHO_T}$ac_cv_type_size_t" >&6; } + if test $ac_cv_type_size_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define size_t unsigned ++#define size_t unsigned int + _ACEOF + + fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works + # for constant arguments. Useless! +-echo "$as_me:$LINENO: checking for working alloca.h" >&5 +-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 ++echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } + if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6003,44 +6651,42 @@ int + main () + { + char *p = (char *) alloca (2 * sizeof (int)); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_working_alloca_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_working_alloca_h=no ++ ac_cv_working_alloca_h=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +-echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 ++echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } + if test $ac_cv_working_alloca_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6049,8 +6695,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for alloca" >&5 +-echo $ECHO_N "checking for alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for alloca" >&5 ++echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } + if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6067,7 +6713,7 @@ cat >>conftest.$ac_ext <<_ACEOF + # include + # define alloca _alloca + # else +-# if HAVE_ALLOCA_H ++# ifdef HAVE_ALLOCA_H + # include + # else + # ifdef _AIX +@@ -6085,44 +6731,42 @@ int + main () + { + char *p = (char *) alloca (1); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_func_alloca_works=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_func_alloca_works=no ++ ac_cv_func_alloca_works=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +-echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 ++echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } + + if test $ac_cv_func_alloca_works = yes; then + +@@ -6136,15 +6780,15 @@ else + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + +-ALLOCA=alloca.$ac_objext ++ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + + cat >>confdefs.h <<\_ACEOF + #define C_ALLOCA 1 + _ACEOF + + +-echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +-echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 ++echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } + if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6154,7 +6798,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#if defined(CRAY) && ! defined(CRAY2) ++#if defined CRAY && ! defined CRAY2 + webecray + #else + wenotbecray +@@ -6170,14 +6814,14 @@ fi + rm -f conftest* + + fi +-echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +-echo "${ECHO_T}$ac_cv_os_cray" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 ++echo "${ECHO_T}$ac_cv_os_cray" >&6; } + if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6203,68 +6847,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -6277,8 +6913,8 @@ fi + done + fi + +-echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +-echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 ++echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } + if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6291,6 +6927,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ ++$ac_includes_default + int + find_stack_direction () + { +@@ -6308,17 +6945,26 @@ find_stack_direction () + int + main () + { +- exit (find_stack_direction () < 0); ++ return find_stack_direction () < 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6331,11 +6977,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_c_stack_direction=-1 + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +-echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 ++echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } + + cat >>confdefs.h <<_ACEOF + #define STACK_DIRECTION $ac_cv_c_stack_direction +@@ -6349,18 +6997,19 @@ fi + for ac_header in stdlib.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6371,41 +7020,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6414,24 +7059,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -6439,9 +7082,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -6465,25 +7109,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -6499,9 +7137,9 @@ done + for ac_func in getpagesize + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6527,68 +7165,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -6597,8 +7227,8 @@ _ACEOF + fi + done + +-echo "$as_me:$LINENO: checking for working mmap" >&5 +-echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working mmap" >&5 ++echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } + if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6640,21 +7270,21 @@ $ac_includes_default + #include + #include + +-#if !STDC_HEADERS && !HAVE_STDLIB_H ++#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H + char *malloc (); + #endif + + /* This mess was copied from the GNU getpagesize.h. */ +-#if !HAVE_GETPAGESIZE ++#ifndef HAVE_GETPAGESIZE + /* Assume that all systems that can run configure have sys/param.h. */ +-# if !HAVE_SYS_PARAM_H ++# ifndef HAVE_SYS_PARAM_H + # define HAVE_SYS_PARAM_H 1 + # endif + + # ifdef _SC_PAGESIZE + # define getpagesize() sysconf(_SC_PAGESIZE) + # else /* no _SC_PAGESIZE */ +-# if HAVE_SYS_PARAM_H ++# ifdef HAVE_SYS_PARAM_H + # include + # ifdef EXEC_PAGESIZE + # define getpagesize() EXEC_PAGESIZE +@@ -6693,15 +7323,15 @@ main () + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) +- exit (1); ++ return 1; + if (write (fd, data, pagesize) != pagesize) +- exit (1); ++ return 1; + close (fd); + + /* Next, try to mmap the file at a fixed address which already has +@@ -6709,17 +7339,17 @@ main () + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) +- exit (1); ++ return 1; + data2 = (char *) malloc (2 * pagesize); + if (!data2) +- exit (1); +- data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); ++ return 1; ++ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) +- exit (1); ++ return 1; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on +@@ -6728,24 +7358,33 @@ main () + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) +- exit (1); ++ return 1; + if (read (fd, data3, pagesize) != pagesize) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) +- exit (1); ++ return 1; + close (fd); +- exit (0); ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6758,11 +7397,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_func_mmap_fixed_mapped=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +-echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 ++echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } + if test $ac_cv_func_mmap_fixed_mapped = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6786,18 +7427,19 @@ for ac_header in argz.h limits.h locale. + unistd.h values.h sys/param.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6808,41 +7450,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6851,24 +7489,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -6876,9 +7512,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -6902,25 +7539,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -6946,9 +7577,9 @@ for ac_func in getcwd munmap putenv sete + __argz_count __argz_stringify __argz_next + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6974,68 +7605,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7050,9 +7673,9 @@ done + for ac_func in stpcpy + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7078,68 +7701,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7158,8 +7773,8 @@ _ACEOF + fi + + if test $ac_cv_header_locale_h = yes; then +- echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 +-echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 ++echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; } + if test "${am_cv_val_LC_MESSAGES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7179,39 +7794,36 @@ return LC_MESSAGES + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + am_cv_val_LC_MESSAGES=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-am_cv_val_LC_MESSAGES=no ++ am_cv_val_LC_MESSAGES=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 +-echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 ++echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; } + if test $am_cv_val_LC_MESSAGES = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -7220,34 +7832,34 @@ _ACEOF + + fi + fi +- echo "$as_me:$LINENO: checking whether NLS is requested" >&5 +-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 +- # Check whether --enable-nls or --disable-nls was given. ++ { echo "$as_me:$LINENO: checking whether NLS is requested" >&5 ++echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; } ++ # Check whether --enable-nls was given. + if test "${enable_nls+set}" = set; then +- enableval="$enable_nls" +- USE_NLS=$enableval ++ enableval=$enable_nls; USE_NLS=$enableval + else + USE_NLS=yes +-fi; +- echo "$as_me:$LINENO: result: $USE_NLS" >&5 +-echo "${ECHO_T}$USE_NLS" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $USE_NLS" >&5 ++echo "${ECHO_T}$USE_NLS" >&6; } + + + USE_INCLUDED_LIBINTL=no + + if test "$USE_NLS" = "yes"; then +- echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 +-echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 ++echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; } + +-# Check whether --with-included-gettext or --without-included-gettext was given. ++# Check whether --with-included-gettext was given. + if test "${with_included_gettext+set}" = set; then +- withval="$with_included_gettext" +- nls_cv_force_use_gnu_gettext=$withval ++ withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval + else + nls_cv_force_use_gnu_gettext=no +-fi; +- echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 +-echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 ++echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; } + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then +@@ -7256,17 +7868,17 @@ echo "${ECHO_T}$nls_cv_force_use_gnu_get + CATOBJEXT= + + if test "${ac_cv_header_libintl_h+set}" = set; then +- echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking libintl.h usability" >&5 +-echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h usability" >&5 ++echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7277,41 +7889,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking libintl.h presence" >&5 +-echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h presence" >&5 ++echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7320,24 +7928,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -7345,9 +7951,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -7371,30 +7978,23 @@ echo "$as_me: WARNING: libintl.h: se + echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_libintl_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + + fi + if test $ac_cv_header_libintl_h = yes; then +- echo "$as_me:$LINENO: checking for gettext in libc" >&5 +-echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libc" >&5 ++echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7414,43 +8014,40 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libc=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libc=no ++ gt_cv_func_gettext_libc=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6; } + + if test "$gt_cv_func_gettext_libc" != "yes"; then +- echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 +-echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 ++echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6; } + if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7463,59 +8060,56 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char bindtextdomain (); + int + main () + { +-bindtextdomain (); ++return bindtextdomain (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_lib_intl_bindtextdomain=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_intl_bindtextdomain=no ++ ac_cv_lib_intl_bindtextdomain=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$ac_check_lib_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 +-echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 ++echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6; } + if test $ac_cv_lib_intl_bindtextdomain = yes; then +- echo "$as_me:$LINENO: checking for gettext in libintl" >&5 +-echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libintl" >&5 ++echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libintl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7535,39 +8129,36 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libintl=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libintl=no ++ gt_cv_func_gettext_libintl=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6; } + fi + + fi +@@ -7581,8 +8172,8 @@ _ACEOF + + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7608,20 +8199,20 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + if test "$MSGFMT" != "no"; then + + for ac_func in dcgettext + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7647,68 +8238,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7719,8 +8302,8 @@ done + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7735,32 +8318,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7786,11 +8370,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + cat >conftest.$ac_ext <<_ACEOF +@@ -7810,37 +8394,34 @@ extern int _nl_msg_cat_cntr; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + CATOBJEXT=.gmo + DATADIRNAME=share + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-CATOBJEXT=.mo ++ CATOBJEXT=.mo + DATADIRNAME=lib + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + INSTOBJEXT=.mo + fi +@@ -7862,8 +8443,8 @@ fi + INTLOBJS="\$(GETTOBJS)" + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7889,17 +8470,17 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7914,32 +8495,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7965,11 +8547,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + +@@ -7988,8 +8570,8 @@ fi + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else +- echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 +-echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6 ++ { echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 ++echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6; } + XGETTEXT=":" + fi + fi +@@ -8038,8 +8620,8 @@ _ACEOF + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else +- echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 +-echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 ++echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6; } + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in +@@ -8047,8 +8629,8 @@ echo $ECHO_N "checking for catalogs to b + esac + done + LINGUAS=$NEW_LINGUAS +- echo "$as_me:$LINENO: result: $LINGUAS" >&5 +-echo "${ECHO_T}$LINGUAS" >&6 ++ { echo "$as_me:$LINENO: result: $LINGUAS" >&5 ++echo "${ECHO_T}$LINGUAS" >&6; } + fi + + if test -n "$LINGUAS"; then +@@ -8067,17 +8649,17 @@ echo "${ECHO_T}$LINGUAS" >&6 + if test -f $srcdir/po2tbl.sed.in; then + if test "$CATOBJEXT" = ".cat"; then + if test "${ac_cv_header_linux_version_h+set}" = set; then +- echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking linux/version.h usability" >&5 +-echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h usability" >&5 ++echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8088,41 +8670,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking linux/version.h presence" >&5 +-echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h presence" >&5 ++echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8131,24 +8709,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -8156,9 +8732,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -8182,25 +8759,18 @@ echo "$as_me: WARNING: linux/version.h: + echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/version.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: linux/version.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_linux_version_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + + fi + if test $ac_cv_header_linux_version_h = yes; then +@@ -8256,8 +8826,8 @@ for ac_prog in 'bison -y' byacc + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_YACC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8270,25 +8840,27 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_YACC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + YACC=$ac_cv_prog_YACC + if test -n "$YACC"; then +- echo "$as_me:$LINENO: result: $YACC" >&5 +-echo "${ECHO_T}$YACC" >&6 ++ { echo "$as_me:$LINENO: result: $YACC" >&5 ++echo "${ECHO_T}$YACC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$YACC" && break + done + test -n "$YACC" || YACC="yacc" +@@ -8297,8 +8869,8 @@ for ac_prog in flex lex + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_LEX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8311,253 +8883,182 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LEX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + LEX=$ac_cv_prog_LEX + if test -n "$LEX"; then +- echo "$as_me:$LINENO: result: $LEX" >&5 +-echo "${ECHO_T}$LEX" >&6 ++ { echo "$as_me:$LINENO: result: $LEX" >&5 ++echo "${ECHO_T}$LEX" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$LEX" && break + done + test -n "$LEX" || LEX=":" + +-if test -z "$LEXLIB" +-then +- echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 +-echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 +-if test "${ac_cv_lib_fl_yywrap+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-lfl $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" ++if test "x$LEX" != "x:"; then ++ cat >conftest.l <<_ACEOF ++%% ++a { ECHO; } ++b { REJECT; } ++c { yymore (); } ++d { yyless (1); } ++e { yyless (input () != 0); } ++f { unput (yytext[0]); } ++. { BEGIN INITIAL; } ++%% ++#ifdef YYTEXT_POINTER ++extern char *yytext; + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char yywrap (); + int +-main () ++main (void) + { +-yywrap (); +- ; +- return 0; ++ return ! yylex () + ! yywrap (); + } + _ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++{ (ac_try="$LEX conftest.l" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$LEX conftest.l") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_lib_fl_yywrap=yes ++ (exit $ac_status); } ++{ echo "$as_me:$LINENO: checking lex output file root" >&5 ++echo $ECHO_N "checking lex output file root... $ECHO_C" >&6; } ++if test "${ac_cv_prog_lex_root+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_fl_yywrap=no ++if test -f lex.yy.c; then ++ ac_cv_prog_lex_root=lex.yy ++elif test -f lexyy.c; then ++ ac_cv_prog_lex_root=lexyy ++else ++ { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 ++echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} ++ { (exit 1); exit 1; }; } + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 +-echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 +-if test $ac_cv_lib_fl_yywrap = yes; then +- LEXLIB="-lfl" +-else +- echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 +-echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 +-if test "${ac_cv_lib_l_yywrap+set}" = set; then ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 ++echo "${ECHO_T}$ac_cv_prog_lex_root" >&6; } ++LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root ++ ++if test -z "${LEXLIB+set}"; then ++ { echo "$as_me:$LINENO: checking lex library" >&5 ++echo $ECHO_N "checking lex library... $ECHO_C" >&6; } ++if test "${ac_cv_lib_lex+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-ll $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char yywrap (); +-int +-main () +-{ +-yywrap (); +- ; +- return 0; +-} ++ ac_save_LIBS=$LIBS ++ ac_cv_lib_lex='none needed' ++ for ac_lib in '' -lfl -ll; do ++ LIBS="$ac_lib $ac_save_LIBS" ++ cat >conftest.$ac_ext <<_ACEOF ++`cat $LEX_OUTPUT_ROOT.c` + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_lib_l_yywrap=yes ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_lib_lex=$ac_lib + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_l_yywrap=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS +-fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 +-echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 +-if test $ac_cv_lib_l_yywrap = yes; then +- LEXLIB="-ll" +-fi + + fi + +-fi ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext conftest.$ac_ext ++ test "$ac_cv_lib_lex" != 'none needed' && break ++ done ++ LIBS=$ac_save_LIBS + +-if test "x$LEX" != "x:"; then +- echo "$as_me:$LINENO: checking lex output file root" >&5 +-echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 +-if test "${ac_cv_prog_lex_root+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- # The minimal lex program is just a single line: %%. But some broken lexes +-# (Solaris, I think it was) want two %% lines, so accommodate them. +-cat >conftest.l <<_ACEOF +-%% +-%% +-_ACEOF +-{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 +- (eval $LEX conftest.l) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } +-if test -f lex.yy.c; then +- ac_cv_prog_lex_root=lex.yy +-elif test -f lexyy.c; then +- ac_cv_prog_lex_root=lexyy +-else +- { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 +-echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} +- { (exit 1); exit 1; }; } + fi ++{ echo "$as_me:$LINENO: result: $ac_cv_lib_lex" >&5 ++echo "${ECHO_T}$ac_cv_lib_lex" >&6; } ++ test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 +-echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 +-rm -f conftest.l +-LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root + +-echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 +-echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 ++ ++{ echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 ++echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6; } + if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + # POSIX says lex can declare yytext either as a pointer or an array; the +-# default is implementation-dependent. Figure out which it is, since ++# default is implementation-dependent. Figure out which it is, since + # not all implementations provide the %pointer and %array declarations. + ac_cv_prog_lex_yytext_pointer=no +-echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c + ac_save_LIBS=$LIBS +-LIBS="$LIBS $LEXLIB" ++LIBS="$LEXLIB $ac_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF ++#define YYTEXT_POINTER 1 + `cat $LEX_OUTPUT_ROOT.c` + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_prog_lex_yytext_pointer=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$ac_save_LIBS +-rm -f "${LEX_OUTPUT_ROOT}.c" + + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 +-echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 ++echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6; } + if test $ac_cv_prog_lex_yytext_pointer = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -8565,23 +9066,24 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi ++rm -f conftest.l $LEX_OUTPUT_ROOT.c + + fi + if test "$LEX" = :; then + LEX=${am_missing_run}flex + fi + +-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 +- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. ++{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 ++echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } ++ # Check whether --enable-maintainer-mode was given. + if test "${enable_maintainer_mode+set}" = set; then +- enableval="$enable_maintainer_mode" +- USE_MAINTAINER_MODE=$enableval ++ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval + else + USE_MAINTAINER_MODE=no +-fi; +- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 ++echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } + + + if test $USE_MAINTAINER_MODE = yes; then +@@ -8611,18 +9113,19 @@ fi + for ac_header in string.h strings.h stdlib.h unistd.h elf-hints.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8633,41 +9136,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8676,24 +9175,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -8701,9 +9198,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -8727,25 +9225,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -8763,9 +9255,9 @@ done + for ac_func in sbrk realpath glob + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -8791,68 +9283,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -8869,9 +9353,9 @@ done + ac_header_dirent=no + for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 +-echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 ++echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -8893,38 +9377,35 @@ return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_Header=no" ++ eval "$as_ac_Header=no" + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +@@ -8936,13 +9417,12 @@ fi + done + # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. + if test $ac_header_dirent = dirent.h; then +- echo "$as_me:$LINENO: checking for library containing opendir" >&5 +-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for library containing opendir" >&5 ++echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } + if test "${ac_cv_search_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_func_search_save_LIBS=$LIBS +-ac_cv_search_opendir=no + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8950,126 +9430,83 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char opendir (); + int + main () + { +-opendir (); ++return opendir (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++for ac_lib in '' dir; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_opendir="none required" ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_opendir=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_opendir" = no; then +- for ac_lib in dir; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char opendir (); +-int +-main () +-{ +-opendir (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_opendir="-l$ac_lib" +-break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_opendir+set}" = set; then ++ break + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++done ++if test "${ac_cv_search_opendir+set}" = set; then ++ : ++else ++ ac_cv_search_opendir=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +-echo "${ECHO_T}$ac_cv_search_opendir" >&6 +-if test "$ac_cv_search_opendir" != no; then +- test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 ++echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ++ac_res=$ac_cv_search_opendir ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + + else +- echo "$as_me:$LINENO: checking for library containing opendir" >&5 +-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for library containing opendir" >&5 ++echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } + if test "${ac_cv_search_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_func_search_save_LIBS=$LIBS +-ac_cv_search_opendir=no + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -9077,123 +9514,81 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char opendir (); + int + main () + { +-opendir (); ++return opendir (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++for ac_lib in '' x; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_opendir="none required" ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_opendir=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_opendir" = no; then +- for ac_lib in x; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char opendir (); +-int +-main () +-{ +-opendir (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_opendir="-l$ac_lib" +-break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 ++fi + ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_opendir+set}" = set; then ++ break + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++done ++if test "${ac_cv_search_opendir+set}" = set; then ++ : ++else ++ ac_cv_search_opendir=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +-echo "${ECHO_T}$ac_cv_search_opendir" >&6 +-if test "$ac_cv_search_opendir" != no; then +- test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 ++echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ++ac_res=$ac_cv_search_opendir ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + + fi + + +-echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 +-echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 ++echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6; } + if test "${ld_cv_decl_getopt_unistd_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9213,39 +9608,35 @@ extern int getopt (int, char *const*, co + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ld_cv_decl_getopt_unistd_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ld_cv_decl_getopt_unistd_h=no ++ ld_cv_decl_getopt_unistd_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $ld_cv_decl_getopt_unistd_h" >&5 +-echo "${ECHO_T}$ld_cv_decl_getopt_unistd_h" >&6 ++{ echo "$as_me:$LINENO: result: $ld_cv_decl_getopt_unistd_h" >&5 ++echo "${ECHO_T}$ld_cv_decl_getopt_unistd_h" >&6; } + if test $ld_cv_decl_getopt_unistd_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -9264,8 +9655,8 @@ _ACEOF + ;; + esac + +-echo "$as_me:$LINENO: checking whether strstr is declared" >&5 +-echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether strstr is declared" >&5 ++echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_strstr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9280,7 +9671,7 @@ int + main () + { + #ifndef strstr +- char *p = (char *) strstr; ++ (void) strstr; + #endif + + ; +@@ -9288,38 +9679,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_strstr=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_strstr=no ++ ac_cv_have_decl_strstr=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6; } + if test $ac_cv_have_decl_strstr = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -9334,8 +9721,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether free is declared" >&5 +-echo $ECHO_N "checking whether free is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether free is declared" >&5 ++echo $ECHO_N "checking whether free is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_free+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9350,7 +9737,7 @@ int + main () + { + #ifndef free +- char *p = (char *) free; ++ (void) free; + #endif + + ; +@@ -9358,38 +9745,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_free=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_free=no ++ ac_cv_have_decl_free=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_free" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_free" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_free" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_free" >&6; } + if test $ac_cv_have_decl_free = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -9404,8 +9787,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 +-echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 ++echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_sbrk+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9420,7 +9803,7 @@ int + main () + { + #ifndef sbrk +- char *p = (char *) sbrk; ++ (void) sbrk; + #endif + + ; +@@ -9428,38 +9811,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_sbrk=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_sbrk=no ++ ac_cv_have_decl_sbrk=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6; } + if test $ac_cv_have_decl_sbrk = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -9474,8 +9853,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether getenv is declared" >&5 +-echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether getenv is declared" >&5 ++echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_getenv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9490,7 +9869,7 @@ int + main () + { + #ifndef getenv +- char *p = (char *) getenv; ++ (void) getenv; + #endif + + ; +@@ -9498,38 +9877,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_getenv=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_getenv=no ++ ac_cv_have_decl_getenv=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6; } + if test $ac_cv_have_decl_getenv = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -9544,8 +9919,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether environ is declared" >&5 +-echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether environ is declared" >&5 ++echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_environ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9560,7 +9935,7 @@ int + main () + { + #ifndef environ +- char *p = (char *) environ; ++ (void) environ; + #endif + + ; +@@ -9568,38 +9943,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_environ=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_environ=no ++ ac_cv_have_decl_environ=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_environ" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_environ" >&6; } + if test $ac_cv_have_decl_environ = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -9623,8 +9994,8 @@ fi + # broken Microsoft MSVC compiler, which limits the length of string + # constants, while still supporting pre-ANSI compilers which do not + # support string concatenation. +-echo "$as_me:$LINENO: checking whether ANSI C string concatenation works" >&5 +-echo $ECHO_N "checking whether ANSI C string concatenation works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether ANSI C string concatenation works" >&5 ++echo $ECHO_N "checking whether ANSI C string concatenation works... $ECHO_C" >&6; } + if test "${ld_cv_string_concatenation+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9644,39 +10015,35 @@ char *a = "a" "a"; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ld_cv_string_concatenation=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ld_cv_string_concatenation=no ++ ld_cv_string_concatenation=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $ld_cv_string_concatenation" >&5 +-echo "${ECHO_T}$ld_cv_string_concatenation" >&6 ++{ echo "$as_me:$LINENO: result: $ld_cv_string_concatenation" >&5 ++echo "${ECHO_T}$ld_cv_string_concatenation" >&6; } + if test "$ld_cv_string_concatenation" = "yes"; then + STRINGIFY=astring.sed + else +@@ -9801,8 +10168,10 @@ fi + + + +- ac_config_files="$ac_config_files Makefile po/Makefile.in:po/Make-in" +- ac_config_commands="$ac_config_commands default" ++ac_config_files="$ac_config_files Makefile po/Makefile.in:po/Make-in" ++ ++ac_config_commands="$ac_config_commands default" ++ + cat >confcache <<\_ACEOF + # This file is a shell script that caches the results of configure + # tests run on this system so they can be shared between configure +@@ -9821,39 +10190,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done ++ + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -9862,32 +10250,18 @@ test "x$prefix" = xNONE && prefix=$ac_de + # Let make expand exec_prefix. + test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +-# VPATH may cause trouble with some makes, so we remove $(srcdir), +-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +-# trailing colons and then remove the whole line if VPATH becomes empty +-# (actually we leave an empty line to preserve line numbers). +-if test "x$srcdir" = x.; then +- ac_vpsub='/^[ ]*VPATH[ ]*=/{ +-s/:*\$(srcdir):*/:/; +-s/:*\${srcdir}:*/:/; +-s/:*@srcdir@:*/:/; +-s/^\([^=]*=[ ]*\):*/\1/; +-s/:*$//; +-s/^[^=]*=[ ]*$//; +-}' +-fi +- + DEFS=-DHAVE_CONFIG_H + + ac_libobjs= + ac_ltlibobjs= + for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. +- ac_i=`echo "$ac_i" | +- sed 's/\$U\././;s/\.o$//;s/\.obj$//'` +- # 2. Add them. +- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" +- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' ++ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ++ ac_i=`echo "$ac_i" | sed "$ac_script"` ++ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR ++ # will be set to the directory where LIBOBJS objects are built. ++ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ++ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + done + LIBOBJS=$ac_libobjs + +@@ -9939,17 +10313,45 @@ cat >>$CONFIG_STATUS <<\_ACEOF + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++ ++ ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -9959,8 +10361,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi ++ + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -9974,18 +10411,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -9993,159 +10431,120 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- +- +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh +-fi ++# CDPATH. ++$as_unset CDPATH + + +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done + +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in +- /*) +- if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || +- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} ++ chmod +x "$as_me.lineno" || ++ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -10154,7 +10553,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -10163,31 +10583,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH +- + exec 6>&1 + +-# Open the log real soon, to keep \$[0] and so on meaningful, and to ++# Save the log message, to keep $[0] and so on meaningful, and to + # report actual input values of CONFIG_FILES etc. instead of their +-# values after options handling. Logging --version etc. is OK. +-exec 5>>config.log +-{ +- echo +- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +-## Running $as_me. ## +-_ASBOX +-} >&5 +-cat >&5 <<_CSEOF +- ++# values after options handling. ++ac_log=" + This file was extended by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS +@@ -10195,30 +10598,20 @@ generated by GNU Autoconf 2.59. Invocat + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +-_CSEOF +-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +-echo >&5 ++on `(hostname || uname -n) 2>/dev/null | sed 1q` ++" ++ + _ACEOF + ++cat >>$CONFIG_STATUS <<_ACEOF + # Files that config.status was made for. +-if test -n "$ac_config_files"; then +- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_headers"; then +- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_links"; then +- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +-fi ++config_files="$ac_config_files" ++config_headers="$ac_config_headers" ++config_commands="$ac_config_commands" + +-if test -n "$ac_config_commands"; then +- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +-fi ++_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +- + ac_cs_usage="\ + \`$as_me' instantiates files from templates according to the + current configuration. +@@ -10226,7 +10619,7 @@ current configuration. + Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit +- -V, --version print version number, then exit ++ -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions +@@ -10245,19 +10638,21 @@ Configuration commands: + $config_commands + + Report bugs to ." +-_ACEOF + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + ac_cs_version="\\ + config.status +-configured by $0, generated by GNU Autoconf 2.59, +- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" ++configured by $0, generated by GNU Autoconf 2.61, ++ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 2006 Free Software Foundation, Inc. + This config.status script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it." +-srcdir=$srcdir +-INSTALL="$INSTALL" ++ ++ac_pwd='$ac_pwd' ++srcdir='$srcdir' ++INSTALL='$INSTALL' + _ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +@@ -10268,39 +10663,24 @@ while test $# != 0 + do + case $1 in + --*=*) +- ac_option=`expr "x$1" : 'x\([^=]*\)='` +- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ++ ac_option=`expr "X$1" : 'X\([^=]*\)='` ++ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; +- -*) ++ *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; +- *) # This is not an option, so the user has probably given explicit +- # arguments. +- ac_option=$1 +- ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; +- --version | --vers* | -V ) +- echo "$ac_cs_version"; exit 0 ;; +- --he | --h) +- # Conflict between --help and --header +- { { echo "$as_me:$LINENO: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&2;} +- { (exit 1); exit 1; }; };; +- --help | --hel | -h ) +- echo "$ac_cs_usage"; exit 0 ;; +- --debug | --d* | -d ) ++ --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) ++ echo "$ac_cs_version"; exit ;; ++ --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift +@@ -10310,18 +10690,24 @@ Try \`$0 --help' for more information." + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; ++ --he | --h) ++ # Conflict between --help and --header ++ { echo "$as_me: error: ambiguous option: $1 ++Try \`$0 --help' for more information." >&2 ++ { (exit 1); exit 1; }; };; ++ --help | --hel | -h ) ++ echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. +- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&2;} ++ -*) { echo "$as_me: error: unrecognized option: $1 ++Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + +- *) ac_config_targets="$ac_config_targets $1" ;; ++ *) ac_config_targets="$ac_config_targets $1" ++ ac_need_defaults=false ;; + + esac + shift +@@ -10337,39 +10723,51 @@ fi + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + if \$ac_cs_recheck; then +- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 +- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion ++ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 ++ CONFIG_SHELL=$SHELL ++ export CONFIG_SHELL ++ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + fi + + _ACEOF ++cat >>$CONFIG_STATUS <<\_ACEOF ++exec 5>>config.log ++{ ++ echo ++ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ++## Running $as_me. ## ++_ASBOX ++ echo "$ac_log" ++} >&5 + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + # +-# INIT-COMMANDS section. ++# INIT-COMMANDS + # +- + AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + _ACEOF + +- +- + cat >>$CONFIG_STATUS <<\_ACEOF ++ ++# Handling of arguments. + for ac_config_target in $ac_config_targets + do +- case "$ac_config_target" in +- # Handling of arguments. +- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; +- "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; +- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; +- "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; +- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ case $ac_config_target in ++ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; ++ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; ++ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; ++ "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; ++ + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac + done + ++ + # If the user did not use the arguments to specify the items to instantiate, + # then the envvar interface is used. Set only those that are not. + # We use the long form for the default assignment because of an extremely +@@ -10381,640 +10779,634 @@ if $ac_need_defaults; then + fi + + # Have a temporary directory for convenience. Make it in the build tree +-# simply because there is no reason to put it here, and in addition, ++# simply because there is no reason against having it here, and in addition, + # creating and moving files from /tmp can sometimes cause problems. +-# Create a temporary directory, and hook for its removal unless debugging. ++# Hook for its removal unless debugging. ++# Note that there is a small window in which the directory will not be cleaned: ++# after its creation but before its name has been assigned to `$tmp'. + $debug || + { +- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 ++ tmp= ++ trap 'exit_status=$? ++ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ++' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 + } +- + # Create a (secure) tmp directory for tmp files. + + { +- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && ++ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" + } || + { +- tmp=./confstat$$-$RANDOM +- (umask 077 && mkdir $tmp) ++ tmp=./conf$$-$RANDOM ++ (umask 077 && mkdir "$tmp") + } || + { + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } + } + +-_ACEOF +- +-cat >>$CONFIG_STATUS <<_ACEOF +- + # +-# CONFIG_FILES section. ++# Set up the sed scripts for CONFIG_FILES section. + # + + # No need to generate the scripts if there are no CONFIG_FILES. + # This happens for instance when ./config.status config.h +-if test -n "\$CONFIG_FILES"; then +- # Protect against being on the right side of a sed subst in config.status. +- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; +- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +-s,@SHELL@,$SHELL,;t t +-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +-s,@exec_prefix@,$exec_prefix,;t t +-s,@prefix@,$prefix,;t t +-s,@program_transform_name@,$program_transform_name,;t t +-s,@bindir@,$bindir,;t t +-s,@sbindir@,$sbindir,;t t +-s,@libexecdir@,$libexecdir,;t t +-s,@datadir@,$datadir,;t t +-s,@sysconfdir@,$sysconfdir,;t t +-s,@sharedstatedir@,$sharedstatedir,;t t +-s,@localstatedir@,$localstatedir,;t t +-s,@libdir@,$libdir,;t t +-s,@includedir@,$includedir,;t t +-s,@oldincludedir@,$oldincludedir,;t t +-s,@infodir@,$infodir,;t t +-s,@mandir@,$mandir,;t t +-s,@build_alias@,$build_alias,;t t +-s,@host_alias@,$host_alias,;t t +-s,@target_alias@,$target_alias,;t t +-s,@DEFS@,$DEFS,;t t +-s,@ECHO_C@,$ECHO_C,;t t +-s,@ECHO_N@,$ECHO_N,;t t +-s,@ECHO_T@,$ECHO_T,;t t +-s,@LIBS@,$LIBS,;t t +-s,@build@,$build,;t t +-s,@build_cpu@,$build_cpu,;t t +-s,@build_vendor@,$build_vendor,;t t +-s,@build_os@,$build_os,;t t +-s,@host@,$host,;t t +-s,@host_cpu@,$host_cpu,;t t +-s,@host_vendor@,$host_vendor,;t t +-s,@host_os@,$host_os,;t t +-s,@target@,$target,;t t +-s,@target_cpu@,$target_cpu,;t t +-s,@target_vendor@,$target_vendor,;t t +-s,@target_os@,$target_os,;t t +-s,@CC@,$CC,;t t +-s,@CFLAGS@,$CFLAGS,;t t +-s,@LDFLAGS@,$LDFLAGS,;t t +-s,@CPPFLAGS@,$CPPFLAGS,;t t +-s,@ac_ct_CC@,$ac_ct_CC,;t t +-s,@EXEEXT@,$EXEEXT,;t t +-s,@OBJEXT@,$OBJEXT,;t t +-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +-s,@INSTALL_DATA@,$INSTALL_DATA,;t t +-s,@CYGPATH_W@,$CYGPATH_W,;t t +-s,@PACKAGE@,$PACKAGE,;t t +-s,@VERSION@,$VERSION,;t t +-s,@ACLOCAL@,$ACLOCAL,;t t +-s,@AUTOCONF@,$AUTOCONF,;t t +-s,@AUTOMAKE@,$AUTOMAKE,;t t +-s,@AUTOHEADER@,$AUTOHEADER,;t t +-s,@MAKEINFO@,$MAKEINFO,;t t +-s,@install_sh@,$install_sh,;t t +-s,@STRIP@,$STRIP,;t t +-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +-s,@mkdir_p@,$mkdir_p,;t t +-s,@AWK@,$AWK,;t t +-s,@SET_MAKE@,$SET_MAKE,;t t +-s,@am__leading_dot@,$am__leading_dot,;t t +-s,@AMTAR@,$AMTAR,;t t +-s,@am__tar@,$am__tar,;t t +-s,@am__untar@,$am__untar,;t t +-s,@DEPDIR@,$DEPDIR,;t t +-s,@am__include@,$am__include,;t t +-s,@am__quote@,$am__quote,;t t +-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +-s,@CCDEPMODE@,$CCDEPMODE,;t t +-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +-s,@LN_S@,$LN_S,;t t +-s,@RANLIB@,$RANLIB,;t t +-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +-s,@LIBTOOL@,$LIBTOOL,;t t +-s,@use_sysroot@,$use_sysroot,;t t +-s,@TARGET_SYSTEM_ROOT@,$TARGET_SYSTEM_ROOT,;t t +-s,@TARGET_SYSTEM_ROOT_DEFINE@,$TARGET_SYSTEM_ROOT_DEFINE,;t t +-s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t +-s,@NO_WERROR@,$NO_WERROR,;t t +-s,@CPP@,$CPP,;t t +-s,@EGREP@,$EGREP,;t t +-s,@ALLOCA@,$ALLOCA,;t t +-s,@USE_NLS@,$USE_NLS,;t t +-s,@MSGFMT@,$MSGFMT,;t t +-s,@GMSGFMT@,$GMSGFMT,;t t +-s,@XGETTEXT@,$XGETTEXT,;t t +-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t +-s,@CATALOGS@,$CATALOGS,;t t +-s,@CATOBJEXT@,$CATOBJEXT,;t t +-s,@DATADIRNAME@,$DATADIRNAME,;t t +-s,@GMOFILES@,$GMOFILES,;t t +-s,@INSTOBJEXT@,$INSTOBJEXT,;t t +-s,@INTLDEPS@,$INTLDEPS,;t t +-s,@INTLLIBS@,$INTLLIBS,;t t +-s,@INTLOBJS@,$INTLOBJS,;t t +-s,@POFILES@,$POFILES,;t t +-s,@POSUB@,$POSUB,;t t +-s,@INCLUDE_LOCALE_H@,$INCLUDE_LOCALE_H,;t t +-s,@GT_NO@,$GT_NO,;t t +-s,@GT_YES@,$GT_YES,;t t +-s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +-s,@l@,$l,;t t +-s,@YACC@,$YACC,;t t +-s,@LEX@,$LEX,;t t +-s,@LEXLIB@,$LEXLIB,;t t +-s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t +-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +-s,@MAINT@,$MAINT,;t t +-s,@HDEFINES@,$HDEFINES,;t t +-s,@HOSTING_CRT0@,$HOSTING_CRT0,;t t +-s,@HOSTING_LIBS@,$HOSTING_LIBS,;t t +-s,@NATIVE_LIB_DIRS@,$NATIVE_LIB_DIRS,;t t +-s,@STRINGIFY@,$STRINGIFY,;t t +-s,@EMUL@,$EMUL,;t t +-s,@EMULATION_OFILES@,$EMULATION_OFILES,;t t +-s,@EMUL_EXTRA_OFILES@,$EMUL_EXTRA_OFILES,;t t +-s,@LIB_PATH@,$LIB_PATH,;t t +-s,@EMULATION_LIBPATH@,$EMULATION_LIBPATH,;t t +-s,@TESTBFDLIB@,$TESTBFDLIB,;t t +-s,@datarootdir@,$datarootdir,;t t +-s,@docdir@,$docdir,;t t +-s,@htmldir@,$htmldir,;t t +-s,@LIBOBJS@,$LIBOBJS,;t t +-s,@LTLIBOBJS@,$LTLIBOBJS,;t t +-/@TDIRS@/r $TDIRS +-s,@TDIRS@,,;t t +-CEOF +- +-_ACEOF +- +- cat >>$CONFIG_STATUS <<\_ACEOF +- # Split the substitutions into bite-sized pieces for seds with +- # small command number limits, like on Digital OSF/1 and HP-UX. +- ac_max_sed_lines=48 +- ac_sed_frag=1 # Number of current file. +- ac_beg=1 # First line for current file. +- ac_end=$ac_max_sed_lines # Line after last line for current file. +- ac_more_lines=: +- ac_sed_cmds= +- while $ac_more_lines; do +- if test $ac_beg -gt 1; then +- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- else +- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- fi +- if test ! -s $tmp/subs.frag; then +- ac_more_lines=false +- else +- # The purpose of the label and of the branching condition is to +- # speed up the sed processing (if there are no `@' at all, there +- # is no need to browse any of the substitutions). +- # These are the two extra sed commands mentioned above. +- (echo ':t +- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" +- else +- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" +- fi +- ac_sed_frag=`expr $ac_sed_frag + 1` +- ac_beg=$ac_end +- ac_end=`expr $ac_end + $ac_max_sed_lines` +- fi +- done +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds=cat ++if test -n "$CONFIG_FILES"; then ++ ++_ACEOF ++ ++# Create sed commands to just substitute file output variables. ++ ++# Remaining file output variables are in a fragment that also has non-file ++# output varibles. ++ ++ ++ ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++SHELL!$SHELL$ac_delim ++PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim ++PACKAGE_NAME!$PACKAGE_NAME$ac_delim ++PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim ++PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim ++PACKAGE_STRING!$PACKAGE_STRING$ac_delim ++PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim ++exec_prefix!$exec_prefix$ac_delim ++prefix!$prefix$ac_delim ++program_transform_name!$program_transform_name$ac_delim ++bindir!$bindir$ac_delim ++sbindir!$sbindir$ac_delim ++libexecdir!$libexecdir$ac_delim ++datarootdir!$datarootdir$ac_delim ++datadir!$datadir$ac_delim ++sysconfdir!$sysconfdir$ac_delim ++sharedstatedir!$sharedstatedir$ac_delim ++localstatedir!$localstatedir$ac_delim ++includedir!$includedir$ac_delim ++oldincludedir!$oldincludedir$ac_delim ++docdir!$docdir$ac_delim ++infodir!$infodir$ac_delim ++htmldir!$htmldir$ac_delim ++dvidir!$dvidir$ac_delim ++pdfdir!$pdfdir$ac_delim ++psdir!$psdir$ac_delim ++libdir!$libdir$ac_delim ++localedir!$localedir$ac_delim ++mandir!$mandir$ac_delim ++DEFS!$DEFS$ac_delim ++ECHO_C!$ECHO_C$ac_delim ++ECHO_N!$ECHO_N$ac_delim ++ECHO_T!$ECHO_T$ac_delim ++LIBS!$LIBS$ac_delim ++build_alias!$build_alias$ac_delim ++host_alias!$host_alias$ac_delim ++target_alias!$target_alias$ac_delim ++build!$build$ac_delim ++build_cpu!$build_cpu$ac_delim ++build_vendor!$build_vendor$ac_delim ++build_os!$build_os$ac_delim ++host!$host$ac_delim ++host_cpu!$host_cpu$ac_delim ++host_vendor!$host_vendor$ac_delim ++host_os!$host_os$ac_delim ++target!$target$ac_delim ++target_cpu!$target_cpu$ac_delim ++target_vendor!$target_vendor$ac_delim ++target_os!$target_os$ac_delim ++CC!$CC$ac_delim ++CFLAGS!$CFLAGS$ac_delim ++LDFLAGS!$LDFLAGS$ac_delim ++CPPFLAGS!$CPPFLAGS$ac_delim ++ac_ct_CC!$ac_ct_CC$ac_delim ++EXEEXT!$EXEEXT$ac_delim ++OBJEXT!$OBJEXT$ac_delim ++INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim ++INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim ++INSTALL_DATA!$INSTALL_DATA$ac_delim ++CYGPATH_W!$CYGPATH_W$ac_delim ++PACKAGE!$PACKAGE$ac_delim ++VERSION!$VERSION$ac_delim ++ACLOCAL!$ACLOCAL$ac_delim ++AUTOCONF!$AUTOCONF$ac_delim ++AUTOMAKE!$AUTOMAKE$ac_delim ++AUTOHEADER!$AUTOHEADER$ac_delim ++MAKEINFO!$MAKEINFO$ac_delim ++install_sh!$install_sh$ac_delim ++STRIP!$STRIP$ac_delim ++INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim ++mkdir_p!$mkdir_p$ac_delim ++AWK!$AWK$ac_delim ++SET_MAKE!$SET_MAKE$ac_delim ++am__leading_dot!$am__leading_dot$ac_delim ++AMTAR!$AMTAR$ac_delim ++am__tar!$am__tar$ac_delim ++am__untar!$am__untar$ac_delim ++DEPDIR!$DEPDIR$ac_delim ++am__include!$am__include$ac_delim ++am__quote!$am__quote$ac_delim ++AMDEP_TRUE!$AMDEP_TRUE$ac_delim ++AMDEP_FALSE!$AMDEP_FALSE$ac_delim ++AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim ++CCDEPMODE!$CCDEPMODE$ac_delim ++am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim ++am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim ++LN_S!$LN_S$ac_delim ++RANLIB!$RANLIB$ac_delim ++LIBTOOL!$LIBTOOL$ac_delim ++use_sysroot!$use_sysroot$ac_delim ++TARGET_SYSTEM_ROOT!$TARGET_SYSTEM_ROOT$ac_delim ++TARGET_SYSTEM_ROOT_DEFINE!$TARGET_SYSTEM_ROOT_DEFINE$ac_delim ++WARN_CFLAGS!$WARN_CFLAGS$ac_delim ++NO_WERROR!$NO_WERROR$ac_delim ++_ACEOF ++ ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 94; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +-fi # test -n "$CONFIG_FILES" ++done ++ ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi ++ ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b ++/^[ ]*@TDIRS@[ ]*$/{ ++r $TDIRS ++d ++} ++_ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++CEOF$ac_eof ++_ACEOF ++ ++ ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++CPP!$CPP$ac_delim ++GREP!$GREP$ac_delim ++EGREP!$EGREP$ac_delim ++ALLOCA!$ALLOCA$ac_delim ++USE_NLS!$USE_NLS$ac_delim ++MSGFMT!$MSGFMT$ac_delim ++GMSGFMT!$GMSGFMT$ac_delim ++XGETTEXT!$XGETTEXT$ac_delim ++USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim ++CATALOGS!$CATALOGS$ac_delim ++CATOBJEXT!$CATOBJEXT$ac_delim ++DATADIRNAME!$DATADIRNAME$ac_delim ++GMOFILES!$GMOFILES$ac_delim ++INSTOBJEXT!$INSTOBJEXT$ac_delim ++INTLDEPS!$INTLDEPS$ac_delim ++INTLLIBS!$INTLLIBS$ac_delim ++INTLOBJS!$INTLOBJS$ac_delim ++POFILES!$POFILES$ac_delim ++POSUB!$POSUB$ac_delim ++INCLUDE_LOCALE_H!$INCLUDE_LOCALE_H$ac_delim ++GT_NO!$GT_NO$ac_delim ++GT_YES!$GT_YES$ac_delim ++MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim ++l!$l$ac_delim ++YACC!$YACC$ac_delim ++YFLAGS!$YFLAGS$ac_delim ++LEX!$LEX$ac_delim ++LEX_OUTPUT_ROOT!$LEX_OUTPUT_ROOT$ac_delim ++LEXLIB!$LEXLIB$ac_delim ++MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim ++MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim ++MAINT!$MAINT$ac_delim ++HDEFINES!$HDEFINES$ac_delim ++HOSTING_CRT0!$HOSTING_CRT0$ac_delim ++HOSTING_LIBS!$HOSTING_LIBS$ac_delim ++NATIVE_LIB_DIRS!$NATIVE_LIB_DIRS$ac_delim ++STRINGIFY!$STRINGIFY$ac_delim ++EMUL!$EMUL$ac_delim ++EMULATION_OFILES!$EMULATION_OFILES$ac_delim ++EMUL_EXTRA_OFILES!$EMUL_EXTRA_OFILES$ac_delim ++LIB_PATH!$LIB_PATH$ac_delim ++EMULATION_LIBPATH!$EMULATION_LIBPATH$ac_delim ++TESTBFDLIB!$TESTBFDLIB$ac_delim ++LIBOBJS!$LIBOBJS$ac_delim ++LTLIBOBJS!$LTLIBOBJS$ac_delim ++_ACEOF ++ ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 45; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " ++ fi ++done ++ ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi + ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end ++_ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++:end ++s/|#_!!_#|//g ++CEOF$ac_eof + _ACEOF ++ ++ ++# VPATH may cause trouble with some makes, so we remove $(srcdir), ++# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and ++# trailing colons and then remove the whole line if VPATH becomes empty ++# (actually we leave an empty line to preserve line numbers). ++if test "x$srcdir" = x.; then ++ ac_vpsub='/^[ ]*VPATH[ ]*=/{ ++s/:*\$(srcdir):*/:/ ++s/:*\${srcdir}:*/:/ ++s/:*@srcdir@:*/:/ ++s/^\([^=]*=[ ]*\):*/\1/ ++s/:*$// ++s/^[^=]*=[ ]*$// ++}' ++fi ++ + cat >>$CONFIG_STATUS <<\_ACEOF +-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". +- case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++fi # test -n "$CONFIG_FILES" ++ ++ ++for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS ++do ++ case $ac_tag in ++ :[FHLC]) ac_mode=$ac_tag; continue;; ++ esac ++ case $ac_mode$ac_tag in ++ :[FHL]*:*);; ++ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 ++echo "$as_me: error: Invalid tag $ac_tag." >&2;} ++ { (exit 1); exit 1; }; };; ++ :[FH]-) ac_tag=-:-;; ++ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; ++ esac ++ ac_save_IFS=$IFS ++ IFS=: ++ set x $ac_tag ++ IFS=$ac_save_IFS ++ shift ++ ac_file=$1 ++ shift ++ ++ case $ac_mode in ++ :L) ac_source=$1;; ++ :[FH]) ++ ac_file_inputs= ++ for ac_f ++ do ++ case $ac_f in ++ -) ac_f="$tmp/stdin";; ++ *) # Look for the file first in the build tree, then in the source tree ++ # (if the path is not absolute). The absolute path cannot be DOS-style, ++ # because $ac_f cannot contain `:'. ++ test -f "$ac_f" || ++ case $ac_f in ++ [\\/$]*) false;; ++ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; ++ esac || ++ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 ++echo "$as_me: error: cannot find input file: $ac_f" >&2;} ++ { (exit 1); exit 1; }; };; ++ esac ++ ac_file_inputs="$ac_file_inputs $ac_f" ++ done ++ ++ # Let's still pretend it is `configure' which instantiates (i.e., don't ++ # use $as_me), people would be surprised to read: ++ # /* config.h. Generated by config.status. */ ++ configure_input="Generated from "`IFS=: ++ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." ++ if test x"$ac_file" != x-; then ++ configure_input="$ac_file. $configure_input" ++ { echo "$as_me:$LINENO: creating $ac_file" >&5 ++echo "$as_me: creating $ac_file" >&6;} ++ fi ++ ++ case $ac_tag in ++ *:-:* | *:-) cat >"$tmp/stdin";; ++ esac ++ ;; + esac + +- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. +- ac_dir=`(dirname "$ac_file") 2>/dev/null || ++ ac_dir=`$as_dirname -- "$ac_file" || + $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir="$ac_dir" ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac + ++ case $ac_mode in ++ :F) ++ # ++ # CONFIG_FILE ++ # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; +- *) ac_INSTALL=$ac_top_builddir$INSTALL ;; ++ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac ++_ACEOF + +- if test x"$ac_file" != x-; then +- { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- rm -f "$ac_file" +- fi +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- configure_input= +- else +- configure_input="$ac_file. " +- fi +- configure_input=$configure_input"Generated from `echo $ac_file_in | +- sed 's,.*/,,'` by configure." +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } ++cat >>$CONFIG_STATUS <<\_ACEOF ++# If the template does not know about datarootdir, expand it. ++# FIXME: This hack should be removed a few years after 2.60. ++ac_datarootdir_hack=; ac_datarootdir_seen= ++ ++case `sed -n '/datarootdir/ { ++ p ++ q ++} ++/@datadir@/p ++/@docdir@/p ++/@infodir@/p ++/@localedir@/p ++/@mandir@/p ++' $ac_file_inputs` in ++*datarootdir*) ac_datarootdir_seen=yes;; ++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) ++ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 ++echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF ++ ac_datarootdir_hack=' ++ s&@datadir@&$datadir&g ++ s&@docdir@&$docdir&g ++ s&@infodir@&$infodir&g ++ s&@localedir@&$localedir&g ++ s&@mandir@&$mandir&g ++ s&\\\${datarootdir}&$datarootdir&g' ;; ++esac ++_ACEOF ++ ++# Neutralize VPATH when `$srcdir' = `.'. ++# Shell code in configure.ac might set extrasub. ++# FIXME: do we really want to maintain this feature? ++cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub + $extrasub + _ACEOF + cat >>$CONFIG_STATUS <<\_ACEOF + :t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b +-s,@configure_input@,$configure_input,;t t +-s,@srcdir@,$ac_srcdir,;t t +-s,@abs_srcdir@,$ac_abs_srcdir,;t t +-s,@top_srcdir@,$ac_top_srcdir,;t t +-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +-s,@builddir@,$ac_builddir,;t t +-s,@abs_builddir@,$ac_abs_builddir,;t t +-s,@top_builddir@,$ac_top_builddir,;t t +-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +-s,@INSTALL@,$ac_INSTALL,;t t +-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out +- rm -f $tmp/stdin +- if test x"$ac_file" != x-; then +- mv $tmp/out $ac_file +- else +- cat $tmp/out +- rm -f $tmp/out +- fi +- +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_HEADER section. +-# +- +-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +-# NAME is the cpp macro being defined and VALUE is the value it is being given. +-# +-# ac_d sets the value in "#define NAME VALUE" lines. +-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +-ac_dB='[ ].*$,\1#\2' +-ac_dC=' ' +-ac_dD=',;t' +-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +-ac_uB='$,\1#\2define\3' +-ac_uC=' ' +-ac_uD=',;t' ++s&@configure_input@&$configure_input&;t t ++s&@top_builddir@&$ac_top_builddir_sub&;t t ++s&@srcdir@&$ac_srcdir&;t t ++s&@abs_srcdir@&$ac_abs_srcdir&;t t ++s&@top_srcdir@&$ac_top_srcdir&;t t ++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t ++s&@builddir@&$ac_builddir&;t t ++s&@abs_builddir@&$ac_abs_builddir&;t t ++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t ++s&@INSTALL@&$ac_INSTALL&;t t ++$ac_datarootdir_hack ++" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out ++ ++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && ++ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && ++ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && ++ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&5 ++echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&2;} + +-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". ++ rm -f "$tmp/stdin" + case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++ -) cat "$tmp/out"; rm -f "$tmp/out";; ++ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac ++ ;; ++ :H) ++ # ++ # CONFIG_HEADER ++ # ++_ACEOF ++ ++# Transform confdefs.h into a sed script `conftest.defines', that ++# substitutes the proper values into config.h.in to produce config.h. ++rm -f conftest.defines conftest.tail ++# First, append a space to every undef/define line, to ease matching. ++echo 's/$/ /' >conftest.defines ++# Then, protect against being on the right side of a sed subst, or in ++# an unquoted here document, in config.status. If some macros were ++# called several times there might be several #defines for the same ++# symbol, which is useless. But do not sort them, since the last ++# AC_DEFINE must be honored. ++ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* ++# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where ++# NAME is the cpp macro being defined, VALUE is the value it is being given. ++# PARAMS is the parameter list in the macro definition--in most cases, it's ++# just an empty string. ++ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ++ac_dB='\\)[ (].*,\\1define\\2' ++ac_dC=' ' ++ac_dD=' ,' + +- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- # Do quote $f, to prevent DOS paths from being IFS'd. +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } +- # Remove the trailing spaces. +- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in +- +-_ACEOF +- +-# Transform confdefs.h into two sed scripts, `conftest.defines' and +-# `conftest.undefs', that substitutes the proper values into +-# config.h.in to produce config.h. The first handles `#define' +-# templates, and the second `#undef' templates. +-# And first: Protect against being on the right side of a sed subst in +-# config.status. Protect against being in an unquoted here document +-# in config.status. +-rm -f conftest.defines conftest.undefs +-# Using a here document instead of a string reduces the quoting nightmare. +-# Putting comments in sed scripts is not portable. +-# +-# `end' is used to avoid that the second main sed command (meant for +-# 0-ary CPP macros) applies to n-ary macro definitions. +-# See the Autoconf documentation for `clear'. +-cat >confdef2sed.sed <<\_ACEOF +-s/[\\&,]/\\&/g +-s,[\\$`],\\&,g +-t clear +-: clear +-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +-t end +-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +-: end +-_ACEOF +-# If some macros were called several times there might be several times +-# the same #defines, which is useless. Nevertheless, we may not want to +-# sort them, since we want the *last* AC-DEFINE to be honored. +-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +-rm -f confdef2sed.sed ++uniq confdefs.h | ++ sed -n ' ++ t rset ++ :rset ++ s/^[ ]*#[ ]*define[ ][ ]*// ++ t ok ++ d ++ :ok ++ s/[\\&,]/\\&/g ++ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p ++ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ++ ' >>conftest.defines + +-# This sed command replaces #undef with comments. This is necessary, for ++# Remove the space that was appended to ease matching. ++# Then replace #undef with comments. This is necessary, for + # example, in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. +-cat >>conftest.undefs <<\_ACEOF +-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, ++# (The regexp can be short, since the line contains either #define or #undef.) ++echo 's/ $// ++s,^[ #]*u.*,/* & */,' >>conftest.defines ++ ++# Break up conftest.defines: ++ac_max_sed_lines=50 ++ ++# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" ++# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" ++# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" ++# et cetera. ++ac_in='$ac_file_inputs' ++ac_out='"$tmp/out1"' ++ac_nxt='"$tmp/out2"' ++ ++while : ++do ++ # Write a here document: ++ cat >>$CONFIG_STATUS <<_ACEOF ++ # First, check the format of the line: ++ cat >"\$tmp/defines.sed" <<\\CEOF ++/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def ++/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def ++b ++:def + _ACEOF +- +-# Break up conftest.defines because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +-echo ' :' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.defines >/dev/null +-do +- # Write a limited-size here document to $tmp/defines.sed. +- echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#define' lines. +- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS ++ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF +- sed -f $tmp/defines.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail ++ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ++ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in ++ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail ++ grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines + done +-rm -f conftest.defines +-echo ' fi # grep' >>$CONFIG_STATUS +-echo >>$CONFIG_STATUS +- +-# Break up conftest.undefs because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.undefs >/dev/null +-do +- # Write a limited-size here document to $tmp/undefs.sed. +- echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#undef' +- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS +- echo 'CEOF +- sed -f $tmp/undefs.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail +- rm -f conftest.undefs +- mv conftest.tail conftest.undefs +-done +-rm -f conftest.undefs ++rm -f conftest.defines conftest.tail + ++echo "ac_result=$ac_in" >>$CONFIG_STATUS + cat >>$CONFIG_STATUS <<\_ACEOF +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- echo "/* Generated by configure. */" >$tmp/config.h +- else +- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h +- fi +- cat $tmp/in >>$tmp/config.h +- rm -f $tmp/in + if test x"$ac_file" != x-; then +- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then ++ echo "/* $configure_input */" >"$tmp/config.h" ++ cat "$ac_result" >>"$tmp/config.h" ++ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 + echo "$as_me: $ac_file is unchanged" >&6;} + else +- ac_dir=`(dirname "$ac_file") 2>/dev/null || +-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_file" : 'X\(//\)[^/]' \| \ +- X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- + rm -f $ac_file +- mv $tmp/config.h $ac_file ++ mv "$tmp/config.h" $ac_file + fi + else +- cat $tmp/config.h +- rm -f $tmp/config.h ++ echo "/* $configure_input */" ++ cat "$ac_result" + fi ++ rm -f "$tmp/out12" + # Compute $ac_file's index in $config_headers. + _am_stamp_count=1 + for _am_header in $config_headers :; do +@@ -11025,135 +11417,39 @@ for _am_header in $config_headers :; do + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac + done +-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || ++echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || + $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ +- X$ac_file : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X$ac_file : 'X\(/\)' \| . 2>/dev/null || + echo X$ac_file | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'`/stamp-h$_am_stamp_count +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_COMMANDS section. +-# +-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue +- ac_dest=`echo "$ac_file" | sed 's,:.*,,'` +- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_dir=`(dirname "$ac_dest") 2>/dev/null || +-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_dest" : 'X\(//\)[^/]' \| \ +- X"$ac_dest" : 'X\(//\)$' \| \ +- X"$ac_dest" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_dest" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- +- ac_builddir=. +- +-if test "$ac_dir" != .; then +- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi +- +-case $srcdir in +- .) # No --srcdir option. We are building in place. +- ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. +- ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'`/stamp-h$_am_stamp_count ++ ;; + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac ++ :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 ++echo "$as_me: executing $ac_file commands" >&6;} ++ ;; ++ esac + + +- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +-echo "$as_me: executing $ac_dest commands" >&6;} +- case $ac_dest in +- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do ++ case $ac_file$ac_mode in ++ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. +@@ -11163,18 +11459,29 @@ echo "$as_me: executing $ac_dest command + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then +- dirpart=`(dirname "$mf") 2>/dev/null || ++ dirpart=`$as_dirname -- "$mf" || + $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ +- X"$mf" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$mf" : 'X\(/\)' \| . 2>/dev/null || + echo X"$mf" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + else + continue + fi +@@ -11196,54 +11503,80 @@ echo X"$mf" | + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue +- fdir=`(dirname "$file") 2>/dev/null || ++ fdir=`$as_dirname -- "$file" || + $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ +- X"$file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p $dirpart/$fdir +- else +- as_dir=$dirpart/$fdir ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir=$dirpart/$fdir ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done + ;; +- default ) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; ++ "default":C) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; ++ + esac +-done +-_ACEOF ++done # for ac_tag + +-cat >>$CONFIG_STATUS <<\_ACEOF + + { (exit 0); exit 0; } + _ACEOF +diff -Nrup binutils-2.17/ld/configure.tgt binutils-2.17.atmel.1.3.0/ld/configure.tgt +--- binutils-2.17/ld/configure.tgt 2006-04-05 14:41:57.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/configure.tgt 2007-05-31 17:03:35.000000000 +0200 +@@ -81,8 +81,10 @@ xscale-*-coff) targ_emul=armcoff ;; + xscale-*-elf) targ_emul=armelf + ;; + avr-*-*) targ_emul=avr2 +- targ_extra_emuls="avr1 avr3 avr4 avr5" +- ;; ++ targ_extra_emuls="avr1 avr3 avr4 avr5" ;; ++avr32-*-none) targ_emul=avr32elf_ap7000 ++ targ_extra_emuls="avr32elf_uc3a0128 avr32elf_uc3a0256 avr32elf_uc3a0512 avr32elf_uc3a1128 avr32elf_uc3a1256 avr32elf_uc3a1512 avr32elf_uc3b064 avr32elf_uc3b0128 avr32elf_uc3b0256 avr32elf_uc3b164 avr32elf_uc3b1128 avr32elf_uc3b1256" ;; ++avr32-*-linux*) targ_emul=avr32linux ;; + bfin-*-elf) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;; + bfin-*-uclinux*) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;; + cr16c-*-elf*) targ_emul=elf32cr16c +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_ap7000.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_ap7000.sh +--- binutils-2.17/ld/emulparams/avr32elf_ap7000.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_ap7000.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,35 @@ ++MACHINE=ap ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0xa0000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH ++ . = . & 0x9fffffff;" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai) : ORIGIN = 0x00000000, LENGTH = 0x4000000 ++ SRAM (rwxa) : ORIGIN = 0x24000000, LENGTH = 0x8000 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="SRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(SRAM) + LENGTH(SRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf.sh +--- binutils-2.17/ld/emulparams/avr32elf.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,25 @@ ++MACHINE= ++SCRIPT_NAME=elf ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++TEXT_START_ADDR=0xa0000000 ++ARCH=avr32 ++MAXPAGESIZE=0x4 ++ENTRY=_start ++EMBEDDED=yes ++NOP=0xd703d703 ++INITIAL_READONLY_SECTIONS=".reset : AT(0x0) { *(.reset) } ++ . = . & 0x9fffffff;" ++DATA_START_SYMBOLS="__data_init_start__ = .; ++ __data_init_end__ = .; ++ __data_start__ = .;" ++ ++OTHER_BSS_SYMBOLS='__bss_start__ = .;' ++OTHER_BSS_END_SYMBOLS="_bss_end__ = . ; __bss_end__ = . ; __end__ = . ; ++ . = ALIGN(16); ++ __heap_start__ = .; ++ __heap_end__ = 0x82000000;" ++ ++STACK_ADDR=0x82000000 ++ +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a0128.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0128.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a0128.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0128.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,40 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x20000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" ++ +\ No newline at end of file +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a0256.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0256.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a0256.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0256.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x40000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x10000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a0512.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0512.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a0512.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0512.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x80000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x10000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a1128.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1128.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a1128.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1128.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x20000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a1256.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1256.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a1256.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1256.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x40000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x10000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a1512.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1512.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a1512.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1512.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x80000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x10000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b0128.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b0128.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b0128.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b0128.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x20000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b0256.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b0256.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b0256.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b0256.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,40 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x40000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" ++ +\ No newline at end of file +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b064.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b064.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b064.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b064.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x10000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x4000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b1128.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b1128.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b1128.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b1128.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x20000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b1256.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b1256.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b1256.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b1256.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x40000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b164.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b164.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b164.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b164.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,40 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x10000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x4000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" ++ +\ No newline at end of file +diff -Nrup binutils-2.17/ld/emulparams/avr32linux.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32linux.sh +--- binutils-2.17/ld/emulparams/avr32linux.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32linux.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,14 @@ ++ARCH=avr32 ++SCRIPT_NAME=elf ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++GENERATE_SHLIB_SCRIPT=yes ++MAXPAGESIZE=0x1000 ++TEXT_START_ADDR=0x00001000 ++NOP=0xd703d703 ++ ++# This appears to place the GOT before the data section, which is ++# essential for uClinux. We don't use those .s* sections on AVR32 ++# anyway, so it shouldn't hurt for regular Linux either... ++NO_SMALL_DATA=yes +diff -Nrup binutils-2.17/ld/emultempl/avr32elf.em binutils-2.17.atmel.1.3.0/ld/emultempl/avr32elf.em +--- binutils-2.17/ld/emultempl/avr32elf.em 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emultempl/avr32elf.em 2007-09-28 10:30:44.000000000 +0200 +@@ -0,0 +1,72 @@ ++# This shell script emits a C file. -*- C -*- ++# Copyright (C) 2007 Atmel Corporation ++# ++# This file is part of GLD, the Gnu Linker. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. ++# ++ ++# This file is sourced from elf32.em, and defines extra avr32-elf ++# specific routines. ++# ++ ++cat >> e${EMULATION_NAME}.c <LMA_REGION: Output Section LMA. (line 6) + * automatic data imports: WIN32. (line 170) ++* AVR32 options: AVR32. (line 6) + * back end: BFD. (line 6) + * BASE (MRI): MRI. (line 54) + * BE8: ARM. (line 23) +@@ -6611,81 +6642,161 @@ Index + +  + Tag Table: +-Node: Top347 +-Node: Overview1109 +-Node: Invocation2223 +-Node: Options2631 +-Node: Environment77286 +-Node: Scripts79046 +-Node: Basic Script Concepts80780 +-Node: Script Format83487 +-Node: Simple Example84350 +-Node: Simple Commands87446 +-Node: Entry Point87897 +-Node: File Commands88656 +-Node: Format Commands92522 +-Node: Miscellaneous Commands94488 +-Node: Assignments96718 +-Node: Simple Assignments97209 +-Node: PROVIDE98945 +-Node: PROVIDE_HIDDEN100150 +-Node: Source Code Reference100394 +-Node: SECTIONS103974 +-Node: Output Section Description105865 +-Node: Output Section Name106918 +-Node: Output Section Address107794 +-Node: Input Section109443 +-Node: Input Section Basics110244 +-Node: Input Section Wildcards112596 +-Node: Input Section Common117329 +-Node: Input Section Keep118811 +-Node: Input Section Example119301 +-Node: Output Section Data120269 +-Node: Output Section Keywords123046 +-Node: Output Section Discarding126615 +-Node: Output Section Attributes127571 +-Node: Output Section Type128575 +-Node: Output Section LMA129729 +-Node: Forced Output Alignment132000 +-Node: Forced Input Alignment132268 +-Node: Output Section Region132653 +-Node: Output Section Phdr133083 +-Node: Output Section Fill133747 +-Node: Overlay Description134889 +-Node: MEMORY139137 +-Node: PHDRS143337 +-Node: VERSION148376 +-Node: Expressions156167 +-Node: Constants157045 +-Node: Symbols157606 +-Node: Orphan Sections158344 +-Node: Location Counter159107 +-Node: Operators163411 +-Node: Evaluation164333 +-Node: Expression Section165697 +-Node: Builtin Functions167186 +-Node: Implicit Linker Scripts174678 +-Node: Machine Dependent175453 +-Node: H8/300176314 +-Node: i960177939 +-Node: ARM179624 +-Node: HPPA ELF32182540 +-Node: MMIX184163 +-Node: MSP430185380 +-Node: PowerPC ELF32186428 +-Node: PowerPC64 ELF64188719 +-Node: TI COFF193133 +-Node: WIN32193665 +-Node: Xtensa211739 +-Node: BFD214861 +-Node: BFD outline216316 +-Node: BFD information loss217602 +-Node: Canonical format220119 +-Node: Reporting Bugs224476 +-Node: Bug Criteria225170 +-Node: Bug Reporting225869 +-Node: MRI232894 +-Node: GNU Free Documentation License237537 +-Node: Index257251 ++<<<<<<< .mine ++Node: Top487 ++Node: Overview1249 ++Node: Invocation2363 ++Node: Options2771 ++Node: Environment77426 ++Node: Scripts79186 ++Node: Basic Script Concepts80920 ++Node: Script Format83627 ++Node: Simple Example84490 ++Node: Simple Commands87586 ++Node: Entry Point88037 ++Node: File Commands88796 ++Node: Format Commands92662 ++Node: Miscellaneous Commands94628 ++Node: Assignments96858 ++Node: Simple Assignments97349 ++Node: PROVIDE99085 ++Node: PROVIDE_HIDDEN100290 ++Node: Source Code Reference100534 ++Node: SECTIONS104114 ++Node: Output Section Description106005 ++Node: Output Section Name107058 ++Node: Output Section Address107934 ++Node: Input Section109583 ++Node: Input Section Basics110384 ++Node: Input Section Wildcards112736 ++Node: Input Section Common117469 ++Node: Input Section Keep118951 ++Node: Input Section Example119441 ++Node: Output Section Data120409 ++Node: Output Section Keywords123186 ++Node: Output Section Discarding126755 ++Node: Output Section Attributes127711 ++Node: Output Section Type128715 ++Node: Output Section LMA129869 ++Node: Forced Output Alignment132140 ++Node: Forced Input Alignment132408 ++Node: Output Section Region132793 ++Node: Output Section Phdr133223 ++Node: Output Section Fill133887 ++Node: Overlay Description135029 ++Node: MEMORY139277 ++Node: PHDRS143477 ++Node: VERSION148516 ++Node: Expressions156307 ++Node: Constants157185 ++Node: Symbols157746 ++Node: Orphan Sections158484 ++Node: Location Counter159247 ++Node: Operators163551 ++Node: Evaluation164473 ++Node: Expression Section165837 ++Node: Builtin Functions167326 ++Node: Implicit Linker Scripts174818 ++Node: Machine Dependent175593 ++Node: H8/300176454 ++Node: i960178079 ++Node: ARM179764 ++Node: HPPA ELF32182680 ++Node: MMIX184303 ++Node: MSP430185520 ++Node: PowerPC ELF32186568 ++Node: PowerPC64 ELF64188859 ++Node: TI COFF193273 ++Node: WIN32193805 ++Node: Xtensa211879 ++Node: BFD215001 ++Node: BFD outline216456 ++Node: BFD information loss217742 ++Node: Canonical format220259 ++Node: Reporting Bugs224616 ++Node: Bug Criteria225310 ++Node: Bug Reporting226009 ++Node: MRI233034 ++Node: GNU Free Documentation License237677 ++Node: Index257391 ++======= ++Node: Top331 ++Node: Overview1093 ++Node: Invocation2207 ++Node: Options2615 ++Node: Environment77270 ++Node: Scripts79030 ++Node: Basic Script Concepts80764 ++Node: Script Format83471 ++Node: Simple Example84334 ++Node: Simple Commands87430 ++Node: Entry Point87881 ++Node: File Commands88640 ++Node: Format Commands92506 ++Node: Miscellaneous Commands94472 ++Node: Assignments96702 ++Node: Simple Assignments97193 ++Node: PROVIDE98929 ++Node: PROVIDE_HIDDEN100134 ++Node: Source Code Reference100378 ++Node: SECTIONS103958 ++Node: Output Section Description105849 ++Node: Output Section Name106902 ++Node: Output Section Address107778 ++Node: Input Section109427 ++Node: Input Section Basics110228 ++Node: Input Section Wildcards112580 ++Node: Input Section Common117313 ++Node: Input Section Keep118795 ++Node: Input Section Example119285 ++Node: Output Section Data120253 ++Node: Output Section Keywords123030 ++Node: Output Section Discarding126599 ++Node: Output Section Attributes127555 ++Node: Output Section Type128559 ++Node: Output Section LMA129713 ++Node: Forced Output Alignment131984 ++Node: Forced Input Alignment132252 ++Node: Output Section Region132637 ++Node: Output Section Phdr133067 ++Node: Output Section Fill133731 ++Node: Overlay Description134873 ++Node: MEMORY139121 ++Node: PHDRS143321 ++Node: VERSION148360 ++Node: Expressions156151 ++Node: Constants157029 ++Node: Symbols157590 ++Node: Orphan Sections158328 ++Node: Location Counter159091 ++Node: Operators163395 ++Node: Evaluation164317 ++Node: Expression Section165681 ++Node: Builtin Functions167170 ++Node: Implicit Linker Scripts174662 ++Node: Machine Dependent175437 ++Node: H8/300176357 ++Node: i960177982 ++Node: ARM179667 ++Node: AVR32182578 ++Node: HPPA ELF32183526 ++Node: MMIX185151 ++Node: MSP430186368 ++Node: PowerPC ELF32187416 ++Node: PowerPC64 ELF64189707 ++Node: TI COFF194121 ++Node: WIN32194655 ++Node: Xtensa212729 ++Node: BFD215851 ++Node: BFD outline217306 ++Node: BFD information loss218592 ++Node: Canonical format221109 ++Node: Reporting Bugs225466 ++Node: Bug Criteria226160 ++Node: Bug Reporting226859 ++Node: MRI233884 ++Node: GNU Free Documentation License238527 ++Node: Index258241 ++>>>>>>> .r31496 +  + End Tag Table +diff -Nrup binutils-2.17/ld/ld.info.mine binutils-2.17.atmel.1.3.0/ld/ld.info.mine +--- binutils-2.17/ld/ld.info.mine 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/ld.info.mine 2007-09-28 10:30:44.000000000 +0200 +@@ -0,0 +1,6693 @@ ++This is ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/ld/ld.info, ++produced by makeinfo version 4.8 from ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/ld/ld.texinfo. ++ ++START-INFO-DIR-ENTRY ++* Ld: (ld). The GNU linker. ++END-INFO-DIR-ENTRY ++ ++ This file documents the GNU linker LD version 2.17. ++ ++ Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, ++2002, 2003, 2004 Free Software Foundation, Inc. ++ ++ ++File: ld.info, Node: Top, Next: Overview, Up: (dir) ++ ++Using ld ++******** ++ ++This file documents the GNU linker ld version 2.17. ++ ++ This document is distributed under the terms of the GNU Free ++Documentation License. A copy of the license is included in the ++section entitled "GNU Free Documentation License". ++ ++* Menu: ++ ++* Overview:: Overview ++* Invocation:: Invocation ++* Scripts:: Linker Scripts ++ ++* Machine Dependent:: Machine Dependent Features ++ ++* BFD:: BFD ++ ++* Reporting Bugs:: Reporting Bugs ++* MRI:: MRI Compatible Script Files ++* GNU Free Documentation License:: GNU Free Documentation License ++* Index:: Index ++ ++ ++File: ld.info, Node: Overview, Next: Invocation, Prev: Top, Up: Top ++ ++1 Overview ++********** ++ ++`ld' combines a number of object and archive files, relocates their ++data and ties up symbol references. Usually the last step in compiling ++a program is to run `ld'. ++ ++ `ld' accepts Linker Command Language files written in a superset of ++AT&T's Link Editor Command Language syntax, to provide explicit and ++total control over the linking process. ++ ++ This version of `ld' uses the general purpose BFD libraries to ++operate on object files. This allows `ld' to read, combine, and write ++object files in many different formats--for example, COFF or `a.out'. ++Different formats may be linked together to produce any available kind ++of object file. *Note BFD::, for more information. ++ ++ Aside from its flexibility, the GNU linker is more helpful than other ++linkers in providing diagnostic information. Many linkers abandon ++execution immediately upon encountering an error; whenever possible, ++`ld' continues executing, allowing you to identify other errors (or, in ++some cases, to get an output file in spite of the error). ++ ++ ++File: ld.info, Node: Invocation, Next: Scripts, Prev: Overview, Up: Top ++ ++2 Invocation ++************ ++ ++The GNU linker `ld' is meant to cover a broad range of situations, and ++to be as compatible as possible with other linkers. As a result, you ++have many choices to control its behavior. ++ ++* Menu: ++ ++* Options:: Command Line Options ++* Environment:: Environment Variables ++ ++ ++File: ld.info, Node: Options, Next: Environment, Up: Invocation ++ ++2.1 Command Line Options ++======================== ++ ++ The linker supports a plethora of command-line options, but in actual ++practice few of them are used in any particular context. For instance, ++a frequent use of `ld' is to link standard Unix object files on a ++standard, supported Unix system. On such a system, to link a file ++`hello.o': ++ ++ ld -o OUTPUT /lib/crt0.o hello.o -lc ++ ++ This tells `ld' to produce a file called OUTPUT as the result of ++linking the file `/lib/crt0.o' with `hello.o' and the library `libc.a', ++which will come from the standard search directories. (See the ++discussion of the `-l' option below.) ++ ++ Some of the command-line options to `ld' may be specified at any ++point in the command line. However, options which refer to files, such ++as `-l' or `-T', cause the file to be read at the point at which the ++option appears in the command line, relative to the object files and ++other file options. Repeating non-file options with a different ++argument will either have no further effect, or override prior ++occurrences (those further to the left on the command line) of that ++option. Options which may be meaningfully specified more than once are ++noted in the descriptions below. ++ ++ Non-option arguments are object files or archives which are to be ++linked together. They may follow, precede, or be mixed in with ++command-line options, except that an object file argument may not be ++placed between an option and its argument. ++ ++ Usually the linker is invoked with at least one object file, but you ++can specify other forms of binary input files using `-l', `-R', and the ++script command language. If _no_ binary input files at all are ++specified, the linker does not produce any output, and issues the ++message `No input files'. ++ ++ If the linker cannot recognize the format of an object file, it will ++assume that it is a linker script. A script specified in this way ++augments the main linker script used for the link (either the default ++linker script or the one specified by using `-T'). This feature ++permits the linker to link against a file which appears to be an object ++or an archive, but actually merely defines some symbol values, or uses ++`INPUT' or `GROUP' to load other objects. Note that specifying a ++script in this way merely augments the main linker script; use the `-T' ++option to replace the default linker script entirely. *Note Scripts::. ++ ++ For options whose names are a single letter, option arguments must ++either follow the option letter without intervening whitespace, or be ++given as separate arguments immediately following the option that ++requires them. ++ ++ For options whose names are multiple letters, either one dash or two ++can precede the option name; for example, `-trace-symbol' and ++`--trace-symbol' are equivalent. Note--there is one exception to this ++rule. Multiple letter options that start with a lower case 'o' can ++only be preceeded by two dashes. This is to reduce confusion with the ++`-o' option. So for example `-omagic' sets the output file name to ++`magic' whereas `--omagic' sets the NMAGIC flag on the output. ++ ++ Arguments to multiple-letter options must either be separated from ++the option name by an equals sign, or be given as separate arguments ++immediately following the option that requires them. For example, ++`--trace-symbol foo' and `--trace-symbol=foo' are equivalent. Unique ++abbreviations of the names of multiple-letter options are accepted. ++ ++ Note--if the linker is being invoked indirectly, via a compiler ++driver (e.g. `gcc') then all the linker command line options should be ++prefixed by `-Wl,' (or whatever is appropriate for the particular ++compiler driver) like this: ++ ++ gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup ++ ++ This is important, because otherwise the compiler driver program may ++silently drop the linker options, resulting in a bad link. ++ ++ Here is a table of the generic command line switches accepted by the ++GNU linker: ++ ++`@FILE' ++ Read command-line options from FILE. The options read are ++ inserted in place of the original @FILE option. If FILE does not ++ exist, or cannot be read, then the option will be treated ++ literally, and not removed. ++ ++ Options in FILE are separated by whitespace. A whitespace ++ character may be included in an option by surrounding the entire ++ option in either single or double quotes. Any character ++ (including a backslash) may be included by prefixing the character ++ to be included with a backslash. The FILE may itself contain ++ additional @FILE options; any such options will be processed ++ recursively. ++ ++`-aKEYWORD' ++ This option is supported for HP/UX compatibility. The KEYWORD ++ argument must be one of the strings `archive', `shared', or ++ `default'. `-aarchive' is functionally equivalent to `-Bstatic', ++ and the other two keywords are functionally equivalent to ++ `-Bdynamic'. This option may be used any number of times. ++ ++`-AARCHITECTURE' ++`--architecture=ARCHITECTURE' ++ In the current release of `ld', this option is useful only for the ++ Intel 960 family of architectures. In that `ld' configuration, the ++ ARCHITECTURE argument identifies the particular architecture in ++ the 960 family, enabling some safeguards and modifying the ++ archive-library search path. *Note `ld' and the Intel 960 family: ++ i960, for details. ++ ++ Future releases of `ld' may support similar functionality for ++ other architecture families. ++ ++`-b INPUT-FORMAT' ++`--format=INPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the `-b' ++ option to specify the binary format for input object files that ++ follow this option on the command line. Even when `ld' is ++ configured to support alternative object formats, you don't ++ usually need to specify this, as `ld' should be configured to ++ expect as a default input format the most usual format on each ++ machine. INPUT-FORMAT is a text string, the name of a particular ++ format supported by the BFD libraries. (You can list the ++ available binary formats with `objdump -i'.) *Note BFD::. ++ ++ You may want to use this option if you are linking files with an ++ unusual binary format. You can also use `-b' to switch formats ++ explicitly (when linking object files of different formats), by ++ including `-b INPUT-FORMAT' before each group of object files in a ++ particular format. ++ ++ The default format is taken from the environment variable ++ `GNUTARGET'. *Note Environment::. You can also define the input ++ format from a script, using the command `TARGET'; see *Note Format ++ Commands::. ++ ++`-c MRI-COMMANDFILE' ++`--mri-script=MRI-COMMANDFILE' ++ For compatibility with linkers produced by MRI, `ld' accepts script ++ files written in an alternate, restricted command language, ++ described in *Note MRI Compatible Script Files: MRI. Introduce ++ MRI script files with the option `-c'; use the `-T' option to run ++ linker scripts written in the general-purpose `ld' scripting ++ language. If MRI-CMDFILE does not exist, `ld' looks for it in the ++ directories specified by any `-L' options. ++ ++`-d' ++`-dc' ++`-dp' ++ These three options are equivalent; multiple forms are supported ++ for compatibility with other linkers. They assign space to common ++ symbols even if a relocatable output file is specified (with ++ `-r'). The script command `FORCE_COMMON_ALLOCATION' has the same ++ effect. *Note Miscellaneous Commands::. ++ ++`-e ENTRY' ++`--entry=ENTRY' ++ Use ENTRY as the explicit symbol for beginning execution of your ++ program, rather than the default entry point. If there is no ++ symbol named ENTRY, the linker will try to parse ENTRY as a number, ++ and use that as the entry address (the number will be interpreted ++ in base 10; you may use a leading `0x' for base 16, or a leading ++ `0' for base 8). *Note Entry Point::, for a discussion of defaults ++ and other ways of specifying the entry point. ++ ++`--exclude-libs LIB,LIB,...' ++ Specifies a list of archive libraries from which symbols should ++ not be automatically exported. The library names may be delimited ++ by commas or colons. Specifying `--exclude-libs ALL' excludes ++ symbols in all archive libraries from automatic export. This ++ option is available only for the i386 PE targeted port of the ++ linker and for ELF targeted ports. For i386 PE, symbols ++ explicitly listed in a .def file are still exported, regardless of ++ this option. For ELF targeted ports, symbols affected by this ++ option will be treated as hidden. ++ ++`-E' ++`--export-dynamic' ++ When creating a dynamically linked executable, add all symbols to ++ the dynamic symbol table. The dynamic symbol table is the set of ++ symbols which are visible from dynamic objects at run time. ++ ++ If you do not use this option, the dynamic symbol table will ++ normally contain only those symbols which are referenced by some ++ dynamic object mentioned in the link. ++ ++ If you use `dlopen' to load a dynamic object which needs to refer ++ back to the symbols defined by the program, rather than some other ++ dynamic object, then you will probably need to use this option when ++ linking the program itself. ++ ++ You can also use the version script to control what symbols should ++ be added to the dynamic symbol table if the output format supports ++ it. See the description of `--version-script' in *Note VERSION::. ++ ++`-EB' ++ Link big-endian objects. This affects the default output format. ++ ++`-EL' ++ Link little-endian objects. This affects the default output ++ format. ++ ++`-f' ++`--auxiliary NAME' ++ When creating an ELF shared object, set the internal DT_AUXILIARY ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object should be used as an ++ auxiliary filter on the symbol table of the shared object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_AUXILIARY ++ field. If the dynamic linker resolves any symbols from the filter ++ object, it will first check whether there is a definition in the ++ shared object NAME. If there is one, it will be used instead of ++ the definition in the filter object. The shared object NAME need ++ not exist. Thus the shared object NAME may be used to provide an ++ alternative implementation of certain functions, perhaps for ++ debugging or for machine specific performance. ++ ++ This option may be specified more than once. The DT_AUXILIARY ++ entries will be created in the order in which they appear on the ++ command line. ++ ++`-F NAME' ++`--filter NAME' ++ When creating an ELF shared object, set the internal DT_FILTER ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object which is being created ++ should be used as a filter on the symbol table of the shared ++ object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_FILTER ++ field. The dynamic linker will resolve symbols according to the ++ symbol table of the filter object as usual, but it will actually ++ link to the definitions found in the shared object NAME. Thus the ++ filter object can be used to select a subset of the symbols ++ provided by the object NAME. ++ ++ Some older linkers used the `-F' option throughout a compilation ++ toolchain for specifying object-file format for both input and ++ output object files. The GNU linker uses other mechanisms for ++ this purpose: the `-b', `--format', `--oformat' options, the ++ `TARGET' command in linker scripts, and the `GNUTARGET' ++ environment variable. The GNU linker will ignore the `-F' option ++ when not creating an ELF shared object. ++ ++`-fini NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is unloaded, by setting DT_FINI to ++ the address of the function. By default, the linker uses `_fini' ++ as the function to call. ++ ++`-g' ++ Ignored. Provided for compatibility with other tools. ++ ++`-GVALUE' ++`--gpsize=VALUE' ++ Set the maximum size of objects to be optimized using the GP ++ register to SIZE. This is only meaningful for object file formats ++ such as MIPS ECOFF which supports putting large and small objects ++ into different sections. This is ignored for other object file ++ formats. ++ ++`-hNAME' ++`-soname=NAME' ++ When creating an ELF shared object, set the internal DT_SONAME ++ field to the specified name. When an executable is linked with a ++ shared object which has a DT_SONAME field, then when the ++ executable is run the dynamic linker will attempt to load the ++ shared object specified by the DT_SONAME field rather than the ++ using the file name given to the linker. ++ ++`-i' ++ Perform an incremental link (same as option `-r'). ++ ++`-init NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is loaded, by setting DT_INIT to ++ the address of the function. By default, the linker uses `_init' ++ as the function to call. ++ ++`-lARCHIVE' ++`--library=ARCHIVE' ++ Add archive file ARCHIVE to the list of files to link. This ++ option may be used any number of times. `ld' will search its ++ path-list for occurrences of `libARCHIVE.a' for every ARCHIVE ++ specified. ++ ++ On systems which support shared libraries, `ld' may also search for ++ libraries with extensions other than `.a'. Specifically, on ELF ++ and SunOS systems, `ld' will search a directory for a library with ++ an extension of `.so' before searching for one with an extension of ++ `.a'. By convention, a `.so' extension indicates a shared library. ++ ++ The linker will search an archive only once, at the location where ++ it is specified on the command line. If the archive defines a ++ symbol which was undefined in some object which appeared before ++ the archive on the command line, the linker will include the ++ appropriate file(s) from the archive. However, an undefined ++ symbol in an object appearing later on the command line will not ++ cause the linker to search the archive again. ++ ++ See the `-(' option for a way to force the linker to search ++ archives multiple times. ++ ++ You may list the same archive multiple times on the command line. ++ ++ This type of archive searching is standard for Unix linkers. ++ However, if you are using `ld' on AIX, note that it is different ++ from the behaviour of the AIX linker. ++ ++`-LSEARCHDIR' ++`--library-path=SEARCHDIR' ++ Add path SEARCHDIR to the list of paths that `ld' will search for ++ archive libraries and `ld' control scripts. You may use this ++ option any number of times. The directories are searched in the ++ order in which they are specified on the command line. ++ Directories specified on the command line are searched before the ++ default directories. All `-L' options apply to all `-l' options, ++ regardless of the order in which the options appear. ++ ++ If SEARCHDIR begins with `=', then the `=' will be replaced by the ++ "sysroot prefix", a path specified when the linker is configured. ++ ++ The default set of paths searched (without being specified with ++ `-L') depends on which emulation mode `ld' is using, and in some ++ cases also on how it was configured. *Note Environment::. ++ ++ The paths can also be specified in a link script with the ++ `SEARCH_DIR' command. Directories specified this way are searched ++ at the point in which the linker script appears in the command ++ line. ++ ++`-mEMULATION' ++ Emulate the EMULATION linker. You can list the available ++ emulations with the `--verbose' or `-V' options. ++ ++ If the `-m' option is not used, the emulation is taken from the ++ `LDEMULATION' environment variable, if that is defined. ++ ++ Otherwise, the default emulation depends upon how the linker was ++ configured. ++ ++`-M' ++`--print-map' ++ Print a link map to the standard output. A link map provides ++ information about the link, including the following: ++ ++ * Where object files are mapped into memory. ++ ++ * How common symbols are allocated. ++ ++ * All archive members included in the link, with a mention of ++ the symbol which caused the archive member to be brought in. ++ ++ * The values assigned to symbols. ++ ++ Note - symbols whose values are computed by an expression ++ which involves a reference to a previous value of the same ++ symbol may not have correct result displayed in the link map. ++ This is because the linker discards intermediate results and ++ only retains the final value of an expression. Under such ++ circumstances the linker will display the final value ++ enclosed by square brackets. Thus for example a linker ++ script containing: ++ ++ foo = 1 ++ foo = foo * 4 ++ foo = foo + 8 ++ ++ will produce the following output in the link map if the `-M' ++ option is used: ++ ++ 0x00000001 foo = 0x1 ++ [0x0000000c] foo = (foo * 0x4) ++ [0x0000000c] foo = (foo + 0x8) ++ ++ See *Note Expressions:: for more information about ++ expressions in linker scripts. ++ ++`-n' ++`--nmagic' ++ Turn off page alignment of sections, and mark the output as ++ `NMAGIC' if possible. ++ ++`-N' ++`--omagic' ++ Set the text and data sections to be readable and writable. Also, ++ do not page-align the data segment, and disable linking against ++ shared libraries. If the output format supports Unix style magic ++ numbers, mark the output as `OMAGIC'. Note: Although a writable ++ text section is allowed for PE-COFF targets, it does not conform ++ to the format specification published by Microsoft. ++ ++`--no-omagic' ++ This option negates most of the effects of the `-N' option. It ++ sets the text section to be read-only, and forces the data segment ++ to be page-aligned. Note - this option does not enable linking ++ against shared libraries. Use `-Bdynamic' for this. ++ ++`-o OUTPUT' ++`--output=OUTPUT' ++ Use OUTPUT as the name for the program produced by `ld'; if this ++ option is not specified, the name `a.out' is used by default. The ++ script command `OUTPUT' can also specify the output file name. ++ ++`-O LEVEL' ++ If LEVEL is a numeric values greater than zero `ld' optimizes the ++ output. This might take significantly longer and therefore ++ probably should only be enabled for the final binary. ++ ++`-q' ++`--emit-relocs' ++ Leave relocation sections and contents in fully linked ++ exececutables. Post link analysis and optimization tools may need ++ this information in order to perform correct modifications of ++ executables. This results in larger executables. ++ ++ This option is currently only supported on ELF platforms. ++ ++`--force-dynamic' ++ Force the output file to have dynamic sections. This option is ++ specific to VxWorks targets. ++ ++`-r' ++`--relocatable' ++ Generate relocatable output--i.e., generate an output file that ++ can in turn serve as input to `ld'. This is often called "partial ++ linking". As a side effect, in environments that support standard ++ Unix magic numbers, this option also sets the output file's magic ++ number to `OMAGIC'. If this option is not specified, an absolute ++ file is produced. When linking C++ programs, this option _will ++ not_ resolve references to constructors; to do that, use `-Ur'. ++ ++ When an input file does not have the same format as the output ++ file, partial linking is only supported if that input file does ++ not contain any relocations. Different output formats can have ++ further restrictions; for example some `a.out'-based formats do ++ not support partial linking with input files in other formats at ++ all. ++ ++ This option does the same thing as `-i'. ++ ++`-R FILENAME' ++`--just-symbols=FILENAME' ++ Read symbol names and their addresses from FILENAME, but do not ++ relocate it or include it in the output. This allows your output ++ file to refer symbolically to absolute locations of memory defined ++ in other programs. You may use this option more than once. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-s' ++`--strip-all' ++ Omit all symbol information from the output file. ++ ++`-S' ++`--strip-debug' ++ Omit debugger symbol information (but not all symbols) from the ++ output file. ++ ++`-t' ++`--trace' ++ Print the names of the input files as `ld' processes them. ++ ++`-T SCRIPTFILE' ++`--script=SCRIPTFILE' ++ Use SCRIPTFILE as the linker script. This script replaces `ld''s ++ default linker script (rather than adding to it), so COMMANDFILE ++ must specify everything necessary to describe the output file. ++ *Note Scripts::. If SCRIPTFILE does not exist in the current ++ directory, `ld' looks for it in the directories specified by any ++ preceding `-L' options. Multiple `-T' options accumulate. ++ ++`-u SYMBOL' ++`--undefined=SYMBOL' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. `-u' may be repeated with ++ different option arguments to enter additional undefined symbols. ++ This option is equivalent to the `EXTERN' linker script command. ++ ++`-Ur' ++ For anything other than C++ programs, this option is equivalent to ++ `-r': it generates relocatable output--i.e., an output file that ++ can in turn serve as input to `ld'. When linking C++ programs, ++ `-Ur' _does_ resolve references to constructors, unlike `-r'. It ++ does not work to use `-Ur' on files that were themselves linked ++ with `-Ur'; once the constructor table has been built, it cannot ++ be added to. Use `-Ur' only for the last partial link, and `-r' ++ for the others. ++ ++`--unique[=SECTION]' ++ Creates a separate output section for every input section matching ++ SECTION, or if the optional wildcard SECTION argument is missing, ++ for every orphan input section. An orphan section is one not ++ specifically mentioned in a linker script. You may use this option ++ multiple times on the command line; It prevents the normal ++ merging of input sections with the same name, overriding output ++ section assignments in a linker script. ++ ++`-v' ++`--version' ++`-V' ++ Display the version number for `ld'. The `-V' option also lists ++ the supported emulations. ++ ++`-x' ++`--discard-all' ++ Delete all local symbols. ++ ++`-X' ++`--discard-locals' ++ Delete all temporary local symbols. For most targets, this is all ++ local symbols whose names begin with `L'. ++ ++`-y SYMBOL' ++`--trace-symbol=SYMBOL' ++ Print the name of each linked file in which SYMBOL appears. This ++ option may be given any number of times. On many systems it is ++ necessary to prepend an underscore. ++ ++ This option is useful when you have an undefined symbol in your ++ link but don't know where the reference is coming from. ++ ++`-Y PATH' ++ Add PATH to the default library search path. This option exists ++ for Solaris compatibility. ++ ++`-z KEYWORD' ++ The recognized keywords are: ++ `combreloc' ++ Combines multiple reloc sections and sorts them to make ++ dynamic symbol lookup caching possible. ++ ++ `defs' ++ Disallows undefined symbols in object files. Undefined ++ symbols in shared libraries are still allowed. ++ ++ `execstack' ++ Marks the object as requiring executable stack. ++ ++ `initfirst' ++ This option is only meaningful when building a shared object. ++ It marks the object so that its runtime initialization will ++ occur before the runtime initialization of any other objects ++ brought into the process at the same time. Similarly the ++ runtime finalization of the object will occur after the ++ runtime finalization of any other objects. ++ ++ `interpose' ++ Marks the object that its symbol table interposes before all ++ symbols but the primary executable. ++ ++ `loadfltr' ++ Marks the object that its filters be processed immediately at ++ runtime. ++ ++ `muldefs' ++ Allows multiple definitions. ++ ++ `nocombreloc' ++ Disables multiple reloc sections combining. ++ ++ `nocopyreloc' ++ Disables production of copy relocs. ++ ++ `nodefaultlib' ++ Marks the object that the search for dependencies of this ++ object will ignore any default library search paths. ++ ++ `nodelete' ++ Marks the object shouldn't be unloaded at runtime. ++ ++ `nodlopen' ++ Marks the object not available to `dlopen'. ++ ++ `nodump' ++ Marks the object can not be dumped by `dldump'. ++ ++ `noexecstack' ++ Marks the object as not requiring executable stack. ++ ++ `norelro' ++ Don't create an ELF `PT_GNU_RELRO' segment header in the ++ object. ++ ++ `now' ++ When generating an executable or shared library, mark it to ++ tell the dynamic linker to resolve all symbols when the ++ program is started, or when the shared library is linked to ++ using dlopen, instead of deferring function call resolution ++ to the point when the function is first called. ++ ++ `origin' ++ Marks the object may contain $ORIGIN. ++ ++ `relro' ++ Create an ELF `PT_GNU_RELRO' segment header in the object. ++ ++ ++ Other keywords are ignored for Solaris compatibility. ++ ++`-( ARCHIVES -)' ++`--start-group ARCHIVES --end-group' ++ The ARCHIVES should be a list of archive files. They may be ++ either explicit file names, or `-l' options. ++ ++ The specified archives are searched repeatedly until no new ++ undefined references are created. Normally, an archive is ++ searched only once in the order that it is specified on the ++ command line. If a symbol in that archive is needed to resolve an ++ undefined symbol referred to by an object in an archive that ++ appears later on the command line, the linker would not be able to ++ resolve that reference. By grouping the archives, they all be ++ searched repeatedly until all possible references are resolved. ++ ++ Using this option has a significant performance cost. It is best ++ to use it only when there are unavoidable circular references ++ between two or more archives. ++ ++`--accept-unknown-input-arch' ++`--no-accept-unknown-input-arch' ++ Tells the linker to accept input files whose architecture cannot be ++ recognised. The assumption is that the user knows what they are ++ doing and deliberately wants to link in these unknown input files. ++ This was the default behaviour of the linker, before release ++ 2.14. The default behaviour from release 2.14 onwards is to ++ reject such input files, and so the `--accept-unknown-input-arch' ++ option has been added to restore the old behaviour. ++ ++`--as-needed' ++`--no-as-needed' ++ This option affects ELF DT_NEEDED tags for dynamic libraries ++ mentioned on the command line after the `--as-needed' option. ++ Normally, the linker will add a DT_NEEDED tag for each dynamic ++ library mentioned on the command line, regardless of whether the ++ library is actually needed. `--as-needed' causes DT_NEEDED tags ++ to only be emitted for libraries that satisfy some symbol ++ reference from regular objects which is undefined at the point ++ that the library was linked. `--no-as-needed' restores the ++ default behaviour. ++ ++`--add-needed' ++`--no-add-needed' ++ This option affects the treatment of dynamic libraries from ELF ++ DT_NEEDED tags in dynamic libraries mentioned on the command line ++ after the `--no-add-needed' option. Normally, the linker will add ++ a DT_NEEDED tag for each dynamic library from DT_NEEDED tags. ++ `--no-add-needed' causes DT_NEEDED tags will never be emitted for ++ those libraries from DT_NEEDED tags. `--add-needed' restores the ++ default behaviour. ++ ++`-assert KEYWORD' ++ This option is ignored for SunOS compatibility. ++ ++`-Bdynamic' ++`-dy' ++`-call_shared' ++ Link against dynamic libraries. This is only meaningful on ++ platforms for which shared libraries are supported. This option ++ is normally the default on such platforms. The different variants ++ of this option are for compatibility with various systems. You ++ may use this option multiple times on the command line: it affects ++ library searching for `-l' options which follow it. ++ ++`-Bgroup' ++ Set the `DF_1_GROUP' flag in the `DT_FLAGS_1' entry in the dynamic ++ section. This causes the runtime linker to handle lookups in this ++ object and its dependencies to be performed only inside the group. ++ `--unresolved-symbols=report-all' is implied. This option is only ++ meaningful on ELF platforms which support shared libraries. ++ ++`-Bstatic' ++`-dn' ++`-non_shared' ++`-static' ++ Do not link against shared libraries. This is only meaningful on ++ platforms for which shared libraries are supported. The different ++ variants of this option are for compatibility with various ++ systems. You may use this option multiple times on the command ++ line: it affects library searching for `-l' options which follow ++ it. This option also implies `--unresolved-symbols=report-all'. ++ This option can be used with `-shared'. Doing so means that a ++ shared library is being created but that all of the library's ++ external references must be resolved by pulling in entries from ++ static libraries. ++ ++`-Bsymbolic' ++ When creating a shared library, bind references to global symbols ++ to the definition within the shared library, if any. Normally, it ++ is possible for a program linked against a shared library to ++ override the definition within the shared library. This option is ++ only meaningful on ELF platforms which support shared libraries. ++ ++`--check-sections' ++`--no-check-sections' ++ Asks the linker _not_ to check section addresses after they have ++ been assigned to see if there are any overlaps. Normally the ++ linker will perform this check, and if it finds any overlaps it ++ will produce suitable error messages. The linker does know about, ++ and does make allowances for sections in overlays. The default ++ behaviour can be restored by using the command line switch ++ `--check-sections'. ++ ++`--cref' ++ Output a cross reference table. If a linker map file is being ++ generated, the cross reference table is printed to the map file. ++ Otherwise, it is printed on the standard output. ++ ++ The format of the table is intentionally simple, so that it may be ++ easily processed by a script if necessary. The symbols are ++ printed out, sorted by name. For each symbol, a list of file ++ names is given. If the symbol is defined, the first file listed ++ is the location of the definition. The remaining files contain ++ references to the symbol. ++ ++`--no-define-common' ++ This option inhibits the assignment of addresses to common symbols. ++ The script command `INHIBIT_COMMON_ALLOCATION' has the same effect. ++ *Note Miscellaneous Commands::. ++ ++ The `--no-define-common' option allows decoupling the decision to ++ assign addresses to Common symbols from the choice of the output ++ file type; otherwise a non-Relocatable output type forces ++ assigning addresses to Common symbols. Using `--no-define-common' ++ allows Common symbols that are referenced from a shared library to ++ be assigned addresses only in the main program. This eliminates ++ the unused duplicate space in the shared library, and also ++ prevents any possible confusion over resolving to the wrong ++ duplicate when there are many dynamic modules with specialized ++ search paths for runtime symbol resolution. ++ ++`--defsym SYMBOL=EXPRESSION' ++ Create a global symbol in the output file, containing the absolute ++ address given by EXPRESSION. You may use this option as many ++ times as necessary to define multiple symbols in the command line. ++ A limited form of arithmetic is supported for the EXPRESSION in ++ this context: you may give a hexadecimal constant or the name of ++ an existing symbol, or use `+' and `-' to add or subtract ++ hexadecimal constants or symbols. If you need more elaborate ++ expressions, consider using the linker command language from a ++ script (*note Assignment: Symbol Definitions: Assignments.). ++ _Note:_ there should be no white space between SYMBOL, the equals ++ sign ("<=>"), and EXPRESSION. ++ ++`--demangle[=STYLE]' ++`--no-demangle' ++ These options control whether to demangle symbol names in error ++ messages and other output. When the linker is told to demangle, ++ it tries to present symbol names in a readable fashion: it strips ++ leading underscores if they are used by the object file format, ++ and converts C++ mangled symbol names into user readable names. ++ Different compilers have different mangling styles. The optional ++ demangling style argument can be used to choose an appropriate ++ demangling style for your compiler. The linker will demangle by ++ default unless the environment variable `COLLECT_NO_DEMANGLE' is ++ set. These options may be used to override the default. ++ ++`--dynamic-linker FILE' ++ Set the name of the dynamic linker. This is only meaningful when ++ generating dynamically linked ELF executables. The default dynamic ++ linker is normally correct; don't use this unless you know what ++ you are doing. ++ ++`--fatal-warnings' ++ Treat all warnings as errors. ++ ++`--force-exe-suffix' ++ Make sure that an output file has a .exe suffix. ++ ++ If a successfully built fully linked output file does not have a ++ `.exe' or `.dll' suffix, this option forces the linker to copy the ++ output file to one of the same name with a `.exe' suffix. This ++ option is useful when using unmodified Unix makefiles on a ++ Microsoft Windows host, since some versions of Windows won't run ++ an image unless it ends in a `.exe' suffix. ++ ++`--no-gc-sections' ++`--gc-sections' ++ Enable garbage collection of unused input sections. It is ignored ++ on targets that do not support this option. This option is not ++ compatible with `-r'. The default behaviour (of not performing ++ this garbage collection) can be restored by specifying ++ `--no-gc-sections' on the command line. ++ ++`--help' ++ Print a summary of the command-line options on the standard output ++ and exit. ++ ++`--target-help' ++ Print a summary of all target specific options on the standard ++ output and exit. ++ ++`-Map MAPFILE' ++ Print a link map to the file MAPFILE. See the description of the ++ `-M' option, above. ++ ++`--no-keep-memory' ++ `ld' normally optimizes for speed over memory usage by caching the ++ symbol tables of input files in memory. This option tells `ld' to ++ instead optimize for memory usage, by rereading the symbol tables ++ as necessary. This may be required if `ld' runs out of memory ++ space while linking a large executable. ++ ++`--no-undefined' ++`-z defs' ++ Report unresolved symbol references from regular object files. ++ This is done even if the linker is creating a non-symbolic shared ++ library. The switch `--[no-]allow-shlib-undefined' controls the ++ behaviour for reporting unresolved references found in shared ++ libraries being linked in. ++ ++`--allow-multiple-definition' ++`-z muldefs' ++ Normally when a symbol is defined multiple times, the linker will ++ report a fatal error. These options allow multiple definitions and ++ the first definition will be used. ++ ++`--allow-shlib-undefined' ++`--no-allow-shlib-undefined' ++ Allows (the default) or disallows undefined symbols in shared ++ libraries. This switch is similar to `--no-undefined' except that ++ it determines the behaviour when the undefined symbols are in a ++ shared library rather than a regular object file. It does not ++ affect how undefined symbols in regular object files are handled. ++ ++ The reason that `--allow-shlib-undefined' is the default is that ++ the shared library being specified at link time may not be the ++ same as the one that is available at load time, so the symbols ++ might actually be resolvable at load time. Plus there are some ++ systems, (eg BeOS) where undefined symbols in shared libraries is ++ normal. (The kernel patches them at load time to select which ++ function is most appropriate for the current architecture. This ++ is used for example to dynamically select an appropriate memset ++ function). Apparently it is also normal for HPPA shared libraries ++ to have undefined symbols. ++ ++`--no-undefined-version' ++ Normally when a symbol has an undefined version, the linker will ++ ignore it. This option disallows symbols with undefined version ++ and a fatal error will be issued instead. ++ ++`--default-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned exported symbols. ++ ++`--default-imported-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned imported symbols. ++ ++`--no-warn-mismatch' ++ Normally `ld' will give an error if you try to link together input ++ files that are mismatched for some reason, perhaps because they ++ have been compiled for different processors or for different ++ endiannesses. This option tells `ld' that it should silently ++ permit such possible errors. This option should only be used with ++ care, in cases when you have taken some special action that ++ ensures that the linker errors are inappropriate. ++ ++`--no-whole-archive' ++ Turn off the effect of the `--whole-archive' option for subsequent ++ archive files. ++ ++`--noinhibit-exec' ++ Retain the executable output file whenever it is still usable. ++ Normally, the linker will not produce an output file if it ++ encounters errors during the link process; it exits without ++ writing an output file when it issues any error whatsoever. ++ ++`-nostdlib' ++ Only search library directories explicitly specified on the ++ command line. Library directories specified in linker scripts ++ (including linker scripts specified on the command line) are ++ ignored. ++ ++`--oformat OUTPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the ++ `--oformat' option to specify the binary format for the output ++ object file. Even when `ld' is configured to support alternative ++ object formats, you don't usually need to specify this, as `ld' ++ should be configured to produce as a default output format the most ++ usual format on each machine. OUTPUT-FORMAT is a text string, the ++ name of a particular format supported by the BFD libraries. (You ++ can list the available binary formats with `objdump -i'.) The ++ script command `OUTPUT_FORMAT' can also specify the output format, ++ but this option overrides it. *Note BFD::. ++ ++`-pie' ++`--pic-executable' ++ Create a position independent executable. This is currently only ++ supported on ELF platforms. Position independent executables are ++ similar to shared libraries in that they are relocated by the ++ dynamic linker to the virtual address the OS chooses for them ++ (which can vary between invocations). Like normal dynamically ++ linked executables they can be executed and symbols defined in the ++ executable cannot be overridden by shared libraries. ++ ++`-qmagic' ++ This option is ignored for Linux compatibility. ++ ++`-Qy' ++ This option is ignored for SVR4 compatibility. ++ ++`--relax' ++ An option with machine dependent effects. This option is only ++ supported on a few targets. *Note `ld' and the H8/300: H8/300. ++ *Note `ld' and the Intel 960 family: i960. *Note `ld' and Xtensa ++ Processors: Xtensa. *Note `ld' and PowerPC 32-bit ELF Support: ++ PowerPC ELF32. ++ ++ On some platforms, the `--relax' option performs global ++ optimizations that become possible when the linker resolves ++ addressing in the program, such as relaxing address modes and ++ synthesizing new instructions in the output object file. ++ ++ On some platforms these link time global optimizations may make ++ symbolic debugging of the resulting executable impossible. This ++ is known to be the case for the Matsushita MN10200 and MN10300 ++ family of processors. ++ ++ On platforms where this is not supported, `--relax' is accepted, ++ but ignored. ++ ++`--retain-symbols-file FILENAME' ++ Retain _only_ the symbols listed in the file FILENAME, discarding ++ all others. FILENAME is simply a flat file, with one symbol name ++ per line. This option is especially useful in environments (such ++ as VxWorks) where a large global symbol table is accumulated ++ gradually, to conserve run-time memory. ++ ++ `--retain-symbols-file' does _not_ discard undefined symbols, or ++ symbols needed for relocations. ++ ++ You may only specify `--retain-symbols-file' once in the command ++ line. It overrides `-s' and `-S'. ++ ++`-rpath DIR' ++ Add a directory to the runtime library search path. This is used ++ when linking an ELF executable with shared objects. All `-rpath' ++ arguments are concatenated and passed to the runtime linker, which ++ uses them to locate shared objects at runtime. The `-rpath' ++ option is also used when locating shared objects which are needed ++ by shared objects explicitly included in the link; see the ++ description of the `-rpath-link' option. If `-rpath' is not used ++ when linking an ELF executable, the contents of the environment ++ variable `LD_RUN_PATH' will be used if it is defined. ++ ++ The `-rpath' option may also be used on SunOS. By default, on ++ SunOS, the linker will form a runtime search patch out of all the ++ `-L' options it is given. If a `-rpath' option is used, the ++ runtime search path will be formed exclusively using the `-rpath' ++ options, ignoring the `-L' options. This can be useful when using ++ gcc, which adds many `-L' options which may be on NFS mounted ++ filesystems. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-rpath-link DIR' ++ When using ELF or SunOS, one shared library may require another. ++ This happens when an `ld -shared' link includes a shared library ++ as one of the input files. ++ ++ When the linker encounters such a dependency when doing a ++ non-shared, non-relocatable link, it will automatically try to ++ locate the required shared library and include it in the link, if ++ it is not included explicitly. In such a case, the `-rpath-link' ++ option specifies the first set of directories to search. The ++ `-rpath-link' option may specify a sequence of directory names ++ either by specifying a list of names separated by colons, or by ++ appearing multiple times. ++ ++ This option should be used with caution as it overrides the search ++ path that may have been hard compiled into a shared library. In ++ such a case it is possible to use unintentionally a different ++ search path than the runtime linker would do. ++ ++ The linker uses the following search paths to locate required ++ shared libraries. ++ 1. Any directories specified by `-rpath-link' options. ++ ++ 2. Any directories specified by `-rpath' options. The difference ++ between `-rpath' and `-rpath-link' is that directories ++ specified by `-rpath' options are included in the executable ++ and used at runtime, whereas the `-rpath-link' option is only ++ effective at link time. It is for the native linker only. ++ ++ 3. On an ELF system, if the `-rpath' and `rpath-link' options ++ were not used, search the contents of the environment variable ++ `LD_RUN_PATH'. It is for the native linker only. ++ ++ 4. On SunOS, if the `-rpath' option was not used, search any ++ directories specified using `-L' options. ++ ++ 5. For a native linker, the contents of the environment variable ++ `LD_LIBRARY_PATH'. ++ ++ 6. For a native ELF linker, the directories in `DT_RUNPATH' or ++ `DT_RPATH' of a shared library are searched for shared ++ libraries needed by it. The `DT_RPATH' entries are ignored if ++ `DT_RUNPATH' entries exist. ++ ++ 7. The default directories, normally `/lib' and `/usr/lib'. ++ ++ 8. For a native linker on an ELF system, if the file ++ `/etc/ld.so.conf' exists, the list of directories found in ++ that file. ++ ++ If the required shared library is not found, the linker will issue ++ a warning and continue with the link. ++ ++`-shared' ++`-Bshareable' ++ Create a shared library. This is currently only supported on ELF, ++ XCOFF and SunOS platforms. On SunOS, the linker will ++ automatically create a shared library if the `-e' option is not ++ used and there are undefined symbols in the link. ++ ++`--sort-common' ++ This option tells `ld' to sort the common symbols by size when it ++ places them in the appropriate output sections. First come all ++ the one byte symbols, then all the two byte, then all the four ++ byte, and then everything else. This is to prevent gaps between ++ symbols due to alignment constraints. ++ ++`--sort-section name' ++ This option will apply `SORT_BY_NAME' to all wildcard section ++ patterns in the linker script. ++ ++`--sort-section alignment' ++ This option will apply `SORT_BY_ALIGNMENT' to all wildcard section ++ patterns in the linker script. ++ ++`--split-by-file [SIZE]' ++ Similar to `--split-by-reloc' but creates a new output section for ++ each input file when SIZE is reached. SIZE defaults to a size of ++ 1 if not given. ++ ++`--split-by-reloc [COUNT]' ++ Tries to creates extra sections in the output file so that no ++ single output section in the file contains more than COUNT ++ relocations. This is useful when generating huge relocatable ++ files for downloading into certain real time kernels with the COFF ++ object file format; since COFF cannot represent more than 65535 ++ relocations in a single section. Note that this will fail to work ++ with object file formats which do not support arbitrary sections. ++ The linker will not split up individual input sections for ++ redistribution, so if a single input section contains more than ++ COUNT relocations one output section will contain that many ++ relocations. COUNT defaults to a value of 32768. ++ ++`--stats' ++ Compute and display statistics about the operation of the linker, ++ such as execution time and memory usage. ++ ++`--sysroot=DIRECTORY' ++ Use DIRECTORY as the location of the sysroot, overriding the ++ configure-time default. This option is only supported by linkers ++ that were configured using `--with-sysroot'. ++ ++`--traditional-format' ++ For some targets, the output of `ld' is different in some ways from ++ the output of some existing linker. This switch requests `ld' to ++ use the traditional format instead. ++ ++ For example, on SunOS, `ld' combines duplicate entries in the ++ symbol string table. This can reduce the size of an output file ++ with full debugging information by over 30 percent. ++ Unfortunately, the SunOS `dbx' program can not read the resulting ++ program (`gdb' has no trouble). The `--traditional-format' switch ++ tells `ld' to not combine duplicate entries. ++ ++`--section-start SECTIONNAME=ORG' ++ Locate a section in the output file at the absolute address given ++ by ORG. You may use this option as many times as necessary to ++ locate multiple sections in the command line. ORG must be a ++ single hexadecimal integer; for compatibility with other linkers, ++ you may omit the leading `0x' usually associated with hexadecimal ++ values. _Note:_ there should be no white space between ++ SECTIONNAME, the equals sign ("<=>"), and ORG. ++ ++`-Tbss ORG' ++`-Tdata ORG' ++`-Ttext ORG' ++ Same as -section-start, with `.bss', `.data' or `.text' as the ++ SECTIONNAME. ++ ++`--unresolved-symbols=METHOD' ++ Determine how to handle unresolved symbols. There are four ++ possible values for `method': ++ ++ `ignore-all' ++ Do not report any unresolved symbols. ++ ++ `report-all' ++ Report all unresolved symbols. This is the default. ++ ++ `ignore-in-object-files' ++ Report unresolved symbols that are contained in shared ++ libraries, but ignore them if they come from regular object ++ files. ++ ++ `ignore-in-shared-libs' ++ Report unresolved symbols that come from regular object ++ files, but ignore them if they come from shared libraries. ++ This can be useful when creating a dynamic binary and it is ++ known that all the shared libraries that it should be ++ referencing are included on the linker's command line. ++ ++ The behaviour for shared libraries on their own can also be ++ controlled by the `--[no-]allow-shlib-undefined' option. ++ ++ Normally the linker will generate an error message for each ++ reported unresolved symbol but the option ++ `--warn-unresolved-symbols' can change this to a warning. ++ ++`--dll-verbose' ++`--verbose' ++ Display the version number for `ld' and list the linker emulations ++ supported. Display which input files can and cannot be opened. ++ Display the linker script being used by the linker. ++ ++`--version-script=VERSION-SCRIPTFILE' ++ Specify the name of a version script to the linker. This is ++ typically used when creating shared libraries to specify ++ additional information about the version hierarchy for the library ++ being created. This option is only meaningful on ELF platforms ++ which support shared libraries. *Note VERSION::. ++ ++`--warn-common' ++ Warn when a common symbol is combined with another common symbol ++ or with a symbol definition. Unix linkers allow this somewhat ++ sloppy practise, but linkers on some other operating systems do ++ not. This option allows you to find potential problems from ++ combining global symbols. Unfortunately, some C libraries use ++ this practise, so you may get some warnings about symbols in the ++ libraries as well as in your programs. ++ ++ There are three kinds of global symbols, illustrated here by C ++ examples: ++ ++ `int i = 1;' ++ A definition, which goes in the initialized data section of ++ the output file. ++ ++ `extern int i;' ++ An undefined reference, which does not allocate space. There ++ must be either a definition or a common symbol for the ++ variable somewhere. ++ ++ `int i;' ++ A common symbol. If there are only (one or more) common ++ symbols for a variable, it goes in the uninitialized data ++ area of the output file. The linker merges multiple common ++ symbols for the same variable into a single symbol. If they ++ are of different sizes, it picks the largest size. The ++ linker turns a common symbol into a declaration, if there is ++ a definition of the same variable. ++ ++ The `--warn-common' option can produce five kinds of warnings. ++ Each warning consists of a pair of lines: the first describes the ++ symbol just encountered, and the second describes the previous ++ symbol encountered with the same name. One or both of the two ++ symbols will be a common symbol. ++ ++ 1. Turning a common symbol into a reference, because there is ++ already a definition for the symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by definition ++ FILE(SECTION): warning: defined here ++ ++ 2. Turning a common symbol into a reference, because a later ++ definition for the symbol is encountered. This is the same ++ as the previous case, except that the symbols are encountered ++ in a different order. ++ FILE(SECTION): warning: definition of `SYMBOL' ++ overriding common ++ FILE(SECTION): warning: common is here ++ ++ 3. Merging a common symbol with a previous same-sized common ++ symbol. ++ FILE(SECTION): warning: multiple common ++ of `SYMBOL' ++ FILE(SECTION): warning: previous common is here ++ ++ 4. Merging a common symbol with a previous larger common symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by larger common ++ FILE(SECTION): warning: larger common is here ++ ++ 5. Merging a common symbol with a previous smaller common ++ symbol. This is the same as the previous case, except that ++ the symbols are encountered in a different order. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overriding smaller common ++ FILE(SECTION): warning: smaller common is here ++ ++`--warn-constructors' ++ Warn if any global constructors are used. This is only useful for ++ a few object file formats. For formats like COFF or ELF, the ++ linker can not detect the use of global constructors. ++ ++`--warn-multiple-gp' ++ Warn if multiple global pointer values are required in the output ++ file. This is only meaningful for certain processors, such as the ++ Alpha. Specifically, some processors put large-valued constants ++ in a special section. A special register (the global pointer) ++ points into the middle of this section, so that constants can be ++ loaded efficiently via a base-register relative addressing mode. ++ Since the offset in base-register relative mode is fixed and ++ relatively small (e.g., 16 bits), this limits the maximum size of ++ the constant pool. Thus, in large programs, it is often necessary ++ to use multiple global pointer values in order to be able to ++ address all possible constants. This option causes a warning to ++ be issued whenever this case occurs. ++ ++`--warn-once' ++ Only warn once for each undefined symbol, rather than once per ++ module which refers to it. ++ ++`--warn-section-align' ++ Warn if the address of an output section is changed because of ++ alignment. Typically, the alignment will be set by an input ++ section. The address will only be changed if it not explicitly ++ specified; that is, if the `SECTIONS' command does not specify a ++ start address for the section (*note SECTIONS::). ++ ++`--warn-shared-textrel' ++ Warn if the linker adds a DT_TEXTREL to a shared object. ++ ++`--warn-unresolved-symbols' ++ If the linker is going to report an unresolved symbol (see the ++ option `--unresolved-symbols') it will normally generate an error. ++ This option makes it generate a warning instead. ++ ++`--error-unresolved-symbols' ++ This restores the linker's default behaviour of generating errors ++ when it is reporting unresolved symbols. ++ ++`--whole-archive' ++ For each archive mentioned on the command line after the ++ `--whole-archive' option, include every object file in the archive ++ in the link, rather than searching the archive for the required ++ object files. This is normally used to turn an archive file into ++ a shared library, forcing every object to be included in the ++ resulting shared library. This option may be used more than once. ++ ++ Two notes when using this option from gcc: First, gcc doesn't know ++ about this option, so you have to use `-Wl,-whole-archive'. ++ Second, don't forget to use `-Wl,-no-whole-archive' after your ++ list of archives, because gcc will add its own list of archives to ++ your link and you may not want this flag to affect those as well. ++ ++`--wrap SYMBOL' ++ Use a wrapper function for SYMBOL. Any undefined reference to ++ SYMBOL will be resolved to `__wrap_SYMBOL'. Any undefined ++ reference to `__real_SYMBOL' will be resolved to SYMBOL. ++ ++ This can be used to provide a wrapper for a system function. The ++ wrapper function should be called `__wrap_SYMBOL'. If it wishes ++ to call the system function, it should call `__real_SYMBOL'. ++ ++ Here is a trivial example: ++ ++ void * ++ __wrap_malloc (size_t c) ++ { ++ printf ("malloc called with %zu\n", c); ++ return __real_malloc (c); ++ } ++ ++ If you link other code with this file using `--wrap malloc', then ++ all calls to `malloc' will call the function `__wrap_malloc' ++ instead. The call to `__real_malloc' in `__wrap_malloc' will call ++ the real `malloc' function. ++ ++ You may wish to provide a `__real_malloc' function as well, so that ++ links without the `--wrap' option will succeed. If you do this, ++ you should not put the definition of `__real_malloc' in the same ++ file as `__wrap_malloc'; if you do, the assembler may resolve the ++ call before the linker has a chance to wrap it to `malloc'. ++ ++`--eh-frame-hdr' ++ Request creation of `.eh_frame_hdr' section and ELF ++ `PT_GNU_EH_FRAME' segment header. ++ ++`--enable-new-dtags' ++`--disable-new-dtags' ++ This linker can create the new dynamic tags in ELF. But the older ++ ELF systems may not understand them. If you specify ++ `--enable-new-dtags', the dynamic tags will be created as needed. ++ If you specify `--disable-new-dtags', no new dynamic tags will be ++ created. By default, the new dynamic tags are not created. Note ++ that those options are only available for ELF systems. ++ ++`--hash-size=NUMBER' ++ Set the default size of the linker's hash tables to a prime number ++ close to NUMBER. Increasing this value can reduce the length of ++ time it takes the linker to perform its tasks, at the expense of ++ increasing the linker's memory requirements. Similarly reducing ++ this value can reduce the memory requirements at the expense of ++ speed. ++ ++`--reduce-memory-overheads' ++ This option reduces memory requirements at ld runtime, at the ++ expense of linking speed. This was introduced to select the old ++ O(n^2) algorithm for link map file generation, rather than the new ++ O(n) algorithm which uses about 40% more memory for symbol storage. ++ ++ Another effect of the switch is to set the default hash table size ++ to 1021, which again saves memory at the cost of lengthening the ++ linker's run time. This is not done however if the `--hash-size' ++ switch has been used. ++ ++ The `--reduce-memory-overheads' switch may be also be used to ++ enable other tradeoffs in future versions of the linker. ++ ++ ++2.1.1 Options Specific to i386 PE Targets ++----------------------------------------- ++ ++The i386 PE linker supports the `-shared' option, which causes the ++output to be a dynamically linked library (DLL) instead of a normal ++executable. You should name the output `*.dll' when you use this ++option. In addition, the linker fully supports the standard `*.def' ++files, which may be specified on the linker command line like an object ++file (in fact, it should precede archives it exports symbols from, to ++ensure that they get linked in, just like a normal object file). ++ ++ In addition to the options common to all targets, the i386 PE linker ++support additional command line options that are specific to the i386 ++PE target. Options that take values may be separated from their values ++by either a space or an equals sign. ++ ++`--add-stdcall-alias' ++ If given, symbols with a stdcall suffix (@NN) will be exported ++ as-is and also with the suffix stripped. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--base-file FILE' ++ Use FILE as the name of a file in which to save the base addresses ++ of all the relocations needed for generating DLLs with `dlltool'. ++ [This is an i386 PE specific option] ++ ++`--dll' ++ Create a DLL instead of a regular executable. You may also use ++ `-shared' or specify a `LIBRARY' in a given `.def' file. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--enable-stdcall-fixup' ++`--disable-stdcall-fixup' ++ If the link finds a symbol that it cannot resolve, it will attempt ++ to do "fuzzy linking" by looking for another defined symbol that ++ differs only in the format of the symbol name (cdecl vs stdcall) ++ and will resolve that symbol by linking to the match. For ++ example, the undefined symbol `_foo' might be linked to the ++ function `_foo@12', or the undefined symbol `_bar@16' might be ++ linked to the function `_bar'. When the linker does this, it ++ prints a warning, since it normally should have failed to link, ++ but sometimes import libraries generated from third-party dlls may ++ need this feature to be usable. If you specify ++ `--enable-stdcall-fixup', this feature is fully enabled and ++ warnings are not printed. If you specify ++ `--disable-stdcall-fixup', this feature is disabled and such ++ mismatches are considered to be errors. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--export-all-symbols' ++ If given, all global symbols in the objects used to build a DLL ++ will be exported by the DLL. Note that this is the default if ++ there otherwise wouldn't be any exported symbols. When symbols are ++ explicitly exported via DEF files or implicitly exported via ++ function attributes, the default is to not export anything else ++ unless this option is given. Note that the symbols `DllMain@12', ++ `DllEntryPoint@0', `DllMainCRTStartup@12', and `impure_ptr' will ++ not be automatically exported. Also, symbols imported from other ++ DLLs will not be re-exported, nor will symbols specifying the ++ DLL's internal layout such as those beginning with `_head_' or ++ ending with `_iname'. In addition, no symbols from `libgcc', ++ `libstd++', `libmingw32', or `crtX.o' will be exported. Symbols ++ whose names begin with `__rtti_' or `__builtin_' will not be ++ exported, to help with C++ DLLs. Finally, there is an extensive ++ list of cygwin-private symbols that are not exported (obviously, ++ this applies on when building DLLs for cygwin targets). These ++ cygwin-excludes are: `_cygwin_dll_entry@12', ++ `_cygwin_crt0_common@8', `_cygwin_noncygwin_dll_entry@12', ++ `_fmode', `_impure_ptr', `cygwin_attach_dll', `cygwin_premain0', ++ `cygwin_premain1', `cygwin_premain2', `cygwin_premain3', and ++ `environ'. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--exclude-symbols SYMBOL,SYMBOL,...' ++ Specifies a list of symbols which should not be automatically ++ exported. The symbol names may be delimited by commas or colons. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--file-alignment' ++ Specify the file alignment. Sections in the file will always ++ begin at file offsets which are multiples of this number. This ++ defaults to 512. [This option is specific to the i386 PE targeted ++ port of the linker] ++ ++`--heap RESERVE' ++`--heap RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as heap for this program. The default is 1Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--image-base VALUE' ++ Use VALUE as the base address of your program or dll. This is the ++ lowest memory location that will be used when your program or dll ++ is loaded. To reduce the need to relocate and improve performance ++ of your dlls, each should have a unique base address and not ++ overlap any other dlls. The default is 0x400000 for executables, ++ and 0x10000000 for dlls. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--kill-at' ++ If given, the stdcall suffixes (@NN) will be stripped from symbols ++ before they are exported. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--large-address-aware' ++ If given, the appropriate bit in the "Charateristics" field of the ++ COFF header is set to indicate that this executable supports ++ virtual addresses greater than 2 gigabytes. This should be used ++ in conjuction with the /3GB or /USERVA=VALUE megabytes switch in ++ the "[operating systems]" section of the BOOT.INI. Otherwise, ++ this bit has no effect. [This option is specific to PE targeted ++ ports of the linker] ++ ++`--major-image-version VALUE' ++ Sets the major number of the "image version". Defaults to 1. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--major-os-version VALUE' ++ Sets the major number of the "os version". Defaults to 4. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--major-subsystem-version VALUE' ++ Sets the major number of the "subsystem version". Defaults to 4. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-image-version VALUE' ++ Sets the minor number of the "image version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-os-version VALUE' ++ Sets the minor number of the "os version". Defaults to 0. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--minor-subsystem-version VALUE' ++ Sets the minor number of the "subsystem version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--output-def FILE' ++ The linker will create the file FILE which will contain a DEF file ++ corresponding to the DLL the linker is generating. This DEF file ++ (which should be called `*.def') may be used to create an import ++ library with `dlltool' or may be used as a reference to ++ automatically or implicitly exported symbols. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--out-implib FILE' ++ The linker will create the file FILE which will contain an import ++ lib corresponding to the DLL the linker is generating. This import ++ lib (which should be called `*.dll.a' or `*.a' may be used to link ++ clients against the generated DLL; this behaviour makes it ++ possible to skip a separate `dlltool' import library creation step. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--enable-auto-image-base' ++ Automatically choose the image base for DLLs, unless one is ++ specified using the `--image-base' argument. By using a hash ++ generated from the dllname to create unique image bases for each ++ DLL, in-memory collisions and relocations which can delay program ++ execution are avoided. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-auto-image-base' ++ Do not automatically generate a unique image base. If there is no ++ user-specified image base (`--image-base') then use the platform ++ default. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--dll-search-prefix STRING' ++ When linking dynamically to a dll without an import library, ++ search for `.dll' in preference to ++ `lib.dll'. This behaviour allows easy distinction ++ between DLLs built for the various "subplatforms": native, cygwin, ++ uwin, pw, etc. For instance, cygwin DLLs typically use ++ `--dll-search-prefix=cyg'. [This option is specific to the i386 ++ PE targeted port of the linker] ++ ++`--enable-auto-import' ++ Do sophisticated linking of `_symbol' to `__imp__symbol' for DATA ++ imports from DLLs, and create the necessary thunking symbols when ++ building the import libraries with those DATA exports. Note: Use ++ of the 'auto-import' extension will cause the text section of the ++ image file to be made writable. This does not conform to the ++ PE-COFF format specification published by Microsoft. ++ ++ Using 'auto-import' generally will 'just work' - but sometimes you ++ may see this message: ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ This message occurs when some (sub)expression accesses an address ++ ultimately given by the sum of two constants (Win32 import tables ++ only allow one). Instances where this may occur include accesses ++ to member fields of struct variables imported from a DLL, as well ++ as using a constant index into an array variable imported from a ++ DLL. Any multiword variable (arrays, structs, long long, etc) may ++ trigger this error condition. However, regardless of the exact ++ data type of the offending exported variable, ld will always ++ detect it, issue the warning, and exit. ++ ++ There are several ways to address this difficulty, regardless of ++ the data type of the exported variable: ++ ++ One way is to use -enable-runtime-pseudo-reloc switch. This leaves ++ the task of adjusting references in your client code for runtime ++ environment, so this method works only when runtime environment ++ supports this feature. ++ ++ A second solution is to force one of the 'constants' to be a ++ variable - that is, unknown and un-optimizable at compile time. ++ For arrays, there are two possibilities: a) make the indexee (the ++ array's address) a variable, or b) make the 'constant' index a ++ variable. Thus: ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile type *t=extern_array; t[1] } ++ ++ or ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile int t=1; extern_array[t] } ++ ++ For structs (and most other multiword data types) the only option ++ is to make the struct itself (or the long long, or the ...) ++ variable: ++ ++ extern struct s extern_struct; ++ extern_struct.field --> ++ { volatile struct s *t=&extern_struct; t->field } ++ ++ or ++ ++ extern long long extern_ll; ++ extern_ll --> ++ { volatile long long * local_ll=&extern_ll; *local_ll } ++ ++ A third method of dealing with this difficulty is to abandon ++ 'auto-import' for the offending symbol and mark it with ++ `__declspec(dllimport)'. However, in practise that requires using ++ compile-time #defines to indicate whether you are building a DLL, ++ building client code that will link to the DLL, or merely ++ building/linking to a static library. In making the choice ++ between the various methods of resolving the 'direct address with ++ constant offset' problem, you should consider typical real-world ++ usage: ++ ++ Original: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ Solution 1: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ /* This workaround is for win32 and cygwin; do not "optimize" */ ++ volatile int *parr = arr; ++ printf("%d\n",parr[1]); ++ } ++ ++ Solution 2: ++ --foo.h ++ /* Note: auto-export is assumed (no __declspec(dllexport)) */ ++ #if (defined(_WIN32) || defined(__CYGWIN__)) && \ ++ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) ++ #define FOO_IMPORT __declspec(dllimport) ++ #else ++ #define FOO_IMPORT ++ #endif ++ extern FOO_IMPORT int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ A fourth way to avoid this problem is to re-code your library to ++ use a functional interface rather than a data interface for the ++ offending variables (e.g. set_foo() and get_foo() accessor ++ functions). [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--disable-auto-import' ++ Do not attempt to do sophisticated linking of `_symbol' to ++ `__imp__symbol' for DATA imports from DLLs. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--enable-runtime-pseudo-reloc' ++ If your code contains expressions described in -enable-auto-import ++ section, that is, DATA imports from DLL with non-zero offset, this ++ switch will create a vector of 'runtime pseudo relocations' which ++ can be used by runtime environment to adjust references to such ++ data in your client code. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-runtime-pseudo-reloc' ++ Do not create pseudo relocations for non-zero offset DATA imports ++ from DLLs. This is the default. [This option is specific to the ++ i386 PE targeted port of the linker] ++ ++`--enable-extra-pe-debug' ++ Show additional debug info related to auto-import symbol thunking. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--section-alignment' ++ Sets the section alignment. Sections in memory will always begin ++ at addresses which are a multiple of this number. Defaults to ++ 0x1000. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--stack RESERVE' ++`--stack RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as stack for this program. The default is 2Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--subsystem WHICH' ++`--subsystem WHICH:MAJOR' ++`--subsystem WHICH:MAJOR.MINOR' ++ Specifies the subsystem under which your program will execute. The ++ legal values for WHICH are `native', `windows', `console', ++ `posix', and `xbox'. You may optionally set the subsystem version ++ also. Numeric values are also accepted for WHICH. [This option ++ is specific to the i386 PE targeted port of the linker] ++ ++ ++ ++File: ld.info, Node: Environment, Prev: Options, Up: Invocation ++ ++2.2 Environment Variables ++========================= ++ ++You can change the behaviour of `ld' with the environment variables ++`GNUTARGET', `LDEMULATION' and `COLLECT_NO_DEMANGLE'. ++ ++ `GNUTARGET' determines the input-file object format if you don't use ++`-b' (or its synonym `--format'). Its value should be one of the BFD ++names for an input format (*note BFD::). If there is no `GNUTARGET' in ++the environment, `ld' uses the natural format of the target. If ++`GNUTARGET' is set to `default' then BFD attempts to discover the input ++format by examining binary input files; this method often succeeds, but ++there are potential ambiguities, since there is no method of ensuring ++that the magic number used to specify object-file formats is unique. ++However, the configuration procedure for BFD on each system places the ++conventional format for that system first in the search-list, so ++ambiguities are resolved in favor of convention. ++ ++ `LDEMULATION' determines the default emulation if you don't use the ++`-m' option. The emulation can affect various aspects of linker ++behaviour, particularly the default linker script. You can list the ++available emulations with the `--verbose' or `-V' options. If the `-m' ++option is not used, and the `LDEMULATION' environment variable is not ++defined, the default emulation depends upon how the linker was ++configured. ++ ++ Normally, the linker will default to demangling symbols. However, if ++`COLLECT_NO_DEMANGLE' is set in the environment, then it will default ++to not demangling symbols. This environment variable is used in a ++similar fashion by the `gcc' linker wrapper program. The default may ++be overridden by the `--demangle' and `--no-demangle' options. ++ ++ ++File: ld.info, Node: Scripts, Next: Machine Dependent, Prev: Invocation, Up: Top ++ ++3 Linker Scripts ++**************** ++ ++Every link is controlled by a "linker script". This script is written ++in the linker command language. ++ ++ The main purpose of the linker script is to describe how the ++sections in the input files should be mapped into the output file, and ++to control the memory layout of the output file. Most linker scripts ++do nothing more than this. However, when necessary, the linker script ++can also direct the linker to perform many other operations, using the ++commands described below. ++ ++ The linker always uses a linker script. If you do not supply one ++yourself, the linker will use a default script that is compiled into the ++linker executable. You can use the `--verbose' command line option to ++display the default linker script. Certain command line options, such ++as `-r' or `-N', will affect the default linker script. ++ ++ You may supply your own linker script by using the `-T' command line ++option. When you do this, your linker script will replace the default ++linker script. ++ ++ You may also use linker scripts implicitly by naming them as input ++files to the linker, as though they were files to be linked. *Note ++Implicit Linker Scripts::. ++ ++* Menu: ++ ++* Basic Script Concepts:: Basic Linker Script Concepts ++* Script Format:: Linker Script Format ++* Simple Example:: Simple Linker Script Example ++* Simple Commands:: Simple Linker Script Commands ++* Assignments:: Assigning Values to Symbols ++* SECTIONS:: SECTIONS Command ++* MEMORY:: MEMORY Command ++* PHDRS:: PHDRS Command ++* VERSION:: VERSION Command ++* Expressions:: Expressions in Linker Scripts ++* Implicit Linker Scripts:: Implicit Linker Scripts ++ ++ ++File: ld.info, Node: Basic Script Concepts, Next: Script Format, Up: Scripts ++ ++3.1 Basic Linker Script Concepts ++================================ ++ ++We need to define some basic concepts and vocabulary in order to ++describe the linker script language. ++ ++ The linker combines input files into a single output file. The ++output file and each input file are in a special data format known as an ++"object file format". Each file is called an "object file". The ++output file is often called an "executable", but for our purposes we ++will also call it an object file. Each object file has, among other ++things, a list of "sections". We sometimes refer to a section in an ++input file as an "input section"; similarly, a section in the output ++file is an "output section". ++ ++ Each section in an object file has a name and a size. Most sections ++also have an associated block of data, known as the "section contents". ++A section may be marked as "loadable", which mean that the contents ++should be loaded into memory when the output file is run. A section ++with no contents may be "allocatable", which means that an area in ++memory should be set aside, but nothing in particular should be loaded ++there (in some cases this memory must be zeroed out). A section which ++is neither loadable nor allocatable typically contains some sort of ++debugging information. ++ ++ Every loadable or allocatable output section has two addresses. The ++first is the "VMA", or virtual memory address. This is the address the ++section will have when the output file is run. The second is the ++"LMA", or load memory address. This is the address at which the ++section will be loaded. In most cases the two addresses will be the ++same. An example of when they might be different is when a data section ++is loaded into ROM, and then copied into RAM when the program starts up ++(this technique is often used to initialize global variables in a ROM ++based system). In this case the ROM address would be the LMA, and the ++RAM address would be the VMA. ++ ++ You can see the sections in an object file by using the `objdump' ++program with the `-h' option. ++ ++ Every object file also has a list of "symbols", known as the "symbol ++table". A symbol may be defined or undefined. Each symbol has a name, ++and each defined symbol has an address, among other information. If ++you compile a C or C++ program into an object file, you will get a ++defined symbol for every defined function and global or static ++variable. Every undefined function or global variable which is ++referenced in the input file will become an undefined symbol. ++ ++ You can see the symbols in an object file by using the `nm' program, ++or by using the `objdump' program with the `-t' option. ++ ++ ++File: ld.info, Node: Script Format, Next: Simple Example, Prev: Basic Script Concepts, Up: Scripts ++ ++3.2 Linker Script Format ++======================== ++ ++Linker scripts are text files. ++ ++ You write a linker script as a series of commands. Each command is ++either a keyword, possibly followed by arguments, or an assignment to a ++symbol. You may separate commands using semicolons. Whitespace is ++generally ignored. ++ ++ Strings such as file or format names can normally be entered ++directly. If the file name contains a character such as a comma which ++would otherwise serve to separate file names, you may put the file name ++in double quotes. There is no way to use a double quote character in a ++file name. ++ ++ You may include comments in linker scripts just as in C, delimited by ++`/*' and `*/'. As in C, comments are syntactically equivalent to ++whitespace. ++ ++ ++File: ld.info, Node: Simple Example, Next: Simple Commands, Prev: Script Format, Up: Scripts ++ ++3.3 Simple Linker Script Example ++================================ ++ ++Many linker scripts are fairly simple. ++ ++ The simplest possible linker script has just one command: ++`SECTIONS'. You use the `SECTIONS' command to describe the memory ++layout of the output file. ++ ++ The `SECTIONS' command is a powerful command. Here we will describe ++a simple use of it. Let's assume your program consists only of code, ++initialized data, and uninitialized data. These will be in the ++`.text', `.data', and `.bss' sections, respectively. Let's assume ++further that these are the only sections which appear in your input ++files. ++ ++ For this example, let's say that the code should be loaded at address ++0x10000, and that the data should start at address 0x8000000. Here is a ++linker script which will do that: ++ SECTIONS ++ { ++ . = 0x10000; ++ .text : { *(.text) } ++ . = 0x8000000; ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ You write the `SECTIONS' command as the keyword `SECTIONS', followed ++by a series of symbol assignments and output section descriptions ++enclosed in curly braces. ++ ++ The first line inside the `SECTIONS' command of the above example ++sets the value of the special symbol `.', which is the location ++counter. If you do not specify the address of an output section in some ++other way (other ways are described later), the address is set from the ++current value of the location counter. The location counter is then ++incremented by the size of the output section. At the start of the ++`SECTIONS' command, the location counter has the value `0'. ++ ++ The second line defines an output section, `.text'. The colon is ++required syntax which may be ignored for now. Within the curly braces ++after the output section name, you list the names of the input sections ++which should be placed into this output section. The `*' is a wildcard ++which matches any file name. The expression `*(.text)' means all ++`.text' input sections in all input files. ++ ++ Since the location counter is `0x10000' when the output section ++`.text' is defined, the linker will set the address of the `.text' ++section in the output file to be `0x10000'. ++ ++ The remaining lines define the `.data' and `.bss' sections in the ++output file. The linker will place the `.data' output section at ++address `0x8000000'. After the linker places the `.data' output ++section, the value of the location counter will be `0x8000000' plus the ++size of the `.data' output section. The effect is that the linker will ++place the `.bss' output section immediately after the `.data' output ++section in memory. ++ ++ The linker will ensure that each output section has the required ++alignment, by increasing the location counter if necessary. In this ++example, the specified addresses for the `.text' and `.data' sections ++will probably satisfy any alignment constraints, but the linker may ++have to create a small gap between the `.data' and `.bss' sections. ++ ++ That's it! That's a simple and complete linker script. ++ ++ ++File: ld.info, Node: Simple Commands, Next: Assignments, Prev: Simple Example, Up: Scripts ++ ++3.4 Simple Linker Script Commands ++================================= ++ ++In this section we describe the simple linker script commands. ++ ++* Menu: ++ ++* Entry Point:: Setting the entry point ++* File Commands:: Commands dealing with files ++ ++* Format Commands:: Commands dealing with object file formats ++ ++* Miscellaneous Commands:: Other linker script commands ++ ++ ++File: ld.info, Node: Entry Point, Next: File Commands, Up: Simple Commands ++ ++3.4.1 Setting the Entry Point ++----------------------------- ++ ++The first instruction to execute in a program is called the "entry ++point". You can use the `ENTRY' linker script command to set the entry ++point. The argument is a symbol name: ++ ENTRY(SYMBOL) ++ ++ There are several ways to set the entry point. The linker will set ++the entry point by trying each of the following methods in order, and ++stopping when one of them succeeds: ++ * the `-e' ENTRY command-line option; ++ ++ * the `ENTRY(SYMBOL)' command in a linker script; ++ ++ * the value of the symbol `start', if defined; ++ ++ * the address of the first byte of the `.text' section, if present; ++ ++ * The address `0'. ++ ++ ++File: ld.info, Node: File Commands, Next: Format Commands, Prev: Entry Point, Up: Simple Commands ++ ++3.4.2 Commands Dealing with Files ++--------------------------------- ++ ++Several linker script commands deal with files. ++ ++`INCLUDE FILENAME' ++ Include the linker script FILENAME at this point. The file will ++ be searched for in the current directory, and in any directory ++ specified with the `-L' option. You can nest calls to `INCLUDE' ++ up to 10 levels deep. ++ ++`INPUT(FILE, FILE, ...)' ++`INPUT(FILE FILE ...)' ++ The `INPUT' command directs the linker to include the named files ++ in the link, as though they were named on the command line. ++ ++ For example, if you always want to include `subr.o' any time you do ++ a link, but you can't be bothered to put it on every link command ++ line, then you can put `INPUT (subr.o)' in your linker script. ++ ++ In fact, if you like, you can list all of your input files in the ++ linker script, and then invoke the linker with nothing but a `-T' ++ option. ++ ++ In case a "sysroot prefix" is configured, and the filename starts ++ with the `/' character, and the script being processed was located ++ inside the "sysroot prefix", the filename will be looked for in ++ the "sysroot prefix". Otherwise, the linker will try to open the ++ file in the current directory. If it is not found, the linker ++ will search through the archive library search path. See the ++ description of `-L' in *Note Command Line Options: Options. ++ ++ If you use `INPUT (-lFILE)', `ld' will transform the name to ++ `libFILE.a', as with the command line argument `-l'. ++ ++ When you use the `INPUT' command in an implicit linker script, the ++ files will be included in the link at the point at which the linker ++ script file is included. This can affect archive searching. ++ ++`GROUP(FILE, FILE, ...)' ++`GROUP(FILE FILE ...)' ++ The `GROUP' command is like `INPUT', except that the named files ++ should all be archives, and they are searched repeatedly until no ++ new undefined references are created. See the description of `-(' ++ in *Note Command Line Options: Options. ++ ++`AS_NEEDED(FILE, FILE, ...)' ++`AS_NEEDED(FILE FILE ...)' ++ This construct can appear only inside of the `INPUT' or `GROUP' ++ commands, among other filenames. The files listed will be handled ++ as if they appear directly in the `INPUT' or `GROUP' commands, ++ with the exception of ELF shared libraries, that will be added only ++ when they are actually needed. This construct essentially enables ++ `--as-needed' option for all the files listed inside of it and ++ restores previous `--as-needed' resp. `--no-as-needed' setting ++ afterwards. ++ ++`OUTPUT(FILENAME)' ++ The `OUTPUT' command names the output file. Using ++ `OUTPUT(FILENAME)' in the linker script is exactly like using `-o ++ FILENAME' on the command line (*note Command Line Options: ++ Options.). If both are used, the command line option takes ++ precedence. ++ ++ You can use the `OUTPUT' command to define a default name for the ++ output file other than the usual default of `a.out'. ++ ++`SEARCH_DIR(PATH)' ++ The `SEARCH_DIR' command adds PATH to the list of paths where `ld' ++ looks for archive libraries. Using `SEARCH_DIR(PATH)' is exactly ++ like using `-L PATH' on the command line (*note Command Line ++ Options: Options.). If both are used, then the linker will search ++ both paths. Paths specified using the command line option are ++ searched first. ++ ++`STARTUP(FILENAME)' ++ The `STARTUP' command is just like the `INPUT' command, except ++ that FILENAME will become the first input file to be linked, as ++ though it were specified first on the command line. This may be ++ useful when using a system in which the entry point is always the ++ start of the first file. ++ ++ ++File: ld.info, Node: Format Commands, Next: Miscellaneous Commands, Prev: File Commands, Up: Simple Commands ++ ++3.4.3 Commands Dealing with Object File Formats ++----------------------------------------------- ++ ++A couple of linker script commands deal with object file formats. ++ ++`OUTPUT_FORMAT(BFDNAME)' ++`OUTPUT_FORMAT(DEFAULT, BIG, LITTLE)' ++ The `OUTPUT_FORMAT' command names the BFD format to use for the ++ output file (*note BFD::). Using `OUTPUT_FORMAT(BFDNAME)' is ++ exactly like using `--oformat BFDNAME' on the command line (*note ++ Command Line Options: Options.). If both are used, the command ++ line option takes precedence. ++ ++ You can use `OUTPUT_FORMAT' with three arguments to use different ++ formats based on the `-EB' and `-EL' command line options. This ++ permits the linker script to set the output format based on the ++ desired endianness. ++ ++ If neither `-EB' nor `-EL' are used, then the output format will ++ be the first argument, DEFAULT. If `-EB' is used, the output ++ format will be the second argument, BIG. If `-EL' is used, the ++ output format will be the third argument, LITTLE. ++ ++ For example, the default linker script for the MIPS ELF target ++ uses this command: ++ OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips) ++ This says that the default format for the output file is ++ `elf32-bigmips', but if the user uses the `-EL' command line ++ option, the output file will be created in the `elf32-littlemips' ++ format. ++ ++`TARGET(BFDNAME)' ++ The `TARGET' command names the BFD format to use when reading input ++ files. It affects subsequent `INPUT' and `GROUP' commands. This ++ command is like using `-b BFDNAME' on the command line (*note ++ Command Line Options: Options.). If the `TARGET' command is used ++ but `OUTPUT_FORMAT' is not, then the last `TARGET' command is also ++ used to set the format for the output file. *Note BFD::. ++ ++ ++File: ld.info, Node: Miscellaneous Commands, Prev: Format Commands, Up: Simple Commands ++ ++3.4.4 Other Linker Script Commands ++---------------------------------- ++ ++There are a few other linker scripts commands. ++ ++`ASSERT(EXP, MESSAGE)' ++ Ensure that EXP is non-zero. If it is zero, then exit the linker ++ with an error code, and print MESSAGE. ++ ++`EXTERN(SYMBOL SYMBOL ...)' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. You may list several SYMBOLs for ++ each `EXTERN', and you may use `EXTERN' multiple times. This ++ command has the same effect as the `-u' command-line option. ++ ++`FORCE_COMMON_ALLOCATION' ++ This command has the same effect as the `-d' command-line option: ++ to make `ld' assign space to common symbols even if a relocatable ++ output file is specified (`-r'). ++ ++`INHIBIT_COMMON_ALLOCATION' ++ This command has the same effect as the `--no-define-common' ++ command-line option: to make `ld' omit the assignment of addresses ++ to common symbols even for a non-relocatable output file. ++ ++`NOCROSSREFS(SECTION SECTION ...)' ++ This command may be used to tell `ld' to issue an error about any ++ references among certain output sections. ++ ++ In certain types of programs, particularly on embedded systems when ++ using overlays, when one section is loaded into memory, another ++ section will not be. Any direct references between the two ++ sections would be errors. For example, it would be an error if ++ code in one section called a function defined in the other section. ++ ++ The `NOCROSSREFS' command takes a list of output section names. If ++ `ld' detects any cross references between the sections, it reports ++ an error and returns a non-zero exit status. Note that the ++ `NOCROSSREFS' command uses output section names, not input section ++ names. ++ ++`OUTPUT_ARCH(BFDARCH)' ++ Specify a particular output machine architecture. The argument is ++ one of the names used by the BFD library (*note BFD::). You can ++ see the architecture of an object file by using the `objdump' ++ program with the `-f' option. ++ ++ ++File: ld.info, Node: Assignments, Next: SECTIONS, Prev: Simple Commands, Up: Scripts ++ ++3.5 Assigning Values to Symbols ++=============================== ++ ++You may assign a value to a symbol in a linker script. This will define ++the symbol and place it into the symbol table with a global scope. ++ ++* Menu: ++ ++* Simple Assignments:: Simple Assignments ++* PROVIDE:: PROVIDE ++* PROVIDE_HIDDEN:: PROVIDE_HIDDEN ++* Source Code Reference:: How to use a linker script defined symbol in source code ++ ++ ++File: ld.info, Node: Simple Assignments, Next: PROVIDE, Up: Assignments ++ ++3.5.1 Simple Assignments ++------------------------ ++ ++You may assign to a symbol using any of the C assignment operators: ++ ++`SYMBOL = EXPRESSION ;' ++`SYMBOL += EXPRESSION ;' ++`SYMBOL -= EXPRESSION ;' ++`SYMBOL *= EXPRESSION ;' ++`SYMBOL /= EXPRESSION ;' ++`SYMBOL <<= EXPRESSION ;' ++`SYMBOL >>= EXPRESSION ;' ++`SYMBOL &= EXPRESSION ;' ++`SYMBOL |= EXPRESSION ;' ++ ++ The first case will define SYMBOL to the value of EXPRESSION. In ++the other cases, SYMBOL must already be defined, and the value will be ++adjusted accordingly. ++ ++ The special symbol name `.' indicates the location counter. You may ++only use this within a `SECTIONS' command. *Note Location Counter::. ++ ++ The semicolon after EXPRESSION is required. ++ ++ Expressions are defined below; see *Note Expressions::. ++ ++ You may write symbol assignments as commands in their own right, or ++as statements within a `SECTIONS' command, or as part of an output ++section description in a `SECTIONS' command. ++ ++ The section of the symbol will be set from the section of the ++expression; for more information, see *Note Expression Section::. ++ ++ Here is an example showing the three different places that symbol ++assignments may be used: ++ ++ floating_point = 0; ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ } ++ _bdata = (. + 3) & ~ 3; ++ .data : { *(.data) } ++ } ++ In this example, the symbol `floating_point' will be defined as ++zero. The symbol `_etext' will be defined as the address following the ++last `.text' input section. The symbol `_bdata' will be defined as the ++address following the `.text' output section aligned upward to a 4 byte ++boundary. ++ ++ ++File: ld.info, Node: PROVIDE, Next: PROVIDE_HIDDEN, Prev: Simple Assignments, Up: Assignments ++ ++3.5.2 PROVIDE ++------------- ++ ++In some cases, it is desirable for a linker script to define a symbol ++only if it is referenced and is not defined by any object included in ++the link. For example, traditional linkers defined the symbol `etext'. ++However, ANSI C requires that the user be able to use `etext' as a ++function name without encountering an error. The `PROVIDE' keyword may ++be used to define a symbol, such as `etext', only if it is referenced ++but not defined. The syntax is `PROVIDE(SYMBOL = EXPRESSION)'. ++ ++ Here is an example of using `PROVIDE' to define `etext': ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ PROVIDE(etext = .); ++ } ++ } ++ ++ In this example, if the program defines `_etext' (with a leading ++underscore), the linker will give a multiple definition error. If, on ++the other hand, the program defines `etext' (with no leading ++underscore), the linker will silently use the definition in the program. ++If the program references `etext' but does not define it, the linker ++will use the definition in the linker script. ++ ++ ++File: ld.info, Node: PROVIDE_HIDDEN, Next: Source Code Reference, Prev: PROVIDE, Up: Assignments ++ ++3.5.3 PROVIDE_HIDDEN ++-------------------- ++ ++Similar to `PROVIDE'. For ELF targeted ports, the symbol will be ++hidden and won't be exported. ++ ++ ++File: ld.info, Node: Source Code Reference, Prev: PROVIDE_HIDDEN, Up: Assignments ++ ++3.5.4 Source Code Reference ++--------------------------- ++ ++Accessing a linker script defined variable from source code is not ++intuitive. In particular a linker script symbol is not equivalent to a ++variable declaration in a high level language, it is instead a symbol ++that does not have a value. ++ ++ Before going further, it is important to note that compilers often ++transform names in the source code into different names when they are ++stored in the symbol table. For example, Fortran compilers commonly ++prepend or append an underscore, and C++ performs extensive `name ++mangling'. Therefore there might be a discrepancy between the name of ++a variable as it is used in source code and the name of the same ++variable as it is defined in a linker script. For example in C a ++linker script variable might be referred to as: ++ ++ extern int foo; ++ ++ But in the linker script it might be defined as: ++ ++ _foo = 1000; ++ ++ In the remaining examples however it is assumed that no name ++transformation has taken place. ++ ++ When a symbol is declared in a high level language such as C, two ++things happen. The first is that the compiler reserves enough space in ++the program's memory to hold the _value_ of the symbol. The second is ++that the compiler creates an entry in the program's symbol table which ++holds the symbol's _address_. ie the symbol table contains the address ++of the block of memory holding the symbol's value. So for example the ++following C declaration, at file scope: ++ ++ int foo = 1000; ++ ++ creates a entry called `foo' in the symbol table. This entry holds ++the address of an `int' sized block of memory where the number 1000 is ++initially stored. ++ ++ When a program references a symbol the compiler generates code that ++first accesses the symbol table to find the address of the symbol's ++memory block and then code to read the value from that memory block. ++So: ++ ++ foo = 1; ++ ++ looks up the symbol `foo' in the symbol table, gets the address ++associated with this symbol and then writes the value 1 into that ++address. Whereas: ++ ++ int * a = & foo; ++ ++ looks up the symbol `foo' in the symbol table, gets it address and ++then copies this address into the block of memory associated with the ++variable `a'. ++ ++ Linker scripts symbol declarations, by contrast, create an entry in ++the symbol table but do not assign any memory to them. Thus they are ++an address without a value. So for example the linker script ++definition: ++ ++ foo = 1000; ++ ++ creates an entry in the symbol table called `foo' which holds the ++address of memory location 1000, but nothing special is stored at ++address 1000. This means that you cannot access the _value_ of a ++linker script defined symbol - it has no value - all you can do is ++access the _address_ of a linker script defined symbol. ++ ++ Hence when you are using a linker script defined symbol in source ++code you should always take the address of the symbol, and never ++attempt to use its value. For example suppose you want to copy the ++contents of a section of memory called .ROM into a section called ++.FLASH and the linker script contains these declarations: ++ ++ start_of_ROM = .ROM; ++ end_of_ROM = .ROM + sizeof (.ROM) - 1; ++ start_of_FLASH = .FLASH; ++ ++ Then the C source code to perform the copy would be: ++ ++ extern char start_of_ROM, end_of_ROM, start_of_FLASH; ++ ++ memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM); ++ ++ Note the use of the `&' operators. These are correct. ++ ++ ++File: ld.info, Node: SECTIONS, Next: MEMORY, Prev: Assignments, Up: Scripts ++ ++3.6 SECTIONS Command ++==================== ++ ++The `SECTIONS' command tells the linker how to map input sections into ++output sections, and how to place the output sections in memory. ++ ++ The format of the `SECTIONS' command is: ++ SECTIONS ++ { ++ SECTIONS-COMMAND ++ SECTIONS-COMMAND ++ ... ++ } ++ ++ Each SECTIONS-COMMAND may of be one of the following: ++ ++ * an `ENTRY' command (*note Entry command: Entry Point.) ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an output section description ++ ++ * an overlay description ++ ++ The `ENTRY' command and symbol assignments are permitted inside the ++`SECTIONS' command for convenience in using the location counter in ++those commands. This can also make the linker script easier to ++understand because you can use those commands at meaningful points in ++the layout of the output file. ++ ++ Output section descriptions and overlay descriptions are described ++below. ++ ++ If you do not use a `SECTIONS' command in your linker script, the ++linker will place each input section into an identically named output ++section in the order that the sections are first encountered in the ++input files. If all input sections are present in the first file, for ++example, the order of sections in the output file will match the order ++in the first input file. The first section will be at address zero. ++ ++* Menu: ++ ++* Output Section Description:: Output section description ++* Output Section Name:: Output section name ++* Output Section Address:: Output section address ++* Input Section:: Input section description ++* Output Section Data:: Output section data ++* Output Section Keywords:: Output section keywords ++* Output Section Discarding:: Output section discarding ++* Output Section Attributes:: Output section attributes ++* Overlay Description:: Overlay description ++ ++ ++File: ld.info, Node: Output Section Description, Next: Output Section Name, Up: SECTIONS ++ ++3.6.1 Output Section Description ++-------------------------------- ++ ++The full description of an output section looks like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++ ++ Most output sections do not use most of the optional section ++attributes. ++ ++ The whitespace around SECTION is required, so that the section name ++is unambiguous. The colon and the curly braces are also required. The ++line breaks and other white space are optional. ++ ++ Each OUTPUT-SECTION-COMMAND may be one of the following: ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an input section description (*note Input Section::) ++ ++ * data values to include directly (*note Output Section Data::) ++ ++ * a special output section keyword (*note Output Section Keywords::) ++ ++ ++File: ld.info, Node: Output Section Name, Next: Output Section Address, Prev: Output Section Description, Up: SECTIONS ++ ++3.6.2 Output Section Name ++------------------------- ++ ++The name of the output section is SECTION. SECTION must meet the ++constraints of your output format. In formats which only support a ++limited number of sections, such as `a.out', the name must be one of ++the names supported by the format (`a.out', for example, allows only ++`.text', `.data' or `.bss'). If the output format supports any number ++of sections, but with numbers and not names (as is the case for Oasys), ++the name should be supplied as a quoted numeric string. A section name ++may consist of any sequence of characters, but a name which contains ++any unusual characters such as commas must be quoted. ++ ++ The output section name `/DISCARD/' is special; *Note Output Section ++Discarding::. ++ ++ ++File: ld.info, Node: Output Section Address, Next: Input Section, Prev: Output Section Name, Up: SECTIONS ++ ++3.6.3 Output Section Address ++---------------------------- ++ ++The ADDRESS is an expression for the VMA (the virtual memory address) ++of the output section. If you do not provide ADDRESS, the linker will ++set it based on REGION if present, or otherwise based on the current ++value of the location counter. ++ ++ If you provide ADDRESS, the address of the output section will be ++set to precisely that. If you provide neither ADDRESS nor REGION, then ++the address of the output section will be set to the current value of ++the location counter aligned to the alignment requirements of the ++output section. The alignment requirement of the output section is the ++strictest alignment of any input section contained within the output ++section. ++ ++ For example, ++ .text . : { *(.text) } ++ and ++ .text : { *(.text) } ++ are subtly different. The first will set the address of the `.text' ++output section to the current value of the location counter. The ++second will set it to the current value of the location counter aligned ++to the strictest alignment of a `.text' input section. ++ ++ The ADDRESS may be an arbitrary expression; *Note Expressions::. ++For example, if you want to align the section on a 0x10 byte boundary, ++so that the lowest four bits of the section address are zero, you could ++do something like this: ++ .text ALIGN(0x10) : { *(.text) } ++ This works because `ALIGN' returns the current location counter ++aligned upward to the specified value. ++ ++ Specifying ADDRESS for a section will change the value of the ++location counter. ++ ++ ++File: ld.info, Node: Input Section, Next: Output Section Data, Prev: Output Section Address, Up: SECTIONS ++ ++3.6.4 Input Section Description ++------------------------------- ++ ++The most common output section command is an input section description. ++ ++ The input section description is the most basic linker script ++operation. You use output sections to tell the linker how to lay out ++your program in memory. You use input section descriptions to tell the ++linker how to map the input files into your memory layout. ++ ++* Menu: ++ ++* Input Section Basics:: Input section basics ++* Input Section Wildcards:: Input section wildcard patterns ++* Input Section Common:: Input section for common symbols ++* Input Section Keep:: Input section and garbage collection ++* Input Section Example:: Input section example ++ ++ ++File: ld.info, Node: Input Section Basics, Next: Input Section Wildcards, Up: Input Section ++ ++3.6.4.1 Input Section Basics ++............................ ++ ++An input section description consists of a file name optionally followed ++by a list of section names in parentheses. ++ ++ The file name and the section name may be wildcard patterns, which we ++describe further below (*note Input Section Wildcards::). ++ ++ The most common input section description is to include all input ++sections with a particular name in the output section. For example, to ++include all input `.text' sections, you would write: ++ *(.text) ++ Here the `*' is a wildcard which matches any file name. To exclude ++a list of files from matching the file name wildcard, EXCLUDE_FILE may ++be used to match all files except the ones specified in the ++EXCLUDE_FILE list. For example: ++ (*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)) ++ will cause all .ctors sections from all files except `crtend.o' and ++`otherfile.o' to be included. ++ ++ There are two ways to include more than one section: ++ *(.text .rdata) ++ *(.text) *(.rdata) ++ The difference between these is the order in which the `.text' and ++`.rdata' input sections will appear in the output section. In the ++first example, they will be intermingled, appearing in the same order as ++they are found in the linker input. In the second example, all `.text' ++input sections will appear first, followed by all `.rdata' input ++sections. ++ ++ You can specify a file name to include sections from a particular ++file. You would do this if one or more of your files contain special ++data that needs to be at a particular location in memory. For example: ++ data.o(.data) ++ ++ If you use a file name without a list of sections, then all sections ++in the input file will be included in the output section. This is not ++commonly done, but it may by useful on occasion. For example: ++ data.o ++ ++ When you use a file name which does not contain any wild card ++characters, the linker will first see if you also specified the file ++name on the linker command line or in an `INPUT' command. If you did ++not, the linker will attempt to open the file as an input file, as ++though it appeared on the command line. Note that this differs from an ++`INPUT' command, because the linker will not search for the file in the ++archive search path. ++ ++ ++File: ld.info, Node: Input Section Wildcards, Next: Input Section Common, Prev: Input Section Basics, Up: Input Section ++ ++3.6.4.2 Input Section Wildcard Patterns ++....................................... ++ ++In an input section description, either the file name or the section ++name or both may be wildcard patterns. ++ ++ The file name of `*' seen in many examples is a simple wildcard ++pattern for the file name. ++ ++ The wildcard patterns are like those used by the Unix shell. ++ ++`*' ++ matches any number of characters ++ ++`?' ++ matches any single character ++ ++`[CHARS]' ++ matches a single instance of any of the CHARS; the `-' character ++ may be used to specify a range of characters, as in `[a-z]' to ++ match any lower case letter ++ ++`\' ++ quotes the following character ++ ++ When a file name is matched with a wildcard, the wildcard characters ++will not match a `/' character (used to separate directory names on ++Unix). A pattern consisting of a single `*' character is an exception; ++it will always match any file name, whether it contains a `/' or not. ++In a section name, the wildcard characters will match a `/' character. ++ ++ File name wildcard patterns only match files which are explicitly ++specified on the command line or in an `INPUT' command. The linker ++does not search directories to expand wildcards. ++ ++ If a file name matches more than one wildcard pattern, or if a file ++name appears explicitly and is also matched by a wildcard pattern, the ++linker will use the first match in the linker script. For example, this ++sequence of input section descriptions is probably in error, because the ++`data.o' rule will not be used: ++ .data : { *(.data) } ++ .data1 : { data.o(.data) } ++ ++ Normally, the linker will place files and sections matched by ++wildcards in the order in which they are seen during the link. You can ++change this by using the `SORT_BY_NAME' keyword, which appears before a ++wildcard pattern in parentheses (e.g., `SORT_BY_NAME(.text*)'). When ++the `SORT_BY_NAME' keyword is used, the linker will sort the files or ++sections into ascending order by name before placing them in the output ++file. ++ ++ `SORT_BY_ALIGNMENT' is very similar to `SORT_BY_NAME'. The ++difference is `SORT_BY_ALIGNMENT' will sort sections into ascending ++order by alignment before placing them in the output file. ++ ++ `SORT' is an alias for `SORT_BY_NAME'. ++ ++ When there are nested section sorting commands in linker script, ++there can be at most 1 level of nesting for section sorting commands. ++ ++ 1. `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' (wildcard section pattern)). ++ It will sort the input sections by name first, then by alignment ++ if 2 sections have the same name. ++ ++ 2. `SORT_BY_ALIGNMENT' (`SORT_BY_NAME' (wildcard section pattern)). ++ It will sort the input sections by alignment first, then by name ++ if 2 sections have the same alignment. ++ ++ 3. `SORT_BY_NAME' (`SORT_BY_NAME' (wildcard section pattern)) is ++ treated the same as `SORT_BY_NAME' (wildcard section pattern). ++ ++ 4. `SORT_BY_ALIGNMENT' (`SORT_BY_ALIGNMENT' (wildcard section ++ pattern)) is treated the same as `SORT_BY_ALIGNMENT' (wildcard ++ section pattern). ++ ++ 5. All other nested section sorting commands are invalid. ++ ++ When both command line section sorting option and linker script ++section sorting command are used, section sorting command always takes ++precedence over the command line option. ++ ++ If the section sorting command in linker script isn't nested, the ++command line option will make the section sorting command to be treated ++as nested sorting command. ++ ++ 1. `SORT_BY_NAME' (wildcard section pattern ) with `--sort-sections ++ alignment' is equivalent to `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' ++ (wildcard section pattern)). ++ ++ 2. `SORT_BY_ALIGNMENT' (wildcard section pattern) with ++ `--sort-section name' is equivalent to `SORT_BY_ALIGNMENT' ++ (`SORT_BY_NAME' (wildcard section pattern)). ++ ++ If the section sorting command in linker script is nested, the ++command line option will be ignored. ++ ++ If you ever get confused about where input sections are going, use ++the `-M' linker option to generate a map file. The map file shows ++precisely how input sections are mapped to output sections. ++ ++ This example shows how wildcard patterns might be used to partition ++files. This linker script directs the linker to place all `.text' ++sections in `.text' and all `.bss' sections in `.bss'. The linker will ++place the `.data' section from all files beginning with an upper case ++character in `.DATA'; for all other files, the linker will place the ++`.data' section in `.data'. ++ SECTIONS { ++ .text : { *(.text) } ++ .DATA : { [A-Z]*(.data) } ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ ++File: ld.info, Node: Input Section Common, Next: Input Section Keep, Prev: Input Section Wildcards, Up: Input Section ++ ++3.6.4.3 Input Section for Common Symbols ++........................................ ++ ++A special notation is needed for common symbols, because in many object ++file formats common symbols do not have a particular input section. The ++linker treats common symbols as though they are in an input section ++named `COMMON'. ++ ++ You may use file names with the `COMMON' section just as with any ++other input sections. You can use this to place common symbols from a ++particular input file in one section while common symbols from other ++input files are placed in another section. ++ ++ In most cases, common symbols in input files will be placed in the ++`.bss' section in the output file. For example: ++ .bss { *(.bss) *(COMMON) } ++ ++ Some object file formats have more than one type of common symbol. ++For example, the MIPS ELF object file format distinguishes standard ++common symbols and small common symbols. In this case, the linker will ++use a different special section name for other types of common symbols. ++In the case of MIPS ELF, the linker uses `COMMON' for standard common ++symbols and `.scommon' for small common symbols. This permits you to ++map the different types of common symbols into memory at different ++locations. ++ ++ You will sometimes see `[COMMON]' in old linker scripts. This ++notation is now considered obsolete. It is equivalent to `*(COMMON)'. ++ ++ ++File: ld.info, Node: Input Section Keep, Next: Input Section Example, Prev: Input Section Common, Up: Input Section ++ ++3.6.4.4 Input Section and Garbage Collection ++............................................ ++ ++When link-time garbage collection is in use (`--gc-sections'), it is ++often useful to mark sections that should not be eliminated. This is ++accomplished by surrounding an input section's wildcard entry with ++`KEEP()', as in `KEEP(*(.init))' or `KEEP(SORT_BY_NAME(*)(.ctors))'. ++ ++ ++File: ld.info, Node: Input Section Example, Prev: Input Section Keep, Up: Input Section ++ ++3.6.4.5 Input Section Example ++............................. ++ ++The following example is a complete linker script. It tells the linker ++to read all of the sections from file `all.o' and place them at the ++start of output section `outputa' which starts at location `0x10000'. ++All of section `.input1' from file `foo.o' follows immediately, in the ++same output section. All of section `.input2' from `foo.o' goes into ++output section `outputb', followed by section `.input1' from `foo1.o'. ++All of the remaining `.input1' and `.input2' sections from any files ++are written to output section `outputc'. ++ ++ SECTIONS { ++ outputa 0x10000 : ++ { ++ all.o ++ foo.o (.input1) ++ } ++ outputb : ++ { ++ foo.o (.input2) ++ foo1.o (.input1) ++ } ++ outputc : ++ { ++ *(.input1) ++ *(.input2) ++ } ++ } ++ ++ ++File: ld.info, Node: Output Section Data, Next: Output Section Keywords, Prev: Input Section, Up: SECTIONS ++ ++3.6.5 Output Section Data ++------------------------- ++ ++You can include explicit bytes of data in an output section by using ++`BYTE', `SHORT', `LONG', `QUAD', or `SQUAD' as an output section ++command. Each keyword is followed by an expression in parentheses ++providing the value to store (*note Expressions::). The value of the ++expression is stored at the current value of the location counter. ++ ++ The `BYTE', `SHORT', `LONG', and `QUAD' commands store one, two, ++four, and eight bytes (respectively). After storing the bytes, the ++location counter is incremented by the number of bytes stored. ++ ++ For example, this will store the byte 1 followed by the four byte ++value of the symbol `addr': ++ BYTE(1) ++ LONG(addr) ++ ++ When using a 64 bit host or target, `QUAD' and `SQUAD' are the same; ++they both store an 8 byte, or 64 bit, value. When both host and target ++are 32 bits, an expression is computed as 32 bits. In this case `QUAD' ++stores a 32 bit value zero extended to 64 bits, and `SQUAD' stores a 32 ++bit value sign extended to 64 bits. ++ ++ If the object file format of the output file has an explicit ++endianness, which is the normal case, the value will be stored in that ++endianness. When the object file format does not have an explicit ++endianness, as is true of, for example, S-records, the value will be ++stored in the endianness of the first input object file. ++ ++ Note--these commands only work inside a section description and not ++between them, so the following will produce an error from the linker: ++ SECTIONS { .text : { *(.text) } LONG(1) .data : { *(.data) } } ++ whereas this will work: ++ SECTIONS { .text : { *(.text) ; LONG(1) } .data : { *(.data) } } ++ ++ You may use the `FILL' command to set the fill pattern for the ++current section. It is followed by an expression in parentheses. Any ++otherwise unspecified regions of memory within the section (for example, ++gaps left due to the required alignment of input sections) are filled ++with the value of the expression, repeated as necessary. A `FILL' ++statement covers memory locations after the point at which it occurs in ++the section definition; by including more than one `FILL' statement, ++you can have different fill patterns in different parts of an output ++section. ++ ++ This example shows how to fill unspecified regions of memory with the ++value `0x90': ++ FILL(0x90909090) ++ ++ The `FILL' command is similar to the `=FILLEXP' output section ++attribute, but it only affects the part of the section following the ++`FILL' command, rather than the entire section. If both are used, the ++`FILL' command takes precedence. *Note Output Section Fill::, for ++details on the fill expression. ++ ++ ++File: ld.info, Node: Output Section Keywords, Next: Output Section Discarding, Prev: Output Section Data, Up: SECTIONS ++ ++3.6.6 Output Section Keywords ++----------------------------- ++ ++There are a couple of keywords which can appear as output section ++commands. ++ ++`CREATE_OBJECT_SYMBOLS' ++ The command tells the linker to create a symbol for each input ++ file. The name of each symbol will be the name of the ++ corresponding input file. The section of each symbol will be the ++ output section in which the `CREATE_OBJECT_SYMBOLS' command ++ appears. ++ ++ This is conventional for the a.out object file format. It is not ++ normally used for any other object file format. ++ ++`CONSTRUCTORS' ++ When linking using the a.out object file format, the linker uses an ++ unusual set construct to support C++ global constructors and ++ destructors. When linking object file formats which do not support ++ arbitrary sections, such as ECOFF and XCOFF, the linker will ++ automatically recognize C++ global constructors and destructors by ++ name. For these object file formats, the `CONSTRUCTORS' command ++ tells the linker to place constructor information in the output ++ section where the `CONSTRUCTORS' command appears. The ++ `CONSTRUCTORS' command is ignored for other object file formats. ++ ++ The symbol `__CTOR_LIST__' marks the start of the global ++ constructors, and the symbol `__CTOR_END__' marks the end. ++ Similarly, `__DTOR_LIST__' and `__DTOR_END__' mark the start and ++ end of the global destructors. The first word in the list is the ++ number of entries, followed by the address of each constructor or ++ destructor, followed by a zero word. The compiler must arrange to ++ actually run the code. For these object file formats GNU C++ ++ normally calls constructors from a subroutine `__main'; a call to ++ `__main' is automatically inserted into the startup code for ++ `main'. GNU C++ normally runs destructors either by using ++ `atexit', or directly from the function `exit'. ++ ++ For object file formats such as `COFF' or `ELF' which support ++ arbitrary section names, GNU C++ will normally arrange to put the ++ addresses of global constructors and destructors into the `.ctors' ++ and `.dtors' sections. Placing the following sequence into your ++ linker script will build the sort of table which the GNU C++ ++ runtime code expects to see. ++ ++ __CTOR_LIST__ = .; ++ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) ++ *(.ctors) ++ LONG(0) ++ __CTOR_END__ = .; ++ __DTOR_LIST__ = .; ++ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) ++ *(.dtors) ++ LONG(0) ++ __DTOR_END__ = .; ++ ++ If you are using the GNU C++ support for initialization priority, ++ which provides some control over the order in which global ++ constructors are run, you must sort the constructors at link time ++ to ensure that they are executed in the correct order. When using ++ the `CONSTRUCTORS' command, use `SORT_BY_NAME(CONSTRUCTORS)' ++ instead. When using the `.ctors' and `.dtors' sections, use ++ `*(SORT_BY_NAME(.ctors))' and `*(SORT_BY_NAME(.dtors))' instead of ++ just `*(.ctors)' and `*(.dtors)'. ++ ++ Normally the compiler and linker will handle these issues ++ automatically, and you will not need to concern yourself with ++ them. However, you may need to consider this if you are using C++ ++ and writing your own linker scripts. ++ ++ ++ ++File: ld.info, Node: Output Section Discarding, Next: Output Section Attributes, Prev: Output Section Keywords, Up: SECTIONS ++ ++3.6.7 Output Section Discarding ++------------------------------- ++ ++The linker will not create output section which do not have any ++contents. This is for convenience when referring to input sections that ++may or may not be present in any of the input files. For example: ++ .foo { *(.foo) } ++ will only create a `.foo' section in the output file if there is a ++`.foo' section in at least one input file. ++ ++ If you use anything other than an input section description as an ++output section command, such as a symbol assignment, then the output ++section will always be created, even if there are no matching input ++sections. ++ ++ The special output section name `/DISCARD/' may be used to discard ++input sections. Any input sections which are assigned to an output ++section named `/DISCARD/' are not included in the output file. ++ ++ ++File: ld.info, Node: Output Section Attributes, Next: Overlay Description, Prev: Output Section Discarding, Up: SECTIONS ++ ++3.6.8 Output Section Attributes ++------------------------------- ++ ++We showed above that the full description of an output section looked ++like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++We've already described SECTION, ADDRESS, and ++OUTPUT-SECTION-COMMAND. In this section we will describe the remaining ++section attributes. ++ ++* Menu: ++ ++* Output Section Type:: Output section type ++* Output Section LMA:: Output section LMA ++* Forced Output Alignment:: Forced Output Alignment ++* Forced Input Alignment:: Forced Input Alignment ++* Output Section Region:: Output section region ++* Output Section Phdr:: Output section phdr ++* Output Section Fill:: Output section fill ++ ++ ++File: ld.info, Node: Output Section Type, Next: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.1 Output Section Type ++........................... ++ ++Each output section may have a type. The type is a keyword in ++parentheses. The following types are defined: ++ ++`NOLOAD' ++ The section should be marked as not loadable, so that it will not ++ be loaded into memory when the program is run. ++ ++`DSECT' ++`COPY' ++`INFO' ++`OVERLAY' ++ These type names are supported for backward compatibility, and are ++ rarely used. They all have the same effect: the section should be ++ marked as not allocatable, so that no memory is allocated for the ++ section when the program is run. ++ ++ The linker normally sets the attributes of an output section based on ++the input sections which map into it. You can override this by using ++the section type. For example, in the script sample below, the `ROM' ++section is addressed at memory location `0' and does not need to be ++loaded when the program is run. The contents of the `ROM' section will ++appear in the linker output file as usual. ++ SECTIONS { ++ ROM 0 (NOLOAD) : { ... } ++ ... ++ } ++ ++ ++File: ld.info, Node: Output Section LMA, Next: Forced Output Alignment, Prev: Output Section Type, Up: Output Section Attributes ++ ++3.6.8.2 Output Section LMA ++.......................... ++ ++Every section has a virtual address (VMA) and a load address (LMA); see ++*Note Basic Script Concepts::. The address expression which may appear ++in an output section description sets the VMA (*note Output Section ++Address::). ++ ++ The linker will normally set the LMA equal to the VMA. You can ++change that by using the `AT' keyword. The expression LMA that follows ++the `AT' keyword specifies the load address of the section. ++ ++ Alternatively, with `AT>LMA_REGION' expression, you may specify a ++memory region for the section's load address. *Note MEMORY::. Note ++that if the section has not had a VMA assigned to it then the linker ++will use the LMA_REGION as the VMA region as well. *Note Output ++Section Region::. ++ ++ This feature is designed to make it easy to build a ROM image. For ++example, the following linker script creates three output sections: one ++called `.text', which starts at `0x1000', one called `.mdata', which is ++loaded at the end of the `.text' section even though its VMA is ++`0x2000', and one called `.bss' to hold uninitialized data at address ++`0x3000'. The symbol `_data' is defined with the value `0x2000', which ++shows that the location counter holds the VMA value, not the LMA value. ++ ++ SECTIONS ++ { ++ .text 0x1000 : { *(.text) _etext = . ; } ++ .mdata 0x2000 : ++ AT ( ADDR (.text) + SIZEOF (.text) ) ++ { _data = . ; *(.data); _edata = . ; } ++ .bss 0x3000 : ++ { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;} ++ } ++ ++ The run-time initialization code for use with a program generated ++with this linker script would include something like the following, to ++copy the initialized data from the ROM image to its runtime address. ++Notice how this code takes advantage of the symbols defined by the ++linker script. ++ ++ extern char _etext, _data, _edata, _bstart, _bend; ++ char *src = &_etext; ++ char *dst = &_data; ++ ++ /* ROM has data at end of text; copy it. */ ++ while (dst < &_edata) { ++ *dst++ = *src++; ++ } ++ ++ /* Zero bss */ ++ for (dst = &_bstart; dst< &_bend; dst++) ++ *dst = 0; ++ ++ ++File: ld.info, Node: Forced Output Alignment, Next: Forced Input Alignment, Prev: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.3 Forced Output Alignment ++............................... ++ ++You can increase an output section's alignment by using ALIGN. ++ ++ ++File: ld.info, Node: Forced Input Alignment, Next: Output Section Region, Prev: Forced Output Alignment, Up: Output Section Attributes ++ ++3.6.8.4 Forced Input Alignment ++.............................. ++ ++You can force input section alignment within an output section by using ++SUBALIGN. The value specified overrides any alignment given by input ++sections, whether larger or smaller. ++ ++ ++File: ld.info, Node: Output Section Region, Next: Output Section Phdr, Prev: Forced Input Alignment, Up: Output Section Attributes ++ ++3.6.8.5 Output Section Region ++............................. ++ ++You can assign a section to a previously defined region of memory by ++using `>REGION'. *Note MEMORY::. ++ ++ Here is a simple example: ++ MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 } ++ SECTIONS { ROM : { *(.text) } >rom } ++ ++ ++File: ld.info, Node: Output Section Phdr, Next: Output Section Fill, Prev: Output Section Region, Up: Output Section Attributes ++ ++3.6.8.6 Output Section Phdr ++........................... ++ ++You can assign a section to a previously defined program segment by ++using `:PHDR'. *Note PHDRS::. If a section is assigned to one or more ++segments, then all subsequent allocated sections will be assigned to ++those segments as well, unless they use an explicitly `:PHDR' modifier. ++You can use `:NONE' to tell the linker to not put the section in any ++segment at all. ++ ++ Here is a simple example: ++ PHDRS { text PT_LOAD ; } ++ SECTIONS { .text : { *(.text) } :text } ++ ++ ++File: ld.info, Node: Output Section Fill, Prev: Output Section Phdr, Up: Output Section Attributes ++ ++3.6.8.7 Output Section Fill ++........................... ++ ++You can set the fill pattern for an entire section by using `=FILLEXP'. ++FILLEXP is an expression (*note Expressions::). Any otherwise ++unspecified regions of memory within the output section (for example, ++gaps left due to the required alignment of input sections) will be ++filled with the value, repeated as necessary. If the fill expression ++is a simple hex number, ie. a string of hex digit starting with `0x' ++and without a trailing `k' or `M', then an arbitrarily long sequence of ++hex digits can be used to specify the fill pattern; Leading zeros ++become part of the pattern too. For all other cases, including extra ++parentheses or a unary `+', the fill pattern is the four least ++significant bytes of the value of the expression. In all cases, the ++number is big-endian. ++ ++ You can also change the fill value with a `FILL' command in the ++output section commands; (*note Output Section Data::). ++ ++ Here is a simple example: ++ SECTIONS { .text : { *(.text) } =0x90909090 } ++ ++ ++File: ld.info, Node: Overlay Description, Prev: Output Section Attributes, Up: SECTIONS ++ ++3.6.9 Overlay Description ++------------------------- ++ ++An overlay description provides an easy way to describe sections which ++are to be loaded as part of a single memory image but are to be run at ++the same memory address. At run time, some sort of overlay manager will ++copy the overlaid sections in and out of the runtime memory address as ++required, perhaps by simply manipulating addressing bits. This approach ++can be useful, for example, when a certain region of memory is faster ++than another. ++ ++ Overlays are described using the `OVERLAY' command. The `OVERLAY' ++command is used within a `SECTIONS' command, like an output section ++description. The full syntax of the `OVERLAY' command is as follows: ++ OVERLAY [START] : [NOCROSSREFS] [AT ( LDADDR )] ++ { ++ SECNAME1 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ SECNAME2 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ ... ++ } [>REGION] [:PHDR...] [=FILL] ++ ++ Everything is optional except `OVERLAY' (a keyword), and each ++section must have a name (SECNAME1 and SECNAME2 above). The section ++definitions within the `OVERLAY' construct are identical to those ++within the general `SECTIONS' contruct (*note SECTIONS::), except that ++no addresses and no memory regions may be defined for sections within ++an `OVERLAY'. ++ ++ The sections are all defined with the same starting address. The ++load addresses of the sections are arranged such that they are ++consecutive in memory starting at the load address used for the ++`OVERLAY' as a whole (as with normal section definitions, the load ++address is optional, and defaults to the start address; the start ++address is also optional, and defaults to the current value of the ++location counter). ++ ++ If the `NOCROSSREFS' keyword is used, and there any references among ++the sections, the linker will report an error. Since the sections all ++run at the same address, it normally does not make sense for one ++section to refer directly to another. *Note NOCROSSREFS: Miscellaneous ++Commands. ++ ++ For each section within the `OVERLAY', the linker automatically ++defines two symbols. The symbol `__load_start_SECNAME' is defined as ++the starting load address of the section. The symbol ++`__load_stop_SECNAME' is defined as the final load address of the ++section. Any characters within SECNAME which are not legal within C ++identifiers are removed. C (or assembler) code may use these symbols ++to move the overlaid sections around as necessary. ++ ++ At the end of the overlay, the value of the location counter is set ++to the start address of the overlay plus the size of the largest ++section. ++ ++ Here is an example. Remember that this would appear inside a ++`SECTIONS' construct. ++ OVERLAY 0x1000 : AT (0x4000) ++ { ++ .text0 { o1/*.o(.text) } ++ .text1 { o2/*.o(.text) } ++ } ++This will define both `.text0' and `.text1' to start at address ++0x1000. `.text0' will be loaded at address 0x4000, and `.text1' will ++be loaded immediately after `.text0'. The following symbols will be ++defined: `__load_start_text0', `__load_stop_text0', ++`__load_start_text1', `__load_stop_text1'. ++ ++ C code to copy overlay `.text1' into the overlay area might look ++like the following. ++ ++ extern char __load_start_text1, __load_stop_text1; ++ memcpy ((char *) 0x1000, &__load_start_text1, ++ &__load_stop_text1 - &__load_start_text1); ++ ++ Note that the `OVERLAY' command is just syntactic sugar, since ++everything it does can be done using the more basic commands. The above ++example could have been written identically as follows. ++ ++ .text0 0x1000 : AT (0x4000) { o1/*.o(.text) } ++ __load_start_text0 = LOADADDR (.text0); ++ __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0); ++ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) } ++ __load_start_text1 = LOADADDR (.text1); ++ __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1); ++ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1)); ++ ++ ++File: ld.info, Node: MEMORY, Next: PHDRS, Prev: SECTIONS, Up: Scripts ++ ++3.7 MEMORY Command ++================== ++ ++The linker's default configuration permits allocation of all available ++memory. You can override this by using the `MEMORY' command. ++ ++ The `MEMORY' command describes the location and size of blocks of ++memory in the target. You can use it to describe which memory regions ++may be used by the linker, and which memory regions it must avoid. You ++can then assign sections to particular memory regions. The linker will ++set section addresses based on the memory regions, and will warn about ++regions that become too full. The linker will not shuffle sections ++around to fit into the available regions. ++ ++ A linker script may contain at most one use of the `MEMORY' command. ++However, you can define as many blocks of memory within it as you ++wish. The syntax is: ++ MEMORY ++ { ++ NAME [(ATTR)] : ORIGIN = ORIGIN, LENGTH = LEN ++ ... ++ } ++ ++ The NAME is a name used in the linker script to refer to the region. ++The region name has no meaning outside of the linker script. Region ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each memory region must ++have a distinct name. ++ ++ The ATTR string is an optional list of attributes that specify ++whether to use a particular memory region for an input section which is ++not explicitly mapped in the linker script. As described in *Note ++SECTIONS::, if you do not specify an output section for some input ++section, the linker will create an output section with the same name as ++the input section. If you define region attributes, the linker will use ++them to select the memory region for the output section that it creates. ++ ++ The ATTR string must consist only of the following characters: ++`R' ++ Read-only section ++ ++`W' ++ Read/write section ++ ++`X' ++ Executable section ++ ++`A' ++ Allocatable section ++ ++`I' ++ Initialized section ++ ++`L' ++ Same as `I' ++ ++`!' ++ Invert the sense of any of the preceding attributes ++ ++ If a unmapped section matches any of the listed attributes other than ++`!', it will be placed in the memory region. The `!' attribute ++reverses this test, so that an unmapped section will be placed in the ++memory region only if it does not match any of the listed attributes. ++ ++ The ORIGIN is an numerical expression for the start address of the ++memory region. The expression must evaluate to a constant and it ++cannot involve any symbols. The keyword `ORIGIN' may be abbreviated to ++`org' or `o' (but not, for example, `ORG'). ++ ++ The LEN is an expression for the size in bytes of the memory region. ++As with the ORIGIN expression, the expression must be numerical only ++and must evaluate to a constant. The keyword `LENGTH' may be ++abbreviated to `len' or `l'. ++ ++ In the following example, we specify that there are two memory ++regions available for allocation: one starting at `0' for 256 kilobytes, ++and the other starting at `0x40000000' for four megabytes. The linker ++will place into the `rom' memory region every section which is not ++explicitly mapped into a memory region, and is either read-only or ++executable. The linker will place other sections which are not ++explicitly mapped into a memory region into the `ram' memory region. ++ ++ MEMORY ++ { ++ rom (rx) : ORIGIN = 0, LENGTH = 256K ++ ram (!rx) : org = 0x40000000, l = 4M ++ } ++ ++ Once you define a memory region, you can direct the linker to place ++specific output sections into that memory region by using the `>REGION' ++output section attribute. For example, if you have a memory region ++named `mem', you would use `>mem' in the output section definition. ++*Note Output Section Region::. If no address was specified for the ++output section, the linker will set the address to the next available ++address within the memory region. If the combined output sections ++directed to a memory region are too large for the region, the linker ++will issue an error message. ++ ++ It is possible to access the origin and length of a memory in an ++expression via the `ORIGIN(MEMORY)' and `LENGTH(MEMORY)' functions: ++ ++ _fstack = ORIGIN(ram) + LENGTH(ram) - 4; ++ ++ ++File: ld.info, Node: PHDRS, Next: VERSION, Prev: MEMORY, Up: Scripts ++ ++3.8 PHDRS Command ++================= ++ ++The ELF object file format uses "program headers", also knows as ++"segments". The program headers describe how the program should be ++loaded into memory. You can print them out by using the `objdump' ++program with the `-p' option. ++ ++ When you run an ELF program on a native ELF system, the system loader ++reads the program headers in order to figure out how to load the ++program. This will only work if the program headers are set correctly. ++This manual does not describe the details of how the system loader ++interprets program headers; for more information, see the ELF ABI. ++ ++ The linker will create reasonable program headers by default. ++However, in some cases, you may need to specify the program headers more ++precisely. You may use the `PHDRS' command for this purpose. When the ++linker sees the `PHDRS' command in the linker script, it will not ++create any program headers other than the ones specified. ++ ++ The linker only pays attention to the `PHDRS' command when ++generating an ELF output file. In other cases, the linker will simply ++ignore `PHDRS'. ++ ++ This is the syntax of the `PHDRS' command. The words `PHDRS', ++`FILEHDR', `AT', and `FLAGS' are keywords. ++ ++ PHDRS ++ { ++ NAME TYPE [ FILEHDR ] [ PHDRS ] [ AT ( ADDRESS ) ] ++ [ FLAGS ( FLAGS ) ] ; ++ } ++ ++ The NAME is used only for reference in the `SECTIONS' command of the ++linker script. It is not put into the output file. Program header ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each program header must ++have a distinct name. ++ ++ Certain program header types describe segments of memory which the ++system loader will load from the file. In the linker script, you ++specify the contents of these segments by placing allocatable output ++sections in the segments. You use the `:PHDR' output section attribute ++to place a section in a particular segment. *Note Output Section ++Phdr::. ++ ++ It is normal to put certain sections in more than one segment. This ++merely implies that one segment of memory contains another. You may ++repeat `:PHDR', using it once for each segment which should contain the ++section. ++ ++ If you place a section in one or more segments using `:PHDR', then ++the linker will place all subsequent allocatable sections which do not ++specify `:PHDR' in the same segments. This is for convenience, since ++generally a whole set of contiguous sections will be placed in a single ++segment. You can use `:NONE' to override the default segment and tell ++the linker to not put the section in any segment at all. ++ ++ You may use the `FILEHDR' and `PHDRS' keywords appear after the ++program header type to further describe the contents of the segment. ++The `FILEHDR' keyword means that the segment should include the ELF ++file header. The `PHDRS' keyword means that the segment should include ++the ELF program headers themselves. ++ ++ The TYPE may be one of the following. The numbers indicate the ++value of the keyword. ++ ++`PT_NULL' (0) ++ Indicates an unused program header. ++ ++`PT_LOAD' (1) ++ Indicates that this program header describes a segment to be ++ loaded from the file. ++ ++`PT_DYNAMIC' (2) ++ Indicates a segment where dynamic linking information can be found. ++ ++`PT_INTERP' (3) ++ Indicates a segment where the name of the program interpreter may ++ be found. ++ ++`PT_NOTE' (4) ++ Indicates a segment holding note information. ++ ++`PT_SHLIB' (5) ++ A reserved program header type, defined but not specified by the ++ ELF ABI. ++ ++`PT_PHDR' (6) ++ Indicates a segment where the program headers may be found. ++ ++EXPRESSION ++ An expression giving the numeric type of the program header. This ++ may be used for types not defined above. ++ ++ You can specify that a segment should be loaded at a particular ++address in memory by using an `AT' expression. This is identical to the ++`AT' command used as an output section attribute (*note Output Section ++LMA::). The `AT' command for a program header overrides the output ++section attribute. ++ ++ The linker will normally set the segment flags based on the sections ++which comprise the segment. You may use the `FLAGS' keyword to ++explicitly specify the segment flags. The value of FLAGS must be an ++integer. It is used to set the `p_flags' field of the program header. ++ ++ Here is an example of `PHDRS'. This shows a typical set of program ++headers used on a native ELF system. ++ ++ PHDRS ++ { ++ headers PT_PHDR PHDRS ; ++ interp PT_INTERP ; ++ text PT_LOAD FILEHDR PHDRS ; ++ data PT_LOAD ; ++ dynamic PT_DYNAMIC ; ++ } ++ ++ SECTIONS ++ { ++ . = SIZEOF_HEADERS; ++ .interp : { *(.interp) } :text :interp ++ .text : { *(.text) } :text ++ .rodata : { *(.rodata) } /* defaults to :text */ ++ ... ++ . = . + 0x1000; /* move to a new page in memory */ ++ .data : { *(.data) } :data ++ .dynamic : { *(.dynamic) } :data :dynamic ++ ... ++ } ++ ++ ++File: ld.info, Node: VERSION, Next: Expressions, Prev: PHDRS, Up: Scripts ++ ++3.9 VERSION Command ++=================== ++ ++The linker supports symbol versions when using ELF. Symbol versions are ++only useful when using shared libraries. The dynamic linker can use ++symbol versions to select a specific version of a function when it runs ++a program that may have been linked against an earlier version of the ++shared library. ++ ++ You can include a version script directly in the main linker script, ++or you can supply the version script as an implicit linker script. You ++can also use the `--version-script' linker option. ++ ++ The syntax of the `VERSION' command is simply ++ VERSION { version-script-commands } ++ ++ The format of the version script commands is identical to that used ++by Sun's linker in Solaris 2.5. The version script defines a tree of ++version nodes. You specify the node names and interdependencies in the ++version script. You can specify which symbols are bound to which ++version nodes, and you can reduce a specified set of symbols to local ++scope so that they are not globally visible outside of the shared ++library. ++ ++ The easiest way to demonstrate the version script language is with a ++few examples. ++ ++ VERS_1.1 { ++ global: ++ foo1; ++ local: ++ old*; ++ original*; ++ new*; ++ }; ++ ++ VERS_1.2 { ++ foo2; ++ } VERS_1.1; ++ ++ VERS_2.0 { ++ bar1; bar2; ++ extern "C++" { ++ ns::*; ++ "int f(int, double)"; ++ } ++ } VERS_1.2; ++ ++ This example version script defines three version nodes. The first ++version node defined is `VERS_1.1'; it has no other dependencies. The ++script binds the symbol `foo1' to `VERS_1.1'. It reduces a number of ++symbols to local scope so that they are not visible outside of the ++shared library; this is done using wildcard patterns, so that any ++symbol whose name begins with `old', `original', or `new' is matched. ++The wildcard patterns available are the same as those used in the shell ++when matching filenames (also known as "globbing"). However, if you ++specify the symbol name inside double quotes, then the name is treated ++as literal, rather than as a glob pattern. ++ ++ Next, the version script defines node `VERS_1.2'. This node depends ++upon `VERS_1.1'. The script binds the symbol `foo2' to the version ++node `VERS_1.2'. ++ ++ Finally, the version script defines node `VERS_2.0'. This node ++depends upon `VERS_1.2'. The scripts binds the symbols `bar1' and ++`bar2' are bound to the version node `VERS_2.0'. ++ ++ When the linker finds a symbol defined in a library which is not ++specifically bound to a version node, it will effectively bind it to an ++unspecified base version of the library. You can bind all otherwise ++unspecified symbols to a given version node by using `global: *;' ++somewhere in the version script. ++ ++ The names of the version nodes have no specific meaning other than ++what they might suggest to the person reading them. The `2.0' version ++could just as well have appeared in between `1.1' and `1.2'. However, ++this would be a confusing way to write a version script. ++ ++ Node name can be omited, provided it is the only version node in the ++version script. Such version script doesn't assign any versions to ++symbols, only selects which symbols will be globally visible out and ++which won't. ++ ++ { global: foo; bar; local: *; }; ++ ++ When you link an application against a shared library that has ++versioned symbols, the application itself knows which version of each ++symbol it requires, and it also knows which version nodes it needs from ++each shared library it is linked against. Thus at runtime, the dynamic ++loader can make a quick check to make sure that the libraries you have ++linked against do in fact supply all of the version nodes that the ++application will need to resolve all of the dynamic symbols. In this ++way it is possible for the dynamic linker to know with certainty that ++all external symbols that it needs will be resolvable without having to ++search for each symbol reference. ++ ++ The symbol versioning is in effect a much more sophisticated way of ++doing minor version checking that SunOS does. The fundamental problem ++that is being addressed here is that typically references to external ++functions are bound on an as-needed basis, and are not all bound when ++the application starts up. If a shared library is out of date, a ++required interface may be missing; when the application tries to use ++that interface, it may suddenly and unexpectedly fail. With symbol ++versioning, the user will get a warning when they start their program if ++the libraries being used with the application are too old. ++ ++ There are several GNU extensions to Sun's versioning approach. The ++first of these is the ability to bind a symbol to a version node in the ++source file where the symbol is defined instead of in the versioning ++script. This was done mainly to reduce the burden on the library ++maintainer. You can do this by putting something like: ++ __asm__(".symver original_foo,foo@VERS_1.1"); ++ in the C source file. This renames the function `original_foo' to ++be an alias for `foo' bound to the version node `VERS_1.1'. The ++`local:' directive can be used to prevent the symbol `original_foo' ++from being exported. A `.symver' directive takes precedence over a ++version script. ++ ++ The second GNU extension is to allow multiple versions of the same ++function to appear in a given shared library. In this way you can make ++an incompatible change to an interface without increasing the major ++version number of the shared library, while still allowing applications ++linked against the old interface to continue to function. ++ ++ To do this, you must use multiple `.symver' directives in the source ++file. Here is an example: ++ ++ __asm__(".symver original_foo,foo@"); ++ __asm__(".symver old_foo,foo@VERS_1.1"); ++ __asm__(".symver old_foo1,foo@VERS_1.2"); ++ __asm__(".symver new_foo,foo@@VERS_2.0"); ++ ++ In this example, `foo@' represents the symbol `foo' bound to the ++unspecified base version of the symbol. The source file that contains ++this example would define 4 C functions: `original_foo', `old_foo', ++`old_foo1', and `new_foo'. ++ ++ When you have multiple definitions of a given symbol, there needs to ++be some way to specify a default version to which external references to ++this symbol will be bound. You can do this with the `foo@@VERS_2.0' ++type of `.symver' directive. You can only declare one version of a ++symbol as the default in this manner; otherwise you would effectively ++have multiple definitions of the same symbol. ++ ++ If you wish to bind a reference to a specific version of the symbol ++within the shared library, you can use the aliases of convenience ++(i.e., `old_foo'), or you can use the `.symver' directive to ++specifically bind to an external version of the function in question. ++ ++ You can also specify the language in the version script: ++ ++ VERSION extern "lang" { version-script-commands } ++ ++ The supported `lang's are `C', `C++', and `Java'. The linker will ++iterate over the list of symbols at the link time and demangle them ++according to `lang' before matching them to the patterns specified in ++`version-script-commands'. ++ ++ Demangled names may contains spaces and other special characters. As ++described above, you can use a glob pattern to match demangled names, ++or you can use a double-quoted string to match the string exactly. In ++the latter case, be aware that minor differences (such as differing ++whitespace) between the version script and the demangler output will ++cause a mismatch. As the exact string generated by the demangler might ++change in the future, even if the mangled name does not, you should ++check that all of your version directives are behaving as you expect ++when you upgrade. ++ ++ ++File: ld.info, Node: Expressions, Next: Implicit Linker Scripts, Prev: VERSION, Up: Scripts ++ ++3.10 Expressions in Linker Scripts ++================================== ++ ++The syntax for expressions in the linker script language is identical to ++that of C expressions. All expressions are evaluated as integers. All ++expressions are evaluated in the same size, which is 32 bits if both the ++host and target are 32 bits, and is otherwise 64 bits. ++ ++ You can use and set symbol values in expressions. ++ ++ The linker defines several special purpose builtin functions for use ++in expressions. ++ ++* Menu: ++ ++* Constants:: Constants ++* Symbols:: Symbol Names ++* Orphan Sections:: Orphan Sections ++* Location Counter:: The Location Counter ++* Operators:: Operators ++* Evaluation:: Evaluation ++* Expression Section:: The Section of an Expression ++* Builtin Functions:: Builtin Functions ++ ++ ++File: ld.info, Node: Constants, Next: Symbols, Up: Expressions ++ ++3.10.1 Constants ++---------------- ++ ++All constants are integers. ++ ++ As in C, the linker considers an integer beginning with `0' to be ++octal, and an integer beginning with `0x' or `0X' to be hexadecimal. ++The linker considers other integers to be decimal. ++ ++ In addition, you can use the suffixes `K' and `M' to scale a ++constant by `1024' or `1024*1024' respectively. For example, the ++following all refer to the same quantity: ++ _fourk_1 = 4K; ++ _fourk_2 = 4096; ++ _fourk_3 = 0x1000; ++ ++ ++File: ld.info, Node: Symbols, Next: Orphan Sections, Prev: Constants, Up: Expressions ++ ++3.10.2 Symbol Names ++------------------- ++ ++Unless quoted, symbol names start with a letter, underscore, or period ++and may include letters, digits, underscores, periods, and hyphens. ++Unquoted symbol names must not conflict with any keywords. You can ++specify a symbol which contains odd characters or has the same name as a ++keyword by surrounding the symbol name in double quotes: ++ "SECTION" = 9; ++ "with a space" = "also with a space" + 10; ++ ++ Since symbols can contain many non-alphabetic characters, it is ++safest to delimit symbols with spaces. For example, `A-B' is one ++symbol, whereas `A - B' is an expression involving subtraction. ++ ++ ++File: ld.info, Node: Orphan Sections, Next: Location Counter, Prev: Symbols, Up: Expressions ++ ++3.10.3 Orphan Sections ++---------------------- ++ ++Orphan sections are sections present in the input files which are not ++explicitly placed into the output file by the linker script. The ++linker will still copy these sections into the output file, but it has ++to guess as to where they should be placed. The linker uses a simple ++heuristic to do this. It attempts to place orphan sections after ++non-orphan sections of the same attribute, such as code vs data, ++loadable vs non-loadable, etc. If there is not enough room to do this ++then it places at the end of the file. ++ ++ For ELF targets, the attribute of the section includes section type ++as well as section flag. ++ ++ ++File: ld.info, Node: Location Counter, Next: Operators, Prev: Orphan Sections, Up: Expressions ++ ++3.10.4 The Location Counter ++--------------------------- ++ ++The special linker variable "dot" `.' always contains the current ++output location counter. Since the `.' always refers to a location in ++an output section, it may only appear in an expression within a ++`SECTIONS' command. The `.' symbol may appear anywhere that an ++ordinary symbol is allowed in an expression. ++ ++ Assigning a value to `.' will cause the location counter to be ++moved. This may be used to create holes in the output section. The ++location counter may never be moved backwards. ++ ++ SECTIONS ++ { ++ output : ++ { ++ file1(.text) ++ . = . + 1000; ++ file2(.text) ++ . += 1000; ++ file3(.text) ++ } = 0x12345678; ++ } ++ In the previous example, the `.text' section from `file1' is located ++at the beginning of the output section `output'. It is followed by a ++1000 byte gap. Then the `.text' section from `file2' appears, also ++with a 1000 byte gap following before the `.text' section from `file3'. ++The notation `= 0x12345678' specifies what data to write in the gaps ++(*note Output Section Fill::). ++ ++ Note: `.' actually refers to the byte offset from the start of the ++current containing object. Normally this is the `SECTIONS' statement, ++whose start address is 0, hence `.' can be used as an absolute address. ++If `.' is used inside a section description however, it refers to the ++byte offset from the start of that section, not an absolute address. ++Thus in a script like this: ++ ++ SECTIONS ++ { ++ . = 0x100 ++ .text: { ++ *(.text) ++ . = 0x200 ++ } ++ . = 0x500 ++ .data: { ++ *(.data) ++ . += 0x600 ++ } ++ } ++ ++ The `.text' section will be assigned a starting address of 0x100 and ++a size of exactly 0x200 bytes, even if there is not enough data in the ++`.text' input sections to fill this area. (If there is too much data, ++an error will be produced because this would be an attempt to move `.' ++backwards). The `.data' section will start at 0x500 and it will have ++an extra 0x600 bytes worth of space after the end of the values from ++the `.data' input sections and before the end of the `.data' output ++section itself. ++ ++ Setting symbols to the value of the location counter outside of an ++output section statement can result in unexpected values if the linker ++needs to place orphan sections. For example, given the following: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ If the linker needs to place some input section, e.g. `.rodata', not ++mentioned in the script, it might choose to place that section between ++`.text' and `.data'. You might think the linker should place `.rodata' ++on the blank line in the above script, but blank lines are of no ++particular significance to the linker. As well, the linker doesn't ++associate the above symbol names with their sections. Instead, it ++assumes that all assignments or other statements belong to the previous ++output section, except for the special case of an assignment to `.'. ++I.e., the linker will place the orphan `.rodata' section as if the ++script was written as follows: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .rodata: { *(.rodata) } ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ This may or may not be the script author's intention for the value of ++`start_of_data'. One way to influence the orphan section placement is ++to assign the location counter to itself, as the linker assumes that an ++assignment to `.' is setting the start address of a following output ++section and thus should be grouped with that section. So you could ++write: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ . = . ; ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ Now, the orphan `.rodata' section will be placed between ++`end_of_text' and `start_of_data'. ++ ++ ++File: ld.info, Node: Operators, Next: Evaluation, Prev: Location Counter, Up: Expressions ++ ++3.10.5 Operators ++---------------- ++ ++The linker recognizes the standard C set of arithmetic operators, with ++the standard bindings and precedence levels: ++ precedence associativity Operators Notes ++ (highest) ++ 1 left ! - ~ (1) ++ 2 left * / % ++ 3 left + - ++ 4 left >> << ++ 5 left == != > < <= >= ++ 6 left & ++ 7 left | ++ 8 left && ++ 9 left || ++ 10 right ? : ++ 11 right &= += -= *= /= (2) ++ (lowest) ++ Notes: (1) Prefix operators (2) *Note Assignments::. ++ ++ ++File: ld.info, Node: Evaluation, Next: Expression Section, Prev: Operators, Up: Expressions ++ ++3.10.6 Evaluation ++----------------- ++ ++The linker evaluates expressions lazily. It only computes the value of ++an expression when absolutely necessary. ++ ++ The linker needs some information, such as the value of the start ++address of the first section, and the origins and lengths of memory ++regions, in order to do any linking at all. These values are computed ++as soon as possible when the linker reads in the linker script. ++ ++ However, other values (such as symbol values) are not known or needed ++until after storage allocation. Such values are evaluated later, when ++other information (such as the sizes of output sections) is available ++for use in the symbol assignment expression. ++ ++ The sizes of sections cannot be known until after allocation, so ++assignments dependent upon these are not performed until after ++allocation. ++ ++ Some expressions, such as those depending upon the location counter ++`.', must be evaluated during section allocation. ++ ++ If the result of an expression is required, but the value is not ++available, then an error results. For example, a script like the ++following ++ SECTIONS ++ { ++ .text 9+this_isnt_constant : ++ { *(.text) } ++ } ++will cause the error message `non constant expression for initial ++address'. ++ ++ ++File: ld.info, Node: Expression Section, Next: Builtin Functions, Prev: Evaluation, Up: Expressions ++ ++3.10.7 The Section of an Expression ++----------------------------------- ++ ++When the linker evaluates an expression, the result is either absolute ++or relative to some section. A relative expression is expressed as a ++fixed offset from the base of a section. ++ ++ The position of the expression within the linker script determines ++whether it is absolute or relative. An expression which appears within ++an output section definition is relative to the base of the output ++section. An expression which appears elsewhere will be absolute. ++ ++ A symbol set to a relative expression will be relocatable if you ++request relocatable output using the `-r' option. That means that a ++further link operation may change the value of the symbol. The symbol's ++section will be the section of the relative expression. ++ ++ A symbol set to an absolute expression will retain the same value ++through any further link operation. The symbol will be absolute, and ++will not have any particular associated section. ++ ++ You can use the builtin function `ABSOLUTE' to force an expression ++to be absolute when it would otherwise be relative. For example, to ++create an absolute symbol set to the address of the end of the output ++section `.data': ++ SECTIONS ++ { ++ .data : { *(.data) _edata = ABSOLUTE(.); } ++ } ++ If `ABSOLUTE' were not used, `_edata' would be relative to the ++`.data' section. ++ ++ ++File: ld.info, Node: Builtin Functions, Prev: Expression Section, Up: Expressions ++ ++3.10.8 Builtin Functions ++------------------------ ++ ++The linker script language includes a number of builtin functions for ++use in linker script expressions. ++ ++`ABSOLUTE(EXP)' ++ Return the absolute (non-relocatable, as opposed to non-negative) ++ value of the expression EXP. Primarily useful to assign an ++ absolute value to a symbol within a section definition, where ++ symbol values are normally section relative. *Note Expression ++ Section::. ++ ++`ADDR(SECTION)' ++ Return the absolute address (the VMA) of the named SECTION. Your ++ script must previously have defined the location of that section. ++ In the following example, `symbol_1' and `symbol_2' are assigned ++ identical values: ++ SECTIONS { ... ++ .output1 : ++ { ++ start_of_output_1 = ABSOLUTE(.); ++ ... ++ } ++ .output : ++ { ++ symbol_1 = ADDR(.output1); ++ symbol_2 = start_of_output_1; ++ } ++ ... } ++ ++`ALIGN(ALIGN)' ++`ALIGN(EXP,ALIGN)' ++ Return the location counter (`.') or arbitrary expression aligned ++ to the next ALIGN boundary. The single operand `ALIGN' doesn't ++ change the value of the location counter--it just does arithmetic ++ on it. The two operand `ALIGN' allows an arbitrary expression to ++ be aligned upwards (`ALIGN(ALIGN)' is equivalent to `ALIGN(., ++ ALIGN)'). ++ ++ Here is an example which aligns the output `.data' section to the ++ next `0x2000' byte boundary after the preceding section and sets a ++ variable within the section to the next `0x8000' boundary after the ++ input sections: ++ SECTIONS { ... ++ .data ALIGN(0x2000): { ++ *(.data) ++ variable = ALIGN(0x8000); ++ } ++ ... } ++ The first use of `ALIGN' in this example specifies the ++ location of a section because it is used as the optional ADDRESS ++ attribute of a section definition (*note Output Section ++ Address::). The second use of `ALIGN' is used to defines the ++ value of a symbol. ++ ++ The builtin function `NEXT' is closely related to `ALIGN'. ++ ++`BLOCK(EXP)' ++ This is a synonym for `ALIGN', for compatibility with older linker ++ scripts. It is most often seen when setting the address of an ++ output section. ++ ++`DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE)' ++ This is equivalent to either ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - 1))) ++ or ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - COMMONPAGESIZE))) ++ depending on whether the latter uses fewer COMMONPAGESIZE sized ++ pages for the data segment (area between the result of this ++ expression and `DATA_SEGMENT_END') than the former or not. If the ++ latter form is used, it means COMMONPAGESIZE bytes of runtime ++ memory will be saved at the expense of up to COMMONPAGESIZE wasted ++ bytes in the on-disk file. ++ ++ This expression can only be used directly in `SECTIONS' commands, ++ not in any output section descriptions and only once in the linker ++ script. COMMONPAGESIZE should be less or equal to MAXPAGESIZE and ++ should be the system page size the object wants to be optimized ++ for (while still working on system page sizes up to MAXPAGESIZE). ++ ++ Example: ++ . = DATA_SEGMENT_ALIGN(0x10000, 0x2000); ++ ++`DATA_SEGMENT_END(EXP)' ++ This defines the end of data segment for `DATA_SEGMENT_ALIGN' ++ evaluation purposes. ++ ++ . = DATA_SEGMENT_END(.); ++ ++`DATA_SEGMENT_RELRO_END(OFFSET, EXP)' ++ This defines the end of the `PT_GNU_RELRO' segment when `-z relro' ++ option is used. Second argument is returned. When `-z relro' ++ option is not present, `DATA_SEGMENT_RELRO_END' does nothing, ++ otherwise `DATA_SEGMENT_ALIGN' is padded so that EXP + OFFSET is ++ aligned to the most commonly used page boundary for particular ++ target. If present in the linker script, it must always come in ++ between `DATA_SEGMENT_ALIGN' and `DATA_SEGMENT_END'. ++ ++ . = DATA_SEGMENT_RELRO_END(24, .); ++ ++`DEFINED(SYMBOL)' ++ Return 1 if SYMBOL is in the linker global symbol table and is ++ defined before the statement using DEFINED in the script, otherwise ++ return 0. You can use this function to provide default values for ++ symbols. For example, the following script fragment shows how to ++ set a global symbol `begin' to the first location in the `.text' ++ section--but if a symbol called `begin' already existed, its value ++ is preserved: ++ ++ SECTIONS { ... ++ .text : { ++ begin = DEFINED(begin) ? begin : . ; ++ ... ++ } ++ ... ++ } ++ ++`LENGTH(MEMORY)' ++ Return the length of the memory region named MEMORY. ++ ++`LOADADDR(SECTION)' ++ Return the absolute LMA of the named SECTION. This is normally ++ the same as `ADDR', but it may be different if the `AT' attribute ++ is used in the output section definition (*note Output Section ++ LMA::). ++ ++`MAX(EXP1, EXP2)' ++ Returns the maximum of EXP1 and EXP2. ++ ++`MIN(EXP1, EXP2)' ++ Returns the minimum of EXP1 and EXP2. ++ ++`NEXT(EXP)' ++ Return the next unallocated address that is a multiple of EXP. ++ This function is closely related to `ALIGN(EXP)'; unless you use ++ the `MEMORY' command to define discontinuous memory for the output ++ file, the two functions are equivalent. ++ ++`ORIGIN(MEMORY)' ++ Return the origin of the memory region named MEMORY. ++ ++`SEGMENT_START(SEGMENT, DEFAULT)' ++ Return the base address of the named SEGMENT. If an explicit ++ value has been given for this segment (with a command-line `-T' ++ option) that value will be returned; otherwise the value will be ++ DEFAULT. At present, the `-T' command-line option can only be ++ used to set the base address for the "text", "data", and "bss" ++ sections, but you use `SEGMENT_START' with any segment name. ++ ++`SIZEOF(SECTION)' ++ Return the size in bytes of the named SECTION, if that section has ++ been allocated. If the section has not been allocated when this is ++ evaluated, the linker will report an error. In the following ++ example, `symbol_1' and `symbol_2' are assigned identical values: ++ SECTIONS{ ... ++ .output { ++ .start = . ; ++ ... ++ .end = . ; ++ } ++ symbol_1 = .end - .start ; ++ symbol_2 = SIZEOF(.output); ++ ... } ++ ++`SIZEOF_HEADERS' ++`sizeof_headers' ++ Return the size in bytes of the output file's headers. This is ++ information which appears at the start of the output file. You ++ can use this number when setting the start address of the first ++ section, if you choose, to facilitate paging. ++ ++ When producing an ELF output file, if the linker script uses the ++ `SIZEOF_HEADERS' builtin function, the linker must compute the ++ number of program headers before it has determined all the section ++ addresses and sizes. If the linker later discovers that it needs ++ additional program headers, it will report an error `not enough ++ room for program headers'. To avoid this error, you must avoid ++ using the `SIZEOF_HEADERS' function, or you must rework your linker ++ script to avoid forcing the linker to use additional program ++ headers, or you must define the program headers yourself using the ++ `PHDRS' command (*note PHDRS::). ++ ++ ++File: ld.info, Node: Implicit Linker Scripts, Prev: Expressions, Up: Scripts ++ ++3.11 Implicit Linker Scripts ++============================ ++ ++If you specify a linker input file which the linker can not recognize as ++an object file or an archive file, it will try to read the file as a ++linker script. If the file can not be parsed as a linker script, the ++linker will report an error. ++ ++ An implicit linker script will not replace the default linker script. ++ ++ Typically an implicit linker script would contain only symbol ++assignments, or the `INPUT', `GROUP', or `VERSION' commands. ++ ++ Any input files read because of an implicit linker script will be ++read at the position in the command line where the implicit linker ++script was read. This can affect archive searching. ++ ++ ++File: ld.info, Node: Machine Dependent, Next: BFD, Prev: Scripts, Up: Top ++ ++4 Machine Dependent Features ++**************************** ++ ++`ld' has additional features on some platforms; the following sections ++describe them. Machines where `ld' has no additional functionality are ++not listed. ++ ++* Menu: ++ ++ ++* H8/300:: `ld' and the H8/300 ++ ++* i960:: `ld' and the Intel 960 family ++ ++* ARM:: `ld' and the ARM family ++ ++* HPPA ELF32:: `ld' and HPPA 32-bit ELF ++ ++* MMIX:: `ld' and MMIX ++ ++* MSP430:: `ld' and MSP430 ++ ++* PowerPC ELF32:: `ld' and PowerPC 32-bit ELF Support ++ ++* PowerPC64 ELF64:: `ld' and PowerPC64 64-bit ELF Support ++ ++* TI COFF:: `ld' and TI COFF ++ ++* WIN32:: `ld' and WIN32 (cygwin/mingw) ++ ++* Xtensa:: `ld' and Xtensa Processors ++ ++ ++File: ld.info, Node: H8/300, Next: i960, Up: Machine Dependent ++ ++4.1 `ld' and the H8/300 ++======================= ++ ++For the H8/300, `ld' can perform these global optimizations when you ++specify the `--relax' command-line option. ++ ++_relaxing address modes_ ++ `ld' finds all `jsr' and `jmp' instructions whose targets are ++ within eight bits, and turns them into eight-bit program-counter ++ relative `bsr' and `bra' instructions, respectively. ++ ++_synthesizing instructions_ ++ `ld' finds all `mov.b' instructions which use the sixteen-bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use the eight-bit address form. (That is: the ++ linker turns `mov.b `@'AA:16' into `mov.b `@'AA:8' whenever the ++ address AA is in the top page of memory). ++ ++_bit manipulation instructions_ ++ `ld' finds all bit manipulation instructions like `band, bclr, ++ biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, ++ bxor' which use 32 bit and 16 bit absolute address form, but refer ++ to the top page of memory, and changes them to use the 8 bit ++ address form. (That is: the linker turns `bset #xx:3,`@'AA:32' ++ into `bset #xx:3,`@'AA:8' whenever the address AA is in the top ++ page of memory). ++ ++_system control instructions_ ++ `ld' finds all `ldc.w, stc.w' instrcutions which use the 32 bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use 16 bit address form. (That is: the linker ++ turns `ldc.w `@'AA:32,ccr' into `ldc.w `@'AA:16,ccr' whenever the ++ address AA is in the top page of memory). ++ ++ ++File: ld.info, Node: i960, Next: ARM, Prev: H8/300, Up: Machine Dependent ++ ++4.2 `ld' and the Intel 960 Family ++================================= ++ ++You can use the `-AARCHITECTURE' command line option to specify one of ++the two-letter names identifying members of the 960 family; the option ++specifies the desired output target, and warns of any incompatible ++instructions in the input files. It also modifies the linker's search ++strategy for archive libraries, to support the use of libraries ++specific to each particular architecture, by including in the search ++loop names suffixed with the string identifying the architecture. ++ ++ For example, if your `ld' command line included `-ACA' as well as ++`-ltry', the linker would look (in its built-in search paths, and in ++any paths you specify with `-L') for a library with the names ++ ++ try ++ libtry.a ++ tryca ++ libtryca.a ++ ++The first two possibilities would be considered in any event; the last ++two are due to the use of `-ACA'. ++ ++ You can meaningfully use `-A' more than once on a command line, since ++the 960 architecture family allows combination of target architectures; ++each use will add another pair of name variants to search for when `-l' ++specifies a library. ++ ++ `ld' supports the `--relax' option for the i960 family. If you ++specify `--relax', `ld' finds all `balx' and `calx' instructions whose ++targets are within 24 bits, and turns them into 24-bit program-counter ++relative `bal' and `cal' instructions, respectively. `ld' also turns ++`cal' instructions into `bal' instructions when it determines that the ++target subroutine is a leaf routine (that is, the target subroutine does ++not itself call any subroutines). ++ ++ ++File: ld.info, Node: ARM, Next: HPPA ELF32, Prev: i960, Up: Machine Dependent ++ ++4.3 `ld' and the ARM family ++=========================== ++ ++For the ARM, `ld' will generate code stubs to allow functions calls ++betweem ARM and Thumb code. These stubs only work with code that has ++been compiled and assembled with the `-mthumb-interwork' command line ++option. If it is necessary to link with old ARM object files or ++libraries, which have not been compiled with the -mthumb-interwork ++option then the `--support-old-code' command line switch should be ++given to the linker. This will make it generate larger stub functions ++which will work with non-interworking aware ARM code. Note, however, ++the linker does not support generating stubs for function calls to ++non-interworking aware Thumb code. ++ ++ The `--thumb-entry' switch is a duplicate of the generic `--entry' ++switch, in that it sets the program's starting address. But it also ++sets the bottom bit of the address, so that it can be branched to using ++a BX instruction, and the program will start executing in Thumb mode ++straight away. ++ ++ The `--be8' switch instructs `ld' to generate BE8 format ++executables. This option is only valid when linking big-endian objects. ++The resulting image will contain big-endian data and little-endian code. ++ ++ The `R_ARM_TARGET1' relocation is typically used for entries in the ++`.init_array' section. It is interpreted as either `R_ARM_REL32' or ++`R_ARM_ABS32', depending on the target. The `--target1-rel' and ++`--target1-abs' switches override the default. ++ ++ The `--target2=type' switch overrides the default definition of the ++`R_ARM_TARGET2' relocation. Valid values for `type', their meanings, ++and target defaults are as follows: ++`rel' ++ `R_ARM_REL32' (arm*-*-elf, arm*-*-eabi) ++ ++`abs' ++ `R_ARM_ABS32' (arm*-*-symbianelf) ++ ++`got-rel' ++ `R_ARM_GOT_PREL' (arm*-*-linux, arm*-*-*bsd) ++ ++ The `R_ARM_V4BX' relocation (defined by the ARM AAELF specification) ++enables objects compiled for the ARMv4 architecture to be ++interworking-safe when linked with other objects compiled for ARMv4t, ++but also allows pure ARMv4 binaries to be built from the same ARMv4 ++objects. ++ ++ In the latter case, the switch `--fix-v4bx' must be passed to the ++linker, which causes v4t `BX rM' instructions to be rewritten as `MOV ++PC,rM', since v4 processors do not have a `BX' instruction. ++ ++ In the former case, the switch should not be used, and `R_ARM_V4BX' ++relocations are ignored. ++ ++ The `--use-blx' switch enables the linker to use ARM/Thumb BLX ++instructions (available on ARMv5t and above) in various situations. ++Currently it is used to perform calls via the PLT from Thumb code using ++BLX rather than using BX and a mode-switching stub before each PLT ++entry. This should lead to such calls executing slightly faster. ++ ++ This option is enabled implicitly for SymbianOS, so there is no need ++to specify it if you are using that target. ++ ++ ++File: ld.info, Node: HPPA ELF32, Next: MMIX, Prev: ARM, Up: Machine Dependent ++ ++4.4 `ld' and HPPA 32-bit ELF Support ++==================================== ++ ++When generating a shared library, `ld' will by default generate import ++stubs suitable for use with a single sub-space application. The ++`--multi-subspace' switch causes `ld' to generate export stubs, and ++different (larger) import stubs suitable for use with multiple ++sub-spaces. ++ ++ Long branch stubs and import/export stubs are placed by `ld' in stub ++sections located between groups of input sections. `--stub-group-size' ++specifies the maximum size of a group of input sections handled by one ++stub section. Since branch offsets are signed, a stub section may ++serve two groups of input sections, one group before the stub section, ++and one group after it. However, when using conditional branches that ++require stubs, it may be better (for branch prediction) that stub ++sections only serve one group of input sections. A negative value for ++`N' chooses this scheme, ensuring that branches to stubs always use a ++negative offset. Two special values of `N' are recognized, `1' and ++`-1'. These both instruct `ld' to automatically size input section ++groups for the branch types detected, with the same behaviour regarding ++stub placement as other positive or negative values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++single input section larger than the group size specified will of course ++create a larger group (of one section). If input sections are too ++large, it may not be possible for a branch to reach its stub. ++ ++ ++File: ld.info, Node: MMIX, Next: MSP430, Prev: HPPA ELF32, Up: Machine Dependent ++ ++4.5 `ld' and MMIX ++================= ++ ++For MMIX, there is a choice of generating `ELF' object files or `mmo' ++object files when linking. The simulator `mmix' understands the `mmo' ++format. The binutils `objcopy' utility can translate between the two ++formats. ++ ++ There is one special section, the `.MMIX.reg_contents' section. ++Contents in this section is assumed to correspond to that of global ++registers, and symbols referring to it are translated to special ++symbols, equal to registers. In a final link, the start address of the ++`.MMIX.reg_contents' section corresponds to the first allocated global ++register multiplied by 8. Register `$255' is not included in this ++section; it is always set to the program entry, which is at the symbol ++`Main' for `mmo' files. ++ ++ Symbols with the prefix `__.MMIX.start.', for example ++`__.MMIX.start..text' and `__.MMIX.start..data' are special; there must ++be only one each, even if they are local. The default linker script ++uses these to set the default start address of a section. ++ ++ Initial and trailing multiples of zero-valued 32-bit words in a ++section, are left out from an mmo file. ++ ++ ++File: ld.info, Node: MSP430, Next: PowerPC ELF32, Prev: MMIX, Up: Machine Dependent ++ ++4.6 `ld' and MSP430 ++=================== ++ ++For the MSP430 it is possible to select the MPU architecture. The flag ++`-m [mpu type]' will select an appropriate linker script for selected ++MPU type. (To get a list of known MPUs just pass `-m help' option to ++the linker). ++ ++ The linker will recognize some extra sections which are MSP430 ++specific: ++ ++``.vectors'' ++ Defines a portion of ROM where interrupt vectors located. ++ ++``.bootloader'' ++ Defines the bootloader portion of the ROM (if applicable). Any ++ code in this section will be uploaded to the MPU. ++ ++``.infomem'' ++ Defines an information memory section (if applicable). Any code in ++ this section will be uploaded to the MPU. ++ ++``.infomemnobits'' ++ This is the same as the `.infomem' section except that any code in ++ this section will not be uploaded to the MPU. ++ ++``.noinit'' ++ Denotes a portion of RAM located above `.bss' section. ++ ++ The last two sections are used by gcc. ++ ++ ++File: ld.info, Node: PowerPC ELF32, Next: PowerPC64 ELF64, Prev: MSP430, Up: Machine Dependent ++ ++4.7 `ld' and PowerPC 32-bit ELF Support ++======================================= ++ ++Branches on PowerPC processors are limited to a signed 26-bit ++displacement, which may result in `ld' giving `relocation truncated to ++fit' errors with very large programs. `--relax' enables the generation ++of trampolines that can access the entire 32-bit address space. These ++trampolines are inserted at section boundaries, so may not themselves ++be reachable if an input section exceeds 33M in size. ++ ++`--bss-plt' ++ Current PowerPC GCC accepts a `-msecure-plt' option that generates ++ code capable of using a newer PLT and GOT layout that has the ++ security advantage of no executable section ever needing to be ++ writable and no writable section ever being executable. PowerPC ++ `ld' will generate this layout, including stubs to access the PLT, ++ if all input files (including startup and static libraries) were ++ compiled with `-msecure-plt'. `--bss-plt' forces the old BSS PLT ++ (and GOT layout) which can give slightly better performance. ++ ++`--sdata-got' ++ The new secure PLT and GOT are placed differently relative to other ++ sections compared to older BSS PLT and GOT placement. The ++ location of `.plt' must change because the new secure PLT is an ++ initialized section while the old PLT is uninitialized. The ++ reason for the `.got' change is more subtle: The new placement ++ allows `.got' to be read-only in applications linked with `-z ++ relro -z now'. However, this placement means that `.sdata' cannot ++ always be used in shared libraries, because the PowerPC ABI ++ accesses `.sdata' in shared libraries from the GOT pointer. ++ `--sdata-got' forces the old GOT placement. PowerPC GCC doesn't ++ use `.sdata' in shared libraries, so this option is really only ++ useful for other compilers that may do so. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--no-tls-optimize' ++ PowerPC `ld' normally performs some optimization of code sequences ++ used to access Thread-Local Storage. Use this option to disable ++ the optimization. ++ ++ ++File: ld.info, Node: PowerPC64 ELF64, Next: TI COFF, Prev: PowerPC ELF32, Up: Machine Dependent ++ ++4.8 `ld' and PowerPC64 64-bit ELF Support ++========================================= ++ ++`--stub-group-size' ++ Long branch stubs, PLT call stubs and TOC adjusting stubs are ++ placed by `ld' in stub sections located between groups of input ++ sections. `--stub-group-size' specifies the maximum size of a ++ group of input sections handled by one stub section. Since branch ++ offsets are signed, a stub section may serve two groups of input ++ sections, one group before the stub section, and one group after ++ it. However, when using conditional branches that require stubs, ++ it may be better (for branch prediction) that stub sections only ++ serve one group of input sections. A negative value for `N' ++ chooses this scheme, ensuring that branches to stubs always use a ++ negative offset. Two special values of `N' are recognized, `1' ++ and `-1'. These both instruct `ld' to automatically size input ++ section groups for the branch types detected, with the same ++ behaviour regarding stub placement as other positive or negative ++ values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++ single input section larger than the group size specified will of ++ course create a larger group (of one section). If input sections ++ are too large, it may not be possible for a branch to reach its ++ stub. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--dotsyms, --no-dotsyms' ++ These two options control how `ld' interprets version patterns in ++ a version script. Older PowerPC64 compilers emitted both a ++ function descriptor symbol with the same name as the function, and ++ a code entry symbol with the name prefixed by a dot (`.'). To ++ properly version a function `foo', the version script thus needs ++ to control both `foo' and `.foo'. The option `--dotsyms', on by ++ default, automatically adds the required dot-prefixed patterns. ++ Use `--no-dotsyms' to disable this feature. ++ ++`--no-tls-optimize' ++ PowerPC64 `ld' normally performs some optimization of code ++ sequences used to access Thread-Local Storage. Use this option to ++ disable the optimization. ++ ++`--no-opd-optimize' ++ PowerPC64 `ld' normally removes `.opd' section entries ++ corresponding to deleted link-once functions, or functions removed ++ by the action of `--gc-sections' or linker scrip `/DISCARD/'. Use ++ this option to disable `.opd' optimization. ++ ++`--non-overlapping-opd' ++ Some PowerPC64 compilers have an option to generate compressed ++ `.opd' entries spaced 16 bytes apart, overlapping the third word, ++ the static chain pointer (unused in C) with the first word of the ++ next entry. This option expands such entries to the full 24 bytes. ++ ++`--no-toc-optimize' ++ PowerPC64 `ld' normally removes unused `.toc' section entries. ++ Such entries are detected by examining relocations that reference ++ the TOC in code sections. A reloc in a deleted code section marks ++ a TOC word as unneeded, while a reloc in a kept code section marks ++ a TOC word as needed. Since the TOC may reference itself, TOC ++ relocs are also examined. TOC words marked as both needed and ++ unneeded will of course be kept. TOC words without any referencing ++ reloc are assumed to be part of a multi-word entry, and are kept or ++ discarded as per the nearest marked preceding word. This works ++ reliably for compiler generated code, but may be incorrect if ++ assembly code is used to insert TOC entries. Use this option to ++ disable the optimization. ++ ++`--no-multi-toc' ++ By default, PowerPC64 GCC generates code for a TOC model where TOC ++ entries are accessed with a 16-bit offset from r2. This limits the ++ total TOC size to 64K. PowerPC64 `ld' extends this limit by ++ grouping code sections such that each group uses less than 64K for ++ its TOC entries, then inserts r2 adjusting stubs between ++ inter-group calls. `ld' does not split apart input sections, so ++ cannot help if a single input file has a `.toc' section that ++ exceeds 64K, most likely from linking multiple files with `ld -r'. ++ Use this option to turn off this feature. ++ ++ ++File: ld.info, Node: TI COFF, Next: WIN32, Prev: PowerPC64 ELF64, Up: Machine Dependent ++ ++4.9 `ld''s Support for Various TI COFF Versions ++=============================================== ++ ++The `--format' switch allows selection of one of the various TI COFF ++versions. The latest of this writing is 2; versions 0 and 1 are also ++supported. The TI COFF versions also vary in header byte-order format; ++`ld' will read any version or byte order, but the output header format ++depends on the default specified by the specific target. ++ ++ ++File: ld.info, Node: WIN32, Next: Xtensa, Prev: TI COFF, Up: Machine Dependent ++ ++4.10 `ld' and WIN32 (cygwin/mingw) ++================================== ++ ++This section describes some of the win32 specific `ld' issues. See ++*Note Command Line Options: Options. for detailed decription of the ++command line options mentioned here. ++ ++_import libraries_ ++ The standard Windows linker creates and uses so-called import ++ libraries, which contains information for linking to dll's. They ++ are regular static archives and are handled as any other static ++ archive. The cygwin and mingw ports of `ld' have specific support ++ for creating such libraries provided with the `--out-implib' ++ command line option. ++ ++_exporting DLL symbols_ ++ The cygwin/mingw `ld' has several ways to export symbols for dll's. ++ ++ _using auto-export functionality_ ++ By default `ld' exports symbols with the auto-export ++ functionality, which is controlled by the following command ++ line options: ++ ++ * -export-all-symbols [This is the default] ++ ++ * -exclude-symbols ++ ++ * -exclude-libs ++ ++ If, however, `--export-all-symbols' is not given explicitly ++ on the command line, then the default auto-export behavior ++ will be _disabled_ if either of the following are true: ++ ++ * A DEF file is used. ++ ++ * Any symbol in any object file was marked with the ++ __declspec(dllexport) attribute. ++ ++ _using a DEF file_ ++ Another way of exporting symbols is using a DEF file. A DEF ++ file is an ASCII file containing definitions of symbols which ++ should be exported when a dll is created. Usually it is ++ named `.def' and is added as any other object file ++ to the linker's command line. The file's name must end in ++ `.def' or `.DEF'. ++ ++ gcc -o .def ++ ++ Using a DEF file turns off the normal auto-export behavior, ++ unless the `--export-all-symbols' option is also used. ++ ++ Here is an example of a DEF file for a shared library called ++ `xyz.dll': ++ ++ LIBRARY "xyz.dll" BASE=0x20000000 ++ ++ EXPORTS ++ foo ++ bar ++ _bar = bar ++ another_foo = abc.dll.afoo ++ var1 DATA ++ ++ This example defines a DLL with a non-default base address ++ and five symbols in the export table. The third exported ++ symbol `_bar' is an alias for the second. The fourth symbol, ++ `another_foo' is resolved by "forwarding" to another module ++ and treating it as an alias for `afoo' exported from the DLL ++ `abc.dll'. The final symbol `var1' is declared to be a data ++ object. ++ ++ The optional `LIBRARY ' command indicates the _internal_ ++ name of the output DLL. If `' does not include a suffix, ++ the default library suffix, `.DLL' is appended. ++ ++ When the .DEF file is used to build an application. rather ++ than a library, the `NAME ' command shoud be used ++ instead of `LIBRARY'. If `' does not include a suffix, ++ the default executable suffix, `.EXE' is appended. ++ ++ With either `LIBRARY ' or `NAME ' the optional ++ specification `BASE = ' may be used to specify a ++ non-default base address for the image. ++ ++ If neither `LIBRARY ' nor `NAME ' is specified, ++ or they specify an empty string, the internal name is the ++ same as the filename specified on the command line. ++ ++ The complete specification of an export symbol is: ++ ++ EXPORTS ++ ( ( ( [ = ] ) ++ | ( = . )) ++ [ @ ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) * ++ ++ Declares `' as an exported symbol from the DLL, or ++ declares `' as an exported alias for `'; or ++ declares `' as a "forward" alias for the symbol ++ `' in the DLL `'. Optionally, ++ the symbol may be exported by the specified ordinal ++ `' alias. ++ ++ The optional keywords that follow the declaration indicate: ++ ++ `NONAME': Do not put the symbol name in the DLL's export ++ table. It will still be exported by its ordinal alias ++ (either the value specified by the .def specification or, ++ otherwise, the value assigned by the linker). The symbol ++ name, however, does remain visible in the import library (if ++ any), unless `PRIVATE' is also specified. ++ ++ `DATA': The symbol is a variable or object, rather than a ++ function. The import lib will export only an indirect ++ reference to `foo' as the symbol `_imp__foo' (ie, `foo' must ++ be resolved as `*_imp__foo'). ++ ++ `CONSTANT': Like `DATA', but put the undecorated `foo' as ++ well as `_imp__foo' into the import library. Both refer to the ++ read-only import address table's pointer to the variable, not ++ to the variable itself. This can be dangerous. If the user ++ code fails to add the `dllimport' attribute and also fails to ++ explicitly add the extra indirection that the use of the ++ attribute enforces, the application will behave unexpectedly. ++ ++ `PRIVATE': Put the symbol in the DLL's export table, but do ++ not put it into the static import library used to resolve ++ imports at link time. The symbol can still be imported using ++ the `LoadLibrary/GetProcAddress' API at runtime or by by ++ using the GNU ld extension of linking directly to the DLL ++ without an import library. ++ ++ See ld/deffilep.y in the binutils sources for the full ++ specification of other DEF file statements ++ ++ While linking a shared dll, `ld' is able to create a DEF file ++ with the `--output-def ' command line option. ++ ++ _Using decorations_ ++ Another way of marking symbols for export is to modify the ++ source code itself, so that when building the DLL each symbol ++ to be exported is declared as: ++ ++ __declspec(dllexport) int a_variable ++ __declspec(dllexport) void a_function(int with_args) ++ ++ All such symbols will be exported from the DLL. If, however, ++ any of the object files in the DLL contain symbols decorated ++ in this way, then the normal auto-export behavior is ++ disabled, unless the `--export-all-symbols' option is also ++ used. ++ ++ Note that object files that wish to access these symbols must ++ _not_ decorate them with dllexport. Instead, they should use ++ dllimport, instead: ++ ++ __declspec(dllimport) int a_variable ++ __declspec(dllimport) void a_function(int with_args) ++ ++ This complicates the structure of library header files, ++ because when included by the library itself the header must ++ declare the variables and functions as dllexport, but when ++ included by client code the header must declare them as ++ dllimport. There are a number of idioms that are typically ++ used to do this; often client code can omit the __declspec() ++ declaration completely. See `--enable-auto-import' and ++ `automatic data imports' for more imformation. ++ ++_automatic data imports_ ++ The standard Windows dll format supports data imports from dlls ++ only by adding special decorations (dllimport/dllexport), which ++ let the compiler produce specific assembler instructions to deal ++ with this issue. This increases the effort necessary to port ++ existing Un*x code to these platforms, especially for large c++ ++ libraries and applications. The auto-import feature, which was ++ initially provided by Paul Sokolovsky, allows one to omit the ++ decorations to archieve a behavior that conforms to that on ++ POSIX/Un*x platforms. This feature is enabled with the ++ `--enable-auto-import' command-line option, although it is enabled ++ by default on cygwin/mingw. The `--enable-auto-import' option ++ itself now serves mainly to suppress any warnings that are ++ ordinarily emitted when linked objects trigger the feature's use. ++ ++ auto-import of variables does not always work flawlessly without ++ additional assistance. Sometimes, you will see this message ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ The `--enable-auto-import' documentation explains why this error ++ occurs, and several methods that can be used to overcome this ++ difficulty. One of these methods is the _runtime pseudo-relocs_ ++ feature, described below. ++ ++ For complex variables imported from DLLs (such as structs or ++ classes), object files typically contain a base address for the ++ variable and an offset (_addend_) within the variable-to specify a ++ particular field or public member, for instance. Unfortunately, ++ the runtime loader used in win32 environments is incapable of ++ fixing these references at runtime without the additional ++ information supplied by dllimport/dllexport decorations. The ++ standard auto-import feature described above is unable to resolve ++ these references. ++ ++ The `--enable-runtime-pseudo-relocs' switch allows these ++ references to be resolved without error, while leaving the task of ++ adjusting the references themselves (with their non-zero addends) ++ to specialized code provided by the runtime environment. Recent ++ versions of the cygwin and mingw environments and compilers ++ provide this runtime support; older versions do not. However, the ++ support is only necessary on the developer's platform; the ++ compiled result will run without error on an older system. ++ ++ `--enable-runtime-pseudo-relocs' is not the default; it must be ++ explicitly enabled as needed. ++ ++_direct linking to a dll_ ++ The cygwin/mingw ports of `ld' support the direct linking, ++ including data symbols, to a dll without the usage of any import ++ libraries. This is much faster and uses much less memory than ++ does the traditional import library method, expecially when ++ linking large libraries or applications. When `ld' creates an ++ import lib, each function or variable exported from the dll is ++ stored in its own bfd, even though a single bfd could contain many ++ exports. The overhead involved in storing, loading, and ++ processing so many bfd's is quite large, and explains the ++ tremendous time, memory, and storage needed to link against ++ particularly large or complex libraries when using import libs. ++ ++ Linking directly to a dll uses no extra command-line switches ++ other than `-L' and `-l', because `ld' already searches for a ++ number of names to match each library. All that is needed from ++ the developer's perspective is an understanding of this search, in ++ order to force ld to select the dll instead of an import library. ++ ++ For instance, when ld is called with the argument `-lxxx' it will ++ attempt to find, in the first directory of its search path, ++ ++ libxxx.dll.a ++ xxx.dll.a ++ libxxx.a ++ cygxxx.dll (*) ++ libxxx.dll ++ xxx.dll ++ ++ before moving on to the next directory in the search path. ++ ++ (*) Actually, this is not `cygxxx.dll' but in fact is ++ `xxx.dll', where `' is set by the `ld' option ++ `--dll-search-prefix='. In the case of cygwin, the ++ standard gcc spec file includes `--dll-search-prefix=cyg', so in ++ effect we actually search for `cygxxx.dll'. ++ ++ Other win32-based unix environments, such as mingw or pw32, may ++ use other `'es, although at present only cygwin makes use ++ of this feature. It was originally intended to help avoid name ++ conflicts among dll's built for the various win32/un*x ++ environments, so that (for example) two versions of a zlib dll ++ could coexist on the same machine. ++ ++ The generic cygwin/mingw path layout uses a `bin' directory for ++ applications and dll's and a `lib' directory for the import ++ libraries (using cygwin nomenclature): ++ ++ bin/ ++ cygxxx.dll ++ lib/ ++ libxxx.dll.a (in case of dll's) ++ libxxx.a (in case of static archive) ++ ++ Linking directly to a dll without using the import library can be ++ done two ways: ++ ++ 1. Use the dll directly by adding the `bin' path to the link line ++ gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx ++ ++ However, as the dll's often have version numbers appended to their ++ names (`cygncurses-5.dll') this will often fail, unless one ++ specifies `-L../bin -lncurses-5' to include the version. Import ++ libs are generally not versioned, and do not have this difficulty. ++ ++ 2. Create a symbolic link from the dll to a file in the `lib' ++ directory according to the above mentioned search pattern. This ++ should be used to avoid unwanted changes in the tools needed for ++ making the app/dll. ++ ++ ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a] ++ ++ Then you can link without any make environment changes. ++ ++ gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx ++ ++ This technique also avoids the version number problems, because ++ the following is perfectly legal ++ ++ bin/ ++ cygxxx-5.dll ++ lib/ ++ libxxx.dll.a -> ../bin/cygxxx-5.dll ++ ++ Linking directly to a dll without using an import lib will work ++ even when auto-import features are exercised, and even when ++ `--enable-runtime-pseudo-relocs' is used. ++ ++ Given the improvements in speed and memory usage, one might ++ justifiably wonder why import libraries are used at all. There ++ are two reasons: ++ ++ 1. Until recently, the link-directly-to-dll functionality did _not_ ++ work with auto-imported data. ++ ++ 2. Sometimes it is necessary to include pure static objects within ++ the import library (which otherwise contains only bfd's for ++ indirection symbols that point to the exports of a dll). Again, ++ the import lib for the cygwin kernel makes use of this ability, ++ and it is not possible to do this without an import lib. ++ ++ So, import libs are not going away. But the ability to replace ++ true import libs with a simple symbolic link to (or a copy of) a ++ dll, in most cases, is a useful addition to the suite of tools ++ binutils makes available to the win32 developer. Given the ++ massive improvements in memory requirements during linking, storage ++ requirements, and linking speed, we expect that many developers ++ will soon begin to use this feature whenever possible. ++ ++_symbol aliasing_ ++ ++ _adding additional names_ ++ Sometimes, it is useful to export symbols with additional ++ names. A symbol `foo' will be exported as `foo', but it can ++ also be exported as `_foo' by using special directives in the ++ DEF file when creating the dll. This will affect also the ++ optional created import library. Consider the following DEF ++ file: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ foo ++ _foo = foo ++ ++ The line `_foo = foo' maps the symbol `foo' to `_foo'. ++ ++ Another method for creating a symbol alias is to create it in ++ the source code using the "weak" attribute: ++ ++ void foo () { /* Do something. */; } ++ void _foo () __attribute__ ((weak, alias ("foo"))); ++ ++ See the gcc manual for more information about attributes and ++ weak symbols. ++ ++ _renaming symbols_ ++ Sometimes it is useful to rename exports. For instance, the ++ cygwin kernel does this regularly. A symbol `_foo' can be ++ exported as `foo' but not as `_foo' by using special ++ directives in the DEF file. (This will also affect the import ++ library, if it is created). In the following example: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ _foo = foo ++ ++ The line `_foo = foo' maps the exported symbol `foo' to ++ `_foo'. ++ ++ Note: using a DEF file disables the default auto-export behavior, ++ unless the `--export-all-symbols' command line option is used. ++ If, however, you are trying to rename symbols, then you should list ++ _all_ desired exports in the DEF file, including the symbols that ++ are not being renamed, and do _not_ use the `--export-all-symbols' ++ option. If you list only the renamed symbols in the DEF file, and ++ use `--export-all-symbols' to handle the other symbols, then the ++ both the new names _and_ the original names for the renamed ++ symbols will be exported. In effect, you'd be aliasing those ++ symbols, not renaming them, which is probably not what you wanted. ++ ++_weak externals_ ++ The Windows object format, PE, specifies a form of weak symbols ++ called weak externals. When a weak symbol is linked and the ++ symbol is not defined, the weak symbol becomes an alias for some ++ other symbol. There are three variants of weak externals: ++ * Definition is searched for in objects and libraries, ++ historically called lazy externals. ++ ++ * Definition is searched for only in other objects, not in ++ libraries. This form is not presently implemented. ++ ++ * No search; the symbol is an alias. This form is not presently ++ implemented. ++ As a GNU extension, weak symbols that do not specify an alternate ++ symbol are supported. If the symbol is undefined when linking, ++ the symbol uses a default value. ++ ++ ++File: ld.info, Node: Xtensa, Prev: WIN32, Up: Machine Dependent ++ ++4.11 `ld' and Xtensa Processors ++=============================== ++ ++The default `ld' behavior for Xtensa processors is to interpret ++`SECTIONS' commands so that lists of explicitly named sections in a ++specification with a wildcard file will be interleaved when necessary to ++keep literal pools within the range of PC-relative load offsets. For ++example, with the command: ++ ++ SECTIONS ++ { ++ .text : { ++ *(.literal .text) ++ } ++ } ++ ++`ld' may interleave some of the `.literal' and `.text' sections from ++different object files to ensure that the literal pools are within the ++range of PC-relative load offsets. A valid interleaving might place ++the `.literal' sections from an initial group of files followed by the ++`.text' sections of that group of files. Then, the `.literal' sections ++from the rest of the files and the `.text' sections from the rest of ++the files would follow. ++ ++ Relaxation is enabled by default for the Xtensa version of `ld' and ++provides two important link-time optimizations. The first optimization ++is to combine identical literal values to reduce code size. A redundant ++literal will be removed and all the `L32R' instructions that use it ++will be changed to reference an identical literal, as long as the ++location of the replacement literal is within the offset range of all ++the `L32R' instructions. The second optimization is to remove ++unnecessary overhead from assembler-generated "longcall" sequences of ++`L32R'/`CALLXN' when the target functions are within range of direct ++`CALLN' instructions. ++ ++ For each of these cases where an indirect call sequence can be ++optimized to a direct call, the linker will change the `CALLXN' ++instruction to a `CALLN' instruction, remove the `L32R' instruction, ++and remove the literal referenced by the `L32R' instruction if it is ++not used for anything else. Removing the `L32R' instruction always ++reduces code size but can potentially hurt performance by changing the ++alignment of subsequent branch targets. By default, the linker will ++always preserve alignments, either by switching some instructions ++between 24-bit encodings and the equivalent density instructions or by ++inserting a no-op in place of the `L32R' instruction that was removed. ++If code size is more important than performance, the `--size-opt' ++option can be used to prevent the linker from widening density ++instructions or inserting no-ops, except in a few cases where no-ops ++are required for correctness. ++ ++ The following Xtensa-specific command-line options can be used to ++control the linker: ++ ++`--no-relax' ++ Since the Xtensa version of `ld' enables the `--relax' option by ++ default, the `--no-relax' option is provided to disable relaxation. ++ ++`--size-opt' ++ When optimizing indirect calls to direct calls, optimize for code ++ size more than performance. With this option, the linker will not ++ insert no-ops or widen density instructions to preserve branch ++ target alignment. There may still be some cases where no-ops are ++ required to preserve the correctness of the code. ++ ++ ++File: ld.info, Node: BFD, Next: Reporting Bugs, Prev: Machine Dependent, Up: Top ++ ++5 BFD ++***** ++ ++The linker accesses object and archive files using the BFD libraries. ++These libraries allow the linker to use the same routines to operate on ++object files whatever the object file format. A different object file ++format can be supported simply by creating a new BFD back end and adding ++it to the library. To conserve runtime memory, however, the linker and ++associated tools are usually configured to support only a subset of the ++object file formats available. You can use `objdump -i' (*note ++objdump: (binutils.info)objdump.) to list all the formats available for ++your configuration. ++ ++ As with most implementations, BFD is a compromise between several ++conflicting requirements. The major factor influencing BFD design was ++efficiency: any time used converting between formats is time which ++would not have been spent had BFD not been involved. This is partly ++offset by abstraction payback; since BFD simplifies applications and ++back ends, more time and care may be spent optimizing algorithms for a ++greater speed. ++ ++ One minor artifact of the BFD solution which you should bear in mind ++is the potential for information loss. There are two places where ++useful information can be lost using the BFD mechanism: during ++conversion and during output. *Note BFD information loss::. ++ ++* Menu: ++ ++* BFD outline:: How it works: an outline of BFD ++ ++ ++File: ld.info, Node: BFD outline, Up: BFD ++ ++5.1 How It Works: An Outline of BFD ++=================================== ++ ++When an object file is opened, BFD subroutines automatically determine ++the format of the input object file. They then build a descriptor in ++memory with pointers to routines that will be used to access elements of ++the object file's data structures. ++ ++ As different information from the object files is required, BFD ++reads from different sections of the file and processes them. For ++example, a very common operation for the linker is processing symbol ++tables. Each BFD back end provides a routine for converting between ++the object file's representation of symbols and an internal canonical ++format. When the linker asks for the symbol table of an object file, it ++calls through a memory pointer to the routine from the relevant BFD ++back end which reads and converts the table into a canonical form. The ++linker then operates upon the canonical form. When the link is finished ++and the linker writes the output file's symbol table, another BFD back ++end routine is called to take the newly created symbol table and ++convert it into the chosen output format. ++ ++* Menu: ++ ++* BFD information loss:: Information Loss ++* Canonical format:: The BFD canonical object-file format ++ ++ ++File: ld.info, Node: BFD information loss, Next: Canonical format, Up: BFD outline ++ ++5.1.1 Information Loss ++---------------------- ++ ++_Information can be lost during output._ The output formats supported ++by BFD do not provide identical facilities, and information which can ++be described in one form has nowhere to go in another format. One ++example of this is alignment information in `b.out'. There is nowhere ++in an `a.out' format file to store alignment information on the ++contained data, so when a file is linked from `b.out' and an `a.out' ++image is produced, alignment information will not propagate to the ++output file. (The linker will still use the alignment information ++internally, so the link is performed correctly). ++ ++ Another example is COFF section names. COFF files may contain an ++unlimited number of sections, each one with a textual section name. If ++the target of the link is a format which does not have many sections ++(e.g., `a.out') or has sections without names (e.g., the Oasys format), ++the link cannot be done simply. You can circumvent this problem by ++describing the desired input-to-output section mapping with the linker ++command language. ++ ++ _Information can be lost during canonicalization._ The BFD internal ++canonical form of the external formats is not exhaustive; there are ++structures in input formats for which there is no direct representation ++internally. This means that the BFD back ends cannot maintain all ++possible data richness through the transformation between external to ++internal and back to external formats. ++ ++ This limitation is only a problem when an application reads one ++format and writes another. Each BFD back end is responsible for ++maintaining as much data as possible, and the internal BFD canonical ++form has structures which are opaque to the BFD core, and exported only ++to the back ends. When a file is read in one format, the canonical form ++is generated for BFD and the application. At the same time, the back ++end saves away any information which may otherwise be lost. If the data ++is then written back in the same format, the back end routine will be ++able to use the canonical form provided by the BFD core as well as the ++information it prepared earlier. Since there is a great deal of ++commonality between back ends, there is no information lost when ++linking or copying big endian COFF to little endian COFF, or `a.out' to ++`b.out'. When a mixture of formats is linked, the information is only ++lost from the files whose format differs from the destination. ++ ++ ++File: ld.info, Node: Canonical format, Prev: BFD information loss, Up: BFD outline ++ ++5.1.2 The BFD canonical object-file format ++------------------------------------------ ++ ++The greatest potential for loss of information occurs when there is the ++least overlap between the information provided by the source format, ++that stored by the canonical format, and that needed by the destination ++format. A brief description of the canonical form may help you ++understand which kinds of data you can count on preserving across ++conversions. ++ ++_files_ ++ Information stored on a per-file basis includes target machine ++ architecture, particular implementation format type, a demand ++ pageable bit, and a write protected bit. Information like Unix ++ magic numbers is not stored here--only the magic numbers' meaning, ++ so a `ZMAGIC' file would have both the demand pageable bit and the ++ write protected text bit set. The byte order of the target is ++ stored on a per-file basis, so that big- and little-endian object ++ files may be used with one another. ++ ++_sections_ ++ Each section in the input file contains the name of the section, ++ the section's original address in the object file, size and ++ alignment information, various flags, and pointers into other BFD ++ data structures. ++ ++_symbols_ ++ Each symbol contains a pointer to the information for the object ++ file which originally defined it, its name, its value, and various ++ flag bits. When a BFD back end reads in a symbol table, it ++ relocates all symbols to make them relative to the base of the ++ section where they were defined. Doing this ensures that each ++ symbol points to its containing section. Each symbol also has a ++ varying amount of hidden private data for the BFD back end. Since ++ the symbol points to the original file, the private data format ++ for that symbol is accessible. `ld' can operate on a collection ++ of symbols of wildly different formats without problems. ++ ++ Normal global and simple local symbols are maintained on output, ++ so an output file (no matter its format) will retain symbols ++ pointing to functions and to global, static, and common variables. ++ Some symbol information is not worth retaining; in `a.out', type ++ information is stored in the symbol table as long symbol names. ++ This information would be useless to most COFF debuggers; the ++ linker has command line switches to allow users to throw it away. ++ ++ There is one word of type information within the symbol, so if the ++ format supports symbol type information within symbols (for ++ example, COFF, IEEE, Oasys) and the type is simple enough to fit ++ within one word (nearly everything but aggregates), the ++ information will be preserved. ++ ++_relocation level_ ++ Each canonical BFD relocation record contains a pointer to the ++ symbol to relocate to, the offset of the data to relocate, the ++ section the data is in, and a pointer to a relocation type ++ descriptor. Relocation is performed by passing messages through ++ the relocation type descriptor and the symbol pointer. Therefore, ++ relocations can be performed on output data using a relocation ++ method that is only available in one of the input formats. For ++ instance, Oasys provides a byte relocation format. A relocation ++ record requesting this relocation type would point indirectly to a ++ routine to perform this, so the relocation may be performed on a ++ byte being written to a 68k COFF file, even though 68k COFF has no ++ such relocation type. ++ ++_line numbers_ ++ Object formats can contain, for debugging purposes, some form of ++ mapping between symbols, source line numbers, and addresses in the ++ output file. These addresses have to be relocated along with the ++ symbol information. Each symbol with an associated list of line ++ number records points to the first record of the list. The head ++ of a line number list consists of a pointer to the symbol, which ++ allows finding out the address of the function whose line number ++ is being described. The rest of the list is made up of pairs: ++ offsets into the section and line numbers. Any format which can ++ simply derive this information can pass it successfully between ++ formats (COFF, IEEE and Oasys). ++ ++ ++File: ld.info, Node: Reporting Bugs, Next: MRI, Prev: BFD, Up: Top ++ ++6 Reporting Bugs ++**************** ++ ++Your bug reports play an essential role in making `ld' reliable. ++ ++ Reporting a bug may help you by bringing a solution to your problem, ++or it may not. But in any case the principal function of a bug report ++is to help the entire community by making the next version of `ld' work ++better. Bug reports are your contribution to the maintenance of `ld'. ++ ++ In order for a bug report to serve its purpose, you must include the ++information that enables us to fix the bug. ++ ++* Menu: ++ ++* Bug Criteria:: Have you found a bug? ++* Bug Reporting:: How to report bugs ++ ++ ++File: ld.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs ++ ++6.1 Have You Found a Bug? ++========================= ++ ++If you are not sure whether you have found a bug, here are some ++guidelines: ++ ++ * If the linker gets a fatal signal, for any input whatever, that is ++ a `ld' bug. Reliable linkers never crash. ++ ++ * If `ld' produces an error message for valid input, that is a bug. ++ ++ * If `ld' does not produce an error message for invalid input, that ++ may be a bug. In the general case, the linker can not verify that ++ object files are correct. ++ ++ * If you are an experienced user of linkers, your suggestions for ++ improvement of `ld' are welcome in any case. ++ ++ ++File: ld.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs ++ ++6.2 How to Report Bugs ++====================== ++ ++A number of companies and individuals offer support for GNU products. ++If you obtained `ld' from a support organization, we recommend you ++contact that organization first. ++ ++ You can find contact information for many support companies and ++individuals in the file `etc/SERVICE' in the GNU Emacs distribution. ++ ++ Otherwise, send bug reports for `ld' to `bug-binutils@gnu.org'. ++ ++ The fundamental principle of reporting bugs usefully is this: ++*report all the facts*. If you are not sure whether to state a fact or ++leave it out, state it! ++ ++ Often people omit facts because they think they know what causes the ++problem and assume that some details do not matter. Thus, you might ++assume that the name of a symbol you use in an example does not matter. ++Well, probably it does not, but one cannot be sure. Perhaps the bug ++is a stray memory reference which happens to fetch from the location ++where that name is stored in memory; perhaps, if the name were ++different, the contents of that location would fool the linker into ++doing the right thing despite the bug. Play it safe and give a ++specific, complete example. That is the easiest thing for you to do, ++and the most helpful. ++ ++ Keep in mind that the purpose of a bug report is to enable us to fix ++the bug if it is new to us. Therefore, always write your bug reports ++on the assumption that the bug has not been reported previously. ++ ++ Sometimes people give a few sketchy facts and ask, "Does this ring a ++bell?" This cannot help us fix a bug, so it is basically useless. We ++respond by asking for enough details to enable us to investigate. You ++might as well expedite matters by sending them to begin with. ++ ++ To enable us to fix the bug, you should include all these things: ++ ++ * The version of `ld'. `ld' announces it if you start it with the ++ `--version' argument. ++ ++ Without this, we will not know whether there is any point in ++ looking for the bug in the current version of `ld'. ++ ++ * Any patches you may have applied to the `ld' source, including any ++ patches made to the `BFD' library. ++ ++ * The type of machine you are using, and the operating system name ++ and version number. ++ ++ * What compiler (and its version) was used to compile `ld'--e.g. ++ "`gcc-2.7'". ++ ++ * The command arguments you gave the linker to link your example and ++ observe the bug. To guarantee you will not omit something ++ important, list them all. A copy of the Makefile (or the output ++ from make) is sufficient. ++ ++ If we were to try to guess the arguments, we would probably guess ++ wrong and then we might not encounter the bug. ++ ++ * A complete input file, or set of input files, that will reproduce ++ the bug. It is generally most helpful to send the actual object ++ files provided that they are reasonably small. Say no more than ++ 10K. For bigger files you can either make them available by FTP ++ or HTTP or else state that you are willing to send the object ++ file(s) to whomever requests them. (Note - your email will be ++ going to a mailing list, so we do not want to clog it up with ++ large attachments). But small attachments are best. ++ ++ If the source files were assembled using `gas' or compiled using ++ `gcc', then it may be OK to send the source files rather than the ++ object files. In this case, be sure to say exactly what version of ++ `gas' or `gcc' was used to produce the object files. Also say how ++ `gas' or `gcc' were configured. ++ ++ * A description of what behavior you observe that you believe is ++ incorrect. For example, "It gets a fatal signal." ++ ++ Of course, if the bug is that `ld' gets a fatal signal, then we ++ will certainly notice it. But if the bug is incorrect output, we ++ might not notice unless it is glaringly wrong. You might as well ++ not give us a chance to make a mistake. ++ ++ Even if the problem you experience is a fatal signal, you should ++ still say so explicitly. Suppose something strange is going on, ++ such as, your copy of `ld' is out of synch, or you have ++ encountered a bug in the C library on your system. (This has ++ happened!) Your copy might crash and ours would not. If you told ++ us to expect a crash, then when ours fails to crash, we would know ++ that the bug was not happening for us. If you had not told us to ++ expect a crash, then we would not be able to draw any conclusion ++ from our observations. ++ ++ * If you wish to suggest changes to the `ld' source, send us context ++ diffs, as generated by `diff' with the `-u', `-c', or `-p' option. ++ Always send diffs from the old file to the new file. If you even ++ discuss something in the `ld' source, refer to it by context, not ++ by line number. ++ ++ The line numbers in our development sources will not match those ++ in your sources. Your line numbers would convey no useful ++ information to us. ++ ++ Here are some things that are not necessary: ++ ++ * A description of the envelope of the bug. ++ ++ Often people who encounter a bug spend a lot of time investigating ++ which changes to the input file will make the bug go away and which ++ changes will not affect it. ++ ++ This is often time consuming and not very useful, because the way ++ we will find the bug is by running a single example under the ++ debugger with breakpoints, not by pure deduction from a series of ++ examples. We recommend that you save your time for something else. ++ ++ Of course, if you can find a simpler example to report _instead_ ++ of the original one, that is a convenience for us. Errors in the ++ output will be easier to spot, running under the debugger will take ++ less time, and so on. ++ ++ However, simplification is not vital; if you do not want to do ++ this, report the bug anyway and send us the entire test case you ++ used. ++ ++ * A patch for the bug. ++ ++ A patch for the bug does help us if it is a good one. But do not ++ omit the necessary information, such as the test case, on the ++ assumption that a patch is all we need. We might see problems ++ with your patch and decide to fix the problem another way, or we ++ might not understand it at all. ++ ++ Sometimes with a program as complicated as `ld' it is very hard to ++ construct an example that will make the program follow a certain ++ path through the code. If you do not send us the example, we will ++ not be able to construct one, so we will not be able to verify ++ that the bug is fixed. ++ ++ And if we cannot understand what bug you are trying to fix, or why ++ your patch should be an improvement, we will not install it. A ++ test case will help us to understand. ++ ++ * A guess about what the bug is or what it depends on. ++ ++ Such guesses are usually wrong. Even we cannot guess right about ++ such things without first using the debugger to find the facts. ++ ++ ++File: ld.info, Node: MRI, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top ++ ++Appendix A MRI Compatible Script Files ++************************************** ++ ++To aid users making the transition to GNU `ld' from the MRI linker, ++`ld' can use MRI compatible linker scripts as an alternative to the ++more general-purpose linker scripting language described in *Note ++Scripts::. MRI compatible linker scripts have a much simpler command ++set than the scripting language otherwise used with `ld'. GNU `ld' ++supports the most commonly used MRI linker commands; these commands are ++described here. ++ ++ In general, MRI scripts aren't of much use with the `a.out' object ++file format, since it only has three sections and MRI scripts lack some ++features to make use of them. ++ ++ You can specify a file containing an MRI-compatible script using the ++`-c' command-line option. ++ ++ Each command in an MRI-compatible script occupies its own line; each ++command line starts with the keyword that identifies the command (though ++blank lines are also allowed for punctuation). If a line of an ++MRI-compatible script begins with an unrecognized keyword, `ld' issues ++a warning message, but continues processing the script. ++ ++ Lines beginning with `*' are comments. ++ ++ You can write these commands using all upper-case letters, or all ++lower case; for example, `chip' is the same as `CHIP'. The following ++list shows only the upper-case form of each command. ++ ++`ABSOLUTE SECNAME' ++`ABSOLUTE SECNAME, SECNAME, ... SECNAME' ++ Normally, `ld' includes in the output file all sections from all ++ the input files. However, in an MRI-compatible script, you can ++ use the `ABSOLUTE' command to restrict the sections that will be ++ present in your output program. If the `ABSOLUTE' command is used ++ at all in a script, then only the sections named explicitly in ++ `ABSOLUTE' commands will appear in the linker output. You can ++ still use other input sections (whatever you select on the command ++ line, or using `LOAD') to resolve addresses in the output file. ++ ++`ALIAS OUT-SECNAME, IN-SECNAME' ++ Use this command to place the data from input section IN-SECNAME ++ in a section called OUT-SECNAME in the linker output file. ++ ++ IN-SECNAME may be an integer. ++ ++`ALIGN SECNAME = EXPRESSION' ++ Align the section called SECNAME to EXPRESSION. The EXPRESSION ++ should be a power of two. ++ ++`BASE EXPRESSION' ++ Use the value of EXPRESSION as the lowest address (other than ++ absolute addresses) in the output file. ++ ++`CHIP EXPRESSION' ++`CHIP EXPRESSION, EXPRESSION' ++ This command does nothing; it is accepted only for compatibility. ++ ++`END' ++ This command does nothing whatever; it's only accepted for ++ compatibility. ++ ++`FORMAT OUTPUT-FORMAT' ++ Similar to the `OUTPUT_FORMAT' command in the more general linker ++ language, but restricted to one of these output formats: ++ ++ 1. S-records, if OUTPUT-FORMAT is `S' ++ ++ 2. IEEE, if OUTPUT-FORMAT is `IEEE' ++ ++ 3. COFF (the `coff-m68k' variant in BFD), if OUTPUT-FORMAT is ++ `COFF' ++ ++`LIST ANYTHING...' ++ Print (to the standard output file) a link map, as produced by the ++ `ld' command-line option `-M'. ++ ++ The keyword `LIST' may be followed by anything on the same line, ++ with no change in its effect. ++ ++`LOAD FILENAME' ++`LOAD FILENAME, FILENAME, ... FILENAME' ++ Include one or more object file FILENAME in the link; this has the ++ same effect as specifying FILENAME directly on the `ld' command ++ line. ++ ++`NAME OUTPUT-NAME' ++ OUTPUT-NAME is the name for the program produced by `ld'; the ++ MRI-compatible command `NAME' is equivalent to the command-line ++ option `-o' or the general script language command `OUTPUT'. ++ ++`ORDER SECNAME, SECNAME, ... SECNAME' ++`ORDER SECNAME SECNAME SECNAME' ++ Normally, `ld' orders the sections in its output file in the order ++ in which they first appear in the input files. In an ++ MRI-compatible script, you can override this ordering with the ++ `ORDER' command. The sections you list with `ORDER' will appear ++ first in your output file, in the order specified. ++ ++`PUBLIC NAME=EXPRESSION' ++`PUBLIC NAME,EXPRESSION' ++`PUBLIC NAME EXPRESSION' ++ Supply a value (EXPRESSION) for external symbol NAME used in the ++ linker input files. ++ ++`SECT SECNAME, EXPRESSION' ++`SECT SECNAME=EXPRESSION' ++`SECT SECNAME EXPRESSION' ++ You can use any of these three forms of the `SECT' command to ++ specify the start address (EXPRESSION) for section SECNAME. If ++ you have more than one `SECT' statement for the same SECNAME, only ++ the _first_ sets the start address. ++ ++ ++File: ld.info, Node: GNU Free Documentation License, Next: Index, Prev: MRI, Up: Top ++ ++Appendix B GNU Free Documentation License ++***************************************** ++ ++ Version 1.1, March 2000 ++ ++ Copyright (C) 2000, 2003 Free Software Foundation, Inc. ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ ++ 0. PREAMBLE ++ ++ The purpose of this License is to make a manual, textbook, or other ++ written document "free" in the sense of freedom: to assure everyone ++ the effective freedom to copy and redistribute it, with or without ++ modifying it, either commercially or noncommercially. Secondarily, ++ this License preserves for the author and publisher a way to get ++ credit for their work, while not being considered responsible for ++ modifications made by others. ++ ++ This License is a kind of "copyleft", which means that derivative ++ works of the document must themselves be free in the same sense. ++ It complements the GNU General Public License, which is a copyleft ++ license designed for free software. ++ ++ We have designed this License in order to use it for manuals for ++ free software, because free software needs free documentation: a ++ free program should come with manuals providing the same freedoms ++ that the software does. But this License is not limited to ++ software manuals; it can be used for any textual work, regardless ++ of subject matter or whether it is published as a printed book. ++ We recommend this License principally for works whose purpose is ++ instruction or reference. ++ ++ ++ 1. APPLICABILITY AND DEFINITIONS ++ ++ This License applies to any manual or other work that contains a ++ notice placed by the copyright holder saying it can be distributed ++ under the terms of this License. The "Document", below, refers to ++ any such manual or work. Any member of the public is a licensee, ++ and is addressed as "you." ++ ++ A "Modified Version" of the Document means any work containing the ++ Document or a portion of it, either copied verbatim, or with ++ modifications and/or translated into another language. ++ ++ A "Secondary Section" is a named appendix or a front-matter ++ section of the Document that deals exclusively with the ++ relationship of the publishers or authors of the Document to the ++ Document's overall subject (or to related matters) and contains ++ nothing that could fall directly within that overall subject. ++ (For example, if the Document is in part a textbook of ++ mathematics, a Secondary Section may not explain any mathematics.) ++ The relationship could be a matter of historical connection with ++ the subject or with related matters, or of legal, commercial, ++ philosophical, ethical or political position regarding them. ++ ++ The "Invariant Sections" are certain Secondary Sections whose ++ titles are designated, as being those of Invariant Sections, in ++ the notice that says that the Document is released under this ++ License. ++ ++ The "Cover Texts" are certain short passages of text that are ++ listed, as Front-Cover Texts or Back-Cover Texts, in the notice ++ that says that the Document is released under this License. ++ ++ A "Transparent" copy of the Document means a machine-readable copy, ++ represented in a format whose specification is available to the ++ general public, whose contents can be viewed and edited directly ++ and straightforwardly with generic text editors or (for images ++ composed of pixels) generic paint programs or (for drawings) some ++ widely available drawing editor, and that is suitable for input to ++ text formatters or for automatic translation to a variety of ++ formats suitable for input to text formatters. A copy made in an ++ otherwise Transparent file format whose markup has been designed ++ to thwart or discourage subsequent modification by readers is not ++ Transparent. A copy that is not "Transparent" is called "Opaque." ++ ++ Examples of suitable formats for Transparent copies include plain ++ ASCII without markup, Texinfo input format, LaTeX input format, ++ SGML or XML using a publicly available DTD, and ++ standard-conforming simple HTML designed for human modification. ++ Opaque formats include PostScript, PDF, proprietary formats that ++ can be read and edited only by proprietary word processors, SGML ++ or XML for which the DTD and/or processing tools are not generally ++ available, and the machine-generated HTML produced by some word ++ processors for output purposes only. ++ ++ The "Title Page" means, for a printed book, the title page itself, ++ plus such following pages as are needed to hold, legibly, the ++ material this License requires to appear in the title page. For ++ works in formats which do not have any title page as such, "Title ++ Page" means the text near the most prominent appearance of the ++ work's title, preceding the beginning of the body of the text. ++ ++ 2. VERBATIM COPYING ++ ++ You may copy and distribute the Document in any medium, either ++ commercially or noncommercially, provided that this License, the ++ copyright notices, and the license notice saying this License ++ applies to the Document are reproduced in all copies, and that you ++ add no other conditions whatsoever to those of this License. You ++ may not use technical measures to obstruct or control the reading ++ or further copying of the copies you make or distribute. However, ++ you may accept compensation in exchange for copies. If you ++ distribute a large enough number of copies you must also follow ++ the conditions in section 3. ++ ++ You may also lend copies, under the same conditions stated above, ++ and you may publicly display copies. ++ ++ 3. COPYING IN QUANTITY ++ ++ If you publish printed copies of the Document numbering more than ++ 100, and the Document's license notice requires Cover Texts, you ++ must enclose the copies in covers that carry, clearly and legibly, ++ all these Cover Texts: Front-Cover Texts on the front cover, and ++ Back-Cover Texts on the back cover. Both covers must also clearly ++ and legibly identify you as the publisher of these copies. The ++ front cover must present the full title with all words of the ++ title equally prominent and visible. You may add other material ++ on the covers in addition. Copying with changes limited to the ++ covers, as long as they preserve the title of the Document and ++ satisfy these conditions, can be treated as verbatim copying in ++ other respects. ++ ++ If the required texts for either cover are too voluminous to fit ++ legibly, you should put the first ones listed (as many as fit ++ reasonably) on the actual cover, and continue the rest onto ++ adjacent pages. ++ ++ If you publish or distribute Opaque copies of the Document ++ numbering more than 100, you must either include a ++ machine-readable Transparent copy along with each Opaque copy, or ++ state in or with each Opaque copy a publicly-accessible ++ computer-network location containing a complete Transparent copy ++ of the Document, free of added material, which the general ++ network-using public has access to download anonymously at no ++ charge using public-standard network protocols. If you use the ++ latter option, you must take reasonably prudent steps, when you ++ begin distribution of Opaque copies in quantity, to ensure that ++ this Transparent copy will remain thus accessible at the stated ++ location until at least one year after the last time you ++ distribute an Opaque copy (directly or through your agents or ++ retailers) of that edition to the public. ++ ++ It is requested, but not required, that you contact the authors of ++ the Document well before redistributing any large number of ++ copies, to give them a chance to provide you with an updated ++ version of the Document. ++ ++ 4. MODIFICATIONS ++ ++ You may copy and distribute a Modified Version of the Document ++ under the conditions of sections 2 and 3 above, provided that you ++ release the Modified Version under precisely this License, with ++ the Modified Version filling the role of the Document, thus ++ licensing distribution and modification of the Modified Version to ++ whoever possesses a copy of it. In addition, you must do these ++ things in the Modified Version: ++ ++ A. Use in the Title Page (and on the covers, if any) a title ++ distinct from that of the Document, and from those of previous ++ versions (which should, if there were any, be listed in the ++ History section of the Document). You may use the same title ++ as a previous version if the original publisher of that version ++ gives permission. ++ B. List on the Title Page, as authors, one or more persons or ++ entities responsible for authorship of the modifications in the ++ Modified Version, together with at least five of the principal ++ authors of the Document (all of its principal authors, if it ++ has less than five). ++ C. State on the Title page the name of the publisher of the ++ Modified Version, as the publisher. ++ D. Preserve all the copyright notices of the Document. ++ E. Add an appropriate copyright notice for your modifications ++ adjacent to the other copyright notices. ++ F. Include, immediately after the copyright notices, a license ++ notice giving the public permission to use the Modified Version ++ under the terms of this License, in the form shown in the ++ Addendum below. ++ G. Preserve in that license notice the full lists of Invariant ++ Sections and required Cover Texts given in the Document's ++ license notice. ++ H. Include an unaltered copy of this License. ++ I. Preserve the section entitled "History", and its title, and add ++ to it an item stating at least the title, year, new authors, and ++ publisher of the Modified Version as given on the Title Page. ++ If there is no section entitled "History" in the Document, ++ create one stating the title, year, authors, and publisher of ++ the Document as given on its Title Page, then add an item ++ describing the Modified Version as stated in the previous ++ sentence. ++ J. Preserve the network location, if any, given in the Document for ++ public access to a Transparent copy of the Document, and ++ likewise the network locations given in the Document for ++ previous versions it was based on. These may be placed in the ++ "History" section. You may omit a network location for a work ++ that was published at least four years before the Document ++ itself, or if the original publisher of the version it refers ++ to gives permission. ++ K. In any section entitled "Acknowledgements" or "Dedications", ++ preserve the section's title, and preserve in the section all the ++ substance and tone of each of the contributor acknowledgements ++ and/or dedications given therein. ++ L. Preserve all the Invariant Sections of the Document, ++ unaltered in their text and in their titles. Section numbers ++ or the equivalent are not considered part of the section titles. ++ M. Delete any section entitled "Endorsements." Such a section ++ may not be included in the Modified Version. ++ N. Do not retitle any existing section as "Endorsements" or to ++ conflict in title with any Invariant Section. ++ ++ If the Modified Version includes new front-matter sections or ++ appendices that qualify as Secondary Sections and contain no ++ material copied from the Document, you may at your option ++ designate some or all of these sections as invariant. To do this, ++ add their titles to the list of Invariant Sections in the Modified ++ Version's license notice. These titles must be distinct from any ++ other section titles. ++ ++ You may add a section entitled "Endorsements", provided it contains ++ nothing but endorsements of your Modified Version by various ++ parties-for example, statements of peer review or that the text has ++ been approved by an organization as the authoritative definition ++ of a standard. ++ ++ You may add a passage of up to five words as a Front-Cover Text, ++ and a passage of up to 25 words as a Back-Cover Text, to the end ++ of the list of Cover Texts in the Modified Version. Only one ++ passage of Front-Cover Text and one of Back-Cover Text may be ++ added by (or through arrangements made by) any one entity. If the ++ Document already includes a cover text for the same cover, ++ previously added by you or by arrangement made by the same entity ++ you are acting on behalf of, you may not add another; but you may ++ replace the old one, on explicit permission from the previous ++ publisher that added the old one. ++ ++ The author(s) and publisher(s) of the Document do not by this ++ License give permission to use their names for publicity for or to ++ assert or imply endorsement of any Modified Version. ++ ++ 5. COMBINING DOCUMENTS ++ ++ You may combine the Document with other documents released under ++ this License, under the terms defined in section 4 above for ++ modified versions, provided that you include in the combination ++ all of the Invariant Sections of all of the original documents, ++ unmodified, and list them all as Invariant Sections of your ++ combined work in its license notice. ++ ++ The combined work need only contain one copy of this License, and ++ multiple identical Invariant Sections may be replaced with a single ++ copy. If there are multiple Invariant Sections with the same name ++ but different contents, make the title of each such section unique ++ by adding at the end of it, in parentheses, the name of the ++ original author or publisher of that section if known, or else a ++ unique number. Make the same adjustment to the section titles in ++ the list of Invariant Sections in the license notice of the ++ combined work. ++ ++ In the combination, you must combine any sections entitled ++ "History" in the various original documents, forming one section ++ entitled "History"; likewise combine any sections entitled ++ "Acknowledgements", and any sections entitled "Dedications." You ++ must delete all sections entitled "Endorsements." ++ ++ 6. COLLECTIONS OF DOCUMENTS ++ ++ You may make a collection consisting of the Document and other ++ documents released under this License, and replace the individual ++ copies of this License in the various documents with a single copy ++ that is included in the collection, provided that you follow the ++ rules of this License for verbatim copying of each of the ++ documents in all other respects. ++ ++ You may extract a single document from such a collection, and ++ distribute it individually under this License, provided you insert ++ a copy of this License into the extracted document, and follow ++ this License in all other respects regarding verbatim copying of ++ that document. ++ ++ 7. AGGREGATION WITH INDEPENDENT WORKS ++ ++ A compilation of the Document or its derivatives with other ++ separate and independent documents or works, in or on a volume of ++ a storage or distribution medium, does not as a whole count as a ++ Modified Version of the Document, provided no compilation ++ copyright is claimed for the compilation. Such a compilation is ++ called an "aggregate", and this License does not apply to the ++ other self-contained works thus compiled with the Document, on ++ account of their being thus compiled, if they are not themselves ++ derivative works of the Document. ++ ++ If the Cover Text requirement of section 3 is applicable to these ++ copies of the Document, then if the Document is less than one ++ quarter of the entire aggregate, the Document's Cover Texts may be ++ placed on covers that surround only the Document within the ++ aggregate. Otherwise they must appear on covers around the whole ++ aggregate. ++ ++ 8. TRANSLATION ++ ++ Translation is considered a kind of modification, so you may ++ distribute translations of the Document under the terms of section ++ 4. Replacing Invariant Sections with translations requires special ++ permission from their copyright holders, but you may include ++ translations of some or all Invariant Sections in addition to the ++ original versions of these Invariant Sections. You may include a ++ translation of this License provided that you also include the ++ original English version of this License. In case of a ++ disagreement between the translation and the original English ++ version of this License, the original English version will prevail. ++ ++ 9. TERMINATION ++ ++ You may not copy, modify, sublicense, or distribute the Document ++ except as expressly provided for under this License. Any other ++ attempt to copy, modify, sublicense or distribute the Document is ++ void, and will automatically terminate your rights under this ++ License. However, parties who have received copies, or rights, ++ from you under this License will not have their licenses ++ terminated so long as such parties remain in full compliance. ++ ++ 10. FUTURE REVISIONS OF THIS LICENSE ++ ++ The Free Software Foundation may publish new, revised versions of ++ the GNU Free Documentation License from time to time. Such new ++ versions will be similar in spirit to the present version, but may ++ differ in detail to address new problems or concerns. See ++ http://www.gnu.org/copyleft/. ++ ++ Each version of the License is given a distinguishing version ++ number. If the Document specifies that a particular numbered ++ version of this License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that specified version or of any later version that has been ++ published (not as a draft) by the Free Software Foundation. If ++ the Document does not specify a version number of this License, ++ you may choose any version ever published (not as a draft) by the ++ Free Software Foundation. ++ ++ ++ADDENDUM: How to use this License for your documents ++==================================================== ++ ++To use this License in a document you have written, include a copy of ++the License in the document and put the following copyright and license ++notices just after the title page: ++ ++ Copyright (C) YEAR YOUR NAME. ++ Permission is granted to copy, distribute and/or modify this document ++ under the terms of the GNU Free Documentation License, Version 1.1 ++ or any later version published by the Free Software Foundation; ++ with the Invariant Sections being LIST THEIR TITLES, with the ++ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. ++ A copy of the license is included in the section entitled "GNU ++ Free Documentation License." ++ ++ If you have no Invariant Sections, write "with no Invariant Sections" ++instead of saying which ones are invariant. If you have no Front-Cover ++Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being ++LIST"; likewise for Back-Cover Texts. ++ ++ If your document contains nontrivial examples of program code, we ++recommend releasing these examples in parallel under your choice of ++free software license, such as the GNU General Public License, to ++permit their use in free software. ++ ++ ++File: ld.info, Node: Index, Prev: GNU Free Documentation License, Up: Top ++ ++Index ++***** ++ ++[index] ++* Menu: ++ ++* ": Symbols. (line 6) ++* -(: Options. (line 609) ++* --accept-unknown-input-arch: Options. (line 627) ++* --add-needed: Options. (line 649) ++* --add-stdcall-alias: Options. (line 1343) ++* --allow-multiple-definition: Options. (line 819) ++* --allow-shlib-undefined: Options. (line 825) ++* --architecture=ARCH: Options. (line 104) ++* --as-needed: Options. (line 637) ++* --auxiliary: Options. (line 205) ++* --base-file: Options. (line 1348) ++* --be8: ARM. (line 23) ++* --bss-plt: PowerPC ELF32. (line 13) ++* --check-sections: Options. (line 701) ++* --cref: Options. (line 711) ++* --default-imported-symver: Options. (line 853) ++* --default-symver: Options. (line 849) ++* --defsym SYMBOL=EXP: Options. (line 739) ++* --demangle[=STYLE]: Options. (line 752) ++* --disable-auto-image-base: Options. (line 1495) ++* --disable-auto-import: Options. (line 1624) ++* --disable-new-dtags: Options. (line 1295) ++* --disable-runtime-pseudo-reloc: Options. (line 1637) ++* --disable-stdcall-fixup: Options. (line 1358) ++* --discard-all: Options. (line 513) ++* --discard-locals: Options. (line 517) ++* --dll: Options. (line 1353) ++* --dll-search-prefix: Options. (line 1501) ++* --dotsyms: PowerPC64 ELF64. (line 33) ++* --dynamic-linker FILE: Options. (line 765) ++* --eh-frame-hdr: Options. (line 1291) ++* --emit-relocs: Options. (line 415) ++* --emit-stub-syms <1>: PowerPC64 ELF64. (line 29) ++* --emit-stub-syms: PowerPC ELF32. (line 37) ++* --enable-auto-image-base: Options. (line 1487) ++* --enable-auto-import: Options. (line 1510) ++* --enable-extra-pe-debug: Options. (line 1642) ++* --enable-new-dtags: Options. (line 1295) ++* --enable-runtime-pseudo-reloc: Options. (line 1629) ++* --enable-stdcall-fixup: Options. (line 1358) ++* --entry=ENTRY: Options. (line 158) ++* --error-unresolved-symbols: Options. (line 1244) ++* --exclude-libs: Options. (line 168) ++* --exclude-symbols: Options. (line 1400) ++* --export-all-symbols: Options. (line 1376) ++* --export-dynamic: Options. (line 179) ++* --fatal-warnings: Options. (line 771) ++* --file-alignment: Options. (line 1406) ++* --filter: Options. (line 226) ++* --fix-v4bx: ARM. (line 44) ++* --force-dynamic: Options. (line 424) ++* --force-exe-suffix: Options. (line 774) ++* --format=FORMAT: Options. (line 115) ++* --format=VERSION: TI COFF. (line 6) ++* --gc-sections: Options. (line 784) ++* --gpsize: Options. (line 259) ++* --hash-size=NUMBER: Options. (line 1304) ++* --heap: Options. (line 1412) ++* --help: Options. (line 792) ++* --image-base: Options. (line 1419) ++* --just-symbols=FILE: Options. (line 447) ++* --kill-at: Options. (line 1428) ++* --large-address-aware: Options. (line 1433) ++* --library-path=DIR: Options. (line 315) ++* --library=ARCHIVE: Options. (line 285) ++* --major-image-version: Options. (line 1442) ++* --major-os-version: Options. (line 1447) ++* --major-subsystem-version: Options. (line 1451) ++* --minor-image-version: Options. (line 1456) ++* --minor-os-version: Options. (line 1461) ++* --minor-subsystem-version: Options. (line 1465) ++* --mri-script=MRI-CMDFILE: Options. (line 139) ++* --multi-subspace: HPPA ELF32. (line 6) ++* --nmagic: Options. (line 384) ++* --no-accept-unknown-input-arch: Options. (line 627) ++* --no-add-needed: Options. (line 649) ++* --no-allow-shlib-undefined: Options. (line 825) ++* --no-as-needed: Options. (line 637) ++* --no-check-sections: Options. (line 701) ++* --no-define-common: Options. (line 723) ++* --no-demangle: Options. (line 752) ++* --no-dotsyms: PowerPC64 ELF64. (line 33) ++* --no-gc-sections: Options. (line 784) ++* --no-keep-memory: Options. (line 804) ++* --no-multi-toc: PowerPC64 ELF64. (line 74) ++* --no-omagic: Options. (line 398) ++* --no-opd-optimize: PowerPC64 ELF64. (line 48) ++* --no-relax: Xtensa. (line 56) ++* --no-tls-optimize <1>: PowerPC64 ELF64. (line 43) ++* --no-tls-optimize: PowerPC ELF32. (line 41) ++* --no-toc-optimize: PowerPC64 ELF64. (line 60) ++* --no-undefined: Options. (line 811) ++* --no-undefined-version: Options. (line 844) ++* --no-warn-mismatch: Options. (line 857) ++* --no-whole-archive: Options. (line 866) ++* --noinhibit-exec: Options. (line 870) ++* --non-overlapping-opd: PowerPC64 ELF64. (line 54) ++* --oformat: Options. (line 882) ++* --omagic: Options. (line 389) ++* --out-implib: Options. (line 1478) ++* --output-def: Options. (line 1470) ++* --output=OUTPUT: Options. (line 404) ++* --pic-executable: Options. (line 895) ++* --print-map: Options. (line 347) ++* --reduce-memory-overheads: Options. (line 1312) ++* --relax: Options. (line 911) ++* --relax on i960: i960. (line 31) ++* --relax on PowerPC: PowerPC ELF32. (line 6) ++* --relax on Xtensa: Xtensa. (line 27) ++* --relocatable: Options. (line 428) ++* --script=SCRIPT: Options. (line 471) ++* --sdata-got: PowerPC ELF32. (line 23) ++* --section-alignment: Options. (line 1647) ++* --section-start SECTIONNAME=ORG: Options. (line 1081) ++* --sort-common: Options. (line 1028) ++* --sort-section alignment: Options. (line 1038) ++* --sort-section name: Options. (line 1034) ++* --split-by-file: Options. (line 1042) ++* --split-by-reloc: Options. (line 1047) ++* --stack: Options. (line 1653) ++* --stats: Options. (line 1060) ++* --strip-all: Options. (line 458) ++* --strip-debug: Options. (line 462) ++* --stub-group-size: PowerPC64 ELF64. (line 6) ++* --stub-group-size=N: HPPA ELF32. (line 12) ++* --subsystem: Options. (line 1660) ++* --support-old-code: ARM. (line 6) ++* --sysroot: Options. (line 1064) ++* --target-help: Options. (line 796) ++* --target1-abs: ARM. (line 27) ++* --target1-rel: ARM. (line 27) ++* --target2=TYPE: ARM. (line 32) ++* --thumb-entry=ENTRY: ARM. (line 17) ++* --trace: Options. (line 467) ++* --trace-symbol=SYMBOL: Options. (line 522) ++* --traditional-format: Options. (line 1069) ++* --undefined=SYMBOL: Options. (line 480) ++* --unique[=SECTION]: Options. (line 498) ++* --unresolved-symbols: Options. (line 1096) ++* --use-blx: ARM. (line 57) ++* --verbose: Options. (line 1125) ++* --version: Options. (line 507) ++* --version-script=VERSION-SCRIPTFILE: Options. (line 1131) ++* --warn-common: Options. (line 1138) ++* --warn-constructors: Options. (line 1206) ++* --warn-multiple-gp: Options. (line 1211) ++* --warn-once: Options. (line 1225) ++* --warn-section-align: Options. (line 1229) ++* --warn-shared-textrel: Options. (line 1236) ++* --warn-unresolved-symbols: Options. (line 1239) ++* --whole-archive: Options. (line 1248) ++* --wrap: Options. (line 1262) ++* -AARCH: Options. (line 103) ++* -aKEYWORD: Options. (line 96) ++* -assert KEYWORD: Options. (line 659) ++* -b FORMAT: Options. (line 115) ++* -Bdynamic: Options. (line 662) ++* -Bgroup: Options. (line 672) ++* -Bshareable: Options. (line 1020) ++* -Bstatic: Options. (line 679) ++* -Bsymbolic: Options. (line 694) ++* -c MRI-CMDFILE: Options. (line 139) ++* -call_shared: Options. (line 662) ++* -d: Options. (line 149) ++* -dc: Options. (line 149) ++* -dn: Options. (line 679) ++* -dp: Options. (line 149) ++* -dy: Options. (line 662) ++* -E: Options. (line 179) ++* -e ENTRY: Options. (line 158) ++* -EB: Options. (line 198) ++* -EL: Options. (line 201) ++* -F: Options. (line 226) ++* -f: Options. (line 205) ++* -fini: Options. (line 250) ++* -G: Options. (line 259) ++* -g: Options. (line 256) ++* -hNAME: Options. (line 267) ++* -i: Options. (line 276) ++* -IFILE: Options. (line 765) ++* -init: Options. (line 279) ++* -lARCHIVE: Options. (line 285) ++* -LDIR: Options. (line 315) ++* -M: Options. (line 347) ++* -m EMULATION: Options. (line 337) ++* -Map: Options. (line 800) ++* -N: Options. (line 389) ++* -n: Options. (line 384) ++* -non_shared: Options. (line 679) ++* -nostdlib: Options. (line 876) ++* -O LEVEL: Options. (line 410) ++* -o OUTPUT: Options. (line 404) ++* -pie: Options. (line 895) ++* -q: Options. (line 415) ++* -qmagic: Options. (line 905) ++* -Qy: Options. (line 908) ++* -r: Options. (line 428) ++* -R FILE: Options. (line 447) ++* -rpath: Options. (line 945) ++* -rpath-link: Options. (line 967) ++* -S: Options. (line 462) ++* -s: Options. (line 458) ++* -shared: Options. (line 1020) ++* -soname=NAME: Options. (line 267) ++* -static: Options. (line 679) ++* -t: Options. (line 467) ++* -T SCRIPT: Options. (line 471) ++* -Tbss ORG: Options. (line 1090) ++* -Tdata ORG: Options. (line 1090) ++* -Ttext ORG: Options. (line 1090) ++* -u SYMBOL: Options. (line 480) ++* -Ur: Options. (line 488) ++* -V: Options. (line 507) ++* -v: Options. (line 507) ++* -X: Options. (line 517) ++* -x: Options. (line 513) ++* -Y PATH: Options. (line 531) ++* -y SYMBOL: Options. (line 522) ++* -z defs: Options. (line 811) ++* -z KEYWORD: Options. (line 535) ++* -z muldefs: Options. (line 819) ++* .: Location Counter. (line 6) ++* /DISCARD/: Output Section Discarding. ++ (line 18) ++* :PHDR: Output Section Phdr. ++ (line 6) ++* =FILLEXP: Output Section Fill. ++ (line 6) ++* >REGION: Output Section Region. ++ (line 6) ++* [COMMON]: Input Section Common. ++ (line 29) ++* ABSOLUTE (MRI): MRI. (line 33) ++* absolute and relocatable symbols: Expression Section. (line 6) ++* absolute expressions: Expression Section. (line 6) ++* ABSOLUTE(EXP): Builtin Functions. (line 10) ++* ADDR(SECTION): Builtin Functions. (line 17) ++* address, section: Output Section Address. ++ (line 6) ++* ALIAS (MRI): MRI. (line 44) ++* ALIGN (MRI): MRI. (line 50) ++* align expression: Builtin Functions. (line 36) ++* align location counter: Builtin Functions. (line 36) ++* ALIGN(ALIGN): Builtin Functions. (line 36) ++* ALIGN(EXP,ALIGN): Builtin Functions. (line 36) ++* ALIGN(SECTION_ALIGN): Forced Output Alignment. ++ (line 6) ++* allocating memory: MEMORY. (line 6) ++* architecture: Miscellaneous Commands. ++ (line 46) ++* architectures: Options. (line 103) ++* archive files, from cmd line: Options. (line 285) ++* archive search path in linker script: File Commands. (line 71) ++* arithmetic: Expressions. (line 6) ++* arithmetic operators: Operators. (line 6) ++* ARM interworking support: ARM. (line 6) ++* AS_NEEDED(FILES): File Commands. (line 51) ++* ASSERT: Miscellaneous Commands. ++ (line 9) ++* assertion in linker script: Miscellaneous Commands. ++ (line 9) ++* assignment in scripts: Assignments. (line 6) ++* AT(LMA): Output Section LMA. (line 6) ++* AT>LMA_REGION: Output Section LMA. (line 6) ++* automatic data imports: WIN32. (line 170) ++* back end: BFD. (line 6) ++* BASE (MRI): MRI. (line 54) ++* BE8: ARM. (line 23) ++* BFD canonical format: Canonical format. (line 11) ++* BFD requirements: BFD. (line 16) ++* big-endian objects: Options. (line 198) ++* binary input format: Options. (line 115) ++* BLOCK(EXP): Builtin Functions. (line 62) ++* bug criteria: Bug Criteria. (line 6) ++* bug reports: Bug Reporting. (line 6) ++* bugs in ld: Reporting Bugs. (line 6) ++* BYTE(EXPRESSION): Output Section Data. ++ (line 6) ++* C++ constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* CHIP (MRI): MRI. (line 58) ++* COLLECT_NO_DEMANGLE: Environment. (line 29) ++* combining symbols, warnings on: Options. (line 1138) ++* command files: Scripts. (line 6) ++* command line: Options. (line 6) ++* common allocation: Options. (line 149) ++* common allocation in linker script: Miscellaneous Commands. ++ (line 20) ++* common symbol placement: Input Section Common. ++ (line 6) ++* compatibility, MRI: Options. (line 139) ++* constants in linker scripts: Constants. (line 6) ++* CONSTRUCTORS: Output Section Keywords. ++ (line 19) ++* constructors: Options. (line 488) ++* constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* crash of linker: Bug Criteria. (line 9) ++* CREATE_OBJECT_SYMBOLS: Output Section Keywords. ++ (line 9) ++* creating a DEF file: WIN32. (line 137) ++* cross reference table: Options. (line 711) ++* cross references: Miscellaneous Commands. ++ (line 30) ++* current output location: Location Counter. (line 6) ++* data: Output Section Data. ++ (line 6) ++* DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE): Builtin Functions. ++ (line 67) ++* DATA_SEGMENT_END(EXP): Builtin Functions. (line 88) ++* DATA_SEGMENT_RELRO_END(OFFSET, EXP): Builtin Functions. (line 94) ++* dbx: Options. (line 1074) ++* DEF files, creating: Options. (line 1470) ++* default emulation: Environment. (line 21) ++* default input format: Environment. (line 9) ++* DEFINED(SYMBOL): Builtin Functions. (line 105) ++* deleting local symbols: Options. (line 513) ++* demangling, default: Environment. (line 29) ++* demangling, from command line: Options. (line 752) ++* direct linking to a dll: WIN32. (line 218) ++* discarding sections: Output Section Discarding. ++ (line 6) ++* discontinuous memory: MEMORY. (line 6) ++* DLLs, creating: Options. (line 1376) ++* DLLs, linking to: Options. (line 1501) ++* dot: Location Counter. (line 6) ++* dot inside sections: Location Counter. (line 34) ++* dot outside sections: Location Counter. (line 64) ++* dynamic linker, from command line: Options. (line 765) ++* dynamic symbol table: Options. (line 179) ++* ELF program headers: PHDRS. (line 6) ++* emulation: Options. (line 337) ++* emulation, default: Environment. (line 21) ++* END (MRI): MRI. (line 62) ++* endianness: Options. (line 198) ++* entry point: Entry Point. (line 6) ++* entry point, from command line: Options. (line 158) ++* entry point, thumb: ARM. (line 17) ++* ENTRY(SYMBOL): Entry Point. (line 6) ++* error on valid input: Bug Criteria. (line 12) ++* example of linker script: Simple Example. (line 6) ++* exporting DLL symbols: WIN32. (line 19) ++* expression evaluation order: Evaluation. (line 6) ++* expression sections: Expression Section. (line 6) ++* expression, absolute: Builtin Functions. (line 10) ++* expressions: Expressions. (line 6) ++* EXTERN: Miscellaneous Commands. ++ (line 13) ++* fatal signal: Bug Criteria. (line 9) ++* file name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* FILEHDR: PHDRS. (line 61) ++* filename symbols: Output Section Keywords. ++ (line 9) ++* fill pattern, entire section: Output Section Fill. ++ (line 6) ++* FILL(EXPRESSION): Output Section Data. ++ (line 39) ++* finalization function: Options. (line 250) ++* first input file: File Commands. (line 79) ++* first instruction: Entry Point. (line 6) ++* FIX_V4BX: ARM. (line 44) ++* FORCE_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 20) ++* forcing input section alignment: Forced Input Alignment. ++ (line 6) ++* forcing output section alignment: Forced Output Alignment. ++ (line 6) ++* forcing the creation of dynamic sections: Options. (line 424) ++* FORMAT (MRI): MRI. (line 66) ++* functions in expressions: Builtin Functions. (line 6) ++* garbage collection <1>: Input Section Keep. (line 6) ++* garbage collection: Options. (line 784) ++* generating optimized output: Options. (line 410) ++* GNU linker: Overview. (line 6) ++* GNUTARGET: Environment. (line 9) ++* GROUP(FILES): File Commands. (line 44) ++* grouping input files: File Commands. (line 44) ++* groups of archives: Options. (line 609) ++* H8/300 support: H8/300. (line 6) ++* header size: Builtin Functions. (line 170) ++* heap size: Options. (line 1412) ++* help: Options. (line 792) ++* holes: Location Counter. (line 12) ++* holes, filling: Output Section Data. ++ (line 39) ++* HPPA multiple sub-space stubs: HPPA ELF32. (line 6) ++* HPPA stub grouping: HPPA ELF32. (line 12) ++* i960 support: i960. (line 6) ++* image base: Options. (line 1419) ++* implicit linker scripts: Implicit Linker Scripts. ++ (line 6) ++* import libraries: WIN32. (line 10) ++* INCLUDE FILENAME: File Commands. (line 9) ++* including a linker script: File Commands. (line 9) ++* including an entire archive: Options. (line 1248) ++* incremental link: Options. (line 276) ++* INHIBIT_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 25) ++* initialization function: Options. (line 279) ++* initialized data in ROM: Output Section LMA. (line 21) ++* input file format in linker script: Format Commands. (line 35) ++* input filename symbols: Output Section Keywords. ++ (line 9) ++* input files in linker scripts: File Commands. (line 16) ++* input files, displaying: Options. (line 467) ++* input format: Options. (line 115) ++* input object files in linker scripts: File Commands. (line 16) ++* input section alignment: Forced Input Alignment. ++ (line 6) ++* input section basics: Input Section Basics. ++ (line 6) ++* input section wildcards: Input Section Wildcards. ++ (line 6) ++* input sections: Input Section. (line 6) ++* INPUT(FILES): File Commands. (line 16) ++* integer notation: Constants. (line 6) ++* integer suffixes: Constants. (line 12) ++* internal object-file format: Canonical format. (line 11) ++* invalid input: Bug Criteria. (line 14) ++* K and M integer suffixes: Constants. (line 12) ++* KEEP: Input Section Keep. (line 6) ++* l =: MEMORY. (line 72) ++* L, deleting symbols beginning: Options. (line 517) ++* lazy evaluation: Evaluation. (line 6) ++* ld bugs, reporting: Bug Reporting. (line 6) ++* LDEMULATION: Environment. (line 21) ++* len =: MEMORY. (line 72) ++* LENGTH =: MEMORY. (line 72) ++* LENGTH(MEMORY): Builtin Functions. (line 122) ++* library search path in linker script: File Commands. (line 71) ++* link map: Options. (line 347) ++* link-time runtime library search path: Options. (line 967) ++* linker crash: Bug Criteria. (line 9) ++* linker script concepts: Basic Script Concepts. ++ (line 6) ++* linker script example: Simple Example. (line 6) ++* linker script file commands: File Commands. (line 6) ++* linker script format: Script Format. (line 6) ++* linker script input object files: File Commands. (line 16) ++* linker script simple commands: Simple Commands. (line 6) ++* linker scripts: Scripts. (line 6) ++* LIST (MRI): MRI. (line 77) ++* little-endian objects: Options. (line 201) ++* LOAD (MRI): MRI. (line 84) ++* load address: Output Section LMA. (line 6) ++* LOADADDR(SECTION): Builtin Functions. (line 125) ++* loading, preventing: Output Section Type. ++ (line 22) ++* local symbols, deleting: Options. (line 517) ++* location counter: Location Counter. (line 6) ++* LONG(EXPRESSION): Output Section Data. ++ (line 6) ++* M and K integer suffixes: Constants. (line 12) ++* machine architecture: Miscellaneous Commands. ++ (line 46) ++* machine dependencies: Machine Dependent. (line 6) ++* mapping input sections to output sections: Input Section. (line 6) ++* MAX: Builtin Functions. (line 130) ++* MEMORY: MEMORY. (line 6) ++* memory region attributes: MEMORY. (line 32) ++* memory regions: MEMORY. (line 6) ++* memory regions and sections: Output Section Region. ++ (line 6) ++* memory usage: Options. (line 804) ++* MIN: Builtin Functions. (line 133) ++* MRI compatibility: MRI. (line 6) ++* MSP430 extra sections: MSP430. (line 11) ++* NAME (MRI): MRI. (line 90) ++* name, section: Output Section Name. ++ (line 6) ++* names: Symbols. (line 6) ++* naming the output file: Options. (line 404) ++* NEXT(EXP): Builtin Functions. (line 137) ++* NMAGIC: Options. (line 384) ++* NOCROSSREFS(SECTIONS): Miscellaneous Commands. ++ (line 30) ++* NOLOAD: Output Section Type. ++ (line 22) ++* not enough room for program headers: Builtin Functions. (line 175) ++* o =: MEMORY. (line 67) ++* objdump -i: BFD. (line 6) ++* object file management: BFD. (line 6) ++* object files: Options. (line 29) ++* object formats available: BFD. (line 6) ++* object size: Options. (line 259) ++* OMAGIC: Options. (line 389) ++* opening object files: BFD outline. (line 6) ++* operators for arithmetic: Operators. (line 6) ++* options: Options. (line 6) ++* ORDER (MRI): MRI. (line 95) ++* org =: MEMORY. (line 67) ++* ORIGIN =: MEMORY. (line 67) ++* ORIGIN(MEMORY): Builtin Functions. (line 143) ++* orphan: Orphan Sections. (line 6) ++* output file after errors: Options. (line 870) ++* output file format in linker script: Format Commands. (line 10) ++* output file name in linker scripot: File Commands. (line 61) ++* output section alignment: Forced Output Alignment. ++ (line 6) ++* output section attributes: Output Section Attributes. ++ (line 6) ++* output section data: Output Section Data. ++ (line 6) ++* OUTPUT(FILENAME): File Commands. (line 61) ++* OUTPUT_ARCH(BFDARCH): Miscellaneous Commands. ++ (line 46) ++* OUTPUT_FORMAT(BFDNAME): Format Commands. (line 10) ++* OVERLAY: Overlay Description. ++ (line 6) ++* overlays: Overlay Description. ++ (line 6) ++* partial link: Options. (line 428) ++* PHDRS: PHDRS. (line 6) ++* position independent executables: Options. (line 897) ++* PowerPC ELF32 options: PowerPC ELF32. (line 13) ++* PowerPC GOT: PowerPC ELF32. (line 23) ++* PowerPC long branches: PowerPC ELF32. (line 6) ++* PowerPC PLT: PowerPC ELF32. (line 13) ++* PowerPC stub symbols: PowerPC ELF32. (line 37) ++* PowerPC TLS optimization: PowerPC ELF32. (line 41) ++* PowerPC64 dot symbols: PowerPC64 ELF64. (line 33) ++* PowerPC64 ELF64 options: PowerPC64 ELF64. (line 6) ++* PowerPC64 multi-TOC: PowerPC64 ELF64. (line 74) ++* PowerPC64 OPD optimization: PowerPC64 ELF64. (line 48) ++* PowerPC64 OPD spacing: PowerPC64 ELF64. (line 54) ++* PowerPC64 stub grouping: PowerPC64 ELF64. (line 6) ++* PowerPC64 stub symbols: PowerPC64 ELF64. (line 29) ++* PowerPC64 TLS optimization: PowerPC64 ELF64. (line 43) ++* PowerPC64 TOC optimization: PowerPC64 ELF64. (line 60) ++* precedence in expressions: Operators. (line 6) ++* prevent unnecessary loading: Output Section Type. ++ (line 22) ++* program headers: PHDRS. (line 6) ++* program headers and sections: Output Section Phdr. ++ (line 6) ++* program headers, not enough room: Builtin Functions. (line 175) ++* program segments: PHDRS. (line 6) ++* PROVIDE: PROVIDE. (line 6) ++* PROVIDE_HIDDEN: PROVIDE_HIDDEN. (line 6) ++* PUBLIC (MRI): MRI. (line 103) ++* QUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* quoted symbol names: Symbols. (line 6) ++* read-only text: Options. (line 384) ++* read/write from cmd line: Options. (line 389) ++* regions of memory: MEMORY. (line 6) ++* relative expressions: Expression Section. (line 6) ++* relaxing addressing modes: Options. (line 911) ++* relaxing on H8/300: H8/300. (line 9) ++* relaxing on i960: i960. (line 31) ++* relaxing on Xtensa: Xtensa. (line 27) ++* relocatable and absolute symbols: Expression Section. (line 6) ++* relocatable output: Options. (line 428) ++* removing sections: Output Section Discarding. ++ (line 6) ++* reporting bugs in ld: Reporting Bugs. (line 6) ++* requirements for BFD: BFD. (line 16) ++* retain relocations in final executable: Options. (line 415) ++* retaining specified symbols: Options. (line 931) ++* ROM initialized data: Output Section LMA. (line 21) ++* round up expression: Builtin Functions. (line 36) ++* round up location counter: Builtin Functions. (line 36) ++* runtime library name: Options. (line 267) ++* runtime library search path: Options. (line 945) ++* runtime pseudo-relocation: WIN32. (line 196) ++* scaled integers: Constants. (line 12) ++* scommon section: Input Section Common. ++ (line 20) ++* script files: Options. (line 471) ++* scripts: Scripts. (line 6) ++* search directory, from cmd line: Options. (line 315) ++* search path in linker script: File Commands. (line 71) ++* SEARCH_DIR(PATH): File Commands. (line 71) ++* SECT (MRI): MRI. (line 109) ++* section address: Output Section Address. ++ (line 6) ++* section address in expression: Builtin Functions. (line 17) ++* section alignment, warnings on: Options. (line 1229) ++* section data: Output Section Data. ++ (line 6) ++* section fill pattern: Output Section Fill. ++ (line 6) ++* section load address: Output Section LMA. (line 6) ++* section load address in expression: Builtin Functions. (line 125) ++* section name: Output Section Name. ++ (line 6) ++* section name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* section size: Builtin Functions. (line 154) ++* section, assigning to memory region: Output Section Region. ++ (line 6) ++* section, assigning to program header: Output Section Phdr. ++ (line 6) ++* SECTIONS: SECTIONS. (line 6) ++* sections, discarding: Output Section Discarding. ++ (line 6) ++* segment origins, cmd line: Options. (line 1090) ++* SEGMENT_START(SEGMENT, DEFAULT): Builtin Functions. (line 146) ++* segments, ELF: PHDRS. (line 6) ++* shared libraries: Options. (line 1022) ++* SHORT(EXPRESSION): Output Section Data. ++ (line 6) ++* SIZEOF(SECTION): Builtin Functions. (line 154) ++* SIZEOF_HEADERS: Builtin Functions. (line 170) ++* small common symbols: Input Section Common. ++ (line 20) ++* SORT: Input Section Wildcards. ++ (line 58) ++* SORT_BY_ALIGNMENT: Input Section Wildcards. ++ (line 54) ++* SORT_BY_NAME: Input Section Wildcards. ++ (line 46) ++* SQUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* stack size: Options. (line 1653) ++* standard Unix system: Options. (line 7) ++* start of execution: Entry Point. (line 6) ++* STARTUP(FILENAME): File Commands. (line 79) ++* strip all symbols: Options. (line 458) ++* strip debugger symbols: Options. (line 462) ++* stripping all but some symbols: Options. (line 931) ++* SUBALIGN(SUBSECTION_ALIGN): Forced Input Alignment. ++ (line 6) ++* suffixes for integers: Constants. (line 12) ++* symbol defaults: Builtin Functions. (line 105) ++* symbol definition, scripts: Assignments. (line 6) ++* symbol names: Symbols. (line 6) ++* symbol tracing: Options. (line 522) ++* symbol versions: VERSION. (line 6) ++* symbol-only input: Options. (line 447) ++* symbols, from command line: Options. (line 739) ++* symbols, relocatable and absolute: Expression Section. (line 6) ++* symbols, retaining selectively: Options. (line 931) ++* synthesizing linker: Options. (line 911) ++* synthesizing on H8/300: H8/300. (line 14) ++* TARGET(BFDNAME): Format Commands. (line 35) ++* TARGET1: ARM. (line 27) ++* TARGET2: ARM. (line 32) ++* thumb entry point: ARM. (line 17) ++* TI COFF versions: TI COFF. (line 6) ++* traditional format: Options. (line 1069) ++* unallocated address, next: Builtin Functions. (line 137) ++* undefined symbol: Options. (line 480) ++* undefined symbol in linker script: Miscellaneous Commands. ++ (line 13) ++* undefined symbols, warnings on: Options. (line 1225) ++* uninitialized data placement: Input Section Common. ++ (line 6) ++* unspecified memory: Output Section Data. ++ (line 39) ++* usage: Options. (line 792) ++* USE_BLX: ARM. (line 57) ++* using a DEF file: WIN32. (line 42) ++* using auto-export functionality: WIN32. (line 22) ++* Using decorations: WIN32. (line 141) ++* variables, defining: Assignments. (line 6) ++* verbose: Options. (line 1125) ++* version: Options. (line 507) ++* version script: VERSION. (line 6) ++* version script, symbol versions: Options. (line 1131) ++* VERSION {script text}: VERSION. (line 6) ++* versions of symbols: VERSION. (line 6) ++* warnings, on combining symbols: Options. (line 1138) ++* warnings, on section alignment: Options. (line 1229) ++* warnings, on undefined symbols: Options. (line 1225) ++* weak externals: WIN32. (line 380) ++* what is this?: Overview. (line 6) ++* wildcard file name patterns: Input Section Wildcards. ++ (line 6) ++* Xtensa options: Xtensa. (line 56) ++* Xtensa processors: Xtensa. (line 6) ++ ++ ++ ++Tag Table: ++Node: Top487 ++Node: Overview1249 ++Node: Invocation2363 ++Node: Options2771 ++Node: Environment77426 ++Node: Scripts79186 ++Node: Basic Script Concepts80920 ++Node: Script Format83627 ++Node: Simple Example84490 ++Node: Simple Commands87586 ++Node: Entry Point88037 ++Node: File Commands88796 ++Node: Format Commands92662 ++Node: Miscellaneous Commands94628 ++Node: Assignments96858 ++Node: Simple Assignments97349 ++Node: PROVIDE99085 ++Node: PROVIDE_HIDDEN100290 ++Node: Source Code Reference100534 ++Node: SECTIONS104114 ++Node: Output Section Description106005 ++Node: Output Section Name107058 ++Node: Output Section Address107934 ++Node: Input Section109583 ++Node: Input Section Basics110384 ++Node: Input Section Wildcards112736 ++Node: Input Section Common117469 ++Node: Input Section Keep118951 ++Node: Input Section Example119441 ++Node: Output Section Data120409 ++Node: Output Section Keywords123186 ++Node: Output Section Discarding126755 ++Node: Output Section Attributes127711 ++Node: Output Section Type128715 ++Node: Output Section LMA129869 ++Node: Forced Output Alignment132140 ++Node: Forced Input Alignment132408 ++Node: Output Section Region132793 ++Node: Output Section Phdr133223 ++Node: Output Section Fill133887 ++Node: Overlay Description135029 ++Node: MEMORY139277 ++Node: PHDRS143477 ++Node: VERSION148516 ++Node: Expressions156307 ++Node: Constants157185 ++Node: Symbols157746 ++Node: Orphan Sections158484 ++Node: Location Counter159247 ++Node: Operators163551 ++Node: Evaluation164473 ++Node: Expression Section165837 ++Node: Builtin Functions167326 ++Node: Implicit Linker Scripts174818 ++Node: Machine Dependent175593 ++Node: H8/300176454 ++Node: i960178079 ++Node: ARM179764 ++Node: HPPA ELF32182680 ++Node: MMIX184303 ++Node: MSP430185520 ++Node: PowerPC ELF32186568 ++Node: PowerPC64 ELF64188859 ++Node: TI COFF193273 ++Node: WIN32193805 ++Node: Xtensa211879 ++Node: BFD215001 ++Node: BFD outline216456 ++Node: BFD information loss217742 ++Node: Canonical format220259 ++Node: Reporting Bugs224616 ++Node: Bug Criteria225310 ++Node: Bug Reporting226009 ++Node: MRI233034 ++Node: GNU Free Documentation License237677 ++Node: Index257391 ++ ++End Tag Table +diff -Nrup binutils-2.17/ld/ld.info.r27273 binutils-2.17.atmel.1.3.0/ld/ld.info.r27273 +--- binutils-2.17/ld/ld.info.r27273 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/ld.info.r27273 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,6691 @@ ++This is .././ld/ld.info, produced by makeinfo version 4.8 from ++.././ld/ld.texinfo. ++ ++START-INFO-DIR-ENTRY ++* Ld: (ld). The GNU linker. ++END-INFO-DIR-ENTRY ++ ++ This file documents the GNU linker LD version 2.17. ++ ++ Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, ++2002, 2003, 2004 Free Software Foundation, Inc. ++ ++ ++File: ld.info, Node: Top, Next: Overview, Up: (dir) ++ ++Using ld ++******** ++ ++This file documents the GNU linker ld version 2.17. ++ ++ This document is distributed under the terms of the GNU Free ++Documentation License. A copy of the license is included in the ++section entitled "GNU Free Documentation License". ++ ++* Menu: ++ ++* Overview:: Overview ++* Invocation:: Invocation ++* Scripts:: Linker Scripts ++ ++* Machine Dependent:: Machine Dependent Features ++ ++* BFD:: BFD ++ ++* Reporting Bugs:: Reporting Bugs ++* MRI:: MRI Compatible Script Files ++* GNU Free Documentation License:: GNU Free Documentation License ++* Index:: Index ++ ++ ++File: ld.info, Node: Overview, Next: Invocation, Prev: Top, Up: Top ++ ++1 Overview ++********** ++ ++`ld' combines a number of object and archive files, relocates their ++data and ties up symbol references. Usually the last step in compiling ++a program is to run `ld'. ++ ++ `ld' accepts Linker Command Language files written in a superset of ++AT&T's Link Editor Command Language syntax, to provide explicit and ++total control over the linking process. ++ ++ This version of `ld' uses the general purpose BFD libraries to ++operate on object files. This allows `ld' to read, combine, and write ++object files in many different formats--for example, COFF or `a.out'. ++Different formats may be linked together to produce any available kind ++of object file. *Note BFD::, for more information. ++ ++ Aside from its flexibility, the GNU linker is more helpful than other ++linkers in providing diagnostic information. Many linkers abandon ++execution immediately upon encountering an error; whenever possible, ++`ld' continues executing, allowing you to identify other errors (or, in ++some cases, to get an output file in spite of the error). ++ ++ ++File: ld.info, Node: Invocation, Next: Scripts, Prev: Overview, Up: Top ++ ++2 Invocation ++************ ++ ++The GNU linker `ld' is meant to cover a broad range of situations, and ++to be as compatible as possible with other linkers. As a result, you ++have many choices to control its behavior. ++ ++* Menu: ++ ++* Options:: Command Line Options ++* Environment:: Environment Variables ++ ++ ++File: ld.info, Node: Options, Next: Environment, Up: Invocation ++ ++2.1 Command Line Options ++======================== ++ ++ The linker supports a plethora of command-line options, but in actual ++practice few of them are used in any particular context. For instance, ++a frequent use of `ld' is to link standard Unix object files on a ++standard, supported Unix system. On such a system, to link a file ++`hello.o': ++ ++ ld -o OUTPUT /lib/crt0.o hello.o -lc ++ ++ This tells `ld' to produce a file called OUTPUT as the result of ++linking the file `/lib/crt0.o' with `hello.o' and the library `libc.a', ++which will come from the standard search directories. (See the ++discussion of the `-l' option below.) ++ ++ Some of the command-line options to `ld' may be specified at any ++point in the command line. However, options which refer to files, such ++as `-l' or `-T', cause the file to be read at the point at which the ++option appears in the command line, relative to the object files and ++other file options. Repeating non-file options with a different ++argument will either have no further effect, or override prior ++occurrences (those further to the left on the command line) of that ++option. Options which may be meaningfully specified more than once are ++noted in the descriptions below. ++ ++ Non-option arguments are object files or archives which are to be ++linked together. They may follow, precede, or be mixed in with ++command-line options, except that an object file argument may not be ++placed between an option and its argument. ++ ++ Usually the linker is invoked with at least one object file, but you ++can specify other forms of binary input files using `-l', `-R', and the ++script command language. If _no_ binary input files at all are ++specified, the linker does not produce any output, and issues the ++message `No input files'. ++ ++ If the linker cannot recognize the format of an object file, it will ++assume that it is a linker script. A script specified in this way ++augments the main linker script used for the link (either the default ++linker script or the one specified by using `-T'). This feature ++permits the linker to link against a file which appears to be an object ++or an archive, but actually merely defines some symbol values, or uses ++`INPUT' or `GROUP' to load other objects. Note that specifying a ++script in this way merely augments the main linker script; use the `-T' ++option to replace the default linker script entirely. *Note Scripts::. ++ ++ For options whose names are a single letter, option arguments must ++either follow the option letter without intervening whitespace, or be ++given as separate arguments immediately following the option that ++requires them. ++ ++ For options whose names are multiple letters, either one dash or two ++can precede the option name; for example, `-trace-symbol' and ++`--trace-symbol' are equivalent. Note--there is one exception to this ++rule. Multiple letter options that start with a lower case 'o' can ++only be preceeded by two dashes. This is to reduce confusion with the ++`-o' option. So for example `-omagic' sets the output file name to ++`magic' whereas `--omagic' sets the NMAGIC flag on the output. ++ ++ Arguments to multiple-letter options must either be separated from ++the option name by an equals sign, or be given as separate arguments ++immediately following the option that requires them. For example, ++`--trace-symbol foo' and `--trace-symbol=foo' are equivalent. Unique ++abbreviations of the names of multiple-letter options are accepted. ++ ++ Note--if the linker is being invoked indirectly, via a compiler ++driver (e.g. `gcc') then all the linker command line options should be ++prefixed by `-Wl,' (or whatever is appropriate for the particular ++compiler driver) like this: ++ ++ gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup ++ ++ This is important, because otherwise the compiler driver program may ++silently drop the linker options, resulting in a bad link. ++ ++ Here is a table of the generic command line switches accepted by the ++GNU linker: ++ ++`@FILE' ++ Read command-line options from FILE. The options read are ++ inserted in place of the original @FILE option. If FILE does not ++ exist, or cannot be read, then the option will be treated ++ literally, and not removed. ++ ++ Options in FILE are separated by whitespace. A whitespace ++ character may be included in an option by surrounding the entire ++ option in either single or double quotes. Any character ++ (including a backslash) may be included by prefixing the character ++ to be included with a backslash. The FILE may itself contain ++ additional @FILE options; any such options will be processed ++ recursively. ++ ++`-aKEYWORD' ++ This option is supported for HP/UX compatibility. The KEYWORD ++ argument must be one of the strings `archive', `shared', or ++ `default'. `-aarchive' is functionally equivalent to `-Bstatic', ++ and the other two keywords are functionally equivalent to ++ `-Bdynamic'. This option may be used any number of times. ++ ++`-AARCHITECTURE' ++`--architecture=ARCHITECTURE' ++ In the current release of `ld', this option is useful only for the ++ Intel 960 family of architectures. In that `ld' configuration, the ++ ARCHITECTURE argument identifies the particular architecture in ++ the 960 family, enabling some safeguards and modifying the ++ archive-library search path. *Note `ld' and the Intel 960 family: ++ i960, for details. ++ ++ Future releases of `ld' may support similar functionality for ++ other architecture families. ++ ++`-b INPUT-FORMAT' ++`--format=INPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the `-b' ++ option to specify the binary format for input object files that ++ follow this option on the command line. Even when `ld' is ++ configured to support alternative object formats, you don't ++ usually need to specify this, as `ld' should be configured to ++ expect as a default input format the most usual format on each ++ machine. INPUT-FORMAT is a text string, the name of a particular ++ format supported by the BFD libraries. (You can list the ++ available binary formats with `objdump -i'.) *Note BFD::. ++ ++ You may want to use this option if you are linking files with an ++ unusual binary format. You can also use `-b' to switch formats ++ explicitly (when linking object files of different formats), by ++ including `-b INPUT-FORMAT' before each group of object files in a ++ particular format. ++ ++ The default format is taken from the environment variable ++ `GNUTARGET'. *Note Environment::. You can also define the input ++ format from a script, using the command `TARGET'; see *Note Format ++ Commands::. ++ ++`-c MRI-COMMANDFILE' ++`--mri-script=MRI-COMMANDFILE' ++ For compatibility with linkers produced by MRI, `ld' accepts script ++ files written in an alternate, restricted command language, ++ described in *Note MRI Compatible Script Files: MRI. Introduce ++ MRI script files with the option `-c'; use the `-T' option to run ++ linker scripts written in the general-purpose `ld' scripting ++ language. If MRI-CMDFILE does not exist, `ld' looks for it in the ++ directories specified by any `-L' options. ++ ++`-d' ++`-dc' ++`-dp' ++ These three options are equivalent; multiple forms are supported ++ for compatibility with other linkers. They assign space to common ++ symbols even if a relocatable output file is specified (with ++ `-r'). The script command `FORCE_COMMON_ALLOCATION' has the same ++ effect. *Note Miscellaneous Commands::. ++ ++`-e ENTRY' ++`--entry=ENTRY' ++ Use ENTRY as the explicit symbol for beginning execution of your ++ program, rather than the default entry point. If there is no ++ symbol named ENTRY, the linker will try to parse ENTRY as a number, ++ and use that as the entry address (the number will be interpreted ++ in base 10; you may use a leading `0x' for base 16, or a leading ++ `0' for base 8). *Note Entry Point::, for a discussion of defaults ++ and other ways of specifying the entry point. ++ ++`--exclude-libs LIB,LIB,...' ++ Specifies a list of archive libraries from which symbols should ++ not be automatically exported. The library names may be delimited ++ by commas or colons. Specifying `--exclude-libs ALL' excludes ++ symbols in all archive libraries from automatic export. This ++ option is available only for the i386 PE targeted port of the ++ linker and for ELF targeted ports. For i386 PE, symbols ++ explicitly listed in a .def file are still exported, regardless of ++ this option. For ELF targeted ports, symbols affected by this ++ option will be treated as hidden. ++ ++`-E' ++`--export-dynamic' ++ When creating a dynamically linked executable, add all symbols to ++ the dynamic symbol table. The dynamic symbol table is the set of ++ symbols which are visible from dynamic objects at run time. ++ ++ If you do not use this option, the dynamic symbol table will ++ normally contain only those symbols which are referenced by some ++ dynamic object mentioned in the link. ++ ++ If you use `dlopen' to load a dynamic object which needs to refer ++ back to the symbols defined by the program, rather than some other ++ dynamic object, then you will probably need to use this option when ++ linking the program itself. ++ ++ You can also use the version script to control what symbols should ++ be added to the dynamic symbol table if the output format supports ++ it. See the description of `--version-script' in *Note VERSION::. ++ ++`-EB' ++ Link big-endian objects. This affects the default output format. ++ ++`-EL' ++ Link little-endian objects. This affects the default output ++ format. ++ ++`-f' ++`--auxiliary NAME' ++ When creating an ELF shared object, set the internal DT_AUXILIARY ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object should be used as an ++ auxiliary filter on the symbol table of the shared object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_AUXILIARY ++ field. If the dynamic linker resolves any symbols from the filter ++ object, it will first check whether there is a definition in the ++ shared object NAME. If there is one, it will be used instead of ++ the definition in the filter object. The shared object NAME need ++ not exist. Thus the shared object NAME may be used to provide an ++ alternative implementation of certain functions, perhaps for ++ debugging or for machine specific performance. ++ ++ This option may be specified more than once. The DT_AUXILIARY ++ entries will be created in the order in which they appear on the ++ command line. ++ ++`-F NAME' ++`--filter NAME' ++ When creating an ELF shared object, set the internal DT_FILTER ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object which is being created ++ should be used as a filter on the symbol table of the shared ++ object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_FILTER ++ field. The dynamic linker will resolve symbols according to the ++ symbol table of the filter object as usual, but it will actually ++ link to the definitions found in the shared object NAME. Thus the ++ filter object can be used to select a subset of the symbols ++ provided by the object NAME. ++ ++ Some older linkers used the `-F' option throughout a compilation ++ toolchain for specifying object-file format for both input and ++ output object files. The GNU linker uses other mechanisms for ++ this purpose: the `-b', `--format', `--oformat' options, the ++ `TARGET' command in linker scripts, and the `GNUTARGET' ++ environment variable. The GNU linker will ignore the `-F' option ++ when not creating an ELF shared object. ++ ++`-fini NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is unloaded, by setting DT_FINI to ++ the address of the function. By default, the linker uses `_fini' ++ as the function to call. ++ ++`-g' ++ Ignored. Provided for compatibility with other tools. ++ ++`-GVALUE' ++`--gpsize=VALUE' ++ Set the maximum size of objects to be optimized using the GP ++ register to SIZE. This is only meaningful for object file formats ++ such as MIPS ECOFF which supports putting large and small objects ++ into different sections. This is ignored for other object file ++ formats. ++ ++`-hNAME' ++`-soname=NAME' ++ When creating an ELF shared object, set the internal DT_SONAME ++ field to the specified name. When an executable is linked with a ++ shared object which has a DT_SONAME field, then when the ++ executable is run the dynamic linker will attempt to load the ++ shared object specified by the DT_SONAME field rather than the ++ using the file name given to the linker. ++ ++`-i' ++ Perform an incremental link (same as option `-r'). ++ ++`-init NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is loaded, by setting DT_INIT to ++ the address of the function. By default, the linker uses `_init' ++ as the function to call. ++ ++`-lARCHIVE' ++`--library=ARCHIVE' ++ Add archive file ARCHIVE to the list of files to link. This ++ option may be used any number of times. `ld' will search its ++ path-list for occurrences of `libARCHIVE.a' for every ARCHIVE ++ specified. ++ ++ On systems which support shared libraries, `ld' may also search for ++ libraries with extensions other than `.a'. Specifically, on ELF ++ and SunOS systems, `ld' will search a directory for a library with ++ an extension of `.so' before searching for one with an extension of ++ `.a'. By convention, a `.so' extension indicates a shared library. ++ ++ The linker will search an archive only once, at the location where ++ it is specified on the command line. If the archive defines a ++ symbol which was undefined in some object which appeared before ++ the archive on the command line, the linker will include the ++ appropriate file(s) from the archive. However, an undefined ++ symbol in an object appearing later on the command line will not ++ cause the linker to search the archive again. ++ ++ See the `-(' option for a way to force the linker to search ++ archives multiple times. ++ ++ You may list the same archive multiple times on the command line. ++ ++ This type of archive searching is standard for Unix linkers. ++ However, if you are using `ld' on AIX, note that it is different ++ from the behaviour of the AIX linker. ++ ++`-LSEARCHDIR' ++`--library-path=SEARCHDIR' ++ Add path SEARCHDIR to the list of paths that `ld' will search for ++ archive libraries and `ld' control scripts. You may use this ++ option any number of times. The directories are searched in the ++ order in which they are specified on the command line. ++ Directories specified on the command line are searched before the ++ default directories. All `-L' options apply to all `-l' options, ++ regardless of the order in which the options appear. ++ ++ If SEARCHDIR begins with `=', then the `=' will be replaced by the ++ "sysroot prefix", a path specified when the linker is configured. ++ ++ The default set of paths searched (without being specified with ++ `-L') depends on which emulation mode `ld' is using, and in some ++ cases also on how it was configured. *Note Environment::. ++ ++ The paths can also be specified in a link script with the ++ `SEARCH_DIR' command. Directories specified this way are searched ++ at the point in which the linker script appears in the command ++ line. ++ ++`-mEMULATION' ++ Emulate the EMULATION linker. You can list the available ++ emulations with the `--verbose' or `-V' options. ++ ++ If the `-m' option is not used, the emulation is taken from the ++ `LDEMULATION' environment variable, if that is defined. ++ ++ Otherwise, the default emulation depends upon how the linker was ++ configured. ++ ++`-M' ++`--print-map' ++ Print a link map to the standard output. A link map provides ++ information about the link, including the following: ++ ++ * Where object files are mapped into memory. ++ ++ * How common symbols are allocated. ++ ++ * All archive members included in the link, with a mention of ++ the symbol which caused the archive member to be brought in. ++ ++ * The values assigned to symbols. ++ ++ Note - symbols whose values are computed by an expression ++ which involves a reference to a previous value of the same ++ symbol may not have correct result displayed in the link map. ++ This is because the linker discards intermediate results and ++ only retains the final value of an expression. Under such ++ circumstances the linker will display the final value ++ enclosed by square brackets. Thus for example a linker ++ script containing: ++ ++ foo = 1 ++ foo = foo * 4 ++ foo = foo + 8 ++ ++ will produce the following output in the link map if the `-M' ++ option is used: ++ ++ 0x00000001 foo = 0x1 ++ [0x0000000c] foo = (foo * 0x4) ++ [0x0000000c] foo = (foo + 0x8) ++ ++ See *Note Expressions:: for more information about ++ expressions in linker scripts. ++ ++`-n' ++`--nmagic' ++ Turn off page alignment of sections, and mark the output as ++ `NMAGIC' if possible. ++ ++`-N' ++`--omagic' ++ Set the text and data sections to be readable and writable. Also, ++ do not page-align the data segment, and disable linking against ++ shared libraries. If the output format supports Unix style magic ++ numbers, mark the output as `OMAGIC'. Note: Although a writable ++ text section is allowed for PE-COFF targets, it does not conform ++ to the format specification published by Microsoft. ++ ++`--no-omagic' ++ This option negates most of the effects of the `-N' option. It ++ sets the text section to be read-only, and forces the data segment ++ to be page-aligned. Note - this option does not enable linking ++ against shared libraries. Use `-Bdynamic' for this. ++ ++`-o OUTPUT' ++`--output=OUTPUT' ++ Use OUTPUT as the name for the program produced by `ld'; if this ++ option is not specified, the name `a.out' is used by default. The ++ script command `OUTPUT' can also specify the output file name. ++ ++`-O LEVEL' ++ If LEVEL is a numeric values greater than zero `ld' optimizes the ++ output. This might take significantly longer and therefore ++ probably should only be enabled for the final binary. ++ ++`-q' ++`--emit-relocs' ++ Leave relocation sections and contents in fully linked ++ exececutables. Post link analysis and optimization tools may need ++ this information in order to perform correct modifications of ++ executables. This results in larger executables. ++ ++ This option is currently only supported on ELF platforms. ++ ++`--force-dynamic' ++ Force the output file to have dynamic sections. This option is ++ specific to VxWorks targets. ++ ++`-r' ++`--relocatable' ++ Generate relocatable output--i.e., generate an output file that ++ can in turn serve as input to `ld'. This is often called "partial ++ linking". As a side effect, in environments that support standard ++ Unix magic numbers, this option also sets the output file's magic ++ number to `OMAGIC'. If this option is not specified, an absolute ++ file is produced. When linking C++ programs, this option _will ++ not_ resolve references to constructors; to do that, use `-Ur'. ++ ++ When an input file does not have the same format as the output ++ file, partial linking is only supported if that input file does ++ not contain any relocations. Different output formats can have ++ further restrictions; for example some `a.out'-based formats do ++ not support partial linking with input files in other formats at ++ all. ++ ++ This option does the same thing as `-i'. ++ ++`-R FILENAME' ++`--just-symbols=FILENAME' ++ Read symbol names and their addresses from FILENAME, but do not ++ relocate it or include it in the output. This allows your output ++ file to refer symbolically to absolute locations of memory defined ++ in other programs. You may use this option more than once. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-s' ++`--strip-all' ++ Omit all symbol information from the output file. ++ ++`-S' ++`--strip-debug' ++ Omit debugger symbol information (but not all symbols) from the ++ output file. ++ ++`-t' ++`--trace' ++ Print the names of the input files as `ld' processes them. ++ ++`-T SCRIPTFILE' ++`--script=SCRIPTFILE' ++ Use SCRIPTFILE as the linker script. This script replaces `ld''s ++ default linker script (rather than adding to it), so COMMANDFILE ++ must specify everything necessary to describe the output file. ++ *Note Scripts::. If SCRIPTFILE does not exist in the current ++ directory, `ld' looks for it in the directories specified by any ++ preceding `-L' options. Multiple `-T' options accumulate. ++ ++`-u SYMBOL' ++`--undefined=SYMBOL' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. `-u' may be repeated with ++ different option arguments to enter additional undefined symbols. ++ This option is equivalent to the `EXTERN' linker script command. ++ ++`-Ur' ++ For anything other than C++ programs, this option is equivalent to ++ `-r': it generates relocatable output--i.e., an output file that ++ can in turn serve as input to `ld'. When linking C++ programs, ++ `-Ur' _does_ resolve references to constructors, unlike `-r'. It ++ does not work to use `-Ur' on files that were themselves linked ++ with `-Ur'; once the constructor table has been built, it cannot ++ be added to. Use `-Ur' only for the last partial link, and `-r' ++ for the others. ++ ++`--unique[=SECTION]' ++ Creates a separate output section for every input section matching ++ SECTION, or if the optional wildcard SECTION argument is missing, ++ for every orphan input section. An orphan section is one not ++ specifically mentioned in a linker script. You may use this option ++ multiple times on the command line; It prevents the normal ++ merging of input sections with the same name, overriding output ++ section assignments in a linker script. ++ ++`-v' ++`--version' ++`-V' ++ Display the version number for `ld'. The `-V' option also lists ++ the supported emulations. ++ ++`-x' ++`--discard-all' ++ Delete all local symbols. ++ ++`-X' ++`--discard-locals' ++ Delete all temporary local symbols. For most targets, this is all ++ local symbols whose names begin with `L'. ++ ++`-y SYMBOL' ++`--trace-symbol=SYMBOL' ++ Print the name of each linked file in which SYMBOL appears. This ++ option may be given any number of times. On many systems it is ++ necessary to prepend an underscore. ++ ++ This option is useful when you have an undefined symbol in your ++ link but don't know where the reference is coming from. ++ ++`-Y PATH' ++ Add PATH to the default library search path. This option exists ++ for Solaris compatibility. ++ ++`-z KEYWORD' ++ The recognized keywords are: ++ `combreloc' ++ Combines multiple reloc sections and sorts them to make ++ dynamic symbol lookup caching possible. ++ ++ `defs' ++ Disallows undefined symbols in object files. Undefined ++ symbols in shared libraries are still allowed. ++ ++ `execstack' ++ Marks the object as requiring executable stack. ++ ++ `initfirst' ++ This option is only meaningful when building a shared object. ++ It marks the object so that its runtime initialization will ++ occur before the runtime initialization of any other objects ++ brought into the process at the same time. Similarly the ++ runtime finalization of the object will occur after the ++ runtime finalization of any other objects. ++ ++ `interpose' ++ Marks the object that its symbol table interposes before all ++ symbols but the primary executable. ++ ++ `loadfltr' ++ Marks the object that its filters be processed immediately at ++ runtime. ++ ++ `muldefs' ++ Allows multiple definitions. ++ ++ `nocombreloc' ++ Disables multiple reloc sections combining. ++ ++ `nocopyreloc' ++ Disables production of copy relocs. ++ ++ `nodefaultlib' ++ Marks the object that the search for dependencies of this ++ object will ignore any default library search paths. ++ ++ `nodelete' ++ Marks the object shouldn't be unloaded at runtime. ++ ++ `nodlopen' ++ Marks the object not available to `dlopen'. ++ ++ `nodump' ++ Marks the object can not be dumped by `dldump'. ++ ++ `noexecstack' ++ Marks the object as not requiring executable stack. ++ ++ `norelro' ++ Don't create an ELF `PT_GNU_RELRO' segment header in the ++ object. ++ ++ `now' ++ When generating an executable or shared library, mark it to ++ tell the dynamic linker to resolve all symbols when the ++ program is started, or when the shared library is linked to ++ using dlopen, instead of deferring function call resolution ++ to the point when the function is first called. ++ ++ `origin' ++ Marks the object may contain $ORIGIN. ++ ++ `relro' ++ Create an ELF `PT_GNU_RELRO' segment header in the object. ++ ++ ++ Other keywords are ignored for Solaris compatibility. ++ ++`-( ARCHIVES -)' ++`--start-group ARCHIVES --end-group' ++ The ARCHIVES should be a list of archive files. They may be ++ either explicit file names, or `-l' options. ++ ++ The specified archives are searched repeatedly until no new ++ undefined references are created. Normally, an archive is ++ searched only once in the order that it is specified on the ++ command line. If a symbol in that archive is needed to resolve an ++ undefined symbol referred to by an object in an archive that ++ appears later on the command line, the linker would not be able to ++ resolve that reference. By grouping the archives, they all be ++ searched repeatedly until all possible references are resolved. ++ ++ Using this option has a significant performance cost. It is best ++ to use it only when there are unavoidable circular references ++ between two or more archives. ++ ++`--accept-unknown-input-arch' ++`--no-accept-unknown-input-arch' ++ Tells the linker to accept input files whose architecture cannot be ++ recognised. The assumption is that the user knows what they are ++ doing and deliberately wants to link in these unknown input files. ++ This was the default behaviour of the linker, before release ++ 2.14. The default behaviour from release 2.14 onwards is to ++ reject such input files, and so the `--accept-unknown-input-arch' ++ option has been added to restore the old behaviour. ++ ++`--as-needed' ++`--no-as-needed' ++ This option affects ELF DT_NEEDED tags for dynamic libraries ++ mentioned on the command line after the `--as-needed' option. ++ Normally, the linker will add a DT_NEEDED tag for each dynamic ++ library mentioned on the command line, regardless of whether the ++ library is actually needed. `--as-needed' causes DT_NEEDED tags ++ to only be emitted for libraries that satisfy some symbol ++ reference from regular objects which is undefined at the point ++ that the library was linked. `--no-as-needed' restores the ++ default behaviour. ++ ++`--add-needed' ++`--no-add-needed' ++ This option affects the treatment of dynamic libraries from ELF ++ DT_NEEDED tags in dynamic libraries mentioned on the command line ++ after the `--no-add-needed' option. Normally, the linker will add ++ a DT_NEEDED tag for each dynamic library from DT_NEEDED tags. ++ `--no-add-needed' causes DT_NEEDED tags will never be emitted for ++ those libraries from DT_NEEDED tags. `--add-needed' restores the ++ default behaviour. ++ ++`-assert KEYWORD' ++ This option is ignored for SunOS compatibility. ++ ++`-Bdynamic' ++`-dy' ++`-call_shared' ++ Link against dynamic libraries. This is only meaningful on ++ platforms for which shared libraries are supported. This option ++ is normally the default on such platforms. The different variants ++ of this option are for compatibility with various systems. You ++ may use this option multiple times on the command line: it affects ++ library searching for `-l' options which follow it. ++ ++`-Bgroup' ++ Set the `DF_1_GROUP' flag in the `DT_FLAGS_1' entry in the dynamic ++ section. This causes the runtime linker to handle lookups in this ++ object and its dependencies to be performed only inside the group. ++ `--unresolved-symbols=report-all' is implied. This option is only ++ meaningful on ELF platforms which support shared libraries. ++ ++`-Bstatic' ++`-dn' ++`-non_shared' ++`-static' ++ Do not link against shared libraries. This is only meaningful on ++ platforms for which shared libraries are supported. The different ++ variants of this option are for compatibility with various ++ systems. You may use this option multiple times on the command ++ line: it affects library searching for `-l' options which follow ++ it. This option also implies `--unresolved-symbols=report-all'. ++ This option can be used with `-shared'. Doing so means that a ++ shared library is being created but that all of the library's ++ external references must be resolved by pulling in entries from ++ static libraries. ++ ++`-Bsymbolic' ++ When creating a shared library, bind references to global symbols ++ to the definition within the shared library, if any. Normally, it ++ is possible for a program linked against a shared library to ++ override the definition within the shared library. This option is ++ only meaningful on ELF platforms which support shared libraries. ++ ++`--check-sections' ++`--no-check-sections' ++ Asks the linker _not_ to check section addresses after they have ++ been assigned to see if there are any overlaps. Normally the ++ linker will perform this check, and if it finds any overlaps it ++ will produce suitable error messages. The linker does know about, ++ and does make allowances for sections in overlays. The default ++ behaviour can be restored by using the command line switch ++ `--check-sections'. ++ ++`--cref' ++ Output a cross reference table. If a linker map file is being ++ generated, the cross reference table is printed to the map file. ++ Otherwise, it is printed on the standard output. ++ ++ The format of the table is intentionally simple, so that it may be ++ easily processed by a script if necessary. The symbols are ++ printed out, sorted by name. For each symbol, a list of file ++ names is given. If the symbol is defined, the first file listed ++ is the location of the definition. The remaining files contain ++ references to the symbol. ++ ++`--no-define-common' ++ This option inhibits the assignment of addresses to common symbols. ++ The script command `INHIBIT_COMMON_ALLOCATION' has the same effect. ++ *Note Miscellaneous Commands::. ++ ++ The `--no-define-common' option allows decoupling the decision to ++ assign addresses to Common symbols from the choice of the output ++ file type; otherwise a non-Relocatable output type forces ++ assigning addresses to Common symbols. Using `--no-define-common' ++ allows Common symbols that are referenced from a shared library to ++ be assigned addresses only in the main program. This eliminates ++ the unused duplicate space in the shared library, and also ++ prevents any possible confusion over resolving to the wrong ++ duplicate when there are many dynamic modules with specialized ++ search paths for runtime symbol resolution. ++ ++`--defsym SYMBOL=EXPRESSION' ++ Create a global symbol in the output file, containing the absolute ++ address given by EXPRESSION. You may use this option as many ++ times as necessary to define multiple symbols in the command line. ++ A limited form of arithmetic is supported for the EXPRESSION in ++ this context: you may give a hexadecimal constant or the name of ++ an existing symbol, or use `+' and `-' to add or subtract ++ hexadecimal constants or symbols. If you need more elaborate ++ expressions, consider using the linker command language from a ++ script (*note Assignment: Symbol Definitions: Assignments.). ++ _Note:_ there should be no white space between SYMBOL, the equals ++ sign ("<=>"), and EXPRESSION. ++ ++`--demangle[=STYLE]' ++`--no-demangle' ++ These options control whether to demangle symbol names in error ++ messages and other output. When the linker is told to demangle, ++ it tries to present symbol names in a readable fashion: it strips ++ leading underscores if they are used by the object file format, ++ and converts C++ mangled symbol names into user readable names. ++ Different compilers have different mangling styles. The optional ++ demangling style argument can be used to choose an appropriate ++ demangling style for your compiler. The linker will demangle by ++ default unless the environment variable `COLLECT_NO_DEMANGLE' is ++ set. These options may be used to override the default. ++ ++`--dynamic-linker FILE' ++ Set the name of the dynamic linker. This is only meaningful when ++ generating dynamically linked ELF executables. The default dynamic ++ linker is normally correct; don't use this unless you know what ++ you are doing. ++ ++`--fatal-warnings' ++ Treat all warnings as errors. ++ ++`--force-exe-suffix' ++ Make sure that an output file has a .exe suffix. ++ ++ If a successfully built fully linked output file does not have a ++ `.exe' or `.dll' suffix, this option forces the linker to copy the ++ output file to one of the same name with a `.exe' suffix. This ++ option is useful when using unmodified Unix makefiles on a ++ Microsoft Windows host, since some versions of Windows won't run ++ an image unless it ends in a `.exe' suffix. ++ ++`--no-gc-sections' ++`--gc-sections' ++ Enable garbage collection of unused input sections. It is ignored ++ on targets that do not support this option. This option is not ++ compatible with `-r'. The default behaviour (of not performing ++ this garbage collection) can be restored by specifying ++ `--no-gc-sections' on the command line. ++ ++`--help' ++ Print a summary of the command-line options on the standard output ++ and exit. ++ ++`--target-help' ++ Print a summary of all target specific options on the standard ++ output and exit. ++ ++`-Map MAPFILE' ++ Print a link map to the file MAPFILE. See the description of the ++ `-M' option, above. ++ ++`--no-keep-memory' ++ `ld' normally optimizes for speed over memory usage by caching the ++ symbol tables of input files in memory. This option tells `ld' to ++ instead optimize for memory usage, by rereading the symbol tables ++ as necessary. This may be required if `ld' runs out of memory ++ space while linking a large executable. ++ ++`--no-undefined' ++`-z defs' ++ Report unresolved symbol references from regular object files. ++ This is done even if the linker is creating a non-symbolic shared ++ library. The switch `--[no-]allow-shlib-undefined' controls the ++ behaviour for reporting unresolved references found in shared ++ libraries being linked in. ++ ++`--allow-multiple-definition' ++`-z muldefs' ++ Normally when a symbol is defined multiple times, the linker will ++ report a fatal error. These options allow multiple definitions and ++ the first definition will be used. ++ ++`--allow-shlib-undefined' ++`--no-allow-shlib-undefined' ++ Allows (the default) or disallows undefined symbols in shared ++ libraries. This switch is similar to `--no-undefined' except that ++ it determines the behaviour when the undefined symbols are in a ++ shared library rather than a regular object file. It does not ++ affect how undefined symbols in regular object files are handled. ++ ++ The reason that `--allow-shlib-undefined' is the default is that ++ the shared library being specified at link time may not be the ++ same as the one that is available at load time, so the symbols ++ might actually be resolvable at load time. Plus there are some ++ systems, (eg BeOS) where undefined symbols in shared libraries is ++ normal. (The kernel patches them at load time to select which ++ function is most appropriate for the current architecture. This ++ is used for example to dynamically select an appropriate memset ++ function). Apparently it is also normal for HPPA shared libraries ++ to have undefined symbols. ++ ++`--no-undefined-version' ++ Normally when a symbol has an undefined version, the linker will ++ ignore it. This option disallows symbols with undefined version ++ and a fatal error will be issued instead. ++ ++`--default-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned exported symbols. ++ ++`--default-imported-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned imported symbols. ++ ++`--no-warn-mismatch' ++ Normally `ld' will give an error if you try to link together input ++ files that are mismatched for some reason, perhaps because they ++ have been compiled for different processors or for different ++ endiannesses. This option tells `ld' that it should silently ++ permit such possible errors. This option should only be used with ++ care, in cases when you have taken some special action that ++ ensures that the linker errors are inappropriate. ++ ++`--no-whole-archive' ++ Turn off the effect of the `--whole-archive' option for subsequent ++ archive files. ++ ++`--noinhibit-exec' ++ Retain the executable output file whenever it is still usable. ++ Normally, the linker will not produce an output file if it ++ encounters errors during the link process; it exits without ++ writing an output file when it issues any error whatsoever. ++ ++`-nostdlib' ++ Only search library directories explicitly specified on the ++ command line. Library directories specified in linker scripts ++ (including linker scripts specified on the command line) are ++ ignored. ++ ++`--oformat OUTPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the ++ `--oformat' option to specify the binary format for the output ++ object file. Even when `ld' is configured to support alternative ++ object formats, you don't usually need to specify this, as `ld' ++ should be configured to produce as a default output format the most ++ usual format on each machine. OUTPUT-FORMAT is a text string, the ++ name of a particular format supported by the BFD libraries. (You ++ can list the available binary formats with `objdump -i'.) The ++ script command `OUTPUT_FORMAT' can also specify the output format, ++ but this option overrides it. *Note BFD::. ++ ++`-pie' ++`--pic-executable' ++ Create a position independent executable. This is currently only ++ supported on ELF platforms. Position independent executables are ++ similar to shared libraries in that they are relocated by the ++ dynamic linker to the virtual address the OS chooses for them ++ (which can vary between invocations). Like normal dynamically ++ linked executables they can be executed and symbols defined in the ++ executable cannot be overridden by shared libraries. ++ ++`-qmagic' ++ This option is ignored for Linux compatibility. ++ ++`-Qy' ++ This option is ignored for SVR4 compatibility. ++ ++`--relax' ++ An option with machine dependent effects. This option is only ++ supported on a few targets. *Note `ld' and the H8/300: H8/300. ++ *Note `ld' and the Intel 960 family: i960. *Note `ld' and Xtensa ++ Processors: Xtensa. *Note `ld' and PowerPC 32-bit ELF Support: ++ PowerPC ELF32. ++ ++ On some platforms, the `--relax' option performs global ++ optimizations that become possible when the linker resolves ++ addressing in the program, such as relaxing address modes and ++ synthesizing new instructions in the output object file. ++ ++ On some platforms these link time global optimizations may make ++ symbolic debugging of the resulting executable impossible. This ++ is known to be the case for the Matsushita MN10200 and MN10300 ++ family of processors. ++ ++ On platforms where this is not supported, `--relax' is accepted, ++ but ignored. ++ ++`--retain-symbols-file FILENAME' ++ Retain _only_ the symbols listed in the file FILENAME, discarding ++ all others. FILENAME is simply a flat file, with one symbol name ++ per line. This option is especially useful in environments (such ++ as VxWorks) where a large global symbol table is accumulated ++ gradually, to conserve run-time memory. ++ ++ `--retain-symbols-file' does _not_ discard undefined symbols, or ++ symbols needed for relocations. ++ ++ You may only specify `--retain-symbols-file' once in the command ++ line. It overrides `-s' and `-S'. ++ ++`-rpath DIR' ++ Add a directory to the runtime library search path. This is used ++ when linking an ELF executable with shared objects. All `-rpath' ++ arguments are concatenated and passed to the runtime linker, which ++ uses them to locate shared objects at runtime. The `-rpath' ++ option is also used when locating shared objects which are needed ++ by shared objects explicitly included in the link; see the ++ description of the `-rpath-link' option. If `-rpath' is not used ++ when linking an ELF executable, the contents of the environment ++ variable `LD_RUN_PATH' will be used if it is defined. ++ ++ The `-rpath' option may also be used on SunOS. By default, on ++ SunOS, the linker will form a runtime search patch out of all the ++ `-L' options it is given. If a `-rpath' option is used, the ++ runtime search path will be formed exclusively using the `-rpath' ++ options, ignoring the `-L' options. This can be useful when using ++ gcc, which adds many `-L' options which may be on NFS mounted ++ filesystems. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-rpath-link DIR' ++ When using ELF or SunOS, one shared library may require another. ++ This happens when an `ld -shared' link includes a shared library ++ as one of the input files. ++ ++ When the linker encounters such a dependency when doing a ++ non-shared, non-relocatable link, it will automatically try to ++ locate the required shared library and include it in the link, if ++ it is not included explicitly. In such a case, the `-rpath-link' ++ option specifies the first set of directories to search. The ++ `-rpath-link' option may specify a sequence of directory names ++ either by specifying a list of names separated by colons, or by ++ appearing multiple times. ++ ++ This option should be used with caution as it overrides the search ++ path that may have been hard compiled into a shared library. In ++ such a case it is possible to use unintentionally a different ++ search path than the runtime linker would do. ++ ++ The linker uses the following search paths to locate required ++ shared libraries. ++ 1. Any directories specified by `-rpath-link' options. ++ ++ 2. Any directories specified by `-rpath' options. The difference ++ between `-rpath' and `-rpath-link' is that directories ++ specified by `-rpath' options are included in the executable ++ and used at runtime, whereas the `-rpath-link' option is only ++ effective at link time. It is for the native linker only. ++ ++ 3. On an ELF system, if the `-rpath' and `rpath-link' options ++ were not used, search the contents of the environment variable ++ `LD_RUN_PATH'. It is for the native linker only. ++ ++ 4. On SunOS, if the `-rpath' option was not used, search any ++ directories specified using `-L' options. ++ ++ 5. For a native linker, the contents of the environment variable ++ `LD_LIBRARY_PATH'. ++ ++ 6. For a native ELF linker, the directories in `DT_RUNPATH' or ++ `DT_RPATH' of a shared library are searched for shared ++ libraries needed by it. The `DT_RPATH' entries are ignored if ++ `DT_RUNPATH' entries exist. ++ ++ 7. The default directories, normally `/lib' and `/usr/lib'. ++ ++ 8. For a native linker on an ELF system, if the file ++ `/etc/ld.so.conf' exists, the list of directories found in ++ that file. ++ ++ If the required shared library is not found, the linker will issue ++ a warning and continue with the link. ++ ++`-shared' ++`-Bshareable' ++ Create a shared library. This is currently only supported on ELF, ++ XCOFF and SunOS platforms. On SunOS, the linker will ++ automatically create a shared library if the `-e' option is not ++ used and there are undefined symbols in the link. ++ ++`--sort-common' ++ This option tells `ld' to sort the common symbols by size when it ++ places them in the appropriate output sections. First come all ++ the one byte symbols, then all the two byte, then all the four ++ byte, and then everything else. This is to prevent gaps between ++ symbols due to alignment constraints. ++ ++`--sort-section name' ++ This option will apply `SORT_BY_NAME' to all wildcard section ++ patterns in the linker script. ++ ++`--sort-section alignment' ++ This option will apply `SORT_BY_ALIGNMENT' to all wildcard section ++ patterns in the linker script. ++ ++`--split-by-file [SIZE]' ++ Similar to `--split-by-reloc' but creates a new output section for ++ each input file when SIZE is reached. SIZE defaults to a size of ++ 1 if not given. ++ ++`--split-by-reloc [COUNT]' ++ Tries to creates extra sections in the output file so that no ++ single output section in the file contains more than COUNT ++ relocations. This is useful when generating huge relocatable ++ files for downloading into certain real time kernels with the COFF ++ object file format; since COFF cannot represent more than 65535 ++ relocations in a single section. Note that this will fail to work ++ with object file formats which do not support arbitrary sections. ++ The linker will not split up individual input sections for ++ redistribution, so if a single input section contains more than ++ COUNT relocations one output section will contain that many ++ relocations. COUNT defaults to a value of 32768. ++ ++`--stats' ++ Compute and display statistics about the operation of the linker, ++ such as execution time and memory usage. ++ ++`--sysroot=DIRECTORY' ++ Use DIRECTORY as the location of the sysroot, overriding the ++ configure-time default. This option is only supported by linkers ++ that were configured using `--with-sysroot'. ++ ++`--traditional-format' ++ For some targets, the output of `ld' is different in some ways from ++ the output of some existing linker. This switch requests `ld' to ++ use the traditional format instead. ++ ++ For example, on SunOS, `ld' combines duplicate entries in the ++ symbol string table. This can reduce the size of an output file ++ with full debugging information by over 30 percent. ++ Unfortunately, the SunOS `dbx' program can not read the resulting ++ program (`gdb' has no trouble). The `--traditional-format' switch ++ tells `ld' to not combine duplicate entries. ++ ++`--section-start SECTIONNAME=ORG' ++ Locate a section in the output file at the absolute address given ++ by ORG. You may use this option as many times as necessary to ++ locate multiple sections in the command line. ORG must be a ++ single hexadecimal integer; for compatibility with other linkers, ++ you may omit the leading `0x' usually associated with hexadecimal ++ values. _Note:_ there should be no white space between ++ SECTIONNAME, the equals sign ("<=>"), and ORG. ++ ++`-Tbss ORG' ++`-Tdata ORG' ++`-Ttext ORG' ++ Same as -section-start, with `.bss', `.data' or `.text' as the ++ SECTIONNAME. ++ ++`--unresolved-symbols=METHOD' ++ Determine how to handle unresolved symbols. There are four ++ possible values for `method': ++ ++ `ignore-all' ++ Do not report any unresolved symbols. ++ ++ `report-all' ++ Report all unresolved symbols. This is the default. ++ ++ `ignore-in-object-files' ++ Report unresolved symbols that are contained in shared ++ libraries, but ignore them if they come from regular object ++ files. ++ ++ `ignore-in-shared-libs' ++ Report unresolved symbols that come from regular object ++ files, but ignore them if they come from shared libraries. ++ This can be useful when creating a dynamic binary and it is ++ known that all the shared libraries that it should be ++ referencing are included on the linker's command line. ++ ++ The behaviour for shared libraries on their own can also be ++ controlled by the `--[no-]allow-shlib-undefined' option. ++ ++ Normally the linker will generate an error message for each ++ reported unresolved symbol but the option ++ `--warn-unresolved-symbols' can change this to a warning. ++ ++`--dll-verbose' ++`--verbose' ++ Display the version number for `ld' and list the linker emulations ++ supported. Display which input files can and cannot be opened. ++ Display the linker script being used by the linker. ++ ++`--version-script=VERSION-SCRIPTFILE' ++ Specify the name of a version script to the linker. This is ++ typically used when creating shared libraries to specify ++ additional information about the version hierarchy for the library ++ being created. This option is only meaningful on ELF platforms ++ which support shared libraries. *Note VERSION::. ++ ++`--warn-common' ++ Warn when a common symbol is combined with another common symbol ++ or with a symbol definition. Unix linkers allow this somewhat ++ sloppy practise, but linkers on some other operating systems do ++ not. This option allows you to find potential problems from ++ combining global symbols. Unfortunately, some C libraries use ++ this practise, so you may get some warnings about symbols in the ++ libraries as well as in your programs. ++ ++ There are three kinds of global symbols, illustrated here by C ++ examples: ++ ++ `int i = 1;' ++ A definition, which goes in the initialized data section of ++ the output file. ++ ++ `extern int i;' ++ An undefined reference, which does not allocate space. There ++ must be either a definition or a common symbol for the ++ variable somewhere. ++ ++ `int i;' ++ A common symbol. If there are only (one or more) common ++ symbols for a variable, it goes in the uninitialized data ++ area of the output file. The linker merges multiple common ++ symbols for the same variable into a single symbol. If they ++ are of different sizes, it picks the largest size. The ++ linker turns a common symbol into a declaration, if there is ++ a definition of the same variable. ++ ++ The `--warn-common' option can produce five kinds of warnings. ++ Each warning consists of a pair of lines: the first describes the ++ symbol just encountered, and the second describes the previous ++ symbol encountered with the same name. One or both of the two ++ symbols will be a common symbol. ++ ++ 1. Turning a common symbol into a reference, because there is ++ already a definition for the symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by definition ++ FILE(SECTION): warning: defined here ++ ++ 2. Turning a common symbol into a reference, because a later ++ definition for the symbol is encountered. This is the same ++ as the previous case, except that the symbols are encountered ++ in a different order. ++ FILE(SECTION): warning: definition of `SYMBOL' ++ overriding common ++ FILE(SECTION): warning: common is here ++ ++ 3. Merging a common symbol with a previous same-sized common ++ symbol. ++ FILE(SECTION): warning: multiple common ++ of `SYMBOL' ++ FILE(SECTION): warning: previous common is here ++ ++ 4. Merging a common symbol with a previous larger common symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by larger common ++ FILE(SECTION): warning: larger common is here ++ ++ 5. Merging a common symbol with a previous smaller common ++ symbol. This is the same as the previous case, except that ++ the symbols are encountered in a different order. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overriding smaller common ++ FILE(SECTION): warning: smaller common is here ++ ++`--warn-constructors' ++ Warn if any global constructors are used. This is only useful for ++ a few object file formats. For formats like COFF or ELF, the ++ linker can not detect the use of global constructors. ++ ++`--warn-multiple-gp' ++ Warn if multiple global pointer values are required in the output ++ file. This is only meaningful for certain processors, such as the ++ Alpha. Specifically, some processors put large-valued constants ++ in a special section. A special register (the global pointer) ++ points into the middle of this section, so that constants can be ++ loaded efficiently via a base-register relative addressing mode. ++ Since the offset in base-register relative mode is fixed and ++ relatively small (e.g., 16 bits), this limits the maximum size of ++ the constant pool. Thus, in large programs, it is often necessary ++ to use multiple global pointer values in order to be able to ++ address all possible constants. This option causes a warning to ++ be issued whenever this case occurs. ++ ++`--warn-once' ++ Only warn once for each undefined symbol, rather than once per ++ module which refers to it. ++ ++`--warn-section-align' ++ Warn if the address of an output section is changed because of ++ alignment. Typically, the alignment will be set by an input ++ section. The address will only be changed if it not explicitly ++ specified; that is, if the `SECTIONS' command does not specify a ++ start address for the section (*note SECTIONS::). ++ ++`--warn-shared-textrel' ++ Warn if the linker adds a DT_TEXTREL to a shared object. ++ ++`--warn-unresolved-symbols' ++ If the linker is going to report an unresolved symbol (see the ++ option `--unresolved-symbols') it will normally generate an error. ++ This option makes it generate a warning instead. ++ ++`--error-unresolved-symbols' ++ This restores the linker's default behaviour of generating errors ++ when it is reporting unresolved symbols. ++ ++`--whole-archive' ++ For each archive mentioned on the command line after the ++ `--whole-archive' option, include every object file in the archive ++ in the link, rather than searching the archive for the required ++ object files. This is normally used to turn an archive file into ++ a shared library, forcing every object to be included in the ++ resulting shared library. This option may be used more than once. ++ ++ Two notes when using this option from gcc: First, gcc doesn't know ++ about this option, so you have to use `-Wl,-whole-archive'. ++ Second, don't forget to use `-Wl,-no-whole-archive' after your ++ list of archives, because gcc will add its own list of archives to ++ your link and you may not want this flag to affect those as well. ++ ++`--wrap SYMBOL' ++ Use a wrapper function for SYMBOL. Any undefined reference to ++ SYMBOL will be resolved to `__wrap_SYMBOL'. Any undefined ++ reference to `__real_SYMBOL' will be resolved to SYMBOL. ++ ++ This can be used to provide a wrapper for a system function. The ++ wrapper function should be called `__wrap_SYMBOL'. If it wishes ++ to call the system function, it should call `__real_SYMBOL'. ++ ++ Here is a trivial example: ++ ++ void * ++ __wrap_malloc (size_t c) ++ { ++ printf ("malloc called with %zu\n", c); ++ return __real_malloc (c); ++ } ++ ++ If you link other code with this file using `--wrap malloc', then ++ all calls to `malloc' will call the function `__wrap_malloc' ++ instead. The call to `__real_malloc' in `__wrap_malloc' will call ++ the real `malloc' function. ++ ++ You may wish to provide a `__real_malloc' function as well, so that ++ links without the `--wrap' option will succeed. If you do this, ++ you should not put the definition of `__real_malloc' in the same ++ file as `__wrap_malloc'; if you do, the assembler may resolve the ++ call before the linker has a chance to wrap it to `malloc'. ++ ++`--eh-frame-hdr' ++ Request creation of `.eh_frame_hdr' section and ELF ++ `PT_GNU_EH_FRAME' segment header. ++ ++`--enable-new-dtags' ++`--disable-new-dtags' ++ This linker can create the new dynamic tags in ELF. But the older ++ ELF systems may not understand them. If you specify ++ `--enable-new-dtags', the dynamic tags will be created as needed. ++ If you specify `--disable-new-dtags', no new dynamic tags will be ++ created. By default, the new dynamic tags are not created. Note ++ that those options are only available for ELF systems. ++ ++`--hash-size=NUMBER' ++ Set the default size of the linker's hash tables to a prime number ++ close to NUMBER. Increasing this value can reduce the length of ++ time it takes the linker to perform its tasks, at the expense of ++ increasing the linker's memory requirements. Similarly reducing ++ this value can reduce the memory requirements at the expense of ++ speed. ++ ++`--reduce-memory-overheads' ++ This option reduces memory requirements at ld runtime, at the ++ expense of linking speed. This was introduced to select the old ++ O(n^2) algorithm for link map file generation, rather than the new ++ O(n) algorithm which uses about 40% more memory for symbol storage. ++ ++ Another effect of the switch is to set the default hash table size ++ to 1021, which again saves memory at the cost of lengthening the ++ linker's run time. This is not done however if the `--hash-size' ++ switch has been used. ++ ++ The `--reduce-memory-overheads' switch may be also be used to ++ enable other tradeoffs in future versions of the linker. ++ ++ ++2.1.1 Options Specific to i386 PE Targets ++----------------------------------------- ++ ++The i386 PE linker supports the `-shared' option, which causes the ++output to be a dynamically linked library (DLL) instead of a normal ++executable. You should name the output `*.dll' when you use this ++option. In addition, the linker fully supports the standard `*.def' ++files, which may be specified on the linker command line like an object ++file (in fact, it should precede archives it exports symbols from, to ++ensure that they get linked in, just like a normal object file). ++ ++ In addition to the options common to all targets, the i386 PE linker ++support additional command line options that are specific to the i386 ++PE target. Options that take values may be separated from their values ++by either a space or an equals sign. ++ ++`--add-stdcall-alias' ++ If given, symbols with a stdcall suffix (@NN) will be exported ++ as-is and also with the suffix stripped. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--base-file FILE' ++ Use FILE as the name of a file in which to save the base addresses ++ of all the relocations needed for generating DLLs with `dlltool'. ++ [This is an i386 PE specific option] ++ ++`--dll' ++ Create a DLL instead of a regular executable. You may also use ++ `-shared' or specify a `LIBRARY' in a given `.def' file. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--enable-stdcall-fixup' ++`--disable-stdcall-fixup' ++ If the link finds a symbol that it cannot resolve, it will attempt ++ to do "fuzzy linking" by looking for another defined symbol that ++ differs only in the format of the symbol name (cdecl vs stdcall) ++ and will resolve that symbol by linking to the match. For ++ example, the undefined symbol `_foo' might be linked to the ++ function `_foo@12', or the undefined symbol `_bar@16' might be ++ linked to the function `_bar'. When the linker does this, it ++ prints a warning, since it normally should have failed to link, ++ but sometimes import libraries generated from third-party dlls may ++ need this feature to be usable. If you specify ++ `--enable-stdcall-fixup', this feature is fully enabled and ++ warnings are not printed. If you specify ++ `--disable-stdcall-fixup', this feature is disabled and such ++ mismatches are considered to be errors. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--export-all-symbols' ++ If given, all global symbols in the objects used to build a DLL ++ will be exported by the DLL. Note that this is the default if ++ there otherwise wouldn't be any exported symbols. When symbols are ++ explicitly exported via DEF files or implicitly exported via ++ function attributes, the default is to not export anything else ++ unless this option is given. Note that the symbols `DllMain@12', ++ `DllEntryPoint@0', `DllMainCRTStartup@12', and `impure_ptr' will ++ not be automatically exported. Also, symbols imported from other ++ DLLs will not be re-exported, nor will symbols specifying the ++ DLL's internal layout such as those beginning with `_head_' or ++ ending with `_iname'. In addition, no symbols from `libgcc', ++ `libstd++', `libmingw32', or `crtX.o' will be exported. Symbols ++ whose names begin with `__rtti_' or `__builtin_' will not be ++ exported, to help with C++ DLLs. Finally, there is an extensive ++ list of cygwin-private symbols that are not exported (obviously, ++ this applies on when building DLLs for cygwin targets). These ++ cygwin-excludes are: `_cygwin_dll_entry@12', ++ `_cygwin_crt0_common@8', `_cygwin_noncygwin_dll_entry@12', ++ `_fmode', `_impure_ptr', `cygwin_attach_dll', `cygwin_premain0', ++ `cygwin_premain1', `cygwin_premain2', `cygwin_premain3', and ++ `environ'. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--exclude-symbols SYMBOL,SYMBOL,...' ++ Specifies a list of symbols which should not be automatically ++ exported. The symbol names may be delimited by commas or colons. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--file-alignment' ++ Specify the file alignment. Sections in the file will always ++ begin at file offsets which are multiples of this number. This ++ defaults to 512. [This option is specific to the i386 PE targeted ++ port of the linker] ++ ++`--heap RESERVE' ++`--heap RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as heap for this program. The default is 1Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--image-base VALUE' ++ Use VALUE as the base address of your program or dll. This is the ++ lowest memory location that will be used when your program or dll ++ is loaded. To reduce the need to relocate and improve performance ++ of your dlls, each should have a unique base address and not ++ overlap any other dlls. The default is 0x400000 for executables, ++ and 0x10000000 for dlls. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--kill-at' ++ If given, the stdcall suffixes (@NN) will be stripped from symbols ++ before they are exported. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--large-address-aware' ++ If given, the appropriate bit in the "Charateristics" field of the ++ COFF header is set to indicate that this executable supports ++ virtual addresses greater than 2 gigabytes. This should be used ++ in conjuction with the /3GB or /USERVA=VALUE megabytes switch in ++ the "[operating systems]" section of the BOOT.INI. Otherwise, ++ this bit has no effect. [This option is specific to PE targeted ++ ports of the linker] ++ ++`--major-image-version VALUE' ++ Sets the major number of the "image version". Defaults to 1. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--major-os-version VALUE' ++ Sets the major number of the "os version". Defaults to 4. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--major-subsystem-version VALUE' ++ Sets the major number of the "subsystem version". Defaults to 4. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-image-version VALUE' ++ Sets the minor number of the "image version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-os-version VALUE' ++ Sets the minor number of the "os version". Defaults to 0. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--minor-subsystem-version VALUE' ++ Sets the minor number of the "subsystem version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--output-def FILE' ++ The linker will create the file FILE which will contain a DEF file ++ corresponding to the DLL the linker is generating. This DEF file ++ (which should be called `*.def') may be used to create an import ++ library with `dlltool' or may be used as a reference to ++ automatically or implicitly exported symbols. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--out-implib FILE' ++ The linker will create the file FILE which will contain an import ++ lib corresponding to the DLL the linker is generating. This import ++ lib (which should be called `*.dll.a' or `*.a' may be used to link ++ clients against the generated DLL; this behaviour makes it ++ possible to skip a separate `dlltool' import library creation step. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--enable-auto-image-base' ++ Automatically choose the image base for DLLs, unless one is ++ specified using the `--image-base' argument. By using a hash ++ generated from the dllname to create unique image bases for each ++ DLL, in-memory collisions and relocations which can delay program ++ execution are avoided. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-auto-image-base' ++ Do not automatically generate a unique image base. If there is no ++ user-specified image base (`--image-base') then use the platform ++ default. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--dll-search-prefix STRING' ++ When linking dynamically to a dll without an import library, ++ search for `.dll' in preference to ++ `lib.dll'. This behaviour allows easy distinction ++ between DLLs built for the various "subplatforms": native, cygwin, ++ uwin, pw, etc. For instance, cygwin DLLs typically use ++ `--dll-search-prefix=cyg'. [This option is specific to the i386 ++ PE targeted port of the linker] ++ ++`--enable-auto-import' ++ Do sophisticated linking of `_symbol' to `__imp__symbol' for DATA ++ imports from DLLs, and create the necessary thunking symbols when ++ building the import libraries with those DATA exports. Note: Use ++ of the 'auto-import' extension will cause the text section of the ++ image file to be made writable. This does not conform to the ++ PE-COFF format specification published by Microsoft. ++ ++ Using 'auto-import' generally will 'just work' - but sometimes you ++ may see this message: ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ This message occurs when some (sub)expression accesses an address ++ ultimately given by the sum of two constants (Win32 import tables ++ only allow one). Instances where this may occur include accesses ++ to member fields of struct variables imported from a DLL, as well ++ as using a constant index into an array variable imported from a ++ DLL. Any multiword variable (arrays, structs, long long, etc) may ++ trigger this error condition. However, regardless of the exact ++ data type of the offending exported variable, ld will always ++ detect it, issue the warning, and exit. ++ ++ There are several ways to address this difficulty, regardless of ++ the data type of the exported variable: ++ ++ One way is to use -enable-runtime-pseudo-reloc switch. This leaves ++ the task of adjusting references in your client code for runtime ++ environment, so this method works only when runtime environment ++ supports this feature. ++ ++ A second solution is to force one of the 'constants' to be a ++ variable - that is, unknown and un-optimizable at compile time. ++ For arrays, there are two possibilities: a) make the indexee (the ++ array's address) a variable, or b) make the 'constant' index a ++ variable. Thus: ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile type *t=extern_array; t[1] } ++ ++ or ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile int t=1; extern_array[t] } ++ ++ For structs (and most other multiword data types) the only option ++ is to make the struct itself (or the long long, or the ...) ++ variable: ++ ++ extern struct s extern_struct; ++ extern_struct.field --> ++ { volatile struct s *t=&extern_struct; t->field } ++ ++ or ++ ++ extern long long extern_ll; ++ extern_ll --> ++ { volatile long long * local_ll=&extern_ll; *local_ll } ++ ++ A third method of dealing with this difficulty is to abandon ++ 'auto-import' for the offending symbol and mark it with ++ `__declspec(dllimport)'. However, in practise that requires using ++ compile-time #defines to indicate whether you are building a DLL, ++ building client code that will link to the DLL, or merely ++ building/linking to a static library. In making the choice ++ between the various methods of resolving the 'direct address with ++ constant offset' problem, you should consider typical real-world ++ usage: ++ ++ Original: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ Solution 1: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ /* This workaround is for win32 and cygwin; do not "optimize" */ ++ volatile int *parr = arr; ++ printf("%d\n",parr[1]); ++ } ++ ++ Solution 2: ++ --foo.h ++ /* Note: auto-export is assumed (no __declspec(dllexport)) */ ++ #if (defined(_WIN32) || defined(__CYGWIN__)) && \ ++ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) ++ #define FOO_IMPORT __declspec(dllimport) ++ #else ++ #define FOO_IMPORT ++ #endif ++ extern FOO_IMPORT int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ A fourth way to avoid this problem is to re-code your library to ++ use a functional interface rather than a data interface for the ++ offending variables (e.g. set_foo() and get_foo() accessor ++ functions). [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--disable-auto-import' ++ Do not attempt to do sophisticated linking of `_symbol' to ++ `__imp__symbol' for DATA imports from DLLs. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--enable-runtime-pseudo-reloc' ++ If your code contains expressions described in -enable-auto-import ++ section, that is, DATA imports from DLL with non-zero offset, this ++ switch will create a vector of 'runtime pseudo relocations' which ++ can be used by runtime environment to adjust references to such ++ data in your client code. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-runtime-pseudo-reloc' ++ Do not create pseudo relocations for non-zero offset DATA imports ++ from DLLs. This is the default. [This option is specific to the ++ i386 PE targeted port of the linker] ++ ++`--enable-extra-pe-debug' ++ Show additional debug info related to auto-import symbol thunking. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--section-alignment' ++ Sets the section alignment. Sections in memory will always begin ++ at addresses which are a multiple of this number. Defaults to ++ 0x1000. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--stack RESERVE' ++`--stack RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as stack for this program. The default is 2Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--subsystem WHICH' ++`--subsystem WHICH:MAJOR' ++`--subsystem WHICH:MAJOR.MINOR' ++ Specifies the subsystem under which your program will execute. The ++ legal values for WHICH are `native', `windows', `console', ++ `posix', and `xbox'. You may optionally set the subsystem version ++ also. Numeric values are also accepted for WHICH. [This option ++ is specific to the i386 PE targeted port of the linker] ++ ++ ++ ++File: ld.info, Node: Environment, Prev: Options, Up: Invocation ++ ++2.2 Environment Variables ++========================= ++ ++You can change the behaviour of `ld' with the environment variables ++`GNUTARGET', `LDEMULATION' and `COLLECT_NO_DEMANGLE'. ++ ++ `GNUTARGET' determines the input-file object format if you don't use ++`-b' (or its synonym `--format'). Its value should be one of the BFD ++names for an input format (*note BFD::). If there is no `GNUTARGET' in ++the environment, `ld' uses the natural format of the target. If ++`GNUTARGET' is set to `default' then BFD attempts to discover the input ++format by examining binary input files; this method often succeeds, but ++there are potential ambiguities, since there is no method of ensuring ++that the magic number used to specify object-file formats is unique. ++However, the configuration procedure for BFD on each system places the ++conventional format for that system first in the search-list, so ++ambiguities are resolved in favor of convention. ++ ++ `LDEMULATION' determines the default emulation if you don't use the ++`-m' option. The emulation can affect various aspects of linker ++behaviour, particularly the default linker script. You can list the ++available emulations with the `--verbose' or `-V' options. If the `-m' ++option is not used, and the `LDEMULATION' environment variable is not ++defined, the default emulation depends upon how the linker was ++configured. ++ ++ Normally, the linker will default to demangling symbols. However, if ++`COLLECT_NO_DEMANGLE' is set in the environment, then it will default ++to not demangling symbols. This environment variable is used in a ++similar fashion by the `gcc' linker wrapper program. The default may ++be overridden by the `--demangle' and `--no-demangle' options. ++ ++ ++File: ld.info, Node: Scripts, Next: Machine Dependent, Prev: Invocation, Up: Top ++ ++3 Linker Scripts ++**************** ++ ++Every link is controlled by a "linker script". This script is written ++in the linker command language. ++ ++ The main purpose of the linker script is to describe how the ++sections in the input files should be mapped into the output file, and ++to control the memory layout of the output file. Most linker scripts ++do nothing more than this. However, when necessary, the linker script ++can also direct the linker to perform many other operations, using the ++commands described below. ++ ++ The linker always uses a linker script. If you do not supply one ++yourself, the linker will use a default script that is compiled into the ++linker executable. You can use the `--verbose' command line option to ++display the default linker script. Certain command line options, such ++as `-r' or `-N', will affect the default linker script. ++ ++ You may supply your own linker script by using the `-T' command line ++option. When you do this, your linker script will replace the default ++linker script. ++ ++ You may also use linker scripts implicitly by naming them as input ++files to the linker, as though they were files to be linked. *Note ++Implicit Linker Scripts::. ++ ++* Menu: ++ ++* Basic Script Concepts:: Basic Linker Script Concepts ++* Script Format:: Linker Script Format ++* Simple Example:: Simple Linker Script Example ++* Simple Commands:: Simple Linker Script Commands ++* Assignments:: Assigning Values to Symbols ++* SECTIONS:: SECTIONS Command ++* MEMORY:: MEMORY Command ++* PHDRS:: PHDRS Command ++* VERSION:: VERSION Command ++* Expressions:: Expressions in Linker Scripts ++* Implicit Linker Scripts:: Implicit Linker Scripts ++ ++ ++File: ld.info, Node: Basic Script Concepts, Next: Script Format, Up: Scripts ++ ++3.1 Basic Linker Script Concepts ++================================ ++ ++We need to define some basic concepts and vocabulary in order to ++describe the linker script language. ++ ++ The linker combines input files into a single output file. The ++output file and each input file are in a special data format known as an ++"object file format". Each file is called an "object file". The ++output file is often called an "executable", but for our purposes we ++will also call it an object file. Each object file has, among other ++things, a list of "sections". We sometimes refer to a section in an ++input file as an "input section"; similarly, a section in the output ++file is an "output section". ++ ++ Each section in an object file has a name and a size. Most sections ++also have an associated block of data, known as the "section contents". ++A section may be marked as "loadable", which mean that the contents ++should be loaded into memory when the output file is run. A section ++with no contents may be "allocatable", which means that an area in ++memory should be set aside, but nothing in particular should be loaded ++there (in some cases this memory must be zeroed out). A section which ++is neither loadable nor allocatable typically contains some sort of ++debugging information. ++ ++ Every loadable or allocatable output section has two addresses. The ++first is the "VMA", or virtual memory address. This is the address the ++section will have when the output file is run. The second is the ++"LMA", or load memory address. This is the address at which the ++section will be loaded. In most cases the two addresses will be the ++same. An example of when they might be different is when a data section ++is loaded into ROM, and then copied into RAM when the program starts up ++(this technique is often used to initialize global variables in a ROM ++based system). In this case the ROM address would be the LMA, and the ++RAM address would be the VMA. ++ ++ You can see the sections in an object file by using the `objdump' ++program with the `-h' option. ++ ++ Every object file also has a list of "symbols", known as the "symbol ++table". A symbol may be defined or undefined. Each symbol has a name, ++and each defined symbol has an address, among other information. If ++you compile a C or C++ program into an object file, you will get a ++defined symbol for every defined function and global or static ++variable. Every undefined function or global variable which is ++referenced in the input file will become an undefined symbol. ++ ++ You can see the symbols in an object file by using the `nm' program, ++or by using the `objdump' program with the `-t' option. ++ ++ ++File: ld.info, Node: Script Format, Next: Simple Example, Prev: Basic Script Concepts, Up: Scripts ++ ++3.2 Linker Script Format ++======================== ++ ++Linker scripts are text files. ++ ++ You write a linker script as a series of commands. Each command is ++either a keyword, possibly followed by arguments, or an assignment to a ++symbol. You may separate commands using semicolons. Whitespace is ++generally ignored. ++ ++ Strings such as file or format names can normally be entered ++directly. If the file name contains a character such as a comma which ++would otherwise serve to separate file names, you may put the file name ++in double quotes. There is no way to use a double quote character in a ++file name. ++ ++ You may include comments in linker scripts just as in C, delimited by ++`/*' and `*/'. As in C, comments are syntactically equivalent to ++whitespace. ++ ++ ++File: ld.info, Node: Simple Example, Next: Simple Commands, Prev: Script Format, Up: Scripts ++ ++3.3 Simple Linker Script Example ++================================ ++ ++Many linker scripts are fairly simple. ++ ++ The simplest possible linker script has just one command: ++`SECTIONS'. You use the `SECTIONS' command to describe the memory ++layout of the output file. ++ ++ The `SECTIONS' command is a powerful command. Here we will describe ++a simple use of it. Let's assume your program consists only of code, ++initialized data, and uninitialized data. These will be in the ++`.text', `.data', and `.bss' sections, respectively. Let's assume ++further that these are the only sections which appear in your input ++files. ++ ++ For this example, let's say that the code should be loaded at address ++0x10000, and that the data should start at address 0x8000000. Here is a ++linker script which will do that: ++ SECTIONS ++ { ++ . = 0x10000; ++ .text : { *(.text) } ++ . = 0x8000000; ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ You write the `SECTIONS' command as the keyword `SECTIONS', followed ++by a series of symbol assignments and output section descriptions ++enclosed in curly braces. ++ ++ The first line inside the `SECTIONS' command of the above example ++sets the value of the special symbol `.', which is the location ++counter. If you do not specify the address of an output section in some ++other way (other ways are described later), the address is set from the ++current value of the location counter. The location counter is then ++incremented by the size of the output section. At the start of the ++`SECTIONS' command, the location counter has the value `0'. ++ ++ The second line defines an output section, `.text'. The colon is ++required syntax which may be ignored for now. Within the curly braces ++after the output section name, you list the names of the input sections ++which should be placed into this output section. The `*' is a wildcard ++which matches any file name. The expression `*(.text)' means all ++`.text' input sections in all input files. ++ ++ Since the location counter is `0x10000' when the output section ++`.text' is defined, the linker will set the address of the `.text' ++section in the output file to be `0x10000'. ++ ++ The remaining lines define the `.data' and `.bss' sections in the ++output file. The linker will place the `.data' output section at ++address `0x8000000'. After the linker places the `.data' output ++section, the value of the location counter will be `0x8000000' plus the ++size of the `.data' output section. The effect is that the linker will ++place the `.bss' output section immediately after the `.data' output ++section in memory. ++ ++ The linker will ensure that each output section has the required ++alignment, by increasing the location counter if necessary. In this ++example, the specified addresses for the `.text' and `.data' sections ++will probably satisfy any alignment constraints, but the linker may ++have to create a small gap between the `.data' and `.bss' sections. ++ ++ That's it! That's a simple and complete linker script. ++ ++ ++File: ld.info, Node: Simple Commands, Next: Assignments, Prev: Simple Example, Up: Scripts ++ ++3.4 Simple Linker Script Commands ++================================= ++ ++In this section we describe the simple linker script commands. ++ ++* Menu: ++ ++* Entry Point:: Setting the entry point ++* File Commands:: Commands dealing with files ++ ++* Format Commands:: Commands dealing with object file formats ++ ++* Miscellaneous Commands:: Other linker script commands ++ ++ ++File: ld.info, Node: Entry Point, Next: File Commands, Up: Simple Commands ++ ++3.4.1 Setting the Entry Point ++----------------------------- ++ ++The first instruction to execute in a program is called the "entry ++point". You can use the `ENTRY' linker script command to set the entry ++point. The argument is a symbol name: ++ ENTRY(SYMBOL) ++ ++ There are several ways to set the entry point. The linker will set ++the entry point by trying each of the following methods in order, and ++stopping when one of them succeeds: ++ * the `-e' ENTRY command-line option; ++ ++ * the `ENTRY(SYMBOL)' command in a linker script; ++ ++ * the value of the symbol `start', if defined; ++ ++ * the address of the first byte of the `.text' section, if present; ++ ++ * The address `0'. ++ ++ ++File: ld.info, Node: File Commands, Next: Format Commands, Prev: Entry Point, Up: Simple Commands ++ ++3.4.2 Commands Dealing with Files ++--------------------------------- ++ ++Several linker script commands deal with files. ++ ++`INCLUDE FILENAME' ++ Include the linker script FILENAME at this point. The file will ++ be searched for in the current directory, and in any directory ++ specified with the `-L' option. You can nest calls to `INCLUDE' ++ up to 10 levels deep. ++ ++`INPUT(FILE, FILE, ...)' ++`INPUT(FILE FILE ...)' ++ The `INPUT' command directs the linker to include the named files ++ in the link, as though they were named on the command line. ++ ++ For example, if you always want to include `subr.o' any time you do ++ a link, but you can't be bothered to put it on every link command ++ line, then you can put `INPUT (subr.o)' in your linker script. ++ ++ In fact, if you like, you can list all of your input files in the ++ linker script, and then invoke the linker with nothing but a `-T' ++ option. ++ ++ In case a "sysroot prefix" is configured, and the filename starts ++ with the `/' character, and the script being processed was located ++ inside the "sysroot prefix", the filename will be looked for in ++ the "sysroot prefix". Otherwise, the linker will try to open the ++ file in the current directory. If it is not found, the linker ++ will search through the archive library search path. See the ++ description of `-L' in *Note Command Line Options: Options. ++ ++ If you use `INPUT (-lFILE)', `ld' will transform the name to ++ `libFILE.a', as with the command line argument `-l'. ++ ++ When you use the `INPUT' command in an implicit linker script, the ++ files will be included in the link at the point at which the linker ++ script file is included. This can affect archive searching. ++ ++`GROUP(FILE, FILE, ...)' ++`GROUP(FILE FILE ...)' ++ The `GROUP' command is like `INPUT', except that the named files ++ should all be archives, and they are searched repeatedly until no ++ new undefined references are created. See the description of `-(' ++ in *Note Command Line Options: Options. ++ ++`AS_NEEDED(FILE, FILE, ...)' ++`AS_NEEDED(FILE FILE ...)' ++ This construct can appear only inside of the `INPUT' or `GROUP' ++ commands, among other filenames. The files listed will be handled ++ as if they appear directly in the `INPUT' or `GROUP' commands, ++ with the exception of ELF shared libraries, that will be added only ++ when they are actually needed. This construct essentially enables ++ `--as-needed' option for all the files listed inside of it and ++ restores previous `--as-needed' resp. `--no-as-needed' setting ++ afterwards. ++ ++`OUTPUT(FILENAME)' ++ The `OUTPUT' command names the output file. Using ++ `OUTPUT(FILENAME)' in the linker script is exactly like using `-o ++ FILENAME' on the command line (*note Command Line Options: ++ Options.). If both are used, the command line option takes ++ precedence. ++ ++ You can use the `OUTPUT' command to define a default name for the ++ output file other than the usual default of `a.out'. ++ ++`SEARCH_DIR(PATH)' ++ The `SEARCH_DIR' command adds PATH to the list of paths where `ld' ++ looks for archive libraries. Using `SEARCH_DIR(PATH)' is exactly ++ like using `-L PATH' on the command line (*note Command Line ++ Options: Options.). If both are used, then the linker will search ++ both paths. Paths specified using the command line option are ++ searched first. ++ ++`STARTUP(FILENAME)' ++ The `STARTUP' command is just like the `INPUT' command, except ++ that FILENAME will become the first input file to be linked, as ++ though it were specified first on the command line. This may be ++ useful when using a system in which the entry point is always the ++ start of the first file. ++ ++ ++File: ld.info, Node: Format Commands, Next: Miscellaneous Commands, Prev: File Commands, Up: Simple Commands ++ ++3.4.3 Commands Dealing with Object File Formats ++----------------------------------------------- ++ ++A couple of linker script commands deal with object file formats. ++ ++`OUTPUT_FORMAT(BFDNAME)' ++`OUTPUT_FORMAT(DEFAULT, BIG, LITTLE)' ++ The `OUTPUT_FORMAT' command names the BFD format to use for the ++ output file (*note BFD::). Using `OUTPUT_FORMAT(BFDNAME)' is ++ exactly like using `--oformat BFDNAME' on the command line (*note ++ Command Line Options: Options.). If both are used, the command ++ line option takes precedence. ++ ++ You can use `OUTPUT_FORMAT' with three arguments to use different ++ formats based on the `-EB' and `-EL' command line options. This ++ permits the linker script to set the output format based on the ++ desired endianness. ++ ++ If neither `-EB' nor `-EL' are used, then the output format will ++ be the first argument, DEFAULT. If `-EB' is used, the output ++ format will be the second argument, BIG. If `-EL' is used, the ++ output format will be the third argument, LITTLE. ++ ++ For example, the default linker script for the MIPS ELF target ++ uses this command: ++ OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips) ++ This says that the default format for the output file is ++ `elf32-bigmips', but if the user uses the `-EL' command line ++ option, the output file will be created in the `elf32-littlemips' ++ format. ++ ++`TARGET(BFDNAME)' ++ The `TARGET' command names the BFD format to use when reading input ++ files. It affects subsequent `INPUT' and `GROUP' commands. This ++ command is like using `-b BFDNAME' on the command line (*note ++ Command Line Options: Options.). If the `TARGET' command is used ++ but `OUTPUT_FORMAT' is not, then the last `TARGET' command is also ++ used to set the format for the output file. *Note BFD::. ++ ++ ++File: ld.info, Node: Miscellaneous Commands, Prev: Format Commands, Up: Simple Commands ++ ++3.4.4 Other Linker Script Commands ++---------------------------------- ++ ++There are a few other linker scripts commands. ++ ++`ASSERT(EXP, MESSAGE)' ++ Ensure that EXP is non-zero. If it is zero, then exit the linker ++ with an error code, and print MESSAGE. ++ ++`EXTERN(SYMBOL SYMBOL ...)' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. You may list several SYMBOLs for ++ each `EXTERN', and you may use `EXTERN' multiple times. This ++ command has the same effect as the `-u' command-line option. ++ ++`FORCE_COMMON_ALLOCATION' ++ This command has the same effect as the `-d' command-line option: ++ to make `ld' assign space to common symbols even if a relocatable ++ output file is specified (`-r'). ++ ++`INHIBIT_COMMON_ALLOCATION' ++ This command has the same effect as the `--no-define-common' ++ command-line option: to make `ld' omit the assignment of addresses ++ to common symbols even for a non-relocatable output file. ++ ++`NOCROSSREFS(SECTION SECTION ...)' ++ This command may be used to tell `ld' to issue an error about any ++ references among certain output sections. ++ ++ In certain types of programs, particularly on embedded systems when ++ using overlays, when one section is loaded into memory, another ++ section will not be. Any direct references between the two ++ sections would be errors. For example, it would be an error if ++ code in one section called a function defined in the other section. ++ ++ The `NOCROSSREFS' command takes a list of output section names. If ++ `ld' detects any cross references between the sections, it reports ++ an error and returns a non-zero exit status. Note that the ++ `NOCROSSREFS' command uses output section names, not input section ++ names. ++ ++`OUTPUT_ARCH(BFDARCH)' ++ Specify a particular output machine architecture. The argument is ++ one of the names used by the BFD library (*note BFD::). You can ++ see the architecture of an object file by using the `objdump' ++ program with the `-f' option. ++ ++ ++File: ld.info, Node: Assignments, Next: SECTIONS, Prev: Simple Commands, Up: Scripts ++ ++3.5 Assigning Values to Symbols ++=============================== ++ ++You may assign a value to a symbol in a linker script. This will define ++the symbol and place it into the symbol table with a global scope. ++ ++* Menu: ++ ++* Simple Assignments:: Simple Assignments ++* PROVIDE:: PROVIDE ++* PROVIDE_HIDDEN:: PROVIDE_HIDDEN ++* Source Code Reference:: How to use a linker script defined symbol in source code ++ ++ ++File: ld.info, Node: Simple Assignments, Next: PROVIDE, Up: Assignments ++ ++3.5.1 Simple Assignments ++------------------------ ++ ++You may assign to a symbol using any of the C assignment operators: ++ ++`SYMBOL = EXPRESSION ;' ++`SYMBOL += EXPRESSION ;' ++`SYMBOL -= EXPRESSION ;' ++`SYMBOL *= EXPRESSION ;' ++`SYMBOL /= EXPRESSION ;' ++`SYMBOL <<= EXPRESSION ;' ++`SYMBOL >>= EXPRESSION ;' ++`SYMBOL &= EXPRESSION ;' ++`SYMBOL |= EXPRESSION ;' ++ ++ The first case will define SYMBOL to the value of EXPRESSION. In ++the other cases, SYMBOL must already be defined, and the value will be ++adjusted accordingly. ++ ++ The special symbol name `.' indicates the location counter. You may ++only use this within a `SECTIONS' command. *Note Location Counter::. ++ ++ The semicolon after EXPRESSION is required. ++ ++ Expressions are defined below; see *Note Expressions::. ++ ++ You may write symbol assignments as commands in their own right, or ++as statements within a `SECTIONS' command, or as part of an output ++section description in a `SECTIONS' command. ++ ++ The section of the symbol will be set from the section of the ++expression; for more information, see *Note Expression Section::. ++ ++ Here is an example showing the three different places that symbol ++assignments may be used: ++ ++ floating_point = 0; ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ } ++ _bdata = (. + 3) & ~ 3; ++ .data : { *(.data) } ++ } ++ In this example, the symbol `floating_point' will be defined as ++zero. The symbol `_etext' will be defined as the address following the ++last `.text' input section. The symbol `_bdata' will be defined as the ++address following the `.text' output section aligned upward to a 4 byte ++boundary. ++ ++ ++File: ld.info, Node: PROVIDE, Next: PROVIDE_HIDDEN, Prev: Simple Assignments, Up: Assignments ++ ++3.5.2 PROVIDE ++------------- ++ ++In some cases, it is desirable for a linker script to define a symbol ++only if it is referenced and is not defined by any object included in ++the link. For example, traditional linkers defined the symbol `etext'. ++However, ANSI C requires that the user be able to use `etext' as a ++function name without encountering an error. The `PROVIDE' keyword may ++be used to define a symbol, such as `etext', only if it is referenced ++but not defined. The syntax is `PROVIDE(SYMBOL = EXPRESSION)'. ++ ++ Here is an example of using `PROVIDE' to define `etext': ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ PROVIDE(etext = .); ++ } ++ } ++ ++ In this example, if the program defines `_etext' (with a leading ++underscore), the linker will give a multiple definition error. If, on ++the other hand, the program defines `etext' (with no leading ++underscore), the linker will silently use the definition in the program. ++If the program references `etext' but does not define it, the linker ++will use the definition in the linker script. ++ ++ ++File: ld.info, Node: PROVIDE_HIDDEN, Next: Source Code Reference, Prev: PROVIDE, Up: Assignments ++ ++3.5.3 PROVIDE_HIDDEN ++-------------------- ++ ++Similar to `PROVIDE'. For ELF targeted ports, the symbol will be ++hidden and won't be exported. ++ ++ ++File: ld.info, Node: Source Code Reference, Prev: PROVIDE_HIDDEN, Up: Assignments ++ ++3.5.4 Source Code Reference ++--------------------------- ++ ++Accessing a linker script defined variable from source code is not ++intuitive. In particular a linker script symbol is not equivalent to a ++variable declaration in a high level language, it is instead a symbol ++that does not have a value. ++ ++ Before going further, it is important to note that compilers often ++transform names in the source code into different names when they are ++stored in the symbol table. For example, Fortran compilers commonly ++prepend or append an underscore, and C++ performs extensive `name ++mangling'. Therefore there might be a discrepancy between the name of ++a variable as it is used in source code and the name of the same ++variable as it is defined in a linker script. For example in C a ++linker script variable might be referred to as: ++ ++ extern int foo; ++ ++ But in the linker script it might be defined as: ++ ++ _foo = 1000; ++ ++ In the remaining examples however it is assumed that no name ++transformation has taken place. ++ ++ When a symbol is declared in a high level language such as C, two ++things happen. The first is that the compiler reserves enough space in ++the program's memory to hold the _value_ of the symbol. The second is ++that the compiler creates an entry in the program's symbol table which ++holds the symbol's _address_. ie the symbol table contains the address ++of the block of memory holding the symbol's value. So for example the ++following C declaration, at file scope: ++ ++ int foo = 1000; ++ ++ creates a entry called `foo' in the symbol table. This entry holds ++the address of an `int' sized block of memory where the number 1000 is ++initially stored. ++ ++ When a program references a symbol the compiler generates code that ++first accesses the symbol table to find the address of the symbol's ++memory block and then code to read the value from that memory block. ++So: ++ ++ foo = 1; ++ ++ looks up the symbol `foo' in the symbol table, gets the address ++associated with this symbol and then writes the value 1 into that ++address. Whereas: ++ ++ int * a = & foo; ++ ++ looks up the symbol `foo' in the symbol table, gets it address and ++then copies this address into the block of memory associated with the ++variable `a'. ++ ++ Linker scripts symbol declarations, by contrast, create an entry in ++the symbol table but do not assign any memory to them. Thus they are ++an address without a value. So for example the linker script ++definition: ++ ++ foo = 1000; ++ ++ creates an entry in the symbol table called `foo' which holds the ++address of memory location 1000, but nothing special is stored at ++address 1000. This means that you cannot access the _value_ of a ++linker script defined symbol - it has no value - all you can do is ++access the _address_ of a linker script defined symbol. ++ ++ Hence when you are using a linker script defined symbol in source ++code you should always take the address of the symbol, and never ++attempt to use its value. For example suppose you want to copy the ++contents of a section of memory called .ROM into a section called ++.FLASH and the linker script contains these declarations: ++ ++ start_of_ROM = .ROM; ++ end_of_ROM = .ROM + sizeof (.ROM) - 1; ++ start_of_FLASH = .FLASH; ++ ++ Then the C source code to perform the copy would be: ++ ++ extern char start_of_ROM, end_of_ROM, start_of_FLASH; ++ ++ memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM); ++ ++ Note the use of the `&' operators. These are correct. ++ ++ ++File: ld.info, Node: SECTIONS, Next: MEMORY, Prev: Assignments, Up: Scripts ++ ++3.6 SECTIONS Command ++==================== ++ ++The `SECTIONS' command tells the linker how to map input sections into ++output sections, and how to place the output sections in memory. ++ ++ The format of the `SECTIONS' command is: ++ SECTIONS ++ { ++ SECTIONS-COMMAND ++ SECTIONS-COMMAND ++ ... ++ } ++ ++ Each SECTIONS-COMMAND may of be one of the following: ++ ++ * an `ENTRY' command (*note Entry command: Entry Point.) ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an output section description ++ ++ * an overlay description ++ ++ The `ENTRY' command and symbol assignments are permitted inside the ++`SECTIONS' command for convenience in using the location counter in ++those commands. This can also make the linker script easier to ++understand because you can use those commands at meaningful points in ++the layout of the output file. ++ ++ Output section descriptions and overlay descriptions are described ++below. ++ ++ If you do not use a `SECTIONS' command in your linker script, the ++linker will place each input section into an identically named output ++section in the order that the sections are first encountered in the ++input files. If all input sections are present in the first file, for ++example, the order of sections in the output file will match the order ++in the first input file. The first section will be at address zero. ++ ++* Menu: ++ ++* Output Section Description:: Output section description ++* Output Section Name:: Output section name ++* Output Section Address:: Output section address ++* Input Section:: Input section description ++* Output Section Data:: Output section data ++* Output Section Keywords:: Output section keywords ++* Output Section Discarding:: Output section discarding ++* Output Section Attributes:: Output section attributes ++* Overlay Description:: Overlay description ++ ++ ++File: ld.info, Node: Output Section Description, Next: Output Section Name, Up: SECTIONS ++ ++3.6.1 Output Section Description ++-------------------------------- ++ ++The full description of an output section looks like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++ ++ Most output sections do not use most of the optional section ++attributes. ++ ++ The whitespace around SECTION is required, so that the section name ++is unambiguous. The colon and the curly braces are also required. The ++line breaks and other white space are optional. ++ ++ Each OUTPUT-SECTION-COMMAND may be one of the following: ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an input section description (*note Input Section::) ++ ++ * data values to include directly (*note Output Section Data::) ++ ++ * a special output section keyword (*note Output Section Keywords::) ++ ++ ++File: ld.info, Node: Output Section Name, Next: Output Section Address, Prev: Output Section Description, Up: SECTIONS ++ ++3.6.2 Output Section Name ++------------------------- ++ ++The name of the output section is SECTION. SECTION must meet the ++constraints of your output format. In formats which only support a ++limited number of sections, such as `a.out', the name must be one of ++the names supported by the format (`a.out', for example, allows only ++`.text', `.data' or `.bss'). If the output format supports any number ++of sections, but with numbers and not names (as is the case for Oasys), ++the name should be supplied as a quoted numeric string. A section name ++may consist of any sequence of characters, but a name which contains ++any unusual characters such as commas must be quoted. ++ ++ The output section name `/DISCARD/' is special; *Note Output Section ++Discarding::. ++ ++ ++File: ld.info, Node: Output Section Address, Next: Input Section, Prev: Output Section Name, Up: SECTIONS ++ ++3.6.3 Output Section Address ++---------------------------- ++ ++The ADDRESS is an expression for the VMA (the virtual memory address) ++of the output section. If you do not provide ADDRESS, the linker will ++set it based on REGION if present, or otherwise based on the current ++value of the location counter. ++ ++ If you provide ADDRESS, the address of the output section will be ++set to precisely that. If you provide neither ADDRESS nor REGION, then ++the address of the output section will be set to the current value of ++the location counter aligned to the alignment requirements of the ++output section. The alignment requirement of the output section is the ++strictest alignment of any input section contained within the output ++section. ++ ++ For example, ++ .text . : { *(.text) } ++ and ++ .text : { *(.text) } ++ are subtly different. The first will set the address of the `.text' ++output section to the current value of the location counter. The ++second will set it to the current value of the location counter aligned ++to the strictest alignment of a `.text' input section. ++ ++ The ADDRESS may be an arbitrary expression; *Note Expressions::. ++For example, if you want to align the section on a 0x10 byte boundary, ++so that the lowest four bits of the section address are zero, you could ++do something like this: ++ .text ALIGN(0x10) : { *(.text) } ++ This works because `ALIGN' returns the current location counter ++aligned upward to the specified value. ++ ++ Specifying ADDRESS for a section will change the value of the ++location counter. ++ ++ ++File: ld.info, Node: Input Section, Next: Output Section Data, Prev: Output Section Address, Up: SECTIONS ++ ++3.6.4 Input Section Description ++------------------------------- ++ ++The most common output section command is an input section description. ++ ++ The input section description is the most basic linker script ++operation. You use output sections to tell the linker how to lay out ++your program in memory. You use input section descriptions to tell the ++linker how to map the input files into your memory layout. ++ ++* Menu: ++ ++* Input Section Basics:: Input section basics ++* Input Section Wildcards:: Input section wildcard patterns ++* Input Section Common:: Input section for common symbols ++* Input Section Keep:: Input section and garbage collection ++* Input Section Example:: Input section example ++ ++ ++File: ld.info, Node: Input Section Basics, Next: Input Section Wildcards, Up: Input Section ++ ++3.6.4.1 Input Section Basics ++............................ ++ ++An input section description consists of a file name optionally followed ++by a list of section names in parentheses. ++ ++ The file name and the section name may be wildcard patterns, which we ++describe further below (*note Input Section Wildcards::). ++ ++ The most common input section description is to include all input ++sections with a particular name in the output section. For example, to ++include all input `.text' sections, you would write: ++ *(.text) ++ Here the `*' is a wildcard which matches any file name. To exclude ++a list of files from matching the file name wildcard, EXCLUDE_FILE may ++be used to match all files except the ones specified in the ++EXCLUDE_FILE list. For example: ++ (*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)) ++ will cause all .ctors sections from all files except `crtend.o' and ++`otherfile.o' to be included. ++ ++ There are two ways to include more than one section: ++ *(.text .rdata) ++ *(.text) *(.rdata) ++ The difference between these is the order in which the `.text' and ++`.rdata' input sections will appear in the output section. In the ++first example, they will be intermingled, appearing in the same order as ++they are found in the linker input. In the second example, all `.text' ++input sections will appear first, followed by all `.rdata' input ++sections. ++ ++ You can specify a file name to include sections from a particular ++file. You would do this if one or more of your files contain special ++data that needs to be at a particular location in memory. For example: ++ data.o(.data) ++ ++ If you use a file name without a list of sections, then all sections ++in the input file will be included in the output section. This is not ++commonly done, but it may by useful on occasion. For example: ++ data.o ++ ++ When you use a file name which does not contain any wild card ++characters, the linker will first see if you also specified the file ++name on the linker command line or in an `INPUT' command. If you did ++not, the linker will attempt to open the file as an input file, as ++though it appeared on the command line. Note that this differs from an ++`INPUT' command, because the linker will not search for the file in the ++archive search path. ++ ++ ++File: ld.info, Node: Input Section Wildcards, Next: Input Section Common, Prev: Input Section Basics, Up: Input Section ++ ++3.6.4.2 Input Section Wildcard Patterns ++....................................... ++ ++In an input section description, either the file name or the section ++name or both may be wildcard patterns. ++ ++ The file name of `*' seen in many examples is a simple wildcard ++pattern for the file name. ++ ++ The wildcard patterns are like those used by the Unix shell. ++ ++`*' ++ matches any number of characters ++ ++`?' ++ matches any single character ++ ++`[CHARS]' ++ matches a single instance of any of the CHARS; the `-' character ++ may be used to specify a range of characters, as in `[a-z]' to ++ match any lower case letter ++ ++`\' ++ quotes the following character ++ ++ When a file name is matched with a wildcard, the wildcard characters ++will not match a `/' character (used to separate directory names on ++Unix). A pattern consisting of a single `*' character is an exception; ++it will always match any file name, whether it contains a `/' or not. ++In a section name, the wildcard characters will match a `/' character. ++ ++ File name wildcard patterns only match files which are explicitly ++specified on the command line or in an `INPUT' command. The linker ++does not search directories to expand wildcards. ++ ++ If a file name matches more than one wildcard pattern, or if a file ++name appears explicitly and is also matched by a wildcard pattern, the ++linker will use the first match in the linker script. For example, this ++sequence of input section descriptions is probably in error, because the ++`data.o' rule will not be used: ++ .data : { *(.data) } ++ .data1 : { data.o(.data) } ++ ++ Normally, the linker will place files and sections matched by ++wildcards in the order in which they are seen during the link. You can ++change this by using the `SORT_BY_NAME' keyword, which appears before a ++wildcard pattern in parentheses (e.g., `SORT_BY_NAME(.text*)'). When ++the `SORT_BY_NAME' keyword is used, the linker will sort the files or ++sections into ascending order by name before placing them in the output ++file. ++ ++ `SORT_BY_ALIGNMENT' is very similar to `SORT_BY_NAME'. The ++difference is `SORT_BY_ALIGNMENT' will sort sections into ascending ++order by alignment before placing them in the output file. ++ ++ `SORT' is an alias for `SORT_BY_NAME'. ++ ++ When there are nested section sorting commands in linker script, ++there can be at most 1 level of nesting for section sorting commands. ++ ++ 1. `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' (wildcard section pattern)). ++ It will sort the input sections by name first, then by alignment ++ if 2 sections have the same name. ++ ++ 2. `SORT_BY_ALIGNMENT' (`SORT_BY_NAME' (wildcard section pattern)). ++ It will sort the input sections by alignment first, then by name ++ if 2 sections have the same alignment. ++ ++ 3. `SORT_BY_NAME' (`SORT_BY_NAME' (wildcard section pattern)) is ++ treated the same as `SORT_BY_NAME' (wildcard section pattern). ++ ++ 4. `SORT_BY_ALIGNMENT' (`SORT_BY_ALIGNMENT' (wildcard section ++ pattern)) is treated the same as `SORT_BY_ALIGNMENT' (wildcard ++ section pattern). ++ ++ 5. All other nested section sorting commands are invalid. ++ ++ When both command line section sorting option and linker script ++section sorting command are used, section sorting command always takes ++precedence over the command line option. ++ ++ If the section sorting command in linker script isn't nested, the ++command line option will make the section sorting command to be treated ++as nested sorting command. ++ ++ 1. `SORT_BY_NAME' (wildcard section pattern ) with `--sort-sections ++ alignment' is equivalent to `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' ++ (wildcard section pattern)). ++ ++ 2. `SORT_BY_ALIGNMENT' (wildcard section pattern) with ++ `--sort-section name' is equivalent to `SORT_BY_ALIGNMENT' ++ (`SORT_BY_NAME' (wildcard section pattern)). ++ ++ If the section sorting command in linker script is nested, the ++command line option will be ignored. ++ ++ If you ever get confused about where input sections are going, use ++the `-M' linker option to generate a map file. The map file shows ++precisely how input sections are mapped to output sections. ++ ++ This example shows how wildcard patterns might be used to partition ++files. This linker script directs the linker to place all `.text' ++sections in `.text' and all `.bss' sections in `.bss'. The linker will ++place the `.data' section from all files beginning with an upper case ++character in `.DATA'; for all other files, the linker will place the ++`.data' section in `.data'. ++ SECTIONS { ++ .text : { *(.text) } ++ .DATA : { [A-Z]*(.data) } ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ ++File: ld.info, Node: Input Section Common, Next: Input Section Keep, Prev: Input Section Wildcards, Up: Input Section ++ ++3.6.4.3 Input Section for Common Symbols ++........................................ ++ ++A special notation is needed for common symbols, because in many object ++file formats common symbols do not have a particular input section. The ++linker treats common symbols as though they are in an input section ++named `COMMON'. ++ ++ You may use file names with the `COMMON' section just as with any ++other input sections. You can use this to place common symbols from a ++particular input file in one section while common symbols from other ++input files are placed in another section. ++ ++ In most cases, common symbols in input files will be placed in the ++`.bss' section in the output file. For example: ++ .bss { *(.bss) *(COMMON) } ++ ++ Some object file formats have more than one type of common symbol. ++For example, the MIPS ELF object file format distinguishes standard ++common symbols and small common symbols. In this case, the linker will ++use a different special section name for other types of common symbols. ++In the case of MIPS ELF, the linker uses `COMMON' for standard common ++symbols and `.scommon' for small common symbols. This permits you to ++map the different types of common symbols into memory at different ++locations. ++ ++ You will sometimes see `[COMMON]' in old linker scripts. This ++notation is now considered obsolete. It is equivalent to `*(COMMON)'. ++ ++ ++File: ld.info, Node: Input Section Keep, Next: Input Section Example, Prev: Input Section Common, Up: Input Section ++ ++3.6.4.4 Input Section and Garbage Collection ++............................................ ++ ++When link-time garbage collection is in use (`--gc-sections'), it is ++often useful to mark sections that should not be eliminated. This is ++accomplished by surrounding an input section's wildcard entry with ++`KEEP()', as in `KEEP(*(.init))' or `KEEP(SORT_BY_NAME(*)(.ctors))'. ++ ++ ++File: ld.info, Node: Input Section Example, Prev: Input Section Keep, Up: Input Section ++ ++3.6.4.5 Input Section Example ++............................. ++ ++The following example is a complete linker script. It tells the linker ++to read all of the sections from file `all.o' and place them at the ++start of output section `outputa' which starts at location `0x10000'. ++All of section `.input1' from file `foo.o' follows immediately, in the ++same output section. All of section `.input2' from `foo.o' goes into ++output section `outputb', followed by section `.input1' from `foo1.o'. ++All of the remaining `.input1' and `.input2' sections from any files ++are written to output section `outputc'. ++ ++ SECTIONS { ++ outputa 0x10000 : ++ { ++ all.o ++ foo.o (.input1) ++ } ++ outputb : ++ { ++ foo.o (.input2) ++ foo1.o (.input1) ++ } ++ outputc : ++ { ++ *(.input1) ++ *(.input2) ++ } ++ } ++ ++ ++File: ld.info, Node: Output Section Data, Next: Output Section Keywords, Prev: Input Section, Up: SECTIONS ++ ++3.6.5 Output Section Data ++------------------------- ++ ++You can include explicit bytes of data in an output section by using ++`BYTE', `SHORT', `LONG', `QUAD', or `SQUAD' as an output section ++command. Each keyword is followed by an expression in parentheses ++providing the value to store (*note Expressions::). The value of the ++expression is stored at the current value of the location counter. ++ ++ The `BYTE', `SHORT', `LONG', and `QUAD' commands store one, two, ++four, and eight bytes (respectively). After storing the bytes, the ++location counter is incremented by the number of bytes stored. ++ ++ For example, this will store the byte 1 followed by the four byte ++value of the symbol `addr': ++ BYTE(1) ++ LONG(addr) ++ ++ When using a 64 bit host or target, `QUAD' and `SQUAD' are the same; ++they both store an 8 byte, or 64 bit, value. When both host and target ++are 32 bits, an expression is computed as 32 bits. In this case `QUAD' ++stores a 32 bit value zero extended to 64 bits, and `SQUAD' stores a 32 ++bit value sign extended to 64 bits. ++ ++ If the object file format of the output file has an explicit ++endianness, which is the normal case, the value will be stored in that ++endianness. When the object file format does not have an explicit ++endianness, as is true of, for example, S-records, the value will be ++stored in the endianness of the first input object file. ++ ++ Note--these commands only work inside a section description and not ++between them, so the following will produce an error from the linker: ++ SECTIONS { .text : { *(.text) } LONG(1) .data : { *(.data) } } ++ whereas this will work: ++ SECTIONS { .text : { *(.text) ; LONG(1) } .data : { *(.data) } } ++ ++ You may use the `FILL' command to set the fill pattern for the ++current section. It is followed by an expression in parentheses. Any ++otherwise unspecified regions of memory within the section (for example, ++gaps left due to the required alignment of input sections) are filled ++with the value of the expression, repeated as necessary. A `FILL' ++statement covers memory locations after the point at which it occurs in ++the section definition; by including more than one `FILL' statement, ++you can have different fill patterns in different parts of an output ++section. ++ ++ This example shows how to fill unspecified regions of memory with the ++value `0x90': ++ FILL(0x90909090) ++ ++ The `FILL' command is similar to the `=FILLEXP' output section ++attribute, but it only affects the part of the section following the ++`FILL' command, rather than the entire section. If both are used, the ++`FILL' command takes precedence. *Note Output Section Fill::, for ++details on the fill expression. ++ ++ ++File: ld.info, Node: Output Section Keywords, Next: Output Section Discarding, Prev: Output Section Data, Up: SECTIONS ++ ++3.6.6 Output Section Keywords ++----------------------------- ++ ++There are a couple of keywords which can appear as output section ++commands. ++ ++`CREATE_OBJECT_SYMBOLS' ++ The command tells the linker to create a symbol for each input ++ file. The name of each symbol will be the name of the ++ corresponding input file. The section of each symbol will be the ++ output section in which the `CREATE_OBJECT_SYMBOLS' command ++ appears. ++ ++ This is conventional for the a.out object file format. It is not ++ normally used for any other object file format. ++ ++`CONSTRUCTORS' ++ When linking using the a.out object file format, the linker uses an ++ unusual set construct to support C++ global constructors and ++ destructors. When linking object file formats which do not support ++ arbitrary sections, such as ECOFF and XCOFF, the linker will ++ automatically recognize C++ global constructors and destructors by ++ name. For these object file formats, the `CONSTRUCTORS' command ++ tells the linker to place constructor information in the output ++ section where the `CONSTRUCTORS' command appears. The ++ `CONSTRUCTORS' command is ignored for other object file formats. ++ ++ The symbol `__CTOR_LIST__' marks the start of the global ++ constructors, and the symbol `__CTOR_END__' marks the end. ++ Similarly, `__DTOR_LIST__' and `__DTOR_END__' mark the start and ++ end of the global destructors. The first word in the list is the ++ number of entries, followed by the address of each constructor or ++ destructor, followed by a zero word. The compiler must arrange to ++ actually run the code. For these object file formats GNU C++ ++ normally calls constructors from a subroutine `__main'; a call to ++ `__main' is automatically inserted into the startup code for ++ `main'. GNU C++ normally runs destructors either by using ++ `atexit', or directly from the function `exit'. ++ ++ For object file formats such as `COFF' or `ELF' which support ++ arbitrary section names, GNU C++ will normally arrange to put the ++ addresses of global constructors and destructors into the `.ctors' ++ and `.dtors' sections. Placing the following sequence into your ++ linker script will build the sort of table which the GNU C++ ++ runtime code expects to see. ++ ++ __CTOR_LIST__ = .; ++ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) ++ *(.ctors) ++ LONG(0) ++ __CTOR_END__ = .; ++ __DTOR_LIST__ = .; ++ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) ++ *(.dtors) ++ LONG(0) ++ __DTOR_END__ = .; ++ ++ If you are using the GNU C++ support for initialization priority, ++ which provides some control over the order in which global ++ constructors are run, you must sort the constructors at link time ++ to ensure that they are executed in the correct order. When using ++ the `CONSTRUCTORS' command, use `SORT_BY_NAME(CONSTRUCTORS)' ++ instead. When using the `.ctors' and `.dtors' sections, use ++ `*(SORT_BY_NAME(.ctors))' and `*(SORT_BY_NAME(.dtors))' instead of ++ just `*(.ctors)' and `*(.dtors)'. ++ ++ Normally the compiler and linker will handle these issues ++ automatically, and you will not need to concern yourself with ++ them. However, you may need to consider this if you are using C++ ++ and writing your own linker scripts. ++ ++ ++ ++File: ld.info, Node: Output Section Discarding, Next: Output Section Attributes, Prev: Output Section Keywords, Up: SECTIONS ++ ++3.6.7 Output Section Discarding ++------------------------------- ++ ++The linker will not create output section which do not have any ++contents. This is for convenience when referring to input sections that ++may or may not be present in any of the input files. For example: ++ .foo { *(.foo) } ++ will only create a `.foo' section in the output file if there is a ++`.foo' section in at least one input file. ++ ++ If you use anything other than an input section description as an ++output section command, such as a symbol assignment, then the output ++section will always be created, even if there are no matching input ++sections. ++ ++ The special output section name `/DISCARD/' may be used to discard ++input sections. Any input sections which are assigned to an output ++section named `/DISCARD/' are not included in the output file. ++ ++ ++File: ld.info, Node: Output Section Attributes, Next: Overlay Description, Prev: Output Section Discarding, Up: SECTIONS ++ ++3.6.8 Output Section Attributes ++------------------------------- ++ ++We showed above that the full description of an output section looked ++like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++We've already described SECTION, ADDRESS, and ++OUTPUT-SECTION-COMMAND. In this section we will describe the remaining ++section attributes. ++ ++* Menu: ++ ++* Output Section Type:: Output section type ++* Output Section LMA:: Output section LMA ++* Forced Output Alignment:: Forced Output Alignment ++* Forced Input Alignment:: Forced Input Alignment ++* Output Section Region:: Output section region ++* Output Section Phdr:: Output section phdr ++* Output Section Fill:: Output section fill ++ ++ ++File: ld.info, Node: Output Section Type, Next: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.1 Output Section Type ++........................... ++ ++Each output section may have a type. The type is a keyword in ++parentheses. The following types are defined: ++ ++`NOLOAD' ++ The section should be marked as not loadable, so that it will not ++ be loaded into memory when the program is run. ++ ++`DSECT' ++`COPY' ++`INFO' ++`OVERLAY' ++ These type names are supported for backward compatibility, and are ++ rarely used. They all have the same effect: the section should be ++ marked as not allocatable, so that no memory is allocated for the ++ section when the program is run. ++ ++ The linker normally sets the attributes of an output section based on ++the input sections which map into it. You can override this by using ++the section type. For example, in the script sample below, the `ROM' ++section is addressed at memory location `0' and does not need to be ++loaded when the program is run. The contents of the `ROM' section will ++appear in the linker output file as usual. ++ SECTIONS { ++ ROM 0 (NOLOAD) : { ... } ++ ... ++ } ++ ++ ++File: ld.info, Node: Output Section LMA, Next: Forced Output Alignment, Prev: Output Section Type, Up: Output Section Attributes ++ ++3.6.8.2 Output Section LMA ++.......................... ++ ++Every section has a virtual address (VMA) and a load address (LMA); see ++*Note Basic Script Concepts::. The address expression which may appear ++in an output section description sets the VMA (*note Output Section ++Address::). ++ ++ The linker will normally set the LMA equal to the VMA. You can ++change that by using the `AT' keyword. The expression LMA that follows ++the `AT' keyword specifies the load address of the section. ++ ++ Alternatively, with `AT>LMA_REGION' expression, you may specify a ++memory region for the section's load address. *Note MEMORY::. Note ++that if the section has not had a VMA assigned to it then the linker ++will use the LMA_REGION as the VMA region as well. *Note Output ++Section Region::. ++ ++ This feature is designed to make it easy to build a ROM image. For ++example, the following linker script creates three output sections: one ++called `.text', which starts at `0x1000', one called `.mdata', which is ++loaded at the end of the `.text' section even though its VMA is ++`0x2000', and one called `.bss' to hold uninitialized data at address ++`0x3000'. The symbol `_data' is defined with the value `0x2000', which ++shows that the location counter holds the VMA value, not the LMA value. ++ ++ SECTIONS ++ { ++ .text 0x1000 : { *(.text) _etext = . ; } ++ .mdata 0x2000 : ++ AT ( ADDR (.text) + SIZEOF (.text) ) ++ { _data = . ; *(.data); _edata = . ; } ++ .bss 0x3000 : ++ { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;} ++ } ++ ++ The run-time initialization code for use with a program generated ++with this linker script would include something like the following, to ++copy the initialized data from the ROM image to its runtime address. ++Notice how this code takes advantage of the symbols defined by the ++linker script. ++ ++ extern char _etext, _data, _edata, _bstart, _bend; ++ char *src = &_etext; ++ char *dst = &_data; ++ ++ /* ROM has data at end of text; copy it. */ ++ while (dst < &_edata) { ++ *dst++ = *src++; ++ } ++ ++ /* Zero bss */ ++ for (dst = &_bstart; dst< &_bend; dst++) ++ *dst = 0; ++ ++ ++File: ld.info, Node: Forced Output Alignment, Next: Forced Input Alignment, Prev: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.3 Forced Output Alignment ++............................... ++ ++You can increase an output section's alignment by using ALIGN. ++ ++ ++File: ld.info, Node: Forced Input Alignment, Next: Output Section Region, Prev: Forced Output Alignment, Up: Output Section Attributes ++ ++3.6.8.4 Forced Input Alignment ++.............................. ++ ++You can force input section alignment within an output section by using ++SUBALIGN. The value specified overrides any alignment given by input ++sections, whether larger or smaller. ++ ++ ++File: ld.info, Node: Output Section Region, Next: Output Section Phdr, Prev: Forced Input Alignment, Up: Output Section Attributes ++ ++3.6.8.5 Output Section Region ++............................. ++ ++You can assign a section to a previously defined region of memory by ++using `>REGION'. *Note MEMORY::. ++ ++ Here is a simple example: ++ MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 } ++ SECTIONS { ROM : { *(.text) } >rom } ++ ++ ++File: ld.info, Node: Output Section Phdr, Next: Output Section Fill, Prev: Output Section Region, Up: Output Section Attributes ++ ++3.6.8.6 Output Section Phdr ++........................... ++ ++You can assign a section to a previously defined program segment by ++using `:PHDR'. *Note PHDRS::. If a section is assigned to one or more ++segments, then all subsequent allocated sections will be assigned to ++those segments as well, unless they use an explicitly `:PHDR' modifier. ++You can use `:NONE' to tell the linker to not put the section in any ++segment at all. ++ ++ Here is a simple example: ++ PHDRS { text PT_LOAD ; } ++ SECTIONS { .text : { *(.text) } :text } ++ ++ ++File: ld.info, Node: Output Section Fill, Prev: Output Section Phdr, Up: Output Section Attributes ++ ++3.6.8.7 Output Section Fill ++........................... ++ ++You can set the fill pattern for an entire section by using `=FILLEXP'. ++FILLEXP is an expression (*note Expressions::). Any otherwise ++unspecified regions of memory within the output section (for example, ++gaps left due to the required alignment of input sections) will be ++filled with the value, repeated as necessary. If the fill expression ++is a simple hex number, ie. a string of hex digit starting with `0x' ++and without a trailing `k' or `M', then an arbitrarily long sequence of ++hex digits can be used to specify the fill pattern; Leading zeros ++become part of the pattern too. For all other cases, including extra ++parentheses or a unary `+', the fill pattern is the four least ++significant bytes of the value of the expression. In all cases, the ++number is big-endian. ++ ++ You can also change the fill value with a `FILL' command in the ++output section commands; (*note Output Section Data::). ++ ++ Here is a simple example: ++ SECTIONS { .text : { *(.text) } =0x90909090 } ++ ++ ++File: ld.info, Node: Overlay Description, Prev: Output Section Attributes, Up: SECTIONS ++ ++3.6.9 Overlay Description ++------------------------- ++ ++An overlay description provides an easy way to describe sections which ++are to be loaded as part of a single memory image but are to be run at ++the same memory address. At run time, some sort of overlay manager will ++copy the overlaid sections in and out of the runtime memory address as ++required, perhaps by simply manipulating addressing bits. This approach ++can be useful, for example, when a certain region of memory is faster ++than another. ++ ++ Overlays are described using the `OVERLAY' command. The `OVERLAY' ++command is used within a `SECTIONS' command, like an output section ++description. The full syntax of the `OVERLAY' command is as follows: ++ OVERLAY [START] : [NOCROSSREFS] [AT ( LDADDR )] ++ { ++ SECNAME1 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ SECNAME2 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ ... ++ } [>REGION] [:PHDR...] [=FILL] ++ ++ Everything is optional except `OVERLAY' (a keyword), and each ++section must have a name (SECNAME1 and SECNAME2 above). The section ++definitions within the `OVERLAY' construct are identical to those ++within the general `SECTIONS' contruct (*note SECTIONS::), except that ++no addresses and no memory regions may be defined for sections within ++an `OVERLAY'. ++ ++ The sections are all defined with the same starting address. The ++load addresses of the sections are arranged such that they are ++consecutive in memory starting at the load address used for the ++`OVERLAY' as a whole (as with normal section definitions, the load ++address is optional, and defaults to the start address; the start ++address is also optional, and defaults to the current value of the ++location counter). ++ ++ If the `NOCROSSREFS' keyword is used, and there any references among ++the sections, the linker will report an error. Since the sections all ++run at the same address, it normally does not make sense for one ++section to refer directly to another. *Note NOCROSSREFS: Miscellaneous ++Commands. ++ ++ For each section within the `OVERLAY', the linker automatically ++defines two symbols. The symbol `__load_start_SECNAME' is defined as ++the starting load address of the section. The symbol ++`__load_stop_SECNAME' is defined as the final load address of the ++section. Any characters within SECNAME which are not legal within C ++identifiers are removed. C (or assembler) code may use these symbols ++to move the overlaid sections around as necessary. ++ ++ At the end of the overlay, the value of the location counter is set ++to the start address of the overlay plus the size of the largest ++section. ++ ++ Here is an example. Remember that this would appear inside a ++`SECTIONS' construct. ++ OVERLAY 0x1000 : AT (0x4000) ++ { ++ .text0 { o1/*.o(.text) } ++ .text1 { o2/*.o(.text) } ++ } ++This will define both `.text0' and `.text1' to start at address ++0x1000. `.text0' will be loaded at address 0x4000, and `.text1' will ++be loaded immediately after `.text0'. The following symbols will be ++defined: `__load_start_text0', `__load_stop_text0', ++`__load_start_text1', `__load_stop_text1'. ++ ++ C code to copy overlay `.text1' into the overlay area might look ++like the following. ++ ++ extern char __load_start_text1, __load_stop_text1; ++ memcpy ((char *) 0x1000, &__load_start_text1, ++ &__load_stop_text1 - &__load_start_text1); ++ ++ Note that the `OVERLAY' command is just syntactic sugar, since ++everything it does can be done using the more basic commands. The above ++example could have been written identically as follows. ++ ++ .text0 0x1000 : AT (0x4000) { o1/*.o(.text) } ++ __load_start_text0 = LOADADDR (.text0); ++ __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0); ++ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) } ++ __load_start_text1 = LOADADDR (.text1); ++ __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1); ++ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1)); ++ ++ ++File: ld.info, Node: MEMORY, Next: PHDRS, Prev: SECTIONS, Up: Scripts ++ ++3.7 MEMORY Command ++================== ++ ++The linker's default configuration permits allocation of all available ++memory. You can override this by using the `MEMORY' command. ++ ++ The `MEMORY' command describes the location and size of blocks of ++memory in the target. You can use it to describe which memory regions ++may be used by the linker, and which memory regions it must avoid. You ++can then assign sections to particular memory regions. The linker will ++set section addresses based on the memory regions, and will warn about ++regions that become too full. The linker will not shuffle sections ++around to fit into the available regions. ++ ++ A linker script may contain at most one use of the `MEMORY' command. ++However, you can define as many blocks of memory within it as you ++wish. The syntax is: ++ MEMORY ++ { ++ NAME [(ATTR)] : ORIGIN = ORIGIN, LENGTH = LEN ++ ... ++ } ++ ++ The NAME is a name used in the linker script to refer to the region. ++The region name has no meaning outside of the linker script. Region ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each memory region must ++have a distinct name. ++ ++ The ATTR string is an optional list of attributes that specify ++whether to use a particular memory region for an input section which is ++not explicitly mapped in the linker script. As described in *Note ++SECTIONS::, if you do not specify an output section for some input ++section, the linker will create an output section with the same name as ++the input section. If you define region attributes, the linker will use ++them to select the memory region for the output section that it creates. ++ ++ The ATTR string must consist only of the following characters: ++`R' ++ Read-only section ++ ++`W' ++ Read/write section ++ ++`X' ++ Executable section ++ ++`A' ++ Allocatable section ++ ++`I' ++ Initialized section ++ ++`L' ++ Same as `I' ++ ++`!' ++ Invert the sense of any of the preceding attributes ++ ++ If a unmapped section matches any of the listed attributes other than ++`!', it will be placed in the memory region. The `!' attribute ++reverses this test, so that an unmapped section will be placed in the ++memory region only if it does not match any of the listed attributes. ++ ++ The ORIGIN is an numerical expression for the start address of the ++memory region. The expression must evaluate to a constant and it ++cannot involve any symbols. The keyword `ORIGIN' may be abbreviated to ++`org' or `o' (but not, for example, `ORG'). ++ ++ The LEN is an expression for the size in bytes of the memory region. ++As with the ORIGIN expression, the expression must be numerical only ++and must evaluate to a constant. The keyword `LENGTH' may be ++abbreviated to `len' or `l'. ++ ++ In the following example, we specify that there are two memory ++regions available for allocation: one starting at `0' for 256 kilobytes, ++and the other starting at `0x40000000' for four megabytes. The linker ++will place into the `rom' memory region every section which is not ++explicitly mapped into a memory region, and is either read-only or ++executable. The linker will place other sections which are not ++explicitly mapped into a memory region into the `ram' memory region. ++ ++ MEMORY ++ { ++ rom (rx) : ORIGIN = 0, LENGTH = 256K ++ ram (!rx) : org = 0x40000000, l = 4M ++ } ++ ++ Once you define a memory region, you can direct the linker to place ++specific output sections into that memory region by using the `>REGION' ++output section attribute. For example, if you have a memory region ++named `mem', you would use `>mem' in the output section definition. ++*Note Output Section Region::. If no address was specified for the ++output section, the linker will set the address to the next available ++address within the memory region. If the combined output sections ++directed to a memory region are too large for the region, the linker ++will issue an error message. ++ ++ It is possible to access the origin and length of a memory in an ++expression via the `ORIGIN(MEMORY)' and `LENGTH(MEMORY)' functions: ++ ++ _fstack = ORIGIN(ram) + LENGTH(ram) - 4; ++ ++ ++File: ld.info, Node: PHDRS, Next: VERSION, Prev: MEMORY, Up: Scripts ++ ++3.8 PHDRS Command ++================= ++ ++The ELF object file format uses "program headers", also knows as ++"segments". The program headers describe how the program should be ++loaded into memory. You can print them out by using the `objdump' ++program with the `-p' option. ++ ++ When you run an ELF program on a native ELF system, the system loader ++reads the program headers in order to figure out how to load the ++program. This will only work if the program headers are set correctly. ++This manual does not describe the details of how the system loader ++interprets program headers; for more information, see the ELF ABI. ++ ++ The linker will create reasonable program headers by default. ++However, in some cases, you may need to specify the program headers more ++precisely. You may use the `PHDRS' command for this purpose. When the ++linker sees the `PHDRS' command in the linker script, it will not ++create any program headers other than the ones specified. ++ ++ The linker only pays attention to the `PHDRS' command when ++generating an ELF output file. In other cases, the linker will simply ++ignore `PHDRS'. ++ ++ This is the syntax of the `PHDRS' command. The words `PHDRS', ++`FILEHDR', `AT', and `FLAGS' are keywords. ++ ++ PHDRS ++ { ++ NAME TYPE [ FILEHDR ] [ PHDRS ] [ AT ( ADDRESS ) ] ++ [ FLAGS ( FLAGS ) ] ; ++ } ++ ++ The NAME is used only for reference in the `SECTIONS' command of the ++linker script. It is not put into the output file. Program header ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each program header must ++have a distinct name. ++ ++ Certain program header types describe segments of memory which the ++system loader will load from the file. In the linker script, you ++specify the contents of these segments by placing allocatable output ++sections in the segments. You use the `:PHDR' output section attribute ++to place a section in a particular segment. *Note Output Section ++Phdr::. ++ ++ It is normal to put certain sections in more than one segment. This ++merely implies that one segment of memory contains another. You may ++repeat `:PHDR', using it once for each segment which should contain the ++section. ++ ++ If you place a section in one or more segments using `:PHDR', then ++the linker will place all subsequent allocatable sections which do not ++specify `:PHDR' in the same segments. This is for convenience, since ++generally a whole set of contiguous sections will be placed in a single ++segment. You can use `:NONE' to override the default segment and tell ++the linker to not put the section in any segment at all. ++ ++ You may use the `FILEHDR' and `PHDRS' keywords appear after the ++program header type to further describe the contents of the segment. ++The `FILEHDR' keyword means that the segment should include the ELF ++file header. The `PHDRS' keyword means that the segment should include ++the ELF program headers themselves. ++ ++ The TYPE may be one of the following. The numbers indicate the ++value of the keyword. ++ ++`PT_NULL' (0) ++ Indicates an unused program header. ++ ++`PT_LOAD' (1) ++ Indicates that this program header describes a segment to be ++ loaded from the file. ++ ++`PT_DYNAMIC' (2) ++ Indicates a segment where dynamic linking information can be found. ++ ++`PT_INTERP' (3) ++ Indicates a segment where the name of the program interpreter may ++ be found. ++ ++`PT_NOTE' (4) ++ Indicates a segment holding note information. ++ ++`PT_SHLIB' (5) ++ A reserved program header type, defined but not specified by the ++ ELF ABI. ++ ++`PT_PHDR' (6) ++ Indicates a segment where the program headers may be found. ++ ++EXPRESSION ++ An expression giving the numeric type of the program header. This ++ may be used for types not defined above. ++ ++ You can specify that a segment should be loaded at a particular ++address in memory by using an `AT' expression. This is identical to the ++`AT' command used as an output section attribute (*note Output Section ++LMA::). The `AT' command for a program header overrides the output ++section attribute. ++ ++ The linker will normally set the segment flags based on the sections ++which comprise the segment. You may use the `FLAGS' keyword to ++explicitly specify the segment flags. The value of FLAGS must be an ++integer. It is used to set the `p_flags' field of the program header. ++ ++ Here is an example of `PHDRS'. This shows a typical set of program ++headers used on a native ELF system. ++ ++ PHDRS ++ { ++ headers PT_PHDR PHDRS ; ++ interp PT_INTERP ; ++ text PT_LOAD FILEHDR PHDRS ; ++ data PT_LOAD ; ++ dynamic PT_DYNAMIC ; ++ } ++ ++ SECTIONS ++ { ++ . = SIZEOF_HEADERS; ++ .interp : { *(.interp) } :text :interp ++ .text : { *(.text) } :text ++ .rodata : { *(.rodata) } /* defaults to :text */ ++ ... ++ . = . + 0x1000; /* move to a new page in memory */ ++ .data : { *(.data) } :data ++ .dynamic : { *(.dynamic) } :data :dynamic ++ ... ++ } ++ ++ ++File: ld.info, Node: VERSION, Next: Expressions, Prev: PHDRS, Up: Scripts ++ ++3.9 VERSION Command ++=================== ++ ++The linker supports symbol versions when using ELF. Symbol versions are ++only useful when using shared libraries. The dynamic linker can use ++symbol versions to select a specific version of a function when it runs ++a program that may have been linked against an earlier version of the ++shared library. ++ ++ You can include a version script directly in the main linker script, ++or you can supply the version script as an implicit linker script. You ++can also use the `--version-script' linker option. ++ ++ The syntax of the `VERSION' command is simply ++ VERSION { version-script-commands } ++ ++ The format of the version script commands is identical to that used ++by Sun's linker in Solaris 2.5. The version script defines a tree of ++version nodes. You specify the node names and interdependencies in the ++version script. You can specify which symbols are bound to which ++version nodes, and you can reduce a specified set of symbols to local ++scope so that they are not globally visible outside of the shared ++library. ++ ++ The easiest way to demonstrate the version script language is with a ++few examples. ++ ++ VERS_1.1 { ++ global: ++ foo1; ++ local: ++ old*; ++ original*; ++ new*; ++ }; ++ ++ VERS_1.2 { ++ foo2; ++ } VERS_1.1; ++ ++ VERS_2.0 { ++ bar1; bar2; ++ extern "C++" { ++ ns::*; ++ "int f(int, double)"; ++ } ++ } VERS_1.2; ++ ++ This example version script defines three version nodes. The first ++version node defined is `VERS_1.1'; it has no other dependencies. The ++script binds the symbol `foo1' to `VERS_1.1'. It reduces a number of ++symbols to local scope so that they are not visible outside of the ++shared library; this is done using wildcard patterns, so that any ++symbol whose name begins with `old', `original', or `new' is matched. ++The wildcard patterns available are the same as those used in the shell ++when matching filenames (also known as "globbing"). However, if you ++specify the symbol name inside double quotes, then the name is treated ++as literal, rather than as a glob pattern. ++ ++ Next, the version script defines node `VERS_1.2'. This node depends ++upon `VERS_1.1'. The script binds the symbol `foo2' to the version ++node `VERS_1.2'. ++ ++ Finally, the version script defines node `VERS_2.0'. This node ++depends upon `VERS_1.2'. The scripts binds the symbols `bar1' and ++`bar2' are bound to the version node `VERS_2.0'. ++ ++ When the linker finds a symbol defined in a library which is not ++specifically bound to a version node, it will effectively bind it to an ++unspecified base version of the library. You can bind all otherwise ++unspecified symbols to a given version node by using `global: *;' ++somewhere in the version script. ++ ++ The names of the version nodes have no specific meaning other than ++what they might suggest to the person reading them. The `2.0' version ++could just as well have appeared in between `1.1' and `1.2'. However, ++this would be a confusing way to write a version script. ++ ++ Node name can be omited, provided it is the only version node in the ++version script. Such version script doesn't assign any versions to ++symbols, only selects which symbols will be globally visible out and ++which won't. ++ ++ { global: foo; bar; local: *; }; ++ ++ When you link an application against a shared library that has ++versioned symbols, the application itself knows which version of each ++symbol it requires, and it also knows which version nodes it needs from ++each shared library it is linked against. Thus at runtime, the dynamic ++loader can make a quick check to make sure that the libraries you have ++linked against do in fact supply all of the version nodes that the ++application will need to resolve all of the dynamic symbols. In this ++way it is possible for the dynamic linker to know with certainty that ++all external symbols that it needs will be resolvable without having to ++search for each symbol reference. ++ ++ The symbol versioning is in effect a much more sophisticated way of ++doing minor version checking that SunOS does. The fundamental problem ++that is being addressed here is that typically references to external ++functions are bound on an as-needed basis, and are not all bound when ++the application starts up. If a shared library is out of date, a ++required interface may be missing; when the application tries to use ++that interface, it may suddenly and unexpectedly fail. With symbol ++versioning, the user will get a warning when they start their program if ++the libraries being used with the application are too old. ++ ++ There are several GNU extensions to Sun's versioning approach. The ++first of these is the ability to bind a symbol to a version node in the ++source file where the symbol is defined instead of in the versioning ++script. This was done mainly to reduce the burden on the library ++maintainer. You can do this by putting something like: ++ __asm__(".symver original_foo,foo@VERS_1.1"); ++ in the C source file. This renames the function `original_foo' to ++be an alias for `foo' bound to the version node `VERS_1.1'. The ++`local:' directive can be used to prevent the symbol `original_foo' ++from being exported. A `.symver' directive takes precedence over a ++version script. ++ ++ The second GNU extension is to allow multiple versions of the same ++function to appear in a given shared library. In this way you can make ++an incompatible change to an interface without increasing the major ++version number of the shared library, while still allowing applications ++linked against the old interface to continue to function. ++ ++ To do this, you must use multiple `.symver' directives in the source ++file. Here is an example: ++ ++ __asm__(".symver original_foo,foo@"); ++ __asm__(".symver old_foo,foo@VERS_1.1"); ++ __asm__(".symver old_foo1,foo@VERS_1.2"); ++ __asm__(".symver new_foo,foo@@VERS_2.0"); ++ ++ In this example, `foo@' represents the symbol `foo' bound to the ++unspecified base version of the symbol. The source file that contains ++this example would define 4 C functions: `original_foo', `old_foo', ++`old_foo1', and `new_foo'. ++ ++ When you have multiple definitions of a given symbol, there needs to ++be some way to specify a default version to which external references to ++this symbol will be bound. You can do this with the `foo@@VERS_2.0' ++type of `.symver' directive. You can only declare one version of a ++symbol as the default in this manner; otherwise you would effectively ++have multiple definitions of the same symbol. ++ ++ If you wish to bind a reference to a specific version of the symbol ++within the shared library, you can use the aliases of convenience ++(i.e., `old_foo'), or you can use the `.symver' directive to ++specifically bind to an external version of the function in question. ++ ++ You can also specify the language in the version script: ++ ++ VERSION extern "lang" { version-script-commands } ++ ++ The supported `lang's are `C', `C++', and `Java'. The linker will ++iterate over the list of symbols at the link time and demangle them ++according to `lang' before matching them to the patterns specified in ++`version-script-commands'. ++ ++ Demangled names may contains spaces and other special characters. As ++described above, you can use a glob pattern to match demangled names, ++or you can use a double-quoted string to match the string exactly. In ++the latter case, be aware that minor differences (such as differing ++whitespace) between the version script and the demangler output will ++cause a mismatch. As the exact string generated by the demangler might ++change in the future, even if the mangled name does not, you should ++check that all of your version directives are behaving as you expect ++when you upgrade. ++ ++ ++File: ld.info, Node: Expressions, Next: Implicit Linker Scripts, Prev: VERSION, Up: Scripts ++ ++3.10 Expressions in Linker Scripts ++================================== ++ ++The syntax for expressions in the linker script language is identical to ++that of C expressions. All expressions are evaluated as integers. All ++expressions are evaluated in the same size, which is 32 bits if both the ++host and target are 32 bits, and is otherwise 64 bits. ++ ++ You can use and set symbol values in expressions. ++ ++ The linker defines several special purpose builtin functions for use ++in expressions. ++ ++* Menu: ++ ++* Constants:: Constants ++* Symbols:: Symbol Names ++* Orphan Sections:: Orphan Sections ++* Location Counter:: The Location Counter ++* Operators:: Operators ++* Evaluation:: Evaluation ++* Expression Section:: The Section of an Expression ++* Builtin Functions:: Builtin Functions ++ ++ ++File: ld.info, Node: Constants, Next: Symbols, Up: Expressions ++ ++3.10.1 Constants ++---------------- ++ ++All constants are integers. ++ ++ As in C, the linker considers an integer beginning with `0' to be ++octal, and an integer beginning with `0x' or `0X' to be hexadecimal. ++The linker considers other integers to be decimal. ++ ++ In addition, you can use the suffixes `K' and `M' to scale a ++constant by `1024' or `1024*1024' respectively. For example, the ++following all refer to the same quantity: ++ _fourk_1 = 4K; ++ _fourk_2 = 4096; ++ _fourk_3 = 0x1000; ++ ++ ++File: ld.info, Node: Symbols, Next: Orphan Sections, Prev: Constants, Up: Expressions ++ ++3.10.2 Symbol Names ++------------------- ++ ++Unless quoted, symbol names start with a letter, underscore, or period ++and may include letters, digits, underscores, periods, and hyphens. ++Unquoted symbol names must not conflict with any keywords. You can ++specify a symbol which contains odd characters or has the same name as a ++keyword by surrounding the symbol name in double quotes: ++ "SECTION" = 9; ++ "with a space" = "also with a space" + 10; ++ ++ Since symbols can contain many non-alphabetic characters, it is ++safest to delimit symbols with spaces. For example, `A-B' is one ++symbol, whereas `A - B' is an expression involving subtraction. ++ ++ ++File: ld.info, Node: Orphan Sections, Next: Location Counter, Prev: Symbols, Up: Expressions ++ ++3.10.3 Orphan Sections ++---------------------- ++ ++Orphan sections are sections present in the input files which are not ++explicitly placed into the output file by the linker script. The ++linker will still copy these sections into the output file, but it has ++to guess as to where they should be placed. The linker uses a simple ++heuristic to do this. It attempts to place orphan sections after ++non-orphan sections of the same attribute, such as code vs data, ++loadable vs non-loadable, etc. If there is not enough room to do this ++then it places at the end of the file. ++ ++ For ELF targets, the attribute of the section includes section type ++as well as section flag. ++ ++ ++File: ld.info, Node: Location Counter, Next: Operators, Prev: Orphan Sections, Up: Expressions ++ ++3.10.4 The Location Counter ++--------------------------- ++ ++The special linker variable "dot" `.' always contains the current ++output location counter. Since the `.' always refers to a location in ++an output section, it may only appear in an expression within a ++`SECTIONS' command. The `.' symbol may appear anywhere that an ++ordinary symbol is allowed in an expression. ++ ++ Assigning a value to `.' will cause the location counter to be ++moved. This may be used to create holes in the output section. The ++location counter may never be moved backwards. ++ ++ SECTIONS ++ { ++ output : ++ { ++ file1(.text) ++ . = . + 1000; ++ file2(.text) ++ . += 1000; ++ file3(.text) ++ } = 0x12345678; ++ } ++ In the previous example, the `.text' section from `file1' is located ++at the beginning of the output section `output'. It is followed by a ++1000 byte gap. Then the `.text' section from `file2' appears, also ++with a 1000 byte gap following before the `.text' section from `file3'. ++The notation `= 0x12345678' specifies what data to write in the gaps ++(*note Output Section Fill::). ++ ++ Note: `.' actually refers to the byte offset from the start of the ++current containing object. Normally this is the `SECTIONS' statement, ++whose start address is 0, hence `.' can be used as an absolute address. ++If `.' is used inside a section description however, it refers to the ++byte offset from the start of that section, not an absolute address. ++Thus in a script like this: ++ ++ SECTIONS ++ { ++ . = 0x100 ++ .text: { ++ *(.text) ++ . = 0x200 ++ } ++ . = 0x500 ++ .data: { ++ *(.data) ++ . += 0x600 ++ } ++ } ++ ++ The `.text' section will be assigned a starting address of 0x100 and ++a size of exactly 0x200 bytes, even if there is not enough data in the ++`.text' input sections to fill this area. (If there is too much data, ++an error will be produced because this would be an attempt to move `.' ++backwards). The `.data' section will start at 0x500 and it will have ++an extra 0x600 bytes worth of space after the end of the values from ++the `.data' input sections and before the end of the `.data' output ++section itself. ++ ++ Setting symbols to the value of the location counter outside of an ++output section statement can result in unexpected values if the linker ++needs to place orphan sections. For example, given the following: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ If the linker needs to place some input section, e.g. `.rodata', not ++mentioned in the script, it might choose to place that section between ++`.text' and `.data'. You might think the linker should place `.rodata' ++on the blank line in the above script, but blank lines are of no ++particular significance to the linker. As well, the linker doesn't ++associate the above symbol names with their sections. Instead, it ++assumes that all assignments or other statements belong to the previous ++output section, except for the special case of an assignment to `.'. ++I.e., the linker will place the orphan `.rodata' section as if the ++script was written as follows: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .rodata: { *(.rodata) } ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ This may or may not be the script author's intention for the value of ++`start_of_data'. One way to influence the orphan section placement is ++to assign the location counter to itself, as the linker assumes that an ++assignment to `.' is setting the start address of a following output ++section and thus should be grouped with that section. So you could ++write: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ . = . ; ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ Now, the orphan `.rodata' section will be placed between ++`end_of_text' and `start_of_data'. ++ ++ ++File: ld.info, Node: Operators, Next: Evaluation, Prev: Location Counter, Up: Expressions ++ ++3.10.5 Operators ++---------------- ++ ++The linker recognizes the standard C set of arithmetic operators, with ++the standard bindings and precedence levels: ++ precedence associativity Operators Notes ++ (highest) ++ 1 left ! - ~ (1) ++ 2 left * / % ++ 3 left + - ++ 4 left >> << ++ 5 left == != > < <= >= ++ 6 left & ++ 7 left | ++ 8 left && ++ 9 left || ++ 10 right ? : ++ 11 right &= += -= *= /= (2) ++ (lowest) ++ Notes: (1) Prefix operators (2) *Note Assignments::. ++ ++ ++File: ld.info, Node: Evaluation, Next: Expression Section, Prev: Operators, Up: Expressions ++ ++3.10.6 Evaluation ++----------------- ++ ++The linker evaluates expressions lazily. It only computes the value of ++an expression when absolutely necessary. ++ ++ The linker needs some information, such as the value of the start ++address of the first section, and the origins and lengths of memory ++regions, in order to do any linking at all. These values are computed ++as soon as possible when the linker reads in the linker script. ++ ++ However, other values (such as symbol values) are not known or needed ++until after storage allocation. Such values are evaluated later, when ++other information (such as the sizes of output sections) is available ++for use in the symbol assignment expression. ++ ++ The sizes of sections cannot be known until after allocation, so ++assignments dependent upon these are not performed until after ++allocation. ++ ++ Some expressions, such as those depending upon the location counter ++`.', must be evaluated during section allocation. ++ ++ If the result of an expression is required, but the value is not ++available, then an error results. For example, a script like the ++following ++ SECTIONS ++ { ++ .text 9+this_isnt_constant : ++ { *(.text) } ++ } ++will cause the error message `non constant expression for initial ++address'. ++ ++ ++File: ld.info, Node: Expression Section, Next: Builtin Functions, Prev: Evaluation, Up: Expressions ++ ++3.10.7 The Section of an Expression ++----------------------------------- ++ ++When the linker evaluates an expression, the result is either absolute ++or relative to some section. A relative expression is expressed as a ++fixed offset from the base of a section. ++ ++ The position of the expression within the linker script determines ++whether it is absolute or relative. An expression which appears within ++an output section definition is relative to the base of the output ++section. An expression which appears elsewhere will be absolute. ++ ++ A symbol set to a relative expression will be relocatable if you ++request relocatable output using the `-r' option. That means that a ++further link operation may change the value of the symbol. The symbol's ++section will be the section of the relative expression. ++ ++ A symbol set to an absolute expression will retain the same value ++through any further link operation. The symbol will be absolute, and ++will not have any particular associated section. ++ ++ You can use the builtin function `ABSOLUTE' to force an expression ++to be absolute when it would otherwise be relative. For example, to ++create an absolute symbol set to the address of the end of the output ++section `.data': ++ SECTIONS ++ { ++ .data : { *(.data) _edata = ABSOLUTE(.); } ++ } ++ If `ABSOLUTE' were not used, `_edata' would be relative to the ++`.data' section. ++ ++ ++File: ld.info, Node: Builtin Functions, Prev: Expression Section, Up: Expressions ++ ++3.10.8 Builtin Functions ++------------------------ ++ ++The linker script language includes a number of builtin functions for ++use in linker script expressions. ++ ++`ABSOLUTE(EXP)' ++ Return the absolute (non-relocatable, as opposed to non-negative) ++ value of the expression EXP. Primarily useful to assign an ++ absolute value to a symbol within a section definition, where ++ symbol values are normally section relative. *Note Expression ++ Section::. ++ ++`ADDR(SECTION)' ++ Return the absolute address (the VMA) of the named SECTION. Your ++ script must previously have defined the location of that section. ++ In the following example, `symbol_1' and `symbol_2' are assigned ++ identical values: ++ SECTIONS { ... ++ .output1 : ++ { ++ start_of_output_1 = ABSOLUTE(.); ++ ... ++ } ++ .output : ++ { ++ symbol_1 = ADDR(.output1); ++ symbol_2 = start_of_output_1; ++ } ++ ... } ++ ++`ALIGN(ALIGN)' ++`ALIGN(EXP,ALIGN)' ++ Return the location counter (`.') or arbitrary expression aligned ++ to the next ALIGN boundary. The single operand `ALIGN' doesn't ++ change the value of the location counter--it just does arithmetic ++ on it. The two operand `ALIGN' allows an arbitrary expression to ++ be aligned upwards (`ALIGN(ALIGN)' is equivalent to `ALIGN(., ++ ALIGN)'). ++ ++ Here is an example which aligns the output `.data' section to the ++ next `0x2000' byte boundary after the preceding section and sets a ++ variable within the section to the next `0x8000' boundary after the ++ input sections: ++ SECTIONS { ... ++ .data ALIGN(0x2000): { ++ *(.data) ++ variable = ALIGN(0x8000); ++ } ++ ... } ++ The first use of `ALIGN' in this example specifies the ++ location of a section because it is used as the optional ADDRESS ++ attribute of a section definition (*note Output Section ++ Address::). The second use of `ALIGN' is used to defines the ++ value of a symbol. ++ ++ The builtin function `NEXT' is closely related to `ALIGN'. ++ ++`BLOCK(EXP)' ++ This is a synonym for `ALIGN', for compatibility with older linker ++ scripts. It is most often seen when setting the address of an ++ output section. ++ ++`DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE)' ++ This is equivalent to either ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - 1))) ++ or ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - COMMONPAGESIZE))) ++ depending on whether the latter uses fewer COMMONPAGESIZE sized ++ pages for the data segment (area between the result of this ++ expression and `DATA_SEGMENT_END') than the former or not. If the ++ latter form is used, it means COMMONPAGESIZE bytes of runtime ++ memory will be saved at the expense of up to COMMONPAGESIZE wasted ++ bytes in the on-disk file. ++ ++ This expression can only be used directly in `SECTIONS' commands, ++ not in any output section descriptions and only once in the linker ++ script. COMMONPAGESIZE should be less or equal to MAXPAGESIZE and ++ should be the system page size the object wants to be optimized ++ for (while still working on system page sizes up to MAXPAGESIZE). ++ ++ Example: ++ . = DATA_SEGMENT_ALIGN(0x10000, 0x2000); ++ ++`DATA_SEGMENT_END(EXP)' ++ This defines the end of data segment for `DATA_SEGMENT_ALIGN' ++ evaluation purposes. ++ ++ . = DATA_SEGMENT_END(.); ++ ++`DATA_SEGMENT_RELRO_END(OFFSET, EXP)' ++ This defines the end of the `PT_GNU_RELRO' segment when `-z relro' ++ option is used. Second argument is returned. When `-z relro' ++ option is not present, `DATA_SEGMENT_RELRO_END' does nothing, ++ otherwise `DATA_SEGMENT_ALIGN' is padded so that EXP + OFFSET is ++ aligned to the most commonly used page boundary for particular ++ target. If present in the linker script, it must always come in ++ between `DATA_SEGMENT_ALIGN' and `DATA_SEGMENT_END'. ++ ++ . = DATA_SEGMENT_RELRO_END(24, .); ++ ++`DEFINED(SYMBOL)' ++ Return 1 if SYMBOL is in the linker global symbol table and is ++ defined before the statement using DEFINED in the script, otherwise ++ return 0. You can use this function to provide default values for ++ symbols. For example, the following script fragment shows how to ++ set a global symbol `begin' to the first location in the `.text' ++ section--but if a symbol called `begin' already existed, its value ++ is preserved: ++ ++ SECTIONS { ... ++ .text : { ++ begin = DEFINED(begin) ? begin : . ; ++ ... ++ } ++ ... ++ } ++ ++`LENGTH(MEMORY)' ++ Return the length of the memory region named MEMORY. ++ ++`LOADADDR(SECTION)' ++ Return the absolute LMA of the named SECTION. This is normally ++ the same as `ADDR', but it may be different if the `AT' attribute ++ is used in the output section definition (*note Output Section ++ LMA::). ++ ++`MAX(EXP1, EXP2)' ++ Returns the maximum of EXP1 and EXP2. ++ ++`MIN(EXP1, EXP2)' ++ Returns the minimum of EXP1 and EXP2. ++ ++`NEXT(EXP)' ++ Return the next unallocated address that is a multiple of EXP. ++ This function is closely related to `ALIGN(EXP)'; unless you use ++ the `MEMORY' command to define discontinuous memory for the output ++ file, the two functions are equivalent. ++ ++`ORIGIN(MEMORY)' ++ Return the origin of the memory region named MEMORY. ++ ++`SEGMENT_START(SEGMENT, DEFAULT)' ++ Return the base address of the named SEGMENT. If an explicit ++ value has been given for this segment (with a command-line `-T' ++ option) that value will be returned; otherwise the value will be ++ DEFAULT. At present, the `-T' command-line option can only be ++ used to set the base address for the "text", "data", and "bss" ++ sections, but you use `SEGMENT_START' with any segment name. ++ ++`SIZEOF(SECTION)' ++ Return the size in bytes of the named SECTION, if that section has ++ been allocated. If the section has not been allocated when this is ++ evaluated, the linker will report an error. In the following ++ example, `symbol_1' and `symbol_2' are assigned identical values: ++ SECTIONS{ ... ++ .output { ++ .start = . ; ++ ... ++ .end = . ; ++ } ++ symbol_1 = .end - .start ; ++ symbol_2 = SIZEOF(.output); ++ ... } ++ ++`SIZEOF_HEADERS' ++`sizeof_headers' ++ Return the size in bytes of the output file's headers. This is ++ information which appears at the start of the output file. You ++ can use this number when setting the start address of the first ++ section, if you choose, to facilitate paging. ++ ++ When producing an ELF output file, if the linker script uses the ++ `SIZEOF_HEADERS' builtin function, the linker must compute the ++ number of program headers before it has determined all the section ++ addresses and sizes. If the linker later discovers that it needs ++ additional program headers, it will report an error `not enough ++ room for program headers'. To avoid this error, you must avoid ++ using the `SIZEOF_HEADERS' function, or you must rework your linker ++ script to avoid forcing the linker to use additional program ++ headers, or you must define the program headers yourself using the ++ `PHDRS' command (*note PHDRS::). ++ ++ ++File: ld.info, Node: Implicit Linker Scripts, Prev: Expressions, Up: Scripts ++ ++3.11 Implicit Linker Scripts ++============================ ++ ++If you specify a linker input file which the linker can not recognize as ++an object file or an archive file, it will try to read the file as a ++linker script. If the file can not be parsed as a linker script, the ++linker will report an error. ++ ++ An implicit linker script will not replace the default linker script. ++ ++ Typically an implicit linker script would contain only symbol ++assignments, or the `INPUT', `GROUP', or `VERSION' commands. ++ ++ Any input files read because of an implicit linker script will be ++read at the position in the command line where the implicit linker ++script was read. This can affect archive searching. ++ ++ ++File: ld.info, Node: Machine Dependent, Next: BFD, Prev: Scripts, Up: Top ++ ++4 Machine Dependent Features ++**************************** ++ ++`ld' has additional features on some platforms; the following sections ++describe them. Machines where `ld' has no additional functionality are ++not listed. ++ ++* Menu: ++ ++ ++* H8/300:: `ld' and the H8/300 ++ ++* i960:: `ld' and the Intel 960 family ++ ++* ARM:: `ld' and the ARM family ++ ++* HPPA ELF32:: `ld' and HPPA 32-bit ELF ++ ++* MMIX:: `ld' and MMIX ++ ++* MSP430:: `ld' and MSP430 ++ ++* PowerPC ELF32:: `ld' and PowerPC 32-bit ELF Support ++ ++* PowerPC64 ELF64:: `ld' and PowerPC64 64-bit ELF Support ++ ++* TI COFF:: `ld' and TI COFF ++ ++* WIN32:: `ld' and WIN32 (cygwin/mingw) ++ ++* Xtensa:: `ld' and Xtensa Processors ++ ++ ++File: ld.info, Node: H8/300, Next: i960, Up: Machine Dependent ++ ++4.1 `ld' and the H8/300 ++======================= ++ ++For the H8/300, `ld' can perform these global optimizations when you ++specify the `--relax' command-line option. ++ ++_relaxing address modes_ ++ `ld' finds all `jsr' and `jmp' instructions whose targets are ++ within eight bits, and turns them into eight-bit program-counter ++ relative `bsr' and `bra' instructions, respectively. ++ ++_synthesizing instructions_ ++ `ld' finds all `mov.b' instructions which use the sixteen-bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use the eight-bit address form. (That is: the ++ linker turns `mov.b `@'AA:16' into `mov.b `@'AA:8' whenever the ++ address AA is in the top page of memory). ++ ++_bit manipulation instructions_ ++ `ld' finds all bit manipulation instructions like `band, bclr, ++ biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, ++ bxor' which use 32 bit and 16 bit absolute address form, but refer ++ to the top page of memory, and changes them to use the 8 bit ++ address form. (That is: the linker turns `bset #xx:3,`@'AA:32' ++ into `bset #xx:3,`@'AA:8' whenever the address AA is in the top ++ page of memory). ++ ++_system control instructions_ ++ `ld' finds all `ldc.w, stc.w' instrcutions which use the 32 bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use 16 bit address form. (That is: the linker ++ turns `ldc.w `@'AA:32,ccr' into `ldc.w `@'AA:16,ccr' whenever the ++ address AA is in the top page of memory). ++ ++ ++File: ld.info, Node: i960, Next: ARM, Prev: H8/300, Up: Machine Dependent ++ ++4.2 `ld' and the Intel 960 Family ++================================= ++ ++You can use the `-AARCHITECTURE' command line option to specify one of ++the two-letter names identifying members of the 960 family; the option ++specifies the desired output target, and warns of any incompatible ++instructions in the input files. It also modifies the linker's search ++strategy for archive libraries, to support the use of libraries ++specific to each particular architecture, by including in the search ++loop names suffixed with the string identifying the architecture. ++ ++ For example, if your `ld' command line included `-ACA' as well as ++`-ltry', the linker would look (in its built-in search paths, and in ++any paths you specify with `-L') for a library with the names ++ ++ try ++ libtry.a ++ tryca ++ libtryca.a ++ ++The first two possibilities would be considered in any event; the last ++two are due to the use of `-ACA'. ++ ++ You can meaningfully use `-A' more than once on a command line, since ++the 960 architecture family allows combination of target architectures; ++each use will add another pair of name variants to search for when `-l' ++specifies a library. ++ ++ `ld' supports the `--relax' option for the i960 family. If you ++specify `--relax', `ld' finds all `balx' and `calx' instructions whose ++targets are within 24 bits, and turns them into 24-bit program-counter ++relative `bal' and `cal' instructions, respectively. `ld' also turns ++`cal' instructions into `bal' instructions when it determines that the ++target subroutine is a leaf routine (that is, the target subroutine does ++not itself call any subroutines). ++ ++ ++File: ld.info, Node: ARM, Next: HPPA ELF32, Prev: i960, Up: Machine Dependent ++ ++4.3 `ld' and the ARM family ++=========================== ++ ++For the ARM, `ld' will generate code stubs to allow functions calls ++betweem ARM and Thumb code. These stubs only work with code that has ++been compiled and assembled with the `-mthumb-interwork' command line ++option. If it is necessary to link with old ARM object files or ++libraries, which have not been compiled with the -mthumb-interwork ++option then the `--support-old-code' command line switch should be ++given to the linker. This will make it generate larger stub functions ++which will work with non-interworking aware ARM code. Note, however, ++the linker does not support generating stubs for function calls to ++non-interworking aware Thumb code. ++ ++ The `--thumb-entry' switch is a duplicate of the generic `--entry' ++switch, in that it sets the program's starting address. But it also ++sets the bottom bit of the address, so that it can be branched to using ++a BX instruction, and the program will start executing in Thumb mode ++straight away. ++ ++ The `--be8' switch instructs `ld' to generate BE8 format ++executables. This option is only valid when linking big-endian objects. ++The resulting image will contain big-endian data and little-endian code. ++ ++ The `R_ARM_TARGET1' relocation is typically used for entries in the ++`.init_array' section. It is interpreted as either `R_ARM_REL32' or ++`R_ARM_ABS32', depending on the target. The `--target1-rel' and ++`--target1-abs' switches override the default. ++ ++ The `--target2=type' switch overrides the default definition of the ++`R_ARM_TARGET2' relocation. Valid values for `type', their meanings, ++and target defaults are as follows: ++`rel' ++ `R_ARM_REL32' (arm*-*-elf, arm*-*-eabi) ++ ++`abs' ++ `R_ARM_ABS32' (arm*-*-symbianelf) ++ ++`got-rel' ++ `R_ARM_GOT_PREL' (arm*-*-linux, arm*-*-*bsd) ++ ++ The `R_ARM_V4BX' relocation (defined by the ARM AAELF specification) ++enables objects compiled for the ARMv4 architecture to be ++interworking-safe when linked with other objects compiled for ARMv4t, ++but also allows pure ARMv4 binaries to be built from the same ARMv4 ++objects. ++ ++ In the latter case, the switch `--fix-v4bx' must be passed to the ++linker, which causes v4t `BX rM' instructions to be rewritten as `MOV ++PC,rM', since v4 processors do not have a `BX' instruction. ++ ++ In the former case, the switch should not be used, and `R_ARM_V4BX' ++relocations are ignored. ++ ++ The `--use-blx' switch enables the linker to use ARM/Thumb BLX ++instructions (available on ARMv5t and above) in various situations. ++Currently it is used to perform calls via the PLT from Thumb code using ++BLX rather than using BX and a mode-switching stub before each PLT ++entry. This should lead to such calls executing slightly faster. ++ ++ This option is enabled implicitly for SymbianOS, so there is no need ++to specify it if you are using that target. ++ ++ ++File: ld.info, Node: HPPA ELF32, Next: MMIX, Prev: ARM, Up: Machine Dependent ++ ++4.4 `ld' and HPPA 32-bit ELF Support ++==================================== ++ ++When generating a shared library, `ld' will by default generate import ++stubs suitable for use with a single sub-space application. The ++`--multi-subspace' switch causes `ld' to generate export stubs, and ++different (larger) import stubs suitable for use with multiple ++sub-spaces. ++ ++ Long branch stubs and import/export stubs are placed by `ld' in stub ++sections located between groups of input sections. `--stub-group-size' ++specifies the maximum size of a group of input sections handled by one ++stub section. Since branch offsets are signed, a stub section may ++serve two groups of input sections, one group before the stub section, ++and one group after it. However, when using conditional branches that ++require stubs, it may be better (for branch prediction) that stub ++sections only serve one group of input sections. A negative value for ++`N' chooses this scheme, ensuring that branches to stubs always use a ++negative offset. Two special values of `N' are recognized, `1' and ++`-1'. These both instruct `ld' to automatically size input section ++groups for the branch types detected, with the same behaviour regarding ++stub placement as other positive or negative values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++single input section larger than the group size specified will of course ++create a larger group (of one section). If input sections are too ++large, it may not be possible for a branch to reach its stub. ++ ++ ++File: ld.info, Node: MMIX, Next: MSP430, Prev: HPPA ELF32, Up: Machine Dependent ++ ++4.5 `ld' and MMIX ++================= ++ ++For MMIX, there is a choice of generating `ELF' object files or `mmo' ++object files when linking. The simulator `mmix' understands the `mmo' ++format. The binutils `objcopy' utility can translate between the two ++formats. ++ ++ There is one special section, the `.MMIX.reg_contents' section. ++Contents in this section is assumed to correspond to that of global ++registers, and symbols referring to it are translated to special ++symbols, equal to registers. In a final link, the start address of the ++`.MMIX.reg_contents' section corresponds to the first allocated global ++register multiplied by 8. Register `$255' is not included in this ++section; it is always set to the program entry, which is at the symbol ++`Main' for `mmo' files. ++ ++ Symbols with the prefix `__.MMIX.start.', for example ++`__.MMIX.start..text' and `__.MMIX.start..data' are special; there must ++be only one each, even if they are local. The default linker script ++uses these to set the default start address of a section. ++ ++ Initial and trailing multiples of zero-valued 32-bit words in a ++section, are left out from an mmo file. ++ ++ ++File: ld.info, Node: MSP430, Next: PowerPC ELF32, Prev: MMIX, Up: Machine Dependent ++ ++4.6 `ld' and MSP430 ++=================== ++ ++For the MSP430 it is possible to select the MPU architecture. The flag ++`-m [mpu type]' will select an appropriate linker script for selected ++MPU type. (To get a list of known MPUs just pass `-m help' option to ++the linker). ++ ++ The linker will recognize some extra sections which are MSP430 ++specific: ++ ++``.vectors'' ++ Defines a portion of ROM where interrupt vectors located. ++ ++``.bootloader'' ++ Defines the bootloader portion of the ROM (if applicable). Any ++ code in this section will be uploaded to the MPU. ++ ++``.infomem'' ++ Defines an information memory section (if applicable). Any code in ++ this section will be uploaded to the MPU. ++ ++``.infomemnobits'' ++ This is the same as the `.infomem' section except that any code in ++ this section will not be uploaded to the MPU. ++ ++``.noinit'' ++ Denotes a portion of RAM located above `.bss' section. ++ ++ The last two sections are used by gcc. ++ ++ ++File: ld.info, Node: PowerPC ELF32, Next: PowerPC64 ELF64, Prev: MSP430, Up: Machine Dependent ++ ++4.7 `ld' and PowerPC 32-bit ELF Support ++======================================= ++ ++Branches on PowerPC processors are limited to a signed 26-bit ++displacement, which may result in `ld' giving `relocation truncated to ++fit' errors with very large programs. `--relax' enables the generation ++of trampolines that can access the entire 32-bit address space. These ++trampolines are inserted at section boundaries, so may not themselves ++be reachable if an input section exceeds 33M in size. ++ ++`--bss-plt' ++ Current PowerPC GCC accepts a `-msecure-plt' option that generates ++ code capable of using a newer PLT and GOT layout that has the ++ security advantage of no executable section ever needing to be ++ writable and no writable section ever being executable. PowerPC ++ `ld' will generate this layout, including stubs to access the PLT, ++ if all input files (including startup and static libraries) were ++ compiled with `-msecure-plt'. `--bss-plt' forces the old BSS PLT ++ (and GOT layout) which can give slightly better performance. ++ ++`--sdata-got' ++ The new secure PLT and GOT are placed differently relative to other ++ sections compared to older BSS PLT and GOT placement. The ++ location of `.plt' must change because the new secure PLT is an ++ initialized section while the old PLT is uninitialized. The ++ reason for the `.got' change is more subtle: The new placement ++ allows `.got' to be read-only in applications linked with `-z ++ relro -z now'. However, this placement means that `.sdata' cannot ++ always be used in shared libraries, because the PowerPC ABI ++ accesses `.sdata' in shared libraries from the GOT pointer. ++ `--sdata-got' forces the old GOT placement. PowerPC GCC doesn't ++ use `.sdata' in shared libraries, so this option is really only ++ useful for other compilers that may do so. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--no-tls-optimize' ++ PowerPC `ld' normally performs some optimization of code sequences ++ used to access Thread-Local Storage. Use this option to disable ++ the optimization. ++ ++ ++File: ld.info, Node: PowerPC64 ELF64, Next: TI COFF, Prev: PowerPC ELF32, Up: Machine Dependent ++ ++4.8 `ld' and PowerPC64 64-bit ELF Support ++========================================= ++ ++`--stub-group-size' ++ Long branch stubs, PLT call stubs and TOC adjusting stubs are ++ placed by `ld' in stub sections located between groups of input ++ sections. `--stub-group-size' specifies the maximum size of a ++ group of input sections handled by one stub section. Since branch ++ offsets are signed, a stub section may serve two groups of input ++ sections, one group before the stub section, and one group after ++ it. However, when using conditional branches that require stubs, ++ it may be better (for branch prediction) that stub sections only ++ serve one group of input sections. A negative value for `N' ++ chooses this scheme, ensuring that branches to stubs always use a ++ negative offset. Two special values of `N' are recognized, `1' ++ and `-1'. These both instruct `ld' to automatically size input ++ section groups for the branch types detected, with the same ++ behaviour regarding stub placement as other positive or negative ++ values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++ single input section larger than the group size specified will of ++ course create a larger group (of one section). If input sections ++ are too large, it may not be possible for a branch to reach its ++ stub. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--dotsyms, --no-dotsyms' ++ These two options control how `ld' interprets version patterns in ++ a version script. Older PowerPC64 compilers emitted both a ++ function descriptor symbol with the same name as the function, and ++ a code entry symbol with the name prefixed by a dot (`.'). To ++ properly version a function `foo', the version script thus needs ++ to control both `foo' and `.foo'. The option `--dotsyms', on by ++ default, automatically adds the required dot-prefixed patterns. ++ Use `--no-dotsyms' to disable this feature. ++ ++`--no-tls-optimize' ++ PowerPC64 `ld' normally performs some optimization of code ++ sequences used to access Thread-Local Storage. Use this option to ++ disable the optimization. ++ ++`--no-opd-optimize' ++ PowerPC64 `ld' normally removes `.opd' section entries ++ corresponding to deleted link-once functions, or functions removed ++ by the action of `--gc-sections' or linker scrip `/DISCARD/'. Use ++ this option to disable `.opd' optimization. ++ ++`--non-overlapping-opd' ++ Some PowerPC64 compilers have an option to generate compressed ++ `.opd' entries spaced 16 bytes apart, overlapping the third word, ++ the static chain pointer (unused in C) with the first word of the ++ next entry. This option expands such entries to the full 24 bytes. ++ ++`--no-toc-optimize' ++ PowerPC64 `ld' normally removes unused `.toc' section entries. ++ Such entries are detected by examining relocations that reference ++ the TOC in code sections. A reloc in a deleted code section marks ++ a TOC word as unneeded, while a reloc in a kept code section marks ++ a TOC word as needed. Since the TOC may reference itself, TOC ++ relocs are also examined. TOC words marked as both needed and ++ unneeded will of course be kept. TOC words without any referencing ++ reloc are assumed to be part of a multi-word entry, and are kept or ++ discarded as per the nearest marked preceding word. This works ++ reliably for compiler generated code, but may be incorrect if ++ assembly code is used to insert TOC entries. Use this option to ++ disable the optimization. ++ ++`--no-multi-toc' ++ By default, PowerPC64 GCC generates code for a TOC model where TOC ++ entries are accessed with a 16-bit offset from r2. This limits the ++ total TOC size to 64K. PowerPC64 `ld' extends this limit by ++ grouping code sections such that each group uses less than 64K for ++ its TOC entries, then inserts r2 adjusting stubs between ++ inter-group calls. `ld' does not split apart input sections, so ++ cannot help if a single input file has a `.toc' section that ++ exceeds 64K, most likely from linking multiple files with `ld -r'. ++ Use this option to turn off this feature. ++ ++ ++File: ld.info, Node: TI COFF, Next: WIN32, Prev: PowerPC64 ELF64, Up: Machine Dependent ++ ++4.9 `ld''s Support for Various TI COFF Versions ++=============================================== ++ ++The `--format' switch allows selection of one of the various TI COFF ++versions. The latest of this writing is 2; versions 0 and 1 are also ++supported. The TI COFF versions also vary in header byte-order format; ++`ld' will read any version or byte order, but the output header format ++depends on the default specified by the specific target. ++ ++ ++File: ld.info, Node: WIN32, Next: Xtensa, Prev: TI COFF, Up: Machine Dependent ++ ++4.10 `ld' and WIN32 (cygwin/mingw) ++================================== ++ ++This section describes some of the win32 specific `ld' issues. See ++*Note Command Line Options: Options. for detailed decription of the ++command line options mentioned here. ++ ++_import libraries_ ++ The standard Windows linker creates and uses so-called import ++ libraries, which contains information for linking to dll's. They ++ are regular static archives and are handled as any other static ++ archive. The cygwin and mingw ports of `ld' have specific support ++ for creating such libraries provided with the `--out-implib' ++ command line option. ++ ++_exporting DLL symbols_ ++ The cygwin/mingw `ld' has several ways to export symbols for dll's. ++ ++ _using auto-export functionality_ ++ By default `ld' exports symbols with the auto-export ++ functionality, which is controlled by the following command ++ line options: ++ ++ * -export-all-symbols [This is the default] ++ ++ * -exclude-symbols ++ ++ * -exclude-libs ++ ++ If, however, `--export-all-symbols' is not given explicitly ++ on the command line, then the default auto-export behavior ++ will be _disabled_ if either of the following are true: ++ ++ * A DEF file is used. ++ ++ * Any symbol in any object file was marked with the ++ __declspec(dllexport) attribute. ++ ++ _using a DEF file_ ++ Another way of exporting symbols is using a DEF file. A DEF ++ file is an ASCII file containing definitions of symbols which ++ should be exported when a dll is created. Usually it is ++ named `.def' and is added as any other object file ++ to the linker's command line. The file's name must end in ++ `.def' or `.DEF'. ++ ++ gcc -o .def ++ ++ Using a DEF file turns off the normal auto-export behavior, ++ unless the `--export-all-symbols' option is also used. ++ ++ Here is an example of a DEF file for a shared library called ++ `xyz.dll': ++ ++ LIBRARY "xyz.dll" BASE=0x20000000 ++ ++ EXPORTS ++ foo ++ bar ++ _bar = bar ++ another_foo = abc.dll.afoo ++ var1 DATA ++ ++ This example defines a DLL with a non-default base address ++ and five symbols in the export table. The third exported ++ symbol `_bar' is an alias for the second. The fourth symbol, ++ `another_foo' is resolved by "forwarding" to another module ++ and treating it as an alias for `afoo' exported from the DLL ++ `abc.dll'. The final symbol `var1' is declared to be a data ++ object. ++ ++ The optional `LIBRARY ' command indicates the _internal_ ++ name of the output DLL. If `' does not include a suffix, ++ the default library suffix, `.DLL' is appended. ++ ++ When the .DEF file is used to build an application. rather ++ than a library, the `NAME ' command shoud be used ++ instead of `LIBRARY'. If `' does not include a suffix, ++ the default executable suffix, `.EXE' is appended. ++ ++ With either `LIBRARY ' or `NAME ' the optional ++ specification `BASE = ' may be used to specify a ++ non-default base address for the image. ++ ++ If neither `LIBRARY ' nor `NAME ' is specified, ++ or they specify an empty string, the internal name is the ++ same as the filename specified on the command line. ++ ++ The complete specification of an export symbol is: ++ ++ EXPORTS ++ ( ( ( [ = ] ) ++ | ( = . )) ++ [ @ ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) * ++ ++ Declares `' as an exported symbol from the DLL, or ++ declares `' as an exported alias for `'; or ++ declares `' as a "forward" alias for the symbol ++ `' in the DLL `'. Optionally, ++ the symbol may be exported by the specified ordinal ++ `' alias. ++ ++ The optional keywords that follow the declaration indicate: ++ ++ `NONAME': Do not put the symbol name in the DLL's export ++ table. It will still be exported by its ordinal alias ++ (either the value specified by the .def specification or, ++ otherwise, the value assigned by the linker). The symbol ++ name, however, does remain visible in the import library (if ++ any), unless `PRIVATE' is also specified. ++ ++ `DATA': The symbol is a variable or object, rather than a ++ function. The import lib will export only an indirect ++ reference to `foo' as the symbol `_imp__foo' (ie, `foo' must ++ be resolved as `*_imp__foo'). ++ ++ `CONSTANT': Like `DATA', but put the undecorated `foo' as ++ well as `_imp__foo' into the import library. Both refer to the ++ read-only import address table's pointer to the variable, not ++ to the variable itself. This can be dangerous. If the user ++ code fails to add the `dllimport' attribute and also fails to ++ explicitly add the extra indirection that the use of the ++ attribute enforces, the application will behave unexpectedly. ++ ++ `PRIVATE': Put the symbol in the DLL's export table, but do ++ not put it into the static import library used to resolve ++ imports at link time. The symbol can still be imported using ++ the `LoadLibrary/GetProcAddress' API at runtime or by by ++ using the GNU ld extension of linking directly to the DLL ++ without an import library. ++ ++ See ld/deffilep.y in the binutils sources for the full ++ specification of other DEF file statements ++ ++ While linking a shared dll, `ld' is able to create a DEF file ++ with the `--output-def ' command line option. ++ ++ _Using decorations_ ++ Another way of marking symbols for export is to modify the ++ source code itself, so that when building the DLL each symbol ++ to be exported is declared as: ++ ++ __declspec(dllexport) int a_variable ++ __declspec(dllexport) void a_function(int with_args) ++ ++ All such symbols will be exported from the DLL. If, however, ++ any of the object files in the DLL contain symbols decorated ++ in this way, then the normal auto-export behavior is ++ disabled, unless the `--export-all-symbols' option is also ++ used. ++ ++ Note that object files that wish to access these symbols must ++ _not_ decorate them with dllexport. Instead, they should use ++ dllimport, instead: ++ ++ __declspec(dllimport) int a_variable ++ __declspec(dllimport) void a_function(int with_args) ++ ++ This complicates the structure of library header files, ++ because when included by the library itself the header must ++ declare the variables and functions as dllexport, but when ++ included by client code the header must declare them as ++ dllimport. There are a number of idioms that are typically ++ used to do this; often client code can omit the __declspec() ++ declaration completely. See `--enable-auto-import' and ++ `automatic data imports' for more imformation. ++ ++_automatic data imports_ ++ The standard Windows dll format supports data imports from dlls ++ only by adding special decorations (dllimport/dllexport), which ++ let the compiler produce specific assembler instructions to deal ++ with this issue. This increases the effort necessary to port ++ existing Un*x code to these platforms, especially for large c++ ++ libraries and applications. The auto-import feature, which was ++ initially provided by Paul Sokolovsky, allows one to omit the ++ decorations to archieve a behavior that conforms to that on ++ POSIX/Un*x platforms. This feature is enabled with the ++ `--enable-auto-import' command-line option, although it is enabled ++ by default on cygwin/mingw. The `--enable-auto-import' option ++ itself now serves mainly to suppress any warnings that are ++ ordinarily emitted when linked objects trigger the feature's use. ++ ++ auto-import of variables does not always work flawlessly without ++ additional assistance. Sometimes, you will see this message ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ The `--enable-auto-import' documentation explains why this error ++ occurs, and several methods that can be used to overcome this ++ difficulty. One of these methods is the _runtime pseudo-relocs_ ++ feature, described below. ++ ++ For complex variables imported from DLLs (such as structs or ++ classes), object files typically contain a base address for the ++ variable and an offset (_addend_) within the variable-to specify a ++ particular field or public member, for instance. Unfortunately, ++ the runtime loader used in win32 environments is incapable of ++ fixing these references at runtime without the additional ++ information supplied by dllimport/dllexport decorations. The ++ standard auto-import feature described above is unable to resolve ++ these references. ++ ++ The `--enable-runtime-pseudo-relocs' switch allows these ++ references to be resolved without error, while leaving the task of ++ adjusting the references themselves (with their non-zero addends) ++ to specialized code provided by the runtime environment. Recent ++ versions of the cygwin and mingw environments and compilers ++ provide this runtime support; older versions do not. However, the ++ support is only necessary on the developer's platform; the ++ compiled result will run without error on an older system. ++ ++ `--enable-runtime-pseudo-relocs' is not the default; it must be ++ explicitly enabled as needed. ++ ++_direct linking to a dll_ ++ The cygwin/mingw ports of `ld' support the direct linking, ++ including data symbols, to a dll without the usage of any import ++ libraries. This is much faster and uses much less memory than ++ does the traditional import library method, expecially when ++ linking large libraries or applications. When `ld' creates an ++ import lib, each function or variable exported from the dll is ++ stored in its own bfd, even though a single bfd could contain many ++ exports. The overhead involved in storing, loading, and ++ processing so many bfd's is quite large, and explains the ++ tremendous time, memory, and storage needed to link against ++ particularly large or complex libraries when using import libs. ++ ++ Linking directly to a dll uses no extra command-line switches ++ other than `-L' and `-l', because `ld' already searches for a ++ number of names to match each library. All that is needed from ++ the developer's perspective is an understanding of this search, in ++ order to force ld to select the dll instead of an import library. ++ ++ For instance, when ld is called with the argument `-lxxx' it will ++ attempt to find, in the first directory of its search path, ++ ++ libxxx.dll.a ++ xxx.dll.a ++ libxxx.a ++ cygxxx.dll (*) ++ libxxx.dll ++ xxx.dll ++ ++ before moving on to the next directory in the search path. ++ ++ (*) Actually, this is not `cygxxx.dll' but in fact is ++ `xxx.dll', where `' is set by the `ld' option ++ `--dll-search-prefix='. In the case of cygwin, the ++ standard gcc spec file includes `--dll-search-prefix=cyg', so in ++ effect we actually search for `cygxxx.dll'. ++ ++ Other win32-based unix environments, such as mingw or pw32, may ++ use other `'es, although at present only cygwin makes use ++ of this feature. It was originally intended to help avoid name ++ conflicts among dll's built for the various win32/un*x ++ environments, so that (for example) two versions of a zlib dll ++ could coexist on the same machine. ++ ++ The generic cygwin/mingw path layout uses a `bin' directory for ++ applications and dll's and a `lib' directory for the import ++ libraries (using cygwin nomenclature): ++ ++ bin/ ++ cygxxx.dll ++ lib/ ++ libxxx.dll.a (in case of dll's) ++ libxxx.a (in case of static archive) ++ ++ Linking directly to a dll without using the import library can be ++ done two ways: ++ ++ 1. Use the dll directly by adding the `bin' path to the link line ++ gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx ++ ++ However, as the dll's often have version numbers appended to their ++ names (`cygncurses-5.dll') this will often fail, unless one ++ specifies `-L../bin -lncurses-5' to include the version. Import ++ libs are generally not versioned, and do not have this difficulty. ++ ++ 2. Create a symbolic link from the dll to a file in the `lib' ++ directory according to the above mentioned search pattern. This ++ should be used to avoid unwanted changes in the tools needed for ++ making the app/dll. ++ ++ ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a] ++ ++ Then you can link without any make environment changes. ++ ++ gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx ++ ++ This technique also avoids the version number problems, because ++ the following is perfectly legal ++ ++ bin/ ++ cygxxx-5.dll ++ lib/ ++ libxxx.dll.a -> ../bin/cygxxx-5.dll ++ ++ Linking directly to a dll without using an import lib will work ++ even when auto-import features are exercised, and even when ++ `--enable-runtime-pseudo-relocs' is used. ++ ++ Given the improvements in speed and memory usage, one might ++ justifiably wonder why import libraries are used at all. There ++ are two reasons: ++ ++ 1. Until recently, the link-directly-to-dll functionality did _not_ ++ work with auto-imported data. ++ ++ 2. Sometimes it is necessary to include pure static objects within ++ the import library (which otherwise contains only bfd's for ++ indirection symbols that point to the exports of a dll). Again, ++ the import lib for the cygwin kernel makes use of this ability, ++ and it is not possible to do this without an import lib. ++ ++ So, import libs are not going away. But the ability to replace ++ true import libs with a simple symbolic link to (or a copy of) a ++ dll, in most cases, is a useful addition to the suite of tools ++ binutils makes available to the win32 developer. Given the ++ massive improvements in memory requirements during linking, storage ++ requirements, and linking speed, we expect that many developers ++ will soon begin to use this feature whenever possible. ++ ++_symbol aliasing_ ++ ++ _adding additional names_ ++ Sometimes, it is useful to export symbols with additional ++ names. A symbol `foo' will be exported as `foo', but it can ++ also be exported as `_foo' by using special directives in the ++ DEF file when creating the dll. This will affect also the ++ optional created import library. Consider the following DEF ++ file: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ foo ++ _foo = foo ++ ++ The line `_foo = foo' maps the symbol `foo' to `_foo'. ++ ++ Another method for creating a symbol alias is to create it in ++ the source code using the "weak" attribute: ++ ++ void foo () { /* Do something. */; } ++ void _foo () __attribute__ ((weak, alias ("foo"))); ++ ++ See the gcc manual for more information about attributes and ++ weak symbols. ++ ++ _renaming symbols_ ++ Sometimes it is useful to rename exports. For instance, the ++ cygwin kernel does this regularly. A symbol `_foo' can be ++ exported as `foo' but not as `_foo' by using special ++ directives in the DEF file. (This will also affect the import ++ library, if it is created). In the following example: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ _foo = foo ++ ++ The line `_foo = foo' maps the exported symbol `foo' to ++ `_foo'. ++ ++ Note: using a DEF file disables the default auto-export behavior, ++ unless the `--export-all-symbols' command line option is used. ++ If, however, you are trying to rename symbols, then you should list ++ _all_ desired exports in the DEF file, including the symbols that ++ are not being renamed, and do _not_ use the `--export-all-symbols' ++ option. If you list only the renamed symbols in the DEF file, and ++ use `--export-all-symbols' to handle the other symbols, then the ++ both the new names _and_ the original names for the renamed ++ symbols will be exported. In effect, you'd be aliasing those ++ symbols, not renaming them, which is probably not what you wanted. ++ ++_weak externals_ ++ The Windows object format, PE, specifies a form of weak symbols ++ called weak externals. When a weak symbol is linked and the ++ symbol is not defined, the weak symbol becomes an alias for some ++ other symbol. There are three variants of weak externals: ++ * Definition is searched for in objects and libraries, ++ historically called lazy externals. ++ ++ * Definition is searched for only in other objects, not in ++ libraries. This form is not presently implemented. ++ ++ * No search; the symbol is an alias. This form is not presently ++ implemented. ++ As a GNU extension, weak symbols that do not specify an alternate ++ symbol are supported. If the symbol is undefined when linking, ++ the symbol uses a default value. ++ ++ ++File: ld.info, Node: Xtensa, Prev: WIN32, Up: Machine Dependent ++ ++4.11 `ld' and Xtensa Processors ++=============================== ++ ++The default `ld' behavior for Xtensa processors is to interpret ++`SECTIONS' commands so that lists of explicitly named sections in a ++specification with a wildcard file will be interleaved when necessary to ++keep literal pools within the range of PC-relative load offsets. For ++example, with the command: ++ ++ SECTIONS ++ { ++ .text : { ++ *(.literal .text) ++ } ++ } ++ ++`ld' may interleave some of the `.literal' and `.text' sections from ++different object files to ensure that the literal pools are within the ++range of PC-relative load offsets. A valid interleaving might place ++the `.literal' sections from an initial group of files followed by the ++`.text' sections of that group of files. Then, the `.literal' sections ++from the rest of the files and the `.text' sections from the rest of ++the files would follow. ++ ++ Relaxation is enabled by default for the Xtensa version of `ld' and ++provides two important link-time optimizations. The first optimization ++is to combine identical literal values to reduce code size. A redundant ++literal will be removed and all the `L32R' instructions that use it ++will be changed to reference an identical literal, as long as the ++location of the replacement literal is within the offset range of all ++the `L32R' instructions. The second optimization is to remove ++unnecessary overhead from assembler-generated "longcall" sequences of ++`L32R'/`CALLXN' when the target functions are within range of direct ++`CALLN' instructions. ++ ++ For each of these cases where an indirect call sequence can be ++optimized to a direct call, the linker will change the `CALLXN' ++instruction to a `CALLN' instruction, remove the `L32R' instruction, ++and remove the literal referenced by the `L32R' instruction if it is ++not used for anything else. Removing the `L32R' instruction always ++reduces code size but can potentially hurt performance by changing the ++alignment of subsequent branch targets. By default, the linker will ++always preserve alignments, either by switching some instructions ++between 24-bit encodings and the equivalent density instructions or by ++inserting a no-op in place of the `L32R' instruction that was removed. ++If code size is more important than performance, the `--size-opt' ++option can be used to prevent the linker from widening density ++instructions or inserting no-ops, except in a few cases where no-ops ++are required for correctness. ++ ++ The following Xtensa-specific command-line options can be used to ++control the linker: ++ ++`--no-relax' ++ Since the Xtensa version of `ld' enables the `--relax' option by ++ default, the `--no-relax' option is provided to disable relaxation. ++ ++`--size-opt' ++ When optimizing indirect calls to direct calls, optimize for code ++ size more than performance. With this option, the linker will not ++ insert no-ops or widen density instructions to preserve branch ++ target alignment. There may still be some cases where no-ops are ++ required to preserve the correctness of the code. ++ ++ ++File: ld.info, Node: BFD, Next: Reporting Bugs, Prev: Machine Dependent, Up: Top ++ ++5 BFD ++***** ++ ++The linker accesses object and archive files using the BFD libraries. ++These libraries allow the linker to use the same routines to operate on ++object files whatever the object file format. A different object file ++format can be supported simply by creating a new BFD back end and adding ++it to the library. To conserve runtime memory, however, the linker and ++associated tools are usually configured to support only a subset of the ++object file formats available. You can use `objdump -i' (*note ++objdump: (binutils.info)objdump.) to list all the formats available for ++your configuration. ++ ++ As with most implementations, BFD is a compromise between several ++conflicting requirements. The major factor influencing BFD design was ++efficiency: any time used converting between formats is time which ++would not have been spent had BFD not been involved. This is partly ++offset by abstraction payback; since BFD simplifies applications and ++back ends, more time and care may be spent optimizing algorithms for a ++greater speed. ++ ++ One minor artifact of the BFD solution which you should bear in mind ++is the potential for information loss. There are two places where ++useful information can be lost using the BFD mechanism: during ++conversion and during output. *Note BFD information loss::. ++ ++* Menu: ++ ++* BFD outline:: How it works: an outline of BFD ++ ++ ++File: ld.info, Node: BFD outline, Up: BFD ++ ++5.1 How It Works: An Outline of BFD ++=================================== ++ ++When an object file is opened, BFD subroutines automatically determine ++the format of the input object file. They then build a descriptor in ++memory with pointers to routines that will be used to access elements of ++the object file's data structures. ++ ++ As different information from the object files is required, BFD ++reads from different sections of the file and processes them. For ++example, a very common operation for the linker is processing symbol ++tables. Each BFD back end provides a routine for converting between ++the object file's representation of symbols and an internal canonical ++format. When the linker asks for the symbol table of an object file, it ++calls through a memory pointer to the routine from the relevant BFD ++back end which reads and converts the table into a canonical form. The ++linker then operates upon the canonical form. When the link is finished ++and the linker writes the output file's symbol table, another BFD back ++end routine is called to take the newly created symbol table and ++convert it into the chosen output format. ++ ++* Menu: ++ ++* BFD information loss:: Information Loss ++* Canonical format:: The BFD canonical object-file format ++ ++ ++File: ld.info, Node: BFD information loss, Next: Canonical format, Up: BFD outline ++ ++5.1.1 Information Loss ++---------------------- ++ ++_Information can be lost during output._ The output formats supported ++by BFD do not provide identical facilities, and information which can ++be described in one form has nowhere to go in another format. One ++example of this is alignment information in `b.out'. There is nowhere ++in an `a.out' format file to store alignment information on the ++contained data, so when a file is linked from `b.out' and an `a.out' ++image is produced, alignment information will not propagate to the ++output file. (The linker will still use the alignment information ++internally, so the link is performed correctly). ++ ++ Another example is COFF section names. COFF files may contain an ++unlimited number of sections, each one with a textual section name. If ++the target of the link is a format which does not have many sections ++(e.g., `a.out') or has sections without names (e.g., the Oasys format), ++the link cannot be done simply. You can circumvent this problem by ++describing the desired input-to-output section mapping with the linker ++command language. ++ ++ _Information can be lost during canonicalization._ The BFD internal ++canonical form of the external formats is not exhaustive; there are ++structures in input formats for which there is no direct representation ++internally. This means that the BFD back ends cannot maintain all ++possible data richness through the transformation between external to ++internal and back to external formats. ++ ++ This limitation is only a problem when an application reads one ++format and writes another. Each BFD back end is responsible for ++maintaining as much data as possible, and the internal BFD canonical ++form has structures which are opaque to the BFD core, and exported only ++to the back ends. When a file is read in one format, the canonical form ++is generated for BFD and the application. At the same time, the back ++end saves away any information which may otherwise be lost. If the data ++is then written back in the same format, the back end routine will be ++able to use the canonical form provided by the BFD core as well as the ++information it prepared earlier. Since there is a great deal of ++commonality between back ends, there is no information lost when ++linking or copying big endian COFF to little endian COFF, or `a.out' to ++`b.out'. When a mixture of formats is linked, the information is only ++lost from the files whose format differs from the destination. ++ ++ ++File: ld.info, Node: Canonical format, Prev: BFD information loss, Up: BFD outline ++ ++5.1.2 The BFD canonical object-file format ++------------------------------------------ ++ ++The greatest potential for loss of information occurs when there is the ++least overlap between the information provided by the source format, ++that stored by the canonical format, and that needed by the destination ++format. A brief description of the canonical form may help you ++understand which kinds of data you can count on preserving across ++conversions. ++ ++_files_ ++ Information stored on a per-file basis includes target machine ++ architecture, particular implementation format type, a demand ++ pageable bit, and a write protected bit. Information like Unix ++ magic numbers is not stored here--only the magic numbers' meaning, ++ so a `ZMAGIC' file would have both the demand pageable bit and the ++ write protected text bit set. The byte order of the target is ++ stored on a per-file basis, so that big- and little-endian object ++ files may be used with one another. ++ ++_sections_ ++ Each section in the input file contains the name of the section, ++ the section's original address in the object file, size and ++ alignment information, various flags, and pointers into other BFD ++ data structures. ++ ++_symbols_ ++ Each symbol contains a pointer to the information for the object ++ file which originally defined it, its name, its value, and various ++ flag bits. When a BFD back end reads in a symbol table, it ++ relocates all symbols to make them relative to the base of the ++ section where they were defined. Doing this ensures that each ++ symbol points to its containing section. Each symbol also has a ++ varying amount of hidden private data for the BFD back end. Since ++ the symbol points to the original file, the private data format ++ for that symbol is accessible. `ld' can operate on a collection ++ of symbols of wildly different formats without problems. ++ ++ Normal global and simple local symbols are maintained on output, ++ so an output file (no matter its format) will retain symbols ++ pointing to functions and to global, static, and common variables. ++ Some symbol information is not worth retaining; in `a.out', type ++ information is stored in the symbol table as long symbol names. ++ This information would be useless to most COFF debuggers; the ++ linker has command line switches to allow users to throw it away. ++ ++ There is one word of type information within the symbol, so if the ++ format supports symbol type information within symbols (for ++ example, COFF, IEEE, Oasys) and the type is simple enough to fit ++ within one word (nearly everything but aggregates), the ++ information will be preserved. ++ ++_relocation level_ ++ Each canonical BFD relocation record contains a pointer to the ++ symbol to relocate to, the offset of the data to relocate, the ++ section the data is in, and a pointer to a relocation type ++ descriptor. Relocation is performed by passing messages through ++ the relocation type descriptor and the symbol pointer. Therefore, ++ relocations can be performed on output data using a relocation ++ method that is only available in one of the input formats. For ++ instance, Oasys provides a byte relocation format. A relocation ++ record requesting this relocation type would point indirectly to a ++ routine to perform this, so the relocation may be performed on a ++ byte being written to a 68k COFF file, even though 68k COFF has no ++ such relocation type. ++ ++_line numbers_ ++ Object formats can contain, for debugging purposes, some form of ++ mapping between symbols, source line numbers, and addresses in the ++ output file. These addresses have to be relocated along with the ++ symbol information. Each symbol with an associated list of line ++ number records points to the first record of the list. The head ++ of a line number list consists of a pointer to the symbol, which ++ allows finding out the address of the function whose line number ++ is being described. The rest of the list is made up of pairs: ++ offsets into the section and line numbers. Any format which can ++ simply derive this information can pass it successfully between ++ formats (COFF, IEEE and Oasys). ++ ++ ++File: ld.info, Node: Reporting Bugs, Next: MRI, Prev: BFD, Up: Top ++ ++6 Reporting Bugs ++**************** ++ ++Your bug reports play an essential role in making `ld' reliable. ++ ++ Reporting a bug may help you by bringing a solution to your problem, ++or it may not. But in any case the principal function of a bug report ++is to help the entire community by making the next version of `ld' work ++better. Bug reports are your contribution to the maintenance of `ld'. ++ ++ In order for a bug report to serve its purpose, you must include the ++information that enables us to fix the bug. ++ ++* Menu: ++ ++* Bug Criteria:: Have you found a bug? ++* Bug Reporting:: How to report bugs ++ ++ ++File: ld.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs ++ ++6.1 Have You Found a Bug? ++========================= ++ ++If you are not sure whether you have found a bug, here are some ++guidelines: ++ ++ * If the linker gets a fatal signal, for any input whatever, that is ++ a `ld' bug. Reliable linkers never crash. ++ ++ * If `ld' produces an error message for valid input, that is a bug. ++ ++ * If `ld' does not produce an error message for invalid input, that ++ may be a bug. In the general case, the linker can not verify that ++ object files are correct. ++ ++ * If you are an experienced user of linkers, your suggestions for ++ improvement of `ld' are welcome in any case. ++ ++ ++File: ld.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs ++ ++6.2 How to Report Bugs ++====================== ++ ++A number of companies and individuals offer support for GNU products. ++If you obtained `ld' from a support organization, we recommend you ++contact that organization first. ++ ++ You can find contact information for many support companies and ++individuals in the file `etc/SERVICE' in the GNU Emacs distribution. ++ ++ Otherwise, send bug reports for `ld' to `bug-binutils@gnu.org'. ++ ++ The fundamental principle of reporting bugs usefully is this: ++*report all the facts*. If you are not sure whether to state a fact or ++leave it out, state it! ++ ++ Often people omit facts because they think they know what causes the ++problem and assume that some details do not matter. Thus, you might ++assume that the name of a symbol you use in an example does not matter. ++Well, probably it does not, but one cannot be sure. Perhaps the bug ++is a stray memory reference which happens to fetch from the location ++where that name is stored in memory; perhaps, if the name were ++different, the contents of that location would fool the linker into ++doing the right thing despite the bug. Play it safe and give a ++specific, complete example. That is the easiest thing for you to do, ++and the most helpful. ++ ++ Keep in mind that the purpose of a bug report is to enable us to fix ++the bug if it is new to us. Therefore, always write your bug reports ++on the assumption that the bug has not been reported previously. ++ ++ Sometimes people give a few sketchy facts and ask, "Does this ring a ++bell?" This cannot help us fix a bug, so it is basically useless. We ++respond by asking for enough details to enable us to investigate. You ++might as well expedite matters by sending them to begin with. ++ ++ To enable us to fix the bug, you should include all these things: ++ ++ * The version of `ld'. `ld' announces it if you start it with the ++ `--version' argument. ++ ++ Without this, we will not know whether there is any point in ++ looking for the bug in the current version of `ld'. ++ ++ * Any patches you may have applied to the `ld' source, including any ++ patches made to the `BFD' library. ++ ++ * The type of machine you are using, and the operating system name ++ and version number. ++ ++ * What compiler (and its version) was used to compile `ld'--e.g. ++ "`gcc-2.7'". ++ ++ * The command arguments you gave the linker to link your example and ++ observe the bug. To guarantee you will not omit something ++ important, list them all. A copy of the Makefile (or the output ++ from make) is sufficient. ++ ++ If we were to try to guess the arguments, we would probably guess ++ wrong and then we might not encounter the bug. ++ ++ * A complete input file, or set of input files, that will reproduce ++ the bug. It is generally most helpful to send the actual object ++ files provided that they are reasonably small. Say no more than ++ 10K. For bigger files you can either make them available by FTP ++ or HTTP or else state that you are willing to send the object ++ file(s) to whomever requests them. (Note - your email will be ++ going to a mailing list, so we do not want to clog it up with ++ large attachments). But small attachments are best. ++ ++ If the source files were assembled using `gas' or compiled using ++ `gcc', then it may be OK to send the source files rather than the ++ object files. In this case, be sure to say exactly what version of ++ `gas' or `gcc' was used to produce the object files. Also say how ++ `gas' or `gcc' were configured. ++ ++ * A description of what behavior you observe that you believe is ++ incorrect. For example, "It gets a fatal signal." ++ ++ Of course, if the bug is that `ld' gets a fatal signal, then we ++ will certainly notice it. But if the bug is incorrect output, we ++ might not notice unless it is glaringly wrong. You might as well ++ not give us a chance to make a mistake. ++ ++ Even if the problem you experience is a fatal signal, you should ++ still say so explicitly. Suppose something strange is going on, ++ such as, your copy of `ld' is out of synch, or you have ++ encountered a bug in the C library on your system. (This has ++ happened!) Your copy might crash and ours would not. If you told ++ us to expect a crash, then when ours fails to crash, we would know ++ that the bug was not happening for us. If you had not told us to ++ expect a crash, then we would not be able to draw any conclusion ++ from our observations. ++ ++ * If you wish to suggest changes to the `ld' source, send us context ++ diffs, as generated by `diff' with the `-u', `-c', or `-p' option. ++ Always send diffs from the old file to the new file. If you even ++ discuss something in the `ld' source, refer to it by context, not ++ by line number. ++ ++ The line numbers in our development sources will not match those ++ in your sources. Your line numbers would convey no useful ++ information to us. ++ ++ Here are some things that are not necessary: ++ ++ * A description of the envelope of the bug. ++ ++ Often people who encounter a bug spend a lot of time investigating ++ which changes to the input file will make the bug go away and which ++ changes will not affect it. ++ ++ This is often time consuming and not very useful, because the way ++ we will find the bug is by running a single example under the ++ debugger with breakpoints, not by pure deduction from a series of ++ examples. We recommend that you save your time for something else. ++ ++ Of course, if you can find a simpler example to report _instead_ ++ of the original one, that is a convenience for us. Errors in the ++ output will be easier to spot, running under the debugger will take ++ less time, and so on. ++ ++ However, simplification is not vital; if you do not want to do ++ this, report the bug anyway and send us the entire test case you ++ used. ++ ++ * A patch for the bug. ++ ++ A patch for the bug does help us if it is a good one. But do not ++ omit the necessary information, such as the test case, on the ++ assumption that a patch is all we need. We might see problems ++ with your patch and decide to fix the problem another way, or we ++ might not understand it at all. ++ ++ Sometimes with a program as complicated as `ld' it is very hard to ++ construct an example that will make the program follow a certain ++ path through the code. If you do not send us the example, we will ++ not be able to construct one, so we will not be able to verify ++ that the bug is fixed. ++ ++ And if we cannot understand what bug you are trying to fix, or why ++ your patch should be an improvement, we will not install it. A ++ test case will help us to understand. ++ ++ * A guess about what the bug is or what it depends on. ++ ++ Such guesses are usually wrong. Even we cannot guess right about ++ such things without first using the debugger to find the facts. ++ ++ ++File: ld.info, Node: MRI, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top ++ ++Appendix A MRI Compatible Script Files ++************************************** ++ ++To aid users making the transition to GNU `ld' from the MRI linker, ++`ld' can use MRI compatible linker scripts as an alternative to the ++more general-purpose linker scripting language described in *Note ++Scripts::. MRI compatible linker scripts have a much simpler command ++set than the scripting language otherwise used with `ld'. GNU `ld' ++supports the most commonly used MRI linker commands; these commands are ++described here. ++ ++ In general, MRI scripts aren't of much use with the `a.out' object ++file format, since it only has three sections and MRI scripts lack some ++features to make use of them. ++ ++ You can specify a file containing an MRI-compatible script using the ++`-c' command-line option. ++ ++ Each command in an MRI-compatible script occupies its own line; each ++command line starts with the keyword that identifies the command (though ++blank lines are also allowed for punctuation). If a line of an ++MRI-compatible script begins with an unrecognized keyword, `ld' issues ++a warning message, but continues processing the script. ++ ++ Lines beginning with `*' are comments. ++ ++ You can write these commands using all upper-case letters, or all ++lower case; for example, `chip' is the same as `CHIP'. The following ++list shows only the upper-case form of each command. ++ ++`ABSOLUTE SECNAME' ++`ABSOLUTE SECNAME, SECNAME, ... SECNAME' ++ Normally, `ld' includes in the output file all sections from all ++ the input files. However, in an MRI-compatible script, you can ++ use the `ABSOLUTE' command to restrict the sections that will be ++ present in your output program. If the `ABSOLUTE' command is used ++ at all in a script, then only the sections named explicitly in ++ `ABSOLUTE' commands will appear in the linker output. You can ++ still use other input sections (whatever you select on the command ++ line, or using `LOAD') to resolve addresses in the output file. ++ ++`ALIAS OUT-SECNAME, IN-SECNAME' ++ Use this command to place the data from input section IN-SECNAME ++ in a section called OUT-SECNAME in the linker output file. ++ ++ IN-SECNAME may be an integer. ++ ++`ALIGN SECNAME = EXPRESSION' ++ Align the section called SECNAME to EXPRESSION. The EXPRESSION ++ should be a power of two. ++ ++`BASE EXPRESSION' ++ Use the value of EXPRESSION as the lowest address (other than ++ absolute addresses) in the output file. ++ ++`CHIP EXPRESSION' ++`CHIP EXPRESSION, EXPRESSION' ++ This command does nothing; it is accepted only for compatibility. ++ ++`END' ++ This command does nothing whatever; it's only accepted for ++ compatibility. ++ ++`FORMAT OUTPUT-FORMAT' ++ Similar to the `OUTPUT_FORMAT' command in the more general linker ++ language, but restricted to one of these output formats: ++ ++ 1. S-records, if OUTPUT-FORMAT is `S' ++ ++ 2. IEEE, if OUTPUT-FORMAT is `IEEE' ++ ++ 3. COFF (the `coff-m68k' variant in BFD), if OUTPUT-FORMAT is ++ `COFF' ++ ++`LIST ANYTHING...' ++ Print (to the standard output file) a link map, as produced by the ++ `ld' command-line option `-M'. ++ ++ The keyword `LIST' may be followed by anything on the same line, ++ with no change in its effect. ++ ++`LOAD FILENAME' ++`LOAD FILENAME, FILENAME, ... FILENAME' ++ Include one or more object file FILENAME in the link; this has the ++ same effect as specifying FILENAME directly on the `ld' command ++ line. ++ ++`NAME OUTPUT-NAME' ++ OUTPUT-NAME is the name for the program produced by `ld'; the ++ MRI-compatible command `NAME' is equivalent to the command-line ++ option `-o' or the general script language command `OUTPUT'. ++ ++`ORDER SECNAME, SECNAME, ... SECNAME' ++`ORDER SECNAME SECNAME SECNAME' ++ Normally, `ld' orders the sections in its output file in the order ++ in which they first appear in the input files. In an ++ MRI-compatible script, you can override this ordering with the ++ `ORDER' command. The sections you list with `ORDER' will appear ++ first in your output file, in the order specified. ++ ++`PUBLIC NAME=EXPRESSION' ++`PUBLIC NAME,EXPRESSION' ++`PUBLIC NAME EXPRESSION' ++ Supply a value (EXPRESSION) for external symbol NAME used in the ++ linker input files. ++ ++`SECT SECNAME, EXPRESSION' ++`SECT SECNAME=EXPRESSION' ++`SECT SECNAME EXPRESSION' ++ You can use any of these three forms of the `SECT' command to ++ specify the start address (EXPRESSION) for section SECNAME. If ++ you have more than one `SECT' statement for the same SECNAME, only ++ the _first_ sets the start address. ++ ++ ++File: ld.info, Node: GNU Free Documentation License, Next: Index, Prev: MRI, Up: Top ++ ++Appendix B GNU Free Documentation License ++***************************************** ++ ++ Version 1.1, March 2000 ++ ++ Copyright (C) 2000, 2003 Free Software Foundation, Inc. ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ ++ 0. PREAMBLE ++ ++ The purpose of this License is to make a manual, textbook, or other ++ written document "free" in the sense of freedom: to assure everyone ++ the effective freedom to copy and redistribute it, with or without ++ modifying it, either commercially or noncommercially. Secondarily, ++ this License preserves for the author and publisher a way to get ++ credit for their work, while not being considered responsible for ++ modifications made by others. ++ ++ This License is a kind of "copyleft", which means that derivative ++ works of the document must themselves be free in the same sense. ++ It complements the GNU General Public License, which is a copyleft ++ license designed for free software. ++ ++ We have designed this License in order to use it for manuals for ++ free software, because free software needs free documentation: a ++ free program should come with manuals providing the same freedoms ++ that the software does. But this License is not limited to ++ software manuals; it can be used for any textual work, regardless ++ of subject matter or whether it is published as a printed book. ++ We recommend this License principally for works whose purpose is ++ instruction or reference. ++ ++ ++ 1. APPLICABILITY AND DEFINITIONS ++ ++ This License applies to any manual or other work that contains a ++ notice placed by the copyright holder saying it can be distributed ++ under the terms of this License. The "Document", below, refers to ++ any such manual or work. Any member of the public is a licensee, ++ and is addressed as "you." ++ ++ A "Modified Version" of the Document means any work containing the ++ Document or a portion of it, either copied verbatim, or with ++ modifications and/or translated into another language. ++ ++ A "Secondary Section" is a named appendix or a front-matter ++ section of the Document that deals exclusively with the ++ relationship of the publishers or authors of the Document to the ++ Document's overall subject (or to related matters) and contains ++ nothing that could fall directly within that overall subject. ++ (For example, if the Document is in part a textbook of ++ mathematics, a Secondary Section may not explain any mathematics.) ++ The relationship could be a matter of historical connection with ++ the subject or with related matters, or of legal, commercial, ++ philosophical, ethical or political position regarding them. ++ ++ The "Invariant Sections" are certain Secondary Sections whose ++ titles are designated, as being those of Invariant Sections, in ++ the notice that says that the Document is released under this ++ License. ++ ++ The "Cover Texts" are certain short passages of text that are ++ listed, as Front-Cover Texts or Back-Cover Texts, in the notice ++ that says that the Document is released under this License. ++ ++ A "Transparent" copy of the Document means a machine-readable copy, ++ represented in a format whose specification is available to the ++ general public, whose contents can be viewed and edited directly ++ and straightforwardly with generic text editors or (for images ++ composed of pixels) generic paint programs or (for drawings) some ++ widely available drawing editor, and that is suitable for input to ++ text formatters or for automatic translation to a variety of ++ formats suitable for input to text formatters. A copy made in an ++ otherwise Transparent file format whose markup has been designed ++ to thwart or discourage subsequent modification by readers is not ++ Transparent. A copy that is not "Transparent" is called "Opaque." ++ ++ Examples of suitable formats for Transparent copies include plain ++ ASCII without markup, Texinfo input format, LaTeX input format, ++ SGML or XML using a publicly available DTD, and ++ standard-conforming simple HTML designed for human modification. ++ Opaque formats include PostScript, PDF, proprietary formats that ++ can be read and edited only by proprietary word processors, SGML ++ or XML for which the DTD and/or processing tools are not generally ++ available, and the machine-generated HTML produced by some word ++ processors for output purposes only. ++ ++ The "Title Page" means, for a printed book, the title page itself, ++ plus such following pages as are needed to hold, legibly, the ++ material this License requires to appear in the title page. For ++ works in formats which do not have any title page as such, "Title ++ Page" means the text near the most prominent appearance of the ++ work's title, preceding the beginning of the body of the text. ++ ++ 2. VERBATIM COPYING ++ ++ You may copy and distribute the Document in any medium, either ++ commercially or noncommercially, provided that this License, the ++ copyright notices, and the license notice saying this License ++ applies to the Document are reproduced in all copies, and that you ++ add no other conditions whatsoever to those of this License. You ++ may not use technical measures to obstruct or control the reading ++ or further copying of the copies you make or distribute. However, ++ you may accept compensation in exchange for copies. If you ++ distribute a large enough number of copies you must also follow ++ the conditions in section 3. ++ ++ You may also lend copies, under the same conditions stated above, ++ and you may publicly display copies. ++ ++ 3. COPYING IN QUANTITY ++ ++ If you publish printed copies of the Document numbering more than ++ 100, and the Document's license notice requires Cover Texts, you ++ must enclose the copies in covers that carry, clearly and legibly, ++ all these Cover Texts: Front-Cover Texts on the front cover, and ++ Back-Cover Texts on the back cover. Both covers must also clearly ++ and legibly identify you as the publisher of these copies. The ++ front cover must present the full title with all words of the ++ title equally prominent and visible. You may add other material ++ on the covers in addition. Copying with changes limited to the ++ covers, as long as they preserve the title of the Document and ++ satisfy these conditions, can be treated as verbatim copying in ++ other respects. ++ ++ If the required texts for either cover are too voluminous to fit ++ legibly, you should put the first ones listed (as many as fit ++ reasonably) on the actual cover, and continue the rest onto ++ adjacent pages. ++ ++ If you publish or distribute Opaque copies of the Document ++ numbering more than 100, you must either include a ++ machine-readable Transparent copy along with each Opaque copy, or ++ state in or with each Opaque copy a publicly-accessible ++ computer-network location containing a complete Transparent copy ++ of the Document, free of added material, which the general ++ network-using public has access to download anonymously at no ++ charge using public-standard network protocols. If you use the ++ latter option, you must take reasonably prudent steps, when you ++ begin distribution of Opaque copies in quantity, to ensure that ++ this Transparent copy will remain thus accessible at the stated ++ location until at least one year after the last time you ++ distribute an Opaque copy (directly or through your agents or ++ retailers) of that edition to the public. ++ ++ It is requested, but not required, that you contact the authors of ++ the Document well before redistributing any large number of ++ copies, to give them a chance to provide you with an updated ++ version of the Document. ++ ++ 4. MODIFICATIONS ++ ++ You may copy and distribute a Modified Version of the Document ++ under the conditions of sections 2 and 3 above, provided that you ++ release the Modified Version under precisely this License, with ++ the Modified Version filling the role of the Document, thus ++ licensing distribution and modification of the Modified Version to ++ whoever possesses a copy of it. In addition, you must do these ++ things in the Modified Version: ++ ++ A. Use in the Title Page (and on the covers, if any) a title ++ distinct from that of the Document, and from those of previous ++ versions (which should, if there were any, be listed in the ++ History section of the Document). You may use the same title ++ as a previous version if the original publisher of that version ++ gives permission. ++ B. List on the Title Page, as authors, one or more persons or ++ entities responsible for authorship of the modifications in the ++ Modified Version, together with at least five of the principal ++ authors of the Document (all of its principal authors, if it ++ has less than five). ++ C. State on the Title page the name of the publisher of the ++ Modified Version, as the publisher. ++ D. Preserve all the copyright notices of the Document. ++ E. Add an appropriate copyright notice for your modifications ++ adjacent to the other copyright notices. ++ F. Include, immediately after the copyright notices, a license ++ notice giving the public permission to use the Modified Version ++ under the terms of this License, in the form shown in the ++ Addendum below. ++ G. Preserve in that license notice the full lists of Invariant ++ Sections and required Cover Texts given in the Document's ++ license notice. ++ H. Include an unaltered copy of this License. ++ I. Preserve the section entitled "History", and its title, and add ++ to it an item stating at least the title, year, new authors, and ++ publisher of the Modified Version as given on the Title Page. ++ If there is no section entitled "History" in the Document, ++ create one stating the title, year, authors, and publisher of ++ the Document as given on its Title Page, then add an item ++ describing the Modified Version as stated in the previous ++ sentence. ++ J. Preserve the network location, if any, given in the Document for ++ public access to a Transparent copy of the Document, and ++ likewise the network locations given in the Document for ++ previous versions it was based on. These may be placed in the ++ "History" section. You may omit a network location for a work ++ that was published at least four years before the Document ++ itself, or if the original publisher of the version it refers ++ to gives permission. ++ K. In any section entitled "Acknowledgements" or "Dedications", ++ preserve the section's title, and preserve in the section all the ++ substance and tone of each of the contributor acknowledgements ++ and/or dedications given therein. ++ L. Preserve all the Invariant Sections of the Document, ++ unaltered in their text and in their titles. Section numbers ++ or the equivalent are not considered part of the section titles. ++ M. Delete any section entitled "Endorsements." Such a section ++ may not be included in the Modified Version. ++ N. Do not retitle any existing section as "Endorsements" or to ++ conflict in title with any Invariant Section. ++ ++ If the Modified Version includes new front-matter sections or ++ appendices that qualify as Secondary Sections and contain no ++ material copied from the Document, you may at your option ++ designate some or all of these sections as invariant. To do this, ++ add their titles to the list of Invariant Sections in the Modified ++ Version's license notice. These titles must be distinct from any ++ other section titles. ++ ++ You may add a section entitled "Endorsements", provided it contains ++ nothing but endorsements of your Modified Version by various ++ parties-for example, statements of peer review or that the text has ++ been approved by an organization as the authoritative definition ++ of a standard. ++ ++ You may add a passage of up to five words as a Front-Cover Text, ++ and a passage of up to 25 words as a Back-Cover Text, to the end ++ of the list of Cover Texts in the Modified Version. Only one ++ passage of Front-Cover Text and one of Back-Cover Text may be ++ added by (or through arrangements made by) any one entity. If the ++ Document already includes a cover text for the same cover, ++ previously added by you or by arrangement made by the same entity ++ you are acting on behalf of, you may not add another; but you may ++ replace the old one, on explicit permission from the previous ++ publisher that added the old one. ++ ++ The author(s) and publisher(s) of the Document do not by this ++ License give permission to use their names for publicity for or to ++ assert or imply endorsement of any Modified Version. ++ ++ 5. COMBINING DOCUMENTS ++ ++ You may combine the Document with other documents released under ++ this License, under the terms defined in section 4 above for ++ modified versions, provided that you include in the combination ++ all of the Invariant Sections of all of the original documents, ++ unmodified, and list them all as Invariant Sections of your ++ combined work in its license notice. ++ ++ The combined work need only contain one copy of this License, and ++ multiple identical Invariant Sections may be replaced with a single ++ copy. If there are multiple Invariant Sections with the same name ++ but different contents, make the title of each such section unique ++ by adding at the end of it, in parentheses, the name of the ++ original author or publisher of that section if known, or else a ++ unique number. Make the same adjustment to the section titles in ++ the list of Invariant Sections in the license notice of the ++ combined work. ++ ++ In the combination, you must combine any sections entitled ++ "History" in the various original documents, forming one section ++ entitled "History"; likewise combine any sections entitled ++ "Acknowledgements", and any sections entitled "Dedications." You ++ must delete all sections entitled "Endorsements." ++ ++ 6. COLLECTIONS OF DOCUMENTS ++ ++ You may make a collection consisting of the Document and other ++ documents released under this License, and replace the individual ++ copies of this License in the various documents with a single copy ++ that is included in the collection, provided that you follow the ++ rules of this License for verbatim copying of each of the ++ documents in all other respects. ++ ++ You may extract a single document from such a collection, and ++ distribute it individually under this License, provided you insert ++ a copy of this License into the extracted document, and follow ++ this License in all other respects regarding verbatim copying of ++ that document. ++ ++ 7. AGGREGATION WITH INDEPENDENT WORKS ++ ++ A compilation of the Document or its derivatives with other ++ separate and independent documents or works, in or on a volume of ++ a storage or distribution medium, does not as a whole count as a ++ Modified Version of the Document, provided no compilation ++ copyright is claimed for the compilation. Such a compilation is ++ called an "aggregate", and this License does not apply to the ++ other self-contained works thus compiled with the Document, on ++ account of their being thus compiled, if they are not themselves ++ derivative works of the Document. ++ ++ If the Cover Text requirement of section 3 is applicable to these ++ copies of the Document, then if the Document is less than one ++ quarter of the entire aggregate, the Document's Cover Texts may be ++ placed on covers that surround only the Document within the ++ aggregate. Otherwise they must appear on covers around the whole ++ aggregate. ++ ++ 8. TRANSLATION ++ ++ Translation is considered a kind of modification, so you may ++ distribute translations of the Document under the terms of section ++ 4. Replacing Invariant Sections with translations requires special ++ permission from their copyright holders, but you may include ++ translations of some or all Invariant Sections in addition to the ++ original versions of these Invariant Sections. You may include a ++ translation of this License provided that you also include the ++ original English version of this License. In case of a ++ disagreement between the translation and the original English ++ version of this License, the original English version will prevail. ++ ++ 9. TERMINATION ++ ++ You may not copy, modify, sublicense, or distribute the Document ++ except as expressly provided for under this License. Any other ++ attempt to copy, modify, sublicense or distribute the Document is ++ void, and will automatically terminate your rights under this ++ License. However, parties who have received copies, or rights, ++ from you under this License will not have their licenses ++ terminated so long as such parties remain in full compliance. ++ ++ 10. FUTURE REVISIONS OF THIS LICENSE ++ ++ The Free Software Foundation may publish new, revised versions of ++ the GNU Free Documentation License from time to time. Such new ++ versions will be similar in spirit to the present version, but may ++ differ in detail to address new problems or concerns. See ++ http://www.gnu.org/copyleft/. ++ ++ Each version of the License is given a distinguishing version ++ number. If the Document specifies that a particular numbered ++ version of this License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that specified version or of any later version that has been ++ published (not as a draft) by the Free Software Foundation. If ++ the Document does not specify a version number of this License, ++ you may choose any version ever published (not as a draft) by the ++ Free Software Foundation. ++ ++ ++ADDENDUM: How to use this License for your documents ++==================================================== ++ ++To use this License in a document you have written, include a copy of ++the License in the document and put the following copyright and license ++notices just after the title page: ++ ++ Copyright (C) YEAR YOUR NAME. ++ Permission is granted to copy, distribute and/or modify this document ++ under the terms of the GNU Free Documentation License, Version 1.1 ++ or any later version published by the Free Software Foundation; ++ with the Invariant Sections being LIST THEIR TITLES, with the ++ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. ++ A copy of the license is included in the section entitled "GNU ++ Free Documentation License." ++ ++ If you have no Invariant Sections, write "with no Invariant Sections" ++instead of saying which ones are invariant. If you have no Front-Cover ++Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being ++LIST"; likewise for Back-Cover Texts. ++ ++ If your document contains nontrivial examples of program code, we ++recommend releasing these examples in parallel under your choice of ++free software license, such as the GNU General Public License, to ++permit their use in free software. ++ ++ ++File: ld.info, Node: Index, Prev: GNU Free Documentation License, Up: Top ++ ++Index ++***** ++ ++[index] ++* Menu: ++ ++* ": Symbols. (line 6) ++* -(: Options. (line 609) ++* --accept-unknown-input-arch: Options. (line 627) ++* --add-needed: Options. (line 649) ++* --add-stdcall-alias: Options. (line 1343) ++* --allow-multiple-definition: Options. (line 819) ++* --allow-shlib-undefined: Options. (line 825) ++* --architecture=ARCH: Options. (line 104) ++* --as-needed: Options. (line 637) ++* --auxiliary: Options. (line 205) ++* --base-file: Options. (line 1348) ++* --be8: ARM. (line 23) ++* --bss-plt: PowerPC ELF32. (line 13) ++* --check-sections: Options. (line 701) ++* --cref: Options. (line 711) ++* --default-imported-symver: Options. (line 853) ++* --default-symver: Options. (line 849) ++* --defsym SYMBOL=EXP: Options. (line 739) ++* --demangle[=STYLE]: Options. (line 752) ++* --disable-auto-image-base: Options. (line 1495) ++* --disable-auto-import: Options. (line 1624) ++* --disable-new-dtags: Options. (line 1295) ++* --disable-runtime-pseudo-reloc: Options. (line 1637) ++* --disable-stdcall-fixup: Options. (line 1358) ++* --discard-all: Options. (line 513) ++* --discard-locals: Options. (line 517) ++* --dll: Options. (line 1353) ++* --dll-search-prefix: Options. (line 1501) ++* --dotsyms: PowerPC64 ELF64. (line 33) ++* --dynamic-linker FILE: Options. (line 765) ++* --eh-frame-hdr: Options. (line 1291) ++* --emit-relocs: Options. (line 415) ++* --emit-stub-syms <1>: PowerPC64 ELF64. (line 29) ++* --emit-stub-syms: PowerPC ELF32. (line 37) ++* --enable-auto-image-base: Options. (line 1487) ++* --enable-auto-import: Options. (line 1510) ++* --enable-extra-pe-debug: Options. (line 1642) ++* --enable-new-dtags: Options. (line 1295) ++* --enable-runtime-pseudo-reloc: Options. (line 1629) ++* --enable-stdcall-fixup: Options. (line 1358) ++* --entry=ENTRY: Options. (line 158) ++* --error-unresolved-symbols: Options. (line 1244) ++* --exclude-libs: Options. (line 168) ++* --exclude-symbols: Options. (line 1400) ++* --export-all-symbols: Options. (line 1376) ++* --export-dynamic: Options. (line 179) ++* --fatal-warnings: Options. (line 771) ++* --file-alignment: Options. (line 1406) ++* --filter: Options. (line 226) ++* --fix-v4bx: ARM. (line 44) ++* --force-dynamic: Options. (line 424) ++* --force-exe-suffix: Options. (line 774) ++* --format=FORMAT: Options. (line 115) ++* --format=VERSION: TI COFF. (line 6) ++* --gc-sections: Options. (line 784) ++* --gpsize: Options. (line 259) ++* --hash-size=NUMBER: Options. (line 1304) ++* --heap: Options. (line 1412) ++* --help: Options. (line 792) ++* --image-base: Options. (line 1419) ++* --just-symbols=FILE: Options. (line 447) ++* --kill-at: Options. (line 1428) ++* --large-address-aware: Options. (line 1433) ++* --library-path=DIR: Options. (line 315) ++* --library=ARCHIVE: Options. (line 285) ++* --major-image-version: Options. (line 1442) ++* --major-os-version: Options. (line 1447) ++* --major-subsystem-version: Options. (line 1451) ++* --minor-image-version: Options. (line 1456) ++* --minor-os-version: Options. (line 1461) ++* --minor-subsystem-version: Options. (line 1465) ++* --mri-script=MRI-CMDFILE: Options. (line 139) ++* --multi-subspace: HPPA ELF32. (line 6) ++* --nmagic: Options. (line 384) ++* --no-accept-unknown-input-arch: Options. (line 627) ++* --no-add-needed: Options. (line 649) ++* --no-allow-shlib-undefined: Options. (line 825) ++* --no-as-needed: Options. (line 637) ++* --no-check-sections: Options. (line 701) ++* --no-define-common: Options. (line 723) ++* --no-demangle: Options. (line 752) ++* --no-dotsyms: PowerPC64 ELF64. (line 33) ++* --no-gc-sections: Options. (line 784) ++* --no-keep-memory: Options. (line 804) ++* --no-multi-toc: PowerPC64 ELF64. (line 74) ++* --no-omagic: Options. (line 398) ++* --no-opd-optimize: PowerPC64 ELF64. (line 48) ++* --no-relax: Xtensa. (line 56) ++* --no-tls-optimize <1>: PowerPC64 ELF64. (line 43) ++* --no-tls-optimize: PowerPC ELF32. (line 41) ++* --no-toc-optimize: PowerPC64 ELF64. (line 60) ++* --no-undefined: Options. (line 811) ++* --no-undefined-version: Options. (line 844) ++* --no-warn-mismatch: Options. (line 857) ++* --no-whole-archive: Options. (line 866) ++* --noinhibit-exec: Options. (line 870) ++* --non-overlapping-opd: PowerPC64 ELF64. (line 54) ++* --oformat: Options. (line 882) ++* --omagic: Options. (line 389) ++* --out-implib: Options. (line 1478) ++* --output-def: Options. (line 1470) ++* --output=OUTPUT: Options. (line 404) ++* --pic-executable: Options. (line 895) ++* --print-map: Options. (line 347) ++* --reduce-memory-overheads: Options. (line 1312) ++* --relax: Options. (line 911) ++* --relax on i960: i960. (line 31) ++* --relax on PowerPC: PowerPC ELF32. (line 6) ++* --relax on Xtensa: Xtensa. (line 27) ++* --relocatable: Options. (line 428) ++* --script=SCRIPT: Options. (line 471) ++* --sdata-got: PowerPC ELF32. (line 23) ++* --section-alignment: Options. (line 1647) ++* --section-start SECTIONNAME=ORG: Options. (line 1081) ++* --sort-common: Options. (line 1028) ++* --sort-section alignment: Options. (line 1038) ++* --sort-section name: Options. (line 1034) ++* --split-by-file: Options. (line 1042) ++* --split-by-reloc: Options. (line 1047) ++* --stack: Options. (line 1653) ++* --stats: Options. (line 1060) ++* --strip-all: Options. (line 458) ++* --strip-debug: Options. (line 462) ++* --stub-group-size: PowerPC64 ELF64. (line 6) ++* --stub-group-size=N: HPPA ELF32. (line 12) ++* --subsystem: Options. (line 1660) ++* --support-old-code: ARM. (line 6) ++* --sysroot: Options. (line 1064) ++* --target-help: Options. (line 796) ++* --target1-abs: ARM. (line 27) ++* --target1-rel: ARM. (line 27) ++* --target2=TYPE: ARM. (line 32) ++* --thumb-entry=ENTRY: ARM. (line 17) ++* --trace: Options. (line 467) ++* --trace-symbol=SYMBOL: Options. (line 522) ++* --traditional-format: Options. (line 1069) ++* --undefined=SYMBOL: Options. (line 480) ++* --unique[=SECTION]: Options. (line 498) ++* --unresolved-symbols: Options. (line 1096) ++* --use-blx: ARM. (line 57) ++* --verbose: Options. (line 1125) ++* --version: Options. (line 507) ++* --version-script=VERSION-SCRIPTFILE: Options. (line 1131) ++* --warn-common: Options. (line 1138) ++* --warn-constructors: Options. (line 1206) ++* --warn-multiple-gp: Options. (line 1211) ++* --warn-once: Options. (line 1225) ++* --warn-section-align: Options. (line 1229) ++* --warn-shared-textrel: Options. (line 1236) ++* --warn-unresolved-symbols: Options. (line 1239) ++* --whole-archive: Options. (line 1248) ++* --wrap: Options. (line 1262) ++* -AARCH: Options. (line 103) ++* -aKEYWORD: Options. (line 96) ++* -assert KEYWORD: Options. (line 659) ++* -b FORMAT: Options. (line 115) ++* -Bdynamic: Options. (line 662) ++* -Bgroup: Options. (line 672) ++* -Bshareable: Options. (line 1020) ++* -Bstatic: Options. (line 679) ++* -Bsymbolic: Options. (line 694) ++* -c MRI-CMDFILE: Options. (line 139) ++* -call_shared: Options. (line 662) ++* -d: Options. (line 149) ++* -dc: Options. (line 149) ++* -dn: Options. (line 679) ++* -dp: Options. (line 149) ++* -dy: Options. (line 662) ++* -E: Options. (line 179) ++* -e ENTRY: Options. (line 158) ++* -EB: Options. (line 198) ++* -EL: Options. (line 201) ++* -F: Options. (line 226) ++* -f: Options. (line 205) ++* -fini: Options. (line 250) ++* -G: Options. (line 259) ++* -g: Options. (line 256) ++* -hNAME: Options. (line 267) ++* -i: Options. (line 276) ++* -IFILE: Options. (line 765) ++* -init: Options. (line 279) ++* -lARCHIVE: Options. (line 285) ++* -LDIR: Options. (line 315) ++* -M: Options. (line 347) ++* -m EMULATION: Options. (line 337) ++* -Map: Options. (line 800) ++* -N: Options. (line 389) ++* -n: Options. (line 384) ++* -non_shared: Options. (line 679) ++* -nostdlib: Options. (line 876) ++* -O LEVEL: Options. (line 410) ++* -o OUTPUT: Options. (line 404) ++* -pie: Options. (line 895) ++* -q: Options. (line 415) ++* -qmagic: Options. (line 905) ++* -Qy: Options. (line 908) ++* -r: Options. (line 428) ++* -R FILE: Options. (line 447) ++* -rpath: Options. (line 945) ++* -rpath-link: Options. (line 967) ++* -S: Options. (line 462) ++* -s: Options. (line 458) ++* -shared: Options. (line 1020) ++* -soname=NAME: Options. (line 267) ++* -static: Options. (line 679) ++* -t: Options. (line 467) ++* -T SCRIPT: Options. (line 471) ++* -Tbss ORG: Options. (line 1090) ++* -Tdata ORG: Options. (line 1090) ++* -Ttext ORG: Options. (line 1090) ++* -u SYMBOL: Options. (line 480) ++* -Ur: Options. (line 488) ++* -V: Options. (line 507) ++* -v: Options. (line 507) ++* -X: Options. (line 517) ++* -x: Options. (line 513) ++* -Y PATH: Options. (line 531) ++* -y SYMBOL: Options. (line 522) ++* -z defs: Options. (line 811) ++* -z KEYWORD: Options. (line 535) ++* -z muldefs: Options. (line 819) ++* .: Location Counter. (line 6) ++* /DISCARD/: Output Section Discarding. ++ (line 18) ++* :PHDR: Output Section Phdr. ++ (line 6) ++* =FILLEXP: Output Section Fill. ++ (line 6) ++* >REGION: Output Section Region. ++ (line 6) ++* [COMMON]: Input Section Common. ++ (line 29) ++* ABSOLUTE (MRI): MRI. (line 33) ++* absolute and relocatable symbols: Expression Section. (line 6) ++* absolute expressions: Expression Section. (line 6) ++* ABSOLUTE(EXP): Builtin Functions. (line 10) ++* ADDR(SECTION): Builtin Functions. (line 17) ++* address, section: Output Section Address. ++ (line 6) ++* ALIAS (MRI): MRI. (line 44) ++* ALIGN (MRI): MRI. (line 50) ++* align expression: Builtin Functions. (line 36) ++* align location counter: Builtin Functions. (line 36) ++* ALIGN(ALIGN): Builtin Functions. (line 36) ++* ALIGN(EXP,ALIGN): Builtin Functions. (line 36) ++* ALIGN(SECTION_ALIGN): Forced Output Alignment. ++ (line 6) ++* allocating memory: MEMORY. (line 6) ++* architecture: Miscellaneous Commands. ++ (line 46) ++* architectures: Options. (line 103) ++* archive files, from cmd line: Options. (line 285) ++* archive search path in linker script: File Commands. (line 71) ++* arithmetic: Expressions. (line 6) ++* arithmetic operators: Operators. (line 6) ++* ARM interworking support: ARM. (line 6) ++* AS_NEEDED(FILES): File Commands. (line 51) ++* ASSERT: Miscellaneous Commands. ++ (line 9) ++* assertion in linker script: Miscellaneous Commands. ++ (line 9) ++* assignment in scripts: Assignments. (line 6) ++* AT(LMA): Output Section LMA. (line 6) ++* AT>LMA_REGION: Output Section LMA. (line 6) ++* automatic data imports: WIN32. (line 170) ++* back end: BFD. (line 6) ++* BASE (MRI): MRI. (line 54) ++* BE8: ARM. (line 23) ++* BFD canonical format: Canonical format. (line 11) ++* BFD requirements: BFD. (line 16) ++* big-endian objects: Options. (line 198) ++* binary input format: Options. (line 115) ++* BLOCK(EXP): Builtin Functions. (line 62) ++* bug criteria: Bug Criteria. (line 6) ++* bug reports: Bug Reporting. (line 6) ++* bugs in ld: Reporting Bugs. (line 6) ++* BYTE(EXPRESSION): Output Section Data. ++ (line 6) ++* C++ constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* CHIP (MRI): MRI. (line 58) ++* COLLECT_NO_DEMANGLE: Environment. (line 29) ++* combining symbols, warnings on: Options. (line 1138) ++* command files: Scripts. (line 6) ++* command line: Options. (line 6) ++* common allocation: Options. (line 149) ++* common allocation in linker script: Miscellaneous Commands. ++ (line 20) ++* common symbol placement: Input Section Common. ++ (line 6) ++* compatibility, MRI: Options. (line 139) ++* constants in linker scripts: Constants. (line 6) ++* CONSTRUCTORS: Output Section Keywords. ++ (line 19) ++* constructors: Options. (line 488) ++* constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* crash of linker: Bug Criteria. (line 9) ++* CREATE_OBJECT_SYMBOLS: Output Section Keywords. ++ (line 9) ++* creating a DEF file: WIN32. (line 137) ++* cross reference table: Options. (line 711) ++* cross references: Miscellaneous Commands. ++ (line 30) ++* current output location: Location Counter. (line 6) ++* data: Output Section Data. ++ (line 6) ++* DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE): Builtin Functions. ++ (line 67) ++* DATA_SEGMENT_END(EXP): Builtin Functions. (line 88) ++* DATA_SEGMENT_RELRO_END(OFFSET, EXP): Builtin Functions. (line 94) ++* dbx: Options. (line 1074) ++* DEF files, creating: Options. (line 1470) ++* default emulation: Environment. (line 21) ++* default input format: Environment. (line 9) ++* DEFINED(SYMBOL): Builtin Functions. (line 105) ++* deleting local symbols: Options. (line 513) ++* demangling, default: Environment. (line 29) ++* demangling, from command line: Options. (line 752) ++* direct linking to a dll: WIN32. (line 218) ++* discarding sections: Output Section Discarding. ++ (line 6) ++* discontinuous memory: MEMORY. (line 6) ++* DLLs, creating: Options. (line 1376) ++* DLLs, linking to: Options. (line 1501) ++* dot: Location Counter. (line 6) ++* dot inside sections: Location Counter. (line 34) ++* dot outside sections: Location Counter. (line 64) ++* dynamic linker, from command line: Options. (line 765) ++* dynamic symbol table: Options. (line 179) ++* ELF program headers: PHDRS. (line 6) ++* emulation: Options. (line 337) ++* emulation, default: Environment. (line 21) ++* END (MRI): MRI. (line 62) ++* endianness: Options. (line 198) ++* entry point: Entry Point. (line 6) ++* entry point, from command line: Options. (line 158) ++* entry point, thumb: ARM. (line 17) ++* ENTRY(SYMBOL): Entry Point. (line 6) ++* error on valid input: Bug Criteria. (line 12) ++* example of linker script: Simple Example. (line 6) ++* exporting DLL symbols: WIN32. (line 19) ++* expression evaluation order: Evaluation. (line 6) ++* expression sections: Expression Section. (line 6) ++* expression, absolute: Builtin Functions. (line 10) ++* expressions: Expressions. (line 6) ++* EXTERN: Miscellaneous Commands. ++ (line 13) ++* fatal signal: Bug Criteria. (line 9) ++* file name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* FILEHDR: PHDRS. (line 61) ++* filename symbols: Output Section Keywords. ++ (line 9) ++* fill pattern, entire section: Output Section Fill. ++ (line 6) ++* FILL(EXPRESSION): Output Section Data. ++ (line 39) ++* finalization function: Options. (line 250) ++* first input file: File Commands. (line 79) ++* first instruction: Entry Point. (line 6) ++* FIX_V4BX: ARM. (line 44) ++* FORCE_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 20) ++* forcing input section alignment: Forced Input Alignment. ++ (line 6) ++* forcing output section alignment: Forced Output Alignment. ++ (line 6) ++* forcing the creation of dynamic sections: Options. (line 424) ++* FORMAT (MRI): MRI. (line 66) ++* functions in expressions: Builtin Functions. (line 6) ++* garbage collection <1>: Input Section Keep. (line 6) ++* garbage collection: Options. (line 784) ++* generating optimized output: Options. (line 410) ++* GNU linker: Overview. (line 6) ++* GNUTARGET: Environment. (line 9) ++* GROUP(FILES): File Commands. (line 44) ++* grouping input files: File Commands. (line 44) ++* groups of archives: Options. (line 609) ++* H8/300 support: H8/300. (line 6) ++* header size: Builtin Functions. (line 170) ++* heap size: Options. (line 1412) ++* help: Options. (line 792) ++* holes: Location Counter. (line 12) ++* holes, filling: Output Section Data. ++ (line 39) ++* HPPA multiple sub-space stubs: HPPA ELF32. (line 6) ++* HPPA stub grouping: HPPA ELF32. (line 12) ++* i960 support: i960. (line 6) ++* image base: Options. (line 1419) ++* implicit linker scripts: Implicit Linker Scripts. ++ (line 6) ++* import libraries: WIN32. (line 10) ++* INCLUDE FILENAME: File Commands. (line 9) ++* including a linker script: File Commands. (line 9) ++* including an entire archive: Options. (line 1248) ++* incremental link: Options. (line 276) ++* INHIBIT_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 25) ++* initialization function: Options. (line 279) ++* initialized data in ROM: Output Section LMA. (line 21) ++* input file format in linker script: Format Commands. (line 35) ++* input filename symbols: Output Section Keywords. ++ (line 9) ++* input files in linker scripts: File Commands. (line 16) ++* input files, displaying: Options. (line 467) ++* input format: Options. (line 115) ++* input object files in linker scripts: File Commands. (line 16) ++* input section alignment: Forced Input Alignment. ++ (line 6) ++* input section basics: Input Section Basics. ++ (line 6) ++* input section wildcards: Input Section Wildcards. ++ (line 6) ++* input sections: Input Section. (line 6) ++* INPUT(FILES): File Commands. (line 16) ++* integer notation: Constants. (line 6) ++* integer suffixes: Constants. (line 12) ++* internal object-file format: Canonical format. (line 11) ++* invalid input: Bug Criteria. (line 14) ++* K and M integer suffixes: Constants. (line 12) ++* KEEP: Input Section Keep. (line 6) ++* l =: MEMORY. (line 72) ++* L, deleting symbols beginning: Options. (line 517) ++* lazy evaluation: Evaluation. (line 6) ++* ld bugs, reporting: Bug Reporting. (line 6) ++* LDEMULATION: Environment. (line 21) ++* len =: MEMORY. (line 72) ++* LENGTH =: MEMORY. (line 72) ++* LENGTH(MEMORY): Builtin Functions. (line 122) ++* library search path in linker script: File Commands. (line 71) ++* link map: Options. (line 347) ++* link-time runtime library search path: Options. (line 967) ++* linker crash: Bug Criteria. (line 9) ++* linker script concepts: Basic Script Concepts. ++ (line 6) ++* linker script example: Simple Example. (line 6) ++* linker script file commands: File Commands. (line 6) ++* linker script format: Script Format. (line 6) ++* linker script input object files: File Commands. (line 16) ++* linker script simple commands: Simple Commands. (line 6) ++* linker scripts: Scripts. (line 6) ++* LIST (MRI): MRI. (line 77) ++* little-endian objects: Options. (line 201) ++* LOAD (MRI): MRI. (line 84) ++* load address: Output Section LMA. (line 6) ++* LOADADDR(SECTION): Builtin Functions. (line 125) ++* loading, preventing: Output Section Type. ++ (line 22) ++* local symbols, deleting: Options. (line 517) ++* location counter: Location Counter. (line 6) ++* LONG(EXPRESSION): Output Section Data. ++ (line 6) ++* M and K integer suffixes: Constants. (line 12) ++* machine architecture: Miscellaneous Commands. ++ (line 46) ++* machine dependencies: Machine Dependent. (line 6) ++* mapping input sections to output sections: Input Section. (line 6) ++* MAX: Builtin Functions. (line 130) ++* MEMORY: MEMORY. (line 6) ++* memory region attributes: MEMORY. (line 32) ++* memory regions: MEMORY. (line 6) ++* memory regions and sections: Output Section Region. ++ (line 6) ++* memory usage: Options. (line 804) ++* MIN: Builtin Functions. (line 133) ++* MRI compatibility: MRI. (line 6) ++* MSP430 extra sections: MSP430. (line 11) ++* NAME (MRI): MRI. (line 90) ++* name, section: Output Section Name. ++ (line 6) ++* names: Symbols. (line 6) ++* naming the output file: Options. (line 404) ++* NEXT(EXP): Builtin Functions. (line 137) ++* NMAGIC: Options. (line 384) ++* NOCROSSREFS(SECTIONS): Miscellaneous Commands. ++ (line 30) ++* NOLOAD: Output Section Type. ++ (line 22) ++* not enough room for program headers: Builtin Functions. (line 175) ++* o =: MEMORY. (line 67) ++* objdump -i: BFD. (line 6) ++* object file management: BFD. (line 6) ++* object files: Options. (line 29) ++* object formats available: BFD. (line 6) ++* object size: Options. (line 259) ++* OMAGIC: Options. (line 389) ++* opening object files: BFD outline. (line 6) ++* operators for arithmetic: Operators. (line 6) ++* options: Options. (line 6) ++* ORDER (MRI): MRI. (line 95) ++* org =: MEMORY. (line 67) ++* ORIGIN =: MEMORY. (line 67) ++* ORIGIN(MEMORY): Builtin Functions. (line 143) ++* orphan: Orphan Sections. (line 6) ++* output file after errors: Options. (line 870) ++* output file format in linker script: Format Commands. (line 10) ++* output file name in linker scripot: File Commands. (line 61) ++* output section alignment: Forced Output Alignment. ++ (line 6) ++* output section attributes: Output Section Attributes. ++ (line 6) ++* output section data: Output Section Data. ++ (line 6) ++* OUTPUT(FILENAME): File Commands. (line 61) ++* OUTPUT_ARCH(BFDARCH): Miscellaneous Commands. ++ (line 46) ++* OUTPUT_FORMAT(BFDNAME): Format Commands. (line 10) ++* OVERLAY: Overlay Description. ++ (line 6) ++* overlays: Overlay Description. ++ (line 6) ++* partial link: Options. (line 428) ++* PHDRS: PHDRS. (line 6) ++* position independent executables: Options. (line 897) ++* PowerPC ELF32 options: PowerPC ELF32. (line 13) ++* PowerPC GOT: PowerPC ELF32. (line 23) ++* PowerPC long branches: PowerPC ELF32. (line 6) ++* PowerPC PLT: PowerPC ELF32. (line 13) ++* PowerPC stub symbols: PowerPC ELF32. (line 37) ++* PowerPC TLS optimization: PowerPC ELF32. (line 41) ++* PowerPC64 dot symbols: PowerPC64 ELF64. (line 33) ++* PowerPC64 ELF64 options: PowerPC64 ELF64. (line 6) ++* PowerPC64 multi-TOC: PowerPC64 ELF64. (line 74) ++* PowerPC64 OPD optimization: PowerPC64 ELF64. (line 48) ++* PowerPC64 OPD spacing: PowerPC64 ELF64. (line 54) ++* PowerPC64 stub grouping: PowerPC64 ELF64. (line 6) ++* PowerPC64 stub symbols: PowerPC64 ELF64. (line 29) ++* PowerPC64 TLS optimization: PowerPC64 ELF64. (line 43) ++* PowerPC64 TOC optimization: PowerPC64 ELF64. (line 60) ++* precedence in expressions: Operators. (line 6) ++* prevent unnecessary loading: Output Section Type. ++ (line 22) ++* program headers: PHDRS. (line 6) ++* program headers and sections: Output Section Phdr. ++ (line 6) ++* program headers, not enough room: Builtin Functions. (line 175) ++* program segments: PHDRS. (line 6) ++* PROVIDE: PROVIDE. (line 6) ++* PROVIDE_HIDDEN: PROVIDE_HIDDEN. (line 6) ++* PUBLIC (MRI): MRI. (line 103) ++* QUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* quoted symbol names: Symbols. (line 6) ++* read-only text: Options. (line 384) ++* read/write from cmd line: Options. (line 389) ++* regions of memory: MEMORY. (line 6) ++* relative expressions: Expression Section. (line 6) ++* relaxing addressing modes: Options. (line 911) ++* relaxing on H8/300: H8/300. (line 9) ++* relaxing on i960: i960. (line 31) ++* relaxing on Xtensa: Xtensa. (line 27) ++* relocatable and absolute symbols: Expression Section. (line 6) ++* relocatable output: Options. (line 428) ++* removing sections: Output Section Discarding. ++ (line 6) ++* reporting bugs in ld: Reporting Bugs. (line 6) ++* requirements for BFD: BFD. (line 16) ++* retain relocations in final executable: Options. (line 415) ++* retaining specified symbols: Options. (line 931) ++* ROM initialized data: Output Section LMA. (line 21) ++* round up expression: Builtin Functions. (line 36) ++* round up location counter: Builtin Functions. (line 36) ++* runtime library name: Options. (line 267) ++* runtime library search path: Options. (line 945) ++* runtime pseudo-relocation: WIN32. (line 196) ++* scaled integers: Constants. (line 12) ++* scommon section: Input Section Common. ++ (line 20) ++* script files: Options. (line 471) ++* scripts: Scripts. (line 6) ++* search directory, from cmd line: Options. (line 315) ++* search path in linker script: File Commands. (line 71) ++* SEARCH_DIR(PATH): File Commands. (line 71) ++* SECT (MRI): MRI. (line 109) ++* section address: Output Section Address. ++ (line 6) ++* section address in expression: Builtin Functions. (line 17) ++* section alignment, warnings on: Options. (line 1229) ++* section data: Output Section Data. ++ (line 6) ++* section fill pattern: Output Section Fill. ++ (line 6) ++* section load address: Output Section LMA. (line 6) ++* section load address in expression: Builtin Functions. (line 125) ++* section name: Output Section Name. ++ (line 6) ++* section name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* section size: Builtin Functions. (line 154) ++* section, assigning to memory region: Output Section Region. ++ (line 6) ++* section, assigning to program header: Output Section Phdr. ++ (line 6) ++* SECTIONS: SECTIONS. (line 6) ++* sections, discarding: Output Section Discarding. ++ (line 6) ++* segment origins, cmd line: Options. (line 1090) ++* SEGMENT_START(SEGMENT, DEFAULT): Builtin Functions. (line 146) ++* segments, ELF: PHDRS. (line 6) ++* shared libraries: Options. (line 1022) ++* SHORT(EXPRESSION): Output Section Data. ++ (line 6) ++* SIZEOF(SECTION): Builtin Functions. (line 154) ++* SIZEOF_HEADERS: Builtin Functions. (line 170) ++* small common symbols: Input Section Common. ++ (line 20) ++* SORT: Input Section Wildcards. ++ (line 58) ++* SORT_BY_ALIGNMENT: Input Section Wildcards. ++ (line 54) ++* SORT_BY_NAME: Input Section Wildcards. ++ (line 46) ++* SQUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* stack size: Options. (line 1653) ++* standard Unix system: Options. (line 7) ++* start of execution: Entry Point. (line 6) ++* STARTUP(FILENAME): File Commands. (line 79) ++* strip all symbols: Options. (line 458) ++* strip debugger symbols: Options. (line 462) ++* stripping all but some symbols: Options. (line 931) ++* SUBALIGN(SUBSECTION_ALIGN): Forced Input Alignment. ++ (line 6) ++* suffixes for integers: Constants. (line 12) ++* symbol defaults: Builtin Functions. (line 105) ++* symbol definition, scripts: Assignments. (line 6) ++* symbol names: Symbols. (line 6) ++* symbol tracing: Options. (line 522) ++* symbol versions: VERSION. (line 6) ++* symbol-only input: Options. (line 447) ++* symbols, from command line: Options. (line 739) ++* symbols, relocatable and absolute: Expression Section. (line 6) ++* symbols, retaining selectively: Options. (line 931) ++* synthesizing linker: Options. (line 911) ++* synthesizing on H8/300: H8/300. (line 14) ++* TARGET(BFDNAME): Format Commands. (line 35) ++* TARGET1: ARM. (line 27) ++* TARGET2: ARM. (line 32) ++* thumb entry point: ARM. (line 17) ++* TI COFF versions: TI COFF. (line 6) ++* traditional format: Options. (line 1069) ++* unallocated address, next: Builtin Functions. (line 137) ++* undefined symbol: Options. (line 480) ++* undefined symbol in linker script: Miscellaneous Commands. ++ (line 13) ++* undefined symbols, warnings on: Options. (line 1225) ++* uninitialized data placement: Input Section Common. ++ (line 6) ++* unspecified memory: Output Section Data. ++ (line 39) ++* usage: Options. (line 792) ++* USE_BLX: ARM. (line 57) ++* using a DEF file: WIN32. (line 42) ++* using auto-export functionality: WIN32. (line 22) ++* Using decorations: WIN32. (line 141) ++* variables, defining: Assignments. (line 6) ++* verbose: Options. (line 1125) ++* version: Options. (line 507) ++* version script: VERSION. (line 6) ++* version script, symbol versions: Options. (line 1131) ++* VERSION {script text}: VERSION. (line 6) ++* versions of symbols: VERSION. (line 6) ++* warnings, on combining symbols: Options. (line 1138) ++* warnings, on section alignment: Options. (line 1229) ++* warnings, on undefined symbols: Options. (line 1225) ++* weak externals: WIN32. (line 380) ++* what is this?: Overview. (line 6) ++* wildcard file name patterns: Input Section Wildcards. ++ (line 6) ++* Xtensa options: Xtensa. (line 56) ++* Xtensa processors: Xtensa. (line 6) ++ ++ ++ ++Tag Table: ++Node: Top347 ++Node: Overview1109 ++Node: Invocation2223 ++Node: Options2631 ++Node: Environment77286 ++Node: Scripts79046 ++Node: Basic Script Concepts80780 ++Node: Script Format83487 ++Node: Simple Example84350 ++Node: Simple Commands87446 ++Node: Entry Point87897 ++Node: File Commands88656 ++Node: Format Commands92522 ++Node: Miscellaneous Commands94488 ++Node: Assignments96718 ++Node: Simple Assignments97209 ++Node: PROVIDE98945 ++Node: PROVIDE_HIDDEN100150 ++Node: Source Code Reference100394 ++Node: SECTIONS103974 ++Node: Output Section Description105865 ++Node: Output Section Name106918 ++Node: Output Section Address107794 ++Node: Input Section109443 ++Node: Input Section Basics110244 ++Node: Input Section Wildcards112596 ++Node: Input Section Common117329 ++Node: Input Section Keep118811 ++Node: Input Section Example119301 ++Node: Output Section Data120269 ++Node: Output Section Keywords123046 ++Node: Output Section Discarding126615 ++Node: Output Section Attributes127571 ++Node: Output Section Type128575 ++Node: Output Section LMA129729 ++Node: Forced Output Alignment132000 ++Node: Forced Input Alignment132268 ++Node: Output Section Region132653 ++Node: Output Section Phdr133083 ++Node: Output Section Fill133747 ++Node: Overlay Description134889 ++Node: MEMORY139137 ++Node: PHDRS143337 ++Node: VERSION148376 ++Node: Expressions156167 ++Node: Constants157045 ++Node: Symbols157606 ++Node: Orphan Sections158344 ++Node: Location Counter159107 ++Node: Operators163411 ++Node: Evaluation164333 ++Node: Expression Section165697 ++Node: Builtin Functions167186 ++Node: Implicit Linker Scripts174678 ++Node: Machine Dependent175453 ++Node: H8/300176314 ++Node: i960177939 ++Node: ARM179624 ++Node: HPPA ELF32182540 ++Node: MMIX184163 ++Node: MSP430185380 ++Node: PowerPC ELF32186428 ++Node: PowerPC64 ELF64188719 ++Node: TI COFF193133 ++Node: WIN32193665 ++Node: Xtensa211739 ++Node: BFD214861 ++Node: BFD outline216316 ++Node: BFD information loss217602 ++Node: Canonical format220119 ++Node: Reporting Bugs224476 ++Node: Bug Criteria225170 ++Node: Bug Reporting225869 ++Node: MRI232894 ++Node: GNU Free Documentation License237537 ++Node: Index257251 ++ ++End Tag Table +diff -Nrup binutils-2.17/ld/ld.info.r31496 binutils-2.17.atmel.1.3.0/ld/ld.info.r31496 +--- binutils-2.17/ld/ld.info.r31496 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/ld.info.r31496 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,6721 @@ ++This is .././ld/ld.info, produced by makeinfo version 4.8 from ++.././ld/ld.texinfo. ++ ++START-INFO-DIR-ENTRY ++* Ld: (ld). The GNU linker. ++END-INFO-DIR-ENTRY ++ ++ This file documents the GNU linker LD version 2.17. ++ ++ Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, ++2002, 2003, 2004 Free Software Foundation, Inc. ++ ++ ++File: ld.info, Node: Top, Next: Overview, Up: (dir) ++ ++Using ld ++******** ++ ++This file documents the GNU linker ld version 2.17. ++ ++ This document is distributed under the terms of the GNU Free ++Documentation License. A copy of the license is included in the ++section entitled "GNU Free Documentation License". ++ ++* Menu: ++ ++* Overview:: Overview ++* Invocation:: Invocation ++* Scripts:: Linker Scripts ++ ++* Machine Dependent:: Machine Dependent Features ++ ++* BFD:: BFD ++ ++* Reporting Bugs:: Reporting Bugs ++* MRI:: MRI Compatible Script Files ++* GNU Free Documentation License:: GNU Free Documentation License ++* Index:: Index ++ ++ ++File: ld.info, Node: Overview, Next: Invocation, Prev: Top, Up: Top ++ ++1 Overview ++********** ++ ++`ld' combines a number of object and archive files, relocates their ++data and ties up symbol references. Usually the last step in compiling ++a program is to run `ld'. ++ ++ `ld' accepts Linker Command Language files written in a superset of ++AT&T's Link Editor Command Language syntax, to provide explicit and ++total control over the linking process. ++ ++ This version of `ld' uses the general purpose BFD libraries to ++operate on object files. This allows `ld' to read, combine, and write ++object files in many different formats--for example, COFF or `a.out'. ++Different formats may be linked together to produce any available kind ++of object file. *Note BFD::, for more information. ++ ++ Aside from its flexibility, the GNU linker is more helpful than other ++linkers in providing diagnostic information. Many linkers abandon ++execution immediately upon encountering an error; whenever possible, ++`ld' continues executing, allowing you to identify other errors (or, in ++some cases, to get an output file in spite of the error). ++ ++ ++File: ld.info, Node: Invocation, Next: Scripts, Prev: Overview, Up: Top ++ ++2 Invocation ++************ ++ ++The GNU linker `ld' is meant to cover a broad range of situations, and ++to be as compatible as possible with other linkers. As a result, you ++have many choices to control its behavior. ++ ++* Menu: ++ ++* Options:: Command Line Options ++* Environment:: Environment Variables ++ ++ ++File: ld.info, Node: Options, Next: Environment, Up: Invocation ++ ++2.1 Command Line Options ++======================== ++ ++ The linker supports a plethora of command-line options, but in actual ++practice few of them are used in any particular context. For instance, ++a frequent use of `ld' is to link standard Unix object files on a ++standard, supported Unix system. On such a system, to link a file ++`hello.o': ++ ++ ld -o OUTPUT /lib/crt0.o hello.o -lc ++ ++ This tells `ld' to produce a file called OUTPUT as the result of ++linking the file `/lib/crt0.o' with `hello.o' and the library `libc.a', ++which will come from the standard search directories. (See the ++discussion of the `-l' option below.) ++ ++ Some of the command-line options to `ld' may be specified at any ++point in the command line. However, options which refer to files, such ++as `-l' or `-T', cause the file to be read at the point at which the ++option appears in the command line, relative to the object files and ++other file options. Repeating non-file options with a different ++argument will either have no further effect, or override prior ++occurrences (those further to the left on the command line) of that ++option. Options which may be meaningfully specified more than once are ++noted in the descriptions below. ++ ++ Non-option arguments are object files or archives which are to be ++linked together. They may follow, precede, or be mixed in with ++command-line options, except that an object file argument may not be ++placed between an option and its argument. ++ ++ Usually the linker is invoked with at least one object file, but you ++can specify other forms of binary input files using `-l', `-R', and the ++script command language. If _no_ binary input files at all are ++specified, the linker does not produce any output, and issues the ++message `No input files'. ++ ++ If the linker cannot recognize the format of an object file, it will ++assume that it is a linker script. A script specified in this way ++augments the main linker script used for the link (either the default ++linker script or the one specified by using `-T'). This feature ++permits the linker to link against a file which appears to be an object ++or an archive, but actually merely defines some symbol values, or uses ++`INPUT' or `GROUP' to load other objects. Note that specifying a ++script in this way merely augments the main linker script; use the `-T' ++option to replace the default linker script entirely. *Note Scripts::. ++ ++ For options whose names are a single letter, option arguments must ++either follow the option letter without intervening whitespace, or be ++given as separate arguments immediately following the option that ++requires them. ++ ++ For options whose names are multiple letters, either one dash or two ++can precede the option name; for example, `-trace-symbol' and ++`--trace-symbol' are equivalent. Note--there is one exception to this ++rule. Multiple letter options that start with a lower case 'o' can ++only be preceeded by two dashes. This is to reduce confusion with the ++`-o' option. So for example `-omagic' sets the output file name to ++`magic' whereas `--omagic' sets the NMAGIC flag on the output. ++ ++ Arguments to multiple-letter options must either be separated from ++the option name by an equals sign, or be given as separate arguments ++immediately following the option that requires them. For example, ++`--trace-symbol foo' and `--trace-symbol=foo' are equivalent. Unique ++abbreviations of the names of multiple-letter options are accepted. ++ ++ Note--if the linker is being invoked indirectly, via a compiler ++driver (e.g. `gcc') then all the linker command line options should be ++prefixed by `-Wl,' (or whatever is appropriate for the particular ++compiler driver) like this: ++ ++ gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup ++ ++ This is important, because otherwise the compiler driver program may ++silently drop the linker options, resulting in a bad link. ++ ++ Here is a table of the generic command line switches accepted by the ++GNU linker: ++ ++`@FILE' ++ Read command-line options from FILE. The options read are ++ inserted in place of the original @FILE option. If FILE does not ++ exist, or cannot be read, then the option will be treated ++ literally, and not removed. ++ ++ Options in FILE are separated by whitespace. A whitespace ++ character may be included in an option by surrounding the entire ++ option in either single or double quotes. Any character ++ (including a backslash) may be included by prefixing the character ++ to be included with a backslash. The FILE may itself contain ++ additional @FILE options; any such options will be processed ++ recursively. ++ ++`-aKEYWORD' ++ This option is supported for HP/UX compatibility. The KEYWORD ++ argument must be one of the strings `archive', `shared', or ++ `default'. `-aarchive' is functionally equivalent to `-Bstatic', ++ and the other two keywords are functionally equivalent to ++ `-Bdynamic'. This option may be used any number of times. ++ ++`-AARCHITECTURE' ++`--architecture=ARCHITECTURE' ++ In the current release of `ld', this option is useful only for the ++ Intel 960 family of architectures. In that `ld' configuration, the ++ ARCHITECTURE argument identifies the particular architecture in ++ the 960 family, enabling some safeguards and modifying the ++ archive-library search path. *Note `ld' and the Intel 960 family: ++ i960, for details. ++ ++ Future releases of `ld' may support similar functionality for ++ other architecture families. ++ ++`-b INPUT-FORMAT' ++`--format=INPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the `-b' ++ option to specify the binary format for input object files that ++ follow this option on the command line. Even when `ld' is ++ configured to support alternative object formats, you don't ++ usually need to specify this, as `ld' should be configured to ++ expect as a default input format the most usual format on each ++ machine. INPUT-FORMAT is a text string, the name of a particular ++ format supported by the BFD libraries. (You can list the ++ available binary formats with `objdump -i'.) *Note BFD::. ++ ++ You may want to use this option if you are linking files with an ++ unusual binary format. You can also use `-b' to switch formats ++ explicitly (when linking object files of different formats), by ++ including `-b INPUT-FORMAT' before each group of object files in a ++ particular format. ++ ++ The default format is taken from the environment variable ++ `GNUTARGET'. *Note Environment::. You can also define the input ++ format from a script, using the command `TARGET'; see *Note Format ++ Commands::. ++ ++`-c MRI-COMMANDFILE' ++`--mri-script=MRI-COMMANDFILE' ++ For compatibility with linkers produced by MRI, `ld' accepts script ++ files written in an alternate, restricted command language, ++ described in *Note MRI Compatible Script Files: MRI. Introduce ++ MRI script files with the option `-c'; use the `-T' option to run ++ linker scripts written in the general-purpose `ld' scripting ++ language. If MRI-CMDFILE does not exist, `ld' looks for it in the ++ directories specified by any `-L' options. ++ ++`-d' ++`-dc' ++`-dp' ++ These three options are equivalent; multiple forms are supported ++ for compatibility with other linkers. They assign space to common ++ symbols even if a relocatable output file is specified (with ++ `-r'). The script command `FORCE_COMMON_ALLOCATION' has the same ++ effect. *Note Miscellaneous Commands::. ++ ++`-e ENTRY' ++`--entry=ENTRY' ++ Use ENTRY as the explicit symbol for beginning execution of your ++ program, rather than the default entry point. If there is no ++ symbol named ENTRY, the linker will try to parse ENTRY as a number, ++ and use that as the entry address (the number will be interpreted ++ in base 10; you may use a leading `0x' for base 16, or a leading ++ `0' for base 8). *Note Entry Point::, for a discussion of defaults ++ and other ways of specifying the entry point. ++ ++`--exclude-libs LIB,LIB,...' ++ Specifies a list of archive libraries from which symbols should ++ not be automatically exported. The library names may be delimited ++ by commas or colons. Specifying `--exclude-libs ALL' excludes ++ symbols in all archive libraries from automatic export. This ++ option is available only for the i386 PE targeted port of the ++ linker and for ELF targeted ports. For i386 PE, symbols ++ explicitly listed in a .def file are still exported, regardless of ++ this option. For ELF targeted ports, symbols affected by this ++ option will be treated as hidden. ++ ++`-E' ++`--export-dynamic' ++ When creating a dynamically linked executable, add all symbols to ++ the dynamic symbol table. The dynamic symbol table is the set of ++ symbols which are visible from dynamic objects at run time. ++ ++ If you do not use this option, the dynamic symbol table will ++ normally contain only those symbols which are referenced by some ++ dynamic object mentioned in the link. ++ ++ If you use `dlopen' to load a dynamic object which needs to refer ++ back to the symbols defined by the program, rather than some other ++ dynamic object, then you will probably need to use this option when ++ linking the program itself. ++ ++ You can also use the version script to control what symbols should ++ be added to the dynamic symbol table if the output format supports ++ it. See the description of `--version-script' in *Note VERSION::. ++ ++`-EB' ++ Link big-endian objects. This affects the default output format. ++ ++`-EL' ++ Link little-endian objects. This affects the default output ++ format. ++ ++`-f' ++`--auxiliary NAME' ++ When creating an ELF shared object, set the internal DT_AUXILIARY ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object should be used as an ++ auxiliary filter on the symbol table of the shared object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_AUXILIARY ++ field. If the dynamic linker resolves any symbols from the filter ++ object, it will first check whether there is a definition in the ++ shared object NAME. If there is one, it will be used instead of ++ the definition in the filter object. The shared object NAME need ++ not exist. Thus the shared object NAME may be used to provide an ++ alternative implementation of certain functions, perhaps for ++ debugging or for machine specific performance. ++ ++ This option may be specified more than once. The DT_AUXILIARY ++ entries will be created in the order in which they appear on the ++ command line. ++ ++`-F NAME' ++`--filter NAME' ++ When creating an ELF shared object, set the internal DT_FILTER ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object which is being created ++ should be used as a filter on the symbol table of the shared ++ object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_FILTER ++ field. The dynamic linker will resolve symbols according to the ++ symbol table of the filter object as usual, but it will actually ++ link to the definitions found in the shared object NAME. Thus the ++ filter object can be used to select a subset of the symbols ++ provided by the object NAME. ++ ++ Some older linkers used the `-F' option throughout a compilation ++ toolchain for specifying object-file format for both input and ++ output object files. The GNU linker uses other mechanisms for ++ this purpose: the `-b', `--format', `--oformat' options, the ++ `TARGET' command in linker scripts, and the `GNUTARGET' ++ environment variable. The GNU linker will ignore the `-F' option ++ when not creating an ELF shared object. ++ ++`-fini NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is unloaded, by setting DT_FINI to ++ the address of the function. By default, the linker uses `_fini' ++ as the function to call. ++ ++`-g' ++ Ignored. Provided for compatibility with other tools. ++ ++`-GVALUE' ++`--gpsize=VALUE' ++ Set the maximum size of objects to be optimized using the GP ++ register to SIZE. This is only meaningful for object file formats ++ such as MIPS ECOFF which supports putting large and small objects ++ into different sections. This is ignored for other object file ++ formats. ++ ++`-hNAME' ++`-soname=NAME' ++ When creating an ELF shared object, set the internal DT_SONAME ++ field to the specified name. When an executable is linked with a ++ shared object which has a DT_SONAME field, then when the ++ executable is run the dynamic linker will attempt to load the ++ shared object specified by the DT_SONAME field rather than the ++ using the file name given to the linker. ++ ++`-i' ++ Perform an incremental link (same as option `-r'). ++ ++`-init NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is loaded, by setting DT_INIT to ++ the address of the function. By default, the linker uses `_init' ++ as the function to call. ++ ++`-lARCHIVE' ++`--library=ARCHIVE' ++ Add archive file ARCHIVE to the list of files to link. This ++ option may be used any number of times. `ld' will search its ++ path-list for occurrences of `libARCHIVE.a' for every ARCHIVE ++ specified. ++ ++ On systems which support shared libraries, `ld' may also search for ++ libraries with extensions other than `.a'. Specifically, on ELF ++ and SunOS systems, `ld' will search a directory for a library with ++ an extension of `.so' before searching for one with an extension of ++ `.a'. By convention, a `.so' extension indicates a shared library. ++ ++ The linker will search an archive only once, at the location where ++ it is specified on the command line. If the archive defines a ++ symbol which was undefined in some object which appeared before ++ the archive on the command line, the linker will include the ++ appropriate file(s) from the archive. However, an undefined ++ symbol in an object appearing later on the command line will not ++ cause the linker to search the archive again. ++ ++ See the `-(' option for a way to force the linker to search ++ archives multiple times. ++ ++ You may list the same archive multiple times on the command line. ++ ++ This type of archive searching is standard for Unix linkers. ++ However, if you are using `ld' on AIX, note that it is different ++ from the behaviour of the AIX linker. ++ ++`-LSEARCHDIR' ++`--library-path=SEARCHDIR' ++ Add path SEARCHDIR to the list of paths that `ld' will search for ++ archive libraries and `ld' control scripts. You may use this ++ option any number of times. The directories are searched in the ++ order in which they are specified on the command line. ++ Directories specified on the command line are searched before the ++ default directories. All `-L' options apply to all `-l' options, ++ regardless of the order in which the options appear. ++ ++ If SEARCHDIR begins with `=', then the `=' will be replaced by the ++ "sysroot prefix", a path specified when the linker is configured. ++ ++ The default set of paths searched (without being specified with ++ `-L') depends on which emulation mode `ld' is using, and in some ++ cases also on how it was configured. *Note Environment::. ++ ++ The paths can also be specified in a link script with the ++ `SEARCH_DIR' command. Directories specified this way are searched ++ at the point in which the linker script appears in the command ++ line. ++ ++`-mEMULATION' ++ Emulate the EMULATION linker. You can list the available ++ emulations with the `--verbose' or `-V' options. ++ ++ If the `-m' option is not used, the emulation is taken from the ++ `LDEMULATION' environment variable, if that is defined. ++ ++ Otherwise, the default emulation depends upon how the linker was ++ configured. ++ ++`-M' ++`--print-map' ++ Print a link map to the standard output. A link map provides ++ information about the link, including the following: ++ ++ * Where object files are mapped into memory. ++ ++ * How common symbols are allocated. ++ ++ * All archive members included in the link, with a mention of ++ the symbol which caused the archive member to be brought in. ++ ++ * The values assigned to symbols. ++ ++ Note - symbols whose values are computed by an expression ++ which involves a reference to a previous value of the same ++ symbol may not have correct result displayed in the link map. ++ This is because the linker discards intermediate results and ++ only retains the final value of an expression. Under such ++ circumstances the linker will display the final value ++ enclosed by square brackets. Thus for example a linker ++ script containing: ++ ++ foo = 1 ++ foo = foo * 4 ++ foo = foo + 8 ++ ++ will produce the following output in the link map if the `-M' ++ option is used: ++ ++ 0x00000001 foo = 0x1 ++ [0x0000000c] foo = (foo * 0x4) ++ [0x0000000c] foo = (foo + 0x8) ++ ++ See *Note Expressions:: for more information about ++ expressions in linker scripts. ++ ++`-n' ++`--nmagic' ++ Turn off page alignment of sections, and mark the output as ++ `NMAGIC' if possible. ++ ++`-N' ++`--omagic' ++ Set the text and data sections to be readable and writable. Also, ++ do not page-align the data segment, and disable linking against ++ shared libraries. If the output format supports Unix style magic ++ numbers, mark the output as `OMAGIC'. Note: Although a writable ++ text section is allowed for PE-COFF targets, it does not conform ++ to the format specification published by Microsoft. ++ ++`--no-omagic' ++ This option negates most of the effects of the `-N' option. It ++ sets the text section to be read-only, and forces the data segment ++ to be page-aligned. Note - this option does not enable linking ++ against shared libraries. Use `-Bdynamic' for this. ++ ++`-o OUTPUT' ++`--output=OUTPUT' ++ Use OUTPUT as the name for the program produced by `ld'; if this ++ option is not specified, the name `a.out' is used by default. The ++ script command `OUTPUT' can also specify the output file name. ++ ++`-O LEVEL' ++ If LEVEL is a numeric values greater than zero `ld' optimizes the ++ output. This might take significantly longer and therefore ++ probably should only be enabled for the final binary. ++ ++`-q' ++`--emit-relocs' ++ Leave relocation sections and contents in fully linked ++ exececutables. Post link analysis and optimization tools may need ++ this information in order to perform correct modifications of ++ executables. This results in larger executables. ++ ++ This option is currently only supported on ELF platforms. ++ ++`--force-dynamic' ++ Force the output file to have dynamic sections. This option is ++ specific to VxWorks targets. ++ ++`-r' ++`--relocatable' ++ Generate relocatable output--i.e., generate an output file that ++ can in turn serve as input to `ld'. This is often called "partial ++ linking". As a side effect, in environments that support standard ++ Unix magic numbers, this option also sets the output file's magic ++ number to `OMAGIC'. If this option is not specified, an absolute ++ file is produced. When linking C++ programs, this option _will ++ not_ resolve references to constructors; to do that, use `-Ur'. ++ ++ When an input file does not have the same format as the output ++ file, partial linking is only supported if that input file does ++ not contain any relocations. Different output formats can have ++ further restrictions; for example some `a.out'-based formats do ++ not support partial linking with input files in other formats at ++ all. ++ ++ This option does the same thing as `-i'. ++ ++`-R FILENAME' ++`--just-symbols=FILENAME' ++ Read symbol names and their addresses from FILENAME, but do not ++ relocate it or include it in the output. This allows your output ++ file to refer symbolically to absolute locations of memory defined ++ in other programs. You may use this option more than once. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-s' ++`--strip-all' ++ Omit all symbol information from the output file. ++ ++`-S' ++`--strip-debug' ++ Omit debugger symbol information (but not all symbols) from the ++ output file. ++ ++`-t' ++`--trace' ++ Print the names of the input files as `ld' processes them. ++ ++`-T SCRIPTFILE' ++`--script=SCRIPTFILE' ++ Use SCRIPTFILE as the linker script. This script replaces `ld''s ++ default linker script (rather than adding to it), so COMMANDFILE ++ must specify everything necessary to describe the output file. ++ *Note Scripts::. If SCRIPTFILE does not exist in the current ++ directory, `ld' looks for it in the directories specified by any ++ preceding `-L' options. Multiple `-T' options accumulate. ++ ++`-u SYMBOL' ++`--undefined=SYMBOL' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. `-u' may be repeated with ++ different option arguments to enter additional undefined symbols. ++ This option is equivalent to the `EXTERN' linker script command. ++ ++`-Ur' ++ For anything other than C++ programs, this option is equivalent to ++ `-r': it generates relocatable output--i.e., an output file that ++ can in turn serve as input to `ld'. When linking C++ programs, ++ `-Ur' _does_ resolve references to constructors, unlike `-r'. It ++ does not work to use `-Ur' on files that were themselves linked ++ with `-Ur'; once the constructor table has been built, it cannot ++ be added to. Use `-Ur' only for the last partial link, and `-r' ++ for the others. ++ ++`--unique[=SECTION]' ++ Creates a separate output section for every input section matching ++ SECTION, or if the optional wildcard SECTION argument is missing, ++ for every orphan input section. An orphan section is one not ++ specifically mentioned in a linker script. You may use this option ++ multiple times on the command line; It prevents the normal ++ merging of input sections with the same name, overriding output ++ section assignments in a linker script. ++ ++`-v' ++`--version' ++`-V' ++ Display the version number for `ld'. The `-V' option also lists ++ the supported emulations. ++ ++`-x' ++`--discard-all' ++ Delete all local symbols. ++ ++`-X' ++`--discard-locals' ++ Delete all temporary local symbols. For most targets, this is all ++ local symbols whose names begin with `L'. ++ ++`-y SYMBOL' ++`--trace-symbol=SYMBOL' ++ Print the name of each linked file in which SYMBOL appears. This ++ option may be given any number of times. On many systems it is ++ necessary to prepend an underscore. ++ ++ This option is useful when you have an undefined symbol in your ++ link but don't know where the reference is coming from. ++ ++`-Y PATH' ++ Add PATH to the default library search path. This option exists ++ for Solaris compatibility. ++ ++`-z KEYWORD' ++ The recognized keywords are: ++ `combreloc' ++ Combines multiple reloc sections and sorts them to make ++ dynamic symbol lookup caching possible. ++ ++ `defs' ++ Disallows undefined symbols in object files. Undefined ++ symbols in shared libraries are still allowed. ++ ++ `execstack' ++ Marks the object as requiring executable stack. ++ ++ `initfirst' ++ This option is only meaningful when building a shared object. ++ It marks the object so that its runtime initialization will ++ occur before the runtime initialization of any other objects ++ brought into the process at the same time. Similarly the ++ runtime finalization of the object will occur after the ++ runtime finalization of any other objects. ++ ++ `interpose' ++ Marks the object that its symbol table interposes before all ++ symbols but the primary executable. ++ ++ `loadfltr' ++ Marks the object that its filters be processed immediately at ++ runtime. ++ ++ `muldefs' ++ Allows multiple definitions. ++ ++ `nocombreloc' ++ Disables multiple reloc sections combining. ++ ++ `nocopyreloc' ++ Disables production of copy relocs. ++ ++ `nodefaultlib' ++ Marks the object that the search for dependencies of this ++ object will ignore any default library search paths. ++ ++ `nodelete' ++ Marks the object shouldn't be unloaded at runtime. ++ ++ `nodlopen' ++ Marks the object not available to `dlopen'. ++ ++ `nodump' ++ Marks the object can not be dumped by `dldump'. ++ ++ `noexecstack' ++ Marks the object as not requiring executable stack. ++ ++ `norelro' ++ Don't create an ELF `PT_GNU_RELRO' segment header in the ++ object. ++ ++ `now' ++ When generating an executable or shared library, mark it to ++ tell the dynamic linker to resolve all symbols when the ++ program is started, or when the shared library is linked to ++ using dlopen, instead of deferring function call resolution ++ to the point when the function is first called. ++ ++ `origin' ++ Marks the object may contain $ORIGIN. ++ ++ `relro' ++ Create an ELF `PT_GNU_RELRO' segment header in the object. ++ ++ ++ Other keywords are ignored for Solaris compatibility. ++ ++`-( ARCHIVES -)' ++`--start-group ARCHIVES --end-group' ++ The ARCHIVES should be a list of archive files. They may be ++ either explicit file names, or `-l' options. ++ ++ The specified archives are searched repeatedly until no new ++ undefined references are created. Normally, an archive is ++ searched only once in the order that it is specified on the ++ command line. If a symbol in that archive is needed to resolve an ++ undefined symbol referred to by an object in an archive that ++ appears later on the command line, the linker would not be able to ++ resolve that reference. By grouping the archives, they all be ++ searched repeatedly until all possible references are resolved. ++ ++ Using this option has a significant performance cost. It is best ++ to use it only when there are unavoidable circular references ++ between two or more archives. ++ ++`--accept-unknown-input-arch' ++`--no-accept-unknown-input-arch' ++ Tells the linker to accept input files whose architecture cannot be ++ recognised. The assumption is that the user knows what they are ++ doing and deliberately wants to link in these unknown input files. ++ This was the default behaviour of the linker, before release ++ 2.14. The default behaviour from release 2.14 onwards is to ++ reject such input files, and so the `--accept-unknown-input-arch' ++ option has been added to restore the old behaviour. ++ ++`--as-needed' ++`--no-as-needed' ++ This option affects ELF DT_NEEDED tags for dynamic libraries ++ mentioned on the command line after the `--as-needed' option. ++ Normally, the linker will add a DT_NEEDED tag for each dynamic ++ library mentioned on the command line, regardless of whether the ++ library is actually needed. `--as-needed' causes DT_NEEDED tags ++ to only be emitted for libraries that satisfy some symbol ++ reference from regular objects which is undefined at the point ++ that the library was linked. `--no-as-needed' restores the ++ default behaviour. ++ ++`--add-needed' ++`--no-add-needed' ++ This option affects the treatment of dynamic libraries from ELF ++ DT_NEEDED tags in dynamic libraries mentioned on the command line ++ after the `--no-add-needed' option. Normally, the linker will add ++ a DT_NEEDED tag for each dynamic library from DT_NEEDED tags. ++ `--no-add-needed' causes DT_NEEDED tags will never be emitted for ++ those libraries from DT_NEEDED tags. `--add-needed' restores the ++ default behaviour. ++ ++`-assert KEYWORD' ++ This option is ignored for SunOS compatibility. ++ ++`-Bdynamic' ++`-dy' ++`-call_shared' ++ Link against dynamic libraries. This is only meaningful on ++ platforms for which shared libraries are supported. This option ++ is normally the default on such platforms. The different variants ++ of this option are for compatibility with various systems. You ++ may use this option multiple times on the command line: it affects ++ library searching for `-l' options which follow it. ++ ++`-Bgroup' ++ Set the `DF_1_GROUP' flag in the `DT_FLAGS_1' entry in the dynamic ++ section. This causes the runtime linker to handle lookups in this ++ object and its dependencies to be performed only inside the group. ++ `--unresolved-symbols=report-all' is implied. This option is only ++ meaningful on ELF platforms which support shared libraries. ++ ++`-Bstatic' ++`-dn' ++`-non_shared' ++`-static' ++ Do not link against shared libraries. This is only meaningful on ++ platforms for which shared libraries are supported. The different ++ variants of this option are for compatibility with various ++ systems. You may use this option multiple times on the command ++ line: it affects library searching for `-l' options which follow ++ it. This option also implies `--unresolved-symbols=report-all'. ++ This option can be used with `-shared'. Doing so means that a ++ shared library is being created but that all of the library's ++ external references must be resolved by pulling in entries from ++ static libraries. ++ ++`-Bsymbolic' ++ When creating a shared library, bind references to global symbols ++ to the definition within the shared library, if any. Normally, it ++ is possible for a program linked against a shared library to ++ override the definition within the shared library. This option is ++ only meaningful on ELF platforms which support shared libraries. ++ ++`--check-sections' ++`--no-check-sections' ++ Asks the linker _not_ to check section addresses after they have ++ been assigned to see if there are any overlaps. Normally the ++ linker will perform this check, and if it finds any overlaps it ++ will produce suitable error messages. The linker does know about, ++ and does make allowances for sections in overlays. The default ++ behaviour can be restored by using the command line switch ++ `--check-sections'. ++ ++`--cref' ++ Output a cross reference table. If a linker map file is being ++ generated, the cross reference table is printed to the map file. ++ Otherwise, it is printed on the standard output. ++ ++ The format of the table is intentionally simple, so that it may be ++ easily processed by a script if necessary. The symbols are ++ printed out, sorted by name. For each symbol, a list of file ++ names is given. If the symbol is defined, the first file listed ++ is the location of the definition. The remaining files contain ++ references to the symbol. ++ ++`--no-define-common' ++ This option inhibits the assignment of addresses to common symbols. ++ The script command `INHIBIT_COMMON_ALLOCATION' has the same effect. ++ *Note Miscellaneous Commands::. ++ ++ The `--no-define-common' option allows decoupling the decision to ++ assign addresses to Common symbols from the choice of the output ++ file type; otherwise a non-Relocatable output type forces ++ assigning addresses to Common symbols. Using `--no-define-common' ++ allows Common symbols that are referenced from a shared library to ++ be assigned addresses only in the main program. This eliminates ++ the unused duplicate space in the shared library, and also ++ prevents any possible confusion over resolving to the wrong ++ duplicate when there are many dynamic modules with specialized ++ search paths for runtime symbol resolution. ++ ++`--defsym SYMBOL=EXPRESSION' ++ Create a global symbol in the output file, containing the absolute ++ address given by EXPRESSION. You may use this option as many ++ times as necessary to define multiple symbols in the command line. ++ A limited form of arithmetic is supported for the EXPRESSION in ++ this context: you may give a hexadecimal constant or the name of ++ an existing symbol, or use `+' and `-' to add or subtract ++ hexadecimal constants or symbols. If you need more elaborate ++ expressions, consider using the linker command language from a ++ script (*note Assignment: Symbol Definitions: Assignments.). ++ _Note:_ there should be no white space between SYMBOL, the equals ++ sign ("<=>"), and EXPRESSION. ++ ++`--demangle[=STYLE]' ++`--no-demangle' ++ These options control whether to demangle symbol names in error ++ messages and other output. When the linker is told to demangle, ++ it tries to present symbol names in a readable fashion: it strips ++ leading underscores if they are used by the object file format, ++ and converts C++ mangled symbol names into user readable names. ++ Different compilers have different mangling styles. The optional ++ demangling style argument can be used to choose an appropriate ++ demangling style for your compiler. The linker will demangle by ++ default unless the environment variable `COLLECT_NO_DEMANGLE' is ++ set. These options may be used to override the default. ++ ++`--dynamic-linker FILE' ++ Set the name of the dynamic linker. This is only meaningful when ++ generating dynamically linked ELF executables. The default dynamic ++ linker is normally correct; don't use this unless you know what ++ you are doing. ++ ++`--fatal-warnings' ++ Treat all warnings as errors. ++ ++`--force-exe-suffix' ++ Make sure that an output file has a .exe suffix. ++ ++ If a successfully built fully linked output file does not have a ++ `.exe' or `.dll' suffix, this option forces the linker to copy the ++ output file to one of the same name with a `.exe' suffix. This ++ option is useful when using unmodified Unix makefiles on a ++ Microsoft Windows host, since some versions of Windows won't run ++ an image unless it ends in a `.exe' suffix. ++ ++`--no-gc-sections' ++`--gc-sections' ++ Enable garbage collection of unused input sections. It is ignored ++ on targets that do not support this option. This option is not ++ compatible with `-r'. The default behaviour (of not performing ++ this garbage collection) can be restored by specifying ++ `--no-gc-sections' on the command line. ++ ++`--help' ++ Print a summary of the command-line options on the standard output ++ and exit. ++ ++`--target-help' ++ Print a summary of all target specific options on the standard ++ output and exit. ++ ++`-Map MAPFILE' ++ Print a link map to the file MAPFILE. See the description of the ++ `-M' option, above. ++ ++`--no-keep-memory' ++ `ld' normally optimizes for speed over memory usage by caching the ++ symbol tables of input files in memory. This option tells `ld' to ++ instead optimize for memory usage, by rereading the symbol tables ++ as necessary. This may be required if `ld' runs out of memory ++ space while linking a large executable. ++ ++`--no-undefined' ++`-z defs' ++ Report unresolved symbol references from regular object files. ++ This is done even if the linker is creating a non-symbolic shared ++ library. The switch `--[no-]allow-shlib-undefined' controls the ++ behaviour for reporting unresolved references found in shared ++ libraries being linked in. ++ ++`--allow-multiple-definition' ++`-z muldefs' ++ Normally when a symbol is defined multiple times, the linker will ++ report a fatal error. These options allow multiple definitions and ++ the first definition will be used. ++ ++`--allow-shlib-undefined' ++`--no-allow-shlib-undefined' ++ Allows (the default) or disallows undefined symbols in shared ++ libraries. This switch is similar to `--no-undefined' except that ++ it determines the behaviour when the undefined symbols are in a ++ shared library rather than a regular object file. It does not ++ affect how undefined symbols in regular object files are handled. ++ ++ The reason that `--allow-shlib-undefined' is the default is that ++ the shared library being specified at link time may not be the ++ same as the one that is available at load time, so the symbols ++ might actually be resolvable at load time. Plus there are some ++ systems, (eg BeOS) where undefined symbols in shared libraries is ++ normal. (The kernel patches them at load time to select which ++ function is most appropriate for the current architecture. This ++ is used for example to dynamically select an appropriate memset ++ function). Apparently it is also normal for HPPA shared libraries ++ to have undefined symbols. ++ ++`--no-undefined-version' ++ Normally when a symbol has an undefined version, the linker will ++ ignore it. This option disallows symbols with undefined version ++ and a fatal error will be issued instead. ++ ++`--default-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned exported symbols. ++ ++`--default-imported-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned imported symbols. ++ ++`--no-warn-mismatch' ++ Normally `ld' will give an error if you try to link together input ++ files that are mismatched for some reason, perhaps because they ++ have been compiled for different processors or for different ++ endiannesses. This option tells `ld' that it should silently ++ permit such possible errors. This option should only be used with ++ care, in cases when you have taken some special action that ++ ensures that the linker errors are inappropriate. ++ ++`--no-whole-archive' ++ Turn off the effect of the `--whole-archive' option for subsequent ++ archive files. ++ ++`--noinhibit-exec' ++ Retain the executable output file whenever it is still usable. ++ Normally, the linker will not produce an output file if it ++ encounters errors during the link process; it exits without ++ writing an output file when it issues any error whatsoever. ++ ++`-nostdlib' ++ Only search library directories explicitly specified on the ++ command line. Library directories specified in linker scripts ++ (including linker scripts specified on the command line) are ++ ignored. ++ ++`--oformat OUTPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the ++ `--oformat' option to specify the binary format for the output ++ object file. Even when `ld' is configured to support alternative ++ object formats, you don't usually need to specify this, as `ld' ++ should be configured to produce as a default output format the most ++ usual format on each machine. OUTPUT-FORMAT is a text string, the ++ name of a particular format supported by the BFD libraries. (You ++ can list the available binary formats with `objdump -i'.) The ++ script command `OUTPUT_FORMAT' can also specify the output format, ++ but this option overrides it. *Note BFD::. ++ ++`-pie' ++`--pic-executable' ++ Create a position independent executable. This is currently only ++ supported on ELF platforms. Position independent executables are ++ similar to shared libraries in that they are relocated by the ++ dynamic linker to the virtual address the OS chooses for them ++ (which can vary between invocations). Like normal dynamically ++ linked executables they can be executed and symbols defined in the ++ executable cannot be overridden by shared libraries. ++ ++`-qmagic' ++ This option is ignored for Linux compatibility. ++ ++`-Qy' ++ This option is ignored for SVR4 compatibility. ++ ++`--relax' ++ An option with machine dependent effects. This option is only ++ supported on a few targets. *Note `ld' and the H8/300: H8/300. ++ *Note `ld' and the Intel 960 family: i960. *Note `ld' and Xtensa ++ Processors: Xtensa. *Note `ld' and PowerPC 32-bit ELF Support: ++ PowerPC ELF32. ++ ++ On some platforms, the `--relax' option performs global ++ optimizations that become possible when the linker resolves ++ addressing in the program, such as relaxing address modes and ++ synthesizing new instructions in the output object file. ++ ++ On some platforms these link time global optimizations may make ++ symbolic debugging of the resulting executable impossible. This ++ is known to be the case for the Matsushita MN10200 and MN10300 ++ family of processors. ++ ++ On platforms where this is not supported, `--relax' is accepted, ++ but ignored. ++ ++`--retain-symbols-file FILENAME' ++ Retain _only_ the symbols listed in the file FILENAME, discarding ++ all others. FILENAME is simply a flat file, with one symbol name ++ per line. This option is especially useful in environments (such ++ as VxWorks) where a large global symbol table is accumulated ++ gradually, to conserve run-time memory. ++ ++ `--retain-symbols-file' does _not_ discard undefined symbols, or ++ symbols needed for relocations. ++ ++ You may only specify `--retain-symbols-file' once in the command ++ line. It overrides `-s' and `-S'. ++ ++`-rpath DIR' ++ Add a directory to the runtime library search path. This is used ++ when linking an ELF executable with shared objects. All `-rpath' ++ arguments are concatenated and passed to the runtime linker, which ++ uses them to locate shared objects at runtime. The `-rpath' ++ option is also used when locating shared objects which are needed ++ by shared objects explicitly included in the link; see the ++ description of the `-rpath-link' option. If `-rpath' is not used ++ when linking an ELF executable, the contents of the environment ++ variable `LD_RUN_PATH' will be used if it is defined. ++ ++ The `-rpath' option may also be used on SunOS. By default, on ++ SunOS, the linker will form a runtime search patch out of all the ++ `-L' options it is given. If a `-rpath' option is used, the ++ runtime search path will be formed exclusively using the `-rpath' ++ options, ignoring the `-L' options. This can be useful when using ++ gcc, which adds many `-L' options which may be on NFS mounted ++ filesystems. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-rpath-link DIR' ++ When using ELF or SunOS, one shared library may require another. ++ This happens when an `ld -shared' link includes a shared library ++ as one of the input files. ++ ++ When the linker encounters such a dependency when doing a ++ non-shared, non-relocatable link, it will automatically try to ++ locate the required shared library and include it in the link, if ++ it is not included explicitly. In such a case, the `-rpath-link' ++ option specifies the first set of directories to search. The ++ `-rpath-link' option may specify a sequence of directory names ++ either by specifying a list of names separated by colons, or by ++ appearing multiple times. ++ ++ This option should be used with caution as it overrides the search ++ path that may have been hard compiled into a shared library. In ++ such a case it is possible to use unintentionally a different ++ search path than the runtime linker would do. ++ ++ The linker uses the following search paths to locate required ++ shared libraries. ++ 1. Any directories specified by `-rpath-link' options. ++ ++ 2. Any directories specified by `-rpath' options. The difference ++ between `-rpath' and `-rpath-link' is that directories ++ specified by `-rpath' options are included in the executable ++ and used at runtime, whereas the `-rpath-link' option is only ++ effective at link time. It is for the native linker only. ++ ++ 3. On an ELF system, if the `-rpath' and `rpath-link' options ++ were not used, search the contents of the environment variable ++ `LD_RUN_PATH'. It is for the native linker only. ++ ++ 4. On SunOS, if the `-rpath' option was not used, search any ++ directories specified using `-L' options. ++ ++ 5. For a native linker, the contents of the environment variable ++ `LD_LIBRARY_PATH'. ++ ++ 6. For a native ELF linker, the directories in `DT_RUNPATH' or ++ `DT_RPATH' of a shared library are searched for shared ++ libraries needed by it. The `DT_RPATH' entries are ignored if ++ `DT_RUNPATH' entries exist. ++ ++ 7. The default directories, normally `/lib' and `/usr/lib'. ++ ++ 8. For a native linker on an ELF system, if the file ++ `/etc/ld.so.conf' exists, the list of directories found in ++ that file. ++ ++ If the required shared library is not found, the linker will issue ++ a warning and continue with the link. ++ ++`-shared' ++`-Bshareable' ++ Create a shared library. This is currently only supported on ELF, ++ XCOFF and SunOS platforms. On SunOS, the linker will ++ automatically create a shared library if the `-e' option is not ++ used and there are undefined symbols in the link. ++ ++`--sort-common' ++ This option tells `ld' to sort the common symbols by size when it ++ places them in the appropriate output sections. First come all ++ the one byte symbols, then all the two byte, then all the four ++ byte, and then everything else. This is to prevent gaps between ++ symbols due to alignment constraints. ++ ++`--sort-section name' ++ This option will apply `SORT_BY_NAME' to all wildcard section ++ patterns in the linker script. ++ ++`--sort-section alignment' ++ This option will apply `SORT_BY_ALIGNMENT' to all wildcard section ++ patterns in the linker script. ++ ++`--split-by-file [SIZE]' ++ Similar to `--split-by-reloc' but creates a new output section for ++ each input file when SIZE is reached. SIZE defaults to a size of ++ 1 if not given. ++ ++`--split-by-reloc [COUNT]' ++ Tries to creates extra sections in the output file so that no ++ single output section in the file contains more than COUNT ++ relocations. This is useful when generating huge relocatable ++ files for downloading into certain real time kernels with the COFF ++ object file format; since COFF cannot represent more than 65535 ++ relocations in a single section. Note that this will fail to work ++ with object file formats which do not support arbitrary sections. ++ The linker will not split up individual input sections for ++ redistribution, so if a single input section contains more than ++ COUNT relocations one output section will contain that many ++ relocations. COUNT defaults to a value of 32768. ++ ++`--stats' ++ Compute and display statistics about the operation of the linker, ++ such as execution time and memory usage. ++ ++`--sysroot=DIRECTORY' ++ Use DIRECTORY as the location of the sysroot, overriding the ++ configure-time default. This option is only supported by linkers ++ that were configured using `--with-sysroot'. ++ ++`--traditional-format' ++ For some targets, the output of `ld' is different in some ways from ++ the output of some existing linker. This switch requests `ld' to ++ use the traditional format instead. ++ ++ For example, on SunOS, `ld' combines duplicate entries in the ++ symbol string table. This can reduce the size of an output file ++ with full debugging information by over 30 percent. ++ Unfortunately, the SunOS `dbx' program can not read the resulting ++ program (`gdb' has no trouble). The `--traditional-format' switch ++ tells `ld' to not combine duplicate entries. ++ ++`--section-start SECTIONNAME=ORG' ++ Locate a section in the output file at the absolute address given ++ by ORG. You may use this option as many times as necessary to ++ locate multiple sections in the command line. ORG must be a ++ single hexadecimal integer; for compatibility with other linkers, ++ you may omit the leading `0x' usually associated with hexadecimal ++ values. _Note:_ there should be no white space between ++ SECTIONNAME, the equals sign ("<=>"), and ORG. ++ ++`-Tbss ORG' ++`-Tdata ORG' ++`-Ttext ORG' ++ Same as -section-start, with `.bss', `.data' or `.text' as the ++ SECTIONNAME. ++ ++`--unresolved-symbols=METHOD' ++ Determine how to handle unresolved symbols. There are four ++ possible values for `method': ++ ++ `ignore-all' ++ Do not report any unresolved symbols. ++ ++ `report-all' ++ Report all unresolved symbols. This is the default. ++ ++ `ignore-in-object-files' ++ Report unresolved symbols that are contained in shared ++ libraries, but ignore them if they come from regular object ++ files. ++ ++ `ignore-in-shared-libs' ++ Report unresolved symbols that come from regular object ++ files, but ignore them if they come from shared libraries. ++ This can be useful when creating a dynamic binary and it is ++ known that all the shared libraries that it should be ++ referencing are included on the linker's command line. ++ ++ The behaviour for shared libraries on their own can also be ++ controlled by the `--[no-]allow-shlib-undefined' option. ++ ++ Normally the linker will generate an error message for each ++ reported unresolved symbol but the option ++ `--warn-unresolved-symbols' can change this to a warning. ++ ++`--dll-verbose' ++`--verbose' ++ Display the version number for `ld' and list the linker emulations ++ supported. Display which input files can and cannot be opened. ++ Display the linker script being used by the linker. ++ ++`--version-script=VERSION-SCRIPTFILE' ++ Specify the name of a version script to the linker. This is ++ typically used when creating shared libraries to specify ++ additional information about the version hierarchy for the library ++ being created. This option is only meaningful on ELF platforms ++ which support shared libraries. *Note VERSION::. ++ ++`--warn-common' ++ Warn when a common symbol is combined with another common symbol ++ or with a symbol definition. Unix linkers allow this somewhat ++ sloppy practise, but linkers on some other operating systems do ++ not. This option allows you to find potential problems from ++ combining global symbols. Unfortunately, some C libraries use ++ this practise, so you may get some warnings about symbols in the ++ libraries as well as in your programs. ++ ++ There are three kinds of global symbols, illustrated here by C ++ examples: ++ ++ `int i = 1;' ++ A definition, which goes in the initialized data section of ++ the output file. ++ ++ `extern int i;' ++ An undefined reference, which does not allocate space. There ++ must be either a definition or a common symbol for the ++ variable somewhere. ++ ++ `int i;' ++ A common symbol. If there are only (one or more) common ++ symbols for a variable, it goes in the uninitialized data ++ area of the output file. The linker merges multiple common ++ symbols for the same variable into a single symbol. If they ++ are of different sizes, it picks the largest size. The ++ linker turns a common symbol into a declaration, if there is ++ a definition of the same variable. ++ ++ The `--warn-common' option can produce five kinds of warnings. ++ Each warning consists of a pair of lines: the first describes the ++ symbol just encountered, and the second describes the previous ++ symbol encountered with the same name. One or both of the two ++ symbols will be a common symbol. ++ ++ 1. Turning a common symbol into a reference, because there is ++ already a definition for the symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by definition ++ FILE(SECTION): warning: defined here ++ ++ 2. Turning a common symbol into a reference, because a later ++ definition for the symbol is encountered. This is the same ++ as the previous case, except that the symbols are encountered ++ in a different order. ++ FILE(SECTION): warning: definition of `SYMBOL' ++ overriding common ++ FILE(SECTION): warning: common is here ++ ++ 3. Merging a common symbol with a previous same-sized common ++ symbol. ++ FILE(SECTION): warning: multiple common ++ of `SYMBOL' ++ FILE(SECTION): warning: previous common is here ++ ++ 4. Merging a common symbol with a previous larger common symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by larger common ++ FILE(SECTION): warning: larger common is here ++ ++ 5. Merging a common symbol with a previous smaller common ++ symbol. This is the same as the previous case, except that ++ the symbols are encountered in a different order. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overriding smaller common ++ FILE(SECTION): warning: smaller common is here ++ ++`--warn-constructors' ++ Warn if any global constructors are used. This is only useful for ++ a few object file formats. For formats like COFF or ELF, the ++ linker can not detect the use of global constructors. ++ ++`--warn-multiple-gp' ++ Warn if multiple global pointer values are required in the output ++ file. This is only meaningful for certain processors, such as the ++ Alpha. Specifically, some processors put large-valued constants ++ in a special section. A special register (the global pointer) ++ points into the middle of this section, so that constants can be ++ loaded efficiently via a base-register relative addressing mode. ++ Since the offset in base-register relative mode is fixed and ++ relatively small (e.g., 16 bits), this limits the maximum size of ++ the constant pool. Thus, in large programs, it is often necessary ++ to use multiple global pointer values in order to be able to ++ address all possible constants. This option causes a warning to ++ be issued whenever this case occurs. ++ ++`--warn-once' ++ Only warn once for each undefined symbol, rather than once per ++ module which refers to it. ++ ++`--warn-section-align' ++ Warn if the address of an output section is changed because of ++ alignment. Typically, the alignment will be set by an input ++ section. The address will only be changed if it not explicitly ++ specified; that is, if the `SECTIONS' command does not specify a ++ start address for the section (*note SECTIONS::). ++ ++`--warn-shared-textrel' ++ Warn if the linker adds a DT_TEXTREL to a shared object. ++ ++`--warn-unresolved-symbols' ++ If the linker is going to report an unresolved symbol (see the ++ option `--unresolved-symbols') it will normally generate an error. ++ This option makes it generate a warning instead. ++ ++`--error-unresolved-symbols' ++ This restores the linker's default behaviour of generating errors ++ when it is reporting unresolved symbols. ++ ++`--whole-archive' ++ For each archive mentioned on the command line after the ++ `--whole-archive' option, include every object file in the archive ++ in the link, rather than searching the archive for the required ++ object files. This is normally used to turn an archive file into ++ a shared library, forcing every object to be included in the ++ resulting shared library. This option may be used more than once. ++ ++ Two notes when using this option from gcc: First, gcc doesn't know ++ about this option, so you have to use `-Wl,-whole-archive'. ++ Second, don't forget to use `-Wl,-no-whole-archive' after your ++ list of archives, because gcc will add its own list of archives to ++ your link and you may not want this flag to affect those as well. ++ ++`--wrap SYMBOL' ++ Use a wrapper function for SYMBOL. Any undefined reference to ++ SYMBOL will be resolved to `__wrap_SYMBOL'. Any undefined ++ reference to `__real_SYMBOL' will be resolved to SYMBOL. ++ ++ This can be used to provide a wrapper for a system function. The ++ wrapper function should be called `__wrap_SYMBOL'. If it wishes ++ to call the system function, it should call `__real_SYMBOL'. ++ ++ Here is a trivial example: ++ ++ void * ++ __wrap_malloc (size_t c) ++ { ++ printf ("malloc called with %zu\n", c); ++ return __real_malloc (c); ++ } ++ ++ If you link other code with this file using `--wrap malloc', then ++ all calls to `malloc' will call the function `__wrap_malloc' ++ instead. The call to `__real_malloc' in `__wrap_malloc' will call ++ the real `malloc' function. ++ ++ You may wish to provide a `__real_malloc' function as well, so that ++ links without the `--wrap' option will succeed. If you do this, ++ you should not put the definition of `__real_malloc' in the same ++ file as `__wrap_malloc'; if you do, the assembler may resolve the ++ call before the linker has a chance to wrap it to `malloc'. ++ ++`--eh-frame-hdr' ++ Request creation of `.eh_frame_hdr' section and ELF ++ `PT_GNU_EH_FRAME' segment header. ++ ++`--enable-new-dtags' ++`--disable-new-dtags' ++ This linker can create the new dynamic tags in ELF. But the older ++ ELF systems may not understand them. If you specify ++ `--enable-new-dtags', the dynamic tags will be created as needed. ++ If you specify `--disable-new-dtags', no new dynamic tags will be ++ created. By default, the new dynamic tags are not created. Note ++ that those options are only available for ELF systems. ++ ++`--hash-size=NUMBER' ++ Set the default size of the linker's hash tables to a prime number ++ close to NUMBER. Increasing this value can reduce the length of ++ time it takes the linker to perform its tasks, at the expense of ++ increasing the linker's memory requirements. Similarly reducing ++ this value can reduce the memory requirements at the expense of ++ speed. ++ ++`--reduce-memory-overheads' ++ This option reduces memory requirements at ld runtime, at the ++ expense of linking speed. This was introduced to select the old ++ O(n^2) algorithm for link map file generation, rather than the new ++ O(n) algorithm which uses about 40% more memory for symbol storage. ++ ++ Another effect of the switch is to set the default hash table size ++ to 1021, which again saves memory at the cost of lengthening the ++ linker's run time. This is not done however if the `--hash-size' ++ switch has been used. ++ ++ The `--reduce-memory-overheads' switch may be also be used to ++ enable other tradeoffs in future versions of the linker. ++ ++ ++2.1.1 Options Specific to i386 PE Targets ++----------------------------------------- ++ ++The i386 PE linker supports the `-shared' option, which causes the ++output to be a dynamically linked library (DLL) instead of a normal ++executable. You should name the output `*.dll' when you use this ++option. In addition, the linker fully supports the standard `*.def' ++files, which may be specified on the linker command line like an object ++file (in fact, it should precede archives it exports symbols from, to ++ensure that they get linked in, just like a normal object file). ++ ++ In addition to the options common to all targets, the i386 PE linker ++support additional command line options that are specific to the i386 ++PE target. Options that take values may be separated from their values ++by either a space or an equals sign. ++ ++`--add-stdcall-alias' ++ If given, symbols with a stdcall suffix (@NN) will be exported ++ as-is and also with the suffix stripped. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--base-file FILE' ++ Use FILE as the name of a file in which to save the base addresses ++ of all the relocations needed for generating DLLs with `dlltool'. ++ [This is an i386 PE specific option] ++ ++`--dll' ++ Create a DLL instead of a regular executable. You may also use ++ `-shared' or specify a `LIBRARY' in a given `.def' file. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--enable-stdcall-fixup' ++`--disable-stdcall-fixup' ++ If the link finds a symbol that it cannot resolve, it will attempt ++ to do "fuzzy linking" by looking for another defined symbol that ++ differs only in the format of the symbol name (cdecl vs stdcall) ++ and will resolve that symbol by linking to the match. For ++ example, the undefined symbol `_foo' might be linked to the ++ function `_foo@12', or the undefined symbol `_bar@16' might be ++ linked to the function `_bar'. When the linker does this, it ++ prints a warning, since it normally should have failed to link, ++ but sometimes import libraries generated from third-party dlls may ++ need this feature to be usable. If you specify ++ `--enable-stdcall-fixup', this feature is fully enabled and ++ warnings are not printed. If you specify ++ `--disable-stdcall-fixup', this feature is disabled and such ++ mismatches are considered to be errors. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--export-all-symbols' ++ If given, all global symbols in the objects used to build a DLL ++ will be exported by the DLL. Note that this is the default if ++ there otherwise wouldn't be any exported symbols. When symbols are ++ explicitly exported via DEF files or implicitly exported via ++ function attributes, the default is to not export anything else ++ unless this option is given. Note that the symbols `DllMain@12', ++ `DllEntryPoint@0', `DllMainCRTStartup@12', and `impure_ptr' will ++ not be automatically exported. Also, symbols imported from other ++ DLLs will not be re-exported, nor will symbols specifying the ++ DLL's internal layout such as those beginning with `_head_' or ++ ending with `_iname'. In addition, no symbols from `libgcc', ++ `libstd++', `libmingw32', or `crtX.o' will be exported. Symbols ++ whose names begin with `__rtti_' or `__builtin_' will not be ++ exported, to help with C++ DLLs. Finally, there is an extensive ++ list of cygwin-private symbols that are not exported (obviously, ++ this applies on when building DLLs for cygwin targets). These ++ cygwin-excludes are: `_cygwin_dll_entry@12', ++ `_cygwin_crt0_common@8', `_cygwin_noncygwin_dll_entry@12', ++ `_fmode', `_impure_ptr', `cygwin_attach_dll', `cygwin_premain0', ++ `cygwin_premain1', `cygwin_premain2', `cygwin_premain3', and ++ `environ'. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--exclude-symbols SYMBOL,SYMBOL,...' ++ Specifies a list of symbols which should not be automatically ++ exported. The symbol names may be delimited by commas or colons. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--file-alignment' ++ Specify the file alignment. Sections in the file will always ++ begin at file offsets which are multiples of this number. This ++ defaults to 512. [This option is specific to the i386 PE targeted ++ port of the linker] ++ ++`--heap RESERVE' ++`--heap RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as heap for this program. The default is 1Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--image-base VALUE' ++ Use VALUE as the base address of your program or dll. This is the ++ lowest memory location that will be used when your program or dll ++ is loaded. To reduce the need to relocate and improve performance ++ of your dlls, each should have a unique base address and not ++ overlap any other dlls. The default is 0x400000 for executables, ++ and 0x10000000 for dlls. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--kill-at' ++ If given, the stdcall suffixes (@NN) will be stripped from symbols ++ before they are exported. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--large-address-aware' ++ If given, the appropriate bit in the "Charateristics" field of the ++ COFF header is set to indicate that this executable supports ++ virtual addresses greater than 2 gigabytes. This should be used ++ in conjuction with the /3GB or /USERVA=VALUE megabytes switch in ++ the "[operating systems]" section of the BOOT.INI. Otherwise, ++ this bit has no effect. [This option is specific to PE targeted ++ ports of the linker] ++ ++`--major-image-version VALUE' ++ Sets the major number of the "image version". Defaults to 1. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--major-os-version VALUE' ++ Sets the major number of the "os version". Defaults to 4. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--major-subsystem-version VALUE' ++ Sets the major number of the "subsystem version". Defaults to 4. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-image-version VALUE' ++ Sets the minor number of the "image version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-os-version VALUE' ++ Sets the minor number of the "os version". Defaults to 0. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--minor-subsystem-version VALUE' ++ Sets the minor number of the "subsystem version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--output-def FILE' ++ The linker will create the file FILE which will contain a DEF file ++ corresponding to the DLL the linker is generating. This DEF file ++ (which should be called `*.def') may be used to create an import ++ library with `dlltool' or may be used as a reference to ++ automatically or implicitly exported symbols. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--out-implib FILE' ++ The linker will create the file FILE which will contain an import ++ lib corresponding to the DLL the linker is generating. This import ++ lib (which should be called `*.dll.a' or `*.a' may be used to link ++ clients against the generated DLL; this behaviour makes it ++ possible to skip a separate `dlltool' import library creation step. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--enable-auto-image-base' ++ Automatically choose the image base for DLLs, unless one is ++ specified using the `--image-base' argument. By using a hash ++ generated from the dllname to create unique image bases for each ++ DLL, in-memory collisions and relocations which can delay program ++ execution are avoided. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-auto-image-base' ++ Do not automatically generate a unique image base. If there is no ++ user-specified image base (`--image-base') then use the platform ++ default. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--dll-search-prefix STRING' ++ When linking dynamically to a dll without an import library, ++ search for `.dll' in preference to ++ `lib.dll'. This behaviour allows easy distinction ++ between DLLs built for the various "subplatforms": native, cygwin, ++ uwin, pw, etc. For instance, cygwin DLLs typically use ++ `--dll-search-prefix=cyg'. [This option is specific to the i386 ++ PE targeted port of the linker] ++ ++`--enable-auto-import' ++ Do sophisticated linking of `_symbol' to `__imp__symbol' for DATA ++ imports from DLLs, and create the necessary thunking symbols when ++ building the import libraries with those DATA exports. Note: Use ++ of the 'auto-import' extension will cause the text section of the ++ image file to be made writable. This does not conform to the ++ PE-COFF format specification published by Microsoft. ++ ++ Using 'auto-import' generally will 'just work' - but sometimes you ++ may see this message: ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ This message occurs when some (sub)expression accesses an address ++ ultimately given by the sum of two constants (Win32 import tables ++ only allow one). Instances where this may occur include accesses ++ to member fields of struct variables imported from a DLL, as well ++ as using a constant index into an array variable imported from a ++ DLL. Any multiword variable (arrays, structs, long long, etc) may ++ trigger this error condition. However, regardless of the exact ++ data type of the offending exported variable, ld will always ++ detect it, issue the warning, and exit. ++ ++ There are several ways to address this difficulty, regardless of ++ the data type of the exported variable: ++ ++ One way is to use -enable-runtime-pseudo-reloc switch. This leaves ++ the task of adjusting references in your client code for runtime ++ environment, so this method works only when runtime environment ++ supports this feature. ++ ++ A second solution is to force one of the 'constants' to be a ++ variable - that is, unknown and un-optimizable at compile time. ++ For arrays, there are two possibilities: a) make the indexee (the ++ array's address) a variable, or b) make the 'constant' index a ++ variable. Thus: ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile type *t=extern_array; t[1] } ++ ++ or ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile int t=1; extern_array[t] } ++ ++ For structs (and most other multiword data types) the only option ++ is to make the struct itself (or the long long, or the ...) ++ variable: ++ ++ extern struct s extern_struct; ++ extern_struct.field --> ++ { volatile struct s *t=&extern_struct; t->field } ++ ++ or ++ ++ extern long long extern_ll; ++ extern_ll --> ++ { volatile long long * local_ll=&extern_ll; *local_ll } ++ ++ A third method of dealing with this difficulty is to abandon ++ 'auto-import' for the offending symbol and mark it with ++ `__declspec(dllimport)'. However, in practise that requires using ++ compile-time #defines to indicate whether you are building a DLL, ++ building client code that will link to the DLL, or merely ++ building/linking to a static library. In making the choice ++ between the various methods of resolving the 'direct address with ++ constant offset' problem, you should consider typical real-world ++ usage: ++ ++ Original: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ Solution 1: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ /* This workaround is for win32 and cygwin; do not "optimize" */ ++ volatile int *parr = arr; ++ printf("%d\n",parr[1]); ++ } ++ ++ Solution 2: ++ --foo.h ++ /* Note: auto-export is assumed (no __declspec(dllexport)) */ ++ #if (defined(_WIN32) || defined(__CYGWIN__)) && \ ++ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) ++ #define FOO_IMPORT __declspec(dllimport) ++ #else ++ #define FOO_IMPORT ++ #endif ++ extern FOO_IMPORT int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ A fourth way to avoid this problem is to re-code your library to ++ use a functional interface rather than a data interface for the ++ offending variables (e.g. set_foo() and get_foo() accessor ++ functions). [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--disable-auto-import' ++ Do not attempt to do sophisticated linking of `_symbol' to ++ `__imp__symbol' for DATA imports from DLLs. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--enable-runtime-pseudo-reloc' ++ If your code contains expressions described in -enable-auto-import ++ section, that is, DATA imports from DLL with non-zero offset, this ++ switch will create a vector of 'runtime pseudo relocations' which ++ can be used by runtime environment to adjust references to such ++ data in your client code. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-runtime-pseudo-reloc' ++ Do not create pseudo relocations for non-zero offset DATA imports ++ from DLLs. This is the default. [This option is specific to the ++ i386 PE targeted port of the linker] ++ ++`--enable-extra-pe-debug' ++ Show additional debug info related to auto-import symbol thunking. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--section-alignment' ++ Sets the section alignment. Sections in memory will always begin ++ at addresses which are a multiple of this number. Defaults to ++ 0x1000. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--stack RESERVE' ++`--stack RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as stack for this program. The default is 2Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--subsystem WHICH' ++`--subsystem WHICH:MAJOR' ++`--subsystem WHICH:MAJOR.MINOR' ++ Specifies the subsystem under which your program will execute. The ++ legal values for WHICH are `native', `windows', `console', ++ `posix', and `xbox'. You may optionally set the subsystem version ++ also. Numeric values are also accepted for WHICH. [This option ++ is specific to the i386 PE targeted port of the linker] ++ ++ ++ ++File: ld.info, Node: Environment, Prev: Options, Up: Invocation ++ ++2.2 Environment Variables ++========================= ++ ++You can change the behaviour of `ld' with the environment variables ++`GNUTARGET', `LDEMULATION' and `COLLECT_NO_DEMANGLE'. ++ ++ `GNUTARGET' determines the input-file object format if you don't use ++`-b' (or its synonym `--format'). Its value should be one of the BFD ++names for an input format (*note BFD::). If there is no `GNUTARGET' in ++the environment, `ld' uses the natural format of the target. If ++`GNUTARGET' is set to `default' then BFD attempts to discover the input ++format by examining binary input files; this method often succeeds, but ++there are potential ambiguities, since there is no method of ensuring ++that the magic number used to specify object-file formats is unique. ++However, the configuration procedure for BFD on each system places the ++conventional format for that system first in the search-list, so ++ambiguities are resolved in favor of convention. ++ ++ `LDEMULATION' determines the default emulation if you don't use the ++`-m' option. The emulation can affect various aspects of linker ++behaviour, particularly the default linker script. You can list the ++available emulations with the `--verbose' or `-V' options. If the `-m' ++option is not used, and the `LDEMULATION' environment variable is not ++defined, the default emulation depends upon how the linker was ++configured. ++ ++ Normally, the linker will default to demangling symbols. However, if ++`COLLECT_NO_DEMANGLE' is set in the environment, then it will default ++to not demangling symbols. This environment variable is used in a ++similar fashion by the `gcc' linker wrapper program. The default may ++be overridden by the `--demangle' and `--no-demangle' options. ++ ++ ++File: ld.info, Node: Scripts, Next: Machine Dependent, Prev: Invocation, Up: Top ++ ++3 Linker Scripts ++**************** ++ ++Every link is controlled by a "linker script". This script is written ++in the linker command language. ++ ++ The main purpose of the linker script is to describe how the ++sections in the input files should be mapped into the output file, and ++to control the memory layout of the output file. Most linker scripts ++do nothing more than this. However, when necessary, the linker script ++can also direct the linker to perform many other operations, using the ++commands described below. ++ ++ The linker always uses a linker script. If you do not supply one ++yourself, the linker will use a default script that is compiled into the ++linker executable. You can use the `--verbose' command line option to ++display the default linker script. Certain command line options, such ++as `-r' or `-N', will affect the default linker script. ++ ++ You may supply your own linker script by using the `-T' command line ++option. When you do this, your linker script will replace the default ++linker script. ++ ++ You may also use linker scripts implicitly by naming them as input ++files to the linker, as though they were files to be linked. *Note ++Implicit Linker Scripts::. ++ ++* Menu: ++ ++* Basic Script Concepts:: Basic Linker Script Concepts ++* Script Format:: Linker Script Format ++* Simple Example:: Simple Linker Script Example ++* Simple Commands:: Simple Linker Script Commands ++* Assignments:: Assigning Values to Symbols ++* SECTIONS:: SECTIONS Command ++* MEMORY:: MEMORY Command ++* PHDRS:: PHDRS Command ++* VERSION:: VERSION Command ++* Expressions:: Expressions in Linker Scripts ++* Implicit Linker Scripts:: Implicit Linker Scripts ++ ++ ++File: ld.info, Node: Basic Script Concepts, Next: Script Format, Up: Scripts ++ ++3.1 Basic Linker Script Concepts ++================================ ++ ++We need to define some basic concepts and vocabulary in order to ++describe the linker script language. ++ ++ The linker combines input files into a single output file. The ++output file and each input file are in a special data format known as an ++"object file format". Each file is called an "object file". The ++output file is often called an "executable", but for our purposes we ++will also call it an object file. Each object file has, among other ++things, a list of "sections". We sometimes refer to a section in an ++input file as an "input section"; similarly, a section in the output ++file is an "output section". ++ ++ Each section in an object file has a name and a size. Most sections ++also have an associated block of data, known as the "section contents". ++A section may be marked as "loadable", which mean that the contents ++should be loaded into memory when the output file is run. A section ++with no contents may be "allocatable", which means that an area in ++memory should be set aside, but nothing in particular should be loaded ++there (in some cases this memory must be zeroed out). A section which ++is neither loadable nor allocatable typically contains some sort of ++debugging information. ++ ++ Every loadable or allocatable output section has two addresses. The ++first is the "VMA", or virtual memory address. This is the address the ++section will have when the output file is run. The second is the ++"LMA", or load memory address. This is the address at which the ++section will be loaded. In most cases the two addresses will be the ++same. An example of when they might be different is when a data section ++is loaded into ROM, and then copied into RAM when the program starts up ++(this technique is often used to initialize global variables in a ROM ++based system). In this case the ROM address would be the LMA, and the ++RAM address would be the VMA. ++ ++ You can see the sections in an object file by using the `objdump' ++program with the `-h' option. ++ ++ Every object file also has a list of "symbols", known as the "symbol ++table". A symbol may be defined or undefined. Each symbol has a name, ++and each defined symbol has an address, among other information. If ++you compile a C or C++ program into an object file, you will get a ++defined symbol for every defined function and global or static ++variable. Every undefined function or global variable which is ++referenced in the input file will become an undefined symbol. ++ ++ You can see the symbols in an object file by using the `nm' program, ++or by using the `objdump' program with the `-t' option. ++ ++ ++File: ld.info, Node: Script Format, Next: Simple Example, Prev: Basic Script Concepts, Up: Scripts ++ ++3.2 Linker Script Format ++======================== ++ ++Linker scripts are text files. ++ ++ You write a linker script as a series of commands. Each command is ++either a keyword, possibly followed by arguments, or an assignment to a ++symbol. You may separate commands using semicolons. Whitespace is ++generally ignored. ++ ++ Strings such as file or format names can normally be entered ++directly. If the file name contains a character such as a comma which ++would otherwise serve to separate file names, you may put the file name ++in double quotes. There is no way to use a double quote character in a ++file name. ++ ++ You may include comments in linker scripts just as in C, delimited by ++`/*' and `*/'. As in C, comments are syntactically equivalent to ++whitespace. ++ ++ ++File: ld.info, Node: Simple Example, Next: Simple Commands, Prev: Script Format, Up: Scripts ++ ++3.3 Simple Linker Script Example ++================================ ++ ++Many linker scripts are fairly simple. ++ ++ The simplest possible linker script has just one command: ++`SECTIONS'. You use the `SECTIONS' command to describe the memory ++layout of the output file. ++ ++ The `SECTIONS' command is a powerful command. Here we will describe ++a simple use of it. Let's assume your program consists only of code, ++initialized data, and uninitialized data. These will be in the ++`.text', `.data', and `.bss' sections, respectively. Let's assume ++further that these are the only sections which appear in your input ++files. ++ ++ For this example, let's say that the code should be loaded at address ++0x10000, and that the data should start at address 0x8000000. Here is a ++linker script which will do that: ++ SECTIONS ++ { ++ . = 0x10000; ++ .text : { *(.text) } ++ . = 0x8000000; ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ You write the `SECTIONS' command as the keyword `SECTIONS', followed ++by a series of symbol assignments and output section descriptions ++enclosed in curly braces. ++ ++ The first line inside the `SECTIONS' command of the above example ++sets the value of the special symbol `.', which is the location ++counter. If you do not specify the address of an output section in some ++other way (other ways are described later), the address is set from the ++current value of the location counter. The location counter is then ++incremented by the size of the output section. At the start of the ++`SECTIONS' command, the location counter has the value `0'. ++ ++ The second line defines an output section, `.text'. The colon is ++required syntax which may be ignored for now. Within the curly braces ++after the output section name, you list the names of the input sections ++which should be placed into this output section. The `*' is a wildcard ++which matches any file name. The expression `*(.text)' means all ++`.text' input sections in all input files. ++ ++ Since the location counter is `0x10000' when the output section ++`.text' is defined, the linker will set the address of the `.text' ++section in the output file to be `0x10000'. ++ ++ The remaining lines define the `.data' and `.bss' sections in the ++output file. The linker will place the `.data' output section at ++address `0x8000000'. After the linker places the `.data' output ++section, the value of the location counter will be `0x8000000' plus the ++size of the `.data' output section. The effect is that the linker will ++place the `.bss' output section immediately after the `.data' output ++section in memory. ++ ++ The linker will ensure that each output section has the required ++alignment, by increasing the location counter if necessary. In this ++example, the specified addresses for the `.text' and `.data' sections ++will probably satisfy any alignment constraints, but the linker may ++have to create a small gap between the `.data' and `.bss' sections. ++ ++ That's it! That's a simple and complete linker script. ++ ++ ++File: ld.info, Node: Simple Commands, Next: Assignments, Prev: Simple Example, Up: Scripts ++ ++3.4 Simple Linker Script Commands ++================================= ++ ++In this section we describe the simple linker script commands. ++ ++* Menu: ++ ++* Entry Point:: Setting the entry point ++* File Commands:: Commands dealing with files ++ ++* Format Commands:: Commands dealing with object file formats ++ ++* Miscellaneous Commands:: Other linker script commands ++ ++ ++File: ld.info, Node: Entry Point, Next: File Commands, Up: Simple Commands ++ ++3.4.1 Setting the Entry Point ++----------------------------- ++ ++The first instruction to execute in a program is called the "entry ++point". You can use the `ENTRY' linker script command to set the entry ++point. The argument is a symbol name: ++ ENTRY(SYMBOL) ++ ++ There are several ways to set the entry point. The linker will set ++the entry point by trying each of the following methods in order, and ++stopping when one of them succeeds: ++ * the `-e' ENTRY command-line option; ++ ++ * the `ENTRY(SYMBOL)' command in a linker script; ++ ++ * the value of the symbol `start', if defined; ++ ++ * the address of the first byte of the `.text' section, if present; ++ ++ * The address `0'. ++ ++ ++File: ld.info, Node: File Commands, Next: Format Commands, Prev: Entry Point, Up: Simple Commands ++ ++3.4.2 Commands Dealing with Files ++--------------------------------- ++ ++Several linker script commands deal with files. ++ ++`INCLUDE FILENAME' ++ Include the linker script FILENAME at this point. The file will ++ be searched for in the current directory, and in any directory ++ specified with the `-L' option. You can nest calls to `INCLUDE' ++ up to 10 levels deep. ++ ++`INPUT(FILE, FILE, ...)' ++`INPUT(FILE FILE ...)' ++ The `INPUT' command directs the linker to include the named files ++ in the link, as though they were named on the command line. ++ ++ For example, if you always want to include `subr.o' any time you do ++ a link, but you can't be bothered to put it on every link command ++ line, then you can put `INPUT (subr.o)' in your linker script. ++ ++ In fact, if you like, you can list all of your input files in the ++ linker script, and then invoke the linker with nothing but a `-T' ++ option. ++ ++ In case a "sysroot prefix" is configured, and the filename starts ++ with the `/' character, and the script being processed was located ++ inside the "sysroot prefix", the filename will be looked for in ++ the "sysroot prefix". Otherwise, the linker will try to open the ++ file in the current directory. If it is not found, the linker ++ will search through the archive library search path. See the ++ description of `-L' in *Note Command Line Options: Options. ++ ++ If you use `INPUT (-lFILE)', `ld' will transform the name to ++ `libFILE.a', as with the command line argument `-l'. ++ ++ When you use the `INPUT' command in an implicit linker script, the ++ files will be included in the link at the point at which the linker ++ script file is included. This can affect archive searching. ++ ++`GROUP(FILE, FILE, ...)' ++`GROUP(FILE FILE ...)' ++ The `GROUP' command is like `INPUT', except that the named files ++ should all be archives, and they are searched repeatedly until no ++ new undefined references are created. See the description of `-(' ++ in *Note Command Line Options: Options. ++ ++`AS_NEEDED(FILE, FILE, ...)' ++`AS_NEEDED(FILE FILE ...)' ++ This construct can appear only inside of the `INPUT' or `GROUP' ++ commands, among other filenames. The files listed will be handled ++ as if they appear directly in the `INPUT' or `GROUP' commands, ++ with the exception of ELF shared libraries, that will be added only ++ when they are actually needed. This construct essentially enables ++ `--as-needed' option for all the files listed inside of it and ++ restores previous `--as-needed' resp. `--no-as-needed' setting ++ afterwards. ++ ++`OUTPUT(FILENAME)' ++ The `OUTPUT' command names the output file. Using ++ `OUTPUT(FILENAME)' in the linker script is exactly like using `-o ++ FILENAME' on the command line (*note Command Line Options: ++ Options.). If both are used, the command line option takes ++ precedence. ++ ++ You can use the `OUTPUT' command to define a default name for the ++ output file other than the usual default of `a.out'. ++ ++`SEARCH_DIR(PATH)' ++ The `SEARCH_DIR' command adds PATH to the list of paths where `ld' ++ looks for archive libraries. Using `SEARCH_DIR(PATH)' is exactly ++ like using `-L PATH' on the command line (*note Command Line ++ Options: Options.). If both are used, then the linker will search ++ both paths. Paths specified using the command line option are ++ searched first. ++ ++`STARTUP(FILENAME)' ++ The `STARTUP' command is just like the `INPUT' command, except ++ that FILENAME will become the first input file to be linked, as ++ though it were specified first on the command line. This may be ++ useful when using a system in which the entry point is always the ++ start of the first file. ++ ++ ++File: ld.info, Node: Format Commands, Next: Miscellaneous Commands, Prev: File Commands, Up: Simple Commands ++ ++3.4.3 Commands Dealing with Object File Formats ++----------------------------------------------- ++ ++A couple of linker script commands deal with object file formats. ++ ++`OUTPUT_FORMAT(BFDNAME)' ++`OUTPUT_FORMAT(DEFAULT, BIG, LITTLE)' ++ The `OUTPUT_FORMAT' command names the BFD format to use for the ++ output file (*note BFD::). Using `OUTPUT_FORMAT(BFDNAME)' is ++ exactly like using `--oformat BFDNAME' on the command line (*note ++ Command Line Options: Options.). If both are used, the command ++ line option takes precedence. ++ ++ You can use `OUTPUT_FORMAT' with three arguments to use different ++ formats based on the `-EB' and `-EL' command line options. This ++ permits the linker script to set the output format based on the ++ desired endianness. ++ ++ If neither `-EB' nor `-EL' are used, then the output format will ++ be the first argument, DEFAULT. If `-EB' is used, the output ++ format will be the second argument, BIG. If `-EL' is used, the ++ output format will be the third argument, LITTLE. ++ ++ For example, the default linker script for the MIPS ELF target ++ uses this command: ++ OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips) ++ This says that the default format for the output file is ++ `elf32-bigmips', but if the user uses the `-EL' command line ++ option, the output file will be created in the `elf32-littlemips' ++ format. ++ ++`TARGET(BFDNAME)' ++ The `TARGET' command names the BFD format to use when reading input ++ files. It affects subsequent `INPUT' and `GROUP' commands. This ++ command is like using `-b BFDNAME' on the command line (*note ++ Command Line Options: Options.). If the `TARGET' command is used ++ but `OUTPUT_FORMAT' is not, then the last `TARGET' command is also ++ used to set the format for the output file. *Note BFD::. ++ ++ ++File: ld.info, Node: Miscellaneous Commands, Prev: Format Commands, Up: Simple Commands ++ ++3.4.4 Other Linker Script Commands ++---------------------------------- ++ ++There are a few other linker scripts commands. ++ ++`ASSERT(EXP, MESSAGE)' ++ Ensure that EXP is non-zero. If it is zero, then exit the linker ++ with an error code, and print MESSAGE. ++ ++`EXTERN(SYMBOL SYMBOL ...)' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. You may list several SYMBOLs for ++ each `EXTERN', and you may use `EXTERN' multiple times. This ++ command has the same effect as the `-u' command-line option. ++ ++`FORCE_COMMON_ALLOCATION' ++ This command has the same effect as the `-d' command-line option: ++ to make `ld' assign space to common symbols even if a relocatable ++ output file is specified (`-r'). ++ ++`INHIBIT_COMMON_ALLOCATION' ++ This command has the same effect as the `--no-define-common' ++ command-line option: to make `ld' omit the assignment of addresses ++ to common symbols even for a non-relocatable output file. ++ ++`NOCROSSREFS(SECTION SECTION ...)' ++ This command may be used to tell `ld' to issue an error about any ++ references among certain output sections. ++ ++ In certain types of programs, particularly on embedded systems when ++ using overlays, when one section is loaded into memory, another ++ section will not be. Any direct references between the two ++ sections would be errors. For example, it would be an error if ++ code in one section called a function defined in the other section. ++ ++ The `NOCROSSREFS' command takes a list of output section names. If ++ `ld' detects any cross references between the sections, it reports ++ an error and returns a non-zero exit status. Note that the ++ `NOCROSSREFS' command uses output section names, not input section ++ names. ++ ++`OUTPUT_ARCH(BFDARCH)' ++ Specify a particular output machine architecture. The argument is ++ one of the names used by the BFD library (*note BFD::). You can ++ see the architecture of an object file by using the `objdump' ++ program with the `-f' option. ++ ++ ++File: ld.info, Node: Assignments, Next: SECTIONS, Prev: Simple Commands, Up: Scripts ++ ++3.5 Assigning Values to Symbols ++=============================== ++ ++You may assign a value to a symbol in a linker script. This will define ++the symbol and place it into the symbol table with a global scope. ++ ++* Menu: ++ ++* Simple Assignments:: Simple Assignments ++* PROVIDE:: PROVIDE ++* PROVIDE_HIDDEN:: PROVIDE_HIDDEN ++* Source Code Reference:: How to use a linker script defined symbol in source code ++ ++ ++File: ld.info, Node: Simple Assignments, Next: PROVIDE, Up: Assignments ++ ++3.5.1 Simple Assignments ++------------------------ ++ ++You may assign to a symbol using any of the C assignment operators: ++ ++`SYMBOL = EXPRESSION ;' ++`SYMBOL += EXPRESSION ;' ++`SYMBOL -= EXPRESSION ;' ++`SYMBOL *= EXPRESSION ;' ++`SYMBOL /= EXPRESSION ;' ++`SYMBOL <<= EXPRESSION ;' ++`SYMBOL >>= EXPRESSION ;' ++`SYMBOL &= EXPRESSION ;' ++`SYMBOL |= EXPRESSION ;' ++ ++ The first case will define SYMBOL to the value of EXPRESSION. In ++the other cases, SYMBOL must already be defined, and the value will be ++adjusted accordingly. ++ ++ The special symbol name `.' indicates the location counter. You may ++only use this within a `SECTIONS' command. *Note Location Counter::. ++ ++ The semicolon after EXPRESSION is required. ++ ++ Expressions are defined below; see *Note Expressions::. ++ ++ You may write symbol assignments as commands in their own right, or ++as statements within a `SECTIONS' command, or as part of an output ++section description in a `SECTIONS' command. ++ ++ The section of the symbol will be set from the section of the ++expression; for more information, see *Note Expression Section::. ++ ++ Here is an example showing the three different places that symbol ++assignments may be used: ++ ++ floating_point = 0; ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ } ++ _bdata = (. + 3) & ~ 3; ++ .data : { *(.data) } ++ } ++ In this example, the symbol `floating_point' will be defined as ++zero. The symbol `_etext' will be defined as the address following the ++last `.text' input section. The symbol `_bdata' will be defined as the ++address following the `.text' output section aligned upward to a 4 byte ++boundary. ++ ++ ++File: ld.info, Node: PROVIDE, Next: PROVIDE_HIDDEN, Prev: Simple Assignments, Up: Assignments ++ ++3.5.2 PROVIDE ++------------- ++ ++In some cases, it is desirable for a linker script to define a symbol ++only if it is referenced and is not defined by any object included in ++the link. For example, traditional linkers defined the symbol `etext'. ++However, ANSI C requires that the user be able to use `etext' as a ++function name without encountering an error. The `PROVIDE' keyword may ++be used to define a symbol, such as `etext', only if it is referenced ++but not defined. The syntax is `PROVIDE(SYMBOL = EXPRESSION)'. ++ ++ Here is an example of using `PROVIDE' to define `etext': ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ PROVIDE(etext = .); ++ } ++ } ++ ++ In this example, if the program defines `_etext' (with a leading ++underscore), the linker will give a multiple definition error. If, on ++the other hand, the program defines `etext' (with no leading ++underscore), the linker will silently use the definition in the program. ++If the program references `etext' but does not define it, the linker ++will use the definition in the linker script. ++ ++ ++File: ld.info, Node: PROVIDE_HIDDEN, Next: Source Code Reference, Prev: PROVIDE, Up: Assignments ++ ++3.5.3 PROVIDE_HIDDEN ++-------------------- ++ ++Similar to `PROVIDE'. For ELF targeted ports, the symbol will be ++hidden and won't be exported. ++ ++ ++File: ld.info, Node: Source Code Reference, Prev: PROVIDE_HIDDEN, Up: Assignments ++ ++3.5.4 Source Code Reference ++--------------------------- ++ ++Accessing a linker script defined variable from source code is not ++intuitive. In particular a linker script symbol is not equivalent to a ++variable declaration in a high level language, it is instead a symbol ++that does not have a value. ++ ++ Before going further, it is important to note that compilers often ++transform names in the source code into different names when they are ++stored in the symbol table. For example, Fortran compilers commonly ++prepend or append an underscore, and C++ performs extensive `name ++mangling'. Therefore there might be a discrepancy between the name of ++a variable as it is used in source code and the name of the same ++variable as it is defined in a linker script. For example in C a ++linker script variable might be referred to as: ++ ++ extern int foo; ++ ++ But in the linker script it might be defined as: ++ ++ _foo = 1000; ++ ++ In the remaining examples however it is assumed that no name ++transformation has taken place. ++ ++ When a symbol is declared in a high level language such as C, two ++things happen. The first is that the compiler reserves enough space in ++the program's memory to hold the _value_ of the symbol. The second is ++that the compiler creates an entry in the program's symbol table which ++holds the symbol's _address_. ie the symbol table contains the address ++of the block of memory holding the symbol's value. So for example the ++following C declaration, at file scope: ++ ++ int foo = 1000; ++ ++ creates a entry called `foo' in the symbol table. This entry holds ++the address of an `int' sized block of memory where the number 1000 is ++initially stored. ++ ++ When a program references a symbol the compiler generates code that ++first accesses the symbol table to find the address of the symbol's ++memory block and then code to read the value from that memory block. ++So: ++ ++ foo = 1; ++ ++ looks up the symbol `foo' in the symbol table, gets the address ++associated with this symbol and then writes the value 1 into that ++address. Whereas: ++ ++ int * a = & foo; ++ ++ looks up the symbol `foo' in the symbol table, gets it address and ++then copies this address into the block of memory associated with the ++variable `a'. ++ ++ Linker scripts symbol declarations, by contrast, create an entry in ++the symbol table but do not assign any memory to them. Thus they are ++an address without a value. So for example the linker script ++definition: ++ ++ foo = 1000; ++ ++ creates an entry in the symbol table called `foo' which holds the ++address of memory location 1000, but nothing special is stored at ++address 1000. This means that you cannot access the _value_ of a ++linker script defined symbol - it has no value - all you can do is ++access the _address_ of a linker script defined symbol. ++ ++ Hence when you are using a linker script defined symbol in source ++code you should always take the address of the symbol, and never ++attempt to use its value. For example suppose you want to copy the ++contents of a section of memory called .ROM into a section called ++.FLASH and the linker script contains these declarations: ++ ++ start_of_ROM = .ROM; ++ end_of_ROM = .ROM + sizeof (.ROM) - 1; ++ start_of_FLASH = .FLASH; ++ ++ Then the C source code to perform the copy would be: ++ ++ extern char start_of_ROM, end_of_ROM, start_of_FLASH; ++ ++ memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM); ++ ++ Note the use of the `&' operators. These are correct. ++ ++ ++File: ld.info, Node: SECTIONS, Next: MEMORY, Prev: Assignments, Up: Scripts ++ ++3.6 SECTIONS Command ++==================== ++ ++The `SECTIONS' command tells the linker how to map input sections into ++output sections, and how to place the output sections in memory. ++ ++ The format of the `SECTIONS' command is: ++ SECTIONS ++ { ++ SECTIONS-COMMAND ++ SECTIONS-COMMAND ++ ... ++ } ++ ++ Each SECTIONS-COMMAND may of be one of the following: ++ ++ * an `ENTRY' command (*note Entry command: Entry Point.) ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an output section description ++ ++ * an overlay description ++ ++ The `ENTRY' command and symbol assignments are permitted inside the ++`SECTIONS' command for convenience in using the location counter in ++those commands. This can also make the linker script easier to ++understand because you can use those commands at meaningful points in ++the layout of the output file. ++ ++ Output section descriptions and overlay descriptions are described ++below. ++ ++ If you do not use a `SECTIONS' command in your linker script, the ++linker will place each input section into an identically named output ++section in the order that the sections are first encountered in the ++input files. If all input sections are present in the first file, for ++example, the order of sections in the output file will match the order ++in the first input file. The first section will be at address zero. ++ ++* Menu: ++ ++* Output Section Description:: Output section description ++* Output Section Name:: Output section name ++* Output Section Address:: Output section address ++* Input Section:: Input section description ++* Output Section Data:: Output section data ++* Output Section Keywords:: Output section keywords ++* Output Section Discarding:: Output section discarding ++* Output Section Attributes:: Output section attributes ++* Overlay Description:: Overlay description ++ ++ ++File: ld.info, Node: Output Section Description, Next: Output Section Name, Up: SECTIONS ++ ++3.6.1 Output Section Description ++-------------------------------- ++ ++The full description of an output section looks like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++ ++ Most output sections do not use most of the optional section ++attributes. ++ ++ The whitespace around SECTION is required, so that the section name ++is unambiguous. The colon and the curly braces are also required. The ++line breaks and other white space are optional. ++ ++ Each OUTPUT-SECTION-COMMAND may be one of the following: ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an input section description (*note Input Section::) ++ ++ * data values to include directly (*note Output Section Data::) ++ ++ * a special output section keyword (*note Output Section Keywords::) ++ ++ ++File: ld.info, Node: Output Section Name, Next: Output Section Address, Prev: Output Section Description, Up: SECTIONS ++ ++3.6.2 Output Section Name ++------------------------- ++ ++The name of the output section is SECTION. SECTION must meet the ++constraints of your output format. In formats which only support a ++limited number of sections, such as `a.out', the name must be one of ++the names supported by the format (`a.out', for example, allows only ++`.text', `.data' or `.bss'). If the output format supports any number ++of sections, but with numbers and not names (as is the case for Oasys), ++the name should be supplied as a quoted numeric string. A section name ++may consist of any sequence of characters, but a name which contains ++any unusual characters such as commas must be quoted. ++ ++ The output section name `/DISCARD/' is special; *Note Output Section ++Discarding::. ++ ++ ++File: ld.info, Node: Output Section Address, Next: Input Section, Prev: Output Section Name, Up: SECTIONS ++ ++3.6.3 Output Section Address ++---------------------------- ++ ++The ADDRESS is an expression for the VMA (the virtual memory address) ++of the output section. If you do not provide ADDRESS, the linker will ++set it based on REGION if present, or otherwise based on the current ++value of the location counter. ++ ++ If you provide ADDRESS, the address of the output section will be ++set to precisely that. If you provide neither ADDRESS nor REGION, then ++the address of the output section will be set to the current value of ++the location counter aligned to the alignment requirements of the ++output section. The alignment requirement of the output section is the ++strictest alignment of any input section contained within the output ++section. ++ ++ For example, ++ .text . : { *(.text) } ++ and ++ .text : { *(.text) } ++ are subtly different. The first will set the address of the `.text' ++output section to the current value of the location counter. The ++second will set it to the current value of the location counter aligned ++to the strictest alignment of a `.text' input section. ++ ++ The ADDRESS may be an arbitrary expression; *Note Expressions::. ++For example, if you want to align the section on a 0x10 byte boundary, ++so that the lowest four bits of the section address are zero, you could ++do something like this: ++ .text ALIGN(0x10) : { *(.text) } ++ This works because `ALIGN' returns the current location counter ++aligned upward to the specified value. ++ ++ Specifying ADDRESS for a section will change the value of the ++location counter. ++ ++ ++File: ld.info, Node: Input Section, Next: Output Section Data, Prev: Output Section Address, Up: SECTIONS ++ ++3.6.4 Input Section Description ++------------------------------- ++ ++The most common output section command is an input section description. ++ ++ The input section description is the most basic linker script ++operation. You use output sections to tell the linker how to lay out ++your program in memory. You use input section descriptions to tell the ++linker how to map the input files into your memory layout. ++ ++* Menu: ++ ++* Input Section Basics:: Input section basics ++* Input Section Wildcards:: Input section wildcard patterns ++* Input Section Common:: Input section for common symbols ++* Input Section Keep:: Input section and garbage collection ++* Input Section Example:: Input section example ++ ++ ++File: ld.info, Node: Input Section Basics, Next: Input Section Wildcards, Up: Input Section ++ ++3.6.4.1 Input Section Basics ++............................ ++ ++An input section description consists of a file name optionally followed ++by a list of section names in parentheses. ++ ++ The file name and the section name may be wildcard patterns, which we ++describe further below (*note Input Section Wildcards::). ++ ++ The most common input section description is to include all input ++sections with a particular name in the output section. For example, to ++include all input `.text' sections, you would write: ++ *(.text) ++ Here the `*' is a wildcard which matches any file name. To exclude ++a list of files from matching the file name wildcard, EXCLUDE_FILE may ++be used to match all files except the ones specified in the ++EXCLUDE_FILE list. For example: ++ (*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)) ++ will cause all .ctors sections from all files except `crtend.o' and ++`otherfile.o' to be included. ++ ++ There are two ways to include more than one section: ++ *(.text .rdata) ++ *(.text) *(.rdata) ++ The difference between these is the order in which the `.text' and ++`.rdata' input sections will appear in the output section. In the ++first example, they will be intermingled, appearing in the same order as ++they are found in the linker input. In the second example, all `.text' ++input sections will appear first, followed by all `.rdata' input ++sections. ++ ++ You can specify a file name to include sections from a particular ++file. You would do this if one or more of your files contain special ++data that needs to be at a particular location in memory. For example: ++ data.o(.data) ++ ++ If you use a file name without a list of sections, then all sections ++in the input file will be included in the output section. This is not ++commonly done, but it may by useful on occasion. For example: ++ data.o ++ ++ When you use a file name which does not contain any wild card ++characters, the linker will first see if you also specified the file ++name on the linker command line or in an `INPUT' command. If you did ++not, the linker will attempt to open the file as an input file, as ++though it appeared on the command line. Note that this differs from an ++`INPUT' command, because the linker will not search for the file in the ++archive search path. ++ ++ ++File: ld.info, Node: Input Section Wildcards, Next: Input Section Common, Prev: Input Section Basics, Up: Input Section ++ ++3.6.4.2 Input Section Wildcard Patterns ++....................................... ++ ++In an input section description, either the file name or the section ++name or both may be wildcard patterns. ++ ++ The file name of `*' seen in many examples is a simple wildcard ++pattern for the file name. ++ ++ The wildcard patterns are like those used by the Unix shell. ++ ++`*' ++ matches any number of characters ++ ++`?' ++ matches any single character ++ ++`[CHARS]' ++ matches a single instance of any of the CHARS; the `-' character ++ may be used to specify a range of characters, as in `[a-z]' to ++ match any lower case letter ++ ++`\' ++ quotes the following character ++ ++ When a file name is matched with a wildcard, the wildcard characters ++will not match a `/' character (used to separate directory names on ++Unix). A pattern consisting of a single `*' character is an exception; ++it will always match any file name, whether it contains a `/' or not. ++In a section name, the wildcard characters will match a `/' character. ++ ++ File name wildcard patterns only match files which are explicitly ++specified on the command line or in an `INPUT' command. The linker ++does not search directories to expand wildcards. ++ ++ If a file name matches more than one wildcard pattern, or if a file ++name appears explicitly and is also matched by a wildcard pattern, the ++linker will use the first match in the linker script. For example, this ++sequence of input section descriptions is probably in error, because the ++`data.o' rule will not be used: ++ .data : { *(.data) } ++ .data1 : { data.o(.data) } ++ ++ Normally, the linker will place files and sections matched by ++wildcards in the order in which they are seen during the link. You can ++change this by using the `SORT_BY_NAME' keyword, which appears before a ++wildcard pattern in parentheses (e.g., `SORT_BY_NAME(.text*)'). When ++the `SORT_BY_NAME' keyword is used, the linker will sort the files or ++sections into ascending order by name before placing them in the output ++file. ++ ++ `SORT_BY_ALIGNMENT' is very similar to `SORT_BY_NAME'. The ++difference is `SORT_BY_ALIGNMENT' will sort sections into ascending ++order by alignment before placing them in the output file. ++ ++ `SORT' is an alias for `SORT_BY_NAME'. ++ ++ When there are nested section sorting commands in linker script, ++there can be at most 1 level of nesting for section sorting commands. ++ ++ 1. `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' (wildcard section pattern)). ++ It will sort the input sections by name first, then by alignment ++ if 2 sections have the same name. ++ ++ 2. `SORT_BY_ALIGNMENT' (`SORT_BY_NAME' (wildcard section pattern)). ++ It will sort the input sections by alignment first, then by name ++ if 2 sections have the same alignment. ++ ++ 3. `SORT_BY_NAME' (`SORT_BY_NAME' (wildcard section pattern)) is ++ treated the same as `SORT_BY_NAME' (wildcard section pattern). ++ ++ 4. `SORT_BY_ALIGNMENT' (`SORT_BY_ALIGNMENT' (wildcard section ++ pattern)) is treated the same as `SORT_BY_ALIGNMENT' (wildcard ++ section pattern). ++ ++ 5. All other nested section sorting commands are invalid. ++ ++ When both command line section sorting option and linker script ++section sorting command are used, section sorting command always takes ++precedence over the command line option. ++ ++ If the section sorting command in linker script isn't nested, the ++command line option will make the section sorting command to be treated ++as nested sorting command. ++ ++ 1. `SORT_BY_NAME' (wildcard section pattern ) with `--sort-sections ++ alignment' is equivalent to `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' ++ (wildcard section pattern)). ++ ++ 2. `SORT_BY_ALIGNMENT' (wildcard section pattern) with ++ `--sort-section name' is equivalent to `SORT_BY_ALIGNMENT' ++ (`SORT_BY_NAME' (wildcard section pattern)). ++ ++ If the section sorting command in linker script is nested, the ++command line option will be ignored. ++ ++ If you ever get confused about where input sections are going, use ++the `-M' linker option to generate a map file. The map file shows ++precisely how input sections are mapped to output sections. ++ ++ This example shows how wildcard patterns might be used to partition ++files. This linker script directs the linker to place all `.text' ++sections in `.text' and all `.bss' sections in `.bss'. The linker will ++place the `.data' section from all files beginning with an upper case ++character in `.DATA'; for all other files, the linker will place the ++`.data' section in `.data'. ++ SECTIONS { ++ .text : { *(.text) } ++ .DATA : { [A-Z]*(.data) } ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ ++File: ld.info, Node: Input Section Common, Next: Input Section Keep, Prev: Input Section Wildcards, Up: Input Section ++ ++3.6.4.3 Input Section for Common Symbols ++........................................ ++ ++A special notation is needed for common symbols, because in many object ++file formats common symbols do not have a particular input section. The ++linker treats common symbols as though they are in an input section ++named `COMMON'. ++ ++ You may use file names with the `COMMON' section just as with any ++other input sections. You can use this to place common symbols from a ++particular input file in one section while common symbols from other ++input files are placed in another section. ++ ++ In most cases, common symbols in input files will be placed in the ++`.bss' section in the output file. For example: ++ .bss { *(.bss) *(COMMON) } ++ ++ Some object file formats have more than one type of common symbol. ++For example, the MIPS ELF object file format distinguishes standard ++common symbols and small common symbols. In this case, the linker will ++use a different special section name for other types of common symbols. ++In the case of MIPS ELF, the linker uses `COMMON' for standard common ++symbols and `.scommon' for small common symbols. This permits you to ++map the different types of common symbols into memory at different ++locations. ++ ++ You will sometimes see `[COMMON]' in old linker scripts. This ++notation is now considered obsolete. It is equivalent to `*(COMMON)'. ++ ++ ++File: ld.info, Node: Input Section Keep, Next: Input Section Example, Prev: Input Section Common, Up: Input Section ++ ++3.6.4.4 Input Section and Garbage Collection ++............................................ ++ ++When link-time garbage collection is in use (`--gc-sections'), it is ++often useful to mark sections that should not be eliminated. This is ++accomplished by surrounding an input section's wildcard entry with ++`KEEP()', as in `KEEP(*(.init))' or `KEEP(SORT_BY_NAME(*)(.ctors))'. ++ ++ ++File: ld.info, Node: Input Section Example, Prev: Input Section Keep, Up: Input Section ++ ++3.6.4.5 Input Section Example ++............................. ++ ++The following example is a complete linker script. It tells the linker ++to read all of the sections from file `all.o' and place them at the ++start of output section `outputa' which starts at location `0x10000'. ++All of section `.input1' from file `foo.o' follows immediately, in the ++same output section. All of section `.input2' from `foo.o' goes into ++output section `outputb', followed by section `.input1' from `foo1.o'. ++All of the remaining `.input1' and `.input2' sections from any files ++are written to output section `outputc'. ++ ++ SECTIONS { ++ outputa 0x10000 : ++ { ++ all.o ++ foo.o (.input1) ++ } ++ outputb : ++ { ++ foo.o (.input2) ++ foo1.o (.input1) ++ } ++ outputc : ++ { ++ *(.input1) ++ *(.input2) ++ } ++ } ++ ++ ++File: ld.info, Node: Output Section Data, Next: Output Section Keywords, Prev: Input Section, Up: SECTIONS ++ ++3.6.5 Output Section Data ++------------------------- ++ ++You can include explicit bytes of data in an output section by using ++`BYTE', `SHORT', `LONG', `QUAD', or `SQUAD' as an output section ++command. Each keyword is followed by an expression in parentheses ++providing the value to store (*note Expressions::). The value of the ++expression is stored at the current value of the location counter. ++ ++ The `BYTE', `SHORT', `LONG', and `QUAD' commands store one, two, ++four, and eight bytes (respectively). After storing the bytes, the ++location counter is incremented by the number of bytes stored. ++ ++ For example, this will store the byte 1 followed by the four byte ++value of the symbol `addr': ++ BYTE(1) ++ LONG(addr) ++ ++ When using a 64 bit host or target, `QUAD' and `SQUAD' are the same; ++they both store an 8 byte, or 64 bit, value. When both host and target ++are 32 bits, an expression is computed as 32 bits. In this case `QUAD' ++stores a 32 bit value zero extended to 64 bits, and `SQUAD' stores a 32 ++bit value sign extended to 64 bits. ++ ++ If the object file format of the output file has an explicit ++endianness, which is the normal case, the value will be stored in that ++endianness. When the object file format does not have an explicit ++endianness, as is true of, for example, S-records, the value will be ++stored in the endianness of the first input object file. ++ ++ Note--these commands only work inside a section description and not ++between them, so the following will produce an error from the linker: ++ SECTIONS { .text : { *(.text) } LONG(1) .data : { *(.data) } } ++ whereas this will work: ++ SECTIONS { .text : { *(.text) ; LONG(1) } .data : { *(.data) } } ++ ++ You may use the `FILL' command to set the fill pattern for the ++current section. It is followed by an expression in parentheses. Any ++otherwise unspecified regions of memory within the section (for example, ++gaps left due to the required alignment of input sections) are filled ++with the value of the expression, repeated as necessary. A `FILL' ++statement covers memory locations after the point at which it occurs in ++the section definition; by including more than one `FILL' statement, ++you can have different fill patterns in different parts of an output ++section. ++ ++ This example shows how to fill unspecified regions of memory with the ++value `0x90': ++ FILL(0x90909090) ++ ++ The `FILL' command is similar to the `=FILLEXP' output section ++attribute, but it only affects the part of the section following the ++`FILL' command, rather than the entire section. If both are used, the ++`FILL' command takes precedence. *Note Output Section Fill::, for ++details on the fill expression. ++ ++ ++File: ld.info, Node: Output Section Keywords, Next: Output Section Discarding, Prev: Output Section Data, Up: SECTIONS ++ ++3.6.6 Output Section Keywords ++----------------------------- ++ ++There are a couple of keywords which can appear as output section ++commands. ++ ++`CREATE_OBJECT_SYMBOLS' ++ The command tells the linker to create a symbol for each input ++ file. The name of each symbol will be the name of the ++ corresponding input file. The section of each symbol will be the ++ output section in which the `CREATE_OBJECT_SYMBOLS' command ++ appears. ++ ++ This is conventional for the a.out object file format. It is not ++ normally used for any other object file format. ++ ++`CONSTRUCTORS' ++ When linking using the a.out object file format, the linker uses an ++ unusual set construct to support C++ global constructors and ++ destructors. When linking object file formats which do not support ++ arbitrary sections, such as ECOFF and XCOFF, the linker will ++ automatically recognize C++ global constructors and destructors by ++ name. For these object file formats, the `CONSTRUCTORS' command ++ tells the linker to place constructor information in the output ++ section where the `CONSTRUCTORS' command appears. The ++ `CONSTRUCTORS' command is ignored for other object file formats. ++ ++ The symbol `__CTOR_LIST__' marks the start of the global ++ constructors, and the symbol `__CTOR_END__' marks the end. ++ Similarly, `__DTOR_LIST__' and `__DTOR_END__' mark the start and ++ end of the global destructors. The first word in the list is the ++ number of entries, followed by the address of each constructor or ++ destructor, followed by a zero word. The compiler must arrange to ++ actually run the code. For these object file formats GNU C++ ++ normally calls constructors from a subroutine `__main'; a call to ++ `__main' is automatically inserted into the startup code for ++ `main'. GNU C++ normally runs destructors either by using ++ `atexit', or directly from the function `exit'. ++ ++ For object file formats such as `COFF' or `ELF' which support ++ arbitrary section names, GNU C++ will normally arrange to put the ++ addresses of global constructors and destructors into the `.ctors' ++ and `.dtors' sections. Placing the following sequence into your ++ linker script will build the sort of table which the GNU C++ ++ runtime code expects to see. ++ ++ __CTOR_LIST__ = .; ++ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) ++ *(.ctors) ++ LONG(0) ++ __CTOR_END__ = .; ++ __DTOR_LIST__ = .; ++ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) ++ *(.dtors) ++ LONG(0) ++ __DTOR_END__ = .; ++ ++ If you are using the GNU C++ support for initialization priority, ++ which provides some control over the order in which global ++ constructors are run, you must sort the constructors at link time ++ to ensure that they are executed in the correct order. When using ++ the `CONSTRUCTORS' command, use `SORT_BY_NAME(CONSTRUCTORS)' ++ instead. When using the `.ctors' and `.dtors' sections, use ++ `*(SORT_BY_NAME(.ctors))' and `*(SORT_BY_NAME(.dtors))' instead of ++ just `*(.ctors)' and `*(.dtors)'. ++ ++ Normally the compiler and linker will handle these issues ++ automatically, and you will not need to concern yourself with ++ them. However, you may need to consider this if you are using C++ ++ and writing your own linker scripts. ++ ++ ++ ++File: ld.info, Node: Output Section Discarding, Next: Output Section Attributes, Prev: Output Section Keywords, Up: SECTIONS ++ ++3.6.7 Output Section Discarding ++------------------------------- ++ ++The linker will not create output section which do not have any ++contents. This is for convenience when referring to input sections that ++may or may not be present in any of the input files. For example: ++ .foo { *(.foo) } ++ will only create a `.foo' section in the output file if there is a ++`.foo' section in at least one input file. ++ ++ If you use anything other than an input section description as an ++output section command, such as a symbol assignment, then the output ++section will always be created, even if there are no matching input ++sections. ++ ++ The special output section name `/DISCARD/' may be used to discard ++input sections. Any input sections which are assigned to an output ++section named `/DISCARD/' are not included in the output file. ++ ++ ++File: ld.info, Node: Output Section Attributes, Next: Overlay Description, Prev: Output Section Discarding, Up: SECTIONS ++ ++3.6.8 Output Section Attributes ++------------------------------- ++ ++We showed above that the full description of an output section looked ++like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++We've already described SECTION, ADDRESS, and ++OUTPUT-SECTION-COMMAND. In this section we will describe the remaining ++section attributes. ++ ++* Menu: ++ ++* Output Section Type:: Output section type ++* Output Section LMA:: Output section LMA ++* Forced Output Alignment:: Forced Output Alignment ++* Forced Input Alignment:: Forced Input Alignment ++* Output Section Region:: Output section region ++* Output Section Phdr:: Output section phdr ++* Output Section Fill:: Output section fill ++ ++ ++File: ld.info, Node: Output Section Type, Next: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.1 Output Section Type ++........................... ++ ++Each output section may have a type. The type is a keyword in ++parentheses. The following types are defined: ++ ++`NOLOAD' ++ The section should be marked as not loadable, so that it will not ++ be loaded into memory when the program is run. ++ ++`DSECT' ++`COPY' ++`INFO' ++`OVERLAY' ++ These type names are supported for backward compatibility, and are ++ rarely used. They all have the same effect: the section should be ++ marked as not allocatable, so that no memory is allocated for the ++ section when the program is run. ++ ++ The linker normally sets the attributes of an output section based on ++the input sections which map into it. You can override this by using ++the section type. For example, in the script sample below, the `ROM' ++section is addressed at memory location `0' and does not need to be ++loaded when the program is run. The contents of the `ROM' section will ++appear in the linker output file as usual. ++ SECTIONS { ++ ROM 0 (NOLOAD) : { ... } ++ ... ++ } ++ ++ ++File: ld.info, Node: Output Section LMA, Next: Forced Output Alignment, Prev: Output Section Type, Up: Output Section Attributes ++ ++3.6.8.2 Output Section LMA ++.......................... ++ ++Every section has a virtual address (VMA) and a load address (LMA); see ++*Note Basic Script Concepts::. The address expression which may appear ++in an output section description sets the VMA (*note Output Section ++Address::). ++ ++ The linker will normally set the LMA equal to the VMA. You can ++change that by using the `AT' keyword. The expression LMA that follows ++the `AT' keyword specifies the load address of the section. ++ ++ Alternatively, with `AT>LMA_REGION' expression, you may specify a ++memory region for the section's load address. *Note MEMORY::. Note ++that if the section has not had a VMA assigned to it then the linker ++will use the LMA_REGION as the VMA region as well. *Note Output ++Section Region::. ++ ++ This feature is designed to make it easy to build a ROM image. For ++example, the following linker script creates three output sections: one ++called `.text', which starts at `0x1000', one called `.mdata', which is ++loaded at the end of the `.text' section even though its VMA is ++`0x2000', and one called `.bss' to hold uninitialized data at address ++`0x3000'. The symbol `_data' is defined with the value `0x2000', which ++shows that the location counter holds the VMA value, not the LMA value. ++ ++ SECTIONS ++ { ++ .text 0x1000 : { *(.text) _etext = . ; } ++ .mdata 0x2000 : ++ AT ( ADDR (.text) + SIZEOF (.text) ) ++ { _data = . ; *(.data); _edata = . ; } ++ .bss 0x3000 : ++ { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;} ++ } ++ ++ The run-time initialization code for use with a program generated ++with this linker script would include something like the following, to ++copy the initialized data from the ROM image to its runtime address. ++Notice how this code takes advantage of the symbols defined by the ++linker script. ++ ++ extern char _etext, _data, _edata, _bstart, _bend; ++ char *src = &_etext; ++ char *dst = &_data; ++ ++ /* ROM has data at end of text; copy it. */ ++ while (dst < &_edata) { ++ *dst++ = *src++; ++ } ++ ++ /* Zero bss */ ++ for (dst = &_bstart; dst< &_bend; dst++) ++ *dst = 0; ++ ++ ++File: ld.info, Node: Forced Output Alignment, Next: Forced Input Alignment, Prev: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.3 Forced Output Alignment ++............................... ++ ++You can increase an output section's alignment by using ALIGN. ++ ++ ++File: ld.info, Node: Forced Input Alignment, Next: Output Section Region, Prev: Forced Output Alignment, Up: Output Section Attributes ++ ++3.6.8.4 Forced Input Alignment ++.............................. ++ ++You can force input section alignment within an output section by using ++SUBALIGN. The value specified overrides any alignment given by input ++sections, whether larger or smaller. ++ ++ ++File: ld.info, Node: Output Section Region, Next: Output Section Phdr, Prev: Forced Input Alignment, Up: Output Section Attributes ++ ++3.6.8.5 Output Section Region ++............................. ++ ++You can assign a section to a previously defined region of memory by ++using `>REGION'. *Note MEMORY::. ++ ++ Here is a simple example: ++ MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 } ++ SECTIONS { ROM : { *(.text) } >rom } ++ ++ ++File: ld.info, Node: Output Section Phdr, Next: Output Section Fill, Prev: Output Section Region, Up: Output Section Attributes ++ ++3.6.8.6 Output Section Phdr ++........................... ++ ++You can assign a section to a previously defined program segment by ++using `:PHDR'. *Note PHDRS::. If a section is assigned to one or more ++segments, then all subsequent allocated sections will be assigned to ++those segments as well, unless they use an explicitly `:PHDR' modifier. ++You can use `:NONE' to tell the linker to not put the section in any ++segment at all. ++ ++ Here is a simple example: ++ PHDRS { text PT_LOAD ; } ++ SECTIONS { .text : { *(.text) } :text } ++ ++ ++File: ld.info, Node: Output Section Fill, Prev: Output Section Phdr, Up: Output Section Attributes ++ ++3.6.8.7 Output Section Fill ++........................... ++ ++You can set the fill pattern for an entire section by using `=FILLEXP'. ++FILLEXP is an expression (*note Expressions::). Any otherwise ++unspecified regions of memory within the output section (for example, ++gaps left due to the required alignment of input sections) will be ++filled with the value, repeated as necessary. If the fill expression ++is a simple hex number, ie. a string of hex digit starting with `0x' ++and without a trailing `k' or `M', then an arbitrarily long sequence of ++hex digits can be used to specify the fill pattern; Leading zeros ++become part of the pattern too. For all other cases, including extra ++parentheses or a unary `+', the fill pattern is the four least ++significant bytes of the value of the expression. In all cases, the ++number is big-endian. ++ ++ You can also change the fill value with a `FILL' command in the ++output section commands; (*note Output Section Data::). ++ ++ Here is a simple example: ++ SECTIONS { .text : { *(.text) } =0x90909090 } ++ ++ ++File: ld.info, Node: Overlay Description, Prev: Output Section Attributes, Up: SECTIONS ++ ++3.6.9 Overlay Description ++------------------------- ++ ++An overlay description provides an easy way to describe sections which ++are to be loaded as part of a single memory image but are to be run at ++the same memory address. At run time, some sort of overlay manager will ++copy the overlaid sections in and out of the runtime memory address as ++required, perhaps by simply manipulating addressing bits. This approach ++can be useful, for example, when a certain region of memory is faster ++than another. ++ ++ Overlays are described using the `OVERLAY' command. The `OVERLAY' ++command is used within a `SECTIONS' command, like an output section ++description. The full syntax of the `OVERLAY' command is as follows: ++ OVERLAY [START] : [NOCROSSREFS] [AT ( LDADDR )] ++ { ++ SECNAME1 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ SECNAME2 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ ... ++ } [>REGION] [:PHDR...] [=FILL] ++ ++ Everything is optional except `OVERLAY' (a keyword), and each ++section must have a name (SECNAME1 and SECNAME2 above). The section ++definitions within the `OVERLAY' construct are identical to those ++within the general `SECTIONS' contruct (*note SECTIONS::), except that ++no addresses and no memory regions may be defined for sections within ++an `OVERLAY'. ++ ++ The sections are all defined with the same starting address. The ++load addresses of the sections are arranged such that they are ++consecutive in memory starting at the load address used for the ++`OVERLAY' as a whole (as with normal section definitions, the load ++address is optional, and defaults to the start address; the start ++address is also optional, and defaults to the current value of the ++location counter). ++ ++ If the `NOCROSSREFS' keyword is used, and there any references among ++the sections, the linker will report an error. Since the sections all ++run at the same address, it normally does not make sense for one ++section to refer directly to another. *Note NOCROSSREFS: Miscellaneous ++Commands. ++ ++ For each section within the `OVERLAY', the linker automatically ++defines two symbols. The symbol `__load_start_SECNAME' is defined as ++the starting load address of the section. The symbol ++`__load_stop_SECNAME' is defined as the final load address of the ++section. Any characters within SECNAME which are not legal within C ++identifiers are removed. C (or assembler) code may use these symbols ++to move the overlaid sections around as necessary. ++ ++ At the end of the overlay, the value of the location counter is set ++to the start address of the overlay plus the size of the largest ++section. ++ ++ Here is an example. Remember that this would appear inside a ++`SECTIONS' construct. ++ OVERLAY 0x1000 : AT (0x4000) ++ { ++ .text0 { o1/*.o(.text) } ++ .text1 { o2/*.o(.text) } ++ } ++This will define both `.text0' and `.text1' to start at address ++0x1000. `.text0' will be loaded at address 0x4000, and `.text1' will ++be loaded immediately after `.text0'. The following symbols will be ++defined: `__load_start_text0', `__load_stop_text0', ++`__load_start_text1', `__load_stop_text1'. ++ ++ C code to copy overlay `.text1' into the overlay area might look ++like the following. ++ ++ extern char __load_start_text1, __load_stop_text1; ++ memcpy ((char *) 0x1000, &__load_start_text1, ++ &__load_stop_text1 - &__load_start_text1); ++ ++ Note that the `OVERLAY' command is just syntactic sugar, since ++everything it does can be done using the more basic commands. The above ++example could have been written identically as follows. ++ ++ .text0 0x1000 : AT (0x4000) { o1/*.o(.text) } ++ __load_start_text0 = LOADADDR (.text0); ++ __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0); ++ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) } ++ __load_start_text1 = LOADADDR (.text1); ++ __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1); ++ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1)); ++ ++ ++File: ld.info, Node: MEMORY, Next: PHDRS, Prev: SECTIONS, Up: Scripts ++ ++3.7 MEMORY Command ++================== ++ ++The linker's default configuration permits allocation of all available ++memory. You can override this by using the `MEMORY' command. ++ ++ The `MEMORY' command describes the location and size of blocks of ++memory in the target. You can use it to describe which memory regions ++may be used by the linker, and which memory regions it must avoid. You ++can then assign sections to particular memory regions. The linker will ++set section addresses based on the memory regions, and will warn about ++regions that become too full. The linker will not shuffle sections ++around to fit into the available regions. ++ ++ A linker script may contain at most one use of the `MEMORY' command. ++However, you can define as many blocks of memory within it as you ++wish. The syntax is: ++ MEMORY ++ { ++ NAME [(ATTR)] : ORIGIN = ORIGIN, LENGTH = LEN ++ ... ++ } ++ ++ The NAME is a name used in the linker script to refer to the region. ++The region name has no meaning outside of the linker script. Region ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each memory region must ++have a distinct name. ++ ++ The ATTR string is an optional list of attributes that specify ++whether to use a particular memory region for an input section which is ++not explicitly mapped in the linker script. As described in *Note ++SECTIONS::, if you do not specify an output section for some input ++section, the linker will create an output section with the same name as ++the input section. If you define region attributes, the linker will use ++them to select the memory region for the output section that it creates. ++ ++ The ATTR string must consist only of the following characters: ++`R' ++ Read-only section ++ ++`W' ++ Read/write section ++ ++`X' ++ Executable section ++ ++`A' ++ Allocatable section ++ ++`I' ++ Initialized section ++ ++`L' ++ Same as `I' ++ ++`!' ++ Invert the sense of any of the preceding attributes ++ ++ If a unmapped section matches any of the listed attributes other than ++`!', it will be placed in the memory region. The `!' attribute ++reverses this test, so that an unmapped section will be placed in the ++memory region only if it does not match any of the listed attributes. ++ ++ The ORIGIN is an numerical expression for the start address of the ++memory region. The expression must evaluate to a constant and it ++cannot involve any symbols. The keyword `ORIGIN' may be abbreviated to ++`org' or `o' (but not, for example, `ORG'). ++ ++ The LEN is an expression for the size in bytes of the memory region. ++As with the ORIGIN expression, the expression must be numerical only ++and must evaluate to a constant. The keyword `LENGTH' may be ++abbreviated to `len' or `l'. ++ ++ In the following example, we specify that there are two memory ++regions available for allocation: one starting at `0' for 256 kilobytes, ++and the other starting at `0x40000000' for four megabytes. The linker ++will place into the `rom' memory region every section which is not ++explicitly mapped into a memory region, and is either read-only or ++executable. The linker will place other sections which are not ++explicitly mapped into a memory region into the `ram' memory region. ++ ++ MEMORY ++ { ++ rom (rx) : ORIGIN = 0, LENGTH = 256K ++ ram (!rx) : org = 0x40000000, l = 4M ++ } ++ ++ Once you define a memory region, you can direct the linker to place ++specific output sections into that memory region by using the `>REGION' ++output section attribute. For example, if you have a memory region ++named `mem', you would use `>mem' in the output section definition. ++*Note Output Section Region::. If no address was specified for the ++output section, the linker will set the address to the next available ++address within the memory region. If the combined output sections ++directed to a memory region are too large for the region, the linker ++will issue an error message. ++ ++ It is possible to access the origin and length of a memory in an ++expression via the `ORIGIN(MEMORY)' and `LENGTH(MEMORY)' functions: ++ ++ _fstack = ORIGIN(ram) + LENGTH(ram) - 4; ++ ++ ++File: ld.info, Node: PHDRS, Next: VERSION, Prev: MEMORY, Up: Scripts ++ ++3.8 PHDRS Command ++================= ++ ++The ELF object file format uses "program headers", also knows as ++"segments". The program headers describe how the program should be ++loaded into memory. You can print them out by using the `objdump' ++program with the `-p' option. ++ ++ When you run an ELF program on a native ELF system, the system loader ++reads the program headers in order to figure out how to load the ++program. This will only work if the program headers are set correctly. ++This manual does not describe the details of how the system loader ++interprets program headers; for more information, see the ELF ABI. ++ ++ The linker will create reasonable program headers by default. ++However, in some cases, you may need to specify the program headers more ++precisely. You may use the `PHDRS' command for this purpose. When the ++linker sees the `PHDRS' command in the linker script, it will not ++create any program headers other than the ones specified. ++ ++ The linker only pays attention to the `PHDRS' command when ++generating an ELF output file. In other cases, the linker will simply ++ignore `PHDRS'. ++ ++ This is the syntax of the `PHDRS' command. The words `PHDRS', ++`FILEHDR', `AT', and `FLAGS' are keywords. ++ ++ PHDRS ++ { ++ NAME TYPE [ FILEHDR ] [ PHDRS ] [ AT ( ADDRESS ) ] ++ [ FLAGS ( FLAGS ) ] ; ++ } ++ ++ The NAME is used only for reference in the `SECTIONS' command of the ++linker script. It is not put into the output file. Program header ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each program header must ++have a distinct name. ++ ++ Certain program header types describe segments of memory which the ++system loader will load from the file. In the linker script, you ++specify the contents of these segments by placing allocatable output ++sections in the segments. You use the `:PHDR' output section attribute ++to place a section in a particular segment. *Note Output Section ++Phdr::. ++ ++ It is normal to put certain sections in more than one segment. This ++merely implies that one segment of memory contains another. You may ++repeat `:PHDR', using it once for each segment which should contain the ++section. ++ ++ If you place a section in one or more segments using `:PHDR', then ++the linker will place all subsequent allocatable sections which do not ++specify `:PHDR' in the same segments. This is for convenience, since ++generally a whole set of contiguous sections will be placed in a single ++segment. You can use `:NONE' to override the default segment and tell ++the linker to not put the section in any segment at all. ++ ++ You may use the `FILEHDR' and `PHDRS' keywords appear after the ++program header type to further describe the contents of the segment. ++The `FILEHDR' keyword means that the segment should include the ELF ++file header. The `PHDRS' keyword means that the segment should include ++the ELF program headers themselves. ++ ++ The TYPE may be one of the following. The numbers indicate the ++value of the keyword. ++ ++`PT_NULL' (0) ++ Indicates an unused program header. ++ ++`PT_LOAD' (1) ++ Indicates that this program header describes a segment to be ++ loaded from the file. ++ ++`PT_DYNAMIC' (2) ++ Indicates a segment where dynamic linking information can be found. ++ ++`PT_INTERP' (3) ++ Indicates a segment where the name of the program interpreter may ++ be found. ++ ++`PT_NOTE' (4) ++ Indicates a segment holding note information. ++ ++`PT_SHLIB' (5) ++ A reserved program header type, defined but not specified by the ++ ELF ABI. ++ ++`PT_PHDR' (6) ++ Indicates a segment where the program headers may be found. ++ ++EXPRESSION ++ An expression giving the numeric type of the program header. This ++ may be used for types not defined above. ++ ++ You can specify that a segment should be loaded at a particular ++address in memory by using an `AT' expression. This is identical to the ++`AT' command used as an output section attribute (*note Output Section ++LMA::). The `AT' command for a program header overrides the output ++section attribute. ++ ++ The linker will normally set the segment flags based on the sections ++which comprise the segment. You may use the `FLAGS' keyword to ++explicitly specify the segment flags. The value of FLAGS must be an ++integer. It is used to set the `p_flags' field of the program header. ++ ++ Here is an example of `PHDRS'. This shows a typical set of program ++headers used on a native ELF system. ++ ++ PHDRS ++ { ++ headers PT_PHDR PHDRS ; ++ interp PT_INTERP ; ++ text PT_LOAD FILEHDR PHDRS ; ++ data PT_LOAD ; ++ dynamic PT_DYNAMIC ; ++ } ++ ++ SECTIONS ++ { ++ . = SIZEOF_HEADERS; ++ .interp : { *(.interp) } :text :interp ++ .text : { *(.text) } :text ++ .rodata : { *(.rodata) } /* defaults to :text */ ++ ... ++ . = . + 0x1000; /* move to a new page in memory */ ++ .data : { *(.data) } :data ++ .dynamic : { *(.dynamic) } :data :dynamic ++ ... ++ } ++ ++ ++File: ld.info, Node: VERSION, Next: Expressions, Prev: PHDRS, Up: Scripts ++ ++3.9 VERSION Command ++=================== ++ ++The linker supports symbol versions when using ELF. Symbol versions are ++only useful when using shared libraries. The dynamic linker can use ++symbol versions to select a specific version of a function when it runs ++a program that may have been linked against an earlier version of the ++shared library. ++ ++ You can include a version script directly in the main linker script, ++or you can supply the version script as an implicit linker script. You ++can also use the `--version-script' linker option. ++ ++ The syntax of the `VERSION' command is simply ++ VERSION { version-script-commands } ++ ++ The format of the version script commands is identical to that used ++by Sun's linker in Solaris 2.5. The version script defines a tree of ++version nodes. You specify the node names and interdependencies in the ++version script. You can specify which symbols are bound to which ++version nodes, and you can reduce a specified set of symbols to local ++scope so that they are not globally visible outside of the shared ++library. ++ ++ The easiest way to demonstrate the version script language is with a ++few examples. ++ ++ VERS_1.1 { ++ global: ++ foo1; ++ local: ++ old*; ++ original*; ++ new*; ++ }; ++ ++ VERS_1.2 { ++ foo2; ++ } VERS_1.1; ++ ++ VERS_2.0 { ++ bar1; bar2; ++ extern "C++" { ++ ns::*; ++ "int f(int, double)"; ++ } ++ } VERS_1.2; ++ ++ This example version script defines three version nodes. The first ++version node defined is `VERS_1.1'; it has no other dependencies. The ++script binds the symbol `foo1' to `VERS_1.1'. It reduces a number of ++symbols to local scope so that they are not visible outside of the ++shared library; this is done using wildcard patterns, so that any ++symbol whose name begins with `old', `original', or `new' is matched. ++The wildcard patterns available are the same as those used in the shell ++when matching filenames (also known as "globbing"). However, if you ++specify the symbol name inside double quotes, then the name is treated ++as literal, rather than as a glob pattern. ++ ++ Next, the version script defines node `VERS_1.2'. This node depends ++upon `VERS_1.1'. The script binds the symbol `foo2' to the version ++node `VERS_1.2'. ++ ++ Finally, the version script defines node `VERS_2.0'. This node ++depends upon `VERS_1.2'. The scripts binds the symbols `bar1' and ++`bar2' are bound to the version node `VERS_2.0'. ++ ++ When the linker finds a symbol defined in a library which is not ++specifically bound to a version node, it will effectively bind it to an ++unspecified base version of the library. You can bind all otherwise ++unspecified symbols to a given version node by using `global: *;' ++somewhere in the version script. ++ ++ The names of the version nodes have no specific meaning other than ++what they might suggest to the person reading them. The `2.0' version ++could just as well have appeared in between `1.1' and `1.2'. However, ++this would be a confusing way to write a version script. ++ ++ Node name can be omited, provided it is the only version node in the ++version script. Such version script doesn't assign any versions to ++symbols, only selects which symbols will be globally visible out and ++which won't. ++ ++ { global: foo; bar; local: *; }; ++ ++ When you link an application against a shared library that has ++versioned symbols, the application itself knows which version of each ++symbol it requires, and it also knows which version nodes it needs from ++each shared library it is linked against. Thus at runtime, the dynamic ++loader can make a quick check to make sure that the libraries you have ++linked against do in fact supply all of the version nodes that the ++application will need to resolve all of the dynamic symbols. In this ++way it is possible for the dynamic linker to know with certainty that ++all external symbols that it needs will be resolvable without having to ++search for each symbol reference. ++ ++ The symbol versioning is in effect a much more sophisticated way of ++doing minor version checking that SunOS does. The fundamental problem ++that is being addressed here is that typically references to external ++functions are bound on an as-needed basis, and are not all bound when ++the application starts up. If a shared library is out of date, a ++required interface may be missing; when the application tries to use ++that interface, it may suddenly and unexpectedly fail. With symbol ++versioning, the user will get a warning when they start their program if ++the libraries being used with the application are too old. ++ ++ There are several GNU extensions to Sun's versioning approach. The ++first of these is the ability to bind a symbol to a version node in the ++source file where the symbol is defined instead of in the versioning ++script. This was done mainly to reduce the burden on the library ++maintainer. You can do this by putting something like: ++ __asm__(".symver original_foo,foo@VERS_1.1"); ++ in the C source file. This renames the function `original_foo' to ++be an alias for `foo' bound to the version node `VERS_1.1'. The ++`local:' directive can be used to prevent the symbol `original_foo' ++from being exported. A `.symver' directive takes precedence over a ++version script. ++ ++ The second GNU extension is to allow multiple versions of the same ++function to appear in a given shared library. In this way you can make ++an incompatible change to an interface without increasing the major ++version number of the shared library, while still allowing applications ++linked against the old interface to continue to function. ++ ++ To do this, you must use multiple `.symver' directives in the source ++file. Here is an example: ++ ++ __asm__(".symver original_foo,foo@"); ++ __asm__(".symver old_foo,foo@VERS_1.1"); ++ __asm__(".symver old_foo1,foo@VERS_1.2"); ++ __asm__(".symver new_foo,foo@@VERS_2.0"); ++ ++ In this example, `foo@' represents the symbol `foo' bound to the ++unspecified base version of the symbol. The source file that contains ++this example would define 4 C functions: `original_foo', `old_foo', ++`old_foo1', and `new_foo'. ++ ++ When you have multiple definitions of a given symbol, there needs to ++be some way to specify a default version to which external references to ++this symbol will be bound. You can do this with the `foo@@VERS_2.0' ++type of `.symver' directive. You can only declare one version of a ++symbol as the default in this manner; otherwise you would effectively ++have multiple definitions of the same symbol. ++ ++ If you wish to bind a reference to a specific version of the symbol ++within the shared library, you can use the aliases of convenience ++(i.e., `old_foo'), or you can use the `.symver' directive to ++specifically bind to an external version of the function in question. ++ ++ You can also specify the language in the version script: ++ ++ VERSION extern "lang" { version-script-commands } ++ ++ The supported `lang's are `C', `C++', and `Java'. The linker will ++iterate over the list of symbols at the link time and demangle them ++according to `lang' before matching them to the patterns specified in ++`version-script-commands'. ++ ++ Demangled names may contains spaces and other special characters. As ++described above, you can use a glob pattern to match demangled names, ++or you can use a double-quoted string to match the string exactly. In ++the latter case, be aware that minor differences (such as differing ++whitespace) between the version script and the demangler output will ++cause a mismatch. As the exact string generated by the demangler might ++change in the future, even if the mangled name does not, you should ++check that all of your version directives are behaving as you expect ++when you upgrade. ++ ++ ++File: ld.info, Node: Expressions, Next: Implicit Linker Scripts, Prev: VERSION, Up: Scripts ++ ++3.10 Expressions in Linker Scripts ++================================== ++ ++The syntax for expressions in the linker script language is identical to ++that of C expressions. All expressions are evaluated as integers. All ++expressions are evaluated in the same size, which is 32 bits if both the ++host and target are 32 bits, and is otherwise 64 bits. ++ ++ You can use and set symbol values in expressions. ++ ++ The linker defines several special purpose builtin functions for use ++in expressions. ++ ++* Menu: ++ ++* Constants:: Constants ++* Symbols:: Symbol Names ++* Orphan Sections:: Orphan Sections ++* Location Counter:: The Location Counter ++* Operators:: Operators ++* Evaluation:: Evaluation ++* Expression Section:: The Section of an Expression ++* Builtin Functions:: Builtin Functions ++ ++ ++File: ld.info, Node: Constants, Next: Symbols, Up: Expressions ++ ++3.10.1 Constants ++---------------- ++ ++All constants are integers. ++ ++ As in C, the linker considers an integer beginning with `0' to be ++octal, and an integer beginning with `0x' or `0X' to be hexadecimal. ++The linker considers other integers to be decimal. ++ ++ In addition, you can use the suffixes `K' and `M' to scale a ++constant by `1024' or `1024*1024' respectively. For example, the ++following all refer to the same quantity: ++ _fourk_1 = 4K; ++ _fourk_2 = 4096; ++ _fourk_3 = 0x1000; ++ ++ ++File: ld.info, Node: Symbols, Next: Orphan Sections, Prev: Constants, Up: Expressions ++ ++3.10.2 Symbol Names ++------------------- ++ ++Unless quoted, symbol names start with a letter, underscore, or period ++and may include letters, digits, underscores, periods, and hyphens. ++Unquoted symbol names must not conflict with any keywords. You can ++specify a symbol which contains odd characters or has the same name as a ++keyword by surrounding the symbol name in double quotes: ++ "SECTION" = 9; ++ "with a space" = "also with a space" + 10; ++ ++ Since symbols can contain many non-alphabetic characters, it is ++safest to delimit symbols with spaces. For example, `A-B' is one ++symbol, whereas `A - B' is an expression involving subtraction. ++ ++ ++File: ld.info, Node: Orphan Sections, Next: Location Counter, Prev: Symbols, Up: Expressions ++ ++3.10.3 Orphan Sections ++---------------------- ++ ++Orphan sections are sections present in the input files which are not ++explicitly placed into the output file by the linker script. The ++linker will still copy these sections into the output file, but it has ++to guess as to where they should be placed. The linker uses a simple ++heuristic to do this. It attempts to place orphan sections after ++non-orphan sections of the same attribute, such as code vs data, ++loadable vs non-loadable, etc. If there is not enough room to do this ++then it places at the end of the file. ++ ++ For ELF targets, the attribute of the section includes section type ++as well as section flag. ++ ++ ++File: ld.info, Node: Location Counter, Next: Operators, Prev: Orphan Sections, Up: Expressions ++ ++3.10.4 The Location Counter ++--------------------------- ++ ++The special linker variable "dot" `.' always contains the current ++output location counter. Since the `.' always refers to a location in ++an output section, it may only appear in an expression within a ++`SECTIONS' command. The `.' symbol may appear anywhere that an ++ordinary symbol is allowed in an expression. ++ ++ Assigning a value to `.' will cause the location counter to be ++moved. This may be used to create holes in the output section. The ++location counter may never be moved backwards. ++ ++ SECTIONS ++ { ++ output : ++ { ++ file1(.text) ++ . = . + 1000; ++ file2(.text) ++ . += 1000; ++ file3(.text) ++ } = 0x12345678; ++ } ++ In the previous example, the `.text' section from `file1' is located ++at the beginning of the output section `output'. It is followed by a ++1000 byte gap. Then the `.text' section from `file2' appears, also ++with a 1000 byte gap following before the `.text' section from `file3'. ++The notation `= 0x12345678' specifies what data to write in the gaps ++(*note Output Section Fill::). ++ ++ Note: `.' actually refers to the byte offset from the start of the ++current containing object. Normally this is the `SECTIONS' statement, ++whose start address is 0, hence `.' can be used as an absolute address. ++If `.' is used inside a section description however, it refers to the ++byte offset from the start of that section, not an absolute address. ++Thus in a script like this: ++ ++ SECTIONS ++ { ++ . = 0x100 ++ .text: { ++ *(.text) ++ . = 0x200 ++ } ++ . = 0x500 ++ .data: { ++ *(.data) ++ . += 0x600 ++ } ++ } ++ ++ The `.text' section will be assigned a starting address of 0x100 and ++a size of exactly 0x200 bytes, even if there is not enough data in the ++`.text' input sections to fill this area. (If there is too much data, ++an error will be produced because this would be an attempt to move `.' ++backwards). The `.data' section will start at 0x500 and it will have ++an extra 0x600 bytes worth of space after the end of the values from ++the `.data' input sections and before the end of the `.data' output ++section itself. ++ ++ Setting symbols to the value of the location counter outside of an ++output section statement can result in unexpected values if the linker ++needs to place orphan sections. For example, given the following: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ If the linker needs to place some input section, e.g. `.rodata', not ++mentioned in the script, it might choose to place that section between ++`.text' and `.data'. You might think the linker should place `.rodata' ++on the blank line in the above script, but blank lines are of no ++particular significance to the linker. As well, the linker doesn't ++associate the above symbol names with their sections. Instead, it ++assumes that all assignments or other statements belong to the previous ++output section, except for the special case of an assignment to `.'. ++I.e., the linker will place the orphan `.rodata' section as if the ++script was written as follows: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .rodata: { *(.rodata) } ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ This may or may not be the script author's intention for the value of ++`start_of_data'. One way to influence the orphan section placement is ++to assign the location counter to itself, as the linker assumes that an ++assignment to `.' is setting the start address of a following output ++section and thus should be grouped with that section. So you could ++write: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ . = . ; ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ Now, the orphan `.rodata' section will be placed between ++`end_of_text' and `start_of_data'. ++ ++ ++File: ld.info, Node: Operators, Next: Evaluation, Prev: Location Counter, Up: Expressions ++ ++3.10.5 Operators ++---------------- ++ ++The linker recognizes the standard C set of arithmetic operators, with ++the standard bindings and precedence levels: ++ precedence associativity Operators Notes ++ (highest) ++ 1 left ! - ~ (1) ++ 2 left * / % ++ 3 left + - ++ 4 left >> << ++ 5 left == != > < <= >= ++ 6 left & ++ 7 left | ++ 8 left && ++ 9 left || ++ 10 right ? : ++ 11 right &= += -= *= /= (2) ++ (lowest) ++ Notes: (1) Prefix operators (2) *Note Assignments::. ++ ++ ++File: ld.info, Node: Evaluation, Next: Expression Section, Prev: Operators, Up: Expressions ++ ++3.10.6 Evaluation ++----------------- ++ ++The linker evaluates expressions lazily. It only computes the value of ++an expression when absolutely necessary. ++ ++ The linker needs some information, such as the value of the start ++address of the first section, and the origins and lengths of memory ++regions, in order to do any linking at all. These values are computed ++as soon as possible when the linker reads in the linker script. ++ ++ However, other values (such as symbol values) are not known or needed ++until after storage allocation. Such values are evaluated later, when ++other information (such as the sizes of output sections) is available ++for use in the symbol assignment expression. ++ ++ The sizes of sections cannot be known until after allocation, so ++assignments dependent upon these are not performed until after ++allocation. ++ ++ Some expressions, such as those depending upon the location counter ++`.', must be evaluated during section allocation. ++ ++ If the result of an expression is required, but the value is not ++available, then an error results. For example, a script like the ++following ++ SECTIONS ++ { ++ .text 9+this_isnt_constant : ++ { *(.text) } ++ } ++will cause the error message `non constant expression for initial ++address'. ++ ++ ++File: ld.info, Node: Expression Section, Next: Builtin Functions, Prev: Evaluation, Up: Expressions ++ ++3.10.7 The Section of an Expression ++----------------------------------- ++ ++When the linker evaluates an expression, the result is either absolute ++or relative to some section. A relative expression is expressed as a ++fixed offset from the base of a section. ++ ++ The position of the expression within the linker script determines ++whether it is absolute or relative. An expression which appears within ++an output section definition is relative to the base of the output ++section. An expression which appears elsewhere will be absolute. ++ ++ A symbol set to a relative expression will be relocatable if you ++request relocatable output using the `-r' option. That means that a ++further link operation may change the value of the symbol. The symbol's ++section will be the section of the relative expression. ++ ++ A symbol set to an absolute expression will retain the same value ++through any further link operation. The symbol will be absolute, and ++will not have any particular associated section. ++ ++ You can use the builtin function `ABSOLUTE' to force an expression ++to be absolute when it would otherwise be relative. For example, to ++create an absolute symbol set to the address of the end of the output ++section `.data': ++ SECTIONS ++ { ++ .data : { *(.data) _edata = ABSOLUTE(.); } ++ } ++ If `ABSOLUTE' were not used, `_edata' would be relative to the ++`.data' section. ++ ++ ++File: ld.info, Node: Builtin Functions, Prev: Expression Section, Up: Expressions ++ ++3.10.8 Builtin Functions ++------------------------ ++ ++The linker script language includes a number of builtin functions for ++use in linker script expressions. ++ ++`ABSOLUTE(EXP)' ++ Return the absolute (non-relocatable, as opposed to non-negative) ++ value of the expression EXP. Primarily useful to assign an ++ absolute value to a symbol within a section definition, where ++ symbol values are normally section relative. *Note Expression ++ Section::. ++ ++`ADDR(SECTION)' ++ Return the absolute address (the VMA) of the named SECTION. Your ++ script must previously have defined the location of that section. ++ In the following example, `symbol_1' and `symbol_2' are assigned ++ identical values: ++ SECTIONS { ... ++ .output1 : ++ { ++ start_of_output_1 = ABSOLUTE(.); ++ ... ++ } ++ .output : ++ { ++ symbol_1 = ADDR(.output1); ++ symbol_2 = start_of_output_1; ++ } ++ ... } ++ ++`ALIGN(ALIGN)' ++`ALIGN(EXP,ALIGN)' ++ Return the location counter (`.') or arbitrary expression aligned ++ to the next ALIGN boundary. The single operand `ALIGN' doesn't ++ change the value of the location counter--it just does arithmetic ++ on it. The two operand `ALIGN' allows an arbitrary expression to ++ be aligned upwards (`ALIGN(ALIGN)' is equivalent to `ALIGN(., ++ ALIGN)'). ++ ++ Here is an example which aligns the output `.data' section to the ++ next `0x2000' byte boundary after the preceding section and sets a ++ variable within the section to the next `0x8000' boundary after the ++ input sections: ++ SECTIONS { ... ++ .data ALIGN(0x2000): { ++ *(.data) ++ variable = ALIGN(0x8000); ++ } ++ ... } ++ The first use of `ALIGN' in this example specifies the ++ location of a section because it is used as the optional ADDRESS ++ attribute of a section definition (*note Output Section ++ Address::). The second use of `ALIGN' is used to defines the ++ value of a symbol. ++ ++ The builtin function `NEXT' is closely related to `ALIGN'. ++ ++`BLOCK(EXP)' ++ This is a synonym for `ALIGN', for compatibility with older linker ++ scripts. It is most often seen when setting the address of an ++ output section. ++ ++`DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE)' ++ This is equivalent to either ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - 1))) ++ or ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - COMMONPAGESIZE))) ++ depending on whether the latter uses fewer COMMONPAGESIZE sized ++ pages for the data segment (area between the result of this ++ expression and `DATA_SEGMENT_END') than the former or not. If the ++ latter form is used, it means COMMONPAGESIZE bytes of runtime ++ memory will be saved at the expense of up to COMMONPAGESIZE wasted ++ bytes in the on-disk file. ++ ++ This expression can only be used directly in `SECTIONS' commands, ++ not in any output section descriptions and only once in the linker ++ script. COMMONPAGESIZE should be less or equal to MAXPAGESIZE and ++ should be the system page size the object wants to be optimized ++ for (while still working on system page sizes up to MAXPAGESIZE). ++ ++ Example: ++ . = DATA_SEGMENT_ALIGN(0x10000, 0x2000); ++ ++`DATA_SEGMENT_END(EXP)' ++ This defines the end of data segment for `DATA_SEGMENT_ALIGN' ++ evaluation purposes. ++ ++ . = DATA_SEGMENT_END(.); ++ ++`DATA_SEGMENT_RELRO_END(OFFSET, EXP)' ++ This defines the end of the `PT_GNU_RELRO' segment when `-z relro' ++ option is used. Second argument is returned. When `-z relro' ++ option is not present, `DATA_SEGMENT_RELRO_END' does nothing, ++ otherwise `DATA_SEGMENT_ALIGN' is padded so that EXP + OFFSET is ++ aligned to the most commonly used page boundary for particular ++ target. If present in the linker script, it must always come in ++ between `DATA_SEGMENT_ALIGN' and `DATA_SEGMENT_END'. ++ ++ . = DATA_SEGMENT_RELRO_END(24, .); ++ ++`DEFINED(SYMBOL)' ++ Return 1 if SYMBOL is in the linker global symbol table and is ++ defined before the statement using DEFINED in the script, otherwise ++ return 0. You can use this function to provide default values for ++ symbols. For example, the following script fragment shows how to ++ set a global symbol `begin' to the first location in the `.text' ++ section--but if a symbol called `begin' already existed, its value ++ is preserved: ++ ++ SECTIONS { ... ++ .text : { ++ begin = DEFINED(begin) ? begin : . ; ++ ... ++ } ++ ... ++ } ++ ++`LENGTH(MEMORY)' ++ Return the length of the memory region named MEMORY. ++ ++`LOADADDR(SECTION)' ++ Return the absolute LMA of the named SECTION. This is normally ++ the same as `ADDR', but it may be different if the `AT' attribute ++ is used in the output section definition (*note Output Section ++ LMA::). ++ ++`MAX(EXP1, EXP2)' ++ Returns the maximum of EXP1 and EXP2. ++ ++`MIN(EXP1, EXP2)' ++ Returns the minimum of EXP1 and EXP2. ++ ++`NEXT(EXP)' ++ Return the next unallocated address that is a multiple of EXP. ++ This function is closely related to `ALIGN(EXP)'; unless you use ++ the `MEMORY' command to define discontinuous memory for the output ++ file, the two functions are equivalent. ++ ++`ORIGIN(MEMORY)' ++ Return the origin of the memory region named MEMORY. ++ ++`SEGMENT_START(SEGMENT, DEFAULT)' ++ Return the base address of the named SEGMENT. If an explicit ++ value has been given for this segment (with a command-line `-T' ++ option) that value will be returned; otherwise the value will be ++ DEFAULT. At present, the `-T' command-line option can only be ++ used to set the base address for the "text", "data", and "bss" ++ sections, but you use `SEGMENT_START' with any segment name. ++ ++`SIZEOF(SECTION)' ++ Return the size in bytes of the named SECTION, if that section has ++ been allocated. If the section has not been allocated when this is ++ evaluated, the linker will report an error. In the following ++ example, `symbol_1' and `symbol_2' are assigned identical values: ++ SECTIONS{ ... ++ .output { ++ .start = . ; ++ ... ++ .end = . ; ++ } ++ symbol_1 = .end - .start ; ++ symbol_2 = SIZEOF(.output); ++ ... } ++ ++`SIZEOF_HEADERS' ++`sizeof_headers' ++ Return the size in bytes of the output file's headers. This is ++ information which appears at the start of the output file. You ++ can use this number when setting the start address of the first ++ section, if you choose, to facilitate paging. ++ ++ When producing an ELF output file, if the linker script uses the ++ `SIZEOF_HEADERS' builtin function, the linker must compute the ++ number of program headers before it has determined all the section ++ addresses and sizes. If the linker later discovers that it needs ++ additional program headers, it will report an error `not enough ++ room for program headers'. To avoid this error, you must avoid ++ using the `SIZEOF_HEADERS' function, or you must rework your linker ++ script to avoid forcing the linker to use additional program ++ headers, or you must define the program headers yourself using the ++ `PHDRS' command (*note PHDRS::). ++ ++ ++File: ld.info, Node: Implicit Linker Scripts, Prev: Expressions, Up: Scripts ++ ++3.11 Implicit Linker Scripts ++============================ ++ ++If you specify a linker input file which the linker can not recognize as ++an object file or an archive file, it will try to read the file as a ++linker script. If the file can not be parsed as a linker script, the ++linker will report an error. ++ ++ An implicit linker script will not replace the default linker script. ++ ++ Typically an implicit linker script would contain only symbol ++assignments, or the `INPUT', `GROUP', or `VERSION' commands. ++ ++ Any input files read because of an implicit linker script will be ++read at the position in the command line where the implicit linker ++script was read. This can affect archive searching. ++ ++ ++File: ld.info, Node: Machine Dependent, Next: BFD, Prev: Scripts, Up: Top ++ ++4 Machine Dependent Features ++**************************** ++ ++`ld' has additional features on some platforms; the following sections ++describe them. Machines where `ld' has no additional functionality are ++not listed. ++ ++* Menu: ++ ++ ++* H8/300:: `ld' and the H8/300 ++ ++* i960:: `ld' and the Intel 960 family ++ ++* ARM:: `ld' and the ARM family ++ ++* AVR32:: `ld' and AVR32 processors ++ ++* HPPA ELF32:: `ld' and HPPA 32-bit ELF ++ ++* MMIX:: `ld' and MMIX ++ ++* MSP430:: `ld' and MSP430 ++ ++* PowerPC ELF32:: `ld' and PowerPC 32-bit ELF Support ++ ++* PowerPC64 ELF64:: `ld' and PowerPC64 64-bit ELF Support ++ ++* TI COFF:: `ld' and TI COFF ++ ++* WIN32:: `ld' and WIN32 (cygwin/mingw) ++ ++* Xtensa:: `ld' and Xtensa Processors ++ ++ ++File: ld.info, Node: H8/300, Next: i960, Up: Machine Dependent ++ ++4.1 `ld' and the H8/300 ++======================= ++ ++For the H8/300, `ld' can perform these global optimizations when you ++specify the `--relax' command-line option. ++ ++_relaxing address modes_ ++ `ld' finds all `jsr' and `jmp' instructions whose targets are ++ within eight bits, and turns them into eight-bit program-counter ++ relative `bsr' and `bra' instructions, respectively. ++ ++_synthesizing instructions_ ++ `ld' finds all `mov.b' instructions which use the sixteen-bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use the eight-bit address form. (That is: the ++ linker turns `mov.b `@'AA:16' into `mov.b `@'AA:8' whenever the ++ address AA is in the top page of memory). ++ ++_bit manipulation instructions_ ++ `ld' finds all bit manipulation instructions like `band, bclr, ++ biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, ++ bxor' which use 32 bit and 16 bit absolute address form, but refer ++ to the top page of memory, and changes them to use the 8 bit ++ address form. (That is: the linker turns `bset #xx:3,`@'AA:32' ++ into `bset #xx:3,`@'AA:8' whenever the address AA is in the top ++ page of memory). ++ ++_system control instructions_ ++ `ld' finds all `ldc.w, stc.w' instrcutions which use the 32 bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use 16 bit address form. (That is: the linker ++ turns `ldc.w `@'AA:32,ccr' into `ldc.w `@'AA:16,ccr' whenever the ++ address AA is in the top page of memory). ++ ++ ++File: ld.info, Node: i960, Next: ARM, Prev: H8/300, Up: Machine Dependent ++ ++4.2 `ld' and the Intel 960 Family ++================================= ++ ++You can use the `-AARCHITECTURE' command line option to specify one of ++the two-letter names identifying members of the 960 family; the option ++specifies the desired output target, and warns of any incompatible ++instructions in the input files. It also modifies the linker's search ++strategy for archive libraries, to support the use of libraries ++specific to each particular architecture, by including in the search ++loop names suffixed with the string identifying the architecture. ++ ++ For example, if your `ld' command line included `-ACA' as well as ++`-ltry', the linker would look (in its built-in search paths, and in ++any paths you specify with `-L') for a library with the names ++ ++ try ++ libtry.a ++ tryca ++ libtryca.a ++ ++The first two possibilities would be considered in any event; the last ++two are due to the use of `-ACA'. ++ ++ You can meaningfully use `-A' more than once on a command line, since ++the 960 architecture family allows combination of target architectures; ++each use will add another pair of name variants to search for when `-l' ++specifies a library. ++ ++ `ld' supports the `--relax' option for the i960 family. If you ++specify `--relax', `ld' finds all `balx' and `calx' instructions whose ++targets are within 24 bits, and turns them into 24-bit program-counter ++relative `bal' and `cal' instructions, respectively. `ld' also turns ++`cal' instructions into `bal' instructions when it determines that the ++target subroutine is a leaf routine (that is, the target subroutine does ++not itself call any subroutines). ++ ++ +++File: ld.info, Node: ARM, Next: AVR32, Prev: i960, Up: Machine Dependent ++ ++4.3 `ld' and the ARM family ++=========================== ++ ++For the ARM, `ld' will generate code stubs to allow functions calls ++betweem ARM and Thumb code. These stubs only work with code that has ++been compiled and assembled with the `-mthumb-interwork' command line ++option. If it is necessary to link with old ARM object files or ++libraries, which have not been compiled with the -mthumb-interwork ++option then the `--support-old-code' command line switch should be ++given to the linker. This will make it generate larger stub functions ++which will work with non-interworking aware ARM code. Note, however, ++the linker does not support generating stubs for function calls to ++non-interworking aware Thumb code. ++ ++ The `--thumb-entry' switch is a duplicate of the generic `--entry' ++switch, in that it sets the program's starting address. But it also ++sets the bottom bit of the address, so that it can be branched to using ++a BX instruction, and the program will start executing in Thumb mode ++straight away. ++ ++ The `--be8' switch instructs `ld' to generate BE8 format ++executables. This option is only valid when linking big-endian objects. ++The resulting image will contain big-endian data and little-endian code. ++ ++ The `R_ARM_TARGET1' relocation is typically used for entries in the ++`.init_array' section. It is interpreted as either `R_ARM_REL32' or ++`R_ARM_ABS32', depending on the target. The `--target1-rel' and ++`--target1-abs' switches override the default. ++ ++ The `--target2=type' switch overrides the default definition of the ++`R_ARM_TARGET2' relocation. Valid values for `type', their meanings, ++and target defaults are as follows: ++`rel' ++ `R_ARM_REL32' (arm*-*-elf, arm*-*-eabi) ++ ++`abs' ++ `R_ARM_ABS32' (arm*-*-symbianelf) ++ ++`got-rel' ++ `R_ARM_GOT_PREL' (arm*-*-linux, arm*-*-*bsd) ++ ++ The `R_ARM_V4BX' relocation (defined by the ARM AAELF specification) ++enables objects compiled for the ARMv4 architecture to be ++interworking-safe when linked with other objects compiled for ARMv4t, ++but also allows pure ARMv4 binaries to be built from the same ARMv4 ++objects. ++ ++ In the latter case, the switch `--fix-v4bx' must be passed to the ++linker, which causes v4t `BX rM' instructions to be rewritten as `MOV ++PC,rM', since v4 processors do not have a `BX' instruction. ++ ++ In the former case, the switch should not be used, and `R_ARM_V4BX' ++relocations are ignored. ++ ++ The `--use-blx' switch enables the linker to use ARM/Thumb BLX ++instructions (available on ARMv5t and above) in various situations. ++Currently it is used to perform calls via the PLT from Thumb code using ++BLX rather than using BX and a mode-switching stub before each PLT ++entry. This should lead to such calls executing slightly faster. ++ ++ This option is enabled implicitly for SymbianOS, so there is no need ++to specify it if you are using that target. ++ ++ ++File: ld.info, Node: AVR32, Next: HPPA ELF32, Prev: ARM, Up: Machine Dependent ++ ++4.4 `ld' and AVR32 processors ++============================= ++ ++`--direct-data' ++ ++`--no-direct-data' ++ Taking the address of a symbol can often be done by using a direct ++ `mov' or pc-relative `sub' instruction, which is faster than using ++ a PC- or GOT-relative load, especially on the uC3 processors. ++ However, this does not always work when dealing with symbols in ++ the `.data' section so this optimization is disabled by default. ++ ++ Specifying `--direct-data' will enable this optimization. Note ++ that this may cause `relocation truncated to fit' errors for ++ certain large programs. If this happens, the optimization can be ++ turned off by specifying `--no-direct-data'. ++ ++ All known issues with direct data optimizations are detected at ++ link time, so if the linker doesn't complain, the result should ++ run just fine. ++ ++ ++File: ld.info, Node: HPPA ELF32, Next: MMIX, Prev: AVR32, Up: Machine Dependent ++ ++4.5 `ld' and HPPA 32-bit ELF Support ++==================================== ++ ++When generating a shared library, `ld' will by default generate import ++stubs suitable for use with a single sub-space application. The ++`--multi-subspace' switch causes `ld' to generate export stubs, and ++different (larger) import stubs suitable for use with multiple ++sub-spaces. ++ ++ Long branch stubs and import/export stubs are placed by `ld' in stub ++sections located between groups of input sections. `--stub-group-size' ++specifies the maximum size of a group of input sections handled by one ++stub section. Since branch offsets are signed, a stub section may ++serve two groups of input sections, one group before the stub section, ++and one group after it. However, when using conditional branches that ++require stubs, it may be better (for branch prediction) that stub ++sections only serve one group of input sections. A negative value for ++`N' chooses this scheme, ensuring that branches to stubs always use a ++negative offset. Two special values of `N' are recognized, `1' and ++`-1'. These both instruct `ld' to automatically size input section ++groups for the branch types detected, with the same behaviour regarding ++stub placement as other positive or negative values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++single input section larger than the group size specified will of course ++create a larger group (of one section). If input sections are too ++large, it may not be possible for a branch to reach its stub. ++ ++ ++File: ld.info, Node: MMIX, Next: MSP430, Prev: HPPA ELF32, Up: Machine Dependent ++ ++4.6 `ld' and MMIX ++================= ++ ++For MMIX, there is a choice of generating `ELF' object files or `mmo' ++object files when linking. The simulator `mmix' understands the `mmo' ++format. The binutils `objcopy' utility can translate between the two ++formats. ++ ++ There is one special section, the `.MMIX.reg_contents' section. ++Contents in this section is assumed to correspond to that of global ++registers, and symbols referring to it are translated to special ++symbols, equal to registers. In a final link, the start address of the ++`.MMIX.reg_contents' section corresponds to the first allocated global ++register multiplied by 8. Register `$255' is not included in this ++section; it is always set to the program entry, which is at the symbol ++`Main' for `mmo' files. ++ ++ Symbols with the prefix `__.MMIX.start.', for example ++`__.MMIX.start..text' and `__.MMIX.start..data' are special; there must ++be only one each, even if they are local. The default linker script ++uses these to set the default start address of a section. ++ ++ Initial and trailing multiples of zero-valued 32-bit words in a ++section, are left out from an mmo file. ++ ++ ++File: ld.info, Node: MSP430, Next: PowerPC ELF32, Prev: MMIX, Up: Machine Dependent ++ ++4.7 `ld' and MSP430 ++=================== ++ ++For the MSP430 it is possible to select the MPU architecture. The flag ++`-m [mpu type]' will select an appropriate linker script for selected ++MPU type. (To get a list of known MPUs just pass `-m help' option to ++the linker). ++ ++ The linker will recognize some extra sections which are MSP430 ++specific: ++ ++``.vectors'' ++ Defines a portion of ROM where interrupt vectors located. ++ ++``.bootloader'' ++ Defines the bootloader portion of the ROM (if applicable). Any ++ code in this section will be uploaded to the MPU. ++ ++``.infomem'' ++ Defines an information memory section (if applicable). Any code in ++ this section will be uploaded to the MPU. ++ ++``.infomemnobits'' ++ This is the same as the `.infomem' section except that any code in ++ this section will not be uploaded to the MPU. ++ ++``.noinit'' ++ Denotes a portion of RAM located above `.bss' section. ++ ++ The last two sections are used by gcc. ++ ++ ++File: ld.info, Node: PowerPC ELF32, Next: PowerPC64 ELF64, Prev: MSP430, Up: Machine Dependent ++ ++4.8 `ld' and PowerPC 32-bit ELF Support ++======================================= ++ ++Branches on PowerPC processors are limited to a signed 26-bit ++displacement, which may result in `ld' giving `relocation truncated to ++fit' errors with very large programs. `--relax' enables the generation ++of trampolines that can access the entire 32-bit address space. These ++trampolines are inserted at section boundaries, so may not themselves ++be reachable if an input section exceeds 33M in size. ++ ++`--bss-plt' ++ Current PowerPC GCC accepts a `-msecure-plt' option that generates ++ code capable of using a newer PLT and GOT layout that has the ++ security advantage of no executable section ever needing to be ++ writable and no writable section ever being executable. PowerPC ++ `ld' will generate this layout, including stubs to access the PLT, ++ if all input files (including startup and static libraries) were ++ compiled with `-msecure-plt'. `--bss-plt' forces the old BSS PLT ++ (and GOT layout) which can give slightly better performance. ++ ++`--sdata-got' ++ The new secure PLT and GOT are placed differently relative to other ++ sections compared to older BSS PLT and GOT placement. The ++ location of `.plt' must change because the new secure PLT is an ++ initialized section while the old PLT is uninitialized. The ++ reason for the `.got' change is more subtle: The new placement ++ allows `.got' to be read-only in applications linked with `-z ++ relro -z now'. However, this placement means that `.sdata' cannot ++ always be used in shared libraries, because the PowerPC ABI ++ accesses `.sdata' in shared libraries from the GOT pointer. ++ `--sdata-got' forces the old GOT placement. PowerPC GCC doesn't ++ use `.sdata' in shared libraries, so this option is really only ++ useful for other compilers that may do so. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--no-tls-optimize' ++ PowerPC `ld' normally performs some optimization of code sequences ++ used to access Thread-Local Storage. Use this option to disable ++ the optimization. ++ ++ ++File: ld.info, Node: PowerPC64 ELF64, Next: TI COFF, Prev: PowerPC ELF32, Up: Machine Dependent ++ ++4.8 `ld' and PowerPC64 64-bit ELF Support ++========================================= ++ ++`--stub-group-size' ++ Long branch stubs, PLT call stubs and TOC adjusting stubs are ++ placed by `ld' in stub sections located between groups of input ++ sections. `--stub-group-size' specifies the maximum size of a ++ group of input sections handled by one stub section. Since branch ++ offsets are signed, a stub section may serve two groups of input ++ sections, one group before the stub section, and one group after ++ it. However, when using conditional branches that require stubs, ++ it may be better (for branch prediction) that stub sections only ++ serve one group of input sections. A negative value for `N' ++ chooses this scheme, ensuring that branches to stubs always use a ++ negative offset. Two special values of `N' are recognized, `1' ++ and `-1'. These both instruct `ld' to automatically size input ++ section groups for the branch types detected, with the same ++ behaviour regarding stub placement as other positive or negative ++ values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++ single input section larger than the group size specified will of ++ course create a larger group (of one section). If input sections ++ are too large, it may not be possible for a branch to reach its ++ stub. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--dotsyms, --no-dotsyms' ++ These two options control how `ld' interprets version patterns in ++ a version script. Older PowerPC64 compilers emitted both a ++ function descriptor symbol with the same name as the function, and ++ a code entry symbol with the name prefixed by a dot (`.'). To ++ properly version a function `foo', the version script thus needs ++ to control both `foo' and `.foo'. The option `--dotsyms', on by ++ default, automatically adds the required dot-prefixed patterns. ++ Use `--no-dotsyms' to disable this feature. ++ ++`--no-tls-optimize' ++ PowerPC64 `ld' normally performs some optimization of code ++ sequences used to access Thread-Local Storage. Use this option to ++ disable the optimization. ++ ++`--no-opd-optimize' ++ PowerPC64 `ld' normally removes `.opd' section entries ++ corresponding to deleted link-once functions, or functions removed ++ by the action of `--gc-sections' or linker scrip `/DISCARD/'. Use ++ this option to disable `.opd' optimization. ++ ++`--non-overlapping-opd' ++ Some PowerPC64 compilers have an option to generate compressed ++ `.opd' entries spaced 16 bytes apart, overlapping the third word, ++ the static chain pointer (unused in C) with the first word of the ++ next entry. This option expands such entries to the full 24 bytes. ++ ++`--no-toc-optimize' ++ PowerPC64 `ld' normally removes unused `.toc' section entries. ++ Such entries are detected by examining relocations that reference ++ the TOC in code sections. A reloc in a deleted code section marks ++ a TOC word as unneeded, while a reloc in a kept code section marks ++ a TOC word as needed. Since the TOC may reference itself, TOC ++ relocs are also examined. TOC words marked as both needed and ++ unneeded will of course be kept. TOC words without any referencing ++ reloc are assumed to be part of a multi-word entry, and are kept or ++ discarded as per the nearest marked preceding word. This works ++ reliably for compiler generated code, but may be incorrect if ++ assembly code is used to insert TOC entries. Use this option to ++ disable the optimization. ++ ++`--no-multi-toc' ++ By default, PowerPC64 GCC generates code for a TOC model where TOC ++ entries are accessed with a 16-bit offset from r2. This limits the ++ total TOC size to 64K. PowerPC64 `ld' extends this limit by ++ grouping code sections such that each group uses less than 64K for ++ its TOC entries, then inserts r2 adjusting stubs between ++ inter-group calls. `ld' does not split apart input sections, so ++ cannot help if a single input file has a `.toc' section that ++ exceeds 64K, most likely from linking multiple files with `ld -r'. ++ Use this option to turn off this feature. ++ ++ ++File: ld.info, Node: TI COFF, Next: WIN32, Prev: PowerPC64 ELF64, Up: Machine Dependent ++ ++4.10 `ld''s Support for Various TI COFF Versions ++=============================================== ++ ++The `--format' switch allows selection of one of the various TI COFF ++versions. The latest of this writing is 2; versions 0 and 1 are also ++supported. The TI COFF versions also vary in header byte-order format; ++`ld' will read any version or byte order, but the output header format ++depends on the default specified by the specific target. ++ ++ ++File: ld.info, Node: WIN32, Next: Xtensa, Prev: TI COFF, Up: Machine Dependent ++ ++4.11 `ld' and WIN32 (cygwin/mingw) ++================================== ++ ++This section describes some of the win32 specific `ld' issues. See ++*Note Command Line Options: Options. for detailed decription of the ++command line options mentioned here. ++ ++_import libraries_ ++ The standard Windows linker creates and uses so-called import ++ libraries, which contains information for linking to dll's. They ++ are regular static archives and are handled as any other static ++ archive. The cygwin and mingw ports of `ld' have specific support ++ for creating such libraries provided with the `--out-implib' ++ command line option. ++ ++_exporting DLL symbols_ ++ The cygwin/mingw `ld' has several ways to export symbols for dll's. ++ ++ _using auto-export functionality_ ++ By default `ld' exports symbols with the auto-export ++ functionality, which is controlled by the following command ++ line options: ++ ++ * -export-all-symbols [This is the default] ++ ++ * -exclude-symbols ++ ++ * -exclude-libs ++ ++ If, however, `--export-all-symbols' is not given explicitly ++ on the command line, then the default auto-export behavior ++ will be _disabled_ if either of the following are true: ++ ++ * A DEF file is used. ++ ++ * Any symbol in any object file was marked with the ++ __declspec(dllexport) attribute. ++ ++ _using a DEF file_ ++ Another way of exporting symbols is using a DEF file. A DEF ++ file is an ASCII file containing definitions of symbols which ++ should be exported when a dll is created. Usually it is ++ named `.def' and is added as any other object file ++ to the linker's command line. The file's name must end in ++ `.def' or `.DEF'. ++ ++ gcc -o .def ++ ++ Using a DEF file turns off the normal auto-export behavior, ++ unless the `--export-all-symbols' option is also used. ++ ++ Here is an example of a DEF file for a shared library called ++ `xyz.dll': ++ ++ LIBRARY "xyz.dll" BASE=0x20000000 ++ ++ EXPORTS ++ foo ++ bar ++ _bar = bar ++ another_foo = abc.dll.afoo ++ var1 DATA ++ ++ This example defines a DLL with a non-default base address ++ and five symbols in the export table. The third exported ++ symbol `_bar' is an alias for the second. The fourth symbol, ++ `another_foo' is resolved by "forwarding" to another module ++ and treating it as an alias for `afoo' exported from the DLL ++ `abc.dll'. The final symbol `var1' is declared to be a data ++ object. ++ ++ The optional `LIBRARY ' command indicates the _internal_ ++ name of the output DLL. If `' does not include a suffix, ++ the default library suffix, `.DLL' is appended. ++ ++ When the .DEF file is used to build an application. rather ++ than a library, the `NAME ' command shoud be used ++ instead of `LIBRARY'. If `' does not include a suffix, ++ the default executable suffix, `.EXE' is appended. ++ ++ With either `LIBRARY ' or `NAME ' the optional ++ specification `BASE = ' may be used to specify a ++ non-default base address for the image. ++ ++ If neither `LIBRARY ' nor `NAME ' is specified, ++ or they specify an empty string, the internal name is the ++ same as the filename specified on the command line. ++ ++ The complete specification of an export symbol is: ++ ++ EXPORTS ++ ( ( ( [ = ] ) ++ | ( = . )) ++ [ @ ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) * ++ ++ Declares `' as an exported symbol from the DLL, or ++ declares `' as an exported alias for `'; or ++ declares `' as a "forward" alias for the symbol ++ `' in the DLL `'. Optionally, ++ the symbol may be exported by the specified ordinal ++ `' alias. ++ ++ The optional keywords that follow the declaration indicate: ++ ++ `NONAME': Do not put the symbol name in the DLL's export ++ table. It will still be exported by its ordinal alias ++ (either the value specified by the .def specification or, ++ otherwise, the value assigned by the linker). The symbol ++ name, however, does remain visible in the import library (if ++ any), unless `PRIVATE' is also specified. ++ ++ `DATA': The symbol is a variable or object, rather than a ++ function. The import lib will export only an indirect ++ reference to `foo' as the symbol `_imp__foo' (ie, `foo' must ++ be resolved as `*_imp__foo'). ++ ++ `CONSTANT': Like `DATA', but put the undecorated `foo' as ++ well as `_imp__foo' into the import library. Both refer to the ++ read-only import address table's pointer to the variable, not ++ to the variable itself. This can be dangerous. If the user ++ code fails to add the `dllimport' attribute and also fails to ++ explicitly add the extra indirection that the use of the ++ attribute enforces, the application will behave unexpectedly. ++ ++ `PRIVATE': Put the symbol in the DLL's export table, but do ++ not put it into the static import library used to resolve ++ imports at link time. The symbol can still be imported using ++ the `LoadLibrary/GetProcAddress' API at runtime or by by ++ using the GNU ld extension of linking directly to the DLL ++ without an import library. ++ ++ See ld/deffilep.y in the binutils sources for the full ++ specification of other DEF file statements ++ ++ While linking a shared dll, `ld' is able to create a DEF file ++ with the `--output-def ' command line option. ++ ++ _Using decorations_ ++ Another way of marking symbols for export is to modify the ++ source code itself, so that when building the DLL each symbol ++ to be exported is declared as: ++ ++ __declspec(dllexport) int a_variable ++ __declspec(dllexport) void a_function(int with_args) ++ ++ All such symbols will be exported from the DLL. If, however, ++ any of the object files in the DLL contain symbols decorated ++ in this way, then the normal auto-export behavior is ++ disabled, unless the `--export-all-symbols' option is also ++ used. ++ ++ Note that object files that wish to access these symbols must ++ _not_ decorate them with dllexport. Instead, they should use ++ dllimport, instead: ++ ++ __declspec(dllimport) int a_variable ++ __declspec(dllimport) void a_function(int with_args) ++ ++ This complicates the structure of library header files, ++ because when included by the library itself the header must ++ declare the variables and functions as dllexport, but when ++ included by client code the header must declare them as ++ dllimport. There are a number of idioms that are typically ++ used to do this; often client code can omit the __declspec() ++ declaration completely. See `--enable-auto-import' and ++ `automatic data imports' for more imformation. ++ ++_automatic data imports_ ++ The standard Windows dll format supports data imports from dlls ++ only by adding special decorations (dllimport/dllexport), which ++ let the compiler produce specific assembler instructions to deal ++ with this issue. This increases the effort necessary to port ++ existing Un*x code to these platforms, especially for large c++ ++ libraries and applications. The auto-import feature, which was ++ initially provided by Paul Sokolovsky, allows one to omit the ++ decorations to archieve a behavior that conforms to that on ++ POSIX/Un*x platforms. This feature is enabled with the ++ `--enable-auto-import' command-line option, although it is enabled ++ by default on cygwin/mingw. The `--enable-auto-import' option ++ itself now serves mainly to suppress any warnings that are ++ ordinarily emitted when linked objects trigger the feature's use. ++ ++ auto-import of variables does not always work flawlessly without ++ additional assistance. Sometimes, you will see this message ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ The `--enable-auto-import' documentation explains why this error ++ occurs, and several methods that can be used to overcome this ++ difficulty. One of these methods is the _runtime pseudo-relocs_ ++ feature, described below. ++ ++ For complex variables imported from DLLs (such as structs or ++ classes), object files typically contain a base address for the ++ variable and an offset (_addend_) within the variable-to specify a ++ particular field or public member, for instance. Unfortunately, ++ the runtime loader used in win32 environments is incapable of ++ fixing these references at runtime without the additional ++ information supplied by dllimport/dllexport decorations. The ++ standard auto-import feature described above is unable to resolve ++ these references. ++ ++ The `--enable-runtime-pseudo-relocs' switch allows these ++ references to be resolved without error, while leaving the task of ++ adjusting the references themselves (with their non-zero addends) ++ to specialized code provided by the runtime environment. Recent ++ versions of the cygwin and mingw environments and compilers ++ provide this runtime support; older versions do not. However, the ++ support is only necessary on the developer's platform; the ++ compiled result will run without error on an older system. ++ ++ `--enable-runtime-pseudo-relocs' is not the default; it must be ++ explicitly enabled as needed. ++ ++_direct linking to a dll_ ++ The cygwin/mingw ports of `ld' support the direct linking, ++ including data symbols, to a dll without the usage of any import ++ libraries. This is much faster and uses much less memory than ++ does the traditional import library method, expecially when ++ linking large libraries or applications. When `ld' creates an ++ import lib, each function or variable exported from the dll is ++ stored in its own bfd, even though a single bfd could contain many ++ exports. The overhead involved in storing, loading, and ++ processing so many bfd's is quite large, and explains the ++ tremendous time, memory, and storage needed to link against ++ particularly large or complex libraries when using import libs. ++ ++ Linking directly to a dll uses no extra command-line switches ++ other than `-L' and `-l', because `ld' already searches for a ++ number of names to match each library. All that is needed from ++ the developer's perspective is an understanding of this search, in ++ order to force ld to select the dll instead of an import library. ++ ++ For instance, when ld is called with the argument `-lxxx' it will ++ attempt to find, in the first directory of its search path, ++ ++ libxxx.dll.a ++ xxx.dll.a ++ libxxx.a ++ cygxxx.dll (*) ++ libxxx.dll ++ xxx.dll ++ ++ before moving on to the next directory in the search path. ++ ++ (*) Actually, this is not `cygxxx.dll' but in fact is ++ `xxx.dll', where `' is set by the `ld' option ++ `--dll-search-prefix='. In the case of cygwin, the ++ standard gcc spec file includes `--dll-search-prefix=cyg', so in ++ effect we actually search for `cygxxx.dll'. ++ ++ Other win32-based unix environments, such as mingw or pw32, may ++ use other `'es, although at present only cygwin makes use ++ of this feature. It was originally intended to help avoid name ++ conflicts among dll's built for the various win32/un*x ++ environments, so that (for example) two versions of a zlib dll ++ could coexist on the same machine. ++ ++ The generic cygwin/mingw path layout uses a `bin' directory for ++ applications and dll's and a `lib' directory for the import ++ libraries (using cygwin nomenclature): ++ ++ bin/ ++ cygxxx.dll ++ lib/ ++ libxxx.dll.a (in case of dll's) ++ libxxx.a (in case of static archive) ++ ++ Linking directly to a dll without using the import library can be ++ done two ways: ++ ++ 1. Use the dll directly by adding the `bin' path to the link line ++ gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx ++ ++ However, as the dll's often have version numbers appended to their ++ names (`cygncurses-5.dll') this will often fail, unless one ++ specifies `-L../bin -lncurses-5' to include the version. Import ++ libs are generally not versioned, and do not have this difficulty. ++ ++ 2. Create a symbolic link from the dll to a file in the `lib' ++ directory according to the above mentioned search pattern. This ++ should be used to avoid unwanted changes in the tools needed for ++ making the app/dll. ++ ++ ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a] ++ ++ Then you can link without any make environment changes. ++ ++ gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx ++ ++ This technique also avoids the version number problems, because ++ the following is perfectly legal ++ ++ bin/ ++ cygxxx-5.dll ++ lib/ ++ libxxx.dll.a -> ../bin/cygxxx-5.dll ++ ++ Linking directly to a dll without using an import lib will work ++ even when auto-import features are exercised, and even when ++ `--enable-runtime-pseudo-relocs' is used. ++ ++ Given the improvements in speed and memory usage, one might ++ justifiably wonder why import libraries are used at all. There ++ are two reasons: ++ ++ 1. Until recently, the link-directly-to-dll functionality did _not_ ++ work with auto-imported data. ++ ++ 2. Sometimes it is necessary to include pure static objects within ++ the import library (which otherwise contains only bfd's for ++ indirection symbols that point to the exports of a dll). Again, ++ the import lib for the cygwin kernel makes use of this ability, ++ and it is not possible to do this without an import lib. ++ ++ So, import libs are not going away. But the ability to replace ++ true import libs with a simple symbolic link to (or a copy of) a ++ dll, in most cases, is a useful addition to the suite of tools ++ binutils makes available to the win32 developer. Given the ++ massive improvements in memory requirements during linking, storage ++ requirements, and linking speed, we expect that many developers ++ will soon begin to use this feature whenever possible. ++ ++_symbol aliasing_ ++ ++ _adding additional names_ ++ Sometimes, it is useful to export symbols with additional ++ names. A symbol `foo' will be exported as `foo', but it can ++ also be exported as `_foo' by using special directives in the ++ DEF file when creating the dll. This will affect also the ++ optional created import library. Consider the following DEF ++ file: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ foo ++ _foo = foo ++ ++ The line `_foo = foo' maps the symbol `foo' to `_foo'. ++ ++ Another method for creating a symbol alias is to create it in ++ the source code using the "weak" attribute: ++ ++ void foo () { /* Do something. */; } ++ void _foo () __attribute__ ((weak, alias ("foo"))); ++ ++ See the gcc manual for more information about attributes and ++ weak symbols. ++ ++ _renaming symbols_ ++ Sometimes it is useful to rename exports. For instance, the ++ cygwin kernel does this regularly. A symbol `_foo' can be ++ exported as `foo' but not as `_foo' by using special ++ directives in the DEF file. (This will also affect the import ++ library, if it is created). In the following example: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ _foo = foo ++ ++ The line `_foo = foo' maps the exported symbol `foo' to ++ `_foo'. ++ ++ Note: using a DEF file disables the default auto-export behavior, ++ unless the `--export-all-symbols' command line option is used. ++ If, however, you are trying to rename symbols, then you should list ++ _all_ desired exports in the DEF file, including the symbols that ++ are not being renamed, and do _not_ use the `--export-all-symbols' ++ option. If you list only the renamed symbols in the DEF file, and ++ use `--export-all-symbols' to handle the other symbols, then the ++ both the new names _and_ the original names for the renamed ++ symbols will be exported. In effect, you'd be aliasing those ++ symbols, not renaming them, which is probably not what you wanted. ++ ++_weak externals_ ++ The Windows object format, PE, specifies a form of weak symbols ++ called weak externals. When a weak symbol is linked and the ++ symbol is not defined, the weak symbol becomes an alias for some ++ other symbol. There are three variants of weak externals: ++ * Definition is searched for in objects and libraries, ++ historically called lazy externals. ++ ++ * Definition is searched for only in other objects, not in ++ libraries. This form is not presently implemented. ++ ++ * No search; the symbol is an alias. This form is not presently ++ implemented. ++ As a GNU extension, weak symbols that do not specify an alternate ++ symbol are supported. If the symbol is undefined when linking, ++ the symbol uses a default value. ++ ++ ++File: ld.info, Node: Xtensa, Prev: WIN32, Up: Machine Dependent ++ ++4.12 `ld' and Xtensa Processors ++=============================== ++ ++The default `ld' behavior for Xtensa processors is to interpret ++`SECTIONS' commands so that lists of explicitly named sections in a ++specification with a wildcard file will be interleaved when necessary to ++keep literal pools within the range of PC-relative load offsets. For ++example, with the command: ++ ++ SECTIONS ++ { ++ .text : { ++ *(.literal .text) ++ } ++ } ++ ++`ld' may interleave some of the `.literal' and `.text' sections from ++different object files to ensure that the literal pools are within the ++range of PC-relative load offsets. A valid interleaving might place ++the `.literal' sections from an initial group of files followed by the ++`.text' sections of that group of files. Then, the `.literal' sections ++from the rest of the files and the `.text' sections from the rest of ++the files would follow. ++ ++ Relaxation is enabled by default for the Xtensa version of `ld' and ++provides two important link-time optimizations. The first optimization ++is to combine identical literal values to reduce code size. A redundant ++literal will be removed and all the `L32R' instructions that use it ++will be changed to reference an identical literal, as long as the ++location of the replacement literal is within the offset range of all ++the `L32R' instructions. The second optimization is to remove ++unnecessary overhead from assembler-generated "longcall" sequences of ++`L32R'/`CALLXN' when the target functions are within range of direct ++`CALLN' instructions. ++ ++ For each of these cases where an indirect call sequence can be ++optimized to a direct call, the linker will change the `CALLXN' ++instruction to a `CALLN' instruction, remove the `L32R' instruction, ++and remove the literal referenced by the `L32R' instruction if it is ++not used for anything else. Removing the `L32R' instruction always ++reduces code size but can potentially hurt performance by changing the ++alignment of subsequent branch targets. By default, the linker will ++always preserve alignments, either by switching some instructions ++between 24-bit encodings and the equivalent density instructions or by ++inserting a no-op in place of the `L32R' instruction that was removed. ++If code size is more important than performance, the `--size-opt' ++option can be used to prevent the linker from widening density ++instructions or inserting no-ops, except in a few cases where no-ops ++are required for correctness. ++ ++ The following Xtensa-specific command-line options can be used to ++control the linker: ++ ++`--no-relax' ++ Since the Xtensa version of `ld' enables the `--relax' option by ++ default, the `--no-relax' option is provided to disable relaxation. ++ ++`--size-opt' ++ When optimizing indirect calls to direct calls, optimize for code ++ size more than performance. With this option, the linker will not ++ insert no-ops or widen density instructions to preserve branch ++ target alignment. There may still be some cases where no-ops are ++ required to preserve the correctness of the code. ++ ++ ++File: ld.info, Node: BFD, Next: Reporting Bugs, Prev: Machine Dependent, Up: Top ++ ++5 BFD ++***** ++ ++The linker accesses object and archive files using the BFD libraries. ++These libraries allow the linker to use the same routines to operate on ++object files whatever the object file format. A different object file ++format can be supported simply by creating a new BFD back end and adding ++it to the library. To conserve runtime memory, however, the linker and ++associated tools are usually configured to support only a subset of the ++object file formats available. You can use `objdump -i' (*note ++objdump: (binutils.info)objdump.) to list all the formats available for ++your configuration. ++ ++ As with most implementations, BFD is a compromise between several ++conflicting requirements. The major factor influencing BFD design was ++efficiency: any time used converting between formats is time which ++would not have been spent had BFD not been involved. This is partly ++offset by abstraction payback; since BFD simplifies applications and ++back ends, more time and care may be spent optimizing algorithms for a ++greater speed. ++ ++ One minor artifact of the BFD solution which you should bear in mind ++is the potential for information loss. There are two places where ++useful information can be lost using the BFD mechanism: during ++conversion and during output. *Note BFD information loss::. ++ ++* Menu: ++ ++* BFD outline:: How it works: an outline of BFD ++ ++ ++File: ld.info, Node: BFD outline, Up: BFD ++ ++5.1 How It Works: An Outline of BFD ++=================================== ++ ++When an object file is opened, BFD subroutines automatically determine ++the format of the input object file. They then build a descriptor in ++memory with pointers to routines that will be used to access elements of ++the object file's data structures. ++ ++ As different information from the object files is required, BFD ++reads from different sections of the file and processes them. For ++example, a very common operation for the linker is processing symbol ++tables. Each BFD back end provides a routine for converting between ++the object file's representation of symbols and an internal canonical ++format. When the linker asks for the symbol table of an object file, it ++calls through a memory pointer to the routine from the relevant BFD ++back end which reads and converts the table into a canonical form. The ++linker then operates upon the canonical form. When the link is finished ++and the linker writes the output file's symbol table, another BFD back ++end routine is called to take the newly created symbol table and ++convert it into the chosen output format. ++ ++* Menu: ++ ++* BFD information loss:: Information Loss ++* Canonical format:: The BFD canonical object-file format ++ ++ ++File: ld.info, Node: BFD information loss, Next: Canonical format, Up: BFD outline ++ ++5.1.1 Information Loss ++---------------------- ++ ++_Information can be lost during output._ The output formats supported ++by BFD do not provide identical facilities, and information which can ++be described in one form has nowhere to go in another format. One ++example of this is alignment information in `b.out'. There is nowhere ++in an `a.out' format file to store alignment information on the ++contained data, so when a file is linked from `b.out' and an `a.out' ++image is produced, alignment information will not propagate to the ++output file. (The linker will still use the alignment information ++internally, so the link is performed correctly). ++ ++ Another example is COFF section names. COFF files may contain an ++unlimited number of sections, each one with a textual section name. If ++the target of the link is a format which does not have many sections ++(e.g., `a.out') or has sections without names (e.g., the Oasys format), ++the link cannot be done simply. You can circumvent this problem by ++describing the desired input-to-output section mapping with the linker ++command language. ++ ++ _Information can be lost during canonicalization._ The BFD internal ++canonical form of the external formats is not exhaustive; there are ++structures in input formats for which there is no direct representation ++internally. This means that the BFD back ends cannot maintain all ++possible data richness through the transformation between external to ++internal and back to external formats. ++ ++ This limitation is only a problem when an application reads one ++format and writes another. Each BFD back end is responsible for ++maintaining as much data as possible, and the internal BFD canonical ++form has structures which are opaque to the BFD core, and exported only ++to the back ends. When a file is read in one format, the canonical form ++is generated for BFD and the application. At the same time, the back ++end saves away any information which may otherwise be lost. If the data ++is then written back in the same format, the back end routine will be ++able to use the canonical form provided by the BFD core as well as the ++information it prepared earlier. Since there is a great deal of ++commonality between back ends, there is no information lost when ++linking or copying big endian COFF to little endian COFF, or `a.out' to ++`b.out'. When a mixture of formats is linked, the information is only ++lost from the files whose format differs from the destination. ++ ++ ++File: ld.info, Node: Canonical format, Prev: BFD information loss, Up: BFD outline ++ ++5.1.2 The BFD canonical object-file format ++------------------------------------------ ++ ++The greatest potential for loss of information occurs when there is the ++least overlap between the information provided by the source format, ++that stored by the canonical format, and that needed by the destination ++format. A brief description of the canonical form may help you ++understand which kinds of data you can count on preserving across ++conversions. ++ ++_files_ ++ Information stored on a per-file basis includes target machine ++ architecture, particular implementation format type, a demand ++ pageable bit, and a write protected bit. Information like Unix ++ magic numbers is not stored here--only the magic numbers' meaning, ++ so a `ZMAGIC' file would have both the demand pageable bit and the ++ write protected text bit set. The byte order of the target is ++ stored on a per-file basis, so that big- and little-endian object ++ files may be used with one another. ++ ++_sections_ ++ Each section in the input file contains the name of the section, ++ the section's original address in the object file, size and ++ alignment information, various flags, and pointers into other BFD ++ data structures. ++ ++_symbols_ ++ Each symbol contains a pointer to the information for the object ++ file which originally defined it, its name, its value, and various ++ flag bits. When a BFD back end reads in a symbol table, it ++ relocates all symbols to make them relative to the base of the ++ section where they were defined. Doing this ensures that each ++ symbol points to its containing section. Each symbol also has a ++ varying amount of hidden private data for the BFD back end. Since ++ the symbol points to the original file, the private data format ++ for that symbol is accessible. `ld' can operate on a collection ++ of symbols of wildly different formats without problems. ++ ++ Normal global and simple local symbols are maintained on output, ++ so an output file (no matter its format) will retain symbols ++ pointing to functions and to global, static, and common variables. ++ Some symbol information is not worth retaining; in `a.out', type ++ information is stored in the symbol table as long symbol names. ++ This information would be useless to most COFF debuggers; the ++ linker has command line switches to allow users to throw it away. ++ ++ There is one word of type information within the symbol, so if the ++ format supports symbol type information within symbols (for ++ example, COFF, IEEE, Oasys) and the type is simple enough to fit ++ within one word (nearly everything but aggregates), the ++ information will be preserved. ++ ++_relocation level_ ++ Each canonical BFD relocation record contains a pointer to the ++ symbol to relocate to, the offset of the data to relocate, the ++ section the data is in, and a pointer to a relocation type ++ descriptor. Relocation is performed by passing messages through ++ the relocation type descriptor and the symbol pointer. Therefore, ++ relocations can be performed on output data using a relocation ++ method that is only available in one of the input formats. For ++ instance, Oasys provides a byte relocation format. A relocation ++ record requesting this relocation type would point indirectly to a ++ routine to perform this, so the relocation may be performed on a ++ byte being written to a 68k COFF file, even though 68k COFF has no ++ such relocation type. ++ ++_line numbers_ ++ Object formats can contain, for debugging purposes, some form of ++ mapping between symbols, source line numbers, and addresses in the ++ output file. These addresses have to be relocated along with the ++ symbol information. Each symbol with an associated list of line ++ number records points to the first record of the list. The head ++ of a line number list consists of a pointer to the symbol, which ++ allows finding out the address of the function whose line number ++ is being described. The rest of the list is made up of pairs: ++ offsets into the section and line numbers. Any format which can ++ simply derive this information can pass it successfully between ++ formats (COFF, IEEE and Oasys). ++ ++ ++File: ld.info, Node: Reporting Bugs, Next: MRI, Prev: BFD, Up: Top ++ ++6 Reporting Bugs ++**************** ++ ++Your bug reports play an essential role in making `ld' reliable. ++ ++ Reporting a bug may help you by bringing a solution to your problem, ++or it may not. But in any case the principal function of a bug report ++is to help the entire community by making the next version of `ld' work ++better. Bug reports are your contribution to the maintenance of `ld'. ++ ++ In order for a bug report to serve its purpose, you must include the ++information that enables us to fix the bug. ++ ++* Menu: ++ ++* Bug Criteria:: Have you found a bug? ++* Bug Reporting:: How to report bugs ++ ++ ++File: ld.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs ++ ++6.1 Have You Found a Bug? ++========================= ++ ++If you are not sure whether you have found a bug, here are some ++guidelines: ++ ++ * If the linker gets a fatal signal, for any input whatever, that is ++ a `ld' bug. Reliable linkers never crash. ++ ++ * If `ld' produces an error message for valid input, that is a bug. ++ ++ * If `ld' does not produce an error message for invalid input, that ++ may be a bug. In the general case, the linker can not verify that ++ object files are correct. ++ ++ * If you are an experienced user of linkers, your suggestions for ++ improvement of `ld' are welcome in any case. ++ ++ ++File: ld.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs ++ ++6.2 How to Report Bugs ++====================== ++ ++A number of companies and individuals offer support for GNU products. ++If you obtained `ld' from a support organization, we recommend you ++contact that organization first. ++ ++ You can find contact information for many support companies and ++individuals in the file `etc/SERVICE' in the GNU Emacs distribution. ++ ++ Otherwise, send bug reports for `ld' to `bug-binutils@gnu.org'. ++ ++ The fundamental principle of reporting bugs usefully is this: ++*report all the facts*. If you are not sure whether to state a fact or ++leave it out, state it! ++ ++ Often people omit facts because they think they know what causes the ++problem and assume that some details do not matter. Thus, you might ++assume that the name of a symbol you use in an example does not matter. ++Well, probably it does not, but one cannot be sure. Perhaps the bug ++is a stray memory reference which happens to fetch from the location ++where that name is stored in memory; perhaps, if the name were ++different, the contents of that location would fool the linker into ++doing the right thing despite the bug. Play it safe and give a ++specific, complete example. That is the easiest thing for you to do, ++and the most helpful. ++ ++ Keep in mind that the purpose of a bug report is to enable us to fix ++the bug if it is new to us. Therefore, always write your bug reports ++on the assumption that the bug has not been reported previously. ++ ++ Sometimes people give a few sketchy facts and ask, "Does this ring a ++bell?" This cannot help us fix a bug, so it is basically useless. We ++respond by asking for enough details to enable us to investigate. You ++might as well expedite matters by sending them to begin with. ++ ++ To enable us to fix the bug, you should include all these things: ++ ++ * The version of `ld'. `ld' announces it if you start it with the ++ `--version' argument. ++ ++ Without this, we will not know whether there is any point in ++ looking for the bug in the current version of `ld'. ++ ++ * Any patches you may have applied to the `ld' source, including any ++ patches made to the `BFD' library. ++ ++ * The type of machine you are using, and the operating system name ++ and version number. ++ ++ * What compiler (and its version) was used to compile `ld'--e.g. ++ "`gcc-2.7'". ++ ++ * The command arguments you gave the linker to link your example and ++ observe the bug. To guarantee you will not omit something ++ important, list them all. A copy of the Makefile (or the output ++ from make) is sufficient. ++ ++ If we were to try to guess the arguments, we would probably guess ++ wrong and then we might not encounter the bug. ++ ++ * A complete input file, or set of input files, that will reproduce ++ the bug. It is generally most helpful to send the actual object ++ files provided that they are reasonably small. Say no more than ++ 10K. For bigger files you can either make them available by FTP ++ or HTTP or else state that you are willing to send the object ++ file(s) to whomever requests them. (Note - your email will be ++ going to a mailing list, so we do not want to clog it up with ++ large attachments). But small attachments are best. ++ ++ If the source files were assembled using `gas' or compiled using ++ `gcc', then it may be OK to send the source files rather than the ++ object files. In this case, be sure to say exactly what version of ++ `gas' or `gcc' was used to produce the object files. Also say how ++ `gas' or `gcc' were configured. ++ ++ * A description of what behavior you observe that you believe is ++ incorrect. For example, "It gets a fatal signal." ++ ++ Of course, if the bug is that `ld' gets a fatal signal, then we ++ will certainly notice it. But if the bug is incorrect output, we ++ might not notice unless it is glaringly wrong. You might as well ++ not give us a chance to make a mistake. ++ ++ Even if the problem you experience is a fatal signal, you should ++ still say so explicitly. Suppose something strange is going on, ++ such as, your copy of `ld' is out of synch, or you have ++ encountered a bug in the C library on your system. (This has ++ happened!) Your copy might crash and ours would not. If you told ++ us to expect a crash, then when ours fails to crash, we would know ++ that the bug was not happening for us. If you had not told us to ++ expect a crash, then we would not be able to draw any conclusion ++ from our observations. ++ ++ * If you wish to suggest changes to the `ld' source, send us context ++ diffs, as generated by `diff' with the `-u', `-c', or `-p' option. ++ Always send diffs from the old file to the new file. If you even ++ discuss something in the `ld' source, refer to it by context, not ++ by line number. ++ ++ The line numbers in our development sources will not match those ++ in your sources. Your line numbers would convey no useful ++ information to us. ++ ++ Here are some things that are not necessary: ++ ++ * A description of the envelope of the bug. ++ ++ Often people who encounter a bug spend a lot of time investigating ++ which changes to the input file will make the bug go away and which ++ changes will not affect it. ++ ++ This is often time consuming and not very useful, because the way ++ we will find the bug is by running a single example under the ++ debugger with breakpoints, not by pure deduction from a series of ++ examples. We recommend that you save your time for something else. ++ ++ Of course, if you can find a simpler example to report _instead_ ++ of the original one, that is a convenience for us. Errors in the ++ output will be easier to spot, running under the debugger will take ++ less time, and so on. ++ ++ However, simplification is not vital; if you do not want to do ++ this, report the bug anyway and send us the entire test case you ++ used. ++ ++ * A patch for the bug. ++ ++ A patch for the bug does help us if it is a good one. But do not ++ omit the necessary information, such as the test case, on the ++ assumption that a patch is all we need. We might see problems ++ with your patch and decide to fix the problem another way, or we ++ might not understand it at all. ++ ++ Sometimes with a program as complicated as `ld' it is very hard to ++ construct an example that will make the program follow a certain ++ path through the code. If you do not send us the example, we will ++ not be able to construct one, so we will not be able to verify ++ that the bug is fixed. ++ ++ And if we cannot understand what bug you are trying to fix, or why ++ your patch should be an improvement, we will not install it. A ++ test case will help us to understand. ++ ++ * A guess about what the bug is or what it depends on. ++ ++ Such guesses are usually wrong. Even we cannot guess right about ++ such things without first using the debugger to find the facts. ++ ++ ++File: ld.info, Node: MRI, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top ++ ++Appendix A MRI Compatible Script Files ++************************************** ++ ++To aid users making the transition to GNU `ld' from the MRI linker, ++`ld' can use MRI compatible linker scripts as an alternative to the ++more general-purpose linker scripting language described in *Note ++Scripts::. MRI compatible linker scripts have a much simpler command ++set than the scripting language otherwise used with `ld'. GNU `ld' ++supports the most commonly used MRI linker commands; these commands are ++described here. ++ ++ In general, MRI scripts aren't of much use with the `a.out' object ++file format, since it only has three sections and MRI scripts lack some ++features to make use of them. ++ ++ You can specify a file containing an MRI-compatible script using the ++`-c' command-line option. ++ ++ Each command in an MRI-compatible script occupies its own line; each ++command line starts with the keyword that identifies the command (though ++blank lines are also allowed for punctuation). If a line of an ++MRI-compatible script begins with an unrecognized keyword, `ld' issues ++a warning message, but continues processing the script. ++ ++ Lines beginning with `*' are comments. ++ ++ You can write these commands using all upper-case letters, or all ++lower case; for example, `chip' is the same as `CHIP'. The following ++list shows only the upper-case form of each command. ++ ++`ABSOLUTE SECNAME' ++`ABSOLUTE SECNAME, SECNAME, ... SECNAME' ++ Normally, `ld' includes in the output file all sections from all ++ the input files. However, in an MRI-compatible script, you can ++ use the `ABSOLUTE' command to restrict the sections that will be ++ present in your output program. If the `ABSOLUTE' command is used ++ at all in a script, then only the sections named explicitly in ++ `ABSOLUTE' commands will appear in the linker output. You can ++ still use other input sections (whatever you select on the command ++ line, or using `LOAD') to resolve addresses in the output file. ++ ++`ALIAS OUT-SECNAME, IN-SECNAME' ++ Use this command to place the data from input section IN-SECNAME ++ in a section called OUT-SECNAME in the linker output file. ++ ++ IN-SECNAME may be an integer. ++ ++`ALIGN SECNAME = EXPRESSION' ++ Align the section called SECNAME to EXPRESSION. The EXPRESSION ++ should be a power of two. ++ ++`BASE EXPRESSION' ++ Use the value of EXPRESSION as the lowest address (other than ++ absolute addresses) in the output file. ++ ++`CHIP EXPRESSION' ++`CHIP EXPRESSION, EXPRESSION' ++ This command does nothing; it is accepted only for compatibility. ++ ++`END' ++ This command does nothing whatever; it's only accepted for ++ compatibility. ++ ++`FORMAT OUTPUT-FORMAT' ++ Similar to the `OUTPUT_FORMAT' command in the more general linker ++ language, but restricted to one of these output formats: ++ ++ 1. S-records, if OUTPUT-FORMAT is `S' ++ ++ 2. IEEE, if OUTPUT-FORMAT is `IEEE' ++ ++ 3. COFF (the `coff-m68k' variant in BFD), if OUTPUT-FORMAT is ++ `COFF' ++ ++`LIST ANYTHING...' ++ Print (to the standard output file) a link map, as produced by the ++ `ld' command-line option `-M'. ++ ++ The keyword `LIST' may be followed by anything on the same line, ++ with no change in its effect. ++ ++`LOAD FILENAME' ++`LOAD FILENAME, FILENAME, ... FILENAME' ++ Include one or more object file FILENAME in the link; this has the ++ same effect as specifying FILENAME directly on the `ld' command ++ line. ++ ++`NAME OUTPUT-NAME' ++ OUTPUT-NAME is the name for the program produced by `ld'; the ++ MRI-compatible command `NAME' is equivalent to the command-line ++ option `-o' or the general script language command `OUTPUT'. ++ ++`ORDER SECNAME, SECNAME, ... SECNAME' ++`ORDER SECNAME SECNAME SECNAME' ++ Normally, `ld' orders the sections in its output file in the order ++ in which they first appear in the input files. In an ++ MRI-compatible script, you can override this ordering with the ++ `ORDER' command. The sections you list with `ORDER' will appear ++ first in your output file, in the order specified. ++ ++`PUBLIC NAME=EXPRESSION' ++`PUBLIC NAME,EXPRESSION' ++`PUBLIC NAME EXPRESSION' ++ Supply a value (EXPRESSION) for external symbol NAME used in the ++ linker input files. ++ ++`SECT SECNAME, EXPRESSION' ++`SECT SECNAME=EXPRESSION' ++`SECT SECNAME EXPRESSION' ++ You can use any of these three forms of the `SECT' command to ++ specify the start address (EXPRESSION) for section SECNAME. If ++ you have more than one `SECT' statement for the same SECNAME, only ++ the _first_ sets the start address. ++ ++ ++File: ld.info, Node: GNU Free Documentation License, Next: Index, Prev: MRI, Up: Top ++ ++Appendix B GNU Free Documentation License ++***************************************** ++ ++ Version 1.1, March 2000 ++ ++ Copyright (C) 2000, 2003 Free Software Foundation, Inc. ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ ++ 0. PREAMBLE ++ ++ The purpose of this License is to make a manual, textbook, or other ++ written document "free" in the sense of freedom: to assure everyone ++ the effective freedom to copy and redistribute it, with or without ++ modifying it, either commercially or noncommercially. Secondarily, ++ this License preserves for the author and publisher a way to get ++ credit for their work, while not being considered responsible for ++ modifications made by others. ++ ++ This License is a kind of "copyleft", which means that derivative ++ works of the document must themselves be free in the same sense. ++ It complements the GNU General Public License, which is a copyleft ++ license designed for free software. ++ ++ We have designed this License in order to use it for manuals for ++ free software, because free software needs free documentation: a ++ free program should come with manuals providing the same freedoms ++ that the software does. But this License is not limited to ++ software manuals; it can be used for any textual work, regardless ++ of subject matter or whether it is published as a printed book. ++ We recommend this License principally for works whose purpose is ++ instruction or reference. ++ ++ ++ 1. APPLICABILITY AND DEFINITIONS ++ ++ This License applies to any manual or other work that contains a ++ notice placed by the copyright holder saying it can be distributed ++ under the terms of this License. The "Document", below, refers to ++ any such manual or work. Any member of the public is a licensee, ++ and is addressed as "you." ++ ++ A "Modified Version" of the Document means any work containing the ++ Document or a portion of it, either copied verbatim, or with ++ modifications and/or translated into another language. ++ ++ A "Secondary Section" is a named appendix or a front-matter ++ section of the Document that deals exclusively with the ++ relationship of the publishers or authors of the Document to the ++ Document's overall subject (or to related matters) and contains ++ nothing that could fall directly within that overall subject. ++ (For example, if the Document is in part a textbook of ++ mathematics, a Secondary Section may not explain any mathematics.) ++ The relationship could be a matter of historical connection with ++ the subject or with related matters, or of legal, commercial, ++ philosophical, ethical or political position regarding them. ++ ++ The "Invariant Sections" are certain Secondary Sections whose ++ titles are designated, as being those of Invariant Sections, in ++ the notice that says that the Document is released under this ++ License. ++ ++ The "Cover Texts" are certain short passages of text that are ++ listed, as Front-Cover Texts or Back-Cover Texts, in the notice ++ that says that the Document is released under this License. ++ ++ A "Transparent" copy of the Document means a machine-readable copy, ++ represented in a format whose specification is available to the ++ general public, whose contents can be viewed and edited directly ++ and straightforwardly with generic text editors or (for images ++ composed of pixels) generic paint programs or (for drawings) some ++ widely available drawing editor, and that is suitable for input to ++ text formatters or for automatic translation to a variety of ++ formats suitable for input to text formatters. A copy made in an ++ otherwise Transparent file format whose markup has been designed ++ to thwart or discourage subsequent modification by readers is not ++ Transparent. A copy that is not "Transparent" is called "Opaque." ++ ++ Examples of suitable formats for Transparent copies include plain ++ ASCII without markup, Texinfo input format, LaTeX input format, ++ SGML or XML using a publicly available DTD, and ++ standard-conforming simple HTML designed for human modification. ++ Opaque formats include PostScript, PDF, proprietary formats that ++ can be read and edited only by proprietary word processors, SGML ++ or XML for which the DTD and/or processing tools are not generally ++ available, and the machine-generated HTML produced by some word ++ processors for output purposes only. ++ ++ The "Title Page" means, for a printed book, the title page itself, ++ plus such following pages as are needed to hold, legibly, the ++ material this License requires to appear in the title page. For ++ works in formats which do not have any title page as such, "Title ++ Page" means the text near the most prominent appearance of the ++ work's title, preceding the beginning of the body of the text. ++ ++ 2. VERBATIM COPYING ++ ++ You may copy and distribute the Document in any medium, either ++ commercially or noncommercially, provided that this License, the ++ copyright notices, and the license notice saying this License ++ applies to the Document are reproduced in all copies, and that you ++ add no other conditions whatsoever to those of this License. You ++ may not use technical measures to obstruct or control the reading ++ or further copying of the copies you make or distribute. However, ++ you may accept compensation in exchange for copies. If you ++ distribute a large enough number of copies you must also follow ++ the conditions in section 3. ++ ++ You may also lend copies, under the same conditions stated above, ++ and you may publicly display copies. ++ ++ 3. COPYING IN QUANTITY ++ ++ If you publish printed copies of the Document numbering more than ++ 100, and the Document's license notice requires Cover Texts, you ++ must enclose the copies in covers that carry, clearly and legibly, ++ all these Cover Texts: Front-Cover Texts on the front cover, and ++ Back-Cover Texts on the back cover. Both covers must also clearly ++ and legibly identify you as the publisher of these copies. The ++ front cover must present the full title with all words of the ++ title equally prominent and visible. You may add other material ++ on the covers in addition. Copying with changes limited to the ++ covers, as long as they preserve the title of the Document and ++ satisfy these conditions, can be treated as verbatim copying in ++ other respects. ++ ++ If the required texts for either cover are too voluminous to fit ++ legibly, you should put the first ones listed (as many as fit ++ reasonably) on the actual cover, and continue the rest onto ++ adjacent pages. ++ ++ If you publish or distribute Opaque copies of the Document ++ numbering more than 100, you must either include a ++ machine-readable Transparent copy along with each Opaque copy, or ++ state in or with each Opaque copy a publicly-accessible ++ computer-network location containing a complete Transparent copy ++ of the Document, free of added material, which the general ++ network-using public has access to download anonymously at no ++ charge using public-standard network protocols. If you use the ++ latter option, you must take reasonably prudent steps, when you ++ begin distribution of Opaque copies in quantity, to ensure that ++ this Transparent copy will remain thus accessible at the stated ++ location until at least one year after the last time you ++ distribute an Opaque copy (directly or through your agents or ++ retailers) of that edition to the public. ++ ++ It is requested, but not required, that you contact the authors of ++ the Document well before redistributing any large number of ++ copies, to give them a chance to provide you with an updated ++ version of the Document. ++ ++ 4. MODIFICATIONS ++ ++ You may copy and distribute a Modified Version of the Document ++ under the conditions of sections 2 and 3 above, provided that you ++ release the Modified Version under precisely this License, with ++ the Modified Version filling the role of the Document, thus ++ licensing distribution and modification of the Modified Version to ++ whoever possesses a copy of it. In addition, you must do these ++ things in the Modified Version: ++ ++ A. Use in the Title Page (and on the covers, if any) a title ++ distinct from that of the Document, and from those of previous ++ versions (which should, if there were any, be listed in the ++ History section of the Document). You may use the same title ++ as a previous version if the original publisher of that version ++ gives permission. ++ B. List on the Title Page, as authors, one or more persons or ++ entities responsible for authorship of the modifications in the ++ Modified Version, together with at least five of the principal ++ authors of the Document (all of its principal authors, if it ++ has less than five). ++ C. State on the Title page the name of the publisher of the ++ Modified Version, as the publisher. ++ D. Preserve all the copyright notices of the Document. ++ E. Add an appropriate copyright notice for your modifications ++ adjacent to the other copyright notices. ++ F. Include, immediately after the copyright notices, a license ++ notice giving the public permission to use the Modified Version ++ under the terms of this License, in the form shown in the ++ Addendum below. ++ G. Preserve in that license notice the full lists of Invariant ++ Sections and required Cover Texts given in the Document's ++ license notice. ++ H. Include an unaltered copy of this License. ++ I. Preserve the section entitled "History", and its title, and add ++ to it an item stating at least the title, year, new authors, and ++ publisher of the Modified Version as given on the Title Page. ++ If there is no section entitled "History" in the Document, ++ create one stating the title, year, authors, and publisher of ++ the Document as given on its Title Page, then add an item ++ describing the Modified Version as stated in the previous ++ sentence. ++ J. Preserve the network location, if any, given in the Document for ++ public access to a Transparent copy of the Document, and ++ likewise the network locations given in the Document for ++ previous versions it was based on. These may be placed in the ++ "History" section. You may omit a network location for a work ++ that was published at least four years before the Document ++ itself, or if the original publisher of the version it refers ++ to gives permission. ++ K. In any section entitled "Acknowledgements" or "Dedications", ++ preserve the section's title, and preserve in the section all the ++ substance and tone of each of the contributor acknowledgements ++ and/or dedications given therein. ++ L. Preserve all the Invariant Sections of the Document, ++ unaltered in their text and in their titles. Section numbers ++ or the equivalent are not considered part of the section titles. ++ M. Delete any section entitled "Endorsements." Such a section ++ may not be included in the Modified Version. ++ N. Do not retitle any existing section as "Endorsements" or to ++ conflict in title with any Invariant Section. ++ ++ If the Modified Version includes new front-matter sections or ++ appendices that qualify as Secondary Sections and contain no ++ material copied from the Document, you may at your option ++ designate some or all of these sections as invariant. To do this, ++ add their titles to the list of Invariant Sections in the Modified ++ Version's license notice. These titles must be distinct from any ++ other section titles. ++ ++ You may add a section entitled "Endorsements", provided it contains ++ nothing but endorsements of your Modified Version by various ++ parties-for example, statements of peer review or that the text has ++ been approved by an organization as the authoritative definition ++ of a standard. ++ ++ You may add a passage of up to five words as a Front-Cover Text, ++ and a passage of up to 25 words as a Back-Cover Text, to the end ++ of the list of Cover Texts in the Modified Version. Only one ++ passage of Front-Cover Text and one of Back-Cover Text may be ++ added by (or through arrangements made by) any one entity. If the ++ Document already includes a cover text for the same cover, ++ previously added by you or by arrangement made by the same entity ++ you are acting on behalf of, you may not add another; but you may ++ replace the old one, on explicit permission from the previous ++ publisher that added the old one. ++ ++ The author(s) and publisher(s) of the Document do not by this ++ License give permission to use their names for publicity for or to ++ assert or imply endorsement of any Modified Version. ++ ++ 5. COMBINING DOCUMENTS ++ ++ You may combine the Document with other documents released under ++ this License, under the terms defined in section 4 above for ++ modified versions, provided that you include in the combination ++ all of the Invariant Sections of all of the original documents, ++ unmodified, and list them all as Invariant Sections of your ++ combined work in its license notice. ++ ++ The combined work need only contain one copy of this License, and ++ multiple identical Invariant Sections may be replaced with a single ++ copy. If there are multiple Invariant Sections with the same name ++ but different contents, make the title of each such section unique ++ by adding at the end of it, in parentheses, the name of the ++ original author or publisher of that section if known, or else a ++ unique number. Make the same adjustment to the section titles in ++ the list of Invariant Sections in the license notice of the ++ combined work. ++ ++ In the combination, you must combine any sections entitled ++ "History" in the various original documents, forming one section ++ entitled "History"; likewise combine any sections entitled ++ "Acknowledgements", and any sections entitled "Dedications." You ++ must delete all sections entitled "Endorsements." ++ ++ 6. COLLECTIONS OF DOCUMENTS ++ ++ You may make a collection consisting of the Document and other ++ documents released under this License, and replace the individual ++ copies of this License in the various documents with a single copy ++ that is included in the collection, provided that you follow the ++ rules of this License for verbatim copying of each of the ++ documents in all other respects. ++ ++ You may extract a single document from such a collection, and ++ distribute it individually under this License, provided you insert ++ a copy of this License into the extracted document, and follow ++ this License in all other respects regarding verbatim copying of ++ that document. ++ ++ 7. AGGREGATION WITH INDEPENDENT WORKS ++ ++ A compilation of the Document or its derivatives with other ++ separate and independent documents or works, in or on a volume of ++ a storage or distribution medium, does not as a whole count as a ++ Modified Version of the Document, provided no compilation ++ copyright is claimed for the compilation. Such a compilation is ++ called an "aggregate", and this License does not apply to the ++ other self-contained works thus compiled with the Document, on ++ account of their being thus compiled, if they are not themselves ++ derivative works of the Document. ++ ++ If the Cover Text requirement of section 3 is applicable to these ++ copies of the Document, then if the Document is less than one ++ quarter of the entire aggregate, the Document's Cover Texts may be ++ placed on covers that surround only the Document within the ++ aggregate. Otherwise they must appear on covers around the whole ++ aggregate. ++ ++ 8. TRANSLATION ++ ++ Translation is considered a kind of modification, so you may ++ distribute translations of the Document under the terms of section ++ 4. Replacing Invariant Sections with translations requires special ++ permission from their copyright holders, but you may include ++ translations of some or all Invariant Sections in addition to the ++ original versions of these Invariant Sections. You may include a ++ translation of this License provided that you also include the ++ original English version of this License. In case of a ++ disagreement between the translation and the original English ++ version of this License, the original English version will prevail. ++ ++ 9. TERMINATION ++ ++ You may not copy, modify, sublicense, or distribute the Document ++ except as expressly provided for under this License. Any other ++ attempt to copy, modify, sublicense or distribute the Document is ++ void, and will automatically terminate your rights under this ++ License. However, parties who have received copies, or rights, ++ from you under this License will not have their licenses ++ terminated so long as such parties remain in full compliance. ++ ++ 10. FUTURE REVISIONS OF THIS LICENSE ++ ++ The Free Software Foundation may publish new, revised versions of ++ the GNU Free Documentation License from time to time. Such new ++ versions will be similar in spirit to the present version, but may ++ differ in detail to address new problems or concerns. See ++ http://www.gnu.org/copyleft/. ++ ++ Each version of the License is given a distinguishing version ++ number. If the Document specifies that a particular numbered ++ version of this License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that specified version or of any later version that has been ++ published (not as a draft) by the Free Software Foundation. If ++ the Document does not specify a version number of this License, ++ you may choose any version ever published (not as a draft) by the ++ Free Software Foundation. ++ ++ ++ADDENDUM: How to use this License for your documents ++==================================================== ++ ++To use this License in a document you have written, include a copy of ++the License in the document and put the following copyright and license ++notices just after the title page: ++ ++ Copyright (C) YEAR YOUR NAME. ++ Permission is granted to copy, distribute and/or modify this document ++ under the terms of the GNU Free Documentation License, Version 1.1 ++ or any later version published by the Free Software Foundation; ++ with the Invariant Sections being LIST THEIR TITLES, with the ++ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. ++ A copy of the license is included in the section entitled "GNU ++ Free Documentation License." ++ ++ If you have no Invariant Sections, write "with no Invariant Sections" ++instead of saying which ones are invariant. If you have no Front-Cover ++Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being ++LIST"; likewise for Back-Cover Texts. ++ ++ If your document contains nontrivial examples of program code, we ++recommend releasing these examples in parallel under your choice of ++free software license, such as the GNU General Public License, to ++permit their use in free software. ++ ++ ++File: ld.info, Node: Index, Prev: GNU Free Documentation License, Up: Top ++ ++Index ++***** ++ ++[index] ++* Menu: ++ ++* ": Symbols. (line 6) ++* -(: Options. (line 609) ++* --accept-unknown-input-arch: Options. (line 627) ++* --add-needed: Options. (line 649) ++* --add-stdcall-alias: Options. (line 1343) ++* --allow-multiple-definition: Options. (line 819) ++* --allow-shlib-undefined: Options. (line 825) ++* --architecture=ARCH: Options. (line 104) ++* --as-needed: Options. (line 637) ++* --auxiliary: Options. (line 205) ++* --base-file: Options. (line 1348) ++* --be8: ARM. (line 23) ++* --bss-plt: PowerPC ELF32. (line 13) ++* --check-sections: Options. (line 701) ++* --cref: Options. (line 711) ++* --default-imported-symver: Options. (line 853) ++* --default-symver: Options. (line 849) ++* --defsym SYMBOL=EXP: Options. (line 739) ++* --demangle[=STYLE]: Options. (line 752) ++* --direct-data: AVR32. (line 6) ++* --disable-auto-image-base: Options. (line 1495) ++* --disable-auto-import: Options. (line 1624) ++* --disable-new-dtags: Options. (line 1295) ++* --disable-runtime-pseudo-reloc: Options. (line 1637) ++* --disable-stdcall-fixup: Options. (line 1358) ++* --discard-all: Options. (line 513) ++* --discard-locals: Options. (line 517) ++* --dll: Options. (line 1353) ++* --dll-search-prefix: Options. (line 1501) ++* --dotsyms: PowerPC64 ELF64. (line 33) ++* --dynamic-linker FILE: Options. (line 765) ++* --eh-frame-hdr: Options. (line 1291) ++* --emit-relocs: Options. (line 415) ++* --emit-stub-syms <1>: PowerPC64 ELF64. (line 29) ++* --emit-stub-syms: PowerPC ELF32. (line 37) ++* --enable-auto-image-base: Options. (line 1487) ++* --enable-auto-import: Options. (line 1510) ++* --enable-extra-pe-debug: Options. (line 1642) ++* --enable-new-dtags: Options. (line 1295) ++* --enable-runtime-pseudo-reloc: Options. (line 1629) ++* --enable-stdcall-fixup: Options. (line 1358) ++* --entry=ENTRY: Options. (line 158) ++* --error-unresolved-symbols: Options. (line 1244) ++* --exclude-libs: Options. (line 168) ++* --exclude-symbols: Options. (line 1400) ++* --export-all-symbols: Options. (line 1376) ++* --export-dynamic: Options. (line 179) ++* --fatal-warnings: Options. (line 771) ++* --file-alignment: Options. (line 1406) ++* --filter: Options. (line 226) ++* --fix-v4bx: ARM. (line 44) ++* --force-dynamic: Options. (line 424) ++* --force-exe-suffix: Options. (line 774) ++* --format=FORMAT: Options. (line 115) ++* --format=VERSION: TI COFF. (line 6) ++* --gc-sections: Options. (line 784) ++* --gpsize: Options. (line 259) ++* --hash-size=NUMBER: Options. (line 1304) ++* --heap: Options. (line 1412) ++* --help: Options. (line 792) ++* --image-base: Options. (line 1419) ++* --just-symbols=FILE: Options. (line 447) ++* --kill-at: Options. (line 1428) ++* --large-address-aware: Options. (line 1433) ++* --library-path=DIR: Options. (line 315) ++* --library=ARCHIVE: Options. (line 285) ++* --major-image-version: Options. (line 1442) ++* --major-os-version: Options. (line 1447) ++* --major-subsystem-version: Options. (line 1451) ++* --minor-image-version: Options. (line 1456) ++* --minor-os-version: Options. (line 1461) ++* --minor-subsystem-version: Options. (line 1465) ++* --mri-script=MRI-CMDFILE: Options. (line 139) ++* --multi-subspace: HPPA ELF32. (line 6) ++* --nmagic: Options. (line 384) ++* --no-accept-unknown-input-arch: Options. (line 627) ++* --no-add-needed: Options. (line 649) ++* --no-allow-shlib-undefined: Options. (line 825) ++* --no-as-needed: Options. (line 637) ++* --no-check-sections: Options. (line 701) ++* --no-define-common: Options. (line 723) ++* --no-demangle: Options. (line 752) ++* --no-direct-data: AVR32. (line 6) ++* --no-dotsyms: PowerPC64 ELF64. (line 33) ++* --no-gc-sections: Options. (line 784) ++* --no-keep-memory: Options. (line 804) ++* --no-multi-toc: PowerPC64 ELF64. (line 74) ++* --no-omagic: Options. (line 398) ++* --no-opd-optimize: PowerPC64 ELF64. (line 48) ++* --no-relax: Xtensa. (line 56) ++* --no-tls-optimize <1>: PowerPC64 ELF64. (line 43) ++* --no-tls-optimize: PowerPC ELF32. (line 41) ++* --no-toc-optimize: PowerPC64 ELF64. (line 60) ++* --no-undefined: Options. (line 811) ++* --no-undefined-version: Options. (line 844) ++* --no-warn-mismatch: Options. (line 857) ++* --no-whole-archive: Options. (line 866) ++* --noinhibit-exec: Options. (line 870) ++* --non-overlapping-opd: PowerPC64 ELF64. (line 54) ++* --oformat: Options. (line 882) ++* --omagic: Options. (line 389) ++* --out-implib: Options. (line 1478) ++* --output-def: Options. (line 1470) ++* --output=OUTPUT: Options. (line 404) ++* --pic-executable: Options. (line 895) ++* --print-map: Options. (line 347) ++* --reduce-memory-overheads: Options. (line 1312) ++* --relax: Options. (line 911) ++* --relax on i960: i960. (line 31) ++* --relax on PowerPC: PowerPC ELF32. (line 6) ++* --relax on Xtensa: Xtensa. (line 27) ++* --relocatable: Options. (line 428) ++* --script=SCRIPT: Options. (line 471) ++* --sdata-got: PowerPC ELF32. (line 23) ++* --section-alignment: Options. (line 1647) ++* --section-start SECTIONNAME=ORG: Options. (line 1081) ++* --sort-common: Options. (line 1028) ++* --sort-section alignment: Options. (line 1038) ++* --sort-section name: Options. (line 1034) ++* --split-by-file: Options. (line 1042) ++* --split-by-reloc: Options. (line 1047) ++* --stack: Options. (line 1653) ++* --stats: Options. (line 1060) ++* --strip-all: Options. (line 458) ++* --strip-debug: Options. (line 462) ++* --stub-group-size: PowerPC64 ELF64. (line 6) ++* --stub-group-size=N: HPPA ELF32. (line 12) ++* --subsystem: Options. (line 1660) ++* --support-old-code: ARM. (line 6) ++* --sysroot: Options. (line 1064) ++* --target-help: Options. (line 796) ++* --target1-abs: ARM. (line 27) ++* --target1-rel: ARM. (line 27) ++* --target2=TYPE: ARM. (line 32) ++* --thumb-entry=ENTRY: ARM. (line 17) ++* --trace: Options. (line 467) ++* --trace-symbol=SYMBOL: Options. (line 522) ++* --traditional-format: Options. (line 1069) ++* --undefined=SYMBOL: Options. (line 480) ++* --unique[=SECTION]: Options. (line 498) ++* --unresolved-symbols: Options. (line 1096) ++* --use-blx: ARM. (line 57) ++* --verbose: Options. (line 1125) ++* --version: Options. (line 507) ++* --version-script=VERSION-SCRIPTFILE: Options. (line 1131) ++* --warn-common: Options. (line 1138) ++* --warn-constructors: Options. (line 1206) ++* --warn-multiple-gp: Options. (line 1211) ++* --warn-once: Options. (line 1225) ++* --warn-section-align: Options. (line 1229) ++* --warn-shared-textrel: Options. (line 1236) ++* --warn-unresolved-symbols: Options. (line 1239) ++* --whole-archive: Options. (line 1248) ++* --wrap: Options. (line 1262) ++* -AARCH: Options. (line 103) ++* -aKEYWORD: Options. (line 96) ++* -assert KEYWORD: Options. (line 659) ++* -b FORMAT: Options. (line 115) ++* -Bdynamic: Options. (line 662) ++* -Bgroup: Options. (line 672) ++* -Bshareable: Options. (line 1020) ++* -Bstatic: Options. (line 679) ++* -Bsymbolic: Options. (line 694) ++* -c MRI-CMDFILE: Options. (line 139) ++* -call_shared: Options. (line 662) ++* -d: Options. (line 149) ++* -dc: Options. (line 149) ++* -dn: Options. (line 679) ++* -dp: Options. (line 149) ++* -dy: Options. (line 662) ++* -E: Options. (line 179) ++* -e ENTRY: Options. (line 158) ++* -EB: Options. (line 198) ++* -EL: Options. (line 201) ++* -F: Options. (line 226) ++* -f: Options. (line 205) ++* -fini: Options. (line 250) ++* -G: Options. (line 259) ++* -g: Options. (line 256) ++* -hNAME: Options. (line 267) ++* -i: Options. (line 276) ++* -IFILE: Options. (line 765) ++* -init: Options. (line 279) ++* -lARCHIVE: Options. (line 285) ++* -LDIR: Options. (line 315) ++* -M: Options. (line 347) ++* -m EMULATION: Options. (line 337) ++* -Map: Options. (line 800) ++* -N: Options. (line 389) ++* -n: Options. (line 384) ++* -non_shared: Options. (line 679) ++* -nostdlib: Options. (line 876) ++* -O LEVEL: Options. (line 410) ++* -o OUTPUT: Options. (line 404) ++* -pie: Options. (line 895) ++* -q: Options. (line 415) ++* -qmagic: Options. (line 905) ++* -Qy: Options. (line 908) ++* -r: Options. (line 428) ++* -R FILE: Options. (line 447) ++* -rpath: Options. (line 945) ++* -rpath-link: Options. (line 967) ++* -S: Options. (line 462) ++* -s: Options. (line 458) ++* -shared: Options. (line 1020) ++* -soname=NAME: Options. (line 267) ++* -static: Options. (line 679) ++* -t: Options. (line 467) ++* -T SCRIPT: Options. (line 471) ++* -Tbss ORG: Options. (line 1090) ++* -Tdata ORG: Options. (line 1090) ++* -Ttext ORG: Options. (line 1090) ++* -u SYMBOL: Options. (line 480) ++* -Ur: Options. (line 488) ++* -V: Options. (line 507) ++* -v: Options. (line 507) ++* -X: Options. (line 517) ++* -x: Options. (line 513) ++* -Y PATH: Options. (line 531) ++* -y SYMBOL: Options. (line 522) ++* -z defs: Options. (line 811) ++* -z KEYWORD: Options. (line 535) ++* -z muldefs: Options. (line 819) ++* .: Location Counter. (line 6) ++* /DISCARD/: Output Section Discarding. ++ (line 18) ++* :PHDR: Output Section Phdr. ++ (line 6) ++* =FILLEXP: Output Section Fill. ++ (line 6) ++* >REGION: Output Section Region. ++ (line 6) ++* [COMMON]: Input Section Common. ++ (line 29) ++* ABSOLUTE (MRI): MRI. (line 33) ++* absolute and relocatable symbols: Expression Section. (line 6) ++* absolute expressions: Expression Section. (line 6) ++* ABSOLUTE(EXP): Builtin Functions. (line 10) ++* ADDR(SECTION): Builtin Functions. (line 17) ++* address, section: Output Section Address. ++ (line 6) ++* ALIAS (MRI): MRI. (line 44) ++* ALIGN (MRI): MRI. (line 50) ++* align expression: Builtin Functions. (line 36) ++* align location counter: Builtin Functions. (line 36) ++* ALIGN(ALIGN): Builtin Functions. (line 36) ++* ALIGN(EXP,ALIGN): Builtin Functions. (line 36) ++* ALIGN(SECTION_ALIGN): Forced Output Alignment. ++ (line 6) ++* allocating memory: MEMORY. (line 6) ++* architecture: Miscellaneous Commands. ++ (line 46) ++* architectures: Options. (line 103) ++* archive files, from cmd line: Options. (line 285) ++* archive search path in linker script: File Commands. (line 71) ++* arithmetic: Expressions. (line 6) ++* arithmetic operators: Operators. (line 6) ++* ARM interworking support: ARM. (line 6) ++* AS_NEEDED(FILES): File Commands. (line 51) ++* ASSERT: Miscellaneous Commands. ++ (line 9) ++* assertion in linker script: Miscellaneous Commands. ++ (line 9) ++* assignment in scripts: Assignments. (line 6) ++* AT(LMA): Output Section LMA. (line 6) ++* AT>LMA_REGION: Output Section LMA. (line 6) ++* automatic data imports: WIN32. (line 170) ++* AVR32 options: AVR32. (line 6) ++* back end: BFD. (line 6) ++* BASE (MRI): MRI. (line 54) ++* BE8: ARM. (line 23) ++* BFD canonical format: Canonical format. (line 11) ++* BFD requirements: BFD. (line 16) ++* big-endian objects: Options. (line 198) ++* binary input format: Options. (line 115) ++* BLOCK(EXP): Builtin Functions. (line 62) ++* bug criteria: Bug Criteria. (line 6) ++* bug reports: Bug Reporting. (line 6) ++* bugs in ld: Reporting Bugs. (line 6) ++* BYTE(EXPRESSION): Output Section Data. ++ (line 6) ++* C++ constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* CHIP (MRI): MRI. (line 58) ++* COLLECT_NO_DEMANGLE: Environment. (line 29) ++* combining symbols, warnings on: Options. (line 1138) ++* command files: Scripts. (line 6) ++* command line: Options. (line 6) ++* common allocation: Options. (line 149) ++* common allocation in linker script: Miscellaneous Commands. ++ (line 20) ++* common symbol placement: Input Section Common. ++ (line 6) ++* compatibility, MRI: Options. (line 139) ++* constants in linker scripts: Constants. (line 6) ++* CONSTRUCTORS: Output Section Keywords. ++ (line 19) ++* constructors: Options. (line 488) ++* constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* crash of linker: Bug Criteria. (line 9) ++* CREATE_OBJECT_SYMBOLS: Output Section Keywords. ++ (line 9) ++* creating a DEF file: WIN32. (line 137) ++* cross reference table: Options. (line 711) ++* cross references: Miscellaneous Commands. ++ (line 30) ++* current output location: Location Counter. (line 6) ++* data: Output Section Data. ++ (line 6) ++* DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE): Builtin Functions. ++ (line 67) ++* DATA_SEGMENT_END(EXP): Builtin Functions. (line 88) ++* DATA_SEGMENT_RELRO_END(OFFSET, EXP): Builtin Functions. (line 94) ++* dbx: Options. (line 1074) ++* DEF files, creating: Options. (line 1470) ++* default emulation: Environment. (line 21) ++* default input format: Environment. (line 9) ++* DEFINED(SYMBOL): Builtin Functions. (line 105) ++* deleting local symbols: Options. (line 513) ++* demangling, default: Environment. (line 29) ++* demangling, from command line: Options. (line 752) ++* direct linking to a dll: WIN32. (line 218) ++* discarding sections: Output Section Discarding. ++ (line 6) ++* discontinuous memory: MEMORY. (line 6) ++* DLLs, creating: Options. (line 1376) ++* DLLs, linking to: Options. (line 1501) ++* dot: Location Counter. (line 6) ++* dot inside sections: Location Counter. (line 34) ++* dot outside sections: Location Counter. (line 64) ++* dynamic linker, from command line: Options. (line 765) ++* dynamic symbol table: Options. (line 179) ++* ELF program headers: PHDRS. (line 6) ++* emulation: Options. (line 337) ++* emulation, default: Environment. (line 21) ++* END (MRI): MRI. (line 62) ++* endianness: Options. (line 198) ++* entry point: Entry Point. (line 6) ++* entry point, from command line: Options. (line 158) ++* entry point, thumb: ARM. (line 17) ++* ENTRY(SYMBOL): Entry Point. (line 6) ++* error on valid input: Bug Criteria. (line 12) ++* example of linker script: Simple Example. (line 6) ++* exporting DLL symbols: WIN32. (line 19) ++* expression evaluation order: Evaluation. (line 6) ++* expression sections: Expression Section. (line 6) ++* expression, absolute: Builtin Functions. (line 10) ++* expressions: Expressions. (line 6) ++* EXTERN: Miscellaneous Commands. ++ (line 13) ++* fatal signal: Bug Criteria. (line 9) ++* file name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* FILEHDR: PHDRS. (line 61) ++* filename symbols: Output Section Keywords. ++ (line 9) ++* fill pattern, entire section: Output Section Fill. ++ (line 6) ++* FILL(EXPRESSION): Output Section Data. ++ (line 39) ++* finalization function: Options. (line 250) ++* first input file: File Commands. (line 79) ++* first instruction: Entry Point. (line 6) ++* FIX_V4BX: ARM. (line 44) ++* FORCE_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 20) ++* forcing input section alignment: Forced Input Alignment. ++ (line 6) ++* forcing output section alignment: Forced Output Alignment. ++ (line 6) ++* forcing the creation of dynamic sections: Options. (line 424) ++* FORMAT (MRI): MRI. (line 66) ++* functions in expressions: Builtin Functions. (line 6) ++* garbage collection <1>: Input Section Keep. (line 6) ++* garbage collection: Options. (line 784) ++* generating optimized output: Options. (line 410) ++* GNU linker: Overview. (line 6) ++* GNUTARGET: Environment. (line 9) ++* GROUP(FILES): File Commands. (line 44) ++* grouping input files: File Commands. (line 44) ++* groups of archives: Options. (line 609) ++* H8/300 support: H8/300. (line 6) ++* header size: Builtin Functions. (line 170) ++* heap size: Options. (line 1412) ++* help: Options. (line 792) ++* holes: Location Counter. (line 12) ++* holes, filling: Output Section Data. ++ (line 39) ++* HPPA multiple sub-space stubs: HPPA ELF32. (line 6) ++* HPPA stub grouping: HPPA ELF32. (line 12) ++* i960 support: i960. (line 6) ++* image base: Options. (line 1419) ++* implicit linker scripts: Implicit Linker Scripts. ++ (line 6) ++* import libraries: WIN32. (line 10) ++* INCLUDE FILENAME: File Commands. (line 9) ++* including a linker script: File Commands. (line 9) ++* including an entire archive: Options. (line 1248) ++* incremental link: Options. (line 276) ++* INHIBIT_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 25) ++* initialization function: Options. (line 279) ++* initialized data in ROM: Output Section LMA. (line 21) ++* input file format in linker script: Format Commands. (line 35) ++* input filename symbols: Output Section Keywords. ++ (line 9) ++* input files in linker scripts: File Commands. (line 16) ++* input files, displaying: Options. (line 467) ++* input format: Options. (line 115) ++* input object files in linker scripts: File Commands. (line 16) ++* input section alignment: Forced Input Alignment. ++ (line 6) ++* input section basics: Input Section Basics. ++ (line 6) ++* input section wildcards: Input Section Wildcards. ++ (line 6) ++* input sections: Input Section. (line 6) ++* INPUT(FILES): File Commands. (line 16) ++* integer notation: Constants. (line 6) ++* integer suffixes: Constants. (line 12) ++* internal object-file format: Canonical format. (line 11) ++* invalid input: Bug Criteria. (line 14) ++* K and M integer suffixes: Constants. (line 12) ++* KEEP: Input Section Keep. (line 6) ++* l =: MEMORY. (line 72) ++* L, deleting symbols beginning: Options. (line 517) ++* lazy evaluation: Evaluation. (line 6) ++* ld bugs, reporting: Bug Reporting. (line 6) ++* LDEMULATION: Environment. (line 21) ++* len =: MEMORY. (line 72) ++* LENGTH =: MEMORY. (line 72) ++* LENGTH(MEMORY): Builtin Functions. (line 122) ++* library search path in linker script: File Commands. (line 71) ++* link map: Options. (line 347) ++* link-time runtime library search path: Options. (line 967) ++* linker crash: Bug Criteria. (line 9) ++* linker script concepts: Basic Script Concepts. ++ (line 6) ++* linker script example: Simple Example. (line 6) ++* linker script file commands: File Commands. (line 6) ++* linker script format: Script Format. (line 6) ++* linker script input object files: File Commands. (line 16) ++* linker script simple commands: Simple Commands. (line 6) ++* linker scripts: Scripts. (line 6) ++* LIST (MRI): MRI. (line 77) ++* little-endian objects: Options. (line 201) ++* LOAD (MRI): MRI. (line 84) ++* load address: Output Section LMA. (line 6) ++* LOADADDR(SECTION): Builtin Functions. (line 125) ++* loading, preventing: Output Section Type. ++ (line 22) ++* local symbols, deleting: Options. (line 517) ++* location counter: Location Counter. (line 6) ++* LONG(EXPRESSION): Output Section Data. ++ (line 6) ++* M and K integer suffixes: Constants. (line 12) ++* machine architecture: Miscellaneous Commands. ++ (line 46) ++* machine dependencies: Machine Dependent. (line 6) ++* mapping input sections to output sections: Input Section. (line 6) ++* MAX: Builtin Functions. (line 130) ++* MEMORY: MEMORY. (line 6) ++* memory region attributes: MEMORY. (line 32) ++* memory regions: MEMORY. (line 6) ++* memory regions and sections: Output Section Region. ++ (line 6) ++* memory usage: Options. (line 804) ++* MIN: Builtin Functions. (line 133) ++* MRI compatibility: MRI. (line 6) ++* MSP430 extra sections: MSP430. (line 11) ++* NAME (MRI): MRI. (line 90) ++* name, section: Output Section Name. ++ (line 6) ++* names: Symbols. (line 6) ++* naming the output file: Options. (line 404) ++* NEXT(EXP): Builtin Functions. (line 137) ++* NMAGIC: Options. (line 384) ++* NOCROSSREFS(SECTIONS): Miscellaneous Commands. ++ (line 30) ++* NOLOAD: Output Section Type. ++ (line 22) ++* not enough room for program headers: Builtin Functions. (line 175) ++* o =: MEMORY. (line 67) ++* objdump -i: BFD. (line 6) ++* object file management: BFD. (line 6) ++* object files: Options. (line 29) ++* object formats available: BFD. (line 6) ++* object size: Options. (line 259) ++* OMAGIC: Options. (line 389) ++* opening object files: BFD outline. (line 6) ++* operators for arithmetic: Operators. (line 6) ++* options: Options. (line 6) ++* ORDER (MRI): MRI. (line 95) ++* org =: MEMORY. (line 67) ++* ORIGIN =: MEMORY. (line 67) ++* ORIGIN(MEMORY): Builtin Functions. (line 143) ++* orphan: Orphan Sections. (line 6) ++* output file after errors: Options. (line 870) ++* output file format in linker script: Format Commands. (line 10) ++* output file name in linker scripot: File Commands. (line 61) ++* output section alignment: Forced Output Alignment. ++ (line 6) ++* output section attributes: Output Section Attributes. ++ (line 6) ++* output section data: Output Section Data. ++ (line 6) ++* OUTPUT(FILENAME): File Commands. (line 61) ++* OUTPUT_ARCH(BFDARCH): Miscellaneous Commands. ++ (line 46) ++* OUTPUT_FORMAT(BFDNAME): Format Commands. (line 10) ++* OVERLAY: Overlay Description. ++ (line 6) ++* overlays: Overlay Description. ++ (line 6) ++* partial link: Options. (line 428) ++* PHDRS: PHDRS. (line 6) ++* position independent executables: Options. (line 897) ++* PowerPC ELF32 options: PowerPC ELF32. (line 13) ++* PowerPC GOT: PowerPC ELF32. (line 23) ++* PowerPC long branches: PowerPC ELF32. (line 6) ++* PowerPC PLT: PowerPC ELF32. (line 13) ++* PowerPC stub symbols: PowerPC ELF32. (line 37) ++* PowerPC TLS optimization: PowerPC ELF32. (line 41) ++* PowerPC64 dot symbols: PowerPC64 ELF64. (line 33) ++* PowerPC64 ELF64 options: PowerPC64 ELF64. (line 6) ++* PowerPC64 multi-TOC: PowerPC64 ELF64. (line 74) ++* PowerPC64 OPD optimization: PowerPC64 ELF64. (line 48) ++* PowerPC64 OPD spacing: PowerPC64 ELF64. (line 54) ++* PowerPC64 stub grouping: PowerPC64 ELF64. (line 6) ++* PowerPC64 stub symbols: PowerPC64 ELF64. (line 29) ++* PowerPC64 TLS optimization: PowerPC64 ELF64. (line 43) ++* PowerPC64 TOC optimization: PowerPC64 ELF64. (line 60) ++* precedence in expressions: Operators. (line 6) ++* prevent unnecessary loading: Output Section Type. ++ (line 22) ++* program headers: PHDRS. (line 6) ++* program headers and sections: Output Section Phdr. ++ (line 6) ++* program headers, not enough room: Builtin Functions. (line 175) ++* program segments: PHDRS. (line 6) ++* PROVIDE: PROVIDE. (line 6) ++* PROVIDE_HIDDEN: PROVIDE_HIDDEN. (line 6) ++* PUBLIC (MRI): MRI. (line 103) ++* QUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* quoted symbol names: Symbols. (line 6) ++* read-only text: Options. (line 384) ++* read/write from cmd line: Options. (line 389) ++* regions of memory: MEMORY. (line 6) ++* relative expressions: Expression Section. (line 6) ++* relaxing addressing modes: Options. (line 911) ++* relaxing on H8/300: H8/300. (line 9) ++* relaxing on i960: i960. (line 31) ++* relaxing on Xtensa: Xtensa. (line 27) ++* relocatable and absolute symbols: Expression Section. (line 6) ++* relocatable output: Options. (line 428) ++* removing sections: Output Section Discarding. ++ (line 6) ++* reporting bugs in ld: Reporting Bugs. (line 6) ++* requirements for BFD: BFD. (line 16) ++* retain relocations in final executable: Options. (line 415) ++* retaining specified symbols: Options. (line 931) ++* ROM initialized data: Output Section LMA. (line 21) ++* round up expression: Builtin Functions. (line 36) ++* round up location counter: Builtin Functions. (line 36) ++* runtime library name: Options. (line 267) ++* runtime library search path: Options. (line 945) ++* runtime pseudo-relocation: WIN32. (line 196) ++* scaled integers: Constants. (line 12) ++* scommon section: Input Section Common. ++ (line 20) ++* script files: Options. (line 471) ++* scripts: Scripts. (line 6) ++* search directory, from cmd line: Options. (line 315) ++* search path in linker script: File Commands. (line 71) ++* SEARCH_DIR(PATH): File Commands. (line 71) ++* SECT (MRI): MRI. (line 109) ++* section address: Output Section Address. ++ (line 6) ++* section address in expression: Builtin Functions. (line 17) ++* section alignment, warnings on: Options. (line 1229) ++* section data: Output Section Data. ++ (line 6) ++* section fill pattern: Output Section Fill. ++ (line 6) ++* section load address: Output Section LMA. (line 6) ++* section load address in expression: Builtin Functions. (line 125) ++* section name: Output Section Name. ++ (line 6) ++* section name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* section size: Builtin Functions. (line 154) ++* section, assigning to memory region: Output Section Region. ++ (line 6) ++* section, assigning to program header: Output Section Phdr. ++ (line 6) ++* SECTIONS: SECTIONS. (line 6) ++* sections, discarding: Output Section Discarding. ++ (line 6) ++* segment origins, cmd line: Options. (line 1090) ++* SEGMENT_START(SEGMENT, DEFAULT): Builtin Functions. (line 146) ++* segments, ELF: PHDRS. (line 6) ++* shared libraries: Options. (line 1022) ++* SHORT(EXPRESSION): Output Section Data. ++ (line 6) ++* SIZEOF(SECTION): Builtin Functions. (line 154) ++* SIZEOF_HEADERS: Builtin Functions. (line 170) ++* small common symbols: Input Section Common. ++ (line 20) ++* SORT: Input Section Wildcards. ++ (line 58) ++* SORT_BY_ALIGNMENT: Input Section Wildcards. ++ (line 54) ++* SORT_BY_NAME: Input Section Wildcards. ++ (line 46) ++* SQUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* stack size: Options. (line 1653) ++* standard Unix system: Options. (line 7) ++* start of execution: Entry Point. (line 6) ++* STARTUP(FILENAME): File Commands. (line 79) ++* strip all symbols: Options. (line 458) ++* strip debugger symbols: Options. (line 462) ++* stripping all but some symbols: Options. (line 931) ++* SUBALIGN(SUBSECTION_ALIGN): Forced Input Alignment. ++ (line 6) ++* suffixes for integers: Constants. (line 12) ++* symbol defaults: Builtin Functions. (line 105) ++* symbol definition, scripts: Assignments. (line 6) ++* symbol names: Symbols. (line 6) ++* symbol tracing: Options. (line 522) ++* symbol versions: VERSION. (line 6) ++* symbol-only input: Options. (line 447) ++* symbols, from command line: Options. (line 739) ++* symbols, relocatable and absolute: Expression Section. (line 6) ++* symbols, retaining selectively: Options. (line 931) ++* synthesizing linker: Options. (line 911) ++* synthesizing on H8/300: H8/300. (line 14) ++* TARGET(BFDNAME): Format Commands. (line 35) ++* TARGET1: ARM. (line 27) ++* TARGET2: ARM. (line 32) ++* thumb entry point: ARM. (line 17) ++* TI COFF versions: TI COFF. (line 6) ++* traditional format: Options. (line 1069) ++* unallocated address, next: Builtin Functions. (line 137) ++* undefined symbol: Options. (line 480) ++* undefined symbol in linker script: Miscellaneous Commands. ++ (line 13) ++* undefined symbols, warnings on: Options. (line 1225) ++* uninitialized data placement: Input Section Common. ++ (line 6) ++* unspecified memory: Output Section Data. ++ (line 39) ++* usage: Options. (line 792) ++* USE_BLX: ARM. (line 57) ++* using a DEF file: WIN32. (line 42) ++* using auto-export functionality: WIN32. (line 22) ++* Using decorations: WIN32. (line 141) ++* variables, defining: Assignments. (line 6) ++* verbose: Options. (line 1125) ++* version: Options. (line 507) ++* version script: VERSION. (line 6) ++* version script, symbol versions: Options. (line 1131) ++* VERSION {script text}: VERSION. (line 6) ++* versions of symbols: VERSION. (line 6) ++* warnings, on combining symbols: Options. (line 1138) ++* warnings, on section alignment: Options. (line 1229) ++* warnings, on undefined symbols: Options. (line 1225) ++* weak externals: WIN32. (line 380) ++* what is this?: Overview. (line 6) ++* wildcard file name patterns: Input Section Wildcards. ++ (line 6) ++* Xtensa options: Xtensa. (line 56) ++* Xtensa processors: Xtensa. (line 6) ++ ++ ++ ++Tag Table: ++Node: Top331 ++Node: Overview1093 ++Node: Invocation2207 ++Node: Options2615 ++Node: Environment77270 ++Node: Scripts79030 ++Node: Basic Script Concepts80764 ++Node: Script Format83471 ++Node: Simple Example84334 ++Node: Simple Commands87430 ++Node: Entry Point87881 ++Node: File Commands88640 ++Node: Format Commands92506 ++Node: Miscellaneous Commands94472 ++Node: Assignments96702 ++Node: Simple Assignments97193 ++Node: PROVIDE98929 ++Node: PROVIDE_HIDDEN100134 ++Node: Source Code Reference100378 ++Node: SECTIONS103958 ++Node: Output Section Description105849 ++Node: Output Section Name106902 ++Node: Output Section Address107778 ++Node: Input Section109427 ++Node: Input Section Basics110228 ++Node: Input Section Wildcards112580 ++Node: Input Section Common117313 ++Node: Input Section Keep118795 ++Node: Input Section Example119285 ++Node: Output Section Data120253 ++Node: Output Section Keywords123030 ++Node: Output Section Discarding126599 ++Node: Output Section Attributes127555 ++Node: Output Section Type128559 ++Node: Output Section LMA129713 ++Node: Forced Output Alignment131984 ++Node: Forced Input Alignment132252 ++Node: Output Section Region132637 ++Node: Output Section Phdr133067 ++Node: Output Section Fill133731 ++Node: Overlay Description134873 ++Node: MEMORY139121 ++Node: PHDRS143321 ++Node: VERSION148360 ++Node: Expressions156151 ++Node: Constants157029 ++Node: Symbols157590 ++Node: Orphan Sections158328 ++Node: Location Counter159091 ++Node: Operators163395 ++Node: Evaluation164317 ++Node: Expression Section165681 ++Node: Builtin Functions167170 ++Node: Implicit Linker Scripts174662 ++Node: Machine Dependent175437 ++Node: H8/300176357 ++Node: i960177982 ++Node: ARM179667 ++Node: AVR32182578 ++Node: HPPA ELF32183526 ++Node: MMIX185151 ++Node: MSP430186368 ++Node: PowerPC ELF32187416 ++Node: PowerPC64 ELF64189707 ++Node: TI COFF194121 ++Node: WIN32194655 ++Node: Xtensa212729 ++Node: BFD215851 ++Node: BFD outline217306 ++Node: BFD information loss218592 ++Node: Canonical format221109 ++Node: Reporting Bugs225466 ++Node: Bug Criteria226160 ++Node: Bug Reporting226859 ++Node: MRI233884 ++Node: GNU Free Documentation License238527 ++Node: Index258241 ++ ++End Tag Table +diff -Nrup binutils-2.17/ld/ld.texinfo binutils-2.17.atmel.1.3.0/ld/ld.texinfo +--- binutils-2.17/ld/ld.texinfo 2006-05-10 15:43:47.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/ld.texinfo 2007-09-28 10:30:45.000000000 +0200 +@@ -22,6 +22,7 @@ + @set GENERIC + @set ARC + @set ARM ++@set AVR32 + @set D10V + @set D30V + @set H8/300 +@@ -152,6 +153,9 @@ section entitled ``GNU Free Documentatio + @ifset ARM + * ARM:: ld and the ARM family + @end ifset ++@ifset AVR32 ++* AVR32:: ld and AVR32 processors ++@end ifset + @ifset HPPA + * HPPA ELF32:: ld and HPPA 32-bit ELF + @end ifset +@@ -5110,6 +5114,9 @@ functionality are not listed. + @ifset ARM + * ARM:: @command{ld} and the ARM family + @end ifset ++@ifset AVR32 ++* AVR32:: @command{ld} and AVR32 processors ++@end ifset + @ifset HPPA + * HPPA ELF32:: @command{ld} and HPPA 32-bit ELF + @end ifset +@@ -5402,6 +5409,41 @@ specify it if you are using that target. + @end ifclear + @end ifset + ++@ifset AVR32 ++@ifclear GENERIC ++@raisesections ++@end ifclear ++ ++@node AVR32 ++@section @command{ld} and AVR32 processors ++@cindex AVR32 options ++@table @option ++@kindex --direct-data ++@kindex --no-direct-data ++@item --direct-data ++@item --no-direct-data ++Taking the address of a symbol can often be done by using a direct ++@code{mov} or pc-relative @code{sub} instruction, which is faster than ++using a PC- or GOT-relative load, especially on the uC3 ++processors. However, this does not always work when dealing with ++symbols in the @code{.data} section so this optimization is disabled ++by default. ++ ++Specifying @option{--direct-data} will enable this optimization. Note ++that this may cause @samp{relocation truncated to fit} errors for ++certain large programs. If this happens, the optimization can be ++turned off by specifying @option{--no-direct-data}. ++ ++All known issues with direct data optimizations are detected at link ++time, so if the linker doesn't complain, the result should run just ++fine. ++@end table ++ ++@ifclear GENERIC ++@lowersections ++@end ifclear ++@end ifset ++ + @ifset HPPA + @ifclear GENERIC + @raisesections +diff -Nrup binutils-2.17/ld/Makefile.am binutils-2.17.atmel.1.3.0/ld/Makefile.am +--- binutils-2.17/ld/Makefile.am 2006-06-03 06:45:50.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/Makefile.am 2007-09-28 10:30:45.000000000 +0200 +@@ -133,6 +133,20 @@ ALL_EMULATIONS = \ + eavr3.o \ + eavr4.o \ + eavr5.o \ ++ eavr32elf_ap7000.o \ ++ eavr32elf_uc3a0128.o \ ++ eavr32elf_uc3a0256.o \ ++ eavr32elf_uc3a0512.o \ ++ eavr32elf_uc3a1128.o \ ++ eavr32elf_uc3a1256.o \ ++ eavr32elf_uc3a1512.o \ ++ eavr32elf_uc3b064.o \ ++ eavr32elf_uc3b0128.o \ ++ eavr32elf_uc3b0256.o \ ++ eavr32elf_uc3b164.o \ ++ eavr32elf_uc3b1128.o \ ++ eavr32elf_uc3b1256.o \ ++ eavr32linux.o \ + ecoff_i860.o \ + ecoff_sparc.o \ + ecrisaout.o \ +@@ -595,6 +609,62 @@ eavr5.c: $(srcdir)/emulparams/avr5.sh \ + $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \ + ${GEN_DEPENDS} + ${GENSCRIPTS} avr5 "$(tdir_avr2)" ++eavr32elf_ap7000.c: $(srcdir)/emulparams/avr32elf_ap7000.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_ap7000 "$(tdir_avr32)" ++eavr32elf_uc3a0128.c: $(srcdir)/emulparams/avr32elf_uc3a0128.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a0128 "$(tdir_avr32)" ++eavr32elf_uc3a0256.c: $(srcdir)/emulparams/avr32elf_uc3a0256.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a0256 "$(tdir_avr32)" ++eavr32elf_uc3a0512.c: $(srcdir)/emulparams/avr32elf_uc3a0512.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a0512 "$(tdir_avr32)" ++eavr32elf_uc3a1128.c: $(srcdir)/emulparams/avr32elf_uc3a1128.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a1128 "$(tdir_avr32)" ++eavr32elf_uc3a1256.c: $(srcdir)/emulparams/avr32elf_uc3a1256.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a1256 "$(tdir_avr32)" ++eavr32elf_uc3a1512.c: $(srcdir)/emulparams/avr32elf_uc3a1512.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a1512 "$(tdir_avr32)" ++eavr32elf_uc3b064.c: $(srcdir)/emulparams/avr32elf_uc3b064.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b064 "$(tdir_avr32)" ++eavr32elf_uc3b0128.c: $(srcdir)/emulparams/avr32elf_uc3b0128.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b0128 "$(tdir_avr32)" ++eavr32elf_uc3b0256.c: $(srcdir)/emulparams/avr32elf_uc3b0256.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b0256 "$(tdir_avr32)" ++eavr32elf_uc3b164.c: $(srcdir)/emulparams/avr32elf_uc3b164.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b164 "$(tdir_avr32)" ++eavr32elf_uc3b1128.c: $(srcdir)/emulparams/avr32elf_uc3b1128.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b1128 "$(tdir_avr32)" ++eavr32elf_uc3b1256.c: $(srcdir)/emulparams/avr32elf_uc3b1256.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b1256 "$(tdir_avr32)" ++eavr32linux.c: $(srcdir)/emulparams/avr32linux.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32linux "$(tdir_avr32)" + ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \ + $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS} + ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)" +@@ -1800,7 +1870,9 @@ install-exec-local: ld-new$(EXEEXT) + || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \ + fi + +-install-data-local: ++# We want install to imply install-info as per GNU standards, despite the ++# cygnus option. ++install-data-local: install-info + $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts + for f in ldscripts/*; do \ + $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \ +diff -Nrup binutils-2.17/ld/Makefile.in binutils-2.17.atmel.1.3.0/ld/Makefile.in +--- binutils-2.17/ld/Makefile.in 2006-06-03 06:45:50.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/Makefile.in 2007-03-26 10:32:23.000000000 +0200 +@@ -145,6 +145,7 @@ EMUL_EXTRA_OFILES = @EMUL_EXTRA_OFILES@ + EXEEXT = @EXEEXT@ + GMOFILES = @GMOFILES@ + GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ + GT_NO = @GT_NO@ + GT_YES = @GT_YES@ + HDEFINES = @HDEFINES@ +@@ -213,9 +214,8 @@ VERSION = @VERSION@ + WARN_CFLAGS = @WARN_CFLAGS@ + XGETTEXT = @XGETTEXT@ + YACC = `if [ -f ../bison/bison ]; then echo ../bison/bison -y -L$(srcdir)/../bison/; else echo @YACC@; fi` ++YFLAGS = -d + ac_ct_CC = @ac_ct_CC@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ + am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ + am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ + am__include = @am__include@ +@@ -232,6 +232,7 @@ build_vendor = @build_vendor@ + datadir = @datadir@ + datarootdir = @datarootdir@ + docdir = @docdir@ ++dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + host = @host@ + host_alias = @host_alias@ +@@ -245,12 +246,15 @@ install_sh = @install_sh@ + l = @l@ + libdir = @libdir@ + libexecdir = @libexecdir@ ++localedir = @localedir@ + localstatedir = @localstatedir@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ ++psdir = @psdir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ +@@ -263,7 +267,6 @@ use_sysroot = @use_sysroot@ + AUTOMAKE_OPTIONS = cygnus dejagnu + SUBDIRS = po + tooldir = $(exec_prefix)/$(target_alias) +-YFLAGS = -d + AM_CFLAGS = $(WARN_CFLAGS) + + # We put the scripts in the directory $(scriptdir)/ldscripts. +@@ -357,6 +360,9 @@ ALL_EMULATIONS = \ + eavr3.o \ + eavr4.o \ + eavr5.o \ ++ eavr32elf_ap7000.o \ ++ eavr32elf_uc3a0512.o \ ++ eavr32linux.o \ + ecoff_i860.o \ + ecoff_sparc.o \ + ecrisaout.o \ +@@ -878,10 +884,13 @@ dist-info: $(INFO_DEPS) + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ +- for file in $$d/$$base*; do \ +- relfile=`expr "$$file" : "$$d/\(.*\)"`; \ +- test -f $(distdir)/$$relfile || \ +- cp -p $$file $(distdir)/$$relfile; \ ++ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ ++ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ ++ if test -f $$file; then \ ++ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ ++ test -f $(distdir)/$$relfile || \ ++ cp -p $$file $(distdir)/$$relfile; \ ++ else :; fi; \ + done; \ + done + +@@ -1406,6 +1415,15 @@ eavr5.c: $(srcdir)/emulparams/avr5.sh \ + $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \ + ${GEN_DEPENDS} + ${GENSCRIPTS} avr5 "$(tdir_avr2)" ++eavr32elf_ap7000.c: $(srcdir)/emulparams/avr32elf_ap7000.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_ap7000 "$(tdir_avr32)" ++eavr32elf_uc3a0512.c: $(srcdir)/emulparams/avr32elf_uc3a0512.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a0512 "$(tdir_avr32)" ++eavr32linux.c: $(srcdir)/emulparams/avr32linux.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32linux "$(tdir_avr32)" + ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \ + $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS} + ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)" +@@ -2587,7 +2605,9 @@ install-exec-local: ld-new$(EXEEXT) + || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \ + fi + +-install-data-local: ++# We want install to imply install-info as per GNU standards, despite the ++# cygnus option. ++install-data-local: install-info + $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts + for f in ldscripts/*; do \ + $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \ +diff -Nrup binutils-2.17/ld/scripttempl/elf_xip.sc binutils-2.17.atmel.1.3.0/ld/scripttempl/elf_xip.sc +--- binutils-2.17/ld/scripttempl/elf_xip.sc 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/scripttempl/elf_xip.sc 2007-03-26 10:19:40.000000000 +0200 +@@ -0,0 +1,456 @@ ++# ++# Unusual variables checked by this code: ++# NOP - four byte opcode for no-op (defaults to 0) ++# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not ++# empty. ++# SMALL_DATA_CTOR - .ctors contains small data. ++# SMALL_DATA_DTOR - .dtors contains small data. ++# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start ++# INITIAL_READONLY_SECTIONS - at start of text segment ++# OTHER_READONLY_SECTIONS - other than .text .init .rodata ... ++# (e.g., .PARISC.milli) ++# OTHER_TEXT_SECTIONS - these get put in .text when relocating ++# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ... ++# (e.g., .PARISC.global) ++# OTHER_RELRO_SECTIONS - other than .data.rel.ro ... ++# (e.g. PPC32 .fixup, .got[12]) ++# OTHER_BSS_SECTIONS - other than .bss .sbss ... ++# OTHER_SECTIONS - at the end ++# EXECUTABLE_SYMBOLS - symbols that must be defined for an ++# executable (e.g., _DYNAMIC_LINK) ++# TEXT_START_ADDR - the first byte of the text segment, after any ++# headers. ++# TEXT_BASE_ADDRESS - the first byte of the text segment. ++# TEXT_START_SYMBOLS - symbols that appear at the start of the ++# .text section. ++# DATA_START_SYMBOLS - symbols that appear at the start of the ++# .data section. ++# OTHER_GOT_SYMBOLS - symbols defined just before .got. ++# OTHER_GOT_SECTIONS - sections just after .got. ++# OTHER_SDATA_SECTIONS - sections just after .sdata. ++# OTHER_BSS_SYMBOLS - symbols that appear at the start of the ++# .bss section besides __bss_start. ++# DATA_PLT - .plt should be in data segment, not text segment. ++# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement. ++# BSS_PLT - .plt should be in bss segment ++# TEXT_DYNAMIC - .dynamic in text segment, not data segment. ++# EMBEDDED - whether this is for an embedded system. ++# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set ++# start address of shared library. ++# INPUT_FILES - INPUT command of files to always include ++# WRITABLE_RODATA - if set, the .rodata section should be writable ++# INIT_START, INIT_END - statements just before and just after ++# combination of .init sections. ++# FINI_START, FINI_END - statements just before and just after ++# combination of .fini sections. ++# STACK_ADDR - start of a .stack section. ++# OTHER_END_SYMBOLS - symbols to place right at the end of the script. ++# SEPARATE_GOTPLT - if set, .got.plt should be separate output section, ++# so that .got can be in the RELRO area. It should be set to ++# the number of bytes in the beginning of .got.plt which can be ++# in the RELRO area as well. ++# ++# When adding sections, do note that the names of some sections are used ++# when specifying the start address of the next. ++# ++ ++# Many sections come in three flavours. There is the 'real' section, ++# like ".data". Then there are the per-procedure or per-variable ++# sections, generated by -ffunction-sections and -fdata-sections in GCC, ++# and useful for --gc-sections, which for a variable "foo" might be ++# ".data.foo". Then there are the linkonce sections, for which the linker ++# eliminates duplicates, which are named like ".gnu.linkonce.d.foo". ++# The exact correspondences are: ++# ++# Section Linkonce section ++# .text .gnu.linkonce.t.foo ++# .rodata .gnu.linkonce.r.foo ++# .data .gnu.linkonce.d.foo ++# .bss .gnu.linkonce.b.foo ++# .sdata .gnu.linkonce.s.foo ++# .sbss .gnu.linkonce.sb.foo ++# .sdata2 .gnu.linkonce.s2.foo ++# .sbss2 .gnu.linkonce.sb2.foo ++# .debug_info .gnu.linkonce.wi.foo ++# .tdata .gnu.linkonce.td.foo ++# .tbss .gnu.linkonce.tb.foo ++# ++# Each of these can also have corresponding .rel.* and .rela.* sections. ++ ++test -z "$ENTRY" && ENTRY=_start ++test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} ++test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} ++if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi ++test -z "${ELFSIZE}" && ELFSIZE=32 ++test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8" ++test "$LD_FLAG" = "N" && DATA_ADDR=. ++test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE="" ++test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE="" ++test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT ++if test -n "$RELOCATING"; then ++ RO_REGION="${RO_VMA_REGION+ >}${RO_VMA_REGION}${RO_LMA_REGION+ AT>}${RO_LMA_REGION}" ++ RW_REGION="${RW_VMA_REGION+ >}${RW_VMA_REGION}${RW_LMA_REGION+ AT>}${RW_LMA_REGION}" ++else ++ RO_REGION="" ++ RW_REGION="" ++fi ++INTERP=".interp ${RELOCATING-0} : { *(.interp) }${RO_REGION}" ++PLT=".plt ${RELOCATING-0} : { *(.plt) }" ++if test -z "$GOT"; then ++ if test -z "$SEPARATE_GOTPLT"; then ++ GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }" ++ else ++ GOT=".got ${RELOCATING-0} : { *(.got) }" ++ GOTPLT="${RELOCATING+${DATA_SEGMENT_RELRO_GOTPLT_END}} ++ .got.plt ${RELOCATING-0} : { *(.got.plt) }" ++ fi ++fi ++DALIGN=".dalign : { . = ALIGN(${DATA_SEGMENT_ALIGN}); PROVIDE(_data_lma = .); }${RO_REGION}" ++BALIGN=".balign : { . = ALIGN(${BSS_ALIGNMENT}); _edata = .; }${RW_REGION}" ++DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" ++RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" ++DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }${RW_REGION}" ++STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }" ++if test -z "${NO_SMALL_DATA}"; then ++ SBSS=".sbss ${RELOCATING-0} : ++ { ++ ${RELOCATING+PROVIDE (__sbss_start = .);} ++ ${RELOCATING+PROVIDE (___sbss_start = .);} ++ ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)} ++ *(.dynsbss) ++ *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*}) ++ *(.scommon) ++ ${RELOCATING+PROVIDE (__sbss_end = .);} ++ ${RELOCATING+PROVIDE (___sbss_end = .);} ++ }${RW_REGION}" ++ SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }${RW_REGION}" ++ SDATA="/* We want the small data sections together, so single-instruction offsets ++ can access them all, and initialized data all before uninitialized, so ++ we can shorten the on-disk segment size. */ ++ .sdata ${RELOCATING-0} : ++ { ++ ${RELOCATING+${SDATA_START_SYMBOLS}} ++ ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)} ++ *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) ++ }${RW_REGION}" ++ SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }${RW_REGION}" ++ REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }${RO_REGION} ++ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" ++ REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }${RO_REGION} ++ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }${RO_REGION}" ++ REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }${RO_REGION} ++ .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }${RO_REGION}" ++ REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }${RO_REGION} ++ .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }${RO_REGION}" ++else ++ NO_SMALL_DATA=" " ++fi ++test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" " ++CTOR=".ctors ${CONSTRUCTING-0} : ++ { ++ ${CONSTRUCTING+${CTOR_START}} ++ /* gcc uses crtbegin.o to find the start of ++ the constructors, so we make sure it is ++ first. Because this is a wildcard, it ++ doesn't matter if the user does not ++ actually link against crtbegin.o; the ++ linker won't look for a file to match a ++ wildcard. The wildcard also means that it ++ doesn't matter which directory crtbegin.o ++ is in. */ ++ ++ KEEP (*crtbegin*.o(.ctors)) ++ ++ /* We don't want to include the .ctor section from ++ from the crtend.o file until after the sorted ctors. ++ The .ctor section from the crtend file contains the ++ end of ctors marker and it must be last */ ++ ++ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors)) ++ KEEP (*(SORT(.ctors.*))) ++ KEEP (*(.ctors)) ++ ${CONSTRUCTING+${CTOR_END}} ++ }" ++DTOR=".dtors ${CONSTRUCTING-0} : ++ { ++ ${CONSTRUCTING+${DTOR_START}} ++ KEEP (*crtbegin*.o(.dtors)) ++ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors)) ++ KEEP (*(SORT(.dtors.*))) ++ KEEP (*(.dtors)) ++ ${CONSTRUCTING+${DTOR_END}} ++ }" ++STACK=".stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : ++ { ++ ${RELOCATING+_stack = .;} ++ *(.stack) ++ ${RELOCATING+${STACK_SIZE+. = ${STACK_SIZE};}} ++ ${RELOCATING+_estack = .;} ++ }${RW_REGION}" ++ ++# if this is for an embedded system, don't add SIZEOF_HEADERS. ++if [ -z "$EMBEDDED" ]; then ++ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS" ++else ++ test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}" ++fi ++ ++cat < +- +-extern int var; +-extern void (*func_ptr)(void); +-extern void print_var (void); +-extern void print_foo (void); +-extern int foo; +-extern int var2[2]; +- +-typedef struct +-{ +- int * var; +- void (* func_ptr)(void); +-} +-TEST; +- +-TEST xyz = { &var, print_var }; +- +-int +-main (void) +-{ +- print_var (); +- +- printf ("We see var = %d\n", var); +- printf ("Setting var = 456\n"); +- +- var = 456; +- +- print_var (); +- printf ("We see var = %d\n\n", var); +- +- var = 90; +- print_var (); +- printf ("We see var = %d\n\n", var); +- +- print_foo (); +- printf ("We see foo = %d\n", foo); +- printf ("Setting foo = 19\n"); +- foo = 19; +- print_foo (); +- printf ("We see foo = %d\n\n", foo); +- fflush (stdout); +- +- printf ("Calling dllimported function pointer\n"); +- func_ptr (); +- +- printf ("Calling functions using global structure\n"); +- xyz.func_ptr (); +- * xyz.var = 40; +- xyz.func_ptr (); +- +- printf ("We see var2[0] = %d\n\n", var2[0]); +- +- return 0; +-} ++#include ++ ++extern int var; ++extern void (*func_ptr)(void); ++extern void print_var (void); ++extern void print_foo (void); ++extern int foo; ++extern int var2[2]; ++ ++typedef struct ++{ ++ int * var; ++ void (* func_ptr)(void); ++} ++TEST; ++ ++TEST xyz = { &var, print_var }; ++ ++int ++main (void) ++{ ++ print_var (); ++ ++ printf ("We see var = %d\n", var); ++ printf ("Setting var = 456\n"); ++ ++ var = 456; ++ ++ print_var (); ++ printf ("We see var = %d\n\n", var); ++ ++ var = 90; ++ print_var (); ++ printf ("We see var = %d\n\n", var); ++ ++ print_foo (); ++ printf ("We see foo = %d\n", foo); ++ printf ("Setting foo = 19\n"); ++ foo = 19; ++ print_foo (); ++ printf ("We see foo = %d\n\n", foo); ++ fflush (stdout); ++ ++ printf ("Calling dllimported function pointer\n"); ++ func_ptr (); ++ ++ printf ("Calling functions using global structure\n"); ++ xyz.func_ptr (); ++ * xyz.var = 40; ++ xyz.func_ptr (); ++ ++ printf ("We see var2[0] = %d\n\n", var2[0]); ++ ++ return 0; ++} +diff -Nrup binutils-2.17/ld/testsuite/ld-auto-import/dll.c binutils-2.17.atmel.1.3.0/ld/testsuite/ld-auto-import/dll.c +--- binutils-2.17/ld/testsuite/ld-auto-import/dll.c 2002-12-18 17:05:10.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-auto-import/dll.c 2007-03-26 10:19:37.000000000 +0200 +@@ -1,20 +1,20 @@ +-int var = 123; +-int foo = 121; +- +-int var2[2]= { 123, 456 }; +- +-#include +- +-void +-print_var (void) +-{ +- printf ("DLL sees var = %d\n", var); +-} +- +-void +-print_foo (void) +-{ +- printf ("DLL sees foo = %d\n", foo); +-} +- +-void (* func_ptr)(void) = print_foo; ++int var = 123; ++int foo = 121; ++ ++int var2[2]= { 123, 456 }; ++ ++#include ++ ++void ++print_var (void) ++{ ++ printf ("DLL sees var = %d\n", var); ++} ++ ++void ++print_foo (void) ++{ ++ printf ("DLL sees foo = %d\n", foo); ++} ++ ++void (* func_ptr)(void) = print_foo; +diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/avr32.exp binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/avr32.exp +--- binutils-2.17/ld/testsuite/ld-avr32/avr32.exp 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/avr32.exp 2007-03-26 10:19:30.000000000 +0200 +@@ -0,0 +1,25 @@ ++# Expect script for AVR32 ELF linker tests. ++# Copyright 2004-2006 Atmel Corporation. ++# ++# This file is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# 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. ++# ++# Written by Haavard Skinnemoen (hskinnemoen@atmel.com) ++# ++ ++if ![istarget avr32-*-*] { ++ return ++} ++ ++run_dump_test "pcrel" +diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/pcrel.d binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/pcrel.d +--- binutils-2.17/ld/testsuite/ld-avr32/pcrel.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/pcrel.d 2007-03-26 10:19:30.000000000 +0200 +@@ -0,0 +1,74 @@ ++#name: AVR32 ELF PC-relative external relocs ++#source: symbols.s ++#source: ../../../gas/testsuite/gas/avr32/pcrel.s ++#ld: -T $srcdir/$subdir/pcrel.ld ++#objdump: -d ++ ++.*: file format elf.*avr32.* ++ ++Disassembly of section .text: ++ ++a0000000 <_start>: ++a0000000: d7 03 nop ++a0000002: d7 03 nop ++ ++a0000004 : ++a0000004: d7 03 nop ++a0000006: c0 28 rjmp a000000a ++a0000008: d7 03 nop ++a000000a: e0 8f 01 fb bral a0000400 ++ ++a000000e : ++a000000e: d7 03 nop ++a0000010 : ++a0000010: c0 2c rcall a0000014 ++a0000012: d7 03 nop ++a0000014: ee b0 ff f6 rcall a0200000 ++ ++a0000018 : ++a0000018: c0 31 brne a000001e ++a000001a: fe 9f ff ff bral a0000018 ++a000001e: ee 90 ff f1 breq a0200000 ++ ++a0000022 : ++a0000022: 48 30 lddpc r0,a000002c ++a0000024: 48 20 lddpc r0,a000002c ++a0000026: fe f0 7f da ld.w r0,pc\[32730\] ++ ... ++ ++a000002c : ++a000002c: d7 03 nop ++a000002e: d7 03 nop ++ ++a0000030 : ++a0000030: 48 20 lddpc r0,a0000038 ++a0000032: 48 30 lddpc r0,a000003c ++a0000034: 48 20 lddpc r0,a000003c ++a0000036: 00 00 add r0,r0 ++a0000038: d7 03 nop ++a000003a: d7 03 nop ++a000003c: d7 03 nop ++a000003e: d7 03 nop ++ ++Disassembly of section \.text\.init: ++a0000040 : ++a0000040: fe b0 ff e7 rcall a000000e ++a0000044: d7 03 nop ++a0000046: fe b0 ff e4 rcall a000000e ++a000004a: fe b0 ff e3 rcall a0000010 ++a000004e: d7 03 nop ++a0000050: fe b0 ff e0 rcall a0000010 ++ ++Disassembly of section \.text\.pcrel10: ++ ++a0000400 : ++a0000400: d7 03 nop ++ ++Disassembly of section \.text\.pcrel16: ++ ++a0008000 : ++a0008000: d7 03 nop ++ ++Disassembly of section \.text\.pcrel21: ++a0200000 : ++a0200000: d7 03 nop +diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/pcrel.ld binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/pcrel.ld +--- binutils-2.17/ld/testsuite/ld-avr32/pcrel.ld 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/pcrel.ld 2007-03-26 10:19:30.000000000 +0200 +@@ -0,0 +1,23 @@ ++ENTRY(_start) ++SECTIONS ++{ ++ .text 0xa0000000: ++ { ++ *(.text) ++ } ++ ++ .text.pcrel10 0xa0000400: ++ { ++ *(.text.pcrel10) ++ } ++ ++ .text.pcrel16 0xa0008000: ++ { ++ *(.text.pcrel16) ++ } ++ ++ .text.pcrel21 0xa0200000: ++ { ++ *(.text.pcrel21) ++ } ++} +diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/symbols.s binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/symbols.s +--- binutils-2.17/ld/testsuite/ld-avr32/symbols.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/symbols.s 2007-03-26 10:19:30.000000000 +0200 +@@ -0,0 +1,20 @@ ++ .text ++ .global _start ++_start: ++ nop ++ nop ++ ++ .section .text.pcrel10,"ax" ++ .global extsym10 ++extsym10: ++ nop ++ ++ .section .text.pcrel16,"ax" ++ .global extsym16 ++extsym16: ++ nop ++ ++ .section .text.pcrel21,"ax" ++ .global extsym21 ++extsym21: ++ nop +diff -Nrup binutils-2.17/opcodes/aclocal.m4 binutils-2.17.atmel.1.3.0/opcodes/aclocal.m4 +--- binutils-2.17/opcodes/aclocal.m4 2005-09-30 20:05:59.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/opcodes/aclocal.m4 2007-03-26 10:31:34.000000000 +0200 +@@ -1,4 +1,4 @@ +-# generated automatically by aclocal 1.9.5 -*- Autoconf -*- ++# generated automatically by aclocal 1.9.6 -*- Autoconf -*- + + # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + # 2005 Free Software Foundation, Inc. +@@ -28,7 +28,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api + # Call AM_AUTOMAKE_VERSION so it can be traced. + # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. + AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +- [AM_AUTOMAKE_VERSION([1.9.5])]) ++ [AM_AUTOMAKE_VERSION([1.9.6])]) + + # AM_AUX_DIR_EXPAND -*- Autoconf -*- + +diff -Nrup binutils-2.17/opcodes/avr32-asm.c binutils-2.17.atmel.1.3.0/opcodes/avr32-asm.c +--- binutils-2.17/opcodes/avr32-asm.c 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-asm.c 2007-03-26 10:20:34.000000000 +0200 +@@ -0,0 +1,264 @@ ++/* Assembler interface for AVR32. ++ Copyright 2005, 2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of libopcodes. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#include ++ ++#include "avr32-opc.h" ++#include "avr32-asm.h" ++ ++/* Structure for a register hash table entry. */ ++struct reg_entry ++{ ++ const char *name; ++ int number; ++}; ++ ++/* Integer Registers. */ ++static const struct reg_entry reg_table[] = ++ { ++ /* Primary names (used by the disassembler) */ ++ { "r0", 0 }, { "r1", 1 }, { "r2", 2 }, { "r3", 3 }, ++ { "r4", 4 }, { "r5", 5 }, { "r6", 6 }, { "r7", 7 }, ++ { "r8", 8 }, { "r9", 9 }, { "r10", 10 }, { "r11", 11 }, ++ { "r12", 12 }, { "sp", 13 }, { "lr", 14 }, { "pc", 15 }, ++ /* Alternatives to sp, lr and pc. */ ++ { "r13", 13 }, { "r14", 14 }, { "r15", 15 }, ++ }; ++#define AVR32_NR_INTREGS (sizeof(reg_table)/sizeof(reg_table[0])) ++ ++/* Coprocessor Registers. */ ++static const struct reg_entry cr_table[] = ++ { ++ { "cr0", 0 }, { "cr1", 1 }, { "cr2", 2 }, { "cr3", 3 }, ++ { "cr4", 4 }, { "cr5", 5 }, { "cr6", 6 }, { "cr7", 7 }, ++ { "cr8", 8 }, { "cr9", 9 }, { "cr10", 10 }, { "cr11", 11 }, ++ { "cr12", 12 }, { "cr13", 13 }, { "cr14", 14 }, { "cr15", 15 }, ++ }; ++#define AVR32_NR_CPREGS (sizeof(cr_table)/sizeof(cr_table[0])) ++ ++/* Floating-point Registers. */ ++static const struct reg_entry fr_table[] = ++ { ++ { "fr0", 0 }, { "fr1", 1 }, { "fr2", 2 }, { "fr3", 3 }, ++ { "fr4", 4 }, { "fr5", 5 }, { "fr6", 6 }, { "fr7", 7 }, ++ { "fr8", 8 }, { "fr9", 9 }, { "fr10", 10 }, { "fr11", 11 }, ++ { "fr12", 12 }, { "fr13", 13 }, { "fr14", 14 }, { "fr15", 15 }, ++ }; ++#define AVR32_NR_FPREGS (sizeof(fr_table)/sizeof(fr_table[0])) ++ ++/* PiCo Registers. */ ++static const struct reg_entry pico_table[] = ++ { ++ { "inpix2", 0 }, { "inpix1", 1 }, { "inpix0", 2 }, ++ { "outpix2", 3 }, { "outpix1", 4 }, { "outpix0", 5 }, ++ { "coeff0_a", 6 }, { "coeff0_b", 7 }, { "coeff1_a", 8 }, ++ { "coeff1_b", 9 }, { "coeff2_a", 10 }, { "coeff2_b", 11 }, ++ { "vmu0_out", 12 }, { "vmu1_out", 13 }, { "vmu2_out", 14 }, ++ { "config", 15 }, ++ }; ++#define AVR32_NR_PICOREGS (sizeof(pico_table)/sizeof(pico_table[0])) ++ ++int ++avr32_parse_intreg(const char *str) ++{ ++ unsigned int i; ++ ++ for (i = 0; i < AVR32_NR_INTREGS; i++) ++ { ++ if (strcasecmp(reg_table[i].name, str) == 0) ++ return reg_table[i].number; ++ } ++ ++ return -1; ++} ++ ++int ++avr32_parse_cpreg(const char *str) ++{ ++ unsigned int i; ++ ++ for (i = 0; i < AVR32_NR_CPREGS; i++) ++ { ++ if (strcasecmp(cr_table[i].name, str) == 0) ++ return cr_table[i].number; ++ } ++ ++ return -1; ++} ++ ++int avr32_parse_fpreg(const char *str) ++{ ++ unsigned int i; ++ ++ for (i = 0; i < AVR32_NR_FPREGS; i++) ++ { ++ if (strcasecmp(fr_table[i].name, str) == 0) ++ return fr_table[i].number; ++ } ++ ++ return -1; ++} ++ ++int avr32_parse_picoreg(const char *str) ++{ ++ unsigned int i; ++ ++ for (i = 0; i < AVR32_NR_PICOREGS; i++) ++ { ++ if (strcasecmp(pico_table[i].name, str) == 0) ++ return pico_table[i].number; ++ } ++ ++ return -1; ++} ++ ++static unsigned long ++parse_reglist(char *str, char **endptr, int (*parse_reg)(const char *)) ++{ ++ int reg_from, reg_to; ++ unsigned long result = 0; ++ char *p1, *p2, c; ++ ++ while (*str) ++ { ++ for (p1 = str; *p1; p1++) ++ if (*p1 == ',' || *p1 == '-') ++ break; ++ ++ c = *p1, *p1 = 0; ++ reg_from = parse_reg(str); ++ *p1 = c; ++ ++ if (reg_from < 0) ++ break; ++ ++ if (*p1 == '-') ++ { ++ for (p2 = ++p1; *p2; p2++) ++ if (*p2 == ',') ++ break; ++ ++ c = *p2, *p2 = 0; ++ /* printf("going to parse reg_to from `%s'\n", p1); */ ++ reg_to = parse_reg(p1); ++ *p2 = c; ++ ++ if (reg_to < 0) ++ break; ++ ++ while (reg_from <= reg_to) ++ result |= (1 << reg_from++); ++ p1 = p2; ++ } ++ else ++ result |= (1 << reg_from); ++ ++ str = p1; ++ if (*str) ++str; ++ } ++ ++ if (endptr) ++ *endptr = str; ++ ++ return result; ++} ++ ++unsigned long ++avr32_parse_reglist(char *str, char **endptr) ++{ ++ return parse_reglist(str, endptr, avr32_parse_intreg); ++} ++ ++unsigned long ++avr32_parse_cpreglist(char *str, char **endptr) ++{ ++ return parse_reglist(str, endptr, avr32_parse_cpreg); ++} ++ ++unsigned long ++avr32_parse_pico_reglist(char *str, char **endptr) ++{ ++ return parse_reglist(str, endptr, avr32_parse_picoreg); ++} ++ ++int ++avr32_make_regmask8(unsigned long regmask16, unsigned long *regmask8) ++{ ++ unsigned long result = 0; ++ ++ /* printf("convert regmask16 0x%04lx\n", regmask16); */ ++ ++ if (regmask16 & 0xf) ++ { ++ if ((regmask16 & 0xf) == 0xf) ++ result |= 1 << 0; ++ else ++ return -1; ++ } ++ if (regmask16 & 0xf0) ++ { ++ if ((regmask16 & 0xf0) == 0xf0) ++ result |= 1 << 1; ++ else ++ return -1; ++ } ++ if (regmask16 & 0x300) ++ { ++ if ((regmask16 & 0x300) == 0x300) ++ result |= 1 << 2; ++ else ++ return -1; ++ } ++ if (regmask16 & (1 << 13)) ++ return -1; ++ ++ if (regmask16 & (1 << 10)) ++ result |= 1 << 3; ++ if (regmask16 & (1 << 11)) ++ result |= 1 << 4; ++ if (regmask16 & (1 << 12)) ++ result |= 1 << 5; ++ if (regmask16 & (1 << 14)) ++ result |= 1 << 6; ++ if (regmask16 & (1 << 15)) ++ result |= 1 << 7; ++ ++ *regmask8 = result; ++ ++ return 0; ++} ++ ++#if 0 ++struct reg_map ++{ ++ const struct reg_entry *names; ++ int nr_regs; ++ struct hash_control *htab; ++ const char *errmsg; ++}; ++ ++struct reg_map all_reg_maps[] = ++ { ++ { reg_table, AVR32_NR_INTREGS, NULL, N_("integral register expected") }, ++ { cr_table, AVR32_NR_CPREGS, NULL, N_("coprocessor register expected") }, ++ }; ++#endif +diff -Nrup binutils-2.17/opcodes/avr32-asm.h binutils-2.17.atmel.1.3.0/opcodes/avr32-asm.h +--- binutils-2.17/opcodes/avr32-asm.h 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-asm.h 2007-03-26 10:20:34.000000000 +0200 +@@ -0,0 +1,42 @@ ++/* Assembler interface for AVR32. ++ Copyright 2005, 2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of libopcodes. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++#ifndef __OPCODES_AVR32_ASM_H ++#define __OPCODES_AVR32_ASM_H ++ ++extern int ++avr32_parse_intreg(const char *str); ++extern int ++avr32_parse_cpreg(const char *str); ++extern int ++avr32_parse_fpreg(const char *str); ++extern int ++avr32_parse_picoreg(const char *str); ++extern unsigned long ++avr32_parse_reglist(char *str, char **endptr); ++extern unsigned long ++avr32_parse_cpreglist(char *str, char **endptr); ++extern unsigned long ++avr32_parse_pico_reglist(char *str, char **endptr); ++extern int ++avr32_make_regmask8(unsigned long regmask16, unsigned long *regmask8); ++ ++#endif /* __OPCODES_AVR32_ASM_H */ +diff -Nrup binutils-2.17/opcodes/avr32-dis.c binutils-2.17.atmel.1.3.0/opcodes/avr32-dis.c +--- binutils-2.17/opcodes/avr32-dis.c 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-dis.c 2007-09-28 10:30:46.000000000 +0200 +@@ -0,0 +1,891 @@ ++/* Print AVR32 instructions for GDB and objdump. ++ Copyright 2005, 2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of libopcodes. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#include "sysdep.h" ++#include "dis-asm.h" ++#include "avr32-opc.h" ++#include "opintl.h" ++#include "safe-ctype.h" ++ ++/* TODO: Share this with -asm */ ++ ++/* Structure for a register hash table entry. */ ++struct reg_entry ++{ ++ const char *name; ++ int number; ++}; ++ ++#ifndef strneq ++#define strneq(a,b,n) (strncmp ((a), (b), (n)) == 0) ++#endif ++ ++ ++static const struct reg_entry reg_table[] = ++ { ++ /* Primary names (used by the disassembler) */ ++ { "r0", 0 }, { "r1", 1 }, { "r2", 2 }, { "r3", 3 }, ++ { "r4", 4 }, { "r5", 5 }, { "r6", 6 }, { "r7", 7 }, ++ { "r8", 8 }, { "r9", 9 }, { "r10", 10 }, { "r11", 11 }, ++ { "r12", 12 }, { "sp", 13 }, { "lr", 14 }, { "pc", 15 }, ++ /* Alternatives to sp, lr and pc. */ ++ { "r13", 13 }, { "r14", 14 }, { "r15", 15 }, ++ }; ++#define AVR32_NR_INTREGS (sizeof(reg_table)/sizeof(reg_table[0])) ++ ++/* Coprocessor Registers. */ ++static const struct reg_entry cr_table[] = ++ { ++ { "cr0", 0 }, { "cr1", 1 }, { "cr2", 2 }, { "cr3", 3 }, ++ { "cr4", 4 }, { "cr5", 5 }, { "cr6", 6 }, { "cr7", 7 }, ++ { "cr8", 8 }, { "cr9", 9 }, { "cr10", 10 }, { "cr11", 11 }, ++ { "cr12", 12 }, { "cr13", 13 }, { "cr14", 14 }, { "cr15", 15 }, ++ }; ++#define AVR32_NR_CPREGS (sizeof(cr_table)/sizeof(cr_table[0])) ++ ++static const char bparts[4] = { 'b', 'l', 'u', 't' }; ++static bfd_vma current_pc; ++ ++struct avr32_field_value ++{ ++ const struct avr32_ifield *ifield; ++ unsigned long value; ++}; ++ ++struct avr32_operand ++{ ++ int id; ++ int is_pcrel; ++ int align_order; ++ int (*print)(struct avr32_operand *op, struct disassemble_info *info, ++ struct avr32_field_value *ifields); ++}; ++ ++static signed long ++get_signed_value(const struct avr32_field_value *fv) ++{ ++ signed long value = fv->value; ++ ++ if (fv->value & (1 << (fv->ifield->bitsize - 1))) ++ value |= (~0UL << fv->ifield->bitsize); ++ ++ return value; ++} ++ ++static void ++print_reglist_range(unsigned int first, unsigned int last, ++ const struct reg_entry *reg_names, ++ int need_comma, ++ struct disassemble_info *info) ++{ ++ if (need_comma) ++ info->fprintf_func(info->stream, ","); ++ ++ if (first == last) ++ info->fprintf_func(info->stream, "%s", ++ reg_names[first].name); ++ else ++ info->fprintf_func(info->stream, "%s-%s", ++ reg_names[first].name, reg_names[last].name); ++} ++ ++static int ++print_intreg(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ unsigned long regid = ifields[0].value << op->align_order; ++ ++ info->fprintf_func(info->stream, "%s", ++ reg_table[regid].name); ++ return 1; ++} ++ ++static int ++print_intreg_predec(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "--%s", ++ reg_table[ifields[0].value].name); ++ return 1; ++} ++ ++static int ++print_intreg_postinc(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "%s++", ++ reg_table[ifields[0].value].name); ++ return 1; ++} ++ ++static int ++print_intreg_lsl(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ const char *rp = reg_table[ifields[0].value].name; ++ unsigned long sa = ifields[1].value; ++ ++ if (sa) ++ info->fprintf_func(info->stream, "%s<<0x%lx", rp, sa); ++ else ++ info->fprintf_func(info->stream, "%s", rp); ++ ++ return 2; ++} ++ ++static int ++print_intreg_lsr(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ const char *rp = reg_table[ifields[0].value].name; ++ unsigned long sa = ifields[1].value; ++ ++ if (sa) ++ info->fprintf_func(info->stream, "%s>>0x%lx", rp, sa); ++ else ++ info->fprintf_func(info->stream, "%s", rp); ++ ++ return 2; ++} ++ ++static int ++print_intreg_bpart(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "%s:%c", ++ reg_table[ifields[0].value].name, ++ bparts[ifields[1].value]); ++ return 2; ++} ++ ++static int ++print_intreg_hpart(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "%s:%c", ++ reg_table[ifields[0].value].name, ++ ifields[1].value ? 't' : 'b'); ++ return 2; ++} ++ ++static int ++print_intreg_sdisp(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ signed long disp; ++ ++ disp = get_signed_value(&ifields[1]) << op->align_order; ++ ++ info->fprintf_func(info->stream, "%s[%ld]", ++ reg_table[ifields[0].value].name, disp); ++ return 2; ++} ++ ++static int ++print_intreg_udisp(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "%s[0x%lx]", ++ reg_table[ifields[0].value].name, ++ ifields[1].value << op->align_order); ++ return 2; ++} ++ ++static int ++print_intreg_index(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ const char *rb, *ri; ++ unsigned long sa = ifields[2].value; ++ ++ rb = reg_table[ifields[0].value].name; ++ ri = reg_table[ifields[1].value].name; ++ ++ if (sa) ++ info->fprintf_func(info->stream, "%s[%s<<0x%lx]", rb, ri, sa); ++ else ++ info->fprintf_func(info->stream, "%s[%s]", rb, ri); ++ ++ return 3; ++} ++ ++static int ++print_intreg_xindex(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "%s[%s:%c<<2]", ++ reg_table[ifields[0].value].name, ++ reg_table[ifields[1].value].name, ++ bparts[ifields[2].value]); ++ return 3; ++} ++ ++static int ++print_jmplabel(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ bfd_vma address, offset; ++ ++ offset = get_signed_value(ifields) << op->align_order; ++ address = (current_pc & (~0UL << op->align_order)) + offset; ++ ++ info->print_address_func(address, info); ++ ++ return 1; ++} ++ ++static int ++print_pc_disp(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ bfd_vma address, offset; ++ ++ offset = ifields[0].value << op->align_order; ++ address = (current_pc & (~0UL << op->align_order)) + offset; ++ ++ info->print_address_func(address, info); ++ ++ return 1; ++} ++ ++static int ++print_sp(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields ATTRIBUTE_UNUSED) ++{ ++ info->fprintf_func(info->stream, "sp"); ++ return 1; ++} ++ ++static int ++print_sp_disp(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "sp[0x%lx]", ++ ifields[0].value << op->align_order); ++ return 1; ++} ++ ++static int ++print_cpno(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "cp%lu", ifields[0].value); ++ return 1; ++} ++ ++static int ++print_cpreg(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "cr%lu", ++ ifields[0].value << op->align_order); ++ return 1; ++} ++ ++static int ++print_uconst(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "0x%lx", ++ ifields[0].value << op->align_order); ++ return 1; ++} ++ ++static int ++print_sconst(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ info->fprintf_func(info->stream, "%ld", ++ get_signed_value(ifields) << op->align_order); ++ return 1; ++} ++ ++static int ++print_reglist8_head(unsigned long regmask, int *commap, ++ struct disassemble_info *info) ++{ ++ int first = -1, last, i = 0; ++ int need_comma = 0; ++ ++ while (i < 12) ++ { ++ if (first == -1 && (regmask & 1)) ++ { ++ first = i; ++ } ++ else if (first != -1 && !(regmask & 1)) ++ { ++ last = i - 1; ++ ++ print_reglist_range(first, last, reg_table, need_comma, info); ++ need_comma = 1; ++ first = -1; ++ } ++ ++ if (i < 8) ++ i += 4; ++ else if (i < 10) ++ i += 2; ++ else ++ i++; ++ regmask >>= 1; ++ } ++ ++ *commap = need_comma; ++ return first; ++} ++ ++static void ++print_reglist8_tail(unsigned long regmask, int first, int need_comma, ++ struct disassemble_info *info) ++{ ++ int last = 11; ++ ++ if (regmask & 0x20) ++ { ++ if (first == -1) ++ first = 12; ++ last = 12; ++ } ++ ++ if (first != -1) ++ { ++ print_reglist_range(first, last, reg_table, need_comma, info); ++ need_comma = 1; ++ first = -1; ++ } ++ ++ if (regmask & 0x40) ++ { ++ if (first == -1) ++ first = 14; ++ last = 14; ++ } ++ ++ if (regmask & 0x80) ++ { ++ if (first == -1) ++ first = 15; ++ last = 15; ++ } ++ ++ if (first != -1) ++ print_reglist_range(first, last, reg_table, need_comma, info); ++} ++ ++static int ++print_reglist8(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ unsigned long regmask = ifields[0].value; ++ int first, need_comma; ++ ++ first = print_reglist8_head(regmask, &need_comma, info); ++ print_reglist8_tail(regmask, first, need_comma, info); ++ ++ return 1; ++} ++ ++static int ++print_reglist9(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ unsigned long regmask = ifields[0].value >> 1; ++ int first, last, need_comma; ++ ++ first = print_reglist8_head(regmask, &need_comma, info); ++ ++ if ((ifields[0].value & 0x101) == 0x101) ++ { ++ if (first != -1) ++ { ++ last = 11; ++ ++ print_reglist_range(first, last, reg_table, need_comma, info); ++ need_comma = 1; ++ first = -1; ++ } ++ ++ print_reglist_range(15, 15, reg_table, need_comma, info); ++ ++ regmask >>= 5; ++ ++ if ((regmask & 3) == 0) ++ info->fprintf_func(info->stream, ",r12=0"); ++ else if ((regmask & 3) == 1) ++ info->fprintf_func(info->stream, ",r12=1"); ++ else ++ info->fprintf_func(info->stream, ",r12=-1"); ++ } ++ else ++ print_reglist8_tail(regmask, first, need_comma, info); ++ ++ return 1; ++} ++ ++static int ++print_reglist16(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ unsigned long regmask = ifields[0].value; ++ unsigned int i = 0, first, last; ++ int need_comma = 0; ++ ++ while (i < 16) ++ { ++ if (regmask & 1) ++ { ++ first = i; ++ while (i < 16) ++ { ++ i++; ++ regmask >>= 1; ++ if (!(regmask & 1)) ++ break; ++ } ++ last = i - 1; ++ print_reglist_range(first, last, reg_table, need_comma, info); ++ need_comma = 1; ++ } ++ else ++ { ++ i++; ++ regmask >>= 1; ++ } ++ } ++ ++ return 1; ++} ++ ++static int ++print_reglist_ldm(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ int rp, w_bit; ++ int i, first, last; ++ unsigned long regmask; ++ ++ rp = ifields[0].value; ++ w_bit = ifields[1].value; ++ regmask = ifields[2].value; ++ ++ if (regmask & (1 << AVR32_REG_PC) && rp == AVR32_REG_PC) ++ { ++ if (w_bit) ++ info->fprintf_func(info->stream, "sp++"); ++ else ++ info->fprintf_func(info->stream, "sp"); ++ ++ for (i = 0; i < 12; ) ++ { ++ if (regmask & (1 << i)) ++ { ++ first = i; ++ while (i < 12) ++ { ++ i++; ++ if (!(regmask & (1 << i))) ++ break; ++ } ++ last = i - 1; ++ print_reglist_range(first, last, reg_table, 1, info); ++ } ++ else ++ i++; ++ } ++ ++ info->fprintf_func(info->stream, ",pc"); ++ if (regmask & (1 << AVR32_REG_LR)) ++ info->fprintf_func(info->stream, ",r12=-1"); ++ else if (regmask & (1 << AVR32_REG_R12)) ++ info->fprintf_func(info->stream, ",r12=1"); ++ else ++ info->fprintf_func(info->stream, ",r12=0"); ++ } ++ else ++ { ++ if (w_bit) ++ info->fprintf_func(info->stream, "%s++,", reg_table[rp].name); ++ else ++ info->fprintf_func(info->stream, "%s,", reg_table[rp].name); ++ ++ print_reglist16(op, info, ifields + 2); ++ } ++ ++ return 3; ++} ++ ++static int ++print_reglist_cp8(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ unsigned long regmask = ifields[0].value; ++ unsigned int i = 0, first, last, offset = 0; ++ int need_comma = 0; ++ ++ if (ifields[1].value) ++ offset = 8; ++ ++ while (i < 8) ++ { ++ if (regmask & 1) ++ { ++ first = i; ++ while (i < 8) ++ { ++ i++; ++ regmask >>= 1; ++ if (!(regmask & 1)) ++ break; ++ } ++ last = i - 1; ++ print_reglist_range(offset + first, offset + last, ++ cr_table, need_comma, info); ++ need_comma = 1; ++ } ++ else ++ { ++ i++; ++ regmask >>= 1; ++ } ++ } ++ ++ return 2; ++} ++ ++static int ++print_reglist_cpd8(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ unsigned long regmask = ifields[0].value; ++ unsigned int i = 0, first, last; ++ int need_comma = 0; ++ ++ while (i < 8) ++ { ++ if (regmask & 1) ++ { ++ first = 2 * i; ++ while (i < 8) ++ { ++ i++; ++ regmask >>= 1; ++ if (!(regmask & 1)) ++ break; ++ } ++ last = 2 * (i - 1) + 1; ++ print_reglist_range(first, last, cr_table, need_comma, info); ++ need_comma = 1; ++ } ++ else ++ { ++ i++; ++ regmask >>= 1; ++ } ++ } ++ ++ return 1; ++} ++ ++static int ++print_retval(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ unsigned long regid = ifields[0].value; ++ const char *retval; ++ ++ if (regid < AVR32_REG_SP) ++ retval = reg_table[regid].name; ++ else if (regid == AVR32_REG_SP) ++ retval = "0"; ++ else if (regid == AVR32_REG_LR) ++ retval = "-1"; ++ else ++ retval = "1"; ++ ++ info->fprintf_func(info->stream, "%s", retval); ++ ++ return 1; ++} ++ ++static int ++print_mcall(struct avr32_operand *op, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ unsigned long regid = ifields[0].value; ++ ++ if (regid == AVR32_REG_PC) ++ print_jmplabel(op, info, ifields + 1); ++ else ++ print_intreg_sdisp(op, info, ifields); ++ ++ return 2; ++} ++ ++static int ++print_jospinc(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields) ++{ ++ signed long value = ifields[0].value; ++ ++ if (value >= 4) ++ value -= 8; ++ else ++ value += 1; ++ ++ info->fprintf_func(info->stream, "%ld", value); ++ ++ return 1; ++} ++ ++static int ++print_coh(struct avr32_operand *op ATTRIBUTE_UNUSED, ++ struct disassemble_info *info, ++ struct avr32_field_value *ifields ATTRIBUTE_UNUSED) ++{ ++ info->fprintf_func(info->stream, "COH"); ++ return 0; ++} ++ ++#define OP(name, sgn, pcrel, align, func) \ ++ { AVR32_OPERAND_##name, pcrel, align, print_##func } ++ ++struct avr32_operand operand[AVR32_NR_OPERANDS] = ++ { ++ OP(INTREG, 0, 0, 0, intreg), ++ OP(INTREG_PREDEC, 0, 0, 0, intreg_predec), ++ OP(INTREG_POSTINC, 0, 0, 0, intreg_postinc), ++ OP(INTREG_LSL, 0, 0, 0, intreg_lsl), ++ OP(INTREG_LSR, 0, 0, 0, intreg_lsr), ++ OP(INTREG_BSEL, 0, 0, 0, intreg_bpart), ++ OP(INTREG_HSEL, 0, 0, 1, intreg_hpart), ++ OP(INTREG_SDISP, 1, 0, 0, intreg_sdisp), ++ OP(INTREG_SDISP_H, 1, 0, 1, intreg_sdisp), ++ OP(INTREG_SDISP_W, 1, 0, 2, intreg_sdisp), ++ OP(INTREG_UDISP, 0, 0, 0, intreg_udisp), ++ OP(INTREG_UDISP_H, 0, 0, 1, intreg_udisp), ++ OP(INTREG_UDISP_W, 0, 0, 2, intreg_udisp), ++ OP(INTREG_INDEX, 0, 0, 0, intreg_index), ++ OP(INTREG_XINDEX, 0, 0, 0, intreg_xindex), ++ OP(DWREG, 0, 0, 1, intreg), ++ OP(PC_UDISP_W, 0, 1, 2, pc_disp), ++ OP(SP, 0, 0, 0, sp), ++ OP(SP_UDISP_W, 0, 0, 2, sp_disp), ++ OP(CPNO, 0, 0, 0, cpno), ++ OP(CPREG, 0, 0, 0, cpreg), ++ OP(CPREG_D, 0, 0, 1, cpreg), ++ OP(UNSIGNED_CONST, 0, 0, 0, uconst), ++ OP(UNSIGNED_CONST_W, 0, 0, 2, uconst), ++ OP(SIGNED_CONST, 1, 0, 0, sconst), ++ OP(SIGNED_CONST_W, 1, 0, 2, sconst), ++ OP(JMPLABEL, 1, 1, 1, jmplabel), ++ OP(UNSIGNED_NUMBER, 0, 0, 0, uconst), ++ OP(UNSIGNED_NUMBER_W, 0, 0, 2, uconst), ++ OP(REGLIST8, 0, 0, 0, reglist8), ++ OP(REGLIST9, 0, 0, 0, reglist9), ++ OP(REGLIST16, 0, 0, 0, reglist16), ++ OP(REGLIST_LDM, 0, 0, 0, reglist_ldm), ++ OP(REGLIST_CP8, 0, 0, 0, reglist_cp8), ++ OP(REGLIST_CPD8, 0, 0, 0, reglist_cpd8), ++ OP(RETVAL, 0, 0, 0, retval), ++ OP(MCALL, 1, 0, 2, mcall), ++ OP(JOSPINC, 0, 0, 0, jospinc), ++ OP(COH, 0, 0, 0, coh), ++ }; ++ ++static void ++print_opcode(bfd_vma insn_word, const struct avr32_opcode *opc, ++ bfd_vma pc, struct disassemble_info *info) ++{ ++ const struct avr32_syntax *syntax = opc->syntax; ++ struct avr32_field_value fields[AVR32_MAX_FIELDS]; ++ unsigned int i, next_field = 0, nr_operands; ++ ++ for (i = 0; i < opc->nr_fields; i++) ++ { ++ opc->fields[i]->extract(opc->fields[i], &insn_word, &fields[i].value); ++ fields[i].ifield = opc->fields[i]; ++ } ++ ++ current_pc = pc; ++ info->fprintf_func(info->stream, "%s", syntax->mnemonic->name); ++ ++ if (syntax->nr_operands < 0) ++ nr_operands = (unsigned int) -syntax->nr_operands; ++ else ++ nr_operands = (unsigned int) syntax->nr_operands; ++ ++ for (i = 0; i < nr_operands; i++) ++ { ++ struct avr32_operand *op = &operand[syntax->operand[i]]; ++ ++ if (i) ++ info->fprintf_func(info->stream, ","); ++ else ++ info->fprintf_func(info->stream, "\t"); ++ next_field += op->print(op, info, &fields[next_field]); ++ } ++} ++ ++static const struct avr32_opcode * ++find_opcode(bfd_vma insn_word) ++{ ++ int i; ++ ++ for (i = 0; i < AVR32_NR_OPCODES; i++) ++ { ++ const struct avr32_opcode *opc = &avr32_opc_table[i]; ++ ++ if ((insn_word & opc->mask) == opc->value) ++ return opc; ++ } ++ ++ return NULL; ++} ++ ++static int ++read_insn_word(bfd_vma pc, bfd_vma *valuep, ++ struct disassemble_info *info) ++{ ++ bfd_byte b[4]; ++ int status; ++ ++ status = info->read_memory_func(pc, b, 4, info); ++ if (status) ++ { ++ status = info->read_memory_func(pc, b, 2, info); ++ if (status) ++ { ++ info->memory_error_func(status, pc, info); ++ return -1; ++ } ++ b[3] = b[2] = 0; ++ } ++ ++ *valuep = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]; ++ return 0; ++} ++ ++/* Parse an individual disassembler option. */ ++ ++void ++parse_avr32_disassembler_option (option) ++ char * option; ++{ ++ if (option == NULL) ++ return; ++ ++ /* XXX - should break 'option' at following delimiter. */ ++ fprintf (stderr, _("Unrecognised disassembler option: %s\n"), option); ++ ++ return; ++} ++ ++/* Parse the string of disassembler options, spliting it at whitespaces ++ or commas. (Whitespace separators supported for backwards compatibility). */ ++ ++static void ++parse_disassembler_options (char *options) ++{ ++ if (options == NULL) ++ return; ++ ++ while (*options) ++ { ++ parse_avr32_disassembler_option (options); ++ ++ /* Skip forward to next seperator. */ ++ while ((*options) && (! ISSPACE (*options)) && (*options != ',')) ++ ++ options; ++ /* Skip forward past seperators. */ ++ while (ISSPACE (*options) || (*options == ',')) ++ ++ options; ++ } ++} ++ ++int ++print_insn_avr32(bfd_vma pc, struct disassemble_info *info) ++{ ++ bfd_vma insn_word; ++ const struct avr32_opcode *opc; ++ ++ if (info->disassembler_options) ++ { ++ parse_disassembler_options (info->disassembler_options); ++ ++ /* To avoid repeated parsing of these options, we remove them here. */ ++ info->disassembler_options = NULL; ++ } ++ ++ info->bytes_per_chunk = 1; ++ info->display_endian = BFD_ENDIAN_BIG; ++ ++ if (read_insn_word(pc, &insn_word, info)) ++ return -1; ++ ++ opc = find_opcode(insn_word); ++ if (opc) ++ { ++ print_opcode(insn_word, opc, pc, info); ++ return opc->size; ++ } ++ else ++ { ++ info->fprintf_func(info->stream, _("*unknown*")); ++ return 2; ++ } ++ ++} ++ ++void ++print_avr32_disassembler_options (FILE *stream ATTRIBUTE_UNUSED) ++{ ++ ++} +diff -Nrup binutils-2.17/opcodes/avr32-opc.c binutils-2.17.atmel.1.3.0/opcodes/avr32-opc.c +--- binutils-2.17/opcodes/avr32-opc.c 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-opc.c 2007-03-26 10:20:34.000000000 +0200 +@@ -0,0 +1,6140 @@ ++/* Opcode tables for AVR32. ++ Copyright 2005, 2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of libopcodes. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#include ++#include ++ ++#include "avr32-opc.h" ++ ++#define PICO_CPNO 1 ++ ++void ++avr32_insert_simple(const struct avr32_ifield *field, ++ void *buf, unsigned long value) ++{ ++ bfd_vma word; ++ ++ word = bfd_getb32(buf); ++ word &= ~field->mask; ++ word |= (value << field->shift) & field->mask; ++ bfd_putb32(word, buf); ++} ++ ++void ++avr32_insert_bit5c(const struct avr32_ifield *field ATTRIBUTE_UNUSED, ++ void *buf, unsigned long value) ++{ ++ char *opcode = buf; ++ ++ opcode[0] = (opcode[0] & 0xe1) | (value & 0x1e); ++ opcode[1] = (opcode[1] & 0xef) | ((value & 1) << 4); ++} ++ ++void ++avr32_insert_k10(const struct avr32_ifield *field ATTRIBUTE_UNUSED, ++ void *buf, unsigned long value) ++{ ++ char *opcode = buf; ++ ++ opcode[0] = (opcode[0] & 0xf0) | ((value & 0xf0) >> 4); ++ opcode[1] = ((opcode[1] & 0x0c) | ((value & 0x0f) << 4) ++ | ((value & 0x300) >> 8)); ++} ++ ++void ++avr32_insert_k21(const struct avr32_ifield *field, ++ void *buf, unsigned long value) ++{ ++ bfd_vma word; ++ bfd_vma k21; ++ ++ word = bfd_getb32(buf); ++ word &= ~field->mask; ++ k21 = ((value & 0xffff) | ((value & 0x10000) << 4) ++ | ((value & 0x1e0000) << 8)); ++ assert(!(k21 & ~field->mask)); ++ word |= k21; ++ bfd_putb32(word, buf); ++} ++ ++void ++avr32_insert_cpop(const struct avr32_ifield *field, ++ void *buf, unsigned long value) ++{ ++ bfd_vma word; ++ ++ word = bfd_getb32(buf); ++ word &= ~field->mask; ++ word |= (((value & 0x1e) << 15) | ((value & 0x60) << 20) ++ | ((value & 0x01) << 12)); ++ bfd_putb32(word, buf); ++} ++ ++void ++avr32_insert_k12cp(const struct avr32_ifield *field, ++ void *buf, unsigned long value) ++{ ++ bfd_vma word; ++ ++ word = bfd_getb32(buf); ++ word &= ~field->mask; ++ word |= ((value & 0xf00) << 4) | (value & 0xff); ++ bfd_putb32(word, buf); ++} ++ ++void avr32_extract_simple(const struct avr32_ifield *field, ++ void *buf, unsigned long *value) ++{ ++ /* XXX: The disassembler has done any necessary byteswapping already */ ++ bfd_vma word = *(bfd_vma *)buf; ++ ++ *value = (word & field->mask) >> field->shift; ++} ++ ++void avr32_extract_bit5c(const struct avr32_ifield *field ATTRIBUTE_UNUSED, ++ void *buf, unsigned long *value) ++{ ++ bfd_vma word = *(bfd_vma *)buf; ++ ++ *value = ((word >> 20) & 1) | ((word >> 24) & 0x1e); ++} ++ ++void avr32_extract_k10(const struct avr32_ifield *field ATTRIBUTE_UNUSED, ++ void *buf, unsigned long *value) ++{ ++ bfd_vma word = *(bfd_vma *)buf; ++ ++ *value = ((word >> 8) & 0x300) | ((word >> 20) & 0xff); ++} ++ ++void avr32_extract_k21(const struct avr32_ifield *field ATTRIBUTE_UNUSED, ++ void *buf, unsigned long *value) ++{ ++ bfd_vma word = *(bfd_vma *)buf; ++ ++ *value = ((word & 0xffff) | ((word >> 4) & 0x10000) ++ | ((word >> 8) & 0x1e0000)); ++} ++ ++void avr32_extract_cpop(const struct avr32_ifield *field ATTRIBUTE_UNUSED, ++ void *buf, unsigned long *value) ++{ ++ bfd_vma word = *(bfd_vma *)buf; ++ ++ *value = (((word >> 12) & 1) | ((word >> 15) & 0x1e) ++ | ((word >> 20) & 0x60)); ++} ++ ++void avr32_extract_k12cp(const struct avr32_ifield *field ATTRIBUTE_UNUSED, ++ void *buf, unsigned long *value) ++{ ++ bfd_vma word = *(bfd_vma *)buf; ++ ++ *value = ((word >> 4) & 0xf00) | (word & 0xff); ++} ++ ++#define IFLD(id, bitsz, shift, mask, func) \ ++ { AVR32_IFIELD_##id, bitsz, shift, mask, \ ++ avr32_insert_##func, avr32_extract_##func } ++ ++const struct avr32_ifield avr32_ifield_table[] = ++ { ++ IFLD(RX, 4, 25, 0x1e000000, simple), ++ IFLD(RY, 4, 16, 0x000f0000, simple), ++ IFLD(COND4C, 4, 20, 0x00f00000, simple), ++ IFLD(K8C, 8, 20, 0x0ff00000, simple), ++ IFLD(K7C, 7, 20, 0x07f00000, simple), ++ IFLD(K5C, 5, 20, 0x01f00000, simple), ++ IFLD(K3, 3, 20, 0x00700000, simple), ++ IFLD(RY_DW, 3, 17, 0x000e0000, simple), ++ IFLD(COND4E, 4, 8, 0x00000f00, simple), ++ IFLD(K8E, 8, 0, 0x000000ff, simple), ++ IFLD(BIT5C, 5, 20, 0x1e100000, bit5c), ++ IFLD(COND3, 3, 16, 0x00070000, simple), ++ IFLD(K10, 10, 16, 0x0ff30000, k10), ++ IFLD(POPM, 9, 19, 0x0ff80000, simple), ++ IFLD(K2, 2, 4, 0x00000030, simple), ++ IFLD(RD_E, 4, 0, 0x0000000f, simple), ++ IFLD(RD_DW, 3, 1, 0x0000000e, simple), ++ IFLD(X, 1, 5, 0x00000020, simple), ++ IFLD(Y, 1, 4, 0x00000010, simple), ++ IFLD(X2, 1, 13, 0x00002000, simple), ++ IFLD(Y2, 1, 12, 0x00001000, simple), ++ IFLD(K5E, 5, 0, 0x0000001f, simple), ++ IFLD(PART2, 2, 0, 0x00000003, simple), ++ IFLD(PART1, 1, 0, 0x00000001, simple), ++ IFLD(K16, 16, 0, 0x0000ffff, simple), ++ IFLD(CACHEOP, 5, 11, 0x0000f800, simple), ++ IFLD(K11, 11, 0, 0x000007ff, simple), ++ IFLD(K21, 21, 0, 0x1e10ffff, k21), ++ IFLD(CPOP, 7, 12, 0x060f1000, cpop), ++ IFLD(CPNO, 3, 13, 0x0000e000, simple), ++ IFLD(CRD_RI, 4, 8, 0x00000f00, simple), ++ IFLD(CRX, 4, 4, 0x000000f0, simple), ++ IFLD(CRY, 4, 0, 0x0000000f, simple), ++ IFLD(K7E, 7, 0, 0x0000007f, simple), ++ IFLD(CRD_DW, 3, 9, 0x00000e00, simple), ++ IFLD(PART1_K12, 1, 12, 0x00001000, simple), ++ IFLD(PART2_K12, 2, 12, 0x00003000, simple), ++ IFLD(K12, 12, 0, 0x00000fff, simple), ++ IFLD(S5, 5, 5, 0x000003e0, simple), ++ IFLD(K5E2, 5, 4, 0x000001f0, simple), ++ IFLD(K4, 4, 20, 0x00f00000, simple), ++ IFLD(COND4E2, 4, 4, 0x000000f0, simple), ++ IFLD(K8E2, 8, 4, 0x00000ff0, simple), ++ IFLD(K6, 6, 20, 0x03f00000, simple), ++ IFLD(MEM15, 15, 0, 0x00007fff, simple), ++ IFLD(MEMB5, 5, 15, 0x000f8000, simple), ++ IFLD(W, 1, 25, 0x02000000, simple), ++ /* Coprocessor Multiple High/Low */ ++ IFLD(CM_HL, 1, 8, 0x00000100, simple), ++ IFLD(K12CP, 12 ,0, 0x0000f0ff, k12cp), ++ }; ++#undef IFLD ++ ++ ++struct avr32_opcode avr32_opc_table[] = ++ { ++ { ++ AVR32_OPC_ABS, 2, 0x5c400000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ABS], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_ACALL, 2, 0xd0000000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_ACALL], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_ACR, 2, 0x5c000000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ACR], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ADC, 4, 0xe0000040, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_ADC], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ADD1, 2, 0x00000000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ADD1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_ADD2, 4, 0xe0000000, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_ADD2], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_ADDABS, 4, 0xe0000e40, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_ADDABS], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ADDHH_W, 4, 0xe0000e00, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_ADDHH_W], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_AND1, 2, 0x00600000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_AND1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_AND2, 4, 0xe1e00000, 0xe1f0fe00, ++ &avr32_syntax_table[AVR32_SYNTAX_AND2], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E2], ++ }, ++ }, ++ { ++ AVR32_OPC_AND3, 4, 0xe1e00200, 0xe1f0fe00, ++ &avr32_syntax_table[AVR32_SYNTAX_AND3], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E2], ++ }, ++ }, ++ { ++ AVR32_OPC_ANDH, 4, 0xe4100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ANDH], ++ BFD_RELOC_AVR32_16U, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_ANDH_COH, 4, 0xe6100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ANDH_COH], ++ BFD_RELOC_AVR32_16U, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_ANDL, 4, 0xe0100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ANDL], ++ BFD_RELOC_AVR32_16U, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_ANDL_COH, 4, 0xe2100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ANDL_COH], ++ BFD_RELOC_AVR32_16U, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_ANDN, 2, 0x00800000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ANDN], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_ASR1, 4, 0xe0000840, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_ASR1], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ASR3, 4, 0xe0001400, 0xe1f0ffe0, ++ &avr32_syntax_table[AVR32_SYNTAX_ASR3], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ }, ++ }, ++ { ++ AVR32_OPC_ASR2, 2, 0xa1400000, 0xe1e00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ASR2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_BIT5C], ++ }, ++ }, ++ { ++ AVR32_OPC_BLD, 4, 0xedb00000, 0xfff0ffe0, ++ &avr32_syntax_table[AVR32_SYNTAX_BLD], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ }, ++ }, ++ { ++ AVR32_OPC_BREQ1, 2, 0xc0000000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BREQ1], ++ BFD_RELOC_AVR32_9H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_BRNE1, 2, 0xc0010000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRNE1], ++ BFD_RELOC_AVR32_9H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_BRCC1, 2, 0xc0020000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRCC1], ++ BFD_RELOC_AVR32_9H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_BRCS1, 2, 0xc0030000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRCS1], ++ BFD_RELOC_AVR32_9H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_BRGE1, 2, 0xc0040000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRGE1], ++ BFD_RELOC_AVR32_9H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_BRLT1, 2, 0xc0050000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRLT1], ++ BFD_RELOC_AVR32_9H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_BRMI1, 2, 0xc0060000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRMI1], ++ BFD_RELOC_AVR32_9H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_BRPL1, 2, 0xc0070000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRPL1], ++ BFD_RELOC_AVR32_9H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_BREQ2, 4, 0xe0800000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BREQ2], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRNE2, 4, 0xe0810000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRNE2], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRCC2, 4, 0xe0820000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRHS2], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRCS2, 4, 0xe0830000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRLO2], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRGE2, 4, 0xe0840000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRGE2], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRLT2, 4, 0xe0850000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRLT2], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRMI2, 4, 0xe0860000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRMI2], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRPL2, 4, 0xe0870000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRPL2], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRLS, 4, 0xe0880000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRLS], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRGT, 4, 0xe0890000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRGT], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRLE, 4, 0xe08a0000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRLE], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRHI, 4, 0xe08b0000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRHI], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRVS, 4, 0xe08c0000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRVS], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRVC, 4, 0xe08d0000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRVC], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRQS, 4, 0xe08e0000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRQS], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BRAL, 4, 0xe08f0000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BRAL], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_BREAKPOINT, 2, 0xd6730000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_BREAKPOINT], ++ BFD_RELOC_UNUSED, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_BREV, 2, 0x5c900000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_BREV], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_BST, 4, 0xefb00000, 0xfff0ffe0, ++ &avr32_syntax_table[AVR32_SYNTAX_BST], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ }, ++ }, ++ { ++ AVR32_OPC_CACHE, 4, 0xf4100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_CACHE], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K11], ++ &avr32_ifield_table[AVR32_IFIELD_CACHEOP], ++ }, ++ }, ++ { ++ AVR32_OPC_CASTS_B, 2, 0x5c600000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_CASTS_B], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_CASTS_H, 2, 0x5c800000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_CASTS_H], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_CASTU_B, 2, 0x5c500000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_CASTU_B], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_CASTU_H, 2, 0x5c700000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_CASTU_H], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_CBR, 2, 0xa1c00000, 0xe1e00000, ++ &avr32_syntax_table[AVR32_SYNTAX_CBR], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_BIT5C], ++ }, ++ }, ++ { ++ AVR32_OPC_CLZ, 4, 0xe0001200, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_CLZ], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_COM, 2, 0x5cd00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_COM], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_COP, 4, 0xe1a00000, 0xf9f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_COP], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ &avr32_ifield_table[AVR32_IFIELD_CRX], ++ &avr32_ifield_table[AVR32_IFIELD_CRY], ++ &avr32_ifield_table[AVR32_IFIELD_CPOP], ++ }, ++ }, ++ { ++ AVR32_OPC_CP_B, 4, 0xe0001800, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_CP_B], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_CP_H, 4, 0xe0001900, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_CP_H], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_CP_W1, 2, 0x00300000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_CP_W1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_CP_W2, 2, 0x58000000, 0xfc000000, ++ &avr32_syntax_table[AVR32_SYNTAX_CP_W2], ++ BFD_RELOC_AVR32_6S, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K6], ++ }, ++ }, ++ { ++ AVR32_OPC_CP_W3, 4, 0xe0400000, 0xe1e00000, ++ &avr32_syntax_table[AVR32_SYNTAX_CP_W3], ++ BFD_RELOC_AVR32_21S, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_CPC1, 4, 0xe0001300, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_CPC1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_CPC2, 2, 0x5c200000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_CPC2], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_CSRF, 2, 0xd4030000, 0xfe0f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_CSRF], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K5C], ++ }, ++ }, ++ { ++ AVR32_OPC_CSRFCZ, 2, 0xd0030000, 0xfe0f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_CSRFCZ], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K5C], ++ }, ++ }, ++ { ++ AVR32_OPC_DIVS, 4, 0xe0000c00, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_DIVS], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_DIVU, 4, 0xe0000d00, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_DIVU], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_EOR1, 2, 0x00500000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_EOR1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_EOR2, 4, 0xe1e02000, 0xe1f0fe00, ++ &avr32_syntax_table[AVR32_SYNTAX_EOR2], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E2], ++ } ++ }, ++ { ++ AVR32_OPC_EOR3, 4, 0xe1e02200, 0xe1f0fe00, ++ &avr32_syntax_table[AVR32_SYNTAX_EOR3], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E2], ++ } ++ }, ++ { ++ AVR32_OPC_EORL, 4, 0xec100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_EORL], ++ BFD_RELOC_AVR32_16U, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_EORH, 4, 0xee100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_EORH], ++ BFD_RELOC_AVR32_16U, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_FRS, 2, 0xd7430000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_FRS], ++ BFD_RELOC_UNUSED, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_ICALL, 2, 0x5d100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ICALL], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_INCJOSP, 2, 0xd6830000, 0xff8f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_INCJOSP], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K3], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_D1, 2, 0xa1010000, 0xe1f10000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_D1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_D2, 2, 0xa1100000, 0xe1f10000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_D2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_D3, 2, 0xa1000000, 0xe1f10000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_D3], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_D5, 4, 0xe0000200, 0xe1f0ffc1, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_D5], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_D4, 4, 0xe0e00000, 0xe1f10000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_D4], ++ BFD_RELOC_AVR32_16S, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_SB2, 4, 0xe0000600, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_SB2], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_SB1, 4, 0xe1200000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_SB1], ++ BFD_RELOC_AVR32_16S, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UB1, 2, 0x01300000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UB1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UB2, 2, 0x01700000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UB2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UB5, 4, 0xe0000700, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UB5], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UB3, 2, 0x01800000, 0xe1800000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UB3], ++ BFD_RELOC_AVR32_3U, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K3], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UB4, 4, 0xe1300000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UB4], ++ BFD_RELOC_AVR32_16S, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_SH1, 2, 0x01100000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_SH1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_SH2, 2, 0x01500000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_SH2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_SH5, 4, 0xe0000400, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_SH5], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_SH3, 2, 0x80000000, 0xe1800000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_SH3], ++ BFD_RELOC_AVR32_4UH, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K3], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_SH4, 4, 0xe1000000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_SH4], ++ BFD_RELOC_AVR32_16S, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UH1, 2, 0x01200000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UH1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UH2, 2, 0x01600000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UH2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UH5, 4, 0xe0000500, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UH5], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UH3, 2, 0x80800000, 0xe1800000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UH3], ++ BFD_RELOC_AVR32_4UH, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K3], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_UH4, 4, 0xe1100000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_UH4], ++ BFD_RELOC_AVR32_16S, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_W1, 2, 0x01000000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_W1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_W2, 2, 0x01400000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_W2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_W5, 4, 0xe0000300, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_W5], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_W6, 4, 0xe0000f80, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_W6], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_W3, 2, 0x60000000, 0xe0000000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_W3], ++ BFD_RELOC_AVR32_7UW, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K5C], ++ }, ++ }, ++ { ++ AVR32_OPC_LD_W4, 4, 0xe0f00000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LD_W4], ++ BFD_RELOC_AVR32_16S, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LDC_D1, 4, 0xe9a01000, 0xfff01100, ++ &avr32_syntax_table[AVR32_SYNTAX_LDC_D1], ++ BFD_RELOC_AVR32_10UW, 4, 3, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_LDC_D2, 4, 0xefa00050, 0xfff011ff, ++ &avr32_syntax_table[AVR32_SYNTAX_LDC_D2], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_LDC_D3, 4, 0xefa01040, 0xfff011c0, ++ &avr32_syntax_table[AVR32_SYNTAX_LDC_D3], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_LDC_W1, 4, 0xe9a00000, 0xfff01000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDC_W1], ++ BFD_RELOC_AVR32_10UW, 4, 3, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_LDC_W2, 4, 0xefa00040, 0xfff010ff, ++ &avr32_syntax_table[AVR32_SYNTAX_LDC_W2], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_LDC_W3, 4, 0xefa01000, 0xfff010c0, ++ &avr32_syntax_table[AVR32_SYNTAX_LDC_W3], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_LDC0_D, 4, 0xf3a00000, 0xfff00100, ++ &avr32_syntax_table[AVR32_SYNTAX_LDC0_D], ++ BFD_RELOC_AVR32_14UW, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K12CP], ++ }, ++ }, ++ { ++ AVR32_OPC_LDC0_W, 4, 0xf1a00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDC0_W], ++ BFD_RELOC_AVR32_14UW, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K12CP], ++ }, ++ }, ++ { ++ AVR32_OPC_LDCM_D, 4, 0xeda00400, 0xfff01f00, ++ &avr32_syntax_table[AVR32_SYNTAX_LDCM_D], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_LDCM_D_PU, 4, 0xeda01400, 0xfff01f00, ++ &avr32_syntax_table[AVR32_SYNTAX_LDCM_D_PU], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_LDCM_W, 4, 0xeda00000, 0xfff01e00, ++ &avr32_syntax_table[AVR32_SYNTAX_LDCM_W], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ &avr32_ifield_table[AVR32_IFIELD_CM_HL], ++ }, ++ }, ++ { ++ AVR32_OPC_LDCM_W_PU, 4, 0xeda01000, 0xfff01e00, ++ &avr32_syntax_table[AVR32_SYNTAX_LDCM_W_PU], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ &avr32_ifield_table[AVR32_IFIELD_CM_HL], ++ }, ++ }, ++ { ++ AVR32_OPC_LDDPC, 2, 0x48000000, 0xf8000000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDDPC], ++ BFD_RELOC_AVR32_9UW_PCREL, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K7C], ++ }, ++ }, ++ { ++ AVR32_OPC_LDDPC_EXT, 4, 0xfef00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDDPC_EXT], ++ BFD_RELOC_AVR32_16B_PCREL, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LDDSP, 2, 0x40000000, 0xf8000000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDDSP], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K7C], ++ }, ++ }, ++ { ++ AVR32_OPC_LDINS_B, 4, 0xe1d04000, 0xe1f0c000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDINS_B], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_PART2_K12], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K12], ++ }, ++ }, ++ { ++ AVR32_OPC_LDINS_H, 4, 0xe1d00000, 0xe1f0e000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDINS_H], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_PART1_K12], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K12], ++ }, ++ }, ++ { ++ AVR32_OPC_LDM, 4, 0xe1c00000, 0xfdf00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDM], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_W], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LDMTS, 4, 0xe5c00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDMTS], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LDMTS_PU, 4, 0xe7c00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDMTS_PU], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_LDSWP_SH, 4, 0xe1d02000, 0xe1f0f000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDSWP_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K12], ++ }, ++ }, ++ { ++ AVR32_OPC_LDSWP_UH, 4, 0xe1d03000, 0xe1f0f000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDSWP_UH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K12], ++ }, ++ }, ++ { ++ AVR32_OPC_LDSWP_W, 4, 0xe1d08000, 0xe1f0f000, ++ &avr32_syntax_table[AVR32_SYNTAX_LDSWP_W], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K12], ++ }, ++ }, ++ { ++ AVR32_OPC_LSL1, 4, 0xe0000940, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_LSL1], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_LSL3, 4, 0xe0001500, 0xe1f0ffe0, ++ &avr32_syntax_table[AVR32_SYNTAX_LSL3], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ }, ++ }, ++ { ++ AVR32_OPC_LSL2, 2, 0xa1600000, 0xe1e00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LSL2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_BIT5C], ++ }, ++ }, ++ { ++ AVR32_OPC_LSR1, 4, 0xe0000a40, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_LSR1], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_LSR3, 4, 0xe0001600, 0xe1f0ffe0, ++ &avr32_syntax_table[AVR32_SYNTAX_LSR3], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ }, ++ }, ++ { ++ AVR32_OPC_LSR2, 2, 0xa1800000, 0xe1e00000, ++ &avr32_syntax_table[AVR32_SYNTAX_LSR2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_BIT5C], ++ }, ++ }, ++ { ++ AVR32_OPC_MAC, 4, 0xe0000340, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_MAC], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MACHH_D, 4, 0xe0000580, 0xe1f0ffc1, ++ &avr32_syntax_table[AVR32_SYNTAX_MACHH_D], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MACHH_W, 4, 0xe0000480, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_MACHH_W], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MACS_D, 4, 0xe0000540, 0xe1f0fff1, ++ &avr32_syntax_table[AVR32_SYNTAX_MACS_D], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MACSATHH_W, 4, 0xe0000680, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_MACSATHH_W], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MACUD, 4, 0xe0000740, 0xe1f0fff1, ++ &avr32_syntax_table[AVR32_SYNTAX_MACUD], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MACWH_D, 4, 0xe0000c80, 0xe1f0ffe1, ++ &avr32_syntax_table[AVR32_SYNTAX_MACWH_D], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MAX, 4, 0xe0000c40, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_MAX], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MCALL, 4, 0xf0100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_MCALL], ++ BFD_RELOC_AVR32_18W_PCREL, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_MFDR, 4, 0xe5b00000, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MFDR], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MFSR, 4, 0xe1b00000, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MFSR], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MIN, 4, 0xe0000d40, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_MIN], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MOV3, 2, 0x00900000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_MOV3], ++ BFD_RELOC_NONE, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOV1, 2, 0x30000000, 0xf0000000, ++ &avr32_syntax_table[AVR32_SYNTAX_MOV1], ++ BFD_RELOC_AVR32_8S, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_MOV2, 4, 0xe0600000, 0xe1e00000, ++ &avr32_syntax_table[AVR32_SYNTAX_MOV2], ++ BFD_RELOC_AVR32_21S, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVEQ1, 4, 0xe0001700, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVEQ1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVNE1, 4, 0xe0001710, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVNE1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVCC1, 4, 0xe0001720, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVHS1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVCS1, 4, 0xe0001730, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVLO1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVGE1, 4, 0xe0001740, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVGE1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVLT1, 4, 0xe0001750, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVLT1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVMI1, 4, 0xe0001760, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVMI1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVPL1, 4, 0xe0001770, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVPL1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVLS1, 4, 0xe0001780, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVLS1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVGT1, 4, 0xe0001790, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVGT1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVLE1, 4, 0xe00017a0, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVLE1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVHI1, 4, 0xe00017b0, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVHI1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVVS1, 4, 0xe00017c0, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVVS1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVVC1, 4, 0xe00017d0, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVVC1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVQS1, 4, 0xe00017e0, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVQS1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVAL1, 4, 0xe00017f0, 0xe1f0ffff, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVAL1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVEQ2, 4, 0xf9b00000, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVEQ2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVNE2, 4, 0xf9b00100, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVNE2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVCC2, 4, 0xf9b00200, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVHS2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVCS2, 4, 0xf9b00300, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVLO2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVGE2, 4, 0xf9b00400, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVGE2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVLT2, 4, 0xf9b00500, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVLT2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVMI2, 4, 0xf9b00600, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVMI2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVPL2, 4, 0xf9b00700, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVPL2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVLS2, 4, 0xf9b00800, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVLS2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVGT2, 4, 0xf9b00900, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVGT2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVLE2, 4, 0xf9b00a00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVLE2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVHI2, 4, 0xf9b00b00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVHI2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVVS2, 4, 0xf9b00c00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVVS2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVVC2, 4, 0xf9b00d00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVVC2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVQS2, 4, 0xf9b00e00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVQS2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MOVAL2, 4, 0xf9b00f00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MOVAL2], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MTDR, 4, 0xe7b00000, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MTDR], ++ BFD_RELOC_AVR32_8S_EXT, 2, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MTSR, 4, 0xe3b00000, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MTSR], ++ BFD_RELOC_AVR32_8S_EXT, 2, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MUL1, 2, 0xa1300000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_MUL1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_MUL2, 4, 0xe0000240, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_MUL2], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MUL3, 4, 0xe0001000, 0xe1f0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_MUL3], ++ BFD_RELOC_AVR32_8S_EXT, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_MULHH_W, 4, 0xe0000780, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_MULHH_W], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MULNHH_W, 4, 0xe0000180, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_MULNHH_W], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MULNWH_D, 4, 0xe0000280, 0xe1f0ffe1, ++ &avr32_syntax_table[AVR32_SYNTAX_MULNWH_D], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MULSD, 4, 0xe0000440, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_MULSD], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MULSATHH_H, 4, 0xe0000880, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_MULSATHH_H], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MULSATHH_W, 4, 0xe0000980, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_MULSATHH_W], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MULSATRNDHH_H, 4, 0xe0000a80, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_MULSATRNDHH_H], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MULSATRNDWH_W, 4, 0xe0000b80, 0xe1f0ffe0, ++ &avr32_syntax_table[AVR32_SYNTAX_MULSATRNDWH_W], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MULSATWH_W, 4, 0xe0000e80, 0xe1f0ffe0, ++ &avr32_syntax_table[AVR32_SYNTAX_MULSATWH_W], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MULU_D, 4, 0xe0000640, 0xe1f0fff1, ++ &avr32_syntax_table[AVR32_SYNTAX_MULU_D], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MULWH_D, 4, 0xe0000d80, 0xe1f0ffe1, ++ &avr32_syntax_table[AVR32_SYNTAX_MULWH_D], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_MUSFR, 2, 0x5d300000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_MUSFR], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_MUSTR, 2, 0x5d200000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_MUSTR], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_MVCR_D, 4, 0xefa00010, 0xfff111ff, ++ &avr32_syntax_table[AVR32_SYNTAX_MVCR_D], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_MVCR_W, 4, 0xefa00000, 0xfff010ff, ++ &avr32_syntax_table[AVR32_SYNTAX_MVCR_W], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ }, ++ }, ++ { ++ AVR32_OPC_MVRC_D, 4, 0xefa00030, 0xfff111ff, ++ &avr32_syntax_table[AVR32_SYNTAX_MVRC_D], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_MVRC_W, 4, 0xefa00020, 0xfff010ff, ++ &avr32_syntax_table[AVR32_SYNTAX_MVRC_W], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_NEG, 2, 0x5c300000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_NEG], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_NOP, 2, 0xd7030000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_NOP], ++ BFD_RELOC_UNUSED, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_OR1, 2, 0x00400000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_OR1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_OR2, 4, 0xe1e01000, 0xe1f0fe00, ++ &avr32_syntax_table[AVR32_SYNTAX_OR2], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E2], ++ }, ++ }, ++ { ++ AVR32_OPC_OR3, 4, 0xe1e01200, 0xe1f0fe00, ++ &avr32_syntax_table[AVR32_SYNTAX_OR3], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E2], ++ }, ++ }, ++ { ++ AVR32_OPC_ORH, 4, 0xea100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ORH], ++ BFD_RELOC_AVR32_16U, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_ORL, 4, 0xe8100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ORL], ++ BFD_RELOC_AVR32_16U, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_PABS_SB, 4, 0xe00023e0, 0xfff0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PABS_SB], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PABS_SH, 4, 0xe00023f0, 0xfff0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PABS_SH], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PACKSH_SB, 4, 0xe00024d0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PACKSH_SB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PACKSH_UB, 4, 0xe00024c0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PACKSH_UB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PACKW_SH, 4, 0xe0002470, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PACKW_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADD_B, 4, 0xe0002300, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADD_B], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADD_H, 4, 0xe0002000, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADD_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDH_SH, 4, 0xe00020c0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDH_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDH_UB, 4, 0xe0002360, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDH_UB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDS_SB, 4, 0xe0002320, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDS_SB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDS_SH, 4, 0xe0002040, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDS_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDS_UB, 4, 0xe0002340, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDS_UB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDS_UH, 4, 0xe0002080, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDS_UH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDSUB_H, 4, 0xe0002100, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDSUB_H], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDSUBH_SH, 4, 0xe0002280, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDSUBH_SH], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDSUBS_SH, 4, 0xe0002180, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDSUBS_SH], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDSUBS_UH, 4, 0xe0002200, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDSUBS_UH], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDX_H, 4, 0xe0002020, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDX_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDXH_SH, 4, 0xe00020e0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDXH_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDXS_SH, 4, 0xe0002060, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDXS_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PADDXS_UH, 4, 0xe00020a0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PADDXS_UH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PASR_B, 4, 0xe0002410, 0xe1f8fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PASR_B], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_COND3], ++ }, ++ }, ++ { ++ AVR32_OPC_PASR_H, 4, 0xe0002440, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PASR_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PAVG_SH, 4, 0xe00023d0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PAVG_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PAVG_UB, 4, 0xe00023c0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PAVG_UB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PLSL_B, 4, 0xe0002420, 0xe1f8fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PLSL_B], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_COND3], ++ }, ++ }, ++ { ++ AVR32_OPC_PLSL_H, 4, 0xe0002450, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PLSL_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PLSR_B, 4, 0xe0002430, 0xe1f8fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PLSR_B], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_COND3], ++ }, ++ }, ++ { ++ AVR32_OPC_PLSR_H, 4, 0xe0002460, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PLSR_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PMAX_SH, 4, 0xe0002390, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PMAX_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PMAX_UB, 4, 0xe0002380, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PMAX_UB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PMIN_SH, 4, 0xe00023b0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PMIN_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PMIN_UB, 4, 0xe00023a0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PMIN_UB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_POPJC, 2, 0xd7130000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_POPJC], ++ BFD_RELOC_UNUSED, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_POPM, 2, 0xd0020000, 0xf0070000, ++ &avr32_syntax_table[AVR32_SYNTAX_POPM], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_POPM], ++ }, ++ }, ++ { ++ AVR32_OPC_POPM_E, 4, 0xe3cd0000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_POPM_E], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_PREF, 4, 0xf2100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_PREF], ++ BFD_RELOC_AVR32_16S, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_PSAD, 4, 0xe0002400, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSAD], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUB_B, 4, 0xe0002310, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUB_B], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUB_H, 4, 0xe0002010, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUB_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBADD_H, 4, 0xe0002140, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBADD_H], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBADDH_SH, 4, 0xe00022c0, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBADDH_SH], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBADDS_SH, 4, 0xe00021c0, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBADDS_SH], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBADDS_UH, 4, 0xe0002240, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBADDS_UH], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBH_SH, 4, 0xe00020d0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBH_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBH_UB, 4, 0xe0002370, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBH_UB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBS_SB, 4, 0xe0002330, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBS_SB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBS_SH, 4, 0xe0002050, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBS_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBS_UB, 4, 0xe0002350, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBS_UB], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBS_UH, 4, 0xe0002090, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBS_UH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBX_H, 4, 0xe0002030, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBX_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBXH_SH, 4, 0xe00020f0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBXH_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBXS_SH, 4, 0xe0002070, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBXS_SH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PSUBXS_UH, 4, 0xe00020b0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_PSUBXS_UH], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_PUNPCKSB_H, 4, 0xe00024a0, 0xe1ffffe0, ++ &avr32_syntax_table[AVR32_SYNTAX_PUNPCKSB_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PUNPCKUB_H, 4, 0xe0002480, 0xe1ffffe0, ++ &avr32_syntax_table[AVR32_SYNTAX_PUNPCKUB_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_PUSHJC, 2, 0xd7230000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_PUSHJC], ++ BFD_RELOC_UNUSED, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_PUSHM, 2, 0xd0010000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_PUSHM], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_PUSHM_E, 4, 0xebcd0000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_PUSHM_E], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_RCALL1, 2, 0xc00c0000, 0xf00c0000, ++ &avr32_syntax_table[AVR32_SYNTAX_RCALL1], ++ BFD_RELOC_AVR32_11H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K10], ++ }, ++ }, ++ { ++ AVR32_OPC_RCALL2, 4, 0xe0a00000, 0xe1ef0000, ++ &avr32_syntax_table[AVR32_SYNTAX_RCALL2], ++ BFD_RELOC_AVR32_22H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_RETEQ, 2, 0x5e000000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETEQ], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETNE, 2, 0x5e100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETNE], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETCC, 2, 0x5e200000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETHS], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETCS, 2, 0x5e300000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETLO], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETGE, 2, 0x5e400000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETGE], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETLT, 2, 0x5e500000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETLT], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETMI, 2, 0x5e600000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETMI], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETPL, 2, 0x5e700000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETPL], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETLS, 2, 0x5e800000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETLS], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETGT, 2, 0x5e900000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETGT], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETLE, 2, 0x5ea00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETLE], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETHI, 2, 0x5eb00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETHI], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETVS, 2, 0x5ec00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETVS], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETVC, 2, 0x5ed00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETVC], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETQS, 2, 0x5ee00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETQS], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETAL, 2, 0x5ef00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETAL], ++ BFD_RELOC_NONE, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_RETD, 2, 0xd6230000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETD], ++ BFD_RELOC_NONE, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_RETE, 2, 0xd6030000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETE], ++ BFD_RELOC_NONE, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_RETJ, 2, 0xd6330000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETJ], ++ BFD_RELOC_NONE, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_RETS, 2, 0xd6130000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_RETS], ++ BFD_RELOC_NONE, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_RJMP, 2, 0xc0080000, 0xf00c0000, ++ &avr32_syntax_table[AVR32_SYNTAX_RJMP], ++ BFD_RELOC_AVR32_11H_PCREL, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K10], ++ }, ++ }, ++ { ++ AVR32_OPC_ROL, 2, 0x5cf00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ROL], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_ROR, 2, 0x5d000000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ROR], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_RSUB1, 2, 0x00200000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_RSUB1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_RSUB2, 4, 0xe0001100, 0xe1f0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_RSUB2], ++ BFD_RELOC_AVR32_8S_EXT, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SATADD_H, 4, 0xe00002c0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_SATADD_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SATADD_W, 4, 0xe00000c0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_SATADD_W], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SATRNDS, 4, 0xf3b00000, 0xfff0fc00, ++ &avr32_syntax_table[AVR32_SYNTAX_SATRNDS], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ &avr32_ifield_table[AVR32_IFIELD_S5], ++ }, ++ }, ++ { ++ AVR32_OPC_SATRNDU, 4, 0xf3b00400, 0xfff0fc00, ++ &avr32_syntax_table[AVR32_SYNTAX_SATRNDU], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ &avr32_ifield_table[AVR32_IFIELD_S5], ++ }, ++ }, ++ { ++ AVR32_OPC_SATS, 4, 0xf1b00000, 0xfff0fc00, ++ &avr32_syntax_table[AVR32_SYNTAX_SATS], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ &avr32_ifield_table[AVR32_IFIELD_S5], ++ }, ++ }, ++ { ++ AVR32_OPC_SATSUB_H, 4, 0xe00003c0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_SATSUB_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SATSUB_W1, 4, 0xe00001c0, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_SATSUB_W1], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SATSUB_W2, 4, 0xe0d00000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SATSUB_W2], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_SATU, 4, 0xf1b00400, 0xfff0fc00, ++ &avr32_syntax_table[AVR32_SYNTAX_SATU], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ &avr32_ifield_table[AVR32_IFIELD_S5], ++ }, ++ }, ++ { ++ AVR32_OPC_SBC, 4, 0xe0000140, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_SBC], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SBR, 2, 0xa1a00000, 0xe1e00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SBR], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_BIT5C], ++ }, ++ }, ++ { ++ AVR32_OPC_SCALL, 2, 0xd7330000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_SCALL], ++ BFD_RELOC_UNUSED, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_SCR, 2, 0x5c100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SCR], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SLEEP, 4, 0xe9b00000, 0xffffff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SLEEP], ++ BFD_RELOC_AVR32_8S_EXT, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SREQ, 2, 0x5f000000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SREQ], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRNE, 2, 0x5f100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRNE], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRCC, 2, 0x5f200000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRHS], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRCS, 2, 0x5f300000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRLO], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRGE, 2, 0x5f400000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRGE], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRLT, 2, 0x5f500000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRLT], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRMI, 2, 0x5f600000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRMI], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRPL, 2, 0x5f700000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRPL], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRLS, 2, 0x5f800000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRLS], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRGT, 2, 0x5f900000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRGT], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRLE, 2, 0x5fa00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRLE], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRHI, 2, 0x5fb00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRHI], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRVS, 2, 0x5fc00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRVS], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRVC, 2, 0x5fd00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRVC], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRQS, 2, 0x5fe00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRQS], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SRAL, 2, 0x5ff00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SRAL], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SSRF, 2, 0xd2030000, 0xfe0f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_SSRF], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K5C], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_B1, 2, 0x00c00000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_B1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_B2, 2, 0x00f00000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_B2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_B5, 4, 0xe0000b00, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_B5], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_B3, 2, 0xa0800000, 0xe1800000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_B3], ++ BFD_RELOC_AVR32_3U, 3, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K3], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_B4, 4, 0xe1600000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_B4], ++ BFD_RELOC_AVR32_16S, 3, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_D1, 2, 0xa1200000, 0xe1f10000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_D1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_D2, 2, 0xa1210000, 0xe1f10000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_D2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_D3, 2, 0xa1110000, 0xe1f10000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_D3], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_D5, 4, 0xe0000800, 0xe1f0ffc1, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_D5], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ &avr32_ifield_table[AVR32_IFIELD_RD_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_D4, 4, 0xe0e10000, 0xe1f10000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_D4], ++ BFD_RELOC_AVR32_16S, 3, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ &avr32_ifield_table[AVR32_IFIELD_RY_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_H1, 2, 0x00b00000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_H1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_H2, 2, 0x00e00000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_H2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_H5, 4, 0xe0000a00, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_H5], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_H3, 2, 0xa0000000, 0xe1800000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_H3], ++ BFD_RELOC_AVR32_4UH, 3, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K3], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_H4, 4, 0xe1500000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_H4], ++ BFD_RELOC_AVR32_16S, 3, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_W1, 2, 0x00a00000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_W1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_W2, 2, 0x00d00000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_W2], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_W5, 4, 0xe0000900, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_W5], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_W3, 2, 0x81000000, 0xe1000000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_W3], ++ BFD_RELOC_AVR32_6UW, 3, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K4], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_ST_W4, 4, 0xe1400000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_ST_W4], ++ BFD_RELOC_AVR32_16S, 3, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_STC_D1, 4, 0xeba01000, 0xfff01100, ++ &avr32_syntax_table[AVR32_SYNTAX_STC_D1], ++ BFD_RELOC_AVR32_10UW, 4, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_STC_D2, 4, 0xefa00070, 0xfff011f0, ++ &avr32_syntax_table[AVR32_SYNTAX_STC_D2], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_STC_D3, 4, 0xefa010c0, 0xfff011c0, ++ &avr32_syntax_table[AVR32_SYNTAX_STC_D3], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_STC_W1, 4, 0xeba00000, 0xfff01000, ++ &avr32_syntax_table[AVR32_SYNTAX_STC_W1], ++ BFD_RELOC_AVR32_10UW, 4, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ }, ++ }, ++ { ++ AVR32_OPC_STC_W2, 4, 0xefa00060, 0xfff010ff, ++ &avr32_syntax_table[AVR32_SYNTAX_STC_W2], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ }, ++ }, ++ { ++ AVR32_OPC_STC_W3, 4, 0xefa01080, 0xfff010c0, ++ &avr32_syntax_table[AVR32_SYNTAX_STC_W3], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ }, ++ }, ++ { ++ AVR32_OPC_STC0_D, 4, 0xf7a00000, 0xfff00100, ++ &avr32_syntax_table[AVR32_SYNTAX_STC0_D], ++ BFD_RELOC_AVR32_14UW, 3, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K12CP], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_DW], ++ }, ++ }, ++ { ++ AVR32_OPC_STC0_W, 4, 0xf5a00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_STC0_W], ++ BFD_RELOC_AVR32_14UW, 3, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K12CP], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ }, ++ }, ++ { ++ AVR32_OPC_STCM_D, 4, 0xeda00500, 0xfff01f00, ++ &avr32_syntax_table[AVR32_SYNTAX_STCM_D], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_STCM_D_PU, 4, 0xeda01500, 0xfff01f00, ++ &avr32_syntax_table[AVR32_SYNTAX_STCM_D_PU], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_STCM_W, 4, 0xeda00200, 0xfff01e00, ++ &avr32_syntax_table[AVR32_SYNTAX_STCM_W], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ &avr32_ifield_table[AVR32_IFIELD_CM_HL], ++ }, ++ }, ++ { ++ AVR32_OPC_STCM_W_PU, 4, 0xeda01200, 0xfff01e00, ++ &avr32_syntax_table[AVR32_SYNTAX_STCM_W_PU], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_CPNO], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ &avr32_ifield_table[AVR32_IFIELD_CM_HL], ++ }, ++ }, ++ { ++ AVR32_OPC_STCOND, 4, 0xe1700000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_STCOND], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_STDSP, 2, 0x50000000, 0xf8000000, ++ &avr32_syntax_table[AVR32_SYNTAX_STDSP], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K7C], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_STHH_W2, 4, 0xe1e08000, 0xe1f0c0c0, ++ &avr32_syntax_table[AVR32_SYNTAX_STHH_W2], ++ BFD_RELOC_UNUSED, 7, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_CRD_RI], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X2], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y2], ++ }, ++ }, ++ { ++ AVR32_OPC_STHH_W1, 4, 0xe1e0c000, 0xe1f0c000, ++ &avr32_syntax_table[AVR32_SYNTAX_STHH_W1], ++ BFD_RELOC_AVR32_STHH_W, 6, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_K8E2], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X2], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y2], ++ }, ++ }, ++ { ++ AVR32_OPC_STM, 4, 0xe9c00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_STM], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_STM_PU, 4, 0xebc00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_STM_PU], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_STMTS, 4, 0xedc00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_STMTS], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_STMTS_PU, 4, 0xefc00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_STMTS_PU], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_STSWP_H, 4, 0xe1d09000, 0xe1f0f000, ++ &avr32_syntax_table[AVR32_SYNTAX_STSWP_H], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K12], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_STSWP_W, 4, 0xe1d0a000, 0xe1f0f000, ++ &avr32_syntax_table[AVR32_SYNTAX_STSWP_W], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K12], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_SUB1, 2, 0x00100000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SUB1], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_SUB2, 4, 0xe0000100, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_SUB2], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K2], ++ }, ++ }, ++ { ++ AVR32_OPC_SUB5, 4, 0xe0c00000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SUB5], ++ BFD_RELOC_AVR32_SUB5, 3, 2, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_K16], ++ }, ++ }, ++ { ++ AVR32_OPC_SUB3_SP, 2, 0x200d0000, 0xf00f0000, ++ &avr32_syntax_table[AVR32_SYNTAX_SUB3_SP], ++ BFD_RELOC_AVR32_10SW, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_SUB3, 2, 0x20000000, 0xf0000000, ++ &avr32_syntax_table[AVR32_SYNTAX_SUB3], ++ BFD_RELOC_AVR32_8S, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8C], ++ }, ++ }, ++ { ++ AVR32_OPC_SUB4, 4, 0xe0200000, 0xe1e00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SUB4], ++ BFD_RELOC_AVR32_21S, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K21], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBEQ, 4, 0xf7b00000, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBEQ], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBNE, 4, 0xf7b00100, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBNE], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBCC, 4, 0xf7b00200, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBHS], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBCS, 4, 0xf7b00300, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBLO], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBGE, 4, 0xf7b00400, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBGE], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBLT, 4, 0xf7b00500, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBLT], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBMI, 4, 0xf7b00600, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBMI], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBPL, 4, 0xf7b00700, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBPL], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBLS, 4, 0xf7b00800, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBLS], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBGT, 4, 0xf7b00900, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBGT], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBLE, 4, 0xf7b00a00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBLE], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBHI, 4, 0xf7b00b00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBHI], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBVS, 4, 0xf7b00c00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBVS], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBVC, 4, 0xf7b00d00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBVC], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBQS, 4, 0xf7b00e00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBQS], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBAL, 4, 0xf7b00f00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBAL], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFEQ, 4, 0xf5b00000, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFEQ], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFNE, 4, 0xf5b00100, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFNE], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFCC, 4, 0xf5b00200, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFHS], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFCS, 4, 0xf5b00300, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFLO], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFGE, 4, 0xf5b00400, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFGE], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFLT, 4, 0xf5b00500, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFLT], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFMI, 4, 0xf5b00600, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFMI], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFPL, 4, 0xf5b00700, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFPL], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFLS, 4, 0xf5b00800, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFLS], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFGT, 4, 0xf5b00900, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFGT], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFLE, 4, 0xf5b00a00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFLE], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFHI, 4, 0xf5b00b00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFHI], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFVS, 4, 0xf5b00c00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFVS], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFVC, 4, 0xf5b00d00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFVC], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFQS, 4, 0xf5b00e00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFQS], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBFAL, 4, 0xf5b00f00, 0xfff0ff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBFAL], ++ BFD_RELOC_AVR32_8S_EXT, 2, 1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ }, ++ }, ++ { ++ AVR32_OPC_SUBHH_W, 4, 0xe0000f00, 0xe1f0ffc0, ++ &avr32_syntax_table[AVR32_SYNTAX_SUBHH_W], ++ BFD_RELOC_UNUSED, 5, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_X], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_Y], ++ }, ++ }, ++ { ++ AVR32_OPC_SWAP_B, 2, 0x5cb00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SWAP_B], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_SWAP_BH, 2, 0x5cc00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SWAP_BH], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_SWAP_H, 2, 0x5ca00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_SWAP_H], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_SYNC, 4, 0xebb00000, 0xffffff00, ++ &avr32_syntax_table[AVR32_SYNTAX_SYNC], ++ BFD_RELOC_AVR32_8S_EXT, 1, 0, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_K8E], ++ } ++ }, ++ { ++ AVR32_OPC_TLBR, 2, 0xd6430000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_TLBR], ++ BFD_RELOC_UNUSED, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_TLBS, 2, 0xd6530000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_TLBS], ++ BFD_RELOC_UNUSED, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_TLBW, 2, 0xd6630000, 0xffff0000, ++ &avr32_syntax_table[AVR32_SYNTAX_TLBW], ++ BFD_RELOC_UNUSED, 0, -1, { NULL }, ++ }, ++ { ++ AVR32_OPC_TNBZ, 2, 0x5ce00000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_TNBZ], ++ BFD_RELOC_UNUSED, 1, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ } ++ }, ++ { ++ AVR32_OPC_TST, 2, 0x00700000, 0xe1f00000, ++ &avr32_syntax_table[AVR32_SYNTAX_TST], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ }, ++ }, ++ { ++ AVR32_OPC_XCHG, 4, 0xe0000b40, 0xe1f0fff0, ++ &avr32_syntax_table[AVR32_SYNTAX_XCHG], ++ BFD_RELOC_UNUSED, 3, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RD_E], ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ }, ++ }, ++ { ++ AVR32_OPC_MEMC, 4, 0xf6100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_MEMC], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_MEM15], ++ &avr32_ifield_table[AVR32_IFIELD_MEMB5], ++ }, ++ }, ++ { ++ AVR32_OPC_MEMS, 4, 0xf8100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_MEMS], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_MEM15], ++ &avr32_ifield_table[AVR32_IFIELD_MEMB5], ++ }, ++ }, ++ { ++ AVR32_OPC_MEMT, 4, 0xfa100000, 0xfff00000, ++ &avr32_syntax_table[AVR32_SYNTAX_MEMT], ++ BFD_RELOC_UNUSED, 2, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_MEM15], ++ &avr32_ifield_table[AVR32_IFIELD_MEMB5], ++ }, ++ }, ++ { ++ AVR32_OPC_BFEXTS, 4, 0xe1d0b000, 0xe1f0fc00, ++ &avr32_syntax_table[AVR32_SYNTAX_BFEXTS], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_S5], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ }, ++ }, ++ { ++ AVR32_OPC_BFEXTU, 4, 0xe1d0c000, 0xe1f0fc00, ++ &avr32_syntax_table[AVR32_SYNTAX_BFEXTU], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_S5], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ }, ++ }, ++ { ++ AVR32_OPC_BFINS, 4, 0xe1d0d000, 0xe1f0fc00, ++ &avr32_syntax_table[AVR32_SYNTAX_BFINS], ++ BFD_RELOC_UNUSED, 4, -1, ++ { ++ &avr32_ifield_table[AVR32_IFIELD_RX], ++ &avr32_ifield_table[AVR32_IFIELD_RY], ++ &avr32_ifield_table[AVR32_IFIELD_S5], ++ &avr32_ifield_table[AVR32_IFIELD_K5E], ++ }, ++ }, ++ }; ++ ++#define FPALIAS_DXY(name, opcode) \ ++ { \ ++ AVR32_ALIAS_##name##_S, \ ++ &avr32_opc_table[AVR32_OPC_COP], \ ++ { \ ++ { 0, 0 }, \ ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, \ ++ { 0, opcode }, \ ++ }, \ ++ }, { \ ++ AVR32_ALIAS_##name##_D, \ ++ &avr32_opc_table[AVR32_OPC_COP], \ ++ { \ ++ { 0, 0 }, \ ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, \ ++ { 0, (opcode) | 0x40 }, \ ++ }, \ ++ } ++#define FPALIAS_DX(name, opcode) \ ++ { \ ++ AVR32_ALIAS_##name##_S, \ ++ &avr32_opc_table[AVR32_OPC_COP], \ ++ { \ ++ { 0, 0 }, \ ++ { 1, 0 }, { 1, 1 }, { 0, 0 }, \ ++ { 0, opcode }, \ ++ }, \ ++ }, { \ ++ AVR32_ALIAS_##name##_D, \ ++ &avr32_opc_table[AVR32_OPC_COP], \ ++ { \ ++ { 0, 0 }, \ ++ { 1, 0 }, { 1, 1 }, { 0, 0 }, \ ++ { 0, (opcode) | 0x40 }, \ ++ }, \ ++ } ++#define FPALIAS_XY(name, opcode) \ ++ { \ ++ AVR32_ALIAS_##name##_S, \ ++ &avr32_opc_table[AVR32_OPC_COP], \ ++ { \ ++ { 0, 0 }, \ ++ { 0, 0 }, { 1, 0 }, { 1, 1 }, \ ++ { 0, opcode }, \ ++ }, \ ++ }, { \ ++ AVR32_ALIAS_##name##_D, \ ++ &avr32_opc_table[AVR32_OPC_COP], \ ++ { \ ++ { 0, 0 }, \ ++ { 0, 0 }, { 1, 0 }, { 1, 1 }, \ ++ { 0, (opcode) | 0x40 }, \ ++ }, \ ++ } ++ ++const struct avr32_alias avr32_alias_table[] = ++ { ++ FPALIAS_DXY(FMAC, 0x00), ++ FPALIAS_DXY(FNMAC, 0x01), ++ FPALIAS_DXY(FMSC, 0x02), ++ FPALIAS_DXY(FNMSC, 0x03), ++ FPALIAS_DXY(FADD, 0x04), ++ FPALIAS_DXY(FSUB, 0x05), ++ FPALIAS_DXY(FMUL, 0x06), ++ FPALIAS_DXY(FNMUL, 0x07), ++ FPALIAS_DX(FNEG, 0x08), ++ FPALIAS_DX(FABS, 0x09), ++ FPALIAS_XY(FCMP, 0x0d), ++ FPALIAS_DX(FMOV1, 0x0a), ++ { ++ AVR32_ALIAS_FMOV2_S, ++ &avr32_opc_table[AVR32_OPC_MVCR_W], ++ { { 0, 0 }, { 1, 0 }, { 1, 1 }, }, ++ }, ++ { ++ AVR32_ALIAS_FMOV2_D, ++ &avr32_opc_table[AVR32_OPC_MVCR_D], ++ { { 0, 0 }, { 1, 0 }, { 1, 1 }, }, ++ }, ++ { ++ AVR32_ALIAS_FMOV3_S, ++ &avr32_opc_table[AVR32_OPC_MVRC_W], ++ { { 0, 0 }, { 1, 0 }, { 1, 1 }, }, ++ }, ++ { ++ AVR32_ALIAS_FMOV3_D, ++ &avr32_opc_table[AVR32_OPC_MVRC_D], ++ { { 0, 0 }, { 1, 0 }, { 1, 1 }, }, ++ }, ++ { ++ AVR32_ALIAS_FCASTS_D, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, 0 }, ++ { 1, 0 }, { 1, 1 }, { 0, 0 }, ++ { 0, 0x0f }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_FCASTD_S, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, 0 }, ++ { 1, 0 }, { 1, 1 }, { 0, 0 }, ++ { 0, 0x10 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSVMAC0, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x0c }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSVMAC1, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x0d }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSVMAC2, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x0e }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSVMAC3, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x0f }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSVMUL0, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x08 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSVMUL1, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x09 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSVMUL2, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x0a }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSVMUL3, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x0b }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOVMAC0, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x04 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOVMAC1, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x05 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOVMAC2, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x06 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOVMAC3, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x07 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOVMUL0, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x00 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOVMUL1, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x01 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOVMUL2, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x02 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOVMUL3, ++ &avr32_opc_table[AVR32_OPC_COP], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ { 0, 0x03 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLD_D1, ++ &avr32_opc_table[AVR32_OPC_LDC_D1], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLD_D2, ++ &avr32_opc_table[AVR32_OPC_LDC_D2], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLD_D3, ++ &avr32_opc_table[AVR32_OPC_LDC_D3], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLD_W1, ++ &avr32_opc_table[AVR32_OPC_LDC_W1], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLD_W2, ++ &avr32_opc_table[AVR32_OPC_LDC_W2], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLD_W3, ++ &avr32_opc_table[AVR32_OPC_LDC_W3], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLDM_D, ++ &avr32_opc_table[AVR32_OPC_LDCM_D], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLDM_D_PU, ++ &avr32_opc_table[AVR32_OPC_LDCM_D_PU], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLDM_W, ++ &avr32_opc_table[AVR32_OPC_LDCM_W], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOLDM_W_PU, ++ &avr32_opc_table[AVR32_OPC_LDCM_W_PU], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOMV_D1, ++ &avr32_opc_table[AVR32_OPC_MVCR_D], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOMV_D2, ++ &avr32_opc_table[AVR32_OPC_MVRC_D], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOMV_W1, ++ &avr32_opc_table[AVR32_OPC_MVCR_W], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOMV_W2, ++ &avr32_opc_table[AVR32_OPC_MVRC_W], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOST_D1, ++ &avr32_opc_table[AVR32_OPC_STC_D1], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOST_D2, ++ &avr32_opc_table[AVR32_OPC_STC_D2], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOST_D3, ++ &avr32_opc_table[AVR32_OPC_STC_D3], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOST_W1, ++ &avr32_opc_table[AVR32_OPC_STC_W1], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOST_W2, ++ &avr32_opc_table[AVR32_OPC_STC_W2], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOST_W3, ++ &avr32_opc_table[AVR32_OPC_STC_W3], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSTM_D, ++ &avr32_opc_table[AVR32_OPC_STCM_D], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSTM_D_PU, ++ &avr32_opc_table[AVR32_OPC_STCM_D_PU], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSTM_W, ++ &avr32_opc_table[AVR32_OPC_STCM_W], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ }, ++ }, ++ { ++ AVR32_ALIAS_PICOSTM_W_PU, ++ &avr32_opc_table[AVR32_OPC_STCM_W_PU], ++ { ++ { 0, PICO_CPNO }, ++ { 1, 0 }, { 1, 1 }, { 1, 2 }, ++ }, ++ }, ++ }; ++ ++ ++#define SYNTAX_NORMAL0(id, mne, opc, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ NULL, 0, { } \ ++ } ++#define SYNTAX_NORMAL1(id, mne, opc, op0, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ NULL, 1, \ ++ { \ ++ AVR32_OPERAND_##op0, \ ++ } \ ++ } ++#define SYNTAX_NORMALM1(id, mne, opc, op0, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ NULL, -1, \ ++ { \ ++ AVR32_OPERAND_##op0, \ ++ } \ ++ } ++#define SYNTAX_NORMAL2(id, mne, opc, op0, op1, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ NULL, 2, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ } \ ++ } ++#define SYNTAX_NORMALM2(id, mne, opc, op0, op1, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ NULL, -2, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ } \ ++ } ++#define SYNTAX_NORMAL3(id, mne, opc, op0, op1, op2, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ NULL, 3, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ AVR32_OPERAND_##op2, \ ++ } \ ++ } ++#define SYNTAX_NORMALM3(id, mne, opc, op0, op1, op2, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ NULL, -3, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ AVR32_OPERAND_##op2, \ ++ } \ ++ } ++#define SYNTAX_NORMAL4(id, mne, opc, op0, op1, op2, op3, arch)\ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ NULL, 4, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ AVR32_OPERAND_##op2, AVR32_OPERAND_##op3, \ ++ } \ ++ } ++#define SYNTAX_NORMAL5(id, mne, opc, op0, op1, op2, op3, op4, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ NULL, 5, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ AVR32_OPERAND_##op2, AVR32_OPERAND_##op3, \ ++ AVR32_OPERAND_##op4, \ ++ } \ ++ } ++ ++#define SYNTAX_NORMAL_C1(id, mne, opc, nxt, op0, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ &avr32_syntax_table[AVR32_SYNTAX_##nxt], 1, \ ++ { \ ++ AVR32_OPERAND_##op0, \ ++ } \ ++ } ++#define SYNTAX_NORMAL_CM1(id, mne, opc, nxt, op0, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ &avr32_syntax_table[AVR32_SYNTAX_##nxt], -1, \ ++ { \ ++ AVR32_OPERAND_##op0, \ ++ } \ ++ } ++#define SYNTAX_NORMAL_C2(id, mne, opc, nxt, op0, op1, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ &avr32_syntax_table[AVR32_SYNTAX_##nxt], 2, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ } \ ++ } ++#define SYNTAX_NORMAL_CM2(id, mne, opc, nxt, op0, op1, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ &avr32_syntax_table[AVR32_SYNTAX_##nxt], -2, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ } \ ++ } ++#define SYNTAX_NORMAL_C3(id, mne, opc, nxt, op0, op1, op2, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ &avr32_syntax_table[AVR32_SYNTAX_##nxt], 3, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ AVR32_OPERAND_##op2, \ ++ } \ ++ } ++#define SYNTAX_NORMAL_CM3(id, mne, opc, nxt, op0, op1, op2, arch) \ ++ { \ ++ AVR32_SYNTAX_##id, arch, \ ++ &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ ++ AVR32_PARSER_NORMAL, \ ++ { &avr32_opc_table[AVR32_OPC_##opc], }, \ ++ &avr32_syntax_table[AVR32_SYNTAX_##nxt], -3, \ ++ { \ ++ AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ ++ AVR32_OPERAND_##op2, \ ++ } \ ++ } ++ ++#define SYNTAX_FP(name, nr_ops) \ ++ { \ ++ AVR32_SYNTAX_##name##_S, \ ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, \ ++ { .alias = &avr32_alias_table[AVR32_ALIAS_##name##_S] }, \ ++ NULL, nr_ops, \ ++ { \ ++ AVR32_OPERAND_FPREG_S, \ ++ AVR32_OPERAND_FPREG_S, \ ++ AVR32_OPERAND_FPREG_S, \ ++ }, \ ++ }, \ ++ { \ ++ AVR32_SYNTAX_##name##_D, \ ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, \ ++ { .alias = &avr32_alias_table[AVR32_ALIAS_##name##_D] }, \ ++ NULL, nr_ops, \ ++ { \ ++ AVR32_OPERAND_FPREG_D, \ ++ AVR32_OPERAND_FPREG_D, \ ++ AVR32_OPERAND_FPREG_D, \ ++ }, \ ++ } ++ ++const struct avr32_syntax avr32_syntax_table[] = ++ { ++ SYNTAX_NORMAL1(ABS, ABS, ABS, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(ACALL, ACALL, ACALL, UNSIGNED_CONST_W, AVR32_V1), ++ SYNTAX_NORMAL1(ACR, ACR, ACR, INTREG,AVR32_V1), ++ SYNTAX_NORMAL3(ADC, ADC, ADC, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ADD1, ADD, ADD1, ADD2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(ADD2, ADD, ADD2, INTREG, INTREG, INTREG_LSL, AVR32_V1), ++ SYNTAX_NORMAL3(ADDABS, ADDABS, ADDABS, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(ADDHH_W, ADDHH_W, ADDHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL_C2(AND1, AND, AND1, AND2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(AND2, AND, AND2, AND3, INTREG, INTREG, INTREG_LSL, AVR32_V1), ++ SYNTAX_NORMAL3(AND3, AND, AND3, INTREG, INTREG, INTREG_LSR, AVR32_V1), ++ SYNTAX_NORMAL_C2(ANDH, ANDH, ANDH, ANDH_COH, INTREG, UNSIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL3(ANDH_COH, ANDH, ANDH_COH, INTREG, UNSIGNED_CONST, COH, AVR32_V1), ++ SYNTAX_NORMAL_C2(ANDL, ANDL, ANDL, ANDL_COH, INTREG, UNSIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL3(ANDL_COH, ANDL, ANDL_COH, INTREG, UNSIGNED_CONST, COH, AVR32_V1), ++ SYNTAX_NORMAL2(ANDN, ANDN, ANDN, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(ASR1, ASR, ASR1, ASR3, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(ASR3, ASR, ASR3, ASR2, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL2(ASR2, ASR, ASR2, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL4(BFEXTS, BFEXTS, BFEXTS, INTREG, INTREG, UNSIGNED_NUMBER, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL4(BFEXTU, BFEXTU, BFEXTU, INTREG, INTREG, UNSIGNED_NUMBER, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL4(BFINS, BFINS, BFINS, INTREG, INTREG, UNSIGNED_NUMBER, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL2(BLD, BLD, BLD, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL_C1(BREQ1, BREQ, BREQ1, BREQ2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL_C1(BRNE1, BRNE, BRNE1, BRNE2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL_C1(BRCC1, BRCC, BRCC1, BRCC2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL_C1(BRCS1, BRCS, BRCS1, BRCS2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL_C1(BRGE1, BRGE, BRGE1, BRGE2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL_C1(BRLT1, BRLT, BRLT1, BRLT2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL_C1(BRMI1, BRMI, BRMI1, BRMI2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL_C1(BRPL1, BRPL, BRPL1, BRPL2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL_C1(BRHS1, BRHS, BRCC1, BRHS2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL_C1(BRLO1, BRLO, BRCS1, BRLO2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BREQ2, BREQ, BREQ2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRNE2, BRNE, BRNE2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRCC2, BRCC, BRCC2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRCS2, BRCS, BRCS2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRGE2, BRGE, BRGE2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRLT2, BRLT, BRLT2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRMI2, BRMI, BRMI2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRPL2, BRPL, BRPL2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRLS, BRLS, BRLS, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRGT, BRGT, BRGT, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRLE, BRLE, BRLE, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRHI, BRHI, BRHI, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRVS, BRVS, BRVS, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRVC, BRVC, BRVC, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRQS, BRQS, BRQS, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRAL, BRAL, BRAL, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRHS2, BRHS, BRCC2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(BRLO2, BRLO, BRCS2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL0(BREAKPOINT, BREAKPOINT, BREAKPOINT, AVR32_V1), ++ SYNTAX_NORMAL1(BREV, BREV, BREV, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(BST, BST, BST, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL2(CACHE, CACHE, CACHE, INTREG_SDISP, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL1(CASTS_B, CASTS_B, CASTS_B, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(CASTS_H, CASTS_H, CASTS_H, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(CASTU_B, CASTU_B, CASTU_B, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(CASTU_H, CASTU_H, CASTU_H, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(CBR, CBR, CBR, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL2(CLZ, CLZ, CLZ, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(COM, COM, COM, INTREG, AVR32_V1), ++ SYNTAX_NORMAL5(COP, COP, COP, CPNO, CPREG, CPREG, CPREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL2(CP_B, CP_B, CP_B, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(CP_H, CP_H, CP_H, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(CP_W1, CP_W, CP_W1, CP_W2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(CP_W2, CP_W, CP_W2, CP_W3, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(CP_W3, CP_W, CP_W3, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL_C2(CPC1, CPC, CPC1, CPC2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(CPC2, CPC, CPC2, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(CSRF, CSRF, CSRF, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL1(CSRFCZ, CSRFCZ, CSRFCZ, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL3(DIVS, DIVS, DIVS, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(DIVU, DIVU, DIVU, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(EOR1, EOR, EOR1, EOR2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(EOR2, EOR, EOR2, EOR3, INTREG, INTREG, INTREG_LSL, AVR32_V1), ++ SYNTAX_NORMAL3(EOR3, EOR, EOR3, INTREG, INTREG, INTREG_LSR, AVR32_V1), ++ SYNTAX_NORMAL2(EORL, EORL, EORL, INTREG, UNSIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(EORH, EORH, EORH, INTREG, UNSIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL0(FRS, FRS, FRS, AVR32_V1), ++ SYNTAX_NORMAL1(ICALL, ICALL, ICALL, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(INCJOSP, INCJOSP, INCJOSP, JOSPINC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_D1, LD_D, LD_D1, LD_D2, DWREG, INTREG_POSTINC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_D2, LD_D, LD_D2, LD_D3, DWREG, INTREG_PREDEC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_D3, LD_D, LD_D3, LD_D5, DWREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_D5, LD_D, LD_D5, LD_D4, DWREG, INTREG_INDEX, AVR32_V1), ++ SYNTAX_NORMAL2(LD_D4, LD_D, LD_D4, DWREG, INTREG_SDISP, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_SB2, LD_SB, LD_SB2, LD_SB1, INTREG, INTREG_INDEX, AVR32_V1), ++ SYNTAX_NORMAL2(LD_SB1, LD_SB, LD_SB1, INTREG, INTREG_SDISP, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_UB1, LD_UB, LD_UB1, LD_UB2, INTREG, INTREG_POSTINC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_UB2, LD_UB, LD_UB2, LD_UB5, INTREG, INTREG_PREDEC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_UB5, LD_UB, LD_UB5, LD_UB3, INTREG, INTREG_INDEX, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_UB3, LD_UB, LD_UB3, LD_UB4, INTREG, INTREG_UDISP, AVR32_V1), ++ SYNTAX_NORMAL2(LD_UB4, LD_UB, LD_UB4, INTREG, INTREG_SDISP, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_SH1, LD_SH, LD_SH1, LD_SH2, INTREG, INTREG_POSTINC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_SH2, LD_SH, LD_SH2, LD_SH5, INTREG, INTREG_PREDEC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_SH5, LD_SH, LD_SH5, LD_SH3, INTREG, INTREG_INDEX, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_SH3, LD_SH, LD_SH3, LD_SH4, INTREG, INTREG_UDISP_H, AVR32_V1), ++ SYNTAX_NORMAL2(LD_SH4, LD_SH, LD_SH4, INTREG, INTREG_SDISP, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_UH1, LD_UH, LD_UH1, LD_UH2, INTREG, INTREG_POSTINC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_UH2, LD_UH, LD_UH2, LD_UH5, INTREG, INTREG_PREDEC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_UH5, LD_UH, LD_UH5, LD_UH3, INTREG, INTREG_INDEX, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_UH3, LD_UH, LD_UH3, LD_UH4, INTREG, INTREG_UDISP_H, AVR32_V1), ++ SYNTAX_NORMAL2(LD_UH4, LD_UH, LD_UH4, INTREG, INTREG_SDISP, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_W1, LD_W, LD_W1, LD_W2, INTREG, INTREG_POSTINC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_W2, LD_W, LD_W2, LD_W5, INTREG, INTREG_PREDEC, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_W5, LD_W, LD_W5, LD_W6, INTREG, INTREG_INDEX, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_W6, LD_W, LD_W6, LD_W3, INTREG, INTREG_XINDEX, AVR32_V1), ++ SYNTAX_NORMAL_C2(LD_W3, LD_W, LD_W3, LD_W4, INTREG, INTREG_UDISP_W, AVR32_V1), ++ SYNTAX_NORMAL2(LD_W4, LD_W, LD_W4, INTREG, INTREG_SDISP, AVR32_V1), ++ SYNTAX_NORMAL3(LDC_D1, LDC_D, LDC_D1, CPNO, CPREG_D, INTREG_UDISP_W, AVR32_V1), ++ SYNTAX_NORMAL_C3(LDC_D2, LDC_D, LDC_D2, LDC_D1, CPNO, CPREG_D, INTREG_PREDEC, AVR32_V1), ++ SYNTAX_NORMAL_C3(LDC_D3, LDC_D, LDC_D3, LDC_D2, CPNO, CPREG_D, INTREG_INDEX, AVR32_V1), ++ SYNTAX_NORMAL3(LDC_W1, LDC_W, LDC_W1, CPNO, CPREG, INTREG_UDISP_W, AVR32_V1), ++ SYNTAX_NORMAL_C3(LDC_W2, LDC_W, LDC_W2, LDC_W1, CPNO, CPREG, INTREG_PREDEC, AVR32_V1), ++ SYNTAX_NORMAL_C3(LDC_W3, LDC_W, LDC_W3, LDC_W2, CPNO, CPREG, INTREG_INDEX, AVR32_V1), ++ SYNTAX_NORMAL2(LDC0_D, LDC0_D, LDC0_D, CPREG_D, INTREG_UDISP_W, AVR32_V1), ++ SYNTAX_NORMAL2(LDC0_W, LDC0_W, LDC0_W, CPREG, INTREG_UDISP_W, AVR32_V1), ++ SYNTAX_NORMAL_CM3(LDCM_D, LDCM_D, LDCM_D, LDCM_D_PU, CPNO, INTREG, REGLIST_CPD8, AVR32_V1), ++ SYNTAX_NORMALM3(LDCM_D_PU, LDCM_D, LDCM_D_PU, CPNO, INTREG_POSTINC, REGLIST_CPD8, AVR32_V1), ++ SYNTAX_NORMAL_CM3(LDCM_W, LDCM_W, LDCM_W, LDCM_W_PU, CPNO, INTREG, REGLIST_CP8, AVR32_V1), ++ SYNTAX_NORMALM3(LDCM_W_PU, LDCM_W, LDCM_W_PU, CPNO, INTREG_POSTINC, REGLIST_CP8, AVR32_V1), ++ SYNTAX_NORMAL2(LDDPC, LDDPC, LDDPC, INTREG, PC_UDISP_W, AVR32_V1), ++ SYNTAX_NORMAL2(LDDPC_EXT, LDDPC, LDDPC_EXT, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(LDDSP, LDDSP, LDDSP, INTREG, SP_UDISP_W, AVR32_V1), ++ SYNTAX_NORMAL2(LDINS_B, LDINS_B, LDINS_B, INTREG_BSEL, INTREG_SDISP, AVR32_V1), ++ SYNTAX_NORMAL2(LDINS_H, LDINS_H, LDINS_H, INTREG_HSEL, INTREG_SDISP_H, AVR32_V1), ++ SYNTAX_NORMALM1(LDM, LDM, LDM, REGLIST_LDM, AVR32_V1), ++ SYNTAX_NORMAL_CM2(LDMTS, LDMTS, LDMTS, LDMTS_PU, INTREG, REGLIST16, AVR32_V1), ++ SYNTAX_NORMALM2(LDMTS_PU, LDMTS, LDMTS_PU, INTREG_POSTINC, REGLIST16, AVR32_V1), ++ SYNTAX_NORMAL2(LDSWP_SH, LDSWP_SH, LDSWP_SH, INTREG, INTREG_SDISP_H, AVR32_V1), ++ SYNTAX_NORMAL2(LDSWP_UH, LDSWP_UH, LDSWP_UH, INTREG, INTREG_SDISP_H, AVR32_V1), ++ SYNTAX_NORMAL2(LDSWP_W, LDSWP_W, LDSWP_W, INTREG, INTREG_SDISP_W, AVR32_V1), ++ SYNTAX_NORMAL_C3(LSL1, LSL, LSL1, LSL3, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(LSL3, LSL, LSL3, LSL2, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL2(LSL2, LSL, LSL2, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL_C3(LSR1, LSR, LSR1, LSR3, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(LSR3, LSR, LSR3, LSR2, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL2(LSR2, LSR, LSR2, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL3(MAC, MAC, MAC, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(MACHH_D, MACHH_D, MACHH_D, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MACHH_W, MACHH_W, MACHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MACS_D, MACS_D, MACS_D, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(MACSATHH_W, MACSATHH_W, MACSATHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MACUD, MACU_D, MACUD, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(MACWH_D, MACWH_D, MACWH_D, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MAX, MAX, MAX, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(MCALL, MCALL, MCALL, MCALL, AVR32_V1), ++ SYNTAX_NORMAL2(MFDR, MFDR, MFDR, INTREG, UNSIGNED_CONST_W, AVR32_V1), ++ SYNTAX_NORMAL2(MFSR, MFSR, MFSR, INTREG, UNSIGNED_CONST_W, AVR32_V1), ++ SYNTAX_NORMAL3(MIN, MIN, MIN, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOV3, MOV, MOV3, MOV1, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOV1, MOV, MOV1, MOV2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOV2, MOV, MOV2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVEQ1, MOVEQ, MOVEQ1, MOVEQ2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVNE1, MOVNE, MOVNE1, MOVNE2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVCC1, MOVCC, MOVCC1, MOVCC2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVCS1, MOVCS, MOVCS1, MOVCS2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVGE1, MOVGE, MOVGE1, MOVGE2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVLT1, MOVLT, MOVLT1, MOVLT2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVMI1, MOVMI, MOVMI1, MOVMI2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVPL1, MOVPL, MOVPL1, MOVPL2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVLS1, MOVLS, MOVLS1, MOVLS2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVGT1, MOVGT, MOVGT1, MOVGT2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVLE1, MOVLE, MOVLE1, MOVLE2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVHI1, MOVHI, MOVHI1, MOVHI2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVVS1, MOVVS, MOVVS1, MOVVS2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVVC1, MOVVC, MOVVC1, MOVVC2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVQS1, MOVQS, MOVQS1, MOVQS2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVAL1, MOVAL, MOVAL1, MOVAL2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVHS1, MOVHS, MOVCC1, MOVHS2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MOVLO1, MOVLO, MOVCS1, MOVLO2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(MOVEQ2, MOVEQ, MOVEQ2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVNE2, MOVNE, MOVNE2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVCC2, MOVCC, MOVCC2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVCS2, MOVCS, MOVCS2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVGE2, MOVGE, MOVGE2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVLT2, MOVLT, MOVLT2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVMI2, MOVMI, MOVMI2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVPL2, MOVPL, MOVPL2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVLS2, MOVLS, MOVLS2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVGT2, MOVGT, MOVGT2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVLE2, MOVLE, MOVLE2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVHI2, MOVHI, MOVHI2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVVS2, MOVVS, MOVVS2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVVC2, MOVVC, MOVVC2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVQS2, MOVQS, MOVQS2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVAL2, MOVAL, MOVAL2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVHS2, MOVHS, MOVCC2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MOVLO2, MOVLO, MOVCS2, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(MTDR, MTDR, MTDR, UNSIGNED_CONST_W, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(MTSR, MTSR, MTSR, UNSIGNED_CONST_W, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(MUL1, MUL, MUL1, MUL2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(MUL2, MUL, MUL2, MUL3, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(MUL3, MUL, MUL3, INTREG, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL3(MULHH_W, MULHH_W, MULHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MULNHH_W, MULNHH_W, MULNHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MULNWH_D, MULNWH_D, MULNWH_D, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MULSD, MULS_D, MULSD, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(MULSATHH_H, MULSATHH_H, MULSATHH_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MULSATHH_W, MULSATHH_W, MULSATHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MULSATRNDHH_H, MULSATRNDHH_H, MULSATRNDHH_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MULSATRNDWH_W, MULSATRNDWH_W, MULSATRNDWH_W, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MULSATWH_W, MULSATWH_W, MULSATWH_W, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL3(MULU_D, MULU_D, MULU_D, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(MULWH_D, MULWH_D, MULWH_D, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL1(MUSFR, MUSFR, MUSFR, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(MUSTR, MUSTR, MUSTR, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(MVCR_D, MVCR_D, MVCR_D, CPNO, DWREG, CPREG_D, AVR32_V1), ++ SYNTAX_NORMAL3(MVCR_W, MVCR_W, MVCR_W, CPNO, INTREG, CPREG, AVR32_V1), ++ SYNTAX_NORMAL3(MVRC_D, MVRC_D, MVRC_D, CPNO, CPREG_D, DWREG, AVR32_V1), ++ SYNTAX_NORMAL3(MVRC_W, MVRC_W, MVRC_W, CPNO, CPREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(NEG, NEG, NEG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL0(NOP, NOP, NOP, AVR32_V1), ++ SYNTAX_NORMAL_C2(OR1, OR, OR1, OR2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(OR2, OR, OR2, OR3, INTREG, INTREG, INTREG_LSL, AVR32_V1), ++ SYNTAX_NORMAL3(OR3, OR, OR3, INTREG, INTREG, INTREG_LSR, AVR32_V1), ++ SYNTAX_NORMAL2(ORH, ORH, ORH, INTREG, UNSIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(ORL, ORL, ORL, INTREG, UNSIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(PABS_SB, PABS_SB, PABS_SB, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL2(PABS_SH, PABS_SH, PABS_SH, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PACKSH_SB, PACKSH_SB, PACKSH_SB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PACKSH_UB, PACKSH_UB, PACKSH_UB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PACKW_SH, PACKW_SH, PACKW_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADD_B, PADD_B, PADD_B, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADD_H, PADD_H, PADD_H, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDH_SH, PADDH_SH, PADDH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDH_UB, PADDH_UB, PADDH_UB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDS_SB, PADDS_SB, PADDS_SB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDS_SH, PADDS_SH, PADDS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDS_UB, PADDS_UB, PADDS_UB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDS_UH, PADDS_UH, PADDS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDSUB_H, PADDSUB_H, PADDSUB_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDSUBH_SH, PADDSUBH_SH, PADDSUBH_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDSUBS_SH, PADDSUBS_SH, PADDSUBS_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDSUBS_UH, PADDSUBS_UH, PADDSUBS_UH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDX_H, PADDX_H, PADDX_H, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDXH_SH, PADDXH_SH, PADDXH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDXS_SH, PADDXS_SH, PADDXS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PADDXS_UH, PADDXS_UH, PADDXS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PASR_B, PASR_B, PASR_B, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), ++ SYNTAX_NORMAL3(PASR_H, PASR_H, PASR_H, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), ++ SYNTAX_NORMAL3(PAVG_SH, PAVG_SH, PAVG_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PAVG_UB, PAVG_UB, PAVG_UB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PLSL_B, PLSL_B, PLSL_B, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), ++ SYNTAX_NORMAL3(PLSL_H, PLSL_H, PLSL_H, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), ++ SYNTAX_NORMAL3(PLSR_B, PLSR_B, PLSR_B, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), ++ SYNTAX_NORMAL3(PLSR_H, PLSR_H, PLSR_H, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), ++ SYNTAX_NORMAL3(PMAX_SH, PMAX_SH, PMAX_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PMAX_UB, PMAX_UB, PMAX_UB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PMIN_SH, PMIN_SH, PMIN_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PMIN_UB, PMIN_UB, PMIN_UB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL0(POPJC, POPJC, POPJC, AVR32_V1), ++ SYNTAX_NORMAL_CM1(POPM, POPM, POPM, POPM_E, REGLIST9, AVR32_V1), ++ SYNTAX_NORMALM1(POPM_E, POPM, POPM_E, REGLIST16, AVR32_V1), ++ SYNTAX_NORMAL1(PREF, PREF, PREF, INTREG_SDISP, AVR32_V1), ++ SYNTAX_NORMAL3(PSAD, PSAD, PSAD, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUB_B, PSUB_B, PSUB_B, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUB_H, PSUB_H, PSUB_H, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBADD_H, PSUBADD_H, PSUBADD_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBADDH_SH, PSUBADDH_SH, PSUBADDH_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBADDS_SH, PSUBADDS_SH, PSUBADDS_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBADDS_UH, PSUBADDS_UH, PSUBADDS_UH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBH_SH, PSUBH_SH, PSUBH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBH_UB, PSUBH_UB, PSUBH_UB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBS_SB, PSUBS_SB, PSUBS_SB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBS_SH, PSUBS_SH, PSUBS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBS_UB, PSUBS_UB, PSUBS_UB, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBS_UH, PSUBS_UH, PSUBS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBX_H, PSUBX_H, PSUBX_H, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBXH_SH, PSUBXH_SH, PSUBXH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBXS_SH, PSUBXS_SH, PSUBXS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL3(PSUBXS_UH, PSUBXS_UH, PSUBXS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), ++ SYNTAX_NORMAL2(PUNPCKSB_H, PUNPCKSB_H, PUNPCKSB_H, INTREG, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL2(PUNPCKUB_H, PUNPCKUB_H, PUNPCKUB_H, INTREG, INTREG_HSEL, AVR32_SIMD), ++ SYNTAX_NORMAL0(PUSHJC, PUSHJC, PUSHJC, AVR32_V1), ++ SYNTAX_NORMAL_CM1(PUSHM, PUSHM, PUSHM, PUSHM_E, REGLIST8, AVR32_V1), ++ SYNTAX_NORMALM1(PUSHM_E, PUSHM, PUSHM_E, REGLIST16, AVR32_V1), ++ SYNTAX_NORMAL_C1(RCALL1, RCALL, RCALL1, RCALL2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(RCALL2, RCALL, RCALL2, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(RETEQ, RETEQ, RETEQ, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETNE, RETNE, RETNE, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETCC, RETCC, RETCC, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETCS, RETCS, RETCS, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETGE, RETGE, RETGE, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETLT, RETLT, RETLT, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETMI, RETMI, RETMI, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETPL, RETPL, RETPL, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETLS, RETLS, RETLS, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETGT, RETGT, RETGT, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETLE, RETLE, RETLE, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETHI, RETHI, RETHI, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETVS, RETVS, RETVS, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETVC, RETVC, RETVC, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETQS, RETQS, RETQS, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETAL, RETAL, RETAL, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETHS, RETHS, RETCC, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL1(RETLO, RETLO, RETCS, RETVAL, AVR32_V1), ++ SYNTAX_NORMAL0(RETD, RETD, RETD, AVR32_V1), ++ SYNTAX_NORMAL0(RETE, RETE, RETE, AVR32_V1), ++ SYNTAX_NORMAL0(RETJ, RETJ, RETJ, AVR32_V1), ++ SYNTAX_NORMAL0(RETS, RETS, RETS, AVR32_V1), ++ SYNTAX_NORMAL1(RJMP, RJMP, RJMP, JMPLABEL, AVR32_V1), ++ SYNTAX_NORMAL1(ROL, ROL, ROL, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(ROR, ROR, ROR, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(RSUB1, RSUB, RSUB1, RSUB2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(RSUB2, RSUB, RSUB2, INTREG, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL3(SATADD_H, SATADD_H, SATADD_H, INTREG, INTREG, INTREG, AVR32_DSP), ++ SYNTAX_NORMAL3(SATADD_W, SATADD_W, SATADD_W, INTREG, INTREG, INTREG, AVR32_DSP), ++ SYNTAX_NORMAL2(SATRNDS, SATRNDS, SATRNDS, INTREG_LSR, UNSIGNED_NUMBER, AVR32_DSP), ++ SYNTAX_NORMAL2(SATRNDU, SATRNDU, SATRNDU, INTREG_LSR, UNSIGNED_NUMBER, AVR32_DSP), ++ SYNTAX_NORMAL2(SATS, SATS, SATS, INTREG_LSR, UNSIGNED_NUMBER, AVR32_DSP), ++ SYNTAX_NORMAL3(SATSUB_H, SATSUB_H, SATSUB_H, INTREG, INTREG, INTREG, AVR32_DSP), ++ SYNTAX_NORMAL_C3(SATSUB_W1, SATSUB_W, SATSUB_W1, SATSUB_W2, INTREG, INTREG, INTREG, AVR32_DSP), ++ SYNTAX_NORMAL3(SATSUB_W2, SATSUB_W, SATSUB_W2, INTREG, INTREG, SIGNED_CONST, AVR32_DSP), ++ SYNTAX_NORMAL2(SATU, SATU, SATU, INTREG_LSR, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL3(SBC, SBC, SBC, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(SBR, SBR, SBR, INTREG, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL0(SCALL, SCALL, SCALL, AVR32_V1), ++ SYNTAX_NORMAL1(SCR, SCR, SCR, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SLEEP, SLEEP, SLEEP, UNSIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL1(SREQ, SREQ, SREQ, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRNE, SRNE, SRNE, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRCC, SRCC, SRCC, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRCS, SRCS, SRCS, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRGE, SRGE, SRGE, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRLT, SRLT, SRLT, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRMI, SRMI, SRMI, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRPL, SRPL, SRPL, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRLS, SRLS, SRLS, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRGT, SRGT, SRGT, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRLE, SRLE, SRLE, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRHI, SRHI, SRHI, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRVS, SRVS, SRVS, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRVC, SRVC, SRVC, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRQS, SRQS, SRQS, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRAL, SRAL, SRAL, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRHS, SRHS, SRCC, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SRLO, SRLO, SRCS, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SSRF, SSRF, SSRF, UNSIGNED_NUMBER, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_B1, ST_B, ST_B1, ST_B2, INTREG_POSTINC, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_B2, ST_B, ST_B2, ST_B5, INTREG_PREDEC, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_B5, ST_B, ST_B5, ST_B3, INTREG_INDEX, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_B3, ST_B, ST_B3, ST_B4, INTREG_UDISP, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(ST_B4, ST_B, ST_B4, INTREG_SDISP, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_D1, ST_D, ST_D1, ST_D2, INTREG_POSTINC, DWREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_D2, ST_D, ST_D2, ST_D3, INTREG_PREDEC, DWREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_D3, ST_D, ST_D3, ST_D5, INTREG, DWREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_D5, ST_D, ST_D5, ST_D4, INTREG_INDEX, DWREG, AVR32_V1), ++ SYNTAX_NORMAL2(ST_D4, ST_D, ST_D4, INTREG_SDISP, DWREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_H1, ST_H, ST_H1, ST_H2, INTREG_POSTINC, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_H2, ST_H, ST_H2, ST_H5, INTREG_PREDEC, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_H5, ST_H, ST_H5, ST_H3, INTREG_INDEX, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_H3, ST_H, ST_H3, ST_H4, INTREG_UDISP_H, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(ST_H4, ST_H, ST_H4, INTREG_SDISP, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_W1, ST_W, ST_W1, ST_W2, INTREG_POSTINC, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_W2, ST_W, ST_W2, ST_W5, INTREG_PREDEC, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_W5, ST_W, ST_W5, ST_W3, INTREG_INDEX, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(ST_W3, ST_W, ST_W3, ST_W4, INTREG_UDISP_W, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(ST_W4, ST_W, ST_W4, INTREG_SDISP, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(STC_D1, STC_D, STC_D1, CPNO, INTREG_UDISP_W, CPREG_D, AVR32_V1), ++ SYNTAX_NORMAL_C3(STC_D2, STC_D, STC_D2, STC_D1, CPNO, INTREG_POSTINC, CPREG_D, AVR32_V1), ++ SYNTAX_NORMAL_C3(STC_D3, STC_D, STC_D3, STC_D2, CPNO, INTREG_INDEX, CPREG_D, AVR32_V1), ++ SYNTAX_NORMAL3(STC_W1, STC_W, STC_W1, CPNO, INTREG_UDISP_W, CPREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(STC_W2, STC_W, STC_W2, STC_W1, CPNO, INTREG_POSTINC, CPREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(STC_W3, STC_W, STC_W3, STC_W2, CPNO, INTREG_INDEX, CPREG, AVR32_V1), ++ SYNTAX_NORMAL2(STC0_D, STC0_D, STC0_D, INTREG_UDISP_W, CPREG_D, AVR32_V1), ++ SYNTAX_NORMAL2(STC0_W, STC0_W, STC0_W, INTREG_UDISP_W, CPREG, AVR32_V1), ++ SYNTAX_NORMAL_CM3(STCM_D, STCM_D, STCM_D, STCM_D_PU, CPNO, INTREG, REGLIST_CPD8, AVR32_V1), ++ SYNTAX_NORMALM3(STCM_D_PU, STCM_D, STCM_D_PU, CPNO, INTREG_PREDEC, REGLIST_CPD8, AVR32_V1), ++ SYNTAX_NORMAL_CM3(STCM_W, STCM_W, STCM_W, STCM_W_PU, CPNO, INTREG, REGLIST_CP8, AVR32_V1), ++ SYNTAX_NORMALM3(STCM_W_PU, STCM_W, STCM_W_PU, CPNO, INTREG_PREDEC, REGLIST_CP8, AVR32_V1), ++ SYNTAX_NORMAL2(STCOND, STCOND, STCOND, INTREG_SDISP, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(STDSP, STDSP, STDSP, SP_UDISP_W, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(STHH_W2, STHH_W, STHH_W2, STHH_W1, INTREG_INDEX, INTREG_HSEL, INTREG_HSEL, AVR32_V1), ++ SYNTAX_NORMAL3(STHH_W1, STHH_W, STHH_W1, INTREG_UDISP_W, INTREG_HSEL, INTREG_HSEL, AVR32_V1), ++ SYNTAX_NORMAL_CM2(STM, STM, STM, STM_PU, INTREG, REGLIST16, AVR32_V1), ++ SYNTAX_NORMALM2(STM_PU, STM, STM_PU, INTREG_PREDEC, REGLIST16, AVR32_V1), ++ SYNTAX_NORMAL_CM2(STMTS, STMTS, STMTS, STMTS_PU, INTREG, REGLIST16, AVR32_V1), ++ SYNTAX_NORMALM2(STMTS_PU, STMTS, STMTS_PU, INTREG_PREDEC, REGLIST16, AVR32_V1), ++ SYNTAX_NORMAL2(STSWP_H, STSWP_H, STSWP_H, INTREG_SDISP_H, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(STSWP_W, STSWP_W, STSWP_W, INTREG_SDISP_W, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C2(SUB1, SUB, SUB1, SUB2, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL_C3(SUB2, SUB, SUB2, SUB5, INTREG, INTREG, INTREG_LSL, AVR32_V1), ++ SYNTAX_NORMAL_C3(SUB5, SUB, SUB5, SUB3_SP, INTREG, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL_C2(SUB3_SP, SUB, SUB3_SP, SUB3, SP, SIGNED_CONST_W, AVR32_V1), ++ SYNTAX_NORMAL_C2(SUB3, SUB, SUB3, SUB4, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUB4, SUB, SUB4, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBEQ, SUBEQ, SUBEQ, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBNE, SUBNE, SUBNE, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBCC, SUBCC, SUBCC, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBCS, SUBCS, SUBCS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBGE, SUBGE, SUBGE, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBLT, SUBLT, SUBLT, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBMI, SUBMI, SUBMI, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBPL, SUBPL, SUBPL, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBLS, SUBLS, SUBLS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBGT, SUBGT, SUBGT, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBLE, SUBLE, SUBLE, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBHI, SUBHI, SUBHI, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBVS, SUBVS, SUBVS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBVC, SUBVC, SUBVC, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBQS, SUBQS, SUBQS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBAL, SUBAL, SUBAL, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBHS, SUBHS, SUBCC, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBLO, SUBLO, SUBCS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFEQ, SUBFEQ, SUBFEQ, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFNE, SUBFNE, SUBFNE, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFCC, SUBFCC, SUBFCC, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFCS, SUBFCS, SUBFCS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFGE, SUBFGE, SUBFGE, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFLT, SUBFLT, SUBFLT, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFMI, SUBFMI, SUBFMI, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFPL, SUBFPL, SUBFPL, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFLS, SUBFLS, SUBFLS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFGT, SUBFGT, SUBFGT, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFLE, SUBFLE, SUBFLE, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFHI, SUBFHI, SUBFHI, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFVS, SUBFVS, SUBFVS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFVC, SUBFVC, SUBFVC, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFQS, SUBFQS, SUBFQS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFAL, SUBFAL, SUBFAL, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFHS, SUBFHS, SUBFCC, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL2(SUBFLO, SUBFLO, SUBFCS, INTREG, SIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL3(SUBHH_W, SUBHH_W, SUBHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), ++ SYNTAX_NORMAL1(SWAP_B, SWAP_B, SWAP_B, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SWAP_BH, SWAP_BH, SWAP_BH, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SWAP_H, SWAP_H, SWAP_H, INTREG, AVR32_V1), ++ SYNTAX_NORMAL1(SYNC, SYNC, SYNC, UNSIGNED_CONST, AVR32_V1), ++ SYNTAX_NORMAL0(TLBR, TLBR, TLBR, AVR32_V1), ++ SYNTAX_NORMAL0(TLBS, TLBS, TLBS, AVR32_V1), ++ SYNTAX_NORMAL0(TLBW, TLBW, TLBW, AVR32_V1), ++ SYNTAX_NORMAL1(TNBZ, TNBZ, TNBZ, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(TST, TST, TST, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL3(XCHG, XCHG, XCHG, INTREG, INTREG, INTREG, AVR32_V1), ++ SYNTAX_NORMAL2(MEMC, MEMC, MEMC, SIGNED_CONST_W, UNSIGNED_NUMBER, AVR32_RMW), ++ SYNTAX_NORMAL2(MEMS, MEMS, MEMS, SIGNED_CONST_W, UNSIGNED_NUMBER, AVR32_RMW), ++ SYNTAX_NORMAL2(MEMT, MEMT, MEMT, SIGNED_CONST_W, UNSIGNED_NUMBER, AVR32_RMW), ++ SYNTAX_FP(FADD, 3), ++ SYNTAX_FP(FSUB, 3), ++ SYNTAX_FP(FMAC, 3), ++ SYNTAX_FP(FNMAC, 3), ++ SYNTAX_FP(FMSC, 3), ++ SYNTAX_FP(FNMSC, 3), ++ SYNTAX_FP(FMUL, 3), ++ SYNTAX_FP(FNMUL, 3), ++ SYNTAX_FP(FNEG, 2), ++ SYNTAX_FP(FABS, 2), ++ SYNTAX_FP(FCMP, 2), ++ { ++ AVR32_SYNTAX_FMOV1_S, ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV1_S] }, ++ &avr32_syntax_table[AVR32_SYNTAX_FMOV2_S], ++ 2, ++ { ++ AVR32_OPERAND_FPREG_S, ++ AVR32_OPERAND_FPREG_S, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_FMOV1_D, ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV1_D] }, ++ &avr32_syntax_table[AVR32_SYNTAX_FMOV2_D], ++ 2, ++ { ++ AVR32_OPERAND_FPREG_D, ++ AVR32_OPERAND_FPREG_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_FMOV2_S, ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV2_S] }, ++ &avr32_syntax_table[AVR32_SYNTAX_FMOV3_S], ++ 2, ++ { ++ AVR32_OPERAND_INTREG, ++ AVR32_OPERAND_FPREG_S, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_FMOV2_D, ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV2_D] }, ++ &avr32_syntax_table[AVR32_SYNTAX_FMOV3_D], ++ 2, ++ { ++ AVR32_OPERAND_DWREG, ++ AVR32_OPERAND_FPREG_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_FMOV3_S, ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV3_S] }, NULL, ++ 2, ++ { ++ AVR32_OPERAND_FPREG_S, ++ AVR32_OPERAND_INTREG, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_FMOV3_D, ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV3_D] }, NULL, ++ 2, ++ { ++ AVR32_OPERAND_FPREG_D, ++ AVR32_OPERAND_DWREG, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_FCASTS_D, ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_FCASTS_D] }, NULL, ++ 2, ++ { ++ AVR32_OPERAND_FPREG_S, ++ AVR32_OPERAND_FPREG_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_FCASTD_S, ++ AVR32_FP, NULL, AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_FCASTD_S] }, NULL, ++ 2, ++ { ++ AVR32_OPERAND_FPREG_D, ++ AVR32_OPERAND_FPREG_S, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_LDA_W, ++ AVR32_V1, NULL, AVR32_PARSER_LDA, ++ { NULL }, NULL, ++ 2, ++ { ++ AVR32_OPERAND_INTREG, ++ AVR32_OPERAND_SIGNED_CONST, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_CALL, ++ AVR32_V1, NULL, AVR32_PARSER_CALL, ++ { NULL }, NULL, ++ 1, ++ { ++ AVR32_OPERAND_JMPLABEL, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSVMAC0, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC0] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOSVMAC1], 4, ++ { ++ AVR32_OPERAND_PICO_OUT0, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSVMAC1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC1] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOSVMAC2], 4, ++ { ++ AVR32_OPERAND_PICO_OUT1, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSVMAC2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC2] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOSVMAC3], 4, ++ { ++ AVR32_OPERAND_PICO_OUT2, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSVMAC3, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC3] }, ++ NULL, 4, ++ { ++ AVR32_OPERAND_PICO_OUT3, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSVMUL0, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL0] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOSVMUL1], 4, ++ { ++ AVR32_OPERAND_PICO_OUT0, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSVMUL1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL1] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOSVMUL2], 4, ++ { ++ AVR32_OPERAND_PICO_OUT1, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSVMUL2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL2] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOSVMUL3], 4, ++ { ++ AVR32_OPERAND_PICO_OUT2, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSVMUL3, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL3] }, ++ NULL, 4, ++ { ++ AVR32_OPERAND_PICO_OUT3, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOVMAC0, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC0] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOVMAC1], 4, ++ { ++ AVR32_OPERAND_PICO_OUT0, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOVMAC1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC1] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOVMAC2], 4, ++ { ++ AVR32_OPERAND_PICO_OUT1, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOVMAC2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC2] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOVMAC3], 4, ++ { ++ AVR32_OPERAND_PICO_OUT2, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOVMAC3, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC3] }, ++ NULL, 4, ++ { ++ AVR32_OPERAND_PICO_OUT3, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOVMUL0, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL0] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOVMUL1], 4, ++ { ++ AVR32_OPERAND_PICO_OUT0, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOVMUL1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL1] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOVMUL2], 4, ++ { ++ AVR32_OPERAND_PICO_OUT1, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOVMUL2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL2] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOVMUL3], 4, ++ { ++ AVR32_OPERAND_PICO_OUT2, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOVMUL3, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL3] }, ++ NULL, 4, ++ { ++ AVR32_OPERAND_PICO_OUT3, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_IN, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLD_D2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_D2] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOLD_D3], 2, ++ { ++ AVR32_OPERAND_PICO_REG_D, ++ AVR32_OPERAND_INTREG_PREDEC, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLD_D3, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_D3] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOLD_D1], 2, ++ { ++ AVR32_OPERAND_PICO_REG_D, ++ AVR32_OPERAND_INTREG_INDEX, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLD_D1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_D1] }, ++ NULL, 2, ++ { ++ AVR32_OPERAND_PICO_REG_D, ++ AVR32_OPERAND_INTREG_UDISP_W, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLD_W2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_W2] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOLD_W3], 2, ++ { ++ AVR32_OPERAND_PICO_REG_W, ++ AVR32_OPERAND_INTREG_PREDEC, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLD_W3, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_W3] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOLD_W1], 2, ++ { ++ AVR32_OPERAND_PICO_REG_W, ++ AVR32_OPERAND_INTREG_INDEX, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLD_W1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_W1] }, ++ NULL, 2, ++ { ++ AVR32_OPERAND_PICO_REG_W, ++ AVR32_OPERAND_INTREG_UDISP_W, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLDM_D, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_D] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOLDM_D_PU], -2, ++ { ++ AVR32_OPERAND_INTREG, ++ AVR32_OPERAND_PICO_REGLIST_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLDM_D_PU, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_D_PU] }, ++ NULL, -2, ++ { ++ AVR32_OPERAND_INTREG_POSTINC, ++ AVR32_OPERAND_PICO_REGLIST_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLDM_W, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_W] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOLDM_W_PU], -2, ++ { ++ AVR32_OPERAND_INTREG, ++ AVR32_OPERAND_PICO_REGLIST_W, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOLDM_W_PU, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_W_PU] }, ++ NULL, -2, ++ { ++ AVR32_OPERAND_INTREG_POSTINC, ++ AVR32_OPERAND_PICO_REGLIST_W, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOMV_D1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_D1] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOMV_D2], 2, ++ { ++ AVR32_OPERAND_DWREG, ++ AVR32_OPERAND_PICO_REG_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOMV_D2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_D2] }, ++ NULL, 2, ++ { ++ AVR32_OPERAND_PICO_REG_D, ++ AVR32_OPERAND_DWREG, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOMV_W1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_W1] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOMV_W2], 2, ++ { ++ AVR32_OPERAND_INTREG, ++ AVR32_OPERAND_PICO_REG_W, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOMV_W2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_W2] }, ++ NULL, 2, ++ { ++ AVR32_OPERAND_PICO_REG_W, ++ AVR32_OPERAND_INTREG, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOST_D2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_D2] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOST_D3], 2, ++ { ++ AVR32_OPERAND_INTREG_POSTINC, ++ AVR32_OPERAND_PICO_REG_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOST_D3, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_D3] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOST_D1], 2, ++ { ++ AVR32_OPERAND_INTREG_INDEX, ++ AVR32_OPERAND_PICO_REG_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOST_D1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_D1] }, ++ NULL, 2, ++ { ++ AVR32_OPERAND_INTREG_UDISP_W, ++ AVR32_OPERAND_PICO_REG_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOST_W2, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_W2] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOST_W3], 2, ++ { ++ AVR32_OPERAND_INTREG_POSTINC, ++ AVR32_OPERAND_PICO_REG_W, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOST_W3, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_W3] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOST_W1], 2, ++ { ++ AVR32_OPERAND_INTREG_INDEX, ++ AVR32_OPERAND_PICO_REG_W, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOST_W1, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_W1] }, ++ NULL, 2, ++ { ++ AVR32_OPERAND_INTREG_UDISP_W, ++ AVR32_OPERAND_PICO_REG_W, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSTM_D, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_D] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOSTM_D_PU], -2, ++ { ++ AVR32_OPERAND_INTREG, ++ AVR32_OPERAND_PICO_REGLIST_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSTM_D_PU, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_D], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_D_PU] }, ++ NULL, -2, ++ { ++ AVR32_OPERAND_INTREG_PREDEC, ++ AVR32_OPERAND_PICO_REGLIST_D, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSTM_W, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_W] }, ++ &avr32_syntax_table[AVR32_SYNTAX_PICOSTM_W_PU], -2, ++ { ++ AVR32_OPERAND_INTREG, ++ AVR32_OPERAND_PICO_REGLIST_W, ++ }, ++ }, ++ { ++ AVR32_SYNTAX_PICOSTM_W_PU, ++ AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_W], AVR32_PARSER_ALIAS, ++ { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_W_PU] }, ++ NULL, -2, ++ { ++ AVR32_OPERAND_INTREG_PREDEC, ++ AVR32_OPERAND_PICO_REGLIST_W, ++ }, ++ }, ++ }; ++ ++#define NORMAL_MNEMONIC(name, syntax, str) \ ++ { \ ++ AVR32_MNEMONIC_##name, str, \ ++ &avr32_syntax_table[AVR32_SYNTAX_##syntax], \ ++ } ++#define FP_MNEMONIC(name, syntax, str) \ ++ NORMAL_MNEMONIC(name##_S, syntax##_S, str ".s"), \ ++ NORMAL_MNEMONIC(name##_D, syntax##_D, str ".d") ++ ++const struct avr32_mnemonic avr32_mnemonic_table[] = ++ { ++ NORMAL_MNEMONIC(ABS, ABS, "abs"), ++ NORMAL_MNEMONIC(ACALL, ACALL, "acall"), ++ NORMAL_MNEMONIC(ACR, ACR, "acr"), ++ NORMAL_MNEMONIC(ADC, ADC, "adc"), ++ NORMAL_MNEMONIC(ADD, ADD1, "add"), ++ NORMAL_MNEMONIC(ADDABS, ADDABS, "addabs"), ++ NORMAL_MNEMONIC(ADDHH_W, ADDHH_W, "addhh.w"), ++ NORMAL_MNEMONIC(AND, AND1, "and"), ++ NORMAL_MNEMONIC(ANDH, ANDH, "andh"), ++ NORMAL_MNEMONIC(ANDL, ANDL, "andl"), ++ NORMAL_MNEMONIC(ANDN, ANDN, "andn"), ++ NORMAL_MNEMONIC(ASR, ASR1, "asr"), ++ NORMAL_MNEMONIC(BFEXTS, BFEXTS, "bfexts"), ++ NORMAL_MNEMONIC(BFEXTU, BFEXTU, "bfextu"), ++ NORMAL_MNEMONIC(BFINS, BFINS, "bfins"), ++ NORMAL_MNEMONIC(BLD, BLD, "bld"), ++ NORMAL_MNEMONIC(BREQ, BREQ1, "breq"), ++ NORMAL_MNEMONIC(BRNE, BRNE1, "brne"), ++ NORMAL_MNEMONIC(BRCC, BRCC1, "brcc"), ++ NORMAL_MNEMONIC(BRCS, BRCS1, "brcs"), ++ NORMAL_MNEMONIC(BRGE, BRGE1, "brge"), ++ NORMAL_MNEMONIC(BRLT, BRLT1, "brlt"), ++ NORMAL_MNEMONIC(BRMI, BRMI1, "brmi"), ++ NORMAL_MNEMONIC(BRPL, BRPL1, "brpl"), ++ NORMAL_MNEMONIC(BRHS, BRHS1, "brhs"), ++ NORMAL_MNEMONIC(BRLO, BRLO1, "brlo"), ++ NORMAL_MNEMONIC(BRLS, BRLS, "brls"), ++ NORMAL_MNEMONIC(BRGT, BRGT, "brgt"), ++ NORMAL_MNEMONIC(BRLE, BRLE, "brle"), ++ NORMAL_MNEMONIC(BRHI, BRHI, "brhi"), ++ NORMAL_MNEMONIC(BRVS, BRVS, "brvs"), ++ NORMAL_MNEMONIC(BRVC, BRVC, "brvc"), ++ NORMAL_MNEMONIC(BRQS, BRQS, "brqs"), ++ NORMAL_MNEMONIC(BRAL, BRAL, "bral"), ++ NORMAL_MNEMONIC(BREAKPOINT, BREAKPOINT, "breakpoint"), ++ NORMAL_MNEMONIC(BREV, BREV, "brev"), ++ NORMAL_MNEMONIC(BST, BST, "bst"), ++ NORMAL_MNEMONIC(CACHE, CACHE, "cache"), ++ NORMAL_MNEMONIC(CASTS_B, CASTS_B, "casts.b"), ++ NORMAL_MNEMONIC(CASTS_H, CASTS_H, "casts.h"), ++ NORMAL_MNEMONIC(CASTU_B, CASTU_B, "castu.b"), ++ NORMAL_MNEMONIC(CASTU_H, CASTU_H, "castu.h"), ++ NORMAL_MNEMONIC(CBR, CBR, "cbr"), ++ NORMAL_MNEMONIC(CLZ, CLZ, "clz"), ++ NORMAL_MNEMONIC(COM, COM, "com"), ++ NORMAL_MNEMONIC(COP, COP, "cop"), ++ NORMAL_MNEMONIC(CP_B, CP_B, "cp.b"), ++ NORMAL_MNEMONIC(CP_H, CP_H, "cp.h"), ++ NORMAL_MNEMONIC(CP_W, CP_W1, "cp.w"), ++ NORMAL_MNEMONIC(CP, CP_W1, "cp"), ++ NORMAL_MNEMONIC(CPC, CPC1, "cpc"), ++ NORMAL_MNEMONIC(CSRF, CSRF, "csrf"), ++ NORMAL_MNEMONIC(CSRFCZ, CSRFCZ, "csrfcz"), ++ NORMAL_MNEMONIC(DIVS, DIVS, "divs"), ++ NORMAL_MNEMONIC(DIVU, DIVU, "divu"), ++ NORMAL_MNEMONIC(EOR, EOR1, "eor"), ++ NORMAL_MNEMONIC(EORL, EORL, "eorl"), ++ NORMAL_MNEMONIC(EORH, EORH, "eorh"), ++ NORMAL_MNEMONIC(FRS, FRS, "frs"), ++ NORMAL_MNEMONIC(ICALL, ICALL, "icall"), ++ NORMAL_MNEMONIC(INCJOSP, INCJOSP, "incjosp"), ++ NORMAL_MNEMONIC(LD_D, LD_D1, "ld.d"), ++ NORMAL_MNEMONIC(LD_SB, LD_SB2, "ld.sb"), ++ NORMAL_MNEMONIC(LD_UB, LD_UB1, "ld.ub"), ++ NORMAL_MNEMONIC(LD_SH, LD_SH1, "ld.sh"), ++ NORMAL_MNEMONIC(LD_UH, LD_UH1, "ld.uh"), ++ NORMAL_MNEMONIC(LD_W, LD_W1, "ld.w"), ++ NORMAL_MNEMONIC(LDC_D, LDC_D3, "ldc.d"), ++ NORMAL_MNEMONIC(LDC_W, LDC_W3, "ldc.w"), ++ NORMAL_MNEMONIC(LDC0_D, LDC0_D, "ldc0.d"), ++ NORMAL_MNEMONIC(LDC0_W, LDC0_W, "ldc0.w"), ++ NORMAL_MNEMONIC(LDCM_D, LDCM_D, "ldcm.d"), ++ NORMAL_MNEMONIC(LDCM_W, LDCM_W, "ldcm.w"), ++ NORMAL_MNEMONIC(LDDPC, LDDPC, "lddpc"), ++ NORMAL_MNEMONIC(LDDSP, LDDSP, "lddsp"), ++ NORMAL_MNEMONIC(LDINS_B, LDINS_B, "ldins.b"), ++ NORMAL_MNEMONIC(LDINS_H, LDINS_H, "ldins.h"), ++ NORMAL_MNEMONIC(LDM, LDM, "ldm"), ++ NORMAL_MNEMONIC(LDMTS, LDMTS, "ldmts"), ++ NORMAL_MNEMONIC(LDSWP_SH, LDSWP_SH, "ldswp.sh"), ++ NORMAL_MNEMONIC(LDSWP_UH, LDSWP_UH, "ldswp.uh"), ++ NORMAL_MNEMONIC(LDSWP_W, LDSWP_W, "ldswp.w"), ++ NORMAL_MNEMONIC(LSL, LSL1, "lsl"), ++ NORMAL_MNEMONIC(LSR, LSR1, "lsr"), ++ NORMAL_MNEMONIC(MAC, MAC, "mac"), ++ NORMAL_MNEMONIC(MACHH_D, MACHH_D, "machh.d"), ++ NORMAL_MNEMONIC(MACHH_W, MACHH_W, "machh.w"), ++ NORMAL_MNEMONIC(MACS_D, MACS_D, "macs.d"), ++ NORMAL_MNEMONIC(MACSATHH_W, MACSATHH_W, "macsathh.w"), ++ NORMAL_MNEMONIC(MACU_D, MACUD, "macu.d"), ++ NORMAL_MNEMONIC(MACWH_D, MACWH_D, "macwh.d"), ++ NORMAL_MNEMONIC(MAX, MAX, "max"), ++ NORMAL_MNEMONIC(MCALL, MCALL, "mcall"), ++ NORMAL_MNEMONIC(MFDR, MFDR, "mfdr"), ++ NORMAL_MNEMONIC(MFSR, MFSR, "mfsr"), ++ NORMAL_MNEMONIC(MIN, MIN, "min"), ++ NORMAL_MNEMONIC(MOV, MOV3, "mov"), ++ NORMAL_MNEMONIC(MOVEQ, MOVEQ1, "moveq"), ++ NORMAL_MNEMONIC(MOVNE, MOVNE1, "movne"), ++ NORMAL_MNEMONIC(MOVCC, MOVCC1, "movcc"), ++ NORMAL_MNEMONIC(MOVCS, MOVCS1, "movcs"), ++ NORMAL_MNEMONIC(MOVGE, MOVGE1, "movge"), ++ NORMAL_MNEMONIC(MOVLT, MOVLT1, "movlt"), ++ NORMAL_MNEMONIC(MOVMI, MOVMI1, "movmi"), ++ NORMAL_MNEMONIC(MOVPL, MOVPL1, "movpl"), ++ NORMAL_MNEMONIC(MOVLS, MOVLS1, "movls"), ++ NORMAL_MNEMONIC(MOVGT, MOVGT1, "movgt"), ++ NORMAL_MNEMONIC(MOVLE, MOVLE1, "movle"), ++ NORMAL_MNEMONIC(MOVHI, MOVHI1, "movhi"), ++ NORMAL_MNEMONIC(MOVVS, MOVVS1, "movvs"), ++ NORMAL_MNEMONIC(MOVVC, MOVVC1, "movvc"), ++ NORMAL_MNEMONIC(MOVQS, MOVQS1, "movqs"), ++ NORMAL_MNEMONIC(MOVAL, MOVAL1, "moval"), ++ NORMAL_MNEMONIC(MOVHS, MOVHS1, "movhs"), ++ NORMAL_MNEMONIC(MOVLO, MOVLO1, "movlo"), ++ NORMAL_MNEMONIC(MTDR, MTDR, "mtdr"), ++ NORMAL_MNEMONIC(MTSR, MTSR, "mtsr"), ++ NORMAL_MNEMONIC(MUL, MUL1, "mul"), ++ NORMAL_MNEMONIC(MULHH_W, MULHH_W, "mulhh.w"), ++ NORMAL_MNEMONIC(MULNHH_W, MULNHH_W, "mulnhh.w"), ++ NORMAL_MNEMONIC(MULNWH_D, MULNWH_D, "mulnwh.d"), ++ NORMAL_MNEMONIC(MULS_D, MULSD, "muls.d"), ++ NORMAL_MNEMONIC(MULSATHH_H, MULSATHH_H, "mulsathh.h"), ++ NORMAL_MNEMONIC(MULSATHH_W, MULSATHH_W, "mulsathh.w"), ++ NORMAL_MNEMONIC(MULSATRNDHH_H, MULSATRNDHH_H, "mulsatrndhh.h"), ++ NORMAL_MNEMONIC(MULSATRNDWH_W, MULSATRNDWH_W, "mulsatrndwh.w"), ++ NORMAL_MNEMONIC(MULSATWH_W, MULSATWH_W, "mulsatwh.w"), ++ NORMAL_MNEMONIC(MULU_D, MULU_D, "mulu.d"), ++ NORMAL_MNEMONIC(MULWH_D, MULWH_D, "mulwh.d"), ++ NORMAL_MNEMONIC(MUSFR, MUSFR, "musfr"), ++ NORMAL_MNEMONIC(MUSTR, MUSTR, "mustr"), ++ NORMAL_MNEMONIC(MVCR_D, MVCR_D, "mvcr.d"), ++ NORMAL_MNEMONIC(MVCR_W, MVCR_W, "mvcr.w"), ++ NORMAL_MNEMONIC(MVRC_D, MVRC_D, "mvrc.d"), ++ NORMAL_MNEMONIC(MVRC_W, MVRC_W, "mvrc.w"), ++ NORMAL_MNEMONIC(NEG, NEG, "neg"), ++ NORMAL_MNEMONIC(NOP, NOP, "nop"), ++ NORMAL_MNEMONIC(OR, OR1, "or"), ++ NORMAL_MNEMONIC(ORH, ORH, "orh"), ++ NORMAL_MNEMONIC(ORL, ORL, "orl"), ++ NORMAL_MNEMONIC(PABS_SB, PABS_SB, "pabs.sb"), ++ NORMAL_MNEMONIC(PABS_SH, PABS_SH, "pabs.sh"), ++ NORMAL_MNEMONIC(PACKSH_SB, PACKSH_SB, "packsh.sb"), ++ NORMAL_MNEMONIC(PACKSH_UB, PACKSH_UB, "packsh.ub"), ++ NORMAL_MNEMONIC(PACKW_SH, PACKW_SH, "packw.sh"), ++ NORMAL_MNEMONIC(PADD_B, PADD_B, "padd.b"), ++ NORMAL_MNEMONIC(PADD_H, PADD_H, "padd.h"), ++ NORMAL_MNEMONIC(PADDH_SH, PADDH_SH, "paddh.sh"), ++ NORMAL_MNEMONIC(PADDH_UB, PADDH_UB, "paddh.ub"), ++ NORMAL_MNEMONIC(PADDS_SB, PADDS_SB, "padds.sb"), ++ NORMAL_MNEMONIC(PADDS_SH, PADDS_SH, "padds.sh"), ++ NORMAL_MNEMONIC(PADDS_UB, PADDS_UB, "padds.ub"), ++ NORMAL_MNEMONIC(PADDS_UH, PADDS_UH, "padds.uh"), ++ NORMAL_MNEMONIC(PADDSUB_H, PADDSUB_H, "paddsub.h"), ++ NORMAL_MNEMONIC(PADDSUBH_SH, PADDSUBH_SH, "paddsubh.sh"), ++ NORMAL_MNEMONIC(PADDSUBS_SH, PADDSUBS_SH, "paddsubs.sh"), ++ NORMAL_MNEMONIC(PADDSUBS_UH, PADDSUBS_UH, "paddsubs.uh"), ++ NORMAL_MNEMONIC(PADDX_H, PADDX_H, "paddx.h"), ++ NORMAL_MNEMONIC(PADDXH_SH, PADDXH_SH, "paddxh.sh"), ++ NORMAL_MNEMONIC(PADDXS_SH, PADDXS_SH, "paddxs.sh"), ++ NORMAL_MNEMONIC(PADDXS_UH, PADDXS_UH, "paddxs.uh"), ++ NORMAL_MNEMONIC(PASR_B, PASR_B, "pasr.b"), ++ NORMAL_MNEMONIC(PASR_H, PASR_H, "pasr.h"), ++ NORMAL_MNEMONIC(PAVG_SH, PAVG_SH, "pavg.sh"), ++ NORMAL_MNEMONIC(PAVG_UB, PAVG_UB, "pavg.ub"), ++ NORMAL_MNEMONIC(PLSL_B, PLSL_B, "plsl.b"), ++ NORMAL_MNEMONIC(PLSL_H, PLSL_H, "plsl.h"), ++ NORMAL_MNEMONIC(PLSR_B, PLSR_B, "plsr.b"), ++ NORMAL_MNEMONIC(PLSR_H, PLSR_H, "plsr.h"), ++ NORMAL_MNEMONIC(PMAX_SH, PMAX_SH, "pmax.sh"), ++ NORMAL_MNEMONIC(PMAX_UB, PMAX_UB, "pmax.ub"), ++ NORMAL_MNEMONIC(PMIN_SH, PMIN_SH, "pmin.sh"), ++ NORMAL_MNEMONIC(PMIN_UB, PMIN_UB, "pmin.ub"), ++ NORMAL_MNEMONIC(POPJC, POPJC, "popjc"), ++ NORMAL_MNEMONIC(POPM, POPM, "popm"), ++ NORMAL_MNEMONIC(PREF, PREF, "pref"), ++ NORMAL_MNEMONIC(PSAD, PSAD, "psad"), ++ NORMAL_MNEMONIC(PSUB_B, PSUB_B, "psub.b"), ++ NORMAL_MNEMONIC(PSUB_H, PSUB_H, "psub.h"), ++ NORMAL_MNEMONIC(PSUBADD_H, PSUBADD_H, "psubadd.h"), ++ NORMAL_MNEMONIC(PSUBADDH_SH, PSUBADDH_SH, "psubaddh.sh"), ++ NORMAL_MNEMONIC(PSUBADDS_SH, PSUBADDS_SH, "psubadds.sh"), ++ NORMAL_MNEMONIC(PSUBADDS_UH, PSUBADDS_UH, "psubadds.uh"), ++ NORMAL_MNEMONIC(PSUBH_SH, PSUBH_SH, "psubh.sh"), ++ NORMAL_MNEMONIC(PSUBH_UB, PSUBH_UB, "psubh.ub"), ++ NORMAL_MNEMONIC(PSUBS_SB, PSUBS_SB, "psubs.sb"), ++ NORMAL_MNEMONIC(PSUBS_SH, PSUBS_SH, "psubs.sh"), ++ NORMAL_MNEMONIC(PSUBS_UB, PSUBS_UB, "psubs.ub"), ++ NORMAL_MNEMONIC(PSUBS_UH, PSUBS_UH, "psubs.uh"), ++ NORMAL_MNEMONIC(PSUBX_H, PSUBX_H, "psubx.h"), ++ NORMAL_MNEMONIC(PSUBXH_SH, PSUBXH_SH, "psubxh.sh"), ++ NORMAL_MNEMONIC(PSUBXS_SH, PSUBXS_SH, "psubxs.sh"), ++ NORMAL_MNEMONIC(PSUBXS_UH, PSUBXS_UH, "psubxs.uh"), ++ NORMAL_MNEMONIC(PUNPCKSB_H, PUNPCKSB_H, "punpcksb.h"), ++ NORMAL_MNEMONIC(PUNPCKUB_H, PUNPCKUB_H, "punpckub.h"), ++ NORMAL_MNEMONIC(PUSHJC, PUSHJC, "pushjc"), ++ NORMAL_MNEMONIC(PUSHM, PUSHM, "pushm"), ++ NORMAL_MNEMONIC(RCALL, RCALL1, "rcall"), ++ NORMAL_MNEMONIC(RETEQ, RETEQ, "reteq"), ++ NORMAL_MNEMONIC(RETNE, RETNE, "retne"), ++ NORMAL_MNEMONIC(RETCC, RETCC, "retcc"), ++ NORMAL_MNEMONIC(RETCS, RETCS, "retcs"), ++ NORMAL_MNEMONIC(RETGE, RETGE, "retge"), ++ NORMAL_MNEMONIC(RETLT, RETLT, "retlt"), ++ NORMAL_MNEMONIC(RETMI, RETMI, "retmi"), ++ NORMAL_MNEMONIC(RETPL, RETPL, "retpl"), ++ NORMAL_MNEMONIC(RETLS, RETLS, "retls"), ++ NORMAL_MNEMONIC(RETGT, RETGT, "retgt"), ++ NORMAL_MNEMONIC(RETLE, RETLE, "retle"), ++ NORMAL_MNEMONIC(RETHI, RETHI, "rethi"), ++ NORMAL_MNEMONIC(RETVS, RETVS, "retvs"), ++ NORMAL_MNEMONIC(RETVC, RETVC, "retvc"), ++ NORMAL_MNEMONIC(RETQS, RETQS, "retqs"), ++ NORMAL_MNEMONIC(RETAL, RETAL, "retal"), ++ NORMAL_MNEMONIC(RETHS, RETHS, "reths"), ++ NORMAL_MNEMONIC(RETLO, RETLO, "retlo"), ++ NORMAL_MNEMONIC(RET, RETAL, "ret"), ++ NORMAL_MNEMONIC(RETD, RETD, "retd"), ++ NORMAL_MNEMONIC(RETE, RETE, "rete"), ++ NORMAL_MNEMONIC(RETJ, RETJ, "retj"), ++ NORMAL_MNEMONIC(RETS, RETS, "rets"), ++ NORMAL_MNEMONIC(RJMP, RJMP, "rjmp"), ++ NORMAL_MNEMONIC(ROL, ROL, "rol"), ++ NORMAL_MNEMONIC(ROR, ROR, "ror"), ++ NORMAL_MNEMONIC(RSUB, RSUB1, "rsub"), ++ NORMAL_MNEMONIC(SATADD_H, SATADD_H, "satadd.h"), ++ NORMAL_MNEMONIC(SATADD_W, SATADD_W, "satadd.w"), ++ NORMAL_MNEMONIC(SATRNDS, SATRNDS, "satrnds"), ++ NORMAL_MNEMONIC(SATRNDU, SATRNDU, "satrndu"), ++ NORMAL_MNEMONIC(SATS, SATS, "sats"), ++ NORMAL_MNEMONIC(SATSUB_H, SATSUB_H, "satsub.h"), ++ NORMAL_MNEMONIC(SATSUB_W, SATSUB_W1, "satsub.w"), ++ NORMAL_MNEMONIC(SATU, SATU, "satu"), ++ NORMAL_MNEMONIC(SBC, SBC, "sbc"), ++ NORMAL_MNEMONIC(SBR, SBR, "sbr"), ++ NORMAL_MNEMONIC(SCALL, SCALL, "scall"), ++ NORMAL_MNEMONIC(SCR, SCR, "scr"), ++ NORMAL_MNEMONIC(SLEEP, SLEEP, "sleep"), ++ NORMAL_MNEMONIC(SREQ, SREQ, "sreq"), ++ NORMAL_MNEMONIC(SRNE, SRNE, "srne"), ++ NORMAL_MNEMONIC(SRCC, SRCC, "srcc"), ++ NORMAL_MNEMONIC(SRCS, SRCS, "srcs"), ++ NORMAL_MNEMONIC(SRGE, SRGE, "srge"), ++ NORMAL_MNEMONIC(SRLT, SRLT, "srlt"), ++ NORMAL_MNEMONIC(SRMI, SRMI, "srmi"), ++ NORMAL_MNEMONIC(SRPL, SRPL, "srpl"), ++ NORMAL_MNEMONIC(SRLS, SRLS, "srls"), ++ NORMAL_MNEMONIC(SRGT, SRGT, "srgt"), ++ NORMAL_MNEMONIC(SRLE, SRLE, "srle"), ++ NORMAL_MNEMONIC(SRHI, SRHI, "srhi"), ++ NORMAL_MNEMONIC(SRVS, SRVS, "srvs"), ++ NORMAL_MNEMONIC(SRVC, SRVC, "srvc"), ++ NORMAL_MNEMONIC(SRQS, SRQS, "srqs"), ++ NORMAL_MNEMONIC(SRAL, SRAL, "sral"), ++ NORMAL_MNEMONIC(SRHS, SRHS, "srhs"), ++ NORMAL_MNEMONIC(SRLO, SRLO, "srlo"), ++ NORMAL_MNEMONIC(SSRF, SSRF, "ssrf"), ++ NORMAL_MNEMONIC(ST_B, ST_B1, "st.b"), ++ NORMAL_MNEMONIC(ST_D, ST_D1, "st.d"), ++ NORMAL_MNEMONIC(ST_H, ST_H1, "st.h"), ++ NORMAL_MNEMONIC(ST_W, ST_W1, "st.w"), ++ NORMAL_MNEMONIC(STC_D, STC_D3, "stc.d"), ++ NORMAL_MNEMONIC(STC_W, STC_W3, "stc.w"), ++ NORMAL_MNEMONIC(STC0_D, STC0_D, "stc0.d"), ++ NORMAL_MNEMONIC(STC0_W, STC0_W, "stc0.w"), ++ NORMAL_MNEMONIC(STCM_D, STCM_D, "stcm.d"), ++ NORMAL_MNEMONIC(STCM_W, STCM_W, "stcm.w"), ++ NORMAL_MNEMONIC(STCOND, STCOND, "stcond"), ++ NORMAL_MNEMONIC(STDSP, STDSP, "stdsp"), ++ NORMAL_MNEMONIC(STHH_W, STHH_W2, "sthh.w"), ++ NORMAL_MNEMONIC(STM, STM, "stm"), ++ NORMAL_MNEMONIC(STMTS, STMTS, "stmts"), ++ NORMAL_MNEMONIC(STSWP_H, STSWP_H, "stswp.h"), ++ NORMAL_MNEMONIC(STSWP_W, STSWP_W, "stswp.w"), ++ NORMAL_MNEMONIC(SUB, SUB1, "sub"), ++ NORMAL_MNEMONIC(SUBEQ, SUBEQ, "subeq"), ++ NORMAL_MNEMONIC(SUBNE, SUBNE, "subne"), ++ NORMAL_MNEMONIC(SUBCC, SUBCC, "subcc"), ++ NORMAL_MNEMONIC(SUBCS, SUBCS, "subcs"), ++ NORMAL_MNEMONIC(SUBGE, SUBGE, "subge"), ++ NORMAL_MNEMONIC(SUBLT, SUBLT, "sublt"), ++ NORMAL_MNEMONIC(SUBMI, SUBMI, "submi"), ++ NORMAL_MNEMONIC(SUBPL, SUBPL, "subpl"), ++ NORMAL_MNEMONIC(SUBLS, SUBLS, "subls"), ++ NORMAL_MNEMONIC(SUBGT, SUBGT, "subgt"), ++ NORMAL_MNEMONIC(SUBLE, SUBLE, "suble"), ++ NORMAL_MNEMONIC(SUBHI, SUBHI, "subhi"), ++ NORMAL_MNEMONIC(SUBVS, SUBVS, "subvs"), ++ NORMAL_MNEMONIC(SUBVC, SUBVC, "subvc"), ++ NORMAL_MNEMONIC(SUBQS, SUBQS, "subqs"), ++ NORMAL_MNEMONIC(SUBAL, SUBAL, "subal"), ++ NORMAL_MNEMONIC(SUBHS, SUBHS, "subhs"), ++ NORMAL_MNEMONIC(SUBLO, SUBLO, "sublo"), ++ NORMAL_MNEMONIC(SUBFEQ, SUBFEQ, "subfeq"), ++ NORMAL_MNEMONIC(SUBFNE, SUBFNE, "subfne"), ++ NORMAL_MNEMONIC(SUBFCC, SUBFCC, "subfcc"), ++ NORMAL_MNEMONIC(SUBFCS, SUBFCS, "subfcs"), ++ NORMAL_MNEMONIC(SUBFGE, SUBFGE, "subfge"), ++ NORMAL_MNEMONIC(SUBFLT, SUBFLT, "subflt"), ++ NORMAL_MNEMONIC(SUBFMI, SUBFMI, "subfmi"), ++ NORMAL_MNEMONIC(SUBFPL, SUBFPL, "subfpl"), ++ NORMAL_MNEMONIC(SUBFLS, SUBFLS, "subfls"), ++ NORMAL_MNEMONIC(SUBFGT, SUBFGT, "subfgt"), ++ NORMAL_MNEMONIC(SUBFLE, SUBFLE, "subfle"), ++ NORMAL_MNEMONIC(SUBFHI, SUBFHI, "subfhi"), ++ NORMAL_MNEMONIC(SUBFVS, SUBFVS, "subfvs"), ++ NORMAL_MNEMONIC(SUBFVC, SUBFVC, "subfvc"), ++ NORMAL_MNEMONIC(SUBFQS, SUBFQS, "subfqs"), ++ NORMAL_MNEMONIC(SUBFAL, SUBFAL, "subfal"), ++ NORMAL_MNEMONIC(SUBFHS, SUBFHS, "subfhs"), ++ NORMAL_MNEMONIC(SUBFLO, SUBFLO, "subflo"), ++ NORMAL_MNEMONIC(SUBHH_W, SUBHH_W, "subhh.w"), ++ NORMAL_MNEMONIC(SWAP_B, SWAP_B, "swap.b"), ++ NORMAL_MNEMONIC(SWAP_BH, SWAP_BH, "swap.bh"), ++ NORMAL_MNEMONIC(SWAP_H, SWAP_H, "swap.h"), ++ NORMAL_MNEMONIC(SYNC, SYNC, "sync"), ++ NORMAL_MNEMONIC(TLBR, TLBR, "tlbr"), ++ NORMAL_MNEMONIC(TLBS, TLBS, "tlbs"), ++ NORMAL_MNEMONIC(TLBW, TLBW, "tlbw"), ++ NORMAL_MNEMONIC(TNBZ, TNBZ, "tnbz"), ++ NORMAL_MNEMONIC(TST, TST, "tst"), ++ NORMAL_MNEMONIC(XCHG, XCHG, "xchg"), ++ NORMAL_MNEMONIC(MEMC, MEMC, "memc"), ++ NORMAL_MNEMONIC(MEMS, MEMS, "mems"), ++ NORMAL_MNEMONIC(MEMT, MEMT, "memt"), ++ FP_MNEMONIC(FADD, FADD, "fadd"), ++ FP_MNEMONIC(FSUB, FSUB, "fsub"), ++ FP_MNEMONIC(FMAC, FMAC, "fmac"), ++ FP_MNEMONIC(FNMAC, FNMAC, "fnmac"), ++ FP_MNEMONIC(FMSC, FMSC, "fmsc"), ++ FP_MNEMONIC(FNMSC, FNMSC, "fnmsc"), ++ FP_MNEMONIC(FMUL, FMUL, "fmul"), ++ FP_MNEMONIC(FNMUL, FNMUL, "fnmul"), ++ FP_MNEMONIC(FNEG, FNEG, "fneg"), ++ FP_MNEMONIC(FABS, FABS, "fabs"), ++ FP_MNEMONIC(FCMP, FCMP, "fcmp"), ++ FP_MNEMONIC(FMOV, FMOV1, "fmov"), ++ NORMAL_MNEMONIC(FCASTS_D, FCASTS_D, "fcasts.d"), ++ NORMAL_MNEMONIC(FCASTD_S, FCASTD_S, "fcastd.s"), ++ NORMAL_MNEMONIC(LDA_W, LDA_W, "lda.w"), ++ NORMAL_MNEMONIC(CALL, CALL, "call"), ++ NORMAL_MNEMONIC(PICOSVMAC, PICOSVMAC0, "picosvmac"), ++ NORMAL_MNEMONIC(PICOSVMUL, PICOSVMUL0, "picosvmul"), ++ NORMAL_MNEMONIC(PICOVMAC, PICOVMAC0, "picovmac"), ++ NORMAL_MNEMONIC(PICOVMUL, PICOVMUL0, "picovmul"), ++ NORMAL_MNEMONIC(PICOLD_D, PICOLD_D2, "picold.d"), ++ NORMAL_MNEMONIC(PICOLD_W, PICOLD_W2, "picold.w"), ++ NORMAL_MNEMONIC(PICOLDM_D, PICOLDM_D, "picoldm.d"), ++ NORMAL_MNEMONIC(PICOLDM_W, PICOLDM_W, "picoldm.w"), ++ NORMAL_MNEMONIC(PICOMV_D, PICOMV_D1, "picomv.d"), ++ NORMAL_MNEMONIC(PICOMV_W, PICOMV_W1, "picomv.w"), ++ NORMAL_MNEMONIC(PICOST_D, PICOST_D2, "picost.d"), ++ NORMAL_MNEMONIC(PICOST_W, PICOST_W2, "picost.w"), ++ NORMAL_MNEMONIC(PICOSTM_D, PICOSTM_D, "picostm.d"), ++ NORMAL_MNEMONIC(PICOSTM_W, PICOSTM_W, "picostm.w"), ++ }; ++#undef NORMAL_MNEMONIC ++#undef ALIAS_MNEMONIC ++#undef FP_MNEMONIC +diff -Nrup binutils-2.17/opcodes/avr32-opc.h binutils-2.17.atmel.1.3.0/opcodes/avr32-opc.h +--- binutils-2.17/opcodes/avr32-opc.h 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-opc.h 2007-03-26 10:20:34.000000000 +0200 +@@ -0,0 +1,1655 @@ ++/* Opcode tables for AVR32. ++ Copyright 2005, 2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of libopcodes. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#include "bfd.h" ++ ++#define AVR32_MAX_OPERANDS 8 ++#define AVR32_MAX_FIELDS 8 ++ ++#define AVR32_V1 (1 << 1) ++#define AVR32_SIMD (1 << 2) ++#define AVR32_DSP (1 << 3) ++#define AVR32_RMW (1 << 4) ++#define AVR32_FP (1 << 16) ++#define AVR32_PICO (1 << 17) ++ ++/* Registers we commonly refer to */ ++#define AVR32_REG_R12 12 ++#define AVR32_REG_SP 13 ++#define AVR32_REG_LR 14 ++#define AVR32_REG_PC 15 ++ ++struct avr32_ifield ++{ ++ int id; ++ unsigned short bitsize; ++ unsigned short shift; ++ unsigned long mask; ++ ++ /* If the value doesn't fit, it will be truncated with no warning */ ++ void (*insert)(const struct avr32_ifield *, void *, unsigned long); ++ void (*extract)(const struct avr32_ifield *, void *, unsigned long *); ++}; ++ ++struct avr32_opcode ++{ ++ int id; ++ int size; ++ unsigned long value; ++ unsigned long mask; ++ const struct avr32_syntax *syntax; ++ bfd_reloc_code_real_type reloc_type; ++ unsigned int nr_fields; ++ /* if relaxable, which field is variable, otherwise -1 */ ++ int var_field; ++ const struct avr32_ifield *fields[AVR32_MAX_FIELDS]; ++}; ++ ++struct avr32_alias ++{ ++ int id; ++ const struct avr32_opcode *opc; ++ struct { ++ int is_opindex; ++ unsigned long value; ++ } operand_map[AVR32_MAX_OPERANDS]; ++}; ++ ++struct avr32_syntax ++{ ++ int id; ++ unsigned long isa_flags; ++ const struct avr32_mnemonic *mnemonic; ++ int type; ++ union { ++ const struct avr32_opcode *opc; ++ const struct avr32_alias *alias; ++ } u; ++ const struct avr32_syntax *next; ++ /* negative means "vararg" */ ++ int nr_operands; ++ int operand[AVR32_MAX_OPERANDS]; ++}; ++ ++#if 0 ++#define AVR32_ALIAS_MAKE_CONST(val) ((val) | 0x80000000UL) ++#define AVR32_ALIAS_IS_CONST(mapval) (((mapval) & 0x80000000UL) != 0) ++#define AVR32_ALIAS_GET_CONST(mapval) ((mapval) & ~0x80000000UL) ++#endif ++ ++struct avr32_mnemonic ++{ ++ int id; ++ const char *name; ++ const struct avr32_syntax *syntax; ++}; ++ ++extern const struct avr32_ifield avr32_ifield_table[]; ++extern struct avr32_opcode avr32_opc_table[]; ++extern const struct avr32_syntax avr32_syntax_table[]; ++extern const struct avr32_alias avr32_alias_table[]; ++extern const struct avr32_mnemonic avr32_mnemonic_table[]; ++ ++extern void avr32_insert_simple(const struct avr32_ifield *field, ++ void *buf, unsigned long value); ++extern void avr32_insert_bit5c(const struct avr32_ifield *field, ++ void *buf, unsigned long value); ++extern void avr32_insert_k10(const struct avr32_ifield *field, ++ void *buf, unsigned long value); ++extern void avr32_insert_k21(const struct avr32_ifield *field, ++ void *buf, unsigned long value); ++extern void avr32_insert_cpop(const struct avr32_ifield *field, ++ void *buf, unsigned long value); ++extern void avr32_insert_k12cp(const struct avr32_ifield *field, ++ void *buf, unsigned long value); ++ ++extern void avr32_extract_simple(const struct avr32_ifield *field, ++ void *buf, unsigned long *value); ++extern void avr32_extract_bit5c(const struct avr32_ifield *field, ++ void *buf, unsigned long *value); ++extern void avr32_extract_k10(const struct avr32_ifield *field, ++ void *buf, unsigned long *value); ++extern void avr32_extract_k21(const struct avr32_ifield *field, ++ void *buf, unsigned long *value); ++extern void avr32_extract_cpop(const struct avr32_ifield *field, ++ void *buf, unsigned long *value); ++extern void avr32_extract_k12cp(const struct avr32_ifield *field, ++ void *buf, unsigned long *value); ++ ++enum avr32_operand_type ++{ ++ AVR32_OPERAND_INTREG, /* just a register */ ++ AVR32_OPERAND_INTREG_PREDEC, /* register with pre-decrement */ ++ AVR32_OPERAND_INTREG_POSTINC, /* register with post-increment */ ++ AVR32_OPERAND_INTREG_LSL, /* register with left shift */ ++ AVR32_OPERAND_INTREG_LSR, /* register with right shift */ ++ AVR32_OPERAND_INTREG_BSEL, /* register with byte selector */ ++ AVR32_OPERAND_INTREG_HSEL, /* register with halfword selector */ ++ AVR32_OPERAND_INTREG_SDISP, /* Rp[signed disp] */ ++ AVR32_OPERAND_INTREG_SDISP_H, /* Rp[signed hword-aligned disp] */ ++ AVR32_OPERAND_INTREG_SDISP_W, /* Rp[signed word-aligned disp] */ ++ AVR32_OPERAND_INTREG_UDISP, /* Rp[unsigned disp] */ ++ AVR32_OPERAND_INTREG_UDISP_H, /* Rp[unsigned hword-aligned disp] */ ++ AVR32_OPERAND_INTREG_UDISP_W, /* Rp[unsigned word-aligned disp] */ ++ AVR32_OPERAND_INTREG_INDEX, /* Rp[Ri << sa] */ ++ AVR32_OPERAND_INTREG_XINDEX, /* Rp[Ri:bytesel << 2] */ ++ AVR32_OPERAND_DWREG, /* Even-numbered register */ ++ AVR32_OPERAND_PC_UDISP_W, /* PC[unsigned word-aligned disp] or label */ ++ AVR32_OPERAND_SP, /* Just SP */ ++ AVR32_OPERAND_SP_UDISP_W, /* SP[unsigned word-aligned disp] */ ++ AVR32_OPERAND_CPNO, ++ AVR32_OPERAND_CPREG, ++ AVR32_OPERAND_CPREG_D, ++ AVR32_OPERAND_UNSIGNED_CONST, ++ AVR32_OPERAND_UNSIGNED_CONST_W, ++ AVR32_OPERAND_SIGNED_CONST, ++ AVR32_OPERAND_SIGNED_CONST_W, ++ AVR32_OPERAND_JMPLABEL, ++ AVR32_OPERAND_UNSIGNED_NUMBER, ++ AVR32_OPERAND_UNSIGNED_NUMBER_W, ++ AVR32_OPERAND_REGLIST8, ++ AVR32_OPERAND_REGLIST9, ++ AVR32_OPERAND_REGLIST16, ++ AVR32_OPERAND_REGLIST_LDM, ++ AVR32_OPERAND_REGLIST_CP8, ++ AVR32_OPERAND_REGLIST_CPD8, ++ AVR32_OPERAND_RETVAL, ++ AVR32_OPERAND_MCALL, ++ AVR32_OPERAND_JOSPINC, ++ AVR32_OPERAND_COH, ++ AVR32_OPERAND_FPREG_S, ++ AVR32_OPERAND_FPREG_D, ++ AVR32_OPERAND_PICO_REG_W, ++ AVR32_OPERAND_PICO_REG_D, ++ AVR32_OPERAND_PICO_REGLIST_W, ++ AVR32_OPERAND_PICO_REGLIST_D, ++ AVR32_OPERAND_PICO_IN, ++ AVR32_OPERAND_PICO_OUT0, ++ AVR32_OPERAND_PICO_OUT1, ++ AVR32_OPERAND_PICO_OUT2, ++ AVR32_OPERAND_PICO_OUT3, ++ AVR32_OPERAND__END_ ++}; ++#define AVR32_OPERAND_UNKNOWN AVR32_OPERAND__END_ ++#define AVR32_NR_OPERANDS AVR32_OPERAND__END_ ++ ++enum avr32_ifield_type ++{ ++ AVR32_IFIELD_RX, ++ AVR32_IFIELD_RY, ++ AVR32_IFIELD_COND4C, ++ AVR32_IFIELD_K8C, ++ AVR32_IFIELD_K7C, ++ AVR32_IFIELD_K5C, ++ AVR32_IFIELD_K3, ++ AVR32_IFIELD_RY_DW, ++ AVR32_IFIELD_COND4E, ++ AVR32_IFIELD_K8E, ++ AVR32_IFIELD_BIT5C, ++ AVR32_IFIELD_COND3, ++ AVR32_IFIELD_K10, ++ AVR32_IFIELD_POPM, ++ AVR32_IFIELD_K2, ++ AVR32_IFIELD_RD_E, ++ AVR32_IFIELD_RD_DW, ++ AVR32_IFIELD_X, ++ AVR32_IFIELD_Y, ++ AVR32_IFIELD_X2, ++ AVR32_IFIELD_Y2, ++ AVR32_IFIELD_K5E, ++ AVR32_IFIELD_PART2, ++ AVR32_IFIELD_PART1, ++ AVR32_IFIELD_K16, ++ AVR32_IFIELD_CACHEOP, ++ AVR32_IFIELD_K11, ++ AVR32_IFIELD_K21, ++ AVR32_IFIELD_CPOP, ++ AVR32_IFIELD_CPNO, ++ AVR32_IFIELD_CRD_RI, ++ AVR32_IFIELD_CRX, ++ AVR32_IFIELD_CRY, ++ AVR32_IFIELD_K7E, ++ AVR32_IFIELD_CRD_DW, ++ AVR32_IFIELD_PART1_K12, ++ AVR32_IFIELD_PART2_K12, ++ AVR32_IFIELD_K12, ++ AVR32_IFIELD_S5, ++ AVR32_IFIELD_K5E2, ++ AVR32_IFIELD_K4, ++ AVR32_IFIELD_COND4E2, ++ AVR32_IFIELD_K8E2, ++ AVR32_IFIELD_K6, ++ AVR32_IFIELD_MEM15, ++ AVR32_IFIELD_MEMB5, ++ AVR32_IFIELD_W, ++ AVR32_IFIELD_CM_HL, ++ AVR32_IFIELD_K12CP, ++ AVR32_IFIELD__END_, ++}; ++#define AVR32_NR_IFIELDS AVR32_IFIELD__END_ ++ ++enum avr32_opc_type ++{ ++ AVR32_OPC_ABS, ++ AVR32_OPC_ACALL, ++ AVR32_OPC_ACR, ++ AVR32_OPC_ADC, ++ AVR32_OPC_ADD1, ++ AVR32_OPC_ADD2, ++ AVR32_OPC_ADDABS, ++ AVR32_OPC_ADDHH_W, ++ AVR32_OPC_AND1, ++ AVR32_OPC_AND2, ++ AVR32_OPC_AND3, ++ AVR32_OPC_ANDH, ++ AVR32_OPC_ANDH_COH, ++ AVR32_OPC_ANDL, ++ AVR32_OPC_ANDL_COH, ++ AVR32_OPC_ANDN, ++ AVR32_OPC_ASR1, ++ AVR32_OPC_ASR3, ++ AVR32_OPC_ASR2, ++ AVR32_OPC_BLD, ++ AVR32_OPC_BREQ1, ++ AVR32_OPC_BRNE1, ++ AVR32_OPC_BRCC1, ++ AVR32_OPC_BRCS1, ++ AVR32_OPC_BRGE1, ++ AVR32_OPC_BRLT1, ++ AVR32_OPC_BRMI1, ++ AVR32_OPC_BRPL1, ++ AVR32_OPC_BREQ2, ++ AVR32_OPC_BRNE2, ++ AVR32_OPC_BRCC2, ++ AVR32_OPC_BRCS2, ++ AVR32_OPC_BRGE2, ++ AVR32_OPC_BRLT2, ++ AVR32_OPC_BRMI2, ++ AVR32_OPC_BRPL2, ++ AVR32_OPC_BRLS, ++ AVR32_OPC_BRGT, ++ AVR32_OPC_BRLE, ++ AVR32_OPC_BRHI, ++ AVR32_OPC_BRVS, ++ AVR32_OPC_BRVC, ++ AVR32_OPC_BRQS, ++ AVR32_OPC_BRAL, ++ AVR32_OPC_BREAKPOINT, ++ AVR32_OPC_BREV, ++ AVR32_OPC_BST, ++ AVR32_OPC_CACHE, ++ AVR32_OPC_CASTS_B, ++ AVR32_OPC_CASTS_H, ++ AVR32_OPC_CASTU_B, ++ AVR32_OPC_CASTU_H, ++ AVR32_OPC_CBR, ++ AVR32_OPC_CLZ, ++ AVR32_OPC_COM, ++ AVR32_OPC_COP, ++ AVR32_OPC_CP_B, ++ AVR32_OPC_CP_H, ++ AVR32_OPC_CP_W1, ++ AVR32_OPC_CP_W2, ++ AVR32_OPC_CP_W3, ++ AVR32_OPC_CPC1, ++ AVR32_OPC_CPC2, ++ AVR32_OPC_CSRF, ++ AVR32_OPC_CSRFCZ, ++ AVR32_OPC_DIVS, ++ AVR32_OPC_DIVU, ++ AVR32_OPC_EOR1, ++ AVR32_OPC_EOR2, ++ AVR32_OPC_EOR3, ++ AVR32_OPC_EORL, ++ AVR32_OPC_EORH, ++ AVR32_OPC_FRS, ++ AVR32_OPC_ICALL, ++ AVR32_OPC_INCJOSP, ++ AVR32_OPC_LD_D1, ++ AVR32_OPC_LD_D2, ++ AVR32_OPC_LD_D3, ++ AVR32_OPC_LD_D5, ++ AVR32_OPC_LD_D4, ++ AVR32_OPC_LD_SB2, ++ AVR32_OPC_LD_SB1, ++ AVR32_OPC_LD_UB1, ++ AVR32_OPC_LD_UB2, ++ AVR32_OPC_LD_UB5, ++ AVR32_OPC_LD_UB3, ++ AVR32_OPC_LD_UB4, ++ AVR32_OPC_LD_SH1, ++ AVR32_OPC_LD_SH2, ++ AVR32_OPC_LD_SH5, ++ AVR32_OPC_LD_SH3, ++ AVR32_OPC_LD_SH4, ++ AVR32_OPC_LD_UH1, ++ AVR32_OPC_LD_UH2, ++ AVR32_OPC_LD_UH5, ++ AVR32_OPC_LD_UH3, ++ AVR32_OPC_LD_UH4, ++ AVR32_OPC_LD_W1, ++ AVR32_OPC_LD_W2, ++ AVR32_OPC_LD_W5, ++ AVR32_OPC_LD_W6, ++ AVR32_OPC_LD_W3, ++ AVR32_OPC_LD_W4, ++ AVR32_OPC_LDC_D1, ++ AVR32_OPC_LDC_D2, ++ AVR32_OPC_LDC_D3, ++ AVR32_OPC_LDC_W1, ++ AVR32_OPC_LDC_W2, ++ AVR32_OPC_LDC_W3, ++ AVR32_OPC_LDC0_D, ++ AVR32_OPC_LDC0_W, ++ AVR32_OPC_LDCM_D, ++ AVR32_OPC_LDCM_D_PU, ++ AVR32_OPC_LDCM_W, ++ AVR32_OPC_LDCM_W_PU, ++ AVR32_OPC_LDDPC, ++ AVR32_OPC_LDDPC_EXT, ++ AVR32_OPC_LDDSP, ++ AVR32_OPC_LDINS_B, ++ AVR32_OPC_LDINS_H, ++ AVR32_OPC_LDM, ++ AVR32_OPC_LDMTS, ++ AVR32_OPC_LDMTS_PU, ++ AVR32_OPC_LDSWP_SH, ++ AVR32_OPC_LDSWP_UH, ++ AVR32_OPC_LDSWP_W, ++ AVR32_OPC_LSL1, ++ AVR32_OPC_LSL3, ++ AVR32_OPC_LSL2, ++ AVR32_OPC_LSR1, ++ AVR32_OPC_LSR3, ++ AVR32_OPC_LSR2, ++ AVR32_OPC_MAC, ++ AVR32_OPC_MACHH_D, ++ AVR32_OPC_MACHH_W, ++ AVR32_OPC_MACS_D, ++ AVR32_OPC_MACSATHH_W, ++ AVR32_OPC_MACUD, ++ AVR32_OPC_MACWH_D, ++ AVR32_OPC_MAX, ++ AVR32_OPC_MCALL, ++ AVR32_OPC_MFDR, ++ AVR32_OPC_MFSR, ++ AVR32_OPC_MIN, ++ AVR32_OPC_MOV3, ++ AVR32_OPC_MOV1, ++ AVR32_OPC_MOV2, ++ AVR32_OPC_MOVEQ1, ++ AVR32_OPC_MOVNE1, ++ AVR32_OPC_MOVCC1, ++ AVR32_OPC_MOVCS1, ++ AVR32_OPC_MOVGE1, ++ AVR32_OPC_MOVLT1, ++ AVR32_OPC_MOVMI1, ++ AVR32_OPC_MOVPL1, ++ AVR32_OPC_MOVLS1, ++ AVR32_OPC_MOVGT1, ++ AVR32_OPC_MOVLE1, ++ AVR32_OPC_MOVHI1, ++ AVR32_OPC_MOVVS1, ++ AVR32_OPC_MOVVC1, ++ AVR32_OPC_MOVQS1, ++ AVR32_OPC_MOVAL1, ++ AVR32_OPC_MOVEQ2, ++ AVR32_OPC_MOVNE2, ++ AVR32_OPC_MOVCC2, ++ AVR32_OPC_MOVCS2, ++ AVR32_OPC_MOVGE2, ++ AVR32_OPC_MOVLT2, ++ AVR32_OPC_MOVMI2, ++ AVR32_OPC_MOVPL2, ++ AVR32_OPC_MOVLS2, ++ AVR32_OPC_MOVGT2, ++ AVR32_OPC_MOVLE2, ++ AVR32_OPC_MOVHI2, ++ AVR32_OPC_MOVVS2, ++ AVR32_OPC_MOVVC2, ++ AVR32_OPC_MOVQS2, ++ AVR32_OPC_MOVAL2, ++ AVR32_OPC_MTDR, ++ AVR32_OPC_MTSR, ++ AVR32_OPC_MUL1, ++ AVR32_OPC_MUL2, ++ AVR32_OPC_MUL3, ++ AVR32_OPC_MULHH_W, ++ AVR32_OPC_MULNHH_W, ++ AVR32_OPC_MULNWH_D, ++ AVR32_OPC_MULSD, ++ AVR32_OPC_MULSATHH_H, ++ AVR32_OPC_MULSATHH_W, ++ AVR32_OPC_MULSATRNDHH_H, ++ AVR32_OPC_MULSATRNDWH_W, ++ AVR32_OPC_MULSATWH_W, ++ AVR32_OPC_MULU_D, ++ AVR32_OPC_MULWH_D, ++ AVR32_OPC_MUSFR, ++ AVR32_OPC_MUSTR, ++ AVR32_OPC_MVCR_D, ++ AVR32_OPC_MVCR_W, ++ AVR32_OPC_MVRC_D, ++ AVR32_OPC_MVRC_W, ++ AVR32_OPC_NEG, ++ AVR32_OPC_NOP, ++ AVR32_OPC_OR1, ++ AVR32_OPC_OR2, ++ AVR32_OPC_OR3, ++ AVR32_OPC_ORH, ++ AVR32_OPC_ORL, ++ AVR32_OPC_PABS_SB, ++ AVR32_OPC_PABS_SH, ++ AVR32_OPC_PACKSH_SB, ++ AVR32_OPC_PACKSH_UB, ++ AVR32_OPC_PACKW_SH, ++ AVR32_OPC_PADD_B, ++ AVR32_OPC_PADD_H, ++ AVR32_OPC_PADDH_SH, ++ AVR32_OPC_PADDH_UB, ++ AVR32_OPC_PADDS_SB, ++ AVR32_OPC_PADDS_SH, ++ AVR32_OPC_PADDS_UB, ++ AVR32_OPC_PADDS_UH, ++ AVR32_OPC_PADDSUB_H, ++ AVR32_OPC_PADDSUBH_SH, ++ AVR32_OPC_PADDSUBS_SH, ++ AVR32_OPC_PADDSUBS_UH, ++ AVR32_OPC_PADDX_H, ++ AVR32_OPC_PADDXH_SH, ++ AVR32_OPC_PADDXS_SH, ++ AVR32_OPC_PADDXS_UH, ++ AVR32_OPC_PASR_B, ++ AVR32_OPC_PASR_H, ++ AVR32_OPC_PAVG_SH, ++ AVR32_OPC_PAVG_UB, ++ AVR32_OPC_PLSL_B, ++ AVR32_OPC_PLSL_H, ++ AVR32_OPC_PLSR_B, ++ AVR32_OPC_PLSR_H, ++ AVR32_OPC_PMAX_SH, ++ AVR32_OPC_PMAX_UB, ++ AVR32_OPC_PMIN_SH, ++ AVR32_OPC_PMIN_UB, ++ AVR32_OPC_POPJC, ++ AVR32_OPC_POPM, ++ AVR32_OPC_POPM_E, ++ AVR32_OPC_PREF, ++ AVR32_OPC_PSAD, ++ AVR32_OPC_PSUB_B, ++ AVR32_OPC_PSUB_H, ++ AVR32_OPC_PSUBADD_H, ++ AVR32_OPC_PSUBADDH_SH, ++ AVR32_OPC_PSUBADDS_SH, ++ AVR32_OPC_PSUBADDS_UH, ++ AVR32_OPC_PSUBH_SH, ++ AVR32_OPC_PSUBH_UB, ++ AVR32_OPC_PSUBS_SB, ++ AVR32_OPC_PSUBS_SH, ++ AVR32_OPC_PSUBS_UB, ++ AVR32_OPC_PSUBS_UH, ++ AVR32_OPC_PSUBX_H, ++ AVR32_OPC_PSUBXH_SH, ++ AVR32_OPC_PSUBXS_SH, ++ AVR32_OPC_PSUBXS_UH, ++ AVR32_OPC_PUNPCKSB_H, ++ AVR32_OPC_PUNPCKUB_H, ++ AVR32_OPC_PUSHJC, ++ AVR32_OPC_PUSHM, ++ AVR32_OPC_PUSHM_E, ++ AVR32_OPC_RCALL1, ++ AVR32_OPC_RCALL2, ++ AVR32_OPC_RETEQ, ++ AVR32_OPC_RETNE, ++ AVR32_OPC_RETCC, ++ AVR32_OPC_RETCS, ++ AVR32_OPC_RETGE, ++ AVR32_OPC_RETLT, ++ AVR32_OPC_RETMI, ++ AVR32_OPC_RETPL, ++ AVR32_OPC_RETLS, ++ AVR32_OPC_RETGT, ++ AVR32_OPC_RETLE, ++ AVR32_OPC_RETHI, ++ AVR32_OPC_RETVS, ++ AVR32_OPC_RETVC, ++ AVR32_OPC_RETQS, ++ AVR32_OPC_RETAL, ++ AVR32_OPC_RETD, ++ AVR32_OPC_RETE, ++ AVR32_OPC_RETJ, ++ AVR32_OPC_RETS, ++ AVR32_OPC_RJMP, ++ AVR32_OPC_ROL, ++ AVR32_OPC_ROR, ++ AVR32_OPC_RSUB1, ++ AVR32_OPC_RSUB2, ++ AVR32_OPC_SATADD_H, ++ AVR32_OPC_SATADD_W, ++ AVR32_OPC_SATRNDS, ++ AVR32_OPC_SATRNDU, ++ AVR32_OPC_SATS, ++ AVR32_OPC_SATSUB_H, ++ AVR32_OPC_SATSUB_W1, ++ AVR32_OPC_SATSUB_W2, ++ AVR32_OPC_SATU, ++ AVR32_OPC_SBC, ++ AVR32_OPC_SBR, ++ AVR32_OPC_SCALL, ++ AVR32_OPC_SCR, ++ AVR32_OPC_SLEEP, ++ AVR32_OPC_SREQ, ++ AVR32_OPC_SRNE, ++ AVR32_OPC_SRCC, ++ AVR32_OPC_SRCS, ++ AVR32_OPC_SRGE, ++ AVR32_OPC_SRLT, ++ AVR32_OPC_SRMI, ++ AVR32_OPC_SRPL, ++ AVR32_OPC_SRLS, ++ AVR32_OPC_SRGT, ++ AVR32_OPC_SRLE, ++ AVR32_OPC_SRHI, ++ AVR32_OPC_SRVS, ++ AVR32_OPC_SRVC, ++ AVR32_OPC_SRQS, ++ AVR32_OPC_SRAL, ++ AVR32_OPC_SSRF, ++ AVR32_OPC_ST_B1, ++ AVR32_OPC_ST_B2, ++ AVR32_OPC_ST_B5, ++ AVR32_OPC_ST_B3, ++ AVR32_OPC_ST_B4, ++ AVR32_OPC_ST_D1, ++ AVR32_OPC_ST_D2, ++ AVR32_OPC_ST_D3, ++ AVR32_OPC_ST_D5, ++ AVR32_OPC_ST_D4, ++ AVR32_OPC_ST_H1, ++ AVR32_OPC_ST_H2, ++ AVR32_OPC_ST_H5, ++ AVR32_OPC_ST_H3, ++ AVR32_OPC_ST_H4, ++ AVR32_OPC_ST_W1, ++ AVR32_OPC_ST_W2, ++ AVR32_OPC_ST_W5, ++ AVR32_OPC_ST_W3, ++ AVR32_OPC_ST_W4, ++ AVR32_OPC_STC_D1, ++ AVR32_OPC_STC_D2, ++ AVR32_OPC_STC_D3, ++ AVR32_OPC_STC_W1, ++ AVR32_OPC_STC_W2, ++ AVR32_OPC_STC_W3, ++ AVR32_OPC_STC0_D, ++ AVR32_OPC_STC0_W, ++ AVR32_OPC_STCM_D, ++ AVR32_OPC_STCM_D_PU, ++ AVR32_OPC_STCM_W, ++ AVR32_OPC_STCM_W_PU, ++ AVR32_OPC_STCOND, ++ AVR32_OPC_STDSP, ++ AVR32_OPC_STHH_W2, ++ AVR32_OPC_STHH_W1, ++ AVR32_OPC_STM, ++ AVR32_OPC_STM_PU, ++ AVR32_OPC_STMTS, ++ AVR32_OPC_STMTS_PU, ++ AVR32_OPC_STSWP_H, ++ AVR32_OPC_STSWP_W, ++ AVR32_OPC_SUB1, ++ AVR32_OPC_SUB2, ++ AVR32_OPC_SUB5, ++ AVR32_OPC_SUB3_SP, ++ AVR32_OPC_SUB3, ++ AVR32_OPC_SUB4, ++ AVR32_OPC_SUBEQ, ++ AVR32_OPC_SUBNE, ++ AVR32_OPC_SUBCC, ++ AVR32_OPC_SUBCS, ++ AVR32_OPC_SUBGE, ++ AVR32_OPC_SUBLT, ++ AVR32_OPC_SUBMI, ++ AVR32_OPC_SUBPL, ++ AVR32_OPC_SUBLS, ++ AVR32_OPC_SUBGT, ++ AVR32_OPC_SUBLE, ++ AVR32_OPC_SUBHI, ++ AVR32_OPC_SUBVS, ++ AVR32_OPC_SUBVC, ++ AVR32_OPC_SUBQS, ++ AVR32_OPC_SUBAL, ++ AVR32_OPC_SUBFEQ, ++ AVR32_OPC_SUBFNE, ++ AVR32_OPC_SUBFCC, ++ AVR32_OPC_SUBFCS, ++ AVR32_OPC_SUBFGE, ++ AVR32_OPC_SUBFLT, ++ AVR32_OPC_SUBFMI, ++ AVR32_OPC_SUBFPL, ++ AVR32_OPC_SUBFLS, ++ AVR32_OPC_SUBFGT, ++ AVR32_OPC_SUBFLE, ++ AVR32_OPC_SUBFHI, ++ AVR32_OPC_SUBFVS, ++ AVR32_OPC_SUBFVC, ++ AVR32_OPC_SUBFQS, ++ AVR32_OPC_SUBFAL, ++ AVR32_OPC_SUBHH_W, ++ AVR32_OPC_SWAP_B, ++ AVR32_OPC_SWAP_BH, ++ AVR32_OPC_SWAP_H, ++ AVR32_OPC_SYNC, ++ AVR32_OPC_TLBR, ++ AVR32_OPC_TLBS, ++ AVR32_OPC_TLBW, ++ AVR32_OPC_TNBZ, ++ AVR32_OPC_TST, ++ AVR32_OPC_XCHG, ++ AVR32_OPC_MEMC, ++ AVR32_OPC_MEMS, ++ AVR32_OPC_MEMT, ++ AVR32_OPC_BFEXTS, ++ AVR32_OPC_BFEXTU, ++ AVR32_OPC_BFINS, ++ AVR32_OPC__END_ ++}; ++#define AVR32_NR_OPCODES AVR32_OPC__END_ ++ ++enum avr32_syntax_type ++{ ++ AVR32_SYNTAX_ABS, ++ AVR32_SYNTAX_ACALL, ++ AVR32_SYNTAX_ACR, ++ AVR32_SYNTAX_ADC, ++ AVR32_SYNTAX_ADD1, ++ AVR32_SYNTAX_ADD2, ++ AVR32_SYNTAX_ADDABS, ++ AVR32_SYNTAX_ADDHH_W, ++ AVR32_SYNTAX_AND1, ++ AVR32_SYNTAX_AND2, ++ AVR32_SYNTAX_AND3, ++ AVR32_SYNTAX_ANDH, ++ AVR32_SYNTAX_ANDH_COH, ++ AVR32_SYNTAX_ANDL, ++ AVR32_SYNTAX_ANDL_COH, ++ AVR32_SYNTAX_ANDN, ++ AVR32_SYNTAX_ASR1, ++ AVR32_SYNTAX_ASR3, ++ AVR32_SYNTAX_ASR2, ++ AVR32_SYNTAX_BFEXTS, ++ AVR32_SYNTAX_BFEXTU, ++ AVR32_SYNTAX_BFINS, ++ AVR32_SYNTAX_BLD, ++ AVR32_SYNTAX_BREQ1, ++ AVR32_SYNTAX_BRNE1, ++ AVR32_SYNTAX_BRCC1, ++ AVR32_SYNTAX_BRCS1, ++ AVR32_SYNTAX_BRGE1, ++ AVR32_SYNTAX_BRLT1, ++ AVR32_SYNTAX_BRMI1, ++ AVR32_SYNTAX_BRPL1, ++ AVR32_SYNTAX_BRHS1, ++ AVR32_SYNTAX_BRLO1, ++ AVR32_SYNTAX_BREQ2, ++ AVR32_SYNTAX_BRNE2, ++ AVR32_SYNTAX_BRCC2, ++ AVR32_SYNTAX_BRCS2, ++ AVR32_SYNTAX_BRGE2, ++ AVR32_SYNTAX_BRLT2, ++ AVR32_SYNTAX_BRMI2, ++ AVR32_SYNTAX_BRPL2, ++ AVR32_SYNTAX_BRLS, ++ AVR32_SYNTAX_BRGT, ++ AVR32_SYNTAX_BRLE, ++ AVR32_SYNTAX_BRHI, ++ AVR32_SYNTAX_BRVS, ++ AVR32_SYNTAX_BRVC, ++ AVR32_SYNTAX_BRQS, ++ AVR32_SYNTAX_BRAL, ++ AVR32_SYNTAX_BRHS2, ++ AVR32_SYNTAX_BRLO2, ++ AVR32_SYNTAX_BREAKPOINT, ++ AVR32_SYNTAX_BREV, ++ AVR32_SYNTAX_BST, ++ AVR32_SYNTAX_CACHE, ++ AVR32_SYNTAX_CASTS_B, ++ AVR32_SYNTAX_CASTS_H, ++ AVR32_SYNTAX_CASTU_B, ++ AVR32_SYNTAX_CASTU_H, ++ AVR32_SYNTAX_CBR, ++ AVR32_SYNTAX_CLZ, ++ AVR32_SYNTAX_COM, ++ AVR32_SYNTAX_COP, ++ AVR32_SYNTAX_CP_B, ++ AVR32_SYNTAX_CP_H, ++ AVR32_SYNTAX_CP_W1, ++ AVR32_SYNTAX_CP_W2, ++ AVR32_SYNTAX_CP_W3, ++ AVR32_SYNTAX_CPC1, ++ AVR32_SYNTAX_CPC2, ++ AVR32_SYNTAX_CSRF, ++ AVR32_SYNTAX_CSRFCZ, ++ AVR32_SYNTAX_DIVS, ++ AVR32_SYNTAX_DIVU, ++ AVR32_SYNTAX_EOR1, ++ AVR32_SYNTAX_EOR2, ++ AVR32_SYNTAX_EOR3, ++ AVR32_SYNTAX_EORL, ++ AVR32_SYNTAX_EORH, ++ AVR32_SYNTAX_FRS, ++ AVR32_SYNTAX_ICALL, ++ AVR32_SYNTAX_INCJOSP, ++ AVR32_SYNTAX_LD_D1, ++ AVR32_SYNTAX_LD_D2, ++ AVR32_SYNTAX_LD_D3, ++ AVR32_SYNTAX_LD_D5, ++ AVR32_SYNTAX_LD_D4, ++ AVR32_SYNTAX_LD_SB2, ++ AVR32_SYNTAX_LD_SB1, ++ AVR32_SYNTAX_LD_UB1, ++ AVR32_SYNTAX_LD_UB2, ++ AVR32_SYNTAX_LD_UB5, ++ AVR32_SYNTAX_LD_UB3, ++ AVR32_SYNTAX_LD_UB4, ++ AVR32_SYNTAX_LD_SH1, ++ AVR32_SYNTAX_LD_SH2, ++ AVR32_SYNTAX_LD_SH5, ++ AVR32_SYNTAX_LD_SH3, ++ AVR32_SYNTAX_LD_SH4, ++ AVR32_SYNTAX_LD_UH1, ++ AVR32_SYNTAX_LD_UH2, ++ AVR32_SYNTAX_LD_UH5, ++ AVR32_SYNTAX_LD_UH3, ++ AVR32_SYNTAX_LD_UH4, ++ AVR32_SYNTAX_LD_W1, ++ AVR32_SYNTAX_LD_W2, ++ AVR32_SYNTAX_LD_W5, ++ AVR32_SYNTAX_LD_W6, ++ AVR32_SYNTAX_LD_W3, ++ AVR32_SYNTAX_LD_W4, ++ AVR32_SYNTAX_LDC_D1, ++ AVR32_SYNTAX_LDC_D2, ++ AVR32_SYNTAX_LDC_D3, ++ AVR32_SYNTAX_LDC_W1, ++ AVR32_SYNTAX_LDC_W2, ++ AVR32_SYNTAX_LDC_W3, ++ AVR32_SYNTAX_LDC0_D, ++ AVR32_SYNTAX_LDC0_W, ++ AVR32_SYNTAX_LDCM_D, ++ AVR32_SYNTAX_LDCM_D_PU, ++ AVR32_SYNTAX_LDCM_W, ++ AVR32_SYNTAX_LDCM_W_PU, ++ AVR32_SYNTAX_LDDPC, ++ AVR32_SYNTAX_LDDPC_EXT, ++ AVR32_SYNTAX_LDDSP, ++ AVR32_SYNTAX_LDINS_B, ++ AVR32_SYNTAX_LDINS_H, ++ AVR32_SYNTAX_LDM, ++ AVR32_SYNTAX_LDMTS, ++ AVR32_SYNTAX_LDMTS_PU, ++ AVR32_SYNTAX_LDSWP_SH, ++ AVR32_SYNTAX_LDSWP_UH, ++ AVR32_SYNTAX_LDSWP_W, ++ AVR32_SYNTAX_LSL1, ++ AVR32_SYNTAX_LSL3, ++ AVR32_SYNTAX_LSL2, ++ AVR32_SYNTAX_LSR1, ++ AVR32_SYNTAX_LSR3, ++ AVR32_SYNTAX_LSR2, ++ AVR32_SYNTAX_MAC, ++ AVR32_SYNTAX_MACHH_D, ++ AVR32_SYNTAX_MACHH_W, ++ AVR32_SYNTAX_MACS_D, ++ AVR32_SYNTAX_MACSATHH_W, ++ AVR32_SYNTAX_MACUD, ++ AVR32_SYNTAX_MACWH_D, ++ AVR32_SYNTAX_MAX, ++ AVR32_SYNTAX_MCALL, ++ AVR32_SYNTAX_MFDR, ++ AVR32_SYNTAX_MFSR, ++ AVR32_SYNTAX_MIN, ++ AVR32_SYNTAX_MOV3, ++ AVR32_SYNTAX_MOV1, ++ AVR32_SYNTAX_MOV2, ++ AVR32_SYNTAX_MOVEQ1, ++ AVR32_SYNTAX_MOVNE1, ++ AVR32_SYNTAX_MOVCC1, ++ AVR32_SYNTAX_MOVCS1, ++ AVR32_SYNTAX_MOVGE1, ++ AVR32_SYNTAX_MOVLT1, ++ AVR32_SYNTAX_MOVMI1, ++ AVR32_SYNTAX_MOVPL1, ++ AVR32_SYNTAX_MOVLS1, ++ AVR32_SYNTAX_MOVGT1, ++ AVR32_SYNTAX_MOVLE1, ++ AVR32_SYNTAX_MOVHI1, ++ AVR32_SYNTAX_MOVVS1, ++ AVR32_SYNTAX_MOVVC1, ++ AVR32_SYNTAX_MOVQS1, ++ AVR32_SYNTAX_MOVAL1, ++ AVR32_SYNTAX_MOVHS1, ++ AVR32_SYNTAX_MOVLO1, ++ AVR32_SYNTAX_MOVEQ2, ++ AVR32_SYNTAX_MOVNE2, ++ AVR32_SYNTAX_MOVCC2, ++ AVR32_SYNTAX_MOVCS2, ++ AVR32_SYNTAX_MOVGE2, ++ AVR32_SYNTAX_MOVLT2, ++ AVR32_SYNTAX_MOVMI2, ++ AVR32_SYNTAX_MOVPL2, ++ AVR32_SYNTAX_MOVLS2, ++ AVR32_SYNTAX_MOVGT2, ++ AVR32_SYNTAX_MOVLE2, ++ AVR32_SYNTAX_MOVHI2, ++ AVR32_SYNTAX_MOVVS2, ++ AVR32_SYNTAX_MOVVC2, ++ AVR32_SYNTAX_MOVQS2, ++ AVR32_SYNTAX_MOVAL2, ++ AVR32_SYNTAX_MOVHS2, ++ AVR32_SYNTAX_MOVLO2, ++ AVR32_SYNTAX_MTDR, ++ AVR32_SYNTAX_MTSR, ++ AVR32_SYNTAX_MUL1, ++ AVR32_SYNTAX_MUL2, ++ AVR32_SYNTAX_MUL3, ++ AVR32_SYNTAX_MULHH_W, ++ AVR32_SYNTAX_MULNHH_W, ++ AVR32_SYNTAX_MULNWH_D, ++ AVR32_SYNTAX_MULSD, ++ AVR32_SYNTAX_MULSATHH_H, ++ AVR32_SYNTAX_MULSATHH_W, ++ AVR32_SYNTAX_MULSATRNDHH_H, ++ AVR32_SYNTAX_MULSATRNDWH_W, ++ AVR32_SYNTAX_MULSATWH_W, ++ AVR32_SYNTAX_MULU_D, ++ AVR32_SYNTAX_MULWH_D, ++ AVR32_SYNTAX_MUSFR, ++ AVR32_SYNTAX_MUSTR, ++ AVR32_SYNTAX_MVCR_D, ++ AVR32_SYNTAX_MVCR_W, ++ AVR32_SYNTAX_MVRC_D, ++ AVR32_SYNTAX_MVRC_W, ++ AVR32_SYNTAX_NEG, ++ AVR32_SYNTAX_NOP, ++ AVR32_SYNTAX_OR1, ++ AVR32_SYNTAX_OR2, ++ AVR32_SYNTAX_OR3, ++ AVR32_SYNTAX_ORH, ++ AVR32_SYNTAX_ORL, ++ AVR32_SYNTAX_PABS_SB, ++ AVR32_SYNTAX_PABS_SH, ++ AVR32_SYNTAX_PACKSH_SB, ++ AVR32_SYNTAX_PACKSH_UB, ++ AVR32_SYNTAX_PACKW_SH, ++ AVR32_SYNTAX_PADD_B, ++ AVR32_SYNTAX_PADD_H, ++ AVR32_SYNTAX_PADDH_SH, ++ AVR32_SYNTAX_PADDH_UB, ++ AVR32_SYNTAX_PADDS_SB, ++ AVR32_SYNTAX_PADDS_SH, ++ AVR32_SYNTAX_PADDS_UB, ++ AVR32_SYNTAX_PADDS_UH, ++ AVR32_SYNTAX_PADDSUB_H, ++ AVR32_SYNTAX_PADDSUBH_SH, ++ AVR32_SYNTAX_PADDSUBS_SH, ++ AVR32_SYNTAX_PADDSUBS_UH, ++ AVR32_SYNTAX_PADDX_H, ++ AVR32_SYNTAX_PADDXH_SH, ++ AVR32_SYNTAX_PADDXS_SH, ++ AVR32_SYNTAX_PADDXS_UH, ++ AVR32_SYNTAX_PASR_B, ++ AVR32_SYNTAX_PASR_H, ++ AVR32_SYNTAX_PAVG_SH, ++ AVR32_SYNTAX_PAVG_UB, ++ AVR32_SYNTAX_PLSL_B, ++ AVR32_SYNTAX_PLSL_H, ++ AVR32_SYNTAX_PLSR_B, ++ AVR32_SYNTAX_PLSR_H, ++ AVR32_SYNTAX_PMAX_SH, ++ AVR32_SYNTAX_PMAX_UB, ++ AVR32_SYNTAX_PMIN_SH, ++ AVR32_SYNTAX_PMIN_UB, ++ AVR32_SYNTAX_POPJC, ++ AVR32_SYNTAX_POPM, ++ AVR32_SYNTAX_POPM_E, ++ AVR32_SYNTAX_PREF, ++ AVR32_SYNTAX_PSAD, ++ AVR32_SYNTAX_PSUB_B, ++ AVR32_SYNTAX_PSUB_H, ++ AVR32_SYNTAX_PSUBADD_H, ++ AVR32_SYNTAX_PSUBADDH_SH, ++ AVR32_SYNTAX_PSUBADDS_SH, ++ AVR32_SYNTAX_PSUBADDS_UH, ++ AVR32_SYNTAX_PSUBH_SH, ++ AVR32_SYNTAX_PSUBH_UB, ++ AVR32_SYNTAX_PSUBS_SB, ++ AVR32_SYNTAX_PSUBS_SH, ++ AVR32_SYNTAX_PSUBS_UB, ++ AVR32_SYNTAX_PSUBS_UH, ++ AVR32_SYNTAX_PSUBX_H, ++ AVR32_SYNTAX_PSUBXH_SH, ++ AVR32_SYNTAX_PSUBXS_SH, ++ AVR32_SYNTAX_PSUBXS_UH, ++ AVR32_SYNTAX_PUNPCKSB_H, ++ AVR32_SYNTAX_PUNPCKUB_H, ++ AVR32_SYNTAX_PUSHJC, ++ AVR32_SYNTAX_PUSHM, ++ AVR32_SYNTAX_PUSHM_E, ++ AVR32_SYNTAX_RCALL1, ++ AVR32_SYNTAX_RCALL2, ++ AVR32_SYNTAX_RETEQ, ++ AVR32_SYNTAX_RETNE, ++ AVR32_SYNTAX_RETCC, ++ AVR32_SYNTAX_RETCS, ++ AVR32_SYNTAX_RETGE, ++ AVR32_SYNTAX_RETLT, ++ AVR32_SYNTAX_RETMI, ++ AVR32_SYNTAX_RETPL, ++ AVR32_SYNTAX_RETLS, ++ AVR32_SYNTAX_RETGT, ++ AVR32_SYNTAX_RETLE, ++ AVR32_SYNTAX_RETHI, ++ AVR32_SYNTAX_RETVS, ++ AVR32_SYNTAX_RETVC, ++ AVR32_SYNTAX_RETQS, ++ AVR32_SYNTAX_RETAL, ++ AVR32_SYNTAX_RETHS, ++ AVR32_SYNTAX_RETLO, ++ AVR32_SYNTAX_RETD, ++ AVR32_SYNTAX_RETE, ++ AVR32_SYNTAX_RETJ, ++ AVR32_SYNTAX_RETS, ++ AVR32_SYNTAX_RJMP, ++ AVR32_SYNTAX_ROL, ++ AVR32_SYNTAX_ROR, ++ AVR32_SYNTAX_RSUB1, ++ AVR32_SYNTAX_RSUB2, ++ AVR32_SYNTAX_SATADD_H, ++ AVR32_SYNTAX_SATADD_W, ++ AVR32_SYNTAX_SATRNDS, ++ AVR32_SYNTAX_SATRNDU, ++ AVR32_SYNTAX_SATS, ++ AVR32_SYNTAX_SATSUB_H, ++ AVR32_SYNTAX_SATSUB_W1, ++ AVR32_SYNTAX_SATSUB_W2, ++ AVR32_SYNTAX_SATU, ++ AVR32_SYNTAX_SBC, ++ AVR32_SYNTAX_SBR, ++ AVR32_SYNTAX_SCALL, ++ AVR32_SYNTAX_SCR, ++ AVR32_SYNTAX_SLEEP, ++ AVR32_SYNTAX_SREQ, ++ AVR32_SYNTAX_SRNE, ++ AVR32_SYNTAX_SRCC, ++ AVR32_SYNTAX_SRCS, ++ AVR32_SYNTAX_SRGE, ++ AVR32_SYNTAX_SRLT, ++ AVR32_SYNTAX_SRMI, ++ AVR32_SYNTAX_SRPL, ++ AVR32_SYNTAX_SRLS, ++ AVR32_SYNTAX_SRGT, ++ AVR32_SYNTAX_SRLE, ++ AVR32_SYNTAX_SRHI, ++ AVR32_SYNTAX_SRVS, ++ AVR32_SYNTAX_SRVC, ++ AVR32_SYNTAX_SRQS, ++ AVR32_SYNTAX_SRAL, ++ AVR32_SYNTAX_SRHS, ++ AVR32_SYNTAX_SRLO, ++ AVR32_SYNTAX_SSRF, ++ AVR32_SYNTAX_ST_B1, ++ AVR32_SYNTAX_ST_B2, ++ AVR32_SYNTAX_ST_B5, ++ AVR32_SYNTAX_ST_B3, ++ AVR32_SYNTAX_ST_B4, ++ AVR32_SYNTAX_ST_D1, ++ AVR32_SYNTAX_ST_D2, ++ AVR32_SYNTAX_ST_D3, ++ AVR32_SYNTAX_ST_D5, ++ AVR32_SYNTAX_ST_D4, ++ AVR32_SYNTAX_ST_H1, ++ AVR32_SYNTAX_ST_H2, ++ AVR32_SYNTAX_ST_H5, ++ AVR32_SYNTAX_ST_H3, ++ AVR32_SYNTAX_ST_H4, ++ AVR32_SYNTAX_ST_W1, ++ AVR32_SYNTAX_ST_W2, ++ AVR32_SYNTAX_ST_W5, ++ AVR32_SYNTAX_ST_W3, ++ AVR32_SYNTAX_ST_W4, ++ AVR32_SYNTAX_STC_D1, ++ AVR32_SYNTAX_STC_D2, ++ AVR32_SYNTAX_STC_D3, ++ AVR32_SYNTAX_STC_W1, ++ AVR32_SYNTAX_STC_W2, ++ AVR32_SYNTAX_STC_W3, ++ AVR32_SYNTAX_STC0_D, ++ AVR32_SYNTAX_STC0_W, ++ AVR32_SYNTAX_STCM_D, ++ AVR32_SYNTAX_STCM_D_PU, ++ AVR32_SYNTAX_STCM_W, ++ AVR32_SYNTAX_STCM_W_PU, ++ AVR32_SYNTAX_STCOND, ++ AVR32_SYNTAX_STDSP, ++ AVR32_SYNTAX_STHH_W2, ++ AVR32_SYNTAX_STHH_W1, ++ AVR32_SYNTAX_STM, ++ AVR32_SYNTAX_STM_PU, ++ AVR32_SYNTAX_STMTS, ++ AVR32_SYNTAX_STMTS_PU, ++ AVR32_SYNTAX_STSWP_H, ++ AVR32_SYNTAX_STSWP_W, ++ AVR32_SYNTAX_SUB1, ++ AVR32_SYNTAX_SUB2, ++ AVR32_SYNTAX_SUB5, ++ AVR32_SYNTAX_SUB3_SP, ++ AVR32_SYNTAX_SUB3, ++ AVR32_SYNTAX_SUB4, ++ AVR32_SYNTAX_SUBEQ, ++ AVR32_SYNTAX_SUBNE, ++ AVR32_SYNTAX_SUBCC, ++ AVR32_SYNTAX_SUBCS, ++ AVR32_SYNTAX_SUBGE, ++ AVR32_SYNTAX_SUBLT, ++ AVR32_SYNTAX_SUBMI, ++ AVR32_SYNTAX_SUBPL, ++ AVR32_SYNTAX_SUBLS, ++ AVR32_SYNTAX_SUBGT, ++ AVR32_SYNTAX_SUBLE, ++ AVR32_SYNTAX_SUBHI, ++ AVR32_SYNTAX_SUBVS, ++ AVR32_SYNTAX_SUBVC, ++ AVR32_SYNTAX_SUBQS, ++ AVR32_SYNTAX_SUBAL, ++ AVR32_SYNTAX_SUBHS, ++ AVR32_SYNTAX_SUBLO, ++ AVR32_SYNTAX_SUBFEQ, ++ AVR32_SYNTAX_SUBFNE, ++ AVR32_SYNTAX_SUBFCC, ++ AVR32_SYNTAX_SUBFCS, ++ AVR32_SYNTAX_SUBFGE, ++ AVR32_SYNTAX_SUBFLT, ++ AVR32_SYNTAX_SUBFMI, ++ AVR32_SYNTAX_SUBFPL, ++ AVR32_SYNTAX_SUBFLS, ++ AVR32_SYNTAX_SUBFGT, ++ AVR32_SYNTAX_SUBFLE, ++ AVR32_SYNTAX_SUBFHI, ++ AVR32_SYNTAX_SUBFVS, ++ AVR32_SYNTAX_SUBFVC, ++ AVR32_SYNTAX_SUBFQS, ++ AVR32_SYNTAX_SUBFAL, ++ AVR32_SYNTAX_SUBFHS, ++ AVR32_SYNTAX_SUBFLO, ++ AVR32_SYNTAX_SUBHH_W, ++ AVR32_SYNTAX_SWAP_B, ++ AVR32_SYNTAX_SWAP_BH, ++ AVR32_SYNTAX_SWAP_H, ++ AVR32_SYNTAX_SYNC, ++ AVR32_SYNTAX_TLBR, ++ AVR32_SYNTAX_TLBS, ++ AVR32_SYNTAX_TLBW, ++ AVR32_SYNTAX_TNBZ, ++ AVR32_SYNTAX_TST, ++ AVR32_SYNTAX_XCHG, ++ AVR32_SYNTAX_MEMC, ++ AVR32_SYNTAX_MEMS, ++ AVR32_SYNTAX_MEMT, ++ AVR32_SYNTAX_FADD_S, ++ AVR32_SYNTAX_FADD_D, ++ AVR32_SYNTAX_FSUB_S, ++ AVR32_SYNTAX_FSUB_D, ++ AVR32_SYNTAX_FMAC_S, ++ AVR32_SYNTAX_FMAC_D, ++ AVR32_SYNTAX_FNMAC_S, ++ AVR32_SYNTAX_FNMAC_D, ++ AVR32_SYNTAX_FMSC_S, ++ AVR32_SYNTAX_FMSC_D, ++ AVR32_SYNTAX_FNMSC_S, ++ AVR32_SYNTAX_FNMSC_D, ++ AVR32_SYNTAX_FMUL_S, ++ AVR32_SYNTAX_FMUL_D, ++ AVR32_SYNTAX_FNMUL_S, ++ AVR32_SYNTAX_FNMUL_D, ++ AVR32_SYNTAX_FNEG_S, ++ AVR32_SYNTAX_FNEG_D, ++ AVR32_SYNTAX_FABS_S, ++ AVR32_SYNTAX_FABS_D, ++ AVR32_SYNTAX_FCMP_S, ++ AVR32_SYNTAX_FCMP_D, ++ AVR32_SYNTAX_FMOV1_S, ++ AVR32_SYNTAX_FMOV1_D, ++ AVR32_SYNTAX_FMOV2_S, ++ AVR32_SYNTAX_FMOV2_D, ++ AVR32_SYNTAX_FMOV3_S, ++ AVR32_SYNTAX_FMOV3_D, ++ AVR32_SYNTAX_FCASTS_D, ++ AVR32_SYNTAX_FCASTD_S, ++ AVR32_SYNTAX_LDA_W, ++ AVR32_SYNTAX_CALL, ++ AVR32_SYNTAX_PICOSVMAC0, ++ AVR32_SYNTAX_PICOSVMAC1, ++ AVR32_SYNTAX_PICOSVMAC2, ++ AVR32_SYNTAX_PICOSVMAC3, ++ AVR32_SYNTAX_PICOSVMUL0, ++ AVR32_SYNTAX_PICOSVMUL1, ++ AVR32_SYNTAX_PICOSVMUL2, ++ AVR32_SYNTAX_PICOSVMUL3, ++ AVR32_SYNTAX_PICOVMAC0, ++ AVR32_SYNTAX_PICOVMAC1, ++ AVR32_SYNTAX_PICOVMAC2, ++ AVR32_SYNTAX_PICOVMAC3, ++ AVR32_SYNTAX_PICOVMUL0, ++ AVR32_SYNTAX_PICOVMUL1, ++ AVR32_SYNTAX_PICOVMUL2, ++ AVR32_SYNTAX_PICOVMUL3, ++ AVR32_SYNTAX_PICOLD_D2, ++ AVR32_SYNTAX_PICOLD_D3, ++ AVR32_SYNTAX_PICOLD_D1, ++ AVR32_SYNTAX_PICOLD_W2, ++ AVR32_SYNTAX_PICOLD_W3, ++ AVR32_SYNTAX_PICOLD_W1, ++ AVR32_SYNTAX_PICOLDM_D, ++ AVR32_SYNTAX_PICOLDM_D_PU, ++ AVR32_SYNTAX_PICOLDM_W, ++ AVR32_SYNTAX_PICOLDM_W_PU, ++ AVR32_SYNTAX_PICOMV_D1, ++ AVR32_SYNTAX_PICOMV_D2, ++ AVR32_SYNTAX_PICOMV_W1, ++ AVR32_SYNTAX_PICOMV_W2, ++ AVR32_SYNTAX_PICOST_D2, ++ AVR32_SYNTAX_PICOST_D3, ++ AVR32_SYNTAX_PICOST_D1, ++ AVR32_SYNTAX_PICOST_W2, ++ AVR32_SYNTAX_PICOST_W3, ++ AVR32_SYNTAX_PICOST_W1, ++ AVR32_SYNTAX_PICOSTM_D, ++ AVR32_SYNTAX_PICOSTM_D_PU, ++ AVR32_SYNTAX_PICOSTM_W, ++ AVR32_SYNTAX_PICOSTM_W_PU, ++ AVR32_SYNTAX__END_ ++}; ++#define AVR32_NR_SYNTAX AVR32_SYNTAX__END_ ++ ++enum avr32_alias_type ++ { ++ AVR32_ALIAS_FMAC_S, ++ AVR32_ALIAS_FMAC_D, ++ AVR32_ALIAS_FNMAC_S, ++ AVR32_ALIAS_FNMAC_D, ++ AVR32_ALIAS_FMSC_S, ++ AVR32_ALIAS_FMSC_D, ++ AVR32_ALIAS_FNMSC_S, ++ AVR32_ALIAS_FNMSC_D, ++ AVR32_ALIAS_FADD_S, ++ AVR32_ALIAS_FADD_D, ++ AVR32_ALIAS_FSUB_S, ++ AVR32_ALIAS_FSUB_D, ++ AVR32_ALIAS_FMUL_S, ++ AVR32_ALIAS_FMUL_D, ++ AVR32_ALIAS_FNMUL_S, ++ AVR32_ALIAS_FNMUL_D, ++ AVR32_ALIAS_FNEG_S, ++ AVR32_ALIAS_FNEG_D, ++ AVR32_ALIAS_FABS_S, ++ AVR32_ALIAS_FABS_D, ++ AVR32_ALIAS_FCMP_S, ++ AVR32_ALIAS_FCMP_D, ++ AVR32_ALIAS_FMOV1_S, ++ AVR32_ALIAS_FMOV1_D, ++ AVR32_ALIAS_FMOV2_S, ++ AVR32_ALIAS_FMOV2_D, ++ AVR32_ALIAS_FMOV3_S, ++ AVR32_ALIAS_FMOV3_D, ++ AVR32_ALIAS_FCASTS_D, ++ AVR32_ALIAS_FCASTD_S, ++ AVR32_ALIAS_PICOSVMAC0, ++ AVR32_ALIAS_PICOSVMAC1, ++ AVR32_ALIAS_PICOSVMAC2, ++ AVR32_ALIAS_PICOSVMAC3, ++ AVR32_ALIAS_PICOSVMUL0, ++ AVR32_ALIAS_PICOSVMUL1, ++ AVR32_ALIAS_PICOSVMUL2, ++ AVR32_ALIAS_PICOSVMUL3, ++ AVR32_ALIAS_PICOVMAC0, ++ AVR32_ALIAS_PICOVMAC1, ++ AVR32_ALIAS_PICOVMAC2, ++ AVR32_ALIAS_PICOVMAC3, ++ AVR32_ALIAS_PICOVMUL0, ++ AVR32_ALIAS_PICOVMUL1, ++ AVR32_ALIAS_PICOVMUL2, ++ AVR32_ALIAS_PICOVMUL3, ++ AVR32_ALIAS_PICOLD_D1, ++ AVR32_ALIAS_PICOLD_D2, ++ AVR32_ALIAS_PICOLD_D3, ++ AVR32_ALIAS_PICOLD_W1, ++ AVR32_ALIAS_PICOLD_W2, ++ AVR32_ALIAS_PICOLD_W3, ++ AVR32_ALIAS_PICOLDM_D, ++ AVR32_ALIAS_PICOLDM_D_PU, ++ AVR32_ALIAS_PICOLDM_W, ++ AVR32_ALIAS_PICOLDM_W_PU, ++ AVR32_ALIAS_PICOMV_D1, ++ AVR32_ALIAS_PICOMV_D2, ++ AVR32_ALIAS_PICOMV_W1, ++ AVR32_ALIAS_PICOMV_W2, ++ AVR32_ALIAS_PICOST_D1, ++ AVR32_ALIAS_PICOST_D2, ++ AVR32_ALIAS_PICOST_D3, ++ AVR32_ALIAS_PICOST_W1, ++ AVR32_ALIAS_PICOST_W2, ++ AVR32_ALIAS_PICOST_W3, ++ AVR32_ALIAS_PICOSTM_D, ++ AVR32_ALIAS_PICOSTM_D_PU, ++ AVR32_ALIAS_PICOSTM_W, ++ AVR32_ALIAS_PICOSTM_W_PU, ++ AVR32_ALIAS__END_ ++ }; ++#define AVR32_NR_ALIAS AVR32_ALIAS__END_ ++ ++enum avr32_mnemonic_type ++{ ++ AVR32_MNEMONIC_ABS, ++ AVR32_MNEMONIC_ACALL, ++ AVR32_MNEMONIC_ACR, ++ AVR32_MNEMONIC_ADC, ++ AVR32_MNEMONIC_ADD, ++ AVR32_MNEMONIC_ADDABS, ++ AVR32_MNEMONIC_ADDHH_W, ++ AVR32_MNEMONIC_AND, ++ AVR32_MNEMONIC_ANDH, ++ AVR32_MNEMONIC_ANDL, ++ AVR32_MNEMONIC_ANDN, ++ AVR32_MNEMONIC_ASR, ++ AVR32_MNEMONIC_BFEXTS, ++ AVR32_MNEMONIC_BFEXTU, ++ AVR32_MNEMONIC_BFINS, ++ AVR32_MNEMONIC_BLD, ++ AVR32_MNEMONIC_BREQ, ++ AVR32_MNEMONIC_BRNE, ++ AVR32_MNEMONIC_BRCC, ++ AVR32_MNEMONIC_BRCS, ++ AVR32_MNEMONIC_BRGE, ++ AVR32_MNEMONIC_BRLT, ++ AVR32_MNEMONIC_BRMI, ++ AVR32_MNEMONIC_BRPL, ++ AVR32_MNEMONIC_BRHS, ++ AVR32_MNEMONIC_BRLO, ++ AVR32_MNEMONIC_BRLS, ++ AVR32_MNEMONIC_BRGT, ++ AVR32_MNEMONIC_BRLE, ++ AVR32_MNEMONIC_BRHI, ++ AVR32_MNEMONIC_BRVS, ++ AVR32_MNEMONIC_BRVC, ++ AVR32_MNEMONIC_BRQS, ++ AVR32_MNEMONIC_BRAL, ++ AVR32_MNEMONIC_BREAKPOINT, ++ AVR32_MNEMONIC_BREV, ++ AVR32_MNEMONIC_BST, ++ AVR32_MNEMONIC_CACHE, ++ AVR32_MNEMONIC_CASTS_B, ++ AVR32_MNEMONIC_CASTS_H, ++ AVR32_MNEMONIC_CASTU_B, ++ AVR32_MNEMONIC_CASTU_H, ++ AVR32_MNEMONIC_CBR, ++ AVR32_MNEMONIC_CLZ, ++ AVR32_MNEMONIC_COM, ++ AVR32_MNEMONIC_COP, ++ AVR32_MNEMONIC_CP_B, ++ AVR32_MNEMONIC_CP_H, ++ AVR32_MNEMONIC_CP_W, ++ AVR32_MNEMONIC_CP, ++ AVR32_MNEMONIC_CPC, ++ AVR32_MNEMONIC_CSRF, ++ AVR32_MNEMONIC_CSRFCZ, ++ AVR32_MNEMONIC_DIVS, ++ AVR32_MNEMONIC_DIVU, ++ AVR32_MNEMONIC_EOR, ++ AVR32_MNEMONIC_EORL, ++ AVR32_MNEMONIC_EORH, ++ AVR32_MNEMONIC_FRS, ++ AVR32_MNEMONIC_ICALL, ++ AVR32_MNEMONIC_INCJOSP, ++ AVR32_MNEMONIC_LD_D, ++ AVR32_MNEMONIC_LD_SB, ++ AVR32_MNEMONIC_LD_UB, ++ AVR32_MNEMONIC_LD_SH, ++ AVR32_MNEMONIC_LD_UH, ++ AVR32_MNEMONIC_LD_W, ++ AVR32_MNEMONIC_LDC_D, ++ AVR32_MNEMONIC_LDC_W, ++ AVR32_MNEMONIC_LDC0_D, ++ AVR32_MNEMONIC_LDC0_W, ++ AVR32_MNEMONIC_LDCM_D, ++ AVR32_MNEMONIC_LDCM_W, ++ AVR32_MNEMONIC_LDDPC, ++ AVR32_MNEMONIC_LDDSP, ++ AVR32_MNEMONIC_LDINS_B, ++ AVR32_MNEMONIC_LDINS_H, ++ AVR32_MNEMONIC_LDM, ++ AVR32_MNEMONIC_LDMTS, ++ AVR32_MNEMONIC_LDSWP_SH, ++ AVR32_MNEMONIC_LDSWP_UH, ++ AVR32_MNEMONIC_LDSWP_W, ++ AVR32_MNEMONIC_LSL, ++ AVR32_MNEMONIC_LSR, ++ AVR32_MNEMONIC_MAC, ++ AVR32_MNEMONIC_MACHH_D, ++ AVR32_MNEMONIC_MACHH_W, ++ AVR32_MNEMONIC_MACS_D, ++ AVR32_MNEMONIC_MACSATHH_W, ++ AVR32_MNEMONIC_MACU_D, ++ AVR32_MNEMONIC_MACWH_D, ++ AVR32_MNEMONIC_MAX, ++ AVR32_MNEMONIC_MCALL, ++ AVR32_MNEMONIC_MFDR, ++ AVR32_MNEMONIC_MFSR, ++ AVR32_MNEMONIC_MIN, ++ AVR32_MNEMONIC_MOV, ++ AVR32_MNEMONIC_MOVEQ, ++ AVR32_MNEMONIC_MOVNE, ++ AVR32_MNEMONIC_MOVCC, ++ AVR32_MNEMONIC_MOVCS, ++ AVR32_MNEMONIC_MOVGE, ++ AVR32_MNEMONIC_MOVLT, ++ AVR32_MNEMONIC_MOVMI, ++ AVR32_MNEMONIC_MOVPL, ++ AVR32_MNEMONIC_MOVLS, ++ AVR32_MNEMONIC_MOVGT, ++ AVR32_MNEMONIC_MOVLE, ++ AVR32_MNEMONIC_MOVHI, ++ AVR32_MNEMONIC_MOVVS, ++ AVR32_MNEMONIC_MOVVC, ++ AVR32_MNEMONIC_MOVQS, ++ AVR32_MNEMONIC_MOVAL, ++ AVR32_MNEMONIC_MOVHS, ++ AVR32_MNEMONIC_MOVLO, ++ AVR32_MNEMONIC_MTDR, ++ AVR32_MNEMONIC_MTSR, ++ AVR32_MNEMONIC_MUL, ++ AVR32_MNEMONIC_MULHH_W, ++ AVR32_MNEMONIC_MULNHH_W, ++ AVR32_MNEMONIC_MULNWH_D, ++ AVR32_MNEMONIC_MULS_D, ++ AVR32_MNEMONIC_MULSATHH_H, ++ AVR32_MNEMONIC_MULSATHH_W, ++ AVR32_MNEMONIC_MULSATRNDHH_H, ++ AVR32_MNEMONIC_MULSATRNDWH_W, ++ AVR32_MNEMONIC_MULSATWH_W, ++ AVR32_MNEMONIC_MULU_D, ++ AVR32_MNEMONIC_MULWH_D, ++ AVR32_MNEMONIC_MUSFR, ++ AVR32_MNEMONIC_MUSTR, ++ AVR32_MNEMONIC_MVCR_D, ++ AVR32_MNEMONIC_MVCR_W, ++ AVR32_MNEMONIC_MVRC_D, ++ AVR32_MNEMONIC_MVRC_W, ++ AVR32_MNEMONIC_NEG, ++ AVR32_MNEMONIC_NOP, ++ AVR32_MNEMONIC_OR, ++ AVR32_MNEMONIC_ORH, ++ AVR32_MNEMONIC_ORL, ++ AVR32_MNEMONIC_PABS_SB, ++ AVR32_MNEMONIC_PABS_SH, ++ AVR32_MNEMONIC_PACKSH_SB, ++ AVR32_MNEMONIC_PACKSH_UB, ++ AVR32_MNEMONIC_PACKW_SH, ++ AVR32_MNEMONIC_PADD_B, ++ AVR32_MNEMONIC_PADD_H, ++ AVR32_MNEMONIC_PADDH_SH, ++ AVR32_MNEMONIC_PADDH_UB, ++ AVR32_MNEMONIC_PADDS_SB, ++ AVR32_MNEMONIC_PADDS_SH, ++ AVR32_MNEMONIC_PADDS_UB, ++ AVR32_MNEMONIC_PADDS_UH, ++ AVR32_MNEMONIC_PADDSUB_H, ++ AVR32_MNEMONIC_PADDSUBH_SH, ++ AVR32_MNEMONIC_PADDSUBS_SH, ++ AVR32_MNEMONIC_PADDSUBS_UH, ++ AVR32_MNEMONIC_PADDX_H, ++ AVR32_MNEMONIC_PADDXH_SH, ++ AVR32_MNEMONIC_PADDXS_SH, ++ AVR32_MNEMONIC_PADDXS_UH, ++ AVR32_MNEMONIC_PASR_B, ++ AVR32_MNEMONIC_PASR_H, ++ AVR32_MNEMONIC_PAVG_SH, ++ AVR32_MNEMONIC_PAVG_UB, ++ AVR32_MNEMONIC_PLSL_B, ++ AVR32_MNEMONIC_PLSL_H, ++ AVR32_MNEMONIC_PLSR_B, ++ AVR32_MNEMONIC_PLSR_H, ++ AVR32_MNEMONIC_PMAX_SH, ++ AVR32_MNEMONIC_PMAX_UB, ++ AVR32_MNEMONIC_PMIN_SH, ++ AVR32_MNEMONIC_PMIN_UB, ++ AVR32_MNEMONIC_POPJC, ++ AVR32_MNEMONIC_POPM, ++ AVR32_MNEMONIC_PREF, ++ AVR32_MNEMONIC_PSAD, ++ AVR32_MNEMONIC_PSUB_B, ++ AVR32_MNEMONIC_PSUB_H, ++ AVR32_MNEMONIC_PSUBADD_H, ++ AVR32_MNEMONIC_PSUBADDH_SH, ++ AVR32_MNEMONIC_PSUBADDS_SH, ++ AVR32_MNEMONIC_PSUBADDS_UH, ++ AVR32_MNEMONIC_PSUBH_SH, ++ AVR32_MNEMONIC_PSUBH_UB, ++ AVR32_MNEMONIC_PSUBS_SB, ++ AVR32_MNEMONIC_PSUBS_SH, ++ AVR32_MNEMONIC_PSUBS_UB, ++ AVR32_MNEMONIC_PSUBS_UH, ++ AVR32_MNEMONIC_PSUBX_H, ++ AVR32_MNEMONIC_PSUBXH_SH, ++ AVR32_MNEMONIC_PSUBXS_SH, ++ AVR32_MNEMONIC_PSUBXS_UH, ++ AVR32_MNEMONIC_PUNPCKSB_H, ++ AVR32_MNEMONIC_PUNPCKUB_H, ++ AVR32_MNEMONIC_PUSHJC, ++ AVR32_MNEMONIC_PUSHM, ++ AVR32_MNEMONIC_RCALL, ++ AVR32_MNEMONIC_RETEQ, ++ AVR32_MNEMONIC_RETNE, ++ AVR32_MNEMONIC_RETCC, ++ AVR32_MNEMONIC_RETCS, ++ AVR32_MNEMONIC_RETGE, ++ AVR32_MNEMONIC_RETLT, ++ AVR32_MNEMONIC_RETMI, ++ AVR32_MNEMONIC_RETPL, ++ AVR32_MNEMONIC_RETLS, ++ AVR32_MNEMONIC_RETGT, ++ AVR32_MNEMONIC_RETLE, ++ AVR32_MNEMONIC_RETHI, ++ AVR32_MNEMONIC_RETVS, ++ AVR32_MNEMONIC_RETVC, ++ AVR32_MNEMONIC_RETQS, ++ AVR32_MNEMONIC_RETAL, ++ AVR32_MNEMONIC_RETHS, ++ AVR32_MNEMONIC_RETLO, ++ AVR32_MNEMONIC_RET, ++ AVR32_MNEMONIC_RETD, ++ AVR32_MNEMONIC_RETE, ++ AVR32_MNEMONIC_RETJ, ++ AVR32_MNEMONIC_RETS, ++ AVR32_MNEMONIC_RJMP, ++ AVR32_MNEMONIC_ROL, ++ AVR32_MNEMONIC_ROR, ++ AVR32_MNEMONIC_RSUB, ++ AVR32_MNEMONIC_SATADD_H, ++ AVR32_MNEMONIC_SATADD_W, ++ AVR32_MNEMONIC_SATRNDS, ++ AVR32_MNEMONIC_SATRNDU, ++ AVR32_MNEMONIC_SATS, ++ AVR32_MNEMONIC_SATSUB_H, ++ AVR32_MNEMONIC_SATSUB_W, ++ AVR32_MNEMONIC_SATU, ++ AVR32_MNEMONIC_SBC, ++ AVR32_MNEMONIC_SBR, ++ AVR32_MNEMONIC_SCALL, ++ AVR32_MNEMONIC_SCR, ++ AVR32_MNEMONIC_SLEEP, ++ AVR32_MNEMONIC_SREQ, ++ AVR32_MNEMONIC_SRNE, ++ AVR32_MNEMONIC_SRCC, ++ AVR32_MNEMONIC_SRCS, ++ AVR32_MNEMONIC_SRGE, ++ AVR32_MNEMONIC_SRLT, ++ AVR32_MNEMONIC_SRMI, ++ AVR32_MNEMONIC_SRPL, ++ AVR32_MNEMONIC_SRLS, ++ AVR32_MNEMONIC_SRGT, ++ AVR32_MNEMONIC_SRLE, ++ AVR32_MNEMONIC_SRHI, ++ AVR32_MNEMONIC_SRVS, ++ AVR32_MNEMONIC_SRVC, ++ AVR32_MNEMONIC_SRQS, ++ AVR32_MNEMONIC_SRAL, ++ AVR32_MNEMONIC_SRHS, ++ AVR32_MNEMONIC_SRLO, ++ AVR32_MNEMONIC_SSRF, ++ AVR32_MNEMONIC_ST_B, ++ AVR32_MNEMONIC_ST_D, ++ AVR32_MNEMONIC_ST_H, ++ AVR32_MNEMONIC_ST_W, ++ AVR32_MNEMONIC_STC_D, ++ AVR32_MNEMONIC_STC_W, ++ AVR32_MNEMONIC_STC0_D, ++ AVR32_MNEMONIC_STC0_W, ++ AVR32_MNEMONIC_STCM_D, ++ AVR32_MNEMONIC_STCM_W, ++ AVR32_MNEMONIC_STCOND, ++ AVR32_MNEMONIC_STDSP, ++ AVR32_MNEMONIC_STHH_W, ++ AVR32_MNEMONIC_STM, ++ AVR32_MNEMONIC_STMTS, ++ AVR32_MNEMONIC_STSWP_H, ++ AVR32_MNEMONIC_STSWP_W, ++ AVR32_MNEMONIC_SUB, ++ AVR32_MNEMONIC_SUBEQ, ++ AVR32_MNEMONIC_SUBNE, ++ AVR32_MNEMONIC_SUBCC, ++ AVR32_MNEMONIC_SUBCS, ++ AVR32_MNEMONIC_SUBGE, ++ AVR32_MNEMONIC_SUBLT, ++ AVR32_MNEMONIC_SUBMI, ++ AVR32_MNEMONIC_SUBPL, ++ AVR32_MNEMONIC_SUBLS, ++ AVR32_MNEMONIC_SUBGT, ++ AVR32_MNEMONIC_SUBLE, ++ AVR32_MNEMONIC_SUBHI, ++ AVR32_MNEMONIC_SUBVS, ++ AVR32_MNEMONIC_SUBVC, ++ AVR32_MNEMONIC_SUBQS, ++ AVR32_MNEMONIC_SUBAL, ++ AVR32_MNEMONIC_SUBHS, ++ AVR32_MNEMONIC_SUBLO, ++ AVR32_MNEMONIC_SUBFEQ, ++ AVR32_MNEMONIC_SUBFNE, ++ AVR32_MNEMONIC_SUBFCC, ++ AVR32_MNEMONIC_SUBFCS, ++ AVR32_MNEMONIC_SUBFGE, ++ AVR32_MNEMONIC_SUBFLT, ++ AVR32_MNEMONIC_SUBFMI, ++ AVR32_MNEMONIC_SUBFPL, ++ AVR32_MNEMONIC_SUBFLS, ++ AVR32_MNEMONIC_SUBFGT, ++ AVR32_MNEMONIC_SUBFLE, ++ AVR32_MNEMONIC_SUBFHI, ++ AVR32_MNEMONIC_SUBFVS, ++ AVR32_MNEMONIC_SUBFVC, ++ AVR32_MNEMONIC_SUBFQS, ++ AVR32_MNEMONIC_SUBFAL, ++ AVR32_MNEMONIC_SUBFHS, ++ AVR32_MNEMONIC_SUBFLO, ++ AVR32_MNEMONIC_SUBHH_W, ++ AVR32_MNEMONIC_SWAP_B, ++ AVR32_MNEMONIC_SWAP_BH, ++ AVR32_MNEMONIC_SWAP_H, ++ AVR32_MNEMONIC_SYNC, ++ AVR32_MNEMONIC_TLBR, ++ AVR32_MNEMONIC_TLBS, ++ AVR32_MNEMONIC_TLBW, ++ AVR32_MNEMONIC_TNBZ, ++ AVR32_MNEMONIC_TST, ++ AVR32_MNEMONIC_XCHG, ++ AVR32_MNEMONIC_MEMC, ++ AVR32_MNEMONIC_MEMS, ++ AVR32_MNEMONIC_MEMT, ++ AVR32_MNEMONIC_FADD_S, ++ AVR32_MNEMONIC_FADD_D, ++ AVR32_MNEMONIC_FSUB_S, ++ AVR32_MNEMONIC_FSUB_D, ++ AVR32_MNEMONIC_FMAC_S, ++ AVR32_MNEMONIC_FMAC_D, ++ AVR32_MNEMONIC_FNMAC_S, ++ AVR32_MNEMONIC_FNMAC_D, ++ AVR32_MNEMONIC_FMSC_S, ++ AVR32_MNEMONIC_FMSC_D, ++ AVR32_MNEMONIC_FNMSC_S, ++ AVR32_MNEMONIC_FNMSC_D, ++ AVR32_MNEMONIC_FMUL_S, ++ AVR32_MNEMONIC_FMUL_D, ++ AVR32_MNEMONIC_FNMUL_S, ++ AVR32_MNEMONIC_FNMUL_D, ++ AVR32_MNEMONIC_FNEG_S, ++ AVR32_MNEMONIC_FNEG_D, ++ AVR32_MNEMONIC_FABS_S, ++ AVR32_MNEMONIC_FABS_D, ++ AVR32_MNEMONIC_FCMP_S, ++ AVR32_MNEMONIC_FCMP_D, ++ AVR32_MNEMONIC_FMOV_S, ++ AVR32_MNEMONIC_FMOV_D, ++ AVR32_MNEMONIC_FCASTS_D, ++ AVR32_MNEMONIC_FCASTD_S, ++ /* AVR32_MNEMONIC_FLD_S, ++ AVR32_MNEMONIC_FLD_D, ++ AVR32_MNEMONIC_FST_S, ++ AVR32_MNEMONIC_FST_D, */ ++ AVR32_MNEMONIC_LDA_W, ++ AVR32_MNEMONIC_CALL, ++ AVR32_MNEMONIC_PICOSVMAC, ++ AVR32_MNEMONIC_PICOSVMUL, ++ AVR32_MNEMONIC_PICOVMAC, ++ AVR32_MNEMONIC_PICOVMUL, ++ AVR32_MNEMONIC_PICOLD_D, ++ AVR32_MNEMONIC_PICOLD_W, ++ AVR32_MNEMONIC_PICOLDM_D, ++ AVR32_MNEMONIC_PICOLDM_W, ++ AVR32_MNEMONIC_PICOMV_D, ++ AVR32_MNEMONIC_PICOMV_W, ++ AVR32_MNEMONIC_PICOST_D, ++ AVR32_MNEMONIC_PICOST_W, ++ AVR32_MNEMONIC_PICOSTM_D, ++ AVR32_MNEMONIC_PICOSTM_W, ++ AVR32_MNEMONIC__END_ ++}; ++#define AVR32_NR_MNEMONICS AVR32_MNEMONIC__END_ ++ ++enum avr32_syntax_parser ++ { ++ AVR32_PARSER_NORMAL, ++ AVR32_PARSER_ALIAS, ++ AVR32_PARSER_LDA, ++ AVR32_PARSER_CALL, ++ AVR32_PARSER__END_ ++ }; ++#define AVR32_NR_PARSERS AVR32_PARSER__END_ +diff -Nrup binutils-2.17/opcodes/config.in binutils-2.17.atmel.1.3.0/opcodes/config.in +--- binutils-2.17/opcodes/config.in 2005-03-31 18:52:53.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/opcodes/config.in 2007-03-26 10:31:37.000000000 +0200 +@@ -138,7 +138,7 @@ + + /* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be +- automatically deduced at run-time. ++ automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +@@ -159,8 +159,8 @@ + #undef inline + #endif + +-/* Define to `long' if does not define. */ ++/* Define to `long int' if does not define. */ + #undef off_t + +-/* Define to `unsigned' if does not define. */ ++/* Define to `unsigned int' if does not define. */ + #undef size_t +diff -Nrup binutils-2.17/opcodes/configure binutils-2.17.atmel.1.3.0/opcodes/configure +--- binutils-2.17/opcodes/configure 2006-02-17 15:36:28.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/configure 2007-03-26 10:31:36.000000000 +0200 +@@ -1,25 +1,54 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.59. ++# Generated by GNU Autoconf 2.61. + # +-# Copyright (C) 2003 Free Software Foundation, Inc. ++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + # This configure script is free software; the Free Software Foundation + # gives unlimited permission to copy, distribute and modify it. + ## --------------------- ## + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++ ++ ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -29,8 +58,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi ++ + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -44,18 +108,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -63,157 +128,388 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + ++# CDPATH. ++$as_unset CDPATH + +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits + +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh ++if test "x$CONFIG_SHELL" = x; then ++ if (eval ":") 2>/dev/null; then ++ as_have_required=yes ++else ++ as_have_required=no ++fi ++ ++ if test $as_have_required = yes && (eval ": ++(as_func_return () { ++ (exit \$1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. + fi + ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi + +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi + +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test \$exitcode = 0) || { (exit 1); exit 1; } ++ ++( ++ as_lineno_1=\$LINENO ++ as_lineno_2=\$LINENO ++ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && ++ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ++") 2> /dev/null; then ++ : ++else ++ as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH + do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in ++ case $as_dir in + /*) +- if ("$as_dir/$as_base" -c ' ++ for as_base in sh bash ksh sh5; do ++ as_candidate_shells="$as_candidate_shells $as_dir/$as_base" ++ done;; ++ esac ++done ++IFS=$as_save_IFS ++ ++ ++ for as_shell in $as_candidate_shells $SHELL; do ++ # Try only shells that exist, to save several forks. ++ if { test -f "$as_shell" || test -f "$as_shell.exe"; } && ++ { ("$as_shell") 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++: ++_ASEOF ++}; then ++ CONFIG_SHELL=$as_shell ++ as_have_required=yes ++ if { "$as_shell" 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++: ++(as_func_return () { ++ (exit $1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi ++ ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi ++ ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi ++ ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = "$1" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test $exitcode = 0) || { (exit 1); exit 1; } ++ ++( + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } ++ ++_ASEOF ++}; then ++ break ++fi ++ ++fi ++ ++ done ++ ++ if test "x$CONFIG_SHELL" != x; then ++ for as_var in BASH_ENV ENV ++ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++ done ++ export CONFIG_SHELL ++ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} ++fi ++ ++ ++ if test $as_have_required = no; then ++ echo This script requires a shell more modern than all the ++ echo shells that I found on your system. Please install a ++ echo modern shell, or manually run the script under such a ++ echo shell if you do have one. ++ { (exit 1); exit 1; } ++fi ++ ++ ++fi ++ ++fi ++ ++ ++ ++(eval "as_func_return () { ++ (exit \$1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 ++} ++ ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi ++ ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi ++ ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi ++ ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi ++ ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi ++ ++test \$exitcode = 0") || { ++ echo No shell found that supports shell functions. ++ echo Please tell autoconf@gnu.org about your system, ++ echo including any error possibly output before this ++ echo message ++} ++ ++ ++ ++ as_lineno_1=$LINENO ++ as_lineno_2=$LINENO ++ test "x$as_lineno_1" != "x$as_lineno_2" && ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || ++ chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -222,7 +518,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -231,39 +548,27 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH + ++exec 7<&0 &1 + + # Name of the host. + # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, + # so uname gets run too. + ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +-exec 6>&1 +- + # + # Initializations. + # + ac_default_prefix=/usr/local ++ac_clean_files= + ac_config_libobj_dir=. ++LIBOBJS= + cross_compiling=no + subdirs= + MFLAGS= + MAKEFLAGS= + SHELL=${CONFIG_SHELL-/bin/sh} + +-# Maximum number of lines to put in a shell here document. +-# This variable seems obsolete. It should probably be removed, and +-# only ac_max_sed_lines should be used. +-: ${ac_max_here_lines=38} +- + # Identity of this package. + PACKAGE_NAME= + PACKAGE_TARNAME= +@@ -275,42 +580,187 @@ ac_unique_file="z8k-dis.c" + # Factoring default headers for most tests. + ac_includes_default="\ + #include +-#if HAVE_SYS_TYPES_H ++#ifdef HAVE_SYS_TYPES_H + # include + #endif +-#if HAVE_SYS_STAT_H ++#ifdef HAVE_SYS_STAT_H + # include + #endif +-#if STDC_HEADERS ++#ifdef STDC_HEADERS + # include + # include + #else +-# if HAVE_STDLIB_H ++# ifdef HAVE_STDLIB_H + # include + # endif + #endif +-#if HAVE_STRING_H +-# if !STDC_HEADERS && HAVE_MEMORY_H ++#ifdef HAVE_STRING_H ++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H + # include + # endif + # include + #endif +-#if HAVE_STRINGS_H ++#ifdef HAVE_STRINGS_H + # include + #endif +-#if HAVE_INTTYPES_H ++#ifdef HAVE_INTTYPES_H + # include +-#else +-# if HAVE_STDINT_H +-# include +-# endif + #endif +-#if HAVE_UNISTD_H ++#ifdef HAVE_STDINT_H ++# include ++#endif ++#ifdef HAVE_UNISTD_H + # include + #endif" + +-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE AR ac_ct_AR RANLIB ac_ct_RANLIB LN_S LIBTOOL WARN_CFLAGS NO_WERROR MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT INSTALL_LIBBFD_TRUE INSTALL_LIBBFD_FALSE host_noncanonical target_noncanonical bfdlibdir bfdincludedir CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l CC_FOR_BUILD EXEEXT_FOR_BUILD HDEFINES CGEN_MAINT_TRUE CGEN_MAINT_FALSE cgendir WIN32LDFLAGS WIN32LIBADD archdefs BFD_MACHINES LIBOBJS LTLIBOBJS' ++ac_subst_vars='SHELL ++PATH_SEPARATOR ++PACKAGE_NAME ++PACKAGE_TARNAME ++PACKAGE_VERSION ++PACKAGE_STRING ++PACKAGE_BUGREPORT ++exec_prefix ++prefix ++program_transform_name ++bindir ++sbindir ++libexecdir ++datarootdir ++datadir ++sysconfdir ++sharedstatedir ++localstatedir ++includedir ++oldincludedir ++docdir ++infodir ++htmldir ++dvidir ++pdfdir ++psdir ++libdir ++localedir ++mandir ++DEFS ++ECHO_C ++ECHO_N ++ECHO_T ++LIBS ++build_alias ++host_alias ++target_alias ++build ++build_cpu ++build_vendor ++build_os ++host ++host_cpu ++host_vendor ++host_os ++target ++target_cpu ++target_vendor ++target_os ++CC ++CFLAGS ++LDFLAGS ++CPPFLAGS ++ac_ct_CC ++EXEEXT ++OBJEXT ++INSTALL_PROGRAM ++INSTALL_SCRIPT ++INSTALL_DATA ++CYGPATH_W ++PACKAGE ++VERSION ++ACLOCAL ++AUTOCONF ++AUTOMAKE ++AUTOHEADER ++MAKEINFO ++install_sh ++STRIP ++INSTALL_STRIP_PROGRAM ++mkdir_p ++AWK ++SET_MAKE ++am__leading_dot ++AMTAR ++am__tar ++am__untar ++DEPDIR ++am__include ++am__quote ++AMDEP_TRUE ++AMDEP_FALSE ++AMDEPBACKSLASH ++CCDEPMODE ++am__fastdepCC_TRUE ++am__fastdepCC_FALSE ++AR ++RANLIB ++LN_S ++LIBTOOL ++WARN_CFLAGS ++NO_WERROR ++MAINTAINER_MODE_TRUE ++MAINTAINER_MODE_FALSE ++MAINT ++INSTALL_LIBBFD_TRUE ++INSTALL_LIBBFD_FALSE ++host_noncanonical ++target_noncanonical ++bfdlibdir ++bfdincludedir ++CPP ++GREP ++EGREP ++ALLOCA ++USE_NLS ++MSGFMT ++GMSGFMT ++XGETTEXT ++USE_INCLUDED_LIBINTL ++CATALOGS ++CATOBJEXT ++DATADIRNAME ++GMOFILES ++INSTOBJEXT ++INTLDEPS ++INTLLIBS ++INTLOBJS ++POFILES ++POSUB ++INCLUDE_LOCALE_H ++GT_NO ++GT_YES ++MKINSTALLDIRS ++l ++CC_FOR_BUILD ++EXEEXT_FOR_BUILD ++HDEFINES ++CGEN_MAINT_TRUE ++CGEN_MAINT_FALSE ++cgendir ++WIN32LDFLAGS ++WIN32LIBADD ++archdefs ++BFD_MACHINES ++LIBOBJS ++LTLIBOBJS' + ac_subst_files='' ++ ac_precious_vars='build_alias ++host_alias ++target_alias ++CC ++CFLAGS ++LDFLAGS ++LIBS ++CPPFLAGS ++CPP' ++ + + # Initialize some variables set by options. + ac_init_help= +@@ -337,34 +787,48 @@ x_libraries=NONE + # and all the variables that are supposed to be based on exec_prefix + # by default will actually change. + # Use braces instead of parens because sh, perl, etc. also accept them. ++# (The list follows the same order as the GNU Coding Standards.) + bindir='${exec_prefix}/bin' + sbindir='${exec_prefix}/sbin' + libexecdir='${exec_prefix}/libexec' +-datadir='${prefix}/share' ++datarootdir='${prefix}/share' ++datadir='${datarootdir}' + sysconfdir='${prefix}/etc' + sharedstatedir='${prefix}/com' + localstatedir='${prefix}/var' +-libdir='${exec_prefix}/lib' + includedir='${prefix}/include' + oldincludedir='/usr/include' +-infodir='${prefix}/info' +-mandir='${prefix}/man' ++docdir='${datarootdir}/doc/${PACKAGE}' ++infodir='${datarootdir}/info' ++htmldir='${docdir}' ++dvidir='${docdir}' ++pdfdir='${docdir}' ++psdir='${docdir}' ++libdir='${exec_prefix}/lib' ++localedir='${datarootdir}/locale' ++mandir='${datarootdir}/man' + + ac_prev= ++ac_dashdash= + for ac_option + do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then +- eval "$ac_prev=\$ac_option" ++ eval $ac_prev=\$ac_option + ac_prev= + continue + fi + +- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` ++ case $ac_option in ++ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; ++ *) ac_optarg=yes ;; ++ esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + +- case $ac_option in ++ case $ac_dashdash$ac_option in ++ --) ++ ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; +@@ -386,33 +850,45 @@ do + --config-cache | -C) + cache_file=config.cache ;; + +- -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ++ -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; +- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ +- | --da=*) ++ -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + ++ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ ++ | --dataroo | --dataro | --datar) ++ ac_prev=datarootdir ;; ++ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ ++ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) ++ datarootdir=$ac_optarg ;; ++ + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- eval "enable_$ac_feature=no" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=no ;; ++ ++ -docdir | --docdir | --docdi | --doc | --do) ++ ac_prev=docdir ;; ++ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) ++ docdir=$ac_optarg ;; ++ ++ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ++ ac_prev=dvidir ;; ++ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) ++ dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "enable_$ac_feature='$ac_optarg'" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ +@@ -439,6 +915,12 @@ do + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + ++ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ++ ac_prev=htmldir ;; ++ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ ++ | --ht=*) ++ htmldir=$ac_optarg ;; ++ + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; +@@ -463,13 +945,16 @@ do + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + ++ -localedir | --localedir | --localedi | --localed | --locale) ++ ac_prev=localedir ;; ++ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) ++ localedir=$ac_optarg ;; ++ + -localstatedir | --localstatedir | --localstatedi | --localstated \ +- | --localstate | --localstat | --localsta | --localst \ +- | --locals | --local | --loca | --loc | --lo) ++ | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ +- | --localstate=* | --localstat=* | --localsta=* | --localst=* \ +- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) ++ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) +@@ -534,6 +1019,16 @@ do + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + ++ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ++ ac_prev=pdfdir ;; ++ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) ++ pdfdir=$ac_optarg ;; ++ ++ -psdir | --psdir | --psdi | --psd | --ps) ++ ac_prev=psdir ;; ++ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) ++ psdir=$ac_optarg ;; ++ + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; +@@ -586,24 +1081,20 @@ do + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package| sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "with_$ac_package='$ac_optarg'" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package | sed 's/-/_/g'` +- eval "with_$ac_package=no" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. +@@ -634,8 +1125,7 @@ Try \`$0 --help' for more information." + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } +- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` +- eval "$ac_envvar='$ac_optarg'" ++ eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) +@@ -655,27 +1145,19 @@ if test -n "$ac_prev"; then + { (exit 1); exit 1; }; } + fi + +-# Be sure to have absolute paths. +-for ac_var in exec_prefix prefix +-do +- eval ac_val=$`echo $ac_var` +- case $ac_val in +- [\\/$]* | ?:[\\/]* | NONE | '' ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; +- esac +-done +- +-# Be sure to have absolute paths. +-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ +- localstatedir libdir includedir oldincludedir infodir mandir ++# Be sure to have absolute directory names. ++for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ ++ datadir sysconfdir sharedstatedir localstatedir includedir \ ++ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ ++ libdir localedir mandir + do +- eval ac_val=$`echo $ac_var` ++ eval ac_val=\$$ac_var + case $ac_val in +- [\\/$]* | ?:[\\/]* ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; ++ [\\/$]* | ?:[\\/]* ) continue;; ++ NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac ++ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 ++ { (exit 1); exit 1; }; } + done + + # There might be people who depend on the old broken behavior: `$host' +@@ -702,74 +1184,76 @@ test -n "$host_alias" && ac_tool_prefix= + test "$silent" = yes && exec 6>/dev/null + + ++ac_pwd=`pwd` && test -n "$ac_pwd" && ++ac_ls_di=`ls -di .` && ++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || ++ { echo "$as_me: error: Working directory cannot be determined" >&2 ++ { (exit 1); exit 1; }; } ++test "X$ac_ls_di" = "X$ac_pwd_ls_di" || ++ { echo "$as_me: error: pwd does not report name of working directory" >&2 ++ { (exit 1); exit 1; }; } ++ ++ + # Find the source files, if location was not specified. + if test -z "$srcdir"; then + ac_srcdir_defaulted=yes +- # Try the directory containing this script, then its parent. +- ac_confdir=`(dirname "$0") 2>/dev/null || ++ # Try the directory containing this script, then the parent directory. ++ ac_confdir=`$as_dirname -- "$0" || + $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X"$0" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + srcdir=$ac_confdir +- if test ! -r $srcdir/$ac_unique_file; then ++ if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi + else + ac_srcdir_defaulted=no + fi +-if test ! -r $srcdir/$ac_unique_file; then +- if test "$ac_srcdir_defaulted" = yes; then +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 +- { (exit 1); exit 1; }; } +- else +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 +- { (exit 1); exit 1; }; } +- fi +-fi +-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || +- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 +- { (exit 1); exit 1; }; } +-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +-ac_env_build_alias_set=${build_alias+set} +-ac_env_build_alias_value=$build_alias +-ac_cv_env_build_alias_set=${build_alias+set} +-ac_cv_env_build_alias_value=$build_alias +-ac_env_host_alias_set=${host_alias+set} +-ac_env_host_alias_value=$host_alias +-ac_cv_env_host_alias_set=${host_alias+set} +-ac_cv_env_host_alias_value=$host_alias +-ac_env_target_alias_set=${target_alias+set} +-ac_env_target_alias_value=$target_alias +-ac_cv_env_target_alias_set=${target_alias+set} +-ac_cv_env_target_alias_value=$target_alias +-ac_env_CC_set=${CC+set} +-ac_env_CC_value=$CC +-ac_cv_env_CC_set=${CC+set} +-ac_cv_env_CC_value=$CC +-ac_env_CFLAGS_set=${CFLAGS+set} +-ac_env_CFLAGS_value=$CFLAGS +-ac_cv_env_CFLAGS_set=${CFLAGS+set} +-ac_cv_env_CFLAGS_value=$CFLAGS +-ac_env_LDFLAGS_set=${LDFLAGS+set} +-ac_env_LDFLAGS_value=$LDFLAGS +-ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +-ac_cv_env_LDFLAGS_value=$LDFLAGS +-ac_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_env_CPPFLAGS_value=$CPPFLAGS +-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_cv_env_CPPFLAGS_value=$CPPFLAGS +-ac_env_CPP_set=${CPP+set} +-ac_env_CPP_value=$CPP +-ac_cv_env_CPP_set=${CPP+set} +-ac_cv_env_CPP_value=$CPP ++if test ! -r "$srcdir/$ac_unique_file"; then ++ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." ++ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 ++ { (exit 1); exit 1; }; } ++fi ++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ++ac_abs_confdir=`( ++ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 ++ { (exit 1); exit 1; }; } ++ pwd)` ++# When building in place, set srcdir=. ++if test "$ac_abs_confdir" = "$ac_pwd"; then ++ srcdir=. ++fi ++# Remove unnecessary trailing slashes from srcdir. ++# Double slashes in file names in object file debugging info ++# mess up M-x gdb in Emacs. ++case $srcdir in ++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; ++esac ++for ac_var in $ac_precious_vars; do ++ eval ac_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_env_${ac_var}_value=\$${ac_var} ++ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_cv_env_${ac_var}_value=\$${ac_var} ++done + + # + # Report the --help message. +@@ -798,9 +1282,6 @@ Configuration: + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +-_ACEOF +- +- cat <<_ACEOF + Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] +@@ -818,15 +1299,22 @@ Fine tuning of the installation director + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] +- --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] +- --infodir=DIR info documentation [PREFIX/info] +- --mandir=DIR man documentation [PREFIX/man] ++ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] ++ --datadir=DIR read-only architecture-independent data [DATAROOTDIR] ++ --infodir=DIR info documentation [DATAROOTDIR/info] ++ --localedir=DIR locale-dependent data [DATAROOTDIR/locale] ++ --mandir=DIR man documentation [DATAROOTDIR/man] ++ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] ++ --htmldir=DIR html documentation [DOCDIR] ++ --dvidir=DIR dvi documentation [DOCDIR] ++ --pdfdir=DIR pdf documentation [DOCDIR] ++ --psdir=DIR ps documentation [DOCDIR] + _ACEOF + + cat <<\_ACEOF +@@ -878,126 +1366,95 @@ Some influential environment variables: + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory +- CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have +- headers in a nonstandard directory ++ LIBS libraries to pass to the linker, e.g. -l ++ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if ++ you have headers in a nonstandard directory + CPP C preprocessor + + Use these variables to override the choices made by `configure' or to help + it to find libraries and programs with nonstandard names/locations. + + _ACEOF ++ac_status=$? + fi + + if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. +- ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue +- test -d $ac_dir || continue ++ test -d "$ac_dir" || continue + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac +- +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac +- +- cd $ac_dir +- # Check for guested configure; otherwise get Cygnus style configure. +- if test -f $ac_srcdir/configure.gnu; then +- echo +- $SHELL $ac_srcdir/configure.gnu --help=recursive +- elif test -f $ac_srcdir/configure; then +- echo +- $SHELL $ac_srcdir/configure --help=recursive +- elif test -f $ac_srcdir/configure.ac || +- test -f $ac_srcdir/configure.in; then +- echo +- $ac_configure --help ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix ++ ++ cd "$ac_dir" || { ac_status=$?; continue; } ++ # Check for guested configure. ++ if test -f "$ac_srcdir/configure.gnu"; then ++ echo && ++ $SHELL "$ac_srcdir/configure.gnu" --help=recursive ++ elif test -f "$ac_srcdir/configure"; then ++ echo && ++ $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 +- fi +- cd $ac_popdir ++ fi || ac_status=$? ++ cd "$ac_pwd" || { ac_status=$?; break; } + done + fi + +-test -n "$ac_init_help" && exit 0 ++test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF ++configure ++generated by GNU Autoconf 2.61 + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + This configure script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it. + _ACEOF +- exit 0 ++ exit + fi +-exec 5>config.log +-cat >&5 <<_ACEOF ++cat >config.log <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + + It was created by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + + _ACEOF ++exec 5>>config.log + { + cat <<_ASUNAME + ## --------- ## +@@ -1016,7 +1473,7 @@ uname -v = `(uname -v) 2>/dev/null || ec + /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` + /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` + /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +-hostinfo = `(hostinfo) 2>/dev/null || echo unknown` ++/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` + /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` + /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` + /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +@@ -1030,6 +1487,7 @@ do + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" + done ++IFS=$as_save_IFS + + } >&5 + +@@ -1051,7 +1509,6 @@ _ACEOF + ac_configure_args= + ac_configure_args0= + ac_configure_args1= +-ac_sep= + ac_must_keep_next=false + for ac_pass in 1 2 + do +@@ -1062,7 +1519,7 @@ do + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ++ *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in +@@ -1084,9 +1541,7 @@ do + -* ) ac_must_keep_next=true ;; + esac + fi +- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" +- # Get rid of the leading space. +- ac_sep=" " ++ ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +@@ -1097,8 +1552,8 @@ $as_unset ac_configure_args1 || test "${ + # When interrupted or exit'd, cleanup temporary files, and complete + # config.log. We remove comments because anyway the quotes in there + # would cause problems or look ugly. +-# WARNING: Be sure not to use single quotes in there, as some shells, +-# such as our DU 5.0 friend, will then `close' the trap. ++# WARNING: Use '\'' to represent an apostrophe within the trap. ++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. + trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { +@@ -1111,20 +1566,34 @@ trap 'exit_status=$? + _ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done + (set) 2>&1 | +- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + sed -n \ +- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; +- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" +- ;; ++ "s/'\''/'\''\\\\'\'''\''/g; ++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ++ ;; #( + *) +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} ++ esac | ++ sort ++) + echo + + cat <<\_ASBOX +@@ -1135,22 +1604,28 @@ _ASBOX + echo + for ac_var in $ac_subst_vars + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +-## ------------- ## +-## Output files. ## +-## ------------- ## ++## ------------------- ## ++## File substitutions. ## ++## ------------------- ## + _ASBOX + echo + for ac_var in $ac_subst_files + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi +@@ -1162,26 +1637,24 @@ _ASBOX + ## ----------- ## + _ASBOX + echo +- sed "/^$/d" confdefs.h | sort ++ cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 +- rm -f core *.core && +- rm -rf conftest* confdefs* conf$$* $ac_clean_files && ++ rm -f core *.core core.conftest.* && ++ rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +- ' 0 ++' 0 + for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + done + ac_signal=0 + + # confdefs.h avoids OS command line length limits that DEFS can exceed. +-rm -rf conftest* confdefs.h +-# AIX cpp loses on an empty file, so make sure it contains at least a newline. +-echo >confdefs.h ++rm -f -r conftest* confdefs.h + + # Predefined preprocessor variables. + +@@ -1212,14 +1685,17 @@ _ACEOF + + # Let the site file select an alternate cache file if it wants to. + # Prefer explicitly selected file to automatically selected ones. +-if test -z "$CONFIG_SITE"; then +- if test "x$prefix" != xNONE; then +- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" +- else +- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" +- fi ++if test -n "$CONFIG_SITE"; then ++ set x "$CONFIG_SITE" ++elif test "x$prefix" != xNONE; then ++ set x "$prefix/share/config.site" "$prefix/etc/config.site" ++else ++ set x "$ac_default_prefix/share/config.site" \ ++ "$ac_default_prefix/etc/config.site" + fi +-for ac_site_file in $CONFIG_SITE; do ++shift ++for ac_site_file ++do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 + echo "$as_me: loading site script $ac_site_file" >&6;} +@@ -1235,8 +1711,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -1248,12 +1724,11 @@ fi + # Check that the precious variables saved in the cache have kept the same + # value. + ac_cache_corrupted=false +-for ac_var in `(set) 2>&1 | +- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do ++for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set +- eval ac_old_val="\$ac_cv_env_${ac_var}_value" +- eval ac_new_val="\$ac_env_${ac_var}_value" ++ eval ac_old_val=\$ac_cv_env_${ac_var}_value ++ eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +@@ -1278,8 +1753,7 @@ echo "$as_me: current value: $ac_new_v + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) +- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; ++ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in +@@ -1296,12 +1770,6 @@ echo "$as_me: error: run \`make distclea + { (exit 1); exit 1; }; } + fi + +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- + + + +@@ -1318,109 +1786,164 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + ac_aux_dir= +-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do +- if test -f $ac_dir/install-sh; then ++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do ++ if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break +- elif test -f $ac_dir/install.sh; then ++ elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break +- elif test -f $ac_dir/shtool; then ++ elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi + done + if test -z "$ac_aux_dir"; then +- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} ++ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 ++echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } + fi +-ac_config_guess="$SHELL $ac_aux_dir/config.guess" +-ac_config_sub="$SHELL $ac_aux_dir/config.sub" +-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. ++ ++# These three variables are undocumented and unsupported, ++# and are intended to be withdrawn in a future Autoconf release. ++# They can cause serious problems if a builder's source tree is in a directory ++# whose full name contains unusual characters. ++ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ++ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ++ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ++ + + # Make sure we can run config.sub. +-$ac_config_sub sun4 >/dev/null 2>&1 || +- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +-echo "$as_me: error: cannot run $ac_config_sub" >&2;} ++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || ++ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 ++echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +-echo "$as_me:$LINENO: checking build system type" >&5 +-echo $ECHO_N "checking build system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking build system type" >&5 ++echo $ECHO_N "checking build system type... $ECHO_C" >&6; } + if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_build_alias=$build_alias +-test -z "$ac_cv_build_alias" && +- ac_cv_build_alias=`$ac_config_guess` +-test -z "$ac_cv_build_alias" && ++ ac_build_alias=$build_alias ++test "x$ac_build_alias" = x && ++ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` ++test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 + echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} ++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + + fi +-echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +-echo "${ECHO_T}$ac_cv_build" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 ++echo "${ECHO_T}$ac_cv_build" >&6; } ++case $ac_cv_build in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 ++echo "$as_me: error: invalid value of canonical build" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + build=$ac_cv_build +-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_build ++shift ++build_cpu=$1 ++build_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++build_os=$* ++IFS=$ac_save_IFS ++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking host system type" >&5 +-echo $ECHO_N "checking host system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking host system type" >&5 ++echo $ECHO_N "checking host system type... $ECHO_C" >&6; } + if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_host_alias=$host_alias +-test -z "$ac_cv_host_alias" && +- ac_cv_host_alias=$ac_cv_build_alias +-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} ++ if test "x$host_alias" = x; then ++ ac_cv_host=$ac_cv_build ++else ++ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +-echo "${ECHO_T}$ac_cv_host" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 ++echo "${ECHO_T}$ac_cv_host" >&6; } ++case $ac_cv_host in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 ++echo "$as_me: error: invalid value of canonical host" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + host=$ac_cv_host +-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_host ++shift ++host_cpu=$1 ++host_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++host_os=$* ++IFS=$ac_save_IFS ++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking target system type" >&5 +-echo $ECHO_N "checking target system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking target system type" >&5 ++echo $ECHO_N "checking target system type... $ECHO_C" >&6; } + if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_target_alias=$target_alias +-test "x$ac_cv_target_alias" = "x" && +- ac_cv_target_alias=$ac_cv_host_alias +-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} ++ if test "x$target_alias" = x; then ++ ac_cv_target=$ac_cv_host ++else ++ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +-echo "${ECHO_T}$ac_cv_target" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 ++echo "${ECHO_T}$ac_cv_target" >&6; } ++case $ac_cv_target in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 ++echo "$as_me: error: invalid value of canonical target" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + target=$ac_cv_target +-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_target ++shift ++target_cpu=$1 ++target_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++target_os=$* ++IFS=$ac_save_IFS ++case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + + # The aliases save the names the user supplied, while $host etc. +@@ -1437,8 +1960,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1451,32 +1974,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1489,36 +2014,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1531,74 +2071,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1612,7 +2112,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -1623,6 +2123,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -1640,22 +2141,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1668,36 +2170,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1710,29 +2214,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -1745,21 +2265,35 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +@@ -1784,47 +2318,77 @@ ac_clean_files="$ac_clean_files a.out a. + # Try to create an executable without -o first, disregard a.out. + # It will help us diagnose broken compilers, and finding out an intuition + # of exeext. +-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 ++echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } + ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 +- (eval $ac_link_default) 2>&5 ++# ++# List of possible output files, starting from the most likely. ++# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) ++# only as a last resort. b.out is created by i960 compilers. ++ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' ++# ++# The IRIX 6 linker writes into existing files which may not be ++# executable, retaining their permissions. Remove them first so a ++# subsequent execution test works. ++ac_rmfiles= ++for ac_file in $ac_files ++do ++ case $ac_file in ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; ++ * ) ac_rmfiles="$ac_rmfiles $ac_file";; ++ esac ++done ++rm -f $ac_rmfiles ++ ++if { (ac_try="$ac_link_default" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- # Find the output, starting from the most likely. This scheme is +-# not robust to junk in `.', hence go to wildcards (a.*) only as a last +-# resort. +- +-# Be careful to initialize this variable, since it used to be cached. +-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +-ac_cv_exeext= +-# b.out is created by i960 compilers. +-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out ++ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. ++# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' ++# in a Makefile. We should not override ac_cv_exeext if it was cached, ++# so that the user can short-circuit this test for compilers unknown to ++# Autoconf. ++for ac_file in $ac_files '' + do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) +- ;; +- conftest.$ac_ext ) +- # This is the source file. ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) +- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- # FIXME: I believe we export ac_cv_exeext for Libtool, +- # but it would be cool to find out if it's true. Does anybody +- # maintain Libtool? --akim. +- export ac_cv_exeext ++ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; ++ then :; else ++ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` ++ fi ++ # We set ac_cv_exeext here because the later test for it is not ++ # safe: cross compilers may not add the suffix if given an `-o' ++ # argument, so we may need to know it at that point already. ++ # Even if this section looks crufty: it has the advantage of ++ # actually working. + break;; + * ) + break;; + esac + done ++test "$ac_cv_exeext" = no && ac_cv_exeext= ++ + else ++ ac_file='' ++fi ++ ++{ echo "$as_me:$LINENO: result: $ac_file" >&5 ++echo "${ECHO_T}$ac_file" >&6; } ++if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +@@ -1836,19 +2400,21 @@ See \`config.log' for more details." >&2 + fi + + ac_exeext=$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_file" >&5 +-echo "${ECHO_T}$ac_file" >&6 + +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 ++echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } + # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 + # If not cross compiling, check that we can run a simple program. + if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -1867,22 +2433,27 @@ See \`config.log' for more details." >&2 + fi + fi + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + + rm -f a.out a.exe conftest$ac_cv_exeext b.out + ac_clean_files=$ac_clean_files_save +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +-echo "$as_me:$LINENO: result: $cross_compiling" >&5 +-echo "${ECHO_T}$cross_compiling" >&6 +- +-echo "$as_me:$LINENO: checking for suffix of executables" >&5 +-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 ++echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } ++{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 ++echo "${ECHO_T}$cross_compiling" >&6; } ++ ++{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 ++echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +@@ -1893,9 +2464,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_l + for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- export ac_cv_exeext + break;; + * ) break;; + esac +@@ -1909,14 +2479,14 @@ See \`config.log' for more details." >&2 + fi + + rm -f conftest$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +-echo "${ECHO_T}$ac_cv_exeext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 ++echo "${ECHO_T}$ac_cv_exeext" >&6; } + + rm -f conftest.$ac_ext + EXEEXT=$ac_cv_exeext + ac_exeext=$EXEEXT +-echo "$as_me:$LINENO: checking for suffix of object files" >&5 +-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 ++echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } + if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1936,14 +2506,20 @@ main () + } + _ACEOF + rm -f conftest.o conftest.obj +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>&5 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do ++ for ac_file in conftest.o conftest.obj conftest.*; do ++ test -f "$ac_file" || continue; + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +@@ -1961,12 +2537,12 @@ fi + + rm -f conftest.$ac_cv_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +-echo "${ECHO_T}$ac_cv_objext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 ++echo "${ECHO_T}$ac_cv_objext" >&6; } + OBJEXT=$ac_cv_objext + ac_objext=$OBJEXT +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1989,50 +2565,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -2048,38 +2623,118 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no ++ ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } + if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS + elif test $ac_cv_prog_cc_g = yes; then +@@ -2095,12 +2750,12 @@ else + CFLAGS= + fi + fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_prog_cc_stdc=no ++ ac_cv_prog_cc_c89=no + ac_save_CC=$CC + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -2134,12 +2789,17 @@ static char *f (char * (*g) (char **, in + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get ++ as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ ++ that's true only with -std. */ + int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ + int test (int i, double x); + struct s1 {int (*f) (int a);}; + struct s2 {int (*f) (double a);}; +@@ -2154,335 +2814,144 @@ return f (e, argv, 0) != argv[0] || f + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" + do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext ++ ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest.$ac_ext conftest.$ac_objext ++rm -f conftest.$ac_ext + CC=$ac_save_CC + + fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; + *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + esac + +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. ++ ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++{ echo "$as_me:$LINENO: checking for library containing strerror" >&5 ++echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } ++if test "${ac_cv_search_strerror+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_func_search_save_LIBS=$LIBS + cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-$ac_declaration +-#include ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char strerror (); + int + main () + { +-exit (42); ++return strerror (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++for ac_lib in '' cposix; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_strerror=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-continue +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h +-fi +- +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_strerror+set}" = set; then ++ break + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +-echo "$as_me:$LINENO: checking for library containing strerror" >&5 +-echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 ++done + if test "${ac_cv_search_strerror+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_func_search_save_LIBS=$LIBS +-ac_cv_search_strerror=no +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="none required" +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_strerror" = no; then +- for ac_lib in cposix; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="-l$ac_lib" +-break ++ : + else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++ ac_cv_search_strerror=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 +-echo "${ECHO_T}$ac_cv_search_strerror" >&6 +-if test "$ac_cv_search_strerror" != no; then +- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 ++echo "${ECHO_T}$ac_cv_search_strerror" >&6; } ++ac_res=$ac_cv_search_strerror ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + +@@ -2506,8 +2975,8 @@ am__api_version="1.9" + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -2529,7 +2998,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -2548,21 +3017,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -2572,8 +3042,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR + + test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +-echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 ++echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } + # Just in case + sleep 1 + echo timestamp > conftest.file +@@ -2615,20 +3085,20 @@ echo "$as_me: error: newly created file + Check your system clock" >&2;} + { (exit 1); exit 1; }; } + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + test "$program_prefix" != NONE && +- program_transform_name="s,^,$program_prefix,;$program_transform_name" ++ program_transform_name="s&^&$program_prefix&;$program_transform_name" + # Use a double $ so make ignores it. + test "$program_suffix" != NONE && +- program_transform_name="s,\$,$program_suffix,;$program_transform_name" ++ program_transform_name="s&\$&$program_suffix&;$program_transform_name" + # Double any \ or $. echo might interpret backslashes. + # By default was `s,x,x', remove it if useless. + cat <<\_ACEOF >conftest.sed + s/[\\$]/&&/g;s/;s,x,x,$// + _ACEOF + program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +-rm conftest.sed ++rm -f conftest.sed + + # expand $ac_aux_dir to an absolute path + am_aux_dir=`cd $ac_aux_dir && pwd` +@@ -2680,8 +3150,8 @@ for ac_prog in gawk mawk nawk awk + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2694,54 +3164,57 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + AWK=$ac_cv_prog_AWK + if test -n "$AWK"; then +- echo "$as_me:$LINENO: result: $AWK" >&5 +-echo "${ECHO_T}$AWK" >&6 ++ { echo "$as_me:$LINENO: result: $AWK" >&5 ++echo "${ECHO_T}$AWK" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$AWK" && break + done + +-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 ++echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } ++set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` ++if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.make <<\_ACEOF ++SHELL = /bin/sh + all: +- @echo 'ac_maketemp="$(MAKE)"' ++ @echo '@@@%%%=$(MAKE)=@@@%%%' + _ACEOF + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. +-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +-if test -n "$ac_maketemp"; then +- eval ac_cv_prog_make_${ac_make}_set=yes +-else +- eval ac_cv_prog_make_${ac_make}_set=no +-fi ++case `${MAKE-make} -f conftest.make 2>/dev/null` in ++ *@@@%%%=?*=@@@%%%*) ++ eval ac_cv_prog_make_${ac_make}_set=yes;; ++ *) ++ eval ac_cv_prog_make_${ac_make}_set=no;; ++esac + rm -f conftest.make + fi +-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + SET_MAKE= + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" + fi + +@@ -2756,7 +3229,7 @@ rmdir .tst 2>/dev/null + + DEPDIR="${am__leading_dot}deps" + +- ac_config_commands="$ac_config_commands depfiles" ++ac_config_commands="$ac_config_commands depfiles" + + + am_make=${MAKE-make} +@@ -2766,8 +3239,8 @@ am__doit: + .PHONY: am__doit + END + # If we don't find an include directive, just comment out the code. +-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 ++echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } + am__include="#" + am__quote= + _am_result=none +@@ -2794,15 +3267,15 @@ if test "$am__include" = "#"; then + fi + + +-echo "$as_me:$LINENO: result: $_am_result" >&5 +-echo "${ECHO_T}$_am_result" >&6 ++{ echo "$as_me:$LINENO: result: $_am_result" >&5 ++echo "${ECHO_T}$_am_result" >&6; } + rm -f confinc confmf + +-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. ++# Check whether --enable-dependency-tracking was given. + if test "${enable_dependency_tracking+set}" = set; then +- enableval="$enable_dependency_tracking" ++ enableval=$enable_dependency_tracking; ++fi + +-fi; + if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +@@ -2877,8 +3350,8 @@ if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2891,32 +3364,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2929,27 +3404,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -2970,8 +3459,8 @@ am__tar='${AMTAR} chof - "$$tardir"'; am + + depcc="$CC" am_compiler_list= + +-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 ++echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } + if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3060,8 +3549,8 @@ else + fi + + fi +-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 ++echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } + CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + +@@ -3082,8 +3571,8 @@ fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. + set dummy ${ac_tool_prefix}ar; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3096,32 +3585,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + AR=$ac_cv_prog_AR + if test -n "$AR"; then +- echo "$as_me:$LINENO: result: $AR" >&5 +-echo "${ECHO_T}$AR" >&6 ++ { echo "$as_me:$LINENO: result: $AR" >&5 ++echo "${ECHO_T}$AR" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. + set dummy ar; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3134,26 +3625,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_AR=$ac_cv_prog_ac_ct_AR + if test -n "$ac_ct_AR"; then +- echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +-echo "${ECHO_T}$ac_ct_AR" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 ++echo "${ECHO_T}$ac_ct_AR" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- AR=$ac_ct_AR ++ if test "x$ac_ct_AR" = x; then ++ AR="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ AR=$ac_ct_AR ++ fi + else + AR="$ac_cv_prog_AR" + fi +@@ -3161,8 +3667,8 @@ fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3175,32 +3681,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3213,36 +3721,49 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi + + +-# Check whether --enable-shared or --disable-shared was given. ++# Check whether --enable-shared was given. + if test "${enable_shared+set}" = set; then +- enableval="$enable_shared" +- p=${PACKAGE-default} ++ enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; +@@ -3260,12 +3781,12 @@ no) enable_shared=no ;; + esac + else + enable_shared=no +-fi; ++fi ++ + +-# Check whether --enable-static or --disable-static was given. ++# Check whether --enable-static was given. + if test "${enable_static+set}" = set; then +- enableval="$enable_static" +- p=${PACKAGE-default} ++ enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; +@@ -3283,11 +3804,11 @@ no) enable_static=no ;; + esac + else + enable_static=yes +-fi; +-# Check whether --enable-fast-install or --disable-fast-install was given. ++fi ++ ++# Check whether --enable-fast-install was given. + if test "${enable_fast_install+set}" = set; then +- enableval="$enable_fast_install" +- p=${PACKAGE-default} ++ enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; +@@ -3305,20 +3826,21 @@ no) enable_fast_install=no ;; + esac + else + enable_fast_install=yes +-fi; ++fi ++ + +-# Check whether --with-gnu-ld or --without-gnu-ld was given. ++# Check whether --with-gnu-ld was given. + if test "${with_gnu_ld+set}" = set; then +- withval="$with_gnu_ld" +- test "$withval" = no || with_gnu_ld=yes ++ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes + else + with_gnu_ld=no +-fi; ++fi ++ + ac_prog=ld + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. +- echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 ++echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw +@@ -3347,11 +3869,11 @@ echo $ECHO_N "checking for ld used by GC + ;; + esac + elif test "$with_gnu_ld" = yes; then +- echo "$as_me:$LINENO: checking for GNU ld" >&5 +-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for GNU ld" >&5 ++echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } + else +- echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 ++echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } + fi + if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -3380,17 +3902,17 @@ fi + + LD="$lt_cv_path_LD" + if test -n "$LD"; then +- echo "$as_me:$LINENO: result: $LD" >&5 +-echo "${ECHO_T}$LD" >&6 ++ { echo "$as_me:$LINENO: result: $LD" >&5 ++echo "${ECHO_T}$LD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 + echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 ++echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } + if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3401,25 +3923,25 @@ else + lt_cv_prog_gnu_ld=no + fi + fi +-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 +-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 ++echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } + with_gnu_ld=$lt_cv_prog_gnu_ld + + +-echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 ++echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } + if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + lt_cv_ld_reload_flag='-r' + fi +-echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +-echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 ++echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } + reload_flag=$lt_cv_ld_reload_flag + test -n "$reload_flag" && reload_flag=" $reload_flag" + +-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 ++echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } + if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3454,22 +3976,22 @@ fi + fi + + NM="$lt_cv_path_NM" +-echo "$as_me:$LINENO: result: $NM" >&5 +-echo "${ECHO_T}$NM" >&6 ++{ echo "$as_me:$LINENO: result: $NM" >&5 ++echo "${ECHO_T}$NM" >&6; } + +-echo "$as_me:$LINENO: checking whether ln -s works" >&5 +-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 ++echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } + LN_S=$as_ln_s + if test "$LN_S" = "ln -s"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + else +- echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +-echo "${ECHO_T}no, using $LN_S" >&6 ++ { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 ++echo "${ECHO_T}no, using $LN_S" >&6; } + fi + +-echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 +-echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 ++echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6; } + if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3631,8 +4153,8 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + esac + + fi +-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 ++echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } + file_magic_cmd=$lt_cv_file_magic_cmd + deplibs_check_method=$lt_cv_deplibs_check_method + +@@ -3642,8 +4164,8 @@ deplibs_check_method=$lt_cv_deplibs_chec + # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + + # find the maximum length of command line arguments +-echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +-echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 ++echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } + if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3694,11 +4216,11 @@ else + fi + + if test -n "$lt_cv_sys_max_cmd_len" ; then +- echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +-echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 ++ { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 ++echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } + else +- echo "$as_me:$LINENO: result: none" >&5 +-echo "${ECHO_T}none" >&6 ++ { echo "$as_me:$LINENO: result: none" >&5 ++echo "${ECHO_T}none" >&6; } + fi + + +@@ -3706,8 +4228,8 @@ fi + case $deplibs_check_method in + file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then +- echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 ++echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3761,17 +4283,17 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then +- echo "$as_me:$LINENO: checking for file" >&5 +-echo $ECHO_N "checking for file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for file" >&5 ++echo $ECHO_N "checking for file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3825,11 +4347,11 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + else +@@ -3844,8 +4366,8 @@ esac + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3858,32 +4380,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3896,27 +4420,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -3924,8 +4462,8 @@ fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3938,32 +4476,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3976,27 +4516,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -4011,22 +4565,22 @@ test "$GCC" = yes && libtool_flags="$lib + test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + + +-# Check whether --enable-libtool-lock or --disable-libtool-lock was given. ++# Check whether --enable-libtool-lock was given. + if test "${enable_libtool_lock+set}" = set; then +- enableval="$enable_libtool_lock" ++ enableval=$enable_libtool_lock; ++fi + +-fi; + test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" + test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + + +-# Check whether --with-pic or --without-pic was given. ++# Check whether --with-pic was given. + if test "${with_pic+set}" = set; then +- withval="$with_pic" +- pic_mode="$withval" ++ withval=$with_pic; pic_mode="$withval" + else + pic_mode=default +-fi; ++fi ++ + test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" + test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" + +@@ -4035,7 +4589,7 @@ test x"$pic_mode" = xno && libtool_flags + case $host in + *-*-irix6*) + # Find out which ABI we are using. +- echo '#line 4038 "configure"' > conftest.$ac_ext ++ echo '#line 4592 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? +@@ -4140,13 +4694,12 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*li + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" +- echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 ++echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } + if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + +- + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -4169,35 +4722,32 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-lt_cv_cc_needs_belf=no ++ lt_cv_cc_needs_belf=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' +@@ -4206,8 +4756,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +-echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 ++echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" +@@ -4237,39 +4787,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done ++ + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -4295,8 +4864,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -4322,10 +4891,9 @@ exec 5>>./config.log + + + +-# Check whether --enable-targets or --disable-targets was given. ++# Check whether --enable-targets was given. + if test "${enable_targets+set}" = set; then +- enableval="$enable_targets" +- case "${enableval}" in ++ enableval=$enable_targets; case "${enableval}" in + yes | "") { { echo "$as_me:$LINENO: error: enable-targets option must specify target names or 'all'" >&5 + echo "$as_me: error: enable-targets option must specify target names or 'all'" >&2;} + { (exit 1); exit 1; }; } +@@ -4333,31 +4901,32 @@ echo "$as_me: error: enable-targets opti + no) enable_targets= ;; + *) enable_targets=$enableval ;; + esac +-fi; # Check whether --enable-commonbfdlib or --disable-commonbfdlib was given. ++fi ++# Check whether --enable-commonbfdlib was given. + if test "${enable_commonbfdlib+set}" = set; then +- enableval="$enable_commonbfdlib" +- case "${enableval}" in ++ enableval=$enable_commonbfdlib; case "${enableval}" in + yes) commonbfdlib=true ;; + no) commonbfdlib=false ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for opcodes commonbfdlib option" >&5 + echo "$as_me: error: bad value ${enableval} for opcodes commonbfdlib option" >&2;} + { (exit 1); exit 1; }; } ;; + esac +-fi; ++fi ++ + + GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" + +-# Check whether --enable-werror or --disable-werror was given. ++# Check whether --enable-werror was given. + if test "${enable_werror+set}" = set; then +- enableval="$enable_werror" +- case "${enableval}" in ++ enableval=$enable_werror; case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-werror" >&5 + echo "$as_me: error: bad value ${enableval} for --enable-werror" >&2;} + { (exit 1); exit 1; }; } ;; + esac +-fi; ++fi ++ + + # Enable -Werror by default when using gcc + if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then +@@ -4374,10 +4943,9 @@ if test "${GCC}" = yes ; then + WARN_CFLAGS="${GCC_WARN_CFLAGS}" + fi + +-# Check whether --enable-build-warnings or --disable-build-warnings was given. ++# Check whether --enable-build-warnings was given. + if test "${enable_build_warnings+set}" = set; then +- enableval="$enable_build_warnings" +- case "${enableval}" in ++ enableval=$enable_build_warnings; case "${enableval}" in + yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; + no) if test "${GCC}" = yes ; then + WARN_CFLAGS="-w" +@@ -4388,7 +4956,8 @@ if test "${enable_build_warnings+set}" = + WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; + *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; + esac +-fi; ++fi ++ + + if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then + echo "Setting warning flags = $WARN_CFLAGS" 6>&1 +@@ -4398,7 +4967,7 @@ fi + + + +- ac_config_headers="$ac_config_headers config.h:config.in" ++ac_config_headers="$ac_config_headers config.h:config.in" + + + if test -z "$target" ; then +@@ -4407,17 +4976,17 @@ echo "$as_me: error: Unrecognized target + { (exit 1); exit 1; }; } + fi + +-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 +- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. ++{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 ++echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } ++ # Check whether --enable-maintainer-mode was given. + if test "${enable_maintainer_mode+set}" = set; then +- enableval="$enable_maintainer_mode" +- USE_MAINTAINER_MODE=$enableval ++ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval + else + USE_MAINTAINER_MODE=no +-fi; +- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 ++echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } + + + if test $USE_MAINTAINER_MODE = yes; then +@@ -4446,21 +5015,21 @@ esac + *) target_noncanonical=${target_alias} ;; + esac + +-echo "$as_me:$LINENO: checking whether to install libbfd" >&5 +-echo $ECHO_N "checking whether to install libbfd... $ECHO_C" >&6 +- # Check whether --enable-install-libbfd or --disable-install-libbfd was given. ++{ echo "$as_me:$LINENO: checking whether to install libbfd" >&5 ++echo $ECHO_N "checking whether to install libbfd... $ECHO_C" >&6; } ++ # Check whether --enable-install-libbfd was given. + if test "${enable_install_libbfd+set}" = set; then +- enableval="$enable_install_libbfd" +- install_libbfd_p=$enableval ++ enableval=$enable_install_libbfd; install_libbfd_p=$enableval + else + if test "${host}" = "${target}" || test "$enable_shared" = "yes"; then + install_libbfd_p=yes + else + install_libbfd_p=no + fi +-fi; +- echo "$as_me:$LINENO: result: $install_libbfd_p" >&5 +-echo "${ECHO_T}$install_libbfd_p" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $install_libbfd_p" >&5 ++echo "${ECHO_T}$install_libbfd_p" >&6; } + + + if test $install_libbfd_p = yes; then +@@ -4499,8 +5068,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4513,32 +5082,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4551,36 +5122,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4593,74 +5179,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4674,7 +5220,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -4685,6 +5231,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -4702,22 +5249,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4730,36 +5278,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4772,29 +5322,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -4807,27 +5373,41 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4850,50 +5430,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -4909,59 +5488,139 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +-if test "$ac_test_CFLAGS" = set; then +- CFLAGS=$ac_save_CFLAGS +-elif test $ac_cv_prog_cc_g = yes; then +- if test "$GCC" = yes; then +- CFLAGS="-g -O2" +- else +- CFLAGS="-g" +- fi +-else +- if test "$GCC" = yes; then ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } ++if test "$ac_test_CFLAGS" = set; then ++ CFLAGS=$ac_save_CFLAGS ++elif test $ac_cv_prog_cc_g = yes; then ++ if test "$GCC" = yes; then ++ CFLAGS="-g -O2" ++ else ++ CFLAGS="-g" ++ fi ++else ++ if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi + fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_prog_cc_stdc=no ++ ac_cv_prog_cc_c89=no + ac_save_CC=$CC + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -4995,12 +5654,17 @@ static char *f (char * (*g) (char **, in + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get ++ as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ ++ that's true only with -std. */ + int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ + int test (int i, double x); + struct s1 {int (*f) (int a);}; + struct s2 {int (*f) (double a);}; +@@ -5015,205 +5679,57 @@ return f (e, argv, 0) != argv[0] || f + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" + do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext ++ ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest.$ac_ext conftest.$ac_objext ++rm -f conftest.$ac_ext + CC=$ac_save_CC + + fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; + *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + esac + +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. +-cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-#include +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-continue +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h +-fi +- +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -5225,8 +5741,8 @@ ALL_LINGUAS="fr sv tr es da de id pt_BR + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5239,32 +5755,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5277,27 +5795,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -5307,8 +5839,8 @@ ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' + ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' + ac_compiler_gnu=$ac_cv_c_compiler_gnu +-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 ++echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } + # On Suns, sometimes $CPP names a directory. + if test -n "$CPP" && test -d "$CPP"; then + CPP= +@@ -5342,24 +5874,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5368,9 +5898,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi ++ + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5380,24 +5911,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5408,6 +5937,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi ++ + rm -f conftest.err conftest.$ac_ext + + done +@@ -5425,8 +5955,8 @@ fi + else + ac_cv_prog_CPP=$CPP + fi +-echo "$as_me:$LINENO: result: $CPP" >&5 +-echo "${ECHO_T}$CPP" >&6 ++{ echo "$as_me:$LINENO: result: $CPP" >&5 ++echo "${ECHO_T}$CPP" >&6; } + ac_preproc_ok=false + for ac_c_preproc_warn_flag in '' yes + do +@@ -5449,24 +5979,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5475,9 +6003,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi ++ + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5487,24 +6016,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5515,6 +6042,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi ++ + rm -f conftest.err conftest.$ac_ext + + done +@@ -5537,79 +6065,222 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +-echo "$as_me:$LINENO: checking for egrep" >&5 +-echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +-if test "${ac_cv_prog_egrep+set}" = set; then ++{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 ++echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } ++if test "${ac_cv_path_GREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ # Extract the first word of "grep ggrep" to use in msg output ++if test -z "$GREP"; then ++set dummy grep ggrep; ac_prog_name=$2 ++if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- if echo a | (grep -E '(a|b)') >/dev/null 2>&1 +- then ac_cv_prog_egrep='grep -E' +- else ac_cv_prog_egrep='egrep' ++ ac_path_GREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in grep ggrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue ++ # Check for GNU ac_path_GREP and select it if it is found. ++ # Check for GNU $ac_path_GREP ++case `"$ac_path_GREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'GREP' >> "conftest.nl" ++ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_GREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_GREP="$ac_path_GREP" ++ ac_path_GREP_max=$ac_count + fi +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +-echo "${ECHO_T}$ac_cv_prog_egrep" >&6 +- EGREP=$ac_cv_prog_egrep ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac + + +-echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +-if test "${ac_cv_header_stdc+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +-#include +-#include +-#include ++ $ac_path_GREP_found && break 3 ++ done ++done + +-int +-main () +-{ ++done ++IFS=$as_save_IFS ++ ++ ++fi ++ ++GREP="$ac_cv_path_GREP" ++if test -z "$GREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi + +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_header_stdc=yes + else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 ++ ac_cv_path_GREP=$GREP ++fi ++ + +-ac_cv_header_stdc=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 ++echo "${ECHO_T}$ac_cv_path_GREP" >&6; } ++ GREP="$ac_cv_path_GREP" + +-if test $ac_cv_header_stdc = yes; then +- # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +- cat >conftest.$ac_ext <<_ACEOF ++ ++{ echo "$as_me:$LINENO: checking for egrep" >&5 ++echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } ++if test "${ac_cv_path_EGREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 ++ then ac_cv_path_EGREP="$GREP -E" ++ else ++ # Extract the first word of "egrep" to use in msg output ++if test -z "$EGREP"; then ++set dummy egrep; ac_prog_name=$2 ++if test "${ac_cv_path_EGREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_path_EGREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in egrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue ++ # Check for GNU ac_path_EGREP and select it if it is found. ++ # Check for GNU $ac_path_EGREP ++case `"$ac_path_EGREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'EGREP' >> "conftest.nl" ++ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_EGREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_EGREP="$ac_path_EGREP" ++ ac_path_EGREP_max=$ac_count ++ fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac ++ ++ ++ $ac_path_EGREP_found && break 3 ++ done ++done ++ ++done ++IFS=$as_save_IFS ++ ++ ++fi ++ ++EGREP="$ac_cv_path_EGREP" ++if test -z "$EGREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi ++ ++else ++ ac_cv_path_EGREP=$EGREP ++fi ++ ++ ++ fi ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 ++echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } ++ EGREP="$ac_cv_path_EGREP" ++ ++ ++{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 ++echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } ++if test "${ac_cv_header_stdc+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++#include ++#include ++#include ++#include ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_header_stdc=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_cv_header_stdc=no ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++if test $ac_cv_header_stdc = yes; then ++ # SunOS 4.x string.h does not declare mem*, contrary to ANSI. ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -5661,6 +6332,7 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include ++#include + #if ((' ' & 0x0FF) == 0x020) + # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') + # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +@@ -5680,18 +6352,27 @@ main () + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) +- exit(2); +- exit (0); ++ return 2; ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -5704,12 +6385,14 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_header_stdc=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +-echo "${ECHO_T}$ac_cv_header_stdc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 ++echo "${ECHO_T}$ac_cv_header_stdc" >&6; } + if test $ac_cv_header_stdc = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -5718,8 +6401,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 ++echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } + if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5737,10 +6420,10 @@ main () + #ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; +- const charset x; ++ const charset cs; + /* SunOS 4.1.1 cc rejects this. */ +- char const *const *ccp; +- char **p; ++ char const *const *pcpcc; ++ char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; +@@ -5749,16 +6432,17 @@ main () + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; +- ccp = &g + (g ? g-g : 0); ++ pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ +- ++ccp; +- p = (char**) ccp; +- ccp = (char const *const *) p; ++ ++pcpcc; ++ ppc = (char**) pcpcc; ++ pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; ++ if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; +@@ -5777,7 +6461,9 @@ main () + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; ++ if (!foo) return 0; + } ++ return !cs[0] && !zero.x; + #endif + + ; +@@ -5785,38 +6471,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_c_const=no ++ ac_cv_c_const=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +-echo "${ECHO_T}$ac_cv_c_const" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 ++echo "${ECHO_T}$ac_cv_c_const" >&6; } + if test $ac_cv_c_const = no; then + + cat >>confdefs.h <<\_ACEOF +@@ -5825,8 +6507,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for inline" >&5 +-echo $ECHO_N "checking for inline... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for inline" >&5 ++echo $ECHO_N "checking for inline... $ECHO_C" >&6; } + if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5846,39 +6528,37 @@ $ac_kw foo_t foo () {return 0; } + + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_c_inline=$ac_kw; break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_c_inline=$ac_kw + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ test "$ac_cv_c_inline" != no && break + done + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +-echo "${ECHO_T}$ac_cv_c_inline" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 ++echo "${ECHO_T}$ac_cv_c_inline" >&6; } + + + case $ac_cv_c_inline in +@@ -5910,9 +6590,9 @@ for ac_header in sys/types.h sys/stat.h + inttypes.h stdint.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -5926,38 +6606,35 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_Header=no" ++ eval "$as_ac_Header=no" + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +@@ -5968,8 +6645,8 @@ fi + done + + +-echo "$as_me:$LINENO: checking for off_t" >&5 +-echo $ECHO_N "checking for off_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for off_t" >&5 ++echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } + if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5980,62 +6657,59 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef off_t ac__type_new_; + int + main () + { +-if ((off_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (off_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_off_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_off_t=no ++ ac_cv_type_off_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +-echo "${ECHO_T}$ac_cv_type_off_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 ++echo "${ECHO_T}$ac_cv_type_off_t" >&6; } + if test $ac_cv_type_off_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define off_t long ++#define off_t long int + _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for size_t" >&5 +-echo $ECHO_N "checking for size_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for size_t" >&5 ++echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } + if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6046,64 +6720,61 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef size_t ac__type_new_; + int + main () + { +-if ((size_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (size_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_size_t=no ++ ac_cv_type_size_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +-echo "${ECHO_T}$ac_cv_type_size_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 ++echo "${ECHO_T}$ac_cv_type_size_t" >&6; } + if test $ac_cv_type_size_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define size_t unsigned ++#define size_t unsigned int + _ACEOF + + fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works + # for constant arguments. Useless! +-echo "$as_me:$LINENO: checking for working alloca.h" >&5 +-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 ++echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } + if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6118,44 +6789,42 @@ int + main () + { + char *p = (char *) alloca (2 * sizeof (int)); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_working_alloca_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_working_alloca_h=no ++ ac_cv_working_alloca_h=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +-echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 ++echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } + if test $ac_cv_working_alloca_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6164,8 +6833,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for alloca" >&5 +-echo $ECHO_N "checking for alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for alloca" >&5 ++echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } + if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6182,7 +6851,7 @@ cat >>conftest.$ac_ext <<_ACEOF + # include + # define alloca _alloca + # else +-# if HAVE_ALLOCA_H ++# ifdef HAVE_ALLOCA_H + # include + # else + # ifdef _AIX +@@ -6200,44 +6869,42 @@ int + main () + { + char *p = (char *) alloca (1); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_func_alloca_works=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_func_alloca_works=no ++ ac_cv_func_alloca_works=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +-echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 ++echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } + + if test $ac_cv_func_alloca_works = yes; then + +@@ -6251,15 +6918,15 @@ else + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + +-ALLOCA=alloca.$ac_objext ++ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + + cat >>confdefs.h <<\_ACEOF + #define C_ALLOCA 1 + _ACEOF + + +-echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +-echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 ++echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } + if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6269,7 +6936,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#if defined(CRAY) && ! defined(CRAY2) ++#if defined CRAY && ! defined CRAY2 + webecray + #else + wenotbecray +@@ -6285,14 +6952,14 @@ fi + rm -f conftest* + + fi +-echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +-echo "${ECHO_T}$ac_cv_os_cray" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 ++echo "${ECHO_T}$ac_cv_os_cray" >&6; } + if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6318,68 +6985,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -6392,8 +7051,8 @@ fi + done + fi + +-echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +-echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 ++echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } + if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6406,6 +7065,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ ++$ac_includes_default + int + find_stack_direction () + { +@@ -6423,17 +7083,26 @@ find_stack_direction () + int + main () + { +- exit (find_stack_direction () < 0); ++ return find_stack_direction () < 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6446,11 +7115,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_c_stack_direction=-1 + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +-echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 ++echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } + + cat >>confdefs.h <<_ACEOF + #define STACK_DIRECTION $ac_cv_c_stack_direction +@@ -6464,18 +7135,19 @@ fi + for ac_header in stdlib.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6486,41 +7158,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6529,24 +7197,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -6554,9 +7220,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -6580,25 +7247,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -6614,9 +7275,9 @@ done + for ac_func in getpagesize + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6642,68 +7303,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -6712,8 +7365,8 @@ _ACEOF + fi + done + +-echo "$as_me:$LINENO: checking for working mmap" >&5 +-echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working mmap" >&5 ++echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } + if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6755,21 +7408,21 @@ $ac_includes_default + #include + #include + +-#if !STDC_HEADERS && !HAVE_STDLIB_H ++#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H + char *malloc (); + #endif + + /* This mess was copied from the GNU getpagesize.h. */ +-#if !HAVE_GETPAGESIZE ++#ifndef HAVE_GETPAGESIZE + /* Assume that all systems that can run configure have sys/param.h. */ +-# if !HAVE_SYS_PARAM_H ++# ifndef HAVE_SYS_PARAM_H + # define HAVE_SYS_PARAM_H 1 + # endif + + # ifdef _SC_PAGESIZE + # define getpagesize() sysconf(_SC_PAGESIZE) + # else /* no _SC_PAGESIZE */ +-# if HAVE_SYS_PARAM_H ++# ifdef HAVE_SYS_PARAM_H + # include + # ifdef EXEC_PAGESIZE + # define getpagesize() EXEC_PAGESIZE +@@ -6808,15 +7461,15 @@ main () + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) +- exit (1); ++ return 1; + if (write (fd, data, pagesize) != pagesize) +- exit (1); ++ return 1; + close (fd); + + /* Next, try to mmap the file at a fixed address which already has +@@ -6824,17 +7477,17 @@ main () + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) +- exit (1); ++ return 1; + data2 = (char *) malloc (2 * pagesize); + if (!data2) +- exit (1); +- data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); ++ return 1; ++ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) +- exit (1); ++ return 1; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on +@@ -6843,24 +7496,33 @@ main () + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) +- exit (1); ++ return 1; + if (read (fd, data3, pagesize) != pagesize) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) +- exit (1); ++ return 1; + close (fd); +- exit (0); ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6873,11 +7535,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_func_mmap_fixed_mapped=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi ++ ++ + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +-echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 ++echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } + if test $ac_cv_func_mmap_fixed_mapped = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6901,18 +7565,19 @@ for ac_header in argz.h limits.h locale. + unistd.h values.h sys/param.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6923,41 +7588,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6966,24 +7627,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -6991,9 +7650,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -7017,25 +7677,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -7061,9 +7715,9 @@ for ac_func in getcwd munmap putenv sete + __argz_count __argz_stringify __argz_next + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7089,68 +7743,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7165,9 +7811,9 @@ done + for ac_func in stpcpy + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7193,68 +7839,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7273,8 +7911,8 @@ _ACEOF + fi + + if test $ac_cv_header_locale_h = yes; then +- echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 +-echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 ++echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; } + if test "${am_cv_val_LC_MESSAGES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7294,39 +7932,36 @@ return LC_MESSAGES + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + am_cv_val_LC_MESSAGES=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-am_cv_val_LC_MESSAGES=no ++ am_cv_val_LC_MESSAGES=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 +-echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 ++echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; } + if test $am_cv_val_LC_MESSAGES = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -7335,34 +7970,34 @@ _ACEOF + + fi + fi +- echo "$as_me:$LINENO: checking whether NLS is requested" >&5 +-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 +- # Check whether --enable-nls or --disable-nls was given. ++ { echo "$as_me:$LINENO: checking whether NLS is requested" >&5 ++echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; } ++ # Check whether --enable-nls was given. + if test "${enable_nls+set}" = set; then +- enableval="$enable_nls" +- USE_NLS=$enableval ++ enableval=$enable_nls; USE_NLS=$enableval + else + USE_NLS=yes +-fi; +- echo "$as_me:$LINENO: result: $USE_NLS" >&5 +-echo "${ECHO_T}$USE_NLS" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $USE_NLS" >&5 ++echo "${ECHO_T}$USE_NLS" >&6; } + + + USE_INCLUDED_LIBINTL=no + + if test "$USE_NLS" = "yes"; then +- echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 +-echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 ++echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; } + +-# Check whether --with-included-gettext or --without-included-gettext was given. ++# Check whether --with-included-gettext was given. + if test "${with_included_gettext+set}" = set; then +- withval="$with_included_gettext" +- nls_cv_force_use_gnu_gettext=$withval ++ withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval + else + nls_cv_force_use_gnu_gettext=no +-fi; +- echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 +-echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 ++fi ++ ++ { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 ++echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; } + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then +@@ -7371,17 +8006,17 @@ echo "${ECHO_T}$nls_cv_force_use_gnu_get + CATOBJEXT= + + if test "${ac_cv_header_libintl_h+set}" = set; then +- echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking libintl.h usability" >&5 +-echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h usability" >&5 ++echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7392,41 +8027,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking libintl.h presence" >&5 +-echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h presence" >&5 ++echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7435,24 +8066,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -7460,9 +8089,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -7486,30 +8116,23 @@ echo "$as_me: WARNING: libintl.h: se + echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_libintl_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + + fi + if test $ac_cv_header_libintl_h = yes; then +- echo "$as_me:$LINENO: checking for gettext in libc" >&5 +-echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libc" >&5 ++echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7529,43 +8152,40 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libc=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libc=no ++ gt_cv_func_gettext_libc=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6; } + + if test "$gt_cv_func_gettext_libc" != "yes"; then +- echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 +-echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 ++echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6; } + if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7578,59 +8198,56 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char bindtextdomain (); + int + main () + { +-bindtextdomain (); ++return bindtextdomain (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_lib_intl_bindtextdomain=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_intl_bindtextdomain=no ++ ac_cv_lib_intl_bindtextdomain=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$ac_check_lib_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 +-echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 ++echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6; } + if test $ac_cv_lib_intl_bindtextdomain = yes; then +- echo "$as_me:$LINENO: checking for gettext in libintl" >&5 +-echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libintl" >&5 ++echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libintl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7650,39 +8267,36 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libintl=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libintl=no ++ gt_cv_func_gettext_libintl=no + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6; } + fi + + fi +@@ -7696,8 +8310,8 @@ _ACEOF + + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7723,20 +8337,20 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + if test "$MSGFMT" != "no"; then + + for ac_func in dcgettext + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7762,68 +8376,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7834,8 +8440,8 @@ done + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7850,32 +8456,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7901,11 +8508,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + cat >conftest.$ac_ext <<_ACEOF +@@ -7925,37 +8532,34 @@ extern int _nl_msg_cat_cntr; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + CATOBJEXT=.gmo + DATADIRNAME=share + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-CATOBJEXT=.mo ++ CATOBJEXT=.mo + DATADIRNAME=lib + fi +-rm -f conftest.err conftest.$ac_objext \ ++ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + INSTOBJEXT=.mo + fi +@@ -7977,8 +8581,8 @@ fi + INTLOBJS="\$(GETTOBJS)" + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8004,17 +8608,17 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8029,32 +8633,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + ++ + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8080,11 +8685,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + +@@ -8103,8 +8708,8 @@ fi + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else +- echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 +-echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6 ++ { echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 ++echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6; } + XGETTEXT=":" + fi + fi +@@ -8153,8 +8758,8 @@ _ACEOF + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else +- echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 +-echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 ++echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6; } + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in +@@ -8162,8 +8767,8 @@ echo $ECHO_N "checking for catalogs to b + esac + done + LINGUAS=$NEW_LINGUAS +- echo "$as_me:$LINENO: result: $LINGUAS" >&5 +-echo "${ECHO_T}$LINGUAS" >&6 ++ { echo "$as_me:$LINENO: result: $LINGUAS" >&5 ++echo "${ECHO_T}$LINGUAS" >&6; } + fi + + if test -n "$LINGUAS"; then +@@ -8182,17 +8787,17 @@ echo "${ECHO_T}$LINGUAS" >&6 + if test -f $srcdir/po2tbl.sed.in; then + if test "$CATOBJEXT" = ".cat"; then + if test "${ac_cv_header_linux_version_h+set}" = set; then +- echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking linux/version.h usability" >&5 +-echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h usability" >&5 ++echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8203,41 +8808,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking linux/version.h presence" >&5 +-echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h presence" >&5 ++echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8246,24 +8847,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -8271,9 +8870,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -8297,25 +8897,18 @@ echo "$as_me: WARNING: linux/version.h: + echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/version.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: linux/version.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_linux_version_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + + fi + if test $ac_cv_header_linux_version_h = yes; then +@@ -8380,8 +8973,8 @@ fi + if test "x$cross_compiling" = "xno"; then + EXEEXT_FOR_BUILD='$(EXEEXT)' + else +- echo "$as_me:$LINENO: checking for build system executable suffix" >&5 +-echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for build system executable suffix" >&5 ++echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6; } + if test "${bfd_cv_build_exeext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8398,8 +8991,8 @@ else + rm -f conftest* + test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no + fi +-echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 +-echo "${ECHO_T}$bfd_cv_build_exeext" >&6 ++{ echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 ++echo "${ECHO_T}$bfd_cv_build_exeext" >&6; } + EXEEXT_FOR_BUILD="" + test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} + fi +@@ -8419,8 +9012,8 @@ fi + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -8442,7 +9035,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -8461,21 +9054,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -8492,18 +9086,19 @@ test -z "$INSTALL_DATA" && INSTALL_DATA= + for ac_header in string.h strings.h stdlib.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8514,41 +9109,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8557,24 +9148,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -8582,9 +9171,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi ++ + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -8608,25 +9198,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 ++ + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -8639,8 +9223,8 @@ fi + done + + +-echo "$as_me:$LINENO: checking whether basename is declared" >&5 +-echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether basename is declared" >&5 ++echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_basename+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8655,7 +9239,7 @@ int + main () + { + #ifndef basename +- char *p = (char *) basename; ++ (void) basename; + #endif + + ; +@@ -8663,38 +9247,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_basename=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_basename=no ++ ac_cv_have_decl_basename=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_basename" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_basename" >&6; } + if test $ac_cv_have_decl_basename = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -8715,10 +9295,9 @@ fi + cgen_maint=no + cgendir='$(srcdir)/../cgen' + +-# Check whether --enable-cgen-maint or --disable-cgen-maint was given. ++# Check whether --enable-cgen-maint was given. + if test "${enable_cgen_maint+set}" = set; then +- enableval="$enable_cgen_maint" +- case "${enableval}" in ++ enableval=$enable_cgen_maint; case "${enableval}" in + yes) cgen_maint=yes ;; + no) cgen_maint=no ;; + *) +@@ -8729,7 +9308,8 @@ if test "${enable_cgen_maint+set}" = set + cgendir=${cgen_maint}/lib/cgen + ;; + esac +-fi; ++fi ++ + + if test x${cgen_maint} = xyes; then + CGEN_MAINT_TRUE= +@@ -8805,6 +9385,7 @@ if test x${all_targets} = xfalse ; then + bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;; + bfd_arm_arch) ta="$ta arm-dis.lo" ;; + bfd_avr_arch) ta="$ta avr-dis.lo" ;; ++ bfd_avr32_arch) ta="$ta avr32-asm.lo avr32-dis.lo avr32-opc.lo" ;; + bfd_bfin_arch) ta="$ta bfin-dis.lo" ;; + bfd_cris_arch) ta="$ta cris-dis.lo cris-opc.lo cgen-bitset.lo" ;; + bfd_crx_arch) ta="$ta crx-dis.lo crx-opc.lo" ;; +@@ -8922,9 +9503,9 @@ fi + + + +- ac_config_files="$ac_config_files Makefile po/Makefile.in:po/Make-in" ++ac_config_files="$ac_config_files Makefile po/Makefile.in:po/Make-in" + +- ac_config_commands="$ac_config_commands default" ++ac_config_commands="$ac_config_commands default" + + cat >confcache <<\_ACEOF + # This file is a shell script that caches the results of configure +@@ -8944,39 +9525,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done ++ + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -8985,32 +9585,18 @@ test "x$prefix" = xNONE && prefix=$ac_de + # Let make expand exec_prefix. + test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +-# VPATH may cause trouble with some makes, so we remove $(srcdir), +-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +-# trailing colons and then remove the whole line if VPATH becomes empty +-# (actually we leave an empty line to preserve line numbers). +-if test "x$srcdir" = x.; then +- ac_vpsub='/^[ ]*VPATH[ ]*=/{ +-s/:*\$(srcdir):*/:/; +-s/:*\${srcdir}:*/:/; +-s/:*@srcdir@:*/:/; +-s/^\([^=]*=[ ]*\):*/\1/; +-s/:*$//; +-s/^[^=]*=[ ]*$//; +-}' +-fi +- + DEFS=-DHAVE_CONFIG_H + + ac_libobjs= + ac_ltlibobjs= + for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. +- ac_i=`echo "$ac_i" | +- sed 's/\$U\././;s/\.o$//;s/\.obj$//'` +- # 2. Add them. +- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" +- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' ++ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ++ ac_i=`echo "$ac_i" | sed "$ac_script"` ++ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR ++ # will be set to the directory where LIBOBJS objects are built. ++ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ++ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + done + LIBOBJS=$ac_libobjs + +@@ -9076,17 +9662,45 @@ cat >>$CONFIG_STATUS <<\_ACEOF + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac ++ ++fi ++ ++ ++ ++ ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -9096,8 +9710,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi ++ + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -9111,18 +9760,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -9130,159 +9780,120 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + ++# CDPATH. ++$as_unset CDPATH + +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits +- +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh +-fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done +- +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in +- /*) +- if ("$as_dir/$as_base" -c ' +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || +- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} ++ chmod +x "$as_me.lineno" || ++ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -9291,7 +9902,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -9300,31 +9932,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH +- + exec 6>&1 + +-# Open the log real soon, to keep \$[0] and so on meaningful, and to ++# Save the log message, to keep $[0] and so on meaningful, and to + # report actual input values of CONFIG_FILES etc. instead of their +-# values after options handling. Logging --version etc. is OK. +-exec 5>>config.log +-{ +- echo +- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +-## Running $as_me. ## +-_ASBOX +-} >&5 +-cat >&5 <<_CSEOF +- ++# values after options handling. ++ac_log=" + This file was extended by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS +@@ -9332,30 +9947,20 @@ generated by GNU Autoconf 2.59. Invocat + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +-_CSEOF +-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +-echo >&5 ++on `(hostname || uname -n) 2>/dev/null | sed 1q` ++" ++ + _ACEOF + ++cat >>$CONFIG_STATUS <<_ACEOF + # Files that config.status was made for. +-if test -n "$ac_config_files"; then +- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_headers"; then +- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_links"; then +- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +-fi ++config_files="$ac_config_files" ++config_headers="$ac_config_headers" ++config_commands="$ac_config_commands" + +-if test -n "$ac_config_commands"; then +- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +-fi ++_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +- + ac_cs_usage="\ + \`$as_me' instantiates files from templates according to the + current configuration. +@@ -9363,7 +9968,7 @@ current configuration. + Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit +- -V, --version print version number, then exit ++ -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions +@@ -9382,19 +9987,21 @@ Configuration commands: + $config_commands + + Report bugs to ." +-_ACEOF + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + ac_cs_version="\\ + config.status +-configured by $0, generated by GNU Autoconf 2.59, +- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" ++configured by $0, generated by GNU Autoconf 2.61, ++ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 2006 Free Software Foundation, Inc. + This config.status script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it." +-srcdir=$srcdir +-INSTALL="$INSTALL" ++ ++ac_pwd='$ac_pwd' ++srcdir='$srcdir' ++INSTALL='$INSTALL' + _ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +@@ -9405,39 +10012,24 @@ while test $# != 0 + do + case $1 in + --*=*) +- ac_option=`expr "x$1" : 'x\([^=]*\)='` +- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ++ ac_option=`expr "X$1" : 'X\([^=]*\)='` ++ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; +- -*) ++ *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; +- *) # This is not an option, so the user has probably given explicit +- # arguments. +- ac_option=$1 +- ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; +- --version | --vers* | -V ) +- echo "$ac_cs_version"; exit 0 ;; +- --he | --h) +- # Conflict between --help and --header +- { { echo "$as_me:$LINENO: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&2;} +- { (exit 1); exit 1; }; };; +- --help | --hel | -h ) +- echo "$ac_cs_usage"; exit 0 ;; +- --debug | --d* | -d ) ++ --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) ++ echo "$ac_cs_version"; exit ;; ++ --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift +@@ -9447,18 +10039,24 @@ Try \`$0 --help' for more information." + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; ++ --he | --h) ++ # Conflict between --help and --header ++ { echo "$as_me: error: ambiguous option: $1 ++Try \`$0 --help' for more information." >&2 ++ { (exit 1); exit 1; }; };; ++ --help | --hel | -h ) ++ echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. +- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&2;} ++ -*) { echo "$as_me: error: unrecognized option: $1 ++Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + +- *) ac_config_targets="$ac_config_targets $1" ;; ++ *) ac_config_targets="$ac_config_targets $1" ++ ac_need_defaults=false ;; + + esac + shift +@@ -9474,40 +10072,52 @@ fi + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + if \$ac_cs_recheck; then +- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 +- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion ++ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 ++ CONFIG_SHELL=$SHELL ++ export CONFIG_SHELL ++ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + fi + + _ACEOF ++cat >>$CONFIG_STATUS <<\_ACEOF ++exec 5>>config.log ++{ ++ echo ++ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ++## Running $as_me. ## ++_ASBOX ++ echo "$ac_log" ++} >&5 + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + # +-# INIT-COMMANDS section. ++# INIT-COMMANDS + # +- + AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + + _ACEOF + +- +- + cat >>$CONFIG_STATUS <<\_ACEOF ++ ++# Handling of arguments. + for ac_config_target in $ac_config_targets + do +- case "$ac_config_target" in +- # Handling of arguments. +- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; +- "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; +- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; +- "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; +- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ case $ac_config_target in ++ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; ++ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; ++ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; ++ "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; ++ + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac + done + ++ + # If the user did not use the arguments to specify the items to instantiate, + # then the envvar interface is used. Set only those that are not. + # We use the long form for the default assignment because of an extremely +@@ -9519,635 +10129,623 @@ if $ac_need_defaults; then + fi + + # Have a temporary directory for convenience. Make it in the build tree +-# simply because there is no reason to put it here, and in addition, ++# simply because there is no reason against having it here, and in addition, + # creating and moving files from /tmp can sometimes cause problems. +-# Create a temporary directory, and hook for its removal unless debugging. ++# Hook for its removal unless debugging. ++# Note that there is a small window in which the directory will not be cleaned: ++# after its creation but before its name has been assigned to `$tmp'. + $debug || + { +- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 ++ tmp= ++ trap 'exit_status=$? ++ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ++' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 + } +- + # Create a (secure) tmp directory for tmp files. + + { +- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && ++ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" + } || + { +- tmp=./confstat$$-$RANDOM +- (umask 077 && mkdir $tmp) ++ tmp=./conf$$-$RANDOM ++ (umask 077 && mkdir "$tmp") + } || + { + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } + } + +-_ACEOF +- +-cat >>$CONFIG_STATUS <<_ACEOF +- + # +-# CONFIG_FILES section. ++# Set up the sed scripts for CONFIG_FILES section. + # + + # No need to generate the scripts if there are no CONFIG_FILES. + # This happens for instance when ./config.status config.h +-if test -n "\$CONFIG_FILES"; then +- # Protect against being on the right side of a sed subst in config.status. +- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; +- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +-s,@SHELL@,$SHELL,;t t +-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +-s,@exec_prefix@,$exec_prefix,;t t +-s,@prefix@,$prefix,;t t +-s,@program_transform_name@,$program_transform_name,;t t +-s,@bindir@,$bindir,;t t +-s,@sbindir@,$sbindir,;t t +-s,@libexecdir@,$libexecdir,;t t +-s,@datadir@,$datadir,;t t +-s,@sysconfdir@,$sysconfdir,;t t +-s,@sharedstatedir@,$sharedstatedir,;t t +-s,@localstatedir@,$localstatedir,;t t +-s,@libdir@,$libdir,;t t +-s,@includedir@,$includedir,;t t +-s,@oldincludedir@,$oldincludedir,;t t +-s,@infodir@,$infodir,;t t +-s,@mandir@,$mandir,;t t +-s,@build_alias@,$build_alias,;t t +-s,@host_alias@,$host_alias,;t t +-s,@target_alias@,$target_alias,;t t +-s,@DEFS@,$DEFS,;t t +-s,@ECHO_C@,$ECHO_C,;t t +-s,@ECHO_N@,$ECHO_N,;t t +-s,@ECHO_T@,$ECHO_T,;t t +-s,@LIBS@,$LIBS,;t t +-s,@build@,$build,;t t +-s,@build_cpu@,$build_cpu,;t t +-s,@build_vendor@,$build_vendor,;t t +-s,@build_os@,$build_os,;t t +-s,@host@,$host,;t t +-s,@host_cpu@,$host_cpu,;t t +-s,@host_vendor@,$host_vendor,;t t +-s,@host_os@,$host_os,;t t +-s,@target@,$target,;t t +-s,@target_cpu@,$target_cpu,;t t +-s,@target_vendor@,$target_vendor,;t t +-s,@target_os@,$target_os,;t t +-s,@CC@,$CC,;t t +-s,@CFLAGS@,$CFLAGS,;t t +-s,@LDFLAGS@,$LDFLAGS,;t t +-s,@CPPFLAGS@,$CPPFLAGS,;t t +-s,@ac_ct_CC@,$ac_ct_CC,;t t +-s,@EXEEXT@,$EXEEXT,;t t +-s,@OBJEXT@,$OBJEXT,;t t +-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +-s,@INSTALL_DATA@,$INSTALL_DATA,;t t +-s,@CYGPATH_W@,$CYGPATH_W,;t t +-s,@PACKAGE@,$PACKAGE,;t t +-s,@VERSION@,$VERSION,;t t +-s,@ACLOCAL@,$ACLOCAL,;t t +-s,@AUTOCONF@,$AUTOCONF,;t t +-s,@AUTOMAKE@,$AUTOMAKE,;t t +-s,@AUTOHEADER@,$AUTOHEADER,;t t +-s,@MAKEINFO@,$MAKEINFO,;t t +-s,@install_sh@,$install_sh,;t t +-s,@STRIP@,$STRIP,;t t +-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +-s,@mkdir_p@,$mkdir_p,;t t +-s,@AWK@,$AWK,;t t +-s,@SET_MAKE@,$SET_MAKE,;t t +-s,@am__leading_dot@,$am__leading_dot,;t t +-s,@AMTAR@,$AMTAR,;t t +-s,@am__tar@,$am__tar,;t t +-s,@am__untar@,$am__untar,;t t +-s,@DEPDIR@,$DEPDIR,;t t +-s,@am__include@,$am__include,;t t +-s,@am__quote@,$am__quote,;t t +-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +-s,@CCDEPMODE@,$CCDEPMODE,;t t +-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +-s,@AR@,$AR,;t t +-s,@ac_ct_AR@,$ac_ct_AR,;t t +-s,@RANLIB@,$RANLIB,;t t +-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +-s,@LN_S@,$LN_S,;t t +-s,@LIBTOOL@,$LIBTOOL,;t t +-s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t +-s,@NO_WERROR@,$NO_WERROR,;t t +-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +-s,@MAINT@,$MAINT,;t t +-s,@INSTALL_LIBBFD_TRUE@,$INSTALL_LIBBFD_TRUE,;t t +-s,@INSTALL_LIBBFD_FALSE@,$INSTALL_LIBBFD_FALSE,;t t +-s,@host_noncanonical@,$host_noncanonical,;t t +-s,@target_noncanonical@,$target_noncanonical,;t t +-s,@bfdlibdir@,$bfdlibdir,;t t +-s,@bfdincludedir@,$bfdincludedir,;t t +-s,@CPP@,$CPP,;t t +-s,@EGREP@,$EGREP,;t t +-s,@ALLOCA@,$ALLOCA,;t t +-s,@USE_NLS@,$USE_NLS,;t t +-s,@MSGFMT@,$MSGFMT,;t t +-s,@GMSGFMT@,$GMSGFMT,;t t +-s,@XGETTEXT@,$XGETTEXT,;t t +-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t +-s,@CATALOGS@,$CATALOGS,;t t +-s,@CATOBJEXT@,$CATOBJEXT,;t t +-s,@DATADIRNAME@,$DATADIRNAME,;t t +-s,@GMOFILES@,$GMOFILES,;t t +-s,@INSTOBJEXT@,$INSTOBJEXT,;t t +-s,@INTLDEPS@,$INTLDEPS,;t t +-s,@INTLLIBS@,$INTLLIBS,;t t +-s,@INTLOBJS@,$INTLOBJS,;t t +-s,@POFILES@,$POFILES,;t t +-s,@POSUB@,$POSUB,;t t +-s,@INCLUDE_LOCALE_H@,$INCLUDE_LOCALE_H,;t t +-s,@GT_NO@,$GT_NO,;t t +-s,@GT_YES@,$GT_YES,;t t +-s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +-s,@l@,$l,;t t +-s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t +-s,@EXEEXT_FOR_BUILD@,$EXEEXT_FOR_BUILD,;t t +-s,@HDEFINES@,$HDEFINES,;t t +-s,@CGEN_MAINT_TRUE@,$CGEN_MAINT_TRUE,;t t +-s,@CGEN_MAINT_FALSE@,$CGEN_MAINT_FALSE,;t t +-s,@cgendir@,$cgendir,;t t +-s,@WIN32LDFLAGS@,$WIN32LDFLAGS,;t t +-s,@WIN32LIBADD@,$WIN32LIBADD,;t t +-s,@archdefs@,$archdefs,;t t +-s,@BFD_MACHINES@,$BFD_MACHINES,;t t +-s,@LIBOBJS@,$LIBOBJS,;t t +-s,@LTLIBOBJS@,$LTLIBOBJS,;t t +-CEOF +- +-_ACEOF +- +- cat >>$CONFIG_STATUS <<\_ACEOF +- # Split the substitutions into bite-sized pieces for seds with +- # small command number limits, like on Digital OSF/1 and HP-UX. +- ac_max_sed_lines=48 +- ac_sed_frag=1 # Number of current file. +- ac_beg=1 # First line for current file. +- ac_end=$ac_max_sed_lines # Line after last line for current file. +- ac_more_lines=: +- ac_sed_cmds= +- while $ac_more_lines; do +- if test $ac_beg -gt 1; then +- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- else +- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- fi +- if test ! -s $tmp/subs.frag; then +- ac_more_lines=false +- else +- # The purpose of the label and of the branching condition is to +- # speed up the sed processing (if there are no `@' at all, there +- # is no need to browse any of the substitutions). +- # These are the two extra sed commands mentioned above. +- (echo ':t +- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" +- else +- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" +- fi +- ac_sed_frag=`expr $ac_sed_frag + 1` +- ac_beg=$ac_end +- ac_end=`expr $ac_end + $ac_max_sed_lines` +- fi +- done +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds=cat ++if test -n "$CONFIG_FILES"; then ++ ++_ACEOF ++ ++ ++ ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++SHELL!$SHELL$ac_delim ++PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim ++PACKAGE_NAME!$PACKAGE_NAME$ac_delim ++PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim ++PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim ++PACKAGE_STRING!$PACKAGE_STRING$ac_delim ++PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim ++exec_prefix!$exec_prefix$ac_delim ++prefix!$prefix$ac_delim ++program_transform_name!$program_transform_name$ac_delim ++bindir!$bindir$ac_delim ++sbindir!$sbindir$ac_delim ++libexecdir!$libexecdir$ac_delim ++datarootdir!$datarootdir$ac_delim ++datadir!$datadir$ac_delim ++sysconfdir!$sysconfdir$ac_delim ++sharedstatedir!$sharedstatedir$ac_delim ++localstatedir!$localstatedir$ac_delim ++includedir!$includedir$ac_delim ++oldincludedir!$oldincludedir$ac_delim ++docdir!$docdir$ac_delim ++infodir!$infodir$ac_delim ++htmldir!$htmldir$ac_delim ++dvidir!$dvidir$ac_delim ++pdfdir!$pdfdir$ac_delim ++psdir!$psdir$ac_delim ++libdir!$libdir$ac_delim ++localedir!$localedir$ac_delim ++mandir!$mandir$ac_delim ++DEFS!$DEFS$ac_delim ++ECHO_C!$ECHO_C$ac_delim ++ECHO_N!$ECHO_N$ac_delim ++ECHO_T!$ECHO_T$ac_delim ++LIBS!$LIBS$ac_delim ++build_alias!$build_alias$ac_delim ++host_alias!$host_alias$ac_delim ++target_alias!$target_alias$ac_delim ++build!$build$ac_delim ++build_cpu!$build_cpu$ac_delim ++build_vendor!$build_vendor$ac_delim ++build_os!$build_os$ac_delim ++host!$host$ac_delim ++host_cpu!$host_cpu$ac_delim ++host_vendor!$host_vendor$ac_delim ++host_os!$host_os$ac_delim ++target!$target$ac_delim ++target_cpu!$target_cpu$ac_delim ++target_vendor!$target_vendor$ac_delim ++target_os!$target_os$ac_delim ++CC!$CC$ac_delim ++CFLAGS!$CFLAGS$ac_delim ++LDFLAGS!$LDFLAGS$ac_delim ++CPPFLAGS!$CPPFLAGS$ac_delim ++ac_ct_CC!$ac_ct_CC$ac_delim ++EXEEXT!$EXEEXT$ac_delim ++OBJEXT!$OBJEXT$ac_delim ++INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim ++INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim ++INSTALL_DATA!$INSTALL_DATA$ac_delim ++CYGPATH_W!$CYGPATH_W$ac_delim ++PACKAGE!$PACKAGE$ac_delim ++VERSION!$VERSION$ac_delim ++ACLOCAL!$ACLOCAL$ac_delim ++AUTOCONF!$AUTOCONF$ac_delim ++AUTOMAKE!$AUTOMAKE$ac_delim ++AUTOHEADER!$AUTOHEADER$ac_delim ++MAKEINFO!$MAKEINFO$ac_delim ++install_sh!$install_sh$ac_delim ++STRIP!$STRIP$ac_delim ++INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim ++mkdir_p!$mkdir_p$ac_delim ++AWK!$AWK$ac_delim ++SET_MAKE!$SET_MAKE$ac_delim ++am__leading_dot!$am__leading_dot$ac_delim ++AMTAR!$AMTAR$ac_delim ++am__tar!$am__tar$ac_delim ++am__untar!$am__untar$ac_delim ++DEPDIR!$DEPDIR$ac_delim ++am__include!$am__include$ac_delim ++am__quote!$am__quote$ac_delim ++AMDEP_TRUE!$AMDEP_TRUE$ac_delim ++AMDEP_FALSE!$AMDEP_FALSE$ac_delim ++AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim ++CCDEPMODE!$CCDEPMODE$ac_delim ++am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim ++am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim ++AR!$AR$ac_delim ++RANLIB!$RANLIB$ac_delim ++LN_S!$LN_S$ac_delim ++LIBTOOL!$LIBTOOL$ac_delim ++WARN_CFLAGS!$WARN_CFLAGS$ac_delim ++NO_WERROR!$NO_WERROR$ac_delim ++MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim ++MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim ++MAINT!$MAINT$ac_delim ++INSTALL_LIBBFD_TRUE!$INSTALL_LIBBFD_TRUE$ac_delim ++INSTALL_LIBBFD_FALSE!$INSTALL_LIBBFD_FALSE$ac_delim ++_ACEOF ++ ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +-fi # test -n "$CONFIG_FILES" ++done ++ ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi ++ ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b ++_ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++CEOF$ac_eof ++_ACEOF ++ + ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++host_noncanonical!$host_noncanonical$ac_delim ++target_noncanonical!$target_noncanonical$ac_delim ++bfdlibdir!$bfdlibdir$ac_delim ++bfdincludedir!$bfdincludedir$ac_delim ++CPP!$CPP$ac_delim ++GREP!$GREP$ac_delim ++EGREP!$EGREP$ac_delim ++ALLOCA!$ALLOCA$ac_delim ++USE_NLS!$USE_NLS$ac_delim ++MSGFMT!$MSGFMT$ac_delim ++GMSGFMT!$GMSGFMT$ac_delim ++XGETTEXT!$XGETTEXT$ac_delim ++USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim ++CATALOGS!$CATALOGS$ac_delim ++CATOBJEXT!$CATOBJEXT$ac_delim ++DATADIRNAME!$DATADIRNAME$ac_delim ++GMOFILES!$GMOFILES$ac_delim ++INSTOBJEXT!$INSTOBJEXT$ac_delim ++INTLDEPS!$INTLDEPS$ac_delim ++INTLLIBS!$INTLLIBS$ac_delim ++INTLOBJS!$INTLOBJS$ac_delim ++POFILES!$POFILES$ac_delim ++POSUB!$POSUB$ac_delim ++INCLUDE_LOCALE_H!$INCLUDE_LOCALE_H$ac_delim ++GT_NO!$GT_NO$ac_delim ++GT_YES!$GT_YES$ac_delim ++MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim ++l!$l$ac_delim ++CC_FOR_BUILD!$CC_FOR_BUILD$ac_delim ++EXEEXT_FOR_BUILD!$EXEEXT_FOR_BUILD$ac_delim ++HDEFINES!$HDEFINES$ac_delim ++CGEN_MAINT_TRUE!$CGEN_MAINT_TRUE$ac_delim ++CGEN_MAINT_FALSE!$CGEN_MAINT_FALSE$ac_delim ++cgendir!$cgendir$ac_delim ++WIN32LDFLAGS!$WIN32LDFLAGS$ac_delim ++WIN32LIBADD!$WIN32LIBADD$ac_delim ++archdefs!$archdefs$ac_delim ++BFD_MACHINES!$BFD_MACHINES$ac_delim ++LIBOBJS!$LIBOBJS$ac_delim ++LTLIBOBJS!$LTLIBOBJS$ac_delim ++_ACEOF ++ ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 40; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " ++ fi ++done ++ ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi ++ ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end + _ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++:end ++s/|#_!!_#|//g ++CEOF$ac_eof ++_ACEOF ++ ++ ++# VPATH may cause trouble with some makes, so we remove $(srcdir), ++# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and ++# trailing colons and then remove the whole line if VPATH becomes empty ++# (actually we leave an empty line to preserve line numbers). ++if test "x$srcdir" = x.; then ++ ac_vpsub='/^[ ]*VPATH[ ]*=/{ ++s/:*\$(srcdir):*/:/ ++s/:*\${srcdir}:*/:/ ++s/:*@srcdir@:*/:/ ++s/^\([^=]*=[ ]*\):*/\1/ ++s/:*$// ++s/^[^=]*=[ ]*$// ++}' ++fi ++ + cat >>$CONFIG_STATUS <<\_ACEOF +-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". +- case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++fi # test -n "$CONFIG_FILES" ++ ++ ++for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS ++do ++ case $ac_tag in ++ :[FHLC]) ac_mode=$ac_tag; continue;; ++ esac ++ case $ac_mode$ac_tag in ++ :[FHL]*:*);; ++ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 ++echo "$as_me: error: Invalid tag $ac_tag." >&2;} ++ { (exit 1); exit 1; }; };; ++ :[FH]-) ac_tag=-:-;; ++ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac ++ ac_save_IFS=$IFS ++ IFS=: ++ set x $ac_tag ++ IFS=$ac_save_IFS ++ shift ++ ac_file=$1 ++ shift ++ ++ case $ac_mode in ++ :L) ac_source=$1;; ++ :[FH]) ++ ac_file_inputs= ++ for ac_f ++ do ++ case $ac_f in ++ -) ac_f="$tmp/stdin";; ++ *) # Look for the file first in the build tree, then in the source tree ++ # (if the path is not absolute). The absolute path cannot be DOS-style, ++ # because $ac_f cannot contain `:'. ++ test -f "$ac_f" || ++ case $ac_f in ++ [\\/$]*) false;; ++ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; ++ esac || ++ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 ++echo "$as_me: error: cannot find input file: $ac_f" >&2;} ++ { (exit 1); exit 1; }; };; ++ esac ++ ac_file_inputs="$ac_file_inputs $ac_f" ++ done ++ ++ # Let's still pretend it is `configure' which instantiates (i.e., don't ++ # use $as_me), people would be surprised to read: ++ # /* config.h. Generated by config.status. */ ++ configure_input="Generated from "`IFS=: ++ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." ++ if test x"$ac_file" != x-; then ++ configure_input="$ac_file. $configure_input" ++ { echo "$as_me:$LINENO: creating $ac_file" >&5 ++echo "$as_me: creating $ac_file" >&6;} ++ fi + +- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. +- ac_dir=`(dirname "$ac_file") 2>/dev/null || ++ case $ac_tag in ++ *:-:* | *:-) cat >"$tmp/stdin";; ++ esac ++ ;; ++ esac ++ ++ ac_dir=`$as_dirname -- "$ac_file" || + $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir="$ac_dir" ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac + ++ case $ac_mode in ++ :F) ++ # ++ # CONFIG_FILE ++ # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; +- *) ac_INSTALL=$ac_top_builddir$INSTALL ;; ++ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac ++_ACEOF + +- if test x"$ac_file" != x-; then +- { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- rm -f "$ac_file" +- fi +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- configure_input= +- else +- configure_input="$ac_file. " +- fi +- configure_input=$configure_input"Generated from `echo $ac_file_in | +- sed 's,.*/,,'` by configure." +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } ++cat >>$CONFIG_STATUS <<\_ACEOF ++# If the template does not know about datarootdir, expand it. ++# FIXME: This hack should be removed a few years after 2.60. ++ac_datarootdir_hack=; ac_datarootdir_seen= ++ ++case `sed -n '/datarootdir/ { ++ p ++ q ++} ++/@datadir@/p ++/@docdir@/p ++/@infodir@/p ++/@localedir@/p ++/@mandir@/p ++' $ac_file_inputs` in ++*datarootdir*) ac_datarootdir_seen=yes;; ++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) ++ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 ++echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF ++ ac_datarootdir_hack=' ++ s&@datadir@&$datadir&g ++ s&@docdir@&$docdir&g ++ s&@infodir@&$infodir&g ++ s&@localedir@&$localedir&g ++ s&@mandir@&$mandir&g ++ s&\\\${datarootdir}&$datarootdir&g' ;; ++esac ++_ACEOF ++ ++# Neutralize VPATH when `$srcdir' = `.'. ++# Shell code in configure.ac might set extrasub. ++# FIXME: do we really want to maintain this feature? ++cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub + $extrasub + _ACEOF + cat >>$CONFIG_STATUS <<\_ACEOF + :t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b +-s,@configure_input@,$configure_input,;t t +-s,@srcdir@,$ac_srcdir,;t t +-s,@abs_srcdir@,$ac_abs_srcdir,;t t +-s,@top_srcdir@,$ac_top_srcdir,;t t +-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +-s,@builddir@,$ac_builddir,;t t +-s,@abs_builddir@,$ac_abs_builddir,;t t +-s,@top_builddir@,$ac_top_builddir,;t t +-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +-s,@INSTALL@,$ac_INSTALL,;t t +-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out +- rm -f $tmp/stdin +- if test x"$ac_file" != x-; then +- mv $tmp/out $ac_file +- else +- cat $tmp/out +- rm -f $tmp/out +- fi ++s&@configure_input@&$configure_input&;t t ++s&@top_builddir@&$ac_top_builddir_sub&;t t ++s&@srcdir@&$ac_srcdir&;t t ++s&@abs_srcdir@&$ac_abs_srcdir&;t t ++s&@top_srcdir@&$ac_top_srcdir&;t t ++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t ++s&@builddir@&$ac_builddir&;t t ++s&@abs_builddir@&$ac_abs_builddir&;t t ++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t ++s&@INSTALL@&$ac_INSTALL&;t t ++$ac_datarootdir_hack ++" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out ++ ++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && ++ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && ++ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && ++ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&5 ++echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&2;} + +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_HEADER section. +-# +- +-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +-# NAME is the cpp macro being defined and VALUE is the value it is being given. +-# +-# ac_d sets the value in "#define NAME VALUE" lines. +-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +-ac_dB='[ ].*$,\1#\2' +-ac_dC=' ' +-ac_dD=',;t' +-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +-ac_uB='$,\1#\2define\3' +-ac_uC=' ' +-ac_uD=',;t' +- +-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". ++ rm -f "$tmp/stdin" + case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++ -) cat "$tmp/out"; rm -f "$tmp/out";; ++ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac ++ ;; ++ :H) ++ # ++ # CONFIG_HEADER ++ # ++_ACEOF ++ ++# Transform confdefs.h into a sed script `conftest.defines', that ++# substitutes the proper values into config.h.in to produce config.h. ++rm -f conftest.defines conftest.tail ++# First, append a space to every undef/define line, to ease matching. ++echo 's/$/ /' >conftest.defines ++# Then, protect against being on the right side of a sed subst, or in ++# an unquoted here document, in config.status. If some macros were ++# called several times there might be several #defines for the same ++# symbol, which is useless. But do not sort them, since the last ++# AC_DEFINE must be honored. ++ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* ++# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where ++# NAME is the cpp macro being defined, VALUE is the value it is being given. ++# PARAMS is the parameter list in the macro definition--in most cases, it's ++# just an empty string. ++ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ++ac_dB='\\)[ (].*,\\1define\\2' ++ac_dC=' ' ++ac_dD=' ,' + +- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- # Do quote $f, to prevent DOS paths from being IFS'd. +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } +- # Remove the trailing spaces. +- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in +- +-_ACEOF ++uniq confdefs.h | ++ sed -n ' ++ t rset ++ :rset ++ s/^[ ]*#[ ]*define[ ][ ]*// ++ t ok ++ d ++ :ok ++ s/[\\&,]/\\&/g ++ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p ++ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ++ ' >>conftest.defines + +-# Transform confdefs.h into two sed scripts, `conftest.defines' and +-# `conftest.undefs', that substitutes the proper values into +-# config.h.in to produce config.h. The first handles `#define' +-# templates, and the second `#undef' templates. +-# And first: Protect against being on the right side of a sed subst in +-# config.status. Protect against being in an unquoted here document +-# in config.status. +-rm -f conftest.defines conftest.undefs +-# Using a here document instead of a string reduces the quoting nightmare. +-# Putting comments in sed scripts is not portable. +-# +-# `end' is used to avoid that the second main sed command (meant for +-# 0-ary CPP macros) applies to n-ary macro definitions. +-# See the Autoconf documentation for `clear'. +-cat >confdef2sed.sed <<\_ACEOF +-s/[\\&,]/\\&/g +-s,[\\$`],\\&,g +-t clear +-: clear +-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +-t end +-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +-: end +-_ACEOF +-# If some macros were called several times there might be several times +-# the same #defines, which is useless. Nevertheless, we may not want to +-# sort them, since we want the *last* AC-DEFINE to be honored. +-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +-rm -f confdef2sed.sed +- +-# This sed command replaces #undef with comments. This is necessary, for ++# Remove the space that was appended to ease matching. ++# Then replace #undef with comments. This is necessary, for + # example, in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. +-cat >>conftest.undefs <<\_ACEOF +-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, ++# (The regexp can be short, since the line contains either #define or #undef.) ++echo 's/ $// ++s,^[ #]*u.*,/* & */,' >>conftest.defines ++ ++# Break up conftest.defines: ++ac_max_sed_lines=50 ++ ++# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" ++# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" ++# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" ++# et cetera. ++ac_in='$ac_file_inputs' ++ac_out='"$tmp/out1"' ++ac_nxt='"$tmp/out2"' ++ ++while : ++do ++ # Write a here document: ++ cat >>$CONFIG_STATUS <<_ACEOF ++ # First, check the format of the line: ++ cat >"\$tmp/defines.sed" <<\\CEOF ++/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def ++/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def ++b ++:def + _ACEOF +- +-# Break up conftest.defines because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +-echo ' :' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.defines >/dev/null +-do +- # Write a limited-size here document to $tmp/defines.sed. +- echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#define' lines. +- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS ++ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF +- sed -f $tmp/defines.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail ++ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ++ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in ++ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail ++ grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines + done +-rm -f conftest.defines +-echo ' fi # grep' >>$CONFIG_STATUS +-echo >>$CONFIG_STATUS +- +-# Break up conftest.undefs because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.undefs >/dev/null +-do +- # Write a limited-size here document to $tmp/undefs.sed. +- echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#undef' +- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS +- echo 'CEOF +- sed -f $tmp/undefs.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail +- rm -f conftest.undefs +- mv conftest.tail conftest.undefs +-done +-rm -f conftest.undefs ++rm -f conftest.defines conftest.tail + ++echo "ac_result=$ac_in" >>$CONFIG_STATUS + cat >>$CONFIG_STATUS <<\_ACEOF +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- echo "/* Generated by configure. */" >$tmp/config.h +- else +- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h +- fi +- cat $tmp/in >>$tmp/config.h +- rm -f $tmp/in + if test x"$ac_file" != x-; then +- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then ++ echo "/* $configure_input */" >"$tmp/config.h" ++ cat "$ac_result" >>"$tmp/config.h" ++ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 + echo "$as_me: $ac_file is unchanged" >&6;} + else +- ac_dir=`(dirname "$ac_file") 2>/dev/null || +-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_file" : 'X\(//\)[^/]' \| \ +- X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- + rm -f $ac_file +- mv $tmp/config.h $ac_file ++ mv "$tmp/config.h" $ac_file + fi + else +- cat $tmp/config.h +- rm -f $tmp/config.h ++ echo "/* $configure_input */" ++ cat "$ac_result" + fi ++ rm -f "$tmp/out12" + # Compute $ac_file's index in $config_headers. + _am_stamp_count=1 + for _am_header in $config_headers :; do +@@ -10158,135 +10756,39 @@ for _am_header in $config_headers :; do + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac + done +-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || ++echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || + $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ +- X$ac_file : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X$ac_file : 'X\(/\)' \| . 2>/dev/null || + echo X$ac_file | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'`/stamp-h$_am_stamp_count +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_COMMANDS section. +-# +-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue +- ac_dest=`echo "$ac_file" | sed 's,:.*,,'` +- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_dir=`(dirname "$ac_dest") 2>/dev/null || +-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_dest" : 'X\(//\)[^/]' \| \ +- X"$ac_dest" : 'X\(//\)$' \| \ +- X"$ac_dest" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_dest" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- +- ac_builddir=. +- +-if test "$ac_dir" != .; then +- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi +- +-case $srcdir in +- .) # No --srcdir option. We are building in place. +- ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. +- ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'`/stamp-h$_am_stamp_count ++ ;; + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac ++ :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 ++echo "$as_me: executing $ac_file commands" >&6;} ++ ;; ++ esac + + +- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +-echo "$as_me: executing $ac_dest commands" >&6;} +- case $ac_dest in +- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do ++ case $ac_file$ac_mode in ++ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. +@@ -10296,18 +10798,29 @@ echo "$as_me: executing $ac_dest command + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then +- dirpart=`(dirname "$mf") 2>/dev/null || ++ dirpart=`$as_dirname -- "$mf" || + $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ +- X"$mf" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$mf" : 'X\(/\)' \| . 2>/dev/null || + echo X"$mf" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + else + continue + fi +@@ -10329,54 +10842,80 @@ echo X"$mf" | + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue +- fdir=`(dirname "$file") 2>/dev/null || ++ fdir=`$as_dirname -- "$file" || + $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ +- X"$file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p $dirpart/$fdir +- else +- as_dir=$dirpart/$fdir ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir=$dirpart/$fdir ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done + ;; +- default ) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; ++ "default":C) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; ++ + esac +-done +-_ACEOF ++done # for ac_tag + +-cat >>$CONFIG_STATUS <<\_ACEOF + + { (exit 0); exit 0; } + _ACEOF +diff -Nrup binutils-2.17/opcodes/configure.in binutils-2.17.atmel.1.3.0/opcodes/configure.in +--- binutils-2.17/opcodes/configure.in 2006-02-17 15:36:28.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/configure.in 2007-03-26 10:20:33.000000000 +0200 +@@ -157,6 +157,7 @@ if test x${all_targets} = xfalse ; then + bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;; + bfd_arm_arch) ta="$ta arm-dis.lo" ;; + bfd_avr_arch) ta="$ta avr-dis.lo" ;; ++ bfd_avr32_arch) ta="$ta avr32-asm.lo avr32-dis.lo avr32-opc.lo" ;; + bfd_bfin_arch) ta="$ta bfin-dis.lo" ;; + bfd_cris_arch) ta="$ta cris-dis.lo cris-opc.lo cgen-bitset.lo" ;; + bfd_crx_arch) ta="$ta crx-dis.lo crx-opc.lo" ;; +diff -Nrup binutils-2.17/opcodes/disassemble.c binutils-2.17.atmel.1.3.0/opcodes/disassemble.c +--- binutils-2.17/opcodes/disassemble.c 2006-02-17 15:36:28.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/disassemble.c 2007-03-26 10:20:34.000000000 +0200 +@@ -24,6 +24,7 @@ + #define ARCH_arc + #define ARCH_arm + #define ARCH_avr ++#define ARCH_avr32 + #define ARCH_bfin + #define ARCH_cris + #define ARCH_crx +@@ -121,6 +122,11 @@ disassembler (abfd) + disassemble = print_insn_avr; + break; + #endif ++#ifdef ARCH_avr32 ++ case bfd_arch_avr32: ++ disassemble = print_insn_avr32; ++ break; ++#endif + #ifdef ARCH_bfin + case bfd_arch_bfin: + disassemble = print_insn_bfin; +@@ -433,6 +439,9 @@ disassembler_usage (stream) + #ifdef ARCH_powerpc + print_ppc_disassembler_options (stream); + #endif ++#ifdef ARCH_avr32 ++ print_avr32_disassembler_options (stream); ++#endif + + return; + } +diff -Nrup binutils-2.17/opcodes/Makefile.am binutils-2.17.atmel.1.3.0/opcodes/Makefile.am +--- binutils-2.17/opcodes/Makefile.am 2006-04-06 23:49:35.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/opcodes/Makefile.am 2007-03-26 10:20:34.000000000 +0200 +@@ -29,6 +29,7 @@ LIBIBERTY = ../libiberty/libiberty.a + # Header files. + HFILES = \ + cgen-ops.h cgen-types.h \ ++ avr32-asm.h avr32-opc.h \ + fr30-desc.h fr30-opc.h \ + frv-desc.h frv-opc.h \ + h8500-opc.h \ +@@ -58,6 +59,9 @@ CFILES = \ + arc-ext.c \ + arm-dis.c \ + avr-dis.c \ ++ avr32-asm.c \ ++ avr32-dis.c \ ++ avr32-opc.c \ + bfin-dis.c \ + cgen-asm.c \ + cgen-bitset.c \ +@@ -200,6 +204,9 @@ ALL_MACHINES = \ + arc-ext.lo \ + arm-dis.lo \ + avr-dis.lo \ ++ avr32-asm.lo \ ++ avr32-dis.lo \ ++ avr32-opc.lo \ + bfin-dis.lo \ + cgen-asm.lo \ + cgen-bitset.lo \ +@@ -624,6 +631,15 @@ arm-dis.lo: arm-dis.c sysdep.h config.h + avr-dis.lo: avr-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h opintl.h \ + $(INCDIR)/libiberty.h $(INCDIR)/opcode/avr.h ++avr32-asm.lo: avr32-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \ ++ $(BFD_H) $(INCDIR)/symcat.h avr32-opc.h opintl.h \ ++ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h \ ++ $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h ++avr32-dis.lo: avr32-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \ ++ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \ ++ avr32-opc.h opintl.h ++avr32-opc.lo: avr32-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \ ++ $(BFD_H) $(INCDIR)/symcat.h avr32-opc.h $(INCDIR)/libiberty.h + bfin-dis.lo: bfin-dis.c $(INCDIR)/opcode/bfin.h $(INCDIR)/dis-asm.h \ + $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h + cgen-asm.lo: cgen-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \ +diff -Nrup binutils-2.17/opcodes/Makefile.in binutils-2.17.atmel.1.3.0/opcodes/Makefile.in +--- binutils-2.17/opcodes/Makefile.in 2006-04-06 23:49:35.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/opcodes/Makefile.in 2007-03-26 10:31:36.000000000 +0200 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.9.5 from Makefile.am. ++# Makefile.in generated by automake 1.9.6 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -15,8 +15,6 @@ + @SET_MAKE@ + + +-SOURCES = libopcodes.c $(libopcodes_la_SOURCES) +- + srcdir = @srcdir@ + top_srcdir = @top_srcdir@ + VPATH = @srcdir@ +@@ -132,6 +130,7 @@ EXEEXT = @EXEEXT@ + EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ + GMOFILES = @GMOFILES@ + GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ + GT_NO = @GT_NO@ + GT_YES = @GT_YES@ + HDEFINES = @HDEFINES@ +@@ -180,10 +179,7 @@ WARN_CFLAGS = @WARN_CFLAGS@ + WIN32LDFLAGS = @WIN32LDFLAGS@ + WIN32LIBADD = @WIN32LIBADD@ + XGETTEXT = @XGETTEXT@ +-ac_ct_AR = @ac_ct_AR@ + ac_ct_CC = @ac_ct_CC@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ + am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ + am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ + am__include = @am__include@ +@@ -202,6 +198,9 @@ build_os = @build_os@ + build_vendor = @build_vendor@ + cgendir = @cgendir@ + datadir = @datadir@ ++datarootdir = @datarootdir@ ++docdir = @docdir@ ++dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + host = @host@ + host_alias = @host_alias@ +@@ -209,18 +208,22 @@ host_cpu = @host_cpu@ + host_noncanonical = @host_noncanonical@ + host_os = @host_os@ + host_vendor = @host_vendor@ ++htmldir = @htmldir@ + includedir = @includedir@ + infodir = @infodir@ + install_sh = @install_sh@ + l = @l@ + libdir = @libdir@ + libexecdir = @libexecdir@ ++localedir = @localedir@ + localstatedir = @localstatedir@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ ++psdir = @psdir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ +@@ -247,6 +250,7 @@ LIBIBERTY = ../libiberty/libiberty.a + # Header files. + HFILES = \ + cgen-ops.h cgen-types.h \ ++ avr32-asm.h avr32-opc.h \ + fr30-desc.h fr30-opc.h \ + frv-desc.h frv-opc.h \ + h8500-opc.h \ +@@ -277,6 +281,9 @@ CFILES = \ + arc-ext.c \ + arm-dis.c \ + avr-dis.c \ ++ avr32-asm.c \ ++ avr32-dis.c \ ++ avr32-opc.c \ + bfin-dis.c \ + cgen-asm.c \ + cgen-bitset.c \ +@@ -419,6 +426,9 @@ ALL_MACHINES = \ + arc-ext.lo \ + arm-dis.lo \ + avr-dis.lo \ ++ avr32-asm.lo \ ++ avr32-dis.lo \ ++ avr32-opc.lo \ + bfin-dis.lo \ + cgen-asm.lo \ + cgen-bitset.lo \ +@@ -1166,6 +1176,15 @@ arm-dis.lo: arm-dis.c sysdep.h config.h + avr-dis.lo: avr-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h opintl.h \ + $(INCDIR)/libiberty.h $(INCDIR)/opcode/avr.h ++avr32-asm.lo: avr32-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \ ++ $(BFD_H) $(INCDIR)/symcat.h avr32-opc.h opintl.h \ ++ $(INCDIR)/xregex.h $(INCDIR)/xregex2.h \ ++ $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h ++avr32-dis.lo: avr32-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \ ++ $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \ ++ avr32-opc.h opintl.h ++avr32-opc.lo: avr32-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \ ++ $(BFD_H) $(INCDIR)/symcat.h avr32-opc.h $(INCDIR)/libiberty.h + bfin-dis.lo: bfin-dis.c $(INCDIR)/opcode/bfin.h $(INCDIR)/dis-asm.h \ + $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h + cgen-asm.lo: cgen-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \ diff --git a/packages/binutils/binutils-2.17/501-avr32-fix-pool-alignment.patch b/packages/binutils/binutils-2.17/501-avr32-fix-pool-alignment.patch new file mode 100644 index 0000000000..bd519a1e69 --- /dev/null +++ b/packages/binutils/binutils-2.17/501-avr32-fix-pool-alignment.patch @@ -0,0 +1,26 @@ +Index: a/gas/config/tc-avr32.c +=================================================================== +--- a/gas/config/tc-avr32.c (revision 31496) ++++ b/gas/config/tc-avr32.c (revision 32014) +@@ -3092,6 +3092,8 @@ + + /* Make sure the constant pool is properly aligned */ + frag_align_code(2, 0); ++ if (bfd_get_section_alignment(stdoutput, pool->section) < 2) ++ bfd_set_section_alignment(stdoutput, pool->section, 2); + + /* Assume none of the entries are discarded, and that we need the + maximum amount of alignment. But we're not going to allocate +Index: a/bfd/configure.in +=================================================================== +--- a/bfd/configure.in (revision 31496) ++++ b/bfd/configure.in (revision 32014) +@@ -8,7 +8,7 @@ + AC_CANONICAL_TARGET + AC_ISC_POSIX + +-AM_INIT_AUTOMAKE(bfd, 2.17.atmel.1.2.0) ++AM_INIT_AUTOMAKE(bfd, 2.17.atmel.1.2.1) + + dnl These must be called before AM_PROG_LIBTOOL, because it may want + dnl to call AC_CHECK_PROG. diff --git a/packages/binutils/binutils_2.17.bb b/packages/binutils/binutils_2.17.bb index 69e11497c2..3e7af6d4b3 100644 --- a/packages/binutils/binutils_2.17.bb +++ b/packages/binutils/binutils_2.17.bb @@ -1,6 +1,6 @@ require binutils.inc -PR = "r2" +PR = "r3" SRC_URI = \ "http://ftp.gnu.org/gnu/binutils/binutils-${PV}.tar.bz2 \ @@ -18,10 +18,8 @@ SRC_URI += "\ file://300-012_check_ldrunpath_length.patch;patch=1 \ file://300-001_ld_makefile_patch.patch;patch=1 \ file://400-mips-ELF_MAXPAGESIZE-4K.patch;patch=1 \ - http://avr32linux.org/twiki/pub/Main/DevelopmentTools/500-avr32.patch.gz;patch=1 \ - http://avr32linux.org/twiki/pub/Main/DevelopmentTools/501-avr32-sreldyn-fix.patch.gz;patch=1 \ - http://avr32linux.org/twiki/pub/Main/DevelopmentTools/502-avr32-bfd-dont-allow-direct-refs-to-bss.patch.gz;patch=1 \ - file://503-avr32-fix-got-offset-init.patch;patch=1 \ + file://500-avr32-atmel.1.3.0.patch;patch=1 \ + file://501-avr32-fix-pool-alignment.patch;patch=1 \ " # Zecke's OSX fixes -- cgit v1.2.3 From bac34c58b1a65d5b9e6f3d43e3c8bc7eea4c797c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 4 Feb 2008 12:13:03 +0000 Subject: linux.inc: allow u-boot entrypoint to differ from loadadress and make atngw100 use it --- conf/machine/atngw100.conf | 4 ++++ packages/linux/linux.inc | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/conf/machine/atngw100.conf b/conf/machine/atngw100.conf index 21e256b04a..559bd40c75 100644 --- a/conf/machine/atngw100.conf +++ b/conf/machine/atngw100.conf @@ -22,3 +22,7 @@ EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" PREFERRED_VERSION_u-boot = "1.1.4" KERNEL_IMAGETYPE = "uImage" +UBOOT_ENTRYPOINT = "0x90000000" +UBOOT_LOADADRESS = "0x10000000" + + diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc index 951bf16590..e213a2d3f6 100644 --- a/packages/linux/linux.inc +++ b/packages/linux/linux.inc @@ -106,6 +106,7 @@ do_configure_append_avr32() { UBOOT_ENTRYPOINT ?= "20008000" +UBOOT_LOADADRESS ?= "${UBOOT_ENTRYPOINT}" do_compile_append() { if test "x${KERNEL_IMAGETYPE}" = "xuImage" ; then @@ -116,13 +117,13 @@ do_compile_append() { fi if test -e arch/${ARCH}/boot/compressed/vmlinux ; then ${OBJCOPY} -O binary -R .note -R .comment -S arch/${ARCH}/boot/compressed/vmlinux linux.bin - uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_ENTRYPOINT} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage + uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_LOADADRESS} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage rm -f linux.bin else ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin rm -f linux.bin.gz gzip -9 linux.bin - uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_ENTRYPOINT} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage + uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_LOADADRESS} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage rm -f linux.bin.gz fi fi -- cgit v1.2.3 From e3d5d334b7ff999fe3e66e995ff9e94752e3814a Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 4 Feb 2008 14:06:41 +0000 Subject: libmad: update avr32 patch --- .../files/libmad-0.15.1b-avr32-optimization.patch | 62 +++++++++++----------- packages/libmad/libmad_0.15.1b.bb | 2 +- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch b/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch index f6620f591a..b74eea3225 100644 --- a/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch +++ b/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch @@ -139,20 +139,19 @@ index 5a51570..70f550a 100644 unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short); # endif -diff --git a/configure b/configure -index ee421cc..7a9f0c8 100755 ---- a/configure -+++ b/configure -@@ -1048,7 +1048,7 @@ Optional Features: - --enable-speed optimize for speed over accuracy - --enable-accuracy optimize for accuracy over speed - --enable-fpm=ARCH use ARCH-specific fixed-point math routines (one of: -- intel, arm, mips, sparc, ppc, 64bit, default) -+ intel, arm, avr32, mips, sparc, ppc, 64bit, default) - --enable-sso use subband synthesis optimization - --disable-aso disable architecture-specific optimizations - --enable-strict-iso use strict ISO/IEC interpretations -@@ -21477,6 +21477,7 @@ if test "${enable_fpm+set}" = set; then +diff --git a/configure.ac b/configure.ac +index 9b79399..063cb9b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -274,13 +274,14 @@ fi + AC_MSG_CHECKING(for architecture-specific fixed-point math routines) + AC_ARG_ENABLE(fpm, AC_HELP_STRING([--enable-fpm=ARCH], + [use ARCH-specific fixed-point math routines +- (one of: intel, arm, mips, sparc, ppc, 64bit, default)]), ++ (one of: intel, arm, avr32, mips, sparc, ppc, 64bit, default)]), + [ + case "$enableval" in + yes) ;; no|default|approx) FPM="DEFAULT" ;; intel|i?86) FPM="INTEL" ;; arm) FPM="ARM" ;; @@ -160,7 +159,7 @@ index ee421cc..7a9f0c8 100755 mips) FPM="MIPS" ;; sparc) FPM="SPARC" ;; ppc|powerpc) FPM="PPC" ;; -@@ -21498,6 +21499,7 @@ then +@@ -298,6 +299,7 @@ then case "$host" in i?86-*) FPM="INTEL" ;; arm*-*) FPM="ARM" ;; @@ -168,7 +167,7 @@ index ee421cc..7a9f0c8 100755 mips*-*) FPM="MIPS" ;; sparc*-*) FPM="SPARC" ;; powerpc*-*) FPM="PPC" ;; -@@ -21554,6 +21556,11 @@ then +@@ -343,6 +345,11 @@ then ASO="$ASO -DASO_IMDCT" ASO_OBJS="imdct_l_arm.lo" ;; @@ -180,19 +179,20 @@ index ee421cc..7a9f0c8 100755 mips*-*) ASO="$ASO -DASO_INTERLEAVE2" ASO="$ASO -DASO_ZEROCHECK" -diff --git a/configure.ac b/configure.ac -index 9b79399..063cb9b 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -274,13 +274,14 @@ fi - AC_MSG_CHECKING(for architecture-specific fixed-point math routines) - AC_ARG_ENABLE(fpm, AC_HELP_STRING([--enable-fpm=ARCH], - [use ARCH-specific fixed-point math routines -- (one of: intel, arm, mips, sparc, ppc, 64bit, default)]), -+ (one of: intel, arm, avr32, mips, sparc, ppc, 64bit, default)]), - [ - case "$enableval" in - yes) ;; +diff --git a/configure b/configure +index ee421cc..7a9f0c8 100755 +--- a/configure ++++ b/configure +@@ -1048,7 +1048,7 @@ Optional Features: + --enable-speed optimize for speed over accuracy + --enable-accuracy optimize for accuracy over speed + --enable-fpm=ARCH use ARCH-specific fixed-point math routines (one of: +- intel, arm, mips, sparc, ppc, 64bit, default) ++ intel, arm, avr32, mips, sparc, ppc, 64bit, default) + --enable-sso use subband synthesis optimization + --disable-aso disable architecture-specific optimizations + --enable-strict-iso use strict ISO/IEC interpretations +@@ -21477,6 +21477,7 @@ if test "${enable_fpm+set}" = set; then no|default|approx) FPM="DEFAULT" ;; intel|i?86) FPM="INTEL" ;; arm) FPM="ARM" ;; @@ -200,7 +200,7 @@ index 9b79399..063cb9b 100644 mips) FPM="MIPS" ;; sparc) FPM="SPARC" ;; ppc|powerpc) FPM="PPC" ;; -@@ -298,6 +299,7 @@ then +@@ -21498,6 +21499,7 @@ then case "$host" in i?86-*) FPM="INTEL" ;; arm*-*) FPM="ARM" ;; @@ -208,7 +208,7 @@ index 9b79399..063cb9b 100644 mips*-*) FPM="MIPS" ;; sparc*-*) FPM="SPARC" ;; powerpc*-*) FPM="PPC" ;; -@@ -343,6 +345,11 @@ then +@@ -21554,6 +21556,11 @@ then ASO="$ASO -DASO_IMDCT" ASO_OBJS="imdct_l_arm.lo" ;; diff --git a/packages/libmad/libmad_0.15.1b.bb b/packages/libmad/libmad_0.15.1b.bb index 9669cbd531..1f341b9957 100644 --- a/packages/libmad/libmad_0.15.1b.bb +++ b/packages/libmad/libmad_0.15.1b.bb @@ -4,7 +4,7 @@ PRIORITY = "optional" DEPENDS = "libid3tag" LICENSE = "GPL" -PR = "r1" +PR = "r2" SRC_URI = "${SOURCEFORGE_MIRROR}/mad/libmad-${PV}.tar.gz" S = "${WORKDIR}/libmad-${PV}" -- cgit v1.2.3 From 51b34dcb5a457c204776c6602838c6bad4c5946e Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Mon, 4 Feb 2008 15:00:33 +0000 Subject: angstrom-2008.1.conf : update gtk+ and glib --- conf/distro/angstrom-2008.1.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index ec8a5b9b30..4f950ffff1 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -71,8 +71,8 @@ PREFERRED_VERSION_uclibc-initial ?= "0.9.29" #Prefer a newer GTK+ and friends -PREFERRED_VERSION_gtk+ = "2.12.0" -PREFERRED_VERSION_glib-2.0 = "2.14.0" +PREFERRED_VERSION_gtk+ = "2.12.3" +PREFERRED_VERSION_glib-2.0 = "2.14.4" PREFERRED_VERSION_pango = "1.18.1" # prefer newest for speed and fun -- cgit v1.2.3 From f1137491d832b77436448bd942bc0c42df6488d4 Mon Sep 17 00:00:00 2001 From: Andrew Paulsen Date: Mon, 4 Feb 2008 16:23:21 +0000 Subject: xerver-common : Add support for TI OSK board with Mistral LCD. From bug #3731. --- packages/xserver-common/files/ti-osk.patch | 12 ++++++++++++ packages/xserver-common/xserver-common_1.18.bb | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 packages/xserver-common/files/ti-osk.patch diff --git a/packages/xserver-common/files/ti-osk.patch b/packages/xserver-common/files/ti-osk.patch new file mode 100644 index 0000000000..69d93350fc --- /dev/null +++ b/packages/xserver-common/files/ti-osk.patch @@ -0,0 +1,12 @@ +diff -Naur xserver-common-1.18-orig/X11/Xserver xserver-common-1.18/X11/Xserver +--- xserver-common-1.18-orig/X11/Xserver 2007-08-24 06:15:25.000000000 -0500 ++++ xserver-common-1.18/X11/Xserver 2008-01-12 19:59:59.000000000 -0600 +@@ -76,6 +76,8 @@ + ARGS="$ARGS -dpi 100 -rgba rgb" ;; + "Generic OMAP1510/1610/1710") + ARGS="$ARGS -dpi 220 -mouse /dev/input/event0" ;; ++ "TI-OSK") ++ ARGS="$ARGS -dpi 100 -mouse tslib" ;; + "Cellon C8000 Board") + ARGS="$ARGS -dpi 100 -screen 240x320,10,1" ;; + "HTC Universal") diff --git a/packages/xserver-common/xserver-common_1.18.bb b/packages/xserver-common/xserver-common_1.18.bb index bf7b049939..6e3e2dd1ed 100644 --- a/packages/xserver-common/xserver-common_1.18.bb +++ b/packages/xserver-common/xserver-common_1.18.bb @@ -9,7 +9,7 @@ PACKAGE_ARCH = "all" # we are using a gpe-style Makefile inherit gpe -SRC_URI_append = " file://unbreak-simpad.patch;patch=1 file://setDPI.sh " +SRC_URI_append = " file://ti-osk.patch;patch=1 file://unbreak-simpad.patch;patch=1 file://setDPI.sh " do_install_append() { install -m 0755 "${WORKDIR}/setDPI.sh" "${D}/etc/X11/Xinit.d/50setdpi" -- cgit v1.2.3 From f892bd5d542c92bbe59558239b3fb9c2c7f530f5 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Mon, 4 Feb 2008 17:13:38 +0000 Subject: libtorrent_0.12.0.bb, rtorrent_0.8.0.bb : a small working bittorrent client ideal for embedded systems. Has advanced features such as PEX and DHT --- packages/libtorrent/.mtn2git_empty | 0 packages/libtorrent/files/.mtn2git_empty | 0 packages/libtorrent/files/autoconf-cross-fix.patch | 14 ++++++++++++++ packages/libtorrent/libtorrent_0.12.0.bb | 16 ++++++++++++++++ packages/libtorrent/rtorrent_0.8.0.bb | 11 +++++++++++ 5 files changed, 41 insertions(+) create mode 100644 packages/libtorrent/.mtn2git_empty create mode 100644 packages/libtorrent/files/.mtn2git_empty create mode 100644 packages/libtorrent/files/autoconf-cross-fix.patch create mode 100644 packages/libtorrent/libtorrent_0.12.0.bb create mode 100644 packages/libtorrent/rtorrent_0.8.0.bb diff --git a/packages/libtorrent/.mtn2git_empty b/packages/libtorrent/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libtorrent/files/.mtn2git_empty b/packages/libtorrent/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libtorrent/files/autoconf-cross-fix.patch b/packages/libtorrent/files/autoconf-cross-fix.patch new file mode 100644 index 0000000000..a8dd3a5b76 --- /dev/null +++ b/packages/libtorrent/files/autoconf-cross-fix.patch @@ -0,0 +1,14 @@ +Index: rtorrent-0.8.0/scripts/common.m4 +=================================================================== +--- rtorrent-0.8.0.orig/scripts/common.m4 2008-01-13 15:02:03.000000000 +0000 ++++ rtorrent-0.8.0/scripts/common.m4 2008-02-04 13:12:01.000000000 +0000 +@@ -192,6 +192,9 @@ + AC_DEFINE(USE_EXECINFO, 1, Use execinfo.h) + ], [ + AC_MSG_RESULT(no) ++ ], [ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(USE_EXECINFO, 1, Use execinfo.h) + ]) + ]) + diff --git a/packages/libtorrent/libtorrent_0.12.0.bb b/packages/libtorrent/libtorrent_0.12.0.bb new file mode 100644 index 0000000000..5d711578ed --- /dev/null +++ b/packages/libtorrent/libtorrent_0.12.0.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "library implementing the bittorrent protocol" +HOMEPAGE = "http://libtorrent.rakshasa.no" +SECTION = "libs/network" +LICENSE = "GPL" +DEPENDS = "libsigc++-2.0 openssl" + +SRC_URI = "http://libtorrent.rakshasa.no/downloads/libtorrent-${PV}.tar.gz" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--enable-aligned" + +do_stage() { + autotools_stage_all +} + diff --git a/packages/libtorrent/rtorrent_0.8.0.bb b/packages/libtorrent/rtorrent_0.8.0.bb new file mode 100644 index 0000000000..9ae0eed011 --- /dev/null +++ b/packages/libtorrent/rtorrent_0.8.0.bb @@ -0,0 +1,11 @@ +DESCRIPTION = "Console bittorrent client using libtorrent" +HOMEPAGE = "http://libtorrent.rakshasa.no" +SECTION = "libs/network" +LICENSE = "GPL" +DEPENDS = "libtorrent curl ncurses gnutls libgpg-error" + +SRC_URI = "http://libtorrent.rakshasa.no/downloads/rtorrent-${PV}.tar.gz \ + file://autoconf-cross-fix.patch;patch=1" + +inherit autotools + -- cgit v1.2.3 From 8e0c09c7d6ef8dc1e5d191d8f0c9ee55a659901f Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Mon, 4 Feb 2008 17:22:12 +0000 Subject: SlugOS: updated boot scripts to support nfs rootfs with the new network driver. --- packages/slugos-init/files/boot/kexec | 4 ++++ packages/slugos-init/files/boot/network | 24 +++++++++++++++++++++++- packages/slugos-init/files/boot/nfs | 5 +++++ packages/slugos-init/files/modulefunctions | 5 +++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/slugos-init/files/boot/kexec b/packages/slugos-init/files/boot/kexec index 7c02a14f04..8973d20bfe 100644 --- a/packages/slugos-init/files/boot/kexec +++ b/packages/slugos-init/files/boot/kexec @@ -91,6 +91,7 @@ if [ -n "$1" -a -n "$2" ] ; then t=`basename "$kpath"` kexec_image="/mnt/$t" fi + umount /sys fi ;; @@ -98,11 +99,13 @@ if [ -n "$1" -a -n "$2" ] ; then if /boot/network ; then echo "Loading kexec kernel using nfs \"$kpath\"..." echo "mounting nfs partition..." + loadnfsmods if mount -o ro,nolock -t nfs `dirname "$kpath"` /mnt ; then need_umount=1 t=`basename "$kpath"` kexec_image="/mnt/$t" fi + umount /sys fi ;; @@ -140,6 +143,7 @@ if [ -n "$1" -a -n "$2" ] ; then echo "Loading kexec kernel using tftp \"$kpath\"..." tftp -g -l "$kexec_image" -r "${kpath#*:}" "${kpath%%:*}" fi + umount /sys fi ;; diff --git a/packages/slugos-init/files/boot/network b/packages/slugos-init/files/boot/network index 9aa295e43d..8c0635d3ac 100644 --- a/packages/slugos-init/files/boot/network +++ b/packages/slugos-init/files/boot/network @@ -8,6 +8,11 @@ # function! . /etc/default/functions # +# /proc is needed for the module loading, and /sys is +# necessary to load firmware (if required). +mount -t proc proc /proc +mount -t sysfs sysfs /sys +# # We may need to load the network driver modules here . /etc/default/modulefunctions loadnetmods @@ -17,5 +22,22 @@ loadnetmods # file. Config the loopback and network interfaces. ifconfig lo 127.0.0.1 up iface="$(config iface)" -test -n "$iface" && ifup "$iface" +test -z "$iface" && exit 1 +# +# Fire up a process in the background to load the firmware if necessary +sysf="/sys/class/firmware/$iface" +( + # Wait for the firware to be requested, if required + [ -f $sysf/loading ] || sleep 1 + [ -f $sysf/loading ] || sleep 1 + if [ -f $sysf/loading ] ; then + echo "1" >$sysf/loading + cat /lib/firmware/NPE-B >$sysf/data + echo "0" >$sysf/loading + fi +) & +# Trigger the firmware load proactively +ifconfig "$iface" up +# +ifup "$iface" # exit code is true only if the interface config has succeeded diff --git a/packages/slugos-init/files/boot/nfs b/packages/slugos-init/files/boot/nfs index 856f4e56b9..e0f05754c5 100644 --- a/packages/slugos-init/files/boot/nfs +++ b/packages/slugos-init/files/boot/nfs @@ -7,10 +7,15 @@ export PATH=/sbin:/bin:/usr/sbin:/usr/bin # . /etc/default/functions +. /etc/default/modulefunctions +# leds boot system # if /boot/network then + # load the nfs kernel module + loadnfsmods + # network is up and running, the NFS mount will # now succeed (possibly), use /boot/disk exec /boot/disk "$@" diff --git a/packages/slugos-init/files/modulefunctions b/packages/slugos-init/files/modulefunctions index a497f71f6c..82fd7681af 100644 --- a/packages/slugos-init/files/modulefunctions +++ b/packages/slugos-init/files/modulefunctions @@ -1,5 +1,6 @@ #!/bin/sh # . this file to load the functions for automatically loading modules +# NB: /proc must be mounted for correct evaluation of "$(machine)". . /etc/default/functions @@ -34,6 +35,10 @@ loadnetmods(){ esac } +loadnfsmods(){ + modprobe nfs +} + loadmiscmods(){ true } -- cgit v1.2.3 From 71393cf671133717cd85ed0e9f49effb364eb070 Mon Sep 17 00:00:00 2001 From: Philippe De Swert Date: Mon, 4 Feb 2008 19:40:26 +0000 Subject: gpe-mini-browser2: add build recipe for gpe-mini-browser2, the new GPE browser based on WebKitGtk --- packages/gpe-mini-browser/gpe-mini-browser2_svn.bb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 packages/gpe-mini-browser/gpe-mini-browser2_svn.bb diff --git a/packages/gpe-mini-browser/gpe-mini-browser2_svn.bb b/packages/gpe-mini-browser/gpe-mini-browser2_svn.bb new file mode 100644 index 0000000000..8b56e23630 --- /dev/null +++ b/packages/gpe-mini-browser/gpe-mini-browser2_svn.bb @@ -0,0 +1,21 @@ +DEPENDS = "gtk+ glib-2.0 libgpewidget webkit-gtk" +PV = "0.0.1+svn${SRCDATE}" +PR = "r0" + +inherit autotools + +SRC_URI = "${GPE_EXTRA_SVN}" + +S = "${WORKDIR}/gpe-mini-browser2" + +do_install() { + install -d ${D}/usr/share/applications + install -m 0644 ${S}/gpe-mini-browser2.desktop ${D}/usr/share/applications/gpe-mini-browser2.desktop + install -d ${D}/usr/share/pixmaps + install -m 0644 ${S}/gpe-mini-browser2.png ${D}/usr/share/pixmaps/gpe-mini-browser2.png + autotools_do_install +} + +require gpe-mini-browser.inc + +#DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From 73c9713cacf49f300e034bbb6b47df17caf29d4f Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Mon, 4 Feb 2008 20:14:18 +0000 Subject: linux-davinci : Update defconfig. Add patch to support NAND flash. --- conf/machine/davinci-sffsdr.conf | 2 +- packages/linux/linux-davinci/davinci-nand.patch | 905 +++++++++++++++++++++ .../linux/linux-davinci/davinci-sffsdr/defconfig | 85 +- packages/linux/linux-davinci_2.6.x+git-davinci.bb | 1 + 4 files changed, 933 insertions(+), 60 deletions(-) create mode 100644 packages/linux/linux-davinci/davinci-nand.patch diff --git a/conf/machine/davinci-sffsdr.conf b/conf/machine/davinci-sffsdr.conf index ecff6fae13..faf86c5ed0 100644 --- a/conf/machine/davinci-sffsdr.conf +++ b/conf/machine/davinci-sffsdr.conf @@ -19,7 +19,7 @@ EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" #ROOT_FLASH_SIZE = "29" -MACHINE_FEATURES = "kernel26 pcmcia usbhost alsa" +MACHINE_FEATURES = "kernel26 serial" require conf/machine/include/tune-arm926ejs.inc diff --git a/packages/linux/linux-davinci/davinci-nand.patch b/packages/linux/linux-davinci/davinci-nand.patch new file mode 100644 index 0000000000..33e53cf095 --- /dev/null +++ b/packages/linux/linux-davinci/davinci-nand.patch @@ -0,0 +1,905 @@ +Index: linux-davinci/drivers/mtd/nand/davinci_nand.c +=================================================================== +--- /dev/null ++++ linux-davinci/drivers/mtd/nand/davinci_nand.c +@@ -0,0 +1,638 @@ ++/* ++ * linux/drivers/mtd/nand/davinci_nand.c ++ * ++ * NAND Flash Driver ++ * ++ * Copyright (C) 2006 Texas Instruments. ++ * ++ * ported to 2.6.23 (C) 2008 by ++ * Sander Huijsen ++ * Troy Kisky ++ * Dirk Behme ++ * ++ * -------------------------------------------------------------------------- ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * -------------------------------------------------------------------------- ++ * ++ * Overview: ++ * This is a device driver for the NAND flash device found on the ++ * DaVinci board which utilizes the Samsung k9k2g08 part. ++ * ++ * Modifications: ++ * ver. 1.0: Feb 2005, Vinod/Sudhakar ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++#define DAVINCI_NAND_ECC_MODE NAND_ECC_HW3_512 ++#else ++#define DAVINCI_NAND_ECC_MODE NAND_ECC_SOFT ++#endif ++ ++#define DRIVER_NAME "davinci_nand" ++ ++static struct clk *nand_clock; ++static void __iomem *nand_vaddr; ++ ++/* ++ * MTD structure for DaVinici board ++ */ ++static struct mtd_info *nand_davinci_mtd; ++ ++#ifdef CONFIG_MTD_PARTITIONS ++const char *part_probes[] = { "cmdlinepart", NULL }; ++#endif ++ ++static uint8_t scan_ff_pattern[] = { 0xff, 0xff }; ++ ++/* BB marker is byte 5 in OOB of page 0 */ ++static struct nand_bbt_descr davinci_memorybased_small = { ++ .options = NAND_BBT_SCAN2NDPAGE, ++ .offs = 5, ++ .len = 1, ++ .pattern = scan_ff_pattern ++}; ++ ++/* BB marker is bytes 0-1 in OOB of page 0 */ ++static struct nand_bbt_descr davinci_memorybased_large = { ++ .options = 0, ++ .offs = 0, ++ .len = 2, ++ .pattern = scan_ff_pattern ++}; ++ ++inline unsigned int davinci_nand_readl(int offset) ++{ ++ return davinci_readl(DAVINCI_ASYNC_EMIF_CNTRL_BASE + offset); ++} ++ ++inline void davinci_nand_writel(unsigned long value, int offset) ++{ ++ davinci_writel(value, DAVINCI_ASYNC_EMIF_CNTRL_BASE + offset); ++} ++ ++/* ++ * Hardware specific access to control-lines ++ */ ++static void nand_davinci_hwcontrol(struct mtd_info *mtd, int cmd, ++ unsigned int ctrl) ++{ ++ struct nand_chip *chip = mtd->priv; ++ u32 IO_ADDR_W = (u32)chip->IO_ADDR_W; ++ ++ /* Did the control lines change? */ ++ if (ctrl & NAND_CTRL_CHANGE) { ++ IO_ADDR_W &= ~(MASK_ALE|MASK_CLE); ++ ++ if ((ctrl & NAND_CTRL_CLE) == NAND_CTRL_CLE) ++ IO_ADDR_W |= MASK_CLE; ++ else if ((ctrl & NAND_CTRL_ALE) == NAND_CTRL_ALE) ++ IO_ADDR_W |= MASK_ALE; ++ ++ chip->IO_ADDR_W = (void __iomem *)IO_ADDR_W; ++ } ++ ++ if (cmd != NAND_CMD_NONE) ++ writeb(cmd, chip->IO_ADDR_W); ++} ++ ++static void nand_davinci_select_chip(struct mtd_info *mtd, int chip) ++{ ++ /* do nothing */ ++} ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++static void nand_davinci_enable_hwecc(struct mtd_info *mtd, int mode) ++{ ++ u32 retval; ++ ++ /* Reset ECC hardware */ ++ retval = davinci_nand_readl(NANDF1ECC_OFFSET); ++ ++ /* Restart ECC hardware */ ++ retval = davinci_nand_readl(NANDFCR_OFFSET); ++ retval |= (1 << 8); ++ davinci_nand_writel(retval, NANDFCR_OFFSET); ++} ++ ++/* ++ * Read DaVinci ECC register ++ */ ++static u32 nand_davinci_readecc(struct mtd_info *mtd) ++{ ++ /* Read register ECC and clear it */ ++ return davinci_nand_readl(NANDF1ECC_OFFSET); ++} ++ ++/* ++ * Read DaVinci ECC registers and rework into MTD format ++ */ ++static int nand_davinci_calculate_ecc(struct mtd_info *mtd, ++ const u_char *dat, u_char *ecc_code) ++{ ++ unsigned int ecc_val = nand_davinci_readecc(mtd); ++ /* squeeze 0 middle bits out so that it fits in 3 bytes */ ++ unsigned int tmp = (ecc_val&0x0fff)|((ecc_val&0x0fff0000)>>4); ++ /* invert so that erased block ecc is correct */ ++ tmp = ~tmp; ++ ecc_code[0] = (u_char)(tmp); ++ ecc_code[1] = (u_char)(tmp >> 8); ++ ecc_code[2] = (u_char)(tmp >> 16); ++ ++ return 0; ++} ++ ++static int nand_davinci_correct_data(struct mtd_info *mtd, u_char *dat, ++ u_char *read_ecc, u_char *calc_ecc) ++{ ++ struct nand_chip *chip = mtd->priv; ++ u_int32_t eccNand = read_ecc[0] | (read_ecc[1] << 8) | ++ (read_ecc[2] << 16); ++ u_int32_t eccCalc = calc_ecc[0] | (calc_ecc[1] << 8) | ++ (calc_ecc[2] << 16); ++ u_int32_t diff = eccCalc ^ eccNand; ++ ++ if (diff) { ++ if ((((diff>>12)^diff) & 0xfff) == 0xfff) { ++ /* Correctable error */ ++ if ((diff>>(12+3)) < chip->ecc.size) { ++ dat[diff>>(12+3)] ^= (1 << ((diff>>12)&7)); ++ return 1; ++ } else { ++ return -1; ++ } ++ } else if (!(diff & (diff-1))) { ++ /* Single bit ECC error in the ECC itself, ++ nothing to fix */ ++ return 1; ++ } else { ++ /* Uncorrectable error */ ++ return -1; ++ } ++ ++ } ++ return 0; ++} ++#endif ++ ++/* ++ * Read OOB data from flash. ++ */ ++static int read_oob_and_check(struct mtd_info *mtd, loff_t offs, uint8_t *buf, ++ struct nand_bbt_descr *bd) ++{ ++ int i, ret; ++ int page; ++ struct nand_chip *chip = mtd->priv; ++ ++ /* Calculate page address from offset */ ++ page = (int)(offs >> chip->page_shift); ++ page &= chip->pagemask; ++ ++ /* Read OOB data from flash */ ++ ret = chip->ecc.read_oob(mtd, chip, page, 1); ++ if (ret < 0) ++ return ret; ++ ++ /* Copy read OOB data to the buffer*/ ++ memcpy(buf, chip->oob_poi, mtd->oobsize); ++ ++ /* Check pattern against BBM in OOB area */ ++ for (i = 0; i < bd->len; i++) { ++ if (buf[bd->offs + i] != bd->pattern[i]) ++ return 1; ++ } ++ return 0; ++} ++ ++/* ++ * Fill in the memory based Bad Block Table (BBT). ++ */ ++static int nand_davinci_memory_bbt(struct mtd_info *mtd, ++ struct nand_bbt_descr *bd) ++{ ++ int i, numblocks; ++ int startblock = 0; ++ loff_t from = 0; ++ struct nand_chip *chip = mtd->priv; ++ int blocksize = 1 << chip->bbt_erase_shift; ++ uint8_t *buf = chip->buffers->databuf; ++ int len = bd->options & NAND_BBT_SCAN2NDPAGE ? 2 : 1; ++ ++ /* -numblocks- is 2 times the actual number of eraseblocks */ ++ numblocks = mtd->size >> (chip->bbt_erase_shift - 1); ++ ++ /* Now loop through all eraseblocks in the flash */ ++ for (i = startblock; i < numblocks; i += 2) { ++ int j, ret; ++ int offs = from; ++ ++ /* If NAND_BBT_SCAN2NDPAGE flag is set in bd->options, ++ * also each 2nd page of an eraseblock is checked ++ * for a Bad Block Marker. In that case, len equals 2. ++ */ ++ for (j = 0; j < len; j++) { ++ /* Read OOB data and check pattern */ ++ ret = read_oob_and_check(mtd, from, buf, bd); ++ if (ret < 0) ++ return ret; ++ ++ /* Check pattern for bad block markers */ ++ if (ret) { ++ /* Mark bad block by writing 0b11 in the ++ table */ ++ chip->bbt[i >> 3] |= 0x03 << (i & 0x6); ++ ++ printk(KERN_WARNING "Bad eraseblock %d at " \ ++ "0x%08x\n", i >> 1, ++ (unsigned int)from); ++ ++ mtd->ecc_stats.badblocks++; ++ break; ++ } ++ offs += mtd->writesize; ++ } ++ ++ /* Make -from- point to next eraseblock */ ++ from += blocksize; ++ } ++ ++ printk(KERN_NOTICE "Bad block scan: %d out of %d blocks are bad.\n", ++ mtd->ecc_stats.badblocks, numblocks>>1); ++ ++ return 0; ++} ++ ++/* ++ * This function creates a memory based bad block table (BBT). ++ * It is largely based on the standard BBT function, but all ++ * unnecessary junk is thrown out to speed up. ++ */ ++static int nand_davinci_scan_bbt(struct mtd_info *mtd) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct nand_bbt_descr *bd; ++ int len, ret = 0; ++ ++ chip->bbt_td = NULL; ++ chip->bbt_md = NULL; ++ ++ /* pagesize determines location of BBM */ ++ if (mtd->writesize > 512) ++ bd = &davinci_memorybased_large; ++ else ++ bd = &davinci_memorybased_small; ++ ++ chip->badblock_pattern = bd; ++ ++ /* Use 2 bits per page meaning 4 page markers per byte */ ++ len = mtd->size >> (chip->bbt_erase_shift + 2); ++ ++ /* Allocate memory (2bit per block) and clear the memory bad block ++ table */ ++ chip->bbt = kzalloc(len, GFP_KERNEL); ++ if (!chip->bbt) { ++ printk(KERN_ERR "nand_davinci_scan_bbt: Out of memory\n"); ++ return -ENOMEM; ++ } ++ ++ /* Now try to fill in the BBT */ ++ ret = nand_davinci_memory_bbt(mtd, bd); ++ if (ret) { ++ printk(KERN_ERR "nand_davinci_scan_bbt: " ++ "Can't scan flash and build the RAM-based BBT\n"); ++ ++ kfree(chip->bbt); ++ chip->bbt = NULL; ++ } ++ ++ return ret; ++} ++ ++/* ++ * Read from memory register: we can read 4 bytes at a time. ++ * The hardware takes care of actually reading the NAND flash. ++ */ ++static void nand_davinci_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) ++{ ++ int i; ++ int num_words = len >> 2; ++ u32 *p = (u32 *)buf; ++ struct nand_chip *chip = mtd->priv; ++ ++ for (i = 0; i < num_words; i++) ++ p[i] = readl(chip->IO_ADDR_R); ++} ++ ++/* ++ * Check hardware register for wait status. Returns 1 if device is ready, ++ * 0 if it is still busy. ++ */ ++static int nand_davinci_dev_ready(struct mtd_info *mtd) ++{ ++ return (davinci_nand_readl(NANDFSR_OFFSET) & NAND_BUSY_FLAG); ++} ++ ++static void nand_davinci_set_eccsize(struct nand_chip *chip) ++{ ++ chip->ecc.size = 256; ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ switch (chip->ecc.mode) { ++ case NAND_ECC_HW12_2048: ++ chip->ecc.size = 2048; ++ break; ++ ++ case NAND_ECC_HW3_512: ++ case NAND_ECC_HW6_512: ++ case NAND_ECC_HW8_512: ++ chip->ecc.size = 512; ++ break; ++ ++ case NAND_ECC_HW3_256: ++ default: ++ /* do nothing */ ++ break; ++ } ++#endif ++} ++ ++static void nand_davinci_set_eccbytes(struct nand_chip *chip) ++{ ++ chip->ecc.bytes = 3; ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ switch (chip->ecc.mode) { ++ case NAND_ECC_HW12_2048: ++ chip->ecc.bytes += 4; ++ case NAND_ECC_HW8_512: ++ chip->ecc.bytes += 2; ++ case NAND_ECC_HW6_512: ++ chip->ecc.bytes += 3; ++ case NAND_ECC_HW3_512: ++ case NAND_ECC_HW3_256: ++ default: ++ /* do nothing */ ++ break; ++ } ++#endif ++} ++ ++static void __devinit nand_davinci_flash_init(void) ++{ ++ u32 regval, tmp; ++ ++ /* Check for correct pin mux, reconfigure if necessary */ ++ tmp = davinci_readl(DAVINCI_SYSTEM_MODULE_BASE + PINMUX0); ++ ++ if ((tmp & 0x20020C1F) != 0x00000C1F) { ++ /* Disable HPI and ATA mux */ ++ davinci_mux_peripheral(DAVINCI_MUX_HPIEN, 0); ++ davinci_mux_peripheral(DAVINCI_MUX_ATAEN, 0); ++ ++ /* Enable VLYNQ and AEAW */ ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW0, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW1, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW2, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW3, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_AEAW4, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_VLSCREN, 1); ++ davinci_mux_peripheral(DAVINCI_MUX_VLYNQEN, 1); ++ ++ regval = davinci_readl(DAVINCI_SYSTEM_MODULE_BASE + PINMUX0); ++ ++ printk(KERN_WARNING "Warning: MUX config for NAND: Set " \ ++ "PINMUX0 reg to 0x%08x, was 0x%08x, should be done " \ ++ "by bootloader.\n", regval, tmp); ++ } ++ ++ regval = davinci_nand_readl(AWCCR_OFFSET); ++ regval |= 0x10000000; ++ davinci_nand_writel(regval, AWCCR_OFFSET); ++ ++ /*------------------------------------------------------------------* ++ * NAND FLASH CHIP TIMEOUT @ 459 MHz * ++ * * ++ * AEMIF.CLK freq = PLL1/6 = 459/6 = 76.5 MHz * ++ * AEMIF.CLK period = 1/76.5 MHz = 13.1 ns * ++ * * ++ *------------------------------------------------------------------*/ ++ regval = 0 ++ | (0 << 31) /* selectStrobe */ ++ | (0 << 30) /* extWait */ ++ | (1 << 26) /* writeSetup 10 ns */ ++ | (3 << 20) /* writeStrobe 40 ns */ ++ | (1 << 17) /* writeHold 10 ns */ ++ | (0 << 13) /* readSetup 10 ns */ ++ | (3 << 7) /* readStrobe 60 ns */ ++ | (0 << 4) /* readHold 10 ns */ ++ | (3 << 2) /* turnAround ?? ns */ ++ | (0 << 0) /* asyncSize 8-bit bus */ ++ ; ++ tmp = davinci_nand_readl(A1CR_OFFSET); ++ if (tmp != regval) { ++ printk(KERN_WARNING "Warning: NAND config: Set A1CR " \ ++ "reg to 0x%08x, was 0x%08x, should be done by " \ ++ "bootloader.\n", regval, tmp); ++ davinci_nand_writel(regval, A1CR_OFFSET); /* 0x0434018C */ ++ } ++ ++ davinci_nand_writel(0x00000101, NANDFCR_OFFSET); ++} ++ ++/* ++ * Main initialization routine ++ */ ++int __devinit nand_davinci_probe(struct platform_device *pdev) ++{ ++ struct nand_platform_data *pdata = pdev->dev.platform_data; ++ struct resource *res = pdev->resource; ++ struct nand_chip *chip; ++ struct device *dev = NULL; ++ u32 nand_rev_code; ++#ifdef CONFIG_MTD_CMDLINE_PARTS ++ char *master_name; ++ int mtd_parts_nb = 0; ++ struct mtd_partition *mtd_parts = 0; ++#endif ++ ++ nand_clock = clk_get(dev, "AEMIFCLK"); ++ if (IS_ERR(nand_clock)) { ++ printk(KERN_ERR "Error %ld getting AEMIFCLK clock?\n", ++ PTR_ERR(nand_clock)); ++ return -1; ++ } ++ ++ clk_enable(nand_clock); ++ ++ /* Allocate memory for MTD device structure and private data */ ++ nand_davinci_mtd = kmalloc(sizeof(struct mtd_info) + ++ sizeof(struct nand_chip), GFP_KERNEL); ++ ++ if (!nand_davinci_mtd) { ++ printk(KERN_ERR "Unable to allocate davinci NAND MTD device " \ ++ "structure.\n"); ++ clk_disable(nand_clock); ++ return -ENOMEM; ++ } ++ ++ /* Get pointer to private data */ ++ chip = (struct nand_chip *) (&nand_davinci_mtd[1]); ++ ++ /* Initialize structures */ ++ memset((char *)nand_davinci_mtd, 0, sizeof(struct mtd_info)); ++ memset((char *)chip, 0, sizeof(struct nand_chip)); ++ ++ /* Link the private data with the MTD structure */ ++ nand_davinci_mtd->priv = chip; ++ ++ nand_rev_code = davinci_nand_readl(NRCSR_OFFSET); ++ ++ printk("DaVinci NAND Controller rev. %d.%d\n", ++ (nand_rev_code >> 8) & 0xff, nand_rev_code & 0xff); ++ ++ nand_vaddr = ioremap(res->start, res->end - res->start); ++ if (nand_vaddr == NULL) { ++ printk(KERN_ERR "DaVinci NAND: ioremap failed.\n"); ++ clk_disable(nand_clock); ++ kfree(nand_davinci_mtd); ++ return -ENOMEM; ++ } ++ ++ chip->IO_ADDR_R = (void __iomem *)nand_vaddr; ++ chip->IO_ADDR_W = (void __iomem *)nand_vaddr; ++ chip->chip_delay = 0; ++ chip->select_chip = nand_davinci_select_chip; ++ chip->options = 0; ++ chip->ecc.mode = DAVINCI_NAND_ECC_MODE; ++ ++ /* Set ECC size and bytes */ ++ nand_davinci_set_eccsize(chip); ++ nand_davinci_set_eccbytes(chip); ++ ++ /* Set address of hardware control function */ ++ chip->cmd_ctrl = nand_davinci_hwcontrol; ++ chip->dev_ready = nand_davinci_dev_ready; ++ ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ chip->ecc.calculate = nand_davinci_calculate_ecc; ++ chip->ecc.correct = nand_davinci_correct_data; ++ chip->ecc.hwctl = nand_davinci_enable_hwecc; ++#endif ++ ++ /* Speed up the read buffer */ ++ chip->read_buf = nand_davinci_read_buf; ++ ++ /* Speed up the creation of the bad block table */ ++ chip->scan_bbt = nand_davinci_scan_bbt; ++ ++ nand_davinci_flash_init(); ++ ++ nand_davinci_mtd->owner = THIS_MODULE; ++ ++ /* Scan to find existence of the device */ ++ if (nand_scan(nand_davinci_mtd, 1)) { ++ printk(KERN_ERR "Chip Select is not set for NAND\n"); ++ clk_disable(nand_clock); ++ kfree(nand_davinci_mtd); ++ return -ENXIO; ++ } ++ ++ /* Register the partitions */ ++ add_mtd_partitions(nand_davinci_mtd, pdata->parts, pdata->nr_parts); ++ ++#ifdef CONFIG_MTD_CMDLINE_PARTS ++ /* Set nand_davinci_mtd->name = 0 temporarily */ ++ master_name = nand_davinci_mtd->name; ++ nand_davinci_mtd->name = (char *)0; ++ ++ /* nand_davinci_mtd->name == 0, means: don't bother checking ++ */ ++ mtd_parts_nb = parse_mtd_partitions(nand_davinci_mtd, part_probes, ++ &mtd_parts, 0); ++ ++ /* Restore nand_davinci_mtd->name */ ++ nand_davinci_mtd->name = master_name; ++ ++ add_mtd_partitions(nand_davinci_mtd, mtd_parts, mtd_parts_nb); ++#endif ++ ++ return 0; ++} ++ ++/* ++ * Clean up routine ++ */ ++static int nand_davinci_remove(struct platform_device *pdev) ++{ ++ clk_disable(nand_clock); ++ ++ if (nand_vaddr) ++ iounmap(nand_vaddr); ++ ++ /* Release resources, unregister device */ ++ nand_release(nand_davinci_mtd); ++ ++ /* Free the MTD device structure */ ++ kfree(nand_davinci_mtd); ++ ++ return 0; ++} ++ ++ ++static struct platform_driver nand_davinci_driver = { ++ .probe = nand_davinci_probe, ++ .remove = nand_davinci_remove, ++ .driver = { ++ .name = DRIVER_NAME, ++ }, ++}; ++ ++static int __init nand_davinci_init(void) ++{ ++ return platform_driver_register(&nand_davinci_driver); ++} ++module_init(nand_davinci_init); ++ ++#ifdef MODULE ++static void __exit nand_davinci_exit(void) ++{ ++ platform_driver_unregister(&nand_davinci_driver); ++} ++module_exit(nand_davinci_exit); ++#endif ++ ++MODULE_ALIAS(DRIVER_NAME); ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Texas Instruments"); ++MODULE_DESCRIPTION("Board-specific glue layer for NAND flash on davinci" \ ++ "board"); +Index: linux-davinci/drivers/mtd/nand/Makefile +=================================================================== +--- linux-davinci.orig/drivers/mtd/nand/Makefile ++++ linux-davinci/drivers/mtd/nand/Makefile +@@ -29,5 +29,6 @@ obj-$(CONFIG_MTD_NAND_AT91) += at91_nan + obj-$(CONFIG_MTD_NAND_CM_X270) += cmx270_nand.o + obj-$(CONFIG_MTD_NAND_BASLER_EXCITE) += excite_nandflash.o + obj-$(CONFIG_MTD_NAND_PLATFORM) += plat_nand.o ++obj-$(CONFIG_MTD_NAND_DAVINCI) += davinci_nand.o + + nand-objs := nand_base.o nand_bbt.o +Index: linux-davinci/drivers/mtd/nand/Kconfig +=================================================================== +--- linux-davinci.orig/drivers/mtd/nand/Kconfig ++++ linux-davinci/drivers/mtd/nand/Kconfig +@@ -293,5 +293,17 @@ config MTD_NAND_PLATFORM + devices. You will need to provide platform-specific functions + via platform_data. + ++config MTD_NAND_DAVINCI ++ tristate "NAND Flash device on DaVinci SoC" ++ depends on MTD_NAND ++ select MTD_PARTITIONS ++ help ++ Support for NAND flash on Texas Instruments DaVinci SoC. ++ ++config NAND_FLASH_HW_ECC ++ bool "Hardware ECC Support on NAND Device for DaVinci" ++ depends on MTD_NAND_DAVINCI ++ help ++ Support for Hardware ECC on NAND device for DaVinci. + + endif # MTD_NAND +Index: linux-davinci/include/asm-arm/arch-davinci/nand.h +=================================================================== +--- /dev/null ++++ linux-davinci/include/asm-arm/arch-davinci/nand.h +@@ -0,0 +1,45 @@ ++/* ++ * include/asm-arm/arch-davinci/nand.h ++ * ++ * Copyright (C) 2006 Texas Instruments. ++ * ++ * ported to 2.6.23 (C) 2008 by ++ * Sander Huijsen ++ * Troy Kisky ++ * Dirk Behme ++ * ++ * -------------------------------------------------------------------------- ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * -------------------------------------------------------------------------- ++ * ++ */ ++ ++#ifndef __ARCH_ARM_DAVINCI_NAND_H ++#define __ARCH_ARM_DAVINCI_NAND_H ++ ++#define NRCSR_OFFSET 0x00 ++#define AWCCR_OFFSET 0x04 ++#define A1CR_OFFSET 0x10 ++#define NANDFCR_OFFSET 0x60 ++#define NANDFSR_OFFSET 0x64 ++#define NANDF1ECC_OFFSET 0x70 ++ ++#define MASK_ALE 0x0A ++#define MASK_CLE 0x10 ++ ++#define NAND_BUSY_FLAG 0x01 ++ ++#endif /* __ARCH_ARM_DAVINCI_NAND_H */ +Index: linux-davinci/arch/arm/mach-davinci/mux.c +=================================================================== +--- linux-davinci.orig/arch/arm/mach-davinci/mux.c ++++ linux-davinci/arch/arm/mach-davinci/mux.c +@@ -15,10 +15,6 @@ + + #include + +-/* System control register offsets */ +-#define PINMUX0 0x00 +-#define PINMUX1 0x04 +- + static DEFINE_SPINLOCK(mux_lock); + + void davinci_mux_peripheral(unsigned int mux, unsigned int enable) +Index: linux-davinci/include/asm-arm/arch-davinci/mux.h +=================================================================== +--- linux-davinci.orig/include/asm-arm/arch-davinci/mux.h ++++ linux-davinci/include/asm-arm/arch-davinci/mux.h +@@ -11,6 +11,11 @@ + #ifndef __ASM_ARCH_MUX_H + #define __ASM_ARCH_MUX_H + ++/* System control register offsets */ ++#define PINMUX0 0x00 ++#define PINMUX1 0x04 ++ ++/* System control register bits */ + #define DAVINCI_MUX_AEAW0 0 + #define DAVINCI_MUX_AEAW1 1 + #define DAVINCI_MUX_AEAW2 2 +Index: linux-davinci/include/linux/mtd/nand.h +=================================================================== +--- linux-davinci.orig/include/linux/mtd/nand.h ++++ linux-davinci/include/linux/mtd/nand.h +@@ -123,6 +123,13 @@ typedef enum { + NAND_ECC_SOFT, + NAND_ECC_HW, + NAND_ECC_HW_SYNDROME, ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ NAND_ECC_HW3_256, ++ NAND_ECC_HW3_512, ++ NAND_ECC_HW6_512, ++ NAND_ECC_HW8_512, ++ NAND_ECC_HW12_2048, ++#endif + } nand_ecc_modes_t; + + /* +Index: linux-davinci/drivers/mtd/nand/nand_base.c +=================================================================== +--- linux-davinci.orig/drivers/mtd/nand/nand_base.c ++++ linux-davinci/drivers/mtd/nand/nand_base.c +@@ -2456,6 +2456,13 @@ int nand_scan_tail(struct mtd_info *mtd) + chip->ecc.write_page_raw = nand_write_page_raw; + + switch (chip->ecc.mode) { ++#ifdef CONFIG_NAND_FLASH_HW_ECC ++ case NAND_ECC_HW12_2048: ++ case NAND_ECC_HW8_512: ++ case NAND_ECC_HW6_512: ++ case NAND_ECC_HW3_512: ++ case NAND_ECC_HW3_256: ++#endif + case NAND_ECC_HW: + /* Use standard hwecc read page function ? */ + if (!chip->ecc.read_page) +Index: linux-davinci/arch/arm/mach-davinci/board-evm.c +=================================================================== +--- linux-davinci.orig/arch/arm/mach-davinci/board-evm.c ++++ linux-davinci/arch/arm/mach-davinci/board-evm.c +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -27,6 +28,7 @@ + #include + + #include ++#include + #include + + /* other misc. init functions */ +@@ -38,7 +40,7 @@ void __init davinci_init_common_hw(void) + /* NOR Flash base address set to CS0 by default */ + #define NOR_FLASH_PHYS 0x02000000 + +-static struct mtd_partition davinci_evm_partitions[] = { ++static struct mtd_partition davinci_evm_norflash_partitions[] = { + /* bootloader (U-Boot, etc) in first 4 sectors */ + { + .name = "bootloader", +@@ -69,30 +71,63 @@ static struct mtd_partition davinci_evm_ + } + }; + +-static struct physmap_flash_data davinci_evm_flash_data = { ++static struct physmap_flash_data davinci_evm_norflash_data = { + .width = 2, +- .parts = davinci_evm_partitions, +- .nr_parts = ARRAY_SIZE(davinci_evm_partitions), ++ .parts = davinci_evm_norflash_partitions, ++ .nr_parts = ARRAY_SIZE(davinci_evm_norflash_partitions), + }; + + /* NOTE: CFI probe will correctly detect flash part as 32M, but EMIF + * limits addresses to 16M, so using addresses past 16M will wrap */ +-static struct resource davinci_evm_flash_resource = { ++static struct resource davinci_evm_norflash_resource = { + .start = NOR_FLASH_PHYS, + .end = NOR_FLASH_PHYS + SZ_16M - 1, + .flags = IORESOURCE_MEM, + }; + +-static struct platform_device davinci_evm_flash_device = { ++static struct platform_device davinci_evm_norflash_device = { + .name = "physmap-flash", + .id = 0, + .dev = { +- .platform_data = &davinci_evm_flash_data, ++ .platform_data = &davinci_evm_norflash_data, + }, + .num_resources = 1, +- .resource = &davinci_evm_flash_resource, ++ .resource = &davinci_evm_norflash_resource, + }; + ++#if defined(CONFIG_MTD_NAND_DAVINCI) || defined(CONFIG_MTD_NAND_DAVINCI_MODULE) ++struct mtd_partition davinci_evm_nandflash_partition[] = { ++ /* 5 MB space at the beginning for bootloader and kernel */ ++ { ++ .name = "NAND filesystem", ++ .offset = 5 * SZ_1M, ++ .size = MTDPART_SIZ_FULL, ++ .mask_flags = 0, ++ } ++}; ++ ++static struct nand_platform_data davinci_evm_nandflash_data = { ++ .parts = davinci_evm_nandflash_partition, ++ .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), ++}; ++ ++static struct resource davinci_evm_nandflash_resource = { ++ .start = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE, ++ .end = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_16K - 1, ++ .flags = IORESOURCE_MEM, ++}; ++ ++static struct platform_device davinci_evm_nandflash_device = { ++ .name = "davinci_nand", ++ .id = 0, ++ .dev = { ++ .platform_data = &davinci_evm_nandflash_data, ++ }, ++ .num_resources = 1, ++ .resource = &davinci_evm_nandflash_resource, ++}; ++#endif ++ + #if defined(CONFIG_FB_DAVINCI) || defined(CONFIG_FB_DAVINCI_MODULE) + + static u64 davinci_fb_dma_mask = DMA_32BIT_MASK; +@@ -168,7 +203,10 @@ static struct platform_device rtc_dev = + }; + + static struct platform_device *davinci_evm_devices[] __initdata = { +- &davinci_evm_flash_device, ++ &davinci_evm_norflash_device, ++#if defined(CONFIG_MTD_NAND_DAVINCI) || defined(CONFIG_MTD_NAND_DAVINCI_MODULE) ++ &davinci_evm_nandflash_device, ++#endif + #if defined(CONFIG_FB_DAVINCI) || defined(CONFIG_FB_DAVINCI_MODULE) + &davinci_fb_device, + #endif diff --git a/packages/linux/linux-davinci/davinci-sffsdr/defconfig b/packages/linux/linux-davinci/davinci-sffsdr/defconfig index ac53caffc9..0d5155f32a 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.23-davinci1 -# Sat Oct 20 12:59:22 2007 +# Sun Feb 3 08:30:51 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -241,7 +241,8 @@ CONFIG_CMDLINE="" # # At least one emulation must be selected # -# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set # CONFIG_FPE_FASTFPE is not set # CONFIG_VFP is not set @@ -442,7 +443,10 @@ CONFIG_MTD_CFI_UTIL=y # Mapping drivers for chip access # # CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 # CONFIG_MTD_ARM_INTEGRATOR is not set # CONFIG_MTD_PLATRAM is not set @@ -461,13 +465,15 @@ CONFIG_MTD_CFI_UTIL=y # 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_VERIFY_WRITE=y # CONFIG_MTD_NAND_ECC_SMC is not set # CONFIG_MTD_NAND_MUSEUM_IDS is not set CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_DISKONCHIP is not set # CONFIG_MTD_NAND_NANDSIM is not set -CONFIG_MTD_NAND_PLATFORM=y +# CONFIG_MTD_NAND_PLATFORM is not set +CONFIG_MTD_NAND_DAVINCI=y +CONFIG_NAND_FLASH_HW_ECC=y # CONFIG_MTD_ONENAND is not set # @@ -592,10 +598,7 @@ CONFIG_INPUT=y # # Userland interfaces # -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_TSDEV is not set CONFIG_INPUT_EVDEV=m @@ -605,10 +608,10 @@ CONFIG_INPUT_EVDEV=m # Input Device Drivers # CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_SUNKBD is not set # CONFIG_KEYBOARD_LKKBD is not set -CONFIG_KEYBOARD_XTKBD=y +# CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_GPIO is not set @@ -623,7 +626,7 @@ CONFIG_KEYBOARD_XTKBD=y # CONFIG_SERIO=y CONFIG_SERIO_SERPORT=y -CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_LIBPS2 is not set # CONFIG_SERIO_RAW is not set # CONFIG_GAMEPORT is not set @@ -820,46 +823,14 @@ CONFIG_DAB=y # # CONFIG_DISPLAY_SUPPORT is not set # CONFIG_VGASTATE is not set -CONFIG_VIDEO_OUTPUT_CONTROL=m -CONFIG_FB=y -CONFIG_FIRMWARE_EDID=y -# CONFIG_FB_DDC is not set -# CONFIG_FB_CFB_FILLRECT is not set -# CONFIG_FB_CFB_COPYAREA is not set -# CONFIG_FB_CFB_IMAGEBLIT 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_DAVINCI=y -# CONFIG_FB_VIRTUAL is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +# CONFIG_FB is not set # # Console display driver support # # CONFIG_VGA_CONSOLE is not set CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y -CONFIG_LOGO_LINUX_CLUT224=y # # Sound @@ -874,10 +845,7 @@ CONFIG_SOUND=y # # Open Sound System # -CONFIG_SOUND_PRIME=y -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_DAVINCI is not set +# CONFIG_SOUND_PRIME is not set CONFIG_HID_SUPPORT=y CONFIG_HID=y # CONFIG_HID_DEBUG is not set @@ -1027,20 +995,20 @@ 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=m # CONFIG_MMC_DEBUG is not set # CONFIG_MMC_UNSAFE_RESUME is not set # # MMC/SD Card Drivers # -CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK=m CONFIG_MMC_BLOCK_BOUNCE=y # # MMC/SD Host Controller Drivers # -# CONFIG_MMC_DAVINCI is not set +CONFIG_MMC_DAVINCI=m CONFIG_RTC_LIB=y # CONFIG_RTC_CLASS is not set @@ -1100,9 +1068,9 @@ CONFIG_AUTOFS4_FS=m # # DOS/FAT/NT Filesystems # -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y +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 @@ -1138,7 +1106,7 @@ CONFIG_JFFS2_FS_WRITEBUFFER=y CONFIG_JFFS2_ZLIB=y CONFIG_JFFS2_RTIME=y # CONFIG_JFFS2_RUBIN is not set -CONFIG_CRAMFS=y +# CONFIG_CRAMFS is not set # CONFIG_VXFS_FS is not set # CONFIG_HPFS_FS is not set # CONFIG_QNX4FS_FS is not set @@ -1167,8 +1135,7 @@ CONFIG_SUNRPC=y # CONFIG_SUNRPC_BIND34 is not set # CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set diff --git a/packages/linux/linux-davinci_2.6.x+git-davinci.bb b/packages/linux/linux-davinci_2.6.x+git-davinci.bb index 9228d1ffda..916b4e252c 100644 --- a/packages/linux/linux-davinci_2.6.x+git-davinci.bb +++ b/packages/linux/linux-davinci_2.6.x+git-davinci.bb @@ -7,6 +7,7 @@ COMPATIBLE_MACHINE = "(davinci-dvevm|davinci-sffsdr)" SRC_URI = "git://source.mvista.com/git/linux-davinci-2.6.git;protocol=git \ file://binutils-buildid-arm.patch;patch=1 \ + file://davinci-nand.patch;patch=1 \ file://defconfig" S = "${WORKDIR}/git" -- cgit v1.2.3 From 28c06cd45d6a08b347bc2a8cf78c2382f77fbf30 Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Mon, 4 Feb 2008 22:04:14 +0000 Subject: gesbc-9302, linux-2.6.24: update gesbc-9302 to 2.6.24 released kernel version --- conf/machine/gesbc-9302.conf | 2 +- packages/linux/linux-2.6.24/.mtn2git_empty | 0 .../linux/linux-2.6.24/gesbc-9302/.mtn2git_empty | 0 .../linux-2.6.24/gesbc-9302/0001-gesbc-nand.patch | 306 +++++ .../gesbc-9302/0002-gesbc-eth-platform.patch | 54 + .../gesbc-9302/0003-gesbc9302-defconfig.patch | 1184 ++++++++++++++++++++ packages/linux/linux-2.6.24/gesbc-9302/defconfig | 1165 +++++++++++++++++++ packages/linux/linux_2.6.24.bb | 35 + 8 files changed, 2745 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-2.6.24/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.24/gesbc-9302/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.24/gesbc-9302/0001-gesbc-nand.patch create mode 100644 packages/linux/linux-2.6.24/gesbc-9302/0002-gesbc-eth-platform.patch create mode 100644 packages/linux/linux-2.6.24/gesbc-9302/0003-gesbc9302-defconfig.patch create mode 100644 packages/linux/linux-2.6.24/gesbc-9302/defconfig create mode 100644 packages/linux/linux_2.6.24.bb diff --git a/conf/machine/gesbc-9302.conf b/conf/machine/gesbc-9302.conf index ce45606dbd..af64a31d8b 100644 --- a/conf/machine/gesbc-9302.conf +++ b/conf/machine/gesbc-9302.conf @@ -6,7 +6,7 @@ TARGET_ARCH = "arm" PACKAGE_EXTRA_ARCHS = "armv4t" PREFERRED_PROVIDER_virtual/kernel = "linux" -PREFERRED_VERSION_linux ?= "2.6.23+2.6.24-rc5" +PREFERRED_VERSION_linux ?= "2.6.24" #don't try to access tty1 USE_VT = "0" diff --git a/packages/linux/linux-2.6.24/.mtn2git_empty b/packages/linux/linux-2.6.24/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.24/gesbc-9302/.mtn2git_empty b/packages/linux/linux-2.6.24/gesbc-9302/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.24/gesbc-9302/0001-gesbc-nand.patch b/packages/linux/linux-2.6.24/gesbc-9302/0001-gesbc-nand.patch new file mode 100644 index 0000000000..399bc43d31 --- /dev/null +++ b/packages/linux/linux-2.6.24/gesbc-9302/0001-gesbc-nand.patch @@ -0,0 +1,306 @@ +From 30026f5e13ac18daeeea1a3fd4ab06aa2961ef23 Mon Sep 17 00:00:00 2001 +From: Cliff Brake +Date: Mon, 17 Dec 2007 16:45:47 -0500 +Subject: [PATCH] gesbc-nand + +--- + drivers/mtd/nand/Kconfig | 7 ++ + drivers/mtd/nand/Makefile | 1 + + drivers/mtd/nand/gesbc.c | 255 +++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 263 insertions(+), 0 deletions(-) + create mode 100644 drivers/mtd/nand/gesbc.c + +diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig +index 246d451..cde3146 100644 +--- a/drivers/mtd/nand/Kconfig ++++ b/drivers/mtd/nand/Kconfig +@@ -51,6 +51,13 @@ config MTD_NAND_EDB7312 + This enables the driver for the Cirrus Logic EBD7312 evaluation + board to access the onboard NAND Flash. + ++config MTD_NAND_GESBC ++ tristate "Support for Glomation GESBC-93xx board" ++ depends on MTD_NAND && MACH_EDB9302 ++ help ++ This enables the driver for the Glomation GESBC-93xx ++ board to access the onboard NAND Flash. ++ + config MTD_NAND_H1900 + tristate "iPAQ H1900 flash" + depends on ARCH_PXA && MTD_PARTITIONS +diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile +index 3ad6c01..58c1961 100644 +--- a/drivers/mtd/nand/Makefile ++++ b/drivers/mtd/nand/Makefile +@@ -12,6 +12,7 @@ obj-$(CONFIG_MTD_NAND_AMS_DELTA) += ams-delta.o + obj-$(CONFIG_MTD_NAND_TOTO) += toto.o + obj-$(CONFIG_MTD_NAND_AUTCPU12) += autcpu12.o + obj-$(CONFIG_MTD_NAND_EDB7312) += edb7312.o ++obj-$(CONFIG_MTD_NAND_GESBC) += gesbc.o + obj-$(CONFIG_MTD_NAND_AU1550) += au1550nd.o + obj-$(CONFIG_MTD_NAND_BF5XX) += bf5xx_nand.o + obj-$(CONFIG_MTD_NAND_PPCHAMELEONEVB) += ppchameleonevb.o +diff --git a/drivers/mtd/nand/gesbc.c b/drivers/mtd/nand/gesbc.c +new file mode 100644 +index 0000000..a5844b1 +--- /dev/null ++++ b/drivers/mtd/nand/gesbc.c +@@ -0,0 +1,255 @@ ++/* ++ * drivers/mtd/nand/gesbc-9302.c ++ * ++ * Copyright (C) 2004 Glomation (support@glomationinc.com) ++ * ++ * Derived from drivers/mtd/nand/edb7312.c ++ * Copyright (C) 2004 Marius Grer (mag@sysgo.de) ++ * ++ * Derived from drivers/mtd/nand/autcpu12.c ++ * Copyright (c) 2001 Thomas Gleixner (gleixner@autronix.de) ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * Overview: ++ * This is a device driver for the NAND flash device found on the ++ * GESBC-93xx board with Samsung 128/256/512 Mbyte part. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define GESBC_NAND_FLASH_DATA 0x10000000 ++ ++#define GPIO_PADR EP93XX_GPIO_REG(0x0) ++#define GPIO_PADDR EP93XX_GPIO_REG(0x10) ++#define SMCBCR1 (EP93XX_AHB_VIRT_BASE + 0x00082000 + 0x04) ++ ++/* ++ * MTD structure for GESBC-93xx board ++ */ ++static struct mtd_info *gesbc_mtd = NULL; ++ ++ ++/* ++ * Module stuff ++ */ ++static unsigned long gesbc_fio_pbase = GESBC_NAND_FLASH_DATA; ++ ++#ifdef CONFIG_MTD_PARTITIONS ++/* ++ * Define static partitions for flash device ++ */ ++static struct mtd_partition partition_info32[] = { ++ { .name= "GESBC NAND FLASH", ++ .offset= 0, ++ .size= 128*1024*1024 }, ++}; ++/* ++ * Define static partitions for flash device ++ */ ++static struct mtd_partition partition_info128[] = { ++ { .name= "GESBC NAND FLASH", ++ .offset= 0, ++ .size= 128*1024*1024 }, ++}; ++ ++/* ++ * Define static partitions for flash device ++ */ ++static struct mtd_partition partition_info256[] = { ++ { .name= "GESBC NAND FLASH", ++ .offset= 0, ++ .size= 256*1024*1024 }, ++}; ++ ++/* ++ * Define static partitions for flash device ++ */ ++static struct mtd_partition partition_info512[] = { ++ { .name= "GESBC NAND FLASH", ++ .offset= 0, ++ .size= 512*1024*1024 }, ++}; ++ ++#define NUM_PARTITIONS 1 ++#endif ++ ++ ++/* ++ * hardware specific access to control-lines ++ * NAND_NCE: bit 0 -> bit 3 ++ * NAND_CLE: bit 1 -> bit 4 ++ * NAND_ALE: bit 2 -> bit 6 ++ */ ++static void gesbc_hwcontrol(struct mtd_info *mtd, int cmd, int ctrl) ++{ ++ unsigned long flags; ++ struct nand_chip *chip = mtd->priv; ++ ++ /* Disbale interrupt to avoid race condition */ ++ local_irq_save(flags); ++ ++ if (ctrl & NAND_CTRL_CHANGE) { ++ unsigned char bits; ++ ++ bits = (ctrl & NAND_CLE) << 3; ++ bits |= (ctrl & NAND_ALE) << 4; ++ if (ctrl & NAND_NCE) ++ bits &= ~0x08; ++ else ++ bits |= 0x08; ++ ++ __raw_writel( (__raw_readl(GPIO_PADR) & ~0x58 )| bits, GPIO_PADR); ++ } ++ if (cmd != NAND_CMD_NONE) ++ writeb(cmd, chip->IO_ADDR_W); ++ /* Restore interrupt state */ ++ local_irq_restore(flags); ++} ++ ++/* ++ * read device ready pin ++ */ ++static int gesbc_device_ready(struct mtd_info *mtd) ++{ ++ return (__raw_readl(GPIO_PADR) & 0x80) >> 7; ++} ++ ++#define MTDID "s3c2440-nand" ++ ++static const char *probes[] = { "cmdlinepart", NULL }; ++ ++ ++ ++/* ++ * Main initialization routine ++ */ ++static int __init gesbc_nand_init (void) ++{ ++ struct nand_chip *this; ++ const char *part_type = 0; ++ int mtd_parts_nb = 0; ++ struct mtd_partition *mtd_parts = 0; ++ unsigned long flags; ++ void * gesbc_fio_base; ++ ++ /* Allocate memory for MTD device structure and private data */ ++ gesbc_mtd = kmalloc(sizeof(struct mtd_info) + ++ sizeof(struct nand_chip), ++ GFP_KERNEL); ++ if (!gesbc_mtd) { ++ printk("Unable to allocate GESBC NAND MTD device structure.\n"); ++ return -ENOMEM; ++ } ++ ++ /* map physical adress */ ++ gesbc_fio_base = ioremap(gesbc_fio_pbase, SZ_1K); ++ if(!gesbc_fio_base) { ++ printk("ioremap GESBC-93xx NAND flash failed\n"); ++ kfree(gesbc_mtd); ++ return -EIO; ++ } ++ ++ ++ /* Get pointer to private data */ ++ this = (struct nand_chip *) (&gesbc_mtd[1]); ++ ++ /* Initialize structures */ ++ memset((char *) gesbc_mtd, 0, sizeof(struct mtd_info)); ++ memset((char *) this, 0, sizeof(struct nand_chip)); ++ ++ /* Link the private data with the MTD structure */ ++ gesbc_mtd->priv = this; ++ ++ /* Disbale interrupt to avoid race condition */ ++ local_irq_save(flags); ++ ++ /* ++ * Set GPIO Port A control register so that the pins are configured ++ * to be outputs for controlling the NAND flash. ++ */ ++ __raw_writel((__raw_readl(GPIO_PADDR) | 0x58) & ~0x80, GPIO_PADDR); ++ /* Clear NCE, clear CLE, clear ALE */ ++ __raw_writel( (__raw_readl(GPIO_PADR) | 0x08 ) & ~0x50, GPIO_PADR); ++ /* Set SRAM controller to 32 bit (8 bit just doesn't work, don't know why) bus width and 7 CLK wait state */ ++ __raw_writel(0x10003ce0, SMCBCR1); ++ local_irq_restore(flags); ++ ++ ++ /* insert callbacks */ ++ this->IO_ADDR_R = (void *) gesbc_fio_base; ++ this->IO_ADDR_W = (void *) gesbc_fio_base; ++ this->cmd_ctrl = (void *) gesbc_hwcontrol; ++ this->dev_ready = gesbc_device_ready; ++ this->chip_delay = 25; ++ this->ecc.mode = NAND_ECC_SOFT; ++ ++ __raw_writel(0xffffffff, gesbc_fio_base); ++ printk("Searching for NAND flash...\n"); ++ /* Scan to find existence of the device */ ++ if (nand_scan (gesbc_mtd, 1)) { ++ iounmap((void *)gesbc_fio_base); ++ kfree (gesbc_mtd); ++ return -ENXIO; ++ } ++ ++#ifdef CONFIG_MTD_CMDLINE_PARTS ++ gesbc_mtd->name="GESBC-NAND"; ++ mtd_parts_nb = parse_mtd_partitions(gesbc_mtd, probes, &mtd_parts, 0); ++ if (mtd_parts_nb > 0) ++ part_type = "command line"; ++ else ++ mtd_parts_nb = 0; ++#endif ++ ++ if (mtd_parts_nb == 0) ++ { ++ mtd_parts_nb = NUM_PARTITIONS; ++ mtd_parts = partition_info32; ++ if (gesbc_mtd->size >= (128 * 0x100000)) ++ mtd_parts = partition_info128; ++ if (gesbc_mtd->size >= (256 * 0x100000)) ++ mtd_parts = partition_info256; ++ if (gesbc_mtd->size >= (512 * 0x100000)) ++ mtd_parts = partition_info512; ++ part_type = "static"; ++ } ++ ++ /* Register the partitions */ ++ printk(KERN_NOTICE "Using %s partition definition\n", part_type); ++ add_mtd_partitions(gesbc_mtd, mtd_parts, mtd_parts_nb); ++ ++ /* Return happy */ ++ return 0; ++} ++module_init(gesbc_nand_init); ++ ++/* ++ * Clean up routine ++ */ ++static void __exit gesbc_nand_cleanup (void) ++{ ++/* struct nand_chip *this = (struct nand_chip *) &gesbc_mtd[1]; */ ++ ++ /* Unregister the device */ ++ del_mtd_device (gesbc_mtd); ++ ++ /* Free the MTD device structure */ ++ kfree (gesbc_mtd); ++} ++module_exit(gesbc_nand_cleanup); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("zql@glomationinc.com"); ++MODULE_DESCRIPTION("MTD map driver for Glomation GESBC-93xx board"); ++ +-- +1.5.4.rc4 + diff --git a/packages/linux/linux-2.6.24/gesbc-9302/0002-gesbc-eth-platform.patch b/packages/linux/linux-2.6.24/gesbc-9302/0002-gesbc-eth-platform.patch new file mode 100644 index 0000000000..3afda5a225 --- /dev/null +++ b/packages/linux/linux-2.6.24/gesbc-9302/0002-gesbc-eth-platform.patch @@ -0,0 +1,54 @@ +From b537e497d5490e7e8d94a49b7fbf2200c13ef200 Mon Sep 17 00:00:00 2001 +From: Cliff Brake +Date: Sat, 19 Jan 2008 17:56:56 -0500 +Subject: [PATCH] gesbc-eth-platform + +--- + arch/arm/mach-ep93xx/edb9302.c | 27 +++++++++++++++++++++++++++ + 1 files changed, 27 insertions(+), 0 deletions(-) + +diff --git a/arch/arm/mach-ep93xx/edb9302.c b/arch/arm/mach-ep93xx/edb9302.c +index 0315615..8dbeb7c 100644 +--- a/arch/arm/mach-ep93xx/edb9302.c ++++ b/arch/arm/mach-ep93xx/edb9302.c +@@ -43,10 +43,37 @@ static struct platform_device edb9302_flash = { + .resource = &edb9302_flash_resource, + }; + ++static struct ep93xx_eth_data ep93xx_eth_data = { ++ .phy_id = 1, ++}; ++ ++static struct resource ep93xx_eth_resource[] = { ++ { ++ .start = EP93XX_ETHERNET_PHYS_BASE, ++ .end = EP93XX_ETHERNET_PHYS_BASE + 0xffff, ++ .flags = IORESOURCE_MEM, ++ }, { ++ .start = IRQ_EP93XX_ETHERNET, ++ .end = IRQ_EP93XX_ETHERNET, ++ .flags = IORESOURCE_IRQ, ++ } ++}; ++ ++static struct platform_device ep93xx_eth_device = { ++ .name = "ep93xx-eth", ++ .id = -1, ++ .dev = { ++ .platform_data = &ep93xx_eth_data, ++ }, ++ .num_resources = 2, ++ .resource = ep93xx_eth_resource, ++}; ++ + static void __init edb9302_init_machine(void) + { + ep93xx_init_devices(); + platform_device_register(&edb9302_flash); ++ platform_device_register(&ep93xx_eth_device); + } + + MACHINE_START(EDB9302, "Cirrus Logic EDB9302 Evaluation Board") +-- +1.5.4.rc4 + diff --git a/packages/linux/linux-2.6.24/gesbc-9302/0003-gesbc9302-defconfig.patch b/packages/linux/linux-2.6.24/gesbc-9302/0003-gesbc9302-defconfig.patch new file mode 100644 index 0000000000..8fca0d5c10 --- /dev/null +++ b/packages/linux/linux-2.6.24/gesbc-9302/0003-gesbc9302-defconfig.patch @@ -0,0 +1,1184 @@ +From d0d110243832e82847ea3e0a806bb6e6edaaf71f Mon Sep 17 00:00:00 2001 +From: Cliff Brake +Date: Mon, 17 Dec 2007 16:46:19 -0500 +Subject: [PATCH] gesbc9302-defconfig + +--- + arch/arm/configs/gesbc9302_defconfig | 1165 ++++++++++++++++++++++++++++++++++ + 1 files changed, 1165 insertions(+), 0 deletions(-) + create mode 100644 arch/arm/configs/gesbc9302_defconfig + +diff --git a/arch/arm/configs/gesbc9302_defconfig b/arch/arm/configs/gesbc9302_defconfig +new file mode 100644 +index 0000000..da4fc81 +--- /dev/null ++++ b/arch/arm/configs/gesbc9302_defconfig +@@ -0,0 +1,1165 @@ ++# ++# Automatically generated make config: don't edit ++# Linux kernel version: 2.6.24 ++# Thu Jan 31 23:28:43 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 +-- +1.5.4.rc4 + diff --git a/packages/linux/linux-2.6.24/gesbc-9302/defconfig b/packages/linux/linux-2.6.24/gesbc-9302/defconfig new file mode 100644 index 0000000000..c7db3e6da0 --- /dev/null +++ b/packages/linux/linux-2.6.24/gesbc-9302/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 new file mode 100644 index 0000000000..ba8ce52dc5 --- /dev/null +++ b/packages/linux/linux_2.6.24.bb @@ -0,0 +1,35 @@ +require linux.inc + +# Mark archs/machines that this kernel supports +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_gesbc-9302 = "1" + +PR = "r0" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ + file://defconfig \ + " + +S = "${WORKDIR}/linux-2.6.24" + +SRC_URI_append_gesbc-9302 = " \ + file://0001-gesbc-nand.patch;patch=1 \ + file://0002-gesbc-eth-platform.patch;patch=1 \ + " + +CMDLINE_gesbc-9302 = "console=ttyAM0 root=mtd5 rootfstype=jffs2 mtdparts=GESBC-NAND:64m(app),-(data)" + +FILES_kernel-image_gesbc-9302 = "" + +do_devicetree_image() { + if test -n "${DEVICETREE}" ; then + dtc -I dts -O dtb -o ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb ${DEVICETREE} + + cd ${DEPLOY_DIR_IMAGE} + rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.dtb + ln -sf ${KERNEL_IMAGE_BASE_NAME}.dtb ${KERNEL_IMAGE_SYMLINK_NAME}.dtb + fi +} + +addtask devicetree_image after do_deploy before do_package + -- cgit v1.2.3 From 0a354fa969fe64e9eb7af8ab273da42e382bd665 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Tue, 5 Feb 2008 05:26:55 +0000 Subject: linux-ixp4xx: Update defconfigs and sane-srcrevs for latest patches that have been accepted upstream --- conf/distro/include/sane-srcrevs.inc | 2 +- packages/linux/linux-ixp4xx/defconfig-2.6.23.14 | 8 ++++---- packages/linux/linux-ixp4xx/defconfig-2.6.24 | 9 +++++---- packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 | 1 + 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index c8b67efb7a..ce8555bf1c 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -44,7 +44,7 @@ SRCREV_pn-libowl ?= "277" SRCREV_pn-libxosd ?= "627" SRCREV_pn-linux-bfin ?= "3758" SRCREV_pn-linux-hackndev-2.6 ?= "1308" -SRCREV_pn-linux-ixp4xx ?= "1021" +SRCREV_pn-linux-ixp4xx ?= "1039" SRCREV_pn-linux-openmoko ?= "4014" SRCREV_pn-llvm-gcc4 ?= "374" SRCREV_pn-llvm-gcc4-cross ?= "374" diff --git a/packages/linux/linux-ixp4xx/defconfig-2.6.23.14 b/packages/linux/linux-ixp4xx/defconfig-2.6.23.14 index efbd55195d..f4b897fc57 100644 --- a/packages/linux/linux-ixp4xx/defconfig-2.6.23.14 +++ b/packages/linux/linux-ixp4xx/defconfig-2.6.23.14 @@ -1650,19 +1650,19 @@ CONFIG_RTC_DRV_PCF8563=y # # File systems # -CONFIG_EXT2_FS=m +CONFIG_EXT2_FS=y CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_POSIX_ACL=y CONFIG_EXT2_FS_SECURITY=y # CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m +CONFIG_EXT3_FS=y CONFIG_EXT3_FS_XATTR=y CONFIG_EXT3_FS_POSIX_ACL=y CONFIG_EXT3_FS_SECURITY=y # CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m +CONFIG_JBD=y # CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=m +CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS=m # CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_PROC_INFO is not set diff --git a/packages/linux/linux-ixp4xx/defconfig-2.6.24 b/packages/linux/linux-ixp4xx/defconfig-2.6.24 index 6aeb53b5ac..9f13364281 100644 --- a/packages/linux/linux-ixp4xx/defconfig-2.6.24 +++ b/packages/linux/linux-ixp4xx/defconfig-2.6.24 @@ -1228,6 +1228,7 @@ CONFIG_LEDS_CLASS=y # LED drivers # # CONFIG_LEDS_IXP4XX is not set +CONFIG_LEDS_FSG=y CONFIG_LEDS_GPIO=y # @@ -1650,19 +1651,19 @@ CONFIG_RTC_DRV_PCF8563=y # # File systems # -CONFIG_EXT2_FS=m +CONFIG_EXT2_FS=y CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_POSIX_ACL=y CONFIG_EXT2_FS_SECURITY=y # CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m +CONFIG_EXT3_FS=y CONFIG_EXT3_FS_XATTR=y CONFIG_EXT3_FS_POSIX_ACL=y CONFIG_EXT3_FS_SECURITY=y # CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m +CONFIG_JBD=y # CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=m +CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS=m # CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_PROC_INFO is not set diff --git a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 index 37d1054c2a..28b69a82ed 100644 --- a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 +++ b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 @@ -1228,6 +1228,7 @@ CONFIG_LEDS_CLASS=y # LED drivers # # CONFIG_LEDS_IXP4XX is not set +CONFIG_LEDS_FSG=y CONFIG_LEDS_GPIO=y # -- cgit v1.2.3 From 15f1db4fe643029378eec118e38f5aa40c5cd6a4 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Tue, 5 Feb 2008 05:42:33 +0000 Subject: ixp4xx.inc: Move default ixp4xx kernel to 2.6.24 --- conf/machine/include/ixp4xx.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/include/ixp4xx.inc b/conf/machine/include/ixp4xx.inc index 924fb54f1e..da1e8b7557 100644 --- a/conf/machine/include/ixp4xx.inc +++ b/conf/machine/include/ixp4xx.inc @@ -7,7 +7,7 @@ MACHINE_FEATURES ?= "kernel26 usbhost ext2 vfat redboot apex" # Select an appropriate default kernel PREFERRED_PROVIDER_virtual/kernel ?= "linux-ixp4xx" -PREFERRED_VERSION_linux-ixp4xx ?= "2.6.23.14+svnr${SRCREV}" +PREFERRED_VERSION_linux-ixp4xx ?= "2.6.24+svnr${SRCREV}" # Add packages required for basic networking support MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= "ixp4xx-npe" -- cgit v1.2.3 From 4f9902d9b8f00d1afa85b283e258e7951bdd619e Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Tue, 5 Feb 2008 06:08:34 +0000 Subject: ixp4xx-kernel: Replaced by linux-ixp4xx since Nov 2007 --- packages/linux/ixp4xx-kernel/.mtn2git_empty | 0 packages/linux/ixp4xx-kernel/2.6.18/.mtn2git_empty | 0 packages/linux/ixp4xx-kernel/2.6.18/defconfig | 1840 ----------------- packages/linux/ixp4xx-kernel/2.6.19/.mtn2git_empty | 0 packages/linux/ixp4xx-kernel/2.6.19/defconfig | 1950 ------------------ packages/linux/ixp4xx-kernel/2.6.20/.mtn2git_empty | 0 packages/linux/ixp4xx-kernel/2.6.20/defconfig | 2031 ------------------- packages/linux/ixp4xx-kernel/2.6.21/.mtn2git_empty | 0 packages/linux/ixp4xx-kernel/2.6.21/defconfig | 2088 -------------------- packages/linux/ixp4xx-kernel/2.6.22/.mtn2git_empty | 0 packages/linux/ixp4xx-kernel/2.6.22/defconfig | 1984 ------------------- packages/linux/ixp4xx-kernel/2.6.23/.mtn2git_empty | 0 packages/linux/ixp4xx-kernel/2.6.23/defconfig | 1940 ------------------ 13 files changed, 11833 deletions(-) delete mode 100644 packages/linux/ixp4xx-kernel/.mtn2git_empty delete mode 100644 packages/linux/ixp4xx-kernel/2.6.18/.mtn2git_empty delete mode 100644 packages/linux/ixp4xx-kernel/2.6.18/defconfig delete mode 100644 packages/linux/ixp4xx-kernel/2.6.19/.mtn2git_empty delete mode 100644 packages/linux/ixp4xx-kernel/2.6.19/defconfig delete mode 100644 packages/linux/ixp4xx-kernel/2.6.20/.mtn2git_empty delete mode 100644 packages/linux/ixp4xx-kernel/2.6.20/defconfig delete mode 100644 packages/linux/ixp4xx-kernel/2.6.21/.mtn2git_empty delete mode 100644 packages/linux/ixp4xx-kernel/2.6.21/defconfig delete mode 100644 packages/linux/ixp4xx-kernel/2.6.22/.mtn2git_empty delete mode 100644 packages/linux/ixp4xx-kernel/2.6.22/defconfig delete mode 100644 packages/linux/ixp4xx-kernel/2.6.23/.mtn2git_empty delete mode 100644 packages/linux/ixp4xx-kernel/2.6.23/defconfig diff --git a/packages/linux/ixp4xx-kernel/.mtn2git_empty b/packages/linux/ixp4xx-kernel/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/ixp4xx-kernel/2.6.18/.mtn2git_empty b/packages/linux/ixp4xx-kernel/2.6.18/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/ixp4xx-kernel/2.6.18/defconfig b/packages/linux/ixp4xx-kernel/2.6.18/defconfig deleted file mode 100644 index 7189609472..0000000000 --- a/packages/linux/ixp4xx-kernel/2.6.18/defconfig +++ /dev/null @@ -1,1840 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.18 -# Tue Oct 31 07:57:52 2006 -# -CONFIG_ARM=y -CONFIG_GENERIC_TIME=y -CONFIG_MMU=y -CONFIG_GENERIC_HARDIRQS=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# -CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_AUDIT is not set -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -# CONFIG_RELAY is not set -CONFIG_INITRAMFS_SOURCE="" -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -CONFIG_SYSCTL=y -CONFIG_KALLSYMS=y -CONFIG_KALLSYMS_EXTRA_PASS=y -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_SHMEM=y -CONFIG_SLAB=y -# CONFIG_VM_EVENT_COUNTERS is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -# CONFIG_SLOB is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y - -# -# Block layer -# -# CONFIG_BLK_DEV_IO_TRACE is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP3XX is not set -CONFIG_ARCH_IXP4XX=y -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_PNX4008 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y - -# -# Intel IXP4xx Implementation Options -# - -# -# IXP4xx Platforms -# -CONFIG_MACH_NSLU2=y -CONFIG_ARCH_AVILA=y -CONFIG_MACH_LOFT=y -# CONFIG_ARCH_ADI_COYOTE is not set -CONFIG_ARCH_IXDP425=y -# CONFIG_MACH_IXDPG425 is not set -# CONFIG_MACH_IXDP465 is not set -CONFIG_ARCH_IXCDP1100=y -# CONFIG_ARCH_PRPMC1100 is not set -CONFIG_MACH_NAS100D=y -CONFIG_ARCH_IXDP4XX=y -CONFIG_MACH_FSG=y -# CONFIG_MACH_GTWX5715 is not set - -# -# IXP4xx Options -# -CONFIG_DMABOUNCE=y -# CONFIG_IXP4XX_INDIRECT_PCI is not set - -# -# 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 - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_BIG_ENDIAN is not set -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -CONFIG_PCI=y - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -CONFIG_PREEMPT=y -# CONFIG_NO_IDLE_HZ is not set -CONFIG_HZ=100 -# CONFIG_AEABI is not set -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" -# CONFIG_XIP_KERNEL is not set - -# -# 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 -# CONFIG_ARTHUR is not set - -# -# Power management options -# -# CONFIG_PM is not set -# CONFIG_APM is not set - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -# CONFIG_NETDEBUG is not set -CONFIG_PACKET=m -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER 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 is not set -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_BIC=y - -# -# IP: Virtual Server Configuration -# -# CONFIG_IP_VS is not set -CONFIG_IPV6=m -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -# CONFIG_NETFILTER_NETLINK is not set -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m - -# -# IP: Netfilter Configuration -# -CONFIG_IP_NF_CONNTRACK=m -# CONFIG_IP_NF_CT_ACCT is not set -# CONFIG_IP_NF_CONNTRACK_MARK is not set -# CONFIG_IP_NF_CONNTRACK_EVENTS is not set -CONFIG_IP_NF_CT_PROTO_SCTP=m -CONFIG_IP_NF_FTP=m -CONFIG_IP_NF_IRC=m -# CONFIG_IP_NF_NETBIOS_NS is not set -CONFIG_IP_NF_TFTP=m -CONFIG_IP_NF_AMANDA=m -# CONFIG_IP_NF_PPTP is not set -CONFIG_IP_NF_H323=m -CONFIG_IP_NF_SIP=m -CONFIG_IP_NF_QUEUE=m -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_IPRANGE=m -CONFIG_IP_NF_MATCH_TOS=m -CONFIG_IP_NF_MATCH_RECENT=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_DSCP=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_MATCH_HASHLIMIT=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_IP_NF_TARGET_TCPMSS=m -CONFIG_IP_NF_NAT=m -CONFIG_IP_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_IP_NF_NAT_SNMP_BASIC=m -CONFIG_IP_NF_NAT_IRC=m -CONFIG_IP_NF_NAT_FTP=m -CONFIG_IP_NF_NAT_TFTP=m -CONFIG_IP_NF_NAT_AMANDA=m -CONFIG_IP_NF_NAT_H323=m -CONFIG_IP_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_DSCP=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=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_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -CONFIG_IP6_NF_RAW=m - -# -# Bridge: Netfilter Configuration -# -# CONFIG_BRIDGE_NF_EBTABLES is not set - -# -# DCCP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_DCCP is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_SCTP is not set - -# -# TIPC Configuration (EXPERIMENTAL) -# -CONFIG_TIPC=m -# CONFIG_TIPC_ADVANCED is not set -# CONFIG_TIPC_DEBUG is not set -# CONFIG_ATM is not set -CONFIG_BRIDGE=m -CONFIG_VLAN_8021Q=m -# CONFIG_DECNET is not set -CONFIG_LLC=m -# CONFIG_LLC2 is not set -CONFIG_IPX=m -# CONFIG_IPX_INTERN is not set -CONFIG_ATALK=m -CONFIG_DEV_APPLETALK=m -CONFIG_IPDDP=m -CONFIG_IPDDP_ENCAP=y -CONFIG_IPDDP_DECAP=y -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set -CONFIG_NET_CLS_ROUTE=y - -# -# Network testing -# -CONFIG_NET_PKTGEN=m -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -# CONFIG_BT_HIDP is not set - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -# CONFIG_BT_HCIUART is not set -CONFIG_BT_HCIBCM203X=m -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -CONFIG_IEEE80211=m -# CONFIG_IEEE80211_DEBUG is not set -CONFIG_IEEE80211_CRYPT_WEP=m -CONFIG_IEEE80211_CRYPT_CCMP=m -CONFIG_IEEE80211_CRYPT_TKIP=m -CONFIG_IEEE80211_SOFTMAC=m -# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set -CONFIG_WIRELESS_EXT=y - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_SYS_HYPERVISOR is not set - -# -# Connector - unified userspace <-> kernelspace linker -# -# CONFIG_CONNECTOR is not set - -# -# Memory Technology Devices (MTD) -# -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 is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -CONFIG_NFTL=y -CONFIG_NFTL_RW=y -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -# CONFIG_MTD_CFI_NOSWAP is not set -CONFIG_MTD_CFI_BE_BYTE_SWAP=y -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -CONFIG_MTD_COMPLEX_MAPPINGS=y -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_IXP4XX=y -# CONFIG_MTD_PCI is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# OneNAND Flash Device Drivers -# -# CONFIG_MTD_ONENAND is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Plug and Play support -# - -# -# Block devices -# -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_SX8 is not set -# CONFIG_BLK_DEV_UB is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=4 -CONFIG_BLK_DEV_RAM_SIZE=10240 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CDROM_PKTCDVD=m -CONFIG_CDROM_PKTCDVD_BUFFERS=8 -# CONFIG_CDROM_PKTCDVD_WCACHE is not set -CONFIG_ATA_OVER_ETH=m - -# -# ATA/ATAPI/MFM/RLL support -# -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=m -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 is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set - -# -# SCSI Transport Attributes -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -CONFIG_SCSI_ISCSI_ATTRS=m -# CONFIG_SCSI_SAS_ATTRS is not set - -# -# SCSI low-level drivers -# -CONFIG_ISCSI_TCP=m -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_MEGARAID_NEWGEN is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -CONFIG_SCSI_SATA=m -# CONFIG_SCSI_SATA_AHCI is not set -# CONFIG_SCSI_SATA_SVW is not set -# CONFIG_SCSI_ATA_PIIX is not set -# CONFIG_SCSI_SATA_MV is not set -# CONFIG_SCSI_SATA_NV is not set -# CONFIG_SCSI_PDC_ADMA is not set -# CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_SATA_QSTOR is not set -# CONFIG_SCSI_SATA_PROMISE is not set -# CONFIG_SCSI_SATA_SX4 is not set -# CONFIG_SCSI_SATA_SIL is not set -# CONFIG_SCSI_SATA_SIL24 is not set -# CONFIG_SCSI_SATA_SIS is not set -# CONFIG_SCSI_SATA_ULI is not set -CONFIG_SCSI_SATA_VIA=m -# CONFIG_SCSI_SATA_VITESSE 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_SYM53C8XX_2 is not set -# CONFIG_SCSI_IPR is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set - -# -# Multi-device support (RAID and LVM) -# -CONFIG_MD=y -CONFIG_BLK_DEV_MD=m -CONFIG_MD_LINEAR=m -CONFIG_MD_RAID0=m -CONFIG_MD_RAID1=m -CONFIG_MD_RAID10=m -# CONFIG_MD_RAID456 is not set -CONFIG_MD_MULTIPATH=m -CONFIG_MD_FAULTY=m -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_CRYPT is not set -# CONFIG_DM_SNAPSHOT is not set -# CONFIG_DM_MIRROR is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set - -# -# Fusion MPT device support -# -# CONFIG_FUSION is not set -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_FC is not set -# CONFIG_FUSION_SAS is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -CONFIG_TUN=m - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set - -# -# PHY device support -# -# CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_MII=m -CONFIG_IXP4XX_QMGR=m -CONFIG_IXP4XX_NPE=m -CONFIG_IXP4XX_FW_LOAD=y -CONFIG_IXP4XX_MAC=m -CONFIG_IXP4XX_CRYPTO=m -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_SMC91X is not set -# CONFIG_DM9000 is not set - -# -# Tulip family network device support -# -# CONFIG_NET_TULIP is not set -# CONFIG_HP100 is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_FORCEDETH is not set -# CONFIG_DGRS is not set -# CONFIG_EEPRO100 is not set -# CONFIG_E100 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -CONFIG_R8169=m -# CONFIG_R8169_NAPI is not set -CONFIG_R8169_VLAN=y -# CONFIG_SIS190 is not set -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -# CONFIG_SK98LIN is not set -# CONFIG_VIA_VELOCITY is not set -# CONFIG_TIGON3 is not set -# CONFIG_BNX2 is not set - -# -# Ethernet (10000 Mbit) -# -# CONFIG_CHELSIO_T1 is not set -# CONFIG_IXGB is not set -# CONFIG_S2IO is not set -# CONFIG_MYRI10GE is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_NET_WIRELESS_RTNETLINK is not set - -# -# Obsolete Wireless cards support (pre-802.11) -# -# CONFIG_STRIP is not set - -# -# Wireless 802.11b ISA/PCI cards support -# -# CONFIG_IPW2100 is not set -# CONFIG_IPW2200 is not set -# CONFIG_HERMES is not set -# CONFIG_ATMEL is not set - -# -# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support -# -# CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set -# CONFIG_HOSTAP is not set -# CONFIG_BCM43XX is not set -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set -CONFIG_NET_WIRELESS=y - -# -# Wan interfaces -# -# CONFIG_WAN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -CONFIG_PPPOE=m -# CONFIG_SLIP is not set -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set -CONFIG_NETCONSOLE=m -CONFIG_NETPOLL=y -# CONFIG_NETPOLL_RX is not set -# CONFIG_NETPOLL_TRAP is not set -CONFIG_NET_POLL_CONTROLLER=y - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -CONFIG_INPUT_MISC=y -CONFIG_INPUT_IXP4XX_BEEPER=y -# CONFIG_INPUT_UINPUT 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=y -# CONFIG_COMPUTONE is not set -# CONFIG_ROCKETPORT is not set -# CONFIG_CYCLADES is not set -# CONFIG_DIGIEPCA is not set -# CONFIG_MOXA_INTELLIO is not set -# CONFIG_MOXA_SMARTIO is not set -# CONFIG_ISI is not set -# CONFIG_SYNCLINKMP is not set -# CONFIG_SYNCLINK_GT is not set -CONFIG_N_HDLC=m -# CONFIG_RISCOM8 is not set -# CONFIG_SPECIALIX is not set -# CONFIG_SX is not set -# CONFIG_RIO is not set -# CONFIG_STALDRV is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_PCI=m -CONFIG_SERIAL_8250_NR_UARTS=2 -CONFIG_SERIAL_8250_RUNTIME_UARTS=2 -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_IXP4XX_WATCHDOG=m - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_IXP4XX=m -# CONFIG_NVRAM is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set - -# -# TPM devices -# -# CONFIG_TCG_TPM is not set -# CONFIG_TELCLOCK is not set - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=m - -# -# I2C Algorithms -# -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_I810 is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_IOP3XX is not set -CONFIG_I2C_ISA=m -CONFIG_I2C_IXP4XX=y -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_PROSAVAGE is not set -# CONFIG_I2C_SAVAGE4 is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set -# CONFIG_I2C_VOODOO3 is not set -# CONFIG_I2C_PCA_ISA is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -CONFIG_SENSORS_EEPROM=y -CONFIG_SENSORS_PCF8574=m -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_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 - -# -# Dallas's 1-wire bus -# - -# -# Hardware Monitoring support -# -CONFIG_HWMON=m -CONFIG_HWMON_VID=m -# CONFIG_SENSORS_ABITUGURU is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ASB100 is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_FSCHER is not set -# CONFIG_SENSORS_FSCPOS is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT8231 is not set -CONFIG_SENSORS_W83781D=m -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -CONFIG_SENSORS_AD7418=m -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Misc devices -# - -# -# LED devices -# -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_IXP4XX=y - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=m -CONFIG_VIDEO_V4L1=y -CONFIG_VIDEO_V4L1_COMPAT=y -CONFIG_VIDEO_V4L2=y - -# -# Video Capture Adapters -# - -# -# Video Capture Adapters -# -# CONFIG_VIDEO_ADV_DEBUG is not set -CONFIG_VIDEO_VIVI=m -# CONFIG_VIDEO_BT848 is not set -CONFIG_VIDEO_CPIA=m -CONFIG_VIDEO_CPIA_USB=m -CONFIG_VIDEO_CPIA2=m -CONFIG_VIDEO_SAA5246A=m -CONFIG_VIDEO_SAA5249=m -CONFIG_TUNER_3036=m -CONFIG_VIDEO_STRADIS=m -CONFIG_VIDEO_ZORAN=m -CONFIG_VIDEO_ZORAN_BUZ=m -CONFIG_VIDEO_ZORAN_DC10=m -CONFIG_VIDEO_ZORAN_DC30=m -CONFIG_VIDEO_ZORAN_LML33=m -CONFIG_VIDEO_ZORAN_LML33R10=m -# CONFIG_VIDEO_ZORAN_AVS6EYES is not set -CONFIG_VIDEO_SAA7134=m -# CONFIG_VIDEO_SAA7134_ALSA is not set -CONFIG_VIDEO_MXB=m -CONFIG_VIDEO_DPC=m -CONFIG_VIDEO_HEXIUM_ORION=m -CONFIG_VIDEO_HEXIUM_GEMINI=m -CONFIG_VIDEO_CX88=m -CONFIG_VIDEO_CX88_ALSA=m -# CONFIG_VIDEO_CX88_BLACKBIRD is not set - -# -# Encoders and Decoders -# -CONFIG_VIDEO_MSP3400=m -CONFIG_VIDEO_CS53L32A=m -# CONFIG_VIDEO_TLV320AIC23B is not set -CONFIG_VIDEO_WM8775=m -CONFIG_VIDEO_WM8739=m -# CONFIG_VIDEO_CX2341X is not set -CONFIG_VIDEO_CX25840=m -CONFIG_VIDEO_SAA711X=m -CONFIG_VIDEO_SAA7127=m -CONFIG_VIDEO_UPD64031A=m -CONFIG_VIDEO_UPD64083=m - -# -# V4L USB devices -# -# CONFIG_VIDEO_PVRUSB2 is not set -# CONFIG_VIDEO_EM28XX is not set -# CONFIG_USB_VICAM is not set -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_KONICAWC is not set -# CONFIG_USB_QUICKCAM_MESSENGER is not set -# CONFIG_USB_ET61X251 is not set -CONFIG_VIDEO_OVCAMCHIP=m -# CONFIG_USB_W9968CF is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_SE401 is not set -# CONFIG_USB_SN9C102 is not set -# CONFIG_USB_STV680 is not set -# CONFIG_USB_ZC0301 is not set -CONFIG_USB_PWC=m -# CONFIG_USB_PWC_DEBUG is not set - -# -# Radio Adapters -# -# CONFIG_RADIO_GEMTEK_PCI is not set -# CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_MAESTRO is not set -# CONFIG_USB_DSBR is not set - -# -# Digital Video Broadcasting Devices -# -# CONFIG_DVB is not set -CONFIG_VIDEO_SAA7146=m -CONFIG_VIDEO_SAA7146_VV=m -CONFIG_VIDEO_VIDEOBUF=m -CONFIG_VIDEO_TUNER=m -CONFIG_VIDEO_BUF=m -CONFIG_VIDEO_BTCX=m -CONFIG_VIDEO_IR=m -CONFIG_VIDEO_TVEEPROM=m -# CONFIG_USB_DABUSB is not set - -# -# Graphics support -# -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB is not set -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# PCI devices -# -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ALS300 is not set -# CONFIG_SND_ALI5451 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AZT3328 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_EMU10K1X is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDA_INTEL is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# ALSA ARM devices -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set - -# -# USB support -# -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB=m -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -CONFIG_USB_EHCI_HCD=m -CONFIG_USB_EHCI_SPLIT_ISO=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_UHCI_HCD=m -# CONFIG_USB_SL811_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_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=y -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -CONFIG_USB_HIDINPUT=y -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -CONFIG_USB_HIDDEV=y - -# -# USB HID Boot Protocol drivers -# -CONFIG_USB_KBD=m -# CONFIG_USB_MOUSE is not set -# CONFIG_USB_AIPTEK is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_ACECAD is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_TOUCHSCREEN is not set -CONFIG_USB_YEALINK=m -# CONFIG_USB_XPAD is not set -# CONFIG_USB_ATI_REMOTE is not set -# CONFIG_USB_ATI_REMOTE2 is not set -# CONFIG_USB_KEYSPAN_REMOTE is not set -# CONFIG_USB_APPLETOUCH is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=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_GL620A is not set -CONFIG_USB_NET_NET1080=m -# CONFIG_USB_NET_PLUSB is not set -# CONFIG_USB_NET_RNDIS_HOST is not set -# CONFIG_USB_NET_CDC_SUBSET is not set -CONFIG_USB_NET_ZAURUS=m -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -# CONFIG_USB_SERIAL_AIRPRIME is not set -# CONFIG_USB_SERIAL_ARK3116 is not set -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_WHITEHEAT=m -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=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 is not set -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -# 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_EZUSB=y - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGETKIT is not set -# CONFIG_USB_PHIDGETSERVO is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_APPLEDISPLAY is not set -CONFIG_USB_SISUSBVGA=m -# CONFIG_USB_LD is not set -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -# CONFIG_USB_GADGET is not set - -# -# MMC/SD Card support -# -# CONFIG_MMC is not set - -# -# Real Time Clock -# -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" - -# -# 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 - -# -# RTC drivers -# -CONFIG_RTC_DRV_X1205=y -CONFIG_RTC_DRV_DS1307=y -# CONFIG_RTC_DRV_DS1553 is not set -CONFIG_RTC_DRV_ISL1208=y -CONFIG_RTC_DRV_DS1672=y -# CONFIG_RTC_DRV_DS1742 is not set -CONFIG_RTC_DRV_PCF8563=y -# CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_TEST is not set -# CONFIG_RTC_DRV_V3020 is not set - -# -# File systems -# -CONFIG_EXT2_FS=m -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=m -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -# CONFIG_FUSE_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_ZISOFS_FS=m -CONFIG_UDF_FS=m -CONFIG_UDF_NLS=y - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m -# CONFIG_NTFS_DEBUG is not set -CONFIG_NTFS_RW=y - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -# CONFIG_JFFS2_NATIVE_ENDIAN is not set -# CONFIG_JFFS2_BIG_ENDIAN is not set -CONFIG_JFFS2_LITTLE_ENDIAN=y -# CONFIG_CRAMFS is not set -CONFIG_SQUASHFS=m -# CONFIG_SQUASHFS_EMBEDDED is not set -CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -# CONFIG_SQUASHFS_VMALLOC is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -# CONFIG_NFS_V3_ACL is not set -CONFIG_NFS_V4=y -CONFIG_NFS_DIRECTIO=y -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_RPCSEC_GSS_KRB5=m -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -# CONFIG_CIFS_WEAK_PW_HASH is not set -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -# CONFIG_9P_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_KARMA_PARTITION is not set -# CONFIG_EFI_PARTITION is not set - -# -# Native Language Support -# -CONFIG_NLS=m -CONFIG_NLS_DEFAULT="utf8" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_KERNEL is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_DEBUG_BUGVERBOSE is not set -# CONFIG_DEBUG_FS is not set -CONFIG_FRAME_POINTER=y -# CONFIG_UNWIND_INFO is not set -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -CONFIG_CRYPTO=y -CONFIG_CRYPTO_HMAC=y -# CONFIG_CRYPTO_NULL is not set -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_DES=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_AES=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_TEST=m - -# -# Hardware crypto devices -# - -# -# Library routines -# -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -CONFIG_CRC32=y -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 diff --git a/packages/linux/ixp4xx-kernel/2.6.19/.mtn2git_empty b/packages/linux/ixp4xx-kernel/2.6.19/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/ixp4xx-kernel/2.6.19/defconfig b/packages/linux/ixp4xx-kernel/2.6.19/defconfig deleted file mode 100644 index 58d6a39c8d..0000000000 --- a/packages/linux/ixp4xx-kernel/2.6.19/defconfig +++ /dev/null @@ -1,1950 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.19 -# Sun Jan 14 08:22:40 2007 -# -CONFIG_ARM=y -CONFIG_GENERIC_TIME=y -CONFIG_MMU=y -CONFIG_GENERIC_HARDIRQS=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# -CONFIG_LOCALVERSION="" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_IPC_NS is not set -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_UTS_NS is not set -# CONFIG_AUDIT is not set -CONFIG_IKCONFIG=m -CONFIG_IKCONFIG_PROC=y -# CONFIG_RELAY is not set -CONFIG_INITRAMFS_SOURCE="" -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -# CONFIG_KALLSYMS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_SHMEM=y -CONFIG_SLAB=y -# CONFIG_VM_EVENT_COUNTERS is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -# CONFIG_SLOB is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y - -# -# Block layer -# -CONFIG_BLOCK=y -# CONFIG_BLK_DEV_IO_TRACE is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -CONFIG_ARCH_IXP4XX=y -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_PNX4008 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y - -# -# Intel IXP4xx Implementation Options -# - -# -# IXP4xx Platforms -# -CONFIG_MACH_NSLU2=y -CONFIG_MACH_AVILA=y -CONFIG_MACH_LOFT=y -# CONFIG_ARCH_ADI_COYOTE is not set -CONFIG_ARCH_IXDP425=y -# CONFIG_MACH_IXDPG425 is not set -# CONFIG_MACH_IXDP465 is not set -CONFIG_ARCH_IXCDP1100=y -# CONFIG_ARCH_PRPMC1100 is not set -CONFIG_MACH_NAS100D=y -CONFIG_MACH_DSMG600=y -CONFIG_ARCH_IXDP4XX=y -CONFIG_MACH_FSG=y -# CONFIG_MACH_GTWX5715 is not set - -# -# IXP4xx Options -# -CONFIG_DMABOUNCE=y -# CONFIG_IXP4XX_INDIRECT_PCI is not set - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -CONFIG_CPU_BIG_ENDIAN=y -# CONFIG_CPU_DCACHE_DISABLE is not set -CONFIG_XSCALE_PMU=y -CONFIG_KEXEC=y - -# -# Bus support -# -CONFIG_PCI=y - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -CONFIG_PREEMPT=y -# 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_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" -# CONFIG_XIP_KERNEL is not set - -# -# 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 -# CONFIG_ARTHUR is not set - -# -# Power management options -# -# CONFIG_PM is not set -# CONFIG_APM is not set - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -# CONFIG_NETDEBUG is not set -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER is not set -# CONFIG_XFRM_SUB_POLICY 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 is not set -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_XFRM_MODE_BEET=m -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" - -# -# IP: Virtual Server Configuration -# -# CONFIG_IP_VS is not set -CONFIG_IPV6=m -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -# CONFIG_IPV6_MIP6 is not set -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_SIT=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -# CONFIG_NETFILTER_NETLINK is not set -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -# CONFIG_NETFILTER_XT_TARGET_DSCP is not set -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -# CONFIG_NETFILTER_XT_MATCH_DSCP is not set -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m - -# -# IP: Netfilter Configuration -# -CONFIG_IP_NF_CONNTRACK=m -# CONFIG_IP_NF_CT_ACCT is not set -# CONFIG_IP_NF_CONNTRACK_MARK is not set -# CONFIG_IP_NF_CONNTRACK_EVENTS is not set -CONFIG_IP_NF_CT_PROTO_SCTP=m -CONFIG_IP_NF_FTP=m -CONFIG_IP_NF_IRC=m -# CONFIG_IP_NF_NETBIOS_NS is not set -CONFIG_IP_NF_TFTP=m -CONFIG_IP_NF_AMANDA=m -# CONFIG_IP_NF_PPTP is not set -CONFIG_IP_NF_H323=m -CONFIG_IP_NF_SIP=m -CONFIG_IP_NF_QUEUE=m -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_IPRANGE=m -CONFIG_IP_NF_MATCH_TOS=m -CONFIG_IP_NF_MATCH_RECENT=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_MATCH_HASHLIMIT=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_IP_NF_TARGET_TCPMSS=m -CONFIG_IP_NF_NAT=m -CONFIG_IP_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_IP_NF_NAT_SNMP_BASIC=m -CONFIG_IP_NF_NAT_IRC=m -CONFIG_IP_NF_NAT_FTP=m -CONFIG_IP_NF_NAT_TFTP=m -CONFIG_IP_NF_NAT_AMANDA=m -CONFIG_IP_NF_NAT_H323=m -CONFIG_IP_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_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=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_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -CONFIG_IP6_NF_RAW=m - -# -# Bridge: Netfilter Configuration -# -# CONFIG_BRIDGE_NF_EBTABLES is not set - -# -# DCCP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_DCCP is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_SCTP is not set - -# -# TIPC Configuration (EXPERIMENTAL) -# -CONFIG_TIPC=m -# CONFIG_TIPC_ADVANCED is not set -# CONFIG_TIPC_DEBUG is not set -# CONFIG_ATM is not set -CONFIG_BRIDGE=m -CONFIG_VLAN_8021Q=m -# CONFIG_DECNET is not set -CONFIG_LLC=m -# CONFIG_LLC2 is not set -CONFIG_IPX=m -# CONFIG_IPX_INTERN is not set -CONFIG_ATALK=m -CONFIG_DEV_APPLETALK=m -CONFIG_IPDDP=m -CONFIG_IPDDP_ENCAP=y -CONFIG_IPDDP_DECAP=y -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set -CONFIG_NET_CLS_ROUTE=y - -# -# Network testing -# -CONFIG_NET_PKTGEN=m -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -# CONFIG_BT_HIDP is not set - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -# CONFIG_BT_HCIUART is not set -CONFIG_BT_HCIBCM203X=m -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -CONFIG_IEEE80211=m -# CONFIG_IEEE80211_DEBUG is not set -CONFIG_IEEE80211_CRYPT_WEP=m -CONFIG_IEEE80211_CRYPT_CCMP=m -CONFIG_IEEE80211_CRYPT_TKIP=m -CONFIG_IEEE80211_SOFTMAC=m -# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set -CONFIG_WIRELESS_EXT=y - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=y -# CONFIG_SYS_HYPERVISOR is not set - -# -# Connector - unified userspace <-> kernelspace linker -# -# CONFIG_CONNECTOR is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_CONCAT=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 -CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y -# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -CONFIG_NFTL=y -CONFIG_NFTL_RW=y -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -# CONFIG_MTD_CFI_NOSWAP is not set -CONFIG_MTD_CFI_BE_BYTE_SWAP=y -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -CONFIG_MTD_COMPLEX_MAPPINGS=y -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_IXP4XX=y -# CONFIG_MTD_PCI is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# OneNAND Flash Device Drivers -# -# CONFIG_MTD_ONENAND is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Plug and Play support -# - -# -# Block devices -# -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_SX8 is not set -# CONFIG_BLK_DEV_UB is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=4 -CONFIG_BLK_DEV_RAM_SIZE=10240 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CDROM_PKTCDVD=m -CONFIG_CDROM_PKTCDVD_BUFFERS=8 -# CONFIG_CDROM_PKTCDVD_WCACHE is not set -CONFIG_ATA_OVER_ETH=m - -# -# ATA/ATAPI/MFM/RLL support -# -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=y -# CONFIG_SCSI_NETLINK is not set -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_ST=m -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -CONFIG_SCSI_ISCSI_ATTRS=m -# CONFIG_SCSI_SAS_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set - -# -# SCSI low-level drivers -# -CONFIG_ISCSI_TCP=m -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_AIC94XX is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_SCSI_ARCMSR is not set -# CONFIG_MEGARAID_NEWGEN is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_IPR is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set - -# -# Serial ATA (prod) and Parallel ATA (experimental) drivers -# -CONFIG_ATA=m -# CONFIG_SATA_AHCI is not set -# CONFIG_SATA_SVW is not set -# CONFIG_ATA_PIIX is not set -# CONFIG_SATA_MV is not set -# CONFIG_SATA_NV is not set -# CONFIG_PDC_ADMA is not set -# CONFIG_SATA_QSTOR is not set -# CONFIG_SATA_PROMISE is not set -# CONFIG_SATA_SX4 is not set -# CONFIG_SATA_SIL is not set -# CONFIG_SATA_SIL24 is not set -# CONFIG_SATA_SIS is not set -# CONFIG_SATA_ULI is not set -CONFIG_SATA_VIA=m -# CONFIG_SATA_VITESSE is not set -# CONFIG_PATA_ALI is not set -# CONFIG_PATA_AMD is not set -CONFIG_PATA_ARTOP=m -# CONFIG_PATA_ATIIXP is not set -# CONFIG_PATA_CMD64X is not set -# CONFIG_PATA_CS5520 is not set -# CONFIG_PATA_CS5530 is not set -# CONFIG_PATA_CYPRESS is not set -# CONFIG_PATA_EFAR is not set -# CONFIG_ATA_GENERIC is not set -# CONFIG_PATA_HPT366 is not set -# CONFIG_PATA_HPT37X is not set -# CONFIG_PATA_HPT3X2N is not set -# CONFIG_PATA_HPT3X3 is not set -# CONFIG_PATA_IT821X is not set -# CONFIG_PATA_JMICRON is not set -# CONFIG_PATA_TRIFLEX is not set -# CONFIG_PATA_MPIIX is not set -# CONFIG_PATA_OLDPIIX is not set -# CONFIG_PATA_NETCELL is not set -# CONFIG_PATA_NS87410 is not set -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_OPTIDMA is not set -# CONFIG_PATA_PDC_OLD is not set -# CONFIG_PATA_RADISYS is not set -# CONFIG_PATA_RZ1000 is not set -# CONFIG_PATA_SC1200 is not set -# CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_PDC2027X is not set -# CONFIG_PATA_SIL680 is not set -# CONFIG_PATA_SIS is not set -# CONFIG_PATA_VIA is not set -# CONFIG_PATA_WINBOND is not set -CONFIG_PATA_IXP4XX_CF=m - -# -# Multi-device support (RAID and LVM) -# -CONFIG_MD=y -CONFIG_BLK_DEV_MD=m -CONFIG_MD_LINEAR=m -CONFIG_MD_RAID0=m -CONFIG_MD_RAID1=m -CONFIG_MD_RAID10=m -CONFIG_MD_RAID456=m -CONFIG_MD_RAID5_RESHAPE=y -CONFIG_MD_MULTIPATH=m -CONFIG_MD_FAULTY=m -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_DEBUG is not set -# CONFIG_DM_CRYPT is not set -# CONFIG_DM_SNAPSHOT is not set -# CONFIG_DM_MIRROR is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set - -# -# Fusion MPT device support -# -# CONFIG_FUSION is not set -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_FC is not set -# CONFIG_FUSION_SAS is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -CONFIG_TUN=m - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set - -# -# PHY device support -# -# CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_IXP4XX_QMGR=y -CONFIG_IXP4XX_NPE=y -CONFIG_IXP4XX_NPE_FW_LOAD=y -CONFIG_IXP4XX_NPE_FW_MTD=y -CONFIG_IXP4XX_MAC=y -CONFIG_IXP4XX_CRYPTO=m -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_SMC91X is not set -# CONFIG_DM9000 is not set - -# -# Tulip family network device support -# -# CONFIG_NET_TULIP is not set -# CONFIG_HP100 is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_FORCEDETH is not set -# CONFIG_DGRS is not set -# CONFIG_EEPRO100 is not set -# CONFIG_E100 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -CONFIG_R8169=m -# CONFIG_R8169_NAPI is not set -CONFIG_R8169_VLAN=y -# CONFIG_SIS190 is not set -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -# CONFIG_SK98LIN is not set -CONFIG_VIA_VELOCITY=m -# CONFIG_TIGON3 is not set -# CONFIG_BNX2 is not set -# CONFIG_QLA3XXX is not set - -# -# Ethernet (10000 Mbit) -# -# CONFIG_CHELSIO_T1 is not set -# CONFIG_IXGB is not set -# CONFIG_S2IO is not set -# CONFIG_MYRI10GE is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_NET_WIRELESS_RTNETLINK is not set - -# -# Obsolete Wireless cards support (pre-802.11) -# -# CONFIG_STRIP is not set - -# -# Wireless 802.11b ISA/PCI cards support -# -# CONFIG_IPW2100 is not set -# CONFIG_IPW2200 is not set -# CONFIG_HERMES is not set -# CONFIG_ATMEL is not set - -# -# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support -# -# CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set -# CONFIG_HOSTAP is not set -# CONFIG_BCM43XX is not set -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set -CONFIG_NET_WIRELESS=y - -# -# Wan interfaces -# -# CONFIG_WAN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -CONFIG_PPPOE=m -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set -CONFIG_NETCONSOLE=y -CONFIG_NETPOLL=y -# CONFIG_NETPOLL_RX is not set -# CONFIG_NETPOLL_TRAP is not set -CONFIG_NET_POLL_CONTROLLER=y - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -CONFIG_INPUT_MISC=y -CONFIG_INPUT_IXP4XX_BEEPER=y -# CONFIG_INPUT_UINPUT 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=y -# CONFIG_COMPUTONE is not set -# CONFIG_ROCKETPORT is not set -# CONFIG_CYCLADES is not set -# CONFIG_DIGIEPCA is not set -# CONFIG_MOXA_INTELLIO is not set -# CONFIG_MOXA_SMARTIO is not set -# CONFIG_ISI is not set -# CONFIG_SYNCLINKMP is not set -# CONFIG_SYNCLINK_GT is not set -CONFIG_N_HDLC=m -# CONFIG_RISCOM8 is not set -# CONFIG_SPECIALIX is not set -# CONFIG_SX is not set -# CONFIG_RIO is not set -# CONFIG_STALDRV is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_PCI=m -CONFIG_SERIAL_8250_NR_UARTS=2 -CONFIG_SERIAL_8250_RUNTIME_UARTS=2 -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_IXP4XX_WATCHDOG=m - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_IXP4XX=y -# CONFIG_NVRAM is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set - -# -# TPM devices -# -# CONFIG_TCG_TPM is not set - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_I810 is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_IOP3XX is not set -CONFIG_I2C_ISA=m -CONFIG_I2C_IXP4XX=y -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_PROSAVAGE is not set -# CONFIG_I2C_SAVAGE4 is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set -# CONFIG_I2C_VOODOO3 is not set -# CONFIG_I2C_PCA_ISA is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -CONFIG_SENSORS_EEPROM=y -CONFIG_SENSORS_PCF8574=m -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_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 - -# -# Dallas's 1-wire bus -# -CONFIG_W1=m - -# -# 1-wire Bus Masters -# -# CONFIG_W1_MASTER_MATROX is not set -CONFIG_W1_MASTER_DS2490=m -CONFIG_W1_MASTER_DS2482=m - -# -# 1-wire Slaves -# -CONFIG_W1_SLAVE_THERM=m -CONFIG_W1_SLAVE_SMEM=m -CONFIG_W1_SLAVE_DS2433=m -CONFIG_W1_SLAVE_DS2433_CRC=y - -# -# Hardware Monitoring support -# -CONFIG_HWMON=m -CONFIG_HWMON_VID=m -# CONFIG_SENSORS_ABITUGURU is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ASB100 is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_FSCHER is not set -# CONFIG_SENSORS_FSCPOS is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 is not set -CONFIG_SENSORS_W83781D=m -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -CONFIG_SENSORS_AD7418=m -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Misc devices -# -# CONFIG_SGI_IOC4 is not set -# CONFIG_TIFM_CORE is not set - -# -# LED devices -# -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_IXP4XX=y - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=m -CONFIG_VIDEO_V4L1=y -CONFIG_VIDEO_V4L1_COMPAT=y -CONFIG_VIDEO_V4L2=y - -# -# Video Capture Adapters -# - -# -# Video Capture Adapters -# -# CONFIG_VIDEO_ADV_DEBUG is not set -CONFIG_VIDEO_HELPER_CHIPS_AUTO=y -CONFIG_VIDEO_TDA9840=m -CONFIG_VIDEO_TEA6415C=m -CONFIG_VIDEO_TEA6420=m -CONFIG_VIDEO_BT819=m -CONFIG_VIDEO_BT856=m -CONFIG_VIDEO_SAA7110=m -CONFIG_VIDEO_SAA7111=m -CONFIG_VIDEO_SAA7114=m -CONFIG_VIDEO_VPX3220=m -CONFIG_VIDEO_SAA7185=m -CONFIG_VIDEO_ADV7170=m -CONFIG_VIDEO_ADV7175=m -CONFIG_VIDEO_VIVI=m -# CONFIG_VIDEO_BT848 is not set -CONFIG_VIDEO_CPIA=m -CONFIG_VIDEO_CPIA_USB=m -CONFIG_VIDEO_CPIA2=m -CONFIG_VIDEO_SAA5246A=m -CONFIG_VIDEO_SAA5249=m -CONFIG_TUNER_3036=m -CONFIG_VIDEO_STRADIS=m -CONFIG_VIDEO_ZORAN_ZR36060=m -CONFIG_VIDEO_ZORAN=m -CONFIG_VIDEO_ZORAN_BUZ=m -CONFIG_VIDEO_ZORAN_DC10=m -CONFIG_VIDEO_ZORAN_DC30=m -CONFIG_VIDEO_ZORAN_LML33=m -CONFIG_VIDEO_ZORAN_LML33R10=m -# CONFIG_VIDEO_ZORAN_AVS6EYES is not set -CONFIG_VIDEO_SAA7134=m -# CONFIG_VIDEO_SAA7134_ALSA is not set -CONFIG_VIDEO_MXB=m -CONFIG_VIDEO_DPC=m -CONFIG_VIDEO_HEXIUM_ORION=m -CONFIG_VIDEO_HEXIUM_GEMINI=m -CONFIG_VIDEO_CX88=m -CONFIG_VIDEO_CX88_ALSA=m -# CONFIG_VIDEO_CX88_BLACKBIRD is not set - -# -# V4L USB devices -# -# CONFIG_VIDEO_PVRUSB2 is not set -# CONFIG_VIDEO_EM28XX is not set -# CONFIG_USB_VICAM is not set -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_KONICAWC is not set -# CONFIG_USB_QUICKCAM_MESSENGER is not set -# CONFIG_USB_ET61X251 is not set -CONFIG_VIDEO_OVCAMCHIP=m -# CONFIG_USB_W9968CF is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_SE401 is not set -# CONFIG_USB_SN9C102 is not set -# CONFIG_USB_STV680 is not set -# CONFIG_USB_ZC0301 is not set -CONFIG_USB_PWC=m -# CONFIG_USB_PWC_DEBUG is not set - -# -# Radio Adapters -# -# CONFIG_RADIO_GEMTEK_PCI is not set -# CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_MAESTRO is not set -# CONFIG_USB_DSBR is not set - -# -# Digital Video Broadcasting Devices -# -# CONFIG_DVB is not set -CONFIG_VIDEO_SAA7146=m -CONFIG_VIDEO_SAA7146_VV=m -CONFIG_VIDEO_VIDEOBUF=m -CONFIG_VIDEO_TUNER=m -CONFIG_VIDEO_BUF=m -CONFIG_VIDEO_BTCX=m -CONFIG_VIDEO_IR=m -CONFIG_VIDEO_TVEEPROM=m -# CONFIG_USB_DABUSB is not set - -# -# Graphics support -# -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB is not set -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# PCI devices -# -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ALS300 is not set -# CONFIG_SND_ALI5451 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AZT3328 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_EMU10K1X is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDA_INTEL is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# ALSA ARM devices -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set - -# -# USB support -# -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_SPLIT_ISO=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_UHCI_HCD=m -# CONFIG_USB_U132_HCD is not set -# CONFIG_USB_SL811_HCD is not set - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -CONFIG_USB_STORAGE=y -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM 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=y -CONFIG_USB_STORAGE_KARMA=y -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -CONFIG_USB_HIDINPUT=y -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -CONFIG_USB_HIDDEV=y - -# -# USB HID Boot Protocol drivers -# -CONFIG_USB_KBD=m -# CONFIG_USB_MOUSE is not set -# CONFIG_USB_AIPTEK is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_ACECAD is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_TOUCHSCREEN is not set -CONFIG_USB_YEALINK=m -# CONFIG_USB_XPAD is not set -# CONFIG_USB_ATI_REMOTE is not set -# CONFIG_USB_ATI_REMOTE2 is not set -# CONFIG_USB_KEYSPAN_REMOTE is not set -# CONFIG_USB_APPLETOUCH is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET_MII=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -# CONFIG_USB_NET_GL620A is not set -CONFIG_USB_NET_NET1080=m -# CONFIG_USB_NET_PLUSB is not set -CONFIG_USB_NET_MCS7830=m -# CONFIG_USB_NET_RNDIS_HOST is not set -# CONFIG_USB_NET_CDC_SUBSET is not set -CONFIG_USB_NET_ZAURUS=m -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_AIRCABLE=m -# CONFIG_USB_SERIAL_AIRPRIME is not set -# CONFIG_USB_SERIAL_ARK3116 is not set -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_WHITEHEAT=m -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=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 is not set -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_MOS7720=m -CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -# CONFIG_USB_SERIAL_HP4X 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_EZUSB=y - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -CONFIG_USB_ADUTUX=m -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD 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=m -CONFIG_USB_PHIDGETKIT=m -CONFIG_USB_PHIDGETMOTORCONTROL=m -CONFIG_USB_PHIDGETSERVO=m -# CONFIG_USB_IDMOUSE is not set -CONFIG_USB_FTDI_ELAN=m -# CONFIG_USB_APPLEDISPLAY is not set -CONFIG_USB_SISUSBVGA=m -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -# CONFIG_USB_GADGET is not set - -# -# MMC/SD Card support -# -# CONFIG_MMC is not set - -# -# Real Time Clock -# -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 - -# -# RTC drivers -# -CONFIG_RTC_DRV_X1205=y -CONFIG_RTC_DRV_DS1307=y -# CONFIG_RTC_DRV_DS1553 is not set -CONFIG_RTC_DRV_ISL1208=y -CONFIG_RTC_DRV_DS1672=y -# CONFIG_RTC_DRV_DS1742 is not set -CONFIG_RTC_DRV_PCF8563=y -# CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_TEST is not set -# CONFIG_RTC_DRV_V3020 is not set - -# -# File systems -# -CONFIG_EXT2_FS=m -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=m -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -# CONFIG_FUSE_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_ZISOFS_FS=m -CONFIG_UDF_FS=m -CONFIG_UDF_NLS=y - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m -# CONFIG_NTFS_DEBUG is not set -CONFIG_NTFS_RW=y - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -# CONFIG_CRAMFS is not set -CONFIG_SQUASHFS=m -# CONFIG_SQUASHFS_EMBEDDED is not set -CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -# CONFIG_SQUASHFS_VMALLOC is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -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=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=m -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=y -CONFIG_SUNRPC_GSS=y -CONFIG_RPCSEC_GSS_KRB5=y -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -# CONFIG_CIFS_WEAK_PW_HASH is not set -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -# CONFIG_9P_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_KARMA_PARTITION is not set -# CONFIG_EFI_PARTITION is not set - -# -# Native Language Support -# -CONFIG_NLS=m -CONFIG_NLS_DEFAULT="utf8" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_MUST_CHECK=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_KERNEL is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_DEBUG_BUGVERBOSE is not set -# CONFIG_DEBUG_FS is not set -CONFIG_FRAME_POINTER=y -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -CONFIG_CRYPTO=y -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_BLKCIPHER=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_HMAC=y -# CONFIG_CRYPTO_NULL is not set -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_ECB=m -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_AES=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_TEST=m - -# -# Hardware crypto devices -# - -# -# Library routines -# -CONFIG_CRC_CCITT=m -CONFIG_CRC16=y -CONFIG_CRC32=y -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 diff --git a/packages/linux/ixp4xx-kernel/2.6.20/.mtn2git_empty b/packages/linux/ixp4xx-kernel/2.6.20/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/ixp4xx-kernel/2.6.20/defconfig b/packages/linux/ixp4xx-kernel/2.6.20/defconfig deleted file mode 100644 index 27fab8ab73..0000000000 --- a/packages/linux/ixp4xx-kernel/2.6.20/defconfig +++ /dev/null @@ -1,2031 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.20-rc5-git2 -# Wed Jan 24 01:08:16 2007 -# -CONFIG_ARM=y -CONFIG_GENERIC_TIME=y -CONFIG_MMU=y -CONFIG_GENERIC_HARDIRQS=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# -CONFIG_LOCALVERSION="" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_IPC_NS is not set -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_UTS_NS is not set -# CONFIG_AUDIT is not set -CONFIG_IKCONFIG=m -CONFIG_IKCONFIG_PROC=y -CONFIG_SYSFS_DEPRECATED=y -# CONFIG_RELAY is not set -CONFIG_INITRAMFS_SOURCE="" -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -# CONFIG_KALLSYMS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_SHMEM=y -CONFIG_SLAB=y -# CONFIG_VM_EVENT_COUNTERS is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -# CONFIG_SLOB is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y - -# -# Block layer -# -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IOP13XX is not set -CONFIG_ARCH_IXP4XX=y -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_PNX4008 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y - -# -# Intel IXP4xx Implementation Options -# - -# -# IXP4xx Platforms -# -CONFIG_MACH_NSLU2=y -CONFIG_MACH_AVILA=y -CONFIG_MACH_LOFT=y -# CONFIG_ARCH_ADI_COYOTE is not set -CONFIG_ARCH_IXDP425=y -# CONFIG_MACH_IXDPG425 is not set -# CONFIG_MACH_IXDP465 is not set -CONFIG_ARCH_IXCDP1100=y -# CONFIG_ARCH_PRPMC1100 is not set -CONFIG_MACH_NAS100D=y -CONFIG_MACH_DSMG600=y -CONFIG_ARCH_IXDP4XX=y -CONFIG_MACH_FSG=y -# CONFIG_MACH_GTWX5715 is not set - -# -# IXP4xx Options -# -CONFIG_DMABOUNCE=y -# CONFIG_IXP4XX_INDIRECT_PCI is not set - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_BIG_ENDIAN is not set -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_IWMMXT is not set -CONFIG_XSCALE_PMU=y -CONFIG_KEXEC=y - -# -# Bus support -# -CONFIG_PCI=y - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -CONFIG_PREEMPT=y -# 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_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" -# CONFIG_XIP_KERNEL is not set - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set - -# -# Power management options -# -# CONFIG_PM is not set -# CONFIG_APM is not set - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -# CONFIG_NETDEBUG is not set -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_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_SYN_COOKIES is not set -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set - -# -# IP: Virtual Server Configuration -# -# CONFIG_IP_VS is not set -CONFIG_IPV6=m -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -# CONFIG_IPV6_MIP6 is not set -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_SIT=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NF_CONNTRACK_ENABLED=m -CONFIG_NF_CONNTRACK_SUPPORT=y -# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set -CONFIG_NF_CONNTRACK=m -CONFIG_NF_CT_ACCT=y -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -CONFIG_NF_CONNTRACK_AMANDA=m -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -# CONFIG_IP_NF_QUEUE is not set -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_IPRANGE=m -CONFIG_IP_NF_MATCH_TOS=m -CONFIG_IP_NF_MATCH_RECENT=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_IP_NF_TARGET_TCPMSS=m -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_SAME=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_TFTP=m -CONFIG_NF_NAT_AMANDA=m -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_NF_NAT_SIP=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_TOS=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_TARGET_CLUSTERIP=m -CONFIG_IP_NF_RAW=m -CONFIG_IP_NF_ARPTABLES=m -CONFIG_IP_NF_ARPFILTER=m -CONFIG_IP_NF_ARP_MANGLE=m - -# -# IPv6: Netfilter Configuration (EXPERIMENTAL) -# -CONFIG_NF_CONNTRACK_IPV6=m -# CONFIG_IP6_NF_QUEUE is not set -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_OWNER=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -CONFIG_IP6_NF_RAW=m - -# -# Bridge: Netfilter Configuration -# -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_ULOG=m - -# -# DCCP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_DCCP is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_SCTP is not set - -# -# TIPC Configuration (EXPERIMENTAL) -# -CONFIG_TIPC=m -# CONFIG_TIPC_ADVANCED is not set -# CONFIG_TIPC_DEBUG is not set -# CONFIG_ATM is not set -CONFIG_BRIDGE=m -CONFIG_VLAN_8021Q=m -# CONFIG_DECNET is not set -CONFIG_LLC=m -# CONFIG_LLC2 is not set -CONFIG_IPX=m -# CONFIG_IPX_INTERN is not set -CONFIG_ATALK=m -CONFIG_DEV_APPLETALK=m -CONFIG_IPDDP=m -CONFIG_IPDDP_ENCAP=y -CONFIG_IPDDP_DECAP=y -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set -CONFIG_NET_CLS_ROUTE=y - -# -# Network testing -# -CONFIG_NET_PKTGEN=m -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=m - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_H4=y -CONFIG_BT_HCIUART_BCSP=y -CONFIG_BT_HCIBCM203X=m -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -CONFIG_BT_HCIVHCI=m -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_WIRELESS_EXT=y - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=y -# CONFIG_SYS_HYPERVISOR is not set - -# -# Connector - unified userspace <-> kernelspace linker -# -# CONFIG_CONNECTOR is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_CONCAT=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 -CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y -# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -CONFIG_NFTL=y -CONFIG_NFTL_RW=y -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -# CONFIG_MTD_CFI_NOSWAP is not set -CONFIG_MTD_CFI_BE_BYTE_SWAP=y -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -CONFIG_MTD_COMPLEX_MAPPINGS=y -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_IXP4XX=y -# CONFIG_MTD_PCI is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_CAFE is not set - -# -# OneNAND Flash Device Drivers -# -# CONFIG_MTD_ONENAND is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Plug and Play support -# - -# -# Block devices -# -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_SX8 is not set -# CONFIG_BLK_DEV_UB is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=4 -CONFIG_BLK_DEV_RAM_SIZE=10240 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CDROM_PKTCDVD=m -CONFIG_CDROM_PKTCDVD_BUFFERS=8 -# CONFIG_CDROM_PKTCDVD_WCACHE is not set -CONFIG_ATA_OVER_ETH=m - -# -# ATA/ATAPI/MFM/RLL support -# -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=y -# CONFIG_SCSI_TGT is not set -# CONFIG_SCSI_NETLINK is not set -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_ST=m -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set -# CONFIG_SCSI_SCAN_ASYNC is not set - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -CONFIG_SCSI_ISCSI_ATTRS=m -# CONFIG_SCSI_SAS_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set - -# -# SCSI low-level drivers -# -CONFIG_ISCSI_TCP=m -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_AIC94XX is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_SCSI_ARCMSR is not set -# CONFIG_MEGARAID_NEWGEN is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_IPR is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_SRP is not set - -# -# Serial ATA (prod) and Parallel ATA (experimental) drivers -# -CONFIG_ATA=m -# CONFIG_ATA_NONSTANDARD is not set -# CONFIG_SATA_AHCI is not set -# CONFIG_SATA_SVW is not set -# CONFIG_ATA_PIIX is not set -# CONFIG_SATA_MV is not set -# CONFIG_SATA_NV is not set -# CONFIG_PDC_ADMA is not set -# CONFIG_SATA_QSTOR is not set -# CONFIG_SATA_PROMISE is not set -# CONFIG_SATA_SX4 is not set -# CONFIG_SATA_SIL is not set -# CONFIG_SATA_SIL24 is not set -# CONFIG_SATA_SIS is not set -# CONFIG_SATA_ULI is not set -CONFIG_SATA_VIA=m -# CONFIG_SATA_VITESSE is not set -# CONFIG_PATA_ALI is not set -# CONFIG_PATA_AMD is not set -CONFIG_PATA_ARTOP=m -# CONFIG_PATA_ATIIXP is not set -# CONFIG_PATA_CMD64X is not set -# CONFIG_PATA_CS5520 is not set -# CONFIG_PATA_CS5530 is not set -# CONFIG_PATA_CYPRESS is not set -# CONFIG_PATA_EFAR is not set -# CONFIG_ATA_GENERIC is not set -# CONFIG_PATA_HPT366 is not set -# CONFIG_PATA_HPT37X is not set -# CONFIG_PATA_HPT3X2N is not set -# CONFIG_PATA_HPT3X3 is not set -# CONFIG_PATA_IT821X is not set -# CONFIG_PATA_JMICRON is not set -# CONFIG_PATA_TRIFLEX is not set -# CONFIG_PATA_MARVELL is not set -# CONFIG_PATA_MPIIX is not set -# CONFIG_PATA_OLDPIIX is not set -# CONFIG_PATA_NETCELL is not set -# CONFIG_PATA_NS87410 is not set -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_OPTIDMA is not set -# CONFIG_PATA_PDC_OLD is not set -# CONFIG_PATA_RADISYS is not set -# CONFIG_PATA_RZ1000 is not set -# CONFIG_PATA_SC1200 is not set -# CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_PDC2027X is not set -# CONFIG_PATA_SIL680 is not set -# CONFIG_PATA_SIS is not set -# CONFIG_PATA_VIA is not set -# CONFIG_PATA_WINBOND is not set -# CONFIG_PATA_PLATFORM is not set -CONFIG_PATA_IXP4XX_CF=m - -# -# Multi-device support (RAID and LVM) -# -CONFIG_MD=y -CONFIG_BLK_DEV_MD=m -CONFIG_MD_LINEAR=m -CONFIG_MD_RAID0=m -CONFIG_MD_RAID1=m -CONFIG_MD_RAID10=m -CONFIG_MD_RAID456=m -CONFIG_MD_RAID5_RESHAPE=y -CONFIG_MD_MULTIPATH=m -CONFIG_MD_FAULTY=m -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_DEBUG is not set -# CONFIG_DM_CRYPT is not set -# CONFIG_DM_SNAPSHOT is not set -# CONFIG_DM_MIRROR is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set - -# -# Fusion MPT device support -# -# CONFIG_FUSION is not set -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_FC is not set -# CONFIG_FUSION_SAS is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -CONFIG_TUN=m - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set - -# -# PHY device support -# -# CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_IXP4XX_QMGR=y -CONFIG_IXP4XX_NPE=y -CONFIG_IXP4XX_NPE_FW_LOAD=y -CONFIG_IXP4XX_NPE_FW_MTD=y -CONFIG_IXP4XX_MAC=y -CONFIG_IXP4XX_CRYPTO=m -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_SMC91X is not set -# CONFIG_DM9000 is not set - -# -# Tulip family network device support -# -# CONFIG_NET_TULIP is not set -# CONFIG_HP100 is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_FORCEDETH is not set -# CONFIG_DGRS is not set -# CONFIG_EEPRO100 is not set -# CONFIG_E100 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -CONFIG_R8169=m -# CONFIG_R8169_NAPI is not set -CONFIG_R8169_VLAN=y -# CONFIG_SIS190 is not set -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -# CONFIG_SK98LIN is not set -CONFIG_VIA_VELOCITY=m -# CONFIG_TIGON3 is not set -# CONFIG_BNX2 is not set -# CONFIG_QLA3XXX is not set - -# -# Ethernet (10000 Mbit) -# -# CONFIG_CHELSIO_T1 is not set -# CONFIG_IXGB is not set -# CONFIG_S2IO is not set -# CONFIG_MYRI10GE is not set -# CONFIG_NETXEN_NIC is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_NET_WIRELESS_RTNETLINK is not set - -# -# Obsolete Wireless cards support (pre-802.11) -# -# CONFIG_STRIP is not set - -# -# Wireless 802.11b ISA/PCI cards support -# -# CONFIG_IPW2100 is not set -# CONFIG_IPW2200 is not set -# CONFIG_HERMES is not set -# CONFIG_ATMEL is not set - -# -# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support -# -# CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set -# CONFIG_HOSTAP is not set -# CONFIG_BCM43XX is not set -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set -CONFIG_NET_WIRELESS=y - -# -# Wan interfaces -# -# CONFIG_WAN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -CONFIG_PPPOE=m -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set -CONFIG_NETCONSOLE=m -CONFIG_NETPOLL=y -# CONFIG_NETPOLL_RX is not set -# CONFIG_NETPOLL_TRAP is not set -CONFIG_NET_POLL_CONTROLLER=y - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -CONFIG_INPUT_MISC=y -CONFIG_INPUT_IXP4XX_BEEPER=y -CONFIG_INPUT_UINPUT=m - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -# CONFIG_VT is not set -CONFIG_SERIAL_NONSTANDARD=y -# CONFIG_COMPUTONE is not set -# CONFIG_ROCKETPORT is not set -# CONFIG_CYCLADES is not set -# CONFIG_DIGIEPCA is not set -# CONFIG_MOXA_INTELLIO is not set -# CONFIG_MOXA_SMARTIO is not set -# CONFIG_MOXA_SMARTIO_NEW is not set -# CONFIG_ISI is not set -# CONFIG_SYNCLINKMP is not set -# CONFIG_SYNCLINK_GT is not set -CONFIG_N_HDLC=m -# CONFIG_RISCOM8 is not set -# CONFIG_SPECIALIX is not set -# CONFIG_SX is not set -# CONFIG_RIO is not set -# CONFIG_STALDRV is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_PCI=m -CONFIG_SERIAL_8250_NR_UARTS=2 -CONFIG_SERIAL_8250_RUNTIME_UARTS=2 -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_IXP4XX_WATCHDOG=m - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_IXP4XX=y -# CONFIG_NVRAM is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set - -# -# TPM devices -# -# CONFIG_TCG_TPM is not set - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_I810 is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_IOP3XX is not set -CONFIG_I2C_ISA=m -CONFIG_I2C_IXP4XX=y -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_PROSAVAGE is not set -# CONFIG_I2C_SAVAGE4 is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set -# CONFIG_I2C_VOODOO3 is not set -# CONFIG_I2C_PCA_ISA is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -CONFIG_SENSORS_EEPROM=y -CONFIG_SENSORS_PCF8574=m -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_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 - -# -# Dallas's 1-wire bus -# -CONFIG_W1=m - -# -# 1-wire Bus Masters -# -# CONFIG_W1_MASTER_MATROX is not set -CONFIG_W1_MASTER_DS2490=m -CONFIG_W1_MASTER_DS2482=m - -# -# 1-wire Slaves -# -CONFIG_W1_SLAVE_THERM=m -CONFIG_W1_SLAVE_SMEM=m -CONFIG_W1_SLAVE_DS2433=m -CONFIG_W1_SLAVE_DS2433_CRC=y - -# -# Hardware Monitoring support -# -CONFIG_HWMON=m -CONFIG_HWMON_VID=m -# CONFIG_SENSORS_ABITUGURU is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ASB100 is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_FSCHER is not set -# CONFIG_SENSORS_FSCPOS is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_PC87427 is not set -# CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 is not set -CONFIG_SENSORS_W83781D=m -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83793 is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -CONFIG_SENSORS_AD7418=m -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Misc devices -# -# CONFIG_SGI_IOC4 is not set -# CONFIG_TIFM_CORE is not set - -# -# LED devices -# -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_IXP4XX=y - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=m -CONFIG_VIDEO_V4L1=y -CONFIG_VIDEO_V4L1_COMPAT=y -CONFIG_VIDEO_V4L2=y - -# -# Video Capture Adapters -# - -# -# Video Capture Adapters -# -# CONFIG_VIDEO_ADV_DEBUG is not set -CONFIG_VIDEO_HELPER_CHIPS_AUTO=y -CONFIG_VIDEO_TDA9840=m -CONFIG_VIDEO_TEA6415C=m -CONFIG_VIDEO_TEA6420=m -CONFIG_VIDEO_BT819=m -CONFIG_VIDEO_BT856=m -CONFIG_VIDEO_SAA7110=m -CONFIG_VIDEO_SAA7111=m -CONFIG_VIDEO_SAA7114=m -CONFIG_VIDEO_VPX3220=m -CONFIG_VIDEO_SAA7185=m -CONFIG_VIDEO_ADV7170=m -CONFIG_VIDEO_ADV7175=m -CONFIG_VIDEO_VIVI=m -# CONFIG_VIDEO_BT848 is not set -CONFIG_VIDEO_CPIA=m -CONFIG_VIDEO_CPIA_USB=m -CONFIG_VIDEO_CPIA2=m -CONFIG_VIDEO_SAA5246A=m -CONFIG_VIDEO_SAA5249=m -CONFIG_TUNER_3036=m -CONFIG_VIDEO_STRADIS=m -CONFIG_VIDEO_ZORAN_ZR36060=m -CONFIG_VIDEO_ZORAN=m -CONFIG_VIDEO_ZORAN_BUZ=m -CONFIG_VIDEO_ZORAN_DC10=m -CONFIG_VIDEO_ZORAN_DC30=m -CONFIG_VIDEO_ZORAN_LML33=m -CONFIG_VIDEO_ZORAN_LML33R10=m -# CONFIG_VIDEO_ZORAN_AVS6EYES is not set -CONFIG_VIDEO_SAA7134=m -# CONFIG_VIDEO_SAA7134_ALSA is not set -CONFIG_VIDEO_MXB=m -CONFIG_VIDEO_DPC=m -CONFIG_VIDEO_HEXIUM_ORION=m -CONFIG_VIDEO_HEXIUM_GEMINI=m -CONFIG_VIDEO_CX88=m -CONFIG_VIDEO_CX88_ALSA=m -# CONFIG_VIDEO_CX88_BLACKBIRD is not set -# CONFIG_VIDEO_CAFE_CCIC is not set - -# -# V4L USB devices -# -# CONFIG_VIDEO_PVRUSB2 is not set -# CONFIG_VIDEO_EM28XX is not set -# CONFIG_VIDEO_USBVISION is not set -# CONFIG_USB_VICAM is not set -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_KONICAWC is not set -# CONFIG_USB_QUICKCAM_MESSENGER is not set -# CONFIG_USB_ET61X251 is not set -CONFIG_VIDEO_OVCAMCHIP=m -# CONFIG_USB_W9968CF is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_SE401 is not set -# CONFIG_USB_SN9C102 is not set -# CONFIG_USB_STV680 is not set -# CONFIG_USB_ZC0301 is not set -CONFIG_USB_PWC=m -# CONFIG_USB_PWC_DEBUG is not set - -# -# Radio Adapters -# -# CONFIG_RADIO_GEMTEK_PCI is not set -# CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_MAESTRO is not set -# CONFIG_USB_DSBR is not set - -# -# Digital Video Broadcasting Devices -# -# CONFIG_DVB is not set -CONFIG_VIDEO_SAA7146=m -CONFIG_VIDEO_SAA7146_VV=m -CONFIG_VIDEO_VIDEOBUF=m -CONFIG_VIDEO_TUNER=m -CONFIG_VIDEO_BUF=m -CONFIG_VIDEO_BTCX=m -CONFIG_VIDEO_IR=m -CONFIG_VIDEO_TVEEPROM=m -# CONFIG_USB_DABUSB is not set - -# -# Graphics support -# -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB is not set -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# PCI devices -# -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ALS300 is not set -# CONFIG_SND_ALI5451 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AZT3328 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_EMU10K1X is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDA_INTEL is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# ALSA ARM devices -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set - -# -# HID Devices -# -CONFIG_HID=m - -# -# USB support -# -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_BANDWIDTH is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_SPLIT_ISO=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_UHCI_HCD=m -# CONFIG_USB_U132_HCD is not set -# CONFIG_USB_SL811_HCD is not set - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -CONFIG_USB_STORAGE=y -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM 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=y -CONFIG_USB_STORAGE_KARMA=y -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -CONFIG_USB_HIDDEV=y - -# -# USB HID Boot Protocol drivers -# -CONFIG_USB_KBD=m -# CONFIG_USB_MOUSE is not set -# CONFIG_USB_AIPTEK is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_ACECAD is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_TOUCHSCREEN is not set -CONFIG_USB_YEALINK=m -# CONFIG_USB_XPAD is not set -# CONFIG_USB_ATI_REMOTE is not set -# CONFIG_USB_ATI_REMOTE2 is not set -# CONFIG_USB_KEYSPAN_REMOTE is not set -# CONFIG_USB_APPLETOUCH is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET_MII=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -# CONFIG_USB_NET_GL620A is not set -CONFIG_USB_NET_NET1080=m -# CONFIG_USB_NET_PLUSB is not set -CONFIG_USB_NET_MCS7830=m -# CONFIG_USB_NET_RNDIS_HOST is not set -# CONFIG_USB_NET_CDC_SUBSET is not set -CONFIG_USB_NET_ZAURUS=m -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_AIRCABLE=m -# CONFIG_USB_SERIAL_AIRPRIME is not set -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_WHITEHEAT=m -CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -CONFIG_USB_SERIAL_CP2101=m -CONFIG_USB_SERIAL_CYPRESS_M8=m -CONFIG_USB_SERIAL_EMPEG=m -CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m -CONFIG_USB_SERIAL_VISOR=m -CONFIG_USB_SERIAL_IPAQ=m -CONFIG_USB_SERIAL_IR=m -CONFIG_USB_SERIAL_EDGEPORT=m -CONFIG_USB_SERIAL_EDGEPORT_TI=m -CONFIG_USB_SERIAL_GARMIN=m -CONFIG_USB_SERIAL_IPW=m -CONFIG_USB_SERIAL_KEYSPAN_PDA=m -CONFIG_USB_SERIAL_KEYSPAN=m -CONFIG_USB_SERIAL_KEYSPAN_MPR=y -CONFIG_USB_SERIAL_KEYSPAN_USA28=y -CONFIG_USB_SERIAL_KEYSPAN_USA28X=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y -CONFIG_USB_SERIAL_KEYSPAN_USA19=y -CONFIG_USB_SERIAL_KEYSPAN_USA18X=y -CONFIG_USB_SERIAL_KEYSPAN_USA19W=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y -CONFIG_USB_SERIAL_KEYSPAN_USA49W=y -CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_MOS7720=m -CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -# CONFIG_USB_SERIAL_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 is not set -# CONFIG_USB_EMI26 is not set -CONFIG_USB_ADUTUX=m -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -CONFIG_USB_PHIDGET=m -CONFIG_USB_PHIDGETKIT=m -CONFIG_USB_PHIDGETMOTORCONTROL=m -CONFIG_USB_PHIDGETSERVO=m -# CONFIG_USB_IDMOUSE is not set -CONFIG_USB_FTDI_ELAN=m -# CONFIG_USB_APPLEDISPLAY is not set -CONFIG_USB_SISUSBVGA=m -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -# CONFIG_USB_GADGET is not set - -# -# MMC/SD Card support -# -# CONFIG_MMC is not set - -# -# Real Time Clock -# -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 - -# -# RTC drivers -# -CONFIG_RTC_DRV_X1205=y -CONFIG_RTC_DRV_DS1307=y -# CONFIG_RTC_DRV_DS1553 is not set -CONFIG_RTC_DRV_ISL1208=y -CONFIG_RTC_DRV_DS1672=y -# CONFIG_RTC_DRV_DS1742 is not set -CONFIG_RTC_DRV_PCF8563=y -# CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_TEST is not set -# CONFIG_RTC_DRV_V3020 is not set - -# -# File systems -# -CONFIG_EXT2_FS=m -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=m -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -CONFIG_FUSE_FS=m - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_ZISOFS_FS=m -CONFIG_UDF_FS=m -CONFIG_UDF_NLS=y - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m -# CONFIG_NTFS_DEBUG is not set -CONFIG_NTFS_RW=y - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -# CONFIG_CRAMFS is not set -CONFIG_SQUASHFS=m -# CONFIG_SQUASHFS_EMBEDDED is not set -CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -# CONFIG_SQUASHFS_VMALLOC is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -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=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=m -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=y -CONFIG_SUNRPC_GSS=y -CONFIG_RPCSEC_GSS_KRB5=y -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -# CONFIG_CIFS_WEAK_PW_HASH is not set -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -# CONFIG_9P_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_KARMA_PARTITION is not set -# CONFIG_EFI_PARTITION is not set - -# -# Native Language Support -# -CONFIG_NLS=m -CONFIG_NLS_DEFAULT="utf8" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_MUST_CHECK=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -CONFIG_CRYPTO=y -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_BLKCIPHER=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_HMAC=y -# CONFIG_CRYPTO_XCBC is not set -# CONFIG_CRYPTO_NULL is not set -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 is not set -CONFIG_CRYPTO_ECB=m -CONFIG_CRYPTO_CBC=y -# CONFIG_CRYPTO_LRW is not set -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_AES=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_TEST=m - -# -# Hardware crypto devices -# - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=y -CONFIG_CRC32=y -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_IOMAP_COPY=y diff --git a/packages/linux/ixp4xx-kernel/2.6.21/.mtn2git_empty b/packages/linux/ixp4xx-kernel/2.6.21/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/ixp4xx-kernel/2.6.21/defconfig b/packages/linux/ixp4xx-kernel/2.6.21/defconfig deleted file mode 100644 index 42527b3dfc..0000000000 --- a/packages/linux/ixp4xx-kernel/2.6.21/defconfig +++ /dev/null @@ -1,2088 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.21 -# Thu Nov 22 23:05:47 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -# CONFIG_GENERIC_GPIO is not set -CONFIG_GENERIC_TIME=y -CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set -CONFIG_GENERIC_HARDIRQS=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# -CONFIG_LOCALVERSION="" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_IPC_NS is not set -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_UTS_NS is not set -# CONFIG_AUDIT is not set -CONFIG_IKCONFIG=m -CONFIG_IKCONFIG_PROC=y -CONFIG_SYSFS_DEPRECATED=y -# CONFIG_RELAY is not set -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -# CONFIG_KALLSYMS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_SHMEM=y -CONFIG_SLAB=y -# CONFIG_VM_EVENT_COUNTERS is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -# CONFIG_SLOB is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y - -# -# Block layer -# -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IOP13XX is not set -CONFIG_ARCH_IXP4XX=y -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_PNX4008 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y - -# -# Intel IXP4xx Implementation Options -# - -# -# IXP4xx Platforms -# -CONFIG_MACH_NSLU2=y -CONFIG_MACH_AVILA=y -CONFIG_MACH_LOFT=y -# CONFIG_ARCH_ADI_COYOTE is not set -CONFIG_ARCH_IXDP425=y -CONFIG_MACH_IXDPG425=y -# CONFIG_MACH_IXDP465 is not set -CONFIG_ARCH_IXCDP1100=y -# CONFIG_ARCH_PRPMC1100 is not set -CONFIG_MACH_NAS100D=y -CONFIG_MACH_DSMG600=y -CONFIG_ARCH_IXDP4XX=y -CONFIG_MACH_FSG=y -# CONFIG_MACH_GTWX5715 is not set - -# -# IXP4xx Options -# -CONFIG_DMABOUNCE=y -# CONFIG_IXP4XX_INDIRECT_PCI is not set - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_BIG_ENDIAN is not set -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_OUTER_CACHE is not set -# CONFIG_IWMMXT is not set -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -CONFIG_PCI=y - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -CONFIG_PREEMPT=y -# 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_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" -# CONFIG_XIP_KERNEL is not set -CONFIG_KEXEC=y - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set - -# -# Power management options -# -# CONFIG_PM is not set - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -# CONFIG_NETDEBUG is not set -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER is not set -# CONFIG_XFRM_SUB_POLICY is not set -# CONFIG_XFRM_MIGRATE is not set -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_SYN_COOKIES is not set -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set - -# -# IP: Virtual Server Configuration -# -# CONFIG_IP_VS is not set -CONFIG_IPV6=m -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -# CONFIG_IPV6_MIP6 is not set -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_SIT=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NF_CONNTRACK_ENABLED=m -CONFIG_NF_CONNTRACK_SUPPORT=y -# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set -CONFIG_NF_CONNTRACK=m -CONFIG_NF_CT_ACCT=y -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -CONFIG_NF_CONNTRACK_AMANDA=m -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SANE=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -# CONFIG_IP_NF_QUEUE is not set -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_IPRANGE=m -CONFIG_IP_NF_MATCH_TOS=m -CONFIG_IP_NF_MATCH_RECENT=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_SAME=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_TFTP=m -CONFIG_NF_NAT_AMANDA=m -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_NF_NAT_SIP=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_TOS=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_TARGET_CLUSTERIP=m -CONFIG_IP_NF_RAW=m -CONFIG_IP_NF_ARPTABLES=m -CONFIG_IP_NF_ARPFILTER=m -CONFIG_IP_NF_ARP_MANGLE=m - -# -# IPv6: Netfilter Configuration (EXPERIMENTAL) -# -CONFIG_NF_CONNTRACK_IPV6=m -# CONFIG_IP6_NF_QUEUE is not set -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_OWNER=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_MH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -CONFIG_IP6_NF_RAW=m - -# -# Bridge: Netfilter Configuration -# -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_ULOG=m - -# -# DCCP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_DCCP is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_SCTP is not set - -# -# TIPC Configuration (EXPERIMENTAL) -# -CONFIG_TIPC=m -# CONFIG_TIPC_ADVANCED is not set -# CONFIG_TIPC_DEBUG is not set -# CONFIG_ATM is not set -CONFIG_BRIDGE=m -CONFIG_VLAN_8021Q=m -# CONFIG_DECNET is not set -CONFIG_LLC=m -# CONFIG_LLC2 is not set -CONFIG_IPX=m -# CONFIG_IPX_INTERN is not set -CONFIG_ATALK=m -CONFIG_DEV_APPLETALK=m -CONFIG_IPDDP=m -CONFIG_IPDDP_ENCAP=y -CONFIG_IPDDP_DECAP=y -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set -# CONFIG_NET_SCH_CLK_JIFFIES is not set -# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set -# CONFIG_NET_SCH_CLK_CPU is not set -CONFIG_NET_CLS_ROUTE=y - -# -# Network testing -# -CONFIG_NET_PKTGEN=m -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=m - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_H4=y -CONFIG_BT_HCIUART_BCSP=y -CONFIG_BT_HCIBCM203X=m -CONFIG_BT_HCIBPA10X=m -CONFIG_BT_HCIBFUSB=m -CONFIG_BT_HCIVHCI=m -CONFIG_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_WIRELESS_EXT=y - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=y -# CONFIG_SYS_HYPERVISOR is not set - -# -# Connector - unified userspace <-> kernelspace linker -# -# CONFIG_CONNECTOR is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_CONCAT=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 -CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y -# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -CONFIG_NFTL=y -CONFIG_NFTL_RW=y -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -# CONFIG_MTD_CFI_NOSWAP is not set -CONFIG_MTD_CFI_BE_BYTE_SWAP=y -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set - -# -# Mapping drivers for chip access -# -CONFIG_MTD_COMPLEX_MAPPINGS=y -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_IXP4XX=y -# CONFIG_MTD_PCI is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# OneNAND Flash Device Drivers -# -# CONFIG_MTD_ONENAND is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Plug and Play support -# -# CONFIG_PNPACPI is not set - -# -# Block devices -# -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -CONFIG_BLK_DEV_CRYPTOLOOP=m -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_SX8 is not set -# CONFIG_BLK_DEV_UB is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=4 -CONFIG_BLK_DEV_RAM_SIZE=10240 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -CONFIG_CDROM_PKTCDVD=m -CONFIG_CDROM_PKTCDVD_BUFFERS=8 -# CONFIG_CDROM_PKTCDVD_WCACHE is not set -CONFIG_ATA_OVER_ETH=m - -# -# ATA/ATAPI/MFM/RLL support -# -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=y -# CONFIG_SCSI_TGT is not set -# CONFIG_SCSI_NETLINK is not set -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_ST=m -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set -# CONFIG_SCSI_SCAN_ASYNC is not set - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -CONFIG_SCSI_ISCSI_ATTRS=m -# CONFIG_SCSI_SAS_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set - -# -# SCSI low-level drivers -# -CONFIG_ISCSI_TCP=m -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_AIC94XX is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_SCSI_ARCMSR is not set -# CONFIG_MEGARAID_NEWGEN is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_IPR is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_SRP is not set - -# -# Serial ATA (prod) and Parallel ATA (experimental) drivers -# -CONFIG_ATA=m -# CONFIG_ATA_NONSTANDARD is not set -# CONFIG_SATA_AHCI is not set -# CONFIG_SATA_SVW is not set -# CONFIG_ATA_PIIX is not set -# CONFIG_SATA_MV is not set -# CONFIG_SATA_NV is not set -# CONFIG_PDC_ADMA is not set -# CONFIG_SATA_QSTOR is not set -# CONFIG_SATA_PROMISE is not set -# CONFIG_SATA_SX4 is not set -# CONFIG_SATA_SIL is not set -# CONFIG_SATA_SIL24 is not set -# CONFIG_SATA_SIS is not set -# CONFIG_SATA_ULI is not set -CONFIG_SATA_VIA=m -# CONFIG_SATA_VITESSE is not set -# CONFIG_SATA_INIC162X is not set -# CONFIG_PATA_ALI is not set -# CONFIG_PATA_AMD is not set -CONFIG_PATA_ARTOP=m -# CONFIG_PATA_ATIIXP is not set -# CONFIG_PATA_CMD64X is not set -# CONFIG_PATA_CS5520 is not set -# CONFIG_PATA_CS5530 is not set -# CONFIG_PATA_CYPRESS is not set -# CONFIG_PATA_EFAR is not set -# CONFIG_ATA_GENERIC is not set -# CONFIG_PATA_HPT366 is not set -# CONFIG_PATA_HPT37X is not set -# CONFIG_PATA_HPT3X2N is not set -# CONFIG_PATA_HPT3X3 is not set -# CONFIG_PATA_IT821X is not set -# CONFIG_PATA_IT8213 is not set -# CONFIG_PATA_JMICRON is not set -# CONFIG_PATA_TRIFLEX is not set -# CONFIG_PATA_MARVELL is not set -# CONFIG_PATA_MPIIX is not set -# CONFIG_PATA_OLDPIIX is not set -# CONFIG_PATA_NETCELL is not set -# CONFIG_PATA_NS87410 is not set -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_OPTIDMA is not set -# CONFIG_PATA_PDC_OLD is not set -# CONFIG_PATA_RADISYS is not set -# CONFIG_PATA_RZ1000 is not set -# CONFIG_PATA_SC1200 is not set -# CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_PDC2027X is not set -# CONFIG_PATA_SIL680 is not set -# CONFIG_PATA_SIS is not set -# CONFIG_PATA_VIA is not set -# CONFIG_PATA_WINBOND is not set -# CONFIG_PATA_PLATFORM is not set -CONFIG_PATA_IXP4XX_CF=m - -# -# Multi-device support (RAID and LVM) -# -CONFIG_MD=y -CONFIG_BLK_DEV_MD=m -CONFIG_MD_LINEAR=m -CONFIG_MD_RAID0=m -CONFIG_MD_RAID1=m -CONFIG_MD_RAID10=m -CONFIG_MD_RAID456=m -CONFIG_MD_RAID5_RESHAPE=y -CONFIG_MD_MULTIPATH=m -CONFIG_MD_FAULTY=m -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_DEBUG is not set -CONFIG_DM_CRYPT=m -CONFIG_DM_SNAPSHOT=m -CONFIG_DM_MIRROR=m -CONFIG_DM_ZERO=m -CONFIG_DM_MULTIPATH=m -# CONFIG_DM_MULTIPATH_EMC is not set - -# -# Fusion MPT device support -# -# CONFIG_FUSION is not set -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_FC is not set -# CONFIG_FUSION_SAS is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -CONFIG_TUN=m - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set - -# -# PHY device support -# -# CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_MII=m -CONFIG_IXP4XX_QMGR=m -CONFIG_IXP4XX_NPE=y -CONFIG_IXP4XX_NPE_FW_LOAD=y -CONFIG_IXP4XX_NPE_FW_MTD=y -CONFIG_IXP4XX_MAC=m -CONFIG_IXP4XX_CRYPTO=m -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_SMC91X is not set -# CONFIG_DM9000 is not set - -# -# Tulip family network device support -# -# CONFIG_NET_TULIP is not set -# CONFIG_HP100 is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_FORCEDETH is not set -# CONFIG_DGRS is not set -# CONFIG_EEPRO100 is not set -# CONFIG_E100 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_SC92031 is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -CONFIG_R8169=m -# CONFIG_R8169_NAPI is not set -CONFIG_R8169_VLAN=y -# CONFIG_SIS190 is not set -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -# CONFIG_SK98LIN is not set -CONFIG_VIA_VELOCITY=m -# CONFIG_TIGON3 is not set -# CONFIG_BNX2 is not set -# CONFIG_QLA3XXX is not set -# CONFIG_ATL1 is not set - -# -# Ethernet (10000 Mbit) -# -# CONFIG_CHELSIO_T1 is not set -# CONFIG_CHELSIO_T3 is not set -# CONFIG_IXGB is not set -# CONFIG_S2IO is not set -# CONFIG_MYRI10GE is not set -# CONFIG_NETXEN_NIC is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -# CONFIG_NET_WIRELESS_RTNETLINK is not set - -# -# Obsolete Wireless cards support (pre-802.11) -# -# CONFIG_STRIP is not set - -# -# Wireless 802.11b ISA/PCI cards support -# -# CONFIG_IPW2100 is not set -# CONFIG_IPW2200 is not set -# CONFIG_HERMES is not set -# CONFIG_ATMEL is not set - -# -# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support -# -# CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set -# CONFIG_HOSTAP is not set -# CONFIG_BCM43XX is not set -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set -CONFIG_NET_WIRELESS=y - -# -# Wan interfaces -# -# CONFIG_WAN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -CONFIG_PPPOE=m -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set -CONFIG_NETCONSOLE=m -CONFIG_NETPOLL=y -# CONFIG_NETPOLL_TRAP is not set -CONFIG_NET_POLL_CONTROLLER=y - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -CONFIG_INPUT_MISC=y -CONFIG_INPUT_IXP4XX_BEEPER=y -CONFIG_INPUT_UINPUT=m - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -# CONFIG_VT is not set -CONFIG_SERIAL_NONSTANDARD=y -# CONFIG_COMPUTONE is not set -# CONFIG_ROCKETPORT is not set -# CONFIG_CYCLADES is not set -# CONFIG_DIGIEPCA is not set -# CONFIG_MOXA_INTELLIO is not set -# CONFIG_MOXA_SMARTIO is not set -# CONFIG_MOXA_SMARTIO_NEW is not set -# CONFIG_ISI is not set -# CONFIG_SYNCLINKMP is not set -# CONFIG_SYNCLINK_GT is not set -CONFIG_N_HDLC=m -# CONFIG_RISCOM8 is not set -# CONFIG_SPECIALIX is not set -# CONFIG_SX is not set -# CONFIG_RIO is not set -# CONFIG_STALDRV is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_PCI=m -CONFIG_SERIAL_8250_NR_UARTS=2 -CONFIG_SERIAL_8250_RUNTIME_UARTS=2 -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_IXP4XX_WATCHDOG=m - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_IXP4XX=y -# CONFIG_NVRAM is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set - -# -# TPM devices -# -# CONFIG_TCG_TPM is not set - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_I810 is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_IOP3XX is not set -CONFIG_I2C_ISA=m -CONFIG_I2C_IXP4XX=y -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_PROSAVAGE is not set -# CONFIG_I2C_SAVAGE4 is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set -# CONFIG_I2C_VOODOO3 is not set -# CONFIG_I2C_PCA_ISA is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -CONFIG_SENSORS_EEPROM=y -CONFIG_SENSORS_PCF8574=m -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_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 - -# -# Dallas's 1-wire bus -# -CONFIG_W1=m - -# -# 1-wire Bus Masters -# -# CONFIG_W1_MASTER_MATROX is not set -CONFIG_W1_MASTER_DS2490=m -CONFIG_W1_MASTER_DS2482=m - -# -# 1-wire Slaves -# -CONFIG_W1_SLAVE_THERM=m -CONFIG_W1_SLAVE_SMEM=m -CONFIG_W1_SLAVE_DS2433=m -CONFIG_W1_SLAVE_DS2433_CRC=y - -# -# Hardware Monitoring support -# -CONFIG_HWMON=m -CONFIG_HWMON_VID=m -# CONFIG_SENSORS_ABITUGURU is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1029 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ASB100 is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_FSCHER is not set -# CONFIG_SENSORS_FSCPOS is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_PC87427 is not set -# CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 is not set -CONFIG_SENSORS_W83781D=m -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83793 is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -CONFIG_SENSORS_AD7418=m -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Misc devices -# -# CONFIG_SGI_IOC4 is not set -# CONFIG_TIFM_CORE is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set - -# -# LED devices -# -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_IXP4XX=y - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=m -CONFIG_VIDEO_V4L1=y -CONFIG_VIDEO_V4L1_COMPAT=y -CONFIG_VIDEO_V4L2=y - -# -# Video Capture Adapters -# - -# -# Video Capture Adapters -# -# CONFIG_VIDEO_ADV_DEBUG is not set -CONFIG_VIDEO_HELPER_CHIPS_AUTO=y -CONFIG_VIDEO_TDA9840=m -CONFIG_VIDEO_TEA6415C=m -CONFIG_VIDEO_TEA6420=m -CONFIG_VIDEO_MSP3400=m -CONFIG_VIDEO_WM8775=m -CONFIG_VIDEO_BT819=m -CONFIG_VIDEO_BT856=m -CONFIG_VIDEO_KS0127=m -CONFIG_VIDEO_OV7670=m -CONFIG_VIDEO_SAA7110=m -CONFIG_VIDEO_SAA7111=m -CONFIG_VIDEO_SAA7114=m -CONFIG_VIDEO_SAA711X=m -CONFIG_VIDEO_TVP5150=m -CONFIG_VIDEO_VPX3220=m -CONFIG_VIDEO_CX25840=m -CONFIG_VIDEO_CX2341X=m -CONFIG_VIDEO_SAA7185=m -CONFIG_VIDEO_ADV7170=m -CONFIG_VIDEO_ADV7175=m -CONFIG_VIDEO_VIVI=m -# CONFIG_VIDEO_BT848 is not set -CONFIG_VIDEO_CPIA=m -CONFIG_VIDEO_CPIA_USB=m -CONFIG_VIDEO_CPIA2=m -CONFIG_VIDEO_SAA5246A=m -CONFIG_VIDEO_SAA5249=m -CONFIG_TUNER_3036=m -CONFIG_VIDEO_STRADIS=m -CONFIG_VIDEO_ZORAN_ZR36060=m -CONFIG_VIDEO_ZORAN=m -CONFIG_VIDEO_ZORAN_BUZ=m -CONFIG_VIDEO_ZORAN_DC10=m -CONFIG_VIDEO_ZORAN_DC30=m -CONFIG_VIDEO_ZORAN_LML33=m -CONFIG_VIDEO_ZORAN_LML33R10=m -CONFIG_VIDEO_ZORAN_AVS6EYES=m -CONFIG_VIDEO_SAA7134=m -CONFIG_VIDEO_SAA7134_ALSA=m -CONFIG_VIDEO_MXB=m -CONFIG_VIDEO_DPC=m -CONFIG_VIDEO_HEXIUM_ORION=m -CONFIG_VIDEO_HEXIUM_GEMINI=m -CONFIG_VIDEO_CX88=m -CONFIG_VIDEO_CX88_ALSA=m -CONFIG_VIDEO_CX88_BLACKBIRD=m -CONFIG_VIDEO_CAFE_CCIC=m - -# -# V4L USB devices -# -CONFIG_VIDEO_PVRUSB2=m -CONFIG_VIDEO_PVRUSB2_29XXX=y -CONFIG_VIDEO_PVRUSB2_24XXX=y -CONFIG_VIDEO_PVRUSB2_SYSFS=y -# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set -CONFIG_VIDEO_EM28XX=m -CONFIG_VIDEO_USBVISION=m -CONFIG_VIDEO_USBVIDEO=m -CONFIG_USB_VICAM=m -CONFIG_USB_IBMCAM=m -CONFIG_USB_KONICAWC=m -CONFIG_USB_QUICKCAM_MESSENGER=m -CONFIG_USB_ET61X251=m -CONFIG_VIDEO_OVCAMCHIP=m -CONFIG_USB_W9968CF=m -CONFIG_USB_OV511=m -CONFIG_USB_SE401=m -CONFIG_USB_SN9C102=m -CONFIG_USB_STV680=m -CONFIG_USB_ZC0301=m -CONFIG_USB_PWC=m -# CONFIG_USB_PWC_DEBUG is not set - -# -# Radio Adapters -# -# CONFIG_RADIO_GEMTEK_PCI is not set -# CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_MAESTRO is not set -CONFIG_USB_DSBR=m - -# -# Digital Video Broadcasting Devices -# -# CONFIG_DVB is not set -CONFIG_VIDEO_SAA7146=m -CONFIG_VIDEO_SAA7146_VV=m -CONFIG_VIDEO_TUNER=m -CONFIG_VIDEO_BUF=m -CONFIG_VIDEO_BTCX=m -CONFIG_VIDEO_IR=m -CONFIG_VIDEO_TVEEPROM=m -# CONFIG_USB_DABUSB is not set - -# -# Graphics support -# -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set -# CONFIG_FB is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -CONFIG_SND_SEQUENCER=m -CONFIG_SND_SEQ_DUMMY=m -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_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 - -# -# PCI devices -# -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ALS300 is not set -# CONFIG_SND_ALI5451 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AZT3328 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_EMU10K1X is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDA_INTEL is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# ALSA ARM devices -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m - -# -# SoC audio support -# -# CONFIG_SND_SOC is not set - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set - -# -# HID Devices -# -CONFIG_HID=m -# CONFIG_HID_DEBUG is not set - -# -# USB support -# -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -CONFIG_USB_EHCI_HCD=m -CONFIG_USB_EHCI_SPLIT_ISO=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_UHCI_HCD=m -# CONFIG_USB_U132_HCD is not set -# CONFIG_USB_SL811_HCD is not set - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -CONFIG_USB_STORAGE=y -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -CONFIG_USB_STORAGE_FREECOM=y -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_USBAT 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=y -CONFIG_USB_STORAGE_KARMA=y -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -CONFIG_USB_HIDDEV=y - -# -# USB HID Boot Protocol drivers -# -CONFIG_USB_KBD=m -# CONFIG_USB_MOUSE is not set -# CONFIG_USB_AIPTEK is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_ACECAD is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_TOUCHSCREEN is not set -CONFIG_USB_YEALINK=m -# CONFIG_USB_XPAD is not set -CONFIG_USB_ATI_REMOTE=m -CONFIG_USB_ATI_REMOTE2=m -CONFIG_USB_KEYSPAN_REMOTE=m -# CONFIG_USB_APPLETOUCH is not set -# CONFIG_USB_GTCO is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET_MII=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_NET_CDC_SUBSET=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -CONFIG_USB_EPSON2888=y -CONFIG_USB_KC2190=y -CONFIG_USB_NET_ZAURUS=m -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_AIRCABLE=m -# CONFIG_USB_SERIAL_AIRPRIME is not set -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_WHITEHEAT=m -CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -CONFIG_USB_SERIAL_CP2101=m -CONFIG_USB_SERIAL_CYPRESS_M8=m -CONFIG_USB_SERIAL_EMPEG=m -CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m -CONFIG_USB_SERIAL_VISOR=m -CONFIG_USB_SERIAL_IPAQ=m -CONFIG_USB_SERIAL_IR=m -CONFIG_USB_SERIAL_EDGEPORT=m -CONFIG_USB_SERIAL_EDGEPORT_TI=m -CONFIG_USB_SERIAL_GARMIN=m -CONFIG_USB_SERIAL_IPW=m -CONFIG_USB_SERIAL_KEYSPAN_PDA=m -CONFIG_USB_SERIAL_KEYSPAN=m -CONFIG_USB_SERIAL_KEYSPAN_MPR=y -CONFIG_USB_SERIAL_KEYSPAN_USA28=y -CONFIG_USB_SERIAL_KEYSPAN_USA28X=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y -CONFIG_USB_SERIAL_KEYSPAN_USA19=y -CONFIG_USB_SERIAL_KEYSPAN_USA18X=y -CONFIG_USB_SERIAL_KEYSPAN_USA19W=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y -CONFIG_USB_SERIAL_KEYSPAN_USA49W=y -CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_MOS7720=m -CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -# CONFIG_USB_SERIAL_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 is not set -# CONFIG_USB_EMI26 is not set -CONFIG_USB_ADUTUX=m -# CONFIG_USB_AUERSWALD is not set -CONFIG_USB_RIO500=m -CONFIG_USB_LEGOTOWER=m -CONFIG_USB_LCD=m -CONFIG_USB_BERRY_CHARGE=m -CONFIG_USB_LED=m -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -CONFIG_USB_PHIDGET=m -CONFIG_USB_PHIDGETKIT=m -CONFIG_USB_PHIDGETMOTORCONTROL=m -CONFIG_USB_PHIDGETSERVO=m -# CONFIG_USB_IDMOUSE is not set -CONFIG_USB_FTDI_ELAN=m -# CONFIG_USB_APPLEDISPLAY is not set -CONFIG_USB_SISUSBVGA=m -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -# CONFIG_USB_GADGET is not set - -# -# MMC/SD Card support -# -# CONFIG_MMC is not set - -# -# Real Time Clock -# -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 - -# -# RTC drivers -# -# CONFIG_RTC_DRV_CMOS is not set -CONFIG_RTC_DRV_X1205=y -CONFIG_RTC_DRV_DS1307=y -# CONFIG_RTC_DRV_DS1553 is not set -CONFIG_RTC_DRV_ISL1208=y -CONFIG_RTC_DRV_DS1672=y -# CONFIG_RTC_DRV_DS1742 is not set -CONFIG_RTC_DRV_PCF8563=y -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_TEST is not set -# CONFIG_RTC_DRV_V3020 is not set - -# -# File systems -# -CONFIG_EXT2_FS=m -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=m -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -CONFIG_FUSE_FS=m - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_UDF_FS=m -CONFIG_UDF_NLS=y - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m -# CONFIG_NTFS_DEBUG is not set -CONFIG_NTFS_RW=y - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -# CONFIG_CRAMFS is not set -CONFIG_SQUASHFS=m -# CONFIG_SQUASHFS_EMBEDDED is not set -CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -# CONFIG_SQUASHFS_VMALLOC is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -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=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_RPCSEC_GSS_KRB5=m -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -# CONFIG_CIFS_WEAK_PW_HASH is not set -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -# CONFIG_9P_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_KARMA_PARTITION is not set -# CONFIG_EFI_PARTITION is not set - -# -# Native Language Support -# -CONFIG_NLS=m -CONFIG_NLS_DEFAULT="utf8" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_MUST_CHECK=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -CONFIG_CRYPTO=y -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_BLKCIPHER=y -CONFIG_CRYPTO_HASH=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_DES=y -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_AES=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -# CONFIG_CRYPTO_CAMELLIA is not set -CONFIG_CRYPTO_TEST=m - -# -# Hardware crypto devices -# - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=y -CONFIG_CRC32=y -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y -CONFIG_TEXTSEARCH=y -CONFIG_TEXTSEARCH_KMP=m -CONFIG_TEXTSEARCH_BM=m -CONFIG_TEXTSEARCH_FSM=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y diff --git a/packages/linux/ixp4xx-kernel/2.6.22/.mtn2git_empty b/packages/linux/ixp4xx-kernel/2.6.22/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/ixp4xx-kernel/2.6.22/defconfig b/packages/linux/ixp4xx-kernel/2.6.22/defconfig deleted file mode 100644 index 6eaf4df545..0000000000 --- a/packages/linux/ixp4xx-kernel/2.6.22/defconfig +++ /dev/null @@ -1,1984 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.22-rc5 -# Sun Jun 24 12:06:23 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_TIME=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set -CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# -CONFIG_LOCALVERSION="" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_IPC_NS is not set -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_UTS_NS is not set -# CONFIG_AUDIT is not set -CONFIG_IKCONFIG=m -CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_SYSFS_DEPRECATED=y -# CONFIG_RELAY is not set -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -# CONFIG_KALLSYMS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_TIMERFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -# CONFIG_VM_EVENT_COUNTERS is not set -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y - -# -# Block layer -# -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -CONFIG_ARCH_IXP4XX=y -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_PNX4008 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y - -# -# Intel IXP4xx Implementation Options -# - -# -# IXP4xx Platforms -# -CONFIG_MACH_NSLU2=y -CONFIG_MACH_AVILA=y -CONFIG_MACH_LOFT=y -# CONFIG_ARCH_ADI_COYOTE is not set -CONFIG_ARCH_IXDP425=y -CONFIG_MACH_IXDPG425=y -# CONFIG_MACH_IXDP465 is not set -# CONFIG_MACH_KIXRP435 is not set -CONFIG_ARCH_IXCDP1100=y -# CONFIG_ARCH_PRPMC1100 is not set -CONFIG_MACH_NAS100D=y -CONFIG_MACH_DSMG600=y -CONFIG_ARCH_IXDP4XX=y -CONFIG_MACH_FSG=y -# CONFIG_MACH_GTWX5715 is not set - -# -# IXP4xx Options -# -CONFIG_DMABOUNCE=y -# CONFIG_IXP4XX_INDIRECT_PCI is not set -CONFIG_IXP4XX_QMGR=y -CONFIG_IXP4XX_NPE=y - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -CONFIG_CPU_BIG_ENDIAN=y -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_OUTER_CACHE is not set -# CONFIG_IWMMXT is not set -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -CONFIG_PCI=y -# CONFIG_ARCH_SUPPORTS_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -CONFIG_TICK_ONESHOT=y -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_PREEMPT=y -CONFIG_HZ=100 -CONFIG_AEABI=y -CONFIG_OABI_COMPAT=y -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" -# CONFIG_XIP_KERNEL is not set -CONFIG_KEXEC=y - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set - -# -# Power management options -# -# CONFIG_PM is not set - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER is not set -# CONFIG_XFRM_SUB_POLICY is not set -# CONFIG_XFRM_MIGRATE is not set -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_SYN_COOKIES is not set -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -# CONFIG_IP_VS is not set -CONFIG_IPV6=m -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -# CONFIG_IPV6_OPTIMISTIC_DAD is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -# CONFIG_IPV6_MIP6 is not set -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_SIT=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NF_CONNTRACK_ENABLED=m -CONFIG_NF_CONNTRACK=m -CONFIG_NF_CT_ACCT=y -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -CONFIG_NF_CONNTRACK_AMANDA=m -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SANE=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -# CONFIG_IP_NF_QUEUE is not set -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_IPRANGE=m -CONFIG_IP_NF_MATCH_TOS=m -CONFIG_IP_NF_MATCH_RECENT=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_SAME=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_TFTP=m -CONFIG_NF_NAT_AMANDA=m -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_NF_NAT_SIP=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_TOS=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_TARGET_CLUSTERIP=m -CONFIG_IP_NF_RAW=m -CONFIG_IP_NF_ARPTABLES=m -CONFIG_IP_NF_ARPFILTER=m -CONFIG_IP_NF_ARP_MANGLE=m - -# -# IPv6: Netfilter Configuration (EXPERIMENTAL) -# -CONFIG_NF_CONNTRACK_IPV6=m -# CONFIG_IP6_NF_QUEUE is not set -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_OWNER=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_MH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -CONFIG_IP6_NF_RAW=m - -# -# Bridge: Netfilter Configuration -# -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_ULOG=m -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -CONFIG_TIPC=m -# CONFIG_TIPC_ADVANCED is not set -# CONFIG_TIPC_DEBUG is not set -# CONFIG_ATM is not set -CONFIG_BRIDGE=m -CONFIG_VLAN_8021Q=m -# CONFIG_DECNET is not set -CONFIG_LLC=m -# CONFIG_LLC2 is not set -CONFIG_IPX=m -# CONFIG_IPX_INTERN is not set -CONFIG_ATALK=m -CONFIG_DEV_APPLETALK=m -CONFIG_IPDDP=m -CONFIG_IPDDP_ENCAP=y -CONFIG_IPDDP_DECAP=y -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set -CONFIG_NET_CLS_ROUTE=y - -# -# Network testing -# -CONFIG_NET_PKTGEN=m -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -# CONFIG_BT_CMTP is not set -CONFIG_BT_HIDP=m - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_H4=y -CONFIG_BT_HCIUART_BCSP=y -CONFIG_BT_HCIBCM203X=m -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -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 - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=y -# CONFIG_SYS_HYPERVISOR is not set - -# -# Connector - unified userspace <-> kernelspace linker -# -# CONFIG_CONNECTOR is not set -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_CONCAT=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 -CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y -# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -CONFIG_NFTL=y -CONFIG_NFTL_RW=y -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -# CONFIG_MTD_CFI_NOSWAP is not set -CONFIG_MTD_CFI_BE_BYTE_SWAP=y -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set - -# -# Mapping drivers for chip access -# -CONFIG_MTD_COMPLEX_MAPPINGS=y -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_IXP4XX=y -# CONFIG_MTD_PCI is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Plug and Play support -# -# CONFIG_PNPACPI is not set - -# -# Block devices -# -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_SX8 is not set -# CONFIG_BLK_DEV_UB is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=4 -CONFIG_BLK_DEV_RAM_SIZE=10240 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -CONFIG_CDROM_PKTCDVD=m -CONFIG_CDROM_PKTCDVD_BUFFERS=8 -# CONFIG_CDROM_PKTCDVD_WCACHE is not set -CONFIG_ATA_OVER_ETH=m -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=y -# CONFIG_SCSI_TGT is not set -# CONFIG_SCSI_NETLINK is not set -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_ST=m -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set -# CONFIG_SCSI_SCAN_ASYNC is not set -CONFIG_SCSI_WAIT_SCAN=m - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -CONFIG_SCSI_ISCSI_ATTRS=m -# CONFIG_SCSI_SAS_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set - -# -# SCSI low-level drivers -# -CONFIG_ISCSI_TCP=m -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_AIC94XX is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_SCSI_ARCMSR is not set -# CONFIG_MEGARAID_NEWGEN is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_IPR is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_SRP is not set -CONFIG_ATA=m -# CONFIG_ATA_NONSTANDARD is not set -# CONFIG_SATA_AHCI is not set -# CONFIG_SATA_SVW is not set -# CONFIG_ATA_PIIX is not set -# CONFIG_SATA_MV is not set -# CONFIG_SATA_NV is not set -# CONFIG_PDC_ADMA is not set -# CONFIG_SATA_QSTOR is not set -# CONFIG_SATA_PROMISE is not set -# CONFIG_SATA_SX4 is not set -# CONFIG_SATA_SIL is not set -# CONFIG_SATA_SIL24 is not set -# CONFIG_SATA_SIS is not set -# CONFIG_SATA_ULI is not set -CONFIG_SATA_VIA=m -# CONFIG_SATA_VITESSE is not set -# CONFIG_SATA_INIC162X is not set -# CONFIG_PATA_ALI is not set -# CONFIG_PATA_AMD is not set -CONFIG_PATA_ARTOP=m -# CONFIG_PATA_ATIIXP is not set -# CONFIG_PATA_CMD640_PCI is not set -# CONFIG_PATA_CMD64X is not set -# CONFIG_PATA_CS5520 is not set -# CONFIG_PATA_CS5530 is not set -# CONFIG_PATA_CYPRESS is not set -# CONFIG_PATA_EFAR is not set -# CONFIG_ATA_GENERIC is not set -# CONFIG_PATA_HPT366 is not set -# CONFIG_PATA_HPT37X is not set -# CONFIG_PATA_HPT3X2N is not set -# CONFIG_PATA_HPT3X3 is not set -# CONFIG_PATA_IT821X is not set -# CONFIG_PATA_IT8213 is not set -# CONFIG_PATA_JMICRON is not set -# CONFIG_PATA_TRIFLEX is not set -# CONFIG_PATA_MARVELL is not set -# CONFIG_PATA_MPIIX is not set -# CONFIG_PATA_OLDPIIX is not set -# CONFIG_PATA_NETCELL is not set -# CONFIG_PATA_NS87410 is not set -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_OPTIDMA is not set -# CONFIG_PATA_PDC_OLD is not set -# CONFIG_PATA_RADISYS is not set -# CONFIG_PATA_RZ1000 is not set -# CONFIG_PATA_SC1200 is not set -# CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_PDC2027X is not set -# CONFIG_PATA_SIL680 is not set -# CONFIG_PATA_SIS is not set -# CONFIG_PATA_VIA is not set -# CONFIG_PATA_WINBOND is not set -# CONFIG_PATA_PLATFORM is not set -CONFIG_PATA_IXP4XX_CF=m - -# -# Multi-device support (RAID and LVM) -# -CONFIG_MD=y -CONFIG_BLK_DEV_MD=m -CONFIG_MD_LINEAR=m -CONFIG_MD_RAID0=m -CONFIG_MD_RAID1=m -CONFIG_MD_RAID10=m -CONFIG_MD_RAID456=m -CONFIG_MD_RAID5_RESHAPE=y -CONFIG_MD_MULTIPATH=m -CONFIG_MD_FAULTY=m -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_DEBUG is not set -# CONFIG_DM_CRYPT is not set -# CONFIG_DM_SNAPSHOT is not set -# CONFIG_DM_MIRROR is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set -# CONFIG_DM_DELAY is not set - -# -# Fusion MPT device support -# -# CONFIG_FUSION is not set -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_FC is not set -# CONFIG_FUSION_SAS is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_FIREWIRE is not set -# CONFIG_IEEE1394 is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -CONFIG_TUN=m -# CONFIG_ARCNET is not set -# CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_IXP4XX_ETH=y -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_SMC91X is not set -# CONFIG_DM9000 is not set - -# -# Tulip family network device support -# -# CONFIG_NET_TULIP is not set -# CONFIG_HP100 is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_FORCEDETH is not set -# CONFIG_DGRS is not set -# CONFIG_EEPRO100 is not set -# CONFIG_E100 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_SC92031 is not set -CONFIG_NETDEV_1000=y -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_R8169 is not set -# CONFIG_SIS190 is not set -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -# CONFIG_SK98LIN is not set -CONFIG_VIA_VELOCITY=m -# CONFIG_TIGON3 is not set -# CONFIG_BNX2 is not set -# CONFIG_QLA3XXX is not set -# CONFIG_ATL1 is not set -# CONFIG_NETDEV_10000 is not set -# CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -CONFIG_WLAN_80211=y -# CONFIG_IPW2100 is not set -# CONFIG_IPW2200 is not set -CONFIG_LIBERTAS=m -CONFIG_LIBERTAS_USB=m -# CONFIG_LIBERTAS_DEBUG is not set -# CONFIG_HERMES is not set -# CONFIG_ATMEL is not set -# CONFIG_PRISM54 is not set -CONFIG_USB_ZD1201=m -# CONFIG_HOSTAP is not set -# CONFIG_BCM43XX is not set -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET_MII=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -# CONFIG_USB_NET_DM9601 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=m -# CONFIG_USB_NET_RNDIS_HOST is not set -# CONFIG_USB_NET_CDC_SUBSET is not set -CONFIG_USB_NET_ZAURUS=m -# CONFIG_WAN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -CONFIG_PPPOE=m -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set -CONFIG_NETCONSOLE=m -CONFIG_NETPOLL=y -# CONFIG_NETPOLL_TRAP is not set -CONFIG_NET_POLL_CONTROLLER=y - -# -# ISDN subsystem -# -CONFIG_ISDN=m - -# -# Old ISDN4Linux -# -# CONFIG_ISDN_I4L is not set - -# -# CAPI subsystem -# -CONFIG_ISDN_CAPI=m -CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y -CONFIG_CAPI_TRACE=y -# CONFIG_ISDN_CAPI_MIDDLEWARE is not set -CONFIG_ISDN_CAPI_CAPI20=m - -# -# CAPI hardware drivers -# - -# -# Active AVM cards -# -# CONFIG_CAPI_AVM is not set - -# -# Active Eicon DIVA Server cards -# -# CONFIG_CAPI_EICON is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -CONFIG_INPUT_MISC=y -CONFIG_INPUT_IXP4XX_BEEPER=y -CONFIG_INPUT_ATI_REMOTE=m -CONFIG_INPUT_ATI_REMOTE2=m -CONFIG_INPUT_KEYSPAN_REMOTE=m -# CONFIG_INPUT_POWERMATE is not set -CONFIG_INPUT_YEALINK=m -CONFIG_INPUT_UINPUT=m - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -# CONFIG_VT is not set -CONFIG_SERIAL_NONSTANDARD=y -# CONFIG_COMPUTONE is not set -# CONFIG_ROCKETPORT is not set -# CONFIG_CYCLADES is not set -# CONFIG_DIGIEPCA is not set -# CONFIG_MOXA_INTELLIO is not set -# CONFIG_MOXA_SMARTIO is not set -# CONFIG_MOXA_SMARTIO_NEW is not set -# CONFIG_ISI is not set -# CONFIG_SYNCLINKMP is not set -# CONFIG_SYNCLINK_GT is not set -CONFIG_N_HDLC=m -# CONFIG_RISCOM8 is not set -# CONFIG_SPECIALIX is not set -# CONFIG_SX is not set -# CONFIG_RIO is not set -# CONFIG_STALDRV is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_PCI=m -CONFIG_SERIAL_8250_NR_UARTS=2 -CONFIG_SERIAL_8250_RUNTIME_UARTS=2 -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_IXP4XX_WATCHDOG=m - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_IXP4XX=y -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set - -# -# TPM devices -# -# CONFIG_TCG_TPM is not set -CONFIG_DEVPORT=y -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -CONFIG_I2C_GPIO=y -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_I810 is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_IOP3XX is not set -# CONFIG_I2C_IXP4XX is not set -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_PROSAVAGE is not set -# CONFIG_I2C_SAVAGE4 is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_STUB is not set -CONFIG_I2C_TINY_USB=m -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set -# CONFIG_I2C_VOODOO3 is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -CONFIG_SENSORS_EEPROM=y -CONFIG_SENSORS_PCF8574=m -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_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 - -# -# Dallas's 1-wire bus -# -CONFIG_W1=m - -# -# 1-wire Bus Masters -# -# CONFIG_W1_MASTER_MATROX is not set -CONFIG_W1_MASTER_DS2490=m -CONFIG_W1_MASTER_DS2482=m -# CONFIG_W1_MASTER_DS1WM is not set - -# -# 1-wire Slaves -# -CONFIG_W1_SLAVE_THERM=m -CONFIG_W1_SLAVE_SMEM=m -CONFIG_W1_SLAVE_DS2433=m -CONFIG_W1_SLAVE_DS2433_CRC=y -CONFIG_HWMON=m -CONFIG_HWMON_VID=m -# CONFIG_SENSORS_ABITUGURU is not set -CONFIG_SENSORS_AD7418=m -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1029 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ASB100 is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_FSCHER is not set -# CONFIG_SENSORS_FSCPOS is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_MAX6650 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_PC87427 is not set -# CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 is not set -CONFIG_SENSORS_W83781D=m -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83793 is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Misc devices -# -# CONFIG_PHANTOM is not set -# CONFIG_SGI_IOC4 is not set -# CONFIG_TIFM_CORE is not set -# CONFIG_BLINK is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set - -# -# LED devices -# -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_IXP4XX=y - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=m -# CONFIG_VIDEO_V4L1 is not set -# CONFIG_VIDEO_V4L1_COMPAT is not set -CONFIG_VIDEO_V4L2=y -CONFIG_VIDEO_CAPTURE_DRIVERS=y -# CONFIG_VIDEO_ADV_DEBUG is not set -CONFIG_VIDEO_HELPER_CHIPS_AUTO=y -CONFIG_VIDEO_VIVI=m -CONFIG_VIDEO_SAA5246A=m -CONFIG_VIDEO_SAA5249=m -CONFIG_VIDEO_SAA7134=m -# CONFIG_VIDEO_SAA7134_ALSA is not set -CONFIG_VIDEO_HEXIUM_ORION=m -CONFIG_VIDEO_HEXIUM_GEMINI=m -CONFIG_VIDEO_CX88=m -CONFIG_VIDEO_CX88_ALSA=m -# CONFIG_VIDEO_CX88_BLACKBIRD is not set -# CONFIG_VIDEO_CAFE_CCIC is not set -CONFIG_V4L_USB_DRIVERS=y -# CONFIG_VIDEO_PVRUSB2 is not set -# CONFIG_VIDEO_USBVISION is not set -# CONFIG_USB_SN9C102 is not set -CONFIG_USB_ZR364XX=m -# CONFIG_RADIO_ADAPTERS is not set -# CONFIG_DVB_CORE is not set -CONFIG_VIDEO_SAA7146=m -CONFIG_VIDEO_SAA7146_VV=m -CONFIG_VIDEO_TUNER=m -CONFIG_VIDEO_BUF=m -CONFIG_VIDEO_BTCX=m -CONFIG_VIDEO_IR=m -CONFIG_VIDEO_TVEEPROM=m -# CONFIG_DAB is not set - -# -# Graphics support -# -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -# CONFIG_FB is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# PCI devices -# -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ALS300 is not set -# CONFIG_SND_ALI5451 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AZT3328 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_EMU10K1X is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDA_INTEL is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# ALSA ARM devices -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m -CONFIG_SND_USB_CAIAQ=m -CONFIG_SND_USB_CAIAQ_INPUT=y - -# -# System on Chip audio support -# -# CONFIG_SND_SOC is not set - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set - -# -# HID Devices -# -CONFIG_HID=m -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -CONFIG_USB_HIDDEV=y - -# -# USB HID Boot Protocol drivers -# -CONFIG_USB_KBD=m -# CONFIG_USB_MOUSE is not set - -# -# USB support -# -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_DEVICE_CLASS is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_SPLIT_ISO=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_UHCI_HCD=m -# CONFIG_USB_U132_HCD is not set -# CONFIG_USB_SL811_HCD is not set - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -CONFIG_USB_STORAGE=y -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM 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=y -CONFIG_USB_STORAGE_KARMA=y -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_AIRCABLE=m -# CONFIG_USB_SERIAL_AIRPRIME is not set -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_WHITEHEAT=m -CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -CONFIG_USB_SERIAL_CP2101=m -CONFIG_USB_SERIAL_CYPRESS_M8=m -CONFIG_USB_SERIAL_EMPEG=m -CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m -CONFIG_USB_SERIAL_VISOR=m -CONFIG_USB_SERIAL_IPAQ=m -CONFIG_USB_SERIAL_IR=m -CONFIG_USB_SERIAL_EDGEPORT=m -CONFIG_USB_SERIAL_EDGEPORT_TI=m -CONFIG_USB_SERIAL_GARMIN=m -CONFIG_USB_SERIAL_IPW=m -CONFIG_USB_SERIAL_KEYSPAN_PDA=m -CONFIG_USB_SERIAL_KEYSPAN=m -CONFIG_USB_SERIAL_KEYSPAN_MPR=y -CONFIG_USB_SERIAL_KEYSPAN_USA28=y -CONFIG_USB_SERIAL_KEYSPAN_USA28X=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y -CONFIG_USB_SERIAL_KEYSPAN_USA19=y -CONFIG_USB_SERIAL_KEYSPAN_USA18X=y -CONFIG_USB_SERIAL_KEYSPAN_USA19W=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y -CONFIG_USB_SERIAL_KEYSPAN_USA49W=y -CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_MOS7720=m -CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -# CONFIG_USB_SERIAL_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 is not set -# CONFIG_USB_EMI26 is not set -CONFIG_USB_ADUTUX=m -# 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=m -CONFIG_USB_PHIDGETKIT=m -CONFIG_USB_PHIDGETMOTORCONTROL=m -CONFIG_USB_PHIDGETSERVO=m -# CONFIG_USB_IDMOUSE is not set -CONFIG_USB_FTDI_ELAN=m -# CONFIG_USB_APPLEDISPLAY is not set -CONFIG_USB_SISUSBVGA=m -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -# CONFIG_USB_GADGET is not set -# CONFIG_MMC is not set - -# -# Real Time Clock -# -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -# CONFIG_RTC_DEBUG is not set - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -CONFIG_RTC_DRV_DS1307=y -CONFIG_RTC_DRV_DS1672=y -# CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_RS5C372 is not set -CONFIG_RTC_DRV_ISL1208=y -CONFIG_RTC_DRV_X1205=y -CONFIG_RTC_DRV_PCF8563=y -# CONFIG_RTC_DRV_PCF8583 is not set - -# -# SPI RTC drivers -# - -# -# Platform RTC drivers -# -# CONFIG_RTC_DRV_CMOS is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_V3020 is not set - -# -# on-CPU RTC drivers -# - -# -# File systems -# -CONFIG_EXT2_FS=m -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=m -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -CONFIG_FUSE_FS=m - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_UDF_FS=m -CONFIG_UDF_NLS=y - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m -# CONFIG_NTFS_DEBUG is not set -CONFIG_NTFS_RW=y - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -# CONFIG_NFS_V3_ACL is not set -# CONFIG_NFS_V4 is not set -# 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 is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -# CONFIG_CIFS_WEAK_PW_HASH is not set -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -# CONFIG_9P_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_KARMA_PARTITION is not set -# CONFIG_EFI_PARTITION is not set -# CONFIG_SYSV68_PARTITION is not set - -# -# Native Language Support -# -CONFIG_NLS=m -CONFIG_NLS_DEFAULT="utf8" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_MUST_CHECK=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -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 is not set -# CONFIG_CRYPTO_NULL is not set -# CONFIG_CRYPTO_MD4 is not set -CONFIG_CRYPTO_MD5=y -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=m -CONFIG_CRYPTO_CBC=y -# CONFIG_CRYPTO_PCBC is not set -# CONFIG_CRYPTO_LRW 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=m -# 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_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -# CONFIG_CRYPTO_CAMELLIA is not set -# CONFIG_CRYPTO_TEST is not set - -# -# Hardware crypto devices -# - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=y -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y -CONFIG_TEXTSEARCH=y -CONFIG_TEXTSEARCH_KMP=m -CONFIG_TEXTSEARCH_BM=m -CONFIG_TEXTSEARCH_FSM=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y diff --git a/packages/linux/ixp4xx-kernel/2.6.23/.mtn2git_empty b/packages/linux/ixp4xx-kernel/2.6.23/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/ixp4xx-kernel/2.6.23/defconfig b/packages/linux/ixp4xx-kernel/2.6.23/defconfig deleted file mode 100644 index efbd55195d..0000000000 --- a/packages/linux/ixp4xx-kernel/2.6.23/defconfig +++ /dev/null @@ -1,1940 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.23.8 -# Wed Nov 21 22:15:10 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -CONFIG_GENERIC_TIME=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set -CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# General setup -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_LOCALVERSION="" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set -# CONFIG_AUDIT is not set -CONFIG_IKCONFIG=m -CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_SYSFS_DEPRECATED=y -# CONFIG_RELAY is not set -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_EMBEDDED=y -CONFIG_UID16=y -# CONFIG_SYSCTL_SYSCALL is not set -# CONFIG_KALLSYMS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -# CONFIG_VM_EVENT_COUNTERS is not set -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -CONFIG_IOSCHED_DEADLINE=y -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -CONFIG_ARCH_IXP4XX=y -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_MXC is not set -# CONFIG_ARCH_PNX4008 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y - -# -# Intel IXP4xx Implementation Options -# - -# -# IXP4xx Platforms -# -CONFIG_MACH_NSLU2=y -CONFIG_MACH_AVILA=y -CONFIG_MACH_LOFT=y -# CONFIG_ARCH_ADI_COYOTE is not set -# CONFIG_MACH_GATEWAY7001 is not set -# CONFIG_MACH_WG302V2 is not set -CONFIG_ARCH_IXDP425=y -CONFIG_MACH_IXDPG425=y -# CONFIG_MACH_IXDP465 is not set -# CONFIG_MACH_KIXRP435 is not set -CONFIG_ARCH_IXCDP1100=y -# CONFIG_ARCH_PRPMC1100 is not set -CONFIG_MACH_NAS100D=y -CONFIG_MACH_DSMG600=y -CONFIG_ARCH_IXDP4XX=y -CONFIG_MACH_FSG=y -# CONFIG_MACH_GTWX5715 is not set - -# -# IXP4xx Options -# -CONFIG_DMABOUNCE=y -# CONFIG_IXP4XX_INDIRECT_PCI is not set -CONFIG_IXP4XX_QMGR=y -CONFIG_IXP4XX_NPE=y - -# -# Boot options -# - -# -# Power management -# - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -CONFIG_CPU_BIG_ENDIAN=y -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_OUTER_CACHE is not set -# CONFIG_IWMMXT is not set -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -CONFIG_PCI=y -CONFIG_PCI_SYSCALL=y -# CONFIG_ARCH_SUPPORTS_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -CONFIG_TICK_ONESHOT=y -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_PREEMPT=y -CONFIG_HZ=100 -CONFIG_AEABI=y -CONFIG_OABI_COMPAT=y -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_VIRT_TO_BUS=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" -# CONFIG_XIP_KERNEL is not set -CONFIG_KEXEC=y - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set - -# -# Power management options -# -# CONFIG_PM is not set -CONFIG_SUSPEND_UP_POSSIBLE=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER is not set -# CONFIG_XFRM_SUB_POLICY is not set -# CONFIG_XFRM_MIGRATE is not set -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_SYN_COOKIES is not set -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -# CONFIG_IP_VS is not set -CONFIG_IPV6=m -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -# CONFIG_IPV6_OPTIMISTIC_DAD is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -# CONFIG_IPV6_MIP6 is not set -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_SIT=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NF_CONNTRACK_ENABLED=m -CONFIG_NF_CONNTRACK=m -CONFIG_NF_CT_ACCT=y -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -# CONFIG_NF_CT_PROTO_UDPLITE is not set -CONFIG_NF_CONNTRACK_AMANDA=m -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SANE=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -# CONFIG_NETFILTER_XT_TARGET_TRACE is not set -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -# CONFIG_NETFILTER_XT_MATCH_U32 is not set -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -# CONFIG_IP_NF_QUEUE is not set -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_IPRANGE=m -CONFIG_IP_NF_MATCH_TOS=m -CONFIG_IP_NF_MATCH_RECENT=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_SAME=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_TFTP=m -CONFIG_NF_NAT_AMANDA=m -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_NF_NAT_SIP=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_TOS=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_TARGET_CLUSTERIP=m -CONFIG_IP_NF_RAW=m -CONFIG_IP_NF_ARPTABLES=m -CONFIG_IP_NF_ARPFILTER=m -CONFIG_IP_NF_ARP_MANGLE=m - -# -# IPv6: Netfilter Configuration (EXPERIMENTAL) -# -CONFIG_NF_CONNTRACK_IPV6=m -# CONFIG_IP6_NF_QUEUE is not set -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_OWNER=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_MH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -CONFIG_IP6_NF_RAW=m - -# -# Bridge: Netfilter Configuration -# -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_ULOG=m -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -CONFIG_TIPC=m -# CONFIG_TIPC_ADVANCED is not set -# CONFIG_TIPC_DEBUG is not set -# CONFIG_ATM is not set -CONFIG_BRIDGE=m -CONFIG_VLAN_8021Q=m -# CONFIG_DECNET is not set -CONFIG_LLC=m -# CONFIG_LLC2 is not set -CONFIG_IPX=m -# CONFIG_IPX_INTERN is not set -CONFIG_ATALK=m -CONFIG_DEV_APPLETALK=m -CONFIG_IPDDP=m -CONFIG_IPDDP_ENCAP=y -CONFIG_IPDDP_DECAP=y -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set -CONFIG_NET_CLS_ROUTE=y - -# -# Network testing -# -CONFIG_NET_PKTGEN=m -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_CMTP=m -CONFIG_BT_HIDP=m - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_H4=y -CONFIG_BT_HCIUART_BCSP=y -CONFIG_BT_HCIBCM203X=m -CONFIG_BT_HCIBPA10X=m -CONFIG_BT_HCIBFUSB=m -CONFIG_BT_HCIVHCI=m -# CONFIG_AF_RXRPC is not set - -# -# Wireless -# -# CONFIG_CFG80211 is not set -CONFIG_WIRELESS_EXT=y -# CONFIG_MAC80211 is not set -CONFIG_IEEE80211=m -# CONFIG_IEEE80211_DEBUG is not set -CONFIG_IEEE80211_CRYPT_WEP=m -CONFIG_IEEE80211_CRYPT_CCMP=m -CONFIG_IEEE80211_CRYPT_TKIP=m -CONFIG_IEEE80211_SOFTMAC=m -# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set -CONFIG_RFKILL=m -# CONFIG_RFKILL_INPUT is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=y -# CONFIG_SYS_HYPERVISOR is not set -# CONFIG_CONNECTOR is not set -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_CONCAT=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 -CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y -# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -CONFIG_NFTL=y -CONFIG_NFTL_RW=y -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -# CONFIG_MTD_CFI_NOSWAP is not set -CONFIG_MTD_CFI_BE_BYTE_SWAP=y -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set - -# -# Mapping drivers for chip access -# -CONFIG_MTD_COMPLEX_MAPPINGS=y -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -CONFIG_MTD_IXP4XX=y -# CONFIG_MTD_PCI is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_UMEM is not set -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_SX8 is not set -# CONFIG_BLK_DEV_UB is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=4 -CONFIG_BLK_DEV_RAM_SIZE=10240 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -CONFIG_CDROM_PKTCDVD=m -CONFIG_CDROM_PKTCDVD_BUFFERS=8 -# CONFIG_CDROM_PKTCDVD_WCACHE is not set -CONFIG_ATA_OVER_ETH=m -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=y -CONFIG_SCSI_DMA=y -# CONFIG_SCSI_TGT is not set -# CONFIG_SCSI_NETLINK is not set -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_ST=m -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set -# CONFIG_SCSI_SCAN_ASYNC is not set -CONFIG_SCSI_WAIT_SCAN=m - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -CONFIG_SCSI_ISCSI_ATTRS=m -# CONFIG_SCSI_SAS_LIBSAS is not set -CONFIG_SCSI_LOWLEVEL=y -CONFIG_ISCSI_TCP=m -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_AIC94XX is not set -# CONFIG_SCSI_DPT_I2O is not set -# CONFIG_SCSI_ARCMSR is not set -# CONFIG_MEGARAID_NEWGEN is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_IPR is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_SRP is not set -CONFIG_ATA=m -# CONFIG_ATA_NONSTANDARD is not set -# CONFIG_SATA_AHCI is not set -# CONFIG_SATA_SVW is not set -# CONFIG_ATA_PIIX is not set -# CONFIG_SATA_MV is not set -# CONFIG_SATA_NV is not set -# CONFIG_PDC_ADMA is not set -# CONFIG_SATA_QSTOR is not set -# CONFIG_SATA_PROMISE is not set -# CONFIG_SATA_SX4 is not set -# CONFIG_SATA_SIL is not set -# CONFIG_SATA_SIL24 is not set -# CONFIG_SATA_SIS is not set -# CONFIG_SATA_ULI is not set -CONFIG_SATA_VIA=m -# CONFIG_SATA_VITESSE is not set -# CONFIG_SATA_INIC162X is not set -# CONFIG_PATA_ALI is not set -# CONFIG_PATA_AMD is not set -CONFIG_PATA_ARTOP=m -# CONFIG_PATA_ATIIXP is not set -# CONFIG_PATA_CMD640_PCI is not set -# CONFIG_PATA_CMD64X is not set -# CONFIG_PATA_CS5520 is not set -# CONFIG_PATA_CS5530 is not set -# CONFIG_PATA_CYPRESS is not set -# CONFIG_PATA_EFAR is not set -# CONFIG_ATA_GENERIC is not set -# CONFIG_PATA_HPT366 is not set -# CONFIG_PATA_HPT37X is not set -# CONFIG_PATA_HPT3X2N is not set -# CONFIG_PATA_HPT3X3 is not set -# CONFIG_PATA_IT821X is not set -# CONFIG_PATA_IT8213 is not set -# CONFIG_PATA_JMICRON is not set -# CONFIG_PATA_TRIFLEX is not set -# CONFIG_PATA_MARVELL is not set -# CONFIG_PATA_MPIIX is not set -# CONFIG_PATA_OLDPIIX is not set -# CONFIG_PATA_NETCELL is not set -# CONFIG_PATA_NS87410 is not set -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_OPTIDMA is not set -# CONFIG_PATA_PDC_OLD is not set -# CONFIG_PATA_RADISYS is not set -# CONFIG_PATA_RZ1000 is not set -# CONFIG_PATA_SC1200 is not set -# CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_PDC2027X is not set -# CONFIG_PATA_SIL680 is not set -# CONFIG_PATA_SIS is not set -# CONFIG_PATA_VIA is not set -# CONFIG_PATA_WINBOND is not set -# CONFIG_PATA_PLATFORM is not set -CONFIG_PATA_IXP4XX_CF=m -CONFIG_MD=y -CONFIG_BLK_DEV_MD=m -CONFIG_MD_LINEAR=m -CONFIG_MD_RAID0=m -CONFIG_MD_RAID1=m -CONFIG_MD_RAID10=m -CONFIG_MD_RAID456=m -CONFIG_MD_RAID5_RESHAPE=y -CONFIG_MD_MULTIPATH=m -CONFIG_MD_FAULTY=m -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_DEBUG is not set -CONFIG_DM_CRYPT=m -# CONFIG_DM_SNAPSHOT is not set -# CONFIG_DM_MIRROR is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set -# CONFIG_DM_DELAY is not set - -# -# Fusion MPT device support -# -# CONFIG_FUSION is not set -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_FC is not set -# CONFIG_FUSION_SAS is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_FIREWIRE is not set -# CONFIG_IEEE1394 is not set -# CONFIG_I2O is not set -CONFIG_NETDEVICES=y -# CONFIG_NETDEVICES_MULTIQUEUE is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set -# CONFIG_EQUALIZER is not set -CONFIG_TUN=m -# CONFIG_ARCNET is not set -# CONFIG_PHYLIB is not set -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_IXP4XX_ETH=y -# CONFIG_AX88796 is not set -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_SMC91X is not set -# CONFIG_DM9000 is not set -# CONFIG_NET_TULIP is not set -# CONFIG_HP100 is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_FORCEDETH is not set -# CONFIG_DGRS is not set -# CONFIG_EEPRO100 is not set -# CONFIG_E100 is not set -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_SC92031 is not set -CONFIG_NETDEV_1000=y -# CONFIG_ACENIC is not set -# CONFIG_DL2K is not set -# CONFIG_E1000 is not set -# CONFIG_NS83820 is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_R8169 is not set -# CONFIG_SIS190 is not set -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -# CONFIG_SK98LIN is not set -CONFIG_VIA_VELOCITY=m -# CONFIG_TIGON3 is not set -# CONFIG_BNX2 is not set -# CONFIG_QLA3XXX is not set -# CONFIG_ATL1 is not set -# CONFIG_NETDEV_10000 is not set -# CONFIG_TR is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -CONFIG_WLAN_80211=y -# CONFIG_IPW2100 is not set -# CONFIG_IPW2200 is not set -CONFIG_LIBERTAS=m -CONFIG_LIBERTAS_USB=m -# CONFIG_LIBERTAS_DEBUG is not set -# CONFIG_HERMES is not set -# CONFIG_ATMEL is not set -# CONFIG_PRISM54 is not set -CONFIG_USB_ZD1201=m -# CONFIG_HOSTAP is not set -# CONFIG_BCM43XX is not set -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET_MII=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -# CONFIG_USB_NET_RNDIS_HOST is not set -# CONFIG_USB_NET_CDC_SUBSET is not set -CONFIG_USB_NET_ZAURUS=m -# CONFIG_WAN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -CONFIG_PPPOE=m -# CONFIG_PPPOL2TP is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set -CONFIG_NETCONSOLE=m -CONFIG_NETPOLL=y -# CONFIG_NETPOLL_TRAP is not set -CONFIG_NET_POLL_CONTROLLER=y -CONFIG_ISDN=m -# CONFIG_ISDN_I4L is not set -CONFIG_ISDN_CAPI=m -CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y -CONFIG_CAPI_TRACE=y -# CONFIG_ISDN_CAPI_MIDDLEWARE is not set -CONFIG_ISDN_CAPI_CAPI20=m - -# -# CAPI hardware drivers -# -# CONFIG_CAPI_AVM is not set -# CONFIG_CAPI_EICON is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -CONFIG_INPUT_MISC=y -CONFIG_INPUT_IXP4XX_BEEPER=y -CONFIG_INPUT_ATI_REMOTE=m -CONFIG_INPUT_ATI_REMOTE2=m -CONFIG_INPUT_KEYSPAN_REMOTE=m -# CONFIG_INPUT_POWERMATE is not set -CONFIG_INPUT_YEALINK=m -CONFIG_INPUT_UINPUT=m - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -# CONFIG_VT is not set -CONFIG_SERIAL_NONSTANDARD=y -# CONFIG_COMPUTONE is not set -# CONFIG_ROCKETPORT is not set -# CONFIG_CYCLADES is not set -# CONFIG_DIGIEPCA is not set -# CONFIG_MOXA_INTELLIO is not set -# CONFIG_MOXA_SMARTIO is not set -# CONFIG_MOXA_SMARTIO_NEW is not set -# CONFIG_ISI is not set -# CONFIG_SYNCLINKMP is not set -# CONFIG_SYNCLINK_GT is not set -CONFIG_N_HDLC=m -# CONFIG_RISCOM8 is not set -# CONFIG_SPECIALIX is not set -# CONFIG_SX is not set -# CONFIG_RIO is not set -# CONFIG_STALDRV is not set - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_PCI=m -CONFIG_SERIAL_8250_NR_UARTS=2 -CONFIG_SERIAL_8250_RUNTIME_UARTS=2 -# CONFIG_SERIAL_8250_EXTENDED is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set -# CONFIG_IPMI_HANDLER is not set -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_IXP4XX_WATCHDOG=m - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_IXP4XX=y -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -CONFIG_DEVPORT=y -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -CONFIG_I2C_GPIO=y -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_I810 is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_IOP3XX is not set -# CONFIG_I2C_IXP4XX is not set -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_PROSAVAGE is not set -# CONFIG_I2C_SAVAGE4 is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_STUB is not set -CONFIG_I2C_TINY_USB=m -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set -# CONFIG_I2C_VOODOO3 is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set -CONFIG_SENSORS_EEPROM=y -CONFIG_SENSORS_PCF8574=m -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -# CONFIG_SPI is not set -# CONFIG_SPI_MASTER is not set -CONFIG_W1=m - -# -# 1-wire Bus Masters -# -# CONFIG_W1_MASTER_MATROX is not set -CONFIG_W1_MASTER_DS2490=m -CONFIG_W1_MASTER_DS2482=m -# CONFIG_W1_MASTER_DS1WM is not set - -# -# 1-wire Slaves -# -CONFIG_W1_SLAVE_THERM=m -CONFIG_W1_SLAVE_SMEM=m -CONFIG_W1_SLAVE_DS2433=m -CONFIG_W1_SLAVE_DS2433_CRC=y -# CONFIG_W1_SLAVE_DS2760 is not set -CONFIG_HWMON=m -CONFIG_HWMON_VID=m -# CONFIG_SENSORS_ABITUGURU is not set -# CONFIG_SENSORS_ABITUGURU3 is not set -CONFIG_SENSORS_AD7418=m -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1029 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ASB100 is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_FSCHER is not set -# CONFIG_SENSORS_FSCPOS is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_LM93 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_MAX6650 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_PC87427 is not set -# CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_DME1737 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_THMC50 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 is not set -CONFIG_SENSORS_W83781D=m -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83793 is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -# CONFIG_HWMON_DEBUG_CHIP is not set -CONFIG_MISC_DEVICES=y -# CONFIG_PHANTOM is not set -# CONFIG_EEPROM_93CX6 is not set -# CONFIG_SGI_IOC4 is not set -# CONFIG_TIFM_CORE is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_IXP4XX=y -# CONFIG_LEDS_GPIO is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=m -# CONFIG_VIDEO_V4L1 is not set -# CONFIG_VIDEO_V4L1_COMPAT is not set -CONFIG_VIDEO_V4L2=y -CONFIG_VIDEO_CAPTURE_DRIVERS=y -# CONFIG_VIDEO_ADV_DEBUG is not set -CONFIG_VIDEO_HELPER_CHIPS_AUTO=y -CONFIG_VIDEO_VIVI=m -CONFIG_VIDEO_SAA5246A=m -CONFIG_VIDEO_SAA5249=m -# CONFIG_TUNER_TEA5761 is not set -CONFIG_VIDEO_SAA7134=m -# CONFIG_VIDEO_SAA7134_ALSA is not set -CONFIG_VIDEO_HEXIUM_ORION=m -CONFIG_VIDEO_HEXIUM_GEMINI=m -CONFIG_VIDEO_CX88=m -CONFIG_VIDEO_CX88_ALSA=m -# CONFIG_VIDEO_CX88_BLACKBIRD is not set -# CONFIG_VIDEO_CAFE_CCIC is not set -CONFIG_V4L_USB_DRIVERS=y -# CONFIG_VIDEO_PVRUSB2 is not set -# CONFIG_VIDEO_USBVISION is not set -# CONFIG_USB_ET61X251 is not set -# CONFIG_USB_SN9C102 is not set -# CONFIG_USB_ZC0301 is not set -CONFIG_USB_ZR364XX=m -# CONFIG_RADIO_ADAPTERS is not set -# CONFIG_DVB_CORE is not set -CONFIG_VIDEO_SAA7146=m -CONFIG_VIDEO_SAA7146_VV=m -CONFIG_VIDEO_TUNER=m -CONFIG_VIDEO_BUF=m -CONFIG_VIDEO_BTCX=m -CONFIG_VIDEO_IR_I2C=m -CONFIG_VIDEO_IR=m -CONFIG_VIDEO_TVEEPROM=m -# CONFIG_DAB is not set - -# -# Graphics support -# -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -CONFIG_VIDEO_OUTPUT_CONTROL=m -# CONFIG_FB is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# PCI devices -# -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ALS300 is not set -# CONFIG_SND_ALI5451 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AZT3328 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_EMU10K1X is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDA_INTEL is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# ALSA ARM devices -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m -CONFIG_SND_USB_CAIAQ=m -CONFIG_SND_USB_CAIAQ_INPUT=y - -# -# System on Chip audio support -# -# CONFIG_SND_SOC is not set - -# -# SoC Audio support for SuperH -# - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=m -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -CONFIG_USB_HIDDEV=y - -# -# USB HID Boot Protocol drivers -# -CONFIG_USB_KBD=m -CONFIG_USB_MOUSE=m -CONFIG_USB_SUPPORT=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_DEVICE_CLASS is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_SPLIT_ISO=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_UHCI_HCD=m -# CONFIG_USB_U132_HCD is not set -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -CONFIG_USB_STORAGE=y -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -CONFIG_USB_STORAGE_FREECOM=y -# CONFIG_USB_STORAGE_DPCM is not set -CONFIG_USB_STORAGE_USBAT=y -CONFIG_USB_STORAGE_SDDR09=y -CONFIG_USB_STORAGE_SDDR55=y -CONFIG_USB_STORAGE_JUMPSHOT=y -CONFIG_USB_STORAGE_ALAUDA=y -CONFIG_USB_STORAGE_ONETOUCH=y -CONFIG_USB_STORAGE_KARMA=y -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_MON is not set - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_AIRCABLE=m -# CONFIG_USB_SERIAL_AIRPRIME is not set -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_WHITEHEAT=m -CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -CONFIG_USB_SERIAL_CP2101=m -CONFIG_USB_SERIAL_CYPRESS_M8=m -CONFIG_USB_SERIAL_EMPEG=m -CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m -CONFIG_USB_SERIAL_VISOR=m -CONFIG_USB_SERIAL_IPAQ=m -CONFIG_USB_SERIAL_IR=m -CONFIG_USB_SERIAL_EDGEPORT=m -CONFIG_USB_SERIAL_EDGEPORT_TI=m -CONFIG_USB_SERIAL_GARMIN=m -CONFIG_USB_SERIAL_IPW=m -CONFIG_USB_SERIAL_KEYSPAN_PDA=m -CONFIG_USB_SERIAL_KEYSPAN=m -CONFIG_USB_SERIAL_KEYSPAN_MPR=y -CONFIG_USB_SERIAL_KEYSPAN_USA28=y -CONFIG_USB_SERIAL_KEYSPAN_USA28X=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y -CONFIG_USB_SERIAL_KEYSPAN_USA19=y -CONFIG_USB_SERIAL_KEYSPAN_USA18X=y -CONFIG_USB_SERIAL_KEYSPAN_USA19W=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y -CONFIG_USB_SERIAL_KEYSPAN_USA49W=y -CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_MOS7720=m -CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -# CONFIG_USB_SERIAL_OTI6858 is not set -CONFIG_USB_SERIAL_HP4X=m -CONFIG_USB_SERIAL_SAFE=m -# CONFIG_USB_SERIAL_SAFE_PADDED is not set -# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set -CONFIG_USB_SERIAL_TI=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_XIRCOM=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_OMNINET=m -# CONFIG_USB_SERIAL_DEBUG is not set -CONFIG_USB_EZUSB=y - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -CONFIG_USB_ADUTUX=m -# CONFIG_USB_AUERSWALD is not set -CONFIG_USB_RIO500=m -CONFIG_USB_LEGOTOWER=m -CONFIG_USB_LCD=m -CONFIG_USB_BERRY_CHARGE=m -CONFIG_USB_LED=m -# CONFIG_USB_CYPRESS_CY7C63 is not set -CONFIG_USB_CYTHERM=m -CONFIG_USB_PHIDGET=m -CONFIG_USB_PHIDGETKIT=m -CONFIG_USB_PHIDGETMOTORCONTROL=m -CONFIG_USB_PHIDGETSERVO=m -CONFIG_USB_IDMOUSE=m -CONFIG_USB_FTDI_ELAN=m -# CONFIG_USB_APPLEDISPLAY is not set -CONFIG_USB_SISUSBVGA=m -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -# CONFIG_USB_GADGET is not set -# CONFIG_MMC is not set -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -# CONFIG_RTC_DEBUG is not set - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -CONFIG_RTC_DRV_DS1307=y -CONFIG_RTC_DRV_DS1672=y -# CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_RS5C372 is not set -CONFIG_RTC_DRV_ISL1208=y -CONFIG_RTC_DRV_X1205=y -CONFIG_RTC_DRV_PCF8563=y -# CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_M41T80 is not set - -# -# SPI RTC drivers -# - -# -# Platform RTC drivers -# -# CONFIG_RTC_DRV_CMOS is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_STK17TA8 is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_M48T59 is not set -# CONFIG_RTC_DRV_V3020 is not set - -# -# on-CPU RTC drivers -# - -# -# DMA Engine support -# -# CONFIG_DMA_ENGINE is not set - -# -# DMA Clients -# - -# -# DMA Devices -# - -# -# File systems -# -CONFIG_EXT2_FS=m -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=m -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -CONFIG_FUSE_FS=m - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_UDF_FS=m -CONFIG_UDF_NLS=y - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m -# CONFIG_NTFS_DEBUG is not set -CONFIG_NTFS_RW=y - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -# CONFIG_NFS_V3_ACL is not set -CONFIG_NFS_V4=y -# CONFIG_NFS_DIRECTIO is not set -CONFIG_NFSD=m -CONFIG_NFSD_V3=y -# CONFIG_NFSD_V3_ACL is not set -CONFIG_NFSD_V4=y -CONFIG_NFSD_TCP=y -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=m -CONFIG_SUNRPC_GSS=m -CONFIG_SUNRPC_BIND34=y -CONFIG_RPCSEC_GSS_KRB5=m -# CONFIG_RPCSEC_GSS_SPKM3 is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -# CONFIG_CIFS_WEAK_PW_HASH is not set -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_KARMA_PARTITION is not set -# CONFIG_EFI_PARTITION is not set -# CONFIG_SYSV68_PARTITION is not set - -# -# Native Language Support -# -CONFIG_NLS=m -CONFIG_NLS_DEFAULT="utf8" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_MUST_CHECK=y -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -# CONFIG_DEBUG_KERNEL is not set -# CONFIG_DEBUG_BUGVERBOSE is not set -CONFIG_FRAME_POINTER=y -# CONFIG_DEBUG_USER is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set -CONFIG_XOR_BLOCKS=m -CONFIG_ASYNC_CORE=m -CONFIG_ASYNC_MEMCPY=m -CONFIG_ASYNC_XOR=m -CONFIG_CRYPTO=y -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_BLKCIPHER=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_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_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_CAMELLIA=m -# CONFIG_CRYPTO_TEST is not set -CONFIG_CRYPTO_HW=y - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=y -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y -CONFIG_TEXTSEARCH=y -CONFIG_TEXTSEARCH_KMP=m -CONFIG_TEXTSEARCH_BM=m -CONFIG_TEXTSEARCH_FSM=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y -- cgit v1.2.3 From baaba6900900fe9815089d25270665899e2576a6 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 5 Feb 2008 09:17:01 +0000 Subject: h5000.conf: Ship BT module. * Fixes #3549 * Based on the patch by Michal Panczyk --- conf/machine/h5000.conf | 1 + packages/tasks/task-base.bb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/machine/h5000.conf b/conf/machine/h5000.conf index 1f29438061..e795395534 100644 --- a/conf/machine/h5000.conf +++ b/conf/machine/h5000.conf @@ -27,6 +27,7 @@ EXTRA_IMAGECMD_jffs2 = "-e 0x40000 -p ; echo '${IMAGE_NAME} ${IMAGE_NAME}.rootf MACHINE_EXTRA_RDEPENDS = "kernel ipaq-boot-params" MACHINE_EXTRA_RRECOMMENDS = " kernel-module-h5400-lcd \ kernel-module-h5400-battery \ + kernel-module-h5400-bt \ kernel-module-snd-soc-h5000 \ kernel-module-i2c-pxa" diff --git a/packages/tasks/task-base.bb b/packages/tasks/task-base.bb index f8a94c63b2..b5b3e82f70 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 = "r59" +PR = "r60" inherit task -- cgit v1.2.3 From d98440b8c964112c6e0e20b4f944d3a0e3c7a0dd Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 5 Feb 2008 11:15:50 +0000 Subject: opkg_svn.bb : The Open Package Manager, a fork of ipkg actively developed with OE patches already incorporated and new features being add like signed feeds. --- packages/opkg/.mtn2git_empty | 0 packages/opkg/opkg_svn.bb | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 packages/opkg/.mtn2git_empty create mode 100644 packages/opkg/opkg_svn.bb diff --git a/packages/opkg/.mtn2git_empty b/packages/opkg/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/opkg/opkg_svn.bb b/packages/opkg/opkg_svn.bb new file mode 100644 index 0000000000..0c6f5c5e58 --- /dev/null +++ b/packages/opkg/opkg_svn.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "Open Package Manager" +DESCRIPTION_libipkg = "Open Package Manager Library" +SECTION = "base" +LICENSE = "GPL" +DEPENDS = "curl" +SRC_URI = "svn://svn.openmoko.org/trunk/src/target/;module=opkg;proto=http" + +S = "${WORKDIR}/opkg" + +inherit autotools pkgconfig + +do_stage() { + oe_libinstall -so libopkg ${STAGING_LIBDIR} + install -d ${STAGING_INCDIR}/libopkg/ + for f in *.h + do + install -m 0644 $f ${STAGING_INCDIR}/libopkg/ + done +} + +PACKAGES =+ "libopkg-dev libopkg" + +FILES_libopkg-dev = "${libdir}/*.a ${libdir}/*.la ${libdir}/*.so" +FILES_libopkg = "${libdir}/*.so.*" + -- cgit v1.2.3 From 6c3b2e0284c23a22de92aa39799d2e3f6fba146c Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 5 Feb 2008 11:28:11 +0000 Subject: opkg_svn.bb : fix the DEPENDS --- packages/opkg/opkg_svn.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opkg/opkg_svn.bb b/packages/opkg/opkg_svn.bb index 0c6f5c5e58..21f0ba582d 100644 --- a/packages/opkg/opkg_svn.bb +++ b/packages/opkg/opkg_svn.bb @@ -2,7 +2,7 @@ DESCRIPTION = "Open Package Manager" DESCRIPTION_libipkg = "Open Package Manager Library" SECTION = "base" LICENSE = "GPL" -DEPENDS = "curl" +DEPENDS = "curl gpgme pth" SRC_URI = "svn://svn.openmoko.org/trunk/src/target/;module=opkg;proto=http" S = "${WORKDIR}/opkg" -- cgit v1.2.3 From 5cc306304e3cdf45208f8360261ad84c3221ed99 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 5 Feb 2008 11:56:37 +0000 Subject: opkg_svn.bb : remember to set PV and update (in)sane-srrevs.inc --- conf/distro/include/insane-srcrevs.inc | 1 + conf/distro/include/sane-srcrevs.inc | 1 + packages/opkg/opkg_svn.bb | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/distro/include/insane-srcrevs.inc b/conf/distro/include/insane-srcrevs.inc index e039a144d3..249fa0e027 100644 --- a/conf/distro/include/insane-srcrevs.inc +++ b/conf/distro/include/insane-srcrevs.inc @@ -81,6 +81,7 @@ SRCREV_pn-openmoko-today2-folders ?= "${AUTOREV}" SRCREV_pn-openmoko-worldclock2 ?= "${AUTOREV}" SRCREV_pn-openocd ?= "${AUTOREV}" SRCREV_pn-openocd-native ?= "${AUTOREV}" +SRCREV_pn-opkg ?= "${AUTOREV}" SRCREV_pn-psplash ?= "${AUTOREV}" SRCREV_pn-settings-daemon ?= "${AUTOREV}" SRCREV_pn-sjf2410-linux-native ?= "${AUTOREV}" diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index ce8555bf1c..f588179e19 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -118,6 +118,7 @@ SRCREV_pn-openmoko-toolchain-scripts ?= "3767" SRCREV_pn-openmoko-worldclock2 ?= "3365" SRCREV_pn-openocd ?= "206" SRCREV_pn-openocd-native ?= "206" +SRCREV_pn-opkg ?= "4017" SRCREV_pn-oprofileui ?= "160" SRCREV_pn-psplash ?= "249" SRCREV_pn-python-formencode = "3148" diff --git a/packages/opkg/opkg_svn.bb b/packages/opkg/opkg_svn.bb index 21f0ba582d..51c83f8968 100644 --- a/packages/opkg/opkg_svn.bb +++ b/packages/opkg/opkg_svn.bb @@ -2,7 +2,8 @@ DESCRIPTION = "Open Package Manager" DESCRIPTION_libipkg = "Open Package Manager Library" SECTION = "base" LICENSE = "GPL" -DEPENDS = "curl gpgme pth" +DEPENDS = "curl gpgme" +PV = "0.0+svnr${SRCREV}" SRC_URI = "svn://svn.openmoko.org/trunk/src/target/;module=opkg;proto=http" S = "${WORKDIR}/opkg" -- cgit v1.2.3 From aafc19e52f4331103d00fcd33fa425168137ce27 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 5 Feb 2008 12:21:55 +0000 Subject: opkg-native_svn.bb : opkg native version for brave people who want to try and build images with opkg. --- conf/distro/include/insane-srcrevs.inc | 1 + conf/distro/include/sane-srcrevs.inc | 3 ++- packages/opkg/opkg-native_svn.bb | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 packages/opkg/opkg-native_svn.bb diff --git a/conf/distro/include/insane-srcrevs.inc b/conf/distro/include/insane-srcrevs.inc index 249fa0e027..0f7e82ef43 100644 --- a/conf/distro/include/insane-srcrevs.inc +++ b/conf/distro/include/insane-srcrevs.inc @@ -82,6 +82,7 @@ SRCREV_pn-openmoko-worldclock2 ?= "${AUTOREV}" SRCREV_pn-openocd ?= "${AUTOREV}" SRCREV_pn-openocd-native ?= "${AUTOREV}" SRCREV_pn-opkg ?= "${AUTOREV}" +SRCREV_pn-opkg-native ?= "${AUTOREV}" SRCREV_pn-psplash ?= "${AUTOREV}" SRCREV_pn-settings-daemon ?= "${AUTOREV}" SRCREV_pn-sjf2410-linux-native ?= "${AUTOREV}" diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index f588179e19..f46c954636 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -118,7 +118,8 @@ SRCREV_pn-openmoko-toolchain-scripts ?= "3767" SRCREV_pn-openmoko-worldclock2 ?= "3365" SRCREV_pn-openocd ?= "206" SRCREV_pn-openocd-native ?= "206" -SRCREV_pn-opkg ?= "4017" +SRCREV_pn-opkg ?= "4019" +SRCREV_pn-opkg-native ?= "4019" SRCREV_pn-oprofileui ?= "160" SRCREV_pn-psplash ?= "249" SRCREV_pn-python-formencode = "3148" diff --git a/packages/opkg/opkg-native_svn.bb b/packages/opkg/opkg-native_svn.bb new file mode 100644 index 0000000000..2215a5798c --- /dev/null +++ b/packages/opkg/opkg-native_svn.bb @@ -0,0 +1,8 @@ +require opkg_svn.bb + +target_libdir := "${libdir}" + +inherit native + +EXTRA_OECONF += "--with-opkglibdir=${target_libdir}/opkg -disable-gpg" + -- cgit v1.2.3 From ba1f922665354b80da5e8636097cafaa7b2f91ee Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 5 Feb 2008 12:54:12 +0000 Subject: opie-ttf-support: add 02qtttffont-update and move everything possible from the bb file there * improves readability and robustness * closes 3720 together with e25947a6e6d2be708fd836b7d5209a3d074a28a5 from xjqian --- packages/opie-ttf-support/files/02qtttffont-update | 6 ++++++ packages/opie-ttf-support/opie-ttf-support_1.1.bb | 19 ++++++------------- 2 files changed, 12 insertions(+), 13 deletions(-) create mode 100644 packages/opie-ttf-support/files/02qtttffont-update diff --git a/packages/opie-ttf-support/files/02qtttffont-update b/packages/opie-ttf-support/files/02qtttffont-update new file mode 100644 index 0000000000..8f8058faea --- /dev/null +++ b/packages/opie-ttf-support/files/02qtttffont-update @@ -0,0 +1,6 @@ +#!/bin/sh +# Author: Rolf Leggewie + +mkdir -p @@PALMTOPDIR@@/lib/fonts + +@@SBINDIR@@/update-qtttffontdir @@DATADIR@@/fonts/truetype > @@PALMTOPDIR@@/lib/fonts/fontdir diff --git a/packages/opie-ttf-support/opie-ttf-support_1.1.bb b/packages/opie-ttf-support/opie-ttf-support_1.1.bb index c6ed53ffbd..18ce7ac0c9 100644 --- a/packages/opie-ttf-support/opie-ttf-support_1.1.bb +++ b/packages/opie-ttf-support/opie-ttf-support_1.1.bb @@ -1,9 +1,10 @@ DESCRIPTION = "Meta-package for Opie TTF support" SECTION = "opie/fonts" DEPENDS = "freetype" -PR = "r4" +PR = "r5" -SRC_URI = "file://update-qtttffontdir.c" +SRC_URI = "file://update-qtttffontdir.c \ + file://02qtttffont-update" S = "${WORKDIR}" do_compile() { @@ -11,23 +12,15 @@ do_compile() { } do_install() { - - echo " -#!/bin/sh -# Author: Rolf Leggewie - -${sbindir}/update-qtttffontdir ${datadir}/fonts/truetype > ${palmtopdir}/lib/fonts/fontdir -" > ${WORKDIR}/02qtttffont-update - install -d ${D}${sbindir} install -d ${D}${sysconfdir}/update-fonts-common.d/ install -m 0755 update-qtttffontdir ${D}${sbindir} install -m 0755 02qtttffont-update ${D}${sysconfdir}/update-fonts-common.d/ + sed -i 's!@@SBINDIR@@!${sbindir}!g' ${D}${sysconfdir}/update-fonts-common.d/02qtttffont-update + sed -i 's!@@PALMTOPDIR@@!${palmtopdir}!g' ${D}${sysconfdir}/update-fonts-common.d/02qtttffont-update + sed -i 's!@@DATADIR@@!${datadir}!g' ${D}${sysconfdir}/update-fonts-common.d/02qtttffont-update } pkg_postinst() { - if ! [ -d ${palmtopdir}/lib/fonts ]; then - mkdir -p ${palmtopdir}/lib/fonts - fi ${sysconfdir}/update-fonts-common.d/02qtttffont-update } -- cgit v1.2.3 From a6cb5bd05e3969f966ba2d43cac7ef85307769d8 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 5 Feb 2008 14:36:17 +0000 Subject: gpgme_1.1.4.bb : improve packaging, gpgme-config moved to -dev package --- packages/gpgme/gpgme_1.1.4.bb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/gpgme/gpgme_1.1.4.bb b/packages/gpgme/gpgme_1.1.4.bb index d78cc88cef..e51fca90b9 100644 --- a/packages/gpgme/gpgme_1.1.4.bb +++ b/packages/gpgme/gpgme_1.1.4.bb @@ -1,6 +1,6 @@ LICENSE = "GPL" SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-${PV}.tar.bz2" -PR = "r1" +PR = "r2" DEPENDS = "libgpg-error pth libassuan" @@ -20,3 +20,8 @@ do_stage() { install -m 0644 gpgme/gpgme.m4 ${STAGING_DATADIR}/aclocal/ } +FILES_${PN} = "${libdir}/libgpgme*.so.*" +FILES_${PN}-dev += "${bindir}/gpgme-config" + +LEAD_SONAME = "libgpgme" + -- cgit v1.2.3 From 55fe052dcad7c194336adf5110aace80213f752e Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 5 Feb 2008 15:05:05 +0000 Subject: add gst-plugin-pulse 0.9.7 (to go w/ PA 0.9.8 and later), DP = -1 --- packages/gstreamer/gst-plugin-pulse_0.9.7.bb | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 packages/gstreamer/gst-plugin-pulse_0.9.7.bb diff --git a/packages/gstreamer/gst-plugin-pulse_0.9.7.bb b/packages/gstreamer/gst-plugin-pulse_0.9.7.bb new file mode 100644 index 0000000000..a1e321c73e --- /dev/null +++ b/packages/gstreamer/gst-plugin-pulse_0.9.7.bb @@ -0,0 +1,30 @@ +DESCRIPTION = "GStreamer plugin for using pulse audio as sink and source" +HOMEPAGE = "http://0pointer.de/lennart/projects/gst-pulse/" +LICENSE = "GPL" +DEPENDS = "gstreamer pulseaudio" +PR = "r0" + +DEFAULT_PREFERENCE = "-1" + +SRC_URI = "http://0pointer.de/lennart/projects/gst-pulse/gst-pulse-${PV}.tar.gz" +S = "${WORKDIR}/gst-pulse-${PV}" + +inherit autotools + +EXTRA_OECONF = "--disable-lynx" +GST_LIBV = 0.10 + +do_install() { + install -d ${D}${libdir}/gstreamer-${GST_LIBV}/ + install -m 0755 src/.libs/libgstpulse.so ${D}${libdir}/gstreamer-${GST_LIBV} +} + +export GST_MODDIR=${libdir}/gstreamer-0.10 + +FILES_${PN} = "${libdir}/gstreamer-0.10/libgstpulse.so" +FILES_${PN}-dev = "\ + ${libdir}/gstreamer-0.10/libgstpulse.a \ + ${libdir}/gstreamer-0.10/libgstpulse.la \ + ${libdir}/gstreamer-0.10/libgstpulse.so*" +FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug" + -- cgit v1.2.3 From 0d444e0c7756f80a0dcfec73a18a77293baaf1bc Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 5 Feb 2008 15:16:18 +0000 Subject: angstrom-2007-preferred-versions.inc : renamed for openmoko as its only really been left in OE for that use. angstrom-2007-for-openmoko-versions.inc --- .../angstrom-2007-for-openmoko-versions.inc | 2131 ++++++++++++++++++++ conf/distro/include/angstrom-2007-for-openmoko.inc | 2 +- .../include/angstrom-2007-preferred-versions.inc | 2131 -------------------- 3 files changed, 2132 insertions(+), 2132 deletions(-) create mode 100644 conf/distro/include/angstrom-2007-for-openmoko-versions.inc delete mode 100644 conf/distro/include/angstrom-2007-preferred-versions.inc diff --git a/conf/distro/include/angstrom-2007-for-openmoko-versions.inc b/conf/distro/include/angstrom-2007-for-openmoko-versions.inc new file mode 100644 index 0000000000..d712fadb8c --- /dev/null +++ b/conf/distro/include/angstrom-2007-for-openmoko-versions.inc @@ -0,0 +1,2131 @@ +# This is a lock-down file for stability purposes +# If you change anything, send a mail to angstrom-distro-devel@linuxtogo.org +# stating the change and the reason. + +# bitbake -s | awk '{print "PREFERRED_VERSION_" $1 "=" $2}' | sed -e s:\+:\=:g | awk -F "=" '{print $1 " ?= \" "$2}' | awk -F "-r" '{print $1"\""}' | sed -e s,0:,,g -e s,1:,,g | sed s:\"\ :\":g> /tmp/angstrom-2007-preferred-versions.inc + +PREFERRED_VERSION_0xffff ?= "0.2" +PREFERRED_VERSION_0xffff-native ?= "0.2" +PREFERRED_VERSION_aalib ?= "1.4rc5" +PREFERRED_VERSION_abiword ?= "2.5.2" +PREFERRED_VERSION_abiword-embedded ?= "2.5.2" +PREFERRED_VERSION_abiword-plugins ?= "2.5.2" +PREFERRED_VERSION_abuse ?= "0.7.0" +PREFERRED_VERSION_acpid ?= "1.0.4" +PREFERRED_VERSION_acx-firmware ?= "1.0" +PREFERRED_VERSION_addressbook ?= "0.1" +PREFERRED_VERSION_adns ?= "1.0" +PREFERRED_VERSION_agg ?= "2.5" +PREFERRED_VERSION_aircrack ?= "2.41" +PREFERRED_VERSION_aircrack-ng ?= "0.9.1" +PREFERRED_VERSION_albumshaper ?= "2.1" +PREFERRED_VERSION_aliens ?= "1.0.0" +PREFERRED_VERSION_aliens-qt ?= "1.0.0" +PREFERRED_VERSION_alsa-lib ?= "1.0.15" +PREFERRED_VERSION_alsa-oss ?= "1.0.15" +PREFERRED_VERSION_alsa-plugins ?= "1.0.14" +PREFERRED_VERSION_alsa-state ?= "0.1.0" +PREFERRED_VERSION_alsa-utils ?= "1.0.15" +PREFERRED_VERSION_anthy ?= "7811" +PREFERRED_VERSION_anthy-native ?= "7811" +PREFERRED_VERSION_antlr ?= "2.7.5" +PREFERRED_VERSION_antlr-native ?= "2.7.5" +PREFERRED_VERSION_apache2 ?= "2.2.3" +PREFERRED_VERSION_apache2-native ?= "2.2.3" +PREFERRED_VERSION_apex-env ?= "1.5.8" +PREFERRED_VERSION_apex-nslu2 ?= "1.5.8" +PREFERRED_VERSION_apex-nslu2-16mb ?= "1.5.8" +PREFERRED_VERSION_apmd ?= "3.2.2" +PREFERRED_VERSION_applewmproto ?= "1.0.3" +PREFERRED_VERSION_appres ?= "1.0.1" +PREFERRED_VERSION_appweb ?= "2.0.4" +PREFERRED_VERSION_apr ?= "1.2.7" +PREFERRED_VERSION_apr-util ?= "1.2.7" +PREFERRED_VERSION_apt ?= "0.7.3" +PREFERRED_VERSION_apt-native ?= "0.7.3" +PREFERRED_VERSION_argtable ?= "2.7" +PREFERRED_VERSION_ark3116 ?= "0.4.1" +PREFERRED_VERSION_arpwatch ?= "2.1a15" +PREFERRED_VERSION_aspell ?= "0.60.5" +PREFERRED_VERSION_aspell-native ?= "0.60.5" +PREFERRED_VERSION_asterisk ?= "1.4.10" +PREFERRED_VERSION_asterisk-sounds ?= "1.2.1" +PREFERRED_VERSION_at ?= "3.1.8" +PREFERRED_VERSION_atd ?= "0.70" +PREFERRED_VERSION_atftp ?= "0.7" +PREFERRED_VERSION_atk ?= "1.20.0" +PREFERRED_VERSION_atmelwlandriver ?= "3.4.1.0" +PREFERRED_VERSION_atomic ?= "1.0.1" +PREFERRED_VERSION_audiofile ?= "0.2.6" +PREFERRED_VERSION_audioplayer ?= "1.0" +PREFERRED_VERSION_aumix ?= "2.8" +PREFERRED_VERSION_autoconf ?= "2.61" +PREFERRED_VERSION_autoconf-native ?= "2.61" +PREFERRED_VERSION_autofs ?= "4.1.4" +PREFERRED_VERSION_automake ?= "1.9.6" +PREFERRED_VERSION_automake-native ?= "1.9.6" +PREFERRED_VERSION_avahi ?= "0.6.21" +PREFERRED_VERSION_avahi-python ?= "0.6.21" +PREFERRED_VERSION_avahi-ui ?= "0.6.21" +PREFERRED_VERSION_avetanabt ?= "20060413" +PREFERRED_VERSION_bacula-client ?= "1.38.11" +PREFERRED_VERSION_balsa ?= "2.0.17" +PREFERRED_VERSION_base-files ?= "3.0.14" +PREFERRED_VERSION_base-passwd ?= "3.5.9" +PREFERRED_VERSION_bash ?= "3.2" +PREFERRED_VERSION_bash-completion ?= "20040711" +PREFERRED_VERSION_bazaar ?= "1.2" +PREFERRED_VERSION_bb ?= "1.2" +PREFERRED_VERSION_bc ?= "1.06" +PREFERRED_VERSION_bdftopcf ?= "1.0.1" +PREFERRED_VERSION_beecrypt ?= "3.1.0" +PREFERRED_VERSION_beecrypt-native ?= "3.1.0" +PREFERRED_VERSION_beep ?= "1.2.2" +PREFERRED_VERSION_beepmp ?= "0.9.7" +PREFERRED_VERSION_beforelight ?= "1.0.2" +PREFERRED_VERSION_benchfft ?= "3.1" +PREFERRED_VERSION_bigreqsproto ?= "1.0.2" +PREFERRED_VERSION_bigreqsproto-native ?= "1.0.2" +PREFERRED_VERSION_billiardz ?= "0.1.4" +PREFERRED_VERSION_bind ?= "9.3.4-P1" +PREFERRED_VERSION_bing ?= "1.1.3" +PREFERRED_VERSION_binutils ?= "2.18" +PREFERRED_VERSION_binutils-cross ?= "2.18" +PREFERRED_VERSION_binutils-cross-sdk ?= "2.18" +PREFERRED_VERSION_bison ?= "2.0" +PREFERRED_VERSION_bison-native ?= "2.0" +PREFERRED_VERSION_bitbake ?= "1.8.6" +PREFERRED_VERSION_bitchx ?= "1.1" +PREFERRED_VERSION_bluesnarfer ?= "0.1" +PREFERRED_VERSION_bluez-cups-backend ?= "3.23" +PREFERRED_VERSION_bluez-dtl1-workaround ?= "1.0" +PREFERRED_VERSION_bluez-gnome ?= "0.14" +PREFERRED_VERSION_bluez-gstreamer-plugin ?= "3.23" +PREFERRED_VERSION_bluez-hcidump ?= "1.38" +PREFERRED_VERSION_bluez-libs ?= "3.23" +PREFERRED_VERSION_bluez-utils ?= "3.23" +PREFERRED_VERSION_bluez-utils-alsa ?= "3.23" +PREFERRED_VERSION_bmon ?= "2.1.0" +PREFERRED_VERSION_boa ?= "0.94.13" +PREFERRED_VERSION_bochs ?= "2.1" +PREFERRED_VERSION_bogofilter ?= "0.96.0" +PREFERRED_VERSION_boost ?= "1.33.1" +PREFERRED_VERSION_boost-asio ?= "0.3.7" +PREFERRED_VERSION_boost-jam-native ?= "3.1.11" +PREFERRED_VERSION_bootchart ?= "0.9" +PREFERRED_VERSION_bootmenu ?= "0.7" +PREFERRED_VERSION_bootsplash ?= "3.0.7" +PREFERRED_VERSION_bootsplash-native ?= "3.0.7" +PREFERRED_VERSION_brickout ?= "2002.06.09" +PREFERRED_VERSION_brutefir ?= "1.0i" +PREFERRED_VERSION_bt950-cs ?= "0.1" +PREFERRED_VERSION_btscanner ?= "2.0" +PREFERRED_VERSION_btsco ?= "0.42" +PREFERRED_VERSION_btsco-module ?= "0.42" +PREFERRED_VERSION_btxml ?= "1.0" +PREFERRED_VERSION_busybox ?= "1.2.1" +PREFERRED_VERSION_busybox-static ?= "1.2.1" +PREFERRED_VERSION_bvi ?= "1.3.1" +PREFERRED_VERSION_bwmon ?= "1.3" +PREFERRED_VERSION_bzflag ?= "1.10.6.20040515" +PREFERRED_VERSION_bzflag-server ?= "1.10.6.20040515" +PREFERRED_VERSION_bzip2 ?= "1.0.2" +PREFERRED_VERSION_c-ares ?= "1.3.0" +PREFERRED_VERSION_cacao-cldc ?= "0.98" +PREFERRED_VERSION_cacaoh-cldc-native ?= "0.98" +PREFERRED_VERSION_cairo ?= "1.4.10" +PREFERRED_VERSION_cairo-directfb ?= "1.4.8" +PREFERRED_VERSION_cairomm ?= "1.2.4" +PREFERRED_VERSION_calendar ?= "1.0" +PREFERRED_VERSION_came ?= "1.7" +PREFERRED_VERSION_camera-assistant ?= "0.2.0" +PREFERRED_VERSION_camsource ?= "0.7.0" +PREFERRED_VERSION_cbrpager ?= "0.9.14" +PREFERRED_VERSION_ccache ?= "2.4" +PREFERRED_VERSION_cccc ?= "3.pre84" +PREFERRED_VERSION_ccdv ?= "1.0" +PREFERRED_VERSION_ccdv-native ?= "1.0" +PREFERRED_VERSION_ccxstream ?= "1.0.15" +PREFERRED_VERSION_cdparanoia ?= "9.8alpha" +PREFERRED_VERSION_cdrtools-native ?= "2.01" +PREFERRED_VERSION_cdstatus ?= "0.96.05" +PREFERRED_VERSION_cdtool ?= "2.1.8" +PREFERRED_VERSION_cdump-native ?= "1.0" +PREFERRED_VERSION_centericq ?= "4.11.0" +PREFERRED_VERSION_cetools ?= "0.3" +PREFERRED_VERSION_cetools-native ?= "0.3" +PREFERRED_VERSION_cflow ?= "2.0" +PREFERRED_VERSION_cfu1-modules ?= "2.6" +PREFERRED_VERSION_check ?= "0.9.2" +PREFERRED_VERSION_checkers ?= "1.0.5ern" +PREFERRED_VERSION_cherokee ?= "0.5.5" +PREFERRED_VERSION_cherokee-nossl ?= "0.5.3" +PREFERRED_VERSION_chillispot ?= "1.0RC3" +PREFERRED_VERSION_chkhinge ?= "20040706" +PREFERRED_VERSION_chmlib ?= "0.38" +PREFERRED_VERSION_chrpath ?= "0.13" +PREFERRED_VERSION_chrpath-native ?= "0.13" +PREFERRED_VERSION_ckermit ?= "211" +PREFERRED_VERSION_clamav ?= "0.91.1" +PREFERRED_VERSION_clamsmtp ?= "1.8" +PREFERRED_VERSION_classpath ?= "0.20" +PREFERRED_VERSION_classpath-gtk ?= "0.93" +PREFERRED_VERSION_classpath-minimal ?= "0.95" +PREFERRED_VERSION_classpath-minimal-native ?= "0.95" +PREFERRED_VERSION_clearsilver ?= "0.10.3" +PREFERRED_VERSION_clish ?= "0.7.1" +PREFERRED_VERSION_cmake-native ?= "2.4.7" +PREFERRED_VERSION_cms92init ?= "0.1" +PREFERRED_VERSION_compositeproto ?= "0.4" +PREFERRED_VERSION_comprec ?= "0.02" +PREFERRED_VERSION_confuse ?= "2.5" +PREFERRED_VERSION_confuse-native ?= "2.5" +PREFERRED_VERSION_connect ?= "0.1" +PREFERRED_VERSION_conserver ?= "8.1.14" +PREFERRED_VERSION_console-tools ?= "0.3.2" +PREFERRED_VERSION_contacts ?= "0.7" +PREFERRED_VERSION_coreutils ?= "5.3.0" +PREFERRED_VERSION_coreutils-native ?= "5.3.0" +PREFERRED_VERSION_corkscrew ?= "2.0" +PREFERRED_VERSION_corsair ?= "0.2.6" +PREFERRED_VERSION_cpio ?= "2.5" +PREFERRED_VERSION_cppunit ?= "1.10.2" +PREFERRED_VERSION_cpuburn ?= "1.4" +PREFERRED_VERSION_cpufreqd ?= "1.1.2" +PREFERRED_VERSION_cpusage ?= "0.2" +PREFERRED_VERSION_cpuspeed ?= "1.1" +PREFERRED_VERSION_cramfs ?= "1.1" +PREFERRED_VERSION_cramfs-native ?= "1.1" +PREFERRED_VERSION_crimsonfields ?= "0.4.8" +PREFERRED_VERSION_crimsonfields-native ?= "0.4.8" +PREFERRED_VERSION_cron ?= "3.0pl1" +PREFERRED_VERSION_cross-linkage ?= "1.0" +PREFERRED_VERSION_crossword ?= "0.0.3" +PREFERRED_VERSION_cscope ?= "15.5" +PREFERRED_VERSION_ctags-native ?= "5.5.4" +PREFERRED_VERSION_ctorrent ?= "1.3.4" +PREFERRED_VERSION_ctrlproxy ?= "2.6.2" +PREFERRED_VERSION_cumulus ?= "1.2.1" +PREFERRED_VERSION_cups ?= "1.2.12" +PREFERRED_VERSION_curl ?= "7.16.4" +PREFERRED_VERSION_curl-native ?= "7.16.4" +PREFERRED_VERSION_custominput ?= "1.1.0" +PREFERRED_VERSION_cvs ?= "1.12.9" +PREFERRED_VERSION_cxcrypt ?= "1.0" +PREFERRED_VERSION_cyrus-imapd ?= "2.2.12" +PREFERRED_VERSION_cyrus-sasl ?= "2.1.19" +PREFERRED_VERSION_damageext ?= "1.0" +PREFERRED_VERSION_damageproto ?= "1.1.0" +PREFERRED_VERSION_dash ?= "0.5.2" +PREFERRED_VERSION_dasher-gpe ?= "0.0cvs20040828" +PREFERRED_VERSION_dates ?= "0.4.4" +PREFERRED_VERSION_davfs2 ?= "0.2.8" +PREFERRED_VERSION_db ?= "4.3.29" +PREFERRED_VERSION_db-native ?= "4.3.29" +PREFERRED_VERSION_db3 ?= "3.2.9" +PREFERRED_VERSION_db3-native ?= "3.2.9" +PREFERRED_VERSION_dbench ?= "3.04" +PREFERRED_VERSION_dbh ?= "1.0-18" +PREFERRED_VERSION_dbus ?= "1.0.2" +PREFERRED_VERSION_dbus-glib ?= "0.74" +PREFERRED_VERSION_dbus-glib-native ?= "0.74" +PREFERRED_VERSION_dbus-native ?= "1.0.1" +PREFERRED_VERSION_dbus-python ?= "0.71" +PREFERRED_VERSION_dcetest ?= "1.2" +PREFERRED_VERSION_dcopidl-native ?= "3.5.4" +PREFERRED_VERSION_dcopidl2cpp-native ?= "3.5.4" +PREFERRED_VERSION_dcron ?= "2.3.3" +PREFERRED_VERSION_ddclient ?= "3.6.3" +PREFERRED_VERSION_debianutils ?= "2.19" +PREFERRED_VERSION_dejagnu ?= "1.4.4" +PREFERRED_VERSION_dejagnu-native ?= "1.4.4" +PREFERRED_VERSION_detect-stylus ?= "0.13" +PREFERRED_VERSION_device-mapper ?= "1.01.05" +PREFERRED_VERSION_devimage ?= "0.1" +PREFERRED_VERSION_devimage-image ?= "1.0" +PREFERRED_VERSION_devio ?= "1.2" +PREFERRED_VERSION_devio-native ?= "1.2" +PREFERRED_VERSION_devlabel ?= "0.48.01" +PREFERRED_VERSION_devmem2 ?= "1.0" +PREFERRED_VERSION_devshell ?= "1.0" +PREFERRED_VERSION_dgen-sdl ?= "1.23" +PREFERRED_VERSION_dhcdbd ?= "2.0" +PREFERRED_VERSION_dhclient ?= "2.0pl5" +PREFERRED_VERSION_dhcp ?= "3.0.2" +PREFERRED_VERSION_dhcp-forwarder ?= "0.7" +PREFERRED_VERSION_dhcpcd ?= "1.3.22-pl4" +PREFERRED_VERSION_didiwiki ?= "0.5" +PREFERRED_VERSION_diet-x11 ?= "1.1.3" +PREFERRED_VERSION_diethotplug ?= "0.4" +PREFERRED_VERSION_diffstat ?= "1.39" +PREFERRED_VERSION_diffutils ?= "2.8.1" +PREFERRED_VERSION_dillo ?= "0.8.6" +PREFERRED_VERSION_dillo2 ?= "0.6.6" +PREFERRED_VERSION_dircproxy ?= "1.1.0" +PREFERRED_VERSION_directfb ?= "1.1.0" +PREFERRED_VERSION_directfb-examples ?= "1.0.0" +PREFERRED_VERSION_display-brightness ?= "1.0.0" +PREFERRED_VERSION_distcc ?= "2.18.3" +PREFERRED_VERSION_djvulibre ?= "3.5.19" +PREFERRED_VERSION_dmxproto ?= "2.2.2" +PREFERRED_VERSION_dnsmasq ?= "2.38" +PREFERRED_VERSION_docbook-utils ?= "0.6.13" +PREFERRED_VERSION_docbook-utils-native ?= "0.6.13" +PREFERRED_VERSION_dosbox ?= "0.70" +PREFERRED_VERSION_dosfstools ?= "2.11" +PREFERRED_VERSION_dosfstools-native ?= "2.10" +PREFERRED_VERSION_dpkg ?= "1.13.25" +PREFERRED_VERSION_dpkg-native ?= "1.13.25" +PREFERRED_VERSION_driftnet ?= "0.1.6" +PREFERRED_VERSION_driftnet-nogui ?= "0.1.6" +PREFERRED_VERSION_dropbear ?= "0.49" +PREFERRED_VERSION_dsniff ?= "2.3" +PREFERRED_VERSION_duma ?= "2.5.7" +PREFERRED_VERSION_dvb-image ?= "1.0" +PREFERRED_VERSION_dvbtraffic ?= "0.0cvs20060814" +PREFERRED_VERSION_dviviewer ?= "1.0.2" +PREFERRED_VERSION_e-uae ?= "0.8.28" +PREFERRED_VERSION_e-wm ?= "0.16.999.041" +PREFERRED_VERSION_e2fsprogs ?= "1.38" +PREFERRED_VERSION_e2fsprogs-libs ?= "1.39" +PREFERRED_VERSION_e2fsprogs-libs-native ?= "1.35" +PREFERRED_VERSION_e2fsprogs-native ?= "1.38" +PREFERRED_VERSION_e2tools ?= "0.0.16" +PREFERRED_VERSION_e2tools-native ?= "0.0.16" +PREFERRED_VERSION_eb ?= "4.3" +PREFERRED_VERSION_ebtables ?= "2.0.6" +PREFERRED_VERSION_eciadsl ?= "0.11" +PREFERRED_VERSION_ecj-native ?= "3.3" +PREFERRED_VERSION_editres ?= "1.0.2" +PREFERRED_VERSION_eds-feed ?= "0.3.2" +PREFERRED_VERSION_eel ?= "2.12.2" +PREFERRED_VERSION_ekg ?= "1.6" +PREFERRED_VERSION_elfkickers ?= "2.0a" +PREFERRED_VERSION_elfkickers-native ?= "2.0a" +PREFERRED_VERSION_elftoaout ?= "2.3" +PREFERRED_VERSION_elftoaout-native ?= "2.3" +PREFERRED_VERSION_elfutils ?= "0.127" +PREFERRED_VERSION_elvis ?= "2.2.0" +PREFERRED_VERSION_elvis-tiny ?= "2.2.0" +PREFERRED_VERSION_emacs ?= "20060801" +PREFERRED_VERSION_emacs-x11 ?= "20060801" +PREFERRED_VERSION_emelfm2 ?= "0.0.8" +PREFERRED_VERSION_empathy ?= "0.5" +PREFERRED_VERSION_emul ?= "1.0.5" +PREFERRED_VERSION_enca ?= "1.9" +PREFERRED_VERSION_enchant ?= "1.3.0" +PREFERRED_VERSION_encodings ?= "1.0.2" +PREFERRED_VERSION_enscript ?= "1.6.4" +PREFERRED_VERSION_entrance ?= "0.9.0.010" +PREFERRED_VERSION_epiphany ?= "2.19.6" +PREFERRED_VERSION_erlang ?= "R11B.1" +PREFERRED_VERSION_erlang-native ?= "R11B.1" +PREFERRED_VERSION_esmtp ?= "0.5.1" +PREFERRED_VERSION_esound ?= "0.2.36" +PREFERRED_VERSION_espgs ?= "8.15.3" +PREFERRED_VERSION_etherpuppet ?= "0.2" +PREFERRED_VERSION_ethload ?= "1.2" +PREFERRED_VERSION_ettercap ?= "0.6.b" +PREFERRED_VERSION_eventlog ?= "0.2.5" +PREFERRED_VERSION_evieext ?= "1.0.2" +PREFERRED_VERSION_evince ?= "2.20.0" +PREFERRED_VERSION_exiv2 ?= "0.15" +PREFERRED_VERSION_exmap-console ?= "0.4.1" +PREFERRED_VERSION_exml ?= "cvs" +PREFERRED_VERSION_exo ?= "0.3.2" +PREFERRED_VERSION_expat ?= "2.0.0" +PREFERRED_VERSION_expat-native ?= "1.95.7" +PREFERRED_VERSION_expect ?= "5.44.1" +PREFERRED_VERSION_ez-ipupdate ?= "3.0.10" +PREFERRED_VERSION_ezx-boot-usb-native ?= "0.1.0" +PREFERRED_VERSION_ezx-gpiotool ?= "1877" +PREFERRED_VERSION_faac ?= "1.24" +PREFERRED_VERSION_faad2 ?= "2.0" +PREFERRED_VERSION_fakechroot ?= "2.5" +PREFERRED_VERSION_fakechroot-native ?= "2.5" +PREFERRED_VERSION_fakeconnect ?= "1.2.1" +PREFERRED_VERSION_fakeroot ?= "1.7.1" +PREFERRED_VERSION_fakeroot-native ?= "1.7.1" +PREFERRED_VERSION_fam ?= "2.7.0" +PREFERRED_VERSION_farsight ?= "0.1.5" +PREFERRED_VERSION_fastcgi ?= "2.4.0" +PREFERRED_VERSION_fastjar-native ?= "0.95" +PREFERRED_VERSION_fbgetty ?= "0.1.698" +PREFERRED_VERSION_fbgrab ?= "1.0" +PREFERRED_VERSION_fbpanel ?= "4.3" +PREFERRED_VERSION_fbreader ?= "0.8.2a" +PREFERRED_VERSION_fbset ?= "2.1" +PREFERRED_VERSION_fbui-utils ?= "0.9.14c" +PREFERRED_VERSION_fbvncserver ?= "0.9.4" +PREFERRED_VERSION_fbvncserver-kmodule ?= "0.9.4" +PREFERRED_VERSION_fceu ?= "0.98.13-pre" +PREFERRED_VERSION_fconfig ?= "20060419" +PREFERRED_VERSION_fcron ?= "3.0.2" +PREFERRED_VERSION_feh ?= "1.2.7" +PREFERRED_VERSION_fetchmail ?= "6.2.5" +PREFERRED_VERSION_ffmpeg ?= "0.4.9-pre1" +PREFERRED_VERSION_fftw ?= "3.1.2" +PREFERRED_VERSION_fftwf ?= "3.1.2" +PREFERRED_VERSION_fftwl ?= "3.1.2" +PREFERRED_VERSION_fget ?= "1.3.3" +PREFERRED_VERSION_figment ?= "0.3.5" +PREFERRED_VERSION_file ?= "4.21" +PREFERRED_VERSION_file-native ?= "4.21" +PREFERRED_VERSION_findutils ?= "4.2.29" +PREFERRED_VERSION_findutils-native ?= "4.2.29" +PREFERRED_VERSION_firefox ?= "1.0.7" +PREFERRED_VERSION_fis ?= "1.0" +PREFERRED_VERSION_fish ?= "1.1.0" +PREFERRED_VERSION_fixesproto ?= "4.0" +PREFERRED_VERSION_flac ?= "1.1.2" +PREFERRED_VERSION_flex ?= "2.5.31" +PREFERRED_VERSION_flex-native ?= "2.5.31" +PREFERRED_VERSION_flexis-zaurus ?= "1.0.0" +PREFERRED_VERSION_flnx ?= "0.18" +PREFERRED_VERSION_fltk ?= "1.1.7" +PREFERRED_VERSION_flumotion ?= "0.4.1" +PREFERRED_VERSION_fontcacheproto ?= "0.1.2" +PREFERRED_VERSION_fontcacheproto-native ?= "0.1.2" +PREFERRED_VERSION_fontconfig ?= "2.4.1" +PREFERRED_VERSION_fontconfig-native ?= "2.3.91" +PREFERRED_VERSION_fontsproto ?= "2.0.2" +PREFERRED_VERSION_fontsproto-native ?= "2.0.2" +PREFERRED_VERSION_fonttosfnt ?= "1.0.3" +PREFERRED_VERSION_foonas-init ?= "0.10" +PREFERRED_VERSION_foonas-packages ?= "1.0" +PREFERRED_VERSION_fortune-mod ?= "1.99.1" +PREFERRED_VERSION_fpdf ?= "1.53" +PREFERRED_VERSION_free42-vga ?= "1.4.36" +PREFERRED_VERSION_freeciv ?= "2.0.8" +PREFERRED_VERSION_freedoom ?= "0.3" +PREFERRED_VERSION_freedroid ?= "1.0.2" +PREFERRED_VERSION_freenote ?= "1.12.0" +PREFERRED_VERSION_freeze ?= "1.0" +PREFERRED_VERSION_frodo ?= "4.2" +PREFERRED_VERSION_froot ?= "0.7.1" +PREFERRED_VERSION_frotz ?= "2.43" +PREFERRED_VERSION_frozen-bubble ?= "1.0.0" +PREFERRED_VERSION_fsi-client ?= "20040803" +PREFERRED_VERSION_ftdi-eeprom ?= "0.2" +PREFERRED_VERSION_ftdi-eeprom-native ?= "0.2" +PREFERRED_VERSION_ftpd-topfield ?= "0.7.4" +PREFERRED_VERSION_fuse ?= "2.6.5" +PREFERRED_VERSION_fuse-module ?= "2.6.5" +PREFERRED_VERSION_fush ?= "0.9.0" +PREFERRED_VERSION_fxload ?= "0.0.20020411" +PREFERRED_VERSION_g15daemon ?= "1.2.6a" +PREFERRED_VERSION_gail ?= "1.20.0" +PREFERRED_VERSION_gaim ?= "1.5.0" +PREFERRED_VERSION_gal-2.0 ?= "1.99.11" +PREFERRED_VERSION_gal-2.1 ?= "2.1.10" +PREFERRED_VERSION_galago-daemon ?= "0.3.4" +PREFERRED_VERSION_galculator ?= "1.2.3" +PREFERRED_VERSION_gallery ?= "1.5.5" +PREFERRED_VERSION_gamin ?= "0.1.8" +PREFERRED_VERSION_gammu ?= "1.17.0" +PREFERRED_VERSION_gawk ?= "3.1.4" +PREFERRED_VERSION_gawk-native ?= "3.1.4" +PREFERRED_VERSION_gcalctool ?= "5.7.32" +PREFERRED_VERSION_gccmakedep ?= "1.0.2" +PREFERRED_VERSION_gconf ?= "2.6.1" +PREFERRED_VERSION_gconf-native ?= "2.6.1" +PREFERRED_VERSION_gd ?= "2.0.33" +PREFERRED_VERSION_gdado ?= "2.2" +PREFERRED_VERSION_gdal ?= "1.3.2" +PREFERRED_VERSION_gdb ?= "6.6" +PREFERRED_VERSION_gdb-cross ?= "6.6" +PREFERRED_VERSION_gdb-cross-sdk ?= "6.6" +PREFERRED_VERSION_gdbm ?= "1.8.3" +PREFERRED_VERSION_gdbm-native ?= "1.8.3" +PREFERRED_VERSION_gdk-pixbuf-csource-native ?= "2.10.14" +PREFERRED_VERSION_gdm ?= "2.14.9" +PREFERRED_VERSION_geda ?= "20050820" +PREFERRED_VERSION_geda-gattrib ?= "20050820" +PREFERRED_VERSION_geda-gschem ?= "20050820" +PREFERRED_VERSION_geda-gsymcheck ?= "20050820" +PREFERRED_VERSION_geda-symbols ?= "20050820" +PREFERRED_VERSION_geda-utils ?= "20050820" +PREFERRED_VERSION_gemdropx ?= "0.9" +PREFERRED_VERSION_genboot-native ?= "1.0" +PREFERRED_VERSION_genext2fs ?= "1.3" +PREFERRED_VERSION_genext2fs-native ?= "1.3" +PREFERRED_VERSION_genlist ?= "1.0" +PREFERRED_VERSION_geode-accessbus5536 ?= "2.6.11" +PREFERRED_VERSION_geode-aeslx ?= "2.6.11" +PREFERRED_VERSION_geode-alsa5536 ?= "2.6.11" +PREFERRED_VERSION_gettext ?= "0.14.1" +PREFERRED_VERSION_gettext-native ?= "0.14.1" +PREFERRED_VERSION_gftp ?= "2.0.18" +PREFERRED_VERSION_ghettotooth ?= "1.0" +PREFERRED_VERSION_giac ?= "0.5.0" +PREFERRED_VERSION_giblib ?= "1.2.4" +PREFERRED_VERSION_gif2png ?= "2.5.1" +PREFERRED_VERSION_gift ?= "0.11.5" +PREFERRED_VERSION_giftcurs ?= "0.6.2" +PREFERRED_VERSION_gimp ?= "2.3.19" +PREFERRED_VERSION_ginspector ?= "20050529" +PREFERRED_VERSION_git ?= "1.5.2.3" +PREFERRED_VERSION_git-native ?= "1.5.2.3" +PREFERRED_VERSION_gizmod ?= "2.3" +PREFERRED_VERSION_gkrellm ?= "2.2.10" +PREFERRED_VERSION_glib-1.2 ?= "1.2.10" +PREFERRED_VERSION_glib-1.2-native ?= "1.2.10" +PREFERRED_VERSION_glib-2.0 ?= "2.14.1" +PREFERRED_VERSION_glib-2.0-native ?= "2.12.4" +PREFERRED_VERSION_glibc ?= "2.6.1" +PREFERRED_VERSION_glibc-initial ?= "2.6.1" +PREFERRED_VERSION_glibmm ?= "2.12.10" +PREFERRED_VERSION_glider ?= "1.0.0" +PREFERRED_VERSION_gloox ?= "0.8.9" +PREFERRED_VERSION_glproto ?= "1.4.8" +PREFERRED_VERSION_glrr ?= "20050529" +PREFERRED_VERSION_glrr-widgets ?= "20050529" +PREFERRED_VERSION_glurp ?= "0.11.3" +PREFERRED_VERSION_gmailfs ?= "0.7.3" +PREFERRED_VERSION_gmp ?= "4.2.1" +PREFERRED_VERSION_gmp-native ?= "4.2.1" +PREFERRED_VERSION_gmpc ?= "0.13.0" +PREFERRED_VERSION_gnash ?= "0.8.0" +PREFERRED_VERSION_gnocky ?= "0.0.3" +PREFERRED_VERSION_gnokii ?= "0.6.14" +PREFERRED_VERSION_gnome-common ?= "2.20.0" +PREFERRED_VERSION_gnome-cups-manager ?= "0.31" +PREFERRED_VERSION_gnome-desktop ?= "2.18.3" +PREFERRED_VERSION_gnome-doc-utils ?= "0.12.0" +PREFERRED_VERSION_gnome-games ?= "2.6.1" +PREFERRED_VERSION_gnome-icon-theme ?= "1.3.3" +PREFERRED_VERSION_gnome-keyring ?= "2.20.0" +PREFERRED_VERSION_gnome-menus ?= "2.16.1" +PREFERRED_VERSION_gnome-mime-data ?= "2.18.0" +PREFERRED_VERSION_gnome-panel ?= "2.18.1" +PREFERRED_VERSION_gnome-power ?= "0.0.5" +PREFERRED_VERSION_gnome-power-manager ?= "2.18.3" +PREFERRED_VERSION_gnome-themes ?= "2.6.2" +PREFERRED_VERSION_gnome-vfs ?= "2.20.0" +PREFERRED_VERSION_gnome-vfs-extras ?= "0.99.13" +PREFERRED_VERSION_gnome-vfs-obexftp ?= "0.4" +PREFERRED_VERSION_gnomebaker ?= "0.6.0" +PREFERRED_VERSION_gnomesword ?= "2.1.2" +PREFERRED_VERSION_gnuchess ?= "5.05" +PREFERRED_VERSION_gnumeric ?= "1.6.3" +PREFERRED_VERSION_gnupg ?= "1.4.2.2" +PREFERRED_VERSION_gnuplot ?= "4.2.2" +PREFERRED_VERSION_gnuradio ?= "3.0.4" +PREFERRED_VERSION_gnutls ?= "1.6.3" +PREFERRED_VERSION_gob2 ?= "2.0.14" +PREFERRED_VERSION_gobby ?= "0.4.1" +PREFERRED_VERSION_goffice ?= "0.2.1" +PREFERRED_VERSION_gparted ?= "0.3.3" +PREFERRED_VERSION_gpdf ?= "2.10.0" +PREFERRED_VERSION_gpe-aerial ?= "0.3.0" +PREFERRED_VERSION_gpe-announce ?= "0.13" +PREFERRED_VERSION_gpe-applauncher ?= "0.11" +PREFERRED_VERSION_gpe-appmgr ?= "2.8" +PREFERRED_VERSION_gpe-autostarter ?= "0.12" +PREFERRED_VERSION_gpe-beam ?= "0.2.9" +PREFERRED_VERSION_gpe-bluetooth ?= "0.55" +PREFERRED_VERSION_gpe-bootsplash ?= "1.15" +PREFERRED_VERSION_gpe-bootsplash-theme-e ?= "1.0" +PREFERRED_VERSION_gpe-bootsplash-theme-gpephone ?= "1.0" +PREFERRED_VERSION_gpe-buttonbox ?= "0.5" +PREFERRED_VERSION_gpe-calculator ?= "0.2" +PREFERRED_VERSION_gpe-calendar ?= "0.91" +PREFERRED_VERSION_gpe-clock ?= "0.25" +PREFERRED_VERSION_gpe-conf ?= "0.2.6" +PREFERRED_VERSION_gpe-confd ?= "0.16" +PREFERRED_VERSION_gpe-contacts ?= "0.47" +PREFERRED_VERSION_gpe-contacts-hildon ?= "0.42" +PREFERRED_VERSION_gpe-dm ?= "0.51" +PREFERRED_VERSION_gpe-edit ?= "0.40" +PREFERRED_VERSION_gpe-expenses ?= "0.0.6" +PREFERRED_VERSION_gpe-filemanager ?= "0.30" +PREFERRED_VERSION_gpe-fsi ?= "0.1" +PREFERRED_VERSION_gpe-gallery ?= "0.97" +PREFERRED_VERSION_gpe-go ?= "0.05" +PREFERRED_VERSION_gpe-helpviewer ?= "1.0" +PREFERRED_VERSION_gpe-icons ?= "0.25" +PREFERRED_VERSION_gpe-irc ?= "0.08" +PREFERRED_VERSION_gpe-keylock ?= "0.12" +PREFERRED_VERSION_gpe-life ?= "0.2" +PREFERRED_VERSION_gpe-lights ?= "0.13" +PREFERRED_VERSION_gpe-login ?= "0.90" +PREFERRED_VERSION_gpe-mini-browser ?= "0.21" +PREFERRED_VERSION_gpe-mini-browser-hildon ?= "0.17" +PREFERRED_VERSION_gpe-mininet ?= "0.7" +PREFERRED_VERSION_gpe-mixer ?= "0.42" +PREFERRED_VERSION_gpe-nmf ?= "0.22" +PREFERRED_VERSION_gpe-othello ?= "0.2-1" +PREFERRED_VERSION_gpe-ownerinfo ?= "0.28" +PREFERRED_VERSION_gpe-package ?= "0.4" +PREFERRED_VERSION_gpe-phonepanel ?= "0.9" +PREFERRED_VERSION_gpe-plucker ?= "0.4" +PREFERRED_VERSION_gpe-question ?= "0.04" +PREFERRED_VERSION_gpe-scap ?= "1.3" +PREFERRED_VERSION_gpe-session-scripts ?= "0.67" +PREFERRED_VERSION_gpe-session-scripts-phone ?= "0.67" +PREFERRED_VERSION_gpe-shield ?= "0.9" +PREFERRED_VERSION_gpe-sketchbook ?= "0.2.9" +PREFERRED_VERSION_gpe-snes ?= "0.2" +PREFERRED_VERSION_gpe-soundbite ?= "1.0.6" +PREFERRED_VERSION_gpe-soundserver ?= "0.4-1" +PREFERRED_VERSION_gpe-su ?= "0.19" +PREFERRED_VERSION_gpe-synctool ?= "0.2" +PREFERRED_VERSION_gpe-taskmanager ?= "0.20" +PREFERRED_VERSION_gpe-terminal ?= "1.1" +PREFERRED_VERSION_gpe-tetris ?= "0.6-4" +PREFERRED_VERSION_gpe-theme-clearlooks ?= "0.3" +PREFERRED_VERSION_gpe-theme-e17 ?= "0.1" +PREFERRED_VERSION_gpe-theme-foxbox ?= "0.1" +PREFERRED_VERSION_gpe-theme-industrial ?= "0.2" +PREFERRED_VERSION_gpe-today ?= "0.11" +PREFERRED_VERSION_gpe-todo ?= "0.56" +PREFERRED_VERSION_gpe-todo-hildon ?= "0.55" +PREFERRED_VERSION_gpe-watch ?= "0.10" +PREFERRED_VERSION_gpe-what ?= "0.43" +PREFERRED_VERSION_gpe-windowlist ?= "0.1" +PREFERRED_VERSION_gperf ?= "3.0.3" +PREFERRED_VERSION_gperf-native ?= "3.0.3" +PREFERRED_VERSION_gperiodic ?= "1.3.3" +PREFERRED_VERSION_gpesyncd ?= "2.0" +PREFERRED_VERSION_gpgme ?= "1.1.4" +PREFERRED_VERSION_gphoto2 ?= "2.4.0" +PREFERRED_VERSION_gpicview ?= "0.1.5" +PREFERRED_VERSION_gpm ?= "1.20.1" +PREFERRED_VERSION_gpp ?= "2.21" +PREFERRED_VERSION_gpsbabel ?= "1.3.3" +PREFERRED_VERSION_gpsd ?= "2.34" +PREFERRED_VERSION_gpsdrive ?= "2.10pre2" +PREFERRED_VERSION_gpstk ?= "1.2" +PREFERRED_VERSION_gqview ?= "2.1.1" +PREFERRED_VERSION_granule ?= "1.2.4" +PREFERRED_VERSION_grass ?= "6.2.1" +PREFERRED_VERSION_grep ?= "2.5.1" +PREFERRED_VERSION_grep-native ?= "2.5.1" +PREFERRED_VERSION_grip ?= "3.2.0" +PREFERRED_VERSION_groff ?= "1.19.2" +PREFERRED_VERSION_gs ?= "8.16" +PREFERRED_VERSION_gsl ?= "1.4" +PREFERRED_VERSION_gsmmux ?= "alpha-2" +PREFERRED_VERSION_gsoap ?= "2.7.7" +PREFERRED_VERSION_gsoap-native ?= "2.7.7" +PREFERRED_VERSION_gsoko ?= "0.4.2-gpe6" +PREFERRED_VERSION_gspcav1 ?= "20070110" +PREFERRED_VERSION_gst-ffmpeg ?= "0.10.2" +PREFERRED_VERSION_gst-meta-base ?= "0.10" +PREFERRED_VERSION_gst-plugin-pulse ?= "0.9.4" +PREFERRED_VERSION_gst-plugins-bad ?= "0.10.5" +PREFERRED_VERSION_gst-plugins-base ?= "0.10.14" +PREFERRED_VERSION_gst-plugins-farsight ?= "0.10.1" +PREFERRED_VERSION_gst-plugins-good ?= "0.10.6" +PREFERRED_VERSION_gst-plugins-ugly ?= "0.10.6" +PREFERRED_VERSION_gstreamer ?= "0.10.14" +PREFERRED_VERSION_gthumb ?= "2.6.9" +PREFERRED_VERSION_gtk+ ?= "2.10.14" +PREFERRED_VERSION_gtk-clearlooks-engine ?= "0.6.2" +PREFERRED_VERSION_gtk-doc ?= "1.0" +PREFERRED_VERSION_gtk-doc-native ?= "1.0" +PREFERRED_VERSION_gtk-engines ?= "2.7.4" +PREFERRED_VERSION_gtk-industrial-engine ?= "0.2.46.0" +PREFERRED_VERSION_gtk-sato-engine ?= "0.1" +PREFERRED_VERSION_gtk-sharp ?= "2.10.2" +PREFERRED_VERSION_gtk-smooth-engine ?= "0.5.8" +PREFERRED_VERSION_gtk-xfce-engine ?= "2.4.1" +PREFERRED_VERSION_gtk2-ssh-askpass ?= "0.3" +PREFERRED_VERSION_gtk2-theme-angelistic ?= "0.3" +PREFERRED_VERSION_gtkhtml-2.0 ?= "2.6.3" +PREFERRED_VERSION_gtkhtml-3.0 ?= "3.0.10" +PREFERRED_VERSION_gtkhtml-3.1 ?= "3.1.16" +PREFERRED_VERSION_gtkhtml-3.6 ?= "3.6.2" +PREFERRED_VERSION_gtkhtml-3.8 ?= "3.8.2" +PREFERRED_VERSION_gtkimageview ?= "1.3.0" +PREFERRED_VERSION_gtkmathview ?= "0.7.6" +PREFERRED_VERSION_gtkmm ?= "2.10.10" +PREFERRED_VERSION_gtksourceview ?= "1.7.2" +PREFERRED_VERSION_gtkterm2 ?= "0.2.3" +PREFERRED_VERSION_gtracer ?= "0.0.10" +PREFERRED_VERSION_guichan ?= "0.7.1" +PREFERRED_VERSION_guile ?= "1.6.4" +PREFERRED_VERSION_guile-native ?= "1.8.2" +PREFERRED_VERSION_gutenprint ?= "5.1.3" +PREFERRED_VERSION_gutenprint-native ?= "5.1.3" +PREFERRED_VERSION_gvim ?= "7.0" +PREFERRED_VERSION_gweled ?= "0.5" +PREFERRED_VERSION_gxine ?= "0.4.1enhanced" +PREFERRED_VERSION_gzip ?= "1.3.5" +PREFERRED_VERSION_hal ?= "0.5.9" +PREFERRED_VERSION_hal-info ?= "20070918+git" +PREFERRED_VERSION_haserl ?= "0.8.0" +PREFERRED_VERSION_havp ?= "0.86" +PREFERRED_VERSION_hdparm ?= "6.9" +PREFERRED_VERSION_helloworld ?= "1.0.0" +PREFERRED_VERSION_hexatrolic ?= "1.0beta3" +PREFERRED_VERSION_hfsplusutils ?= "1.0.4-4" +PREFERRED_VERSION_hfsutils ?= "3.2.6" +PREFERRED_VERSION_hibernate-script ?= "1.12" +PREFERRED_VERSION_hicolor-icon-theme ?= "0.10" +PREFERRED_VERSION_hiker ?= "0.9.1" +PREFERRED_VERSION_hildon-base-lib ?= "0.11.1" +PREFERRED_VERSION_hildon-control-panel ?= "0.9.1-1.2" +PREFERRED_VERSION_hildon-fm ?= "0.9.1-2" +PREFERRED_VERSION_hildon-home ?= "0.8.20-2" +PREFERRED_VERSION_hildon-initscripts ?= "0.8.14-1" +PREFERRED_VERSION_hildon-lgpl ?= "0.12.1" +PREFERRED_VERSION_hildon-libs ?= "0.15.1" +PREFERRED_VERSION_hildon-navigator ?= "0.9.6-2" +PREFERRED_VERSION_hildon-status-bar ?= "0.8.11-1" +PREFERRED_VERSION_hildon-thumbnail ?= "0.11" +PREFERRED_VERSION_hostap-conf ?= "1.0" +PREFERRED_VERSION_hostap-daemon ?= "0.4.4" +PREFERRED_VERSION_hostap-utils ?= "0.4.7" +PREFERRED_VERSION_hotplug-dbus ?= "0.9" +PREFERRED_VERSION_hotplug-ng ?= "002" +PREFERRED_VERSION_hotplug-qcop ?= "cvs" +PREFERRED_VERSION_howl ?= "1.0.0" +PREFERRED_VERSION_hsetroot ?= "1.0.2" +PREFERRED_VERSION_htb-init ?= "0.8.5" +PREFERRED_VERSION_httppc ?= "0.8.5" +PREFERRED_VERSION_htun ?= "0.9.5" +PREFERRED_VERSION_hvsc ?= "45" +PREFERRED_VERSION_hwdata ?= "0.191" +PREFERRED_VERSION_hydra ?= "4.5" +PREFERRED_VERSION_iaimaster ?= "0.5" +PREFERRED_VERSION_iana-etc ?= "2.20" +PREFERRED_VERSION_ica-bin ?= "8.0" +PREFERRED_VERSION_iceauth ?= "1.0.2" +PREFERRED_VERSION_icebloxx ?= "1.0.0" +PREFERRED_VERSION_icecc-create-env ?= "0.1" +PREFERRED_VERSION_icewm ?= "1.2.30" +PREFERRED_VERSION_icmpquery ?= "1.03" +PREFERRED_VERSION_ico ?= "1.0.2" +PREFERRED_VERSION_icu ?= "3.6" +PREFERRED_VERSION_icu-native ?= "3.6" +PREFERRED_VERSION_id3lib ?= "3.8.3" +PREFERRED_VERSION_ifplugd ?= "0.25" +PREFERRED_VERSION_ifupdown ?= "0.6.8" +PREFERRED_VERSION_iksemel ?= "1.2" +PREFERRED_VERSION_imagemagick ?= "6.3.5-10" +PREFERRED_VERSION_imake ?= "1.0.2" +PREFERRED_VERSION_imlib ?= "1.9.15" +PREFERRED_VERSION_imlib2 ?= "1.4.0.002" +PREFERRED_VERSION_imposter ?= "0.3" +PREFERRED_VERSION_inetutils ?= "1.4.2" +PREFERRED_VERSION_initscripts ?= "1.0" +PREFERRED_VERSION_initscripts-openprotium ?= "1.0" +PREFERRED_VERSION_initscripts-slugos ?= "1.0" +PREFERRED_VERSION_inkscape ?= "0.43" +PREFERRED_VERSION_inkwp ?= "0.1.1" +PREFERRED_VERSION_inotify-tools ?= "2.1" +PREFERRED_VERSION_inputproto ?= "1.4.2.1" +PREFERRED_VERSION_install-native ?= "0.1" +PREFERRED_VERSION_insttrain ?= "1.0.5" +PREFERRED_VERSION_interbench ?= "0.30" +PREFERRED_VERSION_intercom ?= "0.15" +PREFERRED_VERSION_intltool ?= "0.35.2" +PREFERRED_VERSION_intltool-native ?= "0.35.0" +PREFERRED_VERSION_iozone3 ?= "263" +PREFERRED_VERSION_ipaq-sleep ?= "0.9" +PREFERRED_VERSION_ipatience ?= "0.1" +PREFERRED_VERSION_iperf ?= "2.0.2" +PREFERRED_VERSION_ipkg ?= "0.99.163" +PREFERRED_VERSION_ipkg-collateral ?= "1.0" +PREFERRED_VERSION_ipkg-native ?= "0.99.163" +PREFERRED_VERSION_iproute2 ?= "2.6.22" +PREFERRED_VERSION_ipsec-tools ?= "0.6.7" +PREFERRED_VERSION_iptables ?= "1.3.8" +PREFERRED_VERSION_iptstate ?= "2.2.1" +PREFERRED_VERSION_iputils ?= "20020927" +PREFERRED_VERSION_iqnotes ?= "2.0.99-2.1.0rc1" +PREFERRED_VERSION_ircp ?= "0.3" +PREFERRED_VERSION_irda-utils ?= "0.9.16" +PREFERRED_VERSION_irdadump ?= "0.9.16" +PREFERRED_VERSION_irk-belkin ?= "0.11" +PREFERRED_VERSION_irk-targus ?= "0.11.0" +PREFERRED_VERSION_irssi ?= "0.8.10" +PREFERRED_VERSION_iso-codes ?= "1.4" +PREFERRED_VERSION_ixp4xx-npe-native ?= "2.4" +PREFERRED_VERSION_jack ?= "0.103.0" +PREFERRED_VERSION_jamvm ?= "1.4.5" +PREFERRED_VERSION_jards ?= "1.0" +PREFERRED_VERSION_jhead ?= "2.6.0" +PREFERRED_VERSION_jikes ?= "1.22" +PREFERRED_VERSION_jikes-native ?= "1.21" +PREFERRED_VERSION_joe ?= "3.1" +PREFERRED_VERSION_js ?= "1.5" +PREFERRED_VERSION_juce ?= "1.29" +PREFERRED_VERSION_justreader ?= "2.0k" +PREFERRED_VERSION_kaffe-gtk ?= "1.1.5" +PREFERRED_VERSION_kaffeh-native ?= "1.1.5" +PREFERRED_VERSION_kakasi ?= "2.3.4" +PREFERRED_VERSION_kakasi-native ?= "2.3.4" +PREFERRED_VERSION_kanatest ?= "0.3.6" +PREFERRED_VERSION_kazehakase ?= "0.4.7" +PREFERRED_VERSION_kbd ?= "1.12" +PREFERRED_VERSION_kbproto ?= "1.0.3" +PREFERRED_VERSION_kdepimpi ?= "2.2.7" +PREFERRED_VERSION_kernbench ?= "0.41" +PREFERRED_VERSION_kernel-module-wlags49-h1-cs ?= "718" +PREFERRED_VERSION_kernel-module-wlags49-h2-cs ?= "718" +PREFERRED_VERSION_kexec-tools ?= "1.101" +PREFERRED_VERSION_keylaunch ?= "2.0.10" +PREFERRED_VERSION_keymap-locales ?= "1.0" +PREFERRED_VERSION_keymaps ?= "1.0" +PREFERRED_VERSION_keyring ?= "0.6.8" +PREFERRED_VERSION_kf ?= "0.5.4.1" +PREFERRED_VERSION_kismet ?= "2007-10-R1" +PREFERRED_VERSION_klibc ?= "1.1.1" +PREFERRED_VERSION_klimt ?= "0.6.1" +PREFERRED_VERSION_knights ?= "1.14" +PREFERRED_VERSION_konqueror-embedded ?= "20070212" +PREFERRED_VERSION_kpengine ?= "0.1" +PREFERRED_VERSION_kphonepi ?= "1.0.0" +PREFERRED_VERSION_kstars-embedded ?= "0.8.5" +PREFERRED_VERSION_ksymoops ?= "2.4.9" +PREFERRED_VERSION_ktimetrackerpi ?= "0.9.7" +PREFERRED_VERSION_kxml2 ?= "2.3.0" +PREFERRED_VERSION_labyrinth ?= "0.7" +PREFERRED_VERSION_lame ?= "3.96.1" +PREFERRED_VERSION_lbreakout2 ?= "2.6beta" +PREFERRED_VERSION_lcdproc ?= "0.5.1" +PREFERRED_VERSION_lcms ?= "1.15" +PREFERRED_VERSION_leafpad ?= "0.8.9" +PREFERRED_VERSION_led ?= "0.0cvs20060814" +PREFERRED_VERSION_lemon ?= "3.3.5" +PREFERRED_VERSION_lemon-native ?= "3.3.5" +PREFERRED_VERSION_less ?= "406" +PREFERRED_VERSION_lessertunjo ?= "0.0.10" +PREFERRED_VERSION_lftp ?= "3.5.1" +PREFERRED_VERSION_liba52 ?= "0.7.4" +PREFERRED_VERSION_libaal ?= "1.0.4" +PREFERRED_VERSION_libabenabler ?= "0.1" +PREFERRED_VERSION_libabenabler2 ?= "1.0" +PREFERRED_VERSION_libaio ?= "0.3.106" +PREFERRED_VERSION_libaio-oracle ?= "0.3.0" +PREFERRED_VERSION_libalgorithm-diff-perl ?= "1.1902" +PREFERRED_VERSION_libalgorithm-diff-perl-native ?= "1.1902" +PREFERRED_VERSION_libao ?= "0.8.6" +PREFERRED_VERSION_libao-alsa ?= "0.8.6" +PREFERRED_VERSION_libao-plugin-alsa ?= "0.8.6" +PREFERRED_VERSION_libapplewm ?= "1.0.0" +PREFERRED_VERSION_libarchive-tar-perl ?= "1.30" +PREFERRED_VERSION_libarchive-tar-perl-native ?= "1.30" +PREFERRED_VERSION_libarena ?= "0.2" +PREFERRED_VERSION_libart-lgpl ?= "2.3.19" +PREFERRED_VERSION_libassa ?= "3.4.2" +PREFERRED_VERSION_libassuan ?= "0.6.9" +PREFERRED_VERSION_libatomics-ops ?= "1.2" +PREFERRED_VERSION_libbedic ?= "1.0" +PREFERRED_VERSION_libbonobo ?= "2.14.0" +PREFERRED_VERSION_libbonoboui ?= "2.18.0" +PREFERRED_VERSION_libcache-cache-perl ?= "1.05" +PREFERRED_VERSION_libcache-cache-perl-native ?= "1.05" +PREFERRED_VERSION_libcalenabler ?= "1.0" +PREFERRED_VERSION_libcap ?= "1.10" +PREFERRED_VERSION_libccaudio2 ?= "0.9.0" +PREFERRED_VERSION_libcdaudio ?= "0.99.12p2" +PREFERRED_VERSION_libcgicc ?= "3.2.3" +PREFERRED_VERSION_libchenabler ?= "0.1" +PREFERRED_VERSION_libclass-container-perl ?= "0.12" +PREFERRED_VERSION_libclass-container-perl-native ?= "0.12" +PREFERRED_VERSION_libclass-data-inheritable-perl ?= "0.06" +PREFERRED_VERSION_libclass-data-inheritable-perl-native ?= "0.06" +PREFERRED_VERSION_libcompress-zlib-perl ?= "1.42" +PREFERRED_VERSION_libcompress-zlib-perl-native ?= "1.42" +PREFERRED_VERSION_libcontactsdb ?= "0.5" +PREFERRED_VERSION_libcroco ?= "0.6.1" +PREFERRED_VERSION_libcwd ?= "0.99.47" +PREFERRED_VERSION_libdaemon ?= "0.12" +PREFERRED_VERSION_libdata-optlist-perl ?= "0.101" +PREFERRED_VERSION_libdata-optlist-perl-native ?= "0.101" +PREFERRED_VERSION_libdbi ?= "0.7.2" +PREFERRED_VERSION_libdbi-drivers ?= "0.7.1" +PREFERRED_VERSION_libddmpeg ?= "1.5" +PREFERRED_VERSION_libdes ?= "4.01" +PREFERRED_VERSION_libdevel-stacktrace-perl ?= "1.13" +PREFERRED_VERSION_libdevel-stacktrace-perl-native ?= "1.13" +PREFERRED_VERSION_libdictionary ?= "1.0" +PREFERRED_VERSION_libdigest-sha1-perl ?= "2.11" +PREFERRED_VERSION_libdigest-sha1-perl-native ?= "2.11" +PREFERRED_VERSION_libdisplaymigration ?= "0.99" +PREFERRED_VERSION_libdmx ?= "1.0.2" +PREFERRED_VERSION_libdotdesktop ?= "0.11" +PREFERRED_VERSION_libdrm ?= "2.3.0" +PREFERRED_VERSION_libdvb ?= "0.5.5.1" +PREFERRED_VERSION_libdvdnav ?= "0.1.10" +PREFERRED_VERSION_libdvdread ?= "0.9.6" +PREFERRED_VERSION_libedit ?= "20050118" +PREFERRED_VERSION_libeina ?= "0.96.7" +PREFERRED_VERSION_libelf ?= "0.8.6" +PREFERRED_VERSION_liberror-perl ?= "0.17004" +PREFERRED_VERSION_liberror-perl-native ?= "0.17004" +PREFERRED_VERSION_libesmtp ?= "1.0.4" +PREFERRED_VERSION_libetpan ?= "0.52" +PREFERRED_VERSION_libevent ?= "1.1a" +PREFERRED_VERSION_libeventdb ?= "0.90" +PREFERRED_VERSION_libevnet ?= "0.3.1" +PREFERRED_VERSION_libexception-class-perl ?= "1.23" +PREFERRED_VERSION_libexception-class-perl-native ?= "1.23" +PREFERRED_VERSION_libexif ?= "0.6.13" +PREFERRED_VERSION_libextutils-cbuilder-perl ?= "0.18" +PREFERRED_VERSION_libextutils-cbuilder-perl-native ?= "0.18" +PREFERRED_VERSION_libextutils-depends-perl ?= "0.205" +PREFERRED_VERSION_libextutils-depends-perl-native ?= "0.205" +PREFERRED_VERSION_libextutils-parsexs-perl ?= "2.16" +PREFERRED_VERSION_libextutils-parsexs-perl-native ?= "2.16" +PREFERRED_VERSION_libextutils-pkgconfig-perl ?= "1.07" +PREFERRED_VERSION_libextutils-pkgconfig-perl-native ?= "1.07" +PREFERRED_VERSION_libflv ?= "0.2" +PREFERRED_VERSION_libfontenc ?= "1.0.4" +PREFERRED_VERSION_libfontenc-native ?= "1.0.4" +PREFERRED_VERSION_libfribidi ?= "0.10.4" +PREFERRED_VERSION_libfs ?= "1.0.0" +PREFERRED_VERSION_libftdi ?= "0.9" +PREFERRED_VERSION_libftdi-native ?= "0.9" +PREFERRED_VERSION_libg15 ?= "1.2.1" +PREFERRED_VERSION_libg15render ?= "1.2" +PREFERRED_VERSION_libgalago ?= "0.3.3" +PREFERRED_VERSION_libgc ?= "6.7" +PREFERRED_VERSION_libgcrypt ?= "1.2.3" +PREFERRED_VERSION_libgeda ?= "20050820" +PREFERRED_VERSION_libgemwidget ?= "1.0" +PREFERRED_VERSION_libglade ?= "2.6.2" +PREFERRED_VERSION_libglademm ?= "2.4.1" +PREFERRED_VERSION_libgmime ?= "2.1.7" +PREFERRED_VERSION_libgnome ?= "2.18.0" +PREFERRED_VERSION_libgnomecanvas ?= "2.20.0" +PREFERRED_VERSION_libgnomecups ?= "0.2.2" +PREFERRED_VERSION_libgnomeprint ?= "2.8.2" +PREFERRED_VERSION_libgnomeprintui ?= "2.8.2" +PREFERRED_VERSION_libgnomeui ?= "2.18.1" +PREFERRED_VERSION_libgpelaunch ?= "0.14" +PREFERRED_VERSION_libgpephone ?= "0.4" +PREFERRED_VERSION_libgpepimc ?= "0.9" +PREFERRED_VERSION_libgpepimc-hildon ?= "0.5" +PREFERRED_VERSION_libgpevtype ?= "0.50" +PREFERRED_VERSION_libgpewidget ?= "0.115" +PREFERRED_VERSION_libgpewidget-hildon ?= "0.102" +PREFERRED_VERSION_libgpg-error ?= "1.4" +PREFERRED_VERSION_libgphoto2 ?= "2.4.0" +PREFERRED_VERSION_libgpsbt ?= "0.1" +PREFERRED_VERSION_libgpsmgr ?= "0.1" +PREFERRED_VERSION_libgsf ?= "1.14.2" +PREFERRED_VERSION_libgsm ?= "1.0.10" +PREFERRED_VERSION_libgtkinput ?= "0.3" +PREFERRED_VERSION_libgtkstylus ?= "0.3" +PREFERRED_VERSION_libhal-nm ?= "0.0.2" +PREFERRED_VERSION_libhandoff ?= "0.1" +PREFERRED_VERSION_libhangul ?= "0.0.4" +PREFERRED_VERSION_libhildonfm ?= "1.9.41" +PREFERRED_VERSION_libhildonhelp ?= "1.9.1" +PREFERRED_VERSION_libhildonmime ?= "1.9.5" +PREFERRED_VERSION_libhtml-mason-perl ?= "1.35" +PREFERRED_VERSION_libiac ?= "1.0" +PREFERRED_VERSION_libice ?= "1.0.4" +PREFERRED_VERSION_libiconv ?= "1.11" +PREFERRED_VERSION_libid3 ?= "1.1" +PREFERRED_VERSION_libidl ?= "0.8.6" +PREFERRED_VERSION_libidl-native ?= "0.8.6" +PREFERRED_VERSION_libidn ?= "0.5.19" +PREFERRED_VERSION_libim ?= "0.2" +PREFERRED_VERSION_libintl-perl ?= "1.16" +PREFERRED_VERSION_libintl-perl-native ?= "1.16" +PREFERRED_VERSION_libio-zlib-perl ?= "1.04" +PREFERRED_VERSION_libio-zlib-perl-native ?= "1.04" +PREFERRED_VERSION_libjingle-tapioca ?= "0.3.10" +PREFERRED_VERSION_liblbxutil ?= "1.0.1" +PREFERRED_VERSION_liblipsevent ?= "0.1" +PREFERRED_VERSION_liblocale-gettext-perl ?= "1.05" +PREFERRED_VERSION_liblocale-gettext-perl-native ?= "1.05" +PREFERRED_VERSION_liblockfile ?= "1.06" +PREFERRED_VERSION_liblog-dispatch-perl ?= "2.13" +PREFERRED_VERSION_liblog-dispatch-perl-native ?= "2.13" +PREFERRED_VERSION_liblog-log4perl-perl ?= "1.06" +PREFERRED_VERSION_liblog-log4perl-perl-native ?= "1.06" +PREFERRED_VERSION_libmad ?= "0.15.1b" +PREFERRED_VERSION_libmail-sendmail-perl ?= "0.79" +PREFERRED_VERSION_libmailwrapper ?= "1.2.3" +PREFERRED_VERSION_libmatchbox ?= "1.9" +PREFERRED_VERSION_libmath-bigint-gmp-perl ?= "1.18" +PREFERRED_VERSION_libmikmod ?= "3.2.0-beta2" +PREFERRED_VERSION_libmimedir ?= "0.4.2" +PREFERRED_VERSION_libmng ?= "1.0.8" +PREFERRED_VERSION_libmodplug ?= "0.7" +PREFERRED_VERSION_libmodule-build-perl ?= "0.2805" +PREFERRED_VERSION_libmodule-build-perl-native ?= "0.2805" +PREFERRED_VERSION_libmrss ?= "0.17.2" +PREFERRED_VERSION_libmsgenabler ?= "1.0" +PREFERRED_VERSION_libmusicbrainz ?= "2.1.4" +PREFERRED_VERSION_libnet ?= "1.1.2.1" +PREFERRED_VERSION_libnet-ip-perl ?= "1.25" +PREFERRED_VERSION_libnet-ip-perl-native ?= "1.25" +PREFERRED_VERSION_libnetfilter-queue ?= "0.0.13" +PREFERRED_VERSION_libnetserver-generic-perl ?= "1.03" +PREFERRED_VERSION_libnfnetlink ?= "0.0.30" +PREFERRED_VERSION_libnids ?= "1.18" +PREFERRED_VERSION_libnotify ?= "0.4.4" +PREFERRED_VERSION_libnss-mdns ?= "0.9" +PREFERRED_VERSION_libnxml ?= "0.16" +PREFERRED_VERSION_libogg ?= "1.1" +PREFERRED_VERSION_liboil ?= "0.3.11" +PREFERRED_VERSION_libol ?= "0.3.18" +PREFERRED_VERSION_liboldx ?= "1.0.1" +PREFERRED_VERSION_liboop ?= "1.0" +PREFERRED_VERSION_libopenraw ?= "0.0.2" +PREFERRED_VERSION_libopensync ?= "0.22" +PREFERRED_VERSION_libopensync-plugin-evo2-sync ?= "0.22" +PREFERRED_VERSION_libopensync-plugin-file ?= "0.18" +PREFERRED_VERSION_libopensync-plugin-file-sync ?= "0.22" +PREFERRED_VERSION_libopensync-plugin-gpe ?= "0.18" +PREFERRED_VERSION_libopensync-plugin-irmc ?= "0.18" +PREFERRED_VERSION_libopensync-plugin-irmc-sync ?= "0.22" +PREFERRED_VERSION_libosso ?= "1.20" +PREFERRED_VERSION_libosso-gsf ?= "1.11.10.4" +PREFERRED_VERSION_libosso-help ?= "2.1.2" +PREFERRED_VERSION_libpam ?= "0.79" +PREFERRED_VERSION_libparams-util-perl ?= "0.20" +PREFERRED_VERSION_libparams-util-perl-native ?= "0.20" +PREFERRED_VERSION_libparams-validate-perl ?= "0.86" +PREFERRED_VERSION_libparams-validate-perl-native ?= "0.86" +PREFERRED_VERSION_libpcap ?= "0.9.6" +PREFERRED_VERSION_libpcl ?= "1.4" +PREFERRED_VERSION_libpcre ?= "4.4" +PREFERRED_VERSION_libpcre-native ?= "4.4" +PREFERRED_VERSION_libperl6-junction-perl ?= "1.10" +PREFERRED_VERSION_libpixman ?= "0.9.6" +PREFERRED_VERSION_libpng ?= "1.2.20" +PREFERRED_VERSION_libpng-native ?= "1.2.20" +PREFERRED_VERSION_libpthread-stubs ?= "0.1" +PREFERRED_VERSION_libqanava ?= "0.0.7" +PREFERRED_VERSION_libqtaux2 ?= "1.2.3" +PREFERRED_VERSION_librcf ?= "0.4" +PREFERRED_VERSION_librecord ?= "0.1" +PREFERRED_VERSION_librecord2 ?= "0.1" +PREFERRED_VERSION_librewrite ?= "0.1" +PREFERRED_VERSION_librsvg ?= "2.16.1" +PREFERRED_VERSION_librsync ?= "0.9.7" +PREFERRED_VERSION_librtaudio ?= "3.0.1" +PREFERRED_VERSION_libsamplerate0 ?= "0.1.2" +PREFERRED_VERSION_libschedule ?= "0.17" +PREFERRED_VERSION_libsdl-directfb ?= "1.2.9" +PREFERRED_VERSION_libsdl-gfx ?= "2.0.11" +PREFERRED_VERSION_libsdl-image ?= "1.2.3" +PREFERRED_VERSION_libsdl-mixer ?= "1.2.6" +PREFERRED_VERSION_libsdl-native ?= "1.2.11" +PREFERRED_VERSION_libsdl-net ?= "1.2.7" +PREFERRED_VERSION_libsdl-ttf ?= "2.0.3" +PREFERRED_VERSION_libsdl-ttf-native ?= "2.0.3" +PREFERRED_VERSION_libsdl-x11 ?= "1.2.9" +PREFERRED_VERSION_libsettings ?= "0.3" +PREFERRED_VERSION_libsexy ?= "0.1.11" +PREFERRED_VERSION_libsidplay ?= "1.36.59" +PREFERRED_VERSION_libsigcx0 ?= "0.6.4" +PREFERRED_VERSION_libsm ?= "1.0.3" +PREFERRED_VERSION_libsndfile1 ?= "1.0.17" +PREFERRED_VERSION_libsoundgen ?= "0.6" +PREFERRED_VERSION_libsoup ?= "2.2.100" +PREFERRED_VERSION_libspf2 ?= "1.0.4" +PREFERRED_VERSION_libspiff ?= "0.7.2" +PREFERRED_VERSION_libssh ?= "0.11" +PREFERRED_VERSION_libsub-exporter-perl ?= "0.970" +PREFERRED_VERSION_libsub-exporter-perl-native ?= "0.970" +PREFERRED_VERSION_libsub-install-perl ?= "0.922" +PREFERRED_VERSION_libsub-install-perl-native ?= "0.922" +PREFERRED_VERSION_libsub-uplevel-perl ?= "0.13" +PREFERRED_VERSION_libsub-uplevel-perl-native ?= "0.13" +PREFERRED_VERSION_libsvg ?= "0.1.4" +PREFERRED_VERSION_libtelepathy ?= "0.0.53" +PREFERRED_VERSION_libtest-builder-tester-perl ?= "1.01" +PREFERRED_VERSION_libtest-differences-perl ?= "0.47" +PREFERRED_VERSION_libtest-exception-perl ?= "0.22" +PREFERRED_VERSION_libtest-mockmodule-perl ?= "0.05" +PREFERRED_VERSION_libtest-output-perl ?= "0.10" +PREFERRED_VERSION_libtext-diff-perl ?= "0.35" +PREFERRED_VERSION_libtext-diff-perl-native ?= "0.35" +PREFERRED_VERSION_libticables ?= "3.9.2" +PREFERRED_VERSION_libticalcs ?= "4.5.9" +PREFERRED_VERSION_libtifiles ?= "0.6.5" +PREFERRED_VERSION_libtinymail ?= "0.0.3" +PREFERRED_VERSION_libtododb ?= "0.11" +PREFERRED_VERSION_libtomcrypt ?= "0.97b" +PREFERRED_VERSION_libtomoe-gtk ?= "0.1.0" +PREFERRED_VERSION_libtool ?= "1.5.10" +PREFERRED_VERSION_libtool-cross ?= "1.5.10" +PREFERRED_VERSION_libtool-native ?= "1.5.10" +PREFERRED_VERSION_libungif ?= "4.1.3" +PREFERRED_VERSION_libupnp ?= "1.3.1" +PREFERRED_VERSION_liburi-perl ?= "1.35" +PREFERRED_VERSION_liburi-perl-native ?= "1.35" +PREFERRED_VERSION_liburiparser ?= "0.5.1" +PREFERRED_VERSION_libusb ?= "0.1.12" +PREFERRED_VERSION_libusb-native ?= "0.1.12" +PREFERRED_VERSION_libversion-perl ?= "0.6701" +PREFERRED_VERSION_libversion-perl-native ?= "0.6701" +PREFERRED_VERSION_libvisual ?= "0.1.3" +PREFERRED_VERSION_libvisual-plugins ?= "0.1.3" +PREFERRED_VERSION_libvncserver ?= "0.8.2" +PREFERRED_VERSION_libvocenabler ?= "0.1" +PREFERRED_VERSION_libvorbis ?= "1.0.1" +PREFERRED_VERSION_libw100 ?= "0.0.2" +PREFERRED_VERSION_libwindowswm ?= "1.0.0" +PREFERRED_VERSION_libwnck ?= "2.13.5" +PREFERRED_VERSION_libwpd ?= "0.8.6" +PREFERRED_VERSION_libx11 ?= "1.1.3" +PREFERRED_VERSION_libx11-native = "1.0.3" +PREFERRED_VERSION_libxau ?= "1.0.3" +PREFERRED_VERSION_libxau-native ?= "1.0.3" +PREFERRED_VERSION_libxaw ?= "1.0.4" +PREFERRED_VERSION_libxcb ?= "1.0" +PREFERRED_VERSION_libxcomposite ?= "0.4.0" +PREFERRED_VERSION_libxcursor ?= "1.1.9" +PREFERRED_VERSION_libxdamage ?= "1.1.1" +PREFERRED_VERSION_libxdmcp ?= "1.0.2" +PREFERRED_VERSION_libxdmcp-native ?= "1.0.2" +PREFERRED_VERSION_libxevie ?= "1.0.2" +PREFERRED_VERSION_libxext ?= "1.0.3" +PREFERRED_VERSION_libxfce4mcs ?= "4.4.1" +PREFERRED_VERSION_libxfce4util ?= "4.4.1" +PREFERRED_VERSION_libxfcegui4 ?= "4.4.1" +PREFERRED_VERSION_libxfixes ?= "4.0.3" +PREFERRED_VERSION_libxfont ?= "1.3.1" +PREFERRED_VERSION_libxfont-native ?= "1.3.0" +PREFERRED_VERSION_libxfontcache ?= "1.0.4" +PREFERRED_VERSION_libxft ?= "2.1.12" +PREFERRED_VERSION_libxi ?= "1.1.3" +PREFERRED_VERSION_libxine ?= "1.1.0" +PREFERRED_VERSION_libxine-fb ?= "1.0" +PREFERRED_VERSION_libxine-x11 ?= "1.0" +PREFERRED_VERSION_libxinerama ?= "1.0.2" +PREFERRED_VERSION_libxkbfile ?= "1.0.4" +PREFERRED_VERSION_libxkbui ?= "1.0.2" +PREFERRED_VERSION_libxml-parser-perl ?= "2.34" +PREFERRED_VERSION_libxml-parser-perl-native ?= "2.34" +PREFERRED_VERSION_libxml2 ?= "2.6.29" +PREFERRED_VERSION_libxml2-native ?= "2.6.29" +PREFERRED_VERSION_libxmu ?= "1.0.3" +PREFERRED_VERSION_libxp ?= "1.0.0" +PREFERRED_VERSION_libxpm ?= "3.5.7" +PREFERRED_VERSION_libxprintapputil ?= "1.0.1" +PREFERRED_VERSION_libxprintutil ?= "1.0.1" +PREFERRED_VERSION_libxrandr ?= "1.2.2" +PREFERRED_VERSION_libxrender ?= "0.9.4" +PREFERRED_VERSION_libxres ?= "1.0.3" +PREFERRED_VERSION_libxscrnsaver ?= "1.1.2" +PREFERRED_VERSION_libxsettings ?= "0.11" +PREFERRED_VERSION_libxsettings-client ?= "0.17" +PREFERRED_VERSION_libxslt ?= "1.1.21" +PREFERRED_VERSION_libxslt-native ?= "1.1.21" +PREFERRED_VERSION_libxt ?= "1.0.5" +PREFERRED_VERSION_libxtrap ?= "1.0.0" +PREFERRED_VERSION_libxtst ?= "1.0.3" +PREFERRED_VERSION_libxv ?= "1.0.3" +PREFERRED_VERSION_libxvmc ?= "1.0.4" +PREFERRED_VERSION_libxxf86dga ?= "1.0.2" +PREFERRED_VERSION_libxxf86misc ?= "1.0.1" +PREFERRED_VERSION_libxxf86vm ?= "1.0.1" +PREFERRED_VERSION_libyaml-perl ?= "0.62" +PREFERRED_VERSION_libyaml-perl-native ?= "0.62" +PREFERRED_VERSION_lighttpd ?= "1.4.18" +PREFERRED_VERSION_lineak ?= "0.8.3" +PREFERRED_VERSION_linphone ?= "1.6.0" +PREFERRED_VERSION_linphone-hh ?= "0.12.2.hh1" +PREFERRED_VERSION_linux-hotplug ?= "20040920" +PREFERRED_VERSION_linux-libc-headers ?= "2.6.22" +PREFERRED_VERSION_lisa ?= "0.2.2" +PREFERRED_VERSION_live555 ?= "20051005" +PREFERRED_VERSION_llvm ?= "2.0" +PREFERRED_VERSION_llvm-native ?= "2.1" +PREFERRED_VERSION_lmbench ?= "2.0.4" +PREFERRED_VERSION_lmsensors-apps ?= "2.10.1" +PREFERRED_VERSION_lndir ?= "1.0.1" +PREFERRED_VERSION_loader ?= "0.04" +PREFERRED_VERSION_login-manager ?= "1.0" +PREFERRED_VERSION_logrotate ?= "3.7.1" +PREFERRED_VERSION_logrotate-script ?= "cvs" +PREFERRED_VERSION_loudmouth ?= "1.2.2" +PREFERRED_VERSION_lrzsz ?= "0.12.20" +PREFERRED_VERSION_lsh ?= "1.5.5" +PREFERRED_VERSION_lsof ?= "4.78" +PREFERRED_VERSION_ltp ?= "20070228" +PREFERRED_VERSION_ltrace ?= "0.4" +PREFERRED_VERSION_lttng-control ?= "0.12" +PREFERRED_VERSION_lttng-viewer ?= "0.8.41-20060512" +PREFERRED_VERSION_lua ?= "5.0.2" +PREFERRED_VERSION_lua-gtk2 ?= "0.3" +PREFERRED_VERSION_lua-native ?= "5.0.2" +PREFERRED_VERSION_luit ?= "1.0.2" +PREFERRED_VERSION_lvm2 ?= "2.01.15" +PREFERRED_VERSION_lxt ?= "1.0" +PREFERRED_VERSION_lyx ?= "1.4.4" +PREFERRED_VERSION_lzma ?= "4.17" +PREFERRED_VERSION_lzma-native ?= "4.17" +PREFERRED_VERSION_lzo ?= "1.08" +PREFERRED_VERSION_lzo-native ?= "1.08" +PREFERRED_VERSION_m4 ?= "1.4.8" +PREFERRED_VERSION_m4-native ?= "1.4.8" +PREFERRED_VERSION_macchanger ?= "1.5.0" +PREFERRED_VERSION_madfu ?= "1.2" +PREFERRED_VERSION_madplay ?= "0.15.2b" +PREFERRED_VERSION_mahjongg ?= "1.0.0" +PREFERRED_VERSION_mailutils ?= "0.3.1" +PREFERRED_VERSION_mailx ?= "8.1.2-0.20050715cvs" +PREFERRED_VERSION_make ?= "3.81" +PREFERRED_VERSION_make-native ?= "3.81" +PREFERRED_VERSION_makedepend ?= "1.0.1" +PREFERRED_VERSION_makedepend-native ?= "1.0.1" +PREFERRED_VERSION_makedev ?= "2.3.1" +PREFERRED_VERSION_makedevs ?= "1.0.0" +PREFERRED_VERSION_makedevs-native ?= "1.0.0" +PREFERRED_VERSION_makeself-native ?= "cvs" +PREFERRED_VERSION_maki ?= "1.0.4ern" +PREFERRED_VERSION_man ?= "1.5p" +PREFERRED_VERSION_man-pages ?= "2.41" +PREFERRED_VERSION_manufacturers ?= "20031209" +PREFERRED_VERSION_mapnik ?= "0.4.0" +PREFERRED_VERSION_maradns ?= "1.0.39" +PREFERRED_VERSION_masqmail ?= "0.2.21" +PREFERRED_VERSION_matchbox ?= "0.9.1" +PREFERRED_VERSION_matchbox-applet-cards ?= "1.0.2" +PREFERRED_VERSION_matchbox-applet-inputmanager ?= "0.6" +PREFERRED_VERSION_matchbox-applet-startup-monitor ?= "0.1" +PREFERRED_VERSION_matchbox-applet-volume ?= "0.1" +PREFERRED_VERSION_matchbox-common ?= "0.9.1" +PREFERRED_VERSION_matchbox-desktop ?= "0.9.1" +PREFERRED_VERSION_matchbox-panel ?= "0.9.3" +PREFERRED_VERSION_matchbox-panel-hacks ?= "0.3-1" +PREFERRED_VERSION_matchbox-panel-manager ?= "0.1" +PREFERRED_VERSION_matchbox-theme-sato ?= "0.1" +PREFERRED_VERSION_matchbox-themes-extra ?= "0.3" +PREFERRED_VERSION_matchbox-themes-gtk ?= "1.0" +PREFERRED_VERSION_matchbox-wm ?= "1.2" +PREFERRED_VERSION_mathomatic ?= "unstable" +PREFERRED_VERSION_matrixssl ?= "1.1.1" +PREFERRED_VERSION_mb-applet-tasks ?= "1.0.0" +PREFERRED_VERSION_mb-desktop-xine ?= "0.4" +PREFERRED_VERSION_mbmerlin ?= "0.8.1-2" +PREFERRED_VERSION_mc ?= "4.6.1" +PREFERRED_VERSION_mce-dev ?= "1.5.6" +PREFERRED_VERSION_mdadm ?= "2.5.5" +PREFERRED_VERSION_mdev ?= "1.2.1" +PREFERRED_VERSION_mdk2 ?= "v33" +PREFERRED_VERSION_memedit ?= "0.7" +PREFERRED_VERSION_memtester ?= "4.0.6" +PREFERRED_VERSION_mesa ?= "6.5.2" +PREFERRED_VERSION_mesa-dri ?= "6.5.2" +PREFERRED_VERSION_meta-e-x11 ?= "1.0" +PREFERRED_VERSION_meta-e-x11-core ?= "1.0" +PREFERRED_VERSION_meta-gpe ?= "1.0" +PREFERRED_VERSION_meta-gpe-extras ?= "1.0" +PREFERRED_VERSION_meta-gpephone ?= "1.0" +PREFERRED_VERSION_meta-maemo ?= "1.0" +PREFERRED_VERSION_meta-sdk ?= "1.0" +PREFERRED_VERSION_meta-sdk-gpe ?= "1.0" +PREFERRED_VERSION_meta-sdk-sbox ?= "1.0" +PREFERRED_VERSION_meta-sdk-sbox-gpe ?= "1.0" +PREFERRED_VERSION_meta-sdl ?= "1.0" +PREFERRED_VERSION_meta-sectest-gpe ?= "1.0" +PREFERRED_VERSION_meta-toolchain ?= "1.0" +PREFERRED_VERSION_metakit ?= "2.4.9.3" +PREFERRED_VERSION_metalog ?= "0.7" +PREFERRED_VERSION_mgetty ?= "1.1.30" +PREFERRED_VERSION_miau ?= "0.5.3" +PREFERRED_VERSION_micro-emacs ?= "20060909" +PREFERRED_VERSION_microcom ?= "1.02" +PREFERRED_VERSION_microwindows ?= "0.90" +PREFERRED_VERSION_midori ?= "0.0.13" +PREFERRED_VERSION_midpath ?= "0.1" +PREFERRED_VERSION_midpath-alsa ?= "0.1" +PREFERRED_VERSION_midpath-cldc ?= "0.1" +PREFERRED_VERSION_midpath-cldc-native ?= "0.1" +PREFERRED_VERSION_midpath-cldc-sdl ?= "0.1" +PREFERRED_VERSION_midpath-cldc-x11 ?= "0.1" +PREFERRED_VERSION_midpath-gtk ?= "0.1" +PREFERRED_VERSION_midpath-qt3x11 ?= "0.1" +PREFERRED_VERSION_midpath-qte ?= "0.1" +PREFERRED_VERSION_midpath-test ?= "0.1" +PREFERRED_VERSION_mikmod ?= "3.2.2-beta1" +PREFERRED_VERSION_mileage ?= "4.2.0-cvs-20060814" +PREFERRED_VERSION_militaryalphabet ?= "0.2.1" +PREFERRED_VERSION_mime-support ?= "3.28" +PREFERRED_VERSION_miniclipboard ?= "0.3" +PREFERRED_VERSION_minicom ?= "2.1" +PREFERRED_VERSION_minifo-modules ?= "0.6.1-pre1" +PREFERRED_VERSION_miniinit ?= "1.0" +PREFERRED_VERSION_minimix ?= "0.9" +PREFERRED_VERSION_minipredict ?= "1.0" +PREFERRED_VERSION_mipv6 ?= "1.1-v2.4.26" +PREFERRED_VERSION_misdn ?= "cvs" +PREFERRED_VERSION_mkbot ?= "0.3" +PREFERRED_VERSION_mkfontdir ?= "1.0.3" +PREFERRED_VERSION_mkfontdir-native ?= "1.0.3" +PREFERRED_VERSION_mobilemesh ?= "1.2" +PREFERRED_VERSION_moc ?= "2.4.0" +PREFERRED_VERSION_modphp ?= "5.1.6" +PREFERRED_VERSION_modplugplay ?= "1.0" +PREFERRED_VERSION_module-init-tools ?= "3.2.2" +PREFERRED_VERSION_module-init-tools-cross ?= "3.2.2" +PREFERRED_VERSION_modutils ?= "2.4.27" +PREFERRED_VERSION_modutils-collateral ?= "1.0" +PREFERRED_VERSION_modutils-cross ?= "2.4.27" +PREFERRED_VERSION_modutils-initscripts ?= "1.0" +PREFERRED_VERSION_moin ?= "1.5.8" +PREFERRED_VERSION_mono ?= "1.2.5.1" +PREFERRED_VERSION_mono-mcs-intermediate ?= "1.2.5.1" +PREFERRED_VERSION_mono-native ?= "1.2.5.1" +PREFERRED_VERSION_monotone-4 ?= "0.19" +PREFERRED_VERSION_monotone-5 ?= "0.25.2" +PREFERRED_VERSION_monotone-6 ?= "0.34" +PREFERRED_VERSION_motion ?= "3.2.6" +PREFERRED_VERSION_mousepad ?= "0.2.12" +PREFERRED_VERSION_mp3blaster ?= "3.2.3" +PREFERRED_VERSION_mpc ?= "0.12.1" +PREFERRED_VERSION_mpeg2dec ?= "0.4.0b" +PREFERRED_VERSION_mpfr ?= "2.3.0" +PREFERRED_VERSION_mpfr-native ?= "2.3.0" +PREFERRED_VERSION_mpg123 ?= "0.66" +PREFERRED_VERSION_mpg321 ?= "0.2.10" +PREFERRED_VERSION_mplayer-common ?= "0.0.1" +PREFERRED_VERSION_mrxvt ?= "0.5.2" +PREFERRED_VERSION_msmtp ?= "1.4.10" +PREFERRED_VERSION_msn-cap ?= "1.0" +PREFERRED_VERSION_msynctool ?= "0.22" +PREFERRED_VERSION_mt-daapd ?= "0.2.3" +PREFERRED_VERSION_mtools ?= "3.9.9" +PREFERRED_VERSION_mtools-native ?= "3.9.9" +PREFERRED_VERSION_mtpaint ?= "3.02" +PREFERRED_VERSION_mtr ?= "0.65" +PREFERRED_VERSION_multisync ?= "0.90.18" +PREFERRED_VERSION_murasaki ?= "0.8.8" +PREFERRED_VERSION_mutt ?= "1.5.15" +PREFERRED_VERSION_mysql ?= "4.1.18" +PREFERRED_VERSION_mysql-native ?= "4.1.18" +PREFERRED_VERSION_mythfront-config ?= "1.10" +PREFERRED_VERSION_mythfront-session ?= "1.5" +PREFERRED_VERSION_nabi ?= "0.17" +PREFERRED_VERSION_nail ?= "11.21" +PREFERRED_VERSION_nano ?= "2.0.6" +PREFERRED_VERSION_nasm-native ?= "0.98.38" +PREFERRED_VERSION_nautilus ?= "2.12.2" +PREFERRED_VERSION_nautilus-cd-burner ?= "2.8.5" +PREFERRED_VERSION_navit ?= "0.0.3" +PREFERRED_VERSION_nbd ?= "2.8.7" +PREFERRED_VERSION_ncftp ?= "3.2.0" +PREFERRED_VERSION_ncmpc ?= "0.11.1" +PREFERRED_VERSION_ncurses ?= "5.4" +PREFERRED_VERSION_ncurses-native ?= "5.4" +PREFERRED_VERSION_ndisc6 ?= "0.6.7" +PREFERRED_VERSION_neon ?= "0.25.5" +PREFERRED_VERSION_net-snmp ?= "5.4.1" +PREFERRED_VERSION_net-tools ?= "1.60" +PREFERRED_VERSION_net6 ?= "1.3.1" +PREFERRED_VERSION_netatalk ?= "2.0.3" +PREFERRED_VERSION_netbase ?= "4.21" +PREFERRED_VERSION_netcat ?= "0.7.1" +PREFERRED_VERSION_netpbm ?= "10.28" +PREFERRED_VERSION_netperf ?= "2.4.2" +PREFERRED_VERSION_network-manager-applet ?= "0.6.5" +PREFERRED_VERSION_network-suspend-scripts ?= "1.1" +PREFERRED_VERSION_nfs-utils ?= "1.0.6" +PREFERRED_VERSION_ngrep ?= "1.42" +PREFERRED_VERSION_nis-all ?= "1.0" +PREFERRED_VERSION_nkf ?= "2.07" +PREFERRED_VERSION_nkf-native ?= "2.07" +PREFERRED_VERSION_nmap ?= "4.20" +PREFERRED_VERSION_nmixer ?= "2.0" +PREFERRED_VERSION_nmm ?= "0.0.2" +PREFERRED_VERSION_nogravity ?= "2.0" +PREFERRED_VERSION_notecase ?= "1.2.6" +PREFERRED_VERSION_notez ?= "1.1.0" +PREFERRED_VERSION_notification-daemon ?= "0.3.7" +PREFERRED_VERSION_nsd ?= "2.0.0" +PREFERRED_VERSION_ntfs-3g ?= "1.0" +PREFERRED_VERSION_ntop ?= "3.0" +PREFERRED_VERSION_ntp ?= "4.2.2p3" +PREFERRED_VERSION_ntp-ssl ?= "4.1.2" +PREFERRED_VERSION_ntpclient ?= "2003_194" +PREFERRED_VERSION_nunome ?= "1.0.2" +PREFERRED_VERSION_nylon-feed ?= "1.0" +PREFERRED_VERSION_obby ?= "0.4.1" +PREFERRED_VERSION_obexftp ?= "0.20" +PREFERRED_VERSION_obexpush ?= "1.0.0" +PREFERRED_VERSION_obexpush-native ?= "1.0.0" +PREFERRED_VERSION_octave ?= "2.1.73" +PREFERRED_VERSION_offlineimap ?= "4.0.14" +PREFERRED_VERSION_olsr ?= "0.3-1" +PREFERRED_VERSION_olsrd ?= "0.5.3" +PREFERRED_VERSION_omext ?= "0.2" +PREFERRED_VERSION_omniorb ?= "4.0.7" +PREFERRED_VERSION_omniorb-native ?= "4.0.7" +PREFERRED_VERSION_openal ?= "0.0.8" +PREFERRED_VERSION_openh323 ?= "1.13.5.4" +PREFERRED_VERSION_openjade ?= "1.3.2" +PREFERRED_VERSION_openjade-native ?= "1.3.2" +PREFERRED_VERSION_openldap ?= "2.3.11" +PREFERRED_VERSION_openntpd ?= "3.9p1" +PREFERRED_VERSION_openobex ?= "1.3" +PREFERRED_VERSION_openpbx.org ?= "1.2_rc3" +PREFERRED_VERSION_openpbx.org-perl ?= "1.0" +PREFERRED_VERSION_openprotium-init ?= "0.10" +PREFERRED_VERSION_openprotium-packages ?= "1.0" +PREFERRED_VERSION_opensp ?= "1.5" +PREFERRED_VERSION_opensp-native ?= "1.5" +PREFERRED_VERSION_openssh ?= "4.6p1" +PREFERRED_VERSION_openssl ?= "0.9.7g" +PREFERRED_VERSION_openssl-native ?= "0.9.7g" +PREFERRED_VERSION_openswan ?= "2.4.7" +PREFERRED_VERSION_openttd ?= "0.4.0.1" +PREFERRED_VERSION_openvpn ?= "2.0.9" +PREFERRED_VERSION_oplinux-packages ?= "1.0" +PREFERRED_VERSION_oprofile ?= "0.9.3" +PREFERRED_VERSION_orage ?= "4.4.1" +PREFERRED_VERSION_orbit2 ?= "2.14.0" +PREFERRED_VERSION_orbit2-native ?= "2.14.0" +PREFERRED_VERSION_orinoco-conf ?= "1.0" +PREFERRED_VERSION_orinoco-modules ?= "0.15rc2" +PREFERRED_VERSION_orpheus ?= "1.5" +PREFERRED_VERSION_ortp ?= "0.7.1" +PREFERRED_VERSION_osso-af-settings ?= "0.8.5" +PREFERRED_VERSION_osso-af-startup ?= "0.28-1" +PREFERRED_VERSION_osso-af-utils ?= "0.4" +PREFERRED_VERSION_osso-app-killer ?= "0.4-3" +PREFERRED_VERSION_osso-application-installer ?= "1.0.03-1" +PREFERRED_VERSION_osso-bttools ?= "0.25.1" +PREFERRED_VERSION_osso-core-config ?= "200515.1" +PREFERRED_VERSION_osso-dsp-headers ?= "0.1" +PREFERRED_VERSION_osso-esd ?= "0.5" +PREFERRED_VERSION_osso-gwconnect ?= "1.0.8" +PREFERRED_VERSION_osso-gwobex ?= "0.26.1" +PREFERRED_VERSION_osso-ic-oss ?= "1.0.4" +PREFERRED_VERSION_osso-screenshot-tool ?= "1.20-1" +PREFERRED_VERSION_osso-sounds ?= "0.3-1" +PREFERRED_VERSION_osso-thumbnail ?= "0.7" +PREFERRED_VERSION_otpkeygen ?= "1.3.0" +PREFERRED_VERSION_outo ?= "0.1.1" +PREFERRED_VERSION_p3scan ?= "2.9.05d" +PREFERRED_VERSION_p4 ?= "05.2" +PREFERRED_VERSION_package-index ?= "1.0" +PREFERRED_VERSION_pad-native ?= "1.0" +PREFERRED_VERSION_pairs ?= "1.1.1" +PREFERRED_VERSION_pango ?= "1.18.1" +PREFERRED_VERSION_panoramixext ?= "1.1" +PREFERRED_VERSION_parted ?= "1.8.7" +PREFERRED_VERSION_patch ?= "2.5.9" +PREFERRED_VERSION_patcher ?= "20040913" +PREFERRED_VERSION_patcher-native ?= "20040913" +PREFERRED_VERSION_patchutils ?= "0.2.31" +PREFERRED_VERSION_pax-utils ?= "0.1.13" +PREFERRED_VERSION_pax-utils-native ?= "0.1.13" +PREFERRED_VERSION_pbltool-native ?= "0.2" +PREFERRED_VERSION_pciutils ?= "2.2.4" +PREFERRED_VERSION_pcmanfm ?= "0.3.2-beta" +PREFERRED_VERSION_pcmcia-cs ?= "3.2.8" +PREFERRED_VERSION_pcmciautils ?= "014" +PREFERRED_VERSION_pdamaze ?= "1.0.0" +PREFERRED_VERSION_pdm ?= "1.0" +PREFERRED_VERSION_perl ?= "5.8.8" +PREFERRED_VERSION_perl-native ?= "5.8.8" +PREFERRED_VERSION_petitepainture ?= "1.5" +PREFERRED_VERSION_phalanx ?= "22" +PREFERRED_VERSION_phoneserver ?= "1.0" +PREFERRED_VERSION_php ?= "5.2.0" +PREFERRED_VERSION_php-native ?= "5.2.0" +PREFERRED_VERSION_picocom ?= "1.4" +PREFERRED_VERSION_pidgin ?= "2.2.1" +PREFERRED_VERSION_pine ?= "4.64" +PREFERRED_VERSION_pipeman ?= "1.0.0" +PREFERRED_VERSION_pipepanic ?= "0.1.1" +PREFERRED_VERSION_pivotinit ?= "1.0.0" +PREFERRED_VERSION_pixman ?= "0.9.6" +PREFERRED_VERSION_pixops-test ?= "1.0" +PREFERRED_VERSION_pkgconfig ?= "0.22" +PREFERRED_VERSION_pkgconfig-native ?= "0.22" +PREFERRED_VERSION_plinciv ?= "0.16" +PREFERRED_VERSION_plone ?= "2.1.2" +PREFERRED_VERSION_plot ?= "0.28" +PREFERRED_VERSION_pme ?= "1.0.3" +PREFERRED_VERSION_pmount ?= "0.9.4" +PREFERRED_VERSION_pmtools ?= "20050926" +PREFERRED_VERSION_poboxserver ?= "1.2.5" +PREFERRED_VERSION_pocketcellar ?= "1.1" +PREFERRED_VERSION_pocketsphinx ?= "0.2.1" +PREFERRED_VERSION_poppler ?= "0.6" +PREFERRED_VERSION_poppler-data ?= "0.1" +PREFERRED_VERSION_popt ?= "1.7" +PREFERRED_VERSION_popt-native ?= "1.7" +PREFERRED_VERSION_poptop ?= "1.3.4" +PREFERRED_VERSION_poqetpresenter ?= "0.0.6" +PREFERRED_VERSION_portabase ?= "1.9" +PREFERRED_VERSION_portmap ?= "6.0" +PREFERRED_VERSION_postfix ?= "2.0.20" +PREFERRED_VERSION_postfix-native ?= "2.0.20" +PREFERRED_VERSION_postgresql ?= "8.1.8" +PREFERRED_VERSION_povray ?= "3.6.1" +PREFERRED_VERSION_powermanga ?= "0.79" +PREFERRED_VERSION_powernowd ?= "0.96" +PREFERRED_VERSION_powertop ?= "1.8" +PREFERRED_VERSION_ppp ?= "2.4.3" +PREFERRED_VERSION_ppp-dsl ?= "0.1-monolithic" +PREFERRED_VERSION_pptp-linux ?= "1.7.1" +PREFERRED_VERSION_prboom ?= "2.2.6" +PREFERRED_VERSION_prboom-devconfig ?= "1.0" +PREFERRED_VERSION_prelink ?= "20060712" +PREFERRED_VERSION_printproto ?= "1.0.3" +PREFERRED_VERSION_prism-firmware ?= "1.0" +PREFERRED_VERSION_prism2-firmware-update ?= "1.7.4" +PREFERRED_VERSION_prism54-firmware ?= "1.0.4.3" +PREFERRED_VERSION_prism54-module ?= "1.2" +PREFERRED_VERSION_prismstumbler ?= "0.7.3" +PREFERRED_VERSION_privoxy ?= "3.0.3" +PREFERRED_VERSION_procps ?= "3.2.7" +PREFERRED_VERSION_proj-4 ?= "4.9" +PREFERRED_VERSION_proj-4-native ?= "4.9" +PREFERRED_VERSION_psmisc ?= "22.2" +PREFERRED_VERSION_psplash-zap ?= "1.0" +PREFERRED_VERSION_pth ?= "2.0.2" +PREFERRED_VERSION_pulseaudio ?= "0.9.6" +PREFERRED_VERSION_puppy ?= "1.11" +PREFERRED_VERSION_puzz-le ?= "2.0.0" +PREFERRED_VERSION_puzzles ?= "r7436" +PREFERRED_VERSION_pvrusb2-mci ?= "20060903" +PREFERRED_VERSION_pwdutils ?= "2.6" +PREFERRED_VERSION_pwlib ?= "1.5.2" +PREFERRED_VERSION_pwmpi ?= "2.2.7" +PREFERRED_VERSION_pxaregs ?= "1.14" +PREFERRED_VERSION_python ?= "2.5.1" +PREFERRED_VERSION_python-ao ?= "0.82" +PREFERRED_VERSION_python-constraint ?= "1.1" +PREFERRED_VERSION_python-dbus ?= "0.81.1" +PREFERRED_VERSION_python-fam ?= "1.1.1" +PREFERRED_VERSION_python-fnorb ?= "1.3" +PREFERRED_VERSION_python-fpconst ?= "0.6.0" +PREFERRED_VERSION_python-gammu ?= "0.24" +PREFERRED_VERSION_python-gmpy ?= "1.0.1" +PREFERRED_VERSION_python-gnosis ?= "1.2.2" +PREFERRED_VERSION_python-gst ?= "0.10.8" +PREFERRED_VERSION_python-hmm ?= "0.4" +PREFERRED_VERSION_python-imaging ?= "1.1.6" +PREFERRED_VERSION_python-imdbpy ?= "3.1" +PREFERRED_VERSION_python-inotify ?= "0.1.0" +PREFERRED_VERSION_python-irclib ?= "0.4.6" +PREFERRED_VERSION_python-itools ?= "0.16.5" +PREFERRED_VERSION_python-libgmail ?= "0.1.6" +PREFERRED_VERSION_python-logilab-common ?= "0.9.3" +PREFERRED_VERSION_python-lxml ?= "1.3.3" +PREFERRED_VERSION_python-mad ?= "0.6" +PREFERRED_VERSION_python-mysqldb ?= "1.2.1" +PREFERRED_VERSION_python-native ?= "2.5.1" +PREFERRED_VERSION_python-numarray ?= "1.1.1" +PREFERRED_VERSION_python-numeric ?= "23.7" +PREFERRED_VERSION_python-ogg ?= "1.3" +PREFERRED_VERSION_python-pexpect ?= "2.1" +PREFERRED_VERSION_python-pybluez ?= "0.13" +PREFERRED_VERSION_python-pycairo ?= "1.4.0" +PREFERRED_VERSION_python-pychecker ?= "0.8.17" +PREFERRED_VERSION_python-pycodes ?= "1.2" +PREFERRED_VERSION_python-pycrypto ?= "2.0.1" +PREFERRED_VERSION_python-pycurl ?= "7.16.4" +PREFERRED_VERSION_python-pyephem ?= "3.7.2a" +PREFERRED_VERSION_python-pyfits ?= "1.1" +PREFERRED_VERSION_python-pyflakes ?= "0.2.1" +PREFERRED_VERSION_python-pygame ?= "1.7.1" +PREFERRED_VERSION_python-pygnome ?= "2.16.2" +PREFERRED_VERSION_python-pygobject ?= "2.12.3" +PREFERRED_VERSION_python-pygobject-native ?= "2.12.3" +PREFERRED_VERSION_python-pygoogle ?= "0.6" +PREFERRED_VERSION_python-pygtk ?= "2.10.4" +PREFERRED_VERSION_python-pygtk-1.2 ?= "0.6.12" +PREFERRED_VERSION_python-pyid3lib ?= "0.5.1" +PREFERRED_VERSION_python-pyiw ?= "0.3.3" +PREFERRED_VERSION_python-pylinda ?= "0.6" +PREFERRED_VERSION_python-pylint ?= "0.13.2" +PREFERRED_VERSION_python-pymetar ?= "0.11" +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-pyro ?= "3.7" +PREFERRED_VERSION_python-pyserial ?= "2.2" +PREFERRED_VERSION_python-pytester ?= "0.6.0" +PREFERRED_VERSION_python-pythondaap ?= "0.4" +PREFERRED_VERSION_python-pyvisa ?= "1.1" +PREFERRED_VERSION_python-pyweather ?= "0.7.0" +PREFERRED_VERSION_python-pywpa ?= "0.3.4" +PREFERRED_VERSION_python-pyxml ?= "0.8.4" +PREFERRED_VERSION_python-pyxmlrpc ?= "0.8.8.3" +PREFERRED_VERSION_python-pyzeroconf ?= "0.12" +PREFERRED_VERSION_python-scapy ?= "1.1.1" +PREFERRED_VERSION_python-scons ?= "0.97" +PREFERRED_VERSION_python-scons-native ?= "0.97" +PREFERRED_VERSION_python-setuptools ?= "0.6c6" +PREFERRED_VERSION_python-sgmlop ?= "1.1" +PREFERRED_VERSION_python-simplejson ?= "1.7.1" +PREFERRED_VERSION_python-snmplib ?= "0.1.1" +PREFERRED_VERSION_python-soappy ?= "0.11.6" +PREFERRED_VERSION_python-spydi ?= "0.9.7" +PREFERRED_VERSION_python-spyro ?= "0.9.22" +PREFERRED_VERSION_python-sqlobject ?= "0.9.1" +PREFERRED_VERSION_python-sword ?= "1.5.9" +PREFERRED_VERSION_python-urwid ?= "0.9.8.1" +PREFERRED_VERSION_python-vmaps ?= "1.1" +PREFERRED_VERSION_python-vorbis ?= "1.3" +PREFERRED_VERSION_python-webpy ?= "0.21" +PREFERRED_VERSION_python24 ?= "2.4.4" +PREFERRED_VERSION_python24-native ?= "2.4.0" +PREFERRED_VERSION_python24-pyqt2 ?= "3.13" +PREFERRED_VERSION_python24-pyqwt2 ?= "3.10" +PREFERRED_VERSION_python24-sip ?= "4.1.1" +PREFERRED_VERSION_qc-usb-messenger ?= "1.1" +PREFERRED_VERSION_qclockchange ?= "0.1a" +PREFERRED_VERSION_qcoptest ?= "0.1.1" +PREFERRED_VERSION_qfish2 ?= "1.1.0" +PREFERRED_VERSION_qgis ?= "0.8.1" +PREFERRED_VERSION_qiv ?= "1.9" +PREFERRED_VERSION_qjackctl ?= "0.3.1a" +PREFERRED_VERSION_qmake-native ?= "1.07a" +PREFERRED_VERSION_qmake2-native ?= "2.10a" +PREFERRED_VERSION_qmatrix ?= "1.1.0" +PREFERRED_VERSION_qof ?= "0.7.2" +PREFERRED_VERSION_qolyester ?= "20050728" +PREFERRED_VERSION_qpdf2 ?= "2.2.1" +PREFERRED_VERSION_qpe-gaim ?= "20041030" +PREFERRED_VERSION_qpe-inputhelper-applet ?= "1.0.0" +PREFERRED_VERSION_qpe-libgaim ?= "1.5.0" +PREFERRED_VERSION_qpealarmclock ?= "1.0.9" +PREFERRED_VERSION_qpealarmclockapplet ?= "1.0.9" +PREFERRED_VERSION_qpegps ?= "0.9.3.1" +PREFERRED_VERSION_qpenmapfe ?= "1.0.0" +PREFERRED_VERSION_qpf-arabic ?= "1.0" +PREFERRED_VERSION_qpf-bitstream-vera ?= "1.10" +PREFERRED_VERSION_qpf-bitstream-vera-sans-mono ?= "1.10" +PREFERRED_VERSION_qpf-font-common ?= "1.0" +PREFERRED_VERSION_qpf-freemono ?= "1.0" +PREFERRED_VERSION_qpf-freeserif ?= "1.0" +PREFERRED_VERSION_qpf-helvetica ?= "1.0" +PREFERRED_VERSION_qpf-hunkysans ?= "0.3.0" +PREFERRED_VERSION_qpf-hunkyserif ?= "0.3.0" +PREFERRED_VERSION_qpf-qte ?= "2.3.10" +PREFERRED_VERSION_qpf-unifont ?= "1.0" +PREFERRED_VERSION_qpf-unismall ?= "1.0.0" +PREFERRED_VERSION_qpf-utopia ?= "1.0" +PREFERRED_VERSION_qplot ?= "2.0.1-cvs-20020420" +PREFERRED_VERSION_qpobox ?= "0.5.4" +PREFERRED_VERSION_qpphoto ?= "1.0.2" +PREFERRED_VERSION_qscintilla ?= "1.65-gpl-1.6" +PREFERRED_VERSION_qsvn ?= "0.3.0" +PREFERRED_VERSION_qt-x11-free ?= "3.3.7" +PREFERRED_VERSION_qt-x11-free-native ?= "3.3.5" +PREFERRED_VERSION_qt4-x11-free ?= "4.3.3" +PREFERRED_VERSION_qtplot ?= "0.2" +PREFERRED_VERSION_quagga ?= "0.99.8" +PREFERRED_VERSION_quake1 ?= "0.0.1" +PREFERRED_VERSION_quetoo ?= "0.6.1" +PREFERRED_VERSION_quilt ?= "0.45" +PREFERRED_VERSION_quilt-native ?= "0.45" +PREFERRED_VERSION_qwt ?= "4.2.0rc1" +PREFERRED_VERSION_qxmp ?= "1.0" +PREFERRED_VERSION_r-native ?= "2.0.0" +PREFERRED_VERSION_radlib ?= "2.6.2" +PREFERRED_VERSION_radlib-mysql ?= "2.6.2" +PREFERRED_VERSION_radvd ?= "1.0" +PREFERRED_VERSION_rage ?= "0.2.0.003" +PREFERRED_VERSION_randrext ?= "1.0" +PREFERRED_VERSION_randrproto ?= "1.2.1" +PREFERRED_VERSION_rdesktop ?= "1.5.0" +PREFERRED_VERSION_rdiff-backup ?= "1.1.5" +PREFERRED_VERSION_readline ?= "4.3" +PREFERRED_VERSION_readline-native ?= "4.3" +PREFERRED_VERSION_reaim ?= "7.0.1.13" +PREFERRED_VERSION_recode ?= "3.6" +PREFERRED_VERSION_recode-native ?= "3.6" +PREFERRED_VERSION_recordproto ?= "1.13.2" +PREFERRED_VERSION_redfang ?= "2.5" +PREFERRED_VERSION_refdbg ?= "1.2" +PREFERRED_VERSION_regex-markup ?= "0.10.0" +PREFERRED_VERSION_reiser4progs ?= "1.0.4" +PREFERRED_VERSION_reiserfsprogs ?= "3.6.19" +PREFERRED_VERSION_renderproto ?= "0.9.3" +PREFERRED_VERSION_resistorui ?= "0.9" +PREFERRED_VERSION_resolvconf ?= "1.28" +PREFERRED_VERSION_resourceext ?= "1.0" +PREFERRED_VERSION_resourceproto ?= "1.0.2" +PREFERRED_VERSION_rfakeap ?= "0.2" +PREFERRED_VERSION_rglueap ?= "0.1" +PREFERRED_VERSION_rhythmbox ?= "0.8.7" +PREFERRED_VERSION_rlpr ?= "2.05" +PREFERRED_VERSION_roadmap-gtk2 ?= "1.1.0" +PREFERRED_VERSION_rott ?= "1.0" +PREFERRED_VERSION_rox-filer ?= "2.5" +PREFERRED_VERSION_rp-pppoe ?= "3.8" +PREFERRED_VERSION_rpm ?= "4.4" +PREFERRED_VERSION_rrdtool ?= "1.0.49" +PREFERRED_VERSION_rsync ?= "2.6.9" +PREFERRED_VERSION_rt2570 ?= "1.1.0-b2" +PREFERRED_VERSION_rt2570-k2wrlz ?= "1.6.1" +PREFERRED_VERSION_rt73-k2wrlz ?= "2.0.1" +PREFERRED_VERSION_rtaudio-tests ?= "3.0.1" +PREFERRED_VERSION_ruby ?= "1.8.5" +PREFERRED_VERSION_ruby-native ?= "1.8.5" +PREFERRED_VERSION_rxvt ?= "2.8.0" +PREFERRED_VERSION_rxvt-unicode ?= "7.9" +PREFERRED_VERSION_sablevm ?= "1.12" +PREFERRED_VERSION_sablevm-classpath ?= "1.12" +PREFERRED_VERSION_salsa-lib ?= "0.0.1" +PREFERRED_VERSION_samba ?= "3.0.23c" +PREFERRED_VERSION_samba-essential ?= "3.0.20" +PREFERRED_VERSION_sane-backends ?= "1.0.17" +PREFERRED_VERSION_sane-frontends ?= "1.0.13" +PREFERRED_VERSION_sato-icon-theme ?= "0.1" +PREFERRED_VERSION_sbagen ?= "1.4.1" +PREFERRED_VERSION_sbrsh ?= "7.1" +PREFERRED_VERSION_scap ?= "0.1" +PREFERRED_VERSION_sccd ?= "1.0" +PREFERRED_VERSION_scew ?= "0.3.1" +PREFERRED_VERSION_schedstat-utils ?= "1.0" +PREFERRED_VERSION_schroedinger ?= "0.2.0.0" +PREFERRED_VERSION_screen ?= "4.0.2" +PREFERRED_VERSION_scrnsaverproto ?= "1.1.0" +PREFERRED_VERSION_scsi-idle ?= "2.4.23" +PREFERRED_VERSION_sctzap ?= "0.0cvs20060814" +PREFERRED_VERSION_scummvm ?= "0.10.0" +PREFERRED_VERSION_scummvm-qpe ?= "0.6.1b" +PREFERRED_VERSION_scw ?= "0.4.3" +PREFERRED_VERSION_sdcc ?= "2.5.0" +PREFERRED_VERSION_sdcc-native ?= "2.5.0" +PREFERRED_VERSION_sdk-default-icons ?= "0.2-1" +PREFERRED_VERSION_sdk-default-theme ?= "0.1-1" +PREFERRED_VERSION_sdk-default-theme-config ?= "1.0-1" +PREFERRED_VERSION_sdl-perl ?= "1.20.3" +PREFERRED_VERSION_sed ?= "4.1.2" +PREFERRED_VERSION_sed-native ?= "4.1.2" +PREFERRED_VERSION_ser ?= "0.9.0" +PREFERRED_VERSION_serload-native ?= "1.0" +PREFERRED_VERSION_sessreg ?= "1.0.3" +PREFERRED_VERSION_setmixer ?= "27DEC94" +PREFERRED_VERSION_setserial ?= "2.17" +PREFERRED_VERSION_setxkbmap ?= "1.0.4" +PREFERRED_VERSION_sgml-common ?= "0.6.3" +PREFERRED_VERSION_sgml-common-native ?= "0.6.3" +PREFERRED_VERSION_shared-mime-info ?= "0.22" +PREFERRED_VERSION_sharp-compat-libs ?= "0.5" +PREFERRED_VERSION_sharprom-toolchain-native ?= "1.0" +PREFERRED_VERSION_shasum-native ?= "1.0" +PREFERRED_VERSION_shfs-modules ?= "0.35" +PREFERRED_VERSION_shfs-utils ?= "0.35" +PREFERRED_VERSION_shisensho ?= "1.0.0" +PREFERRED_VERSION_shopper ?= "1.2.1" +PREFERRED_VERSION_shorewall ?= "2.0.9-monolithic" +PREFERRED_VERSION_sidplay-base ?= "1.0.9" +PREFERRED_VERSION_sidplayer ?= "1.5.0" +PREFERRED_VERSION_silo ?= "1.4.8" +PREFERRED_VERSION_simh ?= "3.7-1" +PREFERRED_VERSION_simpad-utilities ?= "1.0" +PREFERRED_VERSION_sip3-native ?= "4.0.1" +PREFERRED_VERSION_sipsak ?= "0.9.6" +PREFERRED_VERSION_skippy-xd ?= "0.5.0" +PREFERRED_VERSION_sl ?= "3.03" +PREFERRED_VERSION_slang ?= "1.4.9" +PREFERRED_VERSION_slcalc ?= "1.2.1" +PREFERRED_VERSION_sliderulez ?= "0.92" +PREFERRED_VERSION_slotsig ?= "0.6" +PREFERRED_VERSION_slrn ?= "0.9.8.0" +PREFERRED_VERSION_slsnif ?= "0.4.4" +PREFERRED_VERSION_slugimage-native ?= "1.0" +PREFERRED_VERSION_slugos-init ?= "0.10" +PREFERRED_VERSION_slugos-native ?= "1.0" +PREFERRED_VERSION_slugos-native-packages ?= "1.0" +PREFERRED_VERSION_slugtool ?= "1.0" +PREFERRED_VERSION_slugtool-native ?= "1.0" +PREFERRED_VERSION_slutils ?= "0.1.0" +PREFERRED_VERSION_smartmontools ?= "5.37" +PREFERRED_VERSION_sms ?= "1.1" +PREFERRED_VERSION_sn9c102 ?= "1.32" +PREFERRED_VERSION_snes232 ?= "cvs" +PREFERRED_VERSION_snes9x ?= "1.43-WIP1" +PREFERRED_VERSION_snes9x-sdl ?= "1.39" +PREFERRED_VERSION_snes9x-sdl-qpe ?= "1.39" +PREFERRED_VERSION_socat ?= "1.3.2.1" +PREFERRED_VERSION_sofia-sip ?= "1.11.7" +PREFERRED_VERSION_softfan ?= "0.10" +PREFERRED_VERSION_sokoban ?= "1.3.8ern" +PREFERRED_VERSION_soundserver ?= "1.0" +PREFERRED_VERSION_soundtracker ?= "0.6.8" +PREFERRED_VERSION_soundtracker-gtk2 ?= "0.6.7" +PREFERRED_VERSION_sox ?= "13.0.0" +PREFERRED_VERSION_sox-native ?= "13.0.0" +PREFERRED_VERSION_spandsp ?= "0.0.3" +PREFERRED_VERSION_spca5xx ?= "20060501" +PREFERRED_VERSION_spectrum-fw ?= "1.0" +PREFERRED_VERSION_speex ?= "1.1.12" +PREFERRED_VERSION_sphinxbase ?= "0.1" +PREFERRED_VERSION_squashfs-lzma-tools ?= "3.1r2" +PREFERRED_VERSION_squashfs-lzma-tools-native ?= "3.1r2" +PREFERRED_VERSION_squashfs-tools ?= "3.1r2" +PREFERRED_VERSION_squashfs-tools-native ?= "3.1r2" +PREFERRED_VERSION_squeak-nox ?= "3.4-2" +PREFERRED_VERSION_squid ?= "2.6.STABLE14" +PREFERRED_VERSION_sshfs-fuse ?= "1.8" +PREFERRED_VERSION_ssmtp ?= "2.61" +PREFERRED_VERSION_stagemanager-native ?= "0.0.1" +PREFERRED_VERSION_starling ?= "0.2" +PREFERRED_VERSION_startup-monitor ?= "0.18-2" +PREFERRED_VERSION_startup-notification ?= "0.8" +PREFERRED_VERSION_stat ?= "3.3" +PREFERRED_VERSION_stat-native ?= "3.3" +PREFERRED_VERSION_strace ?= "4.5.14" +PREFERRED_VERSION_streamripper ?= "1.61.10" +PREFERRED_VERSION_stress ?= "0.18.8" +PREFERRED_VERSION_stunnel ?= "4.09" +PREFERRED_VERSION_subapplet ?= "1.0.8" +PREFERRED_VERSION_subversion ?= "1.4.3" +PREFERRED_VERSION_sudo ?= "1.6.8p12" +PREFERRED_VERSION_supertux ?= "0.1.2" +PREFERRED_VERSION_supybot ?= "0.77.0" +PREFERRED_VERSION_suspend-desktop ?= "1.0" +PREFERRED_VERSION_swfdec ?= "0.5.1" +PREFERRED_VERSION_swig ?= "1.3.31" +PREFERRED_VERSION_swig-native ?= "1.3.31" +PREFERRED_VERSION_sword ?= "1.5.9" +PREFERRED_VERSION_sylpheed ?= "2.2.9" +PREFERRED_VERSION_synaesthesia ?= "2.4" +PREFERRED_VERSION_syncml-client ?= "0.1" +PREFERRED_VERSION_synergy ?= "1.3.1" +PREFERRED_VERSION_sysfsutils ?= "2.0.0" +PREFERRED_VERSION_sysklogd ?= "1.4.1" +PREFERRED_VERSION_syslinux-native ?= "3.36" +PREFERRED_VERSION_syslog-ng ?= "1.6.11" +PREFERRED_VERSION_sysvinit ?= "2.86" +PREFERRED_VERSION_t1lib ?= "5.0.2" +PREFERRED_VERSION_taglib ?= "1.4" +PREFERRED_VERSION_taglibc ?= "1.4" +PREFERRED_VERSION_tango-icon-theme ?= "0.7.2" +PREFERRED_VERSION_tango-icon-theme-extras ?= "0.1.0" +PREFERRED_VERSION_tapioca ?= "0.3.9" +PREFERRED_VERSION_tapioca-xmpp ?= "0.3.9" +PREFERRED_VERSION_tapiocaui ?= "0.3.9.1" +PREFERRED_VERSION_tar ?= "1.18" +PREFERRED_VERSION_tasklistapplet ?= "1.0.5" +PREFERRED_VERSION_tasks ?= "0.10" +PREFERRED_VERSION_tcl ?= "8.4.11" +PREFERRED_VERSION_tcp-wrappers ?= "7.6" +PREFERRED_VERSION_tcpdump ?= "3.9.7" +PREFERRED_VERSION_tcpick ?= "0.1.22" +PREFERRED_VERSION_tcptraceroute ?= "1.5beta6" +PREFERRED_VERSION_tcptrack ?= "1.1.2" +PREFERRED_VERSION_tda1004x-firmware ?= "1.0" +PREFERRED_VERSION_telepathy-gabble ?= "0.5.10" +PREFERRED_VERSION_telepathy-glib ?= "0.5.10" +PREFERRED_VERSION_telepathy-mission-control ?= "4.22" +PREFERRED_VERSION_teleport ?= "0.34" +PREFERRED_VERSION_temtor ?= "0.0.1" +PREFERRED_VERSION_termcap ?= "11.0.1" +PREFERRED_VERSION_terminus ?= "1.0" +PREFERRED_VERSION_tesseract ?= "1.0" +PREFERRED_VERSION_tetex ?= "3.0" +PREFERRED_VERSION_tetex-native ?= "3.0" +PREFERRED_VERSION_tetex-texmf ?= "3.0" +PREFERRED_VERSION_texinfo ?= "4.8a" +PREFERRED_VERSION_texlive ?= "2007" +PREFERRED_VERSION_texmaker ?= "1.3" +PREFERRED_VERSION_thcrut ?= "1.2.5" +PREFERRED_VERSION_thttpd ?= "2.25b" +PREFERRED_VERSION_thumbpad ?= "0.8" +PREFERRED_VERSION_thunar ?= "0.8.0" +PREFERRED_VERSION_thunderbird ?= "1.0.7" +PREFERRED_VERSION_tickypip ?= "0.1.2" +PREFERRED_VERSION_tickypip-levels ?= "1.1" +PREFERRED_VERSION_tiff ?= "3.7.2" +PREFERRED_VERSION_tightvnc ?= "1.3dev7" +PREFERRED_VERSION_tiinit ?= "3.2.26" +PREFERRED_VERSION_time ?= "1.7" +PREFERRED_VERSION_timesleuth ?= "1.05ern" +PREFERRED_VERSION_timezones ?= "1.2.0" +PREFERRED_VERSION_tin ?= "1.9.1" +PREFERRED_VERSION_tinc ?= "1.0.2" +PREFERRED_VERSION_tinylogin ?= "1.4" +PREFERRED_VERSION_tinyscheme ?= "1.35" +PREFERRED_VERSION_tk ?= "8.4.11" +PREFERRED_VERSION_tmake ?= "1.11" +PREFERRED_VERSION_tmdns ?= "20030116" +PREFERRED_VERSION_tn5250 ?= "0.16.5" +PREFERRED_VERSION_tomoe ?= "0.2.1" +PREFERRED_VERSION_tor ?= "0.1.1.26" +PREFERRED_VERSION_totem ?= "1.0.4" +PREFERRED_VERSION_tracker ?= "0.5.4" +PREFERRED_VERSION_transconnect ?= "1.3-beta" +PREFERRED_VERSION_trapproto ?= "3.4.3" +PREFERRED_VERSION_tree ?= "1.5.1" +PREFERRED_VERSION_treecc ?= "0.3.6" +PREFERRED_VERSION_treecc-native ?= "0.3.6" +PREFERRED_VERSION_tremor ?= "20041119" +PREFERRED_VERSION_tron ?= "1.0.0" +PREFERRED_VERSION_tscalib ?= "0.0.1-3" +PREFERRED_VERSION_tsclient ?= "0.140" +PREFERRED_VERSION_tslib ?= "1.0" +PREFERRED_VERSION_ttf-bitstream-vera ?= "1.10" +PREFERRED_VERSION_ttf-dejavu ?= "2.18" +PREFERRED_VERSION_ttf-gentium ?= "1.02" +PREFERRED_VERSION_ttf-hunkyfonts ?= "0.3.0" +PREFERRED_VERSION_ttf-liberation ?= "0.2" +PREFERRED_VERSION_ttf-sazanami ?= "20040629" +PREFERRED_VERSION_ttyconv ?= "0.2.3" +PREFERRED_VERSION_ttyrec ?= "1.0.8" +PREFERRED_VERSION_tuxnes ?= "0.75" +PREFERRED_VERSION_twin ?= "0.4.6" +PREFERRED_VERSION_twisted ?= "2.5.0" +PREFERRED_VERSION_twm ?= "1.0.3" +PREFERRED_VERSION_twutils ?= "0.2" +PREFERRED_VERSION_txdrug ?= "0.1" +PREFERRED_VERSION_tximage ?= "0.2" +PREFERRED_VERSION_tzcode-native ?= "2007e" +PREFERRED_VERSION_tzdata ?= "2007e" +PREFERRED_VERSION_u-boot ?= "1.2.0" +PREFERRED_VERSION_u-boot-omap2430sdp ?= "1.1.4" +PREFERRED_VERSION_u2nl ?= "1.3" +PREFERRED_VERSION_uae4all ?= "0.7.1" +PREFERRED_VERSION_ubahnnav ?= "0.4.1" +PREFERRED_VERSION_u-boot-utils ?= "1.2.0" +PREFERRED_VERSION_udev ?= "092" +PREFERRED_VERSION_udev-hostap-cs-vcc-workaround ?= "1.0" +PREFERRED_VERSION_udhcp ?= "0.9.8" +PREFERRED_VERSION_ufraw ?= "0.12" +PREFERRED_VERSION_uicmoc-native ?= "2.3.10" +PREFERRED_VERSION_uicmoc3-native ?= "3.3.5" +PREFERRED_VERSION_uicmoc4-native ?= "4.3.3" +PREFERRED_VERSION_uim ?= "1.3.1" +PREFERRED_VERSION_uim-native ?= "1.3.1" +PREFERRED_VERSION_uim-tomoe-gtk ?= "0.2.0" +PREFERRED_VERSION_ulxmlrpcpp ?= "1.5.2" +PREFERRED_VERSION_uml-utilities ?= "20040406" +PREFERRED_VERSION_unfreeze ?= "1.0" +PREFERRED_VERSION_unionfs-modules ?= "1.0.13" +PREFERRED_VERSION_unionfs-utils ?= "1.0.13" +PREFERRED_VERSION_unionroot ?= "0.1.1" +PREFERRED_VERSION_units ?= "1.80" +PREFERRED_VERSION_unixbench ?= "4.1.0" +PREFERRED_VERSION_unrar ?= "3.4.3" +PREFERRED_VERSION_unrar-native ?= "3.4.3" +PREFERRED_VERSION_unzip ?= "552" +PREFERRED_VERSION_unzip-native ?= "552" +PREFERRED_VERSION_update-alternatives-cworth ?= "0.99.154" +PREFERRED_VERSION_update-alternatives-cworth-native ?= "0.99.154" +PREFERRED_VERSION_update-alternatives-dpkg ?= "1.13.22" +PREFERRED_VERSION_update-alternatives-dpkg-native ?= "1.13.22" +PREFERRED_VERSION_update-modules ?= "1.0" +PREFERRED_VERSION_upstart ?= "0.3.8" +PREFERRED_VERSION_uqm ?= "0.5.0" +PREFERRED_VERSION_usb-gadget-mode ?= "0.0.2" +PREFERRED_VERSION_usbutils ?= "0.70" +PREFERRED_VERSION_usbview ?= "1.0" +PREFERRED_VERSION_ushare ?= "0.9.7" +PREFERRED_VERSION_usound ?= "0.2.0" +PREFERRED_VERSION_usrp ?= "0.12" +PREFERRED_VERSION_util-linux ?= "2.12r" +PREFERRED_VERSION_util-linux-native ?= "2.12r" +PREFERRED_VERSION_util-macros ?= "1.1.5" +PREFERRED_VERSION_util-macros-native ?= "1.1.5" +PREFERRED_VERSION_uucp ?= "1.07" +PREFERRED_VERSION_v4l2apps ?= "20020317" +PREFERRED_VERSION_vde ?= "2.0.2" +PREFERRED_VERSION_vectoroids ?= "1.1.0" +PREFERRED_VERSION_videoplayer ?= "0.1" +PREFERRED_VERSION_videoproto ?= "2.2.2" +PREFERRED_VERSION_vim ?= "7.0" +PREFERRED_VERSION_vim-tiny ?= "7.0" +PREFERRED_VERSION_vino ?= "2.16.0" +PREFERRED_VERSION_visiscript ?= "0.4.3" +PREFERRED_VERSION_visual-boot ?= "0.0.1" +PREFERRED_VERSION_vlan ?= "1.9" +PREFERRED_VERSION_vlc-gpe ?= "0.8.4" +PREFERRED_VERSION_vmedit ?= "0.02" +PREFERRED_VERSION_vnc ?= "3.3.7" +PREFERRED_VERSION_vochistory ?= "0.1" +PREFERRED_VERSION_voicecall ?= "0.1" +PREFERRED_VERSION_void11 ?= "0.2.0" +PREFERRED_VERSION_vorbis-tools ?= "1.0.1" +PREFERRED_VERSION_vpnc ?= "0.3.3" +PREFERRED_VERSION_vsftpd ?= "2.0.5" +PREFERRED_VERSION_vte ?= "0.16.8" +PREFERRED_VERSION_vtun ?= "2.6" +PREFERRED_VERSION_w3cam ?= "0.7.2" +PREFERRED_VERSION_wakelan ?= "1.1" +PREFERRED_VERSION_watchdog ?= "5.3.1" +PREFERRED_VERSION_wbxml2 ?= "0.9.0" +PREFERRED_VERSION_webcam-server ?= "0.50" +PREFERRED_VERSION_wget ?= "1.9.1" +PREFERRED_VERSION_whois ?= "4.5.25" +PREFERRED_VERSION_wifistix-modules ?= "5.0.16.p0" +PREFERRED_VERSION_wiggle ?= "0.6" +PREFERRED_VERSION_wiggle-native ?= "0.6" +PREFERRED_VERSION_win4 ?= "1.0.1" +PREFERRED_VERSION_windowswmproto ?= "1.0.3" +PREFERRED_VERSION_wireshark ?= "0.99.4" +PREFERRED_VERSION_wlan-ng-modules ?= "0.2.7" +PREFERRED_VERSION_wlan-ng-utils ?= "0.2.7" +PREFERRED_VERSION_wmctrl ?= "1.07" +PREFERRED_VERSION_wpa-gui ?= "0.4.8" +PREFERRED_VERSION_wpa-supplicant ?= "0.5.5" +PREFERRED_VERSION_wpa-supplicant-nossl ?= "0.2.6" +PREFERRED_VERSION_wpa-supplicant-ssl ?= "0.2.6" +PREFERRED_VERSION_wrt-imagetools-native ?= "1.0" +PREFERRED_VERSION_wrt-init ?= "1.0" +PREFERRED_VERSION_wrt-utils ?= "1.0" +PREFERRED_VERSION_wv ?= "1.2.0" +PREFERRED_VERSION_wview-sim ?= "3.1.3" +PREFERRED_VERSION_wview-sim-mysql ?= "3.1.3" +PREFERRED_VERSION_wview-vpro ?= "3.1.3" +PREFERRED_VERSION_wview-vpro-mysql ?= "3.1.3" +PREFERRED_VERSION_wview-wxt510 ?= "3.1.3" +PREFERRED_VERSION_wview-wxt510-mysql ?= "3.1.3" +PREFERRED_VERSION_wxwidgets ?= "2.6.3" +PREFERRED_VERSION_x11perf ?= "1.4.1" +PREFERRED_VERSION_x11vnc ?= "0.9.3" +PREFERRED_VERSION_xaos ?= "3.2.3" +PREFERRED_VERSION_xauth ?= "1.0.2" +PREFERRED_VERSION_xawtv ?= "3.93" +PREFERRED_VERSION_xbacklight ?= "1.1" +PREFERRED_VERSION_xbase-clients ?= "1.0" +PREFERRED_VERSION_xbitmaps ?= "1.0.1" +PREFERRED_VERSION_xcb-demo ?= "0.1" +PREFERRED_VERSION_xcb-proto ?= "1.0" +PREFERRED_VERSION_xcb-util ?= "0.2" +PREFERRED_VERSION_xchat ?= "2.8.4" +PREFERRED_VERSION_xcmiscproto ?= "1.1.2" +PREFERRED_VERSION_xcmiscproto-native ?= "1.1.2" +PREFERRED_VERSION_xcursor-transparent-theme ?= "0.1.1" +PREFERRED_VERSION_xdbedizzy ?= "1.0.2" +PREFERRED_VERSION_xdemineur ?= "2.1.1" +PREFERRED_VERSION_xdm ?= "1.1.6" +PREFERRED_VERSION_xdpyinfo ?= "1.0.2" +PREFERRED_VERSION_xerces-c ?= "2.7.0" +PREFERRED_VERSION_xev ?= "1.0.2" +PREFERRED_VERSION_xextproto ?= "7.0.2" +PREFERRED_VERSION_xextproto-native ?= "7.0.2" +PREFERRED_VERSION_xf86-input-evdev ?= "1.1.5" +PREFERRED_VERSION_xf86-input-keyboard ?= "1.2.2" +PREFERRED_VERSION_xf86-input-mouse ?= "1.2.2" +PREFERRED_VERSION_xf86-input-penmount ?= "1.2.0" +PREFERRED_VERSION_xf86-video-ati ?= "6.6.193" +PREFERRED_VERSION_xf86-video-fbdev ?= "0.3.1" +PREFERRED_VERSION_xf86-video-i128 ?= "1.1.0.6" +PREFERRED_VERSION_xf86-video-i810 ?= "1.6.5" +PREFERRED_VERSION_xf86-video-newport ?= "0.2.1" +PREFERRED_VERSION_xf86-video-nsc ?= "2.8.2" +PREFERRED_VERSION_xf86-video-nv ?= "2.1.3" +PREFERRED_VERSION_xf86-video-s3 ?= "0.5.0" +PREFERRED_VERSION_xf86-video-savage ?= "2.1.3" +PREFERRED_VERSION_xf86-video-siliconmotion ?= "1.5.1" +PREFERRED_VERSION_xf86-video-sis ?= "0.9.3" +PREFERRED_VERSION_xf86-video-tdfx ?= "1.3.0" +PREFERRED_VERSION_xf86-video-trident ?= "1.2.3" +PREFERRED_VERSION_xf86-video-tseng ?= "1.1.1" +PREFERRED_VERSION_xf86-video-vesa ?= "1.3.0" +PREFERRED_VERSION_xf86-video-via ?= "0.2.2" +PREFERRED_VERSION_xf86-video-vmware ?= "10.14.1" +PREFERRED_VERSION_xf86-video-voodoo ?= "1.1.1" +PREFERRED_VERSION_xf86bigfontproto ?= "1.1.2" +PREFERRED_VERSION_xf86bigfontproto-native ?= "1.1.2" +PREFERRED_VERSION_xf86dga ?= "1.0.2" +PREFERRED_VERSION_xf86dgaproto ?= "2.0.3" +PREFERRED_VERSION_xf86driproto ?= "2.0.3" +PREFERRED_VERSION_xf86miscproto ?= "0.9.2" +PREFERRED_VERSION_xf86rushproto ?= "1.1.2" +PREFERRED_VERSION_xf86vidmodeproto ?= "2.2.2" +PREFERRED_VERSION_xfcalendar ?= "4.2.3" +PREFERRED_VERSION_xfce-mcs-manager ?= "4.4.1" +PREFERRED_VERSION_xfce-mcs-plugins ?= "4.4.1" +PREFERRED_VERSION_xfce-terminal ?= "0.2.6" +PREFERRED_VERSION_xfce4-appfinder ?= "4.4.1" +PREFERRED_VERSION_xfce4-dev-tools ?= "4.4.0" +PREFERRED_VERSION_xfce4-icon-theme ?= "4.4.1" +PREFERRED_VERSION_xfce4-mixer ?= "4.4.1" +PREFERRED_VERSION_xfce4-panel ?= "4.4.1" +PREFERRED_VERSION_xfce4-session ?= "4.4.1" +PREFERRED_VERSION_xfdesktop ?= "4.4.1" +PREFERRED_VERSION_xffm ?= "4.3.99.2" +PREFERRED_VERSION_xfonts-xorg ?= "6.8" +PREFERRED_VERSION_xfprint ?= "4.4.1" +PREFERRED_VERSION_xfs ?= "1.0.4" +PREFERRED_VERSION_xfsprogs ?= "2.8.16" +PREFERRED_VERSION_xfwm4 ?= "4.4.1" +PREFERRED_VERSION_xfwm4-themes ?= "4.4.1" +PREFERRED_VERSION_xhost ?= "1.0.2" +PREFERRED_VERSION_xineramaproto ?= "1.1.2" +PREFERRED_VERSION_xinetd ?= "2.3.13" +PREFERRED_VERSION_xinit ?= "1.0.5" +PREFERRED_VERSION_xkbd ?= "0.8.15" +PREFERRED_VERSION_xmame ?= "0.100" +PREFERRED_VERSION_xmame-tiny ?= "0.100" +PREFERRED_VERSION_xmms ?= "1.2.10" +PREFERRED_VERSION_xmms-embedded ?= "20040327" +PREFERRED_VERSION_xmms-mad ?= "0.10" +PREFERRED_VERSION_xmms-tremor ?= "1.0" +PREFERRED_VERSION_xmodmap ?= "1.0.3" +PREFERRED_VERSION_xmonobut ?= "0.4.1" +PREFERRED_VERSION_xorg-cf-files ?= "1.0.2" +PREFERRED_VERSION_xorg-headers-native ?= "1.0" +PREFERRED_VERSION_xorg-sgml-doctools ?= "1.2" +PREFERRED_VERSION_xoscope ?= "1.12" +PREFERRED_VERSION_xournal ?= "0.4.0.1" +PREFERRED_VERSION_xpext ?= "1.0-5" +PREFERRED_VERSION_xprint ?= "0.9.001" +PREFERRED_VERSION_xprop ?= "1.0.2" +PREFERRED_VERSION_xproto ?= "7.0.10" +PREFERRED_VERSION_xproto-native ?= "7.0.10" +PREFERRED_VERSION_xproxymanagementprotocol ?= "1.0.2" +PREFERRED_VERSION_xqt ?= "0.0.9" +PREFERRED_VERSION_xqt2 ?= "20060509" +PREFERRED_VERSION_xrandr ?= "1.2.2" +PREFERRED_VERSION_xrdb ?= "1.0.4" +PREFERRED_VERSION_xscreensaver ?= "4.22" +PREFERRED_VERSION_xscrnsaverh ?= "1.0" +PREFERRED_VERSION_xserver-common ?= "1.18" +PREFERRED_VERSION_xserver-kdrive ?= "1.3.0.0" +PREFERRED_VERSION_xserver-kdrive-common ?= "0.1" +PREFERRED_VERSION_xserver-nodm-init ?= "1.0" +PREFERRED_VERSION_xserver-xorg ?= "1.3.0.0" +PREFERRED_VERSION_xset ?= "1.0.3" +PREFERRED_VERSION_xsetroot ?= "1.0.2" +PREFERRED_VERSION_xsp ?= "1.0.0-8" +PREFERRED_VERSION_xst ?= "0.15" +PREFERRED_VERSION_xstroke ?= "0.6" +PREFERRED_VERSION_xterm ?= "207" +PREFERRED_VERSION_xtrans ?= "1.0.4" +PREFERRED_VERSION_xtrans-native ?= "1.0.3" +PREFERRED_VERSION_xtscal ?= "0.6.3" +PREFERRED_VERSION_xvinfo ?= "1.0.2" +PREFERRED_VERSION_yeaphone ?= "0.1" +PREFERRED_VERSION_yp-tools ?= "2.9" +PREFERRED_VERSION_ypbind-mt ?= "1.19" +PREFERRED_VERSION_ypserv ?= "2.17" +PREFERRED_VERSION_zauralign ?= "1.0.2" +PREFERRED_VERSION_zaurus-tarball-native ?= "1.0" +PREFERRED_VERSION_zbedic ?= "1.0" +PREFERRED_VERSION_zbench ?= "2.0" +PREFERRED_VERSION_zcip ?= "4" +PREFERRED_VERSION_zd1211 ?= "r85" +PREFERRED_VERSION_zd1211-firmware ?= "1.3" +PREFERRED_VERSION_zddice ?= "1.0.0" +PREFERRED_VERSION_zeroconf ?= "0.9" +PREFERRED_VERSION_zgscore ?= "1.0.2" +PREFERRED_VERSION_zile ?= "2.2.15" +PREFERRED_VERSION_zip ?= "2.32" +PREFERRED_VERSION_zip-native ?= "2.32" +PREFERRED_VERSION_zipsc ?= "0.4.3" +PREFERRED_VERSION_ziq ?= "1.1ern" +PREFERRED_VERSION_zlapspeed ?= "1.0.0" +PREFERRED_VERSION_zlib ?= "1.2.3" +PREFERRED_VERSION_zlib-native ?= "1.2.3" +PREFERRED_VERSION_zmerlin ?= "0.9.1" +PREFERRED_VERSION_zope ?= "3.3.1" +PREFERRED_VERSION_zrally ?= "0.90" +PREFERRED_VERSION_zrev7 ?= "1.0.1" +PREFERRED_VERSION_zroadmap ?= "1.1.0" +PREFERRED_VERSION_zsafe ?= "2.1.3" +PREFERRED_VERSION_zsh ?= "4.1.1" +PREFERRED_VERSION_zshopi ?= "0.2" +PREFERRED_VERSION_zsubhunt ?= "1.0.0ern" +PREFERRED_VERSION_ztappy ?= "0.9.3ern" +PREFERRED_VERSION_zten ?= "1.6.2" +PREFERRED_VERSION_zuc ?= "1.1.2ern" +PREFERRED_VERSION_zudoku ?= "1.1" +PREFERRED_VERSION_zziplib ?= "0.10.82" diff --git a/conf/distro/include/angstrom-2007-for-openmoko.inc b/conf/distro/include/angstrom-2007-for-openmoko.inc index 380c882c2c..08cf27ba57 100644 --- a/conf/distro/include/angstrom-2007-for-openmoko.inc +++ b/conf/distro/include/angstrom-2007-for-openmoko.inc @@ -146,7 +146,7 @@ PREFERRED_VERSION_glibc-initial ?= "2.5" #Loads preferred versions from files, these have weak assigments (?=), so put them at the bottom require conf/distro/include/preferred-xorg-versions.inc -require conf/distro/include/angstrom-2007-preferred-versions.inc +require conf/distro/include/angstrom-2007-for-openmoko-versions.inc require conf/distro/include/preferred-gpe-versions-2.8.inc require conf/distro/include/preferred-e-versions.inc diff --git a/conf/distro/include/angstrom-2007-preferred-versions.inc b/conf/distro/include/angstrom-2007-preferred-versions.inc deleted file mode 100644 index d712fadb8c..0000000000 --- a/conf/distro/include/angstrom-2007-preferred-versions.inc +++ /dev/null @@ -1,2131 +0,0 @@ -# This is a lock-down file for stability purposes -# If you change anything, send a mail to angstrom-distro-devel@linuxtogo.org -# stating the change and the reason. - -# bitbake -s | awk '{print "PREFERRED_VERSION_" $1 "=" $2}' | sed -e s:\+:\=:g | awk -F "=" '{print $1 " ?= \" "$2}' | awk -F "-r" '{print $1"\""}' | sed -e s,0:,,g -e s,1:,,g | sed s:\"\ :\":g> /tmp/angstrom-2007-preferred-versions.inc - -PREFERRED_VERSION_0xffff ?= "0.2" -PREFERRED_VERSION_0xffff-native ?= "0.2" -PREFERRED_VERSION_aalib ?= "1.4rc5" -PREFERRED_VERSION_abiword ?= "2.5.2" -PREFERRED_VERSION_abiword-embedded ?= "2.5.2" -PREFERRED_VERSION_abiword-plugins ?= "2.5.2" -PREFERRED_VERSION_abuse ?= "0.7.0" -PREFERRED_VERSION_acpid ?= "1.0.4" -PREFERRED_VERSION_acx-firmware ?= "1.0" -PREFERRED_VERSION_addressbook ?= "0.1" -PREFERRED_VERSION_adns ?= "1.0" -PREFERRED_VERSION_agg ?= "2.5" -PREFERRED_VERSION_aircrack ?= "2.41" -PREFERRED_VERSION_aircrack-ng ?= "0.9.1" -PREFERRED_VERSION_albumshaper ?= "2.1" -PREFERRED_VERSION_aliens ?= "1.0.0" -PREFERRED_VERSION_aliens-qt ?= "1.0.0" -PREFERRED_VERSION_alsa-lib ?= "1.0.15" -PREFERRED_VERSION_alsa-oss ?= "1.0.15" -PREFERRED_VERSION_alsa-plugins ?= "1.0.14" -PREFERRED_VERSION_alsa-state ?= "0.1.0" -PREFERRED_VERSION_alsa-utils ?= "1.0.15" -PREFERRED_VERSION_anthy ?= "7811" -PREFERRED_VERSION_anthy-native ?= "7811" -PREFERRED_VERSION_antlr ?= "2.7.5" -PREFERRED_VERSION_antlr-native ?= "2.7.5" -PREFERRED_VERSION_apache2 ?= "2.2.3" -PREFERRED_VERSION_apache2-native ?= "2.2.3" -PREFERRED_VERSION_apex-env ?= "1.5.8" -PREFERRED_VERSION_apex-nslu2 ?= "1.5.8" -PREFERRED_VERSION_apex-nslu2-16mb ?= "1.5.8" -PREFERRED_VERSION_apmd ?= "3.2.2" -PREFERRED_VERSION_applewmproto ?= "1.0.3" -PREFERRED_VERSION_appres ?= "1.0.1" -PREFERRED_VERSION_appweb ?= "2.0.4" -PREFERRED_VERSION_apr ?= "1.2.7" -PREFERRED_VERSION_apr-util ?= "1.2.7" -PREFERRED_VERSION_apt ?= "0.7.3" -PREFERRED_VERSION_apt-native ?= "0.7.3" -PREFERRED_VERSION_argtable ?= "2.7" -PREFERRED_VERSION_ark3116 ?= "0.4.1" -PREFERRED_VERSION_arpwatch ?= "2.1a15" -PREFERRED_VERSION_aspell ?= "0.60.5" -PREFERRED_VERSION_aspell-native ?= "0.60.5" -PREFERRED_VERSION_asterisk ?= "1.4.10" -PREFERRED_VERSION_asterisk-sounds ?= "1.2.1" -PREFERRED_VERSION_at ?= "3.1.8" -PREFERRED_VERSION_atd ?= "0.70" -PREFERRED_VERSION_atftp ?= "0.7" -PREFERRED_VERSION_atk ?= "1.20.0" -PREFERRED_VERSION_atmelwlandriver ?= "3.4.1.0" -PREFERRED_VERSION_atomic ?= "1.0.1" -PREFERRED_VERSION_audiofile ?= "0.2.6" -PREFERRED_VERSION_audioplayer ?= "1.0" -PREFERRED_VERSION_aumix ?= "2.8" -PREFERRED_VERSION_autoconf ?= "2.61" -PREFERRED_VERSION_autoconf-native ?= "2.61" -PREFERRED_VERSION_autofs ?= "4.1.4" -PREFERRED_VERSION_automake ?= "1.9.6" -PREFERRED_VERSION_automake-native ?= "1.9.6" -PREFERRED_VERSION_avahi ?= "0.6.21" -PREFERRED_VERSION_avahi-python ?= "0.6.21" -PREFERRED_VERSION_avahi-ui ?= "0.6.21" -PREFERRED_VERSION_avetanabt ?= "20060413" -PREFERRED_VERSION_bacula-client ?= "1.38.11" -PREFERRED_VERSION_balsa ?= "2.0.17" -PREFERRED_VERSION_base-files ?= "3.0.14" -PREFERRED_VERSION_base-passwd ?= "3.5.9" -PREFERRED_VERSION_bash ?= "3.2" -PREFERRED_VERSION_bash-completion ?= "20040711" -PREFERRED_VERSION_bazaar ?= "1.2" -PREFERRED_VERSION_bb ?= "1.2" -PREFERRED_VERSION_bc ?= "1.06" -PREFERRED_VERSION_bdftopcf ?= "1.0.1" -PREFERRED_VERSION_beecrypt ?= "3.1.0" -PREFERRED_VERSION_beecrypt-native ?= "3.1.0" -PREFERRED_VERSION_beep ?= "1.2.2" -PREFERRED_VERSION_beepmp ?= "0.9.7" -PREFERRED_VERSION_beforelight ?= "1.0.2" -PREFERRED_VERSION_benchfft ?= "3.1" -PREFERRED_VERSION_bigreqsproto ?= "1.0.2" -PREFERRED_VERSION_bigreqsproto-native ?= "1.0.2" -PREFERRED_VERSION_billiardz ?= "0.1.4" -PREFERRED_VERSION_bind ?= "9.3.4-P1" -PREFERRED_VERSION_bing ?= "1.1.3" -PREFERRED_VERSION_binutils ?= "2.18" -PREFERRED_VERSION_binutils-cross ?= "2.18" -PREFERRED_VERSION_binutils-cross-sdk ?= "2.18" -PREFERRED_VERSION_bison ?= "2.0" -PREFERRED_VERSION_bison-native ?= "2.0" -PREFERRED_VERSION_bitbake ?= "1.8.6" -PREFERRED_VERSION_bitchx ?= "1.1" -PREFERRED_VERSION_bluesnarfer ?= "0.1" -PREFERRED_VERSION_bluez-cups-backend ?= "3.23" -PREFERRED_VERSION_bluez-dtl1-workaround ?= "1.0" -PREFERRED_VERSION_bluez-gnome ?= "0.14" -PREFERRED_VERSION_bluez-gstreamer-plugin ?= "3.23" -PREFERRED_VERSION_bluez-hcidump ?= "1.38" -PREFERRED_VERSION_bluez-libs ?= "3.23" -PREFERRED_VERSION_bluez-utils ?= "3.23" -PREFERRED_VERSION_bluez-utils-alsa ?= "3.23" -PREFERRED_VERSION_bmon ?= "2.1.0" -PREFERRED_VERSION_boa ?= "0.94.13" -PREFERRED_VERSION_bochs ?= "2.1" -PREFERRED_VERSION_bogofilter ?= "0.96.0" -PREFERRED_VERSION_boost ?= "1.33.1" -PREFERRED_VERSION_boost-asio ?= "0.3.7" -PREFERRED_VERSION_boost-jam-native ?= "3.1.11" -PREFERRED_VERSION_bootchart ?= "0.9" -PREFERRED_VERSION_bootmenu ?= "0.7" -PREFERRED_VERSION_bootsplash ?= "3.0.7" -PREFERRED_VERSION_bootsplash-native ?= "3.0.7" -PREFERRED_VERSION_brickout ?= "2002.06.09" -PREFERRED_VERSION_brutefir ?= "1.0i" -PREFERRED_VERSION_bt950-cs ?= "0.1" -PREFERRED_VERSION_btscanner ?= "2.0" -PREFERRED_VERSION_btsco ?= "0.42" -PREFERRED_VERSION_btsco-module ?= "0.42" -PREFERRED_VERSION_btxml ?= "1.0" -PREFERRED_VERSION_busybox ?= "1.2.1" -PREFERRED_VERSION_busybox-static ?= "1.2.1" -PREFERRED_VERSION_bvi ?= "1.3.1" -PREFERRED_VERSION_bwmon ?= "1.3" -PREFERRED_VERSION_bzflag ?= "1.10.6.20040515" -PREFERRED_VERSION_bzflag-server ?= "1.10.6.20040515" -PREFERRED_VERSION_bzip2 ?= "1.0.2" -PREFERRED_VERSION_c-ares ?= "1.3.0" -PREFERRED_VERSION_cacao-cldc ?= "0.98" -PREFERRED_VERSION_cacaoh-cldc-native ?= "0.98" -PREFERRED_VERSION_cairo ?= "1.4.10" -PREFERRED_VERSION_cairo-directfb ?= "1.4.8" -PREFERRED_VERSION_cairomm ?= "1.2.4" -PREFERRED_VERSION_calendar ?= "1.0" -PREFERRED_VERSION_came ?= "1.7" -PREFERRED_VERSION_camera-assistant ?= "0.2.0" -PREFERRED_VERSION_camsource ?= "0.7.0" -PREFERRED_VERSION_cbrpager ?= "0.9.14" -PREFERRED_VERSION_ccache ?= "2.4" -PREFERRED_VERSION_cccc ?= "3.pre84" -PREFERRED_VERSION_ccdv ?= "1.0" -PREFERRED_VERSION_ccdv-native ?= "1.0" -PREFERRED_VERSION_ccxstream ?= "1.0.15" -PREFERRED_VERSION_cdparanoia ?= "9.8alpha" -PREFERRED_VERSION_cdrtools-native ?= "2.01" -PREFERRED_VERSION_cdstatus ?= "0.96.05" -PREFERRED_VERSION_cdtool ?= "2.1.8" -PREFERRED_VERSION_cdump-native ?= "1.0" -PREFERRED_VERSION_centericq ?= "4.11.0" -PREFERRED_VERSION_cetools ?= "0.3" -PREFERRED_VERSION_cetools-native ?= "0.3" -PREFERRED_VERSION_cflow ?= "2.0" -PREFERRED_VERSION_cfu1-modules ?= "2.6" -PREFERRED_VERSION_check ?= "0.9.2" -PREFERRED_VERSION_checkers ?= "1.0.5ern" -PREFERRED_VERSION_cherokee ?= "0.5.5" -PREFERRED_VERSION_cherokee-nossl ?= "0.5.3" -PREFERRED_VERSION_chillispot ?= "1.0RC3" -PREFERRED_VERSION_chkhinge ?= "20040706" -PREFERRED_VERSION_chmlib ?= "0.38" -PREFERRED_VERSION_chrpath ?= "0.13" -PREFERRED_VERSION_chrpath-native ?= "0.13" -PREFERRED_VERSION_ckermit ?= "211" -PREFERRED_VERSION_clamav ?= "0.91.1" -PREFERRED_VERSION_clamsmtp ?= "1.8" -PREFERRED_VERSION_classpath ?= "0.20" -PREFERRED_VERSION_classpath-gtk ?= "0.93" -PREFERRED_VERSION_classpath-minimal ?= "0.95" -PREFERRED_VERSION_classpath-minimal-native ?= "0.95" -PREFERRED_VERSION_clearsilver ?= "0.10.3" -PREFERRED_VERSION_clish ?= "0.7.1" -PREFERRED_VERSION_cmake-native ?= "2.4.7" -PREFERRED_VERSION_cms92init ?= "0.1" -PREFERRED_VERSION_compositeproto ?= "0.4" -PREFERRED_VERSION_comprec ?= "0.02" -PREFERRED_VERSION_confuse ?= "2.5" -PREFERRED_VERSION_confuse-native ?= "2.5" -PREFERRED_VERSION_connect ?= "0.1" -PREFERRED_VERSION_conserver ?= "8.1.14" -PREFERRED_VERSION_console-tools ?= "0.3.2" -PREFERRED_VERSION_contacts ?= "0.7" -PREFERRED_VERSION_coreutils ?= "5.3.0" -PREFERRED_VERSION_coreutils-native ?= "5.3.0" -PREFERRED_VERSION_corkscrew ?= "2.0" -PREFERRED_VERSION_corsair ?= "0.2.6" -PREFERRED_VERSION_cpio ?= "2.5" -PREFERRED_VERSION_cppunit ?= "1.10.2" -PREFERRED_VERSION_cpuburn ?= "1.4" -PREFERRED_VERSION_cpufreqd ?= "1.1.2" -PREFERRED_VERSION_cpusage ?= "0.2" -PREFERRED_VERSION_cpuspeed ?= "1.1" -PREFERRED_VERSION_cramfs ?= "1.1" -PREFERRED_VERSION_cramfs-native ?= "1.1" -PREFERRED_VERSION_crimsonfields ?= "0.4.8" -PREFERRED_VERSION_crimsonfields-native ?= "0.4.8" -PREFERRED_VERSION_cron ?= "3.0pl1" -PREFERRED_VERSION_cross-linkage ?= "1.0" -PREFERRED_VERSION_crossword ?= "0.0.3" -PREFERRED_VERSION_cscope ?= "15.5" -PREFERRED_VERSION_ctags-native ?= "5.5.4" -PREFERRED_VERSION_ctorrent ?= "1.3.4" -PREFERRED_VERSION_ctrlproxy ?= "2.6.2" -PREFERRED_VERSION_cumulus ?= "1.2.1" -PREFERRED_VERSION_cups ?= "1.2.12" -PREFERRED_VERSION_curl ?= "7.16.4" -PREFERRED_VERSION_curl-native ?= "7.16.4" -PREFERRED_VERSION_custominput ?= "1.1.0" -PREFERRED_VERSION_cvs ?= "1.12.9" -PREFERRED_VERSION_cxcrypt ?= "1.0" -PREFERRED_VERSION_cyrus-imapd ?= "2.2.12" -PREFERRED_VERSION_cyrus-sasl ?= "2.1.19" -PREFERRED_VERSION_damageext ?= "1.0" -PREFERRED_VERSION_damageproto ?= "1.1.0" -PREFERRED_VERSION_dash ?= "0.5.2" -PREFERRED_VERSION_dasher-gpe ?= "0.0cvs20040828" -PREFERRED_VERSION_dates ?= "0.4.4" -PREFERRED_VERSION_davfs2 ?= "0.2.8" -PREFERRED_VERSION_db ?= "4.3.29" -PREFERRED_VERSION_db-native ?= "4.3.29" -PREFERRED_VERSION_db3 ?= "3.2.9" -PREFERRED_VERSION_db3-native ?= "3.2.9" -PREFERRED_VERSION_dbench ?= "3.04" -PREFERRED_VERSION_dbh ?= "1.0-18" -PREFERRED_VERSION_dbus ?= "1.0.2" -PREFERRED_VERSION_dbus-glib ?= "0.74" -PREFERRED_VERSION_dbus-glib-native ?= "0.74" -PREFERRED_VERSION_dbus-native ?= "1.0.1" -PREFERRED_VERSION_dbus-python ?= "0.71" -PREFERRED_VERSION_dcetest ?= "1.2" -PREFERRED_VERSION_dcopidl-native ?= "3.5.4" -PREFERRED_VERSION_dcopidl2cpp-native ?= "3.5.4" -PREFERRED_VERSION_dcron ?= "2.3.3" -PREFERRED_VERSION_ddclient ?= "3.6.3" -PREFERRED_VERSION_debianutils ?= "2.19" -PREFERRED_VERSION_dejagnu ?= "1.4.4" -PREFERRED_VERSION_dejagnu-native ?= "1.4.4" -PREFERRED_VERSION_detect-stylus ?= "0.13" -PREFERRED_VERSION_device-mapper ?= "1.01.05" -PREFERRED_VERSION_devimage ?= "0.1" -PREFERRED_VERSION_devimage-image ?= "1.0" -PREFERRED_VERSION_devio ?= "1.2" -PREFERRED_VERSION_devio-native ?= "1.2" -PREFERRED_VERSION_devlabel ?= "0.48.01" -PREFERRED_VERSION_devmem2 ?= "1.0" -PREFERRED_VERSION_devshell ?= "1.0" -PREFERRED_VERSION_dgen-sdl ?= "1.23" -PREFERRED_VERSION_dhcdbd ?= "2.0" -PREFERRED_VERSION_dhclient ?= "2.0pl5" -PREFERRED_VERSION_dhcp ?= "3.0.2" -PREFERRED_VERSION_dhcp-forwarder ?= "0.7" -PREFERRED_VERSION_dhcpcd ?= "1.3.22-pl4" -PREFERRED_VERSION_didiwiki ?= "0.5" -PREFERRED_VERSION_diet-x11 ?= "1.1.3" -PREFERRED_VERSION_diethotplug ?= "0.4" -PREFERRED_VERSION_diffstat ?= "1.39" -PREFERRED_VERSION_diffutils ?= "2.8.1" -PREFERRED_VERSION_dillo ?= "0.8.6" -PREFERRED_VERSION_dillo2 ?= "0.6.6" -PREFERRED_VERSION_dircproxy ?= "1.1.0" -PREFERRED_VERSION_directfb ?= "1.1.0" -PREFERRED_VERSION_directfb-examples ?= "1.0.0" -PREFERRED_VERSION_display-brightness ?= "1.0.0" -PREFERRED_VERSION_distcc ?= "2.18.3" -PREFERRED_VERSION_djvulibre ?= "3.5.19" -PREFERRED_VERSION_dmxproto ?= "2.2.2" -PREFERRED_VERSION_dnsmasq ?= "2.38" -PREFERRED_VERSION_docbook-utils ?= "0.6.13" -PREFERRED_VERSION_docbook-utils-native ?= "0.6.13" -PREFERRED_VERSION_dosbox ?= "0.70" -PREFERRED_VERSION_dosfstools ?= "2.11" -PREFERRED_VERSION_dosfstools-native ?= "2.10" -PREFERRED_VERSION_dpkg ?= "1.13.25" -PREFERRED_VERSION_dpkg-native ?= "1.13.25" -PREFERRED_VERSION_driftnet ?= "0.1.6" -PREFERRED_VERSION_driftnet-nogui ?= "0.1.6" -PREFERRED_VERSION_dropbear ?= "0.49" -PREFERRED_VERSION_dsniff ?= "2.3" -PREFERRED_VERSION_duma ?= "2.5.7" -PREFERRED_VERSION_dvb-image ?= "1.0" -PREFERRED_VERSION_dvbtraffic ?= "0.0cvs20060814" -PREFERRED_VERSION_dviviewer ?= "1.0.2" -PREFERRED_VERSION_e-uae ?= "0.8.28" -PREFERRED_VERSION_e-wm ?= "0.16.999.041" -PREFERRED_VERSION_e2fsprogs ?= "1.38" -PREFERRED_VERSION_e2fsprogs-libs ?= "1.39" -PREFERRED_VERSION_e2fsprogs-libs-native ?= "1.35" -PREFERRED_VERSION_e2fsprogs-native ?= "1.38" -PREFERRED_VERSION_e2tools ?= "0.0.16" -PREFERRED_VERSION_e2tools-native ?= "0.0.16" -PREFERRED_VERSION_eb ?= "4.3" -PREFERRED_VERSION_ebtables ?= "2.0.6" -PREFERRED_VERSION_eciadsl ?= "0.11" -PREFERRED_VERSION_ecj-native ?= "3.3" -PREFERRED_VERSION_editres ?= "1.0.2" -PREFERRED_VERSION_eds-feed ?= "0.3.2" -PREFERRED_VERSION_eel ?= "2.12.2" -PREFERRED_VERSION_ekg ?= "1.6" -PREFERRED_VERSION_elfkickers ?= "2.0a" -PREFERRED_VERSION_elfkickers-native ?= "2.0a" -PREFERRED_VERSION_elftoaout ?= "2.3" -PREFERRED_VERSION_elftoaout-native ?= "2.3" -PREFERRED_VERSION_elfutils ?= "0.127" -PREFERRED_VERSION_elvis ?= "2.2.0" -PREFERRED_VERSION_elvis-tiny ?= "2.2.0" -PREFERRED_VERSION_emacs ?= "20060801" -PREFERRED_VERSION_emacs-x11 ?= "20060801" -PREFERRED_VERSION_emelfm2 ?= "0.0.8" -PREFERRED_VERSION_empathy ?= "0.5" -PREFERRED_VERSION_emul ?= "1.0.5" -PREFERRED_VERSION_enca ?= "1.9" -PREFERRED_VERSION_enchant ?= "1.3.0" -PREFERRED_VERSION_encodings ?= "1.0.2" -PREFERRED_VERSION_enscript ?= "1.6.4" -PREFERRED_VERSION_entrance ?= "0.9.0.010" -PREFERRED_VERSION_epiphany ?= "2.19.6" -PREFERRED_VERSION_erlang ?= "R11B.1" -PREFERRED_VERSION_erlang-native ?= "R11B.1" -PREFERRED_VERSION_esmtp ?= "0.5.1" -PREFERRED_VERSION_esound ?= "0.2.36" -PREFERRED_VERSION_espgs ?= "8.15.3" -PREFERRED_VERSION_etherpuppet ?= "0.2" -PREFERRED_VERSION_ethload ?= "1.2" -PREFERRED_VERSION_ettercap ?= "0.6.b" -PREFERRED_VERSION_eventlog ?= "0.2.5" -PREFERRED_VERSION_evieext ?= "1.0.2" -PREFERRED_VERSION_evince ?= "2.20.0" -PREFERRED_VERSION_exiv2 ?= "0.15" -PREFERRED_VERSION_exmap-console ?= "0.4.1" -PREFERRED_VERSION_exml ?= "cvs" -PREFERRED_VERSION_exo ?= "0.3.2" -PREFERRED_VERSION_expat ?= "2.0.0" -PREFERRED_VERSION_expat-native ?= "1.95.7" -PREFERRED_VERSION_expect ?= "5.44.1" -PREFERRED_VERSION_ez-ipupdate ?= "3.0.10" -PREFERRED_VERSION_ezx-boot-usb-native ?= "0.1.0" -PREFERRED_VERSION_ezx-gpiotool ?= "1877" -PREFERRED_VERSION_faac ?= "1.24" -PREFERRED_VERSION_faad2 ?= "2.0" -PREFERRED_VERSION_fakechroot ?= "2.5" -PREFERRED_VERSION_fakechroot-native ?= "2.5" -PREFERRED_VERSION_fakeconnect ?= "1.2.1" -PREFERRED_VERSION_fakeroot ?= "1.7.1" -PREFERRED_VERSION_fakeroot-native ?= "1.7.1" -PREFERRED_VERSION_fam ?= "2.7.0" -PREFERRED_VERSION_farsight ?= "0.1.5" -PREFERRED_VERSION_fastcgi ?= "2.4.0" -PREFERRED_VERSION_fastjar-native ?= "0.95" -PREFERRED_VERSION_fbgetty ?= "0.1.698" -PREFERRED_VERSION_fbgrab ?= "1.0" -PREFERRED_VERSION_fbpanel ?= "4.3" -PREFERRED_VERSION_fbreader ?= "0.8.2a" -PREFERRED_VERSION_fbset ?= "2.1" -PREFERRED_VERSION_fbui-utils ?= "0.9.14c" -PREFERRED_VERSION_fbvncserver ?= "0.9.4" -PREFERRED_VERSION_fbvncserver-kmodule ?= "0.9.4" -PREFERRED_VERSION_fceu ?= "0.98.13-pre" -PREFERRED_VERSION_fconfig ?= "20060419" -PREFERRED_VERSION_fcron ?= "3.0.2" -PREFERRED_VERSION_feh ?= "1.2.7" -PREFERRED_VERSION_fetchmail ?= "6.2.5" -PREFERRED_VERSION_ffmpeg ?= "0.4.9-pre1" -PREFERRED_VERSION_fftw ?= "3.1.2" -PREFERRED_VERSION_fftwf ?= "3.1.2" -PREFERRED_VERSION_fftwl ?= "3.1.2" -PREFERRED_VERSION_fget ?= "1.3.3" -PREFERRED_VERSION_figment ?= "0.3.5" -PREFERRED_VERSION_file ?= "4.21" -PREFERRED_VERSION_file-native ?= "4.21" -PREFERRED_VERSION_findutils ?= "4.2.29" -PREFERRED_VERSION_findutils-native ?= "4.2.29" -PREFERRED_VERSION_firefox ?= "1.0.7" -PREFERRED_VERSION_fis ?= "1.0" -PREFERRED_VERSION_fish ?= "1.1.0" -PREFERRED_VERSION_fixesproto ?= "4.0" -PREFERRED_VERSION_flac ?= "1.1.2" -PREFERRED_VERSION_flex ?= "2.5.31" -PREFERRED_VERSION_flex-native ?= "2.5.31" -PREFERRED_VERSION_flexis-zaurus ?= "1.0.0" -PREFERRED_VERSION_flnx ?= "0.18" -PREFERRED_VERSION_fltk ?= "1.1.7" -PREFERRED_VERSION_flumotion ?= "0.4.1" -PREFERRED_VERSION_fontcacheproto ?= "0.1.2" -PREFERRED_VERSION_fontcacheproto-native ?= "0.1.2" -PREFERRED_VERSION_fontconfig ?= "2.4.1" -PREFERRED_VERSION_fontconfig-native ?= "2.3.91" -PREFERRED_VERSION_fontsproto ?= "2.0.2" -PREFERRED_VERSION_fontsproto-native ?= "2.0.2" -PREFERRED_VERSION_fonttosfnt ?= "1.0.3" -PREFERRED_VERSION_foonas-init ?= "0.10" -PREFERRED_VERSION_foonas-packages ?= "1.0" -PREFERRED_VERSION_fortune-mod ?= "1.99.1" -PREFERRED_VERSION_fpdf ?= "1.53" -PREFERRED_VERSION_free42-vga ?= "1.4.36" -PREFERRED_VERSION_freeciv ?= "2.0.8" -PREFERRED_VERSION_freedoom ?= "0.3" -PREFERRED_VERSION_freedroid ?= "1.0.2" -PREFERRED_VERSION_freenote ?= "1.12.0" -PREFERRED_VERSION_freeze ?= "1.0" -PREFERRED_VERSION_frodo ?= "4.2" -PREFERRED_VERSION_froot ?= "0.7.1" -PREFERRED_VERSION_frotz ?= "2.43" -PREFERRED_VERSION_frozen-bubble ?= "1.0.0" -PREFERRED_VERSION_fsi-client ?= "20040803" -PREFERRED_VERSION_ftdi-eeprom ?= "0.2" -PREFERRED_VERSION_ftdi-eeprom-native ?= "0.2" -PREFERRED_VERSION_ftpd-topfield ?= "0.7.4" -PREFERRED_VERSION_fuse ?= "2.6.5" -PREFERRED_VERSION_fuse-module ?= "2.6.5" -PREFERRED_VERSION_fush ?= "0.9.0" -PREFERRED_VERSION_fxload ?= "0.0.20020411" -PREFERRED_VERSION_g15daemon ?= "1.2.6a" -PREFERRED_VERSION_gail ?= "1.20.0" -PREFERRED_VERSION_gaim ?= "1.5.0" -PREFERRED_VERSION_gal-2.0 ?= "1.99.11" -PREFERRED_VERSION_gal-2.1 ?= "2.1.10" -PREFERRED_VERSION_galago-daemon ?= "0.3.4" -PREFERRED_VERSION_galculator ?= "1.2.3" -PREFERRED_VERSION_gallery ?= "1.5.5" -PREFERRED_VERSION_gamin ?= "0.1.8" -PREFERRED_VERSION_gammu ?= "1.17.0" -PREFERRED_VERSION_gawk ?= "3.1.4" -PREFERRED_VERSION_gawk-native ?= "3.1.4" -PREFERRED_VERSION_gcalctool ?= "5.7.32" -PREFERRED_VERSION_gccmakedep ?= "1.0.2" -PREFERRED_VERSION_gconf ?= "2.6.1" -PREFERRED_VERSION_gconf-native ?= "2.6.1" -PREFERRED_VERSION_gd ?= "2.0.33" -PREFERRED_VERSION_gdado ?= "2.2" -PREFERRED_VERSION_gdal ?= "1.3.2" -PREFERRED_VERSION_gdb ?= "6.6" -PREFERRED_VERSION_gdb-cross ?= "6.6" -PREFERRED_VERSION_gdb-cross-sdk ?= "6.6" -PREFERRED_VERSION_gdbm ?= "1.8.3" -PREFERRED_VERSION_gdbm-native ?= "1.8.3" -PREFERRED_VERSION_gdk-pixbuf-csource-native ?= "2.10.14" -PREFERRED_VERSION_gdm ?= "2.14.9" -PREFERRED_VERSION_geda ?= "20050820" -PREFERRED_VERSION_geda-gattrib ?= "20050820" -PREFERRED_VERSION_geda-gschem ?= "20050820" -PREFERRED_VERSION_geda-gsymcheck ?= "20050820" -PREFERRED_VERSION_geda-symbols ?= "20050820" -PREFERRED_VERSION_geda-utils ?= "20050820" -PREFERRED_VERSION_gemdropx ?= "0.9" -PREFERRED_VERSION_genboot-native ?= "1.0" -PREFERRED_VERSION_genext2fs ?= "1.3" -PREFERRED_VERSION_genext2fs-native ?= "1.3" -PREFERRED_VERSION_genlist ?= "1.0" -PREFERRED_VERSION_geode-accessbus5536 ?= "2.6.11" -PREFERRED_VERSION_geode-aeslx ?= "2.6.11" -PREFERRED_VERSION_geode-alsa5536 ?= "2.6.11" -PREFERRED_VERSION_gettext ?= "0.14.1" -PREFERRED_VERSION_gettext-native ?= "0.14.1" -PREFERRED_VERSION_gftp ?= "2.0.18" -PREFERRED_VERSION_ghettotooth ?= "1.0" -PREFERRED_VERSION_giac ?= "0.5.0" -PREFERRED_VERSION_giblib ?= "1.2.4" -PREFERRED_VERSION_gif2png ?= "2.5.1" -PREFERRED_VERSION_gift ?= "0.11.5" -PREFERRED_VERSION_giftcurs ?= "0.6.2" -PREFERRED_VERSION_gimp ?= "2.3.19" -PREFERRED_VERSION_ginspector ?= "20050529" -PREFERRED_VERSION_git ?= "1.5.2.3" -PREFERRED_VERSION_git-native ?= "1.5.2.3" -PREFERRED_VERSION_gizmod ?= "2.3" -PREFERRED_VERSION_gkrellm ?= "2.2.10" -PREFERRED_VERSION_glib-1.2 ?= "1.2.10" -PREFERRED_VERSION_glib-1.2-native ?= "1.2.10" -PREFERRED_VERSION_glib-2.0 ?= "2.14.1" -PREFERRED_VERSION_glib-2.0-native ?= "2.12.4" -PREFERRED_VERSION_glibc ?= "2.6.1" -PREFERRED_VERSION_glibc-initial ?= "2.6.1" -PREFERRED_VERSION_glibmm ?= "2.12.10" -PREFERRED_VERSION_glider ?= "1.0.0" -PREFERRED_VERSION_gloox ?= "0.8.9" -PREFERRED_VERSION_glproto ?= "1.4.8" -PREFERRED_VERSION_glrr ?= "20050529" -PREFERRED_VERSION_glrr-widgets ?= "20050529" -PREFERRED_VERSION_glurp ?= "0.11.3" -PREFERRED_VERSION_gmailfs ?= "0.7.3" -PREFERRED_VERSION_gmp ?= "4.2.1" -PREFERRED_VERSION_gmp-native ?= "4.2.1" -PREFERRED_VERSION_gmpc ?= "0.13.0" -PREFERRED_VERSION_gnash ?= "0.8.0" -PREFERRED_VERSION_gnocky ?= "0.0.3" -PREFERRED_VERSION_gnokii ?= "0.6.14" -PREFERRED_VERSION_gnome-common ?= "2.20.0" -PREFERRED_VERSION_gnome-cups-manager ?= "0.31" -PREFERRED_VERSION_gnome-desktop ?= "2.18.3" -PREFERRED_VERSION_gnome-doc-utils ?= "0.12.0" -PREFERRED_VERSION_gnome-games ?= "2.6.1" -PREFERRED_VERSION_gnome-icon-theme ?= "1.3.3" -PREFERRED_VERSION_gnome-keyring ?= "2.20.0" -PREFERRED_VERSION_gnome-menus ?= "2.16.1" -PREFERRED_VERSION_gnome-mime-data ?= "2.18.0" -PREFERRED_VERSION_gnome-panel ?= "2.18.1" -PREFERRED_VERSION_gnome-power ?= "0.0.5" -PREFERRED_VERSION_gnome-power-manager ?= "2.18.3" -PREFERRED_VERSION_gnome-themes ?= "2.6.2" -PREFERRED_VERSION_gnome-vfs ?= "2.20.0" -PREFERRED_VERSION_gnome-vfs-extras ?= "0.99.13" -PREFERRED_VERSION_gnome-vfs-obexftp ?= "0.4" -PREFERRED_VERSION_gnomebaker ?= "0.6.0" -PREFERRED_VERSION_gnomesword ?= "2.1.2" -PREFERRED_VERSION_gnuchess ?= "5.05" -PREFERRED_VERSION_gnumeric ?= "1.6.3" -PREFERRED_VERSION_gnupg ?= "1.4.2.2" -PREFERRED_VERSION_gnuplot ?= "4.2.2" -PREFERRED_VERSION_gnuradio ?= "3.0.4" -PREFERRED_VERSION_gnutls ?= "1.6.3" -PREFERRED_VERSION_gob2 ?= "2.0.14" -PREFERRED_VERSION_gobby ?= "0.4.1" -PREFERRED_VERSION_goffice ?= "0.2.1" -PREFERRED_VERSION_gparted ?= "0.3.3" -PREFERRED_VERSION_gpdf ?= "2.10.0" -PREFERRED_VERSION_gpe-aerial ?= "0.3.0" -PREFERRED_VERSION_gpe-announce ?= "0.13" -PREFERRED_VERSION_gpe-applauncher ?= "0.11" -PREFERRED_VERSION_gpe-appmgr ?= "2.8" -PREFERRED_VERSION_gpe-autostarter ?= "0.12" -PREFERRED_VERSION_gpe-beam ?= "0.2.9" -PREFERRED_VERSION_gpe-bluetooth ?= "0.55" -PREFERRED_VERSION_gpe-bootsplash ?= "1.15" -PREFERRED_VERSION_gpe-bootsplash-theme-e ?= "1.0" -PREFERRED_VERSION_gpe-bootsplash-theme-gpephone ?= "1.0" -PREFERRED_VERSION_gpe-buttonbox ?= "0.5" -PREFERRED_VERSION_gpe-calculator ?= "0.2" -PREFERRED_VERSION_gpe-calendar ?= "0.91" -PREFERRED_VERSION_gpe-clock ?= "0.25" -PREFERRED_VERSION_gpe-conf ?= "0.2.6" -PREFERRED_VERSION_gpe-confd ?= "0.16" -PREFERRED_VERSION_gpe-contacts ?= "0.47" -PREFERRED_VERSION_gpe-contacts-hildon ?= "0.42" -PREFERRED_VERSION_gpe-dm ?= "0.51" -PREFERRED_VERSION_gpe-edit ?= "0.40" -PREFERRED_VERSION_gpe-expenses ?= "0.0.6" -PREFERRED_VERSION_gpe-filemanager ?= "0.30" -PREFERRED_VERSION_gpe-fsi ?= "0.1" -PREFERRED_VERSION_gpe-gallery ?= "0.97" -PREFERRED_VERSION_gpe-go ?= "0.05" -PREFERRED_VERSION_gpe-helpviewer ?= "1.0" -PREFERRED_VERSION_gpe-icons ?= "0.25" -PREFERRED_VERSION_gpe-irc ?= "0.08" -PREFERRED_VERSION_gpe-keylock ?= "0.12" -PREFERRED_VERSION_gpe-life ?= "0.2" -PREFERRED_VERSION_gpe-lights ?= "0.13" -PREFERRED_VERSION_gpe-login ?= "0.90" -PREFERRED_VERSION_gpe-mini-browser ?= "0.21" -PREFERRED_VERSION_gpe-mini-browser-hildon ?= "0.17" -PREFERRED_VERSION_gpe-mininet ?= "0.7" -PREFERRED_VERSION_gpe-mixer ?= "0.42" -PREFERRED_VERSION_gpe-nmf ?= "0.22" -PREFERRED_VERSION_gpe-othello ?= "0.2-1" -PREFERRED_VERSION_gpe-ownerinfo ?= "0.28" -PREFERRED_VERSION_gpe-package ?= "0.4" -PREFERRED_VERSION_gpe-phonepanel ?= "0.9" -PREFERRED_VERSION_gpe-plucker ?= "0.4" -PREFERRED_VERSION_gpe-question ?= "0.04" -PREFERRED_VERSION_gpe-scap ?= "1.3" -PREFERRED_VERSION_gpe-session-scripts ?= "0.67" -PREFERRED_VERSION_gpe-session-scripts-phone ?= "0.67" -PREFERRED_VERSION_gpe-shield ?= "0.9" -PREFERRED_VERSION_gpe-sketchbook ?= "0.2.9" -PREFERRED_VERSION_gpe-snes ?= "0.2" -PREFERRED_VERSION_gpe-soundbite ?= "1.0.6" -PREFERRED_VERSION_gpe-soundserver ?= "0.4-1" -PREFERRED_VERSION_gpe-su ?= "0.19" -PREFERRED_VERSION_gpe-synctool ?= "0.2" -PREFERRED_VERSION_gpe-taskmanager ?= "0.20" -PREFERRED_VERSION_gpe-terminal ?= "1.1" -PREFERRED_VERSION_gpe-tetris ?= "0.6-4" -PREFERRED_VERSION_gpe-theme-clearlooks ?= "0.3" -PREFERRED_VERSION_gpe-theme-e17 ?= "0.1" -PREFERRED_VERSION_gpe-theme-foxbox ?= "0.1" -PREFERRED_VERSION_gpe-theme-industrial ?= "0.2" -PREFERRED_VERSION_gpe-today ?= "0.11" -PREFERRED_VERSION_gpe-todo ?= "0.56" -PREFERRED_VERSION_gpe-todo-hildon ?= "0.55" -PREFERRED_VERSION_gpe-watch ?= "0.10" -PREFERRED_VERSION_gpe-what ?= "0.43" -PREFERRED_VERSION_gpe-windowlist ?= "0.1" -PREFERRED_VERSION_gperf ?= "3.0.3" -PREFERRED_VERSION_gperf-native ?= "3.0.3" -PREFERRED_VERSION_gperiodic ?= "1.3.3" -PREFERRED_VERSION_gpesyncd ?= "2.0" -PREFERRED_VERSION_gpgme ?= "1.1.4" -PREFERRED_VERSION_gphoto2 ?= "2.4.0" -PREFERRED_VERSION_gpicview ?= "0.1.5" -PREFERRED_VERSION_gpm ?= "1.20.1" -PREFERRED_VERSION_gpp ?= "2.21" -PREFERRED_VERSION_gpsbabel ?= "1.3.3" -PREFERRED_VERSION_gpsd ?= "2.34" -PREFERRED_VERSION_gpsdrive ?= "2.10pre2" -PREFERRED_VERSION_gpstk ?= "1.2" -PREFERRED_VERSION_gqview ?= "2.1.1" -PREFERRED_VERSION_granule ?= "1.2.4" -PREFERRED_VERSION_grass ?= "6.2.1" -PREFERRED_VERSION_grep ?= "2.5.1" -PREFERRED_VERSION_grep-native ?= "2.5.1" -PREFERRED_VERSION_grip ?= "3.2.0" -PREFERRED_VERSION_groff ?= "1.19.2" -PREFERRED_VERSION_gs ?= "8.16" -PREFERRED_VERSION_gsl ?= "1.4" -PREFERRED_VERSION_gsmmux ?= "alpha-2" -PREFERRED_VERSION_gsoap ?= "2.7.7" -PREFERRED_VERSION_gsoap-native ?= "2.7.7" -PREFERRED_VERSION_gsoko ?= "0.4.2-gpe6" -PREFERRED_VERSION_gspcav1 ?= "20070110" -PREFERRED_VERSION_gst-ffmpeg ?= "0.10.2" -PREFERRED_VERSION_gst-meta-base ?= "0.10" -PREFERRED_VERSION_gst-plugin-pulse ?= "0.9.4" -PREFERRED_VERSION_gst-plugins-bad ?= "0.10.5" -PREFERRED_VERSION_gst-plugins-base ?= "0.10.14" -PREFERRED_VERSION_gst-plugins-farsight ?= "0.10.1" -PREFERRED_VERSION_gst-plugins-good ?= "0.10.6" -PREFERRED_VERSION_gst-plugins-ugly ?= "0.10.6" -PREFERRED_VERSION_gstreamer ?= "0.10.14" -PREFERRED_VERSION_gthumb ?= "2.6.9" -PREFERRED_VERSION_gtk+ ?= "2.10.14" -PREFERRED_VERSION_gtk-clearlooks-engine ?= "0.6.2" -PREFERRED_VERSION_gtk-doc ?= "1.0" -PREFERRED_VERSION_gtk-doc-native ?= "1.0" -PREFERRED_VERSION_gtk-engines ?= "2.7.4" -PREFERRED_VERSION_gtk-industrial-engine ?= "0.2.46.0" -PREFERRED_VERSION_gtk-sato-engine ?= "0.1" -PREFERRED_VERSION_gtk-sharp ?= "2.10.2" -PREFERRED_VERSION_gtk-smooth-engine ?= "0.5.8" -PREFERRED_VERSION_gtk-xfce-engine ?= "2.4.1" -PREFERRED_VERSION_gtk2-ssh-askpass ?= "0.3" -PREFERRED_VERSION_gtk2-theme-angelistic ?= "0.3" -PREFERRED_VERSION_gtkhtml-2.0 ?= "2.6.3" -PREFERRED_VERSION_gtkhtml-3.0 ?= "3.0.10" -PREFERRED_VERSION_gtkhtml-3.1 ?= "3.1.16" -PREFERRED_VERSION_gtkhtml-3.6 ?= "3.6.2" -PREFERRED_VERSION_gtkhtml-3.8 ?= "3.8.2" -PREFERRED_VERSION_gtkimageview ?= "1.3.0" -PREFERRED_VERSION_gtkmathview ?= "0.7.6" -PREFERRED_VERSION_gtkmm ?= "2.10.10" -PREFERRED_VERSION_gtksourceview ?= "1.7.2" -PREFERRED_VERSION_gtkterm2 ?= "0.2.3" -PREFERRED_VERSION_gtracer ?= "0.0.10" -PREFERRED_VERSION_guichan ?= "0.7.1" -PREFERRED_VERSION_guile ?= "1.6.4" -PREFERRED_VERSION_guile-native ?= "1.8.2" -PREFERRED_VERSION_gutenprint ?= "5.1.3" -PREFERRED_VERSION_gutenprint-native ?= "5.1.3" -PREFERRED_VERSION_gvim ?= "7.0" -PREFERRED_VERSION_gweled ?= "0.5" -PREFERRED_VERSION_gxine ?= "0.4.1enhanced" -PREFERRED_VERSION_gzip ?= "1.3.5" -PREFERRED_VERSION_hal ?= "0.5.9" -PREFERRED_VERSION_hal-info ?= "20070918+git" -PREFERRED_VERSION_haserl ?= "0.8.0" -PREFERRED_VERSION_havp ?= "0.86" -PREFERRED_VERSION_hdparm ?= "6.9" -PREFERRED_VERSION_helloworld ?= "1.0.0" -PREFERRED_VERSION_hexatrolic ?= "1.0beta3" -PREFERRED_VERSION_hfsplusutils ?= "1.0.4-4" -PREFERRED_VERSION_hfsutils ?= "3.2.6" -PREFERRED_VERSION_hibernate-script ?= "1.12" -PREFERRED_VERSION_hicolor-icon-theme ?= "0.10" -PREFERRED_VERSION_hiker ?= "0.9.1" -PREFERRED_VERSION_hildon-base-lib ?= "0.11.1" -PREFERRED_VERSION_hildon-control-panel ?= "0.9.1-1.2" -PREFERRED_VERSION_hildon-fm ?= "0.9.1-2" -PREFERRED_VERSION_hildon-home ?= "0.8.20-2" -PREFERRED_VERSION_hildon-initscripts ?= "0.8.14-1" -PREFERRED_VERSION_hildon-lgpl ?= "0.12.1" -PREFERRED_VERSION_hildon-libs ?= "0.15.1" -PREFERRED_VERSION_hildon-navigator ?= "0.9.6-2" -PREFERRED_VERSION_hildon-status-bar ?= "0.8.11-1" -PREFERRED_VERSION_hildon-thumbnail ?= "0.11" -PREFERRED_VERSION_hostap-conf ?= "1.0" -PREFERRED_VERSION_hostap-daemon ?= "0.4.4" -PREFERRED_VERSION_hostap-utils ?= "0.4.7" -PREFERRED_VERSION_hotplug-dbus ?= "0.9" -PREFERRED_VERSION_hotplug-ng ?= "002" -PREFERRED_VERSION_hotplug-qcop ?= "cvs" -PREFERRED_VERSION_howl ?= "1.0.0" -PREFERRED_VERSION_hsetroot ?= "1.0.2" -PREFERRED_VERSION_htb-init ?= "0.8.5" -PREFERRED_VERSION_httppc ?= "0.8.5" -PREFERRED_VERSION_htun ?= "0.9.5" -PREFERRED_VERSION_hvsc ?= "45" -PREFERRED_VERSION_hwdata ?= "0.191" -PREFERRED_VERSION_hydra ?= "4.5" -PREFERRED_VERSION_iaimaster ?= "0.5" -PREFERRED_VERSION_iana-etc ?= "2.20" -PREFERRED_VERSION_ica-bin ?= "8.0" -PREFERRED_VERSION_iceauth ?= "1.0.2" -PREFERRED_VERSION_icebloxx ?= "1.0.0" -PREFERRED_VERSION_icecc-create-env ?= "0.1" -PREFERRED_VERSION_icewm ?= "1.2.30" -PREFERRED_VERSION_icmpquery ?= "1.03" -PREFERRED_VERSION_ico ?= "1.0.2" -PREFERRED_VERSION_icu ?= "3.6" -PREFERRED_VERSION_icu-native ?= "3.6" -PREFERRED_VERSION_id3lib ?= "3.8.3" -PREFERRED_VERSION_ifplugd ?= "0.25" -PREFERRED_VERSION_ifupdown ?= "0.6.8" -PREFERRED_VERSION_iksemel ?= "1.2" -PREFERRED_VERSION_imagemagick ?= "6.3.5-10" -PREFERRED_VERSION_imake ?= "1.0.2" -PREFERRED_VERSION_imlib ?= "1.9.15" -PREFERRED_VERSION_imlib2 ?= "1.4.0.002" -PREFERRED_VERSION_imposter ?= "0.3" -PREFERRED_VERSION_inetutils ?= "1.4.2" -PREFERRED_VERSION_initscripts ?= "1.0" -PREFERRED_VERSION_initscripts-openprotium ?= "1.0" -PREFERRED_VERSION_initscripts-slugos ?= "1.0" -PREFERRED_VERSION_inkscape ?= "0.43" -PREFERRED_VERSION_inkwp ?= "0.1.1" -PREFERRED_VERSION_inotify-tools ?= "2.1" -PREFERRED_VERSION_inputproto ?= "1.4.2.1" -PREFERRED_VERSION_install-native ?= "0.1" -PREFERRED_VERSION_insttrain ?= "1.0.5" -PREFERRED_VERSION_interbench ?= "0.30" -PREFERRED_VERSION_intercom ?= "0.15" -PREFERRED_VERSION_intltool ?= "0.35.2" -PREFERRED_VERSION_intltool-native ?= "0.35.0" -PREFERRED_VERSION_iozone3 ?= "263" -PREFERRED_VERSION_ipaq-sleep ?= "0.9" -PREFERRED_VERSION_ipatience ?= "0.1" -PREFERRED_VERSION_iperf ?= "2.0.2" -PREFERRED_VERSION_ipkg ?= "0.99.163" -PREFERRED_VERSION_ipkg-collateral ?= "1.0" -PREFERRED_VERSION_ipkg-native ?= "0.99.163" -PREFERRED_VERSION_iproute2 ?= "2.6.22" -PREFERRED_VERSION_ipsec-tools ?= "0.6.7" -PREFERRED_VERSION_iptables ?= "1.3.8" -PREFERRED_VERSION_iptstate ?= "2.2.1" -PREFERRED_VERSION_iputils ?= "20020927" -PREFERRED_VERSION_iqnotes ?= "2.0.99-2.1.0rc1" -PREFERRED_VERSION_ircp ?= "0.3" -PREFERRED_VERSION_irda-utils ?= "0.9.16" -PREFERRED_VERSION_irdadump ?= "0.9.16" -PREFERRED_VERSION_irk-belkin ?= "0.11" -PREFERRED_VERSION_irk-targus ?= "0.11.0" -PREFERRED_VERSION_irssi ?= "0.8.10" -PREFERRED_VERSION_iso-codes ?= "1.4" -PREFERRED_VERSION_ixp4xx-npe-native ?= "2.4" -PREFERRED_VERSION_jack ?= "0.103.0" -PREFERRED_VERSION_jamvm ?= "1.4.5" -PREFERRED_VERSION_jards ?= "1.0" -PREFERRED_VERSION_jhead ?= "2.6.0" -PREFERRED_VERSION_jikes ?= "1.22" -PREFERRED_VERSION_jikes-native ?= "1.21" -PREFERRED_VERSION_joe ?= "3.1" -PREFERRED_VERSION_js ?= "1.5" -PREFERRED_VERSION_juce ?= "1.29" -PREFERRED_VERSION_justreader ?= "2.0k" -PREFERRED_VERSION_kaffe-gtk ?= "1.1.5" -PREFERRED_VERSION_kaffeh-native ?= "1.1.5" -PREFERRED_VERSION_kakasi ?= "2.3.4" -PREFERRED_VERSION_kakasi-native ?= "2.3.4" -PREFERRED_VERSION_kanatest ?= "0.3.6" -PREFERRED_VERSION_kazehakase ?= "0.4.7" -PREFERRED_VERSION_kbd ?= "1.12" -PREFERRED_VERSION_kbproto ?= "1.0.3" -PREFERRED_VERSION_kdepimpi ?= "2.2.7" -PREFERRED_VERSION_kernbench ?= "0.41" -PREFERRED_VERSION_kernel-module-wlags49-h1-cs ?= "718" -PREFERRED_VERSION_kernel-module-wlags49-h2-cs ?= "718" -PREFERRED_VERSION_kexec-tools ?= "1.101" -PREFERRED_VERSION_keylaunch ?= "2.0.10" -PREFERRED_VERSION_keymap-locales ?= "1.0" -PREFERRED_VERSION_keymaps ?= "1.0" -PREFERRED_VERSION_keyring ?= "0.6.8" -PREFERRED_VERSION_kf ?= "0.5.4.1" -PREFERRED_VERSION_kismet ?= "2007-10-R1" -PREFERRED_VERSION_klibc ?= "1.1.1" -PREFERRED_VERSION_klimt ?= "0.6.1" -PREFERRED_VERSION_knights ?= "1.14" -PREFERRED_VERSION_konqueror-embedded ?= "20070212" -PREFERRED_VERSION_kpengine ?= "0.1" -PREFERRED_VERSION_kphonepi ?= "1.0.0" -PREFERRED_VERSION_kstars-embedded ?= "0.8.5" -PREFERRED_VERSION_ksymoops ?= "2.4.9" -PREFERRED_VERSION_ktimetrackerpi ?= "0.9.7" -PREFERRED_VERSION_kxml2 ?= "2.3.0" -PREFERRED_VERSION_labyrinth ?= "0.7" -PREFERRED_VERSION_lame ?= "3.96.1" -PREFERRED_VERSION_lbreakout2 ?= "2.6beta" -PREFERRED_VERSION_lcdproc ?= "0.5.1" -PREFERRED_VERSION_lcms ?= "1.15" -PREFERRED_VERSION_leafpad ?= "0.8.9" -PREFERRED_VERSION_led ?= "0.0cvs20060814" -PREFERRED_VERSION_lemon ?= "3.3.5" -PREFERRED_VERSION_lemon-native ?= "3.3.5" -PREFERRED_VERSION_less ?= "406" -PREFERRED_VERSION_lessertunjo ?= "0.0.10" -PREFERRED_VERSION_lftp ?= "3.5.1" -PREFERRED_VERSION_liba52 ?= "0.7.4" -PREFERRED_VERSION_libaal ?= "1.0.4" -PREFERRED_VERSION_libabenabler ?= "0.1" -PREFERRED_VERSION_libabenabler2 ?= "1.0" -PREFERRED_VERSION_libaio ?= "0.3.106" -PREFERRED_VERSION_libaio-oracle ?= "0.3.0" -PREFERRED_VERSION_libalgorithm-diff-perl ?= "1.1902" -PREFERRED_VERSION_libalgorithm-diff-perl-native ?= "1.1902" -PREFERRED_VERSION_libao ?= "0.8.6" -PREFERRED_VERSION_libao-alsa ?= "0.8.6" -PREFERRED_VERSION_libao-plugin-alsa ?= "0.8.6" -PREFERRED_VERSION_libapplewm ?= "1.0.0" -PREFERRED_VERSION_libarchive-tar-perl ?= "1.30" -PREFERRED_VERSION_libarchive-tar-perl-native ?= "1.30" -PREFERRED_VERSION_libarena ?= "0.2" -PREFERRED_VERSION_libart-lgpl ?= "2.3.19" -PREFERRED_VERSION_libassa ?= "3.4.2" -PREFERRED_VERSION_libassuan ?= "0.6.9" -PREFERRED_VERSION_libatomics-ops ?= "1.2" -PREFERRED_VERSION_libbedic ?= "1.0" -PREFERRED_VERSION_libbonobo ?= "2.14.0" -PREFERRED_VERSION_libbonoboui ?= "2.18.0" -PREFERRED_VERSION_libcache-cache-perl ?= "1.05" -PREFERRED_VERSION_libcache-cache-perl-native ?= "1.05" -PREFERRED_VERSION_libcalenabler ?= "1.0" -PREFERRED_VERSION_libcap ?= "1.10" -PREFERRED_VERSION_libccaudio2 ?= "0.9.0" -PREFERRED_VERSION_libcdaudio ?= "0.99.12p2" -PREFERRED_VERSION_libcgicc ?= "3.2.3" -PREFERRED_VERSION_libchenabler ?= "0.1" -PREFERRED_VERSION_libclass-container-perl ?= "0.12" -PREFERRED_VERSION_libclass-container-perl-native ?= "0.12" -PREFERRED_VERSION_libclass-data-inheritable-perl ?= "0.06" -PREFERRED_VERSION_libclass-data-inheritable-perl-native ?= "0.06" -PREFERRED_VERSION_libcompress-zlib-perl ?= "1.42" -PREFERRED_VERSION_libcompress-zlib-perl-native ?= "1.42" -PREFERRED_VERSION_libcontactsdb ?= "0.5" -PREFERRED_VERSION_libcroco ?= "0.6.1" -PREFERRED_VERSION_libcwd ?= "0.99.47" -PREFERRED_VERSION_libdaemon ?= "0.12" -PREFERRED_VERSION_libdata-optlist-perl ?= "0.101" -PREFERRED_VERSION_libdata-optlist-perl-native ?= "0.101" -PREFERRED_VERSION_libdbi ?= "0.7.2" -PREFERRED_VERSION_libdbi-drivers ?= "0.7.1" -PREFERRED_VERSION_libddmpeg ?= "1.5" -PREFERRED_VERSION_libdes ?= "4.01" -PREFERRED_VERSION_libdevel-stacktrace-perl ?= "1.13" -PREFERRED_VERSION_libdevel-stacktrace-perl-native ?= "1.13" -PREFERRED_VERSION_libdictionary ?= "1.0" -PREFERRED_VERSION_libdigest-sha1-perl ?= "2.11" -PREFERRED_VERSION_libdigest-sha1-perl-native ?= "2.11" -PREFERRED_VERSION_libdisplaymigration ?= "0.99" -PREFERRED_VERSION_libdmx ?= "1.0.2" -PREFERRED_VERSION_libdotdesktop ?= "0.11" -PREFERRED_VERSION_libdrm ?= "2.3.0" -PREFERRED_VERSION_libdvb ?= "0.5.5.1" -PREFERRED_VERSION_libdvdnav ?= "0.1.10" -PREFERRED_VERSION_libdvdread ?= "0.9.6" -PREFERRED_VERSION_libedit ?= "20050118" -PREFERRED_VERSION_libeina ?= "0.96.7" -PREFERRED_VERSION_libelf ?= "0.8.6" -PREFERRED_VERSION_liberror-perl ?= "0.17004" -PREFERRED_VERSION_liberror-perl-native ?= "0.17004" -PREFERRED_VERSION_libesmtp ?= "1.0.4" -PREFERRED_VERSION_libetpan ?= "0.52" -PREFERRED_VERSION_libevent ?= "1.1a" -PREFERRED_VERSION_libeventdb ?= "0.90" -PREFERRED_VERSION_libevnet ?= "0.3.1" -PREFERRED_VERSION_libexception-class-perl ?= "1.23" -PREFERRED_VERSION_libexception-class-perl-native ?= "1.23" -PREFERRED_VERSION_libexif ?= "0.6.13" -PREFERRED_VERSION_libextutils-cbuilder-perl ?= "0.18" -PREFERRED_VERSION_libextutils-cbuilder-perl-native ?= "0.18" -PREFERRED_VERSION_libextutils-depends-perl ?= "0.205" -PREFERRED_VERSION_libextutils-depends-perl-native ?= "0.205" -PREFERRED_VERSION_libextutils-parsexs-perl ?= "2.16" -PREFERRED_VERSION_libextutils-parsexs-perl-native ?= "2.16" -PREFERRED_VERSION_libextutils-pkgconfig-perl ?= "1.07" -PREFERRED_VERSION_libextutils-pkgconfig-perl-native ?= "1.07" -PREFERRED_VERSION_libflv ?= "0.2" -PREFERRED_VERSION_libfontenc ?= "1.0.4" -PREFERRED_VERSION_libfontenc-native ?= "1.0.4" -PREFERRED_VERSION_libfribidi ?= "0.10.4" -PREFERRED_VERSION_libfs ?= "1.0.0" -PREFERRED_VERSION_libftdi ?= "0.9" -PREFERRED_VERSION_libftdi-native ?= "0.9" -PREFERRED_VERSION_libg15 ?= "1.2.1" -PREFERRED_VERSION_libg15render ?= "1.2" -PREFERRED_VERSION_libgalago ?= "0.3.3" -PREFERRED_VERSION_libgc ?= "6.7" -PREFERRED_VERSION_libgcrypt ?= "1.2.3" -PREFERRED_VERSION_libgeda ?= "20050820" -PREFERRED_VERSION_libgemwidget ?= "1.0" -PREFERRED_VERSION_libglade ?= "2.6.2" -PREFERRED_VERSION_libglademm ?= "2.4.1" -PREFERRED_VERSION_libgmime ?= "2.1.7" -PREFERRED_VERSION_libgnome ?= "2.18.0" -PREFERRED_VERSION_libgnomecanvas ?= "2.20.0" -PREFERRED_VERSION_libgnomecups ?= "0.2.2" -PREFERRED_VERSION_libgnomeprint ?= "2.8.2" -PREFERRED_VERSION_libgnomeprintui ?= "2.8.2" -PREFERRED_VERSION_libgnomeui ?= "2.18.1" -PREFERRED_VERSION_libgpelaunch ?= "0.14" -PREFERRED_VERSION_libgpephone ?= "0.4" -PREFERRED_VERSION_libgpepimc ?= "0.9" -PREFERRED_VERSION_libgpepimc-hildon ?= "0.5" -PREFERRED_VERSION_libgpevtype ?= "0.50" -PREFERRED_VERSION_libgpewidget ?= "0.115" -PREFERRED_VERSION_libgpewidget-hildon ?= "0.102" -PREFERRED_VERSION_libgpg-error ?= "1.4" -PREFERRED_VERSION_libgphoto2 ?= "2.4.0" -PREFERRED_VERSION_libgpsbt ?= "0.1" -PREFERRED_VERSION_libgpsmgr ?= "0.1" -PREFERRED_VERSION_libgsf ?= "1.14.2" -PREFERRED_VERSION_libgsm ?= "1.0.10" -PREFERRED_VERSION_libgtkinput ?= "0.3" -PREFERRED_VERSION_libgtkstylus ?= "0.3" -PREFERRED_VERSION_libhal-nm ?= "0.0.2" -PREFERRED_VERSION_libhandoff ?= "0.1" -PREFERRED_VERSION_libhangul ?= "0.0.4" -PREFERRED_VERSION_libhildonfm ?= "1.9.41" -PREFERRED_VERSION_libhildonhelp ?= "1.9.1" -PREFERRED_VERSION_libhildonmime ?= "1.9.5" -PREFERRED_VERSION_libhtml-mason-perl ?= "1.35" -PREFERRED_VERSION_libiac ?= "1.0" -PREFERRED_VERSION_libice ?= "1.0.4" -PREFERRED_VERSION_libiconv ?= "1.11" -PREFERRED_VERSION_libid3 ?= "1.1" -PREFERRED_VERSION_libidl ?= "0.8.6" -PREFERRED_VERSION_libidl-native ?= "0.8.6" -PREFERRED_VERSION_libidn ?= "0.5.19" -PREFERRED_VERSION_libim ?= "0.2" -PREFERRED_VERSION_libintl-perl ?= "1.16" -PREFERRED_VERSION_libintl-perl-native ?= "1.16" -PREFERRED_VERSION_libio-zlib-perl ?= "1.04" -PREFERRED_VERSION_libio-zlib-perl-native ?= "1.04" -PREFERRED_VERSION_libjingle-tapioca ?= "0.3.10" -PREFERRED_VERSION_liblbxutil ?= "1.0.1" -PREFERRED_VERSION_liblipsevent ?= "0.1" -PREFERRED_VERSION_liblocale-gettext-perl ?= "1.05" -PREFERRED_VERSION_liblocale-gettext-perl-native ?= "1.05" -PREFERRED_VERSION_liblockfile ?= "1.06" -PREFERRED_VERSION_liblog-dispatch-perl ?= "2.13" -PREFERRED_VERSION_liblog-dispatch-perl-native ?= "2.13" -PREFERRED_VERSION_liblog-log4perl-perl ?= "1.06" -PREFERRED_VERSION_liblog-log4perl-perl-native ?= "1.06" -PREFERRED_VERSION_libmad ?= "0.15.1b" -PREFERRED_VERSION_libmail-sendmail-perl ?= "0.79" -PREFERRED_VERSION_libmailwrapper ?= "1.2.3" -PREFERRED_VERSION_libmatchbox ?= "1.9" -PREFERRED_VERSION_libmath-bigint-gmp-perl ?= "1.18" -PREFERRED_VERSION_libmikmod ?= "3.2.0-beta2" -PREFERRED_VERSION_libmimedir ?= "0.4.2" -PREFERRED_VERSION_libmng ?= "1.0.8" -PREFERRED_VERSION_libmodplug ?= "0.7" -PREFERRED_VERSION_libmodule-build-perl ?= "0.2805" -PREFERRED_VERSION_libmodule-build-perl-native ?= "0.2805" -PREFERRED_VERSION_libmrss ?= "0.17.2" -PREFERRED_VERSION_libmsgenabler ?= "1.0" -PREFERRED_VERSION_libmusicbrainz ?= "2.1.4" -PREFERRED_VERSION_libnet ?= "1.1.2.1" -PREFERRED_VERSION_libnet-ip-perl ?= "1.25" -PREFERRED_VERSION_libnet-ip-perl-native ?= "1.25" -PREFERRED_VERSION_libnetfilter-queue ?= "0.0.13" -PREFERRED_VERSION_libnetserver-generic-perl ?= "1.03" -PREFERRED_VERSION_libnfnetlink ?= "0.0.30" -PREFERRED_VERSION_libnids ?= "1.18" -PREFERRED_VERSION_libnotify ?= "0.4.4" -PREFERRED_VERSION_libnss-mdns ?= "0.9" -PREFERRED_VERSION_libnxml ?= "0.16" -PREFERRED_VERSION_libogg ?= "1.1" -PREFERRED_VERSION_liboil ?= "0.3.11" -PREFERRED_VERSION_libol ?= "0.3.18" -PREFERRED_VERSION_liboldx ?= "1.0.1" -PREFERRED_VERSION_liboop ?= "1.0" -PREFERRED_VERSION_libopenraw ?= "0.0.2" -PREFERRED_VERSION_libopensync ?= "0.22" -PREFERRED_VERSION_libopensync-plugin-evo2-sync ?= "0.22" -PREFERRED_VERSION_libopensync-plugin-file ?= "0.18" -PREFERRED_VERSION_libopensync-plugin-file-sync ?= "0.22" -PREFERRED_VERSION_libopensync-plugin-gpe ?= "0.18" -PREFERRED_VERSION_libopensync-plugin-irmc ?= "0.18" -PREFERRED_VERSION_libopensync-plugin-irmc-sync ?= "0.22" -PREFERRED_VERSION_libosso ?= "1.20" -PREFERRED_VERSION_libosso-gsf ?= "1.11.10.4" -PREFERRED_VERSION_libosso-help ?= "2.1.2" -PREFERRED_VERSION_libpam ?= "0.79" -PREFERRED_VERSION_libparams-util-perl ?= "0.20" -PREFERRED_VERSION_libparams-util-perl-native ?= "0.20" -PREFERRED_VERSION_libparams-validate-perl ?= "0.86" -PREFERRED_VERSION_libparams-validate-perl-native ?= "0.86" -PREFERRED_VERSION_libpcap ?= "0.9.6" -PREFERRED_VERSION_libpcl ?= "1.4" -PREFERRED_VERSION_libpcre ?= "4.4" -PREFERRED_VERSION_libpcre-native ?= "4.4" -PREFERRED_VERSION_libperl6-junction-perl ?= "1.10" -PREFERRED_VERSION_libpixman ?= "0.9.6" -PREFERRED_VERSION_libpng ?= "1.2.20" -PREFERRED_VERSION_libpng-native ?= "1.2.20" -PREFERRED_VERSION_libpthread-stubs ?= "0.1" -PREFERRED_VERSION_libqanava ?= "0.0.7" -PREFERRED_VERSION_libqtaux2 ?= "1.2.3" -PREFERRED_VERSION_librcf ?= "0.4" -PREFERRED_VERSION_librecord ?= "0.1" -PREFERRED_VERSION_librecord2 ?= "0.1" -PREFERRED_VERSION_librewrite ?= "0.1" -PREFERRED_VERSION_librsvg ?= "2.16.1" -PREFERRED_VERSION_librsync ?= "0.9.7" -PREFERRED_VERSION_librtaudio ?= "3.0.1" -PREFERRED_VERSION_libsamplerate0 ?= "0.1.2" -PREFERRED_VERSION_libschedule ?= "0.17" -PREFERRED_VERSION_libsdl-directfb ?= "1.2.9" -PREFERRED_VERSION_libsdl-gfx ?= "2.0.11" -PREFERRED_VERSION_libsdl-image ?= "1.2.3" -PREFERRED_VERSION_libsdl-mixer ?= "1.2.6" -PREFERRED_VERSION_libsdl-native ?= "1.2.11" -PREFERRED_VERSION_libsdl-net ?= "1.2.7" -PREFERRED_VERSION_libsdl-ttf ?= "2.0.3" -PREFERRED_VERSION_libsdl-ttf-native ?= "2.0.3" -PREFERRED_VERSION_libsdl-x11 ?= "1.2.9" -PREFERRED_VERSION_libsettings ?= "0.3" -PREFERRED_VERSION_libsexy ?= "0.1.11" -PREFERRED_VERSION_libsidplay ?= "1.36.59" -PREFERRED_VERSION_libsigcx0 ?= "0.6.4" -PREFERRED_VERSION_libsm ?= "1.0.3" -PREFERRED_VERSION_libsndfile1 ?= "1.0.17" -PREFERRED_VERSION_libsoundgen ?= "0.6" -PREFERRED_VERSION_libsoup ?= "2.2.100" -PREFERRED_VERSION_libspf2 ?= "1.0.4" -PREFERRED_VERSION_libspiff ?= "0.7.2" -PREFERRED_VERSION_libssh ?= "0.11" -PREFERRED_VERSION_libsub-exporter-perl ?= "0.970" -PREFERRED_VERSION_libsub-exporter-perl-native ?= "0.970" -PREFERRED_VERSION_libsub-install-perl ?= "0.922" -PREFERRED_VERSION_libsub-install-perl-native ?= "0.922" -PREFERRED_VERSION_libsub-uplevel-perl ?= "0.13" -PREFERRED_VERSION_libsub-uplevel-perl-native ?= "0.13" -PREFERRED_VERSION_libsvg ?= "0.1.4" -PREFERRED_VERSION_libtelepathy ?= "0.0.53" -PREFERRED_VERSION_libtest-builder-tester-perl ?= "1.01" -PREFERRED_VERSION_libtest-differences-perl ?= "0.47" -PREFERRED_VERSION_libtest-exception-perl ?= "0.22" -PREFERRED_VERSION_libtest-mockmodule-perl ?= "0.05" -PREFERRED_VERSION_libtest-output-perl ?= "0.10" -PREFERRED_VERSION_libtext-diff-perl ?= "0.35" -PREFERRED_VERSION_libtext-diff-perl-native ?= "0.35" -PREFERRED_VERSION_libticables ?= "3.9.2" -PREFERRED_VERSION_libticalcs ?= "4.5.9" -PREFERRED_VERSION_libtifiles ?= "0.6.5" -PREFERRED_VERSION_libtinymail ?= "0.0.3" -PREFERRED_VERSION_libtododb ?= "0.11" -PREFERRED_VERSION_libtomcrypt ?= "0.97b" -PREFERRED_VERSION_libtomoe-gtk ?= "0.1.0" -PREFERRED_VERSION_libtool ?= "1.5.10" -PREFERRED_VERSION_libtool-cross ?= "1.5.10" -PREFERRED_VERSION_libtool-native ?= "1.5.10" -PREFERRED_VERSION_libungif ?= "4.1.3" -PREFERRED_VERSION_libupnp ?= "1.3.1" -PREFERRED_VERSION_liburi-perl ?= "1.35" -PREFERRED_VERSION_liburi-perl-native ?= "1.35" -PREFERRED_VERSION_liburiparser ?= "0.5.1" -PREFERRED_VERSION_libusb ?= "0.1.12" -PREFERRED_VERSION_libusb-native ?= "0.1.12" -PREFERRED_VERSION_libversion-perl ?= "0.6701" -PREFERRED_VERSION_libversion-perl-native ?= "0.6701" -PREFERRED_VERSION_libvisual ?= "0.1.3" -PREFERRED_VERSION_libvisual-plugins ?= "0.1.3" -PREFERRED_VERSION_libvncserver ?= "0.8.2" -PREFERRED_VERSION_libvocenabler ?= "0.1" -PREFERRED_VERSION_libvorbis ?= "1.0.1" -PREFERRED_VERSION_libw100 ?= "0.0.2" -PREFERRED_VERSION_libwindowswm ?= "1.0.0" -PREFERRED_VERSION_libwnck ?= "2.13.5" -PREFERRED_VERSION_libwpd ?= "0.8.6" -PREFERRED_VERSION_libx11 ?= "1.1.3" -PREFERRED_VERSION_libx11-native = "1.0.3" -PREFERRED_VERSION_libxau ?= "1.0.3" -PREFERRED_VERSION_libxau-native ?= "1.0.3" -PREFERRED_VERSION_libxaw ?= "1.0.4" -PREFERRED_VERSION_libxcb ?= "1.0" -PREFERRED_VERSION_libxcomposite ?= "0.4.0" -PREFERRED_VERSION_libxcursor ?= "1.1.9" -PREFERRED_VERSION_libxdamage ?= "1.1.1" -PREFERRED_VERSION_libxdmcp ?= "1.0.2" -PREFERRED_VERSION_libxdmcp-native ?= "1.0.2" -PREFERRED_VERSION_libxevie ?= "1.0.2" -PREFERRED_VERSION_libxext ?= "1.0.3" -PREFERRED_VERSION_libxfce4mcs ?= "4.4.1" -PREFERRED_VERSION_libxfce4util ?= "4.4.1" -PREFERRED_VERSION_libxfcegui4 ?= "4.4.1" -PREFERRED_VERSION_libxfixes ?= "4.0.3" -PREFERRED_VERSION_libxfont ?= "1.3.1" -PREFERRED_VERSION_libxfont-native ?= "1.3.0" -PREFERRED_VERSION_libxfontcache ?= "1.0.4" -PREFERRED_VERSION_libxft ?= "2.1.12" -PREFERRED_VERSION_libxi ?= "1.1.3" -PREFERRED_VERSION_libxine ?= "1.1.0" -PREFERRED_VERSION_libxine-fb ?= "1.0" -PREFERRED_VERSION_libxine-x11 ?= "1.0" -PREFERRED_VERSION_libxinerama ?= "1.0.2" -PREFERRED_VERSION_libxkbfile ?= "1.0.4" -PREFERRED_VERSION_libxkbui ?= "1.0.2" -PREFERRED_VERSION_libxml-parser-perl ?= "2.34" -PREFERRED_VERSION_libxml-parser-perl-native ?= "2.34" -PREFERRED_VERSION_libxml2 ?= "2.6.29" -PREFERRED_VERSION_libxml2-native ?= "2.6.29" -PREFERRED_VERSION_libxmu ?= "1.0.3" -PREFERRED_VERSION_libxp ?= "1.0.0" -PREFERRED_VERSION_libxpm ?= "3.5.7" -PREFERRED_VERSION_libxprintapputil ?= "1.0.1" -PREFERRED_VERSION_libxprintutil ?= "1.0.1" -PREFERRED_VERSION_libxrandr ?= "1.2.2" -PREFERRED_VERSION_libxrender ?= "0.9.4" -PREFERRED_VERSION_libxres ?= "1.0.3" -PREFERRED_VERSION_libxscrnsaver ?= "1.1.2" -PREFERRED_VERSION_libxsettings ?= "0.11" -PREFERRED_VERSION_libxsettings-client ?= "0.17" -PREFERRED_VERSION_libxslt ?= "1.1.21" -PREFERRED_VERSION_libxslt-native ?= "1.1.21" -PREFERRED_VERSION_libxt ?= "1.0.5" -PREFERRED_VERSION_libxtrap ?= "1.0.0" -PREFERRED_VERSION_libxtst ?= "1.0.3" -PREFERRED_VERSION_libxv ?= "1.0.3" -PREFERRED_VERSION_libxvmc ?= "1.0.4" -PREFERRED_VERSION_libxxf86dga ?= "1.0.2" -PREFERRED_VERSION_libxxf86misc ?= "1.0.1" -PREFERRED_VERSION_libxxf86vm ?= "1.0.1" -PREFERRED_VERSION_libyaml-perl ?= "0.62" -PREFERRED_VERSION_libyaml-perl-native ?= "0.62" -PREFERRED_VERSION_lighttpd ?= "1.4.18" -PREFERRED_VERSION_lineak ?= "0.8.3" -PREFERRED_VERSION_linphone ?= "1.6.0" -PREFERRED_VERSION_linphone-hh ?= "0.12.2.hh1" -PREFERRED_VERSION_linux-hotplug ?= "20040920" -PREFERRED_VERSION_linux-libc-headers ?= "2.6.22" -PREFERRED_VERSION_lisa ?= "0.2.2" -PREFERRED_VERSION_live555 ?= "20051005" -PREFERRED_VERSION_llvm ?= "2.0" -PREFERRED_VERSION_llvm-native ?= "2.1" -PREFERRED_VERSION_lmbench ?= "2.0.4" -PREFERRED_VERSION_lmsensors-apps ?= "2.10.1" -PREFERRED_VERSION_lndir ?= "1.0.1" -PREFERRED_VERSION_loader ?= "0.04" -PREFERRED_VERSION_login-manager ?= "1.0" -PREFERRED_VERSION_logrotate ?= "3.7.1" -PREFERRED_VERSION_logrotate-script ?= "cvs" -PREFERRED_VERSION_loudmouth ?= "1.2.2" -PREFERRED_VERSION_lrzsz ?= "0.12.20" -PREFERRED_VERSION_lsh ?= "1.5.5" -PREFERRED_VERSION_lsof ?= "4.78" -PREFERRED_VERSION_ltp ?= "20070228" -PREFERRED_VERSION_ltrace ?= "0.4" -PREFERRED_VERSION_lttng-control ?= "0.12" -PREFERRED_VERSION_lttng-viewer ?= "0.8.41-20060512" -PREFERRED_VERSION_lua ?= "5.0.2" -PREFERRED_VERSION_lua-gtk2 ?= "0.3" -PREFERRED_VERSION_lua-native ?= "5.0.2" -PREFERRED_VERSION_luit ?= "1.0.2" -PREFERRED_VERSION_lvm2 ?= "2.01.15" -PREFERRED_VERSION_lxt ?= "1.0" -PREFERRED_VERSION_lyx ?= "1.4.4" -PREFERRED_VERSION_lzma ?= "4.17" -PREFERRED_VERSION_lzma-native ?= "4.17" -PREFERRED_VERSION_lzo ?= "1.08" -PREFERRED_VERSION_lzo-native ?= "1.08" -PREFERRED_VERSION_m4 ?= "1.4.8" -PREFERRED_VERSION_m4-native ?= "1.4.8" -PREFERRED_VERSION_macchanger ?= "1.5.0" -PREFERRED_VERSION_madfu ?= "1.2" -PREFERRED_VERSION_madplay ?= "0.15.2b" -PREFERRED_VERSION_mahjongg ?= "1.0.0" -PREFERRED_VERSION_mailutils ?= "0.3.1" -PREFERRED_VERSION_mailx ?= "8.1.2-0.20050715cvs" -PREFERRED_VERSION_make ?= "3.81" -PREFERRED_VERSION_make-native ?= "3.81" -PREFERRED_VERSION_makedepend ?= "1.0.1" -PREFERRED_VERSION_makedepend-native ?= "1.0.1" -PREFERRED_VERSION_makedev ?= "2.3.1" -PREFERRED_VERSION_makedevs ?= "1.0.0" -PREFERRED_VERSION_makedevs-native ?= "1.0.0" -PREFERRED_VERSION_makeself-native ?= "cvs" -PREFERRED_VERSION_maki ?= "1.0.4ern" -PREFERRED_VERSION_man ?= "1.5p" -PREFERRED_VERSION_man-pages ?= "2.41" -PREFERRED_VERSION_manufacturers ?= "20031209" -PREFERRED_VERSION_mapnik ?= "0.4.0" -PREFERRED_VERSION_maradns ?= "1.0.39" -PREFERRED_VERSION_masqmail ?= "0.2.21" -PREFERRED_VERSION_matchbox ?= "0.9.1" -PREFERRED_VERSION_matchbox-applet-cards ?= "1.0.2" -PREFERRED_VERSION_matchbox-applet-inputmanager ?= "0.6" -PREFERRED_VERSION_matchbox-applet-startup-monitor ?= "0.1" -PREFERRED_VERSION_matchbox-applet-volume ?= "0.1" -PREFERRED_VERSION_matchbox-common ?= "0.9.1" -PREFERRED_VERSION_matchbox-desktop ?= "0.9.1" -PREFERRED_VERSION_matchbox-panel ?= "0.9.3" -PREFERRED_VERSION_matchbox-panel-hacks ?= "0.3-1" -PREFERRED_VERSION_matchbox-panel-manager ?= "0.1" -PREFERRED_VERSION_matchbox-theme-sato ?= "0.1" -PREFERRED_VERSION_matchbox-themes-extra ?= "0.3" -PREFERRED_VERSION_matchbox-themes-gtk ?= "1.0" -PREFERRED_VERSION_matchbox-wm ?= "1.2" -PREFERRED_VERSION_mathomatic ?= "unstable" -PREFERRED_VERSION_matrixssl ?= "1.1.1" -PREFERRED_VERSION_mb-applet-tasks ?= "1.0.0" -PREFERRED_VERSION_mb-desktop-xine ?= "0.4" -PREFERRED_VERSION_mbmerlin ?= "0.8.1-2" -PREFERRED_VERSION_mc ?= "4.6.1" -PREFERRED_VERSION_mce-dev ?= "1.5.6" -PREFERRED_VERSION_mdadm ?= "2.5.5" -PREFERRED_VERSION_mdev ?= "1.2.1" -PREFERRED_VERSION_mdk2 ?= "v33" -PREFERRED_VERSION_memedit ?= "0.7" -PREFERRED_VERSION_memtester ?= "4.0.6" -PREFERRED_VERSION_mesa ?= "6.5.2" -PREFERRED_VERSION_mesa-dri ?= "6.5.2" -PREFERRED_VERSION_meta-e-x11 ?= "1.0" -PREFERRED_VERSION_meta-e-x11-core ?= "1.0" -PREFERRED_VERSION_meta-gpe ?= "1.0" -PREFERRED_VERSION_meta-gpe-extras ?= "1.0" -PREFERRED_VERSION_meta-gpephone ?= "1.0" -PREFERRED_VERSION_meta-maemo ?= "1.0" -PREFERRED_VERSION_meta-sdk ?= "1.0" -PREFERRED_VERSION_meta-sdk-gpe ?= "1.0" -PREFERRED_VERSION_meta-sdk-sbox ?= "1.0" -PREFERRED_VERSION_meta-sdk-sbox-gpe ?= "1.0" -PREFERRED_VERSION_meta-sdl ?= "1.0" -PREFERRED_VERSION_meta-sectest-gpe ?= "1.0" -PREFERRED_VERSION_meta-toolchain ?= "1.0" -PREFERRED_VERSION_metakit ?= "2.4.9.3" -PREFERRED_VERSION_metalog ?= "0.7" -PREFERRED_VERSION_mgetty ?= "1.1.30" -PREFERRED_VERSION_miau ?= "0.5.3" -PREFERRED_VERSION_micro-emacs ?= "20060909" -PREFERRED_VERSION_microcom ?= "1.02" -PREFERRED_VERSION_microwindows ?= "0.90" -PREFERRED_VERSION_midori ?= "0.0.13" -PREFERRED_VERSION_midpath ?= "0.1" -PREFERRED_VERSION_midpath-alsa ?= "0.1" -PREFERRED_VERSION_midpath-cldc ?= "0.1" -PREFERRED_VERSION_midpath-cldc-native ?= "0.1" -PREFERRED_VERSION_midpath-cldc-sdl ?= "0.1" -PREFERRED_VERSION_midpath-cldc-x11 ?= "0.1" -PREFERRED_VERSION_midpath-gtk ?= "0.1" -PREFERRED_VERSION_midpath-qt3x11 ?= "0.1" -PREFERRED_VERSION_midpath-qte ?= "0.1" -PREFERRED_VERSION_midpath-test ?= "0.1" -PREFERRED_VERSION_mikmod ?= "3.2.2-beta1" -PREFERRED_VERSION_mileage ?= "4.2.0-cvs-20060814" -PREFERRED_VERSION_militaryalphabet ?= "0.2.1" -PREFERRED_VERSION_mime-support ?= "3.28" -PREFERRED_VERSION_miniclipboard ?= "0.3" -PREFERRED_VERSION_minicom ?= "2.1" -PREFERRED_VERSION_minifo-modules ?= "0.6.1-pre1" -PREFERRED_VERSION_miniinit ?= "1.0" -PREFERRED_VERSION_minimix ?= "0.9" -PREFERRED_VERSION_minipredict ?= "1.0" -PREFERRED_VERSION_mipv6 ?= "1.1-v2.4.26" -PREFERRED_VERSION_misdn ?= "cvs" -PREFERRED_VERSION_mkbot ?= "0.3" -PREFERRED_VERSION_mkfontdir ?= "1.0.3" -PREFERRED_VERSION_mkfontdir-native ?= "1.0.3" -PREFERRED_VERSION_mobilemesh ?= "1.2" -PREFERRED_VERSION_moc ?= "2.4.0" -PREFERRED_VERSION_modphp ?= "5.1.6" -PREFERRED_VERSION_modplugplay ?= "1.0" -PREFERRED_VERSION_module-init-tools ?= "3.2.2" -PREFERRED_VERSION_module-init-tools-cross ?= "3.2.2" -PREFERRED_VERSION_modutils ?= "2.4.27" -PREFERRED_VERSION_modutils-collateral ?= "1.0" -PREFERRED_VERSION_modutils-cross ?= "2.4.27" -PREFERRED_VERSION_modutils-initscripts ?= "1.0" -PREFERRED_VERSION_moin ?= "1.5.8" -PREFERRED_VERSION_mono ?= "1.2.5.1" -PREFERRED_VERSION_mono-mcs-intermediate ?= "1.2.5.1" -PREFERRED_VERSION_mono-native ?= "1.2.5.1" -PREFERRED_VERSION_monotone-4 ?= "0.19" -PREFERRED_VERSION_monotone-5 ?= "0.25.2" -PREFERRED_VERSION_monotone-6 ?= "0.34" -PREFERRED_VERSION_motion ?= "3.2.6" -PREFERRED_VERSION_mousepad ?= "0.2.12" -PREFERRED_VERSION_mp3blaster ?= "3.2.3" -PREFERRED_VERSION_mpc ?= "0.12.1" -PREFERRED_VERSION_mpeg2dec ?= "0.4.0b" -PREFERRED_VERSION_mpfr ?= "2.3.0" -PREFERRED_VERSION_mpfr-native ?= "2.3.0" -PREFERRED_VERSION_mpg123 ?= "0.66" -PREFERRED_VERSION_mpg321 ?= "0.2.10" -PREFERRED_VERSION_mplayer-common ?= "0.0.1" -PREFERRED_VERSION_mrxvt ?= "0.5.2" -PREFERRED_VERSION_msmtp ?= "1.4.10" -PREFERRED_VERSION_msn-cap ?= "1.0" -PREFERRED_VERSION_msynctool ?= "0.22" -PREFERRED_VERSION_mt-daapd ?= "0.2.3" -PREFERRED_VERSION_mtools ?= "3.9.9" -PREFERRED_VERSION_mtools-native ?= "3.9.9" -PREFERRED_VERSION_mtpaint ?= "3.02" -PREFERRED_VERSION_mtr ?= "0.65" -PREFERRED_VERSION_multisync ?= "0.90.18" -PREFERRED_VERSION_murasaki ?= "0.8.8" -PREFERRED_VERSION_mutt ?= "1.5.15" -PREFERRED_VERSION_mysql ?= "4.1.18" -PREFERRED_VERSION_mysql-native ?= "4.1.18" -PREFERRED_VERSION_mythfront-config ?= "1.10" -PREFERRED_VERSION_mythfront-session ?= "1.5" -PREFERRED_VERSION_nabi ?= "0.17" -PREFERRED_VERSION_nail ?= "11.21" -PREFERRED_VERSION_nano ?= "2.0.6" -PREFERRED_VERSION_nasm-native ?= "0.98.38" -PREFERRED_VERSION_nautilus ?= "2.12.2" -PREFERRED_VERSION_nautilus-cd-burner ?= "2.8.5" -PREFERRED_VERSION_navit ?= "0.0.3" -PREFERRED_VERSION_nbd ?= "2.8.7" -PREFERRED_VERSION_ncftp ?= "3.2.0" -PREFERRED_VERSION_ncmpc ?= "0.11.1" -PREFERRED_VERSION_ncurses ?= "5.4" -PREFERRED_VERSION_ncurses-native ?= "5.4" -PREFERRED_VERSION_ndisc6 ?= "0.6.7" -PREFERRED_VERSION_neon ?= "0.25.5" -PREFERRED_VERSION_net-snmp ?= "5.4.1" -PREFERRED_VERSION_net-tools ?= "1.60" -PREFERRED_VERSION_net6 ?= "1.3.1" -PREFERRED_VERSION_netatalk ?= "2.0.3" -PREFERRED_VERSION_netbase ?= "4.21" -PREFERRED_VERSION_netcat ?= "0.7.1" -PREFERRED_VERSION_netpbm ?= "10.28" -PREFERRED_VERSION_netperf ?= "2.4.2" -PREFERRED_VERSION_network-manager-applet ?= "0.6.5" -PREFERRED_VERSION_network-suspend-scripts ?= "1.1" -PREFERRED_VERSION_nfs-utils ?= "1.0.6" -PREFERRED_VERSION_ngrep ?= "1.42" -PREFERRED_VERSION_nis-all ?= "1.0" -PREFERRED_VERSION_nkf ?= "2.07" -PREFERRED_VERSION_nkf-native ?= "2.07" -PREFERRED_VERSION_nmap ?= "4.20" -PREFERRED_VERSION_nmixer ?= "2.0" -PREFERRED_VERSION_nmm ?= "0.0.2" -PREFERRED_VERSION_nogravity ?= "2.0" -PREFERRED_VERSION_notecase ?= "1.2.6" -PREFERRED_VERSION_notez ?= "1.1.0" -PREFERRED_VERSION_notification-daemon ?= "0.3.7" -PREFERRED_VERSION_nsd ?= "2.0.0" -PREFERRED_VERSION_ntfs-3g ?= "1.0" -PREFERRED_VERSION_ntop ?= "3.0" -PREFERRED_VERSION_ntp ?= "4.2.2p3" -PREFERRED_VERSION_ntp-ssl ?= "4.1.2" -PREFERRED_VERSION_ntpclient ?= "2003_194" -PREFERRED_VERSION_nunome ?= "1.0.2" -PREFERRED_VERSION_nylon-feed ?= "1.0" -PREFERRED_VERSION_obby ?= "0.4.1" -PREFERRED_VERSION_obexftp ?= "0.20" -PREFERRED_VERSION_obexpush ?= "1.0.0" -PREFERRED_VERSION_obexpush-native ?= "1.0.0" -PREFERRED_VERSION_octave ?= "2.1.73" -PREFERRED_VERSION_offlineimap ?= "4.0.14" -PREFERRED_VERSION_olsr ?= "0.3-1" -PREFERRED_VERSION_olsrd ?= "0.5.3" -PREFERRED_VERSION_omext ?= "0.2" -PREFERRED_VERSION_omniorb ?= "4.0.7" -PREFERRED_VERSION_omniorb-native ?= "4.0.7" -PREFERRED_VERSION_openal ?= "0.0.8" -PREFERRED_VERSION_openh323 ?= "1.13.5.4" -PREFERRED_VERSION_openjade ?= "1.3.2" -PREFERRED_VERSION_openjade-native ?= "1.3.2" -PREFERRED_VERSION_openldap ?= "2.3.11" -PREFERRED_VERSION_openntpd ?= "3.9p1" -PREFERRED_VERSION_openobex ?= "1.3" -PREFERRED_VERSION_openpbx.org ?= "1.2_rc3" -PREFERRED_VERSION_openpbx.org-perl ?= "1.0" -PREFERRED_VERSION_openprotium-init ?= "0.10" -PREFERRED_VERSION_openprotium-packages ?= "1.0" -PREFERRED_VERSION_opensp ?= "1.5" -PREFERRED_VERSION_opensp-native ?= "1.5" -PREFERRED_VERSION_openssh ?= "4.6p1" -PREFERRED_VERSION_openssl ?= "0.9.7g" -PREFERRED_VERSION_openssl-native ?= "0.9.7g" -PREFERRED_VERSION_openswan ?= "2.4.7" -PREFERRED_VERSION_openttd ?= "0.4.0.1" -PREFERRED_VERSION_openvpn ?= "2.0.9" -PREFERRED_VERSION_oplinux-packages ?= "1.0" -PREFERRED_VERSION_oprofile ?= "0.9.3" -PREFERRED_VERSION_orage ?= "4.4.1" -PREFERRED_VERSION_orbit2 ?= "2.14.0" -PREFERRED_VERSION_orbit2-native ?= "2.14.0" -PREFERRED_VERSION_orinoco-conf ?= "1.0" -PREFERRED_VERSION_orinoco-modules ?= "0.15rc2" -PREFERRED_VERSION_orpheus ?= "1.5" -PREFERRED_VERSION_ortp ?= "0.7.1" -PREFERRED_VERSION_osso-af-settings ?= "0.8.5" -PREFERRED_VERSION_osso-af-startup ?= "0.28-1" -PREFERRED_VERSION_osso-af-utils ?= "0.4" -PREFERRED_VERSION_osso-app-killer ?= "0.4-3" -PREFERRED_VERSION_osso-application-installer ?= "1.0.03-1" -PREFERRED_VERSION_osso-bttools ?= "0.25.1" -PREFERRED_VERSION_osso-core-config ?= "200515.1" -PREFERRED_VERSION_osso-dsp-headers ?= "0.1" -PREFERRED_VERSION_osso-esd ?= "0.5" -PREFERRED_VERSION_osso-gwconnect ?= "1.0.8" -PREFERRED_VERSION_osso-gwobex ?= "0.26.1" -PREFERRED_VERSION_osso-ic-oss ?= "1.0.4" -PREFERRED_VERSION_osso-screenshot-tool ?= "1.20-1" -PREFERRED_VERSION_osso-sounds ?= "0.3-1" -PREFERRED_VERSION_osso-thumbnail ?= "0.7" -PREFERRED_VERSION_otpkeygen ?= "1.3.0" -PREFERRED_VERSION_outo ?= "0.1.1" -PREFERRED_VERSION_p3scan ?= "2.9.05d" -PREFERRED_VERSION_p4 ?= "05.2" -PREFERRED_VERSION_package-index ?= "1.0" -PREFERRED_VERSION_pad-native ?= "1.0" -PREFERRED_VERSION_pairs ?= "1.1.1" -PREFERRED_VERSION_pango ?= "1.18.1" -PREFERRED_VERSION_panoramixext ?= "1.1" -PREFERRED_VERSION_parted ?= "1.8.7" -PREFERRED_VERSION_patch ?= "2.5.9" -PREFERRED_VERSION_patcher ?= "20040913" -PREFERRED_VERSION_patcher-native ?= "20040913" -PREFERRED_VERSION_patchutils ?= "0.2.31" -PREFERRED_VERSION_pax-utils ?= "0.1.13" -PREFERRED_VERSION_pax-utils-native ?= "0.1.13" -PREFERRED_VERSION_pbltool-native ?= "0.2" -PREFERRED_VERSION_pciutils ?= "2.2.4" -PREFERRED_VERSION_pcmanfm ?= "0.3.2-beta" -PREFERRED_VERSION_pcmcia-cs ?= "3.2.8" -PREFERRED_VERSION_pcmciautils ?= "014" -PREFERRED_VERSION_pdamaze ?= "1.0.0" -PREFERRED_VERSION_pdm ?= "1.0" -PREFERRED_VERSION_perl ?= "5.8.8" -PREFERRED_VERSION_perl-native ?= "5.8.8" -PREFERRED_VERSION_petitepainture ?= "1.5" -PREFERRED_VERSION_phalanx ?= "22" -PREFERRED_VERSION_phoneserver ?= "1.0" -PREFERRED_VERSION_php ?= "5.2.0" -PREFERRED_VERSION_php-native ?= "5.2.0" -PREFERRED_VERSION_picocom ?= "1.4" -PREFERRED_VERSION_pidgin ?= "2.2.1" -PREFERRED_VERSION_pine ?= "4.64" -PREFERRED_VERSION_pipeman ?= "1.0.0" -PREFERRED_VERSION_pipepanic ?= "0.1.1" -PREFERRED_VERSION_pivotinit ?= "1.0.0" -PREFERRED_VERSION_pixman ?= "0.9.6" -PREFERRED_VERSION_pixops-test ?= "1.0" -PREFERRED_VERSION_pkgconfig ?= "0.22" -PREFERRED_VERSION_pkgconfig-native ?= "0.22" -PREFERRED_VERSION_plinciv ?= "0.16" -PREFERRED_VERSION_plone ?= "2.1.2" -PREFERRED_VERSION_plot ?= "0.28" -PREFERRED_VERSION_pme ?= "1.0.3" -PREFERRED_VERSION_pmount ?= "0.9.4" -PREFERRED_VERSION_pmtools ?= "20050926" -PREFERRED_VERSION_poboxserver ?= "1.2.5" -PREFERRED_VERSION_pocketcellar ?= "1.1" -PREFERRED_VERSION_pocketsphinx ?= "0.2.1" -PREFERRED_VERSION_poppler ?= "0.6" -PREFERRED_VERSION_poppler-data ?= "0.1" -PREFERRED_VERSION_popt ?= "1.7" -PREFERRED_VERSION_popt-native ?= "1.7" -PREFERRED_VERSION_poptop ?= "1.3.4" -PREFERRED_VERSION_poqetpresenter ?= "0.0.6" -PREFERRED_VERSION_portabase ?= "1.9" -PREFERRED_VERSION_portmap ?= "6.0" -PREFERRED_VERSION_postfix ?= "2.0.20" -PREFERRED_VERSION_postfix-native ?= "2.0.20" -PREFERRED_VERSION_postgresql ?= "8.1.8" -PREFERRED_VERSION_povray ?= "3.6.1" -PREFERRED_VERSION_powermanga ?= "0.79" -PREFERRED_VERSION_powernowd ?= "0.96" -PREFERRED_VERSION_powertop ?= "1.8" -PREFERRED_VERSION_ppp ?= "2.4.3" -PREFERRED_VERSION_ppp-dsl ?= "0.1-monolithic" -PREFERRED_VERSION_pptp-linux ?= "1.7.1" -PREFERRED_VERSION_prboom ?= "2.2.6" -PREFERRED_VERSION_prboom-devconfig ?= "1.0" -PREFERRED_VERSION_prelink ?= "20060712" -PREFERRED_VERSION_printproto ?= "1.0.3" -PREFERRED_VERSION_prism-firmware ?= "1.0" -PREFERRED_VERSION_prism2-firmware-update ?= "1.7.4" -PREFERRED_VERSION_prism54-firmware ?= "1.0.4.3" -PREFERRED_VERSION_prism54-module ?= "1.2" -PREFERRED_VERSION_prismstumbler ?= "0.7.3" -PREFERRED_VERSION_privoxy ?= "3.0.3" -PREFERRED_VERSION_procps ?= "3.2.7" -PREFERRED_VERSION_proj-4 ?= "4.9" -PREFERRED_VERSION_proj-4-native ?= "4.9" -PREFERRED_VERSION_psmisc ?= "22.2" -PREFERRED_VERSION_psplash-zap ?= "1.0" -PREFERRED_VERSION_pth ?= "2.0.2" -PREFERRED_VERSION_pulseaudio ?= "0.9.6" -PREFERRED_VERSION_puppy ?= "1.11" -PREFERRED_VERSION_puzz-le ?= "2.0.0" -PREFERRED_VERSION_puzzles ?= "r7436" -PREFERRED_VERSION_pvrusb2-mci ?= "20060903" -PREFERRED_VERSION_pwdutils ?= "2.6" -PREFERRED_VERSION_pwlib ?= "1.5.2" -PREFERRED_VERSION_pwmpi ?= "2.2.7" -PREFERRED_VERSION_pxaregs ?= "1.14" -PREFERRED_VERSION_python ?= "2.5.1" -PREFERRED_VERSION_python-ao ?= "0.82" -PREFERRED_VERSION_python-constraint ?= "1.1" -PREFERRED_VERSION_python-dbus ?= "0.81.1" -PREFERRED_VERSION_python-fam ?= "1.1.1" -PREFERRED_VERSION_python-fnorb ?= "1.3" -PREFERRED_VERSION_python-fpconst ?= "0.6.0" -PREFERRED_VERSION_python-gammu ?= "0.24" -PREFERRED_VERSION_python-gmpy ?= "1.0.1" -PREFERRED_VERSION_python-gnosis ?= "1.2.2" -PREFERRED_VERSION_python-gst ?= "0.10.8" -PREFERRED_VERSION_python-hmm ?= "0.4" -PREFERRED_VERSION_python-imaging ?= "1.1.6" -PREFERRED_VERSION_python-imdbpy ?= "3.1" -PREFERRED_VERSION_python-inotify ?= "0.1.0" -PREFERRED_VERSION_python-irclib ?= "0.4.6" -PREFERRED_VERSION_python-itools ?= "0.16.5" -PREFERRED_VERSION_python-libgmail ?= "0.1.6" -PREFERRED_VERSION_python-logilab-common ?= "0.9.3" -PREFERRED_VERSION_python-lxml ?= "1.3.3" -PREFERRED_VERSION_python-mad ?= "0.6" -PREFERRED_VERSION_python-mysqldb ?= "1.2.1" -PREFERRED_VERSION_python-native ?= "2.5.1" -PREFERRED_VERSION_python-numarray ?= "1.1.1" -PREFERRED_VERSION_python-numeric ?= "23.7" -PREFERRED_VERSION_python-ogg ?= "1.3" -PREFERRED_VERSION_python-pexpect ?= "2.1" -PREFERRED_VERSION_python-pybluez ?= "0.13" -PREFERRED_VERSION_python-pycairo ?= "1.4.0" -PREFERRED_VERSION_python-pychecker ?= "0.8.17" -PREFERRED_VERSION_python-pycodes ?= "1.2" -PREFERRED_VERSION_python-pycrypto ?= "2.0.1" -PREFERRED_VERSION_python-pycurl ?= "7.16.4" -PREFERRED_VERSION_python-pyephem ?= "3.7.2a" -PREFERRED_VERSION_python-pyfits ?= "1.1" -PREFERRED_VERSION_python-pyflakes ?= "0.2.1" -PREFERRED_VERSION_python-pygame ?= "1.7.1" -PREFERRED_VERSION_python-pygnome ?= "2.16.2" -PREFERRED_VERSION_python-pygobject ?= "2.12.3" -PREFERRED_VERSION_python-pygobject-native ?= "2.12.3" -PREFERRED_VERSION_python-pygoogle ?= "0.6" -PREFERRED_VERSION_python-pygtk ?= "2.10.4" -PREFERRED_VERSION_python-pygtk-1.2 ?= "0.6.12" -PREFERRED_VERSION_python-pyid3lib ?= "0.5.1" -PREFERRED_VERSION_python-pyiw ?= "0.3.3" -PREFERRED_VERSION_python-pylinda ?= "0.6" -PREFERRED_VERSION_python-pylint ?= "0.13.2" -PREFERRED_VERSION_python-pymetar ?= "0.11" -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-pyro ?= "3.7" -PREFERRED_VERSION_python-pyserial ?= "2.2" -PREFERRED_VERSION_python-pytester ?= "0.6.0" -PREFERRED_VERSION_python-pythondaap ?= "0.4" -PREFERRED_VERSION_python-pyvisa ?= "1.1" -PREFERRED_VERSION_python-pyweather ?= "0.7.0" -PREFERRED_VERSION_python-pywpa ?= "0.3.4" -PREFERRED_VERSION_python-pyxml ?= "0.8.4" -PREFERRED_VERSION_python-pyxmlrpc ?= "0.8.8.3" -PREFERRED_VERSION_python-pyzeroconf ?= "0.12" -PREFERRED_VERSION_python-scapy ?= "1.1.1" -PREFERRED_VERSION_python-scons ?= "0.97" -PREFERRED_VERSION_python-scons-native ?= "0.97" -PREFERRED_VERSION_python-setuptools ?= "0.6c6" -PREFERRED_VERSION_python-sgmlop ?= "1.1" -PREFERRED_VERSION_python-simplejson ?= "1.7.1" -PREFERRED_VERSION_python-snmplib ?= "0.1.1" -PREFERRED_VERSION_python-soappy ?= "0.11.6" -PREFERRED_VERSION_python-spydi ?= "0.9.7" -PREFERRED_VERSION_python-spyro ?= "0.9.22" -PREFERRED_VERSION_python-sqlobject ?= "0.9.1" -PREFERRED_VERSION_python-sword ?= "1.5.9" -PREFERRED_VERSION_python-urwid ?= "0.9.8.1" -PREFERRED_VERSION_python-vmaps ?= "1.1" -PREFERRED_VERSION_python-vorbis ?= "1.3" -PREFERRED_VERSION_python-webpy ?= "0.21" -PREFERRED_VERSION_python24 ?= "2.4.4" -PREFERRED_VERSION_python24-native ?= "2.4.0" -PREFERRED_VERSION_python24-pyqt2 ?= "3.13" -PREFERRED_VERSION_python24-pyqwt2 ?= "3.10" -PREFERRED_VERSION_python24-sip ?= "4.1.1" -PREFERRED_VERSION_qc-usb-messenger ?= "1.1" -PREFERRED_VERSION_qclockchange ?= "0.1a" -PREFERRED_VERSION_qcoptest ?= "0.1.1" -PREFERRED_VERSION_qfish2 ?= "1.1.0" -PREFERRED_VERSION_qgis ?= "0.8.1" -PREFERRED_VERSION_qiv ?= "1.9" -PREFERRED_VERSION_qjackctl ?= "0.3.1a" -PREFERRED_VERSION_qmake-native ?= "1.07a" -PREFERRED_VERSION_qmake2-native ?= "2.10a" -PREFERRED_VERSION_qmatrix ?= "1.1.0" -PREFERRED_VERSION_qof ?= "0.7.2" -PREFERRED_VERSION_qolyester ?= "20050728" -PREFERRED_VERSION_qpdf2 ?= "2.2.1" -PREFERRED_VERSION_qpe-gaim ?= "20041030" -PREFERRED_VERSION_qpe-inputhelper-applet ?= "1.0.0" -PREFERRED_VERSION_qpe-libgaim ?= "1.5.0" -PREFERRED_VERSION_qpealarmclock ?= "1.0.9" -PREFERRED_VERSION_qpealarmclockapplet ?= "1.0.9" -PREFERRED_VERSION_qpegps ?= "0.9.3.1" -PREFERRED_VERSION_qpenmapfe ?= "1.0.0" -PREFERRED_VERSION_qpf-arabic ?= "1.0" -PREFERRED_VERSION_qpf-bitstream-vera ?= "1.10" -PREFERRED_VERSION_qpf-bitstream-vera-sans-mono ?= "1.10" -PREFERRED_VERSION_qpf-font-common ?= "1.0" -PREFERRED_VERSION_qpf-freemono ?= "1.0" -PREFERRED_VERSION_qpf-freeserif ?= "1.0" -PREFERRED_VERSION_qpf-helvetica ?= "1.0" -PREFERRED_VERSION_qpf-hunkysans ?= "0.3.0" -PREFERRED_VERSION_qpf-hunkyserif ?= "0.3.0" -PREFERRED_VERSION_qpf-qte ?= "2.3.10" -PREFERRED_VERSION_qpf-unifont ?= "1.0" -PREFERRED_VERSION_qpf-unismall ?= "1.0.0" -PREFERRED_VERSION_qpf-utopia ?= "1.0" -PREFERRED_VERSION_qplot ?= "2.0.1-cvs-20020420" -PREFERRED_VERSION_qpobox ?= "0.5.4" -PREFERRED_VERSION_qpphoto ?= "1.0.2" -PREFERRED_VERSION_qscintilla ?= "1.65-gpl-1.6" -PREFERRED_VERSION_qsvn ?= "0.3.0" -PREFERRED_VERSION_qt-x11-free ?= "3.3.7" -PREFERRED_VERSION_qt-x11-free-native ?= "3.3.5" -PREFERRED_VERSION_qt4-x11-free ?= "4.3.3" -PREFERRED_VERSION_qtplot ?= "0.2" -PREFERRED_VERSION_quagga ?= "0.99.8" -PREFERRED_VERSION_quake1 ?= "0.0.1" -PREFERRED_VERSION_quetoo ?= "0.6.1" -PREFERRED_VERSION_quilt ?= "0.45" -PREFERRED_VERSION_quilt-native ?= "0.45" -PREFERRED_VERSION_qwt ?= "4.2.0rc1" -PREFERRED_VERSION_qxmp ?= "1.0" -PREFERRED_VERSION_r-native ?= "2.0.0" -PREFERRED_VERSION_radlib ?= "2.6.2" -PREFERRED_VERSION_radlib-mysql ?= "2.6.2" -PREFERRED_VERSION_radvd ?= "1.0" -PREFERRED_VERSION_rage ?= "0.2.0.003" -PREFERRED_VERSION_randrext ?= "1.0" -PREFERRED_VERSION_randrproto ?= "1.2.1" -PREFERRED_VERSION_rdesktop ?= "1.5.0" -PREFERRED_VERSION_rdiff-backup ?= "1.1.5" -PREFERRED_VERSION_readline ?= "4.3" -PREFERRED_VERSION_readline-native ?= "4.3" -PREFERRED_VERSION_reaim ?= "7.0.1.13" -PREFERRED_VERSION_recode ?= "3.6" -PREFERRED_VERSION_recode-native ?= "3.6" -PREFERRED_VERSION_recordproto ?= "1.13.2" -PREFERRED_VERSION_redfang ?= "2.5" -PREFERRED_VERSION_refdbg ?= "1.2" -PREFERRED_VERSION_regex-markup ?= "0.10.0" -PREFERRED_VERSION_reiser4progs ?= "1.0.4" -PREFERRED_VERSION_reiserfsprogs ?= "3.6.19" -PREFERRED_VERSION_renderproto ?= "0.9.3" -PREFERRED_VERSION_resistorui ?= "0.9" -PREFERRED_VERSION_resolvconf ?= "1.28" -PREFERRED_VERSION_resourceext ?= "1.0" -PREFERRED_VERSION_resourceproto ?= "1.0.2" -PREFERRED_VERSION_rfakeap ?= "0.2" -PREFERRED_VERSION_rglueap ?= "0.1" -PREFERRED_VERSION_rhythmbox ?= "0.8.7" -PREFERRED_VERSION_rlpr ?= "2.05" -PREFERRED_VERSION_roadmap-gtk2 ?= "1.1.0" -PREFERRED_VERSION_rott ?= "1.0" -PREFERRED_VERSION_rox-filer ?= "2.5" -PREFERRED_VERSION_rp-pppoe ?= "3.8" -PREFERRED_VERSION_rpm ?= "4.4" -PREFERRED_VERSION_rrdtool ?= "1.0.49" -PREFERRED_VERSION_rsync ?= "2.6.9" -PREFERRED_VERSION_rt2570 ?= "1.1.0-b2" -PREFERRED_VERSION_rt2570-k2wrlz ?= "1.6.1" -PREFERRED_VERSION_rt73-k2wrlz ?= "2.0.1" -PREFERRED_VERSION_rtaudio-tests ?= "3.0.1" -PREFERRED_VERSION_ruby ?= "1.8.5" -PREFERRED_VERSION_ruby-native ?= "1.8.5" -PREFERRED_VERSION_rxvt ?= "2.8.0" -PREFERRED_VERSION_rxvt-unicode ?= "7.9" -PREFERRED_VERSION_sablevm ?= "1.12" -PREFERRED_VERSION_sablevm-classpath ?= "1.12" -PREFERRED_VERSION_salsa-lib ?= "0.0.1" -PREFERRED_VERSION_samba ?= "3.0.23c" -PREFERRED_VERSION_samba-essential ?= "3.0.20" -PREFERRED_VERSION_sane-backends ?= "1.0.17" -PREFERRED_VERSION_sane-frontends ?= "1.0.13" -PREFERRED_VERSION_sato-icon-theme ?= "0.1" -PREFERRED_VERSION_sbagen ?= "1.4.1" -PREFERRED_VERSION_sbrsh ?= "7.1" -PREFERRED_VERSION_scap ?= "0.1" -PREFERRED_VERSION_sccd ?= "1.0" -PREFERRED_VERSION_scew ?= "0.3.1" -PREFERRED_VERSION_schedstat-utils ?= "1.0" -PREFERRED_VERSION_schroedinger ?= "0.2.0.0" -PREFERRED_VERSION_screen ?= "4.0.2" -PREFERRED_VERSION_scrnsaverproto ?= "1.1.0" -PREFERRED_VERSION_scsi-idle ?= "2.4.23" -PREFERRED_VERSION_sctzap ?= "0.0cvs20060814" -PREFERRED_VERSION_scummvm ?= "0.10.0" -PREFERRED_VERSION_scummvm-qpe ?= "0.6.1b" -PREFERRED_VERSION_scw ?= "0.4.3" -PREFERRED_VERSION_sdcc ?= "2.5.0" -PREFERRED_VERSION_sdcc-native ?= "2.5.0" -PREFERRED_VERSION_sdk-default-icons ?= "0.2-1" -PREFERRED_VERSION_sdk-default-theme ?= "0.1-1" -PREFERRED_VERSION_sdk-default-theme-config ?= "1.0-1" -PREFERRED_VERSION_sdl-perl ?= "1.20.3" -PREFERRED_VERSION_sed ?= "4.1.2" -PREFERRED_VERSION_sed-native ?= "4.1.2" -PREFERRED_VERSION_ser ?= "0.9.0" -PREFERRED_VERSION_serload-native ?= "1.0" -PREFERRED_VERSION_sessreg ?= "1.0.3" -PREFERRED_VERSION_setmixer ?= "27DEC94" -PREFERRED_VERSION_setserial ?= "2.17" -PREFERRED_VERSION_setxkbmap ?= "1.0.4" -PREFERRED_VERSION_sgml-common ?= "0.6.3" -PREFERRED_VERSION_sgml-common-native ?= "0.6.3" -PREFERRED_VERSION_shared-mime-info ?= "0.22" -PREFERRED_VERSION_sharp-compat-libs ?= "0.5" -PREFERRED_VERSION_sharprom-toolchain-native ?= "1.0" -PREFERRED_VERSION_shasum-native ?= "1.0" -PREFERRED_VERSION_shfs-modules ?= "0.35" -PREFERRED_VERSION_shfs-utils ?= "0.35" -PREFERRED_VERSION_shisensho ?= "1.0.0" -PREFERRED_VERSION_shopper ?= "1.2.1" -PREFERRED_VERSION_shorewall ?= "2.0.9-monolithic" -PREFERRED_VERSION_sidplay-base ?= "1.0.9" -PREFERRED_VERSION_sidplayer ?= "1.5.0" -PREFERRED_VERSION_silo ?= "1.4.8" -PREFERRED_VERSION_simh ?= "3.7-1" -PREFERRED_VERSION_simpad-utilities ?= "1.0" -PREFERRED_VERSION_sip3-native ?= "4.0.1" -PREFERRED_VERSION_sipsak ?= "0.9.6" -PREFERRED_VERSION_skippy-xd ?= "0.5.0" -PREFERRED_VERSION_sl ?= "3.03" -PREFERRED_VERSION_slang ?= "1.4.9" -PREFERRED_VERSION_slcalc ?= "1.2.1" -PREFERRED_VERSION_sliderulez ?= "0.92" -PREFERRED_VERSION_slotsig ?= "0.6" -PREFERRED_VERSION_slrn ?= "0.9.8.0" -PREFERRED_VERSION_slsnif ?= "0.4.4" -PREFERRED_VERSION_slugimage-native ?= "1.0" -PREFERRED_VERSION_slugos-init ?= "0.10" -PREFERRED_VERSION_slugos-native ?= "1.0" -PREFERRED_VERSION_slugos-native-packages ?= "1.0" -PREFERRED_VERSION_slugtool ?= "1.0" -PREFERRED_VERSION_slugtool-native ?= "1.0" -PREFERRED_VERSION_slutils ?= "0.1.0" -PREFERRED_VERSION_smartmontools ?= "5.37" -PREFERRED_VERSION_sms ?= "1.1" -PREFERRED_VERSION_sn9c102 ?= "1.32" -PREFERRED_VERSION_snes232 ?= "cvs" -PREFERRED_VERSION_snes9x ?= "1.43-WIP1" -PREFERRED_VERSION_snes9x-sdl ?= "1.39" -PREFERRED_VERSION_snes9x-sdl-qpe ?= "1.39" -PREFERRED_VERSION_socat ?= "1.3.2.1" -PREFERRED_VERSION_sofia-sip ?= "1.11.7" -PREFERRED_VERSION_softfan ?= "0.10" -PREFERRED_VERSION_sokoban ?= "1.3.8ern" -PREFERRED_VERSION_soundserver ?= "1.0" -PREFERRED_VERSION_soundtracker ?= "0.6.8" -PREFERRED_VERSION_soundtracker-gtk2 ?= "0.6.7" -PREFERRED_VERSION_sox ?= "13.0.0" -PREFERRED_VERSION_sox-native ?= "13.0.0" -PREFERRED_VERSION_spandsp ?= "0.0.3" -PREFERRED_VERSION_spca5xx ?= "20060501" -PREFERRED_VERSION_spectrum-fw ?= "1.0" -PREFERRED_VERSION_speex ?= "1.1.12" -PREFERRED_VERSION_sphinxbase ?= "0.1" -PREFERRED_VERSION_squashfs-lzma-tools ?= "3.1r2" -PREFERRED_VERSION_squashfs-lzma-tools-native ?= "3.1r2" -PREFERRED_VERSION_squashfs-tools ?= "3.1r2" -PREFERRED_VERSION_squashfs-tools-native ?= "3.1r2" -PREFERRED_VERSION_squeak-nox ?= "3.4-2" -PREFERRED_VERSION_squid ?= "2.6.STABLE14" -PREFERRED_VERSION_sshfs-fuse ?= "1.8" -PREFERRED_VERSION_ssmtp ?= "2.61" -PREFERRED_VERSION_stagemanager-native ?= "0.0.1" -PREFERRED_VERSION_starling ?= "0.2" -PREFERRED_VERSION_startup-monitor ?= "0.18-2" -PREFERRED_VERSION_startup-notification ?= "0.8" -PREFERRED_VERSION_stat ?= "3.3" -PREFERRED_VERSION_stat-native ?= "3.3" -PREFERRED_VERSION_strace ?= "4.5.14" -PREFERRED_VERSION_streamripper ?= "1.61.10" -PREFERRED_VERSION_stress ?= "0.18.8" -PREFERRED_VERSION_stunnel ?= "4.09" -PREFERRED_VERSION_subapplet ?= "1.0.8" -PREFERRED_VERSION_subversion ?= "1.4.3" -PREFERRED_VERSION_sudo ?= "1.6.8p12" -PREFERRED_VERSION_supertux ?= "0.1.2" -PREFERRED_VERSION_supybot ?= "0.77.0" -PREFERRED_VERSION_suspend-desktop ?= "1.0" -PREFERRED_VERSION_swfdec ?= "0.5.1" -PREFERRED_VERSION_swig ?= "1.3.31" -PREFERRED_VERSION_swig-native ?= "1.3.31" -PREFERRED_VERSION_sword ?= "1.5.9" -PREFERRED_VERSION_sylpheed ?= "2.2.9" -PREFERRED_VERSION_synaesthesia ?= "2.4" -PREFERRED_VERSION_syncml-client ?= "0.1" -PREFERRED_VERSION_synergy ?= "1.3.1" -PREFERRED_VERSION_sysfsutils ?= "2.0.0" -PREFERRED_VERSION_sysklogd ?= "1.4.1" -PREFERRED_VERSION_syslinux-native ?= "3.36" -PREFERRED_VERSION_syslog-ng ?= "1.6.11" -PREFERRED_VERSION_sysvinit ?= "2.86" -PREFERRED_VERSION_t1lib ?= "5.0.2" -PREFERRED_VERSION_taglib ?= "1.4" -PREFERRED_VERSION_taglibc ?= "1.4" -PREFERRED_VERSION_tango-icon-theme ?= "0.7.2" -PREFERRED_VERSION_tango-icon-theme-extras ?= "0.1.0" -PREFERRED_VERSION_tapioca ?= "0.3.9" -PREFERRED_VERSION_tapioca-xmpp ?= "0.3.9" -PREFERRED_VERSION_tapiocaui ?= "0.3.9.1" -PREFERRED_VERSION_tar ?= "1.18" -PREFERRED_VERSION_tasklistapplet ?= "1.0.5" -PREFERRED_VERSION_tasks ?= "0.10" -PREFERRED_VERSION_tcl ?= "8.4.11" -PREFERRED_VERSION_tcp-wrappers ?= "7.6" -PREFERRED_VERSION_tcpdump ?= "3.9.7" -PREFERRED_VERSION_tcpick ?= "0.1.22" -PREFERRED_VERSION_tcptraceroute ?= "1.5beta6" -PREFERRED_VERSION_tcptrack ?= "1.1.2" -PREFERRED_VERSION_tda1004x-firmware ?= "1.0" -PREFERRED_VERSION_telepathy-gabble ?= "0.5.10" -PREFERRED_VERSION_telepathy-glib ?= "0.5.10" -PREFERRED_VERSION_telepathy-mission-control ?= "4.22" -PREFERRED_VERSION_teleport ?= "0.34" -PREFERRED_VERSION_temtor ?= "0.0.1" -PREFERRED_VERSION_termcap ?= "11.0.1" -PREFERRED_VERSION_terminus ?= "1.0" -PREFERRED_VERSION_tesseract ?= "1.0" -PREFERRED_VERSION_tetex ?= "3.0" -PREFERRED_VERSION_tetex-native ?= "3.0" -PREFERRED_VERSION_tetex-texmf ?= "3.0" -PREFERRED_VERSION_texinfo ?= "4.8a" -PREFERRED_VERSION_texlive ?= "2007" -PREFERRED_VERSION_texmaker ?= "1.3" -PREFERRED_VERSION_thcrut ?= "1.2.5" -PREFERRED_VERSION_thttpd ?= "2.25b" -PREFERRED_VERSION_thumbpad ?= "0.8" -PREFERRED_VERSION_thunar ?= "0.8.0" -PREFERRED_VERSION_thunderbird ?= "1.0.7" -PREFERRED_VERSION_tickypip ?= "0.1.2" -PREFERRED_VERSION_tickypip-levels ?= "1.1" -PREFERRED_VERSION_tiff ?= "3.7.2" -PREFERRED_VERSION_tightvnc ?= "1.3dev7" -PREFERRED_VERSION_tiinit ?= "3.2.26" -PREFERRED_VERSION_time ?= "1.7" -PREFERRED_VERSION_timesleuth ?= "1.05ern" -PREFERRED_VERSION_timezones ?= "1.2.0" -PREFERRED_VERSION_tin ?= "1.9.1" -PREFERRED_VERSION_tinc ?= "1.0.2" -PREFERRED_VERSION_tinylogin ?= "1.4" -PREFERRED_VERSION_tinyscheme ?= "1.35" -PREFERRED_VERSION_tk ?= "8.4.11" -PREFERRED_VERSION_tmake ?= "1.11" -PREFERRED_VERSION_tmdns ?= "20030116" -PREFERRED_VERSION_tn5250 ?= "0.16.5" -PREFERRED_VERSION_tomoe ?= "0.2.1" -PREFERRED_VERSION_tor ?= "0.1.1.26" -PREFERRED_VERSION_totem ?= "1.0.4" -PREFERRED_VERSION_tracker ?= "0.5.4" -PREFERRED_VERSION_transconnect ?= "1.3-beta" -PREFERRED_VERSION_trapproto ?= "3.4.3" -PREFERRED_VERSION_tree ?= "1.5.1" -PREFERRED_VERSION_treecc ?= "0.3.6" -PREFERRED_VERSION_treecc-native ?= "0.3.6" -PREFERRED_VERSION_tremor ?= "20041119" -PREFERRED_VERSION_tron ?= "1.0.0" -PREFERRED_VERSION_tscalib ?= "0.0.1-3" -PREFERRED_VERSION_tsclient ?= "0.140" -PREFERRED_VERSION_tslib ?= "1.0" -PREFERRED_VERSION_ttf-bitstream-vera ?= "1.10" -PREFERRED_VERSION_ttf-dejavu ?= "2.18" -PREFERRED_VERSION_ttf-gentium ?= "1.02" -PREFERRED_VERSION_ttf-hunkyfonts ?= "0.3.0" -PREFERRED_VERSION_ttf-liberation ?= "0.2" -PREFERRED_VERSION_ttf-sazanami ?= "20040629" -PREFERRED_VERSION_ttyconv ?= "0.2.3" -PREFERRED_VERSION_ttyrec ?= "1.0.8" -PREFERRED_VERSION_tuxnes ?= "0.75" -PREFERRED_VERSION_twin ?= "0.4.6" -PREFERRED_VERSION_twisted ?= "2.5.0" -PREFERRED_VERSION_twm ?= "1.0.3" -PREFERRED_VERSION_twutils ?= "0.2" -PREFERRED_VERSION_txdrug ?= "0.1" -PREFERRED_VERSION_tximage ?= "0.2" -PREFERRED_VERSION_tzcode-native ?= "2007e" -PREFERRED_VERSION_tzdata ?= "2007e" -PREFERRED_VERSION_u-boot ?= "1.2.0" -PREFERRED_VERSION_u-boot-omap2430sdp ?= "1.1.4" -PREFERRED_VERSION_u2nl ?= "1.3" -PREFERRED_VERSION_uae4all ?= "0.7.1" -PREFERRED_VERSION_ubahnnav ?= "0.4.1" -PREFERRED_VERSION_u-boot-utils ?= "1.2.0" -PREFERRED_VERSION_udev ?= "092" -PREFERRED_VERSION_udev-hostap-cs-vcc-workaround ?= "1.0" -PREFERRED_VERSION_udhcp ?= "0.9.8" -PREFERRED_VERSION_ufraw ?= "0.12" -PREFERRED_VERSION_uicmoc-native ?= "2.3.10" -PREFERRED_VERSION_uicmoc3-native ?= "3.3.5" -PREFERRED_VERSION_uicmoc4-native ?= "4.3.3" -PREFERRED_VERSION_uim ?= "1.3.1" -PREFERRED_VERSION_uim-native ?= "1.3.1" -PREFERRED_VERSION_uim-tomoe-gtk ?= "0.2.0" -PREFERRED_VERSION_ulxmlrpcpp ?= "1.5.2" -PREFERRED_VERSION_uml-utilities ?= "20040406" -PREFERRED_VERSION_unfreeze ?= "1.0" -PREFERRED_VERSION_unionfs-modules ?= "1.0.13" -PREFERRED_VERSION_unionfs-utils ?= "1.0.13" -PREFERRED_VERSION_unionroot ?= "0.1.1" -PREFERRED_VERSION_units ?= "1.80" -PREFERRED_VERSION_unixbench ?= "4.1.0" -PREFERRED_VERSION_unrar ?= "3.4.3" -PREFERRED_VERSION_unrar-native ?= "3.4.3" -PREFERRED_VERSION_unzip ?= "552" -PREFERRED_VERSION_unzip-native ?= "552" -PREFERRED_VERSION_update-alternatives-cworth ?= "0.99.154" -PREFERRED_VERSION_update-alternatives-cworth-native ?= "0.99.154" -PREFERRED_VERSION_update-alternatives-dpkg ?= "1.13.22" -PREFERRED_VERSION_update-alternatives-dpkg-native ?= "1.13.22" -PREFERRED_VERSION_update-modules ?= "1.0" -PREFERRED_VERSION_upstart ?= "0.3.8" -PREFERRED_VERSION_uqm ?= "0.5.0" -PREFERRED_VERSION_usb-gadget-mode ?= "0.0.2" -PREFERRED_VERSION_usbutils ?= "0.70" -PREFERRED_VERSION_usbview ?= "1.0" -PREFERRED_VERSION_ushare ?= "0.9.7" -PREFERRED_VERSION_usound ?= "0.2.0" -PREFERRED_VERSION_usrp ?= "0.12" -PREFERRED_VERSION_util-linux ?= "2.12r" -PREFERRED_VERSION_util-linux-native ?= "2.12r" -PREFERRED_VERSION_util-macros ?= "1.1.5" -PREFERRED_VERSION_util-macros-native ?= "1.1.5" -PREFERRED_VERSION_uucp ?= "1.07" -PREFERRED_VERSION_v4l2apps ?= "20020317" -PREFERRED_VERSION_vde ?= "2.0.2" -PREFERRED_VERSION_vectoroids ?= "1.1.0" -PREFERRED_VERSION_videoplayer ?= "0.1" -PREFERRED_VERSION_videoproto ?= "2.2.2" -PREFERRED_VERSION_vim ?= "7.0" -PREFERRED_VERSION_vim-tiny ?= "7.0" -PREFERRED_VERSION_vino ?= "2.16.0" -PREFERRED_VERSION_visiscript ?= "0.4.3" -PREFERRED_VERSION_visual-boot ?= "0.0.1" -PREFERRED_VERSION_vlan ?= "1.9" -PREFERRED_VERSION_vlc-gpe ?= "0.8.4" -PREFERRED_VERSION_vmedit ?= "0.02" -PREFERRED_VERSION_vnc ?= "3.3.7" -PREFERRED_VERSION_vochistory ?= "0.1" -PREFERRED_VERSION_voicecall ?= "0.1" -PREFERRED_VERSION_void11 ?= "0.2.0" -PREFERRED_VERSION_vorbis-tools ?= "1.0.1" -PREFERRED_VERSION_vpnc ?= "0.3.3" -PREFERRED_VERSION_vsftpd ?= "2.0.5" -PREFERRED_VERSION_vte ?= "0.16.8" -PREFERRED_VERSION_vtun ?= "2.6" -PREFERRED_VERSION_w3cam ?= "0.7.2" -PREFERRED_VERSION_wakelan ?= "1.1" -PREFERRED_VERSION_watchdog ?= "5.3.1" -PREFERRED_VERSION_wbxml2 ?= "0.9.0" -PREFERRED_VERSION_webcam-server ?= "0.50" -PREFERRED_VERSION_wget ?= "1.9.1" -PREFERRED_VERSION_whois ?= "4.5.25" -PREFERRED_VERSION_wifistix-modules ?= "5.0.16.p0" -PREFERRED_VERSION_wiggle ?= "0.6" -PREFERRED_VERSION_wiggle-native ?= "0.6" -PREFERRED_VERSION_win4 ?= "1.0.1" -PREFERRED_VERSION_windowswmproto ?= "1.0.3" -PREFERRED_VERSION_wireshark ?= "0.99.4" -PREFERRED_VERSION_wlan-ng-modules ?= "0.2.7" -PREFERRED_VERSION_wlan-ng-utils ?= "0.2.7" -PREFERRED_VERSION_wmctrl ?= "1.07" -PREFERRED_VERSION_wpa-gui ?= "0.4.8" -PREFERRED_VERSION_wpa-supplicant ?= "0.5.5" -PREFERRED_VERSION_wpa-supplicant-nossl ?= "0.2.6" -PREFERRED_VERSION_wpa-supplicant-ssl ?= "0.2.6" -PREFERRED_VERSION_wrt-imagetools-native ?= "1.0" -PREFERRED_VERSION_wrt-init ?= "1.0" -PREFERRED_VERSION_wrt-utils ?= "1.0" -PREFERRED_VERSION_wv ?= "1.2.0" -PREFERRED_VERSION_wview-sim ?= "3.1.3" -PREFERRED_VERSION_wview-sim-mysql ?= "3.1.3" -PREFERRED_VERSION_wview-vpro ?= "3.1.3" -PREFERRED_VERSION_wview-vpro-mysql ?= "3.1.3" -PREFERRED_VERSION_wview-wxt510 ?= "3.1.3" -PREFERRED_VERSION_wview-wxt510-mysql ?= "3.1.3" -PREFERRED_VERSION_wxwidgets ?= "2.6.3" -PREFERRED_VERSION_x11perf ?= "1.4.1" -PREFERRED_VERSION_x11vnc ?= "0.9.3" -PREFERRED_VERSION_xaos ?= "3.2.3" -PREFERRED_VERSION_xauth ?= "1.0.2" -PREFERRED_VERSION_xawtv ?= "3.93" -PREFERRED_VERSION_xbacklight ?= "1.1" -PREFERRED_VERSION_xbase-clients ?= "1.0" -PREFERRED_VERSION_xbitmaps ?= "1.0.1" -PREFERRED_VERSION_xcb-demo ?= "0.1" -PREFERRED_VERSION_xcb-proto ?= "1.0" -PREFERRED_VERSION_xcb-util ?= "0.2" -PREFERRED_VERSION_xchat ?= "2.8.4" -PREFERRED_VERSION_xcmiscproto ?= "1.1.2" -PREFERRED_VERSION_xcmiscproto-native ?= "1.1.2" -PREFERRED_VERSION_xcursor-transparent-theme ?= "0.1.1" -PREFERRED_VERSION_xdbedizzy ?= "1.0.2" -PREFERRED_VERSION_xdemineur ?= "2.1.1" -PREFERRED_VERSION_xdm ?= "1.1.6" -PREFERRED_VERSION_xdpyinfo ?= "1.0.2" -PREFERRED_VERSION_xerces-c ?= "2.7.0" -PREFERRED_VERSION_xev ?= "1.0.2" -PREFERRED_VERSION_xextproto ?= "7.0.2" -PREFERRED_VERSION_xextproto-native ?= "7.0.2" -PREFERRED_VERSION_xf86-input-evdev ?= "1.1.5" -PREFERRED_VERSION_xf86-input-keyboard ?= "1.2.2" -PREFERRED_VERSION_xf86-input-mouse ?= "1.2.2" -PREFERRED_VERSION_xf86-input-penmount ?= "1.2.0" -PREFERRED_VERSION_xf86-video-ati ?= "6.6.193" -PREFERRED_VERSION_xf86-video-fbdev ?= "0.3.1" -PREFERRED_VERSION_xf86-video-i128 ?= "1.1.0.6" -PREFERRED_VERSION_xf86-video-i810 ?= "1.6.5" -PREFERRED_VERSION_xf86-video-newport ?= "0.2.1" -PREFERRED_VERSION_xf86-video-nsc ?= "2.8.2" -PREFERRED_VERSION_xf86-video-nv ?= "2.1.3" -PREFERRED_VERSION_xf86-video-s3 ?= "0.5.0" -PREFERRED_VERSION_xf86-video-savage ?= "2.1.3" -PREFERRED_VERSION_xf86-video-siliconmotion ?= "1.5.1" -PREFERRED_VERSION_xf86-video-sis ?= "0.9.3" -PREFERRED_VERSION_xf86-video-tdfx ?= "1.3.0" -PREFERRED_VERSION_xf86-video-trident ?= "1.2.3" -PREFERRED_VERSION_xf86-video-tseng ?= "1.1.1" -PREFERRED_VERSION_xf86-video-vesa ?= "1.3.0" -PREFERRED_VERSION_xf86-video-via ?= "0.2.2" -PREFERRED_VERSION_xf86-video-vmware ?= "10.14.1" -PREFERRED_VERSION_xf86-video-voodoo ?= "1.1.1" -PREFERRED_VERSION_xf86bigfontproto ?= "1.1.2" -PREFERRED_VERSION_xf86bigfontproto-native ?= "1.1.2" -PREFERRED_VERSION_xf86dga ?= "1.0.2" -PREFERRED_VERSION_xf86dgaproto ?= "2.0.3" -PREFERRED_VERSION_xf86driproto ?= "2.0.3" -PREFERRED_VERSION_xf86miscproto ?= "0.9.2" -PREFERRED_VERSION_xf86rushproto ?= "1.1.2" -PREFERRED_VERSION_xf86vidmodeproto ?= "2.2.2" -PREFERRED_VERSION_xfcalendar ?= "4.2.3" -PREFERRED_VERSION_xfce-mcs-manager ?= "4.4.1" -PREFERRED_VERSION_xfce-mcs-plugins ?= "4.4.1" -PREFERRED_VERSION_xfce-terminal ?= "0.2.6" -PREFERRED_VERSION_xfce4-appfinder ?= "4.4.1" -PREFERRED_VERSION_xfce4-dev-tools ?= "4.4.0" -PREFERRED_VERSION_xfce4-icon-theme ?= "4.4.1" -PREFERRED_VERSION_xfce4-mixer ?= "4.4.1" -PREFERRED_VERSION_xfce4-panel ?= "4.4.1" -PREFERRED_VERSION_xfce4-session ?= "4.4.1" -PREFERRED_VERSION_xfdesktop ?= "4.4.1" -PREFERRED_VERSION_xffm ?= "4.3.99.2" -PREFERRED_VERSION_xfonts-xorg ?= "6.8" -PREFERRED_VERSION_xfprint ?= "4.4.1" -PREFERRED_VERSION_xfs ?= "1.0.4" -PREFERRED_VERSION_xfsprogs ?= "2.8.16" -PREFERRED_VERSION_xfwm4 ?= "4.4.1" -PREFERRED_VERSION_xfwm4-themes ?= "4.4.1" -PREFERRED_VERSION_xhost ?= "1.0.2" -PREFERRED_VERSION_xineramaproto ?= "1.1.2" -PREFERRED_VERSION_xinetd ?= "2.3.13" -PREFERRED_VERSION_xinit ?= "1.0.5" -PREFERRED_VERSION_xkbd ?= "0.8.15" -PREFERRED_VERSION_xmame ?= "0.100" -PREFERRED_VERSION_xmame-tiny ?= "0.100" -PREFERRED_VERSION_xmms ?= "1.2.10" -PREFERRED_VERSION_xmms-embedded ?= "20040327" -PREFERRED_VERSION_xmms-mad ?= "0.10" -PREFERRED_VERSION_xmms-tremor ?= "1.0" -PREFERRED_VERSION_xmodmap ?= "1.0.3" -PREFERRED_VERSION_xmonobut ?= "0.4.1" -PREFERRED_VERSION_xorg-cf-files ?= "1.0.2" -PREFERRED_VERSION_xorg-headers-native ?= "1.0" -PREFERRED_VERSION_xorg-sgml-doctools ?= "1.2" -PREFERRED_VERSION_xoscope ?= "1.12" -PREFERRED_VERSION_xournal ?= "0.4.0.1" -PREFERRED_VERSION_xpext ?= "1.0-5" -PREFERRED_VERSION_xprint ?= "0.9.001" -PREFERRED_VERSION_xprop ?= "1.0.2" -PREFERRED_VERSION_xproto ?= "7.0.10" -PREFERRED_VERSION_xproto-native ?= "7.0.10" -PREFERRED_VERSION_xproxymanagementprotocol ?= "1.0.2" -PREFERRED_VERSION_xqt ?= "0.0.9" -PREFERRED_VERSION_xqt2 ?= "20060509" -PREFERRED_VERSION_xrandr ?= "1.2.2" -PREFERRED_VERSION_xrdb ?= "1.0.4" -PREFERRED_VERSION_xscreensaver ?= "4.22" -PREFERRED_VERSION_xscrnsaverh ?= "1.0" -PREFERRED_VERSION_xserver-common ?= "1.18" -PREFERRED_VERSION_xserver-kdrive ?= "1.3.0.0" -PREFERRED_VERSION_xserver-kdrive-common ?= "0.1" -PREFERRED_VERSION_xserver-nodm-init ?= "1.0" -PREFERRED_VERSION_xserver-xorg ?= "1.3.0.0" -PREFERRED_VERSION_xset ?= "1.0.3" -PREFERRED_VERSION_xsetroot ?= "1.0.2" -PREFERRED_VERSION_xsp ?= "1.0.0-8" -PREFERRED_VERSION_xst ?= "0.15" -PREFERRED_VERSION_xstroke ?= "0.6" -PREFERRED_VERSION_xterm ?= "207" -PREFERRED_VERSION_xtrans ?= "1.0.4" -PREFERRED_VERSION_xtrans-native ?= "1.0.3" -PREFERRED_VERSION_xtscal ?= "0.6.3" -PREFERRED_VERSION_xvinfo ?= "1.0.2" -PREFERRED_VERSION_yeaphone ?= "0.1" -PREFERRED_VERSION_yp-tools ?= "2.9" -PREFERRED_VERSION_ypbind-mt ?= "1.19" -PREFERRED_VERSION_ypserv ?= "2.17" -PREFERRED_VERSION_zauralign ?= "1.0.2" -PREFERRED_VERSION_zaurus-tarball-native ?= "1.0" -PREFERRED_VERSION_zbedic ?= "1.0" -PREFERRED_VERSION_zbench ?= "2.0" -PREFERRED_VERSION_zcip ?= "4" -PREFERRED_VERSION_zd1211 ?= "r85" -PREFERRED_VERSION_zd1211-firmware ?= "1.3" -PREFERRED_VERSION_zddice ?= "1.0.0" -PREFERRED_VERSION_zeroconf ?= "0.9" -PREFERRED_VERSION_zgscore ?= "1.0.2" -PREFERRED_VERSION_zile ?= "2.2.15" -PREFERRED_VERSION_zip ?= "2.32" -PREFERRED_VERSION_zip-native ?= "2.32" -PREFERRED_VERSION_zipsc ?= "0.4.3" -PREFERRED_VERSION_ziq ?= "1.1ern" -PREFERRED_VERSION_zlapspeed ?= "1.0.0" -PREFERRED_VERSION_zlib ?= "1.2.3" -PREFERRED_VERSION_zlib-native ?= "1.2.3" -PREFERRED_VERSION_zmerlin ?= "0.9.1" -PREFERRED_VERSION_zope ?= "3.3.1" -PREFERRED_VERSION_zrally ?= "0.90" -PREFERRED_VERSION_zrev7 ?= "1.0.1" -PREFERRED_VERSION_zroadmap ?= "1.1.0" -PREFERRED_VERSION_zsafe ?= "2.1.3" -PREFERRED_VERSION_zsh ?= "4.1.1" -PREFERRED_VERSION_zshopi ?= "0.2" -PREFERRED_VERSION_zsubhunt ?= "1.0.0ern" -PREFERRED_VERSION_ztappy ?= "0.9.3ern" -PREFERRED_VERSION_zten ?= "1.6.2" -PREFERRED_VERSION_zuc ?= "1.1.2ern" -PREFERRED_VERSION_zudoku ?= "1.1" -PREFERRED_VERSION_zziplib ?= "0.10.82" -- cgit v1.2.3 From b651b8f32c4ca4a17a5c425c5596806e32aa0f9c Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:28:30 +0000 Subject: glproto: add 1.4.9 --- packages/xorg-proto/glproto_1.4.9.bb | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 packages/xorg-proto/glproto_1.4.9.bb diff --git a/packages/xorg-proto/glproto_1.4.9.bb b/packages/xorg-proto/glproto_1.4.9.bb new file mode 100644 index 0000000000..037b4205ca --- /dev/null +++ b/packages/xorg-proto/glproto_1.4.9.bb @@ -0,0 +1,3 @@ +require xorg-proto-common.inc +DESCRIPTION = "X11 OpenGL extension wire protocol" +PE = "1" -- cgit v1.2.3 From 060152d205baa2adf1556980088ac5595cc266b5 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:28:59 +0000 Subject: xproto: add 7.0.11 --- packages/xorg-proto/xproto_7.0.11.bb | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 packages/xorg-proto/xproto_7.0.11.bb diff --git a/packages/xorg-proto/xproto_7.0.11.bb b/packages/xorg-proto/xproto_7.0.11.bb new file mode 100644 index 0000000000..ee8af276de --- /dev/null +++ b/packages/xorg-proto/xproto_7.0.11.bb @@ -0,0 +1,3 @@ +require xorg-proto-common.inc +DESCRIPTION = "X11 core wire protocol and auxiliary headers" +PE = "1" -- cgit v1.2.3 From e550099647487fe3884f7ff7d6373cb9df1eb834 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:32:21 +0000 Subject: bitmap: add 1.0.3 --- packages/xorg-app/bitmap_1.0.3.bb | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 packages/xorg-app/bitmap_1.0.3.bb diff --git a/packages/xorg-app/bitmap_1.0.3.bb b/packages/xorg-app/bitmap_1.0.3.bb new file mode 100644 index 0000000000..561489f188 --- /dev/null +++ b/packages/xorg-app/bitmap_1.0.3.bb @@ -0,0 +1,3 @@ +require xorg-app-common.inc +DEPENDS += " virtual/libx11 libxmu xbitmaps libxt" +PE = "1" -- cgit v1.2.3 From d45893bdd07eac261d44b59897ca09175b163d52 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:34:24 +0000 Subject: luit: add 1.0.3 --- packages/xorg-app/luit_1.0.3.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-app/luit_1.0.3.bb diff --git a/packages/xorg-app/luit_1.0.3.bb b/packages/xorg-app/luit_1.0.3.bb new file mode 100644 index 0000000000..01645af9e0 --- /dev/null +++ b/packages/xorg-app/luit_1.0.3.bb @@ -0,0 +1,4 @@ +require xorg-app-common.inc +DESCRIPTION = "a filter for locale and ISO 2022 support on Unicode terminals" +DEPENDS += " zlib zlib virtual/libx11 libfontenc" +PE = "1" -- cgit v1.2.3 From ac7da762cbf4b01ba7a8943d18fde5cba234d5b9 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:35:08 +0000 Subject: xcalc: add 1.0.2 --- packages/xorg-app/xcalc_1.0.2.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-app/xcalc_1.0.2.bb diff --git a/packages/xorg-app/xcalc_1.0.2.bb b/packages/xorg-app/xcalc_1.0.2.bb new file mode 100644 index 0000000000..54b7549f5c --- /dev/null +++ b/packages/xorg-app/xcalc_1.0.2.bb @@ -0,0 +1,4 @@ +require xorg-app-common.inc +DESCRIPTION = "scientific calculator for X" +DEPENDS += " libxaw libxt" +PE = "1" -- cgit v1.2.3 From eb7c35b7c875603139bf56181f27137fa05b7ef4 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:35:54 +0000 Subject: xclock: add 1.0.3 --- packages/xorg-app/xclock_1.0.3.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-app/xclock_1.0.3.bb diff --git a/packages/xorg-app/xclock_1.0.3.bb b/packages/xorg-app/xclock_1.0.3.bb new file mode 100644 index 0000000000..0e73c6408f --- /dev/null +++ b/packages/xorg-app/xclock_1.0.3.bb @@ -0,0 +1,4 @@ +require xorg-app-common.inc +DESCRIPTION = "analog / digital clock for X" +DEPENDS += " virtual/libx11 libxaw libxrender libxft libxkbfile libxt" +PE = "1" -- cgit v1.2.3 From 296f797ef9c30759ab2248aeebe7888bef30909e Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:37:09 +0000 Subject: xconsole: add 1.0.3 --- packages/xorg-app/xconsole_1.0.3.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-app/xconsole_1.0.3.bb diff --git a/packages/xorg-app/xconsole_1.0.3.bb b/packages/xorg-app/xconsole_1.0.3.bb new file mode 100644 index 0000000000..ce53df9689 --- /dev/null +++ b/packages/xorg-app/xconsole_1.0.3.bb @@ -0,0 +1,4 @@ +require xorg-app-common.inc +DESCRIPTION = "monitor system console messages with X" +DEPENDS += " libxt" +PE = "1" -- cgit v1.2.3 From c638c55b4e7dedab10bc7195f34eabb7273e6723 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:38:51 +0000 Subject: xcursorgen: add 1.0.2 --- packages/xorg-app/xcursorgen_1.0.2.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-app/xcursorgen_1.0.2.bb diff --git a/packages/xorg-app/xcursorgen_1.0.2.bb b/packages/xorg-app/xcursorgen_1.0.2.bb new file mode 100644 index 0000000000..98e619e99a --- /dev/null +++ b/packages/xorg-app/xcursorgen_1.0.2.bb @@ -0,0 +1,4 @@ +require xorg-app-common.inc +DESCRIPTION = "create an X cursor file from a collection of PNG images" +DEPENDS += " virtual/libx11 libxcursor libpng" +PE = "1" -- cgit v1.2.3 From 9599e3ec0fa280b62271e1338300280d40d2d4ee Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:39:34 +0000 Subject: xdriinfo: add 1.0.2 --- packages/xorg-app/xdriinfo_1.0.2.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-app/xdriinfo_1.0.2.bb diff --git a/packages/xorg-app/xdriinfo_1.0.2.bb b/packages/xorg-app/xdriinfo_1.0.2.bb new file mode 100644 index 0000000000..3d1c9e9613 --- /dev/null +++ b/packages/xorg-app/xdriinfo_1.0.2.bb @@ -0,0 +1,4 @@ +require xorg-app-common.inc +DESCRIPTION = "query configuration information of DRI drivers" +DEPENDS += " virtual/libx11 glproto mesa" +PE = "1" -- cgit v1.2.3 From 0152d5b980f499502fc5b0b689d570c56ca567d8 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:40:16 +0000 Subject: xinit: add 1.0.7 --- packages/xorg-app/xinit_1.0.7.bb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 packages/xorg-app/xinit_1.0.7.bb diff --git a/packages/xorg-app/xinit_1.0.7.bb b/packages/xorg-app/xinit_1.0.7.bb new file mode 100644 index 0000000000..ce82fb05d4 --- /dev/null +++ b/packages/xorg-app/xinit_1.0.7.bb @@ -0,0 +1,6 @@ +require xorg-app-common.inc + +DESCRIPTION = "X Window System initializer" +PE = "1" + +FILES_${PN} += "${libdir}X11/xinit" -- cgit v1.2.3 From f3acc727d919d159ef234a98b76740afd2096f87 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:41:01 +0000 Subject: xload: add 1.0.2 --- packages/xorg-app/xload_1.0.2.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-app/xload_1.0.2.bb diff --git a/packages/xorg-app/xload_1.0.2.bb b/packages/xorg-app/xload_1.0.2.bb new file mode 100644 index 0000000000..66f64eb462 --- /dev/null +++ b/packages/xorg-app/xload_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc + +DESCRIPTION = "system load average display for X" +DEPENDS += " libxaw libxt" +PE = "1" -- cgit v1.2.3 From 1b36dca39e0bd0e974e9ca41f698a16da5b9d7da Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:41:35 +0000 Subject: xlsfonts: add 1.0.2 --- packages/xorg-app/xlsfonts_1.0.2.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-app/xlsfonts_1.0.2.bb diff --git a/packages/xorg-app/xlsfonts_1.0.2.bb b/packages/xorg-app/xlsfonts_1.0.2.bb new file mode 100644 index 0000000000..31cd482b61 --- /dev/null +++ b/packages/xorg-app/xlsfonts_1.0.2.bb @@ -0,0 +1,4 @@ +require xorg-app-common.inc + +DESCRIPTION = "server font list displayer for X" +DEPENDS += " virtual/libx11" -- cgit v1.2.3 From 826e0da7a7408185b2a17c8373b2cc01c145cbbf Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:42:12 +0000 Subject: xmag: add 1.0.2 --- packages/xorg-app/xmag_1.0.2.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-app/xmag_1.0.2.bb diff --git a/packages/xorg-app/xmag_1.0.2.bb b/packages/xorg-app/xmag_1.0.2.bb new file mode 100644 index 0000000000..4c1359427f --- /dev/null +++ b/packages/xorg-app/xmag_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc + +DESCRIPTION = "magnify parts of the screen" +DEPENDS += " libxaw libxt" +PE = "1" -- cgit v1.2.3 From 06a7991c19a931a33f839d1e0a184da76f8e01b8 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:43:45 +0000 Subject: xman: add 1.0.3 --- packages/xorg-app/xman_1.0.3.bb | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 packages/xorg-app/xman_1.0.3.bb diff --git a/packages/xorg-app/xman_1.0.3.bb b/packages/xorg-app/xman_1.0.3.bb new file mode 100644 index 0000000000..e4e6bff80f --- /dev/null +++ b/packages/xorg-app/xman_1.0.3.bb @@ -0,0 +1,8 @@ +require xorg-app-common.inc + +DESCRIPTION = "manual page browser for X" +DEPENDS += " libxaw libxprintutil libxp libxt" +RDEPENDS = " man" +PE = "1" + +FILES_${PN} += " /usr/share/X11/xman.help" -- cgit v1.2.3 From 5ec70fa25dc3ddf00d8a9887c5ed7110cd788277 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:44:16 +0000 Subject: xmessage: add 1.0.2 --- packages/xorg-app/xmessage_1.0.2.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-app/xmessage_1.0.2.bb diff --git a/packages/xorg-app/xmessage_1.0.2.bb b/packages/xorg-app/xmessage_1.0.2.bb new file mode 100644 index 0000000000..80e30dd819 --- /dev/null +++ b/packages/xorg-app/xmessage_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc + +DESCRIPTION = "xmessage displays a message or query in a window." +DEPENDS += " libxaw libxt" +PE = "1" -- cgit v1.2.3 From c42da3edd226ac1f89f75d9d237c503a6d16256a Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:45:01 +0000 Subject: xsetpointer: add 1.0.1 --- packages/xorg-app/xsetpointer_1.0.1.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-app/xsetpointer_1.0.1.bb diff --git a/packages/xorg-app/xsetpointer_1.0.1.bb b/packages/xorg-app/xsetpointer_1.0.1.bb new file mode 100644 index 0000000000..4db725532a --- /dev/null +++ b/packages/xorg-app/xsetpointer_1.0.1.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc + +DESCRIPTION = "set an X Input device as the main pointer" +DEPENDS += " libxi virtual/libx11" +PE = "1" -- cgit v1.2.3 From 7fbdcedee6c1dca54259c9eb506521b5a513ee84 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:45:44 +0000 Subject: xwininfo: add 1.0.3 --- packages/xorg-app/xwininfo_1.0.3.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-app/xwininfo_1.0.3.bb diff --git a/packages/xorg-app/xwininfo_1.0.3.bb b/packages/xorg-app/xwininfo_1.0.3.bb new file mode 100644 index 0000000000..5d97083b02 --- /dev/null +++ b/packages/xorg-app/xwininfo_1.0.3.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc + +DESCRIPTION = "window information utility for X" +DEPENDS += " libxmu libxext virtual/libx11" +PE = "1" -- cgit v1.2.3 From 98f4c2d3847393f4e853c3f07a0ac4fc8ad3d9fb Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 5 Feb 2008 15:46:16 +0000 Subject: oe-stylize.py: add support for the PE (package epoch) variable --- contrib/oe-stylize.py | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/oe-stylize.py b/contrib/oe-stylize.py index a92b58dc73..5658c1662d 100755 --- a/contrib/oe-stylize.py +++ b/contrib/oe-stylize.py @@ -42,6 +42,7 @@ OE_vars = [ 'RPROVIDES', 'RCONFLICTS', 'SRCDATE', + 'PE', 'PV', 'PR', 'SRC_URI', -- cgit v1.2.3 From 1f7c6d8be208f0f5316a52c5954b1ac2746c450c Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 5 Feb 2008 21:39:31 +0000 Subject: klibc-utils-static: first commit. partly closes 3739. --- packages/klibc/klibc-utils-static_1.5.bb | 81 ++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 packages/klibc/klibc-utils-static_1.5.bb diff --git a/packages/klibc/klibc-utils-static_1.5.bb b/packages/klibc/klibc-utils-static_1.5.bb new file mode 100644 index 0000000000..4349b8d4f0 --- /dev/null +++ b/packages/klibc/klibc-utils-static_1.5.bb @@ -0,0 +1,81 @@ +require klibc.inc + +PR = "r3" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/Stable/klibc-${PV}.tar.bz2" + +EXTRA_OEMAKE = "'KLIBCARCH=${KLIBC_ARCH}' \ + 'CROSS_COMPILE=${TARGET_PREFIX}' \ + " + +do_install() { + install -d ${D}${base_bindir} + install -m 755 usr/dash/sh ${D}${base_bindir} + install -m 755 usr/gzip/gzip ${D}${base_bindir} + ln -s ${D}${base_bindir}/gzip ${D}${base_bindir}/gunzip + ln -s ${D}${base_bindir}/gzip ${D}${base_bindir}/zcat + install -m 755 usr/utils/static/cat ${D}${base_bindir} + install -m 755 usr/utils/static/chroot ${D}${base_bindir} + install -m 755 usr/utils/static/cpio ${D}${base_bindir} + install -m 755 usr/utils/static/dd ${D}${base_bindir} + install -m 755 usr/utils/static/false ${D}${base_bindir} + install -m 755 usr/utils/static/halt ${D}${base_bindir} + install -m 755 usr/utils/static/insmod ${D}${base_bindir} + install -m 755 usr/utils/static/kill ${D}${base_bindir} + install -m 755 usr/utils/static/ln ${D}${base_bindir} + install -m 755 usr/utils/static/minips ${D}${base_bindir} + install -m 755 usr/utils/static/mkdir ${D}${base_bindir} + install -m 755 usr/utils/static/mknod ${D}${base_bindir} + install -m 755 usr/utils/static/mount ${D}${base_bindir} + install -m 755 usr/utils/static/nuke ${D}${base_bindir} + install -m 755 usr/utils/static/pivot_root ${D}${base_bindir} + install -m 755 usr/utils/static/readlink ${D}${base_bindir} + install -m 755 usr/utils/static/sleep ${D}${base_bindir} + install -m 755 usr/utils/static/true ${D}${base_bindir} + install -m 755 usr/utils/static/umount ${D}${base_bindir} + install -m 755 usr/utils/static/uname ${D}${base_bindir} +} + +PACKAGE_ARCH = "${MACHINE_ARCH}" +PACKAGES = "klibc-utils-static-sh klibc-utils-static-gzip \ + klibc-utils-static-cat klibc-utils-static-chroot \ + klibc-utils-static-cpio klibc-utils-static-dd \ + klibc-utils-static-false klibc-utils-static-halt \ + klibc-utils-static-insmod klibc-utils-static-kill \ + klibc-utils-static-ln klibc-utils-static-minips \ + klibc-utils-static-mkdir klibc-utils-static-mknod \ + klibc-utils-static-mount klibc-utils-static-nuke \ + klibc-utils-static-pivot-root klibc-utils-static-readlink \ + klibc-utils-static-sleep klibc-utils-static-true \ + klibc-utils-static-umount klibc-utils-static-uname " + +FILES_klibc-utils-static-sh = "${base_bindir}/sh" +FILES_klibc-utils-static-gzip = "${base_bindir}/gzip ${base_bindir}/gunzip ${base_bindir}/zcat" +FILES_klibc-utils-static-cat = "${base_bindir}/cat" +FILES_klibc-utils-static-chroot = "${base_bindir}/chroot" +FILES_klibc-utils-static-cpio = "${base_bindir}/cpio" +FILES_klibc-utils-static-dd = "${base_bindir}/dd" +FILES_klibc-utils-static-false = "${base_bindir}/false" +FILES_klibc-utils-static-halt = "${base_bindir}/halt" +FILES_klibc-utils-static-insmod = "${base_bindir}/insmod" +FILES_klibc-utils-static-kill = "${base_bindir}/kill" +FILES_klibc-utils-static-ln = "${base_bindir}/ln" +FILES_klibc-utils-static-minips = "${base_bindir}/minips" +FILES_klibc-utils-static-mkdir = "${base_bindir}/mkdir" +FILES_klibc-utils-static-mknod = "${base_bindir}/mknod" +FILES_klibc-utils-static-mount = "${base_bindir}/mount" +FILES_klibc-utils-static-nuke = "${base_bindir}/nuke" +FILES_klibc-utils-static-pivot-root = "${base_bindir}/pivot_root" +FILES_klibc-utils-static-readlink = "${base_bindir}/readlink" +FILES_klibc-utils-static-sleep = "${base_bindir}/sleep" +FILES_klibc-utils-static-true = "${base_bindir}/true" +FILES_klibc-utils-static-umount = "${base_bindir}/umount" +FILES_klibc-utils-static-uname = "${base_bindir}/uname" + +# the klibc code contains ARM instructions (for ARM), this +# could be fixed, but for the moment: +ARM_INSTRUCTION_SET = "arm" + +KLIBC_ARCH = "'${TARGET_ARCH}'" +KLIBC_ARCH_armeb = "'arm'" +KLIBC_ARCH_mipsel = "'mips'" -- cgit v1.2.3 From de5b1670c799cf809b769a58b99bb628aeb75265 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 5 Feb 2008 22:02:19 +0000 Subject: initramfs-kexec: initial commit. partly closes 3739. --- packages/initrdscripts/initramfs-kexec_1.0.bb | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 packages/initrdscripts/initramfs-kexec_1.0.bb diff --git a/packages/initrdscripts/initramfs-kexec_1.0.bb b/packages/initrdscripts/initramfs-kexec_1.0.bb new file mode 100644 index 0000000000..b5bf497f37 --- /dev/null +++ b/packages/initrdscripts/initramfs-kexec_1.0.bb @@ -0,0 +1,25 @@ +DESCRIPTON = "A init script that mounts a device and kexecs a new kernel from it." +PR = "r3" + +do_compile() { + cat > init.sh << EOF +#!/bin/sh +/bin/mount -t proc proc /proc +/bin/mount -t ${ROOTFS} /dev/${ROOTDEV} /mnt +/usr/sbin/kexec -l /mnt/zImage +/usr/sbin/kexec -e +EOF +} + +do_install() { + install -m 0755 ${S}/init.sh ${D}/init + install -d ${D}/proc + install -d ${D}/mnt +} + +PACKAGE_ARCH = "all" + +FILES_${PN} = "/init /proc /mnt" + +ROOTDEV = "mtdblock2" +ROOTFS = "jffs2" -- cgit v1.2.3 From b21b83328bffe4e832a073c1458c32503f3a7900 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 5 Feb 2008 23:23:32 +0000 Subject: kexec-tools: unify --- packages/kexec/kexec-tools.inc | 15 +++++++++++++++ packages/kexec/kexec-tools_1.101.bb | 17 ++--------------- 2 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 packages/kexec/kexec-tools.inc diff --git a/packages/kexec/kexec-tools.inc b/packages/kexec/kexec-tools.inc new file mode 100644 index 0000000000..5649934a5b --- /dev/null +++ b/packages/kexec/kexec-tools.inc @@ -0,0 +1,15 @@ +DESCRIPTION = "Kexec is a fast reboot feature that lets you reboot to a new Linux kernel" +AUTHOR = "Eric Biederman" +HOMEPAGE = "http://www.xmission.com/~ebiederm/files/kexec/" +SECTION = "kernel/userland" +LICENSE = "GPL" +DEPENDS = "virtual/kernel zlib" + +inherit autotools + +export LDFLAGS = "-L${STAGING_LIBDIR}" +EXTRA_OECONF = " --with-zlib=yes" + +SRC_URI = "http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-${PV}.tar.gz \ + file://kexec-tools-arm.patch;patch=1 \ + file://kexec-arm-atags.patch;patch=1" diff --git a/packages/kexec/kexec-tools_1.101.bb b/packages/kexec/kexec-tools_1.101.bb index d152a678ed..366fad4978 100644 --- a/packages/kexec/kexec-tools_1.101.bb +++ b/packages/kexec/kexec-tools_1.101.bb @@ -1,16 +1,3 @@ -DESCRIPTION = "Kexec is a fast reboot feature that lets you reboot to a new Linux kernel" -AUTHOR = "Eric Biederman" -HOMEPAGE = "http://www.xmission.com/~ebiederm/files/kexec/" -SECTION = "kernel/userland" -DEPENDS = "virtual/kernel zlib" -LICENSE = "GPL" -PR = "r3" +require kexec-tools.inc -inherit autotools - -export LDFLAGS = "-L${STAGING_LIBDIR}" -EXTRA_OECONF = " --with-zlib=yes" - -SRC_URI = "http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-${PV}.tar.gz \ - file://kexec-tools-arm.patch;patch=1 \ - file://kexec-arm-atags.patch;patch=1" +PR = "r4" -- cgit v1.2.3 From 5fcb08b919068b402022c7601ae05cee58b50c09 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 5 Feb 2008 23:28:12 +0000 Subject: kexec-tools: add static version. partly closes 3739. * rename packages/kexec/kexec-tools-1.101 to packages/kexec/files so that patches can be shared * add packages/kexec/files/kexec-static.patch and packages/kexec/kexec-tools-static_1.101.bb --- packages/kexec/files/.mtn2git_empty | 0 packages/kexec/files/kexec-arm-atags.patch | 294 +++++++++++++++ packages/kexec/files/kexec-static.patch | 12 + packages/kexec/files/kexec-tools-arm.patch | 417 +++++++++++++++++++++ packages/kexec/kexec-tools-1.101/.mtn2git_empty | 0 .../kexec/kexec-tools-1.101/kexec-arm-atags.patch | 294 --------------- .../kexec/kexec-tools-1.101/kexec-tools-arm.patch | 417 --------------------- packages/kexec/kexec-tools-static_1.101.bb | 12 + 8 files changed, 735 insertions(+), 711 deletions(-) create mode 100644 packages/kexec/files/.mtn2git_empty create mode 100644 packages/kexec/files/kexec-arm-atags.patch create mode 100644 packages/kexec/files/kexec-static.patch create mode 100644 packages/kexec/files/kexec-tools-arm.patch delete mode 100644 packages/kexec/kexec-tools-1.101/.mtn2git_empty delete mode 100644 packages/kexec/kexec-tools-1.101/kexec-arm-atags.patch delete mode 100644 packages/kexec/kexec-tools-1.101/kexec-tools-arm.patch create mode 100644 packages/kexec/kexec-tools-static_1.101.bb diff --git a/packages/kexec/files/.mtn2git_empty b/packages/kexec/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/kexec/files/kexec-arm-atags.patch b/packages/kexec/files/kexec-arm-atags.patch new file mode 100644 index 0000000000..bf6f640035 --- /dev/null +++ b/packages/kexec/files/kexec-arm-atags.patch @@ -0,0 +1,294 @@ +--- + kexec/arch/arm/kexec-zImage-arm.c | 259 ++++++++++++++++++++++++++++++++++++-- + 1 file changed, 252 insertions(+), 7 deletions(-) + +Index: kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c +=================================================================== +--- kexec-tools-1.101.orig/kexec/arch/arm/kexec-zImage-arm.c 2007-12-26 21:17:07.000000000 +0000 ++++ kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c 2007-12-27 01:24:25.000000000 +0000 +@@ -1,11 +1,83 @@ ++/* ++ * - 08/21/2007 ATAG support added by Uli Luckas ++ * ++ */ + #define _GNU_SOURCE + #include + #include + #include + #include + #include ++#include ++#include ++#include ++#include + #include "../../kexec.h" + ++#define COMMAND_LINE_SIZE 1024 ++#define BOOT_PARAMS_SIZE 1536 ++ ++struct tag_header { ++ uint32_t size; ++ uint32_t tag; ++}; ++ ++/* The list must start with an ATAG_CORE node */ ++#define ATAG_CORE 0x54410001 ++ ++struct tag_core { ++ uint32_t flags; /* bit 0 = read-only */ ++ uint32_t pagesize; ++ uint32_t rootdev; ++}; ++ ++/* it is allowed to have multiple ATAG_MEM nodes */ ++#define ATAG_MEM 0x54410002 ++ ++struct tag_mem32 { ++ uint32_t size; ++ uint32_t start; /* physical start address */ ++}; ++ ++/* describes where the compressed ramdisk image lives (virtual address) */ ++/* ++ * this one accidentally used virtual addresses - as such, ++ * it's deprecated. ++ */ ++#define ATAG_INITRD 0x54410005 ++ ++/* describes where the compressed ramdisk image lives (physical address) */ ++#define ATAG_INITRD2 0x54420005 ++ ++struct tag_initrd { ++ uint32_t start; /* physical start address */ ++ uint32_t size; /* size of compressed ramdisk image in bytes */ ++}; ++ ++/* command line: \0 terminated string */ ++#define ATAG_CMDLINE 0x54410009 ++ ++struct tag_cmdline { ++ char cmdline[1]; /* this is the minimum size */ ++}; ++ ++/* The list ends with an ATAG_NONE node. */ ++#define ATAG_NONE 0x00000000 ++ ++struct tag { ++ struct tag_header hdr; ++ union { ++ struct tag_core core; ++ struct tag_mem32 mem; ++ struct tag_initrd initrd; ++ struct tag_cmdline cmdline; ++ } u; ++}; ++ ++#define tag_next(t) ((struct tag *)((uint32_t *)(t) + (t)->hdr.size)) ++#define byte_size(t) ((t)->hdr.size << 2) ++#define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type) + 3) >> 2) ++ + int zImage_arm_probe(const char *buf, off_t len) + { + /* +@@ -14,21 +86,194 @@ int zImage_arm_probe(const char *buf, of + */ + return 0; + } ++ + void zImage_arm_usage(void) + { ++ printf( " --command-line=STRING Set the kernel command line to STRING.\n" ++ " --append=STRING Set the kernel command line to STRING.\n" ++ " --initrd=FILE Use FILE as the kernel's initial ramdisk.\n" ++ " --ramdisk=FILE Use FILE as the kernel's initial ramdisk.\n" ++ ); + } +-int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, ++ ++static ++struct tag * atag_read_tags(void) ++{ ++ static unsigned long buf[BOOT_PARAMS_SIZE]; ++ const char fn[]= "/proc/atags"; ++ FILE *fp; ++ fp = fopen(fn, "r"); ++ if (!fp) { ++ fprintf(stderr, "Cannot open %s: %s\n", ++ fn, strerror(errno)); ++ return NULL; ++ } ++ ++ fread(buf, sizeof(buf[1]), BOOT_PARAMS_SIZE, fp); ++ if (ferror(fp)) { ++ fprintf(stderr, "Cannot read %s: %s\n", ++ fn, strerror(errno)); ++ fclose(fp); ++ return NULL; ++ } ++ ++ fclose(fp); ++ return (struct tag *) buf; ++} ++ ++ ++static ++int atag_arm_load(struct kexec_info *info, unsigned long base, ++ const char *command_line, off_t command_line_len, ++ const char *initrd, off_t initrd_len) ++{ ++ struct tag *saved_tags = atag_read_tags(); ++ char *buf; ++ off_t len; ++ struct tag *params; ++ uint32_t *initrd_start; ++ ++ buf = xmalloc(getpagesize()); ++ if (!buf) { ++ fprintf(stderr, "Compiling ATAGs: out of memory\n"); ++ return -1; ++ } ++ ++ memset(buf, 0xff, getpagesize()); ++ params = (struct tag *)buf; ++ ++ if (saved_tags) { ++ // Copy tags ++ saved_tags = (struct tag *) saved_tags; ++ while(byte_size(saved_tags)) { ++ switch (saved_tags->hdr.tag) { ++ case ATAG_INITRD: ++ case ATAG_INITRD2: ++ case ATAG_CMDLINE: ++ case ATAG_NONE: ++ // skip these tags ++ break; ++ default: ++ // copy all other tags ++ memcpy(params, saved_tags, byte_size(saved_tags)); ++ params = tag_next(params); ++ } ++ saved_tags = tag_next(saved_tags); ++ } ++ } else { ++ params->hdr.size = 2; ++ params->hdr.tag = ATAG_CORE; ++ params = tag_next(params); ++ } ++ ++ if (initrd) { ++ params->hdr.size = tag_size(tag_initrd); ++ params->hdr.tag = ATAG_INITRD2; ++ initrd_start = ¶ms->u.initrd.start; ++ params->u.initrd.size = initrd_len; ++ params = tag_next(params); ++ } ++ ++ if (command_line) { ++ params->hdr.size = (sizeof(struct tag_header) + command_line_len + 3) >> 2; ++ params->hdr.tag = ATAG_CMDLINE; ++ memcpy(params->u.cmdline.cmdline, command_line, ++ command_line_len); ++ params->u.cmdline.cmdline[command_line_len - 1] = '\0'; ++ params = tag_next(params); ++ } ++ ++ params->hdr.size = 0; ++ params->hdr.tag = ATAG_NONE; ++ ++ len = ((char *)params - buf) + sizeof(struct tag_header); ++ ++ add_segment(info, buf, len, base, len); ++ ++ if (initrd) { ++ struct memory_range *range; ++ int ranges; ++ get_memory_ranges(&range, &ranges); ++ *initrd_start = locate_hole(info, initrd_len, getpagesize(), range[0].start + 0x800000, ULONG_MAX, INT_MAX); ++ if (*initrd_start == ULONG_MAX) ++ return -1; ++ add_segment(info, initrd, initrd_len, *initrd_start, initrd_len); ++ } ++ ++ return 0; ++} ++ ++int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, + struct kexec_info *info) + { + unsigned long base; +- unsigned int offset = 0x8000; /* 32k offset from memory start */ ++ unsigned int atag_offset = 0x1000; /* 4k offset from memory start */ ++ unsigned int offset = 0x8000; /* 32k offset from memory start */ ++ const char *command_line; ++ off_t command_line_len; ++ const char *ramdisk; ++ char *ramdisk_buf; ++ off_t ramdisk_length; ++ int opt; ++#define OPT_APPEND 'a' ++#define OPT_RAMDISK 'r' ++ static const struct option options[] = { ++ KEXEC_ARCH_OPTIONS ++ { "command-line", 1, 0, OPT_APPEND }, ++ { "append", 1, 0, OPT_APPEND }, ++ { "initrd", 1, 0, OPT_RAMDISK }, ++ { "ramdisk", 1, 0, OPT_RAMDISK }, ++ { 0, 0, 0, 0 }, ++ }; ++ static const char short_options[] = KEXEC_ARCH_OPT_STR "a:r:"; ++ ++ /* ++ * Parse the command line arguments ++ */ ++ command_line = 0; ++ command_line_len = 0; ++ ramdisk = 0; ++ ramdisk_buf = 0; ++ ramdisk_length = 0; ++ while((opt = getopt_long(argc, argv, short_options, options, 0)) != -1) { ++ switch(opt) { ++ default: ++ /* Ignore core options */ ++ if (opt < OPT_ARCH_MAX) { ++ break; ++ } ++ case '?': ++ usage(); ++ return -1; ++ case OPT_APPEND: ++ command_line = optarg; ++ break; ++ case OPT_RAMDISK: ++ ramdisk = optarg; ++ break; ++ } ++ } ++ if (command_line) { ++ command_line_len = strlen(command_line) + 1; ++ if (command_line_len > COMMAND_LINE_SIZE) ++ command_line_len = COMMAND_LINE_SIZE; ++ } ++ if (ramdisk) { ++ ramdisk_buf = slurp_file(ramdisk, &ramdisk_length); ++ } ++ + base = locate_hole(info,len+offset,0,0,ULONG_MAX,INT_MAX); + if (base == ULONG_MAX) +- { + return -1; +- } +- base += offset; +- add_segment(info,buf,len,base,len); +- info->entry = (void*)base; ++ ++ if (atag_arm_load(info, base + atag_offset, ++ command_line, command_line_len, ++ ramdisk_buf, ramdisk_length) == -1) ++ return -1; ++ ++ add_segment(info, buf, len, base + offset, len); ++ ++ info->entry = (void*)base + offset; ++ + return 0; + } diff --git a/packages/kexec/files/kexec-static.patch b/packages/kexec/files/kexec-static.patch new file mode 100644 index 0000000000..549300576e --- /dev/null +++ b/packages/kexec/files/kexec-static.patch @@ -0,0 +1,12 @@ +diff -ur kexec-tools-1.101.bak/configure.ac kexec-tools-1.101/configure.ac +--- kexec-tools-1.101.bak/configure.ac 2008-02-03 00:05:59.577094746 +0100 ++++ kexec-tools-1.101/configure.ac 2008-02-03 00:06:35.579146386 +0100 +@@ -96,7 +96,7 @@ + + dnl ---Hard codes + +-CFLAGS='-Wall -g -fno-strict-aliasing $(CPPFLAGS)' ++CFLAGS='-Wall -g -static -fno-strict-aliasing $(CPPFLAGS)' + BUILD_CFLAGS='-O2 -Wall $(CPPFLAGS)' + + dnl ---Sanity checks diff --git a/packages/kexec/files/kexec-tools-arm.patch b/packages/kexec/files/kexec-tools-arm.patch new file mode 100644 index 0000000000..6e43b76096 --- /dev/null +++ b/packages/kexec/files/kexec-tools-arm.patch @@ -0,0 +1,417 @@ +Index: kexec-tools-1.101/kexec/arch/arm/include/arch/options.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kexec-tools-1.101/kexec/arch/arm/include/arch/options.h 2006-02-06 18:28:37.027097280 +0100 +@@ -0,0 +1,11 @@ ++#ifndef KEXEC_ARCH_ARM_OPTIONS_H ++#define KEXEC_ARCH_ARM_OPTIONS_H ++ ++#define OPT_ARCH_MAX (OPT_MAX+0) ++ ++#define KEXEC_ARCH_OPTIONS \ ++ KEXEC_OPTIONS \ ++ ++#define KEXEC_ARCH_OPT_STR KEXEC_OPT_STR "" ++ ++#endif /* KEXEC_ARCH_ARM_OPTIONS_H */ +Index: kexec-tools-1.101/kexec/arch/arm/kexec-arm.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kexec-tools-1.101/kexec/arch/arm/kexec-arm.c 2006-02-06 18:28:37.027097280 +0100 +@@ -0,0 +1,138 @@ ++/* ++ * kexec: Linux boots Linux ++ * ++ * modified from kexec-ppc.c ++ * ++ */ ++ ++#define _GNU_SOURCE ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "../../kexec.h" ++#include "../../kexec-syscall.h" ++#include "kexec-arm.h" ++#include ++ ++#define MAX_MEMORY_RANGES 64 ++#define MAX_LINE 160 ++static struct memory_range memory_range[MAX_MEMORY_RANGES]; ++ ++/* Return a sorted list of available memory ranges. */ ++int get_memory_ranges(struct memory_range **range, int *ranges) ++{ ++ const char iomem[]= "/proc/iomem"; ++ int memory_ranges = 0; ++ char line[MAX_LINE]; ++ FILE *fp; ++ fp = fopen(iomem, "r"); ++ if (!fp) { ++ fprintf(stderr, "Cannot open %s: %s\n", ++ iomem, strerror(errno)); ++ return -1; ++ } ++ ++ while(fgets(line, sizeof(line), fp) != 0) { ++ unsigned long long start, end; ++ char *str; ++ int type; ++ int consumed; ++ int count; ++ if (memory_ranges >= MAX_MEMORY_RANGES) ++ break; ++ count = sscanf(line, "%Lx-%Lx : %n", ++ &start, &end, &consumed); ++ if (count != 2) ++ continue; ++ str = line + consumed; ++ end = end + 1; ++ ++ if (memcmp(str, "System RAM\n", 11) == 0) { ++ type = RANGE_RAM; ++ } ++ else if (memcmp(str, "reserved\n", 9) == 0) { ++ type = RANGE_RESERVED; ++ } ++ else { ++ continue; ++ } ++ ++ memory_range[memory_ranges].start = start; ++ memory_range[memory_ranges].end = end; ++ memory_range[memory_ranges].type = type; ++ memory_ranges++; ++ } ++ fclose(fp); ++ *range = memory_range; ++ *ranges = memory_ranges; ++ return 0; ++} ++ ++/* Supported file types and callbacks */ ++struct file_type file_type[] = { ++ {"zImage", zImage_arm_probe, zImage_arm_load, zImage_arm_usage}, ++}; ++int file_types = sizeof(file_type) / sizeof(file_type[0]); ++ ++ ++void arch_usage(void) ++{ ++} ++ ++static struct { ++} arch_options = { ++}; ++int arch_process_options(int argc, char **argv) ++{ ++ static const struct option options[] = { ++ KEXEC_ARCH_OPTIONS ++ { 0, 0, NULL, 0 }, ++ }; ++ static const char short_options[] = KEXEC_ARCH_OPT_STR; ++ int opt; ++ unsigned long value; ++ char *end; ++ ++ opterr = 0; /* Don't complain about unrecognized options here */ ++ while((opt = getopt_long(argc, argv, short_options, options, 0)) != -1) { ++ switch(opt) { ++ default: ++ break; ++ } ++ } ++ /* Reset getopt for the next pass; called in other source modules */ ++ opterr = 1; ++ optind = 1; ++ return 0; ++} ++ ++int arch_compat_trampoline(struct kexec_info *info, unsigned long *flags) ++{ ++ int result; ++ struct utsname utsname; ++ result = uname(&utsname); ++ if (result < 0) { ++ fprintf(stderr, "uname failed: %s\n", ++ strerror(errno)); ++ return -1; ++ } ++ if (strncmp(utsname.machine, "arm",3) == 0) ++ { ++ *flags |= KEXEC_ARCH_ARM; ++ } ++ else { ++ fprintf(stderr, "Unsupported machine type: %s\n", ++ utsname.machine); ++ return -1; ++ } ++ return 0; ++} ++ ++void arch_update_purgatory(struct kexec_info *info) ++{ ++} ++ +Index: kexec-tools-1.101/kexec/arch/arm/kexec-arm.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kexec-tools-1.101/kexec/arch/arm/kexec-arm.h 2006-02-06 18:28:37.028097128 +0100 +@@ -0,0 +1,9 @@ ++#ifndef KEXEC_ARM_H ++#define KEXEC_ARM_H ++ ++int zImage_arm_probe(const char *buf, off_t len); ++int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, ++ struct kexec_info *info); ++void zImage_arm_usage(void); ++ ++#endif /* KEXEC_ARM_H */ +Index: kexec-tools-1.101/kexec/arch/arm/kexec-elf-rel-arm.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kexec-tools-1.101/kexec/arch/arm/kexec-elf-rel-arm.c 2006-02-06 18:28:37.028097128 +0100 +@@ -0,0 +1,35 @@ ++#include ++#include ++#include "../../kexec.h" ++#include "../../kexec-elf.h" ++ ++int machine_verify_elf_rel(struct mem_ehdr *ehdr) ++{ ++ if (ehdr->ei_data != ELFDATA2MSB) { ++ return 0; ++ } ++ if (ehdr->ei_class != ELFCLASS32) { ++ return 0; ++ } ++ if (ehdr->e_machine != EM_ARM) ++ { ++ return 0; ++ } ++ return 1; ++} ++ ++void machine_apply_elf_rel(struct mem_ehdr *ehdr, unsigned long r_type, ++ void *location, unsigned long address, unsigned long value) ++{ ++ switch(r_type) { ++ case R_ARM_ABS32: ++ *((uint32_t *)location) += value; ++ break; ++ case R_ARM_REL32: ++ *((uint32_t *)location) += value - address; ++ break; ++ default: ++ die("Unknown rel relocation: %lu\n", r_type); ++ break; ++ } ++} +Index: kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c 2006-02-06 18:28:37.028097128 +0100 +@@ -0,0 +1,34 @@ ++#define _GNU_SOURCE ++#include ++#include ++#include ++#include ++#include ++#include "../../kexec.h" ++ ++int zImage_arm_probe(const char *buf, off_t len) ++{ ++ /* ++ * Only zImage loading is supported. Do not check if ++ * the buffer is valid kernel image ++ */ ++ return 0; ++} ++void zImage_arm_usage(void) ++{ ++} ++int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, ++ struct kexec_info *info) ++{ ++ unsigned long base; ++ unsigned int offset = 0x8000; /* 32k offset from memory start */ ++ base = locate_hole(info,len+offset,0,0,ULONG_MAX,INT_MAX); ++ if (base == ULONG_MAX) ++ { ++ return -1; ++ } ++ base += offset; ++ add_segment(info,buf,len,base,len); ++ info->entry = (void*)base; ++ return 0; ++} +Index: kexec-tools-1.101/kexec/arch/arm/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kexec-tools-1.101/kexec/arch/arm/Makefile 2006-02-06 18:28:37.028097128 +0100 +@@ -0,0 +1,8 @@ ++# ++# kexec arm (linux booting linux) ++# ++KEXEC_C_SRCS+= kexec/arch/arm/kexec-elf-rel-arm.c ++KEXEC_C_SRCS+= kexec/arch/arm/kexec-zImage-arm.c ++KEXEC_C_SRCS+= kexec/arch/arm/kexec-arm.c ++ ++KEXEC_S_SRCS+= +Index: kexec-tools-1.101/kexec/kexec.c +=================================================================== +--- kexec-tools-1.101.orig/kexec/kexec.c 2005-01-13 14:24:29.000000000 +0100 ++++ kexec-tools-1.101/kexec/kexec.c 2006-02-06 18:28:37.029096976 +0100 +@@ -187,7 +187,7 @@ + } + + /* Compute the free memory ranges */ +- max_mem_ranges = memory_ranges + (info->nr_segments -1); ++ max_mem_ranges = memory_ranges + (info->nr_segments); + mem_range = malloc(max_mem_ranges *sizeof(struct memory_range)); + mem_ranges = 0; + +Index: kexec-tools-1.101/kexec/kexec-syscall.h +=================================================================== +--- kexec-tools-1.101.orig/kexec/kexec-syscall.h 2005-01-06 07:59:50.000000000 +0100 ++++ kexec-tools-1.101/kexec/kexec-syscall.h 2006-02-06 18:28:37.029096976 +0100 +@@ -37,6 +37,9 @@ + #ifdef __x86_64__ + #define __NR_kexec_load 246 + #endif ++#ifdef __arm__ ++#define __NR_kexec_load __NR_SYSCALL_BASE + 347 ++#endif + #ifndef __NR_kexec_load + #error Unknown processor architecture. Needs a kexec_load syscall number. + #endif +@@ -67,6 +70,7 @@ + #define KEXEC_ARCH_PPC (20 << 16) + #define KEXEC_ARCH_PPC64 (21 << 16) + #define KEXEC_ARCH_IA_64 (50 << 16) ++#define KEXEC_ARCH_ARM (40 << 16) + + #define KEXEC_MAX_SEGMENTS 8 + +Index: kexec-tools-1.101/purgatory/arch/arm/include/limits.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kexec-tools-1.101/purgatory/arch/arm/include/limits.h 2006-02-06 18:28:37.031096672 +0100 +@@ -0,0 +1,58 @@ ++#ifndef LIMITS_H ++#define LIMITS_H 1 ++ ++ ++/* Number of bits in a `char' */ ++#define CHAR_BIT 8 ++ ++/* Minimum and maximum values a `signed char' can hold */ ++#define SCHAR_MIN (-128) ++#define SCHAR_MAX 127 ++ ++/* Maximum value an `unsigned char' can hold. (Minimum is 0.) */ ++#define UCHAR_MAX 255 ++ ++/* Minimum and maximum values a `char' can hold */ ++#define CHAR_MIN SCHAR_MIN ++#define CHAR_MAX SCHAR_MAX ++ ++/* Minimum and maximum values a `signed short int' can hold */ ++#define SHRT_MIN (-32768) ++#define SHRT_MAX 32767 ++ ++/* Maximum value an `unsigned short' can hold. (Minimum is 0.) */ ++#define USHRT_MAX 65535 ++ ++ ++/* Minimum and maximum values a `signed int' can hold */ ++#define INT_MIN (-INT_MAX - 1) ++#define INT_MAX 2147483647 ++ ++/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */ ++#define UINT_MAX 4294967295U ++ ++ ++/* Minimum and maximum values a `signed int' can hold */ ++#define INT_MIN (-INT_MAX - 1) ++#define INT_MAX 2147483647 ++ ++/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */ ++#define UINT_MAX 4294967295U ++ ++/* Minimum and maximum values a `signed long' can hold */ ++#define LONG_MAX 2147483647L ++#define LONG_MIN (-LONG_MAX - 1L) ++ ++/* Maximum value an `unsigned long' can hold. (Minimum is 0.) */ ++#define ULONG_MAX 4294967295UL ++ ++/* Minimum and maximum values a `signed long long' can hold */ ++#define LLONG_MAX 9223372036854775807LL ++#define LLONG_MIN (-LONG_MAX - 1LL) ++ ++ ++/* Maximum value an `unsigned long long' can hold. (Minimum is 0.) */ ++#define ULLONG_MAX 18446744073709551615ULL ++ ++ ++#endif /* LIMITS_H */ +Index: kexec-tools-1.101/purgatory/arch/arm/include/stdint.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kexec-tools-1.101/purgatory/arch/arm/include/stdint.h 2006-02-06 18:28:37.031096672 +0100 +@@ -0,0 +1,16 @@ ++#ifndef STDINT_H ++#define STDINT_H ++ ++typedef unsigned long size_t; ++ ++typedef unsigned char uint8_t; ++typedef unsigned short uint16_t; ++typedef unsigned int uint32_t; ++typedef unsigned long long uint64_t; ++ ++typedef signed char int8_t; ++typedef signed short int16_t; ++typedef signed int int32_t; ++typedef signed long long int64_t; ++ ++#endif /* STDINT_H */ +Index: kexec-tools-1.101/purgatory/arch/arm/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ kexec-tools-1.101/purgatory/arch/arm/Makefile 2006-02-06 18:28:37.031096672 +0100 +@@ -0,0 +1,7 @@ ++# ++# Purgatory arm ++# ++ ++PURGATORY_S_SRCS += ++PURGATORY_C_SRCS += ++ +Index: kexec-tools-1.101/configure.ac +=================================================================== +--- kexec-tools-1.101.orig/configure.ac 2005-01-09 02:36:57.000000000 +0100 ++++ kexec-tools-1.101/configure.ac 2006-02-06 18:30:19.274553304 +0100 +@@ -25,12 +25,15 @@ + powerpc ) + host_cpu="ppc" + ;; ++ arm* ) ++ host_cpu="arm" ++ ;; + * ) + host_cpu="$host_cpu" + ;; + esac + case $host_cpu in +- i386|ppc|x86_64|alpha|ppc64|ia64) ++ i386|ppc|x86_64|alpha|ppc64|ia64|arm) + ;; + * ) + AC_MSG_ERROR([ unsupported architecture $host_cpu]) diff --git a/packages/kexec/kexec-tools-1.101/.mtn2git_empty b/packages/kexec/kexec-tools-1.101/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/kexec/kexec-tools-1.101/kexec-arm-atags.patch b/packages/kexec/kexec-tools-1.101/kexec-arm-atags.patch deleted file mode 100644 index bf6f640035..0000000000 --- a/packages/kexec/kexec-tools-1.101/kexec-arm-atags.patch +++ /dev/null @@ -1,294 +0,0 @@ ---- - kexec/arch/arm/kexec-zImage-arm.c | 259 ++++++++++++++++++++++++++++++++++++-- - 1 file changed, 252 insertions(+), 7 deletions(-) - -Index: kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c -=================================================================== ---- kexec-tools-1.101.orig/kexec/arch/arm/kexec-zImage-arm.c 2007-12-26 21:17:07.000000000 +0000 -+++ kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c 2007-12-27 01:24:25.000000000 +0000 -@@ -1,11 +1,83 @@ -+/* -+ * - 08/21/2007 ATAG support added by Uli Luckas -+ * -+ */ - #define _GNU_SOURCE - #include - #include - #include - #include - #include -+#include -+#include -+#include -+#include - #include "../../kexec.h" - -+#define COMMAND_LINE_SIZE 1024 -+#define BOOT_PARAMS_SIZE 1536 -+ -+struct tag_header { -+ uint32_t size; -+ uint32_t tag; -+}; -+ -+/* The list must start with an ATAG_CORE node */ -+#define ATAG_CORE 0x54410001 -+ -+struct tag_core { -+ uint32_t flags; /* bit 0 = read-only */ -+ uint32_t pagesize; -+ uint32_t rootdev; -+}; -+ -+/* it is allowed to have multiple ATAG_MEM nodes */ -+#define ATAG_MEM 0x54410002 -+ -+struct tag_mem32 { -+ uint32_t size; -+ uint32_t start; /* physical start address */ -+}; -+ -+/* describes where the compressed ramdisk image lives (virtual address) */ -+/* -+ * this one accidentally used virtual addresses - as such, -+ * it's deprecated. -+ */ -+#define ATAG_INITRD 0x54410005 -+ -+/* describes where the compressed ramdisk image lives (physical address) */ -+#define ATAG_INITRD2 0x54420005 -+ -+struct tag_initrd { -+ uint32_t start; /* physical start address */ -+ uint32_t size; /* size of compressed ramdisk image in bytes */ -+}; -+ -+/* command line: \0 terminated string */ -+#define ATAG_CMDLINE 0x54410009 -+ -+struct tag_cmdline { -+ char cmdline[1]; /* this is the minimum size */ -+}; -+ -+/* The list ends with an ATAG_NONE node. */ -+#define ATAG_NONE 0x00000000 -+ -+struct tag { -+ struct tag_header hdr; -+ union { -+ struct tag_core core; -+ struct tag_mem32 mem; -+ struct tag_initrd initrd; -+ struct tag_cmdline cmdline; -+ } u; -+}; -+ -+#define tag_next(t) ((struct tag *)((uint32_t *)(t) + (t)->hdr.size)) -+#define byte_size(t) ((t)->hdr.size << 2) -+#define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type) + 3) >> 2) -+ - int zImage_arm_probe(const char *buf, off_t len) - { - /* -@@ -14,21 +86,194 @@ int zImage_arm_probe(const char *buf, of - */ - return 0; - } -+ - void zImage_arm_usage(void) - { -+ printf( " --command-line=STRING Set the kernel command line to STRING.\n" -+ " --append=STRING Set the kernel command line to STRING.\n" -+ " --initrd=FILE Use FILE as the kernel's initial ramdisk.\n" -+ " --ramdisk=FILE Use FILE as the kernel's initial ramdisk.\n" -+ ); - } --int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, -+ -+static -+struct tag * atag_read_tags(void) -+{ -+ static unsigned long buf[BOOT_PARAMS_SIZE]; -+ const char fn[]= "/proc/atags"; -+ FILE *fp; -+ fp = fopen(fn, "r"); -+ if (!fp) { -+ fprintf(stderr, "Cannot open %s: %s\n", -+ fn, strerror(errno)); -+ return NULL; -+ } -+ -+ fread(buf, sizeof(buf[1]), BOOT_PARAMS_SIZE, fp); -+ if (ferror(fp)) { -+ fprintf(stderr, "Cannot read %s: %s\n", -+ fn, strerror(errno)); -+ fclose(fp); -+ return NULL; -+ } -+ -+ fclose(fp); -+ return (struct tag *) buf; -+} -+ -+ -+static -+int atag_arm_load(struct kexec_info *info, unsigned long base, -+ const char *command_line, off_t command_line_len, -+ const char *initrd, off_t initrd_len) -+{ -+ struct tag *saved_tags = atag_read_tags(); -+ char *buf; -+ off_t len; -+ struct tag *params; -+ uint32_t *initrd_start; -+ -+ buf = xmalloc(getpagesize()); -+ if (!buf) { -+ fprintf(stderr, "Compiling ATAGs: out of memory\n"); -+ return -1; -+ } -+ -+ memset(buf, 0xff, getpagesize()); -+ params = (struct tag *)buf; -+ -+ if (saved_tags) { -+ // Copy tags -+ saved_tags = (struct tag *) saved_tags; -+ while(byte_size(saved_tags)) { -+ switch (saved_tags->hdr.tag) { -+ case ATAG_INITRD: -+ case ATAG_INITRD2: -+ case ATAG_CMDLINE: -+ case ATAG_NONE: -+ // skip these tags -+ break; -+ default: -+ // copy all other tags -+ memcpy(params, saved_tags, byte_size(saved_tags)); -+ params = tag_next(params); -+ } -+ saved_tags = tag_next(saved_tags); -+ } -+ } else { -+ params->hdr.size = 2; -+ params->hdr.tag = ATAG_CORE; -+ params = tag_next(params); -+ } -+ -+ if (initrd) { -+ params->hdr.size = tag_size(tag_initrd); -+ params->hdr.tag = ATAG_INITRD2; -+ initrd_start = ¶ms->u.initrd.start; -+ params->u.initrd.size = initrd_len; -+ params = tag_next(params); -+ } -+ -+ if (command_line) { -+ params->hdr.size = (sizeof(struct tag_header) + command_line_len + 3) >> 2; -+ params->hdr.tag = ATAG_CMDLINE; -+ memcpy(params->u.cmdline.cmdline, command_line, -+ command_line_len); -+ params->u.cmdline.cmdline[command_line_len - 1] = '\0'; -+ params = tag_next(params); -+ } -+ -+ params->hdr.size = 0; -+ params->hdr.tag = ATAG_NONE; -+ -+ len = ((char *)params - buf) + sizeof(struct tag_header); -+ -+ add_segment(info, buf, len, base, len); -+ -+ if (initrd) { -+ struct memory_range *range; -+ int ranges; -+ get_memory_ranges(&range, &ranges); -+ *initrd_start = locate_hole(info, initrd_len, getpagesize(), range[0].start + 0x800000, ULONG_MAX, INT_MAX); -+ if (*initrd_start == ULONG_MAX) -+ return -1; -+ add_segment(info, initrd, initrd_len, *initrd_start, initrd_len); -+ } -+ -+ return 0; -+} -+ -+int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, - struct kexec_info *info) - { - unsigned long base; -- unsigned int offset = 0x8000; /* 32k offset from memory start */ -+ unsigned int atag_offset = 0x1000; /* 4k offset from memory start */ -+ unsigned int offset = 0x8000; /* 32k offset from memory start */ -+ const char *command_line; -+ off_t command_line_len; -+ const char *ramdisk; -+ char *ramdisk_buf; -+ off_t ramdisk_length; -+ int opt; -+#define OPT_APPEND 'a' -+#define OPT_RAMDISK 'r' -+ static const struct option options[] = { -+ KEXEC_ARCH_OPTIONS -+ { "command-line", 1, 0, OPT_APPEND }, -+ { "append", 1, 0, OPT_APPEND }, -+ { "initrd", 1, 0, OPT_RAMDISK }, -+ { "ramdisk", 1, 0, OPT_RAMDISK }, -+ { 0, 0, 0, 0 }, -+ }; -+ static const char short_options[] = KEXEC_ARCH_OPT_STR "a:r:"; -+ -+ /* -+ * Parse the command line arguments -+ */ -+ command_line = 0; -+ command_line_len = 0; -+ ramdisk = 0; -+ ramdisk_buf = 0; -+ ramdisk_length = 0; -+ while((opt = getopt_long(argc, argv, short_options, options, 0)) != -1) { -+ switch(opt) { -+ default: -+ /* Ignore core options */ -+ if (opt < OPT_ARCH_MAX) { -+ break; -+ } -+ case '?': -+ usage(); -+ return -1; -+ case OPT_APPEND: -+ command_line = optarg; -+ break; -+ case OPT_RAMDISK: -+ ramdisk = optarg; -+ break; -+ } -+ } -+ if (command_line) { -+ command_line_len = strlen(command_line) + 1; -+ if (command_line_len > COMMAND_LINE_SIZE) -+ command_line_len = COMMAND_LINE_SIZE; -+ } -+ if (ramdisk) { -+ ramdisk_buf = slurp_file(ramdisk, &ramdisk_length); -+ } -+ - base = locate_hole(info,len+offset,0,0,ULONG_MAX,INT_MAX); - if (base == ULONG_MAX) -- { - return -1; -- } -- base += offset; -- add_segment(info,buf,len,base,len); -- info->entry = (void*)base; -+ -+ if (atag_arm_load(info, base + atag_offset, -+ command_line, command_line_len, -+ ramdisk_buf, ramdisk_length) == -1) -+ return -1; -+ -+ add_segment(info, buf, len, base + offset, len); -+ -+ info->entry = (void*)base + offset; -+ - return 0; - } diff --git a/packages/kexec/kexec-tools-1.101/kexec-tools-arm.patch b/packages/kexec/kexec-tools-1.101/kexec-tools-arm.patch deleted file mode 100644 index 6e43b76096..0000000000 --- a/packages/kexec/kexec-tools-1.101/kexec-tools-arm.patch +++ /dev/null @@ -1,417 +0,0 @@ -Index: kexec-tools-1.101/kexec/arch/arm/include/arch/options.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ kexec-tools-1.101/kexec/arch/arm/include/arch/options.h 2006-02-06 18:28:37.027097280 +0100 -@@ -0,0 +1,11 @@ -+#ifndef KEXEC_ARCH_ARM_OPTIONS_H -+#define KEXEC_ARCH_ARM_OPTIONS_H -+ -+#define OPT_ARCH_MAX (OPT_MAX+0) -+ -+#define KEXEC_ARCH_OPTIONS \ -+ KEXEC_OPTIONS \ -+ -+#define KEXEC_ARCH_OPT_STR KEXEC_OPT_STR "" -+ -+#endif /* KEXEC_ARCH_ARM_OPTIONS_H */ -Index: kexec-tools-1.101/kexec/arch/arm/kexec-arm.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ kexec-tools-1.101/kexec/arch/arm/kexec-arm.c 2006-02-06 18:28:37.027097280 +0100 -@@ -0,0 +1,138 @@ -+/* -+ * kexec: Linux boots Linux -+ * -+ * modified from kexec-ppc.c -+ * -+ */ -+ -+#define _GNU_SOURCE -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "../../kexec.h" -+#include "../../kexec-syscall.h" -+#include "kexec-arm.h" -+#include -+ -+#define MAX_MEMORY_RANGES 64 -+#define MAX_LINE 160 -+static struct memory_range memory_range[MAX_MEMORY_RANGES]; -+ -+/* Return a sorted list of available memory ranges. */ -+int get_memory_ranges(struct memory_range **range, int *ranges) -+{ -+ const char iomem[]= "/proc/iomem"; -+ int memory_ranges = 0; -+ char line[MAX_LINE]; -+ FILE *fp; -+ fp = fopen(iomem, "r"); -+ if (!fp) { -+ fprintf(stderr, "Cannot open %s: %s\n", -+ iomem, strerror(errno)); -+ return -1; -+ } -+ -+ while(fgets(line, sizeof(line), fp) != 0) { -+ unsigned long long start, end; -+ char *str; -+ int type; -+ int consumed; -+ int count; -+ if (memory_ranges >= MAX_MEMORY_RANGES) -+ break; -+ count = sscanf(line, "%Lx-%Lx : %n", -+ &start, &end, &consumed); -+ if (count != 2) -+ continue; -+ str = line + consumed; -+ end = end + 1; -+ -+ if (memcmp(str, "System RAM\n", 11) == 0) { -+ type = RANGE_RAM; -+ } -+ else if (memcmp(str, "reserved\n", 9) == 0) { -+ type = RANGE_RESERVED; -+ } -+ else { -+ continue; -+ } -+ -+ memory_range[memory_ranges].start = start; -+ memory_range[memory_ranges].end = end; -+ memory_range[memory_ranges].type = type; -+ memory_ranges++; -+ } -+ fclose(fp); -+ *range = memory_range; -+ *ranges = memory_ranges; -+ return 0; -+} -+ -+/* Supported file types and callbacks */ -+struct file_type file_type[] = { -+ {"zImage", zImage_arm_probe, zImage_arm_load, zImage_arm_usage}, -+}; -+int file_types = sizeof(file_type) / sizeof(file_type[0]); -+ -+ -+void arch_usage(void) -+{ -+} -+ -+static struct { -+} arch_options = { -+}; -+int arch_process_options(int argc, char **argv) -+{ -+ static const struct option options[] = { -+ KEXEC_ARCH_OPTIONS -+ { 0, 0, NULL, 0 }, -+ }; -+ static const char short_options[] = KEXEC_ARCH_OPT_STR; -+ int opt; -+ unsigned long value; -+ char *end; -+ -+ opterr = 0; /* Don't complain about unrecognized options here */ -+ while((opt = getopt_long(argc, argv, short_options, options, 0)) != -1) { -+ switch(opt) { -+ default: -+ break; -+ } -+ } -+ /* Reset getopt for the next pass; called in other source modules */ -+ opterr = 1; -+ optind = 1; -+ return 0; -+} -+ -+int arch_compat_trampoline(struct kexec_info *info, unsigned long *flags) -+{ -+ int result; -+ struct utsname utsname; -+ result = uname(&utsname); -+ if (result < 0) { -+ fprintf(stderr, "uname failed: %s\n", -+ strerror(errno)); -+ return -1; -+ } -+ if (strncmp(utsname.machine, "arm",3) == 0) -+ { -+ *flags |= KEXEC_ARCH_ARM; -+ } -+ else { -+ fprintf(stderr, "Unsupported machine type: %s\n", -+ utsname.machine); -+ return -1; -+ } -+ return 0; -+} -+ -+void arch_update_purgatory(struct kexec_info *info) -+{ -+} -+ -Index: kexec-tools-1.101/kexec/arch/arm/kexec-arm.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ kexec-tools-1.101/kexec/arch/arm/kexec-arm.h 2006-02-06 18:28:37.028097128 +0100 -@@ -0,0 +1,9 @@ -+#ifndef KEXEC_ARM_H -+#define KEXEC_ARM_H -+ -+int zImage_arm_probe(const char *buf, off_t len); -+int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, -+ struct kexec_info *info); -+void zImage_arm_usage(void); -+ -+#endif /* KEXEC_ARM_H */ -Index: kexec-tools-1.101/kexec/arch/arm/kexec-elf-rel-arm.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ kexec-tools-1.101/kexec/arch/arm/kexec-elf-rel-arm.c 2006-02-06 18:28:37.028097128 +0100 -@@ -0,0 +1,35 @@ -+#include -+#include -+#include "../../kexec.h" -+#include "../../kexec-elf.h" -+ -+int machine_verify_elf_rel(struct mem_ehdr *ehdr) -+{ -+ if (ehdr->ei_data != ELFDATA2MSB) { -+ return 0; -+ } -+ if (ehdr->ei_class != ELFCLASS32) { -+ return 0; -+ } -+ if (ehdr->e_machine != EM_ARM) -+ { -+ return 0; -+ } -+ return 1; -+} -+ -+void machine_apply_elf_rel(struct mem_ehdr *ehdr, unsigned long r_type, -+ void *location, unsigned long address, unsigned long value) -+{ -+ switch(r_type) { -+ case R_ARM_ABS32: -+ *((uint32_t *)location) += value; -+ break; -+ case R_ARM_REL32: -+ *((uint32_t *)location) += value - address; -+ break; -+ default: -+ die("Unknown rel relocation: %lu\n", r_type); -+ break; -+ } -+} -Index: kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c 2006-02-06 18:28:37.028097128 +0100 -@@ -0,0 +1,34 @@ -+#define _GNU_SOURCE -+#include -+#include -+#include -+#include -+#include -+#include "../../kexec.h" -+ -+int zImage_arm_probe(const char *buf, off_t len) -+{ -+ /* -+ * Only zImage loading is supported. Do not check if -+ * the buffer is valid kernel image -+ */ -+ return 0; -+} -+void zImage_arm_usage(void) -+{ -+} -+int zImage_arm_load(int argc, char **argv, const char *buf, off_t len, -+ struct kexec_info *info) -+{ -+ unsigned long base; -+ unsigned int offset = 0x8000; /* 32k offset from memory start */ -+ base = locate_hole(info,len+offset,0,0,ULONG_MAX,INT_MAX); -+ if (base == ULONG_MAX) -+ { -+ return -1; -+ } -+ base += offset; -+ add_segment(info,buf,len,base,len); -+ info->entry = (void*)base; -+ return 0; -+} -Index: kexec-tools-1.101/kexec/arch/arm/Makefile -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ kexec-tools-1.101/kexec/arch/arm/Makefile 2006-02-06 18:28:37.028097128 +0100 -@@ -0,0 +1,8 @@ -+# -+# kexec arm (linux booting linux) -+# -+KEXEC_C_SRCS+= kexec/arch/arm/kexec-elf-rel-arm.c -+KEXEC_C_SRCS+= kexec/arch/arm/kexec-zImage-arm.c -+KEXEC_C_SRCS+= kexec/arch/arm/kexec-arm.c -+ -+KEXEC_S_SRCS+= -Index: kexec-tools-1.101/kexec/kexec.c -=================================================================== ---- kexec-tools-1.101.orig/kexec/kexec.c 2005-01-13 14:24:29.000000000 +0100 -+++ kexec-tools-1.101/kexec/kexec.c 2006-02-06 18:28:37.029096976 +0100 -@@ -187,7 +187,7 @@ - } - - /* Compute the free memory ranges */ -- max_mem_ranges = memory_ranges + (info->nr_segments -1); -+ max_mem_ranges = memory_ranges + (info->nr_segments); - mem_range = malloc(max_mem_ranges *sizeof(struct memory_range)); - mem_ranges = 0; - -Index: kexec-tools-1.101/kexec/kexec-syscall.h -=================================================================== ---- kexec-tools-1.101.orig/kexec/kexec-syscall.h 2005-01-06 07:59:50.000000000 +0100 -+++ kexec-tools-1.101/kexec/kexec-syscall.h 2006-02-06 18:28:37.029096976 +0100 -@@ -37,6 +37,9 @@ - #ifdef __x86_64__ - #define __NR_kexec_load 246 - #endif -+#ifdef __arm__ -+#define __NR_kexec_load __NR_SYSCALL_BASE + 347 -+#endif - #ifndef __NR_kexec_load - #error Unknown processor architecture. Needs a kexec_load syscall number. - #endif -@@ -67,6 +70,7 @@ - #define KEXEC_ARCH_PPC (20 << 16) - #define KEXEC_ARCH_PPC64 (21 << 16) - #define KEXEC_ARCH_IA_64 (50 << 16) -+#define KEXEC_ARCH_ARM (40 << 16) - - #define KEXEC_MAX_SEGMENTS 8 - -Index: kexec-tools-1.101/purgatory/arch/arm/include/limits.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ kexec-tools-1.101/purgatory/arch/arm/include/limits.h 2006-02-06 18:28:37.031096672 +0100 -@@ -0,0 +1,58 @@ -+#ifndef LIMITS_H -+#define LIMITS_H 1 -+ -+ -+/* Number of bits in a `char' */ -+#define CHAR_BIT 8 -+ -+/* Minimum and maximum values a `signed char' can hold */ -+#define SCHAR_MIN (-128) -+#define SCHAR_MAX 127 -+ -+/* Maximum value an `unsigned char' can hold. (Minimum is 0.) */ -+#define UCHAR_MAX 255 -+ -+/* Minimum and maximum values a `char' can hold */ -+#define CHAR_MIN SCHAR_MIN -+#define CHAR_MAX SCHAR_MAX -+ -+/* Minimum and maximum values a `signed short int' can hold */ -+#define SHRT_MIN (-32768) -+#define SHRT_MAX 32767 -+ -+/* Maximum value an `unsigned short' can hold. (Minimum is 0.) */ -+#define USHRT_MAX 65535 -+ -+ -+/* Minimum and maximum values a `signed int' can hold */ -+#define INT_MIN (-INT_MAX - 1) -+#define INT_MAX 2147483647 -+ -+/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */ -+#define UINT_MAX 4294967295U -+ -+ -+/* Minimum and maximum values a `signed int' can hold */ -+#define INT_MIN (-INT_MAX - 1) -+#define INT_MAX 2147483647 -+ -+/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */ -+#define UINT_MAX 4294967295U -+ -+/* Minimum and maximum values a `signed long' can hold */ -+#define LONG_MAX 2147483647L -+#define LONG_MIN (-LONG_MAX - 1L) -+ -+/* Maximum value an `unsigned long' can hold. (Minimum is 0.) */ -+#define ULONG_MAX 4294967295UL -+ -+/* Minimum and maximum values a `signed long long' can hold */ -+#define LLONG_MAX 9223372036854775807LL -+#define LLONG_MIN (-LONG_MAX - 1LL) -+ -+ -+/* Maximum value an `unsigned long long' can hold. (Minimum is 0.) */ -+#define ULLONG_MAX 18446744073709551615ULL -+ -+ -+#endif /* LIMITS_H */ -Index: kexec-tools-1.101/purgatory/arch/arm/include/stdint.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ kexec-tools-1.101/purgatory/arch/arm/include/stdint.h 2006-02-06 18:28:37.031096672 +0100 -@@ -0,0 +1,16 @@ -+#ifndef STDINT_H -+#define STDINT_H -+ -+typedef unsigned long size_t; -+ -+typedef unsigned char uint8_t; -+typedef unsigned short uint16_t; -+typedef unsigned int uint32_t; -+typedef unsigned long long uint64_t; -+ -+typedef signed char int8_t; -+typedef signed short int16_t; -+typedef signed int int32_t; -+typedef signed long long int64_t; -+ -+#endif /* STDINT_H */ -Index: kexec-tools-1.101/purgatory/arch/arm/Makefile -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ kexec-tools-1.101/purgatory/arch/arm/Makefile 2006-02-06 18:28:37.031096672 +0100 -@@ -0,0 +1,7 @@ -+# -+# Purgatory arm -+# -+ -+PURGATORY_S_SRCS += -+PURGATORY_C_SRCS += -+ -Index: kexec-tools-1.101/configure.ac -=================================================================== ---- kexec-tools-1.101.orig/configure.ac 2005-01-09 02:36:57.000000000 +0100 -+++ kexec-tools-1.101/configure.ac 2006-02-06 18:30:19.274553304 +0100 -@@ -25,12 +25,15 @@ - powerpc ) - host_cpu="ppc" - ;; -+ arm* ) -+ host_cpu="arm" -+ ;; - * ) - host_cpu="$host_cpu" - ;; - esac - case $host_cpu in -- i386|ppc|x86_64|alpha|ppc64|ia64) -+ i386|ppc|x86_64|alpha|ppc64|ia64|arm) - ;; - * ) - AC_MSG_ERROR([ unsupported architecture $host_cpu]) diff --git a/packages/kexec/kexec-tools-static_1.101.bb b/packages/kexec/kexec-tools-static_1.101.bb new file mode 100644 index 0000000000..ca23917a11 --- /dev/null +++ b/packages/kexec/kexec-tools-static_1.101.bb @@ -0,0 +1,12 @@ +require kexec-tools.inc + +PR = "r0" + +SRC_URI += "file://kexec-static.patch;patch=1" +S = "${WORKDIR}/kexec-tools-${PV}" + +PACKAGES =+ "kexec-static kdump-static" + +FILES_kexec-static = "${sbindir}/kexec" +FILES_kdump-static = "${sbindir}/kdump" + -- cgit v1.2.3 From 58946634dcccaee49525b9bdaf9b9585c0b31a08 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 6 Feb 2008 01:28:36 +0000 Subject: klibc: move do_stage to separate inc file. Fixes do_stage failure for klibc-utils-static. --- packages/klibc/klibc-common.inc | 62 ++++++++++++++++++++++++ packages/klibc/klibc-utils-static_1.5.bb | 2 +- packages/klibc/klibc.inc | 83 +++++--------------------------- 3 files changed, 74 insertions(+), 73 deletions(-) create mode 100644 packages/klibc/klibc-common.inc diff --git a/packages/klibc/klibc-common.inc b/packages/klibc/klibc-common.inc new file mode 100644 index 0000000000..146968eaf0 --- /dev/null +++ b/packages/klibc/klibc-common.inc @@ -0,0 +1,62 @@ +DEPENDS = "virtual/kernel perl-native" +SECTION = "libs" +DESCRIPTION = "klibc is intended to be a minimalistic libc subset for \ +use with initramfs. It is deliberately written for small size, \ +minimal entaglement, and portability, not speed." +LICENSE = "BSD-ADV" +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/Stable/klibc-${PV}.tar.bz2" +SRC_URI += "file://install.patch;patch=1" +S = "${WORKDIR}/klibc-${PV}" +PACKAGE_ARCH = "${MACHINE_ARCH}" + +# for the correct kernel staging path +# inherit module-base + +EXTRA_OEMAKE = "'ARCH=${KLIBC_ARCH}' \ + 'CROSS=${TARGET_PREFIX}' \ + 'CC=${HOST_PREFIX}gcc' \ + 'LD=${HOST_PREFIX}ld' \ + 'AR=${AR}' \ + 'RANLIB=${RANLIB}' \ + 'NM=${TARGET_PREFIX}nm' \ + 'STRIP=echo' \ + 'SHLIBDIR=/lib' \ + 'HOST_CC=${BUILD_CC}' \ + 'HOST_CFLAGS=${BUILD_CFLAGS}' \ + 'HOST_LDFLAGS=${BUILD_LDFLAGS}' \ + 'HOST_LIBS=' \ + 'LDFLAGS=' \ + 'ARCHREQFLAGS=${HOST_CC_ARCH}' \ + 'OPTFLAGS=${TARGET_CFLAGS}' \ + 'mandir=${mandir}'" + +KLIBC_ARCH = '${TARGET_ARCH}' +KLIBC_ARCH_armeb = 'arm' +KLIBC_ARCH_mipsel = 'mips' + +# the klibc code contains ARM instructions (for ARM), this +# could be fixed, but for the moment: +ARM_INSTRUCTION_SET = "arm" + +TARGET_CFLAGS := "${@oe_filter_out('-I\S+', '${TARGET_CFLAGS}', d)} -I${STAGING_KERNEL_DIR}/include" + +INSTALLDIR = "/usr/lib/klibc" +INSTALLPREFIX = "${INSTALLDIR}/${TARGET_PREFIX}" +INSTALLBINDIR = "${INSTALLPREFIX}bin" +INSTALLLIBDIR = "${INSTALLPREFIX}lib" +INSTALLINCDIR = "${INSTALLPREFIX}include" + +PACKAGES = "${PN}-dbg ${PN} ${PN}-dev ${PN}-doc" + +FILES_${PN} = "/lib/*.so* ${INSTALLBINDIR}" +FILES_${PN}-dev = "/usr/bin ${INSTALLINCDIR} ${INSTALLLIBDIR}" + +do_configure () { + ln -sf ${STAGING_KERNEL_DIR} linux +} + +do_install() { + # The installed -dev won't work because it has the cross compiler + # path compiled in. + oe_runmake 'INSTALLROOT=${D}' install +} diff --git a/packages/klibc/klibc-utils-static_1.5.bb b/packages/klibc/klibc-utils-static_1.5.bb index 4349b8d4f0..17db23305d 100644 --- a/packages/klibc/klibc-utils-static_1.5.bb +++ b/packages/klibc/klibc-utils-static_1.5.bb @@ -1,4 +1,4 @@ -require klibc.inc +require klibc-common.inc PR = "r3" diff --git a/packages/klibc/klibc.inc b/packages/klibc/klibc.inc index 539e2fbf84..efaf298e36 100644 --- a/packages/klibc/klibc.inc +++ b/packages/klibc/klibc.inc @@ -1,78 +1,17 @@ -DEPENDS = "virtual/kernel perl-native" -SECTION = "libs" -DESCRIPTION = "klibc is intended to be a minimalistic libc subset for \ -use with initramfs. It is deliberately written for small size, \ -minimal entaglement, and portability, not speed." -LICENSE = "BSD-ADV" -SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/Stable/klibc-${PV}.tar.bz2" -SRC_URI += "file://install.patch;patch=1" -S = "${WORKDIR}/klibc-${PV}" -PACKAGE_ARCH = "${MACHINE_ARCH}" - -# for the correct kernel staging path -# inherit module-base - -EXTRA_OEMAKE = "'ARCH=${KLIBC_ARCH}' \ - 'CROSS=${TARGET_PREFIX}' \ - 'CC=${HOST_PREFIX}gcc' \ - 'LD=${HOST_PREFIX}ld' \ - 'AR=${AR}' \ - 'RANLIB=${RANLIB}' \ - 'NM=${TARGET_PREFIX}nm' \ - 'STRIP=echo' \ - 'SHLIBDIR=/lib' \ - 'HOST_CC=${BUILD_CC}' \ - 'HOST_CFLAGS=${BUILD_CFLAGS}' \ - 'HOST_LDFLAGS=${BUILD_LDFLAGS}' \ - 'HOST_LIBS=' \ - 'LDFLAGS=' \ - 'ARCHREQFLAGS=${HOST_CC_ARCH}' \ - 'OPTFLAGS=${TARGET_CFLAGS}' \ - 'mandir=${mandir}'" - -KLIBC_ARCH = '${TARGET_ARCH}' -KLIBC_ARCH_armeb = 'arm' -KLIBC_ARCH_mipsel = 'mips' - -# the klibc code contains ARM instructions (for ARM), this -# could be fixed, but for the moment: -ARM_INSTRUCTION_SET = "arm" - -TARGET_CFLAGS := "${@oe_filter_out('-I\S+', '${TARGET_CFLAGS}', d)} -I${STAGING_KERNEL_DIR}/include" - -INSTALLDIR = "/usr/lib/klibc" -INSTALLPREFIX = "${INSTALLDIR}/${TARGET_PREFIX}" -INSTALLBINDIR = "${INSTALLPREFIX}bin" -INSTALLLIBDIR = "${INSTALLPREFIX}lib" -INSTALLINCDIR = "${INSTALLPREFIX}include" - -PACKAGES = "${PN}-dbg ${PN} ${PN}-dev ${PN}-doc" - -FILES_${PN} = "/lib/*.so* ${INSTALLBINDIR}" -FILES_${PN}-dev = "/usr/bin ${INSTALLINCDIR} ${INSTALLLIBDIR}" - -do_configure () { - ln -sf ${STAGING_KERNEL_DIR} linux -} +require klibc-common.inc STAGING_KLIBC_DIR = "${STAGING_DIR_HOST}/klibc" do_stage() { - rm -rf "${STAGING_KLIBC_DIR}" - oe_runmake 'prefix=${STAGING_KLIBC_DIR}' \ - 'bindir=${STAGING_BINDIR}' \ - 'mandir=${STAGING_DIR_HOST}${layout_mandir}' \ - install - # The following is sufficient, at least in klibc 1.1.1 to make klcc - # use the staged libraries and include files. - sed -i -e 's@^\$prefix = .*$@\$prefix = "${STAGING_KLIBC_DIR}/lib/klibc";@' \ - '${STAGING_BINDIR}/${TARGET_PREFIX}klcc' + rm -rf "${STAGING_KLIBC_DIR}" + oe_runmake 'prefix=${STAGING_KLIBC_DIR}' \ + 'bindir=${STAGING_BINDIR}' \ + 'mandir=${STAGING_DIR_HOST}${layout_mandir}' \ + install + # The following is sufficient, at least in klibc 1.1.1 to make klcc + # use the staged libraries and include files. + sed -i -e 's@^\$prefix = .*$@\$prefix = "${STAGING_KLIBC_DIR}/lib/klibc";@' \ + '${STAGING_BINDIR}/${TARGET_PREFIX}klcc' # Perhaps other binaries need to be moved to cross? - mv '${STAGING_BINDIR}/${TARGET_PREFIX}klcc' '${STAGING_BINDIR_CROSS}' -} - -do_install() { - # The installed -dev won't work because it has the cross compiler - # path compiled in. - oe_runmake 'INSTALLROOT=${D}' install + mv '${STAGING_BINDIR}/${TARGET_PREFIX}klcc' '${STAGING_BINDIR_CROSS}' } -- cgit v1.2.3 From 8fbb53e4490a225121970b0df34c969eb9bcf334 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 6 Feb 2008 02:23:05 +0000 Subject: moc: apply patch from 1152 and update to latest version. --- packages/moc/moc_2.4.0.bb | 12 ------------ packages/moc/moc_2.4.3.bb | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 12 deletions(-) delete mode 100644 packages/moc/moc_2.4.0.bb create mode 100644 packages/moc/moc_2.4.3.bb diff --git a/packages/moc/moc_2.4.0.bb b/packages/moc/moc_2.4.0.bb deleted file mode 100644 index 4c77655fc7..0000000000 --- a/packages/moc/moc_2.4.0.bb +++ /dev/null @@ -1,12 +0,0 @@ -DESCRIPTION = "MOC is a ncurses based music player" -SECTION = "console/multimedia" -DEPENDS = "ncurses" -LICENSE = "GPL" -AUTHOR = "Damian Pietras " -HOMEPAGE = "http://moc.daper.net/" - -SRC_URI = "ftp://ftp.daper.net/pub/soft/moc/stable/${PN}-${PV}.tar.bz2" - -inherit autotools - -FILES_${PN} = "${bindir}/moc" diff --git a/packages/moc/moc_2.4.3.bb b/packages/moc/moc_2.4.3.bb new file mode 100644 index 0000000000..5d63df0fea --- /dev/null +++ b/packages/moc/moc_2.4.3.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "MOC is a ncurses based music player" +AUTHOR = "Damian Pietras " +HOMEPAGE = "http://moc.daper.net/" +SECTION = "console/multimedia" +LICENSE = "GPL" +DEPENDS = "ncurses flac" + +SRC_URI = "ftp://ftp.daper.net/pub/soft/moc/stable/${PN}-${PV}.tar.bz2" + +inherit autotools + +EXTRA_OECONF = "--without-flac" + +FILES_${PN}-dbg += "${libdir}/moc/decoder_plugins/.debug" -- cgit v1.2.3 From 25c1a31393902b3b6dedcaeed2a7cdaa879f0dd4 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 6 Feb 2008 02:57:47 +0000 Subject: unionfs: make SRC_URI fetchable again. prepare for upgrade. --- packages/unionfs/unionfs-modules_1.0.11.bb | 2 ++ packages/unionfs/unionfs.inc | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/unionfs/unionfs-modules_1.0.11.bb b/packages/unionfs/unionfs-modules_1.0.11.bb index a6920de009..c9ca1d130d 100644 --- a/packages/unionfs/unionfs-modules_1.0.11.bb +++ b/packages/unionfs/unionfs-modules_1.0.11.bb @@ -1,2 +1,4 @@ require unionfs-modules.inc require unionfs.inc + +SRC_URI += "file://make.patch;patch=1" diff --git a/packages/unionfs/unionfs.inc b/packages/unionfs/unionfs.inc index 4035937740..e336fd3e07 100644 --- a/packages/unionfs/unionfs.inc +++ b/packages/unionfs/unionfs.inc @@ -4,8 +4,7 @@ physical content separate." HOMEPAGE = "http://www.fsl.cs.sunysb.edu/project-unionfs.html" LICENSE = "GPL" -SRC_URI = "ftp://ftp.fsl.cs.sunysb.edu/pub/unionfs/unionfs-1.x/unionfs-${PV}.tar.gz \ - file://make.patch;patch=1" +SRC_URI = "ftp://ftp.fsl.cs.sunysb.edu/pub/unionfs/OLD/unionfs-1.x/unionfs-${PV}.tar.gz" S = "${WORKDIR}/unionfs-${PV}" FILESPATH = "${FILE_DIRNAME}/unionfs-${PV}:${FILE_DIRNAME}/unionfs:${FILE_DIRNAME}/files:${FILE_DIRNAME}" -- cgit v1.2.3 From 352bc73599e425ad1ab787056ad709e9e9c339a4 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 6 Feb 2008 03:17:49 +0000 Subject: claws-mail: update to latest stable 3.2.0. Closes 3700. --- packages/sylpheed/claws-mail_3.0.2.bb | 43 ----------------------------------- packages/sylpheed/claws-mail_3.2.0.bb | 43 +++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 43 deletions(-) delete mode 100644 packages/sylpheed/claws-mail_3.0.2.bb create mode 100644 packages/sylpheed/claws-mail_3.2.0.bb diff --git a/packages/sylpheed/claws-mail_3.0.2.bb b/packages/sylpheed/claws-mail_3.0.2.bb deleted file mode 100644 index 29e7a5bc63..0000000000 --- a/packages/sylpheed/claws-mail_3.0.2.bb +++ /dev/null @@ -1,43 +0,0 @@ -SECTION = "x11/network" -DESCRIPTION = "Mail user agent" -DEPENDS = "gtk+ libetpan openssl aspell" -LICENSE = "GPL" -PR = "r0" - -SRC_URI = "\ - ${SOURCEFORGE_MIRROR}/sylpheed-claws/claws-mail-${PV}.tar.bz2 \ - file://desktop.patch;patch=1 \ - " - -FILES_${PN} = "${bindir} ${datadir}/pixmaps ${datadir}/applications" - -EXTRA_OECONF = "--disable-aspell-test \ - --enable--aspell \ - --disable-manual \ - --disable-crash-dialog \ - --disable-jpilot \ - --disable-trayicon-plugin \ - --disable-spamassassin-plugin \ - --disable-bogofilter-plugin \ - --disable-pgpcore-plugin \ - --disable-pgpmime-plugin \ - --disable-pgpinline-plugin \ - --disable-dillo-viewer-plugin \ - --disable-clamav-plugin \ - --disable-gnomeprint \ - --disable-valgrind \ - " - -inherit autotools pkgconfig - -do_install_append() { - install -d ${D}${datadir}/applications - install -m 0644 claws-mail.desktop ${D}${datadir}/applications/ - install -d ${D}${datadir}/pixmaps - install -m 0644 claws-mail.png ${D}${datadir}/pixmaps/ -} - -do_stage () { - autotools_stage_all -} - diff --git a/packages/sylpheed/claws-mail_3.2.0.bb b/packages/sylpheed/claws-mail_3.2.0.bb new file mode 100644 index 0000000000..29e7a5bc63 --- /dev/null +++ b/packages/sylpheed/claws-mail_3.2.0.bb @@ -0,0 +1,43 @@ +SECTION = "x11/network" +DESCRIPTION = "Mail user agent" +DEPENDS = "gtk+ libetpan openssl aspell" +LICENSE = "GPL" +PR = "r0" + +SRC_URI = "\ + ${SOURCEFORGE_MIRROR}/sylpheed-claws/claws-mail-${PV}.tar.bz2 \ + file://desktop.patch;patch=1 \ + " + +FILES_${PN} = "${bindir} ${datadir}/pixmaps ${datadir}/applications" + +EXTRA_OECONF = "--disable-aspell-test \ + --enable--aspell \ + --disable-manual \ + --disable-crash-dialog \ + --disable-jpilot \ + --disable-trayicon-plugin \ + --disable-spamassassin-plugin \ + --disable-bogofilter-plugin \ + --disable-pgpcore-plugin \ + --disable-pgpmime-plugin \ + --disable-pgpinline-plugin \ + --disable-dillo-viewer-plugin \ + --disable-clamav-plugin \ + --disable-gnomeprint \ + --disable-valgrind \ + " + +inherit autotools pkgconfig + +do_install_append() { + install -d ${D}${datadir}/applications + install -m 0644 claws-mail.desktop ${D}${datadir}/applications/ + install -d ${D}${datadir}/pixmaps + install -m 0644 claws-mail.png ${D}${datadir}/pixmaps/ +} + +do_stage () { + autotools_stage_all +} + -- cgit v1.2.3 From be0d698ad4af28a1376a9227666ab2ff583a202d Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 6 Feb 2008 03:28:09 +0000 Subject: htop: initial commit for version 0.7. Closes 2846. --- packages/htop/.mtn2git_empty | 0 packages/htop/files/.mtn2git_empty | 0 packages/htop/files/remove-proc-test.patch | 13 +++++++++++++ packages/htop/htop_0.7.bb | 12 ++++++++++++ 4 files changed, 25 insertions(+) create mode 100644 packages/htop/.mtn2git_empty create mode 100644 packages/htop/files/.mtn2git_empty create mode 100644 packages/htop/files/remove-proc-test.patch create mode 100644 packages/htop/htop_0.7.bb diff --git a/packages/htop/.mtn2git_empty b/packages/htop/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/htop/files/.mtn2git_empty b/packages/htop/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/htop/files/remove-proc-test.patch b/packages/htop/files/remove-proc-test.patch new file mode 100644 index 0000000000..3185fdd1f4 --- /dev/null +++ b/packages/htop/files/remove-proc-test.patch @@ -0,0 +1,13 @@ +--- htop-0.6.6/configure.ac 2007-05-21 13:06:15.000000000 -0500 ++++ htop-0.6.6-cross/configure.ac 2007-11-16 14:12:16.000000000 -0600 +@@ -58,8 +58,8 @@ + fi, + AC_DEFINE(PROCDIR, "/proc", [Path of proc filesystem])) + +-AC_CHECK_FILE($PROCDIR/stat,,AC_MSG_ERROR(Cannot find /proc/stat. Make sure you have a Linux-compatible /proc filesystem mounted. See the file README for help.)) +-AC_CHECK_FILE($PROCDIR/meminfo,,AC_MSG_ERROR(Cannot find /proc/meminfo. Make sure you have a Linux-compatible /proc filesystem mounted. See the file README for help.)) ++#AC_CHECK_FILE($PROCDIR/stat,,AC_MSG_ERROR(Cannot find /proc/stat. Make sure you have a Linux-compatible /proc filesystem mounted. See the file README for help.)) ++#AC_CHECK_FILE($PROCDIR/meminfo,,AC_MSG_ERROR(Cannot find /proc/meminfo. Make sure you have a Linux-compatible /proc filesystem mounted. See the file README for help.)) + + AC_CONFIG_FILES([Makefile]) + AC_OUTPUT diff --git a/packages/htop/htop_0.7.bb b/packages/htop/htop_0.7.bb new file mode 100644 index 0000000000..4a614bd8e0 --- /dev/null +++ b/packages/htop/htop_0.7.bb @@ -0,0 +1,12 @@ +DESCRIPTION = "htop process monitor" +HOMEPAGE = "http://htop.sf.net" +SECTION = "console/utils" +PRIORITY = "optional" +LICENSE = "GPLv2" + +RDEPENDS = "ncurses" + +SRC_URI = "${SOURCEFORGE_MIRROR}/htop/htop-${PV}.tar.gz \ + file://remove-proc-test.patch;patch=1" + +inherit autotools -- cgit v1.2.3 From cc633d6ab915acd47fd6f12cf1b9803ae9c626e6 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 6 Feb 2008 09:16:55 +0000 Subject: sylpheed/claws-plugin-* : update in line with claws version increase --- .../sylpheed/claws-plugin-gtkhtml2-viewer_0.15.2.bb | 20 -------------------- .../sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb | 20 ++++++++++++++++++++ packages/sylpheed/claws-plugin-rssyl_0.10.bb | 20 -------------------- packages/sylpheed/claws-plugin-rssyl_0.15.bb | 20 -------------------- packages/sylpheed/claws-plugin-rssyl_0.17.bb | 20 ++++++++++++++++++++ 5 files changed, 40 insertions(+), 60 deletions(-) delete mode 100644 packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.15.2.bb create mode 100644 packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb delete mode 100644 packages/sylpheed/claws-plugin-rssyl_0.10.bb delete mode 100644 packages/sylpheed/claws-plugin-rssyl_0.15.bb create mode 100644 packages/sylpheed/claws-plugin-rssyl_0.17.bb diff --git a/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.15.2.bb b/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.15.2.bb deleted file mode 100644 index 5ca95d9dfb..0000000000 --- a/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.15.2.bb +++ /dev/null @@ -1,20 +0,0 @@ -SECTION = "x11/network" -DESCRIPTION = "Mail user agent plugins" -DEPENDS = "claws-mail gtkhtml2 curl" -LICENSE = "GPL" -PR = "r0" - -SRC_URI = "http://www.claws-mail.org/downloads/plugins/gtkhtml2_viewer-${PV}.tar.gz" - -inherit autotools pkgconfig - -S = "${WORKDIR}/gtkhtml2_viewer-${PV}" - -do_configure() { - gnu-configize - libtoolize --force - oe_runconf -} - -FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" - diff --git a/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb b/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb new file mode 100644 index 0000000000..5ca95d9dfb --- /dev/null +++ b/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb @@ -0,0 +1,20 @@ +SECTION = "x11/network" +DESCRIPTION = "Mail user agent plugins" +DEPENDS = "claws-mail gtkhtml2 curl" +LICENSE = "GPL" +PR = "r0" + +SRC_URI = "http://www.claws-mail.org/downloads/plugins/gtkhtml2_viewer-${PV}.tar.gz" + +inherit autotools pkgconfig + +S = "${WORKDIR}/gtkhtml2_viewer-${PV}" + +do_configure() { + gnu-configize + libtoolize --force + oe_runconf +} + +FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" + diff --git a/packages/sylpheed/claws-plugin-rssyl_0.10.bb b/packages/sylpheed/claws-plugin-rssyl_0.10.bb deleted file mode 100644 index 29fc245ac4..0000000000 --- a/packages/sylpheed/claws-plugin-rssyl_0.10.bb +++ /dev/null @@ -1,20 +0,0 @@ -SECTION = "x11/network" -DESCRIPTION = "Mail user agent plugins" -DEPENDS = "claws-mail libxml2 curl glib-2.0 gtk+" -LICENSE = "GPL" -PR = "r0" - -SRC_URI = "http://www.claws-mail.org/downloads/plugins/rssyl-${PV}.tar.gz" - -inherit autotools pkgconfig - -S = "${WORKDIR}/rssyl-${PV}" - -do_configure() { - gnu-configize - libtoolize --force - oe_runconf -} - -FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" - diff --git a/packages/sylpheed/claws-plugin-rssyl_0.15.bb b/packages/sylpheed/claws-plugin-rssyl_0.15.bb deleted file mode 100644 index 29fc245ac4..0000000000 --- a/packages/sylpheed/claws-plugin-rssyl_0.15.bb +++ /dev/null @@ -1,20 +0,0 @@ -SECTION = "x11/network" -DESCRIPTION = "Mail user agent plugins" -DEPENDS = "claws-mail libxml2 curl glib-2.0 gtk+" -LICENSE = "GPL" -PR = "r0" - -SRC_URI = "http://www.claws-mail.org/downloads/plugins/rssyl-${PV}.tar.gz" - -inherit autotools pkgconfig - -S = "${WORKDIR}/rssyl-${PV}" - -do_configure() { - gnu-configize - libtoolize --force - oe_runconf -} - -FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" - diff --git a/packages/sylpheed/claws-plugin-rssyl_0.17.bb b/packages/sylpheed/claws-plugin-rssyl_0.17.bb new file mode 100644 index 0000000000..29fc245ac4 --- /dev/null +++ b/packages/sylpheed/claws-plugin-rssyl_0.17.bb @@ -0,0 +1,20 @@ +SECTION = "x11/network" +DESCRIPTION = "Mail user agent plugins" +DEPENDS = "claws-mail libxml2 curl glib-2.0 gtk+" +LICENSE = "GPL" +PR = "r0" + +SRC_URI = "http://www.claws-mail.org/downloads/plugins/rssyl-${PV}.tar.gz" + +inherit autotools pkgconfig + +S = "${WORKDIR}/rssyl-${PV}" + +do_configure() { + gnu-configize + libtoolize --force + oe_runconf +} + +FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" + -- cgit v1.2.3 From 6c9049c05e4291a710f168851d2d5bb865ed795e Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 6 Feb 2008 09:17:47 +0000 Subject: gtkhtml2_svn.bb : patches dont apply to current svn --- packages/gtkhtml2/gtkhtml2_svn.bb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/gtkhtml2/gtkhtml2_svn.bb b/packages/gtkhtml2/gtkhtml2_svn.bb index 1745412f5c..1798fcf1df 100644 --- a/packages/gtkhtml2/gtkhtml2_svn.bb +++ b/packages/gtkhtml2/gtkhtml2_svn.bb @@ -5,12 +5,12 @@ LICENSE = "GPL" PV = "2.11.0+svnr${SRCREV}" SRC_URI = "svn://anonymous@svn.gnome.org/svn/gtkhtml2/;module=trunk \ - http://svn.o-hand.com/repos/web/trunk/patches/at-import_box-pos.patch;patch=1;pnum=0 \ - http://svn.o-hand.com/repos/web/trunk/patches/css-stylesheet-user.patch;patch=1;pnum=0 \ - http://svn.o-hand.com/repos/web/trunk/patches/css-media.patch;patch=1;pnum=0 \ - http://svn.o-hand.com/repos/web/trunk/patches/add-end-element-signal.patch;patch=1;pnum=0 \ - http://svn.o-hand.com/repos/web/trunk/patches/add-dom-functions.patch;patch=1;pnum=0 \ - http://svn.o-hand.com/repos/web/trunk/patches/iain-mem-leak.patch;patch=1;pnum=0" + http://svn.o-hand.com/repos/web/trunk/patches/at-import_box-pos.patch;patch=1;pnum=0;maxrev=1157 \ + http://svn.o-hand.com/repos/web/trunk/patches/css-stylesheet-user.patch;patch=1;pnum=0;maxrev=1157 \ + http://svn.o-hand.com/repos/web/trunk/patches/css-media.patch;patch=1;pnum=0;maxrev=1157 \ + http://svn.o-hand.com/repos/web/trunk/patches/add-end-element-signal.patch;patch=1;pnum=0;maxrev=1157 \ + http://svn.o-hand.com/repos/web/trunk/patches/add-dom-functions.patch;patch=1;pnum=0;maxrev=1157 \ + http://svn.o-hand.com/repos/web/trunk/patches/iain-mem-leak.patch;patch=1;pnum=0;maxrev=1157" S = "${WORKDIR}/trunk" -- cgit v1.2.3 From ac3e9a68692aebf60ddea2dd357f187077b8f815 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 6 Feb 2008 09:19:24 +0000 Subject: (in)sane-srcrevs.inc : add gtkhtml2 --- conf/distro/include/insane-srcrevs.inc | 1 + conf/distro/include/sane-srcrevs.inc | 1 + 2 files changed, 2 insertions(+) diff --git a/conf/distro/include/insane-srcrevs.inc b/conf/distro/include/insane-srcrevs.inc index 0f7e82ef43..f9941c8a9a 100644 --- a/conf/distro/include/insane-srcrevs.inc +++ b/conf/distro/include/insane-srcrevs.inc @@ -9,6 +9,7 @@ SRCREV_pn-ezxd ?= "${AUTOREV}" SRCREV_pn-fbgrab-viewer-native ?= "${AUTOREV}" SRCREV_pn-fstests ?= "${AUTOREV}" SRCREV_pn-gnuradio ?= "${AUTOREV}" +SRCREV_pn-gtkhtml2 ?= "${AUTOREV}" SRCREV_pn-hildon-1 ?= "${AUTOREV}" SRCREV_pn-kismet ?= "${AUTOREV}" SRCREV_pn-kismet-newcore ?= "${AUTOREV}" diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index f46c954636..c7b8cbb478 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -27,6 +27,7 @@ SRCREV_pn-gconf-dbus ?= "606" SRCREV_pn-gnuradio ?= "6377" SRCREV_pn-gpe-contacts ?= "9312" SRCREV_pn-gsm0710muxd ?= "42" +SRCREV_pn-gtkhtml2 ?= "1158" SRCREV_pn-gypsy ?= "56" SRCREV_pn-hildon-1 ?= "14429" SRCREV_pn-kismet ?= "2285" -- cgit v1.2.3 From 260e64335e036fdfd8613d08d5051d82b1c48fde Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 6 Feb 2008 09:24:25 +0000 Subject: glib-2.0_2.14.4.bb : add latest version --- packages/glib-2.0/glib-2.0-2.14.4/.mtn2git_empty | 0 .../glib-2.0-2.14.4/configure-libtool.patch | 29 ++++++++++++++++++++++ .../glib-2.0-2.14.4/gcc-4.2-inline-fix.patch | 17 +++++++++++++ packages/glib-2.0/glib-2.0_2.14.4.bb | 6 +++++ 4 files changed, 52 insertions(+) create mode 100644 packages/glib-2.0/glib-2.0-2.14.4/.mtn2git_empty create mode 100644 packages/glib-2.0/glib-2.0-2.14.4/configure-libtool.patch create mode 100644 packages/glib-2.0/glib-2.0-2.14.4/gcc-4.2-inline-fix.patch create mode 100644 packages/glib-2.0/glib-2.0_2.14.4.bb diff --git a/packages/glib-2.0/glib-2.0-2.14.4/.mtn2git_empty b/packages/glib-2.0/glib-2.0-2.14.4/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/glib-2.0/glib-2.0-2.14.4/configure-libtool.patch b/packages/glib-2.0/glib-2.0-2.14.4/configure-libtool.patch new file mode 100644 index 0000000000..a52327c8c9 --- /dev/null +++ b/packages/glib-2.0/glib-2.0-2.14.4/configure-libtool.patch @@ -0,0 +1,29 @@ +--- glib-2.12.10/configure.in.orig 2006-06-05 13:34:08.000000000 +0100 ++++ glib-2.12.10/configure.in 2006-06-05 13:34:36.000000000 +0100 +@@ -1174,7 +1174,7 @@ + G_MODULE_LDFLAGS= + else + export SED +- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh` ++ G_MODULE_LDFLAGS=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh` + fi + dnl G_MODULE_IMPL= don't reset, so cmd-line can override + G_MODULE_NEED_USCORE=0 +@@ -1265,7 +1265,7 @@ + LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS" + dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness + echo "void glib_plugin_test(void) { }" > plugin.c +- ${SHELL} ./libtool --mode=compile ${CC} -shared \ ++ ${SHELL} ./$host_alias-libtool --mode=compile ${CC} -shared \ + -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null + AC_CACHE_CHECK([for RTLD_GLOBAL brokenness], + glib_cv_rtldglobal_broken,[ +@@ -1339,7 +1339,7 @@ + + AC_MSG_CHECKING(for the suffix of shared libraries) + export SED +-shrext_cmds=`./libtool --config | grep '^shrext_cmds='` ++shrext_cmds=`./$host_alias-libtool --config | grep '^shrext_cmds='` + eval $shrext_cmds + module=yes eval std_shrext=$shrext_cmds + # chop the initial dot diff --git a/packages/glib-2.0/glib-2.0-2.14.4/gcc-4.2-inline-fix.patch b/packages/glib-2.0/glib-2.0-2.14.4/gcc-4.2-inline-fix.patch new file mode 100644 index 0000000000..ea2b41e900 --- /dev/null +++ b/packages/glib-2.0/glib-2.0-2.14.4/gcc-4.2-inline-fix.patch @@ -0,0 +1,17 @@ +Index: glib-2.12.9/glib/gutils.h +=================================================================== +--- glib-2.12.9.orig/glib/gutils.h 2007-10-07 19:13:53.000000000 +0200 ++++ glib-2.12.9/glib/gutils.h 2007-10-07 19:15:04.000000000 +0200 +@@ -97,7 +97,11 @@ + # define G_INLINE_FUNC + # undef G_CAN_INLINE + #elif defined (__GNUC__) +-# define G_INLINE_FUNC extern inline ++# if defined (__GNUC_GNU_INLINE__) ++# define G_INLINE_FUNC extern __attribute__((gnu_inline)) inline ++# else ++# define G_INLINE_FUNC extern inline ++# endif + #elif defined (G_CAN_INLINE) + # define G_INLINE_FUNC static inline + #else /* can't inline */ diff --git a/packages/glib-2.0/glib-2.0_2.14.4.bb b/packages/glib-2.0/glib-2.0_2.14.4.bb new file mode 100644 index 0000000000..e4318cd1f0 --- /dev/null +++ b/packages/glib-2.0/glib-2.0_2.14.4.bb @@ -0,0 +1,6 @@ +require glib.inc + +SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glib/2.14/glib-${PV}.tar.bz2 \ + file://glibconfig-sysdefs.h \ + file://configure-libtool.patch;patch=1 \ + file://gcc-4.2-inline-fix.patch;patch=1" -- cgit v1.2.3 From 953854dc64b5ef93236b4c2867a8d4ee9e3398fd Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Wed, 6 Feb 2008 10:46:23 +0000 Subject: angstrom-glibc: use linux-libc-headers --- 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 1502833389..d14c6f1b19 100644 --- a/conf/distro/include/angstrom-glibc.inc +++ b/conf/distro/include/angstrom-glibc.inc @@ -3,6 +3,7 @@ PREFERRED_PROVIDER_virtual/libiconv ?= "glibc" PREFERRED_PROVIDER_virtual/libintl ?= "glibc" PREFERRED_PROVIDER_virtual/libc ?= "glibc" PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-initial ?= "glibc-initial" +PREFERRED_PROVIDER_linux-libc-headers ?= "linux-libc-headers" TARGET_OS = "linux${@['','-gnueabi'][bb.data.getVar('TARGET_ARCH',d,1) in ['arm', 'armeb'] and bb.data.getVar('MACHINE',d) not in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}" -- cgit v1.2.3 From eb3c1f6abe11f88d3666023814a75574fecd083b Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 6 Feb 2008 13:06:31 +0000 Subject: distro/*.conf: Remove superfluous or errornous DISTRO assignments. --- conf/distro/amsdelta-oe.conf | 1 - conf/distro/chinook-compat.conf | 1 - conf/distro/foonas.conf | 1 - conf/distro/jlime-shrek.conf | 1 - conf/distro/mamona.conf | 1 - conf/distro/mokoslug.conf | 1 - conf/distro/openmoko.conf | 1 - 7 files changed, 7 deletions(-) diff --git a/conf/distro/amsdelta-oe.conf b/conf/distro/amsdelta-oe.conf index 25b07e0038..7935672795 100644 --- a/conf/distro/amsdelta-oe.conf +++ b/conf/distro/amsdelta-oe.conf @@ -1,4 +1,3 @@ -DISTRO = "amsdelta-oe" DISTRO_NAME = "AmsDelta Linux" DISTRO_VERSION = "unstable-${DATE}" diff --git a/conf/distro/chinook-compat.conf b/conf/distro/chinook-compat.conf index f0e1ec2ad8..ef0fa80f65 100644 --- a/conf/distro/chinook-compat.conf +++ b/conf/distro/chinook-compat.conf @@ -13,7 +13,6 @@ # of some packages. If you encounter such a problem please provide a recipe # or file a bug! -DISTRO = "chinook-compat" DISTRO_NAME = "Chinook-compat" DISTRO_VERSION = "test-${DATE}" DISTRO_TYPE = "debug" diff --git a/conf/distro/foonas.conf b/conf/distro/foonas.conf index fe079db92d..8e26a282ab 100644 --- a/conf/distro/foonas.conf +++ b/conf/distro/foonas.conf @@ -10,7 +10,6 @@ FOONAS_MODE ?= "glibc" ANGSTROM_MODE = ${FOONAS_MODE} require conf/distro/angstrom-2008.1.conf -DISTRO = "foonas" DISTRO_NAME = "foonas" DISTRO_VERSION = "1.0-dev" DISTRO_REVISION = "1" diff --git a/conf/distro/jlime-shrek.conf b/conf/distro/jlime-shrek.conf index 19379862ae..3a7c7ee549 100644 --- a/conf/distro/jlime-shrek.conf +++ b/conf/distro/jlime-shrek.conf @@ -3,7 +3,6 @@ #@DESCRIPTION: Distribution file for JLime (Linux for HP jornada 5xx,6xx,7xx,8xx series) #@MAINTAINER: Kristoffer Ericson -DISTRO = "Jornada Linux Mobility Edition" DISTRO_NAME = "JLime" DISTRO_VERSION = "Shrek" DISTRO_TYPE = "release" diff --git a/conf/distro/mamona.conf b/conf/distro/mamona.conf index 26bf8b94f1..bf055874e8 100644 --- a/conf/distro/mamona.conf +++ b/conf/distro/mamona.conf @@ -3,7 +3,6 @@ #@NAME: Mamona #@-------------------------------------------------------------------- -DISTRO = "mamona" DISTRO_NAME = Mamona"" DISTRO_VERSION = "test-${DATE}" DISTRO_TYPE = "debug" diff --git a/conf/distro/mokoslug.conf b/conf/distro/mokoslug.conf index d68a03fa2b..f8ea1ee5af 100644 --- a/conf/distro/mokoslug.conf +++ b/conf/distro/mokoslug.conf @@ -8,7 +8,6 @@ # MokoSlug is based on Angstrom, and would hopefully just be done by features one day ... require conf/distro/angstrom-2008.1.conf -DISTRO = "mokoslug" DISTRO_NAME = "MokoSlug" DISTRO_VERSION = "1.0-alpha" DISTRO_REVISION = "1" diff --git a/conf/distro/openmoko.conf b/conf/distro/openmoko.conf index dd6c2e0b7e..b08e5f2ddb 100644 --- a/conf/distro/openmoko.conf +++ b/conf/distro/openmoko.conf @@ -10,7 +10,6 @@ require conf/distro/include/angstrom-2007-for-openmoko.inc # # Header # -DISTRO = "openmoko" DISTRO_NAME = "OpenMoko" DISTRO_VERSION = "P1-Snapshot-${DATE}" #DISTRO_TYPE = "release" -- cgit v1.2.3 From eb62ab748a332a39c68f0928d8e798e0fbd19b46 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 6 Feb 2008 13:23:58 +0000 Subject: initramfs-module-check-modules: An initramfs module to check modules consistency. * Checks that version of the boot kernel matches that of modules installed in rootfs. * A step towards providing manageable upgrade path for kernels outside rootfs. --- packages/initrdscripts/files/90-check-modules.sh | 24 ++++++++++++++++++++++ .../initramfs-module-check-modules_1.0.bb | 12 +++++++++++ 2 files changed, 36 insertions(+) create mode 100644 packages/initrdscripts/files/90-check-modules.sh create mode 100644 packages/initrdscripts/initramfs-module-check-modules_1.0.bb diff --git a/packages/initrdscripts/files/90-check-modules.sh b/packages/initrdscripts/files/90-check-modules.sh new file mode 100644 index 0000000000..2423d7f8c5 --- /dev/null +++ b/packages/initrdscripts/files/90-check-modules.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# Check that modules for the current kernel exist, error out otherwise + +uname=`cat /proc/version` +ver=`expr "x$uname" : 'xLinux version \([^ ]\+\) '` + +if [ -n "$BOOT_ROOT" -a ! -d "$BOOT_ROOT/lib/modules/$ver" ]; then + echo -e "\033[1m====================" + echo "ERROR!" + echo "There are no modules for this kernel" + echo "version ($ver) in the root file " + echo "system, which will lead to boot failure or" + echo "broken functionally. If you performed" + echo "a kernel upgrade, make sure that version" + echo "installed in root filesystem matches" + echo "version used in bootloader." + echo -e "====================\033[0m" + echo + + echo "System halted" + while true; do + sleep 10000 + done +fi diff --git a/packages/initrdscripts/initramfs-module-check-modules_1.0.bb b/packages/initrdscripts/initramfs-module-check-modules_1.0.bb new file mode 100644 index 0000000000..6986316a6f --- /dev/null +++ b/packages/initrdscripts/initramfs-module-check-modules_1.0.bb @@ -0,0 +1,12 @@ +SRC_URI = "file://90-check-modules.sh" +PR = "r0" +DESCRIPTION = "An initramfs module for checking that kernel modules exist in rootfs" +RDEPENDS = "initramfs-uniboot" + +do_install() { + install -d ${D}/initrd.d + install -m 0755 ${WORKDIR}/90-check-modules.sh ${D}/initrd.d/ +} + +PACKAGE_ARCH = "all" +FILES_${PN} += " /initrd.d/* " -- cgit v1.2.3 From 6b9c2ffba4d6d8dc85d3667c76af92a8cf53eacf Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 6 Feb 2008 14:57:52 +0000 Subject: initramfs-bootmenu-image: Add initramfs-module-check-modules. --- packages/images/initramfs-bootmenu-image.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/images/initramfs-bootmenu-image.bb b/packages/images/initramfs-bootmenu-image.bb index a495363661..237aecb621 100644 --- a/packages/images/initramfs-bootmenu-image.bb +++ b/packages/images/initramfs-bootmenu-image.bb @@ -1,6 +1,6 @@ # Sample initramfs image -IMAGE_INSTALL = "busybox-static initramfs-module-bootmenu" +IMAGE_INSTALL = "busybox-static initramfs-module-bootmenu initramfs-module-check-modules" IMAGE_LINGUAS = "" # Remove any kernel-image that the kernel-module-* packages may have pulled in. -- cgit v1.2.3 From a4e2df0d75eb4b2a65cd495abfb1ff9b0a3c01b4 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 6 Feb 2008 15:00:02 +0000 Subject: kismet: unify --- packages/kismet/kismet-newcore_svn.bb | 30 +++++++--------------------- packages/kismet/kismet.inc | 33 +++++++++++++++++++++++++++++++ packages/kismet/kismet_2007-01-R1b.bb | 35 ++------------------------------- packages/kismet/kismet_2007-10-R1.bb | 35 ++------------------------------- packages/kismet/kismet_svn.bb | 37 +++++------------------------------ 5 files changed, 49 insertions(+), 121 deletions(-) create mode 100644 packages/kismet/kismet.inc diff --git a/packages/kismet/kismet-newcore_svn.bb b/packages/kismet/kismet-newcore_svn.bb index fd1eadfeb7..6f3c00bdcb 100644 --- a/packages/kismet/kismet-newcore_svn.bb +++ b/packages/kismet/kismet-newcore_svn.bb @@ -1,28 +1,12 @@ -DESCRIPTION = "Kismet is an 802.11 layer2 wireless network detector, sniffer, and intrusion detection system" -HOMEPAGE = "http://www.kismetwireless.net/" -SECTION = "console/network" -LICENSE = "GPLv2" -DEPENDS = "expat gmp imagemagick tiff fakeroot-native zlib bzip2" -PV = "0.0+svnr${SRCREV}" -PR = "r2" -DEFAULT_PREFERENCE = "-1" -SRC_URI = "svn://svn.kismetwireless.net/code/branch/;module=kismet-newcore;proto=http" +require kismet.inc -EXTRA_OECONF = "--disable-gpsmap --enable-wsp100 --with-pcap=linux \ - --with-linuxheaders=${STAGING_KERNEL_DIR}/include" - -inherit autotools - -S = "${WORKDIR}/kismet-newcore" - -fakeroot do_install() { - oe_runmake "DESTDIR=${D}" suidinstall -} +DEFAULT_PREFERENCE = "-1" -PACKAGES =+ "${PN}-sounds" +PV = "0.0+svnr${SRCREV}" +PR = "r3" -FILES_${PN}-sounds = "${datadir}/kismet/wav" -RDEPENDS_${PN}-sounds = "sox" +SRC_URI = "svn://svn.kismetwireless.net/code/branch/;module=kismet-newcore;proto=http" -CONFFILES_${PN} = "${sysconfdir}/kismet.conf ${sysconfdir}/kismet_ui.conf ${sysconfdir}/kismet_drone.conf" +EXTRA_OECONF += "--disable-gpsmap" +S = "${WORKDIR}/kismet-newcore" diff --git a/packages/kismet/kismet.inc b/packages/kismet/kismet.inc new file mode 100644 index 0000000000..57298c5c00 --- /dev/null +++ b/packages/kismet/kismet.inc @@ -0,0 +1,33 @@ +DESCRIPTION = "Kismet is an 802.11 layer2 wireless network detector, sniffer, and intrusion detection system" +HOMEPAGE = "http://www.kismetwireless.net/" +SECTION = "console/network" +LICENSE = "GPLv2" +DEPENDS = "expat gmp imagemagick tiff fakeroot-native zlib bzip2 libpcap" + +SRC_URI = "http://www.kismetwireless.net/code/kismet-${PV}.tar.gz" + +EXTRA_OECONF = "--enable-wsp100 --with-pcap=linux \ + --with-linuxheaders=${STAGING_KERNEL_DIR}/include" + +inherit autotools + +fakeroot do_install() { + oe_runmake "DESTDIR=${D}" suidinstall +} + +do_install_append() { + if test -e ${WORKDIR}/kismet.conf; then + install -m 644 ${WORKDIR}/kismet.conf ${D}${sysconfdir}/ + fi +} + +PACKAGES =+ "${PN}-sounds ${PN}-gpsmap" + +FILES_${PN}-sounds = "${datadir}/kismet/wav" +RDEPENDS_${PN}-sounds = "sox" + +FILES_${PN}-gpsmap = "${bindir}/gpsmap*" +RDEPENDS_${PN}-gpsmap = "gpsd" + +CONFFILES_${PN} = "${sysconfdir}/kismet.conf ${sysconfdir}/kismet_ui.conf ${sysconfdir}/kismet_drone.conf" + diff --git a/packages/kismet/kismet_2007-01-R1b.bb b/packages/kismet/kismet_2007-01-R1b.bb index a908ac4637..ef1cf86c98 100644 --- a/packages/kismet/kismet_2007-01-R1b.bb +++ b/packages/kismet/kismet_2007-01-R1b.bb @@ -1,34 +1,3 @@ -DESCRIPTION = "Kismet is an 802.11 layer2 wireless network detector, sniffer, and intrusion detection system" -HOMEPAGE = "http://www.kismetwireless.net/" -SECTION = "console/network" -LICENSE = "GPLv2" -DEPENDS = "expat gmp imagemagick tiff fakeroot-native zlib bzip2" -PR = "r2" - -SRC_URI = "http://www.kismetwireless.net/code/kismet-${PV}.tar.gz" - -EXTRA_OECONF = "--enable-wsp100 --with-pcap=linux \ - --with-linuxheaders=${STAGING_KERNEL_DIR}/include" - -inherit autotools - -fakeroot do_install() { - oe_runmake "DESTDIR=${D}" suidinstall -} - -do_install_append() { - if test -e ${WORKDIR}/kismet.conf; then - install -m 644 ${WORKDIR}/kismet.conf ${D}${sysconfdir}/ - fi -} - -PACKAGES =+ "${PN}-sounds ${PN}-gpsmap" - -FILES_${PN}-sounds = "${datadir}/kismet/wav" -RDEPENDS_${PN}-sounds = "sox" - -FILES_${PN}-gpsmap = "${bindir}/gpsmap*" -RDEPENDS_${PN}-gpsmap = "gpsd" - -CONFFILES_${PN} = "${sysconfdir}/kismet.conf ${sysconfdir}/kismet_ui.conf ${sysconfdir}/kismet_drone.conf" +require kismet.inc +PR = "r3" diff --git a/packages/kismet/kismet_2007-10-R1.bb b/packages/kismet/kismet_2007-10-R1.bb index 1a53c6f78f..ef1cf86c98 100644 --- a/packages/kismet/kismet_2007-10-R1.bb +++ b/packages/kismet/kismet_2007-10-R1.bb @@ -1,34 +1,3 @@ -DESCRIPTION = "Kismet is an 802.11 layer2 wireless network detector, sniffer, and intrusion detection system" -HOMEPAGE = "http://www.kismetwireless.net/" -SECTION = "console/network" -LICENSE = "GPLv2" -DEPENDS = "expat gmp imagemagick tiff fakeroot-native zlib bzip2 libpcap" -PR = "r2" - -SRC_URI = "http://www.kismetwireless.net/code/kismet-${PV}.tar.gz" - -EXTRA_OECONF = "--enable-wsp100 --with-pcap=linux \ - --with-linuxheaders=${STAGING_KERNEL_DIR}/include" - -inherit autotools - -fakeroot do_install() { - oe_runmake "DESTDIR=${D}" suidinstall -} - -do_install_append() { - if test -e ${WORKDIR}/kismet.conf; then - install -m 644 ${WORKDIR}/kismet.conf ${D}${sysconfdir}/ - fi -} - -PACKAGES =+ "${PN}-sounds ${PN}-gpsmap" - -FILES_${PN}-sounds = "${datadir}/kismet/wav" -RDEPENDS_${PN}-sounds = "sox" - -FILES_${PN}-gpsmap = "${bindir}/gpsmap*" -RDEPENDS_${PN}-gpsmap = "gpsd" - -CONFFILES_${PN} = "${sysconfdir}/kismet.conf ${sysconfdir}/kismet_ui.conf ${sysconfdir}/kismet_drone.conf" +require kismet.inc +PR = "r3" diff --git a/packages/kismet/kismet_svn.bb b/packages/kismet/kismet_svn.bb index 10723dd42a..878678052a 100644 --- a/packages/kismet/kismet_svn.bb +++ b/packages/kismet/kismet_svn.bb @@ -1,37 +1,10 @@ -DESCRIPTION = "Kismet is an 802.11 layer2 wireless network detector, sniffer, and intrusion detection system" -HOMEPAGE = "http://www.kismetwireless.net/" -SECTION = "console/network" -LICENSE = "GPLv2" -DEPENDS = "expat gmp imagemagick tiff fakeroot-native zlib bzip2" -PV = "2007-10-R1+svnr${SRCREV}" -PR = "r1" +require kismet.inc + DEFAULT_PREFERENCE = "-1" -SRC_URI = "svn://svn.kismetwireless.net/code/;module=trunk;proto=http" -EXTRA_OECONF = "--enable-wsp100 --with-pcap=linux \ - --with-linuxheaders=${STAGING_KERNEL_DIR}/include" +PV = "2007-10-R1+svnr${SRCREV}" +PR = "r2" -inherit autotools +SRC_URI = "svn://svn.kismetwireless.net/code/;module=trunk;proto=http" S = "${WORKDIR}/trunk" - -fakeroot do_install() { - oe_runmake "DESTDIR=${D}" suidinstall -} - -do_install_append() { - if test -e ${WORKDIR}/kismet.conf; then - install -m 644 ${WORKDIR}/kismet.conf ${D}${sysconfdir}/ - fi -} - -PACKAGES =+ "${PN}-sounds ${PN}-gpsmap" - -FILES_${PN}-sounds = "${datadir}/kismet/wav" -RDEPENDS_${PN}-sounds = "sox" - -FILES_${PN}-gpsmap = "${bindir}/gpsmap*" -RDEPENDS_${PN}-gpsmap = "gpsd" - -CONFFILES_${PN} = "${sysconfdir}/kismet.conf ${sysconfdir}/kismet_ui.conf ${sysconfdir}/kismet_drone.conf" - -- cgit v1.2.3 From 70ff5de66976acf378e89d7ab381295d525a7db1 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 6 Feb 2008 15:08:51 +0000 Subject: libeventdb: unify --- packages/libeventdb/libeventdb.inc | 13 +++++++++++++ packages/libeventdb/libeventdb_0.17.bb | 19 ++----------------- packages/libeventdb/libeventdb_0.18.bb | 15 ++------------- packages/libeventdb/libeventdb_0.19.bb | 15 ++------------- packages/libeventdb/libeventdb_0.21.bb | 15 ++------------- packages/libeventdb/libeventdb_0.30.bb | 18 +++--------------- packages/libeventdb/libeventdb_0.90.bb | 15 ++------------- packages/libeventdb/libeventdb_svn.bb | 17 ++--------------- 8 files changed, 28 insertions(+), 99 deletions(-) create mode 100644 packages/libeventdb/libeventdb.inc diff --git a/packages/libeventdb/libeventdb.inc b/packages/libeventdb/libeventdb.inc new file mode 100644 index 0000000000..7facee79ce --- /dev/null +++ b/packages/libeventdb/libeventdb.inc @@ -0,0 +1,13 @@ +DESCRIPTION = "Database access library for GPE calendar" +SECTION = "gpe/libs" +LICENSE = "LGPL" +PRIORITY = "optional" +DEPENDS = "libgpewidget libgpepimc sqlite" + +GPE_TARBALL_SUFFIX = "bz2" + +inherit pkgconfig gpe autotools + +do_stage () { + autotools_stage_all +} diff --git a/packages/libeventdb/libeventdb_0.17.bb b/packages/libeventdb/libeventdb_0.17.bb index 282383108b..bb8fbaa9b8 100644 --- a/packages/libeventdb/libeventdb_0.17.bb +++ b/packages/libeventdb/libeventdb_0.17.bb @@ -1,20 +1,5 @@ -LICENSE = "LGPL" -DESCRIPTION = "Database access library for GPE calendar" -SECTION = "gpe/libs" -PRIORITY = "optional" -DEPENDS = "libgpewidget libgpepimc sqlite" +require libeventdb.inc -GPE_TARBALL_SUFFIX = "bz2" - -inherit pkgconfig gpe autotools +PR = "r1" headers = "event-db.h" - -do_stage () { - oe_libinstall -so libeventdb ${STAGING_LIBDIR} - - mkdir -p ${STAGING_INCDIR}/gpe - for h in ${headers}; do - install -m 0644 ${S}/gpe/$h ${STAGING_INCDIR}/gpe/$h - done -} diff --git a/packages/libeventdb/libeventdb_0.18.bb b/packages/libeventdb/libeventdb_0.18.bb index 2db316c65e..1c9d3ab4bc 100644 --- a/packages/libeventdb/libeventdb_0.18.bb +++ b/packages/libeventdb/libeventdb_0.18.bb @@ -1,14 +1,3 @@ -LICENSE = "LGPL" -DESCRIPTION = "Database access library for GPE calendar" -SECTION = "gpe/libs" -PRIORITY = "optional" -DEPENDS = "libgpewidget libgpepimc sqlite" +require libeventdb.inc -GPE_TARBALL_SUFFIX = "bz2" - -inherit pkgconfig gpe autotools - - -do_stage () { -autotools_stage_all -} +PR = "r1" diff --git a/packages/libeventdb/libeventdb_0.19.bb b/packages/libeventdb/libeventdb_0.19.bb index 52e44ecc0e..1c9d3ab4bc 100644 --- a/packages/libeventdb/libeventdb_0.19.bb +++ b/packages/libeventdb/libeventdb_0.19.bb @@ -1,14 +1,3 @@ -LICENSE = "LGPL" -DESCRIPTION = "Database access library for GPE calendar" -SECTION = "gpe/libs" -PRIORITY = "optional" -DEPENDS = "libgpewidget libgpepimc sqlite" +require libeventdb.inc -GPE_TARBALL_SUFFIX = "bz2" - -inherit pkgconfig gpe autotools - - -do_stage () { -autotools_stage_all -} +PR = "r1" diff --git a/packages/libeventdb/libeventdb_0.21.bb b/packages/libeventdb/libeventdb_0.21.bb index 52e44ecc0e..1c9d3ab4bc 100644 --- a/packages/libeventdb/libeventdb_0.21.bb +++ b/packages/libeventdb/libeventdb_0.21.bb @@ -1,14 +1,3 @@ -LICENSE = "LGPL" -DESCRIPTION = "Database access library for GPE calendar" -SECTION = "gpe/libs" -PRIORITY = "optional" -DEPENDS = "libgpewidget libgpepimc sqlite" +require libeventdb.inc -GPE_TARBALL_SUFFIX = "bz2" - -inherit pkgconfig gpe autotools - - -do_stage () { -autotools_stage_all -} +PR = "r1" diff --git a/packages/libeventdb/libeventdb_0.30.bb b/packages/libeventdb/libeventdb_0.30.bb index d93766a21a..b3b34d3be9 100644 --- a/packages/libeventdb/libeventdb_0.30.bb +++ b/packages/libeventdb/libeventdb_0.30.bb @@ -1,16 +1,4 @@ -DEFAULT_PREFERENCE = "-1" - -LICENSE = "LGPL" -DESCRIPTION = "Database access library for GPE calendar" -SECTION = "gpe/libs" -PRIORITY = "optional" -DEPENDS = "libgpewidget libgpepimc sqlite" - -GPE_TARBALL_SUFFIX = "bz2" +require libeventdb.inc -inherit pkgconfig gpe autotools - - -do_stage () { -autotools_stage_all -} +PR = "r1" +DEFAULT_PREFERENCE = "-1" diff --git a/packages/libeventdb/libeventdb_0.90.bb b/packages/libeventdb/libeventdb_0.90.bb index 2372db528b..1c9d3ab4bc 100644 --- a/packages/libeventdb/libeventdb_0.90.bb +++ b/packages/libeventdb/libeventdb_0.90.bb @@ -1,14 +1,3 @@ -LICENSE = "LGPL" -DESCRIPTION = "Database access library for GPE calendar" -SECTION = "gpe/libs" -PRIORITY = "optional" -DEPENDS = "libgpewidget libgpepimc sqlite" +require libeventdb.inc -GPE_TARBALL_SUFFIX = "bz2" - -inherit pkgconfig gpe autotools - - -do_stage () { - autotools_stage_all -} +PR = "r1" diff --git a/packages/libeventdb/libeventdb_svn.bb b/packages/libeventdb/libeventdb_svn.bb index 4361df2ea4..132205ee0a 100644 --- a/packages/libeventdb/libeventdb_svn.bb +++ b/packages/libeventdb/libeventdb_svn.bb @@ -1,21 +1,8 @@ -DESCRIPTION = "Database access library for GPE calendar" -LICENSE = "LGPL" -SECTION = "gpe/libs" -PRIORITY = "optional" - -DEPENDS = "libgpewidget libgpepimc sqlite" +require libeventdb.inc +PR = "r1" PV = "0.90+svn${SRCDATE}" -PR = "r0" - DEFAULT_PREFERENCE = "-1" -inherit pkgconfig gpe autotools - SRC_URI = "${GPE_SVN}" - S = "${WORKDIR}/${PN}" - -do_stage () { - autotools_stage_all -} -- cgit v1.2.3 From 8183955add59156fb35c173d14bf250378b1b9ad Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 6 Feb 2008 15:43:36 +0000 Subject: libglade: consolidate and unify --- packages/libglade/files/.mtn2git_empty | 0 packages/libglade/files/glade-cruft.patch | 100 ++++ packages/libglade/files/gtk-2.0.m4 | 196 ++++++++ packages/libglade/files/no-deprecation.patch | 10 + packages/libglade/files/no-xml2.patch | 499 ++++++++++++++++++++ packages/libglade/libglade-2.0.1/.mtn2git_empty | 0 packages/libglade/libglade-2.0.1/glade-cruft.patch | 97 ---- packages/libglade/libglade-2.0.1/gtk-2.0.m4 | 196 -------- packages/libglade/libglade-2.4.0/.mtn2git_empty | 0 packages/libglade/libglade-2.4.0/glade-cruft.patch | 100 ---- packages/libglade/libglade-2.4.0/no-xml2.patch | 502 --------------------- packages/libglade/libglade-2.4.2/.mtn2git_empty | 0 packages/libglade/libglade-2.4.2/glade-cruft.patch | 100 ---- packages/libglade/libglade-2.4.2/no-xml2.patch | 499 -------------------- packages/libglade/libglade-2.5.1/.mtn2git_empty | 0 packages/libglade/libglade-2.5.1/glade-cruft.patch | 100 ---- .../libglade/libglade-2.5.1/no-deprecation.patch | 10 - packages/libglade/libglade-2.5.1/no-xml2.patch | 499 -------------------- packages/libglade/libglade-2.6.2/.mtn2git_empty | 0 packages/libglade/libglade-2.6.2/glade-cruft.patch | 100 ---- packages/libglade/libglade-2.6.2/no-xml2.patch | 499 -------------------- packages/libglade/libglade.inc | 25 + packages/libglade/libglade_2.0.1.bb | 22 +- packages/libglade/libglade_2.4.0.bb | 27 +- packages/libglade/libglade_2.4.2.bb | 27 +- packages/libglade/libglade_2.5.1.bb | 27 +- packages/libglade/libglade_2.6.2.bb | 27 +- 27 files changed, 846 insertions(+), 2816 deletions(-) create mode 100644 packages/libglade/files/.mtn2git_empty create mode 100644 packages/libglade/files/glade-cruft.patch create mode 100644 packages/libglade/files/gtk-2.0.m4 create mode 100644 packages/libglade/files/no-deprecation.patch create mode 100644 packages/libglade/files/no-xml2.patch delete mode 100644 packages/libglade/libglade-2.0.1/.mtn2git_empty delete mode 100644 packages/libglade/libglade-2.0.1/glade-cruft.patch delete mode 100644 packages/libglade/libglade-2.0.1/gtk-2.0.m4 delete mode 100644 packages/libglade/libglade-2.4.0/.mtn2git_empty delete mode 100644 packages/libglade/libglade-2.4.0/glade-cruft.patch delete mode 100644 packages/libglade/libglade-2.4.0/no-xml2.patch delete mode 100644 packages/libglade/libglade-2.4.2/.mtn2git_empty delete mode 100644 packages/libglade/libglade-2.4.2/glade-cruft.patch delete mode 100644 packages/libglade/libglade-2.4.2/no-xml2.patch delete mode 100644 packages/libglade/libglade-2.5.1/.mtn2git_empty delete mode 100644 packages/libglade/libglade-2.5.1/glade-cruft.patch delete mode 100644 packages/libglade/libglade-2.5.1/no-deprecation.patch delete mode 100644 packages/libglade/libglade-2.5.1/no-xml2.patch delete mode 100644 packages/libglade/libglade-2.6.2/.mtn2git_empty delete mode 100644 packages/libglade/libglade-2.6.2/glade-cruft.patch delete mode 100644 packages/libglade/libglade-2.6.2/no-xml2.patch create mode 100644 packages/libglade/libglade.inc diff --git a/packages/libglade/files/.mtn2git_empty b/packages/libglade/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libglade/files/glade-cruft.patch b/packages/libglade/files/glade-cruft.patch new file mode 100644 index 0000000000..0fceccf0c4 --- /dev/null +++ b/packages/libglade/files/glade-cruft.patch @@ -0,0 +1,100 @@ +diff -ur libglade-2.4.0~/configure.in libglade-2.4.0/configure.in +--- libglade-2.4.0~/configure.in 2004-05-17 12:38:31.000000000 +0100 ++++ libglade-2.4.0/configure.in 2004-07-28 16:53:09.000000000 +0100 +@@ -147,6 +147,18 @@ + AM_CONDITIONAL(HAVE_PYTHON, $have_python) + AC_SUBST(PYTHON) + ++AC_MSG_CHECKING([for cruft in libgtk]) ++AC_TRY_LINK([ ++#include ++#include ++], [ gtk_tree_get_type (); return 0; ], ++ [ AC_MSG_RESULT(yes) ++ have_cruft=yes ], ++ [ AC_MSG_RESULT(no) ++ AC_DEFINE(DISABLE_CRUFT,,[leave out support for old, broken widgets]) ++ have_cruft=no ]) ++AC_SUBST(DISABLE_CRUFT) ++ + dnl add debugging options ... + changequote(,)dnl + if test "x$GCC" = xyes; then +Only in libglade-2.4.0: configure.in.orig +diff -ur libglade-2.4.0~/glade/glade-gtk.c libglade-2.4.0/glade/glade-gtk.c +--- libglade-2.4.0~/glade/glade-gtk.c 2004-03-13 13:47:35.000000000 +0000 ++++ libglade-2.4.0/glade/glade-gtk.c 2004-07-28 16:53:52.000000000 +0100 +@@ -213,6 +213,8 @@ + gtk_clist_column_titles_hide (GTK_CLIST (w)); + } + ++#ifndef DISABLE_CRUFT ++ + static void + tree_set_selection_mode (GladeXML *xml, GtkWidget *w, + const char *name, const char *value) +@@ -238,6 +240,8 @@ + gtk_tree_set_view_lines (GTK_TREE (w), BOOL (value)); + } + ++#endif ++ + static void + list_set_selection_mode (GladeXML *xml, GtkWidget *w, + const char *name, const char *value) +@@ -254,6 +258,7 @@ + gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (w), BOOL (value)); + } + ++#ifndef DISABLE_CRUFT + static void + text_set_text (GladeXML *xml, GtkWidget *w, + const char *name, const char *value) +@@ -262,6 +267,7 @@ + + gtk_editable_insert_text (GTK_EDITABLE (w), value, -1, &pos); + } ++#endif + + static void + radio_menu_item_set_group (GladeXML *xml, GtkWidget *w, +@@ -1125,13 +1131,17 @@ + glade_register_custom_prop (GTK_TYPE_CLIST, "selection_mode", clist_set_selection_mode); + glade_register_custom_prop (GTK_TYPE_CLIST, "shadow_type", clist_set_shadow_type); + glade_register_custom_prop (GTK_TYPE_CLIST, "show_titles", clist_set_show_titles); ++#ifndef DISABLE_CRUFT + glade_register_custom_prop (GTK_TYPE_TREE, "selection_mode", tree_set_selection_mode); + glade_register_custom_prop (GTK_TYPE_TREE, "view_mode", tree_set_view_mode); + glade_register_custom_prop (GTK_TYPE_TREE, "view_line", tree_set_view_line); ++#endif + glade_register_custom_prop (GTK_TYPE_LIST, "selection_mode", list_set_selection_mode); + glade_register_custom_prop (GTK_TYPE_CHECK_MENU_ITEM, "always_show_toggle", + check_menu_item_set_always_show_toggle); ++#ifndef DISABLE_CRUFT + glade_register_custom_prop (GTK_TYPE_TEXT, "text", text_set_text); ++#endif + glade_register_custom_prop (GTK_TYPE_RADIO_MENU_ITEM, "group", + radio_menu_item_set_group); + glade_register_custom_prop (GTK_TYPE_TOOLBAR, "tooltips", toolbar_set_tooltips); +@@ -1288,8 +1298,10 @@ + glade_standard_build_children, NULL); + glade_register_widget (GTK_TYPE_TEAROFF_MENU_ITEM, glade_standard_build_widget, + NULL, NULL); ++#ifndef DISABLE_CRUFT + glade_register_widget (GTK_TYPE_TEXT, glade_standard_build_widget, + NULL, NULL); ++#endif + glade_register_widget (GTK_TYPE_TEXT_VIEW, glade_standard_build_widget, + NULL, NULL); + glade_register_widget (GTK_TYPE_TIPS_QUERY, glade_standard_build_widget, +@@ -1304,8 +1316,10 @@ + glade_standard_build_children, NULL); + glade_register_widget (GTK_TYPE_TOOL_BUTTON, glade_standard_build_widget, + NULL, NULL); ++#ifndef DISABLE_CRUFT + glade_register_widget (GTK_TYPE_TREE, glade_standard_build_widget, + NULL, NULL); ++#endif + glade_register_widget (GTK_TYPE_TREE_VIEW, glade_standard_build_widget, + NULL, NULL); + glade_register_widget (GTK_TYPE_VBUTTON_BOX, glade_standard_build_widget, diff --git a/packages/libglade/files/gtk-2.0.m4 b/packages/libglade/files/gtk-2.0.m4 new file mode 100644 index 0000000000..a0c53ac11f --- /dev/null +++ b/packages/libglade/files/gtk-2.0.m4 @@ -0,0 +1,196 @@ +# Configure paths for GTK+ +# Owen Taylor 1997-2001 + +dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, +dnl pass to pkg-config +dnl +AC_DEFUN(AM_PATH_GTK_2_0, +[dnl +dnl Get the cflags and libraries from pkg-config +dnl +AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program], + , enable_gtktest=yes) + + pkg_config_args=gtk+-2.0 + for module in . $4 + do + case "$module" in + gthread) + pkg_config_args="$pkg_config_args gthread-2.0" + ;; + esac + done + + no_gtk="" + + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + + if test x$PKG_CONFIG != xno ; then + if pkg-config --atleast-pkgconfig-version 0.7 ; then + : + else + echo *** pkg-config too old; version 0.7 or better required. + no_gtk=yes + PKG_CONFIG=no + fi + else + no_gtk=yes + fi + + min_gtk_version=ifelse([$1], ,2.0.0,$1) + AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version) + + if test x$PKG_CONFIG != xno ; then + ## don't try to run the test against uninstalled libtool libs + if $PKG_CONFIG --uninstalled $pkg_config_args; then + echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" + enable_gtktest=no + fi + + if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then + : + else + no_gtk=yes + fi + fi + + if test x"$no_gtk" = x ; then + GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` + GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` + gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_gtktest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$GTK_LIBS $LIBS" +dnl +dnl Now check if the installed GTK+ is sufficiently new. (Also sanity +dnl checks the results of pkg-config to some extent) +dnl + rm -f conf.gtktest + AC_TRY_RUN([ +#include +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gtktest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_gtk_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gtk_version"); + exit(1); + } + + if ((gtk_major_version != $gtk_config_major_version) || + (gtk_minor_version != $gtk_config_minor_version) || + (gtk_micro_version != $gtk_config_micro_version)) + { + printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", + $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf ("*** was found! If pkg-config was correct, then it is best\n"); + printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); + printf("*** to point to the correct configuration files\n"); + } + else if ((gtk_major_version != GTK_MAJOR_VERSION) || + (gtk_minor_version != GTK_MINOR_VERSION) || + (gtk_micro_version != GTK_MICRO_VERSION)) + { + printf("*** GTK+ header files (version %d.%d.%d) do not match\n", + GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + } + else + { + if ((gtk_major_version > major) || + ((gtk_major_version == major) && (gtk_minor_version > minor)) || + ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); + printf("*** correct copy of pkg-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gtk" = x ; then + AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$PKG_CONFIG" = "no" ; then + echo "*** A new enough version of pkg-config was not found." + echo "*** See http://pkgconfig.sourceforge.net" + else + if test -f conf.gtktest ; then + : + else + echo "*** Could not run GTK+ test program, checking why..." + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$LIBS $GTK_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GTK+ or finding the wrong" + echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GTK_CFLAGS="" + GTK_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + rm -f conf.gtktest +]) diff --git a/packages/libglade/files/no-deprecation.patch b/packages/libglade/files/no-deprecation.patch new file mode 100644 index 0000000000..9ef8f0738e --- /dev/null +++ b/packages/libglade/files/no-deprecation.patch @@ -0,0 +1,10 @@ +--- libglade-2.5.1/glade/Makefile.am.old 2006-04-25 21:03:25.000000000 +0100 ++++ libglade-2.5.1/glade/Makefile.am 2006-04-25 21:03:45.000000000 +0100 +@@ -30,7 +30,6 @@ + -I$(top_srcdir) \ + $(LIBGLADE_CFLAGS) \ + -DGLADE_LIBDIR=\""$(libdir)"\" \ +- -DG_DISABLE_DEPRECATED \ + -DGDK_DISABLE_DEPRECATED \ + -DGDK_PIXBUF_DISABLE_DEPRECATED \ + -DGTK_DISABLE_DEPRECATED \ diff --git a/packages/libglade/files/no-xml2.patch b/packages/libglade/files/no-xml2.patch new file mode 100644 index 0000000000..1c2e215b8d --- /dev/null +++ b/packages/libglade/files/no-xml2.patch @@ -0,0 +1,499 @@ +diff -urN libglade-2.4.2.orig/configure.in libglade-2.4.2/configure.in +--- libglade-2.4.2.orig/configure.in 2005-02-11 12:42:58.000000000 +0100 ++++ libglade-2.4.2/configure.in 2005-03-22 01:22:00.000000000 +0100 +@@ -52,11 +52,33 @@ + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + + PKG_CHECK_MODULES(LIBGLADE, [dnl +- libxml-2.0 >= required_libxml_version dnl + atk >= required_atk_version dnl + gtk+-2.0 >= required_gtk_version dnl + glib-2.0 >= required_glib_version]) + ++disable_xml2=no ++AC_ARG_WITH([libxml2], ++ AC_HELP_STRING([--without-libxml2], [Don't use libxml2, use Glib's GMarkupParser instead]), ++ [disable_xml2=yes], ++ [disable_xml2=no]) ++ ++AC_MSG_CHECKING([if we are using libxml2]) ++if test "x$disable_xml2" == "xno"; then ++ AC_MSG_RESULT(yes) ++ PKG_CHECK_MODULES(XML2, libxml-2.0 >= 2.4.10) ++ PKGCFG_REQUIRE_LIBXML2="libxml-2.0" ++ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS $XML2_CFLAGS" ++ LIBGLADE_LIBS="$LIBGLADE_LIBS $XML2_LIBS" ++else ++ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS -DUSE_GMARKUP_PARSER" ++ PKGCFG_REQUIRE_LIBXML2="" ++ AC_MSG_RESULT(no) ++fi ++ ++AC_SUBST(XML2_LIBS) ++AC_SUBST(XML2_CFLAGS) ++AC_SUBST(PKGCFG_REQUIRE_LIBXML2) ++ + AC_MSG_CHECKING([for native Win32]) + case "$host" in + *-*-mingw*) +@@ -116,6 +138,21 @@ + fi + fi + ++if test "x$disable_xml2" == "xyes"; then ++ echo "*****************************************************" ++ echo " You chose to disable libxml2 and use Glib's" ++ echo " GMarkupParser instead." ++ echo ++ echo " Please bear in mind that using libglade with" ++ echo " GMarkupParser is an experimental feature only." ++ echo ++ echo " Please post problems or success stories to" ++ echo " the glade-devel mailing list. Thank you." ++ echo "*****************************************************" ++fi ++ ++ ++ + GTK_DOC_CHECK(1.0) + + dnl gettext stuff ... there is no message catalog for libglade -- libglade +diff -urN libglade-2.4.2.orig/glade/glade-parser.c libglade-2.4.2/glade/glade-parser.c +--- libglade-2.4.2.orig/glade/glade-parser.c 2004-11-11 11:56:13.000000000 +0100 ++++ libglade-2.4.2/glade/glade-parser.c 2005-03-22 01:20:00.000000000 +0100 +@@ -34,7 +34,15 @@ + # define dgettext(Domain, String) (String) + #endif + +-#include ++#ifdef USE_GMARKUP_PARSER ++# include ++#else ++# include ++#endif ++ ++#ifdef USE_GMARKUP_PARSER ++# define xmlChar gchar ++#endif + + #include "glade-parser.h" + #include "glade-private.h" +@@ -508,7 +516,9 @@ + case PARSER_START: + if (!strcmp(name, "glade-interface")) { + state->state = PARSER_GLADE_INTERFACE; +-#if 0 ++ ++#ifndef USE_GMARKUP_PARSER ++ #if 0 + /* check for correct XML namespace */ + for (i = 0; attrs && attrs[i] != NULL; i += 2) { + if (!strcmp(attrs[i], "xmlns") && +@@ -518,7 +528,9 @@ + g_warning("unknown attribute `%s' for ", + attrs[i]); + } ++ #endif + #endif ++ + } else { + g_warning("Expected . Got <%s>.", name); + state->prev_state = state->state; +@@ -1063,12 +1075,18 @@ + } + } + ++#ifndef USE_GMARKUP_PARSER ++ + static xmlEntityPtr + glade_parser_get_entity(GladeParseState *state, const xmlChar *name) + { + return xmlGetPredefinedEntity(name); + } + ++#endif /* !defined(USE_GMARKUP_PARSER) */ ++ ++#ifndef USE_GMARKUP_PARSER ++ + static void + glade_parser_warning(GladeParseState *state, const char *msg, ...) + { +@@ -1079,6 +1097,10 @@ + va_end(args); + } + ++#endif /* !defined(USE_GMARKUP_PARSER) */ ++ ++#ifndef USE_GMARKUP_PARSER ++ + static void + glade_parser_error(GladeParseState *state, const char *msg, ...) + { +@@ -1089,6 +1111,10 @@ + va_end(args); + } + ++#endif /* !defined(USE_GMARKUP_PARSER) */ ++ ++#ifndef USE_GMARKUP_PARSER ++ + static void + glade_parser_fatal_error(GladeParseState *state, const char *msg, ...) + { +@@ -1099,6 +1125,10 @@ + va_end(args); + } + ++#endif /* !defined(USE_GMARKUP_PARSER) */ ++ ++#ifndef USE_GMARKUP_PARSER ++ + static xmlSAXHandler glade_parser = { + (internalSubsetSAXFunc)NULL, /* internalSubset */ + (isStandaloneSAXFunc)NULL, /* isStandalone */ +@@ -1126,6 +1156,82 @@ + (fatalErrorSAXFunc)glade_parser_fatal_error, /* fatalError */ + }; + ++#else /* USE_GMARKUP_PARSER */ ++ ++static void ++glade_parser_start_element_wrapper(GMarkupParseContext *context, ++ const gchar *name, ++ const gchar **attr_names, ++ const gchar **attr_values, ++ gpointer state, ++ GError **error) ++{ ++ guint i = 0; ++ ++ /* Pack attribute names/values from two separate ++ * arrays (GMarkupParser style) into one single ++ * array (libxml SAXParser style). This is not ++ * very efficient, but we do it to make the ++ * GMarkupParser code as little invasive as ++ * possible. */ ++ ++ while (attr_names[i] != NULL) { ++ ++i; ++ } ++ ++ if (1) ++ { ++ const gchar *attr[(i*2)+1]; ++ guint j, k; ++ ++ for (j=0, k=0; k < i; j += 2) ++ { ++ attr[j] = attr_names[k]; ++ attr[j+1] = attr_values[k]; ++ ++k; ++ } ++ attr[i*2] = NULL; ++ ++ glade_parser_start_element((GladeParseState*)state, name, attr); ++ } ++} ++ ++static void ++glade_parser_end_element_wrapper(GMarkupParseContext *context, ++ const gchar *name, ++ gpointer state, ++ GError **err) ++{ ++ glade_parser_end_element((GladeParseState*)state, name); ++} ++ ++static void ++glade_parser_characters_wrapper(GMarkupParseContext *context, ++ const gchar *chars, ++ gsize len, ++ gpointer state, ++ GError **err) ++{ ++ glade_parser_characters((GladeParseState*)state, chars, (int) len); ++} ++ ++static void ++glade_parser_error(GMarkupParseContext *context, GError *err, gpointer data) ++{ ++ g_log("Glade-Parser", G_LOG_LEVEL_CRITICAL, "%s", err->message); ++} ++ ++static const GMarkupParser glade_parser = { ++ glade_parser_start_element_wrapper, /* element open */ ++ glade_parser_end_element_wrapper, /* element close */ ++ glade_parser_characters_wrapper, /* text content */ ++ NULL, /* passthrough */ ++ glade_parser_error, /* parse error */ ++}; ++ ++#endif /* USE_GMARKUP_PARSER */ ++ ++ + static void + widget_info_free(GladeWidgetInfo *info) + { +@@ -1191,6 +1297,9 @@ + * + * Returns: the GladeInterface structure for the XML file. + */ ++ ++#ifndef USE_GMARKUP_PARSER ++ + GladeInterface * + glade_parser_parse_file(const gchar *file, const gchar *domain) + { +@@ -1222,6 +1331,31 @@ + return state.interface; + } + ++#else /* defined(USE_GMARKUP_PARSER) */ ++ ++GladeInterface * ++glade_parser_parse_file(const gchar *file, const gchar *domain) ++{ ++ GladeInterface *interface; ++ GError *err = NULL; ++ gchar *content = NULL; ++ gsize clen; ++ ++ if (!g_file_get_contents(file, &content, &clen, &err)) { ++ g_warning("could not load glade file: %s", err->message); ++ g_error_free(err); ++ return NULL; ++ } ++ ++ interface = glade_parser_parse_buffer(content, (gint) clen, domain); ++ ++ g_free(content); ++ ++ return interface; ++} ++ ++#endif /* USE_GMARKUP_PARSER */ ++ + /** + * glade_parser_parse_buffer + * @buffer: a buffer in memory containing XML data. +@@ -1237,6 +1371,9 @@ + * + * Returns: the GladeInterface structure for the XML buffer. + */ ++ ++#ifndef USE_GMARKUP_PARSER ++ + GladeInterface * + glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) + { +@@ -1263,6 +1400,161 @@ + return state.interface; + } + ++#else /* defined(USE_GMARKUP_PARSER) */ ++ ++ ++static GladeInterface * ++glade_parser_parse_buffer_internal(const gchar *buffer, gint len, const gchar *domain) ++{ ++ GMarkupParseContext *context; ++ GladeParseState state = { 0 }; ++ GError *err = NULL; ++ ++ state.interface = NULL; ++ if (domain) ++ state.domain = domain; ++ else ++ state.domain = textdomain(NULL); ++ ++ /* FIXME: This strstr() is not safe, as it ignores the len ++ * argument and assumes the buffer is NUL-terminated */ ++ if (strstr(buffer, "message); ++ g_error_free(err); ++ if (state.interface) ++ glade_interface_destroy (state.interface); ++ return NULL; ++ } ++ ++ glade_parser_end_document(&state); ++ ++ if (state.state != PARSER_FINISH) { ++ g_warning("did not finish in PARSER_FINISH state!"); ++ ++ if (state.interface) ++ glade_interface_destroy(state.interface); ++ ++ return NULL; ++ } ++ ++ return state.interface; ++} ++ ++struct _gzip_rfc1952_hdr ++{ ++ guint8 id1, id2, cm, flags; ++ guint32 mtime; ++ guint8 xflags; ++ guint8 os; ++}; ++ ++static GladeInterface * ++glade_parser_parse_gzipped_buffer(const gchar *buffer, gint len, const gchar *domain) ++{ ++ struct _gzip_rfc1952_hdr *hdr = (struct _gzip_rfc1952_hdr*)buffer; ++ struct z_stream_s zstream; ++ GladeInterface *interface; ++ const guint8 *cbuf; /* start of compressed data */ ++ guint8 *decompress_buf; ++ gulong decompress_len = 0; ++ gint ret; ++ ++ g_assert(hdr != NULL && hdr->id1 == 0x1f && hdr->id2 == 0x8b); ++ ++ if (hdr->cm != Z_DEFLATED) { ++ g_warning("Unknown decompression method %u", (guint) hdr->cm); ++ return NULL; ++ } ++ ++ /* Uncompressed size (modulo 2^32) is last ++ * 4 bytes of gzipped file, and little endian. ++ * See RFC 1952 */ ++ decompress_len = GUINT32_FROM_LE(*((guint32*)(((guint8*)buffer) + len - 4))); ++ ++ /* paranoid mode: glade files > 5MB are unlikely */ ++ g_return_val_if_fail(decompress_len < 5*1024*1024, NULL); ++ ++ decompress_buf = g_malloc0(decompress_len + 1); /* +1 for NUL-terminator */ ++ ++ /* find start of compressed data, skipping header stuff */ ++ cbuf = (guint8*)buffer + 10; ++ if (hdr->flags & 0x04) { ++ guint16 xlen = GUINT16_FROM_LE(*((guint16*)cbuf)); ++ cbuf += xlen + 2; ++ } ++ if (hdr->flags & 0x08) { ++ guint16 onamelen = strlen(cbuf); ++ cbuf += onamelen + 1; ++ } ++ if (hdr->flags & 0x10) { ++ guint16 commentlen = strlen(cbuf); ++ cbuf += commentlen + 1; ++ } ++ if (hdr->flags & 0x02) ++ { ++ cbuf += 2; /* skip header CRC16 */ ++ } ++ ++ zstream.next_in = (void*)cbuf; ++ zstream.avail_in = (uLongf) len - ((void*)cbuf-(void*)buffer) - 4 - 4 +1; ++ zstream.next_out = decompress_buf; ++ zstream.avail_out= decompress_len; ++ zstream.zalloc = Z_NULL; ++ zstream.zfree = Z_NULL; ++ zstream.opaque = Z_NULL; ++ ++ ret = inflateInit2(&zstream, -MAX_WBITS); ++ ++ if (ret != Z_OK) { ++ g_warning("inflateInit2() failed. zlib error code: %d", ret); ++ g_free(decompress_buf); ++ return NULL; ++ } ++ ++ ret = inflate(&zstream, Z_FINISH); ++ ++ if (ret != Z_STREAM_END) { ++ g_warning("zlib decompression failed. zlib error code: %d", ret); ++ g_free(decompress_buf); ++ return NULL; ++ } ++ ++ interface = glade_parser_parse_buffer_internal(decompress_buf, decompress_len, domain); ++ ++ g_free(decompress_buf); ++ ++ return interface; ++} ++ ++GladeInterface * ++glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) ++{ ++ g_return_val_if_fail(buffer != NULL, NULL); ++ g_return_val_if_fail(len > 0, NULL); ++ ++ /* Check if buffer is gzipped */ ++ if (buffer[0] == 0x1f && buffer[1] == (gchar)0x8b) { ++ return glade_parser_parse_gzipped_buffer(buffer, len, domain); ++ } ++ ++ /* Buffer is cleartext. */ ++ return glade_parser_parse_buffer_internal(buffer, len, domain); ++} ++ ++#endif /* USE_GMARKUP_PARSER */ ++ ++ ++#ifndef USE_GMARKUP_PARSER ++ + static void + dump_widget(xmlNode *parent, GladeWidgetInfo *info, gint indent) + { +@@ -1382,6 +1674,8 @@ + xmlNodeAddContent(widget, " "); + } + ++#endif /* !defined(USE_GMARKUP_PARSER) */ ++ + /** + * glade_interface_dump + * @interface: the GladeInterface +@@ -1390,6 +1684,9 @@ + * This function dumps the contents of a GladeInterface into a file as + * XML. It is intended mainly as a debugging tool. + */ ++ ++#ifndef USE_GMARKUP_PARSER ++ + void + glade_interface_dump(GladeInterface *interface, const gchar *filename) + { +@@ -1428,6 +1725,17 @@ + xmlFreeDoc(doc); + } + ++#else /* defined(USE_GMARKUP_PARSER) */ ++ ++void ++glade_interface_dump(GladeInterface *interface, const gchar *filename) ++{ ++ g_warning("glade_interface_dump() is only available with libxml2."); ++} ++ ++#endif /* USE_GMARKUP_PARSER */ ++ ++ + #if 0 + int + main(int argc, char **argv) { +diff -urN libglade-2.4.2.orig/libglade-2.0.pc.in libglade-2.4.2/libglade-2.0.pc.in +--- libglade-2.4.2.orig/libglade-2.0.pc.in 2001-12-12 15:28:23.000000000 +0100 ++++ libglade-2.4.2/libglade-2.0.pc.in 2005-03-22 01:20:00.000000000 +0100 +@@ -11,7 +11,7 @@ + Name: Libglade + Description: a library for dynamically loading GLADE interface files + Version: @VERSION@ +-Requires: gtk+-2.0 libxml-2.0 ++Requires: gtk+-2.0 @PKGCFG_REQUIRE_LIBXML2@ + Libs: -L${libdir} -lglade-2.0 + Cflags: -I${includedir}/libglade-2.0 + diff --git a/packages/libglade/libglade-2.0.1/.mtn2git_empty b/packages/libglade/libglade-2.0.1/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libglade/libglade-2.0.1/glade-cruft.patch b/packages/libglade/libglade-2.0.1/glade-cruft.patch deleted file mode 100644 index 2edaa729c6..0000000000 --- a/packages/libglade/libglade-2.0.1/glade-cruft.patch +++ /dev/null @@ -1,97 +0,0 @@ ---- configure.in~ 2002-08-29 13:45:44.000000000 +0100 -+++ configure.in 2004-03-15 19:40:58.000000000 +0000 -@@ -84,6 +84,18 @@ - AM_CONDITIONAL(HAVE_PYTHON, $have_python) - AC_SUBST(PYTHON) - -+AC_MSG_CHECKING([for cruft in libgtk]) -+AC_TRY_LINK([ -+#include -+#include -+], [ gtk_tree_get_type (); return 0; ], -+ [ AC_MSG_RESULT(yes) -+ have_cruft=yes ], -+ [ AC_MSG_RESULT(no) -+ AC_DEFINE(DISABLE_CRUFT,,[leave out support for old, broken widgets]) -+ have_cruft=no ]) -+AC_SUBST(DISABLE_CRUFT) -+ - dnl add debugging options ... - changequote(,)dnl - if test "x$GCC" = xyes; then ---- glade/glade-gtk.c~ 2002-07-30 10:10:36.000000000 +0100 -+++ glade/glade-gtk.c 2004-03-15 19:43:46.000000000 +0000 -@@ -211,6 +211,8 @@ - gtk_clist_column_titles_hide (GTK_CLIST (w)); - } - -+#ifndef DISABLE_CRUFT -+ - static void - tree_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -236,6 +238,8 @@ - gtk_tree_set_view_lines (GTK_TREE (w), BOOL (value)); - } - -+#endif -+ - static void - list_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -252,6 +256,7 @@ - gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (w), BOOL (value)); - } - -+#ifndef DISABLE_CRUFT - static void - text_set_text (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -260,6 +265,7 @@ - - gtk_editable_insert_text (GTK_EDITABLE (w), value, -1, &pos); - } -+#endif - - static void - radio_menu_item_set_group (GladeXML *xml, GtkWidget *w, -@@ -1011,13 +1017,17 @@ - glade_register_custom_prop (GTK_TYPE_CLIST, "selection_mode", clist_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CLIST, "shadow_type", clist_set_shadow_type); - glade_register_custom_prop (GTK_TYPE_CLIST, "show_titles", clist_set_show_titles); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TREE, "selection_mode", tree_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_mode", tree_set_view_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_line", tree_set_view_line); -+#endif - glade_register_custom_prop (GTK_TYPE_LIST, "selection_mode", list_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CHECK_MENU_ITEM, "always_show_toggle", - check_menu_item_set_always_show_toggle); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TEXT, "text", text_set_text); -+#endif - glade_register_custom_prop (GTK_TYPE_RADIO_MENU_ITEM, "group", - radio_menu_item_set_group); - glade_register_custom_prop (GTK_TYPE_TOOLBAR, "tooltips", toolbar_set_tooltips); -@@ -1155,8 +1165,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TEAROFF_MENU_ITEM, glade_standard_build_widget, - NULL, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TEXT, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TEXT_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_TIPS_QUERY, glade_standard_build_widget, -@@ -1165,8 +1177,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TOOLBAR, glade_standard_build_widget, - toolbar_build_children, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TREE, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TREE_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_VBUTTON_BOX, glade_standard_build_widget, diff --git a/packages/libglade/libglade-2.0.1/gtk-2.0.m4 b/packages/libglade/libglade-2.0.1/gtk-2.0.m4 deleted file mode 100644 index a0c53ac11f..0000000000 --- a/packages/libglade/libglade-2.0.1/gtk-2.0.m4 +++ /dev/null @@ -1,196 +0,0 @@ -# Configure paths for GTK+ -# Owen Taylor 1997-2001 - -dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) -dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, -dnl pass to pkg-config -dnl -AC_DEFUN(AM_PATH_GTK_2_0, -[dnl -dnl Get the cflags and libraries from pkg-config -dnl -AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program], - , enable_gtktest=yes) - - pkg_config_args=gtk+-2.0 - for module in . $4 - do - case "$module" in - gthread) - pkg_config_args="$pkg_config_args gthread-2.0" - ;; - esac - done - - no_gtk="" - - AC_PATH_PROG(PKG_CONFIG, pkg-config, no) - - if test x$PKG_CONFIG != xno ; then - if pkg-config --atleast-pkgconfig-version 0.7 ; then - : - else - echo *** pkg-config too old; version 0.7 or better required. - no_gtk=yes - PKG_CONFIG=no - fi - else - no_gtk=yes - fi - - min_gtk_version=ifelse([$1], ,2.0.0,$1) - AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version) - - if test x$PKG_CONFIG != xno ; then - ## don't try to run the test against uninstalled libtool libs - if $PKG_CONFIG --uninstalled $pkg_config_args; then - echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" - enable_gtktest=no - fi - - if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then - : - else - no_gtk=yes - fi - fi - - if test x"$no_gtk" = x ; then - GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` - GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` - gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` - gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` - gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` - if test "x$enable_gtktest" = "xyes" ; then - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $GTK_CFLAGS" - LIBS="$GTK_LIBS $LIBS" -dnl -dnl Now check if the installed GTK+ is sufficiently new. (Also sanity -dnl checks the results of pkg-config to some extent) -dnl - rm -f conf.gtktest - AC_TRY_RUN([ -#include -#include -#include - -int -main () -{ - int major, minor, micro; - char *tmp_version; - - system ("touch conf.gtktest"); - - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = g_strdup("$min_gtk_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_gtk_version"); - exit(1); - } - - if ((gtk_major_version != $gtk_config_major_version) || - (gtk_minor_version != $gtk_config_minor_version) || - (gtk_micro_version != $gtk_config_micro_version)) - { - printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", - $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, - gtk_major_version, gtk_minor_version, gtk_micro_version); - printf ("*** was found! If pkg-config was correct, then it is best\n"); - printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); - printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); - printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); - printf("*** required on your system.\n"); - printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); - printf("*** to point to the correct configuration files\n"); - } - else if ((gtk_major_version != GTK_MAJOR_VERSION) || - (gtk_minor_version != GTK_MINOR_VERSION) || - (gtk_micro_version != GTK_MICRO_VERSION)) - { - printf("*** GTK+ header files (version %d.%d.%d) do not match\n", - GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); - printf("*** library (version %d.%d.%d)\n", - gtk_major_version, gtk_minor_version, gtk_micro_version); - } - else - { - if ((gtk_major_version > major) || - ((gtk_major_version == major) && (gtk_minor_version > minor)) || - ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", - gtk_major_version, gtk_minor_version, gtk_micro_version); - printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", - major, minor, micro); - printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); - printf("***\n"); - printf("*** If you have already installed a sufficiently new version, this error\n"); - printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); - printf("*** being found. The easiest way to fix this is to remove the old version\n"); - printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); - printf("*** correct copy of pkg-config. (In this case, you will have to\n"); - printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); - printf("*** so that the correct libraries are found at run-time))\n"); - } - } - return 1; -} -],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - if test "x$no_gtk" = x ; then - AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)) - ifelse([$2], , :, [$2]) - else - AC_MSG_RESULT(no) - if test "$PKG_CONFIG" = "no" ; then - echo "*** A new enough version of pkg-config was not found." - echo "*** See http://pkgconfig.sourceforge.net" - else - if test -f conf.gtktest ; then - : - else - echo "*** Could not run GTK+ test program, checking why..." - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $GTK_CFLAGS" - LIBS="$LIBS $GTK_LIBS" - AC_TRY_LINK([ -#include -#include -], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], - [ echo "*** The test program compiled, but did not run. This usually means" - echo "*** that the run-time linker is not finding GTK+ or finding the wrong" - echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" - echo "*** to the installed location Also, make sure you have run ldconfig if that" - echo "*** is required on your system" - echo "***" - echo "*** If you have an old version installed, it is best to remove it, although" - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], - [ echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."]) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - GTK_CFLAGS="" - GTK_LIBS="" - ifelse([$3], , :, [$3]) - fi - AC_SUBST(GTK_CFLAGS) - AC_SUBST(GTK_LIBS) - rm -f conf.gtktest -]) diff --git a/packages/libglade/libglade-2.4.0/.mtn2git_empty b/packages/libglade/libglade-2.4.0/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libglade/libglade-2.4.0/glade-cruft.patch b/packages/libglade/libglade-2.4.0/glade-cruft.patch deleted file mode 100644 index 0fceccf0c4..0000000000 --- a/packages/libglade/libglade-2.4.0/glade-cruft.patch +++ /dev/null @@ -1,100 +0,0 @@ -diff -ur libglade-2.4.0~/configure.in libglade-2.4.0/configure.in ---- libglade-2.4.0~/configure.in 2004-05-17 12:38:31.000000000 +0100 -+++ libglade-2.4.0/configure.in 2004-07-28 16:53:09.000000000 +0100 -@@ -147,6 +147,18 @@ - AM_CONDITIONAL(HAVE_PYTHON, $have_python) - AC_SUBST(PYTHON) - -+AC_MSG_CHECKING([for cruft in libgtk]) -+AC_TRY_LINK([ -+#include -+#include -+], [ gtk_tree_get_type (); return 0; ], -+ [ AC_MSG_RESULT(yes) -+ have_cruft=yes ], -+ [ AC_MSG_RESULT(no) -+ AC_DEFINE(DISABLE_CRUFT,,[leave out support for old, broken widgets]) -+ have_cruft=no ]) -+AC_SUBST(DISABLE_CRUFT) -+ - dnl add debugging options ... - changequote(,)dnl - if test "x$GCC" = xyes; then -Only in libglade-2.4.0: configure.in.orig -diff -ur libglade-2.4.0~/glade/glade-gtk.c libglade-2.4.0/glade/glade-gtk.c ---- libglade-2.4.0~/glade/glade-gtk.c 2004-03-13 13:47:35.000000000 +0000 -+++ libglade-2.4.0/glade/glade-gtk.c 2004-07-28 16:53:52.000000000 +0100 -@@ -213,6 +213,8 @@ - gtk_clist_column_titles_hide (GTK_CLIST (w)); - } - -+#ifndef DISABLE_CRUFT -+ - static void - tree_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -238,6 +240,8 @@ - gtk_tree_set_view_lines (GTK_TREE (w), BOOL (value)); - } - -+#endif -+ - static void - list_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -254,6 +258,7 @@ - gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (w), BOOL (value)); - } - -+#ifndef DISABLE_CRUFT - static void - text_set_text (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -262,6 +267,7 @@ - - gtk_editable_insert_text (GTK_EDITABLE (w), value, -1, &pos); - } -+#endif - - static void - radio_menu_item_set_group (GladeXML *xml, GtkWidget *w, -@@ -1125,13 +1131,17 @@ - glade_register_custom_prop (GTK_TYPE_CLIST, "selection_mode", clist_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CLIST, "shadow_type", clist_set_shadow_type); - glade_register_custom_prop (GTK_TYPE_CLIST, "show_titles", clist_set_show_titles); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TREE, "selection_mode", tree_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_mode", tree_set_view_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_line", tree_set_view_line); -+#endif - glade_register_custom_prop (GTK_TYPE_LIST, "selection_mode", list_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CHECK_MENU_ITEM, "always_show_toggle", - check_menu_item_set_always_show_toggle); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TEXT, "text", text_set_text); -+#endif - glade_register_custom_prop (GTK_TYPE_RADIO_MENU_ITEM, "group", - radio_menu_item_set_group); - glade_register_custom_prop (GTK_TYPE_TOOLBAR, "tooltips", toolbar_set_tooltips); -@@ -1288,8 +1298,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TEAROFF_MENU_ITEM, glade_standard_build_widget, - NULL, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TEXT, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TEXT_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_TIPS_QUERY, glade_standard_build_widget, -@@ -1304,8 +1316,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TOOL_BUTTON, glade_standard_build_widget, - NULL, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TREE, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TREE_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_VBUTTON_BOX, glade_standard_build_widget, diff --git a/packages/libglade/libglade-2.4.0/no-xml2.patch b/packages/libglade/libglade-2.4.0/no-xml2.patch deleted file mode 100644 index 797599a821..0000000000 --- a/packages/libglade/libglade-2.4.0/no-xml2.patch +++ /dev/null @@ -1,502 +0,0 @@ ---- libglade/libglade-2.0.pc.in 2001-12-12 14:26:54.000000000 +0000 -+++ libglade/libglade-2.0.pc.in 2004-01-12 20:08:06.000000000 +0000 -@@ -11,8 +11,8 @@ - Name: Libglade - Description: a library for dynamically loading GLADE interface files - Version: @VERSION@ --Requires: gtk+-2.0 libxml-2.0 -+Requires: gtk+-2.0 @PKGCFG_REQUIRE_LIBXML2@ - Libs: -L${libdir} -lglade-2.0 - Cflags: -I${includedir}/libglade-2.0 - - ---- libglade/glade/glade-parser.c.orig 2004-02-11 01:26:01.000000000 +0000 -+++ libglade/glade/glade-parser.c 2005-01-01 11:26:37.000000000 +0000 -@@ -34,7 +34,15 @@ - # define dgettext(Domain, String) (String) - #endif - --#include -+#ifdef USE_GMARKUP_PARSER -+# include -+#else -+# include -+#endif -+ -+#ifdef USE_GMARKUP_PARSER -+# define xmlChar gchar -+#endif - - #include "glade-parser.h" - #include "glade-private.h" -@@ -507,7 +515,9 @@ - case PARSER_START: - if (!strcmp(name, "glade-interface")) { - state->state = PARSER_GLADE_INTERFACE; --#if 0 -+ -+#ifndef USE_GMARKUP_PARSER -+ #if 0 - /* check for correct XML namespace */ - for (i = 0; attrs && attrs[i] != NULL; i += 2) { - if (!strcmp(attrs[i], "xmlns") && -@@ -517,7 +527,9 @@ - g_warning("unknown attribute `%s' for ", - attrs[i]); - } -+ #endif - #endif -+ - } else { - g_warning("Expected . Got <%s>.", name); - state->prev_state = state->state; -@@ -1056,12 +1068,18 @@ - } - } - -+#ifndef USE_GMARKUP_PARSER -+ - static xmlEntityPtr - glade_parser_get_entity(GladeParseState *state, const xmlChar *name) - { - return xmlGetPredefinedEntity(name); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_warning(GladeParseState *state, const char *msg, ...) - { -@@ -1072,6 +1090,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_error(GladeParseState *state, const char *msg, ...) - { -@@ -1082,6 +1104,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_fatal_error(GladeParseState *state, const char *msg, ...) - { -@@ -1092,6 +1118,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static xmlSAXHandler glade_parser = { - 0, /* internalSubset */ - 0, /* isStandalone */ -@@ -1119,6 +1149,82 @@ - (fatalErrorSAXFunc)glade_parser_fatal_error, /* fatalError */ - }; - -+#else /* USE_GMARKUP_PARSER */ -+ -+static void -+glade_parser_start_element_wrapper(GMarkupParseContext *context, -+ const gchar *name, -+ const gchar **attr_names, -+ const gchar **attr_values, -+ gpointer state, -+ GError **error) -+{ -+ guint i = 0; -+ -+ /* Pack attribute names/values from two separate -+ * arrays (GMarkupParser style) into one single -+ * array (libxml SAXParser style). This is not -+ * very efficient, but we do it to make the -+ * GMarkupParser code as little invasive as -+ * possible. */ -+ -+ while (attr_names[i] != NULL) { -+ ++i; -+ } -+ -+ if (1) -+ { -+ const gchar *attr[(i*2)+1]; -+ guint j, k; -+ -+ for (j=0, k=0; k < i; j += 2) -+ { -+ attr[j] = attr_names[k]; -+ attr[j+1] = attr_values[k]; -+ ++k; -+ } -+ attr[i*2] = NULL; -+ -+ glade_parser_start_element((GladeParseState*)state, name, attr); -+ } -+} -+ -+static void -+glade_parser_end_element_wrapper(GMarkupParseContext *context, -+ const gchar *name, -+ gpointer state, -+ GError **err) -+{ -+ glade_parser_end_element((GladeParseState*)state, name); -+} -+ -+static void -+glade_parser_characters_wrapper(GMarkupParseContext *context, -+ const gchar *chars, -+ gsize len, -+ gpointer state, -+ GError **err) -+{ -+ glade_parser_characters((GladeParseState*)state, chars, (int) len); -+} -+ -+static void -+glade_parser_error(GMarkupParseContext *context, GError *err, gpointer data) -+{ -+ g_log("Glade-Parser", G_LOG_LEVEL_CRITICAL, "%s", err->message); -+} -+ -+static const GMarkupParser glade_parser = { -+ glade_parser_start_element_wrapper, /* element open */ -+ glade_parser_end_element_wrapper, /* element close */ -+ glade_parser_characters_wrapper, /* text content */ -+ NULL, /* passthrough */ -+ glade_parser_error, /* parse error */ -+}; -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ - static void - widget_info_free(GladeWidgetInfo *info) - { -@@ -1182,6 +1288,9 @@ - * - * Returns: the GladeInterface structure for the XML file. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - GladeInterface * - glade_parser_parse_file(const gchar *file, const gchar *domain) - { -@@ -1213,6 +1322,31 @@ - return state.interface; - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+GladeInterface * -+glade_parser_parse_file(const gchar *file, const gchar *domain) -+{ -+ GladeInterface *interface; -+ GError *err = NULL; -+ gchar *content = NULL; -+ gsize clen; -+ -+ if (!g_file_get_contents(file, &content, &clen, &err)) { -+ g_warning("could not load glade file: %s", err->message); -+ g_error_free(err); -+ return NULL; -+ } -+ -+ interface = glade_parser_parse_buffer(content, (gint) clen, domain); -+ -+ g_free(content); -+ -+ return interface; -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ - /** - * glade_parser_parse_buffer - * @buffer: a buffer in memory containing XML data. -@@ -1228,6 +1362,9 @@ - * - * Returns: the GladeInterface structure for the XML buffer. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - GladeInterface * - glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) - { -@@ -1254,6 +1391,161 @@ - return state.interface; - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+ -+static GladeInterface * -+glade_parser_parse_buffer_internal(const gchar *buffer, gint len, const gchar *domain) -+{ -+ GMarkupParseContext *context; -+ GladeParseState state = { 0 }; -+ GError *err = NULL; -+ -+ state.interface = NULL; -+ if (domain) -+ state.domain = domain; -+ else -+ state.domain = textdomain(NULL); -+ -+ /* FIXME: This strstr() is not safe, as it ignores the len -+ * argument and assumes the buffer is NUL-terminated */ -+ if (strstr(buffer, "message); -+ g_error_free(err); -+ if (state.interface) -+ glade_interface_destroy (state.interface); -+ return NULL; -+ } -+ -+ glade_parser_end_document(&state); -+ -+ if (state.state != PARSER_FINISH) { -+ g_warning("did not finish in PARSER_FINISH state!"); -+ -+ if (state.interface) -+ glade_interface_destroy(state.interface); -+ -+ return NULL; -+ } -+ -+ return state.interface; -+} -+ -+struct _gzip_rfc1952_hdr -+{ -+ guint8 id1, id2, cm, flags; -+ guint32 mtime; -+ guint8 xflags; -+ guint8 os; -+}; -+ -+static GladeInterface * -+glade_parser_parse_gzipped_buffer(const gchar *buffer, gint len, const gchar *domain) -+{ -+ struct _gzip_rfc1952_hdr *hdr = (struct _gzip_rfc1952_hdr*)buffer; -+ struct z_stream_s zstream; -+ GladeInterface *interface; -+ const guint8 *cbuf; /* start of compressed data */ -+ guint8 *decompress_buf; -+ gulong decompress_len = 0; -+ gint ret; -+ -+ g_assert(hdr != NULL && hdr->id1 == 0x1f && hdr->id2 == 0x8b); -+ -+ if (hdr->cm != Z_DEFLATED) { -+ g_warning("Unknown decompression method %u", (guint) hdr->cm); -+ return NULL; -+ } -+ -+ /* Uncompressed size (modulo 2^32) is last -+ * 4 bytes of gzipped file, and little endian. -+ * See RFC 1952 */ -+ decompress_len = GUINT32_FROM_LE(*((guint32*)(((guint8*)buffer) + len - 4))); -+ -+ /* paranoid mode: glade files > 5MB are unlikely */ -+ g_return_val_if_fail(decompress_len < 5*1024*1024, NULL); -+ -+ decompress_buf = g_malloc0(decompress_len + 1); /* +1 for NUL-terminator */ -+ -+ /* find start of compressed data, skipping header stuff */ -+ cbuf = (guint8*)buffer + 10; -+ if (hdr->flags & 0x04) { -+ guint16 xlen = GUINT16_FROM_LE(*((guint16*)cbuf)); -+ cbuf += xlen + 2; -+ } -+ if (hdr->flags & 0x08) { -+ guint16 onamelen = strlen(cbuf); -+ cbuf += onamelen + 1; -+ } -+ if (hdr->flags & 0x10) { -+ guint16 commentlen = strlen(cbuf); -+ cbuf += commentlen + 1; -+ } -+ if (hdr->flags & 0x02) -+ { -+ cbuf += 2; /* skip header CRC16 */ -+ } -+ -+ zstream.next_in = (void*)cbuf; -+ zstream.avail_in = (uLongf) len - ((void*)cbuf-(void*)buffer) - 4 - 4 +1; -+ zstream.next_out = decompress_buf; -+ zstream.avail_out= decompress_len; -+ zstream.zalloc = Z_NULL; -+ zstream.zfree = Z_NULL; -+ zstream.opaque = Z_NULL; -+ -+ ret = inflateInit2(&zstream, -MAX_WBITS); -+ -+ if (ret != Z_OK) { -+ g_warning("inflateInit2() failed. zlib error code: %d", ret); -+ g_free(decompress_buf); -+ return NULL; -+ } -+ -+ ret = inflate(&zstream, Z_FINISH); -+ -+ if (ret != Z_STREAM_END) { -+ g_warning("zlib decompression failed. zlib error code: %d", ret); -+ g_free(decompress_buf); -+ return NULL; -+ } -+ -+ interface = glade_parser_parse_buffer_internal(decompress_buf, decompress_len, domain); -+ -+ g_free(decompress_buf); -+ -+ return interface; -+} -+ -+GladeInterface * -+glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) -+{ -+ g_return_val_if_fail(buffer != NULL, NULL); -+ g_return_val_if_fail(len > 0, NULL); -+ -+ /* Check if buffer is gzipped */ -+ if (buffer[0] == 0x1f && buffer[1] == (gchar)0x8b) { -+ return glade_parser_parse_gzipped_buffer(buffer, len, domain); -+ } -+ -+ /* Buffer is cleartext. */ -+ return glade_parser_parse_buffer_internal(buffer, len, domain); -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - dump_widget(xmlNode *parent, GladeWidgetInfo *info, gint indent) - { -@@ -1373,6 +1665,8 @@ - xmlNodeAddContent(widget, " "); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ - /** - * glade_interface_dump - * @interface: the GladeInterface -@@ -1381,6 +1675,9 @@ - * This function dumps the contents of a GladeInterface into a file as - * XML. It is intended mainly as a debugging tool. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - void - glade_interface_dump(GladeInterface *interface, const gchar *filename) - { -@@ -1419,6 +1716,17 @@ - xmlFreeDoc(doc); - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+void -+glade_interface_dump(GladeInterface *interface, const gchar *filename) -+{ -+ g_warning("glade_interface_dump() is only available with libxml2."); -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ - #if 0 - int - main(int argc, char **argv) { - - ---- libglade-2.4.0/configure.in.orig 2005-01-01 12:23:37.000000000 +0000 -+++ libglade-2.4.0/configure.in 2005-01-01 12:35:31.000000000 +0000 -@@ -48,13 +48,36 @@ - AC_PATH_PROG(PKG_CONFIG, pkg-config, no) - - PKG_CHECK_MODULES(LIBGLADE, [dnl -- libxml-2.0 >= required_libxml_version dnl - atk >= required_atk_version dnl - gtk+-2.0 >= required_gtk_version dnl - glib-2.0 >= required_glib_version]) - AC_SUBST(LIBGLADE_LIBS) - AC_SUBST(LIBGLADE_CFLAGS) - -+ -+disable_xml2=no -+AC_ARG_WITH([libxml2], -+ AC_HELP_STRING([--without-libxml2], [Don't use libxml2, use Glib's GMarkupParser instead]), -+ [disable_xml2=yes], -+ [disable_xml2=no]) -+ -+AC_MSG_CHECKING([if we are using libxml2]) -+if test "x$disable_xml2" == "xno"; then -+ AC_MSG_RESULT(yes) -+ PKG_CHECK_MODULES(XML2, libxml-2.0 >= 2.4.10) -+ PKGCFG_REQUIRE_LIBXML2="libxml-2.0" -+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS $XML2_CFLAGS" -+ LIBGLADE_LIBS="$LIBGLADE_LIBS $XML2_LIBS" -+else -+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS -DUSE_GMARKUP_PARSER" -+ PKGCFG_REQUIRE_LIBXML2="" -+ AC_MSG_RESULT(no) -+fi -+ -+AC_SUBST(XML2_LIBS) -+AC_SUBST(XML2_CFLAGS) -+AC_SUBST(PKGCFG_REQUIRE_LIBXML2) -+ - AC_MSG_CHECKING([for native Win32]) - case "$host" in - *-*-mingw*) -@@ -114,6 +137,21 @@ - fi - fi - -+if test "x$disable_xml2" == "xyes"; then -+ echo "*****************************************************" -+ echo " You chose to disable libxml2 and use Glib's" -+ echo " GMarkupParser instead." -+ echo -+ echo " Please bear in mind that using libglade with" -+ echo " GMarkupParser is an experimental feature only." -+ echo -+ echo " Please post problems or success stories to" -+ echo " the glade-devel mailing list. Thank you." -+ echo "*****************************************************" -+fi -+ -+ -+ - GTK_DOC_CHECK(1.0) - - dnl gettext stuff ... there is no message catalog for libglade -- libglade diff --git a/packages/libglade/libglade-2.4.2/.mtn2git_empty b/packages/libglade/libglade-2.4.2/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libglade/libglade-2.4.2/glade-cruft.patch b/packages/libglade/libglade-2.4.2/glade-cruft.patch deleted file mode 100644 index 0fceccf0c4..0000000000 --- a/packages/libglade/libglade-2.4.2/glade-cruft.patch +++ /dev/null @@ -1,100 +0,0 @@ -diff -ur libglade-2.4.0~/configure.in libglade-2.4.0/configure.in ---- libglade-2.4.0~/configure.in 2004-05-17 12:38:31.000000000 +0100 -+++ libglade-2.4.0/configure.in 2004-07-28 16:53:09.000000000 +0100 -@@ -147,6 +147,18 @@ - AM_CONDITIONAL(HAVE_PYTHON, $have_python) - AC_SUBST(PYTHON) - -+AC_MSG_CHECKING([for cruft in libgtk]) -+AC_TRY_LINK([ -+#include -+#include -+], [ gtk_tree_get_type (); return 0; ], -+ [ AC_MSG_RESULT(yes) -+ have_cruft=yes ], -+ [ AC_MSG_RESULT(no) -+ AC_DEFINE(DISABLE_CRUFT,,[leave out support for old, broken widgets]) -+ have_cruft=no ]) -+AC_SUBST(DISABLE_CRUFT) -+ - dnl add debugging options ... - changequote(,)dnl - if test "x$GCC" = xyes; then -Only in libglade-2.4.0: configure.in.orig -diff -ur libglade-2.4.0~/glade/glade-gtk.c libglade-2.4.0/glade/glade-gtk.c ---- libglade-2.4.0~/glade/glade-gtk.c 2004-03-13 13:47:35.000000000 +0000 -+++ libglade-2.4.0/glade/glade-gtk.c 2004-07-28 16:53:52.000000000 +0100 -@@ -213,6 +213,8 @@ - gtk_clist_column_titles_hide (GTK_CLIST (w)); - } - -+#ifndef DISABLE_CRUFT -+ - static void - tree_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -238,6 +240,8 @@ - gtk_tree_set_view_lines (GTK_TREE (w), BOOL (value)); - } - -+#endif -+ - static void - list_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -254,6 +258,7 @@ - gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (w), BOOL (value)); - } - -+#ifndef DISABLE_CRUFT - static void - text_set_text (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -262,6 +267,7 @@ - - gtk_editable_insert_text (GTK_EDITABLE (w), value, -1, &pos); - } -+#endif - - static void - radio_menu_item_set_group (GladeXML *xml, GtkWidget *w, -@@ -1125,13 +1131,17 @@ - glade_register_custom_prop (GTK_TYPE_CLIST, "selection_mode", clist_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CLIST, "shadow_type", clist_set_shadow_type); - glade_register_custom_prop (GTK_TYPE_CLIST, "show_titles", clist_set_show_titles); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TREE, "selection_mode", tree_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_mode", tree_set_view_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_line", tree_set_view_line); -+#endif - glade_register_custom_prop (GTK_TYPE_LIST, "selection_mode", list_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CHECK_MENU_ITEM, "always_show_toggle", - check_menu_item_set_always_show_toggle); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TEXT, "text", text_set_text); -+#endif - glade_register_custom_prop (GTK_TYPE_RADIO_MENU_ITEM, "group", - radio_menu_item_set_group); - glade_register_custom_prop (GTK_TYPE_TOOLBAR, "tooltips", toolbar_set_tooltips); -@@ -1288,8 +1298,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TEAROFF_MENU_ITEM, glade_standard_build_widget, - NULL, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TEXT, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TEXT_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_TIPS_QUERY, glade_standard_build_widget, -@@ -1304,8 +1316,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TOOL_BUTTON, glade_standard_build_widget, - NULL, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TREE, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TREE_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_VBUTTON_BOX, glade_standard_build_widget, diff --git a/packages/libglade/libglade-2.4.2/no-xml2.patch b/packages/libglade/libglade-2.4.2/no-xml2.patch deleted file mode 100644 index 1c2e215b8d..0000000000 --- a/packages/libglade/libglade-2.4.2/no-xml2.patch +++ /dev/null @@ -1,499 +0,0 @@ -diff -urN libglade-2.4.2.orig/configure.in libglade-2.4.2/configure.in ---- libglade-2.4.2.orig/configure.in 2005-02-11 12:42:58.000000000 +0100 -+++ libglade-2.4.2/configure.in 2005-03-22 01:22:00.000000000 +0100 -@@ -52,11 +52,33 @@ - AC_PATH_PROG(PKG_CONFIG, pkg-config, no) - - PKG_CHECK_MODULES(LIBGLADE, [dnl -- libxml-2.0 >= required_libxml_version dnl - atk >= required_atk_version dnl - gtk+-2.0 >= required_gtk_version dnl - glib-2.0 >= required_glib_version]) - -+disable_xml2=no -+AC_ARG_WITH([libxml2], -+ AC_HELP_STRING([--without-libxml2], [Don't use libxml2, use Glib's GMarkupParser instead]), -+ [disable_xml2=yes], -+ [disable_xml2=no]) -+ -+AC_MSG_CHECKING([if we are using libxml2]) -+if test "x$disable_xml2" == "xno"; then -+ AC_MSG_RESULT(yes) -+ PKG_CHECK_MODULES(XML2, libxml-2.0 >= 2.4.10) -+ PKGCFG_REQUIRE_LIBXML2="libxml-2.0" -+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS $XML2_CFLAGS" -+ LIBGLADE_LIBS="$LIBGLADE_LIBS $XML2_LIBS" -+else -+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS -DUSE_GMARKUP_PARSER" -+ PKGCFG_REQUIRE_LIBXML2="" -+ AC_MSG_RESULT(no) -+fi -+ -+AC_SUBST(XML2_LIBS) -+AC_SUBST(XML2_CFLAGS) -+AC_SUBST(PKGCFG_REQUIRE_LIBXML2) -+ - AC_MSG_CHECKING([for native Win32]) - case "$host" in - *-*-mingw*) -@@ -116,6 +138,21 @@ - fi - fi - -+if test "x$disable_xml2" == "xyes"; then -+ echo "*****************************************************" -+ echo " You chose to disable libxml2 and use Glib's" -+ echo " GMarkupParser instead." -+ echo -+ echo " Please bear in mind that using libglade with" -+ echo " GMarkupParser is an experimental feature only." -+ echo -+ echo " Please post problems or success stories to" -+ echo " the glade-devel mailing list. Thank you." -+ echo "*****************************************************" -+fi -+ -+ -+ - GTK_DOC_CHECK(1.0) - - dnl gettext stuff ... there is no message catalog for libglade -- libglade -diff -urN libglade-2.4.2.orig/glade/glade-parser.c libglade-2.4.2/glade/glade-parser.c ---- libglade-2.4.2.orig/glade/glade-parser.c 2004-11-11 11:56:13.000000000 +0100 -+++ libglade-2.4.2/glade/glade-parser.c 2005-03-22 01:20:00.000000000 +0100 -@@ -34,7 +34,15 @@ - # define dgettext(Domain, String) (String) - #endif - --#include -+#ifdef USE_GMARKUP_PARSER -+# include -+#else -+# include -+#endif -+ -+#ifdef USE_GMARKUP_PARSER -+# define xmlChar gchar -+#endif - - #include "glade-parser.h" - #include "glade-private.h" -@@ -508,7 +516,9 @@ - case PARSER_START: - if (!strcmp(name, "glade-interface")) { - state->state = PARSER_GLADE_INTERFACE; --#if 0 -+ -+#ifndef USE_GMARKUP_PARSER -+ #if 0 - /* check for correct XML namespace */ - for (i = 0; attrs && attrs[i] != NULL; i += 2) { - if (!strcmp(attrs[i], "xmlns") && -@@ -518,7 +528,9 @@ - g_warning("unknown attribute `%s' for ", - attrs[i]); - } -+ #endif - #endif -+ - } else { - g_warning("Expected . Got <%s>.", name); - state->prev_state = state->state; -@@ -1063,12 +1075,18 @@ - } - } - -+#ifndef USE_GMARKUP_PARSER -+ - static xmlEntityPtr - glade_parser_get_entity(GladeParseState *state, const xmlChar *name) - { - return xmlGetPredefinedEntity(name); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_warning(GladeParseState *state, const char *msg, ...) - { -@@ -1079,6 +1097,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_error(GladeParseState *state, const char *msg, ...) - { -@@ -1089,6 +1111,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_fatal_error(GladeParseState *state, const char *msg, ...) - { -@@ -1099,6 +1125,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static xmlSAXHandler glade_parser = { - (internalSubsetSAXFunc)NULL, /* internalSubset */ - (isStandaloneSAXFunc)NULL, /* isStandalone */ -@@ -1126,6 +1156,82 @@ - (fatalErrorSAXFunc)glade_parser_fatal_error, /* fatalError */ - }; - -+#else /* USE_GMARKUP_PARSER */ -+ -+static void -+glade_parser_start_element_wrapper(GMarkupParseContext *context, -+ const gchar *name, -+ const gchar **attr_names, -+ const gchar **attr_values, -+ gpointer state, -+ GError **error) -+{ -+ guint i = 0; -+ -+ /* Pack attribute names/values from two separate -+ * arrays (GMarkupParser style) into one single -+ * array (libxml SAXParser style). This is not -+ * very efficient, but we do it to make the -+ * GMarkupParser code as little invasive as -+ * possible. */ -+ -+ while (attr_names[i] != NULL) { -+ ++i; -+ } -+ -+ if (1) -+ { -+ const gchar *attr[(i*2)+1]; -+ guint j, k; -+ -+ for (j=0, k=0; k < i; j += 2) -+ { -+ attr[j] = attr_names[k]; -+ attr[j+1] = attr_values[k]; -+ ++k; -+ } -+ attr[i*2] = NULL; -+ -+ glade_parser_start_element((GladeParseState*)state, name, attr); -+ } -+} -+ -+static void -+glade_parser_end_element_wrapper(GMarkupParseContext *context, -+ const gchar *name, -+ gpointer state, -+ GError **err) -+{ -+ glade_parser_end_element((GladeParseState*)state, name); -+} -+ -+static void -+glade_parser_characters_wrapper(GMarkupParseContext *context, -+ const gchar *chars, -+ gsize len, -+ gpointer state, -+ GError **err) -+{ -+ glade_parser_characters((GladeParseState*)state, chars, (int) len); -+} -+ -+static void -+glade_parser_error(GMarkupParseContext *context, GError *err, gpointer data) -+{ -+ g_log("Glade-Parser", G_LOG_LEVEL_CRITICAL, "%s", err->message); -+} -+ -+static const GMarkupParser glade_parser = { -+ glade_parser_start_element_wrapper, /* element open */ -+ glade_parser_end_element_wrapper, /* element close */ -+ glade_parser_characters_wrapper, /* text content */ -+ NULL, /* passthrough */ -+ glade_parser_error, /* parse error */ -+}; -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ - static void - widget_info_free(GladeWidgetInfo *info) - { -@@ -1191,6 +1297,9 @@ - * - * Returns: the GladeInterface structure for the XML file. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - GladeInterface * - glade_parser_parse_file(const gchar *file, const gchar *domain) - { -@@ -1222,6 +1331,31 @@ - return state.interface; - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+GladeInterface * -+glade_parser_parse_file(const gchar *file, const gchar *domain) -+{ -+ GladeInterface *interface; -+ GError *err = NULL; -+ gchar *content = NULL; -+ gsize clen; -+ -+ if (!g_file_get_contents(file, &content, &clen, &err)) { -+ g_warning("could not load glade file: %s", err->message); -+ g_error_free(err); -+ return NULL; -+ } -+ -+ interface = glade_parser_parse_buffer(content, (gint) clen, domain); -+ -+ g_free(content); -+ -+ return interface; -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ - /** - * glade_parser_parse_buffer - * @buffer: a buffer in memory containing XML data. -@@ -1237,6 +1371,9 @@ - * - * Returns: the GladeInterface structure for the XML buffer. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - GladeInterface * - glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) - { -@@ -1263,6 +1400,161 @@ - return state.interface; - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+ -+static GladeInterface * -+glade_parser_parse_buffer_internal(const gchar *buffer, gint len, const gchar *domain) -+{ -+ GMarkupParseContext *context; -+ GladeParseState state = { 0 }; -+ GError *err = NULL; -+ -+ state.interface = NULL; -+ if (domain) -+ state.domain = domain; -+ else -+ state.domain = textdomain(NULL); -+ -+ /* FIXME: This strstr() is not safe, as it ignores the len -+ * argument and assumes the buffer is NUL-terminated */ -+ if (strstr(buffer, "message); -+ g_error_free(err); -+ if (state.interface) -+ glade_interface_destroy (state.interface); -+ return NULL; -+ } -+ -+ glade_parser_end_document(&state); -+ -+ if (state.state != PARSER_FINISH) { -+ g_warning("did not finish in PARSER_FINISH state!"); -+ -+ if (state.interface) -+ glade_interface_destroy(state.interface); -+ -+ return NULL; -+ } -+ -+ return state.interface; -+} -+ -+struct _gzip_rfc1952_hdr -+{ -+ guint8 id1, id2, cm, flags; -+ guint32 mtime; -+ guint8 xflags; -+ guint8 os; -+}; -+ -+static GladeInterface * -+glade_parser_parse_gzipped_buffer(const gchar *buffer, gint len, const gchar *domain) -+{ -+ struct _gzip_rfc1952_hdr *hdr = (struct _gzip_rfc1952_hdr*)buffer; -+ struct z_stream_s zstream; -+ GladeInterface *interface; -+ const guint8 *cbuf; /* start of compressed data */ -+ guint8 *decompress_buf; -+ gulong decompress_len = 0; -+ gint ret; -+ -+ g_assert(hdr != NULL && hdr->id1 == 0x1f && hdr->id2 == 0x8b); -+ -+ if (hdr->cm != Z_DEFLATED) { -+ g_warning("Unknown decompression method %u", (guint) hdr->cm); -+ return NULL; -+ } -+ -+ /* Uncompressed size (modulo 2^32) is last -+ * 4 bytes of gzipped file, and little endian. -+ * See RFC 1952 */ -+ decompress_len = GUINT32_FROM_LE(*((guint32*)(((guint8*)buffer) + len - 4))); -+ -+ /* paranoid mode: glade files > 5MB are unlikely */ -+ g_return_val_if_fail(decompress_len < 5*1024*1024, NULL); -+ -+ decompress_buf = g_malloc0(decompress_len + 1); /* +1 for NUL-terminator */ -+ -+ /* find start of compressed data, skipping header stuff */ -+ cbuf = (guint8*)buffer + 10; -+ if (hdr->flags & 0x04) { -+ guint16 xlen = GUINT16_FROM_LE(*((guint16*)cbuf)); -+ cbuf += xlen + 2; -+ } -+ if (hdr->flags & 0x08) { -+ guint16 onamelen = strlen(cbuf); -+ cbuf += onamelen + 1; -+ } -+ if (hdr->flags & 0x10) { -+ guint16 commentlen = strlen(cbuf); -+ cbuf += commentlen + 1; -+ } -+ if (hdr->flags & 0x02) -+ { -+ cbuf += 2; /* skip header CRC16 */ -+ } -+ -+ zstream.next_in = (void*)cbuf; -+ zstream.avail_in = (uLongf) len - ((void*)cbuf-(void*)buffer) - 4 - 4 +1; -+ zstream.next_out = decompress_buf; -+ zstream.avail_out= decompress_len; -+ zstream.zalloc = Z_NULL; -+ zstream.zfree = Z_NULL; -+ zstream.opaque = Z_NULL; -+ -+ ret = inflateInit2(&zstream, -MAX_WBITS); -+ -+ if (ret != Z_OK) { -+ g_warning("inflateInit2() failed. zlib error code: %d", ret); -+ g_free(decompress_buf); -+ return NULL; -+ } -+ -+ ret = inflate(&zstream, Z_FINISH); -+ -+ if (ret != Z_STREAM_END) { -+ g_warning("zlib decompression failed. zlib error code: %d", ret); -+ g_free(decompress_buf); -+ return NULL; -+ } -+ -+ interface = glade_parser_parse_buffer_internal(decompress_buf, decompress_len, domain); -+ -+ g_free(decompress_buf); -+ -+ return interface; -+} -+ -+GladeInterface * -+glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) -+{ -+ g_return_val_if_fail(buffer != NULL, NULL); -+ g_return_val_if_fail(len > 0, NULL); -+ -+ /* Check if buffer is gzipped */ -+ if (buffer[0] == 0x1f && buffer[1] == (gchar)0x8b) { -+ return glade_parser_parse_gzipped_buffer(buffer, len, domain); -+ } -+ -+ /* Buffer is cleartext. */ -+ return glade_parser_parse_buffer_internal(buffer, len, domain); -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - dump_widget(xmlNode *parent, GladeWidgetInfo *info, gint indent) - { -@@ -1382,6 +1674,8 @@ - xmlNodeAddContent(widget, " "); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ - /** - * glade_interface_dump - * @interface: the GladeInterface -@@ -1390,6 +1684,9 @@ - * This function dumps the contents of a GladeInterface into a file as - * XML. It is intended mainly as a debugging tool. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - void - glade_interface_dump(GladeInterface *interface, const gchar *filename) - { -@@ -1428,6 +1725,17 @@ - xmlFreeDoc(doc); - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+void -+glade_interface_dump(GladeInterface *interface, const gchar *filename) -+{ -+ g_warning("glade_interface_dump() is only available with libxml2."); -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ - #if 0 - int - main(int argc, char **argv) { -diff -urN libglade-2.4.2.orig/libglade-2.0.pc.in libglade-2.4.2/libglade-2.0.pc.in ---- libglade-2.4.2.orig/libglade-2.0.pc.in 2001-12-12 15:28:23.000000000 +0100 -+++ libglade-2.4.2/libglade-2.0.pc.in 2005-03-22 01:20:00.000000000 +0100 -@@ -11,7 +11,7 @@ - Name: Libglade - Description: a library for dynamically loading GLADE interface files - Version: @VERSION@ --Requires: gtk+-2.0 libxml-2.0 -+Requires: gtk+-2.0 @PKGCFG_REQUIRE_LIBXML2@ - Libs: -L${libdir} -lglade-2.0 - Cflags: -I${includedir}/libglade-2.0 - diff --git a/packages/libglade/libglade-2.5.1/.mtn2git_empty b/packages/libglade/libglade-2.5.1/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libglade/libglade-2.5.1/glade-cruft.patch b/packages/libglade/libglade-2.5.1/glade-cruft.patch deleted file mode 100644 index 0fceccf0c4..0000000000 --- a/packages/libglade/libglade-2.5.1/glade-cruft.patch +++ /dev/null @@ -1,100 +0,0 @@ -diff -ur libglade-2.4.0~/configure.in libglade-2.4.0/configure.in ---- libglade-2.4.0~/configure.in 2004-05-17 12:38:31.000000000 +0100 -+++ libglade-2.4.0/configure.in 2004-07-28 16:53:09.000000000 +0100 -@@ -147,6 +147,18 @@ - AM_CONDITIONAL(HAVE_PYTHON, $have_python) - AC_SUBST(PYTHON) - -+AC_MSG_CHECKING([for cruft in libgtk]) -+AC_TRY_LINK([ -+#include -+#include -+], [ gtk_tree_get_type (); return 0; ], -+ [ AC_MSG_RESULT(yes) -+ have_cruft=yes ], -+ [ AC_MSG_RESULT(no) -+ AC_DEFINE(DISABLE_CRUFT,,[leave out support for old, broken widgets]) -+ have_cruft=no ]) -+AC_SUBST(DISABLE_CRUFT) -+ - dnl add debugging options ... - changequote(,)dnl - if test "x$GCC" = xyes; then -Only in libglade-2.4.0: configure.in.orig -diff -ur libglade-2.4.0~/glade/glade-gtk.c libglade-2.4.0/glade/glade-gtk.c ---- libglade-2.4.0~/glade/glade-gtk.c 2004-03-13 13:47:35.000000000 +0000 -+++ libglade-2.4.0/glade/glade-gtk.c 2004-07-28 16:53:52.000000000 +0100 -@@ -213,6 +213,8 @@ - gtk_clist_column_titles_hide (GTK_CLIST (w)); - } - -+#ifndef DISABLE_CRUFT -+ - static void - tree_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -238,6 +240,8 @@ - gtk_tree_set_view_lines (GTK_TREE (w), BOOL (value)); - } - -+#endif -+ - static void - list_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -254,6 +258,7 @@ - gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (w), BOOL (value)); - } - -+#ifndef DISABLE_CRUFT - static void - text_set_text (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -262,6 +267,7 @@ - - gtk_editable_insert_text (GTK_EDITABLE (w), value, -1, &pos); - } -+#endif - - static void - radio_menu_item_set_group (GladeXML *xml, GtkWidget *w, -@@ -1125,13 +1131,17 @@ - glade_register_custom_prop (GTK_TYPE_CLIST, "selection_mode", clist_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CLIST, "shadow_type", clist_set_shadow_type); - glade_register_custom_prop (GTK_TYPE_CLIST, "show_titles", clist_set_show_titles); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TREE, "selection_mode", tree_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_mode", tree_set_view_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_line", tree_set_view_line); -+#endif - glade_register_custom_prop (GTK_TYPE_LIST, "selection_mode", list_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CHECK_MENU_ITEM, "always_show_toggle", - check_menu_item_set_always_show_toggle); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TEXT, "text", text_set_text); -+#endif - glade_register_custom_prop (GTK_TYPE_RADIO_MENU_ITEM, "group", - radio_menu_item_set_group); - glade_register_custom_prop (GTK_TYPE_TOOLBAR, "tooltips", toolbar_set_tooltips); -@@ -1288,8 +1298,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TEAROFF_MENU_ITEM, glade_standard_build_widget, - NULL, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TEXT, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TEXT_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_TIPS_QUERY, glade_standard_build_widget, -@@ -1304,8 +1316,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TOOL_BUTTON, glade_standard_build_widget, - NULL, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TREE, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TREE_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_VBUTTON_BOX, glade_standard_build_widget, diff --git a/packages/libglade/libglade-2.5.1/no-deprecation.patch b/packages/libglade/libglade-2.5.1/no-deprecation.patch deleted file mode 100644 index 9ef8f0738e..0000000000 --- a/packages/libglade/libglade-2.5.1/no-deprecation.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- libglade-2.5.1/glade/Makefile.am.old 2006-04-25 21:03:25.000000000 +0100 -+++ libglade-2.5.1/glade/Makefile.am 2006-04-25 21:03:45.000000000 +0100 -@@ -30,7 +30,6 @@ - -I$(top_srcdir) \ - $(LIBGLADE_CFLAGS) \ - -DGLADE_LIBDIR=\""$(libdir)"\" \ -- -DG_DISABLE_DEPRECATED \ - -DGDK_DISABLE_DEPRECATED \ - -DGDK_PIXBUF_DISABLE_DEPRECATED \ - -DGTK_DISABLE_DEPRECATED \ diff --git a/packages/libglade/libglade-2.5.1/no-xml2.patch b/packages/libglade/libglade-2.5.1/no-xml2.patch deleted file mode 100644 index 1c2e215b8d..0000000000 --- a/packages/libglade/libglade-2.5.1/no-xml2.patch +++ /dev/null @@ -1,499 +0,0 @@ -diff -urN libglade-2.4.2.orig/configure.in libglade-2.4.2/configure.in ---- libglade-2.4.2.orig/configure.in 2005-02-11 12:42:58.000000000 +0100 -+++ libglade-2.4.2/configure.in 2005-03-22 01:22:00.000000000 +0100 -@@ -52,11 +52,33 @@ - AC_PATH_PROG(PKG_CONFIG, pkg-config, no) - - PKG_CHECK_MODULES(LIBGLADE, [dnl -- libxml-2.0 >= required_libxml_version dnl - atk >= required_atk_version dnl - gtk+-2.0 >= required_gtk_version dnl - glib-2.0 >= required_glib_version]) - -+disable_xml2=no -+AC_ARG_WITH([libxml2], -+ AC_HELP_STRING([--without-libxml2], [Don't use libxml2, use Glib's GMarkupParser instead]), -+ [disable_xml2=yes], -+ [disable_xml2=no]) -+ -+AC_MSG_CHECKING([if we are using libxml2]) -+if test "x$disable_xml2" == "xno"; then -+ AC_MSG_RESULT(yes) -+ PKG_CHECK_MODULES(XML2, libxml-2.0 >= 2.4.10) -+ PKGCFG_REQUIRE_LIBXML2="libxml-2.0" -+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS $XML2_CFLAGS" -+ LIBGLADE_LIBS="$LIBGLADE_LIBS $XML2_LIBS" -+else -+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS -DUSE_GMARKUP_PARSER" -+ PKGCFG_REQUIRE_LIBXML2="" -+ AC_MSG_RESULT(no) -+fi -+ -+AC_SUBST(XML2_LIBS) -+AC_SUBST(XML2_CFLAGS) -+AC_SUBST(PKGCFG_REQUIRE_LIBXML2) -+ - AC_MSG_CHECKING([for native Win32]) - case "$host" in - *-*-mingw*) -@@ -116,6 +138,21 @@ - fi - fi - -+if test "x$disable_xml2" == "xyes"; then -+ echo "*****************************************************" -+ echo " You chose to disable libxml2 and use Glib's" -+ echo " GMarkupParser instead." -+ echo -+ echo " Please bear in mind that using libglade with" -+ echo " GMarkupParser is an experimental feature only." -+ echo -+ echo " Please post problems or success stories to" -+ echo " the glade-devel mailing list. Thank you." -+ echo "*****************************************************" -+fi -+ -+ -+ - GTK_DOC_CHECK(1.0) - - dnl gettext stuff ... there is no message catalog for libglade -- libglade -diff -urN libglade-2.4.2.orig/glade/glade-parser.c libglade-2.4.2/glade/glade-parser.c ---- libglade-2.4.2.orig/glade/glade-parser.c 2004-11-11 11:56:13.000000000 +0100 -+++ libglade-2.4.2/glade/glade-parser.c 2005-03-22 01:20:00.000000000 +0100 -@@ -34,7 +34,15 @@ - # define dgettext(Domain, String) (String) - #endif - --#include -+#ifdef USE_GMARKUP_PARSER -+# include -+#else -+# include -+#endif -+ -+#ifdef USE_GMARKUP_PARSER -+# define xmlChar gchar -+#endif - - #include "glade-parser.h" - #include "glade-private.h" -@@ -508,7 +516,9 @@ - case PARSER_START: - if (!strcmp(name, "glade-interface")) { - state->state = PARSER_GLADE_INTERFACE; --#if 0 -+ -+#ifndef USE_GMARKUP_PARSER -+ #if 0 - /* check for correct XML namespace */ - for (i = 0; attrs && attrs[i] != NULL; i += 2) { - if (!strcmp(attrs[i], "xmlns") && -@@ -518,7 +528,9 @@ - g_warning("unknown attribute `%s' for ", - attrs[i]); - } -+ #endif - #endif -+ - } else { - g_warning("Expected . Got <%s>.", name); - state->prev_state = state->state; -@@ -1063,12 +1075,18 @@ - } - } - -+#ifndef USE_GMARKUP_PARSER -+ - static xmlEntityPtr - glade_parser_get_entity(GladeParseState *state, const xmlChar *name) - { - return xmlGetPredefinedEntity(name); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_warning(GladeParseState *state, const char *msg, ...) - { -@@ -1079,6 +1097,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_error(GladeParseState *state, const char *msg, ...) - { -@@ -1089,6 +1111,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_fatal_error(GladeParseState *state, const char *msg, ...) - { -@@ -1099,6 +1125,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static xmlSAXHandler glade_parser = { - (internalSubsetSAXFunc)NULL, /* internalSubset */ - (isStandaloneSAXFunc)NULL, /* isStandalone */ -@@ -1126,6 +1156,82 @@ - (fatalErrorSAXFunc)glade_parser_fatal_error, /* fatalError */ - }; - -+#else /* USE_GMARKUP_PARSER */ -+ -+static void -+glade_parser_start_element_wrapper(GMarkupParseContext *context, -+ const gchar *name, -+ const gchar **attr_names, -+ const gchar **attr_values, -+ gpointer state, -+ GError **error) -+{ -+ guint i = 0; -+ -+ /* Pack attribute names/values from two separate -+ * arrays (GMarkupParser style) into one single -+ * array (libxml SAXParser style). This is not -+ * very efficient, but we do it to make the -+ * GMarkupParser code as little invasive as -+ * possible. */ -+ -+ while (attr_names[i] != NULL) { -+ ++i; -+ } -+ -+ if (1) -+ { -+ const gchar *attr[(i*2)+1]; -+ guint j, k; -+ -+ for (j=0, k=0; k < i; j += 2) -+ { -+ attr[j] = attr_names[k]; -+ attr[j+1] = attr_values[k]; -+ ++k; -+ } -+ attr[i*2] = NULL; -+ -+ glade_parser_start_element((GladeParseState*)state, name, attr); -+ } -+} -+ -+static void -+glade_parser_end_element_wrapper(GMarkupParseContext *context, -+ const gchar *name, -+ gpointer state, -+ GError **err) -+{ -+ glade_parser_end_element((GladeParseState*)state, name); -+} -+ -+static void -+glade_parser_characters_wrapper(GMarkupParseContext *context, -+ const gchar *chars, -+ gsize len, -+ gpointer state, -+ GError **err) -+{ -+ glade_parser_characters((GladeParseState*)state, chars, (int) len); -+} -+ -+static void -+glade_parser_error(GMarkupParseContext *context, GError *err, gpointer data) -+{ -+ g_log("Glade-Parser", G_LOG_LEVEL_CRITICAL, "%s", err->message); -+} -+ -+static const GMarkupParser glade_parser = { -+ glade_parser_start_element_wrapper, /* element open */ -+ glade_parser_end_element_wrapper, /* element close */ -+ glade_parser_characters_wrapper, /* text content */ -+ NULL, /* passthrough */ -+ glade_parser_error, /* parse error */ -+}; -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ - static void - widget_info_free(GladeWidgetInfo *info) - { -@@ -1191,6 +1297,9 @@ - * - * Returns: the GladeInterface structure for the XML file. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - GladeInterface * - glade_parser_parse_file(const gchar *file, const gchar *domain) - { -@@ -1222,6 +1331,31 @@ - return state.interface; - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+GladeInterface * -+glade_parser_parse_file(const gchar *file, const gchar *domain) -+{ -+ GladeInterface *interface; -+ GError *err = NULL; -+ gchar *content = NULL; -+ gsize clen; -+ -+ if (!g_file_get_contents(file, &content, &clen, &err)) { -+ g_warning("could not load glade file: %s", err->message); -+ g_error_free(err); -+ return NULL; -+ } -+ -+ interface = glade_parser_parse_buffer(content, (gint) clen, domain); -+ -+ g_free(content); -+ -+ return interface; -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ - /** - * glade_parser_parse_buffer - * @buffer: a buffer in memory containing XML data. -@@ -1237,6 +1371,9 @@ - * - * Returns: the GladeInterface structure for the XML buffer. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - GladeInterface * - glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) - { -@@ -1263,6 +1400,161 @@ - return state.interface; - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+ -+static GladeInterface * -+glade_parser_parse_buffer_internal(const gchar *buffer, gint len, const gchar *domain) -+{ -+ GMarkupParseContext *context; -+ GladeParseState state = { 0 }; -+ GError *err = NULL; -+ -+ state.interface = NULL; -+ if (domain) -+ state.domain = domain; -+ else -+ state.domain = textdomain(NULL); -+ -+ /* FIXME: This strstr() is not safe, as it ignores the len -+ * argument and assumes the buffer is NUL-terminated */ -+ if (strstr(buffer, "message); -+ g_error_free(err); -+ if (state.interface) -+ glade_interface_destroy (state.interface); -+ return NULL; -+ } -+ -+ glade_parser_end_document(&state); -+ -+ if (state.state != PARSER_FINISH) { -+ g_warning("did not finish in PARSER_FINISH state!"); -+ -+ if (state.interface) -+ glade_interface_destroy(state.interface); -+ -+ return NULL; -+ } -+ -+ return state.interface; -+} -+ -+struct _gzip_rfc1952_hdr -+{ -+ guint8 id1, id2, cm, flags; -+ guint32 mtime; -+ guint8 xflags; -+ guint8 os; -+}; -+ -+static GladeInterface * -+glade_parser_parse_gzipped_buffer(const gchar *buffer, gint len, const gchar *domain) -+{ -+ struct _gzip_rfc1952_hdr *hdr = (struct _gzip_rfc1952_hdr*)buffer; -+ struct z_stream_s zstream; -+ GladeInterface *interface; -+ const guint8 *cbuf; /* start of compressed data */ -+ guint8 *decompress_buf; -+ gulong decompress_len = 0; -+ gint ret; -+ -+ g_assert(hdr != NULL && hdr->id1 == 0x1f && hdr->id2 == 0x8b); -+ -+ if (hdr->cm != Z_DEFLATED) { -+ g_warning("Unknown decompression method %u", (guint) hdr->cm); -+ return NULL; -+ } -+ -+ /* Uncompressed size (modulo 2^32) is last -+ * 4 bytes of gzipped file, and little endian. -+ * See RFC 1952 */ -+ decompress_len = GUINT32_FROM_LE(*((guint32*)(((guint8*)buffer) + len - 4))); -+ -+ /* paranoid mode: glade files > 5MB are unlikely */ -+ g_return_val_if_fail(decompress_len < 5*1024*1024, NULL); -+ -+ decompress_buf = g_malloc0(decompress_len + 1); /* +1 for NUL-terminator */ -+ -+ /* find start of compressed data, skipping header stuff */ -+ cbuf = (guint8*)buffer + 10; -+ if (hdr->flags & 0x04) { -+ guint16 xlen = GUINT16_FROM_LE(*((guint16*)cbuf)); -+ cbuf += xlen + 2; -+ } -+ if (hdr->flags & 0x08) { -+ guint16 onamelen = strlen(cbuf); -+ cbuf += onamelen + 1; -+ } -+ if (hdr->flags & 0x10) { -+ guint16 commentlen = strlen(cbuf); -+ cbuf += commentlen + 1; -+ } -+ if (hdr->flags & 0x02) -+ { -+ cbuf += 2; /* skip header CRC16 */ -+ } -+ -+ zstream.next_in = (void*)cbuf; -+ zstream.avail_in = (uLongf) len - ((void*)cbuf-(void*)buffer) - 4 - 4 +1; -+ zstream.next_out = decompress_buf; -+ zstream.avail_out= decompress_len; -+ zstream.zalloc = Z_NULL; -+ zstream.zfree = Z_NULL; -+ zstream.opaque = Z_NULL; -+ -+ ret = inflateInit2(&zstream, -MAX_WBITS); -+ -+ if (ret != Z_OK) { -+ g_warning("inflateInit2() failed. zlib error code: %d", ret); -+ g_free(decompress_buf); -+ return NULL; -+ } -+ -+ ret = inflate(&zstream, Z_FINISH); -+ -+ if (ret != Z_STREAM_END) { -+ g_warning("zlib decompression failed. zlib error code: %d", ret); -+ g_free(decompress_buf); -+ return NULL; -+ } -+ -+ interface = glade_parser_parse_buffer_internal(decompress_buf, decompress_len, domain); -+ -+ g_free(decompress_buf); -+ -+ return interface; -+} -+ -+GladeInterface * -+glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) -+{ -+ g_return_val_if_fail(buffer != NULL, NULL); -+ g_return_val_if_fail(len > 0, NULL); -+ -+ /* Check if buffer is gzipped */ -+ if (buffer[0] == 0x1f && buffer[1] == (gchar)0x8b) { -+ return glade_parser_parse_gzipped_buffer(buffer, len, domain); -+ } -+ -+ /* Buffer is cleartext. */ -+ return glade_parser_parse_buffer_internal(buffer, len, domain); -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - dump_widget(xmlNode *parent, GladeWidgetInfo *info, gint indent) - { -@@ -1382,6 +1674,8 @@ - xmlNodeAddContent(widget, " "); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ - /** - * glade_interface_dump - * @interface: the GladeInterface -@@ -1390,6 +1684,9 @@ - * This function dumps the contents of a GladeInterface into a file as - * XML. It is intended mainly as a debugging tool. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - void - glade_interface_dump(GladeInterface *interface, const gchar *filename) - { -@@ -1428,6 +1725,17 @@ - xmlFreeDoc(doc); - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+void -+glade_interface_dump(GladeInterface *interface, const gchar *filename) -+{ -+ g_warning("glade_interface_dump() is only available with libxml2."); -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ - #if 0 - int - main(int argc, char **argv) { -diff -urN libglade-2.4.2.orig/libglade-2.0.pc.in libglade-2.4.2/libglade-2.0.pc.in ---- libglade-2.4.2.orig/libglade-2.0.pc.in 2001-12-12 15:28:23.000000000 +0100 -+++ libglade-2.4.2/libglade-2.0.pc.in 2005-03-22 01:20:00.000000000 +0100 -@@ -11,7 +11,7 @@ - Name: Libglade - Description: a library for dynamically loading GLADE interface files - Version: @VERSION@ --Requires: gtk+-2.0 libxml-2.0 -+Requires: gtk+-2.0 @PKGCFG_REQUIRE_LIBXML2@ - Libs: -L${libdir} -lglade-2.0 - Cflags: -I${includedir}/libglade-2.0 - diff --git a/packages/libglade/libglade-2.6.2/.mtn2git_empty b/packages/libglade/libglade-2.6.2/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libglade/libglade-2.6.2/glade-cruft.patch b/packages/libglade/libglade-2.6.2/glade-cruft.patch deleted file mode 100644 index 0fceccf0c4..0000000000 --- a/packages/libglade/libglade-2.6.2/glade-cruft.patch +++ /dev/null @@ -1,100 +0,0 @@ -diff -ur libglade-2.4.0~/configure.in libglade-2.4.0/configure.in ---- libglade-2.4.0~/configure.in 2004-05-17 12:38:31.000000000 +0100 -+++ libglade-2.4.0/configure.in 2004-07-28 16:53:09.000000000 +0100 -@@ -147,6 +147,18 @@ - AM_CONDITIONAL(HAVE_PYTHON, $have_python) - AC_SUBST(PYTHON) - -+AC_MSG_CHECKING([for cruft in libgtk]) -+AC_TRY_LINK([ -+#include -+#include -+], [ gtk_tree_get_type (); return 0; ], -+ [ AC_MSG_RESULT(yes) -+ have_cruft=yes ], -+ [ AC_MSG_RESULT(no) -+ AC_DEFINE(DISABLE_CRUFT,,[leave out support for old, broken widgets]) -+ have_cruft=no ]) -+AC_SUBST(DISABLE_CRUFT) -+ - dnl add debugging options ... - changequote(,)dnl - if test "x$GCC" = xyes; then -Only in libglade-2.4.0: configure.in.orig -diff -ur libglade-2.4.0~/glade/glade-gtk.c libglade-2.4.0/glade/glade-gtk.c ---- libglade-2.4.0~/glade/glade-gtk.c 2004-03-13 13:47:35.000000000 +0000 -+++ libglade-2.4.0/glade/glade-gtk.c 2004-07-28 16:53:52.000000000 +0100 -@@ -213,6 +213,8 @@ - gtk_clist_column_titles_hide (GTK_CLIST (w)); - } - -+#ifndef DISABLE_CRUFT -+ - static void - tree_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -238,6 +240,8 @@ - gtk_tree_set_view_lines (GTK_TREE (w), BOOL (value)); - } - -+#endif -+ - static void - list_set_selection_mode (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -254,6 +258,7 @@ - gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (w), BOOL (value)); - } - -+#ifndef DISABLE_CRUFT - static void - text_set_text (GladeXML *xml, GtkWidget *w, - const char *name, const char *value) -@@ -262,6 +267,7 @@ - - gtk_editable_insert_text (GTK_EDITABLE (w), value, -1, &pos); - } -+#endif - - static void - radio_menu_item_set_group (GladeXML *xml, GtkWidget *w, -@@ -1125,13 +1131,17 @@ - glade_register_custom_prop (GTK_TYPE_CLIST, "selection_mode", clist_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CLIST, "shadow_type", clist_set_shadow_type); - glade_register_custom_prop (GTK_TYPE_CLIST, "show_titles", clist_set_show_titles); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TREE, "selection_mode", tree_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_mode", tree_set_view_mode); - glade_register_custom_prop (GTK_TYPE_TREE, "view_line", tree_set_view_line); -+#endif - glade_register_custom_prop (GTK_TYPE_LIST, "selection_mode", list_set_selection_mode); - glade_register_custom_prop (GTK_TYPE_CHECK_MENU_ITEM, "always_show_toggle", - check_menu_item_set_always_show_toggle); -+#ifndef DISABLE_CRUFT - glade_register_custom_prop (GTK_TYPE_TEXT, "text", text_set_text); -+#endif - glade_register_custom_prop (GTK_TYPE_RADIO_MENU_ITEM, "group", - radio_menu_item_set_group); - glade_register_custom_prop (GTK_TYPE_TOOLBAR, "tooltips", toolbar_set_tooltips); -@@ -1288,8 +1298,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TEAROFF_MENU_ITEM, glade_standard_build_widget, - NULL, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TEXT, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TEXT_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_TIPS_QUERY, glade_standard_build_widget, -@@ -1304,8 +1316,10 @@ - glade_standard_build_children, NULL); - glade_register_widget (GTK_TYPE_TOOL_BUTTON, glade_standard_build_widget, - NULL, NULL); -+#ifndef DISABLE_CRUFT - glade_register_widget (GTK_TYPE_TREE, glade_standard_build_widget, - NULL, NULL); -+#endif - glade_register_widget (GTK_TYPE_TREE_VIEW, glade_standard_build_widget, - NULL, NULL); - glade_register_widget (GTK_TYPE_VBUTTON_BOX, glade_standard_build_widget, diff --git a/packages/libglade/libglade-2.6.2/no-xml2.patch b/packages/libglade/libglade-2.6.2/no-xml2.patch deleted file mode 100644 index 1c2e215b8d..0000000000 --- a/packages/libglade/libglade-2.6.2/no-xml2.patch +++ /dev/null @@ -1,499 +0,0 @@ -diff -urN libglade-2.4.2.orig/configure.in libglade-2.4.2/configure.in ---- libglade-2.4.2.orig/configure.in 2005-02-11 12:42:58.000000000 +0100 -+++ libglade-2.4.2/configure.in 2005-03-22 01:22:00.000000000 +0100 -@@ -52,11 +52,33 @@ - AC_PATH_PROG(PKG_CONFIG, pkg-config, no) - - PKG_CHECK_MODULES(LIBGLADE, [dnl -- libxml-2.0 >= required_libxml_version dnl - atk >= required_atk_version dnl - gtk+-2.0 >= required_gtk_version dnl - glib-2.0 >= required_glib_version]) - -+disable_xml2=no -+AC_ARG_WITH([libxml2], -+ AC_HELP_STRING([--without-libxml2], [Don't use libxml2, use Glib's GMarkupParser instead]), -+ [disable_xml2=yes], -+ [disable_xml2=no]) -+ -+AC_MSG_CHECKING([if we are using libxml2]) -+if test "x$disable_xml2" == "xno"; then -+ AC_MSG_RESULT(yes) -+ PKG_CHECK_MODULES(XML2, libxml-2.0 >= 2.4.10) -+ PKGCFG_REQUIRE_LIBXML2="libxml-2.0" -+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS $XML2_CFLAGS" -+ LIBGLADE_LIBS="$LIBGLADE_LIBS $XML2_LIBS" -+else -+ LIBGLADE_CFLAGS="$LIBGLADE_CFLAGS -DUSE_GMARKUP_PARSER" -+ PKGCFG_REQUIRE_LIBXML2="" -+ AC_MSG_RESULT(no) -+fi -+ -+AC_SUBST(XML2_LIBS) -+AC_SUBST(XML2_CFLAGS) -+AC_SUBST(PKGCFG_REQUIRE_LIBXML2) -+ - AC_MSG_CHECKING([for native Win32]) - case "$host" in - *-*-mingw*) -@@ -116,6 +138,21 @@ - fi - fi - -+if test "x$disable_xml2" == "xyes"; then -+ echo "*****************************************************" -+ echo " You chose to disable libxml2 and use Glib's" -+ echo " GMarkupParser instead." -+ echo -+ echo " Please bear in mind that using libglade with" -+ echo " GMarkupParser is an experimental feature only." -+ echo -+ echo " Please post problems or success stories to" -+ echo " the glade-devel mailing list. Thank you." -+ echo "*****************************************************" -+fi -+ -+ -+ - GTK_DOC_CHECK(1.0) - - dnl gettext stuff ... there is no message catalog for libglade -- libglade -diff -urN libglade-2.4.2.orig/glade/glade-parser.c libglade-2.4.2/glade/glade-parser.c ---- libglade-2.4.2.orig/glade/glade-parser.c 2004-11-11 11:56:13.000000000 +0100 -+++ libglade-2.4.2/glade/glade-parser.c 2005-03-22 01:20:00.000000000 +0100 -@@ -34,7 +34,15 @@ - # define dgettext(Domain, String) (String) - #endif - --#include -+#ifdef USE_GMARKUP_PARSER -+# include -+#else -+# include -+#endif -+ -+#ifdef USE_GMARKUP_PARSER -+# define xmlChar gchar -+#endif - - #include "glade-parser.h" - #include "glade-private.h" -@@ -508,7 +516,9 @@ - case PARSER_START: - if (!strcmp(name, "glade-interface")) { - state->state = PARSER_GLADE_INTERFACE; --#if 0 -+ -+#ifndef USE_GMARKUP_PARSER -+ #if 0 - /* check for correct XML namespace */ - for (i = 0; attrs && attrs[i] != NULL; i += 2) { - if (!strcmp(attrs[i], "xmlns") && -@@ -518,7 +528,9 @@ - g_warning("unknown attribute `%s' for ", - attrs[i]); - } -+ #endif - #endif -+ - } else { - g_warning("Expected . Got <%s>.", name); - state->prev_state = state->state; -@@ -1063,12 +1075,18 @@ - } - } - -+#ifndef USE_GMARKUP_PARSER -+ - static xmlEntityPtr - glade_parser_get_entity(GladeParseState *state, const xmlChar *name) - { - return xmlGetPredefinedEntity(name); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_warning(GladeParseState *state, const char *msg, ...) - { -@@ -1079,6 +1097,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_error(GladeParseState *state, const char *msg, ...) - { -@@ -1089,6 +1111,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - glade_parser_fatal_error(GladeParseState *state, const char *msg, ...) - { -@@ -1099,6 +1125,10 @@ - va_end(args); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static xmlSAXHandler glade_parser = { - (internalSubsetSAXFunc)NULL, /* internalSubset */ - (isStandaloneSAXFunc)NULL, /* isStandalone */ -@@ -1126,6 +1156,82 @@ - (fatalErrorSAXFunc)glade_parser_fatal_error, /* fatalError */ - }; - -+#else /* USE_GMARKUP_PARSER */ -+ -+static void -+glade_parser_start_element_wrapper(GMarkupParseContext *context, -+ const gchar *name, -+ const gchar **attr_names, -+ const gchar **attr_values, -+ gpointer state, -+ GError **error) -+{ -+ guint i = 0; -+ -+ /* Pack attribute names/values from two separate -+ * arrays (GMarkupParser style) into one single -+ * array (libxml SAXParser style). This is not -+ * very efficient, but we do it to make the -+ * GMarkupParser code as little invasive as -+ * possible. */ -+ -+ while (attr_names[i] != NULL) { -+ ++i; -+ } -+ -+ if (1) -+ { -+ const gchar *attr[(i*2)+1]; -+ guint j, k; -+ -+ for (j=0, k=0; k < i; j += 2) -+ { -+ attr[j] = attr_names[k]; -+ attr[j+1] = attr_values[k]; -+ ++k; -+ } -+ attr[i*2] = NULL; -+ -+ glade_parser_start_element((GladeParseState*)state, name, attr); -+ } -+} -+ -+static void -+glade_parser_end_element_wrapper(GMarkupParseContext *context, -+ const gchar *name, -+ gpointer state, -+ GError **err) -+{ -+ glade_parser_end_element((GladeParseState*)state, name); -+} -+ -+static void -+glade_parser_characters_wrapper(GMarkupParseContext *context, -+ const gchar *chars, -+ gsize len, -+ gpointer state, -+ GError **err) -+{ -+ glade_parser_characters((GladeParseState*)state, chars, (int) len); -+} -+ -+static void -+glade_parser_error(GMarkupParseContext *context, GError *err, gpointer data) -+{ -+ g_log("Glade-Parser", G_LOG_LEVEL_CRITICAL, "%s", err->message); -+} -+ -+static const GMarkupParser glade_parser = { -+ glade_parser_start_element_wrapper, /* element open */ -+ glade_parser_end_element_wrapper, /* element close */ -+ glade_parser_characters_wrapper, /* text content */ -+ NULL, /* passthrough */ -+ glade_parser_error, /* parse error */ -+}; -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ - static void - widget_info_free(GladeWidgetInfo *info) - { -@@ -1191,6 +1297,9 @@ - * - * Returns: the GladeInterface structure for the XML file. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - GladeInterface * - glade_parser_parse_file(const gchar *file, const gchar *domain) - { -@@ -1222,6 +1331,31 @@ - return state.interface; - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+GladeInterface * -+glade_parser_parse_file(const gchar *file, const gchar *domain) -+{ -+ GladeInterface *interface; -+ GError *err = NULL; -+ gchar *content = NULL; -+ gsize clen; -+ -+ if (!g_file_get_contents(file, &content, &clen, &err)) { -+ g_warning("could not load glade file: %s", err->message); -+ g_error_free(err); -+ return NULL; -+ } -+ -+ interface = glade_parser_parse_buffer(content, (gint) clen, domain); -+ -+ g_free(content); -+ -+ return interface; -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ - /** - * glade_parser_parse_buffer - * @buffer: a buffer in memory containing XML data. -@@ -1237,6 +1371,9 @@ - * - * Returns: the GladeInterface structure for the XML buffer. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - GladeInterface * - glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) - { -@@ -1263,6 +1400,161 @@ - return state.interface; - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+ -+static GladeInterface * -+glade_parser_parse_buffer_internal(const gchar *buffer, gint len, const gchar *domain) -+{ -+ GMarkupParseContext *context; -+ GladeParseState state = { 0 }; -+ GError *err = NULL; -+ -+ state.interface = NULL; -+ if (domain) -+ state.domain = domain; -+ else -+ state.domain = textdomain(NULL); -+ -+ /* FIXME: This strstr() is not safe, as it ignores the len -+ * argument and assumes the buffer is NUL-terminated */ -+ if (strstr(buffer, "message); -+ g_error_free(err); -+ if (state.interface) -+ glade_interface_destroy (state.interface); -+ return NULL; -+ } -+ -+ glade_parser_end_document(&state); -+ -+ if (state.state != PARSER_FINISH) { -+ g_warning("did not finish in PARSER_FINISH state!"); -+ -+ if (state.interface) -+ glade_interface_destroy(state.interface); -+ -+ return NULL; -+ } -+ -+ return state.interface; -+} -+ -+struct _gzip_rfc1952_hdr -+{ -+ guint8 id1, id2, cm, flags; -+ guint32 mtime; -+ guint8 xflags; -+ guint8 os; -+}; -+ -+static GladeInterface * -+glade_parser_parse_gzipped_buffer(const gchar *buffer, gint len, const gchar *domain) -+{ -+ struct _gzip_rfc1952_hdr *hdr = (struct _gzip_rfc1952_hdr*)buffer; -+ struct z_stream_s zstream; -+ GladeInterface *interface; -+ const guint8 *cbuf; /* start of compressed data */ -+ guint8 *decompress_buf; -+ gulong decompress_len = 0; -+ gint ret; -+ -+ g_assert(hdr != NULL && hdr->id1 == 0x1f && hdr->id2 == 0x8b); -+ -+ if (hdr->cm != Z_DEFLATED) { -+ g_warning("Unknown decompression method %u", (guint) hdr->cm); -+ return NULL; -+ } -+ -+ /* Uncompressed size (modulo 2^32) is last -+ * 4 bytes of gzipped file, and little endian. -+ * See RFC 1952 */ -+ decompress_len = GUINT32_FROM_LE(*((guint32*)(((guint8*)buffer) + len - 4))); -+ -+ /* paranoid mode: glade files > 5MB are unlikely */ -+ g_return_val_if_fail(decompress_len < 5*1024*1024, NULL); -+ -+ decompress_buf = g_malloc0(decompress_len + 1); /* +1 for NUL-terminator */ -+ -+ /* find start of compressed data, skipping header stuff */ -+ cbuf = (guint8*)buffer + 10; -+ if (hdr->flags & 0x04) { -+ guint16 xlen = GUINT16_FROM_LE(*((guint16*)cbuf)); -+ cbuf += xlen + 2; -+ } -+ if (hdr->flags & 0x08) { -+ guint16 onamelen = strlen(cbuf); -+ cbuf += onamelen + 1; -+ } -+ if (hdr->flags & 0x10) { -+ guint16 commentlen = strlen(cbuf); -+ cbuf += commentlen + 1; -+ } -+ if (hdr->flags & 0x02) -+ { -+ cbuf += 2; /* skip header CRC16 */ -+ } -+ -+ zstream.next_in = (void*)cbuf; -+ zstream.avail_in = (uLongf) len - ((void*)cbuf-(void*)buffer) - 4 - 4 +1; -+ zstream.next_out = decompress_buf; -+ zstream.avail_out= decompress_len; -+ zstream.zalloc = Z_NULL; -+ zstream.zfree = Z_NULL; -+ zstream.opaque = Z_NULL; -+ -+ ret = inflateInit2(&zstream, -MAX_WBITS); -+ -+ if (ret != Z_OK) { -+ g_warning("inflateInit2() failed. zlib error code: %d", ret); -+ g_free(decompress_buf); -+ return NULL; -+ } -+ -+ ret = inflate(&zstream, Z_FINISH); -+ -+ if (ret != Z_STREAM_END) { -+ g_warning("zlib decompression failed. zlib error code: %d", ret); -+ g_free(decompress_buf); -+ return NULL; -+ } -+ -+ interface = glade_parser_parse_buffer_internal(decompress_buf, decompress_len, domain); -+ -+ g_free(decompress_buf); -+ -+ return interface; -+} -+ -+GladeInterface * -+glade_parser_parse_buffer(const gchar *buffer, gint len, const gchar *domain) -+{ -+ g_return_val_if_fail(buffer != NULL, NULL); -+ g_return_val_if_fail(len > 0, NULL); -+ -+ /* Check if buffer is gzipped */ -+ if (buffer[0] == 0x1f && buffer[1] == (gchar)0x8b) { -+ return glade_parser_parse_gzipped_buffer(buffer, len, domain); -+ } -+ -+ /* Buffer is cleartext. */ -+ return glade_parser_parse_buffer_internal(buffer, len, domain); -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ -+#ifndef USE_GMARKUP_PARSER -+ - static void - dump_widget(xmlNode *parent, GladeWidgetInfo *info, gint indent) - { -@@ -1382,6 +1674,8 @@ - xmlNodeAddContent(widget, " "); - } - -+#endif /* !defined(USE_GMARKUP_PARSER) */ -+ - /** - * glade_interface_dump - * @interface: the GladeInterface -@@ -1390,6 +1684,9 @@ - * This function dumps the contents of a GladeInterface into a file as - * XML. It is intended mainly as a debugging tool. - */ -+ -+#ifndef USE_GMARKUP_PARSER -+ - void - glade_interface_dump(GladeInterface *interface, const gchar *filename) - { -@@ -1428,6 +1725,17 @@ - xmlFreeDoc(doc); - } - -+#else /* defined(USE_GMARKUP_PARSER) */ -+ -+void -+glade_interface_dump(GladeInterface *interface, const gchar *filename) -+{ -+ g_warning("glade_interface_dump() is only available with libxml2."); -+} -+ -+#endif /* USE_GMARKUP_PARSER */ -+ -+ - #if 0 - int - main(int argc, char **argv) { -diff -urN libglade-2.4.2.orig/libglade-2.0.pc.in libglade-2.4.2/libglade-2.0.pc.in ---- libglade-2.4.2.orig/libglade-2.0.pc.in 2001-12-12 15:28:23.000000000 +0100 -+++ libglade-2.4.2/libglade-2.0.pc.in 2005-03-22 01:20:00.000000000 +0100 -@@ -11,7 +11,7 @@ - Name: Libglade - Description: a library for dynamically loading GLADE interface files - Version: @VERSION@ --Requires: gtk+-2.0 libxml-2.0 -+Requires: gtk+-2.0 @PKGCFG_REQUIRE_LIBXML2@ - Libs: -L${libdir} -lglade-2.0 - Cflags: -I${includedir}/libglade-2.0 - diff --git a/packages/libglade/libglade.inc b/packages/libglade/libglade.inc new file mode 100644 index 0000000000..2aa5df7c95 --- /dev/null +++ b/packages/libglade/libglade.inc @@ -0,0 +1,25 @@ +DESCRIPTION = "Runtime support for GTK interface builder" +HOMEPAGE = "http://glade.gnome.org/" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "LGPL" +DEPENDS = "gtk+ gtk-doc" + +inherit autotools pkgconfig + +headers = "glade-build.h glade-init.h glade-parser.h glade-xml.h glade.h" + +do_stage () { + oe_libinstall -a -so -C glade libglade-2.0 ${STAGING_LIBDIR} + + mkdir -p ${STAGING_INCDIR}/libglade-2.0/glade + for i in ${headers}; do + install -m 0644 ${S}/glade/$i ${STAGING_INCDIR}/libglade-2.0/glade/$i + done +} + +PACKAGES += " ${PN}-data" +FILES_${PN} = "${libdir}/lib*.so.*" +FILES_${PN}-data = "${datadir}/xml/libglade/glade-2.0.dtd" +FILES_${PN}-dev += "${bindir}/libglade-convert" +#RDEPENDS_${PN} = "${PN}-data" diff --git a/packages/libglade/libglade_2.0.1.bb b/packages/libglade/libglade_2.0.1.bb index 535396c5a0..ea7446b092 100644 --- a/packages/libglade/libglade_2.0.1.bb +++ b/packages/libglade/libglade_2.0.1.bb @@ -1,27 +1,13 @@ -LICENSE = "LGPL" -DESCRIPTION = "Runtime support for GTK interface builder" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "libxml2 gtk+" +require libglade.inc + +PR = "r1" +DEPENDS += "libxml2" SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/libglade/2.0/libglade-${PV}.tar.bz2 \ file://glade-cruft.patch;patch=1;pnum=0 \ file://gtk-2.0.m4" -inherit autotools pkgconfig - -headers = "glade-build.h glade-init.h glade-parser.h glade-xml.h glade.h" - do_configure_prepend() { install -d m4 install ${WORKDIR}/gtk-2.0.m4 m4/ } - -do_stage () { - oe_libinstall -a -so -C glade libglade-2.0 ${STAGING_LIBDIR} - - mkdir -p ${STAGING_INCDIR}/libglade-2.0/glade - for i in ${headers}; do - install -m 0644 ${S}/glade/$i ${STAGING_INCDIR}/libglade-2.0/glade/$i - done -} diff --git a/packages/libglade/libglade_2.4.0.bb b/packages/libglade/libglade_2.4.0.bb index f1d76b737d..774331719e 100644 --- a/packages/libglade/libglade_2.4.0.bb +++ b/packages/libglade/libglade_2.4.0.bb @@ -1,30 +1,9 @@ -LICENSE = "LGPL" -DESCRIPTION = "Runtime support for GTK interface builder" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "gtk+ gtk-doc" +require libglade.inc -inherit autotools pkgconfig gnome +PR = "r3" -PR = "r2" +inherit gnome SRC_URI += "file://glade-cruft.patch;patch=1 file://no-xml2.patch;patch=1" EXTRA_OECONF += "--without-libxml2" - -PACKAGES += " ${PN}-data" -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-data = "${datadir}/xml/libglade/glade-2.0.dtd" -FILES_${PN}-dev += "${bindir}/libglade-convert" -#RDEPENDS_${PN} = "${PN}-data" - -headers = "glade-build.h glade-init.h glade-parser.h glade-xml.h glade.h" - -do_stage () { - oe_libinstall -a -so -C glade libglade-2.0 ${STAGING_LIBDIR} - - mkdir -p ${STAGING_INCDIR}/libglade-2.0/glade - for i in ${headers}; do - install -m 0644 ${S}/glade/$i ${STAGING_INCDIR}/libglade-2.0/glade/$i - done -} diff --git a/packages/libglade/libglade_2.4.2.bb b/packages/libglade/libglade_2.4.2.bb index dce7e5618d..1565563cdf 100644 --- a/packages/libglade/libglade_2.4.2.bb +++ b/packages/libglade/libglade_2.4.2.bb @@ -1,32 +1,11 @@ -LICENSE = "LGPL" -DESCRIPTION = "Runtime support for GTK interface builder" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "gtk+ gtk-doc" +require libglade.inc -inherit autotools pkgconfig gnome +PR = "r1" -PR = "r0" +inherit gnome SRC_URI += "file://glade-cruft.patch;patch=1 file://no-xml2.patch;patch=1" EXTRA_OECONF += "--without-libxml2" LDFLAGS += "-lz" - -PACKAGES += " ${PN}-data" -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-data = "${datadir}/xml/libglade/glade-2.0.dtd" -FILES_${PN}-dev += "${bindir}/libglade-convert" -#RDEPENDS_${PN} = "${PN}-data" - -headers = "glade-build.h glade-init.h glade-parser.h glade-xml.h glade.h" - -do_stage () { - oe_libinstall -a -so -C glade libglade-2.0 ${STAGING_LIBDIR} - - mkdir -p ${STAGING_INCDIR}/libglade-2.0/glade - for i in ${headers}; do - install -m 0644 ${S}/glade/$i ${STAGING_INCDIR}/libglade-2.0/glade/$i - done -} diff --git a/packages/libglade/libglade_2.5.1.bb b/packages/libglade/libglade_2.5.1.bb index 8d43bc412e..bf6825e03a 100644 --- a/packages/libglade/libglade_2.5.1.bb +++ b/packages/libglade/libglade_2.5.1.bb @@ -1,12 +1,8 @@ -LICENSE = "LGPL" -DESCRIPTION = "Runtime support for GTK interface builder" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "gtk+ gtk-doc" +require libglade.inc -inherit autotools pkgconfig gnome +PR = "r2" -PR = "r1" +inherit gnome SRC_URI += "file://glade-cruft.patch;patch=1 file://no-xml2.patch;patch=1 \ file://no-deprecation.patch;patch=1" @@ -14,20 +10,3 @@ SRC_URI += "file://glade-cruft.patch;patch=1 file://no-xml2.patch;patch=1 \ EXTRA_OECONF += "--without-libxml2" LDFLAGS += "-lz" - -PACKAGES += " ${PN}-data" -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-data = "${datadir}/xml/libglade/glade-2.0.dtd" -FILES_${PN}-dev += "${bindir}/libglade-convert" -#RDEPENDS_${PN} = "${PN}-data" - -headers = "glade-build.h glade-init.h glade-parser.h glade-xml.h glade.h" - -do_stage () { - oe_libinstall -a -so -C glade libglade-2.0 ${STAGING_LIBDIR} - - mkdir -p ${STAGING_INCDIR}/libglade-2.0/glade - for i in ${headers}; do - install -m 0644 ${S}/glade/$i ${STAGING_INCDIR}/libglade-2.0/glade/$i - done -} diff --git a/packages/libglade/libglade_2.6.2.bb b/packages/libglade/libglade_2.6.2.bb index f0450e644d..dace1d3f31 100644 --- a/packages/libglade/libglade_2.6.2.bb +++ b/packages/libglade/libglade_2.6.2.bb @@ -1,32 +1,11 @@ -LICENSE = "LGPL" -DESCRIPTION = "Runtime support for GTK interface builder" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "gtk+ gtk-doc" +require libglade.inc -inherit autotools pkgconfig gnome +PR = "r2" -PR = "r1" +inherit gnome SRC_URI += "file://glade-cruft.patch;patch=1 file://no-xml2.patch;patch=1" EXTRA_OECONF += "--without-libxml2" LDFLAGS += "-lz" - -PACKAGES += " ${PN}-data" -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-data = "${datadir}/xml/libglade/glade-2.0.dtd" -FILES_${PN}-dev += "${bindir}/libglade-convert" -#RDEPENDS_${PN} = "${PN}-data" - -headers = "glade-build.h glade-init.h glade-parser.h glade-xml.h glade.h" - -do_stage () { - oe_libinstall -a -so -C glade libglade-2.0 ${STAGING_LIBDIR} - - mkdir -p ${STAGING_INCDIR}/libglade-2.0/glade - for i in ${headers}; do - install -m 0644 ${S}/glade/$i ${STAGING_INCDIR}/libglade-2.0/glade/$i - done -} -- cgit v1.2.3 From 44ac9d49b4e1360af9a420227472ab87252dfb09 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 6 Feb 2008 16:11:12 +0000 Subject: postgresql: unify and fix SRC_URI. Closes bug 3752. --- packages/postgresql/postgresql.inc | 16 ++++++++++++++++ packages/postgresql/postgresql_8.1.4.bb | 21 ++------------------- packages/postgresql/postgresql_8.1.8.bb | 21 ++------------------- packages/postgresql/postgresql_8.2.4.bb | 23 +++++------------------ 4 files changed, 25 insertions(+), 56 deletions(-) create mode 100644 packages/postgresql/postgresql.inc diff --git a/packages/postgresql/postgresql.inc b/packages/postgresql/postgresql.inc new file mode 100644 index 0000000000..36ec1187aa --- /dev/null +++ b/packages/postgresql/postgresql.inc @@ -0,0 +1,16 @@ +DESCRIPTION = "PostgreSQL is a powerful, open source relational database system." +HOMEPAGE = "http://www.postgresql.com" +LICENSE = "BSD" +DEPENDS = "zlib readline" + +#WARNING: this recipe assumes you have the timezone compiler present in /usr/sbin/zic + +SRC_URI = "ftp://ftp-archives.postgresql.org/pub/source/v${PV}/${P}.tar.bz2" + +inherit autotools pkgconfig + +do_compile_append() { + cp /usr/sbin/zic ${S}/src/timezone/ +} + +FILES_${PN}-doc += "${prefix}/doc/" diff --git a/packages/postgresql/postgresql_8.1.4.bb b/packages/postgresql/postgresql_8.1.4.bb index 083fed5a21..27b067b5cb 100644 --- a/packages/postgresql/postgresql_8.1.4.bb +++ b/packages/postgresql/postgresql_8.1.4.bb @@ -1,20 +1,3 @@ -DESCRIPTION = "PostgreSQL is a powerful, open source relational database system." -HOMEPAGE = "http://www.postgresql.com" -LICENSE = "BSD" -DEPENDS = "zlib readline" - -#WARNING: this recipe assumes you have the timezone compiler present in /usr/sbin/zic - -SRC_URI = "ftp://ftp-archives.postgresql.org/pub/source/v${PV}/${P}.tar.bz2" - - -inherit autotools pkgconfig - -FILES_${PN}-doc += "${prefix}/doc/" - -do_compile_append() { -cp /usr/sbin/zic ${S}/src/timezone/ -} - - +require postgresql.inc +PR = "r1" diff --git a/packages/postgresql/postgresql_8.1.8.bb b/packages/postgresql/postgresql_8.1.8.bb index be44052437..27b067b5cb 100644 --- a/packages/postgresql/postgresql_8.1.8.bb +++ b/packages/postgresql/postgresql_8.1.8.bb @@ -1,20 +1,3 @@ -DESCRIPTION = "PostgreSQL is a powerful, open source relational database system." -HOMEPAGE = "http://www.postgresql.com" -LICENSE = "BSD" -DEPENDS = "zlib readline" - -#WARNING: this recipe assumes you have the timezone compiler present in /usr/sbin/zic - -SRC_URI = "ftp://ftp.us.postgresql.org/pub/mirrors/postgresql/source/v${PV}/${P}.tar.bz2" - - -inherit autotools pkgconfig - -FILES_${PN}-doc += "${prefix}/doc/" - -do_compile_append() { -cp /usr/sbin/zic ${S}/src/timezone/ -} - - +require postgresql.inc +PR = "r1" diff --git a/packages/postgresql/postgresql_8.2.4.bb b/packages/postgresql/postgresql_8.2.4.bb index 3f65a4fd0d..3dc8577c1c 100644 --- a/packages/postgresql/postgresql_8.2.4.bb +++ b/packages/postgresql/postgresql_8.2.4.bb @@ -1,20 +1,7 @@ -DESCRIPTION = "PostgreSQL is a powerful, open source relational database system." -HOMEPAGE = "http://www.postgresql.com" -LICENSE = "BSD" -DEPENDS = "zlib readline" - -#WARNING: this recipe assumes you have the timezone compiler present in /usr/sbin/zic - -SRC_URI = "ftp://ftp.us.postgresql.org/pub/mirrors/postgresql/source/v${PV}/${P}.tar.bz2 \ - file://no-ecpg-test.patch;patch=1" - - -inherit autotools pkgconfig - -FILES_${PN}-doc += "${prefix}/doc/" - -do_compile_append() { -cp /usr/sbin/zic ${S}/src/timezone/ -} +require postgresql.inc +PR = "r1" DEFAULT_PREFERENCE = "-1" + +SRC_URI = "http://ftp.de.postgresql.org/mirror/postgresql/source/v${PV}/${P}.tar.bz2 \ + file://no-ecpg-test.patch;patch=1" -- cgit v1.2.3 From c4b9bd13292f10884ad96854b79b1d22251bd1e7 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 6 Feb 2008 16:36:16 +0000 Subject: contrib/image-convert: Add scripts to convert FS images to different formats. * Per RFC on the list. --- contrib/image-convert/.mtn2git_empty | 0 contrib/image-convert/README | 5 +++++ contrib/image-convert/cpio2tar | 9 +++++++++ contrib/image-convert/tar2ext2 | 25 +++++++++++++++++++++++++ contrib/image-convert/tar2ext2.mount | 25 +++++++++++++++++++++++++ contrib/image-convert/tar2jffs | 8 ++++++++ 6 files changed, 72 insertions(+) create mode 100644 contrib/image-convert/.mtn2git_empty create mode 100644 contrib/image-convert/README create mode 100755 contrib/image-convert/cpio2tar create mode 100755 contrib/image-convert/tar2ext2 create mode 100755 contrib/image-convert/tar2ext2.mount create mode 100755 contrib/image-convert/tar2jffs diff --git a/contrib/image-convert/.mtn2git_empty b/contrib/image-convert/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/contrib/image-convert/README b/contrib/image-convert/README new file mode 100644 index 0000000000..9daca60703 --- /dev/null +++ b/contrib/image-convert/README @@ -0,0 +1,5 @@ +This directory contains scripts to convert (root) filesystem images from one +format to another. While OpenEmbedded has extensive support for generating +images in various formats, sometimes it may be useful/needed to convert +already existing image. + diff --git a/contrib/image-convert/cpio2tar b/contrib/image-convert/cpio2tar new file mode 100755 index 0000000000..7f2c92fe26 --- /dev/null +++ b/contrib/image-convert/cpio2tar @@ -0,0 +1,9 @@ +#!/bin/sh + +STAGING= #~/linux-ppc/build-oe-angstrom/tmp/staging/i686-linux/bin/ + +${STAGING}fakeroot bash -c " \ +rm -rf scratch; mkdir scratch; \ +cd scratch; gzip -d -c ../$1 | cpio -i --make-directories; \ +cd ..; \ +tar -cj -C scratch -f $(basename $1 .cpio.gz).tar.bz2 ." diff --git a/contrib/image-convert/tar2ext2 b/contrib/image-convert/tar2ext2 new file mode 100755 index 0000000000..d5756a4733 --- /dev/null +++ b/contrib/image-convert/tar2ext2 @@ -0,0 +1,25 @@ +#!/bin/sh + +if [ $# -ne 2 ]; then + echo "Usage: $0 " + exit +fi + +ext=`echo $1 | sed -r -e 's/.+\.([^.]+\.[^.]+)/\1/'` +base=$(basename $1 .$ext) +dir=$(dirname $1) + +if [ "$ext" == "tar.bz2" ]; then + uncompress=j +else + uncompress=z +fi + +rm -rf mnt +mkdir -p mnt + +fakeroot bash -c "\ +tar -x$uncompress -f $1 -C mnt; \ +genext2fs -d mnt -b $(($2 * 1024)) $dir/$base.img; \ +rm -rf mnt; \ +" diff --git a/contrib/image-convert/tar2ext2.mount b/contrib/image-convert/tar2ext2.mount new file mode 100755 index 0000000000..7e23098c4d --- /dev/null +++ b/contrib/image-convert/tar2ext2.mount @@ -0,0 +1,25 @@ +#!/bin/sh + +if [ $# -ne 2 ]; then + echo "Usage: $0 " + exit +fi + +ext=`echo $1 | sed -r -e 's/.+\.([^.]+\.[^.]+)/\1/'` +base=$(basename $1 .$ext) +if [ "$ext" == "tar.bz2" ]; then + uncompress=j +else + uncompress=z +fi + +dd if=/dev/zero of=$base.img bs=1M count=$2 +mkfs.ext2 -F -m1 $base.img + +mkdir -p mnt +mount -o loop $base.img mnt + +tar -x$uncompress -f $1 -C mnt + +umount mnt +rm -rf mnt diff --git a/contrib/image-convert/tar2jffs b/contrib/image-convert/tar2jffs new file mode 100755 index 0000000000..7bf158e4a5 --- /dev/null +++ b/contrib/image-convert/tar2jffs @@ -0,0 +1,8 @@ +#!/bin/sh + +STAGING= #~/linux-ppc/build-oe-angstrom/tmp/staging/i686-linux/bin/ + +${STAGING}fakeroot bash -c " \ +rm -rf scratch; mkdir scratch; \ +tar -xj -f $1 -C scratch; \ +${STAGING}mkfs.jffs2 -x lzo --root=scratch --faketime --output=$(dirname $1)/$(basename $1 .tar.bz2).jffs2" -- cgit v1.2.3 From 670cceb7f604c6ad6edf47431326434574fbf114 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 6 Feb 2008 16:41:44 +0000 Subject: sane-srcrevs: bump freesmartphone.org stuff --- conf/distro/include/sane-srcrevs.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index c7b8cbb478..a4da94808c 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -26,7 +26,7 @@ SRCREV_pn-fstests ?= "204" SRCREV_pn-gconf-dbus ?= "606" SRCREV_pn-gnuradio ?= "6377" SRCREV_pn-gpe-contacts ?= "9312" -SRCREV_pn-gsm0710muxd ?= "42" +SRCREV_pn-gsm0710muxd ?= "70" SRCREV_pn-gtkhtml2 ?= "1158" SRCREV_pn-gypsy ?= "56" SRCREV_pn-hildon-1 ?= "14429" @@ -124,7 +124,7 @@ SRCREV_pn-opkg-native ?= "4019" SRCREV_pn-oprofileui ?= "160" SRCREV_pn-psplash ?= "249" SRCREV_pn-python-formencode = "3148" -SRCREV_pn-python-fso-pyproto = "49" +SRCREV_pn-python-fso-pyproto = "70" SRCREV_pn-python-gsmd = "127" SRCREV_pn-settings-daemon ?= "1755" SRCREV_pn-sjf2410-linux-native ?= "933" -- cgit v1.2.3 From 0f15c19f5fb6095a01ceb45ea2e7d181ecbf8a40 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 6 Feb 2008 18:02:45 +0000 Subject: initramfs-*-image.bb: Add better comments what each image does. --- packages/images/initramfs-bootmenu-image.bb | 3 ++- packages/images/initramfs-image.bb | 4 +++- packages/images/initramfs-minimal-image.bb | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/images/initramfs-bootmenu-image.bb b/packages/images/initramfs-bootmenu-image.bb index 237aecb621..b94cc232cd 100644 --- a/packages/images/initramfs-bootmenu-image.bb +++ b/packages/images/initramfs-bootmenu-image.bb @@ -1,4 +1,5 @@ -# Sample initramfs image +# initramfs image with interactive boot menu allowing to select rootfs location +# from choices of block devices, loopback images and NFS. IMAGE_INSTALL = "busybox-static initramfs-module-bootmenu initramfs-module-check-modules" IMAGE_LINGUAS = "" diff --git a/packages/images/initramfs-image.bb b/packages/images/initramfs-image.bb index 3103b9f765..162e6676d7 100644 --- a/packages/images/initramfs-image.bb +++ b/packages/images/initramfs-image.bb @@ -1,4 +1,6 @@ -# Sample initramfs image +# initramfs image allowing to boot from location as specified on kernel +# command line, from teh choices of block device, loop back images (including +# recursive) and NFS. IMAGE_INSTALL = "initramfs-module-block initramfs-module-loop initramfs-module-nfs" IMAGE_LINGUAS = "" diff --git a/packages/images/initramfs-minimal-image.bb b/packages/images/initramfs-minimal-image.bb index d696468913..cb323ddd50 100644 --- a/packages/images/initramfs-minimal-image.bb +++ b/packages/images/initramfs-minimal-image.bb @@ -1,4 +1,4 @@ -# Sample initramfs image +# Sample initramfs image, very minimal IMAGE_INSTALL = "initramfs-module-nfs busybox-static" -- cgit v1.2.3 From 182065fd7d66b9eb9480913c99f39428ef657c9a Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 6 Feb 2008 22:37:08 +0000 Subject: python 2.5.1 sitecustomize.py now saves the history in $HOME, not in /tmp --- packages/python/python-2.5.1/sitecustomize.py | 6 +++--- packages/python/python_2.5.1.bb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/python/python-2.5.1/sitecustomize.py b/packages/python/python-2.5.1/sitecustomize.py index b5e78d3200..4c0ba3f0da 100644 --- a/packages/python/python-2.5.1/sitecustomize.py +++ b/packages/python/python-2.5.1/sitecustomize.py @@ -7,11 +7,11 @@ # * load command line history on startup # * save command line history on exit -HISTORY_FILENAME = "/tmp/python-history-file.txt" +import os def __exithandler(): try: - readline.write_history_file( HISTORY_FILENAME ) + readline.write_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) ) except IOError: pass @@ -22,7 +22,7 @@ def __registerExitHandler(): def __enableReadlineSupport(): readline.parse_and_bind("tab: complete") try: - readline.read_history_file( "/tmp/python-history-file.txt" ) + readline.read_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) ) except IOError: pass diff --git a/packages/python/python_2.5.1.bb b/packages/python/python_2.5.1.bb index b274b0d7f9..668c2a7833 100644 --- a/packages/python/python_2.5.1.bb +++ b/packages/python/python_2.5.1.bb @@ -7,7 +7,7 @@ DEPENDS = "python-native readline zlib gdbm openssl sqlite3 tcl tk" DEPENDS_sharprom = "python-native readline zlib gdbm openssl" # NOTE: Keep the digit in sync with BASEREV in contrib/generate-manifest-2.5.py -PR = "ml7" +PR = "ml8" PYTHON_MAJMIN = "2.5" -- cgit v1.2.3 From d59865dc36eff66b6271bd97c1e21e75f4161701 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 6 Feb 2008 23:20:48 +0000 Subject: gsm0710muxd svn send SIGHUP to dbus to make it reread its configuration files --- packages/freesmartphone/gsm0710muxd_svn.bb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/freesmartphone/gsm0710muxd_svn.bb b/packages/freesmartphone/gsm0710muxd_svn.bb index f451f7814c..0849b55bbc 100644 --- a/packages/freesmartphone/gsm0710muxd_svn.bb +++ b/packages/freesmartphone/gsm0710muxd_svn.bb @@ -4,7 +4,7 @@ SECTION = "console/network" DEPENDS = "intltool-native dbus" LICENSE = "GPL" PV = "0.0+svnr${SRCREV}" -PR = "r1" +PR = "r2" SRC_URI = "svn://projects.linuxtogo.org/svn/smartphones/trunk/software;module=gsm0710muxd" S = "${WORKDIR}/gsm0710muxd" @@ -18,3 +18,13 @@ do_install_append() { chmod a+rx ${D}${sysconfdir}/init.d/gsm0710muxd } +pkg_postinst_${PN}() { + # can't do this offline + if [ "x$D" != "x" ]; then + exit 1 + fi + # reload dbus configuration files + for i in `pidof dbus-daemon`; do + kill -SIGHUP $i + done +} -- cgit v1.2.3 From fe97c17e149bcdf3248ca245c9041379c48cece3 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Thu, 7 Feb 2008 00:28:46 +0000 Subject: mtpaint: The configure script uses bashisms, so execute it using bash --- packages/mtpaint/mtpaint_3.02.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mtpaint/mtpaint_3.02.bb b/packages/mtpaint/mtpaint_3.02.bb index 5add7e437f..fea8299534 100644 --- a/packages/mtpaint/mtpaint_3.02.bb +++ b/packages/mtpaint/mtpaint_3.02.bb @@ -2,11 +2,12 @@ DESCRIPTION = "mtPaint is a simple painting program" SECTION = "x11/graphics" DEPENDS = "gtk+ jpeg" HOMEPAGE = "http://mtpaint.sf.net" +PR = "r1" SRC_URI = "${SOURCEFORGE_MIRROR}/mtpaint/mtpaint-3.02.tar.bz2" do_configure() { - ./configure gtk2 + /bin/bash ./configure gtk2 cat > _conf.txt < Date: Thu, 7 Feb 2008 08:23:17 +0000 Subject: linux-2.6.23/mpc8313e-rdb/defconfig: build USB audio and lm75 modules * build kernel module for USB audio support * build kernel module for the lm75 temperature sensor --- packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig | 125 ++++++++++++++++++++- 1 file changed, 121 insertions(+), 4 deletions(-) diff --git a/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig b/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig index be9a93bc54..3cc17679c1 100644 --- a/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig +++ b/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.23 -# Wed Dec 5 10:34:37 2007 +# Mon Dec 17 17:18:08 2007 # # CONFIG_PPC64 is not set @@ -1227,7 +1227,7 @@ CONFIG_HWMON=y # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_LM63 is not set # CONFIG_SENSORS_LM70 is not set -# CONFIG_SENSORS_LM75 is not set +CONFIG_SENSORS_LM75=m # CONFIG_SENSORS_LM77 is not set # CONFIG_SENSORS_LM78 is not set # CONFIG_SENSORS_LM80 is not set @@ -1289,7 +1289,124 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m # # Sound # -# CONFIG_SOUND is not set +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_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_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# ALSA PowerMac devices +# + +# +# ALSA PowerPC devices +# + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +# 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_HID_SUPPORT=y CONFIG_HID=y # CONFIG_HID_DEBUG is not set @@ -1323,7 +1440,7 @@ CONFIG_USB_DEVICE_CLASS=y # USB Host Controller Drivers # CONFIG_USB_EHCI_HCD=y -# CONFIG_USB_EHCI_SPLIT_ISO is not set +CONFIG_USB_EHCI_SPLIT_ISO=y CONFIG_USB_EHCI_ROOT_HUB_TT=y # CONFIG_USB_EHCI_TT_NEWSCHED is not set CONFIG_USB_EHCI_FSL=y -- cgit v1.2.3 From 2bdd47b45bd109d21ab5affd23114157d9f963f7 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 7 Feb 2008 09:49:42 +0000 Subject: linux_2.6.23.bb: add flags for mpc8313e-rdb device tree generation --- packages/linux/linux_2.6.23.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb index 5322c51211..f754e6be83 100644 --- a/packages/linux/linux_2.6.23.bb +++ b/packages/linux/linux_2.6.23.bb @@ -10,7 +10,7 @@ DEFAULT_PREFERENCE_avr32 = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" DEPENDS_append_mpc8323e-rdb = " dtc-native" -PR = "r10" +PR = "r11" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ file://binutils-buildid-arm.patch;patch=1 \ @@ -55,6 +55,7 @@ CMDLINE_cm-x270 = "console=${CMX270_CONSOLE_SERIAL_PORT},38400 monitor=8 bpp=16 DEVICETREE_mpc8313e-rdb = "arch/${ARCH}/boot/dts/mpc8313erdb.dts" DEVICETREE_mpc8323e-rdb = "arch/${ARCH}/boot/dts/mpc832x_rdb.dts" +DEVICETREE_FLAGS_mpc8313e-rdb = "-R 8 -S 0x3000" FILES_kernel-image_cm-x270 = "" @@ -95,7 +96,7 @@ python do_compulab_image() { do_devicetree_image() { if test -n "${DEVICETREE}" ; then - dtc -I dts -O dtb -o ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb ${DEVICETREE} + dtc -I dts -O dtb ${DEVICETREE_FLAGS} -o ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb ${DEVICETREE} cd ${DEPLOY_DIR_IMAGE} rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.dtb -- cgit v1.2.3 From dc8c56a49e2c4830990dea6d174a7b3fcd07db98 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 7 Feb 2008 10:01:51 +0000 Subject: vorbis-tools_1.1.1.bb: package version 1.1.1 of vorbis-tools --- .../vorbis-tools/vorbis-tools-1.1.1/.mtn2git_empty | 0 .../remove-deprecated-curl-option.patch | 12 ++++++++++++ packages/vorbis-tools/vorbis-tools_1.1.1.bb | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 packages/vorbis-tools/vorbis-tools-1.1.1/.mtn2git_empty create mode 100644 packages/vorbis-tools/vorbis-tools-1.1.1/remove-deprecated-curl-option.patch create mode 100644 packages/vorbis-tools/vorbis-tools_1.1.1.bb diff --git a/packages/vorbis-tools/vorbis-tools-1.1.1/.mtn2git_empty b/packages/vorbis-tools/vorbis-tools-1.1.1/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/vorbis-tools/vorbis-tools-1.1.1/remove-deprecated-curl-option.patch b/packages/vorbis-tools/vorbis-tools-1.1.1/remove-deprecated-curl-option.patch new file mode 100644 index 0000000000..5c52ef1b0d --- /dev/null +++ b/packages/vorbis-tools/vorbis-tools-1.1.1/remove-deprecated-curl-option.patch @@ -0,0 +1,12 @@ +diff -urN vorbis-tools-1.1.1.orig/ogg123/http_transport.c vorbis-tools-1.1.1/ogg123/http_transport.c +--- vorbis-tools-1.1.1.orig/ogg123/http_transport.c 2005-06-13 15:11:44.000000000 +0200 ++++ vorbis-tools-1.1.1/ogg123/http_transport.c 2007-12-19 10:40:19.000000000 +0100 +@@ -116,7 +116,7 @@ + if (inputOpts.ProxyTunnel) + curl_easy_setopt (handle, CURLOPT_HTTPPROXYTUNNEL, inputOpts.ProxyTunnel); + */ +- curl_easy_setopt(handle, CURLOPT_MUTE, 1); ++ /* curl_easy_setopt(handle, CURLOPT_MUTE, 1); */ + curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, private->error); + curl_easy_setopt(handle, CURLOPT_PROGRESSFUNCTION, progress_callback); + curl_easy_setopt(handle, CURLOPT_PROGRESSDATA, private); diff --git a/packages/vorbis-tools/vorbis-tools_1.1.1.bb b/packages/vorbis-tools/vorbis-tools_1.1.1.bb new file mode 100644 index 0000000000..01fc248dd1 --- /dev/null +++ b/packages/vorbis-tools/vorbis-tools_1.1.1.bb @@ -0,0 +1,21 @@ +DESCRIPTION = "vorbis-tools contains oggenc (an encoder), ogg123 (a playback tool), \ +ogginfo (displays ogg information), vcut (ogg file splitter), and \ +vorbiscomment (ogg comment editor)." +LICENSE = "GPL" +DEPENDS = "libogg libvorbis libao curl" +SECTION = "console/multimedia" + +SRC_URI = "http://downloads.xiph.org/releases/vorbis/vorbis-tools-${PV}.tar.gz \ + file://remove-deprecated-curl-option.patch;patch=1" + +inherit autotools + +EXTRA_OECONF = "--without-flac --without-speex \ + --with-ogg-libraries=${STAGING_LIBDIR}/ \ + --with-ogg-includes=${STAGING_INCDIR}/ \ + --with-vorbis-libraries=${STAGING_LIBDIR}/ \ + --with-vorbis-includes=${STAGING_INCDIR}/ \ + --with-ao-libraries=${STAGING_LIBDIR}/ \ + --with-ao-includes=${STAGING_INCDIR}/ \ + --with-curl-libraries=${STAGING_LIBDIR}/ \ + --with-curl-includes=${STAGING_INCDIR}/" -- cgit v1.2.3 From db2766e8f1ce9c29f3ce31c18816402bde6519f2 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 7 Feb 2008 10:04:44 +0000 Subject: u-boot-1.3.1: add patches for mpc8313e-rdb nand & autoboot --- .../u-boot-1.3.1/mpc8313e-rdb-autoboot.patch | 12 + .../u-boot/u-boot-1.3.1/mpc8313e-rdb-nand.patch | 895 +++++++++++++++++++++ 2 files changed, 907 insertions(+) create mode 100644 packages/u-boot/u-boot-1.3.1/mpc8313e-rdb-autoboot.patch create mode 100644 packages/u-boot/u-boot-1.3.1/mpc8313e-rdb-nand.patch diff --git a/packages/u-boot/u-boot-1.3.1/mpc8313e-rdb-autoboot.patch b/packages/u-boot/u-boot-1.3.1/mpc8313e-rdb-autoboot.patch new file mode 100644 index 0000000000..ffca5a35c7 --- /dev/null +++ b/packages/u-boot/u-boot-1.3.1/mpc8313e-rdb-autoboot.patch @@ -0,0 +1,12 @@ +diff -urN u-boot-1.3.1.orig/include/configs/MPC8313ERDB.h u-boot-1.3.1/include/configs/MPC8313ERDB.h +--- u-boot-1.3.1.orig/include/configs/MPC8313ERDB.h 2007-12-06 10:21:19.000000000 +0100 ++++ u-boot-1.3.1/include/configs/MPC8313ERDB.h 2008-01-31 17:38:10.000000000 +0100 +@@ -522,7 +522,7 @@ + #define CONFIG_FDTFILE mpc8313erdb.dtb + + #define CONFIG_LOADADDR 200000 /* default location for tftp and bootm */ +-#define CONFIG_BOOTDELAY -1 /* -1 disables auto-boot */ ++#define CONFIG_BOOTDELAY 3 /* autoboot after 3 seconds */ + #define CONFIG_BAUDRATE 115200 + + #define XMK_STR(x) #x diff --git a/packages/u-boot/u-boot-1.3.1/mpc8313e-rdb-nand.patch b/packages/u-boot/u-boot-1.3.1/mpc8313e-rdb-nand.patch new file mode 100644 index 0000000000..e653b75fb9 --- /dev/null +++ b/packages/u-boot/u-boot-1.3.1/mpc8313e-rdb-nand.patch @@ -0,0 +1,895 @@ +diff -urN u-boot-1.3.1.orig/board/freescale/mpc8313erdb/Makefile u-boot-1.3.1/board/freescale/mpc8313erdb/Makefile +--- u-boot-1.3.1.orig/board/freescale/mpc8313erdb/Makefile 2007-12-06 10:21:19.000000000 +0100 ++++ u-boot-1.3.1/board/freescale/mpc8313erdb/Makefile 2008-01-31 17:35:43.000000000 +0100 +@@ -25,7 +25,7 @@ + + LIB = $(obj)lib$(BOARD).a + +-COBJS := $(BOARD).o sdram.o ++COBJS := $(BOARD).o sdram.o nand.o + + SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) + OBJS := $(addprefix $(obj),$(COBJS)) +diff -urN u-boot-1.3.1.orig/board/freescale/mpc8313erdb/nand.c u-boot-1.3.1/board/freescale/mpc8313erdb/nand.c +--- u-boot-1.3.1.orig/board/freescale/mpc8313erdb/nand.c 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.3.1/board/freescale/mpc8313erdb/nand.c 2008-01-31 17:35:26.000000000 +0100 +@@ -0,0 +1,868 @@ ++/* ++ * Copyright (C) Freescale Semiconductor, Inc. 2006. ++ * ++ * Initialized by Nick.Spence@freescale.com ++ * Wilson.Lo@freescale.com ++ * ++ * See file CREDITS for list of people who contributed to this ++ * project. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++ ++#include ++ ++#if defined(CONFIG_CMD_NAND) ++#if defined(CFG_NAND_LEGACY) ++ #error "U-Boot legacy NAND commands not supported." ++#else ++ ++#include ++#include ++#include ++ ++#undef CFG_FCM_DEBUG ++#define CFG_FCM_DEBUG_LVL 1 ++#ifdef CFG_FCM_DEBUG ++#define FCM_DEBUG(n, args...) \ ++ do { \ ++ if (n <= (CFG_FCM_DEBUG_LVL + 0)) \ ++ printf(args); \ ++ } while(0) ++#else /* CONFIG_FCM_DEBUG */ ++#define FCM_DEBUG(n, args...) do { } while(0) ++#endif ++ ++#define MIN(x, y) ((x < y) ? x : y) ++ ++#define ERR_BYTE 0xFF /* Value returned for read bytes when read failed */ ++ ++#define FCM_TIMEOUT_USECS 100000 /* Maximum number of uSecs to wait for FCM */ ++ ++/* Private structure holding NAND Flash device specific information */ ++struct fcm_nand { ++ int bank; /* Chip select bank number */ ++ unsigned int base; /* Chip select base address */ ++ int pgs; /* NAND page size */ ++ int oobbuf; /* Pointer to OOB block */ ++ unsigned int page; /* Last page written to / read from */ ++ unsigned int fmr; /* FCM Flash Mode Register value */ ++ unsigned int mdr; /* UPM/FCM Data Register value */ ++ unsigned int use_mdr; /* Non zero if the MDR is to be set */ ++ u_char *addr; /* Address of assigned FCM buffer */ ++ unsigned int read_bytes; /* Number of bytes read during command */ ++ unsigned int index; /* Pointer to next byte to 'read' */ ++ unsigned int req_bytes; /* Number of bytes read if command ok */ ++ unsigned int req_index; /* New read index if command ok */ ++ unsigned int status; /* status read from LTESR after last op*/ ++}; ++ ++ ++/* These map to the positions used by the FCM hardware ECC generator */ ++ ++/* Small Page FLASH with FMR[ECCM] = 0 */ ++static struct nand_oobinfo fcm_oob_sp_eccm0 = { /* TODO */ ++ .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 3, ++ .eccpos = {6, 7, 8}, ++ .oobfree = { {0, 5}, {9, 7} } ++}; ++ ++/* Small Page FLASH with FMR[ECCM] = 1 */ ++static struct nand_oobinfo fcm_oob_sp_eccm1 = { /* TODO */ ++ .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 3, ++ .eccpos = {8, 9, 10}, ++ .oobfree = { {0, 5}, {6, 2}, {11, 5} } ++}; ++ ++/* Large Page FLASH with FMR[ECCM] = 0 */ ++static struct nand_oobinfo fcm_oob_lp_eccm0 = { ++ .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 12, ++ .eccpos = {6, 7, 8, 22, 23, 24, 38, 39, 40, 54, 55, 56}, ++ .oobfree = { {1, 5}, {9, 13}, {25, 13}, {41, 13}, {57, 7} } ++}; ++ ++/* Large Page FLASH with FMR[ECCM] = 1 */ ++static struct nand_oobinfo fcm_oob_lp_eccm1 = { ++ .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 12, ++ .eccpos = {8, 9, 10, 24, 25, 26, 40, 41, 42, 56, 57, 58}, ++ .oobfree = { {1, 7}, {11, 13}, {27, 13}, {43, 13}, {59, 5} } ++}; ++ ++/* ++ * execute FCM command and wait for it to complete ++ */ ++static int fcm_run_command(struct mtd_info *mtd) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ long long end_tick; ++ ++ /* Setup the FMR[OP] to execute without write protection */ ++ lbc->fmr = fcm->fmr | 3; ++ if (fcm->use_mdr) ++ lbc->mdr = fcm->mdr; ++ ++ FCM_DEBUG(5,"fcm_run_command: fmr= %08X fir= %08X fcr= %08X\n", ++ lbc->fmr, lbc->fir, lbc->fcr); ++ FCM_DEBUG(5,"fcm_run_command: fbar=%08X fpar=%08X fbcr=%08X bank=%d\n", ++ lbc->fbar, lbc->fpar, lbc->fbcr, fcm->bank); ++ ++ /* clear event registers */ ++ lbc->lteatr = 0; ++ lbc->ltesr |= (LTESR_FCT | LTESR_PAR | LTESR_CC); ++ ++ /* execute special operation */ ++ lbc->lsor = fcm->bank; ++ ++ /* wait for FCM complete flag or timeout */ ++ fcm->status = 0; ++ end_tick = usec2ticks(FCM_TIMEOUT_USECS) + get_ticks(); ++ ++ while (end_tick > get_ticks()) { ++ if (lbc->ltesr & LTESR_CC) { ++ fcm->status = lbc->ltesr & ++ (LTESR_FCT | LTESR_PAR | LTESR_CC); ++ break; ++ } ++ } ++ ++ /* store mdr value in case it was needed */ ++ if (fcm->use_mdr) ++ fcm->mdr = lbc->mdr; ++ ++ fcm->use_mdr = 0; ++ ++ FCM_DEBUG(5,"fcm_run_command: stat=%08X mdr= %08X fmr= %08X\n", ++ fcm->status, fcm->mdr, lbc->fmr); ++ ++ /* if the operation completed ok then set the read buffer pointers */ ++ if (fcm->status == LTESR_CC) { ++ fcm->read_bytes = fcm->req_bytes; ++ fcm->index = fcm->req_index; ++ return 0; ++ } ++ ++ return -1; ++} ++ ++/* ++ * Set up the FCM hardware block and page address fields, and the fcm ++ * structure addr field to point to the correct FCM buffer in memory ++ */ ++static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ int buf_num; ++ ++ fcm->page = page_addr; ++ ++ lbc->fbar = page_addr >> (this->phys_erase_shift - this->page_shift); ++ if (fcm->pgs) { ++ lbc->fpar = ((page_addr << FPAR_LP_PI_SHIFT) & FPAR_LP_PI) | ++ ( oob ? FPAR_LP_MS : 0) | ++ column; ++ buf_num = (page_addr & 1) << 2; ++ } else { ++ lbc->fpar = ((page_addr << FPAR_SP_PI_SHIFT) & FPAR_SP_PI) | ++ ( oob ? FPAR_SP_MS : 0) | ++ column; ++ buf_num = page_addr & 7; ++ } ++ fcm->addr = (unsigned char*)(fcm->base + (buf_num * 1024)); ++ ++ /* for OOB data point to the second half of the buffer */ ++ if (oob) { ++ fcm->addr += (fcm->pgs ? 2048 : 512); ++ } ++} ++ ++/* not required for FCM */ ++static void fcm_hwcontrol(struct mtd_info *mtdinfo, int cmd) ++{ ++ return; ++} ++ ++ ++/* ++ * FCM does not support 16 bit data busses ++ */ ++static u16 fcm_read_word(struct mtd_info *mtd) ++{ ++ printf("fcm_read_word: UNIMPLEMENTED.\n"); ++ return 0; ++} ++static void fcm_write_word(struct mtd_info *mtd, u16 word) ++{ ++ printf("fcm_write_word: UNIMPLEMENTED.\n"); ++} ++ ++/* ++ * Write buf to the FCM Controller Data Buffer ++ */ ++static void fcm_write_buf(struct mtd_info *mtd, const u_char *buf, int len) ++{ ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ ++ FCM_DEBUG(3,"fcm_write_buf: writing %d bytes starting with 0x%x" ++ " at %d.\n", len, *((unsigned long*) buf), fcm->index); ++ ++ /* If armed catch the address of the OOB buffer so that it can be */ ++ /* updated with the real signature after the program comletes */ ++ if (!fcm->oobbuf) ++ fcm->oobbuf = (int) buf; ++ ++ /* copy the data into the FCM hardware buffer and update the index */ ++ memcpy(&(fcm->addr[fcm->index]), buf, len); ++ fcm->index += len; ++ return; ++} ++ ++ ++/* ++ * FCM does not support individual writes. Instead these are either commands ++ * or data being written, both of which are handled through the cmdfunc ++ * handler. ++ */ ++static void fcm_write_byte(struct mtd_info *mtd, u_char byte) ++{ ++ printf("fcm_write_byte: UNIMPLEMENTED.\n"); ++} ++ ++/* ++ * read a byte from either the FCM hardware buffer if it has any data left ++ * otherwise issue a command to read a single byte. ++ */ ++static u_char fcm_read_byte(struct mtd_info *mtd) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ unsigned char byte; ++ ++ /* If there are still bytes in the FCM then use the next byte */ ++ if(fcm->index < fcm->read_bytes) { ++ byte = fcm->addr[(fcm->index)++]; ++ FCM_DEBUG(4,"fcm_read_byte: byte %u (%02X): %d of %d.\n", ++ byte, byte, fcm->index-1, fcm->read_bytes); ++ } else { ++ /* otherwise issue a command to read 1 byte */ ++ lbc->fir = (FIR_OP_RSW << FIR_OP0_SHIFT); ++ fcm->use_mdr = 1; ++ fcm->read_bytes = 0; ++ fcm->index = 0; ++ fcm->req_bytes = 0; ++ fcm->req_index = 0; ++ byte = fcm_run_command(mtd) ? ERR_BYTE : fcm->mdr & 0xff; ++ FCM_DEBUG(4,"fcm_read_byte: byte %u (%02X) from bus.\n", ++ byte, byte); ++ } ++ ++ return byte; ++} ++ ++ ++/* ++ * Read from the FCM Controller Data Buffer ++ */ ++static void fcm_read_buf(struct mtd_info *mtd, u_char* buf, int len) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ int i; ++ int rest; ++ ++ FCM_DEBUG(3,"fcm_read_buf: reading %d bytes.\n", len); ++ ++ /* If last read failed then return error bytes */ ++ if (fcm->status != LTESR_CC) { ++ /* just keep copying bytes so that the oob works */ ++ memcpy(buf, &(fcm->addr[(fcm->index)]), len); ++ fcm->index += len; ++ } ++ else ++ { ++ /* see how much is still in the FCM buffer */ ++ i = min(len, (fcm->read_bytes - fcm->index)); ++ rest = i - len; ++ len = i; ++ ++ memcpy(buf, &(fcm->addr[(fcm->index)]), len); ++ fcm->index += len; ++ ++ /* If more data is needed then issue another block read */ ++ if (rest) { ++ FCM_DEBUG(3,"fcm_read_buf: getting %d more bytes.\n", ++ rest); ++ buf += len; ++ lbc->fir = (FIR_OP_RBW << FIR_OP0_SHIFT); ++ set_addr(mtd, 0, 0, 0); ++ lbc->fbcr = rest; ++ fcm->req_bytes = lbc->fbcr; ++ fcm->req_index = 0; ++ fcm->use_mdr = 0; ++ if (!fcm_run_command(mtd)) ++ fcm_read_buf(mtd, buf, rest); ++ else ++ memcpy(buf, fcm->addr, rest); ++ } ++ } ++ return; ++} ++ ++ ++/* ++ * Verify buffer against the FCM Controller Data Buffer ++ */ ++static int fcm_verify_buf(struct mtd_info *mtd, const u_char *buf, int len) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ int i; ++ int rest; ++ ++ FCM_DEBUG(3,"fcm_verify_buf: checking %d bytes starting with 0x%02x.\n", ++ len, *((unsigned long*) buf)); ++ /* If last read failed then return error bytes */ ++ if (fcm->status != LTESR_CC) { ++ return EFAULT; ++ } ++ ++ /* see how much is still in the FCM buffer */ ++ i = min(len, (fcm->read_bytes - fcm->index)); ++ rest = i - len; ++ len = i; ++ ++ if (memcmp(buf, &(fcm->addr[(fcm->index)]), len)) { ++ return EFAULT; ++ } ++ ++ fcm->index += len; ++ if (rest) { ++ FCM_DEBUG(3,"fcm_verify_buf: getting %d more bytes.\n", rest); ++ buf += len; ++ lbc->fir = (FIR_OP_RBW << FIR_OP0_SHIFT); ++ set_addr(mtd, 0, 0, 0); ++ lbc->fbcr = rest; ++ fcm->req_bytes = lbc->fbcr; ++ fcm->req_index = 0; ++ fcm->use_mdr = 0; ++ if (fcm_run_command(mtd)) ++ return EFAULT; ++ return fcm_verify_buf(mtd, buf, rest); ++ ++ } ++ return 0; ++} ++ ++/* this function is called after Program and Erase Operations to ++ * check for success or failure */ ++static int fcm_wait(struct mtd_info *mtd, struct nand_chip *this, int state) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ struct fcm_nand *fcm = this->priv; ++ ++ if (fcm->status != LTESR_CC) { ++ return(0x1); /* Status Read error */ ++ } ++ ++ /* Use READ_STATUS command, but wait for the device to be ready */ ++ fcm->use_mdr = 0; ++ fcm->req_index = 0; ++ fcm->read_bytes = 0; ++ fcm->index = 0; ++ fcm->oobbuf = -1; ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_RBW << FIR_OP1_SHIFT); ++ lbc->fcr = (NAND_CMD_STATUS << FCR_CMD0_SHIFT); ++ set_addr(mtd, 0, 0, 0); ++ lbc->fbcr = 1; ++ fcm->req_bytes = lbc->fbcr; ++ fcm_run_command(mtd); ++ if (fcm->status != LTESR_CC) { ++ return(0x1); /* Status Read error */ ++ } ++ return this->read_byte(mtd); ++} ++ ++ ++/* cmdfunc send commands to the FCM */ ++static void fcm_cmdfunc(struct mtd_info *mtd, unsigned command, ++ int column, int page_addr) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ ++ fcm->use_mdr = 0; ++ fcm->req_index = 0; ++ ++ /* clear the read buffer */ ++ fcm->read_bytes = 0; ++ if (command != NAND_CMD_PAGEPROG) { ++ fcm->index = 0; ++ fcm->oobbuf = -1; ++ } ++ ++ switch (command) { ++ /* READ0 and READ1 read the entire buffer to use hardware ECC */ ++ case NAND_CMD_READ1: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_READ1, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ fcm->req_index = column + 256; ++ goto read0; ++ case NAND_CMD_READ0: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_READ0, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ fcm->req_index = column; ++read0: ++ if (fcm->pgs) { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP3_SHIFT) | ++ (FIR_OP_RBW << FIR_OP4_SHIFT); ++ } else { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_RBW << FIR_OP3_SHIFT); ++ } ++ lbc->fcr = (NAND_CMD_READ0 << FCR_CMD0_SHIFT) | ++ (NAND_CMD_READSTART << FCR_CMD1_SHIFT); ++ lbc->fbcr = 0; /* read entire page to enable ECC */ ++ set_addr(mtd, 0, page_addr, 0); ++ fcm->req_bytes = mtd->oobblock + mtd->oobsize; ++ goto write_cmd2; ++ /* READOOB read only the OOB becasue no ECC is performed */ ++ case NAND_CMD_READOOB: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_READOOB, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ if (fcm->pgs) { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP3_SHIFT) | ++ (FIR_OP_RBW << FIR_OP4_SHIFT); ++ lbc->fcr = (NAND_CMD_READ0 << FCR_CMD0_SHIFT) | ++ (NAND_CMD_READSTART << FCR_CMD1_SHIFT); ++ } else { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_RBW << FIR_OP3_SHIFT); ++ lbc->fcr = (NAND_CMD_READOOB << FCR_CMD0_SHIFT); ++ } ++ lbc->fbcr = mtd->oobsize - column; ++ set_addr(mtd, column, page_addr, 1); ++ goto write_cmd1; ++ /* READID must read all 5 possible bytes while CEB is active */ ++ case NAND_CMD_READID: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_READID.\n"); ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_UA << FIR_OP1_SHIFT) | ++ (FIR_OP_RBW << FIR_OP2_SHIFT); ++ lbc->fcr = (NAND_CMD_READID << FCR_CMD0_SHIFT); ++ lbc->fbcr = 5; /* 5 bytes for manuf, device and exts */ ++ fcm->use_mdr = 1; ++ fcm->mdr = 0; ++ goto write_cmd0; ++ /* ERASE1 stores the block and page address */ ++ case NAND_CMD_ERASE1: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_ERASE1, page_addr:" ++ " 0x%x.\n", page_addr); ++ set_addr(mtd, 0, page_addr, 0); ++ goto end; ++ /* ERASE2 uses the block and page address from ERASE1 */ ++ case NAND_CMD_ERASE2: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_ERASE2.\n"); ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_PA << FIR_OP1_SHIFT) | ++ (FIR_OP_CM1 << FIR_OP2_SHIFT); ++ lbc->fcr = (NAND_CMD_ERASE1 << FCR_CMD0_SHIFT) | ++ (NAND_CMD_ERASE2 << FCR_CMD1_SHIFT); ++ lbc->fbcr = 0; ++ goto write_cmd1; ++ /* SEQIN sets up the addr buffer and all registers except the length */ ++ case NAND_CMD_SEQIN: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_SEQIN/PAGE_PROG, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ if (column == 0) { ++ lbc->fbcr = 0; /* write entire page to enable ECC */ ++ } else { ++ lbc->fbcr = 1; /* mark as partial page so no HW ECC */ ++ } ++ if (fcm->pgs) { ++ /* always use READ0 for large page devices */ ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_WB << FIR_OP3_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP4_SHIFT); ++ lbc->fcr = (NAND_CMD_SEQIN << FCR_CMD0_SHIFT) | ++ (NAND_CMD_PAGEPROG << FCR_CMD1_SHIFT); ++ set_addr(mtd, column, page_addr, 0); ++ } else { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CM2 << FIR_OP1_SHIFT) | ++ (FIR_OP_CA << FIR_OP2_SHIFT) | ++ (FIR_OP_PA << FIR_OP3_SHIFT) | ++ (FIR_OP_WB << FIR_OP4_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP5_SHIFT); ++ if (column >= mtd->oobblock) { ++ /* OOB area --> READOOB */ ++ column -= mtd->oobblock; ++ lbc->fcr = (NAND_CMD_READOOB << FCR_CMD0_SHIFT) ++ | (NAND_CMD_PAGEPROG<< FCR_CMD1_SHIFT) ++ | (NAND_CMD_SEQIN << FCR_CMD2_SHIFT); ++ set_addr(mtd, column, page_addr, 1); ++ } else if (column < 256) { ++ /* First 256 bytes --> READ0 */ ++ lbc->fcr = (NAND_CMD_READ0 << FCR_CMD0_SHIFT) ++ | (NAND_CMD_PAGEPROG<< FCR_CMD1_SHIFT) ++ | (NAND_CMD_SEQIN << FCR_CMD2_SHIFT); ++ set_addr(mtd, column, page_addr, 0); ++ } else { ++ /* Second 256 bytes --> READ1 */ ++ column -= 256; ++ lbc->fcr = (NAND_CMD_READ1 << FCR_CMD0_SHIFT) ++ | (NAND_CMD_PAGEPROG<< FCR_CMD1_SHIFT) ++ | (NAND_CMD_SEQIN << FCR_CMD2_SHIFT); ++ set_addr(mtd, column, page_addr, 0); ++ } ++ } ++ goto end; ++ /* PAGEPROG reuses all of the setup from SEQIN and adds the length */ ++ case NAND_CMD_PAGEPROG: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_PAGEPROG" ++ " writing %d bytes.\n",fcm->index); ++ /* if the write did not start at 0 or is not a full page */ ++ /* then set the exact length, otherwise use a full page */ ++ /* write so the HW generates the ECC. */ ++ if (lbc->fbcr || ++ (fcm->index != (mtd->oobblock + mtd->oobsize))) ++ lbc->fbcr = fcm->index; ++ fcm->req_bytes = 0; ++ goto write_cmd2; ++ /* CMD_STATUS must read the status byte while CEB is active */ ++ /* Note - it does not wait for the ready line */ ++ case NAND_CMD_STATUS: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_STATUS.\n"); ++ lbc->fir = (FIR_OP_CM0 << FIR_OP0_SHIFT) | ++ (FIR_OP_RBW << FIR_OP1_SHIFT); ++ lbc->fcr = (NAND_CMD_STATUS << FCR_CMD0_SHIFT); ++ lbc->fbcr = 1; ++ goto write_cmd0; ++ /* RESET without waiting for the ready line */ ++ case NAND_CMD_RESET: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_RESET.\n"); ++ lbc->fir = (FIR_OP_CM0 << FIR_OP0_SHIFT); ++ lbc->fcr = (NAND_CMD_RESET << FCR_CMD0_SHIFT); ++ lbc->fbcr = 0; ++ goto write_cmd0; ++ default: ++ printk("fcm_cmdfunc: error, unsupported command.\n"); ++ goto end; ++ } ++ ++ /* Short cuts fall through to save code */ ++ write_cmd0: ++ set_addr(mtd, 0, 0, 0); ++ write_cmd1: ++ fcm->req_bytes = lbc->fbcr; ++ write_cmd2: ++ fcm_run_command(mtd); ++ ++#ifdef CONFIG_MTD_NAND_VERIFY_WRITE ++ /* if we wrote a page then read back the oob to get the ECC */ ++ if ((command == NAND_CMD_PAGEPROG) && ++ (this->eccmode > NAND_ECC_SOFT) && ++ (lbc->fbcr == 0) && ++ (fcm->oobbuf != 0) && ++ (fcm->oobbuf != -1)) { ++ int i; ++ uint *oob_config; ++ unsigned char *oob_buf; ++ ++ i = fcm->page; ++ oob_buf = (unsigned char*) fcm->oobbuf; ++ oob_config = this->autooob->eccpos; ++ ++ /* wait for the write to complete and check it passed */ ++ if (!(this->waitfunc(mtd, this, FL_WRITING) & 0x01)) { ++ /* read back the OOB */ ++ fcm_cmdfunc(mtd, NAND_CMD_READOOB, 0, i); ++ /* if it succeeded then copy the ECC bytes */ ++ if (fcm->status == LTESR_CC) { ++ for (i = 0; i < this->eccbytes; i++) { ++ oob_buf[oob_config[i]] = ++ fcm->addr[oob_config[i]]; ++ } ++ } ++ } ++ } ++#endif ++ ++ end: ++ return; ++} ++ ++/* ++ * fcm_enable_hwecc - start ECC generation ++ */ ++static void fcm_enable_hwecc(struct mtd_info *mtd, int mode) ++{ ++ return; ++} ++ ++/* ++ * fcm_calculate_ecc - Calculate the ECC bytes ++ * This is done by hardware during the write process, so we use this ++ * to arm the oob buf capture on the next write_buf() call. The ECC bytes ++ * only need to be captured if CONFIG_MTD_NAND_VERIFY_WRITE is defined which ++ * reads back the pages and checks they match the data and oob buffers. ++ */ ++static int fcm_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code) ++{ ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ ++#ifdef CONFIG_MTD_NAND_VERIFY_WRITE ++ /* arm capture of oob buf ptr on next write_buf */ ++ fcm->oobbuf = 0; ++#endif ++ return 0; ++} ++ ++/* ++ * fcm_correct_data - Detect and correct bit error(s) ++ * The detection and correction is done automatically by the hardware, ++ * if the complete page was read. If the status code is okay then there ++ * was no error, otherwise we return an error code indicating an uncorrectable ++ * error. ++ */ ++static int fcm_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc) ++{ ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ ++ /* No errors */ ++ if (fcm->status == LTESR_CC) ++ return 0; ++ ++ return -1; /* uncorrectable error */ ++} ++ ++ ++ ++/* ++ * Dummy scan_bbt to complete setup of the FMR based on NAND size ++ */ ++static int fcm_scan_bbt (struct mtd_info *mtd) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ unsigned int i; ++ unsigned int al; ++ ++ if (!fcm) { ++ printk (KERN_ERR "fcm_scan_bbt():" \ ++ " Failed to allocate chip specific data structure\n"); ++ return -1; ++ } ++ ++ /* calculate FMR Address Length field */ ++ al = 0; ++ for (i = this->pagemask >> 16; i ; i >>= 8) { ++ al++; ++ } ++ ++ /* add to ECCM mode set in fcm_init */ ++ fcm->fmr |= 12 << FMR_CWTO_SHIFT | /* Timeout > 12 mSecs */ ++ al << FMR_AL_SHIFT; ++ ++ FCM_DEBUG(1,"fcm_init: nand->options = %08X\n", this->options); ++ FCM_DEBUG(1,"fcm_init: nand->numchips = %10d\n", this->numchips); ++ FCM_DEBUG(1,"fcm_init: nand->chipsize = %10d\n", this->chipsize); ++ FCM_DEBUG(1,"fcm_init: nand->pagemask = %10X\n", this->pagemask); ++ FCM_DEBUG(1,"fcm_init: nand->eccmode = %10d\n", this->eccmode ); ++ FCM_DEBUG(1,"fcm_init: nand->eccsize = %10d\n", this->eccsize ); ++ FCM_DEBUG(1,"fcm_init: nand->eccbytes = %10d\n", this->eccbytes); ++ FCM_DEBUG(1,"fcm_init: nand->eccsteps = %10d\n", this->eccsteps); ++ FCM_DEBUG(1,"fcm_init: nand->chip_delay = %8d\n", this->chip_delay); ++ FCM_DEBUG(1,"fcm_init: nand->badblockpos = %7d\n", this->badblockpos); ++ FCM_DEBUG(1,"fcm_init: nand->chip_shift = %8d\n", this->chip_shift); ++ FCM_DEBUG(1,"fcm_init: nand->page_shift = %8d\n", this->page_shift); ++ FCM_DEBUG(1,"fcm_init: nand->phys_erase_shift = %2d\n", ++ this->phys_erase_shift); ++ FCM_DEBUG(1,"fcm_init: mtd->flags = %08X\n", mtd->flags); ++ FCM_DEBUG(1,"fcm_init: mtd->size = %10d\n", mtd->size); ++ FCM_DEBUG(1,"fcm_init: mtd->erasesize = %10d\n", mtd->erasesize); ++ FCM_DEBUG(1,"fcm_init: mtd->oobblock = %10d\n", mtd->oobblock); ++ FCM_DEBUG(1,"fcm_init: mtd->oobsize = %10d\n", mtd->oobsize); ++ FCM_DEBUG(1,"fcm_init: mtd->oobavail = %10d\n", mtd->oobavail); ++ FCM_DEBUG(1,"fcm_init: mtd->ecctype = %10d\n", mtd->ecctype); ++ FCM_DEBUG(1,"fcm_init: mtd->eccsize = %10d\n", mtd->eccsize); ++ ++ /* adjust Option Register and ECC to match Flash page size */ ++ if (mtd->oobblock == 512) ++ lbc->bank[fcm->bank].or &= ~(OR_FCM_PGS); ++ else if (mtd->oobblock == 2048) { ++ lbc->bank[fcm->bank].or |= OR_FCM_PGS; ++ /* adjust ecc setup if needed */ ++ if ( (lbc->bank[fcm->bank].br & BR_DECC) == BR_DECC_CHK_GEN) { ++ mtd->eccsize = 2048; ++ mtd->oobavail -= 9; ++ this->eccmode = NAND_ECC_HW12_2048; ++ this->eccsize = 2048; ++ this->eccbytes += 9; ++ this->eccsteps = 1; ++ this->autooob = (fcm->fmr & FMR_ECCM) ? ++ &fcm_oob_lp_eccm1 : &fcm_oob_lp_eccm0; ++ memcpy(&mtd->oobinfo, this->autooob, ++ sizeof(mtd->oobinfo)); ++ } ++ } ++ else { ++ printf("fcm_init: page size %d is not supported\n", ++ mtd->oobblock); ++ return -1; ++ } ++ fcm->pgs = (lbc->bank[fcm->bank].or>>OR_FCM_PGS_SHIFT) & 1; ++ ++ if (al > 2) { ++ printf("fcm_init: %d address bytes is not supported\n", al+2); ++ return -1; ++ } ++ ++ /* restore default scan_bbt function and call it */ ++ this->scan_bbt = nand_default_bbt; ++ return nand_default_bbt(mtd); ++} ++ ++/* ++ * Board-specific NAND initialization. The following members of the ++ * argument are board-specific (per include/linux/mtd/nand_new.h): ++ * - IO_ADDR_R?: address to read the 8 I/O lines of the flash device ++ * - IO_ADDR_W?: address to write the 8 I/O lines of the flash device ++ * - hwcontrol: hardwarespecific function for accesing control-lines ++ * - dev_ready: hardwarespecific function for accesing device ready/busy line ++ * - enable_hwecc: function to enable (reset) hardware ecc generator. Must ++ * only be provided if a hardware ECC is available ++ * - eccmode: mode of ecc, see defines ++ * - chip_delay: chip dependent delay for transfering data from array to ++ * read regs (tR) ++ * - options: various chip options. They can partly be set to inform ++ * nand_scan about special functionality. See the defines for further ++ * explanation ++ * Members with a "?" were not set in the merged testing-NAND branch, ++ * so they are not set here either. ++ */ ++int board_nand_init(struct nand_chip *nand) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ struct fcm_nand *fcm; ++ unsigned int bank; ++ ++ /* Enable FCM detection of timeouts, ECC errors and completion */ ++ lbc->ltedr &= ~(LTESR_FCT | LTESR_PAR | LTESR_CC); ++ ++ fcm = kmalloc (sizeof(struct fcm_nand), GFP_KERNEL); ++ if (!fcm) { ++ printk (KERN_ERR "board_nand_init():" \ ++ " Cannot allocate read buffer data structure\n"); ++ return; ++ } ++ ++ /* Find which chip select bank is being used for this device */ ++ for (bank=0; bank<8; bank++) { ++ if ( (lbc->bank[bank].br & BR_V) && ++ ( (lbc->bank[bank].br & BR_MSEL) == BR_MS_FCM ) && ++ ( (lbc->bank[bank].br & BR_BA) == ++ (lbc->bank[bank].or & OR_FCM_AM & ++ (unsigned int)(nand->IO_ADDR_R) ) ) ) { ++ fcm->bank = bank; ++// TODO fcm->fmr = FMR_ECCM; /* rest filled in later */ ++ fcm->fmr = 0; /* rest filled in later */ ++ fcm->read_bytes = 0; ++ fcm->index = 0; ++ fcm->pgs = (lbc->bank[bank].or>>OR_FCM_PGS_SHIFT) & 1; ++ fcm->base = lbc->bank[bank].br & BR_BA; ++ fcm->addr = (unsigned char*) (fcm->base); ++ nand->priv = fcm; ++ fcm->oobbuf = -1; ++ break; ++ } ++ } ++ ++ if (!nand->priv) { ++ printk (KERN_ERR "board_nand_init():" \ ++ " Could not find matching Chip Select\n"); ++ return -1; ++ } ++ ++ /* set up nand options */ ++ nand->options = 0; ++ /* set up function call table */ ++ nand->hwcontrol = fcm_hwcontrol; ++ nand->waitfunc = fcm_wait; ++ nand->read_byte = fcm_read_byte; ++ nand->write_byte = fcm_write_byte; ++ nand->read_word = fcm_read_word; ++ nand->write_word = fcm_write_word; ++ nand->read_buf = fcm_read_buf; ++ nand->verify_buf = fcm_verify_buf; ++ nand->write_buf = fcm_write_buf; ++ nand->cmdfunc = fcm_cmdfunc; ++ nand->scan_bbt = fcm_scan_bbt; ++ ++ /* If CS Base Register selects full hardware ECC then use it */ ++ if ( ( (lbc->bank[bank].br & BR_DECC) >> BR_DECC_SHIFT) == 2) { ++ /* put in small page settings and adjust later if needed */ ++ nand->eccmode = NAND_ECC_HW3_512; ++ nand->autooob = (fcm->fmr & FMR_ECCM) ? ++ &fcm_oob_sp_eccm1 : &fcm_oob_sp_eccm0; ++ nand->calculate_ecc = fcm_calculate_ecc; ++ nand->correct_data = fcm_correct_data; ++ nand->enable_hwecc = fcm_enable_hwecc; ++ } else { ++ /* otherwise fall back to default software ECC */ ++ nand->eccmode = NAND_ECC_SOFT; ++ } ++ return 0; ++} ++ ++#endif ++#endif +diff -urN u-boot-1.3.1.orig/include/configs/MPC8313ERDB.h u-boot-1.3.1/include/configs/MPC8313ERDB.h +--- u-boot-1.3.1.orig/include/configs/MPC8313ERDB.h 2007-12-06 10:21:19.000000000 +0100 ++++ u-boot-1.3.1/include/configs/MPC8313ERDB.h 2008-01-31 17:36:18.000000000 +0100 +@@ -360,6 +360,7 @@ + #define CONFIG_CMD_MII + #define CONFIG_CMD_DATE + #define CONFIG_CMD_PCI ++#define CONFIG_CMD_NAND + + #if defined(CFG_RAMBOOT) + #undef CONFIG_CMD_ENV -- cgit v1.2.3 From 9e0a4ee6bc1aa2345cfd5448c39c198d3c9d5e31 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 7 Feb 2008 11:14:24 +0000 Subject: libupnp_1.4.2.bb: package libupnp 1.4.2 (pupnp fork) --- packages/upnp/libupnp_1.4.2.bb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/upnp/libupnp_1.4.2.bb diff --git a/packages/upnp/libupnp_1.4.2.bb b/packages/upnp/libupnp_1.4.2.bb new file mode 100644 index 0000000000..a7a01597ac --- /dev/null +++ b/packages/upnp/libupnp_1.4.2.bb @@ -0,0 +1,12 @@ +DESCRIPTION = "The portable SDK for UPnP* Devices (libupnp) provides developers with an API and open source code for building control points, devices, and bridges that are compliant with Version 1.0 of the Universal Plug and Play Device Architecture Specification." +HOMEPAGE = "http://pupnp.sourceforge.net/" +LICENSE = "BSD" + +LEAD_SONAME = "libupnp" +SRC_URI = "${SOURCEFORGE_MIRROR}/pupnp/${P}.tar.bz2" + +inherit autotools pkgconfig + +do_stage() { + autotools_stage_all +} -- cgit v1.2.3 From b793d8f421a84ea0769c6f6ecf521253ced0636d Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 7 Feb 2008 11:17:47 +0000 Subject: ushare_1.1a.bb: package ushare version 1.1a --- packages/ushare/ushare_1.1a.bb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 packages/ushare/ushare_1.1a.bb diff --git a/packages/ushare/ushare_1.1a.bb b/packages/ushare/ushare_1.1a.bb new file mode 100644 index 0000000000..b198d89c95 --- /dev/null +++ b/packages/ushare/ushare_1.1a.bb @@ -0,0 +1,20 @@ +DESCRIPTION = "ushare is a UPnP media server" +LICENSE = "GPL" +HOMEPAGE = "http://ushare.geexbox.org/" +DEPENDS = "libupnp virtual/libiconv virtual/libintl" +SRC_URI = "http://ushare.geexbox.org/releases/ushare-${PV}.tar.bz2" +S = "${WORKDIR}/ushare-${PV}" + +inherit autotools gettext + +# the configure script is hand-crafted, it rejects some of the usual +# configure arguments +do_configure () { + ${S}/configure \ + --prefix=${prefix} \ + --bindir=${bindir} \ + --localedir=${datadir}/locale \ + --sysconfdir=${sysconfdir} \ + --cross-compile +} + -- cgit v1.2.3 From d6ff90ab630ea627db2bc1cba8bf0256e65375d1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 7 Feb 2008 11:20:02 +0000 Subject: angstrom-feed-configs: add opkg support --- packages/angstrom/angstrom-feed-configs.bb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/angstrom/angstrom-feed-configs.bb b/packages/angstrom/angstrom-feed-configs.bb index 1415080fbd..d0465b4d53 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 = "r3" +PR = "r4" PACKAGE_ARCH = "${MACHINE_ARCH}" FEED_BASEPATH ?= "unstable/feed/" @@ -27,6 +27,11 @@ do_compile() { do_install () { install -d ${D}${sysconfdir}/ipkg install -m 0644 ${S}/${sysconfdir}/ipkg/* ${D}${sysconfdir}/ipkg/ + # opkg compat symlinks + install -d ${D}${sysconfdir}/opkg + for feed in ${D}${sysconfdir}/ipkg/* ; do + ln -sf ${sysconfdir}/ipkg/$(basename $feed) ${D}${sysconfdir}/opkg/$(basename $feed) + done } CONFFILES_${PN} += "${sysconfdir}/ipkg/base-feed.conf \ -- cgit v1.2.3 From c31c268a231989bbf7749667023ef812a3b3f380 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 7 Feb 2008 11:26:46 +0000 Subject: opkg-ipkg-compat: 'meta' package for ipkg->opkg transition --- packages/opkg/opkg-ipkg-compat.bb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/opkg/opkg-ipkg-compat.bb diff --git a/packages/opkg/opkg-ipkg-compat.bb b/packages/opkg/opkg-ipkg-compat.bb new file mode 100644 index 0000000000..58c81451ae --- /dev/null +++ b/packages/opkg/opkg-ipkg-compat.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "Files to make opkg and ipkg coexist" +RDEPENDS = "opkg ipkg ipkg-collateral" + +PR = "r0" +PACKAGE_ARCH = "all" + +do_compile() { + : +} + + +do_install () { + install -d ${D}${sysconfdir} + install -d ${D}/var/lib/ipkg + ln -sf ${sysconfdir}/ipkg.conf ${D}${sysconfdir}/opkg.conf + ln -sf ${sysconfdir}/ipkg/ ${D}${sysconfdir}/opkg + ln -sf /var/lib/ipkg ${D}/var/lib/ipkg +} + -- cgit v1.2.3 From 28fee5ea2a5f032871b989acd23e6c4ac26287e4 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 7 Feb 2008 11:47:15 +0000 Subject: libao_0.8.8.bb : add new version and rather than spurious alsa plugins .bb files just package alsa and pulse plugins seperately. --- packages/libao/libao_0.8.8.bb | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 packages/libao/libao_0.8.8.bb diff --git a/packages/libao/libao_0.8.8.bb b/packages/libao/libao_0.8.8.bb new file mode 100644 index 0000000000..adaabfde33 --- /dev/null +++ b/packages/libao/libao_0.8.8.bb @@ -0,0 +1,39 @@ +LICENSE = "GPL" +DESCRIPTION = "A cross platform audio library" +HOMEPAGE = "http://www.xiph.org/ao/" +SECTION = "libs" +PRIORITY = "optional" +DEPENDS = "alsa-lib pulseaudio" +PROVIDES = "libao-alsa libao-alsa-plugin" +PR = "r0" + +SRC_URI = "http://downloads.xiph.org/releases/ao/libao-${PV}.tar.gz" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--disable-esd --disable-esdtest \ + --disable-alsa --enable-alsa09 \ + --disable-arts --disable-nas \ + --enable-pulse --enable-alsa09-mmap" + +do_stage() { + install -d ${STAGING_INCDIR}/ao + install -m 0644 ${S}/include/ao/ao.h ${S}/include/ao/os_types.h \ + ${S}/include/ao/plugin.h ${STAGING_INCDIR}/ao/ + + oe_libinstall -so -C src libao ${STAGING_LIBDIR} + install -d ${STAGING_DATADIR}/aclocal + install -m 0644 ao.m4 ${STAGING_DATADIR}/aclocal/ +} + +PACKAGES =+ "${PN}-alsa ${PN}-alsa-dev ${PN}-pulse ${PN}-pulse-dev" + +FILES_${PN}-alsa = "${libdir}/ao/plugins-2/libalsa*.so" +FILES_${PN}-alsa-dev = "${libdir}/ao/plugins-2/libalsa*.la" +FILES_${PN}-pulse = "${libdir}/ao/plugins-2/libpulse*.so" +FILES_${PN}-pulse-dev = "${libdir}/ao/plugins-2/libpulse*.la" + +FILES_${PN} += "${libdir}/ao/plugins-2/*.so" +FILES_${PN}-dev += "${libdir}/ao/plugins-2/*.la" +FILES_${PN}-dbg += "${libdir}/ao/plugins-2/.debug" + -- cgit v1.2.3 From 17102361d77d89447e2a11342d7dfd3e764aeb6e Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 7 Feb 2008 12:55:28 +0000 Subject: xserver-common: Add 1.20 --- packages/xserver-common/xserver-common_1.20.bb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/xserver-common/xserver-common_1.20.bb diff --git a/packages/xserver-common/xserver-common_1.20.bb b/packages/xserver-common/xserver-common_1.20.bb new file mode 100644 index 0000000000..a30a37c893 --- /dev/null +++ b/packages/xserver-common/xserver-common_1.20.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "Common X11 scripts and support files" +LICENSE = "GPL" +SECTION = "x11" +RDEPENDS_${PN} = "xmodmap xrandr xdpyinfo" +PR = "r0" + +PACKAGE_ARCH = "all" + +# we are using a gpe-style Makefile +inherit gpe + +SRC_URI_append = " file://setDPI.sh " + +do_install_append() { + install -m 0755 "${WORKDIR}/setDPI.sh" "${D}/etc/X11/Xinit.d/50setdpi" +} -- cgit v1.2.3 From 4e68659a4de997f4b8c96d5027174e2b661e999a Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 7 Feb 2008 13:01:24 +0000 Subject: linux: Add support for IBM J320 Netvista to 2.6.23 --- .../linux/linux-2.6.23/netvista/.mtn2git_empty | 0 packages/linux/linux-2.6.23/netvista/defconfig | 1614 ++++++++++++++++++++ packages/linux/linux_2.6.23.bb | 2 +- 3 files changed, 1615 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-2.6.23/netvista/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.23/netvista/defconfig diff --git a/packages/linux/linux-2.6.23/netvista/.mtn2git_empty b/packages/linux/linux-2.6.23/netvista/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.23/netvista/defconfig b/packages/linux/linux-2.6.23/netvista/defconfig new file mode 100644 index 0000000000..cb069c7887 --- /dev/null +++ b/packages/linux/linux-2.6.23/netvista/defconfig @@ -0,0 +1,1614 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23 +# Mon Feb 4 10:38:07 2008 +# +CONFIG_X86_32=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_SEMAPHORE_SLEEPERS=y +CONFIG_X86=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_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_USER_NS is not set +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# Processor type and features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +# CONFIG_SMP is not set +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_PARAVIRT is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +CONFIG_M586=y +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MCORE2 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_X86_GENERIC=y +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=7 +CONFIG_X86_XADD=y +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_X86_PPRO_FENCE=y +CONFIG_X86_F00F_BUG=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_ALIGNMENT_16=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_MINIMUM_CPU_FAMILY=4 +CONFIG_HPET_TIMER=y +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +# CONFIG_X86_UP_APIC is not set +CONFIG_X86_MCE=y +# CONFIG_X86_MCE_NONFATAL is not set +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 + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DCDBAS is not set +CONFIG_DMIID=y +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_X86_PAE is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +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_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 is not set +CONFIG_PHYSICAL_START=0x100000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +CONFIG_COMPAT_VDSO=y + +# +# Power management options (ACPI, APM) +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_HIBERNATION_UP_POSSIBLE=y +# CONFIG_HIBERNATION is not set +CONFIG_ACPI=y +CONFIG_ACPI_SLEEP=y +# CONFIG_ACPI_PROCFS is not set +CONFIG_ACPI_PROC_EVENT=y +CONFIG_ACPI_AC=y +CONFIG_ACPI_BATTERY=y +CONFIG_ACPI_BUTTON=y +CONFIG_ACPI_FAN=y +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_PROCESSOR=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 is not set +# CONFIG_ACPI_SBS is not set +CONFIG_APM=y +CONFIG_APM_IGNORE_USER_SUSPEND=y +CONFIG_APM_DO_ENABLE=y +CONFIG_APM_CPU_IDLE=y +CONFIG_APM_DISPLAY_BLANK=y +CONFIG_APM_ALLOW_INTS=y +# CONFIG_APM_REAL_MODE_POWER_OFF is not set + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Bus options (PCI, PCMCIA, EISA, MCA, ISA) +# +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_PCIEPORTBUS is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_ISA_DMA_API=y +# CONFIG_ISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_MISC=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# 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 is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=y +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_ARPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=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_HCIUART is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +# 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=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +# CONFIG_IEEE80211_CRYPT_TKIP is not set +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# 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_PNPACPI=y +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_FD=y +# 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 is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_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_SONY_LAPTOP is not set +# CONFIG_THINKPAD_ACPI is not set +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +# CONFIG_BLK_DEV_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_CMD640=y +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_IDEPNP is not set +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_IDEDMA_FORCED is not set +# CONFIG_IDEDMA_ONLYDISK is not set +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_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 +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_IVB is not set +# 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 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_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_BUSLOGIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_SRP is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +CONFIG_IEEE1394=y + +# +# Subsystem Options +# +# CONFIG_IEEE1394_VERBOSEDEBUG is not set + +# +# Controllers +# + +# +# Texas Instruments PCILynx requires I2C +# +CONFIG_IEEE1394_OHCI1394=y + +# +# Protocols +# +# CONFIG_IEEE1394_VIDEO1394 is not set +# CONFIG_IEEE1394_SBP2 is not set +# CONFIG_IEEE1394_ETH1394_ROM_ENTRY is not set +# CONFIG_IEEE1394_ETH1394 is not set +# CONFIG_IEEE1394_DV1394 is not set +CONFIG_IEEE1394_RAWIO=y +# CONFIG_I2O is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=m +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +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_HP100 is not set +CONFIG_NET_PCI=y +CONFIG_PCNET32=m +# CONFIG_PCNET32_NAPI is not set +CONFIG_AMD8111_ETH=m +CONFIG_AMD8111E_NAPI=y +CONFIG_ADAPTEC_STARFIRE=m +# CONFIG_ADAPTEC_STARFIRE_NAPI is not set +CONFIG_B44=m +CONFIG_FORCEDETH=m +# CONFIG_FORCEDETH_NAPI is not set +CONFIG_DGRS=m +CONFIG_EEPRO100=m +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +# 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 is not set +# CONFIG_NET_POCKET is not set +CONFIG_NETDEV_1000=y +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_SK98LIN is not set +# CONFIG_VIA_VELOCITY is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +CONFIG_NETDEV_10000=y +# CONFIG_CHELSIO_T1 is not set +# CONFIG_CHELSIO_T3 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_MLX4_CORE is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# 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=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=800 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=600 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=m +CONFIG_INPUT_TSDEV_SCREEN_X=800 +CONFIG_INPUT_TSDEV_SCREEN_Y=600 +CONFIG_INPUT_EVDEV=m +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=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_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +CONFIG_TOUCHSCREEN_GUNZE=m +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_MTOUCH=m +CONFIG_TOUCHSCREEN_MK712=m +CONFIG_TOUCHSCREEN_PENMOUNT=m +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +CONFIG_TOUCHSCREEN_TOUCHWIN=m +CONFIG_TOUCHSCREEN_UCB1400=m +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +# CONFIG_INPUT_MISC is not set + +# +# 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=y +CONFIG_LEGACY_PTY_COUNT=32 +# CONFIG_PRINTER is not set +# CONFIG_PPDEV is not set +# CONFIG_TIPAR is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_WATCHDOG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +CONFIG_RTC=m +# CONFIG_GEN_RTC is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set +CONFIG_AGP=y +# CONFIG_AGP_ALI is not set +# CONFIG_AGP_ATI is not set +# CONFIG_AGP_AMD is not set +# CONFIG_AGP_AMD64 is not set +CONFIG_AGP_INTEL=y +# CONFIG_AGP_NVIDIA is not set +# CONFIG_AGP_SIS is not set +# CONFIG_AGP_SWORKS is not set +# CONFIG_AGP_VIA is not set +# CONFIG_AGP_EFFICEON is not set +CONFIG_DRM=y +# 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_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 is not set +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set +# CONFIG_SENSORS_K8TEMP is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_CORETEMP is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_SENSORS_HDAPS is not set +# CONFIG_SENSORS_APPLESMC is not set +# CONFIG_HWMON_DEBUG_CHIP 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=y +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +CONFIG_VGASTATE=y +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_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=y +CONFIG_FB_VESA=y +# 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 + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_VIDEO_SELECT=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_RAWMIDI=m +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_RTCTIMER 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_MPU401_UART=m +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_MTS64 is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set +# CONFIG_SND_PORTMAN2X4 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=m +# 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=m +# 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=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +# 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=m +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +CONFIG_SOUND_OSS=m +# CONFIG_SOUND_TRACEINIT is not set +# CONFIG_SOUND_DMAP is not set +# CONFIG_SOUND_SSCAPE is not set +# CONFIG_SOUND_VMIDI is not set +# CONFIG_SOUND_TRIX is not set +# CONFIG_SOUND_MSS is not set +# CONFIG_SOUND_MPU401 is not set +# CONFIG_SOUND_PAS is not set +# CONFIG_SOUND_PSS is not set +CONFIG_SOUND_SB=m +# CONFIG_SOUND_YM3812 is not set +# CONFIG_SOUND_UART6850 is not set +# CONFIG_SOUND_AEDSP16 is not set +# CONFIG_SOUND_KAHLUA is not set +CONFIG_AC97_BUS=m +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +CONFIG_HID_DEBUG=y + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set +CONFIG_USB_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=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=y + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM 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=y + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# 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_INFINIBAND is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=m +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=y +CONFIG_RTC_DRV_TEST=m + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +CONFIG_RTC_DRV_DS1553=m +# CONFIG_RTC_DRV_STK17TA8 is not set +CONFIG_RTC_DRV_DS1742=m +CONFIG_RTC_DRV_M48T86=m +# CONFIG_RTC_DRV_M48T59 is not set +CONFIG_RTC_DRV_V3020=m + +# +# on-CPU RTC drivers +# + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# +# CONFIG_AUXDISPLAY is not set +CONFIG_VIRTUALIZATION=y +# CONFIG_KVM is not set + +# +# 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=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_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=y +# 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=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=y +# CONFIG_NFSD_V3 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=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 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 + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=y +# CONFIG_KPROBES is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +CONFIG_UNUSED_SYMBOLS=y +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_EARLY_PRINTK=y +CONFIG_DOUBLEFAULT=y + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY 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=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT 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_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_PADLOCK=m +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +CONFIG_CRYPTO_DEV_GEODE=m + +# +# 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_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_X86_BIOS_REBOOT=y +CONFIG_KTIME_SCALAR=y diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb index 5322c51211..6858a45af5 100644 --- a/packages/linux/linux_2.6.23.bb +++ b/packages/linux/linux_2.6.23.bb @@ -10,7 +10,7 @@ DEFAULT_PREFERENCE_avr32 = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" DEPENDS_append_mpc8323e-rdb = " dtc-native" -PR = "r10" +PR = "r11" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ file://binutils-buildid-arm.patch;patch=1 \ -- cgit v1.2.3 From 6853e674e42ffa97b62d6354c38d15b075956ecd Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 7 Feb 2008 13:03:18 +0000 Subject: netvista.conf: Use generic kernel recipe instead of always broken linux-x86. --- conf/machine/netvista.conf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/machine/netvista.conf b/conf/machine/netvista.conf index 3ee97a447e..f95e403367 100644 --- a/conf/machine/netvista.conf +++ b/conf/machine/netvista.conf @@ -1,12 +1,12 @@ #@TYPE: Machine -#@NAME: X86 -#@DESCRIPTION: Machine configuration for a Linux running on x86 compatible machines +#@NAME: Netvista J320 Internet Applicance +#@DESCRIPTION: Machine configuration for a Linux IBM 8365 / J320 PC-based internet terminals -# i386 doesn't work with NTPL, see http://ecos.sourceware.org/ml/libc-ports/2006-03/msg00030.html TARGET_ARCH = "i486" -# TARGET_VENDOR = "-oe" PACKAGE_EXTRA_ARCHS = "netvista" -PREFERRED_PROVIDER_virtual/kernel = "linux-x86" +PREFERRED_PROVIDER_virtual/kernel = "linux" +PREFERRED_VERSION_linux = "2.6.23" + XSERVER = "xserver-kdrive-vesa" KERNEL_IMAGETYPE = "bzImage" -- cgit v1.2.3 From b71338f5f55b5bc3ba06bae0f013bebd1a8f136b Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 7 Feb 2008 13:57:05 +0000 Subject: pulseaudio_0.9.9.bb : updated disable-using-glibc-tls.patch to also disable hierarchical pthread stuff which is what causes gst lockups --- .../pulseaudio/files/disable-using-glibc-tls.patch | 18 ++++++++++++++---- packages/pulseaudio/pulseaudio_0.9.9.bb | 4 ++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/pulseaudio/files/disable-using-glibc-tls.patch b/packages/pulseaudio/files/disable-using-glibc-tls.patch index 9646e2c2d0..31d147be7d 100644 --- a/packages/pulseaudio/files/disable-using-glibc-tls.patch +++ b/packages/pulseaudio/files/disable-using-glibc-tls.patch @@ -1,8 +1,8 @@ -Index: pulseaudio-0.9.7/configure.ac +Index: pulseaudio-0.9.9/configure.ac =================================================================== ---- pulseaudio-0.9.7.orig/configure.ac -+++ pulseaudio-0.9.7/configure.ac -@@ -124,8 +124,8 @@ +--- pulseaudio-0.9.9.orig/configure.ac 2008-01-24 01:06:06.000000000 +0000 ++++ pulseaudio-0.9.9/configure.ac 2008-02-05 17:45:59.000000000 +0000 +@@ -139,8 +139,8 @@ ret=$? rm -f conftest.o conftest if test $ret -eq 0 ; then @@ -13,3 +13,13 @@ Index: pulseaudio-0.9.7/configure.ac else AC_MSG_RESULT([no]) fi +@@ -325,8 +325,7 @@ + rm -f conftest.o conftest + + if test $ret -eq 0 ; then +- AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.]) +- AC_MSG_RESULT([yes]) ++ AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([no]) + fi diff --git a/packages/pulseaudio/pulseaudio_0.9.9.bb b/packages/pulseaudio/pulseaudio_0.9.9.bb index f52ca6e1c6..d1e5706809 100644 --- a/packages/pulseaudio/pulseaudio_0.9.9.bb +++ b/packages/pulseaudio/pulseaudio_0.9.9.bb @@ -8,11 +8,11 @@ SRC_URI += "\ file://fix-dbus-without-hal.patch;patch=1 \ " -PR = "r0" +PR = "r1" # problems w/ pulseaudio 0.9.9 atm: # 1.) needs libltdl >= 1.5.24 (yes, any older version will NOT work at runtime) # 2.) doesn't build w/ glibc TLS support (hence patched out) -# 3.) hangs, if used with gst-pulse 0.9.7 +# 3.) hangs, if used with gst-pulse 0.9.7, fails with hierarchical pthread stuff DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From 708cb5ae30eb1976b87070cfd20076c56428e934 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 7 Feb 2008 14:06:12 +0000 Subject: libao_0.8.8.bb : specifically ask for mmap from alsa plugin instead of making it the default. mmap has higher latency --- packages/libao/libao_0.8.8.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/libao/libao_0.8.8.bb b/packages/libao/libao_0.8.8.bb index adaabfde33..88f7c898ec 100644 --- a/packages/libao/libao_0.8.8.bb +++ b/packages/libao/libao_0.8.8.bb @@ -14,7 +14,7 @@ inherit autotools pkgconfig EXTRA_OECONF = "--disable-esd --disable-esdtest \ --disable-alsa --enable-alsa09 \ --disable-arts --disable-nas \ - --enable-pulse --enable-alsa09-mmap" + --enable-pulse" do_stage() { install -d ${STAGING_INCDIR}/ao -- cgit v1.2.3 From 081bf6fbe9c04faa1b70ca25409666a00bf9d21c Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 7 Feb 2008 14:28:16 +0000 Subject: fic-gta02.conf : dont ship smdk2440 sound drivers --- conf/machine/fic-gta02.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/machine/fic-gta02.conf b/conf/machine/fic-gta02.conf index bd9621413a..2c2034b1b6 100644 --- a/conf/machine/fic-gta02.conf +++ b/conf/machine/fic-gta02.conf @@ -26,7 +26,6 @@ MACHINE_EXTRA_RRECOMMENDS = "\ kernel-module-gta01kbd \ kernel-module-s3cmci \ kernel-module-snd-soc-neo1973-gta02-wm8753 \ - kernel-module-snd-soc-smdk2440 \ " SERIAL_CONSOLE = "115200 ttySAC2" -- cgit v1.2.3 From 3489195f914c433ab0cc5a9e1f4b4e6911a39cb7 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 7 Feb 2008 14:30:13 +0000 Subject: dbus: update SRC_URI. Fixes 3755. --- packages/dbus/dbus.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc index 09fc7e389a..bbe7cb4fe4 100644 --- a/packages/dbus/dbus.inc +++ b/packages/dbus/dbus.inc @@ -6,7 +6,7 @@ DEPENDS = "expat glib-2.0 virtual/libintl" DEFAULT_PREFERENCE = "-1" SRC_URI = "\ - http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \ + http://freedesktop.org/software/dbus/releases/dbus/dbus-${PV}.tar.gz \ file://cross.patch;patch=1 \ file://tmpdir.patch;patch=1 \ file://fix-install-daemon.patch;patch=1 \ -- cgit v1.2.3 From 9d19825f572e93530dc6eae3f43d92d8b9f32e0f Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 7 Feb 2008 14:32:22 +0000 Subject: linux/linux-openmoko-devel* : clear out old unused kernels --- .../linux/linux-openmoko-devel/defconfig-2.6.23.1 | 1806 -- .../linux-openmoko-devel/defconfig-2.6.24-rc6 | 1814 -- .../fix-EVIOCGRAB-semantics-2.6.22.5.patch | 91 - .../fix-gta01-flowcontrol2-2.6.23.patch | 193 - .../linux-openmoko-devel/hack-gta02-cpu.patch | 21 - .../linux-openmoko-devel/logo_linux_clut224.ppm | 31723 ------------------- .../linux-openmoko-devel/printascii-2.6.23.patch | 21 - .../linux/linux-openmoko-devel/printascii.patch | 12 - .../linux-openmoko-devel/squashfs-2.6.23.patch | 4395 --- packages/linux/linux-openmoko-devel/squashfs.patch | 4386 --- .../linux-openmoko-devel_2.6.23+2.6.24-rc7.bb | 59 - packages/linux/linux-openmoko-devel_git.bb | 46 - 12 files changed, 44567 deletions(-) delete mode 100644 packages/linux/linux-openmoko-devel/defconfig-2.6.23.1 delete mode 100644 packages/linux/linux-openmoko-devel/defconfig-2.6.24-rc6 delete mode 100644 packages/linux/linux-openmoko-devel/fix-EVIOCGRAB-semantics-2.6.22.5.patch delete mode 100644 packages/linux/linux-openmoko-devel/fix-gta01-flowcontrol2-2.6.23.patch delete mode 100644 packages/linux/linux-openmoko-devel/hack-gta02-cpu.patch delete mode 100644 packages/linux/linux-openmoko-devel/logo_linux_clut224.ppm delete mode 100644 packages/linux/linux-openmoko-devel/printascii-2.6.23.patch delete mode 100644 packages/linux/linux-openmoko-devel/printascii.patch delete mode 100644 packages/linux/linux-openmoko-devel/squashfs-2.6.23.patch delete mode 100644 packages/linux/linux-openmoko-devel/squashfs.patch delete mode 100644 packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb delete mode 100644 packages/linux/linux-openmoko-devel_git.bb diff --git a/packages/linux/linux-openmoko-devel/defconfig-2.6.23.1 b/packages/linux/linux-openmoko-devel/defconfig-2.6.23.1 deleted file mode 100644 index 2419f90981..0000000000 --- a/packages/linux/linux-openmoko-devel/defconfig-2.6.23.1 +++ /dev/null @@ -1,1806 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.23-rc9 -# Tue Oct 9 15:27:11 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -# CONFIG_GENERIC_TIME is not set -# CONFIG_GENERIC_CLOCKEVENTS is not set -CONFIG_MMU=y -CONFIG_NO_IOPORT=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_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="-moko11" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set -# CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set -CONFIG_LOG_BUF_SHIFT=14 -# 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_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_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=y -# 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 - -# -# 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 - -# -# 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=y -CONFIG_MACH_NEO1973_GTA02=y -CONFIG_CPU_S3C2442=y - -# -# S3C2442 Machines -# -# CONFIG_SMDK2440_CPU2442 is not set - -# -# 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 - -# -# PCCARD (PCMCIA/CardBus) support -# -# 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_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 - -# -# 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_DISABLE_CONSOLE_SUSPEND=y -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=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_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 -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NF_CONNTRACK_ENABLED=m -CONFIG_NF_CONNTRACK=m -CONFIG_NF_CT_ACCT=y -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -# CONFIG_NF_CT_PROTO_UDPLITE is not set -# CONFIG_NF_CONNTRACK_AMANDA 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=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_U32=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -# CONFIG_IP_NF_QUEUE 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 - -# -# Bridge: Netfilter Configuration -# -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_ULOG=m -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -CONFIG_BRIDGE=y -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -CONFIG_LLC=y -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -CONFIG_NET_SCHED=y -CONFIG_NET_SCH_FIFO=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=m -CONFIG_NET_SCH_RED=m -CONFIG_NET_SCH_SFQ=m -CONFIG_NET_SCH_TEQL=m -CONFIG_NET_SCH_TBF=m -CONFIG_NET_SCH_GRED=m -CONFIG_NET_SCH_DSMARK=m -CONFIG_NET_SCH_NETEM=m -CONFIG_NET_SCH_INGRESS=m - -# -# Classification -# -CONFIG_NET_CLS=y -CONFIG_NET_CLS_BASIC=m -CONFIG_NET_CLS_TCINDEX=m -CONFIG_NET_CLS_ROUTE4=m -CONFIG_NET_CLS_ROUTE=y -CONFIG_NET_CLS_FW=m -CONFIG_NET_CLS_U32=m -CONFIG_CLS_U32_PERF=y -CONFIG_CLS_U32_MARK=y -CONFIG_NET_CLS_RSVP=m -CONFIG_NET_CLS_RSVP6=m -# CONFIG_NET_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 - -# -# 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_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 is not set -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_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 - -# -# RAM/ROM/Flash chip drivers -# -# CONFIG_MTD_CFI is not set -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_VERIFY_WRITE=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_BBT=y -# CONFIG_MTD_NAND_S3C2410_DEBUG is not set -CONFIG_MTD_NAND_S3C2410_HWECC=y -CONFIG_MTD_NAND_S3C2410_CLKSTOP=y -# CONFIG_MTD_NAND_DISKONCHIP 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 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_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_LOWLEVEL=y -# CONFIG_ISCSI_TCP is not set -# CONFIG_SCSI_DEBUG 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 is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set -# CONFIG_DM_DELAY 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_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_NET_PCI=y -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_MII=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_NET_CDC_SUBSET=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -CONFIG_USB_EPSON2888=y -CONFIG_USB_KC2190=y -CONFIG_USB_NET_ZAURUS=m -# CONFIG_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_TSDEV 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_GTA01=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_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 is not set - -# -# 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_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 -# 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_TS0710_MUX 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_SPI_SLAVE_JBT6K74=y -# CONFIG_W1 is not set -CONFIG_HWMON=y -# CONFIG_HWMON_VID is not set -# CONFIG_SENSORS_ABITUGURU is not set -# CONFIG_SENSORS_ABITUGURU3 is not set -# CONFIG_SENSORS_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_ASB100 is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_FSCHER is not set -# CONFIG_SENSORS_FSCPOS is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM70 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_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_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_S3C24XX=y -# CONFIG_LEDS_GPIO is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set - -# -# 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_BACKLIGHT_LCD_SUPPORT=y -CONFIG_LCD_CLASS_DEVICE=y -CONFIG_BACKLIGHT_CLASS_DEVICE=y -CONFIG_BACKLIGHT_GTA01=y - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -CONFIG_VIDEO_OUTPUT_CONTROL=m -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_S3C2410=y -# CONFIG_FB_S3C2410_DEBUG is not set -CONFIG_GLAMO=y -CONFIG_FB_GLAMO=y -CONFIG_GLAMO_SPI_GPIO=y -CONFIG_FB_GLAMO_SPI=y -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -CONFIG_FONT_6x11=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=y -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 is not set -CONFIG_LOGO_LINUX_CLUT224=y -# CONFIG_LOGO_OPENMOKO_CLUT224 is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_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 -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=y -CONFIG_SND_S3C24XX_SOC=y -CONFIG_SND_S3C24XX_SOC_I2S=y -CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=y - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_WM8753=y - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=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 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 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_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_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=m -CONFIG_USB_SERIAL_HP4X=m -CONFIG_USB_SERIAL_SAFE=m -CONFIG_USB_SERIAL_SAFE_PADDED=y -CONFIG_USB_SERIAL_SIERRAWIRELESS=m -CONFIG_USB_SERIAL_TI=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_XIRCOM=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_OMNINET=m -# CONFIG_USB_SERIAL_DEBUG 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_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 -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -CONFIG_MMC_UNSAFE_RESUME=y - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_BOUNCE=y - -# -# MMC/SD Host Controller Drivers -# -CONFIG_MMC_S3C=y -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_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 - -# -# DMA Engine support -# -# CONFIG_DMA_ENGINE is not set - -# -# DMA Clients -# - -# -# DMA Devices -# - -# -# 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_JBD_DEBUG is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_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=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -CONFIG_CONFIGFS_FS=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 is not set -# CONFIG_YAFFS_DOES_ECC is not set -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_SUMMARY=y -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -CONFIG_CRAMFS=y -CONFIG_SQUASHFS=m -# CONFIG_SQUASHFS_EMBEDDED is not set -CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -# CONFIG_SQUASHFS_VMALLOC is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_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 - -# -# Native Language Support -# -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=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=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 - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_MUST_CHECK=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SHIRQ is not set -CONFIG_DETECT_SOFTLOCKUP=y -CONFIG_SCHED_DEBUG=y -# CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set -# CONFIG_DEBUG_SLAB is not set -CONFIG_DEBUG_PREEMPT=y -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_RT_MUTEX_TESTER is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_LOCK_STAT is not set -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_DEBUG_KOBJECT is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_LIST is not set -CONFIG_FRAME_POINTER=y -CONFIG_FORCED_INLINING=y -# CONFIG_RCU_TORTURE_TEST is not set -# CONFIG_FAULT_INJECTION is not set -# CONFIG_DEBUG_USER is not set -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_ICEDCC is not set -CONFIG_DEBUG_S3C_PORT=y -CONFIG_DEBUG_S3C_UART=2 - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY 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_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_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_CAMELLIA=m -CONFIG_CRYPTO_TEST=m -CONFIG_CRYPTO_HW=y - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=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-2.6.24-rc6 b/packages/linux/linux-openmoko-devel/defconfig-2.6.24-rc6 deleted file mode 100644 index 9dac6e8e8e..0000000000 --- a/packages/linux/linux-openmoko-devel/defconfig-2.6.24-rc6 +++ /dev/null @@ -1,1814 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.24-rc6 -# Sat Dec 29 04:40:52 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -# CONFIG_GENERIC_TIME is not set -# CONFIG_GENERIC_CLOCKEVENTS is not set -CONFIG_MMU=y -CONFIG_NO_IOPORT=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_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="-moko11" -# 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=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=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_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=y -# 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 - -# -# 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=y -CONFIG_MACH_NEO1973_GTA02=y -# CONFIG_NEO1973_GTA02_2440 is not set -CONFIG_CPU_S3C2442=y - -# -# S3C2442 Machines -# -# CONFIG_SMDK2440_CPU2442 is not set - -# -# 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 debug " -# CONFIG_XIP_KERNEL is not set -CONFIG_KEXEC=y - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set - -# -# Power management options -# -CONFIG_PM=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=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=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 -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NF_CONNTRACK_ENABLED=m -CONFIG_NF_CONNTRACK=m -CONFIG_NF_CT_ACCT=y -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -# CONFIG_NF_CT_PROTO_UDPLITE is not set -# CONFIG_NF_CONNTRACK_AMANDA 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=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=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=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -# CONFIG_IP_NF_QUEUE 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 - -# -# Bridge: Netfilter Configuration -# -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_ULOG=m -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -CONFIG_BRIDGE=y -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -CONFIG_LLC=y -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# 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=m -CONFIG_NET_SCH_RED=m -CONFIG_NET_SCH_SFQ=m -CONFIG_NET_SCH_TEQL=m -CONFIG_NET_SCH_TBF=m -CONFIG_NET_SCH_GRED=m -CONFIG_NET_SCH_DSMARK=m -CONFIG_NET_SCH_NETEM=m -CONFIG_NET_SCH_INGRESS=m - -# -# Classification -# -CONFIG_NET_CLS=y -CONFIG_NET_CLS_BASIC=m -CONFIG_NET_CLS_TCINDEX=m -CONFIG_NET_CLS_ROUTE4=m -CONFIG_NET_CLS_ROUTE=y -CONFIG_NET_CLS_FW=m -CONFIG_NET_CLS_U32=m -CONFIG_CLS_U32_PERF=y -CONFIG_CLS_U32_MARK=y -CONFIG_NET_CLS_RSVP=m -CONFIG_NET_CLS_RSVP6=m -# CONFIG_NET_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 is not set -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_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 is not set -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_VERIFY_WRITE=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=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=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=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 is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH 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_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=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_NET_CDC_SUBSET=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -CONFIG_USB_EPSON2888=y -CONFIG_USB_KC2190=y -CONFIG_USB_NET_ZAURUS=m -# CONFIG_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_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 is not set - -# -# 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 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_LM70 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_LM93 is not set -# CONFIG_SENSORS_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_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 - -# -# 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=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=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=y -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 is not set -CONFIG_LOGO_LINUX_CLUT224=y -# CONFIG_LOGO_OPENMOKO_CLUT224 is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_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 -# - -# -# SPI devices -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=y -CONFIG_SND_S3C24XX_SOC=y -CONFIG_SND_S3C24XX_SOC_I2S=y -CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=y -# CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753 is not set - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_WM8753=y - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set -# CONFIG_HIDRAW is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=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 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 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=m -CONFIG_USB_SERIAL_HP4X=m -CONFIG_USB_SERIAL_SAFE=m -CONFIG_USB_SERIAL_SAFE_PADDED=y -CONFIG_USB_SERIAL_SIERRAWIRELESS=m -CONFIG_USB_SERIAL_TI=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_XIRCOM=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_OMNINET=m -# CONFIG_USB_SERIAL_DEBUG 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 -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=y -# CONFIG_LEDS_GPIO is not set -# CONFIG_LEDS_NEO1973_VIBRATOR is not set -# CONFIG_LEDS_NEO1973_GTA02 is not set - -# -# 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=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=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 is not set -# CONFIG_YAFFS_DOES_ECC is not set -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=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=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=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 -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=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=y -# CONFIG_DEBUG_ICEDCC is not set -CONFIG_DEBUG_S3C_PORT=y -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/fix-EVIOCGRAB-semantics-2.6.22.5.patch b/packages/linux/linux-openmoko-devel/fix-EVIOCGRAB-semantics-2.6.22.5.patch deleted file mode 100644 index cc74c0e289..0000000000 --- a/packages/linux/linux-openmoko-devel/fix-EVIOCGRAB-semantics-2.6.22.5.patch +++ /dev/null @@ -1,91 +0,0 @@ -Index: linux-2.6.22.5/drivers/input/evdev.c -=================================================================== ---- linux-2.6.22.5.orig/drivers/input/evdev.c -+++ linux-2.6.22.5/drivers/input/evdev.c -@@ -28,7 +28,7 @@ struct evdev { - char name[16]; - struct input_handle handle; - wait_queue_head_t wait; -- struct evdev_client *grab; -+ int grab; - struct list_head client_list; - }; - -@@ -36,6 +36,7 @@ struct evdev_client { - struct input_event buffer[EVDEV_BUFFER_SIZE]; - int head; - int tail; -+ int grab; - struct fasync_struct *fasync; - struct evdev *evdev; - struct list_head node; -@@ -48,8 +49,7 @@ static void evdev_event(struct input_han - struct evdev *evdev = handle->private; - struct evdev_client *client; - -- if (evdev->grab) { -- client = evdev->grab; -+ list_for_each_entry(client, &evdev->client_list, node) { - - do_gettimeofday(&client->buffer[client->head].time); - client->buffer[client->head].type = type; -@@ -58,17 +58,7 @@ static void evdev_event(struct input_han - client->head = (client->head + 1) & (EVDEV_BUFFER_SIZE - 1); - - kill_fasync(&client->fasync, SIGIO, POLL_IN); -- } else -- list_for_each_entry(client, &evdev->client_list, node) { -- -- do_gettimeofday(&client->buffer[client->head].time); -- client->buffer[client->head].type = type; -- client->buffer[client->head].code = code; -- client->buffer[client->head].value = value; -- client->head = (client->head + 1) & (EVDEV_BUFFER_SIZE - 1); -- -- kill_fasync(&client->fasync, SIGIO, POLL_IN); -- } -+ } - - wake_up_interruptible(&evdev->wait); - } -@@ -105,9 +95,10 @@ static int evdev_release(struct inode *i - struct evdev_client *client = file->private_data; - struct evdev *evdev = client->evdev; - -- if (evdev->grab == client) { -- input_release_device(&evdev->handle); -- evdev->grab = NULL; -+ if (client->grab) { -+ if(!--evdev->grab && evdev->exist) -+ input_release_device(&evdev->handle); -+ client->grab = 0; - } - - evdev_fasync(-1, file, 0); -@@ -488,17 +479,19 @@ static long evdev_ioctl_handler(struct f - - case EVIOCGRAB: - if (p) { -- if (evdev->grab) -- return -EBUSY; -- if (input_grab_device(&evdev->handle)) -+ if (client->grab) - return -EBUSY; -- evdev->grab = client; -+ if (!evdev->grab++) -+ if (input_grab_device(&evdev->handle)) -+ return -EBUSY; -+ client->grab = 0; - return 0; - } else { -- if (evdev->grab != client) -+ if (!client->grab) - return -EINVAL; -- input_release_device(&evdev->handle); -- evdev->grab = NULL; -+ if (!--evdev->grab) -+ input_release_device(&evdev->handle); -+ client->grab = 0; - return 0; - } - diff --git a/packages/linux/linux-openmoko-devel/fix-gta01-flowcontrol2-2.6.23.patch b/packages/linux/linux-openmoko-devel/fix-gta01-flowcontrol2-2.6.23.patch deleted file mode 100644 index deb31dacd9..0000000000 --- a/packages/linux/linux-openmoko-devel/fix-gta01-flowcontrol2-2.6.23.patch +++ /dev/null @@ -1,193 +0,0 @@ ---- linux-2.6.23/arch/arm/common/gta01_pm_gsm.c.orig 2007-10-30 23:29:53.000000000 -0500 -+++ linux-2.6.23/arch/arm/common/gta01_pm_gsm.c 2007-10-30 23:35:44.000000000 -0500 -@@ -23,6 +23,9 @@ - #include - #include - -+#include -+void s3c24xx_set_flow_control(struct uart_port *port, int fc_on); -+ - struct gta01pm_priv { - int gpio_ngsm_en; - struct console *con; -@@ -49,6 +52,23 @@ - static ssize_t gsm_read(struct device *dev, struct device_attribute *attr, - char *buf) - { -+ struct uart_driver *udrive = NULL; -+ struct uart_state *ustate = NULL; -+ struct uart_port *uport = NULL; -+ -+ if (gta01_gsm.con) { -+ udrive = gta01_gsm.con->data; -+ if (udrive) { -+ ustate = udrive->state; -+ if (ustate) { -+ uport = ustate->port; -+ } -+ } -+ } -+ printk("gsm: gsm_read of \"%s\"\n", attr->attr.name); -+ printk("gsm: con=%p udrive=%p ustate=%p uport=%p\n", -+ gta01_gsm.con, udrive, ustate, uport); -+ - if (!strcmp(attr->attr.name, "power_on")) { - if (s3c2410_gpio_getpin(GTA01_GPIO_MODEM_ON)) - goto out_1; -@@ -58,6 +78,24 @@ - } else if (!strcmp(attr->attr.name, "download")) { - if (s3c2410_gpio_getpin(GTA01_GPIO_MODEM_DNLOAD)) - goto out_1; -+ } else if (!strcmp(attr->attr.name, "flowcontrol")) { -+ if (uport) { -+ if (uport->unused[2] & 0x2) { -+ if (uport->unused[2] & 0x1) { -+ printk("gsm: flow control allowed and on\n"); -+ goto out_1; -+ } else { -+ printk("gsm: flow control allowed and not on\n"); -+ } -+ } else { -+ if (uport->unused[2] & 0x1) -+ printk("gsm: flow control not allowed, " -+ "but is pending\n"); -+ else -+ printk("gsm: flow control not allowed, " -+ "not pending\n"); -+ } -+ } - } - - return strlcpy(buf, "0\n", 3); -@@ -68,10 +106,26 @@ - static ssize_t gsm_write(struct device *dev, struct device_attribute *attr, - const char *buf, size_t count) - { -+ struct uart_driver *udrive = NULL; -+ struct uart_state *ustate = NULL; -+ struct uart_port *uport = NULL; -+ static int was_on = 0; - unsigned long on = simple_strtoul(buf, NULL, 10); - -+ if (gta01_gsm.con) { -+ udrive = gta01_gsm.con->data; -+ if (udrive) { -+ ustate = udrive->state; -+ if (ustate) { -+ uport = ustate->port; -+ } -+ } -+ } -+ printk("gsm: con=%p udrive=%p ustate=%p uport=%p\n", -+ gta01_gsm.con, udrive, ustate, uport); -+ - if (!strcmp(attr->attr.name, "power_on")) { -- if (on) { -+ if (on && !was_on) { - if (gta01_gsm.con) { - dev_info(dev, "powering up GSM, thus " - "disconnecting serial console\n"); -@@ -83,7 +137,24 @@ - s3c2410_gpio_setpin(gta01_gsm.gpio_ngsm_en, 0); - - s3c2410_gpio_setpin(GTA01_GPIO_MODEM_ON, 1); -- } else { -+ -+ if (uport) { -+ /* set any pending flow-control mode */ -+ uport->unused[2] |= 0x2; -+ s3c24xx_set_flow_control(uport, -+ (uport->unused[2] & 0x1)); -+ dev_info(dev, "flow control allowed\n"); -+ } -+ -+ was_on = 1; -+ -+ } else if (!on && was_on) { -+ if (uport) { -+ uport->unused[2] &= ~0x2; -+ s3c24xx_set_flow_control(uport, 0); -+ dev_info(dev, "flow control not allowed\n"); -+ } -+ - s3c2410_gpio_setpin(GTA01_GPIO_MODEM_ON, 0); - - if (gta01_gsm.gpio_ngsm_en) -@@ -95,6 +166,8 @@ - dev_info(dev, "powered down GSM, thus enabling " - "serial console\n"); - } -+ -+ was_on = 0; - } - } else if (!strcmp(attr->attr.name, "reset")) { - s3c2410_gpio_setpin(GTA01_GPIO_MODEM_RST, on); -@@ -105,6 +178,7 @@ - return count; - } - -+static DEVICE_ATTR(flowcontrol, 0644, gsm_read, gsm_write); - static DEVICE_ATTR(power_on, 0644, gsm_read, gsm_write); - static DEVICE_ATTR(reset, 0644, gsm_read, gsm_write); - static DEVICE_ATTR(download, 0644, gsm_read, gsm_write); -@@ -136,6 +210,7 @@ - #endif - - static struct attribute *gta01_gsm_sysfs_entries[] = { -+ &dev_attr_flowcontrol.attr, - &dev_attr_power_on.attr, - &dev_attr_reset.attr, - NULL, ---- linux-2.6.23/drivers/serial/s3c2410.c.orig 2007-10-30 23:31:59.000000000 -0500 -+++ linux-2.6.23/drivers/serial/s3c2410.c 2007-10-30 23:35:44.000000000 -0500 -@@ -80,6 +80,8 @@ - - #include - #include -+#include -+#include - - /* structures */ - -@@ -729,6 +731,17 @@ - return best->quot; - } - -+/* This routine is called whenever the gta01 modem/console switches */ -+void s3c24xx_set_flow_control(struct uart_port *port, int fc_on) -+{ -+ unsigned int umcon; -+ if (machine_is_neo1973_gta01() && port) { -+ umcon = (fc_on) ? S3C2410_UMCOM_AFC : 0; -+ wr_regl(port, S3C2410_UMCON, umcon); -+ } -+} -+EXPORT_SYMBOL(s3c24xx_set_flow_control); -+ - static void s3c24xx_serial_set_termios(struct uart_port *port, - struct ktermios *termios, - struct ktermios *old) -@@ -803,6 +816,23 @@ - - umcon = (termios->c_cflag & CRTSCTS) ? S3C2410_UMCOM_AFC : 0; - -+ /* -+ * Custom handling of flow control on hwport 0 for the GTA01: -+ * Save the desired state for flow control, but if the port -+ * is being used as a console, then do not actually enable -+ * flow control unless the flag permiting us to do so is set. -+ */ -+ if (machine_is_neo1973_gta01() && (cfg->hwport == 0)) { -+ if (umcon) -+ port->unused[2] |= 0x1; -+ else -+ port->unused[2] &= ~0x1; -+ if (port->cons && (port->cons->index >= 0)) { -+ if (!(port->unused[2] & 0x2)) -+ umcon = 0; -+ } -+ } -+ - if (termios->c_cflag & PARENB) { - if (termios->c_cflag & PARODD) - ulcon |= S3C2410_LCON_PODD; diff --git a/packages/linux/linux-openmoko-devel/hack-gta02-cpu.patch b/packages/linux/linux-openmoko-devel/hack-gta02-cpu.patch deleted file mode 100644 index ef4e939640..0000000000 --- a/packages/linux/linux-openmoko-devel/hack-gta02-cpu.patch +++ /dev/null @@ -1,21 +0,0 @@ -Index: linux-2.6.22/arch/arm/mach-s3c2440/Kconfig -=================================================================== ---- linux-2.6.22.orig/arch/arm/mach-s3c2440/Kconfig -+++ linux-2.6.22/arch/arm/mach-s3c2440/Kconfig -@@ -69,14 +69,14 @@ - - config MACH_HXD8 - bool "FIC HXD8" -- select CPU_S3C2440 -+ select CPU_S3C2442 - select SENSORS_PCF50606 - help - Say Y here if you are using the FIC Neo1973 GSM Phone - - config MACH_NEO1973_GTA02 - bool "FIC Neo1973 GSM Phone (GTA02 Hardware)" -- select CPU_S3C2440 -+ select CPU_S3C2442 - select SENSORS_PCF50633 - help - Say Y here if you are using the FIC Neo1973 GSM Phone diff --git a/packages/linux/linux-openmoko-devel/logo_linux_clut224.ppm b/packages/linux/linux-openmoko-devel/logo_linux_clut224.ppm deleted file mode 100644 index c3e8dec6f8..0000000000 --- a/packages/linux/linux-openmoko-devel/logo_linux_clut224.ppm +++ /dev/null @@ -1,31723 +0,0 @@ -P3 -480 520 -255 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 0 1 1 0 1 1 0 1 1 0 2 2 2 2 2 2 -2 2 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3 2 -3 3 2 3 3 2 3 3 2 3 3 2 3 3 2 2 2 2 2 2 2 1 1 0 -1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 -2 2 2 3 3 2 5 3 1 5 3 1 5 3 1 5 3 1 5 4 2 5 4 2 -5 4 2 7 6 2 7 6 2 7 6 2 7 6 2 7 6 2 7 6 2 7 6 2 -7 6 2 7 6 2 7 6 2 7 6 2 5 4 2 5 4 2 5 4 2 5 3 1 -5 3 1 5 3 1 5 3 1 3 3 2 3 3 2 2 2 2 1 1 0 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 5 3 1 -5 4 2 7 6 2 7 6 2 9 8 4 9 8 4 9 8 4 9 8 4 9 8 4 -9 8 4 9 8 4 9 8 4 9 8 4 14 10 4 9 8 4 14 10 4 9 8 4 -14 10 4 9 8 4 14 10 4 9 8 4 9 8 4 9 8 4 9 8 4 9 8 4 -9 8 4 9 8 4 7 6 2 7 6 2 7 6 2 5 4 2 5 3 1 5 3 1 -3 3 2 3 3 2 2 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 5 3 1 7 6 2 9 8 4 -9 8 4 9 8 4 14 10 4 15 13 5 15 13 5 15 13 5 15 13 5 15 13 5 -19 15 5 19 15 5 19 15 5 19 15 5 19 15 5 19 15 5 19 15 5 19 15 5 -19 15 5 19 15 5 19 15 5 19 15 5 19 15 5 15 13 5 18 12 3 15 13 5 -15 13 5 15 13 5 14 10 4 14 10 4 9 8 4 9 8 4 9 8 4 9 8 4 -7 6 2 7 6 2 5 4 2 5 3 1 3 3 2 3 3 2 1 1 0 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 2 2 2 5 3 1 7 6 2 9 8 4 9 8 4 14 10 4 -18 12 3 15 13 5 19 15 5 19 15 5 19 15 5 22 19 6 22 19 6 24 19 6 -24 19 6 24 19 6 24 19 6 24 19 6 24 19 6 24 19 6 24 19 6 24 19 6 -24 19 6 24 19 6 24 19 6 24 19 6 24 19 6 24 19 6 24 19 6 22 19 6 -22 19 6 19 15 5 19 15 5 19 15 5 19 15 5 15 13 5 15 13 5 14 10 4 -14 10 4 14 10 4 9 8 4 9 8 4 7 6 2 7 6 2 5 3 1 5 3 1 -3 3 2 2 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 3 3 2 5 3 1 7 6 2 9 8 4 14 10 4 15 13 5 19 15 5 -22 19 6 22 19 6 24 19 6 24 19 6 30 25 8 30 25 8 30 25 8 30 25 8 -30 25 8 30 25 8 30 25 8 30 25 8 30 25 8 37 28 9 30 25 8 37 28 9 -30 25 8 30 25 8 30 25 8 30 25 8 30 25 8 30 25 8 30 25 8 30 25 8 -28 21 6 28 21 6 24 19 6 24 19 6 24 19 6 24 19 6 22 19 6 19 15 5 -19 15 5 15 13 5 15 13 5 15 13 5 14 10 4 9 8 4 9 8 4 9 8 4 -7 6 2 5 4 2 5 3 1 3 3 2 1 1 0 1 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 3 2 5 4 2 9 8 4 14 10 4 15 13 5 19 15 5 22 19 6 24 19 6 -24 19 6 30 25 8 30 25 8 30 25 8 37 32 10 30 25 8 37 32 10 37 32 10 -37 32 10 39 33 11 39 33 11 39 33 11 39 33 11 39 33 11 39 33 11 39 33 11 -39 33 11 39 33 11 39 33 11 39 33 11 37 32 10 37 32 10 37 32 10 37 32 10 -37 32 10 37 32 10 30 25 8 37 32 10 30 25 8 30 25 8 30 25 8 28 21 6 -24 19 6 24 19 6 22 19 6 19 15 5 19 15 5 19 15 5 15 13 5 14 10 4 -14 10 4 9 8 4 9 8 4 7 6 2 5 3 1 5 3 1 2 2 2 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 -5 4 2 9 8 4 14 10 4 15 13 5 19 15 5 24 19 6 28 21 6 30 25 8 -37 28 9 37 32 10 37 32 10 39 33 11 41 34 11 41 34 11 44 38 13 41 34 11 -44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 -44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 39 33 11 41 34 11 -39 33 11 39 33 11 39 33 11 37 32 10 37 32 10 37 32 10 37 32 10 30 25 8 -37 32 10 30 25 8 30 25 8 28 21 6 24 19 6 24 19 6 22 19 6 19 15 5 -19 15 5 15 13 5 15 13 5 14 10 4 9 8 4 7 6 2 5 4 2 5 3 1 -3 3 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 5 4 2 -9 8 4 14 10 4 19 15 5 22 19 6 24 19 6 30 25 8 30 25 8 37 32 10 -37 32 10 41 34 11 44 38 13 44 38 13 44 38 13 51 43 14 44 38 13 51 43 14 -44 38 13 51 43 14 51 43 14 51 43 14 51 43 14 51 43 14 51 43 14 51 43 14 -51 43 14 51 43 14 51 43 14 51 43 14 51 43 14 51 43 14 44 38 13 51 43 14 -44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 41 34 11 41 34 11 39 33 11 -37 32 10 37 32 10 37 32 10 37 32 10 30 25 8 30 25 8 30 25 8 24 19 6 -24 19 6 22 19 6 19 15 5 19 15 5 15 13 5 14 10 4 9 8 4 9 8 4 -7 6 2 5 3 1 3 3 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 5 4 2 9 8 4 -15 13 5 19 15 5 22 19 6 24 19 6 30 25 8 37 32 10 39 33 11 44 38 13 -44 38 13 44 38 13 51 43 14 53 46 15 53 46 15 53 46 15 53 46 15 54 47 16 -54 47 16 54 47 16 54 47 16 54 47 16 54 47 16 54 47 16 54 47 16 54 47 16 -54 47 16 54 47 16 54 47 16 54 47 16 53 46 15 53 46 15 54 47 16 53 46 15 -53 46 15 53 46 15 51 43 14 51 43 14 51 43 14 44 38 13 51 43 14 44 38 13 -44 38 13 44 38 13 39 33 11 39 33 11 39 33 11 37 32 10 37 32 10 30 25 8 -30 25 8 30 25 8 24 19 6 22 19 6 22 19 6 19 15 5 15 13 5 15 13 5 -14 10 4 9 8 4 7 6 2 5 3 1 3 3 2 1 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 5 4 2 9 8 4 14 10 4 -19 15 5 22 19 6 30 25 8 30 25 8 37 32 10 37 32 10 44 38 13 44 38 13 -51 43 14 54 47 16 54 47 16 54 47 16 54 47 16 54 47 16 54 47 16 56 49 15 -56 49 15 56 49 15 57 50 16 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 -57 50 17 57 50 17 56 49 15 57 50 17 56 49 15 57 50 16 56 49 15 56 49 15 -54 47 16 54 47 16 54 47 16 54 47 16 54 47 16 54 47 16 51 43 14 53 46 15 -51 43 14 44 38 13 51 43 14 44 38 13 44 38 13 41 34 11 39 33 11 39 33 11 -37 32 10 37 32 10 30 25 8 30 25 8 28 21 6 24 19 6 22 19 6 19 15 5 -15 13 5 15 13 5 14 10 4 9 8 4 7 6 2 5 3 1 3 3 2 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 2 2 2 5 3 1 9 8 4 14 10 4 15 13 5 -22 19 6 28 21 6 30 25 8 37 32 10 39 33 11 44 38 13 51 43 14 51 43 14 -54 47 16 54 47 16 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 -57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 -57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 -57 50 17 57 50 17 57 50 17 57 50 17 56 49 15 57 50 17 54 47 16 54 47 16 -54 47 16 54 47 16 53 46 15 51 43 14 51 43 14 51 43 14 44 38 13 44 38 13 -41 34 11 39 33 11 39 33 11 37 32 10 30 25 8 30 25 8 30 25 8 24 19 6 -24 19 6 22 19 6 15 13 5 15 13 5 14 10 4 9 8 4 7 6 2 5 3 1 -3 3 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 0 5 3 1 7 6 2 14 10 4 15 13 5 22 19 6 -28 21 6 30 25 8 37 32 10 39 33 11 44 38 13 51 43 14 54 47 16 62 54 22 -83 78 45 83 78 45 87 85 74 109 103 77 110 107 92 161 154 100 157 154 144 157 154 144 -202 194 153 202 194 153 201 199 182 202 194 153 202 194 153 228 223 180 228 223 180 228 223 180 -227 220 173 226 217 157 202 194 153 204 179 101 202 194 153 161 154 100 161 154 100 145 122 90 -109 103 77 108 92 44 73 60 27 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 -57 50 16 57 50 16 54 47 16 54 47 16 54 47 16 53 46 15 51 43 14 51 43 14 -51 43 14 44 38 13 44 38 13 41 34 11 39 33 11 37 32 10 37 32 10 30 25 8 -30 25 8 24 19 6 24 19 6 19 15 5 15 13 5 15 13 5 14 10 4 9 8 4 -7 6 2 5 3 1 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 3 3 2 7 6 2 9 8 4 15 13 5 19 15 5 24 19 6 -30 25 8 37 32 10 51 48 25 83 78 45 89 88 84 110 107 92 130 128 124 130 128 124 -130 128 124 130 128 124 161 154 100 157 154 144 157 154 144 130 128 124 145 122 90 130 128 124 -145 122 90 130 128 124 145 122 90 130 128 124 130 128 124 145 122 90 130 128 124 161 154 100 -157 154 144 157 154 144 202 194 153 167 167 167 226 217 157 228 223 180 227 220 173 226 218 164 -227 219 152 227 219 152 227 219 152 226 213 140 204 179 101 161 154 100 109 103 77 86 69 23 -57 50 17 57 50 17 57 50 17 57 50 17 57 50 16 54 47 16 54 47 16 54 47 16 -53 46 15 51 43 14 51 43 14 44 38 13 44 38 13 44 38 13 39 33 11 39 33 11 -37 32 10 30 25 8 30 25 8 24 19 6 24 19 6 22 19 6 15 13 5 15 13 5 -9 8 4 9 8 4 5 4 2 3 3 2 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 2 2 2 5 3 1 9 8 4 15 13 5 19 15 5 39 33 11 60 59 56 -109 103 77 110 108 101 130 128 124 130 128 124 130 128 124 130 128 124 145 122 90 130 128 124 -161 154 100 130 128 124 157 154 144 202 194 153 202 194 153 157 154 144 157 154 144 145 122 90 -130 128 124 113 113 113 130 128 124 145 122 90 113 113 113 145 122 90 113 113 113 113 113 113 -145 122 90 110 107 92 110 108 101 145 122 90 110 107 92 110 108 101 161 154 100 157 154 144 -202 194 153 226 218 164 228 223 180 227 220 173 226 218 164 225 216 150 227 218 146 225 216 150 -226 213 140 161 154 100 109 103 77 73 60 27 57 50 17 57 50 17 57 50 17 57 50 16 -54 47 16 54 47 16 53 46 15 53 46 15 51 43 14 51 43 14 44 38 13 44 38 13 -41 34 11 39 33 11 37 32 10 30 25 8 30 25 8 24 19 6 22 19 6 19 15 5 -15 13 5 14 10 4 9 8 4 7 6 2 5 3 1 3 3 2 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 3 3 2 7 6 2 20 19 13 61 61 59 93 93 92 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 145 122 90 130 128 124 161 154 100 130 128 124 130 128 124 -157 154 144 227 220 173 230 225 190 228 223 180 228 223 180 230 225 190 228 223 180 227 220 173 -157 154 144 145 122 90 113 113 113 145 122 90 113 113 113 145 122 90 113 113 113 145 122 90 -110 108 101 145 122 90 113 113 113 110 107 92 145 122 90 110 108 101 110 107 92 110 107 92 -110 107 92 110 107 92 110 108 101 161 154 100 202 194 153 201 199 182 227 220 173 226 218 164 -226 218 150 227 218 147 227 218 146 227 218 146 204 179 101 145 122 90 83 78 45 56 49 15 -57 50 17 57 50 17 57 50 16 54 47 16 54 47 16 53 46 15 51 43 14 51 43 14 -44 38 13 44 38 13 41 34 11 39 33 11 37 32 10 30 25 8 30 25 8 24 19 6 -22 19 6 19 15 5 15 13 5 14 10 4 9 8 4 5 4 2 3 3 2 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 5 4 46 45 43 93 93 92 113 113 113 130 128 124 113 113 113 130 128 124 113 113 113 -145 122 90 130 128 124 145 122 90 130 128 124 130 128 124 130 128 124 130 128 124 202 194 153 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 -230 225 190 130 128 124 145 122 90 113 113 113 145 122 90 113 113 113 145 122 90 113 113 113 -145 122 90 110 108 101 110 107 92 145 122 90 110 108 101 110 107 92 145 122 90 110 107 92 -145 122 90 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 145 122 90 202 194 153 -227 220 173 227 220 173 226 218 164 227 219 152 227 219 152 226 218 150 226 218 150 204 179 101 -145 122 90 73 60 27 57 50 17 57 50 17 57 50 16 54 47 16 54 47 16 53 46 15 -51 43 14 51 43 14 44 38 13 44 38 13 39 33 11 37 32 10 37 32 10 30 25 8 -30 25 8 24 19 6 19 15 5 15 13 5 15 13 5 9 8 4 7 6 2 5 3 1 -2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 17 17 66 66 65 -110 108 101 113 113 113 113 113 113 113 113 113 113 113 113 145 122 90 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 161 154 100 130 128 124 145 122 90 202 194 153 228 223 180 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 -227 220 173 113 113 113 145 122 90 113 113 113 110 107 92 130 128 124 110 107 92 110 107 92 -110 107 92 110 107 92 145 122 90 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 -110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 109 103 77 -109 103 77 161 154 100 202 194 153 228 223 180 226 218 164 227 219 152 226 218 150 226 218 150 -227 218 146 227 217 143 161 154 100 108 92 44 57 50 17 57 50 17 57 50 17 57 50 16 -54 47 16 53 46 15 51 43 14 51 43 14 44 38 13 44 38 13 39 33 11 37 32 10 -30 25 8 30 25 8 24 19 6 22 19 6 19 15 5 15 13 5 14 10 4 9 8 4 -5 4 2 3 3 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 24 24 23 72 72 72 113 113 113 113 113 113 -113 113 113 113 113 113 113 113 113 113 113 113 130 128 124 113 113 113 130 128 124 113 113 113 -145 122 90 130 128 124 145 122 90 130 128 124 145 122 90 157 154 144 230 225 190 230 225 190 -230 225 190 230 227 197 230 225 190 230 225 190 230 225 190 230 225 190 230 227 197 228 223 180 -202 194 153 110 107 92 130 128 124 110 107 92 145 122 90 110 107 92 110 107 92 145 122 90 -110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 -109 103 77 110 107 92 145 122 90 109 103 77 110 107 92 109 103 77 109 103 77 110 107 92 -109 103 77 93 93 92 109 103 77 145 122 90 157 154 144 226 218 164 227 220 173 227 219 152 -226 218 150 227 218 146 227 219 152 227 219 152 204 179 101 109 103 77 57 50 17 57 50 17 -57 50 17 57 50 16 54 47 16 53 46 15 51 43 14 44 38 13 44 38 13 41 34 11 -39 33 11 37 32 10 30 25 8 30 25 8 24 19 6 19 15 5 15 13 5 14 10 4 -9 8 4 7 6 2 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 25 25 25 89 88 84 113 113 113 113 113 113 113 113 113 113 113 113 -113 113 113 113 113 113 113 113 113 145 122 90 113 113 113 113 113 113 145 122 90 130 128 124 -130 128 124 145 122 90 130 128 124 130 128 124 130 128 124 228 223 180 230 225 190 230 225 190 -230 225 190 230 225 190 230 227 197 230 225 190 230 227 197 230 225 190 230 225 190 230 227 197 -157 154 144 110 107 92 145 122 90 110 107 92 113 113 113 110 107 92 110 107 92 110 107 92 -110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 109 103 77 110 107 92 -110 107 92 109 103 77 109 103 77 110 107 92 109 103 77 109 103 77 110 107 92 109 103 77 -109 103 77 109 103 77 109 103 77 109 103 77 109 103 77 109 103 77 161 154 100 227 220 173 -227 220 173 227 219 152 227 219 152 226 218 150 227 219 152 227 218 146 226 214 125 109 103 77 -62 54 22 57 50 16 57 50 17 56 49 15 54 47 16 54 47 16 51 43 14 44 38 13 -44 38 13 39 33 11 37 32 10 30 25 8 30 25 8 24 19 6 22 19 6 19 15 5 -14 10 4 9 8 4 7 6 2 5 3 1 2 2 2 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -17 17 17 72 72 72 113 113 113 113 113 113 113 113 113 113 113 113 110 108 101 113 113 113 -110 108 101 113 113 113 113 113 113 113 113 113 145 122 90 113 113 113 130 128 124 113 113 113 -145 122 90 113 113 113 130 128 124 110 107 92 202 194 153 230 225 190 230 225 190 230 227 197 -230 227 197 230 225 190 230 227 197 230 225 190 230 227 197 230 225 190 230 227 197 228 223 180 -130 128 124 145 122 90 110 107 92 110 107 92 145 122 90 110 107 92 110 107 92 110 107 92 -110 107 92 110 107 92 109 103 77 110 107 92 109 103 77 109 103 77 109 103 77 109 103 77 -109 103 77 109 103 77 109 103 77 109 103 77 109 103 77 109 103 77 109 103 77 109 103 77 -109 103 77 109 103 77 109 103 77 87 85 74 109 103 77 109 103 77 109 103 77 93 93 92 -161 154 100 226 218 164 226 218 164 227 219 152 227 219 152 226 218 150 227 218 147 227 217 143 -226 214 125 109 103 77 57 50 17 57 50 17 57 50 16 56 49 15 53 46 15 51 43 14 -51 43 14 44 38 13 44 38 13 39 33 11 37 32 10 30 25 8 28 21 6 24 19 6 -19 15 5 15 13 5 9 8 4 9 8 4 5 3 1 2 2 2 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 62 62 62 -113 113 113 113 113 113 113 113 113 110 108 101 113 113 113 110 108 101 113 113 113 110 108 101 -113 113 113 113 113 113 110 108 101 113 113 113 113 113 113 130 128 124 145 122 90 113 113 113 -130 128 124 145 122 90 130 128 124 161 154 100 227 221 188 227 221 188 230 227 197 230 225 190 -230 227 197 230 227 197 230 225 190 230 227 197 230 225 190 230 227 197 230 225 190 230 225 190 -110 107 92 110 107 92 110 107 92 145 122 90 110 107 92 110 107 92 110 107 92 109 103 77 -109 103 77 109 103 77 93 93 92 109 103 77 89 88 84 93 93 92 89 88 84 109 103 77 -89 88 84 89 88 84 109 103 77 89 88 84 109 103 77 89 88 84 109 103 77 89 88 84 -109 103 77 87 85 74 109 103 77 109 103 77 87 85 74 109 103 77 87 85 74 109 103 77 -87 85 74 109 103 77 157 154 144 226 217 157 226 218 164 227 219 152 226 218 150 226 218 150 -226 215 145 227 217 143 204 179 101 108 92 44 51 48 25 57 50 16 57 50 16 54 47 16 -53 46 15 51 43 14 44 38 13 44 38 13 39 33 11 37 32 10 30 25 8 30 25 8 -24 19 6 22 19 6 15 13 5 14 10 4 7 6 2 5 4 2 3 3 2 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 37 37 93 93 92 113 113 113 -110 108 101 113 113 113 110 108 101 113 113 113 110 108 101 110 108 101 110 108 101 110 108 101 -110 108 101 110 107 92 130 128 124 110 107 92 130 128 124 110 107 92 113 113 113 145 122 90 -130 128 124 145 122 90 130 128 124 157 154 144 230 227 197 230 227 197 230 227 197 230 227 197 -230 225 190 230 226 196 230 227 197 230 225 190 230 227 197 230 225 190 230 227 197 227 220 173 -110 107 92 145 122 90 110 107 92 110 107 92 110 107 92 109 103 77 110 107 92 109 103 77 -93 93 92 93 93 92 89 88 84 87 85 74 89 88 84 87 85 74 87 85 74 87 85 74 -109 103 77 87 85 74 87 85 74 87 85 74 87 85 74 87 85 74 87 85 74 87 85 74 -109 103 77 87 85 74 109 103 77 87 85 74 109 103 77 87 85 74 109 103 77 108 92 44 -109 103 77 87 85 74 108 92 44 109 103 77 202 194 153 227 220 173 226 217 157 226 218 150 -226 218 150 227 219 152 227 219 152 227 219 152 161 154 100 73 60 27 57 50 17 57 50 17 -54 47 16 53 46 15 51 43 14 51 43 14 44 38 13 41 34 11 37 32 10 37 32 10 -30 25 8 24 19 6 22 19 6 15 13 5 14 10 4 9 8 4 5 4 2 3 3 2 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 9 9 9 72 72 72 113 113 113 113 113 113 113 113 113 -110 108 101 113 113 113 110 108 101 110 108 101 110 108 101 110 108 101 110 108 101 110 108 101 -113 113 113 110 108 101 110 108 101 113 113 113 145 122 90 113 113 113 130 128 124 110 107 92 -130 128 124 110 107 92 145 122 90 228 223 180 230 227 197 230 227 197 230 225 190 230 227 197 -230 226 196 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 202 194 153 -110 108 101 110 107 92 110 107 92 110 107 92 110 107 92 109 103 77 109 103 77 89 88 84 -87 85 74 87 85 74 87 85 74 87 85 74 87 85 74 87 85 74 87 85 74 87 85 74 -87 85 74 87 85 74 87 85 74 87 85 74 87 85 74 109 103 77 87 85 74 87 85 74 -83 78 45 83 78 45 83 78 45 83 78 45 83 78 45 83 78 45 87 85 74 83 78 45 -87 85 74 83 78 45 109 103 77 87 85 74 83 78 45 145 122 90 226 217 157 226 218 164 -227 219 152 227 219 152 227 218 147 227 218 146 227 218 147 227 217 143 145 122 90 53 46 15 -57 50 16 57 50 16 54 47 16 53 46 15 51 43 14 44 38 13 41 34 11 37 32 10 -37 32 10 30 25 8 28 21 6 22 19 6 19 15 5 14 10 4 9 8 4 7 6 2 -5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 33 33 33 110 108 101 113 113 113 113 113 113 110 108 101 110 108 101 -110 108 101 113 113 113 93 93 92 113 113 113 93 93 92 113 113 113 93 93 92 110 108 101 -110 108 101 110 108 101 113 113 113 110 107 92 113 113 113 113 113 113 145 122 90 110 108 101 -161 154 100 110 107 92 157 154 144 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 197 230 226 196 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 202 194 153 -110 107 92 110 107 92 110 107 92 110 107 92 109 103 77 109 103 77 89 88 84 89 88 84 -89 88 84 87 85 74 87 85 74 87 85 74 87 85 74 72 72 72 87 85 74 72 72 72 -72 72 72 65 65 61 58 56 49 51 48 25 51 48 25 39 33 11 39 33 11 37 32 10 -41 34 11 37 34 22 44 40 24 44 38 13 51 48 25 53 46 15 53 46 15 56 49 15 -57 50 16 57 50 16 56 49 15 57 50 16 73 60 27 56 54 38 83 78 45 161 154 100 -226 218 164 227 219 152 227 219 152 227 219 152 227 218 146 227 217 143 226 213 140 204 179 101 -83 78 45 57 50 17 57 50 17 54 47 16 53 46 15 51 43 14 44 38 13 44 38 13 -37 32 10 37 32 10 30 25 8 28 21 6 22 19 6 19 15 5 15 13 5 9 8 4 -7 6 2 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 3 3 62 62 62 113 113 113 110 108 101 110 108 101 110 108 101 110 108 101 113 113 113 -93 93 92 113 113 113 110 108 101 93 93 92 113 113 113 93 93 92 113 113 113 110 108 101 -110 108 101 110 108 101 110 108 101 145 122 90 113 113 113 145 122 90 113 113 113 145 122 90 -113 113 113 113 113 113 202 194 153 227 221 188 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 197 230 227 197 230 227 197 230 227 197 230 226 196 230 227 197 230 227 197 157 154 144 -110 107 92 145 122 90 109 103 77 109 103 77 110 107 92 89 88 84 109 103 77 87 85 74 -87 85 74 87 85 74 72 72 72 72 72 72 65 65 61 46 45 43 37 34 22 20 19 13 -15 13 5 15 13 5 19 15 5 19 15 5 22 19 6 22 19 6 22 19 6 30 25 8 -30 25 8 37 32 10 37 32 10 37 32 10 41 34 11 44 38 13 44 38 13 51 43 14 -53 46 15 56 49 15 56 49 15 57 50 16 57 50 16 57 50 16 57 50 17 62 54 22 -109 103 77 226 213 140 227 219 152 227 219 152 226 218 150 226 218 150 226 218 150 225 216 150 -226 216 132 109 103 77 56 49 15 57 50 16 56 49 15 54 47 16 53 46 15 44 38 13 -44 38 13 39 33 11 37 32 10 30 25 8 30 25 8 22 19 6 19 15 5 15 13 5 -9 8 4 7 6 2 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 11 11 -89 88 84 113 113 113 110 108 101 113 113 113 113 113 113 93 93 92 113 113 113 93 93 92 -113 113 113 93 93 92 113 113 113 93 93 92 110 108 101 93 93 92 110 108 101 93 93 92 -110 108 101 110 108 101 110 108 101 113 113 113 110 107 92 113 113 113 145 122 90 113 113 113 -145 122 90 110 107 92 228 223 180 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 225 190 157 154 144 -110 107 92 109 103 77 110 107 92 109 103 77 109 103 77 89 88 84 87 85 74 87 85 74 -72 72 72 58 56 49 29 28 26 10 10 9 4 4 2 4 4 2 4 4 2 7 6 2 -9 8 4 9 8 4 9 8 4 15 13 5 15 13 5 17 15 7 22 19 6 22 19 6 -22 19 6 30 25 8 28 25 13 37 32 10 37 32 10 37 32 10 44 38 13 44 38 13 -44 38 13 51 43 14 53 46 15 56 49 15 57 50 16 57 50 17 57 50 17 57 50 16 -57 50 16 56 54 38 204 179 101 227 219 152 227 219 152 226 218 150 227 218 146 226 215 145 -227 218 146 227 217 136 161 154 100 62 54 22 57 50 17 57 50 16 54 47 16 53 46 15 -51 43 14 44 38 13 41 34 11 37 32 10 30 25 8 30 25 8 24 19 6 19 15 5 -15 13 5 9 8 4 7 6 2 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 27 27 110 108 101 -110 108 101 110 108 101 110 108 101 93 93 92 113 113 113 110 108 101 113 113 113 93 93 92 -113 113 113 93 93 92 93 93 92 113 113 113 93 93 92 93 93 92 110 108 101 110 108 101 -110 108 101 110 108 101 110 107 92 110 108 101 110 107 92 130 128 124 110 107 92 130 128 124 -110 107 92 161 154 100 230 227 201 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 161 154 100 -110 107 92 110 107 92 109 103 77 109 103 77 89 88 84 87 85 74 83 78 45 35 35 35 -22 19 6 9 8 4 6 6 4 4 4 2 3 3 2 3 3 2 3 3 2 3 3 2 -4 4 2 4 4 2 7 6 2 7 6 2 9 8 4 9 8 4 15 13 5 15 13 5 -19 15 5 22 19 6 22 19 6 28 21 6 30 25 8 37 32 10 37 32 10 39 33 11 -44 38 13 44 38 13 44 38 13 53 46 15 54 47 16 57 50 16 57 50 17 57 50 17 -57 50 17 62 54 22 62 54 22 161 154 100 226 217 157 227 219 152 226 218 150 226 218 150 -227 218 147 227 218 146 227 218 146 204 179 101 83 78 45 57 50 17 57 50 16 54 47 16 -53 46 15 51 43 14 44 38 13 41 34 11 37 32 10 37 28 9 30 25 8 24 19 6 -19 15 5 15 13 5 9 8 4 7 6 2 5 3 1 1 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 40 40 40 110 108 101 110 108 101 -110 108 101 110 108 101 113 113 113 93 93 92 113 113 113 93 93 92 93 93 92 110 108 101 -93 93 92 113 113 113 93 93 92 93 93 92 93 93 92 110 108 101 93 93 92 93 93 92 -110 108 101 110 107 92 110 107 92 113 113 113 110 107 92 145 122 90 110 107 92 145 122 90 -110 108 101 157 154 144 230 227 198 230 227 197 230 227 198 230 227 197 230 227 198 230 227 198 -230 227 197 230 227 198 230 227 198 230 227 198 230 227 198 230 227 198 231 228 208 161 154 100 -110 107 92 109 103 77 109 103 77 87 85 74 56 54 38 37 32 10 22 19 6 22 19 6 -15 13 5 9 8 4 4 4 2 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 0 3 3 2 3 2 0 7 6 2 7 6 2 9 8 4 9 8 4 -14 10 4 15 13 5 17 15 7 22 19 6 24 19 6 22 19 6 28 25 13 37 32 10 -37 32 10 44 38 13 44 38 13 44 38 13 51 43 14 53 46 15 56 49 15 57 50 16 -57 50 17 57 50 17 56 49 15 57 50 16 109 103 77 225 216 150 227 219 152 227 219 152 -226 218 150 227 218 147 227 218 147 227 219 152 226 213 140 108 92 44 57 50 17 57 50 17 -54 47 16 53 46 15 51 43 14 44 38 13 44 38 13 37 32 10 30 25 8 30 25 8 -24 19 6 19 15 5 15 13 5 9 8 4 7 6 2 3 3 2 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 51 51 50 110 108 101 113 113 113 93 93 92 -113 113 113 93 93 92 113 113 113 93 93 92 113 113 113 93 93 92 113 113 113 93 93 92 -93 93 92 93 93 92 93 93 92 113 113 113 93 93 92 93 93 92 93 93 92 110 108 101 -110 108 101 110 107 92 110 108 101 110 107 92 110 107 92 113 113 113 110 107 92 145 122 90 -110 107 92 202 194 153 230 227 199 230 227 198 230 227 198 230 227 198 230 227 199 230 227 199 -230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 130 128 124 -109 103 77 87 85 74 62 54 22 56 49 15 44 38 13 37 32 10 28 25 13 22 19 6 -15 13 5 9 8 4 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 5 3 1 7 6 2 -7 6 2 9 8 4 15 13 5 15 13 5 19 15 5 22 19 6 24 19 6 30 25 8 -28 25 13 37 32 10 37 32 10 44 38 13 44 38 13 44 38 13 53 46 15 54 47 16 -57 50 16 57 50 17 57 50 17 57 50 17 57 50 16 108 92 44 225 216 150 226 218 150 -227 219 152 226 218 150 227 218 147 227 218 146 227 218 146 227 217 143 145 122 90 53 46 15 -57 50 16 54 47 16 54 47 16 51 43 14 44 38 13 44 38 13 37 32 10 37 28 9 -30 25 8 24 19 6 19 15 5 15 13 5 9 8 4 5 4 2 3 3 2 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 62 62 62 113 113 113 110 108 101 110 108 101 113 113 113 -93 93 92 113 113 113 93 93 92 113 113 113 93 93 92 93 93 92 93 93 92 93 93 92 -113 113 113 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -110 107 92 110 107 92 110 107 92 110 107 92 145 122 90 110 107 92 145 122 90 110 108 101 -110 107 92 227 221 188 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 -230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 197 110 107 92 -62 54 22 57 50 16 56 49 15 44 38 13 37 32 10 37 32 10 30 25 8 22 19 6 -15 13 5 9 8 4 3 3 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 2 2 2 -4 4 2 5 4 2 7 6 2 9 8 4 15 13 5 15 13 5 22 19 6 22 19 6 -22 19 6 30 25 8 30 25 8 37 32 10 39 33 11 44 38 13 44 38 13 53 46 15 -53 46 15 56 49 15 57 50 17 57 50 17 57 50 17 56 49 15 83 78 45 202 194 153 -227 219 152 227 219 152 227 219 152 227 218 147 227 218 146 227 217 143 226 214 125 161 154 100 -57 50 17 57 50 17 54 47 16 53 46 15 53 46 15 44 38 13 41 34 11 37 32 10 -30 25 8 30 25 8 24 19 6 19 15 5 15 13 5 9 8 4 5 4 2 2 2 2 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 65 65 65 110 108 101 110 108 101 93 93 92 113 113 113 93 93 92 -113 113 113 93 93 92 93 93 92 93 93 92 110 108 101 93 93 92 113 113 113 93 93 92 -93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 110 108 101 93 93 92 -110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 -130 128 124 230 227 197 230 227 197 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 -230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 197 230 225 190 83 78 45 -62 54 22 57 50 16 53 46 15 44 38 13 44 38 13 37 32 10 22 19 6 22 19 6 -15 13 5 6 6 4 4 4 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 2 2 2 5 3 1 5 4 2 9 8 4 9 8 4 15 13 5 17 15 7 -22 19 6 22 19 6 28 25 13 30 25 8 37 32 10 37 32 10 44 38 13 44 38 13 -51 43 14 53 46 15 54 47 16 57 50 16 57 50 17 57 50 17 56 49 15 86 69 23 -202 194 153 227 218 146 227 219 152 227 219 152 227 218 147 227 218 146 226 215 145 227 217 136 -161 154 100 62 54 22 57 50 16 56 49 15 53 46 15 51 43 14 44 38 13 44 38 13 -37 32 10 30 25 8 30 25 8 22 19 6 19 15 5 14 10 4 9 8 4 5 3 1 -2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 65 65 65 113 113 113 93 93 92 113 113 113 93 93 92 113 113 113 93 93 92 -93 93 92 93 93 92 113 113 113 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 110 107 92 110 107 92 110 107 92 110 107 92 145 122 90 110 107 92 110 107 92 -161 154 100 230 227 197 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 203 -230 227 199 230 227 201 230 227 201 230 227 197 230 225 190 230 225 190 230 225 190 83 78 45 -57 50 16 56 49 15 53 46 15 44 38 13 37 32 10 37 32 10 30 25 8 17 15 7 -15 13 5 9 8 4 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 0 2 2 2 3 2 0 7 6 2 10 7 2 9 8 4 -15 13 5 19 15 5 22 19 6 22 19 6 28 25 13 37 32 10 37 32 10 44 38 13 -44 38 13 51 43 14 53 46 15 54 47 16 57 50 16 57 50 17 57 50 17 56 49 15 -81 65 20 202 194 153 227 219 152 227 219 152 226 218 150 227 218 147 227 218 146 227 218 146 -227 217 136 161 154 100 62 54 22 57 50 17 54 47 16 54 47 16 51 43 14 44 38 13 -39 33 11 37 32 10 30 25 8 28 21 6 22 19 6 15 13 5 14 10 4 7 6 2 -5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -62 62 62 110 108 101 93 93 92 110 108 101 93 93 92 110 108 101 93 93 92 93 93 92 -113 113 113 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 93 93 92 93 93 92 93 93 92 89 88 84 93 93 92 93 93 92 93 93 92 -110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 -157 154 144 230 227 198 230 227 201 230 227 199 230 227 203 230 227 201 230 227 201 230 227 201 -230 227 201 230 227 199 230 226 196 230 225 190 230 225 190 230 225 190 230 225 190 83 78 45 -62 54 22 56 49 15 53 46 15 44 38 13 44 38 13 28 25 13 28 25 13 22 19 6 -15 13 5 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 2 2 2 -2 2 2 3 3 2 3 3 2 3 3 2 3 3 2 5 3 1 5 4 2 7 6 2 -9 8 4 15 13 5 19 15 5 22 19 6 24 19 6 30 25 8 30 25 8 37 32 10 -37 32 10 44 38 13 44 38 13 53 46 15 54 47 16 57 50 16 57 50 17 57 50 17 -57 50 16 73 60 27 202 194 153 227 218 146 227 219 152 226 218 150 227 218 147 227 218 146 -227 218 146 227 217 143 204 179 101 51 48 25 57 50 16 57 50 16 53 46 15 51 43 14 -44 38 13 39 33 11 37 32 10 30 25 8 24 19 6 22 19 6 15 13 5 9 8 4 -7 6 2 3 3 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 52 52 -110 108 101 93 93 92 113 113 113 93 93 92 113 113 113 93 93 92 93 93 92 93 93 92 -93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 93 93 92 89 88 84 89 88 84 89 88 84 89 88 84 93 93 92 93 93 92 -109 103 77 93 93 92 109 103 77 110 107 92 110 107 92 110 107 92 110 107 92 110 107 92 -202 194 153 230 227 201 230 227 201 230 227 201 230 227 203 230 227 203 230 227 203 230 227 203 -230 227 197 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 227 197 83 78 45 -57 50 16 56 49 15 51 48 25 44 38 13 37 32 10 37 32 10 30 25 8 15 13 5 -15 13 5 7 6 2 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 0 1 1 0 2 2 2 3 3 2 5 3 1 5 3 1 5 4 2 -5 4 2 5 4 2 5 4 2 5 4 2 5 4 2 7 6 2 7 6 2 9 8 4 -10 7 2 14 10 4 15 13 5 19 15 5 22 19 6 24 19 6 30 25 8 30 25 8 -37 32 10 44 38 13 44 38 13 51 43 14 53 46 15 56 49 15 57 50 16 57 50 17 -57 50 16 57 50 16 73 60 27 226 213 140 227 219 152 227 219 152 226 218 150 227 218 147 -227 218 146 227 217 143 227 217 143 161 154 100 57 50 17 57 50 17 56 49 15 53 46 15 -51 43 14 44 38 13 39 33 11 37 32 10 30 25 8 24 19 6 19 15 5 15 13 5 -9 8 4 5 4 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 43 43 110 108 101 -93 93 92 110 108 101 93 93 92 93 93 92 93 93 92 93 93 92 113 113 113 93 93 92 -93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 89 88 84 -89 88 84 89 88 84 89 88 84 89 88 84 89 88 84 89 88 84 89 88 84 93 93 92 -109 103 77 93 93 92 110 107 92 110 107 92 109 103 77 145 122 90 110 107 92 110 107 92 -202 194 153 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 199 230 226 196 -230 225 190 230 225 190 230 225 190 230 225 190 230 227 197 230 225 190 230 227 197 83 78 45 -62 54 22 56 49 15 53 46 15 44 38 13 37 32 10 37 32 10 22 19 6 22 19 6 -15 13 5 7 6 2 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 -2 2 2 3 3 2 5 3 1 5 4 2 7 6 2 9 8 4 9 8 4 12 7 2 -14 10 4 14 10 4 14 10 4 14 10 4 14 10 4 14 10 4 14 10 4 14 10 4 -9 8 4 14 10 4 15 13 5 15 13 5 19 15 5 22 19 6 30 25 8 30 25 8 -37 32 10 37 32 10 44 38 13 44 38 13 51 43 14 53 46 15 57 50 16 57 50 17 -62 54 22 57 50 16 57 50 16 83 78 45 226 215 145 227 219 152 227 219 152 226 218 150 -227 218 147 227 218 146 227 218 146 227 217 143 161 154 100 57 50 16 57 50 17 54 47 16 -53 46 15 51 43 14 44 38 13 37 32 10 37 32 10 30 25 8 24 19 6 19 15 5 -15 13 5 9 8 4 5 3 1 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 29 29 110 108 101 93 93 92 -110 108 101 93 93 92 93 93 92 113 113 113 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 89 88 84 89 88 84 -89 88 84 89 88 84 72 72 72 89 88 84 89 88 84 89 88 84 89 88 84 89 88 84 -93 93 92 110 107 92 109 103 77 109 103 77 110 107 92 110 107 92 109 103 77 110 107 92 -227 221 188 230 227 203 230 227 203 230 227 203 230 227 203 230 227 198 230 225 190 230 225 190 -230 226 196 230 225 190 230 227 197 230 227 197 230 225 190 230 227 197 230 227 197 83 78 45 -57 50 16 53 46 15 53 46 15 44 38 13 37 32 10 37 32 10 30 25 8 19 15 5 -14 10 4 9 8 4 5 3 1 0 0 0 0 0 0 0 0 0 2 2 2 3 3 2 -5 3 1 7 6 2 9 8 4 14 10 4 14 10 4 15 13 5 19 15 5 19 15 5 -19 15 5 19 15 5 19 15 5 22 19 6 19 15 5 19 15 5 19 15 5 19 15 5 -19 15 5 18 12 3 19 15 5 19 15 5 19 15 5 24 19 6 22 19 6 28 21 6 -30 25 8 37 28 9 39 33 11 44 38 13 51 43 14 51 43 14 56 49 15 57 50 16 -62 49 15 62 54 22 62 54 22 62 54 22 108 92 44 225 216 150 227 219 152 227 219 152 -226 218 150 227 218 146 227 218 146 227 217 143 227 217 136 145 122 90 57 50 17 57 50 17 -54 47 16 53 46 15 44 38 13 44 38 13 39 33 11 30 25 8 30 25 8 22 19 6 -19 15 5 14 10 4 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 93 93 92 93 93 92 110 108 101 -93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 93 93 92 93 93 92 89 88 84 89 88 84 89 88 84 89 88 84 72 72 72 -93 93 92 72 72 72 93 93 92 72 72 72 89 88 84 89 88 84 89 88 84 109 103 77 -89 88 84 109 103 77 109 103 77 110 107 92 109 103 77 110 107 92 109 103 77 110 107 92 -230 227 197 230 227 201 230 227 203 230 227 203 230 227 197 230 227 197 230 225 190 230 227 197 -230 226 196 230 226 196 230 226 196 230 226 196 230 227 197 230 227 197 230 227 197 83 78 45 -62 54 22 56 49 15 53 46 15 44 38 13 44 38 13 28 25 13 30 25 8 17 15 7 -15 13 5 7 6 2 3 3 2 1 1 0 1 1 0 5 3 1 7 4 1 10 7 2 -14 10 4 14 10 4 15 13 5 19 15 5 22 19 6 24 19 6 24 19 6 28 21 6 -28 21 6 30 25 8 30 25 8 28 21 6 30 25 8 28 21 6 28 21 6 24 19 6 -24 19 6 24 19 6 22 19 6 24 16 6 24 19 6 24 16 6 24 19 6 28 21 6 -30 25 8 30 25 8 37 32 10 41 34 11 44 38 13 51 43 14 51 43 14 57 50 16 -57 50 16 69 51 16 62 49 15 62 54 22 62 54 22 109 103 77 227 219 152 227 219 152 -227 219 152 227 218 147 227 218 146 227 218 146 227 217 143 227 217 136 109 103 77 62 49 15 -57 50 16 54 47 16 51 43 14 44 38 13 44 38 13 37 32 10 30 25 8 28 21 6 -22 19 6 15 13 5 9 8 4 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 2 2 2 89 88 84 110 108 101 93 93 92 93 93 92 -93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 89 88 84 89 88 84 89 88 84 93 93 92 72 72 72 89 88 84 93 93 92 -72 72 72 89 88 84 72 72 72 89 88 84 87 85 74 89 88 84 87 85 74 89 88 84 -89 88 84 93 93 92 109 103 77 109 103 77 109 103 77 109 103 77 110 107 92 110 107 92 -230 227 203 230 227 203 230 227 201 230 227 197 230 227 197 230 225 190 230 226 196 230 226 196 -230 226 196 230 226 196 230 227 197 230 227 197 230 227 197 230 227 197 230 225 190 109 103 77 -57 50 17 54 47 16 53 46 15 44 38 13 37 32 10 37 32 10 22 19 6 22 19 6 -15 13 5 9 8 4 5 3 1 5 3 1 5 3 1 10 7 2 14 10 4 15 13 5 -19 15 5 22 19 6 24 19 6 28 21 6 30 25 8 30 25 8 37 28 9 37 28 9 -37 28 9 37 28 9 37 28 9 37 28 9 37 28 9 37 28 9 30 25 8 37 28 9 -30 25 8 30 25 8 28 21 6 24 19 6 24 19 6 24 19 6 24 19 6 28 21 6 -28 21 6 30 25 8 37 28 9 38 30 10 41 34 11 44 38 13 51 43 14 56 49 15 -57 50 16 62 49 15 62 54 22 62 49 15 69 51 16 75 57 18 161 154 100 227 219 152 -227 219 152 227 219 152 227 218 147 227 218 146 227 218 146 227 217 136 226 216 132 108 92 44 -57 50 17 57 50 16 54 47 16 51 43 14 44 38 13 39 33 11 37 32 10 30 25 8 -24 19 6 19 15 5 15 13 5 9 8 4 5 4 2 2 2 2 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 61 61 59 93 93 92 93 93 92 93 93 92 110 108 101 -93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 89 88 84 89 88 84 -89 88 84 89 88 84 89 88 84 72 72 72 93 93 92 89 88 84 72 72 72 89 88 84 -72 72 72 89 88 84 72 72 72 89 88 84 72 72 72 89 88 84 87 85 74 89 88 84 -109 103 77 89 88 84 109 103 77 109 103 77 109 103 77 110 107 92 109 103 77 145 122 90 -231 228 208 230 227 199 230 227 197 230 227 197 230 225 190 230 227 197 230 227 197 230 227 197 -230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 108 92 44 -51 48 25 56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 28 25 13 22 19 6 -15 13 5 10 7 2 10 7 2 10 7 2 12 7 2 15 13 5 19 15 5 24 19 6 -24 19 6 30 25 8 30 25 8 37 28 9 38 30 10 39 33 11 41 34 11 41 34 11 -44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 41 34 11 41 34 11 -38 30 10 38 30 10 37 28 9 30 25 8 37 22 6 28 21 6 28 21 6 28 21 6 -30 25 8 30 25 8 30 25 8 37 28 9 41 34 11 44 38 13 50 39 13 51 43 14 -56 47 15 62 54 22 69 51 16 62 54 22 69 51 16 62 54 22 75 57 18 202 194 153 -226 215 145 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146 227 217 143 226 214 125 -73 60 27 62 54 22 57 50 16 56 49 15 51 43 14 44 38 13 39 33 11 37 32 10 -30 25 8 22 19 6 19 15 5 14 10 4 9 8 4 5 3 1 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 38 38 38 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 89 88 84 89 88 84 89 88 84 -93 93 92 72 72 72 89 88 84 93 93 92 72 72 72 89 88 84 72 72 72 89 88 84 -72 72 72 89 88 84 72 72 72 72 72 72 72 72 72 87 85 74 87 85 74 87 85 74 -87 85 74 109 103 77 89 88 84 109 103 77 109 103 77 109 103 77 109 103 77 130 128 124 -230 227 198 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 197 230 227 197 230 227 197 230 227 198 230 227 199 230 227 199 230 227 199 109 103 77 -57 50 16 54 47 16 53 46 15 44 38 13 37 32 10 37 32 10 30 25 8 22 19 6 -19 15 5 15 13 5 14 10 4 15 13 5 19 15 5 22 19 6 24 19 6 30 25 8 -30 25 8 37 28 9 39 33 11 41 34 11 44 38 13 44 38 13 50 39 13 51 43 14 -51 43 14 51 43 14 51 43 14 51 43 14 50 39 13 51 43 14 51 43 14 50 39 13 -50 39 13 44 38 13 41 34 11 44 30 9 38 30 10 37 22 6 30 25 8 37 22 6 -30 25 8 37 22 6 30 25 8 37 28 9 38 30 10 44 30 9 44 38 13 51 43 14 -53 46 15 62 49 15 57 50 16 75 57 18 62 54 22 69 51 16 62 54 22 86 69 23 -226 213 140 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146 227 217 143 226 215 145 -204 179 101 62 54 22 62 54 22 57 50 16 54 47 16 51 43 14 44 38 13 37 32 10 -37 28 9 28 21 6 22 19 6 15 13 5 9 8 4 7 6 2 3 3 2 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 11 11 11 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 93 93 92 89 88 84 89 88 84 89 88 84 89 88 84 72 72 72 93 93 92 -72 72 72 93 93 92 72 72 72 89 88 84 72 72 72 89 88 84 72 72 72 72 72 72 -72 72 72 72 72 72 72 72 72 89 88 84 72 72 72 89 88 84 87 85 74 87 85 74 -89 88 84 109 103 77 89 88 84 109 103 77 109 103 77 109 103 77 109 103 77 145 122 90 -230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 198 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 109 103 77 -57 50 17 57 50 16 53 46 15 51 43 14 44 38 13 37 32 10 28 25 13 24 19 6 -22 19 6 19 15 5 19 15 5 19 15 5 24 19 6 28 21 6 30 25 8 37 28 9 -41 34 11 44 38 13 44 38 13 50 39 13 51 43 14 56 47 15 56 47 15 56 47 15 -62 49 15 62 49 15 62 49 15 62 49 15 62 49 15 62 49 15 56 47 15 56 47 15 -51 43 14 50 39 13 50 39 13 50 39 13 41 34 11 44 30 9 37 28 9 37 28 9 -37 22 6 30 25 8 37 22 6 37 28 9 37 28 9 38 30 10 44 30 9 50 39 13 -50 39 13 56 47 15 62 49 15 62 54 22 75 57 18 75 57 18 62 54 22 62 54 22 -109 103 77 227 219 152 227 219 152 227 219 152 227 218 147 227 218 146 227 218 146 227 217 143 -227 217 136 161 154 100 62 49 15 62 49 15 57 50 17 54 47 16 51 43 14 44 38 13 -37 32 10 30 25 8 24 19 6 19 15 5 15 13 5 9 8 4 5 3 1 2 2 2 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 72 72 72 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 -93 93 92 89 88 84 89 88 84 93 93 92 72 72 72 93 93 92 72 72 72 93 93 92 -72 72 72 93 93 92 72 72 72 89 88 84 72 72 72 72 72 72 89 88 84 72 72 72 -89 88 84 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 87 85 74 87 85 74 -87 85 74 109 103 77 87 85 74 109 103 77 89 88 84 109 103 77 83 78 45 145 122 90 -230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 198 230 227 199 230 227 199 -230 227 199 230 227 199 230 227 201 230 227 201 230 227 201 230 227 203 230 227 199 110 107 92 -57 50 17 57 50 16 53 46 15 51 43 14 44 38 13 37 32 10 37 28 9 30 25 8 -28 21 6 24 19 6 24 19 6 24 19 6 30 25 8 37 28 9 44 30 9 41 34 11 -50 39 13 50 39 13 53 46 15 56 47 15 62 49 15 62 49 15 62 49 15 69 51 16 -62 54 22 69 51 16 69 51 16 69 51 16 69 51 16 69 51 16 62 49 15 69 51 16 -62 49 15 62 49 15 56 47 15 60 41 12 50 39 13 50 39 13 41 34 11 44 30 9 -37 28 9 37 28 9 37 22 6 37 22 6 37 28 9 44 30 9 44 30 9 50 39 13 -50 39 13 56 47 15 62 49 15 62 49 15 69 51 16 62 54 22 75 57 18 75 57 18 -81 65 20 161 154 100 227 219 152 227 219 152 227 219 152 227 218 147 227 218 146 227 218 146 -227 217 136 226 216 132 108 92 44 62 54 22 69 51 16 57 50 17 53 46 15 51 43 14 -44 38 13 37 32 10 30 25 8 24 19 6 15 13 5 14 10 4 7 6 2 5 3 1 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -40 40 40 93 93 92 93 93 92 93 93 92 93 93 92 93 93 92 89 88 84 89 88 84 -89 88 84 72 72 72 93 93 92 72 72 72 93 93 92 72 72 72 93 93 92 72 72 72 -89 88 84 72 72 72 72 72 72 89 88 84 72 72 72 72 72 72 72 72 72 72 72 72 -72 72 72 72 72 72 72 72 72 72 72 72 87 85 74 72 72 72 87 85 74 87 85 74 -87 85 74 87 85 74 109 103 77 109 103 77 109 103 77 73 60 27 51 48 25 130 128 124 -230 227 197 230 227 197 230 227 197 230 227 198 230 227 199 230 227 199 230 227 199 230 227 201 -230 227 201 230 227 201 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 145 122 90 -62 54 22 57 50 16 56 49 15 51 43 14 44 38 13 44 38 13 37 28 9 30 25 8 -30 25 8 30 25 8 30 25 8 37 22 6 37 28 9 41 34 11 44 38 13 50 39 13 -51 43 14 56 47 15 62 49 15 62 49 15 69 51 16 69 51 16 75 57 18 75 57 18 -75 57 18 75 57 18 75 57 18 73 60 27 75 57 18 75 57 18 75 57 18 69 51 16 -69 51 16 69 51 16 62 49 15 62 49 15 56 47 15 51 43 14 50 39 13 50 39 13 -44 30 9 44 30 9 37 28 9 37 28 9 37 28 9 44 30 9 38 30 10 44 30 9 -50 39 13 51 43 14 62 49 15 62 49 15 69 51 16 75 57 18 75 57 18 75 57 18 -75 57 18 86 69 23 225 216 150 227 219 152 227 219 152 226 218 150 227 218 146 227 218 146 -227 217 143 227 217 143 226 214 125 73 60 27 62 54 22 69 51 16 57 50 17 51 43 14 -50 39 13 44 38 13 37 28 9 24 19 6 22 19 6 15 13 5 9 8 4 5 4 2 -2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 -89 88 84 93 93 92 93 93 92 93 93 92 89 88 84 89 88 84 89 88 84 89 88 84 -89 88 84 93 93 92 72 72 72 93 93 92 72 72 72 89 88 84 72 72 72 89 88 84 -72 72 72 93 93 92 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 -72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 87 85 74 87 85 74 -87 85 74 87 85 74 87 85 74 87 85 74 56 54 38 57 50 16 56 49 15 161 154 100 -230 227 197 230 227 197 230 227 199 230 227 199 230 227 199 230 227 201 230 227 201 230 227 203 -230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 197 130 128 124 -62 54 22 57 50 17 56 49 15 53 46 15 51 43 14 41 34 11 39 33 11 38 30 10 -37 28 9 37 28 9 37 28 9 38 30 10 41 34 11 50 39 13 50 39 13 56 47 15 -62 49 15 62 49 15 69 51 16 75 57 18 73 60 27 75 57 18 75 57 18 62 54 22 -75 57 18 73 60 27 75 57 18 75 57 18 75 57 18 75 57 18 73 60 27 75 57 18 -75 57 18 75 57 18 75 57 18 69 51 16 62 49 15 62 49 15 60 41 12 50 39 13 -50 39 13 44 30 9 44 30 9 44 30 9 37 28 9 44 30 9 44 30 9 44 30 9 -50 39 13 50 39 13 56 47 15 62 49 15 57 50 16 75 57 18 62 54 22 75 57 18 -75 57 18 81 65 20 109 103 77 227 219 152 227 219 152 227 219 152 227 218 147 227 218 146 -227 217 143 227 217 143 226 216 132 161 154 100 69 51 16 62 54 22 62 49 15 57 50 16 -51 43 14 50 39 13 41 34 11 30 25 8 24 19 6 19 15 5 14 10 4 9 8 4 -5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 58 58 -93 93 92 89 88 84 89 88 84 89 88 84 89 88 84 89 88 84 72 72 72 93 93 92 -72 72 72 89 88 84 89 88 84 72 72 72 89 88 84 72 72 72 89 88 84 72 72 72 -72 72 72 72 72 72 72 72 72 89 88 84 72 72 72 72 72 72 72 72 72 72 72 72 -72 72 72 72 72 72 66 66 66 72 72 72 72 72 72 72 72 72 72 72 72 87 85 74 -87 85 74 108 92 44 109 103 77 73 60 27 57 50 16 57 50 16 57 50 16 157 154 144 -230 225 190 230 227 199 230 227 199 230 227 201 230 227 201 230 227 203 230 227 203 230 227 203 -230 227 203 230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 230 227 203 161 154 100 -62 54 22 57 50 16 57 50 16 56 49 15 51 43 14 44 38 13 44 38 13 41 34 11 -41 34 11 41 34 11 41 34 11 41 34 11 50 39 13 51 43 14 56 47 15 62 49 15 -69 51 16 75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 83 78 45 145 122 90 -157 154 144 202 194 153 202 194 153 202 194 153 202 194 153 161 154 100 109 103 77 81 65 20 -75 57 18 81 65 20 75 57 18 75 57 18 69 51 16 69 51 16 62 49 15 60 41 12 -50 39 13 50 39 13 44 30 9 44 30 9 37 28 9 44 30 9 37 28 9 44 30 9 -44 30 9 50 39 13 60 41 12 56 47 15 69 51 16 69 51 16 75 57 18 75 57 18 -75 57 18 75 57 18 75 57 18 204 179 101 226 218 164 227 219 152 226 218 150 227 218 147 -227 218 146 227 217 143 227 217 136 227 217 136 108 92 44 75 57 18 62 54 22 69 51 16 -56 47 15 51 43 14 44 38 13 37 32 10 28 21 6 22 19 6 15 13 5 9 8 4 -5 4 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 20 20 93 93 92 -89 88 84 89 88 84 89 88 84 93 93 92 72 72 72 89 88 84 93 93 92 72 72 72 -89 88 84 72 72 72 89 88 84 72 72 72 72 72 72 89 88 84 72 72 72 72 72 72 -72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 -66 66 66 66 66 66 66 66 66 65 65 61 72 72 72 66 66 65 87 85 74 83 78 45 -87 85 74 87 85 74 56 54 38 56 49 15 57 50 16 57 50 16 56 49 15 157 154 144 -230 227 199 230 227 201 230 227 201 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 -230 227 203 231 227 205 231 227 205 231 227 205 231 228 208 231 228 208 231 227 205 157 154 144 -69 51 16 62 54 22 62 49 15 56 47 15 51 43 14 50 39 13 50 39 13 50 39 13 -44 38 13 50 39 13 50 39 13 50 39 13 51 43 14 56 47 15 69 51 16 62 54 22 -75 57 18 75 57 18 75 57 18 75 57 18 83 78 45 157 154 144 230 225 190 230 227 197 -230 227 197 230 227 199 230 227 203 230 227 203 230 227 199 230 227 197 230 227 197 201 199 182 -145 122 90 81 65 20 75 57 18 81 65 20 75 57 18 75 57 18 69 51 16 62 49 15 -60 41 12 60 41 12 50 39 13 51 31 9 44 30 9 44 30 9 44 30 9 44 30 9 -44 30 9 50 39 13 51 43 14 60 41 12 62 49 15 69 51 16 62 54 22 75 57 18 -73 60 27 81 65 20 73 60 27 83 78 45 225 216 150 227 219 152 227 219 152 227 218 147 -227 218 146 227 218 146 227 217 143 226 213 140 226 212 108 73 60 27 75 57 18 69 51 16 -62 49 15 56 47 15 51 43 14 41 34 11 30 25 8 24 19 6 19 15 5 15 13 5 -9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 72 72 89 88 84 -89 88 84 89 88 84 89 88 84 72 72 72 93 93 92 72 72 72 89 88 84 72 72 72 -89 88 84 72 72 72 72 72 72 89 88 84 72 72 72 72 72 72 72 72 72 89 88 84 -72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 65 65 65 66 66 65 65 65 61 72 72 72 83 78 45 72 72 72 -87 85 74 83 78 45 51 43 14 54 47 16 57 50 16 57 50 16 57 50 16 157 154 144 -230 227 197 230 227 199 230 227 203 230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 -231 227 205 231 228 208 231 227 205 231 227 205 231 228 208 231 228 208 231 228 208 157 154 144 -81 65 20 62 54 22 62 49 15 62 49 15 56 47 15 51 43 14 51 43 14 50 39 13 -50 39 13 50 39 13 50 39 13 60 41 12 56 47 15 62 49 15 69 51 16 75 57 18 -75 57 18 73 60 27 75 57 18 145 122 90 230 225 190 230 227 197 230 227 199 230 227 203 -230 227 199 230 227 201 230 227 199 230 227 199 230 227 198 230 227 197 230 227 197 230 227 197 -230 227 197 202 194 153 108 92 44 75 57 18 81 65 20 75 57 18 75 57 18 75 57 18 -69 51 16 60 41 12 60 41 12 51 31 9 44 30 9 44 30 9 44 30 9 44 30 9 -44 30 9 51 31 9 50 39 13 60 41 12 62 49 15 69 51 16 75 57 18 75 57 18 -75 57 18 75 57 18 81 65 20 81 65 20 161 154 100 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 143 226 213 140 145 122 90 75 57 18 62 54 22 -62 54 22 62 49 15 53 46 15 50 39 13 37 32 10 28 21 6 22 19 6 15 13 5 -9 8 4 7 6 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 26 26 89 88 84 89 88 84 -89 88 84 93 93 92 72 72 72 89 88 84 89 88 84 72 72 72 89 88 84 72 72 72 -72 72 72 89 88 84 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 -72 72 72 72 72 72 72 72 72 72 72 72 66 66 66 66 66 66 66 66 66 65 65 65 -65 65 65 62 62 62 65 65 65 65 65 61 65 65 61 65 65 61 72 72 72 87 85 74 -60 59 56 44 38 13 44 38 13 54 47 16 57 50 16 56 49 15 56 49 15 202 194 153 -230 227 199 230 227 203 230 227 203 230 227 203 231 228 208 230 227 203 231 228 208 231 227 205 -231 227 205 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 202 194 153 -69 51 16 69 51 16 62 54 22 62 49 15 62 49 15 62 49 15 56 47 15 60 41 12 -56 47 15 60 41 12 56 47 15 62 49 15 62 49 15 69 51 16 75 57 18 75 57 18 -81 65 20 73 60 27 161 154 100 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 -230 227 203 230 227 201 230 227 201 230 227 199 230 227 199 230 227 199 230 227 197 230 227 197 -230 227 197 230 227 197 201 199 182 108 92 44 81 65 20 81 65 20 83 60 18 75 57 18 -69 51 16 62 49 15 60 41 12 51 43 14 51 31 9 51 31 9 44 30 9 44 30 9 -44 30 9 51 31 9 51 31 9 60 41 12 62 49 15 62 49 15 62 49 15 75 57 18 -75 57 18 81 65 20 75 57 18 81 65 20 86 69 23 225 216 150 227 219 152 227 219 152 -226 218 150 227 218 146 227 218 146 227 217 143 227 217 136 226 216 132 86 69 23 75 57 18 -75 57 18 62 49 15 62 49 15 51 43 14 44 38 13 30 25 8 24 19 6 19 15 5 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 66 66 89 88 84 89 88 84 -72 72 72 89 88 84 72 72 72 89 88 84 72 72 72 89 88 84 72 72 72 72 72 72 -89 88 84 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 -72 72 72 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 62 62 62 -62 62 62 62 62 62 62 62 62 62 62 62 65 65 61 65 65 61 83 78 45 65 65 61 -41 34 11 44 38 13 51 43 14 54 47 16 57 50 16 57 50 16 56 49 15 157 154 144 -230 227 199 231 228 208 230 227 203 231 228 208 230 227 203 231 228 208 231 228 208 231 228 208 -231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 209 201 199 182 -62 54 22 75 57 18 69 51 16 62 54 22 62 49 15 62 49 15 62 49 15 62 49 15 -62 49 15 62 49 15 62 49 15 69 51 16 69 51 16 75 57 18 81 65 20 75 57 18 -81 65 20 145 122 90 231 229 213 224 222 210 231 228 208 230 227 203 231 227 205 230 227 203 -230 227 203 230 227 203 230 227 203 230 227 201 230 227 199 230 227 199 230 227 199 230 227 198 -230 227 197 230 227 197 230 227 197 227 221 188 108 92 44 83 60 18 83 60 18 83 60 18 -75 57 18 69 51 16 69 51 16 60 41 12 60 41 12 51 31 9 51 31 9 44 30 9 -44 30 9 51 31 9 50 39 13 60 41 12 60 41 12 62 49 15 69 51 16 69 51 16 -75 57 18 81 65 20 81 65 20 81 65 20 81 65 20 145 122 90 227 219 152 227 219 152 -226 218 150 227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 161 154 100 81 65 20 -75 57 18 62 54 22 62 49 15 56 47 15 51 43 14 37 28 9 30 25 8 22 19 6 -15 13 5 9 8 4 5 4 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 49 49 49 72 72 72 89 88 84 -72 72 72 89 88 84 72 72 72 89 88 84 72 72 72 72 72 72 72 72 72 72 72 72 -72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 -66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 62 62 62 62 62 62 62 62 62 -62 62 62 58 58 58 58 58 58 61 61 59 65 65 61 65 65 61 66 66 65 44 38 13 -37 32 10 44 38 13 51 43 14 53 46 15 57 50 16 57 50 17 56 49 15 202 194 153 -231 228 208 230 227 203 231 227 205 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 -231 228 208 231 228 208 231 228 209 231 228 209 231 228 209 231 228 208 224 222 210 227 221 188 -75 57 18 62 54 22 75 57 18 69 51 16 69 51 16 62 49 15 69 51 16 62 49 15 -69 51 16 69 51 16 69 51 16 69 51 16 75 57 18 75 57 18 81 65 20 73 60 27 -108 92 44 231 228 208 231 228 208 231 228 208 231 227 205 231 228 208 231 227 205 231 227 205 -230 227 203 230 227 203 230 227 203 230 227 203 230 227 201 230 227 201 230 227 199 230 227 199 -230 227 198 230 227 197 230 226 196 230 226 196 202 194 153 86 69 23 86 69 23 81 65 20 -83 60 18 75 57 18 69 51 16 62 49 15 60 41 12 50 39 13 51 31 9 51 31 9 -51 31 9 51 31 9 51 31 9 51 31 9 60 41 12 62 49 15 69 51 16 69 51 16 -75 57 18 75 57 18 83 60 18 81 65 20 86 69 23 86 69 23 225 216 150 227 219 152 -227 219 152 226 218 150 227 218 146 227 218 146 227 217 143 227 217 136 226 216 132 108 92 44 -75 57 18 75 57 18 69 51 16 62 49 15 56 47 15 39 33 11 30 25 8 24 19 6 -19 15 5 14 10 4 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 7 7 7 -31 31 31 58 58 58 72 72 72 72 72 72 89 88 84 72 72 72 72 72 72 72 72 72 -72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 66 66 66 65 65 65 -66 66 66 66 66 66 65 65 65 62 62 62 62 62 62 62 62 62 62 62 62 58 58 58 -58 58 58 58 58 58 58 58 58 60 59 56 65 65 61 65 65 61 44 40 24 30 25 8 -37 32 10 44 38 13 44 38 13 54 47 16 57 50 16 57 50 17 56 49 15 167 167 167 -230 227 197 231 228 208 231 227 205 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 -231 228 209 231 228 209 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 224 222 210 -75 57 18 75 57 18 75 57 18 62 54 22 75 57 18 69 51 16 69 51 16 75 57 18 -69 51 16 75 57 18 69 51 16 75 57 18 81 65 20 81 65 20 81 65 20 81 65 20 -201 199 182 230 227 203 231 228 208 231 228 208 231 228 208 231 228 208 231 227 205 231 227 205 -230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 201 230 227 201 230 227 199 -230 227 199 230 227 198 230 227 197 230 227 197 230 226 196 145 122 90 86 69 23 86 69 23 -83 60 18 75 57 18 76 52 15 76 52 15 60 41 12 60 41 12 51 31 9 51 31 9 -44 30 9 51 31 9 51 31 9 51 31 9 60 41 12 60 41 12 69 51 16 69 51 16 -75 57 18 75 57 18 81 65 20 83 60 18 81 65 20 81 65 20 161 154 100 227 219 152 -227 219 152 226 218 150 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 161 154 100 -81 65 20 75 57 18 62 54 22 69 51 16 56 47 15 50 39 13 37 28 9 30 25 8 -22 19 6 15 13 5 9 8 4 5 4 2 2 2 2 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 3 3 3 -4 4 4 5 5 5 9 9 9 30 30 30 53 53 53 72 72 72 72 72 72 72 72 72 -72 72 72 72 72 72 72 72 72 72 72 72 66 66 66 65 65 65 66 66 66 65 65 65 -65 65 65 62 62 62 62 62 62 62 62 62 62 62 62 58 58 58 58 58 58 58 58 58 -58 58 58 55 55 54 55 55 54 60 59 56 60 59 56 46 45 43 24 19 6 30 25 8 -37 32 10 44 38 13 51 43 14 54 47 16 57 50 16 57 50 16 51 43 14 202 194 153 -230 227 203 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 209 231 228 209 -231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 229 213 -86 69 23 75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 69 51 16 -75 57 18 75 57 18 75 57 18 75 57 18 83 60 18 81 65 20 83 60 18 109 103 77 -231 227 205 231 228 209 231 228 209 231 228 208 231 228 208 231 227 205 231 228 208 231 228 208 -231 228 208 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 230 227 201 230 227 201 -230 227 199 230 227 199 230 227 198 230 227 197 230 227 197 201 199 182 86 69 23 95 66 20 -86 69 23 83 60 18 75 57 18 69 51 16 69 51 16 60 41 12 60 41 12 51 31 9 -44 30 9 51 31 9 51 31 9 51 31 9 60 41 12 60 41 12 69 51 16 69 51 16 -75 57 18 75 57 18 83 60 18 81 65 20 83 60 18 86 69 23 86 69 23 225 216 150 -227 219 152 227 219 152 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 -108 92 44 81 65 20 75 57 18 69 51 16 62 49 15 51 43 14 37 32 10 30 25 8 -24 19 6 19 15 5 14 10 4 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 2 2 2 3 3 3 4 4 4 5 5 5 9 9 9 37 37 37 62 62 62 -72 72 72 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 62 62 62 -62 62 62 62 62 62 62 62 62 58 58 58 58 58 58 58 58 58 53 53 53 53 53 53 -55 55 54 53 53 53 55 55 54 55 55 54 55 53 48 24 19 6 24 19 6 30 25 8 -37 32 10 44 38 13 44 38 13 54 47 16 57 50 16 57 50 17 57 50 16 167 167 167 -230 227 197 231 228 208 231 228 208 231 228 208 231 228 208 231 228 209 231 228 211 231 228 211 -231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 -83 78 45 81 65 20 75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 -75 57 18 75 57 18 81 65 20 81 65 20 81 65 20 83 60 18 81 65 20 157 154 144 -231 228 208 231 228 211 231 228 211 231 228 209 231 228 209 231 228 208 231 228 208 231 227 205 -231 228 208 231 227 205 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 230 227 201 -230 227 201 230 227 199 230 227 199 230 227 198 230 227 197 230 227 197 136 99 45 86 69 23 -86 69 23 83 60 18 83 60 18 76 52 15 69 51 16 69 39 11 60 41 12 51 31 9 -51 31 9 51 31 9 51 31 9 51 31 9 60 33 9 60 41 12 69 39 11 69 51 16 -76 52 15 83 60 18 83 60 18 81 65 20 86 69 23 83 60 18 86 69 23 161 154 100 -226 217 157 227 219 152 227 219 152 227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 -161 154 100 81 65 20 75 57 18 75 57 18 69 51 16 62 49 15 39 33 11 37 28 9 -24 19 6 22 19 6 15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 4 4 4 5 5 5 6 6 6 -17 17 17 45 45 45 65 65 65 65 65 65 65 65 65 62 62 62 62 62 62 62 62 62 -62 62 62 58 58 58 58 58 58 58 58 58 58 58 58 53 53 53 58 58 58 53 53 53 -53 53 53 53 53 53 53 53 53 58 56 49 22 22 22 19 15 5 24 19 6 30 25 8 -37 32 10 44 38 13 51 43 14 54 47 16 57 50 16 57 50 16 69 51 16 157 154 144 -231 228 208 231 228 208 231 228 209 231 228 209 231 228 211 231 228 211 231 228 211 231 228 211 -231 228 211 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 -109 103 77 81 65 20 75 57 18 81 65 20 75 57 18 81 65 20 75 57 18 81 65 20 -81 65 20 81 65 20 81 65 20 83 60 18 81 65 20 81 65 20 95 66 20 230 226 196 -231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 209 231 228 208 231 228 208 -231 228 208 231 228 208 231 227 205 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 -230 227 201 230 227 201 230 227 199 230 227 199 230 227 197 231 228 208 161 154 100 86 69 23 -95 66 20 95 66 20 83 60 18 76 52 15 76 52 15 69 51 16 60 41 12 60 33 9 -51 31 9 51 31 9 51 31 9 51 31 9 60 41 12 60 41 12 69 39 11 69 51 16 -76 52 15 75 57 18 83 60 18 83 60 18 86 69 23 86 69 23 86 69 23 136 99 45 -227 219 152 227 219 152 227 219 152 227 218 147 227 218 146 227 218 146 227 217 143 227 217 136 -226 216 132 108 92 44 81 65 20 75 57 18 75 57 18 62 49 15 44 38 13 37 32 10 -30 25 8 24 19 6 15 13 5 14 10 4 7 6 2 3 3 2 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 -3 3 3 4 4 4 8 8 8 35 35 35 58 58 58 62 62 62 62 62 62 58 58 58 -58 58 58 58 58 58 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 -52 52 52 49 49 49 51 51 50 34 34 34 12 7 2 15 13 5 24 19 6 30 25 8 -37 32 10 44 38 13 44 38 13 54 47 16 57 50 16 57 50 17 62 54 22 157 154 144 -231 228 208 231 228 208 231 228 209 231 228 211 231 228 211 231 228 211 231 228 211 231 229 213 -231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 216 231 229 216 -145 122 90 75 57 18 81 65 20 75 57 18 81 65 20 81 65 20 81 65 20 81 65 20 -83 60 18 83 60 18 81 65 20 81 65 20 86 69 23 86 69 23 83 78 45 231 228 209 -231 229 213 231 229 213 231 228 211 231 228 211 231 228 211 231 228 211 231 228 209 231 228 209 -231 228 208 231 228 208 231 228 208 231 227 205 231 227 205 231 227 205 230 227 203 230 227 203 -230 227 203 230 227 201 230 227 199 230 227 199 230 227 198 230 227 197 202 194 153 95 66 20 -95 66 20 86 69 23 83 60 18 83 60 18 76 52 15 69 39 11 69 39 11 60 41 12 -60 33 9 51 31 9 51 31 9 51 31 9 60 33 9 60 41 12 60 41 12 69 51 16 -76 52 15 75 57 18 83 60 18 83 60 18 95 66 20 86 69 23 86 69 23 81 65 20 -202 194 153 227 218 146 227 219 152 226 218 150 227 218 146 227 218 146 227 217 143 227 217 136 -227 217 136 161 154 100 83 60 18 75 57 18 75 57 18 69 51 16 53 46 15 39 33 11 -30 25 8 24 19 6 19 15 5 15 13 5 7 6 2 5 3 1 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 -2 2 2 3 3 3 3 3 3 4 4 4 6 6 6 27 27 27 53 53 53 58 58 58 -53 53 53 58 58 58 53 53 53 58 58 58 53 53 53 53 53 53 52 52 52 49 49 49 -49 49 49 48 48 48 46 46 46 9 8 4 9 8 4 19 15 5 24 19 6 28 25 13 -37 32 10 44 38 13 51 43 14 56 49 15 57 50 16 57 50 16 56 49 15 202 194 153 -231 228 208 231 228 209 231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 -231 229 213 231 229 213 231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 228 208 -130 128 124 81 65 20 81 65 20 81 65 20 81 65 20 81 65 20 83 60 18 81 65 20 -83 60 18 86 69 23 83 60 18 86 69 23 95 66 20 86 69 23 136 99 45 231 229 213 -231 229 213 231 229 213 231 229 213 231 228 211 231 228 211 231 228 211 231 228 211 231 228 209 -231 228 209 231 228 208 231 228 208 231 228 208 231 227 205 231 227 205 231 227 205 230 227 203 -230 227 203 230 227 203 230 227 201 230 227 199 230 227 199 230 227 203 202 194 153 95 66 20 -95 66 20 95 66 20 95 66 20 83 60 18 76 52 15 76 52 15 69 39 11 60 41 12 -60 33 9 51 31 9 51 31 9 51 31 9 60 33 9 60 41 12 69 39 11 69 51 16 -76 52 15 76 52 15 83 60 18 83 60 18 86 69 23 86 69 23 95 66 20 95 66 20 -145 122 90 226 217 157 227 219 152 226 218 150 227 218 147 227 218 146 227 217 143 227 217 136 -226 216 132 226 214 125 86 69 23 81 65 20 75 57 18 75 57 18 62 49 15 39 33 11 -37 32 10 30 25 8 22 19 6 15 13 5 9 8 4 5 4 2 2 2 2 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 4 4 4 26 26 26 -52 52 52 53 53 53 53 53 53 52 52 52 52 52 52 49 49 49 49 49 49 49 49 49 -48 48 48 46 46 46 24 24 23 5 4 2 9 8 4 15 13 5 24 19 6 30 25 8 -37 32 10 41 34 11 51 43 14 56 49 15 57 50 17 62 54 22 62 49 15 157 154 144 -230 227 198 231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 -231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 230 218 -157 154 144 83 60 18 81 65 20 83 60 18 81 65 20 83 60 18 81 65 20 86 69 23 -86 69 23 86 69 23 86 69 23 95 66 20 86 69 23 86 69 23 109 103 77 231 228 211 -231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 228 211 231 228 211 231 228 211 -231 228 211 231 228 209 231 228 208 231 228 208 231 228 208 231 227 205 231 227 205 231 227 205 -230 227 203 230 227 203 230 227 203 230 227 201 230 227 199 230 227 199 201 199 182 103 69 20 -95 66 20 95 66 20 86 69 23 83 60 18 84 52 15 76 52 15 69 39 11 69 39 11 -60 33 9 60 33 9 51 31 9 51 31 9 60 33 9 60 33 9 60 41 12 69 39 11 -76 52 15 76 52 15 83 60 18 83 60 18 95 66 20 95 66 20 86 69 23 95 66 20 -110 76 23 226 218 150 227 219 152 227 219 152 227 218 147 227 218 146 227 217 143 227 217 143 -227 217 136 226 216 132 144 131 48 81 65 20 81 65 20 75 57 18 69 51 16 44 38 13 -37 32 10 30 25 8 24 19 6 19 15 5 14 10 4 7 6 2 3 3 2 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 -4 4 4 27 27 27 49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 46 46 46 -45 45 45 38 38 38 3 3 2 5 4 2 9 8 4 19 15 5 22 19 6 30 25 8 -37 32 10 44 38 13 51 43 14 56 49 15 62 54 22 69 51 16 62 54 22 161 154 100 -231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 231 229 213 231 229 216 -231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 224 222 210 -202 194 153 81 65 20 83 60 18 81 65 20 81 65 20 86 69 23 86 69 23 95 66 20 -83 60 18 86 69 23 95 66 20 86 69 23 95 66 20 95 66 20 108 92 44 231 229 213 -231 229 216 231 229 216 231 229 213 231 229 213 231 229 213 231 229 213 231 228 211 231 228 211 -231 228 211 231 228 211 231 228 209 231 228 208 231 228 208 231 228 208 231 227 205 231 227 205 -230 227 203 230 227 203 230 227 203 230 227 201 230 227 201 230 227 198 202 194 153 95 66 20 -110 76 23 95 66 20 95 66 20 83 60 18 84 52 15 76 52 15 69 51 16 69 39 11 -60 33 9 60 33 9 60 33 9 51 31 9 60 33 9 60 33 9 69 39 11 69 39 11 -76 52 15 76 52 15 83 60 18 83 60 18 81 65 20 95 66 20 86 69 23 86 69 23 -86 69 23 204 179 101 226 217 157 227 219 152 226 218 150 227 218 146 227 218 146 227 217 143 -227 217 136 226 215 145 204 179 101 83 60 18 81 65 20 83 60 18 75 57 18 51 43 14 -37 32 10 37 28 9 24 19 6 19 15 5 14 10 4 9 8 4 5 3 1 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 -1 1 1 2 2 2 6 6 6 35 35 35 48 48 48 46 46 46 45 45 45 45 45 45 -44 44 44 13 13 13 2 2 2 5 4 2 9 8 4 15 13 5 24 19 6 30 25 8 -37 32 10 44 38 13 51 43 14 57 50 16 57 50 16 69 51 16 62 54 22 161 154 100 -230 228 217 231 229 213 231 229 213 231 229 213 231 229 213 231 229 216 231 229 216 231 229 216 -231 229 216 231 229 216 231 229 216 231 229 216 231 230 218 231 229 216 231 229 216 231 229 216 -202 194 153 75 57 18 86 69 23 86 69 23 95 66 20 86 69 23 95 66 20 86 69 23 -86 69 23 95 66 20 86 69 23 95 66 20 86 69 23 95 66 20 95 66 20 224 222 210 -231 229 216 231 229 216 231 229 216 231 229 213 231 229 213 231 229 213 231 229 213 231 228 211 -231 228 211 231 228 211 231 228 211 231 228 209 231 228 208 231 228 208 231 228 208 231 227 205 -231 227 205 230 227 203 230 227 203 230 227 203 230 227 201 230 227 199 157 154 144 110 76 23 -103 69 20 95 66 20 95 66 20 95 66 20 83 60 18 76 52 15 79 41 11 69 39 11 -60 41 12 60 33 9 60 33 9 51 31 9 60 33 9 60 33 9 69 39 11 62 49 15 -69 51 16 76 52 15 84 52 15 83 60 18 95 66 20 95 66 20 95 66 20 95 66 20 -86 69 23 145 122 90 227 219 152 227 219 152 226 218 150 227 218 147 227 218 146 227 217 143 -227 217 143 227 217 136 226 216 132 108 92 44 83 60 18 81 65 20 75 57 18 56 47 15 -41 34 11 37 32 10 30 25 8 22 19 6 15 13 5 9 8 4 5 4 2 2 2 2 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 1 1 1 1 14 14 14 39 39 39 44 44 44 43 43 43 -34 34 34 0 0 0 2 2 2 5 3 1 9 8 4 15 13 5 22 19 6 30 25 8 -37 32 10 44 38 13 53 46 15 57 50 16 62 49 15 62 54 22 69 51 16 130 128 124 -230 228 217 231 229 213 231 229 213 231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 -231 229 216 231 229 216 231 230 218 231 229 216 231 230 218 231 230 218 231 230 218 231 230 218 -205 205 205 86 69 23 83 60 18 86 69 23 81 65 20 95 66 20 86 69 23 86 69 23 -95 66 20 95 66 20 86 69 23 95 66 20 95 66 20 95 66 20 95 66 20 202 194 153 -231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 213 231 229 213 231 229 213 -231 228 211 231 228 211 231 228 211 231 228 209 231 228 209 231 228 208 231 228 208 231 228 208 -231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 230 227 197 145 122 90 110 76 23 -110 76 23 103 69 20 95 66 20 91 54 15 83 60 18 76 52 15 76 52 15 69 39 11 -69 39 11 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 -79 41 11 76 52 15 84 52 15 83 60 18 95 66 20 86 69 23 95 66 20 95 66 20 -86 69 23 110 76 23 227 219 152 227 219 152 227 219 152 227 218 147 227 218 146 227 217 143 -227 217 143 227 217 136 226 214 125 161 154 100 81 65 20 81 65 20 83 60 18 62 49 15 -41 34 11 37 32 10 30 25 8 24 19 6 15 13 5 14 10 4 7 6 2 3 3 2 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 21 21 21 40 40 40 -13 13 13 0 0 0 1 1 0 5 3 1 9 8 4 15 13 5 24 19 6 30 25 8 -37 32 10 44 38 13 54 47 16 57 50 17 62 54 22 69 51 16 75 57 18 145 122 90 -231 229 213 231 229 213 231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 -231 229 216 231 229 216 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 -231 229 216 86 69 23 95 66 20 86 69 23 95 66 20 86 69 23 95 66 20 95 66 20 -86 69 23 95 66 20 95 66 20 95 66 20 95 66 20 103 69 20 86 69 23 161 154 100 -230 228 217 230 228 217 231 229 216 231 229 216 231 229 216 231 229 216 231 229 213 231 229 213 -231 229 213 231 228 211 231 228 211 231 228 211 231 228 209 231 228 208 231 228 208 231 228 208 -231 227 205 231 227 205 231 227 205 230 227 203 230 227 203 230 225 190 108 92 44 103 69 20 -103 69 20 86 69 23 95 66 20 95 66 20 83 60 18 84 52 15 76 52 15 69 39 11 -69 39 11 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 -69 51 16 76 52 15 84 52 15 83 60 18 83 60 18 95 66 20 95 66 20 103 69 20 -95 66 20 86 69 23 202 194 153 226 215 145 227 219 152 226 218 150 227 218 146 227 218 146 -227 217 143 227 217 136 226 216 132 204 179 101 86 69 23 83 60 18 81 65 20 69 51 16 -44 38 13 39 33 11 30 25 8 24 19 6 19 15 5 15 13 5 7 6 2 5 3 1 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 5 -0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 19 15 5 24 19 6 30 25 8 -41 34 11 50 39 13 53 46 15 62 49 15 69 51 16 62 54 22 75 57 18 110 107 92 -231 229 213 231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 230 218 -231 229 216 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 -230 228 217 108 92 44 86 69 23 86 69 23 86 69 23 95 66 20 86 69 23 95 66 20 -95 66 20 86 69 23 95 66 20 86 69 23 110 76 23 86 69 23 103 69 20 103 69 20 -224 222 210 231 230 218 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 213 -231 229 213 231 229 213 231 228 211 231 228 211 231 228 211 231 228 209 231 228 208 231 228 208 -231 228 208 231 227 205 231 227 205 231 227 205 230 227 197 157 154 144 110 76 23 110 76 23 -110 76 23 103 69 20 103 69 20 83 60 18 91 54 15 84 52 15 76 52 15 79 41 11 -69 39 11 69 39 11 60 33 9 60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 -79 41 11 76 52 15 84 52 15 83 60 18 95 66 20 95 66 20 103 69 20 86 69 23 -103 69 20 110 76 23 145 122 90 227 219 152 227 219 152 226 218 150 227 218 147 227 218 146 -227 217 143 227 217 136 227 217 136 226 214 125 108 92 44 86 69 23 81 65 20 75 57 18 -44 38 13 39 33 11 37 32 10 30 25 8 22 19 6 15 13 5 9 8 4 5 3 1 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 19 15 5 24 19 6 37 28 9 -41 34 11 50 39 13 53 46 15 62 49 15 62 54 22 75 57 18 75 57 18 109 103 77 -231 228 209 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 230 218 -231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 201 199 182 -167 167 167 110 76 23 95 66 20 95 66 20 95 66 20 86 69 23 95 66 20 86 69 23 -95 66 20 95 66 20 95 66 20 103 69 20 86 69 23 110 76 23 103 69 20 103 69 20 -161 154 100 230 228 217 230 228 217 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 -231 229 213 231 229 213 231 229 213 231 228 211 231 228 211 231 228 211 231 228 209 231 228 208 -231 228 208 231 228 208 231 227 205 231 227 205 230 226 196 124 87 31 110 76 23 110 76 23 -103 69 20 103 69 20 95 66 20 95 66 20 91 54 15 76 52 15 79 41 11 69 39 11 -69 39 11 69 39 11 60 33 9 69 39 11 60 33 9 69 39 11 69 39 11 69 39 11 -76 52 15 76 52 15 84 52 15 83 60 18 95 66 20 95 66 20 95 66 20 110 76 23 -95 66 20 103 69 20 144 131 48 226 217 157 227 219 152 227 219 152 227 218 147 227 218 146 -227 217 143 227 217 143 227 217 136 226 216 132 144 131 48 95 66 20 86 69 23 83 60 18 -51 43 14 44 38 13 37 32 10 30 25 8 22 19 6 19 15 5 9 8 4 5 4 2 -2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 0 7 4 1 9 8 4 19 15 5 24 19 6 30 25 8 -39 33 11 50 39 13 56 47 15 62 54 22 62 49 15 75 57 18 73 60 27 108 92 44 -231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 230 218 231 230 218 -231 230 218 231 230 218 201 199 182 167 167 167 145 122 90 109 103 77 86 69 23 95 66 20 -95 66 20 86 69 23 86 69 23 86 69 23 95 66 20 95 66 20 83 60 18 95 66 20 -86 69 23 95 66 20 86 69 23 95 66 20 103 69 20 103 69 20 83 78 45 103 69 20 -95 66 20 202 194 153 231 229 216 231 230 218 231 229 216 231 229 216 231 229 216 231 229 216 -231 229 213 231 229 213 231 229 213 231 228 211 231 228 211 231 228 211 231 228 209 231 228 208 -231 228 208 231 228 208 231 227 205 231 227 205 145 122 90 110 76 23 110 76 23 110 76 23 -110 76 23 103 69 20 95 66 20 83 60 18 91 54 15 84 52 15 76 52 15 79 41 11 -69 39 11 69 39 11 60 33 9 69 39 11 60 33 9 69 39 11 69 39 11 79 41 11 -76 52 15 84 52 15 83 60 18 91 54 15 95 66 20 95 66 20 103 69 20 86 69 23 -103 69 20 103 69 20 95 66 20 225 216 150 227 219 152 227 219 152 227 218 147 227 218 146 -227 217 143 227 217 143 227 217 136 227 217 136 204 179 101 86 69 23 95 66 20 81 65 20 -53 46 15 44 38 13 37 32 10 30 25 8 24 19 6 19 15 5 14 10 4 7 6 2 -3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 3 2 0 7 4 1 14 10 4 19 15 5 28 21 6 37 28 9 -41 34 11 50 39 13 56 47 15 62 49 15 75 57 18 62 54 22 75 57 18 83 78 45 -231 230 218 231 229 216 231 230 218 231 229 216 231 230 218 224 222 210 167 167 167 161 154 100 -109 103 77 95 66 20 86 69 23 95 66 20 86 69 23 95 66 20 95 66 20 86 69 23 -95 66 20 95 66 20 95 66 20 95 66 20 81 65 20 95 66 20 83 60 18 95 66 20 -95 66 20 95 66 20 95 66 20 95 66 20 103 69 20 103 69 20 110 76 23 110 76 23 -110 76 23 108 92 44 201 199 182 230 228 217 231 229 216 231 229 216 231 229 216 231 229 216 -231 229 216 231 229 213 231 229 213 231 229 213 231 228 211 231 228 211 231 228 211 231 228 209 -231 228 208 231 228 208 231 228 208 161 154 100 124 87 31 110 76 23 110 76 23 110 76 23 -103 69 20 95 66 20 95 66 20 91 54 15 91 54 15 84 52 15 79 41 11 79 41 11 -69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 79 41 11 76 52 15 -84 52 15 91 54 15 83 60 18 95 66 20 95 66 20 103 69 20 103 69 20 110 76 23 -110 76 23 86 69 23 110 76 23 204 179 101 226 218 164 227 219 152 226 218 150 227 218 146 -227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 103 69 20 86 69 23 86 69 23 -62 49 15 44 38 13 37 32 10 37 28 9 28 21 6 19 15 5 15 13 5 9 8 4 -5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 3 1 0 7 4 1 14 10 4 19 15 5 24 19 6 37 28 9 -41 34 11 50 39 13 56 47 15 62 49 15 62 54 22 75 57 18 81 65 20 86 69 23 -231 229 216 201 199 182 157 154 144 145 122 90 108 92 44 83 60 18 83 60 18 83 60 18 -83 60 18 86 69 23 86 69 23 95 66 20 86 69 23 95 66 20 86 69 23 95 66 20 -86 69 23 95 66 20 86 69 23 83 60 18 95 66 20 83 60 18 83 60 18 95 66 20 -83 60 18 83 60 18 95 66 20 86 69 23 103 69 20 86 69 23 103 69 20 103 69 20 -110 76 23 103 69 20 108 92 44 202 194 153 231 230 218 231 230 218 231 229 216 231 229 216 -231 229 216 231 229 216 231 229 213 231 229 213 231 229 213 231 228 211 231 228 211 231 228 209 -231 228 208 230 227 203 161 154 100 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -103 69 20 103 69 20 95 66 20 95 66 20 91 54 15 84 52 15 76 52 15 79 41 11 -79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 76 52 15 84 52 15 -84 52 15 91 54 15 95 66 20 95 66 20 103 69 20 86 69 23 110 76 23 86 69 23 -103 69 20 110 76 23 110 76 23 161 154 100 226 217 157 227 219 152 226 218 150 227 218 147 -227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 144 105 46 86 69 23 95 66 20 -62 49 15 44 38 13 39 33 11 37 32 10 30 25 8 22 19 6 15 13 5 9 8 4 -5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 3 1 0 4 2 0 8 5 1 14 10 4 19 15 5 28 21 6 30 25 8 -44 30 9 50 39 13 56 47 15 62 49 15 75 57 18 75 57 18 75 57 18 73 60 27 -86 69 23 81 65 20 81 65 20 75 57 18 81 65 20 81 65 20 86 69 23 86 69 23 -86 69 23 95 66 20 86 69 23 86 69 23 86 69 23 95 66 20 86 69 23 95 66 20 -95 66 20 86 69 23 83 60 18 91 54 15 83 60 18 83 60 18 91 54 15 83 60 18 -83 60 18 95 66 20 95 66 20 95 66 20 95 66 20 103 69 20 110 76 23 110 76 23 -110 76 23 110 76 23 110 76 23 110 76 23 161 154 100 224 222 210 230 228 217 230 228 217 -231 229 216 231 229 216 231 229 213 231 229 213 231 229 213 231 228 211 231 228 211 231 228 211 -202 194 153 144 105 46 110 76 23 124 87 31 110 76 23 110 76 23 110 76 23 103 69 20 -103 69 20 103 69 20 91 54 15 91 54 15 91 54 15 84 52 15 84 52 15 79 41 11 -76 52 15 79 41 11 79 41 11 79 41 11 84 52 15 84 52 15 84 52 15 84 52 15 -91 54 15 95 66 20 95 66 20 95 66 20 103 69 20 103 69 20 110 76 23 110 76 23 -110 76 23 86 69 23 110 76 23 145 122 90 227 218 147 227 219 152 226 218 150 227 218 147 -227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 161 154 100 95 66 20 95 66 20 -62 54 22 51 43 14 44 38 13 37 32 10 30 25 8 22 19 6 15 13 5 9 8 4 -5 4 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 1 0 4 2 0 5 3 1 10 7 2 14 10 4 19 15 5 28 21 6 37 28 9 -41 34 11 50 39 13 56 47 15 62 49 15 62 54 22 75 57 18 75 57 18 81 65 20 -81 65 20 81 65 20 81 65 20 81 65 20 83 60 18 81 65 20 83 60 18 86 69 23 -83 60 18 81 65 20 95 66 20 83 60 18 95 66 20 83 60 18 95 66 20 83 60 18 -86 69 23 91 54 15 83 60 18 83 60 18 84 52 15 83 60 18 84 52 15 83 60 18 -91 54 15 83 60 18 91 54 15 83 60 18 95 66 20 95 66 20 95 66 20 103 69 20 -110 76 23 110 76 23 110 76 23 110 76 23 103 69 20 124 87 31 161 154 100 202 194 153 -230 228 217 231 229 216 231 229 216 231 229 213 231 229 216 201 199 182 202 194 153 145 122 90 -110 76 23 124 87 31 110 76 23 124 87 31 110 76 23 110 76 23 110 76 23 103 69 20 -103 69 20 103 69 20 95 66 20 95 66 20 91 54 15 91 54 15 84 52 15 84 52 15 -84 52 15 84 52 15 84 52 15 84 52 15 84 52 15 91 54 15 91 54 15 91 54 15 -95 66 20 95 66 20 95 66 20 103 69 20 103 69 20 103 69 20 110 76 23 110 76 23 -110 76 23 110 76 23 103 69 20 136 99 45 226 217 157 227 219 152 227 219 152 227 218 147 -227 218 146 227 217 143 227 217 136 227 217 136 226 214 125 204 179 101 95 66 20 95 66 20 -75 57 18 51 43 14 44 38 13 37 32 10 30 25 8 24 19 6 19 15 5 14 10 4 -7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 -3 2 0 5 3 1 7 4 1 10 7 2 14 10 4 19 15 5 24 19 6 30 25 8 -44 30 9 51 31 9 51 43 14 62 49 15 69 51 16 75 57 18 75 57 18 75 57 18 -81 65 20 83 60 18 83 60 18 83 60 18 81 65 20 83 60 18 81 65 20 83 60 18 -83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 -83 60 18 83 60 18 91 54 15 84 52 15 76 52 15 76 52 15 84 52 15 84 52 15 -84 52 15 84 52 15 84 52 15 83 60 18 95 66 20 95 66 20 103 69 20 110 76 23 -103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 144 105 46 144 105 46 145 122 90 136 99 45 127 82 26 110 76 23 110 76 23 -127 82 26 110 76 23 124 87 31 110 76 23 110 76 23 110 76 23 110 76 23 112 69 20 -103 69 20 103 69 20 106 56 16 91 54 15 91 54 15 91 54 15 91 54 15 91 54 15 -91 54 15 91 54 15 91 54 15 91 54 15 95 66 20 91 54 15 95 66 20 95 66 20 -95 66 20 103 69 20 103 69 20 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 110 76 23 110 76 23 227 219 152 227 219 152 227 219 152 227 218 147 -227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 86 69 23 103 69 20 -75 57 18 51 43 14 44 38 13 37 32 10 30 25 8 28 21 6 17 15 7 14 10 4 -7 6 2 5 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 3 2 0 -5 3 1 7 4 1 8 5 1 12 7 2 14 10 4 19 15 5 28 21 6 30 25 8 -38 30 10 44 38 13 50 39 13 62 49 15 62 49 15 62 54 22 75 57 18 75 57 18 -75 57 18 75 57 18 81 65 20 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 -83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 84 52 15 83 60 18 -84 52 15 84 52 15 76 52 15 76 52 15 76 52 15 76 52 15 76 52 15 79 41 11 -76 52 15 84 52 15 84 52 15 91 54 15 91 54 15 95 66 20 95 66 20 95 66 20 -110 76 23 110 76 23 110 76 23 110 76 23 124 87 31 110 76 23 124 87 31 110 76 23 -124 87 31 124 87 31 110 76 23 110 76 23 110 76 23 124 87 31 110 76 23 124 87 31 -110 76 23 124 87 31 110 76 23 127 82 26 110 76 23 110 76 23 110 76 23 110 76 23 -103 69 20 103 69 20 103 69 20 103 69 20 106 56 16 95 66 20 91 54 15 91 54 15 -91 54 15 91 54 15 95 66 20 103 69 20 95 66 20 103 69 20 103 69 20 103 69 20 -103 69 20 112 69 20 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 110 76 23 103 69 20 226 213 140 227 219 152 227 219 152 226 218 150 -227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 136 99 45 86 69 23 -81 65 20 53 46 15 44 38 13 39 33 11 37 32 10 28 21 6 19 15 5 15 13 5 -7 6 2 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 3 1 0 4 2 0 -7 4 1 8 5 1 9 5 1 10 7 2 18 12 3 19 15 5 24 16 6 37 22 6 -37 28 9 44 30 9 50 39 13 56 47 15 62 49 15 69 51 16 69 51 16 75 57 18 -75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 -76 52 15 75 57 18 84 52 15 76 52 15 84 52 15 76 52 15 76 52 15 76 52 15 -76 52 15 76 52 15 76 52 15 76 52 15 79 41 11 79 41 11 69 39 11 76 52 15 -79 41 11 76 52 15 84 52 15 84 52 15 91 54 15 95 66 20 95 66 20 103 69 20 -103 69 20 103 69 20 110 76 23 110 76 23 110 76 23 124 87 31 110 76 23 124 87 31 -110 76 23 124 87 31 110 76 23 124 87 31 127 82 26 110 76 23 127 82 26 127 82 26 -110 76 23 124 87 31 110 76 23 127 82 26 110 76 23 110 76 23 110 76 23 112 69 20 -112 69 20 103 69 20 103 69 20 103 69 20 103 69 20 106 56 16 95 66 20 103 69 20 -103 69 20 103 69 20 103 69 20 103 69 20 112 69 20 103 69 20 112 69 20 110 76 23 -110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 136 99 45 202 194 153 225 216 150 226 217 157 227 219 152 226 218 150 -227 218 146 227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 144 131 48 103 69 20 -81 65 20 51 43 14 44 38 13 44 38 13 37 32 10 28 21 6 22 19 6 15 13 5 -9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 4 2 0 5 3 1 -7 4 1 9 5 1 10 7 2 14 7 2 14 7 2 25 13 4 25 13 4 28 21 6 -37 22 6 44 30 9 51 31 9 50 39 13 60 41 12 62 49 15 62 49 15 69 51 16 -69 51 16 69 51 16 76 52 15 69 51 16 76 52 15 76 52 15 76 52 15 76 52 15 -76 52 15 76 52 15 76 52 15 76 52 15 76 52 15 76 52 15 76 52 15 76 52 15 -79 41 11 76 52 15 79 41 11 79 41 11 76 52 15 69 39 11 69 39 11 69 39 11 -79 41 11 79 41 11 79 41 11 84 52 15 91 54 15 91 54 15 91 54 15 95 66 20 -103 69 20 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -127 82 26 110 76 23 124 87 31 110 76 23 127 82 26 124 87 31 110 76 23 124 87 31 -124 87 31 110 76 23 127 82 26 110 76 23 127 82 26 110 76 23 127 82 26 110 76 23 -110 76 23 112 69 20 112 69 20 112 69 20 103 69 20 103 69 20 112 69 20 103 69 20 -112 69 20 112 69 20 112 69 20 112 69 20 112 69 20 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 110 76 23 124 87 31 110 76 23 124 87 31 110 76 23 108 92 44 -136 99 45 202 194 153 226 218 164 226 218 150 226 217 157 227 219 152 227 219 152 226 218 150 -227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 161 154 100 103 69 20 -81 65 20 54 47 16 51 43 14 39 33 11 37 32 10 30 25 8 22 19 6 15 13 5 -9 8 4 5 4 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 3 2 0 5 3 1 7 4 1 -9 5 1 10 7 2 14 7 2 14 7 2 14 7 2 18 12 3 25 13 4 28 21 6 -37 22 6 37 28 9 44 30 9 50 39 13 50 39 13 60 41 12 60 41 12 62 49 15 -62 49 15 69 51 16 69 51 16 69 51 16 69 51 16 69 51 16 69 51 16 69 39 11 -69 51 16 69 39 11 69 51 16 69 39 11 69 51 16 69 39 11 79 41 11 69 39 11 -69 51 16 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 69 39 11 69 39 11 -69 39 11 79 41 11 76 52 15 84 52 15 84 52 15 91 54 15 95 66 20 106 56 16 -95 66 20 103 69 20 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 127 82 26 -110 76 23 127 82 26 110 76 23 124 87 31 127 82 26 124 87 31 127 82 26 127 82 26 -127 82 26 127 82 26 124 87 31 110 76 23 127 82 26 110 76 23 110 76 23 110 76 23 -112 69 20 110 76 23 112 69 20 112 69 20 112 69 20 112 69 20 112 69 20 112 69 20 -110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 127 82 26 110 76 23 127 82 26 -127 82 26 127 82 26 110 76 23 124 87 31 110 76 23 110 76 23 144 131 48 202 194 153 -227 219 152 226 217 157 226 217 157 226 218 164 226 217 157 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 214 125 204 179 101 95 66 20 -86 69 23 54 47 16 51 43 14 41 34 11 37 32 10 30 25 8 24 19 6 19 15 5 -9 8 4 5 4 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 3 1 0 5 3 1 7 4 1 8 5 1 -10 7 2 12 7 2 14 7 2 14 7 2 18 9 0 18 12 3 25 13 4 24 16 6 -37 22 6 37 22 6 44 30 9 44 30 9 51 31 9 50 39 13 60 41 12 60 41 12 -60 41 12 60 41 12 60 41 12 62 49 15 69 39 11 69 39 11 69 39 11 69 51 16 -69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 -69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 -69 39 11 79 41 11 79 41 11 79 41 11 84 52 15 91 54 15 91 54 15 91 54 15 -95 66 20 106 56 16 103 69 20 103 69 20 112 69 20 112 69 20 110 76 23 110 76 23 -110 76 23 110 76 23 127 82 26 127 82 26 127 82 26 110 76 23 124 87 31 127 82 26 -124 87 31 110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 -127 82 26 128 71 21 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -127 82 26 110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 124 87 31 110 76 23 -124 87 31 110 76 23 127 82 26 124 87 31 161 154 100 225 216 150 227 220 173 226 218 164 -226 218 164 226 218 164 226 218 164 226 218 164 227 219 152 226 217 157 227 219 152 226 218 150 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 204 179 101 103 69 20 -86 69 23 54 47 16 51 43 14 44 38 13 37 32 10 30 25 8 24 19 6 15 13 5 -14 10 4 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 2 1 0 4 2 0 5 3 1 8 5 1 9 5 1 -10 7 2 14 7 2 14 7 2 16 8 0 18 12 3 18 12 3 25 13 4 24 16 6 -28 21 6 37 22 6 37 28 9 44 30 9 51 31 9 51 31 9 51 31 9 60 41 12 -60 41 12 60 41 12 60 41 12 60 41 12 60 41 12 60 41 12 60 41 12 60 41 12 -60 41 12 69 39 11 60 41 12 69 39 11 69 39 11 60 41 12 69 39 11 69 39 11 -69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 -79 41 11 69 39 11 79 41 11 84 52 15 79 41 11 91 54 15 91 54 15 91 54 15 -106 56 16 95 66 20 106 56 16 103 69 20 103 69 20 112 69 20 112 69 20 110 76 23 -127 82 26 110 76 23 127 82 26 110 76 23 124 87 31 127 82 26 127 82 26 127 82 26 -127 82 26 124 87 31 127 82 26 124 87 31 110 76 23 127 82 26 127 82 26 110 76 23 -127 82 26 110 76 23 127 82 26 110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 -127 82 26 127 82 26 127 82 26 124 87 31 127 82 26 124 87 31 127 82 26 127 82 26 -124 87 31 144 131 48 204 179 101 227 220 173 227 220 173 227 220 173 227 220 173 227 220 173 -226 218 164 227 220 173 226 218 164 227 219 152 226 218 164 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 110 76 23 -86 69 23 54 47 16 51 43 14 44 38 13 37 32 10 37 32 10 24 19 6 19 15 5 -14 10 4 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 2 1 0 3 2 0 5 3 1 7 4 1 9 5 1 10 7 2 -14 7 2 14 7 2 14 7 2 18 12 3 20 10 0 18 12 3 25 13 4 25 13 4 -25 13 4 37 22 6 37 22 6 37 22 6 44 30 9 51 31 9 51 31 9 51 31 9 -51 31 9 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 -60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 69 39 11 60 33 9 69 39 11 -60 33 9 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 69 39 11 -79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 84 52 15 91 54 15 91 54 15 -91 54 15 91 54 15 95 66 20 106 56 16 103 69 20 112 69 20 112 69 20 112 69 20 -127 82 26 110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 124 87 31 127 82 26 -124 87 31 127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 -127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 -127 82 26 124 87 31 127 82 26 124 87 31 127 82 26 127 82 26 144 105 46 161 154 100 -202 194 153 227 221 188 227 221 188 228 223 180 227 220 173 227 220 173 227 220 173 226 218 164 -227 220 173 226 218 164 226 218 164 226 218 164 227 219 152 226 217 157 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 143 226 216 132 226 216 132 226 214 125 124 87 31 -86 69 23 54 47 16 53 46 15 44 38 13 39 33 11 30 25 8 24 19 6 19 15 5 -14 10 4 7 6 2 5 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 3 1 0 4 2 0 7 4 1 8 5 1 10 7 2 12 7 2 -14 7 2 14 7 2 18 9 0 18 12 3 18 12 3 25 13 4 25 13 4 25 13 4 -28 21 6 37 22 6 37 22 6 37 22 6 37 22 6 44 30 9 44 30 9 51 31 9 -51 31 9 51 31 9 51 31 9 51 31 9 60 33 9 51 31 9 60 33 9 60 33 9 -60 33 9 60 33 9 60 33 9 60 33 9 69 39 11 60 33 9 69 39 11 60 33 9 -69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 79 41 11 69 39 11 79 41 11 -79 41 11 79 41 11 79 41 11 79 41 11 84 52 15 79 41 11 91 54 15 91 54 15 -91 54 15 91 54 15 106 56 16 106 56 16 95 66 20 106 56 16 110 76 23 112 69 20 -110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 124 87 31 127 82 26 127 82 26 -134 89 29 127 82 26 134 89 29 127 82 26 124 87 31 127 82 26 127 82 26 127 82 26 -127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 124 87 31 134 89 29 124 87 31 -134 89 29 127 82 26 134 89 29 136 99 45 161 154 100 202 194 153 228 223 180 228 223 180 -230 225 190 228 223 180 228 223 180 228 223 180 227 220 173 227 220 173 227 220 173 227 220 173 -226 218 164 226 218 164 226 218 164 227 219 152 226 218 164 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 226 214 125 226 214 125 136 99 45 -86 69 23 54 47 16 51 43 14 44 38 13 39 33 11 37 32 10 28 21 6 19 15 5 -15 13 5 9 8 4 5 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 2 1 0 4 2 0 5 3 1 7 4 1 9 5 1 10 7 2 14 7 2 -14 7 2 14 7 2 18 12 3 25 13 4 18 12 3 25 13 4 25 13 4 25 13 4 -25 13 4 25 13 4 37 22 6 37 22 6 37 22 6 37 22 6 44 30 9 44 30 9 -51 31 9 51 31 9 51 31 9 51 31 9 51 31 9 51 31 9 60 33 9 51 31 9 -60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 -69 39 11 69 39 11 79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 -79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 91 54 15 79 41 11 91 54 15 -91 54 15 106 56 16 91 54 15 95 66 20 106 56 16 112 69 20 112 69 20 110 76 23 -128 71 21 110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 -134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 127 82 26 134 89 29 -124 87 31 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 161 154 100 202 194 153 228 223 180 228 223 180 228 223 180 230 225 190 228 223 180 -228 223 180 228 223 180 228 223 180 228 223 180 227 220 173 228 223 180 227 220 173 227 220 173 -226 218 164 227 220 173 226 218 164 226 218 164 226 218 164 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 144 105 46 -86 69 23 54 47 16 53 46 15 44 38 13 41 34 11 30 25 8 30 25 8 19 15 5 -15 13 5 7 6 2 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 3 2 0 5 3 1 7 4 1 9 5 1 10 7 2 14 7 2 14 7 2 -14 7 2 18 9 0 18 12 3 20 10 0 25 13 4 25 13 4 25 13 4 37 22 6 -25 13 4 37 22 6 37 22 6 37 22 6 37 22 6 37 22 6 51 31 9 37 22 6 -51 31 9 44 30 9 51 31 9 51 31 9 51 31 9 60 33 9 60 33 9 60 33 9 -60 33 9 60 33 9 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 79 41 11 -79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 84 52 15 79 41 11 84 52 15 -79 41 11 91 54 15 84 52 15 91 54 15 79 41 11 91 54 15 79 41 11 91 54 15 -91 54 15 91 54 15 91 54 15 106 56 16 106 56 16 103 69 20 112 69 20 112 69 20 -110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 127 82 26 -134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 144 105 46 161 154 100 202 194 153 -230 225 190 230 225 190 228 223 180 230 225 190 230 225 190 228 223 180 230 225 190 228 223 180 -228 223 180 228 223 180 228 223 180 227 220 173 228 223 180 227 220 173 227 220 173 226 218 164 -227 220 173 227 219 152 227 220 173 227 219 152 227 219 152 226 218 164 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 144 131 48 -86 69 23 56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 28 21 6 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 2 2 2 3 3 2 -5 3 1 5 3 1 5 3 1 5 3 1 5 3 1 5 3 1 3 3 2 3 3 2 -1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 1 0 4 2 0 5 3 1 8 5 1 9 5 1 12 7 2 14 7 2 16 8 0 -14 10 4 20 10 0 18 12 3 25 13 4 25 13 4 25 13 4 25 13 4 25 13 4 -37 22 6 25 13 4 37 22 6 37 22 6 37 22 6 51 31 9 37 22 6 51 31 9 -37 22 6 51 31 9 51 31 9 51 31 9 60 33 9 60 33 9 60 33 9 60 33 9 -69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 79 41 11 79 41 11 79 41 11 -79 41 11 84 52 15 84 52 15 84 52 15 91 54 15 84 52 15 91 54 15 91 54 15 -91 54 15 91 54 15 91 54 15 79 41 11 91 54 15 79 41 11 91 54 15 91 54 15 -91 54 15 91 54 15 91 54 15 106 56 16 106 56 16 112 69 20 112 69 20 110 76 23 -128 71 21 127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 140 85 24 145 122 90 161 154 100 226 218 164 230 225 190 230 227 197 230 227 197 -230 226 196 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 228 223 180 230 225 190 -228 223 180 228 223 180 228 223 180 228 223 180 227 220 173 227 220 173 227 220 173 227 220 173 -227 220 173 226 218 164 227 220 173 227 219 152 226 218 164 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 214 125 227 217 136 144 131 48 -81 65 20 54 47 16 53 46 15 44 38 13 39 33 11 37 32 10 28 21 6 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 5 3 1 5 4 2 -7 6 2 9 8 4 9 8 4 9 8 4 9 8 4 9 8 4 7 6 2 7 6 2 -5 4 2 5 3 1 5 3 1 3 3 2 3 3 2 2 2 2 2 2 2 1 1 0 -1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 2 1 0 -4 2 0 5 3 1 8 5 1 10 7 2 12 7 2 14 7 2 14 7 2 18 9 0 -18 12 3 25 13 4 25 13 4 24 16 6 25 13 4 37 22 6 37 22 6 37 22 6 -37 22 6 37 22 6 37 22 6 37 22 6 51 31 9 37 22 6 60 33 9 51 31 9 -60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 -69 39 11 69 39 11 79 41 11 79 41 11 76 52 15 76 52 15 84 52 15 84 52 15 -91 54 15 91 54 15 91 54 15 91 54 15 91 54 15 91 54 15 91 54 15 91 54 15 -91 54 15 91 54 15 91 54 15 91 54 15 106 56 16 91 54 15 79 41 11 106 56 16 -79 41 11 106 56 16 106 56 16 91 54 15 106 56 16 112 69 20 112 69 20 128 71 21 -110 76 23 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 134 89 29 140 85 24 134 89 29 134 89 29 134 89 29 144 105 46 161 154 100 -202 194 153 227 220 173 230 227 197 230 227 199 230 227 201 230 227 197 230 227 197 230 226 196 -230 226 196 230 225 190 230 225 190 230 225 190 230 225 190 228 223 180 230 225 190 228 223 180 -228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 227 220 173 227 220 173 227 219 152 -228 223 180 227 219 152 227 220 173 227 219 152 226 218 164 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 185 141 49 -73 60 27 57 50 17 53 46 15 44 38 13 44 38 13 37 32 10 24 19 6 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 2 2 2 5 3 1 7 6 2 9 8 4 9 8 4 -9 8 4 14 10 4 14 10 4 14 10 4 14 10 4 14 10 4 14 10 4 9 8 4 -9 8 4 9 8 4 9 8 4 7 6 2 7 6 2 5 4 2 5 4 2 5 3 1 -5 3 1 5 3 1 5 3 1 5 3 1 5 3 1 5 3 1 5 3 1 5 3 1 -7 4 1 10 7 2 12 7 2 14 7 2 14 10 4 18 12 3 18 12 3 25 13 4 -25 13 4 24 16 6 25 13 4 28 21 6 37 22 6 28 21 6 37 22 6 37 22 6 -37 22 6 51 31 9 37 22 6 51 31 9 51 31 9 51 31 9 60 33 9 51 31 9 -60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 -76 52 15 76 52 15 76 52 15 84 52 15 84 52 15 84 52 15 91 54 15 91 54 15 -91 54 15 91 54 15 95 66 20 91 54 15 95 66 20 106 56 16 95 66 20 106 56 16 -91 54 15 106 56 16 91 54 15 106 56 16 91 54 15 91 54 15 106 56 16 79 41 11 -106 56 16 91 54 15 106 56 16 106 56 16 106 56 16 112 69 20 112 69 20 128 71 21 -127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 140 85 24 -134 89 29 134 89 29 162 99 29 145 122 90 204 179 101 226 218 164 230 227 197 230 226 196 -230 226 196 230 227 201 230 227 201 230 227 199 230 227 198 230 227 197 230 227 197 230 226 196 -230 227 197 230 225 190 230 225 190 230 225 190 228 223 180 230 225 190 230 225 190 228 223 180 -228 223 180 228 223 180 228 223 180 228 223 180 227 220 173 227 220 173 228 223 180 228 223 180 -227 219 152 227 220 173 226 218 164 226 218 164 227 219 152 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 214 125 226 214 125 161 154 100 -73 60 27 54 47 16 53 46 15 51 43 14 39 33 11 37 32 10 30 25 8 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 3 3 2 5 3 1 7 6 2 9 8 4 14 10 4 15 13 5 -19 15 5 19 15 5 19 15 5 19 15 5 19 15 5 19 15 5 19 15 5 19 15 5 -15 13 5 15 13 5 15 13 5 14 10 4 14 10 4 9 8 4 9 8 4 9 8 4 -9 8 4 9 8 4 9 8 4 9 8 4 7 6 2 9 8 4 9 8 4 9 8 4 -14 10 4 14 10 4 18 12 3 19 15 5 19 15 5 24 16 6 24 16 6 24 16 6 -28 21 6 28 21 6 37 22 6 37 22 6 37 22 6 37 22 6 44 30 9 44 30 9 -51 31 9 51 31 9 51 31 9 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 -69 39 11 69 39 11 69 39 11 69 39 11 76 52 15 76 52 15 76 52 15 76 52 15 -84 52 15 84 52 15 91 54 15 91 54 15 91 54 15 95 66 20 95 66 20 95 66 20 -95 66 20 103 69 20 106 56 16 103 69 20 103 69 20 103 69 20 106 56 16 103 69 20 -106 56 16 106 56 16 106 56 16 91 54 15 106 56 16 106 56 16 91 54 15 106 56 16 -106 56 16 106 56 16 106 56 16 106 56 16 112 69 20 112 69 20 112 69 20 128 71 21 -127 82 26 127 82 26 140 85 24 134 89 29 140 85 24 134 89 29 162 99 29 144 131 48 -204 179 101 202 194 153 231 228 208 230 227 203 231 229 213 231 228 209 231 228 208 230 227 203 -230 227 203 230 227 203 230 227 201 230 227 199 230 227 198 230 227 197 230 227 197 230 226 196 -230 225 190 230 226 196 230 225 190 230 225 190 230 225 190 230 225 190 228 223 180 228 223 180 -230 225 190 228 223 180 228 223 180 227 220 173 228 223 180 227 220 173 227 219 152 228 223 180 -227 220 173 227 219 152 227 220 173 227 219 152 226 218 164 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 185 141 49 -69 51 16 57 50 16 53 46 15 44 38 13 44 38 13 37 32 10 28 21 6 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 2 2 2 5 3 1 9 8 4 9 8 4 15 13 5 19 15 5 19 15 5 -22 19 6 24 19 6 24 19 6 28 21 6 24 19 6 28 21 6 24 19 6 24 19 6 -24 19 6 22 19 6 19 15 5 19 15 5 19 15 5 19 15 5 15 13 5 15 13 5 -15 13 5 15 13 5 15 13 5 15 13 5 15 13 5 15 13 5 14 10 4 19 15 5 -19 15 5 19 15 5 24 19 6 24 16 6 28 21 6 28 21 6 30 25 8 37 22 6 -37 22 6 37 28 9 37 28 9 44 30 9 44 30 9 51 31 9 51 31 9 51 31 9 -51 31 9 51 31 9 60 33 9 60 33 9 60 41 12 60 41 12 69 39 11 69 51 16 -69 39 11 69 51 16 76 52 15 76 52 15 76 52 15 84 52 15 84 52 15 91 54 15 -83 60 18 91 54 15 91 54 15 95 66 20 95 66 20 95 66 20 103 69 20 103 69 20 -112 69 20 103 69 20 103 69 20 112 69 20 112 69 20 112 69 20 103 69 20 112 69 20 -112 69 20 103 69 20 106 56 16 106 56 16 91 54 15 106 56 16 106 56 16 106 56 16 -91 54 15 106 56 16 106 56 16 106 56 16 112 69 20 112 69 20 128 71 21 127 82 26 -127 82 26 140 85 24 134 89 29 134 89 29 140 85 24 144 131 48 230 227 203 231 230 218 -231 230 218 231 229 213 231 228 208 231 228 208 231 228 208 231 228 208 231 227 205 230 227 203 -230 227 203 230 227 203 230 227 201 230 227 199 230 227 198 230 227 197 230 226 196 230 226 196 -230 226 196 230 225 190 230 225 190 230 225 190 230 225 190 228 223 180 230 225 190 228 223 180 -228 223 180 228 223 180 228 223 180 228 223 180 227 220 173 228 223 180 228 223 180 228 223 180 -227 219 152 227 220 173 226 218 164 227 219 152 204 179 101 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 214 125 226 216 132 185 141 49 -62 54 22 54 47 16 53 46 15 51 43 14 39 33 11 37 32 10 30 25 8 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 5 3 1 7 6 2 9 8 4 15 13 5 19 15 5 24 19 6 24 19 6 -30 25 8 30 25 8 30 25 8 37 32 10 30 25 8 37 32 10 30 25 8 30 25 8 -30 25 8 28 21 6 28 21 6 24 19 6 24 19 6 24 19 6 24 19 6 24 19 6 -22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 24 19 6 -28 21 6 28 21 6 30 25 8 30 25 8 37 22 6 37 28 9 37 28 9 44 30 9 -44 30 9 44 30 9 44 30 9 51 31 9 50 39 13 51 31 9 50 39 13 60 41 12 -60 41 12 60 41 12 62 49 15 69 39 11 69 51 16 69 39 11 76 52 15 76 52 15 -76 52 15 84 52 15 84 52 15 83 60 18 83 60 18 91 54 15 83 60 18 95 66 20 -95 66 20 95 66 20 95 66 20 103 69 20 103 69 20 103 69 20 103 69 20 112 69 20 -110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 112 69 20 110 76 23 -112 69 20 112 69 20 112 69 20 112 69 20 106 56 16 106 56 16 106 56 16 106 56 16 -106 56 16 106 56 16 106 56 16 106 56 16 112 69 20 128 71 21 128 71 21 127 82 26 -127 82 26 140 85 24 134 89 29 162 99 29 134 89 29 140 85 24 230 227 197 231 229 213 -231 229 213 231 228 208 231 229 213 231 228 208 231 228 208 231 227 205 231 227 205 230 227 203 -230 227 203 230 227 203 230 227 201 230 227 199 230 227 198 230 227 197 230 227 197 230 226 196 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 228 223 180 230 225 190 228 223 180 -228 223 180 228 223 180 228 223 180 227 220 173 227 220 173 227 220 173 227 219 152 228 223 180 -227 219 152 228 223 180 226 214 125 144 105 46 161 154 100 227 219 152 227 219 152 227 219 152 -227 218 146 227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 161 154 100 -56 49 15 56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 24 19 6 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 -3 3 2 7 6 2 9 8 4 15 13 5 19 15 5 24 19 6 30 25 8 30 25 8 -37 32 10 37 32 10 39 33 11 37 32 10 39 33 11 37 32 10 37 32 10 37 32 10 -37 32 10 37 32 10 30 25 8 37 32 10 30 25 8 30 25 8 30 25 8 30 25 8 -30 25 8 30 25 8 28 21 6 28 21 6 28 21 6 30 25 8 30 25 8 37 28 9 -30 25 8 37 28 9 38 30 10 38 30 10 44 30 9 41 34 11 44 30 9 41 34 11 -50 39 13 50 39 13 60 41 12 50 39 13 60 41 12 60 41 12 60 41 12 60 41 12 -69 51 16 69 51 16 69 51 16 76 52 15 76 52 15 75 57 18 76 52 15 84 52 15 -84 52 15 83 60 18 83 60 18 91 54 15 95 66 20 95 66 20 95 66 20 95 66 20 -95 66 20 103 69 20 103 69 20 110 76 23 103 69 20 110 76 23 110 76 23 110 76 23 -110 76 23 127 82 26 110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 -110 76 23 112 69 20 112 69 20 112 69 20 112 69 20 106 56 16 106 56 16 106 56 16 -106 56 16 106 56 16 106 56 16 112 69 20 128 71 21 112 69 20 128 71 21 127 82 26 -140 85 24 134 89 29 134 89 29 134 89 29 162 99 29 134 89 29 227 220 173 231 229 213 -231 229 213 231 228 209 231 228 208 231 228 208 231 228 208 231 227 205 231 227 205 230 227 203 -230 227 203 230 227 203 230 227 199 230 227 199 230 227 198 230 227 197 230 226 196 230 226 196 -230 226 196 230 225 190 230 225 190 230 225 190 228 223 180 230 225 190 230 225 190 228 223 180 -228 223 180 228 223 180 228 223 180 228 223 180 227 220 173 228 223 180 228 223 180 227 220 173 -227 219 152 161 154 100 124 87 31 140 85 24 161 154 100 227 219 152 227 219 152 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 214 125 226 214 125 144 131 48 -56 49 15 54 47 16 53 46 15 51 43 14 39 33 11 37 32 10 30 25 8 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 -5 3 1 9 8 4 15 13 5 19 15 5 24 19 6 30 25 8 30 25 8 37 32 10 -39 33 11 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 -41 34 11 41 34 11 41 34 11 37 32 10 39 33 11 37 32 10 37 32 10 37 32 10 -30 25 8 37 32 10 37 32 10 37 32 10 37 32 10 37 32 10 37 32 10 37 32 10 -41 34 11 41 34 11 44 38 13 44 38 13 50 39 13 50 39 13 50 39 13 60 41 12 -53 46 15 60 41 12 60 41 12 62 49 15 62 49 15 69 51 16 69 51 16 69 51 16 -76 52 15 76 52 15 76 52 15 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 -95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 103 69 20 103 69 20 103 69 20 -110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 127 82 26 -110 76 23 127 82 26 127 82 26 124 87 31 127 82 26 124 87 31 127 82 26 110 76 23 -127 82 26 128 71 21 110 76 23 112 69 20 112 69 20 106 56 16 106 56 16 106 56 16 -106 56 16 106 56 16 106 56 16 112 69 20 128 71 21 112 69 20 127 82 26 140 85 24 -140 85 24 140 85 24 162 99 29 134 89 29 134 89 29 162 99 29 202 194 153 224 222 210 -231 228 208 231 229 213 231 228 208 231 228 208 231 228 208 231 228 208 231 227 205 230 227 203 -230 227 203 230 227 201 230 227 199 230 227 199 230 227 197 230 227 197 230 226 196 230 226 196 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 228 223 180 228 223 180 -228 223 180 228 223 180 228 223 180 227 220 173 227 220 173 227 220 173 227 219 152 226 214 125 -144 105 46 140 85 24 140 85 24 134 89 29 161 154 100 227 217 143 227 219 152 227 218 147 -227 218 146 227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 144 131 48 -62 54 22 56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 24 19 6 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 -7 6 2 9 8 4 19 15 5 22 19 6 28 21 6 37 28 9 37 32 10 44 38 13 -44 38 13 51 43 14 51 43 14 53 46 15 53 46 15 51 43 14 51 43 14 51 43 14 -44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 41 34 11 -44 38 13 41 34 11 39 33 11 39 33 11 39 33 11 44 38 13 44 38 13 44 38 13 -50 39 13 50 39 13 51 43 14 50 39 13 53 46 15 60 41 12 56 47 15 62 49 15 -62 49 15 62 49 15 69 51 16 69 51 16 69 51 16 69 51 16 75 57 18 75 57 18 -75 57 18 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 95 66 20 95 66 20 -95 66 20 95 66 20 103 69 20 95 66 20 103 69 20 110 76 23 103 69 20 110 76 23 -110 76 23 110 76 23 110 76 23 110 76 23 127 82 26 110 76 23 124 87 31 127 82 26 -124 87 31 110 76 23 124 87 31 127 82 26 127 82 26 124 87 31 127 82 26 127 82 26 -127 82 26 127 82 26 128 71 21 112 69 20 128 71 21 112 69 20 112 69 20 106 56 16 -106 56 16 106 56 16 128 71 21 106 56 16 128 71 21 128 71 21 128 71 21 127 82 26 -134 89 29 134 89 29 134 89 29 162 99 29 134 89 29 162 99 29 161 154 100 231 228 209 -231 228 211 231 228 208 231 228 208 231 228 208 231 228 208 231 227 205 231 227 205 230 227 203 -230 227 203 230 227 201 230 227 199 230 227 199 230 227 197 230 227 197 230 227 197 230 225 190 -230 226 196 230 225 190 230 225 190 230 225 190 228 223 180 230 225 190 228 223 180 230 225 190 -228 223 180 228 223 180 227 220 173 228 223 180 228 223 180 226 213 140 144 131 48 134 89 29 -134 89 29 134 89 29 134 89 29 140 85 24 204 179 101 227 219 152 227 219 152 227 218 147 -227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 226 214 125 226 214 125 144 131 48 -57 50 17 56 49 15 54 47 16 44 38 13 37 32 10 37 32 10 30 25 8 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 -9 8 4 15 13 5 19 15 5 24 19 6 30 25 8 37 32 10 41 34 11 44 38 13 -53 46 15 54 47 16 56 49 15 54 47 16 54 47 16 54 47 16 54 47 16 53 46 15 -54 47 16 53 46 15 53 46 15 51 43 14 51 43 14 44 38 13 51 43 14 44 38 13 -51 43 14 44 38 13 51 43 14 44 38 13 51 43 14 51 43 14 51 43 14 53 46 15 -53 46 15 56 47 15 56 47 15 62 49 15 62 49 15 62 49 15 62 49 15 69 51 16 -69 51 16 69 51 16 75 57 18 75 57 18 75 57 18 83 60 18 83 60 18 83 60 18 -83 60 18 81 65 20 95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 -95 66 20 103 69 20 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 110 76 23 124 87 31 110 76 23 124 87 31 110 76 23 127 82 26 -127 82 26 136 99 45 145 122 90 161 154 100 202 194 153 145 122 90 134 89 29 134 89 29 -127 82 26 127 82 26 127 82 26 128 71 21 112 69 20 112 69 20 128 71 21 112 69 20 -106 56 16 112 69 20 106 56 16 128 71 21 112 69 20 128 71 21 127 82 26 140 85 24 -140 85 24 140 85 24 162 99 29 134 89 29 162 99 29 144 105 46 161 154 100 231 227 205 -231 228 209 231 228 209 231 228 208 231 228 208 231 227 205 231 227 205 230 227 203 230 227 203 -230 227 203 230 227 201 230 227 199 230 227 198 230 227 197 230 227 197 230 226 196 230 226 196 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 228 223 180 230 225 190 228 223 180 -228 223 180 228 223 180 228 223 180 227 217 143 185 141 49 136 99 45 151 86 24 134 89 29 -134 89 29 134 89 29 134 89 29 134 89 29 202 194 153 227 218 146 227 219 152 227 218 147 -227 218 147 227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 226 214 125 136 99 45 -57 50 17 54 47 16 53 46 15 44 38 13 44 38 13 37 32 10 24 19 6 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 -14 10 4 19 15 5 24 19 6 30 25 8 37 32 10 39 33 11 44 38 13 51 43 14 -54 47 16 56 49 15 57 50 17 57 50 17 57 50 17 57 50 17 57 50 16 57 50 16 -56 49 15 54 47 16 54 47 16 54 47 16 53 46 15 54 47 16 53 46 15 53 46 15 -53 46 15 53 46 15 51 43 14 53 46 15 54 47 16 54 47 16 56 49 15 56 47 15 -57 50 17 62 49 15 62 49 15 62 49 15 69 51 16 69 51 16 75 57 18 75 57 18 -75 57 18 75 57 18 75 57 18 75 57 18 83 60 18 83 60 18 81 65 20 81 65 20 -95 66 20 86 69 23 95 66 20 86 69 23 95 66 20 95 66 20 103 69 20 103 69 20 -103 69 20 110 76 23 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 124 87 31 144 105 46 161 154 100 161 154 100 202 194 153 201 199 182 -230 228 217 235 234 229 231 230 218 235 234 229 230 228 217 202 194 153 134 89 29 134 89 29 -127 82 26 127 82 26 127 82 26 127 82 26 128 71 21 112 69 20 128 71 21 106 56 16 -128 71 21 106 56 16 128 71 21 112 69 20 128 71 21 128 71 21 128 71 21 140 85 24 -140 85 24 140 85 24 134 89 29 144 105 46 162 99 29 134 89 29 186 112 35 231 228 209 -231 228 211 231 228 209 231 228 208 231 228 208 231 227 205 231 227 205 230 227 203 230 227 203 -230 227 203 230 227 201 230 227 199 230 227 198 230 227 197 230 226 196 230 226 196 230 226 196 -230 225 190 230 225 190 230 225 190 228 223 180 230 225 190 230 225 190 228 223 180 228 223 180 -228 223 180 226 218 164 185 141 49 144 105 46 134 89 29 134 89 29 134 89 29 162 99 29 -134 89 29 134 89 29 134 89 29 134 89 29 226 213 140 227 219 152 227 219 152 227 218 147 -227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 216 132 226 212 108 108 92 44 -57 50 17 56 49 15 53 46 15 44 38 13 37 32 10 37 32 10 28 21 6 22 19 6 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 -14 10 4 19 15 5 24 19 6 30 25 8 39 33 11 44 38 13 51 43 14 53 46 15 -57 50 17 57 50 17 57 50 17 161 154 100 109 103 77 81 65 20 57 50 17 57 50 17 -57 50 17 57 50 17 57 50 17 56 49 15 57 50 17 56 49 15 54 47 16 54 47 16 -54 47 16 56 49 15 56 49 15 57 50 17 56 49 15 57 50 17 62 49 15 62 54 22 -69 51 16 69 51 16 69 51 16 75 57 18 75 57 18 75 57 18 75 57 18 75 57 18 -75 57 18 81 65 20 81 65 20 81 65 20 81 65 20 86 69 23 86 69 23 95 66 20 -86 69 23 95 66 20 95 66 20 95 66 20 103 69 20 103 69 20 86 69 23 110 76 23 -110 76 23 86 69 23 110 76 23 108 92 44 145 122 90 145 122 90 157 154 144 202 194 153 -201 199 182 224 222 210 231 230 218 235 234 229 235 234 229 235 234 229 230 228 217 235 234 229 -231 230 218 235 234 229 231 230 218 235 234 229 230 228 217 201 199 182 134 89 29 134 89 29 -134 89 29 127 82 26 127 82 26 128 71 21 127 82 26 128 71 21 112 69 20 128 71 21 -106 56 16 128 71 21 106 56 16 128 71 21 128 71 21 128 71 21 140 85 24 140 85 24 -134 89 29 162 99 29 140 85 24 162 99 29 162 99 29 162 99 29 144 105 46 230 227 203 -231 228 209 231 228 208 231 228 208 231 228 208 231 227 205 231 227 205 230 227 203 230 227 203 -230 227 201 230 227 199 230 227 199 230 227 197 230 227 197 230 227 197 230 226 196 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 228 223 180 228 223 180 225 216 150 -161 154 100 151 86 24 136 99 45 151 86 24 162 99 29 134 89 29 144 105 46 134 89 29 -134 89 29 134 89 29 134 89 29 144 105 46 227 218 147 227 219 152 227 219 152 227 218 147 -227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 226 214 125 81 65 20 -57 50 17 54 47 16 53 46 15 44 38 13 41 34 11 37 32 10 24 19 6 19 15 5 -15 13 5 7 6 2 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 4 2 9 8 4 -15 13 5 22 19 6 30 25 8 37 32 10 39 33 11 44 38 13 51 43 14 54 47 16 -57 50 17 56 49 15 83 78 45 227 219 152 227 219 152 226 218 150 202 194 153 145 122 90 -109 103 77 83 78 45 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 -57 50 17 57 50 17 57 50 17 57 50 16 62 54 22 69 51 16 62 54 22 69 51 16 -62 54 22 75 57 18 62 54 22 75 57 18 73 60 27 75 57 18 81 65 20 75 57 18 -81 65 20 81 65 20 83 60 18 83 60 18 86 69 23 86 69 23 95 66 20 86 69 23 -95 66 20 86 69 23 136 99 45 109 103 77 161 154 100 145 122 90 202 194 153 167 167 167 -201 199 182 227 221 188 231 230 218 231 230 218 231 230 218 231 230 218 231 229 213 230 228 217 -231 230 218 230 228 217 235 234 229 230 228 217 230 228 217 230 228 217 235 234 229 231 230 218 -235 234 229 231 230 218 235 234 229 231 230 218 235 234 229 231 230 218 134 89 29 134 89 29 -134 89 29 134 89 29 127 82 26 127 82 26 128 71 21 128 71 21 128 71 21 128 71 21 -106 56 16 128 71 21 106 56 16 128 71 21 128 71 21 128 71 21 127 82 26 140 85 24 -140 85 24 134 89 29 162 99 29 134 89 29 162 99 29 134 89 29 162 99 29 227 220 173 -231 228 209 231 228 208 231 228 208 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 -230 227 201 230 227 199 230 227 198 230 227 197 230 227 197 230 226 196 230 225 190 230 226 196 -230 225 190 230 225 190 230 225 190 230 225 190 228 223 180 202 194 153 185 141 49 151 86 24 -151 86 24 140 85 24 162 99 29 134 89 29 162 99 29 134 89 29 151 86 24 134 89 29 -162 99 29 134 89 29 162 99 29 144 131 48 227 219 152 227 219 152 227 219 152 227 218 147 -227 218 146 227 217 143 227 217 136 226 216 132 226 216 132 226 214 125 226 212 108 62 54 22 -57 50 17 54 47 16 53 46 15 44 38 13 39 33 11 30 25 8 28 21 6 19 15 5 -14 10 4 7 6 2 5 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 7 6 2 14 10 4 -19 15 5 24 19 6 30 25 8 37 32 10 44 38 13 44 38 13 54 47 16 54 47 16 -57 50 17 57 50 17 145 122 90 227 218 147 227 219 152 226 217 157 226 218 150 227 219 152 -226 218 164 226 217 157 226 218 164 202 194 153 161 154 100 161 154 100 161 154 100 110 107 92 -145 122 90 110 107 92 108 92 44 83 78 45 108 92 44 83 78 45 108 92 44 108 92 44 -108 92 44 108 92 44 108 92 44 108 92 44 108 92 44 110 107 92 145 122 90 145 122 90 -145 122 90 161 154 100 157 154 144 157 154 144 204 179 101 201 199 182 201 199 182 227 221 188 -231 228 211 231 229 213 231 229 213 231 228 211 231 228 211 231 229 213 224 222 210 231 227 205 -231 229 213 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 -231 230 218 231 230 218 231 230 218 235 234 229 230 228 217 235 234 229 230 228 217 235 234 229 -230 228 217 235 234 229 230 228 217 235 234 229 231 230 218 235 234 229 144 131 48 134 89 29 -134 89 29 140 85 24 134 89 29 127 82 26 127 82 26 128 71 21 112 69 20 128 71 21 -128 71 21 106 56 16 128 71 21 128 71 21 128 71 21 128 71 21 140 85 24 140 85 24 -140 85 24 162 99 29 134 89 29 162 99 29 144 131 48 162 99 29 162 99 29 202 194 153 -224 222 210 231 228 208 231 228 208 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 -230 227 201 230 227 199 230 227 198 230 227 197 230 227 197 230 226 196 230 226 196 230 225 190 -230 225 190 230 225 190 227 220 173 204 179 101 144 105 46 162 99 29 136 99 45 162 99 29 -144 105 46 162 99 29 134 89 29 162 99 29 134 89 29 162 99 29 134 89 29 162 99 29 -134 89 29 134 89 29 134 89 29 161 154 100 227 219 152 227 219 152 227 219 152 227 218 146 -227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 226 212 108 54 47 16 -57 50 17 54 47 16 51 43 14 44 38 13 39 33 11 30 25 8 28 21 6 17 15 7 -14 10 4 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 14 10 4 -17 15 7 28 21 6 30 25 8 37 32 10 44 38 13 51 43 14 54 47 16 57 50 16 -57 50 17 57 50 16 161 154 100 227 219 152 227 219 152 227 219 152 226 218 164 226 218 164 -226 218 164 226 218 164 226 218 164 227 220 173 230 225 190 228 223 180 228 223 180 228 223 180 -228 223 180 228 223 180 228 223 180 230 225 190 230 225 190 230 226 196 227 221 188 230 226 196 -230 227 197 230 227 199 230 227 203 230 227 203 230 227 201 230 227 197 230 227 199 230 227 199 -230 227 203 230 227 201 230 227 197 231 227 205 224 222 210 224 222 210 230 227 203 231 227 205 -231 228 208 231 228 209 231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 -231 229 216 231 229 216 231 229 216 231 230 218 231 229 216 231 230 218 231 230 218 231 230 218 -231 230 218 231 230 218 231 230 218 231 230 218 230 228 217 230 228 217 235 234 229 230 228 217 -231 230 218 231 230 218 230 228 217 235 234 229 231 230 218 235 234 229 161 154 100 134 89 29 -134 89 29 134 89 29 140 85 24 140 85 24 140 85 24 127 82 26 128 71 21 128 71 21 -128 71 21 128 71 21 128 71 21 128 71 21 128 71 21 128 71 21 140 85 24 140 85 24 -151 86 24 134 89 29 162 99 29 162 99 29 162 99 29 162 99 29 144 105 46 204 179 101 -231 228 208 231 228 208 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 230 227 201 -230 227 199 230 227 199 230 227 197 230 227 197 230 227 197 230 225 190 230 226 196 230 225 190 -202 194 153 161 154 100 162 99 29 144 105 46 162 99 29 162 99 29 151 86 24 162 99 29 -162 99 29 134 89 29 162 99 29 144 105 46 134 89 29 162 99 29 144 105 46 134 89 29 -162 99 29 134 89 29 162 99 29 204 179 101 227 219 152 227 219 152 227 218 147 227 218 146 -227 217 143 227 217 143 227 217 136 226 216 132 226 216 132 226 212 108 204 179 101 56 49 15 -57 50 16 54 47 16 51 43 14 44 38 13 39 33 11 30 25 8 24 19 6 19 15 5 -14 10 4 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 3 1 9 8 4 15 13 5 -22 19 6 28 21 6 37 32 10 39 33 11 44 38 13 53 46 15 56 49 15 57 50 17 -57 50 17 57 50 17 204 179 101 226 217 157 227 219 152 226 217 157 227 219 152 226 218 164 -226 218 164 226 218 164 227 220 173 226 218 164 227 220 173 227 220 173 228 223 180 227 220 173 -228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 228 223 180 230 225 190 227 221 188 -230 225 190 227 221 188 230 227 197 230 226 196 230 227 197 230 227 197 230 227 197 230 227 199 -230 227 199 230 227 201 230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 231 228 208 -231 228 208 231 228 208 231 228 209 231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 -231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 230 218 231 230 218 -231 230 218 231 230 218 235 234 229 230 228 217 235 234 229 230 228 217 230 228 217 231 230 218 -235 234 229 230 228 217 235 234 229 230 228 217 231 230 218 235 234 229 202 194 153 140 85 24 -134 89 29 140 85 24 134 89 29 127 82 26 140 85 24 128 71 21 128 71 21 128 71 21 -128 71 21 128 71 21 106 56 16 128 71 21 128 71 21 128 71 21 140 85 24 140 85 24 -151 86 24 162 99 29 140 85 24 162 99 29 162 99 29 162 99 29 162 99 29 161 154 100 -231 229 216 231 228 208 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 230 227 201 -230 227 199 230 227 198 230 227 197 230 227 197 230 226 196 227 220 173 204 179 101 185 141 49 -162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 144 105 46 162 99 29 134 89 29 -162 99 29 162 99 29 134 89 29 162 99 29 162 99 29 134 89 29 162 99 29 134 89 29 -162 99 29 134 89 29 134 89 29 226 215 145 227 219 152 227 219 152 227 218 147 227 218 146 -227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 226 214 125 144 131 48 62 54 22 -54 47 16 54 47 16 51 43 14 44 38 13 37 32 10 30 25 8 24 19 6 17 15 7 -9 8 4 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 5 4 2 9 8 4 15 13 5 -22 19 6 28 25 13 37 32 10 44 38 13 44 38 13 53 46 15 57 50 16 57 50 17 -57 50 16 51 48 25 161 154 100 227 219 152 227 219 152 227 219 152 226 218 164 227 219 152 -226 218 164 226 218 164 226 218 164 227 220 173 227 220 173 227 220 173 227 220 173 228 223 180 -228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 230 225 190 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 230 227 197 230 227 197 230 227 197 230 227 198 -230 227 199 230 227 201 230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 231 228 208 -231 228 208 231 228 208 231 228 209 231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 -231 229 213 231 229 216 231 229 216 231 229 216 231 230 218 231 229 216 231 229 216 231 230 218 -231 230 218 231 230 218 231 230 218 230 228 217 230 228 217 231 230 218 230 228 217 235 234 229 -231 230 218 230 228 217 230 228 217 235 234 229 230 228 217 230 228 217 205 205 205 151 86 24 -134 89 29 134 89 29 140 85 24 140 85 24 140 85 24 127 82 26 140 85 24 128 71 21 -128 71 21 128 71 21 128 71 21 128 71 21 128 71 21 140 85 24 140 85 24 140 85 24 -151 86 24 134 89 29 162 99 29 162 99 29 162 99 29 162 99 29 144 105 46 185 141 49 -231 228 208 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 230 227 201 230 227 199 -230 227 199 230 226 196 227 221 188 202 194 153 185 141 49 162 99 29 162 99 29 144 105 46 -162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 144 105 46 -162 99 29 134 89 29 162 99 29 162 99 29 134 89 29 162 99 29 134 89 29 162 99 29 -134 89 29 162 99 29 144 105 46 227 219 152 227 219 152 227 219 152 227 218 147 227 218 146 -227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 226 214 125 144 131 48 57 50 17 -57 50 16 53 46 15 44 38 13 44 38 13 37 32 10 30 25 8 24 19 6 15 13 5 -9 8 4 5 4 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 9 8 4 15 13 5 -24 19 6 30 25 8 37 32 10 39 33 11 51 43 14 54 47 16 57 50 17 57 50 17 -73 60 27 57 50 16 109 103 77 227 218 146 227 219 152 227 219 152 226 218 164 226 218 164 -226 218 164 227 220 173 226 218 164 227 220 173 227 220 173 227 220 173 228 223 180 227 220 173 -228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 228 223 180 230 225 190 228 223 180 -230 225 190 230 225 190 230 227 197 230 226 196 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 199 230 227 199 230 227 201 230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 -231 228 208 231 228 208 231 228 208 231 228 209 231 228 211 231 228 211 231 228 211 231 229 213 -231 229 213 231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 230 218 231 229 216 -231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 230 228 217 -231 230 218 235 234 229 230 228 217 230 228 217 231 230 218 231 230 218 231 229 216 144 105 46 -151 86 24 134 89 29 134 89 29 140 85 24 140 85 24 140 85 24 128 71 21 128 71 21 -128 71 21 128 71 21 128 71 21 128 71 21 128 71 21 140 85 24 140 85 24 140 85 24 -151 86 24 162 99 29 162 99 29 162 99 29 144 131 48 162 99 29 175 102 28 185 141 49 -230 228 217 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 230 227 201 227 221 188 -202 194 153 185 141 49 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 -162 99 29 162 99 29 144 105 46 162 99 29 162 99 29 134 89 29 162 99 29 162 99 29 -134 89 29 162 99 29 144 105 46 162 99 29 162 99 29 144 131 48 140 85 24 162 99 29 -134 89 29 162 99 29 185 141 49 226 218 164 227 219 152 227 219 152 227 218 146 227 218 146 -227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 226 212 108 108 92 44 51 48 25 -56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 30 25 8 22 19 6 15 13 5 -9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 9 8 4 19 15 5 -22 19 6 30 25 8 37 32 10 44 38 13 51 43 14 54 47 16 57 50 17 57 50 17 -73 60 27 86 69 23 62 54 22 226 213 140 227 219 152 227 219 152 227 219 152 227 219 152 -226 218 164 227 219 152 227 220 173 226 218 164 226 218 164 227 220 173 227 220 173 227 220 173 -228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 227 197 230 227 197 230 227 197 -230 227 198 230 227 199 230 227 199 230 227 201 230 227 203 230 227 203 231 227 205 231 227 205 -231 227 205 231 228 208 231 228 208 231 228 208 231 228 209 231 228 211 231 228 211 231 228 211 -231 229 213 231 229 213 231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 -231 229 216 231 229 216 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 -231 230 218 230 228 217 231 230 218 231 230 218 231 230 218 231 230 218 231 229 213 145 122 90 -162 99 29 134 89 29 162 99 29 134 89 29 140 85 24 140 85 24 140 85 24 128 71 21 -140 85 24 128 71 21 128 71 21 128 71 21 140 85 24 128 71 21 140 85 24 151 86 24 -151 86 24 140 85 24 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 -230 227 203 231 227 205 231 227 205 231 227 205 227 220 173 202 194 153 161 154 100 162 99 29 -162 99 29 186 112 35 162 99 29 162 99 29 186 112 35 162 99 29 162 99 29 162 99 29 -162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 134 89 29 162 99 29 -162 99 29 162 99 29 162 99 29 134 89 29 162 99 29 140 85 24 162 99 29 144 105 46 -162 99 29 136 99 45 204 179 101 227 219 152 227 219 152 226 218 150 227 218 146 227 217 143 -227 217 143 227 217 136 226 216 132 226 216 132 226 214 125 226 212 108 62 54 22 57 50 16 -54 47 16 53 46 15 44 38 13 39 33 11 30 25 8 28 21 6 19 15 5 15 13 5 -9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 9 8 4 19 15 5 -22 19 6 30 25 8 37 32 10 41 34 11 51 43 14 54 47 16 57 50 17 57 50 17 -57 50 17 108 92 44 51 48 25 108 92 44 227 219 152 227 219 152 226 218 164 227 219 152 -226 218 164 227 220 173 227 219 152 228 223 180 227 220 173 227 220 173 227 220 173 228 223 180 -227 220 173 228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 228 223 180 230 225 190 -230 225 190 230 225 190 230 225 190 230 227 197 230 225 190 230 227 197 230 227 197 230 227 197 -230 227 197 230 227 199 230 227 199 230 227 201 230 227 203 230 227 203 230 227 203 231 227 205 -231 227 205 231 228 208 231 228 208 231 228 208 231 228 209 231 228 209 231 228 211 231 228 211 -231 228 211 231 229 213 231 229 213 231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 -231 229 216 231 230 218 231 229 216 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 -231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 204 179 101 -134 89 29 134 89 29 134 89 29 140 85 24 134 89 29 140 85 24 140 85 24 140 85 24 -128 71 21 128 71 21 128 71 21 128 71 21 128 71 21 151 86 24 140 85 24 151 86 24 -151 86 24 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 175 102 28 162 99 29 -227 221 188 201 199 182 204 179 101 185 141 49 162 99 29 175 102 28 175 102 28 175 102 28 -175 102 28 144 105 46 186 112 35 162 99 29 144 131 48 175 102 28 162 99 29 162 99 29 -162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 134 89 29 -162 99 29 134 89 29 162 99 29 162 99 29 134 89 29 162 99 29 162 99 29 134 89 29 -162 99 29 144 105 46 227 217 143 226 217 157 227 219 152 227 218 147 227 218 146 227 217 143 -227 217 143 227 217 136 226 216 132 226 214 125 226 214 125 204 179 101 57 50 17 57 50 17 -56 49 15 53 46 15 44 38 13 39 33 11 37 32 10 24 19 6 19 15 5 15 13 5 -9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 9 8 4 15 13 5 -22 19 6 30 25 8 37 32 10 39 33 11 51 43 14 53 46 15 57 50 16 57 50 16 -57 50 16 109 103 77 57 50 17 57 50 17 145 122 90 227 219 152 227 219 152 226 218 164 -227 219 152 227 219 152 227 220 173 227 219 152 228 223 180 227 219 152 227 220 173 227 220 173 -228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 228 223 180 230 225 190 -228 223 180 230 225 190 230 225 190 230 225 190 230 225 190 230 226 196 230 226 196 230 227 197 -230 227 197 230 227 198 230 227 199 230 227 199 230 227 201 230 227 203 230 227 203 230 227 203 -231 227 205 231 227 205 231 228 208 231 228 208 231 228 208 231 228 209 231 228 211 231 228 211 -231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 231 229 213 231 229 216 231 229 216 -231 229 216 231 229 216 231 229 216 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 -231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 229 216 201 199 182 -134 89 29 162 99 29 134 89 29 162 99 29 140 85 24 140 85 24 140 85 24 140 85 24 -151 86 24 128 71 21 151 86 24 128 71 21 151 86 24 128 71 21 151 86 24 140 85 24 -162 99 29 140 85 24 162 99 29 162 99 29 175 102 28 144 131 48 186 112 35 144 105 46 -186 112 35 175 102 28 162 99 29 186 112 35 162 99 29 186 112 35 162 99 29 186 112 35 -162 99 29 186 112 35 162 99 29 175 102 28 175 102 28 162 99 29 162 99 29 162 99 29 -162 99 29 162 99 29 162 99 29 134 89 29 162 99 29 134 89 29 162 99 29 162 99 29 -162 99 29 162 99 29 134 89 29 162 99 29 162 99 29 140 85 24 144 131 48 162 99 29 -162 99 29 144 131 48 227 219 152 227 219 152 227 219 152 227 218 147 227 218 146 227 217 143 -227 217 136 227 217 136 226 216 132 226 214 125 226 212 108 161 154 100 57 50 17 57 50 16 -54 47 16 51 43 14 44 38 13 37 32 10 30 25 8 24 19 6 19 15 5 14 10 4 -7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 4 2 9 8 4 15 13 5 -22 19 6 30 25 8 37 32 10 44 38 13 44 38 13 54 47 16 57 50 16 57 50 17 -57 50 16 109 103 77 81 65 20 57 50 16 57 50 16 109 103 77 227 219 152 227 219 152 -226 218 164 227 220 173 227 219 152 228 223 180 227 219 152 228 223 180 228 223 180 227 220 173 -227 220 173 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 228 223 180 -230 225 190 230 225 190 230 225 190 230 225 190 230 226 196 230 225 190 230 226 196 230 226 196 -230 227 197 230 227 197 230 227 198 230 227 199 230 227 201 230 227 203 230 227 203 230 227 203 -231 227 205 231 227 205 231 227 205 231 228 208 231 228 208 231 228 208 231 228 209 231 228 211 -231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 231 229 213 231 229 216 -231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 230 218 230 228 217 231 230 218 -231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 230 218 231 229 216 230 227 203 -162 99 29 134 89 29 162 99 29 134 89 29 140 85 24 151 86 24 140 85 24 140 85 24 -128 71 21 151 86 24 128 71 21 128 71 21 151 86 24 128 71 21 151 86 24 151 86 24 -151 86 24 162 99 29 162 99 29 162 99 29 162 99 29 175 102 28 162 99 29 186 112 35 -162 99 29 186 112 35 162 99 29 186 112 35 144 105 46 186 112 35 162 99 29 186 112 35 -144 131 48 175 102 28 162 99 29 175 102 28 162 99 29 175 102 28 162 99 29 162 99 29 -162 99 29 162 99 29 162 99 29 162 99 29 151 86 24 162 99 29 151 86 24 162 99 29 -134 89 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 134 89 29 -162 99 29 204 179 101 227 219 152 227 219 152 226 218 150 227 218 146 227 218 146 227 217 143 -227 217 136 227 217 136 226 214 125 226 214 125 226 212 108 136 99 45 56 49 15 57 50 16 -53 46 15 44 38 13 44 38 13 37 32 10 30 25 8 24 19 6 17 15 7 9 8 4 -7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 15 13 5 -19 15 5 30 25 8 30 25 8 44 38 13 44 38 13 53 46 15 57 50 16 57 50 16 -57 50 16 86 69 23 109 103 77 57 50 16 57 50 16 62 54 22 86 69 23 202 194 153 -227 219 152 227 219 152 227 219 152 228 223 180 227 219 152 228 223 180 227 219 152 227 220 173 -228 223 180 227 220 173 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 226 196 230 226 196 -230 227 197 230 227 197 230 227 198 230 227 199 230 227 199 230 227 201 230 227 203 230 227 203 -230 227 203 231 227 205 231 227 205 231 227 205 231 228 208 231 228 208 231 228 208 231 228 209 -231 228 211 231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 231 229 213 -231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 -231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 230 228 217 231 230 218 231 230 218 -144 131 48 162 99 29 134 89 29 162 99 29 162 99 29 140 85 24 151 86 24 140 85 24 -140 85 24 151 86 24 128 71 21 151 86 24 128 71 21 140 85 24 151 86 24 151 86 24 -151 86 24 151 86 24 162 99 29 162 99 29 162 99 29 175 102 28 175 102 28 144 131 48 -186 112 35 175 102 28 144 131 48 162 99 29 175 102 28 175 102 28 175 102 28 162 99 29 -175 102 28 175 102 28 162 99 29 175 102 28 162 99 29 162 99 29 162 99 29 162 99 29 -162 99 29 162 99 29 162 99 29 151 86 24 162 99 29 151 86 24 162 99 29 140 85 24 -162 99 29 162 99 29 162 99 29 162 99 29 140 85 24 144 131 48 162 99 29 162 99 29 -162 99 29 226 215 145 227 219 152 227 219 152 227 218 147 227 218 146 227 217 143 227 217 143 -227 217 136 226 216 132 226 214 125 226 214 125 226 212 108 86 69 23 57 50 16 56 49 15 -54 47 16 44 38 13 41 34 11 37 32 10 30 25 8 22 19 6 15 13 5 9 8 4 -5 4 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 15 13 5 -19 15 5 28 21 6 37 32 10 37 32 10 44 38 13 53 46 15 54 47 16 57 50 17 -57 50 16 57 50 16 161 154 100 57 50 16 57 50 16 57 50 16 62 54 22 57 50 16 -109 103 77 226 216 132 226 218 164 226 218 164 227 220 173 227 219 152 228 223 180 228 223 180 -227 219 152 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 -228 223 180 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 226 196 230 225 190 -230 226 196 230 227 197 230 227 197 230 227 198 230 227 199 230 227 199 230 227 201 230 227 203 -230 227 203 230 227 203 231 227 205 231 227 205 231 227 205 231 228 208 231 228 208 231 228 208 -231 228 209 231 228 209 231 228 211 231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 -231 229 213 231 229 213 231 229 213 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 -231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 230 218 -161 154 100 162 99 29 144 105 46 140 85 24 134 89 29 162 99 29 140 85 24 140 85 24 -151 86 24 128 71 21 151 86 24 128 71 21 151 86 24 128 71 21 151 86 24 151 86 24 -151 86 24 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 175 102 28 175 102 28 -175 102 28 175 102 28 186 112 35 186 112 35 162 99 29 186 112 35 144 131 48 175 102 28 -175 102 28 162 99 29 175 102 28 162 99 29 175 102 28 162 99 29 162 99 29 162 99 29 -162 99 29 151 86 24 151 86 24 151 86 24 162 99 29 151 86 24 162 99 29 162 99 29 -162 99 29 134 89 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 134 89 29 -185 141 49 226 218 164 227 219 152 226 218 150 227 218 147 227 218 146 227 217 143 227 217 143 -227 217 136 226 216 132 226 214 125 226 212 108 204 179 101 57 50 17 57 50 17 56 49 15 -53 46 15 44 38 13 41 34 11 37 32 10 22 19 6 22 19 6 15 13 5 10 7 2 -5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 14 10 4 -19 15 5 24 19 6 30 25 8 39 33 11 44 38 13 44 38 13 56 49 15 57 50 16 -57 50 16 56 49 15 161 154 100 83 78 45 57 50 16 57 50 16 57 50 16 57 50 16 -56 49 15 56 49 15 87 85 74 204 179 101 227 219 152 228 223 180 227 219 152 227 220 173 -228 223 180 227 220 173 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 -228 223 180 230 225 190 228 223 180 230 225 190 230 225 190 230 225 190 230 225 190 230 226 196 -230 226 196 230 227 197 230 227 197 230 227 197 230 227 198 230 227 199 230 227 199 230 227 201 -230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 231 227 205 231 228 208 231 228 208 -231 228 208 231 228 209 231 228 209 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 -231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 216 -231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 231 229 216 -202 194 153 134 89 29 162 99 29 162 99 29 162 99 29 151 86 24 151 86 24 151 86 24 -140 85 24 151 86 24 151 86 24 151 86 24 128 71 21 151 86 24 151 86 24 151 86 24 -151 86 24 151 86 24 162 99 29 162 99 29 162 99 29 186 112 35 162 99 29 175 102 28 -162 99 29 186 112 35 162 99 29 175 102 28 162 99 29 175 102 28 175 102 28 175 102 28 -175 102 28 162 99 29 175 102 28 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 -151 86 24 164 89 24 151 86 24 162 99 29 151 86 24 151 86 24 162 99 29 140 85 24 -162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 144 131 48 -204 179 101 227 219 152 227 219 152 226 218 150 227 218 146 227 218 146 227 217 143 227 217 136 -226 216 132 226 216 132 226 214 125 226 214 125 144 131 48 57 50 17 57 50 16 54 47 16 -51 43 14 44 38 13 39 33 11 30 25 8 24 19 6 19 15 5 14 10 4 7 6 2 -5 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 9 8 4 -19 15 5 24 19 6 30 25 8 37 32 10 44 38 13 51 43 14 54 47 16 57 50 16 -57 50 16 57 50 16 108 92 44 144 131 48 62 54 22 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 57 50 16 57 50 16 62 54 22 109 103 77 204 179 101 226 218 164 -227 220 173 227 220 173 227 220 173 228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 -230 225 190 228 223 180 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 226 196 -230 225 190 230 226 196 230 227 197 230 227 197 230 227 197 230 227 199 230 227 199 230 227 201 -230 227 201 230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 231 227 205 231 228 208 -231 228 208 231 228 208 231 228 208 231 228 209 231 228 209 231 228 211 231 228 211 231 228 211 -231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 -231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 -227 221 188 162 99 29 144 105 46 134 89 29 162 99 29 134 89 29 162 99 29 140 85 24 -151 86 24 140 85 24 128 71 21 151 86 24 151 86 24 151 86 24 128 71 21 164 89 24 -151 86 24 164 89 24 151 86 24 162 99 29 162 99 29 162 99 29 175 102 28 162 99 29 -186 112 35 162 99 29 175 102 28 175 102 28 175 102 28 175 102 28 162 99 29 175 102 28 -162 99 29 175 102 28 162 99 29 162 99 29 162 99 29 162 99 29 164 89 24 164 89 24 -164 89 24 151 86 24 164 89 24 151 86 24 164 89 24 151 86 24 162 99 29 151 86 24 -162 99 29 162 99 29 162 99 29 162 99 29 144 131 48 162 99 29 162 99 29 162 99 29 -227 219 152 226 217 157 227 219 152 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 -226 216 132 226 214 125 226 214 125 226 212 108 108 92 44 62 54 22 57 50 16 54 47 16 -44 38 13 44 38 13 37 32 10 30 25 8 24 19 6 19 15 5 14 10 4 5 4 2 -3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 4 2 9 8 4 -15 13 5 22 19 6 30 25 8 37 32 10 39 33 11 44 38 13 53 46 15 57 50 16 -57 50 16 57 50 16 62 54 22 202 194 153 62 54 22 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 57 50 16 57 50 16 62 54 22 57 50 16 57 50 16 57 50 16 -83 78 45 145 122 90 161 154 100 202 194 153 228 223 180 228 223 180 228 223 180 228 223 180 -228 223 180 230 225 190 230 225 190 228 223 180 230 225 190 230 225 190 230 225 190 230 225 190 -230 226 196 230 226 196 230 226 196 230 227 197 230 227 197 230 227 198 230 227 199 230 227 199 -230 227 201 230 227 201 230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 231 227 205 -231 228 208 231 228 208 231 228 208 231 228 208 231 228 209 231 228 209 231 228 211 231 228 211 -231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 229 213 231 229 213 231 229 213 -231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 229 213 231 228 211 -231 228 211 144 131 48 162 99 29 162 99 29 162 99 29 162 99 29 151 86 24 151 86 24 -151 86 24 151 86 24 151 86 24 151 86 24 128 71 21 151 86 24 151 86 24 151 86 24 -151 86 24 151 86 24 164 89 24 162 99 29 175 102 28 162 99 29 162 99 29 175 102 28 -162 99 29 175 102 28 162 99 29 175 102 28 162 99 29 175 102 28 175 102 28 162 99 29 -175 102 28 162 99 29 175 102 28 162 99 29 174 92 24 164 89 24 164 89 24 164 89 24 -164 89 24 164 89 24 151 86 24 164 89 24 151 86 24 162 99 29 151 86 24 162 99 29 -162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 204 179 101 -227 219 152 227 219 152 226 218 150 227 218 146 227 218 146 227 217 143 227 217 136 227 217 136 -226 216 132 226 214 125 226 212 108 226 212 108 62 54 22 57 50 17 57 50 16 54 47 16 -44 38 13 39 33 11 37 32 10 30 25 8 22 19 6 15 13 5 9 8 4 5 4 2 -2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 -15 13 5 19 15 5 28 21 6 30 25 8 39 33 11 44 38 13 53 46 15 53 46 15 -57 50 17 57 50 16 57 50 16 161 154 100 108 92 44 62 54 22 57 50 16 57 50 16 -57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 17 57 50 16 -62 54 22 75 57 18 75 57 18 75 57 18 75 57 18 108 92 44 109 103 77 145 122 90 -161 154 100 202 194 153 202 194 153 226 218 164 227 221 188 230 225 190 230 225 190 230 225 190 -230 225 190 230 226 196 230 225 190 230 226 196 230 227 197 230 227 197 230 227 198 230 227 199 -230 227 199 230 227 201 230 227 201 230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 -231 227 205 231 228 208 231 228 208 231 228 208 227 221 188 201 199 182 201 199 182 227 220 173 -231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 -231 228 211 231 229 213 231 228 211 231 229 213 231 229 213 231 229 213 231 228 211 231 229 213 -231 228 211 161 154 100 162 99 29 134 89 29 162 99 29 134 89 29 162 99 29 151 86 24 -151 86 24 151 86 24 151 86 24 151 86 24 151 86 24 151 86 24 151 86 24 151 86 24 -164 89 24 164 89 24 164 89 24 164 89 24 162 99 29 162 99 29 175 102 28 162 99 29 -175 102 28 175 102 28 175 102 28 175 102 28 175 102 28 162 99 29 175 102 28 162 99 29 -174 92 24 174 92 24 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 -151 86 24 164 89 24 151 86 24 164 89 24 164 89 24 164 89 24 162 99 29 162 99 29 -162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 144 131 48 226 214 125 -226 217 157 227 219 152 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 -226 216 132 226 214 125 226 212 108 161 154 100 56 49 15 57 50 16 56 49 15 53 46 15 -44 38 13 37 32 10 37 32 10 22 19 6 22 19 6 14 10 4 9 8 4 5 3 1 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 -14 10 4 15 13 5 30 25 8 30 25 8 37 32 10 44 38 13 51 43 14 54 47 16 -57 50 16 57 50 16 62 54 22 108 92 44 204 179 101 62 54 22 57 50 17 57 50 17 -57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 16 57 50 16 62 54 22 -62 49 15 57 50 16 57 50 16 57 50 16 75 57 18 62 54 22 81 65 20 81 65 20 -81 65 20 75 57 18 75 57 18 75 57 18 81 65 20 95 66 20 109 103 77 108 92 44 -108 92 44 145 122 90 145 122 90 145 122 90 145 122 90 161 154 100 145 122 90 145 122 90 -161 154 100 145 122 90 161 154 100 145 122 90 161 154 100 145 122 90 136 99 45 145 122 90 -144 105 46 136 99 45 127 82 26 110 76 23 127 82 26 127 82 26 127 82 26 161 154 100 -231 228 209 231 228 209 231 228 209 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 -231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 -231 227 205 202 194 153 162 99 29 162 99 29 162 99 29 162 99 29 151 86 24 162 99 29 -151 86 24 151 86 24 164 89 24 128 71 21 164 89 24 128 71 21 151 86 24 151 86 24 -151 86 24 151 86 24 164 89 24 164 89 24 164 89 24 162 99 29 162 99 29 175 102 28 -162 99 29 175 102 28 162 99 29 175 102 28 162 99 29 175 102 28 175 102 28 174 92 24 -174 92 24 162 99 29 174 92 24 174 92 24 164 89 24 164 89 24 164 89 24 164 89 24 -164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 162 99 29 162 99 29 162 99 29 -162 99 29 162 99 29 175 102 28 144 131 48 162 99 29 162 99 29 185 141 49 226 217 157 -227 219 152 226 218 150 227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 -226 214 125 226 214 125 226 212 108 108 92 44 56 49 15 56 49 15 53 46 15 51 43 14 -44 38 13 37 32 10 30 25 8 24 19 6 19 15 5 14 10 4 7 6 2 3 3 2 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 4 2 -9 8 4 15 13 5 22 19 6 30 25 8 37 32 10 44 38 13 44 38 13 53 46 15 -56 49 15 57 50 17 57 50 17 62 54 22 226 213 140 108 92 44 51 48 25 57 50 16 -57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 62 54 22 57 50 16 -62 54 22 75 57 18 62 54 22 75 57 18 62 54 22 75 57 18 75 57 18 62 54 22 -75 57 18 81 65 20 75 57 18 81 65 20 81 65 20 81 65 20 86 69 23 95 66 20 -86 69 23 86 69 23 95 66 20 86 69 23 103 69 20 95 66 20 103 69 20 110 76 23 -103 69 20 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 124 87 31 110 76 23 124 87 31 127 82 26 127 82 26 127 82 26 136 99 45 -231 228 209 231 228 208 231 228 208 231 228 209 231 228 209 231 228 209 231 228 209 231 228 211 -231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 231 228 211 -231 228 211 227 221 188 162 99 29 162 99 29 144 105 46 162 99 29 162 99 29 151 86 24 -162 99 29 151 86 24 151 86 24 151 86 24 151 86 24 164 89 24 151 86 24 151 86 24 -164 89 24 151 86 24 164 89 24 164 89 24 164 89 24 174 92 24 174 92 24 174 92 24 -175 102 28 175 102 28 175 102 28 174 92 24 175 102 28 174 92 24 174 92 24 174 92 24 -164 89 24 174 92 24 174 92 24 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 -164 89 24 164 89 24 164 89 24 164 89 24 162 99 29 162 99 29 162 99 29 175 102 28 -162 99 29 175 102 28 162 99 29 175 102 28 175 102 28 144 131 48 226 213 140 225 216 150 -227 219 152 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 226 214 125 -226 214 125 226 212 108 204 179 101 57 50 16 56 49 15 56 49 15 53 46 15 44 38 13 -44 38 13 37 32 10 30 25 8 22 19 6 15 13 5 9 8 4 5 4 2 2 2 2 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 -9 8 4 15 13 5 22 19 6 22 19 6 37 32 10 37 32 10 44 38 13 53 46 15 -54 47 16 57 50 17 57 50 16 51 48 25 145 122 90 204 179 101 57 50 16 57 50 17 -57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 62 49 15 62 54 22 69 51 16 62 54 22 75 57 18 81 65 20 -75 57 18 75 57 18 81 65 20 81 65 20 81 65 20 83 60 18 81 65 20 86 69 23 -95 66 20 86 69 23 95 66 20 86 69 23 103 69 20 86 69 23 110 76 23 86 69 23 -103 69 20 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 124 87 31 110 76 23 124 87 31 110 76 23 124 87 31 127 82 26 134 89 29 -201 199 182 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 209 -231 228 209 231 228 209 231 228 209 231 228 209 231 228 209 231 228 209 231 228 209 231 228 209 -231 228 209 231 227 205 144 131 48 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 -151 86 24 151 86 24 151 86 24 164 89 24 151 86 24 151 86 24 151 86 24 151 86 24 -151 86 24 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 174 92 24 -164 89 24 174 92 24 164 89 24 174 92 24 174 92 24 174 92 24 164 89 24 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 164 89 24 174 92 24 164 89 24 164 89 24 -164 89 24 164 89 24 164 89 24 174 92 24 162 99 29 175 102 28 162 99 29 175 102 28 -162 99 29 175 102 28 175 102 28 144 131 48 175 102 28 185 141 49 225 216 150 227 219 152 -226 218 150 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 -226 214 125 226 212 108 144 131 48 57 50 16 57 50 16 54 47 16 53 46 15 44 38 13 -37 32 10 37 32 10 24 19 6 22 19 6 15 13 5 9 8 4 5 3 1 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 -7 6 2 14 10 4 19 15 5 24 19 6 30 25 8 37 32 10 44 38 13 44 38 13 -56 49 15 57 50 16 57 50 16 57 50 16 83 78 45 227 217 143 108 92 44 62 54 22 -57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 16 57 50 16 57 50 16 -62 54 22 57 50 16 62 49 15 62 49 15 62 49 15 75 57 18 57 50 16 75 57 18 -75 57 18 75 57 18 75 57 18 81 65 20 83 60 18 81 65 20 81 65 20 86 69 23 -86 69 23 86 69 23 95 66 20 95 66 20 95 66 20 103 69 20 86 69 23 110 76 23 -103 69 20 110 76 23 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -124 87 31 110 76 23 124 87 31 110 76 23 124 87 31 127 82 26 124 87 31 127 82 26 -204 179 101 224 222 210 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 -231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 -231 228 208 231 227 205 161 154 100 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 -162 99 29 151 86 24 164 89 24 151 86 24 151 86 24 164 89 24 151 86 24 164 89 24 -151 86 24 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 174 92 24 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 -174 92 24 164 89 24 174 92 24 174 92 24 174 92 24 174 92 24 164 89 24 174 92 24 -174 92 24 174 92 24 162 99 29 175 102 28 175 102 28 162 99 29 175 102 28 175 102 28 -175 102 28 144 131 48 175 102 28 175 102 28 175 102 28 226 215 145 226 217 157 227 219 152 -227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 -226 212 108 226 212 108 81 65 20 57 50 17 57 50 16 54 47 16 44 38 13 44 38 13 -37 32 10 30 25 8 22 19 6 19 15 5 15 13 5 7 6 2 3 3 2 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 -7 6 2 9 8 4 19 15 5 22 19 6 28 25 13 37 32 10 44 38 13 44 38 13 -53 46 15 57 50 16 57 50 16 57 50 16 57 50 16 161 154 100 202 194 153 57 50 17 -57 50 17 57 50 17 57 50 17 57 50 17 57 50 16 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 62 49 15 62 49 15 -62 54 22 69 51 16 75 57 18 75 57 18 75 57 18 83 60 18 83 60 18 83 60 18 -83 60 18 83 60 18 86 69 23 95 66 20 86 69 23 86 69 23 103 69 20 86 69 23 -103 69 20 86 69 23 103 69 20 103 69 20 103 69 20 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 110 76 23 127 82 26 124 87 31 127 82 26 127 82 26 127 82 26 -145 122 90 231 227 205 231 227 205 231 227 205 231 227 205 231 228 208 231 227 205 231 228 208 -231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 231 228 208 -231 228 208 231 227 205 202 194 153 162 99 29 162 99 29 162 99 29 162 99 29 162 99 29 -162 99 29 164 89 24 164 89 24 151 86 24 164 89 24 151 86 24 151 86 24 164 89 24 -151 86 24 164 89 24 164 89 24 164 89 24 164 89 24 174 92 24 164 89 24 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 164 89 24 174 92 24 174 92 24 174 92 24 -174 92 24 174 92 24 174 92 24 162 99 29 175 102 28 175 102 28 175 102 28 162 99 29 -186 112 35 175 102 28 175 102 28 186 112 35 161 154 100 227 219 152 227 219 152 226 218 150 -227 218 147 227 218 146 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 226 214 125 -226 212 108 161 154 100 57 50 17 57 50 17 56 49 15 53 46 15 44 38 13 39 33 11 -37 32 10 30 25 8 22 19 6 15 13 5 9 8 4 5 4 2 2 2 2 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 -5 3 1 9 8 4 15 13 5 22 19 6 24 19 6 30 25 8 37 32 10 44 38 13 -51 43 14 54 47 16 57 50 16 57 50 16 57 50 16 108 92 44 227 217 136 109 103 77 -57 50 16 57 50 16 57 50 17 57 50 16 57 50 16 57 50 16 57 50 16 56 49 15 -56 49 15 56 49 15 56 49 15 56 49 15 56 49 15 56 47 15 56 49 15 62 49 15 -62 49 15 69 51 16 62 49 15 69 51 16 75 57 18 75 57 18 75 57 18 83 60 18 -83 60 18 83 60 18 83 60 18 83 60 18 95 66 20 95 66 20 95 66 20 95 66 20 -95 66 20 103 69 20 86 69 23 103 69 20 103 69 20 103 69 20 110 76 23 110 76 23 -110 76 23 110 76 23 127 82 26 110 76 23 124 87 31 127 82 26 124 87 31 127 82 26 -134 89 29 227 221 188 230 227 203 231 227 205 231 227 205 231 227 205 231 227 205 231 227 205 -231 227 205 231 227 205 231 227 205 231 227 205 231 227 205 231 227 205 231 227 205 231 227 205 -231 227 205 231 227 205 227 221 188 162 99 29 162 99 29 144 131 48 162 99 29 162 99 29 -151 86 24 162 99 29 151 86 24 164 89 24 151 86 24 164 89 24 164 89 24 151 86 24 -164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 174 92 24 174 92 24 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 -175 102 28 162 99 29 175 102 28 175 102 28 175 102 28 175 102 28 186 112 35 175 102 28 -144 131 48 186 112 35 175 102 28 186 112 35 226 216 132 227 219 152 227 219 152 227 218 147 -227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 226 212 108 -226 212 108 108 92 44 56 49 15 57 50 16 56 49 15 51 43 14 44 38 13 37 32 10 -37 32 10 22 19 6 22 19 6 15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 3 2 7 6 2 14 10 4 19 15 5 24 19 6 30 25 8 37 32 10 44 38 13 -44 38 13 53 46 15 57 50 16 57 50 17 57 50 16 51 48 25 204 179 101 226 214 125 -73 60 27 57 50 17 57 50 17 57 50 16 57 50 16 56 49 15 56 49 15 56 49 15 -56 49 15 53 46 15 60 41 12 51 43 14 50 39 13 60 41 12 50 39 13 51 43 14 -56 47 15 60 41 12 62 49 15 62 49 15 69 51 16 69 51 16 69 51 16 76 52 15 -75 57 18 76 52 15 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 -86 69 23 95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 103 69 20 103 69 20 -110 76 23 110 76 23 110 76 23 110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 -127 82 26 202 194 153 230 227 203 230 227 203 230 227 203 230 227 203 231 227 205 231 227 205 -231 227 205 231 227 205 231 227 205 231 227 205 231 227 205 231 227 205 231 227 205 231 227 205 -231 227 205 231 227 205 224 222 210 185 141 49 162 99 29 162 99 29 162 99 29 162 99 29 -162 99 29 162 99 29 164 89 24 164 89 24 164 89 24 151 86 24 164 89 24 164 89 24 -164 89 24 164 89 24 164 89 24 164 89 24 174 92 24 174 92 24 174 92 24 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 174 92 24 189 101 28 174 92 24 -174 92 24 174 92 24 189 101 28 174 92 24 174 92 24 174 92 24 174 92 24 175 102 28 -175 102 28 175 102 28 175 102 28 175 102 28 175 102 28 186 112 35 175 102 28 186 112 35 -175 102 28 186 112 35 162 99 29 204 179 101 227 219 152 227 219 152 226 218 150 227 218 146 -227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 214 125 226 214 125 226 212 108 -204 179 101 56 49 15 56 49 15 56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 -30 25 8 24 19 6 15 13 5 14 10 4 7 6 2 3 3 2 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 2 2 5 4 2 9 8 4 15 13 5 22 19 6 30 25 8 37 32 10 37 32 10 -44 38 13 53 46 15 54 47 16 57 50 17 57 50 17 57 50 17 109 103 77 227 217 136 -161 154 100 57 50 16 57 50 17 57 50 16 56 49 15 56 49 15 54 47 16 54 47 16 -53 46 15 51 43 14 51 43 14 51 43 14 50 39 13 50 39 13 50 39 13 50 39 13 -50 39 13 50 39 13 60 41 12 60 41 12 60 41 12 62 49 15 69 51 16 69 51 16 -69 51 16 76 52 15 76 52 15 76 52 15 76 52 15 84 52 15 84 52 15 83 60 18 -91 54 15 83 60 18 95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 103 69 20 -103 69 20 110 76 23 110 76 23 127 82 26 110 76 23 124 87 31 127 82 26 124 87 31 -134 89 29 144 131 48 231 227 205 231 227 205 230 227 203 230 227 203 230 227 203 230 227 203 -230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 -230 227 203 230 227 203 230 227 203 204 179 101 144 105 46 162 99 29 162 99 29 162 99 29 -162 99 29 162 99 29 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 -164 89 24 164 89 24 164 89 24 174 92 24 164 89 24 174 92 24 174 92 24 174 92 24 -174 92 24 174 92 24 189 101 28 174 92 24 174 92 24 189 101 28 174 92 24 189 101 28 -189 101 28 174 92 24 174 92 24 189 101 28 174 92 24 189 101 28 175 102 28 175 102 28 -175 102 28 175 102 28 175 102 28 186 112 35 175 102 28 186 112 35 144 131 48 186 112 35 -186 112 35 175 102 28 185 141 49 226 218 150 227 219 152 226 218 150 227 218 147 227 218 146 -227 217 143 227 217 143 227 217 136 226 216 132 226 216 132 226 214 125 226 212 108 226 212 108 -108 92 44 56 49 15 57 50 16 56 49 15 51 43 14 44 38 13 37 32 10 37 32 10 -22 19 6 22 19 6 15 13 5 9 8 4 5 4 2 2 2 2 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 5 3 1 9 8 4 14 10 4 22 19 6 22 19 6 28 25 13 37 32 10 -44 38 13 44 38 13 54 47 16 57 50 16 57 50 17 57 50 16 62 54 22 204 179 101 -227 217 136 83 78 45 57 50 17 57 50 16 56 49 15 56 49 15 54 47 16 56 47 15 -53 46 15 51 43 14 51 43 14 50 39 13 50 39 13 44 38 13 44 30 9 44 30 9 -51 31 9 51 31 9 51 31 9 60 41 12 50 39 13 60 41 12 60 41 12 60 41 12 -69 39 11 69 51 16 69 39 11 69 51 16 76 52 15 76 52 15 76 52 15 84 52 15 -84 52 15 84 52 15 84 52 15 84 52 15 91 54 15 91 54 15 95 66 20 95 66 20 -103 69 20 112 69 20 110 76 23 110 76 23 110 76 23 127 82 26 127 82 26 127 82 26 -134 89 29 136 99 45 227 221 188 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 -230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 -230 227 203 230 227 203 231 228 208 202 194 153 162 99 29 162 99 29 175 102 28 162 99 29 -162 99 29 162 99 29 162 99 29 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 -164 89 24 164 89 24 164 89 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 -174 92 24 189 101 28 174 92 24 189 101 28 189 101 28 174 92 24 189 101 28 189 101 28 -174 92 24 189 101 28 189 101 28 174 92 24 189 101 28 174 92 24 189 101 28 189 101 28 -189 101 28 186 112 35 186 112 35 175 102 28 186 112 35 175 102 28 186 112 35 175 102 28 -186 112 35 162 99 29 226 214 125 227 219 152 226 218 150 227 218 147 227 218 146 227 218 146 -227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 226 214 125 226 212 108 204 179 101 -57 50 16 57 50 16 56 49 15 54 47 16 44 38 13 44 38 13 37 32 10 30 25 8 -24 19 6 19 15 5 14 10 4 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 3 3 2 7 6 2 9 8 4 15 13 5 22 19 6 30 25 8 37 32 10 -39 33 11 44 38 13 53 46 15 54 47 16 57 50 17 57 50 17 57 50 17 109 103 77 -227 218 146 204 179 101 73 60 27 57 50 17 56 49 15 56 49 15 54 47 16 53 46 15 -51 43 14 51 43 14 50 39 13 50 39 13 44 38 13 44 30 9 44 30 9 44 30 9 -38 30 10 44 30 9 44 30 9 51 31 9 51 31 9 51 31 9 60 33 9 60 41 12 -60 41 12 60 41 12 69 39 11 69 39 11 69 39 11 69 51 16 79 41 11 76 52 15 -76 52 15 76 52 15 84 52 15 84 52 15 84 52 15 91 54 15 91 54 15 95 66 20 -106 56 16 103 69 20 112 69 20 110 76 23 127 82 26 127 82 26 124 87 31 127 82 26 -134 89 29 127 82 26 202 194 153 227 221 188 230 227 203 230 227 201 230 227 201 230 227 201 -230 227 201 230 227 201 230 227 203 230 227 203 230 227 203 230 227 203 230 227 203 230 227 201 -230 227 201 230 227 201 230 227 201 230 227 199 175 102 28 162 99 29 144 131 48 175 102 28 -175 102 28 162 99 29 162 99 29 164 89 24 164 89 24 164 89 24 164 89 24 164 89 24 -164 89 24 164 89 24 174 92 24 164 89 24 174 92 24 174 92 24 174 92 24 189 101 28 -174 92 24 189 101 28 174 92 24 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 -189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 175 102 28 175 102 28 -189 101 28 175 102 28 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 -144 131 48 204 179 101 226 215 145 225 216 150 226 218 150 227 218 147 227 218 146 227 217 143 -227 217 143 227 217 136 227 217 136 226 214 125 226 214 125 226 212 108 226 212 108 108 92 44 -56 49 15 57 50 16 56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 28 25 13 -22 19 6 17 15 7 9 8 4 7 4 1 2 2 2 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 0 5 3 1 9 8 4 15 13 5 22 19 6 22 19 6 30 25 8 -37 32 10 44 38 13 44 38 13 56 49 15 57 50 16 57 50 17 57 50 16 62 54 22 -204 179 101 227 217 143 161 154 100 57 50 17 56 49 15 56 49 15 54 47 16 56 47 15 -53 46 15 51 43 14 50 39 13 50 39 13 41 34 11 44 30 9 38 30 10 44 30 9 -37 28 9 37 22 6 37 28 9 44 30 9 44 30 9 51 31 9 51 31 9 51 31 9 -60 33 9 60 33 9 60 33 9 60 41 12 60 41 12 69 39 11 69 39 11 69 39 11 -69 39 11 79 41 11 79 41 11 79 41 11 84 52 15 84 52 15 91 54 15 91 54 15 -95 66 20 103 69 20 103 69 20 110 76 23 110 76 23 110 76 23 127 82 26 127 82 26 -134 89 29 140 85 24 145 122 90 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 -230 227 199 230 227 199 230 227 199 230 227 199 230 227 201 230 227 199 230 227 199 230 227 199 -230 227 199 230 227 199 230 227 199 230 227 197 161 154 100 175 102 28 175 102 28 175 102 28 -162 99 29 162 99 29 175 102 28 162 99 29 164 89 24 164 89 24 164 89 24 164 89 24 -164 89 24 164 89 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 -189 101 28 174 92 24 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 -174 92 24 189 101 28 189 101 28 189 101 28 175 102 28 189 101 28 189 101 28 186 112 35 -186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 175 102 28 -185 141 49 226 213 140 226 218 150 227 219 152 227 218 147 227 218 146 227 217 143 227 217 143 -227 217 136 227 217 136 226 216 132 226 214 125 226 212 108 226 212 108 204 179 101 57 50 16 -57 50 16 57 50 16 56 49 15 44 38 13 44 38 13 37 32 10 30 25 8 24 19 6 -19 15 5 15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 3 3 2 7 6 2 14 10 4 17 15 7 22 19 6 30 25 8 -37 32 10 44 38 13 44 38 13 53 46 15 56 49 15 57 50 17 57 50 17 57 50 17 -108 92 44 227 218 146 227 217 136 108 92 44 51 48 25 57 50 16 57 50 16 56 47 15 -51 43 14 51 43 14 50 39 13 44 38 13 51 31 9 41 34 11 44 30 9 37 28 9 -37 22 6 37 28 9 37 22 6 37 22 6 44 30 9 44 30 9 44 30 9 51 31 9 -51 31 9 51 31 9 60 33 9 60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 -69 39 11 69 39 11 69 39 11 76 52 15 79 41 11 79 41 11 84 52 15 91 54 15 -91 54 15 106 56 16 103 69 20 112 69 20 110 76 23 127 82 26 127 82 26 124 87 31 -134 89 29 134 89 29 134 89 29 228 223 180 230 227 198 230 227 198 230 227 199 230 227 199 -230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 -230 227 199 230 227 199 230 227 199 230 227 197 204 179 101 175 102 28 162 99 29 162 99 29 -175 102 28 175 102 28 162 99 29 162 99 29 174 92 24 164 89 24 164 89 24 174 92 24 -164 89 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 174 92 24 -189 101 28 189 101 28 174 92 24 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 -189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 186 112 35 186 112 35 189 101 28 -186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 185 141 49 175 102 28 185 141 49 -226 212 108 226 217 157 225 216 150 227 218 147 227 218 146 227 218 146 227 217 143 227 217 143 -227 217 136 226 216 132 226 214 125 226 214 125 226 212 108 226 212 108 86 69 23 57 50 16 -57 50 16 56 49 15 53 46 15 44 38 13 39 33 11 37 32 10 30 25 8 22 19 6 -17 15 7 10 7 2 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 15 13 5 22 19 6 22 19 6 -30 25 8 37 32 10 44 38 13 44 38 13 53 46 15 57 50 16 57 50 16 51 48 25 -57 50 17 161 154 100 226 215 145 226 213 140 86 69 23 57 50 17 57 50 17 57 50 16 -56 47 15 51 43 14 51 43 14 50 39 13 44 38 13 41 34 11 44 30 9 44 30 9 -37 28 9 37 22 6 37 22 6 37 22 6 37 22 6 37 22 6 44 30 9 37 22 6 -51 31 9 51 31 9 51 31 9 51 31 9 60 33 9 60 33 9 60 33 9 60 33 9 -69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 79 41 11 84 52 15 -91 54 15 91 54 15 103 69 20 112 69 20 110 76 23 110 76 23 127 82 26 127 82 26 -134 89 29 134 89 29 134 89 29 204 179 101 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 197 230 227 198 230 227 198 230 227 198 230 227 198 230 227 198 230 227 198 230 227 198 -230 227 197 230 227 197 230 227 197 230 227 199 227 221 188 175 102 28 144 131 48 186 112 35 -162 99 29 175 102 28 162 99 29 175 102 28 174 92 24 164 89 24 174 92 24 164 89 24 -174 92 24 164 89 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 -174 92 24 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 -189 101 28 189 101 28 189 101 28 189 101 28 186 112 35 189 101 28 186 112 35 186 112 35 -186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 175 102 28 204 179 101 -225 216 150 225 216 150 226 218 150 227 218 146 227 218 146 227 217 143 227 217 143 227 217 136 -226 216 132 226 216 132 226 214 125 226 214 125 226 212 108 185 141 49 57 50 16 57 50 16 -57 50 16 54 47 16 44 38 13 44 38 13 37 32 10 30 25 8 22 19 6 19 15 5 -15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 14 10 4 17 15 7 22 19 6 -30 25 8 37 32 10 39 33 11 44 38 13 53 46 15 54 47 16 57 50 16 57 50 16 -57 50 16 83 78 45 226 214 125 226 215 145 204 179 101 56 54 38 62 49 15 62 54 22 -57 50 16 56 47 15 56 47 15 50 39 13 50 39 13 51 31 9 41 34 11 44 30 9 -37 28 9 37 22 6 37 22 6 37 22 6 37 22 6 37 22 6 37 22 6 51 31 9 -37 22 6 51 31 9 51 31 9 51 31 9 51 31 9 60 33 9 60 33 9 60 33 9 -60 33 9 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 79 41 11 84 52 15 -91 54 15 91 54 15 106 56 16 103 69 20 112 69 20 127 82 26 127 82 26 127 82 26 -134 89 29 134 89 29 134 89 29 145 122 90 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 185 141 49 162 99 29 175 102 28 -162 99 29 175 102 28 162 99 29 175 102 28 162 99 29 174 92 24 164 89 24 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 174 92 24 189 101 28 -189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 -189 101 28 189 101 28 186 112 35 189 101 28 186 112 35 186 112 35 186 112 35 186 112 35 -186 112 35 186 112 35 186 112 35 185 141 49 186 112 35 186 112 35 185 141 49 227 219 152 -227 219 152 227 219 152 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 -226 216 132 226 214 125 226 214 125 226 212 108 226 212 108 73 60 27 57 50 16 57 50 16 -57 50 16 53 46 15 44 38 13 39 33 11 37 32 10 30 25 8 22 19 6 17 15 7 -14 10 4 7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 15 13 5 22 19 6 -30 25 8 30 25 8 37 32 10 44 38 13 44 38 13 53 46 15 57 50 16 57 50 16 -57 50 16 56 49 15 109 103 77 226 215 145 226 215 145 161 154 100 62 49 15 62 54 22 -62 49 15 62 49 15 56 47 15 56 47 15 51 43 14 50 39 13 50 39 13 51 31 9 -44 30 9 44 30 9 44 30 9 44 30 9 37 22 6 37 22 6 37 22 6 37 22 6 -37 22 6 51 31 9 37 22 6 51 31 9 51 31 9 60 33 9 60 33 9 60 33 9 -60 33 9 60 33 9 60 33 9 69 39 11 79 41 11 69 39 11 79 41 11 79 41 11 -91 54 15 91 54 15 91 54 15 103 69 20 112 69 20 110 76 23 110 76 23 127 82 26 -127 82 26 134 89 29 134 89 29 134 89 29 227 220 173 230 226 196 230 226 196 230 226 196 -230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 -230 227 197 230 226 196 230 226 196 230 225 190 224 222 210 204 179 101 162 99 29 186 112 35 -144 131 48 175 102 28 162 99 29 175 102 28 162 99 29 174 92 24 174 92 24 174 92 24 -164 89 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 174 92 24 -189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 -189 101 28 189 101 28 189 101 28 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 -186 112 35 185 141 49 186 112 35 186 112 35 186 112 35 185 141 49 227 218 147 227 219 152 -226 218 150 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 226 216 132 -226 214 125 226 214 125 226 212 108 226 212 108 144 131 48 57 50 16 57 50 16 57 50 16 -54 47 16 44 38 13 44 38 13 37 32 10 30 25 8 22 19 6 19 15 5 15 13 5 -9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 6 2 9 8 4 17 15 7 -22 19 6 30 25 8 37 32 10 37 32 10 44 38 13 53 46 15 53 46 15 57 50 16 -57 50 16 57 50 16 57 50 16 204 179 101 227 217 143 226 213 140 109 103 77 69 51 16 -69 51 16 62 54 22 62 49 15 62 49 15 56 47 15 60 41 12 50 39 13 50 39 13 -50 39 13 51 31 9 44 30 9 44 30 9 37 22 6 51 31 9 37 22 6 51 31 9 -37 22 6 51 31 9 51 31 9 51 31 9 51 31 9 60 33 9 51 31 9 60 33 9 -60 33 9 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 79 41 11 -84 52 15 91 54 15 106 56 16 103 69 20 112 69 20 110 76 23 127 82 26 127 82 26 -127 82 26 134 89 29 134 89 29 134 89 29 161 154 100 230 227 198 230 226 196 230 226 196 -230 226 196 230 226 196 230 226 196 230 226 196 230 226 196 230 226 196 230 226 196 230 226 196 -230 226 196 230 226 196 230 226 196 230 226 196 230 225 190 202 194 153 175 102 28 175 102 28 -175 102 28 175 102 28 175 102 28 162 99 29 175 102 28 162 99 29 174 92 24 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 174 92 24 189 101 28 -189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 -186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 -186 112 35 186 112 35 186 112 35 186 112 35 185 141 49 226 214 125 227 219 152 227 219 152 -227 218 147 227 218 146 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 226 214 125 -226 214 125 226 212 108 226 212 108 204 179 101 44 38 13 56 49 15 57 50 16 56 49 15 -51 43 14 44 38 13 39 33 11 37 32 10 30 25 8 22 19 6 17 15 7 14 10 4 -7 6 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 9 8 4 15 13 5 -17 15 7 22 19 6 28 25 13 37 32 10 44 38 13 44 38 13 53 46 15 57 50 16 -57 50 17 57 50 16 53 46 15 83 78 45 226 216 132 227 217 136 227 218 146 108 92 44 -62 49 15 62 54 22 62 49 15 62 49 15 62 49 15 56 47 15 56 47 15 60 41 12 -50 39 13 51 31 9 51 31 9 51 31 9 60 33 9 37 22 6 51 31 9 37 22 6 -60 33 9 37 22 6 51 31 9 37 22 6 51 31 9 60 33 9 60 33 9 60 33 9 -60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 79 41 11 79 41 11 79 41 11 -79 41 11 91 54 15 91 54 15 106 56 16 112 69 20 112 69 20 110 76 23 127 82 26 -134 89 29 134 89 29 134 89 29 151 86 24 144 105 46 230 225 190 230 226 196 230 225 190 -230 226 196 230 225 190 230 225 190 230 226 196 230 225 190 230 225 190 230 226 196 230 225 190 -230 225 190 230 226 196 230 225 190 230 225 190 230 225 190 230 226 196 185 141 49 144 131 48 -186 112 35 162 99 29 175 102 28 175 102 28 175 102 28 175 102 28 174 92 24 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 174 92 24 -189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 186 112 35 -186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 186 112 35 185 141 49 -186 112 35 186 112 35 185 141 49 186 112 35 226 212 108 227 219 152 227 219 152 227 218 147 -227 218 146 227 218 146 227 217 143 227 217 143 227 217 136 226 216 132 226 216 132 226 216 132 -226 212 108 226 212 108 226 212 108 81 65 20 56 49 15 57 50 16 54 47 16 53 46 15 -44 38 13 44 38 13 37 32 10 30 25 8 22 19 6 19 15 5 15 13 5 9 8 4 -5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 7 4 1 9 8 4 -19 15 5 22 19 6 30 25 8 30 25 8 37 32 10 44 38 13 44 38 13 54 47 16 -56 49 15 57 50 17 57 50 16 56 49 15 144 131 48 225 216 150 227 217 143 227 217 143 -108 92 44 62 54 22 75 57 18 62 54 22 69 51 16 62 49 15 62 49 15 56 47 15 -60 41 12 51 43 14 50 39 13 51 31 9 51 31 9 51 31 9 51 31 9 51 31 9 -37 22 6 60 33 9 37 22 6 60 33 9 60 33 9 51 31 9 60 33 9 60 33 9 -60 33 9 69 39 11 69 39 11 60 33 9 79 41 11 69 39 11 79 41 11 79 41 11 -84 52 15 91 54 15 91 54 15 95 66 20 103 69 20 112 69 20 110 76 23 127 82 26 -127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 202 194 153 230 225 190 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 161 154 100 189 101 28 -162 99 29 186 112 35 162 99 29 175 102 28 162 99 29 175 102 28 162 99 29 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 174 92 24 189 101 28 -189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 185 141 49 189 101 28 -185 141 49 189 101 28 185 141 49 189 101 28 185 141 49 189 101 28 185 141 49 189 101 28 -185 141 49 186 112 35 186 112 35 226 212 108 225 216 150 225 216 150 226 218 150 227 218 146 -227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 226 214 125 -226 212 108 226 212 108 144 131 48 53 46 15 57 50 16 57 50 16 53 46 15 44 38 13 -44 38 13 37 32 10 30 25 8 28 25 13 22 19 6 17 15 7 10 7 2 7 6 2 -3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 2 0 9 8 4 -14 10 4 17 15 7 22 19 6 30 25 8 37 32 10 39 33 11 44 38 13 51 43 14 -56 49 15 57 50 16 57 50 16 51 48 25 62 54 22 161 154 100 227 217 136 227 217 143 -226 216 132 83 78 45 62 54 22 69 51 16 69 51 16 69 51 16 62 49 15 62 49 15 -62 49 15 60 41 12 60 41 12 60 41 12 60 33 9 51 31 9 60 33 9 51 31 9 -60 33 9 37 22 6 60 33 9 51 31 9 51 31 9 51 31 9 60 33 9 60 33 9 -60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 69 39 11 79 41 11 79 41 11 -79 41 11 91 54 15 91 54 15 106 56 16 106 56 16 112 69 20 128 71 21 110 76 23 -127 82 26 134 89 29 134 89 29 134 89 29 151 86 24 161 154 100 230 225 190 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 226 213 140 175 102 28 -175 102 28 144 131 48 186 112 35 175 102 28 175 102 28 175 102 28 175 102 28 174 92 24 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 -189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 189 101 28 186 112 35 -189 101 28 186 112 35 186 112 35 189 101 28 185 141 49 189 101 28 185 141 49 186 112 35 -186 112 35 186 112 35 204 179 101 227 218 147 227 219 152 227 218 147 227 218 146 227 218 146 -227 217 143 227 217 143 227 217 136 227 217 136 226 216 132 226 214 125 226 214 125 226 212 108 -226 212 108 185 141 49 56 49 15 56 49 15 57 50 16 54 47 16 53 46 15 44 38 13 -39 33 11 37 32 10 30 25 8 22 19 6 19 15 5 15 13 5 9 8 4 5 3 1 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 3 1 -9 8 4 15 13 5 22 19 6 22 19 6 30 25 8 37 32 10 44 38 13 44 38 13 -53 46 15 54 47 16 57 50 17 57 50 17 57 50 17 86 69 23 226 214 125 226 213 140 -227 217 143 226 214 125 83 78 45 75 57 18 62 54 22 75 57 18 69 51 16 69 51 16 -62 49 15 62 49 15 62 49 15 60 41 12 60 41 12 60 41 12 60 33 9 60 33 9 -60 33 9 60 33 9 51 31 9 51 31 9 60 33 9 60 33 9 60 33 9 60 33 9 -60 33 9 69 39 11 69 39 11 69 39 11 69 39 11 79 41 11 69 39 11 79 41 11 -79 41 11 84 52 15 91 54 15 91 54 15 103 69 20 112 69 20 110 76 23 127 82 26 -127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 151 86 24 226 218 164 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 230 225 190 -230 225 190 230 225 190 230 225 190 230 225 190 227 221 188 230 225 190 227 221 188 186 112 35 -162 99 29 175 102 28 175 102 28 162 99 29 175 102 28 162 99 29 175 102 28 175 102 28 -174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 189 101 28 174 92 24 -189 101 28 189 101 28 189 101 28 189 101 28 186 112 35 185 141 49 189 101 28 185 141 49 -189 101 28 185 141 49 189 101 28 185 141 49 189 101 28 185 141 49 189 101 28 185 141 49 -189 101 28 226 212 108 227 217 136 227 219 152 227 218 147 227 218 147 227 218 146 227 217 143 -227 217 143 227 217 136 227 217 136 226 216 132 226 216 132 226 214 125 226 212 108 226 212 108 -226 212 108 62 54 22 62 54 22 57 50 16 56 49 15 53 46 15 44 38 13 44 38 13 -37 32 10 28 25 13 22 19 6 22 19 6 15 13 5 9 8 4 4 4 2 2 2 2 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 4 4 2 -7 6 2 9 8 4 17 15 7 22 19 6 28 25 13 37 32 10 37 32 10 44 38 13 -44 38 13 53 46 15 57 50 16 57 50 17 57 50 17 57 50 17 83 78 45 226 216 132 -226 213 140 226 213 140 226 214 125 108 92 44 75 57 18 75 57 18 75 57 18 75 57 18 -69 51 16 69 51 16 69 51 16 62 49 15 62 49 15 60 41 12 60 41 12 60 33 9 -60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 51 31 9 60 33 9 60 33 9 -60 33 9 60 33 9 60 33 9 60 33 9 69 39 11 69 39 11 79 41 11 79 41 11 -79 41 11 79 41 11 91 54 15 91 54 15 106 56 16 103 69 20 112 69 20 110 76 23 -127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 151 86 24 161 154 100 230 225 190 -230 225 190 230 225 190 228 223 180 230 225 190 230 225 190 228 223 180 230 225 190 230 225 190 -228 223 180 230 225 190 230 225 190 228 223 180 230 225 190 228 223 180 227 221 188 204 179 101 -186 112 35 175 102 28 144 131 48 186 112 35 175 102 28 175 102 28 175 102 28 162 99 29 -175 102 28 174 92 24 174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 189 101 28 -189 101 28 189 101 28 189 101 28 186 112 35 189 101 28 189 101 28 189 101 28 189 101 28 -185 141 49 189 101 28 185 141 49 189 101 28 185 141 49 189 101 28 185 141 49 189 101 28 -226 212 108 227 217 143 227 218 147 227 218 147 227 218 147 227 218 146 227 217 143 227 217 143 -227 217 136 227 217 136 226 216 132 226 216 132 226 214 125 226 212 108 226 212 108 226 212 108 -86 69 23 57 50 16 57 50 16 56 49 15 54 47 16 44 38 13 44 38 13 37 32 10 -37 32 10 30 25 8 22 19 6 19 15 5 14 10 4 7 6 2 3 3 2 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 -5 4 2 9 8 4 15 13 5 19 15 5 22 19 6 30 25 8 37 32 10 37 32 10 -44 38 13 53 46 15 53 46 15 57 50 16 57 50 17 57 50 17 62 54 22 109 103 77 -226 216 132 226 213 140 226 215 145 226 213 140 108 92 44 62 54 22 75 57 18 75 57 18 -75 57 18 69 51 16 69 51 16 69 51 16 69 51 16 69 51 16 62 49 15 60 41 12 -69 39 11 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 60 33 9 -60 33 9 69 39 11 69 39 11 79 41 11 69 39 11 79 41 11 69 39 11 79 41 11 -79 41 11 91 54 15 91 54 15 91 54 15 106 56 16 103 69 20 112 69 20 112 69 20 -127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 144 105 46 228 223 180 -228 223 180 230 225 190 230 225 190 228 223 180 230 225 190 230 225 190 228 223 180 230 225 190 -230 225 190 228 223 180 230 225 190 228 223 180 230 225 190 228 223 180 227 221 188 202 194 153 -162 99 29 175 102 28 186 112 35 162 99 29 175 102 28 175 102 28 175 102 28 175 102 28 -174 92 24 174 92 24 174 92 24 174 92 24 189 101 28 174 92 24 189 101 28 189 101 28 -189 101 28 189 101 28 189 101 28 186 112 35 186 112 35 185 141 49 189 101 28 185 141 49 -189 101 28 185 141 49 189 101 28 185 141 49 186 112 35 185 141 49 189 101 28 226 212 108 -227 217 136 227 218 146 227 218 147 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 -227 217 136 227 217 136 226 214 125 226 214 125 226 214 125 226 212 108 226 212 108 144 131 48 -56 49 15 57 50 16 57 50 16 56 49 15 51 43 14 44 38 13 39 33 11 37 32 10 -28 25 13 22 19 6 22 19 6 15 13 5 7 6 2 5 4 2 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 2 0 7 6 2 9 8 4 15 13 5 22 19 6 22 19 6 28 25 13 37 32 10 -44 38 13 44 38 13 53 46 15 56 49 15 57 50 16 57 50 16 62 49 15 69 51 16 -161 154 100 227 217 136 226 213 140 226 215 145 227 218 146 108 92 44 73 60 27 75 57 18 -75 57 18 75 57 18 75 57 18 75 57 18 69 51 16 69 51 16 69 51 16 69 51 16 -69 51 16 69 39 11 69 39 11 69 39 11 60 33 9 69 39 11 60 33 9 69 39 11 -60 33 9 69 39 11 60 33 9 60 33 9 69 39 11 69 39 11 79 41 11 79 41 11 -79 41 11 79 41 11 84 52 15 91 54 15 106 56 16 106 56 16 112 69 20 112 69 20 -110 76 23 127 82 26 134 89 29 134 89 29 134 89 29 140 85 24 136 99 45 204 179 101 -230 225 190 228 223 180 228 223 180 230 225 190 228 223 180 228 223 180 230 225 190 228 223 180 -228 223 180 228 223 180 230 225 190 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 -185 141 49 186 112 35 162 99 29 186 112 35 175 102 28 175 102 28 175 102 28 162 99 29 -175 102 28 175 102 28 175 102 28 174 92 24 174 92 24 174 92 24 189 101 28 189 101 28 -189 101 28 189 101 28 186 112 35 186 112 35 189 101 28 189 101 28 185 141 49 189 101 28 -185 141 49 189 101 28 185 141 49 189 101 28 185 141 49 189 101 28 226 212 108 227 218 146 -227 218 147 227 218 147 227 218 146 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 -226 216 132 226 216 132 226 216 132 226 212 108 226 212 108 226 212 108 144 131 48 56 49 15 -57 50 16 57 50 16 54 47 16 53 46 15 44 38 13 44 38 13 37 32 10 30 25 8 -22 19 6 19 15 5 15 13 5 9 8 4 7 6 2 3 3 2 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 5 3 1 7 6 2 14 10 4 15 13 5 22 19 6 30 25 8 30 25 8 -37 32 10 44 38 13 44 38 13 53 46 15 54 47 16 57 50 16 62 54 22 57 50 16 -75 57 18 204 179 101 226 216 132 227 217 143 227 217 143 227 217 143 144 131 48 73 60 27 -75 57 18 81 65 20 75 57 18 75 57 18 75 57 18 76 52 15 76 52 15 69 51 16 -69 51 16 69 51 16 69 51 16 69 39 11 69 39 11 69 39 11 69 39 11 69 39 11 -79 41 11 69 39 11 79 41 11 69 39 11 69 39 11 79 41 11 69 39 11 79 41 11 -79 41 11 79 41 11 91 54 15 91 54 15 91 54 15 103 69 20 103 69 20 112 69 20 -127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 144 131 48 -230 225 190 228 223 180 228 223 180 228 223 180 228 223 180 230 225 190 228 223 180 228 223 180 -230 225 190 228 223 180 228 223 180 228 223 180 230 225 190 228 223 180 228 223 180 228 223 180 -204 179 101 162 99 29 162 99 29 186 112 35 144 131 48 175 102 28 175 102 28 175 102 28 -175 102 28 175 102 28 175 102 28 175 102 28 175 102 28 189 101 28 175 102 28 189 101 28 -186 112 35 186 112 35 189 101 28 185 141 49 189 101 28 185 141 49 189 101 28 185 141 49 -189 101 28 185 141 49 189 101 28 185 141 49 185 141 49 226 212 108 227 217 143 227 218 147 -227 218 147 227 218 147 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 227 217 136 -226 216 132 226 214 125 226 214 125 226 212 108 226 212 108 185 141 49 73 60 27 57 50 16 -57 50 17 56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 30 25 8 30 25 8 -22 19 6 17 15 7 14 10 4 7 6 2 3 3 2 1 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 2 2 2 5 4 2 7 6 2 15 13 5 17 15 7 22 19 6 30 25 8 -37 32 10 37 32 10 44 38 13 51 43 14 54 47 16 57 50 16 62 49 15 57 50 16 -62 54 22 51 48 25 204 179 101 227 217 136 227 217 136 227 217 143 225 216 150 161 154 100 -86 69 23 75 57 18 81 65 20 83 60 18 83 60 18 75 57 18 75 57 18 75 57 18 -76 52 15 76 52 15 76 52 15 69 51 16 76 52 15 79 41 11 69 39 11 79 41 11 -69 39 11 69 39 11 69 39 11 79 41 11 79 41 11 69 39 11 79 41 11 79 41 11 -79 41 11 79 41 11 79 41 11 91 54 15 91 54 15 106 56 16 106 56 16 112 69 20 -112 69 20 110 76 23 127 82 26 134 89 29 134 89 29 162 99 29 134 89 29 151 86 24 -202 194 153 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 -228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 -202 194 153 175 102 28 144 131 48 175 102 28 175 102 28 175 102 28 175 102 28 175 102 28 -175 102 28 175 102 28 175 102 28 175 102 28 175 102 28 175 102 28 189 101 28 186 112 35 -189 101 28 186 112 35 186 112 35 189 101 28 186 112 35 186 112 35 189 101 28 185 141 49 -189 101 28 185 141 49 186 112 35 185 141 49 226 214 125 227 218 146 227 219 152 227 218 147 -227 218 146 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 226 216 132 226 216 132 -226 214 125 226 212 108 226 212 108 226 212 108 204 179 101 73 60 27 57 50 17 57 50 17 -56 49 15 54 47 16 44 38 13 44 38 13 37 32 10 37 32 10 30 25 8 22 19 6 -17 15 7 15 13 5 9 8 4 5 3 1 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 3 3 2 5 4 2 9 8 4 15 13 5 22 19 6 22 19 6 -30 25 8 37 32 10 37 32 10 44 38 13 51 43 14 56 49 15 57 50 16 62 54 22 -69 51 16 62 54 22 73 60 27 204 179 101 227 218 146 227 217 136 227 217 143 227 217 143 -204 179 101 83 78 45 81 65 20 81 65 20 83 60 18 83 60 18 83 60 18 83 60 18 -83 60 18 76 52 15 83 60 18 76 52 15 76 52 15 76 52 15 76 52 15 79 41 11 -79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 79 41 11 -79 41 11 79 41 11 91 54 15 79 41 11 91 54 15 106 56 16 103 69 20 112 69 20 -112 69 20 127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 162 99 29 -144 131 48 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 -228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 -228 223 180 185 141 49 175 102 28 175 102 28 175 102 28 175 102 28 175 102 28 175 102 28 -175 102 28 175 102 28 175 102 28 175 102 28 175 102 28 189 101 28 186 112 35 189 101 28 -186 112 35 186 112 35 186 112 35 185 141 49 189 101 28 185 141 49 186 112 35 186 112 35 -185 141 49 189 101 28 226 212 108 226 212 108 227 219 152 227 218 147 227 218 147 227 218 146 -227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 226 216 132 226 216 132 226 214 125 -226 214 125 226 212 108 226 212 108 204 179 101 81 65 20 56 49 15 57 50 16 57 50 16 -54 47 16 51 43 14 44 38 13 39 33 11 37 32 10 28 25 13 22 19 6 22 19 6 -15 13 5 9 8 4 4 4 2 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 0 3 3 2 7 6 2 14 10 4 15 13 5 22 19 6 -24 19 6 28 25 13 37 32 10 39 33 11 44 38 13 53 46 15 57 50 16 57 50 16 -62 54 22 62 54 22 62 54 22 83 78 45 204 179 101 227 217 136 227 217 136 227 217 143 -226 218 150 226 213 140 136 99 45 83 60 18 81 65 20 81 65 20 81 65 20 81 65 20 -83 60 18 83 60 18 83 60 18 83 60 18 84 52 15 84 52 15 84 52 15 76 52 15 -76 52 15 76 52 15 76 52 15 79 41 11 76 52 15 79 41 11 79 41 11 84 52 15 -84 52 15 91 54 15 79 41 11 91 54 15 91 54 15 91 54 15 106 56 16 103 69 20 -112 69 20 128 71 21 110 76 23 134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 -151 86 24 202 194 153 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 -228 223 180 228 223 180 228 223 180 228 223 180 228 223 180 227 220 173 228 223 180 227 220 173 -228 223 180 204 179 101 175 102 28 186 112 35 144 131 48 186 112 35 162 99 29 186 112 35 -175 102 28 175 102 28 175 102 28 175 102 28 186 112 35 175 102 28 186 112 35 186 112 35 -186 112 35 186 112 35 186 112 35 186 112 35 189 101 28 185 141 49 189 101 28 185 141 49 -189 101 28 226 212 108 227 217 136 227 219 152 227 218 147 227 218 147 227 218 146 227 218 146 -227 217 143 227 217 143 227 217 136 227 217 136 226 216 132 226 216 132 226 214 125 226 212 108 -226 212 108 226 212 108 204 179 101 81 65 20 56 49 15 56 49 15 57 50 16 54 47 16 -51 43 14 44 38 13 44 38 13 37 32 10 30 25 8 22 19 6 22 19 6 15 13 5 -9 8 4 7 4 1 3 3 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 7 6 2 14 10 4 17 15 7 -22 19 6 30 25 8 30 25 8 37 32 10 44 38 13 44 38 13 54 47 16 57 50 16 -62 49 15 69 51 16 62 54 22 75 57 18 83 78 45 226 212 108 226 213 140 227 217 136 -227 217 143 226 215 145 226 218 150 161 154 100 86 69 23 86 69 23 83 60 18 86 69 23 -83 60 18 86 69 23 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 83 60 18 -91 54 15 84 52 15 84 52 15 84 52 15 84 52 15 84 52 15 91 54 15 84 52 15 -84 52 15 79 41 11 91 54 15 91 54 15 91 54 15 106 56 16 106 56 16 103 69 20 -112 69 20 110 76 23 127 82 26 127 82 26 140 85 24 134 89 29 134 89 29 162 99 29 -134 89 29 185 141 49 227 220 173 228 223 180 227 220 173 227 220 173 228 223 180 227 220 173 -227 220 173 228 223 180 227 220 173 227 220 173 227 220 173 227 220 173 227 220 173 228 223 180 -227 220 173 226 218 164 186 112 35 162 99 29 175 102 28 175 102 28 186 112 35 162 99 29 -186 112 35 175 102 28 186 112 35 175 102 28 186 112 35 175 102 28 186 112 35 186 112 35 -186 112 35 186 112 35 186 112 35 185 141 49 186 112 35 186 112 35 186 112 35 185 141 49 -226 212 108 227 218 146 227 218 147 227 218 147 227 218 146 227 218 146 227 217 143 227 217 143 -227 217 136 227 217 136 227 217 136 227 217 136 226 214 125 226 214 125 226 214 125 226 212 108 -226 212 108 204 179 101 81 65 20 56 49 15 56 49 15 56 49 15 56 49 15 53 46 15 -44 38 13 44 38 13 37 32 10 28 25 13 30 25 8 22 19 6 17 15 7 14 10 4 -7 6 2 4 4 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 4 2 6 6 4 14 10 4 -17 15 7 22 19 6 28 25 13 30 25 8 37 32 10 44 38 13 51 43 14 56 49 15 -57 50 16 69 51 16 62 54 22 75 57 18 62 54 22 73 60 27 204 179 101 227 217 136 -227 217 136 227 217 136 227 217 143 227 217 136 202 194 153 136 99 45 86 69 23 95 66 20 -86 69 23 95 66 20 86 69 23 95 66 20 95 66 20 83 60 18 95 66 20 91 54 15 -83 60 18 83 60 18 83 60 18 91 54 15 91 54 15 91 54 15 91 54 15 91 54 15 -91 54 15 106 56 16 91 54 15 91 54 15 91 54 15 106 56 16 103 69 20 112 69 20 -112 69 20 112 69 20 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 140 85 24 202 194 153 227 220 173 228 223 180 227 220 173 227 220 173 227 220 173 -228 223 180 227 220 173 227 220 173 228 223 180 227 220 173 228 223 180 227 220 173 227 220 173 -227 220 173 230 225 190 185 141 49 144 131 48 186 112 35 175 102 28 144 131 48 186 112 35 -162 99 29 186 112 35 175 102 28 186 112 35 175 102 28 186 112 35 186 112 35 186 112 35 -186 112 35 185 141 49 186 112 35 186 112 35 186 112 35 186 112 35 226 212 108 227 218 146 -227 219 152 227 218 147 227 218 147 227 218 146 227 218 146 227 217 143 227 217 143 227 217 143 -227 217 136 227 217 136 226 216 132 226 214 125 226 214 125 226 212 108 226 212 108 226 212 108 -204 179 101 81 65 20 57 50 16 57 50 16 56 49 15 56 49 15 53 46 15 44 38 13 -44 38 13 37 32 10 30 25 8 30 25 8 22 19 6 17 15 7 14 10 4 9 8 4 -5 3 1 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 3 1 9 8 4 -15 13 5 19 15 5 22 19 6 30 25 8 37 32 10 37 32 10 44 38 13 51 43 14 -56 49 15 57 50 16 62 54 22 69 51 16 75 57 18 73 60 27 81 65 20 204 179 101 -227 217 136 227 217 136 227 217 136 227 217 143 227 217 136 227 218 146 161 154 100 110 76 23 -86 69 23 95 66 20 86 69 23 95 66 20 86 69 23 95 66 20 95 66 20 95 66 20 -95 66 20 95 66 20 95 66 20 91 54 15 95 66 20 91 54 15 95 66 20 91 54 15 -91 54 15 91 54 15 95 66 20 106 56 16 95 66 20 106 56 16 103 69 20 112 69 20 -112 69 20 127 82 26 110 76 23 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 -162 99 29 134 89 29 144 131 48 227 220 173 227 220 173 227 220 173 227 220 173 227 220 173 -227 220 173 227 220 173 227 220 173 226 218 164 227 220 173 227 220 173 226 218 164 227 220 173 -226 218 164 227 220 173 226 213 140 175 102 28 162 99 29 186 112 35 175 102 28 175 102 28 -186 112 35 144 131 48 175 102 28 186 112 35 175 102 28 186 112 35 186 112 35 186 112 35 -186 112 35 186 112 35 186 112 35 185 141 49 185 141 49 226 214 125 227 217 136 227 218 146 -227 218 147 227 218 146 227 218 146 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 -227 217 136 226 216 132 226 214 125 226 214 125 226 214 125 226 212 108 226 212 108 185 141 49 -81 65 20 57 50 16 57 50 16 57 50 16 56 49 15 53 46 15 44 38 13 44 38 13 -37 32 10 28 25 13 30 25 8 22 19 6 17 15 7 15 13 5 9 8 4 4 4 2 -3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 2 5 3 1 -9 8 4 15 13 5 22 19 6 22 19 6 24 19 6 37 32 10 41 34 11 44 38 13 -53 46 15 57 50 16 57 50 16 75 57 18 62 54 22 75 57 18 62 54 22 81 65 20 -161 154 100 227 217 136 227 217 136 227 217 136 227 217 143 227 217 143 227 218 146 226 216 132 -145 122 90 86 69 23 95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 -95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 95 66 20 -103 69 20 95 66 20 106 56 16 95 66 20 106 56 16 103 69 20 112 69 20 112 69 20 -112 69 20 110 76 23 127 82 26 127 82 26 140 85 24 134 89 29 134 89 29 134 89 29 -134 89 29 134 89 29 162 99 29 204 179 101 226 218 164 227 220 173 227 220 173 227 220 173 -226 218 164 227 220 173 226 218 164 227 220 173 227 220 173 226 218 164 227 220 173 226 218 164 -227 220 173 226 218 164 227 220 173 185 141 49 175 102 28 175 102 28 144 131 48 186 112 35 -175 102 28 175 102 28 186 112 35 175 102 28 185 141 49 175 102 28 186 112 35 186 112 35 -186 112 35 189 101 28 185 141 49 226 212 108 227 218 146 227 218 146 227 219 152 227 218 146 -227 218 146 227 218 146 227 217 143 227 217 143 227 217 143 227 217 136 227 217 136 227 217 136 -226 214 125 226 214 125 226 214 125 226 212 108 226 212 108 226 212 108 185 141 49 81 65 20 -57 50 16 57 50 16 56 49 15 56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 -37 32 10 30 25 8 22 19 6 22 19 6 15 13 5 9 8 4 7 4 1 3 3 2 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 -7 6 2 9 8 4 15 13 5 22 19 6 24 19 6 30 25 8 37 32 10 39 33 11 -51 43 14 53 46 15 57 50 16 62 49 15 62 54 22 75 57 18 75 57 18 73 60 27 -81 65 20 161 154 100 226 214 125 227 217 136 227 217 136 227 217 143 227 217 143 227 217 143 -227 217 143 226 214 125 145 122 90 86 69 23 95 66 20 95 66 20 95 66 20 103 69 20 -95 66 20 103 69 20 95 66 20 103 69 20 103 69 20 95 66 20 103 69 20 95 66 20 -103 69 20 103 69 20 103 69 20 103 69 20 103 69 20 103 69 20 112 69 20 112 69 20 -110 76 23 127 82 26 127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 -162 99 29 134 89 29 162 99 29 144 105 46 226 218 164 227 220 173 227 219 152 227 220 173 -226 218 164 227 220 173 227 219 152 228 223 180 227 219 152 227 220 173 226 218 164 226 218 164 -227 220 173 226 218 164 226 218 164 204 179 101 162 99 29 186 112 35 162 99 29 175 102 28 -144 131 48 186 112 35 175 102 28 175 102 28 175 102 28 186 112 35 185 141 49 175 102 28 -185 141 49 204 179 101 226 216 132 227 217 136 227 218 146 227 218 146 227 218 146 227 218 146 -227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 227 217 136 227 217 136 226 214 125 -226 214 125 226 214 125 226 212 108 226 212 108 226 212 108 144 131 48 62 54 22 62 54 22 -57 50 16 57 50 16 56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 37 32 10 -28 25 13 22 19 6 22 19 6 15 13 5 9 8 4 7 6 2 4 4 2 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 -5 3 1 7 6 2 10 7 2 15 13 5 22 19 6 22 19 6 30 25 8 37 32 10 -41 34 11 50 39 13 56 49 15 57 50 16 69 51 16 62 54 22 75 57 18 75 57 18 -75 57 18 75 57 18 136 99 45 226 214 125 227 217 136 227 217 136 227 217 136 227 217 136 -227 217 143 226 213 140 226 218 150 204 179 101 144 131 48 110 76 23 86 69 23 103 69 20 -103 69 20 103 69 20 103 69 20 103 69 20 103 69 20 103 69 20 103 69 20 103 69 20 -103 69 20 103 69 20 103 69 20 103 69 20 103 69 20 112 69 20 112 69 20 110 76 23 -128 71 21 110 76 23 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 134 89 29 134 89 29 140 85 24 204 179 101 227 220 173 226 218 164 228 223 180 -227 219 152 228 223 180 227 219 152 227 220 173 226 218 164 227 220 173 227 219 152 227 220 173 -227 219 152 226 218 164 226 218 164 227 220 173 186 112 35 144 131 48 186 112 35 175 102 28 -186 112 35 175 102 28 144 131 48 175 102 28 185 141 49 175 102 28 186 112 35 204 179 101 -227 217 136 227 217 136 227 218 146 227 218 147 227 218 146 227 218 146 227 218 146 227 217 143 -227 217 143 227 217 143 227 217 136 227 217 136 227 217 136 227 217 136 226 214 125 226 214 125 -226 212 108 226 212 108 226 212 108 226 212 108 144 131 48 62 54 22 57 50 16 57 50 16 -57 50 16 56 49 15 56 49 15 44 38 13 44 38 13 37 32 10 28 25 13 30 25 8 -22 19 6 22 19 6 15 13 5 9 8 4 7 6 2 5 3 1 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 5 3 1 7 6 2 9 8 4 15 13 5 19 15 5 24 19 6 30 25 8 -37 32 10 44 38 13 50 39 13 56 49 15 57 50 16 62 54 22 75 57 18 75 57 18 -75 57 18 81 65 20 73 60 27 108 92 44 204 179 101 226 216 132 227 217 136 227 217 136 -227 217 136 227 217 143 227 217 143 226 218 150 226 217 157 202 194 153 144 131 48 110 76 23 -86 69 23 110 76 23 110 76 23 103 69 20 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 112 69 20 110 76 23 110 76 23 112 69 20 110 76 23 110 76 23 -127 82 26 127 82 26 127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 -134 89 29 162 99 29 134 89 29 162 99 29 134 89 29 226 213 140 226 218 164 227 219 152 -227 220 173 227 219 152 227 220 173 227 219 152 227 220 173 227 219 152 227 220 173 227 219 152 -227 220 173 227 219 152 226 218 164 227 219 152 204 179 101 162 99 29 175 102 28 162 99 29 -186 112 35 175 102 28 186 112 35 175 102 28 185 141 49 204 179 101 227 217 136 227 218 146 -227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 217 143 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 136 226 214 125 226 214 125 226 214 125 226 212 108 -226 212 108 226 212 108 204 179 101 95 66 20 56 49 15 56 49 15 57 50 16 57 50 16 -56 49 15 53 46 15 44 38 13 44 38 13 37 32 10 37 32 10 30 25 8 22 19 6 -22 19 6 15 13 5 9 8 4 7 6 2 4 4 2 1 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 0 5 3 1 7 6 2 9 8 4 15 13 5 22 19 6 22 19 6 -30 25 8 37 28 9 44 38 13 51 43 14 56 49 15 62 49 15 62 54 22 62 54 22 -75 57 18 75 57 18 75 57 18 81 65 20 86 69 23 161 154 100 226 216 132 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 143 227 217 136 227 217 136 225 216 150 226 213 140 -161 154 100 108 92 44 86 69 23 110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 110 76 23 110 76 23 110 76 23 127 82 26 110 76 23 127 82 26 -110 76 23 127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 185 141 49 227 219 152 227 220 173 -227 219 152 227 220 173 227 219 152 227 220 173 227 219 152 227 219 152 226 218 164 227 219 152 -227 219 152 226 218 164 227 219 152 226 217 157 225 216 150 185 141 49 175 102 28 144 131 48 -162 99 29 185 141 49 185 141 49 204 179 101 226 218 150 227 218 146 227 218 146 227 218 146 -227 218 146 227 218 146 227 218 146 227 218 146 227 217 143 227 217 143 227 217 136 227 217 136 -227 217 136 227 217 136 227 217 136 226 214 125 226 214 125 226 212 108 226 212 108 226 212 108 -226 212 108 185 141 49 81 65 20 56 49 15 56 49 15 56 49 15 56 49 15 53 46 15 -53 46 15 44 38 13 44 38 13 37 32 10 37 32 10 30 25 8 22 19 6 22 19 6 -15 13 5 9 8 4 7 6 2 4 4 2 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 0 5 3 1 7 6 2 9 8 4 15 13 5 22 19 6 -24 19 6 30 25 8 30 25 8 44 38 13 51 43 14 56 49 15 62 49 15 69 51 16 -75 57 18 75 57 18 81 65 20 75 57 18 81 65 20 81 65 20 144 131 48 226 214 125 -226 214 125 227 217 136 227 217 136 227 217 136 227 217 143 227 217 143 227 217 143 226 213 140 -227 217 143 227 217 143 204 179 101 145 122 90 108 92 44 110 76 23 110 76 23 110 76 23 -110 76 23 110 76 23 127 82 26 110 76 23 110 76 23 127 82 26 110 76 23 127 82 26 -127 82 26 127 82 26 127 82 26 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 162 99 29 134 89 29 144 105 46 140 85 24 134 89 29 204 179 101 227 219 152 -227 219 152 227 219 152 227 219 152 227 219 152 227 220 173 227 219 152 227 219 152 227 219 152 -226 218 164 227 219 152 227 219 152 226 218 164 227 219 152 204 179 101 162 99 29 185 141 49 -204 179 101 225 216 150 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146 -227 218 146 227 218 146 227 217 143 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 -227 217 136 226 214 125 226 214 125 226 212 108 226 214 125 226 212 108 226 212 108 226 212 108 -134 89 29 57 50 16 56 49 15 56 49 15 56 49 15 56 49 15 53 46 15 53 46 15 -44 38 13 37 32 10 37 32 10 28 25 13 30 25 8 22 19 6 22 19 6 15 13 5 -9 8 4 7 6 2 4 4 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 7 6 2 10 7 2 15 13 5 -19 15 5 22 19 6 30 25 8 37 28 9 39 33 11 50 39 13 56 49 15 62 54 22 -62 54 22 75 57 18 75 57 18 75 57 18 81 65 20 81 65 20 83 60 18 95 66 20 -161 154 100 226 216 132 226 216 132 226 216 132 227 217 136 227 217 136 227 217 136 227 217 143 -227 217 143 227 218 146 227 218 146 227 217 143 226 213 140 204 179 101 145 122 90 124 87 31 -110 76 23 110 76 23 110 76 23 110 76 23 124 87 31 110 76 23 127 82 26 124 87 31 -110 76 23 127 82 26 124 87 31 127 82 26 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 134 89 29 134 89 29 134 89 29 162 99 29 134 89 29 134 89 29 226 214 125 -226 218 164 227 219 152 227 220 173 227 219 152 227 219 152 227 219 152 227 220 173 227 219 152 -227 219 152 227 219 152 227 219 152 227 219 152 227 219 152 226 218 150 226 215 145 227 219 152 -227 219 152 227 218 147 227 219 152 227 218 147 227 218 146 227 218 146 227 218 146 227 218 146 -227 217 143 227 217 143 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 226 214 125 -226 214 125 226 214 125 226 212 108 226 212 108 226 212 108 226 212 108 185 141 49 81 65 20 -57 50 16 57 50 16 57 50 16 56 49 15 56 49 15 53 46 15 44 38 13 44 38 13 -37 32 10 37 32 10 37 32 10 28 25 13 22 19 6 22 19 6 15 13 5 14 10 4 -7 6 2 4 4 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 7 6 2 9 8 4 -15 13 5 19 15 5 22 19 6 28 21 6 30 25 8 37 32 10 44 38 13 56 47 15 -62 49 15 69 51 16 75 57 18 75 57 18 81 65 20 81 65 20 81 65 20 81 65 20 -95 66 20 136 99 45 204 179 101 227 217 136 226 216 132 227 217 136 227 217 136 227 217 136 -227 217 136 227 217 143 227 217 143 227 217 143 227 217 143 227 218 146 227 218 146 227 218 146 -226 214 125 161 154 100 144 131 48 136 99 45 110 76 23 124 87 31 110 76 23 124 87 31 -127 82 26 124 87 31 127 82 26 124 87 31 134 89 29 134 89 29 134 89 29 134 89 29 -134 89 29 134 89 29 134 89 29 162 99 29 134 89 29 134 89 29 162 99 29 144 105 46 -227 218 146 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152 -227 219 152 227 219 152 227 219 152 227 219 152 227 219 152 226 218 150 227 218 147 227 218 147 -227 218 147 227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 217 136 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 226 214 125 226 214 125 226 214 125 -226 212 108 226 214 125 226 212 108 226 212 108 226 212 108 124 87 31 57 50 16 57 50 16 -57 50 16 57 50 16 57 50 16 56 49 15 53 46 15 44 38 13 44 38 13 44 38 13 -37 32 10 28 25 13 30 25 8 22 19 6 22 19 6 15 13 5 9 8 4 7 6 2 -4 4 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 7 6 2 -9 8 4 15 13 5 19 15 5 22 19 6 28 21 6 30 25 8 37 28 9 39 33 11 -51 43 14 62 49 15 62 54 22 75 57 18 75 57 18 81 65 20 83 60 18 81 65 20 -81 65 20 86 69 23 103 69 20 161 154 100 226 214 125 226 216 132 226 216 132 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 136 227 217 143 227 217 143 227 217 143 227 217 143 -226 215 145 227 218 147 227 219 152 226 215 145 226 216 132 204 179 101 161 154 100 144 131 48 -144 131 48 134 89 29 127 82 26 124 87 31 127 82 26 134 89 29 134 89 29 134 89 29 -134 89 29 134 89 29 134 89 29 134 89 29 134 89 29 162 99 29 134 89 29 136 99 45 -185 141 49 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152 -227 219 152 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 -227 218 146 227 218 146 227 217 143 227 217 143 227 217 143 227 217 136 227 217 136 227 217 136 -227 217 136 227 217 136 227 217 136 226 214 125 226 214 125 226 214 125 226 214 125 226 212 108 -226 212 108 226 212 108 226 212 108 144 131 48 69 51 16 57 50 16 57 50 16 57 50 16 -57 50 16 56 49 15 53 46 15 51 43 14 44 38 13 44 38 13 37 32 10 37 32 10 -30 25 8 22 19 6 22 19 6 17 15 7 15 13 5 9 8 4 7 6 2 4 4 2 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 -7 6 2 9 8 4 15 13 5 19 15 5 22 19 6 24 19 6 30 25 8 37 32 10 -37 32 10 44 38 13 56 47 15 69 51 16 75 57 18 75 57 18 81 65 20 81 65 20 -81 65 20 86 69 23 86 69 23 95 66 20 110 76 23 161 154 100 226 212 108 226 216 132 -226 216 132 226 216 132 227 217 136 227 217 136 227 217 136 227 217 136 227 217 143 227 217 143 -227 217 143 227 217 143 227 217 143 227 217 143 226 215 145 227 218 146 227 218 146 227 218 146 -227 218 146 227 217 136 227 217 136 226 212 108 204 179 101 204 179 101 204 179 101 204 179 101 -204 179 101 204 179 101 204 179 101 204 179 101 204 179 101 204 179 101 226 214 125 204 179 101 -226 218 164 227 219 152 227 219 152 227 218 146 227 219 152 227 218 146 227 219 152 227 218 146 -227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 217 143 227 217 143 227 217 143 -227 217 143 227 217 143 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 226 216 132 -226 216 132 226 214 125 226 214 125 226 214 125 226 212 108 226 212 108 226 212 108 226 212 108 -226 212 108 185 141 49 86 69 23 62 49 15 57 50 16 57 50 16 57 50 16 57 50 16 -56 49 15 53 46 15 44 38 13 44 38 13 44 38 13 37 32 10 37 32 10 28 25 13 -22 19 6 22 19 6 17 15 7 15 13 5 9 8 4 7 6 2 3 3 2 1 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 -3 3 2 5 4 2 9 8 4 14 10 4 15 13 5 22 19 6 24 19 6 30 25 8 -30 25 8 37 28 9 39 33 11 44 38 13 56 47 15 69 51 16 75 57 18 83 60 18 -83 60 18 86 69 23 81 65 20 86 69 23 86 69 23 95 66 20 124 87 31 161 154 100 -226 214 125 226 214 125 226 216 132 226 216 132 227 217 136 227 217 136 227 217 136 227 217 136 -227 217 136 227 217 136 227 217 143 227 217 143 227 217 143 227 217 143 227 217 143 227 218 146 -227 218 146 227 218 146 227 218 146 226 218 150 226 218 150 226 218 150 227 217 136 227 217 136 -226 216 132 226 216 132 227 217 136 226 216 132 226 215 145 226 215 145 225 216 150 227 219 152 -227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 -227 218 146 227 218 146 227 217 143 227 217 143 227 217 143 227 217 143 227 217 143 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 136 226 216 132 226 216 132 226 216 132 226 214 125 -226 214 125 226 214 125 226 214 125 226 212 108 226 212 108 226 212 108 226 212 108 185 141 49 -110 76 23 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 56 49 15 54 47 16 -53 46 15 44 38 13 44 38 13 37 32 10 37 32 10 30 25 8 28 25 13 22 19 6 -22 19 6 17 15 7 15 13 5 9 8 4 4 4 2 3 3 2 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 3 3 2 5 4 2 9 8 4 14 10 4 15 13 5 19 15 5 22 19 6 -28 21 6 30 25 8 37 32 10 37 32 10 41 34 11 44 38 13 56 49 15 75 57 18 -83 60 18 83 60 18 86 69 23 95 66 20 86 69 23 95 66 20 86 69 23 110 76 23 -124 87 31 161 154 100 226 214 125 226 214 125 226 214 125 226 216 132 226 216 132 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 143 227 217 136 227 217 143 -227 217 143 227 217 143 227 217 143 227 218 146 227 218 146 227 218 146 227 218 146 225 216 150 -225 216 150 225 216 150 225 216 150 225 216 150 227 218 146 226 215 145 227 218 146 227 217 143 -227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 217 136 227 218 146 -227 217 136 227 217 143 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 -227 217 136 226 216 132 226 216 132 226 216 132 226 214 125 226 214 125 226 214 125 226 214 125 -226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 185 141 49 108 92 44 56 49 15 -57 50 16 57 50 16 57 50 16 57 50 16 56 49 15 56 49 15 53 46 15 44 38 13 -44 38 13 44 38 13 37 32 10 37 32 10 28 25 13 30 25 8 22 19 6 17 15 7 -15 13 5 15 13 5 7 6 2 4 4 2 4 4 2 1 1 0 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 2 2 2 5 3 1 7 6 2 9 8 4 14 10 4 19 15 5 -22 19 6 24 19 6 30 25 8 37 28 9 37 32 10 39 33 11 44 38 13 44 38 13 -56 49 15 69 51 16 83 60 18 86 69 23 86 69 23 95 66 20 86 69 23 86 69 23 -103 69 20 103 69 20 127 82 26 161 154 100 226 212 108 226 214 125 226 214 125 226 214 125 -226 214 125 226 216 132 226 216 132 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 143 -227 217 136 227 217 136 227 217 136 227 217 143 227 217 136 227 217 143 227 217 136 227 217 143 -227 217 143 227 217 136 227 217 143 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 226 216 132 226 216 132 -226 216 132 226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 226 212 108 226 212 108 -226 212 108 226 212 108 226 212 108 144 131 48 81 65 20 56 49 15 56 49 15 57 50 16 -57 50 16 57 50 16 57 50 16 56 49 15 53 46 15 53 46 15 44 38 13 44 38 13 -37 32 10 37 32 10 37 32 10 30 25 8 22 19 6 22 19 6 17 15 7 15 13 5 -9 8 4 7 6 2 4 4 2 3 2 0 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 0 5 3 1 7 6 2 9 8 4 14 10 4 -15 13 5 22 19 6 22 19 6 30 25 8 30 25 8 37 32 10 37 32 10 41 34 11 -44 38 13 44 38 13 51 43 14 62 49 15 75 57 18 86 69 23 95 66 20 95 66 20 -86 69 23 103 69 20 86 69 23 103 69 20 103 69 20 144 131 48 204 179 101 226 214 125 -226 214 125 226 214 125 226 214 125 226 216 132 226 214 125 226 216 132 226 216 132 226 216 132 -227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 -227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 227 217 136 -227 217 136 227 217 136 226 216 132 226 216 132 226 216 132 226 214 125 226 214 125 226 214 125 -226 214 125 226 214 125 226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 -185 141 49 108 92 44 62 49 15 56 49 15 57 50 16 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 53 46 15 51 43 14 44 38 13 44 38 13 44 38 13 37 32 10 -37 32 10 28 25 13 28 25 13 22 19 6 22 19 6 15 13 5 15 13 5 9 8 4 -7 6 2 4 4 2 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 5 4 2 9 8 4 -9 8 4 15 13 5 19 15 5 22 19 6 24 19 6 30 25 8 30 25 8 37 32 10 -37 32 10 44 38 13 44 38 13 51 43 14 53 46 15 53 46 15 75 57 18 81 65 20 -103 69 20 86 69 23 103 69 20 103 69 20 103 69 20 103 69 20 95 66 20 124 87 31 -144 131 48 204 179 101 226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 -226 214 125 226 216 132 226 216 132 226 216 132 226 216 132 226 216 132 226 216 132 226 216 132 -226 216 132 226 216 132 227 217 136 226 216 132 227 217 136 226 216 132 227 217 136 227 217 136 -226 216 132 227 217 136 226 216 132 227 217 136 226 216 132 226 216 132 226 216 132 226 216 132 -226 216 132 226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 226 212 108 226 214 125 -226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 185 141 49 144 131 48 81 65 20 -57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 54 47 16 -53 46 15 53 46 15 44 38 13 44 38 13 44 38 13 37 32 10 37 32 10 28 25 13 -30 25 8 22 19 6 22 19 6 17 15 7 15 13 5 15 13 5 7 6 2 4 4 2 -3 3 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 3 1 -7 6 2 9 8 4 14 10 4 15 13 5 19 15 5 24 19 6 28 21 6 30 25 8 -30 25 8 37 32 10 37 32 10 44 38 13 44 38 13 44 38 13 51 43 14 53 46 15 -56 49 15 62 54 22 81 65 20 86 69 23 103 69 20 103 69 20 110 76 23 103 69 20 -110 76 23 110 76 23 124 87 31 144 131 48 204 179 101 226 212 108 226 212 108 226 214 125 -226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 226 216 132 226 214 125 -226 216 132 226 214 125 226 216 132 226 216 132 226 216 132 226 216 132 226 214 125 226 214 125 -226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 226 214 125 -226 214 125 226 212 108 226 214 125 226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 -226 212 108 204 179 101 185 141 49 108 92 44 81 65 20 57 50 17 51 48 25 56 49 15 -57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 56 49 15 53 46 15 51 43 14 -44 38 13 44 38 13 44 38 13 37 32 10 37 32 10 30 25 8 28 25 13 30 25 8 -22 19 6 22 19 6 15 13 5 15 13 5 9 8 4 7 6 2 4 4 2 3 3 2 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 -3 3 2 5 4 2 9 8 4 9 8 4 15 13 5 15 13 5 22 19 6 22 19 6 -30 25 8 30 25 8 30 25 8 37 32 10 37 32 10 44 38 13 44 38 13 44 38 13 -51 43 14 53 46 15 54 47 16 57 50 16 57 50 16 62 54 22 81 65 20 86 69 23 -86 69 23 110 76 23 110 76 23 110 76 23 103 69 20 110 76 23 136 99 45 144 131 48 -204 179 101 204 179 101 226 212 108 226 212 108 226 214 125 226 212 108 226 214 125 226 214 125 -226 212 108 226 214 125 226 214 125 226 212 108 226 214 125 226 212 108 226 214 125 226 214 125 -226 214 125 226 214 125 226 214 125 226 212 108 226 214 125 226 212 108 226 212 108 226 212 108 -226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 204 179 101 144 131 48 144 131 48 -86 69 23 57 50 16 57 50 16 62 54 22 57 50 16 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 56 49 15 56 49 15 53 46 15 51 43 14 44 38 13 44 38 13 -44 38 13 37 32 10 37 32 10 37 32 10 28 25 13 30 25 8 22 19 6 22 19 6 -15 13 5 15 13 5 9 8 4 7 6 2 4 4 2 3 3 2 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 2 2 2 5 3 1 7 6 2 9 8 4 14 10 4 15 13 5 19 15 5 -22 19 6 24 19 6 30 25 8 30 25 8 37 32 10 37 32 10 37 32 10 44 38 13 -44 38 13 44 38 13 51 43 14 51 43 14 53 46 15 54 47 16 54 47 16 57 50 16 -57 50 16 57 50 17 62 54 22 75 57 18 81 65 20 86 69 23 95 66 20 110 76 23 -103 69 20 124 87 31 124 87 31 144 105 46 144 131 48 185 141 49 161 154 100 204 179 101 -204 179 101 226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 -226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 226 212 108 204 179 101 204 179 101 -144 131 48 144 131 48 136 99 45 86 69 23 57 50 16 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 56 49 15 -56 49 15 53 46 15 53 46 15 44 38 13 44 38 13 44 38 13 44 38 13 37 32 10 -37 32 10 37 32 10 28 25 13 22 19 6 22 19 6 22 19 6 17 15 7 15 13 5 -15 13 5 9 8 4 7 6 2 4 4 2 3 3 2 1 1 0 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 0 3 3 2 5 3 1 7 6 2 9 8 4 14 10 4 -15 13 5 17 15 7 22 19 6 24 19 6 24 19 6 30 25 8 37 32 10 37 32 10 -37 32 10 39 33 11 44 38 13 44 38 13 44 38 13 51 43 14 53 46 15 53 46 15 -54 47 16 56 49 15 57 50 16 57 50 16 57 50 17 57 50 16 57 50 16 57 50 16 -56 49 15 56 49 15 56 49 15 57 50 16 62 54 22 75 57 18 81 65 20 81 65 20 -81 65 20 57 50 16 57 50 16 81 65 20 83 78 45 83 78 45 83 78 45 108 92 44 -86 69 23 108 92 44 86 69 23 75 57 18 57 50 16 57 50 16 56 49 15 57 50 16 -62 54 22 62 54 22 57 50 17 57 50 16 62 54 22 57 50 16 57 50 17 57 50 17 -57 50 17 57 50 16 57 50 16 57 50 16 57 50 16 54 47 16 53 46 15 51 43 14 -53 46 15 44 38 13 44 38 13 44 38 13 39 33 11 37 32 10 37 32 10 37 32 10 -30 25 8 28 25 13 22 19 6 22 19 6 22 19 6 15 13 5 15 13 5 9 8 4 -7 6 2 4 4 2 4 4 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 3 1 5 4 2 9 8 4 -9 8 4 14 10 4 15 13 5 19 15 5 22 19 6 22 19 6 24 19 6 30 25 8 -37 32 10 37 32 10 37 32 10 39 33 11 44 38 13 44 38 13 44 38 13 44 38 13 -51 43 14 53 46 15 53 46 15 53 46 15 54 47 16 56 49 15 56 49 15 57 50 16 -57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 56 49 15 56 49 15 -56 49 15 56 49 15 57 50 16 57 50 16 57 50 16 57 50 16 56 49 15 56 49 15 -57 50 16 56 49 15 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 57 50 16 57 50 17 57 50 16 57 50 16 57 50 16 57 50 16 -56 49 15 56 49 15 54 47 16 53 46 15 53 46 15 44 38 13 44 38 13 44 38 13 -44 38 13 44 38 13 37 32 10 37 32 10 37 32 10 28 25 13 28 25 13 22 19 6 -22 19 6 22 19 6 22 19 6 15 13 5 15 13 5 9 8 4 9 8 4 4 4 2 -4 4 2 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 2 2 2 5 3 1 -5 4 2 9 8 4 9 8 4 14 10 4 15 13 5 19 15 5 22 19 6 22 19 6 -22 19 6 30 25 8 30 25 8 37 32 10 37 32 10 37 32 10 37 32 10 44 38 13 -44 38 13 44 38 13 44 38 13 51 43 14 51 43 14 51 43 14 53 46 15 53 46 15 -54 47 16 56 49 15 54 47 16 57 50 16 56 49 15 57 50 16 56 49 15 56 49 15 -57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 57 50 17 57 50 17 57 50 16 57 50 16 57 50 16 57 50 16 -57 50 16 57 50 16 57 50 16 56 49 15 57 50 16 57 50 16 53 46 15 53 46 15 -53 46 15 53 46 15 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 37 32 10 -37 32 10 37 32 10 37 32 10 28 25 13 30 25 8 30 25 8 22 19 6 22 19 6 -22 19 6 15 13 5 15 13 5 9 8 4 7 6 2 7 6 2 5 3 1 2 1 0 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 -2 2 2 5 3 1 5 4 2 9 8 4 9 8 4 14 10 4 15 13 5 17 15 7 -19 15 5 22 19 6 22 19 6 30 25 8 30 25 8 30 25 8 37 32 10 37 32 10 -37 32 10 39 33 11 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 51 43 14 -51 43 14 51 43 14 53 46 15 53 46 15 53 46 15 53 46 15 53 46 15 56 49 15 -56 49 15 56 49 15 57 50 16 57 50 16 56 49 15 56 49 15 56 49 15 56 49 15 -56 49 15 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 56 49 15 56 49 15 -53 46 15 54 47 16 53 46 15 53 46 15 44 38 13 53 46 15 44 38 13 44 38 13 -44 38 13 44 38 13 44 38 13 44 38 13 37 32 10 37 32 10 37 32 10 37 32 10 -28 25 13 28 25 13 22 19 6 30 25 8 22 19 6 17 15 7 17 15 7 15 13 5 -15 13 5 9 8 4 9 8 4 7 6 2 4 4 2 2 2 2 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 0 2 2 2 5 3 1 5 3 1 9 8 4 9 8 4 14 10 4 -15 13 5 17 15 7 17 15 7 22 19 6 22 19 6 22 19 6 28 25 13 30 25 8 -30 25 8 30 25 8 37 32 10 37 32 10 37 32 10 37 32 10 44 38 13 44 38 13 -44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 53 46 15 44 38 13 51 43 14 -51 43 14 53 46 15 51 43 14 53 46 15 53 46 15 53 46 15 53 46 15 53 46 15 -53 46 15 53 46 15 51 43 14 53 46 15 51 43 14 51 43 14 53 46 15 44 38 13 -51 43 14 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 -37 32 10 37 32 10 37 32 10 37 32 10 37 32 10 28 25 13 30 25 8 28 25 13 -22 19 6 22 19 6 22 19 6 17 15 7 15 13 5 15 13 5 15 13 5 9 8 4 -7 6 2 4 4 2 3 3 2 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 0 2 2 2 4 2 0 5 4 2 7 6 2 -9 8 4 10 7 2 15 13 5 15 13 5 15 13 5 19 15 5 22 19 6 22 19 6 -24 19 6 30 25 8 30 25 8 30 25 8 30 25 8 37 32 10 37 32 10 37 32 10 -37 32 10 37 32 10 39 33 11 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 -44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 -44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 44 38 13 -44 38 13 44 38 13 39 33 11 39 33 11 37 32 10 37 32 10 37 32 10 37 32 10 -37 32 10 28 25 13 28 25 13 30 25 8 22 19 6 30 25 8 22 19 6 22 19 6 -22 19 6 17 15 7 15 13 5 15 13 5 9 8 4 9 8 4 7 6 2 4 4 2 -4 4 2 3 2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 3 2 3 3 2 -5 3 1 7 6 2 7 6 2 9 8 4 14 10 4 15 13 5 15 13 5 17 15 7 -19 15 5 19 15 5 22 19 6 22 19 6 24 19 6 28 25 13 22 19 6 30 25 8 -28 25 13 37 32 10 28 25 13 37 32 10 28 25 13 37 32 10 37 32 10 37 32 10 -37 32 10 37 32 10 37 32 10 37 32 10 39 33 11 37 32 10 44 38 13 39 33 11 -39 33 11 39 33 11 37 32 10 37 32 10 37 32 10 37 32 10 37 32 10 37 32 10 -37 32 10 28 25 13 37 32 10 37 32 10 37 32 10 30 25 8 28 25 13 22 19 6 -30 25 8 22 19 6 22 19 6 22 19 6 22 19 6 17 15 7 17 15 7 15 13 5 -9 8 4 15 13 5 9 8 4 7 6 2 7 6 2 4 4 2 3 3 2 3 2 0 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 2 2 2 5 3 1 5 3 1 5 4 2 7 6 2 9 8 4 10 7 2 -15 13 5 15 13 5 15 13 5 19 15 5 19 15 5 22 19 6 22 19 6 22 19 6 -24 19 6 22 19 6 30 25 8 30 25 8 30 25 8 28 25 13 28 25 13 30 25 8 -37 32 10 28 25 13 37 32 10 30 25 8 37 32 10 37 32 10 28 25 13 37 32 10 -37 32 10 28 25 13 37 32 10 30 25 8 37 32 10 28 25 13 30 25 8 28 25 13 -30 25 8 30 25 8 22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 -22 19 6 17 15 7 17 15 7 15 13 5 15 13 5 9 8 4 9 8 4 9 8 4 -9 8 4 7 6 2 4 4 2 4 4 2 1 1 0 1 1 0 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 2 2 2 2 2 2 4 4 2 5 4 2 7 6 2 7 6 2 -9 8 4 9 8 4 9 8 4 15 13 5 15 13 5 15 13 5 17 15 7 17 15 7 -22 19 6 22 19 6 22 19 6 17 15 7 22 19 6 22 19 6 22 19 6 22 19 6 -22 19 6 22 19 6 22 19 6 30 25 8 22 19 6 28 25 13 30 25 8 22 19 6 -28 25 13 30 25 8 22 19 6 28 25 13 22 19 6 30 25 8 22 19 6 30 25 8 -22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 17 15 7 -15 13 5 15 13 5 15 13 5 15 13 5 9 8 4 9 8 4 7 6 2 7 6 2 -4 4 2 4 4 2 1 1 0 3 3 2 1 1 1 1 1 1 1 1 1 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 -2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 4 4 2 4 4 2 6 6 4 -6 6 4 9 8 4 9 8 4 9 8 4 9 8 4 11 10 8 14 10 4 15 13 5 -11 10 8 15 13 5 15 13 5 17 15 7 15 13 5 17 15 7 22 19 6 17 15 7 -22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 -22 19 6 22 19 6 22 19 6 22 19 6 22 19 6 20 19 13 22 19 6 17 15 7 -22 19 6 17 15 7 22 19 6 17 15 7 17 15 7 14 12 8 11 10 8 15 13 5 -10 10 9 9 8 4 9 8 4 6 6 4 9 8 4 6 6 4 6 6 4 5 5 4 -4 4 2 4 4 2 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 -3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 5 5 4 6 6 4 7 7 6 7 7 6 9 8 4 9 8 4 7 7 6 -9 8 4 9 9 7 9 9 7 9 9 7 15 13 5 15 13 5 14 12 8 17 15 7 -14 12 8 17 15 7 14 12 8 17 15 7 17 15 7 17 15 7 17 15 7 17 15 7 -17 15 7 20 19 13 17 15 7 17 15 7 17 15 7 17 15 7 17 15 7 14 12 8 -17 15 7 14 12 8 14 12 8 10 10 9 9 9 7 9 9 7 9 9 7 9 8 4 -9 8 4 8 8 7 6 6 4 7 7 6 5 5 4 5 5 4 4 4 4 5 5 4 -4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 -2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 -2 2 2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 -4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 6 6 4 6 6 4 7 7 6 -8 8 7 9 8 4 9 8 4 9 8 4 9 9 7 7 7 6 9 9 7 9 9 7 -9 9 7 11 10 8 9 9 7 14 12 8 10 10 9 14 12 8 14 12 8 14 12 8 -14 12 8 10 10 9 14 12 8 14 12 8 14 12 8 11 11 11 11 10 8 14 12 8 -10 10 9 10 10 9 9 9 7 9 9 7 11 10 8 9 9 7 8 8 7 7 7 6 -7 7 6 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 -4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 -5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 3 3 3 -3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 -5 5 5 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 -7 7 7 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 6 7 7 6 7 7 6 8 8 7 8 8 7 9 9 7 9 9 7 -9 9 7 9 9 7 9 9 7 11 10 8 11 10 8 10 10 9 10 10 9 10 10 9 -10 10 9 14 12 8 11 11 11 11 11 11 10 10 9 14 12 8 10 10 9 11 11 11 -10 10 9 10 10 9 9 9 7 10 10 9 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 -7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 -4 4 4 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 -2 2 2 3 3 3 3 3 3 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 -7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 -9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 9 10 10 9 10 10 9 -10 10 9 10 10 10 10 10 10 10 10 9 11 11 11 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 -9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 7 7 7 7 7 7 6 6 6 -6 6 6 5 5 5 5 5 5 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 3 3 3 -3 3 3 4 4 4 5 5 5 5 5 5 6 6 6 7 7 7 7 7 7 8 8 8 -9 9 9 9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 -11 11 11 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 -11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12 12 12 12 12 12 -12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 -11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -11 11 11 11 11 11 11 11 11 10 10 10 10 10 10 9 9 9 9 9 9 8 8 8 -7 7 7 7 7 7 6 6 6 5 5 5 5 5 5 4 4 4 3 3 3 3 3 3 -2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 4 4 4 -4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 9 9 9 10 10 10 -11 11 11 11 11 11 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 14 14 14 -14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15 15 15 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 13 13 13 -13 13 13 13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 -14 14 14 14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 -14 14 14 14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 14 14 14 14 14 14 14 14 14 -13 13 13 13 13 13 13 13 13 12 12 12 12 12 12 11 11 11 11 11 11 10 10 10 -9 9 9 8 8 8 8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 4 4 4 -3 3 3 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 4 4 4 5 5 5 -6 6 6 7 7 7 8 8 8 9 9 9 9 9 9 10 10 10 11 11 11 12 12 12 -13 13 13 13 13 13 14 14 14 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 -16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 16 16 16 -16 16 16 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 16 16 16 16 16 16 16 16 16 16 16 16 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 -16 16 16 16 16 16 15 15 15 15 15 15 14 14 14 13 13 13 13 13 13 12 12 12 -11 11 11 10 10 10 9 9 9 9 9 9 8 8 8 7 7 7 6 6 6 5 5 5 -4 4 4 3 3 3 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5 6 6 6 -7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 -15 15 15 16 16 16 16 16 16 17 17 17 17 17 17 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 -20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 17 17 17 17 17 17 16 16 16 16 16 16 15 15 15 14 14 14 -13 13 13 12 12 12 11 11 11 10 10 10 9 9 9 8 8 8 7 7 7 6 6 6 -5 5 5 4 4 4 4 4 4 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 -9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 -17 17 17 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 21 21 21 21 21 21 -21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -22 22 22 22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21 21 21 21 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 -22 22 22 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 -22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 22 22 22 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 22 22 22 22 22 22 22 22 22 -21 21 21 21 21 21 21 21 21 21 21 21 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 -22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 -22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22 -22 22 22 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21 -21 21 21 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 17 17 17 16 16 16 -15 15 15 14 14 14 13 13 13 12 12 12 11 11 11 10 10 10 9 9 9 8 8 8 -7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 -2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 -10 10 10 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 19 19 19 -19 19 19 20 20 20 21 21 21 21 21 21 22 22 22 23 23 23 23 23 23 24 24 23 -24 24 23 24 24 23 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -25 25 25 25 25 25 25 25 25 25 25 25 24 24 23 24 24 23 24 24 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 -26 26 26 26 26 26 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -24 24 23 24 24 23 24 24 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 24 24 23 24 24 23 24 24 23 -23 23 23 23 23 23 22 22 22 21 21 21 21 21 21 20 20 20 19 19 19 19 19 19 -17 17 17 16 16 16 15 15 15 14 14 14 13 13 13 12 12 12 10 10 10 9 9 9 -8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 10 10 10 11 11 11 -12 12 12 13 13 13 15 15 15 16 16 16 17 17 17 19 19 19 19 19 19 20 20 20 -21 21 21 22 22 22 23 23 23 24 24 23 25 25 25 25 25 25 26 26 26 26 26 26 -26 26 26 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 26 26 26 26 26 26 26 26 26 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 26 26 26 26 26 26 26 26 26 26 26 26 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 27 27 27 27 27 27 -27 27 27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 -26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 -26 26 26 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 27 27 27 27 27 27 27 27 27 26 26 26 26 26 26 -26 26 26 25 25 25 25 25 25 24 24 23 23 23 23 22 22 22 21 21 21 20 20 20 -19 19 19 19 19 19 17 17 17 16 16 16 15 15 15 13 13 13 12 12 12 11 11 11 -10 10 10 8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 -4 4 4 5 5 5 6 6 6 7 7 7 9 9 9 10 10 10 11 11 11 13 13 13 -14 14 14 15 15 15 16 16 16 19 19 19 19 19 19 20 20 20 21 21 21 22 22 22 -24 24 23 25 25 25 25 25 25 26 26 26 27 27 27 29 29 29 29 29 29 29 29 29 -29 29 29 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 30 30 30 30 30 30 -30 30 30 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 30 30 30 30 30 30 30 30 30 30 30 30 29 29 29 29 29 29 -29 29 29 29 29 29 27 27 27 26 26 26 25 25 25 25 25 25 24 24 23 22 22 22 -21 21 21 20 20 20 19 19 19 19 19 19 16 16 16 15 15 15 14 14 14 13 13 13 -11 11 11 10 10 10 9 9 9 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 -2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 3 3 3 3 3 3 -4 4 4 6 6 6 7 7 7 8 8 8 10 10 10 11 11 11 13 13 13 14 14 14 -16 16 16 17 17 17 19 19 19 20 20 20 21 21 21 22 22 22 24 24 23 25 25 25 -26 26 26 27 27 27 29 29 29 29 29 29 30 30 30 30 30 30 31 31 31 31 31 31 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 33 33 33 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 34 -34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 33 33 33 33 33 33 33 33 33 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 34 -34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 31 31 31 -31 31 31 30 30 30 30 30 30 29 29 29 29 29 29 27 27 27 26 26 26 25 25 25 -24 24 23 22 22 22 21 21 21 20 20 20 19 19 19 17 17 17 16 16 16 14 14 14 -13 13 13 11 11 11 10 10 10 8 8 8 7 7 7 6 6 6 4 4 4 3 3 3 -3 3 3 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 -5 5 5 7 7 7 8 8 8 10 10 10 11 11 11 13 13 13 14 14 14 16 16 16 -17 17 17 19 19 19 20 20 20 21 21 21 23 23 23 25 25 25 26 26 26 27 27 27 -29 29 29 29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 34 34 34 34 34 34 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 36 36 36 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 36 36 36 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 36 36 36 36 36 36 36 36 36 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 34 34 34 34 34 34 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 -36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 36 36 36 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 36 36 36 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -36 36 36 36 36 36 36 36 36 36 36 36 35 35 35 35 35 35 35 35 35 34 34 34 -34 34 34 33 33 33 32 32 32 31 31 31 30 30 30 29 29 29 29 29 29 27 27 27 -26 26 26 25 25 25 23 23 23 21 21 21 20 20 20 19 19 19 17 17 17 16 16 16 -14 14 14 13 13 13 11 11 11 10 10 10 8 8 8 7 7 7 5 5 5 4 4 4 -3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 -6 6 6 8 8 8 9 9 9 11 11 11 13 13 13 14 14 14 16 16 16 17 17 17 -19 19 19 20 20 20 22 22 22 24 24 23 25 25 25 26 26 26 29 29 29 29 29 29 -31 31 31 32 32 32 33 33 33 34 34 34 35 35 35 35 35 35 36 36 36 37 37 37 -37 37 37 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 37 37 37 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 37 37 37 37 37 37 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 -40 40 40 40 40 40 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 -38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 40 40 40 40 40 40 40 40 40 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 38 38 38 37 37 37 37 37 37 -36 36 36 35 35 35 35 35 35 34 34 34 33 33 33 32 32 32 31 31 31 29 29 29 -29 29 29 26 26 26 25 25 25 24 24 23 22 22 22 20 20 20 19 19 19 17 17 17 -16 16 16 14 14 14 13 13 13 11 11 11 9 9 9 8 8 8 6 6 6 5 5 5 -4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 1 1 1 3 3 3 3 3 3 5 5 5 6 6 6 -7 7 7 9 9 9 11 11 11 12 12 12 14 14 14 16 16 16 17 17 17 19 19 19 -21 21 21 22 22 22 24 24 23 26 26 26 27 27 27 29 29 29 30 30 30 32 32 32 -33 33 33 34 34 34 35 35 35 37 37 37 37 37 37 38 38 38 39 39 39 40 40 40 -40 40 40 40 40 40 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 40 40 40 40 40 40 40 40 40 40 40 40 -40 40 40 40 40 40 40 40 40 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 -40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 41 41 41 -41 41 41 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 -40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 -40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 -40 40 40 40 40 40 40 40 40 40 40 40 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 41 41 41 41 41 41 41 41 41 -40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 -40 40 40 40 40 40 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 41 41 41 41 41 41 40 40 40 40 40 40 40 40 40 -39 39 39 38 38 38 37 37 37 37 37 37 35 35 35 34 34 34 33 33 33 32 32 32 -30 30 30 29 29 29 27 27 27 26 26 26 24 24 23 22 22 22 21 21 21 19 19 19 -17 17 17 16 16 16 14 14 14 12 12 12 11 11 11 9 9 9 7 7 7 6 6 6 -5 5 5 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 7 7 7 -8 8 8 10 10 10 12 12 12 13 13 13 16 16 16 17 17 17 19 19 19 20 20 20 -22 22 22 24 24 23 26 26 26 27 27 27 29 29 29 31 31 31 32 32 32 34 34 34 -35 35 35 37 37 37 38 38 38 39 39 39 40 40 40 41 41 41 42 42 42 42 42 42 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 44 44 44 44 44 44 44 44 44 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 44 44 44 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 45 45 45 45 45 45 45 45 45 -45 45 45 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 44 44 44 44 44 44 44 44 44 -44 44 44 44 44 44 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 44 44 44 44 44 44 44 44 44 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 44 44 44 44 44 44 44 44 44 43 43 43 43 43 43 42 42 42 -42 42 42 41 41 41 40 40 40 39 39 39 38 38 38 37 37 37 35 35 35 34 34 34 -32 32 32 31 31 31 29 29 29 27 27 27 26 26 26 24 24 23 22 22 22 20 20 20 -19 19 19 17 17 17 16 16 16 13 13 13 12 12 12 10 10 10 8 8 8 7 7 7 -5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 3 3 3 3 3 3 5 5 5 6 6 6 8 8 8 -9 9 9 11 11 11 13 13 13 15 15 15 17 17 17 19 19 19 20 20 20 22 22 22 -24 24 23 26 26 26 29 29 29 30 30 30 31 31 31 33 33 33 35 35 35 36 36 36 -38 38 38 39 39 39 40 40 40 42 42 42 43 43 43 43 43 43 44 44 44 45 45 45 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 46 46 46 -46 46 46 46 46 46 46 46 46 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 48 48 48 48 48 48 48 48 48 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 46 46 46 46 46 46 46 46 46 45 45 45 -44 44 44 43 43 43 43 43 43 42 42 42 40 40 40 39 39 39 38 38 38 36 36 36 -35 35 35 33 33 33 31 31 31 30 30 30 29 29 29 26 26 26 24 24 23 22 22 22 -20 20 20 19 19 19 17 17 17 15 15 15 13 13 13 11 11 11 9 9 9 8 8 8 -6 6 6 5 5 5 3 3 3 3 3 3 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 -10 10 10 12 12 12 14 14 14 16 16 16 19 19 19 20 20 20 22 22 22 24 24 23 -26 26 26 27 27 27 30 30 30 31 31 31 33 33 33 35 35 35 37 37 37 38 38 38 -40 40 40 42 42 42 43 43 43 44 44 44 45 45 45 46 46 46 48 48 48 48 48 48 -48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 51 51 50 51 51 50 -51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 -51 51 50 51 51 50 51 51 50 51 51 50 49 49 49 51 51 50 49 49 49 49 49 49 -49 49 49 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 48 48 48 51 51 50 49 49 49 51 51 50 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 48 48 48 51 51 50 49 49 49 51 51 50 -51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 -49 49 49 51 51 50 49 49 49 49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 -48 48 48 46 46 46 45 45 45 44 44 44 43 43 43 42 42 42 40 40 40 38 38 38 -37 37 37 35 35 35 33 33 33 31 31 31 30 30 30 27 27 27 26 26 26 24 24 23 -22 22 22 20 20 20 19 19 19 16 16 16 14 14 14 12 12 12 10 10 10 9 9 9 -7 7 7 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 2 2 2 3 3 3 5 5 5 6 6 6 8 8 8 10 10 10 -11 11 11 13 13 13 15 15 15 17 17 17 19 19 19 21 21 21 23 23 23 25 25 25 -27 27 27 29 29 29 31 31 31 33 33 33 35 35 35 37 37 37 39 39 39 41 41 41 -42 42 42 44 44 44 45 45 45 48 48 48 48 48 48 72 72 72 130 128 124 157 154 144 -167 167 167 205 205 205 205 205 205 224 222 210 205 205 205 224 222 210 205 205 205 201 199 182 -167 167 167 130 128 124 113 113 113 66 66 66 52 52 52 52 52 52 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 51 51 50 51 51 50 51 51 50 -52 52 52 52 52 52 93 93 92 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -130 128 124 89 88 84 48 48 48 51 51 50 49 49 49 51 51 50 49 49 49 51 51 50 -49 49 49 51 51 50 49 49 49 51 51 50 49 49 49 51 51 50 49 49 49 51 51 50 -49 49 49 51 51 50 51 51 50 51 51 50 51 51 50 72 72 72 110 108 101 130 128 124 -157 154 144 167 167 167 167 167 167 167 167 167 167 167 167 167 167 167 130 128 124 130 128 124 -89 88 84 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 58 58 58 113 113 113 -130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 113 113 113 89 88 84 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 58 58 58 110 108 101 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 110 108 101 66 66 66 51 51 50 51 51 50 -51 51 50 51 51 50 49 49 49 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 -51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 51 51 50 -89 88 84 130 128 124 157 154 144 167 167 167 205 205 205 224 222 210 205 205 205 224 222 210 -205 205 205 224 222 210 167 167 167 167 167 167 130 128 124 110 108 101 53 53 53 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 -51 51 50 51 51 50 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -89 88 84 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 72 72 72 130 128 124 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 72 72 72 53 53 53 53 53 53 53 53 53 -53 53 53 53 53 53 53 53 53 53 53 53 65 65 65 113 113 113 130 128 124 167 167 167 -201 199 182 205 205 205 224 222 210 205 205 205 224 222 210 205 205 205 205 205 205 167 167 167 -157 154 144 130 128 124 72 72 72 48 48 48 45 45 45 44 44 44 42 42 42 41 41 41 -39 39 39 37 37 37 35 35 35 33 33 33 31 31 31 29 29 29 27 27 27 25 25 25 -23 23 23 21 21 21 19 19 19 17 17 17 15 15 15 13 13 13 11 11 11 10 10 10 -8 8 8 6 6 6 5 5 5 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 10 10 10 -12 12 12 14 14 14 16 16 16 19 19 19 20 20 20 23 23 23 25 25 25 27 27 27 -29 29 29 31 31 31 33 33 33 35 35 35 37 37 37 39 39 39 41 41 41 43 43 43 -45 45 45 46 46 46 58 58 58 157 154 144 230 228 217 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 130 128 124 55 55 54 55 55 54 -55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 -93 93 92 230 228 217 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 246 246 246 167 167 167 89 88 84 53 53 53 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 53 53 53 -53 53 53 52 52 52 93 93 92 167 167 167 235 234 229 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 205 205 205 113 113 113 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 55 55 54 55 55 54 55 55 54 53 53 53 130 128 124 246 246 246 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -235 234 229 167 167 167 89 88 84 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 55 55 54 55 55 54 52 52 52 130 128 124 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 157 154 144 -62 62 62 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 -53 53 53 53 53 53 53 53 53 52 52 52 52 52 52 89 88 84 167 167 167 235 234 229 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 -93 93 92 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 53 53 53 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 53 53 53 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 55 55 54 55 55 54 62 62 62 205 205 205 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 53 53 53 130 128 124 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 230 228 217 157 154 144 58 58 58 45 45 45 43 43 43 -41 41 41 39 39 39 37 37 37 35 35 35 33 33 33 31 31 31 29 29 29 27 27 27 -25 25 25 23 23 23 20 20 20 19 19 19 16 16 16 14 14 14 12 12 12 10 10 10 -9 9 9 7 7 7 5 5 5 4 4 4 3 3 3 1 1 1 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 2 2 2 3 3 3 4 4 4 6 6 6 8 8 8 9 9 9 11 11 11 -13 13 13 16 16 16 17 17 17 20 20 20 21 21 21 24 24 23 26 26 26 29 29 29 -30 30 30 32 32 32 35 35 35 37 37 37 39 39 39 41 41 41 43 43 43 45 45 45 -48 48 48 113 113 113 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 89 88 84 -55 55 54 55 55 54 58 58 58 55 55 54 55 55 54 55 55 54 58 58 58 72 72 72 -235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 62 62 62 55 55 54 -55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 -66 66 66 201 199 182 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 246 246 246 255 255 255 205 205 205 89 88 84 55 55 54 55 55 54 -55 55 54 55 55 54 55 55 54 55 55 54 93 93 92 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 246 246 246 130 128 124 58 58 58 58 58 58 55 55 54 55 55 54 -55 55 54 55 55 54 58 58 58 93 93 92 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -235 234 229 93 93 92 58 58 58 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 55 55 54 55 55 54 58 58 58 167 167 167 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 201 199 182 65 65 65 58 58 58 58 58 58 58 58 58 55 55 54 55 55 54 -58 58 58 55 55 54 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 53 53 53 58 58 58 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 55 55 54 62 62 62 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 167 167 167 62 62 62 58 58 58 58 58 58 58 58 58 58 58 58 -89 88 84 224 222 210 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 113 113 113 48 48 48 -43 43 43 41 41 41 39 39 39 37 37 37 35 35 35 32 32 32 30 30 30 29 29 29 -26 26 26 24 24 23 21 21 21 20 20 20 17 17 17 16 16 16 13 13 13 11 11 11 -9 9 9 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 2 2 2 3 3 3 5 5 5 6 6 6 8 8 8 10 10 10 12 12 12 -14 14 14 16 16 16 19 19 19 20 20 20 23 23 23 25 25 25 27 27 27 30 30 30 -32 32 32 34 34 34 36 36 36 39 39 39 41 41 41 43 43 43 45 45 45 48 48 48 -157 154 144 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -93 93 92 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 55 55 54 157 154 144 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 72 72 72 -58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 72 72 72 -230 228 217 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 93 93 92 58 58 58 -58 58 58 58 58 58 58 58 58 55 55 54 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 53 53 53 201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 89 88 84 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 61 61 59 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 72 72 72 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 53 53 53 201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 201 199 182 62 62 62 58 58 58 58 58 58 58 58 58 62 62 62 93 93 92 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 -45 45 45 43 43 43 41 41 41 39 39 39 36 36 36 34 34 34 32 32 32 30 30 30 -27 27 27 25 25 25 23 23 23 20 20 20 19 19 19 16 16 16 14 14 14 12 12 12 -10 10 10 8 8 8 6 6 6 5 5 5 3 3 3 2 2 2 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 -15 15 15 17 17 17 19 19 19 21 21 21 24 24 23 26 26 26 29 29 29 31 31 31 -33 33 33 35 35 35 38 38 38 40 40 40 43 43 43 45 45 45 48 48 48 130 128 124 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -246 246 246 87 85 74 58 58 58 62 62 62 61 61 59 61 61 59 62 62 62 201 199 182 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 -58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 62 62 62 230 228 217 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 72 72 72 -62 62 62 61 61 59 62 62 62 58 58 58 201 199 182 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 110 108 101 58 58 58 62 62 62 -61 61 59 62 62 62 62 62 62 230 228 217 246 246 246 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 62 62 62 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 205 205 205 65 65 65 62 62 62 62 62 62 61 61 59 -61 61 59 58 58 58 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 58 58 58 58 58 58 62 62 62 61 61 59 61 61 59 62 62 62 61 61 59 -62 62 62 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -205 205 205 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 89 88 84 246 246 246 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -113 113 113 46 46 46 43 43 43 40 40 40 38 38 38 35 35 35 33 33 33 31 31 31 -29 29 29 26 26 26 24 24 23 21 21 21 19 19 19 17 17 17 15 15 15 13 13 13 -11 11 11 9 9 9 7 7 7 5 5 5 4 4 4 3 3 3 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 3 3 3 4 4 4 6 6 6 8 8 8 9 9 9 11 11 11 13 13 13 -16 16 16 19 19 19 20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32 -35 35 35 37 37 37 39 39 39 42 42 42 44 44 44 45 45 45 65 65 65 235 234 229 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 -167 167 167 157 154 144 93 93 92 110 108 101 93 93 92 110 108 101 113 113 113 130 128 124 -201 199 182 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -246 246 246 205 205 205 62 62 62 62 62 62 62 62 62 62 62 62 58 58 58 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 157 154 144 -130 128 124 157 154 144 130 128 124 157 154 144 130 128 124 157 154 144 167 167 167 230 228 217 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 58 58 58 61 61 59 58 58 58 61 61 59 58 58 58 167 167 167 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 205 205 205 -157 154 144 130 128 124 157 154 144 130 128 124 157 154 144 167 167 167 205 205 205 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 -62 62 62 62 62 62 62 62 62 58 58 58 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 130 128 124 157 154 144 130 128 124 157 154 144 -130 128 124 157 154 144 130 128 124 167 167 167 201 199 182 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 62 62 62 -62 62 62 62 62 62 58 58 58 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 157 154 144 157 154 144 130 128 124 157 154 144 130 128 124 157 154 144 -130 128 124 157 154 144 130 128 124 157 154 144 205 205 205 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 157 154 144 130 128 124 157 154 144 130 128 124 157 154 144 -130 128 124 157 154 144 201 199 182 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 113 113 113 62 62 62 61 61 59 61 61 59 62 62 62 -61 61 59 113 113 113 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 224 222 210 167 167 167 130 128 124 93 93 92 110 108 101 93 93 92 -110 108 101 113 113 113 157 154 144 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 62 62 62 62 62 62 62 62 62 -62 62 62 62 62 62 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 -157 154 144 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 -66 66 66 65 65 65 62 62 62 62 62 62 62 62 62 58 58 58 205 205 205 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 -157 154 144 113 113 113 93 93 92 110 108 101 93 93 92 110 108 101 130 128 124 167 167 167 -235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -246 246 246 62 62 62 44 44 44 42 42 42 39 39 39 37 37 37 35 35 35 32 32 32 -30 30 30 27 27 27 25 25 25 22 22 22 20 20 20 19 19 19 16 16 16 13 13 13 -11 11 11 9 9 9 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 3 3 3 5 5 5 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 -16 16 16 19 19 19 21 21 21 23 23 23 26 26 26 29 29 29 31 31 31 33 33 33 -35 35 35 38 38 38 40 40 40 43 43 43 45 45 45 48 48 48 157 154 144 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 72 72 72 -62 62 62 62 62 62 62 62 62 66 66 66 65 65 65 65 65 65 62 62 62 66 66 66 -66 66 66 89 88 84 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 93 93 92 65 65 65 62 62 62 62 62 62 62 62 62 205 205 205 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 66 66 66 66 66 66 -66 66 66 65 65 65 66 66 66 65 65 65 66 66 66 65 65 65 66 66 66 66 66 66 -130 128 124 235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -235 234 229 65 65 65 62 62 62 62 62 62 62 62 62 72 72 72 246 246 246 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 72 72 72 58 58 58 -65 65 65 66 66 66 66 66 66 65 65 65 62 62 62 65 65 65 66 66 66 110 108 101 -224 222 210 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -72 72 72 62 62 62 62 62 62 62 62 62 201 199 182 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 -66 66 66 66 66 66 66 66 66 65 65 65 62 62 62 72 72 72 167 167 167 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 65 65 65 -62 62 62 62 62 62 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 167 167 167 62 62 62 65 65 65 66 66 66 65 65 65 66 66 66 65 65 65 -66 66 66 65 65 65 66 66 66 65 65 65 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 224 222 210 65 65 65 65 65 65 65 65 65 66 66 66 65 65 65 -65 65 65 65 65 65 62 62 62 72 72 72 205 205 205 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 201 199 182 58 58 58 62 62 62 62 62 62 62 62 62 -62 62 62 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -235 234 229 130 128 124 62 62 62 62 62 62 65 65 65 66 66 66 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 110 108 101 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 66 66 66 65 65 65 65 65 65 -65 65 65 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 65 65 65 130 128 124 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 72 72 72 -65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 93 93 92 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 72 72 72 66 66 66 -62 62 62 62 62 62 66 66 66 65 65 65 66 66 66 65 65 65 66 66 66 66 66 66 -72 72 72 157 154 144 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 45 45 45 43 43 43 40 40 40 38 38 38 35 35 35 33 33 33 -31 31 31 29 29 29 26 26 26 23 23 23 21 21 21 19 19 19 16 16 16 14 14 14 -12 12 12 10 10 10 8 8 8 6 6 6 5 5 5 3 3 3 2 2 2 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 3 3 3 5 5 5 7 7 7 9 9 9 10 10 10 13 13 13 15 15 15 -17 17 17 19 19 19 21 21 21 24 24 23 26 26 26 29 29 29 32 32 32 34 34 34 -37 37 37 39 39 39 42 42 42 44 44 44 48 48 48 53 53 53 235 234 229 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 66 66 66 66 66 66 -66 66 66 65 65 65 66 66 66 201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 201 199 182 65 65 65 65 65 65 65 65 65 58 58 58 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 -62 62 62 89 88 84 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 113 113 113 62 62 62 62 62 62 62 62 62 130 128 124 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 65 65 65 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 62 62 62 -72 72 72 230 228 217 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -113 113 113 65 65 65 65 65 65 58 58 58 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 201 199 182 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 65 65 65 -65 65 65 65 65 65 62 62 62 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 65 65 65 66 66 66 72 72 72 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 235 234 229 62 62 62 65 65 65 62 62 62 62 62 62 -93 93 92 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -93 93 92 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 66 66 66 72 72 72 235 234 229 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 65 65 65 65 65 65 -65 65 65 62 62 62 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -157 154 144 65 65 65 65 65 65 66 66 66 65 65 65 62 62 62 130 128 124 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 89 88 84 66 66 66 -66 66 66 65 65 65 65 65 65 65 65 65 72 72 72 167 167 167 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 65 65 65 66 66 66 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 66 66 66 65 65 65 -65 65 65 72 72 72 130 128 124 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 235 234 229 49 49 49 44 44 44 42 42 42 39 39 39 37 37 37 34 34 34 -32 32 32 29 29 29 26 26 26 24 24 23 21 21 21 19 19 19 17 17 17 15 15 15 -13 13 13 10 10 10 9 9 9 7 7 7 5 5 5 3 3 3 2 2 2 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 4 4 4 5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 16 16 16 -17 17 17 20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32 35 35 35 -38 38 38 40 40 40 43 43 43 45 45 45 48 48 48 93 93 92 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 65 65 65 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 65 65 65 65 65 65 72 72 72 246 246 246 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 246 246 246 62 62 62 65 65 65 65 65 65 65 65 65 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 130 128 124 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 167 167 167 66 66 66 65 65 65 65 65 65 167 167 167 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 246 246 246 89 88 84 62 62 62 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 130 128 124 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -167 167 167 65 65 65 65 65 65 65 65 65 201 199 182 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 62 62 62 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 93 93 92 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 -66 66 66 65 65 65 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 224 222 210 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 72 72 72 62 62 62 65 65 65 65 65 65 -157 154 144 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 -62 62 62 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 66 66 66 113 113 113 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 65 65 65 66 66 66 -66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 58 58 58 66 66 66 65 65 65 65 65 65 113 113 113 246 246 246 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 93 93 92 65 65 65 65 65 65 -66 66 66 66 66 66 65 65 65 66 66 66 66 66 66 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 246 246 246 72 72 72 65 65 65 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 65 65 65 66 66 66 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 93 93 92 46 46 46 43 43 43 40 40 40 38 38 38 35 35 35 -32 32 32 30 30 30 27 27 27 25 25 25 22 22 22 20 20 20 17 17 17 15 15 15 -13 13 13 11 11 11 9 9 9 7 7 7 5 5 5 4 4 4 2 2 2 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 16 16 16 -19 19 19 20 20 20 23 23 23 25 25 25 29 29 29 31 31 31 33 33 33 36 36 36 -39 39 39 41 41 41 44 44 44 46 46 46 49 49 49 157 154 144 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 113 113 113 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 93 93 92 66 66 66 66 66 66 62 62 62 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 65 65 65 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 72 72 72 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 205 205 205 65 65 65 65 65 65 72 72 72 205 205 205 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 205 205 205 65 65 65 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -65 65 65 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -167 167 167 65 65 65 65 65 65 62 62 62 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 72 72 72 -235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 66 66 66 -66 66 66 65 65 65 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 230 228 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 130 128 124 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 65 65 65 65 65 65 66 66 66 -205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 72 72 72 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 66 66 66 66 66 66 -66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -157 154 144 66 66 66 66 66 66 66 66 66 93 93 92 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 246 246 246 93 93 92 65 65 65 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 93 93 92 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 65 65 65 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 93 93 92 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 157 154 144 46 46 46 44 44 44 41 41 41 38 38 38 36 36 36 -33 33 33 31 31 31 29 29 29 25 25 25 23 23 23 20 20 20 19 19 19 16 16 16 -13 13 13 11 11 11 9 9 9 7 7 7 5 5 5 4 4 4 3 3 3 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 16 16 16 -19 19 19 21 21 21 23 23 23 26 26 26 29 29 29 31 31 31 34 34 34 37 37 37 -39 39 39 42 42 42 45 45 45 48 48 48 49 49 49 201 199 182 246 246 246 255 255 255 -255 255 255 255 255 255 255 255 255 246 246 246 72 72 72 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 110 108 101 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 66 66 66 66 66 66 205 205 205 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 235 234 229 66 66 66 66 66 66 66 66 66 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 72 72 72 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -205 205 205 65 65 65 66 66 66 65 65 65 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 62 62 62 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 -66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 66 66 66 66 66 66 66 66 66 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 72 72 72 -65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 89 88 84 65 65 65 -66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 58 58 58 66 66 66 89 88 84 235 234 229 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 246 246 246 110 108 101 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 130 128 124 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 201 199 182 42 42 42 45 45 45 42 42 42 39 39 39 37 37 37 -34 34 34 31 31 31 29 29 29 26 26 26 23 23 23 21 21 21 19 19 19 16 16 16 -14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 16 16 16 -19 19 19 21 21 21 24 24 23 26 26 26 29 29 29 32 32 32 35 35 35 37 37 37 -40 40 40 43 43 43 45 45 45 48 48 48 52 52 52 205 205 205 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 224 222 210 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 72 72 72 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 62 62 62 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 65 65 65 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 65 65 65 201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 72 72 72 66 66 66 65 65 65 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 89 88 84 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -205 205 205 66 66 66 65 65 65 72 72 72 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 205 205 205 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 -201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 205 205 205 66 66 66 -66 66 66 66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 230 228 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 66 66 66 66 66 66 72 72 72 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 113 113 113 66 66 66 -66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -157 154 144 66 66 66 66 66 66 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 113 113 113 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 65 65 65 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 89 88 84 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 62 62 62 205 205 205 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 48 48 48 45 45 45 43 43 43 40 40 40 37 37 37 -34 34 34 32 32 32 29 29 29 26 26 26 24 24 23 21 21 21 19 19 19 16 16 16 -14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 17 17 17 -19 19 19 21 21 21 24 24 23 27 27 27 29 29 29 32 32 32 35 35 35 38 38 38 -40 40 40 43 43 43 46 46 46 48 48 48 52 52 52 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 205 205 205 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 72 72 72 65 65 65 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 72 72 72 66 66 66 66 66 66 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 235 234 229 224 222 210 224 222 210 224 222 210 224 222 210 -224 222 210 224 222 210 224 222 210 224 222 210 224 222 210 224 222 210 224 222 210 224 222 210 -224 222 210 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -205 205 205 62 62 62 66 66 66 65 65 65 201 199 182 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 62 62 62 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -201 199 182 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 -66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 110 108 101 66 66 66 66 66 66 93 93 92 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 -66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 58 58 58 113 113 113 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 130 128 124 72 72 72 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 65 65 65 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 65 65 65 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 52 52 52 45 45 45 43 43 43 40 40 40 38 38 38 -35 35 35 32 32 32 29 29 29 27 27 27 24 24 23 21 21 21 19 19 19 17 17 17 -14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 12 12 12 15 15 15 17 17 17 -19 19 19 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32 35 35 35 38 38 38 -41 41 41 43 43 43 46 46 46 49 49 49 53 53 53 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 201 199 182 66 66 66 66 66 66 62 62 62 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 65 65 65 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 157 154 144 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 89 88 84 72 72 72 72 72 72 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -255 255 255 246 246 246 255 255 255 246 246 246 255 255 255 246 246 246 255 255 255 246 246 246 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -167 167 167 65 65 65 66 66 66 62 62 62 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 205 205 205 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 62 62 62 -201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 66 66 66 -66 66 66 66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -246 246 246 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 230 228 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 66 66 66 66 66 66 110 108 101 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 93 93 92 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 66 66 66 -66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -224 222 210 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 65 65 65 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 246 246 246 49 49 49 46 46 46 43 43 43 41 41 41 38 38 38 -35 35 35 32 32 32 30 30 30 27 27 27 25 25 25 22 22 22 19 19 19 17 17 17 -15 15 15 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 13 13 13 15 15 15 17 17 17 -20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32 35 35 35 38 38 38 -41 41 41 43 43 43 46 46 46 49 49 49 53 53 53 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 72 72 72 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 66 66 66 66 66 66 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 89 88 84 65 65 65 72 72 72 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 66 66 66 66 66 66 65 65 65 201 199 182 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 62 62 62 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -201 199 182 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 66 66 66 -66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 72 72 72 66 66 66 113 113 113 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 72 72 72 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 89 88 84 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 72 72 72 -65 65 65 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 66 66 66 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -205 205 205 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 205 205 205 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 49 49 49 46 46 46 43 43 43 41 41 41 38 38 38 -35 35 35 32 32 32 30 30 30 27 27 27 25 25 25 22 22 22 19 19 19 17 17 17 -15 15 15 13 13 13 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 13 13 13 15 15 15 17 17 17 -20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 33 33 33 35 35 35 38 38 38 -41 41 41 44 44 44 46 46 46 49 49 49 52 52 52 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 201 199 182 66 66 66 66 66 66 66 66 66 201 199 182 -255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 65 65 65 157 154 144 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 72 72 72 72 72 72 72 72 72 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 -66 66 66 66 66 66 66 66 66 62 62 62 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 62 62 62 -201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 66 66 66 -66 66 66 66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 230 228 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 110 108 101 65 65 65 65 65 65 113 113 113 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 93 93 92 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 66 66 66 -66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -157 154 144 65 65 65 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -246 246 246 87 85 74 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 62 62 62 205 205 205 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 49 49 49 46 46 46 43 43 43 41 41 41 38 38 38 -35 35 35 32 32 32 30 30 30 27 27 27 25 25 25 22 22 22 20 20 20 17 17 17 -15 15 15 13 13 13 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 13 13 13 15 15 15 17 17 17 -20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32 35 35 35 38 38 38 -41 41 41 43 43 43 46 46 46 49 49 49 52 52 52 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 201 199 182 65 65 65 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 66 66 66 66 66 66 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 72 72 72 72 72 72 72 72 72 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 72 72 72 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 201 199 182 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -201 199 182 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 -66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 72 72 72 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 66 66 66 66 66 66 110 108 101 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 72 72 72 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 93 93 92 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 72 72 72 -65 65 65 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 62 62 62 113 113 113 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 205 205 205 62 62 62 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 65 65 65 201 199 182 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 246 246 246 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 246 246 246 48 48 48 46 46 46 43 43 43 41 41 41 38 38 38 -35 35 35 32 32 32 30 30 30 27 27 27 25 25 25 22 22 22 19 19 19 17 17 17 -15 15 15 13 13 13 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 12 12 12 15 15 15 17 17 17 -19 19 19 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32 35 35 35 38 38 38 -41 41 41 43 43 43 46 46 46 49 49 49 55 55 54 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 246 246 246 201 199 182 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 62 62 62 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 65 65 65 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 72 72 72 66 66 66 66 66 66 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 65 65 65 65 65 65 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 62 62 62 66 66 66 -66 66 66 66 66 66 65 65 65 72 72 72 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 62 62 62 -201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 205 205 205 66 66 66 -66 66 66 66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 230 228 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 66 66 66 66 66 66 93 93 92 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 -66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -157 154 144 66 66 66 66 66 66 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 49 49 49 46 46 46 43 43 43 40 40 40 38 38 38 -35 35 35 32 32 32 30 30 30 27 27 27 25 25 25 22 22 22 19 19 19 17 17 17 -15 15 15 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 17 17 17 -19 19 19 21 21 21 24 24 23 27 27 27 29 29 29 32 32 32 35 35 35 38 38 38 -40 40 40 43 43 43 46 46 46 48 48 48 52 52 52 224 222 210 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 224 222 210 65 65 65 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 89 88 84 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 205 205 205 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 235 234 229 66 66 66 66 66 66 66 66 66 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 65 65 65 201 199 182 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 62 62 62 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 -167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 -66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 110 108 101 66 66 66 66 66 66 72 72 72 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 130 128 124 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 110 108 101 66 66 66 -66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 58 58 58 66 66 66 93 93 92 235 234 229 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 89 88 84 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 224 222 210 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 48 48 48 46 46 46 43 43 43 40 40 40 37 37 37 -35 35 35 32 32 32 29 29 29 27 27 27 24 24 23 21 21 21 19 19 19 17 17 17 -14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 16 16 16 -19 19 19 21 21 21 24 24 23 26 26 26 29 29 29 32 32 32 35 35 35 37 37 37 -40 40 40 43 43 43 45 45 45 48 48 48 48 48 48 201 199 182 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 246 246 246 72 72 72 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 130 128 124 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 66 66 66 62 62 62 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 65 65 65 230 228 217 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 224 222 210 66 66 66 66 66 66 65 65 65 235 234 229 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 201 199 182 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 62 62 62 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 205 205 205 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 72 72 72 -201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 205 205 205 66 66 66 -66 66 66 66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 230 228 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 66 66 66 66 66 66 72 72 72 -235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 72 72 72 167 167 167 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 72 72 72 66 66 66 -66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -157 154 144 66 66 66 66 66 66 66 66 66 93 93 92 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 65 65 65 72 72 72 130 128 124 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 72 72 72 246 246 246 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 167 167 167 48 48 48 45 45 45 43 43 43 40 40 40 37 37 37 -34 34 34 32 32 32 29 29 29 26 26 26 24 24 23 21 21 21 19 19 19 16 16 16 -14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -3 3 3 4 4 4 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 16 16 16 -19 19 19 21 21 21 23 23 23 26 26 26 29 29 29 31 31 31 34 34 34 37 37 37 -39 39 39 42 42 42 45 45 45 48 48 48 49 49 49 157 154 144 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 89 88 84 66 66 66 66 66 66 66 66 66 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 72 72 72 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 201 199 182 66 66 66 66 66 66 66 66 66 224 222 210 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 224 222 210 65 65 65 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 62 62 62 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 -201 199 182 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 -66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 72 72 72 65 65 65 66 66 66 -205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 89 88 84 -65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 235 234 229 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 66 66 66 66 66 66 -66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 58 58 58 66 66 66 66 66 66 66 66 66 110 108 101 246 246 246 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 157 154 144 62 62 62 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 93 93 92 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 201 199 182 65 65 65 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 130 128 124 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 157 154 144 45 45 45 45 45 45 42 42 42 39 39 39 36 36 36 -34 34 34 31 31 31 29 29 29 26 26 26 23 23 23 21 21 21 19 19 19 16 16 16 -14 14 14 11 11 11 9 9 9 8 8 8 6 6 6 4 4 4 3 3 3 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 16 16 16 -19 19 19 20 20 20 23 23 23 25 25 25 29 29 29 31 31 31 33 33 33 36 36 36 -38 38 38 41 41 41 44 44 44 46 46 46 52 52 52 93 93 92 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 93 93 92 246 246 246 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 66 66 66 66 66 66 66 66 66 62 62 62 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 65 65 65 65 65 65 72 72 72 167 167 167 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 246 246 246 89 88 84 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 65 65 65 72 72 72 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 205 205 205 66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 66 66 66 66 66 66 66 66 66 62 62 62 -201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 66 66 66 -66 66 66 66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 230 228 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 66 66 66 66 66 66 66 66 66 -157 154 144 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 72 72 72 130 128 124 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 -66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 -157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 246 246 246 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 246 246 246 93 93 92 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 224 222 210 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 89 88 84 46 46 46 43 43 43 41 41 41 38 38 38 36 36 36 -33 33 33 30 30 30 29 29 29 25 25 25 23 23 23 20 20 20 19 19 19 16 16 16 -13 13 13 11 11 11 9 9 9 7 7 7 5 5 5 4 4 4 3 3 3 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 15 15 15 -17 17 17 20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32 35 35 35 -38 38 38 40 40 40 43 43 43 45 45 45 48 48 48 53 53 53 235 234 229 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 65 65 65 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 72 72 72 230 228 217 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 65 65 65 205 205 205 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 113 113 113 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 93 93 92 66 66 66 65 65 65 65 65 65 157 154 144 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 65 65 65 201 199 182 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 61 61 59 65 65 65 65 65 65 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 -201 199 182 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 66 66 66 -66 66 66 66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 65 65 65 66 66 66 66 66 66 66 66 66 65 65 65 -65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 110 108 101 65 65 65 66 66 66 66 66 66 -93 93 92 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -113 113 113 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 110 108 101 246 246 246 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 65 65 65 66 66 66 -66 66 66 66 66 66 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 72 72 72 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 130 128 124 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 167 167 167 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 72 72 72 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 65 65 65 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 230 228 217 45 45 45 44 44 44 43 43 43 40 40 40 38 38 38 35 35 35 -32 32 32 30 30 30 27 27 27 25 25 25 22 22 22 20 20 20 17 17 17 15 15 15 -13 13 13 11 11 11 9 9 9 7 7 7 5 5 5 4 4 4 2 2 2 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 3 3 3 5 5 5 7 7 7 9 9 9 10 10 10 13 13 13 15 15 15 -17 17 17 19 19 19 21 21 21 24 24 23 26 26 26 29 29 29 31 31 31 34 34 34 -37 37 37 39 39 39 42 42 42 44 44 44 48 48 48 49 49 49 157 154 144 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 87 85 74 -65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 -65 65 65 113 113 113 235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 93 93 92 66 66 66 66 66 66 66 66 66 62 62 62 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 65 65 65 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -157 154 144 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -205 205 205 65 65 65 65 65 65 62 62 62 58 58 58 89 88 84 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 72 72 72 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -66 66 66 66 66 66 66 66 66 62 62 62 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 58 58 58 -201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 66 66 66 -66 66 66 66 66 66 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -246 246 246 167 167 167 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 -65 65 65 65 65 65 66 66 66 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 224 222 210 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 62 62 62 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 65 65 65 66 66 66 66 66 66 -66 66 66 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 72 72 72 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 66 66 66 130 128 124 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 65 65 65 65 65 65 65 65 65 -65 65 65 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 65 65 65 62 62 62 65 65 65 65 65 65 65 65 65 62 62 62 65 65 65 -130 128 124 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -113 113 113 66 66 66 66 66 66 65 65 65 66 66 66 110 108 101 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 110 108 101 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 66 66 66 65 65 65 65 65 65 -87 85 74 205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 130 128 124 48 48 48 44 44 44 42 42 42 39 39 39 37 37 37 34 34 34 -31 31 31 29 29 29 26 26 26 24 24 23 21 21 21 19 19 19 17 17 17 15 15 15 -13 13 13 10 10 10 8 8 8 6 6 6 5 5 5 3 3 3 2 2 2 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 3 3 3 5 5 5 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 -16 16 16 19 19 19 21 21 21 23 23 23 26 26 26 29 29 29 31 31 31 33 33 33 -35 35 35 38 38 38 40 40 40 43 43 43 45 45 45 48 48 48 62 62 62 235 234 229 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 246 246 246 -201 199 182 157 154 144 113 113 113 110 108 101 93 93 92 110 108 101 130 128 124 157 154 144 -205 205 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 201 199 182 62 62 62 66 66 66 66 66 66 66 66 66 66 66 66 205 205 205 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 167 167 167 201 199 182 -167 167 167 167 167 167 201 199 182 167 167 167 201 199 182 167 167 167 205 205 205 246 246 246 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 201 199 182 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 -167 167 167 201 199 182 167 167 167 167 167 167 201 199 182 167 167 167 167 167 167 201 199 182 -167 167 167 167 167 167 201 199 182 167 167 167 167 167 167 201 199 182 167 167 167 167 167 167 -62 62 62 65 65 65 65 65 65 62 62 62 201 199 182 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 201 199 182 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 -62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 -167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 61 61 59 -65 65 65 65 65 65 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 62 62 62 65 65 65 65 65 65 62 62 62 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 224 222 210 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 -65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 110 108 101 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 66 66 66 65 65 65 65 65 65 -62 62 62 110 108 101 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 167 167 167 157 154 144 110 108 101 93 93 92 110 108 101 -110 108 101 130 128 124 167 167 167 235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 62 62 62 62 62 62 65 65 65 -65 65 65 65 65 65 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 66 66 66 65 65 65 62 62 62 62 62 62 62 62 62 65 65 65 62 62 62 -65 65 65 130 128 124 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -246 246 246 113 113 113 65 65 65 65 65 65 62 62 62 65 65 65 201 199 182 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 -167 167 167 130 128 124 93 93 92 110 108 101 110 108 101 113 113 113 157 154 144 201 199 182 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -235 234 229 58 58 58 46 46 46 43 43 43 40 40 40 38 38 38 35 35 35 33 33 33 -30 30 30 29 29 29 25 25 25 23 23 23 21 21 21 19 19 19 16 16 16 14 14 14 -12 12 12 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 3 3 3 4 4 4 6 6 6 8 8 8 9 9 9 11 11 11 13 13 13 -16 16 16 19 19 19 20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32 -34 34 34 37 37 37 39 39 39 42 42 42 44 44 44 46 46 46 46 46 46 113 113 113 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -235 234 229 72 72 72 65 65 65 65 65 65 66 66 66 66 66 66 62 62 62 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 -58 58 58 58 58 58 62 62 62 62 62 62 62 62 62 58 58 58 93 93 92 246 246 246 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 -65 65 65 62 62 62 62 62 62 58 58 58 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 -62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 65 65 65 -201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 -62 62 62 62 62 62 62 62 62 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 62 62 62 62 62 62 62 62 62 65 65 65 62 62 62 62 62 62 -62 62 62 62 62 62 62 62 62 72 72 72 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 230 228 217 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 -62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 113 113 113 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 62 62 62 62 62 62 62 62 62 -62 62 62 58 58 58 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 205 205 205 62 62 62 62 62 62 62 62 62 62 62 62 -62 62 62 61 61 59 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 -65 65 65 65 65 65 157 154 144 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 246 246 246 110 108 101 62 62 62 62 62 62 65 65 65 72 72 72 235 234 229 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -110 108 101 46 46 46 44 44 44 42 42 42 39 39 39 37 37 37 34 34 34 32 32 32 -29 29 29 27 27 27 25 25 25 22 22 22 20 20 20 19 19 19 16 16 16 13 13 13 -11 11 11 9 9 9 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 -15 15 15 17 17 17 19 19 19 21 21 21 24 24 23 26 26 26 29 29 29 31 31 31 -33 33 33 35 35 35 38 38 38 40 40 40 42 42 42 45 45 45 46 46 46 48 48 48 -130 128 124 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 -93 93 92 66 66 66 66 66 66 65 65 65 65 65 65 65 65 65 66 66 66 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 65 65 65 -62 62 62 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 130 128 124 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 -62 62 62 62 62 62 62 62 62 62 62 62 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 55 55 54 62 62 62 61 61 59 61 61 59 58 58 58 -61 61 59 58 58 58 61 61 59 61 61 59 62 62 62 62 62 62 58 58 58 62 62 62 -201 199 182 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 -62 62 62 62 62 62 62 62 62 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 -62 62 62 62 62 62 62 62 62 61 61 59 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 224 222 210 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 -62 62 62 62 62 62 62 62 62 62 62 62 61 61 59 110 108 101 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 62 62 62 61 61 59 61 61 59 -61 61 59 62 62 62 58 58 58 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 72 72 72 58 58 58 62 62 62 61 61 59 61 61 59 -61 61 59 58 58 58 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 62 62 62 62 62 62 58 58 58 62 62 62 61 61 59 61 61 59 61 61 59 -58 58 58 62 62 62 58 58 58 167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 93 93 92 62 62 62 62 62 62 62 62 62 93 93 92 -235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 130 128 124 -46 46 46 44 44 44 43 43 43 40 40 40 38 38 38 35 35 35 33 33 33 31 31 31 -29 29 29 26 26 26 24 24 23 21 21 21 19 19 19 17 17 17 15 15 15 13 13 13 -11 11 11 9 9 9 7 7 7 5 5 5 4 4 4 3 3 3 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 2 2 2 3 3 3 5 5 5 6 6 6 8 8 8 10 10 10 12 12 12 -14 14 14 16 16 16 19 19 19 20 20 20 23 23 23 25 25 25 27 27 27 29 29 29 -32 32 32 34 34 34 36 36 36 38 38 38 40 40 40 43 43 43 45 45 45 48 48 48 -52 52 52 93 93 92 230 228 217 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 89 88 84 -65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 201 199 182 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 167 167 167 58 58 58 58 58 58 -58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 55 55 54 -130 128 124 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 -62 62 62 58 58 58 58 58 58 62 62 62 201 199 182 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 201 199 182 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 62 62 62 -167 167 167 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 58 58 58 -58 58 58 58 58 58 58 58 58 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 58 58 58 62 62 62 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 230 228 217 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 110 108 101 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 61 61 59 66 66 66 130 128 124 246 246 246 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -246 246 246 167 167 167 62 62 62 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -157 154 144 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 58 58 58 55 55 54 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 235 234 229 89 88 84 58 58 58 62 62 62 62 62 62 -72 72 72 201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 230 228 217 93 93 92 48 48 48 -45 45 45 43 43 43 40 40 40 38 38 38 36 36 36 34 34 34 32 32 32 29 29 29 -27 27 27 25 25 25 23 23 23 20 20 20 19 19 19 16 16 16 14 14 14 12 12 12 -10 10 10 8 8 8 6 6 6 5 5 5 3 3 3 2 2 2 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 2 2 2 3 3 3 4 4 4 6 6 6 8 8 8 9 9 9 11 11 11 -13 13 13 15 15 15 17 17 17 20 20 20 21 21 21 24 24 23 26 26 26 29 29 29 -30 30 30 32 32 32 35 35 35 37 37 37 39 39 39 41 41 41 43 43 43 45 45 45 -48 48 48 49 49 49 52 52 52 130 128 124 205 205 205 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 246 246 246 167 167 167 110 108 101 58 58 58 58 58 58 -62 62 62 62 62 62 62 62 62 65 65 65 65 65 65 65 65 65 65 65 65 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 235 234 229 167 167 167 89 88 84 52 52 52 53 53 53 55 55 54 -55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 -53 53 53 72 72 72 167 167 167 235 234 229 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 224 222 210 -58 58 58 58 58 58 58 58 58 58 58 58 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 205 205 205 52 52 52 55 55 54 58 58 58 55 55 54 58 58 58 -55 55 54 58 58 58 55 55 54 55 55 54 58 58 58 55 55 54 58 58 58 58 58 58 -201 199 182 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 58 58 58 -58 58 58 58 58 58 58 58 58 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 157 154 144 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 55 55 54 58 58 58 167 167 167 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 224 222 210 53 53 53 58 58 58 58 58 58 58 58 58 58 58 58 -58 58 58 58 58 58 58 58 58 58 58 58 55 55 54 110 108 101 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 93 93 92 55 55 54 58 58 58 55 55 54 -58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 72 72 72 157 154 144 224 222 210 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 167 167 167 -72 72 72 58 58 58 58 58 58 58 58 58 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 55 55 54 246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -130 128 124 58 58 58 58 58 58 55 55 54 58 58 58 55 55 54 58 58 58 55 55 54 -55 55 54 55 55 54 58 58 58 55 55 54 58 58 58 167 167 167 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 235 234 229 72 72 72 58 58 58 58 58 58 -58 58 58 58 58 58 93 93 92 201 199 182 235 234 229 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 205 205 205 113 113 113 52 52 52 48 48 48 45 45 45 -43 43 43 41 41 41 39 39 39 37 37 37 35 35 35 32 32 32 30 30 30 29 29 29 -26 26 26 24 24 23 21 21 21 19 19 19 17 17 17 15 15 15 13 13 13 11 11 11 -9 9 9 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 10 10 10 -12 12 12 14 14 14 16 16 16 19 19 19 20 20 20 22 22 22 25 25 25 27 27 27 -29 29 29 31 31 31 33 33 33 35 35 35 37 37 37 39 39 39 41 41 41 43 43 43 -44 44 44 46 46 46 46 46 46 46 46 46 48 48 48 53 53 53 110 108 101 130 128 124 -167 167 167 167 167 167 167 167 167 205 205 205 224 222 210 205 205 205 167 167 167 167 167 167 -157 154 144 130 128 124 93 93 92 58 58 58 65 65 65 58 58 58 62 62 62 62 62 62 -62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 65 65 65 58 58 58 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 205 205 157 154 144 130 128 124 -157 154 144 130 128 124 157 154 144 130 128 124 130 128 124 157 154 144 130 128 124 130 128 124 -110 108 101 72 72 72 55 55 54 53 53 53 53 53 53 55 55 54 53 53 53 53 53 53 -53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 -53 53 53 53 53 53 53 53 53 53 53 53 89 88 84 113 113 113 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 113 113 113 -58 58 58 53 53 53 53 53 53 58 58 58 113 113 113 130 128 124 130 128 124 130 128 124 -130 128 124 130 128 124 113 113 113 53 53 53 55 55 54 53 53 53 55 55 54 55 55 54 -55 55 54 53 53 53 55 55 54 55 55 54 53 53 53 53 53 53 53 53 53 49 49 49 -113 113 113 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 113 113 113 53 53 53 -55 55 54 53 53 53 58 58 58 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -130 128 124 93 93 92 53 53 53 53 53 53 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 55 55 54 55 55 54 53 53 53 113 113 113 130 128 124 130 128 124 130 128 124 -130 128 124 130 128 124 113 113 113 53 53 53 53 53 53 53 53 53 55 55 54 55 55 54 -55 55 54 55 55 54 53 53 53 55 55 54 53 53 53 72 72 72 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 66 66 66 55 55 54 53 53 53 55 55 54 -55 55 54 53 53 53 53 53 53 55 55 54 55 55 54 55 55 54 53 53 53 52 52 52 -72 72 72 113 113 113 130 128 124 167 167 167 167 167 167 201 199 182 224 222 210 205 205 205 -205 205 205 167 167 167 167 167 167 130 128 124 113 113 113 72 72 72 53 53 53 53 53 53 -55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 55 55 54 -55 55 54 55 55 54 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 -89 88 84 53 53 53 53 53 53 55 55 54 53 53 53 55 55 54 53 53 53 55 55 54 -55 55 54 55 55 54 53 53 53 55 55 54 55 55 54 62 62 62 130 128 124 130 128 124 -130 128 124 130 128 124 130 128 124 130 128 124 130 128 124 113 113 113 55 55 54 58 58 58 -53 53 53 58 58 58 58 58 58 53 53 53 55 55 54 93 93 92 130 128 124 157 154 144 -167 167 167 167 167 167 205 205 205 224 222 210 224 222 210 167 167 167 167 167 167 167 167 167 -130 128 124 93 93 92 55 55 54 48 48 48 48 48 48 46 46 46 44 44 44 43 43 43 -41 41 41 39 39 39 37 37 37 35 35 35 33 33 33 31 31 31 29 29 29 26 26 26 -25 25 25 22 22 22 20 20 20 19 19 19 16 16 16 14 14 14 12 12 12 10 10 10 -9 9 9 7 7 7 5 5 5 4 4 4 3 3 3 1 1 1 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 2 2 2 3 3 3 5 5 5 6 6 6 8 8 8 10 10 10 -11 11 11 13 13 13 15 15 15 17 17 17 19 19 19 21 21 21 23 23 23 25 25 25 -27 27 27 29 29 29 31 31 31 33 33 33 35 35 35 37 37 37 39 39 39 40 40 40 -42 42 42 43 43 43 45 45 45 46 46 46 48 48 48 48 48 48 48 48 48 52 52 52 -49 49 49 55 55 54 58 58 58 58 58 58 53 53 53 55 55 54 58 58 58 58 58 58 -53 53 53 58 58 58 55 55 54 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 65 65 65 205 205 205 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 62 62 62 65 65 65 -62 62 62 62 62 62 58 58 58 62 62 62 62 62 62 53 53 53 58 58 58 58 58 58 -55 55 54 55 55 54 53 53 53 53 53 53 52 52 52 52 52 52 52 52 52 51 51 50 -51 51 50 49 49 49 51 51 50 49 49 49 51 51 50 51 51 50 51 51 50 51 51 50 -49 49 49 51 51 50 51 51 50 49 49 49 49 49 49 52 52 52 55 55 54 58 58 58 -58 58 58 58 58 58 58 58 58 58 58 58 62 62 62 58 58 58 58 58 58 62 62 62 -58 58 58 58 58 58 62 62 62 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 -53 53 53 53 53 53 53 53 53 52 52 52 53 53 53 58 58 58 58 58 58 55 55 54 -55 55 54 53 53 53 49 49 49 52 52 52 51 51 50 52 52 52 51 51 50 51 51 50 -51 51 50 52 52 52 51 51 50 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 -49 49 49 53 53 53 58 58 58 58 58 58 58 58 58 53 53 53 53 53 53 52 52 52 -53 53 53 52 52 52 52 52 52 53 53 53 58 58 58 58 58 58 58 58 58 58 58 58 -53 53 53 53 53 53 52 52 52 53 53 53 52 52 52 52 52 52 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 55 55 54 58 58 58 58 58 58 -58 58 58 58 58 58 58 58 58 53 53 53 53 53 53 52 52 52 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 53 53 53 53 53 53 53 53 53 58 58 58 -58 58 58 55 55 54 58 58 58 53 53 53 53 53 53 52 52 52 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 53 53 53 52 52 52 52 52 52 -52 52 52 52 52 52 53 53 53 55 55 54 53 53 53 52 52 52 52 52 52 53 53 53 -53 53 53 55 55 54 58 58 58 58 58 58 55 55 54 55 55 54 53 53 53 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 53 53 53 58 58 58 53 53 53 58 58 58 53 53 53 -52 52 52 52 52 52 52 52 52 51 51 50 52 52 52 52 52 52 52 52 52 52 52 52 -52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 53 53 53 58 58 58 -55 55 54 58 58 58 58 58 58 58 58 58 53 53 53 53 53 53 53 53 53 53 53 53 -53 53 53 52 52 52 52 52 52 53 53 53 53 53 53 53 53 53 53 53 53 53 53 53 -58 58 58 55 55 54 53 53 53 52 52 52 52 52 52 53 53 53 53 53 53 49 49 49 -51 51 50 51 51 50 48 48 48 46 46 46 45 45 45 43 43 43 42 42 42 40 40 40 -39 39 39 37 37 37 35 35 35 33 33 33 31 31 31 29 29 29 27 27 27 25 25 25 -23 23 23 21 21 21 19 19 19 17 17 17 15 15 15 13 13 13 11 11 11 9 9 9 -8 8 8 6 6 6 5 5 5 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 -10 10 10 12 12 12 14 14 14 16 16 16 19 19 19 20 20 20 21 21 21 24 24 23 -25 25 25 27 27 27 29 29 29 31 31 31 33 33 33 35 35 35 37 37 37 38 38 38 -40 40 40 41 41 41 43 43 43 44 44 44 45 45 45 46 46 46 46 46 46 48 48 48 -48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 52 52 52 52 52 52 52 52 52 -53 53 53 53 53 53 55 55 54 55 55 54 55 55 54 55 55 54 58 58 58 58 58 58 -58 58 58 58 58 58 61 61 59 62 62 62 62 62 62 62 62 62 58 58 58 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 246 246 246 201 199 182 62 62 62 58 58 58 -62 62 62 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 55 55 54 53 53 53 -53 53 53 52 52 52 52 52 52 51 51 50 51 51 50 49 49 49 49 49 49 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 49 49 49 48 48 48 49 49 49 48 48 48 48 48 48 -49 49 49 49 49 49 49 49 49 52 52 52 49 49 49 49 49 49 52 52 52 49 49 49 -49 49 49 52 52 52 49 49 49 49 49 49 52 52 52 52 52 52 49 49 49 52 52 52 -49 49 49 52 52 52 49 49 49 49 49 49 49 49 49 48 48 48 49 49 49 49 49 49 -48 48 48 49 49 49 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -49 49 49 48 48 48 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 -49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 51 51 50 49 49 49 -49 49 49 52 52 52 49 49 49 52 52 52 49 49 49 52 52 52 49 49 49 52 52 52 -49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 48 48 48 46 46 46 -48 48 48 46 46 46 45 45 45 44 44 44 43 43 43 41 41 41 40 40 40 38 38 38 -37 37 37 35 35 35 33 33 33 31 31 31 29 29 29 27 27 27 25 25 25 24 24 23 -21 21 21 20 20 20 19 19 19 16 16 16 14 14 14 12 12 12 10 10 10 9 9 9 -7 7 7 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 3 3 3 3 3 3 5 5 5 6 6 6 8 8 8 -9 9 9 11 11 11 13 13 13 15 15 15 16 16 16 19 19 19 20 20 20 22 22 22 -24 24 23 26 26 26 27 27 27 29 29 29 31 31 31 33 33 33 35 35 35 36 36 36 -37 37 37 39 39 39 40 40 40 41 41 41 43 43 43 43 43 43 44 44 44 45 45 45 -45 45 45 46 46 46 48 48 48 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 -52 52 52 52 52 52 53 53 53 53 53 53 55 55 54 55 55 54 55 55 54 55 55 54 -58 58 58 58 58 58 58 58 58 58 58 58 61 61 59 62 62 62 62 62 62 205 205 205 -246 246 246 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 58 58 58 58 58 58 -58 58 58 58 58 58 58 58 58 55 55 54 53 53 53 53 53 53 52 52 52 53 53 53 -49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 48 48 48 46 46 46 46 46 46 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 46 46 46 46 46 46 46 46 46 -46 46 46 48 48 48 46 46 46 48 48 48 48 48 48 48 48 48 46 46 46 49 49 49 -49 49 49 48 48 48 49 49 49 49 49 49 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 46 46 46 48 48 48 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -48 48 48 48 48 48 46 46 46 48 48 48 46 46 46 48 48 48 46 46 46 48 48 48 -48 48 48 48 48 48 46 46 46 48 48 48 46 46 46 48 48 48 46 46 46 48 48 48 -48 48 48 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 48 48 48 46 46 46 48 48 48 -48 48 48 48 48 48 48 48 48 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 46 46 46 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 46 46 46 46 46 46 46 46 46 -46 46 46 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 46 46 46 46 46 46 -46 46 46 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 -46 46 46 46 46 46 46 46 46 46 46 46 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 46 46 46 46 46 46 46 46 46 45 45 45 45 45 45 -44 44 44 43 43 43 43 43 43 41 41 41 40 40 40 39 39 39 37 37 37 36 36 36 -34 34 34 33 33 33 31 31 31 29 29 29 27 27 27 26 26 26 24 24 23 22 22 22 -20 20 20 19 19 19 16 16 16 15 15 15 13 13 13 11 11 11 9 9 9 8 8 8 -6 6 6 5 5 5 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 7 7 7 -8 8 8 10 10 10 12 12 12 13 13 13 15 15 15 17 17 17 19 19 19 20 20 20 -22 22 22 24 24 23 26 26 26 27 27 27 29 29 29 31 31 31 32 32 32 34 34 34 -35 35 35 37 37 37 38 38 38 39 39 39 40 40 40 41 41 41 42 42 42 42 42 42 -43 43 43 43 43 43 44 44 44 45 45 45 45 45 45 46 46 46 48 48 48 48 48 48 -48 48 48 49 49 49 51 51 50 51 51 50 52 52 52 53 53 53 53 53 53 55 55 54 -55 55 54 55 55 54 58 58 58 58 58 58 58 58 58 58 58 58 55 55 54 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 58 58 58 58 58 58 -58 58 58 58 58 58 55 55 54 53 53 53 53 53 53 52 52 52 49 49 49 49 49 49 -48 48 48 48 48 48 48 48 48 46 46 46 45 45 45 45 45 45 44 44 44 43 43 43 -43 43 43 43 43 43 43 43 43 42 42 42 42 42 42 42 42 42 42 42 42 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 -43 43 43 44 44 44 44 44 44 44 44 44 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 44 44 44 44 44 44 43 43 43 43 43 43 43 43 43 43 43 43 -44 44 44 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 43 43 43 43 43 43 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 -43 43 43 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 -44 44 44 44 44 44 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 44 44 44 44 44 44 44 44 44 -44 44 44 44 44 44 44 44 44 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 -44 44 44 43 43 43 44 44 44 44 44 44 44 44 44 43 43 43 43 43 43 43 43 43 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 -44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 -43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 44 44 44 45 45 45 45 45 45 -45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 -45 45 45 45 45 45 44 44 44 44 44 44 43 43 43 44 44 44 43 43 43 42 42 42 -42 42 42 41 41 41 40 40 40 39 39 39 38 38 38 36 36 36 35 35 35 34 34 34 -32 32 32 31 31 31 29 29 29 27 27 27 26 26 26 24 24 23 22 22 22 20 20 20 -19 19 19 17 17 17 15 15 15 13 13 13 12 12 12 10 10 10 8 8 8 7 7 7 -5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 5 5 5 6 6 6 -7 7 7 9 9 9 10 10 10 12 12 12 14 14 14 16 16 16 17 17 17 19 19 19 -20 20 20 22 22 22 24 24 23 25 25 25 27 27 27 29 29 29 30 30 30 31 31 31 -33 33 33 34 34 34 35 35 35 36 36 36 37 37 37 38 38 38 39 39 39 39 39 39 -40 40 40 41 41 41 42 42 42 42 42 42 43 43 43 44 44 44 45 45 45 45 45 45 -46 46 46 48 48 48 48 48 48 49 49 49 49 49 49 51 51 50 52 52 52 52 52 52 -53 53 53 55 55 54 55 55 54 55 55 54 55 55 54 58 58 58 58 58 58 201 199 182 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 58 58 58 58 58 58 -53 53 53 53 53 53 53 53 53 53 53 53 52 52 52 49 49 49 48 48 48 48 48 48 -46 46 46 45 45 45 44 44 44 43 43 43 43 43 43 42 42 42 42 42 42 41 41 41 -41 41 41 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 -40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 -41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 43 43 43 43 43 43 43 43 43 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 41 41 41 41 41 41 41 41 41 42 42 42 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 42 42 42 -42 42 42 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 40 40 40 -40 40 40 40 40 40 40 40 40 40 40 40 41 41 41 41 41 41 41 41 41 41 41 41 -42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 42 42 42 41 41 41 41 41 41 41 41 41 41 41 41 -40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 -40 40 40 40 40 40 40 40 40 40 40 40 41 41 41 41 41 41 41 41 41 41 41 41 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 40 40 40 40 40 40 40 40 40 -41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 41 41 41 41 41 41 40 40 40 40 40 40 39 39 39 -39 39 39 38 38 38 37 37 37 36 36 36 35 35 35 34 34 34 33 33 33 31 31 31 -30 30 30 29 29 29 27 27 27 25 25 25 24 24 23 22 22 22 20 20 20 19 19 19 -17 17 17 16 16 16 14 14 14 12 12 12 10 10 10 9 9 9 7 7 7 6 6 6 -4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 -6 6 6 8 8 8 9 9 9 11 11 11 13 13 13 14 14 14 16 16 16 17 17 17 -19 19 19 20 20 20 22 22 22 23 23 23 25 25 25 26 26 26 29 29 29 29 29 29 -30 30 30 32 32 32 33 33 33 34 34 34 35 35 35 35 35 35 36 36 36 37 37 37 -37 37 37 38 38 38 39 39 39 40 40 40 40 40 40 41 41 41 42 42 42 43 43 43 -44 44 44 45 45 45 46 46 46 46 46 46 48 48 48 48 48 48 49 49 49 51 51 50 -51 51 50 52 52 52 53 53 53 53 53 53 55 55 54 55 55 54 52 52 52 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 53 53 53 53 53 53 -53 53 53 53 53 53 49 49 49 49 49 49 48 48 48 48 48 48 46 46 46 45 45 45 -44 44 44 43 43 43 42 42 42 41 41 41 40 40 40 40 40 40 39 39 39 39 39 39 -38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 38 38 38 38 38 38 -38 38 38 38 38 38 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 39 39 39 39 39 39 -39 39 39 39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 39 39 39 39 39 39 -39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 -38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 37 37 37 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 -38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 40 40 40 40 40 40 40 40 40 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 37 37 37 37 37 37 -36 36 36 35 35 35 35 35 35 34 34 34 33 33 33 32 32 32 30 30 30 29 29 29 -29 29 29 26 26 26 25 25 25 23 23 23 22 22 22 20 20 20 19 19 19 17 17 17 -16 16 16 14 14 14 12 12 12 11 11 11 9 9 9 8 8 8 6 6 6 5 5 5 -4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 -5 5 5 7 7 7 8 8 8 10 10 10 11 11 11 13 13 13 14 14 14 16 16 16 -17 17 17 19 19 19 20 20 20 21 21 21 23 23 23 24 24 23 25 25 25 27 27 27 -29 29 29 29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 33 33 33 34 34 34 -35 35 35 35 35 35 36 36 36 37 37 37 38 38 38 39 39 39 40 40 40 40 40 40 -42 42 42 42 42 42 43 43 43 44 44 44 45 45 45 46 46 46 48 48 48 48 48 48 -48 48 48 49 49 49 51 51 50 51 51 50 52 52 52 52 52 52 53 53 53 201 199 182 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 201 199 182 53 53 53 53 53 53 -52 52 52 49 49 49 48 48 48 48 48 48 45 45 45 45 45 45 43 43 43 43 43 43 -42 42 42 40 40 40 40 40 40 39 39 39 38 38 38 37 37 37 37 37 37 36 36 36 -35 35 35 35 35 35 35 35 35 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 34 34 34 34 34 34 34 34 34 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 37 37 37 37 37 37 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -37 37 37 36 36 36 36 36 36 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 -36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 -36 36 36 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 36 36 36 36 36 36 -36 36 36 36 36 36 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 -36 36 36 36 36 36 36 36 36 36 36 36 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 -36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 34 34 34 34 34 34 34 34 34 34 34 34 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 36 36 36 36 36 36 37 37 37 -37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 -36 36 36 36 36 36 36 36 36 35 35 35 35 35 35 35 35 35 35 35 35 34 34 34 -33 33 33 33 33 33 32 32 32 31 31 31 30 30 30 29 29 29 29 29 29 27 27 27 -25 25 25 24 24 23 23 23 23 21 21 21 20 20 20 19 19 19 17 17 17 16 16 16 -14 14 14 13 13 13 11 11 11 10 10 10 8 8 8 7 7 7 5 5 5 4 4 4 -3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 3 3 3 3 3 3 -4 4 4 6 6 6 7 7 7 8 8 8 10 10 10 11 11 11 13 13 13 14 14 14 -16 16 16 17 17 17 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 25 25 25 -26 26 26 27 27 27 29 29 29 29 29 29 29 29 29 30 30 30 31 31 31 31 31 31 -32 32 32 33 33 33 33 33 33 35 35 35 35 35 35 36 36 36 37 37 37 38 38 38 -39 39 39 40 40 40 41 41 41 42 42 42 43 43 43 43 43 43 44 44 44 45 45 45 -46 46 46 48 48 48 48 48 48 48 48 48 49 49 49 49 49 49 45 45 45 205 205 205 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 167 167 167 49 49 49 49 49 49 -48 48 48 48 48 48 46 46 46 45 45 45 43 43 43 42 42 42 41 41 41 40 40 40 -39 39 39 38 38 38 37 37 37 36 36 36 35 35 35 35 35 35 34 34 34 33 33 33 -33 33 33 32 32 32 32 32 32 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 34 34 34 34 -34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 -32 32 32 32 32 32 32 32 32 31 31 31 31 31 31 31 31 31 31 31 31 32 32 32 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 34 34 34 -34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 -34 34 34 33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 32 32 32 31 31 31 -31 31 31 30 30 30 29 29 29 29 29 29 29 29 29 27 27 27 26 26 26 25 25 25 -23 23 23 22 22 22 21 21 21 20 20 20 19 19 19 17 17 17 16 16 16 14 14 14 -13 13 13 11 11 11 10 10 10 8 8 8 7 7 7 6 6 6 4 4 4 3 3 3 -2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 -4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 10 10 10 11 11 11 12 12 12 -14 14 14 15 15 15 16 16 16 19 19 19 19 19 19 20 20 20 21 21 21 22 22 22 -23 23 23 25 25 25 25 25 25 26 26 26 27 27 27 27 27 27 29 29 29 29 29 29 -29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 34 34 34 35 35 35 35 35 35 -36 36 36 37 37 37 38 38 38 39 39 39 40 40 40 41 41 41 42 42 42 43 43 43 -43 43 43 44 44 44 45 45 45 46 46 46 46 46 46 48 48 48 46 46 46 130 128 124 -167 167 167 167 167 167 167 167 167 167 167 167 167 167 167 130 128 124 53 53 53 46 46 46 -45 45 45 44 44 44 43 43 43 42 42 42 41 41 41 40 40 40 39 39 39 38 38 38 -37 37 37 35 35 35 35 35 35 34 34 34 33 33 33 32 32 32 31 31 31 31 31 31 -30 30 30 30 30 30 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -30 30 30 30 30 30 30 30 30 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -29 29 29 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 31 31 31 31 31 31 31 31 31 31 31 31 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 -30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 30 30 30 30 30 30 30 30 30 30 30 30 29 29 29 29 29 29 -29 29 29 27 27 27 27 27 27 26 26 26 25 25 25 25 25 25 23 23 23 22 22 22 -21 21 21 20 20 20 19 19 19 17 17 17 16 16 16 15 15 15 13 13 13 12 12 12 -11 11 11 10 10 10 8 8 8 7 7 7 6 6 6 5 5 5 3 3 3 3 3 3 -2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 -3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 10 10 10 11 11 11 -12 12 12 13 13 13 15 15 15 16 16 16 17 17 17 19 19 19 19 19 19 20 20 20 -21 21 21 22 22 22 23 23 23 24 24 23 25 25 25 25 25 25 25 25 25 26 26 26 -26 26 26 27 27 27 29 29 29 29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 -34 34 34 35 35 35 36 36 36 37 37 37 37 37 37 38 38 38 39 39 39 40 40 40 -41 41 41 42 42 42 42 42 42 43 43 43 44 44 44 44 44 44 45 45 45 46 46 46 -46 46 46 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 45 45 45 43 43 43 -43 43 43 42 42 42 41 41 41 39 39 39 38 38 38 37 37 37 36 36 36 35 35 35 -34 34 34 33 33 33 32 32 32 31 31 31 30 30 30 30 30 30 29 29 29 29 29 29 -27 27 27 27 27 27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 27 27 27 -27 27 27 27 27 27 27 27 27 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 -26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 27 27 27 27 27 27 27 27 27 26 26 26 26 26 26 -25 25 25 25 25 25 25 25 25 24 24 23 23 23 23 22 22 22 21 21 21 20 20 20 -19 19 19 19 19 19 17 17 17 16 16 16 15 15 15 13 13 13 12 12 12 11 11 11 -9 9 9 8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 -10 10 10 11 11 11 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 19 19 19 -19 19 19 20 20 20 20 20 20 21 21 21 22 22 22 22 22 22 23 23 23 23 23 23 -24 24 23 25 25 25 26 26 26 26 26 26 27 27 27 29 29 29 29 29 29 30 30 30 -31 31 31 32 32 32 33 33 33 34 34 34 35 35 35 36 36 36 37 37 37 37 37 37 -38 38 38 39 39 39 40 40 40 40 40 40 41 41 41 42 42 42 42 42 42 42 42 42 -42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 41 41 41 41 41 41 -40 40 40 39 39 39 38 38 38 37 37 37 36 36 36 35 35 35 33 33 33 32 32 32 -31 31 31 30 30 30 30 30 30 29 29 29 29 29 29 27 27 27 26 26 26 25 25 25 -25 25 25 24 24 23 24 24 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 24 24 23 24 24 23 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 26 26 26 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 24 24 23 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 24 24 23 -24 24 23 24 24 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 -24 24 23 24 24 23 24 24 23 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 -25 25 25 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 25 25 25 25 25 25 -25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 24 24 23 24 24 23 23 23 23 -23 23 23 22 22 22 22 22 22 21 21 21 20 20 20 20 20 20 19 19 19 19 19 19 -17 17 17 16 16 16 15 15 15 14 14 14 13 13 13 11 11 11 10 10 10 9 9 9 -8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 5 5 5 6 6 6 8 8 8 -9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 -17 17 17 17 17 17 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 21 21 21 -21 21 21 22 22 22 23 23 23 24 24 23 25 25 25 26 26 26 27 27 27 29 29 29 -29 29 29 30 30 30 30 30 30 31 31 31 32 32 32 33 33 33 34 34 34 35 35 35 -35 35 35 36 36 36 37 37 37 38 38 38 38 38 38 39 39 39 39 39 39 39 39 39 -39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 -37 37 37 37 37 37 35 35 35 35 35 35 33 33 33 32 32 32 31 31 31 30 30 30 -29 29 29 29 29 29 27 27 27 26 26 26 25 25 25 24 24 23 23 23 23 23 23 23 -22 22 22 21 21 21 21 21 21 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 21 21 21 -21 21 21 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 23 23 23 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 -22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 -22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 -22 22 22 22 22 22 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22 -22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 -22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 -22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 -22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 -22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 21 21 21 -21 21 21 21 21 21 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 -21 21 21 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 23 23 23 23 23 23 -23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 -23 23 23 22 22 22 22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21 -20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 17 17 17 17 17 17 16 16 16 -15 15 15 14 14 14 13 13 13 12 12 12 11 11 11 10 10 10 9 9 9 8 8 8 -6 6 6 5 5 5 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 4 4 4 5 5 5 6 6 6 -7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 -15 15 15 15 15 15 16 16 16 16 16 16 17 17 17 19 19 19 19 19 19 19 19 19 -19 19 19 20 20 20 20 20 20 21 21 21 22 22 22 23 23 23 24 24 23 25 25 25 -26 26 26 27 27 27 29 29 29 29 29 29 30 30 30 30 30 30 31 31 31 32 32 32 -33 33 33 34 34 34 34 34 34 35 35 35 35 35 35 36 36 36 36 36 36 36 36 36 -36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 35 35 35 -35 35 35 34 34 34 33 33 33 32 32 32 31 31 31 30 30 30 29 29 29 27 27 27 -26 26 26 25 25 25 24 24 23 23 23 23 23 23 23 21 21 21 21 21 21 20 20 20 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 -20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 -19 19 19 19 19 19 17 17 17 16 16 16 16 16 16 15 15 15 15 15 15 14 14 14 -13 13 13 12 12 12 11 11 11 10 10 10 9 9 9 8 8 8 7 7 7 6 6 6 -5 5 5 4 4 4 3 3 3 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 4 4 4 5 5 5 -6 6 6 7 7 7 8 8 8 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 -13 13 13 13 13 13 14 14 14 14 14 14 15 15 15 16 16 16 16 16 16 16 16 16 -16 16 16 17 17 17 19 19 19 19 19 19 20 20 20 20 20 20 21 21 21 22 22 22 -23 23 23 24 24 23 25 25 25 26 26 26 27 27 27 29 29 29 29 29 29 29 29 29 -30 30 30 31 31 31 32 32 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 -33 33 33 33 33 33 33 33 33 34 34 34 34 34 34 33 33 33 33 33 33 33 33 33 -32 32 32 31 31 31 30 30 30 29 29 29 29 29 29 27 27 27 26 26 26 25 25 25 -24 24 23 23 23 23 21 21 21 21 21 21 20 20 20 19 19 19 19 19 19 17 17 17 -17 17 17 16 16 16 16 16 16 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 19 19 19 19 19 19 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 15 15 15 15 15 15 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 -19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 -17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 16 16 16 -16 16 16 16 16 16 15 15 15 14 14 14 14 14 14 13 13 13 13 13 13 12 12 12 -11 11 11 10 10 10 9 9 9 8 8 8 8 8 8 7 7 7 6 6 6 5 5 5 -4 4 4 3 3 3 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 2 2 2 3 3 3 4 4 4 -4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 8 8 8 9 9 9 10 10 10 -10 10 10 11 11 11 11 11 11 12 12 12 13 13 13 13 13 13 13 13 13 14 14 14 -14 14 14 15 15 15 16 16 16 16 16 16 17 17 17 19 19 19 19 19 19 20 20 20 -21 21 21 21 21 21 23 23 23 23 23 23 24 24 23 25 25 25 26 26 26 27 27 27 -27 27 27 29 29 29 29 29 29 30 30 30 30 30 30 31 31 31 31 31 31 31 31 31 -31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 30 30 30 -29 29 29 29 29 29 29 29 29 27 27 27 26 26 26 25 25 25 24 24 23 22 22 22 -21 21 21 20 20 20 19 19 19 19 19 19 17 17 17 16 16 16 16 16 16 15 15 15 -14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 -14 14 14 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 15 15 15 14 14 14 14 14 14 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 -14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 -15 15 15 15 15 15 15 15 15 15 15 15 14 14 14 14 14 14 14 14 14 14 14 14 -13 13 13 13 13 13 13 13 13 12 12 12 11 11 11 11 11 11 10 10 10 10 10 10 -9 9 9 8 8 8 8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 4 4 4 -3 3 3 2 2 2 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 3 3 3 -3 3 3 4 4 4 4 4 4 5 5 5 6 6 6 6 6 6 7 7 7 8 8 8 -9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 -12 12 12 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 16 16 16 17 17 17 -19 19 19 19 19 19 20 20 20 21 21 21 21 21 21 22 22 22 23 23 23 24 24 23 -25 25 25 25 25 25 26 26 26 27 27 27 27 27 27 29 29 29 29 29 29 29 29 29 -29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 27 27 27 -27 27 27 26 26 26 25 25 25 25 25 25 23 23 23 22 22 22 21 21 21 20 20 20 -19 19 19 19 19 19 17 17 17 16 16 16 15 15 15 14 14 14 13 13 13 12 12 12 -11 11 11 11 11 11 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 12 12 12 -12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 10 10 10 10 10 10 10 10 10 10 10 10 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 -11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 -13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 -13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 -11 11 11 11 11 11 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 8 8 8 -7 7 7 6 6 6 6 6 6 5 5 5 4 4 4 4 4 4 3 3 3 3 3 3 -2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 -2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 -7 7 7 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 -10 10 10 10 10 10 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 -16 16 16 16 16 16 17 17 17 19 19 19 19 19 19 20 20 20 21 21 21 21 21 21 -22 22 22 23 23 23 24 24 23 25 25 25 25 25 25 25 25 25 26 26 26 26 26 26 -26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 25 25 25 25 25 25 -25 25 25 24 24 23 23 23 23 22 22 22 21 21 21 20 20 20 19 19 19 19 19 19 -16 16 16 16 16 16 14 14 14 13 13 13 12 12 12 11 11 11 10 10 10 10 10 10 -9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 -9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 -9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 -9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 7 7 7 7 7 7 6 6 6 -5 5 5 5 5 5 4 4 4 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 -5 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 -8 8 8 8 8 8 8 8 8 9 9 9 10 10 10 10 10 10 11 11 11 12 12 12 -13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 17 17 17 19 19 19 19 19 19 -20 20 20 20 20 20 21 21 21 22 22 22 22 22 22 23 23 23 23 23 23 24 24 23 -24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 24 24 23 23 23 23 23 23 23 -22 22 22 21 21 21 20 20 20 20 20 20 19 19 19 17 17 17 16 16 16 16 16 16 -14 14 14 13 13 13 12 12 12 11 11 11 10 10 10 9 9 9 8 8 8 7 7 7 -6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 -7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 -7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 -7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 -7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 -4 4 4 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 -4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 -11 11 11 11 11 11 13 13 13 13 13 13 14 14 14 15 15 15 16 16 16 16 16 16 -17 17 17 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 -22 22 22 22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21 20 20 20 -20 20 20 19 19 19 19 19 19 17 17 17 16 16 16 15 15 15 14 14 14 13 13 13 -12 12 12 11 11 11 10 10 10 9 9 9 8 8 8 6 6 6 5 5 5 5 5 5 -4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 -4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 3 3 3 -3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 -2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 -8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 13 13 13 14 14 14 -15 15 15 16 16 16 16 16 16 17 17 17 19 19 19 19 19 19 19 19 19 20 20 20 -20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 -17 17 17 16 16 16 16 16 16 15 15 15 14 14 14 13 13 13 12 12 12 11 11 11 -10 10 10 9 9 9 8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 -2 2 2 2 2 2 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 -2 2 2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 -1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 5 5 5 5 5 5 -6 6 6 7 7 7 8 8 8 9 9 9 9 9 9 10 10 10 11 11 11 12 12 12 -13 13 13 13 13 13 14 14 14 15 15 15 16 16 16 16 16 16 17 17 17 17 17 17 -19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 17 17 17 16 16 16 16 16 16 -15 15 15 14 14 14 13 13 13 13 13 13 12 12 12 11 11 11 10 10 10 9 9 9 -8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 -1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 -4 4 4 5 5 5 6 6 6 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 -11 11 11 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 15 15 15 16 16 16 -16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 15 15 15 15 15 15 14 14 14 -13 13 13 13 13 13 12 12 12 11 11 11 10 10 10 9 9 9 8 8 8 7 7 7 -6 6 6 5 5 5 4 4 4 3 3 3 3 3 3 2 2 2 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 -3 3 3 3 3 3 4 4 4 5 5 5 5 5 5 6 6 6 7 7 7 8 8 8 -9 9 9 10 10 10 11 11 11 11 11 11 12 12 12 13 13 13 13 13 13 13 13 13 -14 14 14 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 12 12 12 -11 11 11 11 11 11 10 10 10 9 9 9 8 8 8 7 7 7 6 6 6 5 5 5 -5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -2 2 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5 6 6 6 7 7 7 -8 8 8 8 8 8 9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12 -12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 10 10 10 -10 10 10 9 9 9 8 8 8 8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 -4 4 4 3 3 3 2 2 2 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 4 4 4 5 5 5 5 5 5 -6 6 6 7 7 7 8 8 8 8 8 8 9 9 9 9 9 9 10 10 10 10 10 10 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 -8 8 8 8 8 8 7 7 7 6 6 6 5 5 5 5 5 5 4 4 4 3 3 3 -3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 -5 5 5 5 5 5 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 -8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 -6 6 6 6 6 6 5 5 5 5 5 5 4 4 4 4 4 4 3 3 3 3 3 3 -2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 -4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 -6 6 6 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 -5 5 5 5 5 5 4 4 4 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 -3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 -4 4 4 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 1 -1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 -2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 -3 3 3 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 -3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 21 21 -44 40 24 36 36 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 - -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 -3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 3 1 0 - -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 -5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 5 2 0 - -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 -7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 7 3 0 - -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 -9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 9 4 0 - -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 -11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 11 5 0 - -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 -12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 12 6 0 - -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 -14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 14 7 0 - -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 -16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 16 8 0 - -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 -18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 18 9 0 - -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 -20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 20 10 0 - diff --git a/packages/linux/linux-openmoko-devel/printascii-2.6.23.patch b/packages/linux/linux-openmoko-devel/printascii-2.6.23.patch deleted file mode 100644 index 4818ac6bfc..0000000000 --- a/packages/linux/linux-openmoko-devel/printascii-2.6.23.patch +++ /dev/null @@ -1,21 +0,0 @@ -Index: linux-2.6.22/kernel/printk.c -=================================================================== ---- linux-2.6.22.orig/kernel/printk.c -+++ linux-2.6.22/kernel/printk.c -@@ -519,6 +519,8 @@ - /* cpu currently holding logbuf_lock */ - static volatile unsigned int printk_cpu = UINT_MAX; - -+extern void printascii(const char *); -+ - asmlinkage int vprintk(const char *fmt, va_list args) - { - unsigned long flags; -@@ -541,6 +543,7 @@ - - /* Emit the output into the temporary buffer */ - printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); -+ printascii(printk_buf); - - /* - * Copy the output into log_buf. If the caller didn't provide diff --git a/packages/linux/linux-openmoko-devel/printascii.patch b/packages/linux/linux-openmoko-devel/printascii.patch deleted file mode 100644 index 13a014db39..0000000000 --- a/packages/linux/linux-openmoko-devel/printascii.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: linux-2.6.22.5/kernel/printk.c -=================================================================== ---- linux-2.6.22.5.orig/kernel/printk.c -+++ linux-2.6.22.5/kernel/printk.c -@@ -535,6 +535,7 @@ asmlinkage int vprintk(const char *fmt, - - /* Emit the output into the temporary buffer */ - printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); -+ printascii(printk_buf); - - /* - * Copy the output into log_buf. If the caller didn't provide diff --git a/packages/linux/linux-openmoko-devel/squashfs-2.6.23.patch b/packages/linux/linux-openmoko-devel/squashfs-2.6.23.patch deleted file mode 100644 index f4457a8715..0000000000 --- a/packages/linux/linux-openmoko-devel/squashfs-2.6.23.patch +++ /dev/null @@ -1,4395 +0,0 @@ -Index: linux-2.6.22/fs/Kconfig -=================================================================== ---- linux-2.6.22.orig/fs/Kconfig -+++ linux-2.6.22/fs/Kconfig -@@ -1368,6 +1368,71 @@ - - If unsure, say N. - -+config SQUASHFS -+ tristate "SquashFS 3.2 - Squashed file system support" -+ select ZLIB_INFLATE -+ help -+ Saying Y here includes support for SquashFS 3.2 (a Compressed Read-Only File -+ System). Squashfs is a highly compressed read-only filesystem for Linux. -+ It uses zlib compression to compress both files, inodes and directories. -+ Inodes in the system are very small and all blocks are packed to minimise -+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K. -+ SquashFS 3.1 supports 64 bit filesystems and files (larger than 4GB), full -+ uid/gid information, hard links and timestamps. -+ -+ Squashfs is intended for general read-only filesystem use, for archival -+ use (i.e. in cases where a .tar.gz file may be used), and in embedded -+ systems where low overhead is needed. Further information and filesystem tools -+ are available from http://squashfs.sourceforge.net. -+ -+ If you want to compile this as a module ( = code which can be -+ inserted in and removed from the running kernel whenever you want), -+ say M here and read . The module -+ will be called squashfs. Note that the root file system (the one -+ containing the directory /) cannot be compiled as a module. -+ -+ If unsure, say N. -+ -+config SQUASHFS_EMBEDDED -+ -+ bool "Additional options for memory-constrained systems" -+ depends on SQUASHFS -+ default n -+ help -+ Saying Y here allows you to specify cache sizes and how Squashfs -+ allocates memory. This is only intended for memory constrained -+ systems. -+ -+ If unsure, say N. -+ -+config SQUASHFS_FRAGMENT_CACHE_SIZE -+ int "Number of fragments cached" if SQUASHFS_EMBEDDED -+ depends on SQUASHFS -+ default "3" -+ help -+ By default SquashFS caches the last 3 fragments read from -+ the filesystem. Increasing this amount may mean SquashFS -+ has to re-read fragments less often from disk, at the expense -+ of extra system memory. Decreasing this amount will mean -+ SquashFS uses less memory at the expense of extra reads from disk. -+ -+ Note there must be at least one cached fragment. Anything -+ much more than three will probably not make much difference. -+ -+config SQUASHFS_VMALLOC -+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED -+ depends on SQUASHFS -+ default n -+ help -+ By default SquashFS uses kmalloc to obtain fragment cache memory. -+ Kmalloc memory is the standard kernel allocator, but it can fail -+ on memory constrained systems. Because of the way Vmalloc works, -+ Vmalloc can succeed when kmalloc fails. Specifying this option -+ will make SquashFS always use Vmalloc to allocate the -+ fragment cache memory. -+ -+ If unsure, say N. -+ - config VXFS_FS - tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)" - depends on BLOCK -Index: linux-2.6.22/fs/Makefile -=================================================================== ---- linux-2.6.22.orig/fs/Makefile -+++ linux-2.6.22/fs/Makefile -@@ -72,6 +72,7 @@ - obj-$(CONFIG_JBD2) += jbd2/ - obj-$(CONFIG_EXT2_FS) += ext2/ - obj-$(CONFIG_CRAMFS) += cramfs/ -+obj-$(CONFIG_SQUASHFS) += squashfs/ - obj-$(CONFIG_RAMFS) += ramfs/ - obj-$(CONFIG_HUGETLBFS) += hugetlbfs/ - obj-$(CONFIG_CODA_FS) += coda/ -Index: linux-2.6.22/fs/squashfs/inode.c -=================================================================== ---- /dev/null -+++ linux-2.6.22/fs/squashfs/inode.c -@@ -0,0 +1,2328 @@ -+/* -+ * Squashfs - a compressed read only filesystem for Linux -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * inode.c -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "squashfs.h" -+ -+static void vfs_read_inode(struct inode *i); -+static struct dentry *squashfs_get_parent(struct dentry *child); -+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode); -+static int squashfs_statfs(struct dentry *, struct kstatfs *); -+static int squashfs_symlink_readpage(struct file *file, struct page *page); -+static long long read_blocklist(struct inode *inode, int index, -+ int readahead_blks, char *block_list, -+ unsigned short **block_p, unsigned int *bsize); -+static int squashfs_readpage(struct file *file, struct page *page); -+static int squashfs_readpage4K(struct file *file, struct page *page); -+static int squashfs_readdir(struct file *, void *, filldir_t); -+static struct dentry *squashfs_lookup(struct inode *, struct dentry *, -+ struct nameidata *); -+static int squashfs_remount(struct super_block *s, int *flags, char *data); -+static void squashfs_put_super(struct super_block *); -+static int squashfs_get_sb(struct file_system_type *,int, const char *, void *, -+ struct vfsmount *); -+static struct inode *squashfs_alloc_inode(struct super_block *sb); -+static void squashfs_destroy_inode(struct inode *inode); -+static int init_inodecache(void); -+static void destroy_inodecache(void); -+ -+static struct file_system_type squashfs_fs_type = { -+ .owner = THIS_MODULE, -+ .name = "squashfs", -+ .get_sb = squashfs_get_sb, -+ .kill_sb = kill_block_super, -+ .fs_flags = FS_REQUIRES_DEV -+}; -+ -+static const unsigned char squashfs_filetype_table[] = { -+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK -+}; -+ -+static struct super_operations squashfs_super_ops = { -+ .alloc_inode = squashfs_alloc_inode, -+ .destroy_inode = squashfs_destroy_inode, -+ .statfs = squashfs_statfs, -+ .put_super = squashfs_put_super, -+ .remount_fs = squashfs_remount -+}; -+ -+static struct super_operations squashfs_export_super_ops = { -+ .alloc_inode = squashfs_alloc_inode, -+ .destroy_inode = squashfs_destroy_inode, -+ .statfs = squashfs_statfs, -+ .put_super = squashfs_put_super, -+ .read_inode = vfs_read_inode -+}; -+ -+static struct export_operations squashfs_export_ops = { -+ .get_parent = squashfs_get_parent -+}; -+ -+SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = { -+ .readpage = squashfs_symlink_readpage -+}; -+ -+SQSH_EXTERN const struct address_space_operations squashfs_aops = { -+ .readpage = squashfs_readpage -+}; -+ -+SQSH_EXTERN const struct address_space_operations squashfs_aops_4K = { -+ .readpage = squashfs_readpage4K -+}; -+ -+static const struct file_operations squashfs_dir_ops = { -+ .read = generic_read_dir, -+ .readdir = squashfs_readdir -+}; -+ -+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = { -+ .lookup = squashfs_lookup -+}; -+ -+ -+static struct buffer_head *get_block_length(struct super_block *s, -+ int *cur_index, int *offset, int *c_byte) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ unsigned short temp; -+ struct buffer_head *bh; -+ -+ if (!(bh = sb_bread(s, *cur_index))) -+ goto out; -+ -+ if (msblk->devblksize - *offset == 1) { -+ if (msblk->swap) -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ else -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ brelse(bh); -+ if (!(bh = sb_bread(s, ++(*cur_index)))) -+ goto out; -+ if (msblk->swap) -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ bh->b_data); -+ else -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ bh->b_data); -+ *c_byte = temp; -+ *offset = 1; -+ } else { -+ if (msblk->swap) { -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ (bh->b_data + *offset + 1)); -+ } else { -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ (bh->b_data + *offset + 1)); -+ } -+ *c_byte = temp; -+ *offset += 2; -+ } -+ -+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) { -+ if (*offset == msblk->devblksize) { -+ brelse(bh); -+ if (!(bh = sb_bread(s, ++(*cur_index)))) -+ goto out; -+ *offset = 0; -+ } -+ if (*((unsigned char *) (bh->b_data + *offset)) != -+ SQUASHFS_MARKER_BYTE) { -+ ERROR("Metadata block marker corrupt @ %x\n", -+ *cur_index); -+ brelse(bh); -+ goto out; -+ } -+ (*offset)++; -+ } -+ return bh; -+ -+out: -+ return NULL; -+} -+ -+ -+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer, -+ long long index, unsigned int length, -+ long long *next_index, int srclength) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >> -+ msblk->devblksize_log2) + 2]; -+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1); -+ unsigned int cur_index = index >> msblk->devblksize_log2; -+ int bytes, avail_bytes, b = 0, k = 0; -+ unsigned int compressed; -+ unsigned int c_byte = length; -+ -+ if (c_byte) { -+ bytes = msblk->devblksize - offset; -+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte); -+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte); -+ -+ TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index, compressed -+ ? "" : "un", (unsigned int) c_byte, srclength); -+ -+ if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used) -+ goto read_failure; -+ -+ if (!(bh[0] = sb_getblk(s, cur_index))) -+ goto block_release; -+ -+ for (b = 1; bytes < c_byte; b++) { -+ if (!(bh[b] = sb_getblk(s, ++cur_index))) -+ goto block_release; -+ bytes += msblk->devblksize; -+ } -+ ll_rw_block(READ, b, bh); -+ } else { -+ if (index < 0 || (index + 2) > sblk->bytes_used) -+ goto read_failure; -+ -+ if (!(bh[0] = get_block_length(s, &cur_index, &offset, -+ &c_byte))) -+ goto read_failure; -+ -+ bytes = msblk->devblksize - offset; -+ compressed = SQUASHFS_COMPRESSED(c_byte); -+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte); -+ -+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed -+ ? "" : "un", (unsigned int) c_byte); -+ -+ if (c_byte > srclength || (index + c_byte) > sblk->bytes_used) -+ goto read_failure; -+ -+ for (b = 1; bytes < c_byte; b++) { -+ if (!(bh[b] = sb_getblk(s, ++cur_index))) -+ goto block_release; -+ bytes += msblk->devblksize; -+ } -+ ll_rw_block(READ, b - 1, bh + 1); -+ } -+ -+ if (compressed) { -+ int zlib_err = 0; -+ -+ /* -+ * uncompress block -+ */ -+ -+ mutex_lock(&msblk->read_data_mutex); -+ -+ msblk->stream.next_out = buffer; -+ msblk->stream.avail_out = srclength; -+ -+ for (bytes = 0; k < b; k++) { -+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ? -+ msblk->devblksize - offset : -+ c_byte - bytes; -+ wait_on_buffer(bh[k]); -+ if (!buffer_uptodate(bh[k])) -+ goto release_mutex; -+ -+ msblk->stream.next_in = bh[k]->b_data + offset; -+ msblk->stream.avail_in = avail_bytes; -+ -+ if (k == 0) { -+ zlib_err = zlib_inflateInit(&msblk->stream); -+ if (zlib_err != Z_OK) { -+ ERROR("zlib_inflateInit returned unexpected result 0x%x, srclength %d\n", -+ zlib_err, srclength); -+ goto release_mutex; -+ } -+ -+ if (avail_bytes == 0) { -+ offset = 0; -+ brelse(bh[k]); -+ continue; -+ } -+ } -+ -+ zlib_err = zlib_inflate(&msblk->stream, Z_NO_FLUSH); -+ if (zlib_err != Z_OK && zlib_err != Z_STREAM_END) { -+ ERROR("zlib_inflate returned unexpected result 0x%x, srclength %d, avail_in %d, avail_out %d\n", -+ zlib_err, srclength, msblk->stream.avail_in, msblk->stream.avail_out); -+ goto release_mutex; -+ } -+ -+ bytes += avail_bytes; -+ offset = 0; -+ brelse(bh[k]); -+ } -+ -+ if (zlib_err != Z_STREAM_END) -+ goto release_mutex; -+ -+ zlib_err = zlib_inflateEnd(&msblk->stream); -+ if (zlib_err != Z_OK) { -+ ERROR("zlib_inflateEnd returned unexpected result 0x%x, srclength %d\n", -+ zlib_err, srclength); -+ goto release_mutex; -+ } -+ bytes = msblk->stream.total_out; -+ mutex_unlock(&msblk->read_data_mutex); -+ } else { -+ int i; -+ -+ for(i = 0; i < b; i++) { -+ wait_on_buffer(bh[i]); -+ if(!buffer_uptodate(bh[i])) -+ goto block_release; -+ } -+ -+ for (bytes = 0; k < b; k++) { -+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ? -+ msblk->devblksize - offset : -+ c_byte - bytes; -+ memcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes); -+ bytes += avail_bytes; -+ offset = 0; -+ brelse(bh[k]); -+ } -+ } -+ -+ if (next_index) -+ *next_index = index + c_byte + (length ? 0 : -+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags) -+ ? 3 : 2)); -+ return bytes; -+ -+release_mutex: -+ mutex_unlock(&msblk->read_data_mutex); -+ -+block_release: -+ for (; k < b; k++) -+ brelse(bh[k]); -+ -+read_failure: -+ ERROR("sb_bread failed reading block 0x%x\n", cur_index); -+ return 0; -+} -+ -+ -+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer, -+ long long block, unsigned int offset, -+ int length, long long *next_block, -+ unsigned int *next_offset) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ int n, i, bytes, return_length = length; -+ long long next_index; -+ -+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset); -+ -+ while ( 1 ) { -+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) -+ if (msblk->block_cache[i].block == block) -+ break; -+ -+ mutex_lock(&msblk->block_cache_mutex); -+ -+ if (i == SQUASHFS_CACHED_BLKS) { -+ /* read inode header block */ -+ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS; -+ n ; n --, i = (i + 1) % -+ SQUASHFS_CACHED_BLKS) -+ if (msblk->block_cache[i].block != -+ SQUASHFS_USED_BLK) -+ break; -+ -+ if (n == 0) { -+ wait_queue_t wait; -+ -+ init_waitqueue_entry(&wait, current); -+ add_wait_queue(&msblk->waitq, &wait); -+ set_current_state(TASK_UNINTERRUPTIBLE); -+ mutex_unlock(&msblk->block_cache_mutex); -+ schedule(); -+ set_current_state(TASK_RUNNING); -+ remove_wait_queue(&msblk->waitq, &wait); -+ continue; -+ } -+ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS; -+ -+ if (msblk->block_cache[i].block == -+ SQUASHFS_INVALID_BLK) { -+ if (!(msblk->block_cache[i].data = -+ kmalloc(SQUASHFS_METADATA_SIZE, -+ GFP_KERNEL))) { -+ ERROR("Failed to allocate cache" -+ "block\n"); -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto out; -+ } -+ } -+ -+ msblk->block_cache[i].block = SQUASHFS_USED_BLK; -+ mutex_unlock(&msblk->block_cache_mutex); -+ -+ msblk->block_cache[i].length = squashfs_read_data(s, -+ msblk->block_cache[i].data, block, 0, &next_index, SQUASHFS_METADATA_SIZE); -+ if (msblk->block_cache[i].length == 0) { -+ ERROR("Unable to read cache block [%llx:%x]\n", -+ block, offset); -+ mutex_lock(&msblk->block_cache_mutex); -+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; -+ kfree(msblk->block_cache[i].data); -+ wake_up(&msblk->waitq); -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto out; -+ } -+ -+ mutex_lock(&msblk->block_cache_mutex); -+ wake_up(&msblk->waitq); -+ msblk->block_cache[i].block = block; -+ msblk->block_cache[i].next_index = next_index; -+ TRACE("Read cache block [%llx:%x]\n", block, offset); -+ } -+ -+ if (msblk->block_cache[i].block != block) { -+ mutex_unlock(&msblk->block_cache_mutex); -+ continue; -+ } -+ -+ bytes = msblk->block_cache[i].length - offset; -+ -+ if (bytes < 1) { -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto out; -+ } else if (bytes >= length) { -+ if (buffer) -+ memcpy(buffer, msblk->block_cache[i].data + -+ offset, length); -+ if (msblk->block_cache[i].length - offset == length) { -+ *next_block = msblk->block_cache[i].next_index; -+ *next_offset = 0; -+ } else { -+ *next_block = block; -+ *next_offset = offset + length; -+ } -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto finish; -+ } else { -+ if (buffer) { -+ memcpy(buffer, msblk->block_cache[i].data + -+ offset, bytes); -+ buffer += bytes; -+ } -+ block = msblk->block_cache[i].next_index; -+ mutex_unlock(&msblk->block_cache_mutex); -+ length -= bytes; -+ offset = 0; -+ } -+ } -+ -+finish: -+ return return_length; -+out: -+ return 0; -+} -+ -+ -+static int get_fragment_location(struct super_block *s, unsigned int fragment, -+ long long *fragment_start_block, -+ unsigned int *fragment_size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ long long start_block = -+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)]; -+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment); -+ struct squashfs_fragment_entry fragment_entry; -+ -+ if (msblk->swap) { -+ struct squashfs_fragment_entry sfragment_entry; -+ -+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, -+ start_block, offset, -+ sizeof(sfragment_entry), &start_block, -+ &offset)) -+ goto out; -+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, -+ start_block, offset, -+ sizeof(fragment_entry), &start_block, -+ &offset)) -+ goto out; -+ -+ *fragment_start_block = fragment_entry.start_block; -+ *fragment_size = fragment_entry.size; -+ -+ return 1; -+ -+out: -+ return 0; -+} -+ -+ -+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct -+ squashfs_fragment_cache *fragment) -+{ -+ mutex_lock(&msblk->fragment_mutex); -+ fragment->locked --; -+ wake_up(&msblk->fragment_wait_queue); -+ mutex_unlock(&msblk->fragment_mutex); -+} -+ -+ -+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block -+ *s, long long start_block, -+ int length) -+{ -+ int i, n; -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ while ( 1 ) { -+ mutex_lock(&msblk->fragment_mutex); -+ -+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS && -+ msblk->fragment[i].block != start_block; i++); -+ -+ if (i == SQUASHFS_CACHED_FRAGMENTS) { -+ for (i = msblk->next_fragment, n = -+ SQUASHFS_CACHED_FRAGMENTS; n && -+ msblk->fragment[i].locked; n--, i = (i + 1) % -+ SQUASHFS_CACHED_FRAGMENTS); -+ -+ if (n == 0) { -+ wait_queue_t wait; -+ -+ init_waitqueue_entry(&wait, current); -+ add_wait_queue(&msblk->fragment_wait_queue, -+ &wait); -+ set_current_state(TASK_UNINTERRUPTIBLE); -+ mutex_unlock(&msblk->fragment_mutex); -+ schedule(); -+ set_current_state(TASK_RUNNING); -+ remove_wait_queue(&msblk->fragment_wait_queue, -+ &wait); -+ continue; -+ } -+ msblk->next_fragment = (msblk->next_fragment + 1) % -+ SQUASHFS_CACHED_FRAGMENTS; -+ -+ if (msblk->fragment[i].data == NULL) -+ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC -+ (SQUASHFS_FILE_MAX_SIZE))) { -+ ERROR("Failed to allocate fragment " -+ "cache block\n"); -+ mutex_unlock(&msblk->fragment_mutex); -+ goto out; -+ } -+ -+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; -+ msblk->fragment[i].locked = 1; -+ mutex_unlock(&msblk->fragment_mutex); -+ -+ if (!(msblk->fragment[i].length = squashfs_read_data(s, -+ msblk->fragment[i].data, -+ start_block, length, NULL, sblk->block_size))) { -+ ERROR("Unable to read fragment cache block " -+ "[%llx]\n", start_block); -+ msblk->fragment[i].locked = 0; -+ smp_mb(); -+ goto out; -+ } -+ -+ mutex_lock(&msblk->fragment_mutex); -+ msblk->fragment[i].block = start_block; -+ TRACE("New fragment %d, start block %lld, locked %d\n", -+ i, msblk->fragment[i].block, -+ msblk->fragment[i].locked); -+ mutex_unlock(&msblk->fragment_mutex); -+ break; -+ } -+ -+ msblk->fragment[i].locked++; -+ mutex_unlock(&msblk->fragment_mutex); -+ TRACE("Got fragment %d, start block %lld, locked %d\n", i, -+ msblk->fragment[i].block, -+ msblk->fragment[i].locked); -+ break; -+ } -+ -+ return &msblk->fragment[i]; -+ -+out: -+ return NULL; -+} -+ -+ -+static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, -+ struct squashfs_base_inode_header *inodeb) -+{ -+ i->i_ino = inodeb->inode_number; -+ i->i_mtime.tv_sec = inodeb->mtime; -+ i->i_atime.tv_sec = inodeb->mtime; -+ i->i_ctime.tv_sec = inodeb->mtime; -+ i->i_uid = msblk->uid[inodeb->uid]; -+ i->i_mode = inodeb->mode; -+ i->i_size = 0; -+ if (inodeb->guid == SQUASHFS_GUIDS) -+ i->i_gid = i->i_uid; -+ else -+ i->i_gid = msblk->guid[inodeb->guid]; -+} -+ -+ -+static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ long long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)]; -+ int offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1); -+ squashfs_inode_t inode; -+ -+ TRACE("Entered squashfs_inode_lookup, inode_number = %d\n", ino); -+ -+ if (msblk->swap) { -+ squashfs_inode_t sinode; -+ -+ if (!squashfs_get_cached_block(s, (char *) &sinode, start, offset, -+ sizeof(sinode), &start, &offset)) -+ goto out; -+ SQUASHFS_SWAP_INODE_T((&inode), &sinode); -+ } else if (!squashfs_get_cached_block(s, (char *) &inode, start, offset, -+ sizeof(inode), &start, &offset)) -+ goto out; -+ -+ TRACE("squashfs_inode_lookup, inode = 0x%llx\n", inode); -+ -+ return inode; -+ -+out: -+ return SQUASHFS_INVALID_BLK; -+} -+ -+ -+static void vfs_read_inode(struct inode *i) -+{ -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino); -+ -+ TRACE("Entered vfs_read_inode\n"); -+ -+ if(inode != SQUASHFS_INVALID_BLK) -+ (msblk->read_inode)(i, inode); -+} -+ -+ -+static struct dentry *squashfs_get_parent(struct dentry *child) -+{ -+ struct inode *i = child->d_inode; -+ struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode); -+ struct dentry *rv; -+ -+ TRACE("Entered squashfs_get_parent\n"); -+ -+ if(parent == NULL) { -+ rv = ERR_PTR(-EACCES); -+ goto out; -+ } -+ -+ rv = d_alloc_anon(parent); -+ if(rv == NULL) -+ rv = ERR_PTR(-ENOMEM); -+ -+out: -+ return rv; -+} -+ -+ -+SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct inode *i = iget_locked(s, inode_number); -+ -+ TRACE("Entered squashfs_iget\n"); -+ -+ if(i && (i->i_state & I_NEW)) { -+ (msblk->read_inode)(i, inode); -+ unlock_new_inode(i); -+ } -+ -+ return i; -+} -+ -+ -+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode) -+{ -+ struct super_block *s = i->i_sb; -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long block = SQUASHFS_INODE_BLK(inode) + -+ sblk->inode_table_start; -+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); -+ long long next_block; -+ unsigned int next_offset; -+ union squashfs_inode_header id, sid; -+ struct squashfs_base_inode_header *inodeb = &id.base, -+ *sinodeb = &sid.base; -+ -+ TRACE("Entered squashfs_read_inode\n"); -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, -+ offset, sizeof(*sinodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb, -+ sizeof(*sinodeb)); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) inodeb, block, -+ offset, sizeof(*inodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ squashfs_new_inode(msblk, i, inodeb); -+ -+ switch(inodeb->inode_type) { -+ case SQUASHFS_FILE_TYPE: { -+ unsigned int frag_size; -+ long long frag_blk; -+ struct squashfs_reg_inode_header *inodep = &id.reg; -+ struct squashfs_reg_inode_header *sinodep = &sid.reg; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ frag_blk = SQUASHFS_INVALID_BLK; -+ if (inodep->fragment != SQUASHFS_INVALID_FRAG && -+ !get_fragment_location(s, -+ inodep->fragment, &frag_blk, &frag_size)) -+ goto failed_read; -+ -+ i->i_nlink = 1; -+ i->i_size = inodep->file_size; -+ i->i_fop = &generic_ro_fops; -+ i->i_mode |= S_IFREG; -+ i->i_blocks = ((i->i_size - 1) >> 9) + 1; -+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; -+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; -+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->u.s1.block_list_start = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ if (sblk->block_size > 4096) -+ i->i_data.a_ops = &squashfs_aops; -+ else -+ i->i_data.a_ops = &squashfs_aops_4K; -+ -+ TRACE("File inode %x:%x, start_block %llx, " -+ "block_list_start %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, next_block, -+ next_offset); -+ break; -+ } -+ case SQUASHFS_LREG_TYPE: { -+ unsigned int frag_size; -+ long long frag_blk; -+ struct squashfs_lreg_inode_header *inodep = &id.lreg; -+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ frag_blk = SQUASHFS_INVALID_BLK; -+ if (inodep->fragment != SQUASHFS_INVALID_FRAG && -+ !get_fragment_location(s, -+ inodep->fragment, &frag_blk, &frag_size)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->file_size; -+ i->i_fop = &generic_ro_fops; -+ i->i_mode |= S_IFREG; -+ i->i_blocks = ((i->i_size - 1) >> 9) + 1; -+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; -+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; -+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->u.s1.block_list_start = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ if (sblk->block_size > 4096) -+ i->i_data.a_ops = &squashfs_aops; -+ else -+ i->i_data.a_ops = &squashfs_aops_4K; -+ -+ TRACE("File inode %x:%x, start_block %llx, " -+ "block_list_start %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, next_block, -+ next_offset); -+ break; -+ } -+ case SQUASHFS_DIR_TYPE: { -+ struct squashfs_dir_inode_header *inodep = &id.dir; -+ struct squashfs_dir_inode_header *sinodep = &sid.dir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops; -+ i->i_fop = &squashfs_dir_ops; -+ i->i_mode |= S_IFDIR; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = 0; -+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; -+ -+ TRACE("Directory inode %x:%x, start_block %x, offset " -+ "%x\n", SQUASHFS_INODE_BLK(inode), -+ offset, inodep->start_block, -+ inodep->offset); -+ break; -+ } -+ case SQUASHFS_LDIR_TYPE: { -+ struct squashfs_ldir_inode_header *inodep = &id.ldir; -+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops; -+ i->i_fop = &squashfs_dir_ops; -+ i->i_mode |= S_IFDIR; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; -+ SQUASHFS_I(i)->u.s2.directory_index_offset = -+ next_offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = -+ inodep->i_count; -+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; -+ -+ TRACE("Long directory inode %x:%x, start_block %x, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, inodep->offset); -+ break; -+ } -+ case SQUASHFS_SYMLINK_TYPE: { -+ struct squashfs_symlink_inode_header *inodep = -+ &id.symlink; -+ struct squashfs_symlink_inode_header *sinodep = -+ &sid.symlink; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->symlink_size; -+ i->i_op = &page_symlink_inode_operations; -+ i->i_data.a_ops = &squashfs_symlink_aops; -+ i->i_mode |= S_IFLNK; -+ SQUASHFS_I(i)->start_block = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ -+ TRACE("Symbolic link inode %x:%x, start_block %llx, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ next_block, next_offset); -+ break; -+ } -+ case SQUASHFS_BLKDEV_TYPE: -+ case SQUASHFS_CHRDEV_TYPE: { -+ struct squashfs_dev_inode_header *inodep = &id.dev; -+ struct squashfs_dev_inode_header *sinodep = &sid.dev; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_mode |= (inodeb->inode_type == -+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : -+ S_IFBLK; -+ init_special_inode(i, i->i_mode, -+ old_decode_dev(inodep->rdev)); -+ -+ TRACE("Device inode %x:%x, rdev %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->rdev); -+ break; -+ } -+ case SQUASHFS_FIFO_TYPE: -+ case SQUASHFS_SOCKET_TYPE: { -+ struct squashfs_ipc_inode_header *inodep = &id.ipc; -+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) -+ ? S_IFIFO : S_IFSOCK; -+ init_special_inode(i, i->i_mode, 0); -+ break; -+ } -+ default: -+ ERROR("Unknown inode type %d in squashfs_iget!\n", -+ inodeb->inode_type); -+ goto failed_read1; -+ } -+ -+ return 1; -+ -+failed_read: -+ ERROR("Unable to read inode [%llx:%x]\n", block, offset); -+ -+failed_read1: -+ make_bad_inode(i); -+ return 0; -+} -+ -+ -+static int read_inode_lookup_table(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes); -+ -+ TRACE("In read_inode_lookup_table, length %d\n", length); -+ -+ /* Allocate inode lookup table */ -+ if (!(msblk->inode_lookup_table = kmalloc(length, GFP_KERNEL))) { -+ ERROR("Failed to allocate inode lookup table\n"); -+ return 0; -+ } -+ -+ if (!squashfs_read_data(s, (char *) msblk->inode_lookup_table, -+ sblk->lookup_table_start, length | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { -+ ERROR("unable to read inode lookup table\n"); -+ return 0; -+ } -+ -+ if (msblk->swap) { -+ int i; -+ long long block; -+ -+ for (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) { -+ SQUASHFS_SWAP_LOOKUP_BLOCKS((&block), -+ &msblk->inode_lookup_table[i], 1); -+ msblk->inode_lookup_table[i] = block; -+ } -+ } -+ -+ return 1; -+} -+ -+ -+static int read_fragment_index_table(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments); -+ -+ if(length == 0) -+ return 1; -+ -+ /* Allocate fragment index table */ -+ if (!(msblk->fragment_index = kmalloc(length, GFP_KERNEL))) { -+ ERROR("Failed to allocate fragment index table\n"); -+ return 0; -+ } -+ -+ if (!squashfs_read_data(s, (char *) msblk->fragment_index, -+ sblk->fragment_table_start, length | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { -+ ERROR("unable to read fragment index table\n"); -+ return 0; -+ } -+ -+ if (msblk->swap) { -+ int i; -+ long long fragment; -+ -+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments); i++) { -+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment), -+ &msblk->fragment_index[i], 1); -+ msblk->fragment_index[i] = fragment; -+ } -+ } -+ -+ return 1; -+} -+ -+ -+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent) -+{ -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ msblk->read_inode = squashfs_read_inode; -+ msblk->read_blocklist = read_blocklist; -+ msblk->read_fragment_index_table = read_fragment_index_table; -+ -+ if (sblk->s_major == 1) { -+ if (!squashfs_1_0_supported(msblk)) { -+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems " -+ "are unsupported\n"); -+ SERROR("Please recompile with " -+ "Squashfs 1.0 support enabled\n"); -+ return 0; -+ } -+ } else if (sblk->s_major == 2) { -+ if (!squashfs_2_0_supported(msblk)) { -+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems " -+ "are unsupported\n"); -+ SERROR("Please recompile with " -+ "Squashfs 2.0 support enabled\n"); -+ return 0; -+ } -+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor > -+ SQUASHFS_MINOR) { -+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d " -+ "filesystem\n", sblk->s_major, sblk->s_minor); -+ SERROR("Please update your kernel\n"); -+ return 0; -+ } -+ -+ return 1; -+} -+ -+ -+static int squashfs_fill_super(struct super_block *s, void *data, int silent) -+{ -+ struct squashfs_sb_info *msblk; -+ struct squashfs_super_block *sblk; -+ int i; -+ char b[BDEVNAME_SIZE]; -+ struct inode *root; -+ -+ TRACE("Entered squashfs_read_superblock\n"); -+ -+ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info), -+ GFP_KERNEL))) { -+ ERROR("Failed to allocate superblock\n"); -+ goto failure; -+ } -+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info)); -+ msblk = s->s_fs_info; -+ if (!(msblk->stream.workspace = vmalloc(zlib_inflate_workspacesize()))) { -+ ERROR("Failed to allocate zlib workspace\n"); -+ goto failure; -+ } -+ sblk = &msblk->sblk; -+ -+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE); -+ msblk->devblksize_log2 = ffz(~msblk->devblksize); -+ -+ mutex_init(&msblk->read_data_mutex); -+ mutex_init(&msblk->read_page_mutex); -+ mutex_init(&msblk->block_cache_mutex); -+ mutex_init(&msblk->fragment_mutex); -+ mutex_init(&msblk->meta_index_mutex); -+ -+ init_waitqueue_head(&msblk->waitq); -+ init_waitqueue_head(&msblk->fragment_wait_queue); -+ -+ sblk->bytes_used = sizeof(struct squashfs_super_block); -+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START, -+ sizeof(struct squashfs_super_block) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) { -+ SERROR("unable to read superblock\n"); -+ goto failed_mount; -+ } -+ -+ /* Check it is a SQUASHFS superblock */ -+ msblk->swap = 0; -+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) { -+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) { -+ struct squashfs_super_block ssblk; -+ -+ WARNING("Mounting a different endian SQUASHFS " -+ "filesystem on %s\n", bdevname(s->s_bdev, b)); -+ -+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk); -+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block)); -+ msblk->swap = 1; -+ } else { -+ SERROR("Can't find a SQUASHFS superblock on %s\n", -+ bdevname(s->s_bdev, b)); -+ goto failed_mount; -+ } -+ } -+ -+ /* Check the MAJOR & MINOR versions */ -+ if(!supported_squashfs_filesystem(msblk, silent)) -+ goto failed_mount; -+ -+ /* Check the filesystem does not extend beyond the end of the -+ block device */ -+ if(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode)) -+ goto failed_mount; -+ -+ /* Check the root inode for sanity */ -+ if (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE) -+ goto failed_mount; -+ -+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b)); -+ TRACE("Inodes are %scompressed\n", -+ SQUASHFS_UNCOMPRESSED_INODES -+ (sblk->flags) ? "un" : ""); -+ TRACE("Data is %scompressed\n", -+ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags) -+ ? "un" : ""); -+ TRACE("Check data is %s present in the filesystem\n", -+ SQUASHFS_CHECK_DATA(sblk->flags) ? -+ "" : "not"); -+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used); -+ TRACE("Block size %d\n", sblk->block_size); -+ TRACE("Number of inodes %d\n", sblk->inodes); -+ if (sblk->s_major > 1) -+ TRACE("Number of fragments %d\n", sblk->fragments); -+ TRACE("Number of uids %d\n", sblk->no_uids); -+ TRACE("Number of gids %d\n", sblk->no_guids); -+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start); -+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start); -+ if (sblk->s_major > 1) -+ TRACE("sblk->fragment_table_start %llx\n", -+ sblk->fragment_table_start); -+ TRACE("sblk->uid_start %llx\n", sblk->uid_start); -+ -+ s->s_flags |= MS_RDONLY; -+ s->s_op = &squashfs_super_ops; -+ -+ /* Init inode_table block pointer array */ -+ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) * -+ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) { -+ ERROR("Failed to allocate block cache\n"); -+ goto failed_mount; -+ } -+ -+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) -+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; -+ -+ msblk->next_cache = 0; -+ -+ /* Allocate read_page block */ -+ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) { -+ ERROR("Failed to allocate read_page block\n"); -+ goto failed_mount; -+ } -+ -+ /* Allocate uid and gid tables */ -+ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) * -+ sizeof(unsigned int), GFP_KERNEL))) { -+ ERROR("Failed to allocate uid/gid table\n"); -+ goto failed_mount; -+ } -+ msblk->guid = msblk->uid + sblk->no_uids; -+ -+ if (msblk->swap) { -+ unsigned int suid[sblk->no_uids + sblk->no_guids]; -+ -+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start, -+ ((sblk->no_uids + sblk->no_guids) * -+ sizeof(unsigned int)) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { -+ ERROR("unable to read uid/gid table\n"); -+ goto failed_mount; -+ } -+ -+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids + -+ sblk->no_guids), (sizeof(unsigned int) * 8)); -+ } else -+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start, -+ ((sblk->no_uids + sblk->no_guids) * -+ sizeof(unsigned int)) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { -+ ERROR("unable to read uid/gid table\n"); -+ goto failed_mount; -+ } -+ -+ -+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk)) -+ goto allocate_root; -+ -+ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) * -+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) { -+ ERROR("Failed to allocate fragment block cache\n"); -+ goto failed_mount; -+ } -+ -+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) { -+ msblk->fragment[i].locked = 0; -+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; -+ msblk->fragment[i].data = NULL; -+ } -+ -+ msblk->next_fragment = 0; -+ -+ /* Allocate and read fragment index table */ -+ if (msblk->read_fragment_index_table(s) == 0) -+ goto failed_mount; -+ -+ if(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK) -+ goto allocate_root; -+ -+ /* Allocate and read inode lookup table */ -+ if (read_inode_lookup_table(s) == 0) -+ goto failed_mount; -+ -+ s->s_op = &squashfs_export_super_ops; -+ s->s_export_op = &squashfs_export_ops; -+ -+allocate_root: -+ root = new_inode(s); -+ if ((msblk->read_inode)(root, sblk->root_inode) == 0) -+ goto failed_mount; -+ insert_inode_hash(root); -+ -+ if ((s->s_root = d_alloc_root(root)) == NULL) { -+ ERROR("Root inode create failed\n"); -+ iput(root); -+ goto failed_mount; -+ } -+ -+ TRACE("Leaving squashfs_read_super\n"); -+ return 0; -+ -+failed_mount: -+ kfree(msblk->inode_lookup_table); -+ kfree(msblk->fragment_index); -+ kfree(msblk->fragment); -+ kfree(msblk->uid); -+ kfree(msblk->read_page); -+ kfree(msblk->block_cache); -+ kfree(msblk->fragment_index_2); -+ vfree(msblk->stream.workspace); -+ kfree(s->s_fs_info); -+ s->s_fs_info = NULL; -+ return -EINVAL; -+ -+failure: -+ return -ENOMEM; -+} -+ -+ -+static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf) -+{ -+ struct squashfs_sb_info *msblk = dentry->d_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ TRACE("Entered squashfs_statfs\n"); -+ -+ buf->f_type = SQUASHFS_MAGIC; -+ buf->f_bsize = sblk->block_size; -+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1; -+ buf->f_bfree = buf->f_bavail = 0; -+ buf->f_files = sblk->inodes; -+ buf->f_ffree = 0; -+ buf->f_namelen = SQUASHFS_NAME_LEN; -+ -+ return 0; -+} -+ -+ -+static int squashfs_symlink_readpage(struct file *file, struct page *page) -+{ -+ struct inode *inode = page->mapping->host; -+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes; -+ long long block = SQUASHFS_I(inode)->start_block; -+ int offset = SQUASHFS_I(inode)->offset; -+ void *pageaddr = kmap(page); -+ -+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block " -+ "%llx, offset %x\n", page->index, -+ SQUASHFS_I(inode)->start_block, -+ SQUASHFS_I(inode)->offset); -+ -+ for (length = 0; length < index; length += bytes) { -+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL, -+ block, offset, PAGE_CACHE_SIZE, &block, -+ &offset))) { -+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, -+ offset); -+ goto skip_read; -+ } -+ } -+ -+ if (length != index) { -+ ERROR("(squashfs_symlink_readpage) length != index\n"); -+ bytes = 0; -+ goto skip_read; -+ } -+ -+ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE : -+ i_size_read(inode) - length; -+ -+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, -+ offset, bytes, &block, &offset))) -+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset); -+ -+skip_read: -+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); -+ kunmap(page); -+ flush_dcache_page(page); -+ SetPageUptodate(page); -+ unlock_page(page); -+ -+ return 0; -+} -+ -+ -+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset) -+{ -+ struct meta_index *meta = NULL; -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ int i; -+ -+ mutex_lock(&msblk->meta_index_mutex); -+ -+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset); -+ -+ if(msblk->meta_index == NULL) -+ goto not_allocated; -+ -+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++) -+ if (msblk->meta_index[i].inode_number == inode->i_ino && -+ msblk->meta_index[i].offset >= offset && -+ msblk->meta_index[i].offset <= index && -+ msblk->meta_index[i].locked == 0) { -+ TRACE("locate_meta_index: entry %d, offset %d\n", i, -+ msblk->meta_index[i].offset); -+ meta = &msblk->meta_index[i]; -+ offset = meta->offset; -+ } -+ -+ if (meta) -+ meta->locked = 1; -+ -+not_allocated: -+ mutex_unlock(&msblk->meta_index_mutex); -+ -+ return meta; -+} -+ -+ -+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip) -+{ -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct meta_index *meta = NULL; -+ int i; -+ -+ mutex_lock(&msblk->meta_index_mutex); -+ -+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip); -+ -+ if(msblk->meta_index == NULL) { -+ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) * -+ SQUASHFS_META_NUMBER, GFP_KERNEL))) { -+ ERROR("Failed to allocate meta_index\n"); -+ goto failed; -+ } -+ for(i = 0; i < SQUASHFS_META_NUMBER; i++) { -+ msblk->meta_index[i].inode_number = 0; -+ msblk->meta_index[i].locked = 0; -+ } -+ msblk->next_meta_index = 0; -+ } -+ -+ for(i = SQUASHFS_META_NUMBER; i && -+ msblk->meta_index[msblk->next_meta_index].locked; i --) -+ msblk->next_meta_index = (msblk->next_meta_index + 1) % -+ SQUASHFS_META_NUMBER; -+ -+ if(i == 0) { -+ TRACE("empty_meta_index: failed!\n"); -+ goto failed; -+ } -+ -+ TRACE("empty_meta_index: returned meta entry %d, %p\n", -+ msblk->next_meta_index, -+ &msblk->meta_index[msblk->next_meta_index]); -+ -+ meta = &msblk->meta_index[msblk->next_meta_index]; -+ msblk->next_meta_index = (msblk->next_meta_index + 1) % -+ SQUASHFS_META_NUMBER; -+ -+ meta->inode_number = inode->i_ino; -+ meta->offset = offset; -+ meta->skip = skip; -+ meta->entries = 0; -+ meta->locked = 1; -+ -+failed: -+ mutex_unlock(&msblk->meta_index_mutex); -+ return meta; -+} -+ -+ -+void release_meta_index(struct inode *inode, struct meta_index *meta) -+{ -+ meta->locked = 0; -+ smp_mb(); -+} -+ -+ -+static int read_block_index(struct super_block *s, int blocks, char *block_list, -+ long long *start_block, int *offset) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ unsigned int *block_listp; -+ int block = 0; -+ -+ if (msblk->swap) { -+ char sblock_list[blocks << 2]; -+ -+ if (!squashfs_get_cached_block(s, sblock_list, *start_block, -+ *offset, blocks << 2, start_block, offset)) { -+ ERROR("Unable to read block list [%llx:%x]\n", -+ *start_block, *offset); -+ goto failure; -+ } -+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list), -+ ((unsigned int *)sblock_list), blocks); -+ } else -+ if (!squashfs_get_cached_block(s, block_list, *start_block, -+ *offset, blocks << 2, start_block, offset)) { -+ ERROR("Unable to read block list [%llx:%x]\n", -+ *start_block, *offset); -+ goto failure; -+ } -+ -+ for (block_listp = (unsigned int *) block_list; blocks; -+ block_listp++, blocks --) -+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp); -+ -+ return block; -+ -+failure: -+ return -1; -+} -+ -+ -+#define SIZE 256 -+ -+static inline int calculate_skip(int blocks) { -+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES); -+ return skip >= 7 ? 7 : skip + 1; -+} -+ -+ -+static int get_meta_index(struct inode *inode, int index, -+ long long *index_block, int *index_offset, -+ long long *data_block, char *block_list) -+{ -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log); -+ int offset = 0; -+ struct meta_index *meta; -+ struct meta_entry *meta_entry; -+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start; -+ int cur_offset = SQUASHFS_I(inode)->offset; -+ long long cur_data_block = SQUASHFS_I(inode)->start_block; -+ int i; -+ -+ index /= SQUASHFS_META_INDEXES * skip; -+ -+ while ( offset < index ) { -+ meta = locate_meta_index(inode, index, offset + 1); -+ -+ if (meta == NULL) { -+ if ((meta = empty_meta_index(inode, offset + 1, -+ skip)) == NULL) -+ goto all_done; -+ } else { -+ if(meta->entries == 0) -+ goto failed; -+ offset = index < meta->offset + meta->entries ? index : -+ meta->offset + meta->entries - 1; -+ meta_entry = &meta->meta_entry[offset - meta->offset]; -+ cur_index_block = meta_entry->index_block + sblk->inode_table_start; -+ cur_offset = meta_entry->offset; -+ cur_data_block = meta_entry->data_block; -+ TRACE("get_meta_index: offset %d, meta->offset %d, " -+ "meta->entries %d\n", offset, meta->offset, -+ meta->entries); -+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x" -+ " data_block 0x%llx\n", cur_index_block, -+ cur_offset, cur_data_block); -+ } -+ -+ for (i = meta->offset + meta->entries; i <= index && -+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) { -+ int blocks = skip * SQUASHFS_META_INDEXES; -+ -+ while (blocks) { -+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) : -+ blocks; -+ int res = read_block_index(inode->i_sb, block, -+ block_list, &cur_index_block, -+ &cur_offset); -+ -+ if (res == -1) -+ goto failed; -+ -+ cur_data_block += res; -+ blocks -= block; -+ } -+ -+ meta_entry = &meta->meta_entry[i - meta->offset]; -+ meta_entry->index_block = cur_index_block - sblk->inode_table_start; -+ meta_entry->offset = cur_offset; -+ meta_entry->data_block = cur_data_block; -+ meta->entries ++; -+ offset ++; -+ } -+ -+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n", -+ meta->offset, meta->entries); -+ -+ release_meta_index(inode, meta); -+ } -+ -+all_done: -+ *index_block = cur_index_block; -+ *index_offset = cur_offset; -+ *data_block = cur_data_block; -+ -+ return offset * SQUASHFS_META_INDEXES * skip; -+ -+failed: -+ release_meta_index(inode, meta); -+ return -1; -+} -+ -+ -+static long long read_blocklist(struct inode *inode, int index, -+ int readahead_blks, char *block_list, -+ unsigned short **block_p, unsigned int *bsize) -+{ -+ long long block_ptr; -+ int offset; -+ long long block; -+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block, -+ block_list); -+ -+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset" -+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset, -+ block); -+ -+ if(res == -1) -+ goto failure; -+ -+ index -= res; -+ -+ while ( index ) { -+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index; -+ int res = read_block_index(inode->i_sb, blocks, block_list, -+ &block_ptr, &offset); -+ if (res == -1) -+ goto failure; -+ block += res; -+ index -= blocks; -+ } -+ -+ if (read_block_index(inode->i_sb, 1, block_list, -+ &block_ptr, &offset) == -1) -+ goto failure; -+ *bsize = *((unsigned int *) block_list); -+ -+ return block; -+ -+failure: -+ return 0; -+} -+ -+ -+static int squashfs_readpage(struct file *file, struct page *page) -+{ -+ struct inode *inode = page->mapping->host; -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned char *block_list; -+ long long block; -+ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0; -+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT); -+ void *pageaddr; -+ struct squashfs_fragment_cache *fragment = NULL; -+ char *data_ptr = msblk->read_page; -+ -+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1; -+ int start_index = page->index & ~mask; -+ int end_index = start_index | mask; -+ -+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n", -+ page->index, -+ SQUASHFS_I(inode)->start_block); -+ -+ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) { -+ ERROR("Failed to allocate block_list\n"); -+ goto skip_read; -+ } -+ -+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> -+ PAGE_CACHE_SHIFT)) -+ goto skip_read; -+ -+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK -+ || index < (i_size_read(inode) >> -+ sblk->block_log)) { -+ if ((block = (msblk->read_blocklist)(inode, index, 1, -+ block_list, NULL, &bsize)) == 0) -+ goto skip_read; -+ -+ mutex_lock(&msblk->read_page_mutex); -+ -+ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page, -+ block, bsize, NULL, sblk->block_size))) { -+ ERROR("Unable to read page, block %llx, size %x\n", block, -+ bsize); -+ mutex_unlock(&msblk->read_page_mutex); -+ goto skip_read; -+ } -+ } else { -+ if ((fragment = get_cached_fragment(inode->i_sb, -+ SQUASHFS_I(inode)-> -+ u.s1.fragment_start_block, -+ SQUASHFS_I(inode)->u.s1.fragment_size)) -+ == NULL) { -+ ERROR("Unable to read page, block %llx, size %x\n", -+ SQUASHFS_I(inode)-> -+ u.s1.fragment_start_block, -+ (int) SQUASHFS_I(inode)-> -+ u.s1.fragment_size); -+ goto skip_read; -+ } -+ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset + -+ (i_size_read(inode) & (sblk->block_size -+ - 1)); -+ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset; -+ data_ptr = fragment->data; -+ } -+ -+ for (i = start_index; i <= end_index && byte_offset < bytes; -+ i++, byte_offset += PAGE_CACHE_SIZE) { -+ struct page *push_page; -+ int avail = (bytes - byte_offset) > PAGE_CACHE_SIZE ? -+ PAGE_CACHE_SIZE : bytes - byte_offset; -+ -+ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n", -+ bytes, i, byte_offset, avail); -+ -+ push_page = (i == page->index) ? page : -+ grab_cache_page_nowait(page->mapping, i); -+ -+ if (!push_page) -+ continue; -+ -+ if (PageUptodate(push_page)) -+ goto skip_page; -+ -+ pageaddr = kmap_atomic(push_page, KM_USER0); -+ memcpy(pageaddr, data_ptr + byte_offset, avail); -+ memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail); -+ kunmap_atomic(pageaddr, KM_USER0); -+ flush_dcache_page(push_page); -+ SetPageUptodate(push_page); -+skip_page: -+ unlock_page(push_page); -+ if(i != page->index) -+ page_cache_release(push_page); -+ } -+ -+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK -+ || index < (i_size_read(inode) >> -+ sblk->block_log)) -+ mutex_unlock(&msblk->read_page_mutex); -+ else -+ release_cached_fragment(msblk, fragment); -+ -+ kfree(block_list); -+ return 0; -+ -+skip_read: -+ pageaddr = kmap_atomic(page, KM_USER0); -+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); -+ kunmap_atomic(pageaddr, KM_USER0); -+ flush_dcache_page(page); -+ SetPageUptodate(page); -+ unlock_page(page); -+ -+ kfree(block_list); -+ return 0; -+} -+ -+ -+static int squashfs_readpage4K(struct file *file, struct page *page) -+{ -+ struct inode *inode = page->mapping->host; -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned char *block_list; -+ long long block; -+ unsigned int bsize, bytes = 0; -+ void *pageaddr; -+ -+ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n", -+ page->index, -+ SQUASHFS_I(inode)->start_block); -+ -+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> -+ PAGE_CACHE_SHIFT)) { -+ block_list = NULL; -+ goto skip_read; -+ } -+ -+ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) { -+ ERROR("Failed to allocate block_list\n"); -+ goto skip_read; -+ } -+ -+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK -+ || page->index < (i_size_read(inode) >> -+ sblk->block_log)) { -+ block = (msblk->read_blocklist)(inode, page->index, 1, -+ block_list, NULL, &bsize); -+ if(block == 0) -+ goto skip_read; -+ -+ mutex_lock(&msblk->read_page_mutex); -+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block, -+ bsize, NULL, sblk->block_size); -+ if (bytes) { -+ pageaddr = kmap_atomic(page, KM_USER0); -+ memcpy(pageaddr, msblk->read_page, bytes); -+ kunmap_atomic(pageaddr, KM_USER0); -+ } else -+ ERROR("Unable to read page, block %llx, size %x\n", -+ block, bsize); -+ mutex_unlock(&msblk->read_page_mutex); -+ } else { -+ struct squashfs_fragment_cache *fragment = -+ get_cached_fragment(inode->i_sb, -+ SQUASHFS_I(inode)-> -+ u.s1.fragment_start_block, -+ SQUASHFS_I(inode)-> u.s1.fragment_size); -+ if (fragment) { -+ bytes = i_size_read(inode) & (sblk->block_size - 1); -+ pageaddr = kmap_atomic(page, KM_USER0); -+ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)-> -+ u.s1.fragment_offset, bytes); -+ kunmap_atomic(pageaddr, KM_USER0); -+ release_cached_fragment(msblk, fragment); -+ } else -+ ERROR("Unable to read page, block %llx, size %x\n", -+ SQUASHFS_I(inode)-> -+ u.s1.fragment_start_block, (int) -+ SQUASHFS_I(inode)-> u.s1.fragment_size); -+ } -+ -+skip_read: -+ pageaddr = kmap_atomic(page, KM_USER0); -+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); -+ kunmap_atomic(pageaddr, KM_USER0); -+ flush_dcache_page(page); -+ SetPageUptodate(page); -+ unlock_page(page); -+ -+ kfree(block_list); -+ return 0; -+} -+ -+ -+static int get_dir_index_using_offset(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ long long f_pos) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index index; -+ -+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", -+ i_count, (unsigned int) f_pos); -+ -+ f_pos =- 3; -+ if (f_pos == 0) -+ goto finish; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) &index, -+ index_start, index_offset, -+ sizeof(index), &index_start, -+ &index_offset); -+ -+ if (index.index > f_pos) -+ break; -+ -+ squashfs_get_cached_block(s, NULL, index_start, index_offset, -+ index.size + 1, &index_start, -+ &index_offset); -+ -+ length = index.index; -+ *next_block = index.start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ -+finish: -+ return length + 3; -+} -+ -+ -+static int get_dir_index_using_name(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ const char *name, int size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index *index; -+ char *str; -+ -+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); -+ -+ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + -+ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_index\n"); -+ goto failure; -+ } -+ -+ index = (struct squashfs_dir_index *) (str + SQUASHFS_NAME_LEN + 1); -+ strncpy(str, name, size); -+ str[size] = '\0'; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) index, -+ index_start, index_offset, -+ sizeof(struct squashfs_dir_index), -+ &index_start, &index_offset); -+ -+ squashfs_get_cached_block(s, index->name, index_start, -+ index_offset, index->size + 1, -+ &index_start, &index_offset); -+ -+ index->name[index->size + 1] = '\0'; -+ -+ if (strcmp(index->name, str) > 0) -+ break; -+ -+ length = index->index; -+ *next_block = index->start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ kfree(str); -+failure: -+ return length + 3; -+} -+ -+ -+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir) -+{ -+ struct inode *i = file->f_dentry->d_inode; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header dirh; -+ struct squashfs_dir_entry *dire; -+ -+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto finish; -+ } -+ -+ while(file->f_pos < 3) { -+ char *name; -+ int size, i_ino; -+ -+ if(file->f_pos == 0) { -+ name = "."; -+ size = 1; -+ i_ino = i->i_ino; -+ } else { -+ name = ".."; -+ size = 2; -+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode; -+ } -+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n", -+ (unsigned int) dirent, name, size, (int) -+ file->f_pos, i_ino, -+ squashfs_filetype_table[1]); -+ -+ if (filldir(dirent, name, size, -+ file->f_pos, i_ino, -+ squashfs_filetype_table[1]) < 0) { -+ TRACE("Filldir returned less than 0\n"); -+ goto finish; -+ } -+ file->f_pos += size; -+ } -+ -+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, -+ file->f_pos); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header sdirh; -+ -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block, next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block, next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, -+ dire->size + 1, &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (file->f_pos >= length) -+ continue; -+ -+ dire->name[dire->size + 1] = '\0'; -+ -+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n", -+ (unsigned int) dirent, dire->name, -+ dire->size + 1, (int) file->f_pos, -+ dirh.start_block, dire->offset, -+ dirh.inode_number + dire->inode_number, -+ squashfs_filetype_table[dire->type]); -+ -+ if (filldir(dirent, dire->name, dire->size + 1, -+ file->f_pos, -+ dirh.inode_number + dire->inode_number, -+ squashfs_filetype_table[dire->type]) -+ < 0) { -+ TRACE("Filldir returned less than 0\n"); -+ goto finish; -+ } -+ file->f_pos = length; -+ } -+ } -+ -+finish: -+ kfree(dire); -+ return 0; -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ kfree(dire); -+ return 0; -+} -+ -+ -+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry, -+ struct nameidata *nd) -+{ -+ const unsigned char *name = dentry->d_name.name; -+ int len = dentry->d_name.len; -+ struct inode *inode = NULL; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header dirh; -+ struct squashfs_dir_entry *dire; -+ -+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto exit_lookup; -+ } -+ -+ if (len > SQUASHFS_NAME_LEN) -+ goto exit_lookup; -+ -+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, name, -+ len); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header sdirh; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block,next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block,next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, dire->size + 1, -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (name[0] < dire->name[0]) -+ goto exit_lookup; -+ -+ if ((len == dire->size + 1) && !strncmp(name, dire->name, len)) { -+ squashfs_inode_t ino = SQUASHFS_MKINODE(dirh.start_block, -+ dire->offset); -+ -+ TRACE("calling squashfs_iget for directory " -+ "entry %s, inode %x:%x, %d\n", name, -+ dirh.start_block, dire->offset, -+ dirh.inode_number + dire->inode_number); -+ -+ inode = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number); -+ -+ goto exit_lookup; -+ } -+ } -+ } -+ -+exit_lookup: -+ kfree(dire); -+ if (inode) -+ return d_splice_alias(inode, dentry); -+ d_add(dentry, inode); -+ return ERR_PTR(0); -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ goto exit_lookup; -+} -+ -+ -+static int squashfs_remount(struct super_block *s, int *flags, char *data) -+{ -+ *flags |= MS_RDONLY; -+ return 0; -+} -+ -+ -+static void squashfs_put_super(struct super_block *s) -+{ -+ int i; -+ -+ if (s->s_fs_info) { -+ struct squashfs_sb_info *sbi = s->s_fs_info; -+ if (sbi->block_cache) -+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) -+ if (sbi->block_cache[i].block != -+ SQUASHFS_INVALID_BLK) -+ kfree(sbi->block_cache[i].data); -+ if (sbi->fragment) -+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) -+ SQUASHFS_FREE(sbi->fragment[i].data); -+ kfree(sbi->fragment); -+ kfree(sbi->block_cache); -+ kfree(sbi->read_page); -+ kfree(sbi->uid); -+ kfree(sbi->fragment_index); -+ kfree(sbi->fragment_index_2); -+ kfree(sbi->meta_index); -+ vfree(sbi->stream.workspace); -+ kfree(s->s_fs_info); -+ s->s_fs_info = NULL; -+ } -+} -+ -+ -+static int squashfs_get_sb(struct file_system_type *fs_type, int flags, -+ const char *dev_name, void *data, -+ struct vfsmount *mnt) -+{ -+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, -+ mnt); -+} -+ -+ -+static int __init init_squashfs_fs(void) -+{ -+ int err = init_inodecache(); -+ if (err) -+ goto out; -+ -+ printk(KERN_INFO "squashfs: version 3.2-r2 (2007/01/15) " -+ "Phillip Lougher\n"); -+ -+ if ((err = register_filesystem(&squashfs_fs_type))) -+ destroy_inodecache(); -+ -+out: -+ return err; -+} -+ -+ -+static void __exit exit_squashfs_fs(void) -+{ -+ unregister_filesystem(&squashfs_fs_type); -+ destroy_inodecache(); -+} -+ -+ -+static struct kmem_cache * squashfs_inode_cachep; -+ -+ -+static struct inode *squashfs_alloc_inode(struct super_block *sb) -+{ -+ struct squashfs_inode_info *ei; -+ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL); -+ if (!ei) -+ return NULL; -+ return &ei->vfs_inode; -+} -+ -+ -+static void squashfs_destroy_inode(struct inode *inode) -+{ -+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode)); -+} -+ -+ -+static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) -+{ -+ struct squashfs_inode_info *ei = foo; -+ -+ inode_init_once(&ei->vfs_inode); -+} -+ -+ -+static int __init init_inodecache(void) -+{ -+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache", -+ sizeof(struct squashfs_inode_info), -+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, -+ init_once); -+ if (squashfs_inode_cachep == NULL) -+ return -ENOMEM; -+ return 0; -+} -+ -+ -+static void destroy_inodecache(void) -+{ -+ kmem_cache_destroy(squashfs_inode_cachep); -+} -+ -+ -+module_init(init_squashfs_fs); -+module_exit(exit_squashfs_fs); -+MODULE_DESCRIPTION("squashfs 3.2-r2, a compressed read-only filesystem"); -+MODULE_AUTHOR("Phillip Lougher "); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.22/fs/squashfs/Makefile -=================================================================== ---- /dev/null -+++ linux-2.6.22/fs/squashfs/Makefile -@@ -0,0 +1,7 @@ -+# -+# Makefile for the linux squashfs routines. -+# -+ -+obj-$(CONFIG_SQUASHFS) += squashfs.o -+squashfs-y += inode.o -+squashfs-y += squashfs2_0.o -Index: linux-2.6.22/fs/squashfs/squashfs2_0.c -=================================================================== ---- /dev/null -+++ linux-2.6.22/fs/squashfs/squashfs2_0.c -@@ -0,0 +1,742 @@ -+/* -+ * Squashfs - a compressed read only filesystem for Linux -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs2_0.c -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "squashfs.h" -+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir); -+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *, -+ struct nameidata *); -+ -+static struct file_operations squashfs_dir_ops_2 = { -+ .read = generic_read_dir, -+ .readdir = squashfs_readdir_2 -+}; -+ -+static struct inode_operations squashfs_dir_inode_ops_2 = { -+ .lookup = squashfs_lookup_2 -+}; -+ -+static unsigned char squashfs_filetype_table[] = { -+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK -+}; -+ -+static int read_fragment_index_table_2(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2 -+ (sblk->fragments), GFP_KERNEL))) { -+ ERROR("Failed to allocate uid/gid table\n"); -+ return 0; -+ } -+ -+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) && -+ !squashfs_read_data(s, (char *) -+ msblk->fragment_index_2, -+ sblk->fragment_table_start, -+ SQUASHFS_FRAGMENT_INDEX_BYTES_2 -+ (sblk->fragments) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) { -+ ERROR("unable to read fragment index table\n"); -+ return 0; -+ } -+ -+ if (msblk->swap) { -+ int i; -+ unsigned int fragment; -+ -+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments); -+ i++) { -+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment), -+ &msblk->fragment_index_2[i], 1); -+ msblk->fragment_index_2[i] = fragment; -+ } -+ } -+ -+ return 1; -+} -+ -+ -+static int get_fragment_location_2(struct super_block *s, unsigned int fragment, -+ long long *fragment_start_block, -+ unsigned int *fragment_size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ long long start_block = -+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)]; -+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment); -+ struct squashfs_fragment_entry_2 fragment_entry; -+ -+ if (msblk->swap) { -+ struct squashfs_fragment_entry_2 sfragment_entry; -+ -+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, -+ start_block, offset, -+ sizeof(sfragment_entry), &start_block, -+ &offset)) -+ goto out; -+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, -+ start_block, offset, -+ sizeof(fragment_entry), &start_block, -+ &offset)) -+ goto out; -+ -+ *fragment_start_block = fragment_entry.start_block; -+ *fragment_size = fragment_entry.size; -+ -+ return 1; -+ -+out: -+ return 0; -+} -+ -+ -+static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, -+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino) -+{ -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ i->i_ino = ino; -+ i->i_mtime.tv_sec = sblk->mkfs_time; -+ i->i_atime.tv_sec = sblk->mkfs_time; -+ i->i_ctime.tv_sec = sblk->mkfs_time; -+ i->i_uid = msblk->uid[inodeb->uid]; -+ i->i_mode = inodeb->mode; -+ i->i_nlink = 1; -+ i->i_size = 0; -+ if (inodeb->guid == SQUASHFS_GUIDS) -+ i->i_gid = i->i_uid; -+ else -+ i->i_gid = msblk->guid[inodeb->guid]; -+} -+ -+ -+static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode) -+{ -+ struct super_block *s = i->i_sb; -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned int block = SQUASHFS_INODE_BLK(inode) + -+ sblk->inode_table_start; -+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); -+ unsigned int ino = i->i_ino; -+ long long next_block; -+ unsigned int next_offset; -+ union squashfs_inode_header_2 id, sid; -+ struct squashfs_base_inode_header_2 *inodeb = &id.base, -+ *sinodeb = &sid.base; -+ -+ TRACE("Entered squashfs_iget\n"); -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, -+ offset, sizeof(*sinodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb, -+ sizeof(*sinodeb)); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) inodeb, block, -+ offset, sizeof(*inodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ squashfs_new_inode(msblk, i, inodeb, ino); -+ -+ switch(inodeb->inode_type) { -+ case SQUASHFS_FILE_TYPE: { -+ struct squashfs_reg_inode_header_2 *inodep = &id.reg; -+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg; -+ long long frag_blk; -+ unsigned int frag_size = 0; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ frag_blk = SQUASHFS_INVALID_BLK; -+ if (inodep->fragment != SQUASHFS_INVALID_FRAG && -+ !get_fragment_location_2(s, -+ inodep->fragment, &frag_blk, &frag_size)) -+ goto failed_read; -+ -+ i->i_size = inodep->file_size; -+ i->i_fop = &generic_ro_fops; -+ i->i_mode |= S_IFREG; -+ i->i_mtime.tv_sec = inodep->mtime; -+ i->i_atime.tv_sec = inodep->mtime; -+ i->i_ctime.tv_sec = inodep->mtime; -+ i->i_blocks = ((i->i_size - 1) >> 9) + 1; -+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; -+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; -+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->u.s1.block_list_start = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ if (sblk->block_size > 4096) -+ i->i_data.a_ops = &squashfs_aops; -+ else -+ i->i_data.a_ops = &squashfs_aops_4K; -+ -+ TRACE("File inode %x:%x, start_block %x, " -+ "block_list_start %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, next_block, -+ next_offset); -+ break; -+ } -+ case SQUASHFS_DIR_TYPE: { -+ struct squashfs_dir_inode_header_2 *inodep = &id.dir; -+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops_2; -+ i->i_fop = &squashfs_dir_ops_2; -+ i->i_mode |= S_IFDIR; -+ i->i_mtime.tv_sec = inodep->mtime; -+ i->i_atime.tv_sec = inodep->mtime; -+ i->i_ctime.tv_sec = inodep->mtime; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = 0; -+ SQUASHFS_I(i)->u.s2.parent_inode = 0; -+ -+ TRACE("Directory inode %x:%x, start_block %x, offset " -+ "%x\n", SQUASHFS_INODE_BLK(inode), -+ offset, inodep->start_block, -+ inodep->offset); -+ break; -+ } -+ case SQUASHFS_LDIR_TYPE: { -+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir; -+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops_2; -+ i->i_fop = &squashfs_dir_ops_2; -+ i->i_mode |= S_IFDIR; -+ i->i_mtime.tv_sec = inodep->mtime; -+ i->i_atime.tv_sec = inodep->mtime; -+ i->i_ctime.tv_sec = inodep->mtime; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; -+ SQUASHFS_I(i)->u.s2.directory_index_offset = -+ next_offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = -+ inodep->i_count; -+ SQUASHFS_I(i)->u.s2.parent_inode = 0; -+ -+ TRACE("Long directory inode %x:%x, start_block %x, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, inodep->offset); -+ break; -+ } -+ case SQUASHFS_SYMLINK_TYPE: { -+ struct squashfs_symlink_inode_header_2 *inodep = -+ &id.symlink; -+ struct squashfs_symlink_inode_header_2 *sinodep = -+ &sid.symlink; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_size = inodep->symlink_size; -+ i->i_op = &page_symlink_inode_operations; -+ i->i_data.a_ops = &squashfs_symlink_aops; -+ i->i_mode |= S_IFLNK; -+ SQUASHFS_I(i)->start_block = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ -+ TRACE("Symbolic link inode %x:%x, start_block %llx, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ next_block, next_offset); -+ break; -+ } -+ case SQUASHFS_BLKDEV_TYPE: -+ case SQUASHFS_CHRDEV_TYPE: { -+ struct squashfs_dev_inode_header_2 *inodep = &id.dev; -+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_mode |= (inodeb->inode_type == -+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : -+ S_IFBLK; -+ init_special_inode(i, i->i_mode, -+ old_decode_dev(inodep->rdev)); -+ -+ TRACE("Device inode %x:%x, rdev %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->rdev); -+ break; -+ } -+ case SQUASHFS_FIFO_TYPE: -+ case SQUASHFS_SOCKET_TYPE: { -+ -+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) -+ ? S_IFIFO : S_IFSOCK; -+ init_special_inode(i, i->i_mode, 0); -+ break; -+ } -+ default: -+ ERROR("Unknown inode type %d in squashfs_iget!\n", -+ inodeb->inode_type); -+ goto failed_read1; -+ } -+ -+ return 1; -+ -+failed_read: -+ ERROR("Unable to read inode [%x:%x]\n", block, offset); -+ -+failed_read1: -+ return 0; -+} -+ -+ -+static int get_dir_index_using_offset(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ long long f_pos) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index_2 index; -+ -+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", -+ i_count, (unsigned int) f_pos); -+ -+ if (f_pos == 0) -+ goto finish; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index_2 sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) &index, -+ index_start, index_offset, -+ sizeof(index), &index_start, -+ &index_offset); -+ -+ if (index.index > f_pos) -+ break; -+ -+ squashfs_get_cached_block(s, NULL, index_start, index_offset, -+ index.size + 1, &index_start, -+ &index_offset); -+ -+ length = index.index; -+ *next_block = index.start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ -+finish: -+ return length; -+} -+ -+ -+static int get_dir_index_using_name(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ const char *name, int size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index_2 *index; -+ char *str; -+ -+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); -+ -+ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + -+ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_index\n"); -+ goto failure; -+ } -+ -+ index = (struct squashfs_dir_index_2 *) (str + SQUASHFS_NAME_LEN + 1); -+ strncpy(str, name, size); -+ str[size] = '\0'; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index_2 sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) index, -+ index_start, index_offset, -+ sizeof(struct squashfs_dir_index_2), -+ &index_start, &index_offset); -+ -+ squashfs_get_cached_block(s, index->name, index_start, -+ index_offset, index->size + 1, -+ &index_start, &index_offset); -+ -+ index->name[index->size + 1] = '\0'; -+ -+ if (strcmp(index->name, str) > 0) -+ break; -+ -+ length = index->index; -+ *next_block = index->start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ kfree(str); -+failure: -+ return length; -+} -+ -+ -+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir) -+{ -+ struct inode *i = file->f_dentry->d_inode; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header_2 dirh; -+ struct squashfs_dir_entry_2 *dire; -+ -+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto finish; -+ } -+ -+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, -+ file->f_pos); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header_2 sdirh; -+ -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry_2 sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block, next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block, next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, -+ dire->size + 1, &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (file->f_pos >= length) -+ continue; -+ -+ dire->name[dire->size + 1] = '\0'; -+ -+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n", -+ (unsigned int) dirent, dire->name, -+ dire->size + 1, (int) file->f_pos, -+ dirh.start_block, dire->offset, -+ squashfs_filetype_table[dire->type]); -+ -+ if (filldir(dirent, dire->name, dire->size + 1, -+ file->f_pos, SQUASHFS_MK_VFS_INODE( -+ dirh.start_block, dire->offset), -+ squashfs_filetype_table[dire->type]) -+ < 0) { -+ TRACE("Filldir returned less than 0\n"); -+ goto finish; -+ } -+ file->f_pos = length; -+ } -+ } -+ -+finish: -+ kfree(dire); -+ return 0; -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ kfree(dire); -+ return 0; -+} -+ -+ -+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry, -+ struct nameidata *nd) -+{ -+ const unsigned char *name = dentry->d_name.name; -+ int len = dentry->d_name.len; -+ struct inode *inode = NULL; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header_2 dirh; -+ struct squashfs_dir_entry_2 *dire; -+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1; -+ -+ TRACE("Entered squashfs_lookup_2 [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto exit_loop; -+ } -+ -+ if (len > SQUASHFS_NAME_LEN) -+ goto exit_loop; -+ -+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, name, -+ len); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header_2 sdirh; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry_2 sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block,next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block,next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, dire->size + 1, -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (sorted && name[0] < dire->name[0]) -+ goto exit_loop; -+ -+ if ((len == dire->size + 1) && !strncmp(name, -+ dire->name, len)) { -+ squashfs_inode_t ino = -+ SQUASHFS_MKINODE(dirh.start_block, -+ dire->offset); -+ unsigned int inode_number = SQUASHFS_MK_VFS_INODE(dirh.start_block, -+ dire->offset); -+ -+ TRACE("calling squashfs_iget for directory " -+ "entry %s, inode %x:%x, %lld\n", name, -+ dirh.start_block, dire->offset, ino); -+ -+ inode = squashfs_iget(i->i_sb, ino, inode_number); -+ -+ goto exit_loop; -+ } -+ } -+ } -+ -+exit_loop: -+ kfree(dire); -+ d_add(dentry, inode); -+ return ERR_PTR(0); -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ goto exit_loop; -+} -+ -+ -+int squashfs_2_0_supported(struct squashfs_sb_info *msblk) -+{ -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ msblk->read_inode = squashfs_read_inode_2; -+ msblk->read_fragment_index_table = read_fragment_index_table_2; -+ -+ sblk->bytes_used = sblk->bytes_used_2; -+ sblk->uid_start = sblk->uid_start_2; -+ sblk->guid_start = sblk->guid_start_2; -+ sblk->inode_table_start = sblk->inode_table_start_2; -+ sblk->directory_table_start = sblk->directory_table_start_2; -+ sblk->fragment_table_start = sblk->fragment_table_start_2; -+ -+ return 1; -+} -Index: linux-2.6.22/fs/squashfs/squashfs.h -=================================================================== ---- /dev/null -+++ linux-2.6.22/fs/squashfs/squashfs.h -@@ -0,0 +1,87 @@ -+/* -+ * Squashfs - a compressed read only filesystem for Linux -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs.h -+ */ -+ -+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+#endif -+ -+#ifdef SQUASHFS_TRACE -+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args) -+#else -+#define TRACE(s, args...) {} -+#endif -+ -+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args) -+ -+#define SERROR(s, args...) do { \ -+ if (!silent) \ -+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\ -+ } while(0) -+ -+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args) -+ -+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode) -+{ -+ return list_entry(inode, struct squashfs_inode_info, vfs_inode); -+} -+ -+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY) -+#define SQSH_EXTERN -+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer, -+ long long index, unsigned int length, -+ long long *next_index, int srclength); -+extern int squashfs_get_cached_block(struct super_block *s, char *buffer, -+ long long block, unsigned int offset, -+ int length, long long *next_block, -+ unsigned int *next_offset); -+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct -+ squashfs_fragment_cache *fragment); -+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block -+ *s, long long start_block, -+ int length); -+extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number); -+extern const struct address_space_operations squashfs_symlink_aops; -+extern const struct address_space_operations squashfs_aops; -+extern const struct address_space_operations squashfs_aops_4K; -+extern struct inode_operations squashfs_dir_inode_ops; -+#else -+#define SQSH_EXTERN static -+#endif -+ -+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk); -+#else -+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk) -+{ -+ return 0; -+} -+#endif -+ -+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY -+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk); -+#else -+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk) -+{ -+ return 0; -+} -+#endif -Index: linux-2.6.22/include/linux/squashfs_fs.h -=================================================================== ---- /dev/null -+++ linux-2.6.22/include/linux/squashfs_fs.h -@@ -0,0 +1,934 @@ -+#ifndef SQUASHFS_FS -+#define SQUASHFS_FS -+ -+/* -+ * Squashfs -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs_fs.h -+ */ -+ -+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY -+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY -+#endif -+ -+#ifdef CONFIG_SQUASHFS_VMALLOC -+#define SQUASHFS_ALLOC(a) vmalloc(a) -+#define SQUASHFS_FREE(a) vfree(a) -+#else -+#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL) -+#define SQUASHFS_FREE(a) kfree(a) -+#endif -+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE -+#define SQUASHFS_MAJOR 3 -+#define SQUASHFS_MINOR 0 -+#define SQUASHFS_MAGIC 0x73717368 -+#define SQUASHFS_MAGIC_SWAP 0x68737173 -+#define SQUASHFS_START 0 -+ -+/* size of metadata (inode and directory) blocks */ -+#define SQUASHFS_METADATA_SIZE 8192 -+#define SQUASHFS_METADATA_LOG 13 -+ -+/* default size of data blocks */ -+#define SQUASHFS_FILE_SIZE 65536 -+#define SQUASHFS_FILE_LOG 16 -+ -+#define SQUASHFS_FILE_MAX_SIZE 65536 -+ -+/* Max number of uids and gids */ -+#define SQUASHFS_UIDS 256 -+#define SQUASHFS_GUIDS 255 -+ -+/* Max length of filename (not 255) */ -+#define SQUASHFS_NAME_LEN 256 -+ -+#define SQUASHFS_INVALID ((long long) 0xffffffffffff) -+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff) -+#define SQUASHFS_INVALID_BLK ((long long) -1) -+#define SQUASHFS_USED_BLK ((long long) -2) -+ -+/* Filesystem flags */ -+#define SQUASHFS_NOI 0 -+#define SQUASHFS_NOD 1 -+#define SQUASHFS_CHECK 2 -+#define SQUASHFS_NOF 3 -+#define SQUASHFS_NO_FRAG 4 -+#define SQUASHFS_ALWAYS_FRAG 5 -+#define SQUASHFS_DUPLICATE 6 -+#define SQUASHFS_EXPORT 7 -+ -+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1) -+ -+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NOI) -+ -+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NOD) -+ -+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NOF) -+ -+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NO_FRAG) -+ -+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_ALWAYS_FRAG) -+ -+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_DUPLICATE) -+ -+#define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_EXPORT) -+ -+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_CHECK) -+ -+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \ -+ duplicate_checking, exortable) (noi | (nod << 1) | (check_data << 2) \ -+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \ -+ (duplicate_checking << 6) | (exportable << 7)) -+ -+/* Max number of types and file types */ -+#define SQUASHFS_DIR_TYPE 1 -+#define SQUASHFS_FILE_TYPE 2 -+#define SQUASHFS_SYMLINK_TYPE 3 -+#define SQUASHFS_BLKDEV_TYPE 4 -+#define SQUASHFS_CHRDEV_TYPE 5 -+#define SQUASHFS_FIFO_TYPE 6 -+#define SQUASHFS_SOCKET_TYPE 7 -+#define SQUASHFS_LDIR_TYPE 8 -+#define SQUASHFS_LREG_TYPE 9 -+ -+/* 1.0 filesystem type definitions */ -+#define SQUASHFS_TYPES 5 -+#define SQUASHFS_IPC_TYPE 0 -+ -+/* Flag whether block is compressed or uncompressed, bit is set if block is -+ * uncompressed */ -+#define SQUASHFS_COMPRESSED_BIT (1 << 15) -+ -+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \ -+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT) -+ -+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT)) -+ -+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24) -+ -+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \ -+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \ -+ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK) -+ -+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) -+ -+/* -+ * Inode number ops. Inodes consist of a compressed block number, and an -+ * uncompressed offset within that block -+ */ -+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16)) -+ -+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff)) -+ -+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\ -+ << 16) + (B))) -+ -+/* Compute 32 bit VFS inode number from squashfs inode number */ -+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \ -+ ((b) >> 2) + 1)) -+/* XXX */ -+ -+/* Translate between VFS mode and squashfs mode */ -+#define SQUASHFS_MODE(a) ((a) & 0xfff) -+ -+/* fragment and fragment table defines */ -+#define SQUASHFS_FRAGMENT_BYTES(A) ((A) * sizeof(struct squashfs_fragment_entry)) -+ -+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \ -+ SQUASHFS_METADATA_SIZE - 1) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\ -+ sizeof(long long)) -+ -+/* inode lookup table defines */ -+#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode_t)) -+ -+#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \ -+ SQUASHFS_METADATA_SIZE - 1) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\ -+ sizeof(long long)) -+ -+/* cached data constants for filesystem */ -+#define SQUASHFS_CACHED_BLKS 8 -+ -+#define SQUASHFS_MAX_FILE_SIZE_LOG 64 -+ -+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \ -+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2)) -+ -+#define SQUASHFS_MARKER_BYTE 0xff -+ -+/* meta index cache */ -+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int)) -+#define SQUASHFS_META_ENTRIES 31 -+#define SQUASHFS_META_NUMBER 8 -+#define SQUASHFS_SLOTS 4 -+ -+struct meta_entry { -+ long long data_block; -+ unsigned int index_block; -+ unsigned short offset; -+ unsigned short pad; -+}; -+ -+struct meta_index { -+ unsigned int inode_number; -+ unsigned int offset; -+ unsigned short entries; -+ unsigned short skip; -+ unsigned short locked; -+ unsigned short pad; -+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES]; -+}; -+ -+ -+/* -+ * definitions for structures on disk -+ */ -+ -+typedef long long squashfs_block_t; -+typedef long long squashfs_inode_t; -+ -+struct squashfs_super_block { -+ unsigned int s_magic; -+ unsigned int inodes; -+ unsigned int bytes_used_2; -+ unsigned int uid_start_2; -+ unsigned int guid_start_2; -+ unsigned int inode_table_start_2; -+ unsigned int directory_table_start_2; -+ unsigned int s_major:16; -+ unsigned int s_minor:16; -+ unsigned int block_size_1:16; -+ unsigned int block_log:16; -+ unsigned int flags:8; -+ unsigned int no_uids:8; -+ unsigned int no_guids:8; -+ unsigned int mkfs_time /* time of filesystem creation */; -+ squashfs_inode_t root_inode; -+ unsigned int block_size; -+ unsigned int fragments; -+ unsigned int fragment_table_start_2; -+ long long bytes_used; -+ long long uid_start; -+ long long guid_start; -+ long long inode_table_start; -+ long long directory_table_start; -+ long long fragment_table_start; -+ long long lookup_table_start; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_index { -+ unsigned int index; -+ unsigned int start_block; -+ unsigned char size; -+ unsigned char name[0]; -+} __attribute__ ((packed)); -+ -+#define SQUASHFS_BASE_INODE_HEADER \ -+ unsigned int inode_type:4; \ -+ unsigned int mode:12; \ -+ unsigned int uid:8; \ -+ unsigned int guid:8; \ -+ unsigned int mtime; \ -+ unsigned int inode_number; -+ -+struct squashfs_base_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+} __attribute__ ((packed)); -+ -+struct squashfs_ipc_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+} __attribute__ ((packed)); -+ -+struct squashfs_dev_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned short rdev; -+} __attribute__ ((packed)); -+ -+struct squashfs_symlink_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned short symlink_size; -+ char symlink[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_reg_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ squashfs_block_t start_block; -+ unsigned int fragment; -+ unsigned int offset; -+ unsigned int file_size; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_lreg_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ squashfs_block_t start_block; -+ unsigned int fragment; -+ unsigned int offset; -+ long long file_size; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned int file_size:19; -+ unsigned int offset:13; -+ unsigned int start_block; -+ unsigned int parent_inode; -+} __attribute__ ((packed)); -+ -+struct squashfs_ldir_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned int file_size:27; -+ unsigned int offset:13; -+ unsigned int start_block; -+ unsigned int i_count:16; -+ unsigned int parent_inode; -+ struct squashfs_dir_index index[0]; -+} __attribute__ ((packed)); -+ -+union squashfs_inode_header { -+ struct squashfs_base_inode_header base; -+ struct squashfs_dev_inode_header dev; -+ struct squashfs_symlink_inode_header symlink; -+ struct squashfs_reg_inode_header reg; -+ struct squashfs_lreg_inode_header lreg; -+ struct squashfs_dir_inode_header dir; -+ struct squashfs_ldir_inode_header ldir; -+ struct squashfs_ipc_inode_header ipc; -+}; -+ -+struct squashfs_dir_entry { -+ unsigned int offset:13; -+ unsigned int type:3; -+ unsigned int size:8; -+ int inode_number:16; -+ char name[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_header { -+ unsigned int count:8; -+ unsigned int start_block; -+ unsigned int inode_number; -+} __attribute__ ((packed)); -+ -+struct squashfs_fragment_entry { -+ long long start_block; -+ unsigned int size; -+ unsigned int pending; -+} __attribute__ ((packed)); -+ -+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen); -+extern int squashfs_uncompress_init(void); -+extern int squashfs_uncompress_exit(void); -+ -+/* -+ * macros to convert each packed bitfield structure from little endian to big -+ * endian and vice versa. These are needed when creating or using a filesystem -+ * on a machine with different byte ordering to the target architecture. -+ * -+ */ -+ -+#define SQUASHFS_SWAP_START \ -+ int bits;\ -+ int b_pos;\ -+ unsigned long long val;\ -+ unsigned char *s;\ -+ unsigned char *d; -+ -+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\ -+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\ -+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\ -+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\ -+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\ -+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\ -+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\ -+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\ -+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\ -+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\ -+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\ -+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\ -+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\ -+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\ -+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\ -+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\ -+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\ -+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\ -+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\ -+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\ -+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\ -+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\ -+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\ -+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\ -+ SQUASHFS_SWAP((s)->lookup_table_start, d, 888, 64);\ -+} -+ -+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ -+ SQUASHFS_MEMSET(s, d, n);\ -+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ -+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ -+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ -+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ -+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32); -+ -+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ -+} -+ -+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_ipc_inode_header))\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_dev_inode_header)); \ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\ -+} -+ -+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_symlink_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\ -+} -+ -+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_reg_inode_header));\ -+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\ -+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\ -+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\ -+} -+ -+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_lreg_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\ -+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\ -+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_dir_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\ -+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\ -+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\ -+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\ -+} -+ -+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_ldir_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\ -+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\ -+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\ -+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\ -+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\ -+ SQUASHFS_SWAP((s)->index, d, 0, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->size, d, 64, 8);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\ -+ SQUASHFS_SWAP((s)->count, d, 0, 8);\ -+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\ -+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\ -+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ -+ SQUASHFS_SWAP((s)->type, d, 13, 3);\ -+ SQUASHFS_SWAP((s)->size, d, 16, 8);\ -+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\ -+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\ -+ SQUASHFS_SWAP((s)->size, d, 64, 32);\ -+} -+ -+#define SQUASHFS_SWAP_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1) -+ -+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * 2);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ 16)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\ -+} -+ -+#define SQUASHFS_SWAP_INTS(s, d, n) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * 4);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ 32)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\ -+} -+ -+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * 8);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ 64)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\ -+} -+ -+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * bits / 8);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ bits)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) -+#define SQUASHFS_SWAP_LOOKUP_BLOCKS(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) -+ -+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+ -+struct squashfs_base_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+} __attribute__ ((packed)); -+ -+struct squashfs_ipc_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned int type:4; -+ unsigned int offset:4; -+} __attribute__ ((packed)); -+ -+struct squashfs_dev_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned short rdev; -+} __attribute__ ((packed)); -+ -+struct squashfs_symlink_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned short symlink_size; -+ char symlink[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_reg_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned int mtime; -+ unsigned int start_block; -+ unsigned int file_size:32; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned int file_size:19; -+ unsigned int offset:13; -+ unsigned int mtime; -+ unsigned int start_block:24; -+} __attribute__ ((packed)); -+ -+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \ -+ SQUASHFS_MEMSET(s, d, n);\ -+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ -+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ -+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\ -+ SQUASHFS_SWAP((s)->guid, d, 20, 4); -+ -+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\ -+} -+ -+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_ipc_inode_header_1));\ -+ SQUASHFS_SWAP((s)->type, d, 24, 4);\ -+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\ -+} -+ -+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_dev_inode_header_1));\ -+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\ -+} -+ -+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_symlink_inode_header_1));\ -+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\ -+} -+ -+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_reg_inode_header_1));\ -+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_dir_inode_header_1));\ -+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\ -+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\ -+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\ -+} -+ -+#endif -+ -+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY -+ -+struct squashfs_dir_index_2 { -+ unsigned int index:27; -+ unsigned int start_block:29; -+ unsigned char size; -+ unsigned char name[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_base_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+} __attribute__ ((packed)); -+ -+struct squashfs_ipc_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+} __attribute__ ((packed)); -+ -+struct squashfs_dev_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned short rdev; -+} __attribute__ ((packed)); -+ -+struct squashfs_symlink_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned short symlink_size; -+ char symlink[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_reg_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned int mtime; -+ unsigned int start_block; -+ unsigned int fragment; -+ unsigned int offset; -+ unsigned int file_size:32; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned int file_size:19; -+ unsigned int offset:13; -+ unsigned int mtime; -+ unsigned int start_block:24; -+} __attribute__ ((packed)); -+ -+struct squashfs_ldir_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned int file_size:27; -+ unsigned int offset:13; -+ unsigned int mtime; -+ unsigned int start_block:24; -+ unsigned int i_count:16; -+ struct squashfs_dir_index_2 index[0]; -+} __attribute__ ((packed)); -+ -+union squashfs_inode_header_2 { -+ struct squashfs_base_inode_header_2 base; -+ struct squashfs_dev_inode_header_2 dev; -+ struct squashfs_symlink_inode_header_2 symlink; -+ struct squashfs_reg_inode_header_2 reg; -+ struct squashfs_dir_inode_header_2 dir; -+ struct squashfs_ldir_inode_header_2 ldir; -+ struct squashfs_ipc_inode_header_2 ipc; -+}; -+ -+struct squashfs_dir_header_2 { -+ unsigned int count:8; -+ unsigned int start_block:24; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_entry_2 { -+ unsigned int offset:13; -+ unsigned int type:3; -+ unsigned int size:8; -+ char name[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_fragment_entry_2 { -+ unsigned int start_block; -+ unsigned int size; -+} __attribute__ ((packed)); -+ -+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ -+ SQUASHFS_MEMSET(s, d, n);\ -+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ -+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ -+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ -+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ -+ -+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ -+} -+ -+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \ -+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2)) -+ -+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_dev_inode_header_2)); \ -+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\ -+} -+ -+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_symlink_inode_header_2));\ -+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\ -+} -+ -+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_reg_inode_header_2));\ -+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\ -+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_dir_inode_header_2));\ -+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\ -+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\ -+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\ -+} -+ -+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_ldir_inode_header_2));\ -+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\ -+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\ -+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\ -+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\ -+ SQUASHFS_SWAP((s)->index, d, 0, 27);\ -+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\ -+ SQUASHFS_SWAP((s)->size, d, 56, 8);\ -+} -+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\ -+ SQUASHFS_SWAP((s)->count, d, 0, 8);\ -+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\ -+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ -+ SQUASHFS_SWAP((s)->type, d, 13, 3);\ -+ SQUASHFS_SWAP((s)->size, d, 16, 8);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\ -+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\ -+ SQUASHFS_SWAP((s)->size, d, 32, 32);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n) -+ -+/* fragment and fragment table defines */ -+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2)) -+ -+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \ -+ SQUASHFS_METADATA_SIZE - 1) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\ -+ sizeof(int)) -+ -+#endif -+ -+#ifdef __KERNEL__ -+ -+/* -+ * macros used to swap each structure entry, taking into account -+ * bitfields and different bitfield placing conventions on differing -+ * architectures -+ */ -+ -+#include -+ -+#ifdef __BIG_ENDIAN -+ /* convert from little endian to big endian */ -+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ -+ tbits, b_pos) -+#else -+ /* convert from big endian to little endian */ -+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ -+ tbits, 64 - tbits - b_pos) -+#endif -+ -+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\ -+ b_pos = pos % 8;\ -+ val = 0;\ -+ s = (unsigned char *)p + (pos / 8);\ -+ d = ((unsigned char *) &val) + 7;\ -+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \ -+ *d-- = *s++;\ -+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\ -+} -+ -+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n); -+ -+#endif -+#endif -Index: linux-2.6.22/include/linux/squashfs_fs_i.h -=================================================================== ---- /dev/null -+++ linux-2.6.22/include/linux/squashfs_fs_i.h -@@ -0,0 +1,45 @@ -+#ifndef SQUASHFS_FS_I -+#define SQUASHFS_FS_I -+/* -+ * Squashfs -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs_fs_i.h -+ */ -+ -+struct squashfs_inode_info { -+ long long start_block; -+ unsigned int offset; -+ union { -+ struct { -+ long long fragment_start_block; -+ unsigned int fragment_size; -+ unsigned int fragment_offset; -+ long long block_list_start; -+ } s1; -+ struct { -+ long long directory_index_start; -+ unsigned int directory_index_offset; -+ unsigned int directory_index_count; -+ unsigned int parent_inode; -+ } s2; -+ } u; -+ struct inode vfs_inode; -+}; -+#endif -Index: linux-2.6.22/include/linux/squashfs_fs_sb.h -=================================================================== ---- /dev/null -+++ linux-2.6.22/include/linux/squashfs_fs_sb.h -@@ -0,0 +1,74 @@ -+#ifndef SQUASHFS_FS_SB -+#define SQUASHFS_FS_SB -+/* -+ * Squashfs -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs_fs_sb.h -+ */ -+ -+#include -+ -+struct squashfs_cache { -+ long long block; -+ int length; -+ long long next_index; -+ char *data; -+}; -+ -+struct squashfs_fragment_cache { -+ long long block; -+ int length; -+ unsigned int locked; -+ char *data; -+}; -+ -+struct squashfs_sb_info { -+ struct squashfs_super_block sblk; -+ int devblksize; -+ int devblksize_log2; -+ int swap; -+ struct squashfs_cache *block_cache; -+ struct squashfs_fragment_cache *fragment; -+ int next_cache; -+ int next_fragment; -+ int next_meta_index; -+ unsigned int *uid; -+ unsigned int *guid; -+ long long *fragment_index; -+ unsigned int *fragment_index_2; -+ char *read_page; -+ struct mutex read_data_mutex; -+ struct mutex read_page_mutex; -+ struct mutex block_cache_mutex; -+ struct mutex fragment_mutex; -+ struct mutex meta_index_mutex; -+ wait_queue_head_t waitq; -+ wait_queue_head_t fragment_wait_queue; -+ struct meta_index *meta_index; -+ z_stream stream; -+ long long *inode_lookup_table; -+ int (*read_inode)(struct inode *i, squashfs_inode_t \ -+ inode); -+ long long (*read_blocklist)(struct inode *inode, int \ -+ index, int readahead_blks, char *block_list, \ -+ unsigned short **block_p, unsigned int *bsize); -+ int (*read_fragment_index_table)(struct super_block *s); -+}; -+#endif -Index: linux-2.6.22/init/do_mounts_rd.c -=================================================================== ---- linux-2.6.22.orig/init/do_mounts_rd.c -+++ linux-2.6.22/init/do_mounts_rd.c -@@ -5,6 +5,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -39,6 +40,7 @@ - * numbers could not be found. - * - * We currently check for the following magic numbers: -+ * squashfs - * minix - * ext2 - * romfs -@@ -53,6 +55,7 @@ - struct ext2_super_block *ext2sb; - struct romfs_super_block *romfsb; - struct cramfs_super *cramfsb; -+ struct squashfs_super_block *squashfsb; - int nblocks = -1; - unsigned char *buf; - -@@ -64,6 +67,7 @@ - ext2sb = (struct ext2_super_block *) buf; - romfsb = (struct romfs_super_block *) buf; - cramfsb = (struct cramfs_super *) buf; -+ squashfsb = (struct squashfs_super_block *) buf; - memset(buf, 0xe5, size); - - /* -@@ -101,6 +105,18 @@ - goto done; - } - -+ /* squashfs is at block zero too */ -+ if (squashfsb->s_magic == SQUASHFS_MAGIC) { -+ printk(KERN_NOTICE -+ "RAMDISK: squashfs filesystem found at block %d\n", -+ start_block); -+ if (squashfsb->s_major < 3) -+ nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; -+ else -+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; -+ goto done; -+ } -+ - /* - * Read block 1 to test for minix and ext2 superblock - */ diff --git a/packages/linux/linux-openmoko-devel/squashfs.patch b/packages/linux/linux-openmoko-devel/squashfs.patch deleted file mode 100644 index 51efd6b3c9..0000000000 --- a/packages/linux/linux-openmoko-devel/squashfs.patch +++ /dev/null @@ -1,4386 +0,0 @@ -diff -x .gitignore -Nurp linux-2.6.20/fs/Kconfig linux-2.6.20-squashfs3.2-r2/fs/Kconfig ---- linux-2.6.20/fs/Kconfig 2006-12-25 01:13:12.000000000 +0000 -+++ linux-2.6.20-squashfs3.2-r2/fs/Kconfig 2007-01-16 02:06:03.000000000 +0000 -@@ -1404,6 +1404,71 @@ config CRAMFS - - If unsure, say N. - -+config SQUASHFS -+ tristate "SquashFS 3.2 - Squashed file system support" -+ select ZLIB_INFLATE -+ help -+ Saying Y here includes support for SquashFS 3.2 (a Compressed Read-Only File -+ System). Squashfs is a highly compressed read-only filesystem for Linux. -+ It uses zlib compression to compress both files, inodes and directories. -+ Inodes in the system are very small and all blocks are packed to minimise -+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K. -+ SquashFS 3.1 supports 64 bit filesystems and files (larger than 4GB), full -+ uid/gid information, hard links and timestamps. -+ -+ Squashfs is intended for general read-only filesystem use, for archival -+ use (i.e. in cases where a .tar.gz file may be used), and in embedded -+ systems where low overhead is needed. Further information and filesystem tools -+ are available from http://squashfs.sourceforge.net. -+ -+ If you want to compile this as a module ( = code which can be -+ inserted in and removed from the running kernel whenever you want), -+ say M here and read . The module -+ will be called squashfs. Note that the root file system (the one -+ containing the directory /) cannot be compiled as a module. -+ -+ If unsure, say N. -+ -+config SQUASHFS_EMBEDDED -+ -+ bool "Additional options for memory-constrained systems" -+ depends on SQUASHFS -+ default n -+ help -+ Saying Y here allows you to specify cache sizes and how Squashfs -+ allocates memory. This is only intended for memory constrained -+ systems. -+ -+ If unsure, say N. -+ -+config SQUASHFS_FRAGMENT_CACHE_SIZE -+ int "Number of fragments cached" if SQUASHFS_EMBEDDED -+ depends on SQUASHFS -+ default "3" -+ help -+ By default SquashFS caches the last 3 fragments read from -+ the filesystem. Increasing this amount may mean SquashFS -+ has to re-read fragments less often from disk, at the expense -+ of extra system memory. Decreasing this amount will mean -+ SquashFS uses less memory at the expense of extra reads from disk. -+ -+ Note there must be at least one cached fragment. Anything -+ much more than three will probably not make much difference. -+ -+config SQUASHFS_VMALLOC -+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED -+ depends on SQUASHFS -+ default n -+ help -+ By default SquashFS uses kmalloc to obtain fragment cache memory. -+ Kmalloc memory is the standard kernel allocator, but it can fail -+ on memory constrained systems. Because of the way Vmalloc works, -+ Vmalloc can succeed when kmalloc fails. Specifying this option -+ will make SquashFS always use Vmalloc to allocate the -+ fragment cache memory. -+ -+ If unsure, say N. -+ - config VXFS_FS - tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)" - depends on BLOCK -diff -x .gitignore -Nurp linux-2.6.20/fs/Makefile linux-2.6.20-squashfs3.2-r2/fs/Makefile ---- linux-2.6.20/fs/Makefile 2006-12-25 01:13:12.000000000 +0000 -+++ linux-2.6.20-squashfs3.2-r2/fs/Makefile 2007-01-16 02:06:03.000000000 +0000 -@@ -68,6 +68,7 @@ obj-$(CONFIG_JBD) += jbd/ - obj-$(CONFIG_JBD2) += jbd2/ - obj-$(CONFIG_EXT2_FS) += ext2/ - obj-$(CONFIG_CRAMFS) += cramfs/ -+obj-$(CONFIG_SQUASHFS) += squashfs/ - obj-$(CONFIG_RAMFS) += ramfs/ - obj-$(CONFIG_HUGETLBFS) += hugetlbfs/ - obj-$(CONFIG_CODA_FS) += coda/ -diff -x .gitignore -Nurp linux-2.6.20/fs/squashfs/inode.c linux-2.6.20-squashfs3.2-r2/fs/squashfs/inode.c ---- linux-2.6.20/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.20-squashfs3.2-r2/fs/squashfs/inode.c 2007-01-16 02:28:36.000000000 +0000 -@@ -0,0 +1,2329 @@ -+/* -+ * Squashfs - a compressed read only filesystem for Linux -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * inode.c -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "squashfs.h" -+ -+static void vfs_read_inode(struct inode *i); -+static struct dentry *squashfs_get_parent(struct dentry *child); -+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode); -+static int squashfs_statfs(struct dentry *, struct kstatfs *); -+static int squashfs_symlink_readpage(struct file *file, struct page *page); -+static long long read_blocklist(struct inode *inode, int index, -+ int readahead_blks, char *block_list, -+ unsigned short **block_p, unsigned int *bsize); -+static int squashfs_readpage(struct file *file, struct page *page); -+static int squashfs_readpage4K(struct file *file, struct page *page); -+static int squashfs_readdir(struct file *, void *, filldir_t); -+static struct dentry *squashfs_lookup(struct inode *, struct dentry *, -+ struct nameidata *); -+static int squashfs_remount(struct super_block *s, int *flags, char *data); -+static void squashfs_put_super(struct super_block *); -+static int squashfs_get_sb(struct file_system_type *,int, const char *, void *, -+ struct vfsmount *); -+static struct inode *squashfs_alloc_inode(struct super_block *sb); -+static void squashfs_destroy_inode(struct inode *inode); -+static int init_inodecache(void); -+static void destroy_inodecache(void); -+ -+static struct file_system_type squashfs_fs_type = { -+ .owner = THIS_MODULE, -+ .name = "squashfs", -+ .get_sb = squashfs_get_sb, -+ .kill_sb = kill_block_super, -+ .fs_flags = FS_REQUIRES_DEV -+}; -+ -+static const unsigned char squashfs_filetype_table[] = { -+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK -+}; -+ -+static struct super_operations squashfs_super_ops = { -+ .alloc_inode = squashfs_alloc_inode, -+ .destroy_inode = squashfs_destroy_inode, -+ .statfs = squashfs_statfs, -+ .put_super = squashfs_put_super, -+ .remount_fs = squashfs_remount -+}; -+ -+static struct super_operations squashfs_export_super_ops = { -+ .alloc_inode = squashfs_alloc_inode, -+ .destroy_inode = squashfs_destroy_inode, -+ .statfs = squashfs_statfs, -+ .put_super = squashfs_put_super, -+ .read_inode = vfs_read_inode -+}; -+ -+static struct export_operations squashfs_export_ops = { -+ .get_parent = squashfs_get_parent -+}; -+ -+SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = { -+ .readpage = squashfs_symlink_readpage -+}; -+ -+SQSH_EXTERN const struct address_space_operations squashfs_aops = { -+ .readpage = squashfs_readpage -+}; -+ -+SQSH_EXTERN const struct address_space_operations squashfs_aops_4K = { -+ .readpage = squashfs_readpage4K -+}; -+ -+static const struct file_operations squashfs_dir_ops = { -+ .read = generic_read_dir, -+ .readdir = squashfs_readdir -+}; -+ -+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = { -+ .lookup = squashfs_lookup -+}; -+ -+ -+static struct buffer_head *get_block_length(struct super_block *s, -+ int *cur_index, int *offset, int *c_byte) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ unsigned short temp; -+ struct buffer_head *bh; -+ -+ if (!(bh = sb_bread(s, *cur_index))) -+ goto out; -+ -+ if (msblk->devblksize - *offset == 1) { -+ if (msblk->swap) -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ else -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ brelse(bh); -+ if (!(bh = sb_bread(s, ++(*cur_index)))) -+ goto out; -+ if (msblk->swap) -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ bh->b_data); -+ else -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ bh->b_data); -+ *c_byte = temp; -+ *offset = 1; -+ } else { -+ if (msblk->swap) { -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ (bh->b_data + *offset + 1)); -+ } else { -+ ((unsigned char *) &temp)[0] = *((unsigned char *) -+ (bh->b_data + *offset)); -+ ((unsigned char *) &temp)[1] = *((unsigned char *) -+ (bh->b_data + *offset + 1)); -+ } -+ *c_byte = temp; -+ *offset += 2; -+ } -+ -+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) { -+ if (*offset == msblk->devblksize) { -+ brelse(bh); -+ if (!(bh = sb_bread(s, ++(*cur_index)))) -+ goto out; -+ *offset = 0; -+ } -+ if (*((unsigned char *) (bh->b_data + *offset)) != -+ SQUASHFS_MARKER_BYTE) { -+ ERROR("Metadata block marker corrupt @ %x\n", -+ *cur_index); -+ brelse(bh); -+ goto out; -+ } -+ (*offset)++; -+ } -+ return bh; -+ -+out: -+ return NULL; -+} -+ -+ -+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer, -+ long long index, unsigned int length, -+ long long *next_index, int srclength) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >> -+ msblk->devblksize_log2) + 2]; -+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1); -+ unsigned int cur_index = index >> msblk->devblksize_log2; -+ int bytes, avail_bytes, b = 0, k = 0; -+ unsigned int compressed; -+ unsigned int c_byte = length; -+ -+ if (c_byte) { -+ bytes = msblk->devblksize - offset; -+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte); -+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte); -+ -+ TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index, compressed -+ ? "" : "un", (unsigned int) c_byte, srclength); -+ -+ if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used) -+ goto read_failure; -+ -+ if (!(bh[0] = sb_getblk(s, cur_index))) -+ goto block_release; -+ -+ for (b = 1; bytes < c_byte; b++) { -+ if (!(bh[b] = sb_getblk(s, ++cur_index))) -+ goto block_release; -+ bytes += msblk->devblksize; -+ } -+ ll_rw_block(READ, b, bh); -+ } else { -+ if (index < 0 || (index + 2) > sblk->bytes_used) -+ goto read_failure; -+ -+ if (!(bh[0] = get_block_length(s, &cur_index, &offset, -+ &c_byte))) -+ goto read_failure; -+ -+ bytes = msblk->devblksize - offset; -+ compressed = SQUASHFS_COMPRESSED(c_byte); -+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte); -+ -+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed -+ ? "" : "un", (unsigned int) c_byte); -+ -+ if (c_byte > srclength || (index + c_byte) > sblk->bytes_used) -+ goto read_failure; -+ -+ for (b = 1; bytes < c_byte; b++) { -+ if (!(bh[b] = sb_getblk(s, ++cur_index))) -+ goto block_release; -+ bytes += msblk->devblksize; -+ } -+ ll_rw_block(READ, b - 1, bh + 1); -+ } -+ -+ if (compressed) { -+ int zlib_err = 0; -+ -+ /* -+ * uncompress block -+ */ -+ -+ mutex_lock(&msblk->read_data_mutex); -+ -+ msblk->stream.next_out = buffer; -+ msblk->stream.avail_out = srclength; -+ -+ for (bytes = 0; k < b; k++) { -+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ? -+ msblk->devblksize - offset : -+ c_byte - bytes; -+ wait_on_buffer(bh[k]); -+ if (!buffer_uptodate(bh[k])) -+ goto release_mutex; -+ -+ msblk->stream.next_in = bh[k]->b_data + offset; -+ msblk->stream.avail_in = avail_bytes; -+ -+ if (k == 0) { -+ zlib_err = zlib_inflateInit(&msblk->stream); -+ if (zlib_err != Z_OK) { -+ ERROR("zlib_inflateInit returned unexpected result 0x%x, srclength %d\n", -+ zlib_err, srclength); -+ goto release_mutex; -+ } -+ -+ if (avail_bytes == 0) { -+ offset = 0; -+ brelse(bh[k]); -+ continue; -+ } -+ } -+ -+ zlib_err = zlib_inflate(&msblk->stream, Z_NO_FLUSH); -+ if (zlib_err != Z_OK && zlib_err != Z_STREAM_END) { -+ ERROR("zlib_inflate returned unexpected result 0x%x, srclength %d, avail_in %d, avail_out %d\n", -+ zlib_err, srclength, msblk->stream.avail_in, msblk->stream.avail_out); -+ goto release_mutex; -+ } -+ -+ bytes += avail_bytes; -+ offset = 0; -+ brelse(bh[k]); -+ } -+ -+ if (zlib_err != Z_STREAM_END) -+ goto release_mutex; -+ -+ zlib_err = zlib_inflateEnd(&msblk->stream); -+ if (zlib_err != Z_OK) { -+ ERROR("zlib_inflateEnd returned unexpected result 0x%x, srclength %d\n", -+ zlib_err, srclength); -+ goto release_mutex; -+ } -+ bytes = msblk->stream.total_out; -+ mutex_unlock(&msblk->read_data_mutex); -+ } else { -+ int i; -+ -+ for(i = 0; i < b; i++) { -+ wait_on_buffer(bh[i]); -+ if(!buffer_uptodate(bh[i])) -+ goto block_release; -+ } -+ -+ for (bytes = 0; k < b; k++) { -+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ? -+ msblk->devblksize - offset : -+ c_byte - bytes; -+ memcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes); -+ bytes += avail_bytes; -+ offset = 0; -+ brelse(bh[k]); -+ } -+ } -+ -+ if (next_index) -+ *next_index = index + c_byte + (length ? 0 : -+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags) -+ ? 3 : 2)); -+ return bytes; -+ -+release_mutex: -+ mutex_unlock(&msblk->read_data_mutex); -+ -+block_release: -+ for (; k < b; k++) -+ brelse(bh[k]); -+ -+read_failure: -+ ERROR("sb_bread failed reading block 0x%x\n", cur_index); -+ return 0; -+} -+ -+ -+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer, -+ long long block, unsigned int offset, -+ int length, long long *next_block, -+ unsigned int *next_offset) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ int n, i, bytes, return_length = length; -+ long long next_index; -+ -+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset); -+ -+ while ( 1 ) { -+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) -+ if (msblk->block_cache[i].block == block) -+ break; -+ -+ mutex_lock(&msblk->block_cache_mutex); -+ -+ if (i == SQUASHFS_CACHED_BLKS) { -+ /* read inode header block */ -+ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS; -+ n ; n --, i = (i + 1) % -+ SQUASHFS_CACHED_BLKS) -+ if (msblk->block_cache[i].block != -+ SQUASHFS_USED_BLK) -+ break; -+ -+ if (n == 0) { -+ wait_queue_t wait; -+ -+ init_waitqueue_entry(&wait, current); -+ add_wait_queue(&msblk->waitq, &wait); -+ set_current_state(TASK_UNINTERRUPTIBLE); -+ mutex_unlock(&msblk->block_cache_mutex); -+ schedule(); -+ set_current_state(TASK_RUNNING); -+ remove_wait_queue(&msblk->waitq, &wait); -+ continue; -+ } -+ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS; -+ -+ if (msblk->block_cache[i].block == -+ SQUASHFS_INVALID_BLK) { -+ if (!(msblk->block_cache[i].data = -+ kmalloc(SQUASHFS_METADATA_SIZE, -+ GFP_KERNEL))) { -+ ERROR("Failed to allocate cache" -+ "block\n"); -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto out; -+ } -+ } -+ -+ msblk->block_cache[i].block = SQUASHFS_USED_BLK; -+ mutex_unlock(&msblk->block_cache_mutex); -+ -+ msblk->block_cache[i].length = squashfs_read_data(s, -+ msblk->block_cache[i].data, block, 0, &next_index, SQUASHFS_METADATA_SIZE); -+ if (msblk->block_cache[i].length == 0) { -+ ERROR("Unable to read cache block [%llx:%x]\n", -+ block, offset); -+ mutex_lock(&msblk->block_cache_mutex); -+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; -+ kfree(msblk->block_cache[i].data); -+ wake_up(&msblk->waitq); -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto out; -+ } -+ -+ mutex_lock(&msblk->block_cache_mutex); -+ wake_up(&msblk->waitq); -+ msblk->block_cache[i].block = block; -+ msblk->block_cache[i].next_index = next_index; -+ TRACE("Read cache block [%llx:%x]\n", block, offset); -+ } -+ -+ if (msblk->block_cache[i].block != block) { -+ mutex_unlock(&msblk->block_cache_mutex); -+ continue; -+ } -+ -+ bytes = msblk->block_cache[i].length - offset; -+ -+ if (bytes < 1) { -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto out; -+ } else if (bytes >= length) { -+ if (buffer) -+ memcpy(buffer, msblk->block_cache[i].data + -+ offset, length); -+ if (msblk->block_cache[i].length - offset == length) { -+ *next_block = msblk->block_cache[i].next_index; -+ *next_offset = 0; -+ } else { -+ *next_block = block; -+ *next_offset = offset + length; -+ } -+ mutex_unlock(&msblk->block_cache_mutex); -+ goto finish; -+ } else { -+ if (buffer) { -+ memcpy(buffer, msblk->block_cache[i].data + -+ offset, bytes); -+ buffer += bytes; -+ } -+ block = msblk->block_cache[i].next_index; -+ mutex_unlock(&msblk->block_cache_mutex); -+ length -= bytes; -+ offset = 0; -+ } -+ } -+ -+finish: -+ return return_length; -+out: -+ return 0; -+} -+ -+ -+static int get_fragment_location(struct super_block *s, unsigned int fragment, -+ long long *fragment_start_block, -+ unsigned int *fragment_size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ long long start_block = -+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)]; -+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment); -+ struct squashfs_fragment_entry fragment_entry; -+ -+ if (msblk->swap) { -+ struct squashfs_fragment_entry sfragment_entry; -+ -+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, -+ start_block, offset, -+ sizeof(sfragment_entry), &start_block, -+ &offset)) -+ goto out; -+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, -+ start_block, offset, -+ sizeof(fragment_entry), &start_block, -+ &offset)) -+ goto out; -+ -+ *fragment_start_block = fragment_entry.start_block; -+ *fragment_size = fragment_entry.size; -+ -+ return 1; -+ -+out: -+ return 0; -+} -+ -+ -+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct -+ squashfs_fragment_cache *fragment) -+{ -+ mutex_lock(&msblk->fragment_mutex); -+ fragment->locked --; -+ wake_up(&msblk->fragment_wait_queue); -+ mutex_unlock(&msblk->fragment_mutex); -+} -+ -+ -+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block -+ *s, long long start_block, -+ int length) -+{ -+ int i, n; -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ while ( 1 ) { -+ mutex_lock(&msblk->fragment_mutex); -+ -+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS && -+ msblk->fragment[i].block != start_block; i++); -+ -+ if (i == SQUASHFS_CACHED_FRAGMENTS) { -+ for (i = msblk->next_fragment, n = -+ SQUASHFS_CACHED_FRAGMENTS; n && -+ msblk->fragment[i].locked; n--, i = (i + 1) % -+ SQUASHFS_CACHED_FRAGMENTS); -+ -+ if (n == 0) { -+ wait_queue_t wait; -+ -+ init_waitqueue_entry(&wait, current); -+ add_wait_queue(&msblk->fragment_wait_queue, -+ &wait); -+ set_current_state(TASK_UNINTERRUPTIBLE); -+ mutex_unlock(&msblk->fragment_mutex); -+ schedule(); -+ set_current_state(TASK_RUNNING); -+ remove_wait_queue(&msblk->fragment_wait_queue, -+ &wait); -+ continue; -+ } -+ msblk->next_fragment = (msblk->next_fragment + 1) % -+ SQUASHFS_CACHED_FRAGMENTS; -+ -+ if (msblk->fragment[i].data == NULL) -+ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC -+ (SQUASHFS_FILE_MAX_SIZE))) { -+ ERROR("Failed to allocate fragment " -+ "cache block\n"); -+ mutex_unlock(&msblk->fragment_mutex); -+ goto out; -+ } -+ -+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; -+ msblk->fragment[i].locked = 1; -+ mutex_unlock(&msblk->fragment_mutex); -+ -+ if (!(msblk->fragment[i].length = squashfs_read_data(s, -+ msblk->fragment[i].data, -+ start_block, length, NULL, sblk->block_size))) { -+ ERROR("Unable to read fragment cache block " -+ "[%llx]\n", start_block); -+ msblk->fragment[i].locked = 0; -+ smp_mb(); -+ goto out; -+ } -+ -+ mutex_lock(&msblk->fragment_mutex); -+ msblk->fragment[i].block = start_block; -+ TRACE("New fragment %d, start block %lld, locked %d\n", -+ i, msblk->fragment[i].block, -+ msblk->fragment[i].locked); -+ mutex_unlock(&msblk->fragment_mutex); -+ break; -+ } -+ -+ msblk->fragment[i].locked++; -+ mutex_unlock(&msblk->fragment_mutex); -+ TRACE("Got fragment %d, start block %lld, locked %d\n", i, -+ msblk->fragment[i].block, -+ msblk->fragment[i].locked); -+ break; -+ } -+ -+ return &msblk->fragment[i]; -+ -+out: -+ return NULL; -+} -+ -+ -+static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, -+ struct squashfs_base_inode_header *inodeb) -+{ -+ i->i_ino = inodeb->inode_number; -+ i->i_mtime.tv_sec = inodeb->mtime; -+ i->i_atime.tv_sec = inodeb->mtime; -+ i->i_ctime.tv_sec = inodeb->mtime; -+ i->i_uid = msblk->uid[inodeb->uid]; -+ i->i_mode = inodeb->mode; -+ i->i_size = 0; -+ if (inodeb->guid == SQUASHFS_GUIDS) -+ i->i_gid = i->i_uid; -+ else -+ i->i_gid = msblk->guid[inodeb->guid]; -+} -+ -+ -+static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ long long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)]; -+ int offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1); -+ squashfs_inode_t inode; -+ -+ TRACE("Entered squashfs_inode_lookup, inode_number = %d\n", ino); -+ -+ if (msblk->swap) { -+ squashfs_inode_t sinode; -+ -+ if (!squashfs_get_cached_block(s, (char *) &sinode, start, offset, -+ sizeof(sinode), &start, &offset)) -+ goto out; -+ SQUASHFS_SWAP_INODE_T((&inode), &sinode); -+ } else if (!squashfs_get_cached_block(s, (char *) &inode, start, offset, -+ sizeof(inode), &start, &offset)) -+ goto out; -+ -+ TRACE("squashfs_inode_lookup, inode = 0x%llx\n", inode); -+ -+ return inode; -+ -+out: -+ return SQUASHFS_INVALID_BLK; -+} -+ -+ -+static void vfs_read_inode(struct inode *i) -+{ -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino); -+ -+ TRACE("Entered vfs_read_inode\n"); -+ -+ if(inode != SQUASHFS_INVALID_BLK) -+ (msblk->read_inode)(i, inode); -+} -+ -+ -+static struct dentry *squashfs_get_parent(struct dentry *child) -+{ -+ struct inode *i = child->d_inode; -+ struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode); -+ struct dentry *rv; -+ -+ TRACE("Entered squashfs_get_parent\n"); -+ -+ if(parent == NULL) { -+ rv = ERR_PTR(-EACCES); -+ goto out; -+ } -+ -+ rv = d_alloc_anon(parent); -+ if(rv == NULL) -+ rv = ERR_PTR(-ENOMEM); -+ -+out: -+ return rv; -+} -+ -+ -+SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct inode *i = iget_locked(s, inode_number); -+ -+ TRACE("Entered squashfs_iget\n"); -+ -+ if(i && (i->i_state & I_NEW)) { -+ (msblk->read_inode)(i, inode); -+ unlock_new_inode(i); -+ } -+ -+ return i; -+} -+ -+ -+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode) -+{ -+ struct super_block *s = i->i_sb; -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long block = SQUASHFS_INODE_BLK(inode) + -+ sblk->inode_table_start; -+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); -+ long long next_block; -+ unsigned int next_offset; -+ union squashfs_inode_header id, sid; -+ struct squashfs_base_inode_header *inodeb = &id.base, -+ *sinodeb = &sid.base; -+ -+ TRACE("Entered squashfs_read_inode\n"); -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, -+ offset, sizeof(*sinodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb, -+ sizeof(*sinodeb)); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) inodeb, block, -+ offset, sizeof(*inodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ squashfs_new_inode(msblk, i, inodeb); -+ -+ switch(inodeb->inode_type) { -+ case SQUASHFS_FILE_TYPE: { -+ unsigned int frag_size; -+ long long frag_blk; -+ struct squashfs_reg_inode_header *inodep = &id.reg; -+ struct squashfs_reg_inode_header *sinodep = &sid.reg; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ frag_blk = SQUASHFS_INVALID_BLK; -+ if (inodep->fragment != SQUASHFS_INVALID_FRAG && -+ !get_fragment_location(s, -+ inodep->fragment, &frag_blk, &frag_size)) -+ goto failed_read; -+ -+ i->i_nlink = 1; -+ i->i_size = inodep->file_size; -+ i->i_fop = &generic_ro_fops; -+ i->i_mode |= S_IFREG; -+ i->i_blocks = ((i->i_size - 1) >> 9) + 1; -+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; -+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; -+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->u.s1.block_list_start = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ if (sblk->block_size > 4096) -+ i->i_data.a_ops = &squashfs_aops; -+ else -+ i->i_data.a_ops = &squashfs_aops_4K; -+ -+ TRACE("File inode %x:%x, start_block %llx, " -+ "block_list_start %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, next_block, -+ next_offset); -+ break; -+ } -+ case SQUASHFS_LREG_TYPE: { -+ unsigned int frag_size; -+ long long frag_blk; -+ struct squashfs_lreg_inode_header *inodep = &id.lreg; -+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ frag_blk = SQUASHFS_INVALID_BLK; -+ if (inodep->fragment != SQUASHFS_INVALID_FRAG && -+ !get_fragment_location(s, -+ inodep->fragment, &frag_blk, &frag_size)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->file_size; -+ i->i_fop = &generic_ro_fops; -+ i->i_mode |= S_IFREG; -+ i->i_blocks = ((i->i_size - 1) >> 9) + 1; -+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; -+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; -+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->u.s1.block_list_start = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ if (sblk->block_size > 4096) -+ i->i_data.a_ops = &squashfs_aops; -+ else -+ i->i_data.a_ops = &squashfs_aops_4K; -+ -+ TRACE("File inode %x:%x, start_block %llx, " -+ "block_list_start %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, next_block, -+ next_offset); -+ break; -+ } -+ case SQUASHFS_DIR_TYPE: { -+ struct squashfs_dir_inode_header *inodep = &id.dir; -+ struct squashfs_dir_inode_header *sinodep = &sid.dir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops; -+ i->i_fop = &squashfs_dir_ops; -+ i->i_mode |= S_IFDIR; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = 0; -+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; -+ -+ TRACE("Directory inode %x:%x, start_block %x, offset " -+ "%x\n", SQUASHFS_INODE_BLK(inode), -+ offset, inodep->start_block, -+ inodep->offset); -+ break; -+ } -+ case SQUASHFS_LDIR_TYPE: { -+ struct squashfs_ldir_inode_header *inodep = &id.ldir; -+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops; -+ i->i_fop = &squashfs_dir_ops; -+ i->i_mode |= S_IFDIR; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; -+ SQUASHFS_I(i)->u.s2.directory_index_offset = -+ next_offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = -+ inodep->i_count; -+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; -+ -+ TRACE("Long directory inode %x:%x, start_block %x, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, inodep->offset); -+ break; -+ } -+ case SQUASHFS_SYMLINK_TYPE: { -+ struct squashfs_symlink_inode_header *inodep = -+ &id.symlink; -+ struct squashfs_symlink_inode_header *sinodep = -+ &sid.symlink; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_size = inodep->symlink_size; -+ i->i_op = &page_symlink_inode_operations; -+ i->i_data.a_ops = &squashfs_symlink_aops; -+ i->i_mode |= S_IFLNK; -+ SQUASHFS_I(i)->start_block = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ -+ TRACE("Symbolic link inode %x:%x, start_block %llx, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ next_block, next_offset); -+ break; -+ } -+ case SQUASHFS_BLKDEV_TYPE: -+ case SQUASHFS_CHRDEV_TYPE: { -+ struct squashfs_dev_inode_header *inodep = &id.dev; -+ struct squashfs_dev_inode_header *sinodep = &sid.dev; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_mode |= (inodeb->inode_type == -+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : -+ S_IFBLK; -+ init_special_inode(i, i->i_mode, -+ old_decode_dev(inodep->rdev)); -+ -+ TRACE("Device inode %x:%x, rdev %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->rdev); -+ break; -+ } -+ case SQUASHFS_FIFO_TYPE: -+ case SQUASHFS_SOCKET_TYPE: { -+ struct squashfs_ipc_inode_header *inodep = &id.ipc; -+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_nlink = inodep->nlink; -+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) -+ ? S_IFIFO : S_IFSOCK; -+ init_special_inode(i, i->i_mode, 0); -+ break; -+ } -+ default: -+ ERROR("Unknown inode type %d in squashfs_iget!\n", -+ inodeb->inode_type); -+ goto failed_read1; -+ } -+ -+ return 1; -+ -+failed_read: -+ ERROR("Unable to read inode [%llx:%x]\n", block, offset); -+ -+failed_read1: -+ make_bad_inode(i); -+ return 0; -+} -+ -+ -+static int read_inode_lookup_table(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes); -+ -+ TRACE("In read_inode_lookup_table, length %d\n", length); -+ -+ /* Allocate inode lookup table */ -+ if (!(msblk->inode_lookup_table = kmalloc(length, GFP_KERNEL))) { -+ ERROR("Failed to allocate inode lookup table\n"); -+ return 0; -+ } -+ -+ if (!squashfs_read_data(s, (char *) msblk->inode_lookup_table, -+ sblk->lookup_table_start, length | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { -+ ERROR("unable to read inode lookup table\n"); -+ return 0; -+ } -+ -+ if (msblk->swap) { -+ int i; -+ long long block; -+ -+ for (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) { -+ SQUASHFS_SWAP_LOOKUP_BLOCKS((&block), -+ &msblk->inode_lookup_table[i], 1); -+ msblk->inode_lookup_table[i] = block; -+ } -+ } -+ -+ return 1; -+} -+ -+ -+static int read_fragment_index_table(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments); -+ -+ if(length == 0) -+ return 1; -+ -+ /* Allocate fragment index table */ -+ if (!(msblk->fragment_index = kmalloc(length, GFP_KERNEL))) { -+ ERROR("Failed to allocate fragment index table\n"); -+ return 0; -+ } -+ -+ if (!squashfs_read_data(s, (char *) msblk->fragment_index, -+ sblk->fragment_table_start, length | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { -+ ERROR("unable to read fragment index table\n"); -+ return 0; -+ } -+ -+ if (msblk->swap) { -+ int i; -+ long long fragment; -+ -+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments); i++) { -+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment), -+ &msblk->fragment_index[i], 1); -+ msblk->fragment_index[i] = fragment; -+ } -+ } -+ -+ return 1; -+} -+ -+ -+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent) -+{ -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ msblk->read_inode = squashfs_read_inode; -+ msblk->read_blocklist = read_blocklist; -+ msblk->read_fragment_index_table = read_fragment_index_table; -+ -+ if (sblk->s_major == 1) { -+ if (!squashfs_1_0_supported(msblk)) { -+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems " -+ "are unsupported\n"); -+ SERROR("Please recompile with " -+ "Squashfs 1.0 support enabled\n"); -+ return 0; -+ } -+ } else if (sblk->s_major == 2) { -+ if (!squashfs_2_0_supported(msblk)) { -+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems " -+ "are unsupported\n"); -+ SERROR("Please recompile with " -+ "Squashfs 2.0 support enabled\n"); -+ return 0; -+ } -+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor > -+ SQUASHFS_MINOR) { -+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d " -+ "filesystem\n", sblk->s_major, sblk->s_minor); -+ SERROR("Please update your kernel\n"); -+ return 0; -+ } -+ -+ return 1; -+} -+ -+ -+static int squashfs_fill_super(struct super_block *s, void *data, int silent) -+{ -+ struct squashfs_sb_info *msblk; -+ struct squashfs_super_block *sblk; -+ int i; -+ char b[BDEVNAME_SIZE]; -+ struct inode *root; -+ -+ TRACE("Entered squashfs_read_superblock\n"); -+ -+ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info), -+ GFP_KERNEL))) { -+ ERROR("Failed to allocate superblock\n"); -+ goto failure; -+ } -+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info)); -+ msblk = s->s_fs_info; -+ if (!(msblk->stream.workspace = vmalloc(zlib_inflate_workspacesize()))) { -+ ERROR("Failed to allocate zlib workspace\n"); -+ goto failure; -+ } -+ sblk = &msblk->sblk; -+ -+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE); -+ msblk->devblksize_log2 = ffz(~msblk->devblksize); -+ -+ mutex_init(&msblk->read_data_mutex); -+ mutex_init(&msblk->read_page_mutex); -+ mutex_init(&msblk->block_cache_mutex); -+ mutex_init(&msblk->fragment_mutex); -+ mutex_init(&msblk->meta_index_mutex); -+ -+ init_waitqueue_head(&msblk->waitq); -+ init_waitqueue_head(&msblk->fragment_wait_queue); -+ -+ sblk->bytes_used = sizeof(struct squashfs_super_block); -+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START, -+ sizeof(struct squashfs_super_block) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) { -+ SERROR("unable to read superblock\n"); -+ goto failed_mount; -+ } -+ -+ /* Check it is a SQUASHFS superblock */ -+ msblk->swap = 0; -+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) { -+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) { -+ struct squashfs_super_block ssblk; -+ -+ WARNING("Mounting a different endian SQUASHFS " -+ "filesystem on %s\n", bdevname(s->s_bdev, b)); -+ -+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk); -+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block)); -+ msblk->swap = 1; -+ } else { -+ SERROR("Can't find a SQUASHFS superblock on %s\n", -+ bdevname(s->s_bdev, b)); -+ goto failed_mount; -+ } -+ } -+ -+ /* Check the MAJOR & MINOR versions */ -+ if(!supported_squashfs_filesystem(msblk, silent)) -+ goto failed_mount; -+ -+ /* Check the filesystem does not extend beyond the end of the -+ block device */ -+ if(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode)) -+ goto failed_mount; -+ -+ /* Check the root inode for sanity */ -+ if (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE) -+ goto failed_mount; -+ -+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b)); -+ TRACE("Inodes are %scompressed\n", -+ SQUASHFS_UNCOMPRESSED_INODES -+ (sblk->flags) ? "un" : ""); -+ TRACE("Data is %scompressed\n", -+ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags) -+ ? "un" : ""); -+ TRACE("Check data is %s present in the filesystem\n", -+ SQUASHFS_CHECK_DATA(sblk->flags) ? -+ "" : "not"); -+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used); -+ TRACE("Block size %d\n", sblk->block_size); -+ TRACE("Number of inodes %d\n", sblk->inodes); -+ if (sblk->s_major > 1) -+ TRACE("Number of fragments %d\n", sblk->fragments); -+ TRACE("Number of uids %d\n", sblk->no_uids); -+ TRACE("Number of gids %d\n", sblk->no_guids); -+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start); -+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start); -+ if (sblk->s_major > 1) -+ TRACE("sblk->fragment_table_start %llx\n", -+ sblk->fragment_table_start); -+ TRACE("sblk->uid_start %llx\n", sblk->uid_start); -+ -+ s->s_flags |= MS_RDONLY; -+ s->s_op = &squashfs_super_ops; -+ -+ /* Init inode_table block pointer array */ -+ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) * -+ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) { -+ ERROR("Failed to allocate block cache\n"); -+ goto failed_mount; -+ } -+ -+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) -+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; -+ -+ msblk->next_cache = 0; -+ -+ /* Allocate read_page block */ -+ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) { -+ ERROR("Failed to allocate read_page block\n"); -+ goto failed_mount; -+ } -+ -+ /* Allocate uid and gid tables */ -+ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) * -+ sizeof(unsigned int), GFP_KERNEL))) { -+ ERROR("Failed to allocate uid/gid table\n"); -+ goto failed_mount; -+ } -+ msblk->guid = msblk->uid + sblk->no_uids; -+ -+ if (msblk->swap) { -+ unsigned int suid[sblk->no_uids + sblk->no_guids]; -+ -+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start, -+ ((sblk->no_uids + sblk->no_guids) * -+ sizeof(unsigned int)) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { -+ ERROR("unable to read uid/gid table\n"); -+ goto failed_mount; -+ } -+ -+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids + -+ sblk->no_guids), (sizeof(unsigned int) * 8)); -+ } else -+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start, -+ ((sblk->no_uids + sblk->no_guids) * -+ sizeof(unsigned int)) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { -+ ERROR("unable to read uid/gid table\n"); -+ goto failed_mount; -+ } -+ -+ -+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk)) -+ goto allocate_root; -+ -+ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) * -+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) { -+ ERROR("Failed to allocate fragment block cache\n"); -+ goto failed_mount; -+ } -+ -+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) { -+ msblk->fragment[i].locked = 0; -+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; -+ msblk->fragment[i].data = NULL; -+ } -+ -+ msblk->next_fragment = 0; -+ -+ /* Allocate and read fragment index table */ -+ if (msblk->read_fragment_index_table(s) == 0) -+ goto failed_mount; -+ -+ if(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK) -+ goto allocate_root; -+ -+ /* Allocate and read inode lookup table */ -+ if (read_inode_lookup_table(s) == 0) -+ goto failed_mount; -+ -+ s->s_op = &squashfs_export_super_ops; -+ s->s_export_op = &squashfs_export_ops; -+ -+allocate_root: -+ root = new_inode(s); -+ if ((msblk->read_inode)(root, sblk->root_inode) == 0) -+ goto failed_mount; -+ insert_inode_hash(root); -+ -+ if ((s->s_root = d_alloc_root(root)) == NULL) { -+ ERROR("Root inode create failed\n"); -+ iput(root); -+ goto failed_mount; -+ } -+ -+ TRACE("Leaving squashfs_read_super\n"); -+ return 0; -+ -+failed_mount: -+ kfree(msblk->inode_lookup_table); -+ kfree(msblk->fragment_index); -+ kfree(msblk->fragment); -+ kfree(msblk->uid); -+ kfree(msblk->read_page); -+ kfree(msblk->block_cache); -+ kfree(msblk->fragment_index_2); -+ vfree(msblk->stream.workspace); -+ kfree(s->s_fs_info); -+ s->s_fs_info = NULL; -+ return -EINVAL; -+ -+failure: -+ return -ENOMEM; -+} -+ -+ -+static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf) -+{ -+ struct squashfs_sb_info *msblk = dentry->d_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ TRACE("Entered squashfs_statfs\n"); -+ -+ buf->f_type = SQUASHFS_MAGIC; -+ buf->f_bsize = sblk->block_size; -+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1; -+ buf->f_bfree = buf->f_bavail = 0; -+ buf->f_files = sblk->inodes; -+ buf->f_ffree = 0; -+ buf->f_namelen = SQUASHFS_NAME_LEN; -+ -+ return 0; -+} -+ -+ -+static int squashfs_symlink_readpage(struct file *file, struct page *page) -+{ -+ struct inode *inode = page->mapping->host; -+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes; -+ long long block = SQUASHFS_I(inode)->start_block; -+ int offset = SQUASHFS_I(inode)->offset; -+ void *pageaddr = kmap(page); -+ -+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block " -+ "%llx, offset %x\n", page->index, -+ SQUASHFS_I(inode)->start_block, -+ SQUASHFS_I(inode)->offset); -+ -+ for (length = 0; length < index; length += bytes) { -+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL, -+ block, offset, PAGE_CACHE_SIZE, &block, -+ &offset))) { -+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, -+ offset); -+ goto skip_read; -+ } -+ } -+ -+ if (length != index) { -+ ERROR("(squashfs_symlink_readpage) length != index\n"); -+ bytes = 0; -+ goto skip_read; -+ } -+ -+ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE : -+ i_size_read(inode) - length; -+ -+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, -+ offset, bytes, &block, &offset))) -+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset); -+ -+skip_read: -+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); -+ kunmap(page); -+ flush_dcache_page(page); -+ SetPageUptodate(page); -+ unlock_page(page); -+ -+ return 0; -+} -+ -+ -+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset) -+{ -+ struct meta_index *meta = NULL; -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ int i; -+ -+ mutex_lock(&msblk->meta_index_mutex); -+ -+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset); -+ -+ if(msblk->meta_index == NULL) -+ goto not_allocated; -+ -+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++) -+ if (msblk->meta_index[i].inode_number == inode->i_ino && -+ msblk->meta_index[i].offset >= offset && -+ msblk->meta_index[i].offset <= index && -+ msblk->meta_index[i].locked == 0) { -+ TRACE("locate_meta_index: entry %d, offset %d\n", i, -+ msblk->meta_index[i].offset); -+ meta = &msblk->meta_index[i]; -+ offset = meta->offset; -+ } -+ -+ if (meta) -+ meta->locked = 1; -+ -+not_allocated: -+ mutex_unlock(&msblk->meta_index_mutex); -+ -+ return meta; -+} -+ -+ -+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip) -+{ -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct meta_index *meta = NULL; -+ int i; -+ -+ mutex_lock(&msblk->meta_index_mutex); -+ -+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip); -+ -+ if(msblk->meta_index == NULL) { -+ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) * -+ SQUASHFS_META_NUMBER, GFP_KERNEL))) { -+ ERROR("Failed to allocate meta_index\n"); -+ goto failed; -+ } -+ for(i = 0; i < SQUASHFS_META_NUMBER; i++) { -+ msblk->meta_index[i].inode_number = 0; -+ msblk->meta_index[i].locked = 0; -+ } -+ msblk->next_meta_index = 0; -+ } -+ -+ for(i = SQUASHFS_META_NUMBER; i && -+ msblk->meta_index[msblk->next_meta_index].locked; i --) -+ msblk->next_meta_index = (msblk->next_meta_index + 1) % -+ SQUASHFS_META_NUMBER; -+ -+ if(i == 0) { -+ TRACE("empty_meta_index: failed!\n"); -+ goto failed; -+ } -+ -+ TRACE("empty_meta_index: returned meta entry %d, %p\n", -+ msblk->next_meta_index, -+ &msblk->meta_index[msblk->next_meta_index]); -+ -+ meta = &msblk->meta_index[msblk->next_meta_index]; -+ msblk->next_meta_index = (msblk->next_meta_index + 1) % -+ SQUASHFS_META_NUMBER; -+ -+ meta->inode_number = inode->i_ino; -+ meta->offset = offset; -+ meta->skip = skip; -+ meta->entries = 0; -+ meta->locked = 1; -+ -+failed: -+ mutex_unlock(&msblk->meta_index_mutex); -+ return meta; -+} -+ -+ -+void release_meta_index(struct inode *inode, struct meta_index *meta) -+{ -+ meta->locked = 0; -+ smp_mb(); -+} -+ -+ -+static int read_block_index(struct super_block *s, int blocks, char *block_list, -+ long long *start_block, int *offset) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ unsigned int *block_listp; -+ int block = 0; -+ -+ if (msblk->swap) { -+ char sblock_list[blocks << 2]; -+ -+ if (!squashfs_get_cached_block(s, sblock_list, *start_block, -+ *offset, blocks << 2, start_block, offset)) { -+ ERROR("Unable to read block list [%llx:%x]\n", -+ *start_block, *offset); -+ goto failure; -+ } -+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list), -+ ((unsigned int *)sblock_list), blocks); -+ } else -+ if (!squashfs_get_cached_block(s, block_list, *start_block, -+ *offset, blocks << 2, start_block, offset)) { -+ ERROR("Unable to read block list [%llx:%x]\n", -+ *start_block, *offset); -+ goto failure; -+ } -+ -+ for (block_listp = (unsigned int *) block_list; blocks; -+ block_listp++, blocks --) -+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp); -+ -+ return block; -+ -+failure: -+ return -1; -+} -+ -+ -+#define SIZE 256 -+ -+static inline int calculate_skip(int blocks) { -+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES); -+ return skip >= 7 ? 7 : skip + 1; -+} -+ -+ -+static int get_meta_index(struct inode *inode, int index, -+ long long *index_block, int *index_offset, -+ long long *data_block, char *block_list) -+{ -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log); -+ int offset = 0; -+ struct meta_index *meta; -+ struct meta_entry *meta_entry; -+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start; -+ int cur_offset = SQUASHFS_I(inode)->offset; -+ long long cur_data_block = SQUASHFS_I(inode)->start_block; -+ int i; -+ -+ index /= SQUASHFS_META_INDEXES * skip; -+ -+ while ( offset < index ) { -+ meta = locate_meta_index(inode, index, offset + 1); -+ -+ if (meta == NULL) { -+ if ((meta = empty_meta_index(inode, offset + 1, -+ skip)) == NULL) -+ goto all_done; -+ } else { -+ if(meta->entries == 0) -+ goto failed; -+ offset = index < meta->offset + meta->entries ? index : -+ meta->offset + meta->entries - 1; -+ meta_entry = &meta->meta_entry[offset - meta->offset]; -+ cur_index_block = meta_entry->index_block + sblk->inode_table_start; -+ cur_offset = meta_entry->offset; -+ cur_data_block = meta_entry->data_block; -+ TRACE("get_meta_index: offset %d, meta->offset %d, " -+ "meta->entries %d\n", offset, meta->offset, -+ meta->entries); -+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x" -+ " data_block 0x%llx\n", cur_index_block, -+ cur_offset, cur_data_block); -+ } -+ -+ for (i = meta->offset + meta->entries; i <= index && -+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) { -+ int blocks = skip * SQUASHFS_META_INDEXES; -+ -+ while (blocks) { -+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) : -+ blocks; -+ int res = read_block_index(inode->i_sb, block, -+ block_list, &cur_index_block, -+ &cur_offset); -+ -+ if (res == -1) -+ goto failed; -+ -+ cur_data_block += res; -+ blocks -= block; -+ } -+ -+ meta_entry = &meta->meta_entry[i - meta->offset]; -+ meta_entry->index_block = cur_index_block - sblk->inode_table_start; -+ meta_entry->offset = cur_offset; -+ meta_entry->data_block = cur_data_block; -+ meta->entries ++; -+ offset ++; -+ } -+ -+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n", -+ meta->offset, meta->entries); -+ -+ release_meta_index(inode, meta); -+ } -+ -+all_done: -+ *index_block = cur_index_block; -+ *index_offset = cur_offset; -+ *data_block = cur_data_block; -+ -+ return offset * SQUASHFS_META_INDEXES * skip; -+ -+failed: -+ release_meta_index(inode, meta); -+ return -1; -+} -+ -+ -+static long long read_blocklist(struct inode *inode, int index, -+ int readahead_blks, char *block_list, -+ unsigned short **block_p, unsigned int *bsize) -+{ -+ long long block_ptr; -+ int offset; -+ long long block; -+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block, -+ block_list); -+ -+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset" -+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset, -+ block); -+ -+ if(res == -1) -+ goto failure; -+ -+ index -= res; -+ -+ while ( index ) { -+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index; -+ int res = read_block_index(inode->i_sb, blocks, block_list, -+ &block_ptr, &offset); -+ if (res == -1) -+ goto failure; -+ block += res; -+ index -= blocks; -+ } -+ -+ if (read_block_index(inode->i_sb, 1, block_list, -+ &block_ptr, &offset) == -1) -+ goto failure; -+ *bsize = *((unsigned int *) block_list); -+ -+ return block; -+ -+failure: -+ return 0; -+} -+ -+ -+static int squashfs_readpage(struct file *file, struct page *page) -+{ -+ struct inode *inode = page->mapping->host; -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned char *block_list; -+ long long block; -+ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0; -+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT); -+ void *pageaddr; -+ struct squashfs_fragment_cache *fragment = NULL; -+ char *data_ptr = msblk->read_page; -+ -+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1; -+ int start_index = page->index & ~mask; -+ int end_index = start_index | mask; -+ -+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n", -+ page->index, -+ SQUASHFS_I(inode)->start_block); -+ -+ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) { -+ ERROR("Failed to allocate block_list\n"); -+ goto skip_read; -+ } -+ -+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> -+ PAGE_CACHE_SHIFT)) -+ goto skip_read; -+ -+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK -+ || index < (i_size_read(inode) >> -+ sblk->block_log)) { -+ if ((block = (msblk->read_blocklist)(inode, index, 1, -+ block_list, NULL, &bsize)) == 0) -+ goto skip_read; -+ -+ mutex_lock(&msblk->read_page_mutex); -+ -+ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page, -+ block, bsize, NULL, sblk->block_size))) { -+ ERROR("Unable to read page, block %llx, size %x\n", block, -+ bsize); -+ mutex_unlock(&msblk->read_page_mutex); -+ goto skip_read; -+ } -+ } else { -+ if ((fragment = get_cached_fragment(inode->i_sb, -+ SQUASHFS_I(inode)-> -+ u.s1.fragment_start_block, -+ SQUASHFS_I(inode)->u.s1.fragment_size)) -+ == NULL) { -+ ERROR("Unable to read page, block %llx, size %x\n", -+ SQUASHFS_I(inode)-> -+ u.s1.fragment_start_block, -+ (int) SQUASHFS_I(inode)-> -+ u.s1.fragment_size); -+ goto skip_read; -+ } -+ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset + -+ (i_size_read(inode) & (sblk->block_size -+ - 1)); -+ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset; -+ data_ptr = fragment->data; -+ } -+ -+ for (i = start_index; i <= end_index && byte_offset < bytes; -+ i++, byte_offset += PAGE_CACHE_SIZE) { -+ struct page *push_page; -+ int avail = (bytes - byte_offset) > PAGE_CACHE_SIZE ? -+ PAGE_CACHE_SIZE : bytes - byte_offset; -+ -+ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n", -+ bytes, i, byte_offset, avail); -+ -+ push_page = (i == page->index) ? page : -+ grab_cache_page_nowait(page->mapping, i); -+ -+ if (!push_page) -+ continue; -+ -+ if (PageUptodate(push_page)) -+ goto skip_page; -+ -+ pageaddr = kmap_atomic(push_page, KM_USER0); -+ memcpy(pageaddr, data_ptr + byte_offset, avail); -+ memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail); -+ kunmap_atomic(pageaddr, KM_USER0); -+ flush_dcache_page(push_page); -+ SetPageUptodate(push_page); -+skip_page: -+ unlock_page(push_page); -+ if(i != page->index) -+ page_cache_release(push_page); -+ } -+ -+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK -+ || index < (i_size_read(inode) >> -+ sblk->block_log)) -+ mutex_unlock(&msblk->read_page_mutex); -+ else -+ release_cached_fragment(msblk, fragment); -+ -+ kfree(block_list); -+ return 0; -+ -+skip_read: -+ pageaddr = kmap_atomic(page, KM_USER0); -+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); -+ kunmap_atomic(pageaddr, KM_USER0); -+ flush_dcache_page(page); -+ SetPageUptodate(page); -+ unlock_page(page); -+ -+ kfree(block_list); -+ return 0; -+} -+ -+ -+static int squashfs_readpage4K(struct file *file, struct page *page) -+{ -+ struct inode *inode = page->mapping->host; -+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned char *block_list; -+ long long block; -+ unsigned int bsize, bytes = 0; -+ void *pageaddr; -+ -+ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n", -+ page->index, -+ SQUASHFS_I(inode)->start_block); -+ -+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> -+ PAGE_CACHE_SHIFT)) { -+ block_list = NULL; -+ goto skip_read; -+ } -+ -+ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) { -+ ERROR("Failed to allocate block_list\n"); -+ goto skip_read; -+ } -+ -+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK -+ || page->index < (i_size_read(inode) >> -+ sblk->block_log)) { -+ block = (msblk->read_blocklist)(inode, page->index, 1, -+ block_list, NULL, &bsize); -+ if(block == 0) -+ goto skip_read; -+ -+ mutex_lock(&msblk->read_page_mutex); -+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block, -+ bsize, NULL, sblk->block_size); -+ if (bytes) { -+ pageaddr = kmap_atomic(page, KM_USER0); -+ memcpy(pageaddr, msblk->read_page, bytes); -+ kunmap_atomic(pageaddr, KM_USER0); -+ } else -+ ERROR("Unable to read page, block %llx, size %x\n", -+ block, bsize); -+ mutex_unlock(&msblk->read_page_mutex); -+ } else { -+ struct squashfs_fragment_cache *fragment = -+ get_cached_fragment(inode->i_sb, -+ SQUASHFS_I(inode)-> -+ u.s1.fragment_start_block, -+ SQUASHFS_I(inode)-> u.s1.fragment_size); -+ if (fragment) { -+ bytes = i_size_read(inode) & (sblk->block_size - 1); -+ pageaddr = kmap_atomic(page, KM_USER0); -+ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)-> -+ u.s1.fragment_offset, bytes); -+ kunmap_atomic(pageaddr, KM_USER0); -+ release_cached_fragment(msblk, fragment); -+ } else -+ ERROR("Unable to read page, block %llx, size %x\n", -+ SQUASHFS_I(inode)-> -+ u.s1.fragment_start_block, (int) -+ SQUASHFS_I(inode)-> u.s1.fragment_size); -+ } -+ -+skip_read: -+ pageaddr = kmap_atomic(page, KM_USER0); -+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); -+ kunmap_atomic(pageaddr, KM_USER0); -+ flush_dcache_page(page); -+ SetPageUptodate(page); -+ unlock_page(page); -+ -+ kfree(block_list); -+ return 0; -+} -+ -+ -+static int get_dir_index_using_offset(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ long long f_pos) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index index; -+ -+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", -+ i_count, (unsigned int) f_pos); -+ -+ f_pos =- 3; -+ if (f_pos == 0) -+ goto finish; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) &index, -+ index_start, index_offset, -+ sizeof(index), &index_start, -+ &index_offset); -+ -+ if (index.index > f_pos) -+ break; -+ -+ squashfs_get_cached_block(s, NULL, index_start, index_offset, -+ index.size + 1, &index_start, -+ &index_offset); -+ -+ length = index.index; -+ *next_block = index.start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ -+finish: -+ return length + 3; -+} -+ -+ -+static int get_dir_index_using_name(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ const char *name, int size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index *index; -+ char *str; -+ -+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); -+ -+ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + -+ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_index\n"); -+ goto failure; -+ } -+ -+ index = (struct squashfs_dir_index *) (str + SQUASHFS_NAME_LEN + 1); -+ strncpy(str, name, size); -+ str[size] = '\0'; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) index, -+ index_start, index_offset, -+ sizeof(struct squashfs_dir_index), -+ &index_start, &index_offset); -+ -+ squashfs_get_cached_block(s, index->name, index_start, -+ index_offset, index->size + 1, -+ &index_start, &index_offset); -+ -+ index->name[index->size + 1] = '\0'; -+ -+ if (strcmp(index->name, str) > 0) -+ break; -+ -+ length = index->index; -+ *next_block = index->start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ kfree(str); -+failure: -+ return length + 3; -+} -+ -+ -+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir) -+{ -+ struct inode *i = file->f_dentry->d_inode; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header dirh; -+ struct squashfs_dir_entry *dire; -+ -+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto finish; -+ } -+ -+ while(file->f_pos < 3) { -+ char *name; -+ int size, i_ino; -+ -+ if(file->f_pos == 0) { -+ name = "."; -+ size = 1; -+ i_ino = i->i_ino; -+ } else { -+ name = ".."; -+ size = 2; -+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode; -+ } -+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n", -+ (unsigned int) dirent, name, size, (int) -+ file->f_pos, i_ino, -+ squashfs_filetype_table[1]); -+ -+ if (filldir(dirent, name, size, -+ file->f_pos, i_ino, -+ squashfs_filetype_table[1]) < 0) { -+ TRACE("Filldir returned less than 0\n"); -+ goto finish; -+ } -+ file->f_pos += size; -+ } -+ -+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, -+ file->f_pos); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header sdirh; -+ -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block, next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block, next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, -+ dire->size + 1, &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (file->f_pos >= length) -+ continue; -+ -+ dire->name[dire->size + 1] = '\0'; -+ -+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n", -+ (unsigned int) dirent, dire->name, -+ dire->size + 1, (int) file->f_pos, -+ dirh.start_block, dire->offset, -+ dirh.inode_number + dire->inode_number, -+ squashfs_filetype_table[dire->type]); -+ -+ if (filldir(dirent, dire->name, dire->size + 1, -+ file->f_pos, -+ dirh.inode_number + dire->inode_number, -+ squashfs_filetype_table[dire->type]) -+ < 0) { -+ TRACE("Filldir returned less than 0\n"); -+ goto finish; -+ } -+ file->f_pos = length; -+ } -+ } -+ -+finish: -+ kfree(dire); -+ return 0; -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ kfree(dire); -+ return 0; -+} -+ -+ -+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry, -+ struct nameidata *nd) -+{ -+ const unsigned char *name = dentry->d_name.name; -+ int len = dentry->d_name.len; -+ struct inode *inode = NULL; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header dirh; -+ struct squashfs_dir_entry *dire; -+ -+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto exit_lookup; -+ } -+ -+ if (len > SQUASHFS_NAME_LEN) -+ goto exit_lookup; -+ -+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, name, -+ len); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header sdirh; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block,next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block,next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, dire->size + 1, -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (name[0] < dire->name[0]) -+ goto exit_lookup; -+ -+ if ((len == dire->size + 1) && !strncmp(name, dire->name, len)) { -+ squashfs_inode_t ino = SQUASHFS_MKINODE(dirh.start_block, -+ dire->offset); -+ -+ TRACE("calling squashfs_iget for directory " -+ "entry %s, inode %x:%x, %d\n", name, -+ dirh.start_block, dire->offset, -+ dirh.inode_number + dire->inode_number); -+ -+ inode = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number); -+ -+ goto exit_lookup; -+ } -+ } -+ } -+ -+exit_lookup: -+ kfree(dire); -+ if (inode) -+ return d_splice_alias(inode, dentry); -+ d_add(dentry, inode); -+ return ERR_PTR(0); -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ goto exit_lookup; -+} -+ -+ -+static int squashfs_remount(struct super_block *s, int *flags, char *data) -+{ -+ *flags |= MS_RDONLY; -+ return 0; -+} -+ -+ -+static void squashfs_put_super(struct super_block *s) -+{ -+ int i; -+ -+ if (s->s_fs_info) { -+ struct squashfs_sb_info *sbi = s->s_fs_info; -+ if (sbi->block_cache) -+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) -+ if (sbi->block_cache[i].block != -+ SQUASHFS_INVALID_BLK) -+ kfree(sbi->block_cache[i].data); -+ if (sbi->fragment) -+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) -+ SQUASHFS_FREE(sbi->fragment[i].data); -+ kfree(sbi->fragment); -+ kfree(sbi->block_cache); -+ kfree(sbi->read_page); -+ kfree(sbi->uid); -+ kfree(sbi->fragment_index); -+ kfree(sbi->fragment_index_2); -+ kfree(sbi->meta_index); -+ vfree(sbi->stream.workspace); -+ kfree(s->s_fs_info); -+ s->s_fs_info = NULL; -+ } -+} -+ -+ -+static int squashfs_get_sb(struct file_system_type *fs_type, int flags, -+ const char *dev_name, void *data, -+ struct vfsmount *mnt) -+{ -+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, -+ mnt); -+} -+ -+ -+static int __init init_squashfs_fs(void) -+{ -+ int err = init_inodecache(); -+ if (err) -+ goto out; -+ -+ printk(KERN_INFO "squashfs: version 3.2-r2 (2007/01/15) " -+ "Phillip Lougher\n"); -+ -+ if ((err = register_filesystem(&squashfs_fs_type))) -+ destroy_inodecache(); -+ -+out: -+ return err; -+} -+ -+ -+static void __exit exit_squashfs_fs(void) -+{ -+ unregister_filesystem(&squashfs_fs_type); -+ destroy_inodecache(); -+} -+ -+ -+static struct kmem_cache * squashfs_inode_cachep; -+ -+ -+static struct inode *squashfs_alloc_inode(struct super_block *sb) -+{ -+ struct squashfs_inode_info *ei; -+ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL); -+ if (!ei) -+ return NULL; -+ return &ei->vfs_inode; -+} -+ -+ -+static void squashfs_destroy_inode(struct inode *inode) -+{ -+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode)); -+} -+ -+ -+static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) -+{ -+ struct squashfs_inode_info *ei = foo; -+ -+ -+ -+ inode_init_once(&ei->vfs_inode); -+} -+ -+ -+static int __init init_inodecache(void) -+{ -+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache", -+ sizeof(struct squashfs_inode_info), -+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, -+ init_once, NULL); -+ if (squashfs_inode_cachep == NULL) -+ return -ENOMEM; -+ return 0; -+} -+ -+ -+static void destroy_inodecache(void) -+{ -+ kmem_cache_destroy(squashfs_inode_cachep); -+} -+ -+ -+module_init(init_squashfs_fs); -+module_exit(exit_squashfs_fs); -+MODULE_DESCRIPTION("squashfs 3.2-r2, a compressed read-only filesystem"); -+MODULE_AUTHOR("Phillip Lougher "); -+MODULE_LICENSE("GPL"); -diff -x .gitignore -Nurp linux-2.6.20/fs/squashfs/Makefile linux-2.6.20-squashfs3.2-r2/fs/squashfs/Makefile ---- linux-2.6.20/fs/squashfs/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.20-squashfs3.2-r2/fs/squashfs/Makefile 2007-01-12 00:06:09.000000000 +0000 -@@ -0,0 +1,7 @@ -+# -+# Makefile for the linux squashfs routines. -+# -+ -+obj-$(CONFIG_SQUASHFS) += squashfs.o -+squashfs-y += inode.o -+squashfs-y += squashfs2_0.o -diff -x .gitignore -Nurp linux-2.6.20/fs/squashfs/squashfs2_0.c linux-2.6.20-squashfs3.2-r2/fs/squashfs/squashfs2_0.c ---- linux-2.6.20/fs/squashfs/squashfs2_0.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.20-squashfs3.2-r2/fs/squashfs/squashfs2_0.c 2007-01-12 02:27:20.000000000 +0000 -@@ -0,0 +1,742 @@ -+/* -+ * Squashfs - a compressed read only filesystem for Linux -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs2_0.c -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "squashfs.h" -+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir); -+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *, -+ struct nameidata *); -+ -+static struct file_operations squashfs_dir_ops_2 = { -+ .read = generic_read_dir, -+ .readdir = squashfs_readdir_2 -+}; -+ -+static struct inode_operations squashfs_dir_inode_ops_2 = { -+ .lookup = squashfs_lookup_2 -+}; -+ -+static unsigned char squashfs_filetype_table[] = { -+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK -+}; -+ -+static int read_fragment_index_table_2(struct super_block *s) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2 -+ (sblk->fragments), GFP_KERNEL))) { -+ ERROR("Failed to allocate uid/gid table\n"); -+ return 0; -+ } -+ -+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) && -+ !squashfs_read_data(s, (char *) -+ msblk->fragment_index_2, -+ sblk->fragment_table_start, -+ SQUASHFS_FRAGMENT_INDEX_BYTES_2 -+ (sblk->fragments) | -+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) { -+ ERROR("unable to read fragment index table\n"); -+ return 0; -+ } -+ -+ if (msblk->swap) { -+ int i; -+ unsigned int fragment; -+ -+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments); -+ i++) { -+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment), -+ &msblk->fragment_index_2[i], 1); -+ msblk->fragment_index_2[i] = fragment; -+ } -+ } -+ -+ return 1; -+} -+ -+ -+static int get_fragment_location_2(struct super_block *s, unsigned int fragment, -+ long long *fragment_start_block, -+ unsigned int *fragment_size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ long long start_block = -+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)]; -+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment); -+ struct squashfs_fragment_entry_2 fragment_entry; -+ -+ if (msblk->swap) { -+ struct squashfs_fragment_entry_2 sfragment_entry; -+ -+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, -+ start_block, offset, -+ sizeof(sfragment_entry), &start_block, -+ &offset)) -+ goto out; -+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, -+ start_block, offset, -+ sizeof(fragment_entry), &start_block, -+ &offset)) -+ goto out; -+ -+ *fragment_start_block = fragment_entry.start_block; -+ *fragment_size = fragment_entry.size; -+ -+ return 1; -+ -+out: -+ return 0; -+} -+ -+ -+static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, -+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino) -+{ -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ i->i_ino = ino; -+ i->i_mtime.tv_sec = sblk->mkfs_time; -+ i->i_atime.tv_sec = sblk->mkfs_time; -+ i->i_ctime.tv_sec = sblk->mkfs_time; -+ i->i_uid = msblk->uid[inodeb->uid]; -+ i->i_mode = inodeb->mode; -+ i->i_nlink = 1; -+ i->i_size = 0; -+ if (inodeb->guid == SQUASHFS_GUIDS) -+ i->i_gid = i->i_uid; -+ else -+ i->i_gid = msblk->guid[inodeb->guid]; -+} -+ -+ -+static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode) -+{ -+ struct super_block *s = i->i_sb; -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ unsigned int block = SQUASHFS_INODE_BLK(inode) + -+ sblk->inode_table_start; -+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); -+ unsigned int ino = i->i_ino; -+ long long next_block; -+ unsigned int next_offset; -+ union squashfs_inode_header_2 id, sid; -+ struct squashfs_base_inode_header_2 *inodeb = &id.base, -+ *sinodeb = &sid.base; -+ -+ TRACE("Entered squashfs_iget\n"); -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, -+ offset, sizeof(*sinodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb, -+ sizeof(*sinodeb)); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) inodeb, block, -+ offset, sizeof(*inodeb), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ squashfs_new_inode(msblk, i, inodeb, ino); -+ -+ switch(inodeb->inode_type) { -+ case SQUASHFS_FILE_TYPE: { -+ struct squashfs_reg_inode_header_2 *inodep = &id.reg; -+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg; -+ long long frag_blk; -+ unsigned int frag_size = 0; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ frag_blk = SQUASHFS_INVALID_BLK; -+ if (inodep->fragment != SQUASHFS_INVALID_FRAG && -+ !get_fragment_location_2(s, -+ inodep->fragment, &frag_blk, &frag_size)) -+ goto failed_read; -+ -+ i->i_size = inodep->file_size; -+ i->i_fop = &generic_ro_fops; -+ i->i_mode |= S_IFREG; -+ i->i_mtime.tv_sec = inodep->mtime; -+ i->i_atime.tv_sec = inodep->mtime; -+ i->i_ctime.tv_sec = inodep->mtime; -+ i->i_blocks = ((i->i_size - 1) >> 9) + 1; -+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; -+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; -+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->u.s1.block_list_start = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ if (sblk->block_size > 4096) -+ i->i_data.a_ops = &squashfs_aops; -+ else -+ i->i_data.a_ops = &squashfs_aops_4K; -+ -+ TRACE("File inode %x:%x, start_block %x, " -+ "block_list_start %llx, offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, next_block, -+ next_offset); -+ break; -+ } -+ case SQUASHFS_DIR_TYPE: { -+ struct squashfs_dir_inode_header_2 *inodep = &id.dir; -+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops_2; -+ i->i_fop = &squashfs_dir_ops_2; -+ i->i_mode |= S_IFDIR; -+ i->i_mtime.tv_sec = inodep->mtime; -+ i->i_atime.tv_sec = inodep->mtime; -+ i->i_ctime.tv_sec = inodep->mtime; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = 0; -+ SQUASHFS_I(i)->u.s2.parent_inode = 0; -+ -+ TRACE("Directory inode %x:%x, start_block %x, offset " -+ "%x\n", SQUASHFS_INODE_BLK(inode), -+ offset, inodep->start_block, -+ inodep->offset); -+ break; -+ } -+ case SQUASHFS_LDIR_TYPE: { -+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir; -+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_size = inodep->file_size; -+ i->i_op = &squashfs_dir_inode_ops_2; -+ i->i_fop = &squashfs_dir_ops_2; -+ i->i_mode |= S_IFDIR; -+ i->i_mtime.tv_sec = inodep->mtime; -+ i->i_atime.tv_sec = inodep->mtime; -+ i->i_ctime.tv_sec = inodep->mtime; -+ SQUASHFS_I(i)->start_block = inodep->start_block; -+ SQUASHFS_I(i)->offset = inodep->offset; -+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; -+ SQUASHFS_I(i)->u.s2.directory_index_offset = -+ next_offset; -+ SQUASHFS_I(i)->u.s2.directory_index_count = -+ inodep->i_count; -+ SQUASHFS_I(i)->u.s2.parent_inode = 0; -+ -+ TRACE("Long directory inode %x:%x, start_block %x, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->start_block, inodep->offset); -+ break; -+ } -+ case SQUASHFS_SYMLINK_TYPE: { -+ struct squashfs_symlink_inode_header_2 *inodep = -+ &id.symlink; -+ struct squashfs_symlink_inode_header_2 *sinodep = -+ &sid.symlink; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep, -+ sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_size = inodep->symlink_size; -+ i->i_op = &page_symlink_inode_operations; -+ i->i_data.a_ops = &squashfs_symlink_aops; -+ i->i_mode |= S_IFLNK; -+ SQUASHFS_I(i)->start_block = next_block; -+ SQUASHFS_I(i)->offset = next_offset; -+ -+ TRACE("Symbolic link inode %x:%x, start_block %llx, " -+ "offset %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ next_block, next_offset); -+ break; -+ } -+ case SQUASHFS_BLKDEV_TYPE: -+ case SQUASHFS_CHRDEV_TYPE: { -+ struct squashfs_dev_inode_header_2 *inodep = &id.dev; -+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev; -+ -+ if (msblk->swap) { -+ if (!squashfs_get_cached_block(s, (char *) -+ sinodep, block, offset, -+ sizeof(*sinodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep); -+ } else -+ if (!squashfs_get_cached_block(s, (char *) -+ inodep, block, offset, -+ sizeof(*inodep), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ i->i_mode |= (inodeb->inode_type == -+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : -+ S_IFBLK; -+ init_special_inode(i, i->i_mode, -+ old_decode_dev(inodep->rdev)); -+ -+ TRACE("Device inode %x:%x, rdev %x\n", -+ SQUASHFS_INODE_BLK(inode), offset, -+ inodep->rdev); -+ break; -+ } -+ case SQUASHFS_FIFO_TYPE: -+ case SQUASHFS_SOCKET_TYPE: { -+ -+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) -+ ? S_IFIFO : S_IFSOCK; -+ init_special_inode(i, i->i_mode, 0); -+ break; -+ } -+ default: -+ ERROR("Unknown inode type %d in squashfs_iget!\n", -+ inodeb->inode_type); -+ goto failed_read1; -+ } -+ -+ return 1; -+ -+failed_read: -+ ERROR("Unable to read inode [%x:%x]\n", block, offset); -+ -+failed_read1: -+ return 0; -+} -+ -+ -+static int get_dir_index_using_offset(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ long long f_pos) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index_2 index; -+ -+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", -+ i_count, (unsigned int) f_pos); -+ -+ if (f_pos == 0) -+ goto finish; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index_2 sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) &index, -+ index_start, index_offset, -+ sizeof(index), &index_start, -+ &index_offset); -+ -+ if (index.index > f_pos) -+ break; -+ -+ squashfs_get_cached_block(s, NULL, index_start, index_offset, -+ index.size + 1, &index_start, -+ &index_offset); -+ -+ length = index.index; -+ *next_block = index.start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ -+finish: -+ return length; -+} -+ -+ -+static int get_dir_index_using_name(struct super_block *s, long long -+ *next_block, unsigned int *next_offset, -+ long long index_start, -+ unsigned int index_offset, int i_count, -+ const char *name, int size) -+{ -+ struct squashfs_sb_info *msblk = s->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ int i, length = 0; -+ struct squashfs_dir_index_2 *index; -+ char *str; -+ -+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); -+ -+ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + -+ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_index\n"); -+ goto failure; -+ } -+ -+ index = (struct squashfs_dir_index_2 *) (str + SQUASHFS_NAME_LEN + 1); -+ strncpy(str, name, size); -+ str[size] = '\0'; -+ -+ for (i = 0; i < i_count; i++) { -+ if (msblk->swap) { -+ struct squashfs_dir_index_2 sindex; -+ squashfs_get_cached_block(s, (char *) &sindex, -+ index_start, index_offset, -+ sizeof(sindex), &index_start, -+ &index_offset); -+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex); -+ } else -+ squashfs_get_cached_block(s, (char *) index, -+ index_start, index_offset, -+ sizeof(struct squashfs_dir_index_2), -+ &index_start, &index_offset); -+ -+ squashfs_get_cached_block(s, index->name, index_start, -+ index_offset, index->size + 1, -+ &index_start, &index_offset); -+ -+ index->name[index->size + 1] = '\0'; -+ -+ if (strcmp(index->name, str) > 0) -+ break; -+ -+ length = index->index; -+ *next_block = index->start_block + sblk->directory_table_start; -+ } -+ -+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; -+ kfree(str); -+failure: -+ return length; -+} -+ -+ -+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir) -+{ -+ struct inode *i = file->f_dentry->d_inode; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header_2 dirh; -+ struct squashfs_dir_entry_2 *dire; -+ -+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto finish; -+ } -+ -+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, -+ file->f_pos); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header_2 sdirh; -+ -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry_2 sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block, next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block, next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, -+ dire->size + 1, &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (file->f_pos >= length) -+ continue; -+ -+ dire->name[dire->size + 1] = '\0'; -+ -+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n", -+ (unsigned int) dirent, dire->name, -+ dire->size + 1, (int) file->f_pos, -+ dirh.start_block, dire->offset, -+ squashfs_filetype_table[dire->type]); -+ -+ if (filldir(dirent, dire->name, dire->size + 1, -+ file->f_pos, SQUASHFS_MK_VFS_INODE( -+ dirh.start_block, dire->offset), -+ squashfs_filetype_table[dire->type]) -+ < 0) { -+ TRACE("Filldir returned less than 0\n"); -+ goto finish; -+ } -+ file->f_pos = length; -+ } -+ } -+ -+finish: -+ kfree(dire); -+ return 0; -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ kfree(dire); -+ return 0; -+} -+ -+ -+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry, -+ struct nameidata *nd) -+{ -+ const unsigned char *name = dentry->d_name.name; -+ int len = dentry->d_name.len; -+ struct inode *inode = NULL; -+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ long long next_block = SQUASHFS_I(i)->start_block + -+ sblk->directory_table_start; -+ int next_offset = SQUASHFS_I(i)->offset, length = 0, -+ dir_count; -+ struct squashfs_dir_header_2 dirh; -+ struct squashfs_dir_entry_2 *dire; -+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1; -+ -+ TRACE("Entered squashfs_lookup_2 [%llx:%x]\n", next_block, next_offset); -+ -+ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + -+ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { -+ ERROR("Failed to allocate squashfs_dir_entry\n"); -+ goto exit_loop; -+ } -+ -+ if (len > SQUASHFS_NAME_LEN) -+ goto exit_loop; -+ -+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_start, -+ SQUASHFS_I(i)->u.s2.directory_index_offset, -+ SQUASHFS_I(i)->u.s2.directory_index_count, name, -+ len); -+ -+ while (length < i_size_read(i)) { -+ /* read directory header */ -+ if (msblk->swap) { -+ struct squashfs_dir_header_2 sdirh; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, -+ next_block, next_offset, sizeof(sdirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdirh); -+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, -+ next_block, next_offset, sizeof(dirh), -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(dirh); -+ } -+ -+ dir_count = dirh.count + 1; -+ while (dir_count--) { -+ if (msblk->swap) { -+ struct squashfs_dir_entry_2 sdire; -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ &sdire, next_block,next_offset, -+ sizeof(sdire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(sdire); -+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); -+ } else { -+ if (!squashfs_get_cached_block(i->i_sb, (char *) -+ dire, next_block,next_offset, -+ sizeof(*dire), &next_block, -+ &next_offset)) -+ goto failed_read; -+ -+ length += sizeof(*dire); -+ } -+ -+ if (!squashfs_get_cached_block(i->i_sb, dire->name, -+ next_block, next_offset, dire->size + 1, -+ &next_block, &next_offset)) -+ goto failed_read; -+ -+ length += dire->size + 1; -+ -+ if (sorted && name[0] < dire->name[0]) -+ goto exit_loop; -+ -+ if ((len == dire->size + 1) && !strncmp(name, -+ dire->name, len)) { -+ squashfs_inode_t ino = -+ SQUASHFS_MKINODE(dirh.start_block, -+ dire->offset); -+ unsigned int inode_number = SQUASHFS_MK_VFS_INODE(dirh.start_block, -+ dire->offset); -+ -+ TRACE("calling squashfs_iget for directory " -+ "entry %s, inode %x:%x, %lld\n", name, -+ dirh.start_block, dire->offset, ino); -+ -+ inode = squashfs_iget(i->i_sb, ino, inode_number); -+ -+ goto exit_loop; -+ } -+ } -+ } -+ -+exit_loop: -+ kfree(dire); -+ d_add(dentry, inode); -+ return ERR_PTR(0); -+ -+failed_read: -+ ERROR("Unable to read directory block [%llx:%x]\n", next_block, -+ next_offset); -+ goto exit_loop; -+} -+ -+ -+int squashfs_2_0_supported(struct squashfs_sb_info *msblk) -+{ -+ struct squashfs_super_block *sblk = &msblk->sblk; -+ -+ msblk->read_inode = squashfs_read_inode_2; -+ msblk->read_fragment_index_table = read_fragment_index_table_2; -+ -+ sblk->bytes_used = sblk->bytes_used_2; -+ sblk->uid_start = sblk->uid_start_2; -+ sblk->guid_start = sblk->guid_start_2; -+ sblk->inode_table_start = sblk->inode_table_start_2; -+ sblk->directory_table_start = sblk->directory_table_start_2; -+ sblk->fragment_table_start = sblk->fragment_table_start_2; -+ -+ return 1; -+} -diff -x .gitignore -Nurp linux-2.6.20/fs/squashfs/squashfs.h linux-2.6.20-squashfs3.2-r2/fs/squashfs/squashfs.h ---- linux-2.6.20/fs/squashfs/squashfs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.20-squashfs3.2-r2/fs/squashfs/squashfs.h 2007-01-12 01:42:11.000000000 +0000 -@@ -0,0 +1,87 @@ -+/* -+ * Squashfs - a compressed read only filesystem for Linux -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs.h -+ */ -+ -+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+#endif -+ -+#ifdef SQUASHFS_TRACE -+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args) -+#else -+#define TRACE(s, args...) {} -+#endif -+ -+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args) -+ -+#define SERROR(s, args...) do { \ -+ if (!silent) \ -+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\ -+ } while(0) -+ -+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args) -+ -+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode) -+{ -+ return list_entry(inode, struct squashfs_inode_info, vfs_inode); -+} -+ -+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY) -+#define SQSH_EXTERN -+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer, -+ long long index, unsigned int length, -+ long long *next_index, int srclength); -+extern int squashfs_get_cached_block(struct super_block *s, char *buffer, -+ long long block, unsigned int offset, -+ int length, long long *next_block, -+ unsigned int *next_offset); -+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct -+ squashfs_fragment_cache *fragment); -+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block -+ *s, long long start_block, -+ int length); -+extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number); -+extern const struct address_space_operations squashfs_symlink_aops; -+extern const struct address_space_operations squashfs_aops; -+extern const struct address_space_operations squashfs_aops_4K; -+extern struct inode_operations squashfs_dir_inode_ops; -+#else -+#define SQSH_EXTERN static -+#endif -+ -+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk); -+#else -+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk) -+{ -+ return 0; -+} -+#endif -+ -+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY -+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk); -+#else -+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk) -+{ -+ return 0; -+} -+#endif -diff -x .gitignore -Nurp linux-2.6.20/include/linux/squashfs_fs.h linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs.h ---- linux-2.6.20/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs.h 2007-01-12 00:06:09.000000000 +0000 -@@ -0,0 +1,934 @@ -+#ifndef SQUASHFS_FS -+#define SQUASHFS_FS -+ -+/* -+ * Squashfs -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs_fs.h -+ */ -+ -+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY -+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY -+#endif -+ -+#ifdef CONFIG_SQUASHFS_VMALLOC -+#define SQUASHFS_ALLOC(a) vmalloc(a) -+#define SQUASHFS_FREE(a) vfree(a) -+#else -+#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL) -+#define SQUASHFS_FREE(a) kfree(a) -+#endif -+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE -+#define SQUASHFS_MAJOR 3 -+#define SQUASHFS_MINOR 0 -+#define SQUASHFS_MAGIC 0x73717368 -+#define SQUASHFS_MAGIC_SWAP 0x68737173 -+#define SQUASHFS_START 0 -+ -+/* size of metadata (inode and directory) blocks */ -+#define SQUASHFS_METADATA_SIZE 8192 -+#define SQUASHFS_METADATA_LOG 13 -+ -+/* default size of data blocks */ -+#define SQUASHFS_FILE_SIZE 65536 -+#define SQUASHFS_FILE_LOG 16 -+ -+#define SQUASHFS_FILE_MAX_SIZE 65536 -+ -+/* Max number of uids and gids */ -+#define SQUASHFS_UIDS 256 -+#define SQUASHFS_GUIDS 255 -+ -+/* Max length of filename (not 255) */ -+#define SQUASHFS_NAME_LEN 256 -+ -+#define SQUASHFS_INVALID ((long long) 0xffffffffffff) -+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff) -+#define SQUASHFS_INVALID_BLK ((long long) -1) -+#define SQUASHFS_USED_BLK ((long long) -2) -+ -+/* Filesystem flags */ -+#define SQUASHFS_NOI 0 -+#define SQUASHFS_NOD 1 -+#define SQUASHFS_CHECK 2 -+#define SQUASHFS_NOF 3 -+#define SQUASHFS_NO_FRAG 4 -+#define SQUASHFS_ALWAYS_FRAG 5 -+#define SQUASHFS_DUPLICATE 6 -+#define SQUASHFS_EXPORT 7 -+ -+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1) -+ -+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NOI) -+ -+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NOD) -+ -+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NOF) -+ -+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_NO_FRAG) -+ -+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_ALWAYS_FRAG) -+ -+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_DUPLICATE) -+ -+#define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_EXPORT) -+ -+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \ -+ SQUASHFS_CHECK) -+ -+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \ -+ duplicate_checking, exortable) (noi | (nod << 1) | (check_data << 2) \ -+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \ -+ (duplicate_checking << 6) | (exportable << 7)) -+ -+/* Max number of types and file types */ -+#define SQUASHFS_DIR_TYPE 1 -+#define SQUASHFS_FILE_TYPE 2 -+#define SQUASHFS_SYMLINK_TYPE 3 -+#define SQUASHFS_BLKDEV_TYPE 4 -+#define SQUASHFS_CHRDEV_TYPE 5 -+#define SQUASHFS_FIFO_TYPE 6 -+#define SQUASHFS_SOCKET_TYPE 7 -+#define SQUASHFS_LDIR_TYPE 8 -+#define SQUASHFS_LREG_TYPE 9 -+ -+/* 1.0 filesystem type definitions */ -+#define SQUASHFS_TYPES 5 -+#define SQUASHFS_IPC_TYPE 0 -+ -+/* Flag whether block is compressed or uncompressed, bit is set if block is -+ * uncompressed */ -+#define SQUASHFS_COMPRESSED_BIT (1 << 15) -+ -+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \ -+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT) -+ -+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT)) -+ -+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24) -+ -+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \ -+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \ -+ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK) -+ -+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) -+ -+/* -+ * Inode number ops. Inodes consist of a compressed block number, and an -+ * uncompressed offset within that block -+ */ -+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16)) -+ -+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff)) -+ -+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\ -+ << 16) + (B))) -+ -+/* Compute 32 bit VFS inode number from squashfs inode number */ -+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \ -+ ((b) >> 2) + 1)) -+/* XXX */ -+ -+/* Translate between VFS mode and squashfs mode */ -+#define SQUASHFS_MODE(a) ((a) & 0xfff) -+ -+/* fragment and fragment table defines */ -+#define SQUASHFS_FRAGMENT_BYTES(A) ((A) * sizeof(struct squashfs_fragment_entry)) -+ -+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \ -+ SQUASHFS_METADATA_SIZE - 1) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\ -+ sizeof(long long)) -+ -+/* inode lookup table defines */ -+#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode_t)) -+ -+#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \ -+ SQUASHFS_METADATA_SIZE - 1) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\ -+ sizeof(long long)) -+ -+/* cached data constants for filesystem */ -+#define SQUASHFS_CACHED_BLKS 8 -+ -+#define SQUASHFS_MAX_FILE_SIZE_LOG 64 -+ -+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \ -+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2)) -+ -+#define SQUASHFS_MARKER_BYTE 0xff -+ -+/* meta index cache */ -+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int)) -+#define SQUASHFS_META_ENTRIES 31 -+#define SQUASHFS_META_NUMBER 8 -+#define SQUASHFS_SLOTS 4 -+ -+struct meta_entry { -+ long long data_block; -+ unsigned int index_block; -+ unsigned short offset; -+ unsigned short pad; -+}; -+ -+struct meta_index { -+ unsigned int inode_number; -+ unsigned int offset; -+ unsigned short entries; -+ unsigned short skip; -+ unsigned short locked; -+ unsigned short pad; -+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES]; -+}; -+ -+ -+/* -+ * definitions for structures on disk -+ */ -+ -+typedef long long squashfs_block_t; -+typedef long long squashfs_inode_t; -+ -+struct squashfs_super_block { -+ unsigned int s_magic; -+ unsigned int inodes; -+ unsigned int bytes_used_2; -+ unsigned int uid_start_2; -+ unsigned int guid_start_2; -+ unsigned int inode_table_start_2; -+ unsigned int directory_table_start_2; -+ unsigned int s_major:16; -+ unsigned int s_minor:16; -+ unsigned int block_size_1:16; -+ unsigned int block_log:16; -+ unsigned int flags:8; -+ unsigned int no_uids:8; -+ unsigned int no_guids:8; -+ unsigned int mkfs_time /* time of filesystem creation */; -+ squashfs_inode_t root_inode; -+ unsigned int block_size; -+ unsigned int fragments; -+ unsigned int fragment_table_start_2; -+ long long bytes_used; -+ long long uid_start; -+ long long guid_start; -+ long long inode_table_start; -+ long long directory_table_start; -+ long long fragment_table_start; -+ long long lookup_table_start; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_index { -+ unsigned int index; -+ unsigned int start_block; -+ unsigned char size; -+ unsigned char name[0]; -+} __attribute__ ((packed)); -+ -+#define SQUASHFS_BASE_INODE_HEADER \ -+ unsigned int inode_type:4; \ -+ unsigned int mode:12; \ -+ unsigned int uid:8; \ -+ unsigned int guid:8; \ -+ unsigned int mtime; \ -+ unsigned int inode_number; -+ -+struct squashfs_base_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+} __attribute__ ((packed)); -+ -+struct squashfs_ipc_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+} __attribute__ ((packed)); -+ -+struct squashfs_dev_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned short rdev; -+} __attribute__ ((packed)); -+ -+struct squashfs_symlink_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned short symlink_size; -+ char symlink[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_reg_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ squashfs_block_t start_block; -+ unsigned int fragment; -+ unsigned int offset; -+ unsigned int file_size; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_lreg_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ squashfs_block_t start_block; -+ unsigned int fragment; -+ unsigned int offset; -+ long long file_size; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned int file_size:19; -+ unsigned int offset:13; -+ unsigned int start_block; -+ unsigned int parent_inode; -+} __attribute__ ((packed)); -+ -+struct squashfs_ldir_inode_header { -+ SQUASHFS_BASE_INODE_HEADER; -+ unsigned int nlink; -+ unsigned int file_size:27; -+ unsigned int offset:13; -+ unsigned int start_block; -+ unsigned int i_count:16; -+ unsigned int parent_inode; -+ struct squashfs_dir_index index[0]; -+} __attribute__ ((packed)); -+ -+union squashfs_inode_header { -+ struct squashfs_base_inode_header base; -+ struct squashfs_dev_inode_header dev; -+ struct squashfs_symlink_inode_header symlink; -+ struct squashfs_reg_inode_header reg; -+ struct squashfs_lreg_inode_header lreg; -+ struct squashfs_dir_inode_header dir; -+ struct squashfs_ldir_inode_header ldir; -+ struct squashfs_ipc_inode_header ipc; -+}; -+ -+struct squashfs_dir_entry { -+ unsigned int offset:13; -+ unsigned int type:3; -+ unsigned int size:8; -+ int inode_number:16; -+ char name[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_header { -+ unsigned int count:8; -+ unsigned int start_block; -+ unsigned int inode_number; -+} __attribute__ ((packed)); -+ -+struct squashfs_fragment_entry { -+ long long start_block; -+ unsigned int size; -+ unsigned int pending; -+} __attribute__ ((packed)); -+ -+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen); -+extern int squashfs_uncompress_init(void); -+extern int squashfs_uncompress_exit(void); -+ -+/* -+ * macros to convert each packed bitfield structure from little endian to big -+ * endian and vice versa. These are needed when creating or using a filesystem -+ * on a machine with different byte ordering to the target architecture. -+ * -+ */ -+ -+#define SQUASHFS_SWAP_START \ -+ int bits;\ -+ int b_pos;\ -+ unsigned long long val;\ -+ unsigned char *s;\ -+ unsigned char *d; -+ -+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\ -+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\ -+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\ -+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\ -+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\ -+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\ -+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\ -+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\ -+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\ -+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\ -+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\ -+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\ -+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\ -+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\ -+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\ -+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\ -+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\ -+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\ -+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\ -+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\ -+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\ -+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\ -+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\ -+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\ -+ SQUASHFS_SWAP((s)->lookup_table_start, d, 888, 64);\ -+} -+ -+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ -+ SQUASHFS_MEMSET(s, d, n);\ -+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ -+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ -+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ -+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ -+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32); -+ -+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ -+} -+ -+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_ipc_inode_header))\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_dev_inode_header)); \ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\ -+} -+ -+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_symlink_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\ -+} -+ -+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_reg_inode_header));\ -+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\ -+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\ -+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\ -+} -+ -+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_lreg_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\ -+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\ -+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_dir_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\ -+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\ -+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\ -+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\ -+} -+ -+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ -+ sizeof(struct squashfs_ldir_inode_header));\ -+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\ -+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\ -+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\ -+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\ -+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\ -+ SQUASHFS_SWAP((s)->index, d, 0, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->size, d, 64, 8);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\ -+ SQUASHFS_SWAP((s)->count, d, 0, 8);\ -+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\ -+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\ -+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ -+ SQUASHFS_SWAP((s)->type, d, 13, 3);\ -+ SQUASHFS_SWAP((s)->size, d, 16, 8);\ -+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\ -+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\ -+ SQUASHFS_SWAP((s)->size, d, 64, 32);\ -+} -+ -+#define SQUASHFS_SWAP_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1) -+ -+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * 2);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ 16)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\ -+} -+ -+#define SQUASHFS_SWAP_INTS(s, d, n) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * 4);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ 32)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\ -+} -+ -+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * 8);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ 64)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\ -+} -+ -+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\ -+ int entry;\ -+ int bit_position;\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, n * bits / 8);\ -+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ -+ bits)\ -+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) -+#define SQUASHFS_SWAP_LOOKUP_BLOCKS(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) -+ -+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY -+ -+struct squashfs_base_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+} __attribute__ ((packed)); -+ -+struct squashfs_ipc_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned int type:4; -+ unsigned int offset:4; -+} __attribute__ ((packed)); -+ -+struct squashfs_dev_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned short rdev; -+} __attribute__ ((packed)); -+ -+struct squashfs_symlink_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned short symlink_size; -+ char symlink[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_reg_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned int mtime; -+ unsigned int start_block; -+ unsigned int file_size:32; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_inode_header_1 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:4; /* index into uid table */ -+ unsigned int guid:4; /* index into guid table */ -+ unsigned int file_size:19; -+ unsigned int offset:13; -+ unsigned int mtime; -+ unsigned int start_block:24; -+} __attribute__ ((packed)); -+ -+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \ -+ SQUASHFS_MEMSET(s, d, n);\ -+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ -+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ -+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\ -+ SQUASHFS_SWAP((s)->guid, d, 20, 4); -+ -+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\ -+} -+ -+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_ipc_inode_header_1));\ -+ SQUASHFS_SWAP((s)->type, d, 24, 4);\ -+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\ -+} -+ -+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_dev_inode_header_1));\ -+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\ -+} -+ -+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_symlink_inode_header_1));\ -+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\ -+} -+ -+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_reg_inode_header_1));\ -+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ -+ sizeof(struct squashfs_dir_inode_header_1));\ -+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\ -+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\ -+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\ -+} -+ -+#endif -+ -+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY -+ -+struct squashfs_dir_index_2 { -+ unsigned int index:27; -+ unsigned int start_block:29; -+ unsigned char size; -+ unsigned char name[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_base_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+} __attribute__ ((packed)); -+ -+struct squashfs_ipc_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+} __attribute__ ((packed)); -+ -+struct squashfs_dev_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned short rdev; -+} __attribute__ ((packed)); -+ -+struct squashfs_symlink_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned short symlink_size; -+ char symlink[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_reg_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned int mtime; -+ unsigned int start_block; -+ unsigned int fragment; -+ unsigned int offset; -+ unsigned int file_size:32; -+ unsigned short block_list[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned int file_size:19; -+ unsigned int offset:13; -+ unsigned int mtime; -+ unsigned int start_block:24; -+} __attribute__ ((packed)); -+ -+struct squashfs_ldir_inode_header_2 { -+ unsigned int inode_type:4; -+ unsigned int mode:12; /* protection */ -+ unsigned int uid:8; /* index into uid table */ -+ unsigned int guid:8; /* index into guid table */ -+ unsigned int file_size:27; -+ unsigned int offset:13; -+ unsigned int mtime; -+ unsigned int start_block:24; -+ unsigned int i_count:16; -+ struct squashfs_dir_index_2 index[0]; -+} __attribute__ ((packed)); -+ -+union squashfs_inode_header_2 { -+ struct squashfs_base_inode_header_2 base; -+ struct squashfs_dev_inode_header_2 dev; -+ struct squashfs_symlink_inode_header_2 symlink; -+ struct squashfs_reg_inode_header_2 reg; -+ struct squashfs_dir_inode_header_2 dir; -+ struct squashfs_ldir_inode_header_2 ldir; -+ struct squashfs_ipc_inode_header_2 ipc; -+}; -+ -+struct squashfs_dir_header_2 { -+ unsigned int count:8; -+ unsigned int start_block:24; -+} __attribute__ ((packed)); -+ -+struct squashfs_dir_entry_2 { -+ unsigned int offset:13; -+ unsigned int type:3; -+ unsigned int size:8; -+ char name[0]; -+} __attribute__ ((packed)); -+ -+struct squashfs_fragment_entry_2 { -+ unsigned int start_block; -+ unsigned int size; -+} __attribute__ ((packed)); -+ -+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ -+ SQUASHFS_MEMSET(s, d, n);\ -+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ -+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ -+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ -+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ -+ -+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ -+} -+ -+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \ -+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2)) -+ -+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_dev_inode_header_2)); \ -+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\ -+} -+ -+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_symlink_inode_header_2));\ -+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\ -+} -+ -+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_reg_inode_header_2));\ -+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\ -+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\ -+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\ -+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_dir_inode_header_2));\ -+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\ -+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\ -+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\ -+} -+ -+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ -+ sizeof(struct squashfs_ldir_inode_header_2));\ -+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\ -+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\ -+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\ -+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\ -+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\ -+ SQUASHFS_SWAP((s)->index, d, 0, 27);\ -+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\ -+ SQUASHFS_SWAP((s)->size, d, 56, 8);\ -+} -+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\ -+ SQUASHFS_SWAP((s)->count, d, 0, 8);\ -+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\ -+} -+ -+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\ -+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ -+ SQUASHFS_SWAP((s)->type, d, 13, 3);\ -+ SQUASHFS_SWAP((s)->size, d, 16, 8);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\ -+ SQUASHFS_SWAP_START\ -+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\ -+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\ -+ SQUASHFS_SWAP((s)->size, d, 32, 32);\ -+} -+ -+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n) -+ -+/* fragment and fragment table defines */ -+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2)) -+ -+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \ -+ SQUASHFS_METADATA_SIZE - 1) / \ -+ SQUASHFS_METADATA_SIZE) -+ -+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\ -+ sizeof(int)) -+ -+#endif -+ -+#ifdef __KERNEL__ -+ -+/* -+ * macros used to swap each structure entry, taking into account -+ * bitfields and different bitfield placing conventions on differing -+ * architectures -+ */ -+ -+#include -+ -+#ifdef __BIG_ENDIAN -+ /* convert from little endian to big endian */ -+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ -+ tbits, b_pos) -+#else -+ /* convert from big endian to little endian */ -+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ -+ tbits, 64 - tbits - b_pos) -+#endif -+ -+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\ -+ b_pos = pos % 8;\ -+ val = 0;\ -+ s = (unsigned char *)p + (pos / 8);\ -+ d = ((unsigned char *) &val) + 7;\ -+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \ -+ *d-- = *s++;\ -+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\ -+} -+ -+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n); -+ -+#endif -+#endif -diff -x .gitignore -Nurp linux-2.6.20/include/linux/squashfs_fs_i.h linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs_i.h ---- linux-2.6.20/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs_i.h 2007-01-12 00:06:09.000000000 +0000 -@@ -0,0 +1,45 @@ -+#ifndef SQUASHFS_FS_I -+#define SQUASHFS_FS_I -+/* -+ * Squashfs -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs_fs_i.h -+ */ -+ -+struct squashfs_inode_info { -+ long long start_block; -+ unsigned int offset; -+ union { -+ struct { -+ long long fragment_start_block; -+ unsigned int fragment_size; -+ unsigned int fragment_offset; -+ long long block_list_start; -+ } s1; -+ struct { -+ long long directory_index_start; -+ unsigned int directory_index_offset; -+ unsigned int directory_index_count; -+ unsigned int parent_inode; -+ } s2; -+ } u; -+ struct inode vfs_inode; -+}; -+#endif -diff -x .gitignore -Nurp linux-2.6.20/include/linux/squashfs_fs_sb.h linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs_sb.h ---- linux-2.6.20/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs_sb.h 2007-01-12 01:23:47.000000000 +0000 -@@ -0,0 +1,74 @@ -+#ifndef SQUASHFS_FS_SB -+#define SQUASHFS_FS_SB -+/* -+ * Squashfs -+ * -+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 -+ * Phillip Lougher -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2, -+ * or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ * squashfs_fs_sb.h -+ */ -+ -+#include -+ -+struct squashfs_cache { -+ long long block; -+ int length; -+ long long next_index; -+ char *data; -+}; -+ -+struct squashfs_fragment_cache { -+ long long block; -+ int length; -+ unsigned int locked; -+ char *data; -+}; -+ -+struct squashfs_sb_info { -+ struct squashfs_super_block sblk; -+ int devblksize; -+ int devblksize_log2; -+ int swap; -+ struct squashfs_cache *block_cache; -+ struct squashfs_fragment_cache *fragment; -+ int next_cache; -+ int next_fragment; -+ int next_meta_index; -+ unsigned int *uid; -+ unsigned int *guid; -+ long long *fragment_index; -+ unsigned int *fragment_index_2; -+ char *read_page; -+ struct mutex read_data_mutex; -+ struct mutex read_page_mutex; -+ struct mutex block_cache_mutex; -+ struct mutex fragment_mutex; -+ struct mutex meta_index_mutex; -+ wait_queue_head_t waitq; -+ wait_queue_head_t fragment_wait_queue; -+ struct meta_index *meta_index; -+ z_stream stream; -+ long long *inode_lookup_table; -+ int (*read_inode)(struct inode *i, squashfs_inode_t \ -+ inode); -+ long long (*read_blocklist)(struct inode *inode, int \ -+ index, int readahead_blks, char *block_list, \ -+ unsigned short **block_p, unsigned int *bsize); -+ int (*read_fragment_index_table)(struct super_block *s); -+}; -+#endif -diff -x .gitignore -Nurp linux-2.6.20/init/do_mounts_rd.c linux-2.6.20-squashfs3.2-r2/init/do_mounts_rd.c ---- linux-2.6.20/init/do_mounts_rd.c 2006-11-29 21:57:37.000000000 +0000 -+++ linux-2.6.20-squashfs3.2-r2/init/do_mounts_rd.c 2007-01-16 02:06:03.000000000 +0000 -@@ -5,6 +5,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in - * numbers could not be found. - * - * We currently check for the following magic numbers: -+ * squashfs - * minix - * ext2 - * romfs -@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start - struct ext2_super_block *ext2sb; - struct romfs_super_block *romfsb; - struct cramfs_super *cramfsb; -+ struct squashfs_super_block *squashfsb; - int nblocks = -1; - unsigned char *buf; - -@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start - ext2sb = (struct ext2_super_block *) buf; - romfsb = (struct romfs_super_block *) buf; - cramfsb = (struct cramfs_super *) buf; -+ squashfsb = (struct squashfs_super_block *) buf; - memset(buf, 0xe5, size); - - /* -@@ -101,6 +105,18 @@ identify_ramdisk_image(int fd, int start - goto done; - } - -+ /* squashfs is at block zero too */ -+ if (squashfsb->s_magic == SQUASHFS_MAGIC) { -+ printk(KERN_NOTICE -+ "RAMDISK: squashfs filesystem found at block %d\n", -+ start_block); -+ if (squashfsb->s_major < 3) -+ nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; -+ else -+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; -+ goto done; -+ } -+ - /* - * Read block 1 to test for minix and ext2 superblock - */ diff --git a/packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb b/packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb deleted file mode 100644 index 4543979eb3..0000000000 --- a/packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb +++ /dev/null @@ -1,59 +0,0 @@ -require linux.inc -require linux-openmoko.inc - -DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko" -VANILLA_VERSION = "2.6.23" -KERNEL_RELEASE = "2.6.24-rc7" - -KERNEL_VERSION = "${KERNEL_RELEASE}" - -# If you use a rc, you will need to use this: -PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}+svnr${SRCREV}" -PR = "r0" - -KERNEL_IMAGETYPE = "uImage" -UBOOT_ENTRYPOINT = "30008000" - -############################################################## -# source and patches -# -SRCREV_FORMAT = "patches-rconfig" - -SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=v2.6.24-rc7 \ - svn://svn.openmoko.org/branches/src/target/kernel/2.6.24.x;module=patches;proto=http;name=patches \ - svn://svn.openmoko.org/branches/src/target/kernel/2.6.24.x;module=config;proto=http;name=config " - -S = "${WORKDIR}/git" - -############################################################## -# kernel image resides on a seperate flash partition (for now) -# -FILES_kernel-image = "" -ALLOW_EMPTY = "1" - -COMPATIBLE_HOST = "arm.*-linux" -COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' - -CMDLINE = "unused -- bootloader passes ATAG list" - -############################################################### -# module configs specific to this kernel -# - -# usb -module_autoload_ohci-hcd = "ohci-hcd" -module_autoload_hci_usb = "hci_usb" -module_autoload_g_ether = "g_ether" -# audio -module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753" -# sd/mmc -module_autoload_s3cmci = "s3cmci" - -do_prepatch() { - mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av - mv patches patches.openmoko - mv .pc .pc.old - mv ${WORKDIR}/config/defconfig-${KERNEL_VERSION} ${WORKDIR}/defconfig -} - -addtask prepatch after do_unpack before do_patch diff --git a/packages/linux/linux-openmoko-devel_git.bb b/packages/linux/linux-openmoko-devel_git.bb deleted file mode 100644 index b727478c76..0000000000 --- a/packages/linux/linux-openmoko-devel_git.bb +++ /dev/null @@ -1,46 +0,0 @@ -require linux.inc -require linux-openmoko.inc - -DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko" -DEFAULT_PREFERENCE = "-1" - -KERNEL_RELEASE = "2.6.24-rc8" -KERNEL_VERSION = "${KERNEL_RELEASE}" - -# If you use a rc, you will need to use this: -PV = "${KERNEL_RELEASE}+git${SRCREV}" -PR = "r0" - -KERNEL_IMAGETYPE = "uImage" -UBOOT_ENTRYPOINT = "30008000" - -SRC_URI = "git://git.openmoko.org/git/kernel.git;protocol=git;branch=andy" -S = "${WORKDIR}/git" - -############################################################## -# kernel image resides on a seperate flash partition (for now) -# -FILES_kernel-image = "" -ALLOW_EMPTY = "1" - -COMPATIBLE_HOST = "arm.*-linux" -COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' - -CMDLINE = "unused -- bootloader passes ATAG list" - -############################################################### -# module configs specific to this kernel -# - -# usb -module_autoload_ohci-hcd = "ohci-hcd" -module_autoload_hci_usb = "hci_usb" -module_autoload_g_ether = "g_ether" -# audio -module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753" -# sd/mmc -module_autoload_s3cmci = "s3cmci" - -do_configure_prepend() { - mv defconfig-2.6.24 ${WORKDIR}/defconfig -} -- cgit v1.2.3 From 58c0ce7b84b644464efec1215a27cf01f9ddc83b Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Thu, 7 Feb 2008 14:47:28 +0000 Subject: linux-2.6.24: add reboot patch for gesbc-9302 kernel --- .../gesbc-9302/0005-ep93xx-reboot.patch | 1256 ++++++++++++++++++++ packages/linux/linux_2.6.24.bb | 3 +- 2 files changed, 1258 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-2.6.24/gesbc-9302/0005-ep93xx-reboot.patch diff --git a/packages/linux/linux-2.6.24/gesbc-9302/0005-ep93xx-reboot.patch b/packages/linux/linux-2.6.24/gesbc-9302/0005-ep93xx-reboot.patch new file mode 100644 index 0000000000..fa84a0bbcf --- /dev/null +++ b/packages/linux/linux-2.6.24/gesbc-9302/0005-ep93xx-reboot.patch @@ -0,0 +1,1256 @@ +From 1b16045d453045e93b4f94cc57d3205ae9b9d118 Mon Sep 17 00:00:00 2001 +From: Cliff Brake +Date: Thu, 7 Feb 2008 08:47:28 -0500 +Subject: [PATCH] ep93xx-reboot + +--- + include/asm-arm/arch-ep93xx/ep93xx-regs.h | 1047 ++++++++++++++++++++++++++++- + include/asm-arm/arch-ep93xx/system.h | 114 +++- + 2 files changed, 1148 insertions(+), 13 deletions(-) + +diff --git a/include/asm-arm/arch-ep93xx/ep93xx-regs.h b/include/asm-arm/arch-ep93xx/ep93xx-regs.h +index 625c6f0..6e799d9 100644 +--- a/include/asm-arm/arch-ep93xx/ep93xx-regs.h ++++ b/include/asm-arm/arch-ep93xx/ep93xx-regs.h +@@ -15,17 +15,898 @@ + */ + + #define EP93XX_AHB_PHYS_BASE 0x80000000 +-#define EP93XX_AHB_VIRT_BASE 0xfef00000 ++#define EP93XX_AHB_VIRT_BASE 0xff000000//0xfef00000 + #define EP93XX_AHB_SIZE 0x00100000 + ++ + #define EP93XX_APB_PHYS_BASE 0x80800000 +-#define EP93XX_APB_VIRT_BASE 0xfed00000 ++#define EP93XX_APB_VIRT_BASE 0xff800000//0xfed00000 + #define EP93XX_APB_SIZE 0x00200000 + + +-/* AHB peripherals */ ++#define IO_BASE_PHYS EP93XX_AHB_PHYS_BASE ++#define IO_BASE_VIRT EP93XX_AHB_VIRT_BASE ++/* ++ * We don't map the PCMCIA initially. The PCMCIA driver will use ioremap ++ * to be able to see it. But besides that PCMCIA will not exist in the ++ * memory map. ++ */ ++#define PCMCIA_BASE_VIRT 0xD0000000 // Virtual address of PCMCIA ++#define PCMCIA_BASE_PHYS 0x40000000 // Physical address of PCMCIA ++#define PCMCIA_SIZE 0x10000000 // How much? ++ ++ ++ ++/* ++ * We don't map the PCMCIA initially. The PCMCIA driver will use ioremap ++ * to be able to see it. But besides that PCMCIA will not exist in the */ ++/* SMC register map */ ++/* Address Read Location Write Location */ ++/* 0x8000.2000 SMCBCR0(Bank config register 0) SMCBCR0(Bank config register 0) */ ++/* 0x8000.2004 SMCBCR1(Bank config register 1) SMCBCR1(Bank config register 1) */ ++/* 0x8000.2008 SMCBCR2(Bank config register 2) SMCBCR2(Bank config register 2) */ ++/* 0x8000.200C SMCBCR3(Bank config register 3) SMCBCR3(Bank config register 3) */ ++/* 0x8000.2010 Reserved, RAZ Reserved, RAZ */ ++/* 0x8000.2014 Reserved, RAZ Reserved, RAZ */ ++/* 0x8000.2018 SMCBCR6(Bank config register 6) SMCBCR6(Bank config register 6) */ ++/* 0x8000.201C SMCBCR7(Bank config register 7) SMCBCR7(Bank config register 7) */ ++/* 0x8000.2020 PCAttribute Register PCAttribute Register */ ++/* 0x8000.2024 PCCommon Register PCCommon Register */ ++/* 0x8000.2028 PCIO Register PCIO Register */ ++/* 0x8000.202C Reserved, RAZ Reserved, RAZ */ ++/* 0x8000.2030 Reserved, RAZ Reserved, RAZ */ ++/* 0x8000.2034 Reserved, RAZ Reserved, RAZ */ ++/* 0x8000.2038 Reserved, RAZ Reserved, RAZ */ ++/* 0x8000.203C Reserved, RAZ Reserved, RAZ */ ++/* 0x8000.2040 PCMCIACtrl Register PCMCIACtrl Register */ ++ ++#define SRAM_OFFSET 0x080000 ++#define SRAM_BASE (EP93XX_AHB_VIRT_BASE|SRAM_OFFSET) ++#define SMCBCR0 (SRAM_BASE+0x00) /* 0x8000.2000 Bank config register 0 */ ++#define SMCBCR1 (SRAM_BASE+0x04) /* 0x8000.2004 Bank config register 1 */ ++#define SMCBCR2 (SRAM_BASE+0x08) /* 0x8000.2008 Bank config register 2 */ ++#define SMCBCR3 (SRAM_BASE+0x0C) /* 0x8000.200C Bank config register 3 */ ++ /* 0x8000.2010 Reserved, RAZ */ ++ /* 0x8000.2014 Reserved, RAZ */ ++#define SMCBCR6 (SRAM_BASE+0x18) /* 0x8000.2018 Bank config register 6 */ ++#define SMCBCR7 (SRAM_BASE+0x1C) /* 0x8000.201C Bank config register 7 */ ++ ++#define SMC_PCAttribute (SRAM_BASE+0x20) /* 0x8000.2020 PCMCIA Attribute Register */ ++#define SMC_PCCommon (SRAM_BASE+0x24) /* 0x8000.2024 PCMCIA Common Register */ ++#define SMC_PCIO (SRAM_BASE+0x28) /* 0x8000.2028 PCMCIA IO Register */ ++ /* 0x8000.202C Reserved, RAZ */ ++ /* 0x8000.2030 Reserved, RAZ */ ++ /* 0x8000.2034 Reserved, RAZ */ ++ /* 0x8000.2038 Reserved, RAZ */ ++ /* 0x8000.203C Reserved, RAZ */ ++#define SMC_PCMCIACtrl (SRAM_BASE+0x40) /* 0x8000.2040 PCMCIA control register */ ++ ++ ++ ++ + #define EP93XX_DMA_BASE (EP93XX_AHB_VIRT_BASE + 0x00000000) ++// ++/* 8000_0000 - 8000_ffff: DMA */ ++#define DMA_OFFSET 0x000000 ++#define DMA_BASE (EP93XX_DMA_BASE) ++#define DMAMP_TX_0_CONTROL (DMA_BASE+0x0000) ++#define DMAMP_TX_0_INTERRUPT (DMA_BASE+0x0004) ++#define DMAMP_TX_0_PPALLOC (DMA_BASE+0x0008) ++#define DMAMP_TX_0_STATUS (DMA_BASE+0x000C) ++#define DMAMP_TX_0_REMAIN (DMA_BASE+0x0014) ++#define DMAMP_TX_0_MAXCNT0 (DMA_BASE+0x0020) ++#define DMAMP_TX_0_BASE0 (DMA_BASE+0x0024) ++#define DMAMP_TX_0_CURRENT0 (DMA_BASE+0x0028) ++#define DMAMP_TX_0_MAXCNT1 (DMA_BASE+0x0030) ++#define DMAMP_TX_0_BASE1 (DMA_BASE+0x0034) ++#define DMAMP_TX_0_CURRENT1 (DMA_BASE+0x0038) ++ ++#define DMAMP_RX_1_CONTROL (DMA_BASE+0x0040) ++#define DMAMP_RX_1_INTERRUPT (DMA_BASE+0x0044) ++#define DMAMP_RX_1_PPALLOC (DMA_BASE+0x0048) ++#define DMAMP_RX_1_STATUS (DMA_BASE+0x004C) ++#define DMAMP_RX_1_REMAIN (DMA_BASE+0x0054) ++#define DMAMP_RX_1_MAXCNT0 (DMA_BASE+0x0060) ++#define DMAMP_RX_1_BASE0 (DMA_BASE+0x0064) ++#define DMAMP_RX_1_CURRENT0 (DMA_BASE+0x0068) ++#define DMAMP_RX_1_MAXCNT1 (DMA_BASE+0x0070) ++#define DMAMP_RX_1_BASE1 (DMA_BASE+0x0074) ++#define DMAMP_RX_1_CURRENT1 (DMA_BASE+0x0078) ++ ++#define DMAMP_TX_2_CONTROL (DMA_BASE+0x0080) ++#define DMAMP_TX_2_INTERRUPT (DMA_BASE+0x0084) ++#define DMAMP_TX_2_PPALLOC (DMA_BASE+0x0088) ++#define DMAMP_TX_2_STATUS (DMA_BASE+0x008C) ++#define DMAMP_TX_2_REMAIN (DMA_BASE+0x0094) ++#define DMAMP_TX_2_MAXCNT0 (DMA_BASE+0x00A0) ++#define DMAMP_TX_2_BASE0 (DMA_BASE+0x00A4) ++#define DMAMP_TX_2_CURRENT0 (DMA_BASE+0x00A8) ++#define DMAMP_TX_2_MAXCNT1 (DMA_BASE+0x00B0) ++#define DMAMP_TX_2_BASE1 (DMA_BASE+0x00B4) ++#define DMAMP_TX_2_CURRENT1 (DMA_BASE+0x00B8) ++ ++#define DMAMP_RX_3_CONTROL (DMA_BASE+0x00C0) ++#define DMAMP_RX_3_INTERRUPT (DMA_BASE+0x00C4) ++#define DMAMP_RX_3_PPALLOC (DMA_BASE+0x00C8) ++#define DMAMP_RX_3_STATUS (DMA_BASE+0x00CC) ++#define DMAMP_RX_3_REMAIN (DMA_BASE+0x00D4) ++#define DMAMP_RX_3_MAXCNT0 (DMA_BASE+0x00E0) ++#define DMAMP_RX_3_BASE0 (DMA_BASE+0x00E4) ++#define DMAMP_RX_3_CURRENT0 (DMA_BASE+0x00E8) ++#define DMAMP_RX_3_MAXCNT1 (DMA_BASE+0x00F0) ++#define DMAMP_RX_3_BASE1 (DMA_BASE+0x00F4) ++#define DMAMP_RX_3_CURRENT1 (DMA_BASE+0x00F8) ++ ++#define DMAMM_0_CONTROL (DMA_BASE+0x0100) ++#define DMAMM_0_INTERRUPT (DMA_BASE+0x0104) ++#define DMAMM_0_STATUS (DMA_BASE+0x010C) ++#define DMAMM_0_BCR0 (DMA_BASE+0x0110) ++#define DMAMM_0_BCR1 (DMA_BASE+0x0114) ++#define DMAMM_0_SAR_BASE0 (DMA_BASE+0x0118) ++#define DMAMM_0_SAR_BASE1 (DMA_BASE+0x011C) ++#define DMAMM_0_SAR_CURRENT0 (DMA_BASE+0x0124) ++#define DMAMM_0_SAR_CURRENT1 (DMA_BASE+0x0128) ++#define DMAMM_0_DAR_BASE0 (DMA_BASE+0x012C) ++#define DMAMM_0_DAR_BASE1 (DMA_BASE+0x0130) ++#define DMAMM_0_DAR_CURRENT0 (DMA_BASE+0x0134) ++#define DMAMM_0_DAR_CURRENT1 (DMA_BASE+0x013C) ++ ++#define DMAMM_1_CONTROL (DMA_BASE+0x0140) ++#define DMAMM_1_INTERRUPT (DMA_BASE+0x0144) ++#define DMAMM_1_STATUS (DMA_BASE+0x014C) ++#define DMAMM_1_BCR0 (DMA_BASE+0x0150) ++#define DMAMM_1_BCR1 (DMA_BASE+0x0154) ++#define DMAMM_1_SAR_BASE0 (DMA_BASE+0x0158) ++#define DMAMM_1_SAR_BASE1 (DMA_BASE+0x015C) ++#define DMAMM_1_SAR_CURRENT0 (DMA_BASE+0x0164) ++#define DMAMM_1_SAR_CURRENT1 (DMA_BASE+0x0168) ++#define DMAMM_1_DAR_BASE0 (DMA_BASE+0x016C) ++#define DMAMM_1_DAR_BASE1 (DMA_BASE+0x0170) ++#define DMAMM_1_DAR_CURRENT0 (DMA_BASE+0x0174) ++#define DMAMM_1_DAR_CURRENT1 (DMA_BASE+0x017C) ++ ++#define DMAMP_RX_5_CONTROL (DMA_BASE+0x0200) ++#define DMAMP_RX_5_INTERRUPT (DMA_BASE+0x0204) ++#define DMAMP_RX_5_PPALLOC (DMA_BASE+0x0208) ++#define DMAMP_RX_5_STATUS (DMA_BASE+0x020C) ++#define DMAMP_RX_5_REMAIN (DMA_BASE+0x0214) ++#define DMAMP_RX_5_MAXCNT0 (DMA_BASE+0x0220) ++#define DMAMP_RX_5_BASE0 (DMA_BASE+0x0224) ++#define DMAMP_RX_5_CURRENT0 (DMA_BASE+0x0228) ++#define DMAMP_RX_5_MAXCNT1 (DMA_BASE+0x0230) ++#define DMAMP_RX_5_BASE1 (DMA_BASE+0x0234) ++#define DMAMP_RX_5_CURRENT1 (DMA_BASE+0x0238) ++ ++#define DMAMP_TX_4_CONTROL (DMA_BASE+0x0240) ++#define DMAMP_TX_4_INTERRUPT (DMA_BASE+0x0244) ++#define DMAMP_TX_4_PPALLOC (DMA_BASE+0x0248) ++#define DMAMP_TX_4_STATUS (DMA_BASE+0x024C) ++#define DMAMP_TX_4_REMAIN (DMA_BASE+0x0254) ++#define DMAMP_TX_4_MAXCNT0 (DMA_BASE+0x0260) ++#define DMAMP_TX_4_BASE0 (DMA_BASE+0x0264) ++#define DMAMP_TX_4_CURRENT0 (DMA_BASE+0x0268) ++#define DMAMP_TX_4_MAXCNT1 (DMA_BASE+0x0270) ++#define DMAMP_TX_4_BASE1 (DMA_BASE+0x0274) ++#define DMAMP_TX_4_CURRENT1 (DMA_BASE+0x0278) ++ ++#define DMAMP_RX_7_CONTROL (DMA_BASE+0x0280) ++#define DMAMP_RX_7_INTERRUPT (DMA_BASE+0x0284) ++#define DMAMP_RX_7_PPALLOC (DMA_BASE+0x0288) ++#define DMAMP_RX_7_STATUS (DMA_BASE+0x028C) ++#define DMAMP_RX_7_REMAIN (DMA_BASE+0x0294) ++#define DMAMP_RX_7_MAXCNT0 (DMA_BASE+0x02A0) ++#define DMAMP_RX_7_BASE0 (DMA_BASE+0x02A4) ++#define DMAMP_RX_7_CURRENT0 (DMA_BASE+0x02A8) ++#define DMAMP_RX_7_MAXCNT1 (DMA_BASE+0x02B0) ++#define DMAMP_RX_7_BASE1 (DMA_BASE+0x02B4) ++#define DMAMP_RX_7_CURRENT1 (DMA_BASE+0x02B8) ++ ++#define DMAMP_TX_6_CONTROL (DMA_BASE+0x02C0) ++#define DMAMP_TX_6_INTERRUPT (DMA_BASE+0x02C4) ++#define DMAMP_TX_6_PPALLOC (DMA_BASE+0x02C8) ++#define DMAMP_TX_6_STATUS (DMA_BASE+0x02CC) ++#define DMAMP_TX_6_REMAIN (DMA_BASE+0x02D4) ++#define DMAMP_TX_6_MAXCNT0 (DMA_BASE+0x02E0) ++#define DMAMP_TX_6_BASE0 (DMA_BASE+0x02E4) ++#define DMAMP_TX_6_CURRENT0 (DMA_BASE+0x02E8) ++#define DMAMP_TX_6_MAXCNT1 (DMA_BASE+0x02F0) ++#define DMAMP_TX_6_BASE1 (DMA_BASE+0x02F4) ++#define DMAMP_TX_6_CURRENT1 (DMA_BASE+0x02F8) ++ ++#define DMAMP_RX_9_CONTROL (DMA_BASE+0x0300) ++#define DMAMP_RX_9_INTERRUPT (DMA_BASE+0x0304) ++#define DMAMP_RX_9_PPALLOC (DMA_BASE+0x0308) ++#define DMAMP_RX_9_STATUS (DMA_BASE+0x030C) ++#define DMAMP_RX_9_REMAIN (DMA_BASE+0x0314) ++#define DMAMP_RX_9_MAXCNT0 (DMA_BASE+0x0320) ++#define DMAMP_RX_9_BASE0 (DMA_BASE+0x0324) ++#define DMAMP_RX_9_CURRENT0 (DMA_BASE+0x0328) ++#define DMAMP_RX_9_MAXCNT1 (DMA_BASE+0x0330) ++#define DMAMP_RX_9_BASE1 (DMA_BASE+0x0334) ++#define DMAMP_RX_9_CURRENT1 (DMA_BASE+0x0338) ++ ++#define DMAMP_TX_8_CONTROL (DMA_BASE+0x0340) ++#define DMAMP_TX_8_INTERRUPT (DMA_BASE+0x0344) ++#define DMAMP_TX_8_PPALLOC (DMA_BASE+0x0348) ++#define DMAMP_TX_8_STATUS (DMA_BASE+0x034C) ++#define DMAMP_TX_8_REMAIN (DMA_BASE+0x0354) ++#define DMAMP_TX_8_MAXCNT0 (DMA_BASE+0x0360) ++#define DMAMP_TX_8_BASE0 (DMA_BASE+0x0364) ++#define DMAMP_TX_8_CURRENT0 (DMA_BASE+0x0368) ++#define DMAMP_TX_8_MAXCNT1 (DMA_BASE+0x0370) ++#define DMAMP_TX_8_BASE1 (DMA_BASE+0x0374) ++#define DMAMP_TX_8_CURRENT1 (DMA_BASE+0x0378) ++ ++#define DMA_ARBITRATION (DMA_BASE+0x0380) ++#define DMA_INTERRUPT (DMA_BASE+0x03C0) ++ ++ ++/* ++ * DMA Register Base addresses and Offsets ++ */ ++#define DMA_M2P_TX_0_BASE DMAMP_TX_0_CONTROL ++#define DMA_M2P_RX_1_BASE DMAMP_RX_1_CONTROL ++#define DMA_M2P_TX_2_BASE DMAMP_TX_2_CONTROL ++#define DMA_M2P_RX_3_BASE DMAMP_RX_3_CONTROL ++#define DMA_M2M_0_BASE DMAMM_0_CONTROL ++#define DMA_M2M_1_BASE DMAMM_1_CONTROL ++#define DMA_M2P_RX_5_BASE DMAMP_RX_5_CONTROL ++#define DMA_M2P_TX_4_BASE DMAMP_TX_4_CONTROL ++#define DMA_M2P_RX_7_BASE DMAMP_RX_7_CONTROL ++#define DMA_M2P_TX_6_BASE DMAMP_TX_6_CONTROL ++#define DMA_M2P_RX_9_BASE DMAMP_RX_9_CONTROL ++#define DMA_M2P_TX_8_BASE DMAMP_TX_8_CONTROL ++ ++#define M2P_OFFSET_CONTROL 0x0000 ++#define M2P_OFFSET_INTERRUPT 0x0004 ++#define M2P_OFFSET_PPALLOC 0x0008 ++#define M2P_OFFSET_STATUS 0x000C ++#define M2P_OFFSET_REMAIN 0x0014 ++#define M2P_OFFSET_MAXCNT0 0x0020 ++#define M2P_OFFSET_BASE0 0x0024 ++#define M2P_OFFSET_CURRENT0 0x0028 ++#define M2P_OFFSET_MAXCNT1 0x0030 ++#define M2P_OFFSET_BASE1 0x0034 ++#define M2P_OFFSET_CURRENT1 0x0038 ++ ++#define M2M_OFFSET_CONTROL 0x0000 ++#define M2M_OFFSET_INTERRUPT 0x0004 ++#define M2M_OFFSET_STATUS 0x000C ++#define M2M_OFFSET_BCR0 0x0010 ++#define M2M_OFFSET_BCR1 0x0014 ++#define M2M_OFFSET_SAR_BASE0 0x0018 ++#define M2M_OFFSET_SAR_BASE1 0x001C ++#define M2M_OFFSET_SAR_CURRENT0 0x0024 ++#define M2M_OFFSET_SAR_CURRENT1 0x0028 ++#define M2M_OFFSET_DAR_BASE0 0x002C ++#define M2M_OFFSET_DAR_BASE1 0x0030 ++#define M2M_OFFSET_DAR_CURRENT0 0x0034 ++#define M2M_OFFSET_DAR_CURRENT1 0x003C ++ ++ ++ ++/* 8003_0000 - 8003_ffff: Raster */ ++#define RASTER_OFFSET 0x030000 ++#define RASTER_BASE (EP93XX_AHB_VIRT_BASE|RASTER_OFFSET) ++#define VLINESTOTAL (RASTER_BASE+0x00) ++#define VSYNCSTRTSTOP (RASTER_BASE+0x04) ++#define VACTIVESTRTSTOP (RASTER_BASE+0x08) ++#define VCLKSTRTSTOP (RASTER_BASE+0x0C) ++#define HCLKSTOTAL (RASTER_BASE+0x10) ++#define HSYNCSTRTSTOP (RASTER_BASE+0x14) ++#define HACTIVESTRTSTOP (RASTER_BASE+0x18) ++#define HCLKSTRTSTOP (RASTER_BASE+0x1C) ++#define BRIGHTNESS (RASTER_BASE+0x20) ++#define VIDEOATTRIBS (RASTER_BASE+0x24) ++#define VIDSCRNPAGE (RASTER_BASE+0x28) ++#define VIDSCRNHPG (RASTER_BASE+0x2C) ++#define SCRNLINES (RASTER_BASE+0x30) ++#define LINELENGTH (RASTER_BASE+0x34) ++#define VLINESTEP (RASTER_BASE+0x38) ++#define LINECARRY (RASTER_BASE+0x3C) ++#define BLINKRATE (RASTER_BASE+0x40) ++#define BLINKMASK (RASTER_BASE+0x44) ++#define BLINKPATTRN (RASTER_BASE+0x48) ++#define PATTRNMASK (RASTER_BASE+0x4C) ++#define BG_OFFSET (RASTER_BASE+0x50) ++#define PIXELMODE (RASTER_BASE+0x54) ++#define PARLLIFOUT (RASTER_BASE+0x58) ++#define PARLLIFIN (RASTER_BASE+0x5C) ++#define CURSOR_ADR_START (RASTER_BASE+0x60) ++#define CURSOR_ADR_RESET (RASTER_BASE+0x64) ++#define CURSORSIZE (RASTER_BASE+0x68) ++#define CURSORCOLOR1 (RASTER_BASE+0x6C) ++#define CURSORCOLOR2 (RASTER_BASE+0x70) ++#define CURSORXYLOC (RASTER_BASE+0x74) ++#define CURSOR_DHSCAN_LH_YLOC (RASTER_BASE+0x78) ++#define RASTER_SWLOCK (RASTER_BASE+0x7C) ++#define GS_LUT (RASTER_BASE+0x80) ++#define RASTER_TCR (RASTER_BASE+0x100) ++#define RASTER_TISRA (RASTER_BASE+0x104) ++#define RASTER_TISRB (RASTER_BASE+0x108) ++#define CURSOR_TISR (RASTER_BASE+0x10C) ++#define RASTER_TOCRA (RASTER_BASE+0x110) ++#define RASTER_TOCRB (RASTER_BASE+0x114) ++#define FIFO_TOCRA (RASTER_BASE+0x118) ++#define FIFO_TOCRB (RASTER_BASE+0x11C) ++#define BLINK_TISR (RASTER_BASE+0x120) ++#define DAC_TISRA (RASTER_BASE+0x124) ++#define DAC_TISRB (RASTER_BASE+0x128) ++#define SHIFT_TISR (RASTER_BASE+0x12C) ++#define DACMUX_TOCRA (RASTER_BASE+0x130) ++#define DACMUX_TOCRB (RASTER_BASE+0x134) ++#define PELMUX_TOCR (RASTER_BASE+0x138) ++#define VIDEO_TOCRA (RASTER_BASE+0x13C) ++#define VIDEO_TOCRB (RASTER_BASE+0x140) ++#define YCRCB_TOCR (RASTER_BASE+0x144) ++#define CURSOR_TOCR (RASTER_BASE+0x148) ++#define VIDEO_TOCRC (RASTER_BASE+0x14C) ++#define SHIFT_TOCR (RASTER_BASE+0x150) ++#define BLINK_TOCR (RASTER_BASE+0x154) ++#define RASTER_TCER (RASTER_BASE+0x180) ++#define SIGVAL (RASTER_BASE+0x200) ++#define SIGCTL (RASTER_BASE+0x204) ++#define VSIGSTRTSTOP (RASTER_BASE+0x208) ++#define HSIGSTRTSTOP (RASTER_BASE+0x20C) ++#define SIGCLR (RASTER_BASE+0x210) ++#define ACRATE (RASTER_BASE+0x214) ++#define LUTCONT (RASTER_BASE+0x218) ++#define VBLANKSTRTSTOP (RASTER_BASE+0x228) ++#define HBLANKSTRTSTOP (RASTER_BASE+0x22C) ++#define LUT (RASTER_BASE+0x400) ++#define CURSORBLINK1 (RASTER_BASE+0x21C) ++#define CURSORBLINK2 (RASTER_BASE+0x220) ++#define CURSORBLINK (RASTER_BASE+0x224) ++#define EOLOFFSET (RASTER_BASE+0x230) ++#define FIFOLEVEL (RASTER_BASE+0x234) ++#define GS_LUT2 (RASTER_BASE+0x280) ++#define GS_LUT3 (RASTER_BASE+0x300) ++#define COLOR_LUT (RASTER_BASE+0x400) ++ ++/* 8004_0000 - 8004_ffff: Graphics */ ++#define GRAPHICS_OFFSET 0x040000 ++#define GRAPHICS_BASE (EP93XX_AHB_VIRT_BASE|GRAPHICS_OFFSET) ++#define SRCPIXELSTRT (GRAPHICS_BASE+0x00) ++#define DESTPIXELSTRT (GRAPHICS_BASE+0x04) ++#define BLKSRCSTRT (GRAPHICS_BASE+0x08) ++#define BLKDSTSTRT (GRAPHICS_BASE+0x0C) ++#define BLKSRCWIDTH (GRAPHICS_BASE+0x10) ++#define SRCLINELENGTH (GRAPHICS_BASE+0x14) ++#define BLKDESTWIDTH (GRAPHICS_BASE+0x18) ++#define BLKDESTHEIGHT (GRAPHICS_BASE+0x1C) ++#define DESTLINELENGTH (GRAPHICS_BASE+0x20) ++#define BLOCKCTRL (GRAPHICS_BASE+0x24) ++#define TRANSPATTRN (GRAPHICS_BASE+0x28) ++#define BLOCKMASK (GRAPHICS_BASE+0x2C) ++#define BACKGROUND (GRAPHICS_BASE+0x30) ++#define LINEINC (GRAPHICS_BASE+0x34) ++#define LINEINIT (GRAPHICS_BASE+0x38) ++#define LINEPATTRN (GRAPHICS_BASE+0x3C) ++ ++ ++/* 800B_0000 - 800B_FFFF: VIC 0 */ ++#define VIC0_OFFSET 0x0B0000 ++#define VIC0_BASE (EP93XX_AHB_VIRT_BASE|VIC0_OFFSET) ++#define VIC0 (VIC0_BASE+0x000) ++#define VIC0IRQSTATUS (VIC0_BASE+0x000) /* R IRQ status register */ ++#define VIC0FIQSTATUS (VIC0_BASE+0x004) /* R FIQ status register */ ++#define VIC0RAWINTR (VIC0_BASE+0x008) /* R Raw interrupt status register */ ++#define VIC0INTSELECT (VIC0_BASE+0x00C) /* R/W Interrupt select register */ ++#define VIC0INTENABLE (VIC0_BASE+0x010) /* R/W Interrupt enable register */ ++#define VIC0INTENCLEAR (VIC0_BASE+0x014) /* W Interrupt enable clear register */ ++#define VIC0SOFTINT (VIC0_BASE+0x018) /* R/W Software interrupt register */ ++#define VIC0SOFTINTCLEAR (VIC0_BASE+0x01C) /* R/W Software interrupt clear register */ ++#define VIC0PROTECTION (VIC0_BASE+0x020) /* R/W Protection enable register */ ++#define VIC0VECTADDR (VIC0_BASE+0x030) /* R/W Vector address register */ ++#define VIC0DEFVECTADDR (VIC0_BASE+0x034) /* R/W Default vector address register */ ++#define VIC0VECTADDR00 (VIC0_BASE+0x100) /* R/W Vector address 00 register */ ++#define VIC0VECTADDR01 (VIC0_BASE+0x104) /* R/W Vector address 01 register */ ++#define VIC0VECTADDR02 (VIC0_BASE+0x108) /* R/W Vector address 02 register */ ++#define VIC0VECTADDR03 (VIC0_BASE+0x10C) /* R/W Vector address 03 register */ ++#define VIC0VECTADDR04 (VIC0_BASE+0x110) /* R/W Vector address 04 register */ ++#define VIC0VECTADDR05 (VIC0_BASE+0x114) /* R/W Vector address 05 register */ ++#define VIC0VECTADDR06 (VIC0_BASE+0x118) /* R/W Vector address 06 register */ ++#define VIC0VECTADDR07 (VIC0_BASE+0x11C) /* R/W Vector address 07 register */ ++#define VIC0VECTADDR08 (VIC0_BASE+0x120) /* R/W Vector address 08 register */ ++#define VIC0VECTADDR09 (VIC0_BASE+0x124) /* R/W Vector address 09 register */ ++#define VIC0VECTADDR10 (VIC0_BASE+0x128) /* R/W Vector address 10 register */ ++#define VIC0VECTADDR11 (VIC0_BASE+0x12C) /* R/W Vector address 11 register */ ++#define VIC0VECTADDR12 (VIC0_BASE+0x130) /* R/W Vector address 12 register */ ++#define VIC0VECTADDR13 (VIC0_BASE+0x134) /* R/W Vector address 13 register */ ++#define VIC0VECTADDR14 (VIC0_BASE+0x138) /* R/W Vector address 14 register */ ++#define VIC0VECTADDR15 (VIC0_BASE+0x13C) /* R/W Vector address 15 register */ ++#define VIC0VECTCNTL00 (VIC0_BASE+0x200) /* R/W Vector control 00 register */ ++#define VIC0VECTCNTL01 (VIC0_BASE+0x204) /* R/W Vector control 01 register */ ++#define VIC0VECTCNTL02 (VIC0_BASE+0x208) /* R/W Vector control 02 register */ ++#define VIC0VECTCNTL03 (VIC0_BASE+0x20C) /* R/W Vector control 03 register */ ++#define VIC0VECTCNTL04 (VIC0_BASE+0x210) /* R/W Vector control 04 register */ ++#define VIC0VECTCNTL05 (VIC0_BASE+0x214) /* R/W Vector control 05 register */ ++#define VIC0VECTCNTL06 (VIC0_BASE+0x218) /* R/W Vector control 06 register */ ++#define VIC0VECTCNTL07 (VIC0_BASE+0x21C) /* R/W Vector control 07 register */ ++#define VIC0VECTCNTL08 (VIC0_BASE+0x220) /* R/W Vector control 08 register */ ++#define VIC0VECTCNTL09 (VIC0_BASE+0x224) /* R/W Vector control 09 register */ ++#define VIC0VECTCNTL10 (VIC0_BASE+0x228) /* R/W Vector control 10 register */ ++#define VIC0VECTCNTL11 (VIC0_BASE+0x22C) /* R/W Vector control 11 register */ ++#define VIC0VECTCNTL12 (VIC0_BASE+0x230) /* R/W Vector control 12 register */ ++#define VIC0VECTCNTL13 (VIC0_BASE+0x234) /* R/W Vector control 13 register */ ++#define VIC0VECTCNTL14 (VIC0_BASE+0x238) /* R/W Vector control 14 register */ ++#define VIC0VECTCNTL15 (VIC0_BASE+0x23C) /* R/W Vector control 15 register */ ++#define VIC0ITCR (VIC0_BASE+0x300) /* R/W Test control register */ ++#define VIC0ITIP1 (VIC0_BASE+0x304) /* R Test input register (nVICIRQIN/nVICFIQIN)*/ ++#define VIC0ITIP2 (VIC0_BASE+0x308) /* R Test input register (VICVECTADDRIN) */ ++#define VIC0ITOP1 (VIC0_BASE+0x30C) /* R Test output register (nVICIRQ/nVICFIQ) */ ++#define VIC0ITOP2 (VIC0_BASE+0x310) /* R Test output register (VICVECTADDROUT) */ ++#define VIC0PERIPHID0 (VIC0_BASE+0xFE0) /* R Peripheral ID register bits 7:0 */ ++#define VIC0PERIPHID1 (VIC0_BASE+0xFE4) /* R Peripheral ID register bits 15:8 */ ++#define VIC0PERIPHID2 (VIC0_BASE+0xFE8) /* R Peripheral ID register bits 23:16 */ ++#define VIC0PERIPHID3 (VIC0_BASE+0xFEC) /* R Peripheral ID register bits 31:24 */ ++ ++ ++/* 800C_0000 - 800C_FFFF: VIC 0 */ ++#define VIC1_OFFSET 0x0C0000 ++#define VIC1_BASE (EP93XX_AHB_VIRT_BASE|VIC1_OFFSET) ++#define VIC1 (VIC1_BASE+0x000) ++#define VIC1IRQSTATUS (VIC1_BASE+0x000) /* R IRQ status register */ ++#define VIC1FIQSTATUS (VIC1_BASE+0x004) /* R FIQ status register */ ++#define VIC1RAWINTR (VIC1_BASE+0x008) /* R Raw interrupt status register */ ++#define VIC1INTSELECT (VIC1_BASE+0x00C) /* R/W Interrupt select register */ ++#define VIC1INTENABLE (VIC1_BASE+0x010) /* R/W Interrupt enable register */ ++#define VIC1INTENCLEAR (VIC1_BASE+0x014) /* W Interrupt enable clear register */ ++#define VIC1SOFTINT (VIC1_BASE+0x018) /* R/W Software interrupt register */ ++#define VIC1SOFTINTCLEAR (VIC1_BASE+0x01C) /* R/W Software interrupt clear register */ ++#define VIC1PROTECTION (VIC1_BASE+0x020) /* R/W Protection enable register */ ++#define VIC1VECTADDR (VIC1_BASE+0x030) /* R/W Vector address register */ ++#define VIC1DEFVECTADDR (VIC1_BASE+0x034) /* R/W Default vector address register */ ++#define VIC1VECTADDR00 (VIC1_BASE+0x100) /* R/W Vector address 00 register */ ++#define VIC1VECTADDR01 (VIC1_BASE+0x104) /* R/W Vector address 01 register */ ++#define VIC1VECTADDR02 (VIC1_BASE+0x108) /* R/W Vector address 02 register */ ++#define VIC1VECTADDR03 (VIC1_BASE+0x10C) /* R/W Vector address 03 register */ ++#define VIC1VECTADDR04 (VIC1_BASE+0x110) /* R/W Vector address 04 register */ ++#define VIC1VECTADDR05 (VIC1_BASE+0x114) /* R/W Vector address 05 register */ ++#define VIC1VECTADDR06 (VIC1_BASE+0x118) /* R/W Vector address 06 register */ ++#define VIC1VECTADDR07 (VIC1_BASE+0x11C) /* R/W Vector address 07 register */ ++#define VIC1VECTADDR08 (VIC1_BASE+0x120) /* R/W Vector address 08 register */ ++#define VIC1VECTADDR09 (VIC1_BASE+0x124) /* R/W Vector address 09 register */ ++#define VIC1VECTADDR10 (VIC1_BASE+0x128) /* R/W Vector address 10 register */ ++#define VIC1VECTADDR11 (VIC1_BASE+0x12C) /* R/W Vector address 11 register */ ++#define VIC1VECTADDR12 (VIC1_BASE+0x130) /* R/W Vector address 12 register */ ++#define VIC1VECTADDR13 (VIC1_BASE+0x134) /* R/W Vector address 13 register */ ++#define VIC1VECTADDR14 (VIC1_BASE+0x138) /* R/W Vector address 14 register */ ++#define VIC1VECTADDR15 (VIC1_BASE+0x13C) /* R/W Vector address 15 register */ ++#define VIC1VECTCNTL00 (VIC1_BASE+0x200) /* R/W Vector control 00 register */ ++#define VIC1VECTCNTL01 (VIC1_BASE+0x204) /* R/W Vector control 01 register */ ++#define VIC1VECTCNTL02 (VIC1_BASE+0x208) /* R/W Vector control 02 register */ ++#define VIC1VECTCNTL03 (VIC1_BASE+0x20C) /* R/W Vector control 03 register */ ++#define VIC1VECTCNTL04 (VIC1_BASE+0x210) /* R/W Vector control 04 register */ ++#define VIC1VECTCNTL05 (VIC1_BASE+0x214) /* R/W Vector control 05 register */ ++#define VIC1VECTCNTL06 (VIC1_BASE+0x218) /* R/W Vector control 06 register */ ++#define VIC1VECTCNTL07 (VIC1_BASE+0x21C) /* R/W Vector control 07 register */ ++#define VIC1VECTCNTL08 (VIC1_BASE+0x220) /* R/W Vector control 08 register */ ++#define VIC1VECTCNTL09 (VIC1_BASE+0x224) /* R/W Vector control 09 register */ ++#define VIC1VECTCNTL10 (VIC1_BASE+0x228) /* R/W Vector control 10 register */ ++#define VIC1VECTCNTL11 (VIC1_BASE+0x22C) /* R/W Vector control 11 register */ ++#define VIC1VECTCNTL12 (VIC1_BASE+0x230) /* R/W Vector control 12 register */ ++#define VIC1VECTCNTL13 (VIC1_BASE+0x234) /* R/W Vector control 13 register */ ++#define VIC1VECTCNTL14 (VIC1_BASE+0x238) /* R/W Vector control 14 register */ ++#define VIC1VECTCNTL15 (VIC1_BASE+0x23C) /* R/W Vector control 15 register */ ++#define VIC1ITCR (VIC1_BASE+0x300) /* R/W Test control register */ ++#define VIC1ITIP1 (VIC1_BASE+0x304) /* R Test input register (nVICIRQIN/nVICFIQIN)*/ ++#define VIC1ITIP2 (VIC1_BASE+0x308) /* R Test input register (VICVECTADDRIN) */ ++#define VIC1ITOP1 (VIC1_BASE+0x30C) /* R Test output register (nVICIRQ/nVICFIQ) */ ++#define VIC1ITOP2 (VIC1_BASE+0x310) /* R Test output register (VICVECTADDROUT) */ ++#define VIC1PERIPHID0 (VIC1_BASE+0xFE0) /* R Peripheral ID register bits 7:0 */ ++#define VIC1PERIPHID1 (VIC1_BASE+0xFE4) /* R Peripheral ID register bits 15:8 */ ++#define VIC1PERIPHID2 (VIC1_BASE+0xFE8) /* R Peripheral ID register bits 23:16 */ ++#define VIC1PERIPHID3 (VIC1_BASE+0xFEC) /* R Peripheral ID register bits 31:24 */ ++ ++ ++/////////////////////////////////////////////////////////////////////////////////////////////////////////// ++///////////////////////////////////APB///////////////////////////////////////////////////////////////////// ++/////////////////////////////////////////////////////////////////////////////////////////////////////////// ++/* 8081_0000 - 8081_ffff: Timers */ ++#define TIMERS_OFFSET 0x010000 ++#define TIMERS_BASE (EP93XX_APB_VIRT_BASE|TIMERS_OFFSET) ++ ++#define TIMER1LOAD (TIMERS_BASE+0x00) ++#define TIMER1VALUE (TIMERS_BASE+0x04) ++#define TIMER1CONTROL (TIMERS_BASE+0x08) ++#define TIMER1CLEAR (TIMERS_BASE+0x0C) ++#define TIMER1TEST (TIMERS_BASE+0x10) ++ ++#define TIMER2LOAD (TIMERS_BASE+0x20) ++#define TIMER2VALUE (TIMERS_BASE+0x24) ++#define TIMER2CONTROL (TIMERS_BASE+0x28) ++#define TIMER2CLEAR (TIMERS_BASE+0x2C) ++#define TIMER2TEST (TIMERS_BASE+0x30) ++ ++#define TIMER3LOAD (TIMERS_BASE+0x80) ++#define TIMER3VALUE (TIMERS_BASE+0x84) ++#define TIMER3CONTROL (TIMERS_BASE+0x88) ++#define TIMER3CLEAR (TIMERS_BASE+0x8C) ++#define TIMER3TEST (TIMERS_BASE+0x90) ++ ++#define TTIMERBZCONT (TIMERS_BASE+0x40) ++ ++#define TIMER4VALUELOW (TIMERS_BASE+0x60) ++#define TIMER4VALUEHIGH (TIMERS_BASE+0x64) ++ ++ ++/* 8082_0000 - 8082_ffff: I2S */ ++#define I2S_OFFSET 0x020000 ++#define I2S_BASE (EP93XX_APB_VIRT_BASE|I2S_OFFSET) ++#define I2S_PHYS_BASE (EP93XX_APB_PHYS_BASE + I2S_OFFSET) ++ ++ ++ ++#define I2STxClkCfg (I2S_BASE+0x00) /* 8082.0000 R/W Transmitter clock config register */ ++#define I2SRxClkCfg (I2S_BASE+0x04) /* 8082.0004 R/W Receiver clock config register */ ++#define I2SGlSts (I2S_BASE+0x08) /* 8082.0008 R/W SAI Global Status register. */ ++#define I2SGlCtrl (I2S_BASE+0x0C) /* 8082.000C R/W SAI Global Control register */ ++ ++#define I2STX0Lft (I2S_BASE+0x10) /* 8082.0010 R/W Left TX data reg for channel 0 */ ++#define I2STX0Rt (I2S_BASE+0x14) /* 8082.0014 R/W Right TX data reg for channel 0 */ ++#define I2STX1Lft (I2S_BASE+0x18) /* 8082.0018 R/W Left TX data reg for channel 1 */ ++#define I2STX1Rt (I2S_BASE+0x1C) /* 8082.001C R/W Right TX data reg for channel 1 */ ++#define I2STX2Lft (I2S_BASE+0x20) /* 8082.0020 R/W Left TX data reg for channel 2 */ ++#define I2STX2Rt (I2S_BASE+0x24) /* 8082.0024 R/W Right TX data reg for channel 2 */ ++ ++#define I2STXLinCtrlData (I2S_BASE+0x28) /* 8082.0028 R/W TX Line Control data register */ ++#define I2STXCtrl (I2S_BASE+0x2C) /* 8082.002C R/W TX Control register */ ++#define I2STXWrdLen (I2S_BASE+0x30) /* 8082.0030 R/W TX Word Length */ ++#define I2STX0En (I2S_BASE+0x34) /* 8082.0034 R/W TX0 Channel Enable */ ++#define I2STX1En (I2S_BASE+0x38) /* 8082.0038 R/W TX1 Channel Enable */ ++#define I2STX2En (I2S_BASE+0x3C) /* 8082.003C R/W TX2 Channel Enable */ ++ ++#define I2SRX0Lft (I2S_BASE+0x40) /* 8082.0040 R Left RX data reg for channel 0 */ ++#define I2SRX0Rt (I2S_BASE+0x44) /* 8082.0044 R Right RX data reg for channel 0 */ ++#define I2SRX1Lft (I2S_BASE+0x48) /* 8082.0048 R Left RX data reg for channel 1 */ ++#define I2SRX1Rt (I2S_BASE+0x4C) /* 8082.004c R Right RX data reg for channel 1 */ ++#define I2SRX2Lft (I2S_BASE+0x50) /* 8082.0050 R Left RX data reg for channel 2 */ ++#define I2SRX2Rt (I2S_BASE+0x54) /* 8082.0054 R Right RX data reg for channel 2 */ ++ ++#define I2SRXLinCtrlData (I2S_BASE+0x58) /* 8082.0058 R/W RX Line Control data register */ ++#define I2SRXCtrl (I2S_BASE+0x5C) /* 8082.005C R/W RX Control register */ ++#define I2SRXWrdLen (I2S_BASE+0x60) /* 8082.0060 R/W RX Word Length */ ++#define I2SRX0En (I2S_BASE+0x64) /* 8082.0064 R/W RX0 Channel Enable */ ++#define I2SRX1En (I2S_BASE+0x68) /* 8082.0068 R/W RX1 Channel Enable */ ++#define I2SRX2En (I2S_BASE+0x6C) /* 8082.006C R/W RX2 Channel Enable */ ++ ++ ++ ++ ++/* 8084_0000 - 8084_ffff: GPIO */ ++#define GPIO_OFFSET 0x040000 ++#define GPIO_BASE (EP93XX_APB_VIRT_BASE|GPIO_OFFSET) ++#define GPIO_PADR (GPIO_BASE+0x00) ++#define GPIO_PBDR (GPIO_BASE+0x04) ++#define GPIO_PCDR (GPIO_BASE+0x08) ++#define GPIO_PDDR (GPIO_BASE+0x0C) ++#define GPIO_PADDR (GPIO_BASE+0x10) ++#define GPIO_PBDDR (GPIO_BASE+0x14) ++#define GPIO_PCDDR (GPIO_BASE+0x18) ++#define GPIO_PDDDR (GPIO_BASE+0x1C) ++#define GPIO_PEDR (GPIO_BASE+0x20) ++#define GPIO_PEDDR (GPIO_BASE+0x24) ++// #define 0x8084.0028 Reserved ++// #define 0x8084.002C Reserved ++#define GPIO_PFDR (GPIO_BASE+0x30) ++#define GPIO_PFDDR (GPIO_BASE+0x34) ++#define GPIO_PGDR (GPIO_BASE+0x38) ++#define GPIO_PGDDR (GPIO_BASE+0x3C) ++#define GPIO_PHDR (GPIO_BASE+0x40) ++#define GPIO_PHDDR (GPIO_BASE+0x44) ++// #define 0x8084.0048 RAZ RAZ ++#define GPIO_FINTTYPE1 (GPIO_BASE+0x4C) ++#define GPIO_FINTTYPE2 (GPIO_BASE+0x50) ++#define GPIO_FEOI (GPIO_BASE+0x54) /* WRITE ONLY - READ UNDEFINED */ ++#define GPIO_FINTEN (GPIO_BASE+0x58) ++#define GPIO_INTSTATUSF (GPIO_BASE+0x5C) ++#define GPIO_RAWINTSTASUSF (GPIO_BASE+0x60) ++#define GPIO_FDB (GPIO_BASE+0x64) ++#define GPIO_PAPINDR (GPIO_BASE+0x68) ++#define GPIO_PBPINDR (GPIO_BASE+0x6C) ++#define GPIO_PCPINDR (GPIO_BASE+0x70) ++#define GPIO_PDPINDR (GPIO_BASE+0x74) ++#define GPIO_PEPINDR (GPIO_BASE+0x78) ++#define GPIO_PFPINDR (GPIO_BASE+0x7C) ++#define GPIO_PGPINDR (GPIO_BASE+0x80) ++#define GPIO_PHPINDR (GPIO_BASE+0x84) ++#define GPIO_AINTTYPE1 (GPIO_BASE+0x90) ++#define GPIO_AINTTYPE2 (GPIO_BASE+0x94) ++#define GPIO_AEOI (GPIO_BASE+0x98) /* WRITE ONLY - READ UNDEFINED */ ++#define GPIO_AINTEN (GPIO_BASE+0x9C) ++#define GPIO_INTSTATUSA (GPIO_BASE+0xA0) ++#define GPIO_RAWINTSTSTISA (GPIO_BASE+0xA4) ++#define GPIO_ADB (GPIO_BASE+0xA8) ++#define GPIO_BINTTYPE1 (GPIO_BASE+0xAC) ++#define GPIO_BINTTYPE2 (GPIO_BASE+0xB0) ++#define GPIO_BEOI (GPIO_BASE+0xB4) /* WRITE ONLY - READ UNDEFINED */ ++#define GPIO_BINTEN (GPIO_BASE+0xB8) ++#define GPIO_INTSTATUSB (GPIO_BASE+0xBC) ++#define GPIO_RAWINTSTSTISB (GPIO_BASE+0xC0) ++#define GPIO_BDB (GPIO_BASE+0xC4) ++#define GPIO_EEDRIVE (GPIO_BASE+0xC8) ++//#define Reserved (GPIO_BASE+0xCC) ++#define GPIO_TCR (GPIO_BASE+0xD0) /* Test Registers */ ++#define GPIO_TISRA (GPIO_BASE+0xD4) /* Test Registers */ ++#define GPIO_TISRB (GPIO_BASE+0xD8) /* Test Registers */ ++#define GPIO_TISRC (GPIO_BASE+0xDC) /* Test Registers */ ++#define GPIO_TISRD (GPIO_BASE+0xE0) /* Test Registers */ ++#define GPIO_TISRE (GPIO_BASE+0xE4) /* Test Registers */ ++#define GPIO_TISRF (GPIO_BASE+0xE8) /* Test Registers */ ++#define GPIO_TISRG (GPIO_BASE+0xEC) /* Test Registers */ ++#define GPIO_TISRH (GPIO_BASE+0xF0) /* Test Registers */ ++#define GPIO_TCER (GPIO_BASE+0xF4) /* Test Registers */ ++ ++ ++/* 8088_0000 - 8088_ffff: Ac97 Controller (AAC) */ ++#define AC97_OFFSET 0x080000 ++#define AC97_BASE (EP93XX_APB_VIRT_BASE|AC97_OFFSET) ++#define EP93XX_AC97_PHY_BASE (EP93XX_APB_PHYS_BASE|AC97_OFFSET) ++#define AC97DR1 (AC97_BASE+0x00) /* 8088.0000 R/W Data read or written from/to FIFO1 */ ++#define AC97RXCR1 (AC97_BASE+0x04) /* 8088.0004 R/W Control register for receive */ ++#define AC97TXCR1 (AC97_BASE+0x08) /* 8088.0008 R/W Control register for transmit */ ++#define AC97SR1 (AC97_BASE+0x0C) /* 8088.000C R Status register */ ++#define AC97RISR1 (AC97_BASE+0x10) /* 8088.0010 R Raw interrupt status register */ ++#define AC97ISR1 (AC97_BASE+0x14) /* 8088.0014 R Interrupt Status */ ++#define AC97IE1 (AC97_BASE+0x18) /* 8088.0018 R/W Interrupt Enable */ ++ /* 8088.001C Reserved - RAZ */ ++#define AC97DR2 (AC97_BASE+0x20) /* 8088.0020 R/W Data read or written from/to FIFO2 */ ++#define AC97RXCR2 (AC97_BASE+0x24) /* 8088.0024 R/W Control register for receive */ ++#define AC97TXCR2 (AC97_BASE+0x28) /* 8088.0028 R/W Control register for transmit */ ++#define AC97SR2 (AC97_BASE+0x2C) /* 8088.002C R Status register */ ++#define AC97RISR2 (AC97_BASE+0x30) /* 8088.0030 R Raw interrupt status register */ ++#define AC97ISR2 (AC97_BASE+0x34) /* 8088.0034 R Interrupt Status */ ++#define AC97IE2 (AC97_BASE+0x38) /* 8088.0038 R/W Interrupt Enable */ ++ /* 8088.003C Reserved - RAZ */ ++#define AC97DR3 (AC97_BASE+0x40) /* 8088.0040 R/W Data read or written from/to FIFO3. */ ++#define AC97RXCR3 (AC97_BASE+0x44) /* 8088.0044 R/W Control register for receive */ ++#define AC97TXCR3 (AC97_BASE+0x48) /* 8088.0048 R/W Control register for transmit */ ++#define AC97SR3 (AC97_BASE+0x4C) /* 8088.004C R Status register */ ++#define AC97RISR3 (AC97_BASE+0x50) /* 8088.0050 R Raw interrupt status register */ ++#define AC97ISR3 (AC97_BASE+0x54) /* 8088.0054 R Interrupt Status */ ++#define AC97IE3 (AC97_BASE+0x58) /* 8088.0058 R/W Interrupt Enable */ ++ /* 8088.005C Reserved - RAZ */ ++#define AC97DR2 (AC97_BASE+0x20) /* 8088.0020 R/W Data read or written from/to FIFO2 */ ++#define AC97RXCR2 (AC97_BASE+0x24) /* 8088.0024 R/W Control register for receive */ ++#define AC97TXCR2 (AC97_BASE+0x28) /* 8088.0028 R/W Control register for transmit */ ++#define AC97SR2 (AC97_BASE+0x2C) /* 8088.002C R Status register */ ++#define AC97RISR2 (AC97_BASE+0x30) /* 8088.0030 R Raw interrupt status register */ ++#define AC97ISR2 (AC97_BASE+0x34) /* 8088.0034 R Interrupt Status */ ++#define AC97IE2 (AC97_BASE+0x38) /* 8088.0038 R/W Interrupt Enable */ ++ /* 8088.003C Reserved - RAZ */ ++#define AC97DR3 (AC97_BASE+0x40) /* 8088.0040 R/W Data read or written from/to FIFO3. */ ++#define AC97RXCR3 (AC97_BASE+0x44) /* 8088.0044 R/W Control register for receive */ ++#define AC97TXCR3 (AC97_BASE+0x48) /* 8088.0048 R/W Control register for transmit */ ++#define AC97SR3 (AC97_BASE+0x4C) /* 8088.004C R Status register */ ++#define AC97RISR3 (AC97_BASE+0x50) /* 8088.0050 R Raw interrupt status register */ ++#define AC97ISR3 (AC97_BASE+0x54) /* 8088.0054 R Interrupt Status */ ++#define AC97IE3 (AC97_BASE+0x58) /* 8088.0058 R/W Interrupt Enable */ ++ /* 8088.005C Reserved - RAZ */ ++#define AC97DR4 (AC97_BASE+0x60) /* 8088.0060 R/W Data read or written from/to FIFO4. */ ++#define AC97RXCR4 (AC97_BASE+0x64) /* 8088.0064 R/W Control register for receive */ ++#define AC97TXCR4 (AC97_BASE+0x68) /* 8088.0068 R/W Control register for transmit */ ++#define AC97SR4 (AC97_BASE+0x6C) /* 8088.006C R Status register */ ++#define AC97RISR4 (AC97_BASE+0x70) /* 8088.0070 R Raw interrupt status register */ ++#define AC97ISR4 (AC97_BASE+0x74) /* 8088.0074 R Interrupt Status */ ++#define AC97IE4 (AC97_BASE+0x78) /* 8088.0078 R/W Interrupt Enable */ ++ /* 8088.007C Reserved - RAZ */ ++#define AC97S1DATA (AC97_BASE+0x80) /* 8088.0080 R/W Data received/transmitted on SLOT1 */ ++#define AC97S2DATA (AC97_BASE+0x84) /* 8088.0084 R/W Data received/transmitted on SLOT2 */ ++#define AC97S12DATA (AC97_BASE+0x88) /* 8088.0088 R/W Data received/transmitted on SLOT12 */ ++#define AC97RGIS (AC97_BASE+0x8C) /* 8088.008C R/W Raw Global interrupt status register*/ ++#define AC97GIS (AC97_BASE+0x90) /* 8088.0090 R Global interrupt status register */ ++#define AC97IM (AC97_BASE+0x94) /* 8088.0094 R/W Interrupt mask register */ ++#define AC97EOI (AC97_BASE+0x98) /* 8088.0098 W Interrupt clear register */ ++#define AC97GCR (AC97_BASE+0x9C) /* 8088.009C R/W Main Control register */ ++#define AC97RESET (AC97_BASE+0xA0) /* 8088.00A0 R/W RESET control register. */ ++#define AC97SYNC (AC97_BASE+0xA4) /* 8088.00A4 R/W SYNC control register. */ ++#define AC97GCIS (AC97_BASE+0xA8) /* 8088.00A8 R Global chan FIFO int status register */ ++ ++ ++/* 808A_0000 - 808A_ffff: SSP - (SPI) */ ++#define SSP_OFFSET 0x0A0000 ++#define SSP_BASE (EP93XX_APB_VIRT_BASE|SSP_OFFSET) ++#define SSPCR0 (SSP_BASE+0x00) ++#define SSPCR1 (SSP_BASE+0x04) ++#define SSPDR (SSP_BASE+0x08) ++#define SSPSR (SSP_BASE+0x0c) ++#define SSPCPSR (SSP_BASE+0x10) ++#define SSPIIR (SSP_BASE+0x14) + ++ ++/*808B_0000 - 808B_ffff: IrDA */ ++#define IRDA_OFFSET 0x0B0000 ++#define IRDA_BASE (EP93XX_APB_VIRT_BASE|IRDA_OFFSET) ++#define IrEnable (IRDA_BASE+0x00) ++#define IrCtrl (IRDA_BASE+0x04) ++#define IrAdrMatchVal (IRDA_BASE+0x08) ++#define IrFlag (IRDA_BASE+0x0C) ++#define IrData (IRDA_BASE+0x10) ++#define IrDataTail1 (IRDA_BASE+0x14) ++#define IrDataTail2 (IRDA_BASE+0x18) ++#define IrDataTail3 (IRDA_BASE+0x1c) ++#define IrRIB (IRDA_BASE+0x20) ++#define IrTR0 (IRDA_BASE+0x24) ++#define IrDMACR (IRDA_BASE+0x28) ++#define SIRTR0 (IRDA_BASE+0x30) ++#define MISR (IRDA_BASE+0x80) ++#define MIMR (IRDA_BASE+0x84) ++#define MIIR (IRDA_BASE+0x88) ++#define FISR (IRDA_BASE+0x180) ++#define FIMR (IRDA_BASE+0x184) ++#define FIIR (IRDA_BASE+0x188) ++ ++ ++/* 808C_0000 - 808C_ffff: UART1 */ ++#define UART1_OFFSET 0x0C0000 ++#define UART1_BASE (EP93XX_APB_VIRT_BASE|UART1_OFFSET) ++#define UART1_BASE_VIRT (EP93XX_APB_PHYS_BASE|UART1_OFFSET) ++#define UART1DR (UART1_BASE+0x000) ++#define UART1RSR (UART1_BASE+0x004) ++#define UART1ECR (UART1_BASE+0x004) ++#define UART1CR_H (UART1_BASE+0x008) ++#define UART1CR_M (UART1_BASE+0x00C) ++#define UART1CR_L (UART1_BASE+0x010) ++#define UART1CR (UART1_BASE+0x014) ++#define UART1FR (UART1_BASE+0x018) ++#define UART1IIR (UART1_BASE+0x01C) ++#define UART1ICR (UART1_BASE+0x01C) ++#define UART1ILPR (UART1_BASE+0x020) ++#define UART1DMACR (UART1_BASE+0x028) ++#define UART1TMR (UART1_BASE+0x084) ++#define UART1MCR (UART1_BASE+0x100) ++#define UART1MSR (UART1_BASE+0x104) ++#define UART1TCR (UART1_BASE+0x108) ++#define UART1TISR (UART1_BASE+0x10C) ++#define UART1TOCR (UART1_BASE+0x110) ++#define HDLC1CR (UART1_BASE+0x20c) ++#define HDLC1AMV (UART1_BASE+0x210) ++#define HDLC1AMSK (UART1_BASE+0x214) ++#define HDLC1RIB (UART1_BASE+0x218) ++#define HDLC1SR (UART1_BASE+0x21c) ++ ++/* Offsets to the various UART registers */ ++#define UARTDR 0x0000 ++#define UARTRSR 0x0004 ++#define UARTECR 0x0004 ++#define UARTCR_H 0x0008 ++#define UARTCR_M 0x000C ++#define UARTCR_L 0x0010 ++#define UARTCR 0x0014 ++#define UARTFR 0x0018 ++#define UARTIIR 0x001C ++#define UARTICR 0x001C ++#define UARTMCR 0x0100 ++#define UARTMSR 0x0104 ++ ++/* 808d_0000 - 808d_ffff: UART2 */ ++#define UART2_OFFSET 0x0D0000 ++#define UART2_BASE (EP93XX_APB_VIRT_BASE|UART2_OFFSET) ++#define UART2_BASE_VIRT (EP93XX_APB_PHYS_BASE|UART2_OFFSET) ++#define UART2DR (UART2_BASE+0x00) ++#define UART2RSR (UART2_BASE+0x04) /* Read */ ++#define UART2ECR (UART2_BASE+0x04) /* Write */ ++#define UART2CR_H (UART2_BASE+0x08) ++#define UART2CR_M (UART2_BASE+0x0C) ++#define UART2CR_L (UART2_BASE+0x10) ++#define UART2CR (UART2_BASE+0x14) ++#define UART2FR (UART2_BASE+0x18) ++#define UART2IIR (UART2_BASE+0x1C) /* Read */ ++#define UART2ICR (UART2_BASE+0x1C) /* Write */ ++#define UART2ILPR (UART2_BASE+0x20) ++#define UART2DMACR (UART2_BASE+0x28) ++#define UART2TMR (UART2_BASE+0x84) ++ ++ ++/* 808e_0000 - 808e_ffff: UART3 */ ++#define UART3_OFFSET 0x0E0000 ++#define UART3_BASE (EP93XX_APB_VIRT_BASE|UART3_OFFSET) ++#define UART3_BASE_VIRT (EP93XX_APB_PHYS_BASE|UART3_OFFSET) ++#define UART3DR (UART3_BASE+0x00) ++#define UART3RSR (UART3_BASE+0x04) /* Read */ ++#define UART3ECR (UART3_BASE+0x04) /* Write */ ++#define UART3CR_H (UART3_BASE+0x08) ++#define UART3CR_M (UART3_BASE+0x0C) ++#define UART3CR_L (UART3_BASE+0x10) ++#define UART3CR (UART3_BASE+0x14) ++#define UART3FR (UART3_BASE+0x18) ++#define UART3IIR (UART3_BASE+0x1C) /* Read */ ++#define UART3ICR (UART3_BASE+0x1C) /* Write */ ++#define UART3ILPR (UART3_BASE+0x20) ++#define UART3DMACR (UART3_BASE+0x28) ++#define UART3TCR (UART3_BASE+0x80) ++#define UART3TISR (UART3_BASE+0x88) ++#define UART3TOCR (UART3_BASE+0x8C) ++#define UART3TMR (UART3_BASE+0x84) ++#define UART3MCR (UART3_BASE+0x100) /* Modem Control Reg */ ++#define UART3MSR (UART3_BASE+0x104) /* Modem Status Reg */ ++ ++#define UART3HDLCCR (UART3_BASE+0x20C) /* HDLC Registers */ ++#define UART3HDLCAMV (UART3_BASE+0x210) /* HDLC Registers */ ++#define UART3HDLCAMSK (UART3_BASE+0x214) /* HDLC Registers */ ++#define UART3HDLCCRIB (UART3_BASE+0x218) /* HDLC Registers */ ++#define UART3HDLCSR (UART3_BASE+0x21C) /* HDLC Registers */ ++ ++/* 808f_0000 - 808f_ffff: KEY Matrix */ ++#define KEY_OFFSET 0x0F0000 ++#define KEY_BASE (EP93XX_APB_VIRT_BASE|KEY_OFFSET) ++#define SCANINIT (KEY_BASE+0x00) ++#define KEY_DIAG (KEY_BASE+0x04) ++#define KEY_REG (KEY_BASE+0x08) ++#define KEY_TCR (KEY_BASE+0x10) ++#define KEY_TISR (KEY_BASE+0x14) ++#define KEY_TOCR (KEY_BASE+0x18) ++ ++ ++#define TOUCH_OFFSET 0x100000 ++#define TOUCH_BASE (EP93XX_APB_VIRT_BASE|TOUCH_OFFSET) ++#define TSSetup (TOUCH_BASE+0x00) /* R/W touchscreen controller setup control register. */ ++#define TSXYMaxMin (TOUCH_BASE+0x04) /* R/W touchscreen controller max/min register. */ ++#define TSXYResult (TOUCH_BASE+0x08) /* R touchscreen controller result register. */ ++#define TSDischarge (TOUCH_BASE+0x0C) /* LOCKED R/W touchscreen Switch Matrix control register. */ ++#define TSXSample (TOUCH_BASE+0x10) /* LOCKED R/W touchscreen Switch Matrix control register. */ ++#define TSYSample (TOUCH_BASE+0x14) /* LOCKED R/W touchscreen Switch Matrix control register. */ ++#define TSDirect (TOUCH_BASE+0x18) /* LOCKED R/W touchscreen Switch Matrix control register. */ ++#define TSDetect (TOUCH_BASE+0x1C) /* LOCKED R/W touchscreen Switch Matrix control register. */ ++#define TSSWLock (TOUCH_BASE+0x20) /* NA R/W touchscreen software lock register. */ ++#define TSSetup2 (TOUCH_BASE+0x24) /* R/W touchscreen setup control register #2. */ ++ ++ ++/* 8093_0000 - 8093_ffff: CSC/Syscon PLL, clock control, & misc. stuff */ ++#define SYSCON_OFFSET 0x130000 ++#define SYSCON_BASE ((EP93XX_APB_VIRT_BASE)|SYSCON_OFFSET) ++#define SYSCON_PWRSR (SYSCON_BASE+0x0000) ++#define SYSCON_PWRCNT (SYSCON_BASE+0x0004) ++#define SYSCON_HALT (SYSCON_BASE+0x0008) ++#define SYSCON_STBY (SYSCON_BASE+0x000c) ++#define SYSCON_BLEOI (SYSCON_BASE+0x0010) ++#define SYSCON_MCEOI (SYSCON_BASE+0x0014) ++#define SYSCON_TEOI (SYSCON_BASE+0x0018) ++#define SYSCON_STFCLR (SYSCON_BASE+0x001c) ++#define SYSCON_CLKSET1 (SYSCON_BASE+0x0020) ++#define SYSCON_CLKSET2 (SYSCON_BASE+0x0024) ++#define SYSCON_RESV00 (SYSCON_BASE+0x0028) ++#define SYSCON_RESV01 (SYSCON_BASE+0x002c) ++#define SYSCON_RESV02 (SYSCON_BASE+0x0030) ++#define SYSCON_RESV03 (SYSCON_BASE+0x0034) ++#define SYSCON_RESV04 (SYSCON_BASE+0x0038) ++#define SYSCON_RESV05 (SYSCON_BASE+0x003c) ++#define SYSCON_SCRREG0 (SYSCON_BASE+0x0040) ++#define SYSCON_SCRREG1 (SYSCON_BASE+0x0044) ++#define SYSCON_CLKTEST (SYSCON_BASE+0x0048) ++#define SYSCON_USBRESET (SYSCON_BASE+0x004c) ++#define SYSCON_APBWAIT (SYSCON_BASE+0x0050) ++#define SYSCON_BMAR (SYSCON_BASE+0x0054) ++#define SYSCON_BOOTCLR (SYSCON_BASE+0x0058) ++#define SYSCON_DEVCFG (SYSCON_BASE+0x0080) ++#define SYSCON_VIDDIV (SYSCON_BASE+0x0084) ++#define SYSCON_MIRDIV (SYSCON_BASE+0x0088) ++#define SYSCON_I2SDIV (SYSCON_BASE+0x008C) ++#define SYSCON_KTDIV (SYSCON_BASE+0x0090) ++#define SYSCON_CHIPID (SYSCON_BASE+0x0094) ++#define SYSCON_TSTCR (SYSCON_BASE+0x0098) ++#define SYSCON_SYSCFG (SYSCON_BASE+0x009C) ++#define SYSCON_SWLOCK (SYSCON_BASE+0x00C0) ++ ++#define SYSCON_DEVCFG_KEYS 0x00000002 ++#define SYSCON_DEVCFG_RasOnP3 0x00000010 ++#define SYSCON_DEVCFG_GONK 0x08000000 ++ ++#define SYSCON_KTDIV_KEN 0x00008000 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++// + #define EP93XX_ETHERNET_BASE (EP93XX_AHB_VIRT_BASE + 0x00010000) + #define EP93XX_ETHERNET_PHYS_BASE (EP93XX_AHB_PHYS_BASE + 0x00010000) + +@@ -33,8 +914,11 @@ + #define EP93XX_USB_PHYS_BASE (EP93XX_AHB_PHYS_BASE + 0x00020000) + + #define EP93XX_RASTER_BASE (EP93XX_AHB_VIRT_BASE + 0x00030000) ++#define EP93XX_RASTER_PHYS_BASE (EP93XX_AHB_PHYS_BASE + 0x00030000) + + #define EP93XX_GRAPHICS_ACCEL_BASE (EP93XX_AHB_VIRT_BASE + 0x00040000) ++#define EP93XX_GRAPHICS_ACCEL_PHYS_BASE (EP93XX_AHB_PHYS_BASE + 0x00040000 ++ + + #define EP93XX_SDRAM_CONTROLLER_BASE (EP93XX_AHB_VIRT_BASE + 0x00060000) + +@@ -43,7 +927,141 @@ + #define EP93XX_BOOT_ROM_BASE (EP93XX_AHB_VIRT_BASE + 0x00090000) + + #define EP93XX_IDE_BASE (EP93XX_AHB_VIRT_BASE + 0x000a0000) ++#define EP93XX_IDE_REG(x) (EP93XX_IDE_BASE + (x)) ++#define EP93XX_IDE_CTRL EP93XX_IDE_REG(0x0000) ++#define EP93XX_IDE_CFG EP93XX_IDE_REG(0x0004) ++#define EP93XX_IDE_DATAOUT EP93XX_IDE_REG(0x0010) ++#define EP93XX_IDE_DATAIN EP93XX_IDE_REG(0x0014) ++ ++#define EP93XX_IDE_CTRL_CS0n (1L << 0) ++#define EP93XX_IDE_CTRL_CS1n (1L << 1) ++#define EP93XX_IDE_CTRL_DA_MASK 0x1C ++#define EP93XX_IDE_CTRL_DA(x) ((x << 2) & EP93XX_IDE_CTRL_DA_MASK) ++#define EP93XX_IDE_CTRL_DA_CS_MASK (EP93XX_IDE_CTRL_DA_MASK | EP93XX_IDE_CTRL_CS0n | EP93XX_IDE_CTRL_CS1n) ++#define EP93XX_IDE_CTRL_DA_CS(x) (((x)) & EP93XX_IDE_CTRL_DA_CS_MASK) ++#define EP93XX_IDE_CTRL_DIORn (1L << 5) ++#define EP93XX_IDE_CTRL_DIOWn (1L << 6) ++#define EP93XX_IDE_CTRL_DASPn (1L << 7) ++#define EP93XX_IDE_CTRL_DMARQ (1L << 8) ++#define EP93XX_IDE_CTRL_INTRQ (1L << 9) ++#define EP93XX_IDE_CTRL_IORDY (1L << 10) ++ ++#define EP93XX_IDE_CFG_IDEEN (1L << 0) ++#define EP93XX_IDE_CFG_PIO (1L << 1) ++#define EP93XX_IDE_CFG_MDMA (1L << 2) ++#define EP93XX_IDE_CFG_UDMA (1L << 3) ++#define EP93XX_IDE_CFG_MODE(x) ((x & 0x0F) << 4) ++#define EP93XX_IDE_CFG_WST(x) ((x & 0x03) << 8) + ++ ++ ++/* Olde IDE DMA defines */ ++/* 800A_0000 - 800A_ffff: IDE Interface */ ++#define IDE_OFFSET 0x0a0000 ++#define IDE_BASE (EP93XX_AHB_VIRT_BASE|IDE_OFFSET) ++#define IDECR (IDE_BASE+0x00) ++#define IDECFG (IDE_BASE+0x04) ++#define IDEMDMAOP (IDE_BASE+0x08) ++#define IDEUDMAOP (IDE_BASE+0x0C) ++#define IDEDATAOUT (IDE_BASE+0x10) ++#define IDEDATAIN (IDE_BASE+0x14) ++#define IDEMDMADATAOUT (IDE_BASE+0x18) ++#define IDEMDMADATAIN (IDE_BASE+0x1C) ++#define IDEUDMADATAOUT (IDE_BASE+0x20) ++#define IDEUDMADATAIN (IDE_BASE+0x24) ++#define IDEUDMASTATUS (IDE_BASE+0x28) ++#define IDEUDMADEBUG (IDE_BASE+0x2C) ++#define IDEUDMAWFST (IDE_BASE+0x30) ++#define IDEUDMARFST (IDE_BASE+0x34) ++ ++/***************************************************************************** ++ * ++ * Bit definitions for use with assembly code for the ide control register. ++ * ++ ****************************************************************************/ ++#define IDECtrl_CS0n 0x00000001 ++#define IDECtrl_CS1n 0x00000002 ++#define IDECtrl_DA_MASK 0x0000001c ++#define IDECtrl_DA_SHIFT 2 ++#define IDECtrl_DIORn 0x00000020 ++#define IDECtrl_DIOWn 0x00000040 ++#define IDECtrl_DASPn 0x00000080 ++#define IDECtrl_DMARQ 0x00000100 ++#define IDECtrl_INTRQ 0x00000200 ++#define IDECtrl_IORDY 0x00000400 ++ ++#define IDECfg_IDEEN 0x00000001 ++#define IDECfg_PIO 0x00000002 ++#define IDECfg_MDMA 0x00000004 ++#define IDECfg_UDMA 0x00000008 ++#define IDECfg_MODE_MASK 0x000000f0 ++#define IDECfg_MODE_SHIFT 4 ++#define IDECfg_WST_MASK 0x00000300 ++#define IDECfg_WST_SHIFT 8 ++ ++#define IDEMDMAOp_MEN 0x00000001 ++#define IDEMDMAOp_RWOP 0x00000002 ++ ++#define IDEUDMAOp_UEN 0x00000001 ++#define IDEUDMAOp_RWOP 0x00000002 ++ ++#define IDEUDMASts_CS0n 0x00000001 ++#define IDEUDMASts_CS1n 0x00000002 ++#define IDEUDMASts_DA_MASK 0x0000001c ++#define IDEUDMASts_DA_SHIFT 2 ++#define IDEUDMASts_HSHD 0x00000020 ++#define IDEUDMASts_STOP 0x00000040 ++#define IDEUDMASts_DM 0x00000080 ++#define IDEUDMASts_DDOE 0x00000100 ++#define IDEUDMASts_DMARQ 0x00000200 ++#define IDEUDMASts_DSDD 0x00000400 ++#define IDEUDMASts_DMAide 0x00010000 ++#define IDEUDMASts_INTide 0x00020000 ++#define IDEUDMASts_SBUSY 0x00040000 ++#define IDEUDMASts_NDO 0x01000000 ++#define IDEUDMASts_NDI 0x02000000 ++#define IDEUDMASts_N4X 0x04000000 ++ ++#define IDEUDMADebug_RWOE 0x00000001 ++#define IDEUDMADebug_RWPTR 0x00000002 ++#define IDEUDMADebug_RWDR 0x00000004 ++#define IDEUDMADebug_RROE 0x00000008 ++#define IDEUDMADebug_RRPTR 0x00000010 ++#define IDEUDMADebug_RRDR 0x00000020 ++ ++#define IDEUDMAWrBufSts_HPTR_MASK 0x0000000f ++#define IDEUDMAWrBufSts_HPTR_SHIFT 0 ++#define IDEUDMAWrBufSts_TPTR_MASK 0x000000f0 ++#define IDEUDMAWrBufSts_TPTR_SHIFT 4 ++#define IDEUDMAWrBufSts_EMPTY 0x00000100 ++#define IDEUDMAWrBufSts_HOM 0x00000200 ++#define IDEUDMAWrBufSts_NFULL 0x00000400 ++#define IDEUDMAWrBufSts_FULL 0x00000800 ++#define IDEUDMAWrBufSts_CRC_MASK 0xffff0000 ++#define IDEUDMAWrBufSts_CRC_SHIFT 16 ++ ++#define IDEUDMARdBufSts_HPTR_MASK 0x0000000f ++#define IDEUDMARdBufSts_HPTR_SHIFT 0 ++#define IDEUDMARdBufSts_TPTR_MASK 0x000000f0 ++#define IDEUDMARdBufSts_TPTR_SHIFT 4 ++#define IDEUDMARdBufSts_EMPTY 0x00000100 ++#define IDEUDMARdBufSts_HOM 0x00000200 ++#define IDEUDMARdBufSts_NFULL 0x00000400 ++#define IDEUDMARdBufSts_FULL 0x00000800 ++#define IDEUDMARdBufSts_CRC_MASK 0xffff0000 ++#define IDEUDMARdBufSts_CRC_SHIFT 16 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++/*----------------------------------old-------------------------------*/ + #define EP93XX_VIC1_BASE (EP93XX_AHB_VIRT_BASE + 0x000b0000) + + #define EP93XX_VIC2_BASE (EP93XX_AHB_VIRT_BASE + 0x000c0000) +@@ -73,21 +1091,29 @@ + + #define EP93XX_GPIO_BASE (EP93XX_APB_VIRT_BASE + 0x00040000) + #define EP93XX_GPIO_REG(x) (EP93XX_GPIO_BASE + (x)) +-#define EP93XX_GPIO_F_INT_TYPE1 EP93XX_GPIO_REG(0x4c) +-#define EP93XX_GPIO_F_INT_TYPE2 EP93XX_GPIO_REG(0x50) +-#define EP93XX_GPIO_F_INT_ACK EP93XX_GPIO_REG(0x54) +-#define EP93XX_GPIO_F_INT_ENABLE EP93XX_GPIO_REG(0x58) +-#define EP93XX_GPIO_F_INT_STATUS EP93XX_GPIO_REG(0x5c) ++#define EP93XX_GPIO_F_INT_TYPE1 EP93XX_GPIO_REG(0x4c) ++#define EP93XX_GPIO_F_INT_TYPE2 EP93XX_GPIO_REG(0x50) ++#define EP93XX_GPIO_F_INT_ACK EP93XX_GPIO_REG(0x54) ++#define EP93XX_GPIO_F_INT_ENABLE EP93XX_GPIO_REG(0x58) ++#define EP93XX_GPIO_F_INT_STATUS EP93XX_GPIO_REG(0x5c) + #define EP93XX_GPIO_A_INT_TYPE1 EP93XX_GPIO_REG(0x90) + #define EP93XX_GPIO_A_INT_TYPE2 EP93XX_GPIO_REG(0x94) + #define EP93XX_GPIO_A_INT_ACK EP93XX_GPIO_REG(0x98) + #define EP93XX_GPIO_A_INT_ENABLE EP93XX_GPIO_REG(0x9c) + #define EP93XX_GPIO_A_INT_STATUS EP93XX_GPIO_REG(0xa0) ++#define EP93XX_GPIO_A_INT_DEBOUNCE EP93XX_GPIO_REG(0xa8) + #define EP93XX_GPIO_B_INT_TYPE1 EP93XX_GPIO_REG(0xac) + #define EP93XX_GPIO_B_INT_TYPE2 EP93XX_GPIO_REG(0xb0) + #define EP93XX_GPIO_B_INT_ACK EP93XX_GPIO_REG(0xb4) + #define EP93XX_GPIO_B_INT_ENABLE EP93XX_GPIO_REG(0xb8) + #define EP93XX_GPIO_B_INT_STATUS EP93XX_GPIO_REG(0xbc) ++#define EP93XX_GPIO_B_INT_DEBOUNCE EP93XX_GPIO_REG(0xc4) ++ ++ ++ ++ ++ ++ + + #define EP93XX_AAC_BASE (EP93XX_APB_VIRT_BASE + 0x00080000) + +@@ -121,10 +1147,15 @@ + #define EP93XX_SYSCON_CLOCK_USH_EN 0x10000000 + #define EP93XX_SYSCON_HALT EP93XX_SYSCON_REG(0x08) + #define EP93XX_SYSCON_STANDBY EP93XX_SYSCON_REG(0x0c) ++#define EP93XX_SYSCON_CLKSET1 EP93XX_SYSCON_REG(0x20) + #define EP93XX_SYSCON_CLOCK_SET1 EP93XX_SYSCON_REG(0x20) ++#define EP93XX_SYSCON_CLKSET2 EP93XX_SYSCON_REG(0x24) + #define EP93XX_SYSCON_CLOCK_SET2 EP93XX_SYSCON_REG(0x24) + #define EP93XX_SYSCON_DEVICE_CONFIG EP93XX_SYSCON_REG(0x80) + #define EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE 0x00800000 ++ ++#define EP93XX_SYSCON_BMAR EP93XX_SYSCON_REG(0x54) ++#define EP93XX_SYSCON_CHIPID EP93XX_SYSCON_REG(0x94) + #define EP93XX_SYSCON_SWLOCK EP93XX_SYSCON_REG(0xc0) + + #define EP93XX_WATCHDOG_BASE (EP93XX_APB_VIRT_BASE + 0x00140000) +diff --git a/include/asm-arm/arch-ep93xx/system.h b/include/asm-arm/arch-ep93xx/system.h +index 79b7185..d69c15f 100644 +--- a/include/asm-arm/arch-ep93xx/system.h ++++ b/include/asm-arm/arch-ep93xx/system.h +@@ -3,6 +3,13 @@ + */ + + #include ++#include ++ ++#define MAC_SELFCTL (EP93XX_MAC_BASE+0x20) /* 1-RW Self Control for LED interface */ ++#define HCCOMMANDSTATUS (EP93XX_USB_BASE+0x08) ++#define MAC_OFFSET 0x010000 ++#define EP93XX_MAC_BASE (EP93XX_AHB_VIRT_BASE|MAC_OFFSET) ++#define SYSCON_SYSCFG_LEECK 0x00000008 + + static inline void arch_idle(void) + { +@@ -15,11 +22,108 @@ static inline void arch_reset(char mode) + + local_irq_disable(); + +- devicecfg = __raw_readl(EP93XX_SYSCON_DEVICE_CONFIG); +- __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK); +- __raw_writel(devicecfg | 0x80000000, EP93XX_SYSCON_DEVICE_CONFIG); +- __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK); +- __raw_writel(devicecfg & ~0x80000000, EP93XX_SYSCON_DEVICE_CONFIG); ++// Modified 6/29/2007 ++// by Steve Beaver, MedAvant Healthcare Solutions Inc ++ ++// This code was lifted from cirrus-arm-linux-2.4.21 and puts the edb93xx in a known, default ++// state before the restart. ++ ++// Disable the peripherals. ++// ++outl(0xffffffff, VIC0INTENCLEAR); ++outl(0xffffffff, VIC1INTENCLEAR); ++outl(0, DMAMP_TX_0_CONTROL); ++outl(0, DMAMP_RX_1_CONTROL); ++outl(0, DMAMP_TX_2_CONTROL); ++outl(0, DMAMP_RX_3_CONTROL); ++outl(0, DMAMM_0_CONTROL); ++outl(0, DMAMM_1_CONTROL); ++outl(0, DMAMP_TX_4_CONTROL); ++outl(0, DMAMP_RX_5_CONTROL); ++outl(0, DMAMP_TX_6_CONTROL); ++outl(0, DMAMP_RX_7_CONTROL); ++outl(0, DMAMP_TX_8_CONTROL); ++outl(0, DMAMP_RX_9_CONTROL); ++outl(1, MAC_SELFCTL); ++while(inl(MAC_SELFCTL) & 1) ++barrier(); ++outl(1, HCCOMMANDSTATUS); ++while(inl(HCCOMMANDSTATUS) & 1) ++barrier(); ++outl(0, IrEnable); ++outl(0, UART1CR); ++outl(0, UART2CR); ++outl(0, I2STX0En); ++outl(0, I2SRX0En); ++outl(0, AC97GCR); ++outl(0, SSPCR1); ++#ifdef CONFIG_ARCH_EP9315 ++outl(0, SMC_PCMCIACtrl); ++outl(0, BLOCKCTRL); ++#endif ++#if defined(CONFIG_ARCH_EP9312) || defined(CONFIG_ARCH_EP9315) ++outl(0, VIDEOATTRIBS); ++outl(0, UART3CR); ++outl(0, I2STX1En); ++outl(0, I2SRX1En); ++outl(0, I2STX2En); ++outl(0, I2SRX2En); ++outl(0, TSSetup); ++outl(0, IDECFG); ++outl(0xaa, SYSCON_SWLOCK); ++outl(0, SYSCON_VIDDIV); ++outl(0xaa, SYSCON_SWLOCK); ++outl(0, SYSCON_KTDIV); ++#endif ++outl(0xaa, SYSCON_SWLOCK); ++outl(0, SYSCON_MIRDIV); ++outl(0xaa, SYSCON_SWLOCK); ++outl(0, SYSCON_I2SDIV); ++outl(0, SYSCON_PWRCNT); ++outl(0xaa, SYSCON_SWLOCK); ++outl(0, SYSCON_DEVCFG); ++outl(0x000398e7, SYSCON_CLKSET1); ++inl(SYSCON_CLKSET1); ++__asm__ __volatile__("nop"); ++__asm__ __volatile__("nop"); ++__asm__ __volatile__("nop"); ++__asm__ __volatile__("nop"); ++__asm__ __volatile__("nop"); ++outl(0x0003c317, SYSCON_CLKSET2); ++__asm__ __volatile__("nop"); ++__asm__ __volatile__("nop"); ++__asm__ __volatile__("nop"); ++__asm__ __volatile__("nop"); ++__asm__ __volatile__("nop"); ++outl(0, GPIO_PADDR); ++outl(0, GPIO_PBDDR); ++outl(0, GPIO_PCDDR); ++#if defined(CONFIG_ARCH_EP9312) || defined(CONFIG_ARCH_EP9315) ++outl(0, GPIO_PDDDR); ++#endif ++outl(0x3, GPIO_PEDR); ++outl(0x3, GPIO_PEDDR); ++outl(0, GPIO_PFDDR); ++outl(0, GPIO_PGDR); ++outl(0xc, GPIO_PGDDR); ++outl(0, GPIO_PHDDR); ++outl(0, GPIO_PDDDR); ++outl(0, GPIO_PDDDR); ++outl(0, GPIO_AINTEN); ++outl(0, GPIO_BINTEN); ++outl(0, GPIO_FINTEN); ++outl(0, GPIO_EEDRIVE); ++ ++ ++// devicecfg = __raw_readl(EP93XX_SYSCON_DEVICE_CONFIG); ++// __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK); ++// __raw_writel(devicecfg | 0x80000000, EP93XX_SYSCON_DEVICE_CONFIG); ++// __raw_writel(0xaa, EP93XX_SYSCON_SWLOCK); ++// __raw_writel(devicecfg & ~0x80000000, EP93XX_SYSCON_DEVICE_CONFIG); ++ ++// SYSCON_SYSCFG_LEECK indicates internal or external boot. ++// Jump to internal boot ROM or external boot device. ++cpu_reset((inl(SYSCON_SYSCFG) & SYSCON_SYSCFG_LEECK) ? 0x80090000 : 0x0); + + while (1) + ; +-- +1.5.3 + diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb index ba8ce52dc5..9a392d934c 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -4,7 +4,7 @@ require linux.inc DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_gesbc-9302 = "1" -PR = "r0" +PR = "r1" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ file://defconfig \ @@ -15,6 +15,7 @@ S = "${WORKDIR}/linux-2.6.24" SRC_URI_append_gesbc-9302 = " \ file://0001-gesbc-nand.patch;patch=1 \ file://0002-gesbc-eth-platform.patch;patch=1 \ + file://0005-ep93xx-reboot.patch;patch=1 \ " CMDLINE_gesbc-9302 = "console=ttyAM0 root=mtd5 rootfstype=jffs2 mtdparts=GESBC-NAND:64m(app),-(data)" -- cgit v1.2.3 From 49e69fde110aee47c7bde8ff2ca584c5a7d12366 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Thu, 7 Feb 2008 15:44:13 +0000 Subject: gsm0710muxd svn remove initscript, ship dbus service files, bump SRCREV --- conf/distro/include/sane-srcrevs.inc | 2 +- packages/freesmartphone/gsm0710muxd_svn.bb | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index a4da94808c..f0da14cbcc 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -26,7 +26,7 @@ SRCREV_pn-fstests ?= "204" SRCREV_pn-gconf-dbus ?= "606" SRCREV_pn-gnuradio ?= "6377" SRCREV_pn-gpe-contacts ?= "9312" -SRCREV_pn-gsm0710muxd ?= "70" +SRCREV_pn-gsm0710muxd ?= "73" SRCREV_pn-gtkhtml2 ?= "1158" SRCREV_pn-gypsy ?= "56" SRCREV_pn-hildon-1 ?= "14429" diff --git a/packages/freesmartphone/gsm0710muxd_svn.bb b/packages/freesmartphone/gsm0710muxd_svn.bb index 0849b55bbc..4a4dc3b7d4 100644 --- a/packages/freesmartphone/gsm0710muxd_svn.bb +++ b/packages/freesmartphone/gsm0710muxd_svn.bb @@ -1,22 +1,16 @@ -DESCRIPTION = "gsm.07.10 muxer userspace daemon" +DESCRIPTION = "gsm 07.10 muxer userspace daemon" +HOMEPAGE = "http://www.freesmartphone.org" AUTHOR = "M. Dietrich" SECTION = "console/network" DEPENDS = "intltool-native dbus" LICENSE = "GPL" PV = "0.0+svnr${SRCREV}" -PR = "r2" +PR = "r0" SRC_URI = "svn://projects.linuxtogo.org/svn/smartphones/trunk/software;module=gsm0710muxd" S = "${WORKDIR}/gsm0710muxd" -inherit autotools update-rc.d - -INITSCRIPT_NAME = "gsm0710muxd" -INITSCRIPT_PARAMS = "defaults 35" - -do_install_append() { - chmod a+rx ${D}${sysconfdir}/init.d/gsm0710muxd -} +inherit autotools pkg_postinst_${PN}() { # can't do this offline @@ -28,3 +22,6 @@ pkg_postinst_${PN}() { kill -SIGHUP $i done } + +FILES_${PN} += "${datadir}" + -- cgit v1.2.3 From 5567a0d5ea04c8372709c9397d6a25d632c389c4 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 7 Feb 2008 16:20:38 +0000 Subject: xserver-common: Update to 1.21 --- packages/xserver-common/xserver-common_1.20.bb | 16 ---------------- packages/xserver-common/xserver-common_1.21.bb | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 packages/xserver-common/xserver-common_1.20.bb create mode 100644 packages/xserver-common/xserver-common_1.21.bb diff --git a/packages/xserver-common/xserver-common_1.20.bb b/packages/xserver-common/xserver-common_1.20.bb deleted file mode 100644 index a30a37c893..0000000000 --- a/packages/xserver-common/xserver-common_1.20.bb +++ /dev/null @@ -1,16 +0,0 @@ -DESCRIPTION = "Common X11 scripts and support files" -LICENSE = "GPL" -SECTION = "x11" -RDEPENDS_${PN} = "xmodmap xrandr xdpyinfo" -PR = "r0" - -PACKAGE_ARCH = "all" - -# we are using a gpe-style Makefile -inherit gpe - -SRC_URI_append = " file://setDPI.sh " - -do_install_append() { - install -m 0755 "${WORKDIR}/setDPI.sh" "${D}/etc/X11/Xinit.d/50setdpi" -} diff --git a/packages/xserver-common/xserver-common_1.21.bb b/packages/xserver-common/xserver-common_1.21.bb new file mode 100644 index 0000000000..a30a37c893 --- /dev/null +++ b/packages/xserver-common/xserver-common_1.21.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "Common X11 scripts and support files" +LICENSE = "GPL" +SECTION = "x11" +RDEPENDS_${PN} = "xmodmap xrandr xdpyinfo" +PR = "r0" + +PACKAGE_ARCH = "all" + +# we are using a gpe-style Makefile +inherit gpe + +SRC_URI_append = " file://setDPI.sh " + +do_install_append() { + install -m 0755 "${WORKDIR}/setDPI.sh" "${D}/etc/X11/Xinit.d/50setdpi" +} -- cgit v1.2.3 From 997fa56e9bd27a17b4fd3b151ce683e2c0929fee Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 7 Feb 2008 17:58:29 +0000 Subject: sane-srcrevs.inc: bump entry for opkg to 4022. 4019 did not build for me. --- 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 f0da14cbcc..ca1227a84e 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -119,7 +119,7 @@ SRCREV_pn-openmoko-toolchain-scripts ?= "3767" SRCREV_pn-openmoko-worldclock2 ?= "3365" SRCREV_pn-openocd ?= "206" SRCREV_pn-openocd-native ?= "206" -SRCREV_pn-opkg ?= "4019" +SRCREV_pn-opkg ?= "4022" SRCREV_pn-opkg-native ?= "4019" SRCREV_pn-oprofileui ?= "160" SRCREV_pn-psplash ?= "249" -- cgit v1.2.3 From 0313defa39c55357c11368006acc957ee9ea5cb9 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Thu, 7 Feb 2008 20:12:29 +0000 Subject: gumstix-machine : Update gumstix machine files from gumstix OE collection. --- conf/machine/gumstix-custom-connex.conf | 75 +++++++++++++++++++++++++++++++ conf/machine/gumstix-custom-verdex.conf | 78 +++++++++++++++++++++++++++++++++ conf/machine/include/gumstix.inc | 60 ++++++++++++------------- 3 files changed, 181 insertions(+), 32 deletions(-) create mode 100644 conf/machine/gumstix-custom-connex.conf create mode 100644 conf/machine/gumstix-custom-verdex.conf diff --git a/conf/machine/gumstix-custom-connex.conf b/conf/machine/gumstix-custom-connex.conf new file mode 100644 index 0000000000..1b854582f8 --- /dev/null +++ b/conf/machine/gumstix-custom-connex.conf @@ -0,0 +1,75 @@ +# +# Use this file as a starting point for your custom gumstix configuration +# Edit it to reflect your hardware setup and then save it a parallel location in user.collection + +MACHINE_FEATURES += "connex" +require conf/machine/include/gumstix.inc +require conf/machine/include/tune-xscale.inc + +# +# Your flash size = Total flash (in MB) - 1 (for linux kernel partition) +#ROOT_FLASH_SIZE = "3" +ROOT_FLASH_SIZE = "15" + +# +# Enable use of virtual terminal for LCD on tty1 if USE_VT = "1" +USE_VT = "0" +#USE_VT = "1" +#SYSVINIT_ENABLED_GETTYS = "1" + +# +# Uncomment features that your board set supports + +#MACHINE_FEATURES += "usbhost" +MACHINE_FEATURES += "usbgadget" + +MACHINE_FEATURES += "i2c" +#MACHINE_FEATURES += "spi" + +MACHINE_FEATURES += "serial" +MACHINE_FEATURES += "bluetooth" +MACHINE_FEATURES += "sound" + +# if you enable robostix you will need to disable both "lcd" and "touchscreen" features +#MACHINE_FEATURES += "robostix" + +#MACHINE_FEATURES += "lcd" +#MACHINE_FEATURES += "touchscreen" +#MACHINE_FEATURES += "keyboard" + +MACHINE_FEATURES += "pcmcia" +#MACHINE_FEATURES += "mmc" + +MACHINE_FEATURES += "wifi" +MACHINE_FEATURES += "ethernet" + +MACHINE_FEATURES += "fat" +#MACHINE_FEATURES += "ext2" + +# +# note: selection of MACHINE_FEATURES above will automatically include necessary kernel modules +# for those features via task-base-gumstix. Include below any extra kernel modules that you want installed + +#MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-module-xxxxxxx" + +# +# Uncomment or add kernel modules that should be autoloaded + +module_autoload_proc_gpio = 'proc_gpio' + +module_autoload_pcmcia = ${@base_contains('MACHINE_FEATURES', 'pcmcia', 'pcmcia', '',d)} +module_autoload_pxa2xx_cs = ${@base_contains('MACHINE_FEATURES', 'pcmcia', 'pxa2xx_cs', '',d)} + +module_autoload_pxamci = ${@base_contains('MACHINE_FEATURES', 'mmc', 'pxamci', '',d)} +module_autoload_mmc_block = ${@base_contains('MACHINE_FEATURES', 'mmc', 'mmc_block', '',d)} + +module_autoload_ethernet = ${@base_contains('MACHINE_FEATURES', 'ethernet', 'ethernet', '',d)} + +module_autoload_gumstix_gadget = ${@base_contains('MACHINE_FEATURES', 'usbgadget', 'gumstix_gadget', '',d)} +#module_autoload_g_file_storage = ${@base_contains('MACHINE_FEATURES', 'usbgadget', 'g_file_storage', '',d)} +module_autoload_g_ether = ${@base_contains('MACHINE_FEATURES', 'usbgadget', 'g_ether', '',d)} +#module_autoload_g_serial = ${@base_contains('MACHINE_FEATURES', 'usbgadget', 'g_serial', '',d)} + +module_autoload_ucb1400-ts = ${@base_contains('MACHINE_FEATURES', 'touchscreen','ucb1400-ts', '',d)} +module_autoload_evdev = ${@base_contains('MACHINE_FEATURES', 'touchscreen','evdev', '',d)} + diff --git a/conf/machine/gumstix-custom-verdex.conf b/conf/machine/gumstix-custom-verdex.conf new file mode 100644 index 0000000000..f2488d66e1 --- /dev/null +++ b/conf/machine/gumstix-custom-verdex.conf @@ -0,0 +1,78 @@ +# +# Use this file as a starting point for your custom gumstix configuration +# Edit it to reflect your hardware setup and then save it a parallel location in user.collection + +MACHINE_FEATURES += "verdex" +MACHINE_FEATURES += "iwmmxt" +require conf/machine/include/gumstix.inc +require conf/machine/include/tune-xscale.inc + +# +# Your flash size = Total flash (in MB) - 1 (for linux kernel partition) +ROOT_FLASH_SIZE = "15" +#ROOT_FLASH_SIZE = "31" + +# +# Enable use of virtual terminal for LCD on tty1 if USE_VT = "1" +#USE_VT = "0" +USE_VT = "1" +SYSVINIT_ENABLED_GETTYS = "1" + +# +# Uncomment features that your board set supports + +MACHINE_FEATURES += "usbhost" +#MACHINE_FEATURES += "usbgadget" + +MACHINE_FEATURES += "i2c" +#MACHINE_FEATURES += "spi" + +MACHINE_FEATURES += "serial" +MACHINE_FEATURES += "bluetooth" +MACHINE_FEATURES += "sound" + +# if you enable robostix you will need to disable both "lcd" and "touchscreen" features +#MACHINE_FEATURES += "robostix" + +MACHINE_FEATURES += "lcd" +MACHINE_FEATURES += "touchscreen" +MACHINE_FEATURES += "keyboard" + +MACHINE_FEATURES += "pcmcia" +MACHINE_FEATURES += "mmc" + +MACHINE_FEATURES += "wifi" +MACHINE_FEATURES += "ethernet" + +MACHINE_FEATURES += "ext2" +MACHINE_FEATURES += "fat" + +# +# note: selection of MACHINE_FEATURES above will automatically include necessary kernel modules +# for those features via task-base-gumstix. Include below any extra kernel modules that you want installed + +#MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-module-xxxxxxx" + +# +# Uncomment or add kernel modules that should be autoloaded + +module_autoload_proc_gpio = 'proc_gpio' + +module_autoload_pcmcia = ${@base_contains('MACHINE_FEATURES', 'pcmcia', 'pcmcia', '',d)} +module_autoload_pxa2xx_cs = ${@base_contains('MACHINE_FEATURES', 'pcmcia', 'pxa2xx_cs', '',d)} + +module_autoload_pxamci = ${@base_contains('MACHINE_FEATURES', 'mmc', 'pxamci', '',d)} +module_autoload_mmc_block = ${@base_contains('MACHINE_FEATURES', 'mmc', 'mmc_block', '',d)} + +module_autoload_ethernet = ${@base_contains('MACHINE_FEATURES', 'ethernet', 'ethernet', '',d)} + +module_autoload_ohci-hcd = ${@base_contains('MACHINE_FEATURES', 'usbhost', 'ohci-hcd', '',d)} + +module_autoload_gumstix_gadget = ${@base_contains('MACHINE_FEATURES', 'usbgadget', 'gumstix_gadget', '',d)} +#module_autoload_g_file_storage = ${@base_contains('MACHINE_FEATURES', 'usbgadget', 'g_file_storage', '',d)} +module_autoload_g_ether = ${@base_contains('MACHINE_FEATURES', 'usbgadget', 'g_ether', '',d)} +#module_autoload_g_serial = ${@base_contains('MACHINE_FEATURES', 'usbgadget', 'g_serial', '',d)} + +module_autoload_tsc2003 = ${@base_contains('MACHINE_FEATURES', 'touchscreen','tsc2003', '',d)} +module_autoload_evdev = ${@base_contains('MACHINE_FEATURES', 'touchscreen','evdev', '',d)} + diff --git a/conf/machine/include/gumstix.inc b/conf/machine/include/gumstix.inc index fc5fd4e136..1bc0b2e000 100644 --- a/conf/machine/include/gumstix.inc +++ b/conf/machine/include/gumstix.inc @@ -2,47 +2,43 @@ #@Name: Gumstix pxa2xx boards #@DESCRIPTION: Gumstix pxa2xx boards +# Don't edit this file unless you *really* know what you are doing! + TARGET_ARCH = "arm" PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5e armv5te " -PREFERRED_PROVIDER_virtual/kernel = "linux" +PREFERRED_PROVIDER_virtual/kernel = "gumstix-kernel" KERNEL_IMAGETYPE = "uImage" - -module_autoload_pxamci = "pxamci" -module_autoload_mmc_block = "mmc_block" -module_autoload_gumstix_gadget = "gumstix_gadget" -module_autoload_g_ether = "g_ether" -module_autoload_smc91x = "smc91x" -module_autoload_smc911x = "smc911x" +RDEPENDS_kernel-base = "" +KERNEL_IMAGE_MAXSIZE = "1048577" UBOOT_ENTRYPOINT = "a0008000" -#Assume people have some gumstix extension boards -MACHINE_FEATURES = "kernel26 alsa ext2 bluetooth" - -EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 --squash" +MACHINE_FEATURES += "kernel26 " +COMBINED_FEATURES ?= "" -# Install all kernel modules -#MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS = "kernel-modules" +IMAGE_FSTYPES = "jffs2" +EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 --squash-uids" -# Install only selected kernel modules, comment out line above also -MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS = "kernel-module-unix \ - kernel-module-rtc-core \ - kernel-module-rtc-dev \ - kernel-module-rtc-proc \ - kernel-module-rtc-sa1100 \ - kernel-module-rtc-sysfs \ - kernel-module-smc91x \ - kernel-module-gumstix-smc91x \ - kernel-module-smc911x \ - kernel-module-gumstix-smc911x \ - " - -# used by sysvinit_2 SERIAL_CONSOLE = "115200 ttyS0 vt100" -#don't try to access tty1 -USE_VT = "0" - -require conf/machine/include/tune-xscale.inc +MACHINE_ESSENTIAL_EXTRA_RDEPENDS = " \ + " + +MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= " \ + " +# +# The following *should* be in a distro.conf file +# We include them here to avoid creating a new distro + +PREFERRED_VERSION_gumstix-kernel = "2.6.21" +PREFERRED_VERSION_udev = "115" +PREFERRED_VERSION_gnuplot = "4.0.0" +PREFERRED_VERSION_dropbear = "0.47" +PREFERRED_VERSION_wpa-supplicant = "0.5.8" +PREFERRED_VERSION_bluez-utils = "3.24" +PREFERRED_VERSION_bluez-utils-alsa = "3.24" +PREFERRED_VERSION_bluez-libs = "3.24" +PREFERRED_VERSION_bluez-gstreamer-plugin = "3.24" +PREFERRED_VERSION_bluez-hcidump = "1.40" -- cgit v1.2.3 From 57c2f23e84f3916a179a1135578fd6a24d0c8587 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 7 Feb 2008 22:17:17 +0000 Subject: eb: update to version 4.3.2 * fixes unfetchable source * improve packaging granularity (add utils package and make sure doc stuff is actually in -doc) * use autotools_stage_all instead of custom do_stage routine (comment 11 from bug 1383) --- packages/eb/eb_4.3.2.bb | 18 ++++++++++++++++++ packages/eb/eb_4.3.bb | 14 -------------- 2 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 packages/eb/eb_4.3.2.bb delete mode 100644 packages/eb/eb_4.3.bb diff --git a/packages/eb/eb_4.3.2.bb b/packages/eb/eb_4.3.2.bb new file mode 100644 index 0000000000..5ba61c7cdb --- /dev/null +++ b/packages/eb/eb_4.3.2.bb @@ -0,0 +1,18 @@ +DESCRIPTION = "Electronic book library" +HOMEPAGE = "http://www.sra.co.jp/people/m-kasahr/eb" +SECTION = "libs" +LICENSE = "GPL" +#DEPENDS = "zlib" + +SRC_URI = "ftp://ftp.sra.co.jp/pub/misc/eb/eb-${PV}.tar.bz2" + +inherit autotools + +EXTRA_OECONF += " --with-pkgdocdir=${docdir}/eb" + +do_stage () { + autotools_stage_all +} + +PACKAGES =+ "eb-utils" +FILES_eb-utils = "/usr/bin/*" diff --git a/packages/eb/eb_4.3.bb b/packages/eb/eb_4.3.bb deleted file mode 100644 index 29bd53dfea..0000000000 --- a/packages/eb/eb_4.3.bb +++ /dev/null @@ -1,14 +0,0 @@ -DESCRIPTION = "Electronic book library" -HOMEPAGE = "http://www.sra.co.jp/people/m-kasahr/eb" -SECTION = "libs" -LICENSE = "GPL" - -SRC_URI = "ftp://ftp.sra.co.jp/pub/misc/eb/eb-${PV}.tar.bz2" - -inherit autotools pkgconfig - -do_stage () { - install -d ${STAGING_INCDIR}/eb/ - install -m 0644 eb/*.h ${STAGING_INCDIR}/eb/ - install eb/.libs/libeb.so ${STAGING_LIBDIR} -} -- cgit v1.2.3 From a962c31f95cc3e4eb996eff609e973bcd2d2fc5c Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 7 Feb 2008 23:11:47 +0000 Subject: initramfs-kexec-image: initial commit. Closes 3739. --- packages/images/initramfs-kexec-image.bb | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/images/initramfs-kexec-image.bb diff --git a/packages/images/initramfs-kexec-image.bb b/packages/images/initramfs-kexec-image.bb new file mode 100644 index 0000000000..e4f4930286 --- /dev/null +++ b/packages/images/initramfs-kexec-image.bb @@ -0,0 +1,9 @@ +#initramfs image which mounts the rootfilesystem and kexecs a kernel from there + +inherit image + +export IMAGE_BASENAME = "initramfs-kexec-image" + +IMAGE_INSTALL = "klibc-utils-static-sh klibc-utils-static-mount kexec-static initramfs-kexec" +IMAGE_FSTYPES += " cpio.gz" +IMAGE_LINGUAS = "" -- cgit v1.2.3 From d9a05430e070a497ca4db0a3f8f746fb952b5ecd Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Thu, 7 Feb 2008 23:25:02 +0000 Subject: expedite cvs remove patch which has been applied upstream. builds again now --- packages/e17/expedite/.mtn2git_empty | 0 packages/e17/expedite/hack-disable-opengl.patch | 87 ------------------------- packages/e17/expedite_cvs.bb | 5 +- 3 files changed, 2 insertions(+), 90 deletions(-) delete mode 100644 packages/e17/expedite/.mtn2git_empty delete mode 100644 packages/e17/expedite/hack-disable-opengl.patch diff --git a/packages/e17/expedite/.mtn2git_empty b/packages/e17/expedite/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/e17/expedite/hack-disable-opengl.patch b/packages/e17/expedite/hack-disable-opengl.patch deleted file mode 100644 index 7d368d320d..0000000000 --- a/packages/e17/expedite/hack-disable-opengl.patch +++ /dev/null @@ -1,87 +0,0 @@ -Index: expedite/configure.in -=================================================================== ---- expedite.orig/configure.in -+++ expedite/configure.in -@@ -47,24 +47,11 @@ - PKG_CHECK_MODULES([EVAS], evas) - - dnl OpenGL GLEW --PKG_CHECK_EXISTS(evas-opengl-glew, -- [ -- AC_DEFINE(HAVE_EVAS_OPENGL_GLEW, 1, [Evas GL Glew Engine Support]) -- have_opengl_glew="yes" -- glew_libs="-lglew32 -lgdi32" -- ], -- [ have_opengl_glew="no" ] --) -+have_opengl_glew="no" - AM_CONDITIONAL(BUILD_OPENGL_GLEW, test "x$have_opengl_glew" = "xyes") - - dnl OpenGL X11 --PKG_CHECK_EXISTS(evas-opengl-x11, -- [ -- AC_DEFINE(HAVE_EVAS_OPENGL_X11, 1, [Evas GL X11 Engine Support]) -- have_opengl_x11="yes" -- ], -- [ have_opengl_x11="no" ] --) -+have_opengl_x11="no" - AM_CONDITIONAL(BUILD_OPENGL_X11, test "x$have_opengl_x11" = "xyes") - - dnl Software X11 -@@ -109,49 +96,23 @@ - - # TODO: Check availability of libs - dnl DirectDraw --PKG_CHECK_EXISTS(evas-software-ddraw, -- [ -- AC_DEFINE(HAVE_EVAS_SOFTWARE_DDRAW, 1, [Evas Software DirectDraw Engine Support]) -- have_software_ddraw="yes" -- ddraw_libs="-lddraw -ldxguid" -- ], -- [ have_software_ddraw="no" ] --) -+have_software_ddraw="no" - AM_CONDITIONAL(BUILD_SOFTWARE_DDRAW, test "x$have_software_ddraw" = "xyes") - - # TODO: Check availability of libs - dnl 16bit DirectDraw --PKG_CHECK_EXISTS(evas-software-16-ddraw, -- [ -- AC_DEFINE(HAVE_EVAS_SOFTWARE_16_DDRAW, 1, [Evas Software 16bit DirectDraw Engine Support]) -- have_software_16_ddraw="yes" -- ddraw_libs="-lddraw -ldxguid" -- ], -- [ have_software_16_ddraw="no" ] --) -+have_software_16_ddraw="no" - AM_CONDITIONAL(BUILD_SOFTWARE_16_DDRAW, test "x$have_software_16_ddraw" = "xyes") - - # TODO: Check availability of libs - dnl Direct3D --PKG_CHECK_EXISTS(evas-direct3d, -- [ -- AC_DEFINE(HAVE_EVAS_DIRECT3D, 1, [Evas Direct3D Engine Support]) -- have_direct3d="yes" -- d3d_libs="-ld3d9 -ld3dx9d" -- ], -- [ have_direct3d="no" ] --) -+have_direct3d="no" - AM_CONDITIONAL(BUILD_DIRECT3D, test "x$have_direct3d" = "xyes") - - dnl Software SDL --PKG_CHECK_EXISTS(evas-software-sdl, -- [ -- AC_DEFINE(HAVE_EVAS_SOFTWARE_SDL, 1, [Evas Software SDL Engine Support]) -- have_software_sdl="yes" -- ], -- [ have_direct3d="no" ] --) --AM_CONDITIONAL(BUILD_SOFTWARE_SDL, test "x$have_software_sdl" = "xyes") -+have_software_sdl="no" -+AM_CONDITIONAL(BUILD_SOFTWARE_SDL, test "x$have_software_sdl" = "xyes") -+ - - if test "x$have_software_x11" = "xyes" -o "x$have_software_16_x11" = "xyes" -o "x$have_xrender_x11" = "xyes" -o "x$have_opengl_x11" = "xyes"; then - AC_PATH_XTRA diff --git a/packages/e17/expedite_cvs.bb b/packages/e17/expedite_cvs.bb index 271ed62d66..11d4e503cb 100644 --- a/packages/e17/expedite_cvs.bb +++ b/packages/e17/expedite_cvs.bb @@ -3,12 +3,11 @@ DEPENDS = "eet evas" RDEPENDS = "libevas-engine-buffer libevas-engine-fb libevas-engine-software-generic libevas-engine-software-x11 libevas-loader-png" LICENSE = "MIT BSD" PV = "0.6.0+cvs${SRCDATE}" -PR = "r0" +PR = "r1" inherit autotools -SRC_URI = "${E_CVS};module=e17/apps/expedite \ - file://hack-disable-opengl.patch;patch=1" +SRC_URI = "${E_CVS};module=e17/apps/expedite" S = "${WORKDIR}/${PN}" EXTRA_OECONF = "\ -- cgit v1.2.3 From e143c394cb170b9ddb130770514ae822b0e90616 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 8 Feb 2008 00:44:49 +0000 Subject: MAINTAINERS: update entry for Patrick Gfeller --- MAINTAINERS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 9b1e8854dc..d64fe3111b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -165,7 +165,9 @@ Recipes: *python*, efl/*, e17* Person: Patrick Gfeller Mail: gfellerpatrik@gmx.net -Recipes: libvncserver, fbvncserver +Website: www.codeomega.info +Interests: text-to-speech, vnc +Recipes: libvncserver, fbvncserver2 Person: Paul Sokolovsky Mail: pmiscml@gmail.com -- cgit v1.2.3 From b263c8d2152d8d012bd80a6fe1f608c2a735d793 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 8 Feb 2008 00:46:47 +0000 Subject: MAINTAINERS: update my entry --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index d64fe3111b..5d94458498 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -214,7 +214,7 @@ Distros: Sonkei Machines: collie, spitz Recipes: anthy, nunome, uim*, granule, qpobox*, qte-font-unifont* Recipes: qpf-unismall, qpobox, poboxserver, imkit*, scim, zten -Recipes: eb, eblook, tomoe +Recipes: eb*, tomoe, offline-wikipedia Person: Shane Volpe Mail: shanevolpe@gmail.com -- cgit v1.2.3 From 7fbf6ee54374e1791bdbbd97b16d19b14599546e Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 8 Feb 2008 01:08:46 +0000 Subject: mkbold-mkitalic-native: initial commit. partly closes 1362 (incorporate stuff from openzaurus-ja project) --- MAINTAINERS | 4 ++++ .../xorg-app/mkbold-mkitalic-native/.mtn2git_empty | 0 .../xorg-app/mkbold-mkitalic-native/makebifonts | 5 +++++ packages/xorg-app/mkbold-mkitalic-native_0.11.bb | 21 +++++++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 packages/xorg-app/mkbold-mkitalic-native/.mtn2git_empty create mode 100644 packages/xorg-app/mkbold-mkitalic-native/makebifonts create mode 100644 packages/xorg-app/mkbold-mkitalic-native_0.11.bb diff --git a/MAINTAINERS b/MAINTAINERS index 5d94458498..dbeca93591 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -229,6 +229,10 @@ Machines: Dht-walnut, Efika, Magicbox,Sequoia,Xilinx-ML403,RB5XX Interest: Cross-machine development Recipes: icecc.bbclass, ppc toolchain, asterisk,perl,php +Person: Takashi Nemoto +Mail: tnemoto@sourceforge.jp +Recipes: mkbold-mkitalic + Person: Tim Sander Mail: oe@iss.tu-darmstadt.de Receipes: fxload diff --git a/packages/xorg-app/mkbold-mkitalic-native/.mtn2git_empty b/packages/xorg-app/mkbold-mkitalic-native/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/xorg-app/mkbold-mkitalic-native/makebifonts b/packages/xorg-app/mkbold-mkitalic-native/makebifonts new file mode 100644 index 0000000000..dc098955a2 --- /dev/null +++ b/packages/xorg-app/mkbold-mkitalic-native/makebifonts @@ -0,0 +1,5 @@ +#!/bin/sh +cat $1.bdf | bdftopcf | gzip -c -3 > $2/$3.pcf.gz +cat $1.bdf | mkbold | bdftopcf | gzip -c -3 > $2/$3_b.pcf.gz +cat $1.bdf | mkitalic | bdftopcf | gzip -c -3 > $2/$3_i.pcf.gz +cat $1.bdf | mkbolditalic | bdftopcf | gzip -c -3 > $2/$3_bi.pcf.gz diff --git a/packages/xorg-app/mkbold-mkitalic-native_0.11.bb b/packages/xorg-app/mkbold-mkitalic-native_0.11.bb new file mode 100644 index 0000000000..40082ec816 --- /dev/null +++ b/packages/xorg-app/mkbold-mkitalic-native_0.11.bb @@ -0,0 +1,21 @@ +DESCRIPTION = "mkbold-mkitalic : make bold and italic fonts from normal fonts" +HOMEPAGE = "http://hp.vector.co.jp/authors/VA013651/freeSoftware/mkbold-mkitalic.html" +PRIORITY = "optional" +LICENSE = "MIT/X" +PR = "r2" + +SRC_URI = "http://hp.vector.co.jp/authors/VA013651/lib/mkbold-mkitalic-${PV}.tar.bz2 \ + file://makebifonts" + +S = "${WORKDIR}/mkbold-mkitalic-${PV}" + +inherit native + +do_stage() { + install -d ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin + install -m 755 mkbold ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin/ + install -m 755 mkitalic ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin/ + install -m 755 mkbolditalic ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin/ + install -m 755 ${WORKDIR}/makebifonts ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin/ +} + -- cgit v1.2.3 From 949689295c384ea7148e762439e319362ab04cb4 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 09:00:34 +0000 Subject: linux-openmoko-devel git bring back from Graeme's personal Nirvana --- packages/linux/linux-openmoko-devel_git.bb | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 packages/linux/linux-openmoko-devel_git.bb diff --git a/packages/linux/linux-openmoko-devel_git.bb b/packages/linux/linux-openmoko-devel_git.bb new file mode 100644 index 0000000000..b727478c76 --- /dev/null +++ b/packages/linux/linux-openmoko-devel_git.bb @@ -0,0 +1,46 @@ +require linux.inc +require linux-openmoko.inc + +DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko" +DEFAULT_PREFERENCE = "-1" + +KERNEL_RELEASE = "2.6.24-rc8" +KERNEL_VERSION = "${KERNEL_RELEASE}" + +# If you use a rc, you will need to use this: +PV = "${KERNEL_RELEASE}+git${SRCREV}" +PR = "r0" + +KERNEL_IMAGETYPE = "uImage" +UBOOT_ENTRYPOINT = "30008000" + +SRC_URI = "git://git.openmoko.org/git/kernel.git;protocol=git;branch=andy" +S = "${WORKDIR}/git" + +############################################################## +# kernel image resides on a seperate flash partition (for now) +# +FILES_kernel-image = "" +ALLOW_EMPTY = "1" + +COMPATIBLE_HOST = "arm.*-linux" +COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' + +CMDLINE = "unused -- bootloader passes ATAG list" + +############################################################### +# module configs specific to this kernel +# + +# usb +module_autoload_ohci-hcd = "ohci-hcd" +module_autoload_hci_usb = "hci_usb" +module_autoload_g_ether = "g_ether" +# audio +module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753" +# sd/mmc +module_autoload_s3cmci = "s3cmci" + +do_configure_prepend() { + mv defconfig-2.6.24 ${WORKDIR}/defconfig +} -- cgit v1.2.3 From 30f7e3c6ca862a831b57cd78078ff2024f4c1bab Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Fri, 8 Feb 2008 09:08:22 +0000 Subject: MAINTAINERS: add my entry --- MAINTAINERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index dbeca93591..be759b4004 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -92,6 +92,12 @@ Website: http://sicherheitsschwankung.de Machines: chumby Recipes: chumby-*, initramfs-chumby +Person: Jeremy Lainé +Mail: jeremy.laine@bolloretelecom.eu +Website: http://www.jerryweb.org/ +Machines: mpc8313e-rdb +Recipes: libexosip2, python-cheetah, python-django, python-pyopenssl + Person: Joaquim Duran Mail: joaquinduran@adtelecom.es Recipes: gtk+, gtkmm -- cgit v1.2.3 From 76822c8c08c3090902fade2582e0f3e15bde3729 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 09:11:44 +0000 Subject: busybox cleanup: * remove some outdated / in-between versions * remove angstrom-only defconfig in bb 1.7.2 * make 1.7.2 the new default preference --- packages/busybox/busybox-1.00/.mtn2git_empty | 0 .../busybox/busybox-1.00/add-getkey-applet.patch | 157 ---- packages/busybox/busybox-1.00/below.patch | 49 -- .../busybox/busybox-1.00/celf-ash-builtins.patch | 431 ---------- packages/busybox/busybox-1.00/console.patch | 13 - packages/busybox/busybox-1.00/defconfig | 476 ----------- packages/busybox/busybox-1.00/df.patch | 28 - packages/busybox/busybox-1.00/dhcp-hostname.patch | 25 - packages/busybox/busybox-1.00/dhcpretrytime.patch | 81 -- packages/busybox/busybox-1.00/fbset.patch | 24 - .../busybox/busybox-1.00/gzip-spurious-const.patch | 11 - packages/busybox/busybox-1.00/hdparm_M.patch | 47 -- .../busybox-1.00/ifupdown-spurious-environ.patch | 12 - .../busybox/busybox-1.00/iproute-flush-cache.patch | 23 - packages/busybox/busybox-1.00/linux-types.patch | 10 - packages/busybox/busybox-1.00/mount-all-type.patch | 84 -- packages/busybox/busybox-1.00/nylon/.mtn2git_empty | 0 packages/busybox/busybox-1.00/nylon/defconfig | 458 ----------- .../busybox/busybox-1.00/openmn/.mtn2git_empty | 0 packages/busybox/busybox-1.00/openmn/defconfig | 475 ----------- packages/busybox/busybox-1.00/readlink.patch | 85 -- packages/busybox/busybox-1.00/rmmod.patch | 44 -- .../busybox/busybox-1.00/slugos/.mtn2git_empty | 0 packages/busybox/busybox-1.00/slugos/defconfig | 461 ----------- .../busybox/busybox-1.00/slugos/udhcpscript.patch | 133 ---- packages/busybox/busybox-1.00/sparc/.mtn2git_empty | 0 packages/busybox/busybox-1.00/sparc/defconfig | 467 ----------- .../start-stop-daemon-oknodo-support.patch | 73 -- packages/busybox/busybox-1.00/uclibc_posix.patch | 20 - .../busybox-1.00/udhcppidfile-breakage.patch | 57 -- packages/busybox/busybox-1.00/udhcppidfile.patch | 276 ------- packages/busybox/busybox-1.00/udhcpscript.patch | 17 - .../busybox/busybox-1.00/unzip-endian-fixes.patch | 54 -- .../busybox-1.00/unzip-enhancement-and-fixes.patch | 878 --------------------- packages/busybox/busybox-1.00/wrt54/.mtn2git_empty | 0 packages/busybox/busybox-1.00/wrt54/defconfig | 476 ----------- .../busybox/busybox-1.00/xargs-double-size.patch | 13 - packages/busybox/busybox-1.01/.mtn2git_empty | 0 .../busybox/busybox-1.01/add-getkey-applet.patch | 157 ---- .../busybox/busybox-1.01/angstrom/.mtn2git_empty | 0 packages/busybox/busybox-1.01/angstrom/defconfig | 475 ----------- packages/busybox/busybox-1.01/below.patch | 49 -- packages/busybox/busybox-1.01/defconfig | 476 ----------- packages/busybox/busybox-1.01/dhcp-hostname.patch | 30 - packages/busybox/busybox-1.01/dhcpretrytime.patch | 81 -- .../busybox/busybox-1.01/familiar/.mtn2git_empty | 0 packages/busybox/busybox-1.01/familiar/defconfig | 470 ----------- packages/busybox/busybox-1.01/fbset.patch | 24 - packages/busybox/busybox-1.01/hdparm_M.patch | 47 -- .../busybox-1.01/ifupdown-spurious-environ.patch | 12 - .../busybox/busybox-1.01/iproute-flush-cache.patch | 23 - packages/busybox/busybox-1.01/mount-all-type.patch | 84 -- packages/busybox/busybox-1.01/nylon/.mtn2git_empty | 0 packages/busybox/busybox-1.01/nylon/defconfig | 458 ----------- .../busybox/busybox-1.01/openmn/.mtn2git_empty | 0 packages/busybox/busybox-1.01/openmn/defconfig | 475 ----------- packages/busybox/busybox-1.01/readlink.patch | 85 -- packages/busybox/busybox-1.01/rmmod.patch | 44 -- .../busybox/busybox-1.01/slugos/.mtn2git_empty | 0 packages/busybox/busybox-1.01/slugos/defconfig | 444 ----------- packages/busybox/busybox-1.01/slugos/sysctl.conf | 32 - .../busybox/busybox-1.01/slugos/udhcpscript.patch | 162 ---- packages/busybox/busybox-1.01/sparc/.mtn2git_empty | 0 packages/busybox/busybox-1.01/sparc/defconfig | 467 ----------- packages/busybox/busybox-1.01/thumb-bsdlabel.patch | 11 - packages/busybox/busybox-1.01/uclibc_posix.patch | 21 - .../busybox-1.01/udhcppidfile-breakage.patch | 57 -- packages/busybox/busybox-1.01/udhcppidfile.patch | 276 ------- packages/busybox/busybox-1.01/udhcpscript.patch | 17 - packages/busybox/busybox-1.01/wrt54/.mtn2git_empty | 0 packages/busybox/busybox-1.01/wrt54/defconfig | 476 ----------- .../busybox/busybox-1.01/xargs-double-size.patch | 13 - packages/busybox/busybox-1.2.0/.mtn2git_empty | 0 .../busybox/busybox-1.2.0/add-getkey-applet.patch | 167 ---- .../busybox/busybox-1.2.0/angstrom/.mtn2git_empty | 0 packages/busybox/busybox-1.2.0/angstrom/defconfig | 647 --------------- packages/busybox/busybox-1.2.0/below.patch | 46 -- packages/busybox/busybox-1.2.0/defconfig | 647 --------------- packages/busybox/busybox-1.2.0/dhcp-hostname.patch | 30 - packages/busybox/busybox-1.2.0/dhcpretrytime.patch | 85 -- packages/busybox/busybox-1.2.0/fbset.patch | 24 - packages/busybox/busybox-1.2.0/hdparm_M.patch | 47 -- .../busybox-1.2.0/ifupdown-spurious-environ.patch | 12 - .../busybox-1.2.0/iproute-flush-cache.patch | 23 - packages/busybox/busybox-1.2.0/mnci/.mtn2git_empty | 0 packages/busybox/busybox-1.2.0/mnci/defconfig | 643 --------------- .../busybox/busybox-1.2.0/mount-all-type.patch | 84 -- .../busybox/busybox-1.2.0/nylon/.mtn2git_empty | 0 packages/busybox/busybox-1.2.0/nylon/defconfig | 568 ------------- .../busybox/busybox-1.2.0/openslug/.mtn2git_empty | 0 .../busybox-1.2.0/openslug/udhcpscript.patch | 133 ---- packages/busybox/busybox-1.2.0/readlink.patch | 85 -- packages/busybox/busybox-1.2.0/rmmod.patch | 40 - .../busybox-1.2.0/udhcppidfile-breakage.patch | 57 -- packages/busybox/busybox-1.2.0/udhcppidfile.patch | 274 ------- packages/busybox/busybox-1.2.0/udhcpscript.patch | 17 - .../busybox/busybox-1.2.0/xargs-double-size.patch | 13 - packages/busybox/busybox-1.5.0/.mtn2git_empty | 0 .../busybox/busybox-1.5.0/angstrom/.mtn2git_empty | 0 packages/busybox/busybox-1.5.0/angstrom/defconfig | 647 --------------- packages/busybox/busybox-1.5.0/busybox-mdev.sh | 69 -- packages/busybox/busybox-1.5.0/defconfig | 647 --------------- packages/busybox/busybox-1.5.0/df_rootfs.patch | 44 -- packages/busybox/busybox-1.5.0/dhcp-hostname.patch | 20 - .../busybox-1.5.0/dhcp-increase-retries.patch | 11 - .../busybox-1.5.0/ifupdown-spurious-environ.patch | 16 - packages/busybox/busybox-1.5.0/mnci/.mtn2git_empty | 0 packages/busybox/busybox-1.5.0/mnci/defconfig | 643 --------------- .../busybox/busybox-1.5.0/nylon/.mtn2git_empty | 0 packages/busybox/busybox-1.5.0/nylon/defconfig | 568 ------------- .../busybox/busybox-1.5.0/slugos/.mtn2git_empty | 0 packages/busybox/busybox-1.5.0/slugos/defconfig | 686 ---------------- .../busybox/busybox-1.5.0/slugos/udhcpscript.patch | 133 ---- packages/busybox/busybox-1.5.0/udhcpscript.patch | 17 - .../busybox/busybox-1.5.0/xargs-double-size.patch | 13 - packages/busybox/busybox-1.6.0/.mtn2git_empty | 0 .../busybox/busybox-1.6.0/angstrom/.mtn2git_empty | 0 packages/busybox/busybox-1.6.0/angstrom/defconfig | 647 --------------- packages/busybox/busybox-1.6.0/busybox-mdev.sh | 69 -- packages/busybox/busybox-1.6.0/defconfig | 647 --------------- packages/busybox/busybox-1.6.0/df_rootfs.patch | 44 -- packages/busybox/busybox-1.6.0/dhcp-hostname.patch | 20 - .../busybox-1.6.0/dhcp-increase-retries.patch | 11 - .../busybox-1.6.0/ifupdown-spurious-environ.patch | 16 - packages/busybox/busybox-1.6.0/udhcpscript.patch | 17 - .../busybox/busybox-1.6.0/xargs-double-size.patch | 13 - .../busybox/busybox-1.7.2/angstrom/.mtn2git_empty | 0 packages/busybox/busybox-1.7.2/angstrom/defconfig | 753 ------------------ packages/busybox/busybox-1.7.2/defconfig | 753 ++++++++++++++++++ .../busybox/busybox-1.7.2/files/.mtn2git_empty | 0 packages/busybox/busybox_1.00.bb | 112 --- packages/busybox/busybox_1.01.bb | 111 --- packages/busybox/busybox_1.2.0.bb | 101 --- packages/busybox/busybox_1.5.0.bb | 104 --- packages/busybox/busybox_1.6.0.bb | 104 --- packages/busybox/busybox_1.7.2.bb | 17 +- 136 files changed, 760 insertions(+), 20359 deletions(-) delete mode 100644 packages/busybox/busybox-1.00/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.00/add-getkey-applet.patch delete mode 100644 packages/busybox/busybox-1.00/below.patch delete mode 100644 packages/busybox/busybox-1.00/celf-ash-builtins.patch delete mode 100644 packages/busybox/busybox-1.00/console.patch delete mode 100644 packages/busybox/busybox-1.00/defconfig delete mode 100644 packages/busybox/busybox-1.00/df.patch delete mode 100644 packages/busybox/busybox-1.00/dhcp-hostname.patch delete mode 100644 packages/busybox/busybox-1.00/dhcpretrytime.patch delete mode 100644 packages/busybox/busybox-1.00/fbset.patch delete mode 100644 packages/busybox/busybox-1.00/gzip-spurious-const.patch delete mode 100644 packages/busybox/busybox-1.00/hdparm_M.patch delete mode 100644 packages/busybox/busybox-1.00/ifupdown-spurious-environ.patch delete mode 100644 packages/busybox/busybox-1.00/iproute-flush-cache.patch delete mode 100644 packages/busybox/busybox-1.00/linux-types.patch delete mode 100644 packages/busybox/busybox-1.00/mount-all-type.patch delete mode 100644 packages/busybox/busybox-1.00/nylon/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.00/nylon/defconfig delete mode 100644 packages/busybox/busybox-1.00/openmn/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.00/openmn/defconfig delete mode 100644 packages/busybox/busybox-1.00/readlink.patch delete mode 100644 packages/busybox/busybox-1.00/rmmod.patch delete mode 100644 packages/busybox/busybox-1.00/slugos/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.00/slugos/defconfig delete mode 100644 packages/busybox/busybox-1.00/slugos/udhcpscript.patch delete mode 100644 packages/busybox/busybox-1.00/sparc/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.00/sparc/defconfig delete mode 100644 packages/busybox/busybox-1.00/start-stop-daemon-oknodo-support.patch delete mode 100644 packages/busybox/busybox-1.00/uclibc_posix.patch delete mode 100644 packages/busybox/busybox-1.00/udhcppidfile-breakage.patch delete mode 100644 packages/busybox/busybox-1.00/udhcppidfile.patch delete mode 100644 packages/busybox/busybox-1.00/udhcpscript.patch delete mode 100644 packages/busybox/busybox-1.00/unzip-endian-fixes.patch delete mode 100644 packages/busybox/busybox-1.00/unzip-enhancement-and-fixes.patch delete mode 100644 packages/busybox/busybox-1.00/wrt54/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.00/wrt54/defconfig delete mode 100644 packages/busybox/busybox-1.00/xargs-double-size.patch delete mode 100644 packages/busybox/busybox-1.01/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.01/add-getkey-applet.patch delete mode 100644 packages/busybox/busybox-1.01/angstrom/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.01/angstrom/defconfig delete mode 100644 packages/busybox/busybox-1.01/below.patch delete mode 100644 packages/busybox/busybox-1.01/defconfig delete mode 100644 packages/busybox/busybox-1.01/dhcp-hostname.patch delete mode 100644 packages/busybox/busybox-1.01/dhcpretrytime.patch delete mode 100644 packages/busybox/busybox-1.01/familiar/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.01/familiar/defconfig delete mode 100644 packages/busybox/busybox-1.01/fbset.patch delete mode 100644 packages/busybox/busybox-1.01/hdparm_M.patch delete mode 100644 packages/busybox/busybox-1.01/ifupdown-spurious-environ.patch delete mode 100644 packages/busybox/busybox-1.01/iproute-flush-cache.patch delete mode 100644 packages/busybox/busybox-1.01/mount-all-type.patch delete mode 100644 packages/busybox/busybox-1.01/nylon/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.01/nylon/defconfig delete mode 100644 packages/busybox/busybox-1.01/openmn/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.01/openmn/defconfig delete mode 100644 packages/busybox/busybox-1.01/readlink.patch delete mode 100644 packages/busybox/busybox-1.01/rmmod.patch delete mode 100644 packages/busybox/busybox-1.01/slugos/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.01/slugos/defconfig delete mode 100644 packages/busybox/busybox-1.01/slugos/sysctl.conf delete mode 100644 packages/busybox/busybox-1.01/slugos/udhcpscript.patch delete mode 100644 packages/busybox/busybox-1.01/sparc/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.01/sparc/defconfig delete mode 100644 packages/busybox/busybox-1.01/thumb-bsdlabel.patch delete mode 100644 packages/busybox/busybox-1.01/uclibc_posix.patch delete mode 100644 packages/busybox/busybox-1.01/udhcppidfile-breakage.patch delete mode 100644 packages/busybox/busybox-1.01/udhcppidfile.patch delete mode 100644 packages/busybox/busybox-1.01/udhcpscript.patch delete mode 100644 packages/busybox/busybox-1.01/wrt54/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.01/wrt54/defconfig delete mode 100644 packages/busybox/busybox-1.01/xargs-double-size.patch delete mode 100644 packages/busybox/busybox-1.2.0/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.2.0/add-getkey-applet.patch delete mode 100644 packages/busybox/busybox-1.2.0/angstrom/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.2.0/angstrom/defconfig delete mode 100644 packages/busybox/busybox-1.2.0/below.patch delete mode 100644 packages/busybox/busybox-1.2.0/defconfig delete mode 100644 packages/busybox/busybox-1.2.0/dhcp-hostname.patch delete mode 100644 packages/busybox/busybox-1.2.0/dhcpretrytime.patch delete mode 100644 packages/busybox/busybox-1.2.0/fbset.patch delete mode 100644 packages/busybox/busybox-1.2.0/hdparm_M.patch delete mode 100644 packages/busybox/busybox-1.2.0/ifupdown-spurious-environ.patch delete mode 100644 packages/busybox/busybox-1.2.0/iproute-flush-cache.patch delete mode 100644 packages/busybox/busybox-1.2.0/mnci/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.2.0/mnci/defconfig delete mode 100644 packages/busybox/busybox-1.2.0/mount-all-type.patch delete mode 100644 packages/busybox/busybox-1.2.0/nylon/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.2.0/nylon/defconfig delete mode 100644 packages/busybox/busybox-1.2.0/openslug/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.2.0/openslug/udhcpscript.patch delete mode 100644 packages/busybox/busybox-1.2.0/readlink.patch delete mode 100644 packages/busybox/busybox-1.2.0/rmmod.patch delete mode 100644 packages/busybox/busybox-1.2.0/udhcppidfile-breakage.patch delete mode 100644 packages/busybox/busybox-1.2.0/udhcppidfile.patch delete mode 100644 packages/busybox/busybox-1.2.0/udhcpscript.patch delete mode 100644 packages/busybox/busybox-1.2.0/xargs-double-size.patch delete mode 100644 packages/busybox/busybox-1.5.0/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.5.0/angstrom/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.5.0/angstrom/defconfig delete mode 100755 packages/busybox/busybox-1.5.0/busybox-mdev.sh delete mode 100644 packages/busybox/busybox-1.5.0/defconfig delete mode 100644 packages/busybox/busybox-1.5.0/df_rootfs.patch delete mode 100644 packages/busybox/busybox-1.5.0/dhcp-hostname.patch delete mode 100644 packages/busybox/busybox-1.5.0/dhcp-increase-retries.patch delete mode 100644 packages/busybox/busybox-1.5.0/ifupdown-spurious-environ.patch delete mode 100644 packages/busybox/busybox-1.5.0/mnci/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.5.0/mnci/defconfig delete mode 100644 packages/busybox/busybox-1.5.0/nylon/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.5.0/nylon/defconfig delete mode 100644 packages/busybox/busybox-1.5.0/slugos/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.5.0/slugos/defconfig delete mode 100644 packages/busybox/busybox-1.5.0/slugos/udhcpscript.patch delete mode 100644 packages/busybox/busybox-1.5.0/udhcpscript.patch delete mode 100644 packages/busybox/busybox-1.5.0/xargs-double-size.patch delete mode 100644 packages/busybox/busybox-1.6.0/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.6.0/angstrom/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.6.0/angstrom/defconfig delete mode 100755 packages/busybox/busybox-1.6.0/busybox-mdev.sh delete mode 100644 packages/busybox/busybox-1.6.0/defconfig delete mode 100644 packages/busybox/busybox-1.6.0/df_rootfs.patch delete mode 100644 packages/busybox/busybox-1.6.0/dhcp-hostname.patch delete mode 100644 packages/busybox/busybox-1.6.0/dhcp-increase-retries.patch delete mode 100644 packages/busybox/busybox-1.6.0/ifupdown-spurious-environ.patch delete mode 100644 packages/busybox/busybox-1.6.0/udhcpscript.patch delete mode 100644 packages/busybox/busybox-1.6.0/xargs-double-size.patch delete mode 100644 packages/busybox/busybox-1.7.2/angstrom/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.7.2/angstrom/defconfig create mode 100644 packages/busybox/busybox-1.7.2/defconfig create mode 100644 packages/busybox/busybox-1.7.2/files/.mtn2git_empty delete mode 100644 packages/busybox/busybox_1.00.bb delete mode 100644 packages/busybox/busybox_1.01.bb delete mode 100644 packages/busybox/busybox_1.2.0.bb delete mode 100644 packages/busybox/busybox_1.5.0.bb delete mode 100644 packages/busybox/busybox_1.6.0.bb diff --git a/packages/busybox/busybox-1.00/.mtn2git_empty b/packages/busybox/busybox-1.00/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.00/add-getkey-applet.patch b/packages/busybox/busybox-1.00/add-getkey-applet.patch deleted file mode 100644 index 6ce0df21bd..0000000000 --- a/packages/busybox/busybox-1.00/add-getkey-applet.patch +++ /dev/null @@ -1,157 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- /dev/null -+++ busybox-1.00/console-tools/getkey.c -@@ -0,0 +1,94 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * getkey.c - Michael 'Mickey' Lauer -+ * -+ * Version 0.1 -+ * -+ * A simple keygrapper. Displays a configurable message and waits a dedicated number -+ * of seconds for a keypress. Sets the exit code accordingly (SUCCESS on keypress). -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "busybox.h" -+ -+extern int getkey_main(int argc, char **argv) -+{ -+ int status = EXIT_FAILURE; -+ -+ if ( argc < 2 ) -+ { -+ bb_show_usage(); -+ } -+ -+ /* -+ * If no terminal is attached it is quite useless -+ * to treat it like one. -+ */ -+ if( !isatty(STDIN_FILENO) ) -+ { -+ goto error_hard; -+ } -+ -+ //bb_printf( "DEBUG: time = '%s'\n", argv[1] ); -+ //bb_printf( "DEBUG: mesg = '%s'\n", argv[2] ); -+ -+ struct termios orig; -+ struct termios attr; -+ -+ if ( tcgetattr(STDIN_FILENO, &orig) == -1 ) -+ { -+ goto error_hard; -+ } -+ -+ attr = orig; -+ attr.c_cc[VMIN] = 0; -+ attr.c_cc[VTIME] = 0; -+ attr.c_iflag |= INLCR; -+ attr.c_oflag |= OPOST|ONLCR; -+ attr.c_cflag &= ~PARENB; -+ attr.c_lflag &= ~(ICANON/*|ECHO*/); -+ if ( tcsetattr(STDIN_FILENO,TCSANOW,&attr) == -1 ) -+ { -+ goto error_hard; -+ } -+ -+ fd_set rfds; -+ struct timeval tv; -+ int retval; -+ -+ FD_ZERO(&rfds); -+ FD_SET(0, &rfds); -+ -+ tv.tv_sec = atoi( argv[1] ); -+ tv.tv_usec = 0; -+ -+ if ( argc == 3 ) -+ { -+ bb_printf( argv[2], tv.tv_sec ); -+ bb_printf( "\n" ); -+ fflush(stdout); -+ } -+ retval = select(1, &rfds, NULL, NULL, &tv); -+ if (retval > 0) -+ { -+ status = EXIT_SUCCESS; -+ } -+ -+ if (tcsetattr(STDIN_FILENO,TCSANOW,&orig) == -1 ) -+ { -+ goto error_hard; -+ } -+ -+ return status; -+ -+error_hard : -+ return EXIT_FAILURE; -+}; -+ ---- busybox-1.00/console-tools/Makefile.in~add-getkey-applet.patch -+++ busybox-1.00/console-tools/Makefile.in -@@ -28,6 +28,7 @@ - CONSOLETOOLS_DIR-$(CONFIG_CLEAR) += clear.o - CONSOLETOOLS_DIR-$(CONFIG_DEALLOCVT) += deallocvt.o - CONSOLETOOLS_DIR-$(CONFIG_DUMPKMAP) += dumpkmap.o -+CONSOLETOOLS_DIR-$(CONFIG_GETKEY) += getkey.o - CONSOLETOOLS_DIR-$(CONFIG_LOADFONT) += loadfont.o - CONSOLETOOLS_DIR-$(CONFIG_LOADKMAP) += loadkmap.o - CONSOLETOOLS_DIR-$(CONFIG_OPENVT) += openvt.o ---- busybox-1.00/console-tools/Config.in~add-getkey-applet.patch -+++ busybox-1.00/console-tools/Config.in -@@ -31,6 +31,14 @@ - This program dumps the kernel's keyboard translation table to - stdout, in binary format. You can then use loadkmap to load it. - -+config CONFIG_GETKEY -+ bool "getkey" -+ default n -+ help -+ This program displays a configurable message and waits -+ a dedicated number of seconds for a keypress. It sets -+ the exit code accordingly, i.e. SUCCESS if there was a keypress. -+ - config CONFIG_LOADFONT - bool "loadfont" - default n ---- busybox-1.00/include/applets.h~add-getkey-applet.patch -+++ busybox-1.00/include/applets.h -@@ -223,6 +223,9 @@ - #ifdef CONFIG_FTPPUT - APPLET(ftpput, ftpgetput_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER) - #endif -+#ifdef CONFIG_GETKEY -+ APPLET(getkey, getkey_main, _BB_DIR_SBIN, _BB_SUID_NEVER) -+#endif - #ifdef CONFIG_GETOPT - APPLET(getopt, getopt_main, _BB_DIR_BIN, _BB_SUID_NEVER) - #endif ---- busybox-1.00/include/usage.h~add-getkey-applet.patch -+++ busybox-1.00/include/usage.h -@@ -734,6 +734,13 @@ - "\t-p, --password Password to be used\n" \ - "\t-P, --port Port number to be used" - -+#define getkey_trivial_usage \ -+ "time [message]" -+#define getkey_full_usage \ -+ "Display a message and wait for a keypress." -+#define getkey_example_usage \ -+ "$ getkey 5 'Press a key within %d seconds to interrupt autoboot.'" -+ - #define getopt_trivial_usage \ - "[OPTIONS]..." - #define getopt_full_usage \ diff --git a/packages/busybox/busybox-1.00/below.patch b/packages/busybox/busybox-1.00/below.patch deleted file mode 100644 index ec97b29962..0000000000 --- a/packages/busybox/busybox-1.00/below.patch +++ /dev/null @@ -1,49 +0,0 @@ -Index: modutils/modprobe.c -=================================================================== -RCS file: /var/cvs/busybox/modutils/modprobe.c,v -retrieving revision 1.41 -diff -u -r1.41 modprobe.c ---- busybox/modutils/modprobe.c 24 Sep 2004 09:18:55 -0000 1.41 -+++ busybox/modutils/modprobe.c 29 Dec 2004 11:56:07 -0000 -@@ -357,6 +357,41 @@ - } - } - } -+ else if ((strncmp (buffer, "below", 5) == 0) && isspace (buffer[5])) { -+ char *mod, *deps; -+ if (parse_tag_value (buffer + 6, &mod, &deps)) { -+ struct dep_t *dt; -+ -+ for (dt = first; dt; dt = dt->m_next) { -+ if (strcmp (dt->m_name, mod) == 0) -+ break; -+ } -+ if (dt) { -+ char *pp; -+ char *name; -+ -+ pp = name = deps; -+ -+ for (;;) { -+ while (*pp != 0 && !isspace (*pp)) -+ pp++; -+ if (isspace (*pp)) -+ *(pp++) = 0; -+ -+ dt->m_depcnt++; -+ dt->m_deparr = (char **) xrealloc (dt->m_deparr, -+ sizeof (char *) * dt->m_depcnt); -+ dt->m_deparr[dt->m_depcnt - 1] = bb_xstrdup (name); -+ -+ while (isspace (*pp)) -+ pp++; -+ name = pp; -+ if (*pp == 0) -+ break; -+ } -+ } -+ } -+ } - } - } - close ( fd ); diff --git a/packages/busybox/busybox-1.00/celf-ash-builtins.patch b/packages/busybox/busybox-1.00/celf-ash-builtins.patch deleted file mode 100644 index ec1925e6ad..0000000000 --- a/packages/busybox/busybox-1.00/celf-ash-builtins.patch +++ /dev/null @@ -1,431 +0,0 @@ -diff -Naur busybox-1.00-pre3.orig/coreutils/echo.c busybox-1.00-pre3/coreutils/echo.c ---- busybox-1.00-pre3.orig/coreutils/echo.c 2003-03-19 12:11:33.000000000 +0300 -+++ busybox-1.00-pre3/coreutils/echo.c 2003-11-07 17:47:35.000000000 +0300 -@@ -122,7 +122,11 @@ - #endif - - DONE: -- bb_fflush_stdout_and_exit(EXIT_SUCCESS); -+#ifdef CONFIG_FEATURE_BUILTIN_ECHO -+ return EXIT_SUCCESS; -+#else -+ bb_fflush_stdout_and_exit(EXIT_SUCCESS); -+#endif - } - - /*- -diff -Naur busybox-1.00-pre3.orig/coreutils/test.c busybox-1.00-pre3/coreutils/test.c ---- busybox-1.00-pre3.orig/coreutils/test.c 2003-07-15 01:20:45.000000000 +0400 -+++ busybox-1.00-pre3/coreutils/test.c 2003-11-07 17:47:35.000000000 +0300 -@@ -188,19 +188,19 @@ - /* Implement special cases from POSIX.2, section 4.62.4 */ - switch (argc) { - case 1: -- exit(1); -+ return (1); - case 2: -- exit(*argv[1] == '\0'); -+ return (*argv[1] == '\0'); - case 3: - if (argv[1][0] == '!' && argv[1][1] == '\0') { -- exit(!(*argv[2] == '\0')); -+ return (!(*argv[2] == '\0')); - } - break; - case 4: - if (argv[1][0] != '!' || argv[1][1] != '\0') { - if (t_lex(argv[2]), t_wp_op && t_wp_op->op_type == BINOP) { - t_wp = &argv[1]; -- exit(binop() == 0); -+ return (binop() == 0); - } - } - break; -@@ -208,7 +208,7 @@ - if (argv[1][0] == '!' && argv[1][1] == '\0') { - if (t_lex(argv[3]), t_wp_op && t_wp_op->op_type == BINOP) { - t_wp = &argv[2]; -- exit(!(binop() == 0)); -+ return (!(binop() == 0)); - } - } - break; -diff -Naur busybox-1.00-pre3.orig/include/usage.h busybox-1.00-pre3/include/usage.h ---- busybox-1.00-pre3.orig/include/usage.h 2003-08-29 18:18:26.000000000 +0400 -+++ busybox-1.00-pre3/include/usage.h 2003-11-07 17:47:59.000000000 +0300 -@@ -1760,6 +1760,13 @@ - "quit\n" \ - "221 foobar closing connection\n" - -+#define nice_trivial_usage \ -+ "[OPTION] [COMMAND [ARG]...]" -+#define nice_full_usage \ -+ "Run COMMAND with an adjusted scheduling priority." -+#define nice_example_usage \ -+ "$ nice -n 0 /tmp/foo \n" -+ - #define netstat_trivial_usage \ - "[-laenrtuwx]" - #define netstat_full_usage \ -diff -Naur busybox-1.00-pre3.orig/shell/Config.in busybox-1.00-pre3/shell/Config.in ---- busybox-1.00-pre3.orig/shell/Config.in 2003-09-12 08:51:25.000000000 +0400 -+++ busybox-1.00-pre3/shell/Config.in 2003-11-07 17:47:59.000000000 +0300 -@@ -53,6 +53,34 @@ - help - Enable job control in the ash shell. - -+config CONFIG_ASH_PIPE_OPTIMIZATION -+ bool " Enable ash pipe optimization " -+ default y -+ depends on CONFIG_ASH -+ help -+ Eliminate cat at the beginning of the pipe. -+ -+config CONFIG_FEATURE_BUILTIN_TEST -+ bool " Builtin test command" -+ default y -+ depends on CONFIG_ASH -+ help -+ Builtin test command" -+ -+config CONFIG_FEATURE_BUILTIN_ECHO -+ bool " Builtin echo command" -+ default y -+ depends on CONFIG_ASH -+ help -+ Builtin echo command" -+ -+config CONFIG_FEATURE_BUILTIN_PIDOF -+ bool " Builtin pidof command" -+ default y -+ depends on CONFIG_ASH && CONFIG_PIDOF -+ help -+ Builtin pidof command" -+ - config CONFIG_ASH_ALIAS - bool " Enable alias support" - default y -diff -Naur busybox-1.00-pre3.orig/shell/ash.c busybox-1.00-pre3/shell/ash.c ---- busybox-1.00-pre3.orig/shell/ash.c 2003-09-02 06:36:17.000000000 +0400 -+++ busybox-1.00-pre3/shell/ash.c 2003-11-07 17:47:59.000000000 +0300 -@@ -1259,6 +1259,16 @@ - #ifdef JOBS - static int killcmd(int, char **); - #endif -+#ifdef CONFIG_FEATURE_BUILTIN_TEST -+static int testcmd(int, char **); -+#endif -+#ifdef CONFIG_FEATURE_BUILTIN_ECHO -+static int echocmd(int, char**); -+#endif -+#ifdef CONFIG_FEATURE_BUILTIN_PIDOF -+static int pidofcmd(int, char **); -+#endif -+ - - /* $NetBSD: mail.h,v 1.9 2002/11/24 22:35:40 christos Exp $ */ - -@@ -1281,39 +1291,6 @@ - /* unsigned flags; */ - }; - --#ifdef CONFIG_ASH_CMDCMD --# ifdef JOBS --# ifdef CONFIG_ASH_ALIAS --# define COMMANDCMD (builtincmd + 7) --# define EXECCMD (builtincmd + 10) --# else --# define COMMANDCMD (builtincmd + 6) --# define EXECCMD (builtincmd + 9) --# endif --# else /* ! JOBS */ --# ifdef CONFIG_ASH_ALIAS --# define COMMANDCMD (builtincmd + 6) --# define EXECCMD (builtincmd + 9) --# else --# define COMMANDCMD (builtincmd + 5) --# define EXECCMD (builtincmd + 8) --# endif --# endif /* JOBS */ --#else /* ! CONFIG_ASH_CMDCMD */ --# ifdef JOBS --# ifdef CONFIG_ASH_ALIAS --# define EXECCMD (builtincmd + 9) --# else --# define EXECCMD (builtincmd + 8) --# endif --# else /* ! JOBS */ --# ifdef CONFIG_ASH_ALIAS --# define EXECCMD (builtincmd + 8) --# else --# define EXECCMD (builtincmd + 7) --# endif --# endif /* JOBS */ --#endif /* CONFIG_ASH_CMDCMD */ - - #define BUILTIN_NOSPEC "0" - #define BUILTIN_SPECIAL "1" -@@ -1328,65 +1305,21 @@ - #define IS_BUILTIN_REGULAR(builtincmd) ((builtincmd)->name[0] & 2) - - static const struct builtincmd builtincmd[] = { -- { BUILTIN_SPEC_REG ".", dotcmd }, -- { BUILTIN_SPEC_REG ":", truecmd }, --#ifdef CONFIG_ASH_ALIAS -- { BUILTIN_REG_ASSG "alias", aliascmd }, --#endif --#ifdef JOBS -- { BUILTIN_REGULAR "bg", bgcmd }, --#endif -- { BUILTIN_SPEC_REG "break", breakcmd }, -- { BUILTIN_REGULAR "cd", cdcmd }, -- { BUILTIN_NOSPEC "chdir", cdcmd }, --#ifdef CONFIG_ASH_CMDCMD -- { BUILTIN_REGULAR "command", commandcmd }, --#endif -- { BUILTIN_SPEC_REG "continue", breakcmd }, -- { BUILTIN_SPEC_REG "eval", evalcmd }, -- { BUILTIN_SPEC_REG "exec", execcmd }, -- { BUILTIN_SPEC_REG "exit", exitcmd }, -- { BUILTIN_SPEC_REG_ASSG "export", exportcmd }, -- { BUILTIN_REGULAR "false", falsecmd }, --#ifdef JOBS -- { BUILTIN_REGULAR "fg", fgcmd }, --#endif --#ifdef CONFIG_ASH_GETOPTS -- { BUILTIN_REGULAR "getopts", getoptscmd }, --#endif -- { BUILTIN_NOSPEC "hash", hashcmd }, --#ifndef CONFIG_FEATURE_SH_EXTRA_QUIET -- { BUILTIN_NOSPEC "help", helpcmd }, --#endif --#ifdef JOBS -- { BUILTIN_REGULAR "jobs", jobscmd }, -- { BUILTIN_REGULAR "kill", killcmd }, --#endif --#ifdef CONFIG_ASH_MATH_SUPPORT -- { BUILTIN_NOSPEC "let", letcmd }, --#endif -- { BUILTIN_ASSIGN "local", localcmd }, -- { BUILTIN_NOSPEC "pwd", pwdcmd }, -- { BUILTIN_REGULAR "read", readcmd }, -- { BUILTIN_SPEC_REG_ASSG "readonly", exportcmd }, -- { BUILTIN_SPEC_REG "return", returncmd }, -- { BUILTIN_SPEC_REG "set", setcmd }, -- { BUILTIN_SPEC_REG "shift", shiftcmd }, -- { BUILTIN_SPEC_REG "times", timescmd }, -- { BUILTIN_SPEC_REG "trap", trapcmd }, -- { BUILTIN_REGULAR "true", truecmd }, -- { BUILTIN_NOSPEC "type", typecmd }, -- { BUILTIN_NOSPEC "ulimit", ulimitcmd }, -- { BUILTIN_REGULAR "umask", umaskcmd }, --#ifdef CONFIG_ASH_ALIAS -- { BUILTIN_REGULAR "unalias", unaliascmd }, --#endif -- { BUILTIN_SPEC_REG "unset", unsetcmd }, -- { BUILTIN_REGULAR "wait", waitcmd }, -+#define BUILTIN_COMMAND_SPEC(code, str, func) {str, func}, -+#include "ash.d" -+{} - }; - --#define NUMBUILTINS (sizeof (builtincmd) / sizeof (struct builtincmd) ) -+enum { -+#define BUILTIN_COMMAND_SPEC(code, str, func) code, -+#include "ash.d" -+NUMBUILTINS -+}; - -+#ifdef CONFIG_ASH_CMDCMD -+#define COMMANDCMD (builtincmd + COMMAND_CMD) -+#endif -+#define EXECCMD (builtincmd + EXEC_CMD) - - - struct cmdentry { -@@ -1678,7 +1611,8 @@ - - /* from input.c: */ - { -- basepf.nextc = basepf.buf = basebuf; -+ struct parsefile* pf = &basepf; -+ pf->nextc = pf->buf = basebuf; - } - - /* from trap.c: */ -@@ -2678,6 +2612,14 @@ - * Called to reset things after an exception. - */ - -+#ifdef CONFIG_FEATURE_BUILTIN_ECHO -+static int -+echocmd(int argc, char **argv) -+{ -+ return echo_main(argc, argv); -+} -+#endif -+ - /* - * The eval commmand. - */ -@@ -3028,6 +2970,23 @@ - } - - -+static int -+cat_file(union node *n) -+{ -+#ifdef CONFIG_ASH_PIPE_OPTIMIZATION -+ if (n->type == NCMD -+ && n->ncmd.args != NULL -+ && strcmp(n->ncmd.args->narg.text, "cat") == 0 -+ && n->ncmd.args->narg.next != NULL -+ && *n->ncmd.args->narg.next->narg.text != '-' -+ && n->ncmd.args->narg.next->narg.next == NULL) -+ { -+ return open(n->ncmd.args->narg.next->narg.text, O_RDONLY); -+ } -+#endif -+ return -1; -+} -+ - - /* - * Evaluate a pipeline. All the processes in the pipeline are children -@@ -3057,7 +3016,11 @@ - prehash(lp->n); - pip[1] = -1; - if (lp->next) { -- if (pipe(pip) < 0) { -+ if (prevfd < 0 && (prevfd = cat_file(lp->n)) >= 0) { -+ // it is cat at the beginning of the pipe -+ continue; -+ } -+ if (pipe(pip) < 0) { - close(prevfd); - error("Pipe call failed"); - } -@@ -3104,11 +3067,11 @@ - { - int saveherefd; - -- result->fd = -1; -+ result->fd = cat_file(n); - result->buf = NULL; - result->nleft = 0; - result->jp = NULL; -- if (n == NULL) { -+ if (n == NULL || result->fd >= 0) { - goto out; - } - -@@ -3562,6 +3525,24 @@ - } - } - -+#ifdef CONFIG_FEATURE_BUILTIN_TEST -+static int -+testcmd(int argc, char** argv) -+{ -+ bb_applet_name = argv[0]; -+ return test_main(argc, argv); -+} -+#endif -+ -+#ifdef CONFIG_FEATURE_BUILTIN_PIDOF -+static int -+pidofcmd(int argc, char** argv) -+{ -+ bb_applet_name = argv[0]; -+ return pidof_main(argc, argv); -+} -+#endif -+ - - static int - falsecmd(int argc, char **argv) -@@ -4943,7 +4924,9 @@ - ckfree(in.buf); - if (in.fd >= 0) { - close(in.fd); -- back_exitstatus = waitforjob(in.jp); -+ if (in.jp != NULL) { -+ back_exitstatus = waitforjob(in.jp); -+ } - } - INTON; - -diff -Naur busybox-1.00-pre3.orig/shell/ash.d busybox-1.00-pre3/shell/ash.d ---- busybox-1.00-pre3.orig/shell/ash.d 1970-01-01 03:00:00.000000000 +0300 -+++ busybox-1.00-pre3/shell/ash.d 2003-11-07 17:47:59.000000000 +0300 -@@ -0,0 +1,70 @@ -+BUILTIN_COMMAND_SPEC(DOT_CMD, BUILTIN_SPEC_REG ".", dotcmd) -+BUILTIN_COMMAND_SPEC(COMMA_CMD, BUILTIN_SPEC_REG ":", truecmd) -+#ifdef CONFIG_FEATURE_BUILTIN_TEST -+BUILTIN_COMMAND_SPEC(RPAR_CMD, BUILTIN_REGULAR "[", testcmd) -+#endif -+#ifdef CONFIG_ASH_ALIAS -+BUILTIN_COMMAND_SPEC(ALIAS_CMD, BUILTIN_REG_ASSG "alias", aliascmd) -+#endif -+#ifdef JOBS -+BUILTIN_COMMAND_SPEC(BG_CMD, BUILTIN_REGULAR "bg", bgcmd) -+#endif -+BUILTIN_COMMAND_SPEC(BREAK_CMD, BUILTIN_SPEC_REG "break", breakcmd) -+BUILTIN_COMMAND_SPEC(CD_CMD, BUILTIN_REGULAR "cd", cdcmd) -+BUILTIN_COMMAND_SPEC(CHDIR_CMD, BUILTIN_NOSPEC "chdir", cdcmd) -+#ifdef CONFIG_ASH__CMD_CMD -+BUILTIN_COMMAND_SPEC(COMMAND_CMD, BUILTIN_REGULAR "command", commandcmd) -+#endif -+BUILTIN_COMMAND_SPEC(CONTINUE_CMD,BUILTIN_SPEC_REG "continue", breakcmd) -+#ifdef CONFIG_FEATURE_BUILTIN_ECHO -+BUILTIN_COMMAND_SPEC(ECHO_CMD, BUILTIN_REGULAR "echo", echocmd) -+#endif -+BUILTIN_COMMAND_SPEC(EVAL_CMD, BUILTIN_SPEC_REG "eval", evalcmd) -+BUILTIN_COMMAND_SPEC(EXEC_CMD, BUILTIN_SPEC_REG "exec", execcmd) -+BUILTIN_COMMAND_SPEC(EXIT_CMD, BUILTIN_SPEC_REG "exit", exitcmd) -+BUILTIN_COMMAND_SPEC(EXPORT_CMD, BUILTIN_SPEC_REG_ASSG "export", exportcmd) -+BUILTIN_COMMAND_SPEC(FALSE_CMD, BUILTIN_REGULAR "false", falsecmd) -+#ifdef JOBS -+BUILTIN_COMMAND_SPEC(FG_CMD, BUILTIN_REGULAR "fg", fgcmd) -+#endif -+#ifdef CONFIG_ASH_GETOPTS -+BUILTIN_COMMAND_SPEC(GETOPTS_CMD, BUILTIN_REGULAR "getopts", getoptscmd) -+#endif -+BUILTIN_COMMAND_SPEC(HASH_CMD, BUILTIN_NOSPEC "hash", hashcmd) -+#ifndef CONFIG_FEATURE_SH_EXTRA_QUIET -+BUILTIN_COMMAND_SPEC(HELP_CMD, BUILTIN_NOSPEC "help", helpcmd) -+#endif -+#ifdef JOBS -+BUILTIN_COMMAND_SPEC(JOBS_CMD, BUILTIN_REGULAR "jobs", jobscmd) -+BUILTIN_COMMAND_SPEC(KILL_CMD, BUILTIN_REGULAR "kill", killcmd) -+#endif -+#ifdef CONFIG_ASH_MATH_SUPPORT -+BUILTIN_COMMAND_SPEC(LET_CMD, BUILTIN_NOSPEC "let", letcmd) -+#endif -+BUILTIN_COMMAND_SPEC(LOCAL_CMD, BUILTIN_ASSIGN "local", localcmd) -+#ifdef CONFIG_FEATURE_BUILTIN_PIDOF -+BUILTIN_COMMAND_SPEC(PIDOF_CMD, BUILTIN_REGULAR "pidof", pidofcmd) -+#endif -+BUILTIN_COMMAND_SPEC(PWD_CMD, BUILTIN_NOSPEC "pwd", pwdcmd) -+BUILTIN_COMMAND_SPEC(READ_CMD, BUILTIN_REGULAR "read", readcmd) -+BUILTIN_COMMAND_SPEC(READONLY_CMD,BUILTIN_SPEC_REG_ASSG "readonly", exportcmd) -+BUILTIN_COMMAND_SPEC(RETURN_CMD, BUILTIN_SPEC_REG "return", returncmd) -+BUILTIN_COMMAND_SPEC(SET_CMD, BUILTIN_SPEC_REG "set", setcmd) -+BUILTIN_COMMAND_SPEC(SHIFT_CMD, BUILTIN_SPEC_REG "shift", shiftcmd) -+#ifdef CONFIG_FEATURE_BUILTIN_TEST -+BUILTIN_COMMAND_SPEC(TEST_CMD, BUILTIN_REGULAR "test", testcmd) -+#endif -+BUILTIN_COMMAND_SPEC(TIMES_CMD, BUILTIN_SPEC_REG "times", timescmd) -+BUILTIN_COMMAND_SPEC(TRAP_CMD, BUILTIN_SPEC_REG "trap", trapcmd) -+BUILTIN_COMMAND_SPEC(TRUE_CMD, BUILTIN_REGULAR "true", truecmd) -+BUILTIN_COMMAND_SPEC(TYPE_CMD, BUILTIN_NOSPEC "type", typecmd) -+BUILTIN_COMMAND_SPEC(ULIMIT_CMD, BUILTIN_NOSPEC "ulimit", ulimitcmd) -+BUILTIN_COMMAND_SPEC(UMASK_CMD, BUILTIN_REGULAR "umask", umaskcmd) -+#ifdef CONFIG_ASH_ALIAS -+BUILTIN_COMMAND_SPEC(UNALIAS_CMD, BUILTIN_REGULAR "unalias", unaliascmd) -+#endif -+BUILTIN_COMMAND_SPEC(UNSET_CMD, BUILTIN_SPEC_REG "unset", unsetcmd) -+BUILTIN_COMMAND_SPEC(WAIT_CMD, BUILTIN_REGULAR "wait", waitcmd) -+ -+ -+#undef BUILTIN_COMMAND_SPEC diff --git a/packages/busybox/busybox-1.00/console.patch b/packages/busybox/busybox-1.00/console.patch deleted file mode 100644 index d57bdfbe89..0000000000 --- a/packages/busybox/busybox-1.00/console.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- busybox-1.00-pre2/libbb/get_console.c~console -+++ busybox-1.00-pre2/libbb/get_console.c -@@ -86,10 +86,6 @@ - { - int fd; - -- if (-1 == (fd = open_a_console("/dev/console"))) -- return -1; -- else -- return fd; - fd = open_a_console(CURRENT_TTY); - if (fd >= 0) - return fd; diff --git a/packages/busybox/busybox-1.00/defconfig b/packages/busybox/busybox-1.00/defconfig deleted file mode 100644 index 8b8212c54a..0000000000 --- a/packages/busybox/busybox-1.00/defconfig +++ /dev/null @@ -1,476 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_LFS=y -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -# CONFIG_FEATURE_LS_RECURSIVE is not set -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_TIME is not set -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -CONFIG_FEATURE_2_4_MODULES=y -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS=y -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -CONFIG_FEATURE_INSMOD_LOAD_MAP=y -CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL=y -CONFIG_LSMOD=y -CONFIG_MODPROBE=y -CONFIG_RMMOD=y -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -CONFIG_UDHCPD=y -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_PIDOF is not set -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -CONFIG_LOSETUP=y -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -CONFIG_SWAPONOFF=y -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.00/df.patch b/packages/busybox/busybox-1.00/df.patch deleted file mode 100644 index 49888293fd..0000000000 --- a/packages/busybox/busybox-1.00/df.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- busybox-1.00/coreutils/df.c.orig 2006-07-14 09:50:47.914912750 -0400 -+++ busybox-1.00/coreutils/df.c 2006-07-14 09:52:32.613456000 -0400 -@@ -60,6 +60,7 @@ - struct statfs s; - static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */ - const char *disp_units_hdr = hdr_1k; -+ int root_done = 0; - - #ifdef CONFIG_FEATURE_HUMAN_READABLE - bb_opt_complementaly = "h-km:k-hm:m-hk"; -@@ -125,14 +126,14 @@ - ) / (blocks_used + s.f_bavail); - } - -- if (strcmp(device, "rootfs") == 0) { -- continue; -- } else if (strcmp(device, "/dev/root") == 0) { -+ if (strcmp(device, "/dev/root") == 0 || strcmp(device, "rootfs") == 0) { -+ if (root_done) continue; - /* Adjusts device to be the real root device, - * or leaves device alone if it can't find it */ - if ((device = find_real_root_device_name()) == NULL) { - goto SET_ERROR; - } -+ root_done = 1; - } - - #ifdef CONFIG_FEATURE_HUMAN_READABLE diff --git a/packages/busybox/busybox-1.00/dhcp-hostname.patch b/packages/busybox/busybox-1.00/dhcp-hostname.patch deleted file mode 100644 index 5eb77a8e10..0000000000 --- a/packages/busybox/busybox-1.00/dhcp-hostname.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- busybox/networking/udhcp/dhcpc.c 2005-05-25 11:49:24.000000000 +0100 -+++ busybox/networking/udhcp/dhcpc.c 2005-05-25 12:54:30.000000000 +0100 -@@ -193,6 +193,7 @@ - long now; - int max_fd; - int sig; -+ char hostbuf[256]; /* SUSv2: hostnames are <= 255 bytes */ - - static const struct option arg_options[] = { - {"clientid", required_argument, 0, 'c'}, -@@ -211,6 +212,14 @@ - {0, 0, 0, 0} - }; - -+ if (gethostname (hostbuf, sizeof (hostbuf)) == 0) { -+ len = strlen (hostbuf); -+ client_config.hostname = xmalloc (len + 2); -+ client_config.hostname[OPT_CODE] = DHCP_HOST_NAME; -+ client_config.hostname[OPT_LEN] = len; -+ strncpy(client_config.hostname + 2, hostbuf, len); -+ } -+ - /* get options */ - while (1) { - int option_index = 0; diff --git a/packages/busybox/busybox-1.00/dhcpretrytime.patch b/packages/busybox/busybox-1.00/dhcpretrytime.patch deleted file mode 100644 index c55a38552f..0000000000 --- a/packages/busybox/busybox-1.00/dhcpretrytime.patch +++ /dev/null @@ -1,81 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- busybox-1.00-rc3/networking/udhcp/dhcpc.c~dhcpretrytime -+++ busybox-1.00-rc3/networking/udhcp/dhcpc.c -@@ -48,6 +48,7 @@ - static unsigned long requested_ip; /* = 0 */ - static unsigned long server_addr; - static unsigned long timeout; -+static unsigned long retrytime = 60; - static int packet_num; /* = 0 */ - static int fd = -1; - -@@ -90,6 +91,7 @@ - " -r, --request=IP IP address to request (default: none)\n" - " -s, --script=file Run file at dhcp events (default:\n" - " " DEFAULT_SCRIPT ")\n" -+" -t, --retrytime time to retry DHCP request (default 60s)\n") - " -v, --version Display version\n" - ); - exit(0); -@@ -204,6 +206,7 @@ - {"quit", no_argument, 0, 'q'}, - {"request", required_argument, 0, 'r'}, - {"script", required_argument, 0, 's'}, -+ {"retrytime", required_argument, 0, 't'}, - {"version", no_argument, 0, 'v'}, - {0, 0, 0, 0} - }; -@@ -211,7 +214,7 @@ - /* get options */ - while (1) { - int option_index = 0; -- c = getopt_long(argc, argv, "c:fbH:h:i:np:qr:s:v", arg_options, &option_index); -+ c = getopt_long(argc, argv, "c:fbH:h:i:np:qr:s:t:v", arg_options, &option_index); - if (c == -1) break; - - switch (c) { -@@ -257,6 +260,9 @@ - case 's': - client_config.script = optarg; - break; -+ case 't': -+ retrytime = atol(optarg); -+ break; - case 'v': - printf("udhcpcd, version %s\n\n", VERSION); - return 0; -@@ -335,7 +341,7 @@ - } - /* wait to try again */ - packet_num = 0; -- timeout = now + 60; -+ timeout = now + retrytime; - } - break; - case RENEW_REQUESTED: ---- busybox-1.00-rc3/networking/ifupdown.c~dhcpretrytime -+++ busybox-1.00-rc3/networking/ifupdown.c -@@ -538,7 +538,7 @@ - static int dhcp_up(struct interface_defn_t *ifd, execfn *exec) - { - if (execable("/sbin/udhcpc")) { -- return( execute("udhcpc -n -p /var/run/udhcpc.%iface%.pid -i " -+ return( execute("udhcpc -b -p /var/run/udhcpc.%iface%.pid -i " - "%iface% [[-H %hostname%]] [[-c %clientid%]]", ifd, exec)); - } else if (execable("/sbin/pump")) { - return( execute("pump -i %iface% [[-h %hostname%]] [[-l %leasehours%]]", ifd, exec)); -@@ -558,8 +558,8 @@ - /* SIGUSR2 forces udhcpc to release the current lease and go inactive, - * and SIGTERM causes udhcpc to exit. Signals are queued and processed - * sequentially so we don't need to sleep */ -- result = execute("kill -USR2 `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null", ifd, exec); -- result += execute("kill -TERM `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null", ifd, exec); -+ result = execute("kill -USR2 `cat /var/run/udhcpc.%iface%.pid 2>/dev/null` 2>/dev/null", ifd, exec); -+ result += execute("kill -TERM `cat /var/run/udhcpc.%iface%.pid 2>/dev/null` 2>/dev/null", ifd, exec); - } else if (execable("/sbin/pump")) { - result = execute("pump -i %iface% -k", ifd, exec); - } else if (execable("/sbin/dhclient")) { diff --git a/packages/busybox/busybox-1.00/fbset.patch b/packages/busybox/busybox-1.00/fbset.patch deleted file mode 100644 index d0609ce6f7..0000000000 --- a/packages/busybox/busybox-1.00/fbset.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- busybox/util-linux/fbset.c~ 2004-07-03 16:24:23.000000000 +0100 -+++ busybox/util-linux/fbset.c 2004-12-30 20:09:26.000000000 +0000 -@@ -337,7 +337,7 @@ - { - struct fb_var_screeninfo var, varset; - int fh, i; -- char *fbdev = DEFAULTFBDEV; -+ char *fbdev = NULL; - char *modefile = DEFAULTFBMODE; - char *thisarg, *mode = NULL; - -@@ -404,7 +404,12 @@ - } - } - -+ if (fbdev == NULL) -+ fbdev = DEFAULTFBDEV; - if ((fh = open(fbdev, O_RDONLY)) < 0) -+#ifdef CONFIG_FEATURE_DEVFS -+ if ((fh = open("/dev/fb0", O_RDONLY)) < 0) -+#endif - bb_perror_msg_and_die("fbset(open)"); - if (ioctl(fh, FBIOGET_VSCREENINFO, &var)) - bb_perror_msg_and_die("fbset(ioctl)"); diff --git a/packages/busybox/busybox-1.00/gzip-spurious-const.patch b/packages/busybox/busybox-1.00/gzip-spurious-const.patch deleted file mode 100644 index 114a284e99..0000000000 --- a/packages/busybox/busybox-1.00/gzip-spurious-const.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- busybox-1.00/archival/gzip.c.old 2005-06-05 22:57:32.000000000 +0100 -+++ busybox-1.00/archival/gzip.c 2005-06-05 22:57:38.000000000 +0100 -@@ -2162,7 +2162,7 @@ - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ --static const int build_bl_tree() -+static int build_bl_tree() - { - int max_blindex; /* index of last bit length code of non zero freq */ - diff --git a/packages/busybox/busybox-1.00/hdparm_M.patch b/packages/busybox/busybox-1.00/hdparm_M.patch deleted file mode 100644 index 170906535e..0000000000 --- a/packages/busybox/busybox-1.00/hdparm_M.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff -Naur busybox-1.00/miscutils/hdparm.c busybox-1.00-patched/miscutils/hdparm.c ---- busybox-1.00/miscutils/hdparm.c 2004-07-21 00:53:59.000000000 +0200 -+++ busybox-1.00-patched/miscutils/hdparm.c 2004-10-21 15:17:13.000000000 +0200 -@@ -1254,6 +1254,7 @@ - static unsigned long set_sleepnow = 0, get_sleepnow = 0; - static unsigned long get_powermode = 0; - static unsigned long set_apmmode = 0, get_apmmode= 0, apmmode = 0; -+static unsigned long set_acoustic = 0, get_acoustic = 0, acoustic = 0; - #endif - #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY - static int get_IDentity = 0; -@@ -2123,6 +2124,20 @@ - } - bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD"); - } -+ if (set_acoustic) -+ { -+ no_scsi(); -+ acoustic=check_if_min_and_set_val(acoustic,0); -+ acoustic=check_if_maj_and_set_val(acoustic,254); -+ if_printf(get_acoustic," setting AAM level to 0x%02lX (%ld)\n", acoustic, acoustic); -+ bb_ioctl(fd, HDIO_SET_ACOUSTIC, (int*)acoustic,"HDIO_SET_ACOUSTIC"); -+ } -+ if (get_acoustic) -+ { -+ no_scsi(); -+ bb_ioctl(fd, HDIO_GET_ACOUSTIC, (unsigned long*)&parm,"HDIO_GET_ACOUSTIC"); -+ printf(" acoustic = %2ld (128=quiet ... 254=fast)\n", parm); -+ } - if (set_wcache) - { - #ifdef DO_FLUSHCACHE -@@ -2831,6 +2846,13 @@ - p = *argv++, --argc; - p=GET_NUMBER(p,&set_readahead,&Xreadahead); - break; -+ case 'M': -+ get_acoustic = noisy; -+ noisy = 1; -+ if (!*p && argc && isalnum(**argv)) -+ p = *argv++, --argc; -+ p=GET_NUMBER(p,&set_acoustic,&acoustic); -+ break; - case 'B': - get_apmmode = noisy; - noisy = 1; - diff --git a/packages/busybox/busybox-1.00/ifupdown-spurious-environ.patch b/packages/busybox/busybox-1.00/ifupdown-spurious-environ.patch deleted file mode 100644 index 8753315f2c..0000000000 --- a/packages/busybox/busybox-1.00/ifupdown-spurious-environ.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- busybox-1.00/networking/ifupdown.c.old 2005-06-11 19:51:59.000000000 +0100 -+++ busybox-1.00/networking/ifupdown.c 2005-06-11 19:52:19.000000000 +0100 -@@ -148,6 +148,9 @@ - struct mapping_defn_t *mappings; - }; - -+/* XXX */ -+#define environ local_environ -+ - static char no_act = 0; - static char verbose = 0; - static char **environ = NULL; diff --git a/packages/busybox/busybox-1.00/iproute-flush-cache.patch b/packages/busybox/busybox-1.00/iproute-flush-cache.patch deleted file mode 100644 index f8becc3390..0000000000 --- a/packages/busybox/busybox-1.00/iproute-flush-cache.patch +++ /dev/null @@ -1,23 +0,0 @@ -Index: networking/libiproute/iproute.c -=================================================================== -RCS file: /var/cvs/busybox/networking/libiproute/iproute.c,v -retrieving revision 1.14 -diff -u -r1.14 iproute.c ---- networking/libiproute/iproute.c 11 Aug 2004 08:10:58 -0000 1.14 -+++ networking/libiproute/iproute.c 30 Nov 2004 20:43:44 -0000 -@@ -537,6 +537,15 @@ - } else if (matches(*argv, "match") == 0) { - NEXT_ARG(); - get_prefix(&filter.mdst, *argv, do_ipv6); -+ } else if (matches(*argv, "table") == 0) { -+ NEXT_ARG(); -+ if (matches(*argv, "cache") == 0) { -+ filter.tb = -1; -+ } else if (matches(*argv, "main") != 0) { -+ invarg("invalid \"table\"", *argv); -+ } -+ } else if (matches(*argv, "cache") == 0) { -+ filter.tb = -1; - } else { - if (matches(*argv, "exact") == 0) { - NEXT_ARG(); diff --git a/packages/busybox/busybox-1.00/linux-types.patch b/packages/busybox/busybox-1.00/linux-types.patch deleted file mode 100644 index e312073c9e..0000000000 --- a/packages/busybox/busybox-1.00/linux-types.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- busybox-1.00/libbb/loop.c.org 2006-09-19 18:18:17.084592997 +0200 -+++ busybox-1.00/libbb/loop.c 2006-09-19 18:18:09.820275793 +0200 -@@ -19,6 +19,7 @@ - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -+#include - #include - #include - #include diff --git a/packages/busybox/busybox-1.00/mount-all-type.patch b/packages/busybox/busybox-1.00/mount-all-type.patch deleted file mode 100644 index 476094a804..0000000000 --- a/packages/busybox/busybox-1.00/mount-all-type.patch +++ /dev/null @@ -1,84 +0,0 @@ ---- busybox-1.00/.pc/mount-all-type.patch/util-linux/mount.c 2004-08-02 17:14:02.000000000 -0700 -+++ busybox-1.00/util-linux/mount.c 2005-05-13 00:17:19.054232796 -0700 -@@ -364,6 +364,56 @@ - exit(EXIT_SUCCESS); - } - -+/* Does this file system type, from /etc/fstab, match the given -+ * -t option value? -+ */ -+static int match_fs(const char *option, const char *type) -+{ -+ const int len = strlen(type); -+ const int no = option[0] == 'n' && option[1] == 'o'; -+ const char *optp = option; -+ -+ if (len > 0) do { -+ const char *match = strstr(optp, type); -+ -+ if (match == NULL) { -+ /* No match, but if the option string starts 'no' no match -+ * means yes. -+ */ -+ return no; -+ } -+ -+ /* Match, may be partial, check for end-of-type in option string. */ -+ if (match[len] == 0 || match[len] == ',') { -+ /* Ok, check for type or notype. */ -+ if (match == option) { -+ /* Exact match at start (can't be 'no') */ -+ return 1; -+ } -+ if (match > option+1) { -+ if (match[-1] == ',') { -+ /* Exact match in middle, might be 'no' */ -+ return !no; -+ } -+ if (match == option+2 && no) { -+ /* Exact match to 'notype' at start. */ -+ return 0; -+ } -+ if (match > option+2 && match[-3] == ',' && -+ match[-2] == 'n' && match[-1] == 'o') { -+ return 0; -+ } -+ } -+ } -+ -+ /* Look for another match. */ -+ optp = match+1; -+ } while (1); -+ -+ /* zero length type in fstab (impossible?), don't match it. */ -+ return 0; -+} -+ - extern int mount_main(int argc, char **argv) - { - struct stat statbuf; -@@ -371,6 +421,7 @@ - char *extra_opts; - int flags = 0; - char *filesystemType = "auto"; -+ char *filesystemOption = 0; - int got_filesystemType = 0; - char *device = xmalloc(PATH_MAX); - char *directory = xmalloc(PATH_MAX); -@@ -393,6 +444,7 @@ - break; - case 't': - filesystemType = optarg; -+ filesystemOption = optarg; - got_filesystemType = 1; - break; - case 'w': -@@ -460,6 +512,8 @@ - - strcpy(device, m->mnt_fsname); - strcpy(directory, m->mnt_dir); -+ if (all && filesystemOption != 0 && !match_fs(filesystemOption, m->mnt_type)) -+ continue; - filesystemType = bb_xstrdup(m->mnt_type); - singlemount: - extra_opts = string_flags; diff --git a/packages/busybox/busybox-1.00/nylon/.mtn2git_empty b/packages/busybox/busybox-1.00/nylon/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.00/nylon/defconfig b/packages/busybox/busybox-1.00/nylon/defconfig deleted file mode 100644 index 7efd042cdc..0000000000 --- a/packages/busybox/busybox-1.00/nylon/defconfig +++ /dev/null @@ -1,458 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -CONFIG_FEATURE_SUID_CONFIG=y -CONFIG_FEATURE_SUID_CONFIG_QUIET=y -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_LFS is not set -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -CONFIG_FEATURE_AR_LONG_FILENAMES=y -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -# CONFIG_FEATURE_TAR_BZIP2 is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -CONFIG_FEATURE_TAR_COMPRESS=y -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -CONFIG_UNCOMPRESS=y -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Common options for dpkg and dpkg_deb -# -CONFIG_FEATURE_DEB_TAR_GZ=y -CONFIG_FEATURE_DEB_TAR_BZ2=y - -# -# Coreutils -# -CONFIG_BASENAME=y -CONFIG_CAL=y -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -CONFIG_CMP=y -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -CONFIG_DOS2UNIX=y -CONFIG_UNIX2DOS=y -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -CONFIG_FOLD=y -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -CONFIG_HOSTID=y -CONFIG_ID=y -CONFIG_INSTALL=y -CONFIG_LENGTH=y -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -CONFIG_SHA1SUM=y -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -CONFIG_FEATURE_TEE_USE_BLOCK_IO=y -# CONFIG_TEST is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -CONFIG_UUDECODE=y -CONFIG_UUENCODE=y -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -CONFIG_CLEAR=y -# CONFIG_DEALLOCVT is not set -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -# CONFIG_LOADFONT is not set -CONFIG_LOADKMAP=y -# CONFIG_OPENVT is not set -CONFIG_RESET=y -CONFIG_SETKEYCODES=y - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -CONFIG_PIPE_PROGRESS=y -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -CONFIG_FEATURE_FIND_INUM=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -CONFIG_CROND=y -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -CONFIG_CRONTAB=y -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -CONFIG_TIME=y -CONFIG_WATCHDOG=y - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_MODPROBE is not set -# CONFIG_RMMOD is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -CONFIG_ARPING=y -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -CONFIG_HTTPD=y -# CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY is not set -CONFIG_FEATURE_HTTPD_BASIC_AUTH=y -CONFIG_FEATURE_HTTPD_AUTH_MD5=y -CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y -CONFIG_FEATURE_HTTPD_SETUID=y -CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y -CONFIG_FEATURE_HTTPD_CGI=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y -CONFIG_FEATURE_IFCONFIG_HW=y -CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -CONFIG_INETD=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_ECHO=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DISCARD=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_TIME=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DAYTIME=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_CHARGEN=y -# CONFIG_IP is not set -CONFIG_IPCALC=y -CONFIG_FEATURE_IPCALC_FANCY=y -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -CONFIG_NAMEIF=y -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -CONFIG_FEATURE_TELNET_TTYPE=y -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -CONFIG_FEATURE_TFTP_BLOCKSIZE=y -# CONFIG_FEATURE_TFTP_DEBUG is not set -CONFIG_TRACEROUTE=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -CONFIG_VCONFIG=y -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -CONFIG_UDHCPD=y -CONFIG_UDHCPC=y -CONFIG_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -CONFIG_SYSCTL=y - -# -# Another Bourne-like Shell -# -# CONFIG_FEATURE_SH_IS_ASH is not set -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -CONFIG_FEATURE_SH_IS_NONE=y -# CONFIG_ASH is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -CONFIG_FREERAMDISK=y -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -# CONFIG_HWCLOCK is not set -CONFIG_LOSETUP=y -CONFIG_MKSWAP=y -# CONFIG_MORE is not set -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -CONFIG_SWAPONOFF=y -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.00/openmn/.mtn2git_empty b/packages/busybox/busybox-1.00/openmn/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.00/openmn/defconfig b/packages/busybox/busybox-1.00/openmn/defconfig deleted file mode 100644 index f98af91853..0000000000 --- a/packages/busybox/busybox-1.00/openmn/defconfig +++ /dev/null @@ -1,475 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_LFS is not set -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -CONFIG_CMP=y -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -# CONFIG_FEATURE_LS_COLOR is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -# CONFIG_FEATURE_FANCY_TAIL is not set -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETKEYCODES=y - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -CONFIG_ADDGROUP=y -CONFIG_DELGROUP=y -CONFIG_ADDUSER=y -CONFIG_DELUSER=y -CONFIG_GETTY=y -CONFIG_FEATURE_U_W_TMP=y -CONFIG_LOGIN=y -# CONFIG_FEATURE_SECURETTY is not set -CONFIG_PASSWD=y -CONFIG_SU=y -CONFIG_SULOGIN=y -CONFIG_VLOCK=y - -# -# Common options for adduser, deluser, login, su -# -CONFIG_FEATURE_SHADOWPASSWDS=y - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -CONFIG_FEATURE_2_4_MODULES=y -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS=y -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -CONFIG_FEATURE_INSMOD_LOAD_MAP=y -CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL=y -CONFIG_LSMOD=y -CONFIG_MODPROBE=y -CONFIG_RMMOD=y -# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set - -# -# Networking Utilities -# -# CONFIG_FEATURE_IPV6 is not set -CONFIG_ARPING=y -# CONFIG_FTPGET is not set -CONFIG_FTPPUT=y -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -# CONFIG_FEATURE_IP_TUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set -# CONFIG_TELNETD is not set -# CONFIG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -# CONFIG_FEATURE_WGET_STATUSBAR is not set -CONFIG_FEATURE_WGET_AUTHENTICATION=y -# CONFIG_FEATURE_WGET_IP6_LITERAL is not set - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_PIDOF is not set -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=31 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -# CONFIG_FEATURE_REMOTE_LOG is not set -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -# CONFIG_FBSET is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -# FDISK_SUPPORT_LARGE_DISKS is not set -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -CONFIG_GETOPT=y -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -CONFIG_LOSETUP=y -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -# CONFIG_SWAPONOFF is not set -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.00/readlink.patch b/packages/busybox/busybox-1.00/readlink.patch deleted file mode 100644 index 0c5431085a..0000000000 --- a/packages/busybox/busybox-1.00/readlink.patch +++ /dev/null @@ -1,85 +0,0 @@ -diff -p -u -r1.7 Config.in ---- busybox-1.00/debianutils/Config.in 15 Mar 2004 08:28:24 -0000 1.7 -+++ busybox-1.00-patched/debianutils/Config.in 16 Nov 2004 11:46:41 -0000 -@@ -24,6 +24,13 @@ config CONFIG_READLINK - This program reads a symbolic link and returns the name - of the file it points to - -+config CONFIG_FEATURE_READLINK_FOLLOW -+ bool " Enable canonicalization by following all symlinks (-f)" -+ default n -+ depends on CONFIG_READLINK -+ help -+ Enable the readlink option (-f). -+ - config CONFIG_RUN_PARTS - bool "run-parts" - default n -diff -p -u -r1.2 readlink.c ---- busybox-1.00/debianutils/readlink.c 19 Mar 2003 09:11:41 -0000 1.2 -+++ busybox-1.00-patched/debianutils/readlink.c 16 Nov 2004 11:46:41 -0000 -@@ -23,18 +23,38 @@ - #include - #include - #include -+#include - #include "busybox.h" - -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+# define READLINK_FOLLOW "f" -+# define READLINK_FLAG_f (1 << 0) -+#else -+# define READLINK_FOLLOW "" -+#endif -+ -+static const char readlink_options[] = READLINK_FOLLOW; -+ - int readlink_main(int argc, char **argv) - { - char *buf = NULL; -+ unsigned long opt = bb_getopt_ulflags(argc, argv, readlink_options); -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+ RESERVE_CONFIG_BUFFER(resolved_path, PATH_MAX); -+#endif - - /* no options, no getopt */ - -- if (argc != 2) -+ if (optind + 1 != argc) - bb_show_usage(); - -- buf = xreadlink(argv[1]); -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+ if (opt & READLINK_FLAG_f) { -+ buf = realpath(argv[optind], resolved_path); -+ } else -+#endif -+ buf = xreadlink(argv[optind]); -+ - if (!buf) - return EXIT_FAILURE; - puts(buf); -diff -p -u -r1.222 usage.h ---- busybox-1.00/include/usage.h 14 Sep 2004 16:23:56 -0000 1.222 -+++ busybox-1.00-patched/include/usage.h 16 Nov 2004 11:46:42 -0000 -@@ -1985,10 +1985,18 @@ - "\t-s\tSet the system date and time (default).\n" \ - "\t-p\tPrint the date and time." - -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+#define USAGE_READLINK_FOLLOW(a) a -+#else -+#define USAGE_READLINK_FOLLOW(a) -+#endif -+ - #define readlink_trivial_usage \ -- "" -+ USAGE_READLINK_FOLLOW("[-f] ") "FILE" - #define readlink_full_usage \ -- "Displays the value of a symbolic link." -+ "Displays the value of a symbolic link." \ -+ USAGE_READLINK_FOLLOW("\n\nOptions:\n" \ -+ "\t-f\tcanonicalize by following all symlinks") - - #define realpath_trivial_usage \ - "pathname ..." diff --git a/packages/busybox/busybox-1.00/rmmod.patch b/packages/busybox/busybox-1.00/rmmod.patch deleted file mode 100644 index 5a557ef35d..0000000000 --- a/packages/busybox/busybox-1.00/rmmod.patch +++ /dev/null @@ -1,44 +0,0 @@ -Index: modutils/rmmod.c -=================================================================== -RCS file: /var/cvs/busybox/modutils/rmmod.c,v -retrieving revision 1.31 -diff -u -r1.31 rmmod.c ---- busybox/modutils/rmmod.c 20 Jul 2004 18:36:51 -0000 1.31 -+++ busybox/modutils/rmmod.c 10 Dec 2004 22:56:36 -0000 -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - #include "busybox.h" - - #ifdef CONFIG_FEATURE_2_6_MODULES -@@ -63,6 +64,16 @@ - void *buf; /* hold the module names which we ignore but must get */ - size_t bufsize = 0; - #endif -+#ifdef CONFIG_FEATURE_2_6_MODULES -+ int k_version = 0; -+ struct utsname myuname; -+ -+ if (uname(&myuname) == 0) { -+ if (myuname.release[0] == '2') { -+ k_version = myuname.release[2] - '0'; -+ } -+ } -+#endif - - /* Parse command line. */ - while ((n = getopt(argc, argv, "a")) != EOF) { -@@ -109,7 +120,10 @@ - for (n = optind; n < argc; n++) { - #ifdef CONFIG_FEATURE_2_6_MODULES - char module_name[strlen(argv[n]) + 1]; -- filename2modname(module_name, argv[n]); -+ if (k_version != 4) -+ filename2modname(module_name, argv[n]); -+ else -+ strcpy(module_name, argv[n]); - #else - #define module_name argv[n] - #endif diff --git a/packages/busybox/busybox-1.00/slugos/.mtn2git_empty b/packages/busybox/busybox-1.00/slugos/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.00/slugos/defconfig b/packages/busybox/busybox-1.00/slugos/defconfig deleted file mode 100644 index 7debaeced2..0000000000 --- a/packages/busybox/busybox-1.00/slugos/defconfig +++ /dev/null @@ -1,461 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_LFS=y -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -# CONFIG_CPIO is not set -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -# CONFIG_FIND is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -# CONFIG_XARGS is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_MODPROBE is not set -# CONFIG_RMMOD is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_FEATURE_TFTP_DEBUG is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_PIPE_OPTIMIZATION=y -CONFIG_FEATURE_BUILTIN_TEST=y -CONFIG_FEATURE_BUILTIN_ECHO=y -CONFIG_FEATURE_BUILTIN_PIDOF=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -CONFIG_LOSETUP=y -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -CONFIG_SWAPONOFF=y -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.00/slugos/udhcpscript.patch b/packages/busybox/busybox-1.00/slugos/udhcpscript.patch deleted file mode 100644 index 2f58632378..0000000000 --- a/packages/busybox/busybox-1.00/slugos/udhcpscript.patch +++ /dev/null @@ -1,133 +0,0 @@ ---- busybox-1.00/.pc/udhcpscript.patch/examples/udhcp/simple.script 2004-10-13 00:18:05.000000000 -0700 -+++ busybox-1.00/examples/udhcp/simple.script 2005-06-05 15:08:28.432605118 -0700 -@@ -1,40 +1,101 @@ - #!/bin/sh -+# slugos UDHCP client script -+# this must set the HW address (MAC) on the interface -+# -+. /etc/default/functions - --# udhcpc script edited by Tim Riker - --[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1 -+echodns(){ -+ local dns -+ if test $# -gt 0 -+ then -+ for dns in "$@" -+ do -+ echo "nameserver $dns" -+ done -+ fi -+} -+ -+# Output the correct contents for resolv.conf -+mkresolv() { -+ test -n "$domain" && echo "search $domain" -+ echodns $dns -+} -+ -+# checksum of a file (or stdin if -) -+md5strm() { -+ md5sum $1 2>/dev/null | sed -n 's/^\([0-9A-Za-z]*\).*$/\1/p' -+} -+ -+bind() { -+ local B N metric i olddomain -+ B= -+ test -n "$broadcast" && B="broadcast $broadcast" -+ N= -+ test -n "$subnet" && N="netmask $subnet" -+ ifconfig "$interface" "$ip" $B $N up -+ -+ # If given router information delete the old information and -+ # enter new stuff, routers get metrics incremented by 1 -+ # between each (this is somewhat arbitrary) -+ if test -n "$router" -+ then -+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null -+ do -+ : -+ done - --RESOLV_CONF="/etc/resolv.conf" --[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" --[ -n "$subnet" ] && NETMASK="netmask $subnet" -+ metric=0 -+ for i in $router -+ do -+ route add default gw "$i" dev "$interface" metric $((metric++)) -+ done -+ fi -+ -+ olddomain= -+ test -r /etc/defaultdomain && olddomain="$(cat /etc/defaultdomain)" -+ if test -n "$domain" -a "$domain" != "$olddomain" -+ then -+ echo "$domain" >/etc/defaultdomain -+ # and update the kernel view too -+ echo "$domain" >/proc/sys/kernel/domainname -+ fi -+ -+ # Update /etc/resolv.conf to reflect domain and dns information, -+ # this always clears resolv.conf if none is given -+ md5old="$(md5strm /etc/resolv.conf)" -+ md5new="$(mkresolv | md5strm -)" -+ test "$md5old" != "$md5new" && mkresolv >/etc/resolv.conf -+} - - case "$1" in -- deconfig) -- /sbin/ifconfig $interface 0.0.0.0 -- ;; -- -- renew|bound) -- /sbin/ifconfig $interface $ip $BROADCAST $NETMASK -- -- if [ -n "$router" ] ; then -- echo "deleting routers" -- while route del default gw 0.0.0.0 dev $interface ; do -- : -- done -- -- metric=0 -- for i in $router ; do -- route add default gw $i dev $interface metric $((metric++)) -- done -+deconfig) -+ # Bring the interface up (without inet at this point) -+ ifconfig "$interface" up;; -+ -+renew|bound) -+ bind;; -+ -+leasefail) -+ # Pull the values from the config data if (only only if) this -+ # is the config interface -+ if test "$interface" = "$(config iface)" -+ then -+ ip="$(config ip)" -+ if test -n "$ip" -+ then -+ router="$(config gateway)" -+ subnet="$(config netmask)" -+ broadcast="$(config broadcast)" -+ domain="$(config domain)" -+ dns="$(config dns)" -+ -+ bind - fi -+ fi;; - -- echo -n > $RESOLV_CONF -- [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF -- for i in $dns ; do -- echo adding dns $i -- echo nameserver $i >> $RESOLV_CONF -- done -- ;; -+*) echo "udhcpc: $*: unknown command" >&2 -+ exit 1;; - esac - - exit 0 diff --git a/packages/busybox/busybox-1.00/sparc/.mtn2git_empty b/packages/busybox/busybox-1.00/sparc/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.00/sparc/defconfig b/packages/busybox/busybox-1.00/sparc/defconfig deleted file mode 100644 index 8b8cbfc839..0000000000 --- a/packages/busybox/busybox-1.00/sparc/defconfig +++ /dev/null @@ -1,467 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_LFS is not set -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -# CONFIG_FEATURE_LS_RECURSIVE is not set -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -CONFIG_MAKEDEVS=y -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_TIME is not set -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_MODPROBE is not set -# CONFIG_RMMOD is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -# CONFIG_LOSETUP is not set -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -CONFIG_SWAPONOFF=y -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -# CONFIG_FEATURE_MOUNT_LOOP is not set -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.00/start-stop-daemon-oknodo-support.patch b/packages/busybox/busybox-1.00/start-stop-daemon-oknodo-support.patch deleted file mode 100644 index 1b8debb021..0000000000 --- a/packages/busybox/busybox-1.00/start-stop-daemon-oknodo-support.patch +++ /dev/null @@ -1,73 +0,0 @@ ---- busybox-1.00/debianutils/start_stop_daemon.c.orig 2006-07-23 00:06:14.000000000 +0200 -+++ busybox-1.00/debianutils/start_stop_daemon.c 2006-07-23 00:21:39.000000000 +0200 -@@ -160,7 +160,7 @@ - } - - --static void -+static int - do_stop(void) - { - char what[1024]; -@@ -183,7 +183,7 @@ - if (!found) { - if (!quiet) - printf("no %s found; none killed.\n", what); -- return; -+ return -1; - } - for (p = found; p; p = p->next) { - if (kill(p->pid, signal_nr) == 0) { -@@ -200,6 +200,7 @@ - printf(" %d", -p->pid); - printf(").\n"); - } -+ return killed; - } - - -@@ -209,6 +210,7 @@ - { "background", 0, NULL, 'b' }, - { "quiet", 0, NULL, 'q' }, - { "make-pidfile", 0, NULL, 'm' }, -+ { "oknodo", 0, NULL, 'o' }, - { "startas", 1, NULL, 'a' }, - { "name", 1, NULL, 'n' }, - { "signal", 1, NULL, 's' }, -@@ -223,6 +225,7 @@ - #define SSD_OPT_BACKGROUND 4 - #define SSD_OPT_QUIET 8 - #define SSD_OPT_MAKEPID 16 -+#define SSD_OPT_OKNODO 32 - - int - start_stop_daemon_main(int argc, char **argv) -@@ -234,7 +237,7 @@ - bb_applet_long_options = ssd_long_options; - - bb_opt_complementaly = "K~S:S~K"; -- opt = bb_getopt_ulflags(argc, argv, "KSbqma:n:s:u:x:p:", -+ opt = bb_getopt_ulflags(argc, argv, "KSbqmoa:n:s:u:x:p:", - &startas, &cmdname, &signame, &userspec, &execname, &pidfile); - - /* Check one and only one context option was given */ -@@ -265,8 +268,8 @@ - user_id = my_getpwnam(userspec); - - if (opt & SSD_CTX_STOP) { -- do_stop(); -- return EXIT_SUCCESS; -+ int i = do_stop(); -+ return (opt & SSD_OPT_OKNODO) ? 0 : (i <= 0); - } - - do_procinit(); -@@ -274,7 +277,7 @@ - if (found) { - if (!quiet) - printf("%s already running.\n%d\n", execname ,found->pid); -- return EXIT_SUCCESS; -+ return (opt & SSD_OPT_OKNODO) ? EXIT_SUCCESS : EXIT_FAILURE; - } - *--argv = startas; - if (opt & SSD_OPT_BACKGROUND) { diff --git a/packages/busybox/busybox-1.00/uclibc_posix.patch b/packages/busybox/busybox-1.00/uclibc_posix.patch deleted file mode 100644 index aefb994068..0000000000 --- a/packages/busybox/busybox-1.00/uclibc_posix.patch +++ /dev/null @@ -1,20 +0,0 @@ -see http://www.busybox.net/lists/busybox/2004-December/013276.html - ---- busybox-old/libbb/loop.c 2004-08-16 04:36:28.000000000 -0400 -+++ busybox/libbb/loop.c 2004-12-04 23:45:58.000000000 -0500 -@@ -19,6 +19,7 @@ - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -+#include - #include - #include - #include -@@ -30,7 +31,6 @@ - /* Grumble... The 2.6.x kernel breaks asm/posix_types.h - * so we get to try and cope as best we can... */ - #include --#include - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) - #define __bb_kernel_dev_t __kernel_old_dev_t diff --git a/packages/busybox/busybox-1.00/udhcppidfile-breakage.patch b/packages/busybox/busybox-1.00/udhcppidfile-breakage.patch deleted file mode 100644 index 031274908b..0000000000 --- a/packages/busybox/busybox-1.00/udhcppidfile-breakage.patch +++ /dev/null @@ -1,57 +0,0 @@ ---- busybox-1.00/networking/udhcp/common.c~udhcppidfile2 -+++ busybox-1.00/networking/udhcp/common.c -@@ -74,7 +74,7 @@ - - if (pid > 0) { - /* parent */ -- if (pidfile_reassign(pidfile, pid) < 0) { -+ if (pidfile != NULL && pidfile_reassign(pidfile, pid) < 0) { - (void)kill(pid, SIGKILL); - exit(1); - } else -@@ -119,7 +119,7 @@ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- if (pidfile_acquire(pidfile) < 0) -+ if (pidfile != NULL && pidfile_acquire(pidfile) < 0) - exit(1); - - /* equivelent of doing a fflush after every \n */ -@@ -166,7 +166,7 @@ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- if (pidfile_acquire(pidfile) < 0) -+ if (pidfile != NULL && pidfile_acquire(pidfile) < 0) - exit(1); - - /* equivelent of doing a fflush after every \n */ ---- busybox-1.00/networking/udhcp/pidfile.c~udhcppidfile2 -+++ busybox-1.00/networking/udhcp/pidfile.c -@@ -141,7 +141,11 @@ - int pidfile_acquire(const char *pidfile) - { - int fd, result; -- if (!pidfile) return (-1); -+ -+ if (pidfile == NULL) { -+ LOG(LOG_ERR, "pidfile_acquire: filename is NULL\n"); -+ return (-1); -+ } - - if ((fd = pidfile_open(pidfile)) < 0) - return (-1); -@@ -170,7 +174,11 @@ - int pidfile_reassign(const char *pidfile, int pid) - { - int fd, result; -- if (!pidfile) return (-1); -+ -+ if (pidfile == NULL) { -+ LOG(LOG_ERR, "pidfile_reassign: filename is NULL\n"); -+ return (-1); -+ } - - if ((fd = pidfile_open(pidfile)) < 0) - return (-1); diff --git a/packages/busybox/busybox-1.00/udhcppidfile.patch b/packages/busybox/busybox-1.00/udhcppidfile.patch deleted file mode 100644 index fb2b2ec19a..0000000000 --- a/packages/busybox/busybox-1.00/udhcppidfile.patch +++ /dev/null @@ -1,276 +0,0 @@ ---- busybox-1.00/networking/udhcp/pidfile.h-dist 2004-04-15 03:51:26.000000000 +1000 -+++ busybox-1.00/networking/udhcp/pidfile.h 2004-10-27 15:46:38.000000000 +1000 -@@ -21,5 +21,5 @@ - - - int pidfile_acquire(const char *pidfile); --void pidfile_write_release(int pid_fd); -+int pidfile_reassign(const char *pidfile, int newpid); - ---- busybox-1.00/networking/udhcp/pidfile.c-dist 2004-04-15 03:51:25.000000000 +1000 -+++ busybox-1.00/networking/udhcp/pidfile.c 2004-10-27 19:43:40.000000000 +1000 -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - - #include "pidfile.h" - #include "common.h" -@@ -37,39 +38,146 @@ - } - - --int pidfile_acquire(const char *pidfile) -+static int pidfile_open(const char *pidfile) - { -- int pid_fd; -- if (!pidfile) return -1; -+ int fd; - -- pid_fd = open(pidfile, O_CREAT | O_WRONLY, 0644); -- if (pid_fd < 0) { -- LOG(LOG_ERR, "Unable to open pidfile %s: %m\n", pidfile); -- } else { -- lockf(pid_fd, F_LOCK, 0); -- if (!saved_pidfile) -- atexit(pidfile_delete); -- saved_pidfile = (char *) pidfile; -+ if ((fd = open(pidfile, O_CREAT | O_RDWR, 0644)) < 0) { -+ LOG(LOG_ERR, "pidfile_open: open %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ /* NOTE: lockf is not inherited by child after fork */ -+ if (lockf(fd, F_LOCK, 0) < 0) { -+ LOG(LOG_ERR, "pidfile_open: lock %s failed: %m\n", pidfile); -+ close(fd); -+ return (-1); -+ } -+ -+ return (fd); -+} -+ -+ -+static int pidfile_check(int fd, const char *pidfile) -+{ -+ int len, pid; -+ char buf[20]; -+ -+ if (lseek(fd, 0L, SEEK_SET) < 0) { -+ LOG(LOG_ERR, "pidfile_check: lseek %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ if ((len = read(fd, buf, sizeof buf - 1)) < 0) { -+ LOG(LOG_ERR, "pidfile_check: read %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ if (len == 0) -+ return (0); -+ -+ buf[len] = '\0'; -+ -+ if ((pid = atoi(buf)) <= 1) { -+ LOG(LOG_WARNING, -+ "pidfile_check: ignoring bogus pid (%s) in %s\n", -+ buf, pidfile); -+ return (0); -+ } -+ -+ if (kill((pid_t)pid, 0) == 0) { -+ LOG(LOG_ERR, "pidfile_check: process %d exists (%s)\n", -+ pid, pidfile); -+ return (-1); -+ } -+ -+ if (errno != ESRCH) { -+ LOG(LOG_ERR, "pidfile_check: kill %d failed (%s): %m\n", -+ pid, pidfile); -+ return (-1); -+ } -+ -+ return (0); -+} -+ -+ -+static int pidfile_store(int fd, const char *pidfile, int pid) -+{ -+ int len; -+ char buf[20]; -+ -+ if (lseek(fd, 0L, SEEK_SET) < 0) { -+ LOG(LOG_ERR, "pidfile_store: lseek %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ len = snprintf(buf, sizeof buf - 1, "%d\n", pid); -+ buf[len] = '\0'; -+ -+ if (write(fd, buf, len) < 0) { -+ LOG(LOG_ERR, "pidfile_store: write %s failed: %m\n", -+ pidfile); -+ return (-1); -+ } -+ -+ if (ftruncate(fd, len) < 0) { -+ LOG(LOG_ERR, "pidfile_store: ftruncate %d failed (%s): %m\n", -+ len, pidfile); -+ return (-1); - } - -- return pid_fd; -+ return (0); - } - - --void pidfile_write_release(int pid_fd) -+static void pidfile_close(int fd) - { -- FILE *out; -+ (void)lseek(fd, 0L, SEEK_SET); -+ (void)lockf(fd, F_ULOCK, 0); -+ (void)close(fd); -+} - -- if (pid_fd < 0) return; - -- if ((out = fdopen(pid_fd, "w")) != NULL) { -- fprintf(out, "%d\n", getpid()); -- fclose(out); -+int pidfile_acquire(const char *pidfile) -+{ -+ int fd, result; -+ if (!pidfile) return (-1); -+ -+ if ((fd = pidfile_open(pidfile)) < 0) -+ return (-1); -+ -+ if ((result = pidfile_check(fd, pidfile)) == 0) -+ result = pidfile_store(fd, pidfile, getpid()); -+ -+ pidfile_close(fd); -+ -+ if (result == 0) { -+ saved_pidfile = (char *) pidfile; -+ atexit(pidfile_delete); - } -- lockf(pid_fd, F_UNLCK, 0); -- close(pid_fd); -+ -+ return (result); - } - - -+/* -+ * reassign the pid in a pidfile - used just after a fork so a parent -+ * can store the pid of its child into the file without any window -+ * where the pid in the file is a dead process (which might let another -+ * instance of the program start). Note the parent must use _exit() to -+ * avoid triggering the unlink scheduled above in pidfile_acquire() -+ */ -+int pidfile_reassign(const char *pidfile, int pid) -+{ -+ int fd, result; -+ if (!pidfile) return (-1); -+ -+ if ((fd = pidfile_open(pidfile)) < 0) -+ return (-1); - -+ result = pidfile_store(fd, pidfile, pid); - -+ pidfile_close(fd); -+ -+ return (result); -+} ---- busybox-1.00/networking/udhcp/common.c-dist 2004-05-19 19:18:04.000000000 +1000 -+++ busybox-1.00/networking/udhcp/common.c 2004-10-27 19:58:10.000000000 +1000 -@@ -64,16 +64,34 @@ - #ifdef __uClinux__ - LOG(LOG_ERR, "Cannot background in uclinux (yet)"); - #else /* __uClinux__ */ -- int pid_fd; -+ int pid, fd; - -- /* hold lock during fork. */ -- pid_fd = pidfile_acquire(pidfile); -- if (daemon(0, 0) == -1) { -+ /* NOTE: lockf is not inherited by the child after fork */ -+ if ((pid = fork()) < 0) { - perror("fork"); - exit(1); - } -+ -+ if (pid > 0) { -+ /* parent */ -+ if (pidfile_reassign(pidfile, pid) < 0) { -+ (void)kill(pid, SIGKILL); -+ exit(1); -+ } else -+ _exit(0); -+ } -+ -+ /* child */ -+ (void)chdir("/"); -+ if ((fd = open("/dev/null", O_RDWR)) >= 0) { -+ (void)dup2(fd, 0); -+ (void)dup2(fd, 1); -+ (void)dup2(fd, 2); -+ (void)close(fd); -+ } -+ (void)setsid(); -+ - daemonized++; -- pidfile_write_release(pid_fd); - #endif /* __uClinux__ */ - } - -@@ -97,14 +115,12 @@ - - void start_log_and_pid(const char *client_server, const char *pidfile) - { -- int pid_fd; -- - /* Make sure our syslog fd isn't overwritten */ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- pid_fd = pidfile_acquire(pidfile); -- pidfile_write_release(pid_fd); -+ if (pidfile_acquire(pidfile) < 0) -+ exit(1); - - /* equivelent of doing a fflush after every \n */ - setlinebuf(stdout); -@@ -150,8 +166,8 @@ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- pid_fd = pidfile_acquire(pidfile); -- pidfile_write_release(pid_fd); -+ if (pidfile_acquire(pidfile) < 0) -+ exit(1); - - /* equivelent of doing a fflush after every \n */ - setlinebuf(stdout); ---- busybox-1.00/networking/udhcp/common.h-dist 2004-05-19 18:29:05.000000000 +1000 -+++ busybox-1.00/networking/udhcp/common.h 2004-10-27 15:10:16.000000000 +1000 -@@ -42,7 +42,6 @@ - long uptime(void); - void background(const char *pidfile); - void start_log_and_pid(const char *client_server, const char *pidfile); --void background(const char *pidfile); - void udhcp_logging(int level, const char *fmt, ...); - - #define LOG(level, str, args...) udhcp_logging(level, str, ## args) ---- busybox-1.00/networking/udhcp/script.c-dist 2004-05-19 17:45:47.000000000 +1000 -+++ busybox-1.00/networking/udhcp/script.c 2004-10-27 15:54:04.000000000 +1000 -@@ -228,6 +228,6 @@ - execle(client_config.script, client_config.script, - name, NULL, envp); - LOG(LOG_ERR, "script %s failed: %m", client_config.script); -- exit(1); -+ _exit(1); - } - } diff --git a/packages/busybox/busybox-1.00/udhcpscript.patch b/packages/busybox/busybox-1.00/udhcpscript.patch deleted file mode 100644 index fc21d440cd..0000000000 --- a/packages/busybox/busybox-1.00/udhcpscript.patch +++ /dev/null @@ -1,17 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- busybox-1.00-rc3/examples/udhcp/simple.script~udhcpscript -+++ busybox-1.00-rc3/examples/udhcp/simple.script -@@ -17,8 +17,7 @@ - /sbin/ifconfig $interface $ip $BROADCAST $NETMASK - - if [ -n "$router" ] ; then -- echo "deleting routers" -- while route del default gw 0.0.0.0 dev $interface ; do -+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do - : - done - diff --git a/packages/busybox/busybox-1.00/unzip-endian-fixes.patch b/packages/busybox/busybox-1.00/unzip-endian-fixes.patch deleted file mode 100644 index 56af433c30..0000000000 --- a/packages/busybox/busybox-1.00/unzip-endian-fixes.patch +++ /dev/null @@ -1,54 +0,0 @@ ---- archival/unzip.c.orig 2005-03-17 18:42:45.000000000 -0500 -+++ archival/unzip.c 2005-03-17 17:46:45.000000000 -0500 -@@ -46,10 +46,28 @@ - #include "unarchive.h" - #include "busybox.h" - --#define ZIP_FILEHEADER_MAGIC 0x04034b50 --#define ZIP_CDS_MAGIC 0x02014b50 --#define ZIP_CDS_END_MAGIC 0x06054b50 --#define ZIP_DD_MAGIC 0x08074b50 -+#if (BYTE_ORDER == BIG_ENDIAN) -+static inline unsigned short -+__swap16(unsigned short x) { -+ return (((uint16_t)(x) & 0xFF) << 8) | (((uint16_t)(x) & 0xFF00) >> 8); -+} -+ -+static inline uint32_t -+__swap32(uint32_t x) { -+ return (((x & 0xFF) << 24) | -+ ((x & 0xFF00) << 8) | -+ ((x & 0xFF0000) >> 8) | -+ ((x & 0xFF000000) >> 24)); -+} -+#else -+#define __swap16(x) (x) -+#define __swap32(x) (x) -+#endif -+ -+#define ZIP_FILEHEADER_MAGIC __swap32(0x04034b50) -+#define ZIP_CDS_MAGIC __swap32(0x02014b50) -+#define ZIP_CDS_END_MAGIC __swap32(0x06054b50) -+#define ZIP_DD_MAGIC __swap32(0x08074b50) - - extern unsigned int gunzip_crc; - extern unsigned int gunzip_bytes_out; -@@ -249,6 +267,18 @@ - - /* Read the file header */ - unzip_read(src_fd, zip_header.raw, 26); -+#if (BYTE_ORDER == BIG_ENDIAN) -+ zip_header.formated.version = __swap16(zip_header.formated.version); -+ zip_header.formated.flags = __swap16(zip_header.formated.flags); -+ zip_header.formated.method = __swap16(zip_header.formated.method); -+ zip_header.formated.modtime = __swap16(zip_header.formated.modtime); -+ zip_header.formated.moddate = __swap16(zip_header.formated.moddate); -+ zip_header.formated.crc32 = __swap32(zip_header.formated.crc32); -+ zip_header.formated.cmpsize = __swap32(zip_header.formated.cmpsize); -+ zip_header.formated.ucmpsize = __swap32(zip_header.formated.ucmpsize); -+ zip_header.formated.filename_len = __swap16(zip_header.formated.filename_len); -+ zip_header.formated.extra_len = __swap16(zip_header.formated.extra_len); -+#endif - if ((zip_header.formated.method != 0) && (zip_header.formated.method != 8)) { - bb_error_msg_and_die("Unsupported compression method %d", zip_header.formated.method); - } diff --git a/packages/busybox/busybox-1.00/unzip-enhancement-and-fixes.patch b/packages/busybox/busybox-1.00/unzip-enhancement-and-fixes.patch deleted file mode 100644 index 49542cab1d..0000000000 --- a/packages/busybox/busybox-1.00/unzip-enhancement-and-fixes.patch +++ /dev/null @@ -1,878 +0,0 @@ - -Index: archival/unzip.c -=================================================================== -RCS file: /var/cvs/busybox/archival/unzip.c,v -retrieving revision 1.8 -diff -u -r1.8 unzip.c ---- archival/unzip.c 6 Jun 2004 10:22:43 -0000 1.8 -+++ archival/unzip.c 18 Oct 2004 01:32:25 -0000 -@@ -2,7 +2,10 @@ - /* - * Mini unzip implementation for busybox - * -- * Copyright (C) 2001 by Laurence Anderson -+ * Copyright (C) 2004 by Ed Clark -+ * -+ * Loosely based on original busybox unzip applet by Laurence Anderson. -+ * All options and features should work in this 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 -@@ -21,17 +24,25 @@ - */ - - /* For reference see -- * http://www.pkware.com/products/enterprise/white_papers/appnote.txt -+ * http://www.pkware.com/company/standards/appnote/ - * http://www.info-zip.org/pub/infozip/doc/appnote-iz-latest.zip - */ - --/* TODO Endian issues, exclude, should we accept input from stdin ? */ -+/* TODO -+ * Endian issues -+ * Zip64 + other methods -+ * Improve handling of zip format, ie. -+ * - deferred CRC, comp. & uncomp. lengths (zip header flags bit 3) -+ * - unix file permissions, etc. -+ * - central directory -+ */ - - #include - #include - #include - #include - #include -+#include - #include "unarchive.h" - #include "busybox.h" - -@@ -43,205 +54,353 @@ - extern unsigned int gunzip_crc; - extern unsigned int gunzip_bytes_out; - --static void header_list_unzip(const file_header_t *file_header) -+typedef union { -+ unsigned char raw[26]; -+ struct { -+ unsigned short version; /* 0-1 */ -+ unsigned short flags; /* 2-3 */ -+ unsigned short method; /* 4-5 */ -+ unsigned short modtime; /* 6-7 */ -+ unsigned short moddate; /* 8-9 */ -+ unsigned int crc32 __attribute__ ((packed)); /* 10-13 */ -+ unsigned int cmpsize __attribute__ ((packed)); /* 14-17 */ -+ unsigned int ucmpsize __attribute__ ((packed)); /* 18-21 */ -+ unsigned short filename_len; /* 22-23 */ -+ unsigned short extra_len; /* 24-25 */ -+ } formated __attribute__ ((packed)); -+} zip_header_t; -+ -+static void unzip_skip(int fd, off_t skip) - { -- printf(" inflating: %s\n", file_header->name); -+ if (lseek(fd, skip, SEEK_CUR) == (off_t)-1) { -+ if ((errno != ESPIPE) || (bb_copyfd_size(fd, -1, skip) != skip)) { -+ bb_error_msg_and_die("Seek failure"); -+ } -+ } - } - --static void header_verbose_list_unzip(const file_header_t *file_header) -+static void unzip_read(int fd, void *buf, size_t count) - { -- unsigned int dostime = (unsigned int) file_header->mtime; -+ if (bb_xread(fd, buf, count) != count) { -+ bb_error_msg_and_die("Read failure"); -+ } -+} - -- /* can printf arguments cut of the decade component ? */ -- unsigned short year = 1980 + ((dostime & 0xfe000000) >> 25); -- while (year >= 100) { -- year -= 100; -- } -- -- printf("%9u %02u-%02u-%02u %02u:%02u %s\n", -- (unsigned int) file_header->size, -- (dostime & 0x01e00000) >> 21, -- (dostime & 0x001f0000) >> 16, -- year, -- (dostime & 0x0000f800) >> 11, -- (dostime & 0x000007e0) >> 5, -- file_header->name); -+static void unzip_create_leading_dirs(char *fn) -+{ -+ /* Create all leading directories */ -+ char *name = bb_xstrdup(fn); -+ if (bb_make_directory(dirname(name), 0777, FILEUTILS_RECUR)) { -+ bb_error_msg_and_die("Failed to create directory"); -+ } -+ free(name); - } - --extern int unzip_main(int argc, char **argv) -+static void unzip_extract(zip_header_t *zip_header, int src_fd, int dst_fd) - { -- union { -- unsigned char raw[26]; -- struct { -- unsigned short version; /* 0-1 */ -- unsigned short flags; /* 2-3 */ -- unsigned short method; /* 4-5 */ -- unsigned short modtime; /* 6-7 */ -- unsigned short moddate; /* 8-9 */ -- unsigned int crc32 __attribute__ ((packed)); /* 10-13 */ -- unsigned int cmpsize __attribute__ ((packed));; /* 14-17 */ -- unsigned int ucmpsize __attribute__ ((packed));; /* 18-21 */ -- unsigned short filename_len; /* 22-23 */ -- unsigned short extra_len; /* 24-25 */ -- } formated __attribute__ ((packed)); -- } zip_header; -+ if (zip_header->formated.method == 0) { -+ /* Method 0 - stored (not compressed) */ -+ int size = zip_header->formated.ucmpsize; -+ if (size && (bb_copyfd_size(src_fd, dst_fd, size) != size)) { -+ bb_error_msg_and_die("Cannot complete extraction"); -+ } -+ -+ } else { -+ /* Method 8 - inflate */ -+ inflate_init(zip_header->formated.cmpsize); -+ inflate_unzip(src_fd, dst_fd); -+ inflate_cleanup(); -+ /* Validate decompression - crc */ -+ if (zip_header->formated.crc32 != (gunzip_crc ^ 0xffffffffL)) { -+ bb_error_msg("Invalid compressed data--crc error"); -+ } -+ /* Validate decompression - size */ -+ if (zip_header->formated.ucmpsize != gunzip_bytes_out) { -+ bb_error_msg("Invalid compressed data--length error"); -+ } -+ } -+} - -- archive_handle_t *archive_handle; -+extern int unzip_main(int argc, char **argv) -+{ -+ zip_header_t zip_header; -+ enum {v_silent, v_normal, v_list} verbosity = v_normal; -+ enum {o_prompt, o_never, o_always} overwrite = o_prompt; - unsigned int total_size = 0; - unsigned int total_entries = 0; -+ int src_fd = -1, dst_fd = -1; -+ char *src_fn = NULL, *dst_fn = NULL; -+ llist_t *accept = NULL; -+ llist_t *reject = NULL; - char *base_dir = NULL; -- int opt = 0; -- -- /* Initialise */ -- archive_handle = init_handle(); -- archive_handle->action_data = NULL; -- archive_handle->action_header = header_list_unzip; -- -- while ((opt = getopt(argc, argv, "lnopqd:")) != -1) { -- switch (opt) { -- case 'l': /* list */ -- archive_handle->action_header = header_verbose_list_unzip; -- archive_handle->action_data = data_skip; -- break; -- case 'n': /* never overwright existing files */ -+ int i, opt, opt_range = 0, list_header_done = 0; -+ char key_buf[512]; -+ struct stat stat_buf; -+ -+ while((opt = getopt(argc, argv, "-d:lnopqx")) != -1) { -+ switch(opt_range) { -+ case 0: /* Options */ -+ switch(opt) { -+ case 'l': /* List */ -+ verbosity = v_list; - break; -- case 'o': -- archive_handle->flags = ARCHIVE_EXTRACT_UNCONDITIONAL; -+ -+ case 'n': /* Never overwrite existing files */ -+ overwrite = o_never; - break; -- case 'p': /* extract files to stdout */ -- archive_handle->action_data = data_extract_to_stdout; -+ -+ case 'o': /* Always overwrite existing files */ -+ overwrite = o_always; - break; -- case 'q': /* Extract files quietly */ -- archive_handle->action_header = header_skip; -+ -+ case 'p': /* Extract files to stdout and fall through to set verbosity */ -+ dst_fd = STDOUT_FILENO; -+ -+ case 'q': /* Be quiet */ -+ verbosity = (verbosity == v_normal) ? v_silent : verbosity; - break; -- case 'd': /* Extract files to specified base directory*/ -- base_dir = optarg; -- break; --#if 0 -- case 'x': /* Exclude the specified files */ -- archive_handle->filter = filter_accept_reject_list; -+ -+ case 1 : /* The zip file */ -+ src_fn = bb_xstrndup(optarg, strlen(optarg)+4); -+ opt_range++; - break; --#endif -+ - default: - bb_show_usage(); -+ -+ } -+ break; -+ -+ case 1: /* Include files */ -+ if (opt == 1) { -+ accept = llist_add_to(accept, optarg); -+ -+ } else if (opt == 'd') { -+ base_dir = optarg; -+ opt_range += 2; -+ -+ } else if (opt == 'x') { -+ opt_range++; -+ -+ } else { -+ bb_show_usage(); -+ } -+ break; -+ -+ case 2 : /* Exclude files */ -+ if (opt == 1) { -+ reject = llist_add_to(reject, optarg); -+ -+ } else if (opt == 'd') { /* Extract to base directory */ -+ base_dir = optarg; -+ opt_range++; -+ -+ } else { -+ bb_show_usage(); -+ } -+ break; -+ -+ default: -+ bb_show_usage(); - } - } -- -- if (argc == optind) { -+ -+ if (src_fn == NULL) { - bb_show_usage(); - } - -- printf("Archive: %s\n", argv[optind]); -- if (archive_handle->action_header == header_verbose_list_unzip) { -- printf(" Length Date Time Name\n"); -- printf(" -------- ---- ---- ----\n"); -- } -- -- if (*argv[optind] == '-') { -- archive_handle->src_fd = STDIN_FILENO; -- archive_handle->seek = seek_by_char; -+ /* Open input file */ -+ if (strcmp("-", src_fn) == 0) { -+ src_fd = STDIN_FILENO; -+ /* Cannot use prompt mode since zip data is arriving on STDIN */ -+ overwrite = (overwrite == o_prompt) ? o_never : overwrite; -+ - } else { -- archive_handle->src_fd = bb_xopen(argv[optind++], O_RDONLY); -+ char *extn[] = {"", ".zip", ".ZIP"}; -+ int orig_src_fn_len = strlen(src_fn); -+ for(i = 0; (i < 3) && (src_fd == -1); i++) { -+ strcpy(src_fn + orig_src_fn_len, extn[i]); -+ src_fd = open(src_fn, O_RDONLY); -+ } -+ if (src_fd == -1) { -+ src_fn[orig_src_fn_len] = 0; -+ bb_error_msg_and_die("Cannot open %s, %s.zip, %s.ZIP", src_fn, src_fn, src_fn); -+ } - } - -- if ((base_dir) && (chdir(base_dir))) { -- bb_perror_msg_and_die("Couldnt chdir"); -+ /* Change dir if necessary */ -+ if (base_dir && chdir(base_dir)) { -+ bb_perror_msg_and_die("Cannot chdir"); - } - -- while (optind < argc) { -- archive_handle->filter = filter_accept_list; -- archive_handle->accept = llist_add_to(archive_handle->accept, argv[optind]); -- optind++; -- } -+ if (verbosity != v_silent) -+ printf("Archive: %s\n", src_fn); - - while (1) { - unsigned int magic; -- int dst_fd; -- -- /* TODO Endian issues */ -- archive_xread_all(archive_handle, &magic, 4); -- archive_handle->offset += 4; - -+ /* Check magic number */ -+ unzip_read(src_fd, &magic, 4); - if (magic == ZIP_CDS_MAGIC) { - break; -+ } else if (magic != ZIP_FILEHEADER_MAGIC) { -+ bb_error_msg_and_die("Invalid zip magic %08X", magic); - } -- else if (magic != ZIP_FILEHEADER_MAGIC) { -- bb_error_msg_and_die("Invlaide zip magic"); -- } -- -+ - /* Read the file header */ -- archive_xread_all(archive_handle, zip_header.raw, 26); -- archive_handle->offset += 26; -- archive_handle->file_header->mode = S_IFREG | 0777; -- -- if (zip_header.formated.method != 8) { -- bb_error_msg_and_die("Unsupported compression method %d\n", zip_header.formated.method); -+ unzip_read(src_fd, zip_header.raw, 26); -+ if ((zip_header.formated.method != 0) && (zip_header.formated.method != 8)) { -+ bb_error_msg_and_die("Unsupported compression method %d", zip_header.formated.method); - } - - /* Read filename */ -- archive_handle->file_header->name = xmalloc(zip_header.formated.filename_len + 1); -- archive_xread_all(archive_handle, archive_handle->file_header->name, zip_header.formated.filename_len); -- archive_handle->offset += zip_header.formated.filename_len; -- archive_handle->file_header->name[zip_header.formated.filename_len] = '\0'; -- -- /* Skip extra header bits */ -- archive_handle->file_header->size = zip_header.formated.extra_len; -- data_skip(archive_handle); -- archive_handle->offset += zip_header.formated.extra_len; -- -- /* Handle directories */ -- archive_handle->file_header->mode = S_IFREG | 0777; -- if (last_char_is(archive_handle->file_header->name, '/')) { -- archive_handle->file_header->mode ^= S_IFREG; -- archive_handle->file_header->mode |= S_IFDIR; -- } -- -- /* Data section */ -- archive_handle->file_header->size = zip_header.formated.cmpsize; -- if (archive_handle->action_data) { -- archive_handle->action_data(archive_handle); -- } else { -- dst_fd = bb_xopen(archive_handle->file_header->name, O_WRONLY | O_CREAT); -- inflate_init(zip_header.formated.cmpsize); -- inflate_unzip(archive_handle->src_fd, dst_fd); -- close(dst_fd); -- chmod(archive_handle->file_header->name, archive_handle->file_header->mode); -- -- /* Validate decompression - crc */ -- if (zip_header.formated.crc32 != (gunzip_crc ^ 0xffffffffL)) { -- bb_error_msg("Invalid compressed data--crc error"); -- } -- -- /* Validate decompression - size */ -- if (gunzip_bytes_out != zip_header.formated.ucmpsize) { -- bb_error_msg("Invalid compressed data--length error"); -- } -+ free(dst_fn); -+ dst_fn = xmalloc(zip_header.formated.filename_len + 1); -+ unzip_read(src_fd, dst_fn, zip_header.formated.filename_len); -+ dst_fn[zip_header.formated.filename_len] = 0; -+ -+ /* Skip extra header bytes */ -+ unzip_skip(src_fd, zip_header.formated.extra_len); -+ -+ if ((verbosity == v_list) && !list_header_done){ -+ printf(" Length Date Time Name\n"); -+ printf(" -------- ---- ---- ----\n"); -+ list_header_done = 1; - } - -- /* local file descriptor section */ -- archive_handle->offset += zip_header.formated.cmpsize; -- /* This ISNT unix time */ -- archive_handle->file_header->mtime = zip_header.formated.modtime | (zip_header.formated.moddate << 16); -- archive_handle->file_header->size = zip_header.formated.ucmpsize; -- total_size += archive_handle->file_header->size; -- total_entries++; -+ /* Filter zip entries */ -+ if (find_list_entry(reject, dst_fn) || -+ (accept && !find_list_entry(accept, dst_fn))) { /* Skip entry */ -+ i = 'n'; -+ -+ } else { /* Extract entry */ -+ total_size += zip_header.formated.ucmpsize; -+ -+ if (verbosity == v_list) { /* List entry */ -+ unsigned int dostime = zip_header.formated.modtime | (zip_header.formated.moddate << 16); -+ printf("%9u %02u-%02u-%02u %02u:%02u %s\n", -+ zip_header.formated.ucmpsize, -+ (dostime & 0x01e00000) >> 21, -+ (dostime & 0x001f0000) >> 16, -+ (((dostime & 0xfe000000) >> 25) + 1980) % 100, -+ (dostime & 0x0000f800) >> 11, -+ (dostime & 0x000007e0) >> 5, -+ dst_fn); -+ total_entries++; -+ i = 'n'; -+ -+ } else if (dst_fd == STDOUT_FILENO) { /* Extracting to STDOUT */ -+ i = -1; -+ -+ } else if (last_char_is(dst_fn, '/')) { /* Extract directory */ -+ if (stat(dst_fn, &stat_buf) == -1) { -+ if (errno != ENOENT) { -+ bb_perror_msg_and_die("Cannot stat '%s'",dst_fn); -+ } -+ if (verbosity == v_normal) { -+ printf(" creating: %s\n", dst_fn); -+ } -+ unzip_create_leading_dirs(dst_fn); -+ if (bb_make_directory(dst_fn, 0777, 0)) { -+ bb_error_msg_and_die("Failed to create directory"); -+ } -+ } else { -+ if (!S_ISDIR(stat_buf.st_mode)) { -+ bb_error_msg_and_die("'%s' exists but is not directory", dst_fn); -+ } -+ } -+ i = 'n'; -+ -+ } else { /* Extract file */ -+ _check_file: -+ if (stat(dst_fn, &stat_buf) == -1) { /* File does not exist */ -+ if (errno != ENOENT) { -+ bb_perror_msg_and_die("Cannot stat '%s'",dst_fn); -+ } -+ i = 'y'; -+ -+ } else { /* File already exists */ -+ if (overwrite == o_never) { -+ i = 'n'; -+ -+ } else if (S_ISREG(stat_buf.st_mode)) { /* File is regular file */ -+ if (overwrite == o_always) { -+ i = 'y'; -+ } else { -+ printf("replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: ", dst_fn); -+ if (!fgets(key_buf, 512, stdin)) { -+ bb_perror_msg_and_die("Cannot read input"); -+ } -+ i = key_buf[0]; -+ } -+ -+ } else { /* File is not regular file */ -+ bb_error_msg_and_die("'%s' exists but is not regular file",dst_fn); -+ } -+ } -+ } -+ } - -- archive_handle->action_header(archive_handle->file_header); -+ switch (i) { -+ case 'A': -+ overwrite = o_always; -+ case 'y': /* Open file and fall into unzip */ -+ unzip_create_leading_dirs(dst_fn); -+ dst_fd = bb_xopen(dst_fn, O_WRONLY | O_CREAT); -+ case -1: /* Unzip */ -+ if (verbosity == v_normal) { -+ printf(" inflating: %s\n", dst_fn); -+ } -+ unzip_extract(&zip_header, src_fd, dst_fd); -+ if (dst_fd != STDOUT_FILENO) { -+ /* closing STDOUT is potentially bad for future business */ -+ close(dst_fd); -+ } -+ break; - -+ case 'N': -+ overwrite = o_never; -+ case 'n': -+ /* Skip entry data */ -+ unzip_skip(src_fd, zip_header.formated.cmpsize); -+ break; -+ -+ case 'r': -+ /* Prompt for new name */ -+ printf("new name: "); -+ if (!fgets(key_buf, 512, stdin)) { -+ bb_perror_msg_and_die("Cannot read input"); -+ } -+ free(dst_fn); -+ dst_fn = bb_xstrdup(key_buf); -+ chomp(dst_fn); -+ goto _check_file; -+ -+ default: -+ printf("error: invalid response [%c]\n",(char)i); -+ goto _check_file; -+ } -+ - /* Data descriptor section */ - if (zip_header.formated.flags & 4) { - /* skip over duplicate crc, compressed size and uncompressed size */ -- unsigned char data_description[12]; -- archive_xread_all(archive_handle, data_description, 12); -- archive_handle->offset += 12; -+ unzip_skip(src_fd, 12); - } - } -- /* Central directory section */ - -- if (archive_handle->action_header == header_verbose_list_unzip) { -+ if (verbosity == v_list) { - printf(" -------- -------\n"); - printf("%9d %d files\n", total_size, total_entries); - } -- -+ - return(EXIT_SUCCESS); - } -+ -+/* END CODE */ -+/* -+Local Variables: -+c-file-style: "linux" -+c-basic-offset: 4 -+tab-width: 4 -+End: -+*/ -Index: archival/libunarchive/decompress_unzip.c -=================================================================== -RCS file: /var/cvs/busybox/archival/libunarchive/decompress_unzip.c,v -retrieving revision 1.35 -diff -u -r1.35 decompress_unzip.c ---- archival/libunarchive/decompress_unzip.c 25 Apr 2004 05:11:13 -0000 1.35 -+++ archival/libunarchive/decompress_unzip.c 18 Oct 2004 01:32:29 -0000 -@@ -16,6 +16,11 @@ - * - * read_gz interface + associated hacking by Laurence Anderson - * -+ * Fixed huft_build() so decoding end-of-block code does not grab more bits -+ * than necessary (this is required by unzip applet), added inflate_cleanup() -+ * to free leaked bytebuffer memory (used in unzip.c), and some minor style -+ * guide cleanups by Ed Clark -+ * - * 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 -@@ -116,26 +121,26 @@ - /* Copy lengths for literal codes 257..285 */ - static const unsigned short cplens[] = { - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, -- 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 -+ 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 - }; - - /* note: see note #13 above about the 258 in this list. */ - /* Extra bits for literal codes 257..285 */ - static const unsigned char cplext[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, -- 5, 5, 5, 0, 99, 99 -+ 5, 5, 5, 0, 99, 99 - }; /* 99==invalid */ - - /* Copy offsets for distance codes 0..29 */ - static const unsigned short cpdist[] = { - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, -- 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 -+ 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 - }; - - /* Extra bits for distance codes */ - static const unsigned char cpdext[] = { - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, -- 11, 11, 12, 12, 13, 13 -+ 11, 11, 12, 12, 13, 13 - }; - - /* Tables for deflate from PKZIP's appnote.txt. */ -@@ -184,8 +189,8 @@ - table_entry = (table_entry >> 1) ^ poly; - } else { - table_entry >>= 1; -- } -- } -+ } -+ } - gunzip_crc_table[i] = table_entry; - } - } -@@ -225,70 +230,59 @@ - * t: result: starting table - * m: maximum lookup bits, returns actual - */ --static int huft_build(unsigned int *b, const unsigned int n, -- const unsigned int s, const unsigned short *d, -- const unsigned char *e, huft_t ** t, int *m) -+int huft_build(unsigned int *b, const unsigned int n, -+ const unsigned int s, const unsigned short *d, -+ const unsigned char *e, huft_t ** t, int *m) - { -- unsigned a; /* counter for codes of length k */ -+ unsigned a; /* counter for codes of length k */ - unsigned c[BMAX + 1]; /* bit length count table */ -- unsigned f; /* i repeats in table every f entries */ -- int g; /* maximum code length */ -- int h; /* table level */ -+ unsigned eob_len; /* length of end-of-block code (value 256) */ -+ unsigned f; /* i repeats in table every f entries */ -+ int g; /* maximum code length */ -+ int h; /* table level */ - register unsigned i; /* counter, current code */ - register unsigned j; /* counter */ -- register int k; /* number of bits in current code */ -- int l; /* bits per table (returned in m) */ -+ register int k; /* number of bits in current code */ - register unsigned *p; /* pointer into c[], b[], or v[] */ -- register huft_t *q; /* points to current table */ -- huft_t r; /* table entry for structure assignment */ -- huft_t *u[BMAX]; /* table stack */ -- unsigned v[N_MAX]; /* values in order of bit length */ -- register int w; /* bits before this table == (l * h) */ -+ register huft_t *q; /* points to current table */ -+ huft_t r; /* table entry for structure assignment */ -+ huft_t *u[BMAX]; /* table stack */ -+ unsigned v[N_MAX]; /* values in order of bit length */ -+ int ws[BMAX+1]; /* bits decoded stack */ -+ register int w; /* bits decoded */ - unsigned x[BMAX + 1]; /* bit offsets, then code stack */ -- unsigned *xp; /* pointer into x */ -- int y; /* number of dummy codes added */ -- unsigned z; /* number of entries in current table */ -+ unsigned *xp; /* pointer into x */ -+ int y; /* number of dummy codes added */ -+ unsigned z; /* number of entries in current table */ -+ -+ /* Length of EOB code, if any */ -+ eob_len = n > 256 ? b[256] : BMAX; - - /* Generate counts for each bit length */ -- memset((void *) (c), 0, sizeof(c)); -+ memset((void *)c, 0, sizeof(c)); - p = b; - i = n; - do { -- c[*p]++; /* assume all entries <= BMAX */ -- p++; /* Can't combine with above line (Solaris bug) */ -+ c[*p]++; /* assume all entries <= BMAX */ -+ p++; /* Can't combine with above line (Solaris bug) */ - } while (--i); -- if (c[0] == n) { /* null input--all zero length codes */ -+ if (c[0] == n) { /* null input--all zero length codes */ - *t = (huft_t *) NULL; - *m = 0; - return 0; - } - - /* Find minimum and maximum length, bound *m by those */ -- l = *m; -- for (j = 1; j <= BMAX; j++) { -- if (c[j]) { -- break; -- } -- } -- k = j; /* minimum code length */ -- if ((unsigned) l < j) { -- l = j; -- } -- for (i = BMAX; i; i--) { -- if (c[i]) { -- break; -- } -- } -- g = i; /* maximum code length */ -- if ((unsigned) l > i) { -- l = i; -- } -- *m = l; -+ for (j = 1; (c[j] == 0) && (j <= BMAX); j++); -+ k = j; /* minimum code length */ -+ for (i = BMAX; (c[i] == 0) && i; i--); -+ g = i; /* maximum code length */ -+ *m = (*m < j) ? j : ((*m > i) ? i : *m); - - /* Adjust last length count to fill out codes, if needed */ - for (y = 1 << j; j < i; j++, y <<= 1) { - if ((y -= c[j]) < 0) { -- return 2; /* bad input: more codes than bits */ -+ return 2; /* bad input: more codes than bits */ - } - } - if ((y -= c[i]) < 0) { -@@ -300,7 +294,7 @@ - x[1] = j = 0; - p = c + 1; - xp = x + 2; -- while (--i) { /* note that i == g from above */ -+ while (--i) { /* note that i == g from above */ - *xp++ = (j += *p++); - } - -@@ -314,13 +308,13 @@ - } while (++i < n); - - /* Generate the Huffman codes and for each, make the table entries */ -- x[0] = i = 0; /* first Huffman code is zero */ -- p = v; /* grab values in bit order */ -- h = -1; /* no tables yet--level -1 */ -- w = -l; /* bits decoded == (l * h) */ -+ x[0] = i = 0; /* first Huffman code is zero */ -+ p = v; /* grab values in bit order */ -+ h = -1; /* no tables yet--level -1 */ -+ w = ws[0] = 0; /* bits decoded */ - u[0] = (huft_t *) NULL; /* just to keep compilers happy */ - q = (huft_t *) NULL; /* ditto */ -- z = 0; /* ditto */ -+ z = 0; /* ditto */ - - /* go through the bit lengths (k already is bits in shortest code) */ - for (; k <= g; k++) { -@@ -328,52 +322,52 @@ - while (a--) { - /* here i is the Huffman code of length k bits for value *p */ - /* make tables up to required level */ -- while (k > w + l) { -- h++; -- w += l; /* previous table always l bits */ -- -- /* compute minimum size table less than or equal to l bits */ -- z = (z = g - w) > (unsigned) l ? l : z; /* upper limit on table size */ -- if ((f = 1 << (j = k - w)) > a + 1) { /* try a k-w bit table *//* too few codes for k-w bit table */ -- f -= a + 1; /* deduct codes from patterns left */ -+ while (k > ws[h + 1]) { -+ w = ws[++h]; -+ -+ /* compute minimum size table less than or equal to *m bits */ -+ z = (z = g - w) > *m ? *m : z; /* upper limit on table size */ -+ if ((f = 1 << (j = k - w)) > a + 1) { /* try a k-w bit table */ -+ /* too few codes for k-w bit table */ -+ f -= a + 1; /* deduct codes from patterns left */ - xp = c + k; -- while (++j < z) { /* try smaller tables up to z bits */ -+ while (++j < z) { /* try smaller tables up to z bits */ - if ((f <<= 1) <= *++xp) { -- break; /* enough codes to use up j bits */ -+ break; /* enough codes to use up j bits */ - } -- f -= *xp; /* else deduct codes from patterns */ -+ f -= *xp; /* else deduct codes from patterns */ - } - } -+ j = (w + j > eob_len && w < eob_len) ? eob_len - w : j; /* make EOB code end at table */ - z = 1 << j; /* table entries for j-bit table */ -+ ws[h+1] = w + j; /* set bits decoded in stack */ - - /* allocate and link in new table */ - q = (huft_t *) xmalloc((z + 1) * sizeof(huft_t)); -- - *t = q + 1; /* link to list for huft_free() */ - *(t = &(q->v.t)) = NULL; - u[h] = ++q; /* table starts after link */ - - /* connect to last table, if there is one */ - if (h) { -- x[h] = i; /* save pattern for backing up */ -- r.b = (unsigned char) l; /* bits to dump before this table */ -- r.e = (unsigned char) (16 + j); /* bits in this table */ -- r.v.t = q; /* pointer to this table */ -- j = i >> (w - l); /* (get around Turbo C bug) */ -- u[h - 1][j] = r; /* connect to last table */ -+ x[h] = i; /* save pattern for backing up */ -+ r.b = (unsigned char) (w - ws[h - 1]); /* bits to dump before this table */ -+ r.e = (unsigned char) (16 + j); /* bits in this table */ -+ r.v.t = q; /* pointer to this table */ -+ j = (i & ((1 << w) - 1)) >> ws[h - 1]; -+ u[h - 1][j] = r; /* connect to last table */ - } - } -- -+ - /* set up table entry in r */ - r.b = (unsigned char) (k - w); - if (p >= v + n) { -- r.e = 99; /* out of values--invalid code */ -+ r.e = 99; /* out of values--invalid code */ - } else if (*p < s) { -- r.e = (unsigned char) (*p < 256 ? 16 : 15); /* 256 is end-of-block code */ -- r.v.n = (unsigned short) (*p); /* simple code is just the value */ -- p++; /* one compiler does not like *p++ */ -+ r.e = (unsigned char) (*p < 256 ? 16 : 15); /* 256 is EOB code */ -+ r.v.n = (unsigned short) (*p++); /* simple code is just the value */ - } else { -- r.e = (unsigned char) e[*p - s]; /* non-simple--look up in lists */ -+ r.e = (unsigned char) e[*p - s]; /* non-simple--look up in lists */ - r.v.n = d[*p++ - s]; - } - -@@ -391,11 +385,14 @@ - - /* backup over finished tables */ - while ((i & ((1 << w) - 1)) != x[h]) { -- h--; /* don't need to update q */ -- w -= l; -+ w = ws[--h]; - } - } - } -+ -+ /* return actual size of base table */ -+ *m = ws[1]; -+ - /* Return true (1) if we were given an incomplete table */ - return y != 0 && g != 1; - } -@@ -901,6 +898,11 @@ - bytebuffer_size = 0; - } - -+extern void inflate_cleanup(void) -+{ -+ free(bytebuffer); -+} -+ - extern int inflate_unzip(int in, int out) - { - ssize_t nwrote; -Index: include/unarchive.h -=================================================================== -RCS file: /var/cvs/busybox/include/unarchive.h,v -retrieving revision 1.23 -diff -u -r1.23 unarchive.h ---- include/unarchive.h 15 Mar 2004 08:28:38 -0000 1.23 -+++ include/unarchive.h 18 Oct 2004 01:32:30 -0000 -@@ -98,6 +98,7 @@ - - extern int uncompressStream(int src_fd, int dst_fd); - extern void inflate_init(unsigned int bufsize); -+extern void inflate_cleanup(void); - extern int inflate_unzip(int in, int out); - extern int inflate_gunzip(int in, int out); - -_________________________________________________________________ -Express yourself instantly with MSN Messenger! Download today it's FREE! -http://messenger.msn.com/ - - ---===============0046497949== -Content-Type: text/plain; charset="iso-8859-1" -MIME-Version: 1.0 -Content-Transfer-Encoding: quoted-printable -Content-Disposition: inline - -_______________________________________________ -busybox mailing list -busybox@mail.busybox.net -http://codepoet.org/mailman/listinfo/busybox - ---===============0046497949==-- diff --git a/packages/busybox/busybox-1.00/wrt54/.mtn2git_empty b/packages/busybox/busybox-1.00/wrt54/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.00/wrt54/defconfig b/packages/busybox/busybox-1.00/wrt54/defconfig deleted file mode 100644 index 7f1aef4ef9..0000000000 --- a/packages/busybox/busybox-1.00/wrt54/defconfig +++ /dev/null @@ -1,476 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="mipsel-uclibc-" -EXTRA_CFLAGS_OPTIONS="-Os " - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -# CONFIG_AR is not set -CONFIG_BUNZIP2=y -# CONFIG_CPIO is not set -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNZIP is not set - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -CONFIG_HOSTID=y -CONFIG_ID=y -# CONFIG_INSTALL is not set -CONFIG_LENGTH=y -CONFIG_LN=y -# CONFIG_LOGNAME is not set -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -# CONFIG_MKNOD is not set -CONFIG_MV=y -# CONFIG_OD is not set -# CONFIG_PRINTF is not set -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -# CONFIG_SEQ is not set -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -# CONFIG_STTY is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -CONFIG_FEATURE_TEE_USE_BLOCK_IO=y -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -# CONFIG_TTY is not set -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -# CONFIG_WATCH is not set -CONFIG_WC=y -# CONFIG_WHO is not set -# CONFIG_WHOAMI is not set -CONFIG_YES=y - -# -# Common options for cp and mv -# -CONFIG_FEATURE_PRESERVE_HARDLINKS=y - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -CONFIG_CLEAR=y -# CONFIG_DEALLOCVT is not set -# CONFIG_DUMPKMAP is not set -# CONFIG_GETKEY is not set -# CONFIG_LOADFONT is not set -# CONFIG_LOADKMAP is not set -# CONFIG_OPENVT is not set -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -# CONFIG_READLINK is not set -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -# CONFIG_FEATURE_FIND_MTIME is not set -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -# CONFIG_FEATURE_FIND_NEWER is not set -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -CONFIG_INIT=y -CONFIG_FEATURE_USE_INITTAB=y -# CONFIG_FEATURE_INITRD is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -CONFIG_REBOOT=y -CONFIG_MESG=y - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -# CONFIG_FEATURE_U_W_TMP is not set -CONFIG_LOGIN=y -CONFIG_FEATURE_SECURETTY=y -CONFIG_PASSWD=y -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Common options for adduser, deluser, login, su -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -CONFIG_CROND=y -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -CONFIG_CRONTAB=y -# CONFIG_DC is not set -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -CONFIG_FEATURE_2_4_MODULES=y -# CONFIG_FEATURE_2_6_MODULES is not set -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -CONFIG_LSMOD=y -CONFIG_FEATURE_QUERY_MODULE_INTERFACE=y -# CONFIG_MODPROBE is not set -CONFIG_RMMOD=y -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -CONFIG_ARPING=y -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_HOSTNAME is not set -CONFIG_HTTPD=y -# CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY is not set -CONFIG_FEATURE_HTTPD_BASIC_AUTH=y -CONFIG_FEATURE_HTTPD_AUTH_MD5=y -CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y -# CONFIG_FEATURE_HTTPD_SETUID is not set -CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y -CONFIG_FEATURE_HTTPD_CGI=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -# CONFIG_IP is not set -CONFIG_IPCALC=y -CONFIG_FEATURE_IPCALC_FANCY=y -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -# CONFIG_TELNET is not set -# CONFIG_TELNETD is not set -# CONFIG_TFTP is not set -CONFIG_TRACEROUTE=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -CONFIG_VCONFIG=y -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -# CONFIG_FEATURE_UDHCP_SYSLOG is not set -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -CONFIG_PS=y -# CONFIG_RENICE is not set -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -CONFIG_SYSCTL=y - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_PIPE_OPTIMIZATION=y -CONFIG_FEATURE_BUILTIN_TEST=y -CONFIG_FEATURE_BUILTIN_ECHO=y -CONFIG_FEATURE_BUILTIN_PIDOF=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -# CONFIG_FEATURE_SH_EXTRA_QUIET is not set -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=15 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -# CONFIG_FBSET is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -# CONFIG_FDISK is not set -FDISK_SUPPORT_LARGE_DISKS=y -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -# CONFIG_HWCLOCK is not set -# CONFIG_LOSETUP is not set -# CONFIG_MKSWAP is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_SWAPONOFF is not set -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.00/xargs-double-size.patch b/packages/busybox/busybox-1.00/xargs-double-size.patch deleted file mode 100644 index c7dc900cdd..0000000000 --- a/packages/busybox/busybox-1.00/xargs-double-size.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- busybox-1.00/findutils/xargs.c.org 2006-09-19 18:18:17.084592997 +0200 -+++ busybox-1.00/findutils/xargs.c 2006-09-19 18:18:09.820275793 +0200 -@@ -466,8 +466,8 @@ - have it at 1 meg). Things will work fine with a large ARG_MAX but it - will probably hurt the system more than it needs to; an array of this - size is allocated. */ -- if (orig_arg_max > 20 * 1024) -- orig_arg_max = 20 * 1024; -+ if (orig_arg_max > 40 * 1024) -+ orig_arg_max = 40 * 1024; - n_max_chars = orig_arg_max; - } - max_chars = xmalloc(n_max_chars); diff --git a/packages/busybox/busybox-1.01/.mtn2git_empty b/packages/busybox/busybox-1.01/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.01/add-getkey-applet.patch b/packages/busybox/busybox-1.01/add-getkey-applet.patch deleted file mode 100644 index 6ce0df21bd..0000000000 --- a/packages/busybox/busybox-1.01/add-getkey-applet.patch +++ /dev/null @@ -1,157 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- /dev/null -+++ busybox-1.00/console-tools/getkey.c -@@ -0,0 +1,94 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * getkey.c - Michael 'Mickey' Lauer -+ * -+ * Version 0.1 -+ * -+ * A simple keygrapper. Displays a configurable message and waits a dedicated number -+ * of seconds for a keypress. Sets the exit code accordingly (SUCCESS on keypress). -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "busybox.h" -+ -+extern int getkey_main(int argc, char **argv) -+{ -+ int status = EXIT_FAILURE; -+ -+ if ( argc < 2 ) -+ { -+ bb_show_usage(); -+ } -+ -+ /* -+ * If no terminal is attached it is quite useless -+ * to treat it like one. -+ */ -+ if( !isatty(STDIN_FILENO) ) -+ { -+ goto error_hard; -+ } -+ -+ //bb_printf( "DEBUG: time = '%s'\n", argv[1] ); -+ //bb_printf( "DEBUG: mesg = '%s'\n", argv[2] ); -+ -+ struct termios orig; -+ struct termios attr; -+ -+ if ( tcgetattr(STDIN_FILENO, &orig) == -1 ) -+ { -+ goto error_hard; -+ } -+ -+ attr = orig; -+ attr.c_cc[VMIN] = 0; -+ attr.c_cc[VTIME] = 0; -+ attr.c_iflag |= INLCR; -+ attr.c_oflag |= OPOST|ONLCR; -+ attr.c_cflag &= ~PARENB; -+ attr.c_lflag &= ~(ICANON/*|ECHO*/); -+ if ( tcsetattr(STDIN_FILENO,TCSANOW,&attr) == -1 ) -+ { -+ goto error_hard; -+ } -+ -+ fd_set rfds; -+ struct timeval tv; -+ int retval; -+ -+ FD_ZERO(&rfds); -+ FD_SET(0, &rfds); -+ -+ tv.tv_sec = atoi( argv[1] ); -+ tv.tv_usec = 0; -+ -+ if ( argc == 3 ) -+ { -+ bb_printf( argv[2], tv.tv_sec ); -+ bb_printf( "\n" ); -+ fflush(stdout); -+ } -+ retval = select(1, &rfds, NULL, NULL, &tv); -+ if (retval > 0) -+ { -+ status = EXIT_SUCCESS; -+ } -+ -+ if (tcsetattr(STDIN_FILENO,TCSANOW,&orig) == -1 ) -+ { -+ goto error_hard; -+ } -+ -+ return status; -+ -+error_hard : -+ return EXIT_FAILURE; -+}; -+ ---- busybox-1.00/console-tools/Makefile.in~add-getkey-applet.patch -+++ busybox-1.00/console-tools/Makefile.in -@@ -28,6 +28,7 @@ - CONSOLETOOLS_DIR-$(CONFIG_CLEAR) += clear.o - CONSOLETOOLS_DIR-$(CONFIG_DEALLOCVT) += deallocvt.o - CONSOLETOOLS_DIR-$(CONFIG_DUMPKMAP) += dumpkmap.o -+CONSOLETOOLS_DIR-$(CONFIG_GETKEY) += getkey.o - CONSOLETOOLS_DIR-$(CONFIG_LOADFONT) += loadfont.o - CONSOLETOOLS_DIR-$(CONFIG_LOADKMAP) += loadkmap.o - CONSOLETOOLS_DIR-$(CONFIG_OPENVT) += openvt.o ---- busybox-1.00/console-tools/Config.in~add-getkey-applet.patch -+++ busybox-1.00/console-tools/Config.in -@@ -31,6 +31,14 @@ - This program dumps the kernel's keyboard translation table to - stdout, in binary format. You can then use loadkmap to load it. - -+config CONFIG_GETKEY -+ bool "getkey" -+ default n -+ help -+ This program displays a configurable message and waits -+ a dedicated number of seconds for a keypress. It sets -+ the exit code accordingly, i.e. SUCCESS if there was a keypress. -+ - config CONFIG_LOADFONT - bool "loadfont" - default n ---- busybox-1.00/include/applets.h~add-getkey-applet.patch -+++ busybox-1.00/include/applets.h -@@ -223,6 +223,9 @@ - #ifdef CONFIG_FTPPUT - APPLET(ftpput, ftpgetput_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER) - #endif -+#ifdef CONFIG_GETKEY -+ APPLET(getkey, getkey_main, _BB_DIR_SBIN, _BB_SUID_NEVER) -+#endif - #ifdef CONFIG_GETOPT - APPLET(getopt, getopt_main, _BB_DIR_BIN, _BB_SUID_NEVER) - #endif ---- busybox-1.00/include/usage.h~add-getkey-applet.patch -+++ busybox-1.00/include/usage.h -@@ -734,6 +734,13 @@ - "\t-p, --password Password to be used\n" \ - "\t-P, --port Port number to be used" - -+#define getkey_trivial_usage \ -+ "time [message]" -+#define getkey_full_usage \ -+ "Display a message and wait for a keypress." -+#define getkey_example_usage \ -+ "$ getkey 5 'Press a key within %d seconds to interrupt autoboot.'" -+ - #define getopt_trivial_usage \ - "[OPTIONS]..." - #define getopt_full_usage \ diff --git a/packages/busybox/busybox-1.01/angstrom/.mtn2git_empty b/packages/busybox/busybox-1.01/angstrom/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.01/angstrom/defconfig b/packages/busybox/busybox-1.01/angstrom/defconfig deleted file mode 100644 index 34a5804a4d..0000000000 --- a/packages/busybox/busybox-1.01/angstrom/defconfig +++ /dev/null @@ -1,475 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -# CONFIG_FEATURE_DEVFS is not set -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_LFS=y -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNZIP is not set - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -# CONFIG_FEATURE_LS_RECURSIVE is not set -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -# CONFIG_DUMPKMAP is not set -CONFIG_GETKEY=y -# CONFIG_LOADFONT is not set -# CONFIG_LOADKMAP is not set -CONFIG_OPENVT=y -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_TIME is not set -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -CONFIG_FEATURE_2_4_MODULES=y -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS=y -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -CONFIG_FEATURE_INSMOD_LOAD_MAP=y -CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL=y -CONFIG_LSMOD=y -CONFIG_MODPROBE=y -CONFIG_RMMOD=y -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_FEATURE_TFTP_DEBUG is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_PIDOF is not set -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -CONFIG_LOSETUP=y -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -CONFIG_SWAPONOFF=y -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.01/below.patch b/packages/busybox/busybox-1.01/below.patch deleted file mode 100644 index ec97b29962..0000000000 --- a/packages/busybox/busybox-1.01/below.patch +++ /dev/null @@ -1,49 +0,0 @@ -Index: modutils/modprobe.c -=================================================================== -RCS file: /var/cvs/busybox/modutils/modprobe.c,v -retrieving revision 1.41 -diff -u -r1.41 modprobe.c ---- busybox/modutils/modprobe.c 24 Sep 2004 09:18:55 -0000 1.41 -+++ busybox/modutils/modprobe.c 29 Dec 2004 11:56:07 -0000 -@@ -357,6 +357,41 @@ - } - } - } -+ else if ((strncmp (buffer, "below", 5) == 0) && isspace (buffer[5])) { -+ char *mod, *deps; -+ if (parse_tag_value (buffer + 6, &mod, &deps)) { -+ struct dep_t *dt; -+ -+ for (dt = first; dt; dt = dt->m_next) { -+ if (strcmp (dt->m_name, mod) == 0) -+ break; -+ } -+ if (dt) { -+ char *pp; -+ char *name; -+ -+ pp = name = deps; -+ -+ for (;;) { -+ while (*pp != 0 && !isspace (*pp)) -+ pp++; -+ if (isspace (*pp)) -+ *(pp++) = 0; -+ -+ dt->m_depcnt++; -+ dt->m_deparr = (char **) xrealloc (dt->m_deparr, -+ sizeof (char *) * dt->m_depcnt); -+ dt->m_deparr[dt->m_depcnt - 1] = bb_xstrdup (name); -+ -+ while (isspace (*pp)) -+ pp++; -+ name = pp; -+ if (*pp == 0) -+ break; -+ } -+ } -+ } -+ } - } - } - close ( fd ); diff --git a/packages/busybox/busybox-1.01/defconfig b/packages/busybox/busybox-1.01/defconfig deleted file mode 100644 index 8b8212c54a..0000000000 --- a/packages/busybox/busybox-1.01/defconfig +++ /dev/null @@ -1,476 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_LFS=y -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -# CONFIG_FEATURE_LS_RECURSIVE is not set -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_TIME is not set -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -CONFIG_FEATURE_2_4_MODULES=y -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS=y -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -CONFIG_FEATURE_INSMOD_LOAD_MAP=y -CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL=y -CONFIG_LSMOD=y -CONFIG_MODPROBE=y -CONFIG_RMMOD=y -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -CONFIG_UDHCPD=y -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_PIDOF is not set -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -CONFIG_LOSETUP=y -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -CONFIG_SWAPONOFF=y -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.01/dhcp-hostname.patch b/packages/busybox/busybox-1.01/dhcp-hostname.patch deleted file mode 100644 index e0adea662e..0000000000 --- a/packages/busybox/busybox-1.01/dhcp-hostname.patch +++ /dev/null @@ -1,30 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- busybox-1.01/networking/udhcp/dhcpc.c~dhcp-hostname -+++ busybox-1.01/networking/udhcp/dhcpc.c -@@ -193,6 +193,7 @@ - int max_fd; - int sig; - int no_clientid = 0; -+ char hostbuf[256]; /* SUSv2: hostnames are <= 255 bytes */ - - static const struct option arg_options[] = { - {"clientid", required_argument, 0, 'c'}, -@@ -211,6 +212,14 @@ - {0, 0, 0, 0} - }; - -+ if (gethostname (hostbuf, sizeof (hostbuf)) == 0) { -+ len = strlen (hostbuf); -+ client_config.hostname = xmalloc (len + 2); -+ client_config.hostname[OPT_CODE] = DHCP_HOST_NAME; -+ client_config.hostname[OPT_LEN] = len; -+ strncpy(client_config.hostname + 2, hostbuf, len); -+ } -+ - /* get options */ - while (1) { - int option_index = 0; diff --git a/packages/busybox/busybox-1.01/dhcpretrytime.patch b/packages/busybox/busybox-1.01/dhcpretrytime.patch deleted file mode 100644 index e41ea9de55..0000000000 --- a/packages/busybox/busybox-1.01/dhcpretrytime.patch +++ /dev/null @@ -1,81 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- busybox-1.01/networking/udhcp/dhcpc.c~dhcpretrytime -+++ busybox-1.01/networking/udhcp/dhcpc.c -@@ -48,6 +48,7 @@ - static unsigned long requested_ip; /* = 0 */ - static unsigned long server_addr; - static unsigned long timeout; -+static unsigned long retrytime = 60; - static int packet_num; /* = 0 */ - static int fd = -1; - -@@ -91,6 +92,7 @@ - " -r, --request=IP IP address to request (default: none)\n" - " -s, --script=file Run file at dhcp events (default:\n" - " " DEFAULT_SCRIPT ")\n" -+" -t, --retrytime time to retry DHCP request (default 60s)\n") - " -v, --version Display version\n" - ); - exit(0); -@@ -208,6 +210,7 @@ - {"quit", no_argument, 0, 'q'}, - {"request", required_argument, 0, 'r'}, - {"script", required_argument, 0, 's'}, -+ {"retrytime", required_argument, 0, 't'}, - {"version", no_argument, 0, 'v'}, - {0, 0, 0, 0} - }; -@@ -223,7 +226,7 @@ - /* get options */ - while (1) { - int option_index = 0; -- c = getopt_long(argc, argv, "c:CfbH:h:i:np:qr:s:v", arg_options, &option_index); -+ c = getopt_long(argc, argv, "c:fbH:h:i:np:qr:s:t:v", arg_options, &option_index); - if (c == -1) break; - - switch (c) { -@@ -274,6 +277,9 @@ - case 's': - client_config.script = optarg; - break; -+ case 't': -+ retrytime = atol(optarg); -+ break; - case 'v': - printf("udhcpcd, version %s\n\n", VERSION); - return 0; -@@ -353,7 +359,7 @@ - } - /* wait to try again */ - packet_num = 0; -- timeout = now + 60; -+ timeout = now + retrytime; - } - break; - case RENEW_REQUESTED: ---- busybox-1.01/networking/ifupdown.c~dhcpretrytime -+++ busybox-1.01/networking/ifupdown.c -@@ -541,7 +541,7 @@ - static int dhcp_up(struct interface_defn_t *ifd, execfn *exec) - { - if (execable("/sbin/udhcpc")) { -- return( execute("udhcpc -n -p /var/run/udhcpc.%iface%.pid -i " -+ return( execute("udhcpc -b -p /var/run/udhcpc.%iface%.pid -i " - "%iface% [[-H %hostname%]] [[-c %clientid%]]", ifd, exec)); - } else if (execable("/sbin/pump")) { - return( execute("pump -i %iface% [[-h %hostname%]] [[-l %leasehours%]]", ifd, exec)); -@@ -561,8 +561,8 @@ - /* SIGUSR2 forces udhcpc to release the current lease and go inactive, - * and SIGTERM causes udhcpc to exit. Signals are queued and processed - * sequentially so we don't need to sleep */ -- result = execute("kill -USR2 `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null", ifd, exec); -- result += execute("kill -TERM `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null", ifd, exec); -+ result = execute("kill -USR2 `cat /var/run/udhcpc.%iface%.pid 2>/dev/null` 2>/dev/null", ifd, exec); -+ result += execute("kill -TERM `cat /var/run/udhcpc.%iface%.pid 2>/dev/null` 2>/dev/null", ifd, exec); - } else if (execable("/sbin/pump")) { - result = execute("pump -i %iface% -k", ifd, exec); - } else if (execable("/sbin/dhclient")) { diff --git a/packages/busybox/busybox-1.01/familiar/.mtn2git_empty b/packages/busybox/busybox-1.01/familiar/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.01/familiar/defconfig b/packages/busybox/busybox-1.01/familiar/defconfig deleted file mode 100644 index 49dd403eb5..0000000000 --- a/packages/busybox/busybox-1.01/familiar/defconfig +++ /dev/null @@ -1,470 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_LFS=y -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNZIP is not set - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -# CONFIG_FEATURE_LS_RECURSIVE is not set -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_TIME is not set -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -CONFIG_FEATURE_2_4_MODULES=y -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS=y -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -CONFIG_FEATURE_INSMOD_LOAD_MAP=y -CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL=y -CONFIG_LSMOD=y -CONFIG_MODPROBE=y -CONFIG_RMMOD=y -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_FEATURE_TFTP_DEBUG is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_PIDOF is not set -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -# CONFIG_FDISK is not set -FDISK_SUPPORT_LARGE_DISKS=y -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -CONFIG_LOSETUP=y -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -CONFIG_SWAPONOFF=y -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.01/fbset.patch b/packages/busybox/busybox-1.01/fbset.patch deleted file mode 100644 index d0609ce6f7..0000000000 --- a/packages/busybox/busybox-1.01/fbset.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- busybox/util-linux/fbset.c~ 2004-07-03 16:24:23.000000000 +0100 -+++ busybox/util-linux/fbset.c 2004-12-30 20:09:26.000000000 +0000 -@@ -337,7 +337,7 @@ - { - struct fb_var_screeninfo var, varset; - int fh, i; -- char *fbdev = DEFAULTFBDEV; -+ char *fbdev = NULL; - char *modefile = DEFAULTFBMODE; - char *thisarg, *mode = NULL; - -@@ -404,7 +404,12 @@ - } - } - -+ if (fbdev == NULL) -+ fbdev = DEFAULTFBDEV; - if ((fh = open(fbdev, O_RDONLY)) < 0) -+#ifdef CONFIG_FEATURE_DEVFS -+ if ((fh = open("/dev/fb0", O_RDONLY)) < 0) -+#endif - bb_perror_msg_and_die("fbset(open)"); - if (ioctl(fh, FBIOGET_VSCREENINFO, &var)) - bb_perror_msg_and_die("fbset(ioctl)"); diff --git a/packages/busybox/busybox-1.01/hdparm_M.patch b/packages/busybox/busybox-1.01/hdparm_M.patch deleted file mode 100644 index 170906535e..0000000000 --- a/packages/busybox/busybox-1.01/hdparm_M.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff -Naur busybox-1.00/miscutils/hdparm.c busybox-1.00-patched/miscutils/hdparm.c ---- busybox-1.00/miscutils/hdparm.c 2004-07-21 00:53:59.000000000 +0200 -+++ busybox-1.00-patched/miscutils/hdparm.c 2004-10-21 15:17:13.000000000 +0200 -@@ -1254,6 +1254,7 @@ - static unsigned long set_sleepnow = 0, get_sleepnow = 0; - static unsigned long get_powermode = 0; - static unsigned long set_apmmode = 0, get_apmmode= 0, apmmode = 0; -+static unsigned long set_acoustic = 0, get_acoustic = 0, acoustic = 0; - #endif - #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY - static int get_IDentity = 0; -@@ -2123,6 +2124,20 @@ - } - bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD"); - } -+ if (set_acoustic) -+ { -+ no_scsi(); -+ acoustic=check_if_min_and_set_val(acoustic,0); -+ acoustic=check_if_maj_and_set_val(acoustic,254); -+ if_printf(get_acoustic," setting AAM level to 0x%02lX (%ld)\n", acoustic, acoustic); -+ bb_ioctl(fd, HDIO_SET_ACOUSTIC, (int*)acoustic,"HDIO_SET_ACOUSTIC"); -+ } -+ if (get_acoustic) -+ { -+ no_scsi(); -+ bb_ioctl(fd, HDIO_GET_ACOUSTIC, (unsigned long*)&parm,"HDIO_GET_ACOUSTIC"); -+ printf(" acoustic = %2ld (128=quiet ... 254=fast)\n", parm); -+ } - if (set_wcache) - { - #ifdef DO_FLUSHCACHE -@@ -2831,6 +2846,13 @@ - p = *argv++, --argc; - p=GET_NUMBER(p,&set_readahead,&Xreadahead); - break; -+ case 'M': -+ get_acoustic = noisy; -+ noisy = 1; -+ if (!*p && argc && isalnum(**argv)) -+ p = *argv++, --argc; -+ p=GET_NUMBER(p,&set_acoustic,&acoustic); -+ break; - case 'B': - get_apmmode = noisy; - noisy = 1; - diff --git a/packages/busybox/busybox-1.01/ifupdown-spurious-environ.patch b/packages/busybox/busybox-1.01/ifupdown-spurious-environ.patch deleted file mode 100644 index 8753315f2c..0000000000 --- a/packages/busybox/busybox-1.01/ifupdown-spurious-environ.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- busybox-1.00/networking/ifupdown.c.old 2005-06-11 19:51:59.000000000 +0100 -+++ busybox-1.00/networking/ifupdown.c 2005-06-11 19:52:19.000000000 +0100 -@@ -148,6 +148,9 @@ - struct mapping_defn_t *mappings; - }; - -+/* XXX */ -+#define environ local_environ -+ - static char no_act = 0; - static char verbose = 0; - static char **environ = NULL; diff --git a/packages/busybox/busybox-1.01/iproute-flush-cache.patch b/packages/busybox/busybox-1.01/iproute-flush-cache.patch deleted file mode 100644 index f8becc3390..0000000000 --- a/packages/busybox/busybox-1.01/iproute-flush-cache.patch +++ /dev/null @@ -1,23 +0,0 @@ -Index: networking/libiproute/iproute.c -=================================================================== -RCS file: /var/cvs/busybox/networking/libiproute/iproute.c,v -retrieving revision 1.14 -diff -u -r1.14 iproute.c ---- networking/libiproute/iproute.c 11 Aug 2004 08:10:58 -0000 1.14 -+++ networking/libiproute/iproute.c 30 Nov 2004 20:43:44 -0000 -@@ -537,6 +537,15 @@ - } else if (matches(*argv, "match") == 0) { - NEXT_ARG(); - get_prefix(&filter.mdst, *argv, do_ipv6); -+ } else if (matches(*argv, "table") == 0) { -+ NEXT_ARG(); -+ if (matches(*argv, "cache") == 0) { -+ filter.tb = -1; -+ } else if (matches(*argv, "main") != 0) { -+ invarg("invalid \"table\"", *argv); -+ } -+ } else if (matches(*argv, "cache") == 0) { -+ filter.tb = -1; - } else { - if (matches(*argv, "exact") == 0) { - NEXT_ARG(); diff --git a/packages/busybox/busybox-1.01/mount-all-type.patch b/packages/busybox/busybox-1.01/mount-all-type.patch deleted file mode 100644 index 476094a804..0000000000 --- a/packages/busybox/busybox-1.01/mount-all-type.patch +++ /dev/null @@ -1,84 +0,0 @@ ---- busybox-1.00/.pc/mount-all-type.patch/util-linux/mount.c 2004-08-02 17:14:02.000000000 -0700 -+++ busybox-1.00/util-linux/mount.c 2005-05-13 00:17:19.054232796 -0700 -@@ -364,6 +364,56 @@ - exit(EXIT_SUCCESS); - } - -+/* Does this file system type, from /etc/fstab, match the given -+ * -t option value? -+ */ -+static int match_fs(const char *option, const char *type) -+{ -+ const int len = strlen(type); -+ const int no = option[0] == 'n' && option[1] == 'o'; -+ const char *optp = option; -+ -+ if (len > 0) do { -+ const char *match = strstr(optp, type); -+ -+ if (match == NULL) { -+ /* No match, but if the option string starts 'no' no match -+ * means yes. -+ */ -+ return no; -+ } -+ -+ /* Match, may be partial, check for end-of-type in option string. */ -+ if (match[len] == 0 || match[len] == ',') { -+ /* Ok, check for type or notype. */ -+ if (match == option) { -+ /* Exact match at start (can't be 'no') */ -+ return 1; -+ } -+ if (match > option+1) { -+ if (match[-1] == ',') { -+ /* Exact match in middle, might be 'no' */ -+ return !no; -+ } -+ if (match == option+2 && no) { -+ /* Exact match to 'notype' at start. */ -+ return 0; -+ } -+ if (match > option+2 && match[-3] == ',' && -+ match[-2] == 'n' && match[-1] == 'o') { -+ return 0; -+ } -+ } -+ } -+ -+ /* Look for another match. */ -+ optp = match+1; -+ } while (1); -+ -+ /* zero length type in fstab (impossible?), don't match it. */ -+ return 0; -+} -+ - extern int mount_main(int argc, char **argv) - { - struct stat statbuf; -@@ -371,6 +421,7 @@ - char *extra_opts; - int flags = 0; - char *filesystemType = "auto"; -+ char *filesystemOption = 0; - int got_filesystemType = 0; - char *device = xmalloc(PATH_MAX); - char *directory = xmalloc(PATH_MAX); -@@ -393,6 +444,7 @@ - break; - case 't': - filesystemType = optarg; -+ filesystemOption = optarg; - got_filesystemType = 1; - break; - case 'w': -@@ -460,6 +512,8 @@ - - strcpy(device, m->mnt_fsname); - strcpy(directory, m->mnt_dir); -+ if (all && filesystemOption != 0 && !match_fs(filesystemOption, m->mnt_type)) -+ continue; - filesystemType = bb_xstrdup(m->mnt_type); - singlemount: - extra_opts = string_flags; diff --git a/packages/busybox/busybox-1.01/nylon/.mtn2git_empty b/packages/busybox/busybox-1.01/nylon/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.01/nylon/defconfig b/packages/busybox/busybox-1.01/nylon/defconfig deleted file mode 100644 index 7efd042cdc..0000000000 --- a/packages/busybox/busybox-1.01/nylon/defconfig +++ /dev/null @@ -1,458 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -CONFIG_FEATURE_SUID_CONFIG=y -CONFIG_FEATURE_SUID_CONFIG_QUIET=y -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_LFS is not set -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -CONFIG_FEATURE_AR_LONG_FILENAMES=y -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -# CONFIG_FEATURE_TAR_BZIP2 is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -CONFIG_FEATURE_TAR_COMPRESS=y -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -CONFIG_UNCOMPRESS=y -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Common options for dpkg and dpkg_deb -# -CONFIG_FEATURE_DEB_TAR_GZ=y -CONFIG_FEATURE_DEB_TAR_BZ2=y - -# -# Coreutils -# -CONFIG_BASENAME=y -CONFIG_CAL=y -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -CONFIG_CMP=y -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -CONFIG_DOS2UNIX=y -CONFIG_UNIX2DOS=y -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -CONFIG_FOLD=y -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -CONFIG_HOSTID=y -CONFIG_ID=y -CONFIG_INSTALL=y -CONFIG_LENGTH=y -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -CONFIG_SHA1SUM=y -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -CONFIG_FEATURE_TEE_USE_BLOCK_IO=y -# CONFIG_TEST is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -CONFIG_UUDECODE=y -CONFIG_UUENCODE=y -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -CONFIG_CLEAR=y -# CONFIG_DEALLOCVT is not set -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -# CONFIG_LOADFONT is not set -CONFIG_LOADKMAP=y -# CONFIG_OPENVT is not set -CONFIG_RESET=y -CONFIG_SETKEYCODES=y - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -CONFIG_PIPE_PROGRESS=y -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -CONFIG_FEATURE_FIND_INUM=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -CONFIG_CROND=y -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -CONFIG_CRONTAB=y -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -CONFIG_TIME=y -CONFIG_WATCHDOG=y - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_MODPROBE is not set -# CONFIG_RMMOD is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -CONFIG_ARPING=y -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -CONFIG_HTTPD=y -# CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY is not set -CONFIG_FEATURE_HTTPD_BASIC_AUTH=y -CONFIG_FEATURE_HTTPD_AUTH_MD5=y -CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y -CONFIG_FEATURE_HTTPD_SETUID=y -CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y -CONFIG_FEATURE_HTTPD_CGI=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y -CONFIG_FEATURE_IFCONFIG_HW=y -CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -CONFIG_INETD=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_ECHO=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DISCARD=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_TIME=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DAYTIME=y -CONFIG_FEATURE_INETD_SUPPORT_BILTIN_CHARGEN=y -# CONFIG_IP is not set -CONFIG_IPCALC=y -CONFIG_FEATURE_IPCALC_FANCY=y -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -CONFIG_NAMEIF=y -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -CONFIG_FEATURE_TELNET_TTYPE=y -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -CONFIG_FEATURE_TFTP_BLOCKSIZE=y -# CONFIG_FEATURE_TFTP_DEBUG is not set -CONFIG_TRACEROUTE=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -CONFIG_VCONFIG=y -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -CONFIG_UDHCPD=y -CONFIG_UDHCPC=y -CONFIG_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -CONFIG_SYSCTL=y - -# -# Another Bourne-like Shell -# -# CONFIG_FEATURE_SH_IS_ASH is not set -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -CONFIG_FEATURE_SH_IS_NONE=y -# CONFIG_ASH is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -CONFIG_FREERAMDISK=y -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -# CONFIG_HWCLOCK is not set -CONFIG_LOSETUP=y -CONFIG_MKSWAP=y -# CONFIG_MORE is not set -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -CONFIG_SWAPONOFF=y -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.01/openmn/.mtn2git_empty b/packages/busybox/busybox-1.01/openmn/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.01/openmn/defconfig b/packages/busybox/busybox-1.01/openmn/defconfig deleted file mode 100644 index f98af91853..0000000000 --- a/packages/busybox/busybox-1.01/openmn/defconfig +++ /dev/null @@ -1,475 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_LFS is not set -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -CONFIG_CMP=y -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -# CONFIG_FEATURE_LS_COLOR is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -# CONFIG_FEATURE_FANCY_TAIL is not set -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETKEYCODES=y - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -CONFIG_ADDGROUP=y -CONFIG_DELGROUP=y -CONFIG_ADDUSER=y -CONFIG_DELUSER=y -CONFIG_GETTY=y -CONFIG_FEATURE_U_W_TMP=y -CONFIG_LOGIN=y -# CONFIG_FEATURE_SECURETTY is not set -CONFIG_PASSWD=y -CONFIG_SU=y -CONFIG_SULOGIN=y -CONFIG_VLOCK=y - -# -# Common options for adduser, deluser, login, su -# -CONFIG_FEATURE_SHADOWPASSWDS=y - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -CONFIG_FEATURE_2_4_MODULES=y -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS=y -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -CONFIG_FEATURE_INSMOD_LOAD_MAP=y -CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL=y -CONFIG_LSMOD=y -CONFIG_MODPROBE=y -CONFIG_RMMOD=y -# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set - -# -# Networking Utilities -# -# CONFIG_FEATURE_IPV6 is not set -CONFIG_ARPING=y -# CONFIG_FTPGET is not set -CONFIG_FTPPUT=y -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -# CONFIG_FEATURE_IP_TUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set -# CONFIG_TELNETD is not set -# CONFIG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -# CONFIG_FEATURE_WGET_STATUSBAR is not set -CONFIG_FEATURE_WGET_AUTHENTICATION=y -# CONFIG_FEATURE_WGET_IP6_LITERAL is not set - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_PIDOF is not set -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=31 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -# CONFIG_FEATURE_REMOTE_LOG is not set -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -# CONFIG_FBSET is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -# FDISK_SUPPORT_LARGE_DISKS is not set -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -CONFIG_GETOPT=y -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -CONFIG_LOSETUP=y -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -# CONFIG_SWAPONOFF is not set -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.01/readlink.patch b/packages/busybox/busybox-1.01/readlink.patch deleted file mode 100644 index 0c5431085a..0000000000 --- a/packages/busybox/busybox-1.01/readlink.patch +++ /dev/null @@ -1,85 +0,0 @@ -diff -p -u -r1.7 Config.in ---- busybox-1.00/debianutils/Config.in 15 Mar 2004 08:28:24 -0000 1.7 -+++ busybox-1.00-patched/debianutils/Config.in 16 Nov 2004 11:46:41 -0000 -@@ -24,6 +24,13 @@ config CONFIG_READLINK - This program reads a symbolic link and returns the name - of the file it points to - -+config CONFIG_FEATURE_READLINK_FOLLOW -+ bool " Enable canonicalization by following all symlinks (-f)" -+ default n -+ depends on CONFIG_READLINK -+ help -+ Enable the readlink option (-f). -+ - config CONFIG_RUN_PARTS - bool "run-parts" - default n -diff -p -u -r1.2 readlink.c ---- busybox-1.00/debianutils/readlink.c 19 Mar 2003 09:11:41 -0000 1.2 -+++ busybox-1.00-patched/debianutils/readlink.c 16 Nov 2004 11:46:41 -0000 -@@ -23,18 +23,38 @@ - #include - #include - #include -+#include - #include "busybox.h" - -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+# define READLINK_FOLLOW "f" -+# define READLINK_FLAG_f (1 << 0) -+#else -+# define READLINK_FOLLOW "" -+#endif -+ -+static const char readlink_options[] = READLINK_FOLLOW; -+ - int readlink_main(int argc, char **argv) - { - char *buf = NULL; -+ unsigned long opt = bb_getopt_ulflags(argc, argv, readlink_options); -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+ RESERVE_CONFIG_BUFFER(resolved_path, PATH_MAX); -+#endif - - /* no options, no getopt */ - -- if (argc != 2) -+ if (optind + 1 != argc) - bb_show_usage(); - -- buf = xreadlink(argv[1]); -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+ if (opt & READLINK_FLAG_f) { -+ buf = realpath(argv[optind], resolved_path); -+ } else -+#endif -+ buf = xreadlink(argv[optind]); -+ - if (!buf) - return EXIT_FAILURE; - puts(buf); -diff -p -u -r1.222 usage.h ---- busybox-1.00/include/usage.h 14 Sep 2004 16:23:56 -0000 1.222 -+++ busybox-1.00-patched/include/usage.h 16 Nov 2004 11:46:42 -0000 -@@ -1985,10 +1985,18 @@ - "\t-s\tSet the system date and time (default).\n" \ - "\t-p\tPrint the date and time." - -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+#define USAGE_READLINK_FOLLOW(a) a -+#else -+#define USAGE_READLINK_FOLLOW(a) -+#endif -+ - #define readlink_trivial_usage \ -- "" -+ USAGE_READLINK_FOLLOW("[-f] ") "FILE" - #define readlink_full_usage \ -- "Displays the value of a symbolic link." -+ "Displays the value of a symbolic link." \ -+ USAGE_READLINK_FOLLOW("\n\nOptions:\n" \ -+ "\t-f\tcanonicalize by following all symlinks") - - #define realpath_trivial_usage \ - "pathname ..." diff --git a/packages/busybox/busybox-1.01/rmmod.patch b/packages/busybox/busybox-1.01/rmmod.patch deleted file mode 100644 index 5a557ef35d..0000000000 --- a/packages/busybox/busybox-1.01/rmmod.patch +++ /dev/null @@ -1,44 +0,0 @@ -Index: modutils/rmmod.c -=================================================================== -RCS file: /var/cvs/busybox/modutils/rmmod.c,v -retrieving revision 1.31 -diff -u -r1.31 rmmod.c ---- busybox/modutils/rmmod.c 20 Jul 2004 18:36:51 -0000 1.31 -+++ busybox/modutils/rmmod.c 10 Dec 2004 22:56:36 -0000 -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - #include "busybox.h" - - #ifdef CONFIG_FEATURE_2_6_MODULES -@@ -63,6 +64,16 @@ - void *buf; /* hold the module names which we ignore but must get */ - size_t bufsize = 0; - #endif -+#ifdef CONFIG_FEATURE_2_6_MODULES -+ int k_version = 0; -+ struct utsname myuname; -+ -+ if (uname(&myuname) == 0) { -+ if (myuname.release[0] == '2') { -+ k_version = myuname.release[2] - '0'; -+ } -+ } -+#endif - - /* Parse command line. */ - while ((n = getopt(argc, argv, "a")) != EOF) { -@@ -109,7 +120,10 @@ - for (n = optind; n < argc; n++) { - #ifdef CONFIG_FEATURE_2_6_MODULES - char module_name[strlen(argv[n]) + 1]; -- filename2modname(module_name, argv[n]); -+ if (k_version != 4) -+ filename2modname(module_name, argv[n]); -+ else -+ strcpy(module_name, argv[n]); - #else - #define module_name argv[n] - #endif diff --git a/packages/busybox/busybox-1.01/slugos/.mtn2git_empty b/packages/busybox/busybox-1.01/slugos/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.01/slugos/defconfig b/packages/busybox/busybox-1.01/slugos/defconfig deleted file mode 100644 index 55aa5f3b5e..0000000000 --- a/packages/busybox/busybox-1.01/slugos/defconfig +++ /dev/null @@ -1,444 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -# CONFIG_FEATURE_DEVFS is not set -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_LFS=y -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -# CONFIG_CPIO is not set -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -# CONFIG_CHVT is not set -CONFIG_CLEAR=y -# CONFIG_DEALLOCVT is not set -# CONFIG_DUMPKMAP is not set -CONFIG_GETKEY=y -# CONFIG_LOADFONT is not set -# CONFIG_LOADKMAP is not set -# CONFIG_OPENVT is not set -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -# CONFIG_FIND is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -# CONFIG_XARGS is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -# CONFIG_DC is not set -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_MODPROBE is not set -# CONFIG_RMMOD is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -# CONFIG_IP is not set -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -CONFIG_FEATURE_TELNET_TTYPE=y -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_FEATURE_TFTP_DEBUG is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -CONFIG_SYSCTL=y - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -# CONFIG_FBSET is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -CONFIG_FEATURE_OSF_LABEL=y -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -# CONFIG_LOSETUP is not set -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -# CONFIG_SWAPONOFF is not set -# CONFIG_MOUNT is not set -# CONFIG_UMOUNT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.01/slugos/sysctl.conf b/packages/busybox/busybox-1.01/slugos/sysctl.conf deleted file mode 100644 index cfaa3c7f92..0000000000 --- a/packages/busybox/busybox-1.01/slugos/sysctl.conf +++ /dev/null @@ -1,32 +0,0 @@ -# -# /etc/sysctl.conf - Configuration file for setting system variables -# See sysctl.conf (5) for information. -# - -#kernel.domainname = example.com - -# This flag allows the machine to respond to broadcast pings. -# Very useful on embedded machines -net/ipv4/icmp_echo_ignore_broadcasts=0 - -# Uncomment the following to stop low-level messages on console -#kernel/printk = 4 4 1 7 - -##############################################################3 -# Functions previously found in netbase -# - -# Uncomment the next line to enable Spoof protection (reverse-path filter) -#net/ipv4/conf/all/rp_filter=1 - -# Uncomment the next line to enable TCP/IP SYN cookies -#net/ipv4/tcp_syncookies=1 - -# Uncomment the next line to enable packet forwarding for IPv4 -#net/ipv4/ip_forward=1 - -# Uncomment the next line to enable packet forwarding for IPv6 -#net/ipv6/ip_forward=1 - -# This sets the app to run on a hotplug event -kernel/hotplug=/sbin/udevsend diff --git a/packages/busybox/busybox-1.01/slugos/udhcpscript.patch b/packages/busybox/busybox-1.01/slugos/udhcpscript.patch deleted file mode 100644 index 277a22cddb..0000000000 --- a/packages/busybox/busybox-1.01/slugos/udhcpscript.patch +++ /dev/null @@ -1,162 +0,0 @@ -diff -rup busybox-1.01/.pc/udhcpscript.patch/examples/udhcp/simple.script busybox-1.01/examples/udhcp/simple.script ---- busybox-1.01/examples/udhcp/simple.script 1970-01-01 00:00:00.000000000 +0000 -+++ busybox-1.01/examples/udhcp/simple.script 1970-01-01 00:00:00.000000000 +0000 -@@ -1,40 +1,129 @@ - #!/bin/sh -+# slugos UDHCP client script -+# -+. /etc/default/functions -+ -+echodns(){ -+ local dns -+ if test $# -gt 0 -+ then -+ for dns in "$@" -+ do -+ echo "nameserver $dns #dhcp:$interface" -+ done -+ fi -+} - --# udhcpc script edited by Tim Riker -+# Output the correct contents for resolv.conf based on -+# the current one and any new information -+mkresolv() { -+ local rmdomain -+ rmdomain= -+ # last search takes precedence, so a user -+ # specified search in resolv.conf is retained -+ test -n "$domain" && { -+ echo "search $domain #dhcp" -+ rmdomain='|search [^ ]* #dhcp' -+ } -+ # first nameserver takes precedence, use a user -+ # specified nameserver in preference then the -+ # new ones -+ egrep -v '^(nameserver [^ ]* #dhcp:.*'"$rmdomain"')$' "$1" -+ echodns $dns -+ egrep '^nameserver [^ ]* #dhcp:.*$' "$1" | egrep -v :"$interface"'$' -+} -+ -+# checksum of a file (or stdin if -) -+md5strm() { -+ md5sum $1 2>/dev/null | sed -n 's/^\([0-9A-Za-z]*\).*$/\1/p' -+} -+ -+# update resolv.conf for $interface using $domain and $dns -+updresolv() { -+ local md5old md5new resolv -+ md5old="$(md5strm /etc/resolv.conf)" -+ resolv="$(mkresolv /etc/resolv.conf)" -+ md5new="$(echo "$resolv" | md5strm -)" -+ test "$md5old" != "$md5new" && echo "$resolv" >/etc/resolv.conf -+} -+ -+unroute() { -+ # called to deconfig the interface -+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null -+ do -+ : -+ done -+} -+ -+bind() { -+ local B N metric i olddomain resolv -+ B= -+ test -n "$broadcast" && B="broadcast $broadcast" -+ N= -+ test -n "$subnet" && N="netmask $subnet" -+ ifconfig "$interface" "$ip" $B $N up -+ -+ # If given router information delete the old information and -+ # enter new stuff, routers get metrics incremented by 1 -+ # between each (this is somewhat arbitrary) -+ if test -n "$router" -+ then -+ unroute -+ metric=0 -+ for i in $router -+ do -+ route add default gw "$i" dev "$interface" metric $((metric++)) -+ done -+ fi - --[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1 -+ olddomain= -+ test -r /etc/defaultdomain && olddomain="$(cat /etc/defaultdomain)" -+ if test -n "$domain" -a "$domain" != "$olddomain" -+ then -+ echo "$domain" >/etc/defaultdomain -+ # and update the kernel view too -+ echo "$domain" >/proc/sys/kernel/domainname -+ fi - --RESOLV_CONF="/etc/resolv.conf" --[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" --[ -n "$subnet" ] && NETMASK="netmask $subnet" -+ updresolv -+} - - case "$1" in -- deconfig) -- /sbin/ifconfig $interface 0.0.0.0 -- ;; -- -- renew|bound) -- /sbin/ifconfig $interface $ip $BROADCAST $NETMASK -- -- if [ -n "$router" ] ; then -- echo "deleting routers" -- while route del default gw 0.0.0.0 dev $interface ; do -- : -- done -- -- metric=0 -- for i in $router ; do -- route add default gw $i dev $interface metric $((metric++)) -- done -+deconfig) -+ # Bring the interface up (without inet at this point) -+ # Remove the resolver information because deconfig is called -+ # on leasefail and we need to remove this interface at that -+ # point to ensure the machine remains visible on another -+ # interface! -+ domain= -+ dns= -+ unroute -+ updresolv -+ ifconfig "$interface" up;; -+ -+renew|bound) -+ bind;; -+ -+leasefail) -+ # Pull the values from the config data if (only only if) this -+ # is the config interface -+ if test "$interface" = "$(config iface)" -+ then -+ ip="$(config ip)" -+ if test -n "$ip" -+ then -+ router="$(config gateway)" -+ subnet="$(config netmask)" -+ broadcast="$(config broadcast)" -+ domain="$(config domain)" -+ dns="$(config dns)" -+ -+ bind - fi -+ fi;; - -- echo -n > $RESOLV_CONF -- [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF -- for i in $dns ; do -- echo adding dns $i -- echo nameserver $i >> $RESOLV_CONF -- done -- ;; -+*) echo "udhcpc: $*: unknown command" >&2 -+ exit 1;; - esac - - exit 0 diff --git a/packages/busybox/busybox-1.01/sparc/.mtn2git_empty b/packages/busybox/busybox-1.01/sparc/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.01/sparc/defconfig b/packages/busybox/busybox-1.01/sparc/defconfig deleted file mode 100644 index 8b8cbfc839..0000000000 --- a/packages/busybox/busybox-1.01/sparc/defconfig +++ /dev/null @@ -1,467 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_LFS is not set -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -# CONFIG_FEATURE_LS_RECURSIVE is not set -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -CONFIG_OD=y -CONFIG_PRINTF=y -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -CONFIG_STTY=y -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -CONFIG_MAKEDEVS=y -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_TIME is not set -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_MODPROBE is not set -# CONFIG_RMMOD is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -CONFIG_PS=y -CONFIG_RENICE=y -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y -# CONFIG_LOSETUP is not set -CONFIG_MKSWAP=y -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -CONFIG_SWAPONOFF=y -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -# CONFIG_FEATURE_MOUNT_LOOP is not set -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.01/thumb-bsdlabel.patch b/packages/busybox/busybox-1.01/thumb-bsdlabel.patch deleted file mode 100644 index dc3eb7c552..0000000000 --- a/packages/busybox/busybox-1.01/thumb-bsdlabel.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- busybox-1.01/util-linux/fdisk.c 1970-01-01 00:00:00.000000000 +0000 -+++ busybox-1.01/util-linux/fdisk.c 1970-01-01 00:00:00.000000000 +0000 -@@ -507,7 +507,7 @@ check_aix_label( void ) - - #define BSD_LINUX_BOOTDIR "/usr/ucb/mdec" - --#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__) -+#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__thumb__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__) - #define BSD_LABELSECTOR 1 - #define BSD_LABELOFFSET 0 - #elif defined (__alpha__) || defined (__powerpc__) || defined (__ia64__) || defined (__hppa__) diff --git a/packages/busybox/busybox-1.01/uclibc_posix.patch b/packages/busybox/busybox-1.01/uclibc_posix.patch deleted file mode 100644 index 186f3f9c3a..0000000000 --- a/packages/busybox/busybox-1.01/uclibc_posix.patch +++ /dev/null @@ -1,21 +0,0 @@ -see http://www.busybox.net/lists/busybox/2004-December/013276.html -and http://bugs.openembedded.org/show_bug.cgi?id=657 - ---- busybox-1.01/libbb/loop.c 2006/03/13 22:18:47 1.1 -+++ busybox-1.01/libbb/loop.c 2006/03/13 22:19:57 -@@ -19,6 +19,7 @@ - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -+#include - #include - #include - #include -@@ -30,7 +31,6 @@ - /* Grumble... The 2.6.x kernel breaks asm/posix_types.h - * so we get to try and cope as best we can... */ - #include --#include - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) - #define __bb_kernel_dev_t __kernel_old_dev_t diff --git a/packages/busybox/busybox-1.01/udhcppidfile-breakage.patch b/packages/busybox/busybox-1.01/udhcppidfile-breakage.patch deleted file mode 100644 index 031274908b..0000000000 --- a/packages/busybox/busybox-1.01/udhcppidfile-breakage.patch +++ /dev/null @@ -1,57 +0,0 @@ ---- busybox-1.00/networking/udhcp/common.c~udhcppidfile2 -+++ busybox-1.00/networking/udhcp/common.c -@@ -74,7 +74,7 @@ - - if (pid > 0) { - /* parent */ -- if (pidfile_reassign(pidfile, pid) < 0) { -+ if (pidfile != NULL && pidfile_reassign(pidfile, pid) < 0) { - (void)kill(pid, SIGKILL); - exit(1); - } else -@@ -119,7 +119,7 @@ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- if (pidfile_acquire(pidfile) < 0) -+ if (pidfile != NULL && pidfile_acquire(pidfile) < 0) - exit(1); - - /* equivelent of doing a fflush after every \n */ -@@ -166,7 +166,7 @@ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- if (pidfile_acquire(pidfile) < 0) -+ if (pidfile != NULL && pidfile_acquire(pidfile) < 0) - exit(1); - - /* equivelent of doing a fflush after every \n */ ---- busybox-1.00/networking/udhcp/pidfile.c~udhcppidfile2 -+++ busybox-1.00/networking/udhcp/pidfile.c -@@ -141,7 +141,11 @@ - int pidfile_acquire(const char *pidfile) - { - int fd, result; -- if (!pidfile) return (-1); -+ -+ if (pidfile == NULL) { -+ LOG(LOG_ERR, "pidfile_acquire: filename is NULL\n"); -+ return (-1); -+ } - - if ((fd = pidfile_open(pidfile)) < 0) - return (-1); -@@ -170,7 +174,11 @@ - int pidfile_reassign(const char *pidfile, int pid) - { - int fd, result; -- if (!pidfile) return (-1); -+ -+ if (pidfile == NULL) { -+ LOG(LOG_ERR, "pidfile_reassign: filename is NULL\n"); -+ return (-1); -+ } - - if ((fd = pidfile_open(pidfile)) < 0) - return (-1); diff --git a/packages/busybox/busybox-1.01/udhcppidfile.patch b/packages/busybox/busybox-1.01/udhcppidfile.patch deleted file mode 100644 index fb2b2ec19a..0000000000 --- a/packages/busybox/busybox-1.01/udhcppidfile.patch +++ /dev/null @@ -1,276 +0,0 @@ ---- busybox-1.00/networking/udhcp/pidfile.h-dist 2004-04-15 03:51:26.000000000 +1000 -+++ busybox-1.00/networking/udhcp/pidfile.h 2004-10-27 15:46:38.000000000 +1000 -@@ -21,5 +21,5 @@ - - - int pidfile_acquire(const char *pidfile); --void pidfile_write_release(int pid_fd); -+int pidfile_reassign(const char *pidfile, int newpid); - ---- busybox-1.00/networking/udhcp/pidfile.c-dist 2004-04-15 03:51:25.000000000 +1000 -+++ busybox-1.00/networking/udhcp/pidfile.c 2004-10-27 19:43:40.000000000 +1000 -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - - #include "pidfile.h" - #include "common.h" -@@ -37,39 +38,146 @@ - } - - --int pidfile_acquire(const char *pidfile) -+static int pidfile_open(const char *pidfile) - { -- int pid_fd; -- if (!pidfile) return -1; -+ int fd; - -- pid_fd = open(pidfile, O_CREAT | O_WRONLY, 0644); -- if (pid_fd < 0) { -- LOG(LOG_ERR, "Unable to open pidfile %s: %m\n", pidfile); -- } else { -- lockf(pid_fd, F_LOCK, 0); -- if (!saved_pidfile) -- atexit(pidfile_delete); -- saved_pidfile = (char *) pidfile; -+ if ((fd = open(pidfile, O_CREAT | O_RDWR, 0644)) < 0) { -+ LOG(LOG_ERR, "pidfile_open: open %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ /* NOTE: lockf is not inherited by child after fork */ -+ if (lockf(fd, F_LOCK, 0) < 0) { -+ LOG(LOG_ERR, "pidfile_open: lock %s failed: %m\n", pidfile); -+ close(fd); -+ return (-1); -+ } -+ -+ return (fd); -+} -+ -+ -+static int pidfile_check(int fd, const char *pidfile) -+{ -+ int len, pid; -+ char buf[20]; -+ -+ if (lseek(fd, 0L, SEEK_SET) < 0) { -+ LOG(LOG_ERR, "pidfile_check: lseek %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ if ((len = read(fd, buf, sizeof buf - 1)) < 0) { -+ LOG(LOG_ERR, "pidfile_check: read %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ if (len == 0) -+ return (0); -+ -+ buf[len] = '\0'; -+ -+ if ((pid = atoi(buf)) <= 1) { -+ LOG(LOG_WARNING, -+ "pidfile_check: ignoring bogus pid (%s) in %s\n", -+ buf, pidfile); -+ return (0); -+ } -+ -+ if (kill((pid_t)pid, 0) == 0) { -+ LOG(LOG_ERR, "pidfile_check: process %d exists (%s)\n", -+ pid, pidfile); -+ return (-1); -+ } -+ -+ if (errno != ESRCH) { -+ LOG(LOG_ERR, "pidfile_check: kill %d failed (%s): %m\n", -+ pid, pidfile); -+ return (-1); -+ } -+ -+ return (0); -+} -+ -+ -+static int pidfile_store(int fd, const char *pidfile, int pid) -+{ -+ int len; -+ char buf[20]; -+ -+ if (lseek(fd, 0L, SEEK_SET) < 0) { -+ LOG(LOG_ERR, "pidfile_store: lseek %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ len = snprintf(buf, sizeof buf - 1, "%d\n", pid); -+ buf[len] = '\0'; -+ -+ if (write(fd, buf, len) < 0) { -+ LOG(LOG_ERR, "pidfile_store: write %s failed: %m\n", -+ pidfile); -+ return (-1); -+ } -+ -+ if (ftruncate(fd, len) < 0) { -+ LOG(LOG_ERR, "pidfile_store: ftruncate %d failed (%s): %m\n", -+ len, pidfile); -+ return (-1); - } - -- return pid_fd; -+ return (0); - } - - --void pidfile_write_release(int pid_fd) -+static void pidfile_close(int fd) - { -- FILE *out; -+ (void)lseek(fd, 0L, SEEK_SET); -+ (void)lockf(fd, F_ULOCK, 0); -+ (void)close(fd); -+} - -- if (pid_fd < 0) return; - -- if ((out = fdopen(pid_fd, "w")) != NULL) { -- fprintf(out, "%d\n", getpid()); -- fclose(out); -+int pidfile_acquire(const char *pidfile) -+{ -+ int fd, result; -+ if (!pidfile) return (-1); -+ -+ if ((fd = pidfile_open(pidfile)) < 0) -+ return (-1); -+ -+ if ((result = pidfile_check(fd, pidfile)) == 0) -+ result = pidfile_store(fd, pidfile, getpid()); -+ -+ pidfile_close(fd); -+ -+ if (result == 0) { -+ saved_pidfile = (char *) pidfile; -+ atexit(pidfile_delete); - } -- lockf(pid_fd, F_UNLCK, 0); -- close(pid_fd); -+ -+ return (result); - } - - -+/* -+ * reassign the pid in a pidfile - used just after a fork so a parent -+ * can store the pid of its child into the file without any window -+ * where the pid in the file is a dead process (which might let another -+ * instance of the program start). Note the parent must use _exit() to -+ * avoid triggering the unlink scheduled above in pidfile_acquire() -+ */ -+int pidfile_reassign(const char *pidfile, int pid) -+{ -+ int fd, result; -+ if (!pidfile) return (-1); -+ -+ if ((fd = pidfile_open(pidfile)) < 0) -+ return (-1); - -+ result = pidfile_store(fd, pidfile, pid); - -+ pidfile_close(fd); -+ -+ return (result); -+} ---- busybox-1.00/networking/udhcp/common.c-dist 2004-05-19 19:18:04.000000000 +1000 -+++ busybox-1.00/networking/udhcp/common.c 2004-10-27 19:58:10.000000000 +1000 -@@ -64,16 +64,34 @@ - #ifdef __uClinux__ - LOG(LOG_ERR, "Cannot background in uclinux (yet)"); - #else /* __uClinux__ */ -- int pid_fd; -+ int pid, fd; - -- /* hold lock during fork. */ -- pid_fd = pidfile_acquire(pidfile); -- if (daemon(0, 0) == -1) { -+ /* NOTE: lockf is not inherited by the child after fork */ -+ if ((pid = fork()) < 0) { - perror("fork"); - exit(1); - } -+ -+ if (pid > 0) { -+ /* parent */ -+ if (pidfile_reassign(pidfile, pid) < 0) { -+ (void)kill(pid, SIGKILL); -+ exit(1); -+ } else -+ _exit(0); -+ } -+ -+ /* child */ -+ (void)chdir("/"); -+ if ((fd = open("/dev/null", O_RDWR)) >= 0) { -+ (void)dup2(fd, 0); -+ (void)dup2(fd, 1); -+ (void)dup2(fd, 2); -+ (void)close(fd); -+ } -+ (void)setsid(); -+ - daemonized++; -- pidfile_write_release(pid_fd); - #endif /* __uClinux__ */ - } - -@@ -97,14 +115,12 @@ - - void start_log_and_pid(const char *client_server, const char *pidfile) - { -- int pid_fd; -- - /* Make sure our syslog fd isn't overwritten */ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- pid_fd = pidfile_acquire(pidfile); -- pidfile_write_release(pid_fd); -+ if (pidfile_acquire(pidfile) < 0) -+ exit(1); - - /* equivelent of doing a fflush after every \n */ - setlinebuf(stdout); -@@ -150,8 +166,8 @@ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- pid_fd = pidfile_acquire(pidfile); -- pidfile_write_release(pid_fd); -+ if (pidfile_acquire(pidfile) < 0) -+ exit(1); - - /* equivelent of doing a fflush after every \n */ - setlinebuf(stdout); ---- busybox-1.00/networking/udhcp/common.h-dist 2004-05-19 18:29:05.000000000 +1000 -+++ busybox-1.00/networking/udhcp/common.h 2004-10-27 15:10:16.000000000 +1000 -@@ -42,7 +42,6 @@ - long uptime(void); - void background(const char *pidfile); - void start_log_and_pid(const char *client_server, const char *pidfile); --void background(const char *pidfile); - void udhcp_logging(int level, const char *fmt, ...); - - #define LOG(level, str, args...) udhcp_logging(level, str, ## args) ---- busybox-1.00/networking/udhcp/script.c-dist 2004-05-19 17:45:47.000000000 +1000 -+++ busybox-1.00/networking/udhcp/script.c 2004-10-27 15:54:04.000000000 +1000 -@@ -228,6 +228,6 @@ - execle(client_config.script, client_config.script, - name, NULL, envp); - LOG(LOG_ERR, "script %s failed: %m", client_config.script); -- exit(1); -+ _exit(1); - } - } diff --git a/packages/busybox/busybox-1.01/udhcpscript.patch b/packages/busybox/busybox-1.01/udhcpscript.patch deleted file mode 100644 index fc21d440cd..0000000000 --- a/packages/busybox/busybox-1.01/udhcpscript.patch +++ /dev/null @@ -1,17 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- busybox-1.00-rc3/examples/udhcp/simple.script~udhcpscript -+++ busybox-1.00-rc3/examples/udhcp/simple.script -@@ -17,8 +17,7 @@ - /sbin/ifconfig $interface $ip $BROADCAST $NETMASK - - if [ -n "$router" ] ; then -- echo "deleting routers" -- while route del default gw 0.0.0.0 dev $interface ; do -+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do - : - done - diff --git a/packages/busybox/busybox-1.01/wrt54/.mtn2git_empty b/packages/busybox/busybox-1.01/wrt54/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.01/wrt54/defconfig b/packages/busybox/busybox-1.01/wrt54/defconfig deleted file mode 100644 index 7f1aef4ef9..0000000000 --- a/packages/busybox/busybox-1.01/wrt54/defconfig +++ /dev/null @@ -1,476 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="mipsel-uclibc-" -EXTRA_CFLAGS_OPTIONS="-Os " - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="./_install" - -# -# Archival Utilities -# -# CONFIG_AR is not set -CONFIG_BUNZIP2=y -# CONFIG_CPIO is not set -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNZIP is not set - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CMP is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_EXPR=y -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -CONFIG_HOSTID=y -CONFIG_ID=y -# CONFIG_INSTALL is not set -CONFIG_LENGTH=y -CONFIG_LN=y -# CONFIG_LOGNAME is not set -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_MKFIFO=y -# CONFIG_MKNOD is not set -CONFIG_MV=y -# CONFIG_OD is not set -# CONFIG_PRINTF is not set -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -# CONFIG_SEQ is not set -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -# CONFIG_STTY is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -CONFIG_FEATURE_TEE_USE_BLOCK_IO=y -CONFIG_TEST=y - -# -# test (forced enabled for use with shell) -# -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_TRUE=y -# CONFIG_TTY is not set -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -# CONFIG_WATCH is not set -CONFIG_WC=y -# CONFIG_WHO is not set -# CONFIG_WHOAMI is not set -CONFIG_YES=y - -# -# Common options for cp and mv -# -CONFIG_FEATURE_PRESERVE_HARDLINKS=y - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -CONFIG_CLEAR=y -# CONFIG_DEALLOCVT is not set -# CONFIG_DUMPKMAP is not set -# CONFIG_GETKEY is not set -# CONFIG_LOADFONT is not set -# CONFIG_LOADKMAP is not set -# CONFIG_OPENVT is not set -CONFIG_RESET=y -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -# CONFIG_READLINK is not set -CONFIG_RUN_PARTS=y -CONFIG_START_STOP_DAEMON=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -# CONFIG_FEATURE_FIND_MTIME is not set -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -# CONFIG_FEATURE_FIND_NEWER is not set -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -CONFIG_INIT=y -CONFIG_FEATURE_USE_INITTAB=y -# CONFIG_FEATURE_INITRD is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -CONFIG_REBOOT=y -CONFIG_MESG=y - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -# CONFIG_FEATURE_U_W_TMP is not set -CONFIG_LOGIN=y -CONFIG_FEATURE_SECURETTY=y -CONFIG_PASSWD=y -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Common options for adduser, deluser, login, su -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -CONFIG_CROND=y -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -CONFIG_CRONTAB=y -# CONFIG_DC is not set -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -CONFIG_FEATURE_2_4_MODULES=y -# CONFIG_FEATURE_2_6_MODULES is not set -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -CONFIG_LSMOD=y -CONFIG_FEATURE_QUERY_MODULE_INTERFACE=y -# CONFIG_MODPROBE is not set -CONFIG_RMMOD=y -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -CONFIG_ARPING=y -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_HOSTNAME is not set -CONFIG_HTTPD=y -# CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY is not set -CONFIG_FEATURE_HTTPD_BASIC_AUTH=y -CONFIG_FEATURE_HTTPD_AUTH_MD5=y -CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y -# CONFIG_FEATURE_HTTPD_SETUID is not set -CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y -CONFIG_FEATURE_HTTPD_CGI=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -# CONFIG_IP is not set -CONFIG_IPCALC=y -CONFIG_FEATURE_IPCALC_FANCY=y -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -# CONFIG_TELNET is not set -# CONFIG_TELNETD is not set -# CONFIG_TFTP is not set -CONFIG_TRACEROUTE=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -CONFIG_VCONFIG=y -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -CONFIG_UDHCPC=y -# CONFIG_FEATURE_UDHCP_SYSLOG is not set -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -CONFIG_PS=y -# CONFIG_RENICE is not set -CONFIG_TOP=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -CONFIG_SYSCTL=y - -# -# Another Bourne-like Shell -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_PIPE_OPTIMIZATION=y -CONFIG_FEATURE_BUILTIN_TEST=y -CONFIG_FEATURE_BUILTIN_ECHO=y -CONFIG_FEATURE_BUILTIN_PIDOF=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -# CONFIG_FEATURE_SH_EXTRA_QUIET is not set -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -CONFIG_FEATURE_COMMAND_HISTORY=15 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -# CONFIG_FBSET is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -# CONFIG_FDISK is not set -FDISK_SUPPORT_LARGE_DISKS=y -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -# CONFIG_HWCLOCK is not set -# CONFIG_LOSETUP is not set -# CONFIG_MKSWAP is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_SWAPONOFF is not set -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/busybox-1.01/xargs-double-size.patch b/packages/busybox/busybox-1.01/xargs-double-size.patch deleted file mode 100644 index 218d6c0d1c..0000000000 --- a/packages/busybox/busybox-1.01/xargs-double-size.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- busybox-1.01/findutils/xargs.c.org 2006-09-19 18:18:17.084592997 +0200 -+++ busybox-1.01/findutils/xargs.c 2006-09-19 18:18:09.820275793 +0200 -@@ -466,8 +466,8 @@ - have it at 1 meg). Things will work fine with a large ARG_MAX but it - will probably hurt the system more than it needs to; an array of this - size is allocated. */ -- if (orig_arg_max > 20 * 1024) -- orig_arg_max = 20 * 1024; -+ if (orig_arg_max > 40 * 1024) -+ orig_arg_max = 40 * 1024; - n_max_chars = orig_arg_max; - } - max_chars = xmalloc(n_max_chars); diff --git a/packages/busybox/busybox-1.2.0/.mtn2git_empty b/packages/busybox/busybox-1.2.0/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.2.0/add-getkey-applet.patch b/packages/busybox/busybox-1.2.0/add-getkey-applet.patch deleted file mode 100644 index a75cf823c7..0000000000 --- a/packages/busybox/busybox-1.2.0/add-getkey-applet.patch +++ /dev/null @@ -1,167 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: busybox-1.1.0/console-tools/getkey.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ busybox-1.1.0/console-tools/getkey.c 2006-03-14 17:17:28.000000000 +0100 -@@ -0,0 +1,94 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * getkey.c - Michael 'Mickey' Lauer -+ * -+ * Version 0.1 -+ * -+ * A simple keygrapper. Displays a configurable message and waits a dedicated number -+ * of seconds for a keypress. Sets the exit code accordingly (SUCCESS on keypress). -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "busybox.h" -+ -+extern int getkey_main(int argc, char **argv) -+{ -+ int status = EXIT_FAILURE; -+ -+ if ( argc < 2 ) -+ { -+ bb_show_usage(); -+ } -+ -+ /* -+ * If no terminal is attached it is quite useless -+ * to treat it like one. -+ */ -+ if( !isatty(STDIN_FILENO) ) -+ { -+ goto error_hard; -+ } -+ -+ //bb_printf( "DEBUG: time = '%s'\n", argv[1] ); -+ //bb_printf( "DEBUG: mesg = '%s'\n", argv[2] ); -+ -+ struct termios orig; -+ struct termios attr; -+ -+ if ( tcgetattr(STDIN_FILENO, &orig) == -1 ) -+ { -+ goto error_hard; -+ } -+ -+ attr = orig; -+ attr.c_cc[VMIN] = 0; -+ attr.c_cc[VTIME] = 0; -+ attr.c_iflag |= INLCR; -+ attr.c_oflag |= OPOST|ONLCR; -+ attr.c_cflag &= ~PARENB; -+ attr.c_lflag &= ~(ICANON/*|ECHO*/); -+ if ( tcsetattr(STDIN_FILENO,TCSANOW,&attr) == -1 ) -+ { -+ goto error_hard; -+ } -+ -+ fd_set rfds; -+ struct timeval tv; -+ int retval; -+ -+ FD_ZERO(&rfds); -+ FD_SET(0, &rfds); -+ -+ tv.tv_sec = atoi( argv[1] ); -+ tv.tv_usec = 0; -+ -+ if ( argc == 3 ) -+ { -+ bb_printf( argv[2], tv.tv_sec ); -+ bb_printf( "\n" ); -+ fflush(stdout); -+ } -+ retval = select(1, &rfds, NULL, NULL, &tv); -+ if (retval > 0) -+ { -+ status = EXIT_SUCCESS; -+ } -+ -+ if (tcsetattr(STDIN_FILENO,TCSANOW,&orig) == -1 ) -+ { -+ goto error_hard; -+ } -+ -+ return status; -+ -+error_hard : -+ return EXIT_FAILURE; -+}; -+ -Index: busybox-1.1.0/console-tools/Makefile.in -=================================================================== ---- busybox-1.1.0.orig/console-tools/Makefile.in 2006-01-11 06:43:57.000000000 +0100 -+++ busybox-1.1.0/console-tools/Makefile.in 2006-03-14 17:18:18.000000000 +0100 -@@ -21,6 +21,7 @@ - CONSOLETOOLS_DIR-$(CONFIG_OPENVT) += openvt.o - CONSOLETOOLS_DIR-$(CONFIG_RESET) += reset.o - CONSOLETOOLS_DIR-$(CONFIG_SETKEYCODES) += setkeycodes.o -+CONSOLETOOLS_DIR-$(CONFIG_GETKEY) += getkey.o - - libraries-y+=$(CONSOLETOOLS_DIR)$(CONSOLETOOLS_AR) - -Index: busybox-1.1.0/console-tools/Config.in -=================================================================== ---- busybox-1.1.0.orig/console-tools/Config.in 2006-01-11 06:43:57.000000000 +0100 -+++ busybox-1.1.0/console-tools/Config.in 2006-03-14 17:17:28.000000000 +0100 -@@ -31,6 +31,14 @@ - This program dumps the kernel's keyboard translation table to - stdout, in binary format. You can then use loadkmap to load it. - -+config CONFIG_GETKEY -+ bool "getkey" -+ default n -+ help -+ This program displays a configurable message and waits -+ a dedicated number of seconds for a keypress. It sets -+ the exit code accordingly, i.e. SUCCESS if there was a keypress. -+ - config CONFIG_LOADFONT - bool "loadfont" - default n -Index: busybox-1.1.0/include/applets.h -=================================================================== ---- busybox-1.1.0.orig/include/applets.h 2006-01-11 06:44:14.000000000 +0100 -+++ busybox-1.1.0/include/applets.h 2006-03-14 17:17:28.000000000 +0100 -@@ -261,6 +261,9 @@ - #ifdef CONFIG_FUSER - APPLET(fuser, fuser_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER) - #endif -+#ifdef CONFIG_GETKEY -+ APPLET(getkey, getkey_main, _BB_DIR_SBIN, _BB_SUID_NEVER) -+#endif - #ifdef CONFIG_GETOPT - APPLET(getopt, getopt_main, _BB_DIR_BIN, _BB_SUID_NEVER) - #endif -Index: busybox-1.1.0/include/usage.h -=================================================================== ---- busybox-1.1.0.orig/include/usage.h 2006-01-11 06:44:14.000000000 +0100 -+++ busybox-1.1.0/include/usage.h 2006-03-14 17:19:11.000000000 +0100 -@@ -841,6 +841,13 @@ - "\t-p, --password Password to be used\n" \ - "\t-P, --port Port number to be used" - -+#define getkey_trivial_usage \ -+ "time [message]" -+#define getkey_full_usage \ -+ "Display a message and wait for a keypress." -+#define getkey_example_usage \ -+ "$ getkey 5 'Press a key within %d seconds to interrupt autoboot.'" -+ - #define fuser_trivial_usage \ - "[options] file OR port/proto" - #define fuser_full_usage \ diff --git a/packages/busybox/busybox-1.2.0/angstrom/.mtn2git_empty b/packages/busybox/busybox-1.2.0/angstrom/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.2.0/angstrom/defconfig b/packages/busybox/busybox-1.2.0/angstrom/defconfig deleted file mode 100644 index e5f48ec64f..0000000000 --- a/packages/busybox/busybox-1.2.0/angstrom/defconfig +++ /dev/null @@ -1,647 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_COMPRESS_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -CONFIG_LOCALE_SUPPORT=y -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-" -CONFIG_BUILD_AT_ONCE=y - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -# CONFIG_CMP is not set -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_BINARY=y -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_FEATURE_ENV_LONG_OPTIONS=y -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -# CONFIG_NOHUP is not set -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -CONFIG_CHATTR=y -CONFIG_E2FSCK=y -CONFIG_FSCK=y -# CONFIG_LSATTR is not set -CONFIG_MKE2FS=y -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y - -# -# Options common to multiple modutils -# -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -# CONFIG_SWITCH_ROOT is not set -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set - -# -# udhcp Server/Client -# -CONFIG_APP_UDHCPD=y -CONFIG_APP_UDHCPC=y -CONFIG_APP_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_READ_NCHARS=y -CONFIG_ASH_READ_TIMEOUT=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_BUILTIN_ECHO is not set -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -CONFIG_ASH_EXPAND_PRMT=y -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_KLOGD=y -CONFIG_LOGGER=y diff --git a/packages/busybox/busybox-1.2.0/below.patch b/packages/busybox/busybox-1.2.0/below.patch deleted file mode 100644 index 95e8376e46..0000000000 --- a/packages/busybox/busybox-1.2.0/below.patch +++ /dev/null @@ -1,46 +0,0 @@ -Index: busybox-1.1.0/modutils/modprobe.c -=================================================================== ---- busybox-1.1.0.orig/modutils/modprobe.c 2006-01-11 06:43:56.000000000 +0100 -+++ busybox-1.1.0/modutils/modprobe.c 2006-03-14 16:36:54.000000000 +0100 -@@ -509,6 +509,41 @@ - } - } - } -+ else if ((strncmp (buffer, "below", 5) == 0) && isspace (buffer[5])) { -+ char *mod, *deps; -+ if (parse_tag_value (buffer + 6, &mod, &deps)) { -+ struct dep_t *dt; -+ -+ for (dt = first; dt; dt = dt->m_next) { -+ if (strcmp (dt->m_name, mod) == 0) -+ break; -+ } -+ if (dt) { -+ char *pp; -+ char *name; -+ -+ pp = name = deps; -+ -+ for (;;) { -+ while (*pp != 0 && !isspace (*pp)) -+ pp++; -+ if (isspace (*pp)) -+ *(pp++) = 0; -+ -+ dt->m_depcnt++; -+ dt->m_deparr = (char **) xrealloc (dt->m_deparr, -+ sizeof (char *) * dt->m_depcnt); -+ dt->m_deparr[dt->m_depcnt - 1] = bb_xstrdup (name); -+ -+ while (isspace (*pp)) -+ pp++; -+ name = pp; -+ if (*pp == 0) -+ break; -+ } -+ } -+ } -+ } - } - } - close ( fd ); diff --git a/packages/busybox/busybox-1.2.0/defconfig b/packages/busybox/busybox-1.2.0/defconfig deleted file mode 100644 index 981b7d7c71..0000000000 --- a/packages/busybox/busybox-1.2.0/defconfig +++ /dev/null @@ -1,647 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_COMPRESS_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -CONFIG_LOCALE_SUPPORT=y -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-" -CONFIG_BUILD_AT_ONCE=y - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -# CONFIG_CMP is not set -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_BINARY=y -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_FEATURE_ENV_LONG_OPTIONS=y -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -# CONFIG_NOHUP is not set -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -CONFIG_CHATTR=y -CONFIG_E2FSCK=y -CONFIG_FSCK=y -# CONFIG_LSATTR is not set -CONFIG_MKE2FS=y -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y - -# -# Options common to multiple modutils -# -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -# CONFIG_SWITCH_ROOT is not set -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set - -# -# udhcp Server/Client -# -CONFIG_APP_UDHCPD=y -CONFIG_APP_UDHCPC=y -CONFIG_APP_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -# CONFIG_ASH_READ_NCHARS is not set -# CONFIG_ASH_READ_TIMEOUT is not set -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_BUILTIN_ECHO is not set -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -CONFIG_ASH_EXPAND_PRMT=y -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_KLOGD=y -CONFIG_LOGGER=y diff --git a/packages/busybox/busybox-1.2.0/dhcp-hostname.patch b/packages/busybox/busybox-1.2.0/dhcp-hostname.patch deleted file mode 100644 index e0adea662e..0000000000 --- a/packages/busybox/busybox-1.2.0/dhcp-hostname.patch +++ /dev/null @@ -1,30 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- busybox-1.01/networking/udhcp/dhcpc.c~dhcp-hostname -+++ busybox-1.01/networking/udhcp/dhcpc.c -@@ -193,6 +193,7 @@ - int max_fd; - int sig; - int no_clientid = 0; -+ char hostbuf[256]; /* SUSv2: hostnames are <= 255 bytes */ - - static const struct option arg_options[] = { - {"clientid", required_argument, 0, 'c'}, -@@ -211,6 +212,14 @@ - {0, 0, 0, 0} - }; - -+ if (gethostname (hostbuf, sizeof (hostbuf)) == 0) { -+ len = strlen (hostbuf); -+ client_config.hostname = xmalloc (len + 2); -+ client_config.hostname[OPT_CODE] = DHCP_HOST_NAME; -+ client_config.hostname[OPT_LEN] = len; -+ strncpy(client_config.hostname + 2, hostbuf, len); -+ } -+ - /* get options */ - while (1) { - int option_index = 0; diff --git a/packages/busybox/busybox-1.2.0/dhcpretrytime.patch b/packages/busybox/busybox-1.2.0/dhcpretrytime.patch deleted file mode 100644 index 893e346acf..0000000000 --- a/packages/busybox/busybox-1.2.0/dhcpretrytime.patch +++ /dev/null @@ -1,85 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: busybox-1.1.0/networking/udhcp/dhcpc.c -=================================================================== ---- busybox-1.1.0.orig/networking/udhcp/dhcpc.c 2006-03-14 17:19:31.000000000 +0100 -+++ busybox-1.1.0/networking/udhcp/dhcpc.c 2006-03-14 17:20:45.000000000 +0100 -@@ -48,6 +48,7 @@ - static unsigned long requested_ip; /* = 0 */ - static unsigned long server_addr; - static unsigned long timeout; -+static unsigned long retrytime = 60; - static int packet_num; /* = 0 */ - static int fd = -1; - -@@ -95,6 +96,7 @@ - " -r, --request=IP IP address to request (default: none)\n" - " -s, --script=file Run file at dhcp events (default:\n" - " " DEFAULT_SCRIPT ")\n" -+" -t, --retrytime time to retry DHCP request (default 60s)\n") - " -v, --version Display version\n" - ); - exit(0); -@@ -214,6 +216,7 @@ - {"quit", no_argument, 0, 'q'}, - {"request", required_argument, 0, 'r'}, - {"script", required_argument, 0, 's'}, -+ {"retrytime", required_argument, 0, 't'}, - {"version", no_argument, 0, 'v'}, - {0, 0, 0, 0} - }; -@@ -229,7 +232,7 @@ - /* get options */ - while (1) { - int option_index = 0; -- c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:v", arg_options, &option_index); -+ c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:t:v", arg_options, &option_index); - if (c == -1) break; - - switch (c) { -@@ -305,6 +308,9 @@ - case 's': - client_config.script = optarg; - break; -+ case 't': -+ retrytime = atol(optarg); -+ break; - case 'v': - printf("udhcpcd, version %s\n\n", VERSION); - return 0; -@@ -394,7 +400,7 @@ - } - /* wait to try again */ - packet_num = 0; -- timeout = now + 60; -+ timeout = now + retrytime; - } - break; - case RENEW_REQUESTED: -Index: busybox-1.1.0/networking/ifupdown.c -=================================================================== ---- busybox-1.1.0.orig/networking/ifupdown.c 2006-01-11 06:43:51.000000000 +0100 -+++ busybox-1.1.0/networking/ifupdown.c 2006-03-14 17:19:41.000000000 +0100 -@@ -506,7 +506,7 @@ - static int dhcp_up(struct interface_defn_t *ifd, execfn *exec) - { - if (execable("/sbin/udhcpc")) { -- return( execute("udhcpc -n -p /var/run/udhcpc.%iface%.pid -i " -+ return( execute("udhcpc -b -p /var/run/udhcpc.%iface%.pid -i " - "%iface% [[-H %hostname%]] [[-c %clientid%]]", ifd, exec)); - } else if (execable("/sbin/pump")) { - return( execute("pump -i %iface% [[-h %hostname%]] [[-l %leasehours%]]", ifd, exec)); -@@ -526,8 +526,8 @@ - /* SIGUSR2 forces udhcpc to release the current lease and go inactive, - * and SIGTERM causes udhcpc to exit. Signals are queued and processed - * sequentially so we don't need to sleep */ -- result = execute("kill -USR2 `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null", ifd, exec); -- result += execute("kill -TERM `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null", ifd, exec); -+ result = execute("kill -USR2 `cat /var/run/udhcpc.%iface%.pid 2>/dev/null` 2>/dev/null", ifd, exec); -+ result += execute("kill -TERM `cat /var/run/udhcpc.%iface%.pid 2>/dev/null` 2>/dev/null", ifd, exec); - } else if (execable("/sbin/pump")) { - result = execute("pump -i %iface% -k", ifd, exec); - } else if (execable("/sbin/dhclient")) { diff --git a/packages/busybox/busybox-1.2.0/fbset.patch b/packages/busybox/busybox-1.2.0/fbset.patch deleted file mode 100644 index d0609ce6f7..0000000000 --- a/packages/busybox/busybox-1.2.0/fbset.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- busybox/util-linux/fbset.c~ 2004-07-03 16:24:23.000000000 +0100 -+++ busybox/util-linux/fbset.c 2004-12-30 20:09:26.000000000 +0000 -@@ -337,7 +337,7 @@ - { - struct fb_var_screeninfo var, varset; - int fh, i; -- char *fbdev = DEFAULTFBDEV; -+ char *fbdev = NULL; - char *modefile = DEFAULTFBMODE; - char *thisarg, *mode = NULL; - -@@ -404,7 +404,12 @@ - } - } - -+ if (fbdev == NULL) -+ fbdev = DEFAULTFBDEV; - if ((fh = open(fbdev, O_RDONLY)) < 0) -+#ifdef CONFIG_FEATURE_DEVFS -+ if ((fh = open("/dev/fb0", O_RDONLY)) < 0) -+#endif - bb_perror_msg_and_die("fbset(open)"); - if (ioctl(fh, FBIOGET_VSCREENINFO, &var)) - bb_perror_msg_and_die("fbset(ioctl)"); diff --git a/packages/busybox/busybox-1.2.0/hdparm_M.patch b/packages/busybox/busybox-1.2.0/hdparm_M.patch deleted file mode 100644 index 9adcd36f92..0000000000 --- a/packages/busybox/busybox-1.2.0/hdparm_M.patch +++ /dev/null @@ -1,47 +0,0 @@ -Index: busybox-1.1.0/miscutils/hdparm.c -=================================================================== ---- busybox-1.1.0.orig/miscutils/hdparm.c 2006-01-11 06:44:13.000000000 +0100 -+++ busybox-1.1.0/miscutils/hdparm.c 2006-03-14 17:22:22.000000000 +0100 -@@ -1255,6 +1255,7 @@ - static unsigned long set_sleepnow, get_sleepnow; - static unsigned long get_powermode; - static unsigned long set_apmmode, get_apmmode, apmmode; -+static unsigned long set_acoustic = 0, get_acoustic = 0, acoustic = 0; - #endif - #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY - static int get_IDentity; -@@ -2124,6 +2125,20 @@ - } - bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD"); - } -+ if (set_acoustic) -+ { -+ no_scsi(); -+ acoustic=check_if_min_and_set_val(acoustic,0); -+ acoustic=check_if_maj_and_set_val(acoustic,254); -+ if_printf(get_acoustic," setting AAM level to 0x%02lX (%ld)\n", acoustic, acoustic); -+ bb_ioctl(fd, HDIO_SET_ACOUSTIC, (int*)acoustic,"HDIO_SET_ACOUSTIC"); -+ } -+ if (get_acoustic) -+ { -+ no_scsi(); -+ bb_ioctl(fd, HDIO_GET_ACOUSTIC, (unsigned long*)&parm,"HDIO_GET_ACOUSTIC"); -+ printf(" acoustic = %2ld (128=quiet ... 254=fast)\n", parm); -+ } - if (set_wcache) - { - #ifdef DO_FLUSHCACHE -@@ -2832,6 +2847,13 @@ - p = *argv++, --argc; - p=GET_NUMBER(p,&set_readahead,&Xreadahead); - break; -+ case 'M': -+ get_acoustic = noisy; -+ noisy = 1; -+ if (!*p && argc && isalnum(**argv)) -+ p = *argv++, --argc; -+ p=GET_NUMBER(p,&set_acoustic,&acoustic); -+ break; - case 'B': - get_apmmode = noisy; - noisy = 1; diff --git a/packages/busybox/busybox-1.2.0/ifupdown-spurious-environ.patch b/packages/busybox/busybox-1.2.0/ifupdown-spurious-environ.patch deleted file mode 100644 index 8753315f2c..0000000000 --- a/packages/busybox/busybox-1.2.0/ifupdown-spurious-environ.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- busybox-1.00/networking/ifupdown.c.old 2005-06-11 19:51:59.000000000 +0100 -+++ busybox-1.00/networking/ifupdown.c 2005-06-11 19:52:19.000000000 +0100 -@@ -148,6 +148,9 @@ - struct mapping_defn_t *mappings; - }; - -+/* XXX */ -+#define environ local_environ -+ - static char no_act = 0; - static char verbose = 0; - static char **environ = NULL; diff --git a/packages/busybox/busybox-1.2.0/iproute-flush-cache.patch b/packages/busybox/busybox-1.2.0/iproute-flush-cache.patch deleted file mode 100644 index f8becc3390..0000000000 --- a/packages/busybox/busybox-1.2.0/iproute-flush-cache.patch +++ /dev/null @@ -1,23 +0,0 @@ -Index: networking/libiproute/iproute.c -=================================================================== -RCS file: /var/cvs/busybox/networking/libiproute/iproute.c,v -retrieving revision 1.14 -diff -u -r1.14 iproute.c ---- networking/libiproute/iproute.c 11 Aug 2004 08:10:58 -0000 1.14 -+++ networking/libiproute/iproute.c 30 Nov 2004 20:43:44 -0000 -@@ -537,6 +537,15 @@ - } else if (matches(*argv, "match") == 0) { - NEXT_ARG(); - get_prefix(&filter.mdst, *argv, do_ipv6); -+ } else if (matches(*argv, "table") == 0) { -+ NEXT_ARG(); -+ if (matches(*argv, "cache") == 0) { -+ filter.tb = -1; -+ } else if (matches(*argv, "main") != 0) { -+ invarg("invalid \"table\"", *argv); -+ } -+ } else if (matches(*argv, "cache") == 0) { -+ filter.tb = -1; - } else { - if (matches(*argv, "exact") == 0) { - NEXT_ARG(); diff --git a/packages/busybox/busybox-1.2.0/mnci/.mtn2git_empty b/packages/busybox/busybox-1.2.0/mnci/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.2.0/mnci/defconfig b/packages/busybox/busybox-1.2.0/mnci/defconfig deleted file mode 100644 index ccf9e279a2..0000000000 --- a/packages/busybox/busybox-1.2.0/mnci/defconfig +++ /dev/null @@ -1,643 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_SHOW_USAGE is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_COMPRESS_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -# CONFIG_LFS is not set -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="arm-linux-" -# CONFIG_BUILD_AT_ONCE is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -CONFIG_CMP=y -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -# CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -# CONFIG_DIFF is not set -# CONFIG_FEATURE_DIFF_BINARY is not set -# CONFIG_FEATURE_DIFF_DIR is not set -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -# CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K is not set -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -# CONFIG_LOGNAME is not set -CONFIG_LS=y -# CONFIG_FEATURE_LS_FILETYPES is not set -# CONFIG_FEATURE_LS_FOLLOWLINKS is not set -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -# CONFIG_FEATURE_LS_COLOR is not set -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -CONFIG_NICE=y -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -# CONFIG_FEATURE_SORT_BIG is not set -CONFIG_STAT=y -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -# CONFIG_FEATURE_FANCY_TAIL is not set -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -# CONFIG_FEATURE_TR_CLASSES is not set -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -# CONFIG_WATCH is not set -CONFIG_WC=y -# CONFIG_WHO is not set -# CONFIG_WHOAMI is not set -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -CONFIG_SETKEYCODES=y -CONFIG_SETLOGCONS=y - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -# CONFIG_FEATURE_GREP_FGREP_ALIAS is not set -# CONFIG_FEATURE_GREP_CONTEXT is not set -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -CONFIG_FEATURE_SHADOWPASSWDS=y -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -CONFIG_ADDGROUP=y -CONFIG_DELGROUP=y -CONFIG_ADDUSER=y -CONFIG_DELUSER=y -CONFIG_GETTY=y -# CONFIG_FEATURE_UTMP is not set -# CONFIG_FEATURE_WTMP is not set -CONFIG_LOGIN=y -# CONFIG_FEATURE_SECURETTY is not set -CONFIG_PASSWD=y -CONFIG_SU=y -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -# CONFIG_CHATTR is not set -# CONFIG_E2FSCK is not set -# CONFIG_FSCK is not set -# CONFIG_LSATTR is not set -# CONFIG_MKE2FS is not set -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y - -# -# Options common to multiple modutils -# -# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -# CONFIG_FBSET is not set -# CONFIG_FEATURE_FBSET_FANCY is not set -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -# CONFIG_FDISK is not set -# FDISK_SUPPORT_LARGE_DISKS is not set -# CONFIG_FEATURE_FDISK_WRITABLE is not set -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_FEATURE_MINIX2 is not set -CONFIG_GETOPT=y -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set -# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set -# CONFIG_IPCRM is not set -CONFIG_IPCS=y -# CONFIG_LOSETUP is not set -CONFIG_MDEV=y -CONFIG_FEATURE_MDEV_CONF=y -# CONFIG_FEATURE_MDEV_EXEC is not set -# CONFIG_MKSWAP is not set -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -# CONFIG_SWAPONOFF is not set -# CONFIG_SWITCH_ROOT is not set -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -CONFIG_ADJTIMEX=y -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -CONFIG_FEATURE_DEVFS=y -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -# CONFIG_FEATURE_LESS_BRACKETS is not set -# CONFIG_FEATURE_LESS_FLAGS is not set -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -# CONFIG_FEATURE_IPV6 is not set -CONFIG_ARPING=y -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -# CONFIG_IP is not set -# CONFIG_FEATURE_IP_ADDRESS is not set -# CONFIG_FEATURE_IP_LINK is not set -# CONFIG_FEATURE_IP_ROUTE is not set -# CONFIG_FEATURE_IP_TUNNEL is not set -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -# CONFIG_PING6 is not set -# CONFIG_FEATURE_FANCY_PING6 is not set -CONFIG_ROUTE=y -CONFIG_TELNET=y -CONFIG_FEATURE_TELNET_TTYPE=y -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -# CONFIG_TFTP is not set -# CONFIG_FEATURE_TFTP_GET is not set -# CONFIG_FEATURE_TFTP_PUT is not set -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set - -# -# udhcp Server/Client -# -# CONFIG_APP_UDHCPD is not set -CONFIG_APP_UDHCPC=y -# CONFIG_APP_DUMPLEASES is not set -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -# CONFIG_FEATURE_WGET_STATUSBAR is not set -# CONFIG_FEATURE_WGET_AUTHENTICATION is not set -# CONFIG_FEATURE_WGET_IP6_LITERAL is not set -# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set -CONFIG_ZCIP=y - -# -# Process Utilities -# -CONFIG_FREE=y -# CONFIG_FUSER is not set -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_PIDOF is not set -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -# CONFIG_UPTIME is not set - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -# CONFIG_ASH_READ_NCHARS is not set -# CONFIG_ASH_READ_TIMEOUT is not set -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -CONFIG_ASH_BUILTIN_ECHO=y -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_ASH_EXPAND_PRMT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=15 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -# CONFIG_FEATURE_REMOTE_LOG is not set -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y diff --git a/packages/busybox/busybox-1.2.0/mount-all-type.patch b/packages/busybox/busybox-1.2.0/mount-all-type.patch deleted file mode 100644 index 476094a804..0000000000 --- a/packages/busybox/busybox-1.2.0/mount-all-type.patch +++ /dev/null @@ -1,84 +0,0 @@ ---- busybox-1.00/.pc/mount-all-type.patch/util-linux/mount.c 2004-08-02 17:14:02.000000000 -0700 -+++ busybox-1.00/util-linux/mount.c 2005-05-13 00:17:19.054232796 -0700 -@@ -364,6 +364,56 @@ - exit(EXIT_SUCCESS); - } - -+/* Does this file system type, from /etc/fstab, match the given -+ * -t option value? -+ */ -+static int match_fs(const char *option, const char *type) -+{ -+ const int len = strlen(type); -+ const int no = option[0] == 'n' && option[1] == 'o'; -+ const char *optp = option; -+ -+ if (len > 0) do { -+ const char *match = strstr(optp, type); -+ -+ if (match == NULL) { -+ /* No match, but if the option string starts 'no' no match -+ * means yes. -+ */ -+ return no; -+ } -+ -+ /* Match, may be partial, check for end-of-type in option string. */ -+ if (match[len] == 0 || match[len] == ',') { -+ /* Ok, check for type or notype. */ -+ if (match == option) { -+ /* Exact match at start (can't be 'no') */ -+ return 1; -+ } -+ if (match > option+1) { -+ if (match[-1] == ',') { -+ /* Exact match in middle, might be 'no' */ -+ return !no; -+ } -+ if (match == option+2 && no) { -+ /* Exact match to 'notype' at start. */ -+ return 0; -+ } -+ if (match > option+2 && match[-3] == ',' && -+ match[-2] == 'n' && match[-1] == 'o') { -+ return 0; -+ } -+ } -+ } -+ -+ /* Look for another match. */ -+ optp = match+1; -+ } while (1); -+ -+ /* zero length type in fstab (impossible?), don't match it. */ -+ return 0; -+} -+ - extern int mount_main(int argc, char **argv) - { - struct stat statbuf; -@@ -371,6 +421,7 @@ - char *extra_opts; - int flags = 0; - char *filesystemType = "auto"; -+ char *filesystemOption = 0; - int got_filesystemType = 0; - char *device = xmalloc(PATH_MAX); - char *directory = xmalloc(PATH_MAX); -@@ -393,6 +444,7 @@ - break; - case 't': - filesystemType = optarg; -+ filesystemOption = optarg; - got_filesystemType = 1; - break; - case 'w': -@@ -460,6 +512,8 @@ - - strcpy(device, m->mnt_fsname); - strcpy(directory, m->mnt_dir); -+ if (all && filesystemOption != 0 && !match_fs(filesystemOption, m->mnt_type)) -+ continue; - filesystemType = bb_xstrdup(m->mnt_type); - singlemount: - extra_opts = string_flags; diff --git a/packages/busybox/busybox-1.2.0/nylon/.mtn2git_empty b/packages/busybox/busybox-1.2.0/nylon/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.2.0/nylon/defconfig b/packages/busybox/busybox-1.2.0/nylon/defconfig deleted file mode 100644 index ee3373a62c..0000000000 --- a/packages/busybox/busybox-1.2.0/nylon/defconfig +++ /dev/null @@ -1,568 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -# CONFIG_NITPICK is not set -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -# CONFIG_EJECT is not set -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -CONFIG_FEATURE_SUID_CONFIG=y -CONFIG_FEATURE_SUID_CONFIG_QUIET=y -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_LFS is not set -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" -# CONFIG_BUILD_AT_ONCE is not set - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Archival Utilities -# -CONFIG_AR=y -CONFIG_FEATURE_AR_LONG_FILENAMES=y -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -# CONFIG_FEATURE_TAR_BZIP2 is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -CONFIG_FEATURE_TAR_COMPRESS=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -CONFIG_UNCOMPRESS=y -# CONFIG_UNLZMA is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Common options for dpkg and dpkg_deb -# -CONFIG_FEATURE_DEB_TAR_GZ=y -CONFIG_FEATURE_DEB_TAR_BZ2=y - -# -# Coreutils -# -CONFIG_BASENAME=y -CONFIG_CAL=y -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -CONFIG_DIFF=y -# CONFIG_FEATURE_DIFF_BINARY is not set -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -# CONFIG_COMM is not set -# CONFIG_CKSUM is not set -# CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_CMP=y -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -CONFIG_DOS2UNIX=y -CONFIG_UNIX2DOS=y -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -CONFIG_FOLD=y -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -CONFIG_HOSTID=y -CONFIG_ID=y -CONFIG_INSTALL=y -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -CONFIG_LENGTH=y -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -CONFIG_NICE=y -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -CONFIG_SHA1SUM=y -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -# CONFIG_FEATURE_SORT_BIG is not set -CONFIG_STAT=y -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -CONFIG_FEATURE_TEE_USE_BLOCK_IO=y -# CONFIG_TEST is not set -CONFIG_TOUCH=y -CONFIG_TR=y -# CONFIG_FEATURE_TR_CLASSES is not set -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -CONFIG_UUDECODE=y -CONFIG_UUENCODE=y -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -CONFIG_CLEAR=y -# CONFIG_DEALLOCVT is not set -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -# CONFIG_LOADFONT is not set -CONFIG_LOADKMAP=y -# CONFIG_OPENVT is not set -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -CONFIG_SETKEYCODES=y -CONFIG_SETLOGCONS=n - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -CONFIG_PIPE_PROGRESS=y -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -CONFIG_FEATURE_FIND_INUM=y -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -# CONFIG_CHATTR is not set -# CONFIG_E2FSCK is not set -# CONFIG_FSCK is not set -# CONFIG_LSATTR is not set -# CONFIG_MKE2FS is not set -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -CONFIG_CROND=y -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -CONFIG_CRONTAB=y -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -# CONFIG_FEATURE_LESS_BRACKETS is not set -# CONFIG_FEATURE_LESS_FLAGS is not set -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -CONFIG_WATCHDOG=y - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_MODPROBE is not set -# CONFIG_RMMOD is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -CONFIG_ARPING=y -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -CONFIG_HTTPD=y -CONFIG_FEATURE_HTTPD_WITHOUT_INETD=y -CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y -# CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY is not set -CONFIG_FEATURE_HTTPD_BASIC_AUTH=y -CONFIG_FEATURE_HTTPD_AUTH_MD5=y -CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y -CONFIG_FEATURE_HTTPD_SETUID=y -CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y -CONFIG_FEATURE_HTTPD_CGI=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y -CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y -CONFIG_FEATURE_IFCONFIG_HW=y -CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -CONFIG_INETD=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y -# CONFIG_FEATURE_INETD_RPC is not set -# CONFIG_IP is not set -CONFIG_IPCALC=y -CONFIG_FEATURE_IPCALC_FANCY=y -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -CONFIG_NAMEIF=y -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -CONFIG_FEATURE_TELNET_TTYPE=y -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -CONFIG_FEATURE_TFTP_BLOCKSIZE=y -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE=y -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set -CONFIG_VCONFIG=y -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y -# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set -CONFIG_ZCIP=y - -# -# udhcp Server/Client -# -CONFIG_APP_UDHCPD=y -CONFIG_APP_UDHCPC=y -CONFIG_APP_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -# CONFIG_FUSER is not set -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -# CONFIG_FEATURE_PS_WIDE is not set -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -CONFIG_SYSCTL=y - -# -# Another Bourne-like Shell -# -# CONFIG_FEATURE_SH_IS_ASH is not set -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -CONFIG_FEATURE_SH_IS_NONE=y -# CONFIG_ASH is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -CONFIG_FREERAMDISK=y -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -# CONFIG_HWCLOCK is not set -# CONFIG_IPCRM is not set -CONFIG_IPCS=y -CONFIG_LOSETUP=y -CONFIG_MDEV=y -CONFIG_FEATURE_MDEV_CONF=y -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -# CONFIG_MORE is not set -CONFIG_PIVOT_ROOT=y -CONFIG_FEATURE_MOUNT_NFS=y -# CONFIG_RDATE is not set -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -# CONFIG_SWITCH_ROOT is not set -CONFIG_MOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -CONFIG_DEBUG_YANK_SUSv2=y diff --git a/packages/busybox/busybox-1.2.0/openslug/.mtn2git_empty b/packages/busybox/busybox-1.2.0/openslug/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.2.0/openslug/udhcpscript.patch b/packages/busybox/busybox-1.2.0/openslug/udhcpscript.patch deleted file mode 100644 index 010f64a53f..0000000000 --- a/packages/busybox/busybox-1.2.0/openslug/udhcpscript.patch +++ /dev/null @@ -1,133 +0,0 @@ ---- busybox-1.00/.pc/udhcpscript.patch/examples/udhcp/simple.script 2004-10-13 00:18:05.000000000 -0700 -+++ busybox-1.00/examples/udhcp/simple.script 2005-06-05 15:08:28.432605118 -0700 -@@ -1,40 +1,101 @@ - #!/bin/sh -+# openslug UDHCP client script -+# this must set the HW address (MAC) on the interface -+# -+. /etc/default/functions - --# udhcpc script edited by Tim Riker - --[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1 -+echodns(){ -+ local dns -+ if test $# -gt 0 -+ then -+ for dns in "$@" -+ do -+ echo "nameserver $dns" -+ done -+ fi -+} -+ -+# Output the correct contents for resolv.conf -+mkresolv() { -+ test -n "$domain" && echo "search $domain" -+ echodns $dns -+} -+ -+# checksum of a file (or stdin if -) -+md5strm() { -+ md5sum $1 2>/dev/null | sed -n 's/^\([0-9A-Za-z]*\).*$/\1/p' -+} -+ -+bind() { -+ local B N metric i olddomain -+ B= -+ test -n "$broadcast" && B="broadcast $broadcast" -+ N= -+ test -n "$subnet" && N="netmask $subnet" -+ ifconfig "$interface" "$ip" $B $N up -+ -+ # If given router information delete the old information and -+ # enter new stuff, routers get metrics incremented by 1 -+ # between each (this is somewhat arbitrary) -+ if test -n "$router" -+ then -+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null -+ do -+ : -+ done - --RESOLV_CONF="/etc/resolv.conf" --[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" --[ -n "$subnet" ] && NETMASK="netmask $subnet" -+ metric=0 -+ for i in $router -+ do -+ route add default gw "$i" dev "$interface" metric $((metric++)) -+ done -+ fi -+ -+ olddomain= -+ test -r /etc/defaultdomain && olddomain="$(cat /etc/defaultdomain)" -+ if test -n "$domain" -a "$domain" != "$olddomain" -+ then -+ echo "$domain" >/etc/defaultdomain -+ # and update the kernel view too -+ echo "$domain" >/proc/sys/kernel/domainname -+ fi -+ -+ # Update /etc/resolv.conf to reflect domain and dns information, -+ # this always clears resolv.conf if none is given -+ md5old="$(md5strm /etc/resolv.conf)" -+ md5new="$(mkresolv | md5strm -)" -+ test "$md5old" != "$md5new" && mkresolv >/etc/resolv.conf -+} - - case "$1" in -- deconfig) -- /sbin/ifconfig $interface 0.0.0.0 -- ;; -- -- renew|bound) -- /sbin/ifconfig $interface $ip $BROADCAST $NETMASK -- -- if [ -n "$router" ] ; then -- echo "deleting routers" -- while route del default gw 0.0.0.0 dev $interface ; do -- : -- done -- -- metric=0 -- for i in $router ; do -- route add default gw $i dev $interface metric $((metric++)) -- done -+deconfig) -+ # Bring the interface up (without inet at this point) -+ ifconfig "$interface" up;; -+ -+renew|bound) -+ bind;; -+ -+leasefail) -+ # Pull the values from the config data if (only only if) this -+ # is the config interface -+ if test "$interface" = "$(config iface)" -+ then -+ ip="$(config ip)" -+ if test -n "$ip" -+ then -+ router="$(config gateway)" -+ subnet="$(config netmask)" -+ broadcast="$(config broadcast)" -+ domain="$(config domain)" -+ dns="$(config dns)" -+ -+ bind - fi -+ fi;; - -- echo -n > $RESOLV_CONF -- [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF -- for i in $dns ; do -- echo adding dns $i -- echo nameserver $i >> $RESOLV_CONF -- done -- ;; -+*) echo "udhcpc: $*: unknown command" >&2 -+ exit 1;; - esac - - exit 0 diff --git a/packages/busybox/busybox-1.2.0/readlink.patch b/packages/busybox/busybox-1.2.0/readlink.patch deleted file mode 100644 index 0c5431085a..0000000000 --- a/packages/busybox/busybox-1.2.0/readlink.patch +++ /dev/null @@ -1,85 +0,0 @@ -diff -p -u -r1.7 Config.in ---- busybox-1.00/debianutils/Config.in 15 Mar 2004 08:28:24 -0000 1.7 -+++ busybox-1.00-patched/debianutils/Config.in 16 Nov 2004 11:46:41 -0000 -@@ -24,6 +24,13 @@ config CONFIG_READLINK - This program reads a symbolic link and returns the name - of the file it points to - -+config CONFIG_FEATURE_READLINK_FOLLOW -+ bool " Enable canonicalization by following all symlinks (-f)" -+ default n -+ depends on CONFIG_READLINK -+ help -+ Enable the readlink option (-f). -+ - config CONFIG_RUN_PARTS - bool "run-parts" - default n -diff -p -u -r1.2 readlink.c ---- busybox-1.00/debianutils/readlink.c 19 Mar 2003 09:11:41 -0000 1.2 -+++ busybox-1.00-patched/debianutils/readlink.c 16 Nov 2004 11:46:41 -0000 -@@ -23,18 +23,38 @@ - #include - #include - #include -+#include - #include "busybox.h" - -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+# define READLINK_FOLLOW "f" -+# define READLINK_FLAG_f (1 << 0) -+#else -+# define READLINK_FOLLOW "" -+#endif -+ -+static const char readlink_options[] = READLINK_FOLLOW; -+ - int readlink_main(int argc, char **argv) - { - char *buf = NULL; -+ unsigned long opt = bb_getopt_ulflags(argc, argv, readlink_options); -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+ RESERVE_CONFIG_BUFFER(resolved_path, PATH_MAX); -+#endif - - /* no options, no getopt */ - -- if (argc != 2) -+ if (optind + 1 != argc) - bb_show_usage(); - -- buf = xreadlink(argv[1]); -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+ if (opt & READLINK_FLAG_f) { -+ buf = realpath(argv[optind], resolved_path); -+ } else -+#endif -+ buf = xreadlink(argv[optind]); -+ - if (!buf) - return EXIT_FAILURE; - puts(buf); -diff -p -u -r1.222 usage.h ---- busybox-1.00/include/usage.h 14 Sep 2004 16:23:56 -0000 1.222 -+++ busybox-1.00-patched/include/usage.h 16 Nov 2004 11:46:42 -0000 -@@ -1985,10 +1985,18 @@ - "\t-s\tSet the system date and time (default).\n" \ - "\t-p\tPrint the date and time." - -+#ifdef CONFIG_FEATURE_READLINK_FOLLOW -+#define USAGE_READLINK_FOLLOW(a) a -+#else -+#define USAGE_READLINK_FOLLOW(a) -+#endif -+ - #define readlink_trivial_usage \ -- "" -+ USAGE_READLINK_FOLLOW("[-f] ") "FILE" - #define readlink_full_usage \ -- "Displays the value of a symbolic link." -+ "Displays the value of a symbolic link." \ -+ USAGE_READLINK_FOLLOW("\n\nOptions:\n" \ -+ "\t-f\tcanonicalize by following all symlinks") - - #define realpath_trivial_usage \ - "pathname ..." diff --git a/packages/busybox/busybox-1.2.0/rmmod.patch b/packages/busybox/busybox-1.2.0/rmmod.patch deleted file mode 100644 index 20770e0dc4..0000000000 --- a/packages/busybox/busybox-1.2.0/rmmod.patch +++ /dev/null @@ -1,40 +0,0 @@ -Index: busybox-1.1.0/modutils/rmmod.c -=================================================================== ---- busybox-1.1.0.orig/modutils/rmmod.c 2006-01-11 06:43:56.000000000 +0100 -+++ busybox-1.1.0/modutils/rmmod.c 2006-03-14 16:42:14.000000000 +0100 -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include "busybox.h" - - #ifdef CONFIG_FEATURE_2_6_MODULES -@@ -64,6 +65,16 @@ - but must get */ - size_t bufsize = sizeof(bb_common_bufsiz1); - #endif -+#ifdef CONFIG_FEATURE_2_6_MODULES -+ int k_version = 0; -+ struct utsname myuname; -+ -+ if (uname(&myuname) == 0) { -+ if (myuname.release[0] == '2') { -+ k_version = myuname.release[2] - '0'; -+ } -+ } -+#endif - - /* Parse command line. */ - n = bb_getopt_ulflags(argc, argv, "wfa"); -@@ -109,6 +120,10 @@ - afterslash++; - module_name = alloca(strlen(afterslash) + 1); - filename2modname(module_name, afterslash); -+ if (k_version != 4) -+ filename2modname(module_name, afterslash); -+ else -+ strcpy(module_name, afterslash); - #else - #define module_name argv[n] - #endif diff --git a/packages/busybox/busybox-1.2.0/udhcppidfile-breakage.patch b/packages/busybox/busybox-1.2.0/udhcppidfile-breakage.patch deleted file mode 100644 index 031274908b..0000000000 --- a/packages/busybox/busybox-1.2.0/udhcppidfile-breakage.patch +++ /dev/null @@ -1,57 +0,0 @@ ---- busybox-1.00/networking/udhcp/common.c~udhcppidfile2 -+++ busybox-1.00/networking/udhcp/common.c -@@ -74,7 +74,7 @@ - - if (pid > 0) { - /* parent */ -- if (pidfile_reassign(pidfile, pid) < 0) { -+ if (pidfile != NULL && pidfile_reassign(pidfile, pid) < 0) { - (void)kill(pid, SIGKILL); - exit(1); - } else -@@ -119,7 +119,7 @@ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- if (pidfile_acquire(pidfile) < 0) -+ if (pidfile != NULL && pidfile_acquire(pidfile) < 0) - exit(1); - - /* equivelent of doing a fflush after every \n */ -@@ -166,7 +166,7 @@ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- if (pidfile_acquire(pidfile) < 0) -+ if (pidfile != NULL && pidfile_acquire(pidfile) < 0) - exit(1); - - /* equivelent of doing a fflush after every \n */ ---- busybox-1.00/networking/udhcp/pidfile.c~udhcppidfile2 -+++ busybox-1.00/networking/udhcp/pidfile.c -@@ -141,7 +141,11 @@ - int pidfile_acquire(const char *pidfile) - { - int fd, result; -- if (!pidfile) return (-1); -+ -+ if (pidfile == NULL) { -+ LOG(LOG_ERR, "pidfile_acquire: filename is NULL\n"); -+ return (-1); -+ } - - if ((fd = pidfile_open(pidfile)) < 0) - return (-1); -@@ -170,7 +174,11 @@ - int pidfile_reassign(const char *pidfile, int pid) - { - int fd, result; -- if (!pidfile) return (-1); -+ -+ if (pidfile == NULL) { -+ LOG(LOG_ERR, "pidfile_reassign: filename is NULL\n"); -+ return (-1); -+ } - - if ((fd = pidfile_open(pidfile)) < 0) - return (-1); diff --git a/packages/busybox/busybox-1.2.0/udhcppidfile.patch b/packages/busybox/busybox-1.2.0/udhcppidfile.patch deleted file mode 100644 index b4b86b8775..0000000000 --- a/packages/busybox/busybox-1.2.0/udhcppidfile.patch +++ /dev/null @@ -1,274 +0,0 @@ -Index: busybox-1.1.0/networking/udhcp/pidfile.h -=================================================================== ---- busybox-1.1.0.orig/networking/udhcp/pidfile.h 2006-01-11 06:43:50.000000000 +0100 -+++ busybox-1.1.0/networking/udhcp/pidfile.h 2006-03-14 17:15:45.000000000 +0100 -@@ -21,5 +21,5 @@ - - - int pidfile_acquire(const char *pidfile); --void pidfile_write_release(int pid_fd); -+int pidfile_reassign(const char *pidfile, int newpid); - -Index: busybox-1.1.0/networking/udhcp/pidfile.c -=================================================================== ---- busybox-1.1.0.orig/networking/udhcp/pidfile.c 2006-01-11 06:43:50.000000000 +0100 -+++ busybox-1.1.0/networking/udhcp/pidfile.c 2006-03-14 17:15:45.000000000 +0100 -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - - #include "pidfile.h" - #include "common.h" -@@ -37,39 +38,146 @@ - } - - --int pidfile_acquire(const char *pidfile) -+static int pidfile_open(const char *pidfile) - { -- int pid_fd; -- if (!pidfile) return -1; -+ int fd; - -- pid_fd = open(pidfile, O_CREAT | O_WRONLY, 0644); -- if (pid_fd < 0) { -- LOG(LOG_ERR, "Unable to open pidfile %s: %m\n", pidfile); -- } else { -- lockf(pid_fd, F_LOCK, 0); -- if (!saved_pidfile) -- atexit(pidfile_delete); -- saved_pidfile = (char *) pidfile; -+ if ((fd = open(pidfile, O_CREAT | O_RDWR, 0644)) < 0) { -+ LOG(LOG_ERR, "pidfile_open: open %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ /* NOTE: lockf is not inherited by child after fork */ -+ if (lockf(fd, F_LOCK, 0) < 0) { -+ LOG(LOG_ERR, "pidfile_open: lock %s failed: %m\n", pidfile); -+ close(fd); -+ return (-1); -+ } -+ -+ return (fd); -+} -+ -+ -+static int pidfile_check(int fd, const char *pidfile) -+{ -+ int len, pid; -+ char buf[20]; -+ -+ if (lseek(fd, 0L, SEEK_SET) < 0) { -+ LOG(LOG_ERR, "pidfile_check: lseek %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ if ((len = read(fd, buf, sizeof buf - 1)) < 0) { -+ LOG(LOG_ERR, "pidfile_check: read %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ if (len == 0) -+ return (0); -+ -+ buf[len] = '\0'; -+ -+ if ((pid = atoi(buf)) <= 1) { -+ LOG(LOG_WARNING, -+ "pidfile_check: ignoring bogus pid (%s) in %s\n", -+ buf, pidfile); -+ return (0); -+ } -+ -+ if (kill((pid_t)pid, 0) == 0) { -+ LOG(LOG_ERR, "pidfile_check: process %d exists (%s)\n", -+ pid, pidfile); -+ return (-1); -+ } -+ -+ if (errno != ESRCH) { -+ LOG(LOG_ERR, "pidfile_check: kill %d failed (%s): %m\n", -+ pid, pidfile); -+ return (-1); -+ } -+ -+ return (0); -+} -+ -+ -+static int pidfile_store(int fd, const char *pidfile, int pid) -+{ -+ int len; -+ char buf[20]; -+ -+ if (lseek(fd, 0L, SEEK_SET) < 0) { -+ LOG(LOG_ERR, "pidfile_store: lseek %s failed: %m\n", pidfile); -+ return (-1); -+ } -+ -+ len = snprintf(buf, sizeof buf - 1, "%d\n", pid); -+ buf[len] = '\0'; -+ -+ if (write(fd, buf, len) < 0) { -+ LOG(LOG_ERR, "pidfile_store: write %s failed: %m\n", -+ pidfile); -+ return (-1); -+ } -+ -+ if (ftruncate(fd, len) < 0) { -+ LOG(LOG_ERR, "pidfile_store: ftruncate %d failed (%s): %m\n", -+ len, pidfile); -+ return (-1); - } - -- return pid_fd; -+ return (0); - } - - --void pidfile_write_release(int pid_fd) -+static void pidfile_close(int fd) - { -- FILE *out; -+ (void)lseek(fd, 0L, SEEK_SET); -+ (void)lockf(fd, F_ULOCK, 0); -+ (void)close(fd); -+} - -- if (pid_fd < 0) return; - -- if ((out = fdopen(pid_fd, "w")) != NULL) { -- fprintf(out, "%d\n", getpid()); -- fclose(out); -+int pidfile_acquire(const char *pidfile) -+{ -+ int fd, result; -+ if (!pidfile) return (-1); -+ -+ if ((fd = pidfile_open(pidfile)) < 0) -+ return (-1); -+ -+ if ((result = pidfile_check(fd, pidfile)) == 0) -+ result = pidfile_store(fd, pidfile, getpid()); -+ -+ pidfile_close(fd); -+ -+ if (result == 0) { -+ saved_pidfile = (char *) pidfile; -+ atexit(pidfile_delete); - } -- lockf(pid_fd, F_UNLCK, 0); -- close(pid_fd); -+ -+ return (result); - } - - -+/* -+ * reassign the pid in a pidfile - used just after a fork so a parent -+ * can store the pid of its child into the file without any window -+ * where the pid in the file is a dead process (which might let another -+ * instance of the program start). Note the parent must use _exit() to -+ * avoid triggering the unlink scheduled above in pidfile_acquire() -+ */ -+int pidfile_reassign(const char *pidfile, int pid) -+{ -+ int fd, result; -+ if (!pidfile) return (-1); -+ -+ if ((fd = pidfile_open(pidfile)) < 0) -+ return (-1); - -+ result = pidfile_store(fd, pidfile, pid); - -+ pidfile_close(fd); -+ -+ return (result); -+} -Index: busybox-1.1.0/networking/udhcp/common.c -=================================================================== ---- busybox-1.1.0.orig/networking/udhcp/common.c 2006-01-11 06:43:50.000000000 +0100 -+++ busybox-1.1.0/networking/udhcp/common.c 2006-03-14 17:15:45.000000000 +0100 -@@ -64,16 +64,34 @@ - #ifdef __uClinux__ - LOG(LOG_ERR, "Cannot background in uclinux (yet)"); - #else /* __uClinux__ */ -- int pid_fd; -+ int pid, fd; - -- /* hold lock during fork. */ -- pid_fd = pidfile_acquire(pidfile); -- if (daemon(0, 0) == -1) { -+ /* NOTE: lockf is not inherited by the child after fork */ -+ if ((pid = fork()) < 0) { - perror("fork"); - exit(1); - } -+ -+ if (pid > 0) { -+ /* parent */ -+ if (pidfile_reassign(pidfile, pid) < 0) { -+ (void)kill(pid, SIGKILL); -+ exit(1); -+ } else -+ _exit(0); -+ } -+ -+ /* child */ -+ (void)chdir("/"); -+ if ((fd = open("/dev/null", O_RDWR)) >= 0) { -+ (void)dup2(fd, 0); -+ (void)dup2(fd, 1); -+ (void)dup2(fd, 2); -+ (void)close(fd); -+ } -+ (void)setsid(); -+ - daemonized++; -- pidfile_write_release(pid_fd); - #endif /* __uClinux__ */ - } - -@@ -97,14 +115,12 @@ - - void start_log_and_pid(const char *client_server, const char *pidfile) - { -- int pid_fd; -- - /* Make sure our syslog fd isn't overwritten */ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- pid_fd = pidfile_acquire(pidfile); -- pidfile_write_release(pid_fd); -+ if (pidfile_acquire(pidfile) < 0) -+ exit(1); - - /* equivelent of doing a fflush after every \n */ - setlinebuf(stdout); -@@ -150,8 +166,8 @@ - sanitize_fds(); - - /* do some other misc startup stuff while we are here to save bytes */ -- pid_fd = pidfile_acquire(pidfile); -- pidfile_write_release(pid_fd); -+ if (pidfile_acquire(pidfile) < 0) -+ exit(1); - - /* equivelent of doing a fflush after every \n */ - setlinebuf(stdout); -Index: busybox-1.1.0/networking/udhcp/script.c -=================================================================== ---- busybox-1.1.0.orig/networking/udhcp/script.c 2006-01-11 06:43:50.000000000 +0100 -+++ busybox-1.1.0/networking/udhcp/script.c 2006-03-14 17:15:45.000000000 +0100 -@@ -229,6 +229,6 @@ - execle(client_config.script, client_config.script, - name, NULL, envp); - LOG(LOG_ERR, "script %s failed: %m", client_config.script); -- exit(1); -+ _exit(1); - } - } diff --git a/packages/busybox/busybox-1.2.0/udhcpscript.patch b/packages/busybox/busybox-1.2.0/udhcpscript.patch deleted file mode 100644 index fc21d440cd..0000000000 --- a/packages/busybox/busybox-1.2.0/udhcpscript.patch +++ /dev/null @@ -1,17 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- busybox-1.00-rc3/examples/udhcp/simple.script~udhcpscript -+++ busybox-1.00-rc3/examples/udhcp/simple.script -@@ -17,8 +17,7 @@ - /sbin/ifconfig $interface $ip $BROADCAST $NETMASK - - if [ -n "$router" ] ; then -- echo "deleting routers" -- while route del default gw 0.0.0.0 dev $interface ; do -+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do - : - done - diff --git a/packages/busybox/busybox-1.2.0/xargs-double-size.patch b/packages/busybox/busybox-1.2.0/xargs-double-size.patch deleted file mode 100644 index 4fd410ca6a..0000000000 --- a/packages/busybox/busybox-1.2.0/xargs-double-size.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- busybox-1.2.0/findutils/xargs.c.org 2006-09-19 18:18:17.084592997 +0200 -+++ busybox-1.2.0/findutils/xargs.c 2006-09-19 18:18:09.820275793 +0200 -@@ -466,8 +466,8 @@ - have it at 1 meg). Things will work fine with a large ARG_MAX but it - will probably hurt the system more than it needs to; an array of this - size is allocated. */ -- if (orig_arg_max > 20 * 1024) -- orig_arg_max = 20 * 1024; -+ if (orig_arg_max > 40 * 1024) -+ orig_arg_max = 40 * 1024; - n_max_chars = orig_arg_max; - } - max_chars = xmalloc(n_max_chars); diff --git a/packages/busybox/busybox-1.5.0/.mtn2git_empty b/packages/busybox/busybox-1.5.0/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.5.0/angstrom/.mtn2git_empty b/packages/busybox/busybox-1.5.0/angstrom/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.5.0/angstrom/defconfig b/packages/busybox/busybox-1.5.0/angstrom/defconfig deleted file mode 100644 index 1807dab68e..0000000000 --- a/packages/busybox/busybox-1.5.0/angstrom/defconfig +++ /dev/null @@ -1,647 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_COMPRESS_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -CONFIG_LOCALE_SUPPORT=y -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-" -CONFIG_BUILD_AT_ONCE=y - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -# CONFIG_CMP is not set -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_BINARY=y -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_FEATURE_ENV_LONG_OPTIONS=y -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -CONFIG_CHATTR=y -CONFIG_E2FSCK=y -CONFIG_FSCK=y -# CONFIG_LSATTR is not set -CONFIG_MKE2FS=y -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y - -# -# Options common to multiple modutils -# -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -CONFIG_SWITCH_ROOT=y -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set - -# -# udhcp Server/Client -# -CONFIG_APP_UDHCPD=y -CONFIG_APP_UDHCPC=y -CONFIG_APP_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_READ_NCHARS=y -CONFIG_ASH_READ_TIMEOUT=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_BUILTIN_ECHO is not set -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -CONFIG_ASH_EXPAND_PRMT=y -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_KLOGD=y -CONFIG_LOGGER=y diff --git a/packages/busybox/busybox-1.5.0/busybox-mdev.sh b/packages/busybox/busybox-1.5.0/busybox-mdev.sh deleted file mode 100755 index 9744322fa9..0000000000 --- a/packages/busybox/busybox-1.5.0/busybox-mdev.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -MDEV=/sbin/mdev -DESC="Busybox mdev setup" - -# Complain if thing's aren't right -if [ ! -e /proc/filesystems ]; then - echo "mdev requires a mounted procfs, not started." - exit 1 -fi - -if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then - echo "mdev requires tmpfs support, not started." - exit 1 -fi - -if [ ! -d /sys/class/ ]; then - echo "mdev requires a mounted sysfs, not started." - exit 1 -fi - -if [ ! -e /proc/sys/kernel/hotplug ]; then - echo "mdev requires hotplug support, not started." - exit 1 -fi - -# We need to unmount /dev/pts/ and remount it later over the tmpfs -if mountpoint -q /dev/pts/; then - umount -l /dev/pts/ -fi - -if mountpoint -q /dev/shm/; then - umount -l /dev/shm/ -fi - -# Create tmpfs for /dev -echo "Creating tmpfs at /dev" -mount -t tmpfs tmpfs /dev -o size=800k - -# Register mdev as hotplug event helper -echo "$MDEV" > /proc/sys/kernel/hotplug - -# Populate /dev from /sys info -echo "Populating /dev using mdev" -$MDEV -s - -# Touch .udev to inform scripts that /dev needs no further setup -touch /dev/.udev - -# Mount devpts -TTYGRP=5 -TTYMODE=620 -mkdir -m 755 -p /dev/pts -if [ ! -e /dev/ptmx ]; then - mknod -m 666 /dev/ptmx c 5 2 -fi -mount -t devpts devpts /dev/pts -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE - -# Make shm directory -mkdir -m 755 -p /dev/shm - -# Make extraneous links -ln -sf /proc/self/fd /dev/fd -ln -sf /proc/self/fd/0 /dev/stdin -ln -sf /proc/self/fd/1 /dev/stdout -ln -sf /proc/self/fd/2 /dev/stderr -ln -sf /proc/kcore /dev/core -ln -sf /proc/asound/oss/sndstat /dev/sndstat - -exit 0 diff --git a/packages/busybox/busybox-1.5.0/defconfig b/packages/busybox/busybox-1.5.0/defconfig deleted file mode 100644 index 7308eead76..0000000000 --- a/packages/busybox/busybox-1.5.0/defconfig +++ /dev/null @@ -1,647 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_COMPRESS_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -CONFIG_LOCALE_SUPPORT=y -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-" -CONFIG_BUILD_AT_ONCE=y - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -# CONFIG_CMP is not set -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_BINARY=y -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_FEATURE_ENV_LONG_OPTIONS=y -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -CONFIG_CHATTR=y -CONFIG_E2FSCK=y -CONFIG_FSCK=y -# CONFIG_LSATTR is not set -CONFIG_MKE2FS=y -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y - -# -# Options common to multiple modutils -# -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -# CONFIG_SWITCH_ROOT is not set -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set - -# -# udhcp Server/Client -# -CONFIG_APP_UDHCPD=y -CONFIG_APP_UDHCPC=y -CONFIG_APP_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -# CONFIG_ASH_READ_NCHARS is not set -# CONFIG_ASH_READ_TIMEOUT is not set -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_BUILTIN_ECHO is not set -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -CONFIG_ASH_EXPAND_PRMT=y -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_KLOGD=y -CONFIG_LOGGER=y diff --git a/packages/busybox/busybox-1.5.0/df_rootfs.patch b/packages/busybox/busybox-1.5.0/df_rootfs.patch deleted file mode 100644 index 3819b59106..0000000000 --- a/packages/busybox/busybox-1.5.0/df_rootfs.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- busybox-1.3.1.orig/coreutils/df.c 2006-12-26 22:54:50.000000000 -0600 -+++ busybox-1.3.1/coreutils/df.c 2006-12-30 00:45:10.000000000 -0600 -@@ -47,6 +47,7 @@ - struct statfs s; - static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */ - const char *disp_units_hdr = hdr_1k; -+ int root_done = 0; - - #ifdef CONFIG_FEATURE_HUMAN_READABLE - opt_complementary = "h-km:k-hm:m-hk"; -@@ -77,7 +78,7 @@ - - do { - const char *device; -- const char *mount_point; -+ char *mount_point; - - if (mount_table) { - mount_entry = getmntent(mount_table); -@@ -116,17 +117,20 @@ - ) / (blocks_used + s.f_bavail); - } - -- if (strcmp(device, "rootfs") == 0) { -- continue; -- } else if (strcmp(device, "/dev/root") == 0) { -+ if (strcmp(device, "/dev/root") == 0 || strcmp(device, "rootfs") == 0) { - /* Adjusts device to be the real root device, - * or leaves device alone if it can't find it */ -- device = find_block_device("/"); -+ device = find_block_device(mount_point); - if (!device) { - goto SET_ERROR; - } - } - -+ if (strcmp(mount_point, "/") == 0) { -+ if (root_done) continue; -+ root_done = 1; -+ } -+ - #ifdef CONFIG_FEATURE_HUMAN_READABLE - printf("%-20s %9s ", device, - make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr)); diff --git a/packages/busybox/busybox-1.5.0/dhcp-hostname.patch b/packages/busybox/busybox-1.5.0/dhcp-hostname.patch deleted file mode 100644 index 8e7e68a4c9..0000000000 --- a/packages/busybox/busybox-1.5.0/dhcp-hostname.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- busybox-1.5.0/networking/udhcp/dhcpc.c~ 2007-03-22 15:21:23.000000000 -0500 -+++ busybox-1.5.0/networking/udhcp/dhcpc.c 2007-04-01 08:42:41.000000000 -0500 -@@ -136,6 +136,7 @@ - int retval; - int len; - int no_clientid = 0; -+ char hostbuf[256]; /* (default hostname patch) */ - fd_set rfds; - struct timeval tv; - struct dhcpMessage packet; -@@ -214,6 +215,9 @@ - client_config.background_if_no_lease = 1; - if (opt & OPT_h) - client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, str_h, 0); -+ else /* (default hostname patch) default hostname is our hostname as set */ -+ if (gethostname(hostbuf, sizeof(hostbuf)) == 0) -+ client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, hostbuf, 0); - if (opt & OPT_F) { - client_config.fqdn = alloc_dhcp_option(DHCP_FQDN, str_F, 3); - /* Flags: 0000NEOS diff --git a/packages/busybox/busybox-1.5.0/dhcp-increase-retries.patch b/packages/busybox/busybox-1.5.0/dhcp-increase-retries.patch deleted file mode 100644 index f49aa16580..0000000000 --- a/packages/busybox/busybox-1.5.0/dhcp-increase-retries.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- busybox-1.5.0/networking/udhcp/dhcpc.c~ 2007-04-01 08:42:41.000000000 -0500 -+++ busybox-1.5.0/networking/udhcp/dhcpc.c 2007-04-01 21:03:42.000000000 -0500 -@@ -188,7 +188,7 @@ - /* Default options. */ - client_config.interface = "eth0"; - client_config.script = DEFAULT_SCRIPT; -- client_config.retries = 3; -+ client_config.retries = 5; - client_config.timeout = 3; - - /* Parse command line */ diff --git a/packages/busybox/busybox-1.5.0/ifupdown-spurious-environ.patch b/packages/busybox/busybox-1.5.0/ifupdown-spurious-environ.patch deleted file mode 100644 index 812a0b3ee8..0000000000 --- a/packages/busybox/busybox-1.5.0/ifupdown-spurious-environ.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- busybox-1.5.0/networking/ifupdown.c~ 2007-03-22 15:21:23.000000000 -0500 -+++ busybox-1.5.0/networking/ifupdown.c 2007-04-01 08:52:25.000000000 -0500 -@@ -83,6 +83,13 @@ - struct mapping_defn_t *mappings; - }; - -+/* XXX - ifupdown-spurious-environ.patch -- appears to be long obsolete, -+ * but is carried forward because it doesn't seem to hurt anything and -+ * it's non-obvious how to remove the patch from OE without breaking -+ * old builds. MJW -+ */ -+#define environ local_environ -+ - #define OPTION_STR "anvf" USE_FEATURE_IFUPDOWN_MAPPING("m") "i:" - enum { - OPT_do_all = 0x1, diff --git a/packages/busybox/busybox-1.5.0/mnci/.mtn2git_empty b/packages/busybox/busybox-1.5.0/mnci/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.5.0/mnci/defconfig b/packages/busybox/busybox-1.5.0/mnci/defconfig deleted file mode 100644 index 6a04803f18..0000000000 --- a/packages/busybox/busybox-1.5.0/mnci/defconfig +++ /dev/null @@ -1,643 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -# CONFIG_SHOW_USAGE is not set -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_COMPRESS_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -# CONFIG_LFS is not set -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="arm-linux-" -# CONFIG_BUILD_AT_ONCE is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -CONFIG_CMP=y -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -# CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -# CONFIG_DIFF is not set -# CONFIG_FEATURE_DIFF_BINARY is not set -# CONFIG_FEATURE_DIFF_DIR is not set -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -# CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K is not set -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -# CONFIG_LOGNAME is not set -CONFIG_LS=y -# CONFIG_FEATURE_LS_FILETYPES is not set -# CONFIG_FEATURE_LS_FOLLOWLINKS is not set -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -# CONFIG_FEATURE_LS_COLOR is not set -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -CONFIG_NICE=y -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -# CONFIG_FEATURE_SORT_BIG is not set -CONFIG_STAT=y -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -# CONFIG_FEATURE_FANCY_TAIL is not set -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -# CONFIG_FEATURE_TR_CLASSES is not set -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -# CONFIG_WATCH is not set -CONFIG_WC=y -# CONFIG_WHO is not set -# CONFIG_WHOAMI is not set -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -CONFIG_SETKEYCODES=y -CONFIG_SETLOGCONS=y - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -# CONFIG_FEATURE_GREP_FGREP_ALIAS is not set -# CONFIG_FEATURE_GREP_CONTEXT is not set -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -CONFIG_FEATURE_SHADOWPASSWDS=y -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -CONFIG_ADDGROUP=y -CONFIG_DELGROUP=y -CONFIG_ADDUSER=y -CONFIG_DELUSER=y -CONFIG_GETTY=y -# CONFIG_FEATURE_UTMP is not set -# CONFIG_FEATURE_WTMP is not set -CONFIG_LOGIN=y -# CONFIG_FEATURE_SECURETTY is not set -CONFIG_PASSWD=y -CONFIG_SU=y -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -# CONFIG_CHATTR is not set -# CONFIG_E2FSCK is not set -# CONFIG_FSCK is not set -# CONFIG_LSATTR is not set -# CONFIG_MKE2FS is not set -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y - -# -# Options common to multiple modutils -# -# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -# CONFIG_FBSET is not set -# CONFIG_FEATURE_FBSET_FANCY is not set -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -# CONFIG_FDISK is not set -# FDISK_SUPPORT_LARGE_DISKS is not set -# CONFIG_FEATURE_FDISK_WRITABLE is not set -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_FEATURE_MINIX2 is not set -CONFIG_GETOPT=y -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set -# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set -# CONFIG_IPCRM is not set -CONFIG_IPCS=y -# CONFIG_LOSETUP is not set -CONFIG_MDEV=y -CONFIG_FEATURE_MDEV_CONF=y -# CONFIG_FEATURE_MDEV_EXEC is not set -# CONFIG_MKSWAP is not set -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -# CONFIG_SWAPONOFF is not set -# CONFIG_SWITCH_ROOT is not set -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -CONFIG_ADJTIMEX=y -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -CONFIG_FEATURE_DEVFS=y -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -# CONFIG_FEATURE_LESS_BRACKETS is not set -# CONFIG_FEATURE_LESS_FLAGS is not set -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -# CONFIG_FEATURE_IPV6 is not set -CONFIG_ARPING=y -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -# CONFIG_IP is not set -# CONFIG_FEATURE_IP_ADDRESS is not set -# CONFIG_FEATURE_IP_LINK is not set -# CONFIG_FEATURE_IP_ROUTE is not set -# CONFIG_FEATURE_IP_TUNNEL is not set -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -# CONFIG_PING6 is not set -# CONFIG_FEATURE_FANCY_PING6 is not set -CONFIG_ROUTE=y -CONFIG_TELNET=y -CONFIG_FEATURE_TELNET_TTYPE=y -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -# CONFIG_TFTP is not set -# CONFIG_FEATURE_TFTP_GET is not set -# CONFIG_FEATURE_TFTP_PUT is not set -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set - -# -# udhcp Server/Client -# -# CONFIG_APP_UDHCPD is not set -CONFIG_APP_UDHCPC=y -# CONFIG_APP_DUMPLEASES is not set -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -# CONFIG_FEATURE_WGET_STATUSBAR is not set -# CONFIG_FEATURE_WGET_AUTHENTICATION is not set -# CONFIG_FEATURE_WGET_IP6_LITERAL is not set -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -CONFIG_ZCIP=y - -# -# Process Utilities -# -CONFIG_FREE=y -# CONFIG_FUSER is not set -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_PIDOF is not set -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -# CONFIG_UPTIME is not set - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -# CONFIG_ASH_READ_NCHARS is not set -# CONFIG_ASH_READ_TIMEOUT is not set -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -CONFIG_ASH_BUILTIN_ECHO=y -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_ASH_EXPAND_PRMT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=15 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -# CONFIG_FEATURE_REMOTE_LOG is not set -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y diff --git a/packages/busybox/busybox-1.5.0/nylon/.mtn2git_empty b/packages/busybox/busybox-1.5.0/nylon/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.5.0/nylon/defconfig b/packages/busybox/busybox-1.5.0/nylon/defconfig deleted file mode 100644 index 67c5408ada..0000000000 --- a/packages/busybox/busybox-1.5.0/nylon/defconfig +++ /dev/null @@ -1,568 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -# CONFIG_NITPICK is not set -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_FEATURE_DEVFS=y -# CONFIG_EJECT is not set -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -CONFIG_FEATURE_SUID_CONFIG=y -CONFIG_FEATURE_SUID_CONFIG_QUIET=y -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_LFS is not set -# USING_CROSS_COMPILER is not set -EXTRA_CFLAGS_OPTIONS="" -# CONFIG_BUILD_AT_ONCE is not set - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Archival Utilities -# -CONFIG_AR=y -CONFIG_FEATURE_AR_LONG_FILENAMES=y -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -CONFIG_DPKG=y -CONFIG_DPKG_DEB=y -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -# CONFIG_FEATURE_TAR_BZIP2 is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -CONFIG_FEATURE_TAR_COMPRESS=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -CONFIG_UNCOMPRESS=y -# CONFIG_UNLZMA is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Common options for dpkg and dpkg_deb -# -CONFIG_FEATURE_DEB_TAR_GZ=y -CONFIG_FEATURE_DEB_TAR_BZ2=y - -# -# Coreutils -# -CONFIG_BASENAME=y -CONFIG_CAL=y -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -CONFIG_DIFF=y -# CONFIG_FEATURE_DIFF_BINARY is not set -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -# CONFIG_COMM is not set -# CONFIG_CKSUM is not set -# CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_CMP=y -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y - -# -# date (forced enabled for use with watch) -# -CONFIG_FEATURE_DATE_ISOFMT=y -CONFIG_DD=y -CONFIG_DF=y -CONFIG_DIRNAME=y -CONFIG_DOS2UNIX=y -CONFIG_UNIX2DOS=y -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -CONFIG_FOLD=y -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -CONFIG_HOSTID=y -CONFIG_ID=y -CONFIG_INSTALL=y -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -CONFIG_LENGTH=y -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -CONFIG_NICE=y -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -CONFIG_SHA1SUM=y -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -# CONFIG_FEATURE_SORT_BIG is not set -CONFIG_STAT=y -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -CONFIG_FEATURE_TEE_USE_BLOCK_IO=y -# CONFIG_TEST is not set -CONFIG_TOUCH=y -CONFIG_TR=y -# CONFIG_FEATURE_TR_CLASSES is not set -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -CONFIG_UUDECODE=y -CONFIG_UUENCODE=y -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls and more -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -CONFIG_CLEAR=y -# CONFIG_DEALLOCVT is not set -CONFIG_DUMPKMAP=y -CONFIG_GETKEY=y -# CONFIG_LOADFONT is not set -CONFIG_LOADKMAP=y -# CONFIG_OPENVT is not set -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -CONFIG_SETKEYCODES=y -CONFIG_SETLOGCONS=n - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -CONFIG_PIPE_PROGRESS=y -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -# CONFIG_VI is not set -#CONFIG_FEATURE_VI_COLON=y -#CONFIG_FEATURE_VI_YANKMARK=y -#CONFIG_FEATURE_VI_SEARCH=y -#CONFIG_FEATURE_VI_USE_SIGNALS=y -#CONFIG_FEATURE_VI_DOT_CMD=y -#CONFIG_FEATURE_VI_READONLY=y -#CONFIG_FEATURE_VI_SETOPTS=y -#CONFIG_FEATURE_VI_SET=y -#CONFIG_FEATURE_VI_WIN_RESIZE=y -#CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -CONFIG_FEATURE_FIND_INUM=y -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_U_W_TMP=y -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -# CONFIG_CHATTR is not set -# CONFIG_E2FSCK is not set -# CONFIG_FSCK is not set -# CONFIG_LSATTR is not set -# CONFIG_MKE2FS is not set -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -CONFIG_CROND=y -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -CONFIG_CRONTAB=y -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -# CONFIG_FEATURE_LESS_BRACKETS is not set -# CONFIG_FEATURE_LESS_FLAGS is not set -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -CONFIG_WATCHDOG=y - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_MODPROBE is not set -# CONFIG_RMMOD is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -CONFIG_ARPING=y -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -CONFIG_HOSTNAME=y -CONFIG_HTTPD=y -CONFIG_FEATURE_HTTPD_WITHOUT_INETD=y -CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y -# CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY is not set -CONFIG_FEATURE_HTTPD_BASIC_AUTH=y -CONFIG_FEATURE_HTTPD_AUTH_MD5=y -CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y -CONFIG_FEATURE_HTTPD_SETUID=y -CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y -CONFIG_FEATURE_HTTPD_CGI=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y -CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y -CONFIG_FEATURE_IFCONFIG_HW=y -CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -CONFIG_INETD=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y -# CONFIG_FEATURE_INETD_RPC is not set -# CONFIG_IP is not set -CONFIG_IPCALC=y -CONFIG_FEATURE_IPCALC_FANCY=y -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -CONFIG_NAMEIF=y -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -CONFIG_FEATURE_TELNET_TTYPE=y -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -CONFIG_FEATURE_TFTP_BLOCKSIZE=y -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE=y -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set -CONFIG_VCONFIG=y -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y -# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set -CONFIG_ZCIP=y - -# -# udhcp Server/Client -# -CONFIG_APP_UDHCPD=y -CONFIG_APP_UDHCPC=y -CONFIG_APP_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set - -# -# Process Utilities -# -CONFIG_FREE=y -# CONFIG_FUSER is not set -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -# CONFIG_FEATURE_PS_WIDE is not set -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -FEATURE_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y -CONFIG_SYSCTL=y - -# -# Another Bourne-like Shell -# -# CONFIG_FEATURE_SH_IS_ASH is not set -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -CONFIG_FEATURE_SH_IS_NONE=y -# CONFIG_ASH is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -CONFIG_FREERAMDISK=y -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -# CONFIG_HWCLOCK is not set -# CONFIG_IPCRM is not set -CONFIG_IPCS=y -CONFIG_LOSETUP=y -CONFIG_MDEV=y -CONFIG_FEATURE_MDEV_CONF=y -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -# CONFIG_MORE is not set -CONFIG_PIVOT_ROOT=y -CONFIG_FEATURE_MOUNT_NFS=y -# CONFIG_RDATE is not set -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -# CONFIG_SWITCH_ROOT is not set -CONFIG_MOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -CONFIG_DEBUG_YANK_SUSv2=y diff --git a/packages/busybox/busybox-1.5.0/slugos/.mtn2git_empty b/packages/busybox/busybox-1.5.0/slugos/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.5.0/slugos/defconfig b/packages/busybox/busybox-1.5.0/slugos/defconfig deleted file mode 100644 index 8c61fedfdb..0000000000 --- a/packages/busybox/busybox-1.5.0/slugos/defconfig +++ /dev/null @@ -1,686 +0,0 @@ -# -# Automatically generated make config: don't edit -# Busybox version: 1.5.0 -# Mon Apr 2 17:38:36 2007 -# -CONFIG_HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_DESKTOP is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -CONFIG_FEATURE_VERBOSE_USAGE=y -CONFIG_FEATURE_COMPRESS_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -CONFIG_LOCALE_SUPPORT=y -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_SUID=y -CONFIG_FEATURE_SYSLOG=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -CONFIG_FEATURE_HAVE_RPC=y -# CONFIG_SELINUX is not set -# CONFIG_FEATURE_EXEC_PREFER_APPLETS is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -CONFIG_BUILD_AT_ONCE=y - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_WERROR is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_INCLUDE_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -CONFIG_PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_PASSWORD_MINLEN=6 -CONFIG_MD5_SIZE_VS_SPEED=2 -CONFIG_FEATURE_EDITING=y -CONFIG_FEATURE_EDITING_FANCY_KEYS=y -# CONFIG_FEATURE_EDITING_VI is not set -CONFIG_FEATURE_EDITING_HISTORY=15 -# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set -CONFIG_FEATURE_TAB_COMPLETION=y -# CONFIG_FEATURE_USERNAME_COMPLETION is not set -CONFIG_FEATURE_EDITING_FANCY_PROMPT=y - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -# CONFIG_CPIO is not set -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -CONFIG_CMP=y -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_BINARY=y -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -CONFIG_DOS2UNIX=y -CONFIG_UNIX2DOS=y -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_FEATURE_ENV_LONG_OPTIONS=y -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -# CONFIG_NOHUP is not set -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -CONFIG_SHA1SUM=y -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -# CONFIG_FEATURE_WC_LARGE is not set -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -CONFIG_CLEAR=y -# CONFIG_DEALLOCVT is not set -# CONFIG_DUMPKMAP is not set -# CONFIG_LOADFONT is not set -# CONFIG_LOADKMAP is not set -# CONFIG_OPENVT is not set -CONFIG_RESET=y -# CONFIG_RESIZE is not set -# CONFIG_FEATURE_RESIZE_PRINT is not set -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y -CONFIG_FEATURE_ALLOW_EXEC=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -CONFIG_FEATURE_FIND_INUM=y -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_FEATURE_FIND_USER=y -CONFIG_FEATURE_FIND_NOT=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_INIT_SYSLOG is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_LOGIN_SCRIPTS is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set -# CONFIG_SU is not set -# CONFIG_FEATURE_SU_SYSLOG is not set -# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -CONFIG_CHATTR=y -# CONFIG_FSCK is not set -# CONFIG_LSATTR is not set - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -# CONFIG_RMMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -# CONFIG_MODPROBE is not set -# CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS is not set -# CONFIG_FEATURE_MODPROBE_FANCY_ALIAS is not set -# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set -# CONFIG_FEATURE_2_4_MODULES is not set -# CONFIG_FEATURE_2_6_MODULES is not set -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FEATURE_DMESG_PRETTY=y -# CONFIG_FBSET is not set -# CONFIG_FEATURE_FBSET_FANCY is not set -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -CONFIG_FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -CONFIG_FEATURE_OSF_LABEL=y -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_FEATURE_MINIX2 is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -# CONFIG_LOSETUP is not set -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -# CONFIG_FEATURE_MOUNT_CIFS is not set -CONFIG_FEATURE_MOUNT_FLAGS=y -CONFIG_FEATURE_MOUNT_FSTAB=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -# CONFIG_SWAPONOFF is not set -# CONFIG_SWITCH_ROOT is not set -CONFIG_UMOUNT=y -CONFIG_FEATURE_UMOUNT_ALL=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CHRT is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -# CONFIG_DC is not set -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_MAXLINES=9999999 -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_NMETER is not set -# CONFIG_RAIDAUTORUN is not set -# CONFIG_READAHEAD is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -# CONFIG_FEATURE_TASKSET_FANCY is not set -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set -# CONFIG_ARP is not set -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set -CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -# CONFIG_IP is not set -# CONFIG_FEATURE_IP_ADDRESS is not set -# CONFIG_FEATURE_IP_LINK is not set -# CONFIG_FEATURE_IP_ROUTE is not set -# CONFIG_FEATURE_IP_TUNNEL is not set -# CONFIG_FEATURE_IP_RULE is not set -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPRULE is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_SERVER is not set -# CONFIG_NC_EXTRA is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -CONFIG_FEATURE_TELNET_TTYPE=y -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_STANDALONE is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set -# CONFIG_APP_UDHCPD is not set -# CONFIG_APP_DHCPRELAY is not set -# CONFIG_APP_DUMPLEASES is not set -CONFIG_APP_UDHCPC=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_FEATURE_RFC3397 is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_KILLALL5 is not set -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -# CONFIG_ASH_READ_NCHARS is not set -# CONFIG_ASH_READ_TIMEOUT is not set -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_BUILTIN_ECHO is not set -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -CONFIG_ASH_EXPAND_PRMT=y -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Runit Utilities -# -# CONFIG_RUNSV is not set -# CONFIG_RUNSVDIR is not set -# CONFIG_SV is not set -# CONFIG_SVLOGD is not set -# CONFIG_CHPST is not set -# CONFIG_SETUIDGID is not set -# CONFIG_ENVUIDGID is not set -# CONFIG_ENVDIR is not set -# CONFIG_SOFTLIMIT is not set -# CONFIG_CHCON is not set -# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set -# CONFIG_GETENFORCE is not set -# CONFIG_GETSEBOOL is not set -# CONFIG_MATCHPATHCON is not set -# CONFIG_RUNCON is not set -# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set -# CONFIG_SELINUXENABLED is not set -# CONFIG_SETENFORCE is not set diff --git a/packages/busybox/busybox-1.5.0/slugos/udhcpscript.patch b/packages/busybox/busybox-1.5.0/slugos/udhcpscript.patch deleted file mode 100644 index dec6c18994..0000000000 --- a/packages/busybox/busybox-1.5.0/slugos/udhcpscript.patch +++ /dev/null @@ -1,133 +0,0 @@ ---- busybox-1.00/.pc/udhcpscript.patch/examples/udhcp/simple.script 2004-10-13 00:18:05.000000000 -0700 -+++ busybox-1.00/examples/udhcp/simple.script 2005-06-05 15:08:28.432605118 -0700 -@@ -1,40 +1,101 @@ - #!/bin/sh -+# openslug UDHCP client script -+# this must set the HW address (MAC) on the interface -+# -+. /etc/default/functions - --# udhcpc script edited by Tim Riker - --[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1 -+echodns(){ -+ local dns -+ if test $# -gt 0 -+ then -+ for dns in "$@" -+ do -+ echo "nameserver $dns" -+ done -+ fi -+} -+ -+# Output the correct contents for resolv.conf -+mkresolv() { -+ test -n "$domain" && echo "search $domain" -+ echodns $dns -+} -+ -+# checksum of a file (or stdin if -) -+md5strm() { -+ md5sum $1 2>/dev/null | sed -n 's/^\([0-9A-Za-z]*\).*$/\1/p' -+} -+ -+bind() { -+ local B N metric i olddomain -+ B= -+ test -n "$broadcast" && B="broadcast $broadcast" -+ N= -+ test -n "$subnet" && N="netmask $subnet" -+ ifconfig "$interface" "$ip" $B $N up -+ -+ # If given router information delete the old information and -+ # enter new stuff, routers get metrics incremented by 1 -+ # between each (this is somewhat arbitrary) -+ if test -n "$router" -+ then -+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null -+ do -+ : -+ done - --RESOLV_CONF="/etc/resolv.conf" --[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" --[ -n "$subnet" ] && NETMASK="netmask $subnet" -+ metric=0 -+ for i in $router -+ do -+ route add default gw "$i" dev "$interface" metric $((metric++)) -+ done -+ fi -+ -+ olddomain= -+ test -r /etc/defaultdomain && olddomain="$(cat /etc/defaultdomain)" -+ if test -n "$domain" -a "$domain" != "$olddomain" -+ then -+ echo "$domain" >/etc/defaultdomain -+ # and update the kernel view too -+ echo "$domain" >/proc/sys/kernel/domainname -+ fi -+ -+ # Update /etc/resolv.conf to reflect domain and dns information, -+ # this always clears resolv.conf if none is given -+ md5old="$(md5strm /etc/resolv.conf)" -+ md5new="$(mkresolv | md5strm -)" -+ test "$md5old" != "$md5new" && mkresolv >/etc/resolv.conf -+} - - case "$1" in -- deconfig) -- /sbin/ifconfig $interface 0.0.0.0 -- ;; -- -- renew|bound) -- /sbin/ifconfig $interface $ip $BROADCAST $NETMASK -- -- if [ -n "$router" ] ; then -- echo "deleting routers" -- while route del default gw 0.0.0.0 dev $interface ; do -- : -- done -- -- metric=0 -- for i in $router ; do -- route add default gw $i dev $interface metric $((metric++)) -- done -+deconfig) -+ # Bring the interface up (without inet at this point) -+ ifconfig "$interface" 0.0.0.0;; -+ -+renew|bound) -+ bind;; -+ -+leasefail) -+ # Pull the values from the config data if (only only if) this -+ # is the config interface -+ if test "$interface" = "$(config iface)" -+ then -+ ip="$(config ip)" -+ if test -n "$ip" -+ then -+ router="$(config gateway)" -+ subnet="$(config netmask)" -+ broadcast="$(config broadcast)" -+ domain="$(config domain)" -+ dns="$(config dns)" -+ -+ bind - fi -+ fi;; - -- echo -n > $RESOLV_CONF -- [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF -- for i in $dns ; do -- echo adding dns $i -- echo nameserver $i >> $RESOLV_CONF -- done -- ;; -+*) echo "udhcpc: $*: unknown command" >&2 -+ exit 1;; - esac - - exit 0 diff --git a/packages/busybox/busybox-1.5.0/udhcpscript.patch b/packages/busybox/busybox-1.5.0/udhcpscript.patch deleted file mode 100644 index fc21d440cd..0000000000 --- a/packages/busybox/busybox-1.5.0/udhcpscript.patch +++ /dev/null @@ -1,17 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- busybox-1.00-rc3/examples/udhcp/simple.script~udhcpscript -+++ busybox-1.00-rc3/examples/udhcp/simple.script -@@ -17,8 +17,7 @@ - /sbin/ifconfig $interface $ip $BROADCAST $NETMASK - - if [ -n "$router" ] ; then -- echo "deleting routers" -- while route del default gw 0.0.0.0 dev $interface ; do -+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do - : - done - diff --git a/packages/busybox/busybox-1.5.0/xargs-double-size.patch b/packages/busybox/busybox-1.5.0/xargs-double-size.patch deleted file mode 100644 index df64554ffc..0000000000 --- a/packages/busybox/busybox-1.5.0/xargs-double-size.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- busybox-1.2.1/findutils/xargs.c.org 2006-09-19 18:18:17.084592997 +0200 -+++ busybox-1.2.1/findutils/xargs.c 2006-09-19 18:18:09.820275793 +0200 -@@ -466,8 +466,8 @@ - have it at 1 meg). Things will work fine with a large ARG_MAX but it - will probably hurt the system more than it needs to; an array of this - size is allocated. */ -- if (orig_arg_max > 20 * 1024) -- orig_arg_max = 20 * 1024; -+ if (orig_arg_max > 40 * 1024) -+ orig_arg_max = 40 * 1024; - n_max_chars = orig_arg_max; - } - max_chars = xmalloc(n_max_chars); diff --git a/packages/busybox/busybox-1.6.0/.mtn2git_empty b/packages/busybox/busybox-1.6.0/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.6.0/angstrom/.mtn2git_empty b/packages/busybox/busybox-1.6.0/angstrom/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.6.0/angstrom/defconfig b/packages/busybox/busybox-1.6.0/angstrom/defconfig deleted file mode 100644 index 1807dab68e..0000000000 --- a/packages/busybox/busybox-1.6.0/angstrom/defconfig +++ /dev/null @@ -1,647 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_COMPRESS_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -CONFIG_LOCALE_SUPPORT=y -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-" -CONFIG_BUILD_AT_ONCE=y - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -# CONFIG_CMP is not set -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_BINARY=y -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_FEATURE_ENV_LONG_OPTIONS=y -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -CONFIG_CHATTR=y -CONFIG_E2FSCK=y -CONFIG_FSCK=y -# CONFIG_LSATTR is not set -CONFIG_MKE2FS=y -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y - -# -# Options common to multiple modutils -# -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -CONFIG_SWITCH_ROOT=y -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set - -# -# udhcp Server/Client -# -CONFIG_APP_UDHCPD=y -CONFIG_APP_UDHCPC=y -CONFIG_APP_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_READ_NCHARS=y -CONFIG_ASH_READ_TIMEOUT=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_BUILTIN_ECHO is not set -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -CONFIG_ASH_EXPAND_PRMT=y -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_KLOGD=y -CONFIG_LOGGER=y diff --git a/packages/busybox/busybox-1.6.0/busybox-mdev.sh b/packages/busybox/busybox-1.6.0/busybox-mdev.sh deleted file mode 100755 index 9744322fa9..0000000000 --- a/packages/busybox/busybox-1.6.0/busybox-mdev.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -MDEV=/sbin/mdev -DESC="Busybox mdev setup" - -# Complain if thing's aren't right -if [ ! -e /proc/filesystems ]; then - echo "mdev requires a mounted procfs, not started." - exit 1 -fi - -if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then - echo "mdev requires tmpfs support, not started." - exit 1 -fi - -if [ ! -d /sys/class/ ]; then - echo "mdev requires a mounted sysfs, not started." - exit 1 -fi - -if [ ! -e /proc/sys/kernel/hotplug ]; then - echo "mdev requires hotplug support, not started." - exit 1 -fi - -# We need to unmount /dev/pts/ and remount it later over the tmpfs -if mountpoint -q /dev/pts/; then - umount -l /dev/pts/ -fi - -if mountpoint -q /dev/shm/; then - umount -l /dev/shm/ -fi - -# Create tmpfs for /dev -echo "Creating tmpfs at /dev" -mount -t tmpfs tmpfs /dev -o size=800k - -# Register mdev as hotplug event helper -echo "$MDEV" > /proc/sys/kernel/hotplug - -# Populate /dev from /sys info -echo "Populating /dev using mdev" -$MDEV -s - -# Touch .udev to inform scripts that /dev needs no further setup -touch /dev/.udev - -# Mount devpts -TTYGRP=5 -TTYMODE=620 -mkdir -m 755 -p /dev/pts -if [ ! -e /dev/ptmx ]; then - mknod -m 666 /dev/ptmx c 5 2 -fi -mount -t devpts devpts /dev/pts -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE - -# Make shm directory -mkdir -m 755 -p /dev/shm - -# Make extraneous links -ln -sf /proc/self/fd /dev/fd -ln -sf /proc/self/fd/0 /dev/stdin -ln -sf /proc/self/fd/1 /dev/stdout -ln -sf /proc/self/fd/2 /dev/stderr -ln -sf /proc/kcore /dev/core -ln -sf /proc/asound/oss/sndstat /dev/sndstat - -exit 0 diff --git a/packages/busybox/busybox-1.6.0/defconfig b/packages/busybox/busybox-1.6.0/defconfig deleted file mode 100644 index 7308eead76..0000000000 --- a/packages/busybox/busybox-1.6.0/defconfig +++ /dev/null @@ -1,647 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -# CONFIG_FEATURE_VERBOSE_USAGE is not set -# CONFIG_FEATURE_COMPRESS_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -CONFIG_LOCALE_SUPPORT=y -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-" -CONFIG_BUILD_AT_ONCE=y - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -# CONFIG_CMP is not set -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_BINARY=y -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_FEATURE_ENV_LONG_OPTIONS=y -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WATCH=y -CONFIG_WC=y -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -CONFIG_CHATTR=y -CONFIG_E2FSCK=y -CONFIG_FSCK=y -# CONFIG_LSATTR is not set -CONFIG_MKE2FS=y -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y - -# -# Options common to multiple modutils -# -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -# CONFIG_SWITCH_ROOT is not set -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -CONFIG_TIME=y -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -# CONFIG_FEATURE_IFUPDOWN_IP is not set -CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -CONFIG_NETSTAT=y -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING6=y -CONFIG_ROUTE=y -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set - -# -# udhcp Server/Client -# -CONFIG_APP_UDHCPD=y -CONFIG_APP_UDHCPC=y -CONFIG_APP_DUMPLEASES=y -CONFIG_FEATURE_UDHCP_SYSLOG=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_IP6_LITERAL=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_UPTIME=y - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -# CONFIG_ASH_READ_NCHARS is not set -# CONFIG_ASH_READ_TIMEOUT is not set -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_BUILTIN_ECHO is not set -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -CONFIG_ASH_EXPAND_PRMT=y -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=63 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -CONFIG_FEATURE_SH_FANCY_PROMPT=y - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_KLOGD=y -CONFIG_LOGGER=y diff --git a/packages/busybox/busybox-1.6.0/df_rootfs.patch b/packages/busybox/busybox-1.6.0/df_rootfs.patch deleted file mode 100644 index 3819b59106..0000000000 --- a/packages/busybox/busybox-1.6.0/df_rootfs.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- busybox-1.3.1.orig/coreutils/df.c 2006-12-26 22:54:50.000000000 -0600 -+++ busybox-1.3.1/coreutils/df.c 2006-12-30 00:45:10.000000000 -0600 -@@ -47,6 +47,7 @@ - struct statfs s; - static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */ - const char *disp_units_hdr = hdr_1k; -+ int root_done = 0; - - #ifdef CONFIG_FEATURE_HUMAN_READABLE - opt_complementary = "h-km:k-hm:m-hk"; -@@ -77,7 +78,7 @@ - - do { - const char *device; -- const char *mount_point; -+ char *mount_point; - - if (mount_table) { - mount_entry = getmntent(mount_table); -@@ -116,17 +117,20 @@ - ) / (blocks_used + s.f_bavail); - } - -- if (strcmp(device, "rootfs") == 0) { -- continue; -- } else if (strcmp(device, "/dev/root") == 0) { -+ if (strcmp(device, "/dev/root") == 0 || strcmp(device, "rootfs") == 0) { - /* Adjusts device to be the real root device, - * or leaves device alone if it can't find it */ -- device = find_block_device("/"); -+ device = find_block_device(mount_point); - if (!device) { - goto SET_ERROR; - } - } - -+ if (strcmp(mount_point, "/") == 0) { -+ if (root_done) continue; -+ root_done = 1; -+ } -+ - #ifdef CONFIG_FEATURE_HUMAN_READABLE - printf("%-20s %9s ", device, - make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr)); diff --git a/packages/busybox/busybox-1.6.0/dhcp-hostname.patch b/packages/busybox/busybox-1.6.0/dhcp-hostname.patch deleted file mode 100644 index 8e7e68a4c9..0000000000 --- a/packages/busybox/busybox-1.6.0/dhcp-hostname.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- busybox-1.5.0/networking/udhcp/dhcpc.c~ 2007-03-22 15:21:23.000000000 -0500 -+++ busybox-1.5.0/networking/udhcp/dhcpc.c 2007-04-01 08:42:41.000000000 -0500 -@@ -136,6 +136,7 @@ - int retval; - int len; - int no_clientid = 0; -+ char hostbuf[256]; /* (default hostname patch) */ - fd_set rfds; - struct timeval tv; - struct dhcpMessage packet; -@@ -214,6 +215,9 @@ - client_config.background_if_no_lease = 1; - if (opt & OPT_h) - client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, str_h, 0); -+ else /* (default hostname patch) default hostname is our hostname as set */ -+ if (gethostname(hostbuf, sizeof(hostbuf)) == 0) -+ client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, hostbuf, 0); - if (opt & OPT_F) { - client_config.fqdn = alloc_dhcp_option(DHCP_FQDN, str_F, 3); - /* Flags: 0000NEOS diff --git a/packages/busybox/busybox-1.6.0/dhcp-increase-retries.patch b/packages/busybox/busybox-1.6.0/dhcp-increase-retries.patch deleted file mode 100644 index f49aa16580..0000000000 --- a/packages/busybox/busybox-1.6.0/dhcp-increase-retries.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- busybox-1.5.0/networking/udhcp/dhcpc.c~ 2007-04-01 08:42:41.000000000 -0500 -+++ busybox-1.5.0/networking/udhcp/dhcpc.c 2007-04-01 21:03:42.000000000 -0500 -@@ -188,7 +188,7 @@ - /* Default options. */ - client_config.interface = "eth0"; - client_config.script = DEFAULT_SCRIPT; -- client_config.retries = 3; -+ client_config.retries = 5; - client_config.timeout = 3; - - /* Parse command line */ diff --git a/packages/busybox/busybox-1.6.0/ifupdown-spurious-environ.patch b/packages/busybox/busybox-1.6.0/ifupdown-spurious-environ.patch deleted file mode 100644 index 812a0b3ee8..0000000000 --- a/packages/busybox/busybox-1.6.0/ifupdown-spurious-environ.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- busybox-1.5.0/networking/ifupdown.c~ 2007-03-22 15:21:23.000000000 -0500 -+++ busybox-1.5.0/networking/ifupdown.c 2007-04-01 08:52:25.000000000 -0500 -@@ -83,6 +83,13 @@ - struct mapping_defn_t *mappings; - }; - -+/* XXX - ifupdown-spurious-environ.patch -- appears to be long obsolete, -+ * but is carried forward because it doesn't seem to hurt anything and -+ * it's non-obvious how to remove the patch from OE without breaking -+ * old builds. MJW -+ */ -+#define environ local_environ -+ - #define OPTION_STR "anvf" USE_FEATURE_IFUPDOWN_MAPPING("m") "i:" - enum { - OPT_do_all = 0x1, diff --git a/packages/busybox/busybox-1.6.0/udhcpscript.patch b/packages/busybox/busybox-1.6.0/udhcpscript.patch deleted file mode 100644 index fc21d440cd..0000000000 --- a/packages/busybox/busybox-1.6.0/udhcpscript.patch +++ /dev/null @@ -1,17 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- busybox-1.00-rc3/examples/udhcp/simple.script~udhcpscript -+++ busybox-1.00-rc3/examples/udhcp/simple.script -@@ -17,8 +17,7 @@ - /sbin/ifconfig $interface $ip $BROADCAST $NETMASK - - if [ -n "$router" ] ; then -- echo "deleting routers" -- while route del default gw 0.0.0.0 dev $interface ; do -+ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do - : - done - diff --git a/packages/busybox/busybox-1.6.0/xargs-double-size.patch b/packages/busybox/busybox-1.6.0/xargs-double-size.patch deleted file mode 100644 index df64554ffc..0000000000 --- a/packages/busybox/busybox-1.6.0/xargs-double-size.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- busybox-1.2.1/findutils/xargs.c.org 2006-09-19 18:18:17.084592997 +0200 -+++ busybox-1.2.1/findutils/xargs.c 2006-09-19 18:18:09.820275793 +0200 -@@ -466,8 +466,8 @@ - have it at 1 meg). Things will work fine with a large ARG_MAX but it - will probably hurt the system more than it needs to; an array of this - size is allocated. */ -- if (orig_arg_max > 20 * 1024) -- orig_arg_max = 20 * 1024; -+ if (orig_arg_max > 40 * 1024) -+ orig_arg_max = 40 * 1024; - n_max_chars = orig_arg_max; - } - max_chars = xmalloc(n_max_chars); diff --git a/packages/busybox/busybox-1.7.2/angstrom/.mtn2git_empty b/packages/busybox/busybox-1.7.2/angstrom/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.7.2/angstrom/defconfig b/packages/busybox/busybox-1.7.2/angstrom/defconfig deleted file mode 100644 index 30e71e8ffe..0000000000 --- a/packages/busybox/busybox-1.7.2/angstrom/defconfig +++ /dev/null @@ -1,753 +0,0 @@ -# -# Automatically generated make config: don't edit -# Busybox version: 1.7.2 -# Fri Oct 12 19:00:27 2007 -# -CONFIG_HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_DESKTOP is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -# CONFIG_FEATURE_VERBOSE_USAGE is not set -CONFIG_FEATURE_COMPRESS_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -CONFIG_LOCALE_SUPPORT=y -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_PIDFILE=y -CONFIG_FEATURE_SUID=y -CONFIG_FEATURE_SUID_CONFIG=y -CONFIG_FEATURE_SUID_CONFIG_QUIET=y -# CONFIG_SELINUX is not set -# CONFIG_FEATURE_PREFER_APPLETS is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" -CONFIG_FEATURE_SYSLOG=y -CONFIG_FEATURE_HAVE_RPC=y - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -CONFIG_BUILD_AT_ONCE=y - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_WERROR is not set -CONFIG_NO_DEBUG_LIB=y -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -# CONFIG_INCLUDE_SUSv2 is not set - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -CONFIG_PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_PASSWORD_MINLEN=6 -CONFIG_MD5_SIZE_VS_SPEED=2 -CONFIG_FEATURE_FAST_TOP=y -# CONFIG_FEATURE_ETC_NETWORKS is not set -CONFIG_FEATURE_EDITING=y -CONFIG_FEATURE_EDITING_MAX_LEN=1024 -# CONFIG_FEATURE_EDITING_FANCY_KEYS is not set -# CONFIG_FEATURE_EDITING_VI is not set -CONFIG_FEATURE_EDITING_HISTORY=15 -CONFIG_FEATURE_EDITING_SAVEHISTORY=y -CONFIG_FEATURE_TAB_COMPLETION=y -CONFIG_FEATURE_USERNAME_COMPLETION=y -CONFIG_FEATURE_EDITING_FANCY_PROMPT=y -CONFIG_MONOTONIC_SYSCALL=y -CONFIG_IOCTL_HEX2STR_ERROR=y - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -# CONFIG_FEATURE_RPM_BZ2 is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_FEATURE_ENV_LONG_OPTIONS=y -# CONFIG_EXPAND is not set -# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -# CONFIG_SPLIT is not set -# CONFIG_FEATURE_SPLIT_FANCY is not set -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -# CONFIG_UNEXPAND is not set -# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WC=y -# CONFIG_FEATURE_WC_LARGE is not set -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -# CONFIG_RESIZE is not set -# CONFIG_FEATURE_RESIZE_PRINT is not set -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -# CONFIG_FEATURE_RUN_PARTS_FANCY is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_CMP is not set -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_BINARY=y -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_MAX_LEN=1024 -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y -CONFIG_FEATURE_ALLOW_EXEC=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_MAXDEPTH=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_FEATURE_FIND_USER=y -CONFIG_FEATURE_FIND_GROUP=y -CONFIG_FEATURE_FIND_NOT=y -CONFIG_FEATURE_FIND_DEPTH=y -CONFIG_FEATURE_FIND_PAREN=y -CONFIG_FEATURE_FIND_SIZE=y -CONFIG_FEATURE_FIND_PRUNE=y -# CONFIG_FEATURE_FIND_DELETE is not set -CONFIG_FEATURE_FIND_PATH=y -CONFIG_FEATURE_FIND_REGEX=y -# CONFIG_FEATURE_FIND_CONTEXT is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_INIT_SYSLOG is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -CONFIG_FEATURE_UTMP=y -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_PAM is not set -# CONFIG_LOGIN_SCRIPTS is not set -# CONFIG_FEATURE_NOLOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set -# CONFIG_CRYPTPW is not set -# CONFIG_CHPASSWD is not set -# CONFIG_SU is not set -# CONFIG_FEATURE_SU_SYSLOG is not set -# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -CONFIG_CHATTR=y -CONFIG_FSCK=y -# CONFIG_LSATTR is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y -CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y - -# -# Options common to multiple modutils -# -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FEATURE_DMESG_PRETTY=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -CONFIG_FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -# CONFIG_FEATURE_MOUNT_CIFS is not set -CONFIG_FEATURE_MOUNT_FLAGS=y -CONFIG_FEATURE_MOUNT_FSTAB=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -CONFIG_SWITCH_ROOT=y -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CHRT is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_MAXLINES=9999999 -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RAIDAUTORUN is not set -# CONFIG_READAHEAD is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -# CONFIG_FEATURE_TASKSET_FANCY is not set -CONFIG_TIME=y -# CONFIG_TTYSIZE is not set -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set -# CONFIG_ARP is not set -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" -# CONFIG_FEATURE_IFUPDOWN_IP is not set -# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set -CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_FEATURE_IP_RULE is not set -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPRULE is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_SERVER is not set -# CONFIG_NC_EXTRA is not set -CONFIG_NETSTAT=y -# CONFIG_FEATURE_NETSTAT_WIDE is not set -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_PING6=y -# CONFIG_PSCAN is not set -CONFIG_FEATURE_FANCY_PING=y -CONFIG_ROUTE=y -# CONFIG_SLATTACH is not set -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_STANDALONE is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set -CONFIG_APP_UDHCPD=y -# CONFIG_APP_DHCPRELAY is not set -CONFIG_APP_DUMPLEASES=y -# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set -CONFIG_APP_UDHCPC=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_FEATURE_RFC3397 is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_KILLALL5 is not set -# CONFIG_NMETER is not set -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y -# CONFIG_FEATURE_TOP_DECIMALS is not set -CONFIG_UPTIME=y -CONFIG_WATCH=y - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_READ_NCHARS=y -CONFIG_ASH_READ_TIMEOUT=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_BUILTIN_ECHO is not set -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -CONFIG_ASH_EXPAND_PRMT=y -# CONFIG_HUSH is not set -# CONFIG_HUSH_HELP is not set -# CONFIG_HUSH_INTERACTIVE is not set -# CONFIG_HUSH_JOB is not set -# CONFIG_HUSH_TICK is not set -# CONFIG_HUSH_IF is not set -# CONFIG_HUSH_LOOPS is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE is not set -# CONFIG_CTTYHACK is not set - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Runit Utilities -# -# CONFIG_RUNSV is not set -# CONFIG_RUNSVDIR is not set -# CONFIG_SV is not set -# CONFIG_SVLOGD is not set -# CONFIG_CHPST is not set -# CONFIG_SETUIDGID is not set -# CONFIG_ENVUIDGID is not set -# CONFIG_ENVDIR is not set -# CONFIG_SOFTLIMIT is not set -# CONFIG_CHCON is not set -# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set -# CONFIG_GETENFORCE is not set -# CONFIG_GETSEBOOL is not set -# CONFIG_LOAD_POLICY is not set -# CONFIG_MATCHPATHCON is not set -# CONFIG_RESTORECON is not set -# CONFIG_RUNCON is not set -# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set -# CONFIG_SELINUXENABLED is not set -# CONFIG_SETENFORCE is not set -# CONFIG_SETFILES is not set -# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set - -# -# ipsvd utilities -# -# CONFIG_TCPSVD is not set -# CONFIG_UDPSVD is not set diff --git a/packages/busybox/busybox-1.7.2/defconfig b/packages/busybox/busybox-1.7.2/defconfig new file mode 100644 index 0000000000..b878e95dec --- /dev/null +++ b/packages/busybox/busybox-1.7.2/defconfig @@ -0,0 +1,753 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.7.2 +# Mon Feb 4 10:11:39 2008 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Busybox Settings +# + +# +# General Configuration +# +# CONFIG_NITPICK is not set +# CONFIG_DESKTOP is not set +# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_SHOW_USAGE=y +# CONFIG_FEATURE_VERBOSE_USAGE is not set +CONFIG_FEATURE_COMPRESS_USAGE=y +# CONFIG_FEATURE_INSTALLER is not set +CONFIG_LOCALE_SUPPORT=y +CONFIG_GETOPT_LONG=y +CONFIG_FEATURE_DEVPTS=y +# CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_PIDFILE=y +CONFIG_FEATURE_SUID=y +CONFIG_FEATURE_SUID_CONFIG=y +CONFIG_FEATURE_SUID_CONFIG_QUIET=y +# CONFIG_SELINUX is not set +# CONFIG_FEATURE_PREFER_APPLETS is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +CONFIG_FEATURE_SYSLOG=y +CONFIG_FEATURE_HAVE_RPC=y + +# +# Build Options +# +# CONFIG_STATIC is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_LFS=y +CONFIG_BUILD_AT_ONCE=y + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_WERROR is not set +CONFIG_NO_DEBUG_LIB=y +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set +# CONFIG_INCLUDE_SUSv2 is not set + +# +# Installation Options +# +# CONFIG_INSTALL_NO_USR is not set +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +CONFIG_PREFIX="./_install" + +# +# Busybox Library Tuning +# +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SIZE_VS_SPEED=2 +CONFIG_FEATURE_FAST_TOP=y +# CONFIG_FEATURE_ETC_NETWORKS is not set +CONFIG_FEATURE_EDITING=y +CONFIG_FEATURE_EDITING_MAX_LEN=1024 +CONFIG_FEATURE_EDITING_FANCY_KEYS=y +# CONFIG_FEATURE_EDITING_VI is not set +CONFIG_FEATURE_EDITING_HISTORY=15 +CONFIG_FEATURE_EDITING_SAVEHISTORY=y +CONFIG_FEATURE_TAB_COMPLETION=y +CONFIG_FEATURE_USERNAME_COMPLETION=y +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y + +# +# Applets +# + +# +# Archival Utilities +# +CONFIG_AR=y +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +CONFIG_BUNZIP2=y +CONFIG_CPIO=y +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set +CONFIG_GUNZIP=y +# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set +CONFIG_GZIP=y +# CONFIG_RPM2CPIO is not set +# CONFIG_RPM is not set +# CONFIG_FEATURE_RPM_BZ2 is not set +CONFIG_TAR=y +CONFIG_FEATURE_TAR_CREATE=y +CONFIG_FEATURE_TAR_BZIP2=y +# CONFIG_FEATURE_TAR_LZMA is not set +CONFIG_FEATURE_TAR_FROM=y +CONFIG_FEATURE_TAR_GZIP=y +# CONFIG_FEATURE_TAR_COMPRESS is not set +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set +# CONFIG_UNCOMPRESS is not set +# CONFIG_UNLZMA is not set +# CONFIG_FEATURE_LZMA_FAST is not set +CONFIG_UNZIP=y + +# +# Common options for cpio and tar +# +# CONFIG_FEATURE_UNARCHIVE_TAPE is not set +# CONFIG_FEATURE_DEB_TAR_GZ is not set +# CONFIG_FEATURE_DEB_TAR_BZ2 is not set +# CONFIG_FEATURE_DEB_TAR_LZMA is not set + +# +# Coreutils +# +CONFIG_BASENAME=y +# CONFIG_CAL is not set +CONFIG_CAT=y +# CONFIG_CATV is not set +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +CONFIG_CHROOT=y +# CONFIG_CKSUM is not set +# CONFIG_COMM is not set +CONFIG_CP=y +CONFIG_CUT=y +CONFIG_DATE=y +# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_IBS_OBS is not set +CONFIG_DF=y +CONFIG_DIRNAME=y +# CONFIG_DOS2UNIX is not set +# CONFIG_UNIX2DOS is not set +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +CONFIG_FEATURE_ENV_LONG_OPTIONS=y +# CONFIG_EXPAND is not set +# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set +CONFIG_EXPR=y +# CONFIG_EXPR_MATH_SUPPORT_64 is not set +CONFIG_FALSE=y +# CONFIG_FOLD is not set +CONFIG_HEAD=y +# CONFIG_FEATURE_FANCY_HEAD is not set +# CONFIG_HOSTID is not set +CONFIG_ID=y +# CONFIG_INSTALL is not set +# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set +# CONFIG_LENGTH is not set +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set +CONFIG_MD5SUM=y +CONFIG_MKDIR=y +CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +CONFIG_MV=y +# CONFIG_FEATURE_MV_LONG_OPTIONS is not set +# CONFIG_NICE is not set +CONFIG_NOHUP=y +CONFIG_OD=y +# CONFIG_PRINTENV is not set +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +# CONFIG_SHA1SUM is not set +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_SPLIT is not set +# CONFIG_FEATURE_SPLIT_FANCY is not set +# CONFIG_STAT is not set +# CONFIG_FEATURE_STAT_FORMAT is not set +CONFIG_STTY=y +# CONFIG_SUM is not set +CONFIG_SYNC=y +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set +CONFIG_TEST=y +# CONFIG_FEATURE_TEST_64 is not set +CONFIG_TOUCH=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +# CONFIG_FEATURE_TR_EQUIV is not set +CONFIG_TRUE=y +CONFIG_TTY=y +CONFIG_UNAME=y +# CONFIG_UNEXPAND is not set +# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set +CONFIG_UNIQ=y +CONFIG_USLEEP=y +# CONFIG_UUDECODE is not set +# CONFIG_UUENCODE is not set +CONFIG_WC=y +# CONFIG_FEATURE_WC_LARGE is not set +CONFIG_WHO=y +CONFIG_WHOAMI=y +CONFIG_YES=y + +# +# Common options for cp and mv +# +# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set + +# +# Common options for ls, more and telnet +# +CONFIG_FEATURE_AUTOWIDTH=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y + +# +# Common options for md5sum, sha1sum +# +CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y + +# +# Console Utilities +# +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y +CONFIG_LOADFONT=y +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +# CONFIG_RESIZE is not set +# CONFIG_FEATURE_RESIZE_PRINT is not set +CONFIG_SETCONSOLE=y +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +# CONFIG_SETKEYCODES is not set +# CONFIG_SETLOGCONS is not set + +# +# Debian Utilities +# +CONFIG_MKTEMP=y +# CONFIG_PIPE_PROGRESS is not set +CONFIG_RUN_PARTS=y +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y +# CONFIG_FEATURE_RUN_PARTS_FANCY is not set +CONFIG_START_STOP_DAEMON=y +CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y +CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y +CONFIG_WHICH=y + +# +# Editors +# +CONFIG_AWK=y +CONFIG_FEATURE_AWK_MATH=y +# CONFIG_CMP is not set +CONFIG_DIFF=y +CONFIG_FEATURE_DIFF_BINARY=y +CONFIG_FEATURE_DIFF_DIR=y +# CONFIG_FEATURE_DIFF_MINIMAL is not set +# CONFIG_ED is not set +CONFIG_PATCH=y +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_MAX_LEN=1024 +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +CONFIG_FEATURE_VI_USE_SIGNALS=y +# CONFIG_FEATURE_VI_DOT_CMD is not set +# CONFIG_FEATURE_VI_READONLY is not set +# CONFIG_FEATURE_VI_SETOPTS is not set +# CONFIG_FEATURE_VI_SET is not set +CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y +CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_XDEV=y +CONFIG_FEATURE_FIND_MAXDEPTH=y +CONFIG_FEATURE_FIND_NEWER=y +# CONFIG_FEATURE_FIND_INUM is not set +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_FEATURE_FIND_USER=y +CONFIG_FEATURE_FIND_GROUP=y +CONFIG_FEATURE_FIND_NOT=y +CONFIG_FEATURE_FIND_DEPTH=y +CONFIG_FEATURE_FIND_PAREN=y +CONFIG_FEATURE_FIND_SIZE=y +CONFIG_FEATURE_FIND_PRUNE=y +# CONFIG_FEATURE_FIND_DELETE is not set +CONFIG_FEATURE_FIND_PATH=y +CONFIG_FEATURE_FIND_REGEX=y +# CONFIG_FEATURE_FIND_CONTEXT is not set +CONFIG_GREP=y +CONFIG_FEATURE_GREP_EGREP_ALIAS=y +CONFIG_FEATURE_GREP_FGREP_ALIAS=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set +# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set +# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set + +# +# Init Utilities +# +# CONFIG_INIT is not set +# CONFIG_DEBUG_INIT is not set +# CONFIG_FEATURE_USE_INITTAB is not set +# CONFIG_FEATURE_INIT_SCTTY is not set +# CONFIG_FEATURE_INIT_SYSLOG is not set +# CONFIG_FEATURE_EXTRA_QUIET is not set +# CONFIG_FEATURE_INIT_COREDUMPS is not set +# CONFIG_FEATURE_INITRD is not set +# CONFIG_HALT is not set +# CONFIG_MESG is not set + +# +# Login/Password Management Utilities +# +# CONFIG_FEATURE_SHADOWPASSWDS is not set +# CONFIG_USE_BB_SHADOW is not set +# CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_ADDGROUP is not set +# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +# CONFIG_DELGROUP is not set +# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set +# CONFIG_ADDUSER is not set +# CONFIG_DELUSER is not set +# CONFIG_GETTY is not set +CONFIG_FEATURE_UTMP=y +# CONFIG_FEATURE_WTMP is not set +# CONFIG_LOGIN is not set +# CONFIG_PAM is not set +# CONFIG_LOGIN_SCRIPTS is not set +# CONFIG_FEATURE_NOLOGIN is not set +# CONFIG_FEATURE_SECURETTY is not set +# CONFIG_PASSWD is not set +# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set +# CONFIG_CRYPTPW is not set +# CONFIG_CHPASSWD is not set +# CONFIG_SU is not set +# CONFIG_FEATURE_SU_SYSLOG is not set +# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set +# CONFIG_SULOGIN is not set +# CONFIG_VLOCK is not set + +# +# Linux Ext2 FS Progs +# +CONFIG_CHATTR=y +CONFIG_FSCK=y +# CONFIG_LSATTR is not set + +# +# Linux Module Utilities +# +CONFIG_INSMOD=y +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +CONFIG_RMMOD=y +CONFIG_LSMOD=y +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +CONFIG_MODPROBE=y +CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y +CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y + +# +# Options common to multiple modutils +# +CONFIG_FEATURE_CHECK_TAINTED_MODULE=y +# CONFIG_FEATURE_2_4_MODULES is not set +CONFIG_FEATURE_2_6_MODULES=y +# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set + +# +# Linux System Utilities +# +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +CONFIG_FBSET=y +CONFIG_FEATURE_FBSET_FANCY=y +CONFIG_FEATURE_FBSET_READMODE=y +# CONFIG_FDFLUSH is not set +# CONFIG_FDFORMAT is not set +CONFIG_FDISK=y +CONFIG_FDISK_SUPPORT_LARGE_DISKS=y +CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_FDISK_ADVANCED is not set +# CONFIG_FREERAMDISK is not set +CONFIG_FSCK_MINIX=y +CONFIG_MKFS_MINIX=y + +# +# Minix filesystem support +# +CONFIG_FEATURE_MINIX2=y +# CONFIG_GETOPT is not set +CONFIG_HEXDUMP=y +CONFIG_HWCLOCK=y +CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y +CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +CONFIG_LOSETUP=y +# CONFIG_MDEV is not set +# CONFIG_FEATURE_MDEV_CONF is not set +# CONFIG_FEATURE_MDEV_EXEC is not set +# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_V0 is not set +CONFIG_MORE=y +CONFIG_FEATURE_USE_TERMIOS=y +CONFIG_MOUNT=y +CONFIG_FEATURE_MOUNT_NFS=y +# CONFIG_FEATURE_MOUNT_CIFS is not set +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +CONFIG_PIVOT_ROOT=y +CONFIG_RDATE=y +# CONFIG_READPROFILE is not set +# CONFIG_SETARCH is not set +CONFIG_SWAPONOFF=y +CONFIG_SWITCH_ROOT=y +CONFIG_UMOUNT=y +# CONFIG_FEATURE_UMOUNT_ALL is not set + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set + +# +# Miscellaneous Utilities +# +# CONFIG_ADJTIMEX is not set +# CONFIG_BBCONFIG is not set +# CONFIG_CHRT is not set +# CONFIG_CROND is not set +# CONFIG_DEBUG_CROND_OPTION is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +# CONFIG_CRONTAB is not set +CONFIG_DC=y +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +# CONFIG_EJECT is not set +# CONFIG_LAST is not set +CONFIG_LESS=y +CONFIG_FEATURE_LESS_MAXLINES=9999999 +CONFIG_FEATURE_LESS_BRACKETS=y +CONFIG_FEATURE_LESS_FLAGS=y +# CONFIG_FEATURE_LESS_FLAGCS is not set +# CONFIG_FEATURE_LESS_MARKS is not set +# CONFIG_FEATURE_LESS_REGEXP is not set +# CONFIG_HDPARM is not set +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +# CONFIG_MAKEDEVS is not set +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +# CONFIG_FEATURE_MAKEDEVS_TABLE is not set +# CONFIG_MOUNTPOINT is not set +# CONFIG_MT is not set +# CONFIG_RAIDAUTORUN is not set +# CONFIG_READAHEAD is not set +# CONFIG_RUNLEVEL is not set +# CONFIG_RX is not set +CONFIG_STRINGS=y +# CONFIG_SETSID is not set +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +CONFIG_TIME=y +# CONFIG_TTYSIZE is not set +# CONFIG_WATCHDOG is not set + +# +# Networking Utilities +# +CONFIG_FEATURE_IPV6=y +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +# CONFIG_ARP is not set +# CONFIG_ARPING is not set +# CONFIG_DNSD is not set +# CONFIG_ETHER_WAKE is not set +# CONFIG_FAKEIDENTD is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set +# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +# CONFIG_FEATURE_IFCONFIG_SLIP is not set +# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set +CONFIG_FEATURE_IFCONFIG_HW=y +# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +CONFIG_IFUPDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" +# CONFIG_FEATURE_IFUPDOWN_IP is not set +# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set +CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y +CONFIG_FEATURE_IFUPDOWN_MAPPING=y +# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +# CONFIG_INETD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_TUNNEL=y +# CONFIG_FEATURE_IP_RULE is not set +# CONFIG_FEATURE_IP_SHORT_FORMS is not set +# CONFIG_IPADDR is not set +# CONFIG_IPLINK is not set +# CONFIG_IPROUTE is not set +# CONFIG_IPTUNNEL is not set +# CONFIG_IPRULE is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_NAMEIF is not set +CONFIG_NC=y +# CONFIG_NC_SERVER is not set +# CONFIG_NC_EXTRA is not set +CONFIG_NETSTAT=y +# CONFIG_FEATURE_NETSTAT_WIDE is not set +CONFIG_NSLOOKUP=y +CONFIG_PING=y +CONFIG_PING6=y +# CONFIG_PSCAN is not set +CONFIG_FEATURE_FANCY_PING=y +CONFIG_ROUTE=y +# CONFIG_SLATTACH is not set +CONFIG_TELNET=y +# CONFIG_FEATURE_TELNET_TTYPE is not set +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +# CONFIG_TELNETD is not set +# CONFIG_FEATURE_TELNETD_STANDALONE is not set +CONFIG_TFTP=y +CONFIG_FEATURE_TFTP_GET=y +CONFIG_FEATURE_TFTP_PUT=y +# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set +# CONFIG_DEBUG_TFTP is not set +CONFIG_TRACEROUTE=y +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +CONFIG_APP_UDHCPD=y +# CONFIG_APP_DHCPRELAY is not set +CONFIG_APP_DUMPLEASES=y +# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set +CONFIG_APP_UDHCPC=y +# CONFIG_FEATURE_UDHCP_DEBUG is not set +# CONFIG_FEATURE_RFC3397 is not set +# CONFIG_VCONFIG is not set +CONFIG_WGET=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_LONG_OPTIONS=y +# CONFIG_ZCIP is not set + +# +# Process Utilities +# +CONFIG_FREE=y +CONFIG_FUSER=y +CONFIG_KILL=y +CONFIG_KILLALL=y +# CONFIG_KILLALL5 is not set +# CONFIG_NMETER is not set +CONFIG_PIDOF=y +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set +CONFIG_PS=y +CONFIG_FEATURE_PS_WIDE=y +CONFIG_RENICE=y +CONFIG_BB_SYSCTL=y +CONFIG_TOP=y +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +# CONFIG_FEATURE_TOP_DECIMALS is not set +CONFIG_UPTIME=y +CONFIG_WATCH=y + +# +# Shells +# +CONFIG_FEATURE_SH_IS_ASH=y +# CONFIG_FEATURE_SH_IS_HUSH is not set +# CONFIG_FEATURE_SH_IS_LASH is not set +# CONFIG_FEATURE_SH_IS_MSH is not set +# CONFIG_FEATURE_SH_IS_NONE is not set +CONFIG_ASH=y + +# +# Ash Shell Options +# +CONFIG_ASH_JOB_CONTROL=y +CONFIG_ASH_READ_NCHARS=y +CONFIG_ASH_READ_TIMEOUT=y +CONFIG_ASH_ALIAS=y +CONFIG_ASH_MATH_SUPPORT=y +# CONFIG_ASH_MATH_SUPPORT_64 is not set +CONFIG_ASH_GETOPTS=y +# CONFIG_ASH_BUILTIN_ECHO is not set +CONFIG_ASH_BUILTIN_TEST=y +# CONFIG_ASH_CMDCMD is not set +# CONFIG_ASH_MAIL is not set +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +# CONFIG_ASH_RANDOM_SUPPORT is not set +CONFIG_ASH_EXPAND_PRMT=y +# CONFIG_HUSH is not set +# CONFIG_HUSH_HELP is not set +# CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_JOB is not set +# CONFIG_HUSH_TICK is not set +# CONFIG_HUSH_IF is not set +# CONFIG_HUSH_LOOPS is not set +# CONFIG_LASH is not set +# CONFIG_MSH is not set + +# +# Bourne Shell Options +# +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE is not set +# CONFIG_CTTYHACK is not set + +# +# System Logging Utilities +# +CONFIG_SYSLOGD=y +CONFIG_FEATURE_ROTATE_LOGFILE=y +CONFIG_FEATURE_REMOTE_LOG=y +CONFIG_FEATURE_IPC_SYSLOG=y +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 +CONFIG_LOGREAD=y +CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y +CONFIG_KLOGD=y +CONFIG_LOGGER=y + +# +# Runit Utilities +# +# CONFIG_RUNSV is not set +# CONFIG_RUNSVDIR is not set +# CONFIG_SV is not set +# CONFIG_SVLOGD is not set +# CONFIG_CHPST is not set +# CONFIG_SETUIDGID is not set +# CONFIG_ENVUIDGID is not set +# CONFIG_ENVDIR is not set +# CONFIG_SOFTLIMIT is not set +# CONFIG_CHCON is not set +# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set +# CONFIG_GETENFORCE is not set +# CONFIG_GETSEBOOL is not set +# CONFIG_LOAD_POLICY is not set +# CONFIG_MATCHPATHCON is not set +# CONFIG_RESTORECON is not set +# CONFIG_RUNCON is not set +# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set +# CONFIG_SELINUXENABLED is not set +# CONFIG_SETENFORCE is not set +# CONFIG_SETFILES is not set +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set + +# +# ipsvd utilities +# +# CONFIG_TCPSVD is not set +# CONFIG_UDPSVD is not set diff --git a/packages/busybox/busybox-1.7.2/files/.mtn2git_empty b/packages/busybox/busybox-1.7.2/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/busybox/busybox_1.00.bb b/packages/busybox/busybox_1.00.bb deleted file mode 100644 index 262d6afff1..0000000000 --- a/packages/busybox/busybox_1.00.bb +++ /dev/null @@ -1,112 +0,0 @@ -require busybox.inc - -PR = "r38" - -SRC_URI += "file://add-getkey-applet.patch;patch=1 \ - file://below.patch;patch=1 \ - file://defconfig \ - file://df.patch;patch=1 \ - file://dhcpretrytime.patch;patch=1 \ - file://fbset.patch;patch=1 \ - file://gzip-spurious-const.patch;patch=1 \ - file://hdparm_M.patch;patch=1 \ - file://iproute-flush-cache.patch;patch=1;pnum=0 \ - file://mount-all-type.patch;patch=1 \ - file://readlink.patch;patch=1 \ - file://rmmod.patch;patch=1 \ - file://start-stop-daemon-oknodo-support.patch;patch=1 \ - file://uclibc_posix.patch;patch=1 \ - file://udhcppidfile-breakage.patch;patch=1 \ - file://udhcppidfile.patch;patch=1 \ - file://unzip-endian-fixes.patch;patch=1;pnum=0 \ - file://unzip-enhancement-and-fixes.patch;patch=1;pnum=0" - -SRC_URI_append_mtx-1 = " file://linux-types.patch;patch=1" -SRC_URI_append_mtx-2 = " file://linux-types.patch;patch=1" - -S = "${WORKDIR}/busybox-${PV}" - -do_configure () { - install -m 0644 ${WORKDIR}/defconfig ${S}/.config - cml1_do_configure -} - -do_install () { - install -d ${D}${sysconfdir}/init.d - oe_runmake 'PREFIX=${D}' install - - # Move everything to /busybox (not supposed to end up in any package) - install -d ${D}/busybox - mv ${D}${base_bindir} ${D}${base_sbindir} ${D}${prefix} ${D}/busybox/ - # Move the busybox binary back to /bin - install -d ${D}${base_bindir} - mv ${D}/busybox${base_bindir}/busybox ${D}${base_bindir}/ - # Move back the sh symlink - test -h ${D}/busybox${base_bindir}/sh && mv ${D}/busybox${base_bindir}/sh ${D}${base_bindir}/ - - install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/ - install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/ - if grep "CONFIG_CROND=y" ${WORKDIR}/defconfig; then - # Move crond back to /usr/sbin/crond - install -d ${D}${sbindir} - mv ${D}/busybox${sbindir}/crond ${D}${sbindir}/ - - install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/ - fi - if grep "CONFIG_HTTPD=y" ${WORKDIR}/defconfig; then - # Move httpd back to /usr/sbin/httpd - install -d ${D}${sbindir} - mv ${D}/busybox${sbindir}/httpd ${D}${sbindir}/ - - install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/ - install -d ${D}/srv/www - fi - if grep "CONFIG_UDHCPD=y" ${WORKDIR}/defconfig; then - # Move udhcpd back to /usr/sbin/udhcpd - install -d ${D}${sbindir} - mv ${D}/busybox${sbindir}/udhcpd ${D}${sbindir}/ - - install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/ - fi - if grep "CONFIG_HWCLOCK=y" ${WORKDIR}/defconfig; then - # Move hwclock back to /sbin/hwclock - install -d ${D}${base_sbindir} - mv ${D}/busybox${base_sbindir}/hwclock ${D}${base_sbindir}/ - - install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/ - fi - if grep "CONFIG_UDHCPC=y" ${WORKDIR}/defconfig; then - # Move dhcpc back to /usr/sbin/udhcpc - install -d ${D}${base_sbindir} - mv ${D}/busybox${base_sbindir}/udhcpc ${D}${base_sbindir}/ - - install -d ${D}${sysconfdir}/udhcpc.d - install -d ${D}${datadir}/udhcpc - install -m 0755 ${S}/examples/udhcp/simple.script ${D}${sysconfdir}/udhcpc.d/50default - install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script - fi - - install -m 0644 ${S}/busybox.links ${D}${sysconfdir} -} - -pkg_prerm_${PN} () { - # This is so you can make busybox commit suicide - removing busybox with no other packages - # providing its files, this will make update-alternatives work, but the update-rc.d part - # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh - tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX` - cp -pPR /bin/busybox $tmpdir/ - ln -s /bin/busybox $tmpdir/[ - ln -s /bin/busybox $tmpdir/test - ln -s /bin/busybox $tmpdir/head - ln -s /bin/busybox $tmpdir/sh - ln -s /bin/busybox $tmpdir/basename - ln -s /bin/busybox $tmpdir/echo - ln -s /bin/busybox $tmpdir/mv - ln -s /bin/busybox $tmpdir/ln - ln -s /bin/busybox $tmpdir/dirname - ln -s /bin/busybox $tmpdir/rm - ln -s /bin/busybox $tmpdir/sed - ln -s /bin/busybox $tmpdir/sort - export PATH=$PATH:$tmpdir - while read link; do case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; esac; bn=`basename $link`; sh /usr/bin/update-alternatives --remove $bn $to; done ${S}/.config - echo "USING_CROSS_COMPILER=y" >> ${S}/.config - - sed -e '/CROSS_COMPILER_PREFIX/d' \ - -e '/USING_CROSS_COMPILER/d' \ - '${S}/.config.oe' >>'${S}/.config' - cml1_do_configure -} - -do_install () { - install -d ${D}${sysconfdir}/init.d - oe_runmake "PREFIX=${D}" install - cp -pPR ${S}/_install/* ${D}/ - - # Move everything to /busybox (not supposed to end up in any package) - install -d ${D}/busybox - ls ${D} -R - - mv ${D}${base_bindir} ${D}${base_sbindir} ${D}${prefix} ${D}/busybox/ - # Move the busybox binary back to /bin - install -d ${D}${base_bindir} - mv ${D}/busybox${base_bindir}/busybox ${D}${base_bindir}/ - # Move back the sh symlink - test -h ${D}/busybox${base_bindir}/sh && mv ${D}/busybox${base_bindir}/sh ${D}${base_bindir}/ - - install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/ - install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/ - if grep "CONFIG_CROND=y" ${WORKDIR}/defconfig; then - # Move crond back to /usr/sbin/crond - install -d ${D}${sbindir} - mv ${D}/busybox${sbindir}/crond ${D}${sbindir}/ - - install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/ - fi - if grep "CONFIG_HTTPD=y" ${WORKDIR}/defconfig; then - # Move httpd back to /usr/sbin/httpd - install -d ${D}${sbindir} - mv ${D}/busybox${sbindir}/httpd ${D}${sbindir}/ - - install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/ - install -d ${D}/srv/www - fi - if grep "CONFIG_APP_UDHCPD=y" ${WORKDIR}/defconfig; then - # Move udhcpd back to /usr/sbin/udhcpd - install -d ${D}${sbindir} - mv ${D}/busybox${sbindir}/udhcpd ${D}${sbindir}/ - - install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/ - fi - if grep "CONFIG_HWCLOCK=y" ${WORKDIR}/defconfig; then - # Move hwclock back to /sbin/hwclock - install -d ${D}${base_sbindir} - mv ${D}/busybox${base_sbindir}/hwclock ${D}${base_sbindir}/ - - install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/ - fi - if grep "CONFIG_APP_UDHCPC=y" ${WORKDIR}/defconfig; then - # Move dhcpc back to /usr/sbin/udhcpc - install -d ${D}${base_sbindir} - mv ${D}/busybox${base_sbindir}/udhcpc ${D}${base_sbindir}/ - - install -d ${D}${sysconfdir}/udhcpc.d - install -d ${D}${datadir}/udhcpc - install -m 0755 ${S}/examples/udhcp/simple.script ${D}${sysconfdir}/udhcpc.d/50default - install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script - fi - - install -m 0644 ${S}/busybox.links ${D}${sysconfdir} -} - -pkg_prerm_${PN} () { - # This is so you can make busybox commit suicide - removing busybox with no other packages - # providing its files, this will make update-alternatives work, but the update-rc.d part - # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh - tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX` - ln -s /bin/busybox $tmpdir/[ - ln -s /bin/busybox $tmpdir/test - ln -s /bin/busybox $tmpdir/head - ln -s /bin/busybox $tmpdir/sh - ln -s /bin/busybox $tmpdir/basename - ln -s /bin/busybox $tmpdir/echo - ln -s /bin/busybox $tmpdir/mv - ln -s /bin/busybox $tmpdir/ln - ln -s /bin/busybox $tmpdir/dirname - ln -s /bin/busybox $tmpdir/rm - ln -s /bin/busybox $tmpdir/sed - ln -s /bin/busybox $tmpdir/sort - export PATH=$PATH:$tmpdir - while read link; do case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; esac; bn=`basename $link`; sh /usr/bin/update-alternatives --remove $bn $to; done Date: Fri, 8 Feb 2008 12:40:24 +0000 Subject: beforelight: add 1.0.3 --- packages/xorg-app/beforelight_1.0.3.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-app/beforelight_1.0.3.bb diff --git a/packages/xorg-app/beforelight_1.0.3.bb b/packages/xorg-app/beforelight_1.0.3.bb new file mode 100644 index 0000000000..c4833b03fd --- /dev/null +++ b/packages/xorg-app/beforelight_1.0.3.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc + +DESCRIPTION = "a sample implementation of a screen saver for X" +DEPENDS += " virtual/libx11 libxscrnsaver libxt libxaw libxt" +PE = "1" -- cgit v1.2.3 From 884b5402baf9bd3bc05b8cf1f911f5d15f1b73e0 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 12:42:01 +0000 Subject: xfs: add 1.0.5 --- packages/xorg-app/xfs_1.0.5.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-app/xfs_1.0.5.bb diff --git a/packages/xorg-app/xfs_1.0.5.bb b/packages/xorg-app/xfs_1.0.5.bb new file mode 100644 index 0000000000..8cef4bda9a --- /dev/null +++ b/packages/xorg-app/xfs_1.0.5.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc + +DESCRIPTION = "X fontserver" +DEPENDS += " libfs libxfont xtrans" +PE = "1" -- cgit v1.2.3 From 031b782c6b7e8e4d9340a9bf1eb9540b246eb0e1 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 12:43:49 +0000 Subject: xgamma: add 1.0.2 --- packages/xorg-app/xgamma_1.0.2.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-app/xgamma_1.0.2.bb diff --git a/packages/xorg-app/xgamma_1.0.2.bb b/packages/xorg-app/xgamma_1.0.2.bb new file mode 100644 index 0000000000..e5d479aa81 --- /dev/null +++ b/packages/xorg-app/xgamma_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc + +DESCRIPTION = "Alter a monitor's gamma correction through the X server" +DEPENDS += " virtual/libx11 libxxf86vm" +PE = "1" -- cgit v1.2.3 From e582b3865657def8accccd11da77dcb27762afc6 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 12:46:09 +0000 Subject: xpr: add 1.0.2 --- packages/xorg-app/xpr_1.0.2.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-app/xpr_1.0.2.bb diff --git a/packages/xorg-app/xpr_1.0.2.bb b/packages/xorg-app/xpr_1.0.2.bb new file mode 100644 index 0000000000..96b340c8c7 --- /dev/null +++ b/packages/xorg-app/xpr_1.0.2.bb @@ -0,0 +1,5 @@ +require xorg-app-common.inc + +DESCRIPTION = "print an X window dump" +DEPENDS += " libxmu virtual/libx11" +PE = "1" -- cgit v1.2.3 From 5b9abc221cdb5285082571db0833796f58380dc3 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 13:14:36 +0000 Subject: add preferred-xorg-versions-X11R7.4 in preparation for the 2008-03-01 release * work in progress, subject to change --- .../include/preferred-xorg-versions-X11R7.4.inc | 286 +++++++++++++++++++++ 1 file changed, 286 insertions(+) create mode 100644 conf/distro/include/preferred-xorg-versions-X11R7.4.inc diff --git a/conf/distro/include/preferred-xorg-versions-X11R7.4.inc b/conf/distro/include/preferred-xorg-versions-X11R7.4.inc new file mode 100644 index 0000000000..b04f72180d --- /dev/null +++ b/conf/distro/include/preferred-xorg-versions-X11R7.4.inc @@ -0,0 +1,286 @@ +# see http://www.x.org/wiki/Releases/7.4 +# WORK IN PROGRESS, 7.4 will be released on 2008-03-01 + +PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg" + +PREFERRED_PROVIDER_libxext ?= "libxext" +PREFERRED_PROVIDER_xext ?= "libxext" +PREFERRED_PROVIDER_libxi ?= "libxi" +PREFERRED_PROVIDER_libxft ?= "libxft" +PREFERRED_PROVIDER_virtual/libx11 ?= "libx11" +PREFERRED_PROVIDER_libxpm ?= "libxpm" +PREFERRED_PROVIDER_xpm ?= "libxpm" +PREFERRED_PROVIDER_libxt ?= "libxt" +PREFERRED_PROVIDER_libxaw ?= "libxaw" +PREFERRED_PROVIDER_libice ?= "libice" +PREFERRED_PROVIDER_libxrender ?= "libxrender" +PREFERRED_PROVIDER_libxcursor ?= "libxcursor" +PREFERRED_PROVIDER_xextensions ?= "xextensions" +PREFERRED_PROVIDER_xproto ?= "xproto" +PREFERRED_PROVIDER_x11 ?= "libx11" +PREFERRED_PROVIDER_libxv ?= "libxv" +PREFERRED_PROVIDER_xft ?= "libxft" +PREFERRED_PROVIDER_libxrandr ?= "libxrandr" +PREFERRED_PROVIDER_libxdamage ?= "libxdamage" +PREFERRED_PROVIDER_libxcomposite ?= "libxcomposite" +PREFERRED_PROVIDER_libxfixes ?= "libxfixes" +PREFERRED_PROVIDER_libxinerama ?= "libxinerama" +PREFERRED_PROVIDER_libxxf86vm ?= "libxxf86vm" +PREFERRED_PROVIDER_libxmu ?= "libxmu" +PREFERRED_PROVIDER_libsm ?= "libsm" +PREFERRED_PROVIDER_xrandr ?= "xrandr" +PREFERRED_PROVIDER_xserver ?= "xserver-xorg" +PREFERRED_PROVIDER_virtual/xorg ?= "xserver-xorg" + +PREFERRED_VERSION_task-xorg ?= "X11R7.4" + +# app +PREFERRED_VERSION_appres ?= "1.0.1" +PREFERRED_VERSION_bdftopcf ?= "1.0.1" +PREFERRED_VERSION_beforelight ?= "1.0.3" +PREFERRED_VERSION_bitmap ?= "1.0.3" +PREFERRED_VERSION_editres ?= "1.0.3" +PREFERRED_VERSION_fontosfnt ?= "1.0.3" +PREFERRED_VERSION_fslsfonts ?= "1.0.1" +PREFERRED_VERSION_fstobdf ?= "1.0.2" +PREFERRED_VERSION_iceauth ?= "1.0.2" +PREFERRED_VERSION_ico ?= "1.0.2" +PREFERRED_VERSION_lbxproxy ?= "1.0.1" +PREFERRED_VERSION_listres ?= "1.0.1" +PREFERRED_VERSION_luit ?= "1.0.3" +PREFERRED_VERSION_mkfontdir-native ?= "1.0.3" +PREFERRED_VERSION_mkfontdir ?= "1.0.3" +PREFERRED_VERSION_mkfontscale ?= "1.0.3" +PREFERRED_VERSION_oclock ?= "1.0.1" +PREFERRED_VERSION_proxymngr ?= "1.0.1" +PREFERRED_VERSION_rgb ?= "1.0.1" +PREFERRED_VERSION_rstart ?= "1.0.2" +PREFERRED_VERSION_scripts ?= "1.0.1" +PREFERRED_VERSION_sessreg ?= "1.0.3" +PREFERRED_VERSION_setxkbmap ?= "1.0.4" +PREFERRED_VERSION_smproxy ?= "1.0.2" +PREFERRED_VERSION_twm ?= "1.0.3" +PREFERRED_VERSION_viewres ?= "1.0.1" +PREFERRED_VERSION_x11perf ?= "1.4.1" +PREFERRED_VERSION_xauth ?= "1.0.2" +PREFERRED_VERSION_xbacklight ?= "1.1" +PREFERRED_VERSION_xbiff ?= "1.0.1" +PREFERRED_VERSION_xcalc ?= "1.0.2" +PREFERRED_VERSION_xclipboard ?= "1.0.1" +PREFERRED_VERSION_xclock ?= "1.0.3" +PREFERRED_VERSION_xcmsdb ?= "1.0.1" +PREFERRED_VERSION_xconsole ?= "1.0.3" +PREFERRED_VERSION_xcursorgen ?= "1.0.2" +PREFERRED_VERSION_xdbedizzy ?= "1.0.2" +PREFERRED_VERSION_xditview ?= "1.0.1" +PREFERRED_VERSION_xdm ?= "1.1.6" +PREFERRED_VERSION_xdpyinfo ?= "1.0.2" +PREFERRED_VERSION_xdriinfo ?= "1.0.2" +PREFERRED_VERSION_xedit ?= "1.0.2" +PREFERRED_VERSION_xev ?= "1.0.2" +PREFERRED_VERSION_xeyes ?= "1.0.1" +PREFERRED_VERSION_xxf86dga ?= "1.0.2" +PREFERRED_VERSION_xfd ?= "1.0.1" +PREFERRED_VERSION_xfindproxy ?= "1.0.1" +PREFERRED_VERSION_xfontsel ?= "1.0.2" +PREFERRED_VERSION_xfs ?= "1.0.5" +PREFERRED_VERSION_xfsinfo ?= "1.0.1" +PREFERRED_VERSION_xfwp ?= "1.0.1" +PREFERRED_VERSION_xgamma ?= "1.0.2" +PREFERRED_VERSION_xgc ?= "1.0.1" +PREFERRED_VERSION_xhost ?= "1.0.2" +PREFERRED_VERSION_xinit ?= "1.0.7" +PREFERRED_VERSION_xinput ?= "1.3.0" +PREFERRED_VERSION_xkbcomp ?= "1.0.3" +PREFERRED_VERSION_xkbevd ?= "1.0.2" +PREFERRED_VERSION_xkbprint ?= "1.0.1" +PREFERRED_VERSION_xkbutils ?= "1.0.1" +PREFERRED_VERSION_xkill ?= "1.0.1" +PREFERRED_VERSION_xload ?= "1.0.2" +PREFERRED_VERSION_xlogo ?= "1.0.1" +PREFERRED_VERSION_xlsatoms ?= "1.0.1" +PREFERRED_VERSION_xlsclients ?= "1.0.1" +PREFERRED_VERSION_xlsfonts ?= "1.0.2" +PREFERRED_VERSION_xmag ?= "1.0.2" +PREFERRED_VERSION_xman ?= "1.0.3" +PREFERRED_VERSION_xmessage ?= "1.0.2" +PREFERRED_VERSION_xmh ?= "1.0.1" +PREFERRED_VERSION_xmodmap ?= "1.0.3" +PREFERRED_VERSION_xmore ?= "1.0.1" +PREFERRED_VERSION_xphelloworld ?= "1.0.1" +PREFERRED_VERSION_xplsprinters ?= "1.0.1" +PREFERRED_VERSION_xpr ?= "1.0.2" +PREFERRED_VERSION_xprehashprinterlist ?= "1.0.1" +PREFERRED_VERSION_xprop ?= "1.0.3" +PREFERRED_VERSION_xrandr ?= "1.2.2" +PREFERRED_VERSION_xrdb ?= "1.0.4" +PREFERRED_VERSION_xrefresh ?= "1.0.2" +PREFERRED_VERSION_xrx ?= "1.0.1" +PREFERRED_VERSION_xset ?= "1.0.3" +PREFERRED_VERSION_xsetmode ?= "1.0.0" +PREFERRED_VERSION_xsetpointer ?= "1.0.1" +PREFERRED_VERSION_xsetroot ?= "1.0.2" +PREFERRED_VERSION_xsm ?= "1.0.1" +PREFERRED_VERSION_xstdcmap ?= "1.0.1" +PREFERRED_VERSION_xtrap ?= "1.0.2" +PREFERRED_VERSION_xvidtune ?= "1.0.1" +PREFERRED_VERSION_xvinfo ?= "1.0.2" +PREFERRED_VERSION_xwd ?= "1.0.1" +PREFERRED_VERSION_xwininfo ?= "1.0.3" +PREFERRED_VERSION_xwud ?= "1.0.1" + +# data +PREFERRED_VERSION_xbitmaps ?= "1.0.1" +PREFERRED_VERSION_xcursor-themes ?= "1.0.1" + +# doc +PREFERRED_VERSION_xorg-docs ?= "1.4" +PREFERRED_VERSION_xorg-sgml-doctools ?= "1.2" + +# driver +PREFERRED_VERSION_xf86-input-acecad ?= "1.2.1" +PREFERRED_VERSION_xf86-input-aiptek ?= "1.0.1" +PREFERRED_VERSION_xf86-input-calcomp ?= "1.1.1" +PREFERRED_VERSION_xf86-input-citron ?= "2.2.1" +PREFERRED_VERSION_xf86-input-digitaledge ?= "1.1.0" +PREFERRED_VERSION_xf86-input-dmc ?= "1.1.1" +PREFERRED_VERSION_xf86-input-dynapro ?= "1.1.1" +PREFERRED_VERSION_xf86-input-elo2300 ?= "1.1.1" +PREFERRED_VERSION_xf86-input-elographics ?= "1.0.0.5" +PREFERRED_VERSION_xf86-input-evdev ?= "1.2.0" +PREFERRED_VERSION_xf86-input-fpit ?= "1.1.0" +PREFERRED_VERSION_xf86-input-hyperpen ?= "1.1.0" +PREFERRED_VERSION_xf86-input-jamstudio ?= "1.1.0" +PREFERRED_VERSION_xf86-input-joystick ?= "1.3.1" +PREFERRED_VERSION_xf86-input-keyboard ?= "1.2.2" +PREFERRED_VERSION_xf86-input-magellan ?= "1.1.1" +PREFERRED_VERSION_xf86-input-magictouch ?= "1.0.0.5" +PREFERRED_VERSION_xf86-input-microtouch ?= "1.1.0" +PREFERRED_VERSION_xf86-input-mouse ?= "1.2.3" +PREFERRED_VERSION_xf86-input-mutouch ?= "1.1.0" +PREFERRED_VERSION_xf86-input-palmax ?= "1.1.0" +PREFERRED_VERSION_xf86-input-penmount ?= "1.2.1" +PREFERRED_VERSION_xf86-input-spaceorb ?= "1.1.1" +PREFERRED_VERSION_xf86-input-summa ?= "1.1.0" +PREFERRED_VERSION_xf86-input-tek4957 ?= "1.1.0" +PREFERRED_VERSION_xf86-input-ur98 ?= "1.1.0" +PREFERRED_VERSION_xf86-input-vmmouse ?= "12.4.3" +PREFERRED_VERSION_xf86-input-void ?= "1.1.1" +PREFERRED_VERSION_xf86-video-apm ?= "1.1.1" +PREFERRED_VERSION_xf86-video-ark ?= "0.6.0" +PREFERRED_VERSION_xf86-video-ast ?= "0.81.0" +PREFERRED_VERSION_xf86-video-ati ?= "6.6.193" +PREFERRED_VERSION_xf86-video-chips ?= "1.1.1" +PREFERRED_VERSION_xf86-video-cirrus ?= "1.1.0" +PREFERRED_VERSION_xf86-video-cyrix ?= "1.1.0" +PREFERRED_VERSION_xf86-video-dummy ?= "0.2.0" +PREFERRED_VERSION_xf86-video-fbdev ?= "0.3.1" +PREFERRED_VERSION_xf86-video-glide ?= "1.0.0" +PREFERRED_VERSION_xf86-video-glint ?= "1.1.1" +PREFERRED_VERSION_xf86-video-i128 ?= "1.1.0.6" +PREFERRED_VERSION_xf86-video-i740 ?= "1.1.0" +PREFERRED_VERSION_xf86-video-i810 ?= "1.6.5" +PREFERRED_VERSION_xf86-video-imstt ?= "1.1.0" +PREFERRED_VERSION_xf86-video-intel ?= "2.2.0" +PREFERRED_VERSION_xf86-video-mga ?= "1.4.8" +PREFERRED_VERSION_xf86-video-neomagic ?= "1.1.1" +PREFERRED_VERSION_xf86-video-newport ?= "0.2.1" +PREFERRED_VERSION_xf86-video-nsc ?= "2.8.3" +PREFERRED_VERSION_xf86-video-nv ?= "2.1.7" +PREFERRED_VERSION_xf86-video-radeonhd ?= "1.1.0" +PREFERRED_VERSION_xf86-video-rendition ?= "4.1.3" +PREFERRED_VERSION_xf86-video-s3 ?= "0.5.0" +PREFERRED_VERSION_xf86-video-s3virge ?= "1.9.1" +PREFERRED_VERSION_xf86-video-savage ?= "2.1.3" +PREFERRED_VERSION_xf86-video-siliconmotion ?= "1.4.2" +PREFERRED_VERSION_xf86-video-sis ?= "0.9.4" +PREFERRED_VERSION_xf86-video-sisusb ?= "0.8.1" +PREFERRED_VERSION_xf86-video-sunbw2 ?= "1.1.0" +PREFERRED_VERSION_xf86-video-suncg14 ?= "1.1.0" +PREFERRED_VERSION_xf86-video-suncg3 ?= "1.1.0" +PREFERRED_VERSION_xf86-video-suncg6 ?= "1.1.0" +PREFERRED_VERSION_xf86-video-sunffb ?= "1.1.0" +PREFERRED_VERSION_xf86-video-sunleo ?= "1.1.0" +PREFERRED_VERSION_xf86-video-suntcx ?= "1.1.0" +PREFERRED_VERSION_xf86-video-tdfx ?= "1.3.0" +PREFERRED_VERSION_xf86-video-tga ?= "1.1.0" +PREFERRED_VERSION_xf86-video-trident ?= "1.2.3" +PREFERRED_VERSION_xf86-video-tseng ?= "1.1.1" +PREFERRED_VERSION_xf86-video-v4l ?= "0.1.1" +PREFERRED_VERSION_xf86-video-vermilion ?= "1.0.0" +PREFERRED_VERSION_xf86-video-vesa ?= "1.3.0" +PREFERRED_VERSION_xf86-video-vga ?= "4.1.0" +PREFERRED_VERSION_xf86-video-via ?= "0.2.2" +PREFERRED_VERSION_xf86-video-vmware ?= "10.15.2" +PREFERRED_VERSION_xf86-video-voodoo ?= "1.1.1" + +# font +PREFERRED_VERSION_encodings ?= "1.0.2" +PREFERRED_VERSION_font-screen-cyrillic ?= "1.0.1" +PREFERRED_VERSION_font-util-native ?= "1.0.1" +PREFERRED_VERSION_font-util ?= "1.0.1" + +# lib +PREFERRED_VERSION_diet-x11 ?= "1.1.3" +PREFERRED_VERSION_libdmx ?= "1.0.2" +PREFERRED_VERSION_libfontenc ?= "1.0.4" +PREFERRED_VERSION_libice ?= "1.0.4" +PREFERRED_VERSION_liblbxutil ?= "1.0.1" +PREFERRED_VERSION_libsm ?= "1.0.3" +PREFERRED_VERSION_libx11 ?= "1.1.3" +PREFERRED_VERSION_libx11-native ?= "1.1.1" +PREFERRED_VERSION_libxau ?= "1.0.3" +PREFERRED_VERSION_libxaw ?= "1.0.4" +PREFERRED_VERSION_libxcomposite ?= "0.4.0" +PREFERRED_VERSION_libxcursor ?= "1.1.9" +PREFERRED_VERSION_libxdamage ?= "1.0.4" +PREFERRED_VERSION_libxdmcp-native ?= "1.0.2" +PREFERRED_VERSION_libxdmcp ?= "1.0.2" +PREFERRED_VERSION_libxevie ?= "1.0.2" +PREFERRED_VERSION_libxext ?= "1.0.3" +PREFERRED_VERSION_libxfixes ?= "4.0.3" +PREFERRED_VERSION_libxfont ?= "1.3.1" +PREFERRED_VERSION_libxfontcache ?= "1.0.4" +PREFERRED_VERSION_libxi ?= "1.1.3" +PREFERRED_VERSION_libxinerama ?= "1.0.2" +PREFERRED_VERSION_libxkbfile ?= "1.0.4" +PREFERRED_VERSION_libxkbui ?= "1.0.2" +PREFERRED_VERSION_libxmu ?= "1.0.4" +PREFERRED_VERSION_libxpm ?= "3.5.7" +PREFERRED_VERSION_libxrandr ?= "1.2.2" +PREFERRED_VERSION_libxrender ?= "0.9.4" +PREFERRED_VERSION_libxres ?= "1.0.3" +PREFERRED_VERSION_libxscrnsaver ?= "1.1.2" +PREFERRED_VERSION_libxt ?= "1.0.5" +PREFERRED_VERSION_libxtst ?= "1.0.3" +PREFERRED_VERSION_libxvmc ?= "1.0.4" +PREFERRED_VERSION_libxxf86dga ?= "1.0.2" +PREFERRED_VERSION_libxxf86misc ?= "1.0.1" +PREFERRED_VERSION_libxxf86vm ?= "1.0.1" +PREFERRED_VERSION_xtrans ?= "1.0.4" + +# proto +PREFERRED_VERSION_compositeproto ?= "0.4" +PREFERRED_VERSION_damageproto ?= "1.1.0" +PREFERRED_VERSION_fixesproto ?= "4.0" +PREFERRED_VERSION_glproto ?= "1.4.9" +PREFERRED_VERSION_inputproto ?= "1.4.2.1" +PREFERRED_VERSION_kbproto ?= "1.0.3" +PREFERRED_VERSION_randrproto ?= "1.2.1" +PREFERRED_VERSION_renderproto ?= "0.9.3" +PREFERRED_VERSION_scrnsaverproto ?= "1.1.0" +PREFERRED_VERSION_xf86dgaproto ?= "2.0.3" +PREFERRED_VERSION_xproto-native ?= "7.0.11" +PREFERRED_VERSION_xproto ?= "7.0.11" + +# util +PREFERRED_VERSION_gccmakedep ?= "1.0.2" +PREFERRED_VERSION_imake ?= "1.0.2" +PREFERRED_VERSION_makedepend ?= "1.0.1" +PREFERRED_VERSION_util-macros-native ?= "1.1.5" +PREFERRED_VERSION_util-macros ?= "1.1.5" +PREFERRED_VERSION_xorg-cf-files ?= "1.0.2" + +# xserver +PREFERRED_VERSION_xserver-kdrive ?= "1.4" +PREFERRED_VERSION_xserver-xorg ?= "1.4" -- cgit v1.2.3 From b86c63f95366d6f87975671a0d6da8e10107aabb Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 8 Feb 2008 13:18:47 +0000 Subject: php: fix incorrect unification for php-native by setting S explicitly. --- packages/php/php-native_4.4.4.bb | 4 +++- packages/php/php-native_5.2.0.bb | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/php/php-native_4.4.4.bb b/packages/php/php-native_4.4.4.bb index 07b13be93a..84d1c667b5 100644 --- a/packages/php/php-native_4.4.4.bb +++ b/packages/php/php-native_4.4.4.bb @@ -3,4 +3,6 @@ require php_${PV}.bb inherit native FILESPATH = "${FILE_DIRNAME}/php-${PV}:${FILE_DIRNAME}/php:${FILE_DIRNAME}/files" DEPENDS = "zlib-native" -PR = "r1" +PR = "r2" + +S = "${WORKDIR}/php-${PV}" diff --git a/packages/php/php-native_5.2.0.bb b/packages/php/php-native_5.2.0.bb index b3bf7b56b4..b04103c90b 100644 --- a/packages/php/php-native_5.2.0.bb +++ b/packages/php/php-native_5.2.0.bb @@ -6,4 +6,6 @@ export LD_LIBRARY_PATH = "${STAGING_LIBDIR}" FILESPATH = "${FILE_DIRNAME}/php-${PV}:${FILE_DIRNAME}/php:${FILE_DIRNAME}/files" DEPENDS = "zlib-native libxml2-native" -PR = "r1" +PR = "r2" + +S = "${WORKDIR}/php-${PV}" -- cgit v1.2.3 From 2f72c9607d859edfccd9d951a7d024ae39dbd3e7 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:10:33 +0000 Subject: xf86-input-acecad: add 1.2.1 --- packages/xorg-driver/xf86-input-acecad_1.2.1.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-acecad_1.2.1.bb diff --git a/packages/xorg-driver/xf86-input-acecad_1.2.1.bb b/packages/xorg-driver/xf86-input-acecad_1.2.1.bb new file mode 100644 index 0000000000..c993bc7718 --- /dev/null +++ b/packages/xorg-driver/xf86-input-acecad_1.2.1.bb @@ -0,0 +1,5 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- AceCad input driver" +PE = "1" + -- cgit v1.2.3 From d073a44e7d2b7b5f9033e3a967ba2edee0d602df Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:10:58 +0000 Subject: xf86-input-calcomp: add 1.1.1 --- packages/xorg-driver/xf86-input-calcomp_1.1.1.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-calcomp_1.1.1.bb diff --git a/packages/xorg-driver/xf86-input-calcomp_1.1.1.bb b/packages/xorg-driver/xf86-input-calcomp_1.1.1.bb new file mode 100644 index 0000000000..a309230801 --- /dev/null +++ b/packages/xorg-driver/xf86-input-calcomp_1.1.1.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- Calcomp input driver" +PE = "1" -- cgit v1.2.3 From d8d89fe59d6bcd58d4560568db58f5491ee67004 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:11:36 +0000 Subject: xf86-input-citron: add 2.2.1 --- packages/xorg-driver/xf86-input-citron_2.2.1.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-citron_2.2.1.bb diff --git a/packages/xorg-driver/xf86-input-citron_2.2.1.bb b/packages/xorg-driver/xf86-input-citron_2.2.1.bb new file mode 100644 index 0000000000..4c449b12d7 --- /dev/null +++ b/packages/xorg-driver/xf86-input-citron_2.2.1.bb @@ -0,0 +1,5 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X Server -- Citron input driver" +PE = "1" + -- cgit v1.2.3 From 34aec1cc0cc738aefb971d9e62bf1dedcdd88678 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:12:05 +0000 Subject: xf86-input-dmc: add 1.1.1 --- packages/xorg-driver/xf86-input-dmc_1.1.1.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-dmc_1.1.1.bb diff --git a/packages/xorg-driver/xf86-input-dmc_1.1.1.bb b/packages/xorg-driver/xf86-input-dmc_1.1.1.bb new file mode 100644 index 0000000000..fea3ce83aa --- /dev/null +++ b/packages/xorg-driver/xf86-input-dmc_1.1.1.bb @@ -0,0 +1,5 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- DMC input driver" +PE = "1" + -- cgit v1.2.3 From 331d84a2bd882ced1edff2cb2efdc55cee09a802 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:12:28 +0000 Subject: xf86-input-dynapro: add 1.1.1 --- packages/xorg-driver/xf86-input-dynapro_1.1.1.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-dynapro_1.1.1.bb diff --git a/packages/xorg-driver/xf86-input-dynapro_1.1.1.bb b/packages/xorg-driver/xf86-input-dynapro_1.1.1.bb new file mode 100644 index 0000000000..0033ffe7fa --- /dev/null +++ b/packages/xorg-driver/xf86-input-dynapro_1.1.1.bb @@ -0,0 +1,5 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- Dynapro input driver" +PE = "1" + -- cgit v1.2.3 From e368322517611fd420a6620910b08cf5df667b39 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:12:51 +0000 Subject: xf86-input-elo2300: add 1.1.1 --- packages/xorg-driver/xf86-input-elo2300_1.1.1.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-elo2300_1.1.1.bb diff --git a/packages/xorg-driver/xf86-input-elo2300_1.1.1.bb b/packages/xorg-driver/xf86-input-elo2300_1.1.1.bb new file mode 100644 index 0000000000..7841287fb0 --- /dev/null +++ b/packages/xorg-driver/xf86-input-elo2300_1.1.1.bb @@ -0,0 +1,5 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- ELO2300 input driver" +PE = "1" + -- cgit v1.2.3 From fe7a66468a73156b63f198a46af358d9256e89e2 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:13:15 +0000 Subject: xf86-input-elographics: add 1.1.0 --- packages/xorg-driver/xf86-input-elographics_1.1.0.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-elographics_1.1.0.bb diff --git a/packages/xorg-driver/xf86-input-elographics_1.1.0.bb b/packages/xorg-driver/xf86-input-elographics_1.1.0.bb new file mode 100644 index 0000000000..cb49a58d4c --- /dev/null +++ b/packages/xorg-driver/xf86-input-elographics_1.1.0.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- ELOGraphics input driver" +PE = "2" -- cgit v1.2.3 From 3bc1083398c5b551a3e0a5991b7233ef203d821e Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:13:42 +0000 Subject: xf86-input-evdev: add 1.2.0 --- packages/xorg-driver/xf86-input-evdev_1.2.0.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-evdev_1.2.0.bb diff --git a/packages/xorg-driver/xf86-input-evdev_1.2.0.bb b/packages/xorg-driver/xf86-input-evdev_1.2.0.bb new file mode 100644 index 0000000000..792909621a --- /dev/null +++ b/packages/xorg-driver/xf86-input-evdev_1.2.0.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- evdev input driver" +PE = "1" -- cgit v1.2.3 From c8710a1a18e9377042361c7eb65e7c94f3078016 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:14:08 +0000 Subject: xf86-input-joystick: add 1.3.1 --- packages/xorg-driver/xf86-input-joystick_1.3.1.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-joystick_1.3.1.bb diff --git a/packages/xorg-driver/xf86-input-joystick_1.3.1.bb b/packages/xorg-driver/xf86-input-joystick_1.3.1.bb new file mode 100644 index 0000000000..a53297fd8a --- /dev/null +++ b/packages/xorg-driver/xf86-input-joystick_1.3.1.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- joystick input driver" +PE = "1" -- cgit v1.2.3 From a7416fd744b31e0c8c005b7c55f46800094a6f75 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:14:37 +0000 Subject: xf86-input-magellan: add 1.1.1 --- packages/xorg-driver/xf86-input-magellan_1.1.1.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-magellan_1.1.1.bb diff --git a/packages/xorg-driver/xf86-input-magellan_1.1.1.bb b/packages/xorg-driver/xf86-input-magellan_1.1.1.bb new file mode 100644 index 0000000000..2bbf253d53 --- /dev/null +++ b/packages/xorg-driver/xf86-input-magellan_1.1.1.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- Magellan input driver" +PE = "1" -- cgit v1.2.3 From 7518f2a6425ea41f5842d9cf58caaf4707a7ee05 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:15:14 +0000 Subject: xf86-input-microtouch: add 1.1.1 --- packages/xorg-driver/xf86-input-microtouch_1.1.1.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-microtouch_1.1.1.bb diff --git a/packages/xorg-driver/xf86-input-microtouch_1.1.1.bb b/packages/xorg-driver/xf86-input-microtouch_1.1.1.bb new file mode 100644 index 0000000000..9a90a80b9f --- /dev/null +++ b/packages/xorg-driver/xf86-input-microtouch_1.1.1.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- MicroTouch input driver" +PE = "1" -- cgit v1.2.3 From df97e79b5e745caf428ffcb786b3b2b65d03fe93 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:15:57 +0000 Subject: xf86-input-mouse: add 1.2.3 --- packages/xorg-driver/xf86-input-mouse_1.2.3.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-mouse_1.2.3.bb diff --git a/packages/xorg-driver/xf86-input-mouse_1.2.3.bb b/packages/xorg-driver/xf86-input-mouse_1.2.3.bb new file mode 100644 index 0000000000..e6325675f8 --- /dev/null +++ b/packages/xorg-driver/xf86-input-mouse_1.2.3.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- mouse input driver" +PE = "1" -- cgit v1.2.3 From 4ba7b5b21b1d969c0f01a3d1341d097976d77793 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:16:33 +0000 Subject: xf86-input-penmount: add 1.2.1 --- packages/xorg-driver/xf86-input-penmount_1.2.1.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-penmount_1.2.1.bb diff --git a/packages/xorg-driver/xf86-input-penmount_1.2.1.bb b/packages/xorg-driver/xf86-input-penmount_1.2.1.bb new file mode 100644 index 0000000000..1ed62d4cad --- /dev/null +++ b/packages/xorg-driver/xf86-input-penmount_1.2.1.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- Penmount input driver" +PE = "1" -- cgit v1.2.3 From c3b7279b70e0536b76d471e28e8d6c7d7713d29e Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:17:04 +0000 Subject: xf86-input-spaceorb: add 1.1.1 --- packages/xorg-driver/xf86-input-spaceorb_1.1.1.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-spaceorb_1.1.1.bb diff --git a/packages/xorg-driver/xf86-input-spaceorb_1.1.1.bb b/packages/xorg-driver/xf86-input-spaceorb_1.1.1.bb new file mode 100644 index 0000000000..cf099b8193 --- /dev/null +++ b/packages/xorg-driver/xf86-input-spaceorb_1.1.1.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- SpaceOrb input driver" +PE = "1" -- cgit v1.2.3 From ec77a1251a6a880c73e94a5d4093b8953b8fbb22 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:18:18 +0000 Subject: xf86-input-vmmouse: add 12.4.3 --- packages/xorg-driver/xf86-input-vmmouse_12.4.3.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-vmmouse_12.4.3.bb diff --git a/packages/xorg-driver/xf86-input-vmmouse_12.4.3.bb b/packages/xorg-driver/xf86-input-vmmouse_12.4.3.bb new file mode 100644 index 0000000000..7af9f7ddc9 --- /dev/null +++ b/packages/xorg-driver/xf86-input-vmmouse_12.4.3.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- VMMouse input driver to use with VMWare" +PE = "1" -- cgit v1.2.3 From 0d3d933c8302458905b4323ea1416906e223f4ad Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:18:41 +0000 Subject: xf86-input-void: add 1.1.1 --- packages/xorg-driver/xf86-input-void_1.1.1.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-void_1.1.1.bb diff --git a/packages/xorg-driver/xf86-input-void_1.1.1.bb b/packages/xorg-driver/xf86-input-void_1.1.1.bb new file mode 100644 index 0000000000..2fa7021d95 --- /dev/null +++ b/packages/xorg-driver/xf86-input-void_1.1.1.bb @@ -0,0 +1,4 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- void input driver" +PE = "1" -- cgit v1.2.3 From 6a88cd18e75cd6af668cf37381fe06e7bbd59193 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:19:16 +0000 Subject: xf86-video-ati: add 6.7.197 --- packages/xorg-driver/xf86-video-ati_6.7.197.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-video-ati_6.7.197.bb diff --git a/packages/xorg-driver/xf86-video-ati_6.7.197.bb b/packages/xorg-driver/xf86-video-ati_6.7.197.bb new file mode 100644 index 0000000000..4aae05a747 --- /dev/null +++ b/packages/xorg-driver/xf86-video-ati_6.7.197.bb @@ -0,0 +1,5 @@ +require xorg-driver-video.inc + +DESCRIPTION = "X.Org X server -- ATI display driver" +DEPENDS += " xineramaproto xf86miscproto drm xf86driproto" +PE = "1" -- cgit v1.2.3 From 8e175c8d8f986dfc756d6ef70c0f7867a975a738 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:19:53 +0000 Subject: xf86-video-i128: add 1.2.1 --- packages/xorg-driver/xf86-video-i128_1.2.1.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-video-i128_1.2.1.bb diff --git a/packages/xorg-driver/xf86-video-i128_1.2.1.bb b/packages/xorg-driver/xf86-video-i128_1.2.1.bb new file mode 100644 index 0000000000..78d5eda810 --- /dev/null +++ b/packages/xorg-driver/xf86-video-i128_1.2.1.bb @@ -0,0 +1,4 @@ +require xorg-driver-video.inc + +DESCRIPTION = "X.Org X server -- i128 display driver" +PE = "1" -- cgit v1.2.3 From a52a8e54ab03f14718861652e44c80ed391d586c Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:21:09 +0000 Subject: xf86-video-i810: add 1.7.4 --- packages/xorg-driver/xf86-video-i810_1.7.4.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-video-i810_1.7.4.bb diff --git a/packages/xorg-driver/xf86-video-i810_1.7.4.bb b/packages/xorg-driver/xf86-video-i810_1.7.4.bb new file mode 100644 index 0000000000..eed1fcb600 --- /dev/null +++ b/packages/xorg-driver/xf86-video-i810_1.7.4.bb @@ -0,0 +1,5 @@ +require xorg-driver-video.inc + +DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver" +DEPENDS += " virtual/libx11 libxvmc drm xf86driproto" +PE = "1" -- cgit v1.2.3 From 885f27749c1803c8c7ca5d8d8339782eee71c9c3 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:26:18 +0000 Subject: xf86-video-nsc: add 2.8.3 --- packages/xorg-driver/xf86-video-nsc_2.8.3.bb | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/xorg-driver/xf86-video-nsc_2.8.3.bb diff --git a/packages/xorg-driver/xf86-video-nsc_2.8.3.bb b/packages/xorg-driver/xf86-video-nsc_2.8.3.bb new file mode 100644 index 0000000000..96486d2e72 --- /dev/null +++ b/packages/xorg-driver/xf86-video-nsc_2.8.3.bb @@ -0,0 +1,9 @@ +require xorg-driver-video.inc + +DESCRIPTION = "X.Org X server -- NSC display driver" +DEPENDS += " xf86dgaproto" +PE = "1" + +# This driver is broken because it's seldom updated. It compiles +# but fails to communicate with the card without this deprecated define. +EXTRA_OEMAKE += "CFLAGS+=-DXFree86Server" -- cgit v1.2.3 From 8fa0bfd89177a7ed5d4eab4764b678e4eb9b57d3 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:26:41 +0000 Subject: xf86-video-nv: add 2.1.7 --- packages/xorg-driver/xf86-video-nv_2.1.7.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-video-nv_2.1.7.bb diff --git a/packages/xorg-driver/xf86-video-nv_2.1.7.bb b/packages/xorg-driver/xf86-video-nv_2.1.7.bb new file mode 100644 index 0000000000..0d4ee2ed19 --- /dev/null +++ b/packages/xorg-driver/xf86-video-nv_2.1.7.bb @@ -0,0 +1,4 @@ +require xorg-driver-video.inc + +DESCRIPTION = "X.Org X server -- NV display driver" +PE = "1" -- cgit v1.2.3 From 2baab8df5edca1763fb3620f02a8237a03d5cc30 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:27:21 +0000 Subject: xf86-video-sis: add 0.9.4 --- packages/xorg-driver/xf86-video-sis_0.9.4.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-video-sis_0.9.4.bb diff --git a/packages/xorg-driver/xf86-video-sis_0.9.4.bb b/packages/xorg-driver/xf86-video-sis_0.9.4.bb new file mode 100644 index 0000000000..dd6e106e0d --- /dev/null +++ b/packages/xorg-driver/xf86-video-sis_0.9.4.bb @@ -0,0 +1,5 @@ +require xorg-driver-video.inc + +DESCRIPTION = "X.Org X server -- SiS display driver" +DEPENDS += " xineramaproto xf86miscproto xf86dgaproto drm xf86driproto" +PE = "1" -- cgit v1.2.3 From f6e7c8ed2e050679bd60143a844664b9eaf09aeb Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:28:53 +0000 Subject: xf86-video-mga: add 1.9.99 --- packages/xorg-driver/xf86-video-mga_1.9.99.bb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/xorg-driver/xf86-video-mga_1.9.99.bb diff --git a/packages/xorg-driver/xf86-video-mga_1.9.99.bb b/packages/xorg-driver/xf86-video-mga_1.9.99.bb new file mode 100644 index 0000000000..0ed0d28dfd --- /dev/null +++ b/packages/xorg-driver/xf86-video-mga_1.9.99.bb @@ -0,0 +1,4 @@ +require xorg-driver-video.inc + +DESCRIPTION = "X.Org X server -- MGA display driver" +PE = "1" -- cgit v1.2.3 From 9772d6da4d328ef761caa8ef07526a5d9d856c74 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:40:01 +0000 Subject: xproto-native: add 7.0.11 --- packages/xorg-proto/xproto-native_7.0.11.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-proto/xproto-native_7.0.11.bb diff --git a/packages/xorg-proto/xproto-native_7.0.11.bb b/packages/xorg-proto/xproto-native_7.0.11.bb new file mode 100644 index 0000000000..baae28ec32 --- /dev/null +++ b/packages/xorg-proto/xproto-native_7.0.11.bb @@ -0,0 +1,5 @@ +require xproto_${PV}.bb + +XORG_PN = "xproto" + +inherit native -- cgit v1.2.3 From 193648837c3c0b7750bb1be5845d06f19a7f21fe Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Fri, 8 Feb 2008 14:43:12 +0000 Subject: libxmu: add 1.0.4 --- packages/xorg-lib/libxmu_1.0.4.bb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 packages/xorg-lib/libxmu_1.0.4.bb diff --git a/packages/xorg-lib/libxmu_1.0.4.bb b/packages/xorg-lib/libxmu_1.0.4.bb new file mode 100644 index 0000000000..396e2a2d4b --- /dev/null +++ b/packages/xorg-lib/libxmu_1.0.4.bb @@ -0,0 +1,15 @@ +require xorg-lib-common.inc + +DESCRIPTION = "X11 miscellaneous utility library" +DEPENDS += "libxt libxext" +PROVIDES = "xmu" +PE = "1" + +XORG_PN = "libXmu" + +LEAD_SONAME = "libXmu" + +PACKAGES =+ "libxmuu libxmuu-dev" + +FILES_libxmuu = "${libdir}/libXmuu.so.*" +FILES_libxmuu-dev = "${libdir}/libXmuu.so" -- cgit v1.2.3 From 6cb549b2c695afb95c1bf83283bc426b9c764702 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 14:46:22 +0000 Subject: busybox: * fix syslog init script (closes #3718) * drop obsolete slingbox versions (ACKed by rwhitby) --- .../busybox/busybox-1.7.2/files/.mtn2git_empty | 0 packages/busybox/busybox-static_1.2.1.bb | 2 +- packages/busybox/busybox_1.2.1.bb | 2 +- packages/busybox/busybox_1.2.2.bb | 2 +- packages/busybox/busybox_1.3.1.bb | 2 +- packages/busybox/busybox_1.7.2.bb | 3 +- packages/busybox/files/syslog | 2 +- packages/busybox/slingbox-1.00/.mtn2git_empty | 0 packages/busybox/slingbox-1.00/defconfig | 334 ----------- packages/busybox/slingbox-1.00/lazy_umount.patch | 42 -- packages/busybox/slingbox-1.00/slingbox.patch | 38 -- packages/busybox/slingbox-1.1.3/.mtn2git_empty | 0 .../busybox/slingbox-1.1.3/Makefile_args.patch | 11 - packages/busybox/slingbox-1.1.3/defconfig | 594 ------------------- packages/busybox/slingbox-1.1.3/lazy_umount.patch | 28 - packages/busybox/slingbox-1.1.3/slingbox.patch | 38 -- .../busybox/slingbox-1.1.3/slingbox_name.patch | 10 - packages/busybox/slingbox-1.2.2/.mtn2git_empty | 0 packages/busybox/slingbox-1.2.2/defconfig | 643 --------------------- packages/busybox/slingbox-1.2.2/df_rootfs.patch | 34 -- packages/busybox/slingbox-1.2.2/halt.patch | 40 -- packages/busybox/slingbox-1.2.2/lazy_umount.patch | 27 - packages/busybox/slingbox-1.2.2/slingbox.patch | 49 -- .../busybox/slingbox-1.2.2/slingbox_name.patch | 10 - .../busybox/slingbox-1.2.2/wget-long-options.patch | 20 - packages/busybox/slingbox_1.00.bb | 39 -- packages/busybox/slingbox_1.1.3.bb | 43 -- packages/busybox/slingbox_1.2.2.bb | 51 -- 28 files changed, 6 insertions(+), 2058 deletions(-) delete mode 100644 packages/busybox/busybox-1.7.2/files/.mtn2git_empty delete mode 100644 packages/busybox/slingbox-1.00/.mtn2git_empty delete mode 100644 packages/busybox/slingbox-1.00/defconfig delete mode 100644 packages/busybox/slingbox-1.00/lazy_umount.patch delete mode 100644 packages/busybox/slingbox-1.00/slingbox.patch delete mode 100644 packages/busybox/slingbox-1.1.3/.mtn2git_empty delete mode 100644 packages/busybox/slingbox-1.1.3/Makefile_args.patch delete mode 100644 packages/busybox/slingbox-1.1.3/defconfig delete mode 100644 packages/busybox/slingbox-1.1.3/lazy_umount.patch delete mode 100644 packages/busybox/slingbox-1.1.3/slingbox.patch delete mode 100644 packages/busybox/slingbox-1.1.3/slingbox_name.patch delete mode 100644 packages/busybox/slingbox-1.2.2/.mtn2git_empty delete mode 100644 packages/busybox/slingbox-1.2.2/defconfig delete mode 100644 packages/busybox/slingbox-1.2.2/df_rootfs.patch delete mode 100644 packages/busybox/slingbox-1.2.2/halt.patch delete mode 100644 packages/busybox/slingbox-1.2.2/lazy_umount.patch delete mode 100644 packages/busybox/slingbox-1.2.2/slingbox.patch delete mode 100644 packages/busybox/slingbox-1.2.2/slingbox_name.patch delete mode 100644 packages/busybox/slingbox-1.2.2/wget-long-options.patch delete mode 100644 packages/busybox/slingbox_1.00.bb delete mode 100644 packages/busybox/slingbox_1.1.3.bb delete mode 100644 packages/busybox/slingbox_1.2.2.bb diff --git a/packages/busybox/busybox-1.7.2/files/.mtn2git_empty b/packages/busybox/busybox-1.7.2/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-static_1.2.1.bb b/packages/busybox/busybox-static_1.2.1.bb index 519468039a..e51bb86da0 100644 --- a/packages/busybox/busybox-static_1.2.1.bb +++ b/packages/busybox/busybox-static_1.2.1.bb @@ -1,5 +1,5 @@ require busybox_${PV}.bb -PR = "r1" +PR = "r2" S = "${WORKDIR}/busybox-1.2.1" diff --git a/packages/busybox/busybox_1.2.1.bb b/packages/busybox/busybox_1.2.1.bb index 3b7016a42c..1accc790a2 100644 --- a/packages/busybox/busybox_1.2.1.bb +++ b/packages/busybox/busybox_1.2.1.bb @@ -1,6 +1,6 @@ require busybox.inc -PR = "r15" +PR = "r16" SRC_URI += "file://wget-long-options.patch;patch=1 \ file://df_rootfs.patch;patch=1 \ diff --git a/packages/busybox/busybox_1.2.2.bb b/packages/busybox/busybox_1.2.2.bb index 75847e1117..fbf05e7182 100644 --- a/packages/busybox/busybox_1.2.2.bb +++ b/packages/busybox/busybox_1.2.2.bb @@ -1,6 +1,6 @@ require busybox.inc -PR = "r1" +PR = "r2" DEFAULT_PREFERENCE = "-1" diff --git a/packages/busybox/busybox_1.3.1.bb b/packages/busybox/busybox_1.3.1.bb index 369500fc7b..1eea1edea2 100644 --- a/packages/busybox/busybox_1.3.1.bb +++ b/packages/busybox/busybox_1.3.1.bb @@ -1,6 +1,6 @@ require busybox.inc -PR = "r1" +PR = "r2" DEFAULT_PREFERENCE = "-1" diff --git a/packages/busybox/busybox_1.7.2.bb b/packages/busybox/busybox_1.7.2.bb index 269400106b..2755ed065f 100644 --- a/packages/busybox/busybox_1.7.2.bb +++ b/packages/busybox/busybox_1.7.2.bb @@ -1,6 +1,5 @@ require busybox.inc - -PR = "r4" +PR = "r5" SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ file://busybox-cron \ diff --git a/packages/busybox/files/syslog b/packages/busybox/files/syslog index a999565e84..61d273b7cb 100644 --- a/packages/busybox/files/syslog +++ b/packages/busybox/files/syslog @@ -11,7 +11,7 @@ if [ -f /etc/syslog.conf ]; then LOG_REMOTE=0 for D in $DESTINATION; do if [ "$D" = "buffer" ]; then - SYSLOG_ARGS="$SYSLOG_ARGS -C $BUFFERSIZE" + SYSLOG_ARGS="$SYSLOG_ARGS -C$BUFFERSIZE" LOG_LOCAL=1 elif [ "$D" = "file" ]; then if [ -n "$LOGFILE" ]; then diff --git a/packages/busybox/slingbox-1.00/.mtn2git_empty b/packages/busybox/slingbox-1.00/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/slingbox-1.00/defconfig b/packages/busybox/slingbox-1.00/defconfig deleted file mode 100644 index 6b15e1944b..0000000000 --- a/packages/busybox/slingbox-1.00/defconfig +++ /dev/null @@ -1,334 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# General Configuration -# -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_FEATURE_DEVPTS is not set -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="armv5b-softfloat-linux-" -EXTRA_CFLAGS_OPTIONS="" - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -PREFIX="/" - -# -# Archival Utilities -# -# CONFIG_AR is not set -CONFIG_BUNZIP2=y -# CONFIG_CPIO is not set -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GUNZIP=y -CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_FROM is not set -CONFIG_FEATURE_TAR_GZIP=y -CONFIG_FEATURE_TAR_COMPRESS=y -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -CONFIG_UNCOMPRESS=y -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set - -# -# Coreutils -# -# CONFIG_BASENAME is not set -# CONFIG_CAL is not set -# CONFIG_CAT is not set -# CONFIG_CHGRP is not set -# CONFIG_CHMOD is not set -# CONFIG_CHOWN is not set -CONFIG_CHROOT=y -# CONFIG_CMP is not set -# CONFIG_CP is not set -CONFIG_CUT=y -# CONFIG_DATE is not set -# CONFIG_DD is not set -# CONFIG_DF is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -CONFIG_DU=y -# CONFIG_ECHO is not set -# CONFIG_ENV is not set -CONFIG_EXPR=y -# CONFIG_FALSE is not set -# CONFIG_FOLD is not set -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -# CONFIG_HOSTID is not set -# CONFIG_ID is not set -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -# CONFIG_LN is not set -# CONFIG_LOGNAME is not set -# CONFIG_LS is not set -CONFIG_MD5SUM=y -# CONFIG_MKDIR is not set -CONFIG_MKFIFO=y -# CONFIG_MKNOD is not set -# CONFIG_MV is not set -# CONFIG_OD is not set -# CONFIG_PRINTF is not set -# CONFIG_PWD is not set -# CONFIG_REALPATH is not set -# CONFIG_RM is not set -CONFIG_RMDIR=y -# CONFIG_SEQ is not set -# CONFIG_SHA1SUM is not set -# CONFIG_SLEEP is not set -CONFIG_SORT=y -# CONFIG_STTY is not set -# CONFIG_SYNC is not set -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_TEST is not set -# CONFIG_TOUCH is not set -# CONFIG_TR is not set -# CONFIG_TRUE is not set -# CONFIG_TTY is not set -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -# CONFIG_WATCH is not set -# CONFIG_WC is not set -# CONFIG_WHO is not set -# CONFIG_WHOAMI is not set -# CONFIG_YES is not set - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -# CONFIG_CLEAR is not set -# CONFIG_DEALLOCVT is not set -# CONFIG_DUMPKMAP is not set -# CONFIG_LOADFONT is not set -# CONFIG_LOADKMAP is not set -# CONFIG_OPENVT is not set -# CONFIG_RESET is not set -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -# CONFIG_READLINK is not set -# CONFIG_RUN_PARTS is not set -# CONFIG_START_STOP_DAEMON is not set -# CONFIG_WHICH is not set - -# -# Editors -# -CONFIG_AWK=y -# CONFIG_PATCH is not set -CONFIG_SED=y -# CONFIG_VI is not set - -# -# Finding Utilities -# -# CONFIG_FIND is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -# CONFIG_FEATURE_GREP_CONTEXT is not set -# CONFIG_XARGS is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_HALT is not set -# CONFIG_POWEROFF is not set -# CONFIG_REBOOT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -# CONFIG_LOGIN is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_CROND is not set -# CONFIG_CRONTAB is not set -# CONFIG_DC is not set -# CONFIG_DEVFSD is not set -# CONFIG_LAST is not set -# CONFIG_HDPARM is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_MT is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_TIME is not set -# CONFIG_WATCHDOG is not set - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_MODPROBE is not set -# CONFIG_RMMOD is not set - -# -# Networking Utilities -# -# CONFIG_FEATURE_IPV6 is not set -# CONFIG_ARPING is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_HOSTNAME is not set -# CONFIG_HTTPD is not set -# CONFIG_IFCONFIG is not set -# CONFIG_IFUPDOWN is not set -# CONFIG_INETD is not set -# CONFIG_IP is not set -# CONFIG_IPCALC is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NETSTAT is not set -# CONFIG_NSLOOKUP is not set -# CONFIG_PING is not set -# CONFIG_ROUTE is not set -# CONFIG_TELNET is not set -# CONFIG_TELNETD is not set -# CONFIG_TFTP is not set -# CONFIG_TRACEROUTE is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -# CONFIG_FEATURE_WGET_STATUSBAR is not set -# CONFIG_FEATURE_WGET_AUTHENTICATION is not set -# CONFIG_FEATURE_WGET_IP6_LITERAL is not set - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -# CONFIG_UDHCPC is not set - -# -# Process Utilities -# -CONFIG_FREE=y -# CONFIG_KILL is not set -# CONFIG_PIDOF is not set -# CONFIG_PS is not set -# CONFIG_RENICE is not set -# CONFIG_TOP is not set -# CONFIG_UPTIME is not set -# CONFIG_SYSCTL is not set - -# -# Another Bourne-like Shell -# -# CONFIG_FEATURE_SH_IS_ASH is not set -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -CONFIG_FEATURE_SH_IS_NONE=y -# CONFIG_ASH is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# System Logging Utilities -# -# CONFIG_SYSLOGD is not set -# CONFIG_LOGGER is not set - -# -# Linux System Utilities -# -# CONFIG_DMESG is not set -# CONFIG_FBSET is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -# CONFIG_FDISK is not set -CONFIG_FREERAMDISK=y -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -# CONFIG_HWCLOCK is not set -CONFIG_LOSETUP=y -# CONFIG_MKSWAP is not set -# CONFIG_MORE is not set -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -# CONFIG_SWAPONOFF is not set -CONFIG_MOUNT=y -CONFIG_NFSMOUNT=y -CONFIG_UMOUNT=y -CONFIG_FEATURE_MOUNT_FORCE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set diff --git a/packages/busybox/slingbox-1.00/lazy_umount.patch b/packages/busybox/slingbox-1.00/lazy_umount.patch deleted file mode 100644 index 0608017e70..0000000000 --- a/packages/busybox/slingbox-1.00/lazy_umount.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- busybox-1.00-orig/util-linux/umount.c 2005-12-16 23:13:33.000000000 -0600 -+++ busybox-1.00/util-linux/umount.c 2005-12-16 23:16:49.000000000 -0600 -@@ -35,6 +35,7 @@ - #endif - - static const int MNT_FORCE = 1; -+static const int MNT_DETACH = 2; /* Linksys -L mod */ - static const int MS_MGC_VAL = 0xc0ed0000; /* Magic number indicatng "new" flags */ - static const int MS_REMOUNT = 32; /* Alter flags of a mounted FS. */ - static const int MS_RDONLY = 1; /* Mount read-only. */ -@@ -54,7 +55,7 @@ - static struct _mtab_entry_t *mtab_cache = NULL; - - -- -+static int doLazy = FALSE; /* Linksys -L mod */ - #if defined CONFIG_FEATURE_MOUNT_FORCE - static int doForce = FALSE; - #endif -@@ -181,6 +182,12 @@ - /* this was a loop device, delete it */ - del_loop(blockDevice); - #endif -+ if (status != 0 && doLazy) { /* Linksys -L mod */ -+ status = umount2(blockDevice, MNT_DETACH); -+ if (status != 0) { -+ bb_error_msg_and_die("lazy umount of %s failed!", blockDevice); -+ } -+ } - #if defined CONFIG_FEATURE_MOUNT_FORCE - if (status != 0 && doForce) { - status = umount2(blockDevice, MNT_FORCE); -@@ -259,6 +266,9 @@ - freeLoop = FALSE; - break; - #endif -+ case 'L': /* Linksys -L mod */ -+ doLazy = TRUE; -+ break; - #ifdef CONFIG_FEATURE_MTAB_SUPPORT - case 'n': - useMtab = FALSE; diff --git a/packages/busybox/slingbox-1.00/slingbox.patch b/packages/busybox/slingbox-1.00/slingbox.patch deleted file mode 100644 index 6f5594b284..0000000000 --- a/packages/busybox/slingbox-1.00/slingbox.patch +++ /dev/null @@ -1,38 +0,0 @@ ---- busybox-1.00-rc3/applets/install.sh 2001-03-09 08:12:11.000000000 +1030 -+++ slingbox/applets/install.sh 2004-08-31 11:27:23.000000000 +0930 -@@ -16,28 +16,28 @@ - h=`sort busybox.links | uniq` - - --rm -f $prefix/bin/busybox || exit 1 -+rm -f $prefix/bin/slingbox || exit 1 - mkdir -p $prefix/bin || exit 1 --install -m 755 busybox $prefix/bin/busybox || exit 1 -+install -m 755 busybox $prefix/bin/slingbox || exit 1 - - for i in $h ; do - appdir=`dirname $i` - mkdir -p $prefix/$appdir || exit 1 - if [ "$2" = "--hardlinks" ]; then -- bb_path="$prefix/bin/busybox" -+ bb_path="$prefix/bin/slingbox" - else - case "$appdir" in - /) -- bb_path="bin/busybox" -+ bb_path="bin/slingbox" - ;; - /bin) -- bb_path="busybox" -+ bb_path="slingbox" - ;; - /sbin) -- bb_path="../bin/busybox" -+ bb_path="../bin/slingbox" - ;; - /usr/bin|/usr/sbin) -- bb_path="../../bin/busybox" -+ bb_path="../../bin/slingbox" - ;; - *) - echo "Unknown installation directory: $appdir" diff --git a/packages/busybox/slingbox-1.1.3/.mtn2git_empty b/packages/busybox/slingbox-1.1.3/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/slingbox-1.1.3/Makefile_args.patch b/packages/busybox/slingbox-1.1.3/Makefile_args.patch deleted file mode 100644 index 7561a89b94..0000000000 --- a/packages/busybox/slingbox-1.1.3/Makefile_args.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- busybox-1.1.2/Makefile.orig 2006-04-10 14:45:46.000000000 -0500 -+++ busybox-1.1.2/Makefile 2006-05-15 00:54:31.000000000 -0500 -@@ -79,6 +79,8 @@ - top_srcdir=$(top_srcdir) \ - top_builddir=$(top_builddir) \ - KBUILD_SRC=$(top_srcdir) \ -+ PREFIX=$(PREFIX) \ -+ CROSS=$(CROSS) \ - -f $(CURDIR)/Makefile $@ - - $(KBUILD_OUTPUT)/Rules.mak: diff --git a/packages/busybox/slingbox-1.1.3/defconfig b/packages/busybox/slingbox-1.1.3/defconfig deleted file mode 100644 index f1fe0d6d2d..0000000000 --- a/packages/busybox/slingbox-1.1.3/defconfig +++ /dev/null @@ -1,594 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_FEATURE_VERBOSE_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_FEATURE_DEVPTS is not set -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_DISABLE_SHARED is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="armv5b-softfloat-linux-" -EXTRA_CFLAGS_OPTIONS="" -# CONFIG_BUILD_AT_ONCE is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="/" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -# CONFIG_AR is not set -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -# CONFIG_CPIO is not set -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -# CONFIG_FEATURE_TAR_FROM is not set -CONFIG_FEATURE_TAR_GZIP=y -CONFIG_FEATURE_TAR_COMPRESS=y -CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -CONFIG_UNCOMPRESS=y -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -# CONFIG_BASENAME is not set -# CONFIG_CAL is not set -# CONFIG_CAT is not set -# CONFIG_CHGRP is not set -# CONFIG_CHMOD is not set -# CONFIG_CHOWN is not set -CONFIG_CHROOT=y -# CONFIG_CMP is not set -# CONFIG_COMM is not set -# CONFIG_CP is not set -CONFIG_CUT=y -# CONFIG_DATE is not set -# CONFIG_FEATURE_DATE_ISOFMT is not set -# CONFIG_DD is not set -# CONFIG_DF is not set -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y -# CONFIG_ECHO is not set -# CONFIG_FEATURE_FANCY_ECHO is not set -# CONFIG_ENV is not set -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -# CONFIG_FALSE is not set -# CONFIG_FOLD is not set -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -# CONFIG_HOSTID is not set -# CONFIG_ID is not set -# CONFIG_INSTALL is not set -# CONFIG_LENGTH is not set -# CONFIG_LN is not set -# CONFIG_LOGNAME is not set -# CONFIG_LS is not set -# CONFIG_FEATURE_LS_FILETYPES is not set -# CONFIG_FEATURE_LS_FOLLOWLINKS is not set -# CONFIG_FEATURE_LS_RECURSIVE is not set -# CONFIG_FEATURE_LS_SORTFILES is not set -# CONFIG_FEATURE_LS_TIMESTAMPS is not set -# CONFIG_FEATURE_LS_USERNAME is not set -# CONFIG_FEATURE_LS_COLOR is not set -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -# CONFIG_MKDIR is not set -CONFIG_MKFIFO=y -# CONFIG_MKNOD is not set -# CONFIG_MV is not set -# CONFIG_NICE is not set -# CONFIG_NOHUP is not set -# CONFIG_OD is not set -# CONFIG_PRINTENV is not set -# CONFIG_PRINTF is not set -# CONFIG_PWD is not set -# CONFIG_REALPATH is not set -# CONFIG_RM is not set -CONFIG_RMDIR=y -# CONFIG_SEQ is not set -# CONFIG_SHA1SUM is not set -# CONFIG_SLEEP is not set -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -# CONFIG_FEATURE_SORT_BIG is not set -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -# CONFIG_STTY is not set -# CONFIG_SUM is not set -# CONFIG_SYNC is not set -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -# CONFIG_TEST is not set -# CONFIG_FEATURE_TEST_64 is not set -# CONFIG_TOUCH is not set -# CONFIG_TR is not set -# CONFIG_FEATURE_TR_CLASSES is not set -# CONFIG_FEATURE_TR_EQUIV is not set -# CONFIG_TRUE is not set -# CONFIG_TTY is not set -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -# CONFIG_WATCH is not set -# CONFIG_WC is not set -# CONFIG_WHO is not set -# CONFIG_WHOAMI is not set -# CONFIG_YES is not set -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -# CONFIG_FEATURE_HUMAN_READABLE is not set - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -# CONFIG_CLEAR is not set -# CONFIG_DEALLOCVT is not set -# CONFIG_DUMPKMAP is not set -# CONFIG_LOADFONT is not set -# CONFIG_LOADKMAP is not set -# CONFIG_OPENVT is not set -# CONFIG_RESET is not set -# CONFIG_SETCONSOLE is not set -# CONFIG_SETKEYCODES is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -# CONFIG_READLINK is not set -# CONFIG_FEATURE_READLINK_FOLLOW is not set -# CONFIG_RUN_PARTS is not set -# CONFIG_START_STOP_DAEMON is not set -# CONFIG_WHICH is not set - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_PATCH is not set -CONFIG_SED=y -# CONFIG_VI is not set -# CONFIG_FEATURE_VI_COLON is not set -# CONFIG_FEATURE_VI_YANKMARK is not set -# CONFIG_FEATURE_VI_SEARCH is not set -# CONFIG_FEATURE_VI_USE_SIGNALS is not set -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -# CONFIG_FEATURE_VI_WIN_RESIZE is not set -# CONFIG_FEATURE_VI_OPTIMIZE_CURSOR is not set - -# -# Finding Utilities -# -# CONFIG_FIND is not set -# CONFIG_FEATURE_FIND_MTIME is not set -# CONFIG_FEATURE_FIND_MMIN is not set -# CONFIG_FEATURE_FIND_PERM is not set -# CONFIG_FEATURE_FIND_TYPE is not set -# CONFIG_FEATURE_FIND_XDEV is not set -# CONFIG_FEATURE_FIND_NEWER is not set -# CONFIG_FEATURE_FIND_INUM is not set -# CONFIG_FEATURE_FIND_EXEC is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -# CONFIG_FEATURE_GREP_CONTEXT is not set -# CONFIG_XARGS is not set -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -# CONFIG_FEATURE_UTMP is not set -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -# CONFIG_CHATTR is not set -# CONFIG_E2FSCK is not set -# CONFIG_FSCK is not set -# CONFIG_LSATTR is not set -# CONFIG_MKE2FS is not set -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -# CONFIG_INSMOD is not set -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -# CONFIG_RMMOD is not set -# CONFIG_LSMOD is not set -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -# CONFIG_MODPROBE is not set -# CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS is not set -# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set -# CONFIG_FEATURE_2_4_MODULES is not set -# CONFIG_FEATURE_2_6_MODULES is not set -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -# CONFIG_DMESG is not set -# CONFIG_FBSET is not set -# CONFIG_FEATURE_FBSET_FANCY is not set -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -CONFIG_FREERAMDISK=y -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_FEATURE_MINIX2 is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -# CONFIG_HWCLOCK is not set -# CONFIG_FEATURE_HWCLOCK_LONGOPTIONS is not set -# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_MKSWAP is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -# CONFIG_SWAPONOFF is not set -# CONFIG_SWITCH_ROOT is not set -CONFIG_UMOUNT=y -CONFIG_FEATURE_UMOUNT_ALL=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -# CONFIG_DC is not set -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -# CONFIG_LESS is not set -# CONFIG_FEATURE_LESS_BRACKETS is not set -# CONFIG_FEATURE_LESS_FLAGS is not set -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TIME is not set -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -# CONFIG_FEATURE_IPV6 is not set -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_HOSTNAME is not set -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -# CONFIG_IFCONFIG is not set -# CONFIG_FEATURE_IFCONFIG_STATUS is not set -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -# CONFIG_FEATURE_IFCONFIG_HW is not set -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -# CONFIG_IFUPDOWN is not set -# CONFIG_FEATURE_IFUPDOWN_IP is not set -# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set -# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -# CONFIG_IP is not set -# CONFIG_FEATURE_IP_ADDRESS is not set -# CONFIG_FEATURE_IP_LINK is not set -# CONFIG_FEATURE_IP_ROUTE is not set -# CONFIG_FEATURE_IP_TUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -# CONFIG_NETSTAT is not set -# CONFIG_NSLOOKUP is not set -# CONFIG_PING is not set -# CONFIG_FEATURE_FANCY_PING is not set -# CONFIG_PING6 is not set -# CONFIG_FEATURE_FANCY_PING6 is not set -# CONFIG_ROUTE is not set -# CONFIG_TELNET is not set -# CONFIG_FEATURE_TELNET_TTYPE is not set -# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -# CONFIG_TFTP is not set -# CONFIG_FEATURE_TFTP_GET is not set -# CONFIG_FEATURE_TFTP_PUT is not set -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_FEATURE_TFTP_DEBUG is not set -# CONFIG_TRACEROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -# CONFIG_FEATURE_WGET_STATUSBAR is not set -# CONFIG_FEATURE_WGET_AUTHENTICATION is not set -# CONFIG_FEATURE_WGET_IP6_LITERAL is not set - -# -# udhcp Server/Client -# -# CONFIG_UDHCPD is not set -# CONFIG_UDHCPC is not set -# CONFIG_DUMPLEASES is not set -# CONFIG_FEATURE_UDHCP_SYSLOG is not set -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -# CONFIG_FUSER is not set -# CONFIG_KILL is not set -# CONFIG_KILLALL is not set -# CONFIG_PIDOF is not set -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -# CONFIG_PS is not set -# CONFIG_FEATURE_PS_WIDE is not set -# CONFIG_RENICE is not set -# CONFIG_BB_SYSCTL is not set -# CONFIG_TOP is not set -# CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set -# CONFIG_UPTIME is not set - -# -# Shells -# -# CONFIG_FEATURE_SH_IS_ASH is not set -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -CONFIG_FEATURE_SH_IS_NONE=y -# CONFIG_ASH is not set -# CONFIG_ASH_JOB_CONTROL is not set -# CONFIG_ASH_READ_NCHARS is not set -# CONFIG_ASH_READ_TIMEOUT is not set -# CONFIG_ASH_ALIAS is not set -# CONFIG_ASH_MATH_SUPPORT is not set -# CONFIG_ASH_MATH_SUPPORT_64 is not set -# CONFIG_ASH_GETOPTS is not set -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_BUILTIN_ECHO is not set -# CONFIG_ASH_MAIL is not set -# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_ASH_EXPAND_PRMT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set -# CONFIG_FEATURE_SH_EXTRA_QUIET is not set -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -# CONFIG_FEATURE_COMMAND_EDITING is not set -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=0 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -# CONFIG_FEATURE_COMMAND_TAB_COMPLETION is not set -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -# CONFIG_FEATURE_SH_FANCY_PROMPT is not set - -# -# System Logging Utilities -# -# CONFIG_SYSLOGD is not set -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -# CONFIG_FEATURE_REMOTE_LOG is not set -# CONFIG_FEATURE_IPC_SYSLOG is not set -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 -# CONFIG_LOGREAD is not set -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -# CONFIG_KLOGD is not set -# CONFIG_LOGGER is not set diff --git a/packages/busybox/slingbox-1.1.3/lazy_umount.patch b/packages/busybox/slingbox-1.1.3/lazy_umount.patch deleted file mode 100644 index d5156d00d3..0000000000 --- a/packages/busybox/slingbox-1.1.3/lazy_umount.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- busybox-1.1.2/util-linux/umount.c~ 2006-03-22 15:16:26.000000000 -0600 -+++ busybox-1.1.2/util-linux/umount.c 2006-05-15 11:43:23.000000000 -0500 -@@ -21,7 +21,7 @@ - #include - #include "busybox.h" - --#define OPTION_STRING "flDnrvad" -+#define OPTION_STRING "flDnrvadL" - #define OPT_FORCE 1 - #define OPT_LAZY 2 - #define OPT_DONTFREELOOP 4 -@@ -29,6 +29,7 @@ - #define OPT_REMOUNT 16 - #define OPT_IGNORED 32 // -v is ignored - #define OPT_ALL (ENABLE_FEATURE_UMOUNT_ALL ? 64 : 0) -+#define OPT_LINKSYS_LAZY 256 - - int umount_main(int argc, char **argv) - { -@@ -51,6 +52,8 @@ - argc -= optind; - argv += optind; - -+ if (opt & OPT_LINKSYS_LAZY) opt |= OPT_LAZY; /* -L option same as -l */ -+ - doForce = MAX((opt & OPT_FORCE), (opt & OPT_LAZY)); - - /* Get a list of mount points from mtab. We read them all in now mostly diff --git a/packages/busybox/slingbox-1.1.3/slingbox.patch b/packages/busybox/slingbox-1.1.3/slingbox.patch deleted file mode 100644 index 3759723bce..0000000000 --- a/packages/busybox/slingbox-1.1.3/slingbox.patch +++ /dev/null @@ -1,38 +0,0 @@ ---- slingbox/applets/install.sh.orig 2006-05-14 18:08:17.000000000 -0500 -+++ slingbox/applets/install.sh 2006-05-14 18:10:40.000000000 -0500 -@@ -33,28 +33,28 @@ - fi - done - fi --rm -f $prefix/bin/busybox || exit 1 -+rm -f $prefix/bin/slingbox || exit 1 - mkdir -p $prefix/bin || exit 1 --install -m 755 busybox $prefix/bin/busybox || exit 1 -+install -m 755 busybox $prefix/bin/slingbox || exit 1 - - for i in $h ; do - appdir=`dirname $i` - mkdir -p $prefix/$appdir || exit 1 - if [ "$2" = "--hardlinks" ]; then -- bb_path="$prefix/bin/busybox" -+ bb_path="$prefix/bin/slingbox" - else - case "$appdir" in - /) -- bb_path="bin/busybox" -+ bb_path="bin/slingbox" - ;; - /bin) -- bb_path="busybox" -+ bb_path="slingbox" - ;; - /sbin) -- bb_path="../bin/busybox" -+ bb_path="../bin/slingbox" - ;; - /usr/bin|/usr/sbin) -- bb_path="../../bin/busybox" -+ bb_path="../../bin/slingbox" - ;; - *) - echo "Unknown installation directory: $appdir" diff --git a/packages/busybox/slingbox-1.1.3/slingbox_name.patch b/packages/busybox/slingbox-1.1.3/slingbox_name.patch deleted file mode 100644 index aeb7221fe2..0000000000 --- a/packages/busybox/slingbox-1.1.3/slingbox_name.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- busybox-1.1.2/applets/applets.c~ 2006-03-22 15:16:25.000000000 -0600 -+++ busybox-1.1.2/applets/applets.c 2006-05-15 11:53:18.000000000 -0500 -@@ -447,6 +447,7 @@ - if(ENABLE_FEATURE_SUID_CONFIG) parse_config_file (); - - if(!strncmp(name, "busybox", 7)) busybox_main(argc, argv); -+ if(!strncmp(name, "slingbox", 8)) busybox_main(argc, argv); - /* Do a binary search to find the applet entry given the name. */ - applet_using = find_applet_by_name(name); - if(applet_using) { diff --git a/packages/busybox/slingbox-1.2.2/.mtn2git_empty b/packages/busybox/slingbox-1.2.2/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/slingbox-1.2.2/defconfig b/packages/busybox/slingbox-1.2.2/defconfig deleted file mode 100644 index 8026cfc2ff..0000000000 --- a/packages/busybox/slingbox-1.2.2/defconfig +++ /dev/null @@ -1,643 +0,0 @@ -# -# Automatically generated make config: don't edit -# -HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -CONFIG_FEATURE_VERBOSE_USAGE=y -CONFIG_FEATURE_COMPRESS_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_LOCALE_SUPPORT is not set -CONFIG_GETOPT_LONG=y -# CONFIG_FEATURE_DEVPTS is not set -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_SUID is not set -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -USING_CROSS_COMPILER=y -CROSS_COMPILER_PREFIX="armeb-linux-" -# CONFIG_BUILD_AT_ONCE is not set - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_NO_DEBUG_LIB is not set -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -CONFIG_DEBUG_YANK_SUSv2=y - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_MD5_SIZE_VS_SPEED=2 - -# -# Applets -# - -# -# Archival Utilities -# -# CONFIG_AR is not set -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -CONFIG_FEATURE_TAR_COMPRESS=y -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -CONFIG_UNCOMPRESS=y -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -# CONFIG_CMP is not set -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -# CONFIG_DATE is not set -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -# CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -# CONFIG_DIFF is not set -# CONFIG_FEATURE_DIFF_BINARY is not set -# CONFIG_FEATURE_DIFF_DIR is not set -# CONFIG_FEATURE_DIFF_MINIMAL is not set -CONFIG_DIRNAME=y -CONFIG_DOS2UNIX=y -CONFIG_UNIX2DOS=y -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -# CONFIG_ENV is not set -# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -# CONFIG_FALSE is not set -# CONFIG_FOLD is not set -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -# CONFIG_LOGNAME is not set -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -# CONFIG_FEATURE_LS_COLOR is not set -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -# CONFIG_NOHUP is not set -# CONFIG_OD is not set -# CONFIG_PRINTENV is not set -# CONFIG_PRINTF is not set -CONFIG_PWD=y -# CONFIG_REALPATH is not set -CONFIG_RM=y -CONFIG_RMDIR=y -# CONFIG_SEQ is not set -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -# CONFIG_FEATURE_FANCY_SLEEP is not set -CONFIG_SORT=y -# CONFIG_FEATURE_SORT_BIG is not set -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -# CONFIG_STTY is not set -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -# CONFIG_TR is not set -# CONFIG_FEATURE_TR_CLASSES is not set -# CONFIG_FEATURE_TR_EQUIV is not set -# CONFIG_TRUE is not set -# CONFIG_TTY is not set -CONFIG_UNAME=y -CONFIG_UNIQ=y -# CONFIG_USLEEP is not set -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -# CONFIG_WATCH is not set -# CONFIG_WC is not set -# CONFIG_WHO is not set -# CONFIG_WHOAMI is not set -# CONFIG_YES is not set - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -# CONFIG_CHVT is not set -# CONFIG_CLEAR is not set -# CONFIG_DEALLOCVT is not set -# CONFIG_DUMPKMAP is not set -# CONFIG_LOADFONT is not set -# CONFIG_LOADKMAP is not set -# CONFIG_OPENVT is not set -# CONFIG_RESET is not set -# CONFIG_SETCONSOLE is not set -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -# CONFIG_READLINK is not set -# CONFIG_FEATURE_READLINK_FOLLOW is not set -# CONFIG_RUN_PARTS is not set -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -# CONFIG_START_STOP_DAEMON is not set -# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set -# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set -# CONFIG_WHICH is not set - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_ED is not set -# CONFIG_PATCH is not set -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -# CONFIG_FEATURE_VI_USE_SIGNALS is not set -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -# CONFIG_FEATURE_VI_WIN_RESIZE is not set -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y - -# -# Finding Utilities -# -CONFIG_FIND=y -# CONFIG_FEATURE_FIND_PRINT0 is not set -# CONFIG_FEATURE_FIND_MTIME is not set -# CONFIG_FEATURE_FIND_MMIN is not set -# CONFIG_FEATURE_FIND_PERM is not set -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -# CONFIG_FEATURE_FIND_NEWER is not set -# CONFIG_FEATURE_FIND_INUM is not set -# CONFIG_FEATURE_FIND_EXEC is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -# CONFIG_FEATURE_GREP_CONTEXT is not set -# CONFIG_XARGS is not set -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -CONFIG_HALT=y -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set -# CONFIG_FEATURE_UTMP is not set -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_SU is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set - -# -# Linux Ext2 FS Progs -# -# CONFIG_CHATTR is not set -# CONFIG_E2FSCK is not set -# CONFIG_FSCK is not set -# CONFIG_LSATTR is not set -# CONFIG_MKE2FS is not set -# CONFIG_TUNE2FS is not set -# CONFIG_E2LABEL is not set -# CONFIG_FINDFS is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -# CONFIG_MODPROBE is not set -# CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS is not set - -# -# Options common to multiple modutils -# -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -CONFIG_FEATURE_2_4_MODULES=y -# CONFIG_FEATURE_2_6_MODULES is not set -CONFIG_FEATURE_QUERY_MODULE_INTERFACE=y - -# -# Linux System Utilities -# -CONFIG_DMESG=y -# CONFIG_FBSET is not set -# CONFIG_FEATURE_FBSET_FANCY is not set -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -CONFIG_FREERAMDISK=y -# CONFIG_FSCK_MINIX is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_FEATURE_MINIX2 is not set -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -# CONFIG_HWCLOCK is not set -# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set -# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -CONFIG_PIVOT_ROOT=y -# CONFIG_RDATE is not set -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -# CONFIG_SWITCH_ROOT is not set -CONFIG_UMOUNT=y -CONFIG_FEATURE_UMOUNT_ALL=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -# CONFIG_DC is not set -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -# CONFIG_LESS is not set -# CONFIG_FEATURE_LESS_BRACKETS is not set -# CONFIG_FEATURE_LESS_FLAGS is not set -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -# CONFIG_TIME is not set -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -# CONFIG_FEATURE_IPV6 is not set -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -# CONFIG_IFUPDOWN is not set -# CONFIG_FEATURE_IFUPDOWN_IP is not set -# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set -# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set -# CONFIG_FEATURE_IFUPDOWN_IPX is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -# CONFIG_IP is not set -# CONFIG_FEATURE_IP_ADDRESS is not set -# CONFIG_FEATURE_IP_LINK is not set -# CONFIG_FEATURE_IP_ROUTE is not set -# CONFIG_FEATURE_IP_TUNNEL is not set -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_GAPING_SECURITY_HOLE is not set -# CONFIG_NETSTAT is not set -# CONFIG_NSLOOKUP is not set -CONFIG_PING=y -CONFIG_FEATURE_FANCY_PING=y -# CONFIG_PING6 is not set -# CONFIG_FEATURE_FANCY_PING6 is not set -CONFIG_ROUTE=y -# CONFIG_TELNET is not set -# CONFIG_FEATURE_TELNET_TTYPE is not set -# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_INETD is not set -# CONFIG_TFTP is not set -# CONFIG_FEATURE_TFTP_GET is not set -# CONFIG_FEATURE_TFTP_PUT is not set -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -# CONFIG_TRACEROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set - -# -# udhcp Server/Client -# -# CONFIG_APP_UDHCPD is not set -# CONFIG_APP_UDHCPC is not set -# CONFIG_APP_DUMPLEASES is not set -# CONFIG_FEATURE_UDHCP_SYSLOG is not set -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -# CONFIG_FEATURE_WGET_STATUSBAR is not set -# CONFIG_FEATURE_WGET_AUTHENTICATION is not set -# CONFIG_FEATURE_WGET_IP6_LITERAL is not set -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -# CONFIG_FUSER is not set -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -# CONFIG_FEATURE_PS_WIDE is not set -# CONFIG_RENICE is not set -# CONFIG_BB_SYSCTL is not set -# CONFIG_TOP is not set -# CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set -# CONFIG_UPTIME is not set - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -# CONFIG_ASH_READ_NCHARS is not set -# CONFIG_ASH_READ_TIMEOUT is not set -# CONFIG_ASH_ALIAS is not set -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -# CONFIG_ASH_GETOPTS is not set -# CONFIG_ASH_BUILTIN_ECHO is not set -# CONFIG_ASH_BUILTIN_TEST is not set -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -# CONFIG_ASH_EXPAND_PRMT is not set -# CONFIG_HUSH is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -# CONFIG_FEATURE_SH_EXTRA_QUIET is not set -# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set -CONFIG_FEATURE_COMMAND_EDITING=y -# CONFIG_FEATURE_COMMAND_EDITING_VI is not set -CONFIG_FEATURE_COMMAND_HISTORY=15 -# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set -CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y -# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set -# CONFIG_FEATURE_SH_FANCY_PROMPT is not set - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -# CONFIG_FEATURE_REMOTE_LOG is not set -# CONFIG_FEATURE_IPC_SYSLOG is not set -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 -# CONFIG_LOGREAD is not set -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -CONFIG_KLOGD=y -# CONFIG_LOGGER is not set diff --git a/packages/busybox/slingbox-1.2.2/df_rootfs.patch b/packages/busybox/slingbox-1.2.2/df_rootfs.patch deleted file mode 100644 index fa7e61af15..0000000000 --- a/packages/busybox/slingbox-1.2.2/df_rootfs.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- busybox-1.2.2/coreutils/df.c.orig 2006-11-11 13:25:00.000000000 -0600 -+++ busybox-1.2.2/coreutils/df.c 2006-11-11 13:23:15.000000000 -0600 -@@ -47,6 +47,7 @@ - struct statfs s; - static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */ - const char *disp_units_hdr = hdr_1k; -+ int root_done = 0; - - #ifdef CONFIG_FEATURE_HUMAN_READABLE - bb_opt_complementally = "h-km:k-hm:m-hk"; -@@ -112,16 +113,19 @@ - ) / (blocks_used + s.f_bavail); - } - -- if (strcmp(device, "rootfs") == 0) { -- continue; -- } else if (strcmp(device, "/dev/root") == 0) { -+ if (strcmp(device, "/dev/root") == 0 || strcmp(device, "rootfs") == 0) { - /* Adjusts device to be the real root device, - * or leaves device alone if it can't find it */ -- if ((device = find_block_device("/")) == NULL) { -+ if ((device = find_block_device(mount_point)) == NULL) { - goto SET_ERROR; - } - } - -+ if (strcmp(mount_point, "/") == 0) { -+ if (root_done) continue; -+ root_done = 1; -+ } -+ - #ifdef CONFIG_FEATURE_HUMAN_READABLE - bb_printf("%-20s %9s ", device, - make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr)); diff --git a/packages/busybox/slingbox-1.2.2/halt.patch b/packages/busybox/slingbox-1.2.2/halt.patch deleted file mode 100644 index c52e35a8d5..0000000000 --- a/packages/busybox/slingbox-1.2.2/halt.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff -Naur busybox-1.2.2/init.orig/halt.c busybox-1.2.2/init/halt.c ---- busybox-1.2.2/init.orig/halt.c 2006-11-10 13:39:29.000000000 -0600 -+++ busybox-1.2.2/init/halt.c 2006-11-10 13:39:09.000000000 -0600 -@@ -12,6 +12,8 @@ - #include - #include - -+#include "init_shared.h" /* Linksys mods */ -+ - int halt_main(int argc, char *argv[]) - { - static const int magic[] = { -@@ -40,6 +42,12 @@ - if (flags&1) sleep(atoi(delay)); - if (!(flags&2)) sync(); - -+/* Linksys Halt code - adapted from the Linksys source for Busybox. */ -+ rc = bb_shutdown_system(magic[which]); -+ if (rc) bb_error_msg("No."); -+ return rc; /* Shrug */ -+/* End of Linksys code */ -+ - /* Perform action. */ - if (ENABLE_INIT && !(flags & 4)) { - if (ENABLE_FEATURE_INITRD) { -diff -Naur busybox-1.2.2/init.orig/init_shared.c busybox-1.2.2/init/init_shared.c ---- busybox-1.2.2/init.orig/init_shared.c 2006-11-10 13:39:29.000000000 -0600 -+++ busybox-1.2.2/init/init_shared.c 2006-11-10 13:38:37.000000000 -0600 -@@ -62,6 +62,11 @@ - - sync(); - -+/* Linksys Halt code - if poweroff or halt, invoke an external program -+ to do actually turn off the power. */ -+ if (magic != 0x01234567) system("/usr/bin/Set_Led power_off"); -+/* End of Linksys Halt code */ -+ - reboot(magic); - return 0; /* Shrug */ - } diff --git a/packages/busybox/slingbox-1.2.2/lazy_umount.patch b/packages/busybox/slingbox-1.2.2/lazy_umount.patch deleted file mode 100644 index 345272b8c3..0000000000 --- a/packages/busybox/slingbox-1.2.2/lazy_umount.patch +++ /dev/null @@ -1,27 +0,0 @@ ----busybox-1.2.2/util-linux/umount.c~ 2006-11-04 17:59:20.000000000 -0600 -+++ busybox-1.2.2/util-linux/umount.c 2006-11-04 18:03:55.000000000 -0600 -@@ -16,13 +16,14 @@ - #include - #include - --#define OPTION_STRING "flDnravd" -+#define OPTION_STRING "flDnravdL" - #define OPT_FORCE 1 - #define OPT_LAZY 2 - #define OPT_DONTFREELOOP 4 - #define OPT_NO_MTAB 8 - #define OPT_REMOUNT 16 - #define OPT_ALL (ENABLE_FEATURE_UMOUNT_ALL ? 32 : 0) -+#define OPT_LINKSYS_LAZY 256 - - int umount_main(int argc, char **argv) - { -@@ -45,6 +46,8 @@ - argc -= optind; - argv += optind; - -+ if (opt & OPT_LINKSYS_LAZY) opt |= OPT_LAZY; /* -L same as -l */ -+ - doForce = MAX((opt & OPT_FORCE), (opt & OPT_LAZY)); - - /* Get a list of mount points from mtab. We read them all in now mostly diff --git a/packages/busybox/slingbox-1.2.2/slingbox.patch b/packages/busybox/slingbox-1.2.2/slingbox.patch deleted file mode 100644 index 15f21ed4d0..0000000000 --- a/packages/busybox/slingbox-1.2.2/slingbox.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- slingbox/applets/install.sh.orig 2006-11-04 18:08:47.000000000 -0600 -+++ slingbox/applets/install.sh 2006-11-04 18:11:46.000000000 -0600 -@@ -39,8 +39,8 @@ - done - fi - --if [ "$cleanup" = "1" ] && [ -e "$prefix/bin/busybox" ]; then -- inode=`ls -i "$prefix/bin/busybox" | awk '{print $1}'` -+if [ "$cleanup" = "1" ] && [ -e "$prefix/bin/slingbox" ]; then -+ inode=`ls -i "$prefix/bin/slingbox" | awk '{print $1}'` - sub_shell_it=` - cd "$prefix" - for d in usr/sbin usr/bin sbin bin ; do -@@ -54,28 +54,28 @@ - ` - fi - --rm -f $prefix/bin/busybox || exit 1 -+rm -f $prefix/bin/slingbox || exit 1 - mkdir -p $prefix/bin || exit 1 --install -m 755 busybox $prefix/bin/busybox || exit 1 -+install -m 755 busybox $prefix/bin/slingbox || exit 1 - - for i in $h ; do - appdir=`dirname $i` - mkdir -p $prefix/$appdir || exit 1 - if [ "$2" = "--hardlinks" ]; then -- bb_path="$prefix/bin/busybox" -+ bb_path="$prefix/bin/slingbox" - else - case "$appdir" in - /) -- bb_path="bin/busybox" -+ bb_path="bin/slingbox" - ;; - /bin) -- bb_path="busybox" -+ bb_path="slingbox" - ;; - /sbin) -- bb_path="../bin/busybox" -+ bb_path="../bin/slingbox" - ;; - /usr/bin|/usr/sbin) -- bb_path="../../bin/busybox" -+ bb_path="../../bin/slingbox" - ;; - *) - echo "Unknown installation directory: $appdir" diff --git a/packages/busybox/slingbox-1.2.2/slingbox_name.patch b/packages/busybox/slingbox-1.2.2/slingbox_name.patch deleted file mode 100644 index aeb7221fe2..0000000000 --- a/packages/busybox/slingbox-1.2.2/slingbox_name.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- busybox-1.1.2/applets/applets.c~ 2006-03-22 15:16:25.000000000 -0600 -+++ busybox-1.1.2/applets/applets.c 2006-05-15 11:53:18.000000000 -0500 -@@ -447,6 +447,7 @@ - if(ENABLE_FEATURE_SUID_CONFIG) parse_config_file (); - - if(!strncmp(name, "busybox", 7)) busybox_main(argc, argv); -+ if(!strncmp(name, "slingbox", 8)) busybox_main(argc, argv); - /* Do a binary search to find the applet entry given the name. */ - applet_using = find_applet_by_name(name); - if(applet_using) { diff --git a/packages/busybox/slingbox-1.2.2/wget-long-options.patch b/packages/busybox/slingbox-1.2.2/wget-long-options.patch deleted file mode 100644 index 3c5920a3cb..0000000000 --- a/packages/busybox/slingbox-1.2.2/wget-long-options.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- busybox-1.2.1.orig/networking/wget.c -+++ busybox-1.2.1/networking/wget.c -@@ -136,7 +136,7 @@ - #define WGET_OPT_PREFIX 32 - #define WGET_OPT_PROXY 64 - --#if ENABLE_WGET_LONG_OPTIONS -+#if CONFIG_FEATURE_WGET_LONG_OPTIONS - static const struct option wget_long_options[] = { - { "continue", 0, NULL, 'c' }, - { "quiet", 0, NULL, 'q' }, -@@ -180,7 +180,7 @@ - * Crack command line. - */ - bb_opt_complementally = "-1:\203::"; --#if ENABLE_WGET_LONG_OPTIONS -+#if CONFIG_FEATURE_WGET_LONG_OPTIONS - bb_applet_long_options = wget_long_options; - #endif - opt = bb_getopt_ulflags(argc, argv, "cq\213O:\203:P:Y:", diff --git a/packages/busybox/slingbox_1.00.bb b/packages/busybox/slingbox_1.00.bb deleted file mode 100644 index e52a1b4eb6..0000000000 --- a/packages/busybox/slingbox_1.00.bb +++ /dev/null @@ -1,39 +0,0 @@ -DESCRIPTION = "SlingBox is a minimal version of BusyBox with just enough functionality \ -to enable ipkg to run on an Unslung NSLU2 device." -HOMEPAGE = "http://www.busybox.net" -LICENSE = "GPL" -SECTION = "base" -PRIORITY = "required" -PR = "r10" -COMPATIBLE_MACHINE = "nslu2" - -SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ - file://defconfig \ - file://lazy_umount.patch;patch=1 \ - file://slingbox.patch;patch=1" - -S = "${WORKDIR}/busybox-${PV}" - -export EXTRA_CFLAGS = "${CFLAGS}" -EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}" - -FILES_${PN} = "/" -FILES_${PN}-doc = "" -FILES_${PN}-dev = "" -FILES_${PN}-locale = "" - -inherit cml1 - -do_configure () { - install -m 0644 ${WORKDIR}/defconfig ${S}/.config - cml1_do_configure -} - -do_compile () { - unset CFLAGS - base_do_compile -} - -do_install () { - oe_runmake 'PREFIX=${D}' install -} diff --git a/packages/busybox/slingbox_1.1.3.bb b/packages/busybox/slingbox_1.1.3.bb deleted file mode 100644 index b290841eed..0000000000 --- a/packages/busybox/slingbox_1.1.3.bb +++ /dev/null @@ -1,43 +0,0 @@ -DESCRIPTION = "SlingBox is a minimal version of BusyBox with just enough functionality \ -to enable ipkg to run on an Unslung NSLU2 device." -HOMEPAGE = "http://www.busybox.net" -LICENSE = "GPL" -SECTION = "base" -PRIORITY = "required" -PR = "r3" -COMPATIBLE_MACHINE = "nslu2" - -SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ - file://defconfig \ - file://Makefile_args.patch;patch=1 \ - file://lazy_umount.patch;patch=1 \ - file://slingbox_name.patch;patch=1 \ - file://slingbox.patch;patch=1" - -S = "${WORKDIR}/busybox-${PV}" - -export EXTRA_CFLAGS = "${CFLAGS}" -EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}" - -FILES_${PN} = "/" -FILES_${PN}-doc = "" -FILES_${PN}-dev = "" -FILES_${PN}-locale = "" - -inherit cml1 - -do_configure () { - install -m 0644 ${WORKDIR}/defconfig ${S}/.config - cml1_do_configure -} - -do_compile () { - unset CFLAGS - base_do_compile - # Just in case fdisk is compiled in, do not overwrite the Linksys one - sed -i -e '/fdisk/d' ${S}/busybox.links -} - -do_install () { - oe_runmake 'PREFIX=${D}' install -} diff --git a/packages/busybox/slingbox_1.2.2.bb b/packages/busybox/slingbox_1.2.2.bb deleted file mode 100644 index 1a3eaa3985..0000000000 --- a/packages/busybox/slingbox_1.2.2.bb +++ /dev/null @@ -1,51 +0,0 @@ -DESCRIPTION = "SlingBox is a minimal version of BusyBox with just enough functionality \ -to enable ipkg to run on an Unslung NSLU2 device." -HOMEPAGE = "http://www.busybox.net" -LICENSE = "GPL" -SECTION = "base" -PRIORITY = "required" -PR = "r4" -COMPATIBLE_MACHINE = "nslu2" - -SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ - file://defconfig \ - file://wget-long-options.patch;patch=1 \ - file://lazy_umount.patch;patch=1 \ - file://df_rootfs.patch;patch=1 \ - file://slingbox_name.patch;patch=1 \ - file://halt.patch;patch=1" \ - file://slingbox.patch;patch=1" - -S = "${WORKDIR}/busybox-${PV}" - -export EXTRA_CFLAGS = "${CFLAGS}" -EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}" - -FILES_${PN} = "/" -FILES_${PN}-doc = "" -FILES_${PN}-dev = "" -FILES_${PN}-locale = "" - -inherit cml1 - -do_configure () { - install -m 0644 ${WORKDIR}/defconfig ${S}/.config.oe - echo "CROSS_COMPILER_PREFIX=\"${TARGET_PREFIX}\"" > ${S}/.config - echo "USING_CROSS_COMPILER=y" >> ${S}/.config - sed -e '/CROSS_COMPILER_PREFIX/d' \ - -e '/USING_CROSS_COMPILER/d' \ - '${S}/.config.oe' >>'${S}/.config' - cml1_do_configure -} - -do_compile () { - unset CFLAGS - base_do_compile - # Just in case fdisk is compiled in, do not overwrite the Linksys one - sed -i -e '/fdisk/d' ${S}/busybox.links -} - -do_install () { - oe_runmake "PREFIX=${D}" install - cp -pPR ${S}/_install/* ${D}/ -} -- cgit v1.2.3 From b0ffb892dbdd777f71dffc0e60f4d7188a777895 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 14:53:54 +0000 Subject: busybox 1.7.2 enable CONFIG_FEATURE_DATE_ISOFMT. closes #2964 --- packages/busybox/busybox-1.7.2/defconfig | 2 +- packages/busybox/busybox_1.7.2.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/busybox/busybox-1.7.2/defconfig b/packages/busybox/busybox-1.7.2/defconfig index b878e95dec..11ec1b8aa6 100644 --- a/packages/busybox/busybox-1.7.2/defconfig +++ b/packages/busybox/busybox-1.7.2/defconfig @@ -143,7 +143,7 @@ CONFIG_CHROOT=y CONFIG_CP=y CONFIG_CUT=y CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_FEATURE_DATE_ISOFMT=y CONFIG_DD=y CONFIG_FEATURE_DD_SIGNAL_HANDLING=y # CONFIG_FEATURE_DD_IBS_OBS is not set diff --git a/packages/busybox/busybox_1.7.2.bb b/packages/busybox/busybox_1.7.2.bb index 2755ed065f..285096ce43 100644 --- a/packages/busybox/busybox_1.7.2.bb +++ b/packages/busybox/busybox_1.7.2.bb @@ -1,5 +1,5 @@ require busybox.inc -PR = "r5" +PR = "r6" SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ file://busybox-cron \ -- cgit v1.2.3 From a2edc3a63fc0f5155ce9028991c12a8a2d034c63 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 14:58:26 +0000 Subject: busybox 1.2.1, 1.7.2: enable CONFIG_RUN_PARTS_LONG_OPTIONS and CONFIG_FEATURE_DATE_ISOFMT. closes #2964 --- packages/busybox/busybox-1.2.1/angstrom/defconfig | 4 ++-- packages/busybox/busybox-1.2.1/avr32/defconfig | 4 ++-- packages/busybox/busybox-1.2.1/defconfig | 4 ++-- packages/busybox/busybox-1.2.1/nylon/defconfig | 2 +- packages/busybox/busybox-1.2.1/slugos/defconfig | 4 ++-- packages/busybox/busybox-1.7.2/defconfig | 2 +- packages/busybox/busybox-static-1.2.1/defconfig | 4 ++-- packages/busybox/busybox_1.7.2.bb | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/busybox/busybox-1.2.1/angstrom/defconfig b/packages/busybox/busybox-1.2.1/angstrom/defconfig index 1807dab68e..5e0aa71614 100644 --- a/packages/busybox/busybox-1.2.1/angstrom/defconfig +++ b/packages/busybox/busybox-1.2.1/angstrom/defconfig @@ -123,7 +123,7 @@ CONFIG_CHROOT=y CONFIG_CP=y CONFIG_CUT=y CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_FEATURE_DATE_ISOFMT=y CONFIG_DD=y CONFIG_FEATURE_DD_SIGNAL_HANDLING=y # CONFIG_FEATURE_DD_IBS_OBS is not set @@ -257,7 +257,7 @@ CONFIG_MKTEMP=y CONFIG_READLINK=y CONFIG_FEATURE_READLINK_FOLLOW=y CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y CONFIG_START_STOP_DAEMON=y CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y diff --git a/packages/busybox/busybox-1.2.1/avr32/defconfig b/packages/busybox/busybox-1.2.1/avr32/defconfig index b15f162a7d..112eb21d7e 100644 --- a/packages/busybox/busybox-1.2.1/avr32/defconfig +++ b/packages/busybox/busybox-1.2.1/avr32/defconfig @@ -123,7 +123,7 @@ CONFIG_CHROOT=y CONFIG_CP=y CONFIG_CUT=y CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_FEATURE_DATE_ISOFMT=y CONFIG_DD=y CONFIG_FEATURE_DD_SIGNAL_HANDLING=y # CONFIG_FEATURE_DD_IBS_OBS is not set @@ -253,7 +253,7 @@ CONFIG_MKTEMP=y CONFIG_READLINK=y CONFIG_FEATURE_READLINK_FOLLOW=y CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y CONFIG_START_STOP_DAEMON=y CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y diff --git a/packages/busybox/busybox-1.2.1/defconfig b/packages/busybox/busybox-1.2.1/defconfig index 7308eead76..4bb48eb09d 100644 --- a/packages/busybox/busybox-1.2.1/defconfig +++ b/packages/busybox/busybox-1.2.1/defconfig @@ -123,7 +123,7 @@ CONFIG_CHROOT=y CONFIG_CP=y CONFIG_CUT=y CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_FEATURE_DATE_ISOFMT=y CONFIG_DD=y CONFIG_FEATURE_DD_SIGNAL_HANDLING=y # CONFIG_FEATURE_DD_IBS_OBS is not set @@ -257,7 +257,7 @@ CONFIG_MKTEMP=y CONFIG_READLINK=y CONFIG_FEATURE_READLINK_FOLLOW=y CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y CONFIG_START_STOP_DAEMON=y CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y diff --git a/packages/busybox/busybox-1.2.1/nylon/defconfig b/packages/busybox/busybox-1.2.1/nylon/defconfig index 8a7aa8b00f..1e8ebb15a5 100644 --- a/packages/busybox/busybox-1.2.1/nylon/defconfig +++ b/packages/busybox/busybox-1.2.1/nylon/defconfig @@ -243,7 +243,7 @@ CONFIG_PIPE_PROGRESS=y CONFIG_READLINK=y CONFIG_FEATURE_READLINK_FOLLOW=y CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y CONFIG_START_STOP_DAEMON=y CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y # CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set diff --git a/packages/busybox/busybox-1.2.1/slugos/defconfig b/packages/busybox/busybox-1.2.1/slugos/defconfig index 74ece9c3b6..6ec2e8bee7 100644 --- a/packages/busybox/busybox-1.2.1/slugos/defconfig +++ b/packages/busybox/busybox-1.2.1/slugos/defconfig @@ -123,7 +123,7 @@ CONFIG_CHROOT=y CONFIG_CP=y CONFIG_CUT=y CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_FEATURE_DATE_ISOFMT=y CONFIG_DD=y CONFIG_FEATURE_DD_SIGNAL_HANDLING=y # CONFIG_FEATURE_DD_IBS_OBS is not set @@ -257,7 +257,7 @@ CONFIG_MKTEMP=y CONFIG_READLINK=y CONFIG_FEATURE_READLINK_FOLLOW=y CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y CONFIG_START_STOP_DAEMON=y CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y diff --git a/packages/busybox/busybox-1.7.2/defconfig b/packages/busybox/busybox-1.7.2/defconfig index b878e95dec..11ec1b8aa6 100644 --- a/packages/busybox/busybox-1.7.2/defconfig +++ b/packages/busybox/busybox-1.7.2/defconfig @@ -143,7 +143,7 @@ CONFIG_CHROOT=y CONFIG_CP=y CONFIG_CUT=y CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_FEATURE_DATE_ISOFMT=y CONFIG_DD=y CONFIG_FEATURE_DD_SIGNAL_HANDLING=y # CONFIG_FEATURE_DD_IBS_OBS is not set diff --git a/packages/busybox/busybox-static-1.2.1/defconfig b/packages/busybox/busybox-static-1.2.1/defconfig index 1807dab68e..5e0aa71614 100644 --- a/packages/busybox/busybox-static-1.2.1/defconfig +++ b/packages/busybox/busybox-static-1.2.1/defconfig @@ -123,7 +123,7 @@ CONFIG_CHROOT=y CONFIG_CP=y CONFIG_CUT=y CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_FEATURE_DATE_ISOFMT=y CONFIG_DD=y CONFIG_FEATURE_DD_SIGNAL_HANDLING=y # CONFIG_FEATURE_DD_IBS_OBS is not set @@ -257,7 +257,7 @@ CONFIG_MKTEMP=y CONFIG_READLINK=y CONFIG_FEATURE_READLINK_FOLLOW=y CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y CONFIG_START_STOP_DAEMON=y CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y diff --git a/packages/busybox/busybox_1.7.2.bb b/packages/busybox/busybox_1.7.2.bb index 2755ed065f..285096ce43 100644 --- a/packages/busybox/busybox_1.7.2.bb +++ b/packages/busybox/busybox_1.7.2.bb @@ -1,5 +1,5 @@ require busybox.inc -PR = "r5" +PR = "r6" SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ file://busybox-cron \ -- cgit v1.2.3 From bcc6ee09deadaa049ddeb590528978c38c71ad93 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 15:26:40 +0000 Subject: gspd 2.* increase package granularity. closes #3529 --- packages/gpsd/gpsd.inc | 18 +++++++++++------- packages/gpsd/gpsd_2.28.bb | 3 ++- packages/gpsd/gpsd_2.34.bb | 2 +- packages/gpsd/gpsd_2.36.bb | 2 +- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/gpsd/gpsd.inc b/packages/gpsd/gpsd.inc index 237971c9c7..d2630e5e43 100644 --- a/packages/gpsd/gpsd.inc +++ b/packages/gpsd/gpsd.inc @@ -3,7 +3,7 @@ SECTION = "console/network" PRIORITY = "optional" LICENSE = "GPL" DEPENDS = "dbus-glib ncurses python" -RDEPENDS = "gpsd-conf" +RDEPENDS_${PN} = "gpsd-conf gpsd-gpsctl" EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \ --x-libraries=${STAGING_LIBDIR} \ @@ -12,12 +12,12 @@ EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \ SRC_URI = "http://download.berlios.de/gpsd/gpsd-${PV}.tar.gz \ file://gpsd-default \ - file://gps-hardware \ + file://gps-hardware \ file://gpsd" SRC_URI_append_fic-gta01 = " \ - file://restart_gllin.sh \ - " + file://restart_gllin.sh \ +" inherit autotools update-rc.d @@ -47,7 +47,7 @@ do_install_append() { install -d ${D}/${sysconfdir}/init.d install -d ${D}/dev install -m 0755 ${WORKDIR}/gpsd ${D}/${sysconfdir}/init.d/ - install -m 0755 ${WORKDIR}/gps-hardware ${D}/${sysconfdir}/init.d/gps-hardware.default + install -m 0755 ${WORKDIR}/gps-hardware ${D}/${sysconfdir}/init.d/gps-hardware.default install -d ${D}/${sysconfdir}/default install -m 0644 ${WORKDIR}/gpsd-default ${D}/${sysconfdir}/default/gpsd.default } @@ -69,14 +69,18 @@ pkg_postrm_${PN}-conf() { SRC_URI_OVERRIDES_PACKAGE_ARCH = "0" -PACKAGES =+ "libgps python-pygps gpsd-conf" +PACKAGES =+ "libgps python-pygps gpsd-conf gpsd-gpsctl gps-utils" PACKAGE_ARCH_gpsd-conf = "${MACHINE_ARCH}" FILES_libgps = "${libdir}/*.so.*" FILES_gpsd-conf = "${sysconfdir}" +FILES_gpsd-gpsctl = "${bindir}/gpsctl" +FILES_gps-utils = "${bindir}/*" +# might split them up even more fine granular +RDEPENDS_gps-utils = "python-pygps" DESCRIPTION_python-pygps = "Python bindings to gpsd" FILES_python-pygps = "${libdir}/*/site-packages/*" -RDEPENDS_python-pygps = "python-core gpsd" +RDEPENDS_python-pygps = "python-core python-ncurses gpsd" diff --git a/packages/gpsd/gpsd_2.28.bb b/packages/gpsd/gpsd_2.28.bb index 7094893b99..d5a02e27b4 100644 --- a/packages/gpsd/gpsd_2.28.bb +++ b/packages/gpsd/gpsd_2.28.bb @@ -1,2 +1,3 @@ require gpsd.inc -PR = "r8" + +PR = "r9" diff --git a/packages/gpsd/gpsd_2.34.bb b/packages/gpsd/gpsd_2.34.bb index ea9fe4f550..8e46cb01eb 100644 --- a/packages/gpsd/gpsd_2.34.bb +++ b/packages/gpsd/gpsd_2.34.bb @@ -1,4 +1,4 @@ require gpsd.inc -PR = "r8" +PR = "r9" diff --git a/packages/gpsd/gpsd_2.36.bb b/packages/gpsd/gpsd_2.36.bb index 726ba42481..b3cc2f1f19 100644 --- a/packages/gpsd/gpsd_2.36.bb +++ b/packages/gpsd/gpsd_2.36.bb @@ -1,3 +1,3 @@ require gpsd.inc -PR = "r2" +PR = "r4" -- cgit v1.2.3 From bc42f026c7487d8336f3ccaefa6d9776d161e4eb Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 15:36:43 +0000 Subject: bootimg.bbclass: add deploy image dir, insert chance for post processing image. closes #1263 --- classes/bootimg.bbclass | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/classes/bootimg.bbclass b/classes/bootimg.bbclass index 0c96001096..d58cf1f424 100644 --- a/classes/bootimg.bbclass +++ b/classes/bootimg.bbclass @@ -13,9 +13,9 @@ # ${SYSLINUX_OPTS} - additional options to add to the syslinux file ';' delimited do_bootimg[depends] += "dosfstools-native:do_populate_staging \ - syslinux-native:do_populate_staging \ - mtools-native:do_populate_staging \ - cdrtools-native:do_populate_staging" + syslinux-native:do_populate_staging \ + mtools-native:do_populate_staging \ + cdrtools-native:do_populate_staging" PACKAGES = " " @@ -31,6 +31,8 @@ SYSLINUXCFG = "${HDDDIR}/syslinux.cfg" SYSLINUXMENU = "${HDDDIR}/menu" inherit syslinux + +IMAGE_POSTPROCESS_COMMAND ?= "" build_boot_bin() { install -d ${HDDDIR} @@ -49,13 +51,15 @@ build_boot_bin() { BLOCKS=`du -bks ${HDDDIR} | cut -f 1` SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}` + install -d ${DEPLOY_DIR_IMAGE} + mkdosfs -F 12 -n ${BOOTIMG_VOLUME_ID} -d ${HDDDIR} \ -C ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg $SIZE syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg chmod 644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg - #Create an ISO if we have an INITRD + # Create an ISO if we have an INITRD if [ -n "${INITRD}" ] && [ -s "${INITRD}" ] && [ "${NOISO}" != "1" ] ; then install -d ${ISODIR} @@ -78,6 +82,8 @@ build_boot_bin() { cp ${STAGING_DATADIR_NATIVE}/syslinux/isolinux.bin \ ${ISODIR} + ${IMAGE_POSTPROCESS_COMMAND} + mkisofs -V ${BOOTIMG_VOLUME_ID} \ -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ -b isolinux/isolinux.bin -c isolinux/boot.cat -r \ -- cgit v1.2.3 From b51da514a70049ce0ef6d1a3e44481dd921a986f Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 19:27:02 +0000 Subject: * add lightmediascanner * add python-lightmediascanner --- conf/distro/include/sane-srcrevs.inc | 2 ++ packages/lightmediascanner/.mtn2git_empty | 0 packages/lightmediascanner/lightmediascanner_svn.bb | 19 +++++++++++++++++++ packages/python/python-lightmediascanner_svn.bb | 12 ++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 packages/lightmediascanner/.mtn2git_empty create mode 100644 packages/lightmediascanner/lightmediascanner_svn.bb create mode 100644 packages/python/python-lightmediascanner_svn.bb diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index ca1227a84e..a585fdeca6 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -43,6 +43,7 @@ SRCREV_pn-libmokopanelui2 ?= "3349" SRCREV_pn-libmokoui2 ?= "3688" SRCREV_pn-libowl ?= "277" SRCREV_pn-libxosd ?= "627" +SRCREV_pn-lightmediascanner ?= "68" SRCREV_pn-linux-bfin ?= "3758" SRCREV_pn-linux-hackndev-2.6 ?= "1308" SRCREV_pn-linux-ixp4xx ?= "1039" @@ -126,6 +127,7 @@ SRCREV_pn-psplash ?= "249" SRCREV_pn-python-formencode = "3148" SRCREV_pn-python-fso-pyproto = "70" SRCREV_pn-python-gsmd = "127" +SRCREV_pn-python-lightmediascanner = "68" SRCREV_pn-settings-daemon ?= "1755" SRCREV_pn-sjf2410-linux-native ?= "933" SRCREV_pn-sphyrna ?= "45" diff --git a/packages/lightmediascanner/.mtn2git_empty b/packages/lightmediascanner/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/lightmediascanner/lightmediascanner_svn.bb b/packages/lightmediascanner/lightmediascanner_svn.bb new file mode 100644 index 0000000000..702dcbe3f3 --- /dev/null +++ b/packages/lightmediascanner/lightmediascanner_svn.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "Lightweight media scanner meant to be used in not-so-powerful devices" +SECTION = "libs/multimedia" +HOMEPAGE = "http://lms.garage.maemo.org/" +AUTHOR = "Gustavo Barbieri" +LICENSE = "LGPL" +DEPENDS = "sqlite3" +PV = "0.1.0+svn${SRCREV}" + +SRC_URI = "svn://garage.maemo.org/svn/lms/;module=lightmediascanner;proto=https" +S = "${WORKDIR}/lightmediascanner" + +inherit autotools pkgconfig + +FILES_${PN}-dbg += "${libdir}/${PN}/plugins/.debug" + +do_stage() { + autotools_stage_all +} + diff --git a/packages/python/python-lightmediascanner_svn.bb b/packages/python/python-lightmediascanner_svn.bb new file mode 100644 index 0000000000..27d0bb62f1 --- /dev/null +++ b/packages/python/python-lightmediascanner_svn.bb @@ -0,0 +1,12 @@ +DESCRIPTION = "Python bindings to the Lightweight media scanner" +SECTION = "devel/python" +HOMEPAGE = "http://lms.garage.maemo.org/" +AUTHOR = "Gustavo Barbieri" +LICENSE = "LGPL" +DEPENDS = "lightmediascanner" +PV = "0.1.0+svn${SRCREV}" + +SRC_URI = "svn://garage.maemo.org/svn/lms/;module=python-lightmediascanner;proto=https" +S = "${WORKDIR}/python-lightmediascanner" + +inherit distutils -- cgit v1.2.3 From 8a9955543efe6c676b005cd9bcd92800bda1f50c Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 19:28:08 +0000 Subject: enna cvs now DEPENDS on lightmediascanner --- packages/e17/enna_cvs.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/e17/enna_cvs.bb b/packages/e17/enna_cvs.bb index 7f2c6eb632..3ea77940b4 100644 --- a/packages/e17/enna_cvs.bb +++ b/packages/e17/enna_cvs.bb @@ -1,6 +1,7 @@ DESCRIPTION = "Enna is a media center application based on EFL" LICENSE = "GPL" -DEPENDS = "curl dbus eet evas edje ecore edbus emotion libmusicbrainz libxml2 taglibc" +DEPENDS = "curl dbus eet evas edje ecore edbus emotion" +DEPENDS += "libmusicbrainz lightmediascanner libxml2 taglibc" SECTION = "x11/multimedia" PV = "0.2.0+cvs${SRCDATE}" -- cgit v1.2.3 From 706f895f76c0f1cbb71cce85d0f21ba3f1611d23 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 8 Feb 2008 19:28:40 +0000 Subject: task-python-everything: add python-lightmediascanner --- packages/tasks/task-python-everything.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/tasks/task-python-everything.bb b/packages/tasks/task-python-everything.bb index 61daa7e089..a23589111d 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 = "ml24" +PR = "ml25" RDEPENDS = "\ python-ao \ @@ -30,6 +30,7 @@ RDEPENDS = "\ python-itools \ python-logilab-common \ python-libgmail \ + python-lightmediascanner \ python-lxml \ python-mad \ python-numarray \ -- cgit v1.2.3 From b6764cf32ec93547531130dca364fb95e1c495f4 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 8 Feb 2008 22:47:02 +0000 Subject: klibc: make changes so that klibc-utils-static compiles for eabi as well. Closes 3745. --- packages/klibc/files/klibc-config-eabi.patch | 9 +++++++++ packages/klibc/klibc-utils-static_1.5.bb | 12 +++--------- 2 files changed, 12 insertions(+), 9 deletions(-) create mode 100644 packages/klibc/files/klibc-config-eabi.patch diff --git a/packages/klibc/files/klibc-config-eabi.patch b/packages/klibc/files/klibc-config-eabi.patch new file mode 100644 index 0000000000..86517f0594 --- /dev/null +++ b/packages/klibc/files/klibc-config-eabi.patch @@ -0,0 +1,9 @@ +diff -Nur klibc-1.5/defconfig klibc-1.5p/defconfig +--- klibc-1.5/defconfig 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5p/defconfig 2008-02-08 19:24:22.337127756 +0100 +@@ -5,4 +5,4 @@ + CONFIG_REGPARM=y + # ARM options + # CONFIG_KLIBC_THUMB is not set +-# CONFIG_AEABI is not set ++CONFIG_AEABI=y diff --git a/packages/klibc/klibc-utils-static_1.5.bb b/packages/klibc/klibc-utils-static_1.5.bb index 17db23305d..bbb3248158 100644 --- a/packages/klibc/klibc-utils-static_1.5.bb +++ b/packages/klibc/klibc-utils-static_1.5.bb @@ -4,6 +4,9 @@ PR = "r3" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/Stable/klibc-${PV}.tar.bz2" +SRC_URI_append_linux-gnueabi = "\ + file://klibc-config-eabi.patch;patch=1" + EXTRA_OEMAKE = "'KLIBCARCH=${KLIBC_ARCH}' \ 'CROSS_COMPILE=${TARGET_PREFIX}' \ " @@ -36,7 +39,6 @@ do_install() { install -m 755 usr/utils/static/uname ${D}${base_bindir} } -PACKAGE_ARCH = "${MACHINE_ARCH}" PACKAGES = "klibc-utils-static-sh klibc-utils-static-gzip \ klibc-utils-static-cat klibc-utils-static-chroot \ klibc-utils-static-cpio klibc-utils-static-dd \ @@ -71,11 +73,3 @@ FILES_klibc-utils-static-sleep = "${base_bindir}/sleep" FILES_klibc-utils-static-true = "${base_bindir}/true" FILES_klibc-utils-static-umount = "${base_bindir}/umount" FILES_klibc-utils-static-uname = "${base_bindir}/uname" - -# the klibc code contains ARM instructions (for ARM), this -# could be fixed, but for the moment: -ARM_INSTRUCTION_SET = "arm" - -KLIBC_ARCH = "'${TARGET_ARCH}'" -KLIBC_ARCH_armeb = "'arm'" -KLIBC_ARCH_mipsel = "'mips'" -- cgit v1.2.3 From 3804d774e90f3297ddf25e493b71e80b4a06c030 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 8 Feb 2008 23:39:06 +0000 Subject: libxml++: add glibmm to DEPENDS --- packages/libxml/libxml++_2.14.0.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/libxml/libxml++_2.14.0.bb b/packages/libxml/libxml++_2.14.0.bb index 4a5af16ea3..71a4de2bdb 100644 --- a/packages/libxml/libxml++_2.14.0.bb +++ b/packages/libxml/libxml++_2.14.0.bb @@ -1,6 +1,6 @@ LICENSE = "GPL" -DEPENDS = "gtk+" +DEPENDS = "gtk+ glibmm" inherit gnome pkgconfig -- cgit v1.2.3 From 00658edbf96bc2e5e25cd645606a7a14db7b9046 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sat, 9 Feb 2008 02:39:20 +0000 Subject: java.bbclass: Added function to generate very simple wrapper scripts. --- classes/java.bbclass | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/classes/java.bbclass b/classes/java.bbclass index 7fa6dc1786..41d52fe425 100644 --- a/classes/java.bbclass +++ b/classes/java.bbclass @@ -60,3 +60,63 @@ oe_jarinstall() { shift done } + +# Creates a simple wrapper script for your Java program. +# The script is written to ${PN} by default. +# +# Parameters are as follows: +# [options]
[jar files ...] +# +# Options are +# -o where name is the output file name +# +# It can only take jar files from ${datadir_java}! +oe_java_simple_wrapper() { + delimiter= + mainclass= + classpath= + output=${PN} + + while [ "$#" -gt 0 ]; do + case "$1" in + -o) + shift + output=$1 + ;; + -*) + oefatal "oe_java_simple_wrapper: unknown option: $1" + ;; + *) + if [ $mainclass ] + then + classpath=$classpath$delimiter${datadir_java}/$1 + delimiter=":" + else + mainclass=$1 + fi + ;; + esac + shift + done + + oenote "Creating simple Java wrapper script" + oenote "Output File: $output" + oenote "Main Class: $mainclass" + oenote "Classpath: $classpath" + + echo "#!/bin/sh" > $output + echo "# This file is autogenerated by the oe_java_simple_wrapper function of OpenEmbedded" >> $output + echo >> $output + echo "# You can provide additional VM arguments by setting the VMARGS environment variable." >> $output + echo "CLASSPATH_ARG=\"-cp $classpath\"" >> $output + echo >> $output + echo "MAIN_CLASS=$mainclass" >> $output + echo >> $output + echo "# Allows overriding the VM by setting the JAVA environment variable." >> $output + echo "if [ x\${JAVA} = x ]" >> $output + echo "then" >> $output + echo " JAVA=java" >> $output + echo "fi" >> $output + echo >> $output + echo "exec \${JAVA} \${VMARGS} \${CLASSPATH_ARG} \${MAIN_CLASS} \${@}" >> $output +} -- cgit v1.2.3 From 5de12a6ba0bc1fc8c0c23e718586250b24954c28 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sat, 9 Feb 2008 02:44:00 +0000 Subject: rxtx: New recipe. logic-analyzer: New recipe that uses rxtx. --- packages/logic-analyzer/.mtn2git_empty | 0 packages/logic-analyzer/files/.mtn2git_empty | 0 .../logic-analyzer/files/client-makefile.patch | 426 +++++++++++++++++++++ packages/logic-analyzer/files/cp-run-fix.patch | 26 ++ packages/logic-analyzer/logic-analyzer_0.8.bb | 38 ++ packages/rxtx/.mtn2git_empty | 0 packages/rxtx/files/.mtn2git_empty | 0 packages/rxtx/files/rxtx-fixes-from-debian.patch | 235 ++++++++++++ packages/rxtx/rxtx_2.1-7r2.bb | 31 ++ 9 files changed, 756 insertions(+) create mode 100644 packages/logic-analyzer/.mtn2git_empty create mode 100644 packages/logic-analyzer/files/.mtn2git_empty create mode 100644 packages/logic-analyzer/files/client-makefile.patch create mode 100644 packages/logic-analyzer/files/cp-run-fix.patch create mode 100644 packages/logic-analyzer/logic-analyzer_0.8.bb create mode 100644 packages/rxtx/.mtn2git_empty create mode 100644 packages/rxtx/files/.mtn2git_empty create mode 100644 packages/rxtx/files/rxtx-fixes-from-debian.patch create mode 100644 packages/rxtx/rxtx_2.1-7r2.bb diff --git a/packages/logic-analyzer/.mtn2git_empty b/packages/logic-analyzer/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/logic-analyzer/files/.mtn2git_empty b/packages/logic-analyzer/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/logic-analyzer/files/client-makefile.patch b/packages/logic-analyzer/files/client-makefile.patch new file mode 100644 index 0000000000..7b0b4b88ce --- /dev/null +++ b/packages/logic-analyzer/files/client-makefile.patch @@ -0,0 +1,426 @@ +Index: LogicAnalyzer/client/Makefile +=================================================================== +--- LogicAnalyzer.orig/client/Makefile 2008-02-09 02:27:13.000000000 +0100 ++++ LogicAnalyzer/client/Makefile 2008-02-09 02:28:34.000000000 +0100 +@@ -1,8 +1,412 @@ +-all: +- jar cfm analyzer.jar \ +- Manifest.txt \ +- org/sump/analyzer/*.class \ +- org/sump/analyzer/tools/*.class \ +- org/sump/analyzer/icons/*.png \ +- org/sump/util/*.class \ +- +\ No newline at end of file ++# ++# Makefile created at Fri Feb 8 23:36:42 2008, by mmake ++# ++ ++# Programs (with common options): ++SHELL = /bin/sh ++CP = cp ++RM = rm -f ++MV = mv -f ++SED = sed ++ETAGS = etags ++XARGS = xargs ++CAT = cat ++FIND = find ++CPP = cpp -C -P ++ ++INSTALL = install ++INSTALL_PROG = $(INSTALL) -m $(MODE_PROGS) ++INSTALL_FILE = $(INSTALL) -m $(MODE_FILES) ++INSTALL_DIR = $(INSTALL) -m $(MODE_DIRS) -d ++ ++# Install modes ++MODE_PROGS = 555 ++MODE_FILES = 444 ++MODE_DIRS = 2755 ++ ++# Build programs ++JAVAC = ecj ++JAVADOC = javadoc ++JAR = fastjar ++ ++# Build flags ++JAVAC_FLAGS = ++JAVADOC_FLAGS = -version -author ++JAR_FLAGS = cvf0 ++JIKES_DEP_FLAG = +M ++ ++# ------------------------------------------------------------------- # ++ ++# Prefix for every install directory ++PREFIX = ++ ++# Where to start installing the class files. Set this to an empty value ++# if you dont want to install classes ++CLASS_DIR = $(PREFIX)classes ++ ++# The directory to install the jar file in. Set this to an empty value ++# if you dont want to install a jar file ++JAR_DIR = $(PREFIX)lib ++ ++# The directory to install the app bundle in. Set this to an empty value ++# if you dont want to install an app bundle ++BUNDLE_DIR = $(PREFIX)lib ++ ++ ++# The directory to install html files generated by javadoc ++DOC_DIR = $(PREFIX)doc/api-docs ++ ++# The directory to install script files in ++SCRIPT_DIR = $(PREFIX)bin ++ ++# ------------------------------------------------------------------- # ++ ++# The name of the jar file to install ++JAR_FILE = analyzer.jar ++ ++# ++# The VERSION variable below should be set to a value ++# that will be tested in the .xjava code and Info.plist. ++# ++VERSION = CHANGE_ME ++ ++# ------------------------------------------------------------------- # ++ ++# The name of the OS X Application Bundle to install ++BUNDLE_FILE = ++ ++# Folder containing App Bundle resources (Info.plist, *.icns, etc.) ++BUNDLE_RESOURCE_DIR = misc/macosx ++ ++# Items to copy to the Resources folder of the bundle ++BUNDLE_RESOURCES = $(addsuffix .icns, $(basename $(APP_FILE)) Document) ++ ++# Location of JavaApplicatonStub ++JAVA_STUB = /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub ++ ++# ------------------------------------------------------------------- # ++ ++# Resource files: ++# Extend the list to install other files of your choice ++RESOURCE_SRC := *.properties *.gif *.au ++ ++# Objects that should go into the jar file. (find syntax) ++JAR_OBJS := \( -name '*.class' -o -name '*.gif' -o -name "*.au" \ ++ -o -name '*.properties' \ ++ -o -name '*.png' \) ++ ++# Include the separate variables file if it exists ++MAKEFILE_VARS = makefile.vars ++VARS = $(wildcard $(MAKEFILE_VARS)) ++ifneq ($(VARS),) ++ include $(MAKEFILE_VARS) ++endif ++ ++ ++# Packages we should compile ++PACKAGES = \ ++ org.sump.analyzer.tools \ ++ org.sump.util \ ++ org.sump.analyzer ++ ++ ++# All packages that can be recursively compiled. ++ALL_PACKAGES = \ ++ org \ ++ org.sump \ ++ $(PACKAGES) ++ ++ ++# Packages to generate docs for. ++JAVADOC_PACKAGES = $(PACKAGES) ++ ++ ++# Resource packages ++RESOURCES = \ ++ doc.resources ++ ++ ++# Directories with shell scripts ++SCRIPTS = ++ ++# ------------------------------------------------------------------- # ++ ++# A marker variable for the top level directory ++TOPLEVEL := . ++ ++# Subdirectories with java files: ++JAVA_DIRS := $(subst .,/,$(PACKAGES)) $(TOPLEVEL) ++ ++# Subdirectories with only resource files: ++RESOURCE_DIRS := $(subst .,/,$(RESOURCES)) ++ ++# All the .xjava source files: ++XJAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.xjava)) ++ ++# All the xjava files to build ++XJAVA_OBJS := $(XJAVA_SRC:.xjava=.java) ++ ++# Directory coresponding to a package ++PACKAGE_DIR = $(subst .,/,$(1)) ++ ++# All the (x)java files in a package ++PACKAGE_SRC = $(shell $(FIND) $(PACKAGE_DIR) \( -name '*.java' -or -name '*.xjava' \) ) ++ ++# All the classes to build in a package ++PACKAGE_OBJS = $(patsubst %.java,%.class,$(PACKAGE_SRC: %.xjava=%.java)) ++ ++# All the .java source files: ++JAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.java)) ++JAVA_SRC := $(XJAVA_OBJS) $(JAVA_SRC) ++ ++# Dependency files: ++DEPEND_OBJS := $(JAVA_SRC:.java=.u) ++ ++# The intermediate java files and main classes we should build: ++JAVA_OBJS := $(XJAVA_OBJS) $(JAVA_SRC:.java=.class) ++ ++# Search for resource files in both JAVA_DIRS and RESOURCE_DIRS ++RESOURCE_OBJS := $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \ ++ $(wildcard $(foreach file, $(RESOURCE_SRC), \ ++ $(dir)/$(file)))) ++ ++# All the shell scripts source ++SCRIPT_SRCS := $(foreach dir, $(SCRIPTS), $(wildcard $(dir)/*.sh)) ++# All shell scripts we should install ++SCRIPT_OBJS := $(SCRIPT_SRCS:.sh=) ++ ++# All the files to install into CLASS_DIR ++INSTALL_OBJS := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.class)) ++# Escape inner class delimiter $ ++INSTALL_OBJS := $(subst $$,\$$,$(INSTALL_OBJS)) ++# Add the resource files to be installed as well ++INSTALL_OBJS := $(INSTALL_OBJS) $(RESOURCE_OBJS) ++ ++ ++# ------------------------------------------------------------------- # ++ ++ ++define check-exit ++|| exit 1 ++ ++endef ++ ++ ++# ----------- ++# Build Rules ++# ----------- ++ ++%.java: %.xjava ++ $(CPP) -D$(VERSION) $< $@ ++ ++%.class: %.java ++ $(JAVAC) $(JAVAC_FLAGS) $< ++ ++%.jar: $(JAVA_OBJS) $(RESOURCE_OBJS) ++ $(FIND) $(TOPLEVEL) $(JAR_OBJS) -print | $(XARGS) \ ++ $(JAR) $(JAR_FLAGS) $(JAR_FILE) ++ ++%.u: %.java ++ $(JAVAC) $(JIKES_DEP_FLAG) $< ++ ++ ++# ------- ++# Targets ++# ------- ++ ++.PHONY: all jar install uninstall doc clean depend tags bundle \ ++ help $(ALL_PACKAGES) ++ ++all:: $(JAVA_OBJS) ++ ++help: ++ @echo "Usage: make {all|jar|srcjar|bundle|install|uninstall|doc|clean|depend|tags|PACKAGE_NAME}" ++ @echo " all: build all classes" ++ @echo " jar: build jar file" ++ @echo " srcjar: build source jar file" ++ @echo " bundle: build OS X app bundle" ++ @echo " install: install classes into $(CLASS_DIR)" ++ @echo " jar into $(JAR_DIR)" ++ @echo " bundle into $(BUNDLE_DIR)" ++ @echo " javadocs into $(DOC_DIR)" ++ @echo " scripts into $(SCRIPT_DIR)" ++ @echo " uninstall: remove installed files" ++ @echo " doc: generate api docs from javadoc comments" ++ @echo " clean: remove classes and temporary files" ++ @echo " depend: build class dependency info using jikes" ++ @echo " tags: build emacs tags file" ++ @echo " PACKAGE_NAME: builds all classes in this package and any subpackages." ++ ++# Jar target ++ifneq ($(strip $(JAR_FILE)),) ++jar: $(JAR_FILE) ++ifneq ($(strip $(JAR_DIR)),) ++install:: $(JAR_FILE) ++ @echo "===> [Installing jar file, $(JAR_FILE) in $(JAR_DIR)] " ++ $(INSTALL_DIR) $(JAR_DIR) $(check-exit) ++ $(INSTALL_FILE) $(JAR_FILE) $(JAR_DIR) $(check-exit) ++uninstall:: ++ @echo "===> [Removing jar file, $(JAR_FILE) from $(JAR_DIR)] " ++ $(RM) $(JAR_DIR)/$(JAR_FILE) $(check-exit) ++else ++install:: ++ @echo "No jar install dir defined" ++endif ++clean:: ++ $(RM) $(JAR_FILE) ++else ++jar: ++ @echo "No jar file defined" ++endif ++ ++SRC_JAR_FILE := $(basename $(JAR_FILE))-src$(suffix $JAR_FILE) ++ ++# Source jar target ++srcjar : $(SRC_JAR_FILE) ++$(SRC_JAR_FILE): $(JAVA_SRC) $(RESOURCE_OBJS) ++ $(FIND) $(TOPLEVEL) $(JAR_OBJS: .class=.java) -print | $(XARGS) \ ++ $(JAR) $(JAR_FLAGS) $@ ++ ++# Bundle target ++ifneq ($(strip $(BUNDLE_FILE)),) ++bundle: $(BUNDLE_FILE) ++$(BUNDLE_FILE) : $(JAR_FILE) ++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/Resources/Java $(check-exit) ++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/MacOS $(check-exit) ++ $(INSTALL_PROG) $(JAVA_STUB) $(BUNDLE_FILE)/Contents/MacOS/ \ ++ $(check-exit) ++ ( $(CAT) $(BUNDLE_RESOURCE_DIR)/Info.plist | $(SED) -e \ ++ s/VERSION/$(VERSION)/ >98762infoplist876 ) $(check-exit) ++ $(INSTALL_FILE) 98762infoplist876 \ ++ $(BUNDLE_FILE)/Contents/Info.plist $(check-exit) ++ $(RM) 98762infoplist876 $(check-exit) ++ $(INSTALL_FILE) $(JAR_FILE) $(BUNDLE_FILE)/Contents/Resources/Java ++ checkexit="";for f in $(BUNDLE_RESOURCES); do \ ++ $(INSTALL_FILE) $(BUNDLE_RESOURCE_DIR)$$f $(BUNDLE_FILE)/Contents/Resources/ \ ++ || checkexit=$?; \ ++ done; test -z $$checkexit ++ ++ifneq ($(strip $(BUNDLE_DIR)),) ++# This is probably bad, but I don't know how else to do it ++install:: $(BUNDLE_FILE) ++ @echo "===> [Installing app bundle, $(BUNDLE_FILE) in $(BUNDLE_DIR)] " ++ $(INSTALL_DIR) $(BUNDLE_DIR) $(check-exit) ++ $(CP) -R $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit) ++ $(INSTALL_FILE) $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit) ++uninstall:: ++ @echo "===> [Removing bundle file, $(BUNDLE_FILE) from $(BUNDLE_DIR)] " ++ $(RM) -r $(BUNDLE_DIR)/$(BUNDLE_FILE) $(check-exit) ++else ++install:: ++ @echo "No bundle install dir defined" ++endif ++clean:: ++ $(RM) -r $(BUNDLE_FILE) ++else ++bundle: ++ @echo "No bundle file defined" ++endif ++ ++ ++# Install target for Classes and Resources ++ifneq ($(strip $(CLASS_DIR)),) ++install:: $(JAVA_OBJS) ++ @echo "===> [Installing classes in $(CLASS_DIR)] " ++ $(INSTALL_DIR) $(CLASS_DIR) $(check-exit) ++ $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \ ++ $(INSTALL_DIR) $(CLASS_DIR)/$(dir) $(check-exit)) ++ $(foreach file, $(INSTALL_OBJS), \ ++ $(INSTALL_FILE) $(file) $(CLASS_DIR)/$(file) \ ++ $(check-exit)) ++uninstall:: ++ @echo "===> [Removing class-files from $(CLASS_DIR)] " ++ $(foreach file, $(INSTALL_OBJS), \ ++ $(RM) $(CLASS_DIR)/$(file) \ ++ $(check-exit)) ++else ++# Print a warning here if you like. (No class install dir defined) ++endif ++ ++ ++ ++# Depend target ++ifeq ($(findstring jikes,$(JAVAC)),jikes) ++depend: $(XJAVA_OBJS) $(DEPEND_OBJS) ++ ( $(CAT) $(DEPEND_OBJS) | $(SED) -e '/\.class$$/d' \ ++ -e '/.*$$.*/d' > $(MAKEFILE_DEPEND); $(RM) $(DEPEND_OBJS); ) ++else ++depend: ++ @echo "mmake needs the jikes compiler to build class dependencies" ++endif ++ ++ ++ ++# Doc target ++ifneq ($(strip $(JAVADOC_PACKAGES)),) ++doc: $(JAVA_SRC) ++ @echo "===> [Installing java documentation in $(DOC_DIR)] " ++ $(INSTALL_DIR) $(DOC_DIR) $(check-exit) ++ $(JAVADOC) $(JAVADOC_FLAGS) -d $(DOC_DIR) $(JAVADOC_PACKAGES) ++else ++doc: ++ @echo "You must put your source files in a package to run make doc" ++endif ++ ++ ++ ++# Script target ++ifneq ($(strip $(SCRIPT_OBJS)),) ++all:: $(SCRIPT_OBJS) ++ifneq ($(strip $(SCRIPT_DIR)),) ++install:: $(SCRIPT_OBJS) ++ @echo "===> [Installing shell-scripts in $(SCRIPT_DIR)] " ++ $(INSTALL_DIR) $(SCRIPT_DIR) $(check-exit) ++ $(foreach file, $(SCRIPT_OBJS), \ ++ $(INSTALL_PROG) $(file) $(SCRIPT_DIR) $(check-exit)) ++uninstall:: ++ @echo "===> [Removing shell-scripts from $(SCRIPT_DIR)] " ++ $(foreach file, $(SCRIPT_OBJS), \ ++ $(RM) $(SCRIPT_DIR)/$(file) $(check-exit)) ++else ++# Print a warning here if you like. (No script install dir defined) ++endif ++clean:: ++ rm -f $(SCRIPT_OBJS) ++endif ++ ++ ++ ++# Tag target ++tags: ++ @echo "Tagging" ++ $(ETAGS) $(filter-out $(XJAVA_OBJS), $(JAVA_SRC)) $(XJAVA_SRC) ++ ++ ++ ++# Various cleanup routines ++clean:: ++ $(FIND) . \( -name '*~' -o -name '*.class' \) -print | \ ++ $(XARGS) $(RM) ++ $(FIND) . -name '*.u' -print | $(XARGS) $(RM) ++ ++ifneq ($(strip $(XJAVA_SRC)),) ++clean:: ++ $(RM) $(XJAVA_OBJS) ++endif ++ ++# ---------------------------------------- ++# Include the dependency graph if it exist ++# ---------------------------------------- ++MAKEFILE_DEPEND = makefile.dep ++DEPEND = $(wildcard $(MAKEFILE_DEPEND)) ++ifneq ($(DEPEND),) ++ include $(MAKEFILE_DEPEND) ++endif ++ ++#package targets ++org : $(call PACKAGE_OBJS,org) ++org.sump : $(call PACKAGE_OBJS,org.sump) ++org.sump.analyzer.tools : $(call PACKAGE_OBJS,org.sump.analyzer.tools) ++org.sump.util : $(call PACKAGE_OBJS,org.sump.util) ++org.sump.analyzer : $(call PACKAGE_OBJS,org.sump.analyzer) ++ diff --git a/packages/logic-analyzer/files/cp-run-fix.patch b/packages/logic-analyzer/files/cp-run-fix.patch new file mode 100644 index 0000000000..401f3bb6e0 --- /dev/null +++ b/packages/logic-analyzer/files/cp-run-fix.patch @@ -0,0 +1,26 @@ +Index: LogicAnalyzer/client/org/sump/analyzer/Loader.java +=================================================================== +--- LogicAnalyzer.orig/client/org/sump/analyzer/Loader.java 2008-02-08 23:34:14.000000000 +0100 ++++ LogicAnalyzer/client/org/sump/analyzer/Loader.java 2008-02-08 23:46:40.000000000 +0100 +@@ -90,12 +90,19 @@ + } + } + +- try { +- SwingUtilities.invokeAndWait(w); ++// try { ++ ++ /* Constructing and running the GUI from withing the Swing thread ++ is right and nice but does not work in Classpath (yet): ++ */ ++// SwingUtilities.invokeAndWait(w); ++ w.run(); ++/* + } catch (Exception e) { + System.out.println("Error while invoking application: " + e.getMessage() + "\n"); + e.printStackTrace(); + System.exit(-1); + } ++*/ + } + } diff --git a/packages/logic-analyzer/logic-analyzer_0.8.bb b/packages/logic-analyzer/logic-analyzer_0.8.bb new file mode 100644 index 0000000000..ce691093fa --- /dev/null +++ b/packages/logic-analyzer/logic-analyzer_0.8.bb @@ -0,0 +1,38 @@ +DESCRIPTION = "A Java-based logical analyzer for home use." +LICENSE = "GPL" +MAINTAINER = "Robert Schuster, tarent GmbH Bonn " +HOMEPAGE = "http://sump.org/projects/analyzer/" + +inherit java + +DEPENDS = "rxtx" +RDEPENDS = "librxtx-java" + +SRC_URI = "\ + http://sump.org/projects/analyzer/downloads/la-src-${PV}.tar.bz2 \ + file://cp-run-fix.patch;patch=1 \ + file://client-makefile.patch;patch=1 \ + " + +S = "${WORKDIR}/LogicAnalyzer" + +do_compile() { + + oe_runmake -C client all jar \ + JAVAC_FLAGS="-sourcepath . -bootclasspath ${STAGING_DATADIR_NATIVE}/classpath/glibj.zip -classpath ${STAGING_DATADIR}/java/RXTXcomm.jar" + + oe_java_simple_wrapper org.sump.analyzer.Loader analyzer.jar RXTXcomm.jar +} + +do_install() { + oe_jarinstall client/analyzer.jar + + install -d ${D}${bindir} + install -m 0555 ${PN} ${D}${bindir} +} + +PACKAGES = "${PN}" + +FILES_${PN} = "${datadir_java}/analyzer.jar ${bindir}/${PN}" + +PACKAGE_ARCH = "all" diff --git a/packages/rxtx/.mtn2git_empty b/packages/rxtx/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/rxtx/files/.mtn2git_empty b/packages/rxtx/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/rxtx/files/rxtx-fixes-from-debian.patch b/packages/rxtx/files/rxtx-fixes-from-debian.patch new file mode 100644 index 0000000000..0e35eb7603 --- /dev/null +++ b/packages/rxtx/files/rxtx-fixes-from-debian.patch @@ -0,0 +1,235 @@ +Index: rxtx-2.1-7r2/configure +=================================================================== +--- rxtx-2.1-7r2.orig/configure 2008-02-09 02:08:40.000000000 +0100 ++++ rxtx-2.1-7r2/configure 2008-02-09 02:09:02.000000000 +0100 +@@ -21501,7 +21501,7 @@ + case $JAVA_VENDOR in + Tran*) + find_java_native_include jni.h +- JAVAH="\$(JPATH)/bin/kaffeh -classpath \$(CLASSPATH) -d \$(DEST) -jni" ++ JAVAH="\$(JPATH)/bin/kaffeh -classpath \$(JPATH)/jre/lib/rt.jar:\$(CLASSPATH) -d \$(DEST) -jni" + JAVAC="\$(JPATH)/bin/javac -classpath \$(CLASSPATH) -d \$(TOP)/ -O -source 1.3 -target 1.3" + JAR="\$(JPATH)/bin/jar" + JAVADOC="\$(JPATH)/bin/javadoc -classpath \$(CLASSPATH)" +@@ -21513,7 +21513,7 @@ + ;; + *) + find_java_native_include jni_md.h +- JAVAH="\$(JPATH)/bin/javah -classpath \$(CLASSPATH) -d \$(DEST) -jni" ++ JAVAH="\$(JPATH)/bin/javah -classpath \$(JPATH)/jre/lib/rt.jar:\$(CLASSPATH) -d \$(DEST) -jni" + JAVAC="\$(JPATH)/bin/javac -classpath \$(CLASSPATH) -d \$(TOP)/ -O -source 1.3 -target 1.3" + JAR="\$(JPATH)/bin/jar" + JAVADOC="\$(JPATH)/bin/javadoc" +@@ -21541,7 +21541,7 @@ + CFLAGS=$CFLAGS" -D__need_timespec" + case $JAVA_VERSION in + +- 1.2*|1.3*|1.4*|1.5*) ++ 1.2*|1.3*|1.4*|1.5*|1.6*) + #fix_parameters $JPATH/jre/lib/javax.comm.properties + CLASSPATH=".:\$(TOP):\$(TOP)/src:"`find $JPATH/ -name RXTXcomm.jar |head -n1` + JHOME=$JPATH"/jre/lib/ext" +@@ -21611,7 +21611,7 @@ + TARGETLIB="\$(target_triplet)/librxtxSerial.la \ + \$(target_triplet)/librxtxParallel.la" + case $JAVA_VERSION in +- 1.2*|1.3*|1.4*|1.5*) ++ 1.2*|1.3*|1.4*|1.5*|1.6*) + #fix_parameters $JPATH/jre/lib/javax.comm.properties + CLASSPATH=".:\$(TOP):\$(TOP)/src:"`find $JPATH/ -name RXTXcomm.jar |head -n1` + RXTX_PATH="\$(JPATH)/jre/lib/\$(OS_ARCH)" +@@ -21747,7 +21747,7 @@ + + WIN32) + case $JAVA_VERSION in +- 1.2*|1.3*|1.4*|1.5*) ++ 1.2*|1.3*|1.4*|1.5*|1.6*) + CLASSPATH=".:\$(TOP):\$(TOP)/src:`find $JPATH/ -name RXTXcomm.jar |head -n1`:$CLASSPATH" + JHOME=$JPATH"/jre/lib/ext" + ;; +@@ -21799,7 +21799,7 @@ + CLASSPATH=".:\$(TOP):\$(TOP)/src:\$(JPATH)/lib/classes.zip:\$(JPATH)/lib/RXTXcomm.jar:$CLASSPATH" + + case $JAVA_VERSION in +- 1.2*|1.3*|1.4*|1.5*) ++ 1.2*|1.3*|1.4*|1.5*|1.6*) + RXTX_PATH="\$(JPATH)/jre/lib/\$(OS_ARCH)" + ;; + 1.1*) +Index: rxtx-2.1-7r2/src/I2CImp.c +=================================================================== +--- rxtx-2.1-7r2.orig/src/I2CImp.c 2004-10-17 16:23:02.000000000 +0200 ++++ rxtx-2.1-7r2/src/I2CImp.c 2008-02-09 02:09:02.000000000 +0100 +@@ -22,8 +22,8 @@ + #include "config.h" + #include "gnu_io_I2C.h" + #endif /* dima */ +-#include + #include ++#include + #include + #include + #include +@@ -88,6 +88,7 @@ + #endif /* !__FreeBSD__ */ + #if defined(__linux__) + /* Lets let people who upgraded kernels know they may have problems */ ++ /* + if (uname (&name) == -1) + { + fprintf(stderr,"RXTX WARNING: cannot get system name\n"); +@@ -98,6 +99,7 @@ + fprintf(stderr, "\n\n\nRXTX WARNING: This library was compiled to run with OS release %s and you are currently running OS release %s. In some cases this can be a problem. Try recompiling RXTX if you notice strange behavior. If you just compiled RXTX make sure /usr/include/linux is a symbolic link to the include files that came with the kernel source and not an older copy.\n\n\npress enter to continue\n",UTS_RELEASE,name.release); + getchar(); + } ++ */ + #endif /* __linux__ */ + #endif /* WIN32 */ + } +Index: rxtx-2.1-7r2/Makefile.in +=================================================================== +--- rxtx-2.1-7r2.orig/Makefile.in 2008-02-09 02:08:40.000000000 +0100 ++++ rxtx-2.1-7r2/Makefile.in 2008-02-09 02:09:02.000000000 +0100 +@@ -556,6 +556,7 @@ + $(CLASSES): $(javafiles) $(TOP)/Makefile + $(JAVAH_FIX) + $(JAVAC) $(javafiles) ++ mkdir $(DEST) + $(JAVAH) `(for i in $(javahfiles);do \ + if grep > /dev/null native.*\( $(SPATH)/$$i.java; then \ + echo $(CLASSDIR).$$i; \ +@@ -572,7 +573,7 @@ + echo $$i; \ + fi; \ + done` $(RXTX_PATH) +- $(INSTALL_PROGRAM) $(JARTARGET) $(JHOME)/ ++ $(INSTALL_DATA) $(JARTARGET) $(JHOME)/ + + clean-generic: + rm -rf $(DEST) $(TOP)/$(CLASSTOP) +Index: rxtx-2.1-7r2/src/ParallelImp.c +=================================================================== +--- rxtx-2.1-7r2.orig/src/ParallelImp.c 2005-06-10 21:50:31.000000000 +0200 ++++ rxtx-2.1-7r2/src/ParallelImp.c 2008-02-09 02:09:02.000000000 +0100 +@@ -38,8 +38,8 @@ + /*#include */ + #include "gnu_io_LPRPort.h" + #endif /* dima */ +-#include + #include ++#include + #include + #include + #ifndef WIN32 +Index: rxtx-2.1-7r2/src/RawImp.c +=================================================================== +--- rxtx-2.1-7r2.orig/src/RawImp.c 2008-02-09 02:08:40.000000000 +0100 ++++ rxtx-2.1-7r2/src/RawImp.c 2008-02-09 02:09:02.000000000 +0100 +@@ -31,8 +31,8 @@ + #include "config.h" + #include "gnu_io_Raw.h" + #endif /* dima */ +-#include + #include ++#include + #include + #include + #include +@@ -232,6 +232,7 @@ + #endif /* !__FreeBSD__ */ + #if defined(__linux__) + /* Lets let people who upgraded kernels know they may have problems */ ++ /* + if (uname (&name) == -1) + { + fprintf(stderr,"RXTX WARNING: cannot get system name\n"); +@@ -242,6 +243,7 @@ + fprintf(stderr, "\n\n\nRXTX WARNING: This library was compiled to run with OS release %s and you are currently running OS release %s. In some cases this can be a problem. Try recompiling RXTX if you notice strange behavior. If you just compiled RXTX make sure /usr/include/linux is a symbolic link to the include files that came with the kernel source and not an older copy.\n\n\npress enter to continue\n",UTS_RELEASE,name.release); + getchar(); + } ++ */ + #endif /* __linux__ */ + #endif /* WIN32 */ + } +Index: rxtx-2.1-7r2/src/RS485Imp.c +=================================================================== +--- rxtx-2.1-7r2.orig/src/RS485Imp.c 2004-10-16 18:20:35.000000000 +0200 ++++ rxtx-2.1-7r2/src/RS485Imp.c 2008-02-09 02:09:02.000000000 +0100 +@@ -22,8 +22,8 @@ + #include "config.h" + #include "gnu_io_RS485.h" + #endif /* dima */ +-#include + #include ++#include + #include + #include + #include +@@ -88,6 +88,7 @@ + #endif /* !__FreeBSD__ */ + #if defined(__linux__) + /* Lets let people who upgraded kernels know they may have problems */ ++ /* + if (uname (&name) == -1) + { + fprintf(stderr,"RXTX WARNING: cannot get system name\n"); +@@ -98,6 +99,7 @@ + fprintf(stderr, "\n\n\nRXTX WARNING: This library was compiled to run with OS release %s and you are currently running OS release %s. In some cases this can be a problem. Try recompiling RXTX if you notice strange behavior. If you just compiled RXTX make sure /usr/include/linux is a symbolic link to the include files that came with the kernel source and not an older copy.\n\n\npress enter to continue\n",UTS_RELEASE,name.release); + getchar(); + } ++ */ + #endif /* __linux__ */ + #endif /* WIN32 */ + } +Index: rxtx-2.1-7r2/src/SerialImp.c +=================================================================== +--- rxtx-2.1-7r2.orig/src/SerialImp.c 2008-02-09 02:08:40.000000000 +0100 ++++ rxtx-2.1-7r2/src/SerialImp.c 2008-02-09 02:09:02.000000000 +0100 +@@ -27,10 +27,10 @@ + #ifdef __LCC__ /* windows lcc compiler for fd_set. probably wrong */ + # include + #endif /* __LCC__ */ +-#include + #include + #include + #include ++#include + #include + #include + #include +@@ -281,6 +281,7 @@ + #endif /* DEBUG_TIMING */ + #if defined(DEBUG) && defined(__linux__) + /* Lets let people who upgraded kernels know they may have problems */ ++ /* + if (uname (&name) == -1) + { + report( "RXTX WARNING: cannot get system name\n" ); +@@ -294,6 +295,7 @@ + report( message ); + getchar(); + } ++ */ + LEAVE( "RXTXPort:Initialize" ); + #endif /* DEBUG && __linux__ */ + } +Index: rxtx-2.1-7r2/src/SerialImp.cpp +=================================================================== +--- rxtx-2.1-7r2.orig/src/SerialImp.cpp 2004-10-12 10:59:27.000000000 +0200 ++++ rxtx-2.1-7r2/src/SerialImp.cpp 2008-02-09 02:09:02.000000000 +0100 +@@ -103,6 +103,7 @@ + #endif /* !__FreeBSD__ */ + #ifdef DEBUG + /* Lets let people who upgraded kernels know they may have problems */ ++ /* + if (uname (&name) == -1) + { + report("RXTX WARNING: cannot get system name\n"); +@@ -114,6 +115,7 @@ + name.release); + getchar(); + } ++ */ + #endif /* DEBUG */ + #endif /* __BEOS__ */ + #endif /* WIN32 */ diff --git a/packages/rxtx/rxtx_2.1-7r2.bb b/packages/rxtx/rxtx_2.1-7r2.bb new file mode 100644 index 0000000000..e91a406cfc --- /dev/null +++ b/packages/rxtx/rxtx_2.1-7r2.bb @@ -0,0 +1,31 @@ +DESCRIPTION = "RXTX provides serial and parallel communication for Java applications" +LICENSE = "LGPL" +SECTION = "libs" +MAINTAINER = "Robert Schuster, tarent GmbH Bonn " +HOMEPAGE = "http://rxtx.org" + +inherit autotools java-library + +SRC_URI = "\ + http://rxtx.qbang.org/pub/rxtx/${PN}-${PV}.zip \ + file://rxtx-fixes-from-debian.patch;patch=1 \ + " + +do_install() { + install -d ${D}/${libdir_jni} + install -d ${D}/${datadir_java} + + oe_runmake install \ + RXTX_PATH=${D}/${libdir_jni} \ + JHOME=${D}/${datadir_java} +} + +do_stage() { + oe_jarinstall -s RXTXcomm.jar +} + +PACKAGES = "${JPN} lib${PN}-jni lib${PN}-dev lib${PN}-jni-dbg" + +FILES_lib${PN}-jni = "${libdir_jni}/lib*.so" +FILES_lib${PN}-dev = "${libdir_jni}/lib*.la" +FILES_lib${PN}-jni-dbg = "${libdir_jni}/.debug/lib*.so" -- cgit v1.2.3 From d444ca375061d1fa88566455932c0644715c6fa4 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sat, 9 Feb 2008 03:14:56 +0000 Subject: jamvm: Added support for variable JNI path. --- packages/jamvm/files/debian-jni.patch | 19 +++++++++++++++++++ packages/jamvm/jamvm.inc | 2 +- packages/jamvm/jamvm_1.5.0.bb | 9 ++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 packages/jamvm/files/debian-jni.patch diff --git a/packages/jamvm/files/debian-jni.patch b/packages/jamvm/files/debian-jni.patch new file mode 100644 index 0000000000..040163da69 --- /dev/null +++ b/packages/jamvm/files/debian-jni.patch @@ -0,0 +1,19 @@ +--- src/dll.c.orig 2004-09-09 15:48:45.000000000 +0000 ++++ src/dll.c 2004-09-09 15:50:32.000000000 +0000 +@@ -189,6 +189,16 @@ + #ifndef NO_JNI + /* Init hash table, and create lock */ + initHashTable(hash_table, HASHTABSZE, TRUE); ++ ++ /* XXX: Add Debian JNI directory. */ ++ char* path = getenv("LD_LIBRARY_PATH"); ++ ++ if (path != NULL) ++ path = strcat(path, ":OE_LIBDIR_JNI"); ++ else ++ path = "OE_LIBDIR_JNI"; ++ ++ setenv("LD_LIBRARY_PATH", path, 1); + #endif + } + diff --git a/packages/jamvm/jamvm.inc b/packages/jamvm/jamvm.inc index 36378370c5..930159e891 100644 --- a/packages/jamvm/jamvm.inc +++ b/packages/jamvm/jamvm.inc @@ -12,7 +12,7 @@ RPROVIDES_jamvm = "java2-runtime" # This uses 32 bit arm, so force the instruction set to arm, not thumb ARM_INSTRUCTION_SET = "arm" -inherit autotools update-alternatives +inherit java autotools update-alternatives EXTRA_OECONF = "--with-classpath-install-dir=${prefix}" CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB" diff --git a/packages/jamvm/jamvm_1.5.0.bb b/packages/jamvm/jamvm_1.5.0.bb index efa959f0f9..366658dd97 100644 --- a/packages/jamvm/jamvm_1.5.0.bb +++ b/packages/jamvm/jamvm_1.5.0.bb @@ -1,5 +1,12 @@ require jamvm.inc -PR = "r0" +SRC_URI += "file://debian-jni.patch;patch=1;pnum=0" +PR = "r1" + +do_configure_prepend() { + # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory + # configured in OE. + sed -i -e "s|OE_LIBDIR_JNI|${libdir_jni}|" src/dll.c +} -- cgit v1.2.3 From 30b74026cb0873872a709f1b35e1eecd6cec0c50 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sat, 9 Feb 2008 03:16:38 +0000 Subject: cacao: Use ${libdir_jni} instead of ${libdir}/jni --- packages/cacao/cacao.inc | 6 +++--- packages/cacao/cacao_0.98+hg20071001.bb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/cacao/cacao.inc b/packages/cacao/cacao.inc index 09fc741579..0d2b4c7ae1 100644 --- a/packages/cacao/cacao.inc +++ b/packages/cacao/cacao.inc @@ -13,7 +13,7 @@ RDEPENDS = "classpath" PROVIDES = "cacao virtual/java" RPROVIDES_cacao = "java2-runtime" -inherit autotools update-alternatives +inherit java autotools update-alternatives EXTRA_OECONF = "\ ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \ @@ -41,11 +41,11 @@ do_configure_prepend() { # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory # configured in OE. if [ -e src/vm/properties.c ]; then - sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/properties.c + sed -i -e "s|OE_LIBDIR_JNI|${libdir_jni}|" src/vm/properties.c fi if [ -e src/vm/properties.c ]; then - sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/vm.c + sed -i -e "s|OE_LIBDIR_JNI|${libdir_jni}|" src/vm/vm.c fi } diff --git a/packages/cacao/cacao_0.98+hg20071001.bb b/packages/cacao/cacao_0.98+hg20071001.bb index 94919ad24a..878827c28e 100644 --- a/packages/cacao/cacao_0.98+hg20071001.bb +++ b/packages/cacao/cacao_0.98+hg20071001.bb @@ -1,6 +1,6 @@ require cacao.inc -PR = "r7" +PR = "r8" SRC_URI = "\ http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518 \ -- cgit v1.2.3 From e6fe7d02c06ed81dab8e843d22d7510b8bdfeeea Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Sat, 9 Feb 2008 08:29:44 +0000 Subject: dcopidl*-native: fix unfetchable svn, close oebug 3067 * use stable ftp, adds a little overhead on download though --- packages/dcop/dcopidl-native_3.5.4.bb | 4 ++-- packages/dcop/dcopidl2cpp-native_3.5.4.bb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/dcop/dcopidl-native_3.5.4.bb b/packages/dcop/dcopidl-native_3.5.4.bb index 5f47effd24..62abe88bac 100644 --- a/packages/dcop/dcopidl-native_3.5.4.bb +++ b/packages/dcop/dcopidl-native_3.5.4.bb @@ -4,9 +4,9 @@ PRIORITY = "optional" LICENSE = "GPL" DEPENDS = "uicmoc3-native" -SRC_URI = "svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/kdelibs/dcop/;module=dcopidl \ +SRC_URI = "ftp://download.kde.org/pub/kde/stable/3.5.4/src/kdelibs-3.5.4.tar.bz2 \ file://dcopidl-compile.patch;patch=1 " -S = "${WORKDIR}/dcopidl" +S = "${WORKDIR}/kdelibs-3.5.4/dcop/dcopidl" inherit native qmake qt3e diff --git a/packages/dcop/dcopidl2cpp-native_3.5.4.bb b/packages/dcop/dcopidl2cpp-native_3.5.4.bb index 2b5cd126d7..d7a1c6e338 100644 --- a/packages/dcop/dcopidl2cpp-native_3.5.4.bb +++ b/packages/dcop/dcopidl2cpp-native_3.5.4.bb @@ -4,10 +4,10 @@ PRIORITY = "optional" LICENSE = "GPL" DEPENDS = "uicmoc3-native" -SRC_URI = "svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/kdelibs/dcop/;module=dcopidl2cpp " +SRC_URI = "ftp://download.kde.org/pub/kde/stable/3.5.4/src/kdelibs-3.5.4.tar.bz2 " #\ # file://dcopidl-compile.patch;patch=1 " -S = "${WORKDIR}/dcopidl2cpp" +S = "${WORKDIR}/kdelibs-3.5.4/dcop/dcopidl2cpp" inherit native qmake qt3e -- cgit v1.2.3 From f9bddb5b33d01ef9528acd2185396f8f61711913 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 9 Feb 2008 09:32:19 +0000 Subject: contrib/angstrom/rss2.php: Add date of build to subject. * To help with simple-minded browsers which don't show pubDate (like Firefox). * Per RFC on the list. --- contrib/angstrom/rss2.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/angstrom/rss2.php b/contrib/angstrom/rss2.php index 995c344e14..2e1f49c4cc 100644 --- a/contrib/angstrom/rss2.php +++ b/contrib/angstrom/rss2.php @@ -47,7 +47,7 @@ foreach($builder_log_date as $build) $data = explode(' ', $build); $rss_xml->startElement('item'); - $rss_xml->writeElement('title', "{$data[1]} ({$data[2]}) built for {$data[3]}"); + $rss_xml->writeElement('title', "{$data[1]} ({$data[2]}) built for {$data[3]} (" . date('c', $data[0]) . ")"); $rss_xml->writeElement('link', "{$build_link_base}{$data[3]}/"); $rss_xml->writeElement('pubDate', date('r', $data[0])); -- cgit v1.2.3 From 570e63a2f80ccff168d0ab9fd23dc7ed7aa411e3 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 9 Feb 2008 09:35:06 +0000 Subject: contrib/angstrom/rss*.php: Drop old non-optimal version, rename rss2 to rss. * Per RFC on the list. --- contrib/angstrom/rss.php | 87 +++++++++++++++++++++++++++-------------------- contrib/angstrom/rss2.php | 63 ---------------------------------- 2 files changed, 51 insertions(+), 99 deletions(-) delete mode 100644 contrib/angstrom/rss2.php diff --git a/contrib/angstrom/rss.php b/contrib/angstrom/rss.php index cf5a9e0218..2e1f49c4cc 100644 --- a/contrib/angstrom/rss.php +++ b/contrib/angstrom/rss.php @@ -1,48 +1,63 @@ -'); ?> - - - Ångström autobuilder updates - http://www.angstrom-distribution.org/unstable/autobuild/ - - en openMemory(); - echo "\n" - echo "$file/$file2 uploaded\n"; - echo " http://www.angstrom-distribution.org/unstable/autobuild/$file/$file2\n"; +$rss_xml->startDocument('1.0','utf-8'); +$rss_xml->startElement('rss'); +$rss_xml->writeAttribute('version', '2.0'); - $rsstime = strftime("%a, %d %b %Y %T +0100", $fmtime); +$rss_xml->startElement('channel'); - echo "$rsstime\n"; - echo "Angstrom autobuilder"; - echo "\n"; - } - } +$rss_xml->writeElement('title', 'Ångström autobuilder updates'); +$rss_xml->writeElement('link', $build_link_base); +$rss_xml->writeElement('description', 'Ångström autobuilder updates list'); - closedir($second_handle); - } +foreach($builder_log_date as $build) +{ + $build = str_replace("\n", "", $build); + $data = explode(' ', $build); + + $rss_xml->startElement('item'); + $rss_xml->writeElement('title', "{$data[1]} ({$data[2]}) built for {$data[3]} (" . date('c', $data[0]) . ")"); + $rss_xml->writeElement('link', "{$build_link_base}{$data[3]}/"); + $rss_xml->writeElement('pubDate', date('r', $data[0])); - closedir($handle); + $rss_xml->endElement(); } + +$rss_xml->endElement(); +$rss_xml->endElement(); + +echo $rss_xml->outputMemory(true); + +echo "\n"; ?> - - diff --git a/contrib/angstrom/rss2.php b/contrib/angstrom/rss2.php deleted file mode 100644 index 2e1f49c4cc..0000000000 --- a/contrib/angstrom/rss2.php +++ /dev/null @@ -1,63 +0,0 @@ -openMemory(); - -$rss_xml->startDocument('1.0','utf-8'); -$rss_xml->startElement('rss'); -$rss_xml->writeAttribute('version', '2.0'); - -$rss_xml->startElement('channel'); - -$rss_xml->writeElement('title', 'Ångström autobuilder updates'); -$rss_xml->writeElement('link', $build_link_base); -$rss_xml->writeElement('description', 'Ångström autobuilder updates list'); - -foreach($builder_log_date as $build) -{ - $build = str_replace("\n", "", $build); - $data = explode(' ', $build); - - $rss_xml->startElement('item'); - $rss_xml->writeElement('title', "{$data[1]} ({$data[2]}) built for {$data[3]} (" . date('c', $data[0]) . ")"); - $rss_xml->writeElement('link', "{$build_link_base}{$data[3]}/"); - $rss_xml->writeElement('pubDate', date('r', $data[0])); - - $rss_xml->endElement(); -} - -$rss_xml->endElement(); -$rss_xml->endElement(); - -echo $rss_xml->outputMemory(true); - -echo "\n"; -?> -- cgit v1.2.3 From 8e13dfb9841fbb03049e121ee786f47fa6b66f58 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 9 Feb 2008 11:50:53 +0000 Subject: enna cvs taglibc is gone, adjust DEPENDS --- packages/e17/enna_cvs.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e17/enna_cvs.bb b/packages/e17/enna_cvs.bb index 3ea77940b4..4f50b118f3 100644 --- a/packages/e17/enna_cvs.bb +++ b/packages/e17/enna_cvs.bb @@ -1,7 +1,7 @@ DESCRIPTION = "Enna is a media center application based on EFL" LICENSE = "GPL" DEPENDS = "curl dbus eet evas edje ecore edbus emotion" -DEPENDS += "libmusicbrainz lightmediascanner libxml2 taglibc" +DEPENDS += "libmusicbrainz lightmediascanner libxml2 taglib" SECTION = "x11/multimedia" PV = "0.2.0+cvs${SRCDATE}" -- cgit v1.2.3 From 7e682b8378c21d146d2faa8b52447f4a3aefb224 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 9 Feb 2008 11:56:21 +0000 Subject: taglib 1.4 fix packaging, fix buildsystem (thanks to debian patch), remove taglibc --- packages/taglib/files/.mtn2git_empty | 0 packages/taglib/files/taglib_1.4-8.diff.gz | Bin 0 -> 74973 bytes packages/taglib/taglib_1.4.bb | 43 +++++++++-------------------- packages/taglib/taglibc_1.4.bb | 33 ---------------------- 4 files changed, 13 insertions(+), 63 deletions(-) create mode 100644 packages/taglib/files/.mtn2git_empty create mode 100644 packages/taglib/files/taglib_1.4-8.diff.gz delete mode 100644 packages/taglib/taglibc_1.4.bb diff --git a/packages/taglib/files/.mtn2git_empty b/packages/taglib/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/taglib/files/taglib_1.4-8.diff.gz b/packages/taglib/files/taglib_1.4-8.diff.gz new file mode 100644 index 0000000000..f128f4d3de Binary files /dev/null and b/packages/taglib/files/taglib_1.4-8.diff.gz differ diff --git a/packages/taglib/taglib_1.4.bb b/packages/taglib/taglib_1.4.bb index 43fb2a2bfa..e50eeb6490 100644 --- a/packages/taglib/taglib_1.4.bb +++ b/packages/taglib/taglib_1.4.bb @@ -1,41 +1,24 @@ DESCRIPTION = "TagLib is a library for reading and editing the meta-data of several popular audio formats" -SECTION = "libs" +SECTION = "libs/multimedia" HOMEPAGE = "http://developer.kde.org/~wheeler/taglib.html" LICENSE = "LGPL" -PR = "r1" +PR = "r2" -SRC_URI = "http://developer.kde.org/~wheeler/files/src/taglib-${PV}.tar.gz" +SRC_URI = "http://developer.kde.org/~wheeler/files/src/taglib-${PV}.tar.gz \ + file://taglib_1.4-8.diff.gz;patch=1" S = "${WORKDIR}/taglib-${PV}" -inherit autotools qmake_base pkgconfig binconfig +inherit autotools pkgconfig binconfig -export OE_QMAKE_LINK="${CXX}" - -do_configure() { - # calling oe_runconf to generate pkgconfig and binconfig files - oe_runconf - cd ${S}/taglib && rm -f Makefile* && qmake -project -o tag.pro -t lib && \ - qmake -spec ${QMAKESPEC} -after CONFIG=console INCLUDEPATH+=${S} -} - -do_compile() { - oe_runmake -C taglib +do_postpatch() { + rm -rf patches && rm -rf .pc && mv -f debian/patches patches && quilt push -av } +addtask postpatch after do_patch before do_configure -do_stage_append() { - install -d ${STAGING_INCDIR}/taglib - for i in `find taglib -name "*.h"` - do - install $i ${STAGING_INCDIR}/taglib/ - done - for i in `find taglib -name "*.tcc"` - do - install $i ${STAGING_INCDIR}/taglib/ - done - oe_libinstall -so -C taglib libtag ${STAGING_LIBDIR} +do_stage() { + autotools_stage_all } -do_install() { - install -d ${D}${libdir} - oe_libinstall -so -C taglib libtag ${D}${libdir} -} +PACKAGES =+ "${PN}-c" +FILES_${PN}-dbg += "${bindir}/taglib-config" +FILES_${PN}-c = "${libdir}/libtag_c.so.*" diff --git a/packages/taglib/taglibc_1.4.bb b/packages/taglib/taglibc_1.4.bb deleted file mode 100644 index 1a3a702bb9..0000000000 --- a/packages/taglib/taglibc_1.4.bb +++ /dev/null @@ -1,33 +0,0 @@ -DESCRIPTION = "TagLib is a library for reading and editing the meta-data \ -of several popular audio formats. Currently it supports both ID3v1 and ID3v2 \ -for MP3 files, Ogg Vorbis comments and ID3 tags and Vorbis comments in FLAC files" -SECTION = "libs" -HOMEPAGE = "http://developer.kde.org/~wheeler/taglib.html" -DEPENDS = "taglib" -LICENSE = "LGPL" - -SRC_URI = "http://developer.kde.org/~wheeler/files/src/taglib-${PV}.tar.gz" -S = "${WORKDIR}/taglib-${PV}" - -inherit autotools qmake_base pkgconfig binconfig - -do_configure() { - echo running oe_runconf to get pkgconfig and binconfig files created - oe_runconf - cd ${S}/bindings/c && rm -f Makefile* && qmake -project -o tag_c.pro -t lib && \ - qmake -spec ${QMAKESPEC} -after CONFIG=console INCLUDEPATH+=${STAGING_INCDIR}/taglib LIBS+=-ltag -} - -do_compile() { - oe_runmake -C bindings/c -} - -do_stage_append() { - install -d ${STAGING_INCDIR}/taglib - install -m 0644 bindings/c/tag_c.h ${STAGING_INCDIR} - oe_libinstall -so -C bindings/c libtag_c ${STAGING_LIBDIR} -} - -do_install() { - oe_libinstall -so -C bindings/c libtag_c ${D}${libdir} -} -- cgit v1.2.3 From 9952faf40541ec37f139ea6707e9cd5ed90c7ee9 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 9 Feb 2008 12:04:05 +0000 Subject: libmusicbrainz 2.1.4 does not build, superseded by 2.1.5 anyways --- packages/musicbrainz/libmusicbrainz_2.1.4.bb | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 packages/musicbrainz/libmusicbrainz_2.1.4.bb diff --git a/packages/musicbrainz/libmusicbrainz_2.1.4.bb b/packages/musicbrainz/libmusicbrainz_2.1.4.bb deleted file mode 100644 index 7ab0997218..0000000000 --- a/packages/musicbrainz/libmusicbrainz_2.1.4.bb +++ /dev/null @@ -1,13 +0,0 @@ -DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs. \ -It allows you to access the data held on the MusicBrainz server." -HOMEPAGE = "http://musicbrainz.org" -LICENSE = "LGPL" -DEPENDS = "expat" - -SRC_URI = "http://ftp.musicbrainz.org/pub/musicbrainz/libmusicbrainz-${PV}.tar.gz" - -inherit autotools pkgconfig - -do_stage() { - autotools_stage_all -} -- cgit v1.2.3 From afd00a1c0b075a54a9ea806c45695282c18eaa89 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 9 Feb 2008 12:20:02 +0000 Subject: poppler: add 0.6.4, remove some intermediate versions --- packages/poppler/poppler_0.5.4.bb | 2 -- packages/poppler/poppler_0.6.2.bb | 6 ------ packages/poppler/poppler_0.6.4.bb | 6 ++++++ packages/poppler/poppler_0.6.bb | 6 ------ 4 files changed, 6 insertions(+), 14 deletions(-) delete mode 100644 packages/poppler/poppler_0.5.4.bb delete mode 100644 packages/poppler/poppler_0.6.2.bb create mode 100644 packages/poppler/poppler_0.6.4.bb delete mode 100644 packages/poppler/poppler_0.6.bb diff --git a/packages/poppler/poppler_0.5.4.bb b/packages/poppler/poppler_0.5.4.bb deleted file mode 100644 index 754eccf435..0000000000 --- a/packages/poppler/poppler_0.5.4.bb +++ /dev/null @@ -1,2 +0,0 @@ -require poppler.inc -PR = "r3" diff --git a/packages/poppler/poppler_0.6.2.bb b/packages/poppler/poppler_0.6.2.bb deleted file mode 100644 index 3c1ec00183..0000000000 --- a/packages/poppler/poppler_0.6.2.bb +++ /dev/null @@ -1,6 +0,0 @@ -require poppler.inc - -PR = "r0" - -EXTRA_OECONF_append = " --disable-abiword-output " - diff --git a/packages/poppler/poppler_0.6.4.bb b/packages/poppler/poppler_0.6.4.bb new file mode 100644 index 0000000000..3c1ec00183 --- /dev/null +++ b/packages/poppler/poppler_0.6.4.bb @@ -0,0 +1,6 @@ +require poppler.inc + +PR = "r0" + +EXTRA_OECONF_append = " --disable-abiword-output " + diff --git a/packages/poppler/poppler_0.6.bb b/packages/poppler/poppler_0.6.bb deleted file mode 100644 index 3c1ec00183..0000000000 --- a/packages/poppler/poppler_0.6.bb +++ /dev/null @@ -1,6 +0,0 @@ -require poppler.inc - -PR = "r0" - -EXTRA_OECONF_append = " --disable-abiword-output " - -- cgit v1.2.3 From 45e943b2847802ed8600ad471b870e7a732f6a78 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 9 Feb 2008 12:23:53 +0000 Subject: conf/machine/: Add jffs2 as default image for embedded boards and vendor machines. * Based on the list provided by Richard Purdie, skipping devices (pocketpc and palms), ports of which are completely generic and jffs2 is completely not a better choice than any other. --- conf/machine/at32stk1000.conf | 1 + conf/machine/at91sam9260ek.conf | 1 + conf/machine/at91sam9261ek.conf | 1 + conf/machine/at91sam9263ek.conf | 2 +- conf/machine/bd-neon.conf | 1 + conf/machine/fic-gta01.conf | 1 + conf/machine/gesbc-9302.conf | 1 + conf/machine/include/motorola-ezx-base.inc | 1 + conf/machine/omap1510inn.conf | 1 + conf/machine/omap1610h2.conf | 1 + conf/machine/omap1710h3.conf | 1 + conf/machine/omap2420h4.conf | 1 + conf/machine/omap2430sdp.conf | 1 + conf/machine/omap5912osk.conf | 1 + conf/machine/shark.conf | 1 + conf/machine/triton.conf | 1 + conf/machine/xxs1500.conf | 1 + 17 files changed, 17 insertions(+), 1 deletion(-) diff --git a/conf/machine/at32stk1000.conf b/conf/machine/at32stk1000.conf index 4c3112df78..add4c7e2d9 100644 --- a/conf/machine/at32stk1000.conf +++ b/conf/machine/at32stk1000.conf @@ -17,6 +17,7 @@ MACHINE_FEATURES = "kernel26 alsa ext2 usbgadget touchscreen screen" SERIAL_CONSOLE = "115200" # used by some images +IMAGE_FSTYPES ?= "jffs2" ROOT_FLASH_SIZE = "8" EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536" diff --git a/conf/machine/at91sam9260ek.conf b/conf/machine/at91sam9260ek.conf index 07616915aa..ba0c9f9a70 100644 --- a/conf/machine/at91sam9260ek.conf +++ b/conf/machine/at91sam9260ek.conf @@ -17,6 +17,7 @@ MACHINE_FEATURES = "kernel26 alsa ext2 usbhost usbgadget" # used by sysvinit_2 SERIAL_CONSOLE = "115200 ttyS0" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" require conf/machine/include/tune-arm926ejs.inc diff --git a/conf/machine/at91sam9261ek.conf b/conf/machine/at91sam9261ek.conf index b6ccd7ef0d..3b9d5188f6 100644 --- a/conf/machine/at91sam9261ek.conf +++ b/conf/machine/at91sam9261ek.conf @@ -17,6 +17,7 @@ MACHINE_FEATURES = "kernel26 alsa ext2 usbhost usbgadget screen touchscreen" # used by sysvinit_2 SERIAL_CONSOLE = "115200 ttyS0" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" require conf/machine/include/tune-arm926ejs.inc diff --git a/conf/machine/at91sam9263ek.conf b/conf/machine/at91sam9263ek.conf index bf45d25c43..95c7626a63 100644 --- a/conf/machine/at91sam9263ek.conf +++ b/conf/machine/at91sam9263ek.conf @@ -15,7 +15,7 @@ MACHINE_FEATURES = "kernel26 alsa ext2 usbhost usbgadget screen" # used by sysvinit_2 SERIAL_CONSOLE = "115200 ttyS0" - +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" require conf/machine/include/tune-arm926ejs.inc diff --git a/conf/machine/bd-neon.conf b/conf/machine/bd-neon.conf index 532193a567..f875d437c7 100644 --- a/conf/machine/bd-neon.conf +++ b/conf/machine/bd-neon.conf @@ -41,6 +41,7 @@ MACHINE_EXTRA_RRECOMMENDS = " kernel-modules kernel-module-nls-cp437 \ kernel-module-af-key \ kernel-module-i2c-pxa" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 -n" EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x40000 --pad=32243712; sumtool -i ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \ -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs-summary.jffs2 \ diff --git a/conf/machine/fic-gta01.conf b/conf/machine/fic-gta01.conf index ad0c64bef2..bfaf5ed793 100644 --- a/conf/machine/fic-gta01.conf +++ b/conf/machine/fic-gta01.conf @@ -36,6 +36,7 @@ MACHINE_EXTRA_RRECOMMENDS = "\ ROOT_FLASH_SIZE = "60" # extra jffs2 tweaks +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x4000 --pad -n" # build / upload tools diff --git a/conf/machine/gesbc-9302.conf b/conf/machine/gesbc-9302.conf index af64a31d8b..ac4c1ef4b6 100644 --- a/conf/machine/gesbc-9302.conf +++ b/conf/machine/gesbc-9302.conf @@ -19,6 +19,7 @@ SERIAL_CONSOLE = "57600 ttyAM0" # used by some images ROOT_FLASH_SIZE = "8" #extra jffs2 tweaks +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--eraseblock=0x40000 --pad=0x500000 " #tune for ep93xx cpus diff --git a/conf/machine/include/motorola-ezx-base.inc b/conf/machine/include/motorola-ezx-base.inc index da88b1494f..a9945acd34 100644 --- a/conf/machine/include/motorola-ezx-base.inc +++ b/conf/machine/include/motorola-ezx-base.inc @@ -22,6 +22,7 @@ MACHINE_DISPLAY_PPI = "180" ROOT_FLASH_SIZE = "24" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad=14680064 --little-endian --eraseblock=0x20000 -n" EXTRA_IMAGEDEPENDS += "ezx-boot-usb-native" diff --git a/conf/machine/omap1510inn.conf b/conf/machine/omap1510inn.conf index 3dc19a4a31..ffec67b699 100644 --- a/conf/machine/omap1510inn.conf +++ b/conf/machine/omap1510inn.conf @@ -12,6 +12,7 @@ PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}depmod:module-init-tools-cross" BOOTSTRAP_EXTRA_RDEPENDS += "modutils-collateral" SERIAL_CONSOLE ?= "115200 ttyS0" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x40000" require conf/machine/include/tune-arm926ejs.inc diff --git a/conf/machine/omap1610h2.conf b/conf/machine/omap1610h2.conf index 3dc19a4a31..ffec67b699 100644 --- a/conf/machine/omap1610h2.conf +++ b/conf/machine/omap1610h2.conf @@ -12,6 +12,7 @@ PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}depmod:module-init-tools-cross" BOOTSTRAP_EXTRA_RDEPENDS += "modutils-collateral" SERIAL_CONSOLE ?= "115200 ttyS0" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x40000" require conf/machine/include/tune-arm926ejs.inc diff --git a/conf/machine/omap1710h3.conf b/conf/machine/omap1710h3.conf index 9a97150981..98e3a7d3e5 100644 --- a/conf/machine/omap1710h3.conf +++ b/conf/machine/omap1710h3.conf @@ -12,6 +12,7 @@ PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}depmod:module-init-tools-cross" BOOTSTRAP_EXTRA_RDEPENDS += "modutils-collateral" SERIAL_CONSOLE ?= "115200 ttyS0" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x40000" require conf/machine/include/tune-arm926ejs.inc diff --git a/conf/machine/omap2420h4.conf b/conf/machine/omap2420h4.conf index 82be4e3f79..343b0091b5 100644 --- a/conf/machine/omap2420h4.conf +++ b/conf/machine/omap2420h4.conf @@ -9,6 +9,7 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-omap2" PREFERRED_VERSION_u-boot = "1.1.4" SERIAL_CONSOLE ?= "115200 ttyS0" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x40000" MACHINE_FEATURES = "kernel26" diff --git a/conf/machine/omap2430sdp.conf b/conf/machine/omap2430sdp.conf index 39e6896b3b..0e6b646897 100644 --- a/conf/machine/omap2430sdp.conf +++ b/conf/machine/omap2430sdp.conf @@ -9,6 +9,7 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-omap2" PREFERRED_VERSION_u-boot = "1.1.4" SERIAL_CONSOLE ?= "115200 ttyS0" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x40000" MACHINE_FEATURES = "kernel26" diff --git a/conf/machine/omap5912osk.conf b/conf/machine/omap5912osk.conf index abd50b116a..7a7b5c1a60 100644 --- a/conf/machine/omap5912osk.conf +++ b/conf/machine/omap5912osk.conf @@ -11,6 +11,7 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-omap1" # PREFERRED_VERSION_u-boot = "1.1.6" SERIAL_CONSOLE ?= "115200 ttyS0" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" ROOT_FLASH_SIZE = "29" diff --git a/conf/machine/shark.conf b/conf/machine/shark.conf index d7d35cfda1..3b9165d2b8 100644 --- a/conf/machine/shark.conf +++ b/conf/machine/shark.conf @@ -8,6 +8,7 @@ TARGET_ARCH = "arm" PREFERRED_PROVIDER_xserver = "xserver-kdrive" PREFERRED_PROVIDER_virtual/kernel = "linux-z" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 -n" EXTRA_IMAGEDEPENDS = "" SERIAL_CONSOLE = "ttySA0 115200 vt100" diff --git a/conf/machine/triton.conf b/conf/machine/triton.conf index 2dbe3ea863..0275f6b2f5 100644 --- a/conf/machine/triton.conf +++ b/conf/machine/triton.conf @@ -8,6 +8,7 @@ PREFERRED_PROVIDER_virtual/kernel = "triton-kernel" BOOTSTRAP_EXTRA_RDEPENDS = "virtual/kernel" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad=0x1dc0000 --little-endian --eraseblock=0x40000 -n" EXTRA_IMAGEDEPENDS = "" SERIAL_CONSOLE = "38400 ttyS0" diff --git a/conf/machine/xxs1500.conf b/conf/machine/xxs1500.conf index 9cc47cdef7..4d5909126a 100644 --- a/conf/machine/xxs1500.conf +++ b/conf/machine/xxs1500.conf @@ -8,6 +8,7 @@ TARGET_ARCH = "mipsel" PREFERRED_PROVIDER_virtual/kernel = "linux-xxs1500" +IMAGE_FSTYPES ?= "jffs2" EXTRA_IMAGECMD_jffs2 = "--pad=0xa00000 --little-endian --eraseblock=0x20000 -n" # does not gain any speed and just creates problems: -- cgit v1.2.3 From 3afdbd34370351cb3833ee3e70799517ce9e9d41 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 9 Feb 2008 12:25:44 +0000 Subject: ecore cvs remove patches that have been upstreamed for a while now --- packages/efl1/ecore/configure.patch | 23 -------------- .../efl1/ecore/ecore_kernel_input_header.patch | 23 -------------- packages/efl1/ecore/fix-tslib-configure.patch | 19 ------------ packages/efl1/ecore/remove-bad-code.patch | 36 ---------------------- 4 files changed, 101 deletions(-) delete mode 100644 packages/efl1/ecore/configure.patch delete mode 100644 packages/efl1/ecore/ecore_kernel_input_header.patch delete mode 100644 packages/efl1/ecore/fix-tslib-configure.patch delete mode 100644 packages/efl1/ecore/remove-bad-code.patch diff --git a/packages/efl1/ecore/configure.patch b/packages/efl1/ecore/configure.patch deleted file mode 100644 index 9939bd9d34..0000000000 --- a/packages/efl1/ecore/configure.patch +++ /dev/null @@ -1,23 +0,0 @@ -Index: ecore/configure.in -=================================================================== ---- ecore.orig/configure.in 2007-08-20 17:21:13.000000000 +0000 -+++ ecore/configure.in 2007-08-20 17:23:31.000000000 +0000 -@@ -16,7 +16,6 @@ - AC_CHECK_SIZEOF(long, 4) - AM_ENABLE_SHARED - AM_PROG_LIBTOOL --AC_C___ATTRIBUTE__ - - if test "x${bindir}" = 'xNONE'; then - if test "x${prefix}" = "xNONE"; then -@@ -238,9 +237,7 @@ - AC_CHECK_HEADER(X11/X.h, - [ - have_x="yes" -- x_dir=${x_dir:-/usr/X11R6} -- x_cflags=${x_cflags:--I${x_includes:-$x_dir/include}} -- x_libs="${x_libs:--L${x_libraries:-$x_dir/lib}} -lX11 -lXext" -+ x_libs="${x_libs} -lX11 -lXext" - ] - ) - diff --git a/packages/efl1/ecore/ecore_kernel_input_header.patch b/packages/efl1/ecore/ecore_kernel_input_header.patch deleted file mode 100644 index 99f57ddcff..0000000000 --- a/packages/efl1/ecore/ecore_kernel_input_header.patch +++ /dev/null @@ -1,23 +0,0 @@ -Index: ecore-0.9.9.036/src/lib/ecore_fb/ecore_fb_li.c -=================================================================== ---- ecore-0.9.9.036.orig/src/lib/ecore_fb/ecore_fb_li.c 2006-09-05 01:36:43.000000000 +0100 -+++ ecore-0.9.9.036/src/lib/ecore_fb/ecore_fb_li.c 2006-12-02 21:55:54.000000000 +0000 -@@ -1,6 +1,18 @@ - #include "Ecore_Fb.h" - #include "ecore_fb_private.h" - -+struct input_absinfo { -+ __s32 value; -+ __s32 minimum; -+ __s32 maximum; -+ __s32 fuzz; -+ __s32 flat; -+}; -+ -+ -+#define EV_SYN 0x00 -+#define EV_PWR 0x16 -+#define EV_FF_STATUS 0x17 - - /* Copyright (C) Brad Hards (1999-2002). - * this macro is used to tell if "bit" is set in "array" diff --git a/packages/efl1/ecore/fix-tslib-configure.patch b/packages/efl1/ecore/fix-tslib-configure.patch deleted file mode 100644 index a1fbb21326..0000000000 --- a/packages/efl1/ecore/fix-tslib-configure.patch +++ /dev/null @@ -1,19 +0,0 @@ -Index: ecore-0.9.9.038/configure.in -=================================================================== ---- ecore-0.9.9.038.orig/configure.in -+++ ecore-0.9.9.038/configure.in -@@ -1,4 +1,4 @@ --dnl Process this file with autoconf to produce a configure script. -+ -- #undef kernel_ulong_t <-added -- #undef BITS_PER_LONG <-added -+ #undef kernel_ulong_t -+ #undef BITS_PER_LONG - #else - #include - #endif -Index: ecore-0.9.9.037/src/lib/ecore_fb/ecore_fb_li.c -=================================================================== ---- ecore-0.9.9.037.orig/src/lib/ecore_fb/ecore_fb_li.c -+++ ecore-0.9.9.037/src/lib/ecore_fb/ecore_fb_li.c -@@ -1,6 +1,6 @@ - #include "Ecore_Fb.h" - #include "ecore_fb_private.h" -- -+/* - struct input_absinfo { - __s32 value; - __s32 minimum; -@@ -8,7 +8,7 @@ struct input_absinfo { - __s32 fuzz; - __s32 flat; - }; -- -+*/ - - #define EV_SYN 0x00 - #define EV_PWR 0x16 -- cgit v1.2.3 From ce820505a1c346de9044707c8c6180e588c366e9 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 9 Feb 2008 12:28:29 +0000 Subject: task-openmoko-python-devel: add python-lightmediascanner --- packages/tasks/task-openmoko-python-devel.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/tasks/task-openmoko-python-devel.bb b/packages/tasks/task-openmoko-python-devel.bb index 37d64847f6..695c380bc6 100644 --- a/packages/tasks/task-openmoko-python-devel.bb +++ b/packages/tasks/task-openmoko-python-devel.bb @@ -1,11 +1,12 @@ DESCRIPTION = "OpenMoko: Python Development Tools" SECTION = "openmoko/devel" LICENSE = "MIT" -PR = "r1" +PR = "r2" inherit task RDEPENDS_task-openmoko-python-devel = "\ python-efl \ python-pygtk \ + python-lightmediascanner \ " -- cgit v1.2.3 From 8e8193ab49d80f1ff3734d8c5a8af9f9ad59d567 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sat, 9 Feb 2008 20:21:45 +0000 Subject: slugos-packages: demoted eciadsl --- packages/meta/slugos-packages.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb index 6e8d9e4089..5d63a71a48 100644 --- a/packages/meta/slugos-packages.bb +++ b/packages/meta/slugos-packages.bb @@ -5,7 +5,7 @@ DESCRIPTION = "Packages that are compatible with the SlugOS firmware" HOMEPAGE = "http://www.nslu2-linux.org" LICENSE = "MIT" -PR = "r44" +PR = "r45" CONFLICTS = "db3" COMPATIBLE_MACHINE = "nslu2" @@ -76,7 +76,6 @@ SLUGOS_PACKAGES = "\ dnsmasq \ e2fsprogs \ e2fsprogs-libs \ - eciadsl \ expat \ ez-ipupdate \ fconfig \ @@ -245,6 +244,7 @@ SLUGOS_PACKAGES = "\ SLUGOS_BROKEN_PACKAGES = "\ bwmon \ dsniff \ + eciadsl \ fetchmail \ lirc-modules lirc \ madfu \ -- cgit v1.2.3 From 6f1077b05000cf74216fc3a28d1c22f6cb7bd2fb Mon Sep 17 00:00:00 2001 From: Manuel Teira Date: Sat, 9 Feb 2008 22:23:44 +0000 Subject: xserver-kdrive-imagen 1.2.0: Fixed include order in picturestr.h to allow compilation against renderproto 0.9.3 --- packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb | 3 ++- .../xserver-kdrive/fix-picturestr-include-order.patch | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 packages/xorg-xserver/xserver-kdrive/fix-picturestr-include-order.patch diff --git a/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb index 26f8666076..622b32179d 100644 --- a/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb +++ b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb @@ -7,7 +7,7 @@ DEPENDS += "libxkbfile libxcalibrate" PROVIDES = "virtual/xserver" PE = "1" -PR = "r3" +PR = "r4" FILESPATH = "${FILE_DIRNAME}/xserver-kdrive-1.2.0:${FILE_DIRNAME}/xserver-kdrive" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ @@ -21,6 +21,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://kdrive-imageon.patch;patch=1 \ file://xcalibrate_coords.patch;patch=1 \ file://enable-builtin-fonts.patch;patch=1 \ + file://fix-picturestr-include-order.patch;patch=1 \ " S = "${WORKDIR}/xorg-server-${PV}" diff --git a/packages/xorg-xserver/xserver-kdrive/fix-picturestr-include-order.patch b/packages/xorg-xserver/xserver-kdrive/fix-picturestr-include-order.patch new file mode 100644 index 0000000000..3da235e1e1 --- /dev/null +++ b/packages/xorg-xserver/xserver-kdrive/fix-picturestr-include-order.patch @@ -0,0 +1,15 @@ +# Reverse include order in render/picturestr.h to be able to compile against renderproto >= 0.9.3 +Index: xorg-server-1.2.0/render/picturestr.h +=================================================================== +--- xorg-server-1.2.0.orig/render/picturestr.h 2008-02-09 22:54:46.000000000 +0100 ++++ xorg-server-1.2.0/render/picturestr.h 2008-02-09 22:54:50.000000000 +0100 +@@ -26,8 +26,8 @@ + #ifndef _PICTURESTR_H_ + #define _PICTURESTR_H_ + +-#include "glyphstr.h" + #include "scrnintstr.h" ++#include "glyphstr.h" + #include "resource.h" + + typedef struct _DirectFormat { -- cgit v1.2.3 From ceef3d9e48b5c6f02166ad6f2c9d5392a9801d74 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sun, 10 Feb 2008 00:08:55 +0000 Subject: madwifi-ng: Add new version for testing (this is the version that OpenWrt currently uses, exiting versions no longer build due to kernel network api changes) --- packages/madwifi/madwifi-ng_r3314-20080131.bb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/madwifi/madwifi-ng_r3314-20080131.bb diff --git a/packages/madwifi/madwifi-ng_r3314-20080131.bb b/packages/madwifi/madwifi-ng_r3314-20080131.bb new file mode 100644 index 0000000000..9f7c696e49 --- /dev/null +++ b/packages/madwifi/madwifi-ng_r3314-20080131.bb @@ -0,0 +1,12 @@ +# Bitbake recipe for the madwifi-ng driver + +DEFAULT_PREFERENCE = "-1" + +# Disable stripping of kernel modules, since this action strips too +# much out, and the resulting module won't load. +INHIBIT_PACKAGE_STRIP = "1" + +require madwifi-ng_r.inc + +# PR set after the include, to override what's set in the included file. +# PR = "r1" -- cgit v1.2.3 From 5114b62e16ee52ec3ede08d40accc22913ffa099 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 10 Feb 2008 00:16:28 +0000 Subject: dbus-java: Removed MAINTAINER field. libmatthew: Dito. logic-analyzer: Dito. rxtx: Dito. --- packages/dbus-java/dbus-java_2.3.bb | 1 - packages/libmatthew/libmatthew_0.5.bb | 1 - packages/logic-analyzer/logic-analyzer_0.8.bb | 1 - packages/rxtx/rxtx_2.1-7r2.bb | 1 - 4 files changed, 4 deletions(-) diff --git a/packages/dbus-java/dbus-java_2.3.bb b/packages/dbus-java/dbus-java_2.3.bb index 72d99c3854..1c30fc7fe4 100644 --- a/packages/dbus-java/dbus-java_2.3.bb +++ b/packages/dbus-java/dbus-java_2.3.bb @@ -4,7 +4,6 @@ DESCRIPTION_dbus-java-bin = "${DESCRIPTION} (Binaries)" LICENSE = "GPLv2 AFL" SECTION = "libs" -MAINTAINER = "Fabian Koester, tarent GmbH Bonn " HOMEPAGE = "http://jalimo.org" AUTHOR = "Matthew Johnson " diff --git a/packages/libmatthew/libmatthew_0.5.bb b/packages/libmatthew/libmatthew_0.5.bb index 23ee04ed26..7a1b05478b 100644 --- a/packages/libmatthew/libmatthew_0.5.bb +++ b/packages/libmatthew/libmatthew_0.5.bb @@ -1,7 +1,6 @@ DESCRIPTION = "Unix socket, debug and hexdump libraries" LICENSE = "LGPL" SECTION = "libs" -MAINTAINER = "Fabian Koester, tarent GmbH Bonn " HOMEPAGE = "http://jalimo.org" AUTHOR = "Matthew Johnson " diff --git a/packages/logic-analyzer/logic-analyzer_0.8.bb b/packages/logic-analyzer/logic-analyzer_0.8.bb index ce691093fa..f66752ad31 100644 --- a/packages/logic-analyzer/logic-analyzer_0.8.bb +++ b/packages/logic-analyzer/logic-analyzer_0.8.bb @@ -1,6 +1,5 @@ DESCRIPTION = "A Java-based logical analyzer for home use." LICENSE = "GPL" -MAINTAINER = "Robert Schuster, tarent GmbH Bonn " HOMEPAGE = "http://sump.org/projects/analyzer/" inherit java diff --git a/packages/rxtx/rxtx_2.1-7r2.bb b/packages/rxtx/rxtx_2.1-7r2.bb index e91a406cfc..260b70a1fe 100644 --- a/packages/rxtx/rxtx_2.1-7r2.bb +++ b/packages/rxtx/rxtx_2.1-7r2.bb @@ -1,7 +1,6 @@ DESCRIPTION = "RXTX provides serial and parallel communication for Java applications" LICENSE = "LGPL" SECTION = "libs" -MAINTAINER = "Robert Schuster, tarent GmbH Bonn " HOMEPAGE = "http://rxtx.org" inherit autotools java-library -- cgit v1.2.3 From 97ed01f3e5d63d088dd1ca10ae009a93fa63739e Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 10 Feb 2008 00:17:46 +0000 Subject: kobodeluxe: New recipe. --- packages/kobodeluxe/.mtn2git_empty | 0 packages/kobodeluxe/files/.mtn2git_empty | 0 packages/kobodeluxe/files/debian-kobo.patch | 72 +++++++++++++++++++++++++++++ packages/kobodeluxe/kobodeluxe_0.5.1.bb | 26 +++++++++++ 4 files changed, 98 insertions(+) create mode 100644 packages/kobodeluxe/.mtn2git_empty create mode 100644 packages/kobodeluxe/files/.mtn2git_empty create mode 100644 packages/kobodeluxe/files/debian-kobo.patch create mode 100644 packages/kobodeluxe/kobodeluxe_0.5.1.bb diff --git a/packages/kobodeluxe/.mtn2git_empty b/packages/kobodeluxe/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/kobodeluxe/files/.mtn2git_empty b/packages/kobodeluxe/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/kobodeluxe/files/debian-kobo.patch b/packages/kobodeluxe/files/debian-kobo.patch new file mode 100644 index 0000000000..90b1d84080 --- /dev/null +++ b/packages/kobodeluxe/files/debian-kobo.patch @@ -0,0 +1,72 @@ +--- kobodeluxe-0.5.1.orig/kobo.cpp ++++ kobodeluxe-0.5.1/kobo.cpp +@@ -141,21 +141,21 @@ + * Graphics data + */ + /* Current dir; from within the build tree */ +- fmap->addpath("GFX", "./data/gfx"); ++ //fmap->addpath("GFX", "./data/gfx"); + /* Real data dir */ + fmap->addpath("GFX", "DATA>>gfx"); + /* Current dir */ +- fmap->addpath("GFX", "./gfx"); ++ //fmap->addpath("GFX", "./gfx"); + + /* + * Sound data + */ + /* Current dir; from within the build tree */ +- fmap->addpath("SFX", "./data/sfx"); ++ //fmap->addpath("SFX", "./data/sfx"); + /* Real data dir */ + fmap->addpath("SFX", "DATA>>sfx"); + /* Current dir */ +- fmap->addpath("SFX", "./sfx"); ++ //fmap->addpath("SFX", "./sfx"); + + /* + * Score files (user and global) +@@ -173,7 +173,7 @@ + /* System local */ + fmap->addpath("CONFIG", SYSCONF_DIR); + /* In current dir (last resort) */ +- fmap->addpath("CONFIG", "./"); ++ //fmap->addpath("CONFIG", "./"); + } + + +--- kobodeluxe-0.5.1.orig/graphics/window.cpp ++++ kobodeluxe-0.5.1/graphics/window.cpp +@@ -331,7 +331,7 @@ + } + + +-void window_t::center_token(int _x, int _y, const char *txt, char token) ++void window_t::center_token(int _x, int _y, const char *txt, signed char token) + { + center_token_fxp(PIXEL2CS(_x), PIXEL2CS(_y), txt, token); + } +@@ -374,7 +374,7 @@ + } + + +-void window_t::center_token_fxp(int _x, int _y, const char *txt, char token) ++void window_t::center_token_fxp(int _x, int _y, const char *txt, signed char token) + { + _x = CS2PIXEL((_x * xs + 128) >> 8); + _y = CS2PIXEL((_y * ys + 128) >> 8); +--- kobodeluxe-0.5.1.orig/graphics/window.h ++++ kobodeluxe-0.5.1/graphics/window.h +@@ -265,10 +265,10 @@ + void font(int fnt); + void string(int _x, int _y, const char *txt); + void center(int _y, const char *txt); +- void center_token(int _x, int _y, const char *txt, char token = 0); ++ void center_token(int _x, int _y, const char *txt, signed char token = 0); + void string_fxp(int _x, int _y, const char *txt); + void center_fxp(int _y, const char *txt); +- void center_token_fxp(int _x, int _y, const char *txt, char token = 0); ++ void center_token_fxp(int _x, int _y, const char *txt, signed char token = 0); + int textwidth(const char *txt, int min = 0, int max = 255); + int textwidth_fxp(const char *txt, int min = 0, int max = 255); + int fontheight(); diff --git a/packages/kobodeluxe/kobodeluxe_0.5.1.bb b/packages/kobodeluxe/kobodeluxe_0.5.1.bb new file mode 100644 index 0000000000..0c9ae458f8 --- /dev/null +++ b/packages/kobodeluxe/kobodeluxe_0.5.1.bb @@ -0,0 +1,26 @@ +DESCRIPTION = "Fast-paced 2D top-down shooter where you have to destroy space station" +SECTION = "games" +PRIORITY = "optional" +LICENSE = "GPL" +AUTHOR = "David Olofson " +HOMEPAGE = "http://olofson.net/kobodl" + +DEPENDS = "libsdl-image virtual/libsdl" + +RDEPENDS_${PN} = "${PN}-data" + +SRC_URI = "http://olofson.net/kobodl/download/KoboDeluxe-${PV}.tar.bz2 \ + file://debian-kobo.patch;patch=1 \ + " + +S = "${WORKDIR}/KoboDeluxe-${PV}" + +inherit autotools + +EXTRA_OECONF = "--disable-sdltest" + +PACKAGES += "${PN}-data" + +FILES_${PN}-data = "${datadir}" + +PACKAGE_ARCH_${PN}-data = "all" -- cgit v1.2.3 From 512f375b6597875d19760d87bc39dfcfba0ca47c Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 10 Feb 2008 00:25:36 +0000 Subject: MAINTAINERS: Added myself. --- MAINTAINERS | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index be759b4004..f772855b58 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -264,3 +264,14 @@ Interests: Kernels, PXA, GTK+, gsmd Distros: Ångström Machines: hx4700, magician Recipes: avahi, libgsmd + +Person: Robert Schuster 'thebohemian' +Mail: robert.schuster@tarent.de, thebohemian@gmx.net +Website: http://fsfe.org/en/fellows/robertschuster/weblog +Interests: free software, java, games +Distros: chinook-compat +Recipes: jikes-native, jikes-initial, ecj-initial, ecj-bootstrap-native +Recipes: classpath*, cacao*, jamvm* +Recipes: swt-gtk, rxtx, dbus-java, libmatthew, kxml2, xmlpull +Recipes: midpath*, logic-analyze +Recipes: kobodeluxe -- cgit v1.2.3 From ce51a7c1cdf92c7848ef5bca186d794bcaeba0bd Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Sun, 10 Feb 2008 01:52:20 +0000 Subject: SlugOS: udev - do not attempt to mount a device via fstab since mounting on SlugOS is done via UUID, not device names. --- packages/udev/files/slugos/mount.sh | 77 +++++++++++++++++++++++++++++++++++++ packages/udev/udev_100.bb | 3 +- 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 packages/udev/files/slugos/mount.sh diff --git a/packages/udev/files/slugos/mount.sh b/packages/udev/files/slugos/mount.sh new file mode 100644 index 0000000000..11714c1390 --- /dev/null +++ b/packages/udev/files/slugos/mount.sh @@ -0,0 +1,77 @@ +#!/bin/sh +# +# Called from udev +# Attemp to mount any added block devices +# and remove any removed devices +# + +MOUNT="/bin/mount" +PMOUNT="/usr/bin/pmount" +UMOUNT="/bin/umount" +name="`basename "$DEVNAME"`" + +for line in `cat /etc/udev/mount.blacklist | grep -v ^#` +do + if ( echo "$DEVNAME" | grep -q "$line" ) + then + logger "udev/mount.sh" "[$DEVNAME] is blacklisted, ignoring" + exit 0 + fi +done + +automount() { + ! test -d "/media/$name" && mkdir -p "/media/$name" + + if ! $MOUNT -t auto -o sync $DEVNAME "/media/$name" + then + #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/media/$name\" failed!" + rm_dir "/media/$name" + else + logger "mount.sh/automount" "Auto-mount of [/media/$name] successful" + touch "/tmp/.automount-$name" + fi +} + +rm_dir() { + # We do not want to rm -r populated directories + if test "`find "$1" | wc -l | tr -d " "`" -lt 2 -a -d "$1" + then + ! test -z "$1" && rm -r "$1" + else + logger "mount.sh/automount" "Not removing non-empty directory [$1]" + fi +} + +if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ]; then + # SlugOS: we pivot to the rootfs based on UUID, not on fstab -- so the fstab may not + # be correct at this point in the boot. So we must not let udev mount devices based + # soley on the fstab, lest we mount overtop the real rootfs. For now we just comment + # out the logic below and let the automount logic (far below) deal with all udev mount + # operations. + #if [ -x "$PMOUNT" ]; then + # $PMOUNT $DEVNAME 2> /dev/null + #elif [ -x $MOUNT ]; then + # $MOUNT $DEVNAME 2> /dev/null + #fi + + # If the device isn't mounted at this point, it isn't configured in fstab + # 20061107: Small correction: The rootfs partition may be called just "rootfs" and not by + # its true device name so this would break. If the rootfs is mounted on two places + # during boot, it confuses the heck out of fsck. So Im auto-adding the root-partition + # to /etc/udev/mount.blacklist via postinst + + cat /proc/mounts | awk '{print $1}' | grep -q "^$DEVNAME$" || automount + +fi + + + +if [ "$ACTION" = "remove" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then + for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " ` + do + $UMOUNT $mnt + done + + # Remove empty directories from auto-mounter + test -e "/tmp/.automount-$name" && rm_dir "/media/$name" +fi diff --git a/packages/udev/udev_100.bb b/packages/udev/udev_100.bb index ac981bbe9c..c8840e1a8f 100644 --- a/packages/udev/udev_100.bb +++ b/packages/udev/udev_100.bb @@ -9,12 +9,13 @@ used to detect the type of a file system and read its metadata." DESCRIPTION_libvolume-id-dev = "libvolume_id development headers, \ needed to link programs with libvolume_id." -PR = "r10" +PR = "r11" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \ file://noasmlinkage.patch;patch=1 \ file://flags.patch;patch=1 \ file://mount.blacklist \ + file://mount.sh \ " require udev.inc -- cgit v1.2.3 From c066f95098df28fdd517dee575326d6aa6f5417f Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Sun, 10 Feb 2008 01:55:22 +0000 Subject: SlugOS: make "turnup nfs" work correctly with the new network driver (loads firmware, and ensures we do not ifup the interface if the rootfs in nfs). --- packages/netbase/netbase/slugos/if-pre-up.d/test-nfsroot | 10 ++++++++++ packages/netbase/netbase_4.21.bb | 2 +- packages/slugos-init/files/boot/network | 2 +- packages/slugos-init/slugos-init_4.8.bb | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 packages/netbase/netbase/slugos/if-pre-up.d/test-nfsroot diff --git a/packages/netbase/netbase/slugos/if-pre-up.d/test-nfsroot b/packages/netbase/netbase/slugos/if-pre-up.d/test-nfsroot new file mode 100644 index 0000000000..bbfd7d9bb3 --- /dev/null +++ b/packages/netbase/netbase/slugos/if-pre-up.d/test-nfsroot @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [ X"$IFACE" == "Xeth0" ] ; then + nfsroot=`grep ' / nfs ' /proc/mounts` + if [ -n "$nfsroot" ]; then + echo "WARNING: Refusing to ifup eth0 when booted to a nfs-mounted rootfs." + exit 1 + fi +fi +exit 0 diff --git a/packages/netbase/netbase_4.21.bb b/packages/netbase/netbase_4.21.bb index 1f2837a8c1..73e765376c 100644 --- a/packages/netbase/netbase_4.21.bb +++ b/packages/netbase/netbase_4.21.bb @@ -2,7 +2,7 @@ DESCRIPTION = "This package provides the necessary \ infrastructure for basic TCP/IP based networking." SECTION = "base" LICENSE = "GPL" -PR = "r26" +PR = "r27" inherit update-rc.d diff --git a/packages/slugos-init/files/boot/network b/packages/slugos-init/files/boot/network index 8c0635d3ac..8124f19ab2 100644 --- a/packages/slugos-init/files/boot/network +++ b/packages/slugos-init/files/boot/network @@ -25,7 +25,7 @@ iface="$(config iface)" test -z "$iface" && exit 1 # # Fire up a process in the background to load the firmware if necessary -sysf="/sys/class/firmware/$iface" +sysf="/sys/class/firmware/firmware-$iface" ( # Wait for the firware to be requested, if required [ -f $sysf/loading ] || sleep 1 diff --git a/packages/slugos-init/slugos-init_4.8.bb b/packages/slugos-init/slugos-init_4.8.bb index 92ac7e30f3..4babf89d61 100644 --- a/packages/slugos-init/slugos-init_4.8.bb +++ b/packages/slugos-init/slugos-init_4.8.bb @@ -4,7 +4,7 @@ PRIORITY = "required" LICENSE = "GPL" DEPENDS = "base-files devio" RDEPENDS = "busybox devio" -PR = "r1" +PR = "r2" SRC_URI = "file://boot/flash \ file://boot/disk \ -- cgit v1.2.3 From f4477e16a53df1ad084d6ef67037ba2518c71541 Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Sun, 10 Feb 2008 01:59:18 +0000 Subject: linux-ixp4xx: NSLU2 defconfig 2.6.24 - turn on ATAGs in /proc to enable RP's new kexec functionality. --- packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 | 1 + packages/linux/linux-ixp4xx_2.6.24.bb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 index 28b69a82ed..061c0c0724 100644 --- a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 +++ b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 @@ -243,6 +243,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0 CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y # # Floating point emulation diff --git a/packages/linux/linux-ixp4xx_2.6.24.bb b/packages/linux/linux-ixp4xx_2.6.24.bb index 9942433b56..9a5967afa2 100644 --- a/packages/linux/linux-ixp4xx_2.6.24.bb +++ b/packages/linux/linux-ixp4xx_2.6.24.bb @@ -11,7 +11,7 @@ KERNEL_RELEASE = "2.6.24" #PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}+svnr${SRCREV}" PV = "${KERNEL_RELEASE}+svnr${SRCREV}" -PR = "r0" +PR = "r1" # ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${KERNEL_RELEASE}.bz2;patch=1 \ -- cgit v1.2.3 From 63bd29895b172a2f9e7deb9fb7096d0df47487ff Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Sun, 10 Feb 2008 02:42:10 +0000 Subject: task-slugos: add nfs kernel-module to the base image (for development convenience; this should be removed for the release version). --- packages/tasks/task-slugos.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tasks/task-slugos.bb b/packages/tasks/task-slugos.bb index bdcfcf7cd3..01cdaa21b4 100644 --- a/packages/tasks/task-slugos.bb +++ b/packages/tasks/task-slugos.bb @@ -6,7 +6,7 @@ DESCRIPTION = "Task packages for the SlugOS distribution" HOMEPAGE = "http://www.nslu2-linux.org" LICENSE = "MIT" -PR = "r16" +PR = "r17" PACKAGE_ARCH = "${MACHINE_ARCH}" ALLOW_EMPTY = "1" @@ -67,6 +67,7 @@ kernel-module-ext3 \ kernel-module-vfat \ kernel-module-nls-cp437 \ kernel-module-nls-utf8 \ +kernel-module-nfs \ " # Add daemon required for HW RNG support @@ -102,7 +103,6 @@ kernel-module-via-velocity \ # # portmap \ # kexec-tools \ -# kernel-module-nfs \ # kernel-module-isofs \ # kernel-module-udf \ # kernel-module-loop \ -- cgit v1.2.3 From 86b701de28c51e8ff8365c2189f0d31801e151ab Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 10 Feb 2008 02:42:11 +0000 Subject: kobodeluxe: Some fixes. - correct path to sdl-config script - disable building opengl code - added patch to use putenv() instead of SDL_putenv() --- packages/kobodeluxe/files/buildfix.patch | 21 +++++++++++++++++++++ packages/kobodeluxe/kobodeluxe_0.5.1.bb | 7 ++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 packages/kobodeluxe/files/buildfix.patch diff --git a/packages/kobodeluxe/files/buildfix.patch b/packages/kobodeluxe/files/buildfix.patch new file mode 100644 index 0000000000..01a97e14f2 --- /dev/null +++ b/packages/kobodeluxe/files/buildfix.patch @@ -0,0 +1,21 @@ +Index: kobodeluxe-0.5.1/graphics/gfxengine.cpp +=================================================================== +--- kobodeluxe-0.5.1.orig/graphics/gfxengine.cpp 2008-02-10 03:02:29.000000000 +0100 ++++ kobodeluxe-0.5.1/graphics/gfxengine.cpp 2008-02-10 03:03:45.000000000 +0100 +@@ -25,6 +25,7 @@ + + #include + #include ++#include + + #include "gfxengine.h" + #include "filters.h" +@@ -765,7 +766,7 @@ + return 0; + + if(_centered && !_fullscreen) +- SDL_putenv((char *)"SDL_VIDEO_CENTERED=1"); ++ putenv((char *)"SDL_VIDEO_CENTERED=1"); + + log_printf(DLOG, "Opening screen...\n"); + if(!SDL_WasInit(SDL_INIT_VIDEO)) diff --git a/packages/kobodeluxe/kobodeluxe_0.5.1.bb b/packages/kobodeluxe/kobodeluxe_0.5.1.bb index 0c9ae458f8..5d1196194f 100644 --- a/packages/kobodeluxe/kobodeluxe_0.5.1.bb +++ b/packages/kobodeluxe/kobodeluxe_0.5.1.bb @@ -5,19 +5,24 @@ LICENSE = "GPL" AUTHOR = "David Olofson " HOMEPAGE = "http://olofson.net/kobodl" +PR = "1" + DEPENDS = "libsdl-image virtual/libsdl" RDEPENDS_${PN} = "${PN}-data" SRC_URI = "http://olofson.net/kobodl/download/KoboDeluxe-${PV}.tar.bz2 \ file://debian-kobo.patch;patch=1 \ + file://buildfix.patch;patch=1 \ " S = "${WORKDIR}/KoboDeluxe-${PV}" inherit autotools -EXTRA_OECONF = "--disable-sdltest" +export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config" + +EXTRA_OECONF = "--disable-opengl --disable-sdltest" PACKAGES += "${PN}-data" -- cgit v1.2.3 From ee7316097667fbbcd4afec5e190bfdb0ba5333f8 Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Sun, 10 Feb 2008 02:45:37 +0000 Subject: Unslung: fuse-module - add old fuse module; this is the last fuse version that worked on the old 2.4 kernels. --- packages/fuse/fuse-module-2.5.3/.mtn2git_empty | 0 .../preserve_CC_with_2_4_kernel.patch | 11 ++++++++ packages/fuse/fuse-module_2.5.3.bb | 31 ++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/fuse/fuse-module-2.5.3/.mtn2git_empty create mode 100644 packages/fuse/fuse-module-2.5.3/preserve_CC_with_2_4_kernel.patch create mode 100644 packages/fuse/fuse-module_2.5.3.bb diff --git a/packages/fuse/fuse-module-2.5.3/.mtn2git_empty b/packages/fuse/fuse-module-2.5.3/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/fuse/fuse-module-2.5.3/preserve_CC_with_2_4_kernel.patch b/packages/fuse/fuse-module-2.5.3/preserve_CC_with_2_4_kernel.patch new file mode 100644 index 0000000000..05619d557c --- /dev/null +++ b/packages/fuse/fuse-module-2.5.3/preserve_CC_with_2_4_kernel.patch @@ -0,0 +1,11 @@ +--- fuse-2.5.3/kernel/Makefile.in.orig 2008-01-05 20:43:00.000000000 -0600 ++++ fuse-2.5.3/kernel/Makefile.in 2008-01-05 20:43:25.000000000 -0600 +@@ -54,8 +54,6 @@ + + ifeq ($(majver), 2.4) + +-CC = gcc +-LD = ld + CFLAGS = -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -pipe @KERNELCFLAGS@ + CPPFLAGS = -I@kernelsrc@/include -I. -D__KERNEL__ -DMODULE -D_LOOSE_KERNEL_NAMES -DFUSE_VERSION=\"$(VERSION)\" @KERNELCPPFLAGS@ + diff --git a/packages/fuse/fuse-module_2.5.3.bb b/packages/fuse/fuse-module_2.5.3.bb new file mode 100644 index 0000000000..f707888c94 --- /dev/null +++ b/packages/fuse/fuse-module_2.5.3.bb @@ -0,0 +1,31 @@ +require fuse.inc + +PR = "r0" + +SRC_URI += "file://preserve_CC_with_2_4_kernel.patch;patch=1" + +S = "${WORKDIR}/fuse-${PV}" + +FILES_${PN} = "${base_libdir}/modules" + +EXTRA_OECONF = " --enable-kernel-module --with-kernel=${STAGING_KERNEL_DIR}" + +inherit module + +do_configure() { + cd ${S} + oe_runconf +} + +do_compile(){ + LDFLAGS="" + cd ${S}/kernel + oe_runmake +} + +fakeroot do_install() { + LDFLAGS="" + cd ${S}/kernel + oe_runmake install DESTDIR=${D} +} + -- cgit v1.2.3 From 6c64ef3f168986a36f37a2a8d958f45ca5616ff0 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 10 Feb 2008 02:50:13 +0000 Subject: kobodeluxe: Set PR to r1. --- packages/kobodeluxe/kobodeluxe_0.5.1.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kobodeluxe/kobodeluxe_0.5.1.bb b/packages/kobodeluxe/kobodeluxe_0.5.1.bb index 5d1196194f..25f2f3ceb6 100644 --- a/packages/kobodeluxe/kobodeluxe_0.5.1.bb +++ b/packages/kobodeluxe/kobodeluxe_0.5.1.bb @@ -5,7 +5,7 @@ LICENSE = "GPL" AUTHOR = "David Olofson " HOMEPAGE = "http://olofson.net/kobodl" -PR = "1" +PR = "r1" DEPENDS = "libsdl-image virtual/libsdl" -- cgit v1.2.3 From f9b083e78b37f26877bdf769824ed8a20f3ef3c8 Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Sun, 10 Feb 2008 02:52:41 +0000 Subject: SlugOS Packages: add kexec-tools, inetutils, and rtorrent --- packages/meta/slugos-packages.bb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb index 5d63a71a48..9a5ad9cfef 100644 --- a/packages/meta/slugos-packages.bb +++ b/packages/meta/slugos-packages.bb @@ -5,7 +5,7 @@ DESCRIPTION = "Packages that are compatible with the SlugOS firmware" HOMEPAGE = "http://www.nslu2-linux.org" LICENSE = "MIT" -PR = "r45" +PR = "r46" CONFLICTS = "db3" COMPATIBLE_MACHINE = "nslu2" @@ -101,6 +101,7 @@ SLUGOS_PACKAGES = "\ gzip \ hdparm \ ifupdown \ + inetutils \ iperf \ ipkg-utils \ iptables \ @@ -108,6 +109,7 @@ SLUGOS_PACKAGES = "\ irssi \ joe \ jpeg \ + kexec-tools \ lcdproc \ less \ libao \ @@ -192,6 +194,7 @@ SLUGOS_PACKAGES = "\ reiserfsprogs reiser4progs \ rng-tools \ rsync \ + rtorrent \ samba \ sane-backends \ screen \ -- cgit v1.2.3 From 7e3bf2113c1b327e6792227ba5608fcae5e9cdfa Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sun, 10 Feb 2008 06:18:24 +0000 Subject: fuse: Update from 2.7.1 to 2.7.2 so that it builds against 2.6.24 kernel --- packages/fuse/fuse-2.7.2/.mtn2git_empty | 0 .../fuse-2.7.2/not-run-updaterc.d-on-host.patch | 15 +++++++++++ packages/fuse/fuse-module_2.7.2.bb | 29 ++++++++++++++++++++++ packages/fuse/fuse_2.7.2.bb | 27 ++++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 packages/fuse/fuse-2.7.2/.mtn2git_empty create mode 100644 packages/fuse/fuse-2.7.2/not-run-updaterc.d-on-host.patch create mode 100644 packages/fuse/fuse-module_2.7.2.bb create mode 100644 packages/fuse/fuse_2.7.2.bb diff --git a/packages/fuse/fuse-2.7.2/.mtn2git_empty b/packages/fuse/fuse-2.7.2/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/fuse/fuse-2.7.2/not-run-updaterc.d-on-host.patch b/packages/fuse/fuse-2.7.2/not-run-updaterc.d-on-host.patch new file mode 100644 index 0000000000..903a8baa9e --- /dev/null +++ b/packages/fuse/fuse-2.7.2/not-run-updaterc.d-on-host.patch @@ -0,0 +1,15 @@ +Index: fuse-2.7.2/util/Makefile.am +=================================================================== +--- fuse-2.7.2.orig/util/Makefile.am 2007-04-26 01:36:47.000000000 +0930 ++++ fuse-2.7.2/util/Makefile.am 2008-02-10 16:43:19.000000000 +1030 +@@ -33,10 +33,6 @@ + $(INSTALL_PROGRAM) $(srcdir)/mount.fuse $(DESTDIR)$(MOUNT_FUSE_PATH)/mount.fuse + $(mkdir_p) $(DESTDIR)$(INIT_D_PATH) + $(INSTALL_PROGRAM) $(srcdir)/init_script $(DESTDIR)$(INIT_D_PATH)/fuse +- @if test -x /usr/sbin/update-rc.d; then \ +- echo "/usr/sbin/update-rc.d fuse start 34 S . start 41 0 6 . || true"; \ +- /usr/sbin/update-rc.d fuse start 34 S . start 41 0 6 . || true; \ +- fi + + install-data-local: + $(mkdir_p) $(DESTDIR)$(UDEV_RULES_PATH) diff --git a/packages/fuse/fuse-module_2.7.2.bb b/packages/fuse/fuse-module_2.7.2.bb new file mode 100644 index 0000000000..48cc33a338 --- /dev/null +++ b/packages/fuse/fuse-module_2.7.2.bb @@ -0,0 +1,29 @@ +require fuse.inc + +RRECOMMENDS = "fuse" +PR = "r0" + +S = "${WORKDIR}/fuse-${PV}" +FILES_${PN} = "/dev ${base_libdir}/modules ${sysconfdir}" +EXTRA_OECONF = " --enable-kernel-module --with-kernel=${STAGING_KERNEL_DIR}" + +inherit module + +do_configure() { + cd ${S} ; oe_runconf +} + +do_compile(){ + LDFLAGS="" + cd ${S}/kernel + oe_runmake +} + +fakeroot do_install() { + LDFLAGS="" + install -d ${D}${sysconfdir}/udev/rules.d/ + install -m 644 util/udev.rules ${D}${sysconfdir}/udev/rules.d/ + cd ${S}/kernel + oe_runmake install DESTDIR=${D} +} + diff --git a/packages/fuse/fuse_2.7.2.bb b/packages/fuse/fuse_2.7.2.bb new file mode 100644 index 0000000000..a1795e7f0c --- /dev/null +++ b/packages/fuse/fuse_2.7.2.bb @@ -0,0 +1,27 @@ +require fuse.inc + +PR = "r0" + +SRC_URI += "file://not-run-updaterc.d-on-host.patch;patch=1" + +EXTRA_OECONF = " --disable-kernel-module" + +#package utils in a sperate package and stop debian.bbclass renaming it to libfuse-utils, we want it to be fuse-utils +PACKAGES =+ "fuse-utils-dbg fuse-utils libulockmgr libulockmgr-dev libulockmgr-dbg" +FILES_${PN} += "${libdir}/libfuse.so.*" +FILES_${PN}-dev += "${libdir}/libfuse*.la" + +FILES_libulockmgr = "${libdir}/libulockmgr.so.*" +FILES_libulockmgr-dev += "${libdir}/libulock*.la" +FILES_libulockmgr-dbg += "${libdir}/.debug/libulock*" + +FILES_fuse-utils = "${bindir} ${base_sbindir}" +FILES_fuse-utils-dbg = "${bindir}/.debug ${base_sbindir}/.debug" +DEBIAN_NOAUTONAME_fuse-utils = "1" +DEBIAN_NOAUTONAME_fuse-utils-dbg = "1" + +fakeroot do_stage() { + autotools_stage_all +} + + -- cgit v1.2.3 From ddc6a84af516e8ea27bc3193bb5873b88aee6db4 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sun, 10 Feb 2008 06:56:38 +0000 Subject: slugos-packages: demote gspcav1 --- packages/meta/slugos-packages.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb index 9a5ad9cfef..d0c3324e7f 100644 --- a/packages/meta/slugos-packages.bb +++ b/packages/meta/slugos-packages.bb @@ -5,10 +5,10 @@ DESCRIPTION = "Packages that are compatible with the SlugOS firmware" HOMEPAGE = "http://www.nslu2-linux.org" LICENSE = "MIT" -PR = "r46" +PR = "r47" CONFLICTS = "db3" -COMPATIBLE_MACHINE = "nslu2" +COMPATIBLE_MACHINE = "nslu2|ixp4xx" EXCLUDE_FROM_WORLD = "1" INHIBIT_DEFAULT_DEPS = "1" ALLOW_EMPTY = "1" @@ -96,7 +96,6 @@ SLUGOS_PACKAGES = "\ gphoto2 \ grep \ groff \ - gspcav1 \ gtk-doc \ gzip \ hdparm \ @@ -249,6 +248,7 @@ SLUGOS_BROKEN_PACKAGES = "\ dsniff \ eciadsl \ fetchmail \ + gspcav1 \ lirc-modules lirc \ madfu \ openldap \ -- cgit v1.2.3 From 0c5699ad304013fa3ae3feba69c4d00ddab5003b Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sun, 10 Feb 2008 06:56:58 +0000 Subject: madwifi-ng: Enable latest version for ixp4xx --- packages/madwifi/madwifi-ng_r3314-20080131.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/madwifi/madwifi-ng_r3314-20080131.bb b/packages/madwifi/madwifi-ng_r3314-20080131.bb index 9f7c696e49..a7b4af725f 100644 --- a/packages/madwifi/madwifi-ng_r3314-20080131.bb +++ b/packages/madwifi/madwifi-ng_r3314-20080131.bb @@ -1,6 +1,7 @@ # Bitbake recipe for the madwifi-ng driver DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_ixp4xx = "1" # Disable stripping of kernel modules, since this action strips too # much out, and the resulting module won't load. -- cgit v1.2.3 From 0cfbcb13cbe1d8ef115c6d54e4a307b8dd1b89fc Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 10 Feb 2008 12:14:08 +0000 Subject: sqlalchemy: initial commit (bb file modeled after python-simplejson which also uses setuptools) --- packages/python/python-sqlalchemy_0.4.2p3.bb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 packages/python/python-sqlalchemy_0.4.2p3.bb diff --git a/packages/python/python-sqlalchemy_0.4.2p3.bb b/packages/python/python-sqlalchemy_0.4.2p3.bb new file mode 100644 index 0000000000..c14a9a6e35 --- /dev/null +++ b/packages/python/python-sqlalchemy_0.4.2p3.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL" +HOMEPAGE = "http://www.sqlalchemy.org/" +SECTION = "devel/python" +PRIORITY = "optional" +LICENSE = "MIT" +DEPENDS = "python-setuptools" +#RDEPENDS = "" +SRCNAME = "sqlalchemy" +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${SRCNAME}/SQLAlchemy-${PV}.tar.gz" +S = "${WORKDIR}/${SRCNAME}-${PV}" + +#inherit distutils -- cgit v1.2.3 From ed138a503d660dfdb8f1a09beced0b1d1ca86c98 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 10 Feb 2008 14:55:05 +0000 Subject: python-pyqt: add python-sip and sip-native as DEPENDS to ensure successful compilation from scratch. --- packages/python/python-pyqt_4.3.3.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/python/python-pyqt_4.3.3.bb b/packages/python/python-pyqt_4.3.3.bb index 2fd6fcc38b..9dd2040a5b 100644 --- a/packages/python/python-pyqt_4.3.3.bb +++ b/packages/python/python-pyqt_4.3.3.bb @@ -4,6 +4,7 @@ AUTHOR = "Phil Thomson @ riverbank.co.uk" SECTION = "devel/python" PRIORITY = "optional" LICENSE = "GPL" +DEPENDS = "sip-native python-sip" RDEPENDS = "python-core" SRCNAME = "pyqt" PR = "ml1" -- cgit v1.2.3 From 05b83348e95642fa03c8da2d5142076357199e64 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sun, 10 Feb 2008 15:13:37 +0000 Subject: python-sqlalchemy: use setuptools, add to task-python-everything --- packages/python/python-sqlalchemy_0.4.2p3.bb | 8 +++----- packages/tasks/task-python-everything.bb | 3 ++- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/python/python-sqlalchemy_0.4.2p3.bb b/packages/python/python-sqlalchemy_0.4.2p3.bb index c14a9a6e35..2a797eb439 100644 --- a/packages/python/python-sqlalchemy_0.4.2p3.bb +++ b/packages/python/python-sqlalchemy_0.4.2p3.bb @@ -3,12 +3,10 @@ HOMEPAGE = "http://www.sqlalchemy.org/" SECTION = "devel/python" PRIORITY = "optional" LICENSE = "MIT" -DEPENDS = "python-setuptools" -#RDEPENDS = "" -SRCNAME = "sqlalchemy" +SRCNAME = "SQLAlchemy" PR = "r0" -SRC_URI = "${SOURCEFORGE_MIRROR}/${SRCNAME}/SQLAlchemy-${PV}.tar.gz" +SRC_URI = "${SOURCEFORGE_MIRROR}/sqlalchemy/${SRCNAME}-${PV}.tar.gz" S = "${WORKDIR}/${SRCNAME}-${PV}" -#inherit distutils +inherit setuptools diff --git a/packages/tasks/task-python-everything.bb b/packages/tasks/task-python-everything.bb index a23589111d..18455f5b96 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 = "ml25" +PR = "ml26" RDEPENDS = "\ python-ao \ @@ -75,6 +75,7 @@ RDEPENDS = "\ python-soappy \ python-spydi \ python-spyro \ + python-sqlalchemy \ python-sqlobject \ python-sword \ python-tlslite \ -- cgit v1.2.3 From e6c7672ff0a7bd122407d86d303fa654cfa8906d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 10 Feb 2008 18:15:06 +0000 Subject: linux-handhelds-2.6 2.6.21: Enable BT for h5000. * defconfigman r437 --- packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig index 2dbeadd59f..0632967258 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:44 2008 +# Sun Feb 10 18:52:35 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -270,7 +270,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m @@ -543,7 +543,9 @@ CONFIG_BT_HIDP=m # Bluetooth device drivers # # CONFIG_BT_HCIUSB is not set -# CONFIG_BT_HCIUART is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y # CONFIG_BT_HCIBCM203X is not set # CONFIG_BT_HCIBPA10X is not set # CONFIG_BT_HCIBFUSB is not set @@ -1152,7 +1154,6 @@ CONFIG_SND_VERBOSE_PROCFS=y # # ALSA ARM devices # -# CONFIG_SND_H5XXX_AK4535 is not set # CONFIG_SND_PXA2XX_AC97 is not set # CONFIG_SND_RECON is not set -- cgit v1.2.3 From 501cb780ac89508e8b5592e40977b789b5e0a1ef Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 10 Feb 2008 18:20:16 +0000 Subject: linux-handhelds-2.6 2.6.21-hh20: Make cpufreq powersave governor modular. * Unfortunately, can't make entire cpufreq modular due to cross-dependency with pcmcia layer. * defconfigman r437 --- packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig | 2 +- packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig | 2 +- packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig | 2 +- packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb | 2 +- 24 files changed, 44 insertions(+), 44 deletions(-) diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig index 04c70cfba6..3c31bf79c1 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:39 2008 +# Sun Feb 10 18:52:29 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -270,7 +270,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig index aa94442a9b..6124612e8e 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:40 2008 +# Sun Feb 10 18:52:30 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -276,7 +276,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig index 1b32b68672..3ad8892684 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:40 2008 +# Sun Feb 10 18:52:30 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -270,7 +270,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig index d4881fb224..0de50a8544 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:41 2008 +# Sun Feb 10 18:52:31 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig index 4249e4d6f5..bef52e511d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:41 2008 +# Sun Feb 10 18:52:31 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -268,7 +268,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig index 45c68468da..8eb98d48bd 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:42 2008 +# Sun Feb 10 18:52:32 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -276,7 +276,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig index ead31f3055..c43b02f8be 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:42 2008 +# Sun Feb 10 18:52:33 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -248,7 +248,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig index 4d110a7b21..cbf3e04967 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:42 2008 +# Sun Feb 10 18:52:33 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -246,7 +246,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig index d386487e64..7c76b0840d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:43 2008 +# Sun Feb 10 18:52:34 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -269,7 +269,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig index 31ff20e487..4ea24b5ca0 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:43 2008 +# Sun Feb 10 18:52:35 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -282,7 +282,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig index 26d28055db..055845d294 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:45 2008 +# Sun Feb 10 18:52:37 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -268,7 +268,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig index 80a3269294..f8305f4b24 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:45 2008 +# Sun Feb 10 18:52:38 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -268,7 +268,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig index 28186f7df7..c06bd208e3 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:46 2008 +# Sun Feb 10 18:52:39 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -272,7 +272,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig index c2e783a9a7..2fe847a449 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:46 2008 +# Sun Feb 10 18:52:39 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -289,7 +289,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig index 8abaeb97f8..462d533bd4 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:47 2008 +# Sun Feb 10 18:52:40 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -270,7 +270,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig index ed6b2634a2..1112767fd2 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:47 2008 +# Sun Feb 10 18:52:40 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -272,7 +272,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig index 241d3a3759..8fe6a095ee 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:47 2008 +# Sun Feb 10 18:52:41 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -279,7 +279,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig index bb0230cc2d..937fe075a3 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:48 2008 +# Sun Feb 10 18:52:42 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -245,7 +245,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig index e9f45ab8f3..c080960e1f 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:44 2008 +# Sun Feb 10 18:52:36 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -284,7 +284,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig index 89646accc5..c1d7fe389d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:48 2008 +# Sun Feb 10 18:52:42 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -266,7 +266,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig index fb433633ab..51a42ff954 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:44 2008 +# Sun Feb 10 18:52:37 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -273,7 +273,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig index 8bf07bed8d..2dde2fead2 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:49 2008 +# Sun Feb 10 18:52:43 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig index 98f5b6cc8f..deceed5b4f 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Jan 27 01:32:49 2008 +# Sun Feb 10 18:52:43 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb index f15b71c325..29f97e0ba7 100644 --- a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb +++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb @@ -1,7 +1,7 @@ SECTION = "kernel" DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices." LICENSE = "GPL" -PR = "r6" +PR = "r7" DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From a78737407961758f13cd1218a002e1ac5950a8a9 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 10 Feb 2008 20:04:39 +0000 Subject: linux-handhelds-2.6 2.6.21-hh20: Enable few more FSes and introspection options. * defconfigman r439. --- .../linux-handhelds-2.6-2.6.21/asus620/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/asus730/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/aximx50/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/eteng500/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/h1910/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/h2200/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/h3600/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/h3800/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/h3900/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/h4000/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/h5000/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/htcalpine/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/htcapache/defconfig | 24 ++++++++++++++-------- .../htcbeetles/defconfig | 24 ++++++++++++++-------- .../htcblueangel/defconfig | 24 ++++++++++++++-------- .../htchimalaya/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/htcsable/defconfig | 24 ++++++++++++++-------- .../htcuniversal/defconfig | 24 ++++++++++++++-------- .../htcwallaby/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/hx4700/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/looxc550/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/magician/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/rx1950/defconfig | 24 ++++++++++++++-------- .../linux-handhelds-2.6-2.6.21/rx3000/defconfig | 24 ++++++++++++++-------- packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb | 2 +- 25 files changed, 385 insertions(+), 193 deletions(-) diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig index 3c31bf79c1..c9d51692f1 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:29 2008 +# Sun Feb 10 21:02:18 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1104,13 +1104,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1168,8 +1170,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1242,14 +1250,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig index 6124612e8e..c3969f2d7c 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:30 2008 +# Sun Feb 10 21:02:19 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1215,13 +1215,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1290,8 +1292,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1364,14 +1372,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig index 3ad8892684..89eec63677 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:30 2008 +# Sun Feb 10 21:02:19 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1089,13 +1089,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1153,8 +1155,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1227,14 +1235,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig index 0de50a8544..4a4abb9375 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:31 2008 +# Sun Feb 10 21:02:20 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1079,13 +1079,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1143,8 +1145,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1217,14 +1225,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig index bef52e511d..fab476ca75 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:31 2008 +# Sun Feb 10 21:02:20 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1159,13 +1159,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1223,8 +1225,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1297,14 +1305,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig index 8eb98d48bd..a62949b67e 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:32 2008 +# Sun Feb 10 21:02:21 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1550,13 +1550,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1625,8 +1627,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1699,14 +1707,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig index c43b02f8be..ae663cfc31 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:33 2008 +# Sun Feb 10 21:02:21 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1067,13 +1067,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1142,8 +1144,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1216,14 +1224,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig index cbf3e04967..34c2a83bd1 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:33 2008 +# Sun Feb 10 21:02:21 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1065,13 +1065,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1140,8 +1142,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1214,14 +1222,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig index 7c76b0840d..eb184f552e 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:34 2008 +# Sun Feb 10 21:02:22 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1184,13 +1184,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1259,8 +1261,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1333,14 +1341,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig index 4ea24b5ca0..8b15cfa458 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:35 2008 +# Sun Feb 10 21:02:22 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1309,13 +1309,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1384,8 +1386,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1458,14 +1466,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig index 0632967258..11e42b0336 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:35 2008 +# Sun Feb 10 21:02:23 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1442,13 +1442,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1517,8 +1519,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1591,14 +1599,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig index 055845d294..ce17fad6a0 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:37 2008 +# Sun Feb 10 21:02:24 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1099,13 +1099,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1163,8 +1165,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1237,14 +1245,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig index f8305f4b24..67f0e76bf0 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:38 2008 +# Sun Feb 10 21:02:24 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1190,13 +1190,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1254,8 +1256,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1328,14 +1336,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig index c06bd208e3..9b4037354f 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:39 2008 +# Sun Feb 10 21:02:25 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1106,13 +1106,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1170,8 +1172,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1244,14 +1252,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig index 2fe847a449..1a2f64f28b 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:39 2008 +# Sun Feb 10 21:02:25 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1330,13 +1330,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1405,8 +1407,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1479,14 +1487,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig index 462d533bd4..b7c9c46845 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:40 2008 +# Sun Feb 10 21:02:26 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1102,13 +1102,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1166,8 +1168,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1240,14 +1248,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig index 1112767fd2..8c42382e27 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:40 2008 +# Sun Feb 10 21:02:26 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1206,13 +1206,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1281,8 +1283,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1355,14 +1363,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig index 8fe6a095ee..eb4d556fa0 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:41 2008 +# Sun Feb 10 21:02:27 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1223,13 +1223,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1287,8 +1289,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1361,14 +1369,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig index 937fe075a3..4ff70afbea 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:42 2008 +# Sun Feb 10 21:02:27 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1065,13 +1065,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1140,8 +1142,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1214,14 +1222,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig index c080960e1f..47d754d73e 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:36 2008 +# Sun Feb 10 21:02:23 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1567,13 +1567,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1642,8 +1644,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1716,14 +1724,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig index c1d7fe389d..a59a838ae1 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:42 2008 +# Sun Feb 10 21:02:27 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1102,13 +1102,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1166,8 +1168,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1240,14 +1248,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig index 51a42ff954..d19918874b 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:37 2008 +# Sun Feb 10 21:02:24 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1420,13 +1420,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1495,8 +1497,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1569,14 +1577,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig index 2dde2fead2..67f823f5f9 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:43 2008 +# Sun Feb 10 21:02:28 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1136,13 +1136,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1200,8 +1202,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1274,14 +1282,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig index deceed5b4f..c5f80cd5df 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 18:52:43 2008 +# Sun Feb 10 21:02:28 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1260,13 +1260,15 @@ 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 +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_UDF_FS is not set # @@ -1324,8 +1326,14 @@ CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m # 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_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set @@ -1398,14 +1406,14 @@ CONFIG_PRINTK_TIME=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_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set CONFIG_LOG_BUF_SHIFT=16 CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb index 29f97e0ba7..22ea976815 100644 --- a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb +++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb @@ -1,7 +1,7 @@ SECTION = "kernel" DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices." LICENSE = "GPL" -PR = "r7" +PR = "r8" DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From 5e20762710bc6192195a5a771d4fae5a32339f3b Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 10 Feb 2008 22:37:29 +0000 Subject: linux-handhelds-2.6: Record teh fact that flash booting should be done with root=mtdN * Per discussion on the list, reminding that root=/dev/mtdblockN form is deprecated (requires mtdblock builtin for the sole purpose of looking up mtd device thru block layer). * Add that to generated sample HaRET config - after all, that's the bootloader with most device coverage, so users of other bootloaders are expected to be familiar with it still. --- packages/linux/linux-handhelds-2.6.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/linux/linux-handhelds-2.6.inc b/packages/linux/linux-handhelds-2.6.inc index 0db5e93974..81af72e413 100644 --- a/packages/linux/linux-handhelds-2.6.inc +++ b/packages/linux/linux-handhelds-2.6.inc @@ -98,6 +98,11 @@ set cmdline "root=/dev/mmcblk0p2 rootdelay=10 console=ttyS0,115200n8 console=tty # 192.168.y.y - Handheld's address #set cmdline "root=/dev/nfs nfsroot=192.168.x.x: ip=192.168.y.y:192.168.x.x:192.168.x.x:255.255.255.0:pda:usb0 console=ttyS0,115200n8 console=tty0" +## Choice 5 - Boot from MTD partition, for devices with lots of flash +# to have both WinCE and Linux there. Note the value of root param, +# that's how it should be, not "/dev/mtdblockN". +# set cmdline "root=mtdN console=ttyS0,115200n8 console=tty0" + bootlinux EOF } -- cgit v1.2.3 From bee0edd64c00c29fa2ce48aa6238ac146c5b4aa3 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sun, 10 Feb 2008 22:50:23 +0000 Subject: add gstreamer and gst-plugins-base 0.10.17 --- packages/gstreamer/gst-plugins-base_0.10.17.bb | 12 ++++++++++++ packages/gstreamer/gstreamer_0.10.17.bb | 3 +++ 2 files changed, 15 insertions(+) create mode 100644 packages/gstreamer/gst-plugins-base_0.10.17.bb create mode 100644 packages/gstreamer/gstreamer_0.10.17.bb diff --git a/packages/gstreamer/gst-plugins-base_0.10.17.bb b/packages/gstreamer/gst-plugins-base_0.10.17.bb new file mode 100644 index 0000000000..33b189a0ff --- /dev/null +++ b/packages/gstreamer/gst-plugins-base_0.10.17.bb @@ -0,0 +1,12 @@ +require gst-plugins.inc + +PROVIDES += "gst-plugins" + +# gst-plugins-base only builds the alsa plugin +# if alsa has been built and is present. You will +# not get an error if this is not present, just +# a missing alsa plugin +DEPENDS += "alsa-lib" + +PR = "r2" + diff --git a/packages/gstreamer/gstreamer_0.10.17.bb b/packages/gstreamer/gstreamer_0.10.17.bb new file mode 100644 index 0000000000..9e9ae62cb1 --- /dev/null +++ b/packages/gstreamer/gstreamer_0.10.17.bb @@ -0,0 +1,3 @@ +require gstreamer.inc + +PR = "r0" -- cgit v1.2.3 From 7117809d3b752b53a273ee3579b28f249b5fa3ee Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sun, 10 Feb 2008 22:56:03 +0000 Subject: python-gst: update to 0.10.10 --- packages/python/python-gst/python-path.patch | 35 +++++++++++++++++----------- packages/python/python-gst_0.10.10.bb | 26 +++++++++++++++++++++ packages/python/python-gst_0.10.8.bb | 26 --------------------- 3 files changed, 48 insertions(+), 39 deletions(-) create mode 100644 packages/python/python-gst_0.10.10.bb delete mode 100644 packages/python/python-gst_0.10.8.bb diff --git a/packages/python/python-gst/python-path.patch b/packages/python/python-gst/python-path.patch index 465d5b180a..6cbad8cc5f 100644 --- a/packages/python/python-gst/python-path.patch +++ b/packages/python/python-gst/python-path.patch @@ -1,24 +1,33 @@ -Index: gst-python-0.10.7/acinclude.m4 +Index: gst-python-0.10.10/acinclude.m4 =================================================================== ---- gst-python-0.10.7.orig/acinclude.m4 2007-03-02 14:10:28.652128590 +0100 -+++ gst-python-0.10.7/acinclude.m4 2007-03-02 14:41:00.106728708 +0100 -@@ -43,12 +43,19 @@ +--- gst-python-0.10.10.orig/acinclude.m4 ++++ gst-python-0.10.10/acinclude.m4 +@@ -43,16 +43,20 @@ AC_DEFUN([AM_CHECK_PYTHON_HEADERS], [AC_REQUIRE([AM_PATH_PYTHON]) AC_MSG_CHECKING(for headers required to compile python extensions) dnl deduce PYTHON_INCLUDES +-py_prefix=`$PYTHON -c "import sys; print sys.prefix"` +-py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` +-if $PYTHON-config --help 2>/dev/null; then +- PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null` + +AC_ARG_WITH(python-includes, -+ [ --with-python-includes=DIR path to Python includes], py_exec_prefix=$withval) ++ [ --with-python-includes=DIR path to Python includes], py_exec_prefix=$withval) +if test x$py_exec_prefix != x; then -+PYTHON_INCLUDES="-I${py_exec_prefix}/include/python${PYTHON_VERSION}" -+else - py_prefix=`$PYTHON -c "import sys; print sys.prefix"` - py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` - PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" - if test "$py_prefix" != "$py_exec_prefix"; then - PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" ++ PYTHON_INCLUDES="-I${py_exec_prefix}/include/python${PYTHON_VERSION}" + else +- PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" +- if test "$py_prefix" != "$py_exec_prefix"; then +- PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" +- fi ++ py_prefix=`$PYTHON -c "import sys; print sys.prefix"` ++ py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` ++ PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" ++if test "$py_prefix" != "$py_exec_prefix"; then ++ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" ++ fi fi -+fi ++ AC_SUBST(PYTHON_INCLUDES) dnl check if the headers exist: save_CPPFLAGS="$CPPFLAGS" diff --git a/packages/python/python-gst_0.10.10.bb b/packages/python/python-gst_0.10.10.bb new file mode 100644 index 0000000000..cc1a19574e --- /dev/null +++ b/packages/python/python-gst_0.10.10.bb @@ -0,0 +1,26 @@ +DESCRIPTION = "Python Gstreamer bindings" +SECTION = "devel/python" +LICENSE = "LGPL" +DEPENDS = "gstreamer gst-plugins-base python-pygobject" +PR = "ml0" + +SRC_URI = "http://gstreamer.freedesktop.org/src/gst-python/gst-python-${PV}.tar.bz2 \ + file://python-path.patch;patch=1" +S = "${WORKDIR}/gst-python-${PV}" + +inherit autotools distutils-base pkgconfig + +EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../" + +do_configure_prepend() { + install -d ${S}/m4 + install -m 0644 ${S}/common/m4/*.m4 ${S}/m4/ +} + +do_stage() { + autotools_stage_all +} + +FILES_${PN} += "${datadir}/gst-python" +FILES_${PN}-dev += "${datadir}/gst-python/0.10/defs" +FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/gst-0.10/gst/.debug/" diff --git a/packages/python/python-gst_0.10.8.bb b/packages/python/python-gst_0.10.8.bb deleted file mode 100644 index 224d24b59a..0000000000 --- a/packages/python/python-gst_0.10.8.bb +++ /dev/null @@ -1,26 +0,0 @@ -DESCRIPTION = "Python Gstreamer bindings" -SECTION = "devel/python" -LICENSE = "LGPL" -DEPENDS = "gstreamer gst-plugins-base python-pygobject" -PR = "ml1" - -SRC_URI = "http://gstreamer.freedesktop.org/src/gst-python/gst-python-${PV}.tar.bz2 \ - file://python-path.patch;patch=1" -S = "${WORKDIR}/gst-python-${PV}" - -inherit autotools distutils-base pkgconfig - -EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../" - -do_configure_prepend() { - install -d ${S}/m4 - install -m 0644 ${S}/common/m4/*.m4 ${S}/m4/ -} - -do_stage() { - autotools_stage_all -} - -FILES_${PN} += "${datadir}/gst-python" -FILES_${PN}-dev += "${datadir}/gst-python/0.10/defs" -FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/gst-0.10/gst/.debug/" -- cgit v1.2.3 From 436747f6f2889479e46aa41882431c7ac2627e82 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Mon, 11 Feb 2008 13:03:30 +0000 Subject: madwifi-ng: Fixed little-endian build --- .../30-define-ioreadwrite32be-for-little-endian-too.patch | 13 +++++++++++++ packages/madwifi/madwifi-ng_r3314-20080131.bb | 6 +++++- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 packages/madwifi/files/30-define-ioreadwrite32be-for-little-endian-too.patch diff --git a/packages/madwifi/files/30-define-ioreadwrite32be-for-little-endian-too.patch b/packages/madwifi/files/30-define-ioreadwrite32be-for-little-endian-too.patch new file mode 100644 index 0000000000..3752a554cd --- /dev/null +++ b/packages/madwifi/files/30-define-ioreadwrite32be-for-little-endian-too.patch @@ -0,0 +1,13 @@ +Reported as http://madwifi.org/ticket/1783 ... + +--- madwifi-ng-r3314-20080131/ath_hal/ah_os.h~ 2007-11-23 20:08:18.000000000 +1030 ++++ madwifi-ng-r3314-20080131/ath_hal/ah_os.h 2008-02-11 23:12:11.000000000 +1030 +@@ -168,7 +168,7 @@ + * for the second time, so the native implementations should be preferred. + */ + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)) && \ +- !defined(CONFIG_GENERIC_IOMAP) && (AH_BYTE_ORDER == AH_BIG_ENDIAN) && \ ++ !defined(CONFIG_GENERIC_IOMAP) && \ + !defined(__mips__) && !defined(__hppa__) && !defined(__powerpc__) + # ifndef iowrite32be + # define iowrite32be(_val, _addr) iowrite32(swab32((_val)), (_addr)) diff --git a/packages/madwifi/madwifi-ng_r3314-20080131.bb b/packages/madwifi/madwifi-ng_r3314-20080131.bb index a7b4af725f..d47a0959a8 100644 --- a/packages/madwifi/madwifi-ng_r3314-20080131.bb +++ b/packages/madwifi/madwifi-ng_r3314-20080131.bb @@ -9,5 +9,9 @@ INHIBIT_PACKAGE_STRIP = "1" require madwifi-ng_r.inc +SRC_URI += " \ + file://30-define-ioreadwrite32be-for-little-endian-too.patch;patch=1 \ + " + # PR set after the include, to override what's set in the included file. -# PR = "r1" +PR = "r6" -- cgit v1.2.3 From 696e2381d893a110a8d4dd3bfd9f0311286440ac Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 11 Feb 2008 15:15:18 +0000 Subject: u-boot: Trim Neon patch a little bit, fix some issues. --- .../u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch | 49 ---------------------- packages/u-boot/u-boot_1.1.2.bb | 12 +++++- 2 files changed, 10 insertions(+), 51 deletions(-) diff --git a/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch b/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch index ed959d43d8..3809a75f51 100644 --- a/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch +++ b/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch @@ -19060,55 +19060,6 @@ diff -u -r --new-file u-boot-1.1.2/patches/arm_flags.patch u-boot-1.1.2-neon/pat ++ -msoft-float + + PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100 -diff -u -r --new-file u-boot-1.1.2/patches/series u-boot-1.1.2-neon/patches/series ---- u-boot-1.1.2/patches/series 1970-01-01 01:00:00.000000000 +0100 -+++ u-boot-1.1.2-neon/patches/series 2007-08-11 21:01:36.000000000 +0200 -@@ -0,0 +1,2 @@ -+arm_flags.patch -p1 -+u-boot-2006-06-03.patch.gz -p1 -Binary files u-boot-1.1.2/patches/u-boot-2006-06-03.patch.gz and u-boot-1.1.2-neon/patches/u-boot-2006-06-03.patch.gz differ -diff -u -r --new-file u-boot-1.1.2/.pc/applied-patches u-boot-1.1.2-neon/.pc/applied-patches ---- u-boot-1.1.2/.pc/applied-patches 1970-01-01 01:00:00.000000000 +0100 -+++ u-boot-1.1.2-neon/.pc/applied-patches 2007-08-11 21:01:36.000000000 +0200 -@@ -0,0 +1 @@ -+arm_flags.patch -diff -u -r --new-file u-boot-1.1.2/.pc/arm_flags.patch/cpu/pxa/config.mk u-boot-1.1.2-neon/.pc/arm_flags.patch/cpu/pxa/config.mk ---- u-boot-1.1.2/.pc/arm_flags.patch/cpu/pxa/config.mk 1970-01-01 01:00:00.000000000 +0100 -+++ u-boot-1.1.2-neon/.pc/arm_flags.patch/cpu/pxa/config.mk 2003-05-23 14:36:21.000000000 +0200 -@@ -0,0 +1,28 @@ -+# -+# (C) Copyright 2002 -+# Sysgo Real-Time Solutions, GmbH -+# Marius Groeger -+# -+# 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 -+# -+ -+PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ -+ -mshort-load-bytes -msoft-float -+ -+PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100 -diff -u -r --new-file u-boot-1.1.2/.pc/.version u-boot-1.1.2-neon/.pc/.version ---- u-boot-1.1.2/.pc/.version 1970-01-01 01:00:00.000000000 +0100 -+++ u-boot-1.1.2-neon/.pc/.version 2007-08-11 21:01:36.000000000 +0200 -@@ -0,0 +1 @@ -+2 diff -u -r --new-file u-boot-1.1.2/README u-boot-1.1.2-neon/README --- u-boot-1.1.2/README 2004-12-16 22:44:03.000000000 +0100 +++ u-boot-1.1.2-neon/README 2007-08-11 21:07:19.000000000 +0200 diff --git a/packages/u-boot/u-boot_1.1.2.bb b/packages/u-boot/u-boot_1.1.2.bb index 82b169ccc4..8287d35a1d 100644 --- a/packages/u-boot/u-boot_1.1.2.bb +++ b/packages/u-boot/u-boot_1.1.2.bb @@ -1,8 +1,11 @@ -PR = "r2" +PR = "r3" require u-boot.inc SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \ file://arm_flags.patch;patch=1 " +# Override whole URI fr Neon since Neon patch is incompatible with arm_flags patch. +SRC_URI_bd-neon = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \ + file://u-boot-1.1.2-neon.patch;patch=1" SRC_URI_append_vibren = "ftp://bec-systems.com/pub/pxa255_idp/u-boot/uboot_pxa255-idp_2005-03-23.patch;patch=1" SRC_URI_append_mnci = "file://mnci.patch;patch=1 \ file://mnci-jffs2.patch;patch=1 \ @@ -10,7 +13,7 @@ SRC_URI_append_mnci = "file://mnci.patch;patch=1 \ file://command-names.patch;patch=1" SRC_URI_append_magicbox = "file://u-boot-emetec.patch;patch=1 " -SRC_URI_append_bd-neon = "file://u-boot-1.1.2-neon.patch;patch=1" + # TODO: SRC_URI_append_rt3000 @@ -32,6 +35,11 @@ do_compile () { RDEPENDS_append_mnci = " hwctrl" FILES_${PN}_mnci = "/tmp/${UBOOT_IMAGE}" + +do_configure_prepend_bd-neon () { + chmod +x ${S}/Configure +} + do_install_openmn() { install -d ${D}/tmp install ${S}/u-boot.bin ${D}/tmp/${UBOOT_IMAGE} -- cgit v1.2.3 From 7bf7cd27ba230a15d35459d437f068377cba9fe8 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Mon, 11 Feb 2008 17:45:19 +0000 Subject: bonnie++: add 1.03c --- packages/bonnie/bonnie++.inc | 29 +++++++++++++++++++++++++++++ packages/bonnie/bonnie++_1.03a.bb | 30 +----------------------------- packages/bonnie/bonnie++_1.03c.bb | 1 + 3 files changed, 31 insertions(+), 29 deletions(-) create mode 100644 packages/bonnie/bonnie++.inc create mode 100644 packages/bonnie/bonnie++_1.03c.bb diff --git a/packages/bonnie/bonnie++.inc b/packages/bonnie/bonnie++.inc new file mode 100644 index 0000000000..dabe6dc1f7 --- /dev/null +++ b/packages/bonnie/bonnie++.inc @@ -0,0 +1,29 @@ +# bonnie OE build file +# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved +# Released under the MIT license (see packages/COPYING) + +DESCRIPTION="Tests large file IO and creation/deletion of small files." +LICENSE="GPL" + + +SRC_URI="http://www.coker.com.au/bonnie++/${PN}-${PV}.tgz" + +inherit autotools + +EXES="bonnie++ zcav" +SCRIPTS="bon_csv2html bon_csv2txt" + +PACKAGES += "bonnie-scripts" + +FILES_${PN} = "/sbin" +FILES_bonnie-scripts="/bin" + +S="${WORKDIR}/${PN}-${PV}" + +do_install () { + install -d ${D}/bin + install -d ${D}/sbin + + install -m 0755 ${EXES} ${D}/sbin + install -m 0755 ${SCRIPTS} ${D}/bin +} diff --git a/packages/bonnie/bonnie++_1.03a.bb b/packages/bonnie/bonnie++_1.03a.bb index 46d259af78..3934aff43e 100644 --- a/packages/bonnie/bonnie++_1.03a.bb +++ b/packages/bonnie/bonnie++_1.03a.bb @@ -1,29 +1 @@ -# bonnie OE build file -# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved -# Released under the MIT license (see packages/COPYING) - -DESCRIPTION="Tests large file IO and creation/deletion of small files." -LICENSE="GPL" - - -SRC_URI="${SOURCEFORGE_MIRROR}/bonnie/${PN}-${PV}.tgz" - -inherit autotools - -EXES="bonnie++ zcav" -SCRIPTS="bon_csv2html bon_csv2txt" - -PACKAGES += "bonnie-scripts" - -FILES_${PN} = "/sbin" -FILES_bonnie-scripts="/bin" - -S="${WORKDIR}/${PN}-${PV}" - -do_install () { - install -d ${D}/bin - install -d ${D}/sbin - - install -m 0755 ${EXES} ${D}/sbin - install -m 0755 ${SCRIPTS} ${D}/bin -} +require bonnie++.inc diff --git a/packages/bonnie/bonnie++_1.03c.bb b/packages/bonnie/bonnie++_1.03c.bb new file mode 100644 index 0000000000..3934aff43e --- /dev/null +++ b/packages/bonnie/bonnie++_1.03c.bb @@ -0,0 +1 @@ +require bonnie++.inc -- cgit v1.2.3 From ef5d47ec70074a507df9ea8572a9d5b8f6c1bbac Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Mon, 11 Feb 2008 20:17:35 +0000 Subject: linux.inc: typo fix for UBOOT_ADRESS --- packages/linux/linux.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc index e213a2d3f6..835437415f 100644 --- a/packages/linux/linux.inc +++ b/packages/linux/linux.inc @@ -106,7 +106,7 @@ do_configure_append_avr32() { UBOOT_ENTRYPOINT ?= "20008000" -UBOOT_LOADADRESS ?= "${UBOOT_ENTRYPOINT}" +UBOOT_LOADADDRESS ?= "${UBOOT_ENTRYPOINT}" do_compile_append() { if test "x${KERNEL_IMAGETYPE}" = "xuImage" ; then @@ -117,13 +117,13 @@ do_compile_append() { fi if test -e arch/${ARCH}/boot/compressed/vmlinux ; then ${OBJCOPY} -O binary -R .note -R .comment -S arch/${ARCH}/boot/compressed/vmlinux linux.bin - uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_LOADADRESS} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage + uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_LOADADDRESS} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage rm -f linux.bin else ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin rm -f linux.bin.gz gzip -9 linux.bin - uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_LOADADRESS} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage + uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_LOADADDRESS} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage rm -f linux.bin.gz fi fi -- cgit v1.2.3 From 3326472c3a600c74d0acd5c4b1ec3588ca30aad8 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Mon, 11 Feb 2008 21:16:03 +0000 Subject: mpc8313e-rdb.conf: Add UBOOT_ENTRYPOINT and UBOOT_LOADADDRESS. --- conf/machine/mpc8313e-rdb.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/machine/mpc8313e-rdb.conf b/conf/machine/mpc8313e-rdb.conf index 27706cbd4a..a43f621406 100644 --- a/conf/machine/mpc8313e-rdb.conf +++ b/conf/machine/mpc8313e-rdb.conf @@ -14,6 +14,8 @@ KERNEL_IMAGETYPE = "uImage" PREFERRED_VERSION_u-boot = "1.3.1" UBOOT_MACHINE = "MPC8313ERDB_33_config" +UBOOT_ENTRYPOINT = "0" +UBOOT_LOADADDRESS = "0" #rootfs on NAND flash EXTRA_IMAGECMD_jffs2 = "--pad --big-endian --eraseblock=0x4000 --no-cleanmarkers" -- cgit v1.2.3 From 9a5744657866150cbaf433bd3b32253fe26421ea Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Mon, 11 Feb 2008 23:14:34 +0000 Subject: logic-analyzer: Small fixes. - added java2-runtime RDEPENDS - added classpath-awt RDEPENDS - added patch to make capture dialog scrollable (for small screens) --- .../files/scrolling-capture-dialog.patch | 21 +++++++++++++++++++++ packages/logic-analyzer/logic-analyzer_0.8.bb | 5 ++++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 packages/logic-analyzer/files/scrolling-capture-dialog.patch diff --git a/packages/logic-analyzer/files/scrolling-capture-dialog.patch b/packages/logic-analyzer/files/scrolling-capture-dialog.patch new file mode 100644 index 0000000000..91e9ce0766 --- /dev/null +++ b/packages/logic-analyzer/files/scrolling-capture-dialog.patch @@ -0,0 +1,21 @@ +Index: LogicAnalyzer/client/org/sump/analyzer/DeviceController.java +=================================================================== +--- LogicAnalyzer.orig/client/org/sump/analyzer/DeviceController.java 2008-02-11 23:34:01.000000000 +0100 ++++ LogicAnalyzer/client/org/sump/analyzer/DeviceController.java 2008-02-11 23:35:17.000000000 +0100 +@@ -43,6 +43,7 @@ + import javax.swing.JProgressBar; + import javax.swing.JTabbedPane; + import javax.swing.JTextField; ++import javax.swing.JScrollPane; + import javax.swing.Timer; + + import org.sump.util.Properties; +@@ -312,7 +313,7 @@ + // if no valid dialog exists, create one + if (dialog == null) { + dialog = new JDialog(frame, "Capture", true); +- dialog.getContentPane().add(this); ++ dialog.getContentPane().add(new JScrollPane(this)); + dialog.setResizable(false); + dialog.setSize(this.getPreferredSize()); + // dialog.pack(); diff --git a/packages/logic-analyzer/logic-analyzer_0.8.bb b/packages/logic-analyzer/logic-analyzer_0.8.bb index f66752ad31..863a7a3e00 100644 --- a/packages/logic-analyzer/logic-analyzer_0.8.bb +++ b/packages/logic-analyzer/logic-analyzer_0.8.bb @@ -2,15 +2,18 @@ DESCRIPTION = "A Java-based logical analyzer for home use." LICENSE = "GPL" HOMEPAGE = "http://sump.org/projects/analyzer/" +PR = "r1" + inherit java DEPENDS = "rxtx" -RDEPENDS = "librxtx-java" +RDEPENDS = "java2-runtime classpath-awt librxtx-java" SRC_URI = "\ http://sump.org/projects/analyzer/downloads/la-src-${PV}.tar.bz2 \ file://cp-run-fix.patch;patch=1 \ file://client-makefile.patch;patch=1 \ + file://scrolling-capture-dialog.patch;patch=1 \ " S = "${WORKDIR}/LogicAnalyzer" -- cgit v1.2.3 From 2fe10c088ac5f959fcce4aac04d596f88f598fdd Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Mon, 11 Feb 2008 23:46:01 +0000 Subject: linux-2.6.24: Added mpc8313e-rdb machine as supported. --- .../linux/linux-2.6.24/mpc8313e-rdb/.mtn2git_empty | 0 packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig | 1938 ++++++++++++++++++++ packages/linux/linux_2.6.24.bb | 19 +- 3 files changed, 1955 insertions(+), 2 deletions(-) create mode 100644 packages/linux/linux-2.6.24/mpc8313e-rdb/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig diff --git a/packages/linux/linux-2.6.24/mpc8313e-rdb/.mtn2git_empty b/packages/linux/linux-2.6.24/mpc8313e-rdb/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig b/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig new file mode 100644 index 0000000000..3cc17679c1 --- /dev/null +++ b/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig @@ -0,0 +1,1938 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23 +# Mon Dec 17 17:18:08 2007 +# +# CONFIG_PPC64 is not set + +# +# Processor support +# +CONFIG_6xx=y +# CONFIG_PPC_85xx is not set +# CONFIG_PPC_8xx is not set +# CONFIG_40x is not set +# CONFIG_44x is not set +# CONFIG_E200 is not set +CONFIG_83xx=y +CONFIG_PPC_FPU=y +CONFIG_PPC_STD_MMU=y +CONFIG_PPC_STD_MMU_32=y +# CONFIG_PPC_MM_SLICES is not set +# CONFIG_SMP is not set +CONFIG_PPC32=y +CONFIG_PPC_MERGE=y +CONFIG_MMU=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_IRQ_PER_CPU=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_ARCH_HAS_ILOG2_U32=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +# CONFIG_ARCH_NO_VIRT_TO_BUS is not set +CONFIG_PPC=y +CONFIG_EARLY_PRINTK=y +CONFIG_GENERIC_NVRAM=y +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_PPC_OF=y +CONFIG_OF=y +CONFIG_PPC_UDBG_16550=y +# CONFIG_GENERIC_TBSYNC is not set +CONFIG_AUDIT_ARCH=y +CONFIG_GENERIC_BUG=y +CONFIG_DEFAULT_UIMAGE=y +# CONFIG_PPC_DCR_NATIVE is not set +# CONFIG_PPC_DCR_MMIO is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_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_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +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_SYSCTL_SYSCALL=y +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +# CONFIG_EPOLL is not set +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# Platform support +# +# CONFIG_PPC_MULTIPLATFORM is not set +# CONFIG_EMBEDDED6xx is not set +# CONFIG_PPC_82xx is not set +CONFIG_PPC_83xx=y +# CONFIG_PPC_86xx is not set +# CONFIG_PPC_MPC52xx is not set +# CONFIG_PPC_MPC5200 is not set +# CONFIG_PPC_CELL is not set +# CONFIG_PPC_CELL_NATIVE is not set +# CONFIG_PQ2ADS is not set +CONFIG_MPC8313_RDB=y +# CONFIG_MPC832x_MDS is not set +# CONFIG_MPC832x_RDB is not set +# CONFIG_MPC834x_MDS is not set +# CONFIG_MPC834x_ITX is not set +# CONFIG_MPC836x_MDS is not set +CONFIG_PPC_MPC831x=y +# CONFIG_MPIC is not set +# CONFIG_MPIC_WEIRD is not set +# CONFIG_PPC_I8259 is not set +# CONFIG_PPC_RTAS is not set +# CONFIG_MMIO_NVRAM is not set +# CONFIG_PPC_MPC106 is not set +# CONFIG_PPC_970_NAP is not set +# CONFIG_PPC_INDIRECT_IO is not set +# CONFIG_GENERIC_IOMAP is not set +# CONFIG_CPU_FREQ is not set +# CONFIG_CPM2 is not set +# CONFIG_FSL_ULI1575 is not set + +# +# Kernel options +# +# CONFIG_HIGHMEM is not set +# 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_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_PROC_DEVICETREE=y +# CONFIG_CMDLINE_BOOL is not set +# CONFIG_PM is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_HIBERNATION_UP_POSSIBLE=y +CONFIG_SECCOMP=y +CONFIG_WANT_DEVICE_TREE=y +CONFIG_DEVICE_TREE="" +CONFIG_ISA_DMA_API=y + +# +# Bus options +# +CONFIG_ZONE_DMA=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_PPC_INDIRECT_PCI=y +CONFIG_FSL_SOC=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_SYSCALL=y +# CONFIG_PCIEPORTBUS is not set +CONFIG_ARCH_SUPPORTS_MSI=y +# CONFIG_PCI_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Advanced setup +# +# CONFIG_ADVANCED_OPTIONS is not set + +# +# Default settings for advanced configuration options are used +# +CONFIG_HIGHMEM_START=0xfe000000 +CONFIG_LOWMEM_SIZE=0x30000000 +CONFIG_KERNEL_START=0xc0000000 +CONFIG_TASK_SIZE=0x80000000 +CONFIG_BOOT_LOAD=0x00800000 + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=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=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=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_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_EVENTS is not set +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +CONFIG_ATM=m +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=m +CONFIG_LLC2=m +CONFIG_IPX=m +# CONFIG_IPX_INTERN 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=m + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_FIFO=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RR=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_INGRESS=m + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_SIMP=m +# CONFIG_NET_CLS_POLICE is not set +CONFIG_NET_CLS_IND=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_CMTP is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y + +# +# Wireless +# +CONFIG_CFG80211=y +CONFIG_WIRELESS_EXT=y +CONFIG_MAC80211=m +# CONFIG_MAC80211_LEDS is not set +# CONFIG_MAC80211_DEBUG is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_RFKILL=m +CONFIG_RFKILL_INPUT=m +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR 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 + +# +# 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=0xfe000000 +CONFIG_MTD_PHYSMAP_LEN=0x0800000 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PHYSMAP_OF is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_CAFE is not set +CONFIG_MTD_NAND_FSL_ELBC=y +# 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_OF_DEVICE=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_CRYPTOLOOP=m +# 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=32768 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +CONFIG_ATA_OVER_ETH=m +CONFIG_MISC_DEVICES=y +# CONFIG_PHANTOM is not set +CONFIG_EEPROM_93CX6=m +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +CONFIG_CHR_DEV_SG=y +# 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=y +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS 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_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_EATA is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_SRP is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_IEEE1394 is not set +# CONFIG_I2O is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_IFB 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_ARCNET is not set +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +# CONFIG_MARVELL_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_LXT_PHY is not set +CONFIG_CICADA_PHY=y +# 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_FIXED_PHY is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_DGRS is not set +# CONFIG_EEPRO100 is not set +CONFIG_E100=y +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +CONFIG_NETDEV_1000=y +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_SK98LIN is not set +# CONFIG_VIA_VELOCITY is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +CONFIG_GIANFAR=y +CONFIG_GFAR_NAPI=y +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +CONFIG_NETDEV_10000=y +# CONFIG_CHELSIO_T1 is not set +# CONFIG_CHELSIO_T3 is not set +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set +# CONFIG_MYRI10GE is not set +# CONFIG_NETXEN_NIC is not set +# CONFIG_MLX4_CORE is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_AIRO=m +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PRISM54=m +CONFIG_USB_ZD1201=m +CONFIG_RTL8187=m +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTAP_PCI=m +CONFIG_BCM43XX=m +CONFIG_BCM43XX_DEBUG=y +CONFIG_BCM43XX_DMA=y +CONFIG_BCM43XX_PIO=y +CONFIG_BCM43XX_DMA_AND_PIO_MODE=y +# CONFIG_BCM43XX_DMA_MODE is not set +# CONFIG_BCM43XX_PIO_MODE is not set +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +CONFIG_ATM_DRIVERS=y +# CONFIG_ATM_DUMMY is not set +# CONFIG_ATM_TCP is not set +# CONFIG_ATM_LANAI is not set +# CONFIG_ATM_ENI is not set +# CONFIG_ATM_FIRESTREAM is not set +# CONFIG_ATM_ZATM is not set +# CONFIG_ATM_NICSTAR is not set +# CONFIG_ATM_IDT77252 is not set +# CONFIG_ATM_AMBASSADOR is not set +# CONFIG_ATM_HORIZON is not set +# CONFIG_ATM_IA is not set +# CONFIG_ATM_FORE200E_MAYBE is not set +# CONFIG_ATM_HE is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +CONFIG_PPPOATM=m +CONFIG_PPPOL2TP=m +# 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=m +CONFIG_ISDN_I4L=m +# CONFIG_ISDN_PPP is not set +# CONFIG_ISDN_AUDIO is not set + +# +# ISDN feature submodules +# +CONFIG_ISDN_DRV_LOOP=m +CONFIG_ISDN_DIVERSION=m + +# +# ISDN4Linux hardware drivers +# + +# +# Passive cards +# +CONFIG_ISDN_DRV_HISAX=m + +# +# D-channel protocol features +# +CONFIG_HISAX_EURO=y +CONFIG_DE_AOC=y +# CONFIG_HISAX_NO_SENDCOMPLETE is not set +# CONFIG_HISAX_NO_LLC is not set +# CONFIG_HISAX_NO_KEYPAD is not set +CONFIG_HISAX_1TR6=y +CONFIG_HISAX_NI1=y +CONFIG_HISAX_MAX_CARDS=8 + +# +# HiSax supported cards +# +CONFIG_HISAX_16_3=y +CONFIG_HISAX_S0BOX=y +CONFIG_HISAX_FRITZPCI=y +CONFIG_HISAX_AVM_A1_PCMCIA=y +CONFIG_HISAX_ELSA=y +CONFIG_HISAX_DIEHLDIVA=y +CONFIG_HISAX_SEDLBAUER=y +CONFIG_HISAX_NICCY=y +CONFIG_HISAX_BKM_A4T=y +CONFIG_HISAX_SCT_QUADRO=y +CONFIG_HISAX_GAZEL=y +CONFIG_HISAX_W6692=y +CONFIG_HISAX_HFC_SX=y +# CONFIG_HISAX_DEBUG is not set + +# +# HiSax PCMCIA card service modules +# + +# +# HiSax sub driver modules +# +CONFIG_HISAX_ST5481=m +CONFIG_HISAX_HFCUSB=m +CONFIG_HISAX_HFC4S8S=m +CONFIG_HISAX_FRITZ_PCIPNP=m +CONFIG_HISAX_HDLC=y + +# +# Active cards +# +CONFIG_HYSDN=m +CONFIG_HYSDN_CAPI=y +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_GIGASET_BASE=m +CONFIG_GIGASET_M105=m +CONFIG_GIGASET_M101=m +# CONFIG_GIGASET_DEBUG is not set +CONFIG_GIGASET_UNDOCREQ=y +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_CAPI_TRACE=y +# CONFIG_ISDN_CAPI_MIDDLEWARE is not set +CONFIG_ISDN_CAPI_CAPI20=m +# CONFIG_ISDN_CAPI_CAPIDRV is not set + +# +# CAPI hardware drivers +# +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +# CONFIG_ISDN_DRV_AVMB1_B1PCIV4 is not set +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=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_UARTLITE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_OF_PLATFORM is not set +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_IPMI_HANDLER is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_83xx_WDT=y + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_GEN_RTC is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_PIIX4 is not set +CONFIG_I2C_MPC=y +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_M41T00 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +CONFIG_SPI_BITBANG=y +CONFIG_SPI_MPC83xx=y + +# +# SPI Protocol Masters +# +CONFIG_SPI_AT25=m +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_TLE62X0=m +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set +# CONFIG_SENSORS_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_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_FSCPOS is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +CONFIG_SENSORS_LM75=m +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83781D 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 + +# +# 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=y +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +# CONFIG_FB is not set +# CONFIG_FB_IBM_GXT4500 is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_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_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# ALSA PowerMac devices +# + +# +# ALSA PowerPC devices +# + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +# 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_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=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_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=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +CONFIG_USB_EHCI_FSL=y +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PPC_OF=y +CONFIG_USB_OHCI_HCD_PPC_OF_BE=y +# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y +CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=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_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=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_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 +# +# CONFIG_USB_ATM is not set + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +CONFIG_USB_GADGET_NET2280=y +CONFIG_USB_NET2280=y +# 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 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=m +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_BOUNCE=y + +# +# MMC/SD Host Controller Drivers +# +# CONFIG_MMC_SDHCI is not set +# CONFIG_MMC_WBSD is not set +# CONFIG_MMC_TIFM_SD is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_MPC8313E_RDB=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=m +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_INTF_DEV_UIE_EMUL=y +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=y +# 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 +# + +# +# DMA Engine support +# +CONFIG_DMA_ENGINE=y + +# +# DMA Clients +# +CONFIG_NET_DMA=y + +# +# DMA Devices +# +CONFIG_INTEL_IOATDMA=y + +# +# Userspace I/O +# +CONFIG_UIO=m +CONFIG_UIO_CIF=m + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_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=y +# 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=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_RW=y + +# +# 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_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +CONFIG_CRAMFS=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 + +# +# Network File Systems +# +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 is not set +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=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR 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=y +# CONFIG_LDM_DEBUG is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=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=y +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +CONFIG_NLS_ISO8859_8=y +# 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 + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set +# CONFIG_UCC_SLOW 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_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y + +# +# Instrumentation Support +# +CONFIG_PROFILING=y +CONFIG_OPROFILE=m + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_PPC_EARLY_DEBUG is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_HW=y diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb index 9a392d934c..64a2a58361 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -3,8 +3,11 @@ require linux.inc # Mark archs/machines that this kernel supports DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_gesbc-9302 = "1" +DEFAULT_PREFERENCE_mpc8313e-rdb = "1" -PR = "r1" +DEPENDS_append_mpc8313e-rdb = " dtc-native" + +PR = "r2" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ file://defconfig \ @@ -20,11 +23,23 @@ SRC_URI_append_gesbc-9302 = " \ CMDLINE_gesbc-9302 = "console=ttyAM0 root=mtd5 rootfstype=jffs2 mtdparts=GESBC-NAND:64m(app),-(data)" +# work in progress +#SRC_URI_append_mpc8313e-rdb = "\ +# file://mpc8313e-rdb-leds.patch;patch=1" +# file://mpc831x-nand.patch;patch=1 \ +# file://mpc8313e-rdb-rtc.patch;patch=1 " + +# real-time preemption patch +SRC_URI_append_mpc8313e-rdb = " http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.24-rt1.bz2;patch=1 file://defconfig-rt " + FILES_kernel-image_gesbc-9302 = "" +DEVICETREE_mpc8313e-rdb = "arch/${ARCH}/boot/dts/mpc8313erdb.dts" +DEVICETREE_FLAGS_mpc8313e-rdb = "-R 8 -S 0x3000" + do_devicetree_image() { if test -n "${DEVICETREE}" ; then - dtc -I dts -O dtb -o ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb ${DEVICETREE} + dtc -I dts -O dtb ${DEVICETREE_FLAGS} -o ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb ${DEVICETREE} cd ${DEPLOY_DIR_IMAGE} rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.dtb -- cgit v1.2.3 From 4a0a8f2bbfcec5145178091c5703be7f5dfc034c Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Tue, 12 Feb 2008 00:30:46 +0000 Subject: kobodeluxe: Fixed and patches. - provide default configuration file - added patch that makes use of a default config file - wire device screen size into default config file - added a patch that allows complete game control with touchscreen - added a patch that automatically swaps display dimensions at startup --- packages/kobodeluxe/files/buildfix.patch | 21 -- packages/kobodeluxe/files/default-config | 70 ++++++ .../files/kobodeluxe-dimension-autoswap.patch | 236 ++++++++++++++++++ .../kobodeluxe/files/kobodeluxe-menu-pointer.patch | 266 +++++++++++++++++++++ packages/kobodeluxe/files/kobodeluxe-putenv.patch | 69 ++++++ .../files/kobodeluxe-sysconf-support.patch | 84 +++++++ packages/kobodeluxe/kobodeluxe_0.5.1.bb | 26 +- 7 files changed, 748 insertions(+), 24 deletions(-) delete mode 100644 packages/kobodeluxe/files/buildfix.patch create mode 100644 packages/kobodeluxe/files/default-config create mode 100644 packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch create mode 100644 packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch create mode 100644 packages/kobodeluxe/files/kobodeluxe-putenv.patch create mode 100644 packages/kobodeluxe/files/kobodeluxe-sysconf-support.patch diff --git a/packages/kobodeluxe/files/buildfix.patch b/packages/kobodeluxe/files/buildfix.patch deleted file mode 100644 index 01a97e14f2..0000000000 --- a/packages/kobodeluxe/files/buildfix.patch +++ /dev/null @@ -1,21 +0,0 @@ -Index: kobodeluxe-0.5.1/graphics/gfxengine.cpp -=================================================================== ---- kobodeluxe-0.5.1.orig/graphics/gfxengine.cpp 2008-02-10 03:02:29.000000000 +0100 -+++ kobodeluxe-0.5.1/graphics/gfxengine.cpp 2008-02-10 03:03:45.000000000 +0100 -@@ -25,6 +25,7 @@ - - #include - #include -+#include - - #include "gfxengine.h" - #include "filters.h" -@@ -765,7 +766,7 @@ - return 0; - - if(_centered && !_fullscreen) -- SDL_putenv((char *)"SDL_VIDEO_CENTERED=1"); -+ putenv((char *)"SDL_VIDEO_CENTERED=1"); - - log_printf(DLOG, "Opening screen...\n"); - if(!SDL_WasInit(SDL_INIT_VIDEO)) diff --git a/packages/kobodeluxe/files/default-config b/packages/kobodeluxe/files/default-config new file mode 100644 index 0000000000..4a8f5f7a96 --- /dev/null +++ b/packages/kobodeluxe/files/default-config @@ -0,0 +1,70 @@ +#-------------------------------------------- +# Kobo Deluxe 0.5.1 Configuration File +#-------------------------------------------- +# Switches - [no] +# Values - [|""] +#-------------------------------------------- +#--- System options -------------------------- +nologfile +logformat 0 +logverbosity 2 +#--- Input options -------------------------- +nojoystick +joystick_no 0 +mouse +mousemode 1 +nobroken_numdia +dia_emphasis 0 +noalways_fire +mousecapture +#--- Game options --------------------------- +scrollradar 2 +filter +timefilter 50 +countdown 5 +starfield 2 +stars 250 +overheatloud 100 +cannonloud 100 +#--- Sound settings ------------------------- +nosound +music +nocached_sounds +samplerate 8000 +latency 50 +mixquality 1 +vol 100 +intro_vol 100 +sfx_vol 100 +music_vol 30 +reverb 100 +vol_boost 0 +#--- Video settings ------------------------- +fullscreen +videodriver 0 +width WIDTH_HERE +height HEIGHT_HERE +autoswap +aspect 1 +depth 0 +maxfps 100 +maxfpsstrict 0 +buffer 0 +shadow +videomode -1 +vsync +videopages -1 +#--- Graphics settings ---------------------- +scalemode 0 +nodither +dither_type 2 +nobroken_rgba8 +alpha +brightness 100 +contrast 100 +#--- File paths ----------------------------- +files "" +gfx "" +sfx "" +scores "" +wait 30 diff --git a/packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch b/packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch new file mode 100644 index 0000000000..273e523103 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch @@ -0,0 +1,236 @@ +Index: KoboDeluxe-0.5.1/graphics/gfxengine.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/graphics/gfxengine.cpp 2008-02-11 13:17:27.000000000 +0100 ++++ KoboDeluxe-0.5.1/graphics/gfxengine.cpp 2008-02-11 15:27:57.000000000 +0100 +@@ -135,11 +135,13 @@ + + _width = w; + _height = h; ++ + if(csengine) + cs_engine_set_size(csengine, w, h); + + if(was_showing) + show(); ++ + } + + void gfxengine_t::centered(int c) +@@ -759,33 +761,13 @@ + Display show/hide + ----------------------------------------------------------*/ + +-int gfxengine_t::show() ++/** Helper method that returns the flags value needed for ++ * SDL_SetVideoMode() and SDL_VideoModeOK(). ++ */ ++int gfxengine_t::video_flags() + { + int flags = 0; + +- if(!is_open) +- return -1; +- +- if(is_showing) +- return 0; +- +- if(_centered && !_fullscreen) +-#if HAVE_DECL_SDL_PUTENV +- SDL_putenv("SDL_VIDEO_CENTERED=1"); +-#elif defined(HAVE_PUTENV) +- putenv("SDL_VIDEO_CENTERED=1"); +-#else +- #error Neither SDL_putenv() nor putenv() are available. Fix it! +-#endif +- +- log_printf(DLOG, "Opening screen...\n"); +- if(!SDL_WasInit(SDL_INIT_VIDEO)) +- if(SDL_InitSubSystem(SDL_INIT_VIDEO) == -1) +- { +- log_printf(ELOG, "Failed to initialize SDL!\n"); +- return -2; +- } +- + switch(_driver) + { + case GFX_DRIVER_SDL2D: +@@ -830,11 +812,72 @@ + glSDL_VSync(_vsync); + flags |= xflags; + ++ return flags; ++} ++ ++bool gfxengine_t::check_mode_autoswap(int *w, int *h) ++{ ++ log_printf(VLOG, "Trying display modes %dx%d and %dx%d if the first fails.\n", *w, *h, *h, *w); ++ ++ int flags = video_flags(); ++ ++ SDL_Surface *test_surface = NULL; ++ ++ // On some platforms SDL_VideoModeOK() cannot be trusted unfortunately. ++ if(!(test_surface = SDL_SetVideoMode(*w, *h, _depth, flags))) ++ { ++ if(!(test_surface = SDL_SetVideoMode(*h, *w, _depth, flags))) ++ { ++ log_printf(ELOG, "Failed with both display mode. Giving up!\n"); ++ return false; ++ } ++ ++ int temp = *w; ++ *w = *h; ++ *h = temp; ++ ++ log_printf(VLOG, "Display dimensions swapped. Using %dx%d!\n", *w, *h); ++ } ++ else ++ log_printf(VLOG, "Stored display dimension worked. Using %dx%d!\n", *w, *h); ++ ++ SDL_FreeSurface(test_surface); ++ ++ return true; ++} ++ ++int gfxengine_t::show() ++{ ++ if(!is_open) ++ return -1; ++ ++ if(is_showing) ++ return 0; ++ ++ if(_centered && !_fullscreen) ++#if HAVE_DECL_SDL_PUTENV ++ SDL_putenv("SDL_VIDEO_CENTERED=1"); ++#elif defined(HAVE_PUTENV) ++ putenv("SDL_VIDEO_CENTERED=1"); ++#else ++ #error Neither SDL_putenv() nor putenv() are available. Fix it! ++#endif ++ ++ log_printf(DLOG, "Opening screen...\n"); ++ if(!SDL_WasInit(SDL_INIT_VIDEO)) ++ if(SDL_InitSubSystem(SDL_INIT_VIDEO) == -1) ++ { ++ log_printf(ELOG, "Failed to initialize SDL!\n"); ++ return -2; ++ } ++ ++ int flags = video_flags(); ++ + screen_surface = SDL_SetVideoMode(_width, _height, _depth, flags); + if(!screen_surface) + { +- log_printf(ELOG, "Failed to open display!\n"); +- return -3; ++ log_printf(ELOG, "Failed to open display with %dx%d! Giving up.\n", _width, _height); ++ return -3; + } + + if(_driver != GFX_DRIVER_GLSDL) +Index: KoboDeluxe-0.5.1/graphics/gfxengine.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/graphics/gfxengine.h 2008-02-11 13:24:51.000000000 +0100 ++++ KoboDeluxe-0.5.1/graphics/gfxengine.h 2008-02-11 15:15:50.000000000 +0100 +@@ -54,6 +54,9 @@ + class gfxengine_t + { + friend class window_t; ++ ++ int video_flags(); ++ + public: + gfxengine_t(); + virtual ~gfxengine_t(); +@@ -135,6 +138,7 @@ + void title(const char *win, const char *icon); + + /* Display show/hide */ ++ bool check_mode_autoswap(int *, int *); + int show(); + void hide(); + +Index: KoboDeluxe-0.5.1/kobo.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.cpp 2008-02-11 13:16:24.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.cpp 2008-02-11 14:57:29.000000000 +0100 +@@ -641,8 +641,27 @@ + gengine->title("Kobo Deluxe " VERSION, "kobodl"); + gengine->driver((gfx_drivers_t)p->videodriver); + ++ // Initializes gfxengine with all kinds of display properties. ++ // We need this at this point to make the autoswap check work ++ // properly. Since these properties are independent of other ++ // values that is no problem. ++ gengine->mode(0, p->fullscreen); ++ gengine->doublebuffer(p->doublebuf); ++ gengine->pages(p->pages); ++ gengine->vsync(p->vsync); ++ gengine->shadow(p->shadow); ++ gengine->cursor(0); ++ ++ // Do the auto swap dance only if configured so. ++ if (prefs->autoswap) ++ { ++ if (!gengine->check_mode_autoswap(&p->width, &p->height)) ++ return -1; ++ } ++ + dw = p->width; + dh = p->height; ++ + if(p->fullscreen) + { + // This game assumes 1:1 pixel aspect ratio, or 4:3 +@@ -696,13 +715,6 @@ + yoffs = (int)((dh - gh) / 2 / gengine->yscale()); + gengine->size(dw, dh); + +- gengine->mode(0, p->fullscreen); +- gengine->doublebuffer(p->doublebuf); +- gengine->pages(p->pages); +- gengine->vsync(p->vsync); +- gengine->shadow(p->shadow); +- gengine->cursor(0); +- + gengine->period(game.speed); + sound.period(game.speed); + gengine->timefilter(p->timefilter * 0.01f); +Index: KoboDeluxe-0.5.1/prefs.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/prefs.cpp 2008-02-11 14:28:01.000000000 +0100 ++++ KoboDeluxe-0.5.1/prefs.cpp 2008-02-11 14:30:15.000000000 +0100 +@@ -86,6 +86,7 @@ + desc("Display Driver"); + key("width", width, 640); desc("Horizontal Resolution"); + key("height", height, 480); desc("Vertical Resolution"); ++ yesno("autoswap", autoswap, 0); desc("Automatically swap display dimension"); + key("aspect", aspect, 1000); desc("Pixel Aspect Ratio"); + key("depth", depth, 0); desc("Display Depth"); + key("maxfps", max_fps, 100); desc("Maximum fps"); +Index: KoboDeluxe-0.5.1/prefs.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/prefs.h 2008-02-11 14:28:01.000000000 +0100 ++++ KoboDeluxe-0.5.1/prefs.h 2008-02-11 14:31:24.000000000 +0100 +@@ -76,6 +76,7 @@ + int videodriver; //Internal video driver + int width; //Screen/window width + int height; //Screen/window height ++ int autoswap; // Automatically swap dimensions if initialization fails + int aspect; //Pixel aspect ratio * 1000 + int depth; //Bits per pixel + int max_fps; //Maximum fps +Index: KoboDeluxe-0.5.1/states.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/states.cpp 2008-02-11 14:32:13.000000000 +0100 ++++ KoboDeluxe-0.5.1/states.cpp 2008-02-11 15:00:13.000000000 +0100 +@@ -117,6 +117,8 @@ + switch (button) + { + case BTN_EXIT: ++ gsm.push(&st_ask_exit); ++ break; + case BTN_CLOSE: + gsm.push(&st_main_menu); + break; diff --git a/packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch b/packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch new file mode 100644 index 0000000000..160d3ce896 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch @@ -0,0 +1,266 @@ +Index: KoboDeluxe-0.5.1/README +=================================================================== +--- KoboDeluxe-0.5.1.orig/README 2008-02-11 01:10:23.000000000 +0100 ++++ KoboDeluxe-0.5.1/README 2008-02-11 01:17:30.000000000 +0100 +@@ -39,6 +39,12 @@ + key diagonals. Escape enters the meny system, from where it is possi- + ble to change settings, start a new game or exit the game. + ++ In case the touchscreen support has been compiled in the menu can be ++ controlled by clicking the frame borders. Touching the inner part of ++ the screen is like a button press. In the game mode a click in the ++ upper right corner activates pause mode and the lower right corner es- ++ capes to the menu. ++ + OPTIONS + Note that all relevant options can be also configured in the config + file, which can be edited directly, or using the options menus in the +Index: KoboDeluxe-0.5.1/config.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/config.h 2008-02-11 00:23:20.000000000 +0100 ++++ KoboDeluxe-0.5.1/config.h 2008-02-11 02:01:17.000000000 +0100 +@@ -95,6 +95,15 @@ + #define MARGIN 8 + + /* ++ * Fraction of the screen size in which clicks are not considered ++ * clicks but movements in that direction (as regarded from the ++ * center of the screen) or other special things (pause & exit). ++ * ++ * Used only in touchscreen mode. ++ */ ++#define POINTER_MARGIN_PERCENT 10 ++ ++/* + * (In XKobo, WSIZE was used where this is + * used now; in the game logic code.) + * +Index: KoboDeluxe-0.5.1/configure.in +=================================================================== +--- KoboDeluxe-0.5.1.orig/configure.in 2008-02-11 00:37:18.000000000 +0100 ++++ KoboDeluxe-0.5.1/configure.in 2008-02-11 00:48:59.000000000 +0100 +@@ -195,6 +195,16 @@ + CXXFLAGS="$CXXFLAGS -DHAVE_OPENGL" + fi + ++AC_ARG_ENABLE( ++ touchscreen, ++ [AS_HELP_STRING( ++ [--enable-touchscreen], ++ [Compile menu control support suitable for touchscreens (default is no)])], ++ AC_DEFINE( ++ [ENABLE_TOUCHSCREEN], ++ [1], ++ [Set to 1 if the menusystem should support touchscreen input]), ++ []) + + dnl------------------------------------------------------- + dnl Checks for header files. +Index: KoboDeluxe-0.5.1/kobo.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.cpp 2008-02-11 00:24:57.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.cpp 2008-02-11 16:02:23.000000000 +0100 +@@ -28,6 +28,8 @@ + // Use this to benchmark and create a new percentage table! + #undef TIME_PROGRESS + ++#include ++ + #include + #include + #include +@@ -671,6 +673,10 @@ + gh = dh; + } + ++#if ENABLE_TOUCHSCREEN ++ gengine->setup_pointer_margin(dw, dh); ++#endif ++ + // Scaling has 16ths granularity, so tiles scale properly! + gengine->scale((int)((gw * 16 + 8) / SCREEN_WIDTH) / 16.f, + (int)((gh * 16 + 8) / SCREEN_HEIGHT) / 16.f); +@@ -1599,6 +1605,23 @@ + { + } + ++#ifdef ENABLE_TOUCHSCREEN ++void kobo_gfxengine_t::setup_pointer_margin(int dw, int dh) ++{ ++ // Precalculates the border ranges. Mouse clicks outside these are handled ++ // specially. ++ pointer_margin_width_min = dw * POINTER_MARGIN_PERCENT / 100; ++ pointer_margin_width_max = dw - dw * POINTER_MARGIN_PERCENT / 100; ++ pointer_margin_height_min = dh * POINTER_MARGIN_PERCENT / 100; ++ pointer_margin_height_max = dh - dh * POINTER_MARGIN_PERCENT / 100; ++ ++ log_printf(VLOG, "Pointer margin range [%d, %d, %d, %d]\n", ++ pointer_margin_width_min, ++ pointer_margin_width_max, ++ pointer_margin_height_min, ++ pointer_margin_height_max); ++} ++#endif + + void kobo_gfxengine_t::frame() + { +@@ -1800,11 +1823,57 @@ + mouse_y - MARGIN - WSIZE/2); + break; + case SDL_MOUSEBUTTONDOWN: +- mouse_x = (int)(ev.motion.x / gengine->xscale()) - km.xoffs; +- mouse_y = (int)(ev.motion.y / gengine->yscale()) - km.yoffs; +- gsm.press(BTN_FIRE); ++ mouse_x = (int)(ev.button.x / gengine->xscale()) - km.xoffs; ++ mouse_y = (int)(ev.button.y / gengine->yscale()) - km.yoffs; + if(prefs->use_mouse) + { ++#if ENABLE_TOUCHSCREEN ++ if (ev.motion.x <= pointer_margin_width_min) ++ { ++ gsm.press(BTN_LEFT); ++ pointer_margin_used = true; ++ } else if (ev.motion.x >= pointer_margin_width_max) ++ { ++ // Upper right corner invokes pause. ++ // Lower right corner invokes exit. ++ // Otherwise it is just 'right'. :) ++ if (ev.motion.y <= pointer_margin_height_min) ++ { ++ gsm.press(BTN_PAUSE); ++ gamecontrol.press(BTN_PAUSE); ++ } ++ else ++ gsm.press((ev.motion.y >= pointer_margin_height_max ++ ? BTN_EXIT ++ : BTN_RIGHT)); ++ ++ pointer_margin_used = true; ++ ++ } ++ ++ if (ev.motion.y <= pointer_margin_height_min) ++ { ++ // Handle as 'up' only if it was not in the 'pause' area. ++ // Still handle as clicked, so 'fire' will not kick in. ++ if (ev.motion.x < pointer_margin_width_max) ++ gsm.press(BTN_UP); ++ pointer_margin_used = true; ++ } else if (ev.motion.y >= pointer_margin_height_max) ++ { ++ // Handle as 'down' only if it was not in the 'exit' area. ++ // Still handle as clicked, so 'fire' will not kick in. ++ if (ev.motion.x < pointer_margin_width_max) ++ gsm.press(BTN_DOWN); ++ ++ pointer_margin_used = true; ++ } ++ ++ if (!pointer_margin_used) ++ gsm.press(BTN_FIRE); ++#else ++ gsm.press(BTN_FIRE); ++#endif ++ + gamecontrol.mouse_position( + mouse_x - 8 - MARGIN - WSIZE/2, + mouse_y - MARGIN - WSIZE/2); +@@ -1824,10 +1893,24 @@ + } + break; + case SDL_MOUSEBUTTONUP: +- mouse_x = (int)(ev.motion.x / gengine->xscale()) - km.xoffs; +- mouse_y = (int)(ev.motion.y / gengine->yscale()) - km.yoffs; ++ mouse_x = (int)(ev.button.x / gengine->xscale()) - km.xoffs; ++ mouse_y = (int)(ev.button.y / gengine->yscale()) - km.yoffs; + if(prefs->use_mouse) + { ++#if ENABLE_TOUCHSCREEN ++ // Resets all kinds of buttons that might have been activated by ++ // clicking in the pointer margin. ++ if (pointer_margin_used) ++ { ++ gsm.release(BTN_EXIT); ++ gsm.release(BTN_LEFT); ++ gsm.release(BTN_RIGHT); ++ gsm.release(BTN_UP); ++ gsm.release(BTN_DOWN); ++ pointer_margin_used = false; ++ } ++#endif ++ + gamecontrol.mouse_position( + mouse_x - 8 - MARGIN - WSIZE/2, + mouse_y - MARGIN - WSIZE/2); +@@ -2078,6 +2161,19 @@ + int main(int argc, char *argv[]) + { + int cmd_exit = 0; ++ ++ printf(PACKAGE " - " VERSION " (touchscreen support: %s)\n", ++ (ENABLE_TOUCHSCREEN ? "yes" : "no")); ++ puts("Copyright (c) 1995, 1996 Akira Higuchi\n" ++ "Copyright (C) 1997 Masanao Izumo\n" ++ "Copyright (C) 1999-2001 Simon Peter\n" ++ "Copyright (C) 2002 Florian Schulze\n" ++ "Copyright (C) 2002 Jeremy Sheeley\n" ++ "Copyright (C) 2005 Erik Auerswald\n" ++ "Copyright (c) 1999-2007 David Olofson\n" ++ "This is free software; see the source for copying conditions. There is NO\n" ++ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); ++ + atexit(emergency_close); + signal(SIGTERM, breakhandler); + signal(SIGINT, breakhandler); +Index: KoboDeluxe-0.5.1/kobo.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.h 2008-02-11 00:31:23.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.h 2008-02-11 02:19:29.000000000 +0100 +@@ -23,6 +23,8 @@ + #ifndef _KOBO_H_ + #define _KOBO_H_ + ++#include ++ + #include "gfxengine.h" + #include "window.h" + #include "display.h" +@@ -45,11 +47,25 @@ + + class kobo_gfxengine_t : public gfxengine_t + { ++#if ENABLE_TOUCHSCREEN ++ bool pointer_margin_used; ++ ++ int pointer_margin_width_min; ++ int pointer_margin_width_max; ++ int pointer_margin_height_min; ++ int pointer_margin_height_max; ++#endif ++ + void frame(); + void pre_render(); + void post_render(); + public: + kobo_gfxengine_t(); ++ ++#if ENABLE_TOUCHSCREEN ++ void setup_pointer_margin(int, int); ++#endif ++ + }; + + extern kobo_gfxengine_t *gengine; +Index: KoboDeluxe-0.5.1/states.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/states.cpp 2008-02-11 03:06:41.000000000 +0100 ++++ KoboDeluxe-0.5.1/states.cpp 2008-02-11 15:42:55.000000000 +0100 +@@ -963,8 +963,6 @@ + break; + + case BTN_FIRE: +- if(!prefs->use_joystick) +- break; + case BTN_START: + case BTN_SELECT: + sound.ui_ok(); diff --git a/packages/kobodeluxe/files/kobodeluxe-putenv.patch b/packages/kobodeluxe/files/kobodeluxe-putenv.patch new file mode 100644 index 0000000000..05f7c72f81 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-putenv.patch @@ -0,0 +1,69 @@ +Index: KoboDeluxe-0.5.1/configure.in +=================================================================== +--- KoboDeluxe-0.5.1.orig/configure.in 2008-02-10 12:27:11.000000000 +0100 ++++ KoboDeluxe-0.5.1/configure.in 2008-02-10 15:50:11.000000000 +0100 +@@ -159,7 +159,6 @@ + ) + LIBS="$LIBS -lSDL_image" + +- + dnl------------------------------------------------------- + dnl Checks for OpenGL + dnl------------------------------------------------------- +@@ -214,13 +213,18 @@ + dnl------------------------------------------------------- + dnl Checks for library functions. + dnl------------------------------------------------------- ++dnl SDL_putenv may not be available in all SDL ports ++AC_CHECK_DECLS(SDL_putenv,,,[#include ]) ++ + AC_CHECK_FUNCS(strdup strstr strchr strrchr) + AC_CHECK_FUNCS(snprintf _snprintf vsnprintf _vsnprintf) + AC_CHECK_FUNCS(pow sqrt) + AC_CHECK_FUNCS(munmap mkdir select stat) + AC_CHECK_FUNCS(atexit floor memmove memset memcmp) +-AC_CHECK_FUNCS(gettimeofday) ++AC_CHECK_FUNCS(gettimeofday putenv) + AC_CHECK_FUNCS(getegid setgid) ++ ++ + AC_FUNC_MEMCMP + AC_FUNC_STRTOD + AC_FUNC_VPRINTF +Index: KoboDeluxe-0.5.1/graphics/gfxengine.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/graphics/gfxengine.cpp 2008-02-10 12:41:31.000000000 +0100 ++++ KoboDeluxe-0.5.1/graphics/gfxengine.cpp 2008-02-10 15:58:06.000000000 +0100 +@@ -21,10 +21,15 @@ + + #define DBG(x) x + ++#include ++ + #include "logger.h" + + #include + #include ++#if not (HAVE_DECL_SDL_PUTENV) and defined (HAVE_PUTENV) ++#include ++#endif + + #include "gfxengine.h" + #include "filters.h" +@@ -764,8 +769,14 @@ + if(is_showing) + return 0; + +- if(_centered && !_fullscreen) +- SDL_putenv((char *)"SDL_VIDEO_CENTERED=1"); ++ if(_centered && !_fullscreen) ++#if HAVE_DECL_SDL_PUTENV ++ SDL_putenv("SDL_VIDEO_CENTERED=1"); ++#elif defined(HAVE_PUTENV) ++ putenv("SDL_VIDEO_CENTERED=1"); ++#else ++ #error Neither SDL_putenv() nor putenv() are available. Fix it! ++#endif + + log_printf(DLOG, "Opening screen...\n"); + if(!SDL_WasInit(SDL_INIT_VIDEO)) diff --git a/packages/kobodeluxe/files/kobodeluxe-sysconf-support.patch b/packages/kobodeluxe/files/kobodeluxe-sysconf-support.patch new file mode 100644 index 0000000000..1f62b31d71 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-sysconf-support.patch @@ -0,0 +1,84 @@ +Index: KoboDeluxe-0.5.1/configure.in +=================================================================== +--- KoboDeluxe-0.5.1.orig/configure.in 2008-02-10 20:51:37.000000000 +0100 ++++ KoboDeluxe-0.5.1/configure.in 2008-02-10 21:40:09.000000000 +0100 +@@ -36,6 +36,7 @@ + SCOREDIR='$(sharedstatedir)/kobo-deluxe/scores' + CONFIGDIR='HOME>>' + CONFIGFILE='.kobodlrc' ++USE_SYSCONF=1 + EXEFILE=kobodl + case "$target_os" in + linux*) +@@ -57,6 +58,7 @@ + SCOREDIR='EXE>>scores' + CONFIGDIR='EXE>>' + CONFIGFILE='kobodl.cfg' ++ USE_SYSCONF=0 + EXEFILE=kobodl.exe + MATHLIB="" + ;; +@@ -68,6 +70,7 @@ + SCOREDIR='EXE>>scores' + CONFIGDIR='EXE>>' + CONFIGFILE='kobodl.cfg' ++ USE_SYSCONF=0 + EXEFILE=kobodl.exe + MATHLIB="" + ;; +@@ -105,10 +108,12 @@ + AM_CONDITIONAL(BUILD_MACOSX_BUNDLE, test x$build_macosx_bundle = xyes) + AM_CONDITIONAL(BUILD_SIMPLE_BUNDLE, test x$build_simple_bundle = xyes) + AM_CONDITIONAL(UNIX_SCOREDIR, test x$unix_scoredir = xyes) ++AC_DEFINE_UNQUOTED([USE_SYSCONF], [$USE_SYSCONF], [Define to 1 to use Unix-style sysconf dir for default configuration.]) + AC_SUBST(DATADIR) + AC_SUBST(SCOREDIR) + AC_SUBST(CONFIGDIR) + AC_SUBST(CONFIGFILE) ++AC_SUBST(KOBO_SYSCONF) + AC_SUBST(EXEFILE) + AC_SUBST(MATHLIB) + +Index: KoboDeluxe-0.5.1/kobo.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.cpp 2008-02-10 20:57:32.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.cpp 2008-02-10 21:27:22.000000000 +0100 +@@ -1293,9 +1293,38 @@ + FILE *f = fmap->fopen(KOBO_CONFIG_DIR "/" KOBO_CONFIG_FILE, "r"); + if(f) + { ++ log_puts(VLOG, "Loading personal configuration from: "\ ++ KOBO_CONFIG_DIR "/" KOBO_CONFIG_FILE "\n"); + p->read(f); + fclose(f); + } ++#if USE_SYSCONF ++ /* On Unixen, where they have SYSCONF_DIR (usually /etc) try to get ++ * the default configuration from a file stored there before ++ * giving up. ++ * ++ * This gives packagers a chance to provide a proper default ++ * (playable) configuration for all those little Linux-based ++ * gadgets that are flying around. ++ */ ++ else ++ { ++ f = fmap->fopen(SYSCONF_DIR "/kobo-deluxe/default-config", "r"); ++ if(f) ++ { ++ log_puts(VLOG, "Loading configuration defaults from: "\ ++ SYSCONF_DIR "/kobo-deluxe/default-config\n"); ++ ++ p->read(f); ++ fclose(f); ++ } ++ else ++ log_puts(VLOG, "Using built-in configuration defaults.\n"); ++ ++ } ++#else ++ log_puts(VLOG, "Using built-in configuration defaults.\n"); ++#endif + } + + diff --git a/packages/kobodeluxe/kobodeluxe_0.5.1.bb b/packages/kobodeluxe/kobodeluxe_0.5.1.bb index 25f2f3ceb6..cc3f85bd19 100644 --- a/packages/kobodeluxe/kobodeluxe_0.5.1.bb +++ b/packages/kobodeluxe/kobodeluxe_0.5.1.bb @@ -5,7 +5,7 @@ LICENSE = "GPL" AUTHOR = "David Olofson " HOMEPAGE = "http://olofson.net/kobodl" -PR = "r1" +PR = "r3" DEPENDS = "libsdl-image virtual/libsdl" @@ -13,7 +13,11 @@ RDEPENDS_${PN} = "${PN}-data" SRC_URI = "http://olofson.net/kobodl/download/KoboDeluxe-${PV}.tar.bz2 \ file://debian-kobo.patch;patch=1 \ - file://buildfix.patch;patch=1 \ + file://kobodeluxe-putenv.patch;patch=1 \ + file://kobodeluxe-sysconf-support.patch;patch=1 \ + file://kobodeluxe-menu-pointer.patch;patch=1 \ + file://kobodeluxe-dimension-autoswap.patch;patch=1 \ + file://default-config \ " S = "${WORKDIR}/KoboDeluxe-${PV}" @@ -22,10 +26,26 @@ inherit autotools export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config" -EXTRA_OECONF = "--disable-opengl --disable-sdltest" +EXTRA_OECONF = "--disable-opengl --disable-sdltest --enable-touchscreen" + +do_configure_prepend() { + sed -i \ + -e "s|width WIDTH_HERE|width ${MACHINE_DISPLAY_WIDTH_PIXELS}|" \ + -e "s|height HEIGHT_HERE|height ${MACHINE_DISPLAY_HEIGHT_PIXELS}|" \ + ${WORKDIR}/default-config +} + +do_install_append() { + # Provide a default (working) configuration file + install -d ${D}${sysconfdir}/kobo-deluxe + install -m 755 ${WORKDIR}/default-config ${D}${sysconfdir}/kobo-deluxe +} PACKAGES += "${PN}-data" +FILES_${PN} += "${sysconfdir}" +CONFFILES_${PN} = "${sysconfdir}/kobo-deluxe/default-config" + FILES_${PN}-data = "${datadir}" PACKAGE_ARCH_${PN}-data = "all" -- cgit v1.2.3 From 3720b9c434292ac95866a1c056ee288c34faeb22 Mon Sep 17 00:00:00 2001 From: Ovidiu Sas Date: Tue, 12 Feb 2008 03:04:03 +0000 Subject: lighttpd and sqlite promoted for slugos --- packages/meta/slugos-packages.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb index d0c3324e7f..159f74df5c 100644 --- a/packages/meta/slugos-packages.bb +++ b/packages/meta/slugos-packages.bb @@ -128,6 +128,7 @@ SLUGOS_PACKAGES = "\ libusb \ libvorbis \ libxml2 \ + lighttpd \ linphone \ litestream \ logrotate \ @@ -203,6 +204,7 @@ SLUGOS_PACKAGES = "\ sipsak \ slugimage \ smartmontools \ + sqlite \ ssmtp \ strace \ streamripper \ -- cgit v1.2.3 From 4bc81531a4298fe6cb3b3909c7587458cb1fb710 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 12 Feb 2008 11:07:28 +0000 Subject: add patch to make glibc-intermediate compile on arm-oabi * closes 3618 --- .../files/glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch | 20 ++++++++++++++++++++ packages/glibc/glibc_2.6.1.bb | 1 + 2 files changed, 21 insertions(+) create mode 100644 packages/glibc/files/glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch diff --git a/packages/glibc/files/glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch b/packages/glibc/files/glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch new file mode 100644 index 0000000000..33d5282b90 --- /dev/null +++ b/packages/glibc/files/glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch @@ -0,0 +1,20 @@ +Submitted By: Joe Ciccone +Date: 07-02-2007 +Initial Package Version: 2.6 +Origin: http://sourceware.org/ml/libc-ports/2007-05/msg00051.html +Upstream Status: Unknown +Description: Defines RTLD_SINGLE_THREAD_P for arm. + +diff -Naur glibc-2.6.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h glibc-2.6/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h +--- glibc-2.6.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2007-07-02 17:39:22.000000000 -0400 ++++ glibc-2.6/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2007-07-02 17:39:36.000000000 -0400 +@@ -126,3 +126,9 @@ + # define NO_CANCELLATION 1 + + #endif ++ ++#ifndef __ASSEMBLER__ ++# define RTLD_SINGLE_THREAD_P \ ++ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ ++ header.multiple_threads) == 0, 1) ++#endif diff --git a/packages/glibc/glibc_2.6.1.bb b/packages/glibc/glibc_2.6.1.bb index d2816f83b1..705fab6715 100644 --- a/packages/glibc/glibc_2.6.1.bb +++ b/packages/glibc/glibc_2.6.1.bb @@ -55,6 +55,7 @@ SRC_URI = "\ file://generic-bits_time.h \ file://etc/ld.so.conf \ file://generate-supported.mk \ + file://glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch;patch=1 \ " # Build fails on sh3 and sh4 without additional patches -- cgit v1.2.3 From 56266941552fbd5515113d9488ae8d879ebeeae1 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 12 Feb 2008 11:08:59 +0000 Subject: make gcc-cross compile for arm-oabi again * closes 3607 3732 --- packages/gcc/gcc-4.2.2/arm-softfloat.patch | 2 +- packages/gcc/gcc-4.2.2/arm-thumb.patch | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gcc/gcc-4.2.2/arm-softfloat.patch b/packages/gcc/gcc-4.2.2/arm-softfloat.patch index c86c83ed15..5e1edd9208 100644 --- a/packages/gcc/gcc-4.2.2/arm-softfloat.patch +++ b/packages/gcc/gcc-4.2.2/arm-softfloat.patch @@ -10,7 +10,7 @@ Index: gcc-4.0.2/gcc/config/arm/t-linux +LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ + _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ + _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ -+ _fixsfsi _fixunssfsi _floatdidf _floatdisf ++ _fixsfsi _fixunssfsi _floatdidf _floatdisf _floatundisf _floatundidf # MULTILIB_OPTIONS = mhard-float/msoft-float # MULTILIB_DIRNAMES = hard-float soft-float diff --git a/packages/gcc/gcc-4.2.2/arm-thumb.patch b/packages/gcc/gcc-4.2.2/arm-thumb.patch index 69e2f68cf2..016a7a550b 100644 --- a/packages/gcc/gcc-4.2.2/arm-thumb.patch +++ b/packages/gcc/gcc-4.2.2/arm-thumb.patch @@ -59,6 +59,6 @@ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ + _call_via_rX \ - _fixsfsi _fixunssfsi _floatdidf _floatdisf + _fixsfsi _fixunssfsi _floatdidf _floatdisf _floatundisf _floatundidf # MULTILIB_OPTIONS = mhard-float/msoft-float -- cgit v1.2.3 From 9304cb95d13c882ef9f19f42b7f73b7e529f3f99 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 12 Feb 2008 12:01:40 +0000 Subject: xorg-driver-common.inc: fix SRC_URI --- packages/xorg-driver/xorg-driver-common.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xorg-driver/xorg-driver-common.inc b/packages/xorg-driver/xorg-driver-common.inc index 76bc89fa10..a75e409c8c 100644 --- a/packages/xorg-driver/xorg-driver-common.inc +++ b/packages/xorg-driver/xorg-driver-common.inc @@ -7,7 +7,7 @@ PR = "r2" DEPENDS = "randrproto xorg-server xproto" XORG_PN = "${PN}" -SRC_URI = "${XORG_MIRROR}/individual/data/${XORG_PN}-${PV}.tar.bz2" +SRC_URI = "${XORG_MIRROR}/individual/driver/${XORG_PN}-${PV}.tar.bz2" S = "${WORKDIR}/${XORG_PN}-${PV}" -- cgit v1.2.3 From bd0a0a3248c7e4b4ffacfa9865923c25e26883be Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 12 Feb 2008 12:11:19 +0000 Subject: xf86-input-acecad: add 1.2.2 --- packages/xorg-driver/xf86-input-acecad_1.2.2.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-input-acecad_1.2.2.bb diff --git a/packages/xorg-driver/xf86-input-acecad_1.2.2.bb b/packages/xorg-driver/xf86-input-acecad_1.2.2.bb new file mode 100644 index 0000000000..c993bc7718 --- /dev/null +++ b/packages/xorg-driver/xf86-input-acecad_1.2.2.bb @@ -0,0 +1,5 @@ +require xorg-driver-input.inc + +DESCRIPTION = "X.Org X server -- AceCad input driver" +PE = "1" + -- cgit v1.2.3 From 63e622c9018b86a669dda25afadefef8b169fc05 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 12 Feb 2008 13:01:09 +0000 Subject: xf86-video-trident: add 1.2.4 --- packages/xorg-driver/xf86-video-trident_1.2.4.bb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/xorg-driver/xf86-video-trident_1.2.4.bb diff --git a/packages/xorg-driver/xf86-video-trident_1.2.4.bb b/packages/xorg-driver/xf86-video-trident_1.2.4.bb new file mode 100644 index 0000000000..fe37be5d0b --- /dev/null +++ b/packages/xorg-driver/xf86-video-trident_1.2.4.bb @@ -0,0 +1,5 @@ +require xorg-driver-video.inc + +DESCRIPTION = "X.org X server -- Trident display driver" +DEPENDS += " xf86dgaproto" +PE = "1" -- cgit v1.2.3 From b08878b547da510c22767544c24cfd75ad24a5bb Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 12 Feb 2008 13:24:39 +0000 Subject: udev: update to 118, remove noasmlinkage patch in favour of 'sed' --- packages/udev/udev-115/.mtn2git_empty | 0 packages/udev/udev-115/flags.patch | 56 ----- packages/udev/udev-115/init | 227 --------------------- packages/udev/udev-115/local.rules | 31 --- packages/udev/udev-115/noasmlinkage.patch | 36 ---- packages/udev/udev-115/permissions.rules | 101 --------- packages/udev/udev-115/udev.rules | 102 --------- .../udevtrigger_add_devname_filtering.patch | 104 ---------- packages/udev/udev-115/vol_id_ld.patch | 17 -- packages/udev/udev-118/.mtn2git_empty | 0 packages/udev/udev-118/flags.patch | 56 +++++ packages/udev/udev-118/init | 227 +++++++++++++++++++++ packages/udev/udev-118/local.rules | 31 +++ packages/udev/udev-118/permissions.rules | 101 +++++++++ packages/udev/udev-118/udev.rules | 102 +++++++++ .../udevtrigger_add_devname_filtering.patch | 104 ++++++++++ packages/udev/udev-118/vol_id_ld.patch | 17 ++ packages/udev/udev_115.bb | 68 ------ packages/udev/udev_118.bb | 72 +++++++ 19 files changed, 710 insertions(+), 742 deletions(-) delete mode 100644 packages/udev/udev-115/.mtn2git_empty delete mode 100644 packages/udev/udev-115/flags.patch delete mode 100644 packages/udev/udev-115/init delete mode 100644 packages/udev/udev-115/local.rules delete mode 100644 packages/udev/udev-115/noasmlinkage.patch delete mode 100644 packages/udev/udev-115/permissions.rules delete mode 100644 packages/udev/udev-115/udev.rules delete mode 100644 packages/udev/udev-115/udevtrigger_add_devname_filtering.patch delete mode 100644 packages/udev/udev-115/vol_id_ld.patch create mode 100644 packages/udev/udev-118/.mtn2git_empty create mode 100644 packages/udev/udev-118/flags.patch create mode 100644 packages/udev/udev-118/init create mode 100644 packages/udev/udev-118/local.rules create mode 100644 packages/udev/udev-118/permissions.rules create mode 100644 packages/udev/udev-118/udev.rules create mode 100644 packages/udev/udev-118/udevtrigger_add_devname_filtering.patch create mode 100644 packages/udev/udev-118/vol_id_ld.patch delete mode 100644 packages/udev/udev_115.bb create mode 100644 packages/udev/udev_118.bb diff --git a/packages/udev/udev-115/.mtn2git_empty b/packages/udev/udev-115/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/udev/udev-115/flags.patch b/packages/udev/udev-115/flags.patch deleted file mode 100644 index 13f20eb6a8..0000000000 --- a/packages/udev/udev-115/flags.patch +++ /dev/null @@ -1,56 +0,0 @@ ---- - Makefile | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -Index: udev-115/Makefile -=================================================================== ---- udev-115.orig/Makefile 2007-08-24 01:29:54.000000000 +0200 -+++ udev-115/Makefile 2007-09-20 17:21:45.000000000 +0200 -@@ -112,39 +112,39 @@ - AR = $(CROSS_COMPILE)ar - RANLIB = $(CROSS_COMPILE)ranlib - --CFLAGS += -g -Wall -pipe -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -+override CFLAGS = -g -Wall -pipe -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 - WARNINGS = -Wstrict-prototypes -Wsign-compare -Wshadow \ - -Wchar-subscripts -Wmissing-declarations -Wnested-externs \ - -Wpointer-arith -Wcast-align -Wsign-compare -Wmissing-prototypes --CFLAGS += $(WARNINGS) -+override CFLAGS += $(WARNINGS) - - LDFLAGS += -Wl,-warn-common,--as-needed - - OPTFLAGS = -Os --CFLAGS += $(OPTFLAGS) -+override CFLAGS += $(OPTFLAGS) - - ifeq ($(strip $(USE_LOG)),true) -- CFLAGS += -DUSE_LOG -+ override CFLAGS += -DUSE_LOG - endif - - # if DEBUG is enabled, then we do not strip - ifeq ($(strip $(DEBUG)),true) -- CFLAGS += -DDEBUG -+ override CFLAGS += -DDEBUG - endif - - ifeq ($(strip $(USE_GCOV)),true) -- CFLAGS += -fprofile-arcs -ftest-coverage -+ override CFLAGS += -fprofile-arcs -ftest-coverage - LDFLAGS += -fprofile-arcs - endif - - ifeq ($(strip $(USE_SELINUX)),true) - UDEV_OBJS += udev_selinux.o - LIB_OBJS += -lselinux -lsepol -- CFLAGS += -DUSE_SELINUX -+ override CFLAGS += -DUSE_SELINUX - endif - - ifeq ($(strip $(USE_STATIC)),true) -- CFLAGS += -DUSE_STATIC -+ override CFLAGS += -DUSE_STATIC - LDFLAGS += -static - endif - diff --git a/packages/udev/udev-115/init b/packages/udev/udev-115/init deleted file mode 100644 index 73c655a0ee..0000000000 --- a/packages/udev/udev-115/init +++ /dev/null @@ -1,227 +0,0 @@ -#!/bin/sh -e -### BEGIN INIT INFO -# Provides: udev -# Required-Start: mountvirtfs -# Required-Stop: -# Default-Start: S -# Default-Stop: -# Short-Description: Start udevd, populate /dev and load drivers. -### END INIT INFO - -# we need to unmount /dev/pts/ and remount it later over the tmpfs -unmount_devpts() { - if mountpoint -q /dev/pts/; then - umount -l /dev/pts/ - fi - - if mountpoint -q /dev/shm/; then - umount -l /dev/shm/ - fi -} - -# mount a tmpfs over /dev, if somebody did not already do it -mount_tmpfs() { - if grep -E -q "^[^[:space:]]+ /dev tmpfs" /proc/mounts; then - return - fi - - # /dev/.static/dev/ is used by MAKEDEV to access the real /dev/ directory. - # /etc/udev/ is recycled as a temporary mount point because it's the only - # directory which is guaranteed to be available. - mount -n -o bind /dev /etc/udev - - if ! mount -n -o size=$tmpfs_size,mode=0755 -t tmpfs tmpfs /dev; then - umount /etc/udev - echo "udev requires tmpfs support, not started." - exit 1 - fi - - mkdir -p /dev/.static/dev - chmod 700 /dev/.static/ - # The mount options in busybox are non-standard... - if test -x /bin/mount.util-linux - then - /bin/mount.util-linux --move /etc/udev /dev/.static/dev - elif test -x /bin/busybox - then - busybox mount -n -o move /etc/udev /dev/.static/dev - else - echo "udev requires an identifiable mount command, not started." - umount /etc/udev - umount /dev - exit 1 - fi -} - -# I hate this hack. -- Md -make_extra_nodes() { - if [ "$(echo /lib/udev/devices/*)" != "/lib/udev/devices/*" ]; then - cp -a /lib/udev/devices/* /dev/ - fi - - [ -e /etc/udev/links.conf ] || return 0 - grep '^[^#]' /etc/udev/links.conf | \ - while read type name arg1; do - [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue - case "$type" in - L) ln -s $arg1 /dev/$name ;; - D) mkdir -p /dev/$name ;; - M) mknod -m 600 /dev/$name $arg1 ;; - *) echo "links.conf: unparseable line ($type $name $arg1)" ;; - esac - done -} - -supported_kernel() { - case "$(uname -r)" in - 2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;; - 2.6.1[01]|2.6.1[01][!0-9]*) return 1 ;; - esac - return 0 -} - -set_hotplug_handler() { - case "$(uname -r)" in - 2.6.1[0-4]|2.6.1[0-4][!0-9]*) HANDLER='/sbin/udevsend' ;; - esac - echo $HANDLER > /proc/sys/kernel/hotplug -} - -# shell version of /usr/bin/tty -my_tty() { - [ -x /bin/readlink ] || return 0 - [ -e /proc/self/fd/0 ] || return 0 - readlink --silent /proc/self/fd/0 || true -} - -warn_if_interactive() { - if [ "$RUNLEVEL" = "S" -a "$PREVLEVEL" = "N" ]; then - return - fi - - TTY=$(my_tty) - if [ -z "$TTY" -o "$TTY" = "/dev/console" ]; then - return - fi - - printf "\n\n\nIt has been detected that the command\n\n\t$0 $*\n\n" - printf "has been run from an interactive shell.\n" - printf "It will probably not do what you expect, so this script will wait\n" - printf "60 seconds before continuing. Press ^C to stop it.\n" - printf "RUNNING THIS COMMAND IS HIGHLY DISCOURAGED!\n\n\n\n" - sleep 60 -} - -############################################################################## - -PATH="/sbin:/bin:/usr/bin" - -[ -x /sbin/udevd ] || exit 0 - -# defaults -tmpfs_size="2M" -udev_root="/dev" -udevd_timeout=30 - -. /etc/udev/udev.conf - -if ! supported_kernel; then - echo "udev requires a kernel >= 2.6.12, not started." - exit 1 -fi - -if [ ! -e /proc/filesystems ]; then - echo "udev requires a mounted procfs, not started." - exit 1 -fi - -if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then - echo "udev requires tmpfs support, not started." - exit 1 -fi - -if [ ! -d /sys/class/ ]; then - echo "udev requires a mounted sysfs, not started." - exit 1 -fi - -if [ ! -e /proc/sys/kernel/hotplug ]; then - echo "udev requires hotplug support, not started." - exit 1 -fi - -############################################################################## - -# When modifying this script, do not forget that between the time that -# the new /dev has been mounted and udevsynthesize has been run there will be -# no /dev/null. This also means that you cannot use the "&" shell command. - -case "$1" in - start) - if [ -e "$udev_root/.udev/" ]; then - if mountpoint -q /dev/; then - TMPFS_MOUNTED=1 - else - echo ".udev/ already exists on the static $udev_root!" - fi - else - warn_if_interactive - fi - - echo "Starting the hotplug events dispatcher" "udevd" - udevd --daemon - - set_hotplug_handler - - if [ -z "$TMPFS_MOUNTED" ]; then - unmount_devpts - mount_tmpfs - [ -d /proc/1 ] || mount -n /proc - fi - - # if this directory is not present /dev will not be updated by udev - mkdir -p /dev/.udev/ /dev/.udev/db/ /dev/.udev/queue/ /dev/.udevdb/ - # /dev/null must be created before udevd is started - make_extra_nodes - - echo "Synthesizing the initial hotplug events" - udevtrigger - - # wait for the udevd childs to finish - echo "Waiting for /dev to be fully populated" - while [ -d /dev/.udev/queue/ ]; do - sleep 1 - udevd_timeout=$(($udevd_timeout - 1)) - if [ $udevd_timeout -eq 0 ]; then - # ps axf - break - fi - done - if [ $udevd_timeout -eq 0 ]; then - echo 'timeout' - fi - ;; - - stop) - echo "Stopping the hotplug events dispatcher" "udevd" - start-stop-daemon --stop --name udevd --quiet - ;; - - restart|force-reload) - echo "Stopping the hotplug events dispatcher" "udevd" - if start-stop-daemon --stop --name udevd --quiet ; then - exit 1 - fi - - echo "Starting the hotplug events dispatcher" "udevd" - udevd --daemon - ;; - - *) - echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}" - exit 1 - ;; -esac - -exit 0 - diff --git a/packages/udev/udev-115/local.rules b/packages/udev/udev-115/local.rules deleted file mode 100644 index 5b926018f5..0000000000 --- a/packages/udev/udev-115/local.rules +++ /dev/null @@ -1,31 +0,0 @@ -# There are a number of modifiers that are allowed to be used in some -# of the different fields. They provide the following subsitutions: -# -# %n the "kernel number" of the device. -# For example, 'sda3' has a "kernel number" of '3' -# %e the smallest number for that name which does not matches an existing node -# %k the kernel name for the device -# %M the kernel major number for the device -# %m the kernel minor number for the device -# %b the bus id for the device -# %c the string returned by the PROGRAM -# %s{filename} the content of a sysfs attribute -# %% the '%' char itself -# - -# Media automounting -SUBSYSTEM=="block", ACTION=="add" RUN+="/etc/udev/scripts/mount.sh" -SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh" - -# Handle network interface setup -SUBSYSTEM=="net", ACTION=="add" RUN+="/etc/udev/scripts/network.sh" -SUBSYSTEM=="net", ACTION=="remove" RUN+="/etc/udev/scripts/network.sh" - -# The first rtc device is symlinked to /dev/rtc -KERNEL=="rtc0", SYMLINK+="rtc" - -# Try and modprobe for drivers for new hardware -ACTION=="add", DEVPATH=="/devices/*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe $env{MODALIAS}" - -# Create a symlink to any touchscreen input device -SUBSYSTEM=="input", KERNEL=="event[0-9]*", SYSFS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen0" diff --git a/packages/udev/udev-115/noasmlinkage.patch b/packages/udev/udev-115/noasmlinkage.patch deleted file mode 100644 index 5824d29590..0000000000 --- a/packages/udev/udev-115/noasmlinkage.patch +++ /dev/null @@ -1,36 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- - udevd.c | 2 +- - udevstart.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -Index: udev-115/udevd.c -=================================================================== ---- udev-115.orig/udevd.c 2007-08-24 01:29:54.000000000 +0200 -+++ udev-115/udevd.c 2007-09-20 17:04:51.000000000 +0200 -@@ -767,7 +767,7 @@ - return msg; - } - --static void asmlinkage sig_handler(int signum) -+static void sig_handler(int signum) - { - switch (signum) { - case SIGINT: -Index: udev-115/udevstart.c -=================================================================== ---- udev-115.orig/udevstart.c 2007-08-24 01:29:54.000000000 +0200 -+++ udev-115/udevstart.c 2007-09-20 17:04:51.000000000 +0200 -@@ -304,7 +304,7 @@ - } - } - --static void asmlinkage sig_handler(int signum) -+static void sig_handler(int signum) - { - switch (signum) { - case SIGALRM: diff --git a/packages/udev/udev-115/permissions.rules b/packages/udev/udev-115/permissions.rules deleted file mode 100644 index 99e03b1036..0000000000 --- a/packages/udev/udev-115/permissions.rules +++ /dev/null @@ -1,101 +0,0 @@ -ACTION!="add", GOTO="permissions_end" - -# workarounds needed to synchronize with sysfs -DEVPATH=="/devices/*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus" -SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt" -# only needed for kernels < 2.6.16 -SUBSYSTEM=="net", WAIT_FOR_SYSFS="address" -# only needed for kernels < 2.6.17 -SUBSYSTEM=="net", ENV{PHYSDEVDRIVER}=="?*", WAIT_FOR_SYSFS="device/driver" - -# default permissions for block devices -SUBSYSTEM=="block", GROUP="disk" -SUBSYSTEM=="block", SYSFS{removable}=="1", GROUP="floppy" - -# IDE devices -BUS=="ide", KERNEL=="hd[a-z]|pcd[0-9]*", DRIVER=="ide-cdrom|pcd", \ - IMPORT{program}="cdrom_id --export $tempnode" -ENV{ID_CDROM}=="?*", GROUP="cdrom" -BUS=="ide", KERNEL=="ht[0-9]*", GROUP="tape" -BUS=="ide", KERNEL=="nht[0-9]*", GROUP="tape" - -# SCSI devices -BUS=="scsi", SYSFS{type}=="1", GROUP="tape" -BUS=="scsi", SYSFS{type}=="5", GROUP="cdrom" - -# USB devices -BUS=="usb", KERNEL=="legousbtower*", MODE="0666" -BUS=="usb", KERNEL=="lp[0-9]*", GROUP="lp" - -# usbfs-like devices -SUBSYSTEM=="usb_device", MODE="0664" - -# iRiver music players -SUBSYSTEM=="usb_device", GROUP="plugdev", \ - SYSFS{idVendor}=="4102", SYSFS{idProduct}=="10[01][135789]" - -# serial devices -SUBSYSTEM=="tty", GROUP="dialout" -SUBSYSTEM=="capi", GROUP="dialout" -SUBSYSTEM=="slamr", GROUP="dialout" -SUBSYSTEM=="zaptel", GROUP="dialout" - -# vc devices (all members of the tty subsystem) -KERNEL=="ptmx", MODE="0666", GROUP="root" -KERNEL=="console", MODE="0600", GROUP="root" -KERNEL=="tty", MODE="0666", GROUP="root" -KERNEL=="tty[0-9]*", GROUP="root" -KERNEL=="pty*", MODE="0666", GROUP="tty" - -# video devices -SUBSYSTEM=="video4linux", GROUP="video" -SUBSYSTEM=="drm", GROUP="video" -SUBSYSTEM=="dvb", GROUP="video" -SUBSYSTEM=="em8300", GROUP="video" -SUBSYSTEM=="graphics", GROUP="video" -SUBSYSTEM=="nvidia", GROUP="video" - -# misc devices -KERNEL=="random", MODE="0666" -KERNEL=="urandom", MODE="0666" -KERNEL=="mem", MODE="0640", GROUP="kmem" -KERNEL=="kmem", MODE="0640", GROUP="kmem" -KERNEL=="port", MODE="0640", GROUP="kmem" -KERNEL=="full", MODE="0666" -KERNEL=="null", MODE="0666" -KERNEL=="zero", MODE="0666" -KERNEL=="inotify", MODE="0666" -KERNEL=="sgi_fetchop", MODE="0666" -KERNEL=="sonypi", MODE="0666" -KERNEL=="agpgart", GROUP="video" -KERNEL=="rtc", GROUP="audio" - -KERNEL=="cdemu[0-9]*", GROUP="cdrom" -KERNEL=="pktcdvd[0-9]*", GROUP="cdrom" -KERNEL=="pktcdvd", MODE="0644" - -# printers and parallel devices -SUBSYSTEM=="printer", GROUP="lp" -SUBSYSTEM=="ppdev", GROUP="lp" -KERNEL=="pt[0-9]*", GROUP="tape" -KERNEL=="pht[0-9]*", GROUP="tape" - -# sound devices -SUBSYSTEM=="sound", GROUP="audio" - -# ieee1394 devices -KERNEL=="raw1394", GROUP="disk" -KERNEL=="dv1394*", GROUP="video" -KERNEL=="video1394*", GROUP="video" - -# input devices -KERNEL=="event[0-9]*", SYSFS{name}=="*dvb*|*DVB*|* IR *" \ - MODE="0664", GROUP="video" -KERNEL=="js[0-9]*", MODE="0664" - -# AOE character devices -SUBSYSTEM=="aoe", MODE="0220", GROUP="disk" -SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440" - -LABEL="permissions_end" - diff --git a/packages/udev/udev-115/udev.rules b/packages/udev/udev-115/udev.rules deleted file mode 100644 index 72be706e84..0000000000 --- a/packages/udev/udev-115/udev.rules +++ /dev/null @@ -1,102 +0,0 @@ -# There are a number of modifiers that are allowed to be used in some -# of the different fields. They provide the following subsitutions: -# -# %n the "kernel number" of the device. -# For example, 'sda3' has a "kernel number" of '3' -# %e the smallest number for that name which does not matches an existing node -# %k the kernel name for the device -# %M the kernel major number for the device -# %m the kernel minor number for the device -# %b the bus id for the device -# %c the string returned by the PROGRAM -# %s{filename} the content of a sysfs attribute -# %% the '%' char itself -# - -# SCSI devices -BUS=="scsi", KERNEL=="sr[0-9]*", NAME="scd%n", SYMLINK+="sr%n" - -# USB devices -BUS=="usb", KERNEL=="auer[0-9]*", NAME="usb/%k" -BUS=="usb", KERNEL=="cpad[0-9]*", NAME="usb/%k" -BUS=="usb", KERNEL=="dabusb*", NAME="usb/%k" -BUS=="usb", KERNEL=="hiddev*", NAME="usb/%k" -BUS=="usb", KERNEL=="legousbtower*", NAME="usb/%k" -BUS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k" -BUS=="usb", KERNEL=="ttyUSB*", SYSFS{product}=="Palm Handheld*", \ - SYMLINK+="pilot" - -# usbfs-like devices -SUBSYSTEM=="usb_device", \ - PROGRAM="/bin/sh -c 'export X=%k; export X=$${X#usbdev}; export B=$${X%%%%.*}; export D=$${X#*.}; echo bus/usb/$$B/$$D'", SYMLINK+="%c" - -# serial devices -KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20" -KERNEL=="capi[0-9]*", NAME="capi/%n" - -# video devices -KERNEL=="card[0-9]*", NAME="dri/%k" - -# misc devices -KERNEL=="hw_random", NAME="hwrng" -KERNEL=="tun", NAME="net/%k" - -KERNEL=="cdemu[0-9]*", NAME="cdemu/%n" -KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%n" -KERNEL=="pktcdvd", NAME="pktcdvd/control" - -KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid" -KERNEL=="msr[0-9]*", NAME="cpu/%n/msr" -KERNEL=="microcode", NAME="cpu/microcode" - -KERNEL=="umad*", NAME="infiniband/%k" -KERNEL=="issm*", NAME="infiniband/%k" -KERNEL=="uverbs*", NAME="infiniband/%k" -KERNEL=="ucm", NAME="infiniband/%k" - -KERNEL=="buzzer", NAME="misc/buzzer" - -# ALSA devices -KERNEL=="controlC[0-9]*", NAME="snd/%k" -KERNEL=="hwC[D0-9]*", NAME="snd/%k" -KERNEL=="pcmC[D0-9cp]*", NAME="snd/%k" -KERNEL=="midiC[D0-9]*", NAME="snd/%k" -KERNEL=="timer", NAME="snd/%k" -KERNEL=="seq", NAME="snd/%k" - -# ieee1394 devices -KERNEL=="dv1394*", NAME="dv1394/%n" -KERNEL=="video1394*", NAME="video1394/%n" - -# input devices -KERNEL=="mice", NAME="input/%k" -KERNEL=="mouse[0-9]*", NAME="input/%k" -KERNEL=="event[0-9]*", NAME="input/%k" -KERNEL=="js[0-9]*", NAME="input/%k" -KERNEL=="ts[0-9]*", NAME="input/%k" -KERNEL=="uinput", NAME="input/%k" - -# Zaptel -KERNEL=="zapctl", NAME="zap/ctl" -KERNEL=="zaptimer", NAME="zap/timer" -KERNEL=="zapchannel", NAME="zap/channel" -KERNEL=="zappseudo", NAME="zap/pseudo" -KERNEL=="zap[0-9]*", NAME="zap/%n" - -# AOE character devices -SUBSYSTEM=="aoe", KERNEL=="discover", NAME="etherd/%k" -SUBSYSTEM=="aoe", KERNEL=="err", NAME="etherd/%k" -SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k" - -# device mapper creates its own device nodes, so ignore these -KERNEL=="dm-[0-9]*", OPTIONS+="ignore_device" -KERNEL=="device-mapper", NAME="mapper/control" - -KERNEL=="rfcomm[0-9]*", NAME="%k", GROUP="users", MODE="0660" - -# Firmware Helper -ACTION=="add", SUBSYSTEM=="firmware", RUN+="/lib/udev/firmware_helper" - -# Samsung UARTS -KERNEL=="s3c2410_serial[0-9]", NAME="ttySAC%n" - diff --git a/packages/udev/udev-115/udevtrigger_add_devname_filtering.patch b/packages/udev/udev-115/udevtrigger_add_devname_filtering.patch deleted file mode 100644 index 87cafcaa9d..0000000000 --- a/packages/udev/udev-115/udevtrigger_add_devname_filtering.patch +++ /dev/null @@ -1,104 +0,0 @@ ---- - udevtrigger.c | 40 ++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 40 insertions(+) - -Index: udev-115/udevtrigger.c -=================================================================== ---- udev-115.orig/udevtrigger.c 2007-08-24 01:29:54.000000000 +0200 -+++ udev-115/udevtrigger.c 2007-09-21 18:45:28.000000000 +0200 -@@ -39,6 +39,8 @@ - LIST_HEAD(device_list); - LIST_HEAD(filter_subsystem_match_list); - LIST_HEAD(filter_subsystem_nomatch_list); -+LIST_HEAD(filter_kernel_match_list); -+LIST_HEAD(filter_kernel_nomatch_list); - LIST_HEAD(filter_attr_match_list); - LIST_HEAD(filter_attr_nomatch_list); - -@@ -218,6 +220,26 @@ - return 0; - } - -+static int kernel_filtered(const char *kernel) -+{ -+ struct name_entry *loop_name; -+ -+ /* skip devices matching the prohibited kernel device names */ -+ list_for_each_entry(loop_name, &filter_kernel_nomatch_list, node) -+ if (fnmatch(loop_name->name, kernel, 0) == 0) -+ return 1; -+ -+ /* skip devices not matching the listed kernel device names */ -+ if (!list_empty(&filter_kernel_match_list)) { -+ list_for_each_entry(loop_name, &filter_kernel_match_list, node) -+ if (fnmatch(loop_name->name, kernel, 0) == 0) -+ return 0; -+ return 1; -+ } -+ -+ return 0; -+} -+ - static int attr_filtered(const char *path) - { - struct name_entry *loop_name; -@@ -296,6 +318,9 @@ - if (dent2->d_name[0] == '.') - continue; - -+ if (kernel_filtered(dent2->d_name)) -+ continue; -+ - strlcpy(dirname2, dirname, sizeof(dirname2)); - strlcat(dirname2, "/", sizeof(dirname2)); - strlcat(dirname2, dent2->d_name, sizeof(dirname2)); -@@ -402,6 +427,9 @@ - if (!strcmp(dent2->d_name, "device")) - continue; - -+ if (kernel_filtered(dent2->d_name)) -+ continue; -+ - strlcpy(dirname2, dirname, sizeof(dirname2)); - strlcat(dirname2, "/", sizeof(dirname2)); - strlcat(dirname2, dent2->d_name, sizeof(dirname2)); -@@ -458,6 +486,8 @@ - { "subsystem-nomatch", 1, NULL, 'S' }, - { "attr-match", 1, NULL, 'a' }, - { "attr-nomatch", 1, NULL, 'A' }, -+ { "kernel-match", 1, NULL, 'k' }, -+ { "kernel-nomatch", 1, NULL, 'K' }, - {} - }; - -@@ -496,6 +526,12 @@ - case 'A': - name_list_add(&filter_attr_nomatch_list, optarg, 0); - break; -+ case 'k': -+ name_list_add(&filter_kernel_match_list, optarg, 0); -+ break; -+ case 'K': -+ name_list_add(&filter_kernel_nomatch_list, optarg, 0); -+ break; - case 'h': - printf("Usage: udevtrigger OPTIONS\n" - " --verbose print the list of devices while running\n" -@@ -504,6 +540,8 @@ - " marked as failed during a previous run\n" - " --subsystem-match= trigger devices from a matching subystem\n" - " --subsystem-nomatch= exclude devices from a matching subystem\n" -+ " --kernel-match= trigger devices from a matching kernel device name\n" -+ " --kernel-nomatch= exclude devices from a matching kernel device name\n" - " --attr-match=]> trigger devices with a matching sysfs\n" - " attribute\n" - " --attr-nomatch=]> exclude devices with a matching sysfs\n" -@@ -549,6 +587,8 @@ - exit: - name_list_cleanup(&filter_subsystem_match_list); - name_list_cleanup(&filter_subsystem_nomatch_list); -+ name_list_cleanup(&filter_kernel_match_list); -+ name_list_cleanup(&filter_kernel_nomatch_list); - name_list_cleanup(&filter_attr_match_list); - name_list_cleanup(&filter_attr_nomatch_list); - diff --git a/packages/udev/udev-115/vol_id_ld.patch b/packages/udev/udev-115/vol_id_ld.patch deleted file mode 100644 index 11126eef8d..0000000000 --- a/packages/udev/udev-115/vol_id_ld.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- - extras/volume_id/Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: udev-115/extras/volume_id/Makefile -=================================================================== ---- udev-115.orig/extras/volume_id/Makefile 2007-09-20 18:17:59.000000000 +0200 -+++ udev-115/extras/volume_id/Makefile 2007-09-20 18:18:08.000000000 +0200 -@@ -44,7 +44,7 @@ - ifeq ($(strip $(VOLUME_ID_STATIC)),true) - $(Q) $(LD) $(LDFLAGS) -o $@ $@.o $(LIBUDEV) lib/libvolume_id.a $(LIB_OBJS) - else -- $(Q) $(LD) $(LDFLAGS) -o $@ $@.o $(LIBUDEV) -Llib -lvolume_id $(LIB_OBJS) -+ $(Q) $(LD) -Llib $(LDFLAGS) -o $@ $@.o $(LIBUDEV) -lvolume_id $(LIB_OBJS) - endif - - # man pages diff --git a/packages/udev/udev-118/.mtn2git_empty b/packages/udev/udev-118/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/udev/udev-118/flags.patch b/packages/udev/udev-118/flags.patch new file mode 100644 index 0000000000..13f20eb6a8 --- /dev/null +++ b/packages/udev/udev-118/flags.patch @@ -0,0 +1,56 @@ +--- + Makefile | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +Index: udev-115/Makefile +=================================================================== +--- udev-115.orig/Makefile 2007-08-24 01:29:54.000000000 +0200 ++++ udev-115/Makefile 2007-09-20 17:21:45.000000000 +0200 +@@ -112,39 +112,39 @@ + AR = $(CROSS_COMPILE)ar + RANLIB = $(CROSS_COMPILE)ranlib + +-CFLAGS += -g -Wall -pipe -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 ++override CFLAGS = -g -Wall -pipe -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 + WARNINGS = -Wstrict-prototypes -Wsign-compare -Wshadow \ + -Wchar-subscripts -Wmissing-declarations -Wnested-externs \ + -Wpointer-arith -Wcast-align -Wsign-compare -Wmissing-prototypes +-CFLAGS += $(WARNINGS) ++override CFLAGS += $(WARNINGS) + + LDFLAGS += -Wl,-warn-common,--as-needed + + OPTFLAGS = -Os +-CFLAGS += $(OPTFLAGS) ++override CFLAGS += $(OPTFLAGS) + + ifeq ($(strip $(USE_LOG)),true) +- CFLAGS += -DUSE_LOG ++ override CFLAGS += -DUSE_LOG + endif + + # if DEBUG is enabled, then we do not strip + ifeq ($(strip $(DEBUG)),true) +- CFLAGS += -DDEBUG ++ override CFLAGS += -DDEBUG + endif + + ifeq ($(strip $(USE_GCOV)),true) +- CFLAGS += -fprofile-arcs -ftest-coverage ++ override CFLAGS += -fprofile-arcs -ftest-coverage + LDFLAGS += -fprofile-arcs + endif + + ifeq ($(strip $(USE_SELINUX)),true) + UDEV_OBJS += udev_selinux.o + LIB_OBJS += -lselinux -lsepol +- CFLAGS += -DUSE_SELINUX ++ override CFLAGS += -DUSE_SELINUX + endif + + ifeq ($(strip $(USE_STATIC)),true) +- CFLAGS += -DUSE_STATIC ++ override CFLAGS += -DUSE_STATIC + LDFLAGS += -static + endif + diff --git a/packages/udev/udev-118/init b/packages/udev/udev-118/init new file mode 100644 index 0000000000..73c655a0ee --- /dev/null +++ b/packages/udev/udev-118/init @@ -0,0 +1,227 @@ +#!/bin/sh -e +### BEGIN INIT INFO +# Provides: udev +# Required-Start: mountvirtfs +# Required-Stop: +# Default-Start: S +# Default-Stop: +# Short-Description: Start udevd, populate /dev and load drivers. +### END INIT INFO + +# we need to unmount /dev/pts/ and remount it later over the tmpfs +unmount_devpts() { + if mountpoint -q /dev/pts/; then + umount -l /dev/pts/ + fi + + if mountpoint -q /dev/shm/; then + umount -l /dev/shm/ + fi +} + +# mount a tmpfs over /dev, if somebody did not already do it +mount_tmpfs() { + if grep -E -q "^[^[:space:]]+ /dev tmpfs" /proc/mounts; then + return + fi + + # /dev/.static/dev/ is used by MAKEDEV to access the real /dev/ directory. + # /etc/udev/ is recycled as a temporary mount point because it's the only + # directory which is guaranteed to be available. + mount -n -o bind /dev /etc/udev + + if ! mount -n -o size=$tmpfs_size,mode=0755 -t tmpfs tmpfs /dev; then + umount /etc/udev + echo "udev requires tmpfs support, not started." + exit 1 + fi + + mkdir -p /dev/.static/dev + chmod 700 /dev/.static/ + # The mount options in busybox are non-standard... + if test -x /bin/mount.util-linux + then + /bin/mount.util-linux --move /etc/udev /dev/.static/dev + elif test -x /bin/busybox + then + busybox mount -n -o move /etc/udev /dev/.static/dev + else + echo "udev requires an identifiable mount command, not started." + umount /etc/udev + umount /dev + exit 1 + fi +} + +# I hate this hack. -- Md +make_extra_nodes() { + if [ "$(echo /lib/udev/devices/*)" != "/lib/udev/devices/*" ]; then + cp -a /lib/udev/devices/* /dev/ + fi + + [ -e /etc/udev/links.conf ] || return 0 + grep '^[^#]' /etc/udev/links.conf | \ + while read type name arg1; do + [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue + case "$type" in + L) ln -s $arg1 /dev/$name ;; + D) mkdir -p /dev/$name ;; + M) mknod -m 600 /dev/$name $arg1 ;; + *) echo "links.conf: unparseable line ($type $name $arg1)" ;; + esac + done +} + +supported_kernel() { + case "$(uname -r)" in + 2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;; + 2.6.1[01]|2.6.1[01][!0-9]*) return 1 ;; + esac + return 0 +} + +set_hotplug_handler() { + case "$(uname -r)" in + 2.6.1[0-4]|2.6.1[0-4][!0-9]*) HANDLER='/sbin/udevsend' ;; + esac + echo $HANDLER > /proc/sys/kernel/hotplug +} + +# shell version of /usr/bin/tty +my_tty() { + [ -x /bin/readlink ] || return 0 + [ -e /proc/self/fd/0 ] || return 0 + readlink --silent /proc/self/fd/0 || true +} + +warn_if_interactive() { + if [ "$RUNLEVEL" = "S" -a "$PREVLEVEL" = "N" ]; then + return + fi + + TTY=$(my_tty) + if [ -z "$TTY" -o "$TTY" = "/dev/console" ]; then + return + fi + + printf "\n\n\nIt has been detected that the command\n\n\t$0 $*\n\n" + printf "has been run from an interactive shell.\n" + printf "It will probably not do what you expect, so this script will wait\n" + printf "60 seconds before continuing. Press ^C to stop it.\n" + printf "RUNNING THIS COMMAND IS HIGHLY DISCOURAGED!\n\n\n\n" + sleep 60 +} + +############################################################################## + +PATH="/sbin:/bin:/usr/bin" + +[ -x /sbin/udevd ] || exit 0 + +# defaults +tmpfs_size="2M" +udev_root="/dev" +udevd_timeout=30 + +. /etc/udev/udev.conf + +if ! supported_kernel; then + echo "udev requires a kernel >= 2.6.12, not started." + exit 1 +fi + +if [ ! -e /proc/filesystems ]; then + echo "udev requires a mounted procfs, not started." + exit 1 +fi + +if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then + echo "udev requires tmpfs support, not started." + exit 1 +fi + +if [ ! -d /sys/class/ ]; then + echo "udev requires a mounted sysfs, not started." + exit 1 +fi + +if [ ! -e /proc/sys/kernel/hotplug ]; then + echo "udev requires hotplug support, not started." + exit 1 +fi + +############################################################################## + +# When modifying this script, do not forget that between the time that +# the new /dev has been mounted and udevsynthesize has been run there will be +# no /dev/null. This also means that you cannot use the "&" shell command. + +case "$1" in + start) + if [ -e "$udev_root/.udev/" ]; then + if mountpoint -q /dev/; then + TMPFS_MOUNTED=1 + else + echo ".udev/ already exists on the static $udev_root!" + fi + else + warn_if_interactive + fi + + echo "Starting the hotplug events dispatcher" "udevd" + udevd --daemon + + set_hotplug_handler + + if [ -z "$TMPFS_MOUNTED" ]; then + unmount_devpts + mount_tmpfs + [ -d /proc/1 ] || mount -n /proc + fi + + # if this directory is not present /dev will not be updated by udev + mkdir -p /dev/.udev/ /dev/.udev/db/ /dev/.udev/queue/ /dev/.udevdb/ + # /dev/null must be created before udevd is started + make_extra_nodes + + echo "Synthesizing the initial hotplug events" + udevtrigger + + # wait for the udevd childs to finish + echo "Waiting for /dev to be fully populated" + while [ -d /dev/.udev/queue/ ]; do + sleep 1 + udevd_timeout=$(($udevd_timeout - 1)) + if [ $udevd_timeout -eq 0 ]; then + # ps axf + break + fi + done + if [ $udevd_timeout -eq 0 ]; then + echo 'timeout' + fi + ;; + + stop) + echo "Stopping the hotplug events dispatcher" "udevd" + start-stop-daemon --stop --name udevd --quiet + ;; + + restart|force-reload) + echo "Stopping the hotplug events dispatcher" "udevd" + if start-stop-daemon --stop --name udevd --quiet ; then + exit 1 + fi + + echo "Starting the hotplug events dispatcher" "udevd" + udevd --daemon + ;; + + *) + echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}" + exit 1 + ;; +esac + +exit 0 + diff --git a/packages/udev/udev-118/local.rules b/packages/udev/udev-118/local.rules new file mode 100644 index 0000000000..5b926018f5 --- /dev/null +++ b/packages/udev/udev-118/local.rules @@ -0,0 +1,31 @@ +# There are a number of modifiers that are allowed to be used in some +# of the different fields. They provide the following subsitutions: +# +# %n the "kernel number" of the device. +# For example, 'sda3' has a "kernel number" of '3' +# %e the smallest number for that name which does not matches an existing node +# %k the kernel name for the device +# %M the kernel major number for the device +# %m the kernel minor number for the device +# %b the bus id for the device +# %c the string returned by the PROGRAM +# %s{filename} the content of a sysfs attribute +# %% the '%' char itself +# + +# Media automounting +SUBSYSTEM=="block", ACTION=="add" RUN+="/etc/udev/scripts/mount.sh" +SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh" + +# Handle network interface setup +SUBSYSTEM=="net", ACTION=="add" RUN+="/etc/udev/scripts/network.sh" +SUBSYSTEM=="net", ACTION=="remove" RUN+="/etc/udev/scripts/network.sh" + +# The first rtc device is symlinked to /dev/rtc +KERNEL=="rtc0", SYMLINK+="rtc" + +# Try and modprobe for drivers for new hardware +ACTION=="add", DEVPATH=="/devices/*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe $env{MODALIAS}" + +# Create a symlink to any touchscreen input device +SUBSYSTEM=="input", KERNEL=="event[0-9]*", SYSFS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen0" diff --git a/packages/udev/udev-118/permissions.rules b/packages/udev/udev-118/permissions.rules new file mode 100644 index 0000000000..99e03b1036 --- /dev/null +++ b/packages/udev/udev-118/permissions.rules @@ -0,0 +1,101 @@ +ACTION!="add", GOTO="permissions_end" + +# workarounds needed to synchronize with sysfs +DEVPATH=="/devices/*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus" +SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt" +# only needed for kernels < 2.6.16 +SUBSYSTEM=="net", WAIT_FOR_SYSFS="address" +# only needed for kernels < 2.6.17 +SUBSYSTEM=="net", ENV{PHYSDEVDRIVER}=="?*", WAIT_FOR_SYSFS="device/driver" + +# default permissions for block devices +SUBSYSTEM=="block", GROUP="disk" +SUBSYSTEM=="block", SYSFS{removable}=="1", GROUP="floppy" + +# IDE devices +BUS=="ide", KERNEL=="hd[a-z]|pcd[0-9]*", DRIVER=="ide-cdrom|pcd", \ + IMPORT{program}="cdrom_id --export $tempnode" +ENV{ID_CDROM}=="?*", GROUP="cdrom" +BUS=="ide", KERNEL=="ht[0-9]*", GROUP="tape" +BUS=="ide", KERNEL=="nht[0-9]*", GROUP="tape" + +# SCSI devices +BUS=="scsi", SYSFS{type}=="1", GROUP="tape" +BUS=="scsi", SYSFS{type}=="5", GROUP="cdrom" + +# USB devices +BUS=="usb", KERNEL=="legousbtower*", MODE="0666" +BUS=="usb", KERNEL=="lp[0-9]*", GROUP="lp" + +# usbfs-like devices +SUBSYSTEM=="usb_device", MODE="0664" + +# iRiver music players +SUBSYSTEM=="usb_device", GROUP="plugdev", \ + SYSFS{idVendor}=="4102", SYSFS{idProduct}=="10[01][135789]" + +# serial devices +SUBSYSTEM=="tty", GROUP="dialout" +SUBSYSTEM=="capi", GROUP="dialout" +SUBSYSTEM=="slamr", GROUP="dialout" +SUBSYSTEM=="zaptel", GROUP="dialout" + +# vc devices (all members of the tty subsystem) +KERNEL=="ptmx", MODE="0666", GROUP="root" +KERNEL=="console", MODE="0600", GROUP="root" +KERNEL=="tty", MODE="0666", GROUP="root" +KERNEL=="tty[0-9]*", GROUP="root" +KERNEL=="pty*", MODE="0666", GROUP="tty" + +# video devices +SUBSYSTEM=="video4linux", GROUP="video" +SUBSYSTEM=="drm", GROUP="video" +SUBSYSTEM=="dvb", GROUP="video" +SUBSYSTEM=="em8300", GROUP="video" +SUBSYSTEM=="graphics", GROUP="video" +SUBSYSTEM=="nvidia", GROUP="video" + +# misc devices +KERNEL=="random", MODE="0666" +KERNEL=="urandom", MODE="0666" +KERNEL=="mem", MODE="0640", GROUP="kmem" +KERNEL=="kmem", MODE="0640", GROUP="kmem" +KERNEL=="port", MODE="0640", GROUP="kmem" +KERNEL=="full", MODE="0666" +KERNEL=="null", MODE="0666" +KERNEL=="zero", MODE="0666" +KERNEL=="inotify", MODE="0666" +KERNEL=="sgi_fetchop", MODE="0666" +KERNEL=="sonypi", MODE="0666" +KERNEL=="agpgart", GROUP="video" +KERNEL=="rtc", GROUP="audio" + +KERNEL=="cdemu[0-9]*", GROUP="cdrom" +KERNEL=="pktcdvd[0-9]*", GROUP="cdrom" +KERNEL=="pktcdvd", MODE="0644" + +# printers and parallel devices +SUBSYSTEM=="printer", GROUP="lp" +SUBSYSTEM=="ppdev", GROUP="lp" +KERNEL=="pt[0-9]*", GROUP="tape" +KERNEL=="pht[0-9]*", GROUP="tape" + +# sound devices +SUBSYSTEM=="sound", GROUP="audio" + +# ieee1394 devices +KERNEL=="raw1394", GROUP="disk" +KERNEL=="dv1394*", GROUP="video" +KERNEL=="video1394*", GROUP="video" + +# input devices +KERNEL=="event[0-9]*", SYSFS{name}=="*dvb*|*DVB*|* IR *" \ + MODE="0664", GROUP="video" +KERNEL=="js[0-9]*", MODE="0664" + +# AOE character devices +SUBSYSTEM=="aoe", MODE="0220", GROUP="disk" +SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440" + +LABEL="permissions_end" + diff --git a/packages/udev/udev-118/udev.rules b/packages/udev/udev-118/udev.rules new file mode 100644 index 0000000000..72be706e84 --- /dev/null +++ b/packages/udev/udev-118/udev.rules @@ -0,0 +1,102 @@ +# There are a number of modifiers that are allowed to be used in some +# of the different fields. They provide the following subsitutions: +# +# %n the "kernel number" of the device. +# For example, 'sda3' has a "kernel number" of '3' +# %e the smallest number for that name which does not matches an existing node +# %k the kernel name for the device +# %M the kernel major number for the device +# %m the kernel minor number for the device +# %b the bus id for the device +# %c the string returned by the PROGRAM +# %s{filename} the content of a sysfs attribute +# %% the '%' char itself +# + +# SCSI devices +BUS=="scsi", KERNEL=="sr[0-9]*", NAME="scd%n", SYMLINK+="sr%n" + +# USB devices +BUS=="usb", KERNEL=="auer[0-9]*", NAME="usb/%k" +BUS=="usb", KERNEL=="cpad[0-9]*", NAME="usb/%k" +BUS=="usb", KERNEL=="dabusb*", NAME="usb/%k" +BUS=="usb", KERNEL=="hiddev*", NAME="usb/%k" +BUS=="usb", KERNEL=="legousbtower*", NAME="usb/%k" +BUS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k" +BUS=="usb", KERNEL=="ttyUSB*", SYSFS{product}=="Palm Handheld*", \ + SYMLINK+="pilot" + +# usbfs-like devices +SUBSYSTEM=="usb_device", \ + PROGRAM="/bin/sh -c 'export X=%k; export X=$${X#usbdev}; export B=$${X%%%%.*}; export D=$${X#*.}; echo bus/usb/$$B/$$D'", SYMLINK+="%c" + +# serial devices +KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20" +KERNEL=="capi[0-9]*", NAME="capi/%n" + +# video devices +KERNEL=="card[0-9]*", NAME="dri/%k" + +# misc devices +KERNEL=="hw_random", NAME="hwrng" +KERNEL=="tun", NAME="net/%k" + +KERNEL=="cdemu[0-9]*", NAME="cdemu/%n" +KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%n" +KERNEL=="pktcdvd", NAME="pktcdvd/control" + +KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid" +KERNEL=="msr[0-9]*", NAME="cpu/%n/msr" +KERNEL=="microcode", NAME="cpu/microcode" + +KERNEL=="umad*", NAME="infiniband/%k" +KERNEL=="issm*", NAME="infiniband/%k" +KERNEL=="uverbs*", NAME="infiniband/%k" +KERNEL=="ucm", NAME="infiniband/%k" + +KERNEL=="buzzer", NAME="misc/buzzer" + +# ALSA devices +KERNEL=="controlC[0-9]*", NAME="snd/%k" +KERNEL=="hwC[D0-9]*", NAME="snd/%k" +KERNEL=="pcmC[D0-9cp]*", NAME="snd/%k" +KERNEL=="midiC[D0-9]*", NAME="snd/%k" +KERNEL=="timer", NAME="snd/%k" +KERNEL=="seq", NAME="snd/%k" + +# ieee1394 devices +KERNEL=="dv1394*", NAME="dv1394/%n" +KERNEL=="video1394*", NAME="video1394/%n" + +# input devices +KERNEL=="mice", NAME="input/%k" +KERNEL=="mouse[0-9]*", NAME="input/%k" +KERNEL=="event[0-9]*", NAME="input/%k" +KERNEL=="js[0-9]*", NAME="input/%k" +KERNEL=="ts[0-9]*", NAME="input/%k" +KERNEL=="uinput", NAME="input/%k" + +# Zaptel +KERNEL=="zapctl", NAME="zap/ctl" +KERNEL=="zaptimer", NAME="zap/timer" +KERNEL=="zapchannel", NAME="zap/channel" +KERNEL=="zappseudo", NAME="zap/pseudo" +KERNEL=="zap[0-9]*", NAME="zap/%n" + +# AOE character devices +SUBSYSTEM=="aoe", KERNEL=="discover", NAME="etherd/%k" +SUBSYSTEM=="aoe", KERNEL=="err", NAME="etherd/%k" +SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k" + +# device mapper creates its own device nodes, so ignore these +KERNEL=="dm-[0-9]*", OPTIONS+="ignore_device" +KERNEL=="device-mapper", NAME="mapper/control" + +KERNEL=="rfcomm[0-9]*", NAME="%k", GROUP="users", MODE="0660" + +# Firmware Helper +ACTION=="add", SUBSYSTEM=="firmware", RUN+="/lib/udev/firmware_helper" + +# Samsung UARTS +KERNEL=="s3c2410_serial[0-9]", NAME="ttySAC%n" + diff --git a/packages/udev/udev-118/udevtrigger_add_devname_filtering.patch b/packages/udev/udev-118/udevtrigger_add_devname_filtering.patch new file mode 100644 index 0000000000..87cafcaa9d --- /dev/null +++ b/packages/udev/udev-118/udevtrigger_add_devname_filtering.patch @@ -0,0 +1,104 @@ +--- + udevtrigger.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 40 insertions(+) + +Index: udev-115/udevtrigger.c +=================================================================== +--- udev-115.orig/udevtrigger.c 2007-08-24 01:29:54.000000000 +0200 ++++ udev-115/udevtrigger.c 2007-09-21 18:45:28.000000000 +0200 +@@ -39,6 +39,8 @@ + LIST_HEAD(device_list); + LIST_HEAD(filter_subsystem_match_list); + LIST_HEAD(filter_subsystem_nomatch_list); ++LIST_HEAD(filter_kernel_match_list); ++LIST_HEAD(filter_kernel_nomatch_list); + LIST_HEAD(filter_attr_match_list); + LIST_HEAD(filter_attr_nomatch_list); + +@@ -218,6 +220,26 @@ + return 0; + } + ++static int kernel_filtered(const char *kernel) ++{ ++ struct name_entry *loop_name; ++ ++ /* skip devices matching the prohibited kernel device names */ ++ list_for_each_entry(loop_name, &filter_kernel_nomatch_list, node) ++ if (fnmatch(loop_name->name, kernel, 0) == 0) ++ return 1; ++ ++ /* skip devices not matching the listed kernel device names */ ++ if (!list_empty(&filter_kernel_match_list)) { ++ list_for_each_entry(loop_name, &filter_kernel_match_list, node) ++ if (fnmatch(loop_name->name, kernel, 0) == 0) ++ return 0; ++ return 1; ++ } ++ ++ return 0; ++} ++ + static int attr_filtered(const char *path) + { + struct name_entry *loop_name; +@@ -296,6 +318,9 @@ + if (dent2->d_name[0] == '.') + continue; + ++ if (kernel_filtered(dent2->d_name)) ++ continue; ++ + strlcpy(dirname2, dirname, sizeof(dirname2)); + strlcat(dirname2, "/", sizeof(dirname2)); + strlcat(dirname2, dent2->d_name, sizeof(dirname2)); +@@ -402,6 +427,9 @@ + if (!strcmp(dent2->d_name, "device")) + continue; + ++ if (kernel_filtered(dent2->d_name)) ++ continue; ++ + strlcpy(dirname2, dirname, sizeof(dirname2)); + strlcat(dirname2, "/", sizeof(dirname2)); + strlcat(dirname2, dent2->d_name, sizeof(dirname2)); +@@ -458,6 +486,8 @@ + { "subsystem-nomatch", 1, NULL, 'S' }, + { "attr-match", 1, NULL, 'a' }, + { "attr-nomatch", 1, NULL, 'A' }, ++ { "kernel-match", 1, NULL, 'k' }, ++ { "kernel-nomatch", 1, NULL, 'K' }, + {} + }; + +@@ -496,6 +526,12 @@ + case 'A': + name_list_add(&filter_attr_nomatch_list, optarg, 0); + break; ++ case 'k': ++ name_list_add(&filter_kernel_match_list, optarg, 0); ++ break; ++ case 'K': ++ name_list_add(&filter_kernel_nomatch_list, optarg, 0); ++ break; + case 'h': + printf("Usage: udevtrigger OPTIONS\n" + " --verbose print the list of devices while running\n" +@@ -504,6 +540,8 @@ + " marked as failed during a previous run\n" + " --subsystem-match= trigger devices from a matching subystem\n" + " --subsystem-nomatch= exclude devices from a matching subystem\n" ++ " --kernel-match= trigger devices from a matching kernel device name\n" ++ " --kernel-nomatch= exclude devices from a matching kernel device name\n" + " --attr-match=]> trigger devices with a matching sysfs\n" + " attribute\n" + " --attr-nomatch=]> exclude devices with a matching sysfs\n" +@@ -549,6 +587,8 @@ + exit: + name_list_cleanup(&filter_subsystem_match_list); + name_list_cleanup(&filter_subsystem_nomatch_list); ++ name_list_cleanup(&filter_kernel_match_list); ++ name_list_cleanup(&filter_kernel_nomatch_list); + name_list_cleanup(&filter_attr_match_list); + name_list_cleanup(&filter_attr_nomatch_list); + diff --git a/packages/udev/udev-118/vol_id_ld.patch b/packages/udev/udev-118/vol_id_ld.patch new file mode 100644 index 0000000000..11126eef8d --- /dev/null +++ b/packages/udev/udev-118/vol_id_ld.patch @@ -0,0 +1,17 @@ +--- + extras/volume_id/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: udev-115/extras/volume_id/Makefile +=================================================================== +--- udev-115.orig/extras/volume_id/Makefile 2007-09-20 18:17:59.000000000 +0200 ++++ udev-115/extras/volume_id/Makefile 2007-09-20 18:18:08.000000000 +0200 +@@ -44,7 +44,7 @@ + ifeq ($(strip $(VOLUME_ID_STATIC)),true) + $(Q) $(LD) $(LDFLAGS) -o $@ $@.o $(LIBUDEV) lib/libvolume_id.a $(LIB_OBJS) + else +- $(Q) $(LD) $(LDFLAGS) -o $@ $@.o $(LIBUDEV) -Llib -lvolume_id $(LIB_OBJS) ++ $(Q) $(LD) -Llib $(LDFLAGS) -o $@ $@.o $(LIBUDEV) -lvolume_id $(LIB_OBJS) + endif + + # man pages diff --git a/packages/udev/udev_115.bb b/packages/udev/udev_115.bb deleted file mode 100644 index 9dd0bf2c8f..0000000000 --- a/packages/udev/udev_115.bb +++ /dev/null @@ -1,68 +0,0 @@ -DESCRIPTION = "udev is a daemon which dynamically creates and removes device nodes from \ -/dev/, handles hotplug events and loads drivers at boot time. It replaces \ -the hotplug package and requires a kernel not older than 2.6.12." -RPROVIDES_${PN} = "hotplug" - -PR = "r0" - -DEFAULT_PREFERENCE = "-115" - -SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \ - file://noasmlinkage.patch;patch=1 \ - file://flags.patch;patch=1 \ - file://vol_id_ld.patch;patch=1 \ - file://udevtrigger_add_devname_filtering.patch;patch=1 \ - file://mount.blacklist \ - " - -require udev.inc - -INITSCRIPT_PARAMS = "start 03 S ." - -FILES_${PN} += "${base_libdir}/udev/*" -FILES_${PN}-dbg += "${base_libdir}/udev/.debug" -UDEV_EXTRAS = "extras/firmware/ extras/scsi_id/ extras/volume_id/" -EXTRA_OEMAKE += "libudevdir=/lib/udev libdir=${base_libdir} prefix=" - -do_install () { - install -d ${D}${usrsbindir} \ - ${D}${sysconfdir} \ - ${D}${sbindir} - oe_runmake 'DESTDIR=${D}' INSTALL=install install - install -d ${D}${sysconfdir}/init.d - install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev - - install -d ${D}${sysconfdir}/udev/rules.d/ - - install -m 0644 ${WORKDIR}/mount.blacklist ${D}${sysconfdir}/udev/ - install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules - install -m 0644 ${WORKDIR}/permissions.rules ${D}${sysconfdir}/udev/rules.d/permissions.rules - install -m 0644 ${WORKDIR}/udev.rules ${D}${sysconfdir}/udev/rules.d/udev.rules - install -m 0644 ${WORKDIR}/links.conf ${D}${sysconfdir}/udev/links.conf - if [ "${UDEV_DEVFS_RULES}" = "1" ]; then - install -m 0644 ${WORKDIR}/devfs-udev.rules ${D}${sysconfdir}/udev/rules.d/devfs-udev.rules - fi - - install -d ${D}${sysconfdir}/udev/scripts/ - - install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh - install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts - - install -d ${D}${base_libdir}/udev/ -} - -pkg_postinst_append() { - - # Add the root partition to mount.blacklist to avoid a bug in the auto-mounter, - # causing confusion with fsck on boot - - while read dev mp fs junk - do - if test "$mp" = "/" - then - root_partition="$dev" - echo "$root_partition" >> ${sysconfdir}/udev/mount.blacklist - fi - done < ${sysconfdir}/fstab -} - diff --git a/packages/udev/udev_118.bb b/packages/udev/udev_118.bb new file mode 100644 index 0000000000..a4c12877f5 --- /dev/null +++ b/packages/udev/udev_118.bb @@ -0,0 +1,72 @@ +DESCRIPTION = "udev is a daemon which dynamically creates and removes device nodes from \ +/dev/, handles hotplug events and loads drivers at boot time. It replaces \ +the hotplug package and requires a kernel not older than 2.6.12." +RPROVIDES_${PN} = "hotplug" + +PR = "r0" + +DEFAULT_PREFERENCE = "-115" + +SRC_URI = "\ + http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \ + file://flags.patch;patch=1 \ + file://vol_id_ld.patch;patch=1 \ + file://udevtrigger_add_devname_filtering.patch;patch=1 \ + file://mount.blacklist \ +" + +require udev.inc + +INITSCRIPT_PARAMS = "start 03 S ." + +FILES_${PN} += "${base_libdir}/udev/*" +FILES_${PN}-dbg += "${base_libdir}/udev/.debug" +UDEV_EXTRAS = "extras/firmware/ extras/scsi_id/ extras/volume_id/" +EXTRA_OEMAKE += "libudevdir=/lib/udev libdir=${base_libdir} prefix=" + +do_compile_prepend() { + sed -i s,asmlinkage,, *.c +} + +do_install () { + install -d ${D}${usrsbindir} \ + ${D}${sysconfdir} \ + ${D}${sbindir} + oe_runmake 'DESTDIR=${D}' INSTALL=install install + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev + + install -d ${D}${sysconfdir}/udev/rules.d/ + + install -m 0644 ${WORKDIR}/mount.blacklist ${D}${sysconfdir}/udev/ + install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules + install -m 0644 ${WORKDIR}/permissions.rules ${D}${sysconfdir}/udev/rules.d/permissions.rules + install -m 0644 ${WORKDIR}/udev.rules ${D}${sysconfdir}/udev/rules.d/udev.rules + install -m 0644 ${WORKDIR}/links.conf ${D}${sysconfdir}/udev/links.conf + if [ "${UDEV_DEVFS_RULES}" = "1" ]; then + install -m 0644 ${WORKDIR}/devfs-udev.rules ${D}${sysconfdir}/udev/rules.d/devfs-udev.rules + fi + + install -d ${D}${sysconfdir}/udev/scripts/ + + install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh + install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts + + install -d ${D}${base_libdir}/udev/ +} + +pkg_postinst_append() { + + # Add the root partition to mount.blacklist to avoid a bug in the auto-mounter, + # causing confusion with fsck on boot + + while read dev mp fs junk + do + if test "$mp" = "/" + then + root_partition="$dev" + echo "$root_partition" >> ${sysconfdir}/udev/mount.blacklist + fi + done < ${sysconfdir}/fstab +} + -- cgit v1.2.3 From 5cf7c1a4e24bc8e031ecd57b04682f3d1d698052 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Tue, 12 Feb 2008 15:45:22 +0000 Subject: linux: Update bd-neon config for 2.6.22 --- packages/linux/linux-2.6.22/bd-neon/defconfig | 451 +++++++++++++++----------- packages/linux/linux_2.6.22.bb | 2 +- 2 files changed, 269 insertions(+), 184 deletions(-) diff --git a/packages/linux/linux-2.6.22/bd-neon/defconfig b/packages/linux/linux-2.6.22/bd-neon/defconfig index 9bd82a5e2d..183594674b 100644 --- a/packages/linux/linux-2.6.22/bd-neon/defconfig +++ b/packages/linux/linux-2.6.22/bd-neon/defconfig @@ -1,18 +1,27 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.19.2 -# Thu May 24 16:14:49 2007 +# Linux kernel version: 2.6.22 +# Tue Feb 12 16:12:07 2008 # CONFIG_ARM=y -# CONFIG_GENERIC_TIME is not set +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +# 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" @@ -36,9 +45,11 @@ CONFIG_LOCALVERSION_AUTO=y # CONFIG_TASKSTATS is not set # CONFIG_UTS_NS is not set # CONFIG_AUDIT is not set -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_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 @@ -54,14 +65,19 @@ 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_TIMERFD=y +CONFIG_EVENTFD=y CONFIG_SHMEM=y -CONFIG_SLAB=y CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set CONFIG_RT_MUTEXES=y # CONFIG_TINY_SHMEM is not set CONFIG_BASE_SMALL=0 -# CONFIG_SLOB is not set # # Loadable module support @@ -77,7 +93,9 @@ CONFIG_KMOD=y # Block layer # CONFIG_BLOCK=y +# CONFIG_LBD is not set # CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set # # IO Schedulers @@ -109,12 +127,15 @@ CONFIG_DEFAULT_IOSCHED="cfq" # 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_IXP4XX is not set -# CONFIG_ARCH_IXP2000 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_PNX4008 is not set CONFIG_ARCH_PXA=y # CONFIG_ARCH_RPC is not set @@ -122,6 +143,7 @@ CONFIG_ARCH_PXA=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 # @@ -132,6 +154,7 @@ CONFIG_ARCH_PXA=y # CONFIG_MACH_MAINSTONE is not set # CONFIG_MACH_ARGON is not set CONFIG_MACH_NEON=y +# CONFIG_MACH_NEON270 is not set # CONFIG_ARCH_PXA_IDP is not set # CONFIG_PXA_SHARPSL is not set # CONFIG_MACH_TRIZEPS4 is not set @@ -154,11 +177,14 @@ CONFIG_CPU_CP15_MMU=y # # CONFIG_ARM_THUMB is not set # CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +# CONFIG_IWMMXT is not set CONFIG_XSCALE_PMU=y # # Bus support # +# CONFIG_ARCH_SUPPORTS_MSI is not set # # PCCARD (PCMCIA/CardBus) support @@ -168,6 +194,7 @@ CONFIG_XSCALE_PMU=y # # Kernel Features # +# CONFIG_TICK_ONESHOT is not set # CONFIG_PREEMPT is not set # CONFIG_NO_IDLE_HZ is not set CONFIG_HZ=100 @@ -183,6 +210,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y # CONFIG_SPARSEMEM_STATIC is not set CONFIG_SPLIT_PTLOCK_CPUS=4096 # CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 CONFIG_ALIGNMENT_TRAP=y # @@ -190,8 +218,9 @@ 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 # # Floating point emulation @@ -210,13 +239,11 @@ CONFIG_FPE_NWFPE=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_AOUT is not set # CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set # # Power management options # # CONFIG_PM is not set -# CONFIG_APM is not set # # Networking @@ -226,13 +253,13 @@ CONFIG_NET=y # # Networking options # -# CONFIG_NETDEBUG is not set CONFIG_PACKET=y # CONFIG_PACKET_MMAP is not set CONFIG_UNIX=y CONFIG_XFRM=y # CONFIG_XFRM_USER is not set # CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set # CONFIG_NET_KEY is not set CONFIG_INET=y # CONFIG_IP_MULTICAST is not set @@ -259,25 +286,14 @@ 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 - -# -# DCCP Configuration (EXPERIMENTAL) -# # CONFIG_IP_DCCP is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# # CONFIG_IP_SCTP is not set - -# -# TIPC Configuration (EXPERIMENTAL) -# # CONFIG_TIPC is not set # CONFIG_ATM is not set # CONFIG_BRIDGE is not set @@ -303,6 +319,14 @@ CONFIG_DEFAULT_TCP_CONG="cubic" # 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=y +# CONFIG_MAC80211 is not set CONFIG_IEEE80211=y CONFIG_IEEE80211_DEBUG=y CONFIG_IEEE80211_CRYPT_WEP=y @@ -310,7 +334,7 @@ CONFIG_IEEE80211_CRYPT_CCMP=y CONFIG_IEEE80211_CRYPT_TKIP=y CONFIG_IEEE80211_SOFTMAC=y CONFIG_IEEE80211_SOFTMAC_DEBUG=y -CONFIG_WIRELESS_EXT=y +# CONFIG_RFKILL is not set # # Device Drivers @@ -323,6 +347,7 @@ CONFIG_WIRELESS_EXT=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 # @@ -330,10 +355,6 @@ CONFIG_FW_LOADER=y # CONFIG_CONNECTOR=y # CONFIG_PROC_EVENTS is not set - -# -# Memory Technology Devices (MTD) -# CONFIG_MTD=y # CONFIG_MTD_DEBUG is not set # CONFIG_MTD_CONCAT is not set @@ -346,6 +367,7 @@ CONFIG_MTD_CMDLINE_PARTS=y # User Modules And Translation Layers # CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y # CONFIG_MTD_BLOCK is not set CONFIG_MTD_BLOCK_RO=y # CONFIG_FTL is not set @@ -378,7 +400,6 @@ CONFIG_MTD_CFI_UTIL=y # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set # CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_OBSOLETE_CHIPS is not set # CONFIG_MTD_XIP is not set # @@ -407,16 +428,13 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=4 # CONFIG_MTD_DOC2000 is not set # CONFIG_MTD_DOC2001 is not set # CONFIG_MTD_DOC2001PLUS is not set - -# -# NAND Flash Device Drivers -# # CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set # -# OneNAND Flash Device Drivers +# UBI - Unsorted block images # -# CONFIG_MTD_ONENAND is not set +# CONFIG_MTD_UBI is not set # # Parallel port support @@ -426,6 +444,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=4 # # Plug and Play support # +# CONFIG_PNPACPI is not set # # Block devices @@ -439,13 +458,8 @@ CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=8192 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -CONFIG_BLK_DEV_INITRD=y # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set - -# -# ATA/ATAPI/MFM/RLL support -# # CONFIG_IDE is not set # @@ -453,6 +467,7 @@ CONFIG_BLK_DEV_INITRD=y # # CONFIG_RAID_ATTRS is not set CONFIG_SCSI=y +# CONFIG_SCSI_TGT is not set # CONFIG_SCSI_NETLINK is not set CONFIG_SCSI_PROC_FS=y @@ -472,6 +487,8 @@ CONFIG_BLK_DEV_SD=y # 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 @@ -487,10 +504,6 @@ CONFIG_BLK_DEV_SD=y # # CONFIG_ISCSI_TCP is not set # CONFIG_SCSI_DEBUG is not set - -# -# Serial ATA (prod) and Parallel ATA (experimental) drivers -# # CONFIG_ATA is not set # @@ -498,19 +511,6 @@ CONFIG_BLK_DEV_SD=y # # CONFIG_MD is not set -# -# Fusion MPT device support -# -# CONFIG_FUSION is not set - -# -# IEEE 1394 (FireWire) support -# - -# -# I2O device support -# - # # Network device support # @@ -519,10 +519,6 @@ CONFIG_NETDEVICES=y # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set - -# -# PHY device support -# # CONFIG_PHYLIB is not set # @@ -533,37 +529,24 @@ CONFIG_MII=y CONFIG_SMC91X=y # CONFIG_DM9000 is not set # CONFIG_SMC911X is not set +CONFIG_NETDEV_1000=y +# CONFIG_NETDEV_10000 is not set # -# Ethernet (1000 Mbit) +# Wireless LAN # +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set # -# Ethernet (10000 Mbit) -# - -# -# Token Ring devices -# - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y -CONFIG_NET_WIRELESS_RTNETLINK=y - -# -# Obsolete Wireless cards support (pre-802.11) -# -# CONFIG_STRIP is not set -# CONFIG_USB_ZD1201 is not set -# CONFIG_HOSTAP is not set -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set - -# -# Wan interfaces +# USB Network Adapters # +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +CONFIG_USB_PEGASUS=y +CONFIG_USB_RTL8150=y +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set # CONFIG_WAN is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set @@ -582,6 +565,7 @@ CONFIG_ZD1211RW=m # CONFIG_INPUT=y # CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set # # Userland interfaces @@ -591,7 +575,9 @@ 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_TSDEV is not set +CONFIG_INPUT_TSDEV=y +CONFIG_INPUT_TSDEV_SCREEN_X=800 +CONFIG_INPUT_TSDEV_SCREEN_Y=480 CONFIG_INPUT_EVDEV=y # CONFIG_INPUT_EVBUG is not set @@ -605,31 +591,37 @@ CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_GPIO is not set CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_PS2_ALPS is not set +# CONFIG_MOUSE_PS2_LOGIPS2PP is not set +# CONFIG_MOUSE_PS2_SYNAPTICS is not set +# CONFIG_MOUSE_PS2_LIFEBOOK is not set +# CONFIG_MOUSE_PS2_TRACKPOINT is not set +# 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_INPUT_JOYSTICK=y -# CONFIG_JOYSTICK_ANALOG is not set -# CONFIG_JOYSTICK_A3D is not set -# CONFIG_JOYSTICK_ADI is not set -# CONFIG_JOYSTICK_COBRA is not set -# CONFIG_JOYSTICK_GF2K is not set -# CONFIG_JOYSTICK_GRIP is not set -# CONFIG_JOYSTICK_GRIP_MP is not set -# CONFIG_JOYSTICK_GUILLEMOT is not set -# CONFIG_JOYSTICK_INTERACT is not set -# CONFIG_JOYSTICK_SIDEWINDER is not set -# CONFIG_JOYSTICK_TMDC is not set -# CONFIG_JOYSTICK_IFORCE is not set -# CONFIG_JOYSTICK_WARRIOR is not set -# CONFIG_JOYSTICK_MAGELLAN is not set -# CONFIG_JOYSTICK_SPACEORB is not set -# CONFIG_JOYSTICK_SPACEBALL is not set -# CONFIG_JOYSTICK_STINGER is not set -# CONFIG_JOYSTICK_TWIDJOY is not set -# CONFIG_JOYSTICK_JOYDUMP is not set -# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +CONFIG_TOUCHSCREEN_UCB1400=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y # CONFIG_INPUT_MISC is not set # @@ -671,10 +663,6 @@ CONFIG_LEGACY_PTY_COUNT=256 # IPMI # # CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# CONFIG_WATCHDOG=y CONFIG_WATCHDOG_NOWAYOUT=y @@ -691,23 +679,49 @@ CONFIG_SA1100_WATCHDOG=y # CONFIG_USBPCWATCHDOG is not set CONFIG_HW_RANDOM=y # CONFIG_NVRAM is not set -# CONFIG_DTLK is not set # CONFIG_R3964 is not set - -# -# Ftape, the floppy tape device driver -# # CONFIG_RAW_DRIVER is not set # # TPM devices # # CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=m +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set # -# I2C support +# I2C Hardware Bus support # -# CONFIG_I2C is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_PXA is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC 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_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set # # SPI support @@ -719,22 +733,61 @@ CONFIG_HW_RANDOM=y # Dallas's 1-wire bus # # CONFIG_W1 is not set - -# -# Hardware Monitoring support -# CONFIG_HWMON=y # CONFIG_HWMON_VID is not set # CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_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_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set # CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_FSCPOS is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set # CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set # CONFIG_HWMON_DEBUG_CHIP is not set # # Misc devices # CONFIG_BD_GENTIMER=y -# CONFIG_TIFM_CORE is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_SM501=y # # LED devices @@ -753,25 +806,39 @@ CONFIG_BD_GENTIMER=y # Multimedia devices # # CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set # -# Digital Video Broadcasting Devices +# Graphics support # -# CONFIG_DVB is not set -# CONFIG_USB_DABUSB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set # -# Graphics support +# Display device support # -CONFIG_FIRMWARE_EDID=y +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set CONFIG_FB=y -# CONFIG_FB_CFB_FILLRECT is not set -# CONFIG_FB_CFB_COPYAREA is not set -# CONFIG_FB_CFB_IMAGEBLIT is not set +CONFIG_FIRMWARE_EDID=y +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set # CONFIG_FB_MACMODES is not set # CONFIG_FB_BACKLIGHT is not set # CONFIG_FB_MODE_HELPERS is not set # CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_PXA is not set # CONFIG_FB_MBX is not set @@ -799,15 +866,10 @@ CONFIG_FONT_8x16=y # CONFIG_FONT_SUN8x16 is not set # CONFIG_FONT_SUN12x22 is not set # CONFIG_FONT_10x18 is not set - -# -# Logo configuration -# CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set CONFIG_LOGO_LINUX_CLUT224=y -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set # # Sound @@ -837,7 +899,6 @@ CONFIG_SND_DEBUG=y # Generic devices # CONFIG_SND_AC97_CODEC=y -CONFIG_SND_AC97_BUS=y # CONFIG_SND_DUMMY is not set # CONFIG_SND_MTPAV is not set # CONFIG_SND_SERIAL_U16550 is not set @@ -853,6 +914,12 @@ CONFIG_SND_PXA2XX_AC97=y # USB devices # # CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set # # Open Sound System @@ -863,7 +930,22 @@ CONFIG_SND_PXA2XX_AC97=y # Multimedia Capabilities Port drivers # CONFIG_UCB1400_TS=y -# CONFIG_UCB1400_TS_FIVE_WIRE is not set +CONFIG_UCB1400_TS_FIVE_WIRE=y +CONFIG_AC97_BUS=y + +# +# HID Devices +# +CONFIG_HID=y +# CONFIG_HID_DEBUG 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=y # # USB support @@ -878,7 +960,7 @@ CONFIG_USB=y # Miscellaneous USB options # CONFIG_USB_DEVICEFS=y -# CONFIG_USB_BANDWIDTH is not set +CONFIG_USB_DEVICE_CLASS=y # CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_OTG is not set @@ -916,42 +998,11 @@ CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_KARMA is not set CONFIG_USB_LIBUSUAL=y -# -# USB Input Devices -# -CONFIG_USB_HID=y -CONFIG_USB_HIDINPUT=y -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -CONFIG_USB_HIDDEV=y -# CONFIG_USB_AIPTEK is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_ACECAD is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_TOUCHSCREEN is not set -# CONFIG_USB_YEALINK is not set -# CONFIG_USB_XPAD is not set -# CONFIG_USB_ATI_REMOTE is not set -# CONFIG_USB_ATI_REMOTE2 is not set -# CONFIG_USB_KEYSPAN_REMOTE is not set -# CONFIG_USB_APPLETOUCH is not set - # # USB Imaging devices # # CONFIG_USB_MDC800 is not set # CONFIG_USB_MICROTEK is not set - -# -# USB Network Adapters -# -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -CONFIG_USB_PEGASUS=y -CONFIG_USB_RTL8150=y -# CONFIG_USB_USBNET_MII is not set -# CONFIG_USB_USBNET is not set # CONFIG_USB_MON is not set # @@ -1010,6 +1061,7 @@ CONFIG_USB_SERIAL_KEYSPAN_USA19=y # 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 CONFIG_USB_EZUSB=y CONFIG_AT91SAM7X=m CONFIG_AT91SAM7X_SERIAL=m @@ -1027,6 +1079,7 @@ CONFIG_AT91SAM7X_ETHER=m # 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 @@ -1036,6 +1089,7 @@ CONFIG_AT91SAM7X_ETHER=m # 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 # @@ -1048,6 +1102,7 @@ CONFIG_AT91SAM7X_ETHER=m CONFIG_USB_GADGET=y # CONFIG_USB_GADGET_DEBUG_FILES is not set CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_FSL_USB2 is not set # CONFIG_USB_GADGET_NET2280 is not set CONFIG_USB_GADGET_PXA2XX=y CONFIG_USB_PXA2XX=y @@ -1064,15 +1119,19 @@ CONFIG_USB_PXA2XX_SMALL=y # CONFIG_USB_FILE_STORAGE is not set CONFIG_USB_G_SERIAL=y # CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set # -# MMC/SD Card support +# MMC/SD Card Drivers # -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set CONFIG_MMC_BLOCK=y + +# +# MMC/SD Host Controller Drivers +# CONFIG_MMC_PXA=y -# CONFIG_MMC_TIFM_SD is not set # # Real Time Clock @@ -1133,6 +1192,7 @@ CONFIG_PROC_FS=y CONFIG_PROC_SYSCTL=y CONFIG_SYSFS=y CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y # CONFIG_CONFIGFS_FS is not set @@ -1147,11 +1207,15 @@ CONFIG_RAMFS=y # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_WRITEBUFFER=y CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set CONFIG_CRAMFS=y # CONFIG_VXFS_FS is not set # CONFIG_HPFS_FS is not set @@ -1171,6 +1235,7 @@ CONFIG_ROOT_NFS=y CONFIG_LOCKD=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 @@ -1230,6 +1295,11 @@ CONFIG_NLS_ISO8859_1=y # CONFIG_NLS_KOI8_U is not set CONFIG_NLS_UTF8=y +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + # # Profiling support # @@ -1243,30 +1313,32 @@ CONFIG_PRINTK_TIME=y CONFIG_ENABLE_MUST_CHECK=y CONFIG_MAGIC_SYSRQ=y # CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y -CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_DEBUG_SHIRQ is not set CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set # CONFIG_DEBUG_SLAB is not set # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set CONFIG_DEBUG_SPINLOCK=y CONFIG_DEBUG_MUTEXES=y -CONFIG_DEBUG_RWSEMS=y +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set CONFIG_DEBUG_SPINLOCK_SLEEP=y # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set # CONFIG_DEBUG_KOBJECT is not set CONFIG_DEBUG_BUGVERBOSE=y CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_FS is not set # CONFIG_DEBUG_VM is not set # CONFIG_DEBUG_LIST is not set CONFIG_FRAME_POINTER=y CONFIG_FORCED_INLINING=y -# CONFIG_HEADERS_CHECK is not set # CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set CONFIG_DEBUG_USER=y -CONFIG_DEBUG_WAITQ=y CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_LL=y # CONFIG_DEBUG_ICEDCC is not set @@ -1285,6 +1357,7 @@ CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_BLKCIPHER=y CONFIG_CRYPTO_MANAGER=y # CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set # CONFIG_CRYPTO_NULL is not set # CONFIG_CRYPTO_MD4 is not set # CONFIG_CRYPTO_MD5 is not set @@ -1293,9 +1366,14 @@ CONFIG_CRYPTO_MANAGER=y # CONFIG_CRYPTO_SHA512 is not set # CONFIG_CRYPTO_WP512 is not set # CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set CONFIG_CRYPTO_ECB=y # CONFIG_CRYPTO_CBC is not set +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_CRYPTD is not set # CONFIG_CRYPTO_DES is not set +# CONFIG_CRYPTO_FCRYPT is not set # CONFIG_CRYPTO_BLOWFISH is not set # CONFIG_CRYPTO_TWOFISH is not set # CONFIG_CRYPTO_SERPENT is not set @@ -1309,6 +1387,7 @@ CONFIG_CRYPTO_ARC4=y # CONFIG_CRYPTO_DEFLATE is not set CONFIG_CRYPTO_MICHAEL_MIC=y CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_CAMELLIA is not set # CONFIG_CRYPTO_TEST is not set # @@ -1318,9 +1397,15 @@ CONFIG_CRYPTO_CRC32C=y # # 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_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.22.bb b/packages/linux/linux_2.6.22.bb index 03d945adbf..bb8749f0d6 100644 --- a/packages/linux/linux_2.6.22.bb +++ b/packages/linux/linux_2.6.22.bb @@ -5,7 +5,7 @@ DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_cm-x270 = "-1" DEFAULT_PREFERENCE_bd-neon = "0" -PR = "r4" +PR = "r5" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \ file://defconfig \ -- cgit v1.2.3 From 7083b385f61a37eabba234ec5704e4e3e3c8cd26 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 12 Feb 2008 17:46:33 +0000 Subject: bitbake.conf: Set default IMAGE_FSTYPES to "tar.gz". * Per RFC on the ML, as the means to use neutral, well-known format as the default. * Machines which have affinity towards jffs2, can add 'IMAGE_FSTYPES ?= "jffs2"' to their configs. (Many known machines have been updated already). --- conf/bitbake.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/bitbake.conf b/conf/bitbake.conf index ac2d281123..c6ef6012bf 100644 --- a/conf/bitbake.conf +++ b/conf/bitbake.conf @@ -541,7 +541,7 @@ require conf/sanity.conf ################################################################## DL_DIR ?= "${TMPDIR}/downloads" -IMAGE_FSTYPES ?= "jffs2" +IMAGE_FSTYPES ?= "tar.gz" PCMCIA_MANAGER ?= "pcmcia-cs" DEFAULT_TASK_PROVIDER ?= "task-base" MACHINE_TASK_PROVIDER ?= "${DEFAULT_TASK_PROVIDER}" -- cgit v1.2.3 From b9e4b25300b451df273a4d64aef4530b8ec18fbc Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 12 Feb 2008 17:56:42 +0000 Subject: bitbake.conf, image.bbclass: Add and use USERDISTRO var to preserve original DISTRO value. * Some distros override DISTRO var to hack overrides right, etc. Yet, original value may be needed sometimes. For example, bbimage expects DISTRO to be what user set/passed it, not something else. * TODO: After interim cleanup during preparation of this patch, it turns out that angstrom is the only distro to (ab)use DISTRO overriding. It may make sense to instead get its OVERRIDES value right. --- classes/image.bbclass | 1 + conf/bitbake.conf | 4 ++++ conf/distro/include/angstrom.inc | 2 ++ 3 files changed, 7 insertions(+) diff --git a/classes/image.bbclass b/classes/image.bbclass index ca9c9458e1..d70cfa5daf 100644 --- a/classes/image.bbclass +++ b/classes/image.bbclass @@ -90,6 +90,7 @@ fakeroot do_rootfs () { ${IMAGE_PREPROCESS_COMMAND} export TOPDIR=${TOPDIR} + export DISTRO=${USERDISTRO} export MACHINE=${MACHINE} for type in ${IMAGE_FSTYPES}; do diff --git a/conf/bitbake.conf b/conf/bitbake.conf index c6ef6012bf..27a04a028c 100644 --- a/conf/bitbake.conf +++ b/conf/bitbake.conf @@ -529,6 +529,10 @@ OVERRIDES = "local:${MACHINE}:${DISTRO}:${TARGET_OS}:${TARGET_ARCH}:build-${BUIL include conf/site.conf include conf/auto.conf include conf/local.conf +# USERDISTRO should always contain original DISTRO value as set by user +# If a distro config overrides DISTRO for whatever reason (e.g. to get +# overrides like it wants), USERDISTRO must be reassigned with := first +USERDISTRO = "${DISTRO}" include conf/build/${BUILD_SYS}.conf include conf/target/${TARGET_SYS}.conf include conf/machine/${MACHINE}.conf diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc index fe216800c3..6ba20c4830 100644 --- a/conf/distro/include/angstrom.inc +++ b/conf/distro/include/angstrom.inc @@ -2,6 +2,8 @@ #@NAME: Angstrom #@DESCRIPTION: Release independent distribution configuration for Angstrom +# Preserve original DISTRO value +USERDISTRO := "${DISTRO}" DISTRO = "angstrom" DISTRO_NAME = "Angstrom" -- cgit v1.2.3 From f6d75d235751beea6ccdf865fc302ff97259de65 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Tue, 12 Feb 2008 18:39:13 +0000 Subject: anki: initial commit for flash-card program with spaced repitition --- packages/anki/.mtn2git_empty | 0 packages/anki/anki.inc | 15 +++++++++++++++ packages/anki/anki_0.4.3.bb | 7 +++++++ packages/anki/libanki_0.4.3.bb | 5 +++++ 4 files changed, 27 insertions(+) create mode 100644 packages/anki/.mtn2git_empty create mode 100644 packages/anki/anki.inc create mode 100644 packages/anki/anki_0.4.3.bb create mode 100644 packages/anki/libanki_0.4.3.bb diff --git a/packages/anki/.mtn2git_empty b/packages/anki/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/anki/anki.inc b/packages/anki/anki.inc new file mode 100644 index 0000000000..4b996b0f2a --- /dev/null +++ b/packages/anki/anki.inc @@ -0,0 +1,15 @@ +DESCRIPTION = "Anki is a program designed to help you remember facts \ +(such as words and phrases in a foreign language) \ +as easily, quickly and efficiently as possible" +HOMEPAGE = "http://ichi2.net/anki/" +AUTHOR = "Damien Elmes" +PRIORITY = "optional" +LICENSE = "GPLv2" +DEPENDS = "qt4-x11-free python python-pyqt python-native" +RRECOMMENDS = "kakasi virtual/japanese-font" + +SRC_URI = "http://ichi2.net/anki/download/anki-${PV}.tgz" + +inherit autotools setuptools + +PACKAGE_ARCH = "all" diff --git a/packages/anki/anki_0.4.3.bb b/packages/anki/anki_0.4.3.bb new file mode 100644 index 0000000000..90d3ecd6b8 --- /dev/null +++ b/packages/anki/anki_0.4.3.bb @@ -0,0 +1,7 @@ +require anki.inc + +RDEPENDS += "libanki" +PR = "r0" + +S = "${WORKDIR}/anki-${PV}" + diff --git a/packages/anki/libanki_0.4.3.bb b/packages/anki/libanki_0.4.3.bb new file mode 100644 index 0000000000..ac33833790 --- /dev/null +++ b/packages/anki/libanki_0.4.3.bb @@ -0,0 +1,5 @@ +require anki.inc + +PR = "r0" + +S = "${WORKDIR}/anki-${PV}/libanki" -- cgit v1.2.3 From b71755f5063c33c58a77a088fed19cf7e6f6bfeb Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 12 Feb 2008 19:22:33 +0000 Subject: anki 0.4.3 make it build --- packages/anki/anki.inc | 4 ++-- packages/anki/anki_0.4.3.bb | 4 +++- packages/anki/files/.mtn2git_empty | 0 .../anki/files/no-need-for-pyqt-at-buildtime.patch | 28 ++++++++++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 packages/anki/files/.mtn2git_empty create mode 100644 packages/anki/files/no-need-for-pyqt-at-buildtime.patch diff --git a/packages/anki/anki.inc b/packages/anki/anki.inc index 4b996b0f2a..e9a71c286b 100644 --- a/packages/anki/anki.inc +++ b/packages/anki/anki.inc @@ -5,11 +5,11 @@ HOMEPAGE = "http://ichi2.net/anki/" AUTHOR = "Damien Elmes" PRIORITY = "optional" LICENSE = "GPLv2" -DEPENDS = "qt4-x11-free python python-pyqt python-native" +RDEPENDS = "python-pyqt" RRECOMMENDS = "kakasi virtual/japanese-font" SRC_URI = "http://ichi2.net/anki/download/anki-${PV}.tgz" -inherit autotools setuptools +inherit setuptools PACKAGE_ARCH = "all" diff --git a/packages/anki/anki_0.4.3.bb b/packages/anki/anki_0.4.3.bb index 90d3ecd6b8..5d0c8fabe7 100644 --- a/packages/anki/anki_0.4.3.bb +++ b/packages/anki/anki_0.4.3.bb @@ -3,5 +3,7 @@ require anki.inc RDEPENDS += "libanki" PR = "r0" -S = "${WORKDIR}/anki-${PV}" +export PV +SRC_URI += "file://no-need-for-pyqt-at-buildtime.patch;patch=1" +S = "${WORKDIR}/anki-${PV}" diff --git a/packages/anki/files/.mtn2git_empty b/packages/anki/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/anki/files/no-need-for-pyqt-at-buildtime.patch b/packages/anki/files/no-need-for-pyqt-at-buildtime.patch new file mode 100644 index 0000000000..56cfec4999 --- /dev/null +++ b/packages/anki/files/no-need-for-pyqt-at-buildtime.patch @@ -0,0 +1,28 @@ +# +# (C) Michael 'Mickey' Lauer +# +Index: anki-0.4.3/setup.py +=================================================================== +--- anki-0.4.3.orig/setup.py 2008-02-12 19:17:56.000000000 +0000 ++++ anki-0.4.3/setup.py 2008-02-12 19:19:29.000000000 +0000 +@@ -3,10 +3,8 @@ + from setuptools import setup, find_packages + import sys, os + +-import ankiqt +- + setup(name='ankiqt', +- version=ankiqt.appVersion, ++ version=os.environ["PV"], + description='An intelligent spaced-repetition memory training program', + long_description="", + # Get strings from http://www.python.org/pypi?%3Aaction=list_classifiers +@@ -24,7 +22,7 @@ + license='GPLv2', + packages=find_packages(), + include_package_data=True, +- install_requires = 'anki >= ' + ankiqt.appVersion, ++ install_requires = 'anki >= ' + os.environ["PV"], + zip_safe=False, + package_data={'ankiqt': + ['locale/*/*/*']}, -- cgit v1.2.3 From b1225d328e3b12bdea5e7bd89b91217468c39c0e Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 12 Feb 2008 21:14:54 +0000 Subject: linux-handhelds-2.6 2.6.21-hh20: Use noop iosched by default, make other modular. * Per discussion on ML. * defconfigman r440. --- .../linux/linux-handhelds-2.6-2.6.21/asus620/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/asus730/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig | 14 +++++++------- .../linux-handhelds-2.6-2.6.21/htcblueangel/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig | 14 +++++++------- .../linux-handhelds-2.6-2.6.21/htcuniversal/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig | 14 +++++++------- .../linux/linux-handhelds-2.6-2.6.21/magician/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig | 14 +++++++------- packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb | 2 +- 25 files changed, 169 insertions(+), 169 deletions(-) diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig index c9d51692f1..b4ed9dc01b 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:18 2008 +# Tue Feb 12 22:00:35 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig index c3969f2d7c..5456b9d6db 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:19 2008 +# Tue Feb 12 22:00:36 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig index 89eec63677..f7200e9b53 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:19 2008 +# Tue Feb 12 22:00:37 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig index 4a4abb9375..87dbcbe9e2 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:20 2008 +# Tue Feb 12 22:00:37 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -95,14 +95,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig index fab476ca75..d5f7ec70ad 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:20 2008 +# Tue Feb 12 22:00:38 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig index a62949b67e..5ae9220e3d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:21 2008 +# Tue Feb 12 22:00:39 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig index ae663cfc31..2ec8b863be 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:21 2008 +# Tue Feb 12 22:00:39 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig index 34c2a83bd1..b3e75f0cff 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:21 2008 +# Tue Feb 12 22:00:40 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig index eb184f552e..75591a1545 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:22 2008 +# Tue Feb 12 22:00:41 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig index 8b15cfa458..2d0f6fdc5d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:22 2008 +# Tue Feb 12 22:00:42 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig index 11e42b0336..db78efafca 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:23 2008 +# Tue Feb 12 22:00:42 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig index ce17fad6a0..f1c29a7ce1 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:24 2008 +# Tue Feb 12 22:00:44 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig index 67f0e76bf0..4f90d2c2e8 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:24 2008 +# Tue Feb 12 22:00:45 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig index 9b4037354f..d428d53055 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:25 2008 +# Tue Feb 12 22:00:46 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig index 1a2f64f28b..f6477d1189 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:25 2008 +# Tue Feb 12 22:00:46 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig index b7c9c46845..25982ed5a8 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:26 2008 +# Tue Feb 12 22:00:47 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig index 8c42382e27..1e5afd496f 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:26 2008 +# Tue Feb 12 22:00:47 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig index eb4d556fa0..060ec46886 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:27 2008 +# Tue Feb 12 22:00:48 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig index 4ff70afbea..b64b0e2ece 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:27 2008 +# Tue Feb 12 22:00:49 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig index 47d754d73e..779a872d29 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:23 2008 +# Tue Feb 12 22:00:43 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig index a59a838ae1..cd8fdd8420 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:27 2008 +# Tue Feb 12 22:00:49 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig index d19918874b..e76999499e 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:24 2008 +# Tue Feb 12 22:00:44 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -96,14 +96,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig index 67f823f5f9..a73eec0cec 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:28 2008 +# Tue Feb 12 22:00:50 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -95,14 +95,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig index c5f80cd5df..3cae44cf08 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Sun Feb 10 21:02:28 2008 +# Tue Feb 12 22:00:51 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -95,14 +95,14 @@ CONFIG_BLOCK=y # 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_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" # # System Type diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb index 22ea976815..32f3e3053f 100644 --- a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb +++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb @@ -1,7 +1,7 @@ SECTION = "kernel" DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices." LICENSE = "GPL" -PR = "r8" +PR = "r10" DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From edda361ada8aa28208c77d95d5b4387586d333c2 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 13 Feb 2008 01:15:33 +0000 Subject: libpcap: unify and add flex-native and bison-native to DEPENDS --- packages/libpcap/libpcap.inc | 33 +++++++++++++++++++++++++++++++++ packages/libpcap/libpcap_0.9.3.bb | 33 ++------------------------------- packages/libpcap/libpcap_0.9.5.bb | 33 ++------------------------------- packages/libpcap/libpcap_0.9.6.bb | 37 ++----------------------------------- 4 files changed, 39 insertions(+), 97 deletions(-) create mode 100644 packages/libpcap/libpcap.inc diff --git a/packages/libpcap/libpcap.inc b/packages/libpcap/libpcap.inc new file mode 100644 index 0000000000..f2e5d3072b --- /dev/null +++ b/packages/libpcap/libpcap.inc @@ -0,0 +1,33 @@ +DESCRIPTION = "Network Packet Capture Library" +HOMEPAGE = "http://www.tcpdump.org/" +SECTION = "libs/network" +LICENSE = "BSD" +DEPENDS = "flex-native bison-native" + +# Don't forget to edit shared.patch to have the correct version number inside +SRC_URI = "http://www.tcpdump.org/release/libpcap-${PV}.tar.gz \ + file://shared.patch;patch=1" + +inherit autotools + +EXTRA_OECONF = "--with-pcap=linux" + +CPPFLAGS_prepend = "-I${S} " +CFLAGS_prepend = "-I${S} " +CXXFLAGS_prepend = "-I${S} " + +do_configure_prepend () { + if [ ! -e acinclude.m4 ]; then + cat aclocal.m4 > acinclude.m4 + fi +} + +do_stage () { + install -m 0644 pcap.h ${STAGING_INCDIR}/pcap.h + install -m 0644 pcap-namedb.h ${STAGING_INCDIR}/pcap-namedb.h + install -m 0644 pcap-bpf.h ${STAGING_INCDIR}/pcap-bpf.h + oe_libinstall -a -so libpcap ${STAGING_LIBDIR} + install -d ${STAGING_INCDIR}/net + ln -sf ${STAGING_INCDIR}/pcap-bpf.h ${STAGING_INCDIR}/net/bpf.h + install -m 0644 acinclude.m4 ${STAGING_DATADIR}/aclocal/libpcap.m4 +} diff --git a/packages/libpcap/libpcap_0.9.3.bb b/packages/libpcap/libpcap_0.9.3.bb index 5d66687482..865e57ab93 100644 --- a/packages/libpcap/libpcap_0.9.3.bb +++ b/packages/libpcap/libpcap_0.9.3.bb @@ -1,32 +1,3 @@ -DESCRIPTION = "Network Packet Capture Library" -HOMEPAGE = "http://www.tcpdump.org/" -LICENSE = "BSD" -SECTION = "libs/network" -PR = "r1" +require libpcap.inc -SRC_URI = "http://www.tcpdump.org/release/libpcap-${PV}.tar.gz \ - file://shared.patch;patch=1" - -inherit autotools - -EXTRA_OECONF = "--with-pcap=linux" - -CPPFLAGS_prepend = "-I${S} " -CFLAGS_prepend = "-I${S} " -CXXFLAGS_prepend = "-I${S} " - -do_configure_prepend () { - if [ ! -e acinclude.m4 ]; then - cat aclocal.m4 > acinclude.m4 - fi -} - -do_stage () { - install -m 0644 pcap.h ${STAGING_INCDIR}/pcap.h - install -m 0644 pcap-namedb.h ${STAGING_INCDIR}/pcap-namedb.h - install -m 0644 pcap-bpf.h ${STAGING_INCDIR}/pcap-bpf.h - oe_libinstall -a -so libpcap ${STAGING_LIBDIR} - install -d ${STAGING_INCDIR}/net - ln -sf ${STAGING_INCDIR}/pcap-bpf.h ${STAGING_INCDIR}/net/bpf.h - install -m 0644 acinclude.m4 ${STAGING_DATADIR}/aclocal/libpcap.m4 -} +PR = "r2" diff --git a/packages/libpcap/libpcap_0.9.5.bb b/packages/libpcap/libpcap_0.9.5.bb index 5d66687482..865e57ab93 100644 --- a/packages/libpcap/libpcap_0.9.5.bb +++ b/packages/libpcap/libpcap_0.9.5.bb @@ -1,32 +1,3 @@ -DESCRIPTION = "Network Packet Capture Library" -HOMEPAGE = "http://www.tcpdump.org/" -LICENSE = "BSD" -SECTION = "libs/network" -PR = "r1" +require libpcap.inc -SRC_URI = "http://www.tcpdump.org/release/libpcap-${PV}.tar.gz \ - file://shared.patch;patch=1" - -inherit autotools - -EXTRA_OECONF = "--with-pcap=linux" - -CPPFLAGS_prepend = "-I${S} " -CFLAGS_prepend = "-I${S} " -CXXFLAGS_prepend = "-I${S} " - -do_configure_prepend () { - if [ ! -e acinclude.m4 ]; then - cat aclocal.m4 > acinclude.m4 - fi -} - -do_stage () { - install -m 0644 pcap.h ${STAGING_INCDIR}/pcap.h - install -m 0644 pcap-namedb.h ${STAGING_INCDIR}/pcap-namedb.h - install -m 0644 pcap-bpf.h ${STAGING_INCDIR}/pcap-bpf.h - oe_libinstall -a -so libpcap ${STAGING_LIBDIR} - install -d ${STAGING_INCDIR}/net - ln -sf ${STAGING_INCDIR}/pcap-bpf.h ${STAGING_INCDIR}/net/bpf.h - install -m 0644 acinclude.m4 ${STAGING_DATADIR}/aclocal/libpcap.m4 -} +PR = "r2" diff --git a/packages/libpcap/libpcap_0.9.6.bb b/packages/libpcap/libpcap_0.9.6.bb index 9822f38ada..865e57ab93 100644 --- a/packages/libpcap/libpcap_0.9.6.bb +++ b/packages/libpcap/libpcap_0.9.6.bb @@ -1,36 +1,3 @@ -# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved -# Released under the MIT license (see packages/COPYING) -DESCRIPTION = "Network Packet Capture Library" -HOMEPAGE = "http://www.tcpdump.org/" -LICENSE = "BSD" -SECTION = "libs/network" -PR = "r1" +require libpcap.inc - -# Don't forget to edit shared.patch to have the correct version number inside -SRC_URI = "http://www.tcpdump.org/release/libpcap-${PV}.tar.gz \ - file://shared.patch;patch=1" - -inherit autotools - -EXTRA_OECONF = "--with-pcap=linux" - -CPPFLAGS_prepend = "-I${S} " -CFLAGS_prepend = "-I${S} " -CXXFLAGS_prepend = "-I${S} " - -do_configure_prepend () { - if [ ! -e acinclude.m4 ]; then - cat aclocal.m4 > acinclude.m4 - fi -} - -do_stage () { - install -m 0644 pcap.h ${STAGING_INCDIR}/pcap.h - install -m 0644 pcap-namedb.h ${STAGING_INCDIR}/pcap-namedb.h - install -m 0644 pcap-bpf.h ${STAGING_INCDIR}/pcap-bpf.h - oe_libinstall -a -so libpcap ${STAGING_LIBDIR} - install -d ${STAGING_INCDIR}/net - ln -sf ${STAGING_INCDIR}/pcap-bpf.h ${STAGING_INCDIR}/net/bpf.h - install -m 0644 acinclude.m4 ${STAGING_DATADIR}/aclocal/libpcap.m4 -} +PR = "r2" -- cgit v1.2.3 From 9e22b40c91dea26e68c7dc3eed65ca8a37ded848 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Wed, 13 Feb 2008 01:19:55 +0000 Subject: rxtx: Fixes. - added custom compilation step - corrected build dependencies --- packages/rxtx/rxtx_2.1-7r2.bb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/rxtx/rxtx_2.1-7r2.bb b/packages/rxtx/rxtx_2.1-7r2.bb index 260b70a1fe..0630d498d6 100644 --- a/packages/rxtx/rxtx_2.1-7r2.bb +++ b/packages/rxtx/rxtx_2.1-7r2.bb @@ -3,6 +3,10 @@ LICENSE = "LGPL" SECTION = "libs" HOMEPAGE = "http://rxtx.org" +PR = "r1" + +DEPENDS = "classpath classpath-native virtual/javac-native" + inherit autotools java-library SRC_URI = "\ @@ -10,6 +14,15 @@ SRC_URI = "\ file://rxtx-fixes-from-debian.patch;patch=1 \ " +do_compile() { + # Whatever configure detected it is completely unusable. So we override heavily. + oe_runmake \ + JAVAH="gjavah -classpath \$(CLASSPATH) -d \$(DEST) -jni" \ + JAR=gjar \ + JAVAC="javac -classpath \$(CLASSPATH) -d \$(TOP)/ -O -source 1.3 -target 1.3" \ + JAVAINCLUDEDIR=${STAGING_INCDIR}/classpath +} + do_install() { install -d ${D}/${libdir_jni} install -d ${D}/${datadir_java} -- cgit v1.2.3 From 3132647d57bab70919f8207d237878056378345d Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Wed, 13 Feb 2008 01:24:15 +0000 Subject: swt-gtk: - added explicit classpath-native dependency as gjar is used - removed install -d command --- packages/swt/swt-gtk.inc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/swt/swt-gtk.inc b/packages/swt/swt-gtk.inc index 6afadf1cab..9c978950c8 100644 --- a/packages/swt/swt-gtk.inc +++ b/packages/swt/swt-gtk.inc @@ -3,7 +3,7 @@ LICENSE = "CPL MPL LGPL" inherit java-library -DEPENDS = "cairo gtk+ atk libxtst" +DEPENDS = "classpath-native cairo gtk+ atk libxtst" S = "${WORKDIR}/swt-source" @@ -36,7 +36,6 @@ do_install() { oe_jarinstall swt.jar oe_jarinstall swt-gtk-${PV}.jar swt-gtk.jar - install -d ${D}${libdir_jni} oe_libinstall -so libswt-atk-gtk-${SWTVERSION} ${D}/${libdir_jni} oe_libinstall -so libswt-cairo-gtk-${SWTVERSION} ${D}/${libdir_jni} oe_libinstall -so libswt-pi-gtk-${SWTVERSION} ${D}/${libdir_jni} -- cgit v1.2.3 From 89dccbe47302c430477b871dda48313c1ebe94e6 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 13 Feb 2008 09:55:55 +0000 Subject: gpe-login, keylaunch: Annotate patches submitted upstream as RFCed on the list. --- packages/gpe-login/files/gpe-xcalibrate-rises-from-dead.patch | 2 ++ packages/gpe-login/files/lock-on-supend.patch | 2 ++ packages/gpe-login/files/size-autolock-properly.patch | 2 ++ packages/keylaunch/files/unbreak-keyevents.patch | 2 ++ 4 files changed, 8 insertions(+) diff --git a/packages/gpe-login/files/gpe-xcalibrate-rises-from-dead.patch b/packages/gpe-login/files/gpe-xcalibrate-rises-from-dead.patch index afad073acf..d1745f0897 100644 --- a/packages/gpe-login/files/gpe-xcalibrate-rises-from-dead.patch +++ b/packages/gpe-login/files/gpe-xcalibrate-rises-from-dead.patch @@ -1,3 +1,5 @@ +upstream: http://bugs.linuxtogo.org/show_bug.cgi?id=124 + diff -r 976c01632fea gpe-login.keylaunchrc --- a/gpe-login.keylaunchrc Sun Nov 25 22:39:23 2007 +0200 +++ b/gpe-login.keylaunchrc Mon Nov 26 01:12:14 2007 +0200 diff --git a/packages/gpe-login/files/lock-on-supend.patch b/packages/gpe-login/files/lock-on-supend.patch index 2aeb20f1ea..29ccce5ae6 100644 --- a/packages/gpe-login/files/lock-on-supend.patch +++ b/packages/gpe-login/files/lock-on-supend.patch @@ -1,3 +1,5 @@ +upstream: http://bugs.linuxtogo.org/show_bug.cgi?id=125 + Lock screen when device goes to suspend, not after some time has passed since resume and they stole your data from the unprotected screen. diff --git a/packages/gpe-login/files/size-autolock-properly.patch b/packages/gpe-login/files/size-autolock-properly.patch index b8e2cd6f4f..cf2978f34d 100644 --- a/packages/gpe-login/files/size-autolock-properly.patch +++ b/packages/gpe-login/files/size-autolock-properly.patch @@ -1,3 +1,5 @@ +upstream: http://bugs.linuxtogo.org/show_bug.cgi?id=152 + # HG changeset patch # User "Paul Sokolovsky " # Date 1196345352 -7200 diff --git a/packages/keylaunch/files/unbreak-keyevents.patch b/packages/keylaunch/files/unbreak-keyevents.patch index 0a2d58b16a..ee13cc9a63 100644 --- a/packages/keylaunch/files/unbreak-keyevents.patch +++ b/packages/keylaunch/files/unbreak-keyevents.patch @@ -1,3 +1,5 @@ +upstream: http://bugs.linuxtogo.org/show_bug.cgi?id=123 + # HG changeset patch # User "Paul Sokolovsky " # Date 1196027570 -7200 -- cgit v1.2.3 From ea0ed6298a772fd62b0248717b04ac116f8221b4 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 13 Feb 2008 11:05:34 +0000 Subject: tslib: consolidate, taking extra care 0038f02055e33a3dad0ba914de112ce9450c45d4 is dealt with properly --- packages/tslib/tslib-1.0/bd-neon/.mtn2git_empty | 0 packages/tslib/tslib-1.0/bd-neon/ts.conf | 5 - packages/tslib/tslib-1.0/bd-neon/tslib.sh | 6 -- packages/tslib/tslib-1.0/fic-gta01/.mtn2git_empty | 0 packages/tslib/tslib-1.0/fic-gta01/ts.conf | 25 ----- packages/tslib/tslib-1.0/ts.conf | 25 ----- .../tslib-1.0/tslib-input_raw-grab_events.patch | 120 --------------------- packages/tslib/tslib/bd-neon/.mtn2git_empty | 0 packages/tslib/tslib/bd-neon/ts.conf | 5 + packages/tslib/tslib/bd-neon/tslib.sh | 6 ++ packages/tslib/tslib/fic-gta01/.mtn2git_empty | 0 packages/tslib/tslib/fic-gta01/ts.conf | 25 +++++ packages/tslib/tslib/ts.conf | 2 +- .../tslib/tslib/tslib-input_raw-grab_events.patch | 120 +++++++++++++++++++++ 14 files changed, 157 insertions(+), 182 deletions(-) delete mode 100644 packages/tslib/tslib-1.0/bd-neon/.mtn2git_empty delete mode 100644 packages/tslib/tslib-1.0/bd-neon/ts.conf delete mode 100644 packages/tslib/tslib-1.0/bd-neon/tslib.sh delete mode 100644 packages/tslib/tslib-1.0/fic-gta01/.mtn2git_empty delete mode 100644 packages/tslib/tslib-1.0/fic-gta01/ts.conf delete mode 100644 packages/tslib/tslib-1.0/ts.conf delete mode 100644 packages/tslib/tslib-1.0/tslib-input_raw-grab_events.patch create mode 100644 packages/tslib/tslib/bd-neon/.mtn2git_empty create mode 100644 packages/tslib/tslib/bd-neon/ts.conf create mode 100644 packages/tslib/tslib/bd-neon/tslib.sh create mode 100644 packages/tslib/tslib/fic-gta01/.mtn2git_empty create mode 100644 packages/tslib/tslib/fic-gta01/ts.conf create mode 100644 packages/tslib/tslib/tslib-input_raw-grab_events.patch diff --git a/packages/tslib/tslib-1.0/bd-neon/.mtn2git_empty b/packages/tslib/tslib-1.0/bd-neon/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/tslib/tslib-1.0/bd-neon/ts.conf b/packages/tslib/tslib-1.0/bd-neon/ts.conf deleted file mode 100644 index 15fe294ce6..0000000000 --- a/packages/tslib/tslib-1.0/bd-neon/ts.conf +++ /dev/null @@ -1,5 +0,0 @@ -module_raw ucb1x00 -module pthres pmin=1 -module variance delta=500 -module dejitter delta=10000 -module linear diff --git a/packages/tslib/tslib-1.0/bd-neon/tslib.sh b/packages/tslib/tslib-1.0/bd-neon/tslib.sh deleted file mode 100644 index b5f1c906f3..0000000000 --- a/packages/tslib/tslib-1.0/bd-neon/tslib.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -TSLIB_TSDEVICE=/dev/touch_ucb1x00 - -export TSLIB_TSDEVICE - diff --git a/packages/tslib/tslib-1.0/fic-gta01/.mtn2git_empty b/packages/tslib/tslib-1.0/fic-gta01/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/tslib/tslib-1.0/fic-gta01/ts.conf b/packages/tslib/tslib-1.0/fic-gta01/ts.conf deleted file mode 100644 index 82f712ef41..0000000000 --- a/packages/tslib/tslib-1.0/fic-gta01/ts.conf +++ /dev/null @@ -1,25 +0,0 @@ -# Uncomment if you wish to use the linux input layer event interface -module_raw input grab_events=1 - -# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d -# module_raw collie - -# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860 -# module_raw corgi - -# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface -# module_raw ucb1x00 - -# Uncomment if you're using an HP iPaq h3600 or similar -# module_raw h3600 - -# Uncomment if you're using a Hitachi Webpad -# module_raw mk712 - -# Uncomment if you're using an IBM Arctic II -# module_raw arctic2 - -module pthres pmin=1 -module variance delta=30 -module dejitter delta=100 -module linear diff --git a/packages/tslib/tslib-1.0/ts.conf b/packages/tslib/tslib-1.0/ts.conf deleted file mode 100644 index 1abde2fc7f..0000000000 --- a/packages/tslib/tslib-1.0/ts.conf +++ /dev/null @@ -1,25 +0,0 @@ -# Uncomment if you wish to use the linux input layer event interface -module_raw input grab_events=0 - -# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d -# module_raw collie - -# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860 -# module_raw corgi - -# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface -# module_raw ucb1x00 - -# Uncomment if you're using an HP iPaq h3600 or similar -# module_raw h3600 - -# Uncomment if you're using a Hitachi Webpad -# module_raw mk712 - -# Uncomment if you're using an IBM Arctic II -# module_raw arctic2 - -module pthres pmin=1 -module variance delta=30 -module dejitter delta=100 -module linear diff --git a/packages/tslib/tslib-1.0/tslib-input_raw-grab_events.patch b/packages/tslib/tslib-1.0/tslib-input_raw-grab_events.patch deleted file mode 100644 index 4bd0a05531..0000000000 --- a/packages/tslib/tslib-1.0/tslib-input_raw-grab_events.patch +++ /dev/null @@ -1,120 +0,0 @@ -This patch adds support for "EVIOCGRAB" on the input device, which -tells the kernel _not_ to deliver events of the touchscreen to -/dev/input/mice. - -This is probably what most people want, since unprocessed raw touchscreen -events should not be converted to emulated PS/2 mouse movements. - -Signed-off-by: Harald Welte - -Index: a/plugins/input-raw.c -=================================================================== ---- a/plugins/input-raw.c (revision 49) -+++ b/plugins/input-raw.c (working copy) -@@ -18,6 +18,7 @@ - - #include - #include -+#include - - #include - #ifdef HAVE_UNISTD_H -@@ -33,6 +34,9 @@ - - #include "tslib-private.h" - -+#define GRAB_EVENTS_WANTED 1 -+#define GRAB_EVENTS_ACTIVE 2 -+ - struct tslib_input { - struct tslib_module_info module; - -@@ -42,6 +46,7 @@ - - int sane_fd; - int using_syn; -+ int grab_events; - }; - - static int check_fd(struct tslib_input *i) -@@ -64,6 +69,14 @@ - - if (bit & (1 << EV_SYN)) - i->using_syn = 1; -+ -+ if (i->grab_events == GRAB_EVENTS_WANTED) { -+ if (ioctl(ts->fd, EVIOCGRAB, (void *)1)) { -+ fprintf(stderr, "Unable to grab selected input device\n"); -+ return -1; -+ } -+ i->grab_events = GRAB_EVENTS_ACTIVE; -+ } - - return 0; - } -@@ -222,6 +235,15 @@ - - static int ts_input_fini(struct tslib_module_info *inf) - { -+ struct tslib_input *i = (struct tslib_input *)inf; -+ struct tsdev *ts = inf->dev; -+ -+ if (i->grab_events == GRAB_EVENTS_ACTIVE) { -+ if (ioctl(ts->fd, EVIOCGRAB, (void *)0)) { -+ fprintf(stderr, "Unable to un-grab selected input device\n"); -+ } -+ } -+ - free(inf); - return 0; - } -@@ -231,6 +253,36 @@ - .fini = ts_input_fini, - }; - -+static int parse_raw_grab(struct tslib_module_info *inf, char *str, void *data) -+{ -+ struct tslib_input *i = (struct tslib_input *)inf; -+ unsigned long v; -+ int err = errno; -+ -+ v = strtoul(str, NULL, 0); -+ -+ if (v == ULONG_MAX && errno == ERANGE) -+ return -1; -+ -+ errno = err; -+ switch ((int)data) { -+ case 1: -+ if (v) -+ i->grab_events = GRAB_EVENTS_WANTED; -+ break; -+ default: -+ return -1; -+ } -+ return 0; -+} -+ -+static const struct tslib_vars raw_vars[] = -+{ -+ { "grab_events", (void *)1, parse_raw_grab }, -+}; -+ -+#define NR_VARS (sizeof(raw_vars) / sizeof(raw_vars[0])) -+ - TSAPI struct tslib_module_info *mod_init(struct tsdev *dev, const char *params) - { - struct tslib_input *i; -@@ -245,5 +297,12 @@ - i->current_p = 0; - i->sane_fd = 0; - i->using_syn = 0; -+ i->grab_events = 0; -+ -+ if (tslib_parse_vars(&i->module, raw_vars, NR_VARS, params)) { -+ free(i); -+ return NULL; -+ } -+ - return &(i->module); - } diff --git a/packages/tslib/tslib/bd-neon/.mtn2git_empty b/packages/tslib/tslib/bd-neon/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/tslib/tslib/bd-neon/ts.conf b/packages/tslib/tslib/bd-neon/ts.conf new file mode 100644 index 0000000000..15fe294ce6 --- /dev/null +++ b/packages/tslib/tslib/bd-neon/ts.conf @@ -0,0 +1,5 @@ +module_raw ucb1x00 +module pthres pmin=1 +module variance delta=500 +module dejitter delta=10000 +module linear diff --git a/packages/tslib/tslib/bd-neon/tslib.sh b/packages/tslib/tslib/bd-neon/tslib.sh new file mode 100644 index 0000000000..b5f1c906f3 --- /dev/null +++ b/packages/tslib/tslib/bd-neon/tslib.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +TSLIB_TSDEVICE=/dev/touch_ucb1x00 + +export TSLIB_TSDEVICE + diff --git a/packages/tslib/tslib/fic-gta01/.mtn2git_empty b/packages/tslib/tslib/fic-gta01/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/tslib/tslib/fic-gta01/ts.conf b/packages/tslib/tslib/fic-gta01/ts.conf new file mode 100644 index 0000000000..82f712ef41 --- /dev/null +++ b/packages/tslib/tslib/fic-gta01/ts.conf @@ -0,0 +1,25 @@ +# Uncomment if you wish to use the linux input layer event interface +module_raw input grab_events=1 + +# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d +# module_raw collie + +# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860 +# module_raw corgi + +# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface +# module_raw ucb1x00 + +# Uncomment if you're using an HP iPaq h3600 or similar +# module_raw h3600 + +# Uncomment if you're using a Hitachi Webpad +# module_raw mk712 + +# Uncomment if you're using an IBM Arctic II +# module_raw arctic2 + +module pthres pmin=1 +module variance delta=30 +module dejitter delta=100 +module linear diff --git a/packages/tslib/tslib/ts.conf b/packages/tslib/tslib/ts.conf index 1b0da937e8..1abde2fc7f 100644 --- a/packages/tslib/tslib/ts.conf +++ b/packages/tslib/tslib/ts.conf @@ -1,5 +1,5 @@ # Uncomment if you wish to use the linux input layer event interface -module_raw input +module_raw input grab_events=0 # Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d # module_raw collie diff --git a/packages/tslib/tslib/tslib-input_raw-grab_events.patch b/packages/tslib/tslib/tslib-input_raw-grab_events.patch new file mode 100644 index 0000000000..4bd0a05531 --- /dev/null +++ b/packages/tslib/tslib/tslib-input_raw-grab_events.patch @@ -0,0 +1,120 @@ +This patch adds support for "EVIOCGRAB" on the input device, which +tells the kernel _not_ to deliver events of the touchscreen to +/dev/input/mice. + +This is probably what most people want, since unprocessed raw touchscreen +events should not be converted to emulated PS/2 mouse movements. + +Signed-off-by: Harald Welte + +Index: a/plugins/input-raw.c +=================================================================== +--- a/plugins/input-raw.c (revision 49) ++++ b/plugins/input-raw.c (working copy) +@@ -18,6 +18,7 @@ + + #include + #include ++#include + + #include + #ifdef HAVE_UNISTD_H +@@ -33,6 +34,9 @@ + + #include "tslib-private.h" + ++#define GRAB_EVENTS_WANTED 1 ++#define GRAB_EVENTS_ACTIVE 2 ++ + struct tslib_input { + struct tslib_module_info module; + +@@ -42,6 +46,7 @@ + + int sane_fd; + int using_syn; ++ int grab_events; + }; + + static int check_fd(struct tslib_input *i) +@@ -64,6 +69,14 @@ + + if (bit & (1 << EV_SYN)) + i->using_syn = 1; ++ ++ if (i->grab_events == GRAB_EVENTS_WANTED) { ++ if (ioctl(ts->fd, EVIOCGRAB, (void *)1)) { ++ fprintf(stderr, "Unable to grab selected input device\n"); ++ return -1; ++ } ++ i->grab_events = GRAB_EVENTS_ACTIVE; ++ } + + return 0; + } +@@ -222,6 +235,15 @@ + + static int ts_input_fini(struct tslib_module_info *inf) + { ++ struct tslib_input *i = (struct tslib_input *)inf; ++ struct tsdev *ts = inf->dev; ++ ++ if (i->grab_events == GRAB_EVENTS_ACTIVE) { ++ if (ioctl(ts->fd, EVIOCGRAB, (void *)0)) { ++ fprintf(stderr, "Unable to un-grab selected input device\n"); ++ } ++ } ++ + free(inf); + return 0; + } +@@ -231,6 +253,36 @@ + .fini = ts_input_fini, + }; + ++static int parse_raw_grab(struct tslib_module_info *inf, char *str, void *data) ++{ ++ struct tslib_input *i = (struct tslib_input *)inf; ++ unsigned long v; ++ int err = errno; ++ ++ v = strtoul(str, NULL, 0); ++ ++ if (v == ULONG_MAX && errno == ERANGE) ++ return -1; ++ ++ errno = err; ++ switch ((int)data) { ++ case 1: ++ if (v) ++ i->grab_events = GRAB_EVENTS_WANTED; ++ break; ++ default: ++ return -1; ++ } ++ return 0; ++} ++ ++static const struct tslib_vars raw_vars[] = ++{ ++ { "grab_events", (void *)1, parse_raw_grab }, ++}; ++ ++#define NR_VARS (sizeof(raw_vars) / sizeof(raw_vars[0])) ++ + TSAPI struct tslib_module_info *mod_init(struct tsdev *dev, const char *params) + { + struct tslib_input *i; +@@ -245,5 +297,12 @@ + i->current_p = 0; + i->sane_fd = 0; + i->using_syn = 0; ++ i->grab_events = 0; ++ ++ if (tslib_parse_vars(&i->module, raw_vars, NR_VARS, params)) { ++ free(i); ++ return NULL; ++ } ++ + return &(i->module); + } -- cgit v1.2.3 From 4cefece868c0779bff0aa15b9f5723999f3d39c0 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 13 Feb 2008 11:07:20 +0000 Subject: gconf-dbus: update svn version to rev 641, remove cvs version * this makes it work with dbus 1.1.x --- conf/distro/include/sane-srcdates.inc | 1 - conf/distro/include/sane-srcrevs.inc | 2 +- packages/gnome/gconf-dbus_cvs.bb | 37 ----------------------------------- packages/gnome/gconf-dbus_svn.bb | 33 +++++++++++++++---------------- 4 files changed, 17 insertions(+), 56 deletions(-) delete mode 100644 packages/gnome/gconf-dbus_cvs.bb diff --git a/conf/distro/include/sane-srcdates.inc b/conf/distro/include/sane-srcdates.inc index aaf7b02a09..43ffa1de9f 100644 --- a/conf/distro/include/sane-srcdates.inc +++ b/conf/distro/include/sane-srcdates.inc @@ -46,7 +46,6 @@ SRCDATE_rosetta ?= "20060804" SRCDATE_gpesyncd ?= "20070701" # GNOME -SRCDATE_gconf-dbus ?= "20070512" SRCDATE_gnome-vfs ?= "20060119" SRCDATE_gtkhtml2 ?= "20060323" diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index a585fdeca6..4d92f48928 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -23,7 +23,7 @@ SRCREV_pn-elf2flt ?= "1786" SRCREV_pn-epiphany ?= "7650" SRCREV_pn-fbgrab-viewer-native ?= "1943" SRCREV_pn-fstests ?= "204" -SRCREV_pn-gconf-dbus ?= "606" +SRCREV_pn-gconf-dbus ?= "641" SRCREV_pn-gnuradio ?= "6377" SRCREV_pn-gpe-contacts ?= "9312" SRCREV_pn-gsm0710muxd ?= "73" diff --git a/packages/gnome/gconf-dbus_cvs.bb b/packages/gnome/gconf-dbus_cvs.bb deleted file mode 100644 index 6128eac3e2..0000000000 --- a/packages/gnome/gconf-dbus_cvs.bb +++ /dev/null @@ -1,37 +0,0 @@ -SECTION = "x11/utils" -DEPENDS = "gtk+ glib-2.0 dbus libxml2 popt" -DESCRIPTION = "Settings daemon using DBUS for communication." -LICENSE = "GPL" -PROVIDES = "gconf" -RPROVIDES_${PN} = "gconf" -RPROVIDES_${PN}-dev = "gconf-dev" - -PV = "0.0+cvs${SRCDATE}" -PR = "r8" - -SRC_URI = "cvs://anonymous@anoncvs.gnome.org/cvs/gnome;module=gconf;tag=gconf-dbus-2-6 \ - file://gconf-dbus-update.patch;patch=1;pnum=0 \ - file://69gconfd-dbus" - -inherit pkgconfig autotools -S = "${WORKDIR}/gconf" - -FILES_${PN} += " ${libdir}/GConf/2/*.so ${libdir}/dbus-1.0 ${sysconfdir} ${datadir}/dbus*" - -EXTRA_OECONF = " --with-ipc=dbus --disable-gtk-doc --enable-gtk --host=${HOST_SYS} --enable-shared --disable-static" - -HEADERS = "gconf.h gconf-changeset.h gconf-listeners.h gconf-schema.h gconf-value.h gconf-error.h gconf-engine.h gconf-client.h gconf-enum-types.h" - -do_stage() { - oe_libinstall -so -C gconf libgconf-2 ${STAGING_LIBDIR} - install -d ${STAGING_INCDIR}/gconf/2/gconf/ - ( cd gconf; for i in ${HEADERS}; do install -m 0644 $i ${STAGING_INCDIR}/gconf/2/gconf/$i; done ) - install -m 0644 gconf.m4 ${STAGING_DATADIR}/aclocal/gconf-2.m4 -} - -do_install_append () { - install -d ${D}/${sysconfdir}/X11/Xsession.d - install -m 755 ${WORKDIR}/69gconfd-dbus ${D}/${sysconfdir}/X11/Xsession.d/ - install -d ${D}/${datadir}/dbus-1.0/services/ - install -m 644 gconf/gconf.service ${D}${datadir}/dbus-1.0/services/ -} diff --git a/packages/gnome/gconf-dbus_svn.bb b/packages/gnome/gconf-dbus_svn.bb index e7875dc72e..074b3015c2 100644 --- a/packages/gnome/gconf-dbus_svn.bb +++ b/packages/gnome/gconf-dbus_svn.bb @@ -1,39 +1,38 @@ -SECTION = "x11/utils" +DESCRIPTION = "The GNOME Settings daemon using DBUS for communication." DEPENDS = "intltool-native virtual/libintl glib-2.0 dbus dbus-glib libxml2 popt gtk-doc-native" -DESCRIPTION = "Settings daemon using DBUS for communication." LICENSE = "GPL" +SECTION = "x11/utils" PROVIDES = "gconf" RPROVIDES_${PN} = "gconf" RPROVIDES_${PN}-dev = "gconf-dev" - PV = "2.16.0+svnr${SRCREV}" -PR = "r5" +PR = "r0" -SRC_URI = "svn://developer.imendio.com/svn/gconf-dbus;module=trunk;proto=http \ - file://69gconfd-dbus" +inherit autotools pkgconfig -inherit pkgconfig autotools +SRC_URI = "svn://developer.imendio.com/svn/gconf-dbus;module=trunk;proto=http \ + file://69gconfd-dbus" S = "${WORKDIR}/trunk" PARALLEL_MAKE = "" -FILES_${PN} = "${libdir}/GConf-dbus/2/*.so ${libdir}/dbus-1.0 ${sysconfdir} ${datadir}/dbus* ${libdir}/*.so.* ${bindir}/* ${libexecdir}/*" -FILES_${PN}-dbg += " ${libdir}/GConf-dbus/2/.debug" -FILES_${PN}-dev += "${libdir}/GConf-dbus/2/*.la ${datadir}/sgml/gconf/gconf-1.0.dtd" - -EXTRA_OECONF = " --with-ipc=dbus --disable-gtk-doc --disable-gtk --enable-shared --disable-static" - +EXTRA_OECONF = "--with-ipc=dbus --disable-gtk-doc --disable-gtk --enable-shared --disable-static" do_configure_prepend() { - touch gtk-doc.make + touch gtk-doc.make } do_stage() { - autotools_stage_all - install -m 0644 gconf-2.m4 ${STAGING_DATADIR}/aclocal/gconf-2.m4 + autotools_stage_all + install -m 0644 gconf-2.m4 ${STAGING_DATADIR}/aclocal/gconf-2.m4 } -do_install_append () { +do_install_append() { install -d ${D}/${sysconfdir}/X11/Xsession.d install -m 755 ${WORKDIR}/69gconfd-dbus ${D}/${sysconfdir}/X11/Xsession.d/ } + +FILES_${PN} = "${libdir}/GConf-dbus/2/*.so ${libdir}/dbus-1.0 ${sysconfdir} ${datadir}/dbus* ${libdir}/*.so.* ${bindir}/* ${libexecdir}/*" +FILES_${PN}-dbg += " ${libdir}/GConf-dbus/2/.debug" +FILES_${PN}-dev += "${libdir}/GConf-dbus/2/*.la ${datadir}/sgml/gconf/gconf-1.0.dtd" + -- cgit v1.2.3 From 403333e2d7c0ff87a0a449d7f2d014d941a20d8a Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 13 Feb 2008 11:07:53 +0000 Subject: gconf-dbus svn remove obsolete patches --- packages/gnome/gconf-dbus/gconf-dbus-update.patch | 31 ---------------------- .../gconf-dbus/xml-backend-locks-compile-fix.patch | 16 ----------- .../gconf-dbus/xml-backend-oldxml-Makefile.patch | 11 -------- 3 files changed, 58 deletions(-) delete mode 100644 packages/gnome/gconf-dbus/gconf-dbus-update.patch delete mode 100644 packages/gnome/gconf-dbus/xml-backend-locks-compile-fix.patch delete mode 100644 packages/gnome/gconf-dbus/xml-backend-oldxml-Makefile.patch diff --git a/packages/gnome/gconf-dbus/gconf-dbus-update.patch b/packages/gnome/gconf-dbus/gconf-dbus-update.patch deleted file mode 100644 index 9870078b86..0000000000 --- a/packages/gnome/gconf-dbus/gconf-dbus-update.patch +++ /dev/null @@ -1,31 +0,0 @@ -? gconf/gconf.service -Index: gconf/Makefile.am -=================================================================== -RCS file: /cvs/gnome/gconf/gconf/Makefile.am,v -retrieving revision 1.78.4.8 -diff -u -r1.78.4.8 Makefile.am ---- gconf/Makefile.am 21 Dec 2003 14:21:15 -0000 1.78.4.8 -+++ gconf/Makefile.am 22 Jan 2005 00:30:13 -0000 -@@ -155,6 +155,7 @@ - - libgconf_2_la_LDFLAGS = -version-info $(GCONF_CURRENT):$(GCONF_REVISION):$(GCONF_AGE) -no-undefined - libgconf_2_la_LIBADD = $(INTLLIBS) $(DEPENDENT_LIBS) $(GCONF_IPC_LIBS) -+libgconf_2_la_CFLAGS = $(AM_CFLAGS) - - if HAVE_DBUS - servicedir = $(DBUS_SERVICE_DIR) -Index: backends/Makefile.am -=================================================================== -RCS file: /cvs/gnome/gconf/backends/Makefile.am,v -retrieving revision 1.30 -diff -u -r1.30 Makefile.am ---- backends/Makefile.am 3 Nov 2003 00:19:33 -0000 1.30 -+++ backends/Makefile.am 22 Jan 2005 00:30:14 -0000 -@@ -17,6 +17,7 @@ - - libgconfbackend_oldxml_la_LDFLAGS = -avoid-version -module -no-undefined - libgconfbackend_oldxml_la_LIBADD = $(DEPENDENT_WITH_XML_LIBS) $(top_builddir)/gconf/libgconf-$(MAJOR_VERSION).la -+libgconfbackend_oldxml_la_CFLAGS = $(AM_CFLAGS) - - libgconfbackend_xml_la_SOURCES = \ - markup-backend.c \ diff --git a/packages/gnome/gconf-dbus/xml-backend-locks-compile-fix.patch b/packages/gnome/gconf-dbus/xml-backend-locks-compile-fix.patch deleted file mode 100644 index c195aad639..0000000000 --- a/packages/gnome/gconf-dbus/xml-backend-locks-compile-fix.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- trunk/backends/xml-backend.c~ 2006-01-18 09:57:39.000000000 -0800 -+++ trunk/backends/xml-backend.c 2006-01-19 11:38:37.000000000 -0800 -@@ -115,6 +115,13 @@ - - typedef struct _XMLSource XMLSource; - -+extern GConfLock* -+gconf_get_lock (const gchar *lock_directory, -+ GError **err); -+extern gboolean -+gconf_release_lock (GConfLock *lock, -+ GError **err); -+ - /* XMLSource **/ - - struct _XMLSource { diff --git a/packages/gnome/gconf-dbus/xml-backend-oldxml-Makefile.patch b/packages/gnome/gconf-dbus/xml-backend-oldxml-Makefile.patch deleted file mode 100644 index 312a356c84..0000000000 --- a/packages/gnome/gconf-dbus/xml-backend-oldxml-Makefile.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- trunk/backends/Makefile~ 2006-01-19 09:52:22.000000000 -0800 -+++ trunk/backends/Makefile 2006-01-19 13:13:23.000000000 -0800 -@@ -84,7 +84,7 @@ - xml_test_OBJECTS = $(am_xml_test_OBJECTS) - xml_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(top_builddir)/gconf/libgconf-$(MAJOR_VERSION).la \ -- $(top_builddir)/backends/libgconfbackend-oldxml.la -+ libgconfbackend-oldxml.la - DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) - depcomp = $(SHELL) $(top_srcdir)/depcomp - am__depfiles_maybe = depfiles -- cgit v1.2.3 From d7bb1a5668320a4759b9078e2680215a85fc3751 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 13 Feb 2008 11:20:12 +0000 Subject: preferred-om-2008-versions: switch to bb 1.7.2, udev 118, dbus 1.1.4 --- conf/distro/include/preferred-om-2008-versions.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc index 2c2e0acb03..b0f6d4ec02 100644 --- a/conf/distro/include/preferred-om-2008-versions.inc +++ b/conf/distro/include/preferred-om-2008-versions.inc @@ -1 +1,5 @@ PREFERRED_VERSION_vte = "0.16.10" +PREFERRED_VERSION_dbus = "1.1.4" +PREFERRED_VERSION_udev = "118" +PREFERRED_VERSION_busybox = "1.7.2" + -- cgit v1.2.3 From be3c2cc81c9a84026a62cc3566848f1871bf22f6 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 13 Feb 2008 11:40:41 +0000 Subject: gst-plugin-pulse 0.9.7 add patch reducing 20% of the load due to some busylooping NOTE: need to play more with that to find out whether we can get even more --- packages/gstreamer/gst-plugin-pulse/.mtn2git_empty | 0 .../gst-plugin-pulse/dont-overload-pulseaudio.patch | 13 +++++++++++++ packages/gstreamer/gst-plugin-pulse_0.9.7.bb | 5 +++-- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 packages/gstreamer/gst-plugin-pulse/.mtn2git_empty create mode 100644 packages/gstreamer/gst-plugin-pulse/dont-overload-pulseaudio.patch diff --git a/packages/gstreamer/gst-plugin-pulse/.mtn2git_empty b/packages/gstreamer/gst-plugin-pulse/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/gstreamer/gst-plugin-pulse/dont-overload-pulseaudio.patch b/packages/gstreamer/gst-plugin-pulse/dont-overload-pulseaudio.patch new file mode 100644 index 0000000000..377a4f9589 --- /dev/null +++ b/packages/gstreamer/gst-plugin-pulse/dont-overload-pulseaudio.patch @@ -0,0 +1,13 @@ +Index: gst-pulse-0.9.7/src/pulsesink.c +=================================================================== +--- gst-pulse-0.9.7.orig/src/pulsesink.c ++++ gst-pulse-0.9.7/src/pulsesink.c +@@ -477,6 +477,8 @@ static guint gst_pulsesink_write(GstAudi + length -= l; + + sum += l; ++ ++ usleep( 500 ); + } + + pa_threaded_mainloop_unlock(pulsesink->mainloop); diff --git a/packages/gstreamer/gst-plugin-pulse_0.9.7.bb b/packages/gstreamer/gst-plugin-pulse_0.9.7.bb index a1e321c73e..5a83f3915b 100644 --- a/packages/gstreamer/gst-plugin-pulse_0.9.7.bb +++ b/packages/gstreamer/gst-plugin-pulse_0.9.7.bb @@ -2,11 +2,12 @@ DESCRIPTION = "GStreamer plugin for using pulse audio as sink and source" HOMEPAGE = "http://0pointer.de/lennart/projects/gst-pulse/" LICENSE = "GPL" DEPENDS = "gstreamer pulseaudio" -PR = "r0" +PR = "r1" DEFAULT_PREFERENCE = "-1" -SRC_URI = "http://0pointer.de/lennart/projects/gst-pulse/gst-pulse-${PV}.tar.gz" +SRC_URI = "http://0pointer.de/lennart/projects/gst-pulse/gst-pulse-${PV}.tar.gz \ + file://dont-overload-pulseaudio.patch;patch=1" S = "${WORKDIR}/gst-pulse-${PV}" inherit autotools -- cgit v1.2.3 From 7cfea8f908d750ed32f6d3095c94190975e09df8 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 13 Feb 2008 11:42:47 +0000 Subject: preferred-om-2008-versions: update more software, pulseaudio 0.9.9 / gst-pulse 0.9.7 now works --- conf/distro/include/preferred-om-2008-versions.inc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc index b0f6d4ec02..63dd268e7e 100644 --- a/conf/distro/include/preferred-om-2008-versions.inc +++ b/conf/distro/include/preferred-om-2008-versions.inc @@ -1,5 +1,8 @@ -PREFERRED_VERSION_vte = "0.16.10" PREFERRED_VERSION_dbus = "1.1.4" -PREFERRED_VERSION_udev = "118" PREFERRED_VERSION_busybox = "1.7.2" +PREFERRED_VERSION_gst-pulse = "0.9.7" +PREFERRED_VERSION_libtool = "1.2.14" +PREFERRED_VERSION_pulseaudio = "0.9.9" +PREFERRED_VERSION_udev = "118" +PREFERRED_VERSION_vte = "0.16.10" -- cgit v1.2.3 From 21a3b977fec3d0090dc6c9b819f8f389ad1c3cb7 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 13 Feb 2008 12:13:19 +0000 Subject: Sharp ROM stuff: include latest linux-libc-headers by default. Closes 2199. --- conf/distro/sharprom-compatible.conf | 2 +- packages/sharprom-toolchain/sharprom-toolchain-native_1.0.bb | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/distro/sharprom-compatible.conf b/conf/distro/sharprom-compatible.conf index 92fd42f4f8..3fbe79e354 100644 --- a/conf/distro/sharprom-compatible.conf +++ b/conf/distro/sharprom-compatible.conf @@ -37,7 +37,7 @@ PREFERRED_PROVIDER_virtual/arm-linux-libc-for-gcc = "sharprom-toolchain-native" PREFERRED_PROVIDER_virtual/arm-linux-binutils = "sharprom-toolchain-native" PREFERRED_PROVIDER_virtual/libc = "sharprom-toolchain-native" PREFERRED_PROVIDER_virtual/arm-linux-gcc = "sharprom-toolchain-native" -PREFERRED_PROVIDER_virtual/linux-libc-headers = "sharprom-toolchain-native" +PREFERRED_PROVIDER_virtual/linux-libc-headers = "linux-libc-headers" PREFERRED_PROVIDER_virtual/arm-linux-gcc-initial = "sharprom-toolchain-native" PREFERRED_VERSION_glibc = "2.2.5" diff --git a/packages/sharprom-toolchain/sharprom-toolchain-native_1.0.bb b/packages/sharprom-toolchain/sharprom-toolchain-native_1.0.bb index 270cd0fbf8..051279e33f 100644 --- a/packages/sharprom-toolchain/sharprom-toolchain-native_1.0.bb +++ b/packages/sharprom-toolchain/sharprom-toolchain-native_1.0.bb @@ -1,6 +1,8 @@ DESCRIPTION = "Precompiled SharpROM toolchain glue package" LICENSE = "GPL" SECTION = "base" +# see bug 2199 for the reason the following line is in here +DEPENDS = "virtual/linux-libc-headers" PROVIDES_sharprom-compatible = "\ virtual/arm-linux-gcc-2.95 \ virtual/arm-linux-libc-for-gcc \ -- cgit v1.2.3 From 0a49ec5879f1bac7e062045494b3ffc34a9f81a1 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Wed, 13 Feb 2008 12:24:16 +0000 Subject: logic-analyzer: Some tuning to make build work. --- packages/logic-analyzer/logic-analyzer_0.8.bb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/logic-analyzer/logic-analyzer_0.8.bb b/packages/logic-analyzer/logic-analyzer_0.8.bb index 863a7a3e00..73e8f8ba84 100644 --- a/packages/logic-analyzer/logic-analyzer_0.8.bb +++ b/packages/logic-analyzer/logic-analyzer_0.8.bb @@ -2,7 +2,7 @@ DESCRIPTION = "A Java-based logical analyzer for home use." LICENSE = "GPL" HOMEPAGE = "http://sump.org/projects/analyzer/" -PR = "r1" +PR = "r2" inherit java @@ -21,8 +21,12 @@ S = "${WORKDIR}/LogicAnalyzer" do_compile() { oe_runmake -C client all jar \ + JAR=gjar \ + JAVAH="gjavah -classpath \$(CLASSPATH) -d \$(DEST) -jni" \ + JAVAINCLUDEDIR=${STAGING_INCDIR}/classpath \ + JAVAC="javac -d \$(TOP)/ -O -source 1.3 -target 1.3" \ JAVAC_FLAGS="-sourcepath . -bootclasspath ${STAGING_DATADIR_NATIVE}/classpath/glibj.zip -classpath ${STAGING_DATADIR}/java/RXTXcomm.jar" - + oe_java_simple_wrapper org.sump.analyzer.Loader analyzer.jar RXTXcomm.jar } -- cgit v1.2.3 From d5683bbcec2a79c5458c287aded22dd73a0b5d45 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Wed, 13 Feb 2008 13:41:02 +0000 Subject: task-java: Add task to provide basic java runtime support. --- packages/tasks/task-java.bb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/tasks/task-java.bb diff --git a/packages/tasks/task-java.bb b/packages/tasks/task-java.bb new file mode 100644 index 0000000000..bfe6f56db8 --- /dev/null +++ b/packages/tasks/task-java.bb @@ -0,0 +1,13 @@ +DESCRIPTION = "Base task package for Java" +PR = "r1" +LICENSE = "MIT" + +inherit task + +RDEPENDS_${PN} = "\ + cacao \ + classpath-awt \ + java2-runtime \ + librxtx-java \ + logic-analyzer \ + " -- cgit v1.2.3 From 3f006202eb95c4183617c577815a4b8f0aa67bc2 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Wed, 13 Feb 2008 13:46:14 +0000 Subject: x11-gpe-java-image: Add image with java application support. --- packages/images/x11-gpe-java-image.bb | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 packages/images/x11-gpe-java-image.bb diff --git a/packages/images/x11-gpe-java-image.bb b/packages/images/x11-gpe-java-image.bb new file mode 100644 index 0000000000..9547cab6f6 --- /dev/null +++ b/packages/images/x11-gpe-java-image.bb @@ -0,0 +1,27 @@ +#Angstrom X11 image, with apps and kernel modules included + +ANGSTROM_EXTRA_INSTALL += " \ + ${@base_contains("MACHINE_FEATURES", "phone", "openmoko-dialer2", "",d)} \ + " +XSERVER ?= "xserver-kdrive-fbdev" + +export IMAGE_BASENAME = "x11-gpe-java-image" + +DEPENDS = "task-base" +IMAGE_INSTALL = "\ + ${XSERVER} \ + task-base-extended \ + task-java \ + angstrom-x11-base-depends \ + angstrom-gpe-task-base \ + angstrom-gpe-task-settings \ + kernel-modules \ + hal \ + angstrom-gpe-task-pim \ + ${ANGSTROM_EXTRA_INSTALL}" + + +#zap root password for release images +ROOTFS_POSTPROCESS_COMMAND += '${@base_conditional("DISTRO_TYPE", "release", "zap_root_password; ", "",d)}' + +inherit image -- cgit v1.2.3 From 8c1ce28f684a386e7aa0e9646aaeae38acdeaac0 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 13 Feb 2008 13:57:22 +0000 Subject: busybox 1.7.2 enable login utilities to make this a replacement for tinylogin --- packages/busybox/busybox-1.7.2/defconfig | 42 ++++++++++++++++---------------- packages/busybox/busybox_1.7.2.bb | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/busybox/busybox-1.7.2/defconfig b/packages/busybox/busybox-1.7.2/defconfig index 11ec1b8aa6..6cf2eb19ee 100644 --- a/packages/busybox/busybox-1.7.2/defconfig +++ b/packages/busybox/busybox-1.7.2/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.7.2 -# Mon Feb 4 10:11:39 2008 +# Wed Feb 13 13:31:37 2008 # CONFIG_HAVE_DOT_CONFIG=y @@ -73,7 +73,7 @@ CONFIG_FEATURE_FAST_TOP=y # CONFIG_FEATURE_ETC_NETWORKS is not set CONFIG_FEATURE_EDITING=y CONFIG_FEATURE_EDITING_MAX_LEN=1024 -CONFIG_FEATURE_EDITING_FANCY_KEYS=y +# CONFIG_FEATURE_EDITING_FANCY_KEYS is not set # CONFIG_FEATURE_EDITING_VI is not set CONFIG_FEATURE_EDITING_HISTORY=15 CONFIG_FEATURE_EDITING_SAVEHISTORY=y @@ -143,7 +143,7 @@ CONFIG_CHROOT=y CONFIG_CP=y CONFIG_CUT=y CONFIG_DATE=y -CONFIG_FEATURE_DATE_ISOFMT=y +# CONFIG_FEATURE_DATE_ISOFMT is not set CONFIG_DD=y CONFIG_FEATURE_DD_SIGNAL_HANDLING=y # CONFIG_FEATURE_DD_IBS_OBS is not set @@ -281,7 +281,7 @@ CONFIG_SETCONSOLE=y CONFIG_MKTEMP=y # CONFIG_PIPE_PROGRESS is not set CONFIG_RUN_PARTS=y -CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y +# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set # CONFIG_FEATURE_RUN_PARTS_FANCY is not set CONFIG_START_STOP_DAEMON=y CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y @@ -370,29 +370,29 @@ CONFIG_XARGS=y # CONFIG_FEATURE_SHADOWPASSWDS is not set # CONFIG_USE_BB_SHADOW is not set # CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_ADDGROUP is not set -# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set -# CONFIG_DELGROUP is not set -# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set -# CONFIG_ADDUSER is not set -# CONFIG_DELUSER is not set -# CONFIG_GETTY is not set +CONFIG_ADDGROUP=y +CONFIG_FEATURE_ADDUSER_TO_GROUP=y +CONFIG_DELGROUP=y +CONFIG_FEATURE_DEL_USER_FROM_GROUP=y +CONFIG_ADDUSER=y +CONFIG_DELUSER=y +CONFIG_GETTY=y CONFIG_FEATURE_UTMP=y -# CONFIG_FEATURE_WTMP is not set -# CONFIG_LOGIN is not set +CONFIG_FEATURE_WTMP=y +CONFIG_LOGIN=y # CONFIG_PAM is not set # CONFIG_LOGIN_SCRIPTS is not set -# CONFIG_FEATURE_NOLOGIN is not set -# CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set -# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set +CONFIG_FEATURE_NOLOGIN=y +CONFIG_FEATURE_SECURETTY=y +CONFIG_PASSWD=y +CONFIG_FEATURE_PASSWD_WEAK_CHECK=y # CONFIG_CRYPTPW is not set # CONFIG_CHPASSWD is not set -# CONFIG_SU is not set -# CONFIG_FEATURE_SU_SYSLOG is not set -# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set +CONFIG_SU=y +CONFIG_FEATURE_SU_SYSLOG=y +CONFIG_FEATURE_SU_CHECKS_SHELLS=y # CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set +CONFIG_VLOCK=y # # Linux Ext2 FS Progs diff --git a/packages/busybox/busybox_1.7.2.bb b/packages/busybox/busybox_1.7.2.bb index 285096ce43..75f59cf932 100644 --- a/packages/busybox/busybox_1.7.2.bb +++ b/packages/busybox/busybox_1.7.2.bb @@ -1,5 +1,5 @@ require busybox.inc -PR = "r6" +PR = "r8" SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ file://busybox-cron \ -- cgit v1.2.3 From 8c828f540b1c369c2e21a7f1a4d6579926ca0e1b Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 13 Feb 2008 13:57:34 +0000 Subject: add busybox 1.9.1, the new stable version --- packages/busybox/busybox-1.9.1/.mtn2git_empty | 0 packages/busybox/busybox_1.9.1.bb | 112 ++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 packages/busybox/busybox-1.9.1/.mtn2git_empty create mode 100644 packages/busybox/busybox_1.9.1.bb diff --git a/packages/busybox/busybox-1.9.1/.mtn2git_empty b/packages/busybox/busybox-1.9.1/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/busybox/busybox_1.9.1.bb b/packages/busybox/busybox_1.9.1.bb new file mode 100644 index 0000000000..85b2abbc5c --- /dev/null +++ b/packages/busybox/busybox_1.9.1.bb @@ -0,0 +1,112 @@ +require busybox.inc +PR = "r0" + +SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ + file://busybox-cron \ + file://busybox-httpd \ + file://busybox-udhcpd \ + file://default.script \ + file://hwclock.sh \ + file://mount.busybox \ + file://syslog \ + file://syslog.conf \ + file://udhcpscript.patch;patch=1 \ + file://umount.busybox \ + file://run_parts.c \ + file://defconfig" + +EXTRA_OEMAKE += "V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}" + +do_configure () { + cp ${WORKDIR}/run_parts.c ${S}/debianutils/ + install -m 0644 ${WORKDIR}/defconfig ${S}/.config + cml1_do_configure +} + +do_compile () { + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS + base_do_compile +} + +do_install () { + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS + install -d ${D}${sysconfdir}/init.d + oe_runmake "PREFIX=${D}" install + cp -pPR ${S}/_install/* ${D}/ + + # Move everything to /busybox (not supposed to end up in any package) + install -d ${D}/busybox + ls ${D} -R + + cp -dPr ${D}${base_bindir} ${D}${base_sbindir} ${D}${prefix} ${D}/busybox/ + # Move the busybox binary back to /bin + install -d ${D}${base_bindir} + mv ${D}/busybox${base_bindir}/busybox ${D}${base_bindir}/ + # Move back the sh symlink + test -h ${D}/busybox${base_bindir}/sh && mv ${D}/busybox${base_bindir}/sh ${D}${base_bindir}/ + + install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/ + install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/ + if grep "CONFIG_CROND=y" ${WORKDIR}/defconfig; then + # Move crond back to /usr/sbin/crond + install -d ${D}${sbindir} + mv ${D}/busybox${sbindir}/crond ${D}${sbindir}/ + + install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/ + fi + if grep "CONFIG_HTTPD=y" ${WORKDIR}/defconfig; then + # Move httpd back to /usr/sbin/httpd + install -d ${D}${sbindir} + mv ${D}/busybox${sbindir}/httpd ${D}${sbindir}/ + + install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/ + install -d ${D}/srv/www + fi + if grep "CONFIG_APP_UDHCPD=y" ${WORKDIR}/defconfig; then + # Move udhcpd back to /usr/sbin/udhcpd + install -d ${D}${sbindir} + mv ${D}/busybox${sbindir}/udhcpd ${D}${sbindir}/ + + install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/ + fi + if grep "CONFIG_HWCLOCK=y" ${WORKDIR}/defconfig; then + # Move hwclock back to /sbin/hwclock + install -d ${D}${base_sbindir} + mv ${D}/busybox${base_sbindir}/hwclock ${D}${base_sbindir}/ + + install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/ + fi + if grep "CONFIG_APP_UDHCPC=y" ${WORKDIR}/defconfig; then + # Move dhcpc back to /usr/sbin/udhcpc + install -d ${D}${base_sbindir} + mv ${D}/busybox${base_sbindir}/udhcpc ${D}${base_sbindir}/ + + install -d ${D}${sysconfdir}/udhcpc.d + install -d ${D}${datadir}/udhcpc + install -m 0755 ${S}/examples/udhcp/simple.script ${D}${sysconfdir}/udhcpc.d/50default + install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script + fi + + install -m 0644 ${S}/busybox.links ${D}${sysconfdir} +} + +pkg_prerm_${PN} () { + # This is so you can make busybox commit suicide - removing busybox with no other packages + # providing its files, this will make update-alternatives work, but the update-rc.d part + # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh + tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX` + ln -s /bin/busybox $tmpdir/[ + ln -s /bin/busybox $tmpdir/test + ln -s /bin/busybox $tmpdir/head + ln -s /bin/busybox $tmpdir/sh + ln -s /bin/busybox $tmpdir/basename + ln -s /bin/busybox $tmpdir/echo + ln -s /bin/busybox $tmpdir/mv + ln -s /bin/busybox $tmpdir/ln + ln -s /bin/busybox $tmpdir/dirname + ln -s /bin/busybox $tmpdir/rm + ln -s /bin/busybox $tmpdir/sed + ln -s /bin/busybox $tmpdir/sort + export PATH=$PATH:$tmpdir + while read link; do case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; esac; bn=`basename $link`; sh /usr/bin/update-alternatives --remove $bn $to; done Date: Wed, 13 Feb 2008 13:57:58 +0000 Subject: preferred-om-2008-versions.inc: bump busybox --- conf/distro/include/preferred-om-2008-versions.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc index 63dd268e7e..5641c8ee39 100644 --- a/conf/distro/include/preferred-om-2008-versions.inc +++ b/conf/distro/include/preferred-om-2008-versions.inc @@ -1,5 +1,5 @@ PREFERRED_VERSION_dbus = "1.1.4" -PREFERRED_VERSION_busybox = "1.7.2" +PREFERRED_VERSION_busybox = "1.9.1" PREFERRED_VERSION_gst-pulse = "0.9.7" PREFERRED_VERSION_libtool = "1.2.14" PREFERRED_VERSION_pulseaudio = "0.9.9" -- cgit v1.2.3 From bbab4fefb488391e2b40f6a3cbb39ced9a8905ce Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 13 Feb 2008 16:00:20 +0000 Subject: opie-irc: drop utf8 patches which have been applied upstream --- packages/opie-irc/files/.mtn2git_empty | 0 packages/opie-irc/files/utf8-topic.patch | 18 ------------------ packages/opie-irc/files/utf8.patch | 23 ----------------------- packages/opie-irc/opie-irc_1.2.3.bb | 6 ++---- packages/opie-irc/opie-irc_cvs.bb | 6 ++---- 5 files changed, 4 insertions(+), 49 deletions(-) delete mode 100644 packages/opie-irc/files/.mtn2git_empty delete mode 100644 packages/opie-irc/files/utf8-topic.patch delete mode 100644 packages/opie-irc/files/utf8.patch diff --git a/packages/opie-irc/files/.mtn2git_empty b/packages/opie-irc/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/opie-irc/files/utf8-topic.patch b/packages/opie-irc/files/utf8-topic.patch deleted file mode 100644 index d8d9a52ca9..0000000000 --- a/packages/opie-irc/files/utf8-topic.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/ircmessageparser.cpp b/ircmessageparser.cpp -index c449a65..ae47f69 100644 ---- a/ircmessageparser.cpp -+++ b/ircmessageparser.cpp -@@ -667,11 +667,11 @@ void IRCMessageParser::parseNumericalNoSuchNick(IRCMessage *) { - void IRCMessageParser::parseNumericalTopic(IRCMessage *message) { - IRCChannel *channel = m_session->getChannel(message->param(1).lower()); - if (channel) { -- IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + channel->channelname() + " is \"" + message->param(2) + "\"")); -+ IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel ") + channel->channelname() + tr(" is \"") + message->param(2) + "\""); - output.addParam(channel); - emit outputReady(output); - } else { -- IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + message->param(1) + " is \"" + message->param(2) + "\"")); -+ IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel ") + message->param(1) + tr(" is \"") + message->param(2) + "\""); - output.addParam(0); - emit outputReady(output); - } diff --git a/packages/opie-irc/files/utf8.patch b/packages/opie-irc/files/utf8.patch deleted file mode 100644 index cc562838a2..0000000000 --- a/packages/opie-irc/files/utf8.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/ircconnection.cpp b/ircconnection.cpp -index 88e63f7..fb7e168 100644 ---- a/ircconnection.cpp -+++ b/ircconnection.cpp -@@ -29,7 +29,8 @@ void IRCConnection::sendLine(QString line) { - while((line.right(1) == "\n") || (line.right(1) == "\r")) - line = line.left(line.length() - 1); - line.append("\r\n"); -- m_socket->writeBlock(line, line.length()); -+ QCString uline = line.utf8(); -+ m_socket->writeBlock(uline, uline.length()); - } - - void IRCConnection::sendCTCPReply(const QString &nickname, const QString &type, const QString &args) { -@@ -77,7 +78,7 @@ void IRCConnection::login() { - /* Called when data arrives on the socket */ - void IRCConnection::dataReady() { - while(m_socket->canReadLine()) { -- IRCMessage message(m_socket->readLine()); -+ IRCMessage message(QString::fromUtf8(m_socket->readLine())); - if (!m_loggedIn && message.isNumerical() && message.commandNumber() == 1) { - /* Now autojoin all channels specified inside the server profile */ - QStringList channels = QStringList::split(QChar(','), m_server->channels()); diff --git a/packages/opie-irc/opie-irc_1.2.3.bb b/packages/opie-irc/opie-irc_1.2.3.bb index 2f333d6a41..1166c07eef 100644 --- a/packages/opie-irc/opie-irc_1.2.3.bb +++ b/packages/opie-irc/opie-irc_1.2.3.bb @@ -1,10 +1,8 @@ require ${PN}.inc -PR = "r0" +PR = "r1" SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opieirc \ ${HANDHELDS_CVS};tag=${TAG};module=opie/help \ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \ - ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \ - file://utf8.patch;patch=1 \ - file://utf8-topic.patch;patch=1 " + ${HANDHELDS_CVS};tag=${TAG};module=opie/pics" diff --git a/packages/opie-irc/opie-irc_cvs.bb b/packages/opie-irc/opie-irc_cvs.bb index 63e70179a4..ecf7f645a5 100644 --- a/packages/opie-irc/opie-irc_cvs.bb +++ b/packages/opie-irc/opie-irc_cvs.bb @@ -1,11 +1,9 @@ require ${PN}.inc PV = "${OPIE_CVS_PV}" -PR = "r2" +PR = "r3" SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/net/opieirc \ ${HANDHELDS_CVS};module=opie/help \ ${HANDHELDS_CVS};module=opie/apps \ - ${HANDHELDS_CVS};module=opie/pics \ - file://utf8.patch;patch=1 \ - file://utf8-topic.patch;patch=1 " + ${HANDHELDS_CVS};module=opie/pics" -- cgit v1.2.3 From ee705b5424ac031a689a321dd7636a60a9910871 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 13 Feb 2008 17:21:23 +0000 Subject: python 2.5.1 provide ncurses through PACKAGES_DYNAMIC --- packages/python/python_2.5.1.bb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/python/python_2.5.1.bb b/packages/python/python_2.5.1.bb index 668c2a7833..5b15634dd0 100644 --- a/packages/python/python_2.5.1.bb +++ b/packages/python/python_2.5.1.bb @@ -7,7 +7,7 @@ DEPENDS = "python-native readline zlib gdbm openssl sqlite3 tcl tk" DEPENDS_sharprom = "python-native readline zlib gdbm openssl" # NOTE: Keep the digit in sync with BASEREV in contrib/generate-manifest-2.5.py -PR = "ml8" +PR = "ml9" PYTHON_MAJMIN = "2.5" @@ -103,3 +103,5 @@ FILES_python-misc = "${libdir}/python${PYTHON_MAJMIN}" PACKAGES += "python-man" FILES_python-man = "${datadir}/man" +PACKAGES_DYNAMIC += "python-ncurses" + -- cgit v1.2.3 From b1fb7e84aa1370e9b1b7066e9978aa7bf343ac27 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 13 Feb 2008 22:39:21 +0000 Subject: linux-handhelds-2.6 2.6.21-hh20: Enable NBD and CONFIGFS as modules. * With all the trouble I'm having with exporting NTFS partition under OpenWRT, let's have NBD around. * CONFIGFS is so far not a must, can be a module. --- packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig | 6 +++--- packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb | 2 +- 25 files changed, 73 insertions(+), 73 deletions(-) diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig index b4ed9dc01b..68dcdf1804 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:35 2008 +# Thu Feb 14 00:33:48 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -621,7 +621,7 @@ CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1135,7 +1135,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig index 5456b9d6db..1f9a9ad638 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:36 2008 +# Thu Feb 14 00:33:48 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -621,7 +621,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1246,7 +1246,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig index f7200e9b53..85cf68496d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:37 2008 +# Thu Feb 14 00:33:49 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -597,7 +597,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1120,7 +1120,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig index 87dbcbe9e2..4ace93c863 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:37 2008 +# Thu Feb 14 00:33:49 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -593,7 +593,7 @@ CONFIG_MTD_NAND_S3C2410_CLKSTOP=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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1110,7 +1110,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig index d5f7ec70ad..3f7b0aa8bf 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:38 2008 +# Thu Feb 14 00:33:50 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -595,7 +595,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1190,7 +1190,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig index 5ae9220e3d..c1945adbce 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:39 2008 +# Thu Feb 14 00:33:50 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -691,7 +691,7 @@ CONFIG_MTD_NAND_HAMCOP=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_NBD=m # CONFIG_BLK_DEV_UB is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set @@ -1581,7 +1581,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig index 2ec8b863be..1efdee2b39 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:39 2008 +# Thu Feb 14 00:33:50 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -577,7 +577,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1098,7 +1098,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig index b3e75f0cff..f30b2dd0ab 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:40 2008 +# Thu Feb 14 00:33:51 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -575,7 +575,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1096,7 +1096,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig index 75591a1545..da93637bd6 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:41 2008 +# Thu Feb 14 00:33:51 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -613,7 +613,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1215,7 +1215,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig index 2d0f6fdc5d..3102d3ff87 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:42 2008 +# Thu Feb 14 00:33:52 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -691,7 +691,7 @@ CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1340,7 +1340,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig index db78efafca..09de261d0d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:42 2008 +# Thu Feb 14 00:33:52 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -690,7 +690,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_UB is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set @@ -1473,7 +1473,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig index f1c29a7ce1..de5d0ffb2f 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:44 2008 +# Thu Feb 14 00:33:53 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -611,7 +611,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1130,7 +1130,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig index 4f90d2c2e8..ed08623f98 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:45 2008 +# Thu Feb 14 00:33:54 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -617,7 +617,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1221,7 +1221,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig index d428d53055..ed123c7686 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:46 2008 +# Thu Feb 14 00:33:54 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -615,7 +615,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1137,7 +1137,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig index f6477d1189..78c8121dd7 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:46 2008 +# Thu Feb 14 00:33:54 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -655,7 +655,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1361,7 +1361,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig index 25982ed5a8..d52ff1f91a 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:47 2008 +# Thu Feb 14 00:33:55 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -613,7 +613,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1133,7 +1133,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig index 1e5afd496f..e8f3b4875a 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:47 2008 +# Thu Feb 14 00:33:55 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -629,7 +629,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1237,7 +1237,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig index 060ec46886..d7432214b6 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:48 2008 +# Thu Feb 14 00:33:56 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -628,7 +628,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1254,7 +1254,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig index b64b0e2ece..0cc90ff40e 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:49 2008 +# Thu Feb 14 00:33:56 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -579,7 +579,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1096,7 +1096,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig index 779a872d29..44e63f2e4e 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:43 2008 +# Thu Feb 14 00:33:53 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -706,7 +706,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_UB is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set @@ -1598,7 +1598,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig index cd8fdd8420..66f4b3fd7c 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:49 2008 +# Thu Feb 14 00:33:56 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -609,7 +609,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1133,7 +1133,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig index e76999499e..f97cf7014c 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:44 2008 +# Thu Feb 14 00:33:53 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -681,7 +681,7 @@ CONFIG_MTDRAM_ERASE_SIZE=256 # 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_NBD=m # CONFIG_BLK_DEV_UB is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set @@ -1451,7 +1451,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig index a73eec0cec..59153d4d30 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:50 2008 +# Thu Feb 14 00:33:57 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -611,7 +611,7 @@ CONFIG_MTD_NAND_S3C2410=m # 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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1167,7 +1167,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig index 3cae44cf08..21caa9019d 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Tue Feb 12 22:00:51 2008 +# Thu Feb 14 00:33:57 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -628,7 +628,7 @@ CONFIG_MTD_NAND_S3C2410_CLKSTOP=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_NBD=m # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -1291,7 +1291,7 @@ CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y -# CONFIG_CONFIGFS_FS is not set +CONFIG_CONFIGFS_FS=m # # Miscellaneous filesystems diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb index 32f3e3053f..ec822284cf 100644 --- a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb +++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb @@ -1,7 +1,7 @@ SECTION = "kernel" DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices." LICENSE = "GPL" -PR = "r10" +PR = "r11" DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From ad8af9b7951ed766eb1c6b5f9548fb130a5f024c Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Wed, 13 Feb 2008 23:41:18 +0000 Subject: linux-rt: New .bb for the real-time kernel (experimental). --- packages/linux/linux-rt-2.6.24/.mtn2git_empty | 0 .../linux-rt-2.6.24/mpc8313e-rdb/.mtn2git_empty | 0 .../linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig | 2025 ++++++++++++++++++++ packages/linux/linux-rt_2.6.24.bb | 37 + 4 files changed, 2062 insertions(+) create mode 100644 packages/linux/linux-rt-2.6.24/.mtn2git_empty create mode 100644 packages/linux/linux-rt-2.6.24/mpc8313e-rdb/.mtn2git_empty create mode 100644 packages/linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig create mode 100644 packages/linux/linux-rt_2.6.24.bb diff --git a/packages/linux/linux-rt-2.6.24/.mtn2git_empty b/packages/linux/linux-rt-2.6.24/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-rt-2.6.24/mpc8313e-rdb/.mtn2git_empty b/packages/linux/linux-rt-2.6.24/mpc8313e-rdb/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig b/packages/linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig new file mode 100644 index 0000000000..9fecb47fa3 --- /dev/null +++ b/packages/linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig @@ -0,0 +1,2025 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rt1 +# Thu Feb 14 00:07:12 2008 +# +# CONFIG_PPC64 is not set + +# +# Processor support +# +CONFIG_6xx=y +# CONFIG_PPC_85xx is not set +# CONFIG_PPC_8xx is not set +# CONFIG_40x is not set +# CONFIG_44x is not set +# CONFIG_E200 is not set +CONFIG_83xx=y +CONFIG_PPC_FPU=y +CONFIG_PPC_STD_MMU=y +CONFIG_PPC_STD_MMU_32=y +# CONFIG_PPC_MM_SLICES is not set +# CONFIG_SMP is not set +CONFIG_PPC32=y +CONFIG_WORD_SIZE=32 +CONFIG_PPC_MERGE=y +CONFIG_MMU=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_IRQ_PER_CPU=y +CONFIG_ARCH_HAS_ILOG2_U32=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +# CONFIG_ARCH_NO_VIRT_TO_BUS is not set +CONFIG_PPC=y +CONFIG_EARLY_PRINTK=y +CONFIG_GENERIC_NVRAM=y +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_PPC_OF=y +CONFIG_OF=y +CONFIG_PPC_UDBG_16550=y +# CONFIG_GENERIC_TBSYNC is not set +CONFIG_AUDIT_ARCH=y +CONFIG_GENERIC_BUG=y +CONFIG_DEFAULT_UIMAGE=y +# CONFIG_PPC_DCR_NATIVE is not set +# CONFIG_PPC_DCR_MMIO is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +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 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 is not set +CONFIG_SYSCTL=y +# CONFIG_RADIX_TREE_CONCURRENT is not set +CONFIG_EMBEDDED=y +CONFIG_SYSCTL_SYSCALL=y +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +# CONFIG_EPOLL is not set +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 is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# Platform support +# +# CONFIG_PPC_MULTIPLATFORM is not set +# CONFIG_PPC_82xx is not set +CONFIG_PPC_83xx=y +# CONFIG_PPC_86xx is not set +# CONFIG_PPC_MPC52xx is not set +# CONFIG_PPC_MPC5200 is not set +# CONFIG_PPC_CELL is not set +# CONFIG_PPC_CELL_NATIVE is not set +# CONFIG_PQ2ADS is not set +CONFIG_MPC8313_RDB=y +# CONFIG_MPC832x_MDS is not set +# CONFIG_MPC832x_RDB is not set +# CONFIG_MPC834x_MDS is not set +# CONFIG_MPC834x_ITX is not set +# CONFIG_MPC836x_MDS is not set +CONFIG_PPC_MPC831x=y +# CONFIG_MPIC is not set +# CONFIG_MPIC_WEIRD is not set +# CONFIG_PPC_I8259 is not set +# CONFIG_PPC_RTAS is not set +# CONFIG_MMIO_NVRAM is not set +# CONFIG_PPC_MPC106 is not set +# CONFIG_PPC_970_NAP is not set +# CONFIG_PPC_INDIRECT_IO is not set +# CONFIG_GENERIC_IOMAP is not set +# CONFIG_CPU_FREQ is not set +# CONFIG_CPM2 is not set +# CONFIG_FSL_ULI1575 is not set + +# +# Kernel options +# +# CONFIG_HIGHMEM is not set +CONFIG_TICK_ONESHOT=y +# CONFIG_NO_HZ is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT_DESKTOP is not set +CONFIG_PREEMPT_RT=y +CONFIG_PREEMPT=y +CONFIG_PREEMPT_SOFTIRQS=y +CONFIG_PREEMPT_HARDIRQS=y +CONFIG_PREEMPT_BKL=y +# CONFIG_CLASSIC_RCU is not set +CONFIG_PREEMPT_RCU=y +CONFIG_PREEMPT_RCU_BOOST=y +CONFIG_RCU_TRACE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_ASM_SEMAPHORES=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_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=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_PROC_DEVICETREE=y +# CONFIG_CMDLINE_BOOL is not set +# CONFIG_PM is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_HIBERNATION_UP_POSSIBLE=y +CONFIG_SECCOMP=y +CONFIG_WANT_DEVICE_TREE=y +CONFIG_DEVICE_TREE="" +CONFIG_ISA_DMA_API=y + +# +# Bus options +# +CONFIG_ZONE_DMA=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_PPC_INDIRECT_PCI=y +CONFIG_FSL_SOC=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_SYSCALL=y +# CONFIG_PCIEPORTBUS is not set +CONFIG_ARCH_SUPPORTS_MSI=y +# CONFIG_PCI_MSI is not set +CONFIG_PCI_LEGACY=y +# CONFIG_PCI_DEBUG is not set +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Advanced setup +# +# CONFIG_ADVANCED_OPTIONS is not set + +# +# Default settings for advanced configuration options are used +# +CONFIG_HIGHMEM_START=0xfe000000 +CONFIG_LOWMEM_SIZE=0x30000000 +CONFIG_KERNEL_START=0xc0000000 +CONFIG_TASK_SIZE=0xc0000000 +CONFIG_BOOT_LOAD=0x00800000 + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +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=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=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 is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_EVENTS is not set +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +CONFIG_ATM=m +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=m +CONFIG_LLC2=m +CONFIG_IPX=m +# CONFIG_IPX_INTERN 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=m +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RR=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_INGRESS=m + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +# CONFIG_NET_ACT_NAT is not set +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_SIMP=m +# CONFIG_NET_CLS_POLICE is not set +CONFIG_NET_CLS_IND=y +CONFIG_NET_SCH_FIFO=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +# CONFIG_BT_CMTP is not set +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=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 +CONFIG_FIB_RULES=y + +# +# Wireless +# +CONFIG_CFG80211=y +CONFIG_NL80211=y +CONFIG_WIRELESS_EXT=y +CONFIG_MAC80211=m +CONFIG_MAC80211_RCSIMPLE=y +# CONFIG_MAC80211_LEDS is not set +# CONFIG_MAC80211_DEBUGFS is not set +# CONFIG_MAC80211_DEBUG is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_RFKILL=m +CONFIG_RFKILL_INPUT=m +CONFIG_RFKILL_LEDS=y +# 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 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=0xfe000000 +CONFIG_MTD_PHYSMAP_LEN=0x0800000 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PHYSMAP_OF 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_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=y +# 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_OF_DEVICE=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_CRYPTOLOOP=m +# 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=32768 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +CONFIG_ATA_OVER_ETH=m +CONFIG_MISC_DEVICES=y +# CONFIG_PHANTOM is not set +CONFIG_EEPROM_93CX6=m +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +CONFIG_CHR_DEV_SG=y +# 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=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_BUSLOGIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_SRP is not set +# CONFIG_ATA is not set +# CONFIG_MD 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_IFB 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_ARCNET is not set +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +# CONFIG_MARVELL_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_LXT_PHY is not set +CONFIG_CICADA_PHY=y +# 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_FIXED_PHY is not set +# CONFIG_MDIO_BITBANG is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_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=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_EEPRO100 is not set +CONFIG_E100=y +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +CONFIG_NETDEV_1000=y +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_E1000E is not set +# CONFIG_IP1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_SK98LIN is not set +# CONFIG_VIA_VELOCITY is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +CONFIG_GIANFAR=y +CONFIG_GFAR_NAPI=y +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +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 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=m +CONFIG_IPW2100_MONITOR=y +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_SDIO is not set +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_AIRO=m +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PRISM54=m +CONFIG_USB_ZD1201=m +CONFIG_RTL8187=m +# CONFIG_ADM8211 is not set +# CONFIG_P54_COMMON is not set +# CONFIG_IWLWIFI is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTAP_PCI=m +CONFIG_BCM43XX=m +CONFIG_BCM43XX_DEBUG=y +CONFIG_BCM43XX_DMA=y +CONFIG_BCM43XX_PIO=y +CONFIG_BCM43XX_DMA_AND_PIO_MODE=y +# CONFIG_BCM43XX_DMA_MODE is not set +# CONFIG_BCM43XX_PIO_MODE is not set +# CONFIG_B43 is not set +# CONFIG_B43LEGACY is not set +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set +# CONFIG_RT2X00 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_ATM_DRIVERS=y +# CONFIG_ATM_DUMMY is not set +# CONFIG_ATM_TCP is not set +# CONFIG_ATM_LANAI is not set +# CONFIG_ATM_ENI is not set +# CONFIG_ATM_FIRESTREAM is not set +# CONFIG_ATM_ZATM is not set +# CONFIG_ATM_NICSTAR is not set +# CONFIG_ATM_IDT77252 is not set +# CONFIG_ATM_AMBASSADOR is not set +# CONFIG_ATM_HORIZON is not set +# CONFIG_ATM_IA is not set +# CONFIG_ATM_FORE200E_MAYBE is not set +# CONFIG_ATM_HE is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +CONFIG_PPPOATM=m +CONFIG_PPPOL2TP=m +# 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=m +CONFIG_ISDN_I4L=m +# CONFIG_ISDN_PPP is not set +# CONFIG_ISDN_AUDIO is not set + +# +# ISDN feature submodules +# +CONFIG_ISDN_DRV_LOOP=m +CONFIG_ISDN_DIVERSION=m + +# +# ISDN4Linux hardware drivers +# + +# +# Passive cards +# +CONFIG_ISDN_DRV_HISAX=m + +# +# D-channel protocol features +# +CONFIG_HISAX_EURO=y +CONFIG_DE_AOC=y +# CONFIG_HISAX_NO_SENDCOMPLETE is not set +# CONFIG_HISAX_NO_LLC is not set +# CONFIG_HISAX_NO_KEYPAD is not set +CONFIG_HISAX_1TR6=y +CONFIG_HISAX_NI1=y +CONFIG_HISAX_MAX_CARDS=8 + +# +# HiSax supported cards +# +CONFIG_HISAX_16_3=y +CONFIG_HISAX_S0BOX=y +CONFIG_HISAX_FRITZPCI=y +CONFIG_HISAX_AVM_A1_PCMCIA=y +CONFIG_HISAX_ELSA=y +CONFIG_HISAX_DIEHLDIVA=y +CONFIG_HISAX_SEDLBAUER=y +CONFIG_HISAX_NICCY=y +CONFIG_HISAX_BKM_A4T=y +CONFIG_HISAX_SCT_QUADRO=y +CONFIG_HISAX_GAZEL=y +CONFIG_HISAX_W6692=y +CONFIG_HISAX_HFC_SX=y +# CONFIG_HISAX_DEBUG is not set + +# +# HiSax PCMCIA card service modules +# + +# +# HiSax sub driver modules +# +CONFIG_HISAX_ST5481=m +CONFIG_HISAX_HFCUSB=m +CONFIG_HISAX_HFC4S8S=m +CONFIG_HISAX_FRITZ_PCIPNP=m +CONFIG_HISAX_HDLC=y + +# +# Active cards +# +CONFIG_HYSDN=m +CONFIG_HYSDN_CAPI=y +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_GIGASET_BASE=m +CONFIG_GIGASET_M105=m +CONFIG_GIGASET_M101=m +# CONFIG_GIGASET_DEBUG is not set +CONFIG_GIGASET_UNDOCREQ=y +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_CAPI_TRACE=y +# CONFIG_ISDN_CAPI_MIDDLEWARE is not set +CONFIG_ISDN_CAPI_CAPI20=m +# CONFIG_ISDN_CAPI_CAPIDRV is not set + +# +# CAPI hardware drivers +# +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +# CONFIG_ISDN_DRV_AVMB1_B1PCIV4 is not set +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=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_UARTLITE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_OF_PLATFORM is not set +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_GEN_RTC 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_RMEM=m +CONFIG_ALLOC_RTSJ_MEM=m +CONFIG_DEVPORT=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_PIIX4 is not set +CONFIG_I2C_MPC=y +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_M41T00 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_BITBANG=y +CONFIG_SPI_MPC83xx=y + +# +# SPI Protocol Masters +# +CONFIG_SPI_AT25=m +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_TLE62X0=m +# 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_I5K_AMB is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +CONFIG_SENSORS_LM75=m +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83781D 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_83xx_WDT=y + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# 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=y +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +# CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_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_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# ALSA PowerMac devices +# + +# +# ALSA PowerPC devices +# + +# +# SPI devices +# + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +# 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_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=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_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=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +CONFIG_USB_EHCI_FSL=y +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PPC_OF=y +CONFIG_USB_OHCI_HCD_PPC_OF_BE=y +# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y +CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=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=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_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 +# +# CONFIG_USB_ATM is not set + +# +# 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_DEBUG_FS is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +CONFIG_USB_GADGET_NET2280=y +CONFIG_USB_NET2280=y +# 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 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=m +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +# CONFIG_MMC_SDHCI is not set +# CONFIG_MMC_WBSD is not set +# CONFIG_MMC_TIFM_SD is not set +# CONFIG_MMC_SPI is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_INTF_DEV_UIE_EMUL=y +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=y +# 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 +# + +# +# Userspace I/O +# +CONFIG_UIO=m +CONFIG_UIO_CIF=m + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_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=y +# 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=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_RW=y + +# +# 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 is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +CONFIG_CRAMFS=y +# CONFIG_VXFS_FS is not set +# CONFIG_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 is not set +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=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR 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=y +# CONFIG_LDM_DEBUG 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=y +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +CONFIG_NLS_ISO8859_8=y +# 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_UCC_SLOW 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_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +CONFIG_PROFILE_NMI=y +CONFIG_MARKERS=y + +# +# 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=y +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS 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_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_EVENT_TRACE is not set +# CONFIG_FUNCTION_TRACE is not set +# CONFIG_WAKEUP_TIMING is not set +# CONFIG_CRITICAL_PREEMPT_TIMING is not set +# CONFIG_CRITICAL_IRQSOFF_TIMING 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_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_HAVE_MCOUNT=y +# CONFIG_SAMPLES is not set +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUGGER is not set +# CONFIG_VIRQ_DEBUG is not set +# CONFIG_BDI_SWITCH is not set +CONFIG_PPC_EARLY_DEBUG=y +# CONFIG_PPC_EARLY_DEBUG_LPAR is not set +# CONFIG_PPC_EARLY_DEBUG_G5 is not set +# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set +# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set +# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set +# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set +# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set +# CONFIG_PPC_EARLY_DEBUG_BEAT is not set +# CONFIG_PPC_EARLY_DEBUG_44x is not set +# CONFIG_PPC_EARLY_DEBUG_CPM 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_ABLKCIPHER=m +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +# CONFIG_CRYPTO_XTS is not set +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_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 +# CONFIG_PPC_CLOCK is not set diff --git a/packages/linux/linux-rt_2.6.24.bb b/packages/linux/linux-rt_2.6.24.bb new file mode 100644 index 0000000000..38bdfef48b --- /dev/null +++ b/packages/linux/linux-rt_2.6.24.bb @@ -0,0 +1,37 @@ +require linux.inc + +# Mark archs/machines that this kernel supports +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_mpc8313e-rdb = "1" + +DEPENDS_append_mpc8313e-rdb = " dtc-native" + +PR = "r0" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ + ${KERNELORG_MIRROR}/pub/linux/kernel/projects/rt/patch-2.6.24-rt1.bz2;patch=1 \ + file://defconfig \ + " + +S = "${WORKDIR}/linux-2.6.24" + +#SRC_URI_append_mpc8313e-rdb = "\ +# file://mpc8313e-rdb-leds.patch;patch=1" +# file://mpc831x-nand.patch;patch=1 \ +# file://mpc8313e-rdb-rtc.patch;patch=1 " + +DEVICETREE_mpc8313e-rdb = "arch/${ARCH}/boot/dts/mpc8313erdb.dts" +DEVICETREE_FLAGS_mpc8313e-rdb = "-R 8 -S 0x3000" + +do_devicetree_image() { + if test -n "${DEVICETREE}" ; then + dtc -I dts -O dtb ${DEVICETREE_FLAGS} -o ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb ${DEVICETREE} + + cd ${DEPLOY_DIR_IMAGE} + rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.dtb + ln -sf ${KERNEL_IMAGE_BASE_NAME}.dtb ${KERNEL_IMAGE_SYMLINK_NAME}.dtb + fi +} + +addtask devicetree_image after do_deploy before do_package + -- cgit v1.2.3 From bb41487f9277dddccf84d49256e31931c5bea28a Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 14 Feb 2008 00:19:14 +0000 Subject: klibc-utils-fstype 1.1.1: Add rudimentary jffs2 detection. --- .../klibc/files/fstype-sane-and-vfat-jffs2.patch | 68 ++++++++++++++++++++++ packages/klibc/files/fstype-sane-and-vfat.patch | 60 ------------------- packages/klibc/klibc-utils-fstype_1.1.1.bb | 4 +- 3 files changed, 70 insertions(+), 62 deletions(-) create mode 100644 packages/klibc/files/fstype-sane-and-vfat-jffs2.patch delete mode 100644 packages/klibc/files/fstype-sane-and-vfat.patch diff --git a/packages/klibc/files/fstype-sane-and-vfat-jffs2.patch b/packages/klibc/files/fstype-sane-and-vfat-jffs2.patch new file mode 100644 index 0000000000..e89c5adb9a --- /dev/null +++ b/packages/klibc/files/fstype-sane-and-vfat-jffs2.patch @@ -0,0 +1,68 @@ +diff -r 3c9d84425ba7 utils/fstype.c +--- a/utils/fstype.c Thu Feb 14 02:09:30 2008 +0200 ++++ b/utils/fstype.c Thu Feb 14 02:13:46 2008 +0200 +@@ -13,11 +13,18 @@ + */ + + #include ++#include + #include + #include + #include + #include + #include ++#if __BYTE_ORDER == __BIG_ENDIAN ++#include ++#else ++#include ++#endif ++ + + #define cpu_to_be32(x) __cpu_to_be32(x) /* Needed by romfs_fs.h */ + +@@ -105,6 +112,27 @@ static int romfs_image(const unsigned ch + return 0; + } + ++static int jffs2_image(const unsigned char *buf, unsigned long *blocks) ++{ ++ // Very sloppy! ;-E ++ if (*buf == 0x85 && buf[1] == 0x19) ++ return 1; ++ ++ return 0; ++} ++ ++static int vfat_image(const unsigned char *buf, unsigned long *blocks) ++{ ++ const struct romfs_super_block *sb = ++ (const struct romfs_super_block *)buf; ++ if (!strncmp(buf + 54, "FAT12 ", 8) ++ || !strncmp(buf + 54, "FAT16 ", 8) ++ || !strncmp(buf + 82, "FAT32 ", 8)) ++ return 1; ++ ++ return 0; ++} ++ + static int minix_image(const unsigned char *buf, unsigned long *blocks) + { + const struct minix_super_block *sb = +@@ -167,8 +195,6 @@ static int xfs_image(const unsigned char + (const struct xfs_sb *)buf; + + if (__be32_to_cpu(sb->sb_magicnum) == XFS_SB_MAGIC) { +- *blocks = __be64_to_cpu(sb->sb_dblocks) * +- (__be32_to_cpu(sb->sb_blocksize) / BLOCK_SIZE); + return 1; + } + return 0; +@@ -184,6 +210,8 @@ static struct imagetype images[] = { + { 0, "gzip", gzip_image }, + { 0, "cramfs", cramfs_image }, + { 0, "romfs", romfs_image }, ++ { 0, "jffs2", jffs2_image }, ++ { 0, "vfat", vfat_image }, + { 0, "xfs", xfs_image }, + { 1, "minix", minix_image }, + { 1, "ext3", ext3_image }, diff --git a/packages/klibc/files/fstype-sane-and-vfat.patch b/packages/klibc/files/fstype-sane-and-vfat.patch deleted file mode 100644 index 7b7674637a..0000000000 --- a/packages/klibc/files/fstype-sane-and-vfat.patch +++ /dev/null @@ -1,60 +0,0 @@ -Patch to compile fstype util against "normal" libc (glibc/uclicb), and to -add vfat detection. - ---- klibc-1.1.1/utils/fstype.c.org 2005-09-06 23:49:34.000000000 +0300 -+++ klibc-1.1.1/utils/fstype.c 2007-11-24 01:07:26.000000000 +0200 -@@ -13,11 +13,18 @@ - */ - - #include -+#include - #include - #include - #include - #include - #include -+#if __BYTE_ORDER == __BIG_ENDIAN -+#include -+#else -+#include -+#endif -+ - - #define cpu_to_be32(x) __cpu_to_be32(x) /* Needed by romfs_fs.h */ - -@@ -105,6 +112,18 @@ - return 0; - } - -+static int vfat_image(const unsigned char *buf, unsigned long *blocks) -+{ -+ const struct romfs_super_block *sb = -+ (const struct romfs_super_block *)buf; -+ if (!strncmp(buf + 54, "FAT12 ", 8) -+ || !strncmp(buf + 54, "FAT16 ", 8) -+ || !strncmp(buf + 82, "FAT32 ", 8)) -+ return 1; -+ -+ return 0; -+} -+ - static int minix_image(const unsigned char *buf, unsigned long *blocks) - { - const struct minix_super_block *sb = -@@ -167,8 +186,6 @@ - (const struct xfs_sb *)buf; - - if (__be32_to_cpu(sb->sb_magicnum) == XFS_SB_MAGIC) { -- *blocks = __be64_to_cpu(sb->sb_dblocks) * -- (__be32_to_cpu(sb->sb_blocksize) / BLOCK_SIZE); - return 1; - } - return 0; -@@ -184,6 +201,7 @@ - { 0, "gzip", gzip_image }, - { 0, "cramfs", cramfs_image }, - { 0, "romfs", romfs_image }, -+ { 0, "vfat", vfat_image }, - { 0, "xfs", xfs_image }, - { 1, "minix", minix_image }, - { 1, "ext3", ext3_image }, diff --git a/packages/klibc/klibc-utils-fstype_1.1.1.bb b/packages/klibc/klibc-utils-fstype_1.1.1.bb index 29ce38285c..2bcc0f6085 100644 --- a/packages/klibc/klibc-utils-fstype_1.1.1.bb +++ b/packages/klibc/klibc-utils-fstype_1.1.1.bb @@ -1,6 +1,6 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/Stable/klibc-${PV}.tar.bz2" -SRC_URI += "file://fstype-sane-and-vfat.patch;patch=1" -PR = "r0" +SRC_URI += "file://fstype-sane-and-vfat-jffs2.patch;patch=1" +PR = "r1" S = "${WORKDIR}/klibc-${PV}" -- cgit v1.2.3 From 44c61051f9b52a94db2609f6754b04c7ddda6550 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 14 Feb 2008 00:30:59 +0000 Subject: initramfs-module-bootmenu 1.0: Add jffs2 to list of recoginized FSes. * This is likely not enough to make jffs2 boot work. --- packages/initrdscripts/files/30-bootmenu.sh | 2 +- packages/initrdscripts/initramfs-module-bootmenu_1.0.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/initrdscripts/files/30-bootmenu.sh b/packages/initrdscripts/files/30-bootmenu.sh index 319f85aa6e..7bc1429b1b 100644 --- a/packages/initrdscripts/files/30-bootmenu.sh +++ b/packages/initrdscripts/files/30-bootmenu.sh @@ -81,7 +81,7 @@ while read maj min nblk dev; do fi get_partition_type - if [ "$fstype" != "ext2" -a "$fstype" != "ext3" -a "$fstype" != "vfat" ]; then + if [ "$fstype" != "ext2" -a "$fstype" != "ext3" -a "$fstype" != "vfat" -a "$fstype" != "jffs2" ]; then # continue true fi diff --git a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb index 19e7403b83..e87ba69776 100644 --- a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb +++ b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb @@ -1,5 +1,5 @@ SRC_URI = "file://30-bootmenu.sh" -PR = "r7" +PR = "r8" DESCRIPTION = "An initramfs module with UI for selection of boot device." RDEPENDS = "klibc-utils-fstype initramfs-uniboot initramfs-module-block initramfs-module-loop initramfs-module-nfs" # For VFAT mounting. -- cgit v1.2.3 From 930c99332ebdc3e41fedd5f5b72b556c3c1c6157 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 14 Feb 2008 08:41:41 +0000 Subject: linux-2.6.24: add mpc8313e-rdb patches for LEDs and real-time clock --- .../mpc8313e-rdb/mpc8313e-rdb-leds.patch | 202 +++++++++++++++++++++ .../mpc8313e-rdb/mpc8313e-rdb-rtc.patch | 24 +++ 2 files changed, 226 insertions(+) create mode 100644 packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-leds.patch create mode 100644 packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-rtc.patch diff --git a/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-leds.patch b/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-leds.patch new file mode 100644 index 0000000000..f1dca9d8e1 --- /dev/null +++ b/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-leds.patch @@ -0,0 +1,202 @@ +diff -urN linux-2.6.24.orig/drivers/leds/Kconfig linux-2.6.24/drivers/leds/Kconfig +--- linux-2.6.24.orig/drivers/leds/Kconfig 2008-01-24 23:58:37.000000000 +0100 ++++ linux-2.6.24/drivers/leds/Kconfig 2008-02-08 08:12:01.000000000 +0100 +@@ -114,6 +114,12 @@ + help + This option enables support for the CM-X270 LEDs. + ++config LEDS_MPC8313E_RDB ++ tristate "LED Support for MPC8313E-RDB LEDs" ++ depends on LEDS_CLASS && PPC_83xx ++ help ++ This option enables support for the LEDs on MPC8313E-RDB board. ++ + comment "LED Triggers" + + config LEDS_TRIGGERS +diff -urN linux-2.6.24.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.24/drivers/leds/leds-mpc8313e-rdb.c +--- linux-2.6.24.orig/drivers/leds/leds-mpc8313e-rdb.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24/drivers/leds/leds-mpc8313e-rdb.c 2008-02-08 08:12:01.000000000 +0100 +@@ -0,0 +1,171 @@ ++/* ++ * drivers/leds/leds-mpc8313e-rdb.c ++ * Copyright (C) 2007 Leon Woestenberg ++ * Copyright (C) 2007 Jeremy Laine ++ * ++ * 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. ++ * ++ * MPC8313E-RDB LEDs driver ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define LEDS_BASE 0xfa000000 ++#define LEDS_SIZE 0x2 ++ ++static struct platform_device *leds_pdev = NULL; ++static struct resource *led_mem = NULL; ++static void *led_io = NULL; ++static u8 led_state = 0xff; ++ ++struct mpc8313_led { ++ struct led_classdev cdev; ++ u8 bitmask; ++}; ++ ++static void mpc8313leds_set(struct led_classdev *led_cdev, enum led_brightness value) ++{ ++ struct mpc8313_led *led_dev = container_of(led_cdev, struct mpc8313_led, cdev); ++ if (value) ++ led_state &= ~led_dev->bitmask; ++ else ++ led_state |= led_dev->bitmask; ++ iowrite8(led_state, led_io); ++} ++ ++static struct mpc8313_led mpc8313_leds[] = { ++ { ++ .cdev = { ++ .name = "mpc8313:led0", ++ .brightness_set = mpc8313leds_set, ++ }, ++ .bitmask = 1, ++ }, ++ { ++ .cdev = { ++ .name = "mpc8313:led1", ++ .brightness_set = mpc8313leds_set, ++ }, ++ .bitmask = 2, ++ }, ++ { ++ .cdev = { ++ .name = "mpc8313:led2", ++ .brightness_set = mpc8313leds_set, ++ }, ++ .bitmask = 4, ++ }, ++ { ++ .cdev = { ++ .name = "mpc8313:led3", ++ .brightness_set = mpc8313leds_set, ++ }, ++ .bitmask = 8, ++ }, ++ { ++ .cdev = { ++ .name = "mpc8313:led4", ++ .brightness_set = mpc8313leds_set, ++ }, ++ .bitmask = 16, ++ }, ++ { ++ .cdev = { ++ .name = "mpc8313:green", ++ .brightness_set = mpc8313leds_set, ++ }, ++ .bitmask = 32, ++ }, ++ { ++ .cdev = { ++ .name = "mpc8313:yellow", ++ .brightness_set = mpc8313leds_set, ++ }, ++ .bitmask = 64, ++ }, ++ { ++ .cdev = { ++ .name = "mpc8313:red", ++ .brightness_set = mpc8313leds_set, ++ }, ++ .bitmask = 128, ++ }, ++}; ++ ++static int mpc8313leds_probe(struct platform_device *pdev) ++{ ++ int i; ++ int ret; ++ ++ for (i = ret = 0; ret >= 0 && i < ARRAY_SIZE(mpc8313_leds); i++) { ++ ret = led_classdev_register(&pdev->dev, ++ &mpc8313_leds[i].cdev); ++ } ++ ++ if (ret < 0 && i > 1) { ++ for (i = i - 2; i >= 0; i--) ++ led_classdev_unregister(&mpc8313_leds[i].cdev); ++ } ++ ++ return ret; ++} ++ ++static int mpc8313leds_remove(struct platform_device *pdev) ++{ ++ int i; ++ ++ for (i = ARRAY_SIZE(mpc8313_leds) - 1; i >= 0; i--) ++ led_classdev_unregister(&mpc8313_leds[i].cdev); ++ ++ return 0; ++} ++ ++static struct platform_driver mpc8313leds_driver = { ++ .driver = { ++ .name = "mpc8313-leds", ++ .owner = THIS_MODULE, ++ }, ++ .probe = mpc8313leds_probe, ++ .remove = mpc8313leds_remove, ++}; ++ ++static int __init mpc8313leds_init(void) ++{ ++ if (!(led_mem = request_mem_region(LEDS_BASE, LEDS_SIZE, "mpc8313-leds"))) ++ return -ENOMEM; ++ if (!(led_io = ioremap(LEDS_BASE, LEDS_SIZE))) ++ { ++ release_mem_region(LEDS_BASE, LEDS_SIZE); ++ led_mem = NULL; ++ return -ENOMEM; ++ } ++ iowrite8(led_state, led_io); ++ ++ leds_pdev = platform_device_register_simple("mpc8313-leds", -1, NULL, 0); ++ ++ return platform_driver_register(&mpc8313leds_driver); ++} ++ ++static void __exit mpc8313leds_exit(void) ++{ ++ if (led_mem) release_mem_region(LEDS_BASE, LEDS_SIZE); ++ led_mem = NULL; ++ platform_driver_unregister(&mpc8313leds_driver); ++ ++ platform_device_unregister(leds_pdev); ++} ++ ++module_init(mpc8313leds_init); ++module_exit(mpc8313leds_exit); ++ ++MODULE_AUTHOR("Leon Woestenberg "); ++MODULE_DESCRIPTION("MPC8313E-RDB LED driver"); ++MODULE_LICENSE("GPL"); +diff -urN linux-2.6.24.orig/drivers/leds/Makefile linux-2.6.24/drivers/leds/Makefile +--- linux-2.6.24.orig/drivers/leds/Makefile 2008-01-24 23:58:37.000000000 +0100 ++++ linux-2.6.24/drivers/leds/Makefile 2008-02-08 08:12:38.000000000 +0100 +@@ -19,6 +19,7 @@ + obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o + obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o + obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o ++obj-$(CONFIG_LEDS_MPC8313E_RDB) += leds-mpc8313e-rdb.o + + # LED Triggers + obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o diff --git a/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-rtc.patch b/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-rtc.patch new file mode 100644 index 0000000000..0307094675 --- /dev/null +++ b/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-rtc.patch @@ -0,0 +1,24 @@ +diff -urN linux-2.6.24.orig/arch/powerpc/boot/dts/mpc8313erdb.dts linux-2.6.24/arch/powerpc/boot/dts/mpc8313erdb.dts +--- linux-2.6.24.orig/arch/powerpc/boot/dts/mpc8313erdb.dts 2008-01-24 23:58:37.000000000 +0100 ++++ linux-2.6.24/arch/powerpc/boot/dts/mpc8313erdb.dts 2008-02-08 08:09:07.000000000 +0100 +@@ -52,12 +52,20 @@ + }; + + i2c@3000 { ++ #address-cells = <1>; ++ #size-cells = <0>; + device_type = "i2c"; + compatible = "fsl-i2c"; + reg = <3000 100>; + interrupts = ; + interrupt-parent = < &ipic >; + dfsrr; ++ ++ rtc@68 { ++ device_type = "rtc"; ++ compatible = "dallas,ds1339"; ++ reg = <68>; ++ }; + }; + + i2c@3100 { -- cgit v1.2.3 From 701f7ac23e9258cfc371495a3c35375c4532ff87 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 14 Feb 2008 08:53:50 +0000 Subject: angstrom 2008: start lockdown file based on openmoko versions * awaits bitbake support to get generated automatically --- conf/distro/angstrom-2008.1.conf | 13 ++++--------- conf/distro/include/angstrom-2008-preferred-versions.inc | 8 ++++++++ 2 files changed, 12 insertions(+), 9 deletions(-) create mode 100644 conf/distro/include/angstrom-2008-preferred-versions.inc diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index 4f950ffff1..b24a57f537 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -22,6 +22,7 @@ DISTRO_REVISION = "1" require conf/distro/include/sane-srcdates.inc require conf/distro/include/sane-srcrevs.inc +require conf/distro/include/angstrom-2008-preferred-versions.inc #Images built can have to modes: # 'debug': empty rootpassword, strace included @@ -71,15 +72,9 @@ PREFERRED_VERSION_uclibc-initial ?= "0.9.29" #Prefer a newer GTK+ and friends -PREFERRED_VERSION_gtk+ = "2.12.3" -PREFERRED_VERSION_glib-2.0 = "2.14.4" -PREFERRED_VERSION_pango = "1.18.1" - -# prefer newest for speed and fun -PREFERRED_VERSION_udev = "115" - -# Our patched-to-hell busybox 1.2.1 is getting old and unmaintanable -PREFERRED_VERSION_busybox = "1.7.2" +PREFERRED_VERSION_gtk+ ?= "2.12.3" +PREFERRED_VERSION_glib-2.0 ?= "2.14.4" +PREFERRED_VERSION_pango ?= "1.18.1" PREFERRED_PROVIDER_avahi = "avahi" diff --git a/conf/distro/include/angstrom-2008-preferred-versions.inc b/conf/distro/include/angstrom-2008-preferred-versions.inc new file mode 100644 index 0000000000..5641c8ee39 --- /dev/null +++ b/conf/distro/include/angstrom-2008-preferred-versions.inc @@ -0,0 +1,8 @@ +PREFERRED_VERSION_dbus = "1.1.4" +PREFERRED_VERSION_busybox = "1.9.1" +PREFERRED_VERSION_gst-pulse = "0.9.7" +PREFERRED_VERSION_libtool = "1.2.14" +PREFERRED_VERSION_pulseaudio = "0.9.9" +PREFERRED_VERSION_udev = "118" +PREFERRED_VERSION_vte = "0.16.10" + -- cgit v1.2.3 From 80aae1fa0adb151536096e8354acddb1cf0f8809 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Thu, 14 Feb 2008 10:04:21 +0000 Subject: Reworked maemo4 packages hildon-1: Removed, replaced by libhildon hildon-lgpl: Removed (obsolete in Maemo 4.0) hildon-libs: Removed (obsolete in Maemo 4.0) outo: Removed (integrated in libosso). libhildon: Updated to Maemo 4.0 version. libhildonfm: Updated to Maemo 4.0 version. libconic: Updated to Maemo 4.0 version. libosso: Updated to Maemo 4.0 version. mce-dev: Updated to Maemo 4.0 version. osso-gwconnect: Updated to Maemo 4.0 version. hildon-thumbnail: Updated to Maemo 4.0 version. osso-thumbnail: Removed, replaced by hildon-thumbnail. osso-gnome-vf2: New recipe, needed for other OSSO libraries. osso-ic-oss: Adjusted dependencies. libhildonmime: Adjusted dependencies. libhildonhelp: Adjusted dependencies. libgpsbt: Adjusted dependencies. libgpsmgr: Adjusted dependencies. libosso-gsf: Adjusted dependencies. --- packages/maemo4/hildon-1/.mtn2git_empty | 0 packages/maemo4/hildon-1/buttonbox.patch | 11 -- packages/maemo4/hildon-1_svn.bb | 20 ---- packages/maemo4/hildon-base-lib_0.11.1.bb | 13 -- packages/maemo4/hildon-lgpl_0.12.1.bb | 10 -- packages/maemo4/hildon-libs_0.15.1.bb | 26 ---- packages/maemo4/hildon-thumbnail.inc | 19 +++ packages/maemo4/hildon-thumbnail_0.11.bb | 25 ---- packages/maemo4/hildon-thumbnail_0.14.bb | 10 ++ packages/maemo4/libconic/.mtn2git_empty | 0 packages/maemo4/libconic/dbus-api-update.patch | 19 --- packages/maemo4/libconic_0.13.bb | 10 +- packages/maemo4/libgpsbt_0.1.bb | 4 +- packages/maemo4/libgpsmgr_0.1.bb | 4 +- packages/maemo4/libhildon.inc | 13 ++ packages/maemo4/libhildon/.mtn2git_empty | 0 packages/maemo4/libhildon/libhildon-buildfix.patch | 16 +++ packages/maemo4/libhildon_1.99.0.bb | 11 ++ packages/maemo4/libhildonfm.inc | 22 ++++ .../libhildonfm/hildonfm-ifdef-maemogtk.diff | 132 -------------------- .../libhildonfm/libhildonfm-gtkmaemo-ifdef.patch | 133 +++++++++++++++++++++ packages/maemo4/libhildonfm_1.9.41.bb | 30 ----- packages/maemo4/libhildonfm_1.9.46.bb | 9 ++ packages/maemo4/libhildonhelp.inc | 17 +++ packages/maemo4/libhildonhelp_1.9.1.bb | 23 ---- packages/maemo4/libhildonhelp_1.9.6.bb | 6 + packages/maemo4/libhildonmime.inc | 17 +++ packages/maemo4/libhildonmime_1.10.0.bb | 7 ++ packages/maemo4/libhildonmime_1.9.5.bb | 19 +-- packages/maemo4/libosso-gsf_1.11.10.4.bb | 7 +- packages/maemo4/libosso.inc | 19 +++ packages/maemo4/libosso/.mtn2git_empty | 0 packages/maemo4/libosso/libosso-buildfix.patch | 64 ++++++++++ packages/maemo4/libosso_1.20.bb | 22 ---- packages/maemo4/libosso_2.13.bb | 16 +++ packages/maemo4/mce-dev.inc | 22 ++++ packages/maemo4/mce-dev_1.5.6.bb | 26 ---- packages/maemo4/mce-dev_1.6.3.bb | 7 ++ packages/maemo4/osso-gnome-vfs2/.mtn2git_empty | 0 .../osso-gnome-vfs2/gnome-vfs-no-kerberos.patch | 51 ++++++++ packages/maemo4/osso-gnome-vfs2_2.16.3.bb | 47 ++++++++ packages/maemo4/osso-gwconnect.inc | 17 +++ packages/maemo4/osso-gwconnect_1.0.12.bb | 8 ++ packages/maemo4/osso-gwconnect_1.0.8.bb | 22 ---- packages/maemo4/osso-ic-oss_1.0.4.bb | 6 +- packages/maemo4/osso-thumbnail_0.7.bb | 22 ---- packages/maemo4/outo_0.1.1.bb | 14 --- 47 files changed, 551 insertions(+), 445 deletions(-) delete mode 100644 packages/maemo4/hildon-1/.mtn2git_empty delete mode 100644 packages/maemo4/hildon-1/buttonbox.patch delete mode 100644 packages/maemo4/hildon-1_svn.bb delete mode 100644 packages/maemo4/hildon-base-lib_0.11.1.bb delete mode 100644 packages/maemo4/hildon-lgpl_0.12.1.bb delete mode 100644 packages/maemo4/hildon-libs_0.15.1.bb create mode 100644 packages/maemo4/hildon-thumbnail.inc delete mode 100644 packages/maemo4/hildon-thumbnail_0.11.bb create mode 100644 packages/maemo4/hildon-thumbnail_0.14.bb delete mode 100644 packages/maemo4/libconic/.mtn2git_empty delete mode 100644 packages/maemo4/libconic/dbus-api-update.patch create mode 100644 packages/maemo4/libhildon.inc create mode 100644 packages/maemo4/libhildon/.mtn2git_empty create mode 100644 packages/maemo4/libhildon/libhildon-buildfix.patch create mode 100644 packages/maemo4/libhildon_1.99.0.bb create mode 100644 packages/maemo4/libhildonfm.inc delete mode 100644 packages/maemo4/libhildonfm/hildonfm-ifdef-maemogtk.diff create mode 100644 packages/maemo4/libhildonfm/libhildonfm-gtkmaemo-ifdef.patch delete mode 100644 packages/maemo4/libhildonfm_1.9.41.bb create mode 100644 packages/maemo4/libhildonfm_1.9.46.bb create mode 100644 packages/maemo4/libhildonhelp.inc delete mode 100644 packages/maemo4/libhildonhelp_1.9.1.bb create mode 100644 packages/maemo4/libhildonhelp_1.9.6.bb create mode 100644 packages/maemo4/libhildonmime.inc create mode 100644 packages/maemo4/libhildonmime_1.10.0.bb create mode 100644 packages/maemo4/libosso.inc create mode 100644 packages/maemo4/libosso/.mtn2git_empty create mode 100644 packages/maemo4/libosso/libosso-buildfix.patch delete mode 100644 packages/maemo4/libosso_1.20.bb create mode 100644 packages/maemo4/libosso_2.13.bb create mode 100644 packages/maemo4/mce-dev.inc delete mode 100644 packages/maemo4/mce-dev_1.5.6.bb create mode 100644 packages/maemo4/mce-dev_1.6.3.bb create mode 100644 packages/maemo4/osso-gnome-vfs2/.mtn2git_empty create mode 100644 packages/maemo4/osso-gnome-vfs2/gnome-vfs-no-kerberos.patch create mode 100644 packages/maemo4/osso-gnome-vfs2_2.16.3.bb create mode 100644 packages/maemo4/osso-gwconnect.inc create mode 100644 packages/maemo4/osso-gwconnect_1.0.12.bb delete mode 100644 packages/maemo4/osso-gwconnect_1.0.8.bb delete mode 100644 packages/maemo4/osso-thumbnail_0.7.bb delete mode 100644 packages/maemo4/outo_0.1.1.bb diff --git a/packages/maemo4/hildon-1/.mtn2git_empty b/packages/maemo4/hildon-1/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/maemo4/hildon-1/buttonbox.patch b/packages/maemo4/hildon-1/buttonbox.patch deleted file mode 100644 index cfea60d000..0000000000 --- a/packages/maemo4/hildon-1/buttonbox.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- /tmp/hildon-code-dialog.c 2007-08-07 11:46:03.000000000 +0200 -+++ hildon-1/src/hildon-code-dialog.c 2007-08-07 11:46:16.468400000 +0200 -@@ -277,7 +277,7 @@ - gtk_container_add (GTK_CONTAINER (priv->buttons[3][2]), image1); - dialog_action_area1 = GTK_DIALOG (dialog)->action_area; - gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), -- GTK_BUTTONBOX_CENTER); -+ GTK_BUTTONBOX_DEFAULT); - - okButton = gtk_dialog_add_button (GTK_DIALOG (dialog) ,DEVICELOCK_OK, - GTK_RESPONSE_OK); diff --git a/packages/maemo4/hildon-1_svn.bb b/packages/maemo4/hildon-1_svn.bb deleted file mode 100644 index 27b0443d79..0000000000 --- a/packages/maemo4/hildon-1_svn.bb +++ /dev/null @@ -1,20 +0,0 @@ -DESCRIPTION = "Hildon widget library" -LICENSE = "LGPL" - -DEPENDS = "gconf-dbus esound gtk+" - -PV = "1.0.17+svnr${SRCREV}" - -SRC_URI = "svn://stage.maemo.org/svn/maemo/projects/haf/trunk;module=hildon-1;proto=https \ - file://buttonbox.patch;patch=1;maxrev=14173 " -S = "${WORKDIR}/hildon-1" - -inherit autotools pkgconfig lib_package - -EXTRA_OECONF = "--with-maemo-gtk=no" - - -do_stage() { - autotools_stage_all -} - diff --git a/packages/maemo4/hildon-base-lib_0.11.1.bb b/packages/maemo4/hildon-base-lib_0.11.1.bb deleted file mode 100644 index ce3f667a00..0000000000 --- a/packages/maemo4/hildon-base-lib_0.11.1.bb +++ /dev/null @@ -1,13 +0,0 @@ -LICENSE = "LGPL" - -DEPENDS = "gtk+ virtual/libx11" - -SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-1.tar.gz" - -inherit autotools pkgconfig - -do_stage() { - autotools_stage_all -} - - diff --git a/packages/maemo4/hildon-lgpl_0.12.1.bb b/packages/maemo4/hildon-lgpl_0.12.1.bb deleted file mode 100644 index 02bbad9dd2..0000000000 --- a/packages/maemo4/hildon-lgpl_0.12.1.bb +++ /dev/null @@ -1,10 +0,0 @@ -LICENSE = "LGPL" - -SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-4.tar.gz" - -inherit autotools pkgconfig - -do_stage() { - autotools_stage_all -} - diff --git a/packages/maemo4/hildon-libs_0.15.1.bb b/packages/maemo4/hildon-libs_0.15.1.bb deleted file mode 100644 index 4c88d322ff..0000000000 --- a/packages/maemo4/hildon-libs_0.15.1.bb +++ /dev/null @@ -1,26 +0,0 @@ -LICENSE = "LGPL" -DESCRIPTION = "Nokia hildon librares" - -DEPENDS = "gtk-doc-native libosso libmatchbox" - -PR = "r0" - -SRC_URI = "http://launchpadlibrarian.net/7598381/hildon-libs_0.15.1-1ubuntu2.tar.gz" - -inherit autotools pkgconfig lib_package - -S = "${WORKDIR}/${PN}" - -do_configure_prepend() { - # remove Werror from OSSO_CFLAGS - sed -i s:-Werror::g configure.ac - touch gtk-doc.make -} - -do_stage() { - autotools_stage_all -} - - -FILES_${PN} += "${libdir}/hildon-widgets/*" - diff --git a/packages/maemo4/hildon-thumbnail.inc b/packages/maemo4/hildon-thumbnail.inc new file mode 100644 index 0000000000..46468e1ca1 --- /dev/null +++ b/packages/maemo4/hildon-thumbnail.inc @@ -0,0 +1,19 @@ +LICENSE = "LGPL" +DESCRIPTION = "Nokia hildon thumbnail library" + +DEPENDS = "libhildonmime" + +inherit autotools pkgconfig lib_package + +do_configure_prepend() { + # remove Werror from OSSO_CFLAGS + sed -i s:-Werror::g configure.ac + + touch gtk-doc.make +} + +do_stage() { + autotools_stage_all +} + + diff --git a/packages/maemo4/hildon-thumbnail_0.11.bb b/packages/maemo4/hildon-thumbnail_0.11.bb deleted file mode 100644 index 54646e7630..0000000000 --- a/packages/maemo4/hildon-thumbnail_0.11.bb +++ /dev/null @@ -1,25 +0,0 @@ -LICENSE = "LGPL" -DESCRIPTION = "Nokia hildon thumbnail library" - -DEPENDS = "libhildonmime hildon-libs osso-thumbnail" - -PR = "r0" - -SRC_URI = "http://repository.maemo.org/pool/sardine/main/source/h/${PN}/${PN}_${PV}.tar.gz \ - " - -inherit autotools pkgconfig lib_package - -S = "${WORKDIR}/${PV}" - -do_configure_prepend() { - # remove Werror from OSSO_CFLAGS - sed -i s:-Werror::g configure.ac - touch gtk-doc.make -} - -do_stage() { - autotools_stage_all -} - - diff --git a/packages/maemo4/hildon-thumbnail_0.14.bb b/packages/maemo4/hildon-thumbnail_0.14.bb new file mode 100644 index 0000000000..adc52b3912 --- /dev/null +++ b/packages/maemo4/hildon-thumbnail_0.14.bb @@ -0,0 +1,10 @@ +require hildon-thumbnail.inc + +DEPENDS = "libhildon libosso" + +PR = "r0" + +SRC_URI = "http://repository.maemo.org/pool/maemo4.0/free/source/h/${PN}/${PN}_${PV}.tar.gz \ + " + + diff --git a/packages/maemo4/libconic/.mtn2git_empty b/packages/maemo4/libconic/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/maemo4/libconic/dbus-api-update.patch b/packages/maemo4/libconic/dbus-api-update.patch deleted file mode 100644 index 3542cecae8..0000000000 --- a/packages/maemo4/libconic/dbus-api-update.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- /tmp/conicconnection.c 2007-11-12 12:45:37.000000000 +0100 -+++ libconic-0.13/conic/conicconnection.c 2007-11-12 12:46:04.663234000 +0100 -@@ -473,7 +473,7 @@ - ICD_DBUS_PATH, - &icd_vtable, - NULL)) { -- dbus_connection_disconnect(dbus_connection); -+ dbus_connection_close(dbus_connection); - dbus_connection_unref(dbus_connection); - dbus_connection = NULL; - } ---- /tmp/Makefile.am 2007-11-12 12:47:22.000000000 +0100 -+++ libconic-0.13/Makefile.am 2007-11-12 12:47:29.773234000 +0100 -@@ -1,4 +1,4 @@ --SUBDIRS = conic tests -+SUBDIRS = conic - - pkgconfigdir = $(libdir)/pkgconfig - pkgconfig_DATA = conic.pc diff --git a/packages/maemo4/libconic_0.13.bb b/packages/maemo4/libconic_0.13.bb index 511abb70cc..5f57cf77b1 100644 --- a/packages/maemo4/libconic_0.13.bb +++ b/packages/maemo4/libconic_0.13.bb @@ -1,13 +1,15 @@ DESCRIPTION = "Internet connection library" LICENSE = "LGPL" -DEPENDS = "dbus-glib gconf" +DEPENDS = "dbus gconf osso-ic-oss" + +PR = "r1" + +SRC_URI = "http://repository.maemo.org/pool/maemo4.0/free/source/libc/${PN}/${PN}_${PV}-0.8.tar.gz" -SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}.tar.gz \ - file://dbus-api-update.patch;patch=1" inherit autotools pkgconfig do_stage() { - autotools_stage_all + autotools_stage_all } diff --git a/packages/maemo4/libgpsbt_0.1.bb b/packages/maemo4/libgpsbt_0.1.bb index 59d0db9fbc..beca783a0b 100644 --- a/packages/maemo4/libgpsbt_0.1.bb +++ b/packages/maemo4/libgpsbt_0.1.bb @@ -1,7 +1,9 @@ LICENSE = "nokia" -DEPENDS = "libgpsmgr dbus-glib" +DEPENDS = "libgpsmgr dbus" +# This is proprietary software in Chinook, so we have to stay with the last released +# free version. SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-18.tar.gz" inherit autotools pkgconfig diff --git a/packages/maemo4/libgpsmgr_0.1.bb b/packages/maemo4/libgpsmgr_0.1.bb index f0fc14bae9..bcbb4cefcb 100644 --- a/packages/maemo4/libgpsmgr_0.1.bb +++ b/packages/maemo4/libgpsmgr_0.1.bb @@ -1,11 +1,13 @@ LICENSE = "nokia" +# This is proprietary software in Chinook, so we have to stay with the last released +# free version. SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-10.tar.gz" inherit autotools pkgconfig do_stage() { - autotools_stage_all + autotools_stage_all } diff --git a/packages/maemo4/libhildon.inc b/packages/maemo4/libhildon.inc new file mode 100644 index 0000000000..bab16cf062 --- /dev/null +++ b/packages/maemo4/libhildon.inc @@ -0,0 +1,13 @@ +DESCRIPTION = "Hildon widget library" +LICENSE = "LGPL" + +DEPENDS = "gconf-dbus esound gtk+" + +inherit autotools pkgconfig lib_package + +EXTRA_OECONF = "--with-maemo-gtk=no" + +do_stage() { + autotools_stage_all +} + diff --git a/packages/maemo4/libhildon/.mtn2git_empty b/packages/maemo4/libhildon/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/maemo4/libhildon/libhildon-buildfix.patch b/packages/maemo4/libhildon/libhildon-buildfix.patch new file mode 100644 index 0000000000..b9a669c76a --- /dev/null +++ b/packages/maemo4/libhildon/libhildon-buildfix.patch @@ -0,0 +1,16 @@ +Index: libhildon-1.99.0/src/hildon-code-dialog.c +=================================================================== +--- libhildon-1.99.0.orig/src/hildon-code-dialog.c 2007-10-10 15:03:09.000000000 +0200 ++++ libhildon-1.99.0/src/hildon-code-dialog.c 2008-02-13 13:54:47.000000000 +0100 +@@ -302,7 +302,11 @@ + gtk_container_add (GTK_CONTAINER (priv->buttons[3][2]), image1); + dialog_action_area1 = GTK_DIALOG (dialog)->action_area; + gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), ++#if defined (MAEMO_GTK) + GTK_BUTTONBOX_CENTER); ++#else ++ GTK_BUTTONBOX_DEFAULT_STYLE); ++#endif + + okButton = gtk_dialog_add_button (GTK_DIALOG (dialog) ,DEVICELOCK_OK, + GTK_RESPONSE_OK); diff --git a/packages/maemo4/libhildon_1.99.0.bb b/packages/maemo4/libhildon_1.99.0.bb new file mode 100644 index 0000000000..4757d140b2 --- /dev/null +++ b/packages/maemo4/libhildon_1.99.0.bb @@ -0,0 +1,11 @@ +require libhildon.inc + +DEPENDS += "libpng libxt libxi" + +SRC_URI = "\ + http://repository.maemo.org/pool/maemo4.0/free/source/libh/${PN}/${PN}_${PV}-1.tar.gz \ + file://libhildon-buildfix.patch;patch=1 \ + " + + + diff --git a/packages/maemo4/libhildonfm.inc b/packages/maemo4/libhildonfm.inc new file mode 100644 index 0000000000..b6c20a4499 --- /dev/null +++ b/packages/maemo4/libhildonfm.inc @@ -0,0 +1,22 @@ +LICENSE = "LGPL" +DESCRIPTION = "Nokia hildon filemanager library" + +DEPENDS = "gtk+ libxi libxt libpng gconf dbus libosso libhildon hildon-thumbnail libhildonmime osso-gwconnect mce-dev" + +inherit autotools pkgconfig lib_package + +do_configure_prepend() { + # remove Werror from OSSO_CFLAGS + sed -i s:-Werror::g configure.ac + + touch gtk-doc.make +} + +PARALLEL_MAKE = "" + +do_stage() { + autotools_stage_all + ln -sf ${STAGING_INCDIR}/hildon-fm-2/hildon/* ${STAGING_INCDIR}/hildon-widgets/ +} + + diff --git a/packages/maemo4/libhildonfm/hildonfm-ifdef-maemogtk.diff b/packages/maemo4/libhildonfm/hildonfm-ifdef-maemogtk.diff deleted file mode 100644 index 8d91e1dd65..0000000000 --- a/packages/maemo4/libhildonfm/hildonfm-ifdef-maemogtk.diff +++ /dev/null @@ -1,132 +0,0 @@ ---- /tmp/hildon-file-selection.c 2007-10-02 10:08:17.000000000 +0200 -+++ 1_1.9.41/hildon-fm/hildon-file-selection.c 2007-10-02 11:26:58.292045000 +0200 -@@ -2036,6 +2036,7 @@ - g_object_set(cell, "text", buffer, "sensitive", sensitive, NULL); - } - -+#ifdef USE_MAEMO_GTK - static void hildon_file_selection_navigation_pane_context(GtkWidget * - widget, - gpointer data) -@@ -2052,6 +2053,7 @@ - ULOG_DEBUG(__FUNCTION__); - g_signal_emit(data, signal_content_pane_context_menu, 0); - } -+#endif /* USE_MAEMO_GTK */ - - static gboolean hildon_file_selection_on_content_pane_key(GtkWidget * - widget, -@@ -2200,6 +2202,7 @@ - } - } - -+#ifdef USE_MAEMO_GTK - static gboolean - tap_and_hold_query (gpointer self, guint signal_id) - { -@@ -2225,6 +2228,8 @@ - return tap_and_hold_query (self, signal_navigation_pane_context_menu); - } - -+#endif /* USE_MAEMO_GTK */ -+ - static void hildon_file_selection_create_thumbnail_view(HildonFileSelection - * self) - { -@@ -2277,7 +2282,7 @@ - g_signal_connect_object(tree, "key-press-event", - G_CALLBACK(hildon_file_selection_on_content_pane_key), - self, 0); -- -+#ifdef USE_MAEMO_GTK - gtk_widget_tap_and_hold_setup(GTK_WIDGET(tree), NULL, NULL, - GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); - g_signal_connect_object (tree, "tap-and-hold-query", -@@ -2286,6 +2291,7 @@ - g_signal_connect_object(tree, "tap-and-hold", - G_CALLBACK - (hildon_file_selection_content_pane_context), self, 0); -+#endif /* USE_MAEMO_GTK */ - - g_signal_connect_object(tree, "notify::has-focus", - G_CALLBACK(content_pane_focus), self, 0); -@@ -2397,7 +2403,7 @@ - (selection, "changed", - G_CALLBACK (hildon_file_selection_content_pane_selection_changed), - self, 0); -- -+#ifdef USE_MAEMO_GTK - gtk_widget_tap_and_hold_setup(GTK_WIDGET(tree), NULL, NULL, - GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); - g_signal_connect_object (tree, "tap-and-hold-query", -@@ -2406,7 +2412,7 @@ - g_signal_connect_object(tree, "tap-and-hold", - G_CALLBACK - (hildon_file_selection_content_pane_context), self, 0); -- -+#endif /* USE_MAEMO_GTK */ - g_signal_connect_object(tree, "key-press-event", - G_CALLBACK(hildon_file_selection_on_content_pane_key), - self, 0); -@@ -2492,7 +2498,7 @@ - g_signal_connect_object(selection, "changed", - G_CALLBACK(hildon_file_selection_selection_changed), - self, 0); -- -+#ifdef USE_MAEMO_GTK - gtk_widget_tap_and_hold_setup(GTK_WIDGET(self->priv->dir_tree), NULL, - NULL, GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); - g_signal_connect_object (self->priv->dir_tree, "tap-and-hold-query", -@@ -2502,7 +2508,7 @@ - G_CALLBACK - (hildon_file_selection_navigation_pane_context), - self, 0); -- -+#endif /* USE_MAEMO_GTK */ - g_signal_connect_object(self->priv->dir_tree, "key-press-event", - G_CALLBACK - (hildon_file_selection_on_navigation_pane_key), self, 0); ---- /tmp/hildon-file-chooser-dialog.c 2007-10-02 10:14:05.000000000 +0200 -+++ 1_1.9.41/hildon-fm/hildon-file-chooser-dialog.c 2007-10-02 11:33:43.132045000 +0200 -@@ -191,7 +191,7 @@ - - return (first_digit << 4) | second_digit; - } -- -+#ifdef USE_MAEMO_GTK - static void chooser_entry_invalid_input_cb (GtkEntry *entry, - GtkInvalidInputType inv_type, - gpointer user_data) -@@ -202,7 +202,7 @@ - HCS("ckdg_ib_maximum_characters_reached")); - } - } -- -+#endif /* USE_MAEMO_GTK */ - static gchar * - g_unescape_uri_string (const char *escaped, - int len, -@@ -1837,8 +1837,9 @@ - G_PARAM_READWRITE); - g_object_class_install_property(gobject_class, PROP_SELECTION_MODE, pspec); - -- -+#ifdef USE_MAEMO_GTK - hildon_gtk_file_chooser_install_properties(gobject_class); -+#endif - } - - static void hildon_file_chooser_dialog_sort_changed(GtkWidget * item, -@@ -1975,10 +1976,10 @@ - g_signal_connect( priv->entry_name, "changed", - G_CALLBACK( hildon_file_chooser_entry_changed ), - self ); -- -+#ifdef USE_MAEMO_GTK - g_signal_connect(priv->entry_name, "invalid-input", - G_CALLBACK(chooser_entry_invalid_input_cb), self); -- -+#endif /* USE_MAEMO_GTK */ - priv->hbox_location = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); - priv->hbox_items = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); - priv->image_location = gtk_image_new(); diff --git a/packages/maemo4/libhildonfm/libhildonfm-gtkmaemo-ifdef.patch b/packages/maemo4/libhildonfm/libhildonfm-gtkmaemo-ifdef.patch new file mode 100644 index 0000000000..6af13d24bf --- /dev/null +++ b/packages/maemo4/libhildonfm/libhildonfm-gtkmaemo-ifdef.patch @@ -0,0 +1,133 @@ +Index: libhildonfm-1.9.46/hildon-fm/hildon-file-chooser-dialog.c +=================================================================== +--- libhildonfm-1.9.46.orig/hildon-fm/hildon-file-chooser-dialog.c 2007-10-16 10:11:59.000000000 +0200 ++++ libhildonfm-1.9.46/hildon-fm/hildon-file-chooser-dialog.c 2008-02-14 08:24:41.000000000 +0100 +@@ -192,6 +192,7 @@ + return (first_digit << 4) | second_digit; + } + ++#ifdef USE_MAEMO_GTK + static void chooser_entry_invalid_input_cb (GtkEntry *entry, + GtkInvalidInputType inv_type, + gpointer user_data) +@@ -202,6 +203,7 @@ + HCS("ckdg_ib_maximum_characters_reached")); + } + } ++#endif + + static gchar * + g_unescape_uri_string (const char *escaped, +@@ -1838,7 +1840,9 @@ + g_object_class_install_property(gobject_class, PROP_SELECTION_MODE, pspec); + + ++#ifdef USE_MAEMO_GTK + hildon_gtk_file_chooser_install_properties(gobject_class); ++#endif + } + + static void hildon_file_chooser_dialog_sort_changed(GtkWidget * item, +@@ -1975,10 +1979,10 @@ + g_signal_connect( priv->entry_name, "changed", + G_CALLBACK( hildon_file_chooser_entry_changed ), + self ); +- ++#ifdef USE_MAEMO_GTK + g_signal_connect(priv->entry_name, "invalid-input", + G_CALLBACK(chooser_entry_invalid_input_cb), self); +- ++#endif + priv->hbox_location = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); + priv->hbox_items = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); + priv->image_location = gtk_image_new(); +Index: libhildonfm-1.9.46/hildon-fm/hildon-file-selection.c +=================================================================== +--- libhildonfm-1.9.46.orig/hildon-fm/hildon-file-selection.c 2007-10-16 10:11:59.000000000 +0200 ++++ libhildonfm-1.9.46/hildon-fm/hildon-file-selection.c 2008-02-14 08:21:31.000000000 +0100 +@@ -2036,6 +2036,7 @@ + g_object_set(cell, "text", buffer, "sensitive", sensitive, NULL); + } + ++#ifdef USE_MAEMO_GTK + static void hildon_file_selection_navigation_pane_context(GtkWidget * + widget, + gpointer data) +@@ -2052,6 +2053,7 @@ + ULOG_DEBUG(__FUNCTION__); + g_signal_emit(data, signal_content_pane_context_menu, 0); + } ++#endif + + static gboolean hildon_file_selection_on_content_pane_key(GtkWidget * + widget, +@@ -2200,6 +2202,7 @@ + } + } + ++#ifdef USE_MAEMO_GTK + static gboolean + tap_and_hold_query (gpointer self, guint signal_id) + { +@@ -2224,6 +2227,7 @@ + { + return tap_and_hold_query (self, signal_navigation_pane_context_menu); + } ++#endif + + static void hildon_file_selection_create_thumbnail_view(HildonFileSelection + * self) +@@ -2277,7 +2281,7 @@ + g_signal_connect_object(tree, "key-press-event", + G_CALLBACK(hildon_file_selection_on_content_pane_key), + self, 0); +- ++#ifdef USE_MAEMO_GTK + gtk_widget_tap_and_hold_setup(GTK_WIDGET(tree), NULL, NULL, + GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); + g_signal_connect_object (tree, "tap-and-hold-query", +@@ -2286,7 +2290,7 @@ + g_signal_connect_object(tree, "tap-and-hold", + G_CALLBACK + (hildon_file_selection_content_pane_context), self, 0); +- ++#endif + g_signal_connect_object(tree, "notify::has-focus", + G_CALLBACK(content_pane_focus), self, 0); + } +@@ -2397,7 +2401,7 @@ + (selection, "changed", + G_CALLBACK (hildon_file_selection_content_pane_selection_changed), + self, 0); +- ++#ifdef USE_MAEMO_GTK + gtk_widget_tap_and_hold_setup(GTK_WIDGET(tree), NULL, NULL, + GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); + g_signal_connect_object (tree, "tap-and-hold-query", +@@ -2406,7 +2410,7 @@ + g_signal_connect_object(tree, "tap-and-hold", + G_CALLBACK + (hildon_file_selection_content_pane_context), self, 0); +- ++#endif + g_signal_connect_object(tree, "key-press-event", + G_CALLBACK(hildon_file_selection_on_content_pane_key), + self, 0); +@@ -2492,7 +2496,7 @@ + g_signal_connect_object(selection, "changed", + G_CALLBACK(hildon_file_selection_selection_changed), + self, 0); +- ++#ifdef USE_MAEMO_GTK + gtk_widget_tap_and_hold_setup(GTK_WIDGET(self->priv->dir_tree), NULL, + NULL, GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); + g_signal_connect_object (self->priv->dir_tree, "tap-and-hold-query", +@@ -2502,7 +2506,7 @@ + G_CALLBACK + (hildon_file_selection_navigation_pane_context), + self, 0); +- ++#endif + g_signal_connect_object(self->priv->dir_tree, "key-press-event", + G_CALLBACK + (hildon_file_selection_on_navigation_pane_key), self, 0); diff --git a/packages/maemo4/libhildonfm_1.9.41.bb b/packages/maemo4/libhildonfm_1.9.41.bb deleted file mode 100644 index 777b2a456b..0000000000 --- a/packages/maemo4/libhildonfm_1.9.41.bb +++ /dev/null @@ -1,30 +0,0 @@ -LICENSE = "LGPL" -DESCRIPTION = "Nokia hildon filemanager library" - -DEPENDS = "hildon-thumbnail mce-dev libhildonmime osso-gwconnect hildon-libs osso-thumbnail" - -PR = "r1" - -SRC_URI = "http://repository.maemo.org/pool/sardine/main/source/libh/libhildonfm/libhildonfm_${PV}.tar.gz \ - file://hildonfm-ifdef-maemogtk.diff;patch=1 \ - " - -inherit autotools pkgconfig lib_package - -S = "${WORKDIR}/1_${PV}" - -do_configure_prepend() { - # remove Werror from OSSO_CFLAGS - sed -i s:-Werror::g configure.ac - touch gtk-doc.make -} - - -PARALLEL_MAKE = "" - -do_stage() { - autotools_stage_all - ln -sf ${STAGING_INCDIR}/hildon-fm-2/hildon/* ${STAGING_INCDIR}/hildon-widgets/ -} - - diff --git a/packages/maemo4/libhildonfm_1.9.46.bb b/packages/maemo4/libhildonfm_1.9.46.bb new file mode 100644 index 0000000000..67816fb496 --- /dev/null +++ b/packages/maemo4/libhildonfm_1.9.46.bb @@ -0,0 +1,9 @@ +require libhildonfm.inc + +PR = "r1" + +SRC_URI = "\ + http://repository.maemo.org/pool/maemo4.0/free/source/libh/${PN}/${PN}_${PV}.tar.gz \ + file://libhildonfm-gtkmaemo-ifdef.patch;patch=1 \ + " + diff --git a/packages/maemo4/libhildonhelp.inc b/packages/maemo4/libhildonhelp.inc new file mode 100644 index 0000000000..6ce0f0ac6f --- /dev/null +++ b/packages/maemo4/libhildonhelp.inc @@ -0,0 +1,17 @@ +LICENSE = "LGPL" +DESCRIPTION = "Nokia hildon help library" + +DEPENDS = "gtk+ intltool-native libxml2 gtkhtml-3.8 libosso libhildon" + +inherit autotools pkgconfig lib_package + +do_configure_prepend() { + # remove Werror from OSSO_CFLAGS + sed -i s:-Werror::g configure.ac +} + +do_stage() { + autotools_stage_all +} + + diff --git a/packages/maemo4/libhildonhelp_1.9.1.bb b/packages/maemo4/libhildonhelp_1.9.1.bb deleted file mode 100644 index 43d4c15d2e..0000000000 --- a/packages/maemo4/libhildonhelp_1.9.1.bb +++ /dev/null @@ -1,23 +0,0 @@ -LICENSE = "LGPL" -DESCRIPTION = "Nokia hildon help library" - -DEPENDS = "libart-lgpl libpng jpeg libxml2 gtkhtml-3.8 libosso" - -PR = "r0" - -SRC_URI = "http://repository.maemo.org/pool/sardine-experimental/main.disabled/source/libh/libhildonhelp/libhildonhelp_${PV}-1.tar.gz" - -inherit autotools pkgconfig lib_package - -S = "${WORKDIR}/${PV}-1" - -do_configure_prepend() { - # remove Werror from OSSO_CFLAGS - sed -i s:-Werror::g configure.ac -} - -do_stage() { - autotools_stage_all -} - - diff --git a/packages/maemo4/libhildonhelp_1.9.6.bb b/packages/maemo4/libhildonhelp_1.9.6.bb new file mode 100644 index 0000000000..6b6e23d951 --- /dev/null +++ b/packages/maemo4/libhildonhelp_1.9.6.bb @@ -0,0 +1,6 @@ +require libhildonhelp.inc + +PR = "r0" + +SRC_URI = "http://repository.maemo.org/pool/maemo4.0/free/source/libh/${PN}/${PN}_${PV}-1.tar.gz" + diff --git a/packages/maemo4/libhildonmime.inc b/packages/maemo4/libhildonmime.inc new file mode 100644 index 0000000000..12c74a334b --- /dev/null +++ b/packages/maemo4/libhildonmime.inc @@ -0,0 +1,17 @@ +LICENSE = "LGPL" +DESCRIPTION = "Nokia hildon mime library" + +DEPENDS = "libosso gnome-vfs" + +inherit autotools pkgconfig lib_package + +do_configure_prepend() { + # remove Werror from OSSO_CFLAGS + sed -i s:-Werror::g configure.in +} + +do_stage() { + autotools_stage_all +} + + diff --git a/packages/maemo4/libhildonmime_1.10.0.bb b/packages/maemo4/libhildonmime_1.10.0.bb new file mode 100644 index 0000000000..68cdd64413 --- /dev/null +++ b/packages/maemo4/libhildonmime_1.10.0.bb @@ -0,0 +1,7 @@ +require libhildonmime.inc + +DEPENDS += "osso-gnome-vfs2" + +PR = "r0" + +SRC_URI = "http://repository.maemo.org/pool/maemo4.0/free/source/libh/${PN}/${PN}_${PV}-1.tar.gz" diff --git a/packages/maemo4/libhildonmime_1.9.5.bb b/packages/maemo4/libhildonmime_1.9.5.bb index 1e0285b1fb..1a06284314 100644 --- a/packages/maemo4/libhildonmime_1.9.5.bb +++ b/packages/maemo4/libhildonmime_1.9.5.bb @@ -1,23 +1,6 @@ -LICENSE = "LGPL" -DESCRIPTION = "Nokia hildon mime library" - -DEPENDS = "libosso gnome-vfs" +require libhildonmime.inc PR = "r0" SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/universe/libh/libhildonmime/libhildonmime_${PV}-1ubuntu1.tar.gz" -inherit autotools pkgconfig lib_package - -S = "${WORKDIR}/${PN}" - -do_configure_prepend() { - # remove Werror from OSSO_CFLAGS - sed -i s:-Werror::g configure.in -} - -do_stage() { - autotools_stage_all -} - - diff --git a/packages/maemo4/libosso-gsf_1.11.10.4.bb b/packages/maemo4/libosso-gsf_1.11.10.4.bb index 8888ac7780..6adbc0f6e3 100644 --- a/packages/maemo4/libosso-gsf_1.11.10.4.bb +++ b/packages/maemo4/libosso-gsf_1.11.10.4.bb @@ -1,12 +1,13 @@ LICENSE = "GPL" +PR = "r1" + DEPENDS = "glib-2.0 zlib" -SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-1.tar.gz" +SRC_URI = "http://repository.maemo.org/pool/maemo4.0/free/source/libo/${PN}_${PV}-1.tar.gz" inherit autotools pkgconfig - do_configure() { gnu-configize libtoolize --force @@ -14,7 +15,7 @@ do_configure() { } do_stage() { - autotools_stage_all + autotools_stage_all } diff --git a/packages/maemo4/libosso.inc b/packages/maemo4/libosso.inc new file mode 100644 index 0000000000..56437e625f --- /dev/null +++ b/packages/maemo4/libosso.inc @@ -0,0 +1,19 @@ +LICENSE = "LGPL" +DESCRIPTION = "Nokia osso library" + +DEPENDS = "dbus-glib glib-2.0" + +inherit autotools pkgconfig lib_package + +do_configure_prepend() { + # Remove Werror from OSSO_CFLAGS since the source + # contains many implicit (const void *) to (void *) + # conversions. + sed -i s:-Werror::g configure.ac +} + +do_stage() { + autotools_stage_all +} + + diff --git a/packages/maemo4/libosso/.mtn2git_empty b/packages/maemo4/libosso/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/maemo4/libosso/libosso-buildfix.patch b/packages/maemo4/libosso/libosso-buildfix.patch new file mode 100644 index 0000000000..adb0ca6b5f --- /dev/null +++ b/packages/maemo4/libosso/libosso-buildfix.patch @@ -0,0 +1,64 @@ +Index: libosso-2.13/src/osso-hw.c +=================================================================== +--- libosso-2.13.orig/src/osso-hw.c 2008-02-13 12:55:17.000000000 +0100 ++++ libosso-2.13/src/osso-hw.c 2008-02-13 13:02:55.000000000 +0100 +@@ -23,6 +23,9 @@ + * 02110-1301 USA + */ + ++#define _GNU_SOURCE ++#include ++ + #include "osso-internal.h" + #include "osso-hw.h" + #include "osso-mem.h" +@@ -635,7 +638,7 @@ + (*cb)((muali_context_t*)osso, &info, data->user_data); + + if (info.args != NULL) { +- free(info.args); ++ free((void *) info.args); + info.args = NULL; + } + } +@@ -762,7 +765,7 @@ + (*cb)((muali_context_t*)osso, &info, data->user_data); + + if (info.args != NULL) { +- free(info.args); ++ free((void *) info.args); + info.args = NULL; + } + } +Index: libosso-2.13/src/osso-rpc.c +=================================================================== +--- libosso-2.13.orig/src/osso-rpc.c 2008-02-13 13:03:13.000000000 +0100 ++++ libosso-2.13/src/osso-rpc.c 2008-02-13 13:06:05.000000000 +0100 +@@ -997,7 +997,8 @@ + int *serial) + { + int i; +- char buf[20], *p; ++ char buf[20]; ++ const char *p; + + /* get bus type */ + for (i = 0, p = id; *p != ','; ++p, ++i) { +@@ -1101,7 +1102,7 @@ + (*cb)((muali_context_t*)osso, &info, cb_data->user_data); + + if (info.args != NULL) { +- free(info.args); ++ free((void *) info.args); + info.args = NULL; + } + } +@@ -1410,7 +1411,7 @@ + cb_data->message_id = (long)msg_serial; + + cb_data->user_cb = reply_handler; +- cb_data->user_data = user_data; ++ cb_data->user_data = (void *) user_data; + cb_data->match_rule = NULL; + cb_data->event_type = 0; + cb_data->bus_type = bus_type; diff --git a/packages/maemo4/libosso_1.20.bb b/packages/maemo4/libosso_1.20.bb deleted file mode 100644 index d5489c7e95..0000000000 --- a/packages/maemo4/libosso_1.20.bb +++ /dev/null @@ -1,22 +0,0 @@ -LICENSE = "LGPL" -DESCRIPTION = "Nokia osso library" - -DEPENDS = "hildon-1 dbus-glib glib-2.0 outo" - -PR = "r1" - -SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-1.tar.gz" - -inherit autotools pkgconfig lib_package - - -do_configure_prepend() { - # remove Werror from OSSO_CFLAGS - sed -i s:-Werror::g configure.ac -} - -do_stage() { - autotools_stage_all -} - - diff --git a/packages/maemo4/libosso_2.13.bb b/packages/maemo4/libosso_2.13.bb new file mode 100644 index 0000000000..1920e29d3a --- /dev/null +++ b/packages/maemo4/libosso_2.13.bb @@ -0,0 +1,16 @@ +require libosso.inc + +PR = "r0" + +SRC_URI = "\ + http://repository.maemo.org/pool/maemo4.0/free/source/libo/${PN}/${PN}_${PV}-1.1fix.tar.gz \ + file://libosso-buildfix.patch;patch=1 \ + " + +PACKAGES += "${PN}-outo ${PN}-outo-dev ${PN}-outo-dbg ${PN}-outo-bin-dbg ${PN}-outo-bin" + +FILES_${PN}-outo = "${libdir}/outo/lib*.so" +FILES_${PN}-outo-dev = "${libdir}/outo/*.la ${libdir}/outo/*.a" +FILES_${PN}-outo-dbg = "${libdir}/outo/.debug/lib*.so +FILES_${PN}-outo-bin-dbg = "${libdir}/outo/.debug/*bin" +FILES_${PN}-outo-bin = "${libdir}/outo/*bin ${libdir}/outo/mimedummy.doc" diff --git a/packages/maemo4/mce-dev.inc b/packages/maemo4/mce-dev.inc new file mode 100644 index 0000000000..55db0d69da --- /dev/null +++ b/packages/maemo4/mce-dev.inc @@ -0,0 +1,22 @@ +LICENSE = "LGPL" +DESCRIPTION = "Nokia MCE headers" + +inherit pkgconfig + +do_compile() { + # Nothing to compile in this recipe. These are just headers. + : +} + +do_install() { + install -d ${D}${prefix}/include + install -d ${D}${libdir}/pkgconfig + + cp -pPr include/* ${D}${prefix}/include + cp *.pc ${D}${libdir}/pkgconfig/ +} + +do_stage() { + cp -pPr include/* ${STAGING_INCDIR}/ +} + diff --git a/packages/maemo4/mce-dev_1.5.6.bb b/packages/maemo4/mce-dev_1.5.6.bb deleted file mode 100644 index 6168cbe31e..0000000000 --- a/packages/maemo4/mce-dev_1.5.6.bb +++ /dev/null @@ -1,26 +0,0 @@ -LICENSE = "LGPL" -DESCRIPTION = "Nokia MCE headers" - -PR = "r0" - -SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/universe/m/mce-dev/mce-dev_${PV}.tar.gz" - -inherit pkgconfig - -do_compile() { - : -} - - -do_install() { - install -d ${D}${prefix}/include - install -d ${D}${libdir}/pkgconfig - cp -pPr include/* ${D}${prefix}/include - cp *.pc ${D}${libdir}/pkgconfig/ -} - -do_stage() { - cp -pPr include/* ${STAGING_INCDIR}/ -} - - diff --git a/packages/maemo4/mce-dev_1.6.3.bb b/packages/maemo4/mce-dev_1.6.3.bb new file mode 100644 index 0000000000..66e238c109 --- /dev/null +++ b/packages/maemo4/mce-dev_1.6.3.bb @@ -0,0 +1,7 @@ +require mce-dev.inc + +PR = "r0" + +SRC_URI = "http://repository.maemo.org/pool/maemo4.0/free/source/m/mce-dev/mce-dev_${PV}.tar.gz" + + diff --git a/packages/maemo4/osso-gnome-vfs2/.mtn2git_empty b/packages/maemo4/osso-gnome-vfs2/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/maemo4/osso-gnome-vfs2/gnome-vfs-no-kerberos.patch b/packages/maemo4/osso-gnome-vfs2/gnome-vfs-no-kerberos.patch new file mode 100644 index 0000000000..e25ecdd66f --- /dev/null +++ b/packages/maemo4/osso-gnome-vfs2/gnome-vfs-no-kerberos.patch @@ -0,0 +1,51 @@ +removes kerberos completely to avoid conflicts with installed kerberos +--- configure.in.orig 2007-01-05 19:42:26.418541610 +0200 ++++ configure.in 2007-01-05 19:42:56.604261797 +0200 +@@ -436,47 +436,6 @@ + ]) + AM_CONDITIONAL(HAVE_CDDA, test $have_cdda = yes) + AC_SUBST(CDDA_LIBS) +- +-dnl GSSAPI +-dnl Check for Kerberos installation +-have_gssapi=no +-AC_PATH_PROG([KRB5_CONFIG], krb5-config, none, $PATH:/usr/kerberos/bin) +- +-if test "x$KRB5_CONFIG" != "xnone"; then +- GSSAPI_LIBS="`${KRB5_CONFIG} --libs gssapi`" +- GSSAPI_CFLAGS="`${KRB5_CONFIG} --cflags gssapi`" +- +- saved_CPPFLAGS="$CPPFLAGS" +- saved_LIBS="$LIBS" +- LIBS="$LIBS $GSSAPI_LIBS" +- CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" +- # MIT and Heimdal put gssapi.h in different places +- AC_CHECK_HEADERS(gssapi/gssapi.h gssapi.h, [ +- AC_CHECK_FUNCS(gss_init_sec_context, [ +- AC_MSG_NOTICE([GSSAPI authentication support enabled]) +- AC_DEFINE(HAVE_GSSAPI, 1, [Define if GSSAPI support is enabled]) +- AC_CHECK_HEADERS(gssapi/gssapi_generic.h) +- have_gssapi=yes +- +- # MIT Kerberos lacks GSS_C_NT_HOSTBASED_SERVICE +- AC_CHECK_DECL([GSS_C_NT_HOSTBASED_SERVICE],, +- [AC_DEFINE([GSS_C_NT_HOSTBASED_SERVICE], gss_nt_service_name, +- [Define if GSS_C_NT_HOSTBASED_SERVICE is not defined otherwise]) +- ], [ +- #ifdef HAVE_GSSAPI_GSSAPI_H +- #include +- #else +- #include +- #endif +- ]) +- ]) +- break +- ]) +- LIBS="$saved_LIBS" +- CPPFLAGS="$saved_CPPFLAGS" +-fi +-AC_SUBST(GSSAPI_LIBS) +-AC_SUBST(GSSAPI_CFLAGS) + + dnl ****************************** + dnl http-method (neon checks) diff --git a/packages/maemo4/osso-gnome-vfs2_2.16.3.bb b/packages/maemo4/osso-gnome-vfs2_2.16.3.bb new file mode 100644 index 0000000000..4d2e9aa94e --- /dev/null +++ b/packages/maemo4/osso-gnome-vfs2_2.16.3.bb @@ -0,0 +1,47 @@ +LICENSE = "GPL" +DEPENDS = "libxml2 gconf gnutls avahi dbus bzip2 gnome-mime-data zlib" +RRECOMMENDS = "gnome-vfs-plugin-file gnome-mime-data shared-mime-info" + +DESCRIPTION = "gnomevfs - osso variant" + +PR = "r0" + +SRC_URI = "\ + http://repository.maemo.org/pool/maemo4.0/free/source/o/${PN}/${PN}_${PV}-1osso31.tar.gz \ + file://gnome-vfs-no-kerberos.patch;patch=1;pnum=0 \ + " + +inherit gnome + +EXTRA_OECONF = " \ + --disable-openssl \ + --enable-gnutls \ + --enable-avahi \ + --with-samba-includes=${STAGING_INCDIR} \ + --enable-more-warnings=no \ + " + +do_configure_prepend() { + # remove Werror from VFS_CFLAGS + sed -i s:-Werror::g configure.in + + touch gtk-doc.make +} + +do_stage() { + autotools_stage_all +} + +PACKAGES_DYNAMIC = "osso-gnome-vfs-plugin-*" + +python populate_packages_prepend () { + print bb.data.getVar('FILES_osso-gnome-vfs', d, 1) + + plugindir = bb.data.expand('${libdir}/gnome-vfs-2.0/modules/', d) + do_split_packages(d, plugindir, '^lib(.*)\.so$', 'osso-gnome-vfs-plugin-%s', 'OSSO GNOME VFS plugin for %s') +} + +FILES_${PN} += "${datadir}/dbus-1" +FILES_${PN}-dbg += " ${libdir}/gnome-vfs-2.0/modules/.debug/lib*.so" +FILES_${PN}-dev += " ${libdir}/gnome-vfs-2.0/include ${libdir}/gnome-vfs-2.0/modules/lib*.a ${libdir}/gnome-vfs-2.0/modules/lib*.la" +FILES_${PN}-doc += " ${datadir}/gtk-doc" diff --git a/packages/maemo4/osso-gwconnect.inc b/packages/maemo4/osso-gwconnect.inc new file mode 100644 index 0000000000..8781b1eb25 --- /dev/null +++ b/packages/maemo4/osso-gwconnect.inc @@ -0,0 +1,17 @@ +LICENSE = "LGPL" +DESCRIPTION = "Nokia osso connection library" + +DEPENDS = "libosso" + +inherit autotools pkgconfig + +do_configure_prepend() { + # remove Werror from OSSO_CFLAGS + sed -i s:-Werror::g configure.ac +} + +do_stage() { + autotools_stage_all +} + + diff --git a/packages/maemo4/osso-gwconnect_1.0.12.bb b/packages/maemo4/osso-gwconnect_1.0.12.bb new file mode 100644 index 0000000000..1a499687f8 --- /dev/null +++ b/packages/maemo4/osso-gwconnect_1.0.12.bb @@ -0,0 +1,8 @@ +require osso-gwconnect.inc + +DEPENDS += "libhildon bluez-libs" + +PR = "r0" + +SRC_URI = "http://repository.maemo.org/pool/maemo4.0/free/source/o/${PN}/${PN}_${PV}.tar.gz" + diff --git a/packages/maemo4/osso-gwconnect_1.0.8.bb b/packages/maemo4/osso-gwconnect_1.0.8.bb deleted file mode 100644 index 66b47ebac2..0000000000 --- a/packages/maemo4/osso-gwconnect_1.0.8.bb +++ /dev/null @@ -1,22 +0,0 @@ -LICENSE = "LGPL" -DESCRIPTION = "Nokia osso connection library" - -DEPENDS = "hildon-1 libosso" - -PR = "r1" - -SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}.tar.gz" - -inherit autotools pkgconfig - - -do_configure_prepend() { - # remove Werror from OSSO_CFLAGS - sed -i s:-Werror::g configure.ac -} - -do_stage() { - autotools_stage_all -} - - diff --git a/packages/maemo4/osso-ic-oss_1.0.4.bb b/packages/maemo4/osso-ic-oss_1.0.4.bb index 4f9b742fb7..04ec84e4e2 100644 --- a/packages/maemo4/osso-ic-oss_1.0.4.bb +++ b/packages/maemo4/osso-ic-oss_1.0.4.bb @@ -1,16 +1,16 @@ LICENSE = "LGPL" DESCRIPTION = "Nokia osso-ic library" -DEPENDS = "dbus-glib glib-2.0 outo libosso" +DEPENDS = "dbus-glib glib-2.0 libosso" -PR = "r0" +PR = "r1" +# No sources for that Maemo revision any more. SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}.tar.gz \ file://dbus-api-update.patch;patch=1 " inherit autotools pkgconfig lib_package - do_configure_prepend() { # remove Werror from OSSO_CFLAGS sed -i s:-Werror::g configure.ac diff --git a/packages/maemo4/osso-thumbnail_0.7.bb b/packages/maemo4/osso-thumbnail_0.7.bb deleted file mode 100644 index d99ee786b5..0000000000 --- a/packages/maemo4/osso-thumbnail_0.7.bb +++ /dev/null @@ -1,22 +0,0 @@ -LICENSE = "LGPL" -DESCRIPTION = "Nokia osso thumbnail library" - -DEPENDS = "gnome-vfs gconf-dbus hildon-1 libosso" - -PR = "r0" - -SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-1.tar.gz" - -inherit autotools pkgconfig lib_package - - -do_configure_prepend() { - # remove Werror from OSSO_CFLAGS - sed -i s:-Werror::g configure.ac -} - -do_stage() { - autotools_stage_all -} - - diff --git a/packages/maemo4/outo_0.1.1.bb b/packages/maemo4/outo_0.1.1.bb deleted file mode 100644 index 7fe0343691..0000000000 --- a/packages/maemo4/outo_0.1.1.bb +++ /dev/null @@ -1,14 +0,0 @@ -DESCRIPTION = "Outo Unit Tester by Otso" -LICENSE = "LGPL" - -SRC_URI = "http://repository.maemo.org/pool/maemo/ossw/source/o/outo/outo_${PV}.orig.tar.gz \ - http://repository.maemo.org/pool/maemo/ossw/source/o/outo/outo_0.1.1-2.diff.gz;patch=1;pnum=1" -S = "${WORKDIR}/outo-0.1.1-20030806.orig" - -inherit pkgconfig autotools - - -do_stage() { - install -d ${STAGING_INCDIR} - install -m 644 include/outo.h ${STAGING_INCDIR} -} -- cgit v1.2.3 From 31f9e326690a3ead1728ab3f3eb9d5a411a5a6ae Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 14 Feb 2008 10:30:56 +0000 Subject: busybox: move run-part.c to files --- packages/busybox/busybox-1.7.2/run_parts.c | 174 ----------------------------- packages/busybox/files/run_parts.c | 174 +++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+), 174 deletions(-) delete mode 100644 packages/busybox/busybox-1.7.2/run_parts.c create mode 100644 packages/busybox/files/run_parts.c diff --git a/packages/busybox/busybox-1.7.2/run_parts.c b/packages/busybox/busybox-1.7.2/run_parts.c deleted file mode 100644 index 56f70c6eea..0000000000 --- a/packages/busybox/busybox-1.7.2/run_parts.c +++ /dev/null @@ -1,174 +0,0 @@ -/* vi: set sw=4 ts=4: */ -/* - * Mini run-parts implementation for busybox - * - * Copyright (C) 2007 Bernhard Fischer - * - * Based on a older version that was in busybox which was 1k big.. - * Copyright (C) 2001 by Emanuele Aina - * - * Based on the Debian run-parts program, version 1.15 - * Copyright (C) 1996 Jeff Noxon , - * Copyright (C) 1996-1999 Guy Maor - * - * - * Licensed under GPL v2 or later, see file LICENSE in this tarball for details. - */ - -/* This is my first attempt to write a program in C (well, this is my first - * attempt to write a program! :-) . */ - -/* This piece of code is heavily based on the original version of run-parts, - * taken from debian-utils. I've only removed the long options and a the - * report mode. As the original run-parts support only long options, I've - * broken compatibility because the BusyBox policy doesn't allow them. - * The supported options are: - * -t test. Print the name of the files to be executed, without - * execute them. - * -a ARG argument. Pass ARG as an argument the program executed. It can - * be repeated to pass multiple arguments. - * -u MASK umask. Set the umask of the program executed to MASK. - */ - -#include - -#include "libbb.h" - -struct globals { - char **names; - int cur; - char *cmd[1]; -}; -#define G (*(struct globals*)&bb_common_bufsiz1) -#define names (G.names) -#define cur (G.cur ) -#define cmd (G.cmd ) - -enum { NUM_CMD = (COMMON_BUFSIZE - sizeof(struct globals)) / sizeof(cmd[0]) }; - -enum { - RUN_PARTS_OPT_a = (1 << 0), - RUN_PARTS_OPT_u = (1 << 1), - RUN_PARTS_OPT_t = (1 << 2), - RUN_PARTS_OPT_l = (1 << 3) * ENABLE_FEATURE_RUN_PARTS_FANCY, -}; - -#if ENABLE_FEATURE_RUN_PARTS_FANCY -#define list_mode (option_mask32 & RUN_PARTS_OPT_l) -#else -#define list_mode 0 -#endif - -/* Is this a valid filename (upper/lower alpha, digits, - * underscores, and hyphens only?) - */ -static bool invalid_name(const char *c) -{ - c = bb_basename(c); - - while (*c && (isalnum(*c) || *c == '_' || *c == '-')) - c++; - - return *c; /* TRUE (!0) if terminating NUL is not reached */ -} - -static int bb_alphasort(const void *p1, const void *p2) -{ - return strcmp(*(char **) p1, *(char **) p2); -} - -static int act(const char *file, struct stat *statbuf, void *args, int depth) -{ - if (depth == 1) - return TRUE; - - if (depth == 2 - && ( !(statbuf->st_mode & (S_IFREG | S_IFLNK)) - || invalid_name(file) - || (!list_mode && access(file, X_OK) != 0)) - ) { - return SKIP; - } - - names = xrealloc(names, (cur + 2) * sizeof(names[0])); - names[cur++] = xstrdup(file); - names[cur] = NULL; - - return TRUE; -} - -#if ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS -static const char runparts_longopts[] ALIGN1 = - "arg\0" Required_argument "a" - "umask\0" Required_argument "u" - "test\0" No_argument "t" -#if ENABLE_FEATURE_RUN_PARTS_FANCY - "list\0" No_argument "l" -//TODO: "reverse\0" No_argument "r" -//TODO: "verbose\0" No_argument "v" -#endif - ; -#endif - -int run_parts_main(int argc, char **argv); -int run_parts_main(int argc, char **argv) -{ - const char *umask_p = "22"; - llist_t *arg_list = NULL; - unsigned n; - int ret; - -#if ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS - applet_long_options = runparts_longopts; -#endif - /* We require exactly one argument: the directory name */ - opt_complementary = "=1:a::"; - getopt32(argv, "a:u:t"USE_FEATURE_RUN_PARTS_FANCY("l"), &arg_list, &umask_p); - - umask(xstrtou_range(umask_p, 8, 0, 07777)); - - n = 1; - while (arg_list && n < NUM_CMD) { - cmd[n] = arg_list->data; - arg_list = arg_list->link; - n++; - } - /* cmd[n] = NULL; - is already zeroed out */ - - /* run-parts has to sort executables by name before running them */ - - recursive_action(argv[optind], - ACTION_RECURSE|ACTION_FOLLOWLINKS, - act, /* file action */ - act, /* dir action */ - NULL, /* user data */ - 1 /* depth */ - ); - - if (!names) - return 0; - - qsort(names, cur, sizeof(char *), bb_alphasort); - - n = 0; - while (1) { - char *name = *names++; - if (!name) - break; - if (option_mask32 & (RUN_PARTS_OPT_t | RUN_PARTS_OPT_l)) { - puts(name); - continue; - } - cmd[0] = name; - ret = wait4pid(spawn(cmd)); - if (ret == 0) - continue; - n = 1; - if (ret < 0) - bb_perror_msg("failed to exec %s", name); - else /* ret > 0 */ - bb_error_msg("%s exited with return code %d", name, ret); - } - - return n; -} diff --git a/packages/busybox/files/run_parts.c b/packages/busybox/files/run_parts.c new file mode 100644 index 0000000000..56f70c6eea --- /dev/null +++ b/packages/busybox/files/run_parts.c @@ -0,0 +1,174 @@ +/* vi: set sw=4 ts=4: */ +/* + * Mini run-parts implementation for busybox + * + * Copyright (C) 2007 Bernhard Fischer + * + * Based on a older version that was in busybox which was 1k big.. + * Copyright (C) 2001 by Emanuele Aina + * + * Based on the Debian run-parts program, version 1.15 + * Copyright (C) 1996 Jeff Noxon , + * Copyright (C) 1996-1999 Guy Maor + * + * + * Licensed under GPL v2 or later, see file LICENSE in this tarball for details. + */ + +/* This is my first attempt to write a program in C (well, this is my first + * attempt to write a program! :-) . */ + +/* This piece of code is heavily based on the original version of run-parts, + * taken from debian-utils. I've only removed the long options and a the + * report mode. As the original run-parts support only long options, I've + * broken compatibility because the BusyBox policy doesn't allow them. + * The supported options are: + * -t test. Print the name of the files to be executed, without + * execute them. + * -a ARG argument. Pass ARG as an argument the program executed. It can + * be repeated to pass multiple arguments. + * -u MASK umask. Set the umask of the program executed to MASK. + */ + +#include + +#include "libbb.h" + +struct globals { + char **names; + int cur; + char *cmd[1]; +}; +#define G (*(struct globals*)&bb_common_bufsiz1) +#define names (G.names) +#define cur (G.cur ) +#define cmd (G.cmd ) + +enum { NUM_CMD = (COMMON_BUFSIZE - sizeof(struct globals)) / sizeof(cmd[0]) }; + +enum { + RUN_PARTS_OPT_a = (1 << 0), + RUN_PARTS_OPT_u = (1 << 1), + RUN_PARTS_OPT_t = (1 << 2), + RUN_PARTS_OPT_l = (1 << 3) * ENABLE_FEATURE_RUN_PARTS_FANCY, +}; + +#if ENABLE_FEATURE_RUN_PARTS_FANCY +#define list_mode (option_mask32 & RUN_PARTS_OPT_l) +#else +#define list_mode 0 +#endif + +/* Is this a valid filename (upper/lower alpha, digits, + * underscores, and hyphens only?) + */ +static bool invalid_name(const char *c) +{ + c = bb_basename(c); + + while (*c && (isalnum(*c) || *c == '_' || *c == '-')) + c++; + + return *c; /* TRUE (!0) if terminating NUL is not reached */ +} + +static int bb_alphasort(const void *p1, const void *p2) +{ + return strcmp(*(char **) p1, *(char **) p2); +} + +static int act(const char *file, struct stat *statbuf, void *args, int depth) +{ + if (depth == 1) + return TRUE; + + if (depth == 2 + && ( !(statbuf->st_mode & (S_IFREG | S_IFLNK)) + || invalid_name(file) + || (!list_mode && access(file, X_OK) != 0)) + ) { + return SKIP; + } + + names = xrealloc(names, (cur + 2) * sizeof(names[0])); + names[cur++] = xstrdup(file); + names[cur] = NULL; + + return TRUE; +} + +#if ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS +static const char runparts_longopts[] ALIGN1 = + "arg\0" Required_argument "a" + "umask\0" Required_argument "u" + "test\0" No_argument "t" +#if ENABLE_FEATURE_RUN_PARTS_FANCY + "list\0" No_argument "l" +//TODO: "reverse\0" No_argument "r" +//TODO: "verbose\0" No_argument "v" +#endif + ; +#endif + +int run_parts_main(int argc, char **argv); +int run_parts_main(int argc, char **argv) +{ + const char *umask_p = "22"; + llist_t *arg_list = NULL; + unsigned n; + int ret; + +#if ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS + applet_long_options = runparts_longopts; +#endif + /* We require exactly one argument: the directory name */ + opt_complementary = "=1:a::"; + getopt32(argv, "a:u:t"USE_FEATURE_RUN_PARTS_FANCY("l"), &arg_list, &umask_p); + + umask(xstrtou_range(umask_p, 8, 0, 07777)); + + n = 1; + while (arg_list && n < NUM_CMD) { + cmd[n] = arg_list->data; + arg_list = arg_list->link; + n++; + } + /* cmd[n] = NULL; - is already zeroed out */ + + /* run-parts has to sort executables by name before running them */ + + recursive_action(argv[optind], + ACTION_RECURSE|ACTION_FOLLOWLINKS, + act, /* file action */ + act, /* dir action */ + NULL, /* user data */ + 1 /* depth */ + ); + + if (!names) + return 0; + + qsort(names, cur, sizeof(char *), bb_alphasort); + + n = 0; + while (1) { + char *name = *names++; + if (!name) + break; + if (option_mask32 & (RUN_PARTS_OPT_t | RUN_PARTS_OPT_l)) { + puts(name); + continue; + } + cmd[0] = name; + ret = wait4pid(spawn(cmd)); + if (ret == 0) + continue; + n = 1; + if (ret < 0) + bb_perror_msg("failed to exec %s", name); + else /* ret > 0 */ + bb_error_msg("%s exited with return code %d", name, ret); + } + + return n; +} -- cgit v1.2.3 From 7241b78577a44dff7b3df3464101c7360eda9a79 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Thu, 14 Feb 2008 10:32:19 +0000 Subject: linux-2.6.24: fix sources for mpc8313e-rdb, refresh defconfig --- packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig | 198 ++++++++++++--------- packages/linux/linux_2.6.24.bb | 18 +- 2 files changed, 117 insertions(+), 99 deletions(-) diff --git a/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig b/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig index 3cc17679c1..9c385704df 100644 --- a/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig +++ b/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.23 -# Mon Dec 17 17:18:08 2007 +# Linux kernel version: 2.6.24 +# Fri Feb 8 08:56:05 2008 # # CONFIG_PPC64 is not set @@ -21,8 +21,13 @@ CONFIG_PPC_STD_MMU_32=y # CONFIG_PPC_MM_SLICES is not set # CONFIG_SMP is not set CONFIG_PPC32=y +CONFIG_WORD_SIZE=32 CONFIG_PPC_MERGE=y CONFIG_MMU=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_HARDIRQS=y CONFIG_IRQ_PER_CPU=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y @@ -62,9 +67,14 @@ CONFIG_SYSVIPC_SYSCTL=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 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 @@ -89,6 +99,7 @@ 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 @@ -121,7 +132,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" # Platform support # # CONFIG_PPC_MULTIPLATFORM is not set -# CONFIG_EMBEDDED6xx is not set # CONFIG_PPC_82xx is not set CONFIG_PPC_83xx=y # CONFIG_PPC_86xx is not set @@ -154,6 +164,10 @@ CONFIG_PPC_MPC831x=y # Kernel options # # CONFIG_HIGHMEM is not set +# 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_HZ_100 is not set CONFIG_HZ_250=y # CONFIG_HZ_300 is not set @@ -174,6 +188,7 @@ CONFIG_FLATMEM_MANUAL=y CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y # CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set CONFIG_SPLIT_PTLOCK_CPUS=4 # CONFIG_RESOURCES_64BIT is not set CONFIG_ZONE_DMA_FLAG=1 @@ -202,10 +217,7 @@ CONFIG_PCI_SYSCALL=y # CONFIG_PCIEPORTBUS is not set CONFIG_ARCH_SUPPORTS_MSI=y # CONFIG_PCI_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# +CONFIG_PCI_LEGACY=y # CONFIG_PCCARD is not set # CONFIG_HOTPLUG_PCI is not set @@ -220,7 +232,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y CONFIG_HIGHMEM_START=0xfe000000 CONFIG_LOWMEM_SIZE=0x30000000 CONFIG_KERNEL_START=0xc0000000 -CONFIG_TASK_SIZE=0x80000000 +CONFIG_TASK_SIZE=0xc0000000 CONFIG_BOOT_LOAD=0x00800000 # @@ -266,6 +278,7 @@ CONFIG_INET_TUNNEL=m CONFIG_INET_XFRM_MODE_TRANSPORT=m CONFIG_INET_XFRM_MODE_TUNNEL=m CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set CONFIG_INET_DIAG=y CONFIG_INET_TCP_DIAG=y # CONFIG_TCP_CONG_ADVANCED is not set @@ -353,6 +366,7 @@ 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=m CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m @@ -448,12 +462,7 @@ CONFIG_IPX=m # CONFIG_LAPB is not set # CONFIG_ECONET is not set CONFIG_WAN_ROUTER=m - -# -# QoS and/or fair queueing -# CONFIG_NET_SCHED=y -CONFIG_NET_SCH_FIFO=y # # Queueing/Scheduling @@ -500,10 +509,12 @@ CONFIG_NET_ACT_GACT=m CONFIG_GACT_PROB=y CONFIG_NET_ACT_MIRRED=m CONFIG_NET_ACT_IPT=m +# CONFIG_NET_ACT_NAT is not set CONFIG_NET_ACT_PEDIT=m CONFIG_NET_ACT_SIMP=m # CONFIG_NET_CLS_POLICE is not set CONFIG_NET_CLS_IND=y +CONFIG_NET_SCH_FIFO=y # # Network testing @@ -527,9 +538,11 @@ CONFIG_BT_HIDP=m # CONFIG_BT_HCIUSB=m CONFIG_BT_HCIUSB_SCO=y +# 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 @@ -541,8 +554,10 @@ CONFIG_FIB_RULES=y # Wireless # CONFIG_CFG80211=y +CONFIG_NL80211=y CONFIG_WIRELESS_EXT=y CONFIG_MAC80211=m +CONFIG_MAC80211_RCSIMPLE=y # CONFIG_MAC80211_LEDS is not set # CONFIG_MAC80211_DEBUG is not set CONFIG_IEEE80211=m @@ -554,6 +569,7 @@ CONFIG_IEEE80211_SOFTMAC=m # CONFIG_IEEE80211_SOFTMAC_DEBUG is not set CONFIG_RFKILL=m CONFIG_RFKILL_INPUT=m +CONFIG_RFKILL_LEDS=y # CONFIG_NET_9P is not set # @@ -563,6 +579,7 @@ CONFIG_RFKILL_INPUT=m # # Generic Driver Options # +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=m @@ -586,6 +603,7 @@ CONFIG_MTD_BLOCK=y # CONFIG_INFTL is not set # CONFIG_RFD_FTL is not set # CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set # # RAM/ROM/Flash chip drivers @@ -621,6 +639,7 @@ CONFIG_MTD_PHYSMAP_START=0xfe000000 CONFIG_MTD_PHYSMAP_LEN=0x0800000 CONFIG_MTD_PHYSMAP_BANKWIDTH=2 # CONFIG_MTD_PHYSMAP_OF is not set +# CONFIG_MTD_INTEL_VR_NOR is not set # CONFIG_MTD_PLATRAM is not set # @@ -647,9 +666,10 @@ CONFIG_MTD_NAND=y CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_DISKONCHIP is not set # CONFIG_MTD_NAND_CAFE is not set -CONFIG_MTD_NAND_FSL_ELBC=y # CONFIG_MTD_NAND_NANDSIM is not set # CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +CONFIG_MTD_NAND_FSL_ELBC=y # CONFIG_MTD_ONENAND is not set # @@ -719,6 +739,7 @@ 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 @@ -730,6 +751,7 @@ CONFIG_SCSI_LOWLEVEL=y # 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 @@ -756,14 +778,7 @@ CONFIG_SCSI_LOWLEVEL=y # CONFIG_SCSI_SRP is not set # CONFIG_ATA is not set # CONFIG_MD is not set - -# -# Fusion MPT device support -# # CONFIG_FUSION is not set -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_FC is not set -# CONFIG_FUSION_SAS is not set # # IEEE 1394 (FireWire) support @@ -780,6 +795,7 @@ CONFIG_NETDEVICES=y # CONFIG_MACVLAN is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set +# CONFIG_VETH is not set # CONFIG_ARCNET is not set CONFIG_PHYLIB=y @@ -796,6 +812,7 @@ CONFIG_CICADA_PHY=y # CONFIG_BROADCOM_PHY is not set # CONFIG_ICPLUS_PHY is not set # CONFIG_FIXED_PHY is not set +# CONFIG_MDIO_BITBANG is not set CONFIG_NET_ETHERNET=y CONFIG_MII=y # CONFIG_HAPPYMEAL is not set @@ -804,13 +821,16 @@ CONFIG_MII=y # CONFIG_NET_VENDOR_3COM 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=y # CONFIG_PCNET32 is not set # CONFIG_AMD8111_ETH is not set # CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_B44 is not set # CONFIG_FORCEDETH is not set -# CONFIG_DGRS is not set # CONFIG_EEPRO100 is not set CONFIG_E100=y # CONFIG_FEALNX is not set @@ -828,6 +848,8 @@ CONFIG_NETDEV_1000=y # CONFIG_ACENIC is not set # CONFIG_DL2K is not set # CONFIG_E1000 is not set +# CONFIG_E1000E is not set +# CONFIG_IP1000 is not set # CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -846,11 +868,14 @@ CONFIG_GFAR_NAPI=y 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 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 # @@ -869,6 +894,7 @@ CONFIG_IPW2200_QOS=y # CONFIG_IPW2200_DEBUG is not set CONFIG_LIBERTAS=m CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_SDIO is not set # CONFIG_LIBERTAS_DEBUG is not set CONFIG_AIRO=m CONFIG_HERMES=m @@ -881,6 +907,9 @@ CONFIG_PCI_ATMEL=m CONFIG_PRISM54=m CONFIG_USB_ZD1201=m CONFIG_RTL8187=m +# CONFIG_ADM8211 is not set +# CONFIG_P54_COMMON is not set +# CONFIG_IWLWIFI is not set CONFIG_HOSTAP=m CONFIG_HOSTAP_FIRMWARE=y CONFIG_HOSTAP_FIRMWARE_NVRAM=y @@ -893,8 +922,11 @@ CONFIG_BCM43XX_PIO=y CONFIG_BCM43XX_DMA_AND_PIO_MODE=y # CONFIG_BCM43XX_DMA_MODE is not set # CONFIG_BCM43XX_PIO_MODE is not set +# CONFIG_B43 is not set +# CONFIG_B43LEGACY is not set CONFIG_ZD1211RW=m # CONFIG_ZD1211RW_DEBUG is not set +# CONFIG_RT2X00 is not set # # USB Network Adapters @@ -903,7 +935,6 @@ CONFIG_ZD1211RW=m # CONFIG_USB_KAWETH is not set # CONFIG_USB_PEGASUS is not set # CONFIG_USB_RTL8150 is not set -# CONFIG_USB_USBNET_MII is not set # CONFIG_USB_USBNET is not set # CONFIG_WAN is not set CONFIG_ATM_DRIVERS=y @@ -1051,7 +1082,6 @@ CONFIG_INPUT=y # # CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set # CONFIG_INPUT_EVDEV is not set # CONFIG_INPUT_EVBUG is not set @@ -1099,32 +1129,11 @@ CONFIG_UNIX98_PTYS=y CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_IPMI_HANDLER is not set -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_83xx_WDT=y - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set CONFIG_HW_RANDOM=y # CONFIG_NVRAM is not set # CONFIG_GEN_RTC is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set # CONFIG_RAW_DRIVER is not set # CONFIG_TCG_TPM is not set CONFIG_DEVPORT=y @@ -1207,8 +1216,6 @@ CONFIG_SPI_TLE62X0=m # CONFIG_POWER_SUPPLY is not set CONFIG_HWMON=y # CONFIG_HWMON_VID is not set -# CONFIG_SENSORS_ABITUGURU is not set -# CONFIG_SENSORS_ABITUGURU3 is not set # CONFIG_SENSORS_AD7418 is not set # CONFIG_SENSORS_ADM1021 is not set # CONFIG_SENSORS_ADM1025 is not set @@ -1216,12 +1223,13 @@ CONFIG_HWMON=y # CONFIG_SENSORS_ADM1029 is not set # CONFIG_SENSORS_ADM1031 is not set # CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ADT7470 is not set # CONFIG_SENSORS_ATXP1 is not set # CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_I5K_AMB is not set # CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_FSCHER is not set -# CONFIG_SENSORS_FSCPOS is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set # CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_GL520SM is not set # CONFIG_SENSORS_IT87 is not set @@ -1258,6 +1266,31 @@ CONFIG_SENSORS_LM75=m # 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_83xx_WDT=y + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set # # Multifunction device drivers @@ -1275,16 +1308,17 @@ CONFIG_DAB=y # # Graphics support # +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +# CONFIG_FB is not set # CONFIG_BACKLIGHT_LCD_SUPPORT is not set # # Display device support # # CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -CONFIG_VIDEO_OUTPUT_CONTROL=m -# CONFIG_FB is not set -# CONFIG_FB_IBM_GXT4500 is not set # # Sound @@ -1387,6 +1421,10 @@ CONFIG_SND_VERBOSE_PROCFS=y # ALSA PowerPC devices # +# +# SPI devices +# + # # USB devices # @@ -1410,6 +1448,7 @@ CONFIG_SND_USB_AUDIO=m CONFIG_HID_SUPPORT=y CONFIG_HID=y # CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set # # USB Input Devices @@ -1474,6 +1513,7 @@ 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 @@ -1535,6 +1575,7 @@ CONFIG_USB_GADGET=y # CONFIG_USB_GADGET_DEBUG_FILES is not set CONFIG_USB_GADGET_SELECTED=y # CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set # CONFIG_USB_GADGET_FSL_USB2 is not set CONFIG_USB_GADGET_NET2280=y CONFIG_USB_NET2280=y @@ -1563,6 +1604,7 @@ CONFIG_MMC=m # CONFIG_MMC_BLOCK=m CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set # # MMC/SD Host Controller Drivers @@ -1570,6 +1612,7 @@ CONFIG_MMC_BLOCK_BOUNCE=y # CONFIG_MMC_SDHCI is not set # CONFIG_MMC_WBSD is not set # CONFIG_MMC_TIFM_SD is not set +CONFIG_MMC_SPI=m CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y @@ -1584,7 +1627,6 @@ CONFIG_LEDS_MPC8313E_RDB=y CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=m CONFIG_LEDS_TRIGGER_HEARTBEAT=m -CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=m # CONFIG_INFINIBAND is not set # CONFIG_EDAC is not set CONFIG_RTC_LIB=y @@ -1606,6 +1648,7 @@ CONFIG_RTC_INTF_DEV_UIE_EMUL=y # I2C RTC drivers # CONFIG_RTC_DRV_DS1307=y +# 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 @@ -1636,21 +1679,6 @@ CONFIG_RTC_DRV_DS1307=y # on-CPU RTC drivers # -# -# DMA Engine support -# -CONFIG_DMA_ENGINE=y - -# -# DMA Clients -# -CONFIG_NET_DMA=y - -# -# DMA Devices -# -CONFIG_INTEL_IOATDMA=y - # # Userspace I/O # @@ -1669,7 +1697,6 @@ CONFIG_EXT3_FS_XATTR=y # CONFIG_EXT3_FS_SECURITY is not set # CONFIG_EXT4DEV_FS is not set CONFIG_JBD=y -# CONFIG_JBD_DEBUG is not set CONFIG_FS_MBCACHE=y # CONFIG_REISERFS_FS is not set # CONFIG_JFS_FS is not set @@ -1715,7 +1742,6 @@ CONFIG_SYSFS=y CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y # CONFIG_CONFIGFS_FS is not set # @@ -1731,10 +1757,12 @@ CONFIG_RAMFS=y CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set # CONFIG_JFFS2_SUMMARY is not set # CONFIG_JFFS2_FS_XATTR is not set # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set CONFIG_JFFS2_RTIME=y # CONFIG_JFFS2_RUBIN is not set CONFIG_CRAMFS=y @@ -1743,10 +1771,7 @@ CONFIG_CRAMFS=y # CONFIG_QNX4FS_FS is not set # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set - -# -# Network File Systems -# +CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V3=y # CONFIG_NFS_V3_ACL is not set @@ -1799,10 +1824,6 @@ CONFIG_LDM_PARTITION=y # CONFIG_KARMA_PARTITION is not set # CONFIG_EFI_PARTITION is not set # CONFIG_SYSV68_PARTITION is not set - -# -# Native Language Support -# CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=y @@ -1843,10 +1864,6 @@ CONFIG_NLS_ISO8859_1=y # CONFIG_NLS_KOI8_R is not set # CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_UTF8 is not set - -# -# Distributed Lock Manager -# # CONFIG_DLM is not set # CONFIG_UCC_SLOW is not set @@ -1870,17 +1887,16 @@ CONFIG_PLIST=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_DMA=y - -# -# Instrumentation Support -# +CONFIG_INSTRUMENTATION=y CONFIG_PROFILING=y CONFIG_OPROFILE=m +# CONFIG_MARKERS is not set # # Kernel hacking # # CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y CONFIG_ENABLE_MUST_CHECK=y # CONFIG_MAGIC_SYSRQ is not set # CONFIG_UNUSED_SYMBOLS is not set @@ -1888,6 +1904,7 @@ CONFIG_ENABLE_MUST_CHECK=y # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_KERNEL is not set # CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_SAMPLES is not set # CONFIG_PPC_EARLY_DEBUG is not set # @@ -1895,6 +1912,7 @@ CONFIG_ENABLE_MUST_CHECK=y # # CONFIG_KEYS is not set # CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set CONFIG_CRYPTO=y CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ABLKCIPHER=m @@ -1916,6 +1934,7 @@ 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=m CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_FCRYPT=m @@ -1930,9 +1949,12 @@ 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 +# CONFIG_PPC_CLOCK is not set diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb index 64a2a58361..18ba900fce 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -7,13 +7,14 @@ DEFAULT_PREFERENCE_mpc8313e-rdb = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" -PR = "r2" +PR = "r3" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ file://defconfig \ " -S = "${WORKDIR}/linux-2.6.24" +# Real-time preemption. This is experimental and requires a different defconfig. +#SRC_URI += " http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.24-rt1.bz2;patch=1" SRC_URI_append_gesbc-9302 = " \ file://0001-gesbc-nand.patch;patch=1 \ @@ -21,16 +22,11 @@ SRC_URI_append_gesbc-9302 = " \ file://0005-ep93xx-reboot.patch;patch=1 \ " -CMDLINE_gesbc-9302 = "console=ttyAM0 root=mtd5 rootfstype=jffs2 mtdparts=GESBC-NAND:64m(app),-(data)" - -# work in progress -#SRC_URI_append_mpc8313e-rdb = "\ -# file://mpc8313e-rdb-leds.patch;patch=1" -# file://mpc831x-nand.patch;patch=1 \ -# file://mpc8313e-rdb-rtc.patch;patch=1 " +SRC_URI_append_mpc8313e-rdb = "\ + file://mpc8313e-rdb-leds.patch;patch=1 \ + file://mpc8313e-rdb-rtc.patch;patch=1" -# real-time preemption patch -SRC_URI_append_mpc8313e-rdb = " http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.24-rt1.bz2;patch=1 file://defconfig-rt " +CMDLINE_gesbc-9302 = "console=ttyAM0 root=mtd5 rootfstype=jffs2 mtdparts=GESBC-NAND:64m(app),-(data)" FILES_kernel-image_gesbc-9302 = "" -- cgit v1.2.3 From 36bf512c395e35b7fa7a870dc6b5fde33dc5fbfb Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 14 Feb 2008 10:36:21 +0000 Subject: busybox 1.9.1: fix build --- .../busybox/busybox-1.9.1/angstrom/.mtn2git_empty | 0 packages/busybox/busybox-1.9.1/angstrom/defconfig | 753 +++++++++++++++++++++ packages/busybox/busybox-1.9.1/udhcpscript.patch | 17 + 3 files changed, 770 insertions(+) create mode 100644 packages/busybox/busybox-1.9.1/angstrom/.mtn2git_empty create mode 100644 packages/busybox/busybox-1.9.1/angstrom/defconfig create mode 100644 packages/busybox/busybox-1.9.1/udhcpscript.patch diff --git a/packages/busybox/busybox-1.9.1/angstrom/.mtn2git_empty b/packages/busybox/busybox-1.9.1/angstrom/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/busybox/busybox-1.9.1/angstrom/defconfig b/packages/busybox/busybox-1.9.1/angstrom/defconfig new file mode 100644 index 0000000000..6cf2eb19ee --- /dev/null +++ b/packages/busybox/busybox-1.9.1/angstrom/defconfig @@ -0,0 +1,753 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.7.2 +# Wed Feb 13 13:31:37 2008 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Busybox Settings +# + +# +# General Configuration +# +# CONFIG_NITPICK is not set +# CONFIG_DESKTOP is not set +# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_SHOW_USAGE=y +# CONFIG_FEATURE_VERBOSE_USAGE is not set +CONFIG_FEATURE_COMPRESS_USAGE=y +# CONFIG_FEATURE_INSTALLER is not set +CONFIG_LOCALE_SUPPORT=y +CONFIG_GETOPT_LONG=y +CONFIG_FEATURE_DEVPTS=y +# CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_PIDFILE=y +CONFIG_FEATURE_SUID=y +CONFIG_FEATURE_SUID_CONFIG=y +CONFIG_FEATURE_SUID_CONFIG_QUIET=y +# CONFIG_SELINUX is not set +# CONFIG_FEATURE_PREFER_APPLETS is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +CONFIG_FEATURE_SYSLOG=y +CONFIG_FEATURE_HAVE_RPC=y + +# +# Build Options +# +# CONFIG_STATIC is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_LFS=y +CONFIG_BUILD_AT_ONCE=y + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_WERROR is not set +CONFIG_NO_DEBUG_LIB=y +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set +# CONFIG_INCLUDE_SUSv2 is not set + +# +# Installation Options +# +# CONFIG_INSTALL_NO_USR is not set +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +CONFIG_PREFIX="./_install" + +# +# Busybox Library Tuning +# +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SIZE_VS_SPEED=2 +CONFIG_FEATURE_FAST_TOP=y +# CONFIG_FEATURE_ETC_NETWORKS is not set +CONFIG_FEATURE_EDITING=y +CONFIG_FEATURE_EDITING_MAX_LEN=1024 +# CONFIG_FEATURE_EDITING_FANCY_KEYS is not set +# CONFIG_FEATURE_EDITING_VI is not set +CONFIG_FEATURE_EDITING_HISTORY=15 +CONFIG_FEATURE_EDITING_SAVEHISTORY=y +CONFIG_FEATURE_TAB_COMPLETION=y +CONFIG_FEATURE_USERNAME_COMPLETION=y +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y + +# +# Applets +# + +# +# Archival Utilities +# +CONFIG_AR=y +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +CONFIG_BUNZIP2=y +CONFIG_CPIO=y +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set +CONFIG_GUNZIP=y +# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set +CONFIG_GZIP=y +# CONFIG_RPM2CPIO is not set +# CONFIG_RPM is not set +# CONFIG_FEATURE_RPM_BZ2 is not set +CONFIG_TAR=y +CONFIG_FEATURE_TAR_CREATE=y +CONFIG_FEATURE_TAR_BZIP2=y +# CONFIG_FEATURE_TAR_LZMA is not set +CONFIG_FEATURE_TAR_FROM=y +CONFIG_FEATURE_TAR_GZIP=y +# CONFIG_FEATURE_TAR_COMPRESS is not set +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set +# CONFIG_UNCOMPRESS is not set +# CONFIG_UNLZMA is not set +# CONFIG_FEATURE_LZMA_FAST is not set +CONFIG_UNZIP=y + +# +# Common options for cpio and tar +# +# CONFIG_FEATURE_UNARCHIVE_TAPE is not set +# CONFIG_FEATURE_DEB_TAR_GZ is not set +# CONFIG_FEATURE_DEB_TAR_BZ2 is not set +# CONFIG_FEATURE_DEB_TAR_LZMA is not set + +# +# Coreutils +# +CONFIG_BASENAME=y +# CONFIG_CAL is not set +CONFIG_CAT=y +# CONFIG_CATV is not set +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +CONFIG_CHROOT=y +# CONFIG_CKSUM is not set +# CONFIG_COMM is not set +CONFIG_CP=y +CONFIG_CUT=y +CONFIG_DATE=y +# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_IBS_OBS is not set +CONFIG_DF=y +CONFIG_DIRNAME=y +# CONFIG_DOS2UNIX is not set +# CONFIG_UNIX2DOS is not set +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +CONFIG_FEATURE_ENV_LONG_OPTIONS=y +# CONFIG_EXPAND is not set +# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set +CONFIG_EXPR=y +# CONFIG_EXPR_MATH_SUPPORT_64 is not set +CONFIG_FALSE=y +# CONFIG_FOLD is not set +CONFIG_HEAD=y +# CONFIG_FEATURE_FANCY_HEAD is not set +# CONFIG_HOSTID is not set +CONFIG_ID=y +# CONFIG_INSTALL is not set +# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set +# CONFIG_LENGTH is not set +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set +CONFIG_MD5SUM=y +CONFIG_MKDIR=y +CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +CONFIG_MV=y +# CONFIG_FEATURE_MV_LONG_OPTIONS is not set +# CONFIG_NICE is not set +CONFIG_NOHUP=y +CONFIG_OD=y +# CONFIG_PRINTENV is not set +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +# CONFIG_SHA1SUM is not set +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_SPLIT is not set +# CONFIG_FEATURE_SPLIT_FANCY is not set +# CONFIG_STAT is not set +# CONFIG_FEATURE_STAT_FORMAT is not set +CONFIG_STTY=y +# CONFIG_SUM is not set +CONFIG_SYNC=y +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set +CONFIG_TEST=y +# CONFIG_FEATURE_TEST_64 is not set +CONFIG_TOUCH=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +# CONFIG_FEATURE_TR_EQUIV is not set +CONFIG_TRUE=y +CONFIG_TTY=y +CONFIG_UNAME=y +# CONFIG_UNEXPAND is not set +# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set +CONFIG_UNIQ=y +CONFIG_USLEEP=y +# CONFIG_UUDECODE is not set +# CONFIG_UUENCODE is not set +CONFIG_WC=y +# CONFIG_FEATURE_WC_LARGE is not set +CONFIG_WHO=y +CONFIG_WHOAMI=y +CONFIG_YES=y + +# +# Common options for cp and mv +# +# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set + +# +# Common options for ls, more and telnet +# +CONFIG_FEATURE_AUTOWIDTH=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y + +# +# Common options for md5sum, sha1sum +# +CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y + +# +# Console Utilities +# +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y +CONFIG_LOADFONT=y +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +# CONFIG_RESIZE is not set +# CONFIG_FEATURE_RESIZE_PRINT is not set +CONFIG_SETCONSOLE=y +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +# CONFIG_SETKEYCODES is not set +# CONFIG_SETLOGCONS is not set + +# +# Debian Utilities +# +CONFIG_MKTEMP=y +# CONFIG_PIPE_PROGRESS is not set +CONFIG_RUN_PARTS=y +# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +# CONFIG_FEATURE_RUN_PARTS_FANCY is not set +CONFIG_START_STOP_DAEMON=y +CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y +CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y +CONFIG_WHICH=y + +# +# Editors +# +CONFIG_AWK=y +CONFIG_FEATURE_AWK_MATH=y +# CONFIG_CMP is not set +CONFIG_DIFF=y +CONFIG_FEATURE_DIFF_BINARY=y +CONFIG_FEATURE_DIFF_DIR=y +# CONFIG_FEATURE_DIFF_MINIMAL is not set +# CONFIG_ED is not set +CONFIG_PATCH=y +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_MAX_LEN=1024 +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +CONFIG_FEATURE_VI_USE_SIGNALS=y +# CONFIG_FEATURE_VI_DOT_CMD is not set +# CONFIG_FEATURE_VI_READONLY is not set +# CONFIG_FEATURE_VI_SETOPTS is not set +# CONFIG_FEATURE_VI_SET is not set +CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y +CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_XDEV=y +CONFIG_FEATURE_FIND_MAXDEPTH=y +CONFIG_FEATURE_FIND_NEWER=y +# CONFIG_FEATURE_FIND_INUM is not set +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_FEATURE_FIND_USER=y +CONFIG_FEATURE_FIND_GROUP=y +CONFIG_FEATURE_FIND_NOT=y +CONFIG_FEATURE_FIND_DEPTH=y +CONFIG_FEATURE_FIND_PAREN=y +CONFIG_FEATURE_FIND_SIZE=y +CONFIG_FEATURE_FIND_PRUNE=y +# CONFIG_FEATURE_FIND_DELETE is not set +CONFIG_FEATURE_FIND_PATH=y +CONFIG_FEATURE_FIND_REGEX=y +# CONFIG_FEATURE_FIND_CONTEXT is not set +CONFIG_GREP=y +CONFIG_FEATURE_GREP_EGREP_ALIAS=y +CONFIG_FEATURE_GREP_FGREP_ALIAS=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set +# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set +# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set + +# +# Init Utilities +# +# CONFIG_INIT is not set +# CONFIG_DEBUG_INIT is not set +# CONFIG_FEATURE_USE_INITTAB is not set +# CONFIG_FEATURE_INIT_SCTTY is not set +# CONFIG_FEATURE_INIT_SYSLOG is not set +# CONFIG_FEATURE_EXTRA_QUIET is not set +# CONFIG_FEATURE_INIT_COREDUMPS is not set +# CONFIG_FEATURE_INITRD is not set +# CONFIG_HALT is not set +# CONFIG_MESG is not set + +# +# Login/Password Management Utilities +# +# CONFIG_FEATURE_SHADOWPASSWDS is not set +# CONFIG_USE_BB_SHADOW is not set +# CONFIG_USE_BB_PWD_GRP is not set +CONFIG_ADDGROUP=y +CONFIG_FEATURE_ADDUSER_TO_GROUP=y +CONFIG_DELGROUP=y +CONFIG_FEATURE_DEL_USER_FROM_GROUP=y +CONFIG_ADDUSER=y +CONFIG_DELUSER=y +CONFIG_GETTY=y +CONFIG_FEATURE_UTMP=y +CONFIG_FEATURE_WTMP=y +CONFIG_LOGIN=y +# CONFIG_PAM is not set +# CONFIG_LOGIN_SCRIPTS is not set +CONFIG_FEATURE_NOLOGIN=y +CONFIG_FEATURE_SECURETTY=y +CONFIG_PASSWD=y +CONFIG_FEATURE_PASSWD_WEAK_CHECK=y +# CONFIG_CRYPTPW is not set +# CONFIG_CHPASSWD is not set +CONFIG_SU=y +CONFIG_FEATURE_SU_SYSLOG=y +CONFIG_FEATURE_SU_CHECKS_SHELLS=y +# CONFIG_SULOGIN is not set +CONFIG_VLOCK=y + +# +# Linux Ext2 FS Progs +# +CONFIG_CHATTR=y +CONFIG_FSCK=y +# CONFIG_LSATTR is not set + +# +# Linux Module Utilities +# +CONFIG_INSMOD=y +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +CONFIG_RMMOD=y +CONFIG_LSMOD=y +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +CONFIG_MODPROBE=y +CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y +CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y + +# +# Options common to multiple modutils +# +CONFIG_FEATURE_CHECK_TAINTED_MODULE=y +# CONFIG_FEATURE_2_4_MODULES is not set +CONFIG_FEATURE_2_6_MODULES=y +# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set + +# +# Linux System Utilities +# +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +CONFIG_FBSET=y +CONFIG_FEATURE_FBSET_FANCY=y +CONFIG_FEATURE_FBSET_READMODE=y +# CONFIG_FDFLUSH is not set +# CONFIG_FDFORMAT is not set +CONFIG_FDISK=y +CONFIG_FDISK_SUPPORT_LARGE_DISKS=y +CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_FDISK_ADVANCED is not set +# CONFIG_FREERAMDISK is not set +CONFIG_FSCK_MINIX=y +CONFIG_MKFS_MINIX=y + +# +# Minix filesystem support +# +CONFIG_FEATURE_MINIX2=y +# CONFIG_GETOPT is not set +CONFIG_HEXDUMP=y +CONFIG_HWCLOCK=y +CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y +CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +CONFIG_LOSETUP=y +# CONFIG_MDEV is not set +# CONFIG_FEATURE_MDEV_CONF is not set +# CONFIG_FEATURE_MDEV_EXEC is not set +# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_V0 is not set +CONFIG_MORE=y +CONFIG_FEATURE_USE_TERMIOS=y +CONFIG_MOUNT=y +CONFIG_FEATURE_MOUNT_NFS=y +# CONFIG_FEATURE_MOUNT_CIFS is not set +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +CONFIG_PIVOT_ROOT=y +CONFIG_RDATE=y +# CONFIG_READPROFILE is not set +# CONFIG_SETARCH is not set +CONFIG_SWAPONOFF=y +CONFIG_SWITCH_ROOT=y +CONFIG_UMOUNT=y +# CONFIG_FEATURE_UMOUNT_ALL is not set + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set + +# +# Miscellaneous Utilities +# +# CONFIG_ADJTIMEX is not set +# CONFIG_BBCONFIG is not set +# CONFIG_CHRT is not set +# CONFIG_CROND is not set +# CONFIG_DEBUG_CROND_OPTION is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +# CONFIG_CRONTAB is not set +CONFIG_DC=y +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +# CONFIG_EJECT is not set +# CONFIG_LAST is not set +CONFIG_LESS=y +CONFIG_FEATURE_LESS_MAXLINES=9999999 +CONFIG_FEATURE_LESS_BRACKETS=y +CONFIG_FEATURE_LESS_FLAGS=y +# CONFIG_FEATURE_LESS_FLAGCS is not set +# CONFIG_FEATURE_LESS_MARKS is not set +# CONFIG_FEATURE_LESS_REGEXP is not set +# CONFIG_HDPARM is not set +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +# CONFIG_MAKEDEVS is not set +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +# CONFIG_FEATURE_MAKEDEVS_TABLE is not set +# CONFIG_MOUNTPOINT is not set +# CONFIG_MT is not set +# CONFIG_RAIDAUTORUN is not set +# CONFIG_READAHEAD is not set +# CONFIG_RUNLEVEL is not set +# CONFIG_RX is not set +CONFIG_STRINGS=y +# CONFIG_SETSID is not set +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +CONFIG_TIME=y +# CONFIG_TTYSIZE is not set +# CONFIG_WATCHDOG is not set + +# +# Networking Utilities +# +CONFIG_FEATURE_IPV6=y +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +# CONFIG_ARP is not set +# CONFIG_ARPING is not set +# CONFIG_DNSD is not set +# CONFIG_ETHER_WAKE is not set +# CONFIG_FAKEIDENTD is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set +# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +# CONFIG_FEATURE_IFCONFIG_SLIP is not set +# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set +CONFIG_FEATURE_IFCONFIG_HW=y +# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +CONFIG_IFUPDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" +# CONFIG_FEATURE_IFUPDOWN_IP is not set +# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set +CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y +CONFIG_FEATURE_IFUPDOWN_MAPPING=y +# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +# CONFIG_INETD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_TUNNEL=y +# CONFIG_FEATURE_IP_RULE is not set +# CONFIG_FEATURE_IP_SHORT_FORMS is not set +# CONFIG_IPADDR is not set +# CONFIG_IPLINK is not set +# CONFIG_IPROUTE is not set +# CONFIG_IPTUNNEL is not set +# CONFIG_IPRULE is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_NAMEIF is not set +CONFIG_NC=y +# CONFIG_NC_SERVER is not set +# CONFIG_NC_EXTRA is not set +CONFIG_NETSTAT=y +# CONFIG_FEATURE_NETSTAT_WIDE is not set +CONFIG_NSLOOKUP=y +CONFIG_PING=y +CONFIG_PING6=y +# CONFIG_PSCAN is not set +CONFIG_FEATURE_FANCY_PING=y +CONFIG_ROUTE=y +# CONFIG_SLATTACH is not set +CONFIG_TELNET=y +# CONFIG_FEATURE_TELNET_TTYPE is not set +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +# CONFIG_TELNETD is not set +# CONFIG_FEATURE_TELNETD_STANDALONE is not set +CONFIG_TFTP=y +CONFIG_FEATURE_TFTP_GET=y +CONFIG_FEATURE_TFTP_PUT=y +# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set +# CONFIG_DEBUG_TFTP is not set +CONFIG_TRACEROUTE=y +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +CONFIG_APP_UDHCPD=y +# CONFIG_APP_DHCPRELAY is not set +CONFIG_APP_DUMPLEASES=y +# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set +CONFIG_APP_UDHCPC=y +# CONFIG_FEATURE_UDHCP_DEBUG is not set +# CONFIG_FEATURE_RFC3397 is not set +# CONFIG_VCONFIG is not set +CONFIG_WGET=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_LONG_OPTIONS=y +# CONFIG_ZCIP is not set + +# +# Process Utilities +# +CONFIG_FREE=y +CONFIG_FUSER=y +CONFIG_KILL=y +CONFIG_KILLALL=y +# CONFIG_KILLALL5 is not set +# CONFIG_NMETER is not set +CONFIG_PIDOF=y +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set +CONFIG_PS=y +CONFIG_FEATURE_PS_WIDE=y +CONFIG_RENICE=y +CONFIG_BB_SYSCTL=y +CONFIG_TOP=y +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +# CONFIG_FEATURE_TOP_DECIMALS is not set +CONFIG_UPTIME=y +CONFIG_WATCH=y + +# +# Shells +# +CONFIG_FEATURE_SH_IS_ASH=y +# CONFIG_FEATURE_SH_IS_HUSH is not set +# CONFIG_FEATURE_SH_IS_LASH is not set +# CONFIG_FEATURE_SH_IS_MSH is not set +# CONFIG_FEATURE_SH_IS_NONE is not set +CONFIG_ASH=y + +# +# Ash Shell Options +# +CONFIG_ASH_JOB_CONTROL=y +CONFIG_ASH_READ_NCHARS=y +CONFIG_ASH_READ_TIMEOUT=y +CONFIG_ASH_ALIAS=y +CONFIG_ASH_MATH_SUPPORT=y +# CONFIG_ASH_MATH_SUPPORT_64 is not set +CONFIG_ASH_GETOPTS=y +# CONFIG_ASH_BUILTIN_ECHO is not set +CONFIG_ASH_BUILTIN_TEST=y +# CONFIG_ASH_CMDCMD is not set +# CONFIG_ASH_MAIL is not set +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +# CONFIG_ASH_RANDOM_SUPPORT is not set +CONFIG_ASH_EXPAND_PRMT=y +# CONFIG_HUSH is not set +# CONFIG_HUSH_HELP is not set +# CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_JOB is not set +# CONFIG_HUSH_TICK is not set +# CONFIG_HUSH_IF is not set +# CONFIG_HUSH_LOOPS is not set +# CONFIG_LASH is not set +# CONFIG_MSH is not set + +# +# Bourne Shell Options +# +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE is not set +# CONFIG_CTTYHACK is not set + +# +# System Logging Utilities +# +CONFIG_SYSLOGD=y +CONFIG_FEATURE_ROTATE_LOGFILE=y +CONFIG_FEATURE_REMOTE_LOG=y +CONFIG_FEATURE_IPC_SYSLOG=y +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 +CONFIG_LOGREAD=y +CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y +CONFIG_KLOGD=y +CONFIG_LOGGER=y + +# +# Runit Utilities +# +# CONFIG_RUNSV is not set +# CONFIG_RUNSVDIR is not set +# CONFIG_SV is not set +# CONFIG_SVLOGD is not set +# CONFIG_CHPST is not set +# CONFIG_SETUIDGID is not set +# CONFIG_ENVUIDGID is not set +# CONFIG_ENVDIR is not set +# CONFIG_SOFTLIMIT is not set +# CONFIG_CHCON is not set +# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set +# CONFIG_GETENFORCE is not set +# CONFIG_GETSEBOOL is not set +# CONFIG_LOAD_POLICY is not set +# CONFIG_MATCHPATHCON is not set +# CONFIG_RESTORECON is not set +# CONFIG_RUNCON is not set +# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set +# CONFIG_SELINUXENABLED is not set +# CONFIG_SETENFORCE is not set +# CONFIG_SETFILES is not set +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set + +# +# ipsvd utilities +# +# CONFIG_TCPSVD is not set +# CONFIG_UDPSVD is not set diff --git a/packages/busybox/busybox-1.9.1/udhcpscript.patch b/packages/busybox/busybox-1.9.1/udhcpscript.patch new file mode 100644 index 0000000000..fc21d440cd --- /dev/null +++ b/packages/busybox/busybox-1.9.1/udhcpscript.patch @@ -0,0 +1,17 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- busybox-1.00-rc3/examples/udhcp/simple.script~udhcpscript ++++ busybox-1.00-rc3/examples/udhcp/simple.script +@@ -17,8 +17,7 @@ + /sbin/ifconfig $interface $ip $BROADCAST $NETMASK + + if [ -n "$router" ] ; then +- echo "deleting routers" +- while route del default gw 0.0.0.0 dev $interface ; do ++ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do + : + done + -- cgit v1.2.3 From bf10ce1f71db27c63a75e290c3c391bf221a70f6 Mon Sep 17 00:00:00 2001 From: araimondi Date: Thu, 14 Feb 2008 14:07:05 +0000 Subject: initscripts: show banner when console is on serial - close #3767 --- packages/initscripts/initscripts-1.0/banner | 2 ++ packages/initscripts/initscripts_1.0.bb | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/initscripts/initscripts-1.0/banner b/packages/initscripts/initscripts-1.0/banner index 21a01d2846..0349ce1954 100644 --- a/packages/initscripts/initscripts-1.0/banner +++ b/packages/initscripts/initscripts-1.0/banner @@ -8,6 +8,8 @@ if ( > /dev/tty0 ) 2>/dev/null; then vtmaster=/dev/tty0 elif ( > /dev/vc/0 ) 2>/dev/null; then vtmaster=/dev/vc/0 +elif ( > /dev/console ) 2>/dev/null; then + vtmaster=/dev/console else vtmaster=/dev/null fi diff --git a/packages/initscripts/initscripts_1.0.bb b/packages/initscripts/initscripts_1.0.bb index 4433d12318..55998c0a4a 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 = "r104" +PR = "r105" SRC_URI = "file://functions \ file://halt \ -- cgit v1.2.3 From bbc4fdbf7c62b7576f27e553f9e7b25599a5e3a0 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 14 Feb 2008 14:12:23 +0000 Subject: xorg-lib: remove libxcb dependency from libx11. Closes 3372. --- packages/xorg-lib/libx11_1.1.1.bb | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/xorg-lib/libx11_1.1.1.bb b/packages/xorg-lib/libx11_1.1.1.bb index 7ac5b58345..5b1e304d51 100644 --- a/packages/xorg-lib/libx11_1.1.1.bb +++ b/packages/xorg-lib/libx11_1.1.1.bb @@ -1,23 +1,18 @@ require xorg-lib-common.inc PE = "1" -PR = "r4" +PR = "r5" DESCRIPTION = "Base X libs." - DEPENDS += " bigreqsproto xproto xextproto xtrans libxau xcmiscproto \ - libxcb libxdmcp xf86bigfontproto kbproto inputproto" + libxdmcp xf86bigfontproto kbproto inputproto" PROVIDES = "virtual/libx11" XORG_PN = "libX11" -PACKAGES =+ "libx11-xcb" +EXTRA_OECONF += "--without-xcb" SRC_URI += " file://ruutf8.patch;patch=1" -FILES_${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${libdir}/X11/Xcms.txt" -FILES_${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale" -FILES_${PN}-xcb = "${libdir}/libX11-xcb.so.*" - do_compile() { ( unset CC LD CXX CCLD CFLAGS CPPFLAGS LDFLAGS CXXFLAGS @@ -27,3 +22,5 @@ do_compile() { oe_runmake } +FILES_${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${libdir}/X11/Xcms.txt" +FILES_${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale" -- cgit v1.2.3 From b4a7300d0986e51eb2404539b19471d5b25f2a9d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 14 Feb 2008 14:22:47 +0000 Subject: linux-handhelds-2.6 2.6.21-hh20: Add support for passing kexec command line. * Tested to work. * TODO: Add CONFIG_ATAGS_PROC consistently. --- .../linux-handhelds-2.6-2.6.21/h3900/defconfig | 1 + ...-9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a.patch | 144 +++++++++++++++++++++ packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb | 4 +- 3 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-handhelds-2.6-2.6.21/linux-2.6.git-9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a.patch diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig index da93637bd6..d752bc8c37 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig @@ -1434,3 +1434,4 @@ CONFIG_ZLIB_DEFLATE=y CONFIG_PLIST=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y +CONFIG_ATAGS_PROC=y diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/linux-2.6.git-9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a.patch b/packages/linux/linux-handhelds-2.6-2.6.21/linux-2.6.git-9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a.patch new file mode 100644 index 0000000000..f3c27d33a8 --- /dev/null +++ b/packages/linux/linux-handhelds-2.6-2.6.21/linux-2.6.git-9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a.patch @@ -0,0 +1,144 @@ +From: Bill Gatliff +Date: Thu, 31 May 2007 21:02:22 +0000 (+0100) +Subject: [ARM] 4423/1: add ATAGS support +X-Git-Tag: v2.6.23-rc1~1101^2^7~5 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a + +[ARM] 4423/1: add ATAGS support + +Examines the ATAGS pointer (r2) at boot, and interprets +a nonzero value as a reference to an ATAGS structure. A +suitable ATAGS structure replaces the kernel's command line. + +Signed-off-by: Bill Gatliff +Signed-off-by: Russell King +--- + +diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S +index a52da0d..024a9cf 100644 +--- a/arch/arm/kernel/head-common.S ++++ b/arch/arm/kernel/head-common.S +@@ -20,7 +20,8 @@ __switch_data: + .long _end @ r7 + .long processor_id @ r4 + .long __machine_arch_type @ r5 +- .long cr_alignment @ r6 ++ .long __atags_pointer @ r6 ++ .long cr_alignment @ r7 + .long init_thread_union + THREAD_START_SP @ sp + + /* +@@ -29,6 +30,7 @@ __switch_data: + * + * r0 = cp#15 control register + * r1 = machine ID ++ * r2 = atags pointer + * r9 = processor ID + */ + .type __mmap_switched, %function +@@ -47,11 +49,12 @@ __mmap_switched: + strcc fp, [r6],#4 + bcc 1b + +- ldmia r3, {r4, r5, r6, sp} ++ ldmia r3, {r4, r5, r6, r7, sp} + str r9, [r4] @ Save processor ID + str r1, [r5] @ Save machine type ++ str r2, [r6] @ Save atags pointer + bic r4, r0, #CR_A @ Clear 'A' bit +- stmia r6, {r0, r4} @ Save control register values ++ stmia r7, {r0, r4} @ Save control register values + b start_kernel + + /* +@@ -215,3 +218,34 @@ ENTRY(lookup_machine_type) + bl __lookup_machine_type + mov r0, r5 + ldmfd sp!, {r4 - r6, pc} ++ ++/* Determine validity of the r2 atags pointer. The heuristic requires ++ * that the pointer be aligned, in the first 16k of physical RAM and ++ * that the ATAG_CORE marker is first and present. Future revisions ++ * of this function may be more lenient with the physical address and ++ * may also be able to move the ATAGS block if necessary. ++ * ++ * r8 = machinfo ++ * ++ * Returns: ++ * r2 either valid atags pointer, or zero ++ * r5, r6 corrupted ++ */ ++ ++ .type __vet_atags, %function ++__vet_atags: ++ tst r2, #0x3 @ aligned? ++ bne 1f ++ ++ ldr r5, [r2, #0] @ is first tag ATAG_CORE? ++ subs r5, r5, #ATAG_CORE_SIZE ++ bne 1f ++ ldr r5, [r2, #4] ++ ldr r6, =ATAG_CORE ++ cmp r5, r6 ++ bne 1f ++ ++ mov pc, lr @ atag pointer is ok ++ ++1: mov r2, #0 ++ mov pc, lr +diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S +index 41f98b4..7898cbc 100644 +--- a/arch/arm/kernel/head.S ++++ b/arch/arm/kernel/head.S +@@ -29,6 +29,10 @@ + #define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET) + #define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET) + ++#define ATAG_CORE 0x54410001 ++#define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2) ++ ++ + /* + * swapper_pg_dir is the virtual address of the initial page table. + * We place the page tables 16K below KERNEL_RAM_VADDR. Therefore, we must +@@ -61,7 +65,7 @@ + * + * This is normally called from the decompressor code. The requirements + * are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0, +- * r1 = machine nr. ++ * r1 = machine nr, r2 = atags pointer. + * + * This code is mostly position independent, so if you link the kernel at + * 0xc0008000, you call this at __pa(0xc0008000). +@@ -85,6 +89,7 @@ ENTRY(stext) + bl __lookup_machine_type @ r5=machinfo + movs r8, r5 @ invalid machine (r5=0)? + beq __error_a @ yes, error 'a' ++ bl __vet_atags + bl __create_page_tables + + /* +diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c +index 650eac1..5be2e98 100644 +--- a/arch/arm/kernel/setup.c ++++ b/arch/arm/kernel/setup.c +@@ -63,6 +63,8 @@ unsigned int processor_id; + unsigned int __machine_arch_type; + EXPORT_SYMBOL(__machine_arch_type); + ++unsigned int __atags_pointer __initdata; ++ + unsigned int system_rev; + EXPORT_SYMBOL(system_rev); + +@@ -780,7 +782,9 @@ void __init setup_arch(char **cmdline_p) + if (mdesc->soft_reboot) + reboot_setup("s"); + +- if (mdesc->boot_params) ++ if (__atags_pointer) ++ tags = phys_to_virt(__atags_pointer); ++ else if (mdesc->boot_params) + tags = phys_to_virt(mdesc->boot_params); + + /* diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb index ec822284cf..b45d3e0987 100644 --- a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb +++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb @@ -1,7 +1,7 @@ SECTION = "kernel" DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices." LICENSE = "GPL" -PR = "r11" +PR = "r12" DEFAULT_PREFERENCE = "-1" @@ -10,6 +10,8 @@ DEFAULT_PREFERENCE = "-1" FILESPATH = "${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21/${MACHINE}:${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21" SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \ + file://linux-2.6.git-9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a.patch;patch=1 \ + http://www.rpsys.net/openzaurus/patches/archive/export_atags-r0a.patch;patch=1 \ file://defconfig" require linux-handhelds-2.6.inc -- cgit v1.2.3 From 00ea7d5c25c79a4b392bef66efdb6d307b919dbf Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Thu, 14 Feb 2008 14:33:35 +0000 Subject: swt3.4-gtk 3.3+3.4M5: New recipe. swt3.4-gtk-hildon 3.3+3.4M5: New recipe. swt3.4-gtk-hildon: Updated hildonizing patch. - fixed resizing issue - make use of special hildon file dialog --- packages/swt/files/swt-hildon.patch | 159 +++++++++++++++++++++++++--- packages/swt/swt3.4-gtk-hildon_3.3+3.4M3.bb | 4 +- packages/swt/swt3.4-gtk-hildon_3.3+3.4M5.bb | 7 ++ packages/swt/swt3.4-gtk_3.3+3.4M5.bb | 12 +++ 4 files changed, 168 insertions(+), 14 deletions(-) create mode 100644 packages/swt/swt3.4-gtk-hildon_3.3+3.4M5.bb create mode 100644 packages/swt/swt3.4-gtk_3.3+3.4M5.bb diff --git a/packages/swt/files/swt-hildon.patch b/packages/swt/files/swt-hildon.patch index 728dd3070c..5f095e08fc 100644 --- a/packages/swt/files/swt-hildon.patch +++ b/packages/swt/files/swt-hildon.patch @@ -1,15 +1,15 @@ -Index: swt-hildon/swt-source/make_linux.mak +Index: swt/swt-source/make_linux.mak =================================================================== ---- swt-hildon.orig/swt-source/make_linux.mak 2008-01-08 09:35:29.000000000 +0100 -+++ swt-hildon/swt-source/make_linux.mak 2008-01-08 11:35:01.000000000 +0100 +--- swt.orig/swt-source/make_linux.mak 2007-06-20 12:01:22.000000000 +0200 ++++ swt/swt-source/make_linux.mak 2008-02-14 11:32:49.000000000 +0100 @@ -45,8 +45,8 @@ CAIROLIBS = `pkg-config --libs-only-L cairo` -lcairo # Do not use pkg-config to get libs because it includes unnecessary dependencies (i.e. pangoxft-1.0) -GTKCFLAGS = `pkg-config --cflags gtk+-2.0` -GTKLIBS = `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst -+GTKCFLAGS = `pkg-config --cflags gtk+-2.0 hildon-1` -+GTKLIBS = -lhildon-1 `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst ++GTKCFLAGS = `pkg-config --cflags gtk+-2.0 hildon-1 hildon-fm-2` ++GTKLIBS = -lhildon-1 -lhildonfm `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst CDE_LIBS = -L$(CDE_HOME)/lib -R$(CDE_HOME)/lib -lXt -lX11 -lDtSvc @@ -31,10 +31,10 @@ Index: swt-hildon/swt-source/make_linux.mak -fPIC \ ${SWT_PTR_CFLAGS} LIBS = -shared -fPIC -Index: swt-hildon/swt-source/os.c +Index: swt/swt-source/os.c =================================================================== ---- swt-hildon.orig/swt-source/os.c 2008-01-08 09:35:29.000000000 +0100 -+++ swt-hildon/swt-source/os.c 2008-01-08 09:37:00.000000000 +0100 +--- swt.orig/swt-source/os.c 2007-10-30 16:24:28.000000000 +0100 ++++ swt/swt-source/os.c 2008-02-14 09:32:49.000000000 +0100 @@ -17,6 +17,9 @@ #include "os_structs.h" #include "os_stats.h" @@ -80,7 +80,7 @@ Index: swt-hildon/swt-source/os.c OS_NATIVE_EXIT(env, that, _1gtk_1menu_1bar_1new_FUNC); return rc; } -@@ -15464,8 +15479,22 @@ +@@ -15464,8 +15479,23 @@ (JNIEnv *env, jclass that, jint arg0) { jint rc = 0; @@ -95,6 +95,7 @@ Index: swt-hildon/swt-source/os.c + p = hildon_program_get_instance(); + w = hildon_window_new(); + hildon_program_add_window(p, HILDON_WINDOW(w)); ++/* gtk_window_fullscreen(GTK_WINDOW(w));*/ +/* + } + else @@ -104,10 +105,10 @@ Index: swt-hildon/swt-source/os.c OS_NATIVE_EXIT(env, that, _1gtk_1window_1new_FUNC); return rc; } -Index: swt-hildon/swt-source/org/eclipse/swt/widgets/Menu.java +Index: swt/swt-source/org/eclipse/swt/widgets/Menu.java =================================================================== ---- swt-hildon.orig/swt-source/org/eclipse/swt/widgets/Menu.java 2008-01-08 09:34:55.000000000 +0100 -+++ swt-hildon/swt-source/org/eclipse/swt/widgets/Menu.java 2008-01-08 09:36:01.000000000 +0100 +--- swt.orig/swt-source/org/eclipse/swt/widgets/Menu.java 2007-05-31 18:03:50.000000000 +0200 ++++ swt/swt-source/org/eclipse/swt/widgets/Menu.java 2008-02-14 09:05:04.000000000 +0100 @@ -259,9 +259,17 @@ if ((style & SWT.BAR) != 0) { handle = OS.gtk_menu_bar_new (); @@ -126,3 +127,137 @@ Index: swt-hildon/swt-source/org/eclipse/swt/widgets/Menu.java } else { handle = OS.gtk_menu_new (); if (handle == 0) error (SWT.ERROR_NO_HANDLES); +Index: swt/swt-source/org/eclipse/swt/internal/gtk/OS.java +=================================================================== +--- swt.orig/swt-source/org/eclipse/swt/internal/gtk/OS.java 2007-10-30 16:06:36.000000000 +0100 ++++ swt/swt-source/org/eclipse/swt/internal/gtk/OS.java 2008-02-14 09:05:04.000000000 +0100 +@@ -471,6 +471,11 @@ + public static final byte[] window_state_event = ascii("window-state-event"); + + /** Properties */ ++ /* Maemo hildon specific - border added due to toolbar */ ++ public static final byte[] toolbar_borders = ascii("toolbar-borders"); ++ /* Maemo hildon specific - border added due to skin graphics area */ ++ public static final byte[] borders = ascii("borders"); ++ + public static final byte[] active = ascii("active"); + public static final byte[] background_gdk = ascii("background-gdk"); + public static final byte[] button_relief = ascii("button-relief"); +Index: swt/swt-source/org/eclipse/swt/widgets/Shell.java +=================================================================== +--- swt.orig/swt-source/org/eclipse/swt/widgets/Shell.java 2007-11-01 11:31:12.000000000 +0100 ++++ swt/swt-source/org/eclipse/swt/widgets/Shell.java 2008-02-14 10:51:37.000000000 +0100 +@@ -1028,6 +1028,14 @@ + int /*long*/ gtk_size_allocate (int /*long*/ widget, int /*long*/ allocation) { + int width = OS.GTK_WIDGET_WIDTH (shellHandle); + int height = OS.GTK_WIDGET_HEIGHT (shellHandle); ++ ++ if (!fullScreen) ++ { ++ GtkBorder b = getMaemoBorder(false); ++ width -= (b.left + b.right); ++ height -= (b.top + b.bottom); ++ } ++ + if (!resized || oldWidth != width || oldHeight != height) { + oldWidth = width; + oldHeight = height; +@@ -1384,14 +1392,53 @@ + if ((state & FOREIGN_HANDLE) != 0) return; + Monitor monitor = getMonitor (); + Rectangle rect = monitor.getClientArea (); ++/* + int width = rect.width * 5 / 8; + int height = rect.height * 5 / 8; ++*/ ++ ++ int width = rect.width; ++ int height = rect.height; ++ ++ // Instead of some arbitrary defaults we can use the complete "application ++ // area" on the maemo platform. ++ if (!fullScreen) ++ { ++ GtkBorder b = getMaemoBorder(false); ++ width -= (b.left + b.right); ++ height -= (b.top + b.bottom); ++ } ++ + if ((style & SWT.RESIZE) != 0) { + OS.gtk_window_resize (shellHandle, width, height); + } + resizeBounds (width, height, false); + } + ++/** ++ * Retrieves the "borders" or "toolbar-borders" property ++ * from the Shell. ++ * ++ * That is neccessary to calculate correct Shell sizes on ++ * the Maemo platform. ++ * ++ */ ++private GtkBorder getMaemoBorder(boolean wantToolbarBorder) ++{ ++ GtkBorder b = new GtkBorder(); ++ ++ int /*long*/ [] result = new int /*long*/[1]; ++ OS.gtk_widget_style_get(shellHandle, ++ (wantToolbarBorder ? OS.toolbar_borders ++ : OS.borders), ++ result, 0); ++ ++ if (result[0] != 0) ++ OS.memmove(b, result[0], GtkBorder.sizeof); ++ ++ return b; ++} ++ + public void setMaximized (boolean maximized) { + checkWidget(); + super.setMaximized (maximized); +Index: swt/swt-source/os_custom.c +=================================================================== +--- swt.orig/swt-source/os_custom.c 2007-05-31 18:04:22.000000000 +0200 ++++ swt/swt-source/os_custom.c 2008-02-14 13:55:49.000000000 +0100 +@@ -13,6 +13,8 @@ + * IBM Corporation - initial API and implementation + *******************************************************************************/ + ++#include ++ + #include "swt.h" + #include "os_structs.h" + #include "os_stats.h" +@@ -41,11 +43,22 @@ + { + jbyte *lparg0=NULL; + SWT_PTR rc = 0; ++ GtkWidget *widget = NULL; + OS_NATIVE_ENTER(env, that, _1gtk_1file_1chooser_1dialog_1new_FUNC); + if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail; + /* + rc = (SWT_PTR)gtk_file_chooser_dialog_new(lparg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); + */ ++ /* Remaining arguments are thrown away as they cannot be used for the ++ * HildonFileChooserDialog anyways. ++ */ ++ widget = (SWT_PTR) hildon_file_chooser_dialog_new(arg1, (GtkFileChooserAction) arg2); ++ gtk_window_set_title(GTK_WINDOW(widget), (const gchar *) lparg0); ++ ++ rc = (SWT_PTR) widget; ++#if 0 ++// The code is not supposed to run on AMD64. ++ + { + static int initialized = 0; + static void *handle = NULL; +@@ -70,6 +83,8 @@ + rc = (SWT_PTR)(*fptr)(lparg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); + } + } ++#endif ++ + fail: + if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0); + OS_NATIVE_EXIT(env, that, _1gtk_1file_1chooser_1dialog_1new_FUNC); diff --git a/packages/swt/swt3.4-gtk-hildon_3.3+3.4M3.bb b/packages/swt/swt3.4-gtk-hildon_3.3+3.4M3.bb index 628dcdd810..d3dfe4d216 100644 --- a/packages/swt/swt3.4-gtk-hildon_3.3+3.4M3.bb +++ b/packages/swt/swt3.4-gtk-hildon_3.3+3.4M3.bb @@ -1,7 +1,7 @@ require swt3.4-gtk_${PV}.bb -PR = "r1" +PR = "r2" -DEPENDS += "hildon-1" +DEPENDS += "libhildon libhildonfm" SRC_URI += "file://swt-hildon.patch;patch=1;pnum=2" diff --git a/packages/swt/swt3.4-gtk-hildon_3.3+3.4M5.bb b/packages/swt/swt3.4-gtk-hildon_3.3+3.4M5.bb new file mode 100644 index 0000000000..17d85b46f3 --- /dev/null +++ b/packages/swt/swt3.4-gtk-hildon_3.3+3.4M5.bb @@ -0,0 +1,7 @@ +require swt3.4-gtk_${PV}.bb + +PR = "r0" + +DEPENDS += "libhildon libhildonfm" + +SRC_URI += "file://swt-hildon.patch;patch=1;pnum=2" diff --git a/packages/swt/swt3.4-gtk_3.3+3.4M5.bb b/packages/swt/swt3.4-gtk_3.3+3.4M5.bb new file mode 100644 index 0000000000..4035d083f7 --- /dev/null +++ b/packages/swt/swt3.4-gtk_3.3+3.4M5.bb @@ -0,0 +1,12 @@ +require swt-gtk.inc + +SRC_URI = "http://ftp.wh2.tu-dresden.de/pub/mirrors/eclipse/eclipse/downloads/drops/S-3.4M5-200802071530/swt-3.4M5-gtk-linux-x86.zip \ + file://Makefile" + +# A number which is used by SWT to mark the shared libraries. +SWTVERSION = "3428" +SWT_API_VERSION = "3.4" + +PROVIDES = "swt3.4-gtk" + +RCONFLICTS = "libswt3.3-gtk-java" -- cgit v1.2.3 From dad6d1a65d4ba3d737e227795d68d9996f1c29c0 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Thu, 14 Feb 2008 14:33:52 +0000 Subject: anki: fix parse error --- packages/anki/anki_0.4.3.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/anki/anki_0.4.3.bb b/packages/anki/anki_0.4.3.bb index 5d0c8fabe7..ead6cc70f5 100644 --- a/packages/anki/anki_0.4.3.bb +++ b/packages/anki/anki_0.4.3.bb @@ -3,7 +3,7 @@ require anki.inc RDEPENDS += "libanki" PR = "r0" -export PV +export PV="${PV}" SRC_URI += "file://no-need-for-pyqt-at-buildtime.patch;patch=1" S = "${WORKDIR}/anki-${PV}" -- cgit v1.2.3 From 832b6f875de55193a1c4a4c87f54e95cdaa3e407 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Thu, 14 Feb 2008 14:34:27 +0000 Subject: MAINTAINERS: Added myself as maintainer of new maemo4 recipes. --- MAINTAINERS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index f772855b58..e5a9cf1a98 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -268,10 +268,13 @@ Recipes: avahi, libgsmd Person: Robert Schuster 'thebohemian' Mail: robert.schuster@tarent.de, thebohemian@gmx.net Website: http://fsfe.org/en/fellows/robertschuster/weblog -Interests: free software, java, games +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: swt-gtk, rxtx, dbus-java, libmatthew, kxml2, xmlpull Recipes: midpath*, logic-analyze Recipes: kobodeluxe +Recipes: hildon-thumbnail, libhildon*, libosso*, mce-dev, libconic +Recipes: libgpsbt, libgpsmgr, osso-gnome-vfs2, osso-gwconnect, osso-ic-oss + -- cgit v1.2.3 From 5f98849db72e0f24493f80b5204f3086217998f7 Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Thu, 14 Feb 2008 18:05:04 +0000 Subject: Added spitz_h_rewrite.patch with better Spitz hardware documentation. --- .../linux/linux-rp-2.6.24/spitz_h_rewrite.patch | 497 +++++++++++++++++++++ packages/linux/linux-rp_2.6.24.bb | 1 + 2 files changed, 498 insertions(+) create mode 100644 packages/linux/linux-rp-2.6.24/spitz_h_rewrite.patch diff --git a/packages/linux/linux-rp-2.6.24/spitz_h_rewrite.patch b/packages/linux/linux-rp-2.6.24/spitz_h_rewrite.patch new file mode 100644 index 0000000000..df6d5f66c2 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/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.24/arch/arm/mach-pxa/spitz_pm.c +=================================================================== +--- linux-2.6.24.orig/arch/arm/mach-pxa/spitz_pm.c 2008-01-24 22:58:37.000000000 +0000 ++++ linux-2.6.24/arch/arm/mach-pxa/spitz_pm.c 2008-02-13 13:49:22.000000000 +0000 +@@ -110,9 +110,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 */ +@@ -128,7 +128,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.24/drivers/video/pxafb.c +=================================================================== +--- linux-2.6.24.orig/drivers/video/pxafb.c 2008-02-13 13:49:04.000000000 +0000 ++++ linux-2.6.24/drivers/video/pxafb.c 2008-02-13 13:49:57.000000000 +0000 +@@ -920,7 +920,7 @@ + return; + } + +- for (gpio = 58; ldd_bits > 0; gpio++, ldd_bits--) { ++ for (gpio = GPIO58_LDD_0; ldd_bits > 0; gpio++, ldd_bits--) { + pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT); + } + pxa_gpio_mode(GPIO74_LCD_FCLK_MD); +Index: linux-2.6.24/include/asm-arm/arch-pxa/akita.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/arch-pxa/akita.h 2008-01-24 22:58:37.000000000 +0000 ++++ linux-2.6.24/include/asm-arm/arch-pxa/akita.h 2008-02-13 13:49:22.000000000 +0000 +@@ -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.24/include/asm-arm/arch-pxa/pxa-regs.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h 2008-02-13 13:49:07.000000000 +0000 ++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h 2008-02-13 13:49:22.000000000 +0000 +@@ -1334,6 +1334,7 @@ + #define GPIO85_nPCE_1 85 /* Card Enable for Card Space (PXA27x) */ + #define GPIO92_MMCDAT0 92 /* MMC DAT0 (PXA27x) */ + #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */ ++#define GPIO104_pSKTSEL 104 /* PCMCIA Socket Select (PXA27x) */ + #define GPIO109_MMCDAT1 109 /* MMC DAT1 (PXA27x) */ + #define GPIO110_MMCDAT2 110 /* MMC DAT2 (PXA27x) */ + #define GPIO110_MMCCS0 110 /* MMC Chip Select 0 (PXA27x) */ +Index: linux-2.6.24/include/asm-arm/arch-pxa/spitz.h +=================================================================== +--- linux-2.6.24.orig/include/asm-arm/arch-pxa/spitz.h 2008-02-13 13:49:01.000000000 +0000 ++++ linux-2.6.24/include/asm-arm/arch-pxa/spitz.h 2008-02-13 13:49:22.000000000 +0000 +@@ -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.24/sound/arm/pxa2xx-ac97.c +=================================================================== +--- linux-2.6.24.orig/sound/arm/pxa2xx-ac97.c 2008-01-24 22:58:37.000000000 +0000 ++++ linux-2.6.24/sound/arm/pxa2xx-ac97.c 2008-02-13 13:49:22.000000000 +0000 +@@ -133,10 +133,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); + #else + GCR |= GCR_WARM_RST|GCR_PRIRDY_IEN|GCR_SECRDY_IEN; +@@ -335,7 +335,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); + #endif + pxa_set_cken(CKEN_AC97, 1); + diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb index cfa61853b1..f30d88b731 100644 --- a/packages/linux/linux-rp_2.6.24.bb +++ b/packages/linux/linux-rp_2.6.24.bb @@ -145,6 +145,7 @@ SRC_URI_append_akita = "\ SRC_URI_append_spitz = "\ file://mtd-module.patch;patch=1;status=external \ file://wm8750-treble.patch;patch=1;status=external \ + file://spitz_h_rewrite.patch;patch=1;status=external \ file://sharpsl-rc-r1.patch;patch=1 \ " -- cgit v1.2.3 From e907f1069a2811e99decd0fc9fcafcd07eca6e71 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 14 Feb 2008 18:06:13 +0000 Subject: task-java: Split out GTK UI stuff, include jni pacakge for rxtx. --- packages/tasks/task-java.bb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/tasks/task-java.bb b/packages/tasks/task-java.bb index bfe6f56db8..be94662d40 100644 --- a/packages/tasks/task-java.bb +++ b/packages/tasks/task-java.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Base task package for Java" -PR = "r1" +PR = "r2" LICENSE = "MIT" inherit task @@ -9,5 +9,4 @@ RDEPENDS_${PN} = "\ classpath-awt \ java2-runtime \ librxtx-java \ - logic-analyzer \ " -- cgit v1.2.3 From 93e4d339e09393380f240e48316b3d5ca2be8bc0 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 14 Feb 2008 18:07:10 +0000 Subject: task-java-gtk: Add task for Java UIs in GTK environment --- packages/tasks/task-java-gtk.bb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/tasks/task-java-gtk.bb diff --git a/packages/tasks/task-java-gtk.bb b/packages/tasks/task-java-gtk.bb new file mode 100644 index 0000000000..b4f75920f3 --- /dev/null +++ b/packages/tasks/task-java-gtk.bb @@ -0,0 +1,13 @@ +DESCRIPTION = "Task package for Java GTK applications" +PR = "r0" +LICENSE = "MIT" + +inherit task + +RDEPENDS_${PN} = "\ + classpath-awt \ + librxtx-java \ + librxtx-jni \ + libswt3.4-gtk-java \ + logic-analyzer \ + " -- cgit v1.2.3 From 25a3fc03e7198347da289efab657f49278754eee Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Thu, 14 Feb 2008 18:08:40 +0000 Subject: x11-gpe-java-image: Update to use new task. --- packages/images/x11-gpe-java-image.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/images/x11-gpe-java-image.bb b/packages/images/x11-gpe-java-image.bb index 9547cab6f6..5a7ec5ec16 100644 --- a/packages/images/x11-gpe-java-image.bb +++ b/packages/images/x11-gpe-java-image.bb @@ -12,6 +12,7 @@ IMAGE_INSTALL = "\ ${XSERVER} \ task-base-extended \ task-java \ + task-java-gtk \ angstrom-x11-base-depends \ angstrom-gpe-task-base \ angstrom-gpe-task-settings \ -- cgit v1.2.3 From 51c533cf2a6e4fcc95b196ccd0ec22a12c229132 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Thu, 14 Feb 2008 21:00:24 +0000 Subject: local.conf.sample: update the DISTRO example to angstrom-2008.1 --- conf/local.conf.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/local.conf.sample b/conf/local.conf.sample index 5204039478..213ed12fae 100644 --- a/conf/local.conf.sample +++ b/conf/local.conf.sample @@ -84,7 +84,7 @@ PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross" # openzaurus-unstable is a so called "versioned" distro, i.e. they # explicitely select specific versions of various packages. # Stay away from unversioned distros unless you really know what you are doing -# DISTRO = "angstrom-2007.1" +# DISTRO = "angstrom-2008.1" # So far, angstrom.conf sets ENABLE_BINARY_LOCALE_GENERATION # to generate binary locale packages at build time using qemu-native and -- cgit v1.2.3 From 2c4875b612d410b876bd7a41dd34dc76e034d371 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 14 Feb 2008 23:17:36 +0000 Subject: linux-handhelds-2.6 2.6.21-hh20: Enable CONFIG_ATAGS_PROC consistently. * For kexec command line support. --- packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig | 4 ++-- packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig | 3 ++- packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig | 3 ++- packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb | 2 +- 25 files changed, 49 insertions(+), 26 deletions(-) diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig index 68dcdf1804..0b4d4b28b8 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:48 2008 +# Fri Feb 15 01:08:05 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -258,6 +258,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig index 1f9a9ad638..16b6596d2c 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:48 2008 +# Fri Feb 15 01:08:05 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -264,6 +264,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig index 85cf68496d..f89fe4ffad 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:49 2008 +# Fri Feb 15 01:08:05 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -258,6 +258,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig index 4ace93c863..3fabe34070 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:49 2008 +# Fri Feb 15 01:08:06 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -265,6 +265,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # Floating point emulation diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig index 3f7b0aa8bf..6e73e44faf 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:50 2008 +# Fri Feb 15 01:08:06 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -256,6 +256,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig index c1945adbce..7c8e756060 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:50 2008 +# Fri Feb 15 01:08:07 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -264,6 +264,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig index 1efdee2b39..3b566efffc 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:50 2008 +# Fri Feb 15 01:08:07 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -236,6 +236,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig index f30b2dd0ab..e8dcf46931 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:51 2008 +# Fri Feb 15 01:08:07 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -234,6 +234,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig index d752bc8c37..b05e1f6c74 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:51 2008 +# Fri Feb 15 01:08:08 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -257,6 +257,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling @@ -1434,4 +1435,3 @@ CONFIG_ZLIB_DEFLATE=y CONFIG_PLIST=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y -CONFIG_ATAGS_PROC=y diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig index 3102d3ff87..5d7a7cde32 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:52 2008 +# Fri Feb 15 01:08:08 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -270,6 +270,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig index 09de261d0d..3780728e66 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:52 2008 +# Fri Feb 15 01:08:09 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -258,6 +258,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig index de5d0ffb2f..3f2bfd45a9 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:53 2008 +# Fri Feb 15 01:08:10 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -256,6 +256,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig index ed08623f98..a748acdcda 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:54 2008 +# Fri Feb 15 01:08:10 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -256,6 +256,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig index ed123c7686..3544a52c42 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:54 2008 +# Fri Feb 15 01:08:11 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -260,6 +260,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig index 78c8121dd7..4db13f11e9 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:54 2008 +# Fri Feb 15 01:08:11 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -277,6 +277,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig index d52ff1f91a..2035e2de39 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:55 2008 +# Fri Feb 15 01:08:12 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -258,6 +258,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig index e8f3b4875a..7e2204f7d9 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:55 2008 +# Fri Feb 15 01:08:12 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -260,6 +260,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig index d7432214b6..d967d9252e 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:56 2008 +# Fri Feb 15 01:08:13 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -267,6 +267,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig index 0cc90ff40e..1744bbf8d6 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:56 2008 +# Fri Feb 15 01:08:13 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -233,6 +233,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig index 44e63f2e4e..5998f99db6 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:53 2008 +# Fri Feb 15 01:08:09 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -272,6 +272,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig index 66f4b3fd7c..d71eb62ae0 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:56 2008 +# Fri Feb 15 01:08:13 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -254,6 +254,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig index f97cf7014c..290f2b14a9 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:53 2008 +# Fri Feb 15 01:08:10 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -261,6 +261,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # CPU Frequency scaling diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig index 59153d4d30..044b7f005c 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:57 2008 +# Fri Feb 15 01:08:14 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -267,6 +267,7 @@ CONFIG_CMDLINE="keepinitrd" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y # CONFIG_TXTOFFSET_DELTA is not set +CONFIG_ATAGS_PROC=y # # Floating point emulation diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig index 21caa9019d..7bae57d01f 100644 --- a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig +++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21-hh20 -# Thu Feb 14 00:33:57 2008 +# Fri Feb 15 01:08:14 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -274,6 +274,7 @@ CONFIG_CMDLINE="keepinitrd" CONFIG_KEXEC=y CONFIG_TXTOFFSET_DELTA=y CONFIG_TXTOFFSET_DELTA_VALUE=0x00090000 +CONFIG_ATAGS_PROC=y # # Floating point emulation diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb index b45d3e0987..8e3ab4d06d 100644 --- a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb +++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb @@ -1,7 +1,7 @@ SECTION = "kernel" DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices." LICENSE = "GPL" -PR = "r12" +PR = "r13" DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From 8d0d4e75d147f819f4ddedcb888e66650d90d61b Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 15 Feb 2008 00:56:33 +0000 Subject: image.bbclass: Add deploy_to task * A standalone task to deploy built image to the location specified by DEPLOY_TO variable (likely passed via environment). Assumes ${IMAGE_FSTYPES} is a single value! --- classes/image.bbclass | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/classes/image.bbclass b/classes/image.bbclass index d70cfa5daf..e8fca61fb2 100644 --- a/classes/image.bbclass +++ b/classes/image.bbclass @@ -110,6 +110,14 @@ fakeroot do_rootfs () { ${MACHINE_POSTPROCESS_COMMAND} } +do_deploy_to[nostamp] = "1" +do_deploy_to () { + # A standalone task to deploy built image to the location specified + # by DEPLOY_TO variable (likely passed via environment). + # Assumes ${IMAGE_FSTYPES} is a single value! + cp "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.${IMAGE_FSTYPES}" ${DEPLOY_TO} +} + insert_feed_uris () { echo "Building feeds for [${DISTRO}].." @@ -202,3 +210,4 @@ rootfs_update_timestamp () { EXPORT_FUNCTIONS zap_root_password create_etc_timestamp remove_init_link do_rootfs make_zimage_symlink_relative set_image_autologin rootfs_update_timestamp addtask rootfs before do_build after do_install +addtask deploy_to after do_rootfs -- cgit v1.2.3 From b8e0c83bc18cb1ca8740c44b25ff910ab16681f2 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 15 Feb 2008 01:01:02 +0000 Subject: initramfs-image-ipk: Package initramfs into package. * Go badass with recursive bitbake invocation idea expressed on ML. * It works! But don't try with BB_NUMBER_THREADS > 1 or at home. --- packages/initrdscripts/initramfs-image-ipk_1.0.bb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 packages/initrdscripts/initramfs-image-ipk_1.0.bb diff --git a/packages/initrdscripts/initramfs-image-ipk_1.0.bb b/packages/initrdscripts/initramfs-image-ipk_1.0.bb new file mode 100644 index 0000000000..8c79c24478 --- /dev/null +++ b/packages/initrdscripts/initramfs-image-ipk_1.0.bb @@ -0,0 +1,15 @@ +DESCRIPTION = "Boot initramfs as a package" +PR = "r1" + +do_compile() { + cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} ANGSTROM_MODE=uclibc IMAGE_FSTYPES=cpio.gz DEPLOY_TO=${D}/boot/initramfs.bin bitbake initramfs-image +} + +do_install() { + install -d ${D}/boot/ + cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} ANGSTROM_MODE=uclibc IMAGE_FSTYPES=cpio.gz DEPLOY_TO=${D}/boot/initramfs.bin bitbake initramfs-image -c deploy_to +} + +FILES_${PN} += "/boot/*" + +PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3 From 655182d53f6da6a4c5cbe48be5aa424ae1fb02ac Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Fri, 15 Feb 2008 09:15:17 +0000 Subject: anki: comment out that export. I hope that maintainer of it will solve it properly one day --- packages/anki/anki_0.4.3.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/anki/anki_0.4.3.bb b/packages/anki/anki_0.4.3.bb index ead6cc70f5..e4878645d8 100644 --- a/packages/anki/anki_0.4.3.bb +++ b/packages/anki/anki_0.4.3.bb @@ -3,7 +3,7 @@ require anki.inc RDEPENDS += "libanki" PR = "r0" -export PV="${PV}" +#export PV="${PV}" SRC_URI += "file://no-need-for-pyqt-at-buildtime.patch;patch=1" S = "${WORKDIR}/anki-${PV}" -- cgit v1.2.3 From b3495af69472ff1077bc2d554f758cc0c6b7c927 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 15 Feb 2008 09:22:21 +0000 Subject: ipaq-boot-params: Add DESCRIPTION. --- packages/ipaq-boot-params/ipaq-boot-params.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ipaq-boot-params/ipaq-boot-params.bb b/packages/ipaq-boot-params/ipaq-boot-params.bb index 15e3c9cd51..0b0812b01b 100644 --- a/packages/ipaq-boot-params/ipaq-boot-params.bb +++ b/packages/ipaq-boot-params/ipaq-boot-params.bb @@ -1,5 +1,6 @@ +DESCRIPTION = "Kernel boot parameters for HH.org bootldr" LICENSE = "MIT" -PR = "r2" +PR = "r3" COMPATIBLE_MACHINE = "(h3600|h3800|h3900|h5000|simpad)" -- cgit v1.2.3 From 5090ea1ccf7050b599d15efe86e3e6bc1ca81725 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 15 Feb 2008 09:24:23 +0000 Subject: ipaq-boot-params: Add sensible boot params regarding consoles. --- packages/ipaq-boot-params/files/h5000/params | 2 +- packages/ipaq-boot-params/files/params | 2 +- packages/ipaq-boot-params/ipaq-boot-params.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ipaq-boot-params/files/h5000/params b/packages/ipaq-boot-params/files/h5000/params index 2d1a571173..a1a1f4e6e9 100644 --- a/packages/ipaq-boot-params/files/h5000/params +++ b/packages/ipaq-boot-params/files/h5000/params @@ -1 +1 @@ -set linuxargs "root=/dev/mtdblock1 noinitrd console=ttyS0,115200" +set linuxargs "root=/dev/mtdblock1 noinitrd console=tty0 console=ttyS0,115200" diff --git a/packages/ipaq-boot-params/files/params b/packages/ipaq-boot-params/files/params index 42344d6fb7..a1a1f4e6e9 100644 --- a/packages/ipaq-boot-params/files/params +++ b/packages/ipaq-boot-params/files/params @@ -1 +1 @@ -set linuxargs "root=/dev/mtdblock1 init=/linuxrc noinitrd console=none" +set linuxargs "root=/dev/mtdblock1 noinitrd console=tty0 console=ttyS0,115200" diff --git a/packages/ipaq-boot-params/ipaq-boot-params.bb b/packages/ipaq-boot-params/ipaq-boot-params.bb index 0b0812b01b..7b73df1d34 100644 --- a/packages/ipaq-boot-params/ipaq-boot-params.bb +++ b/packages/ipaq-boot-params/ipaq-boot-params.bb @@ -1,6 +1,6 @@ DESCRIPTION = "Kernel boot parameters for HH.org bootldr" LICENSE = "MIT" -PR = "r3" +PR = "r4" COMPATIBLE_MACHINE = "(h3600|h3800|h3900|h5000|simpad)" -- cgit v1.2.3 From cc3ed15b34589faf8e45cb50354d27bdfab9dcf5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 15 Feb 2008 10:14:42 +0000 Subject: uclibc 0.9.29: blackfin and avr32 updates --- packages/uclibc/uclibc-0.9.29/bfin/uClibc.machine | 68 +- .../uclibc-0.9.29/uClibc-0.9.29-002-atmel.1.patch | 3546 ++++++++++++++++++++ .../uClibc-0.9.29-avr32-fix-sa_onstack.patch | 31 + packages/uclibc/uclibc_0.9.29.bb | 4 +- 4 files changed, 3622 insertions(+), 27 deletions(-) create mode 100644 packages/uclibc/uclibc-0.9.29/uClibc-0.9.29-002-atmel.1.patch create mode 100644 packages/uclibc/uclibc-0.9.29/uClibc-0.9.29-avr32-fix-sa_onstack.patch diff --git a/packages/uclibc/uclibc-0.9.29/bfin/uClibc.machine b/packages/uclibc/uclibc-0.9.29/bfin/uClibc.machine index cef409289c..0c565238e5 100644 --- a/packages/uclibc/uclibc-0.9.29/bfin/uClibc.machine +++ b/packages/uclibc/uclibc-0.9.29/bfin/uClibc.machine @@ -1,6 +1,6 @@ # # Automatically generated make config: don't edit -# Fri Aug 10 19:05:32 2007 +# Sat Oct 20 20:22:28 2007 # # TARGET_alpha is not set # TARGET_arm is not set @@ -33,11 +33,10 @@ TARGET_ARCH="bfin" FORCE_OPTIONS_FOR_ARCH=y TARGET_SUBARCH="" # UCLIBC_FORMAT_ELF is not set -# UCLIBC_FORMAT_FDPIC_ELF is not set +UCLIBC_FORMAT_FDPIC_ELF=y # UCLIBC_FORMAT_FLAT is not set # UCLIBC_FORMAT_FLAT_SEP_DATA is not set -UCLIBC_FORMAT_SHARED_FLAT=y -UCLIBC_SHARED_FLAT_ID=1 +# UCLIBC_FORMAT_SHARED_FLAT is not set ARCH_LITTLE_ENDIAN=y # @@ -50,8 +49,8 @@ ARCH_HAS_NO_MMU=y # UCLIBC_HAS_FLOATS=y UCLIBC_HAS_FPU=y -DO_C99_MATH=y -KERNEL_HEADERS="/media/hda4/OE/build/tmp-new/angstrom/cross/bfin-angstrom-uclinux-uclibc/include" +# DO_C99_MATH is not set +KERNEL_HEADERS="/usr/include" # UCLIBC_UCLINUX_BROKEN_MUNMAP is not set EXCLUDE_BRK=y HAVE_DOT_CONFIG=y @@ -60,12 +59,22 @@ HAVE_DOT_CONFIG=y # General Library Settings # # HAVE_NO_PIC is not set -# DOPIC is not set -HAVE_NO_SHARED=y -ARCH_HAS_NO_LDSO=y +DOPIC=y +# HAVE_NO_SHARED is not set +# ARCH_HAS_NO_LDSO is not set +HAVE_SHARED=y +# FORCE_SHAREABLE_TEXT_SEGMENTS is not set +LDSO_LDD_SUPPORT=y +LDSO_CACHE_SUPPORT=y +# LDSO_PRELOAD_FILE_SUPPORT is not set +LDSO_BASE_FILENAME="ld.so" +UCLIBC_STATIC_LDCONFIG=y +LDSO_RUNPATH=y UCLIBC_CTOR_DTOR=y # HAS_NO_THREADS is not set -# UCLIBC_HAS_THREADS is not set +UCLIBC_HAS_THREADS=y +# PTHREADS_DEBUG_SUPPORT is not set +LINUXTHREADS_OLD=y UCLIBC_HAS_LFS=y MALLOC=y # MALLOC_SIMPLE is not set @@ -73,24 +82,24 @@ MALLOC=y # MALLOC_GLIBC_COMPAT is not set UCLIBC_DYNAMIC_ATEXIT=y # COMPAT_ATEXIT is not set -UCLIBC_SUSV3_LEGACY=y -UCLIBC_SUSV3_LEGACY_MACROS=y -# UCLIBC_HAS_SHADOW is not set +# UCLIBC_SUSV3_LEGACY is not set +# UCLIBC_SUSV3_LEGACY_MACROS is not set +UCLIBC_HAS_SHADOW=y # UCLIBC_HAS_PROGRAM_INVOCATION_NAME is not set UCLIBC_HAS___PROGNAME=y UNIX98PTY_ONLY=y ASSUME_DEVPTS=y UCLIBC_HAS_TM_EXTENSIONS=y -# UCLIBC_HAS_TZ_CACHING is not set -# UCLIBC_HAS_TZ_FILE is not set +UCLIBC_HAS_TZ_CACHING=y +UCLIBC_HAS_TZ_FILE=y +UCLIBC_HAS_TZ_FILE_READ_MANY=y +UCLIBC_TZ_FILE_PATH="/etc/TZ" # # Networking Support # # UCLIBC_HAS_IPV6 is not set -UCLIBC_HAS_RPC=y -UCLIBC_HAS_FULL_RPC=y -UCLIBC_HAS_REENTRANT_RPC=y +# UCLIBC_HAS_RPC is not set # UCLIBC_USE_NETLINK is not set # @@ -103,18 +112,19 @@ UCLIBC_HAS_CTYPE_SIGNED=y UCLIBC_HAS_CTYPE_UNSAFE=y # UCLIBC_HAS_CTYPE_CHECKED is not set # UCLIBC_HAS_CTYPE_ENFORCED is not set -UCLIBC_HAS_WCHAR=y +# UCLIBC_HAS_WCHAR is not set # UCLIBC_HAS_LOCALE is not set # UCLIBC_HAS_HEXADECIMAL_FLOATS is not set # UCLIBC_HAS_GLIBC_CUSTOM_PRINTF is not set +# USE_OLD_VFPRINTF is not set UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 # UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set # UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set -UCLIBC_HAS_STDIO_BUFSIZ_256=y +# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set # UCLIBC_HAS_STDIO_BUFSIZ_512 is not set # UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set # UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set -# UCLIBC_HAS_STDIO_BUFSIZ_4096 is not set +UCLIBC_HAS_STDIO_BUFSIZ_4096=y # UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y # UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set @@ -149,8 +159,9 @@ UCLIBC_HAS_GLOB=y # # Library Installation Options # -RUNTIME_PREFIX="/" -DEVEL_PREFIX="//usr" +SHARED_LIB_LOADER_PREFIX="$(RUNTIME_PREFIX)lib" +RUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/" +DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/" MULTILIB="" # @@ -159,16 +170,21 @@ MULTILIB="" # UCLIBC_HAS_ARC4RANDOM is not set # HAVE_NO_SSP is not set # UCLIBC_HAS_SSP is not set -# UCLIBC_BUILD_NOEXECSTACK is not set +UCLIBC_BUILD_RELRO=y +# UCLIBC_BUILD_NOW is not set +UCLIBC_BUILD_NOEXECSTACK=y # # uClibc development/debugging options # -CROSS_COMPILER_PREFIX="bfin-elf-" +CROSS_COMPILER_PREFIX="" UCLIBC_EXTRA_CFLAGS="" # DODEBUG is not set -# DOSTRIP is not set +# DODEBUG_PT is not set +DOSTRIP=y # DOASSERTS is not set +# SUPPORT_LD_DEBUG is not set +# SUPPORT_LD_DEBUG_EARLY is not set # UCLIBC_MALLOC_DEBUGGING is not set WARNINGS="-Wall" # EXTRA_WARNINGS is not set diff --git a/packages/uclibc/uclibc-0.9.29/uClibc-0.9.29-002-atmel.1.patch b/packages/uclibc/uclibc-0.9.29/uClibc-0.9.29-002-atmel.1.patch new file mode 100644 index 0000000000..d275ac2302 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.29/uClibc-0.9.29-002-atmel.1.patch @@ -0,0 +1,3546 @@ +diff --git a/Rules.mak b/Rules.mak +index d054bbb..55381cf 100644 +--- a/Rules.mak ++++ b/Rules.mak +@@ -313,6 +313,12 @@ ifeq ($(TARGET_ARCH),frv) + UCLIBC_LDSO=ld.so.1 + endif + ++ifeq ($(strip $(TARGET_ARCH)),avr32) ++ CPU_CFLAGS-$(CONFIG_AVR32_AP7) += -march=ap ++ CPU_CFLAGS-$(CONFIG_LINKRELAX) += -mrelax ++ CPU_LDFLAGS-$(CONFIG_LINKRELAX) += --relax ++endif ++ + # Keep the check_gcc from being needlessly executed + ifndef PIEFLAG + ifneq ($(UCLIBC_BUILD_PIE),y) +diff --git a/extra/Configs/Config.avr32 b/extra/Configs/Config.avr32 +new file mode 100644 +index 0000000..8d70e6e +--- /dev/null ++++ b/extra/Configs/Config.avr32 +@@ -0,0 +1,31 @@ ++# ++# For a description of the syntax of this configuration file, ++# see extra/config/Kconfig-language.txt ++# ++ ++config TARGET_ARCH ++ string ++ default "avr32" ++ ++config FORCE_OPTIONS_FOR_ARCH ++ bool ++ default y ++ select ARCH_BIG_ENDIAN ++ select FORCE_SHAREABLE_TEXT_SEGMENTS ++ ++config ARCH_CFLAGS ++ string ++ ++choice ++ prompt "Target CPU Type" ++ default CONFIG_AVR32_AP7 ++ ++config CONFIG_AVR32_AP7 ++ bool "AVR32 AP7" ++ select ARCH_HAS_MMU ++ ++endchoice ++ ++config LINKRELAX ++ bool "Enable linker optimizations" ++ default y +diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in +index 8eab394..10c9f7b 100644 +--- a/extra/Configs/Config.in ++++ b/extra/Configs/Config.in +@@ -16,6 +16,9 @@ config TARGET_alpha + config TARGET_arm + bool "arm" + ++config TARGET_avr32 ++ bool "avr32" ++ + config TARGET_bfin + bool "bfin" + +@@ -92,6 +95,10 @@ if TARGET_arm + source "extra/Configs/Config.arm" + endif + ++if TARGET_avr32 ++source "extra/Configs/Config.avr32" ++endif ++ + if TARGET_bfin + source "extra/Configs/Config.bfin" + endif +diff --git a/extra/Configs/defconfigs/avr32 b/extra/Configs/defconfigs/avr32 +new file mode 100644 +index 0000000..0b890a2 +--- /dev/null ++++ b/extra/Configs/defconfigs/avr32 +@@ -0,0 +1 @@ ++TARGET_avr32=y +diff --git a/include/elf.h b/include/elf.h +index 19805d7..ab90160 100644 +--- a/include/elf.h ++++ b/include/elf.h +@@ -354,6 +354,8 @@ typedef struct + /* NIOS magic number - no EABI available. */ + #define EM_NIOS32 0xFEBB + ++#define EM_AVR32 0x18ad ++ + /* V850 backend magic number. Written in the absense of an ABI. */ + #define EM_CYGNUS_V850 0x9080 + +@@ -2828,6 +2830,55 @@ typedef Elf32_Addr Elf32_Conflict; + /* Keep this the last entry. */ + #define R_V850_NUM 25 + ++/* Atmel AVR32 relocations. */ ++#define R_AVR32_NONE 0 ++#define R_AVR32_32 1 ++#define R_AVR32_16 2 ++#define R_AVR32_8 3 ++#define R_AVR32_32_PCREL 4 ++#define R_AVR32_16_PCREL 5 ++#define R_AVR32_8_PCREL 6 ++#define R_AVR32_DIFF32 7 ++#define R_AVR32_DIFF16 8 ++#define R_AVR32_DIFF8 9 ++#define R_AVR32_GOT32 10 ++#define R_AVR32_GOT16 11 ++#define R_AVR32_GOT8 12 ++#define R_AVR32_21S 13 ++#define R_AVR32_16U 14 ++#define R_AVR32_16S 15 ++#define R_AVR32_8S 16 ++#define R_AVR32_8S_EXT 17 ++#define R_AVR32_22H_PCREL 18 ++#define R_AVR32_18W_PCREL 19 ++#define R_AVR32_16B_PCREL 20 ++#define R_AVR32_16N_PCREL 21 ++#define R_AVR32_14UW_PCREL 22 ++#define R_AVR32_11H_PCREL 23 ++#define R_AVR32_10UW_PCREL 24 ++#define R_AVR32_9H_PCREL 25 ++#define R_AVR32_9UW_PCREL 26 ++#define R_AVR32_HI16 27 ++#define R_AVR32_LO16 28 ++#define R_AVR32_GOTPC 29 ++#define R_AVR32_GOTCALL 30 ++#define R_AVR32_LDA_GOT 31 ++#define R_AVR32_GOT21S 32 ++#define R_AVR32_GOT18SW 33 ++#define R_AVR32_GOT16S 34 ++#define R_AVR32_GOT7UW 35 ++#define R_AVR32_32_CPENT 36 ++#define R_AVR32_CPCALL 37 ++#define R_AVR32_16_CP 38 ++#define R_AVR32_9W_CP 39 ++#define R_AVR32_RELATIVE 40 ++#define R_AVR32_GLOB_DAT 41 ++#define R_AVR32_JMP_SLOT 42 ++#define R_AVR32_ALIGN 43 ++#define R_AVR32_NUM 44 ++ ++/* AVR32 dynamic tags */ ++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */ + + /* Renesas H8/300 Relocations */ + #define R_H8_NONE 0 +diff --git a/ldso/include/dl-string.h b/ldso/include/dl-string.h +index 32c5bf8..eb43bd9 100644 +--- a/ldso/include/dl-string.h ++++ b/ldso/include/dl-string.h +@@ -285,7 +285,8 @@ static __always_inline char * _dl_simple_ltoahex(char * local, unsigned long i) + /* On some arches constant strings are referenced through the GOT. + * This requires that load_addr must already be defined... */ + #if defined(mc68000) || defined(__arm__) || defined(__thumb__) || \ +- defined(__mips__) || defined(__sh__) || defined(__powerpc__) ++ defined(__mips__) || defined(__sh__) || defined(__powerpc__) || \ ++ defined(__avr32__) + # define CONSTANT_STRING_GOT_FIXUP(X) \ + if ((X) < (const char *) load_addr) (X) += load_addr + # define NO_EARLY_SEND_STDERR +diff --git a/ldso/include/dl-syscall.h b/ldso/include/dl-syscall.h +index b42416a..4404219 100644 +--- a/ldso/include/dl-syscall.h ++++ b/ldso/include/dl-syscall.h +@@ -55,69 +55,69 @@ + dynamic linking at all, so we cannot return any error codes. + We just punt if there is an error. */ + #define __NR__dl_exit __NR_exit +-static inline _syscall1(void, _dl_exit, int, status); ++static __always_inline _syscall1(void, _dl_exit, int, status); + + #define __NR__dl_close __NR_close +-static inline _syscall1(int, _dl_close, int, fd); ++static __always_inline _syscall1(int, _dl_close, int, fd); + + #define __NR__dl_open __NR_open +-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, ++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, + __kernel_mode_t, mode); + + #define __NR__dl_write __NR_write +-static inline _syscall3(unsigned long, _dl_write, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_write, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_read __NR_read +-static inline _syscall3(unsigned long, _dl_read, int, fd, ++static __always_inline _syscall3(unsigned long, _dl_read, int, fd, + const void *, buf, unsigned long, count); + + #define __NR__dl_mprotect __NR_mprotect +-static inline _syscall3(int, _dl_mprotect, const void *, addr, ++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, + unsigned long, len, int, prot); + + #define __NR__dl_stat __NR_stat +-static inline _syscall2(int, _dl_stat, const char *, file_name, ++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, + struct stat *, buf); + + #define __NR__dl_fstat __NR_fstat +-static inline _syscall2(int, _dl_fstat, int, fd, struct stat *, buf); ++static __always_inline _syscall2(int, _dl_fstat, int, fd, struct stat *, buf); + + #define __NR__dl_munmap __NR_munmap +-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); ++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length); + + #ifdef __NR_getxuid + # define __NR_getuid __NR_getxuid + #endif + #define __NR__dl_getuid __NR_getuid +-static inline _syscall0(uid_t, _dl_getuid); ++static __always_inline _syscall0(uid_t, _dl_getuid); + + #ifndef __NR_geteuid + # define __NR_geteuid __NR_getuid + #endif + #define __NR__dl_geteuid __NR_geteuid +-static inline _syscall0(uid_t, _dl_geteuid); ++static __always_inline _syscall0(uid_t, _dl_geteuid); + + #ifdef __NR_getxgid + # define __NR_getgid __NR_getxgid + #endif + #define __NR__dl_getgid __NR_getgid +-static inline _syscall0(gid_t, _dl_getgid); ++static __always_inline _syscall0(gid_t, _dl_getgid); + + #ifndef __NR_getegid + # define __NR_getegid __NR_getgid + #endif + #define __NR__dl_getegid __NR_getegid +-static inline _syscall0(gid_t, _dl_getegid); ++static __always_inline _syscall0(gid_t, _dl_getegid); + + #ifdef __NR_getxpid + # define __NR_getpid __NR_getxpid + #endif + #define __NR__dl_getpid __NR_getpid +-static inline _syscall0(gid_t, _dl_getpid); ++static __always_inline _syscall0(gid_t, _dl_getpid); + + #define __NR__dl_readlink __NR_readlink +-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, ++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, + size_t, bufsiz); + + #ifdef __UCLIBC_HAS_SSP__ +@@ -146,14 +146,14 @@ static inline _syscall2(int, _dl_gettimeofday, struct timeval *, tv, + #if defined(__UCLIBC_MMAP_HAS_6_ARGS__) && defined(__NR_mmap) + + # define __NR__dl_mmap __NR_mmap +-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, ++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length, + int, prot, int, flags, int, fd, off_t, offset); + + /* then try mmap2() */ + #elif defined(__NR_mmap2) + + # define __NR___syscall_mmap2 __NR_mmap2 +-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, size_t, len, ++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, size_t, len, + int, prot, int, flags, int, fd, off_t, offset); + + /* Some architectures always use 12 as page shift for mmap2() eventhough the +@@ -164,7 +164,7 @@ static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, size_t, len, + # define MMAP2_PAGE_SHIFT 12 + #endif + +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) +@@ -177,8 +177,8 @@ static inline void * _dl_mmap(void * addr, unsigned long size, int prot, + #elif defined(__NR_mmap) + + # define __NR__dl_mmap_real __NR_mmap +-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); +-static inline void * _dl_mmap(void * addr, unsigned long size, int prot, ++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer); ++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot, + int flags, int fd, unsigned long offset) + { + unsigned long buffer[6]; +diff --git a/ldso/ldso/avr32/dl-debug.h b/ldso/ldso/avr32/dl-debug.h +new file mode 100644 +index 0000000..fe35539 +--- /dev/null ++++ b/ldso/ldso/avr32/dl-debug.h +@@ -0,0 +1,45 @@ ++/* ++ * AVR32 ELF shared libary loader support ++ * ++ * Copyright (C) 2005-2007 Atmel Corporation ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++static const char *_dl_reltypes_tab[] = { ++ "R_AVR32_NONE", ++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8", ++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL", ++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8", ++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8", ++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT", ++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL", ++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL", ++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL", ++ "R_AVR32_HI16", "R_AVR32_LO16", ++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT", ++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW", ++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP", ++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT", ++ "R_AVR32_ALIGN", ++}; +diff --git a/ldso/ldso/avr32/dl-startup.h b/ldso/ldso/avr32/dl-startup.h +new file mode 100644 +index 0000000..3b9a641 +--- /dev/null ++++ b/ldso/ldso/avr32/dl-startup.h +@@ -0,0 +1,112 @@ ++/* ++ * Architecture specific code used by dl-startup.c ++ * ++ * Copyright (C) 2005-2007 Atmel Corporation ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++/* This is the library loader's main entry point. Let _dl_boot2 do its ++ * initializations and jump to the application's entry point ++ * afterwards. */ ++asm( " .text\n" ++ " .global _start\n" ++ " .type _start,@function\n" ++ "_start:\n" ++ /* All arguments are on the stack initially */ ++ " mov r12, sp\n" ++ " rcall _dl_start\n" ++ /* Returns user entry point in r12. Save it. */ ++ " mov r0, r12\n" ++ /* We're PIC, so get the Global Offset Table */ ++ " lddpc r6, .L_GOT\n" ++ ".L_RGOT:\n" ++ " rsub r6, pc\n" ++ /* Adjust argc and argv according to _dl_skip_args */ ++ " ld.w r1, r6[_dl_skip_args@got]\n" ++ " ld.w r1, r1[0]\n" ++ " ld.w r2, sp++\n" ++ " sub r2, r1\n" ++ " add sp, sp, r1 << 2\n" ++ " st.w --sp, r2\n" ++ /* Load the finalizer function */ ++ " ld.w r12, r6[_dl_fini@got]\n" ++ /* Jump to the user's entry point */ ++ " mov pc, r0\n\n" ++ ++ " .align 2\n" ++ ".L_GOT:" ++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n" ++ " .size _start, . - _start\n" ++ " .previous\n"); ++ ++/* Get a pointer to the argv array. On many platforms this can be just ++ * the address if the first argument, on other platforms we need to ++ * do something a little more subtle here. */ ++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1) ++ ++ ++/* We can't call functions before the GOT has been initialized */ ++#define NO_FUNCS_BEFORE_BOOTSTRAP ++ ++/* ++ * Relocate the GOT during dynamic loader bootstrap. This will add ++ * the load address to all entries in the GOT, which is necessary ++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the ++ * GOT. ++ */ ++static __always_inline ++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt) ++{ ++ Elf32_Addr i, nr_got; ++ register Elf32_Addr *__r6 __asm__("r6"); ++ Elf32_Addr *got = __r6; ++ ++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got); ++ for (i = 2; i < nr_got; i++) ++ got[i] += tpnt->loadaddr; ++} ++ ++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt) ++ ++/* Handle relocation of the symbols in the dynamic loader. */ ++static __always_inline ++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr, ++ unsigned long symbol_addr, ++ unsigned long load_addr, Elf32_Sym *symtab) ++{ ++ switch(ELF32_R_TYPE(rpnt->r_info)) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr; ++ break; ++ case R_AVR32_RELATIVE: ++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: "); ++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0); ++ SEND_STDERR_DEBUG(" + "); ++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1); ++ *reloc_addr = load_addr + rpnt->r_addend; ++ break; ++ default: ++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type "); ++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1); ++ SEND_STDERR("REL, SYMBOL, LOAD: "); ++ SEND_ADDRESS_STDERR(reloc_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(symbol_addr, 0); ++ SEND_STDERR(", "); ++ SEND_ADDRESS_STDERR(load_addr, 1); ++ _dl_exit(1); ++ } ++} ++ ++/* Transfer control to the user's application, once the dynamic loader ++ * is done. This routine has to exit the current function, then call ++ * the _dl_elf_main function. ++ * ++ * Since our _dl_boot will simply call whatever is returned by ++ * _dl_boot2, we can just return the address we're supposed to ++ * call. */ ++#define START() return _dl_elf_main; +diff --git a/ldso/ldso/avr32/dl-syscalls.h b/ldso/ldso/avr32/dl-syscalls.h +new file mode 100644 +index 0000000..996bb87 +--- /dev/null ++++ b/ldso/ldso/avr32/dl-syscalls.h +@@ -0,0 +1,6 @@ ++/* We can't use the real errno in ldso, since it has not yet ++ * been dynamicly linked in yet. */ ++#include "sys/syscall.h" ++extern int _dl_errno; ++#undef __set_errno ++#define __set_errno(X) {(_dl_errno) = (X);} +diff --git a/ldso/ldso/avr32/dl-sysdep.h b/ldso/ldso/avr32/dl-sysdep.h +new file mode 100644 +index 0000000..1a30172 +--- /dev/null ++++ b/ldso/ldso/avr32/dl-sysdep.h +@@ -0,0 +1,105 @@ ++/* ++ * Various assembly language/system dependent hacks that are required ++ * so that we can minimize the amount of platform specific code. ++ * ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++/* Define this if the system uses RELOCA. */ ++#define ELF_USES_RELOCA ++ ++#include ++ ++#define ARCH_NUM 1 ++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM) ++ ++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \ ++ do { \ ++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \ ++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \ ++ } while (0) ++ ++/* Initialization sequence for the application/library GOT. */ ++#define INIT_GOT(GOT_BASE,MODULE) \ ++ do { \ ++ unsigned long i, nr_got; \ ++ \ ++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \ ++ GOT_BASE[1] = (unsigned long) MODULE; \ ++ \ ++ /* Add load address displacement to all GOT entries */ \ ++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \ ++ for (i = 2; i < nr_got; i++) \ ++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \ ++ } while (0) ++ ++#define do_rem(result, n, base) ((result) = (n) % (base)) ++ ++/* Here we define the magic numbers that this dynamic loader should accept */ ++#define MAGIC1 EM_AVR32 ++#undef MAGIC2 ++ ++/* Used for error messages */ ++#define ELF_TARGET "AVR32" ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); ++ ++/* 4096 bytes alignment */ ++#define PAGE_ALIGN 0xfffff000 ++#define ADDR_ALIGN 0xfff ++#define OFFS_ALIGN 0x7ffff000 ++ ++#define elf_machine_type_class(type) \ ++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) ++ ++/* AVR32 doesn't need any COPY relocs */ ++#define DL_NO_COPY_RELOCS ++ ++/* Return the link-time address of _DYNAMIC. Conveniently, this is the ++ first element of the GOT. This must be inlined in a function which ++ uses global data. */ ++static inline Elf32_Addr ++elf_machine_dynamic (void) ++{ ++ register Elf32_Addr *got asm ("r6"); ++ return *got; ++} ++ ++/* Return the run-time load address of the shared object. */ ++static inline Elf32_Addr ++elf_machine_load_address (void) ++{ ++ extern void __dl_start asm("_dl_start"); ++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; ++ Elf32_Addr pcrel_addr; ++ ++ asm (" lddpc %0, 2f\n" ++ "1: add %0, pc\n" ++ " rjmp 3f\n" ++ " .align 2\n" ++ "2: .long _dl_start - 1b\n" ++ "3:\n" ++ : "=r"(pcrel_addr) : : "cc"); ++ ++ return pcrel_addr - got_addr; ++} ++ ++/* ++ * Perform any RELATIVE relocations specified by DT_RELCOUNT. ++ * Currently, we don't use that tag, but we might in the future as ++ * this would reduce the startup time somewhat (although probably not by much). ++ */ ++static inline void ++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr, ++ Elf32_Word relative_count) ++{ ++ Elf32_Rela *rpnt = (void *)rel_addr; ++ ++ do { ++ Elf32_Addr *reloc_addr; ++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset); ++ *reloc_addr = load_off + rpnt->r_addend; ++ } while (--relative_count); ++} +diff --git a/ldso/ldso/avr32/elfinterp.c b/ldso/ldso/avr32/elfinterp.c +new file mode 100644 +index 0000000..196292b +--- /dev/null ++++ b/ldso/ldso/avr32/elfinterp.c +@@ -0,0 +1,191 @@ ++/* ++ * AVR32 ELF shared library loader suppport ++ * ++ * Copyright (C) 2004-2006 Atmel Corporation ++ * ++ * All rights reserved. ++ * ++ * 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. The name of the above contributors may not be ++ * used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``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 CONTRIBUTORS 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. ++ */ ++ ++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got) ++{ ++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1]; ++ Elf32_Sym *sym; ++ unsigned long local_gotno; ++ unsigned long gotsym; ++ unsigned long new_addr; ++ char *strtab, *symname; ++ unsigned long *entry; ++ unsigned long sym_index = got_offset / 4; ++ ++#if 0 ++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO]; ++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM]; ++ ++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr)) ++ + sym_index; ++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); ++ symname = strtab + sym->st_name; ++ ++#if 0 ++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name, ++ tpnt->symbol_scope, tpnt, ++ resolver); ++#endif ++ ++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym); ++ *entry = new_addr; ++#endif ++ ++ return new_addr; ++} ++ ++static int ++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ unsigned long rel_addr, unsigned long rel_size, ++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)) ++{ ++ Elf32_Sym *symtab; ++ Elf32_Rela *rpnt; ++ char *strtab; ++ int i; ++ ++ rpnt = (Elf32_Rela *)rel_addr; ++ rel_size /= sizeof(Elf32_Rela); ++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB]; ++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; ++ ++ for (i = 0; i < rel_size; i++, rpnt++) { ++ int symtab_index, res; ++ ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ ++ debug_sym(symtab, strtab, symtab_index); ++ debug_reloc(symtab, strtab, rpnt); ++ ++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab); ++ ++ if (res == 0) ++ continue; ++ ++ _dl_dprintf(2, "\n%s: ", _dl_progname); ++ ++ if (symtab_index) ++ _dl_dprintf(2, "symbol '%s': ", ++ strtab + symtab[symtab_index].st_name); ++ ++ if (res < 0) { ++ int reloc_type = ELF32_R_TYPE(rpnt->r_info); ++#if defined(__SUPPORT_LD_DEBUG__) ++ _dl_dprintf(2, "can't handle reloc type %s\n", ++ _dl_reltypes(reloc_type)); ++#else ++ _dl_dprintf(2, "can't handle reloc type %x\n", ++ reloc_type); ++#endif ++ _dl_exit(-res); ++ } else { ++ _dl_dprintf(2, "can't resolve symbol\n"); ++ return res; ++ } ++ } ++ ++ return 0; ++} ++ ++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope, ++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab) ++{ ++ int reloc_type; ++ int symtab_index; ++ char *symname; ++ unsigned long *reloc_addr; ++ unsigned long symbol_addr; ++#if defined(__SUPPORT_LD_DEBUG__) ++ unsigned long old_val; ++#endif ++ ++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset); ++ reloc_type = ELF32_R_TYPE(rpnt->r_info); ++ symtab_index = ELF32_R_SYM(rpnt->r_info); ++ symbol_addr = 0; ++ symname = strtab + symtab[symtab_index].st_name; ++ ++ if (symtab_index) { ++ symbol_addr = (unsigned long) ++ _dl_find_hash(strtab + symtab[symtab_index].st_name, ++ tpnt->symbol_scope, tpnt, ++ elf_machine_type_class(reloc_type)); ++ ++ /* Allow undefined references to weak symbols */ ++ if (!symbol_addr && ++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) { ++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n", ++ _dl_progname, symname); ++ return 0; ++ } ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ old_val = *reloc_addr; ++#endif ++ switch (reloc_type) { ++ case R_AVR32_NONE: ++ break; ++ case R_AVR32_GLOB_DAT: ++ case R_AVR32_JMP_SLOT: ++ *reloc_addr = symbol_addr + rpnt->r_addend; ++ break; ++ case R_AVR32_RELATIVE: ++ *reloc_addr = (unsigned long)tpnt->loadaddr ++ + rpnt->r_addend; ++ break; ++ default: ++ return -1; ++ } ++ ++#if defined(__SUPPORT_LD_DEBUG__) ++ if (_dl_debug_reloc && _dl_debug_detail) ++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n", ++ old_val, *reloc_addr); ++#endif ++ ++ return 0; ++} ++ ++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ /* TODO: Might want to support this in order to get faster ++ * startup times... */ ++} ++ ++int _dl_parse_relocation_information(struct dyn_elf *rpnt, ++ unsigned long rel_addr, ++ unsigned long rel_size) ++{ ++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size, ++ _dl_do_reloc); ++} +diff --git a/ldso/ldso/avr32/resolve.S b/ldso/ldso/avr32/resolve.S +new file mode 100644 +index 0000000..e3cb7f4 +--- /dev/null ++++ b/ldso/ldso/avr32/resolve.S +@@ -0,0 +1,28 @@ ++/* ++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as ++ * indicated in register r12 and jumps to the resolved address. ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ * ++ * Copyright (C) 2004-2007 Atmel Corporation ++ */ ++ ++#define ip r5 ++ ++ .text ++ .global _dl_linux_resolve ++ .type _dl_linux_resolve,@function ++_dl_linux_resolve: ++ /* The PLT code pushed r8 for us. It contains the address of this ++ function's GOT entry, that is entry 0. ip contains the address ++ of the GOT entry of the function we wanted to call. */ ++ stm --sp, r9-r12, lr ++ mov r11, r8 ++ sub r12, ip, r8 ++ rcall _dl_linux_resolver ++ mov ip, r12 ++ popm r8-r12,lr ++ mov pc, ip ++ .size _dl_linux_resolve, . - _dl_linux_resolve +diff --git a/ldso/ldso/dl-startup.c b/ldso/ldso/dl-startup.c +index 5cf1d04..d4294ec 100644 +--- a/ldso/ldso/dl-startup.c ++++ b/ldso/ldso/dl-startup.c +@@ -217,7 +217,9 @@ DL_START(unsigned long args) + /* some arches (like MIPS) we have to tweak the GOT before relocations */ + PERFORM_BOOTSTRAP_GOT(tpnt); + +-#else ++#endif ++ ++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__) + + /* OK, now do the relocations. We do not do a lazy binding here, so + that once we are done, we have considerably more flexibility. */ +diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c +index f4e6cac..9cdc3fe 100644 +--- a/libc/inet/resolv.c ++++ b/libc/inet/resolv.c +@@ -1643,7 +1643,7 @@ int attribute_hidden __read_etc_hosts_r(FILE * fp, const char * name, int type, + *result=result_buf; + ret=NETDB_SUCCESS; + #ifdef __UCLIBC_HAS_IPV6__ +- } else if (type == AF_INET6 && inet_pton(AF_INET6, alias[0], in6) > 0) { ++ } else if (type == AF_INET6 && inet_pton(AF_INET6, alias[0], in6) > 0) { + DPRINTF("Found INET6\n"); + addr_list6[0] = in6; + addr_list6[1] = 0; +@@ -1658,8 +1658,8 @@ int attribute_hidden __read_etc_hosts_r(FILE * fp, const char * name, int type, + } else { + DPRINTF("Error\n"); + ret=TRY_AGAIN; +- break; /* bad ip address */ +- } ++ continue; /* bad ip address, keep searching */ ++ } + + if (action!=GETHOSTENT) { + fclose(fp); +diff --git a/libc/string/avr32/Makefile b/libc/string/avr32/Makefile +new file mode 100644 +index 0000000..e19e9d9 +--- /dev/null ++++ b/libc/string/avr32/Makefile +@@ -0,0 +1,26 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++top_srcdir := ../../../ ++top_builddir := ../../../ ++ ++all: objs ++ ++include $(top_builddir)Rules.mak ++include ../Makefile.in ++include $(top_srcdir)Makerules +diff --git a/libc/string/avr32/bcopy.S b/libc/string/avr32/bcopy.S +new file mode 100644 +index 0000000..87c1e04 +--- /dev/null ++++ b/libc/string/avr32/bcopy.S +@@ -0,0 +1,26 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++#include ++ ++#ifdef __UCLIBC_SUSV3_LEGACY__ ++ ++ .text ++ .global bcopy ++ .type bcopy, @function ++ .align 1 ++bcopy: ++ /* Swap the first two arguments */ ++ eor r11, r12 ++ eor r12, r11 ++ eor r11, r12 ++ rjmp __GI_memmove ++ ++ .size bcopy, . - bcopy ++ ++#endif /* __UCLIBC_SUSV3_LEGACY__ */ +diff --git a/libc/string/avr32/bzero.S b/libc/string/avr32/bzero.S +new file mode 100644 +index 0000000..c999e65 +--- /dev/null ++++ b/libc/string/avr32/bzero.S +@@ -0,0 +1,22 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++#ifdef __UCLIBC_SUSV3_LEGACY__ ++ ++ .text ++ .global bzero ++ .type bzero, @function ++ .align 1 ++bzero: ++ mov r10, r11 ++ mov r11, 0 ++ rjmp __memset ++ ++ .size bzero, . - bzero ++ ++#endif /* __UCLIBC_SUSV3_LEGACY__ */ +diff --git a/libc/string/avr32/memcmp.S b/libc/string/avr32/memcmp.S +new file mode 100644 +index 0000000..ae6cc91 +--- /dev/null ++++ b/libc/string/avr32/memcmp.S +@@ -0,0 +1,61 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++#include ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global memcmp ++ .type memcmp, @function ++ .align 1 ++memcmp: ++ sub len, 4 ++ brlt .Lless_than_4 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne .Lfound_word ++ sub len, 4 ++ brge 1b ++ ++.Lless_than_4: ++ sub len, -4 ++ reteq 0 ++ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ sub len, 1 ++ brgt 1b ++ ++ retal 0 ++ ++.Lfound_word: ++ mov len, 4 ++ ++2: bfextu r11, r9, 24, 8 ++ bfextu r12, r8, 24, 8 ++ sub r12, r11 ++ retne r12 ++ lsl r8, 8 ++ lsl r9, 8 ++ sub len, 1 ++ brne 2b ++ retal r12 ++ ++ .size memcmp, . - memcmp ++ ++libc_hidden_def(memcmp) ++#ifdef __UCLIBC_SUSV3_LEGACY__ ++strong_alias(memcmp,bcmp) ++#endif +diff --git a/libc/string/avr32/memcpy.S b/libc/string/avr32/memcpy.S +new file mode 100644 +index 0000000..bf091ab +--- /dev/null ++++ b/libc/string/avr32/memcpy.S +@@ -0,0 +1,111 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++/* Don't use r12 as dst since we must return it unmodified */ ++#define dst r9 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memcpy ++ .type memcpy, @function ++memcpy: ++ pref src[0] ++ mov dst, r12 ++ ++ /* If we have less than 32 bytes, don't do anything fancy */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, src++ ++ st.b dst++, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, dst ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ ldm src, r0-r7 ++ sub src, -32 ++ stm dst, r0-r7 ++ sub dst, -32 ++ sub len, 32 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ ldm src, r0-r3 ++ sub src, -16 ++ sub len, 16 ++ stm dst, r0-r3 ++ sub dst, -16 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ neg len ++ add pc, pc, len << 2 ++ .rept 15 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ rsub r8, r8, 32 ++ sub len, r8 ++1: ld.ub r0, src++ ++ st.b dst++, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[0] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, src++ ++ st.w dst++, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, src++ ++ st.b dst++, r0 ++ .endr ++ ++ popm r0-r7, pc ++ .size memcpy, . - memcpy ++ ++libc_hidden_def(memcpy) +diff --git a/libc/string/avr32/memmove.S b/libc/string/avr32/memmove.S +new file mode 100644 +index 0000000..98287c5 +--- /dev/null ++++ b/libc/string/avr32/memmove.S +@@ -0,0 +1,116 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++#define dst r12 ++#define src r11 ++#define len r10 ++ ++ .text ++ .global memmove ++ .type memmove, @function ++memmove: ++ cp.w src, dst ++ brge __GI_memcpy ++ ++ add dst, len ++ add src, len ++ pref src[-1] ++ ++ /* ++ * The rest is basically the same as in memcpy.S except that ++ * the direction is reversed. ++ */ ++ cp.w len, 32 ++ brge .Lmore_than_31 ++ ++ sub len, 1 ++ retlt r12 ++1: ld.ub r8, --src ++ st.b --dst, r8 ++ sub len, 1 ++ brge 1b ++ retal r12 ++ ++.Lmore_than_31: ++ pushm r0-r7, lr ++ ++ /* Check alignment */ ++ mov r8, src ++ andl r8, 31, COH ++ brne .Lunaligned_src ++ mov r8, r12 ++ andl r8, 3, COH ++ brne .Lunaligned_dst ++ ++.Laligned_copy: ++ sub len, 32 ++ brlt .Lless_than_32 ++ ++1: /* Copy 32 bytes at a time */ ++ sub src, 32 ++ ldm src, r0-r7 ++ sub dst, 32 ++ sub len, 32 ++ stm dst, r0-r7 ++ brge 1b ++ ++.Lless_than_32: ++ /* Copy 16 more bytes if possible */ ++ sub len, -16 ++ brlt .Lless_than_16 ++ sub src, 16 ++ ldm src, r0-r3 ++ sub dst, 16 ++ sub len, 16 ++ stm dst, r0-r3 ++ ++.Lless_than_16: ++ /* Do the remaining as byte copies */ ++ sub len, -16 ++ breq 2f ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub len, 1 ++ brne 1b ++ ++2: popm r0-r7, pc ++ ++.Lunaligned_src: ++ /* Make src cacheline-aligned. r8 = (src & 31) */ ++ sub len, r8 ++1: ld.ub r0, --src ++ st.b --dst, r0 ++ sub r8, 1 ++ brne 1b ++ ++ /* If dst is word-aligned, we're ready to go */ ++ pref src[-4] ++ mov r8, 3 ++ tst dst, r8 ++ breq .Laligned_copy ++ ++.Lunaligned_dst: ++ /* src is aligned, but dst is not. Expect bad performance */ ++ sub len, 4 ++ brlt 2f ++1: ld.w r0, --src ++ st.w --dst, r0 ++ sub len, 4 ++ brge 1b ++ ++2: neg len ++ add pc, pc, len << 2 ++ .rept 3 ++ ld.ub r0, --src ++ st.b --dst, r0 ++ .endr ++ ++ popm r0-r7, pc ++ .size memmove, . - memmove ++ ++libc_hidden_def(memmove) +diff --git a/libc/string/avr32/memset.S b/libc/string/avr32/memset.S +new file mode 100644 +index 0000000..33cfaed +--- /dev/null ++++ b/libc/string/avr32/memset.S +@@ -0,0 +1,70 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++#include ++ ++#define s r12 ++#define c r11 ++#define n r10 ++ ++ .text ++ .global memset ++ .type memset, @function ++ ++ .global __memset ++ .hidden __memset ++ .type __memset, @function ++ ++ .align 1 ++memset: ++__memset: ++ cp.w n, 32 ++ mov r9, s ++ brge .Llarge_memset ++ ++ sub n, 1 ++ retlt s ++1: st.b s++, c ++ sub n, 1 ++ brge 1b ++ ++ retal r9 ++ ++.Llarge_memset: ++ mov r8, r11 ++ mov r11, 3 ++ bfins r8, r8, 8, 8 ++ bfins r8, r8, 16, 16 ++ tst s, r11 ++ breq 2f ++ ++1: st.b s++, r8 ++ sub n, 1 ++ tst s, r11 ++ brne 1b ++ ++2: mov r11, r9 ++ mov r9, r8 ++ sub n, 8 ++ ++3: st.d s++, r8 ++ sub n, 8 ++ brge 3b ++ ++ /* If we are done, n == -8 and we'll skip all st.b insns below */ ++ neg n ++ lsl n, 1 ++ add pc, n ++ .rept 7 ++ st.b s++, r8 ++ .endr ++ retal r11 ++ ++ .size memset, . - memset ++ ++libc_hidden_def(memset) +diff --git a/libc/string/avr32/strcmp.S b/libc/string/avr32/strcmp.S +new file mode 100644 +index 0000000..f73bd43 +--- /dev/null ++++ b/libc/string/avr32/strcmp.S +@@ -0,0 +1,91 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++#include ++ ++#define s1 r12 ++#define s2 r11 ++#define len r10 ++ ++ .text ++ .global strcmp ++ .type strcmp, @function ++ .align 1 ++strcmp: ++ mov r8, 3 ++ tst s1, r8 ++ brne .Lunaligned_s1 ++ tst s2, r8 ++ brne .Lunaligned_s2 ++ ++1: ld.w r8, s1++ ++ ld.w r9, s2++ ++ cp.w r8, r9 ++ brne 2f ++ tnbz r8 ++ brne 1b ++ retal 0 ++ ++2: bfextu r12, r8, 24, 8 ++ bfextu r11, r9, 24, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 16, 8 ++ bfextu r11, r9, 16, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 8, 8 ++ bfextu r11, r9, 8, 8 ++ sub r12, r11 ++ retne r12 ++ cp.w r11, 0 ++ reteq 0 ++ bfextu r12, r8, 0, 8 ++ bfextu r11, r9, 0, 8 ++ sub r12, r11 ++ retal r12 ++ ++.Lunaligned_s1: ++3: tst s1, r8 ++ breq 4f ++ ld.ub r10, s1++ ++ ld.ub r9, s2++ ++ sub r10, r9 ++ retne r10 ++ cp.w r9, 0 ++ brne 3b ++ retal r10 ++ ++4: tst s2, r8 ++ breq 1b ++ ++.Lunaligned_s2: ++ /* ++ * s1 and s2 can't both be aligned, and unaligned word loads ++ * can trigger spurious exceptions if we cross a page boundary. ++ * Do it the slow way... ++ */ ++1: ld.ub r8, s1++ ++ ld.ub r9, s2++ ++ sub r8, r9 ++ retne r8 ++ cp.w r9, 0 ++ brne 1b ++ retal 0 ++ ++ .size strcmp, . - strcmp ++ ++libc_hidden_def(strcmp) ++#ifndef __UCLIBC_HAS_LOCALE__ ++strong_alias(strcmp, strcoll) ++libc_hidden_def(strcoll) ++#endif +diff --git a/libc/string/avr32/strlen.S b/libc/string/avr32/strlen.S +new file mode 100644 +index 0000000..5223e53 +--- /dev/null ++++ b/libc/string/avr32/strlen.S +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++#include ++ ++#define str r12 ++ ++ .text ++ .global strlen ++ .type strlen, @function ++strlen: ++ mov r11, r12 ++ ++ mov r9, str ++ andl r9, 3, COH ++ brne .Lunaligned_str ++ ++1: ld.w r8, str++ ++ tnbz r8 ++ brne 1b ++ ++ sub r12, r11 ++ bfextu r9, r8, 24, 8 ++ cp.w r9, 0 ++ subeq r12, 4 ++ reteq r12 ++ bfextu r9, r8, 16, 8 ++ cp.w r9, 0 ++ subeq r12, 3 ++ reteq r12 ++ bfextu r9, r8, 8, 8 ++ cp.w r9, 0 ++ subeq r12, 2 ++ reteq r12 ++ sub r12, 1 ++ retal r12 ++ ++.Lunaligned_str: ++ add pc, pc, r9 << 3 ++ sub r0, r0, 0 /* 4-byte nop */ ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ breq 1f ++ ld.ub r8, str++ ++ sub r8, r8, 0 ++ brne 1b ++ ++1: sub r12, 1 ++ sub r12, r11 ++ retal r12 ++ ++ .size strlen, . - strlen ++ ++libc_hidden_def(strlen) +diff --git a/libc/sysdeps/linux/avr32/Makefile b/libc/sysdeps/linux/avr32/Makefile +new file mode 100644 +index 0000000..338abc0 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/Makefile +@@ -0,0 +1,25 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2003 Erik Andersen ++# ++# This program is free software; you can redistribute it and/or modify it under ++# the terms of the GNU Library 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 Library General Public License for more ++# details. ++# ++# You should have received a copy of the GNU Library 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 ++ ++top_srcdir=../../../../ ++top_builddir=../../../../ ++all: objs ++ ++include $(top_builddir)Rules.mak ++include Makefile.arch ++include $(top_srcdir)Makerules +diff --git a/libc/sysdeps/linux/avr32/Makefile.arch b/libc/sysdeps/linux/avr32/Makefile.arch +new file mode 100644 +index 0000000..44fc01e +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/Makefile.arch +@@ -0,0 +1,13 @@ ++# Makefile for uClibc ++# ++# Copyright (C) 2000-2005 Erik Andersen ++# ++# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++# ++ ++CSRC := brk.c clone.c mmap.c sigaction.c ++ ++SSRC := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ ++ sigrestorer.S syscall.S vfork.S ++ ++include $(top_srcdir)/libc/sysdeps/linux/Makefile.commonarch +diff --git a/libc/sysdeps/linux/avr32/__longjmp.S b/libc/sysdeps/linux/avr32/__longjmp.S +new file mode 100644 +index 0000000..6154bb2 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/__longjmp.S +@@ -0,0 +1,21 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++ .global __longjmp ++ .type __longjmp,"function" ++ .align 1 ++__longjmp: ++ ldm r12++, r0-r8,sp,lr ++ mustr r8 /* restore status register (lower half) */ ++ cp r11, 0 /* can't return zero */ ++ frs ++ moveq r11, 1 ++ retal r11 ++ .size __longjmp, . - __longjmp ++ ++libc_hidden_def(__longjmp) +diff --git a/libc/sysdeps/linux/avr32/bits/atomic.h b/libc/sysdeps/linux/avr32/bits/atomic.h +new file mode 100644 +index 0000000..e6be41f +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/atomic.h +@@ -0,0 +1,120 @@ ++/* ++ * Copyright (C) 2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#ifndef _AVR32_BITS_ATOMIC_H ++#define _AVR32_BITS_ATOMIC_H 1 ++ ++#include ++ ++typedef int32_t atomic32_t; ++typedef uint32_t uatomic32_t; ++typedef int_fast32_t atomic_fast32_t; ++typedef uint_fast32_t uatomic_fast32_t; ++ ++typedef intptr_t atomicptr_t; ++typedef uintptr_t uatomicptr_t; ++typedef intmax_t atomic_max_t; ++typedef uintmax_t uatomic_max_t; ++ ++#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ ++ (abort(), 0) ++ ++#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ ++ (abort(), 0) ++ ++#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ ++ ({ \ ++ __typeof__(*(mem)) __prev; \ ++ __asm__ __volatile__( \ ++ "/* __arch_compare_and_exchange_val_32_acq */\n" \ ++ "1: ssrf 5\n" \ ++ " ld.w %[result], %[m]\n" \ ++ " cp.w %[result], %[old]\n" \ ++ " brne 2f\n" \ ++ " stcond %[m], %[new]\n" \ ++ " brne 1b\n" \ ++ "2:" \ ++ : [result] "=&r"(__result), [m] "=m"(*(mem)) \ ++ : "m"(*(mem)), [old] "ir"(oldval), \ ++ [new] "r"(newval) \ ++ : "memory", "cc"); \ ++ __prev; \ ++ }) ++ ++#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ ++ (abort(), 0) ++ ++#define __arch_exchange_32_acq(mem, newval) \ ++ ({ \ ++ __typeof__(*(mem)) __oldval; \ ++ __asm__ __volatile__( \ ++ "/*__arch_exchange_32_acq */\n" \ ++ " xchg %[old], %[m], %[new]" \ ++ : [old] "=&r"(__oldval) \ ++ : [m] "r"(mem), [new] "r"(newval) \ ++ : "memory"); \ ++ __oldval; \ ++ }) ++ ++#define __arch_atomic_exchange_and_add_32(mem, value) \ ++ ({ \ ++ __typeof__(*(mem)) __oldval, __tmp; \ ++ __asm__ __volatile__( \ ++ "/* __arch_atomic_exchange_and_add_32 */\n" \ ++ "1: ssrf 5\n" \ ++ " ld.w %[old], %[m]\n" \ ++ " add %[tmp], %[old], %[val]\n" \ ++ " stcond %[m], %[tmp]\n" \ ++ " brne 1b" \ ++ : [old] "=&r"(__oldval), [tmp] "=&r"(__tmp), \ ++ [m] "=m"(*(mem)) \ ++ : "m"(*(mem)), [val] "r"(value) \ ++ : "memory", "cc"); \ ++ __oldval; \ ++ }) ++ ++#define __arch_atomic_decrement_if_positive_32(mem) \ ++ ({ \ ++ __typeof__(*(mem)) __oldval, __tmp; \ ++ __asm__ __volatile__( \ ++ "/* __arch_atomic_decrement_if_positive_32 */\n" \ ++ "1: ssrf 5\n" \ ++ " ld.w %[old], %[m]\n" \ ++ " sub %[tmp], %[old], 1\n" \ ++ " brlt 2f\n" \ ++ " stcond %[m], %[tmp]\n" \ ++ " brne 1b" \ ++ "2:" \ ++ : [old] "=&r"(__oldval), [tmp] "=&r"(__tmp), \ ++ [m] "=m"(*(mem)) \ ++ : "m"(*(mem)) \ ++ : "memory", "cc"); \ ++ __oldval; \ ++ }) ++ ++#define atomic_exchange_acq(mem, newval) \ ++ ({ \ ++ if (sizeof(*(mem)) != 4) \ ++ abort(); \ ++ __arch_exchange_32_acq(mem, newval); \ ++ }) ++ ++#define atomic_exchange_and_add(mem, newval) \ ++ ({ \ ++ if (sizeof(*(mem)) != 4) \ ++ abort(); \ ++ __arch_atomic_exchange_and_add_32(mem, newval); \ ++ }) ++ ++#define atomic_decrement_if_positive(mem) \ ++ ({ \ ++ if (sizeof(*(mem)) != 4) \ ++ abort(); \ ++ __arch_atomic_decrement_if_positive_32(mem); \ ++ }) ++ ++#endif /* _AVR32_BITS_ATOMIC_H */ +diff --git a/libc/sysdeps/linux/avr32/bits/byteswap.h b/libc/sysdeps/linux/avr32/bits/byteswap.h +new file mode 100644 +index 0000000..1c030b9 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/byteswap.h +@@ -0,0 +1,70 @@ ++/* ++ * Copyright (C) 2005 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H ++# error "Never use directly; include instead." ++#endif ++ ++#ifndef _BITS_BYTESWAP_H ++#define _BITS_BYTESWAP_H 1 ++ ++/* Swap bytes in 16 bit value. */ ++#if defined __GNUC__ ++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x)) ++#else ++/* This is better than nothing. */ ++static __inline unsigned short int ++__bswap_16 (unsigned short int __bsx) ++{ ++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); ++} ++#endif ++ ++/* Swap bytes in 32 bit value. */ ++#if defined __GNUC__ ++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x)) ++#else ++static __inline unsigned int ++__bswap_32 (unsigned int __bsx) ++{ ++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | ++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); ++} ++#endif ++ ++#if defined __GNUC__ ++/* Swap bytes in 64 bit value. */ ++# define __bswap_constant_64(x) \ ++ ((((x) & 0xff00000000000000ull) >> 56) \ ++ | (((x) & 0x00ff000000000000ull) >> 40) \ ++ | (((x) & 0x0000ff0000000000ull) >> 24) \ ++ | (((x) & 0x000000ff00000000ull) >> 8) \ ++ | (((x) & 0x00000000ff000000ull) << 8) \ ++ | (((x) & 0x0000000000ff0000ull) << 24) \ ++ | (((x) & 0x000000000000ff00ull) << 40) \ ++ | (((x) & 0x00000000000000ffull) << 56)) ++ ++# define __bswap_64(x) \ ++ (__extension__ \ ++ ({ \ ++ union { \ ++ __extension__ unsigned long long int __ll; \ ++ unsigned int __l[2]; \ ++ } __w, __r; \ ++ if (__builtin_constant_p(x)) \ ++ __r.__ll = __bswap_constant_64(x); \ ++ else { \ ++ __w.__ll = (x); \ ++ __r.__l[0] = __bswap_32(__w.__l[1]); \ ++ __r.__l[1] = __bswap_32(__w.__l[0]); \ ++ } \ ++ __r.__ll; \ ++ })) ++#endif ++ ++#endif /* _BITS_BYTESWAP_H */ +diff --git a/libc/sysdeps/linux/avr32/bits/endian.h b/libc/sysdeps/linux/avr32/bits/endian.h +new file mode 100644 +index 0000000..7bb6358 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/endian.h +@@ -0,0 +1,7 @@ ++/* AVR32 is big-endian */ ++ ++#ifndef _ENDIAN_H ++# error "Never use directly; include instead." ++#endif ++ ++#define __BYTE_ORDER __BIG_ENDIAN +diff --git a/libc/sysdeps/linux/avr32/bits/fcntl.h b/libc/sysdeps/linux/avr32/bits/fcntl.h +new file mode 100644 +index 0000000..1abff17 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/fcntl.h +@@ -0,0 +1,165 @@ ++#ifndef _FCNTL_H ++# error "Never use directly; include instead." ++#endif ++ ++#include ++ ++/* ++ * open/fcntl - O_SYNC is only implemented on blocks devices and on files ++ * located on an ext2 file system ++ */ ++#define O_ACCMODE 00000003 ++#define O_RDONLY 00000000 ++#define O_WRONLY 00000001 ++#define O_RDWR 00000002 ++#define O_CREAT 00000100 /* not fcntl */ ++#define O_EXCL 00000200 /* not fcntl */ ++#define O_NOCTTY 00000400 /* not fcntl */ ++#define O_TRUNC 00001000 /* not fcntl */ ++#define O_APPEND 00002000 ++#define O_NONBLOCK 00004000 ++#define O_NDELAY O_NONBLOCK ++#define O_SYNC 00010000 ++#define O_ASYNC 00020000 ++ ++#ifdef __USE_GNU ++# define O_DIRECT 00040000 /* must be a directory */ ++# define O_DIRECTORY 00200000 /* direct disk access */ ++# define O_NOFOLLOW 00400000 /* don't follow links */ ++# define O_NOATIME 01000000 /* don't set atime */ ++#endif ++ ++#ifdef __USE_LARGEFILE64 ++# define O_LARGEFILE 00100000 ++#endif ++ ++/* For now Linux has synchronisity options for data and read operations. ++ We define the symbols here but let them do the same as O_SYNC since ++ this is a superset. */ ++#if defined __USE_POSIX199309 || defined __USE_UNIX98 ++# define O_DSYNC O_SYNC /* Synchronize data. */ ++# define O_RSYNC O_SYNC /* Synchronize read operations. */ ++#endif ++ ++#define F_DUPFD 0 /* dup */ ++#define F_GETFD 1 /* get close_on_exec */ ++#define F_SETFD 2 /* set/clear close_on_exec */ ++#define F_GETFL 3 /* get file->f_flags */ ++#define F_SETFL 4 /* set file->f_flags */ ++ ++#ifndef __USE_FILE_OFFSET64 ++# define F_GETLK 5 ++# define F_SETLK 6 ++# define F_SETLKW 7 ++#else ++# define F_GETLK F_GETLK64 ++# define F_SETLK F_SETLK64 ++# define F_SETLKW F_SETLKW64 ++#endif ++#define F_GETLK64 12 /* using 'struct flock64' */ ++#define F_SETLK64 13 ++#define F_SETLKW64 14 ++ ++#if defined __USE_BSD || defined __USE_XOPEN2K ++# define F_SETOWN 8 /* for sockets. */ ++# define F_GETOWN 9 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETSIG 10 /* for sockets. */ ++# define F_GETSIG 11 /* for sockets. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETLEASE 1024 /* Set a lease. */ ++# define F_GETLEASE 1025 /* Enquire what lease is active. */ ++# define F_NOTIFY 1026 /* Request notfications on a directory. */ ++#endif ++ ++/* for F_[GET|SET]FL */ ++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++/* for posix fcntl() and lockf() */ ++#define F_RDLCK 0 ++#define F_WRLCK 1 ++#define F_UNLCK 2 ++ ++/* for old implementation of bsd flock () */ ++#define F_EXLCK 4 /* or 3 */ ++#define F_SHLCK 8 /* or 4 */ ++ ++/* for leases */ ++#define F_INPROGRESS 16 ++ ++#ifdef __USE_BSD ++/* operations for bsd flock(), also used by the kernel implementation */ ++# define LOCK_SH 1 /* shared lock */ ++# define LOCK_EX 2 /* exclusive lock */ ++# define LOCK_NB 4 /* or'd with one of the above to prevent ++ blocking */ ++# define LOCK_UN 8 /* remove lock */ ++#endif ++ ++#ifdef __USE_GNU ++# define LOCK_MAND 32 /* This is a mandatory flock */ ++# define LOCK_READ 64 /* ... Which allows concurrent ++ read operations */ ++# define LOCK_WRITE 128 /* ... Which allows concurrent ++ write operations */ ++# define LOCK_RW 192 /* ... Which allows concurrent ++ read & write ops */ ++#endif ++ ++#ifdef __USE_GNU ++/* Types of directory notifications that may be requested with F_NOTIFY. */ ++# define DN_ACCESS 0x00000001 /* File accessed. */ ++# define DN_MODIFY 0x00000002 /* File modified. */ ++# define DN_CREATE 0x00000004 /* File created. */ ++# define DN_DELETE 0x00000008 /* File removed. */ ++# define DN_RENAME 0x00000010 /* File renamed. */ ++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ ++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ ++#endif ++ ++struct flock { ++ short l_type; ++ short l_whence; ++#ifndef __USE_FILE_OFFSET64 ++ __off_t l_start; ++ __off_t l_len; ++#else ++ __off64_t l_start; ++ __off64_t l_len; ++#endif ++ __pid_t l_pid; ++}; ++ ++#ifdef __USE_LARGEFILE64 ++struct flock64 { ++ short l_type; ++ short l_whence; ++ __off64_t l_start; ++ __off64_t l_len; ++ __pid_t l_pid; ++}; ++#endif ++ ++/* Define some more compatibility macros to be backward compatible with ++ * BSD systems which did not managed to hide these kernel macros. */ ++#ifdef __USE_BSD ++# define FAPPEND O_APPEND ++# define FFSYNC O_FSYNC ++# define FASYNC O_ASYNC ++# define FNONBLOCK O_NONBLOCK ++# define FNDELAY O_NDELAY ++#endif /* Use BSD. */ ++ ++/* Advise to `posix_fadvise'. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ ++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ ++#endif +diff --git a/libc/sysdeps/linux/avr32/bits/kernel_stat.h b/libc/sysdeps/linux/avr32/bits/kernel_stat.h +new file mode 100644 +index 0000000..f97d23b +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/kernel_stat.h +@@ -0,0 +1,67 @@ ++#ifndef _BITS_STAT_STRUCT_H ++#define _BITS_STAT_STRUCT_H ++ ++#ifndef _LIBC ++#error bits/kernel_stat.h is for internal uClibc use only! ++#endif ++ ++/* ++ * This file provides struct stat, taken from kernel 2.6.4. Verified ++ * to match kernel 2.6.22. ++ */ ++ ++struct kernel_stat { ++ unsigned long st_dev; ++ unsigned long st_ino; ++ unsigned short st_mode; ++ unsigned short st_nlink; ++ unsigned short st_uid; ++ unsigned short st_gid; ++ unsigned long st_rdev; ++ unsigned long st_size; ++ unsigned long st_blksize; ++ unsigned long st_blocks; ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ unsigned long __unused4; ++ unsigned long __unused5; ++}; ++ ++#define STAT_HAVE_NSEC 1 ++ ++struct kernel_stat64 { ++ unsigned long long st_dev; ++ ++ unsigned long long st_ino; ++ unsigned int st_mode; ++ unsigned int st_nlink; ++ ++ unsigned long st_uid; ++ unsigned long st_gid; ++ ++ unsigned long long st_rdev; ++ ++ long long st_size; ++ unsigned long __pad1; ++ unsigned long st_blksize; ++ ++ unsigned long long st_blocks; ++ ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++#endif /* _BITS_STAT_STRUCT_H */ +diff --git a/libc/sysdeps/linux/avr32/bits/kernel_types.h b/libc/sysdeps/linux/avr32/bits/kernel_types.h +new file mode 100644 +index 0000000..f7d8b52 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/kernel_types.h +@@ -0,0 +1,55 @@ ++/* Note that we use the exact same include guard #define names ++ * as asm/posix_types.h. This will avoid gratuitous conflicts ++ * with the posix_types.h kernel header, and will ensure that ++ * our private content, and not the kernel header, will win. ++ * -Erik ++ */ ++#ifndef __ASM_AVR32_POSIX_TYPES_H ++#define __ASM_AVR32_POSIX_TYPES_H ++ ++/* ++ * This file is generally used by user-level software, so you need to ++ * be a little careful about namespace pollution etc. Also, we cannot ++ * assume GCC is being used. ++ */ ++ ++typedef unsigned long __kernel_dev_t; ++typedef unsigned long __kernel_ino_t; ++typedef unsigned short __kernel_mode_t; ++typedef unsigned short __kernel_nlink_t; ++typedef long __kernel_off_t; ++typedef int __kernel_pid_t; ++typedef unsigned short __kernel_ipc_pid_t; ++typedef unsigned int __kernel_uid_t; ++typedef unsigned int __kernel_gid_t; ++typedef unsigned long __kernel_size_t; ++typedef long __kernel_ssize_t; ++typedef int __kernel_ptrdiff_t; ++typedef long __kernel_time_t; ++typedef long __kernel_suseconds_t; ++typedef long __kernel_clock_t; ++typedef int __kernel_timer_t; ++typedef int __kernel_clockid_t; ++typedef int __kernel_daddr_t; ++typedef char * __kernel_caddr_t; ++typedef unsigned short __kernel_uid16_t; ++typedef unsigned short __kernel_gid16_t; ++typedef unsigned int __kernel_uid32_t; ++typedef unsigned int __kernel_gid32_t; ++typedef unsigned short __kernel_old_uid_t; ++typedef unsigned short __kernel_old_gid_t; ++typedef unsigned short __kernel_old_dev_t; ++ ++#ifdef __GNUC__ ++typedef long long __kernel_loff_t; ++#endif ++ ++typedef struct { ++#if defined(__USE_ALL) ++ int val[2]; ++#else ++ int __val[2]; ++#endif ++} __kernel_fsid_t; ++ ++#endif /* __ASM_AVR32_POSIX_TYPES_H */ +diff --git a/libc/sysdeps/linux/avr32/bits/mman.h b/libc/sysdeps/linux/avr32/bits/mman.h +new file mode 100644 +index 0000000..5f6e3c3 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/mman.h +@@ -0,0 +1,103 @@ ++/* Definitions for POSIX memory map interface. Linux/AVR32 version. ++ Copyright (C) 1997, 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_MMAN_H ++# error "Never include this file directly. Use instead" ++#endif ++ ++/* The following definitions basically come from the kernel headers. ++ But the kernel header is not namespace clean. */ ++ ++ ++/* Protections are chosen from these bits, OR'd together. The ++ implementation does not necessarily support PROT_EXEC or PROT_WRITE ++ without PROT_READ. The only guarantees are that no writing will be ++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ ++ ++#define PROT_READ 0x1 /* Page can be read. */ ++#define PROT_WRITE 0x2 /* Page can be written. */ ++#define PROT_EXEC 0x4 /* Page can be executed. */ ++#define PROT_NONE 0x0 /* Page can not be accessed. */ ++#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of ++ growsdown vma (mprotect only). */ ++#define PROT_GROWSUP 0x02000000 /* Extend change to start of ++ growsup vma (mprotect only). */ ++ ++/* Sharing types (must choose one and only one of these). */ ++#define MAP_SHARED 0x01 /* Share changes. */ ++#define MAP_PRIVATE 0x02 /* Changes are private. */ ++#ifdef __USE_MISC ++# define MAP_TYPE 0x0f /* Mask for type of mapping. */ ++#endif ++ ++/* Other flags. */ ++#define MAP_FIXED 0x10 /* Interpret addr exactly. */ ++#ifdef __USE_MISC ++# define MAP_FILE 0 ++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ ++# define MAP_ANON MAP_ANONYMOUS ++#endif ++ ++/* These are Linux-specific. */ ++#ifdef __USE_MISC ++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ ++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ ++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ ++# define MAP_LOCKED 0x2000 /* Lock the mapping. */ ++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ ++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ ++# define MAP_NONBLOCK 0x10000 /* do not block on IO */ ++#endif ++ ++/* Flags to `msync'. */ ++#define MS_ASYNC 1 /* Sync memory asynchronously. */ ++#define MS_SYNC 4 /* Synchronous memory sync. */ ++#define MS_INVALIDATE 2 /* Invalidate the caches. */ ++ ++/* Flags for `mlockall'. */ ++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ ++#define MCL_FUTURE 2 /* Lock all additions to address ++ space. */ ++ ++/* Flags for `mremap'. */ ++#ifdef __USE_GNU ++# define MREMAP_MAYMOVE 1 ++# define MREMAP_FIXED 2 ++#endif ++ ++/* Advise to `madvise'. */ ++#ifdef __USE_BSD ++# define MADV_NORMAL 0 /* No further special treatment. */ ++# define MADV_RANDOM 1 /* Expect random page references. */ ++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define MADV_WILLNEED 3 /* Will need these pages. */ ++# define MADV_DONTNEED 4 /* Don't need these pages. */ ++# define MADV_REMOVE 9 /* Remove these pages and resources. */ ++# define MADV_DONTFORK 10 /* Do not inherit across fork. */ ++# define MADV_DOFORK 11 /* Do inherit across fork. */ ++#endif ++ ++/* The POSIX people had to invent similar names for the same things. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif +diff --git a/libc/sysdeps/linux/avr32/bits/setjmp.h b/libc/sysdeps/linux/avr32/bits/setjmp.h +new file mode 100644 +index 0000000..78348a3 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/setjmp.h +@@ -0,0 +1,30 @@ ++/* ++ * Copyright (C) 2004-2005 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#ifndef _BITS_SETJMP_H ++#define _BITS_SETJMP_H 1 ++ ++#if !defined _SETJMP_H && !defined _PTHREAD_H ++# error "Never include directly; use instead." ++#endif ++ ++#ifndef _ASM ++/* ++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are ++ * not saved. ++ */ ++typedef int __jmp_buf[11]; ++#endif ++ ++#define __JMP_BUF_SP 4 ++ ++/* Test if longjmp to JMPBUF would unwind the frame containing a local ++ variable at ADDRESS. */ ++#define _JMPBUF_UNWINDS(jmpbuf, address) \ ++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP])) ++ ++#endif /* _BITS_SETJMP_H */ +diff --git a/libc/sysdeps/linux/avr32/bits/stackinfo.h b/libc/sysdeps/linux/avr32/bits/stackinfo.h +new file mode 100644 +index 0000000..29b8452 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/stackinfo.h +@@ -0,0 +1,28 @@ ++/* Copyright (C) 1999 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* This file contains a bit of information about the stack allocation ++ of the processor. */ ++ ++#ifndef _STACKINFO_H ++#define _STACKINFO_H 1 ++ ++/* On AVR32 the stack grows down. */ ++#define _STACK_GROWS_DOWN 1 ++ ++#endif /* stackinfo.h */ +diff --git a/libc/sysdeps/linux/avr32/bits/syscalls.h b/libc/sysdeps/linux/avr32/bits/syscalls.h +new file mode 100644 +index 0000000..22ac059 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/syscalls.h +@@ -0,0 +1,143 @@ ++#ifndef _BITS_SYSCALLS_H ++#define _BITS_SYSCALLS_H ++#ifndef _SYSCALL_H ++# error "Never use directly; include instead." ++#endif ++ ++/* ++ * This includes the `__NR_' syscall numbers taken from the ++ * Linux kernel header files. It also defines the traditional ++ * `SYS_' macros for older programs. ++ */ ++#include ++ ++#ifndef __ASSEMBLER__ ++ ++#include ++ ++#define SYS_ify(syscall_name) (__NR_##syscall_name) ++ ++#undef _syscall0 ++#define _syscall0(type,name) \ ++ type name(void) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 0)); \ ++ } ++ ++#undef _syscall1 ++#define _syscall1(type,name,type1,arg1) \ ++ type name(type1 arg1) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \ ++ } ++ ++#undef _syscall2 ++#define _syscall2(type,name,type1,arg1,type2,arg2) \ ++ type name(type1 arg1, type2 arg2) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \ ++ } ++ ++#undef _syscall3 ++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ ++ type name(type1 arg1, type2 arg2, type3 arg3) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 3, arg1, \ ++ arg2, arg3)); \ ++ } ++ ++#undef _syscall4 ++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \ ++ arg3, arg4)); \ ++ } ++ ++#undef _syscall5 ++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \ ++ arg3, arg4, arg5)); \ ++ } ++ ++#undef _syscall6 ++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \ ++ type4,arg4,type5,arg5,type6,arg6) \ ++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ ++ type5 arg5, type6 arg6) \ ++ { \ ++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \ ++ arg4, arg5, arg6)); \ ++ } ++ ++#undef unlikely ++#define unlikely(x) __builtin_expect((x), 0) ++ ++#undef INLINE_SYSCALL ++#define INLINE_SYSCALL(name, nr, args...) \ ++ ({ \ ++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \ ++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \ ++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \ ++ _sys_result = (unsigned int) -1; \ ++ } \ ++ (int) _sys_result; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) do { } while(0) ++ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++ ({ \ ++ register int _a1 asm ("r12"); \ ++ register int _scno asm("r8") = SYS_ify(name); \ ++ LOAD_ARGS_##nr (args); \ ++ asm volatile ("scall /* syscall " #name " */" \ ++ : "=r" (_a1) \ ++ : "r"(_scno) ASM_ARGS_##nr \ ++ : "cc", "memory"); \ ++ _a1; \ ++ }) ++ ++#undef INTERNAL_SYSCALL_ERROR_P ++#define INTERNAL_SYSCALL_ERROR_P(val, err) \ ++ ((unsigned int)(val) >= 0xfffff001U) ++ ++#undef INTERNAL_SYSCALL_ERRNO ++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val)) ++ ++#define LOAD_ARGS_0() do { } while(0) ++#define ASM_ARGS_0 ++#define LOAD_ARGS_1(a1) \ ++ _a1 = (int) (a1); \ ++ LOAD_ARGS_0() ++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1) ++#define LOAD_ARGS_2(a1, a2) \ ++ register int _a2 asm("r11") = (int)(a2); \ ++ LOAD_ARGS_1(a1) ++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2) ++#define LOAD_ARGS_3(a1, a2, a3) \ ++ register int _a3 asm("r10") = (int)(a3); \ ++ LOAD_ARGS_2(a1, a2) ++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3) ++#define LOAD_ARGS_4(a1, a2, a3, a4) \ ++ register int _a4 asm("r9") = (int)(a4); \ ++ LOAD_ARGS_3(a1, a2, a3) ++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4) ++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ ++ register int _a5 asm("r5") = (int)(a5); \ ++ LOAD_ARGS_4(a1, a2, a3, a4) ++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5) ++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ ++ register int _a6 asm("r3") = (int)(a6); \ ++ LOAD_ARGS_5(a1, a2, a3, a4, a5) ++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6) ++ ++#endif /* __ASSEMBLER__ */ ++#endif /* _BITS_SYSCALLS_H */ +diff --git a/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h b/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h +new file mode 100644 +index 0000000..e95e8a5 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h +@@ -0,0 +1,45 @@ ++/* ++ * Track misc arch-specific features that aren't config options ++ */ ++ ++#ifndef _BITS_UCLIBC_ARCH_FEATURES_H ++#define _BITS_UCLIBC_ARCH_FEATURES_H ++ ++/* instruction used when calling abort() to kill yourself */ ++/* trigger illegal instruction exception, same as BUG in Linux */ ++#define __UCLIBC_ABORT_INSTRUCTION__ ".short 0x5df0" ++ ++/* can your target use syscall6() for mmap ? */ ++#define __UCLIBC_MMAP_HAS_6_ARGS__ ++ ++/* does your target use syscall4() for truncate64 ? (32bit arches only) */ ++#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__ ++ ++/* does your target have a broken create_module() ? */ ++#undef __UCLIBC_BROKEN_CREATE_MODULE__ ++ ++/* does your target have to worry about older [gs]etrlimit() ? */ ++#undef __UCLIBC_HANDLE_OLDER_RLIMIT__ ++ ++/* does your target prefix all symbols with an _ ? */ ++#define __UCLIBC_NO_UNDERSCORES__ ++ ++/* does your target have an asm .set ? */ ++#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__ ++ ++/* define if target doesn't like .global */ ++#undef __UCLIBC_ASM_GLOBAL_DIRECTIVE__ ++ ++/* define if target supports .weak */ ++#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__ ++ ++/* define if target supports .weakext */ ++#undef __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__ ++ ++/* needed probably only for ppc64 */ ++#undef __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__ ++ ++/* define if target supports IEEE signed zero floats */ ++#define __UCLIBC_HAVE_SIGNED_ZERO__ ++ ++#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */ +diff --git a/libc/sysdeps/linux/avr32/bits/wordsize.h b/libc/sysdeps/linux/avr32/bits/wordsize.h +new file mode 100644 +index 0000000..1b5842a +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bits/wordsize.h +@@ -0,0 +1 @@ ++#define __WORDSIZE 32 +diff --git a/libc/sysdeps/linux/avr32/brk.c b/libc/sysdeps/linux/avr32/brk.c +new file mode 100644 +index 0000000..a54b49a +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/brk.c +@@ -0,0 +1,31 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#include ++#include ++#include ++ ++libc_hidden_proto(brk) ++ ++void *__curbrk attribute_hidden = 0; ++ ++int brk (void *addr) ++{ ++ void *newbrk; ++ ++ newbrk = (void *)INLINE_SYSCALL(brk, 1, addr); ++ ++ __curbrk = newbrk; ++ ++ if (newbrk < addr) { ++ __set_errno (ENOMEM); ++ return -1; ++ } ++ ++ return 0; ++} ++libc_hidden_def(brk) +diff --git a/libc/sysdeps/linux/avr32/bsd-_setjmp.S b/libc/sysdeps/linux/avr32/bsd-_setjmp.S +new file mode 100644 +index 0000000..be66a10 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bsd-_setjmp.S +@@ -0,0 +1,16 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 0) */ ++ .global _setjmp ++ .type _setjmp,"function" ++ .align 1 ++_setjmp: ++ mov r11, 0 ++ bral __GI___sigsetjmp ++ .size _setjmp, . - _setjmp +diff --git a/libc/sysdeps/linux/avr32/bsd-setjmp.S b/libc/sysdeps/linux/avr32/bsd-setjmp.S +new file mode 100644 +index 0000000..4635eeb +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/bsd-setjmp.S +@@ -0,0 +1,16 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++ /* This just does a tail-call to __sigsetjmp(env, 1) */ ++ .global setjmp ++ .type setjmp,"function" ++ .align 1 ++setjmp: ++ mov r11, 1 ++ bral __GI___sigsetjmp ++ .size setjmp, . - setjmp +diff --git a/libc/sysdeps/linux/avr32/clone.c b/libc/sysdeps/linux/avr32/clone.c +new file mode 100644 +index 0000000..e43b0f3 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/clone.c +@@ -0,0 +1,41 @@ ++/* ++ * Copyright (C) 2004 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#include ++#include ++#include ++ ++/* ++ * I don't know if we can be absolutely certain that the fn and arg ++ * parameters are preserved when returning as the child. If the ++ * compiler stores them in registers (r0-r7), they should be. ++ */ ++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) ++{ ++ register int (*_fn)(void *arg) = fn; ++ register void *_arg = arg; ++ int err; ++ ++ /* Sanity check the arguments */ ++ err = -EINVAL; ++ if (!fn) ++ goto syscall_error; ++ if (!child_stack) ++ goto syscall_error; ++ ++ err = INLINE_SYSCALL(clone, 2, flags, child_stack); ++ if (err < 0) ++ goto syscall_error; ++ else if (err != 0) ++ return err; ++ ++ _exit(_fn(_arg)); ++ ++syscall_error: ++ __set_errno (-err); ++ return -1; ++} +diff --git a/libc/sysdeps/linux/avr32/crt1.S b/libc/sysdeps/linux/avr32/crt1.S +new file mode 100644 +index 0000000..ca1fa7a +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/crt1.S +@@ -0,0 +1,97 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ * ++ * When we enter _start, the stack looks like this: ++ * argc argument counter ++ * argv[0] pointer to program name ++ * argv[1..argc-1] pointers to program args ++ * NULL ++ * env[0..N] pointers to environment variables ++ * NULL ++ * ++ * r12 contains a function pointer to be registered with `atexit'. ++ * This is how the dynamic linker arranges to have DT_FINI functions ++ * called for shared libraries that have been loaded before this ++ * code runs. ++ * ++ * We're going to call the following function: ++ * __uClibc_main(int (*main)(int, char **, char **), int argc, ++ * char **argv, void (*app_init)(void), void (*app_fini)(void), ++ * void (*rtld_fini)(void), void *stack_end) ++ * ++ * So we need to set up things as follows: ++ * r12 = address of main ++ * r11 = argc ++ * r10 = &argv[0] ++ * r9 = address of _init ++ * r8 = address of _fini ++ * sp[0] = whatever we got passed in r12 ++ */ ++ ++#include ++ ++ .text ++ .global _start ++ .type _start, @function ++_start: ++ /* Clear the frame pointer and link register since this is the outermost frame. */ ++ mov r7, 0 ++ mov lr, 0 ++ ++ ld.w r11, sp++ /* argc */ ++ mov r10, sp /* &argv[0] */ ++ ++ st.w --sp, r10 /* stack_end */ ++ st.w --sp, r12 /* rtld_fini */ ++ ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++.L_RGOT: ++ rsub r6, pc ++ lda.w r9, _init ++ lda.w r8, _fini ++ lda.w r12, main ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ call __uClibc_main ++ ++ .align 2 ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++ lddpc r9, __init_addr /* app_init */ ++ lddpc r8, __fini_addr /* app_fini */ ++ lddpc r12, __main_addr /* main */ ++ ++ /* Ok, now run uClibc's main() -- should not return */ ++ lddpc pc, ___uClibc_main_addr ++ ++ .align 2 ++__init_addr: ++ .long _init ++__fini_addr: ++ .long _fini ++__main_addr: ++ .long main ++___uClibc_main_addr: ++ .long __uClibc_main ++#endif ++ .size _start, . - _start ++ ++ /* ++ * The LSB says we need this. ++ */ ++ .section ".note.ABI-tag", "a" ++ .align 4 ++ .long 2f - 1f /* namesz */ ++ .long 4f - 3f /* descsz */ ++ .long 1 /* type */ ++1: .asciz "GNU" /* name */ ++2: .align 4 ++3: .long 0 /* Linux executable */ ++ .long 2,6,0 /* Earliest compatible kernel */ ++4: .align 4 +diff --git a/libc/sysdeps/linux/avr32/crti.S b/libc/sysdeps/linux/avr32/crti.S +new file mode 100644 +index 0000000..660f47c +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/crti.S +@@ -0,0 +1,26 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++_init: ++ stm --sp, r6, lr ++ lddpc r6, 2f ++1: rsub r6, pc ++ rjmp 3f ++ .align 2 ++2: .long 1b - _GLOBAL_OFFSET_TABLE_ ++3: ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++_fini: ++ stm --sp, r6, lr ++ lddpc r6, 2f ++1: rsub r6, pc ++ rjmp 3f ++ .align 2 ++2: .long 1b - _GLOBAL_OFFSET_TABLE_ ++3: +diff --git a/libc/sysdeps/linux/avr32/crtn.S b/libc/sysdeps/linux/avr32/crtn.S +new file mode 100644 +index 0000000..f7d1040 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/crtn.S +@@ -0,0 +1,14 @@ ++ ++ .section .init ++ .align 2 ++ .global _init ++ .type _init, @function ++ ldm sp++, r6, pc ++ .size _init, . - _init ++ ++ .section .fini ++ .align 2 ++ .global _fini ++ .type _fini, @function ++ ldm sp++, r6, pc ++ .size _fini, . - _fini +diff --git a/libc/sysdeps/linux/avr32/mmap.c b/libc/sysdeps/linux/avr32/mmap.c +new file mode 100644 +index 0000000..2ee025a +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/mmap.c +@@ -0,0 +1,33 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++#include ++#include ++#include ++#include ++ ++libc_hidden_proto(mmap) ++ ++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, ++ int, flags, int, fd, __off_t, pgoff); ++ ++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset) ++{ ++ unsigned long page_size = sysconf(_SC_PAGESIZE); ++ unsigned long pgoff; ++ ++ if (offset & (page_size - 1)) { ++ __set_errno(EINVAL); ++ return MAP_FAILED; ++ } ++ ++ pgoff = (unsigned long)offset >> (31 - __builtin_clz(page_size)); ++ ++ return mmap2(addr, len, prot, flags, fd, pgoff); ++} ++libc_hidden_def(mmap) +diff --git a/libc/sysdeps/linux/avr32/setjmp.S b/libc/sysdeps/linux/avr32/setjmp.S +new file mode 100644 +index 0000000..7d0354b +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/setjmp.S +@@ -0,0 +1,29 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#define _SETJMP_H ++#define _ASM ++#include ++ ++ .text ++ ++ .global __sigsetjmp ++ .type __sigsetjmp,"function" ++ ++ .align 1 ++__sigsetjmp: ++ mustr r8 ++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr ++ ++ /* ++ * Make a tail call to __sigjmp_save; it takes the same args ++ * and is hidden so we don't need to mess around with the GOT. ++ */ ++ rjmp __sigjmp_save ++ .size __sigsetjmp, . - __sigsetjmp ++ ++libc_hidden_def(__sigsetjmp) +diff --git a/libc/sysdeps/linux/avr32/sigaction.c b/libc/sysdeps/linux/avr32/sigaction.c +new file mode 100644 +index 0000000..a97ff3d +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/sigaction.c +@@ -0,0 +1,59 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++#define SA_RESTORER 0x04000000 ++extern void __default_rt_sa_restorer(void); ++ ++libc_hidden_proto(memcpy) ++ ++/* ++ * If act is not NULL, change the action for sig to *act. ++ * If oact is not NULL, put the old action for sig in *oact. ++ */ ++int __libc_sigaction(int signum, const struct sigaction *act, ++ struct sigaction *oldact) ++{ ++ struct kernel_sigaction kact, koact; ++ int result; ++ ++ if (act) { ++ kact.k_sa_handler = act->sa_handler; ++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); ++ kact.sa_flags = act->sa_flags; ++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) ++ kact.sa_restorer = act->sa_restorer; ++ else ++ kact.sa_restorer = __default_rt_sa_restorer; ++ kact.sa_flags |= SA_RESTORER; ++ } ++ ++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL, ++ oldact ? __ptrvalue(&koact) : NULL, ++ _NSIG / 8); ++ ++ if (oldact && result >= 0) { ++ oldact->sa_handler = koact.k_sa_handler; ++ memcpy(&oldact->sa_mask, &koact.sa_mask, ++ sizeof(oldact->sa_mask)); ++ oldact->sa_flags = koact.sa_flags; ++ oldact->sa_restorer = koact.sa_restorer; ++ } ++ ++ return result; ++} ++ ++#ifndef LIBC_SIGACTION ++libc_hidden_proto(sigaction) ++weak_alias(__libc_sigaction, sigaction) ++libc_hidden_weak(sigaction) ++#endif +diff --git a/libc/sysdeps/linux/avr32/sigrestorer.S b/libc/sysdeps/linux/avr32/sigrestorer.S +new file mode 100644 +index 0000000..df6a1ba +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/sigrestorer.S +@@ -0,0 +1,15 @@ ++/* ++ * Copyright (C) 2004 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#include ++ ++ .global __default_rt_sa_restorer ++ .type __default_rt_sa_restorer,"function" ++ .align 1 ++__default_rt_sa_restorer: ++ mov r8, __NR_rt_sigreturn ++ scall +diff --git a/libc/sysdeps/linux/avr32/sys/elf.h b/libc/sysdeps/linux/avr32/sys/elf.h +new file mode 100644 +index 0000000..faa7310 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/sys/elf.h +@@ -0,0 +1,26 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_ELF_H ++#define _SYS_ELF_H 1 ++ ++#warning "This header is obsolete; use instead." ++ ++#include ++ ++#endif /* sys/elf.h */ +diff --git a/libc/sysdeps/linux/avr32/sys/procfs.h b/libc/sysdeps/linux/avr32/sys/procfs.h +new file mode 100644 +index 0000000..3b37363 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/sys/procfs.h +@@ -0,0 +1,123 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_PROCFS_H ++#define _SYS_PROCFS_H 1 ++ ++/* This is somewhat modelled after the file of the same name on SVR4 ++ systems. It provides a definition of the core file format for ELF ++ used on Linux. It doesn't have anything to do with the /proc file ++ system, even though Linux has one. ++ ++ Anyway, the whole purpose of this file is for GDB and GDB only. ++ Don't read too much into it. Don't use it for anything other than ++ GDB unless you know what you are doing. */ ++ ++#include ++#include ++#include ++#include ++ ++__BEGIN_DECLS ++ ++/* Type for a general-purpose register. */ ++typedef unsigned long elf_greg_t; ++ ++/* And the whole bunch of them. We could have used `struct ++ user_regs' directly in the typedef, but tradition says that ++ the register set is an array, which does have some peculiar ++ semantics, so leave it that way. */ ++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++/* Register set for the floating-point registers. */ ++typedef struct user_fpregs elf_fpregset_t; ++ ++/* Signal info. */ ++struct elf_siginfo ++ { ++ int si_signo; /* Signal number. */ ++ int si_code; /* Extra code. */ ++ int si_errno; /* Errno. */ ++ }; ++ ++/* Definitions to generate Intel SVR4-like core files. These mostly ++ have the same names as the SVR4 types with "elf_" tacked on the ++ front to prevent clashes with Linux definitions, and the typedef ++ forms have been avoided. This is mostly like the SVR4 structure, ++ but more Linuxy, with things that Linux does not support and which ++ GDB doesn't really use excluded. */ ++ ++struct elf_prstatus ++ { ++ struct elf_siginfo pr_info; /* Info associated with signal. */ ++ short int pr_cursig; /* Current signal. */ ++ unsigned long int pr_sigpend; /* Set of pending signals. */ ++ unsigned long int pr_sighold; /* Set of held signals. */ ++ __pid_t pr_pid; ++ __pid_t pr_ppid; ++ __pid_t pr_pgrp; ++ __pid_t pr_sid; ++ struct timeval pr_utime; /* User time. */ ++ struct timeval pr_stime; /* System time. */ ++ struct timeval pr_cutime; /* Cumulative user time. */ ++ struct timeval pr_cstime; /* Cumulative system time. */ ++ elf_gregset_t pr_reg; /* GP registers. */ ++ int pr_fpvalid; /* True if math copro being used. */ ++ }; ++ ++ ++#define ELF_PRARGSZ (80) /* Number of chars for args. */ ++ ++struct elf_prpsinfo ++ { ++ char pr_state; /* Numeric process state. */ ++ char pr_sname; /* Char for pr_state. */ ++ char pr_zomb; /* Zombie. */ ++ char pr_nice; /* Nice val. */ ++ unsigned long int pr_flag; /* Flags. */ ++ unsigned short int pr_uid; ++ unsigned short int pr_gid; ++ int pr_pid, pr_ppid, pr_pgrp, pr_sid; ++ /* Lots missing */ ++ char pr_fname[16]; /* Filename of executable. */ ++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ ++ }; ++ ++/* The rest of this file provides the types for emulation of the ++ Solaris interfaces that should be implemented by ++ users of libthread_db. */ ++ ++/* Addresses. */ ++typedef void *psaddr_t; ++ ++/* Register sets. Linux has different names. */ ++typedef elf_gregset_t prgregset_t; ++typedef elf_fpregset_t prfpregset_t; ++ ++/* We don't have any differences between processes and threads, ++ therefore have only one PID type. */ ++typedef __pid_t lwpid_t; ++ ++/* Process status and info. In the end we do provide typedefs for them. */ ++typedef struct elf_prstatus prstatus_t; ++typedef struct elf_prpsinfo prpsinfo_t; ++ ++__END_DECLS ++ ++#endif /* sys/procfs.h */ +diff --git a/libc/sysdeps/linux/avr32/sys/ucontext.h b/libc/sysdeps/linux/avr32/sys/ucontext.h +new file mode 100644 +index 0000000..82c7fe2 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/sys/ucontext.h +@@ -0,0 +1,90 @@ ++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Linux/AVR32 ABI compliant context switching support. */ ++ ++#ifndef _SYS_UCONTEXT_H ++#define _SYS_UCONTEXT_H 1 ++ ++#include ++#include ++#include ++#include ++ ++typedef int greg_t; ++ ++/* Number of general registers. */ ++#define NGREG 16 ++ ++/* Container for all general registers. */ ++typedef elf_gregset_t gregset_t; ++ ++/* Number of each register is the `gregset_t' array. */ ++enum ++{ ++ R0 = 0, ++#define R0 R0 ++ R1 = 1, ++#define R1 R1 ++ R2 = 2, ++#define R2 R2 ++ R3 = 3, ++#define R3 R3 ++ R4 = 4, ++#define R4 R4 ++ R5 = 5, ++#define R5 R5 ++ R6 = 6, ++#define R6 R6 ++ R7 = 7, ++#define R7 R7 ++ R8 = 8, ++#define R8 R8 ++ R9 = 9, ++#define R9 R9 ++ R10 = 10, ++#define R10 R10 ++ R11 = 11, ++#define R11 R11 ++ R12 = 12, ++#define R12 R12 ++ R13 = 13, ++#define R13 R13 ++ R14 = 14, ++#define R14 R14 ++ R15 = 15 ++#define R15 R15 ++}; ++ ++/* Structure to describe FPU registers. */ ++typedef elf_fpregset_t fpregset_t; ++ ++/* Context to describe whole processor state. */ ++typedef struct sigcontext mcontext_t; ++ ++/* Userlevel context. */ ++typedef struct ucontext ++{ ++ unsigned long uc_flags; ++ struct ucontext *uc_link; ++ stack_t uc_stack; ++ mcontext_t uc_mcontext; ++ sigset_t uc_sigmask; /* mask last for extensibility */ ++} ucontext_t; ++ ++#endif /* sys/ucontext.h */ +diff --git a/libc/sysdeps/linux/avr32/sys/user.h b/libc/sysdeps/linux/avr32/sys/user.h +new file mode 100644 +index 0000000..c0b3d38 +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/sys/user.h +@@ -0,0 +1,46 @@ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H ++ ++struct user_fpregs ++{ ++ ++}; ++ ++struct user_regs ++{ ++ unsigned long sr; ++ unsigned long pc; ++ unsigned long lr; ++ unsigned long sp; ++ unsigned long r12; ++ unsigned long r11; ++ unsigned long r10; ++ unsigned long r9; ++ unsigned long r8; ++ unsigned long r7; ++ unsigned long r6; ++ unsigned long r5; ++ unsigned long r4; ++ unsigned long r3; ++ unsigned long r2; ++ unsigned long r1; ++ unsigned long r0; ++ unsigned long r12_orig; ++}; ++ ++struct user ++{ ++ struct user_regs regs; /* general registers */ ++ size_t u_tsize; /* text size (pages) */ ++ size_t u_dsize; /* data size (pages) */ ++ size_t u_ssize; /* stack size (pages) */ ++ unsigned long start_code; /* text starting address */ ++ unsigned long start_data; /* data starting address */ ++ unsigned long start_stack; /* stack starting address */ ++ long int signal; /* signal causing core dump */ ++ struct user_regs * u_ar0; /* help gdb find registers */ ++ unsigned long magic; /* identifies a core file */ ++ char u_comm[32]; /* user command name */ ++}; ++ ++#endif /* _SYS_USER_H */ +diff --git a/libc/sysdeps/linux/avr32/syscall.S b/libc/sysdeps/linux/avr32/syscall.S +new file mode 100644 +index 0000000..55c1b1f +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/syscall.S +@@ -0,0 +1,71 @@ ++/* ++ * Copyright (C) 2004-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#include ++ ++ .text ++ ++ /* ++ * long int syscall(long int sysno, ...) ++ */ ++ .global syscall ++ .type syscall, @function ++ .align 2 ++syscall: ++ stm --sp, r3,r5,r6,lr ++ sub lr, sp, -16 ++ mov r8, r12 ++ ldm lr, r3,r5,r9-r12 ++ scall ++ cp.w r12, -4095 ++ brlo .Ldone ++ ++#ifdef __PIC__ ++ lddpc r6, .Lgot ++.Lgotcalc: ++ rsub r6, pc ++# ifdef __UCLIBC_HAS_THREADS__ ++ rsub r3, r12, 0 ++ mcall r6[__errno_location@got] ++ st.w r12[0], r3 ++# else ++ ld.w r3, r6[errno@got] ++ neg r12 ++ st.w r3[0], r12 ++# endif ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++ rsub r3, r12, 0 ++ mcall .Lerrno_location ++ st.w r12[0], r3 ++# else ++ lddpc r3, .Lerrno ++ neg r12 ++ st.w r3[0], r12 ++# endif ++#endif ++ mov r12, -1 ++ ++.Ldone: ++ ldm sp++, r3,r5,r6,pc ++ ++ .align 2 ++#ifdef __PIC__ ++.Lgot: ++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ ++#else ++# ifdef __UCLIBC_HAS_THREADS__ ++.Lerrno_location: ++ .long __errno_location ++# else ++.Lerrno: ++ .long errno ++# endif ++#endif ++ ++ ++ .size syscall, . - syscall +diff --git a/libc/sysdeps/linux/avr32/vfork.S b/libc/sysdeps/linux/avr32/vfork.S +new file mode 100644 +index 0000000..03ca99f +--- /dev/null ++++ b/libc/sysdeps/linux/avr32/vfork.S +@@ -0,0 +1,58 @@ ++/* ++ * Copyright (C) 2005 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++ ++/* ++ * Clone the process without copying the address space. The ++ * calling process is suspended until the child either exits ++ * or calls execve. ++ * ++ * This all means that we cannot rely on the stack to store ++ * away registers, since they will be overwritten by the child ++ * as soon as it makes another function call (e.g. execve()). ++ * Fortunately, the Linux kernel preserves LR across system calls. ++ */ ++ ++#include ++#include ++ ++ .global __vfork ++ .type __vfork,@function ++ .align 1 ++__vfork: ++ mov r8, __NR_vfork ++ scall ++ cp.w r12, -4096 ++ retls r12 ++ ++ /* vfork failed, so we may use the stack freely */ ++ pushm r4-r7,lr ++#ifdef __PIC__ ++ lddpc r6, .L_GOT ++ rsub r4, r12, 0 ++.L_RGOT: ++ rsub r6, pc ++ mcall r6[__errno_location@got] ++#else ++ rsub r4, r12, 0 ++ mcall .L__errno_location ++#endif ++ st.w r12[0], r4 ++ popm r4-r7,pc,r12=-1 ++ ++ .align 2 ++#ifdef __PIC__ ++.L_GOT: ++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_ ++#else ++.L__errno_location: ++ .long __errno_location ++#endif ++ .size __vfork, . - __vfork ++ ++weak_alias(__vfork,vfork) ++libc_hidden_weak(vfork) +diff --git a/libpthread/linuxthreads.old/sysdeps/avr32/pt-machine.h b/libpthread/linuxthreads.old/sysdeps/avr32/pt-machine.h +new file mode 100644 +index 0000000..eccf329 +--- /dev/null ++++ b/libpthread/linuxthreads.old/sysdeps/avr32/pt-machine.h +@@ -0,0 +1,73 @@ ++/* Machine-dependent pthreads configuration and inline functions. ++ * ++ * Copyright (C) 2005-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#include ++ ++static inline int ++_test_and_set (int *p, int v) ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline test and set */\n" ++ " xchg %[old], %[mem], %[new]" ++ : [old] "=&r"(result) ++ : [mem] "r"(p), [new] "r"(v) ++ : "memory"); ++ ++ return result; ++} ++ ++#ifndef PT_EI ++# define PT_EI extern inline ++#endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ return _test_and_set(spinlock, 1); ++} ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME stack_pointer ++register char * stack_pointer __asm__ ("sp"); ++ ++/* Compare-and-swap for semaphores. */ ++ ++#define HAS_COMPARE_AND_SWAP ++PT_EI int ++__compare_and_swap(long int *p, long int oldval, long int newval) ++{ ++ long int result; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %[result], %[mem]\n" ++ " eor %[result], %[old]\n" ++ " brne 2f\n" ++ " stcond %[mem], %[new]\n" ++ " brne 1b\n" ++ "2:" ++ : [result] "=&r"(result), [mem] "=m"(*p) ++ : "m"(*p), [new] "r"(newval), [old] "r"(oldval) ++ : "cc", "memory"); ++ ++ return result == 0; ++} ++ ++#endif /* pt-machine.h */ +diff --git a/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h b/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h +new file mode 100644 +index 0000000..fe12bf8 +--- /dev/null ++++ b/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h +@@ -0,0 +1,73 @@ ++/* Machine-dependent pthreads configuration and inline functions. ++ * ++ * Copyright (C) 2005-2007 Atmel Corporation ++ * ++ * This file is subject to the terms and conditions of the GNU Lesser General ++ * Public License. See the file "COPYING.LIB" in the main directory of this ++ * archive for more details. ++ */ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#include ++ ++static inline int ++_test_and_set (int *p, int v) __THROW ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline test and set */\n" ++ " xchg %[old], %[mem], %[new]" ++ : [old] "=&r"(result) ++ : [mem] "r"(p), [new] "r"(v) ++ : "memory"); ++ ++ return result; ++} ++ ++#ifndef PT_EI ++# define PT_EI extern inline ++#endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ return _test_and_set(spinlock, 1); ++} ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME stack_pointer ++register char * stack_pointer __asm__ ("sp"); ++ ++/* Compare-and-swap for semaphores. */ ++ ++#define HAS_COMPARE_AND_SWAP ++PT_EI int ++__compare_and_swap(long int *p, long int oldval, long int newval) ++{ ++ int result; ++ ++ __asm__ __volatile__( ++ "/* Inline compare and swap */\n" ++ "1: ssrf 5\n" ++ " ld.w %[result], %[mem]\n" ++ " eor %[result], %[old]\n" ++ " brne 2f\n" ++ " stcond %[mem], %[new]\n" ++ " brne 1b\n" ++ "2:" ++ : [result] "=&r"(result), [mem] "=m"(*p) ++ : "m"(*p), [new] "r"(newval), [old] "r"(oldval) ++ : "cc", "memory"); ++ ++ return result == 0; ++} ++ ++#endif /* pt-machine.h */ +diff --git a/utils/ldd.c b/utils/ldd.c +index 75ad628..e34acd9 100644 +--- a/utils/ldd.c ++++ b/utils/ldd.c +@@ -44,6 +44,11 @@ + #define ELFCLASSM ELFCLASS32 + #endif + ++#if defined(__avr32__) ++#define MATCH_MACHINE(x) (x == EM_AVR32) ++#define ELFCLASSM ELFCLASS32 ++#endif ++ + #if defined(__s390__) + #define MATCH_MACHINE(x) (x == EM_S390) + #define ELFCLASSM ELFCLASS32 diff --git a/packages/uclibc/uclibc-0.9.29/uClibc-0.9.29-avr32-fix-sa_onstack.patch b/packages/uclibc/uclibc-0.9.29/uClibc-0.9.29-avr32-fix-sa_onstack.patch new file mode 100644 index 0000000000..722decdbd7 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.29/uClibc-0.9.29-avr32-fix-sa_onstack.patch @@ -0,0 +1,31 @@ +From 974a769cc135bcfb1ea751db34a84ed6b5ceb509 Mon Sep 17 00:00:00 2001 +From: Haavard Skinnemoen +Date: Fri, 7 Dec 2007 14:02:19 +0100 +Subject: [PATCH] AVR32: Fix sa_restorer when SA_ONSTACK is set + +I don't remember exactly why we decided to pick the caller's value of +sa_restorer when SA_ONSTACK is set, but it seems to break LTP's +sigaltstack testcase. Some users have reported problems with +sigaltstack as well; hopefully this will fix it. + +Signed-off-by: Haavard Skinnemoen +--- + libc/sysdeps/linux/avr32/sigaction.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/libc/sysdeps/linux/avr32/sigaction.c b/libc/sysdeps/linux/avr32/sigaction.c +index a97ff3d..6dcca91 100644 +--- a/libc/sysdeps/linux/avr32/sigaction.c ++++ b/libc/sysdeps/linux/avr32/sigaction.c +@@ -30,7 +30,7 @@ int __libc_sigaction(int signum, const struct sigaction *act, + kact.k_sa_handler = act->sa_handler; + memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask)); + kact.sa_flags = act->sa_flags; +- if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK)) ++ if (kact.sa_flags & SA_RESTORER) + kact.sa_restorer = act->sa_restorer; + else + kact.sa_restorer = __default_rt_sa_restorer; +-- +1.5.3.4 + diff --git a/packages/uclibc/uclibc_0.9.29.bb b/packages/uclibc/uclibc_0.9.29.bb index 9ec20d61de..484477c084 100644 --- a/packages/uclibc/uclibc_0.9.29.bb +++ b/packages/uclibc/uclibc_0.9.29.bb @@ -7,7 +7,7 @@ # on whether the base patches apply to the selected (SRCDATE) svn release. # UCLIBC_BASE ?= "0.9.29" -PR = "r8" +PR = "r9" require uclibc.inc @@ -17,6 +17,8 @@ SRC_URI += "file://uClibc.machine file://uClibc.distro \ file://errno_values.h.patch;patch=1 \ file://termios.h.patch;patch=1 \ file://uClibc-0.9.29-001-fix-mmap.patch;patch=1 \ + file://uClibc-0.9.29-002-atmel.1.patch;patch=1 \ + file://uClibc-0.9.29-avr32-fix-sa_onstack.patch;patch=1 \ file://uClibc-0.9.29-conditional-sched_affinity.patch;patch=1 \ file://uClibc-0.9.29-fix-gethostent_r-failure-retval.patch;patch=1 \ file://uClibc-0.9.29-fix-internal_function-definition.patch;patch=1 \ -- cgit v1.2.3 From 9eff3cb5ad3afdcb429a2302e0ec303b07cb5604 Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Fri, 15 Feb 2008 13:12:49 +0000 Subject: Added PXA27x resume fix from Russell King to linux-rp-2.6.24. --- packages/linux/linux-rp-2.6.24/pxa27x-resume.patch | 41 ++++++++++++++++++++++ packages/linux/linux-rp_2.6.24.bb | 3 +- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-rp-2.6.24/pxa27x-resume.patch diff --git a/packages/linux/linux-rp-2.6.24/pxa27x-resume.patch b/packages/linux/linux-rp-2.6.24/pxa27x-resume.patch new file mode 100644 index 0000000000..6447a0b104 --- /dev/null +++ b/packages/linux/linux-rp-2.6.24/pxa27x-resume.patch @@ -0,0 +1,41 @@ +List: linux-arm-kernel +Subject: [PATCH] Fix PXA27x resume +From: Russell King - ARM Linux +Date: 2008-01-21 13:53:31 +Message-ID: 20080121135331.GC30149@flint.arm.linux.org.uk +[Download message RAW] + +When PXA27x wakes up, tick_resume_oneshot() tries to set a timer +interrupt to occur immediately. Since PXA27x requires at least +MIN_OSCR_DELTA, this causes us to flag an error. + +tick_program_event() then increments the next event time by +min_delta_ns. However, by the time we get back to programming +the next event, the OSCR has incremented such that we fail again. +We repeatedly retry, but the OSCR is too fast for us - we never +catch up, so we never break out of the loop - resulting in us +never apparantly resuming. + +Fix this by doubling min_delta_ns. + +Signed-off-by: Russell King + +diff --git a/arch/arm/mach-pxa/time.c b/arch/arm/mach-pxa/time.c +index ac0bbad..7b7c017 100644 +--- a/arch/arm/mach-pxa/time.c ++++ b/arch/arm/mach-pxa/time.c +@@ -169,7 +169,7 @@ static void __init pxa_timer_init(void) + ckevt_pxa_osmr0.max_delta_ns = + clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0); + ckevt_pxa_osmr0.min_delta_ns = +- clockevent_delta2ns(MIN_OSCR_DELTA, &ckevt_pxa_osmr0) + 1; ++ clockevent_delta2ns(MIN_OSCR_DELTA * 2, &ckevt_pxa_osmr0) + 1; + + cksrc_pxa_oscr0.mult = + clocksource_hz2mult(clock_tick_rate, cksrc_pxa_oscr0.shift); + +------------------------------------------------------------------- +List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel +FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php +Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php + diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb index f30d88b731..c42b2d2ce7 100644 --- a/packages/linux/linux-rp_2.6.24.bb +++ b/packages/linux/linux-rp_2.6.24.bb @@ -1,6 +1,6 @@ require linux-rp.inc -PR = "r3" +PR = "r4" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_collie = "1" @@ -41,6 +41,7 @@ SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ ${RPSRC}/poodle_pm-r5.patch;patch=1 \ ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \ ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \ + file://pxa27x-resume.patch;patch=1;status=external \ file://squashfs3.3.patch;patch=1;status=external \ ${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \ ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \ -- cgit v1.2.3 From 7192c8cda818dee66ccd54fa42b909a3b740f05c Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Fri, 15 Feb 2008 13:27:34 +0000 Subject: gumstix-kernel : Add files to build a kernel for gumstix machines. These are copied verbatim from the gumstix OE based build system. --- .../linux/gumstix-kernel-2.6.21/.mtn2git_empty | 0 .../gumstix-kernel-2.6.21/270-usb-gadget-udc.patch | 2739 +++++ .../linux/gumstix-kernel-2.6.21/arch-config.patch | 62 + .../gumstix-kernel-2.6.21/bkpxa-pxa-cpu.patch | 117 + .../gumstix-kernel-2.6.21/bkpxa-pxa-cpufreq.patch | 403 + .../linux/gumstix-kernel-2.6.21/board-init.patch | 81 + .../gumstix-kernel-2.6.21/bugfix-i2c-include.patch | 12 + .../gumstix-kernel-2.6.21/bugfix-mmc-clock.patch | 14 + .../gumstix-kernel-2.6.21/bugfix-pxa-cpufreq.patch | 64 + .../bugfix-serial-interrupt.patch | 25 + .../bugfix-serial-register-status.patch | 69 + .../gumstix-kernel-2.6.21/compact-flash.patch | 287 + .../compile-fix-pxa_cpufreq.patch | 13 + .../cpufreq-better-freqs.patch | 53 + .../gumstix-kernel-2.6.21/cpufreq-fixup.patch | 26 + .../cpufreq-ondemand-by-default.patch | 42 + .../disable-uncompress-message.patch | 32 + .../gumstix-kernel-2.6.21/ethernet-config.patch | 26 + packages/linux/gumstix-kernel-2.6.21/flash.patch | 171 + .../linux/gumstix-kernel-2.6.21/gumstix-asoc.patch | 224 + .../gumstix-custom-connex/.mtn2git_empty | 0 .../gumstix-custom-connex/defconfig | 1619 +++ .../gumstix-custom-connex/defconfig-nofb | 1619 +++ .../gumstix-custom-verdex/.mtn2git_empty | 0 .../gumstix-custom-verdex/defconfig | 1791 ++++ .../gumstix-custom-verdex/defconfig-nofb | 1791 ++++ .../gumstix-kernel-2.6.21/gumstix-fb-logo.patch | 10455 +++++++++++++++++++ .../gumstix-kernel-2.6.21/gumstix-pxa270-mmc.patch | 33 + .../gumstix-pxa270-usb-host.patch | 366 + packages/linux/gumstix-kernel-2.6.21/header.patch | 170 + .../gumstix-kernel-2.6.21/mach-types-fix.patch | 13 + .../misalignment-handling.patch | 38 + .../gumstix-kernel-2.6.21/mmc-card-detect.patch | 80 + .../modular-init-bluetooth.patch | 108 + .../modular-init-smc91x.patch | 203 + .../modular-init-usb-gadget.patch | 106 + .../gumstix-kernel-2.6.21/pcm-gcc-411-bugfix.patch | 60 + .../linux/gumstix-kernel-2.6.21/proc-gpio.patch | 348 + .../gumstix-kernel-2.6.21/pxa-regs-additions.patch | 28 + .../gumstix-kernel-2.6.21/pxa-regs-fixup.patch | 12 + .../linux/gumstix-kernel-2.6.21/pxa2xx_udc.patch | 65 + .../gumstix-kernel-2.6.21/pxafb-18bpp-mode.patch | 433 + .../gumstix-kernel-2.6.21/pxafb-definition.patch | 180 + .../gumstix-kernel-2.6.21/serial-divisor.patch | 31 + .../gumstix-kernel-2.6.21/serial-ether-addr.patch | 62 + .../gumstix-kernel-2.6.21/smc-ether-addr.patch | 62 + .../gumstix-kernel-2.6.21/smc911x-fixup.patch | 392 + .../gumstix-kernel-2.6.21/tsc2003-config.diff | 31 + packages/linux/gumstix-kernel-2.6.21/tsc2003.c | 699 ++ .../uImage-in-own-partition.patch | 56 + .../gumstix-kernel-2.6.21/ucb1400-ac97-audio.patch | 309 + packages/linux/gumstix-kernel_2.6.21.bb | 54 + packages/linux/gumstix-linux.inc | 74 + 53 files changed, 25748 insertions(+) create mode 100644 packages/linux/gumstix-kernel-2.6.21/.mtn2git_empty create mode 100644 packages/linux/gumstix-kernel-2.6.21/270-usb-gadget-udc.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/arch-config.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/bkpxa-pxa-cpu.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/bkpxa-pxa-cpufreq.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/board-init.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/bugfix-i2c-include.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/bugfix-mmc-clock.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/bugfix-pxa-cpufreq.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/bugfix-serial-interrupt.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/bugfix-serial-register-status.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/compact-flash.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/compile-fix-pxa_cpufreq.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/cpufreq-better-freqs.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/cpufreq-fixup.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/cpufreq-ondemand-by-default.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/disable-uncompress-message.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/ethernet-config.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/flash.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-asoc.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/.mtn2git_empty create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/defconfig create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/defconfig-nofb create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/.mtn2git_empty create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig-nofb create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-fb-logo.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-pxa270-mmc.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/gumstix-pxa270-usb-host.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/header.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/mach-types-fix.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/misalignment-handling.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/modular-init-bluetooth.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/modular-init-smc91x.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/modular-init-usb-gadget.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/pcm-gcc-411-bugfix.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/proc-gpio.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/pxa-regs-additions.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/pxa-regs-fixup.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/pxa2xx_udc.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/pxafb-18bpp-mode.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/pxafb-definition.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/serial-divisor.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/serial-ether-addr.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/smc-ether-addr.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/smc911x-fixup.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/tsc2003-config.diff create mode 100644 packages/linux/gumstix-kernel-2.6.21/tsc2003.c create mode 100644 packages/linux/gumstix-kernel-2.6.21/uImage-in-own-partition.patch create mode 100644 packages/linux/gumstix-kernel-2.6.21/ucb1400-ac97-audio.patch create mode 100644 packages/linux/gumstix-kernel_2.6.21.bb create mode 100644 packages/linux/gumstix-linux.inc diff --git a/packages/linux/gumstix-kernel-2.6.21/.mtn2git_empty b/packages/linux/gumstix-kernel-2.6.21/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/gumstix-kernel-2.6.21/270-usb-gadget-udc.patch b/packages/linux/gumstix-kernel-2.6.21/270-usb-gadget-udc.patch new file mode 100644 index 0000000000..630d188ea0 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/270-usb-gadget-udc.patch @@ -0,0 +1,2739 @@ +Index: linux-2.6.21gum/drivers/usb/gadget/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/Kconfig ++++ linux-2.6.21gum/drivers/usb/gadget/Kconfig +@@ -129,6 +129,28 @@ config USB_PXA2XX_SMALL + default y if USB_ETH + default y if USB_G_SERIAL + ++config USB_GADGET_PXA27X ++ boolean "PXA 27x" ++ depends on ARCH_PXA && PXA27x ++ help ++ Intel's PXA 27x series XScale ARM-5TE processors include ++ an integrated full speed USB 1.1 device controller. ++ ++ Say "y" to link the driver statically, or "m" to build a ++ dynamically linked module called "pxa27x_udc" and force all ++ gadget drivers to also be dynamically linked. ++ ++config USB_PXA27X ++ tristate ++ depends on USB_GADGET_PXA27X ++ default USB_GADGET ++ select USB_GADGET_SELECTED ++ ++config USB_PXA27X_DMA ++ bool # "Use DMA support" ++ depends on USB_GADGET_PXA27X ++ default n ++ + config USB_GADGET_GOKU + boolean "Toshiba TC86C001 'Goku-S'" + depends on PCI +Index: linux-2.6.21gum/drivers/usb/gadget/Makefile +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/Makefile ++++ linux-2.6.21gum/drivers/usb/gadget/Makefile +@@ -7,6 +7,7 @@ obj-$(CONFIG_USB_PXA2XX) += pxa2xx_udc.o + obj-$(CONFIG_USB_GOKU) += goku_udc.o + obj-$(CONFIG_USB_OMAP) += omap_udc.o + obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o ++obj-$(CONFIG_USB_PXA27X) += pxa27x_udc.o + obj-$(CONFIG_USB_AT91) += at91_udc.o + obj-$(CONFIG_USB_GADGET_GUMSTIX) += gumstix_gadget.o + +Index: linux-2.6.21gum/drivers/usb/gadget/pxa27x_udc.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/usb/gadget/pxa27x_udc.c +@@ -0,0 +1,2352 @@ ++/* ++ * linux/drivers/usb/gadget/pxa27x_udc.c ++ * Intel PXA2xx and IXP4xx on-chip full speed USB device controllers ++ * ++ * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker) ++ * Copyright (C) 2003 Robert Schwebel, Pengutronix ++ * Copyright (C) 2003 Benedikt Spranger, Pengutronix ++ * Copyright (C) 2003 David Brownell ++ * Copyright (C) 2003 Joshua Wise ++ * Copyright (C) 2004 Intel Corporation ++ * Copyright (C) 2005 SDG Systems, LLC (Aric Blumer) ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ */ ++ ++#undef DEBUG ++ // #define DEBUG 1 ++ //#define VERBOSE DBG_VERBOSE ++ ++#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 ++#include ++#include ++ ++#include ++#include ++ ++#include ++ ++ ++/* ++ * This driver handles the USB Device Controller (UDC) in Intel's PXA 27777777x ++ * series processors. ++ * Such controller drivers work with a gadget driver. The gadget driver ++ * returns descriptors, implements configuration and data protocols used ++ * by the host to interact with this device, and allocates endpoints to ++ * the different protocol interfaces. The controller driver virtualizes ++ * usb hardware so that the gadget drivers will be more portable. ++ * ++ * This UDC hardware wants to implement a bit too much USB protocol, so ++ * it constrains the sorts of USB configuration change events that work. ++ * The errata for these chips are misleading; some "fixed" bugs from ++ * pxa250 a0/a1 b0/b1/b2 sure act like they're still there. ++ */ ++ ++#define DRIVER_VERSION "21-Jul-2005" ++#define DRIVER_DESC "PXA 27x USB Device Controller driver" ++ ++ ++static const char driver_name [] = "pxa27x_udc"; ++ ++static const char ep0name [] = "ep0"; ++ ++ ++#define USE_DMA ++//#define DISABLE_TEST_MODE ++ ++#ifdef CONFIG_PROC_FS ++#define UDC_PROC_FILE ++#endif ++ ++#include "pxa27x_udc.h" ++ ++#if 0 ++#ifdef CONFIG_EMBEDDED ++/* few strings, and little code to use them */ ++#undef DEBUG ++#undef UDC_PROC_FILE ++#endif ++#endif ++ ++#ifdef USE_DMA ++static int use_dma = 1; ++module_param(use_dma, bool, 0); ++MODULE_PARM_DESC (use_dma, "true to use dma"); ++ ++static void dma_nodesc_handler (int dmach, void *_ep); ++static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req); ++ ++#define DMASTR " (dma support)" ++ ++#else /* !USE_DMA */ ++#define DMASTR " (pio only)" ++#endif ++ ++#ifdef CONFIG_USB_PXA27X_SMALL ++#define SIZE_STR " (small)" ++#else ++#define SIZE_STR "" ++#endif ++ ++#ifdef DISABLE_TEST_MODE ++/* (mode == 0) == no undocumented chip tweaks ++ * (mode & 1) == double buffer bulk IN ++ * (mode & 2) == double buffer bulk OUT ++ * ... so mode = 3 (or 7, 15, etc) does it for both ++ */ ++static ushort fifo_mode = 0; ++module_param(fifo_mode, ushort, 0); ++MODULE_PARM_DESC (fifo_mode, "pxa27x udc fifo mode"); ++#endif ++ ++#define UDCISR0_IR0 0x3 ++#define UDCISR_INT_MASK (UDC_INT_FIFOERROR | UDC_INT_PACKETCMP) ++#define UDCICR_INT_MASK UDCISR_INT_MASK ++ ++#define UDCCSR_MASK (UDCCSR_FST | UDCCSR_DME) ++/* --------------------------------------------------------------------------- ++ * endpoint related parts of the api to the usb controller hardware, ++ * used by gadget driver; and the inner talker-to-hardware core. ++ * --------------------------------------------------------------------------- ++ */ ++ ++static void pxa27x_ep_fifo_flush (struct usb_ep *ep); ++static void nuke (struct pxa27x_ep *, int status); ++ ++static void pio_irq_enable(int ep_num) ++{ ++ if (ep_num < 16) ++ UDCICR0 |= 3 << (ep_num * 2); ++ else { ++ ep_num -= 16; ++ UDCICR1 |= 3 << (ep_num * 2); ++ } ++} ++ ++static void pio_irq_disable(int ep_num) ++{ ++ ep_num &= 0xf; ++ if (ep_num < 16) ++ UDCICR0 &= ~(3 << (ep_num * 2)); ++ else { ++ ep_num -= 16; ++ UDCICR1 &= ~(3 << (ep_num * 2)); ++ } ++} ++ ++/* The UDCCR reg contains mask and interrupt status bits, ++ * so using '|=' isn't safe as it may ack an interrupt. ++ */ ++#define UDCCR_MASK_BITS (UDCCR_OEN | UDCCR_UDE) ++ ++static inline void udc_set_mask_UDCCR(int mask) ++{ ++ UDCCR = (UDCCR & UDCCR_MASK_BITS) | (mask & UDCCR_MASK_BITS); ++} ++ ++static inline void udc_clear_mask_UDCCR(int mask) ++{ ++ UDCCR = (UDCCR & UDCCR_MASK_BITS) & ~(mask & UDCCR_MASK_BITS); ++} ++ ++static inline void udc_ack_int_UDCCR(int mask) ++{ ++ /* udccr contains the bits we dont want to change */ ++ __u32 udccr = UDCCR & UDCCR_MASK_BITS; ++ ++ UDCCR = udccr | (mask & ~UDCCR_MASK_BITS); ++} ++ ++/* ++ * endpoint enable/disable ++ * ++ * we need to verify the descriptors used to enable endpoints. since pxa27x ++ * endpoint configurations are fixed, and are pretty much always enabled, ++ * there's not a lot to manage here. ++ * ++ * because pxa27x can't selectively initialize bulk (or interrupt) endpoints, ++ * (resetting endpoint halt and toggle), SET_INTERFACE is unusable except ++ * for a single interface (with only the default altsetting) and for gadget ++ * drivers that don't halt endpoints (not reset by set_interface). that also ++ * means that if you use ISO, you must violate the USB spec rule that all ++ * iso endpoints must be in non-default altsettings. ++ */ ++static int pxa27x_ep_enable (struct usb_ep *_ep, ++ const struct usb_endpoint_descriptor *desc) ++{ ++ struct pxa27x_ep *ep; ++ struct pxa27x_udc *dev; ++ ++ ep = container_of (_ep, struct pxa27x_ep, ep); ++ if (!_ep || !desc || _ep->name == ep0name ++ || desc->bDescriptorType != USB_DT_ENDPOINT ++ || ep->fifo_size < le16_to_cpu(desc->wMaxPacketSize)) { ++ DMSG("%s, bad ep or descriptor\n", __FUNCTION__); ++ return -EINVAL; ++ } ++ ++ /* xfer types must match, except that interrupt ~= bulk */ ++ if( ep->ep_type != USB_ENDPOINT_XFER_BULK ++ && desc->bmAttributes != USB_ENDPOINT_XFER_INT) { ++ DMSG("%s, %s type mismatch\n", __FUNCTION__, _ep->name); ++ return -EINVAL; ++ } ++ ++ /* hardware _could_ do smaller, but driver doesn't */ ++ if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK ++ && le16_to_cpu (desc->wMaxPacketSize) ++ != BULK_FIFO_SIZE) ++ || !desc->wMaxPacketSize) { ++ DMSG("%s, bad %s maxpacket\n", __FUNCTION__, _ep->name); ++ return -ERANGE; ++ } ++ ++ dev = ep->dev; ++ if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) { ++ DMSG("%s, bogus device state\n", __FUNCTION__); ++ return -ESHUTDOWN; ++ } ++ ++ ep->desc = desc; ++ ep->dma = -1; ++ ep->stopped = 0; ++ ep->pio_irqs = ep->dma_irqs = 0; ++ ep->ep.maxpacket = le16_to_cpu (desc->wMaxPacketSize); ++ ++ /* flush fifo (mostly for OUT buffers) */ ++ pxa27x_ep_fifo_flush (_ep); ++ ++ /* ... reset halt state too, if we could ... */ ++ ++#ifdef USE_DMA ++ /* for (some) bulk and ISO endpoints, try to get a DMA channel and ++ * bind it to the endpoint. otherwise use PIO. ++ */ ++ DMSG("%s: called attributes=%d\n", __FUNCTION__, ep->ep_type); ++ switch (ep->ep_type) { ++ case USB_ENDPOINT_XFER_ISOC: ++ if (le16_to_cpu(desc->wMaxPacketSize) % 32) ++ break; ++ // fall through ++ case USB_ENDPOINT_XFER_BULK: ++ if (!use_dma || !ep->reg_drcmr) ++ break; ++ ep->dma = pxa_request_dma ((char *)_ep->name, ++ (le16_to_cpu (desc->wMaxPacketSize) > 64) ++ ? DMA_PRIO_MEDIUM /* some iso */ ++ : DMA_PRIO_LOW, ++ dma_nodesc_handler, ep); ++ if (ep->dma >= 0) { ++ *ep->reg_drcmr = DRCMR_MAPVLD | ep->dma; ++ DMSG("%s using dma%d\n", _ep->name, ep->dma); ++ } ++ default: ++ break; ++ } ++#endif ++ DBG(DBG_VERBOSE, "enabled %s\n", _ep->name); ++ return 0; ++} ++ ++static int pxa27x_ep_disable (struct usb_ep *_ep) ++{ ++ struct pxa27x_ep *ep; ++ ++ ep = container_of (_ep, struct pxa27x_ep, ep); ++ if (!_ep || !ep->desc) { ++ DMSG("%s, %s not enabled\n", __FUNCTION__, ++ _ep ? ep->ep.name : NULL); ++ return -EINVAL; ++ } ++ nuke (ep, -ESHUTDOWN); ++ ++#ifdef USE_DMA ++ if (ep->dma >= 0) { ++ *ep->reg_drcmr = 0; ++ pxa_free_dma (ep->dma); ++ ep->dma = -1; ++ } ++#endif ++ ++ /* flush fifo (mostly for IN buffers) */ ++ pxa27x_ep_fifo_flush (_ep); ++ ++ ep->desc = 0; ++ ep->stopped = 1; ++ ++ DBG(DBG_VERBOSE, "%s disabled\n", _ep->name); ++ return 0; ++} ++ ++/*-------------------------------------------------------------------------*/ ++ ++/* for the pxa27x, these can just wrap kmalloc/kfree. gadget drivers ++ * must still pass correctly initialized endpoints, since other controller ++ * drivers may care about how it's currently set up (dma issues etc). ++ */ ++ ++/* ++ * pxa27x_ep_alloc_request - allocate a request data structure ++ */ ++static struct usb_request * ++pxa27x_ep_alloc_request (struct usb_ep *_ep, unsigned gfp_flags) ++{ ++ struct pxa27x_request *req; ++ ++ req = kmalloc (sizeof *req, gfp_flags); ++ if (!req) ++ return 0; ++ ++ memset (req, 0, sizeof *req); ++ INIT_LIST_HEAD (&req->queue); ++ return &req->req; ++} ++ ++ ++/* ++ * pxa27x_ep_free_request - deallocate a request data structure ++ */ ++static void ++pxa27x_ep_free_request (struct usb_ep *_ep, struct usb_request *_req) ++{ ++ struct pxa27x_request *req; ++ ++ req = container_of(_req, struct pxa27x_request, req); ++ WARN_ON (!list_empty (&req->queue)); ++ kfree(req); ++} ++ ++ ++/* PXA cache needs flushing with DMA I/O (it's dma-incoherent), but there's ++ * no device-affinity and the heap works perfectly well for i/o buffers. ++ * It wastes much less memory than dma_alloc_coherent() would, and even ++ * prevents cacheline (32 bytes wide) sharing problems. ++ */ ++static void * ++pxa27x_ep_alloc_buffer(struct usb_ep *_ep, unsigned bytes, ++ dma_addr_t *dma, unsigned gfp_flags) ++{ ++ char *retval; ++ ++ retval = kmalloc (bytes, gfp_flags & ~(__GFP_DMA|__GFP_HIGHMEM)); ++ if (retval) ++ *dma = virt_to_bus (retval); ++ return retval; ++} ++ ++static void ++pxa27x_ep_free_buffer(struct usb_ep *_ep, void *buf, dma_addr_t dma, ++ unsigned bytes) ++{ ++ kfree (buf); ++} ++ ++/*-------------------------------------------------------------------------*/ ++ ++/* ++ * done - retire a request; caller blocked irqs ++ */ ++static void done(struct pxa27x_ep *ep, struct pxa27x_request *req, int status) ++{ ++ list_del_init(&req->queue); ++ if (likely (req->req.status == -EINPROGRESS)) ++ req->req.status = status; ++ else ++ status = req->req.status; ++ ++ if (status && status != -ESHUTDOWN) ++ DBG(DBG_VERBOSE, "complete %s req %p stat %d len %u/%u\n", ++ ep->ep.name, &req->req, status, ++ req->req.actual, req->req.length); ++ ++ /* don't modify queue heads during completion callback */ ++ req->req.complete(&ep->ep, &req->req); ++} ++ ++ ++static inline void ep0_idle (struct pxa27x_udc *dev) ++{ ++ dev->ep0state = EP0_IDLE; ++ LED_EP0_OFF; ++} ++ ++static int ++write_packet(volatile u32 *uddr, struct pxa27x_request *req, unsigned max) ++{ ++ u32 *buf; ++ int length, count, remain; ++ ++ buf = (u32*)(req->req.buf + req->req.actual); ++ prefetch(buf); ++ ++ /* how big will this packet be? */ ++ length = min(req->req.length - req->req.actual, max); ++ req->req.actual += length; ++ ++ remain = length & 0x3; ++ count = length & ~(0x3); ++ ++ while (likely(count)) { ++ *uddr = *buf++; ++ count -= 4; ++ } ++ ++ if (remain) { ++ volatile u8* reg=(u8*)uddr; ++ char *rd =(u8*)buf; ++ ++ while (remain--) { ++ *reg=*rd++; ++ } ++ } ++ ++ return length; ++} ++ ++/* ++ * write to an IN endpoint fifo, as many packets as possible. ++ * irqs will use this to write the rest later. ++ * caller guarantees at least one packet buffer is ready (or a zlp). ++ */ ++static int ++write_fifo (struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ unsigned max; ++ ++ max = le16_to_cpu(ep->desc->wMaxPacketSize); ++ do { ++ int count; ++ int is_last, is_short; ++ ++ count = write_packet(ep->reg_udcdr, req, max); ++ ++ /* last packet is usually short (or a zlp) */ ++ if (unlikely (count != max)) ++ is_last = is_short = 1; ++ else { ++ if (likely(req->req.length != req->req.actual) ++ || req->req.zero) ++ is_last = 0; ++ else ++ is_last = 1; ++ /* interrupt/iso maxpacket may not fill the fifo */ ++ is_short = unlikely (max < ep->fifo_size); ++ } ++ ++ DMSG("wrote %s count:%d bytes%s%s %d left %p\n", ++ ep->ep.name, count, ++ is_last ? "/L" : "", is_short ? "/S" : "", ++ req->req.length - req->req.actual, &req->req); ++ ++ /* let loose that packet. maybe try writing another one, ++ * double buffering might work. TSP, TPC, and TFS ++ * bit values are the same for all normal IN endpoints. ++ */ ++ *ep->reg_udccsr = UDCCSR_PC; ++ if (is_short) ++ *ep->reg_udccsr = UDCCSR_SP; ++ ++ /* requests complete when all IN data is in the FIFO */ ++ if (is_last) { ++ done (ep, req, 0); ++ if (list_empty(&ep->queue) || unlikely(ep->dma >= 0)) { ++ pio_irq_disable (ep->ep_num); ++#ifdef USE_DMA ++ /* unaligned data and zlps couldn't use dma */ ++ if (unlikely(!list_empty(&ep->queue))) { ++ req = list_entry(ep->queue.next, ++ struct pxa27x_request, queue); ++ kick_dma(ep,req); ++ return 0; ++ } ++#endif ++ } ++ return 1; ++ } ++ ++ // TODO experiment: how robust can fifo mode tweaking be? ++ // double buffering is off in the default fifo mode, which ++ // prevents TFS from being set here. ++ ++ } while (*ep->reg_udccsr & UDCCSR_FS); ++ return 0; ++} ++ ++/* caller asserts req->pending (ep0 irq status nyet cleared); starts ++ * ep0 data stage. these chips want very simple state transitions. ++ */ ++static inline ++void ep0start(struct pxa27x_udc *dev, u32 flags, const char *tag) ++{ ++ UDCCSR0 = flags|UDCCSR0_SA|UDCCSR0_OPC; ++ UDCISR0 = UDCICR_INT(0, UDC_INT_FIFOERROR | UDC_INT_PACKETCMP); ++ dev->req_pending = 0; ++ DBG(DBG_VERY_NOISY, "%s %s, %02x/%02x\n", ++ __FUNCTION__, tag, UDCCSR0, flags); ++} ++ ++static int ++write_ep0_fifo (struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ unsigned count; ++ int is_short; ++ ++ count = write_packet(&UDCDR0, req, EP0_FIFO_SIZE); ++ ep->dev->stats.write.bytes += count; ++ ++ /* last packet "must be" short (or a zlp) */ ++ is_short = (count != EP0_FIFO_SIZE); ++ ++ DBG(DBG_VERY_NOISY, "ep0in %d bytes %d left %p\n", count, ++ req->req.length - req->req.actual, &req->req); ++ ++ if (unlikely (is_short)) { ++ if (ep->dev->req_pending) ++ ep0start(ep->dev, UDCCSR0_IPR, "short IN"); ++ else ++ UDCCSR0 = UDCCSR0_IPR; ++ ++ count = req->req.length; ++ done (ep, req, 0); ++ ep0_idle(ep->dev); ++#if 0 ++ /* This seems to get rid of lost status irqs in some cases: ++ * host responds quickly, or next request involves config ++ * change automagic, or should have been hidden, or ... ++ * ++ * FIXME get rid of all udelays possible... ++ */ ++ if (count >= EP0_FIFO_SIZE) { ++ count = 100; ++ do { ++ if ((UDCCSR0 & UDCCSR0_OPC) != 0) { ++ /* clear OPC, generate ack */ ++ UDCCSR0 = UDCCSR0_OPC; ++ break; ++ } ++ count--; ++ udelay(1); ++ } while (count); ++ } ++#endif ++ } else if (ep->dev->req_pending) ++ ep0start(ep->dev, 0, "IN"); ++ return is_short; ++} ++ ++ ++/* ++ * read_fifo - unload packet(s) from the fifo we use for usb OUT ++ * transfers and put them into the request. caller should have made ++ * sure there's at least one packet ready. ++ * ++ * returns true if the request completed because of short packet or the ++ * request buffer having filled (and maybe overran till end-of-packet). ++ */ ++static int ++read_fifo (struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ for (;;) { ++ u32 *buf; ++ int bufferspace, count, is_short; ++ ++ /* make sure there's a packet in the FIFO.*/ ++ if (unlikely ((*ep->reg_udccsr & UDCCSR_PC) == 0)) ++ break; ++ buf =(u32*) (req->req.buf + req->req.actual); ++ prefetchw(buf); ++ bufferspace = req->req.length - req->req.actual; ++ ++ /* read all bytes from this packet */ ++ if (likely (*ep->reg_udccsr & UDCCSR_BNE)) { ++ count = 0x3ff & *ep->reg_udcbcr; ++ req->req.actual += min (count, bufferspace); ++ } else /* zlp */ ++ count = 0; ++ ++ is_short = (count < ep->ep.maxpacket); ++ DMSG("read %s udccsr:%02x, count:%d bytes%s req %p %d/%d\n", ++ ep->ep.name, *ep->reg_udccsr, count, ++ is_short ? "/S" : "", ++ &req->req, req->req.actual, req->req.length); ++ ++// dump_regs(ep->ep_num ); ++ count = min(count, bufferspace); ++ while (likely (count > 0)) { ++ *buf++ = *ep->reg_udcdr; ++ count -= 4; ++ } ++ DMSG("Buf:0x%p\n", req->req.buf); ++ ++ *ep->reg_udccsr = UDCCSR_PC; ++ /* RPC/RSP/RNE could now reflect the other packet buffer */ ++ ++ /* completion */ ++ if (is_short || req->req.actual == req->req.length) { ++ done (ep, req, 0); ++ if (list_empty(&ep->queue)) ++ pio_irq_disable (ep->ep_num); ++ return 1; ++ } ++ ++ /* finished that packet. the next one may be waiting... */ ++ } ++ return 0; ++} ++ ++/* ++ * special ep0 version of the above. no UBCR0 or double buffering; status ++ * handshaking is magic. most device protocols don't need control-OUT. ++ * CDC vendor commands (and RNDIS), mass storage CB/CBI, and some other ++ * protocols do use them. ++ */ ++static int ++read_ep0_fifo (struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ u32 *buf, word; ++ unsigned bufferspace; ++ ++ buf = (u32*) (req->req.buf + req->req.actual); ++ bufferspace = req->req.length - req->req.actual; ++ ++ while (UDCCSR0 & UDCCSR0_RNE) { ++ word = UDCDR0; ++ ++ if (unlikely (bufferspace == 0)) { ++ /* this happens when the driver's buffer ++ * is smaller than what the host sent. ++ * discard the extra data. ++ */ ++ if (req->req.status != -EOVERFLOW) ++ DMSG("%s overflow\n", ep->ep.name); ++ req->req.status = -EOVERFLOW; ++ } else { ++ *buf++ = word; ++ req->req.actual += 4; ++ bufferspace -= 4; ++ } ++ } ++ ++ UDCCSR0 = UDCCSR0_OPC ; ++ ++ /* completion */ ++ if (req->req.actual >= req->req.length) ++ return 1; ++ ++ /* finished that packet. the next one may be waiting... */ ++ return 0; ++} ++ ++#ifdef USE_DMA ++ ++#define MAX_IN_DMA ((DCMD_LENGTH + 1) - BULK_FIFO_SIZE) ++static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req) ++{ ++ u32 dcmd = 0; ++ u32 len = req->req.length; ++ u32 buf = req->req.dma; ++ u32 fifo = io_v2p ((u32)ep->reg_udcdr); ++ ++ buf += req->req.actual; ++ len -= req->req.actual; ++ ep->dma_con = 0; ++ ++ DMSG("%s: req:0x%p length:%d, actual:%d dma:%d\n", ++ __FUNCTION__, &req->req, req->req.length, ++ req->req.actual,ep->dma); ++ ++ /* no-descriptor mode can be simple for bulk-in, iso-in, iso-out */ ++ DCSR(ep->dma) = DCSR_NODESC; ++ if (buf & 0x3) ++ DALGN |= 1 << ep->dma; ++ else ++ DALGN &= ~(1 << ep->dma); ++ ++ if (ep->dir_in) { ++ DSADR(ep->dma) = buf; ++ DTADR(ep->dma) = fifo; ++ if (len > MAX_IN_DMA) { ++ len= MAX_IN_DMA; ++ ep->dma_con =1 ; ++ } else if (len >= ep->ep.maxpacket) { ++ if ((ep->dma_con = (len % ep->ep.maxpacket) != 0)) ++ len = ep->ep.maxpacket; ++ } ++ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN ++ | DCMD_FLOWTRG | DCMD_INCSRCADDR; ++ } else { ++ DSADR(ep->dma) = fifo; ++ DTADR(ep->dma) = buf; ++ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN ++ | DCMD_FLOWSRC | DCMD_INCTRGADDR; ++ } ++ *ep->reg_udccsr = UDCCSR_DME; ++ DCMD(ep->dma) = dcmd; ++ DCSR(ep->dma) = DCSR_NODESC | DCSR_EORIRQEN \ ++ | ((ep->dir_in) ? DCSR_STOPIRQEN : 0); ++ *ep->reg_drcmr = ep->dma | DRCMR_MAPVLD; ++ DCSR(ep->dma) |= DCSR_RUN; ++} ++ ++static void cancel_dma(struct pxa27x_ep *ep) ++{ ++ struct pxa27x_request *req; ++ u32 tmp; ++ ++ if (DCSR(ep->dma) == 0 || list_empty(&ep->queue)) ++ return; ++ ++ DMSG("hehe dma:%d,dcsr:0x%x\n", ep->dma, DCSR(ep->dma)); ++ DCSR(ep->dma) = 0; ++ while ((DCSR(ep->dma) & DCSR_STOPSTATE) == 0) ++ cpu_relax(); ++ ++ req = list_entry(ep->queue.next, struct pxa27x_request, queue); ++ tmp = DCMD(ep->dma) & DCMD_LENGTH; ++ req->req.actual = req->req.length - tmp; ++ ++ /* the last tx packet may be incomplete, so flush the fifo. ++ * FIXME correct req.actual if we can ++ */ ++ *ep->reg_udccsr = UDCCSR_FEF; ++} ++ ++static void dma_nodesc_handler(int dmach, void *_ep) ++{ ++ struct pxa27x_ep *ep = _ep; ++ struct pxa27x_request *req, *req_next; ++ u32 dcsr, tmp, completed; ++ ++ local_irq_disable(); ++ ++ req = list_entry(ep->queue.next, struct pxa27x_request, queue); ++ ++ DMSG("%s, buf:0x%p\n",__FUNCTION__, req->req.buf); ++ ++ ep->dma_irqs++; ++ ep->dev->stats.irqs++; ++ HEX_DISPLAY(ep->dev->stats.irqs); ++ ++ completed = 0; ++ ++ dcsr = DCSR(dmach); ++ DCSR(ep->dma) &= ~DCSR_RUN; ++ ++ if (dcsr & DCSR_BUSERR) { ++ DCSR(dmach) = DCSR_BUSERR; ++ printk(KERN_ERR " Buss Error\n"); ++ req->req.status = -EIO; ++ completed = 1; ++ } else if (dcsr & DCSR_ENDINTR) { ++ DCSR(dmach) = DCSR_ENDINTR; ++ if (ep->dir_in) { ++ tmp = req->req.length - req->req.actual; ++ /* Last packet is a short one*/ ++ if ( tmp < ep->ep.maxpacket) { ++ int count = 0; ++ ++ *ep->reg_udccsr = UDCCSR_SP | \ ++ (*ep->reg_udccsr & UDCCSR_MASK); ++ /*Wait for packet out */ ++ while( (count++ < 10000) && \ ++ !(*ep->reg_udccsr & UDCCSR_FS)); ++ if (count >= 10000) ++ DMSG("Failed to send packet\n"); ++ else ++ DMSG("%s: short packet sent len:%d," ++ "length:%d,actual:%d\n", __FUNCTION__, ++ tmp, req->req.length, req->req.actual); ++ req->req.actual = req->req.length; ++ completed = 1; ++ /* There are still packets to transfer */ ++ } else if ( ep->dma_con) { ++ DMSG("%s: more packets,length:%d,actual:%d\n", ++ __FUNCTION__,req->req.length, ++ req->req.actual); ++ req->req.actual += ep->ep.maxpacket; ++ completed = 0; ++ } else { ++ DMSG("%s: no more packets,length:%d," ++ "actual:%d\n", __FUNCTION__, ++ req->req.length, req->req.actual); ++ req->req.actual = req->req.length; ++ completed = 1; ++ } ++ } else { ++ req->req.actual = req->req.length; ++ completed = 1; ++ } ++ } else if (dcsr & DCSR_EORINTR) { //Only happened in OUT DMA ++ int remain,udccsr ; ++ ++ DCSR(dmach) = DCSR_EORINTR; ++ remain = DCMD(dmach) & DCMD_LENGTH; ++ req->req.actual = req->req.length - remain; ++ ++ udccsr = *ep->reg_udccsr; ++ if (udccsr & UDCCSR_SP) { ++ *ep->reg_udccsr = UDCCSR_PC | (udccsr & UDCCSR_MASK); ++ completed = 1; ++ } ++ DMSG("%s: length:%d actual:%d\n", ++ __FUNCTION__, req->req.length, req->req.actual); ++ } else ++ DMSG("%s: Others dma:%d DCSR:0x%x DCMD:0x%x\n", ++ __FUNCTION__, dmach, DCSR(dmach), DCMD(dmach)); ++ ++ if (likely(completed)) { ++ if (req->queue.next != &ep->queue) { ++ req_next = list_entry(req->queue.next, ++ struct pxa27x_request, queue); ++ kick_dma(ep, req_next); ++ } ++ done(ep, req, 0); ++ } else { ++ kick_dma(ep, req); ++ } ++ ++ local_irq_enable(); ++} ++ ++#endif ++/*-------------------------------------------------------------------------*/ ++ ++static int ++pxa27x_ep_queue(struct usb_ep *_ep, struct usb_request *_req, unsigned gfp_flags) ++{ ++ struct pxa27x_ep *ep; ++ struct pxa27x_request *req; ++ struct pxa27x_udc *dev; ++ unsigned long flags; ++ ++ req = container_of(_req, struct pxa27x_request, req); ++ if (unlikely (!_req || !_req->complete || !_req->buf|| ++ !list_empty(&req->queue))) { ++ DMSG("%s, bad params\n", __FUNCTION__); ++ return -EINVAL; ++ } ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (unlikely (!_ep || (!ep->desc && ep->ep.name != ep0name))) { ++ DMSG("%s, bad ep\n", __FUNCTION__); ++ return -EINVAL; ++ } ++ ++ DMSG("%s, ep point %d is queue\n", __FUNCTION__, ep->ep_num); ++ ++ dev = ep->dev; ++ if (unlikely (!dev->driver ++ || dev->gadget.speed == USB_SPEED_UNKNOWN)) { ++ DMSG("%s, bogus device state\n", __FUNCTION__); ++ return -ESHUTDOWN; ++ } ++ ++ /* iso is always one packet per request, that's the only way ++ * we can report per-packet status. that also helps with dma. ++ */ ++ if (unlikely (ep->ep_type == USB_ENDPOINT_XFER_ISOC ++ && req->req.length > le16_to_cpu ++ (ep->desc->wMaxPacketSize))) ++ return -EMSGSIZE; ++ ++#ifdef USE_DMA ++ // FIXME caller may already have done the dma mapping ++ if (ep->dma >= 0) { ++ _req->dma = dma_map_single(dev->dev, _req->buf, _req->length, ++ (ep->dir_in) ? DMA_TO_DEVICE : DMA_FROM_DEVICE); ++ } ++#endif ++ ++ DBG(DBG_NOISY, "%s queue req %p, len %d buf %p\n", ++ _ep->name, _req, _req->length, _req->buf); ++ ++ local_irq_save(flags); ++ ++ _req->status = -EINPROGRESS; ++ _req->actual = 0; ++ ++ /* kickstart this i/o queue? */ ++ if (list_empty(&ep->queue) && !ep->stopped) { ++ if (ep->desc == 0 /* ep0 */) { ++ unsigned length = _req->length; ++ ++ switch (dev->ep0state) { ++ case EP0_IN_DATA_PHASE: ++ dev->stats.write.ops++; ++ if (write_ep0_fifo(ep, req)) ++ req = 0; ++ break; ++ ++ case EP0_OUT_DATA_PHASE: ++ dev->stats.read.ops++; ++ if (dev->req_pending) ++ ep0start(dev, UDCCSR0_IPR, "OUT"); ++ if (length == 0 || ((UDCCSR0 & UDCCSR0_RNE) != 0 ++ && read_ep0_fifo(ep, req))) { ++ ep0_idle(dev); ++ done(ep, req, 0); ++ req = 0; ++ } ++ break; ++ case EP0_NO_ACTION: ++ ep0_idle(dev); ++ req=0; ++ break; ++ default: ++ DMSG("ep0 i/o, odd state %d\n", dev->ep0state); ++ local_irq_restore (flags); ++ return -EL2HLT; ++ } ++#ifdef USE_DMA ++ /* either start dma or prime pio pump */ ++ } else if (ep->dma >= 0) { ++ kick_dma(ep, req); ++#endif ++ /* can the FIFO can satisfy the request immediately? */ ++ } else if (ep->dir_in ++ && (*ep->reg_udccsr & UDCCSR_FS) != 0 ++ && write_fifo(ep, req)) { ++ req = 0; ++ } else if ((*ep->reg_udccsr & UDCCSR_FS) != 0 ++ && read_fifo(ep, req)) { ++ req = 0; ++ } ++ DMSG("req:%p,ep->desc:%p,ep->dma:%d\n", req, ep->desc, ep->dma); ++ if (likely (req && ep->desc) && ep->dma < 0) ++ pio_irq_enable(ep->ep_num); ++ } ++ ++ /* pio or dma irq handler advances the queue. */ ++ if (likely (req != 0)) ++ list_add_tail(&req->queue, &ep->queue); ++ local_irq_restore(flags); ++ ++ return 0; ++} ++ ++ ++/* ++ * nuke - dequeue ALL requests ++ */ ++static void nuke(struct pxa27x_ep *ep, int status) ++{ ++ struct pxa27x_request *req; ++ ++ /* called with irqs blocked */ ++#ifdef USE_DMA ++ if (ep->dma >= 0 && !ep->stopped) ++ cancel_dma(ep); ++#endif ++ while (!list_empty(&ep->queue)) { ++ req = list_entry(ep->queue.next, struct pxa27x_request, queue); ++ done(ep, req, status); ++ } ++ if (ep->desc) ++ pio_irq_disable (ep->ep_num); ++} ++ ++ ++/* dequeue JUST ONE request */ ++static int pxa27x_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req) ++{ ++ struct pxa27x_ep *ep; ++ struct pxa27x_request *req; ++ unsigned long flags; ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (!_ep || ep->ep.name == ep0name) ++ return -EINVAL; ++ ++ local_irq_save(flags); ++ ++ /* make sure it's actually queued on this endpoint */ ++ list_for_each_entry (req, &ep->queue, queue) { ++ if (&req->req == _req) ++ break; ++ } ++ if (&req->req != _req) { ++ local_irq_restore(flags); ++ return -EINVAL; ++ } ++ ++#ifdef USE_DMA ++ if (ep->dma >= 0 && ep->queue.next == &req->queue && !ep->stopped) { ++ cancel_dma(ep); ++ done(ep, req, -ECONNRESET); ++ /* restart i/o */ ++ if (!list_empty(&ep->queue)) { ++ req = list_entry(ep->queue.next, ++ struct pxa27x_request, queue); ++ kick_dma(ep, req); ++ } ++ } else ++#endif ++ done(ep, req, -ECONNRESET); ++ ++ local_irq_restore(flags); ++ return 0; ++} ++ ++/*-------------------------------------------------------------------------*/ ++ ++static int pxa27x_ep_set_halt(struct usb_ep *_ep, int value) ++{ ++ struct pxa27x_ep *ep; ++ unsigned long flags; ++ ++ DMSG("%s is called\n", __FUNCTION__); ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (unlikely (!_ep ++ || (!ep->desc && ep->ep.name != ep0name)) ++ || ep->ep_type == USB_ENDPOINT_XFER_ISOC) { ++ DMSG("%s, bad ep\n", __FUNCTION__); ++ return -EINVAL; ++ } ++ if (value == 0) { ++ /* this path (reset toggle+halt) is needed to implement ++ * SET_INTERFACE on normal hardware. but it can't be ++ * done from software on the PXA UDC, and the hardware ++ * forgets to do it as part of SET_INTERFACE automagic. ++ */ ++ DMSG("only host can clear %s halt\n", _ep->name); ++ return -EROFS; ++ } ++ ++ local_irq_save(flags); ++ ++ if (ep->dir_in && ((*ep->reg_udccsr & UDCCSR_FS) == 0 ++ || !list_empty(&ep->queue))) { ++ local_irq_restore(flags); ++ return -EAGAIN; ++ } ++ ++ /* FST bit is the same for control, bulk in, bulk out, interrupt in */ ++ *ep->reg_udccsr = UDCCSR_FST|UDCCSR_FEF; ++ ++ /* ep0 needs special care */ ++ if (!ep->desc) { ++ start_watchdog(ep->dev); ++ ep->dev->req_pending = 0; ++ ep->dev->ep0state = EP0_STALL; ++ LED_EP0_OFF; ++ ++ /* and bulk/intr endpoints like dropping stalls too */ ++ } else { ++ unsigned i; ++ for (i = 0; i < 1000; i += 20) { ++ if (*ep->reg_udccsr & UDCCSR_SST) ++ break; ++ udelay(20); ++ } ++ } ++ local_irq_restore(flags); ++ ++ DBG(DBG_VERBOSE, "%s halt\n", _ep->name); ++ return 0; ++} ++ ++static int pxa27x_ep_fifo_status(struct usb_ep *_ep) ++{ ++ struct pxa27x_ep *ep; ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (!_ep) { ++ DMSG("%s, bad ep\n", __FUNCTION__); ++ return -ENODEV; ++ } ++ /* pxa can't report unclaimed bytes from IN fifos */ ++ if (ep->dir_in) ++ return -EOPNOTSUPP; ++ if (ep->dev->gadget.speed == USB_SPEED_UNKNOWN ++ || (*ep->reg_udccsr & UDCCSR_FS) == 0) ++ return 0; ++ else ++ return (*ep->reg_udcbcr & 0xfff) + 1; ++} ++ ++static void pxa27x_ep_fifo_flush(struct usb_ep *_ep) ++{ ++ struct pxa27x_ep *ep; ++ ++ ep = container_of(_ep, struct pxa27x_ep, ep); ++ if (!_ep || ep->ep.name == ep0name || !list_empty(&ep->queue)) { ++ DMSG("%s, bad ep\n", __FUNCTION__); ++ return; ++ } ++ ++ /* toggle and halt bits stay unchanged */ ++ ++ /* for OUT, just read and discard the FIFO contents. */ ++ if (!ep->dir_in) { ++ while (((*ep->reg_udccsr) & UDCCSR_BNE) != 0) ++ (void) *ep->reg_udcdr; ++ return; ++ } ++ ++ /* most IN status is the same, but ISO can't stall */ ++ *ep->reg_udccsr = UDCCSR_PC|UDCCSR_FST|UDCCSR_TRN ++ | (ep->ep_type == USB_ENDPOINT_XFER_ISOC) ++ ? 0 : UDCCSR_SST; ++} ++ ++ ++static struct usb_ep_ops pxa27x_ep_ops = { ++ .enable = pxa27x_ep_enable, ++ .disable = pxa27x_ep_disable, ++ ++ .alloc_request = pxa27x_ep_alloc_request, ++ .free_request = pxa27x_ep_free_request, ++ ++ .alloc_buffer = pxa27x_ep_alloc_buffer, ++ .free_buffer = pxa27x_ep_free_buffer, ++ ++ .queue = pxa27x_ep_queue, ++ .dequeue = pxa27x_ep_dequeue, ++ ++ .set_halt = pxa27x_ep_set_halt, ++ .fifo_status = pxa27x_ep_fifo_status, ++ .fifo_flush = pxa27x_ep_fifo_flush, ++}; ++ ++ ++/* --------------------------------------------------------------------------- ++ * device-scoped parts of the api to the usb controller hardware ++ * --------------------------------------------------------------------------- ++ */ ++ ++static int pxa27x_udc_get_frame(struct usb_gadget *_gadget) ++{ ++ return (UDCFNR & 0x3FF); ++} ++ ++static int pxa27x_udc_wakeup(struct usb_gadget *_gadget) ++{ ++ /* host may not have enabled remote wakeup */ ++ if ((UDCCR & UDCCR_DWRE) == 0) ++ return -EHOSTUNREACH; ++ udc_set_mask_UDCCR(UDCCR_UDR); ++ return 0; ++} ++ ++static const struct usb_gadget_ops pxa27x_udc_ops = { ++ .get_frame = pxa27x_udc_get_frame, ++ .wakeup = pxa27x_udc_wakeup, ++ // current versions must always be self-powered ++}; ++ ++ ++/*-------------------------------------------------------------------------*/ ++ ++#ifdef UDC_PROC_FILE ++ ++static const char proc_node_name [] = "driver/udc"; ++ ++static int ++udc_proc_read(char *page, char **start, off_t off, int count, ++ int *eof, void *_dev) ++{ ++ char *buf = page; ++ struct pxa27x_udc *dev = _dev; ++ char *next = buf; ++ unsigned size = count; ++ unsigned long flags; ++ int i, t; ++ u32 tmp; ++ ++ if (off != 0) ++ return 0; ++ ++ local_irq_save(flags); ++ ++ /* basic device status */ ++ t = scnprintf(next, size, DRIVER_DESC "\n" ++ "%s version: %s\nGadget driver: %s\n", ++ driver_name, DRIVER_VERSION SIZE_STR DMASTR, ++ dev->driver ? dev->driver->driver.name : "(none)"); ++ size -= t; ++ next += t; ++ ++ /* registers for device and ep0 */ ++ t = scnprintf(next, size, ++ "uicr %02X.%02X, usir %02X.%02x, ufnr %02X\n", ++ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR); ++ size -= t; ++ next += t; ++ ++ tmp = UDCCR; ++ t = scnprintf(next, size,"udccr %02X =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n", tmp, ++ (tmp & UDCCR_OEN) ? " oen":"", ++ (tmp & UDCCR_AALTHNP) ? " aalthnp":"", ++ (tmp & UDCCR_AHNP) ? " rem" : "", ++ (tmp & UDCCR_BHNP) ? " rstir" : "", ++ (tmp & UDCCR_DWRE) ? " dwre" : "", ++ (tmp & UDCCR_SMAC) ? " smac" : "", ++ (tmp & UDCCR_EMCE) ? " emce" : "", ++ (tmp & UDCCR_UDR) ? " udr" : "", ++ (tmp & UDCCR_UDA) ? " uda" : "", ++ (tmp & UDCCR_UDE) ? " ude" : "", ++ (tmp & UDCCR_ACN) >> UDCCR_ACN_S, ++ (tmp & UDCCR_AIN) >> UDCCR_AIN_S, ++ (tmp & UDCCR_AAISN)>> UDCCR_AAISN_S ); ++ ++ size -= t; ++ next += t; ++ ++ tmp = UDCCSR0; ++ t = scnprintf(next, size, ++ "udccsr0 %02X =%s%s%s%s%s%s%s\n", tmp, ++ (tmp & UDCCSR0_SA) ? " sa" : "", ++ (tmp & UDCCSR0_RNE) ? " rne" : "", ++ (tmp & UDCCSR0_FST) ? " fst" : "", ++ (tmp & UDCCSR0_SST) ? " sst" : "", ++ (tmp & UDCCSR0_DME) ? " dme" : "", ++ (tmp & UDCCSR0_IPR) ? " ipr" : "", ++ (tmp & UDCCSR0_OPC) ? " opc" : ""); ++ size -= t; ++ next += t; ++ ++ if (!dev->driver) ++ goto done; ++ ++ t = scnprintf(next, size, "ep0 IN %lu/%lu, OUT %lu/%lu\nirqs %lu\n\n", ++ dev->stats.write.bytes, dev->stats.write.ops, ++ dev->stats.read.bytes, dev->stats.read.ops, ++ dev->stats.irqs); ++ size -= t; ++ next += t; ++ ++ /* dump endpoint queues */ ++ for (i = 0; i < UDC_EP_NUM; i++) { ++ struct pxa27x_ep *ep = &dev->ep [i]; ++ struct pxa27x_request *req; ++ int t; ++ ++ if (i != 0) { ++ const struct usb_endpoint_descriptor *d; ++ ++ d = ep->desc; ++ if (!d) ++ continue; ++ tmp = *dev->ep [i].reg_udccsr; ++ t = scnprintf(next, size, ++ "%s max %d %s udccs %02x udccr:0x%x\n", ++ ep->ep.name, le16_to_cpu (d->wMaxPacketSize), ++ (ep->dma >= 0) ? "dma" : "pio", tmp, ++ *dev->ep[i].reg_udccr); ++ /* TODO translate all five groups of udccs bits! */ ++ ++ } else /* ep0 should only have one transfer queued */ ++ t = scnprintf(next, size, "ep0 max 16 pio irqs %lu\n", ++ ep->pio_irqs); ++ if (t <= 0 || t > size) ++ goto done; ++ size -= t; ++ next += t; ++ ++ if (list_empty(&ep->queue)) { ++ t = scnprintf(next, size, "\t(nothing queued)\n"); ++ if (t <= 0 || t > size) ++ goto done; ++ size -= t; ++ next += t; ++ continue; ++ } ++ list_for_each_entry(req, &ep->queue, queue) { ++#ifdef USE_DMA ++ if (ep->dma >= 0 && req->queue.prev == &ep->queue) ++ t = scnprintf(next, size, ++ "\treq %p len %d/%d " ++ "buf %p (dma%d dcmd %08x)\n", ++ &req->req, req->req.actual, ++ req->req.length, req->req.buf, ++ ep->dma, DCMD(ep->dma) ++ // low 13 bits == bytes-to-go ++ ); ++ else ++#endif ++ t = scnprintf(next, size, ++ "\treq %p len %d/%d buf %p\n", ++ &req->req, req->req.actual, ++ req->req.length, req->req.buf); ++ if (t <= 0 || t > size) ++ goto done; ++ size -= t; ++ next += t; ++ } ++ } ++ ++done: ++ local_irq_restore(flags); ++ *eof = 1; ++ return count - size; ++} ++ ++#define create_proc_files() \ ++ create_proc_read_entry(proc_node_name, 0, NULL, udc_proc_read, dev) ++#define remove_proc_files() \ ++ remove_proc_entry(proc_node_name, NULL) ++ ++#else /* !UDC_PROC_FILE */ ++#define create_proc_files() do {} while (0) ++#define remove_proc_files() do {} while (0) ++ ++#endif /* UDC_PROC_FILE */ ++ ++/* "function" sysfs attribute */ ++static ssize_t ++show_function (struct device *_dev, struct device_attribute *attr, char *buf) ++{ ++ struct pxa27x_udc *dev = dev_get_drvdata (_dev); ++ ++ if (!dev->driver ++ || !dev->driver->function ++ || strlen (dev->driver->function) > PAGE_SIZE) ++ return 0; ++ return scnprintf (buf, PAGE_SIZE, "%s\n", dev->driver->function); ++} ++static DEVICE_ATTR (function, S_IRUGO, show_function, NULL); ++ ++/*-------------------------------------------------------------------------*/ ++ ++/* ++ * udc_disable - disable USB device controller ++ */ ++static void udc_disable(struct pxa27x_udc *dev) ++{ ++ UDCICR0 = UDCICR1 = 0x00000000; ++ ++ udc_clear_mask_UDCCR(UDCCR_UDE); ++ ++ /* Disable clock for USB device */ ++ pxa_set_cken(CKEN11_USB, 0); ++ ++ ep0_idle (dev); ++ dev->gadget.speed = USB_SPEED_UNKNOWN; ++ LED_CONNECTED_OFF; ++ if (dev->mach->udc_command) ++ dev->mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT); ++} ++ ++ ++/* ++ * udc_reinit - initialize software state ++ */ ++static void udc_reinit(struct pxa27x_udc *dev) ++{ ++ u32 i; ++ ++ dev->ep0state = EP0_IDLE; ++ ++ /* basic endpoint records init */ ++ for (i = 0; i < UDC_EP_NUM; i++) { ++ struct pxa27x_ep *ep = &dev->ep[i]; ++ ++ ep->stopped = 0; ++ ep->pio_irqs = ep->dma_irqs = 0; ++ } ++ dev->configuration = 0; ++ dev->interface = 0; ++ dev->alternate = 0; ++ /* the rest was statically initialized, and is read-only */ ++} ++ ++/* until it's enabled, this UDC should be completely invisible ++ * to any USB host. ++ */ ++static void udc_enable (struct pxa27x_udc *dev) ++{ ++ udc_clear_mask_UDCCR(UDCCR_UDE); ++ ++ // MST_MSCWR2 &= ~(MST_MSCWR2_nUSBC_SC); ++ ++ /* Enable clock for USB device */ ++ pxa_set_cken(CKEN11_USB, 1); ++ ++ UDCICR0 = UDCICR1 = 0; ++ ++ ep0_idle(dev); ++ dev->gadget.speed = USB_SPEED_FULL; ++ dev->stats.irqs = 0; ++ ++ udc_set_mask_UDCCR(UDCCR_UDE); ++ udelay (2); ++ if (UDCCR & UDCCR_EMCE) ++ { ++ printk(KERN_ERR ": There are error in configuration, udc disabled\n"); ++ } ++ ++ /* caller must be able to sleep in order to cope ++ * with startup transients. ++ */ ++ msleep(100); ++ ++ /* enable suspend/resume and reset irqs */ ++ UDCICR1 = UDCICR1_IECC | UDCICR1_IERU | UDCICR1_IESU | UDCICR1_IERS; ++ ++ /* enable ep0 irqs */ ++ UDCICR0 = UDCICR_INT(0,UDCICR_INT_MASK); ++#if 0 ++ for(i=1; i < UDC_EP_NUM; i++) { ++ if (dev->ep[i].assigned) ++ pio_irq_enable(i); ++ } ++#endif ++ if (dev->mach->udc_command) ++ dev->mach->udc_command(PXA2XX_UDC_CMD_CONNECT); ++} ++ ++ ++/* when a driver is successfully registered, it will receive ++ * control requests including set_configuration(), which enables ++ * non-control requests. then usb traffic follows until a ++ * disconnect is reported. then a host may connect again, or ++ * the driver might get unbound. ++ */ ++int usb_gadget_register_driver(struct usb_gadget_driver *driver) ++{ ++ struct pxa27x_udc *dev = the_controller; ++ int retval; ++#if 0 ++ DMSG("dev=0x%x, driver=0x%x, speed=%d," ++ "bind=0x%x, unbind=0x%x, disconnect=0x%x, setup=0x%x\n", ++ (unsigned)dev, (unsigned)driver, driver->speed, ++ (unsigned)driver->bind, (unsigned)driver->unbind, ++ (unsigned)driver->disconnect, (unsigned)driver->setup); ++#endif ++ if (!driver || driver->speed != USB_SPEED_FULL ++ || !driver->bind ++ || !driver->unbind ++ || !driver->disconnect ++ || !driver->setup) ++ return -EINVAL; ++ if (!dev) ++ return -ENODEV; ++ if (dev->driver) ++ return -EBUSY; ++ ++ /* first hook up the driver ... */ ++ dev->driver = driver; ++ dev->gadget.dev.driver = &driver->driver; ++ ++ device_add (&dev->gadget.dev); ++ retval = driver->bind(&dev->gadget); ++ if (retval) { ++ DMSG("bind to driver %s --> error %d\n", ++ driver->driver.name, retval); ++ device_del (&dev->gadget.dev); ++ ++ dev->driver = 0; ++ dev->gadget.dev.driver = 0; ++ return retval; ++ } ++ device_create_file(dev->dev, &dev_attr_function); ++ ++ /* ... then enable host detection and ep0; and we're ready ++ * for set_configuration as well as eventual disconnect. ++ * NOTE: this shouldn't power up until later. ++ */ ++ DMSG("registered gadget driver '%s'\n", driver->driver.name); ++ udc_enable(dev); ++ dump_state(dev); ++ return 0; ++} ++EXPORT_SYMBOL(usb_gadget_register_driver); ++ ++static void ++stop_activity(struct pxa27x_udc *dev, struct usb_gadget_driver *driver) ++{ ++ int i; ++ ++ DMSG("Trace path 1\n"); ++ /* don't disconnect drivers more than once */ ++ if (dev->gadget.speed == USB_SPEED_UNKNOWN) ++ driver = 0; ++ dev->gadget.speed = USB_SPEED_UNKNOWN; ++ ++ /* prevent new request submissions, kill any outstanding requests */ ++ for (i = 0; i < UDC_EP_NUM; i++) { ++ struct pxa27x_ep *ep = &dev->ep[i]; ++ ++ ep->stopped = 1; ++ nuke(ep, -ESHUTDOWN); ++ } ++ del_timer_sync(&dev->timer); ++ ++ /* report disconnect; the driver is already quiesced */ ++ if (driver) ++ driver->disconnect(&dev->gadget); ++ ++ /* re-init driver-visible data structures */ ++ udc_reinit(dev); ++} ++ ++int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) ++{ ++ struct pxa27x_udc *dev = the_controller; ++ ++ if (!dev) ++ return -ENODEV; ++ if (!driver || driver != dev->driver) ++ return -EINVAL; ++ ++ local_irq_disable(); ++ udc_disable(dev); ++ stop_activity(dev, driver); ++ local_irq_enable(); ++ ++ driver->unbind(&dev->gadget); ++ dev->driver = 0; ++ ++ device_del (&dev->gadget.dev); ++ device_remove_file(dev->dev, &dev_attr_function); ++ ++ DMSG("unregistered gadget driver '%s'\n", driver->driver.name); ++ dump_state(dev); ++ return 0; ++} ++EXPORT_SYMBOL(usb_gadget_unregister_driver); ++ ++#ifndef enable_disconnect_irq ++#define enable_disconnect_irq() do {} while (0) ++#define disable_disconnect_irq() do {} while (0) ++#endif ++ ++ ++/*-------------------------------------------------------------------------*/ ++ ++static inline void clear_ep_state (struct pxa27x_udc *dev) ++{ ++ unsigned i; ++ ++ /* hardware SET_{CONFIGURATION,INTERFACE} automagic resets endpoint ++ * fifos, and pending transactions mustn't be continued in any case. ++ */ ++ for (i = 1; i < UDC_EP_NUM; i++) ++ nuke(&dev->ep[i], -ECONNABORTED); ++} ++ ++static void udc_watchdog(unsigned long _dev) ++{ ++ struct pxa27x_udc *dev = (void *)_dev; ++ ++ local_irq_disable(); ++ if (dev->ep0state == EP0_STALL ++ && (UDCCSR0 & UDCCSR0_FST) == 0 ++ && (UDCCSR0 & UDCCSR0_SST) == 0) { ++ UDCCSR0 = UDCCSR0_FST|UDCCSR0_FTF; ++ DBG(DBG_VERBOSE, "ep0 re-stall\n"); ++ start_watchdog(dev); ++ } ++ local_irq_enable(); ++} ++ ++static void handle_ep0 (struct pxa27x_udc *dev) ++{ ++ u32 udccsr0 = UDCCSR0; ++ struct pxa27x_ep *ep = &dev->ep [0]; ++ struct pxa27x_request *req; ++ union { ++ struct usb_ctrlrequest r; ++ u8 raw [8]; ++ u32 word [2]; ++ } u; ++ ++ if (list_empty(&ep->queue)) ++ req = 0; ++ else ++ req = list_entry(ep->queue.next, struct pxa27x_request, queue); ++ ++ /* clear stall status */ ++ if (udccsr0 & UDCCSR0_SST) { ++ nuke(ep, -EPIPE); ++ UDCCSR0 = UDCCSR0_SST; ++ del_timer(&dev->timer); ++ ep0_idle(dev); ++ } ++ ++ /* previous request unfinished? non-error iff back-to-back ... */ ++ if ((udccsr0 & UDCCSR0_SA) != 0 && dev->ep0state != EP0_IDLE) { ++ nuke(ep, 0); ++ del_timer(&dev->timer); ++ ep0_idle(dev); ++ } ++ ++ switch (dev->ep0state) { ++ case EP0_NO_ACTION: ++ printk(KERN_INFO"%s: Busy\n", __FUNCTION__); ++ /*Fall through */ ++ case EP0_IDLE: ++ /* late-breaking status? */ ++ udccsr0 = UDCCSR0; ++ ++ /* start control request? */ ++ if (likely((udccsr0 & (UDCCSR0_OPC|UDCCSR0_SA|UDCCSR0_RNE)) ++ == (UDCCSR0_OPC|UDCCSR0_SA|UDCCSR0_RNE))) { ++ int i; ++ ++ nuke (ep, -EPROTO); ++ /* read SETUP packet */ ++ for (i = 0; i < 2; i++) { ++ if (unlikely(!(UDCCSR0 & UDCCSR0_RNE))) { ++bad_setup: ++ DMSG("SETUP %d!\n", i); ++ goto stall; ++ } ++ u.word [i] = UDCDR0; ++ } ++ if (unlikely((UDCCSR0 & UDCCSR0_RNE) != 0)) ++ goto bad_setup; ++ ++ le16_to_cpus (&u.r.wValue); ++ le16_to_cpus (&u.r.wIndex); ++ le16_to_cpus (&u.r.wLength); ++ ++ LED_EP0_ON; ++ ++ DBG(DBG_VERBOSE, "SETUP %02x.%02x v%04x i%04x l%04x\n", ++ u.r.bRequestType, u.r.bRequest, ++ u.r.wValue, u.r.wIndex, u.r.wLength); ++ /* cope with automagic for some standard requests. */ ++ dev->req_std = (u.r.bRequestType & USB_TYPE_MASK) ++ == USB_TYPE_STANDARD; ++ dev->req_config = 0; ++ dev->req_pending = 1; ++#if 0 ++ switch (u.r.bRequest) { ++ /* hardware was supposed to hide this */ ++ case USB_REQ_SET_CONFIGURATION: ++ case USB_REQ_SET_INTERFACE: ++ case USB_REQ_SET_ADDRESS: ++ printk(KERN_ERR "Should not come here\n"); ++ break; ++ } ++ ++#endif ++ if (u.r.bRequestType & USB_DIR_IN) ++ dev->ep0state = EP0_IN_DATA_PHASE; ++ else ++ dev->ep0state = EP0_OUT_DATA_PHASE; ++ i = dev->driver->setup(&dev->gadget, &u.r); ++ ++ if (i < 0) { ++ /* hardware automagic preventing STALL... */ ++ if (dev->req_config) { ++ /* hardware sometimes neglects to tell ++ * tell us about config change events, ++ * so later ones may fail... ++ */ ++ WARN("config change %02x fail %d?\n", ++ u.r.bRequest, i); ++ return; ++ /* TODO experiment: if has_cfr, ++ * hardware didn't ACK; maybe we ++ * could actually STALL! ++ */ ++ } ++ DBG(DBG_VERBOSE, "protocol STALL, " ++ "%02x err %d\n", UDCCSR0, i); ++stall: ++ /* the watchdog timer helps deal with cases ++ * where udc seems to clear FST wrongly, and ++ * then NAKs instead of STALLing. ++ */ ++ ep0start(dev, UDCCSR0_FST|UDCCSR0_FTF, "stall"); ++ start_watchdog(dev); ++ dev->ep0state = EP0_STALL; ++ LED_EP0_OFF; ++ ++ /* deferred i/o == no response yet */ ++ } else if (dev->req_pending) { ++ if (likely(dev->ep0state == EP0_IN_DATA_PHASE ++ || dev->req_std || u.r.wLength)) ++ ep0start(dev, 0, "defer"); ++ else ++ ep0start(dev, UDCCSR0_IPR, "defer/IPR"); ++ } ++ ++ /* expect at least one data or status stage irq */ ++ return; ++ ++ } else { ++ /* some random early IRQ: ++ * - we acked FST ++ * - IPR cleared ++ * - OPC got set, without SA (likely status stage) ++ */ ++ UDCCSR0 = udccsr0 & (UDCCSR0_SA|UDCCSR0_OPC); ++ } ++ break; ++ case EP0_IN_DATA_PHASE: /* GET_DESCRIPTOR etc */ ++ if (udccsr0 & UDCCSR0_OPC) { ++ UDCCSR0 = UDCCSR0_OPC|UDCCSR0_FTF; ++ DBG(DBG_VERBOSE, "ep0in premature status\n"); ++ if (req) ++ done(ep, req, 0); ++ ep0_idle(dev); ++ } else /* irq was IPR clearing */ { ++ if (req) { ++ /* this IN packet might finish the request */ ++ (void) write_ep0_fifo(ep, req); ++ } /* else IN token before response was written */ ++ } ++ break; ++ case EP0_OUT_DATA_PHASE: /* SET_DESCRIPTOR etc */ ++ if (udccsr0 & UDCCSR0_OPC) { ++ if (req) { ++ /* this OUT packet might finish the request */ ++ if (read_ep0_fifo(ep, req)) ++ done(ep, req, 0); ++ /* else more OUT packets expected */ ++ } /* else OUT token before read was issued */ ++ } else /* irq was IPR clearing */ { ++ DBG(DBG_VERBOSE, "ep0out premature status\n"); ++ if (req) ++ done(ep, req, 0); ++ ep0_idle(dev); ++ } ++ break; ++ case EP0_STALL: ++ UDCCSR0 = UDCCSR0_FST; ++ break; ++ } ++ UDCISR0 = UDCISR_INT(0, UDCISR_INT_MASK); ++} ++ ++ ++static void handle_ep(struct pxa27x_ep *ep) ++{ ++ struct pxa27x_request *req; ++ int completed; ++ u32 udccsr=0; ++ ++ DMSG("%s is called\n", __FUNCTION__); ++ do { ++ completed = 0; ++ if (likely (!list_empty(&ep->queue))) { ++ req = list_entry(ep->queue.next, ++ struct pxa27x_request, queue); ++ } else ++ req = 0; ++ ++// udccsr = *ep->reg_udccsr; ++ DMSG("%s: req:%p, udcisr0:0x%x udccsr %p:0x%x\n", __FUNCTION__, ++ req, UDCISR0, ep->reg_udccsr, *ep->reg_udccsr); ++ if (unlikely(ep->dir_in)) { ++ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr; ++ if (unlikely (udccsr)) ++ *ep->reg_udccsr = udccsr; ++ ++ if (req && likely ((*ep->reg_udccsr & UDCCSR_FS) != 0)) ++ completed = write_fifo(ep, req); ++ ++ } else { ++ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr; ++ if (unlikely(udccsr)) ++ *ep->reg_udccsr = udccsr; ++ ++ /* fifos can hold packets, ready for reading... */ ++ if (likely(req)) { ++ completed = read_fifo(ep, req); ++ } else { ++ pio_irq_disable (ep->ep_num); ++ *ep->reg_udccsr = UDCCSR_FEF; ++ DMSG("%s: no req for out data\n", ++ __FUNCTION__); ++ } ++ } ++ ep->pio_irqs++; ++ } while (completed); ++} ++ ++static void pxa27x_change_configuration (struct pxa27x_udc *dev) ++{ ++ struct usb_ctrlrequest req ; ++ ++ req.bRequestType = 0; ++ req.bRequest = USB_REQ_SET_CONFIGURATION; ++ req.wValue = dev->configuration; ++ req.wIndex = 0; ++ req.wLength = 0; ++ ++ dev->ep0state = EP0_NO_ACTION; ++ dev->driver->setup(&dev->gadget, &req); ++ ++} ++ ++static void pxa27x_change_interface (struct pxa27x_udc *dev) ++{ ++ struct usb_ctrlrequest req; ++ ++ req.bRequestType = USB_RECIP_INTERFACE; ++ req.bRequest = USB_REQ_SET_INTERFACE; ++ req.wValue = dev->alternate; ++ req.wIndex = dev->interface; ++ req.wLength = 0; ++ ++ dev->ep0state = EP0_NO_ACTION; ++ dev->driver->setup(&dev->gadget, &req); ++} ++ ++/* ++ * pxa27x_udc_irq - interrupt handler ++ * ++ * avoid delays in ep0 processing. the control handshaking isn't always ++ * under software control (pxa250c0 and the pxa255 are better), and delays ++ * could cause usb protocol errors. ++ */ ++static irqreturn_t ++pxa27x_udc_irq(int irq, void *_dev) ++{ ++ struct pxa27x_udc *dev = _dev; ++ int handled; ++ ++ dev->stats.irqs++; ++ HEX_DISPLAY(dev->stats.irqs); ++ ++// printk("\n"); ++ DBG(DBG_VERBOSE, "Interrupt, UDCISR0:0x%08x, UDCISR1:0x%08x, " ++ "UDCCR:0x%08x\n", UDCISR0, UDCISR1, UDCCR); ++ do { ++ u32 udcir = UDCISR1 & 0xF8000000; ++ ++ handled = 0; ++ ++ /* SUSpend Interrupt Request */ ++ if (unlikely(udcir & UDCISR1_IRSU)) { ++ UDCISR1 = UDCISR1_IRSU; ++ handled = 1; ++ DBG(DBG_VERBOSE, "USB suspend\n"); ++ if (dev->gadget.speed != USB_SPEED_UNKNOWN ++ && dev->driver ++ && dev->driver->suspend) ++ dev->driver->suspend(&dev->gadget); ++ ep0_idle (dev); ++ } ++ ++ /* RESume Interrupt Request */ ++ if (unlikely(udcir & UDCISR1_IRRU)) { ++ UDCISR1 = UDCISR1_IRRU; ++ handled = 1; ++ DBG(DBG_VERBOSE, "USB resume\n"); ++ ++ if (dev->gadget.speed != USB_SPEED_UNKNOWN ++ && dev->driver ++ && dev->driver->resume) ++ dev->driver->resume(&dev->gadget); ++ } ++ ++ if (unlikely(udcir & UDCISR1_IRCC)) { ++ unsigned config, interface, alternate; ++ ++ handled = 1; ++ DBG(DBG_VERBOSE, "USB SET_CONFIGURATION or " ++ "SET_INTERFACE command received\n"); ++ ++ UDCCR |= UDCCR_SMAC; ++ ++ config = (UDCCR & UDCCR_ACN) >> UDCCR_ACN_S; ++ ++ if (dev->configuration != config) { ++ dev->configuration = config; ++ pxa27x_change_configuration(dev) ; ++ } ++ ++ interface = (UDCCR & UDCCR_AIN) >> UDCCR_AIN_S; ++ alternate = (UDCCR & UDCCR_AAISN) >> UDCCR_AAISN_S; ++ ++ if ( (dev->configuration != interface) || \ ++ (dev->alternate != alternate)){ ++ dev->interface = config; ++ dev->alternate = alternate; ++ pxa27x_change_interface(dev); ++ } ++ ++ UDCISR1 = UDCISR1_IRCC; ++ DMSG("%s: con:%d,inter:%d,alt:%d\n", ++ __FUNCTION__, config,interface, alternate); ++ } ++ ++ /* ReSeT Interrupt Request - USB reset */ ++ if (unlikely(udcir & UDCISR1_IRRS)) { ++ UDCISR1 = UDCISR1_IRRS; ++ handled = 1; ++ ++ if ((UDCCR & UDCCR_UDA) == 0) { ++ DBG(DBG_VERBOSE, "USB reset start\n"); ++ ++ /* reset driver and endpoints, ++ * in case that's not yet done ++ */ ++ stop_activity (dev, dev->driver); ++ ++ } ++ INFO("USB reset\n"); ++ dev->gadget.speed = USB_SPEED_FULL; ++ memset(&dev->stats, 0, sizeof dev->stats); ++ ++ } else { ++ u32 udcisr0 = UDCISR0 ; ++ u32 udcisr1 = UDCISR1 & 0xFFFF; ++ int i; ++ ++ if (unlikely (!udcisr0 && !udcisr1)) ++ continue; ++ ++ DBG(DBG_VERY_NOISY, "irq %02x.%02x\n", udcisr1,udcisr0); ++ ++ /* control traffic */ ++ if (udcisr0 & UDCISR0_IR0) { ++ dev->ep[0].pio_irqs++; ++ handle_ep0(dev); ++ handled = 1; ++ } ++ ++ udcisr0 >>= 2; ++ /* endpoint data transfers */ ++ for (i = 1; udcisr0!=0 && i < 16; udcisr0>>=2,i++) { ++ UDCISR0 = UDCISR_INT(i, UDCISR_INT_MASK); ++ ++ if (udcisr0 & UDC_INT_FIFOERROR) ++ printk(KERN_ERR" Endpoint %d Fifo error\n", i); ++ if (udcisr0 & UDC_INT_PACKETCMP) { ++ handle_ep(&dev->ep[i]); ++ handled = 1; ++ } ++ ++ } ++ ++ for (i = 0; udcisr1!=0 && i < 8; udcisr1 >>= 2, i++) { ++ UDCISR1 = UDCISR_INT(i, UDCISR_INT_MASK); ++ ++ if (udcisr1 & UDC_INT_FIFOERROR) { ++ printk(KERN_ERR" Endpoint %d fifo error\n", (i+16)); ++ } ++ ++ if (udcisr1 & UDC_INT_PACKETCMP) { ++ handle_ep(&dev->ep[i+16]); ++ handled = 1; ++ } ++ } ++ } ++ ++ /* we could also ask for 1 msec SOF (SIR) interrupts */ ++ ++ } while (handled); ++ return IRQ_HANDLED; ++} ++ ++static inline void validate_fifo_size(struct pxa27x_ep *pxa_ep, u8 bmAttributes) ++{ ++ switch (bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) { ++ case USB_ENDPOINT_XFER_CONTROL: ++ pxa_ep->fifo_size = EP0_FIFO_SIZE; ++ break; ++ case USB_ENDPOINT_XFER_ISOC: ++ pxa_ep->fifo_size = ISO_FIFO_SIZE; ++ break; ++ case USB_ENDPOINT_XFER_BULK: ++ pxa_ep->fifo_size = BULK_FIFO_SIZE; ++ break; ++ case USB_ENDPOINT_XFER_INT: ++ pxa_ep->fifo_size = INT_FIFO_SIZE; ++ break; ++ default: ++ break; ++ } ++} ++ ++static void udc_init_ep(struct pxa27x_udc *dev) ++{ ++ int i; ++ ++ INIT_LIST_HEAD (&dev->gadget.ep_list); ++ INIT_LIST_HEAD (&dev->gadget.ep0->ep_list); ++ ++ for (i = 0; i < UDC_EP_NUM; i++) { ++ struct pxa27x_ep *ep = &dev->ep[i]; ++ ++ ep->dma = -1; ++ if (i != 0) { ++ memset(ep, 0, sizeof(*ep)); ++ } ++ INIT_LIST_HEAD (&ep->queue); ++ } ++} ++#define NAME_SIZE 18 ++ ++struct usb_ep* pxa27x_ep_config( ++ struct usb_gadget *gadget, ++ struct usb_endpoint_descriptor *desc, ++ int config, int interface, int alt ++) ++{ ++ u32 tmp ; ++ unsigned i; ++ char* name; ++ struct usb_ep * ep = NULL; ++ struct pxa27x_ep *pxa_ep = NULL; ++ struct pxa27x_udc *dev = the_controller; ++ ++ DMSG("pxa27x_config_ep is called\n"); ++ DMSG(" usb endpoint descriptor is:\n" ++ " bLength:%d\n" ++ " bDescriptorType:%x\n" ++ " bEndpointAddress:%x\n" ++ " bmAttributes:%x\n" ++ " wMaxPacketSize:%d\n", ++ desc->bLength, ++ desc->bDescriptorType,desc->bEndpointAddress, ++ desc->bmAttributes,desc->wMaxPacketSize); ++ ++ for (i = 1; i < UDC_EP_NUM; i++) { ++ if(!dev->ep[i].assigned) { ++ pxa_ep = &dev->ep[i]; ++ pxa_ep->assigned = 1; ++ pxa_ep->ep_num = i; ++ break; ++ } ++ } ++ if (unlikely(i == UDC_EP_NUM)) { ++ printk(KERN_ERR __FILE__ ": Failed to find a spare endpoint\n"); ++ return ep; ++ } ++ ++ ++ ep = &pxa_ep->ep; ++ ++ pxa_ep->dev = dev; ++ pxa_ep->desc = desc; ++ pxa_ep->pio_irqs = pxa_ep->dma_irqs = 0; ++ pxa_ep->dma = -1; ++ ++ if (!(desc->bEndpointAddress & 0xF)) ++ desc->bEndpointAddress |= i; ++ ++ if (!(desc->wMaxPacketSize)) { ++ validate_fifo_size(pxa_ep, desc->bmAttributes); ++ desc->wMaxPacketSize = pxa_ep->fifo_size; ++ } else ++ pxa_ep->fifo_size = desc->wMaxPacketSize; ++ ++ pxa_ep->dir_in = (desc->bEndpointAddress & USB_DIR_IN) ? 1 : 0; ++ pxa_ep->ep_type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; ++ pxa_ep->stopped = 1; ++ pxa_ep->dma_con = 0; ++ pxa_ep->config = config; ++ pxa_ep->interface = interface; ++ pxa_ep->aisn = alt; ++ ++ pxa_ep->reg_udccsr = &UDCCSR0 + i; ++ pxa_ep->reg_udcbcr = &UDCBCR0 + i; ++ pxa_ep->reg_udcdr = &UDCDR0 + i ; ++ pxa_ep->reg_udccr = &UDCCRA - 1 + i; ++#ifdef USE_DMA ++ pxa_ep->reg_drcmr = &DRCMR24 + i; ++#endif ++ ++#if 0 ++ DMSG("udccsr=0x%8x, udcbcr=0x%8x, udcdr=0x%8x," ++ "udccr0=0x%8x\n", ++ (unsigned)pxa_ep->reg_udccsr, ++ (unsigned)pxa_ep->reg_udcbcr, ++ (unsigned)pxa_ep->reg_udcdr, ++ (unsigned)pxa_ep->reg_udccr); ++#endif ++ /* Configure UDCCR */ ++ tmp = 0; ++ tmp |= (pxa_ep->config << UDCCONR_CN_S) & UDCCONR_CN; ++ tmp |= (pxa_ep->interface << UDCCONR_IN_S) & UDCCONR_IN; ++ tmp |= (pxa_ep->aisn << UDCCONR_AISN_S) & UDCCONR_AISN; ++ tmp |= (desc->bEndpointAddress << UDCCONR_EN_S) & UDCCONR_EN; ++ tmp |= (pxa_ep->ep_type << UDCCONR_ET_S) & UDCCONR_ET; ++ tmp |= (pxa_ep->dir_in) ? UDCCONR_ED : 0; ++ tmp |= (min(pxa_ep->fifo_size, (unsigned)desc->wMaxPacketSize) \ ++ << UDCCONR_MPS_S ) & UDCCONR_MPS; ++ tmp |= UDCCONR_DE | UDCCONR_EE; ++// tmp |= UDCCONR_EE; ++ ++ *pxa_ep->reg_udccr = tmp; ++ ++#ifdef USE_DMA ++ /* Only BULK use DMA */ ++ if ((pxa_ep->ep_type & USB_ENDPOINT_XFERTYPE_MASK)\ ++ == USB_ENDPOINT_XFER_BULK) ++ *pxa_ep->reg_udccsr = UDCCSR_DME; ++#endif ++ ++ DMSG("UDCCR: 0x%p is 0x%x\n", pxa_ep->reg_udccr,*pxa_ep->reg_udccr); ++ ++ /* Fill ep name*/ ++ name = kmalloc(NAME_SIZE, GFP_KERNEL); ++ if (!name) { ++ printk(KERN_ERR "%s: Error\n", __FUNCTION__); ++ return NULL; ++ } ++ ++ switch (pxa_ep->ep_type) { ++ case USB_ENDPOINT_XFER_BULK: ++ sprintf(name, "Bulk-%s-%d", (pxa_ep->dir_in ? "in":"out"), i); ++ break; ++ case USB_ENDPOINT_XFER_INT: ++ sprintf(name, "Interrupt-%s-%d", (pxa_ep->dir_in ? \ ++ "in":"out"), i); ++ break; ++ default: ++ sprintf(name, "endpoint-%s-%d", (pxa_ep->dir_in ? \ ++ "in":"out"), i); ++ break; ++ } ++ ep->name = name; ++ ++ ep->ops = &pxa27x_ep_ops; ++ ep->maxpacket = min((ushort)pxa_ep->fifo_size, desc->wMaxPacketSize); ++ ++ list_add_tail (&ep->ep_list, &gadget->ep_list); ++ return ep; ++} ++ ++EXPORT_SYMBOL(pxa27x_ep_config); ++ ++/*-------------------------------------------------------------------------*/ ++ ++static void nop_release (struct device *dev) ++{ ++ DMSG("%s %s\n", __FUNCTION__, dev->bus_id); ++} ++ ++/* this uses load-time allocation and initialization (instead of ++ * doing it at run-time) to save code, eliminate fault paths, and ++ * be more obviously correct. ++ */ ++static struct pxa27x_udc memory = { ++ .gadget = { ++ .ops = &pxa27x_udc_ops, ++ .ep0 = &memory.ep[0].ep, ++ .name = driver_name, ++ .dev = { ++ .bus_id = "gadget", ++ .release = nop_release, ++ }, ++ }, ++ ++ /* control endpoint */ ++ .ep[0] = { ++ .ep = { ++ .name = ep0name, ++ .ops = &pxa27x_ep_ops, ++ .maxpacket = EP0_FIFO_SIZE, ++ }, ++ .dev = &memory, ++ .reg_udccsr = &UDCCSR0, ++ .reg_udcdr = &UDCDR0, ++ } ++}; ++ ++#define CP15R0_VENDOR_MASK 0xffffe000 ++ ++#define CP15R0_XSCALE_VALUE 0x69054000 /* intel/arm/xscale */ ++ ++/* ++ * probe - binds to the platform device ++ */ ++static int __init pxa27x_udc_probe(struct platform_device *_dev) ++{ ++ struct pxa27x_udc *dev = &memory; ++ int retval; ++ u32 chiprev; ++ ++ /* insist on Intel/ARM/XScale */ ++ asm("mrc%? p15, 0, %0, c0, c0" : "=r" (chiprev)); ++ if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) { ++ printk(KERN_ERR "%s: not XScale!\n", driver_name); ++ return -ENODEV; ++ } ++ /* other non-static parts of init */ ++ dev->dev = &_dev->dev; ++ dev->mach = _dev->dev.platform_data; ++ ++ init_timer(&dev->timer); ++ dev->timer.function = udc_watchdog; ++ dev->timer.data = (unsigned long) dev; ++ ++ device_initialize(&dev->gadget.dev); ++ dev->gadget.dev.parent = &_dev->dev; ++ dev->gadget.dev.dma_mask = _dev->dev.dma_mask; ++ ++ the_controller = dev; ++ platform_set_drvdata(_dev, dev); ++ ++ udc_disable(dev); ++ udc_init_ep(dev); ++ udc_reinit(dev); ++ ++ /* irq setup after old hardware state is cleaned up */ ++ retval = request_irq(IRQ_USB, pxa27x_udc_irq, ++ SA_INTERRUPT, driver_name, dev); ++ if (retval != 0) { ++ printk(KERN_ERR "%s: can't get irq %i, err %d\n", ++ driver_name, IRQ_USB, retval); ++ return -EBUSY; ++ } ++ dev->got_irq = 1; ++ ++ create_proc_files(); ++ ++ return 0; ++} ++ ++static int __exit pxa27x_udc_remove(struct platform_device *_dev) ++{ ++ struct pxa27x_udc *dev = (struct pxa27x_udc*)platform_get_drvdata(_dev); ++ ++ udc_disable(dev); ++ remove_proc_files(); ++ usb_gadget_unregister_driver(dev->driver); ++ ++ if (dev->got_irq) { ++ free_irq(IRQ_USB, dev); ++ dev->got_irq = 0; ++ } ++ if (machine_is_lubbock() && dev->got_disc) { ++ free_irq(LUBBOCK_USB_DISC_IRQ, dev); ++ dev->got_disc = 0; ++ } ++ platform_set_drvdata(_dev, 0); ++ the_controller = 0; ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static void pxa27x_udc_shutdown(struct platform_device *_dev) ++{ ++ struct pxa27x_udc *dev = (struct pxa27x_udc*)platform_get_drvdata(_dev); ++ ++ udc_disable(dev); ++} ++ ++static int pxa27x_udc_suspend(struct platform_device *_dev, pm_message_t state) ++{ ++ int i; ++ struct pxa27x_udc *dev = (struct pxa27x_udc*)platform_get_drvdata(_dev); ++ ++ DMSG("%s is called\n", __FUNCTION__); ++ dev->udccsr0 = UDCCSR0; ++ for(i=1; (iep[i].assigned) { ++ struct pxa27x_ep *ep = &dev->ep[i]; ++ ++ ep->udccsr_value = *ep->reg_udccsr; ++ ep->udccr_value = *ep->reg_udccr; ++ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n", ++ i, *ep->reg_udccsr, *ep->reg_udccr); ++ } ++ } ++ ++ udc_clear_mask_UDCCR(UDCCR_UDE); ++ pxa_set_cken(CKEN11_USB, 0); ++ // MST_MSCWR2 |= MST_MSCWR2_nUSBC_SC; ++ ++ return 0; ++} ++ ++static int pxa27x_udc_resume(struct platform_device *_dev) ++{ ++ int i; ++ struct pxa27x_udc *dev = (struct pxa27x_udc*)platform_get_drvdata(_dev); ++ ++ DMSG("%s is called\n", __FUNCTION__); ++ ++ UDCCSR0 = dev->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME); ++ for (i=1; i < UDC_EP_NUM; i++) { ++ if (dev->ep[i].assigned) { ++ struct pxa27x_ep *ep = &dev->ep[i]; ++ ++ *ep->reg_udccsr = ep->udccsr_value; ++ *ep->reg_udccr = ep->udccr_value; ++ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n", ++ i, *ep->reg_udccsr, *ep->reg_udccr); ++ } ++ } ++ udc_enable(dev); ++ /* OTGPH bit is set when sleep mode is entered. ++ * it indicates that OTG pad is retaining its state. ++ * Upon exit from sleep mode and before clearing OTGPH, ++ * Software must configure the USB OTG pad, UDC, and UHC ++ * to the state they were in before entering sleep mode.*/ ++ PSSR |= PSSR_OTGPH; ++ return 0; ++} ++#endif ++ ++/*-------------------------------------------------------------------------*/ ++ ++static struct platform_driver udc_driver = { ++ .driver = { ++ .name = "pxa2xx-udc", ++ }, ++ .probe = pxa27x_udc_probe, ++ .remove = __exit_p(pxa27x_udc_remove), ++ ++#ifdef CONFIG_PM ++ // FIXME power management support ++ .shutdown = pxa27x_udc_shutdown, ++ .suspend = pxa27x_udc_suspend, ++ .resume = pxa27x_udc_resume ++#endif ++}; ++ ++static int __init udc_init(void) ++{ ++ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION); ++ return platform_driver_register(&udc_driver); ++} ++module_init(udc_init); ++ ++static void __exit udc_exit(void) ++{ ++ platform_driver_unregister(&udc_driver); ++} ++module_exit(udc_exit); ++ ++MODULE_DESCRIPTION(DRIVER_DESC); ++MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell"); ++MODULE_LICENSE("GPL"); ++ +Index: linux-2.6.21gum/drivers/usb/gadget/pxa27x_udc.h +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/usb/gadget/pxa27x_udc.h +@@ -0,0 +1,332 @@ ++/* ++ * linux/drivers/usb/gadget/pxa27x_udc.h ++ * Intel PXA27x on-chip full speed USB device controller ++ * ++ * Copyright (C) 2003 Robert Schwebel , Pengutronix ++ * Copyright (C) 2003 David Brownell ++ * Copyright (C) 2004 Intel Corporation ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#ifndef __LINUX_USB_GADGET_PXA27X_H ++#define __LINUX_USB_GADGET_PXA27X_H ++ ++#include ++ ++struct pxa27x_udc; ++ ++struct pxa27x_ep { ++ struct usb_ep ep; ++ struct pxa27x_udc *dev; ++ ++ const struct usb_endpoint_descriptor *desc; ++ struct list_head queue; ++ unsigned long pio_irqs; ++ unsigned long dma_irqs; ++ ++ int dma; ++ unsigned fifo_size; ++ unsigned ep_num; ++ unsigned ep_type; ++ ++ unsigned stopped : 1; ++ unsigned dma_con : 1; ++ unsigned dir_in : 1; ++ unsigned assigned : 1; ++ ++ unsigned config; ++ unsigned interface; ++ unsigned aisn; ++ /* UDCCSR = UDC Control/Status Register for this EP ++ * UBCR = UDC Byte Count Remaining (contents of OUT fifo) ++ * UDCDR = UDC Endpoint Data Register (the fifo) ++ * UDCCR = UDC Endpoint Configuration Registers ++ * DRCM = DMA Request Channel Map ++ */ ++ volatile u32 *reg_udccsr; ++ volatile u32 *reg_udcbcr; ++ volatile u32 *reg_udcdr; ++ volatile u32 *reg_udccr; ++#ifdef USE_DMA ++ volatile u32 *reg_drcmr; ++#define drcmr(n) .reg_drcmr = & DRCMR ## n , ++#else ++#define drcmr(n) ++#endif ++ ++#ifdef CONFIG_PM ++ unsigned udccsr_value; ++ unsigned udccr_value; ++#endif ++}; ++ ++struct pxa27x_request { ++ struct usb_request req; ++ struct list_head queue; ++}; ++ ++enum ep0_state { ++ EP0_IDLE, ++ EP0_IN_DATA_PHASE, ++ EP0_OUT_DATA_PHASE, ++// EP0_END_XFER, ++ EP0_STALL, ++ EP0_NO_ACTION ++}; ++ ++#define EP0_FIFO_SIZE ((unsigned)16) ++#define BULK_FIFO_SIZE ((unsigned)64) ++#define ISO_FIFO_SIZE ((unsigned)256) ++#define INT_FIFO_SIZE ((unsigned)8) ++ ++struct udc_stats { ++ struct ep0stats { ++ unsigned long ops; ++ unsigned long bytes; ++ } read, write; ++ unsigned long irqs; ++}; ++ ++#ifdef CONFIG_USB_PXA27X_SMALL ++/* when memory's tight, SMALL config saves code+data. */ ++//#undef USE_DMA ++//#define UDC_EP_NUM 3 ++#endif ++ ++#ifndef UDC_EP_NUM ++#define UDC_EP_NUM 24 ++#endif ++ ++struct pxa27x_udc { ++ struct usb_gadget gadget; ++ struct usb_gadget_driver *driver; ++ ++ enum ep0_state ep0state; ++ struct udc_stats stats; ++ unsigned got_irq : 1, ++ got_disc : 1, ++ has_cfr : 1, ++ req_pending : 1, ++ req_std : 1, ++ req_config : 1; ++ ++#define start_watchdog(dev) mod_timer(&dev->timer, jiffies + (HZ/200)) ++ struct timer_list timer; ++ ++ struct device *dev; ++ struct pxa2xx_udc_mach_info *mach; ++ u64 dma_mask; ++ struct pxa27x_ep ep [UDC_EP_NUM]; ++ ++ unsigned configuration, ++ interface, ++ alternate; ++#ifdef CONFIG_PM ++ unsigned udccsr0; ++#endif ++}; ++ ++/*-------------------------------------------------------------------------*/ ++#if 0 ++#ifdef DEBUG ++#define HEX_DISPLAY(n) do { \ ++ if (machine_is_mainstone())\ ++ { MST_LEDDAT1 = (n); } \ ++ } while(0) ++ ++#define HEX_DISPLAY1(n) HEX_DISPLAY(n) ++ ++#define HEX_DISPLAY2(n) do { \ ++ if (machine_is_mainstone()) \ ++ { MST_LEDDAT2 = (n); } \ ++ } while(0) ++ ++#endif /* DEBUG */ ++#endif ++/*-------------------------------------------------------------------------*/ ++ ++/* LEDs are only for debug */ ++#ifndef HEX_DISPLAY ++#define HEX_DISPLAY(n) do {} while(0) ++#endif ++ ++#ifndef LED_CONNECTED_ON ++#define LED_CONNECTED_ON do {} while(0) ++#define LED_CONNECTED_OFF do {} while(0) ++#endif ++#ifndef LED_EP0_ON ++#define LED_EP0_ON do {} while (0) ++#define LED_EP0_OFF do {} while (0) ++#endif ++ ++static struct pxa27x_udc *the_controller; ++ ++#if 0 ++/*-------------------------------------------------------------------------*/ ++ ++ ++/* one GPIO should be used to detect host disconnect */ ++static inline int is_usb_connected(void) ++{ ++ if (!the_controller->mach->udc_is_connected) ++ return 1; ++ return the_controller->mach->udc_is_connected(); ++} ++ ++/* one GPIO should force the host to see this device (or not) */ ++static inline void make_usb_disappear(void) ++{ ++ if (!the_controller->mach->udc_command) ++ return; ++ the_controller->mach->udc_command(PXA27X_UDC_CMD_DISCONNECT); ++} ++ ++static inline void let_usb_appear(void) ++{ ++ if (!the_controller->mach->udc_command) ++ return; ++ the_controller->mach->udc_command(PXA2XX_UDC_CMD_CONNECT); ++} ++#endif ++ ++/*-------------------------------------------------------------------------*/ ++ ++/* ++ * Debugging support vanishes in non-debug builds. DBG_NORMAL should be ++ * mostly silent during normal use/testing, with no timing side-effects. ++ */ ++#define DBG_NORMAL 1 /* error paths, device state transitions */ ++#define DBG_VERBOSE 2 /* add some success path trace info */ ++#define DBG_NOISY 3 /* ... even more: request level */ ++#define DBG_VERY_NOISY 4 /* ... even more: packet level */ ++ ++#ifdef DEBUG ++ ++static const char *state_name[] = { ++ "EP0_IDLE", ++ "EP0_IN_DATA_PHASE", "EP0_OUT_DATA_PHASE", ++ "EP0_END_XFER", "EP0_STALL" ++}; ++ ++#define DMSG(stuff...) printk(KERN_ERR "udc: " stuff) ++ ++#ifdef VERBOSE ++# define UDC_DEBUG DBG_VERBOSE ++#else ++# define UDC_DEBUG DBG_NORMAL ++#endif ++ ++static void __attribute__ ((__unused__)) ++dump_udccr(const char *label) ++{ ++ u32 udccr = UDCCR; ++ DMSG("%s 0x%08x =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n", ++ label, udccr, ++ (udccr & UDCCR_OEN) ? " oen":"", ++ (udccr & UDCCR_AALTHNP) ? " aalthnp":"", ++ (udccr & UDCCR_AHNP) ? " rem" : "", ++ (udccr & UDCCR_BHNP) ? " rstir" : "", ++ (udccr & UDCCR_DWRE) ? " dwre" : "", ++ (udccr & UDCCR_SMAC) ? " smac" : "", ++ (udccr & UDCCR_EMCE) ? " emce" : "", ++ (udccr & UDCCR_UDR) ? " udr" : "", ++ (udccr & UDCCR_UDA) ? " uda" : "", ++ (udccr & UDCCR_UDE) ? " ude" : "", ++ (udccr & UDCCR_ACN) >> UDCCR_ACN_S, ++ (udccr & UDCCR_AIN) >> UDCCR_AIN_S, ++ (udccr & UDCCR_AAISN)>> UDCCR_AAISN_S ); ++} ++ ++static void __attribute__ ((__unused__)) ++dump_udccsr0(const char *label) ++{ ++ u32 udccsr0 = UDCCSR0; ++ ++ DMSG("%s %s 0x%08x =%s%s%s%s%s%s%s\n", ++ label, state_name[the_controller->ep0state], udccsr0, ++ (udccsr0 & UDCCSR0_SA) ? " sa" : "", ++ (udccsr0 & UDCCSR0_RNE) ? " rne" : "", ++ (udccsr0 & UDCCSR0_FST) ? " fst" : "", ++ (udccsr0 & UDCCSR0_SST) ? " sst" : "", ++ (udccsr0 & UDCCSR0_DME) ? " dme" : "", ++ (udccsr0 & UDCCSR0_IPR) ? " ipr" : "", ++ (udccsr0 & UDCCSR0_OPC) ? " opr" : ""); ++} ++ ++static void __attribute__ ((__unused__)) ++dump_state(struct pxa27x_udc *dev) ++{ ++ unsigned i; ++ ++ DMSG("%s, udcicr %02X.%02X, udcsir %02X.%02x, udcfnr %02X\n", ++ state_name[dev->ep0state], ++ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR); ++ dump_udccr("udccr"); ++ ++ if (!dev->driver) { ++ DMSG("no gadget driver bound\n"); ++ return; ++ } else ++ DMSG("ep0 driver '%s'\n", dev->driver->driver.name); ++ ++ ++ dump_udccsr0 ("udccsr0"); ++ DMSG("ep0 IN %lu/%lu, OUT %lu/%lu\n", ++ dev->stats.write.bytes, dev->stats.write.ops, ++ dev->stats.read.bytes, dev->stats.read.ops); ++ ++ for (i = 1; i < UDC_EP_NUM; i++) { ++ if (dev->ep [i].desc == 0) ++ continue; ++ DMSG ("udccs%d = %02x\n", i, *dev->ep->reg_udccsr); ++ } ++} ++ ++#if 0 ++static void dump_regs(u8 ep) ++{ ++ DMSG("EP:%d UDCCSR:0x%08x UDCBCR:0x%08x\n UDCCR:0x%08x\n", ++ ep,UDCCSN(ep), UDCBCN(ep), UDCCN(ep)); ++} ++static void dump_req (struct pxa27x_request *req) ++{ ++ struct usb_request *r = &req->req; ++ ++ DMSG("%s: buf:0x%08x length:%d dma:0x%08x actual:%d\n", ++ __FUNCTION__, (unsigned)r->buf, r->length, ++ r->dma, r->actual); ++} ++#endif ++ ++#else ++ ++#define DMSG(stuff...) do{}while(0) ++ ++#define dump_udccr(x) do{}while(0) ++#define dump_udccsr0(x) do{}while(0) ++#define dump_state(x) do{}while(0) ++ ++#define UDC_DEBUG ((unsigned)0) ++ ++#endif ++ ++#define DBG(lvl, stuff...) do{if ((lvl) <= UDC_DEBUG) DMSG(stuff);}while(0) ++ ++#define WARN(stuff...) printk(KERN_WARNING "udc: " stuff) ++#define INFO(stuff...) printk(KERN_INFO "udc: " stuff) ++ ++ ++#endif /* __LINUX_USB_GADGET_PXA27X_H */ diff --git a/packages/linux/gumstix-kernel-2.6.21/arch-config.patch b/packages/linux/gumstix-kernel-2.6.21/arch-config.patch new file mode 100644 index 0000000000..19a83101d8 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/arch-config.patch @@ -0,0 +1,62 @@ +Index: linux-2.6.21gum/arch/arm/mach-pxa/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/Kconfig ++++ linux-2.6.21gum/arch/arm/mach-pxa/Kconfig +@@ -5,6 +5,10 @@ menu "Intel PXA2xx Implementations" + choice + prompt "Select target board" + ++config ARCH_GUMSTIX ++ bool "Gumstix Platform" ++ depends on ARCH_PXA ++ + config ARCH_LUBBOCK + bool "Intel DBPXA250 Development Platform" + select PXA25x +@@ -116,6 +120,34 @@ config MACH_TOSA + bool "Enable Sharp SL-6000x (Tosa) Support" + depends on PXA_SHARPSL_25x + ++choice ++ depends on ARCH_GUMSTIX ++ prompt "Gumstix Platform Version" ++ default ARCH_GUMSTIX_F ++ ++config ARCH_GUMSTIX_ORIG ++ bool "Original Gumstix" ++ select PXA25x ++ help ++ The original gumstix platform, including the gs-200x and gs-400x and the waysmall ++ systems using these boards. (Almost nobody has one of these) ++ ++config ARCH_GUMSTIX_F ++ bool "Gumstix-F" ++ select PXA25x ++ help ++ The updated Gumstix basix and connex boards with 60-pin connector, and ++ waysmall systems using these boards, including ws-200ax and ws-400ax. ++ ++config ARCH_GUMSTIX_VERDEX ++ bool "Gumstix Verdex" ++ select PXA27x ++ help ++ The Gumstix verdex boards with 24, 60, and 120-pin connectors, and ++ computer systems using these boards. ++ ++endchoice ++ + config PXA25x + bool + help +Index: linux-2.6.21gum/arch/arm/mach-pxa/Makefile +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/Makefile ++++ linux-2.6.21gum/arch/arm/mach-pxa/Makefile +@@ -8,6 +8,7 @@ obj-$(CONFIG_PXA25x) += pxa25x.o + obj-$(CONFIG_PXA27x) += pxa27x.o + + # Specific board support ++obj-$(CONFIG_ARCH_GUMSTIX) += gumstix.o + obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o + obj-$(CONFIG_MACH_LOGICPD_PXA270) += lpd270.o + obj-$(CONFIG_MACH_MAINSTONE) += mainstone.o diff --git a/packages/linux/gumstix-kernel-2.6.21/bkpxa-pxa-cpu.patch b/packages/linux/gumstix-kernel-2.6.21/bkpxa-pxa-cpu.patch new file mode 100644 index 0000000000..6621fd0f51 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/bkpxa-pxa-cpu.patch @@ -0,0 +1,117 @@ +Status: WORKS +PXA CPU enhancements + +from patch 1667: +- 64K PTEs +from hh.org-cvs: +- support in pxa_gpio_mode for active low + +# +# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher +# + +Index: linux-2.6.21gum/arch/arm/mm/proc-xscale.S +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mm/proc-xscale.S ++++ linux-2.6.21gum/arch/arm/mm/proc-xscale.S +@@ -474,11 +474,62 @@ ENTRY(cpu_xscale_set_pte_ext) + movne r2, #0 @ no -> fault + + str r2, [r0] @ hardware version ++ ++ @ We try to map 64K page entries when possible. ++ @ We do that for kernel space only since the usage pattern from ++ @ the setting of VM area is quite simple. User space is not worth ++ @ the implied complexity because of ever randomly changing PTEs ++ @ (page aging, swapout, etc) requiring constant coherency checks. ++ @ Since PTEs are usually set in increasing order, we test the ++ @ possibility for a large page only when given the last PTE of a ++ @ 64K boundary. ++ tsteq r1, #L_PTE_USER ++ andeq r1, r0, #(15 << 2) ++ teqeq r1, #(15 << 2) ++ beq 1f ++ + mov ip, #0 + mcr p15, 0, r0, c7, c10, 1 @ Clean D cache line + mcr p15, 0, ip, c7, c10, 4 @ Drain Write (& Fill) Buffer + mov pc, lr + ++ @ See if we have 16 identical PTEs but with consecutive base addresses ++1: bic r3, r2, #0x0000f000 ++ mov r1, #0x0000f000 ++2: eor r2, r2, r3 ++ teq r2, r1 ++ bne 4f ++ subs r1, r1, #0x00001000 ++ ldr r2, [r0, #-4]! ++ bne 2b ++ eors r2, r2, r3 ++ bne 4f ++ ++ @ Now create our LARGE PTE from the current EXT one. ++ bic r3, r3, #PTE_TYPE_MASK ++ orr r3, r3, #PTE_TYPE_LARGE ++ and r2, r3, #0x30 @ EXT_AP --> LARGE_AP0 ++ orr r2, r2, r2, lsl #2 @ add LARGE_AP1 ++ orr r2, r2, r2, lsl #4 @ add LARGE_AP3 + LARGE_AP2 ++ and r1, r3, #0x3c0 @ EXT_TEX ++ bic r3, r3, #0x3c0 ++ orr r2, r2, r1, lsl #(12 - 6) @ --> LARGE_TEX ++ orr r2, r2, r3 @ add remaining bits ++ ++ @ then put it in the pagetable ++ mov r3, r2 ++3: strd r2, [r0], #8 ++ tst r0, #(15 << 2) ++ bne 3b ++ ++ @ Then sync the 2 corresponding cache lines ++ sub r0, r0, #(16 << 2) ++ mcr p15, 0, r0, c7, c10, 1 @ Clean D cache line ++4: orr r0, r0, #(15 << 2) ++ mcr p15, 0, r0, c7, c10, 1 @ Clean D cache line ++ mov ip, #0 ++ mcr p15, 0, ip, c7, c10, 4 @ Drain Write (& Fill) Buffer ++ mov pc, lr + + .ltorg + +Index: linux-2.6.21gum/include/asm-arm/arch-pxa/pxa-regs.h +=================================================================== +--- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/pxa-regs.h ++++ linux-2.6.21gum/include/asm-arm/arch-pxa/pxa-regs.h +@@ -1345,6 +1345,7 @@ + #define GPIO_ALT_FN_2_OUT 0x280 + #define GPIO_ALT_FN_3_IN 0x300 + #define GPIO_ALT_FN_3_OUT 0x380 ++#define GPIO_ACTIVE_LOW 0x1000 + #define GPIO_MD_MASK_NR 0x07f + #define GPIO_MD_MASK_DIR 0x080 + #define GPIO_MD_MASK_FN 0x300 +@@ -1597,6 +1598,25 @@ + #define PWER_GPIO15 PWER_GPIO (15) /* GPIO [15] wake-up enable */ + #define PWER_RTC 0x80000000 /* RTC alarm wake-up enable */ + ++#define PWER_GPIO(Nb) (1 << Nb) /* GPIO [0..15] wake-up enable */ ++#define PWER_GPIO0 PWER_GPIO (0) /* GPIO [0] wake-up enable */ ++#define PWER_GPIO1 PWER_GPIO (1) /* GPIO [1] wake-up enable */ ++#define PWER_GPIO2 PWER_GPIO (2) /* GPIO [2] wake-up enable */ ++#define PWER_GPIO3 PWER_GPIO (3) /* GPIO [3] wake-up enable */ ++#define PWER_GPIO4 PWER_GPIO (4) /* GPIO [4] wake-up enable */ ++#define PWER_GPIO5 PWER_GPIO (5) /* GPIO [5] wake-up enable */ ++#define PWER_GPIO6 PWER_GPIO (6) /* GPIO [6] wake-up enable */ ++#define PWER_GPIO7 PWER_GPIO (7) /* GPIO [7] wake-up enable */ ++#define PWER_GPIO8 PWER_GPIO (8) /* GPIO [8] wake-up enable */ ++#define PWER_GPIO9 PWER_GPIO (9) /* GPIO [9] wake-up enable */ ++#define PWER_GPIO10 PWER_GPIO (10) /* GPIO [10] wake-up enable */ ++#define PWER_GPIO11 PWER_GPIO (11) /* GPIO [11] wake-up enable */ ++#define PWER_GPIO12 PWER_GPIO (12) /* GPIO [12] wake-up enable */ ++#define PWER_GPIO13 PWER_GPIO (13) /* GPIO [13] wake-up enable */ ++#define PWER_GPIO14 PWER_GPIO (14) /* GPIO [14] wake-up enable */ ++#define PWER_GPIO15 PWER_GPIO (15) /* GPIO [15] wake-up enable */ ++#define PWER_RTC 0x80000000 /* RTC alarm wake-up enable */ ++ + + /* + * SSP Serial Port Registers diff --git a/packages/linux/gumstix-kernel-2.6.21/bkpxa-pxa-cpufreq.patch b/packages/linux/gumstix-kernel-2.6.21/bkpxa-pxa-cpufreq.patch new file mode 100644 index 0000000000..f3d8396a61 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/bkpxa-pxa-cpufreq.patch @@ -0,0 +1,403 @@ +Status: WORKS +PXA CPU frequency change support +added mods from Stefan Eletzhofer and Lothar Weissmann + +# +# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher +# + +Index: linux-2.6.21gum/arch/arm/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/Kconfig ++++ linux-2.6.21gum/arch/arm/Kconfig +@@ -800,7 +800,7 @@ config KEXEC + + endmenu + +-if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX ) ++if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA ) + + menu "CPU Frequency scaling" + +@@ -838,6 +838,12 @@ config CPU_FREQ_IMX + + endmenu + ++config CPU_FREQ_PXA ++ bool ++ depends on CPU_FREQ && ARCH_PXA ++ default y ++ select CPU_FREQ_DEFAULT_GOV_USERSPACE ++ + endif + + menu "Floating point emulation" +Index: linux-2.6.21gum/arch/arm/mach-pxa/Makefile +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/Makefile ++++ linux-2.6.21gum/arch/arm/mach-pxa/Makefile +@@ -32,6 +32,7 @@ obj-$(CONFIG_LEDS) += $(led-y) + # Misc features + obj-$(CONFIG_PM) += pm.o sleep.o + obj-$(CONFIG_PXA_SSP) += ssp.o ++obj-$(CONFIG_CPU_FREQ) += cpu-pxa.o + + ifeq ($(CONFIG_PXA27x),y) + obj-$(CONFIG_PM) += standby.o +Index: linux-2.6.21gum/arch/arm/mach-pxa/cpu-pxa.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/arch/arm/mach-pxa/cpu-pxa.c +@@ -0,0 +1,321 @@ ++/* ++ * linux/arch/arm/mach-pxa/cpu-pxa.c ++ * ++ * Copyright (C) 2002,2003 Intrinsyc Software ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, 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 ++ * ++ * History: ++ * 31-Jul-2002 : Initial version [FB] ++ * 29-Jan-2003 : added PXA255 support [FB] ++ * 20-Apr-2003 : ported to v2.5 (Dustin McIntire, Sensoria Corp.) ++ * ++ * Note: ++ * This driver may change the memory bus clock rate, but will not do any ++ * platform specific access timing changes... for example if you have flash ++ * memory connected to CS0, you will need to register a platform specific ++ * notifier which will adjust the memory access strobes to maintain a ++ * minimum strobe width. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#define DEBUG 0 ++ ++#ifdef DEBUG ++ static unsigned int freq_debug = DEBUG; ++ MODULE_PARM(freq_debug, "i"); ++ MODULE_PARM_DESC(freq_debug, "Set the debug messages to on=1/off=0"); ++#else ++ #define freq_debug 0 ++#endif ++ ++typedef struct ++{ ++ unsigned int khz; ++ unsigned int membus; ++ unsigned int cccr; ++ unsigned int div2; ++} pxa_freqs_t; ++ ++/* Define the refresh period in mSec for the SDRAM and the number of rows */ ++#define SDRAM_TREF 64 /* standard 64ms SDRAM */ ++#define SDRAM_ROWS 4096 /* 64MB=8192 32MB=4096 */ ++#define MDREFR_DRI(x) ((x*SDRAM_TREF)/(SDRAM_ROWS*32)) ++ ++#define CCLKCFG_TURBO 0x1 ++#define CCLKCFG_FCS 0x2 ++#define PXA25x_MIN_FREQ 99500 ++#define PXA25x_MAX_FREQ 398100 ++#define MDREFR_DB2_MASK (MDREFR_K2DB2 | MDREFR_K1DB2) ++#define MDREFR_DRI_MASK 0xFFF ++ ++ ++/* Use the run mode frequencies for the CPUFREQ_POLICY_PERFORMANCE policy */ ++static pxa_freqs_t pxa255_run_freqs[] = ++{ ++ /* CPU MEMBUS CCCR DIV2*/ ++ { 99500, 99500, 0x121, 1}, /* run= 99, turbo= 99, PXbus=50, SDRAM=50 */ ++ {132700, 132700, 0x123, 1}, /* run=133, turbo=133, PXbus=66, SDRAM=66 */ ++ {199100, 99500, 0x141, 0}, /* run=199, turbo=199, PXbus=99, SDRAM=99 */ ++ {265400, 132700, 0x143, 1}, /* run=265, turbo=265, PXbus=133, SDRAM=66 */ ++ {331800, 165900, 0x145, 1}, /* run=331, turbo=331, PXbus=166, SDRAM=83 */ ++ {398100, 99500, 0x161, 0}, /* run=398, turbo=398, PXbus=196, SDRAM=99 */ ++ {0,} ++}; ++#define NUM_RUN_FREQS (sizeof(pxa255_run_freqs)/sizeof(pxa_freqs_t)) ++ ++static struct cpufreq_frequency_table pxa255_run_freq_table[NUM_RUN_FREQS+1]; ++ ++/* Use the turbo mode frequencies for the CPUFREQ_POLICY_POWERSAVE policy */ ++static pxa_freqs_t pxa255_turbo_freqs[] = ++{ ++ /* CPU MEMBUS CCCR DIV2*/ ++ { 99500, 99500, 0x121, 1}, /* run=99, turbo= 99, PXbus=50, SDRAM=50 */ ++ {199100, 99500, 0x221, 0}, /* run=99, turbo=199, PXbus=50, SDRAM=99 */ ++ {298500, 99500, 0x321, 0}, /* run=99, turbo=287, PXbus=50, SDRAM=99 */ ++ {298600, 99500, 0x1c1, 0}, /* run=199, turbo=287, PXbus=99, SDRAM=99 */ ++ {398100, 99500, 0x241, 0}, /* run=199, turbo=398, PXbus=99, SDRAM=99 */ ++ {0,} ++}; ++#define NUM_TURBO_FREQS (sizeof(pxa255_turbo_freqs)/sizeof(pxa_freqs_t)) ++ ++static struct cpufreq_frequency_table pxa255_turbo_freq_table[NUM_TURBO_FREQS+1]; ++ ++extern unsigned get_clk_frequency_khz(int info); ++ ++/* find a valid frequency point */ ++static int pxa_verify_policy(struct cpufreq_policy *policy) ++{ ++ int ret; ++ struct cpufreq_frequency_table *pxa_freqs_table; ++ ++ if(policy->policy == CPUFREQ_POLICY_PERFORMANCE) { ++ pxa_freqs_table = pxa255_run_freq_table; ++ } else if (policy->policy == CPUFREQ_POLICY_POWERSAVE) { ++ pxa_freqs_table = pxa255_turbo_freq_table; ++ } else { ++ printk("CPU PXA: Unknown policy found. " ++ "Using CPUFREQ_POLICY_PERFORMANCE\n"); ++ pxa_freqs_table = pxa255_run_freq_table; ++ } ++ ret=cpufreq_frequency_table_verify(policy, pxa_freqs_table); ++ ++ if(freq_debug) { ++ printk("Verified CPU policy: %dKhz min to %dKhz max\n", ++ policy->min, policy->max); ++ } ++ ++ return ret; ++} ++ ++static int pxa_set_target(struct cpufreq_policy *policy, ++ unsigned int target_freq, ++ unsigned int relation) ++{ ++ int idx; ++ unsigned long cpus_allowed; ++ int cpu = policy->cpu; ++ struct cpufreq_freqs freqs; ++ pxa_freqs_t *pxa_freq_settings; ++ struct cpufreq_frequency_table *pxa_freqs_table; ++ unsigned long flags; ++ unsigned int unused; ++ unsigned int preset_mdrefr, postset_mdrefr; ++ ++ /* ++ * Save this threads cpus_allowed mask. ++ */ ++ cpus_allowed = current->cpus_allowed; ++ ++ /* ++ * Bind to the specified CPU. When this call returns, ++ * we should be running on the right CPU. ++ */ ++ set_cpus_allowed(current, 1 << cpu); ++ BUG_ON(cpu != smp_processor_id()); ++ ++ /* Get the current policy */ ++ if(policy->policy == CPUFREQ_POLICY_PERFORMANCE) { ++ pxa_freq_settings = pxa255_run_freqs; ++ pxa_freqs_table = pxa255_run_freq_table; ++ }else if (policy->policy == CPUFREQ_POLICY_POWERSAVE) { ++ pxa_freq_settings = pxa255_turbo_freqs; ++ pxa_freqs_table = pxa255_turbo_freq_table; ++ }else { ++ printk("CPU PXA: Unknown policy found. " ++ "Using CPUFREQ_POLICY_PERFORMANCE\n"); ++ pxa_freq_settings = pxa255_run_freqs; ++ pxa_freqs_table = pxa255_run_freq_table; ++ } ++ ++ /* Lookup the next frequency */ ++ if (cpufreq_frequency_table_target(policy, pxa_freqs_table, ++ target_freq, relation, &idx)) { ++ return -EINVAL; ++ } ++ ++ freqs.old = policy->cur; ++ freqs.new = pxa_freq_settings[idx].khz; ++ freqs.cpu = policy->cpu; ++ if(freq_debug) { ++ printk(KERN_INFO "Changing CPU frequency to %d Mhz, (SDRAM %d Mhz)\n", ++ freqs.new/1000, (pxa_freq_settings[idx].div2) ? ++ (pxa_freq_settings[idx].membus/2000) : ++ (pxa_freq_settings[idx].membus/1000)); ++ } ++ ++ void *ramstart = phys_to_virt(0xa0000000); ++ ++ /* ++ * Tell everyone what we're about to do... ++ * you should add a notify client with any platform specific ++ * Vcc changing capability ++ */ ++ cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); ++ ++ /* Calculate the next MDREFR. If we're slowing down the SDRAM clock ++ * we need to preset the smaller DRI before the change. If we're speeding ++ * up we need to set the larger DRI value after the change. ++ */ ++ preset_mdrefr = postset_mdrefr = MDREFR; ++ if((MDREFR & MDREFR_DRI_MASK) > MDREFR_DRI(pxa_freq_settings[idx].membus)) { ++ preset_mdrefr = (preset_mdrefr & ~MDREFR_DRI_MASK) | ++ MDREFR_DRI(pxa_freq_settings[idx].membus); ++ } ++ postset_mdrefr = (postset_mdrefr & ~MDREFR_DRI_MASK) | ++ MDREFR_DRI(pxa_freq_settings[idx].membus); ++ ++ /* If we're dividing the memory clock by two for the SDRAM clock, this ++ * must be set prior to the change. Clearing the divide must be done ++ * after the change. ++ */ ++ if(pxa_freq_settings[idx].div2) { ++ preset_mdrefr |= MDREFR_DB2_MASK; ++ postset_mdrefr |= MDREFR_DB2_MASK; ++ } else { ++ postset_mdrefr &= ~MDREFR_DB2_MASK; ++ } ++ ++ local_irq_save(flags); ++ ++ /* Set new the CCCR */ ++ CCCR = pxa_freq_settings[idx].cccr; ++ ++ __asm__ __volatile__(" \ ++ ldr r4, [%1] ; /* load MDREFR */ \ ++ b 2f ; \ ++ .align 5 ; \ ++1: \ ++ str %4, [%1] ; /* preset the MDREFR */ \ ++ mcr p14, 0, %2, c6, c0, 0 ; /* set CCLKCFG[FCS] */ \ ++ str %5, [%1] ; /* postset the MDREFR */ \ ++ \ ++ b 3f ; \ ++2: b 1b ; \ ++3: nop ; \ ++ " ++ : "=&r" (unused) ++ : "r" (&MDREFR), "r" (CCLKCFG_TURBO|CCLKCFG_FCS), "r" (ramstart), \ ++ "r" (preset_mdrefr), "r" (postset_mdrefr) ++ : "r4", "r5"); ++ local_irq_restore(flags); ++ ++ /* ++ * Restore the CPUs allowed mask. ++ */ ++ set_cpus_allowed(current, cpus_allowed); ++ ++ /* ++ * Tell everyone what we've just done... ++ * you should add a notify client with any platform specific ++ * SDRAM refresh timer adjustments ++ */ ++ cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); ++ ++ return 0; ++} ++ ++static int pxa_cpufreq_init(struct cpufreq_policy *policy) ++{ ++ unsigned long cpus_allowed; ++ unsigned int cpu = policy->cpu; ++ int i; ++ ++ cpus_allowed = current->cpus_allowed; ++ ++ set_cpus_allowed(current, 1 << cpu); ++ BUG_ON(cpu != smp_processor_id()); ++ ++ /* set default policy and cpuinfo */ ++ policy->governor = CPUFREQ_DEFAULT_GOVERNOR; ++ policy->policy = CPUFREQ_POLICY_PERFORMANCE; ++ policy->cpuinfo.max_freq = PXA25x_MAX_FREQ; ++ policy->cpuinfo.min_freq = PXA25x_MIN_FREQ; ++ policy->cpuinfo.transition_latency = 1000; /* FIXME: 1 ms, assumed */ ++ policy->cur = get_clk_frequency_khz(0); /* current freq */ ++ policy->min = policy->max = policy->cur; ++ ++ /* Generate the run cpufreq_frequency_table struct */ ++ for(i=0;i ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "generic.h" ++ ++static int gumstix_mci_init(struct device *dev, irqreturn_t (*lubbock_detect_int)(int, void *, struct pt_regs *), void *data) ++{ ++ // Set up MMC controller ++ pxa_gpio_mode(GPIO6_MMCCLK_MD); ++ pxa_gpio_mode(GPIO53_MMCCLK_MD); ++ pxa_gpio_mode(GPIO8_MMCCS0_MD); ++ ++ return 0; ++} ++ ++static struct pxamci_platform_data gumstix_mci_platform_data = { ++ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, ++ .init = &gumstix_mci_init, ++}; ++ ++static struct pxa2xx_udc_mach_info gumstix_udc_info __initdata = { ++ .gpio_vbus = GPIO_GUMSTIX_USB_GPIOn, ++ .gpio_pullup = GPIO_GUMSTIX_USB_GPIOx, ++}; ++ ++static struct platform_device gum_audio_device = { ++ .name = "pxa2xx-ac97", ++ .id = -1, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++ &gum_audio_device, ++}; ++ ++static void __init gumstix_init(void) ++{ ++ pxa_set_mci_info(&gumstix_mci_platform_data); ++ pxa_set_udc_info(&gumstix_udc_info); ++ (void) platform_add_devices(devices, ARRAY_SIZE(devices)); ++} ++ ++MACHINE_START(GUMSTIX, "The Gumstix Platform") ++ .phys_io = 0x40000000, ++ .boot_params = 0xa0000100, ++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, ++ .timer = &pxa_timer, ++ .map_io = pxa_map_io, ++ .init_irq = pxa_init_irq, ++ .init_machine = gumstix_init, ++MACHINE_END diff --git a/packages/linux/gumstix-kernel-2.6.21/bugfix-i2c-include.patch b/packages/linux/gumstix-kernel-2.6.21/bugfix-i2c-include.patch new file mode 100644 index 0000000000..cb0036929a --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/bugfix-i2c-include.patch @@ -0,0 +1,12 @@ +Index: linux-2.6.21gum/drivers/i2c/busses/i2c-pxa.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/i2c/busses/i2c-pxa.c ++++ linux-2.6.21gum/drivers/i2c/busses/i2c-pxa.c +@@ -32,6 +32,7 @@ + #include + #include + ++#include + #include + #include + #include diff --git a/packages/linux/gumstix-kernel-2.6.21/bugfix-mmc-clock.patch b/packages/linux/gumstix-kernel-2.6.21/bugfix-mmc-clock.patch new file mode 100644 index 0000000000..cac8d735cf --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/bugfix-mmc-clock.patch @@ -0,0 +1,14 @@ +Index: linux-2.6.21gum/drivers/mmc/pxamci.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/mmc/pxamci.c ++++ linux-2.6.21gum/drivers/mmc/pxamci.c +@@ -366,8 +366,7 @@ static void pxamci_set_ios(struct mmc_ho + + if (ios->clock) { + unsigned int clk = CLOCKRATE / ios->clock; +- if (CLOCKRATE / clk > ios->clock) +- clk <<= 1; ++ if(clk > (1<<6)) clk = (1<<6); + host->clkrt = fls(clk) - 1; + pxa_set_cken(CKEN12_MMC, 1); + diff --git a/packages/linux/gumstix-kernel-2.6.21/bugfix-pxa-cpufreq.patch b/packages/linux/gumstix-kernel-2.6.21/bugfix-pxa-cpufreq.patch new file mode 100644 index 0000000000..27388ca9ef --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/bugfix-pxa-cpufreq.patch @@ -0,0 +1,64 @@ +Index: linux-2.6.21gum/arch/arm/mach-pxa/cpu-pxa.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/cpu-pxa.c ++++ linux-2.6.21gum/arch/arm/mach-pxa/cpu-pxa.c +@@ -60,7 +60,7 @@ typedef struct + + /* Define the refresh period in mSec for the SDRAM and the number of rows */ + #define SDRAM_TREF 64 /* standard 64ms SDRAM */ +-#define SDRAM_ROWS 4096 /* 64MB=8192 32MB=4096 */ ++#define SDRAM_ROWS 8192 /* 64MB=8192 32MB=4096 */ + #define MDREFR_DRI(x) ((x*SDRAM_TREF)/(SDRAM_ROWS*32)) + + #define CCLKCFG_TURBO 0x1 +@@ -136,7 +136,7 @@ static int pxa_set_target(struct cpufreq + unsigned int relation) + { + int idx; +- unsigned long cpus_allowed; ++ cpumask_t cpus_allowed; + int cpu = policy->cpu; + struct cpufreq_freqs freqs; + pxa_freqs_t *pxa_freq_settings; +@@ -144,6 +144,7 @@ static int pxa_set_target(struct cpufreq + unsigned long flags; + unsigned int unused; + unsigned int preset_mdrefr, postset_mdrefr; ++ void *ramstart; + + /* + * Save this threads cpus_allowed mask. +@@ -154,7 +155,7 @@ static int pxa_set_target(struct cpufreq + * Bind to the specified CPU. When this call returns, + * we should be running on the right CPU. + */ +- set_cpus_allowed(current, 1 << cpu); ++ set_cpus_allowed(current, cpumask_of_cpu(cpu)); + BUG_ON(cpu != smp_processor_id()); + + /* Get the current policy */ +@@ -187,7 +188,7 @@ static int pxa_set_target(struct cpufreq + (pxa_freq_settings[idx].membus/1000)); + } + +- void *ramstart = phys_to_virt(0xa0000000); ++ ramstart = phys_to_virt(0xa0000000); + + /* + * Tell everyone what we're about to do... +@@ -260,13 +261,13 @@ static int pxa_set_target(struct cpufreq + + static int pxa_cpufreq_init(struct cpufreq_policy *policy) + { +- unsigned long cpus_allowed; ++ cpumask_t cpus_allowed; + unsigned int cpu = policy->cpu; + int i; + + cpus_allowed = current->cpus_allowed; + +- set_cpus_allowed(current, 1 << cpu); ++ set_cpus_allowed(current, cpumask_of_cpu(cpu)); + BUG_ON(cpu != smp_processor_id()); + + /* set default policy and cpuinfo */ diff --git a/packages/linux/gumstix-kernel-2.6.21/bugfix-serial-interrupt.patch b/packages/linux/gumstix-kernel-2.6.21/bugfix-serial-interrupt.patch new file mode 100644 index 0000000000..7f2487ec00 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/bugfix-serial-interrupt.patch @@ -0,0 +1,25 @@ +Index: linux-2.6.21gum/drivers/serial/pxa.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/serial/pxa.c ++++ linux-2.6.21gum/drivers/serial/pxa.c +@@ -235,15 +235,19 @@ static inline irqreturn_t serial_pxa_irq + struct uart_pxa_port *up = dev_id; + unsigned int iir, lsr; + ++ serial_out(up, UART_MCR, serial_in(up, UART_MCR) & ~UART_MCR_RTS); // Clear RTS + iir = serial_in(up, UART_IIR); + if (iir & UART_IIR_NO_INT) +- return IRQ_NONE; ++ { ++ //printk(KERN_WARNING "serial_pxa_irq: odd -- interrupt triggered, but no interrupt in IIR: %08x\n",iir); ++ } + lsr = serial_in(up, UART_LSR); + if (lsr & UART_LSR_DR) + receive_chars(up, &lsr); + check_modem_status(up); + if (lsr & UART_LSR_THRE) + transmit_chars(up); ++ serial_out(up, UART_MCR, serial_in(up, UART_MCR) | UART_MCR_RTS); // Assert RTS + return IRQ_HANDLED; + } + diff --git a/packages/linux/gumstix-kernel-2.6.21/bugfix-serial-register-status.patch b/packages/linux/gumstix-kernel-2.6.21/bugfix-serial-register-status.patch new file mode 100644 index 0000000000..e25436b8ee --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/bugfix-serial-register-status.patch @@ -0,0 +1,69 @@ +Index: linux-2.6.21gum/drivers/serial/pxa.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/serial/pxa.c ++++ linux-2.6.21gum/drivers/serial/pxa.c +@@ -57,6 +57,8 @@ struct uart_pxa_port { + unsigned int lsr_break_flag; + unsigned int cken; + char *name; ++ unsigned int msr; ++ unsigned int lsr; + }; + + static inline unsigned int serial_in(struct uart_pxa_port *up, int offset) +@@ -159,6 +161,7 @@ static inline void receive_chars(struct + + ignore_char: + *status = serial_in(up, UART_LSR); ++ up->lsr = *status; + } while ((*status & UART_LSR_DR) && (max_count-- > 0)); + tty_flip_buffer_push(tty); + } +@@ -211,7 +214,7 @@ static inline void check_modem_status(st + int status; + + status = serial_in(up, UART_MSR); +- ++ up->msr = status; + if ((status & UART_MSR_ANY_DELTA) == 0) + return; + +@@ -242,6 +245,7 @@ static inline irqreturn_t serial_pxa_irq + //printk(KERN_WARNING "serial_pxa_irq: odd -- interrupt triggered, but no interrupt in IIR: %08x\n",iir); + } + lsr = serial_in(up, UART_LSR); ++ up->lsr = lsr; + if (lsr & UART_LSR_DR) + receive_chars(up, &lsr); + check_modem_status(up); +@@ -258,7 +262,7 @@ static unsigned int serial_pxa_tx_empty( + unsigned int ret; + + spin_lock_irqsave(&up->port.lock, flags); +- ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; ++ ret = up->lsr & UART_LSR_TEMT ? TIOCSER_TEMT : 0; + spin_unlock_irqrestore(&up->port.lock, flags); + + return ret; +@@ -270,7 +274,7 @@ static unsigned int serial_pxa_get_mctrl + unsigned char status; + unsigned int ret; + +- status = serial_in(up, UART_MSR); ++ status = up->msr; + + ret = 0; + if (status & UART_MSR_DCD) +@@ -400,10 +404,10 @@ static int serial_pxa_startup(struct uar + /* + * And clear the interrupt registers again for luck. + */ +- (void) serial_in(up, UART_LSR); ++ up->lsr = serial_in(up, UART_LSR); + (void) serial_in(up, UART_RX); + (void) serial_in(up, UART_IIR); +- (void) serial_in(up, UART_MSR); ++ up->msr = serial_in(up, UART_MSR); + + return 0; + } diff --git a/packages/linux/gumstix-kernel-2.6.21/compact-flash.patch b/packages/linux/gumstix-kernel-2.6.21/compact-flash.patch new file mode 100644 index 0000000000..e3bce37c85 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/compact-flash.patch @@ -0,0 +1,287 @@ +Index: linux-2.6.21gum/drivers/pcmcia/Makefile +=================================================================== +--- linux-2.6.21gum.orig/drivers/pcmcia/Makefile ++++ linux-2.6.21gum/drivers/pcmcia/Makefile +@@ -69,4 +69,4 @@ sa1100_cs-$(CONFIG_SA1100_SIMPAD) += sa + pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK) += pxa2xx_lubbock.o sa1111_generic.o + pxa2xx_cs-$(CONFIG_MACH_MAINSTONE) += pxa2xx_mainstone.o + pxa2xx_cs-$(CONFIG_PXA_SHARPSL) += pxa2xx_sharpsl.o +- ++pxa2xx_cs-$(CONFIG_ARCH_GUMSTIX) += pxa2xx_gumstix.o +Index: linux-2.6.21gum/drivers/pcmcia/pxa2xx_gumstix.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/pcmcia/pxa2xx_gumstix.c +@@ -0,0 +1,272 @@ ++/* ++ * linux/drivers/pcmcia/pxa2xx_gumstix.c ++ * ++ * Gumstix PCMCIA specific routines. Based on Mainstone ++ * ++ * Copyright 2004, Craig Hughes ++ * ++ * 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 "soc_common.h" ++ ++static struct pcmcia_irqs gumstix_pcmcia_irqs0[] = { ++ { 0, GUMSTIX_S0_nCD_IRQ, "CF0 nCD" }, ++ { 0, GUMSTIX_S0_nSTSCHG_IRQ, "CF0 nSTSCHG" }, ++}; ++ ++static struct pcmcia_irqs gumstix_pcmcia_irqs1[] = { ++ { 1, GUMSTIX_S1_nCD_IRQ, "CF1 nCD" }, ++ { 1, GUMSTIX_S1_nSTSCHG_IRQ, "CF1 nSTSCHG" }, ++}; ++ ++static int net_cf_vx_mode = 0; ++ ++static int gumstix_pcmcia_hw_init(struct soc_pcmcia_socket *skt) ++{ ++ if(skt->nr == 0) ++ { ++ pxa_gpio_mode(GPIO_GUMSTIX_nSTSCHG_0_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nCD_0_MD); ++ if(net_cf_vx_mode) ++ pxa_gpio_mode(GPIO_GUMSTIX_PRDY_nBSY_0_OLD_MD); ++ else ++ pxa_gpio_mode(GPIO_GUMSTIX_PRDY_nBSY_0_MD); ++ } else { ++ pxa_gpio_mode(GPIO_GUMSTIX_nSTSCHG_1_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nCD_1_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_PRDY_nBSY_1_MD); ++ } ++ ++ pxa_gpio_mode(GPIO_GUMSTIX_nPOE_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nPWE_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nPIOR_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nPIOW_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nPCE_1_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nPCE_2_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_pSKTSEL_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nPREG_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nPWAIT_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_nIOIS16_MD); ++ ++ skt->irq = (skt->nr == 0) ? ((net_cf_vx_mode == 0) ? GUMSTIX_S0_PRDY_nBSY_IRQ : GUMSTIX_S0_PRDY_nBSY_OLD_IRQ) : GUMSTIX_S1_PRDY_nBSY_IRQ; ++ ++ return (skt->nr == 0) ? soc_pcmcia_request_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0)) : ++ soc_pcmcia_request_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1)); ++} ++ ++static void gumstix_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) ++{ ++ if(skt->nr == 0) ++ { ++ soc_pcmcia_free_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0)); ++ } else { ++ soc_pcmcia_free_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1)); ++ } ++} ++ ++static void gumstix_pcmcia_socket_state(struct soc_pcmcia_socket *skt, ++ struct pcmcia_state *state) ++{ ++ unsigned int cd, prdy_nbsy, nbvd1; ++ if(skt->nr == 0) ++ { ++ cd = GPIO_GUMSTIX_nCD_0; ++ if(net_cf_vx_mode) ++ prdy_nbsy = GPIO_GUMSTIX_PRDY_nBSY_0_OLD; ++ else ++ prdy_nbsy = GPIO_GUMSTIX_PRDY_nBSY_0; ++ nbvd1 = GPIO_GUMSTIX_nBVD1_0; ++ } else { ++ cd = GPIO_GUMSTIX_nCD_1; ++ prdy_nbsy = GPIO_GUMSTIX_PRDY_nBSY_1; ++ nbvd1 = GPIO_GUMSTIX_nBVD1_1; ++ } ++ state->detect = !(GPLR(cd) & GPIO_bit(cd)); ++ state->ready = !!(GPLR(prdy_nbsy) & GPIO_bit(prdy_nbsy)); ++ state->bvd1 = !!(GPLR(nbvd1) & GPIO_bit(nbvd1)); ++ state->bvd2 = 1; ++ state->vs_3v = 0; ++ state->vs_Xv = 0; ++ state->wrprot = 0; ++} ++ ++static int gumstix_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, ++ const socket_state_t *state) ++{ ++ return 0; ++} ++ ++static void gumstix_pcmcia_socket_init(struct soc_pcmcia_socket *skt) ++{ ++ if(skt->nr) { ++ soc_pcmcia_enable_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0)); ++ } else { ++ soc_pcmcia_enable_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1)); ++ } ++} ++ ++static void gumstix_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) ++{ ++ if(skt->nr) { ++ soc_pcmcia_disable_irqs(skt, gumstix_pcmcia_irqs0, ARRAY_SIZE(gumstix_pcmcia_irqs0)); ++ } else { ++ soc_pcmcia_disable_irqs(skt, gumstix_pcmcia_irqs1, ARRAY_SIZE(gumstix_pcmcia_irqs1)); ++ } ++} ++ ++static struct pcmcia_low_level gumstix_pcmcia_ops = { ++ .owner = THIS_MODULE, ++ .hw_init = gumstix_pcmcia_hw_init, ++ .hw_shutdown = gumstix_pcmcia_hw_shutdown, ++ .socket_state = gumstix_pcmcia_socket_state, ++ .configure_socket = gumstix_pcmcia_configure_socket, ++ .socket_init = gumstix_pcmcia_socket_init, ++ .socket_suspend = gumstix_pcmcia_socket_suspend, ++ .nr = 2, ++}; ++ ++static struct platform_device *gumstix_pcmcia_device; ++ ++inline void __init gumstix_pcmcia_cpld_clk(void) ++{ ++ GPCR(GPIO_GUMSTIX_nPOE) = GPIO_bit(GPIO_GUMSTIX_nPOE); ++ GPSR(GPIO_GUMSTIX_nPOE) = GPIO_bit(GPIO_GUMSTIX_nPOE); ++} ++ ++inline unsigned char __init gumstix_pcmcia_cpld_read_bits(int bits) ++{ ++ unsigned char result = 0; ++ unsigned int shift = 0; ++ while(bits--) ++ { ++ result |= !!(GPLR(GPIO_GUMSTIX_nCD_0) & GPIO_bit(GPIO_GUMSTIX_nCD_0)) << shift; ++ shift ++; ++ gumstix_pcmcia_cpld_clk(); ++ } ++ printk("CPLD responded with: %02x\n",result); ++ return result; ++} ++ ++/* We use the CPLD on the CF-CF card to read a value from a shift register. If we can read that ++ * magic sequence, then we have 2 CF cards; otherwise we assume just one ++ * The CPLD will send the value of the shift register on GPIO11 (the CD line for slot 0) ++ * when RESET is held in reset. We use GPIO48 (nPOE) as a clock signal, ++ * GPIO52/53 (card enable for both cards) to control read/write to the shift register ++ */ ++static void __init gumstix_count_cards(void) ++{ ++ pxa_gpio_mode(GPIO_GUMSTIX_nPOE | GPIO_OUT); ++ pxa_gpio_mode(GPIO_GUMSTIX_nPCE_1 | GPIO_OUT); ++ pxa_gpio_mode(GPIO_GUMSTIX_nPCE_2 | GPIO_OUT); ++ pxa_gpio_mode(GPIO_GUMSTIX_nCD_0 | GPIO_IN); ++ if(net_cf_vx_mode) ++ pxa_gpio_mode(GPIO_GUMSTIX_CF_OLD_RESET | GPIO_OUT); ++ else ++ pxa_gpio_mode(GPIO_GUMSTIX_CF_RESET | GPIO_OUT); ++ ++ // Enter reset ++ if(net_cf_vx_mode) ++ GPSR(GPIO_GUMSTIX_CF_OLD_RESET) = GPIO_bit(GPIO_GUMSTIX_CF_OLD_RESET); ++ else ++ GPSR(GPIO_GUMSTIX_CF_RESET) = GPIO_bit(GPIO_GUMSTIX_CF_RESET); ++ ++ // Setup the shift register ++ GPSR(GPIO_GUMSTIX_nPCE_1) = GPIO_bit(GPIO_GUMSTIX_nPCE_1); ++ GPCR(GPIO_GUMSTIX_nPCE_2) = GPIO_bit(GPIO_GUMSTIX_nPCE_2); ++ ++ // Tick the clock to program the shift register ++ gumstix_pcmcia_cpld_clk(); ++ ++ // Now set shift register into read mode ++ GPCR(GPIO_GUMSTIX_nPCE_1) = GPIO_bit(GPIO_GUMSTIX_nPCE_1); ++ GPSR(GPIO_GUMSTIX_nPCE_2) = GPIO_bit(GPIO_GUMSTIX_nPCE_2); ++ ++ // We can read the bits now -- 0xC2 means "Dual compact flash" ++ if(gumstix_pcmcia_cpld_read_bits(8) != 0xC2) ++ { ++ // We do not have 2 CF slots ++ gumstix_pcmcia_ops.nr = 1; ++ } ++} ++ ++#ifdef CONFIG_ARCH_GUMSTIX_VERDEX ++static void __init gumstix_check_if_netCF_vx(void) ++{ ++ void *network_controller_memory = ioremap(0x04000300,16); ++ // Look for the special 91c111 value in the bank select register ++ if((0xff00 & readw(network_controller_memory+0x0e)) == 0x3300) { ++ printk("Detected netCF-vx board: using older GPIO configuration\n"); ++ net_cf_vx_mode = 1; ++ } else { ++ printk("Not netCF-vx board: using newer GPIO configuration\n"); ++ net_cf_vx_mode = 0; ++ } ++ iounmap(network_controller_memory); ++} ++#endif ++ ++static int __init gumstix_pcmcia_init(void) ++{ ++ int ret; ++ ++#ifdef CONFIG_ARCH_GUMSTIX_VERDEX ++ gumstix_check_if_netCF_vx(); ++#endif ++ ++ gumstix_count_cards(); ++ ++ udelay(50); ++ if(net_cf_vx_mode) ++ GPCR(GPIO_GUMSTIX_CF_OLD_RESET) = GPIO_bit(GPIO_GUMSTIX_CF_OLD_RESET); ++ else ++ GPCR(GPIO_GUMSTIX_CF_RESET) = GPIO_bit(GPIO_GUMSTIX_CF_RESET); ++ ++ gumstix_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); ++ if (!gumstix_pcmcia_device) ++ return -ENOMEM; ++ ++ gumstix_pcmcia_device->dev.platform_data = &gumstix_pcmcia_ops; ++ ++ ret = platform_device_add(gumstix_pcmcia_device); ++ if (ret) ++ platform_device_put(gumstix_pcmcia_device); ++ ++ return ret; ++} ++ ++static void __exit gumstix_pcmcia_exit(void) ++{ ++ /* ++ * This call is supposed to free our gumstix_pcmcia_device. ++ * Unfortunately platform_device don't have a free method, and ++ * we can't assume it's free of any reference at this point so we ++ * can't free it either. ++ */ ++ platform_device_unregister(gumstix_pcmcia_device); ++} ++ ++fs_initcall(gumstix_pcmcia_init); ++module_exit(gumstix_pcmcia_exit); ++ ++MODULE_LICENSE("GPL"); diff --git a/packages/linux/gumstix-kernel-2.6.21/compile-fix-pxa_cpufreq.patch b/packages/linux/gumstix-kernel-2.6.21/compile-fix-pxa_cpufreq.patch new file mode 100644 index 0000000000..a8fc94bc9c --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/compile-fix-pxa_cpufreq.patch @@ -0,0 +1,13 @@ +Index: linux-2.6.21gum/arch/arm/mach-pxa/cpu-pxa.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/cpu-pxa.c ++++ linux-2.6.21gum/arch/arm/mach-pxa/cpu-pxa.c +@@ -42,7 +42,7 @@ + + #define DEBUG 0 + +-#ifdef DEBUG ++#if defined (DEBUG) && DEBUG > 0 + static unsigned int freq_debug = DEBUG; + MODULE_PARM(freq_debug, "i"); + MODULE_PARM_DESC(freq_debug, "Set the debug messages to on=1/off=0"); diff --git a/packages/linux/gumstix-kernel-2.6.21/cpufreq-better-freqs.patch b/packages/linux/gumstix-kernel-2.6.21/cpufreq-better-freqs.patch new file mode 100644 index 0000000000..90bc021d85 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/cpufreq-better-freqs.patch @@ -0,0 +1,53 @@ +Index: linux-2.6.21gum/arch/arm/mach-pxa/cpu-pxa.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/cpu-pxa.c ++++ linux-2.6.21gum/arch/arm/mach-pxa/cpu-pxa.c +@@ -65,8 +65,8 @@ typedef struct + + #define CCLKCFG_TURBO 0x1 + #define CCLKCFG_FCS 0x2 +-#define PXA25x_MIN_FREQ 99500 +-#define PXA25x_MAX_FREQ 398100 ++#define PXA25x_MIN_FREQ 99533 ++#define PXA25x_MAX_FREQ 530842 + #define MDREFR_DB2_MASK (MDREFR_K2DB2 | MDREFR_K1DB2) + #define MDREFR_DRI_MASK 0xFFF + +@@ -75,12 +75,14 @@ typedef struct + static pxa_freqs_t pxa255_run_freqs[] = + { + /* CPU MEMBUS CCCR DIV2*/ +- { 99500, 99500, 0x121, 1}, /* run= 99, turbo= 99, PXbus=50, SDRAM=50 */ +- {132700, 132700, 0x123, 1}, /* run=133, turbo=133, PXbus=66, SDRAM=66 */ +- {199100, 99500, 0x141, 0}, /* run=199, turbo=199, PXbus=99, SDRAM=99 */ +- {265400, 132700, 0x143, 1}, /* run=265, turbo=265, PXbus=133, SDRAM=66 */ +- {331800, 165900, 0x145, 1}, /* run=331, turbo=331, PXbus=166, SDRAM=83 */ +- {398100, 99500, 0x161, 0}, /* run=398, turbo=398, PXbus=196, SDRAM=99 */ ++ { 99533, 99533, 0x121, 1}, /* run= 99, turbo= 99, PXbus=50, SDRAM=50 */ ++ {132710, 132710, 0x123, 1}, /* run=133, turbo=133, PXbus=66, SDRAM=66 */ ++ {199066, 99533, 0x141, 0}, /* run=199, turbo=199, PXbus=99, SDRAM=99 */ ++ {265421, 132710, 0x143, 0}, /* run=265, turbo=265, PXbus=133, SDRAM=133 */ ++ {331776, 165888, 0x145, 1}, /* run=331, turbo=331, PXbus=166, SDRAM=83 */ ++ {398131, 99533, 0x161, 0}, /* run=398, turbo=398, PXbus=99, SDRAM=99 */ ++ {398131, 132710, 0x1c3, 0}, /* run=265, turbo=398, PXbus=133, SDRAM=133 */ ++ {530842, 132710, 0x163, 0}, /* run=531, turbo=531, PXbus=133, SDRAM=133 */ + {0,} + }; + #define NUM_RUN_FREQS (sizeof(pxa255_run_freqs)/sizeof(pxa_freqs_t)) +@@ -91,11 +93,11 @@ static struct cpufreq_frequency_table px + static pxa_freqs_t pxa255_turbo_freqs[] = + { + /* CPU MEMBUS CCCR DIV2*/ +- { 99500, 99500, 0x121, 1}, /* run=99, turbo= 99, PXbus=50, SDRAM=50 */ +- {199100, 99500, 0x221, 0}, /* run=99, turbo=199, PXbus=50, SDRAM=99 */ +- {298500, 99500, 0x321, 0}, /* run=99, turbo=287, PXbus=50, SDRAM=99 */ +- {298600, 99500, 0x1c1, 0}, /* run=199, turbo=287, PXbus=99, SDRAM=99 */ +- {398100, 99500, 0x241, 0}, /* run=199, turbo=398, PXbus=99, SDRAM=99 */ ++ { 99533, 99533, 0x121, 1}, /* run=99, turbo= 99, PXbus=99, SDRAM=50 */ ++ {149299, 99533, 0x1a1, 0}, /* run=99, turbo=149, PXbus=99, SDRAM=99 */ ++ {199066, 99533, 0x221, 0}, /* run=99, turbo=199, PXbus=99, SDRAM=99 */ ++ {298598, 99533, 0x321, 0}, /* run=99, turbo=299, PXbus=99, SDRAM=99 */ ++ {398131, 99533, 0x241, 1}, /* run=199, turbo=398, PXbus=99, SDRAM=50 */ + {0,} + }; + #define NUM_TURBO_FREQS (sizeof(pxa255_turbo_freqs)/sizeof(pxa_freqs_t)) diff --git a/packages/linux/gumstix-kernel-2.6.21/cpufreq-fixup.patch b/packages/linux/gumstix-kernel-2.6.21/cpufreq-fixup.patch new file mode 100644 index 0000000000..8a64098167 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/cpufreq-fixup.patch @@ -0,0 +1,26 @@ +Index: linux-2.6.21gum/drivers/cpufreq/cpufreq_ondemand.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/cpufreq/cpufreq_ondemand.c ++++ linux-2.6.21gum/drivers/cpufreq/cpufreq_ondemand.c +@@ -573,7 +573,7 @@ static int cpufreq_governor_dbs(struct c + return 0; + } + +-static struct cpufreq_governor cpufreq_gov_dbs = { ++struct cpufreq_governor cpufreq_gov_dbs = { + .name = "ondemand", + .governor = cpufreq_governor_dbs, + .owner = THIS_MODULE, +Index: linux-2.6.21gum/drivers/cpufreq/cpufreq_conservative.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/cpufreq/cpufreq_conservative.c ++++ linux-2.6.21gum/drivers/cpufreq/cpufreq_conservative.c +@@ -551,7 +551,7 @@ static int cpufreq_governor_dbs(struct c + return 0; + } + +-static struct cpufreq_governor cpufreq_gov_dbs = { ++struct cpufreq_governor cpufreq_gov_dbs = { + .name = "conservative", + .governor = cpufreq_governor_dbs, + .owner = THIS_MODULE, diff --git a/packages/linux/gumstix-kernel-2.6.21/cpufreq-ondemand-by-default.patch b/packages/linux/gumstix-kernel-2.6.21/cpufreq-ondemand-by-default.patch new file mode 100644 index 0000000000..bb5443cdef --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/cpufreq-ondemand-by-default.patch @@ -0,0 +1,42 @@ +Index: linux-2.6.21gum/drivers/cpufreq/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/drivers/cpufreq/Kconfig ++++ linux-2.6.21gum/drivers/cpufreq/Kconfig +@@ -52,7 +52,7 @@ config CPU_FREQ_STAT_DETAILS + + choice + prompt "Default CPUFreq governor" +- default CPU_FREQ_DEFAULT_GOV_USERSPACE if CPU_FREQ_SA1100 || CPU_FREQ_SA1110 ++ default CPU_FREQ_DEFAULT_GOV_USERSPACE if CPU_FREQ_SA1100 || CPU_FREQ_SA1110 || CPU_FREQ_PXA + default CPU_FREQ_DEFAULT_GOV_PERFORMANCE + help + This option sets which CPUFreq governor shall be loaded at +@@ -75,6 +75,14 @@ config CPU_FREQ_DEFAULT_GOV_USERSPACE + program shall be able to set the CPU dynamically without having + to enable the userspace governor manually. + ++config CPU_FREQ_DEFAULT_GOV_ONDEMAND ++ bool "ondemand" ++ select CPU_FREQ_GOV_ONDEMAND ++ help ++ Use the CPUFreq governor 'ondemand' as default. This sets ++ the frequency dynamically based on CPU load, throttling up ++ and down as necessary. ++ + endchoice + + config CPU_FREQ_GOV_PERFORMANCE +Index: linux-2.6.21gum/include/linux/cpufreq.h +=================================================================== +--- linux-2.6.21gum.orig/include/linux/cpufreq.h ++++ linux-2.6.21gum/include/linux/cpufreq.h +@@ -286,6 +286,9 @@ extern struct cpufreq_governor cpufreq_g + #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE) + extern struct cpufreq_governor cpufreq_gov_userspace; + #define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_userspace ++#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND) ++extern struct cpufreq_governor cpufreq_gov_dbs; ++#define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_dbs; + #endif + + diff --git a/packages/linux/gumstix-kernel-2.6.21/disable-uncompress-message.patch b/packages/linux/gumstix-kernel-2.6.21/disable-uncompress-message.patch new file mode 100644 index 0000000000..4d3d8cec3c --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/disable-uncompress-message.patch @@ -0,0 +1,32 @@ +Index: linux-2.6.21gum/arch/arm/boot/compressed/misc.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/boot/compressed/misc.c ++++ linux-2.6.21gum/arch/arm/boot/compressed/misc.c +@@ -322,7 +322,6 @@ void flush_window(void) + bytes_out += (ulg)outcnt; + output_ptr += (ulg)outcnt; + outcnt = 0; +- putstr("."); + } + + #ifndef arch_error +@@ -354,9 +353,7 @@ decompress_kernel(ulg output_start, ulg + arch_decomp_setup(); + + makecrc(); +- putstr("Uncompressing Linux..."); + gunzip(); +- putstr(" done, booting the kernel.\n"); + return output_ptr; + } + #else +@@ -368,9 +365,7 @@ int main() + output_data = output_buffer; + + makecrc(); +- putstr("Uncompressing Linux..."); + gunzip(); +- putstr("done.\n"); + return 0; + } + #endif diff --git a/packages/linux/gumstix-kernel-2.6.21/ethernet-config.patch b/packages/linux/gumstix-kernel-2.6.21/ethernet-config.patch new file mode 100644 index 0000000000..baf4871504 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/ethernet-config.patch @@ -0,0 +1,26 @@ +Index: linux-2.6.21gum/drivers/net/smc91x.h +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/smc91x.h ++++ linux-2.6.21gum/drivers/net/smc91x.h +@@ -55,6 +55,21 @@ + #define SMC_insw(a, r, p, l) readsw((a) + (r), p, l) + #define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) + ++#elif defined(CONFIG_ARCH_GUMSTIX) ++#define SMC_CAN_USE_8BIT 0 ++#define SMC_CAN_USE_16BIT 1 ++#define SMC_CAN_USE_32BIT 0 ++#define SMC_NOWAIT 1 ++#define SMC_USE_PXA_DMA 1 ++#define SMC_IO_SHIFT 0 ++#define SMC_inw(a, r) readw((a) + (r)) ++#define SMC_outw(v, a, r) writew(v, (a) + (r)) ++#define SMC_insw(a, r, p, l) readsw((a) + (r), p, l) ++#define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) ++#define RPC_LSA_DEFAULT RPC_LED_100_10 ++#define RPC_LSB_DEFAULT RPC_LED_TX_RX ++ ++ + #elif defined(CONFIG_REDWOOD_5) || defined(CONFIG_REDWOOD_6) + + /* We can only do 16-bit reads and writes in the static memory space. */ diff --git a/packages/linux/gumstix-kernel-2.6.21/flash.patch b/packages/linux/gumstix-kernel-2.6.21/flash.patch new file mode 100644 index 0000000000..a50a382f7a --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/flash.patch @@ -0,0 +1,171 @@ +Index: linux-2.6.21gum/drivers/mtd/maps/gumstix-flash.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/mtd/maps/gumstix-flash.c +@@ -0,0 +1,136 @@ ++/* ++ * Map driver for the Gumstix platform ++ * ++ * Author: Craig Hughes ++ * ++ * 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 ++ ++ ++#define ROM_ADDR 0x00000000 ++#define FLASH_ADDR 0x00000000 ++ ++#define WINDOW_SIZE 64*1024*1024 ++ ++static struct map_info gumstix_flash_maps[1] = { { ++ .name = "Gumstix Flash ROM", ++ .size = WINDOW_SIZE, ++ .phys = FLASH_ADDR, ++ .bankwidth = 2, ++} }; ++ ++static struct mtd_partition gumstix_flash_partitions[] = { ++ { ++ .name = "Bootloader", ++ .size = 0x00040000, ++ .offset = FLASH_ADDR ++ },{ ++ .name = "RootFS", ++ .size = MTDPART_SIZ_FULL, ++ .offset = MTDPART_OFS_APPEND ++ } ++}; ++ ++static struct mtd_info *mymtds[1]; ++static struct mtd_partition *parsed_parts[1]; ++static int nr_parsed_parts[1]; ++ ++static const char *probes[] = { NULL }; ++ ++static int __init gumstix_flashmap_init(void) ++{ ++ int ret = 0, i; ++ ++ for (i = 0; i < 1; i++) { ++ gumstix_flash_maps[i].virt = ioremap(gumstix_flash_maps[i].phys, WINDOW_SIZE); ++ if (!gumstix_flash_maps[i].virt) { ++ printk(KERN_WARNING "Failed to ioremap %s\n", gumstix_flash_maps[i].name); ++ if (!ret) ++ ret = -ENOMEM; ++ continue; ++ } ++ simple_map_init(&gumstix_flash_maps[i]); ++ ++ printk(KERN_NOTICE "Probing %s at physical address 0x%08lx (%d-bit bankwidth)\n", ++ gumstix_flash_maps[i].name, gumstix_flash_maps[i].phys, ++ gumstix_flash_maps[i].bankwidth * 8); ++ ++ mymtds[i] = do_map_probe("cfi_probe", &gumstix_flash_maps[i]); ++ ++ if (!mymtds[i]) { ++ iounmap((void *)gumstix_flash_maps[i].virt); ++ if (gumstix_flash_maps[i].cached) ++ iounmap(gumstix_flash_maps[i].cached); ++ if (!ret) ++ ret = -EIO; ++ continue; ++ } ++ mymtds[i]->owner = THIS_MODULE; ++ ++ ret = parse_mtd_partitions(mymtds[i], probes, ++ &parsed_parts[i], 0); ++ ++ if (ret > 0) ++ nr_parsed_parts[i] = ret; ++ } ++ ++ if (!mymtds[0]) ++ return ret; ++ ++ for (i = 0; i < 1; i++) { ++ if (!mymtds[i]) { ++ printk(KERN_WARNING "%s is absent. Skipping\n", gumstix_flash_maps[i].name); ++ } else if (nr_parsed_parts[i]) { ++ add_mtd_partitions(mymtds[i], parsed_parts[i], nr_parsed_parts[i]); ++ } else if (!i) { ++ printk("Using static partitions on %s\n", gumstix_flash_maps[i].name); ++ add_mtd_partitions(mymtds[i], gumstix_flash_partitions, ARRAY_SIZE(gumstix_flash_partitions)); ++ } else { ++ printk("Registering %s as whole device\n", gumstix_flash_maps[i].name); ++ add_mtd_device(mymtds[i]); ++ } ++ } ++ return 0; ++} ++ ++static void __exit gumstix_flashmap_cleanup(void) ++{ ++ int i; ++ for (i = 0; i < 1; i++) { ++ if (!mymtds[i]) ++ continue; ++ ++ if (nr_parsed_parts[i] || !i) ++ del_mtd_partitions(mymtds[i]); ++ else ++ del_mtd_device(mymtds[i]); ++ ++ map_destroy(mymtds[i]); ++ iounmap((void *)gumstix_flash_maps[i].virt); ++ if (gumstix_flash_maps[i].cached) ++ iounmap(gumstix_flash_maps[i].cached); ++ ++ if (parsed_parts[i]) ++ kfree(parsed_parts[i]); ++ } ++} ++ ++module_init(gumstix_flashmap_init); ++module_exit(gumstix_flashmap_cleanup); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Gumstix, Inc. "); ++MODULE_DESCRIPTION("MTD map driver for the Gumstix Platform"); +Index: linux-2.6.21gum/drivers/mtd/maps/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/drivers/mtd/maps/Kconfig ++++ linux-2.6.21gum/drivers/mtd/maps/Kconfig +@@ -131,6 +131,13 @@ config MTD_SBC_GXX + More info at + . + ++config MTD_GUMSTIX ++ tristate "CFI Flash device mapped on Gumstix" ++ depends on ARCH_GUMSTIX && MTD_CFI_INTELEXT && MTD_PARTITIONS ++ help ++ This provides a driver for the on-board flash of the Gumstix ++ single board computers. ++ + config MTD_LUBBOCK + tristate "CFI Flash device mapped on Intel Lubbock XScale eval board" + depends on ARCH_LUBBOCK && MTD_CFI_INTELEXT && MTD_PARTITIONS +Index: linux-2.6.21gum/drivers/mtd/maps/Makefile +=================================================================== +--- linux-2.6.21gum.orig/drivers/mtd/maps/Makefile ++++ linux-2.6.21gum/drivers/mtd/maps/Makefile +@@ -21,6 +21,7 @@ obj-$(CONFIG_MTD_ICHXROM) += ichxrom.o + obj-$(CONFIG_MTD_CK804XROM) += ck804xrom.o + obj-$(CONFIG_MTD_TSUNAMI) += tsunami_flash.o + obj-$(CONFIG_MTD_LUBBOCK) += lubbock-flash.o ++obj-$(CONFIG_MTD_GUMSTIX) += gumstix-flash.o + obj-$(CONFIG_MTD_MAINSTONE) += mainstone-flash.o + obj-$(CONFIG_MTD_MBX860) += mbx860.o + obj-$(CONFIG_MTD_CEIVA) += ceiva.o diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-asoc.patch b/packages/linux/gumstix-kernel-2.6.21/gumstix-asoc.patch new file mode 100644 index 0000000000..48e64b5764 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/gumstix-asoc.patch @@ -0,0 +1,224 @@ +Index: linux-2.6.21gum/sound/soc/pxa/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/sound/soc/pxa/Kconfig ++++ linux-2.6.21gum/sound/soc/pxa/Kconfig +@@ -16,6 +16,7 @@ config SND_PXA2XX_SOC_AC97 + tristate + select AC97_BUS + select SND_SOC_AC97_BUS ++ select SND_PXA2XX_AC97 + + config SND_PXA2XX_SOC_I2S + tristate +@@ -56,4 +57,12 @@ config SND_PXA2XX_SOC_TOSA + Say Y if you want to add support for SoC audio on Sharp + Zaurus SL-C6000x models (Tosa). + ++config SND_PXA2XX_SOC_GUMSTIX ++ tristate "SoC AC97 Audio support for Gumstix" ++ depends on SND_PXA2XX_SOC && ARCH_GUMSTIX ++ select SND_PXA2XX_SOC_AC97 ++ select SND_SOC_AC97_CODEC ++ help ++ Say Y if you want to add support for SoC audio on Gumstix ++ + endmenu +Index: linux-2.6.21gum/sound/soc/pxa/Makefile +=================================================================== +--- linux-2.6.21gum.orig/sound/soc/pxa/Makefile ++++ linux-2.6.21gum/sound/soc/pxa/Makefile +@@ -12,9 +12,11 @@ snd-soc-corgi-objs := corgi.o + snd-soc-poodle-objs := poodle.o + snd-soc-tosa-objs := tosa.o + snd-soc-spitz-objs := spitz.o ++snd-soc-gumstix-objs := gumstix.o + + obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o + obj-$(CONFIG_SND_PXA2XX_SOC_POODLE) += snd-soc-poodle.o + obj-$(CONFIG_SND_PXA2XX_SOC_TOSA) += snd-soc-tosa.o + obj-$(CONFIG_SND_PXA2XX_SOC_SPITZ) += snd-soc-spitz.o ++obj-$(CONFIG_SND_PXA2XX_SOC_GUMSTIX) += snd-soc-gumstix.o + +Index: linux-2.6.21gum/sound/soc/pxa/gumstix.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/sound/soc/pxa/gumstix.c +@@ -0,0 +1,109 @@ ++/* ++ * gumstix.c -- SoC audio for Gumstix ++ * ++ * Copyright 2005 Wolfson Microelectronics PLC. ++ * Copyright 2005 Openedhand Ltd. ++ * Copyright 2007 Gumstix Inc. ++ * ++ * Authors: Liam Girdwood ++ * Richard Purdie ++ * Craig Hughes ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ * ++ * Revision history ++ * 26 April 2007 - Initial revision forked from tosa.c ++ * ++ * ++ */ ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "pxa2xx-pcm.h" ++#include "pxa2xx-ac97.h" ++#include "../codecs/ac97.h" ++ ++static struct snd_soc_machine gumstix; ++ ++static int gumstix_ac97_init(struct snd_soc_codec *codec) ++{ ++ // For now, do nothing -- should move the ucb1400 patch stuff here ++ return 0; ++} ++ ++/* For right now, just add UCB1400 -- once that's working, we can also add ++ * PCM channels via SPI to bluetooth module, GSM module, or whatnot */ ++static struct snd_soc_dai_link gumstix_dai[] = { ++{ ++ .name = "ucb1400", ++ .stream_name = "UCB1400", ++ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI], ++ .codec_dai = &ac97_dai, ++ .init = gumstix_ac97_init, ++}, ++}; ++ ++static struct snd_soc_machine snd_soc_machine_gumstix = { ++ .name = "Gumstix", ++ .dai_link = gumstix_dai, ++ .num_links = ARRAY_SIZE(gumstix_dai), ++}; ++ ++static struct snd_soc_device gumstix_snd_devdata = { ++ .machine = &snd_soc_machine_gumstix, ++ .platform = &pxa2xx_soc_platform, ++ .codec_dev = &soc_codec_dev_ac97, ++}; ++ ++static struct platform_device *gumstix_snd_device; ++ ++static int __init gumstix_init(void) ++{ ++ int ret; ++ ++ if (!machine_is_gumstix()) ++ return -ENODEV; ++ ++ gumstix_snd_device = platform_device_alloc("soc-audio", -1); ++ if (!gumstix_snd_device) ++ return -ENOMEM; ++ ++ platform_set_drvdata(gumstix_snd_device, &gumstix_snd_devdata); ++ gumstix_snd_devdata.dev = &gumstix_snd_device->dev; ++ ret = platform_device_add(gumstix_snd_device); ++ ++ if (ret) ++ platform_device_put(gumstix_snd_device); ++ ++ return ret; ++} ++ ++static void __exit gumstix_exit(void) ++{ ++ platform_device_unregister(gumstix_snd_device); ++} ++ ++module_init(gumstix_init); ++module_exit(gumstix_exit); ++ ++/* Module information */ ++MODULE_AUTHOR("Craig Hughes "); ++MODULE_DESCRIPTION("ALSA SoC Gumstix"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.21gum/sound/soc/codecs/ac97.c +=================================================================== +--- linux-2.6.21gum.orig/sound/soc/codecs/ac97.c ++++ linux-2.6.21gum/sound/soc/codecs/ac97.c +@@ -43,7 +43,7 @@ static int ac97_prepare(struct snd_pcm_s + #define STD_AC97_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ + SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000) + +-static struct snd_soc_codec_dai ac97_dai = { ++struct snd_soc_codec_dai ac97_dai = { + .name = "AC97 HiFi", + .playback = { + .stream_name = "AC97 Playback", +@@ -61,6 +61,8 @@ static struct snd_soc_codec_dai ac97_dai + .prepare = ac97_prepare,}, + }; + ++EXPORT_SYMBOL_GPL(ac97_dai); ++ + static unsigned int ac97_read(struct snd_soc_codec *codec, + unsigned int reg) + { +Index: linux-2.6.21gum/sound/soc/codecs/ac97.h +=================================================================== +--- linux-2.6.21gum.orig/sound/soc/codecs/ac97.h ++++ linux-2.6.21gum/sound/soc/codecs/ac97.h +@@ -14,5 +14,6 @@ + #define __LINUX_SND_SOC_AC97_H + + extern struct snd_soc_codec_device soc_codec_dev_ac97; ++extern struct snd_soc_codec_dai ac97_dai; + + #endif +Index: linux-2.6.21gum/sound/soc/pxa/pxa2xx-ac97.c +=================================================================== +--- linux-2.6.21gum.orig/sound/soc/pxa/pxa2xx-ac97.c ++++ linux-2.6.21gum/sound/soc/pxa/pxa2xx-ac97.c +@@ -154,18 +154,26 @@ static void pxa2xx_ac97_warm_reset(struc + + static void pxa2xx_ac97_cold_reset(struct snd_ac97 *ac97) + { +- GCR &= GCR_COLD_RST; /* clear everything but nCRST */ +- GCR &= ~GCR_COLD_RST; /* then assert nCRST */ +- +- gsr_bits = 0; + #ifdef CONFIG_PXA27x + /* PXA27x Developers Manual section 13.5.2.2.1 */ ++ GCR |= GCR_ACLINK_OFF; ++ udelay(5); ++ GCR &= GCR_COLD_RST; /* Mask all interrupts */ ++ GCR &= ~GCR_COLD_RST; /* cold reset */ ++ udelay(5); + pxa_set_cken(1 << 31, 1); + udelay(5); +- pxa_set_cken(1 << 31, 0); ++ GCR |= GCR_PRIRDY_IEN|GCR_SECRDY_IEN; /* unmask the interrupts */ ++ pxa_set_cken(1 << 31, 0); /* clear CKEN31 */ ++ udelay(5); + GCR = GCR_COLD_RST; + udelay(50); ++ wait_event_timeout(gsr_wq, gsr_bits & (GSR_PCR | GSR_SCR), 1); + #else ++ GCR &= GCR_COLD_RST; /* clear everything but nCRST */ ++ GCR &= ~GCR_COLD_RST; /* then assert nCRST */ ++ ++ gsr_bits = 0; + GCR = GCR_COLD_RST; + GCR |= GCR_CDONE_IE|GCR_SDONE_IE; + wait_event_timeout(gsr_wq, gsr_bits & (GSR_PCR | GSR_SCR), 1); diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/.mtn2git_empty b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/defconfig b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/defconfig new file mode 100644 index 0000000000..418a1b4402 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/defconfig @@ -0,0 +1,1619 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.21 +# Thu Jan 31 10:02:15 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +# CONFIG_SYSFS_DEPRECATED 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 is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_ELF_CORE is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +# CONFIG_EPOLL is not set +# CONFIG_SHMEM is not set +CONFIG_SLAB=y +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_RT_MUTEXES=y +CONFIG_TINY_SHMEM=y +CONFIG_BASE_SMALL=0 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +CONFIG_ARCH_GUMSTIX=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_ARCH_GUMSTIX_ORIG is not set +CONFIG_ARCH_GUMSTIX_F=y +# CONFIG_ARCH_GUMSTIX_VERDEX is not set +CONFIG_PXA25x=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +# CONFIG_IWMMXT is not set +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +CONFIG_PROC_GPIO=m +# CONFIG_PROC_GPIO_DEBUG is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +# CONFIG_PCMCIA_IOCTL is not set + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=m + +# +# Kernel Features +# +CONFIG_PREEMPT=y +CONFIG_NO_IDLE_HZ=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_ALIGNMENT_TRAP=y +CONFIG_ALIGNMENT_HANDLING=0x2 + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +# CONFIG_PM_SYSFS_DEPRECATED is not set +CONFIG_APM_EMULATION=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +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=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_BRIDGE_NETFILTER is not set + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK_SUPPORT=y +# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +# CONFIG_NF_CT_PROTO_SCTP is not set +# CONFIG_NF_CONNTRACK_AMANDA is not set +CONFIG_NF_CONNTRACK_FTP=m +# CONFIG_NF_CONNTRACK_H323 is not set +# CONFIG_NF_CONNTRACK_IRC is not set +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set +# CONFIG_NF_CONNTRACK_PPTP is not set +# CONFIG_NF_CONNTRACK_SANE is not set +CONFIG_NF_CONNTRACK_SIP=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 is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +# CONFIG_NF_NAT_SNMP_BASIC is not set +CONFIG_NF_NAT_FTP=m +# CONFIG_NF_NAT_IRC is not set +CONFIG_NF_NAT_TFTP=m +# CONFIG_NF_NAT_AMANDA is not set +# CONFIG_NF_NAT_PPTP is not set +# CONFIG_NF_NAT_H323 is not set +CONFIG_NF_NAT_SIP=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 is not set +# 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 + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_FIFO=y +# CONFIG_NET_SCH_CLK_JIFFIES is not set +CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y +# CONFIG_NET_SCH_CLK_CPU is not set + +# +# 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_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=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_PEDIT=m +# CONFIG_NET_ACT_SIMP is not set +CONFIG_NET_CLS_IND=y +CONFIG_NET_ESTIMATOR=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_GUMSTIX=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 is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIDTL1 is not set +# CONFIG_BT_HCIBT3C is not set +# CONFIG_BT_HCIBLUECARD is not set +# CONFIG_BT_HCIBTUART is not set +# CONFIG_BT_HCIVHCI is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +# CONFIG_IEEE80211_SOFTMAC is not set +CONFIG_WIRELESS_EXT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_XIP is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_GUMSTIX=y +# 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_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=m +CONFIG_IDE_MAX_HWIFS=2 +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 + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=m +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +# 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 is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set + +# +# PCMCIA SCSI adapter support +# +# CONFIG_PCMCIA_AHA152X is not set +# CONFIG_PCMCIA_FDOMAIN is not set +# CONFIG_PCMCIA_NINJA_SCSI is not set +# CONFIG_PCMCIA_QLOGIC is not set +# CONFIG_PCMCIA_SYM53C500 is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_PATA_PCMCIA=m +# CONFIG_PATA_PLATFORM is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_IFB is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m + +# +# PHY device support +# +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +CONFIG_SMC91X=m +CONFIG_SMC91X_GUMSTIX=m +# CONFIG_DM9000 is not set +CONFIG_SMC911X=m +CONFIG_SMC911X_GUMSTIX=m + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_NET_WIRELESS_RTNETLINK is not set + +# +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_PCMCIA_NETWAVE is not set + +# +# Wireless 802.11 Frequency Hopping cards support +# +# CONFIG_PCMCIA_RAYCS is not set + +# +# Wireless 802.11b ISA/PCI cards support +# +# CONFIG_HERMES is not set +# CONFIG_ATMEL is not set + +# +# Wireless 802.11b Pcmcia/Cardbus cards support +# +# CONFIG_AIRO_CS is not set +# CONFIG_PCMCIA_WL3501 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_CS=m +CONFIG_NET_WIRELESS=y + +# +# PCMCIA network device support +# +# CONFIG_NET_PCMCIA is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=m +CONFIG_INPUT_TSDEV_SCREEN_X=240 +CONFIG_INPUT_TSDEV_SCREEN_Y=320 +CONFIG_INPUT_EVDEV=m +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +CONFIG_TOUCHSCREEN_UCB1400=m +# 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=y +# 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 is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_SA1100_WATCHDOG=m +# CONFIG_HW_RANDOM is not set +# 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 + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +CONFIG_I2C_PXA=m +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSC2003 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set + +# +# Dallas's 1-wire bus +# +CONFIG_W1=m + +# +# 1-wire Bus Masters +# +CONFIG_W1_MASTER_DS2482=m + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +# CONFIG_FB_PXA_ALPS_CDOLLAR is not set +# CONFIG_FB_PXA_SHARP_LQ043_PSP is not set +CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C=y +# CONFIG_FB_PXA_NONEOFTHEABOVE is not set +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=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=y +# 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 + +# +# Logo configuration +# +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +# CONFIG_SND_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 + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# SoC audio support +# +CONFIG_SND_SOC_AC97_BUS=y +CONFIG_SND_SOC=m + +# +# SoC Platforms +# + +# +# SoC Audio for the Atmel AT91 +# + +# +# SoC Audio for the Intel PXA2xx +# +CONFIG_SND_PXA2XX_SOC=m +CONFIG_SND_PXA2XX_SOC_AC97=m +CONFIG_SND_PXA2XX_SOC_GUMSTIX=m +CONFIG_SND_SOC_AC97_CODEC=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m + +# +# HID Devices +# +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set + +# +# USB support +# +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' +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=m +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_SELECTED=y +CONFIG_USB_GADGET_GUMSTIX=m +# CONFIG_USB_GADGET_NET2280 is not set +CONFIG_USB_GADGET_PXA2XX=y +CONFIG_USB_PXA2XX=m +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_GADGETFS is not set +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set + +# +# MMC/SD Card support +# +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=m +CONFIG_MMC_PXA=m + +# +# Real Time Clock +# +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=m + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=m +CONFIG_RTC_INTF_PROC=m +CONFIG_RTC_INTF_DEV=m +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set + +# +# RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_SA1100=m +# CONFIG_RTC_DRV_TEST is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# File systems +# +CONFIG_EXT2_FS=m +# 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_JBD_DEBUG is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_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 is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=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_RPCSEC_GSS_KRB5=m +# 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 +# CONFIG_9P_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=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 is not set + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_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_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHEDSTATS=y +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_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_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=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=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=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +CONFIG_CRYPTO_AES=m +# 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_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +# CONFIG_CRYPTO_CRC32C is not set +CONFIG_CRYPTO_CAMELLIA=m +# CONFIG_CRYPTO_TEST is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/defconfig-nofb b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/defconfig-nofb new file mode 100644 index 0000000000..22e0ef0413 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-connex/defconfig-nofb @@ -0,0 +1,1619 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.21 +# Thu Jan 31 10:02:15 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +# CONFIG_SYSFS_DEPRECATED 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 is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_ELF_CORE is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +# CONFIG_EPOLL is not set +# CONFIG_SHMEM is not set +CONFIG_SLAB=y +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_RT_MUTEXES=y +CONFIG_TINY_SHMEM=y +CONFIG_BASE_SMALL=0 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +CONFIG_ARCH_GUMSTIX=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_ARCH_GUMSTIX_ORIG is not set +CONFIG_ARCH_GUMSTIX_F=y +# CONFIG_ARCH_GUMSTIX_VERDEX is not set +CONFIG_PXA25x=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +# CONFIG_IWMMXT is not set +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +CONFIG_PROC_GPIO=m +# CONFIG_PROC_GPIO_DEBUG is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +# CONFIG_PCMCIA_IOCTL is not set + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=m + +# +# Kernel Features +# +CONFIG_PREEMPT=y +CONFIG_NO_IDLE_HZ=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_ALIGNMENT_TRAP=y +CONFIG_ALIGNMENT_HANDLING=0x2 + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +# CONFIG_PM_SYSFS_DEPRECATED is not set +CONFIG_APM_EMULATION=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +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=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_BRIDGE_NETFILTER is not set + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK_SUPPORT=y +# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +# CONFIG_NF_CT_PROTO_SCTP is not set +# CONFIG_NF_CONNTRACK_AMANDA is not set +CONFIG_NF_CONNTRACK_FTP=m +# CONFIG_NF_CONNTRACK_H323 is not set +# CONFIG_NF_CONNTRACK_IRC is not set +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set +# CONFIG_NF_CONNTRACK_PPTP is not set +# CONFIG_NF_CONNTRACK_SANE is not set +CONFIG_NF_CONNTRACK_SIP=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 is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +# CONFIG_NF_NAT_SNMP_BASIC is not set +CONFIG_NF_NAT_FTP=m +# CONFIG_NF_NAT_IRC is not set +CONFIG_NF_NAT_TFTP=m +# CONFIG_NF_NAT_AMANDA is not set +# CONFIG_NF_NAT_PPTP is not set +# CONFIG_NF_NAT_H323 is not set +CONFIG_NF_NAT_SIP=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 is not set +# 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 + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_FIFO=y +# CONFIG_NET_SCH_CLK_JIFFIES is not set +CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y +# CONFIG_NET_SCH_CLK_CPU is not set + +# +# 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_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=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_PEDIT=m +# CONFIG_NET_ACT_SIMP is not set +CONFIG_NET_CLS_IND=y +CONFIG_NET_ESTIMATOR=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_GUMSTIX=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 is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIDTL1 is not set +# CONFIG_BT_HCIBT3C is not set +# CONFIG_BT_HCIBLUECARD is not set +# CONFIG_BT_HCIBTUART is not set +# CONFIG_BT_HCIVHCI is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +# CONFIG_IEEE80211_SOFTMAC is not set +CONFIG_WIRELESS_EXT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_XIP is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_GUMSTIX=y +# 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_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=m +CONFIG_IDE_MAX_HWIFS=2 +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 + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=m +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +# 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 is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set + +# +# PCMCIA SCSI adapter support +# +# CONFIG_PCMCIA_AHA152X is not set +# CONFIG_PCMCIA_FDOMAIN is not set +# CONFIG_PCMCIA_NINJA_SCSI is not set +# CONFIG_PCMCIA_QLOGIC is not set +# CONFIG_PCMCIA_SYM53C500 is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_PATA_PCMCIA=m +# CONFIG_PATA_PLATFORM is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_IFB is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m + +# +# PHY device support +# +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +CONFIG_SMC91X=m +CONFIG_SMC91X_GUMSTIX=m +# CONFIG_DM9000 is not set +CONFIG_SMC911X=m +CONFIG_SMC911X_GUMSTIX=m + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_NET_WIRELESS_RTNETLINK is not set + +# +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_PCMCIA_NETWAVE is not set + +# +# Wireless 802.11 Frequency Hopping cards support +# +# CONFIG_PCMCIA_RAYCS is not set + +# +# Wireless 802.11b ISA/PCI cards support +# +# CONFIG_HERMES is not set +# CONFIG_ATMEL is not set + +# +# Wireless 802.11b Pcmcia/Cardbus cards support +# +# CONFIG_AIRO_CS is not set +# CONFIG_PCMCIA_WL3501 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_CS=m +CONFIG_NET_WIRELESS=y + +# +# PCMCIA network device support +# +# CONFIG_NET_PCMCIA is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=m +CONFIG_INPUT_TSDEV_SCREEN_X=240 +CONFIG_INPUT_TSDEV_SCREEN_Y=320 +CONFIG_INPUT_EVDEV=m +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +CONFIG_TOUCHSCREEN_UCB1400=m +# 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=y +# 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 is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_SA1100_WATCHDOG=m +# CONFIG_HW_RANDOM is not set +# 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 + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +CONFIG_I2C_PXA=m +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSC2003 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set + +# +# Dallas's 1-wire bus +# +CONFIG_W1=m + +# +# 1-wire Bus Masters +# +CONFIG_W1_MASTER_DS2482=m + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +#CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +#CONFIG_FB_CFB_FILLRECT=y +#CONFIG_FB_CFB_COPYAREA=y +#CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +#CONFIG_FB_PXA=y +# CONFIG_FB_PXA_ALPS_CDOLLAR is not set +# CONFIG_FB_PXA_SHARP_LQ043_PSP is not set +#CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C=y +# CONFIG_FB_PXA_NONEOFTHEABOVE is not set +#CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +#CONFIG_DUMMY_CONSOLE=y +#CONFIG_FRAMEBUFFER_CONSOLE=y +#CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=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=y +# 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 + +# +# Logo configuration +# +#CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +#CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +# CONFIG_SND_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 + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# SoC audio support +# +CONFIG_SND_SOC_AC97_BUS=y +CONFIG_SND_SOC=m + +# +# SoC Platforms +# + +# +# SoC Audio for the Atmel AT91 +# + +# +# SoC Audio for the Intel PXA2xx +# +CONFIG_SND_PXA2XX_SOC=m +CONFIG_SND_PXA2XX_SOC_AC97=m +CONFIG_SND_PXA2XX_SOC_GUMSTIX=m +CONFIG_SND_SOC_AC97_CODEC=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m + +# +# HID Devices +# +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set + +# +# USB support +# +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' +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=m +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_SELECTED=y +CONFIG_USB_GADGET_GUMSTIX=m +# CONFIG_USB_GADGET_NET2280 is not set +CONFIG_USB_GADGET_PXA2XX=y +CONFIG_USB_PXA2XX=m +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_GADGETFS is not set +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set + +# +# MMC/SD Card support +# +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=m +CONFIG_MMC_PXA=m + +# +# Real Time Clock +# +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=m + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=m +CONFIG_RTC_INTF_PROC=m +CONFIG_RTC_INTF_DEV=m +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set + +# +# RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_SA1100=m +# CONFIG_RTC_DRV_TEST is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# File systems +# +CONFIG_EXT2_FS=m +# 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_JBD_DEBUG is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_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 is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=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_RPCSEC_GSS_KRB5=m +# 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 +# CONFIG_9P_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=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 is not set + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_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_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHEDSTATS=y +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_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_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=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=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=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +CONFIG_CRYPTO_AES=m +# 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_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +# CONFIG_CRYPTO_CRC32C is not set +CONFIG_CRYPTO_CAMELLIA=m +# CONFIG_CRYPTO_TEST is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/.mtn2git_empty b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig new file mode 100644 index 0000000000..5a8728d26a --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig @@ -0,0 +1,1791 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.21 +# Thu Jan 31 08:45:53 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +# CONFIG_SYSFS_DEPRECATED 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 is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_ELF_CORE is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +# CONFIG_EPOLL is not set +CONFIG_SHMEM=y +CONFIG_SLAB=y +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +CONFIG_ARCH_GUMSTIX=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_ARCH_GUMSTIX_ORIG is not set +# CONFIG_ARCH_GUMSTIX_F is not set +CONFIG_ARCH_GUMSTIX_VERDEX=y +CONFIG_PXA27x=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +CONFIG_PROC_GPIO=m +# CONFIG_PROC_GPIO_DEBUG is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +# CONFIG_PCMCIA_IOCTL is not set + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=m + +# +# Kernel Features +# +# CONFIG_PREEMPT is not set +CONFIG_NO_IDLE_HZ=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_ALIGNMENT_TRAP=y +CONFIG_ALIGNMENT_HANDLING=0x2 + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +# CONFIG_PM_SYSFS_DEPRECATED is not set +CONFIG_APM_EMULATION=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +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=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_BRIDGE_NETFILTER is not set + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK_SUPPORT=y +# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +# CONFIG_NF_CT_PROTO_SCTP is not set +# CONFIG_NF_CONNTRACK_AMANDA is not set +CONFIG_NF_CONNTRACK_FTP=m +# CONFIG_NF_CONNTRACK_H323 is not set +# CONFIG_NF_CONNTRACK_IRC is not set +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set +# CONFIG_NF_CONNTRACK_PPTP is not set +# CONFIG_NF_CONNTRACK_SANE is not set +CONFIG_NF_CONNTRACK_SIP=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 is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +# CONFIG_NF_NAT_SNMP_BASIC is not set +CONFIG_NF_NAT_FTP=m +# CONFIG_NF_NAT_IRC is not set +CONFIG_NF_NAT_TFTP=m +# CONFIG_NF_NAT_AMANDA is not set +# CONFIG_NF_NAT_PPTP is not set +# CONFIG_NF_NAT_H323 is not set +CONFIG_NF_NAT_SIP=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 is not set +# 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 + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_FIFO=y +# CONFIG_NET_SCH_CLK_JIFFIES is not set +CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y +# CONFIG_NET_SCH_CLK_CPU is not set + +# +# 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_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=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_PEDIT=m +# CONFIG_NET_ACT_SIMP is not set +CONFIG_NET_CLS_IND=y +CONFIG_NET_ESTIMATOR=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_GUMSTIX=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 is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIDTL1 is not set +# CONFIG_BT_HCIBT3C is not set +# CONFIG_BT_HCIBLUECARD is not set +# CONFIG_BT_HCIBTUART is not set +# CONFIG_BT_HCIVHCI is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +# CONFIG_IEEE80211_SOFTMAC is not set +CONFIG_WIRELESS_EXT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_XIP is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_GUMSTIX=y +# 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_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +# 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 + +# +# ATA/ATAPI/MFM/RLL support +# +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 + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=m +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +# 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 is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set + +# +# PCMCIA SCSI adapter support +# +# CONFIG_PCMCIA_AHA152X is not set +# CONFIG_PCMCIA_FDOMAIN is not set +# CONFIG_PCMCIA_NINJA_SCSI is not set +# CONFIG_PCMCIA_QLOGIC is not set +# CONFIG_PCMCIA_SYM53C500 is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_PATA_PCMCIA=m +# CONFIG_PATA_PLATFORM is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_IFB is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m + +# +# PHY device support +# +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +CONFIG_SMC91X=m +CONFIG_SMC91X_GUMSTIX=m +# CONFIG_DM9000 is not set +CONFIG_SMC911X=m +CONFIG_SMC911X_GUMSTIX=m + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_NET_WIRELESS_RTNETLINK is not set + +# +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_PCMCIA_NETWAVE is not set + +# +# Wireless 802.11 Frequency Hopping cards support +# +# CONFIG_PCMCIA_RAYCS is not set + +# +# Wireless 802.11b ISA/PCI cards support +# +# CONFIG_HERMES is not set +# CONFIG_ATMEL is not set + +# +# Wireless 802.11b Pcmcia/Cardbus cards support +# +# CONFIG_AIRO_CS is not set +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_CS=m +CONFIG_NET_WIRELESS=y + +# +# PCMCIA network device support +# +# CONFIG_NET_PCMCIA is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=480 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=272 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=m +CONFIG_INPUT_TSDEV_SCREEN_X=480 +CONFIG_INPUT_TSDEV_SCREEN_Y=272 +CONFIG_INPUT_EVDEV=m +# 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 is not set +CONFIG_INPUT_MOUSE=y +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +CONFIG_TOUCHSCREEN_UCB1400=m +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_LIBPS2=m +# 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_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 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_SA1100_WATCHDOG=m + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# 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 + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +CONFIG_I2C_PXA=m +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +CONFIG_SENSORS_TSC2003=m +CONFIG_SENSORS_TSC2003_SYSFS=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 is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set + +# +# Dallas's 1-wire bus +# +CONFIG_W1=m + +# +# 1-wire Bus Masters +# +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +# CONFIG_FB_PXA_ALPS_CDOLLAR is not set +# CONFIG_FB_PXA_SHARP_LQ043_PSP is not set +CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C=y +# CONFIG_FB_PXA_NONEOFTHEABOVE is not set +CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=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=y +# 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 + +# +# Logo configuration +# +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +# CONFIG_SND_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 + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# SoC audio support +# +CONFIG_SND_SOC_AC97_BUS=y +CONFIG_SND_SOC=m + +# +# SoC Platforms +# + +# +# SoC Audio for the Atmel AT91 +# + +# +# SoC Audio for the Intel PXA2xx +# +CONFIG_SND_PXA2XX_SOC=m +CONFIG_SND_PXA2XX_SOC_AC97=m +CONFIG_SND_PXA2XX_SOC_GUMSTIX=m +CONFIG_SND_SOC_AC97_CODEC=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m + +# +# HID Devices +# +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=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 + +# +# 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 Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_ACECAD is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_TOUCHSCREEN is not set +# CONFIG_USB_YEALINK is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set +# CONFIG_USB_ATI_REMOTE2 is not set +# CONFIG_USB_KEYSPAN_REMOTE is not set +# CONFIG_USB_APPLETOUCH is not set +# CONFIG_USB_GTCO is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=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_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +CONFIG_USB_SERIAL_CP2101=m +# 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=m +# 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_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 +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 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 + +# +# MMC/SD Card support +# +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=m +CONFIG_MMC_PXA=m + +# +# Real Time Clock +# +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=m + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=m +CONFIG_RTC_INTF_PROC=m +CONFIG_RTC_INTF_DEV=m +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set + +# +# RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_SA1100=m +# CONFIG_RTC_DRV_TEST is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# File systems +# +CONFIG_EXT2_FS=m +# 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_JBD_DEBUG is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_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 is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=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_RPCSEC_GSS_KRB5=m +# 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 +# CONFIG_9P_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=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 is not set + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_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_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +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=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=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +CONFIG_CRYPTO_AES=m +# 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_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +# CONFIG_CRYPTO_CRC32C is not set +CONFIG_CRYPTO_CAMELLIA=m +# CONFIG_CRYPTO_TEST is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig-nofb b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig-nofb new file mode 100644 index 0000000000..0634a90a94 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig-nofb @@ -0,0 +1,1791 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.21 +# Thu Jan 31 08:45:53 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +# CONFIG_SYSFS_DEPRECATED 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 is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_ELF_CORE is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +# CONFIG_EPOLL is not set +CONFIG_SHMEM=y +CONFIG_SLAB=y +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +CONFIG_ARCH_GUMSTIX=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_ARCH_GUMSTIX_ORIG is not set +# CONFIG_ARCH_GUMSTIX_F is not set +CONFIG_ARCH_GUMSTIX_VERDEX=y +CONFIG_PXA27x=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +CONFIG_PROC_GPIO=m +# CONFIG_PROC_GPIO_DEBUG is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +# CONFIG_PCMCIA_IOCTL is not set + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=m + +# +# Kernel Features +# +# CONFIG_PREEMPT is not set +CONFIG_NO_IDLE_HZ=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_ALIGNMENT_TRAP=y +CONFIG_ALIGNMENT_HANDLING=0x2 + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +# CONFIG_PM_SYSFS_DEPRECATED is not set +CONFIG_APM_EMULATION=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +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=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_BRIDGE_NETFILTER is not set + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK_SUPPORT=y +# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +# CONFIG_NF_CT_PROTO_SCTP is not set +# CONFIG_NF_CONNTRACK_AMANDA is not set +CONFIG_NF_CONNTRACK_FTP=m +# CONFIG_NF_CONNTRACK_H323 is not set +# CONFIG_NF_CONNTRACK_IRC is not set +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set +# CONFIG_NF_CONNTRACK_PPTP is not set +# CONFIG_NF_CONNTRACK_SANE is not set +CONFIG_NF_CONNTRACK_SIP=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 is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +# CONFIG_NF_NAT_SNMP_BASIC is not set +CONFIG_NF_NAT_FTP=m +# CONFIG_NF_NAT_IRC is not set +CONFIG_NF_NAT_TFTP=m +# CONFIG_NF_NAT_AMANDA is not set +# CONFIG_NF_NAT_PPTP is not set +# CONFIG_NF_NAT_H323 is not set +CONFIG_NF_NAT_SIP=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 is not set +# 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 + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_FIFO=y +# CONFIG_NET_SCH_CLK_JIFFIES is not set +CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y +# CONFIG_NET_SCH_CLK_CPU is not set + +# +# 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_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=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_PEDIT=m +# CONFIG_NET_ACT_SIMP is not set +CONFIG_NET_CLS_IND=y +CONFIG_NET_ESTIMATOR=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_GUMSTIX=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 is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIDTL1 is not set +# CONFIG_BT_HCIBT3C is not set +# CONFIG_BT_HCIBLUECARD is not set +# CONFIG_BT_HCIBTUART is not set +# CONFIG_BT_HCIVHCI is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +# CONFIG_IEEE80211_SOFTMAC is not set +CONFIG_WIRELESS_EXT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +# CONFIG_MTD_CFI_I2 is not set +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_XIP is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_GUMSTIX=y +# 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_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +# 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 + +# +# ATA/ATAPI/MFM/RLL support +# +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 + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=m +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +# 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 is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set + +# +# PCMCIA SCSI adapter support +# +# CONFIG_PCMCIA_AHA152X is not set +# CONFIG_PCMCIA_FDOMAIN is not set +# CONFIG_PCMCIA_NINJA_SCSI is not set +# CONFIG_PCMCIA_QLOGIC is not set +# CONFIG_PCMCIA_SYM53C500 is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_PATA_PCMCIA=m +# CONFIG_PATA_PLATFORM is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_IFB is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m + +# +# PHY device support +# +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +CONFIG_SMC91X=m +CONFIG_SMC91X_GUMSTIX=m +# CONFIG_DM9000 is not set +CONFIG_SMC911X=m +CONFIG_SMC911X_GUMSTIX=m + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_NET_WIRELESS_RTNETLINK is not set + +# +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_PCMCIA_NETWAVE is not set + +# +# Wireless 802.11 Frequency Hopping cards support +# +# CONFIG_PCMCIA_RAYCS is not set + +# +# Wireless 802.11b ISA/PCI cards support +# +# CONFIG_HERMES is not set +# CONFIG_ATMEL is not set + +# +# Wireless 802.11b Pcmcia/Cardbus cards support +# +# CONFIG_AIRO_CS is not set +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_CS=m +CONFIG_NET_WIRELESS=y + +# +# PCMCIA network device support +# +# CONFIG_NET_PCMCIA is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=480 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=272 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_TSDEV=m +CONFIG_INPUT_TSDEV_SCREEN_X=480 +CONFIG_INPUT_TSDEV_SCREEN_Y=272 +CONFIG_INPUT_EVDEV=m +# 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 is not set +CONFIG_INPUT_MOUSE=y +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +CONFIG_TOUCHSCREEN_UCB1400=m +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_LIBPS2=m +# 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_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 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_SA1100_WATCHDOG=m + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# 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 + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +CONFIG_I2C_PXA=m +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +CONFIG_SENSORS_TSC2003=m +CONFIG_SENSORS_TSC2003_SYSFS=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 is not set +CONFIG_SPI_PXA2XX=m + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set + +# +# Dallas's 1-wire bus +# +CONFIG_W1=m + +# +# 1-wire Bus Masters +# +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set + +# +# Hardware Monitoring support +# +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set + +# +# Misc devices +# + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +#CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +#CONFIG_FB_CFB_FILLRECT=y +#CONFIG_FB_CFB_COPYAREA=y +#CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +#CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +#CONFIG_FB_PXA=y +# CONFIG_FB_PXA_ALPS_CDOLLAR is not set +# CONFIG_FB_PXA_SHARP_LQ043_PSP is not set +#CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C=y +# CONFIG_FB_PXA_NONEOFTHEABOVE is not set +#CONFIG_FB_PXA_PARAMETERS=y +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +#CONFIG_DUMMY_CONSOLE=y +#CONFIG_FRAMEBUFFER_CONSOLE=y +#CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=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=y +# 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 + +# +# Logo configuration +# +#CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +#CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +# CONFIG_SND_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 + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# SoC audio support +# +CONFIG_SND_SOC_AC97_BUS=y +CONFIG_SND_SOC=m + +# +# SoC Platforms +# + +# +# SoC Audio for the Atmel AT91 +# + +# +# SoC Audio for the Intel PXA2xx +# +CONFIG_SND_PXA2XX_SOC=m +CONFIG_SND_PXA2XX_SOC_AC97=m +CONFIG_SND_PXA2XX_SOC_GUMSTIX=m +CONFIG_SND_SOC_AC97_CODEC=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m + +# +# HID Devices +# +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=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 + +# +# 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 Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_ACECAD is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_TOUCHSCREEN is not set +# CONFIG_USB_YEALINK is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set +# CONFIG_USB_ATI_REMOTE2 is not set +# CONFIG_USB_KEYSPAN_REMOTE is not set +# CONFIG_USB_APPLETOUCH is not set +# CONFIG_USB_GTCO is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=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_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +CONFIG_USB_SERIAL_CP2101=m +# 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=m +# 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_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 +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 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 + +# +# MMC/SD Card support +# +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=m +CONFIG_MMC_PXA=m + +# +# Real Time Clock +# +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=m + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=m +CONFIG_RTC_INTF_PROC=m +CONFIG_RTC_INTF_DEV=m +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set + +# +# RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_SA1100=m +# CONFIG_RTC_DRV_TEST is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# File systems +# +CONFIG_EXT2_FS=m +# 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_JBD_DEBUG is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_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 is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=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_RPCSEC_GSS_KRB5=m +# 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 +# CONFIG_9P_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=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 is not set + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_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_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +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=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=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +CONFIG_CRYPTO_AES=m +# 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_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +# CONFIG_CRYPTO_CRC32C is not set +CONFIG_CRYPTO_CAMELLIA=m +# CONFIG_CRYPTO_TEST is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-fb-logo.patch b/packages/linux/gumstix-kernel-2.6.21/gumstix-fb-logo.patch new file mode 100644 index 0000000000..436b3b2e08 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/gumstix-fb-logo.patch @@ -0,0 +1,10455 @@ +Index: linux-2.6.21gum/drivers/video/logo/logo_linux_clut224.ppm +=================================================================== +--- linux-2.6.21gum.orig/drivers/video/logo/logo_linux_clut224.ppm ++++ linux-2.6.21gum/drivers/video/logo/logo_linux_clut224.ppm +@@ -1,1604 +1,8848 @@ + P3 +-# Standard 224-color Linux logo +-80 80 ++480 145 + 255 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 6 6 6 10 10 10 10 10 10 +- 10 10 10 6 6 6 6 6 6 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 6 6 6 10 10 10 14 14 14 +- 22 22 22 26 26 26 30 30 30 34 34 34 +- 30 30 30 30 30 30 26 26 26 18 18 18 +- 14 14 14 10 10 10 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 1 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 14 14 14 26 26 26 42 42 42 +- 54 54 54 66 66 66 78 78 78 78 78 78 +- 78 78 78 74 74 74 66 66 66 54 54 54 +- 42 42 42 26 26 26 18 18 18 10 10 10 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 1 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 22 22 22 42 42 42 66 66 66 86 86 86 +- 66 66 66 38 38 38 38 38 38 22 22 22 +- 26 26 26 34 34 34 54 54 54 66 66 66 +- 86 86 86 70 70 70 46 46 46 26 26 26 +- 14 14 14 6 6 6 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 1 0 0 1 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 10 10 10 26 26 26 +- 50 50 50 82 82 82 58 58 58 6 6 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 6 6 6 54 54 54 86 86 86 66 66 66 +- 38 38 38 18 18 18 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 6 6 6 22 22 22 50 50 50 +- 78 78 78 34 34 34 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 6 6 6 70 70 70 +- 78 78 78 46 46 46 22 22 22 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 1 0 0 1 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 18 18 18 42 42 42 82 82 82 +- 26 26 26 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 14 14 14 +- 46 46 46 34 34 34 6 6 6 2 2 6 +- 42 42 42 78 78 78 42 42 42 18 18 18 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 1 0 0 0 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 10 10 10 30 30 30 66 66 66 58 58 58 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 26 26 26 +- 86 86 86 101 101 101 46 46 46 10 10 10 +- 2 2 6 58 58 58 70 70 70 34 34 34 +- 10 10 10 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 1 0 0 1 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 14 14 14 42 42 42 86 86 86 10 10 10 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 30 30 30 +- 94 94 94 94 94 94 58 58 58 26 26 26 +- 2 2 6 6 6 6 78 78 78 54 54 54 +- 22 22 22 6 6 6 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 22 22 22 62 62 62 62 62 62 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 26 26 26 +- 54 54 54 38 38 38 18 18 18 10 10 10 +- 2 2 6 2 2 6 34 34 34 82 82 82 +- 38 38 38 14 14 14 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 1 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 30 30 30 78 78 78 30 30 30 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 10 10 10 +- 10 10 10 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 78 78 78 +- 50 50 50 18 18 18 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 1 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 38 38 38 86 86 86 14 14 14 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 54 54 54 +- 66 66 66 26 26 26 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 1 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 42 42 42 82 82 82 2 2 6 2 2 6 +- 2 2 6 6 6 6 10 10 10 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 6 6 6 +- 14 14 14 10 10 10 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 18 18 18 +- 82 82 82 34 34 34 10 10 10 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 1 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 46 46 46 86 86 86 2 2 6 2 2 6 +- 6 6 6 6 6 6 22 22 22 34 34 34 +- 6 6 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 18 18 18 34 34 34 +- 10 10 10 50 50 50 22 22 22 2 2 6 +- 2 2 6 2 2 6 2 2 6 10 10 10 +- 86 86 86 42 42 42 14 14 14 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 1 0 0 1 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 46 46 46 86 86 86 2 2 6 2 2 6 +- 38 38 38 116 116 116 94 94 94 22 22 22 +- 22 22 22 2 2 6 2 2 6 2 2 6 +- 14 14 14 86 86 86 138 138 138 162 162 162 +-154 154 154 38 38 38 26 26 26 6 6 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 86 86 86 46 46 46 14 14 14 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 46 46 46 86 86 86 2 2 6 14 14 14 +-134 134 134 198 198 198 195 195 195 116 116 116 +- 10 10 10 2 2 6 2 2 6 6 6 6 +-101 98 89 187 187 187 210 210 210 218 218 218 +-214 214 214 134 134 134 14 14 14 6 6 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 86 86 86 50 50 50 18 18 18 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 1 0 0 0 +- 0 0 1 0 0 1 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 46 46 46 86 86 86 2 2 6 54 54 54 +-218 218 218 195 195 195 226 226 226 246 246 246 +- 58 58 58 2 2 6 2 2 6 30 30 30 +-210 210 210 253 253 253 174 174 174 123 123 123 +-221 221 221 234 234 234 74 74 74 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 70 70 70 58 58 58 22 22 22 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 46 46 46 82 82 82 2 2 6 106 106 106 +-170 170 170 26 26 26 86 86 86 226 226 226 +-123 123 123 10 10 10 14 14 14 46 46 46 +-231 231 231 190 190 190 6 6 6 70 70 70 +- 90 90 90 238 238 238 158 158 158 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 70 70 70 58 58 58 22 22 22 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 1 0 0 0 +- 0 0 1 0 0 1 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 42 42 42 86 86 86 6 6 6 116 116 116 +-106 106 106 6 6 6 70 70 70 149 149 149 +-128 128 128 18 18 18 38 38 38 54 54 54 +-221 221 221 106 106 106 2 2 6 14 14 14 +- 46 46 46 190 190 190 198 198 198 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 74 74 74 62 62 62 22 22 22 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 1 0 0 0 +- 0 0 1 0 0 0 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 42 42 42 94 94 94 14 14 14 101 101 101 +-128 128 128 2 2 6 18 18 18 116 116 116 +-118 98 46 121 92 8 121 92 8 98 78 10 +-162 162 162 106 106 106 2 2 6 2 2 6 +- 2 2 6 195 195 195 195 195 195 6 6 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 74 74 74 62 62 62 22 22 22 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 1 0 0 1 +- 0 0 1 0 0 0 0 0 1 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 38 38 38 90 90 90 14 14 14 58 58 58 +-210 210 210 26 26 26 54 38 6 154 114 10 +-226 170 11 236 186 11 225 175 15 184 144 12 +-215 174 15 175 146 61 37 26 9 2 2 6 +- 70 70 70 246 246 246 138 138 138 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 70 70 70 66 66 66 26 26 26 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 38 38 38 86 86 86 14 14 14 10 10 10 +-195 195 195 188 164 115 192 133 9 225 175 15 +-239 182 13 234 190 10 232 195 16 232 200 30 +-245 207 45 241 208 19 232 195 16 184 144 12 +-218 194 134 211 206 186 42 42 42 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 50 50 50 74 74 74 30 30 30 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 34 34 34 86 86 86 14 14 14 2 2 6 +-121 87 25 192 133 9 219 162 10 239 182 13 +-236 186 11 232 195 16 241 208 19 244 214 54 +-246 218 60 246 218 38 246 215 20 241 208 19 +-241 208 19 226 184 13 121 87 25 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 50 50 50 82 82 82 34 34 34 10 10 10 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 34 34 34 82 82 82 30 30 30 61 42 6 +-180 123 7 206 145 10 230 174 11 239 182 13 +-234 190 10 238 202 15 241 208 19 246 218 74 +-246 218 38 246 215 20 246 215 20 246 215 20 +-226 184 13 215 174 15 184 144 12 6 6 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 26 26 26 94 94 94 42 42 42 14 14 14 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 30 30 30 78 78 78 50 50 50 104 69 6 +-192 133 9 216 158 10 236 178 12 236 186 11 +-232 195 16 241 208 19 244 214 54 245 215 43 +-246 215 20 246 215 20 241 208 19 198 155 10 +-200 144 11 216 158 10 156 118 10 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 6 6 6 90 90 90 54 54 54 18 18 18 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 30 30 30 78 78 78 46 46 46 22 22 22 +-137 92 6 210 162 10 239 182 13 238 190 10 +-238 202 15 241 208 19 246 215 20 246 215 20 +-241 208 19 203 166 17 185 133 11 210 150 10 +-216 158 10 210 150 10 102 78 10 2 2 6 +- 6 6 6 54 54 54 14 14 14 2 2 6 +- 2 2 6 62 62 62 74 74 74 30 30 30 +- 10 10 10 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 34 34 34 78 78 78 50 50 50 6 6 6 +- 94 70 30 139 102 15 190 146 13 226 184 13 +-232 200 30 232 195 16 215 174 15 190 146 13 +-168 122 10 192 133 9 210 150 10 213 154 11 +-202 150 34 182 157 106 101 98 89 2 2 6 +- 2 2 6 78 78 78 116 116 116 58 58 58 +- 2 2 6 22 22 22 90 90 90 46 46 46 +- 18 18 18 6 6 6 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 38 38 38 86 86 86 50 50 50 6 6 6 +-128 128 128 174 154 114 156 107 11 168 122 10 +-198 155 10 184 144 12 197 138 11 200 144 11 +-206 145 10 206 145 10 197 138 11 188 164 115 +-195 195 195 198 198 198 174 174 174 14 14 14 +- 2 2 6 22 22 22 116 116 116 116 116 116 +- 22 22 22 2 2 6 74 74 74 70 70 70 +- 30 30 30 10 10 10 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 18 18 18 +- 50 50 50 101 101 101 26 26 26 10 10 10 +-138 138 138 190 190 190 174 154 114 156 107 11 +-197 138 11 200 144 11 197 138 11 192 133 9 +-180 123 7 190 142 34 190 178 144 187 187 187 +-202 202 202 221 221 221 214 214 214 66 66 66 +- 2 2 6 2 2 6 50 50 50 62 62 62 +- 6 6 6 2 2 6 10 10 10 90 90 90 +- 50 50 50 18 18 18 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 10 10 10 34 34 34 +- 74 74 74 74 74 74 2 2 6 6 6 6 +-144 144 144 198 198 198 190 190 190 178 166 146 +-154 121 60 156 107 11 156 107 11 168 124 44 +-174 154 114 187 187 187 190 190 190 210 210 210 +-246 246 246 253 253 253 253 253 253 182 182 182 +- 6 6 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 62 62 62 +- 74 74 74 34 34 34 14 14 14 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 10 10 10 22 22 22 54 54 54 +- 94 94 94 18 18 18 2 2 6 46 46 46 +-234 234 234 221 221 221 190 190 190 190 190 190 +-190 190 190 187 187 187 187 187 187 190 190 190 +-190 190 190 195 195 195 214 214 214 242 242 242 +-253 253 253 253 253 253 253 253 253 253 253 253 +- 82 82 82 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 14 14 14 +- 86 86 86 54 54 54 22 22 22 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 18 18 18 46 46 46 90 90 90 +- 46 46 46 18 18 18 6 6 6 182 182 182 +-253 253 253 246 246 246 206 206 206 190 190 190 +-190 190 190 190 190 190 190 190 190 190 190 190 +-206 206 206 231 231 231 250 250 250 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-202 202 202 14 14 14 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 42 42 42 86 86 86 42 42 42 18 18 18 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 14 14 14 38 38 38 74 74 74 66 66 66 +- 2 2 6 6 6 6 90 90 90 250 250 250 +-253 253 253 253 253 253 238 238 238 198 198 198 +-190 190 190 190 190 190 195 195 195 221 221 221 +-246 246 246 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 82 82 82 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 78 78 78 70 70 70 34 34 34 +- 14 14 14 6 6 6 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 34 34 34 66 66 66 78 78 78 6 6 6 +- 2 2 6 18 18 18 218 218 218 253 253 253 +-253 253 253 253 253 253 253 253 253 246 246 246 +-226 226 226 231 231 231 246 246 246 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 178 178 178 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 18 18 18 90 90 90 62 62 62 +- 30 30 30 10 10 10 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 10 10 10 26 26 26 +- 58 58 58 90 90 90 18 18 18 2 2 6 +- 2 2 6 110 110 110 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-250 250 250 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 231 231 231 18 18 18 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 18 18 18 94 94 94 +- 54 54 54 26 26 26 10 10 10 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 6 6 6 22 22 22 50 50 50 +- 90 90 90 26 26 26 2 2 6 2 2 6 +- 14 14 14 195 195 195 250 250 250 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-250 250 250 242 242 242 54 54 54 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 38 38 38 +- 86 86 86 50 50 50 22 22 22 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 14 14 14 38 38 38 82 82 82 +- 34 34 34 2 2 6 2 2 6 2 2 6 +- 42 42 42 195 195 195 246 246 246 253 253 253 +-253 253 253 253 253 253 253 253 253 250 250 250 +-242 242 242 242 242 242 250 250 250 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 250 250 250 246 246 246 238 238 238 +-226 226 226 231 231 231 101 101 101 6 6 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 38 38 38 82 82 82 42 42 42 14 14 14 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 10 10 10 26 26 26 62 62 62 66 66 66 +- 2 2 6 2 2 6 2 2 6 6 6 6 +- 70 70 70 170 170 170 206 206 206 234 234 234 +-246 246 246 250 250 250 250 250 250 238 238 238 +-226 226 226 231 231 231 238 238 238 250 250 250 +-250 250 250 250 250 250 246 246 246 231 231 231 +-214 214 214 206 206 206 202 202 202 202 202 202 +-198 198 198 202 202 202 182 182 182 18 18 18 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 62 62 62 66 66 66 30 30 30 +- 10 10 10 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 14 14 14 42 42 42 82 82 82 18 18 18 +- 2 2 6 2 2 6 2 2 6 10 10 10 +- 94 94 94 182 182 182 218 218 218 242 242 242 +-250 250 250 253 253 253 253 253 253 250 250 250 +-234 234 234 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 246 246 246 +-238 238 238 226 226 226 210 210 210 202 202 202 +-195 195 195 195 195 195 210 210 210 158 158 158 +- 6 6 6 14 14 14 50 50 50 14 14 14 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 6 6 6 86 86 86 46 46 46 +- 18 18 18 6 6 6 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 22 22 22 54 54 54 70 70 70 2 2 6 +- 2 2 6 10 10 10 2 2 6 22 22 22 +-166 166 166 231 231 231 250 250 250 253 253 253 +-253 253 253 253 253 253 253 253 253 250 250 250 +-242 242 242 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 246 246 246 +-231 231 231 206 206 206 198 198 198 226 226 226 +- 94 94 94 2 2 6 6 6 6 38 38 38 +- 30 30 30 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 62 62 62 66 66 66 +- 26 26 26 10 10 10 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 30 30 30 74 74 74 50 50 50 2 2 6 +- 26 26 26 26 26 26 2 2 6 106 106 106 +-238 238 238 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 246 246 246 218 218 218 202 202 202 +-210 210 210 14 14 14 2 2 6 2 2 6 +- 30 30 30 22 22 22 2 2 6 2 2 6 +- 2 2 6 2 2 6 18 18 18 86 86 86 +- 42 42 42 14 14 14 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 42 42 42 90 90 90 22 22 22 2 2 6 +- 42 42 42 2 2 6 18 18 18 218 218 218 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 250 250 250 221 221 221 +-218 218 218 101 101 101 2 2 6 14 14 14 +- 18 18 18 38 38 38 10 10 10 2 2 6 +- 2 2 6 2 2 6 2 2 6 78 78 78 +- 58 58 58 22 22 22 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 18 18 18 +- 54 54 54 82 82 82 2 2 6 26 26 26 +- 22 22 22 2 2 6 123 123 123 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 250 250 250 +-238 238 238 198 198 198 6 6 6 38 38 38 +- 58 58 58 26 26 26 38 38 38 2 2 6 +- 2 2 6 2 2 6 2 2 6 46 46 46 +- 78 78 78 30 30 30 10 10 10 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 10 10 10 30 30 30 +- 74 74 74 58 58 58 2 2 6 42 42 42 +- 2 2 6 22 22 22 231 231 231 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 250 250 250 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 246 246 246 46 46 46 38 38 38 +- 42 42 42 14 14 14 38 38 38 14 14 14 +- 2 2 6 2 2 6 2 2 6 6 6 6 +- 86 86 86 46 46 46 14 14 14 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 6 6 6 14 14 14 42 42 42 +- 90 90 90 18 18 18 18 18 18 26 26 26 +- 2 2 6 116 116 116 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 250 250 250 238 238 238 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 94 94 94 6 6 6 +- 2 2 6 2 2 6 10 10 10 34 34 34 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 74 74 74 58 58 58 22 22 22 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 10 10 10 26 26 26 66 66 66 +- 82 82 82 2 2 6 38 38 38 6 6 6 +- 14 14 14 210 210 210 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 246 246 246 242 242 242 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 144 144 144 2 2 6 +- 2 2 6 2 2 6 2 2 6 46 46 46 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 42 42 42 74 74 74 30 30 30 10 10 10 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 14 14 14 42 42 42 90 90 90 +- 26 26 26 6 6 6 42 42 42 2 2 6 +- 74 74 74 250 250 250 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 242 242 242 242 242 242 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 182 182 182 2 2 6 +- 2 2 6 2 2 6 2 2 6 46 46 46 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 10 10 10 86 86 86 38 38 38 10 10 10 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 10 10 10 26 26 26 66 66 66 82 82 82 +- 2 2 6 22 22 22 18 18 18 2 2 6 +-149 149 149 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 234 234 234 242 242 242 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 206 206 206 2 2 6 +- 2 2 6 2 2 6 2 2 6 38 38 38 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 6 6 6 86 86 86 46 46 46 14 14 14 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 18 18 18 46 46 46 86 86 86 18 18 18 +- 2 2 6 34 34 34 10 10 10 6 6 6 +-210 210 210 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 234 234 234 242 242 242 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 221 221 221 6 6 6 +- 2 2 6 2 2 6 6 6 6 30 30 30 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 82 82 82 54 54 54 18 18 18 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 26 26 26 66 66 66 62 62 62 2 2 6 +- 2 2 6 38 38 38 10 10 10 26 26 26 +-238 238 238 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 231 231 231 238 238 238 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 231 231 231 6 6 6 +- 2 2 6 2 2 6 10 10 10 30 30 30 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 66 66 66 58 58 58 22 22 22 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 38 38 38 78 78 78 6 6 6 2 2 6 +- 2 2 6 46 46 46 14 14 14 42 42 42 +-246 246 246 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 231 231 231 242 242 242 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 234 234 234 10 10 10 +- 2 2 6 2 2 6 22 22 22 14 14 14 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 66 66 66 62 62 62 22 22 22 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 18 18 18 +- 50 50 50 74 74 74 2 2 6 2 2 6 +- 14 14 14 70 70 70 34 34 34 62 62 62 +-250 250 250 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 231 231 231 246 246 246 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 234 234 234 14 14 14 +- 2 2 6 2 2 6 30 30 30 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 66 66 66 62 62 62 22 22 22 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 18 18 18 +- 54 54 54 62 62 62 2 2 6 2 2 6 +- 2 2 6 30 30 30 46 46 46 70 70 70 +-250 250 250 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 231 231 231 246 246 246 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 226 226 226 10 10 10 +- 2 2 6 6 6 6 30 30 30 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 66 66 66 58 58 58 22 22 22 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 22 22 22 +- 58 58 58 62 62 62 2 2 6 2 2 6 +- 2 2 6 2 2 6 30 30 30 78 78 78 +-250 250 250 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 231 231 231 246 246 246 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 206 206 206 2 2 6 +- 22 22 22 34 34 34 18 14 6 22 22 22 +- 26 26 26 18 18 18 6 6 6 2 2 6 +- 2 2 6 82 82 82 54 54 54 18 18 18 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 26 26 26 +- 62 62 62 106 106 106 74 54 14 185 133 11 +-210 162 10 121 92 8 6 6 6 62 62 62 +-238 238 238 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 231 231 231 246 246 246 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 158 158 158 18 18 18 +- 14 14 14 2 2 6 2 2 6 2 2 6 +- 6 6 6 18 18 18 66 66 66 38 38 38 +- 6 6 6 94 94 94 50 50 50 18 18 18 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 10 10 10 10 10 10 18 18 18 38 38 38 +- 78 78 78 142 134 106 216 158 10 242 186 14 +-246 190 14 246 190 14 156 118 10 10 10 10 +- 90 90 90 238 238 238 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 231 231 231 250 250 250 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 246 230 190 +-238 204 91 238 204 91 181 142 44 37 26 9 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 38 38 38 46 46 46 +- 26 26 26 106 106 106 54 54 54 18 18 18 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 6 6 6 14 14 14 22 22 22 +- 30 30 30 38 38 38 50 50 50 70 70 70 +-106 106 106 190 142 34 226 170 11 242 186 14 +-246 190 14 246 190 14 246 190 14 154 114 10 +- 6 6 6 74 74 74 226 226 226 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 231 231 231 250 250 250 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 228 184 62 +-241 196 14 241 208 19 232 195 16 38 30 10 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 6 6 6 30 30 30 26 26 26 +-203 166 17 154 142 90 66 66 66 26 26 26 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 18 18 18 38 38 38 58 58 58 +- 78 78 78 86 86 86 101 101 101 123 123 123 +-175 146 61 210 150 10 234 174 13 246 186 14 +-246 190 14 246 190 14 246 190 14 238 190 10 +-102 78 10 2 2 6 46 46 46 198 198 198 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 234 234 234 242 242 242 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 224 178 62 +-242 186 14 241 196 14 210 166 10 22 18 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 6 6 6 121 92 8 +-238 202 15 232 195 16 82 82 82 34 34 34 +- 10 10 10 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 14 14 14 38 38 38 70 70 70 154 122 46 +-190 142 34 200 144 11 197 138 11 197 138 11 +-213 154 11 226 170 11 242 186 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-225 175 15 46 32 6 2 2 6 22 22 22 +-158 158 158 250 250 250 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 250 250 250 242 242 242 224 178 62 +-239 182 13 236 186 11 213 154 11 46 32 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 61 42 6 225 175 15 +-238 190 10 236 186 11 112 100 78 42 42 42 +- 14 14 14 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 22 22 22 54 54 54 154 122 46 213 154 11 +-226 170 11 230 174 11 226 170 11 226 170 11 +-236 178 12 242 186 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-241 196 14 184 144 12 10 10 10 2 2 6 +- 6 6 6 116 116 116 242 242 242 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 231 231 231 198 198 198 214 170 54 +-236 178 12 236 178 12 210 150 10 137 92 6 +- 18 14 6 2 2 6 2 2 6 2 2 6 +- 6 6 6 70 47 6 200 144 11 236 178 12 +-239 182 13 239 182 13 124 112 88 58 58 58 +- 22 22 22 6 6 6 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 30 30 30 70 70 70 180 133 36 226 170 11 +-239 182 13 242 186 14 242 186 14 246 186 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 232 195 16 98 70 6 2 2 6 +- 2 2 6 2 2 6 66 66 66 221 221 221 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 206 206 206 198 198 198 214 166 58 +-230 174 11 230 174 11 216 158 10 192 133 9 +-163 110 8 116 81 8 102 78 10 116 81 8 +-167 114 7 197 138 11 226 170 11 239 182 13 +-242 186 14 242 186 14 162 146 94 78 78 78 +- 34 34 34 14 14 14 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 30 30 30 78 78 78 190 142 34 226 170 11 +-239 182 13 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 241 196 14 203 166 17 22 18 6 +- 2 2 6 2 2 6 2 2 6 38 38 38 +-218 218 218 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-250 250 250 206 206 206 198 198 198 202 162 69 +-226 170 11 236 178 12 224 166 10 210 150 10 +-200 144 11 197 138 11 192 133 9 197 138 11 +-210 150 10 226 170 11 242 186 14 246 190 14 +-246 190 14 246 186 14 225 175 15 124 112 88 +- 62 62 62 30 30 30 14 14 14 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 30 30 30 78 78 78 174 135 50 224 166 10 +-239 182 13 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 241 196 14 139 102 15 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 78 78 78 250 250 250 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-250 250 250 214 214 214 198 198 198 190 150 46 +-219 162 10 236 178 12 234 174 13 224 166 10 +-216 158 10 213 154 11 213 154 11 216 158 10 +-226 170 11 239 182 13 246 190 14 246 190 14 +-246 190 14 246 190 14 242 186 14 206 162 42 +-101 101 101 58 58 58 30 30 30 14 14 14 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 30 30 30 74 74 74 174 135 50 216 158 10 +-236 178 12 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 241 196 14 226 184 13 +- 61 42 6 2 2 6 2 2 6 2 2 6 +- 22 22 22 238 238 238 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 226 226 226 187 187 187 180 133 36 +-216 158 10 236 178 12 239 182 13 236 178 12 +-230 174 11 226 170 11 226 170 11 230 174 11 +-236 178 12 242 186 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 186 14 239 182 13 +-206 162 42 106 106 106 66 66 66 34 34 34 +- 14 14 14 6 6 6 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 26 26 26 70 70 70 163 133 67 213 154 11 +-236 178 12 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 241 196 14 +-190 146 13 18 14 6 2 2 6 2 2 6 +- 46 46 46 246 246 246 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 221 221 221 86 86 86 156 107 11 +-216 158 10 236 178 12 242 186 14 246 186 14 +-242 186 14 239 182 13 239 182 13 242 186 14 +-242 186 14 246 186 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-242 186 14 225 175 15 142 122 72 66 66 66 +- 30 30 30 10 10 10 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 26 26 26 70 70 70 163 133 67 210 150 10 +-236 178 12 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-232 195 16 121 92 8 34 34 34 106 106 106 +-221 221 221 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-242 242 242 82 82 82 18 14 6 163 110 8 +-216 158 10 236 178 12 242 186 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 242 186 14 163 133 67 +- 46 46 46 18 18 18 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 10 10 10 +- 30 30 30 78 78 78 163 133 67 210 150 10 +-236 178 12 246 186 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-241 196 14 215 174 15 190 178 144 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 218 218 218 +- 58 58 58 2 2 6 22 18 6 167 114 7 +-216 158 10 236 178 12 246 186 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 186 14 242 186 14 190 150 46 +- 54 54 54 22 22 22 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 38 38 38 86 86 86 180 133 36 213 154 11 +-236 178 12 246 186 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 232 195 16 190 146 13 214 214 214 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 250 250 250 170 170 170 26 26 26 +- 2 2 6 2 2 6 37 26 9 163 110 8 +-219 162 10 239 182 13 246 186 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 186 14 236 178 12 224 166 10 142 122 72 +- 46 46 46 18 18 18 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 18 18 18 +- 50 50 50 109 106 95 192 133 9 224 166 10 +-242 186 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-242 186 14 226 184 13 210 162 10 142 110 46 +-226 226 226 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-253 253 253 253 253 253 253 253 253 253 253 253 +-198 198 198 66 66 66 2 2 6 2 2 6 +- 2 2 6 2 2 6 50 34 6 156 107 11 +-219 162 10 239 182 13 246 186 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 242 186 14 +-234 174 13 213 154 11 154 122 46 66 66 66 +- 30 30 30 10 10 10 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 22 22 22 +- 58 58 58 154 121 60 206 145 10 234 174 13 +-242 186 14 246 186 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 186 14 236 178 12 210 162 10 163 110 8 +- 61 42 6 138 138 138 218 218 218 250 250 250 +-253 253 253 253 253 253 253 253 253 250 250 250 +-242 242 242 210 210 210 144 144 144 66 66 66 +- 6 6 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 61 42 6 163 110 8 +-216 158 10 236 178 12 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 239 182 13 230 174 11 216 158 10 +-190 142 34 124 112 88 70 70 70 38 38 38 +- 18 18 18 6 6 6 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 22 22 22 +- 62 62 62 168 124 44 206 145 10 224 166 10 +-236 178 12 239 182 13 242 186 14 242 186 14 +-246 186 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 236 178 12 216 158 10 175 118 6 +- 80 54 7 2 2 6 6 6 6 30 30 30 +- 54 54 54 62 62 62 50 50 50 38 38 38 +- 14 14 14 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 6 6 6 80 54 7 167 114 7 +-213 154 11 236 178 12 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 190 14 242 186 14 239 182 13 239 182 13 +-230 174 11 210 150 10 174 135 50 124 112 88 +- 82 82 82 54 54 54 34 34 34 18 18 18 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 18 18 18 +- 50 50 50 158 118 36 192 133 9 200 144 11 +-216 158 10 219 162 10 224 166 10 226 170 11 +-230 174 11 236 178 12 239 182 13 239 182 13 +-242 186 14 246 186 14 246 190 14 246 190 14 +-246 190 14 246 190 14 246 190 14 246 190 14 +-246 186 14 230 174 11 210 150 10 163 110 8 +-104 69 6 10 10 10 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 6 6 6 91 60 6 167 114 7 +-206 145 10 230 174 11 242 186 14 246 190 14 +-246 190 14 246 190 14 246 186 14 242 186 14 +-239 182 13 230 174 11 224 166 10 213 154 11 +-180 133 36 124 112 88 86 86 86 58 58 58 +- 38 38 38 22 22 22 10 10 10 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 14 14 14 +- 34 34 34 70 70 70 138 110 50 158 118 36 +-167 114 7 180 123 7 192 133 9 197 138 11 +-200 144 11 206 145 10 213 154 11 219 162 10 +-224 166 10 230 174 11 239 182 13 242 186 14 +-246 186 14 246 186 14 246 186 14 246 186 14 +-239 182 13 216 158 10 185 133 11 152 99 6 +-104 69 6 18 14 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 2 2 6 2 2 6 2 2 6 +- 2 2 6 6 6 6 80 54 7 152 99 6 +-192 133 9 219 162 10 236 178 12 239 182 13 +-246 186 14 242 186 14 239 182 13 236 178 12 +-224 166 10 206 145 10 192 133 9 154 121 60 +- 94 94 94 62 62 62 42 42 42 22 22 22 +- 14 14 14 6 6 6 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 18 18 18 34 34 34 58 58 58 78 78 78 +-101 98 89 124 112 88 142 110 46 156 107 11 +-163 110 8 167 114 7 175 118 6 180 123 7 +-185 133 11 197 138 11 210 150 10 219 162 10 +-226 170 11 236 178 12 236 178 12 234 174 13 +-219 162 10 197 138 11 163 110 8 130 83 6 +- 91 60 6 10 10 10 2 2 6 2 2 6 +- 18 18 18 38 38 38 38 38 38 38 38 38 +- 38 38 38 38 38 38 38 38 38 38 38 38 +- 38 38 38 38 38 38 26 26 26 2 2 6 +- 2 2 6 6 6 6 70 47 6 137 92 6 +-175 118 6 200 144 11 219 162 10 230 174 11 +-234 174 13 230 174 11 219 162 10 210 150 10 +-192 133 9 163 110 8 124 112 88 82 82 82 +- 50 50 50 30 30 30 14 14 14 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 14 14 14 22 22 22 34 34 34 +- 42 42 42 58 58 58 74 74 74 86 86 86 +-101 98 89 122 102 70 130 98 46 121 87 25 +-137 92 6 152 99 6 163 110 8 180 123 7 +-185 133 11 197 138 11 206 145 10 200 144 11 +-180 123 7 156 107 11 130 83 6 104 69 6 +- 50 34 6 54 54 54 110 110 110 101 98 89 +- 86 86 86 82 82 82 78 78 78 78 78 78 +- 78 78 78 78 78 78 78 78 78 78 78 78 +- 78 78 78 82 82 82 86 86 86 94 94 94 +-106 106 106 101 101 101 86 66 34 124 80 6 +-156 107 11 180 123 7 192 133 9 200 144 11 +-206 145 10 200 144 11 192 133 9 175 118 6 +-139 102 15 109 106 95 70 70 70 42 42 42 +- 22 22 22 10 10 10 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 6 6 6 10 10 10 +- 14 14 14 22 22 22 30 30 30 38 38 38 +- 50 50 50 62 62 62 74 74 74 90 90 90 +-101 98 89 112 100 78 121 87 25 124 80 6 +-137 92 6 152 99 6 152 99 6 152 99 6 +-138 86 6 124 80 6 98 70 6 86 66 30 +-101 98 89 82 82 82 58 58 58 46 46 46 +- 38 38 38 34 34 34 34 34 34 34 34 34 +- 34 34 34 34 34 34 34 34 34 34 34 34 +- 34 34 34 34 34 34 38 38 38 42 42 42 +- 54 54 54 82 82 82 94 86 76 91 60 6 +-134 86 6 156 107 11 167 114 7 175 118 6 +-175 118 6 167 114 7 152 99 6 121 87 25 +-101 98 89 62 62 62 34 34 34 18 18 18 +- 6 6 6 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 6 6 6 6 6 6 10 10 10 +- 18 18 18 22 22 22 30 30 30 42 42 42 +- 50 50 50 66 66 66 86 86 86 101 98 89 +-106 86 58 98 70 6 104 69 6 104 69 6 +-104 69 6 91 60 6 82 62 34 90 90 90 +- 62 62 62 38 38 38 22 22 22 14 14 14 +- 10 10 10 10 10 10 10 10 10 10 10 10 +- 10 10 10 10 10 10 6 6 6 10 10 10 +- 10 10 10 10 10 10 10 10 10 14 14 14 +- 22 22 22 42 42 42 70 70 70 89 81 66 +- 80 54 7 104 69 6 124 80 6 137 92 6 +-134 86 6 116 81 8 100 82 52 86 86 86 +- 58 58 58 30 30 30 14 14 14 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 6 6 6 10 10 10 14 14 14 +- 18 18 18 26 26 26 38 38 38 54 54 54 +- 70 70 70 86 86 86 94 86 76 89 81 66 +- 89 81 66 86 86 86 74 74 74 50 50 50 +- 30 30 30 14 14 14 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 18 18 18 34 34 34 58 58 58 +- 82 82 82 89 81 66 89 81 66 89 81 66 +- 94 86 66 94 86 76 74 74 74 50 50 50 +- 26 26 26 14 14 14 6 6 6 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 6 6 6 6 6 6 14 14 14 18 18 18 +- 30 30 30 38 38 38 46 46 46 54 54 54 +- 50 50 50 42 42 42 30 30 30 18 18 18 +- 10 10 10 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 6 6 6 14 14 14 26 26 26 +- 38 38 38 50 50 50 58 58 58 58 58 58 +- 54 54 54 42 42 42 30 30 30 18 18 18 +- 10 10 10 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 6 6 6 10 10 10 14 14 14 18 18 18 +- 18 18 18 14 14 14 10 10 10 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 6 6 6 +- 14 14 14 18 18 18 22 22 22 22 22 22 +- 18 18 18 14 14 14 10 10 10 6 6 6 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 +- 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++8 8 8 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 17 17 17 44 44 44 ++17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 27 27 27 45 45 45 ++28 28 28 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 16 16 16 49 49 49 ++38 38 38 3 3 3 0 0 0 6 6 6 3 3 3 0 0 0 16 16 16 49 49 49 ++50 50 50 13 13 13 0 0 0 4 4 4 3 3 3 0 0 0 14 14 14 44 44 44 ++56 56 56 21 21 21 0 0 0 0 0 0 8 8 8 0 0 0 8 8 8 45 45 45 ++57 57 57 29 29 29 0 0 0 0 0 0 6 6 6 0 0 0 11 11 11 46 46 46 ++59 59 59 29 29 29 0 0 0 0 0 0 4 4 4 0 0 0 8 8 8 42 42 42 ++59 59 59 37 37 37 8 8 8 0 0 0 3 3 3 0 0 0 0 0 0 28 28 28 ++63 63 63 36 36 36 10 10 10 3 3 3 0 0 0 3 3 3 8 8 8 10 10 10 ++56 56 56 43 43 43 20 20 20 8 8 8 11 11 11 10 10 10 4 4 4 10 10 10 ++52 52 52 38 38 38 13 13 13 0 0 0 10 10 10 10 10 10 3 3 3 8 8 8 ++43 43 43 40 40 40 19 19 19 13 13 13 32 32 32 25 25 25 4 4 4 11 11 11 ++29 29 29 43 43 43 25 25 25 0 0 0 11 11 11 13 13 13 3 3 3 13 13 13 ++14 14 14 11 11 11 8 8 8 8 8 8 10 10 10 11 11 11 11 11 11 13 13 13 ++13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 16 16 16 16 16 16 17 17 17 ++17 17 17 16 16 16 19 19 19 23 23 23 19 19 19 11 11 11 14 14 14 23 23 23 ++14 14 14 32 32 32 38 38 38 37 37 37 40 40 40 43 43 43 43 43 43 46 46 46 ++45 45 45 40 40 40 44 44 44 49 49 49 42 42 42 27 27 27 21 21 21 28 28 28 ++25 25 25 28 28 28 25 25 25 45 45 45 70 70 70 58 58 58 31 31 31 29 29 29 ++29 29 29 34 34 34 70 70 70 51 51 51 42 42 42 56 56 56 29 29 29 42 42 42 ++70 70 70 36 36 36 28 28 28 28 28 28 27 27 27 62 62 62 76 76 76 39 39 39 ++32 32 32 25 25 25 33 33 33 49 49 49 68 68 68 52 52 52 49 49 49 50 50 50 ++49 49 49 52 52 52 49 49 49 43 43 43 28 28 28 33 33 33 62 62 62 73 73 73 ++76 76 76 63 63 63 33 33 33 28 28 28 65 65 65 71 71 71 66 66 66 34 34 34 ++32 32 32 54 54 54 65 65 65 54 54 54 37 37 37 27 27 27 40 40 40 65 65 65 ++39 39 39 44 44 44 54 54 54 70 70 70 73 73 73 53 53 53 42 42 42 53 53 53 ++59 59 59 58 58 58 36 36 36 29 29 29 27 27 27 42 42 42 49 49 49 68 68 68 ++43 43 43 20 20 20 42 42 42 54 54 54 42 42 42 33 33 33 27 27 27 31 31 31 ++32 32 32 34 34 34 48 48 48 52 52 52 38 38 38 25 25 25 27 27 27 31 31 31 ++28 28 28 28 28 28 27 27 27 27 27 27 27 27 27 27 27 27 25 25 25 24 24 24 ++42 42 42 39 39 39 27 27 27 25 25 25 19 19 19 27 27 27 17 17 17 27 27 27 ++19 19 19 23 23 23 20 20 20 27 27 27 23 23 23 28 28 28 48 48 48 39 39 39 ++27 27 27 24 24 24 21 21 21 20 20 20 21 21 21 24 24 24 24 24 24 24 24 24 ++33 33 33 46 46 46 49 49 49 43 43 43 44 44 44 43 43 43 42 42 42 46 46 46 ++43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 42 42 42 42 42 42 42 42 42 ++37 37 37 42 42 42 45 45 45 45 45 45 39 39 39 33 33 33 31 31 31 29 29 29 ++31 31 31 29 29 29 27 27 27 25 25 25 25 25 25 28 28 28 29 29 29 31 31 31 ++23 23 23 21 21 21 28 28 28 25 25 25 31 31 31 42 42 42 33 33 33 24 24 24 ++23 23 23 16 16 16 31 31 31 27 27 27 14 14 14 23 23 23 28 28 28 36 36 36 ++27 27 27 29 29 29 31 31 31 32 32 32 32 32 32 31 31 31 29 29 29 28 28 28 ++29 29 29 24 24 24 27 27 27 27 27 27 27 27 27 29 29 29 27 27 27 25 25 25 ++32 32 32 29 29 29 27 27 27 27 27 27 29 29 29 31 31 31 29 29 29 27 27 27 ++29 29 29 27 27 27 27 27 27 29 29 29 32 32 32 32 32 32 28 28 28 23 23 23 ++23 23 23 21 21 21 21 21 21 25 25 25 24 24 24 21 21 21 23 23 23 28 28 28 ++21 21 21 28 28 28 40 40 40 43 43 43 29 29 29 21 21 21 29 29 29 32 32 32 ++27 27 27 29 29 29 32 32 32 27 27 27 27 27 27 32 32 32 28 28 28 24 24 24 ++36 36 36 38 38 38 36 36 36 23 23 23 28 28 28 28 28 28 28 28 28 24 24 24 ++31 31 31 25 25 25 27 27 27 25 25 25 23 23 23 25 25 25 31 31 31 40 40 40 ++42 42 42 28 28 28 24 24 24 28 28 28 27 27 27 28 28 28 29 29 29 23 23 23 ++23 23 23 16 16 16 11 11 11 11 11 11 14 14 14 25 25 25 37 37 37 40 40 40 ++17 17 17 11 11 11 23 23 23 33 33 33 31 31 31 31 31 31 32 32 32 28 28 28 ++29 29 29 25 25 25 24 24 24 33 33 33 21 21 21 14 14 14 36 36 36 36 36 36 ++4 4 4 19 19 19 17 17 17 21 21 21 20 20 20 11 11 11 16 16 16 14 14 14 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 6 6 6 4 4 4 0 0 0 3 3 3 19 19 19 ++43 43 43 32 32 32 4 4 4 0 0 0 10 10 10 0 0 0 0 0 0 17 17 17 ++39 39 39 29 29 29 11 11 11 0 0 0 6 6 6 0 0 0 0 0 0 20 20 20 ++42 42 42 39 39 39 16 16 16 0 0 0 4 4 4 0 0 0 0 0 0 17 17 17 ++45 45 45 43 43 43 19 19 19 0 0 0 6 6 6 0 0 0 0 0 0 20 20 20 ++43 43 43 46 46 46 29 29 29 0 0 0 0 0 0 4 4 4 8 8 8 6 6 6 ++49 49 49 51 51 51 33 33 33 4 4 4 0 0 0 4 4 4 8 8 8 8 8 8 ++46 46 46 54 54 54 39 39 39 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 ++40 40 40 54 54 54 39 39 39 0 0 0 0 0 0 6 6 6 10 10 10 0 0 0 ++27 27 27 56 56 56 42 42 42 6 6 6 6 6 6 0 0 0 0 0 0 19 19 19 ++29 29 29 57 57 57 43 43 43 8 8 8 6 6 6 3 3 3 0 0 0 11 11 11 ++21 21 21 40 40 40 38 38 38 13 13 13 0 0 0 6 6 6 6 6 6 3 3 3 ++16 16 16 36 36 36 39 39 39 16 16 16 4 4 4 27 27 27 32 32 32 13 13 13 ++13 13 13 36 36 36 44 44 44 24 24 24 0 0 0 8 8 8 16 16 16 8 8 8 ++6 6 6 10 10 10 11 11 11 13 13 13 14 14 14 16 16 16 14 14 14 13 13 13 ++13 13 13 13 13 13 14 14 14 14 14 14 16 16 16 16 16 16 17 17 17 17 17 17 ++20 20 20 20 20 20 19 19 19 17 17 17 19 19 19 23 23 23 21 21 21 17 17 17 ++25 25 25 34 34 34 36 36 36 37 37 37 45 45 45 46 46 46 43 43 43 43 43 43 ++49 49 49 46 46 46 43 43 43 42 42 42 38 38 38 34 34 34 36 36 36 38 38 38 ++37 37 37 36 36 36 36 36 36 46 46 46 59 59 59 56 56 56 42 42 42 33 33 33 ++40 40 40 51 51 51 45 45 45 53 53 53 56 56 56 50 50 50 51 51 51 37 37 37 ++50 50 50 52 52 52 46 46 46 43 43 43 51 51 51 58 58 58 57 57 57 52 52 52 ++45 45 45 44 44 44 48 48 48 50 50 50 61 61 61 51 51 51 51 51 51 54 54 54 ++50 50 50 54 54 54 54 54 54 57 57 57 50 50 50 45 45 45 56 56 56 58 58 58 ++49 49 49 54 54 54 54 54 54 49 49 49 59 59 59 51 51 51 53 53 53 50 50 50 ++44 44 44 54 54 54 57 57 57 52 52 52 52 52 52 52 52 52 54 54 54 60 60 60 ++50 50 50 52 52 52 51 51 51 52 52 52 57 57 57 58 58 58 53 53 53 51 51 51 ++54 54 54 54 54 54 44 44 44 52 52 52 46 46 46 48 48 48 46 46 46 50 50 50 ++53 53 53 40 40 40 49 49 49 54 54 54 48 48 48 45 45 45 45 45 45 48 48 48 ++43 43 43 42 42 42 45 45 45 46 46 46 43 43 43 46 46 46 50 50 50 48 48 48 ++44 44 44 45 45 45 45 45 45 44 44 44 40 40 40 39 39 39 40 40 40 42 42 42 ++44 44 44 48 48 48 38 38 38 43 43 43 40 40 40 45 45 45 37 37 37 43 43 43 ++37 37 37 42 42 42 38 38 38 39 39 39 40 40 40 37 37 37 39 39 39 39 39 39 ++39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 37 37 37 34 34 34 32 32 32 ++36 36 36 38 38 38 34 34 34 32 32 32 34 34 34 32 32 32 29 29 29 37 37 37 ++32 32 32 33 33 33 33 33 33 32 32 32 31 31 31 31 31 31 31 31 31 32 32 32 ++34 34 34 34 34 34 34 34 34 36 36 36 36 36 36 33 33 33 29 29 29 27 27 27 ++29 29 29 33 33 33 32 32 32 25 25 25 25 25 25 32 32 32 36 36 36 33 33 33 ++37 37 37 28 28 28 25 25 25 24 24 24 31 31 31 31 31 31 21 21 21 32 32 32 ++24 24 24 37 37 37 32 32 32 25 25 25 32 32 32 31 31 31 24 24 24 27 27 27 ++25 25 25 28 28 28 31 31 31 31 31 31 31 31 31 31 31 31 28 28 28 25 25 25 ++29 29 29 25 25 25 28 28 28 33 33 33 34 34 34 33 33 33 31 31 31 33 33 33 ++32 32 32 28 28 28 28 28 28 31 31 31 32 32 32 29 29 29 28 28 28 29 29 29 ++31 31 31 29 29 29 28 28 28 31 31 31 34 34 34 34 34 34 31 31 31 27 27 27 ++29 29 29 27 27 27 27 27 27 28 28 28 28 28 28 28 28 28 29 29 29 32 32 32 ++34 34 34 38 38 38 40 40 40 36 36 36 25 25 25 25 25 25 29 29 29 23 23 23 ++29 29 29 28 28 28 28 28 28 28 28 28 29 29 29 31 31 31 33 33 33 37 37 37 ++39 39 39 31 31 31 32 32 32 32 32 32 25 25 25 31 31 31 28 28 28 29 29 29 ++19 19 19 33 33 33 28 28 28 32 32 32 32 32 32 27 27 27 39 39 39 45 45 45 ++34 34 34 28 28 28 32 32 32 34 34 34 28 28 28 27 27 27 32 32 32 33 33 33 ++25 25 25 21 21 21 8 8 8 8 8 8 25 25 25 29 29 29 21 21 21 21 21 21 ++13 13 13 10 10 10 19 19 19 29 29 29 27 27 27 25 25 25 25 25 25 21 21 21 ++24 24 24 39 39 39 25 25 25 21 21 21 37 37 37 39 39 39 32 32 32 16 16 16 ++13 13 13 11 11 11 10 10 10 20 20 20 24 24 24 19 19 19 13 13 13 6 6 6 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++4 4 4 0 0 0 0 0 0 4 4 4 6 6 6 0 0 0 0 0 0 0 0 0 ++21 21 21 38 38 38 25 25 25 0 0 0 3 3 3 8 8 8 0 0 0 0 0 0 ++21 21 21 40 40 40 32 32 32 0 0 0 0 0 0 8 8 8 0 0 0 0 0 0 ++19 19 19 49 49 49 40 40 40 4 4 4 0 0 0 8 8 8 0 0 0 0 0 0 ++16 16 16 50 50 50 45 45 45 11 11 11 0 0 0 6 6 6 0 0 0 0 0 0 ++13 13 13 48 48 48 52 52 52 23 23 23 0 0 0 4 4 4 3 3 3 0 0 0 ++16 16 16 49 49 49 57 57 57 32 32 32 4 4 4 0 0 0 0 0 0 0 0 0 ++8 8 8 45 45 45 58 58 58 34 34 34 6 6 6 0 0 0 0 0 0 0 0 0 ++0 0 0 45 45 45 57 57 57 31 31 31 3 3 3 0 0 0 4 4 4 0 0 0 ++0 0 0 34 34 34 52 52 52 38 38 38 11 11 11 3 3 3 13 13 13 20 20 20 ++11 11 11 31 31 31 49 49 49 39 39 39 8 8 8 0 0 0 10 10 10 3 3 3 ++0 0 0 28 28 28 42 42 42 32 32 32 17 17 17 6 6 6 3 3 3 6 6 6 ++3 3 3 21 21 21 40 40 40 39 39 39 16 16 16 4 4 4 17 17 17 27 27 27 ++14 14 14 14 14 14 32 32 32 44 44 44 28 28 28 6 6 6 8 8 8 20 20 20 ++4 4 4 11 11 11 14 14 14 13 13 13 13 13 13 17 17 17 17 17 17 13 13 13 ++14 14 14 14 14 14 16 16 16 16 16 16 17 17 17 17 17 17 19 19 19 19 19 19 ++21 21 21 21 21 21 19 19 19 17 17 17 20 20 20 24 24 24 25 25 25 24 24 24 ++40 40 40 37 37 37 28 28 28 32 32 32 44 44 44 48 48 48 44 44 44 46 46 46 ++45 45 45 49 49 49 49 49 49 45 45 45 45 45 45 50 50 50 51 51 51 50 50 50 ++45 45 45 48 48 48 54 54 54 54 54 54 48 48 48 51 51 51 57 57 57 54 54 54 ++56 56 56 51 51 51 53 53 53 50 50 50 51 51 51 57 57 57 53 53 53 57 57 57 ++56 56 56 51 51 51 54 54 54 54 54 54 48 48 48 51 51 51 58 58 58 54 54 54 ++60 60 60 56 56 56 51 51 51 46 46 46 59 59 59 57 57 57 53 53 53 53 53 53 ++49 49 49 53 53 53 51 51 51 58 58 58 57 57 57 48 48 48 51 51 51 53 53 53 ++54 54 54 51 51 51 56 56 56 48 48 48 53 53 53 46 46 46 51 51 51 60 60 60 ++53 53 53 57 57 57 51 51 51 48 48 48 56 56 56 58 58 58 52 52 52 48 48 48 ++54 54 54 53 53 53 54 54 54 53 53 53 49 49 49 50 50 50 53 53 53 51 51 51 ++49 49 49 51 51 51 44 44 44 57 57 57 53 53 53 51 51 51 54 54 54 51 51 51 ++54 54 54 54 54 54 50 50 50 50 50 50 51 51 51 51 51 51 51 51 51 42 42 42 ++50 50 50 50 50 50 51 51 51 46 46 46 43 43 43 48 48 48 49 49 49 39 39 39 ++43 43 43 45 45 45 48 48 48 48 48 48 45 45 45 43 43 43 44 44 44 45 45 45 ++43 43 43 50 50 50 38 38 38 42 42 42 40 40 40 45 45 45 37 37 37 42 42 42 ++42 42 42 43 43 43 39 39 39 34 34 34 44 44 44 44 44 44 33 33 33 42 42 42 ++34 34 34 36 36 36 37 37 37 37 37 37 37 37 37 36 36 36 34 34 34 34 34 34 ++37 37 37 32 32 32 27 27 27 32 32 32 39 39 39 37 37 37 33 33 33 37 37 37 ++31 31 31 32 32 32 33 33 33 33 33 33 31 31 31 29 29 29 31 31 31 32 32 32 ++33 33 33 29 29 29 25 25 25 27 27 27 31 31 31 32 32 32 31 31 31 27 27 27 ++37 37 37 27 27 27 27 27 27 37 37 37 37 37 37 24 24 24 23 23 23 32 32 32 ++17 17 17 34 34 34 37 37 37 25 25 25 32 32 32 34 34 34 24 24 24 37 37 37 ++38 38 38 27 27 27 21 21 21 20 20 20 16 16 16 37 37 37 45 45 45 13 13 13 ++23 23 23 24 24 24 24 24 24 23 23 23 21 21 21 24 24 24 32 32 32 39 39 39 ++36 36 36 34 34 34 32 32 32 33 33 33 33 33 33 28 28 28 29 29 29 34 34 34 ++27 27 27 25 25 25 29 29 29 36 36 36 36 36 36 32 32 32 31 31 31 34 34 34 ++37 37 37 36 36 36 36 36 36 38 38 38 40 40 40 42 42 42 38 38 38 36 36 36 ++40 40 40 40 40 40 39 39 39 39 39 39 39 39 39 42 42 42 42 42 42 40 40 40 ++39 39 39 42 42 42 44 44 44 37 37 37 34 34 34 43 43 43 40 40 40 27 27 27 ++24 24 24 24 24 24 17 17 17 13 13 13 16 16 16 27 27 27 39 39 39 44 44 44 ++37 37 37 19 19 19 27 27 27 44 44 44 27 27 27 45 45 45 40 40 40 44 44 44 ++38 38 38 40 40 40 8 8 8 21 21 21 42 42 42 42 42 42 53 53 53 44 44 44 ++44 44 44 44 44 44 48 48 48 42 42 42 21 21 21 3 3 3 0 0 0 0 0 0 ++11 11 11 19 19 19 8 8 8 13 13 13 37 37 37 37 37 37 21 21 21 24 24 24 ++16 16 16 10 10 10 14 14 14 20 20 20 16 16 16 14 14 14 16 16 16 17 17 17 ++0 0 0 8 8 8 0 0 0 11 11 11 36 36 36 36 36 36 21 21 21 4 4 4 ++19 19 19 3 3 3 3 3 3 13 13 13 23 23 23 27 27 27 21 21 21 17 17 17 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 3 3 3 0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 0 0 0 ++0 0 0 23 23 23 39 39 39 24 24 24 0 0 0 0 0 0 10 10 10 0 0 0 ++0 0 0 16 16 16 37 37 37 28 28 28 3 3 3 0 0 0 6 6 6 0 0 0 ++0 0 0 17 17 17 39 39 39 37 37 37 11 11 11 0 0 0 4 4 4 4 4 4 ++0 0 0 19 19 19 44 44 44 43 43 43 16 16 16 0 0 0 4 4 4 4 4 4 ++0 0 0 20 20 20 45 45 45 49 49 49 28 28 28 0 0 0 0 0 0 8 8 8 ++0 0 0 19 19 19 46 46 46 53 53 53 32 32 32 0 0 0 0 0 0 14 14 14 ++0 0 0 8 8 8 36 36 36 56 56 56 43 43 43 4 4 4 0 0 0 14 14 14 ++0 0 0 8 8 8 38 38 38 58 58 58 44 44 44 6 6 6 0 0 0 10 10 10 ++3 3 3 0 0 0 32 32 32 51 51 51 36 36 36 20 20 20 19 19 19 14 14 14 ++11 11 11 0 0 0 27 27 27 53 53 53 36 36 36 16 16 16 11 11 11 0 0 0 ++8 8 8 8 8 8 24 24 24 44 44 44 42 42 42 16 16 16 0 0 0 4 4 4 ++4 4 4 0 0 0 11 11 11 42 42 42 50 50 50 19 19 19 0 0 0 31 31 31 ++28 28 28 13 13 13 10 10 10 37 37 37 52 52 52 24 24 24 0 0 0 17 17 17 ++11 11 11 16 16 16 16 16 16 10 10 10 8 8 8 14 14 14 17 17 17 14 14 14 ++16 16 16 16 16 16 17 17 17 17 17 17 19 19 19 19 19 19 20 20 20 20 20 20 ++21 21 21 20 20 20 21 21 21 23 23 23 20 20 20 20 20 20 28 28 28 39 39 39 ++39 39 39 32 32 32 24 24 24 32 32 32 46 46 46 49 49 49 45 45 45 49 49 49 ++42 42 42 49 49 49 53 53 53 51 51 51 48 48 48 46 46 46 46 46 46 45 45 45 ++57 57 57 53 53 53 52 52 52 49 49 49 43 43 43 45 45 45 52 52 52 54 54 54 ++52 52 52 48 48 48 54 54 54 46 46 46 46 46 46 56 56 56 50 50 50 53 53 53 ++51 51 51 50 50 50 57 57 57 58 58 58 48 48 48 51 51 51 54 54 54 44 44 44 ++52 52 52 54 54 54 58 58 58 53 53 53 54 54 54 50 50 50 49 49 49 60 60 60 ++58 58 58 53 53 53 42 42 42 51 51 51 61 61 61 57 57 57 58 58 58 58 58 58 ++62 62 62 53 53 53 65 65 65 57 57 57 62 62 62 57 57 57 50 50 50 53 53 53 ++53 53 53 59 59 59 59 59 59 57 57 57 56 56 56 49 49 49 45 45 45 51 51 51 ++56 56 56 53 53 53 53 53 53 49 49 49 45 45 45 54 54 54 57 57 57 44 44 44 ++52 52 52 65 65 65 52 52 52 50 50 50 44 44 44 39 39 39 46 46 46 43 43 43 ++45 45 45 57 57 57 42 42 42 36 36 36 45 45 45 51 51 51 56 56 56 45 45 45 ++36 36 36 38 38 38 42 42 42 40 40 40 37 37 37 44 44 44 52 52 52 51 51 51 ++38 38 38 37 37 37 37 37 37 36 36 36 36 36 36 34 34 34 32 32 32 31 31 31 ++43 43 43 51 51 51 31 31 31 28 28 28 25 25 25 28 28 28 21 21 21 27 27 27 ++27 27 27 24 24 24 27 27 27 21 21 21 37 37 37 46 46 46 28 28 28 24 24 24 ++21 21 21 21 21 21 21 21 21 20 20 20 19 19 19 20 20 20 21 21 21 24 24 24 ++25 25 25 21 21 21 21 21 21 33 33 33 49 49 49 54 54 54 51 51 51 46 46 46 ++51 51 51 53 53 53 57 57 57 57 57 57 54 54 54 52 52 52 51 51 51 52 52 52 ++59 59 59 56 56 56 52 52 52 51 51 51 53 53 53 56 56 56 57 57 57 57 57 57 ++48 48 48 25 25 25 14 14 14 29 29 29 42 42 42 34 34 34 17 17 17 6 6 6 ++0 0 0 28 28 28 40 40 40 37 37 37 40 40 40 31 31 31 20 20 20 45 45 45 ++50 50 50 17 17 17 13 13 13 0 0 0 3 3 3 48 48 48 56 56 56 28 28 28 ++4 4 4 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 16 16 16 32 32 32 ++39 39 39 51 51 51 50 50 50 49 49 49 50 50 50 46 46 46 45 45 45 42 42 42 ++27 27 27 34 34 34 43 43 43 45 45 45 45 45 45 46 46 46 48 48 48 48 48 48 ++43 43 43 43 43 43 43 43 43 45 45 45 48 48 48 49 49 49 46 46 46 45 45 45 ++44 44 44 46 46 46 46 46 46 45 45 45 46 46 46 49 49 49 46 46 46 44 44 44 ++42 42 42 44 44 44 50 50 50 45 45 45 45 45 45 51 51 51 42 42 42 33 33 33 ++24 24 24 25 25 25 8 8 8 0 0 0 4 4 4 29 29 29 49 49 49 48 48 48 ++19 19 19 0 0 0 16 16 16 40 40 40 11 11 11 44 44 44 32 32 32 34 34 34 ++54 54 54 46 46 46 31 31 31 33 33 33 33 33 33 31 31 31 45 45 45 46 46 46 ++50 50 50 51 51 51 54 54 54 52 52 52 38 38 38 21 21 21 13 13 13 11 11 11 ++28 28 28 38 38 38 33 33 33 28 28 28 32 32 32 23 23 23 13 13 13 20 20 20 ++23 23 23 16 16 16 11 11 11 10 10 10 4 4 4 3 3 3 8 8 8 14 14 14 ++11 11 11 0 0 0 8 8 8 34 34 34 28 28 28 8 8 8 11 11 11 16 16 16 ++42 42 42 27 27 27 25 25 25 16 16 16 8 8 8 19 19 19 21 21 21 19 19 19 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 ++6 6 6 0 0 0 20 20 20 39 39 39 21 21 21 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 17 17 17 44 44 44 29 29 29 0 0 0 0 0 0 6 6 6 ++6 6 6 0 0 0 16 16 16 49 49 49 37 37 37 0 0 0 0 0 0 6 6 6 ++8 8 8 0 0 0 16 16 16 52 52 52 42 42 42 8 8 8 0 0 0 3 3 3 ++0 0 0 0 0 0 19 19 19 48 48 48 46 46 46 19 19 19 0 0 0 0 0 0 ++3 3 3 0 0 0 13 13 13 43 43 43 51 51 51 31 31 31 6 6 6 0 0 0 ++13 13 13 0 0 0 4 4 4 43 43 43 56 56 56 37 37 37 8 8 8 0 0 0 ++10 10 10 0 0 0 4 4 4 44 44 44 58 58 58 38 38 38 8 8 8 0 0 0 ++0 0 0 8 8 8 8 8 8 28 28 28 53 53 53 45 45 45 16 16 16 8 8 8 ++0 0 0 8 8 8 3 3 3 24 24 24 53 53 53 39 39 39 6 6 6 10 10 10 ++20 20 20 6 6 6 10 10 10 33 33 33 44 44 44 34 34 34 16 16 16 0 0 0 ++13 13 13 10 10 10 0 0 0 14 14 14 45 45 45 50 50 50 25 25 25 0 0 0 ++23 23 23 31 31 31 20 20 20 14 14 14 36 36 36 45 45 45 27 27 27 4 4 4 ++10 10 10 14 14 14 14 14 14 10 10 10 11 11 11 16 16 16 17 17 17 14 14 14 ++17 17 17 17 17 17 19 19 19 19 19 19 20 20 20 20 20 20 21 21 21 21 21 21 ++20 20 20 23 23 23 23 23 23 20 20 20 21 21 21 29 29 29 37 37 37 42 42 42 ++25 25 25 24 24 24 24 24 24 36 36 36 50 50 50 50 50 50 45 45 45 48 48 48 ++49 49 49 50 50 50 50 50 50 45 45 45 34 34 34 28 28 28 32 32 32 40 40 40 ++61 61 61 46 46 46 31 31 31 31 31 31 39 39 39 36 36 36 32 32 32 36 36 36 ++72 72 72 76 76 76 37 37 37 38 38 38 42 42 42 42 42 42 71 71 71 54 54 54 ++33 33 33 63 63 63 60 60 60 51 51 51 68 68 68 61 61 61 37 37 37 38 38 38 ++36 36 36 52 52 52 73 73 73 71 71 71 50 50 50 34 34 34 39 39 39 74 74 74 ++69 69 69 61 61 61 50 50 50 57 57 57 66 66 66 66 66 66 69 69 69 66 66 66 ++72 72 72 68 68 68 78 78 78 65 65 65 65 65 65 61 61 61 58 58 58 57 57 57 ++68 68 68 75 75 75 81 81 81 81 81 81 68 68 68 44 44 44 36 36 36 46 46 46 ++58 58 58 50 50 50 39 39 39 33 33 33 46 46 46 71 71 71 69 69 69 40 40 40 ++44 44 44 70 70 70 62 62 62 44 44 44 39 39 39 32 32 32 34 34 34 33 33 33 ++45 45 45 66 66 66 49 49 49 28 28 28 27 27 27 37 37 37 54 54 54 58 58 58 ++39 39 39 29 29 29 28 28 28 31 31 31 29 29 29 39 39 39 56 56 56 65 65 65 ++40 40 40 32 32 32 23 23 23 21 21 21 27 27 27 32 32 32 32 32 32 29 29 29 ++43 43 43 53 53 53 27 27 27 23 23 23 21 21 21 23 23 23 19 19 19 21 21 21 ++19 19 19 11 11 11 23 23 23 21 21 21 32 32 32 50 50 50 33 33 33 4 4 4 ++19 19 19 17 17 17 16 16 16 14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 ++8 8 8 10 10 10 13 13 13 23 23 23 42 42 42 60 60 60 62 62 62 51 51 51 ++48 48 48 51 51 51 54 54 54 56 56 56 53 53 53 51 51 51 49 49 49 49 49 49 ++53 53 53 53 53 53 52 52 52 50 50 50 48 48 48 48 48 48 51 51 51 54 54 54 ++57 57 57 45 45 45 16 16 16 0 0 0 24 24 24 51 51 51 37 37 37 0 0 0 ++13 13 13 3 3 3 21 21 21 49 49 49 52 52 52 16 16 16 0 0 0 44 44 44 ++45 45 45 38 38 38 27 27 27 0 0 0 29 29 29 54 54 54 29 29 29 49 49 49 ++17 17 17 0 0 0 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 10 10 10 ++13 13 13 43 43 43 44 44 44 43 43 43 49 49 49 49 49 49 46 46 46 33 33 33 ++24 24 24 39 39 39 48 48 48 45 45 45 45 45 45 50 50 50 51 51 51 45 45 45 ++45 45 45 45 45 45 45 45 45 46 46 46 49 49 49 49 49 49 49 49 49 48 48 48 ++43 43 43 44 44 44 46 46 46 46 46 46 46 46 46 46 46 46 44 44 44 42 42 42 ++48 48 48 46 46 46 52 52 52 44 44 44 36 36 36 32 32 32 20 20 20 25 25 25 ++32 32 32 27 27 27 6 6 6 8 8 8 19 19 19 32 32 32 50 50 50 52 52 52 ++11 11 11 0 0 0 24 24 24 37 37 37 3 3 3 40 40 40 17 17 17 16 16 16 ++45 45 45 21 21 21 37 37 37 43 43 43 33 33 33 34 34 34 40 40 40 51 51 51 ++51 51 51 49 49 49 48 48 48 51 51 51 53 53 53 50 50 50 46 46 46 46 46 46 ++48 48 48 49 49 49 45 45 45 33 33 33 17 17 17 6 6 6 6 6 6 11 11 11 ++23 23 23 20 20 20 16 16 16 11 11 11 6 6 6 0 0 0 3 3 3 11 11 11 ++24 24 24 16 16 16 29 29 29 36 36 36 14 14 14 0 0 0 10 10 10 27 27 27 ++49 49 49 45 45 45 48 48 48 31 31 31 0 0 0 13 13 13 31 31 31 25 25 25 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 19 19 19 36 36 36 24 24 24 3 3 3 0 0 0 ++3 3 3 4 4 4 0 0 0 20 20 20 38 38 38 29 29 29 11 11 11 0 0 0 ++3 3 3 3 3 3 0 0 0 16 16 16 38 38 38 38 38 38 14 14 14 0 0 0 ++0 0 0 0 0 0 0 0 0 16 16 16 44 44 44 46 46 46 20 20 20 0 0 0 ++8 8 8 0 0 0 0 0 0 19 19 19 43 43 43 50 50 50 28 28 28 0 0 0 ++3 3 3 0 0 0 0 0 0 16 16 16 39 39 39 52 52 52 34 34 34 0 0 0 ++0 0 0 3 3 3 3 3 3 8 8 8 33 33 33 58 58 58 43 43 43 0 0 0 ++3 3 3 0 0 0 0 0 0 6 6 6 32 32 32 54 54 54 43 43 43 3 3 3 ++0 0 0 3 3 3 4 4 4 8 8 8 34 34 34 56 56 56 44 44 44 11 11 11 ++0 0 0 11 11 11 0 0 0 0 0 0 28 28 28 49 49 49 42 42 42 27 27 27 ++3 3 3 10 10 10 11 11 11 10 10 10 25 25 25 48 48 48 45 45 45 21 21 21 ++11 11 11 13 13 13 16 16 16 4 4 4 10 10 10 45 45 45 51 51 51 16 16 16 ++10 10 10 23 23 23 31 31 31 16 16 16 8 8 8 40 40 40 52 52 52 27 27 27 ++13 13 13 11 11 11 13 13 13 16 16 16 20 20 20 20 20 20 19 19 19 16 16 16 ++19 19 19 19 19 19 20 20 20 20 20 20 21 21 21 21 21 21 23 23 23 23 23 23 ++20 20 20 27 27 27 25 25 25 17 17 17 28 28 28 45 45 45 44 44 44 29 29 29 ++25 25 25 25 25 25 23 23 23 29 29 29 43 43 43 48 48 48 48 48 48 52 52 52 ++54 54 54 49 49 49 42 42 42 34 34 34 28 28 28 29 29 29 43 43 43 57 57 57 ++44 44 44 38 38 38 29 29 29 32 32 32 36 36 36 29 29 29 33 33 33 50 50 50 ++78 78 78 77 77 77 51 51 51 38 38 38 31 31 31 34 34 34 62 62 62 68 68 68 ++62 62 62 67 67 67 48 48 48 37 37 37 59 59 59 70 70 70 56 56 56 44 44 44 ++45 45 45 53 53 53 72 72 72 73 73 73 57 57 57 44 44 44 39 39 39 72 72 72 ++69 69 69 72 72 72 70 70 70 63 63 63 46 46 46 46 46 46 69 69 69 77 77 77 ++77 77 77 60 60 60 58 58 58 54 54 54 75 75 75 87 87 87 87 87 87 72 72 72 ++56 56 56 62 62 62 71 71 71 82 82 82 83 83 83 66 66 66 52 52 52 56 56 56 ++51 51 51 34 34 34 33 33 33 51 51 51 60 60 60 60 60 60 59 59 59 61 61 61 ++43 43 43 66 66 66 67 67 67 40 40 40 36 36 36 33 33 33 34 34 34 38 38 38 ++34 34 34 61 61 61 60 60 60 39 39 39 27 27 27 31 31 31 50 50 50 63 63 63 ++49 49 49 32 32 32 25 25 25 29 29 29 28 28 28 31 31 31 37 37 37 39 39 39 ++62 62 62 49 49 49 31 31 31 21 21 21 23 23 23 25 25 25 25 25 25 23 23 23 ++37 37 37 54 54 54 27 27 27 25 25 25 28 28 28 28 28 28 24 24 24 25 25 25 ++27 27 27 19 19 19 21 21 21 19 19 19 27 27 27 50 50 50 51 51 51 32 32 32 ++16 16 16 14 14 14 16 16 16 17 17 17 20 20 20 20 20 20 17 17 17 14 14 14 ++10 10 10 11 11 11 11 11 11 11 11 11 28 28 28 54 54 54 65 65 65 57 57 57 ++54 54 54 56 56 56 57 57 57 57 57 57 58 58 58 56 56 56 54 54 54 52 52 52 ++51 51 51 53 53 53 54 54 54 52 52 52 48 48 48 46 46 46 49 49 49 52 52 52 ++59 59 59 57 57 57 37 37 37 4 4 4 0 0 0 29 29 29 40 40 40 36 36 36 ++10 10 10 0 0 0 16 16 16 46 46 46 50 50 50 28 28 28 6 6 6 20 20 20 ++39 39 39 32 32 32 40 40 40 28 28 28 40 40 40 39 39 39 0 0 0 32 32 32 ++50 50 50 28 28 28 4 4 4 3 3 3 8 8 8 3 3 3 0 0 0 0 0 0 ++28 28 28 51 51 51 37 37 37 28 28 28 34 34 34 39 39 39 46 46 46 38 38 38 ++25 25 25 40 40 40 48 48 48 45 45 45 43 43 43 48 48 48 46 46 46 40 40 40 ++43 43 43 43 43 43 44 44 44 44 44 44 45 45 45 45 45 45 45 45 45 45 45 45 ++46 46 46 46 46 46 48 48 48 50 50 50 49 49 49 44 44 44 44 44 44 48 48 48 ++44 44 44 39 39 39 42 42 42 24 24 24 10 10 10 4 4 4 0 0 0 20 20 20 ++32 32 32 21 21 21 4 4 4 24 24 24 28 28 28 17 17 17 37 37 37 50 50 50 ++8 8 8 4 4 4 37 37 37 34 34 34 14 14 14 44 44 44 13 13 13 23 23 23 ++39 39 39 0 0 0 21 21 21 27 27 27 24 24 24 38 38 38 37 37 37 50 50 50 ++58 58 58 53 53 53 48 48 48 48 48 48 53 53 53 52 52 52 51 51 51 54 54 54 ++48 48 48 37 37 37 28 28 28 19 19 19 8 8 8 10 10 10 16 16 16 16 16 16 ++16 16 16 19 19 19 20 20 20 20 20 20 17 17 17 6 6 6 0 0 0 8 8 8 ++17 17 17 36 36 36 33 33 33 3 3 3 0 0 0 3 3 3 3 3 3 16 16 16 ++40 40 40 46 46 46 54 54 54 46 46 46 14 14 14 17 17 17 44 44 44 36 36 36 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 4 4 4 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 ++4 4 4 10 10 10 0 0 0 0 0 0 19 19 19 34 34 34 24 24 24 3 3 3 ++0 0 0 16 16 16 0 0 0 0 0 0 20 20 20 40 40 40 37 37 37 0 0 0 ++0 0 0 14 14 14 4 4 4 0 0 0 17 17 17 49 49 49 40 40 40 6 6 6 ++0 0 0 13 13 13 3 3 3 0 0 0 20 20 20 53 53 53 45 45 45 14 14 14 ++6 6 6 0 0 0 0 0 0 0 0 0 23 23 23 49 49 49 48 48 48 23 23 23 ++3 3 3 8 8 8 8 8 8 3 3 3 14 14 14 40 40 40 48 48 48 33 33 33 ++0 0 0 4 4 4 6 6 6 0 0 0 4 4 4 42 42 42 54 54 54 39 39 39 ++6 6 6 8 8 8 4 4 4 0 0 0 3 3 3 34 34 34 49 49 49 40 40 40 ++11 11 11 0 0 0 6 6 6 16 16 16 10 10 10 38 38 38 54 54 54 34 34 34 ++13 13 13 0 0 0 6 6 6 6 6 6 0 0 0 33 33 33 57 57 57 42 42 42 ++8 8 8 10 10 10 10 10 10 0 0 0 6 6 6 32 32 32 48 48 48 44 44 44 ++19 19 19 6 6 6 14 14 14 14 14 14 0 0 0 20 20 20 49 49 49 53 53 53 ++25 25 25 13 13 13 24 24 24 29 29 29 13 13 13 20 20 20 43 43 43 48 48 48 ++31 31 31 20 20 20 13 13 13 17 17 17 21 21 21 19 19 19 19 19 19 20 20 20 ++20 20 20 20 20 20 21 21 21 21 21 21 23 23 23 23 23 23 24 24 24 24 24 24 ++24 24 24 24 24 24 25 25 25 31 31 31 42 42 42 48 48 48 38 38 38 23 23 23 ++31 31 31 31 31 31 23 23 23 24 24 24 39 39 39 49 49 49 48 48 48 48 48 48 ++46 46 46 43 43 43 36 36 36 32 32 32 36 36 36 46 46 46 56 56 56 59 59 59 ++32 32 32 33 33 33 40 40 40 42 42 42 34 34 34 36 36 36 52 52 52 68 68 68 ++43 43 43 43 43 43 68 68 68 58 58 58 40 40 40 37 37 37 33 33 33 63 63 63 ++84 84 84 63 63 63 44 44 44 33 33 33 37 37 37 61 61 61 72 72 72 61 61 61 ++66 66 66 52 52 52 52 52 52 57 57 57 61 61 61 69 69 69 48 48 48 60 60 60 ++71 71 71 74 74 74 74 74 74 63 63 63 36 36 36 39 39 39 68 68 68 70 70 70 ++85 85 85 68 68 68 63 63 63 69 69 69 84 84 84 78 78 78 75 75 75 54 54 54 ++58 58 58 56 56 56 51 51 51 61 61 61 78 78 78 78 78 78 62 62 62 49 49 49 ++40 40 40 36 36 36 50 50 50 69 69 69 61 61 61 34 34 34 43 43 43 78 78 78 ++67 67 67 60 60 60 71 71 71 46 46 46 33 33 33 34 34 34 39 39 39 42 42 42 ++29 29 29 50 50 50 66 66 66 59 59 59 51 51 51 52 52 52 57 57 57 66 66 66 ++69 69 69 63 63 63 63 63 63 66 66 66 62 62 62 61 61 61 60 60 60 54 54 54 ++77 77 77 69 69 69 57 57 57 46 46 46 39 39 39 33 33 33 28 28 28 23 23 23 ++42 42 42 60 60 60 28 28 28 25 25 25 27 27 27 27 27 27 24 24 24 25 25 25 ++29 29 29 28 28 28 19 19 19 17 17 17 21 21 21 34 34 34 51 51 51 53 53 53 ++31 31 31 24 24 24 17 17 17 16 16 16 19 19 19 21 21 21 19 19 19 16 16 16 ++19 19 19 16 16 16 14 14 14 11 11 11 20 20 20 44 44 44 60 60 60 58 58 58 ++57 57 57 53 53 53 50 50 50 50 50 50 51 51 51 53 53 53 53 53 53 52 52 52 ++50 50 50 52 52 52 53 53 53 54 54 54 53 53 53 51 51 51 49 49 49 49 49 49 ++54 54 54 54 54 54 52 52 52 39 39 39 13 13 13 0 0 0 20 20 20 52 52 52 ++20 20 20 13 13 13 33 33 33 33 33 33 25 25 25 42 42 42 37 37 37 8 8 8 ++43 43 43 11 11 11 25 25 25 51 51 51 45 45 45 21 21 21 0 0 0 0 0 0 ++39 39 39 36 36 36 23 23 23 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 ++44 44 44 51 51 51 16 16 16 0 0 0 3 3 3 6 6 6 25 25 25 29 29 29 ++33 33 33 38 38 38 45 45 45 50 50 50 50 50 50 49 49 49 48 48 48 49 49 49 ++44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 45 45 45 45 45 45 ++50 50 50 44 44 44 44 44 44 48 48 48 44 44 44 36 36 36 40 40 40 52 52 52 ++32 32 32 31 31 31 34 34 34 8 8 8 0 0 0 0 0 0 0 0 0 23 23 23 ++25 25 25 27 27 27 14 14 14 24 24 24 14 14 14 0 0 0 29 29 29 45 45 45 ++0 0 0 0 0 0 34 34 34 21 21 21 21 21 21 38 38 38 3 3 3 32 32 32 ++36 36 36 28 28 28 28 28 28 8 8 8 0 0 0 0 0 0 10 10 10 33 33 33 ++43 43 43 51 51 51 53 53 53 53 53 53 52 52 52 45 45 45 45 45 45 56 56 56 ++48 48 48 36 36 36 16 16 16 3 3 3 8 8 8 13 13 13 11 11 11 13 13 13 ++10 10 10 16 16 16 19 19 19 20 20 20 21 21 21 11 11 11 8 8 8 17 17 17 ++32 32 32 37 37 37 29 29 29 3 3 3 0 0 0 4 4 4 0 0 0 6 6 6 ++50 50 50 49 49 49 49 49 49 56 56 56 25 25 25 14 14 14 46 46 46 31 31 31 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++11 11 11 4 4 4 0 0 0 4 4 4 8 8 8 8 8 8 8 8 8 13 13 13 ++3 3 3 0 0 0 8 8 8 6 6 6 0 0 0 23 23 23 42 42 42 29 29 29 ++8 8 8 3 3 3 3 3 3 10 10 10 0 0 0 20 20 20 44 44 44 27 27 27 ++13 13 13 0 0 0 8 8 8 13 13 13 0 0 0 21 21 21 44 44 44 42 42 42 ++16 16 16 3 3 3 13 13 13 13 13 13 0 0 0 19 19 19 46 46 46 48 48 48 ++8 8 8 10 10 10 14 14 14 8 8 8 0 0 0 20 20 20 46 46 46 57 57 57 ++24 24 24 14 14 14 11 11 11 6 6 6 0 0 0 16 16 16 43 43 43 57 57 57 ++29 29 29 3 3 3 0 0 0 3 3 3 0 0 0 6 6 6 37 37 37 59 59 59 ++36 36 36 3 3 3 0 0 0 10 10 10 3 3 3 0 0 0 29 29 29 58 58 58 ++37 37 37 13 13 13 0 0 0 19 19 19 21 21 21 4 4 4 21 21 21 58 58 58 ++36 36 36 10 10 10 4 4 4 19 19 19 13 13 13 3 3 3 27 27 27 53 53 53 ++39 39 39 11 11 11 4 4 4 16 16 16 3 3 3 0 0 0 23 23 23 52 52 52 ++56 56 56 29 29 29 10 10 10 16 16 16 16 16 16 3 3 3 14 14 14 43 43 43 ++49 49 49 31 31 31 20 20 20 28 28 28 25 25 25 6 6 6 14 14 14 42 42 42 ++50 50 50 31 31 31 14 14 14 14 14 14 17 17 17 14 14 14 16 16 16 24 24 24 ++20 20 20 21 21 21 21 21 21 23 23 23 23 23 23 24 24 24 24 24 24 24 24 24 ++28 28 28 17 17 17 25 25 25 48 48 48 53 53 53 37 37 37 24 24 24 27 27 27 ++27 27 27 31 31 31 29 29 29 34 34 34 51 51 51 54 54 54 42 42 42 29 29 29 ++32 32 32 36 36 36 33 33 33 32 32 32 42 42 42 53 53 53 49 49 49 34 34 34 ++44 44 44 33 33 33 38 38 38 40 40 40 33 33 33 46 46 46 61 61 61 56 56 56 ++36 36 36 46 46 46 54 54 54 75 75 75 65 65 65 38 38 38 54 54 54 72 72 72 ++56 56 56 70 70 70 62 62 62 45 45 45 44 44 44 43 43 43 53 53 53 78 78 78 ++71 71 71 51 51 51 39 39 39 42 42 42 58 58 58 78 78 78 56 56 56 58 58 58 ++82 82 82 69 69 69 63 63 63 65 65 65 58 58 58 68 68 68 74 74 74 43 43 43 ++66 66 66 73 73 73 85 85 85 84 84 84 66 66 66 40 40 40 69 69 69 81 81 81 ++70 70 70 60 60 60 40 40 40 40 40 40 68 68 68 84 84 84 69 69 69 45 45 45 ++38 38 38 60 60 60 68 68 68 56 56 56 40 40 40 32 32 32 48 48 48 73 73 73 ++72 72 72 43 43 43 69 69 69 57 57 57 40 40 40 46 46 46 52 52 52 50 50 50 ++68 68 68 68 68 68 78 78 78 73 73 73 69 69 69 69 69 69 57 57 57 57 57 57 ++62 62 62 66 66 66 69 69 69 63 63 63 52 52 52 53 53 53 57 57 57 51 51 51 ++56 56 56 60 60 60 67 67 67 70 70 70 70 70 70 67 67 67 63 63 63 62 62 62 ++57 57 57 73 73 73 34 34 34 24 24 24 24 24 24 23 23 23 23 23 23 25 25 25 ++20 20 20 31 31 31 20 20 20 24 24 24 24 24 24 11 11 11 28 28 28 45 45 45 ++59 59 59 46 46 46 28 28 28 17 17 17 14 14 14 16 16 16 16 16 16 13 13 13 ++14 14 14 10 10 10 11 11 11 13 13 13 16 16 16 33 33 33 50 50 50 52 52 52 ++65 65 65 58 58 58 51 51 51 50 50 50 52 52 52 57 57 57 58 58 58 58 58 58 ++50 50 50 50 50 50 51 51 51 56 56 56 58 58 58 57 57 57 51 51 51 45 45 45 ++50 50 50 51 51 51 56 56 56 53 53 53 32 32 32 4 4 4 3 3 3 21 21 21 ++57 57 57 39 39 39 46 46 46 25 25 25 0 0 0 29 29 29 51 51 51 31 31 31 ++48 48 48 21 21 21 0 0 0 44 44 44 65 65 65 24 24 24 3 3 3 3 3 3 ++0 0 0 33 33 33 45 45 45 21 21 21 0 0 0 3 3 3 11 11 11 6 6 6 ++48 48 48 48 48 48 8 8 8 0 0 0 6 6 6 0 0 0 17 17 17 28 28 28 ++20 20 20 17 17 17 27 27 27 42 42 42 44 44 44 37 37 37 37 37 37 45 45 45 ++49 49 49 49 49 49 48 48 48 48 48 48 46 46 46 46 46 46 48 48 48 48 48 48 ++44 44 44 34 34 34 33 33 33 37 37 37 31 31 31 21 21 21 31 31 31 49 49 49 ++28 28 28 33 33 33 38 38 38 6 6 6 0 0 0 13 13 13 3 3 3 21 21 21 ++24 24 24 45 45 45 32 32 32 17 17 17 0 0 0 0 0 0 37 37 37 49 49 49 ++6 6 6 0 0 0 40 40 40 19 19 19 31 31 31 33 33 33 0 0 0 39 39 39 ++28 28 28 36 36 36 8 8 8 0 0 0 0 0 0 3 3 3 0 0 0 3 3 3 ++4 4 4 32 32 32 49 49 49 51 51 51 43 43 43 27 27 27 25 25 25 40 40 40 ++44 44 44 39 39 39 11 11 11 0 0 0 13 13 13 14 14 14 6 6 6 17 17 17 ++10 10 10 16 16 16 14 14 14 14 14 14 17 17 17 13 13 13 14 14 14 28 28 28 ++36 36 36 0 0 0 4 4 4 23 23 23 13 13 13 0 0 0 0 0 0 23 23 23 ++54 54 54 42 42 42 32 32 32 54 54 54 32 32 32 16 16 16 52 52 52 36 36 36 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++4 4 4 8 8 8 13 13 13 17 17 17 20 20 20 20 20 20 19 19 19 19 19 19 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 ++19 19 19 19 19 19 20 20 20 21 21 21 19 19 19 17 17 17 28 28 28 40 40 40 ++34 34 34 21 21 21 17 17 17 19 19 19 16 16 16 17 17 17 32 32 32 48 48 48 ++37 37 37 24 24 24 10 10 10 14 14 14 20 20 20 11 11 11 23 23 23 49 49 49 ++43 43 43 27 27 27 10 10 10 17 17 17 24 24 24 17 17 17 23 23 23 46 46 46 ++46 46 46 31 31 31 14 14 14 16 16 16 20 20 20 11 11 11 21 21 21 50 50 50 ++57 57 57 25 25 25 10 10 10 21 21 21 21 21 21 13 13 13 23 23 23 42 42 42 ++57 57 57 39 39 39 14 14 14 3 3 3 3 3 3 0 0 0 10 10 10 36 36 36 ++58 58 58 43 43 43 10 10 10 0 0 0 8 8 8 0 0 0 0 0 0 29 29 29 ++63 63 63 36 36 36 10 10 10 19 19 19 13 13 13 0 0 0 13 13 13 8 8 8 ++56 56 56 38 38 38 21 21 21 11 11 11 0 0 0 4 4 4 14 14 14 17 17 17 ++52 52 52 44 44 44 13 13 13 0 0 0 19 19 19 19 19 19 8 8 8 21 21 21 ++54 54 54 52 52 52 32 32 32 11 11 11 13 13 13 13 13 13 6 6 6 14 14 14 ++48 48 48 50 50 50 31 31 31 28 28 28 28 28 28 16 16 16 16 16 16 14 14 14 ++33 33 33 56 56 56 34 34 34 14 14 14 23 23 23 23 23 23 23 23 23 21 21 21 ++27 27 27 21 21 21 21 21 21 27 27 27 28 28 28 24 24 24 23 23 23 25 25 25 ++25 25 25 32 32 32 49 49 49 52 52 52 36 36 36 27 27 27 32 32 32 31 31 31 ++36 36 36 23 23 23 34 34 34 53 53 53 49 49 49 34 34 34 32 32 32 33 33 33 ++38 38 38 32 32 32 33 33 33 44 44 44 52 52 52 50 50 50 42 42 42 37 37 37 ++39 39 39 40 40 40 37 37 37 37 37 37 50 50 50 63 63 63 57 57 57 39 39 39 ++38 38 38 38 38 38 43 43 43 52 52 52 80 80 80 73 73 73 73 73 73 46 46 46 ++44 44 44 61 61 61 74 74 74 65 65 65 43 43 43 42 42 42 60 60 60 74 74 74 ++76 76 76 71 71 71 44 44 44 45 45 45 46 46 46 54 54 54 83 83 83 77 77 77 ++81 81 81 63 63 63 42 42 42 59 59 59 81 81 81 80 80 80 44 44 44 50 50 50 ++71 71 71 78 78 78 90 90 90 85 85 85 59 59 59 48 48 48 61 61 61 76 76 76 ++80 80 80 61 61 61 39 39 39 58 58 58 72 72 72 81 81 81 87 87 87 57 57 57 ++53 53 53 70 70 70 52 52 52 48 48 48 43 43 43 44 44 44 68 68 68 59 59 59 ++74 74 74 71 71 71 71 71 71 74 74 74 71 71 71 62 62 62 59 59 59 61 61 61 ++60 60 60 58 58 58 51 51 51 68 68 68 68 68 68 42 42 42 33 33 33 36 36 36 ++39 39 39 45 45 45 67 67 67 70 70 70 43 43 43 31 31 31 37 37 37 33 33 33 ++39 39 39 33 33 33 31 31 31 43 43 43 60 60 60 71 71 71 70 70 70 63 63 63 ++52 52 52 73 73 73 69 69 69 67 67 67 54 54 54 51 51 51 34 34 34 29 29 29 ++29 29 29 25 25 25 21 21 21 21 21 21 24 24 24 25 25 25 23 23 23 19 19 19 ++32 32 32 49 49 49 58 58 58 48 48 48 28 28 28 17 17 17 17 17 17 21 21 21 ++19 19 19 10 10 10 11 11 11 19 19 19 44 44 44 60 60 60 50 50 50 52 52 52 ++53 53 53 60 60 60 59 59 59 54 54 54 53 53 53 50 50 50 50 50 50 60 60 60 ++61 61 61 54 54 54 49 49 49 50 50 50 56 56 56 59 59 59 56 56 56 51 51 51 ++46 46 46 46 46 46 51 51 51 57 57 57 51 51 51 32 32 32 8 8 8 0 0 0 ++16 16 16 56 56 56 50 50 50 4 4 4 0 0 0 8 8 8 13 13 13 57 57 57 ++49 49 49 38 38 38 23 23 23 48 48 48 32 32 32 52 52 52 32 32 32 13 13 13 ++16 16 16 17 17 17 40 40 40 46 46 46 34 34 34 32 32 32 33 33 33 39 39 39 ++54 54 54 42 42 42 31 31 31 29 29 29 29 29 29 28 28 28 27 27 27 29 29 29 ++32 32 32 32 32 32 42 42 42 45 45 45 33 33 33 31 31 31 44 44 44 53 53 53 ++28 28 28 40 40 40 45 45 45 25 25 25 10 10 10 0 0 0 4 4 4 50 50 50 ++24 24 24 0 0 0 23 23 23 36 36 36 42 42 42 0 0 0 37 37 37 51 51 51 ++28 28 28 32 32 32 34 34 34 6 6 6 0 0 0 3 3 3 0 0 0 23 23 23 ++36 36 36 33 33 33 10 10 10 3 3 3 0 0 0 0 0 0 28 28 28 51 51 51 ++28 28 28 0 0 0 57 57 57 13 13 13 44 44 44 29 29 29 0 0 0 40 40 40 ++25 25 25 6 6 6 6 6 6 3 3 3 0 0 0 4 4 4 3 3 3 6 6 6 ++11 11 11 0 0 0 11 11 11 44 44 44 54 54 54 44 44 44 39 39 39 45 45 45 ++45 45 45 52 52 52 44 44 44 0 0 0 10 10 10 31 31 31 6 6 6 20 20 20 ++16 16 16 10 10 10 13 13 13 14 14 14 13 13 13 28 28 28 40 40 40 36 36 36 ++11 11 11 4 4 4 0 0 0 10 10 10 17 17 17 6 6 6 6 6 6 29 29 29 ++49 49 49 50 50 50 21 21 21 24 24 24 44 44 44 43 43 43 43 43 43 44 44 44 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 10 10 10 13 13 13 14 14 14 ++21 21 21 21 21 21 21 21 21 20 20 20 19 19 19 17 17 17 16 16 16 14 14 14 ++17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 ++20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ++16 16 16 16 16 16 17 17 17 20 20 20 17 17 17 14 14 14 21 21 21 29 29 29 ++46 46 46 39 39 39 17 17 17 14 14 14 27 27 27 16 16 16 8 8 8 32 32 32 ++49 49 49 40 40 40 27 27 27 20 20 20 21 21 21 16 16 16 14 14 14 25 25 25 ++46 46 46 42 42 42 27 27 27 16 16 16 17 17 17 20 20 20 23 23 23 32 32 32 ++54 54 54 45 45 45 27 27 27 17 17 17 23 23 23 23 23 23 19 19 19 20 20 20 ++38 38 38 57 57 57 37 37 37 10 10 10 23 23 23 23 23 23 13 13 13 27 27 27 ++46 46 46 54 54 54 42 42 42 13 13 13 0 0 0 3 3 3 4 4 4 4 4 4 ++43 43 43 50 50 50 38 38 38 11 11 11 0 0 0 3 3 3 3 3 3 0 0 0 ++21 21 21 59 59 59 45 45 45 16 16 16 10 10 10 0 0 0 3 3 3 8 8 8 ++27 27 27 57 57 57 42 42 42 10 10 10 13 13 13 10 10 10 0 0 0 11 11 11 ++20 20 20 45 45 45 51 51 51 23 23 23 0 0 0 11 11 11 20 20 20 4 4 4 ++27 27 27 44 44 44 54 54 54 32 32 32 0 0 0 8 8 8 21 21 21 8 8 8 ++13 13 13 46 46 46 49 49 49 38 38 38 28 28 28 23 23 23 25 25 25 17 17 17 ++20 20 20 46 46 46 51 51 51 37 37 37 16 16 16 14 14 14 28 28 28 17 17 17 ++20 20 20 23 23 23 24 24 24 21 21 21 21 21 21 25 25 25 28 28 28 27 27 27 ++27 27 27 45 45 45 51 51 51 38 38 38 25 25 25 25 25 25 31 31 31 36 36 36 ++25 25 25 37 37 37 50 50 50 51 51 51 39 39 39 32 32 32 37 37 37 42 42 42 ++38 38 38 38 38 38 44 44 44 54 54 54 53 53 53 44 44 44 37 37 37 37 37 37 ++43 43 43 38 38 38 42 42 42 54 54 54 62 62 62 56 56 56 45 45 45 39 39 39 ++45 45 45 51 51 51 38 38 38 48 48 48 61 61 61 77 77 77 69 69 69 43 43 43 ++46 46 46 34 34 34 68 68 68 83 83 83 58 58 58 69 69 69 85 85 85 56 56 56 ++66 66 66 77 77 77 67 67 67 51 51 51 39 39 39 54 54 54 85 85 85 84 84 84 ++89 89 89 61 61 61 50 50 50 68 68 68 69 69 69 83 83 83 78 78 78 70 70 70 ++87 87 87 87 87 87 87 87 87 83 83 83 74 74 74 67 67 67 62 62 62 58 58 58 ++75 75 75 75 75 75 67 67 67 69 69 69 60 60 60 65 65 65 89 89 89 82 82 82 ++70 70 70 57 57 57 39 39 39 44 44 44 54 54 54 61 61 61 69 69 69 70 70 70 ++77 77 77 76 76 76 72 72 72 67 67 67 63 63 63 61 61 61 60 60 60 60 60 60 ++63 63 63 59 59 59 50 50 50 63 63 63 68 68 68 50 50 50 44 44 44 45 45 45 ++36 36 36 32 32 32 46 46 46 66 66 66 62 62 62 46 46 46 39 39 39 40 40 40 ++37 37 37 33 33 33 31 31 31 32 32 32 42 42 42 53 53 53 65 65 65 71 71 71 ++54 54 54 62 62 62 51 51 51 48 48 48 45 45 45 59 59 59 63 63 63 72 72 72 ++52 52 52 44 44 44 33 33 33 24 24 24 20 20 20 21 21 21 23 23 23 23 23 23 ++8 8 8 24 24 24 40 40 40 52 52 52 53 53 53 45 45 45 28 28 28 13 13 13 ++27 27 27 39 39 39 53 53 53 52 52 52 56 56 56 59 59 59 52 52 52 59 59 59 ++50 50 50 58 58 58 59 59 59 56 56 56 56 56 56 53 53 53 52 52 52 58 58 58 ++56 56 56 52 52 52 50 50 50 49 49 49 50 50 50 51 51 51 52 52 52 51 51 51 ++49 49 49 48 48 48 49 49 49 53 53 53 52 52 52 43 43 43 27 27 27 16 16 16 ++44 44 44 58 58 58 54 54 54 25 25 25 13 13 13 6 6 6 0 0 0 23 23 23 ++56 56 56 57 57 57 52 52 52 57 57 57 39 39 39 56 56 56 53 53 53 50 50 50 ++48 48 48 38 38 38 43 43 43 45 45 45 45 45 45 40 40 40 37 37 37 52 52 52 ++39 39 39 36 36 36 29 29 29 25 25 25 25 25 25 27 27 27 28 28 28 28 28 28 ++43 43 43 42 42 42 49 49 49 51 51 51 46 46 46 48 48 48 51 51 51 49 49 49 ++51 51 51 59 59 59 57 57 57 32 32 32 20 20 20 19 19 19 11 11 11 27 27 27 ++37 37 37 19 19 19 36 36 36 31 31 31 31 31 31 17 17 17 42 42 42 45 45 45 ++28 28 28 28 28 28 36 36 36 17 17 17 11 11 11 14 14 14 6 6 6 28 28 28 ++38 38 38 32 32 32 6 6 6 3 3 3 10 10 10 10 10 10 29 29 29 43 43 43 ++25 25 25 10 10 10 50 50 50 19 19 19 31 31 31 33 33 33 31 31 31 42 42 42 ++21 21 21 8 8 8 16 16 16 14 14 14 11 11 11 14 14 14 10 10 10 8 8 8 ++8 8 8 17 17 17 24 24 24 32 32 32 44 44 44 48 48 48 40 40 40 31 31 31 ++21 21 21 29 29 29 38 38 38 28 28 28 20 20 20 28 28 28 23 23 23 10 10 10 ++11 11 11 17 17 17 11 11 11 6 6 6 21 21 21 37 37 37 36 36 36 25 25 25 ++16 16 16 8 8 8 8 8 8 20 20 20 29 29 29 24 24 24 21 21 21 31 31 31 ++36 36 36 40 40 40 29 29 29 24 24 24 32 32 32 40 40 40 43 43 43 36 36 36 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 8 8 8 13 13 13 17 17 17 20 20 20 21 21 21 ++19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 21 21 21 23 23 23 24 24 24 ++20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ++17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 ++16 16 16 16 16 16 19 19 19 20 20 20 19 19 19 14 14 14 16 16 16 20 20 20 ++29 29 29 48 48 48 37 37 37 14 14 14 20 20 20 24 24 24 16 16 16 17 17 17 ++27 27 27 46 46 46 44 44 44 23 23 23 16 16 16 24 24 24 23 23 23 11 11 11 ++27 27 27 49 49 49 48 48 48 21 21 21 10 10 10 17 17 17 19 19 19 11 11 11 ++23 23 23 48 48 48 50 50 50 25 25 25 13 13 13 17 17 17 17 17 17 10 10 10 ++19 19 19 43 43 43 50 50 50 31 31 31 14 14 14 17 17 17 19 19 19 11 11 11 ++21 21 21 46 46 46 53 53 53 36 36 36 19 19 19 10 10 10 0 0 0 0 0 0 ++10 10 10 38 38 38 57 57 57 42 42 42 8 8 8 0 0 0 3 3 3 0 0 0 ++0 0 0 36 36 36 57 57 57 45 45 45 13 13 13 0 0 0 11 11 11 8 8 8 ++0 0 0 36 36 36 54 54 54 42 42 42 16 16 16 0 0 0 4 4 4 11 11 11 ++0 0 0 24 24 24 49 49 49 49 49 49 24 24 24 4 4 4 10 10 10 14 14 14 ++10 10 10 20 20 20 45 45 45 52 52 52 28 28 28 8 8 8 14 14 14 19 19 19 ++11 11 11 29 29 29 42 42 42 56 56 56 49 49 49 23 23 23 14 14 14 19 19 19 ++16 16 16 24 24 24 40 40 40 53 53 53 38 38 38 16 16 16 21 21 21 27 27 27 ++17 17 17 23 23 23 28 28 28 29 29 29 28 28 28 28 28 28 28 28 28 29 29 29 ++42 42 42 48 48 48 37 37 37 25 25 25 32 32 32 33 33 33 29 29 29 33 33 33 ++31 31 31 50 50 50 54 54 54 42 42 42 33 33 33 36 36 36 39 39 39 42 42 42 ++32 32 32 49 49 49 61 61 61 57 57 57 44 44 44 36 36 36 39 39 39 46 46 46 ++42 42 42 44 44 44 54 54 54 65 65 65 61 61 61 48 48 48 42 42 42 45 45 45 ++48 48 48 39 39 39 52 52 52 49 49 49 75 75 75 58 58 58 75 75 75 69 69 69 ++43 43 43 53 53 53 45 45 45 58 58 58 90 90 90 82 82 82 49 49 49 42 42 42 ++48 48 48 65 65 65 77 77 77 72 72 72 62 62 62 67 67 67 72 72 72 66 66 66 ++81 81 81 84 84 84 67 67 67 68 68 68 70 70 70 82 82 82 84 84 84 92 92 92 ++78 78 78 65 65 65 73 73 73 90 90 90 87 87 87 77 77 77 65 65 65 44 44 44 ++50 50 50 70 70 70 80 80 80 76 76 76 52 52 52 50 50 50 83 83 83 93 93 93 ++87 87 87 62 62 62 54 54 54 60 60 60 76 76 76 87 87 87 81 81 81 85 85 85 ++84 84 84 84 84 84 76 76 76 66 66 66 62 62 62 67 67 67 68 68 68 65 65 65 ++67 67 67 65 65 65 60 60 60 71 71 71 82 82 82 75 75 75 72 72 72 73 73 73 ++82 82 82 74 74 74 69 69 69 76 76 76 82 82 82 67 67 67 52 52 52 56 56 56 ++40 40 40 43 43 43 44 44 44 40 40 40 37 37 37 38 38 38 43 43 43 48 48 48 ++63 63 63 62 62 62 51 51 51 43 43 43 38 38 38 44 44 44 43 43 43 50 50 50 ++61 61 61 57 57 57 50 50 50 44 44 44 40 40 40 38 38 38 38 38 38 38 38 38 ++40 40 40 33 33 33 29 29 29 36 36 36 46 46 46 51 51 51 48 48 48 43 43 43 ++46 46 46 52 52 52 57 57 57 50 50 50 48 48 48 46 46 46 37 37 37 38 38 38 ++44 44 44 52 52 52 51 51 51 45 45 45 43 43 43 42 42 42 37 37 37 34 34 34 ++39 39 39 40 40 40 42 42 42 39 39 39 36 36 36 36 36 36 38 38 38 42 42 42 ++40 40 40 38 38 38 36 36 36 37 37 37 42 42 42 42 42 42 34 34 34 24 24 24 ++32 32 32 29 29 29 39 39 39 34 34 34 23 23 23 24 24 24 28 28 28 34 34 34 ++36 36 36 39 39 39 39 39 39 34 34 34 25 25 25 33 33 33 34 34 34 29 29 29 ++32 32 32 25 25 25 24 24 24 28 28 28 38 38 38 29 29 29 14 14 14 31 31 31 ++31 31 31 32 32 32 32 32 32 29 29 29 28 28 28 28 28 28 28 28 28 27 27 27 ++24 24 24 29 29 29 37 37 37 38 38 38 32 32 32 31 31 31 32 32 32 29 29 29 ++24 24 24 28 28 28 31 31 31 20 20 20 20 20 20 28 28 28 25 25 25 28 28 28 ++44 44 44 32 32 32 36 36 36 25 25 25 21 21 21 23 23 23 32 32 32 29 29 29 ++29 29 29 25 25 25 34 34 34 25 25 25 24 24 24 31 31 31 25 25 25 42 42 42 ++33 33 33 36 36 36 25 25 25 28 28 28 33 33 33 25 25 25 23 23 23 23 23 23 ++32 32 32 16 16 16 27 27 27 24 24 24 29 29 29 42 42 42 43 43 43 28 28 28 ++31 31 31 24 24 24 33 33 33 31 31 31 28 28 28 33 33 33 29 29 29 25 25 25 ++24 24 24 31 31 31 28 28 28 29 29 29 39 39 39 38 38 38 31 31 31 33 33 33 ++21 21 21 29 29 29 32 32 32 36 36 36 28 28 28 25 25 25 27 27 27 3 3 3 ++8 8 8 17 17 17 14 14 14 17 17 17 33 33 33 33 33 33 21 21 21 20 20 20 ++23 23 23 13 13 13 13 13 13 23 23 23 29 29 29 32 32 32 33 33 33 31 31 31 ++32 32 32 27 27 27 31 31 31 31 31 31 33 33 33 42 42 42 38 38 38 28 28 28 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++6 6 6 8 8 8 11 11 11 16 16 16 17 17 17 19 19 19 19 19 19 19 19 19 ++20 20 20 19 19 19 19 19 19 17 17 17 17 17 17 19 19 19 19 19 19 20 20 20 ++17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 19 19 19 17 17 17 17 17 17 ++8 8 8 32 32 32 49 49 49 37 37 37 14 14 14 21 21 21 29 29 29 17 17 17 ++11 11 11 37 37 37 49 49 49 37 37 37 20 20 20 13 13 13 11 11 11 10 10 10 ++0 0 0 24 24 24 43 43 43 42 42 42 24 24 24 3 3 3 0 0 0 6 6 6 ++0 0 0 21 21 21 44 44 44 42 42 42 21 21 21 0 0 0 0 0 0 17 17 17 ++4 4 4 6 6 6 36 36 36 50 50 50 25 25 25 3 3 3 6 6 6 6 6 6 ++0 0 0 16 16 16 38 38 38 53 53 53 44 44 44 16 16 16 0 0 0 10 10 10 ++0 0 0 11 11 11 42 42 42 57 57 57 38 38 38 8 8 8 0 0 0 8 8 8 ++10 10 10 0 0 0 33 33 33 63 63 63 39 39 39 8 8 8 8 8 8 8 8 8 ++11 11 11 3 3 3 33 33 33 54 54 54 37 37 37 13 13 13 10 10 10 8 8 8 ++10 10 10 3 3 3 17 17 17 49 49 49 58 58 58 23 23 23 0 0 0 20 20 20 ++17 17 17 11 11 11 17 17 17 44 44 44 56 56 56 29 29 29 4 4 4 17 17 17 ++21 21 21 4 4 4 16 16 16 51 51 51 62 62 62 39 39 39 20 20 20 19 19 19 ++20 20 20 19 19 19 20 20 20 42 42 42 58 58 58 39 39 39 20 20 20 27 27 27 ++29 29 29 27 27 27 28 28 28 33 33 33 32 32 32 27 27 27 32 32 32 42 42 42 ++48 48 48 36 36 36 25 25 25 32 32 32 40 40 40 34 34 34 29 29 29 39 39 39 ++49 49 49 53 53 53 43 43 43 33 33 33 39 39 39 44 44 44 39 39 39 37 37 37 ++45 45 45 61 61 61 62 62 62 44 44 44 33 33 33 40 40 40 46 46 46 44 44 44 ++43 43 43 58 58 58 66 66 66 57 57 57 46 46 46 45 45 45 49 49 49 50 50 50 ++43 43 43 57 57 57 58 58 58 81 81 81 54 54 54 54 54 54 53 53 53 78 78 78 ++70 70 70 49 49 49 49 49 49 69 69 69 82 82 82 84 84 84 72 72 72 53 53 53 ++57 57 57 46 46 46 63 63 63 80 80 80 83 83 83 76 76 76 59 59 59 52 52 52 ++67 67 67 94 94 94 84 84 84 76 76 76 72 72 72 76 76 76 77 77 77 91 91 91 ++74 74 74 48 48 48 61 61 61 91 91 91 92 92 92 83 83 83 72 72 72 52 52 52 ++62 62 62 72 72 72 80 80 80 82 82 82 65 65 65 56 56 56 76 76 76 85 85 85 ++89 89 89 83 83 83 85 85 85 83 83 83 87 87 87 92 92 92 85 85 85 83 83 83 ++85 85 85 84 84 84 77 77 77 69 69 69 66 66 66 66 66 66 63 63 63 60 60 60 ++61 61 61 62 62 62 60 60 60 63 63 63 69 69 69 63 63 63 59 59 59 61 61 61 ++60 60 60 61 61 61 58 58 58 56 56 56 60 60 60 60 60 60 57 57 57 57 57 57 ++53 53 53 57 57 57 59 59 59 59 59 59 57 57 57 54 54 54 54 54 54 57 57 57 ++51 51 51 49 49 49 50 50 50 50 50 50 50 50 50 52 52 52 48 48 48 53 53 53 ++48 48 48 49 49 49 49 49 49 49 49 49 48 48 48 45 45 45 44 44 44 43 43 43 ++48 48 48 44 44 44 42 42 42 44 44 44 45 45 45 44 44 44 44 44 44 44 44 44 ++43 43 43 36 36 36 32 32 32 37 37 37 42 42 42 42 42 42 37 37 37 37 37 37 ++33 33 33 38 38 38 38 38 38 33 33 33 34 34 34 39 39 39 38 38 38 34 34 34 ++32 32 32 34 34 34 37 37 37 36 36 36 33 33 33 31 31 31 32 32 32 33 33 33 ++31 31 31 33 33 33 31 31 31 28 28 28 31 31 31 36 36 36 36 36 36 29 29 29 ++36 36 36 24 24 24 28 28 28 32 32 32 28 28 28 34 34 34 36 36 36 24 24 24 ++32 32 32 28 28 28 32 32 32 31 31 31 34 34 34 29 29 29 31 31 31 25 25 25 ++24 24 24 28 28 28 31 31 31 21 21 21 27 27 27 33 33 33 28 28 28 33 33 33 ++25 25 25 23 23 23 23 23 23 27 27 27 29 29 29 29 29 29 29 29 29 29 29 29 ++27 27 27 28 28 28 32 32 32 34 34 34 31 31 31 24 24 24 21 21 21 21 21 21 ++32 32 32 27 27 27 31 31 31 33 33 33 28 28 28 24 24 24 29 29 29 39 39 39 ++36 36 36 37 37 37 21 21 21 25 25 25 34 34 34 21 21 21 25 25 25 32 32 32 ++32 32 32 25 25 25 32 32 32 20 20 20 23 23 23 36 36 36 32 32 32 43 43 43 ++25 25 25 32 32 32 31 31 31 31 31 31 32 32 32 27 27 27 28 28 28 34 34 34 ++34 34 34 28 28 28 23 23 23 38 38 38 39 39 39 45 45 45 27 27 27 27 27 27 ++25 25 25 17 17 17 24 24 24 19 19 19 14 14 14 23 23 23 21 21 21 20 20 20 ++28 28 28 23 23 23 23 23 23 42 42 42 49 49 49 21 21 21 11 11 11 42 42 42 ++33 33 33 38 38 38 25 25 25 17 17 17 29 29 29 38 38 38 38 38 38 36 36 36 ++17 17 17 14 14 14 20 20 20 36 36 36 38 38 38 16 16 16 4 4 4 21 21 21 ++24 24 24 14 14 14 14 14 14 16 16 16 14 14 14 23 23 23 31 31 31 25 25 25 ++39 39 39 19 19 19 27 27 27 39 39 39 49 49 49 45 45 45 24 24 24 24 24 24 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 6 6 6 ++16 16 16 17 17 17 19 19 19 19 19 19 19 19 19 17 17 17 16 16 16 16 16 16 ++19 19 19 19 19 19 20 20 20 20 20 20 19 19 19 19 19 19 17 17 17 16 16 16 ++20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ++20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ++19 19 19 19 19 19 17 17 17 17 17 17 17 17 17 19 19 19 19 19 19 17 17 17 ++19 19 19 10 10 10 32 32 32 51 51 51 36 36 36 16 16 16 17 17 17 23 23 23 ++21 21 21 11 11 11 24 24 24 48 48 48 43 43 43 16 16 16 4 4 4 20 20 20 ++8 8 8 0 0 0 16 16 16 46 46 46 44 44 44 11 11 11 0 0 0 0 0 0 ++8 8 8 0 0 0 6 6 6 40 40 40 44 44 44 14 14 14 0 0 0 0 0 0 ++0 0 0 3 3 3 13 13 13 34 34 34 46 46 46 20 20 20 0 0 0 0 0 0 ++0 0 0 0 0 0 17 17 17 45 45 45 52 52 52 36 36 36 13 13 13 0 0 0 ++8 8 8 0 0 0 8 8 8 38 38 38 57 57 57 42 42 42 11 11 11 0 0 0 ++10 10 10 4 4 4 14 14 14 39 39 39 56 56 56 37 37 37 6 6 6 6 6 6 ++20 20 20 10 10 10 0 0 0 24 24 24 56 56 56 48 48 48 14 14 14 3 3 3 ++8 8 8 11 11 11 10 10 10 23 23 23 48 48 48 49 49 49 27 27 27 6 6 6 ++14 14 14 21 21 21 16 16 16 20 20 20 45 45 45 51 51 51 29 29 29 6 6 6 ++19 19 19 16 16 16 17 17 17 24 24 24 43 43 43 56 56 56 40 40 40 11 11 11 ++19 19 19 29 29 29 25 25 25 21 21 21 44 44 44 57 57 57 39 39 39 19 19 19 ++34 34 34 29 29 29 25 25 25 23 23 23 25 25 25 32 32 32 43 43 43 51 51 51 ++39 39 39 28 28 28 33 33 33 40 40 40 34 34 34 29 29 29 40 40 40 52 52 52 ++54 54 54 46 46 46 33 33 33 34 34 34 45 45 45 43 43 43 39 39 39 49 49 49 ++68 68 68 61 61 61 48 48 48 36 36 36 39 39 39 49 49 49 46 46 46 37 37 37 ++57 57 57 66 66 66 62 62 62 46 46 46 40 40 40 50 50 50 53 53 53 46 46 46 ++45 45 45 59 59 59 80 80 80 52 52 52 54 54 54 43 43 43 59 59 59 54 54 54 ++85 85 85 66 66 66 81 81 81 82 82 82 52 52 52 67 67 67 89 89 89 68 68 68 ++66 66 66 44 44 44 61 61 61 82 82 82 88 88 88 80 80 80 57 57 57 54 54 54 ++74 74 74 84 84 84 93 93 93 94 94 94 68 68 68 76 76 76 81 81 81 69 69 69 ++85 85 85 75 75 75 68 68 68 78 78 78 92 92 92 91 91 91 81 81 81 76 76 76 ++82 82 82 65 65 65 56 56 56 72 72 72 80 80 80 78 78 78 84 84 84 85 85 85 ++85 85 85 92 92 92 92 92 92 90 90 90 81 81 81 70 70 70 69 69 69 63 63 63 ++56 56 56 54 54 54 58 58 58 66 66 66 71 71 71 70 70 70 69 69 69 70 70 70 ++70 70 70 71 71 71 69 69 69 65 65 65 63 63 63 61 61 61 61 61 61 69 69 69 ++65 65 65 66 66 66 68 68 68 66 66 66 61 61 61 63 63 63 63 63 63 58 58 58 ++65 65 65 65 65 65 63 63 63 59 59 59 56 56 56 56 56 56 60 60 60 65 65 65 ++59 59 59 53 53 53 59 59 59 53 53 53 51 51 51 51 51 51 48 48 48 52 52 52 ++53 53 53 54 54 54 54 54 54 54 54 54 54 54 54 56 56 56 57 57 57 58 58 58 ++46 46 46 50 50 50 52 52 52 51 51 51 45 45 45 43 43 43 44 44 44 49 49 49 ++53 53 53 46 46 46 49 49 49 56 56 56 48 48 48 29 29 29 28 28 28 37 37 37 ++45 45 45 45 45 45 45 45 45 42 42 42 43 43 43 49 49 49 52 52 52 49 49 49 ++44 44 44 44 44 44 45 45 45 46 46 46 48 48 48 46 46 46 43 43 43 39 39 39 ++38 38 38 44 44 44 46 46 46 40 40 40 38 38 38 42 42 42 43 43 43 43 43 43 ++50 50 50 36 36 36 19 19 19 16 16 16 25 25 25 38 38 38 37 37 37 17 17 17 ++40 40 40 28 28 28 33 33 33 39 39 39 34 34 34 11 11 11 10 10 10 14 14 14 ++25 25 25 37 37 37 40 40 40 11 11 11 0 0 0 33 33 33 48 48 48 43 43 43 ++29 29 29 14 14 14 4 4 4 14 14 14 25 25 25 29 29 29 34 34 34 42 42 42 ++49 49 49 43 43 43 42 42 42 48 48 48 45 45 45 31 31 31 17 17 17 14 14 14 ++4 4 4 0 0 0 4 4 4 13 13 13 10 10 10 8 8 8 21 21 21 32 32 32 ++19 19 19 44 44 44 13 13 13 21 21 21 50 50 50 24 24 24 38 38 38 51 51 51 ++49 49 49 43 43 43 45 45 45 25 25 25 19 19 19 29 29 29 16 16 16 11 11 11 ++29 29 29 24 24 24 8 8 8 0 0 0 0 0 0 0 0 0 17 17 17 39 39 39 ++21 21 21 46 46 46 46 46 46 43 43 43 37 37 37 42 42 42 4 4 4 45 45 45 ++14 14 14 0 0 0 6 6 6 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 14 14 14 38 38 38 43 43 43 11 11 11 0 0 0 36 36 36 ++49 49 49 42 42 42 42 42 42 19 19 19 23 23 23 46 46 46 45 45 45 53 53 53 ++37 37 37 21 21 21 27 27 27 38 38 38 25 25 25 4 4 4 6 6 6 19 19 19 ++20 20 20 16 16 16 19 19 19 14 14 14 3 3 3 10 10 10 20 20 20 16 16 16 ++36 36 36 27 27 27 29 29 29 38 38 38 52 52 52 42 42 42 10 10 10 19 19 19 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 10 10 10 11 11 11 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 17 17 17 ++17 17 17 19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 16 16 16 16 16 16 ++14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++10 10 10 11 11 11 10 10 10 6 6 6 8 8 8 11 11 11 13 13 13 10 10 10 ++19 19 19 6 6 6 4 4 4 28 28 28 45 45 45 34 34 34 17 17 17 17 17 17 ++24 24 24 6 6 6 8 8 8 32 32 32 46 46 46 46 46 46 32 32 32 16 16 16 ++20 20 20 10 10 10 6 6 6 19 19 19 37 37 37 44 44 44 25 25 25 0 0 0 ++6 6 6 0 0 0 0 0 0 14 14 14 36 36 36 46 46 46 28 28 28 0 0 0 ++0 0 0 0 0 0 0 0 0 14 14 14 36 36 36 45 45 45 28 28 28 0 0 0 ++0 0 0 0 0 0 0 0 0 17 17 17 40 40 40 57 57 57 39 39 39 0 0 0 ++0 0 0 3 3 3 0 0 0 8 8 8 42 42 42 57 57 57 38 38 38 10 10 10 ++0 0 0 8 8 8 20 20 20 13 13 13 27 27 27 56 56 56 45 45 45 10 10 10 ++8 8 8 8 8 8 0 0 0 0 0 0 32 32 32 56 56 56 48 48 48 19 19 19 ++0 0 0 10 10 10 17 17 17 10 10 10 16 16 16 51 51 51 57 57 57 23 23 23 ++8 8 8 13 13 13 19 19 19 14 14 14 21 21 21 49 49 49 54 54 54 32 32 32 ++13 13 13 20 20 20 25 25 25 11 11 11 21 21 21 52 52 52 52 52 52 34 34 34 ++24 24 24 17 17 17 29 29 29 27 27 27 25 25 25 46 46 46 52 52 52 39 39 39 ++23 23 23 28 28 28 28 28 28 24 24 24 31 31 31 43 43 43 46 46 46 40 40 40 ++36 36 36 32 32 32 37 37 37 36 36 36 29 29 29 42 42 42 56 56 56 52 52 52 ++43 43 43 39 39 39 38 38 38 44 44 44 44 44 44 39 39 39 48 48 48 66 66 66 ++60 60 60 46 46 46 40 40 40 46 46 46 50 50 50 48 48 48 50 50 50 58 58 58 ++71 71 71 61 61 61 51 51 51 48 48 48 51 51 51 53 53 53 51 51 51 48 48 48 ++66 66 66 69 69 69 53 53 53 60 60 60 43 43 43 68 68 68 50 50 50 53 53 53 ++53 53 53 94 94 94 91 91 91 59 59 59 53 53 53 54 54 54 61 61 61 84 84 84 ++68 68 68 66 66 66 80 80 80 81 81 81 76 76 76 78 78 78 72 72 72 73 73 73 ++91 91 91 90 90 90 93 93 93 91 91 91 77 77 77 84 84 84 67 67 67 54 54 54 ++70 70 70 99 99 99 90 90 90 72 72 72 88 88 88 92 92 92 84 84 84 93 93 93 ++82 82 82 56 56 56 45 45 45 69 69 69 92 92 92 96 96 96 92 92 92 88 88 88 ++92 92 92 91 91 91 84 84 84 87 87 87 76 76 76 54 54 54 53 53 53 52 52 52 ++54 54 54 52 52 52 57 57 57 69 69 69 73 73 73 70 70 70 66 66 66 67 67 67 ++69 69 69 66 66 66 62 62 62 53 53 53 53 53 53 56 56 56 60 60 60 75 75 75 ++62 62 62 48 48 48 44 44 44 49 49 49 44 44 44 42 42 42 44 44 44 44 44 44 ++53 53 53 61 61 61 68 68 68 66 66 66 54 54 54 43 43 43 38 38 38 37 37 37 ++61 61 61 59 59 59 76 76 76 66 66 66 57 57 57 49 49 49 37 37 37 34 34 34 ++48 48 48 48 48 48 50 50 50 52 52 52 54 54 54 56 56 56 56 56 56 54 54 54 ++67 67 67 69 69 69 68 68 68 65 65 65 65 65 65 68 68 68 67 67 67 63 63 63 ++59 59 59 50 50 50 50 50 50 59 59 59 48 48 48 28 28 28 31 31 31 38 38 38 ++56 56 56 52 52 52 52 52 52 53 53 53 52 52 52 54 54 54 57 57 57 54 54 54 ++56 56 56 53 53 53 52 52 52 54 54 54 58 58 58 58 58 58 53 53 53 49 49 49 ++49 49 49 54 54 54 58 58 58 56 56 56 51 51 51 49 49 49 50 50 50 50 50 50 ++52 52 52 49 49 49 28 28 28 6 6 6 0 0 0 21 21 21 46 46 46 52 52 52 ++52 52 52 25 25 25 31 31 31 56 56 56 48 48 48 28 28 28 8 8 8 0 0 0 ++0 0 0 21 21 21 40 40 40 20 20 20 6 6 6 33 33 33 36 36 36 13 13 13 ++44 44 44 28 28 28 14 14 14 16 16 16 24 24 24 32 32 32 42 42 42 51 51 51 ++45 45 45 51 51 51 54 54 54 49 49 49 33 33 33 6 6 6 0 0 0 4 4 4 ++0 0 0 8 8 8 0 0 0 0 0 0 6 6 6 16 16 16 20 20 20 13 13 13 ++6 6 6 48 48 48 23 23 23 10 10 10 48 48 48 13 13 13 36 36 36 52 52 52 ++49 49 49 43 43 43 52 52 52 42 42 42 37 37 37 44 44 44 27 27 27 19 19 19 ++32 32 32 24 24 24 19 19 19 14 14 14 19 19 19 20 20 20 24 24 24 44 44 44 ++14 14 14 50 50 50 52 52 52 25 25 25 21 21 21 43 43 43 3 3 3 43 43 43 ++21 21 21 3 3 3 4 4 4 4 4 4 0 0 0 3 3 3 0 0 0 0 0 0 ++4 4 4 28 28 28 34 34 34 29 29 29 34 34 34 38 38 38 40 40 40 50 50 50 ++54 54 54 33 33 33 58 58 58 45 45 45 23 23 23 45 45 45 50 50 50 50 50 50 ++50 50 50 38 38 38 33 33 33 24 24 24 8 8 8 13 13 13 20 20 20 11 11 11 ++14 14 14 19 19 19 24 24 24 21 21 21 11 11 11 8 8 8 11 11 11 11 11 11 ++21 21 21 38 38 38 37 37 37 28 28 28 37 37 37 29 29 29 4 4 4 10 10 10 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 3 3 3 6 6 6 10 10 10 14 14 14 17 17 17 ++19 19 19 17 17 17 17 17 17 17 17 17 17 17 17 19 19 19 19 19 19 19 19 19 ++21 21 21 20 20 20 16 16 16 11 11 11 8 8 8 4 4 4 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 6 6 6 6 6 6 0 0 0 0 0 0 3 3 3 4 4 4 0 0 0 ++3 3 3 8 8 8 0 0 0 0 0 0 23 23 23 40 40 40 34 34 34 19 19 19 ++20 20 20 23 23 23 21 21 21 16 16 16 27 27 27 49 49 49 44 44 44 14 14 14 ++20 20 20 24 24 24 19 19 19 0 0 0 14 14 14 46 46 46 44 44 44 8 8 8 ++0 0 0 6 6 6 8 8 8 0 0 0 8 8 8 44 44 44 49 49 49 23 23 23 ++6 6 6 0 0 0 0 0 0 4 4 4 4 4 4 40 40 40 54 54 54 23 23 23 ++6 6 6 0 0 0 0 0 0 3 3 3 25 25 25 50 50 50 51 51 51 29 29 29 ++0 0 0 3 3 3 3 3 3 0 0 0 11 11 11 38 38 38 50 50 50 43 43 43 ++11 11 11 0 0 0 23 23 23 13 13 13 0 0 0 40 40 40 59 59 59 36 36 36 ++14 14 14 0 0 0 14 14 14 13 13 13 0 0 0 31 31 31 58 58 58 45 45 45 ++23 23 23 6 6 6 11 11 11 14 14 14 6 6 6 27 27 27 50 50 50 50 50 50 ++27 27 27 10 10 10 13 13 13 20 20 20 19 19 19 29 29 29 49 49 49 56 56 56 ++24 24 24 10 10 10 16 16 16 19 19 19 24 24 24 42 42 42 51 51 51 59 59 59 ++43 43 43 11 11 11 24 24 24 34 34 34 25 25 25 29 29 29 43 43 43 56 56 56 ++33 33 33 29 29 29 31 31 31 39 39 39 46 46 46 46 46 46 38 38 38 32 32 32 ++38 38 38 37 37 37 34 34 34 33 33 33 42 42 42 56 56 56 56 56 56 44 44 44 ++39 39 39 40 40 40 44 44 44 45 45 45 43 43 43 50 50 50 60 60 60 63 63 63 ++43 43 43 42 42 42 46 46 46 53 53 53 51 51 51 48 48 48 59 59 59 75 75 75 ++66 66 66 53 53 53 48 48 48 53 53 53 57 57 57 53 53 53 57 57 57 66 66 66 ++87 87 87 62 62 62 58 58 58 56 56 56 62 62 62 57 57 57 52 52 52 60 60 60 ++73 73 73 89 89 89 90 90 90 75 75 75 63 63 63 52 52 52 53 53 53 67 67 67 ++87 87 87 88 88 88 85 85 85 65 65 65 54 54 54 74 74 74 92 92 92 96 97 98 ++92 92 92 89 89 89 88 88 88 84 84 84 87 87 87 91 91 91 56 56 56 62 62 62 ++66 66 66 88 88 88 93 93 93 83 83 83 83 83 83 91 91 91 89 89 89 84 84 84 ++90 90 90 81 81 81 78 78 78 84 84 84 90 90 90 89 89 89 85 85 85 87 87 87 ++99 99 99 90 90 90 88 88 88 84 84 84 78 78 78 70 70 70 58 58 58 57 57 57 ++58 58 58 58 58 58 59 59 59 66 66 66 72 72 72 74 74 74 73 73 73 72 72 72 ++77 77 77 68 68 68 60 60 60 51 51 51 51 51 51 52 52 52 49 49 49 65 65 65 ++78 78 78 67 67 67 51 51 51 46 46 46 48 48 48 43 43 43 43 43 43 49 49 49 ++40 40 40 51 51 51 63 63 63 71 71 71 69 69 69 60 60 60 50 50 50 44 44 44 ++34 34 34 42 42 42 75 75 75 68 68 68 65 65 65 65 65 65 61 61 61 61 61 61 ++37 37 37 34 34 34 32 32 32 32 32 32 33 33 33 32 32 32 29 29 29 25 25 25 ++27 27 27 37 37 37 45 45 45 52 52 52 61 61 61 65 65 65 49 49 49 25 25 25 ++27 27 27 21 21 21 24 24 24 45 45 45 53 53 53 52 52 52 59 59 59 53 53 53 ++32 32 32 28 28 28 40 40 40 54 54 54 56 56 56 57 57 57 60 60 60 61 61 61 ++60 60 60 57 57 57 53 53 53 53 53 53 56 56 56 57 57 57 56 56 56 54 54 54 ++51 51 51 52 52 52 54 54 54 58 58 58 57 57 57 52 52 52 49 49 49 49 49 49 ++60 60 60 63 63 63 53 53 53 34 34 34 0 0 0 0 0 0 39 39 39 57 57 57 ++43 43 43 4 4 4 0 0 0 50 50 50 42 42 42 44 44 44 27 27 27 10 10 10 ++0 0 0 11 11 11 36 36 36 42 42 42 48 48 48 49 49 49 23 23 23 0 0 0 ++34 34 34 36 36 36 32 32 32 27 27 27 29 29 29 39 39 39 46 46 46 49 49 49 ++42 42 42 56 56 56 53 53 53 32 32 32 8 8 8 0 0 0 0 0 0 4 4 4 ++0 0 0 10 10 10 0 0 0 0 0 0 19 19 19 19 19 19 13 13 13 0 0 0 ++4 4 4 29 29 29 40 40 40 16 16 16 46 46 46 0 0 0 19 19 19 46 46 46 ++33 33 33 21 21 21 42 42 42 49 49 49 51 51 51 56 56 56 43 43 43 44 44 44 ++27 27 27 29 29 29 45 45 45 56 56 56 57 57 57 48 48 48 40 40 40 60 60 60 ++31 31 31 42 42 42 44 44 44 23 23 23 14 14 14 43 43 43 21 21 21 28 28 28 ++29 29 29 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 3 3 3 ++21 21 21 27 27 27 16 16 16 0 0 0 0 0 0 21 21 21 31 31 31 31 31 31 ++44 44 44 14 14 14 40 40 40 54 54 54 40 40 40 49 49 49 57 57 57 51 51 51 ++48 48 48 49 49 49 39 39 39 21 21 21 10 10 10 17 17 17 20 20 20 10 10 10 ++13 13 13 17 17 17 20 20 20 21 21 21 20 20 20 14 14 14 11 11 11 16 16 16 ++24 24 24 39 39 39 33 33 33 21 21 21 20 20 20 16 16 16 13 13 13 8 8 8 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 4 4 4 8 8 8 13 13 13 17 17 17 20 20 20 ++20 20 20 19 19 19 17 17 17 16 16 16 16 16 16 16 16 16 17 17 17 19 19 19 ++6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++0 0 0 6 6 6 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 17 17 17 39 39 39 29 29 29 ++3 3 3 8 8 8 20 20 20 20 20 20 16 16 16 28 28 28 44 44 44 48 48 48 ++20 20 20 13 13 13 19 19 19 23 23 23 11 11 11 11 11 11 33 33 33 51 51 51 ++11 11 11 0 0 0 0 0 0 4 4 4 0 0 0 10 10 10 38 38 38 57 57 57 ++11 11 11 10 10 10 0 0 0 0 0 0 0 0 0 11 11 11 34 34 34 56 56 56 ++21 21 21 0 0 0 3 3 3 16 16 16 16 16 16 21 21 21 43 43 43 59 59 59 ++29 29 29 0 0 0 0 0 0 8 8 8 0 0 0 10 10 10 43 43 43 58 58 58 ++39 39 39 10 10 10 11 11 11 17 17 17 8 8 8 3 3 3 24 24 24 65 65 65 ++40 40 40 19 19 19 3 3 3 11 11 11 13 13 13 3 3 3 27 27 27 62 62 62 ++49 49 49 24 24 24 4 4 4 13 13 13 14 14 14 4 4 4 24 24 24 54 54 54 ++50 50 50 34 34 34 13 13 13 13 13 13 24 24 24 19 19 19 25 25 25 52 52 52 ++59 59 59 28 28 28 21 21 21 24 24 24 25 25 25 33 33 33 33 33 33 40 40 40 ++59 59 59 34 34 34 25 25 25 24 24 24 29 29 29 29 29 29 25 25 25 44 44 44 ++63 63 63 36 36 36 27 27 27 48 48 48 54 54 54 38 38 38 31 31 31 40 40 40 ++33 33 33 39 39 39 39 39 39 43 43 43 54 54 54 52 52 52 43 43 43 45 45 45 ++46 46 46 45 45 45 44 44 44 39 39 39 46 46 46 67 67 67 69 69 69 49 49 49 ++48 48 48 51 51 51 50 50 50 45 45 45 49 49 49 60 60 60 67 67 67 67 67 67 ++51 51 51 50 50 50 52 52 52 56 56 56 52 52 52 52 52 52 68 68 68 88 88 88 ++60 60 60 58 58 58 57 57 57 61 61 61 49 49 49 63 63 63 58 58 58 75 75 75 ++90 90 90 62 62 62 66 66 66 88 88 88 84 84 84 65 65 65 59 59 59 62 62 62 ++93 93 93 91 91 91 81 81 81 63 63 63 58 58 58 78 78 78 96 97 98 96 97 98 ++83 83 83 60 60 60 85 85 85 93 93 93 80 80 80 93 93 93 72 72 72 73 73 73 ++99 99 99 66 66 66 76 76 76 93 93 93 82 82 82 96 96 96 101 101 101 61 61 61 ++88 88 88 96 96 96 96 97 98 82 82 82 66 66 66 63 63 63 74 74 74 88 88 88 ++93 93 93 89 89 89 99 99 99 82 82 82 80 80 80 91 91 91 68 68 68 62 62 62 ++60 60 60 61 61 61 59 59 59 58 58 58 63 63 63 73 73 73 75 75 75 71 71 71 ++73 73 73 59 59 59 54 54 54 51 51 51 57 57 57 56 56 56 45 45 45 57 57 57 ++73 73 73 82 82 82 67 67 67 50 50 50 54 54 54 52 52 52 44 44 44 49 49 49 ++51 51 51 46 46 46 44 44 44 51 51 51 62 62 62 71 71 71 72 72 72 70 70 70 ++53 53 53 51 51 51 72 72 72 46 46 46 36 36 36 43 43 43 52 52 52 60 60 60 ++75 75 75 65 65 65 50 50 50 38 38 38 33 33 33 32 32 32 32 32 32 32 32 32 ++28 28 28 29 29 29 24 24 24 23 23 23 42 42 42 62 62 62 62 62 62 48 48 48 ++25 25 25 33 33 33 40 40 40 58 58 58 62 62 62 60 60 60 58 58 58 36 36 36 ++14 14 14 11 11 11 32 32 32 54 54 54 57 57 57 53 53 53 56 56 56 57 57 57 ++62 62 62 59 59 59 56 56 56 52 52 52 52 52 52 54 54 54 58 58 58 60 60 60 ++53 53 53 48 48 48 49 49 49 56 56 56 60 60 60 56 56 56 49 49 49 46 46 46 ++44 44 44 46 46 46 54 54 54 62 62 62 38 38 38 24 24 24 45 45 45 46 46 46 ++59 59 59 23 23 23 8 8 8 44 44 44 16 16 16 37 37 37 38 38 38 34 34 34 ++6 6 6 0 0 0 0 0 0 24 24 24 49 49 49 42 42 42 6 6 6 0 0 0 ++0 0 0 20 20 20 34 34 34 29 29 29 31 31 31 44 44 44 48 48 48 42 42 42 ++52 52 52 54 54 54 32 32 32 0 0 0 0 0 0 8 8 8 6 6 6 0 0 0 ++0 0 0 8 8 8 0 0 0 13 13 13 31 31 31 13 13 13 0 0 0 0 0 0 ++4 4 4 0 0 0 53 53 53 34 34 34 58 58 58 0 0 0 11 11 11 54 54 54 ++51 51 51 27 27 27 39 39 39 46 46 46 39 39 39 29 29 29 11 11 11 20 20 20 ++31 31 31 31 31 31 46 46 46 48 48 48 34 34 34 13 13 13 10 10 10 44 44 44 ++49 49 49 38 38 38 51 51 51 46 46 46 21 21 21 37 37 37 38 38 38 28 28 28 ++40 40 40 6 6 6 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 16 16 16 ++39 39 39 16 16 16 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 4 4 4 ++46 46 46 19 19 19 16 16 16 48 48 48 56 56 56 48 48 48 50 50 50 46 46 46 ++38 38 38 50 50 50 46 46 46 32 32 32 24 24 24 14 14 14 8 8 8 16 16 16 ++14 14 14 16 16 16 11 11 11 14 14 14 23 23 23 19 19 19 14 14 14 23 23 23 ++39 39 39 36 36 36 21 21 21 21 21 21 16 16 16 8 8 8 20 20 20 11 11 11 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 10 10 10 17 17 17 17 17 17 17 17 17 20 20 20 ++16 16 16 17 17 17 17 17 17 19 19 19 19 19 19 14 14 14 8 8 8 3 3 3 ++0 0 0 4 4 4 8 8 8 13 13 13 16 16 16 19 19 19 21 21 21 21 21 21 ++20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++19 19 19 14 14 14 13 13 13 13 13 13 4 4 4 0 0 0 19 19 19 42 42 42 ++23 23 23 8 8 8 0 0 0 8 8 8 21 21 21 16 16 16 21 21 21 44 44 44 ++44 44 44 24 24 24 8 8 8 19 19 19 24 24 24 6 6 6 10 10 10 37 37 37 ++50 50 50 14 14 14 0 0 0 3 3 3 3 3 3 0 0 0 11 11 11 34 34 34 ++56 56 56 17 17 17 0 0 0 3 3 3 6 6 6 0 0 0 13 13 13 33 33 33 ++54 54 54 28 28 28 0 0 0 3 3 3 23 23 23 21 21 21 21 21 21 36 36 36 ++62 62 62 37 37 37 6 6 6 0 0 0 4 4 4 0 0 0 10 10 10 42 42 42 ++62 62 62 48 48 48 23 23 23 8 8 8 8 8 8 4 4 4 10 10 10 28 28 28 ++67 67 67 49 49 49 19 19 19 0 0 0 11 11 11 14 14 14 13 13 13 20 20 20 ++65 65 65 52 52 52 23 23 23 0 0 0 11 11 11 19 19 19 13 13 13 11 11 11 ++54 54 54 51 51 51 25 25 25 11 11 11 29 29 29 29 29 29 17 17 17 21 21 21 ++53 53 53 52 52 52 38 38 38 20 20 20 23 23 23 39 39 39 37 37 37 21 21 21 ++42 42 42 63 63 63 40 40 40 19 19 19 31 31 31 38 38 38 38 38 38 29 29 29 ++44 44 44 59 59 59 56 56 56 57 57 57 42 42 42 33 33 33 36 36 36 34 34 34 ++38 38 38 34 34 34 44 44 44 60 60 60 62 62 62 49 49 49 39 39 39 39 39 39 ++48 48 48 37 37 37 37 37 37 56 56 56 69 69 69 67 67 67 56 56 56 49 49 49 ++49 49 49 52 52 52 51 51 51 50 50 50 61 61 61 73 73 73 68 68 68 51 51 51 ++57 57 57 54 54 54 58 58 58 57 57 57 57 57 57 72 72 72 82 82 82 72 72 72 ++62 62 62 61 61 61 56 56 56 59 59 59 66 66 66 61 61 61 71 71 71 96 96 96 ++59 59 59 68 68 68 62 62 62 65 65 65 94 94 94 90 90 90 66 66 66 87 87 87 ++89 89 89 74 74 74 88 88 88 85 85 85 85 85 85 101 101 101 88 88 88 75 75 75 ++87 87 87 91 91 91 92 92 92 92 92 92 74 74 74 68 68 68 91 91 91 99 99 99 ++72 72 72 69 69 69 61 61 61 81 81 81 99 99 99 99 99 99 101 101 101 96 97 98 ++96 96 96 93 93 93 96 97 98 87 87 87 60 60 60 62 62 62 80 80 80 81 81 81 ++93 93 93 99 99 99 72 72 72 89 89 89 90 90 90 74 74 74 93 93 93 75 75 75 ++60 60 60 65 65 65 66 66 66 58 58 58 60 60 60 62 62 62 67 67 67 89 89 89 ++88 88 88 67 67 67 58 58 58 67 67 67 71 71 71 71 71 71 73 73 73 74 74 74 ++82 82 82 87 87 87 87 87 87 77 77 77 72 72 72 75 75 75 77 77 77 75 75 75 ++76 76 76 73 73 73 68 68 68 63 63 63 59 59 59 59 59 59 67 67 67 76 76 76 ++81 81 81 78 78 78 81 81 81 59 59 59 56 56 56 39 39 39 42 42 42 40 40 40 ++39 39 39 53 53 53 69 69 69 70 70 70 56 56 56 38 38 38 29 29 29 32 32 32 ++28 28 28 29 29 29 31 31 31 27 27 27 24 24 24 32 32 32 52 52 52 70 70 70 ++67 67 67 68 68 68 59 59 59 44 44 44 31 31 31 25 25 25 40 40 40 63 63 63 ++50 50 50 17 17 17 6 6 6 38 38 38 61 61 61 59 59 59 52 52 52 56 56 56 ++57 57 57 58 58 58 58 58 58 56 56 56 51 51 51 51 51 51 54 54 54 59 59 59 ++59 59 59 52 52 52 50 50 50 49 49 49 51 51 51 59 59 59 60 60 60 51 51 51 ++50 50 50 44 44 44 52 52 52 57 57 57 51 51 51 53 53 53 45 45 45 19 19 19 ++8 8 8 50 50 50 32 32 32 21 21 21 42 42 42 19 19 19 10 10 10 56 56 56 ++31 31 31 0 0 0 6 6 6 31 31 31 44 44 44 52 52 52 33 33 33 0 0 0 ++4 4 4 19 19 19 20 20 20 31 31 31 49 49 49 39 39 39 32 32 32 52 52 52 ++54 54 54 31 31 31 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 ++0 0 0 3 3 3 17 17 17 24 24 24 14 14 14 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 28 28 28 57 57 57 50 50 50 13 13 13 13 13 13 50 50 50 ++50 50 50 31 31 31 50 50 50 21 21 21 0 0 0 3 3 3 0 0 0 20 20 20 ++24 24 24 25 25 25 11 11 11 19 19 19 48 48 48 52 52 52 40 40 40 42 42 42 ++38 38 38 19 19 19 33 33 33 46 46 46 51 51 51 54 54 54 50 50 50 53 53 53 ++44 44 44 17 17 17 0 0 0 3 3 3 0 0 0 0 0 0 19 19 19 40 40 40 ++10 10 10 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++13 13 13 39 39 39 32 32 32 21 21 21 42 42 42 50 50 50 42 42 42 45 45 45 ++31 31 31 28 28 28 48 48 48 59 59 59 45 45 45 36 36 36 28 28 28 6 6 6 ++17 17 17 17 17 17 13 13 13 14 14 14 19 19 19 19 19 19 27 27 27 42 42 42 ++32 32 32 20 20 20 13 13 13 19 19 19 23 23 23 19 19 19 11 11 11 10 10 10 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 ++0 0 0 0 0 0 4 4 4 14 14 14 20 20 20 19 19 19 17 17 17 20 20 20 ++14 14 14 19 19 19 20 20 20 16 16 16 10 10 10 6 6 6 8 8 8 11 11 11 ++13 13 13 14 14 14 17 17 17 19 19 19 20 20 20 20 20 20 19 19 19 19 19 19 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++21 21 21 19 19 19 20 20 20 23 23 23 19 19 19 11 11 11 14 14 14 23 23 23 ++42 42 42 36 36 36 13 13 13 0 0 0 0 0 0 6 6 6 16 16 16 24 24 24 ++44 44 44 43 43 43 28 28 28 14 14 14 17 17 17 19 19 19 13 13 13 10 10 10 ++33 33 33 49 49 49 23 23 23 0 0 0 0 0 0 3 3 3 0 0 0 11 11 11 ++33 33 33 51 51 51 28 28 28 0 0 0 4 4 4 3 3 3 0 0 0 11 11 11 ++38 38 38 49 49 49 37 37 37 11 11 11 13 13 13 24 24 24 20 20 20 8 8 8 ++40 40 40 53 53 53 42 42 42 8 8 8 0 0 0 8 8 8 11 11 11 4 4 4 ++42 42 42 56 56 56 49 49 49 23 23 23 6 6 6 4 4 4 4 4 4 8 8 8 ++37 37 37 56 56 56 51 51 51 23 23 23 4 4 4 6 6 6 11 11 11 13 13 13 ++24 24 24 49 49 49 51 51 51 27 27 27 8 8 8 8 8 8 16 16 16 21 21 21 ++28 28 28 53 53 53 60 60 60 32 32 32 8 8 8 23 23 23 28 28 28 10 10 10 ++19 19 19 52 52 52 58 58 58 33 33 33 21 21 21 39 39 39 44 44 44 28 28 28 ++29 29 29 49 49 49 53 53 53 45 45 45 27 27 27 21 21 21 34 34 34 28 28 28 ++25 25 25 59 59 59 74 74 74 49 49 49 39 39 39 32 32 32 53 53 53 43 43 43 ++36 36 36 51 51 51 61 61 61 58 58 58 50 50 50 43 43 43 42 42 42 46 46 46 ++45 45 45 46 46 46 57 57 57 69 69 69 67 67 67 52 52 52 46 46 46 51 51 51 ++54 54 54 50 50 50 53 53 53 63 63 63 69 69 69 65 65 65 58 58 58 56 56 56 ++58 58 58 65 65 65 54 54 54 53 53 53 74 74 74 85 85 85 72 72 72 58 58 58 ++63 63 63 58 58 58 65 65 65 65 65 65 60 60 60 81 81 81 90 90 90 70 70 70 ++66 66 66 65 65 65 69 69 69 63 63 63 74 74 74 93 93 93 92 92 92 89 89 89 ++67 67 67 54 54 54 82 82 82 96 96 96 94 94 94 90 90 90 72 72 72 68 68 68 ++89 89 89 91 91 91 90 90 90 89 89 89 83 83 83 85 85 85 99 99 99 103 103 102 ++83 83 83 69 69 69 70 70 70 95 95 94 103 103 102 96 96 96 99 99 99 95 95 94 ++95 95 94 88 88 88 83 83 83 88 88 88 91 91 91 80 80 80 70 70 70 73 73 73 ++80 80 80 99 99 99 91 91 91 72 72 72 82 82 82 87 87 87 77 77 77 87 87 87 ++76 76 76 63 63 63 60 60 60 60 60 60 67 67 67 70 70 70 74 74 74 91 91 91 ++94 94 94 95 95 94 94 94 94 87 87 87 77 77 77 82 82 82 85 85 85 77 77 77 ++74 74 74 62 62 62 66 66 66 85 85 85 87 87 87 69 69 69 58 58 58 62 62 62 ++67 67 67 68 68 68 70 70 70 74 74 74 75 75 75 76 76 76 81 81 81 87 87 87 ++82 82 82 81 81 81 87 87 87 81 81 81 77 77 77 69 69 69 68 68 68 65 65 65 ++63 63 63 53 53 53 52 52 52 68 68 68 78 78 78 71 71 71 56 56 56 44 44 44 ++45 45 45 48 48 48 51 51 51 56 56 56 63 63 63 70 70 70 66 66 66 58 58 58 ++44 44 44 65 65 65 65 65 65 39 39 39 20 20 20 17 17 17 24 24 24 32 32 32 ++49 49 49 45 45 45 37 37 37 33 33 33 45 45 45 60 60 60 60 60 60 50 50 50 ++53 53 53 58 58 58 62 62 62 61 61 61 56 56 56 51 51 51 51 51 51 52 52 52 ++61 61 61 56 56 56 53 53 53 50 50 50 46 46 46 52 52 52 58 58 58 56 56 56 ++52 52 52 46 46 46 51 51 51 52 52 52 46 46 46 45 45 45 38 38 38 21 21 21 ++8 8 8 32 32 32 39 39 39 32 32 32 43 43 43 32 32 32 0 0 0 20 20 20 ++43 43 43 42 42 42 17 17 17 40 40 40 36 36 36 17 17 17 45 45 45 28 28 28 ++8 8 8 36 36 36 29 29 29 31 31 31 53 53 53 39 39 39 21 21 21 49 49 49 ++34 34 34 14 14 14 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 ++4 4 4 17 17 17 23 23 23 14 14 14 4 4 4 4 4 4 4 4 4 0 0 0 ++4 4 4 8 8 8 19 19 19 38 38 38 52 52 52 48 48 48 43 43 43 50 50 50 ++42 42 42 19 19 19 33 33 33 21 21 21 8 8 8 24 24 24 20 20 20 27 27 27 ++28 28 28 34 34 34 34 34 34 40 40 40 54 54 54 54 54 54 45 45 45 46 46 46 ++49 49 49 31 31 31 44 44 44 49 49 49 23 23 23 14 14 14 36 36 36 54 54 54 ++53 53 53 11 11 11 0 0 0 3 3 3 0 0 0 21 21 21 37 37 37 8 8 8 ++8 8 8 4 4 4 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 ++6 6 6 28 28 28 28 28 28 28 28 28 46 46 46 49 49 49 40 40 40 43 43 43 ++44 44 44 20 20 20 24 24 24 45 45 45 48 48 48 38 38 38 36 36 36 36 36 36 ++8 8 8 11 11 11 6 6 6 10 10 10 24 24 24 32 32 32 32 32 32 34 34 34 ++14 14 14 13 13 13 14 14 14 16 16 16 16 16 16 16 16 16 20 20 20 27 27 27 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 ++0 0 0 3 3 3 11 11 11 19 19 19 21 21 21 19 19 19 19 19 19 20 20 20 ++17 17 17 17 17 17 14 14 14 8 8 8 4 4 4 6 6 6 11 11 11 16 16 16 ++17 17 17 19 19 19 20 20 20 21 21 21 23 23 23 21 21 21 20 20 20 19 19 19 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ++20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ++19 19 19 19 19 19 20 20 20 23 23 23 24 24 24 21 21 21 17 17 17 13 13 13 ++33 33 33 40 40 40 31 31 31 6 6 6 0 0 0 0 0 0 4 4 4 4 4 4 ++23 23 23 42 42 42 42 42 42 23 23 23 17 17 17 24 24 24 20 20 20 8 8 8 ++19 19 19 39 39 39 40 40 40 16 16 16 0 0 0 0 0 0 3 3 3 0 0 0 ++10 10 10 38 38 38 48 48 48 25 25 25 0 0 0 0 0 0 3 3 3 0 0 0 ++6 6 6 44 44 44 53 53 53 33 33 33 20 20 20 24 24 24 17 17 17 0 0 0 ++0 0 0 46 46 46 61 61 61 38 38 38 11 11 11 3 3 3 0 0 0 0 0 0 ++4 4 4 42 42 42 60 60 60 49 49 49 23 23 23 0 0 0 0 0 0 11 11 11 ++3 3 3 42 42 42 60 60 60 48 48 48 24 24 24 8 8 8 8 8 8 16 16 16 ++0 0 0 37 37 37 59 59 59 52 52 52 28 28 28 3 3 3 4 4 4 20 20 20 ++16 16 16 32 32 32 54 54 54 57 57 57 33 33 33 16 16 16 19 19 19 23 23 23 ++17 17 17 37 37 37 54 54 54 56 56 56 45 45 45 34 34 34 31 31 31 32 32 32 ++23 23 23 34 34 34 50 50 50 60 60 60 44 44 44 24 24 24 29 29 29 34 34 34 ++44 44 44 61 61 61 56 56 56 69 69 69 43 43 43 42 42 42 33 33 33 42 42 42 ++40 40 40 62 62 62 65 65 65 49 49 49 43 43 43 45 45 45 48 48 48 51 51 51 ++44 44 44 57 57 57 69 69 69 70 70 70 59 59 59 49 49 49 50 50 50 57 57 57 ++53 53 53 56 56 56 65 65 65 73 73 73 69 69 69 58 58 58 56 56 56 61 61 61 ++65 65 65 59 59 59 56 56 56 72 72 72 89 89 89 77 77 77 59 59 59 60 60 60 ++61 61 61 67 67 67 65 65 65 65 65 65 81 81 81 91 91 91 80 80 80 62 62 62 ++70 70 70 65 65 65 71 71 71 68 68 68 71 71 71 93 93 93 103 103 102 94 94 94 ++67 67 67 61 61 61 90 90 90 105 105 105 99 99 99 91 91 91 76 76 76 75 75 75 ++91 91 91 87 87 87 90 90 90 96 96 96 99 99 99 89 89 89 76 76 76 78 78 78 ++101 101 101 89 89 89 95 95 94 109 110 110 101 101 101 96 96 96 105 105 105 103 103 102 ++93 93 93 71 71 71 62 62 62 87 87 87 105 105 105 94 94 94 74 74 74 69 69 69 ++67 67 67 78 78 78 103 103 102 91 91 91 78 78 78 88 88 88 81 81 81 75 75 75 ++95 95 94 82 82 82 84 84 84 87 87 87 87 87 87 88 88 88 87 87 87 89 89 89 ++76 76 76 87 87 87 91 91 91 74 74 74 56 56 56 56 56 56 61 61 61 54 54 54 ++57 57 57 54 54 54 58 58 58 71 71 71 82 82 82 78 78 78 65 65 65 51 51 51 ++51 51 51 49 49 49 49 49 49 51 51 51 51 51 51 49 49 49 50 50 50 53 53 53 ++65 65 65 66 66 66 73 73 73 87 87 87 78 78 78 82 82 82 83 83 83 80 80 80 ++76 76 76 66 66 66 63 63 63 74 74 74 77 77 77 70 70 70 67 67 67 72 72 72 ++73 73 73 73 73 73 65 65 65 49 49 49 42 42 42 42 42 42 34 34 34 20 20 20 ++28 28 28 32 32 32 45 45 45 63 63 63 59 59 59 28 28 28 11 11 11 27 27 27 ++45 45 45 59 59 59 63 63 63 52 52 52 44 44 44 50 50 50 57 57 57 57 57 57 ++51 51 51 53 53 53 57 57 57 60 60 60 60 60 60 58 58 58 54 54 54 51 51 51 ++59 59 59 57 57 57 59 59 59 57 57 57 48 48 48 46 46 46 53 53 53 57 57 57 ++63 63 63 52 52 52 40 40 40 34 34 34 27 27 27 20 20 20 17 17 17 16 16 16 ++20 20 20 3 3 3 23 23 23 16 16 16 27 27 27 45 45 45 14 14 14 0 0 0 ++23 23 23 40 40 40 48 48 48 33 33 33 6 6 6 0 0 0 24 24 24 43 43 43 ++27 27 27 24 24 24 33 33 33 43 43 43 43 43 43 49 49 49 54 54 54 49 49 49 ++8 8 8 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 3 3 3 ++19 19 19 21 21 21 16 16 16 3 3 3 0 0 0 4 4 4 8 8 8 3 3 3 ++4 4 4 0 0 0 4 4 4 34 34 34 53 53 53 45 45 45 32 32 32 36 36 36 ++45 45 45 37 37 37 53 53 53 56 56 56 44 44 44 39 39 39 36 36 36 38 38 38 ++28 28 28 28 28 28 27 27 27 27 27 27 31 31 31 34 34 34 36 36 36 37 37 37 ++51 51 51 48 48 48 50 50 50 52 52 52 31 31 31 0 0 0 19 19 19 46 46 46 ++52 52 52 36 36 36 6 6 6 0 0 0 23 23 23 36 36 36 20 20 20 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 ++0 0 0 10 10 10 21 21 21 32 32 32 42 42 42 39 39 39 31 31 31 32 32 32 ++48 48 48 23 23 23 17 17 17 40 40 40 57 57 57 49 49 49 38 38 38 36 36 36 ++33 33 33 20 20 20 3 3 3 8 8 8 29 29 29 34 34 34 28 28 28 25 25 25 ++10 10 10 13 13 13 13 13 13 10 10 10 11 11 11 21 21 21 32 32 32 38 38 38 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 10 10 10 17 17 17 21 21 21 21 21 21 19 19 19 19 19 19 20 20 20 ++21 21 21 13 13 13 4 4 4 3 3 3 11 11 11 17 17 17 17 17 17 16 16 16 ++20 20 20 20 20 20 20 20 20 19 19 19 17 17 17 16 16 16 14 14 14 13 13 13 ++14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++6 6 6 10 10 10 10 10 10 10 10 10 16 16 16 23 23 23 23 23 23 19 19 19 ++14 14 14 27 27 27 37 37 37 37 37 37 23 23 23 3 3 3 0 0 0 3 3 3 ++0 0 0 21 21 21 39 39 39 39 39 39 28 28 28 17 17 17 19 19 19 27 27 27 ++14 14 14 10 10 10 32 32 32 43 43 43 19 19 19 0 0 0 3 3 3 0 0 0 ++0 0 0 4 4 4 37 37 37 50 50 50 23 23 23 0 0 0 3 3 3 3 3 3 ++0 0 0 16 16 16 39 39 39 51 51 51 43 43 43 23 23 23 11 11 11 14 14 14 ++0 0 0 13 13 13 42 42 42 60 60 60 45 45 45 4 4 4 0 0 0 13 13 13 ++0 0 0 11 11 11 38 38 38 58 58 58 50 50 50 19 19 19 3 3 3 16 16 16 ++6 6 6 16 16 16 38 38 38 59 59 59 52 52 52 24 24 24 6 6 6 14 14 14 ++8 8 8 8 8 8 29 29 29 56 56 56 56 56 56 29 29 29 11 11 11 19 19 19 ++25 25 25 14 14 14 23 23 23 57 57 57 68 68 68 32 32 32 6 6 6 31 31 31 ++27 27 27 16 16 16 28 28 28 56 56 56 66 66 66 49 49 49 32 32 32 29 29 29 ++32 32 32 34 34 34 32 32 32 50 50 50 66 66 66 48 48 48 32 32 32 45 45 45 ++62 62 62 32 32 32 40 40 40 51 51 51 78 78 78 46 46 46 46 46 46 40 40 40 ++59 59 59 63 63 63 52 52 52 40 40 40 46 46 46 51 51 51 46 46 46 46 46 46 ++57 57 57 67 67 67 67 67 67 56 56 56 50 50 50 57 57 57 60 60 60 56 56 56 ++52 52 52 69 69 69 77 77 77 70 70 70 60 60 60 59 59 59 62 62 62 62 62 62 ++63 63 63 58 58 58 74 74 74 90 90 90 77 77 77 62 62 62 65 65 65 70 70 70 ++66 66 66 69 69 69 67 67 67 80 80 80 94 94 94 80 80 80 62 62 62 71 71 71 ++69 69 69 70 70 70 69 69 69 76 76 76 90 90 90 87 87 87 84 84 84 96 96 96 ++96 97 98 94 94 94 99 99 99 87 87 87 80 80 80 92 92 92 96 97 98 99 99 99 ++77 77 77 70 70 70 83 83 83 101 101 101 112 112 113 95 95 94 70 70 70 80 80 80 ++103 103 102 105 105 105 109 110 110 99 99 99 82 82 82 87 87 87 103 103 102 101 101 101 ++105 105 105 75 75 75 70 70 70 87 87 87 91 91 91 92 92 92 88 88 88 72 72 72 ++71 71 71 67 67 67 85 85 85 103 103 102 87 87 87 84 84 84 99 99 99 87 87 87 ++101 101 101 94 94 94 103 103 102 93 93 93 75 75 75 73 73 73 69 69 69 61 61 61 ++69 69 69 74 74 74 87 87 87 87 87 87 72 72 72 63 63 63 65 65 65 67 67 67 ++57 57 57 66 66 66 63 63 63 53 53 53 63 63 63 83 83 83 82 82 82 63 63 63 ++65 65 65 58 58 58 54 54 54 54 54 54 53 53 53 50 50 50 49 49 49 50 50 50 ++49 49 49 50 50 50 54 54 54 76 76 76 60 60 60 66 66 66 71 71 71 70 70 70 ++81 81 81 61 61 61 44 44 44 43 43 43 46 46 46 43 43 43 40 40 40 42 42 42 ++58 58 58 68 68 68 66 66 66 44 44 44 23 23 23 19 19 19 28 28 28 34 34 34 ++33 33 33 31 31 31 31 31 31 43 43 43 59 59 59 60 60 60 49 49 49 44 44 44 ++57 57 57 52 52 52 56 56 56 59 59 59 43 43 43 23 23 23 37 37 37 65 65 65 ++59 59 59 54 54 54 51 51 51 52 52 52 58 58 58 60 60 60 58 58 58 53 53 53 ++52 52 52 52 52 52 59 59 59 62 62 62 54 54 54 50 50 50 52 52 52 52 52 52 ++62 62 62 44 44 44 23 23 23 14 14 14 16 16 16 16 16 16 23 23 23 34 34 34 ++40 40 40 16 16 16 23 23 23 13 13 13 11 11 11 33 33 33 23 23 23 4 4 4 ++0 0 0 37 37 37 65 65 65 36 36 36 6 6 6 8 8 8 10 10 10 34 34 34 ++36 36 36 25 25 25 37 37 37 34 34 34 8 8 8 23 23 23 45 45 45 38 38 38 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 4 4 4 16 16 16 ++23 23 23 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 ++0 0 0 3 3 3 21 21 21 45 45 45 53 53 53 42 42 42 37 37 37 50 50 50 ++51 51 51 40 40 40 38 38 38 37 37 37 19 19 19 3 3 3 10 10 10 16 16 16 ++27 27 27 23 23 23 25 25 25 28 28 28 24 24 24 24 24 24 19 19 19 0 0 0 ++31 31 31 46 46 46 25 25 25 36 36 36 59 59 59 39 39 39 31 31 31 53 53 53 ++50 50 50 52 52 52 31 31 31 19 19 19 34 34 34 21 21 21 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 17 17 17 36 36 36 43 43 43 40 40 40 36 36 36 32 32 32 31 31 31 ++27 27 27 24 24 24 16 16 16 24 24 24 46 46 46 50 50 50 31 31 31 11 11 11 ++48 48 48 29 29 29 14 14 14 24 24 24 39 39 39 32 32 32 17 17 17 16 16 16 ++25 25 25 20 20 20 11 11 11 8 8 8 19 19 19 32 32 32 37 37 37 33 33 33 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++11 11 11 16 16 16 20 20 20 20 20 20 19 19 19 19 19 19 20 20 20 20 20 20 ++16 16 16 11 11 11 6 6 6 10 10 10 17 17 17 23 23 23 21 21 21 19 19 19 ++21 21 21 19 19 19 16 16 16 11 11 11 8 8 8 6 6 6 4 4 4 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 6 6 6 6 6 6 0 0 0 0 0 0 11 11 11 17 17 17 16 16 16 ++19 19 19 20 20 20 32 32 32 42 42 42 34 34 34 14 14 14 4 4 4 6 6 6 ++0 0 0 0 0 0 21 21 21 42 42 42 39 39 39 23 23 23 16 16 16 21 21 21 ++14 14 14 16 16 16 14 14 14 32 32 32 44 44 44 19 19 19 0 0 0 3 3 3 ++0 0 0 6 6 6 13 13 13 34 34 34 50 50 50 24 24 24 0 0 0 0 0 0 ++4 4 4 0 0 0 14 14 14 44 44 44 53 53 53 38 38 38 16 16 16 0 0 0 ++11 11 11 0 0 0 8 8 8 44 44 44 57 57 57 38 38 38 13 13 13 0 0 0 ++14 14 14 0 0 0 4 4 4 38 38 38 58 58 58 51 51 51 25 25 25 0 0 0 ++14 14 14 4 4 4 17 17 17 44 44 44 58 58 58 48 48 48 25 25 25 8 8 8 ++20 20 20 4 4 4 10 10 10 37 37 37 56 56 56 53 53 53 32 32 32 11 11 11 ++23 23 23 21 21 21 19 19 19 36 36 36 60 60 60 58 58 58 33 33 33 17 17 17 ++24 24 24 25 25 25 25 25 25 34 34 34 54 54 54 67 67 67 49 49 49 19 19 19 ++28 28 28 33 33 33 25 25 25 29 29 29 59 59 59 68 68 68 58 58 58 59 59 59 ++44 44 44 42 42 42 25 25 25 51 51 51 51 51 51 76 76 76 59 59 59 57 57 57 ++65 65 65 56 56 56 43 43 43 44 44 44 51 51 51 49 49 49 45 45 45 53 53 53 ++73 73 73 69 69 69 59 59 59 51 51 51 51 51 51 57 57 57 58 58 58 56 56 56 ++68 68 68 77 77 77 76 76 76 62 62 62 58 58 58 66 66 66 67 67 67 60 60 60 ++62 62 62 78 78 78 91 91 91 78 78 78 59 59 59 66 66 66 75 75 75 68 68 68 ++72 72 72 66 66 66 84 84 84 96 96 96 78 78 78 66 66 66 70 70 70 72 72 72 ++71 71 71 76 76 76 72 72 72 84 84 84 99 99 99 82 82 82 70 70 70 88 88 88 ++99 99 99 99 99 99 94 94 94 75 75 75 71 71 71 90 90 90 96 97 98 93 93 93 ++76 76 76 73 73 73 84 84 84 94 94 94 105 105 105 105 105 105 94 94 94 105 105 105 ++101 101 101 105 105 105 105 105 105 93 93 93 85 85 85 87 87 87 88 88 88 88 88 88 ++105 105 105 93 93 93 91 91 91 87 87 87 76 76 76 88 88 88 101 101 101 93 93 93 ++74 74 74 75 75 75 76 76 76 94 94 94 109 110 110 101 101 101 95 95 94 101 101 101 ++93 93 93 84 84 84 93 93 93 87 87 87 67 67 67 66 66 66 68 68 68 67 67 67 ++72 72 72 69 69 69 82 82 82 94 94 94 89 89 89 75 75 75 67 67 67 63 63 63 ++65 65 65 63 63 63 60 60 60 57 57 57 60 60 60 69 69 69 78 78 78 85 85 85 ++63 63 63 57 57 57 53 53 53 53 53 53 54 54 54 52 52 52 52 52 52 53 53 53 ++51 51 51 52 52 52 54 54 54 76 76 76 52 52 52 48 48 48 52 52 52 52 52 52 ++56 56 56 69 69 69 78 78 78 72 72 72 53 53 53 38 38 38 37 37 37 42 42 42 ++39 39 39 51 51 51 62 62 62 63 63 63 52 52 52 39 39 39 32 32 32 29 29 29 ++29 29 29 25 25 25 21 21 21 33 33 33 54 54 54 63 63 63 65 65 65 69 69 69 ++42 42 42 20 20 20 20 20 20 43 43 43 50 50 50 37 37 37 38 38 38 54 54 54 ++60 60 60 58 58 58 54 54 54 53 53 53 54 54 54 54 54 54 56 56 56 56 56 56 ++51 51 51 49 49 49 53 53 53 59 59 59 58 58 58 57 57 57 54 54 54 46 46 46 ++37 37 37 21 21 21 11 11 11 21 21 21 36 36 36 42 42 42 48 48 48 58 58 58 ++49 49 49 48 48 48 49 49 49 40 40 40 21 21 21 11 11 11 13 13 13 6 6 6 ++17 17 17 56 56 56 42 42 42 44 44 44 37 37 37 16 16 16 32 32 32 24 24 24 ++17 17 17 46 46 46 40 40 40 14 14 14 3 3 3 0 0 0 14 14 14 46 46 46 ++19 19 19 11 11 11 3 3 3 0 0 0 0 0 0 6 6 6 16 16 16 24 24 24 ++14 14 14 3 3 3 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 3 3 3 ++3 3 3 29 29 29 39 39 39 34 34 34 36 36 36 40 40 40 43 43 43 44 44 44 ++52 52 52 38 38 38 27 27 27 37 37 37 39 39 39 37 37 37 44 44 44 44 44 44 ++29 29 29 29 29 29 40 40 40 46 46 46 44 44 44 49 49 49 49 49 49 36 36 36 ++32 32 32 46 46 46 13 13 13 16 16 16 56 56 56 52 52 52 43 43 43 53 53 53 ++48 48 48 46 46 46 49 49 49 39 39 39 14 14 14 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++11 11 11 28 28 28 43 43 43 39 39 39 28 28 28 25 25 25 27 27 27 23 23 23 ++25 25 25 34 34 34 24 24 24 19 19 19 38 38 38 50 50 50 39 39 39 25 25 25 ++20 20 20 29 29 29 36 36 36 39 39 39 40 40 40 28 28 28 13 13 13 11 11 11 ++24 24 24 21 21 21 17 17 17 19 19 19 28 28 28 36 36 36 31 31 31 17 17 17 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 ++16 16 16 19 19 19 20 20 20 19 19 19 17 17 17 19 19 19 19 19 19 17 17 17 ++4 4 4 11 11 11 17 17 17 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 ++10 10 10 10 10 10 8 8 8 8 8 8 8 8 8 10 10 10 11 11 11 13 13 13 ++21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 ++13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 ++13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 ++4 4 4 13 13 13 14 14 14 6 6 6 0 0 0 3 3 3 4 4 4 3 3 3 ++14 14 14 13 13 13 20 20 20 29 29 29 34 34 34 36 36 36 25 25 25 8 8 8 ++13 13 13 0 0 0 0 0 0 20 20 20 38 38 38 42 42 42 29 29 29 10 10 10 ++19 19 19 16 16 16 11 11 11 16 16 16 32 32 32 40 40 40 24 24 24 0 0 0 ++6 6 6 0 0 0 0 0 0 11 11 11 36 36 36 46 46 46 28 28 28 0 0 0 ++10 10 10 0 0 0 0 0 0 14 14 14 42 42 42 58 58 58 38 38 38 0 0 0 ++0 0 0 0 0 0 4 4 4 10 10 10 34 34 34 58 58 58 45 45 45 6 6 6 ++4 4 4 6 6 6 6 6 6 10 10 10 36 36 36 61 61 61 52 52 52 16 16 16 ++6 6 6 10 10 10 11 11 11 17 17 17 38 38 38 60 60 60 52 52 52 23 23 23 ++10 10 10 19 19 19 17 17 17 13 13 13 32 32 32 60 60 60 57 57 57 25 25 25 ++13 13 13 20 20 20 29 29 29 25 25 25 31 31 31 59 59 59 63 63 63 31 31 31 ++19 19 19 29 29 29 29 29 29 25 25 25 40 40 40 61 61 61 59 59 59 40 40 40 ++33 33 33 39 39 39 42 42 42 27 27 27 34 34 34 65 65 65 69 69 69 57 57 57 ++37 37 37 38 38 38 53 53 53 29 29 29 48 48 48 56 56 56 77 77 77 80 80 80 ++53 53 53 43 43 43 44 44 44 52 52 52 53 53 53 50 50 50 59 59 59 75 75 75 ++71 71 71 58 58 58 52 52 52 60 60 60 61 61 61 54 54 54 58 58 58 70 70 70 ++87 87 87 76 76 76 65 65 65 61 61 61 65 65 65 68 68 68 67 67 67 62 62 62 ++78 78 78 90 90 90 82 82 82 65 65 65 67 67 67 73 73 73 70 70 70 69 69 69 ++69 69 69 87 87 87 96 96 96 85 85 85 69 69 69 71 71 71 77 77 77 74 74 74 ++78 78 78 82 82 82 80 80 80 85 85 85 87 87 87 82 82 82 82 82 82 80 80 80 ++82 82 82 83 83 83 85 85 85 85 85 85 84 84 84 87 87 87 84 84 84 81 81 81 ++83 83 83 90 90 90 93 93 93 87 87 87 94 94 94 105 105 105 109 110 110 109 110 110 ++101 101 101 96 97 98 96 97 98 101 101 101 105 105 105 99 99 99 80 80 80 77 77 77 ++92 92 92 105 105 105 105 104 105 85 85 85 74 74 74 80 80 80 91 91 91 101 101 101 ++95 95 94 82 82 82 96 97 98 94 94 94 105 105 105 117 117 117 93 93 93 93 93 93 ++99 99 99 83 83 83 93 93 93 101 101 101 94 94 94 92 92 92 92 92 92 93 93 93 ++101 101 101 96 96 96 96 97 98 101 101 101 101 101 101 103 103 102 101 101 101 92 92 92 ++96 96 96 92 92 92 90 90 90 88 88 88 83 83 83 78 78 78 85 85 85 95 95 94 ++92 92 92 81 81 81 69 69 69 61 61 61 56 56 56 52 52 52 52 52 52 54 54 54 ++52 52 52 53 53 53 57 57 57 78 78 78 63 63 63 46 46 46 50 50 50 46 46 46 ++49 49 49 49 49 49 51 51 51 59 59 59 72 72 72 76 76 76 62 62 62 43 43 43 ++39 39 39 33 33 33 37 37 37 52 52 52 66 66 66 62 62 62 46 46 46 31 31 31 ++28 28 28 29 29 29 43 43 43 61 61 61 63 63 63 44 44 44 40 40 40 61 61 61 ++56 56 56 38 38 38 20 20 20 24 24 24 43 43 43 54 54 54 44 44 44 24 24 24 ++45 45 45 53 53 53 60 60 60 59 59 59 54 54 54 52 52 52 58 58 58 63 63 63 ++57 57 57 51 51 51 50 50 50 51 51 51 54 54 54 59 59 59 56 56 56 42 42 42 ++17 17 17 13 13 13 24 24 24 43 43 43 50 50 50 48 48 48 44 44 44 44 44 44 ++42 42 42 48 48 48 42 42 42 43 43 43 38 38 38 23 23 23 17 17 17 6 6 6 ++51 51 51 38 38 38 8 8 8 21 21 21 37 37 37 28 28 28 31 31 31 32 32 32 ++31 31 31 45 45 45 37 37 37 17 17 17 11 11 11 6 6 6 8 8 8 24 24 24 ++33 33 33 17 17 17 0 0 0 0 0 0 13 13 13 23 23 23 23 23 23 20 20 20 ++4 4 4 11 11 11 11 11 11 6 6 6 8 8 8 14 14 14 11 11 11 3 3 3 ++14 14 14 25 25 25 25 25 25 23 23 23 27 27 27 25 25 25 17 17 17 11 11 11 ++23 23 23 16 16 16 14 14 14 24 24 24 25 25 25 19 19 19 19 19 19 16 16 16 ++20 20 20 25 25 25 33 33 33 27 27 27 13 13 13 17 17 17 25 25 25 20 20 20 ++20 20 20 24 24 24 6 6 6 0 0 0 6 6 6 10 10 10 11 11 11 10 10 10 ++13 13 13 32 32 32 34 34 34 19 19 19 10 10 10 13 13 13 17 17 17 17 17 17 ++11 11 11 11 11 11 13 13 13 11 11 11 10 10 10 8 8 8 10 10 10 11 11 11 ++17 17 17 29 29 29 34 34 34 24 24 24 10 10 10 10 10 10 13 13 13 11 11 11 ++13 13 13 16 16 16 8 8 8 4 4 4 16 16 16 17 17 17 11 11 11 13 13 13 ++0 0 0 36 36 36 48 48 48 32 32 32 17 17 17 16 16 16 13 13 13 11 11 11 ++4 4 4 16 16 16 27 27 27 32 32 32 33 33 33 28 28 28 17 17 17 6 6 6 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 8 8 8 13 13 13 ++16 16 16 19 19 19 20 20 20 17 17 17 19 19 19 20 20 20 16 16 16 10 10 10 ++3 3 3 11 11 11 20 20 20 23 23 23 20 20 20 16 16 16 14 14 14 14 14 14 ++4 4 4 6 6 6 10 10 10 14 14 14 17 17 17 19 19 19 20 20 20 20 20 20 ++16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++13 13 13 16 16 16 19 19 19 16 16 16 13 13 13 10 10 10 6 6 6 3 3 3 ++0 0 0 0 0 0 8 8 8 14 14 14 24 24 24 39 39 39 38 38 38 20 20 20 ++16 16 16 0 0 0 0 0 0 0 0 0 20 20 20 42 42 42 43 43 43 24 24 24 ++21 21 21 8 8 8 17 17 17 16 16 16 4 4 4 36 36 36 48 48 48 14 14 14 ++10 10 10 0 0 0 0 0 0 4 4 4 3 3 3 38 38 38 52 52 52 20 20 20 ++8 8 8 0 0 0 0 0 0 0 0 0 23 23 23 51 51 51 52 52 52 28 28 28 ++0 0 0 8 8 8 11 11 11 0 0 0 6 6 6 38 38 38 51 51 51 39 39 39 ++6 6 6 11 11 11 13 13 13 3 3 3 11 11 11 40 40 40 57 57 57 50 50 50 ++19 19 19 14 14 14 10 10 10 6 6 6 17 17 17 44 44 44 56 56 56 49 49 49 ++16 16 16 17 17 17 16 16 16 11 11 11 19 19 19 44 44 44 60 60 60 56 56 56 ++29 29 29 20 20 20 28 28 28 29 29 29 20 20 20 37 37 37 59 59 59 57 57 57 ++29 29 29 21 21 21 21 21 21 33 33 33 43 43 43 48 48 48 58 58 58 71 71 71 ++38 38 38 29 29 29 36 36 36 36 36 36 44 44 44 63 63 63 69 69 69 72 72 72 ++49 49 49 44 44 44 39 39 39 49 49 49 43 43 43 65 65 65 68 68 68 89 89 89 ++57 57 57 48 48 48 50 50 50 54 54 54 53 53 53 62 62 62 74 74 74 76 76 76 ++59 59 59 52 52 52 54 54 54 63 63 63 65 65 65 60 60 60 69 69 69 84 84 84 ++83 83 83 69 69 69 60 60 60 66 66 66 70 70 70 67 67 67 70 70 70 77 77 77 ++91 91 91 81 81 81 67 67 67 70 70 70 78 78 78 71 71 71 66 66 66 78 78 78 ++78 78 78 96 97 98 88 88 88 71 71 71 78 78 78 83 83 83 77 77 77 83 83 83 ++84 84 84 87 87 87 83 83 83 84 84 84 82 82 82 87 87 87 96 96 96 83 83 83 ++87 87 87 84 84 84 84 84 84 89 89 89 88 88 88 84 84 84 87 87 87 92 92 92 ++84 84 84 90 90 90 89 89 89 87 87 87 89 89 89 103 103 102 115 116 115 109 110 110 ++99 99 99 84 84 84 89 89 89 99 99 99 103 103 102 101 101 101 85 85 85 80 80 80 ++94 94 94 109 110 110 112 112 113 96 97 98 82 82 82 74 74 74 81 81 81 94 94 94 ++117 117 117 99 99 99 105 105 105 92 92 92 88 88 88 112 112 113 109 110 110 99 99 99 ++105 105 105 99 99 99 103 103 102 103 103 102 101 101 101 103 103 102 94 94 94 82 82 82 ++81 81 81 76 76 76 73 73 73 71 71 71 74 74 74 90 90 90 103 103 102 103 103 102 ++81 81 81 80 80 80 77 77 77 75 75 75 77 77 77 83 83 83 87 87 87 85 85 85 ++99 99 99 92 92 92 84 84 84 77 77 77 71 71 71 65 65 65 61 61 61 61 61 61 ++54 54 54 51 51 51 52 52 52 72 72 72 76 76 76 52 52 52 56 56 56 48 48 48 ++48 48 48 45 45 45 42 42 42 40 40 40 46 46 46 58 58 58 68 68 68 74 74 74 ++62 62 62 52 52 52 39 39 39 37 37 37 48 48 48 59 59 59 60 60 60 56 56 56 ++52 52 52 68 68 68 66 66 66 46 46 46 37 37 37 34 34 34 29 29 29 25 25 25 ++59 59 59 57 57 57 40 40 40 20 20 20 21 21 21 42 42 42 53 53 53 50 50 50 ++44 44 44 51 51 51 58 58 58 59 59 59 57 57 57 54 54 54 58 58 58 62 62 62 ++60 60 60 57 57 57 53 53 53 49 49 49 50 50 50 58 58 58 52 52 52 31 31 31 ++17 17 17 20 20 20 40 40 40 53 53 53 44 44 44 34 34 34 31 31 31 25 25 25 ++39 39 39 37 37 37 33 33 33 31 31 31 40 40 40 45 45 45 28 28 28 13 13 13 ++51 51 51 19 19 19 11 11 11 6 6 6 24 24 24 34 34 34 19 19 19 32 32 32 ++23 23 23 6 6 6 10 10 10 14 14 14 8 8 8 17 17 17 23 23 23 4 4 4 ++23 23 23 14 14 14 6 6 6 11 11 11 24 24 24 28 28 28 21 21 21 11 11 11 ++6 6 6 14 14 14 17 17 17 11 11 11 11 11 11 16 16 16 16 16 16 11 11 11 ++11 11 11 13 13 13 17 17 17 28 28 28 32 32 32 19 19 19 6 6 6 13 13 13 ++14 14 14 14 14 14 17 17 17 13 13 13 8 8 8 8 8 8 11 11 11 21 21 21 ++13 13 13 24 24 24 32 32 32 24 24 24 13 13 13 13 13 13 14 14 14 8 8 8 ++14 14 14 13 13 13 21 21 21 17 17 17 8 8 8 13 13 13 16 16 16 17 17 17 ++27 27 27 42 42 42 23 23 23 0 0 0 14 14 14 13 13 13 0 0 0 10 10 10 ++14 14 14 14 14 14 16 16 16 14 14 14 13 13 13 13 13 13 16 16 16 19 19 19 ++36 36 36 34 34 34 25 25 25 16 16 16 14 14 14 13 13 13 13 13 13 14 14 14 ++13 13 13 10 10 10 11 11 11 16 16 16 16 16 16 4 4 4 0 0 0 11 11 11 ++23 23 23 39 39 39 34 34 34 13 13 13 3 3 3 6 6 6 11 11 11 16 16 16 ++3 3 3 17 17 17 32 32 32 37 37 37 29 29 29 16 16 16 10 10 10 11 11 11 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 10 10 10 16 16 16 ++14 14 14 19 19 19 20 20 20 19 19 19 20 20 20 20 20 20 14 14 14 4 4 4 ++10 10 10 13 13 13 17 17 17 21 21 21 21 21 21 17 17 17 10 10 10 3 3 3 ++17 17 17 19 19 19 21 21 21 23 23 23 23 23 23 20 20 20 16 16 16 13 13 13 ++14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++17 17 17 16 16 16 16 16 16 19 19 19 21 21 21 21 21 21 19 19 19 17 17 17 ++4 4 4 0 0 0 3 3 3 3 3 3 4 4 4 23 23 23 37 37 37 37 37 37 ++17 17 17 14 14 14 11 11 11 0 0 0 0 0 0 21 21 21 43 43 43 44 44 44 ++19 19 19 24 24 24 21 21 21 13 13 13 6 6 6 10 10 10 29 29 29 51 51 51 ++4 4 4 10 10 10 4 4 4 0 0 0 0 0 0 10 10 10 34 34 34 59 59 59 ++13 13 13 4 4 4 8 8 8 11 11 11 8 8 8 23 23 23 46 46 46 59 59 59 ++32 32 32 4 4 4 0 0 0 11 11 11 4 4 4 3 3 3 32 32 32 58 58 58 ++40 40 40 10 10 10 0 0 0 11 11 11 11 11 11 16 16 16 42 42 42 65 65 65 ++49 49 49 19 19 19 8 8 8 19 19 19 11 11 11 8 8 8 36 36 36 63 63 63 ++59 59 59 25 25 25 14 14 14 28 28 28 20 20 20 6 6 6 29 29 29 58 58 58 ++53 53 53 38 38 38 27 27 27 27 27 27 24 24 24 17 17 17 34 34 34 63 63 63 ++62 62 62 39 39 39 28 28 28 39 39 39 42 42 42 33 33 33 40 40 40 59 59 59 ++77 77 77 48 48 48 33 33 33 50 50 50 69 69 69 52 52 52 31 31 31 60 60 60 ++82 82 82 54 54 54 45 45 45 43 43 43 62 62 62 69 69 69 58 58 58 53 53 53 ++81 81 81 65 65 65 57 57 57 52 52 52 54 54 54 74 74 74 77 77 77 53 53 53 ++56 56 56 60 60 60 62 62 62 59 59 59 59 59 59 67 67 67 77 77 77 84 84 84 ++65 65 65 62 62 62 66 66 66 70 70 70 68 68 68 66 66 66 76 76 76 92 92 92 ++84 84 84 70 70 70 71 71 71 77 77 77 72 72 72 71 71 71 78 78 78 81 81 81 ++105 104 105 80 80 80 73 73 73 83 83 83 84 84 84 84 84 84 87 87 87 85 85 85 ++85 85 85 89 89 89 81 81 81 84 84 84 88 88 88 92 92 92 101 101 101 94 94 94 ++81 81 81 88 88 88 95 95 94 101 101 101 99 99 99 89 89 89 88 88 88 90 90 90 ++99 99 99 91 91 91 84 84 84 92 92 92 91 91 91 93 93 93 112 112 113 112 112 113 ++103 103 102 88 88 88 96 97 98 96 97 98 93 93 93 105 105 105 105 105 105 96 97 98 ++93 93 93 90 90 90 105 105 105 115 116 115 96 96 96 88 88 88 103 103 102 109 110 110 ++99 99 99 117 117 117 96 96 96 92 92 92 105 105 105 105 105 105 112 112 113 115 116 115 ++99 99 99 105 104 105 103 103 102 84 84 84 84 84 84 103 103 102 96 96 96 73 73 73 ++77 77 77 74 74 74 75 75 75 74 74 74 72 72 72 80 80 80 93 93 93 99 99 99 ++96 97 98 82 82 82 68 68 68 66 66 66 69 69 69 68 68 68 65 65 65 62 62 62 ++59 59 59 66 66 66 80 80 80 92 92 92 95 95 94 89 89 89 81 81 81 77 77 77 ++69 69 69 58 58 58 50 50 50 65 65 65 83 83 83 53 53 53 57 57 57 46 46 46 ++51 51 51 48 48 48 48 48 48 49 49 49 46 46 46 42 42 42 42 42 42 45 45 45 ++67 67 67 72 72 72 65 65 65 42 42 42 29 29 29 42 42 42 63 63 63 75 75 75 ++72 72 72 58 58 58 37 37 37 27 27 27 29 29 29 28 28 28 27 27 27 32 32 32 ++25 25 25 49 49 49 65 65 65 52 52 52 23 23 23 10 10 10 34 34 34 63 63 63 ++61 61 61 59 59 59 56 56 56 56 56 56 56 56 56 56 56 56 52 52 52 49 49 49 ++60 60 60 60 60 60 59 59 59 52 52 52 50 50 50 57 57 57 45 45 45 19 19 19 ++20 20 20 25 25 25 46 46 46 53 53 53 34 34 34 29 29 29 40 40 40 42 42 42 ++49 49 49 48 48 48 59 59 59 39 39 39 36 36 36 49 49 49 28 28 28 19 19 19 ++37 37 37 50 50 50 33 33 33 36 36 36 32 32 32 24 24 24 37 37 37 19 19 19 ++16 16 16 21 21 21 16 16 16 10 10 10 14 14 14 10 10 10 6 6 6 16 16 16 ++0 0 0 6 6 6 16 16 16 23 23 23 27 27 27 25 25 25 17 17 17 8 8 8 ++13 13 13 11 11 11 13 13 13 17 17 17 14 14 14 6 6 6 10 10 10 20 20 20 ++10 10 10 31 31 31 33 33 33 21 21 21 11 11 11 8 8 8 8 8 8 14 14 14 ++13 13 13 6 6 6 11 11 11 8 8 8 14 14 14 20 20 20 8 8 8 8 8 8 ++28 28 28 31 31 31 23 23 23 10 10 10 6 6 6 14 14 14 16 16 16 11 11 11 ++13 13 13 6 6 6 13 13 13 8 8 8 17 17 17 20 20 20 8 8 8 25 25 25 ++46 46 46 20 20 20 11 11 11 16 16 16 10 10 10 13 13 13 19 19 19 11 11 11 ++11 11 11 13 13 13 13 13 13 11 11 11 11 11 11 13 13 13 17 17 17 21 21 21 ++42 42 42 28 28 28 8 8 8 6 6 6 17 17 17 13 13 13 6 6 6 14 14 14 ++10 10 10 8 8 8 11 11 11 14 14 14 13 13 13 13 13 13 19 19 19 25 25 25 ++45 45 45 29 29 29 10 10 10 8 8 8 19 19 19 14 14 14 10 10 10 17 17 17 ++19 19 19 24 24 24 33 33 33 36 36 36 24 24 24 10 10 10 10 10 10 20 20 20 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 10 10 10 20 20 20 ++19 19 19 20 20 20 16 16 16 17 17 17 23 23 23 14 14 14 3 3 3 11 11 11 ++17 17 17 17 17 17 20 20 20 21 21 21 16 16 16 6 6 6 10 10 10 20 20 20 ++23 23 23 20 20 20 17 17 17 13 13 13 8 8 8 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 4 4 4 8 8 8 11 11 11 13 13 13 14 14 14 ++17 17 17 14 14 14 11 11 11 6 6 6 0 0 0 0 0 0 20 20 20 39 39 39 ++44 44 44 28 28 28 8 8 8 6 6 6 6 6 6 0 0 0 11 11 11 43 43 43 ++46 46 46 23 23 23 8 8 8 21 21 21 23 23 23 0 0 0 0 0 0 37 37 37 ++48 48 48 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 14 14 14 37 37 37 ++58 58 58 19 19 19 0 0 0 11 11 11 17 17 17 13 13 13 24 24 24 42 42 42 ++60 60 60 29 29 29 4 4 4 3 3 3 3 3 3 3 3 3 14 14 14 28 28 28 ++63 63 63 36 36 36 13 13 13 10 10 10 6 6 6 6 6 6 20 20 20 34 34 34 ++66 66 66 50 50 50 23 23 23 6 6 6 13 13 13 16 16 16 16 16 16 24 24 24 ++63 63 63 54 54 54 29 29 29 8 8 8 13 13 13 20 20 20 21 21 21 27 27 27 ++66 66 66 58 58 58 31 31 31 16 16 16 32 32 32 31 31 31 23 23 23 37 37 37 ++65 65 65 66 66 66 38 38 38 36 36 36 48 48 48 39 39 39 33 33 33 34 34 34 ++66 66 66 70 70 70 62 62 62 62 62 62 52 52 52 38 38 38 40 40 40 37 37 37 ++58 58 58 78 78 78 56 56 56 60 60 60 74 74 74 52 52 52 45 45 45 57 57 57 ++65 65 65 80 80 80 66 66 66 58 58 58 70 70 70 76 76 76 60 60 60 58 58 58 ++61 61 61 65 65 65 62 62 62 60 60 60 71 71 71 85 85 85 82 82 82 70 70 70 ++68 68 68 68 68 68 72 72 72 69 69 69 67 67 67 82 82 82 92 92 92 84 84 84 ++75 75 75 76 76 76 74 74 74 78 78 78 82 82 82 75 75 75 83 83 83 105 105 105 ++84 84 84 78 78 78 81 81 81 89 89 89 90 90 90 85 85 85 89 89 89 99 99 99 ++103 103 102 90 90 90 78 78 78 83 83 83 101 101 101 112 112 113 103 103 102 87 87 87 ++92 85 93 105 101 107 105 101 107 101 96 101 115 116 115 103 103 102 84 86 80 112 115 112 ++115 116 115 105 105 105 99 100 97 96 95 96 92 90 91 92 85 93 101 96 101 112 112 113 ++115 116 115 109 110 110 94 94 94 93 93 93 87 87 87 88 88 88 112 112 113 112 112 113 ++91 91 91 85 85 85 99 99 99 115 116 115 115 116 115 115 116 115 112 112 113 105 104 105 ++101 101 101 109 110 110 117 117 117 112 112 113 96 97 98 91 91 91 101 101 101 115 116 115 ++109 110 110 96 96 96 96 96 96 105 105 105 93 93 93 87 87 87 103 103 102 99 99 99 ++80 80 80 76 76 76 78 78 78 83 83 83 80 80 80 75 75 75 83 83 83 96 97 98 ++101 101 101 101 101 101 94 94 94 81 81 81 70 70 70 68 68 68 68 68 68 67 67 67 ++69 69 69 67 67 67 67 67 67 71 71 71 80 80 80 88 88 88 92 92 92 94 94 94 ++88 88 88 87 87 87 76 76 76 75 75 75 81 81 81 63 63 63 48 48 48 57 57 57 ++53 53 53 52 52 52 51 51 51 50 50 50 49 49 49 48 48 48 45 45 45 44 44 44 ++48 48 48 46 46 46 66 66 66 74 74 74 62 62 62 68 68 68 73 73 73 57 57 57 ++58 58 58 68 68 68 56 56 56 31 31 31 28 28 28 36 36 36 32 32 32 27 27 27 ++29 29 29 25 25 25 34 34 34 59 59 59 59 59 59 48 48 48 59 59 59 62 62 62 ++63 63 63 61 61 61 44 44 44 51 51 51 61 61 61 56 56 56 56 56 56 51 51 51 ++57 57 57 60 60 60 58 58 58 58 58 58 51 51 51 50 50 50 25 25 25 28 28 28 ++14 14 14 45 45 45 46 46 46 34 34 34 32 32 32 42 42 42 42 42 42 49 49 49 ++54 54 54 45 45 45 52 52 52 52 52 52 36 36 36 38 38 38 40 40 40 19 19 19 ++20 20 20 31 31 31 23 23 23 40 40 40 42 42 42 36 36 36 20 20 20 17 17 17 ++19 19 19 13 13 13 14 14 14 6 6 6 13 13 13 17 17 17 3 3 3 13 13 13 ++10 10 10 11 11 11 25 25 25 33 33 33 23 23 23 14 14 14 13 13 13 8 8 8 ++6 6 6 10 10 10 14 14 14 14 14 14 13 13 13 11 11 11 11 11 11 13 13 13 ++23 23 23 29 29 29 27 27 27 14 14 14 8 8 8 13 13 13 14 14 14 11 11 11 ++10 10 10 14 14 14 16 16 16 8 8 8 13 13 13 6 6 6 3 3 3 29 29 29 ++28 28 28 16 16 16 8 8 8 14 14 14 16 16 16 11 11 11 10 10 10 16 16 16 ++13 13 13 11 11 11 11 11 11 11 11 11 8 8 8 11 11 11 25 25 25 42 42 42 ++21 21 21 11 11 11 8 8 8 14 14 14 16 16 16 10 10 10 10 10 10 16 16 16 ++8 8 8 16 16 16 17 17 17 10 10 10 6 6 6 17 17 17 32 32 32 39 39 39 ++20 20 20 14 14 14 10 10 10 8 8 8 11 11 11 11 11 11 10 10 10 6 6 6 ++14 14 14 13 13 13 6 6 6 10 10 10 17 17 17 13 13 13 20 20 20 42 42 42 ++28 28 28 16 16 16 11 11 11 14 14 14 16 16 16 11 11 11 13 13 13 17 17 17 ++31 31 31 39 39 39 34 34 34 14 14 14 10 10 10 24 24 24 25 25 25 13 13 13 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 11 11 11 20 20 20 ++17 17 17 20 20 20 17 17 17 17 17 17 20 20 20 11 11 11 4 4 4 13 13 13 ++20 20 20 19 19 19 19 19 19 17 17 17 13 13 13 10 10 10 14 14 14 20 20 20 ++19 19 19 16 16 16 11 11 11 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 8 8 8 ++19 19 19 19 19 19 19 19 19 14 14 14 4 4 4 0 0 0 4 4 4 13 13 13 ++39 39 39 43 43 43 32 32 32 11 11 11 0 0 0 0 0 0 3 3 3 16 16 16 ++38 38 38 45 45 45 36 36 36 16 16 16 10 10 10 10 10 10 4 4 4 3 3 3 ++31 31 31 46 46 46 21 21 21 0 0 0 3 3 3 6 6 6 0 0 0 11 11 11 ++39 39 39 51 51 51 21 21 21 0 0 0 16 16 16 25 25 25 14 14 14 24 24 24 ++25 25 25 57 57 57 40 40 40 0 0 0 3 3 3 10 10 10 0 0 0 11 11 11 ++32 32 32 60 60 60 43 43 43 6 6 6 11 11 11 13 13 13 3 3 3 17 17 17 ++39 39 39 59 59 59 54 54 54 27 27 27 8 8 8 8 8 8 13 13 13 16 16 16 ++32 32 32 56 56 56 56 56 56 32 32 32 14 14 14 16 16 16 23 23 23 31 31 31 ++36 36 36 59 59 59 65 65 65 37 37 37 13 13 13 25 25 25 34 34 34 23 23 23 ++33 33 33 54 54 54 61 61 61 54 54 54 38 38 38 34 34 34 44 44 44 34 34 34 ++38 38 38 71 71 71 77 77 77 60 60 60 42 42 42 42 42 42 54 54 54 49 49 49 ++46 46 46 66 66 66 81 81 81 81 81 81 48 48 48 40 40 40 65 65 65 45 45 45 ++59 59 59 62 62 62 82 82 82 77 77 77 72 72 72 50 50 50 59 59 59 61 61 61 ++62 62 62 58 58 58 61 61 61 73 73 73 81 81 81 77 77 77 71 71 71 68 68 68 ++70 70 70 74 74 74 69 69 69 70 70 70 85 85 85 88 88 88 80 80 80 78 78 78 ++80 80 80 74 74 74 81 81 81 81 81 81 75 75 75 93 93 93 103 103 102 84 84 84 ++80 80 80 87 87 87 90 90 90 88 88 88 85 85 85 89 89 89 96 97 98 103 103 102 ++99 99 99 82 82 82 80 80 80 101 101 101 112 112 113 103 103 102 89 89 89 87 87 87 ++91 93 92 109 110 110 107 112 107 83 83 83 91 92 87 121 121 119 121 121 119 107 112 107 ++99 100 97 95 95 94 99 100 97 105 105 105 105 105 105 101 96 101 96 91 95 96 95 96 ++121 121 119 112 112 113 115 116 115 99 99 99 91 91 91 103 103 102 105 105 105 115 116 115 ++105 105 105 99 99 99 105 105 105 117 117 117 115 116 115 117 117 117 117 117 117 109 110 110 ++105 105 105 99 99 99 101 101 101 105 105 105 103 103 102 90 90 90 91 91 91 101 101 101 ++105 104 105 117 117 117 105 105 105 99 99 99 101 101 101 91 91 91 93 93 93 103 103 102 ++94 94 94 84 84 84 75 75 75 76 76 76 78 78 78 77 77 77 78 78 78 83 83 83 ++99 99 99 103 103 102 105 105 105 101 101 101 91 91 91 83 83 83 75 75 75 70 70 70 ++69 69 69 69 69 69 67 67 67 62 62 62 61 61 61 68 68 68 81 81 81 91 91 91 ++95 95 94 96 96 96 91 91 91 92 92 92 93 93 93 76 76 76 58 58 58 58 58 58 ++53 53 53 50 50 50 48 48 48 48 48 48 50 50 50 50 50 50 46 46 46 43 43 43 ++40 40 40 36 36 36 52 52 52 69 69 69 71 71 71 75 75 75 68 68 68 40 40 40 ++34 34 34 56 56 56 66 66 66 57 57 57 43 43 43 27 27 27 20 20 20 25 25 25 ++24 24 24 27 27 27 37 37 37 60 60 60 66 66 66 62 62 62 67 67 67 60 60 60 ++49 49 49 60 60 60 57 57 57 54 54 54 56 56 56 53 53 53 56 56 56 57 57 57 ++51 51 51 57 57 57 58 58 58 61 61 61 53 53 53 50 50 50 23 23 23 23 23 23 ++27 27 27 54 54 54 53 53 53 28 28 28 28 28 28 34 34 34 44 44 44 53 53 53 ++49 49 49 40 40 40 51 51 51 54 54 54 38 38 38 36 36 36 37 37 37 20 20 20 ++23 23 23 38 38 38 34 34 34 46 46 46 38 38 38 25 25 25 11 11 11 13 13 13 ++8 8 8 13 13 13 20 20 20 13 13 13 14 14 14 16 16 16 8 8 8 20 20 20 ++17 17 17 23 23 23 28 28 28 21 21 21 8 8 8 13 13 13 19 19 19 11 11 11 ++17 17 17 13 13 13 10 10 10 11 11 11 16 16 16 17 17 17 14 14 14 11 11 11 ++39 39 39 25 25 25 11 11 11 8 8 8 13 13 13 14 14 14 11 11 11 10 10 10 ++14 14 14 8 8 8 17 17 17 13 13 13 11 11 11 23 23 23 27 27 27 31 31 31 ++25 25 25 13 13 13 6 6 6 11 11 11 14 14 14 10 10 10 8 8 8 13 13 13 ++21 21 21 19 19 19 13 13 13 8 8 8 17 17 17 29 29 29 34 34 34 33 33 33 ++19 19 19 17 17 17 14 14 14 11 11 11 11 11 11 14 14 14 13 13 13 8 8 8 ++8 8 8 19 19 19 25 25 25 25 25 25 25 25 25 31 31 31 37 37 37 39 39 39 ++19 19 19 20 20 20 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 23 23 23 ++14 14 14 23 23 23 24 24 24 21 21 21 23 23 23 27 27 27 34 34 34 44 44 44 ++28 28 28 11 11 11 4 4 4 19 19 19 23 23 23 11 11 11 10 10 10 25 25 25 ++37 37 37 37 37 37 36 36 36 32 32 32 25 25 25 19 19 19 14 14 14 14 14 14 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 13 13 13 20 20 20 ++17 17 17 20 20 20 19 19 19 16 16 16 16 16 16 10 10 10 8 8 8 17 17 17 ++21 21 21 21 21 21 17 17 17 11 11 11 11 11 11 16 16 16 19 19 19 19 19 19 ++14 14 14 10 10 10 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 11 11 11 17 17 17 17 17 17 14 14 14 10 10 10 3 3 3 0 0 0 ++17 17 17 39 39 39 43 43 43 25 25 25 8 8 8 0 0 0 0 0 0 0 0 0 ++20 20 20 44 44 44 48 48 48 25 25 25 14 14 14 16 16 16 8 8 8 0 0 0 ++11 11 11 37 37 37 43 43 43 21 21 21 0 0 0 0 0 0 3 3 3 0 0 0 ++10 10 10 40 40 40 48 48 48 23 23 23 3 3 3 16 16 16 24 24 24 19 19 19 ++3 3 3 38 38 38 51 51 51 33 33 33 8 8 8 4 4 4 6 6 6 0 0 0 ++0 0 0 40 40 40 59 59 59 44 44 44 17 17 17 4 4 4 8 8 8 11 11 11 ++10 10 10 44 44 44 61 61 61 49 49 49 27 27 27 13 13 13 13 13 13 20 20 20 ++10 10 10 40 40 40 59 59 59 54 54 54 38 38 38 23 23 23 23 23 23 33 33 33 ++19 19 19 38 38 38 60 60 60 60 60 60 37 37 37 21 21 21 25 25 25 31 31 31 ++16 16 16 45 45 45 67 67 67 69 69 69 50 50 50 34 34 34 39 39 39 37 37 37 ++49 49 49 63 63 63 71 71 71 70 70 70 56 56 56 42 42 42 44 44 44 46 46 46 ++42 42 42 63 63 63 74 74 74 82 82 82 66 66 66 46 46 46 56 56 56 56 56 56 ++49 49 49 65 65 65 76 76 76 96 97 98 67 67 67 63 63 63 56 56 56 68 68 68 ++62 62 62 63 63 63 72 72 72 83 83 83 82 82 82 72 72 72 67 67 67 70 70 70 ++72 72 72 74 74 74 73 73 73 81 81 81 94 94 94 89 89 89 76 76 76 76 76 76 ++81 81 81 84 84 84 80 80 80 78 78 78 94 94 94 105 105 105 96 96 96 80 80 80 ++83 83 83 92 92 92 93 93 93 87 87 87 89 89 89 101 101 101 105 105 105 99 99 99 ++87 87 87 87 87 87 96 97 98 112 112 113 109 110 110 91 91 91 87 87 87 99 99 99 ++113 122 108 94 99 95 91 96 86 88 90 87 99 100 97 115 116 115 121 121 119 128 121 122 ++101 101 101 103 103 102 109 110 110 115 116 115 112 112 113 105 104 105 101 96 101 101 96 101 ++103 103 102 103 103 102 115 116 115 105 105 105 103 103 102 101 101 101 90 90 90 101 101 101 ++121 121 119 112 112 113 115 116 115 117 117 117 115 116 115 115 116 115 117 117 117 112 112 113 ++99 99 99 88 88 88 87 87 87 101 101 101 109 110 110 103 103 102 93 93 93 91 91 91 ++112 112 113 115 116 115 105 105 105 101 101 101 103 103 102 105 105 105 105 105 105 92 92 92 ++109 110 110 99 99 99 87 87 87 81 81 81 82 82 82 83 83 83 81 81 81 78 78 78 ++83 83 83 90 90 90 101 101 101 109 110 110 105 105 105 96 96 96 87 87 87 84 84 84 ++72 72 72 70 70 70 67 67 67 66 66 66 66 66 66 68 68 68 69 69 69 69 69 69 ++83 83 83 85 85 85 89 89 89 94 94 94 96 96 96 91 91 91 82 82 82 75 75 75 ++62 62 62 57 57 57 50 50 50 46 46 46 49 49 49 50 50 50 49 49 49 46 46 46 ++53 53 53 63 63 63 76 76 76 73 73 73 58 58 58 56 56 56 65 65 65 68 68 68 ++42 42 42 40 40 40 45 45 45 57 57 57 59 59 59 45 45 45 37 37 37 43 43 43 ++59 59 59 63 63 63 66 66 66 71 71 71 67 67 67 61 61 61 60 60 60 49 49 49 ++21 21 21 33 33 33 50 50 50 58 58 58 62 62 62 57 57 57 51 51 51 61 61 61 ++53 53 53 56 56 56 56 56 56 62 62 62 59 59 59 57 57 57 24 24 24 16 16 16 ++29 29 29 57 57 57 59 59 59 21 21 21 36 36 36 36 36 36 51 51 51 61 61 61 ++56 56 56 45 45 45 49 49 49 49 49 49 31 31 31 25 25 25 27 27 27 16 16 16 ++23 23 23 44 44 44 44 44 44 52 52 52 33 33 33 16 16 16 6 6 6 14 14 14 ++8 8 8 25 25 25 39 39 39 36 36 36 32 32 32 29 29 29 27 27 27 39 39 39 ++43 43 43 34 34 34 17 17 17 3 3 3 14 14 14 37 37 37 36 36 36 10 10 10 ++6 6 6 0 0 0 0 0 0 13 13 13 32 32 32 40 40 40 37 37 37 29 29 29 ++19 19 19 0 0 0 3 3 3 29 29 29 45 45 45 44 44 44 39 39 39 42 42 42 ++43 43 43 27 27 27 38 38 38 33 33 33 21 21 21 38 38 38 44 44 44 28 28 28 ++17 17 17 4 4 4 0 0 0 4 4 4 6 6 6 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 3 3 3 24 24 24 39 39 39 45 45 45 45 45 45 ++46 46 46 34 34 34 11 11 11 0 0 0 21 21 21 51 51 51 58 58 58 48 48 48 ++54 54 54 56 56 56 52 52 52 45 45 45 42 42 42 43 43 43 44 44 44 44 44 44 ++24 24 24 29 29 29 33 33 33 34 34 34 31 31 31 28 28 28 31 31 31 33 33 33 ++32 32 32 32 32 32 39 39 39 45 45 45 44 44 44 45 45 45 50 50 50 51 51 51 ++51 51 51 40 40 40 29 29 29 33 33 33 42 42 42 34 34 34 31 31 31 40 40 40 ++31 31 31 29 29 29 39 39 39 53 53 53 46 46 46 23 23 23 11 11 11 19 19 19 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 10 10 10 14 14 14 20 20 20 ++17 17 17 20 20 20 20 20 20 16 16 16 10 10 10 6 6 6 11 11 11 20 20 20 ++21 21 21 21 21 21 16 16 16 10 10 10 13 13 13 20 20 20 20 20 20 14 14 14 ++6 6 6 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 8 8 8 11 11 11 17 17 17 20 20 20 14 14 14 3 3 3 ++0 0 0 19 19 19 38 38 38 42 42 42 27 27 27 4 4 4 0 0 0 6 6 6 ++6 6 6 21 21 21 38 38 38 44 44 44 36 36 36 16 16 16 4 4 4 8 8 8 ++0 0 0 4 4 4 38 38 38 50 50 50 20 20 20 0 0 0 3 3 3 10 10 10 ++0 0 0 8 8 8 43 43 43 51 51 51 24 24 24 10 10 10 21 21 21 24 24 24 ++16 16 16 0 0 0 29 29 29 56 56 56 37 37 37 4 4 4 0 0 0 8 8 8 ++8 8 8 0 0 0 34 34 34 63 63 63 45 45 45 13 13 13 8 8 8 14 14 14 ++8 8 8 14 14 14 37 37 37 58 58 58 56 56 56 32 32 32 19 19 19 25 25 25 ++25 25 25 20 20 20 34 34 34 60 60 60 63 63 63 39 39 39 21 21 21 24 24 24 ++27 27 27 20 20 20 28 28 28 59 59 59 70 70 70 39 39 39 16 16 16 36 36 36 ++32 32 32 43 43 43 48 48 48 62 62 62 72 72 72 49 49 49 32 32 32 44 44 44 ++59 59 59 43 43 43 42 42 42 66 66 66 75 75 75 61 61 61 48 48 48 45 45 45 ++59 59 59 70 70 70 53 53 53 65 65 65 89 89 89 70 70 70 51 51 51 58 58 58 ++60 60 60 70 70 70 83 83 83 66 66 66 92 92 92 76 76 76 74 74 74 61 61 61 ++65 65 65 80 80 80 89 89 89 81 81 81 71 71 71 71 71 71 74 74 74 75 75 75 ++72 72 72 73 73 73 87 87 87 95 95 94 87 87 87 83 83 83 84 84 84 80 80 80 ++84 84 84 84 84 84 81 81 81 92 92 92 109 110 110 96 97 98 82 82 82 90 90 90 ++94 94 94 92 92 92 88 88 88 90 90 90 101 101 101 109 110 110 103 103 102 88 88 88 ++85 85 85 105 105 105 121 121 119 112 112 113 95 95 94 92 92 92 103 103 102 115 116 115 ++99 100 97 91 93 92 88 90 87 99 99 99 117 117 117 121 113 124 111 104 112 124 112 115 ++115 116 115 112 115 112 105 105 105 101 101 101 99 99 99 100 101 103 105 104 105 103 103 102 ++99 99 99 112 112 113 109 110 110 121 121 119 122 121 126 101 101 101 101 101 101 101 101 101 ++112 112 113 105 105 105 109 110 110 112 112 113 112 112 113 117 117 117 125 122 126 122 121 126 ++105 105 105 99 99 99 91 91 91 93 93 93 103 103 102 109 110 110 105 105 105 96 96 96 ++96 97 98 109 110 110 117 117 117 112 112 113 99 99 99 101 101 101 109 110 110 103 103 102 ++105 105 105 105 105 105 96 97 98 87 87 87 81 81 81 82 82 82 83 83 83 82 82 82 ++78 78 78 83 83 83 94 94 94 105 104 105 105 105 105 103 103 102 99 99 99 101 101 101 ++96 96 96 89 89 89 78 78 78 72 72 72 70 70 70 70 70 70 68 68 68 65 65 65 ++63 63 63 63 63 63 71 71 71 77 77 77 83 83 83 92 92 92 96 97 98 90 90 90 ++90 90 90 83 83 83 71 71 71 60 60 60 53 53 53 52 52 52 53 53 53 54 54 54 ++74 74 74 71 71 71 61 61 61 45 45 45 36 36 36 38 38 38 51 51 51 62 62 62 ++71 71 71 48 48 48 34 34 34 51 51 51 70 70 70 71 71 71 65 65 65 66 66 66 ++66 66 66 70 70 70 69 69 69 62 62 62 52 52 52 49 49 49 53 53 53 56 56 56 ++40 40 40 24 24 24 36 36 36 56 56 56 68 68 68 57 57 57 38 38 38 53 53 53 ++60 60 60 57 57 57 51 51 51 59 59 59 61 61 61 61 61 61 27 27 27 13 13 13 ++28 28 28 54 54 54 59 59 59 20 20 20 44 44 44 36 36 36 49 49 49 52 52 52 ++50 50 50 40 40 40 37 37 37 32 32 32 24 24 24 28 28 28 33 33 33 25 25 25 ++25 25 25 45 45 45 46 46 46 51 51 51 28 28 28 14 14 14 11 11 11 19 19 19 ++16 16 16 38 38 38 53 53 53 52 52 52 50 50 50 44 44 44 42 42 42 49 49 49 ++44 44 44 46 46 46 39 39 39 24 24 24 25 25 25 42 42 42 48 48 48 39 39 39 ++11 11 11 6 6 6 8 8 8 21 21 21 36 36 36 40 40 40 33 33 33 23 23 23 ++4 4 4 3 3 3 21 21 21 46 46 46 54 54 54 45 45 45 39 39 39 44 44 44 ++54 54 54 38 38 38 48 48 48 42 42 42 25 25 25 34 34 34 36 36 36 20 20 20 ++10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++8 8 8 0 0 0 0 0 0 23 23 23 31 31 31 27 27 27 34 34 34 50 50 50 ++51 51 51 52 52 52 37 37 37 10 10 10 3 3 3 25 25 25 44 44 44 49 49 49 ++48 48 48 50 50 50 51 51 51 48 48 48 40 40 40 27 27 27 8 8 8 0 0 0 ++16 16 16 19 19 19 23 23 23 24 24 24 24 24 24 24 24 24 25 25 25 28 28 28 ++29 29 29 13 13 13 25 25 25 46 46 46 45 45 45 33 33 33 32 32 32 33 33 33 ++24 24 24 27 27 27 11 11 11 6 6 6 28 28 28 40 40 40 37 37 37 33 33 33 ++10 10 10 0 0 0 6 6 6 17 17 17 13 13 13 0 0 0 4 4 4 23 23 23 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 13 13 13 17 17 17 20 20 20 ++17 17 17 20 20 20 21 21 21 16 16 16 6 6 6 6 6 6 14 14 14 20 20 20 ++19 19 19 19 19 19 16 16 16 11 11 11 16 16 16 21 21 21 17 17 17 8 8 8 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 3 3 3 10 10 10 19 19 19 17 17 17 10 10 10 ++0 0 0 4 4 4 24 24 24 42 42 42 39 39 39 20 20 20 0 0 0 0 0 0 ++6 6 6 6 6 6 24 24 24 45 45 45 46 46 46 28 28 28 11 11 11 3 3 3 ++0 0 0 4 4 4 13 13 13 34 34 34 48 48 48 23 23 23 0 0 0 8 8 8 ++3 3 3 6 6 6 8 8 8 29 29 29 51 51 51 37 37 37 14 14 14 20 20 20 ++21 21 21 8 8 8 3 3 3 36 36 36 56 56 56 29 29 29 0 0 0 10 10 10 ++14 14 14 4 4 4 0 0 0 33 33 33 63 63 63 49 49 49 13 13 13 6 6 6 ++16 16 16 3 3 3 14 14 14 44 44 44 61 61 61 54 54 54 36 36 36 20 20 20 ++31 31 31 17 17 17 20 20 20 42 42 42 59 59 59 56 56 56 36 36 36 16 16 16 ++24 24 24 27 27 27 23 23 23 36 36 36 61 61 61 65 65 65 43 43 43 25 25 25 ++34 34 34 39 39 39 36 36 36 43 43 43 68 68 68 71 71 71 57 57 57 60 60 60 ++46 46 46 42 42 42 39 39 39 46 46 46 65 65 65 77 77 77 69 69 69 54 54 54 ++68 68 68 60 60 60 52 52 52 58 58 58 69 69 69 81 81 81 77 77 77 51 51 51 ++74 74 74 85 85 85 62 62 62 70 70 70 71 71 71 96 97 98 75 75 75 67 67 67 ++72 72 72 87 87 87 88 88 88 75 75 75 68 68 68 75 75 75 80 80 80 75 75 75 ++78 78 78 84 84 84 95 95 94 94 94 94 81 81 81 80 80 80 87 87 87 85 85 85 ++87 87 87 80 80 80 96 96 96 109 110 110 95 95 94 87 87 87 91 91 91 92 92 92 ++96 97 98 92 92 92 93 93 93 103 103 102 109 110 110 101 101 101 93 93 93 90 90 90 ++103 103 102 121 121 119 121 121 119 99 99 99 92 92 92 105 105 105 115 116 115 112 112 113 ++96 91 95 101 96 101 111 104 112 121 113 124 122 121 126 105 104 105 94 94 95 96 97 98 ++127 127 127 121 121 119 105 105 105 93 93 93 96 97 98 109 110 110 109 110 110 100 101 103 ++109 110 110 121 121 119 109 110 110 121 121 119 125 125 127 115 116 115 117 117 117 115 116 115 ++112 112 113 109 110 110 109 110 110 109 110 110 109 110 110 115 116 115 121 121 119 117 117 117 ++127 127 127 117 117 117 103 103 102 92 92 92 93 93 93 103 103 102 109 110 110 112 112 113 ++89 89 89 112 112 113 112 112 113 105 105 105 112 112 113 105 104 105 94 94 94 109 110 110 ++105 105 105 109 110 110 109 110 110 99 99 99 92 92 92 92 92 92 95 95 94 95 95 94 ++96 96 96 96 96 96 101 101 101 105 105 105 105 105 105 103 103 102 103 103 102 105 105 105 ++105 104 105 105 104 105 101 101 101 91 91 91 80 80 80 72 72 72 71 71 71 72 72 72 ++68 68 68 63 63 63 67 67 67 69 69 69 70 70 70 83 83 83 91 91 91 83 83 83 ++90 90 90 89 89 89 85 85 85 76 76 76 69 69 69 68 68 68 72 72 72 77 77 77 ++80 80 80 69 69 69 51 51 51 44 44 44 50 50 50 54 54 54 54 54 54 56 56 56 ++85 85 85 73 73 73 69 69 69 74 74 74 78 78 78 77 77 77 76 76 76 77 77 77 ++67 67 67 63 63 63 57 57 57 43 43 43 31 31 31 24 24 24 28 28 28 39 39 39 ++65 65 65 36 36 36 28 28 28 40 40 40 58 58 58 56 56 56 40 40 40 53 53 53 ++57 57 57 54 54 54 48 48 48 51 51 51 51 51 51 53 53 53 24 24 24 17 17 17 ++29 29 29 48 48 48 52 52 52 16 16 16 42 42 42 28 28 28 33 33 33 31 31 31 ++36 36 36 34 34 34 31 31 31 27 27 27 29 29 29 37 37 37 33 33 33 19 19 19 ++34 34 34 49 49 49 45 45 45 48 48 48 24 24 24 16 16 16 16 16 16 19 19 19 ++19 19 19 40 40 40 52 52 52 54 54 54 54 54 54 49 49 49 43 43 43 43 43 43 ++43 43 43 51 51 51 53 53 53 46 46 46 42 42 42 43 43 43 49 49 49 53 53 53 ++50 50 50 46 46 46 45 45 45 48 48 48 50 50 50 49 49 49 43 43 43 37 37 37 ++34 34 34 37 37 37 44 44 44 50 50 50 46 46 46 38 38 38 37 37 37 42 42 42 ++50 50 50 40 40 40 49 49 49 45 45 45 33 33 33 31 31 31 28 28 28 32 32 32 ++43 43 43 39 39 39 37 37 37 38 38 38 38 38 38 37 37 37 37 37 37 38 38 38 ++37 37 37 29 29 29 34 34 34 45 45 45 42 42 42 29 29 29 33 33 33 50 50 50 ++39 39 39 51 51 51 57 57 57 50 50 50 43 43 43 43 43 43 49 49 49 52 52 52 ++46 46 46 43 43 43 40 40 40 43 43 43 46 46 46 48 48 48 46 46 46 45 45 45 ++43 43 43 39 39 39 33 33 33 29 29 29 27 27 27 23 23 23 19 19 19 14 14 14 ++13 13 13 0 0 0 19 19 19 38 38 38 29 29 29 11 11 11 8 8 8 10 10 10 ++13 13 13 17 17 17 8 8 8 8 8 8 32 32 32 44 44 44 34 34 34 21 21 21 ++13 13 13 16 16 16 13 13 13 8 8 8 10 10 10 20 20 20 32 32 32 39 39 39 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 6 6 6 14 14 14 20 20 20 20 20 20 ++17 17 17 19 19 19 21 21 21 14 14 14 4 4 4 8 8 8 17 17 17 20 20 20 ++17 17 17 16 16 16 14 14 14 14 14 14 19 19 19 20 20 20 13 13 13 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++4 4 4 4 4 4 0 0 0 0 0 0 3 3 3 13 13 13 17 17 17 19 19 19 ++10 10 10 0 0 0 6 6 6 24 24 24 38 38 38 40 40 40 23 23 23 0 0 0 ++0 0 0 6 6 6 14 14 14 25 25 25 39 39 39 49 49 49 33 33 33 0 0 0 ++4 4 4 0 0 0 0 0 0 10 10 10 38 38 38 51 51 51 31 31 31 0 0 0 ++10 10 10 0 0 0 0 0 0 3 3 3 32 32 32 51 51 51 43 43 43 20 20 20 ++19 19 19 17 17 17 8 8 8 6 6 6 31 31 31 51 51 51 39 39 39 4 4 4 ++0 0 0 13 13 13 10 10 10 4 4 4 33 33 33 61 61 61 50 50 50 11 11 11 ++10 10 10 11 11 11 13 13 13 17 17 17 40 40 40 65 65 65 58 58 58 29 29 29 ++11 11 11 23 23 23 23 23 23 17 17 17 33 33 33 62 62 62 62 62 62 36 36 36 ++19 19 19 24 24 24 31 31 31 25 25 25 33 33 33 67 67 67 73 73 73 42 42 42 ++46 46 46 53 53 53 53 53 53 34 34 34 39 39 39 70 70 70 74 74 74 58 58 58 ++39 39 39 46 46 46 50 50 50 40 40 40 45 45 45 68 68 68 77 77 77 81 81 81 ++58 58 58 48 48 48 52 52 52 59 59 59 54 54 54 70 70 70 88 88 88 81 81 81 ++83 83 83 61 61 61 70 70 70 60 60 60 72 72 72 72 72 72 93 93 93 83 83 83 ++85 85 85 81 81 81 75 75 75 74 74 74 75 75 75 77 77 77 77 77 77 76 76 76 ++88 88 88 96 97 98 93 93 93 84 84 84 87 87 87 84 84 84 82 82 82 88 88 88 ++83 83 83 99 99 99 109 110 110 99 99 99 87 87 87 90 90 90 96 97 98 95 95 94 ++95 95 94 99 99 99 109 110 110 115 116 115 105 104 105 89 89 89 93 93 93 109 110 110 ++127 127 127 117 117 117 103 103 102 96 96 96 105 105 105 115 116 115 109 110 110 96 97 98 ++111 104 112 111 104 112 121 121 119 118 122 119 94 99 95 91 96 86 86 124 83 86 124 83 ++112 115 112 118 122 119 121 121 119 115 116 115 112 112 113 112 112 113 112 112 113 109 110 110 ++105 105 105 112 112 113 121 121 119 112 112 113 115 116 115 128 128 128 117 117 117 115 116 115 ++109 110 110 109 110 110 112 112 113 112 112 113 112 112 113 117 117 117 121 121 119 121 121 119 ++127 127 127 117 117 117 109 110 110 105 105 105 101 101 101 99 99 99 109 110 110 121 121 119 ++109 110 110 103 103 102 103 103 102 105 105 105 115 116 115 115 116 115 99 99 99 99 99 99 ++112 112 113 115 116 115 115 116 115 109 110 110 109 110 110 109 110 110 109 110 110 105 105 105 ++105 104 105 103 103 102 103 103 102 105 104 105 105 104 105 103 103 102 101 101 101 103 103 102 ++96 96 96 99 99 99 99 99 99 99 99 99 95 95 94 89 89 89 83 83 83 80 80 80 ++82 82 82 77 77 77 77 77 77 75 75 75 73 73 73 80 80 80 83 83 83 73 73 73 ++70 70 70 75 75 75 81 81 81 81 81 81 77 77 77 76 76 76 80 80 80 84 84 84 ++77 77 77 75 75 75 72 72 72 70 70 70 68 68 68 65 65 65 66 66 66 69 69 69 ++59 59 59 62 62 62 67 67 67 63 63 63 54 54 54 52 52 52 56 56 56 54 54 54 ++58 58 58 51 51 51 46 46 46 38 38 38 38 38 38 39 39 39 36 36 36 43 43 43 ++51 51 51 43 43 43 32 32 32 28 28 28 43 43 43 51 51 51 45 45 45 45 45 45 ++43 43 43 46 46 46 43 43 43 44 44 44 38 38 38 40 40 40 20 20 20 24 24 24 ++24 24 24 36 36 36 39 39 39 16 16 16 32 32 32 23 23 23 27 27 27 27 27 27 ++27 27 27 34 34 34 37 37 37 37 37 37 40 40 40 39 39 39 24 24 24 8 8 8 ++45 45 45 53 53 53 48 48 48 46 46 46 20 20 20 16 16 16 16 16 16 14 14 14 ++27 27 27 45 45 45 49 49 49 50 50 50 53 53 53 50 50 50 46 46 46 40 40 40 ++48 48 48 51 51 51 52 52 52 54 54 54 54 54 54 48 48 48 43 43 43 46 46 46 ++51 51 51 49 49 49 46 46 46 43 43 43 42 42 42 42 42 42 44 44 44 45 45 45 ++46 46 46 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 50 50 50 50 50 50 ++48 48 48 45 45 45 50 50 50 45 45 45 37 37 37 29 29 29 28 28 28 43 43 43 ++48 48 48 46 46 46 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 46 46 46 ++43 43 43 45 45 45 46 46 46 46 46 46 46 46 46 48 48 48 48 48 48 48 48 48 ++48 48 48 45 45 45 44 44 44 49 49 49 53 53 53 52 52 52 46 46 46 40 40 40 ++48 48 48 45 45 45 45 45 45 49 49 49 49 49 49 42 42 42 32 32 32 27 27 27 ++20 20 20 14 14 14 10 10 10 10 10 10 13 13 13 16 16 16 14 14 14 11 11 11 ++11 11 11 25 25 25 38 38 38 34 34 34 19 19 19 11 11 11 13 13 13 11 11 11 ++16 16 16 10 10 10 14 14 14 28 28 28 36 36 36 28 28 28 13 13 13 0 0 0 ++6 6 6 17 17 17 19 19 19 11 11 11 17 17 17 31 31 31 33 33 33 25 25 25 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 6 6 6 17 17 17 21 21 21 20 20 20 ++17 17 17 17 17 17 21 21 21 14 14 14 3 3 3 10 10 10 20 20 20 17 17 17 ++19 19 19 14 14 14 13 13 13 17 17 17 20 20 20 16 16 16 6 6 6 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 13 13 13 21 21 21 ++13 13 13 3 3 3 0 0 0 6 6 6 24 24 24 43 43 43 39 39 39 16 16 16 ++0 0 0 0 0 0 10 10 10 14 14 14 25 25 25 45 45 45 45 45 45 24 24 24 ++8 8 8 0 0 0 0 0 0 3 3 3 6 6 6 42 42 42 52 52 52 16 16 16 ++10 10 10 0 0 0 4 4 4 6 6 6 0 0 0 31 31 31 56 56 56 40 40 40 ++24 24 24 14 14 14 19 19 19 6 6 6 0 0 0 39 39 39 58 58 58 29 29 29 ++10 10 10 6 6 6 20 20 20 10 10 10 0 0 0 38 38 38 63 63 63 42 42 42 ++19 19 19 16 16 16 13 13 13 10 10 10 20 20 20 46 46 46 59 59 59 53 53 53 ++20 20 20 23 23 23 21 21 21 14 14 14 19 19 19 45 45 45 63 63 63 60 60 60 ++36 36 36 23 23 23 28 28 28 31 31 31 25 25 25 45 45 45 69 69 69 70 70 70 ++50 50 50 45 45 45 46 46 46 37 37 37 42 42 42 66 66 66 74 74 74 75 75 75 ++53 53 53 44 44 44 46 46 46 46 46 46 51 51 51 62 62 62 74 74 74 94 94 94 ++63 63 63 56 56 56 51 51 51 57 57 57 62 62 62 66 66 66 78 78 78 99 99 99 ++82 82 82 66 66 66 60 60 60 76 76 76 60 60 60 74 74 74 88 88 88 99 99 99 ++94 94 94 80 80 80 72 72 72 76 76 76 80 80 80 77 77 77 81 81 81 89 89 89 ++95 95 94 95 95 94 87 87 87 83 83 83 90 90 90 87 87 87 84 84 84 91 91 91 ++94 94 94 112 112 113 103 103 102 87 87 87 94 94 94 99 99 99 94 94 94 101 101 101 ++101 101 101 109 110 110 112 112 113 109 110 110 96 97 98 94 94 94 109 110 110 125 122 126 ++128 128 128 109 110 110 99 99 99 105 105 105 115 116 115 112 112 113 103 103 102 99 99 99 ++105 101 107 125 122 126 116 129 109 86 124 83 86 124 83 83 172 72 83 172 115 83 172 72 ++94 99 95 107 112 107 118 122 119 128 129 128 118 122 119 105 105 105 105 104 105 112 112 113 ++105 105 105 112 112 113 129 129 130 125 122 126 121 121 119 128 128 128 117 117 117 115 116 115 ++117 117 117 121 121 119 121 121 119 115 116 115 115 116 115 117 117 117 117 117 117 115 116 115 ++115 116 115 112 112 113 115 116 115 117 117 117 115 116 115 109 110 110 112 112 113 117 117 117 ++115 116 115 101 101 101 115 116 115 117 117 117 103 103 102 105 105 105 109 110 110 105 104 105 ++109 110 110 109 110 110 105 105 105 105 105 105 109 110 110 109 110 110 105 105 105 103 103 102 ++101 101 101 101 101 101 101 101 101 99 99 99 99 99 99 99 99 99 99 99 99 96 96 96 ++99 99 99 94 94 94 89 89 89 89 89 89 93 93 93 95 95 94 93 93 93 90 90 90 ++87 87 87 84 84 84 83 83 83 83 83 83 83 83 83 85 85 85 83 83 83 77 77 77 ++74 74 74 77 77 77 80 80 80 78 78 78 75 75 75 72 72 72 69 69 69 68 68 68 ++75 75 75 67 67 67 65 65 65 67 67 67 67 67 67 66 66 66 62 62 62 60 60 60 ++60 60 60 58 58 58 59 59 59 57 57 57 53 53 53 59 59 59 60 60 60 51 51 51 ++52 52 52 53 53 53 53 53 53 43 43 43 49 49 49 56 56 56 46 46 46 48 48 48 ++38 38 38 52 52 52 48 48 48 39 39 39 42 42 42 44 44 44 42 42 42 33 33 33 ++34 34 34 37 37 37 34 34 34 39 39 39 38 38 38 43 43 43 23 23 23 27 27 27 ++17 17 17 28 28 28 36 36 36 32 32 32 31 31 31 25 25 25 32 32 32 38 38 38 ++29 29 29 34 34 34 38 38 38 42 42 42 43 43 43 33 33 33 27 27 27 33 33 33 ++48 48 48 57 57 57 50 50 50 48 48 48 19 19 19 13 13 13 16 16 16 11 11 11 ++37 37 37 53 53 53 49 49 49 46 46 46 50 50 50 50 50 50 53 53 53 49 49 49 ++40 40 40 51 51 51 56 56 56 56 56 56 52 52 52 42 42 42 39 39 39 50 50 50 ++53 53 53 52 52 52 49 49 49 45 45 45 43 43 43 43 43 43 45 45 45 48 48 48 ++44 44 44 43 43 43 44 44 44 45 45 45 48 48 48 48 48 48 44 44 44 42 42 42 ++44 44 44 42 42 42 44 44 44 34 34 34 25 25 25 25 25 25 28 28 28 40 40 40 ++48 48 48 48 48 48 48 48 48 48 48 48 46 46 46 46 46 46 48 48 48 48 48 48 ++46 46 46 48 48 48 46 46 46 43 43 43 45 45 45 49 49 49 46 46 46 40 40 40 ++50 50 50 50 50 50 49 49 49 44 44 44 40 40 40 40 40 40 46 46 46 51 51 51 ++50 50 50 38 38 38 27 27 27 21 21 21 17 17 17 11 11 11 10 10 10 11 11 11 ++11 11 11 11 11 11 11 11 11 11 11 11 13 13 13 14 14 14 16 16 16 14 14 14 ++21 21 21 34 34 34 34 34 34 20 20 20 11 11 11 11 11 11 13 13 13 14 14 14 ++13 13 13 10 10 10 27 27 27 42 42 42 32 32 32 20 20 20 19 19 19 14 14 14 ++17 17 17 17 17 17 13 13 13 11 11 11 19 19 19 28 28 28 28 28 28 20 20 20 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 6 6 6 17 17 17 21 21 21 20 20 20 ++17 17 17 17 17 17 20 20 20 14 14 14 3 3 3 11 11 11 20 20 20 16 16 16 ++21 21 21 13 13 13 11 11 11 17 17 17 19 19 19 11 11 11 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 13 13 13 ++19 19 19 8 8 8 3 3 3 4 4 4 10 10 10 29 29 29 40 40 40 36 36 36 ++3 3 3 0 0 0 8 8 8 21 21 21 19 19 19 21 21 21 38 38 38 50 50 50 ++0 0 0 8 8 8 10 10 10 0 0 0 0 0 0 4 4 4 31 31 31 57 57 57 ++14 14 14 10 10 10 6 6 6 8 8 8 4 4 4 3 3 3 28 28 28 59 59 59 ++36 36 36 25 25 25 17 17 17 13 13 13 6 6 6 3 3 3 29 29 29 62 62 62 ++39 39 39 14 14 14 0 0 0 10 10 10 16 16 16 10 10 10 32 32 32 67 67 67 ++44 44 44 16 16 16 10 10 10 21 21 21 14 14 14 11 11 11 40 40 40 70 70 70 ++58 58 58 23 23 23 11 11 11 28 28 28 24 24 24 16 16 16 40 40 40 69 69 69 ++59 59 59 38 38 38 24 24 24 31 31 31 32 32 32 27 27 27 45 45 45 76 76 76 ++80 80 80 49 49 49 33 33 33 46 46 46 63 63 63 48 48 48 37 37 37 74 74 74 ++84 84 84 57 57 57 48 48 48 50 50 50 61 61 61 68 68 68 61 61 61 67 67 67 ++89 89 89 73 73 73 62 62 62 54 54 54 59 59 59 76 76 76 82 82 82 74 74 74 ++91 91 91 78 78 78 70 70 70 68 68 68 74 74 74 72 72 72 81 81 81 92 92 92 ++99 99 99 88 88 88 80 80 80 78 78 78 76 76 76 77 77 77 89 89 89 103 103 102 ++99 99 99 83 83 83 83 83 83 91 91 91 88 88 88 87 87 87 94 94 94 95 95 94 ++121 121 119 96 97 98 90 90 90 96 97 98 96 96 96 96 96 96 101 101 101 103 103 102 ++112 112 113 115 116 115 109 110 110 96 96 96 95 95 94 112 112 113 125 125 127 128 128 128 ++117 117 117 105 105 105 109 110 110 121 121 119 115 116 115 103 103 102 103 103 102 115 116 115 ++127 127 127 116 129 109 86 124 83 86 124 83 83 172 115 83 172 72 83 172 72 83 172 72 ++112 115 112 105 105 105 112 115 112 129 129 130 128 129 128 112 112 113 105 105 105 115 116 115 ++112 112 113 115 116 115 121 121 119 137 137 137 127 127 127 109 110 110 121 121 119 121 121 119 ++115 116 115 121 121 119 121 121 119 115 116 115 115 116 115 121 121 119 121 121 119 117 117 117 ++115 116 115 121 121 119 117 117 117 112 112 113 112 112 113 117 117 117 117 117 117 112 112 113 ++115 116 115 112 112 113 112 112 113 109 110 110 112 112 113 115 116 115 109 110 110 112 112 113 ++109 110 110 109 110 110 105 105 105 105 105 105 105 105 105 105 104 105 103 103 102 103 103 102 ++103 103 102 105 104 105 101 101 101 95 95 94 94 94 94 96 97 98 96 97 98 94 94 94 ++96 97 98 99 99 99 101 101 101 96 97 98 91 91 91 87 87 87 85 85 85 85 85 85 ++85 85 85 84 84 84 82 82 82 84 84 84 87 87 87 87 87 87 85 85 85 84 84 84 ++84 84 84 82 82 82 78 78 78 78 78 78 81 81 81 80 80 80 76 76 76 74 74 74 ++75 75 75 69 69 69 71 71 71 76 76 76 74 74 74 72 72 72 72 72 72 70 70 70 ++61 61 61 53 53 53 51 51 51 52 52 52 54 54 54 62 62 62 60 60 60 45 45 45 ++45 45 45 57 57 57 59 59 59 38 38 38 38 38 38 48 48 48 37 37 37 37 37 37 ++37 37 37 54 54 54 51 51 51 52 52 52 53 53 53 49 49 49 54 54 54 52 52 52 ++34 34 34 31 31 31 27 27 27 38 38 38 48 48 48 56 56 56 29 29 29 24 24 24 ++20 20 20 32 32 32 45 45 45 52 52 52 36 36 36 31 31 31 34 34 34 43 43 43 ++52 52 52 49 49 49 42 42 42 39 39 39 32 32 32 14 14 14 21 21 21 50 50 50 ++44 44 44 56 56 56 53 53 53 50 50 50 19 19 19 13 13 13 17 17 17 13 13 13 ++39 39 39 56 56 56 46 46 46 42 42 42 43 43 43 45 45 45 56 56 56 54 54 54 ++50 50 50 48 48 48 40 40 40 44 44 44 57 57 57 58 58 58 46 46 46 43 43 43 ++44 44 44 44 44 44 46 46 46 48 48 48 48 48 48 48 48 48 46 46 46 45 45 45 ++51 51 51 48 48 48 46 46 46 49 49 49 48 48 48 44 44 44 44 44 44 48 48 48 ++46 46 46 42 42 42 44 44 44 32 32 32 23 23 23 37 37 37 44 44 44 48 48 48 ++45 45 45 46 46 46 46 46 46 45 45 45 45 45 45 45 45 45 46 46 46 46 46 46 ++44 44 44 40 40 40 42 42 42 46 46 46 48 48 48 45 45 45 45 45 45 49 49 49 ++48 48 48 48 48 48 46 46 46 45 45 45 49 49 49 51 51 51 45 45 45 37 37 37 ++37 37 37 27 27 27 17 17 17 16 16 16 14 14 14 10 10 10 11 11 11 14 14 14 ++10 10 10 14 14 14 19 19 19 19 19 19 14 14 14 13 13 13 14 14 14 17 17 17 ++37 37 37 34 34 34 19 19 19 8 8 8 14 14 14 13 13 13 10 10 10 16 16 16 ++13 13 13 19 19 19 38 38 38 37 37 37 10 10 10 4 4 4 17 17 17 11 11 11 ++17 17 17 10 10 10 11 11 11 27 27 27 36 36 36 31 31 31 19 19 19 11 11 11 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 11 11 11 20 20 20 21 21 21 17 17 17 ++20 20 20 17 17 17 20 20 20 10 10 10 10 10 10 20 20 20 17 17 17 20 20 20 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++10 10 10 23 23 23 8 8 8 0 0 0 10 10 10 19 19 19 23 23 23 38 38 38 ++39 39 39 10 10 10 0 0 0 17 17 17 25 25 25 17 17 17 21 21 21 40 40 40 ++56 56 56 4 4 4 0 0 0 11 11 11 6 6 6 0 0 0 6 6 6 28 28 28 ++59 59 59 14 14 14 0 0 0 3 3 3 8 8 8 6 6 6 4 4 4 27 27 27 ++60 60 60 37 37 37 21 21 21 20 20 20 14 14 14 6 6 6 13 13 13 24 24 24 ++67 67 67 36 36 36 11 11 11 11 11 11 13 13 13 13 13 13 19 19 19 25 25 25 ++62 62 62 51 51 51 28 28 28 11 11 11 14 14 14 19 19 19 24 24 24 37 37 37 ++73 73 73 54 54 54 28 28 28 20 20 20 27 27 27 25 25 25 25 25 25 37 37 37 ++68 68 68 74 74 74 44 44 44 27 27 27 37 37 37 39 39 39 46 46 46 52 52 52 ++71 71 71 74 74 74 59 59 59 65 65 65 50 50 50 43 43 43 42 42 42 43 43 43 ++74 74 74 83 83 83 63 63 63 61 61 61 71 71 71 59 59 59 53 53 53 57 57 57 ++75 75 75 85 85 85 68 68 68 61 61 61 83 83 83 83 83 83 67 67 67 70 70 70 ++77 77 77 94 94 94 87 87 87 69 69 69 76 76 76 94 94 94 91 91 91 75 75 75 ++87 87 87 96 97 98 90 90 90 83 83 83 82 82 82 91 91 91 105 105 105 99 99 99 ++90 90 90 88 88 88 89 89 89 91 91 91 90 90 90 92 92 92 103 103 102 117 117 117 ++99 99 99 95 95 94 93 93 93 96 96 96 101 101 101 105 104 105 105 104 105 105 104 105 ++121 121 119 105 104 105 103 103 102 105 105 105 109 110 110 121 121 119 129 129 130 122 121 126 ++109 108 122 122 111 100 113 122 108 98 114 115 124 112 115 124 112 115 112 115 112 122 111 100 ++105 107 94 86 124 83 83 172 72 83 172 72 83 172 72 83 172 72 83 172 72 83 172 72 ++83 172 72 86 124 83 118 122 119 143 136 140 143 136 140 105 107 94 109 108 122 91 96 86 ++99 99 99 112 112 113 129 129 130 134 134 134 131 131 131 115 116 115 121 121 119 121 121 119 ++125 125 127 122 121 126 125 125 127 118 122 119 78 79 82 40 42 44 50 51 53 46 47 50 ++43 44 47 43 44 47 43 44 47 43 44 47 43 44 47 43 44 47 43 44 47 43 44 47 ++46 47 50 46 47 50 46 47 50 42 43 45 35 36 38 43 44 47 122 121 126 118 122 119 ++121 121 119 115 116 115 103 103 102 96 97 98 105 105 105 121 121 119 121 121 119 109 110 110 ++92 92 92 91 91 91 91 91 91 92 92 92 94 94 94 93 93 93 87 87 87 82 82 82 ++85 85 85 90 90 90 101 101 101 105 105 105 109 110 110 103 103 102 92 92 92 83 83 83 ++80 80 80 75 75 75 71 71 71 72 72 72 74 74 74 80 80 80 91 91 91 103 103 102 ++101 101 101 91 91 91 99 99 99 96 96 96 87 87 87 85 85 85 80 80 80 82 82 82 ++83 83 83 89 89 89 88 88 88 76 76 76 65 65 65 58 58 58 51 51 51 45 45 45 ++44 44 44 44 44 44 43 43 43 43 43 43 44 44 44 51 51 51 60 60 60 68 68 68 ++38 38 38 46 46 46 63 63 63 56 56 56 34 34 34 27 27 27 31 31 31 48 48 48 ++63 63 63 59 59 59 56 56 56 66 66 66 67 67 67 66 66 66 48 48 48 60 60 60 ++42 42 42 20 20 20 10 10 10 20 20 20 38 38 38 53 53 53 49 49 49 25 25 25 ++21 21 21 23 23 23 40 40 40 56 56 56 52 52 52 42 42 42 32 32 32 21 21 21 ++10 10 10 19 19 19 21 21 21 17 17 17 24 24 24 39 39 39 49 49 49 50 50 50 ++44 44 44 51 51 51 49 49 49 32 32 32 16 16 16 11 11 11 11 11 11 10 10 10 ++48 48 48 50 50 50 50 50 50 46 46 46 43 43 43 43 43 43 48 48 48 52 52 52 ++53 53 53 48 48 48 43 43 43 44 44 44 50 50 50 53 53 53 52 52 52 50 50 50 ++45 45 45 46 46 46 49 49 49 51 51 51 52 52 52 52 52 52 50 50 50 48 48 48 ++45 45 45 48 48 48 46 46 46 43 43 43 45 45 45 49 49 49 46 46 46 40 40 40 ++48 48 48 40 40 40 29 29 29 24 24 24 27 27 27 36 36 36 44 44 44 50 50 50 ++45 45 45 46 46 46 46 46 46 46 46 46 46 46 46 45 45 45 44 44 44 43 43 43 ++42 42 42 45 45 45 48 48 48 48 48 48 45 45 45 45 45 45 48 48 48 51 51 51 ++48 48 48 46 46 46 48 48 48 45 45 45 36 36 36 25 25 25 32 32 32 43 43 43 ++16 16 16 14 14 14 14 14 14 13 13 13 11 11 11 11 11 11 11 11 11 13 13 13 ++20 20 20 8 8 8 6 6 6 16 16 16 16 16 16 11 11 11 24 24 24 42 42 42 ++29 29 29 23 23 23 13 13 13 10 10 10 13 13 13 17 17 17 16 16 16 11 11 11 ++32 32 32 33 33 33 27 27 27 16 16 16 11 11 11 16 16 16 16 16 16 11 11 11 ++14 14 14 8 8 8 20 20 20 38 38 38 34 34 34 13 13 13 3 3 3 17 17 17 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 11 11 11 20 20 20 21 21 21 17 17 17 ++20 20 20 17 17 17 20 20 20 10 10 10 10 10 10 20 20 20 17 17 17 20 20 20 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 6 6 6 10 10 10 11 11 11 13 13 13 13 13 13 13 13 13 ++13 13 13 13 13 13 10 10 10 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++6 6 6 20 20 20 13 13 13 0 0 0 6 6 6 14 14 14 19 19 19 29 29 29 ++38 38 38 36 36 36 23 23 23 4 4 4 6 6 6 21 21 21 24 24 24 17 17 17 ++39 39 39 43 43 43 25 25 25 0 0 0 4 4 4 10 10 10 0 0 0 6 6 6 ++23 23 23 56 56 56 20 20 20 0 0 0 11 11 11 0 0 0 4 4 4 10 10 10 ++31 31 31 57 57 57 43 43 43 16 16 16 21 21 21 16 16 16 3 3 3 17 17 17 ++31 31 31 59 59 59 46 46 46 14 14 14 14 14 14 8 8 8 0 0 0 21 21 21 ++39 39 39 60 60 60 57 57 57 31 31 31 13 13 13 14 14 14 19 19 19 23 23 23 ++39 39 39 69 69 69 68 68 68 33 33 33 16 16 16 25 25 25 29 29 29 24 24 24 ++48 48 48 68 68 68 68 68 68 54 54 54 38 38 38 42 42 42 53 53 53 42 42 42 ++39 39 39 81 81 81 82 82 82 62 62 62 32 32 32 43 43 43 52 52 52 44 44 44 ++50 50 50 73 73 73 85 85 85 81 81 81 59 59 59 48 48 48 59 59 59 60 60 60 ++61 61 61 77 77 77 91 91 91 90 90 90 80 80 80 68 68 68 66 66 66 70 70 70 ++67 67 67 84 84 84 91 91 91 87 87 87 87 87 87 87 87 87 83 83 83 82 82 82 ++80 80 80 85 85 85 105 105 105 91 91 91 94 94 94 109 110 110 92 92 92 87 87 87 ++90 90 90 92 92 92 92 92 92 90 90 90 95 95 94 105 105 105 109 110 110 105 105 105 ++96 97 98 101 101 101 101 101 101 99 99 99 99 99 99 103 103 102 105 105 105 109 110 110 ++109 110 110 103 103 102 105 105 105 112 112 113 117 117 117 125 122 126 125 125 127 115 116 115 ++115 116 115 122 111 100 109 110 110 98 114 115 109 108 122 109 108 122 98 114 115 83 172 72 ++146 184 30 83 172 72 83 172 72 83 172 115 83 172 72 83 172 72 83 172 72 83 172 72 ++83 172 72 86 124 83 238 240 244 254 249 251 255 255 255 255 255 255 252 251 251 252 251 251 ++252 251 251 200 220 210 200 220 210 200 220 210 200 220 210 180 183 185 180 183 185 169 175 167 ++112 112 113 118 122 119 122 121 126 115 116 115 26 29 32 1 3 7 11 13 16 14 16 19 ++11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 ++11 13 16 6 8 11 11 13 16 20 21 24 6 8 11 58 59 61 109 110 110 117 117 117 ++121 121 119 121 121 119 115 116 115 103 103 102 95 95 94 103 103 102 115 116 115 125 125 127 ++117 117 117 105 105 105 94 94 94 89 89 89 88 88 88 89 89 89 92 92 92 96 97 98 ++88 88 88 87 87 87 83 83 83 84 84 84 90 90 90 99 99 99 105 105 105 112 112 113 ++96 97 98 95 95 94 88 88 88 76 76 76 67 67 67 69 69 69 82 82 82 94 94 94 ++93 93 93 89 89 89 95 95 94 84 84 84 63 63 63 57 57 57 58 58 58 68 68 68 ++58 58 58 69 69 69 78 78 78 75 75 75 59 59 59 46 46 46 45 45 45 52 52 52 ++43 43 43 43 43 43 42 42 42 39 39 39 40 40 40 45 45 45 52 52 52 57 57 57 ++71 71 71 31 31 31 48 48 48 70 70 70 59 59 59 60 60 60 63 63 63 52 52 52 ++40 40 40 38 38 38 45 45 45 63 63 63 65 65 65 57 57 57 34 34 34 45 45 45 ++60 60 60 42 42 42 20 20 20 10 10 10 19 19 19 37 37 37 44 44 44 38 38 38 ++24 24 24 19 19 19 27 27 27 40 40 40 48 48 48 51 51 51 49 49 49 39 39 39 ++40 40 40 46 46 46 45 45 45 38 38 38 39 39 39 49 49 49 57 57 57 58 58 58 ++56 56 56 45 45 45 31 31 31 19 19 19 11 11 11 8 8 8 16 16 16 23 23 23 ++46 46 46 49 49 49 51 51 51 51 51 51 50 50 50 49 49 49 49 49 49 50 50 50 ++54 54 54 53 53 53 50 50 50 48 48 48 48 48 48 50 50 50 52 52 52 53 53 53 ++43 43 43 43 43 43 44 44 44 49 49 49 52 52 52 52 52 52 49 49 49 44 44 44 ++45 45 45 45 45 45 45 45 45 45 45 45 48 48 48 49 49 49 48 48 48 44 44 44 ++40 40 40 33 33 33 27 27 27 27 27 27 34 34 34 42 42 42 45 45 45 46 46 46 ++46 46 46 46 46 46 46 46 46 46 46 46 45 45 45 45 45 45 44 44 44 44 44 44 ++48 48 48 46 46 46 45 45 45 44 44 44 45 45 45 46 46 46 48 48 48 48 48 48 ++50 50 50 46 46 46 34 34 34 23 23 23 23 23 23 32 32 32 33 33 33 28 28 28 ++14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 ++10 10 10 17 17 17 17 17 17 10 10 10 14 14 14 27 27 27 34 34 34 32 32 32 ++23 23 23 14 14 14 13 13 13 19 19 19 17 17 17 11 11 11 16 16 16 27 27 27 ++33 33 33 28 28 28 20 20 20 11 11 11 10 10 10 13 13 13 13 13 13 11 11 11 ++4 4 4 24 24 24 37 37 37 31 31 31 19 19 19 13 13 13 13 13 13 13 13 13 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 11 11 11 20 20 20 21 21 21 17 17 17 ++20 20 20 17 17 17 20 20 20 10 10 10 10 10 10 20 20 20 17 17 17 20 20 20 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++10 10 10 11 11 11 16 16 16 19 19 19 20 20 20 19 19 19 17 17 17 17 17 17 ++20 20 20 19 19 19 17 17 17 14 14 14 11 11 11 8 8 8 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 14 14 14 17 17 17 6 6 6 0 0 0 8 8 8 16 16 16 17 17 17 ++23 23 23 37 37 37 34 34 34 14 14 14 6 6 6 20 20 20 24 24 24 14 14 14 ++24 24 24 33 33 33 39 39 39 19 19 19 0 0 0 6 6 6 3 3 3 0 0 0 ++4 4 4 25 25 25 54 54 54 23 23 23 0 0 0 13 13 13 0 0 0 6 6 6 ++4 4 4 36 36 36 50 50 50 39 39 39 24 24 24 21 21 21 20 20 20 14 14 14 ++3 3 3 40 40 40 59 59 59 43 43 43 16 16 16 4 4 4 11 11 11 14 14 14 ++11 11 11 45 45 45 61 61 61 50 50 50 31 31 31 17 17 17 14 14 14 19 19 19 ++19 19 19 50 50 50 68 68 68 59 59 59 39 39 39 24 24 24 24 24 24 32 32 32 ++25 25 25 50 50 50 69 69 69 73 73 73 57 57 57 44 44 44 46 46 46 39 39 39 ++40 40 40 67 67 67 74 74 74 76 76 76 52 52 52 45 45 45 45 45 45 50 50 50 ++46 46 46 68 68 68 88 88 88 91 91 91 69 69 69 51 51 51 58 58 58 59 59 59 ++49 49 49 70 70 70 94 94 94 99 99 99 81 81 81 66 66 66 66 66 66 72 72 72 ++70 70 70 71 71 71 87 87 87 105 105 105 105 104 105 78 78 78 71 71 71 87 87 87 ++81 81 81 90 90 90 87 87 87 112 112 113 115 116 115 96 96 96 99 99 99 85 85 85 ++92 92 92 94 94 94 94 94 94 96 97 98 105 105 105 112 112 113 109 110 110 99 99 99 ++101 101 101 103 103 102 105 104 105 103 103 102 103 103 102 105 105 105 109 110 110 109 110 110 ++103 103 102 105 105 105 115 116 115 121 121 119 125 122 126 127 127 127 121 121 119 112 112 113 ++98 114 115 109 108 122 109 108 122 121 113 124 113 122 108 86 124 83 141 180 99 146 184 30 ++146 184 30 83 172 72 83 172 72 83 172 115 83 172 72 83 172 72 83 172 72 83 172 72 ++83 172 72 83 172 115 238 240 244 255 255 255 252 251 251 255 255 255 255 255 255 252 251 251 ++255 255 255 252 251 251 255 255 255 255 255 255 255 255 255 252 251 251 246 251 251 200 220 210 ++134 134 134 122 121 126 129 129 130 87 87 87 1 3 7 11 13 16 6 8 11 10 11 14 ++8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 ++11 13 16 1 3 7 6 8 11 11 13 16 8 10 13 96 97 98 109 110 110 112 112 113 ++121 121 119 128 128 128 131 131 131 121 121 119 105 105 105 96 96 96 99 99 99 103 103 102 ++127 127 127 122 121 126 115 116 115 105 105 105 101 101 101 95 95 94 91 91 91 88 88 88 ++94 94 94 91 91 91 87 87 87 84 84 84 83 83 83 85 85 85 90 90 90 93 93 93 ++105 105 105 105 105 105 103 103 102 93 93 93 85 85 85 85 85 85 93 93 93 101 101 101 ++82 82 82 70 70 70 75 75 75 87 87 87 94 94 94 92 92 92 72 72 72 54 54 54 ++57 57 57 60 60 60 71 71 71 81 81 81 76 76 76 61 61 61 52 52 52 52 52 52 ++50 50 50 50 50 50 48 48 48 45 45 45 43 43 43 42 42 42 43 43 43 44 44 44 ++76 76 76 66 66 66 72 72 72 75 75 75 72 72 72 65 65 65 48 48 48 42 42 42 ++50 50 50 67 67 67 59 59 59 32 32 32 28 28 28 56 56 56 49 49 49 37 37 37 ++62 62 62 51 51 51 28 28 28 6 6 6 8 8 8 19 19 19 25 25 25 29 29 29 ++24 24 24 19 19 19 20 20 20 27 27 27 37 37 37 50 50 50 56 56 56 51 51 51 ++50 50 50 56 56 56 56 56 56 49 49 49 45 45 45 49 49 49 51 51 51 50 50 50 ++54 54 54 37 37 37 23 23 23 21 21 21 17 17 17 11 11 11 20 20 20 36 36 36 ++42 42 42 43 43 43 46 46 46 50 50 50 52 52 52 51 51 51 46 46 46 43 43 43 ++48 48 48 51 51 51 52 52 52 49 49 49 44 44 44 42 42 42 44 44 44 48 48 48 ++49 49 49 46 46 46 44 44 44 48 48 48 52 52 52 54 54 54 53 53 53 50 50 50 ++46 46 46 45 45 45 45 45 45 48 48 48 48 48 48 46 46 46 44 44 44 44 44 44 ++31 31 31 28 28 28 27 27 27 33 33 33 43 43 43 48 48 48 46 46 46 43 43 43 ++46 46 46 46 46 46 45 45 45 45 45 45 44 44 44 44 44 44 45 45 45 45 45 45 ++49 49 49 45 45 45 44 44 44 45 45 45 48 48 48 48 48 48 43 43 43 38 38 38 ++37 37 37 28 28 28 14 14 14 11 11 11 25 25 25 37 37 37 32 32 32 17 17 17 ++11 11 11 11 11 11 11 11 11 11 11 11 13 13 13 14 14 14 16 16 16 16 16 16 ++10 10 10 17 17 17 17 17 17 13 13 13 24 24 24 39 39 39 37 37 37 20 20 20 ++13 13 13 11 11 11 13 13 13 16 16 16 14 14 14 14 14 14 25 25 25 38 38 38 ++27 27 27 20 20 20 13 13 13 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 ++14 14 14 34 34 34 38 38 38 19 19 19 4 4 4 11 11 11 17 17 17 13 13 13 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 11 11 11 20 20 20 21 21 21 17 17 17 ++20 20 20 17 17 17 20 20 20 10 10 10 10 10 10 20 20 20 17 17 17 20 20 20 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 6 6 6 10 10 10 ++19 19 19 19 19 19 19 19 19 17 17 17 16 16 16 14 14 14 11 11 11 10 10 10 ++14 14 14 14 14 14 17 17 17 19 19 19 19 19 19 16 16 16 8 8 8 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 ++0 0 0 10 10 10 20 20 20 13 13 13 0 0 0 4 4 4 17 17 17 14 14 14 ++11 11 11 14 14 14 27 27 27 37 37 37 31 31 31 16 16 16 14 14 14 25 25 25 ++19 19 19 4 4 4 27 27 27 40 40 40 20 20 20 0 0 0 4 4 4 6 6 6 ++0 0 0 6 6 6 27 27 27 48 48 48 27 27 27 0 0 0 11 11 11 0 0 0 ++6 6 6 0 0 0 32 32 32 54 54 54 42 42 42 27 27 27 25 25 25 20 20 20 ++14 14 14 11 11 11 39 39 39 58 58 58 39 39 39 19 19 19 16 16 16 11 11 11 ++11 11 11 17 17 17 37 37 37 59 59 59 57 57 57 32 32 32 17 17 17 23 23 23 ++25 25 25 20 20 20 37 37 37 67 67 67 69 69 69 42 42 42 27 27 27 38 38 38 ++42 42 42 50 50 50 56 56 56 72 72 72 80 80 80 50 50 50 28 28 28 42 42 42 ++62 62 62 45 45 45 45 45 45 83 83 83 83 83 83 62 62 62 42 42 42 50 50 50 ++68 68 68 69 69 69 67 67 67 80 80 80 90 90 90 74 74 74 56 56 56 56 56 56 ++63 63 63 77 77 77 80 80 80 81 81 81 89 89 89 84 84 84 71 71 71 71 71 71 ++78 78 78 77 77 77 87 87 87 103 103 102 105 104 105 90 90 90 80 80 80 82 82 82 ++89 89 89 82 82 82 96 96 96 109 110 110 112 112 113 105 105 105 92 92 92 96 97 98 ++95 95 94 93 93 93 96 97 98 109 110 110 115 116 115 109 110 110 103 103 102 101 101 101 ++105 105 105 103 103 102 103 103 102 109 110 110 115 116 115 115 116 115 112 112 113 109 110 110 ++109 110 110 121 121 119 125 122 126 122 121 126 127 127 127 127 127 127 122 121 126 121 121 119 ++125 128 138 122 111 100 105 107 94 86 124 83 83 172 72 83 172 72 83 172 72 146 184 30 ++146 184 30 83 172 72 83 172 72 83 172 72 83 172 72 83 172 72 83 172 72 83 172 115 ++83 172 72 83 172 115 200 220 210 248 249 239 255 255 255 255 255 255 252 251 251 255 255 255 ++255 255 255 252 251 251 255 255 255 255 255 255 252 251 251 252 251 251 255 255 255 238 240 244 ++166 167 167 127 127 127 122 121 126 14 16 19 0 0 4 10 11 14 8 10 13 14 16 19 ++11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 ++11 13 16 14 16 19 11 13 16 8 10 13 49 50 52 131 131 131 125 125 127 117 117 117 ++112 112 113 121 121 119 128 128 128 129 129 130 121 121 119 112 112 113 105 104 105 103 103 102 ++105 105 105 117 117 117 125 125 127 121 121 119 112 112 113 109 110 110 101 101 101 91 91 91 ++89 89 89 92 92 92 94 94 94 94 94 94 91 91 91 87 87 87 85 85 85 84 84 84 ++87 87 87 87 87 87 92 92 92 101 101 101 105 104 105 103 103 102 103 103 102 105 105 105 ++90 90 90 76 76 76 68 68 68 68 68 68 77 77 77 87 87 87 87 87 87 83 83 83 ++70 70 70 54 54 54 49 49 49 63 63 63 80 80 80 78 78 78 62 62 62 48 48 48 ++46 46 46 46 46 46 46 46 46 50 50 50 56 56 56 62 62 62 68 68 68 71 71 71 ++69 69 69 80 80 80 67 67 67 39 39 39 49 49 49 67 67 67 60 60 60 58 58 58 ++54 54 54 45 45 45 32 32 32 14 14 14 14 14 14 37 37 37 49 49 49 63 63 63 ++66 66 66 63 63 63 45 45 45 23 23 23 17 17 17 14 14 14 11 11 11 17 17 17 ++20 20 20 23 23 23 21 21 21 17 17 17 17 17 17 28 28 28 36 36 36 36 36 36 ++44 44 44 52 52 52 56 56 56 52 52 52 46 46 46 44 44 44 43 43 43 40 40 40 ++29 29 29 17 17 17 13 13 13 20 20 20 20 20 20 19 19 19 34 34 34 54 54 54 ++46 46 46 46 46 46 46 46 46 51 51 51 56 56 56 56 56 56 51 51 51 46 46 46 ++44 44 44 49 49 49 54 54 54 53 53 53 49 49 49 44 44 44 43 43 43 43 43 43 ++54 54 54 51 51 51 48 48 48 46 46 46 48 48 48 51 51 51 54 54 54 57 57 57 ++51 51 51 46 46 46 45 45 45 48 48 48 45 45 45 38 38 38 34 34 34 37 37 37 ++25 25 25 28 28 28 34 34 34 42 42 42 48 48 48 50 50 50 48 48 48 45 45 45 ++46 46 46 46 46 46 45 45 45 44 44 44 44 44 44 44 44 44 45 45 45 46 46 46 ++43 43 43 44 44 44 48 48 48 50 50 50 49 49 49 43 43 43 33 33 33 25 25 25 ++16 16 16 8 8 8 13 13 13 29 29 29 37 37 37 31 31 31 17 17 17 10 10 10 ++13 13 13 13 13 13 13 13 13 11 11 11 13 13 13 13 13 13 14 14 14 16 16 16 ++17 17 17 10 10 10 11 11 11 25 25 25 37 37 37 37 37 37 24 24 24 13 13 13 ++8 8 8 17 17 17 14 14 14 3 3 3 10 10 10 28 28 28 37 37 37 32 32 32 ++16 16 16 11 11 11 10 10 10 14 14 14 14 14 14 10 10 10 13 13 13 20 20 20 ++36 36 36 31 31 31 20 20 20 8 8 8 6 6 6 11 11 11 14 14 14 14 14 14 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 11 11 11 20 20 20 21 21 21 17 17 17 ++20 20 20 17 17 17 20 20 20 10 10 10 10 10 10 20 20 20 17 17 17 20 20 20 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 8 8 8 13 13 13 17 17 17 ++17 17 17 16 16 16 13 13 13 10 10 10 6 6 6 4 4 4 3 3 3 3 3 3 ++4 4 4 4 4 4 8 8 8 11 11 11 16 16 16 17 17 17 14 14 14 11 11 11 ++4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 ++0 0 0 6 6 6 19 19 19 16 16 16 0 0 0 3 3 3 19 19 19 19 19 19 ++16 16 16 4 4 4 14 14 14 34 34 34 39 39 39 23 23 23 14 14 14 20 20 20 ++17 17 17 13 13 13 4 4 4 28 28 28 44 44 44 19 19 19 0 0 0 8 8 8 ++4 4 4 10 10 10 0 0 0 29 29 29 50 50 50 24 24 24 0 0 0 0 0 0 ++8 8 8 10 10 10 10 10 10 33 33 33 56 56 56 42 42 42 19 19 19 23 23 23 ++25 25 25 25 25 25 23 23 23 43 43 43 62 62 62 45 45 45 17 17 17 17 17 17 ++24 24 24 16 16 16 25 25 25 50 50 50 62 62 62 53 53 53 37 37 37 25 25 25 ++31 31 31 27 27 27 33 33 33 51 51 51 67 67 67 68 68 68 53 53 53 34 34 34 ++39 39 39 40 40 40 38 38 38 52 52 52 77 77 77 74 74 74 58 58 58 63 63 63 ++52 52 52 42 42 42 37 37 37 61 61 61 75 75 75 84 84 84 66 66 66 57 57 57 ++72 72 72 62 62 62 52 52 52 61 61 61 85 85 85 89 89 89 73 73 73 66 66 66 ++87 87 87 85 85 85 72 72 72 70 70 70 88 88 88 96 97 98 87 87 87 73 73 73 ++82 82 82 94 94 94 94 94 94 82 82 82 87 87 87 105 105 105 103 103 102 82 82 82 ++82 82 82 96 96 96 109 110 110 99 99 99 99 99 99 115 116 115 105 105 105 96 97 98 ++95 95 94 99 99 99 105 105 105 115 116 115 112 112 113 105 104 105 101 101 101 105 105 105 ++105 105 105 103 103 102 105 105 105 121 121 119 125 122 126 117 117 117 115 116 115 115 116 115 ++125 122 126 125 122 126 121 121 119 121 121 119 128 128 128 131 131 131 125 122 126 115 116 115 ++109 108 122 86 124 83 83 172 72 83 172 72 83 172 115 83 172 72 83 172 72 83 172 72 ++141 180 99 83 172 72 83 172 115 83 172 72 83 172 72 83 172 72 83 172 72 83 172 115 ++83 172 72 83 172 72 136 172 147 248 249 239 255 255 255 255 255 255 248 249 239 255 255 255 ++255 255 255 255 255 255 252 251 251 255 255 255 255 255 255 255 255 255 252 251 251 200 220 210 ++125 125 127 117 117 117 87 88 90 1 3 7 26 29 32 8 10 13 10 11 14 6 8 11 ++8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 ++6 8 11 14 16 19 1 3 7 11 13 16 78 79 82 122 121 126 125 125 127 122 121 126 ++112 112 113 117 117 117 127 127 127 133 133 133 133 133 133 127 127 127 121 121 119 117 117 117 ++117 117 117 127 127 127 131 131 131 129 129 130 125 125 127 122 121 126 122 121 126 122 121 126 ++115 116 115 115 116 115 112 112 113 105 105 105 99 99 99 93 93 93 90 90 90 90 90 90 ++83 83 83 78 78 78 87 87 87 101 101 101 105 105 105 101 101 101 99 99 99 105 105 105 ++101 101 101 103 103 102 99 99 99 93 93 93 90 90 90 89 89 89 94 94 94 99 99 99 ++91 91 91 76 76 76 63 63 63 67 67 67 80 80 80 88 88 88 84 84 84 76 76 76 ++82 82 82 81 81 81 78 78 78 76 76 76 73 73 73 66 66 66 57 57 57 50 50 50 ++28 28 28 45 45 45 74 74 74 72 72 72 61 61 61 71 71 71 70 70 70 56 56 56 ++29 29 29 13 13 13 21 21 21 29 29 29 36 36 36 37 37 37 42 42 42 58 58 58 ++63 63 63 70 70 70 58 58 58 34 34 34 19 19 19 10 10 10 13 13 13 28 28 28 ++46 46 46 46 46 46 37 37 37 21 21 21 14 14 14 17 17 17 20 20 20 21 21 21 ++23 23 23 28 28 28 31 31 31 27 27 27 21 21 21 19 19 19 17 17 17 14 14 14 ++20 20 20 11 11 11 6 6 6 10 10 10 14 14 14 24 24 24 39 39 39 54 54 54 ++51 51 51 48 48 48 45 45 45 48 48 48 51 51 51 54 54 54 53 53 53 50 50 50 ++45 45 45 46 46 46 48 48 48 49 49 49 49 49 49 46 46 46 44 44 44 42 42 42 ++50 50 50 52 52 52 52 52 52 49 49 49 44 44 44 44 44 44 49 49 49 53 53 53 ++54 54 54 49 49 49 45 45 45 45 45 45 39 39 39 29 29 29 27 27 27 29 29 29 ++29 29 29 36 36 36 43 43 43 48 48 48 48 48 48 46 46 46 48 48 48 49 49 49 ++46 46 46 45 45 45 44 44 44 44 44 44 44 44 44 45 45 45 46 46 46 46 46 46 ++45 45 45 48 48 48 50 50 50 46 46 46 38 38 38 28 28 28 20 20 20 16 16 16 ++8 8 8 19 19 19 32 32 32 39 39 39 31 31 31 13 13 13 4 4 4 10 10 10 ++16 16 16 14 14 14 13 13 13 13 13 13 11 11 11 13 13 13 13 13 13 13 13 13 ++14 14 14 13 13 13 21 21 21 36 36 36 36 36 36 20 20 20 11 11 11 13 13 13 ++10 10 10 14 14 14 11 11 11 8 8 8 21 21 21 37 37 37 33 33 33 17 17 17 ++13 13 13 10 10 10 11 11 11 14 14 14 13 13 13 11 11 11 21 21 21 33 33 33 ++37 37 37 21 21 21 8 8 8 8 8 8 13 13 13 11 11 11 10 10 10 10 10 10 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 11 11 11 20 20 20 21 21 21 17 17 17 ++20 20 20 17 17 17 20 20 20 10 10 10 10 10 10 20 20 20 17 17 17 20 20 20 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 6 6 6 11 11 11 14 14 14 16 16 16 17 17 17 ++8 8 8 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 11 11 11 17 17 17 21 21 21 ++11 11 11 6 6 6 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 ++3 3 3 3 3 3 14 14 14 17 17 17 3 3 3 0 0 0 16 16 16 23 23 23 ++19 19 19 13 13 13 4 4 4 6 6 6 25 25 25 40 40 40 33 33 33 13 13 13 ++19 19 19 14 14 14 0 0 0 8 8 8 33 33 33 38 38 38 24 24 24 0 0 0 ++8 8 8 0 0 0 8 8 8 3 3 3 28 28 28 52 52 52 23 23 23 8 8 8 ++6 6 6 8 8 8 4 4 4 10 10 10 33 33 33 52 52 52 44 44 44 21 21 21 ++25 25 25 29 29 29 28 28 28 31 31 31 46 46 46 61 61 61 51 51 51 28 28 28 ++25 25 25 31 31 31 32 32 32 33 33 33 48 48 48 68 68 68 63 63 63 40 40 40 ++29 29 29 38 38 38 42 42 42 38 38 38 49 49 49 71 71 71 73 73 73 53 53 53 ++36 36 36 37 37 37 38 38 38 29 29 29 45 45 45 77 77 77 80 80 80 62 62 62 ++33 33 33 44 44 44 44 44 44 43 43 43 49 49 49 82 82 82 84 84 84 83 83 83 ++59 59 59 52 52 52 59 59 59 54 54 54 58 58 58 85 85 85 95 95 94 84 84 84 ++85 85 85 69 69 69 70 70 70 72 72 72 71 71 71 90 90 90 101 101 101 85 85 85 ++93 93 93 92 92 92 88 88 88 81 81 81 83 83 83 99 99 99 105 105 105 103 103 102 ++93 93 93 112 112 113 99 99 99 95 95 94 94 94 94 99 99 99 121 121 119 105 105 105 ++99 99 99 109 110 110 115 116 115 112 112 113 105 104 105 105 104 105 105 105 105 105 105 105 ++105 105 105 109 110 110 117 117 117 127 127 127 122 121 126 115 116 115 115 116 115 121 121 119 ++129 129 130 121 121 119 117 117 117 125 125 127 134 134 134 134 134 134 121 121 119 105 105 105 ++146 184 30 146 184 30 141 180 99 136 172 147 136 172 147 83 172 115 83 172 72 83 172 72 ++83 172 72 83 172 72 83 172 115 83 172 115 83 172 72 83 172 115 83 172 115 83 172 115 ++83 172 115 83 172 72 141 180 99 248 249 239 255 255 255 252 251 251 255 255 255 255 255 255 ++252 251 251 255 255 255 255 255 255 252 251 251 255 255 255 252 251 251 255 255 255 231 224 220 ++137 137 137 137 138 139 35 36 38 11 13 16 14 16 19 0 0 4 16 20 21 14 16 19 ++11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 ++11 13 16 14 16 19 1 3 7 51 52 54 109 110 110 105 105 105 122 121 126 133 133 133 ++131 131 131 128 128 128 125 125 127 128 128 128 133 133 133 134 134 134 128 128 128 121 121 119 ++112 112 113 109 110 110 112 112 113 121 121 119 121 121 119 105 105 105 105 105 105 112 112 113 ++117 117 117 117 117 117 121 121 119 121 121 119 117 117 117 112 112 113 112 112 113 109 110 110 ++105 105 105 99 99 99 99 99 99 101 101 101 94 94 94 83 83 83 85 85 85 96 96 96 ++105 105 105 103 103 102 87 87 87 78 78 78 80 80 80 81 81 81 85 85 85 85 85 85 ++87 87 87 93 93 93 96 96 96 91 91 91 83 83 83 77 77 77 81 81 81 87 87 87 ++80 80 80 72 72 72 61 61 61 53 53 53 50 50 50 46 46 46 42 42 42 38 38 38 ++59 59 59 60 60 60 73 73 73 75 75 75 66 66 66 49 49 49 46 46 46 70 70 70 ++38 38 38 31 31 31 44 44 44 44 44 44 48 48 48 45 45 45 43 43 43 43 43 43 ++46 46 46 62 62 62 66 66 66 51 51 51 33 33 33 28 28 28 40 40 40 56 56 56 ++68 68 68 59 59 59 39 39 39 21 21 21 19 19 19 19 19 19 19 19 19 20 20 20 ++31 31 31 29 29 29 25 25 25 19 19 19 14 14 14 14 14 14 16 16 16 17 17 17 ++23 23 23 19 19 19 16 16 16 23 23 23 34 34 34 43 43 43 45 45 45 44 44 44 ++54 54 54 52 52 52 49 49 49 48 48 48 50 50 50 52 52 52 54 54 54 56 56 56 ++52 52 52 48 48 48 44 44 44 44 44 44 48 48 48 50 50 50 50 50 50 49 49 49 ++45 45 45 52 52 52 58 58 58 56 56 56 50 50 50 44 44 44 44 44 44 48 48 48 ++51 51 51 48 48 48 44 44 44 39 39 39 33 33 33 28 28 28 27 27 27 29 29 29 ++37 37 37 43 43 43 49 49 49 49 49 49 46 46 46 45 45 45 46 46 46 50 50 50 ++45 45 45 45 45 45 44 44 44 44 44 44 45 45 45 45 45 45 46 46 46 46 46 46 ++51 51 51 49 49 49 44 44 44 33 33 33 20 20 20 11 11 11 10 10 10 13 13 13 ++14 14 14 32 32 32 39 39 39 28 28 28 11 11 11 8 8 8 16 16 16 20 20 20 ++16 16 16 16 16 16 14 14 14 13 13 13 11 11 11 11 11 11 11 11 11 11 11 11 ++10 10 10 24 24 24 36 36 36 33 33 33 20 20 20 6 6 6 8 8 8 14 14 14 ++14 14 14 8 8 8 13 13 13 27 27 27 36 36 36 31 31 31 17 17 17 6 6 6 ++16 16 16 13 13 13 11 11 11 10 10 10 11 11 11 17 17 17 28 28 28 38 38 38 ++17 17 17 17 17 17 16 16 16 13 13 13 13 13 13 14 14 14 13 13 13 10 10 10 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 11 11 11 20 20 20 21 21 21 17 17 17 ++20 20 20 17 17 17 20 20 20 10 10 10 10 10 10 20 20 20 17 17 17 20 20 20 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 4 4 4 11 11 11 17 17 17 17 17 17 13 13 13 8 8 8 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 11 11 11 16 16 16 ++17 17 17 11 11 11 3 3 3 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 ++3 3 3 0 0 0 10 10 10 19 19 19 10 10 10 0 0 0 6 6 6 21 21 21 ++16 16 16 16 16 16 0 0 0 0 0 0 10 10 10 38 38 38 42 42 42 28 28 28 ++20 20 20 6 6 6 0 0 0 6 6 6 6 6 6 31 31 31 46 46 46 16 16 16 ++0 0 0 3 3 3 0 0 0 11 11 11 3 3 3 25 25 25 59 59 59 21 21 21 ++13 13 13 0 0 0 8 8 8 10 10 10 3 3 3 38 38 38 58 58 58 36 36 36 ++24 24 24 14 14 14 27 27 27 28 28 28 19 19 19 48 48 48 67 67 67 48 48 48 ++33 33 33 32 32 32 32 32 32 28 28 28 33 33 33 53 53 53 66 66 66 59 59 59 ++43 43 43 36 36 36 36 36 36 36 36 36 36 36 36 49 49 49 66 66 66 73 73 73 ++42 42 42 32 32 32 33 33 33 28 28 28 42 42 42 68 68 68 74 74 74 72 72 72 ++52 52 52 48 48 48 45 45 45 46 46 46 48 48 48 72 72 72 80 80 80 94 94 94 ++66 66 66 54 54 54 63 63 63 57 57 57 52 52 52 77 77 77 95 95 94 95 95 94 ++83 83 83 63 63 63 68 68 68 74 74 74 65 65 65 77 77 77 101 101 101 99 99 99 ++105 105 105 85 85 85 80 80 80 89 89 89 88 88 88 84 84 84 99 99 99 115 116 115 ++121 121 119 99 99 99 103 103 102 92 92 92 91 91 91 103 103 102 101 101 101 121 121 119 ++115 116 115 117 117 117 115 116 115 105 105 105 105 104 105 105 105 105 109 110 110 105 105 105 ++112 112 113 121 121 119 125 125 127 122 121 126 115 116 115 115 116 115 117 117 117 125 122 126 ++125 125 127 117 117 117 125 125 127 137 137 137 137 137 137 129 129 130 121 121 119 109 110 110 ++146 184 30 146 184 30 146 184 30 136 172 147 136 172 147 83 172 115 83 172 72 83 172 72 ++83 172 72 83 172 72 83 172 72 83 172 72 187 210 182 187 210 182 83 172 72 83 172 72 ++83 172 72 83 172 72 83 172 72 231 246 232 255 255 255 252 251 251 255 255 255 248 249 239 ++255 255 255 255 255 255 252 251 251 255 255 255 255 255 255 246 251 251 255 255 255 231 224 220 ++133 133 133 100 101 103 0 0 4 16 20 21 8 10 13 8 10 13 16 20 21 10 11 14 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++8 10 13 8 10 13 11 13 16 100 101 103 129 129 130 122 121 126 129 129 130 137 138 139 ++139 139 139 133 133 133 121 121 119 112 112 113 117 117 117 129 129 130 133 133 133 131 131 131 ++109 110 110 103 103 102 103 103 102 115 116 115 121 121 119 117 117 117 105 105 105 103 103 102 ++103 103 102 105 105 105 112 112 113 117 117 117 121 121 119 121 121 119 121 121 119 115 116 115 ++115 116 115 112 112 113 109 110 110 103 103 102 91 91 91 81 81 81 78 78 78 81 81 81 ++95 95 94 105 104 105 94 94 94 85 85 85 76 76 76 66 66 66 69 69 69 69 69 69 ++62 62 62 72 72 72 87 87 87 90 90 90 77 77 77 59 59 59 53 53 53 58 58 58 ++84 84 84 71 71 71 54 54 54 48 48 48 52 52 52 63 63 63 73 73 73 78 78 78 ++75 75 75 69 69 69 45 45 45 40 40 40 68 68 68 59 59 59 34 34 34 59 59 59 ++65 65 65 32 32 32 39 39 39 50 50 50 52 52 52 36 36 36 38 38 38 54 54 54 ++42 42 42 53 53 53 66 66 66 63 63 63 53 53 53 53 53 53 60 60 60 65 65 65 ++53 53 53 45 45 45 27 27 27 14 14 14 17 17 17 17 17 17 19 19 19 28 28 28 ++29 29 29 25 25 25 19 19 19 14 14 14 14 14 14 14 14 14 16 16 16 17 17 17 ++16 16 16 16 16 16 24 24 24 38 38 38 51 51 51 56 56 56 51 51 51 44 44 44 ++51 51 51 51 51 51 51 51 51 49 49 49 48 48 48 49 49 49 51 51 51 54 54 54 ++51 51 51 49 49 49 46 46 46 46 46 46 48 48 48 50 50 50 50 50 50 50 50 50 ++40 40 40 44 44 44 48 48 48 49 49 49 46 46 46 42 42 42 39 39 39 38 38 38 ++40 40 40 40 40 40 39 39 39 33 33 33 32 32 32 34 34 34 38 38 38 39 39 39 ++45 45 45 45 45 45 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 ++44 44 44 44 44 44 45 45 45 45 45 45 46 46 46 46 46 46 46 46 46 46 46 46 ++45 45 45 39 39 39 28 28 28 17 17 17 8 8 8 8 8 8 13 13 13 17 17 17 ++27 27 27 32 32 32 29 29 29 16 16 16 8 8 8 14 14 14 20 20 20 21 21 21 ++14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 ++23 23 23 32 32 32 33 33 33 23 23 23 10 10 10 8 8 8 13 13 13 14 14 14 ++11 11 11 13 13 13 23 23 23 34 34 34 32 32 32 17 17 17 8 8 8 10 10 10 ++16 16 16 13 13 13 11 11 11 13 13 13 21 21 21 28 28 28 29 29 29 25 25 25 ++6 6 6 16 16 16 20 20 20 16 16 16 11 11 11 14 14 14 20 20 20 24 24 24 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 11 11 11 20 20 20 21 21 21 17 17 17 ++20 20 20 17 17 17 20 20 20 10 10 10 10 10 10 20 20 20 17 17 17 20 20 20 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 6 6 6 14 14 14 20 20 20 17 17 17 8 8 8 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 ++0 0 0 3 3 3 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 ++20 20 20 13 13 13 4 4 4 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 ++3 3 3 0 0 0 6 6 6 19 19 19 14 14 14 0 0 0 0 0 0 20 20 20 ++19 19 19 13 13 13 4 4 4 3 3 3 4 4 4 16 16 16 32 32 32 44 44 44 ++16 16 16 24 24 24 3 3 3 0 0 0 6 6 6 0 0 0 27 27 27 50 50 50 ++10 10 10 10 10 10 16 16 16 0 0 0 0 0 0 10 10 10 25 25 25 53 53 53 ++20 20 20 11 11 11 4 4 4 8 8 8 8 8 8 8 8 8 31 31 31 60 60 60 ++24 24 24 17 17 17 13 13 13 17 17 17 20 20 20 20 20 20 39 39 39 67 67 67 ++53 53 53 27 27 27 23 23 23 34 34 34 28 28 28 23 23 23 43 43 43 67 67 67 ++60 60 60 36 36 36 27 27 27 31 31 31 25 25 25 25 25 25 49 49 49 70 70 70 ++74 74 74 46 46 46 34 34 34 49 49 49 67 67 67 53 53 53 45 45 45 82 82 82 ++82 82 82 57 57 57 43 43 43 53 53 53 61 61 61 76 76 76 70 70 70 82 82 82 ++89 89 89 67 67 67 58 58 58 59 59 59 70 70 70 78 78 78 80 80 80 96 96 96 ++99 99 99 81 81 81 73 73 73 76 76 76 75 75 75 75 75 75 92 92 92 109 110 110 ++109 110 110 90 90 90 83 83 83 87 87 87 85 85 85 85 85 85 96 96 96 105 105 105 ++117 117 117 109 110 110 96 96 96 99 99 99 101 101 101 96 97 98 105 105 105 109 110 110 ++129 129 130 117 117 117 105 105 105 105 105 105 109 110 110 109 110 110 109 110 110 109 110 110 ++121 121 119 128 128 128 127 127 127 115 116 115 112 112 113 117 117 117 121 121 119 121 121 119 ++121 121 119 117 117 117 137 137 137 147 147 148 134 134 134 121 121 119 122 121 126 121 121 119 ++86 124 83 141 180 99 83 172 72 83 172 72 83 172 72 83 172 72 83 172 72 83 172 72 ++83 172 72 83 172 72 83 172 72 83 172 72 136 172 147 136 172 147 83 172 72 83 172 72 ++83 172 72 83 172 72 141 180 99 187 210 182 254 249 251 252 251 251 246 251 251 252 251 251 ++252 251 251 255 255 255 255 255 255 252 251 251 252 251 251 255 255 255 252 251 251 161 161 162 ++122 121 126 37 39 42 11 13 16 11 13 16 8 10 13 14 16 19 8 10 13 10 11 14 ++11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 ++8 10 13 11 13 16 24 25 28 133 133 133 137 137 137 137 138 139 125 125 127 115 116 115 ++121 121 119 129 129 130 133 133 133 121 121 119 112 112 113 115 116 115 125 122 126 128 128 128 ++129 129 130 121 121 119 109 110 110 103 103 102 115 116 115 128 128 128 121 121 119 103 103 102 ++105 104 105 101 101 101 96 97 98 99 99 99 103 103 102 109 110 110 115 116 115 121 121 119 ++112 112 113 117 117 117 121 121 119 115 116 115 109 110 110 105 105 105 94 94 94 81 81 81 ++89 89 89 105 105 105 101 101 101 96 97 98 91 91 91 77 77 77 73 73 73 68 68 68 ++68 68 68 60 60 60 66 66 66 84 84 84 89 89 89 75 75 75 62 62 62 59 59 59 ++82 82 82 81 81 81 81 81 81 83 83 83 84 84 84 76 76 76 63 63 63 52 52 52 ++38 38 38 43 43 43 43 43 43 33 33 33 48 48 48 66 66 66 53 53 53 37 37 37 ++63 63 63 51 51 51 57 57 57 44 44 44 46 46 46 48 48 48 50 50 50 40 40 40 ++45 45 45 42 42 42 46 46 46 48 48 48 43 43 43 46 46 46 46 46 46 37 37 37 ++38 38 38 37 37 37 29 29 29 27 27 27 28 28 28 27 27 27 34 34 34 51 51 51 ++29 29 29 27 27 27 25 25 25 28 28 28 31 31 31 31 31 31 28 28 28 25 25 25 ++28 28 28 28 28 28 32 32 32 39 39 39 42 42 42 37 37 37 32 32 32 31 31 31 ++27 27 27 31 31 31 33 33 33 32 32 32 28 28 28 25 25 25 28 28 28 32 32 32 ++27 27 27 29 29 29 33 33 33 34 34 34 33 33 33 31 31 31 28 28 28 27 27 27 ++33 33 33 29 29 29 27 27 27 28 28 28 29 29 29 31 31 31 28 28 28 24 24 24 ++31 31 31 36 36 36 34 34 34 31 31 31 32 32 32 40 40 40 48 48 48 50 50 50 ++50 50 50 45 45 45 42 42 42 43 43 43 48 48 48 49 49 49 46 46 46 43 43 43 ++43 43 43 44 44 44 45 45 45 46 46 46 46 46 46 46 46 46 46 46 46 45 45 45 ++33 33 33 24 24 24 13 13 13 6 6 6 10 10 10 16 16 16 20 20 20 21 21 21 ++43 43 43 28 28 28 16 16 16 19 19 19 21 21 21 17 17 17 10 10 10 6 6 6 ++13 13 13 13 13 13 11 11 11 11 11 11 13 13 13 14 14 14 16 16 16 16 16 16 ++43 43 43 32 32 32 19 19 19 13 13 13 14 14 14 17 17 17 16 16 16 14 14 14 ++6 6 6 24 24 24 36 36 36 31 31 31 16 16 16 4 4 4 10 10 10 19 19 19 ++11 11 11 11 11 11 11 11 11 20 20 20 33 33 33 38 38 38 25 25 25 4 4 4 ++16 16 16 13 13 13 11 11 11 13 13 13 11 11 11 11 11 11 24 24 24 39 39 39 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 20 20 20 21 21 21 17 17 17 ++17 17 17 19 19 19 17 17 17 11 11 11 11 11 11 17 17 17 19 19 19 17 17 17 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 4 4 4 3 3 3 0 0 0 ++0 0 0 13 13 13 19 19 19 14 14 14 10 10 10 6 6 6 4 4 4 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 ++6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 4 4 4 ++4 4 4 21 21 21 19 19 19 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 6 6 6 17 17 17 13 13 13 0 0 0 3 3 3 19 19 19 ++17 17 17 17 17 17 3 3 3 3 3 3 0 0 0 16 16 16 21 21 21 28 28 28 ++51 51 51 20 20 20 0 0 0 6 6 6 3 3 3 0 0 0 4 4 4 24 24 24 ++51 51 51 6 6 6 0 0 0 4 4 4 3 3 3 8 8 8 14 14 14 27 27 27 ++57 57 57 21 21 21 6 6 6 3 3 3 8 8 8 16 16 16 17 17 17 31 31 31 ++63 63 63 31 31 31 8 8 8 14 14 14 14 14 14 10 10 10 21 21 21 38 38 38 ++69 69 69 46 46 46 25 25 25 17 17 17 19 19 19 25 25 25 28 28 28 25 25 25 ++69 69 69 61 61 61 34 34 34 28 28 28 31 31 31 27 27 27 36 36 36 39 39 39 ++80 80 80 70 70 70 51 51 51 65 65 65 54 54 54 43 43 43 39 39 39 44 44 44 ++78 78 78 91 91 91 60 60 60 54 54 54 78 78 78 65 65 65 49 49 49 57 57 57 ++82 82 82 95 95 94 75 75 75 56 56 56 77 77 77 89 89 89 74 74 74 66 66 66 ++94 94 94 99 99 99 89 89 89 73 73 73 77 77 77 94 94 94 95 95 94 81 81 81 ++99 99 99 109 110 110 105 105 105 88 88 88 84 84 84 99 99 99 109 110 110 105 105 105 ++99 99 99 127 127 127 112 112 113 91 91 91 101 101 101 105 105 105 105 105 105 127 127 127 ++109 110 110 127 127 127 121 121 119 112 112 113 109 110 110 105 105 105 117 117 117 125 125 127 ++134 134 134 125 125 127 115 116 115 115 116 115 125 125 127 134 134 134 131 131 131 125 122 126 ++121 121 119 131 131 131 142 143 144 134 134 134 127 127 127 125 125 127 125 125 127 137 137 137 ++116 129 109 83 172 115 83 172 72 83 172 72 83 172 72 83 172 115 83 172 72 83 172 72 ++83 172 72 83 172 115 83 172 115 83 172 72 83 172 72 83 172 115 83 172 115 83 172 72 ++83 172 72 83 172 72 141 180 99 141 180 99 252 251 251 255 255 255 248 249 239 252 251 251 ++255 255 255 252 251 251 255 255 255 252 251 251 255 255 255 255 255 255 252 251 251 231 246 232 ++83 84 85 20 21 24 8 10 13 11 13 16 6 8 11 11 13 16 8 10 13 14 16 19 ++10 11 14 14 16 19 6 8 11 6 8 11 14 16 19 11 13 16 8 10 13 10 11 14 ++13 13 13 14 14 14 92 92 92 117 117 117 121 121 119 133 133 133 134 134 134 121 121 119 ++117 117 117 121 121 119 129 129 130 134 134 134 122 121 126 112 112 113 115 116 115 115 116 115 ++133 133 133 134 134 134 125 122 126 109 110 110 109 110 110 115 116 115 121 121 119 127 127 127 ++105 105 105 101 101 101 103 103 102 105 104 105 101 101 101 95 95 94 105 104 105 117 117 117 ++109 110 110 109 110 110 109 110 110 112 112 113 112 112 113 112 112 113 112 112 113 109 110 110 ++105 105 105 103 103 102 103 103 102 105 105 105 105 105 105 101 101 101 90 90 90 85 85 85 ++87 87 87 77 77 77 80 80 80 90 90 90 91 91 91 91 91 91 92 92 92 92 92 92 ++83 83 83 77 77 77 84 84 84 78 78 78 53 53 53 44 44 44 50 50 50 44 44 44 ++46 46 46 40 40 40 36 36 36 39 39 39 44 44 44 48 48 48 52 52 52 57 57 57 ++42 42 42 57 57 57 53 53 53 43 43 43 48 48 48 51 51 51 46 46 46 46 46 46 ++46 46 46 42 42 42 44 44 44 45 45 45 39 39 39 38 38 38 40 40 40 39 39 39 ++36 36 36 45 45 45 39 39 39 31 31 31 39 39 39 49 49 49 43 43 43 37 37 37 ++34 34 34 29 29 29 34 34 34 34 34 34 27 27 27 29 29 29 34 34 34 28 28 28 ++33 33 33 29 29 29 34 34 34 43 43 43 38 38 38 31 31 31 32 32 32 28 28 28 ++31 31 31 29 29 29 28 28 28 29 29 29 31 31 31 27 27 27 25 25 25 29 29 29 ++28 28 28 44 44 44 31 31 31 24 24 24 29 29 29 29 29 29 32 32 32 23 23 23 ++25 25 25 29 29 29 24 24 24 23 23 23 29 29 29 29 29 29 27 27 27 32 32 32 ++40 40 40 42 42 42 43 43 43 46 46 46 49 49 49 50 50 50 46 46 46 44 44 44 ++46 46 46 50 50 50 46 46 46 45 45 45 50 50 50 48 48 48 42 42 42 44 44 44 ++45 45 45 48 48 48 49 49 49 46 46 46 46 46 46 46 46 46 40 40 40 33 33 33 ++16 16 16 13 13 13 14 14 14 16 16 16 13 13 13 13 13 13 27 27 27 43 43 43 ++28 28 28 21 21 21 13 13 13 10 10 10 11 11 11 14 14 14 13 13 13 11 11 11 ++14 14 14 8 8 8 13 13 13 20 20 20 14 14 14 6 6 6 21 21 21 43 43 43 ++32 32 32 20 20 20 10 10 10 13 13 13 19 19 19 16 16 16 11 11 11 11 11 11 ++23 23 23 39 39 39 44 44 44 29 29 29 17 17 17 21 21 21 28 28 28 29 29 29 ++27 27 27 28 28 28 31 31 31 36 36 36 37 37 37 34 34 34 29 29 29 27 27 27 ++28 28 28 31 31 31 29 29 29 24 24 24 27 27 27 36 36 36 38 38 38 36 36 36 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 20 20 20 21 21 21 17 17 17 ++17 17 17 19 19 19 17 17 17 11 11 11 11 11 11 17 17 17 19 19 19 17 17 17 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 3 3 3 4 4 4 0 0 0 ++4 4 4 14 14 14 19 19 19 13 13 13 6 6 6 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 3 3 3 8 8 8 11 11 11 13 13 13 11 11 11 10 10 10 ++14 14 14 14 14 14 11 11 11 8 8 8 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 20 20 20 19 19 19 4 4 4 3 3 3 3 3 3 0 0 0 0 0 0 ++3 3 3 0 0 0 4 4 4 16 16 16 13 13 13 0 0 0 3 3 3 17 17 17 ++17 17 17 19 19 19 3 3 3 3 3 3 0 0 0 16 16 16 20 20 20 27 27 27 ++29 29 29 49 49 49 25 25 25 0 0 0 3 3 3 8 8 8 0 0 0 10 10 10 ++27 27 27 52 52 52 17 17 17 3 3 3 11 11 11 0 0 0 8 8 8 4 4 4 ++21 21 21 59 59 59 25 25 25 6 6 6 14 14 14 0 0 0 13 13 13 16 16 16 ++36 36 36 59 59 59 38 38 38 0 0 0 16 16 16 21 21 21 10 10 10 14 14 14 ++32 32 32 63 63 63 52 52 52 21 21 21 24 24 24 21 21 21 13 13 13 29 29 29 ++37 37 37 71 71 71 62 62 62 37 37 37 29 29 29 28 28 28 32 32 32 32 32 32 ++42 42 42 78 78 78 78 78 78 62 62 62 33 33 33 40 40 40 49 49 49 45 45 45 ++54 54 54 77 77 77 85 85 85 78 78 78 59 59 59 45 45 45 56 56 56 58 58 58 ++60 60 60 78 78 78 92 92 92 89 89 89 77 77 77 69 69 69 65 65 65 65 65 65 ++76 76 76 91 91 91 96 96 96 88 88 88 85 85 85 92 92 92 91 91 91 83 83 83 ++81 81 81 103 103 102 112 112 113 103 103 102 99 99 99 105 105 105 105 105 105 96 96 96 ++99 99 99 99 99 99 121 121 119 121 121 119 101 101 101 109 110 110 122 121 126 112 112 113 ++112 112 113 105 105 105 133 133 133 121 121 119 105 105 105 121 121 119 121 121 119 131 131 131 ++128 128 128 117 117 117 115 116 115 128 128 128 134 134 134 128 128 128 122 121 126 127 127 127 ++131 131 131 140 140 140 137 137 137 125 125 127 125 125 127 133 133 133 137 137 137 145 146 147 ++140 140 140 86 124 83 83 172 72 83 172 72 83 172 72 83 172 72 83 172 72 83 172 72 ++83 172 72 83 172 115 136 172 147 83 172 72 83 172 72 83 172 72 83 172 72 141 180 99 ++83 172 72 83 172 72 83 172 72 141 180 99 246 251 251 255 255 255 255 255 255 255 255 255 ++255 255 255 255 255 255 252 251 251 255 255 255 255 255 255 246 251 251 231 224 220 109 110 110 ++49 50 52 6 8 11 10 11 14 11 13 16 6 8 11 14 16 19 8 10 13 10 11 14 ++8 10 13 11 13 16 10 11 14 8 10 13 11 13 16 11 13 16 11 13 16 11 13 16 ++4 4 4 42 42 42 109 110 110 121 121 119 117 117 117 127 127 127 137 137 137 137 138 139 ++125 125 127 127 127 127 129 129 130 131 131 131 127 127 127 121 121 119 121 121 119 117 117 117 ++125 122 126 137 137 137 142 143 144 134 134 134 125 122 126 115 116 115 117 117 117 125 125 127 ++125 122 126 112 112 113 101 101 101 96 97 98 103 103 102 109 110 110 112 112 113 112 112 113 ++96 96 96 94 94 94 92 92 92 92 92 92 92 92 92 93 93 93 93 93 93 92 92 92 ++109 110 110 105 105 105 105 105 105 105 104 105 99 99 99 96 96 96 101 101 101 105 105 105 ++94 94 94 83 83 83 83 83 83 82 82 82 70 70 70 74 74 74 87 87 87 87 87 87 ++67 67 67 54 54 54 60 60 60 77 77 77 73 73 73 52 52 52 44 44 44 50 50 50 ++42 42 42 43 43 43 43 43 43 39 39 39 33 33 33 37 37 37 53 53 53 70 70 70 ++38 38 38 45 45 45 53 53 53 53 53 53 48 48 48 44 44 44 45 45 45 46 46 46 ++45 45 45 43 43 43 44 44 44 44 44 44 40 40 40 43 43 43 40 40 40 29 29 29 ++37 37 37 36 36 36 28 28 28 31 31 31 42 42 42 43 43 43 33 33 33 28 28 28 ++32 32 32 31 31 31 34 34 34 43 43 43 45 45 45 37 37 37 32 32 32 38 38 38 ++36 36 36 37 37 37 44 44 44 48 48 48 39 39 39 34 34 34 37 37 37 36 36 36 ++39 39 39 32 32 32 29 29 29 37 37 37 39 39 39 37 37 37 37 37 37 42 42 42 ++37 37 37 49 49 49 42 42 42 40 40 40 40 40 40 34 34 34 39 39 39 40 40 40 ++38 38 38 44 44 44 42 42 42 38 38 38 39 39 39 38 38 38 39 39 39 48 48 48 ++46 46 46 45 45 45 46 46 46 50 50 50 54 54 54 54 54 54 50 50 50 45 45 45 ++43 43 43 49 49 49 48 48 48 46 46 46 48 48 48 44 44 44 40 40 40 45 45 45 ++44 44 44 46 46 46 49 49 49 48 48 48 45 45 45 39 39 39 25 25 25 11 11 11 ++10 10 10 11 11 11 10 10 10 4 4 4 14 14 14 29 29 29 37 37 37 36 36 36 ++16 16 16 14 14 14 11 11 11 13 13 13 16 16 16 16 16 16 14 14 14 11 11 11 ++11 11 11 16 16 16 11 11 11 4 4 4 13 13 13 29 29 29 38 38 38 37 37 37 ++13 13 13 11 11 11 14 14 14 20 20 20 24 24 24 29 29 29 36 36 36 40 40 40 ++40 40 40 36 36 36 29 29 29 25 25 25 27 27 27 28 28 28 27 27 27 24 24 24 ++16 16 16 29 29 29 37 37 37 32 32 32 24 24 24 21 21 21 20 20 20 20 20 20 ++23 23 23 20 20 20 20 20 20 27 27 27 33 33 33 33 33 33 28 28 28 23 23 23 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 20 20 20 21 21 21 17 17 17 ++17 17 17 19 19 19 17 17 17 11 11 11 11 11 11 17 17 17 19 19 19 17 17 17 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 ++13 13 13 17 17 17 17 17 17 11 11 11 4 4 4 0 0 0 0 0 0 0 0 0 ++0 0 0 4 4 4 10 10 10 13 13 13 11 11 11 8 8 8 4 4 4 3 3 3 ++4 4 4 10 10 10 14 14 14 13 13 13 6 6 6 0 0 0 0 0 0 4 4 4 ++0 0 0 16 16 16 17 17 17 8 8 8 4 4 4 3 3 3 0 0 0 0 0 0 ++4 4 4 0 0 0 3 3 3 16 16 16 14 14 14 0 0 0 3 3 3 16 16 16 ++19 19 19 19 19 19 4 4 4 3 3 3 0 0 0 16 16 16 19 19 19 24 24 24 ++19 19 19 40 40 40 42 42 42 16 16 16 0 0 0 4 4 4 8 8 8 0 0 0 ++17 17 17 24 24 24 50 50 50 24 24 24 0 0 0 11 11 11 0 0 0 8 8 8 ++8 8 8 27 27 27 56 56 56 28 28 28 3 3 3 14 14 14 0 0 0 16 16 16 ++6 6 6 44 44 44 59 59 59 38 38 38 13 13 13 11 11 11 16 16 16 10 10 10 ++10 10 10 40 40 40 59 59 59 50 50 50 28 28 28 19 19 19 23 23 23 28 28 28 ++20 20 20 46 46 46 67 67 67 63 63 63 39 39 39 28 28 28 38 38 38 33 33 33 ++37 37 37 66 66 66 75 75 75 76 76 76 50 50 50 39 39 39 40 40 40 48 48 48 ++42 42 42 62 62 62 87 87 87 91 91 91 63 63 63 48 48 48 60 60 60 60 60 60 ++53 53 53 70 70 70 92 92 92 99 99 99 82 82 82 62 62 62 65 65 65 77 77 77 ++73 73 73 75 75 75 91 91 91 109 110 110 105 105 105 87 87 87 80 80 80 89 89 89 ++85 85 85 90 90 90 103 103 102 115 116 115 117 117 117 105 105 105 99 99 99 96 97 98 ++99 99 99 99 99 99 112 112 113 121 121 119 121 121 119 121 121 119 117 117 117 109 110 110 ++105 105 105 115 116 115 115 116 115 131 131 131 127 127 127 117 117 117 137 137 137 125 122 126 ++121 121 119 117 117 117 125 125 127 137 137 137 134 134 134 122 121 126 122 121 126 133 133 133 ++133 133 133 139 139 139 129 129 130 127 127 127 129 129 130 137 138 139 142 143 144 144 145 144 ++124 112 115 116 129 109 83 172 115 83 172 115 83 172 72 83 172 72 83 172 72 83 172 72 ++83 172 115 83 172 115 141 180 99 83 172 72 83 172 115 83 172 72 146 184 30 146 184 30 ++141 180 99 83 172 72 83 172 72 83 172 72 231 246 232 252 251 251 255 255 255 252 251 251 ++255 255 255 255 255 255 255 255 255 252 251 251 255 255 255 255 255 255 252 251 251 180 183 185 ++14 16 19 1 3 7 14 16 19 11 13 16 6 8 11 16 20 21 8 10 13 10 11 14 ++8 10 13 11 13 16 14 16 19 10 11 14 6 8 11 11 13 16 11 13 16 11 13 16 ++17 17 17 78 78 78 121 121 119 117 117 117 112 112 113 109 110 110 125 122 126 133 133 133 ++137 137 137 137 138 139 134 134 134 133 133 133 134 134 134 133 133 133 127 127 127 121 121 119 ++121 121 119 121 121 119 128 128 128 133 133 133 131 131 131 128 128 128 125 122 126 121 121 119 ++127 127 127 121 121 119 109 110 110 103 103 102 112 112 113 121 121 119 117 117 117 103 103 102 ++99 99 99 96 96 96 93 93 93 92 92 92 92 92 92 92 92 92 91 91 91 90 90 90 ++85 85 85 95 95 94 112 112 113 109 110 110 88 88 88 75 75 75 87 87 87 99 99 99 ++94 94 94 73 73 73 62 62 62 66 66 66 65 65 65 61 61 61 70 70 70 81 81 81 ++87 87 87 68 68 68 52 52 52 65 65 65 82 82 82 73 73 73 52 52 52 44 44 44 ++44 44 44 45 45 45 48 48 48 48 48 48 43 43 43 39 39 39 44 44 44 52 52 52 ++66 66 66 43 43 43 39 39 39 49 49 49 50 50 50 51 51 51 51 51 51 42 42 42 ++49 49 49 52 52 52 57 57 57 59 59 59 62 62 62 67 67 67 54 54 54 29 29 29 ++16 16 16 19 19 19 24 24 24 34 34 34 36 36 36 20 20 20 6 6 6 11 11 11 ++17 17 17 43 43 43 57 57 57 59 59 59 50 50 50 23 23 23 6 6 6 19 19 19 ++42 42 42 43 43 43 52 52 52 54 54 54 46 46 46 46 46 46 53 53 53 58 58 58 ++54 54 54 50 50 50 46 46 46 46 46 46 48 48 48 51 51 51 52 52 52 50 50 50 ++45 45 45 50 50 50 48 48 48 53 53 53 53 53 53 45 45 45 45 45 45 49 49 49 ++46 46 46 53 53 53 54 54 54 50 50 50 46 46 46 43 43 43 46 46 46 56 56 56 ++52 52 52 50 50 50 48 48 48 50 50 50 53 53 53 56 56 56 53 53 53 50 50 50 ++43 43 43 49 49 49 49 49 49 46 46 46 45 45 45 43 43 43 42 42 42 46 46 46 ++44 44 44 49 49 49 50 50 50 45 45 45 36 36 36 25 25 25 13 13 13 3 3 3 ++11 11 11 13 13 13 10 10 10 13 13 13 24 24 24 34 34 34 31 31 31 17 17 17 ++14 14 14 13 13 13 10 10 10 10 10 10 11 11 11 13 13 13 14 14 14 14 14 14 ++14 14 14 19 19 19 14 14 14 6 6 6 21 21 21 42 42 42 40 40 40 25 25 25 ++34 34 34 37 37 37 34 34 34 24 24 24 16 16 16 16 16 16 24 24 24 29 29 29 ++37 37 37 20 20 20 8 8 8 17 17 17 24 24 24 19 19 19 13 13 13 11 11 11 ++20 20 20 33 33 33 36 36 36 21 21 21 11 11 11 13 13 13 16 16 16 13 13 13 ++11 11 11 10 10 10 20 20 20 32 32 32 34 34 34 24 24 24 14 14 14 11 11 11 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 20 20 20 21 21 21 17 17 17 ++17 17 17 19 19 19 17 17 17 11 11 11 11 11 11 17 17 17 19 19 19 17 17 17 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 ++19 19 19 19 19 19 14 14 14 8 8 8 0 0 0 0 0 0 0 0 0 3 3 3 ++11 11 11 11 11 11 11 11 11 8 8 8 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 6 6 6 8 8 8 6 6 6 4 4 4 4 4 4 6 6 6 ++0 0 0 11 11 11 17 17 17 11 11 11 6 6 6 3 3 3 0 0 0 0 0 0 ++6 6 6 0 0 0 0 0 0 14 14 14 14 14 14 3 3 3 3 3 3 14 14 14 ++19 19 19 19 19 19 3 3 3 3 3 3 0 0 0 16 16 16 17 17 17 21 21 21 ++20 20 20 13 13 13 32 32 32 40 40 40 17 17 17 0 0 0 6 6 6 4 4 4 ++3 3 3 4 4 4 28 28 28 51 51 51 27 27 27 0 0 0 13 13 13 11 11 11 ++6 6 6 8 8 8 29 29 29 52 52 52 33 33 33 6 6 6 17 17 17 11 11 11 ++10 10 10 6 6 6 40 40 40 61 61 61 37 37 37 6 6 6 11 11 11 23 23 23 ++19 19 19 10 10 10 38 38 38 62 62 62 49 49 49 31 31 31 27 27 27 24 24 24 ++28 28 28 23 23 23 42 42 42 70 70 70 67 67 67 39 39 39 32 32 32 46 46 46 ++58 58 58 45 45 45 48 48 48 82 82 82 80 80 80 60 60 60 39 39 39 44 44 44 ++59 59 59 60 60 60 63 63 63 80 80 80 88 88 88 73 73 73 58 58 58 57 57 57 ++59 59 59 75 75 75 82 82 82 91 91 91 101 101 101 87 87 87 68 68 68 74 74 74 ++80 80 80 75 75 75 87 87 87 109 110 110 112 112 113 93 93 93 84 84 84 89 89 89 ++93 93 93 89 89 89 96 97 98 115 116 115 121 121 119 112 112 113 101 101 101 99 99 99 ++103 103 102 109 110 110 103 103 102 112 112 113 134 134 134 133 133 133 112 112 113 105 105 105 ++117 117 117 112 112 113 115 116 115 121 121 119 140 140 140 142 143 144 122 121 126 125 122 126 ++117 117 117 128 128 128 134 134 134 129 129 130 125 122 126 127 127 127 133 133 133 140 140 140 ++133 133 133 133 133 133 128 128 128 137 138 139 139 139 139 142 143 144 139 139 139 134 134 134 ++128 121 122 231 224 220 231 246 232 136 172 147 83 172 115 83 172 72 83 172 72 83 172 72 ++83 172 72 83 172 72 83 172 72 83 172 115 141 180 99 146 184 30 141 180 99 146 184 30 ++141 180 99 83 172 72 83 172 72 83 172 72 200 220 210 252 251 251 252 251 251 255 255 255 ++252 251 251 246 251 251 255 255 255 255 255 255 255 255 255 252 251 251 180 183 185 88 88 88 ++10 11 14 11 13 16 20 21 24 8 10 13 6 8 11 14 16 19 8 10 13 14 16 19 ++10 11 14 8 10 13 14 16 19 10 11 14 6 8 11 11 13 16 10 11 14 6 8 11 ++28 28 28 93 93 93 115 116 115 115 116 115 121 121 119 117 117 117 122 121 126 134 134 134 ++137 138 139 142 143 144 139 139 139 137 137 137 142 143 144 142 143 144 137 137 137 133 133 133 ++129 129 130 128 128 128 134 134 134 140 140 140 133 133 133 128 128 128 129 129 130 129 129 130 ++127 127 127 128 128 128 125 125 127 117 117 117 117 117 117 117 117 117 109 110 110 96 97 98 ++99 99 99 99 99 99 99 99 99 96 97 98 96 97 98 95 95 94 92 92 92 89 89 89 ++87 87 87 85 85 85 99 99 99 112 112 113 105 105 105 95 95 94 88 88 88 78 78 78 ++96 96 96 91 91 91 75 75 75 68 68 68 74 74 74 65 65 65 57 57 57 70 70 70 ++85 85 85 84 84 84 67 67 67 50 50 50 63 63 63 77 77 77 65 65 65 39 39 39 ++51 51 51 46 46 46 42 42 42 42 42 42 39 39 39 37 37 37 37 37 37 39 39 39 ++69 69 69 57 57 57 57 57 57 60 60 60 51 51 51 48 48 48 51 51 51 48 48 48 ++52 52 52 49 49 49 43 43 43 38 38 38 48 48 48 67 67 67 67 67 67 45 45 45 ++6 6 6 17 17 17 29 29 29 33 33 33 20 20 20 0 0 0 6 6 6 27 27 27 ++48 48 48 57 57 57 51 51 51 40 40 40 43 43 43 43 43 43 25 25 25 8 8 8 ++36 36 36 33 33 33 49 49 49 56 56 56 51 51 51 48 48 48 46 46 46 50 50 50 ++54 54 54 58 58 58 58 58 58 49 49 49 43 43 43 50 50 50 51 51 51 42 42 42 ++51 51 51 49 49 49 46 46 46 52 52 52 58 58 58 54 54 54 49 49 49 44 44 44 ++45 45 45 50 50 50 52 52 52 50 50 50 45 45 45 43 43 43 44 44 44 49 49 49 ++53 53 53 51 51 51 48 48 48 45 45 45 45 45 45 49 49 49 52 52 52 56 56 56 ++49 49 49 49 49 49 46 46 46 44 44 44 45 45 45 44 44 44 45 45 45 46 46 46 ++48 48 48 50 50 50 48 48 48 36 36 36 20 20 20 11 11 11 13 13 13 17 17 17 ++13 13 13 10 10 10 17 17 17 32 32 32 37 37 37 27 27 27 13 13 13 6 6 6 ++13 13 13 13 13 13 13 13 13 11 11 11 10 10 10 10 10 10 11 11 11 13 13 13 ++10 10 10 11 11 11 17 17 17 28 28 28 38 38 38 39 39 39 34 34 34 27 27 27 ++16 16 16 19 19 19 17 17 17 11 11 11 14 14 14 28 28 28 38 38 38 42 42 42 ++16 16 16 6 6 6 4 4 4 14 14 14 13 13 13 4 4 4 4 4 4 14 14 14 ++36 36 36 32 32 32 21 21 21 10 10 10 8 8 8 16 16 16 16 16 16 11 11 11 ++6 6 6 16 16 16 28 28 28 32 32 32 24 24 24 11 11 11 6 6 6 13 13 13 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 20 20 20 21 21 21 17 17 17 ++17 17 17 19 19 19 17 17 17 11 11 11 11 11 11 17 17 17 19 19 19 17 17 17 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 10 10 10 ++21 21 21 17 17 17 11 11 11 4 4 4 0 0 0 0 0 0 3 3 3 8 8 8 ++11 11 11 8 8 8 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 ++8 8 8 4 4 4 4 4 4 4 4 4 6 6 6 4 4 4 0 0 0 0 0 0 ++0 0 0 6 6 6 16 16 16 13 13 13 6 6 6 3 3 3 3 3 3 0 0 0 ++6 6 6 0 0 0 0 0 0 14 14 14 14 14 14 3 3 3 3 3 3 14 14 14 ++19 19 19 19 19 19 3 3 3 3 3 3 0 0 0 16 16 16 17 17 17 20 20 20 ++17 17 17 13 13 13 8 8 8 27 27 27 43 43 43 21 21 21 0 0 0 10 10 10 ++0 0 0 13 13 13 6 6 6 32 32 32 50 50 50 27 27 27 4 4 4 6 6 6 ++10 10 10 17 17 17 8 8 8 34 34 34 54 54 54 33 33 33 13 13 13 11 11 11 ++19 19 19 10 10 10 6 6 6 36 36 36 58 58 58 39 39 39 11 11 11 19 19 19 ++21 21 21 20 20 20 16 16 16 38 38 38 63 63 63 53 53 53 27 27 27 24 24 24 ++27 27 27 36 36 36 24 24 24 40 40 40 75 75 75 63 63 63 36 36 36 53 53 53 ++50 50 50 43 43 43 37 37 37 58 58 58 73 73 73 85 85 85 66 66 66 50 50 50 ++69 69 69 61 61 61 50 50 50 60 60 60 88 88 88 89 89 89 68 68 68 59 59 59 ++78 78 78 83 83 83 73 73 73 74 74 74 95 95 94 99 99 99 83 83 83 75 75 75 ++80 80 80 91 91 91 93 93 93 88 88 88 95 95 94 109 110 110 105 105 105 89 89 89 ++85 85 85 101 101 101 109 110 110 105 104 105 109 110 110 121 121 119 115 116 115 96 97 98 ++105 104 105 103 103 102 115 116 115 125 122 126 125 122 126 129 129 130 127 127 127 105 105 105 ++117 117 117 115 116 115 117 117 117 125 125 127 140 140 140 140 140 140 125 125 127 128 128 128 ++129 129 130 137 137 137 134 134 134 125 125 127 125 122 126 137 137 137 144 145 144 144 145 144 ++142 143 144 137 138 139 131 131 131 142 143 144 137 138 139 147 147 148 137 138 139 121 121 119 ++180 183 185 238 240 244 255 255 255 248 249 239 136 172 147 83 172 72 83 172 72 83 172 115 ++83 172 72 83 172 72 146 184 30 146 184 30 146 184 30 146 184 30 141 180 99 83 172 72 ++83 172 72 83 172 72 83 172 72 83 172 72 136 172 147 255 255 255 252 251 251 252 251 251 ++255 255 255 255 255 255 252 251 251 252 251 251 252 251 251 255 255 255 200 220 210 16 16 16 ++14 16 19 14 16 19 11 13 16 6 8 11 10 11 14 11 13 16 6 8 11 14 16 19 ++11 13 16 6 8 11 11 13 16 8 10 13 10 11 14 14 16 19 6 8 11 8 10 13 ++54 54 54 101 101 101 105 105 105 115 116 115 129 129 130 127 127 127 129 129 130 140 140 140 ++131 131 131 140 140 140 137 138 139 133 133 133 139 139 139 142 143 144 144 145 144 147 147 148 ++140 140 140 133 133 133 134 134 134 140 140 140 137 137 137 134 134 134 137 137 137 137 137 137 ++134 134 134 137 138 139 137 137 137 129 129 130 121 121 119 109 110 110 105 104 105 103 103 102 ++101 101 101 99 99 99 96 97 98 95 95 94 95 95 94 94 94 94 91 91 91 90 90 90 ++92 92 92 84 84 84 90 90 90 105 105 105 105 105 105 103 103 102 99 99 99 92 92 92 ++83 83 83 99 99 99 99 99 99 78 78 78 67 67 67 65 65 65 63 63 63 63 63 63 ++56 56 56 74 74 74 84 84 84 69 69 69 58 58 58 68 68 68 74 74 74 66 66 66 ++44 44 44 44 44 44 44 44 44 44 44 44 40 40 40 36 36 36 38 38 38 44 44 44 ++67 67 67 69 69 69 67 67 67 59 59 59 51 51 51 50 50 50 51 51 51 50 50 50 ++40 40 40 33 33 33 23 23 23 16 16 16 29 29 29 57 57 57 67 67 67 54 54 54 ++33 33 33 31 31 31 27 27 27 20 20 20 13 13 13 21 21 21 42 42 42 57 57 57 ++63 63 63 46 46 46 21 21 21 0 0 0 6 6 6 37 37 37 52 52 52 44 44 44 ++19 19 19 13 13 13 40 40 40 58 58 58 61 61 61 59 59 59 48 48 48 48 48 48 ++48 48 48 46 46 46 53 53 53 54 54 54 46 46 46 44 44 44 49 49 49 49 49 49 ++56 56 56 50 50 50 46 46 46 44 44 44 48 48 48 54 54 54 52 52 52 46 46 46 ++46 46 46 45 45 45 46 46 46 48 48 48 46 46 46 46 46 46 44 44 44 42 42 42 ++50 50 50 51 51 51 52 52 52 49 49 49 44 44 44 44 44 44 49 49 49 54 54 54 ++56 56 56 49 49 49 44 44 44 43 43 43 45 45 45 49 49 49 49 49 49 46 46 46 ++50 50 50 44 44 44 34 34 34 21 21 21 11 11 11 6 6 6 13 13 13 19 19 19 ++6 6 6 13 13 13 27 27 27 37 37 37 32 32 32 17 17 17 10 10 10 13 13 13 ++8 8 8 11 11 11 14 14 14 16 16 16 16 16 16 14 14 14 13 13 13 11 11 11 ++21 21 21 25 25 25 34 34 34 40 40 40 34 34 34 21 21 21 14 14 14 16 16 16 ++11 11 11 11 11 11 10 10 10 11 11 11 23 23 23 34 34 34 33 33 33 25 25 25 ++8 8 8 13 13 13 17 17 17 16 16 16 10 10 10 11 11 11 23 23 23 34 34 34 ++37 37 37 21 21 21 6 6 6 8 8 8 14 14 14 16 16 16 13 13 13 13 13 13 ++17 17 17 27 27 27 31 31 31 23 23 23 13 13 13 10 10 10 11 11 11 14 14 14 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 20 20 20 21 21 21 17 17 17 ++17 17 17 19 19 19 17 17 17 11 11 11 11 11 11 17 17 17 19 19 19 17 17 17 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 13 13 13 ++23 23 23 16 16 16 8 8 8 3 3 3 0 0 0 0 0 0 4 4 4 11 11 11 ++13 13 13 8 8 8 0 0 0 0 0 0 3 3 3 8 8 8 11 11 11 13 13 13 ++14 14 14 10 10 10 6 6 6 6 6 6 10 10 10 8 8 8 3 3 3 0 0 0 ++0 0 0 4 4 4 14 14 14 14 14 14 4 4 4 0 0 0 3 3 3 0 0 0 ++4 4 4 0 0 0 3 3 3 16 16 16 14 14 14 0 0 0 3 3 3 16 16 16 ++17 17 17 17 17 17 0 0 0 3 3 3 0 0 0 17 17 17 17 17 17 19 19 19 ++24 24 24 13 13 13 0 0 0 8 8 8 29 29 29 39 39 39 23 23 23 0 0 0 ++8 8 8 0 0 0 13 13 13 0 0 0 32 32 32 59 59 59 24 24 24 0 0 0 ++14 14 14 0 0 0 17 17 17 10 10 10 34 34 34 61 61 61 33 33 33 16 16 16 ++8 8 8 14 14 14 10 10 10 10 10 10 33 33 33 57 57 57 48 48 48 17 17 17 ++16 16 16 20 20 20 17 17 17 19 19 19 42 42 42 63 63 63 57 57 57 31 31 31 ++20 20 20 32 32 32 33 33 33 21 21 21 44 44 44 81 81 81 77 77 77 52 52 52 ++29 29 29 43 43 43 42 42 42 38 38 38 46 46 46 84 84 84 84 84 84 77 77 77 ++56 56 56 51 51 51 56 56 56 52 52 52 61 61 61 87 87 87 91 91 91 80 80 80 ++87 87 87 75 75 75 68 68 68 63 63 63 70 70 70 91 91 91 103 103 102 95 95 94 ++87 87 87 95 95 94 91 91 91 81 81 81 85 85 85 105 104 105 112 112 113 105 105 105 ++93 93 93 105 105 105 109 110 110 99 99 99 96 97 98 109 110 110 117 117 117 117 117 117 ++105 105 105 109 110 110 127 127 127 125 122 126 109 110 110 115 116 115 129 129 130 127 127 127 ++115 116 115 125 125 127 125 122 126 137 137 137 128 128 128 121 121 119 142 143 144 137 137 137 ++144 145 144 134 134 134 127 127 127 128 128 128 137 137 137 144 145 144 144 145 144 144 145 144 ++140 140 140 140 140 140 134 134 134 137 138 139 134 134 134 147 147 148 129 129 130 125 125 127 ++238 240 244 255 255 255 255 255 255 255 255 255 248 249 239 136 172 147 83 172 115 83 172 115 ++83 172 115 141 180 99 146 184 30 146 184 30 146 184 30 83 172 72 83 172 72 83 172 72 ++83 172 72 83 172 72 83 172 72 83 172 72 112 122 122 255 255 255 252 251 251 248 249 239 ++252 251 251 255 255 255 255 255 255 252 251 251 255 255 255 255 255 255 200 220 210 40 40 40 ++11 13 16 8 10 13 6 8 11 8 10 13 11 13 16 10 11 14 6 8 11 10 11 14 ++14 16 19 6 8 11 11 13 16 6 8 11 11 13 16 14 16 19 6 8 11 26 29 32 ++83 83 83 103 103 102 99 99 99 109 110 110 121 121 119 121 121 119 125 125 127 134 134 134 ++134 134 134 140 140 140 139 139 139 133 133 133 131 131 131 133 133 133 137 138 139 144 145 144 ++142 143 144 129 129 130 121 121 119 125 122 126 129 129 130 137 137 137 137 137 137 134 134 134 ++134 134 134 134 134 134 137 137 137 137 137 137 131 131 131 121 121 119 115 116 115 115 116 115 ++109 110 110 105 105 105 101 101 101 96 96 96 95 95 94 95 95 94 95 95 94 95 95 94 ++87 87 87 88 88 88 94 94 94 99 99 99 93 93 93 85 85 85 89 89 89 103 103 102 ++89 89 89 80 80 80 89 89 89 91 91 91 70 70 70 62 62 62 69 69 69 65 65 65 ++59 59 59 61 61 61 77 77 77 87 87 87 70 70 70 58 58 58 69 69 69 84 84 84 ++53 53 53 46 46 46 42 42 42 46 46 46 53 53 53 60 60 60 68 68 68 74 74 74 ++57 57 57 65 65 65 63 63 63 59 59 59 60 60 60 62 62 62 51 51 51 33 33 33 ++28 28 28 24 24 24 23 23 23 24 24 24 32 32 32 51 51 51 62 62 62 59 59 59 ++51 51 51 34 34 34 19 19 19 17 17 17 32 32 32 53 53 53 62 62 62 56 56 56 ++44 44 44 25 25 25 17 17 17 11 11 11 0 0 0 14 14 14 40 40 40 51 51 51 ++50 50 50 39 39 39 51 51 51 49 49 49 48 48 48 53 53 53 43 43 43 39 39 39 ++36 36 36 16 16 16 29 29 29 53 53 53 50 50 50 37 37 37 44 44 44 58 58 58 ++54 54 54 50 50 50 51 51 51 42 42 42 38 38 38 49 49 49 54 54 54 57 57 57 ++52 52 52 45 45 45 44 44 44 48 48 48 50 50 50 53 53 53 51 51 51 44 44 44 ++45 45 45 50 50 50 54 54 54 54 54 54 51 51 51 46 46 46 46 46 46 48 48 48 ++56 56 56 48 48 48 44 44 44 44 44 44 45 45 45 49 49 49 50 50 50 44 44 44 ++44 44 44 31 31 31 16 16 16 11 11 11 11 11 11 11 11 11 10 10 10 8 8 8 ++17 17 17 31 31 31 34 34 34 25 25 25 13 13 13 10 10 10 13 13 13 11 11 11 ++14 14 14 11 11 11 10 10 10 10 10 10 13 13 13 19 19 19 24 24 24 27 27 27 ++29 29 29 42 42 42 45 45 45 33 33 33 16 16 16 8 8 8 8 8 8 8 8 8 ++11 11 11 13 13 13 17 17 17 25 25 25 33 33 33 33 33 33 21 21 21 4 4 4 ++14 14 14 17 17 17 14 14 14 10 10 10 13 13 13 24 24 24 34 34 34 38 38 38 ++19 19 19 8 8 8 6 6 6 14 14 14 16 16 16 8 8 8 10 10 10 17 17 17 ++31 31 31 31 31 31 23 23 23 11 11 11 10 10 10 17 17 17 17 17 17 13 13 13 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 20 20 20 21 21 21 17 17 17 ++17 17 17 19 19 19 17 17 17 11 11 11 11 11 11 17 17 17 19 19 19 17 17 17 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 4 4 4 16 16 16 ++20 20 20 13 13 13 4 4 4 0 0 0 0 0 0 0 0 0 8 8 8 16 16 16 ++11 11 11 6 6 6 0 0 0 0 0 0 6 6 6 10 10 10 8 8 8 3 3 3 ++6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 4 4 4 3 3 3 ++0 0 0 4 4 4 14 14 14 16 16 16 3 3 3 0 0 0 3 3 3 0 0 0 ++3 3 3 0 0 0 4 4 4 16 16 16 13 13 13 0 0 0 3 3 3 17 17 17 ++16 16 16 14 14 14 0 0 0 0 0 0 0 0 0 19 19 19 17 17 17 20 20 20 ++28 28 28 4 4 4 6 6 6 6 6 6 0 0 0 29 29 29 42 42 42 10 10 10 ++0 0 0 8 8 8 0 0 0 8 8 8 10 10 10 31 31 31 58 58 58 20 20 20 ++8 8 8 6 6 6 0 0 0 17 17 17 13 13 13 32 32 32 65 65 65 28 28 28 ++8 8 8 6 6 6 23 23 23 16 16 16 0 0 0 38 38 38 62 62 62 42 42 42 ++27 27 27 11 11 11 23 23 23 24 24 24 16 16 16 45 45 45 68 68 68 51 51 51 ++34 34 34 21 21 21 36 36 36 31 31 31 31 31 31 69 69 69 84 84 84 65 65 65 ++44 44 44 43 43 43 40 40 40 40 40 40 42 42 42 69 69 69 77 77 77 92 92 92 ++60 60 60 48 48 48 60 60 60 54 54 54 48 48 48 76 76 76 96 97 98 96 97 98 ++81 81 81 67 67 67 68 68 68 72 72 72 72 72 72 83 83 83 101 101 101 105 105 105 ++103 103 102 89 89 89 83 83 83 87 87 87 88 88 88 88 88 88 103 103 102 121 121 119 ++115 116 115 105 105 105 99 99 99 101 101 101 99 99 99 99 99 99 112 112 113 129 129 130 ++117 117 117 127 127 127 121 121 119 109 110 110 109 110 110 112 112 113 121 121 119 137 137 137 ++128 128 128 121 121 119 142 143 144 129 129 130 117 117 117 131 131 131 133 133 133 147 147 148 ++144 145 144 133 133 133 128 128 128 137 137 137 144 145 144 142 143 144 142 143 144 145 146 147 ++139 139 139 142 143 144 137 137 137 140 140 140 137 137 137 137 137 137 125 122 126 180 183 185 ++252 251 251 252 251 251 238 240 244 255 255 255 254 249 251 248 249 239 187 210 182 83 172 115 ++83 172 72 83 172 72 146 184 30 146 184 30 83 172 72 83 172 72 83 172 72 83 172 72 ++83 172 115 83 172 115 86 124 83 86 124 83 109 110 110 238 240 244 252 251 251 255 255 255 ++255 255 255 252 251 251 255 255 255 255 255 255 255 255 255 238 240 244 142 143 144 0 0 0 ++6 8 11 6 8 11 8 10 13 11 13 16 10 11 14 10 11 14 11 13 16 6 8 11 ++11 13 16 8 10 13 14 16 19 6 8 11 11 13 16 11 13 16 10 11 14 53 54 57 ++88 88 88 91 91 91 91 91 91 105 105 105 105 105 105 121 121 119 128 128 128 128 128 128 ++139 139 139 140 140 140 144 145 144 144 145 144 134 134 134 128 128 128 131 131 131 134 134 134 ++140 140 140 144 145 144 142 143 144 133 133 133 127 127 127 125 125 127 129 129 130 139 139 139 ++129 129 130 128 128 128 128 128 128 133 133 133 137 137 137 134 134 134 129 129 130 127 127 127 ++117 117 117 115 116 115 109 110 110 105 104 105 101 101 101 99 99 99 96 96 96 94 94 94 ++96 97 98 93 93 93 89 89 89 96 96 96 105 104 105 93 93 93 82 82 82 88 88 88 ++105 105 105 87 87 87 85 85 85 96 96 96 92 92 92 75 75 75 67 67 67 66 66 66 ++70 70 70 59 59 59 58 58 58 73 73 73 77 77 77 65 65 65 62 62 62 78 78 78 ++70 70 70 68 68 68 70 70 70 76 76 76 77 77 77 68 68 68 52 52 52 42 42 42 ++42 42 42 56 56 56 74 74 74 75 75 75 62 62 62 58 58 58 48 48 48 23 23 23 ++32 32 32 21 21 21 20 20 20 21 21 21 19 19 19 31 31 31 51 51 51 63 63 63 ++53 53 53 39 39 39 32 32 32 39 39 39 52 52 52 63 63 63 57 57 57 38 38 38 ++16 16 16 6 6 6 16 16 16 37 37 37 46 46 46 46 46 46 46 46 46 46 46 46 ++52 52 52 46 46 46 48 48 48 20 20 20 16 16 16 46 46 46 49 49 49 44 44 44 ++28 28 28 0 0 0 6 6 6 40 40 40 42 42 42 33 33 33 39 39 39 48 48 48 ++46 46 46 39 39 39 50 50 50 48 48 48 42 42 42 48 48 48 51 51 51 58 58 58 ++54 54 54 45 45 45 43 43 43 45 45 45 46 46 46 53 53 53 57 57 57 51 51 51 ++46 46 46 46 46 46 48 48 48 50 50 50 51 51 51 49 49 49 43 43 43 38 38 38 ++49 49 49 45 45 45 48 48 48 49 49 49 44 44 44 45 45 45 46 46 46 43 43 43 ++29 29 29 19 19 19 10 10 10 10 10 10 14 14 14 14 14 14 14 14 14 16 16 16 ++36 36 36 37 37 37 29 29 29 14 14 14 4 4 4 10 10 10 11 11 11 10 10 10 ++16 16 16 13 13 13 10 10 10 13 13 13 19 19 19 24 24 24 28 28 28 28 28 28 ++24 24 24 36 36 36 34 34 34 17 17 17 6 6 6 16 16 16 21 21 21 19 19 19 ++8 8 8 14 14 14 25 25 25 33 33 33 33 33 33 24 24 24 16 16 16 13 13 13 ++17 17 17 13 13 13 6 6 6 8 8 8 21 21 21 32 32 32 31 31 31 23 23 23 ++8 8 8 8 8 8 13 13 13 16 16 16 11 11 11 8 8 8 16 16 16 28 28 28 ++32 32 32 24 24 24 14 14 14 8 8 8 11 11 11 17 17 17 17 17 17 14 14 14 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 20 20 20 21 21 21 17 17 17 ++17 17 17 19 19 19 17 17 17 11 11 11 11 11 11 17 17 17 19 19 19 17 17 17 ++20 20 20 3 3 3 21 21 21 19 19 19 20 20 20 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 6 6 6 17 17 17 ++19 19 19 10 10 10 0 0 0 0 0 0 0 0 0 3 3 3 10 10 10 19 19 19 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 11 11 11 4 4 4 0 0 0 ++0 0 0 3 3 3 8 8 8 8 8 8 3 3 3 0 0 0 0 0 0 0 0 0 ++4 4 4 3 3 3 14 14 14 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 6 6 6 17 17 17 13 13 13 0 0 0 3 3 3 19 19 19 ++14 14 14 14 14 14 0 0 0 0 0 0 0 0 0 19 19 19 19 19 19 20 20 20 ++19 19 19 13 13 13 4 4 4 0 0 0 0 0 0 4 4 4 27 27 27 51 51 51 ++4 4 4 8 8 8 13 13 13 0 0 0 0 0 0 8 8 8 24 24 24 65 65 65 ++19 19 19 6 6 6 11 11 11 10 10 10 10 10 10 13 13 13 27 27 27 60 60 60 ++29 29 29 17 17 17 11 11 11 19 19 19 16 16 16 8 8 8 32 32 32 66 66 66 ++45 45 45 28 28 28 19 19 19 27 27 27 25 25 25 16 16 16 37 37 37 72 72 72 ++57 57 57 37 37 37 23 23 23 36 36 36 60 60 60 43 43 43 36 36 36 87 87 87 ++71 71 71 49 49 49 38 38 38 48 48 48 51 51 51 67 67 67 66 66 66 83 83 83 ++88 88 88 59 59 59 58 58 58 59 59 59 56 56 56 69 69 69 84 84 84 96 97 98 ++95 95 94 80 80 80 65 65 65 70 70 70 78 78 78 74 74 74 85 85 85 112 112 113 ++112 112 113 92 92 92 82 82 82 88 88 88 88 88 88 84 84 84 95 95 94 115 116 115 ++122 121 126 109 110 110 99 99 99 103 103 102 105 105 105 105 104 105 105 105 105 115 116 115 ++137 137 137 127 127 127 112 112 113 112 112 113 117 117 117 117 117 117 115 116 115 121 121 119 ++137 138 139 144 145 144 128 128 128 121 121 119 128 128 128 129 129 130 137 138 139 140 140 140 ++139 139 139 137 137 137 137 138 139 142 143 144 140 140 140 137 137 137 142 143 144 149 151 153 ++149 149 149 145 146 147 139 139 139 145 146 147 140 140 140 125 122 126 128 128 128 238 240 244 ++254 249 251 252 251 251 246 251 251 255 255 255 254 249 251 254 249 251 248 249 239 187 210 182 ++83 172 72 83 172 72 83 172 72 83 172 115 83 172 115 83 172 72 83 172 72 83 172 115 ++86 124 83 98 114 115 112 115 112 128 121 122 124 112 115 200 220 210 252 251 251 255 255 255 ++252 251 251 255 255 255 252 251 251 252 251 251 255 255 255 252 251 251 200 220 210 27 27 27 ++10 11 14 14 16 19 16 20 21 11 13 16 1 3 7 10 11 14 20 21 24 10 11 14 ++11 13 16 11 13 16 16 20 21 6 8 11 11 13 16 8 10 13 14 16 19 73 74 76 ++91 91 91 84 84 84 90 90 90 105 105 105 105 105 105 128 128 128 133 133 133 125 122 126 ++134 134 134 137 137 137 149 149 149 155 156 156 144 145 144 134 134 134 133 133 133 129 129 130 ++131 131 131 144 145 144 145 146 147 142 143 144 140 140 140 137 137 137 131 131 131 133 133 133 ++137 137 137 129 129 130 121 121 119 121 121 119 127 127 127 133 133 133 134 134 134 133 133 133 ++127 127 127 125 125 127 122 121 126 121 121 119 117 117 117 109 110 110 103 103 102 96 96 96 ++93 93 93 92 92 92 87 87 87 96 96 96 109 110 110 95 95 94 78 78 78 85 85 85 ++81 81 81 103 103 102 93 93 93 81 81 81 96 96 96 92 92 92 70 70 70 67 67 67 ++60 60 60 67 67 67 60 60 60 66 66 66 87 87 87 88 88 88 78 78 78 84 84 84 ++87 87 87 78 78 78 67 67 67 54 54 54 44 44 44 43 43 43 53 53 53 67 67 67 ++75 75 75 59 59 59 59 59 59 58 58 58 48 48 48 58 58 58 58 58 58 29 29 29 ++32 32 32 23 23 23 28 28 28 33 33 33 23 23 23 20 20 20 39 39 39 58 58 58 ++60 60 60 53 53 53 57 57 57 61 61 61 60 60 60 57 57 57 49 49 49 36 36 36 ++44 44 44 54 54 54 53 53 53 48 48 48 43 43 43 27 27 27 8 8 8 4 4 4 ++38 38 38 46 46 46 52 52 52 11 11 11 6 6 6 54 54 54 60 60 60 52 52 52 ++43 43 43 19 19 19 21 21 21 40 40 40 46 46 46 50 50 50 52 52 52 44 44 44 ++37 37 37 24 24 24 43 43 43 54 54 54 53 53 53 52 52 52 44 44 44 48 48 48 ++51 51 51 42 42 42 38 38 38 39 39 39 39 39 39 48 48 48 56 56 56 53 53 53 ++51 51 51 43 43 43 37 37 37 38 38 38 45 45 45 48 48 48 40 40 40 33 33 33 ++40 40 40 42 42 42 51 51 51 53 53 53 43 43 43 40 40 40 43 43 43 40 40 40 ++13 13 13 11 11 11 13 13 13 16 16 16 14 14 14 14 14 14 24 24 24 36 36 36 ++43 43 43 27 27 27 13 13 13 13 13 13 16 16 16 14 14 14 13 13 13 16 16 16 ++4 4 4 11 11 11 20 20 20 31 31 31 36 36 36 32 32 32 21 21 21 11 11 11 ++37 37 37 37 37 37 28 28 28 13 13 13 8 8 8 13 13 13 13 13 13 6 6 6 ++14 14 14 23 23 23 33 33 33 34 34 34 21 21 21 4 4 4 6 6 6 17 17 17 ++16 16 16 8 8 8 8 8 8 21 21 21 34 34 34 36 36 36 23 23 23 6 6 6 ++13 13 13 16 16 16 17 17 17 11 11 11 8 8 8 14 14 14 27 27 27 37 37 37 ++24 24 24 16 16 16 11 11 11 14 14 14 14 14 14 11 11 11 13 13 13 19 19 19 ++ ++3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 14 14 14 19 19 19 17 17 17 20 20 20 ++17 17 17 21 21 21 14 14 14 8 8 8 16 16 16 19 19 19 17 17 17 19 19 19 ++19 19 19 14 14 14 14 14 14 17 17 17 17 17 17 10 10 10 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 8 8 8 19 19 19 ++21 21 21 8 8 8 0 0 0 6 6 6 0 0 0 0 0 0 17 17 17 0 0 0 ++0 0 0 0 0 0 0 0 0 4 4 4 8 8 8 8 8 8 4 4 4 0 0 0 ++0 0 0 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++0 0 0 10 10 10 17 17 17 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 4 4 4 11 11 11 11 11 11 4 4 4 0 0 0 8 8 8 17 17 17 ++19 19 19 10 10 10 0 0 0 0 0 0 8 8 8 17 17 17 20 20 20 20 20 20 ++20 20 20 8 8 8 0 0 0 4 4 4 4 4 4 0 0 0 10 10 10 21 21 21 ++52 52 52 11 11 11 3 3 3 8 8 8 0 0 0 0 0 0 10 10 10 27 27 27 ++60 60 60 19 19 19 11 11 11 4 4 4 6 6 6 10 10 10 14 14 14 20 20 20 ++63 63 63 31 31 31 17 17 17 13 13 13 16 16 16 20 20 20 17 17 17 29 29 29 ++66 66 66 46 46 46 24 24 24 20 20 20 29 29 29 28 28 28 28 28 28 38 38 38 ++71 71 71 63 63 63 39 39 39 52 52 52 50 50 50 40 40 40 36 36 36 46 46 46 ++75 75 75 81 81 81 49 49 49 46 46 46 73 73 73 61 61 61 44 44 44 59 59 59 ++87 87 87 95 95 94 65 65 65 46 46 46 80 80 80 91 91 91 71 71 71 68 68 68 ++95 95 94 101 101 101 90 90 90 71 71 71 74 74 74 94 94 94 96 97 98 83 83 83 ++105 105 105 109 110 110 101 101 101 87 87 87 84 84 84 96 97 98 109 110 110 109 110 110 ++109 110 110 125 122 126 115 116 115 99 99 99 103 103 102 105 105 105 112 112 113 128 128 128 ++121 121 119 137 137 137 125 125 127 117 117 117 121 121 119 115 116 115 121 121 119 129 129 130 ++137 137 137 142 143 144 137 137 137 128 128 128 131 131 131 144 145 144 142 143 144 128 128 128 ++133 133 133 142 143 144 152 153 154 144 145 144 134 134 134 140 140 140 152 153 154 157 157 157 ++144 145 144 142 143 144 139 139 139 155 156 156 142 143 144 134 134 134 180 183 185 252 251 251 ++255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ++187 210 182 83 172 115 83 172 72 83 172 72 83 172 72 83 172 72 86 124 83 107 112 107 ++117 117 117 122 121 126 127 127 127 118 122 119 125 125 127 166 165 167 255 255 255 255 255 255 ++255 255 255 255 255 255 252 251 251 252 251 251 255 255 255 169 175 167 57 57 57 0 0 0 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++8 10 13 14 16 19 8 10 13 14 16 19 10 11 14 6 8 11 43 44 47 69 70 72 ++84 84 84 94 94 94 96 96 96 96 97 98 105 105 105 117 117 117 131 131 131 144 145 144 ++129 129 130 133 133 133 142 143 144 149 149 149 155 156 156 149 151 153 140 140 140 129 129 130 ++131 131 131 133 133 133 140 140 140 142 143 144 134 134 134 134 134 134 140 140 140 142 143 144 ++142 143 144 134 134 134 125 122 126 117 117 117 117 117 117 122 121 126 128 128 128 133 133 133 ++127 127 127 115 116 115 105 105 105 105 105 105 112 112 113 117 117 117 121 121 119 122 121 126 ++121 121 119 112 112 113 109 110 110 109 110 110 112 112 113 109 110 110 99 99 99 89 89 89 ++87 87 87 99 99 99 105 104 105 99 99 99 96 96 96 99 99 99 93 93 93 82 82 82 ++90 90 90 91 91 91 93 93 93 88 88 88 83 83 83 87 87 87 85 85 85 71 71 71 ++70 70 70 80 80 80 59 59 59 60 60 60 63 63 63 73 73 73 71 71 71 65 65 65 ++37 37 37 43 43 43 37 37 37 56 56 56 61 61 61 50 50 50 56 56 56 45 45 45 ++24 24 24 29 29 29 23 23 23 17 17 17 25 25 25 34 34 34 45 45 45 60 60 60 ++60 60 60 60 60 60 61 61 61 61 61 61 59 59 59 56 56 56 54 54 54 54 54 54 ++36 36 36 20 20 20 17 17 17 31 31 31 27 27 27 8 8 8 0 0 0 16 16 16 ++13 13 13 31 31 31 49 49 49 28 28 28 19 19 19 39 39 39 34 34 34 24 24 24 ++39 39 39 42 42 42 32 32 32 38 38 38 43 43 43 40 40 40 37 37 37 13 13 13 ++37 37 37 48 48 48 46 46 46 44 44 44 50 50 50 42 42 42 21 21 21 11 11 11 ++38 38 38 44 44 44 42 42 42 49 49 49 29 29 29 40 40 40 38 38 38 33 33 33 ++27 27 27 11 11 11 16 16 16 3 3 3 8 8 8 33 33 33 34 34 34 37 37 37 ++27 27 27 13 13 13 23 23 23 34 34 34 23 23 23 4 4 4 8 8 8 17 17 17 ++19 19 19 10 10 10 13 13 13 16 16 16 4 4 4 10 10 10 31 31 31 43 43 43 ++32 32 32 16 16 16 13 13 13 4 4 4 11 11 11 21 21 21 8 8 8 8 8 8 ++21 21 21 10 10 10 11 11 11 23 23 23 17 17 17 4 4 4 17 17 17 42 42 42 ++39 39 39 21 21 21 8 8 8 14 14 14 21 21 21 16 16 16 11 11 11 13 13 13 ++16 16 16 36 36 36 38 38 38 19 19 19 8 8 8 19 19 19 20 20 20 10 10 10 ++13 13 13 10 10 10 14 14 14 39 39 39 33 33 33 13 13 13 19 19 19 10 10 10 ++8 8 8 16 16 16 11 11 11 11 11 11 19 19 19 31 31 31 36 36 36 20 20 20 ++8 8 8 16 16 16 6 6 6 4 4 4 13 13 13 21 21 21 0 0 0 19 19 19 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 14 14 14 19 19 19 17 17 17 20 20 20 ++17 17 17 21 21 21 14 14 14 8 8 8 16 16 16 19 19 19 17 17 17 19 19 19 ++19 19 19 14 14 14 14 14 14 19 19 19 17 17 17 10 10 10 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 8 8 8 19 19 19 ++20 20 20 8 8 8 0 0 0 4 4 4 0 0 0 3 3 3 19 19 19 4 4 4 ++4 4 4 0 0 0 0 0 0 3 3 3 10 10 10 11 11 11 4 4 4 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 13 13 13 16 16 16 11 11 11 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 8 8 8 17 17 17 11 11 11 0 0 0 0 0 0 10 10 10 20 20 20 ++17 17 17 8 8 8 0 0 0 0 0 0 10 10 10 17 17 17 20 20 20 20 20 20 ++21 21 21 10 10 10 0 0 0 4 4 4 4 4 4 0 0 0 4 4 4 16 16 16 ++20 20 20 51 51 51 17 17 17 0 0 0 8 8 8 0 0 0 14 14 14 6 6 6 ++27 27 27 59 59 59 19 19 19 13 13 13 6 6 6 6 6 6 10 10 10 8 8 8 ++27 27 27 63 63 63 32 32 32 16 16 16 24 24 24 8 8 8 17 17 17 19 19 19 ++31 31 31 61 61 61 56 56 56 27 27 27 23 23 23 29 29 29 28 28 28 28 28 28 ++34 34 34 76 76 76 71 71 71 50 50 50 25 25 25 36 36 36 43 43 43 40 40 40 ++53 53 53 72 72 72 76 76 76 70 70 70 54 54 54 45 45 45 53 53 53 52 52 52 ++66 66 66 83 83 83 90 90 90 87 87 87 81 81 81 70 70 70 63 63 63 68 68 68 ++73 73 73 95 95 94 105 104 105 93 93 93 85 85 85 89 89 89 87 87 87 75 75 75 ++81 81 81 105 105 105 115 116 115 101 101 101 96 96 96 109 110 110 112 112 113 99 99 99 ++96 97 98 112 112 113 127 127 127 121 121 119 109 110 110 115 116 115 122 121 126 121 121 119 ++115 116 115 115 116 115 139 139 139 127 127 127 115 116 115 125 125 127 122 121 126 137 138 139 ++129 129 130 128 128 128 133 133 133 140 140 140 140 140 140 134 134 134 133 133 133 134 134 134 ++137 137 137 144 145 144 149 149 149 147 147 148 142 143 144 149 149 149 157 157 157 157 157 157 ++147 147 148 139 139 139 152 153 154 149 151 153 149 149 149 134 134 134 231 246 232 255 255 255 ++255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ++254 249 251 200 220 210 141 180 99 146 184 30 146 184 30 83 172 72 86 124 83 121 113 124 ++118 122 119 118 122 119 118 122 119 113 122 108 118 122 119 134 134 134 255 255 255 255 255 255 ++255 255 255 255 255 255 252 251 251 255 255 255 255 255 255 255 255 255 92 92 92 27 27 27 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++10 11 14 8 10 13 11 13 16 14 16 19 6 8 11 20 21 24 53 54 57 71 72 74 ++78 78 78 92 92 92 101 101 101 105 105 105 115 116 115 122 121 126 128 128 128 134 134 134 ++142 143 144 140 140 140 142 143 144 144 145 144 147 147 148 147 147 148 144 145 144 142 143 144 ++137 137 137 134 134 134 137 138 139 139 139 139 134 134 134 134 134 134 137 137 137 133 133 133 ++133 133 133 134 134 134 134 134 134 128 128 128 117 117 117 115 116 115 121 121 119 127 127 127 ++128 128 128 115 116 115 109 110 110 109 110 110 109 110 110 103 103 102 99 99 99 103 103 102 ++103 103 102 105 105 105 105 104 105 101 101 101 96 97 98 99 99 99 99 99 99 96 97 98 ++92 92 92 90 90 90 90 90 90 91 91 91 89 89 89 83 83 83 81 81 81 82 82 82 ++76 76 76 75 75 75 76 76 76 70 70 70 63 63 63 67 67 67 69 69 69 61 61 61 ++61 61 61 63 63 63 51 51 51 58 58 58 52 52 52 56 56 56 54 54 54 45 45 45 ++48 48 48 48 48 48 34 34 34 44 44 44 45 45 45 36 36 36 44 44 44 37 37 37 ++34 34 34 37 37 37 37 37 37 38 38 38 40 40 40 37 37 37 32 32 32 33 33 33 ++25 25 25 33 33 33 32 32 32 24 24 24 25 25 25 28 28 28 25 25 25 21 21 21 ++20 20 20 29 29 29 33 33 33 27 27 27 20 20 20 19 19 19 19 19 19 16 16 16 ++20 20 20 11 11 11 23 23 23 17 17 17 10 10 10 16 16 16 13 13 13 17 17 17 ++39 39 39 28 28 28 14 14 14 17 17 17 17 17 17 11 11 11 14 14 14 14 14 14 ++19 19 19 8 8 8 8 8 8 13 13 13 10 10 10 14 14 14 25 25 25 32 32 32 ++23 23 23 17 17 17 6 6 6 13 13 13 8 8 8 14 14 14 11 11 11 11 11 11 ++16 16 16 3 3 3 10 10 10 20 20 20 13 13 13 19 19 19 34 34 34 28 28 28 ++16 16 16 8 8 8 13 13 13 21 21 21 17 17 17 8 8 8 11 11 11 17 17 17 ++14 14 14 11 11 11 11 11 11 10 10 10 13 13 13 28 28 28 36 36 36 28 28 28 ++13 13 13 10 10 10 17 17 17 13 13 13 11 11 11 16 16 16 10 10 10 17 17 17 ++8 8 8 14 14 14 14 14 14 11 11 11 13 13 13 23 23 23 32 32 32 37 37 37 ++21 21 21 17 17 17 14 14 14 14 14 14 11 11 11 8 8 8 13 13 13 20 20 20 ++39 39 39 29 29 29 17 17 17 11 11 11 10 10 10 10 10 10 10 10 10 10 10 10 ++13 13 13 24 24 24 32 32 32 29 29 29 19 19 19 16 16 16 14 14 14 8 8 8 ++14 14 14 10 10 10 3 3 3 14 14 14 27 27 27 33 33 33 28 28 28 14 14 14 ++14 14 14 19 19 19 17 17 17 13 13 13 6 6 6 21 21 21 16 16 16 31 31 31 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 0 0 0 3 3 3 16 16 16 19 19 19 17 17 17 20 20 20 ++17 17 17 21 21 21 14 14 14 8 8 8 16 16 16 19 19 19 17 17 17 19 19 19 ++19 19 19 14 14 14 14 14 14 19 19 19 17 17 17 10 10 10 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 8 8 8 19 19 19 ++19 19 19 8 8 8 0 0 0 4 4 4 0 0 0 3 3 3 19 19 19 8 8 8 ++8 8 8 3 3 3 0 0 0 3 3 3 11 11 11 13 13 13 6 6 6 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++11 11 11 14 14 14 14 14 14 8 8 8 3 3 3 3 3 3 0 0 0 0 0 0 ++0 0 0 13 13 13 20 20 20 10 10 10 0 0 0 0 0 0 14 14 14 21 21 21 ++13 13 13 6 6 6 0 0 0 3 3 3 11 11 11 19 19 19 21 21 21 21 21 21 ++21 21 21 10 10 10 0 0 0 4 4 4 6 6 6 0 0 0 0 0 0 6 6 6 ++11 11 11 25 25 25 51 51 51 19 19 19 0 0 0 17 17 17 0 0 0 3 3 3 ++16 16 16 17 17 17 57 57 57 16 16 16 14 14 14 11 11 11 10 10 10 8 8 8 ++10 10 10 28 28 28 59 59 59 36 36 36 17 17 17 27 27 27 10 10 10 21 21 21 ++14 14 14 44 44 44 67 67 67 56 56 56 28 28 28 25 25 25 31 31 31 21 21 21 ++31 31 31 65 65 65 71 71 71 67 67 67 40 40 40 32 32 32 33 33 33 40 40 40 ++34 34 34 65 65 65 91 91 91 89 89 89 54 54 54 39 39 39 57 57 57 56 56 56 ++50 50 50 72 72 72 92 92 92 95 95 94 80 80 80 60 60 60 60 60 60 75 75 75 ++68 68 68 78 78 78 99 99 99 112 112 113 103 103 102 82 82 82 76 76 76 87 87 87 ++80 80 80 92 92 92 109 110 110 117 117 117 115 116 115 109 110 110 101 101 101 99 99 99 ++99 99 99 103 103 102 121 121 119 127 127 127 121 121 119 121 121 119 125 125 127 112 112 113 ++109 110 110 121 121 119 121 121 119 137 137 137 133 133 133 121 121 119 139 139 139 131 131 131 ++125 125 127 125 125 127 134 134 134 149 149 149 145 146 147 133 133 133 129 129 130 139 139 139 ++147 147 148 144 145 144 144 145 144 145 146 147 149 151 153 157 157 157 155 156 156 144 145 144 ++142 143 144 144 145 144 157 157 157 147 147 148 134 134 134 169 175 167 255 255 255 252 251 251 ++255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ++254 249 251 255 255 255 231 224 220 146 184 30 146 184 30 146 184 30 83 172 72 112 122 122 ++116 129 109 116 129 109 118 122 119 118 122 119 113 122 108 107 112 107 238 240 244 252 251 251 ++255 255 255 246 251 251 255 255 255 255 255 255 246 251 251 157 157 157 10 10 10 13 13 13 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++11 13 16 1 3 7 14 16 19 11 13 16 6 8 11 37 39 42 66 69 71 76 76 76 ++83 83 83 94 94 94 103 103 102 109 110 110 121 121 119 127 127 127 129 129 130 134 134 134 ++140 140 140 140 140 140 142 143 144 142 143 144 142 143 144 142 143 144 142 143 144 140 140 140 ++140 140 140 137 137 137 134 134 134 134 134 134 133 133 133 133 133 133 129 129 130 127 127 127 ++131 131 131 128 128 128 125 122 126 122 121 126 125 122 126 125 122 126 121 121 119 121 121 119 ++121 121 119 112 112 113 109 110 110 115 116 115 115 116 115 105 105 105 105 104 105 105 105 105 ++103 103 102 103 103 102 99 99 99 93 93 93 93 93 93 95 95 94 94 94 94 89 89 89 ++92 92 92 84 84 84 82 82 82 85 85 85 82 82 82 73 73 73 72 72 72 77 77 77 ++74 74 74 72 72 72 72 72 72 69 69 69 63 63 63 63 63 63 67 67 67 65 65 65 ++62 62 62 56 56 56 52 52 52 62 62 62 52 52 52 50 50 50 52 52 52 46 46 46 ++45 45 45 46 46 46 36 36 36 43 43 43 44 44 44 37 37 37 43 43 43 36 36 36 ++39 39 39 32 32 32 33 33 33 40 40 40 40 40 40 36 36 36 29 29 29 24 24 24 ++24 24 24 32 32 32 25 25 25 17 17 17 23 23 23 24 24 24 21 21 21 24 24 24 ++20 20 20 36 36 36 37 37 37 21 21 21 14 14 14 24 24 24 27 27 27 17 17 17 ++27 27 27 11 11 11 17 17 17 20 20 20 13 13 13 13 13 13 21 21 21 32 32 32 ++31 31 31 20 20 20 10 10 10 0 0 0 10 10 10 19 19 19 14 14 14 13 13 13 ++19 19 19 14 14 14 13 13 13 16 16 16 17 17 17 23 23 23 29 29 29 31 31 31 ++17 17 17 6 6 6 14 14 14 16 16 16 16 16 16 6 6 6 11 11 11 13 13 13 ++13 13 13 17 17 17 3 3 3 14 14 14 20 20 20 25 25 25 38 38 38 16 16 16 ++8 8 8 13 13 13 11 11 11 10 10 10 13 13 13 14 14 14 13 13 13 14 14 14 ++14 14 14 10 10 10 10 10 10 14 14 14 25 25 25 37 37 37 32 32 32 14 14 14 ++10 10 10 11 11 11 19 19 19 16 16 16 11 11 11 11 11 11 8 8 8 14 14 14 ++10 10 10 14 14 14 11 11 11 8 8 8 20 20 20 37 37 37 37 37 37 25 25 25 ++6 6 6 17 17 17 20 20 20 13 13 13 3 3 3 8 8 8 21 21 21 31 31 31 ++38 38 38 23 23 23 11 11 11 16 16 16 21 21 21 17 17 17 13 13 13 14 14 14 ++19 19 19 31 31 31 36 36 36 19 19 19 10 10 10 14 14 14 11 11 11 14 14 14 ++17 17 17 14 14 14 14 14 14 27 27 27 32 32 32 31 31 31 11 11 11 8 8 8 ++10 10 10 8 8 8 14 14 14 13 13 13 3 3 3 24 24 24 29 29 29 32 32 32 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 0 0 0 3 3 3 17 17 17 20 20 20 17 17 17 20 20 20 ++17 17 17 21 21 21 14 14 14 8 8 8 16 16 16 19 19 19 17 17 17 19 19 19 ++17 17 17 14 14 14 16 16 16 19 19 19 16 16 16 8 8 8 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 8 8 8 19 19 19 ++17 17 17 10 10 10 0 0 0 3 3 3 0 0 0 3 3 3 19 19 19 11 11 11 ++3 3 3 3 3 3 3 3 3 4 4 4 10 10 10 10 10 10 8 8 8 4 4 4 ++6 6 6 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++14 14 14 13 13 13 10 10 10 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 16 16 16 16 16 16 0 0 0 0 0 0 8 8 8 19 19 19 20 20 20 ++8 8 8 3 3 3 0 0 0 4 4 4 14 14 14 20 20 20 21 21 21 20 20 20 ++17 17 17 6 6 6 0 0 0 4 4 4 6 6 6 3 3 3 0 0 0 0 0 0 ++0 0 0 8 8 8 31 31 31 46 46 46 20 20 20 0 0 0 13 13 13 8 8 8 ++6 6 6 11 11 11 16 16 16 57 57 57 21 21 21 17 17 17 11 11 11 11 11 11 ++8 8 8 10 10 10 31 31 31 57 57 57 40 40 40 19 19 19 25 25 25 19 19 19 ++23 23 23 21 21 21 40 40 40 63 63 63 58 58 58 31 31 31 23 23 23 37 37 37 ++51 51 51 39 39 39 40 40 40 75 75 75 73 73 73 51 51 51 31 31 31 40 40 40 ++51 51 51 65 65 65 70 70 70 82 82 82 82 82 82 62 62 62 53 53 53 53 53 53 ++51 51 51 73 73 73 81 81 81 87 87 87 96 97 98 84 84 84 63 63 63 67 67 67 ++74 74 74 74 74 74 89 89 89 109 110 110 109 110 110 92 92 92 84 84 84 88 88 88 ++89 89 89 85 85 85 96 97 98 121 121 119 125 125 127 109 110 110 96 97 98 99 99 99 ++105 104 105 101 101 101 105 105 105 121 121 119 133 133 133 129 129 130 117 117 117 109 110 110 ++117 117 117 115 116 115 121 121 119 128 128 128 144 145 144 144 145 144 127 127 127 128 128 128 ++127 127 127 137 137 137 144 145 144 144 145 144 142 143 144 142 143 144 142 143 144 140 140 140 ++149 149 149 142 143 144 139 139 139 144 145 144 157 157 157 161 161 162 152 153 154 137 138 139 ++145 146 147 161 161 162 155 156 156 145 146 147 128 128 128 238 240 244 255 255 255 252 251 251 ++255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ++252 251 251 252 251 251 248 249 239 231 224 220 141 180 99 146 184 30 83 172 72 83 172 72 ++113 122 108 118 122 119 125 125 127 122 121 126 118 122 119 107 112 107 200 220 210 252 251 251 ++252 251 251 255 255 255 246 251 251 255 255 255 255 255 255 200 220 210 48 48 48 4 4 4 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++11 13 16 6 8 11 14 16 19 6 8 11 14 16 19 53 54 57 72 73 75 78 79 82 ++88 88 88 99 99 99 105 104 105 109 110 110 122 121 126 131 131 131 134 134 134 139 139 139 ++140 140 140 142 143 144 144 145 144 144 145 144 142 143 144 140 140 140 139 139 139 139 139 139 ++142 143 144 139 139 139 137 138 139 137 137 137 134 134 134 134 134 134 133 133 133 129 129 130 ++129 129 130 129 129 130 129 129 130 127 127 127 125 122 126 121 121 119 117 117 117 117 117 117 ++117 117 117 115 116 115 115 116 115 112 112 113 109 110 110 109 110 110 105 105 105 105 105 105 ++105 105 105 103 103 102 99 99 99 99 99 99 99 99 99 95 95 94 90 90 90 87 87 87 ++89 89 89 87 87 87 84 84 84 83 83 83 82 82 82 78 78 78 76 76 76 76 76 76 ++75 75 75 71 71 71 69 69 69 68 68 68 67 67 67 65 65 65 63 63 63 62 62 62 ++59 59 59 57 57 57 54 54 54 57 57 57 52 52 52 50 50 50 52 52 52 53 53 53 ++50 50 50 50 50 50 42 42 42 44 44 44 44 44 44 38 38 38 40 40 40 34 34 34 ++43 43 43 32 32 32 36 36 36 44 44 44 39 39 39 36 36 36 36 36 36 32 32 32 ++28 28 28 31 31 31 24 24 24 23 23 23 28 28 28 23 23 23 19 19 19 29 29 29 ++36 36 36 31 31 31 23 23 23 16 16 16 16 16 16 20 20 20 20 20 20 17 17 17 ++14 14 14 16 16 16 21 21 21 19 19 19 8 8 8 17 17 17 36 36 36 32 32 32 ++16 16 16 13 13 13 23 23 23 19 19 19 23 23 23 24 24 24 8 8 8 16 16 16 ++8 8 8 23 23 23 17 17 17 8 8 8 25 25 25 38 38 38 25 25 25 8 8 8 ++19 19 19 4 4 4 21 21 21 8 8 8 16 16 16 8 8 8 19 19 19 14 14 14 ++11 11 11 19 19 19 4 4 4 17 17 17 34 34 34 27 27 27 17 17 17 11 11 11 ++8 8 8 25 25 25 23 23 23 10 10 10 13 13 13 17 17 17 13 13 13 13 13 13 ++17 17 17 8 8 8 13 13 13 28 28 28 34 34 34 29 29 29 19 19 19 13 13 13 ++19 19 19 13 13 13 11 11 11 11 11 11 17 17 17 19 19 19 14 14 14 10 10 10 ++20 20 20 10 10 10 8 8 8 21 21 21 34 34 34 34 34 34 24 24 24 14 14 14 ++11 11 11 19 19 19 19 19 19 10 10 10 10 10 10 23 23 23 32 32 32 33 33 33 ++8 8 8 14 14 14 14 14 14 10 10 10 8 8 8 13 13 13 14 14 14 11 11 11 ++31 31 31 33 33 33 19 19 19 11 11 11 13 13 13 6 6 6 8 8 8 19 19 19 ++4 4 4 19 19 19 31 31 31 34 34 34 29 29 29 27 27 27 3 3 3 20 20 20 ++14 14 14 13 13 13 16 16 16 14 14 14 14 14 14 28 28 28 28 28 28 20 20 20 ++ ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 3 3 3 0 0 0 4 4 4 17 17 17 20 20 20 17 17 17 20 20 20 ++17 17 17 21 21 21 14 14 14 8 8 8 16 16 16 19 19 19 17 17 17 19 19 19 ++17 17 17 14 14 14 16 16 16 19 19 19 16 16 16 6 6 6 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 8 8 8 19 19 19 ++17 17 17 13 13 13 0 0 0 0 0 0 0 0 0 3 3 3 19 19 19 14 14 14 ++0 0 0 0 0 0 6 6 6 8 8 8 6 6 6 6 6 6 10 10 10 13 13 13 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 10 10 10 13 13 13 ++13 13 13 8 8 8 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++13 13 13 16 16 16 8 8 8 0 0 0 0 0 0 16 16 16 21 21 21 16 16 16 ++3 3 3 0 0 0 3 3 3 8 8 8 16 16 16 20 20 20 21 21 21 20 20 20 ++11 11 11 3 3 3 0 0 0 3 3 3 6 6 6 6 6 6 3 3 3 0 0 0 ++0 0 0 11 11 11 4 4 4 31 31 31 44 44 44 16 16 16 0 0 0 16 16 16 ++8 8 8 10 10 10 16 16 16 21 21 21 58 58 58 17 17 17 13 13 13 6 6 6 ++14 14 14 19 19 19 8 8 8 34 34 34 57 57 57 38 38 38 20 20 20 17 17 17 ++17 17 17 27 27 27 16 16 16 36 36 36 70 70 70 54 54 54 29 29 29 51 51 51 ++44 44 44 31 31 31 28 28 28 57 57 57 69 69 69 74 74 74 56 56 56 46 46 46 ++69 69 69 60 60 60 40 40 40 59 59 59 90 90 90 87 87 87 65 65 65 50 50 50 ++72 72 72 78 78 78 70 70 70 71 71 71 95 95 94 103 103 102 84 84 84 69 69 69 ++74 74 74 89 89 89 93 93 93 88 88 88 96 97 98 112 112 113 103 103 102 78 78 78 ++84 84 84 96 96 96 105 105 105 109 110 110 115 116 115 121 121 119 112 112 113 96 96 96 ++101 101 101 105 104 105 109 110 110 121 121 119 133 133 133 131 131 131 121 121 119 112 112 113 ++121 121 119 115 116 115 121 121 119 128 128 128 144 145 144 147 147 148 129 129 130 129 129 130 ++134 134 134 144 145 144 144 145 144 134 134 134 137 137 137 149 151 153 155 156 156 144 145 144 ++137 138 139 137 138 139 140 140 140 149 149 149 158 159 161 160 161 160 155 156 156 149 149 149 ++157 157 157 160 161 160 142 143 144 137 137 137 180 183 185 255 255 255 252 251 251 255 255 255 ++255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ++246 251 251 246 251 251 255 255 255 254 249 251 238 240 244 136 172 147 83 172 72 83 172 72 ++113 122 108 118 122 119 122 121 126 122 121 126 122 121 126 126 132 129 157 157 157 255 255 255 ++255 255 255 246 251 251 255 255 255 252 251 251 252 251 251 200 220 210 42 42 42 14 14 14 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++10 11 14 11 13 16 14 16 19 6 8 11 33 34 37 66 69 71 73 74 76 83 84 85 ++91 91 91 103 103 102 109 110 110 117 117 117 129 129 130 137 137 137 140 140 140 142 143 144 ++147 147 148 147 147 148 147 147 148 147 147 148 145 146 147 144 145 144 144 145 144 144 145 144 ++134 134 134 137 138 139 140 140 140 137 138 139 137 137 137 134 134 134 134 134 134 137 138 139 ++133 133 133 129 129 130 128 128 128 128 128 128 129 129 130 128 128 128 122 121 126 121 121 119 ++121 121 119 117 117 117 115 116 115 117 117 117 115 116 115 112 112 113 109 110 110 112 112 113 ++103 103 102 101 101 101 101 101 101 103 103 102 99 99 99 90 90 90 93 93 93 103 103 102 ++93 93 93 88 88 88 84 84 84 83 83 83 83 83 83 82 82 82 82 82 82 84 84 84 ++87 87 87 81 81 81 71 71 71 67 67 67 67 67 67 63 63 63 59 59 59 58 58 58 ++59 59 59 69 69 69 66 66 66 56 56 56 59 59 59 52 52 52 44 44 44 51 51 51 ++45 45 45 45 45 45 37 37 37 38 38 38 40 40 40 44 44 44 53 53 53 53 53 53 ++54 54 54 50 50 50 57 57 57 59 59 59 46 46 46 36 36 36 32 32 32 25 25 25 ++27 27 27 38 38 38 42 42 42 42 42 42 44 44 44 38 38 38 28 28 28 28 28 28 ++31 31 31 20 20 20 13 13 13 14 14 14 16 16 16 13 13 13 11 11 11 13 13 13 ++10 10 10 19 19 19 21 21 21 27 27 27 20 20 20 28 28 28 46 46 46 31 31 31 ++33 33 33 33 33 33 46 46 46 46 46 46 42 42 42 25 25 25 13 13 13 37 37 37 ++43 43 43 44 44 44 39 39 39 29 29 29 33 33 33 48 48 48 43 43 43 20 20 20 ++43 43 43 44 44 44 39 39 39 6 6 6 37 37 37 39 39 39 38 38 38 46 46 46 ++16 16 16 0 0 0 16 16 16 39 39 39 40 40 40 20 20 20 0 0 0 3 3 3 ++3 3 3 28 28 28 31 31 31 16 16 16 13 13 13 14 14 14 11 11 11 13 13 13 ++14 14 14 19 19 19 25 25 25 33 33 33 31 31 31 17 17 17 10 10 10 13 13 13 ++14 14 14 10 10 10 4 4 4 14 14 14 25 25 25 28 28 28 21 21 21 11 11 11 ++17 17 17 14 14 14 23 23 23 36 36 36 36 36 36 23 23 23 11 11 11 13 13 13 ++17 17 17 14 14 14 11 11 11 11 11 11 24 24 24 36 36 36 32 32 32 20 20 20 ++4 4 4 14 14 14 19 19 19 13 13 13 8 8 8 16 16 16 23 23 23 27 27 27 ++44 44 44 43 43 43 6 6 6 3 3 3 11 11 11 0 0 0 8 8 8 0 0 0 ++3 3 3 24 24 24 33 33 33 25 25 25 19 19 19 31 31 31 10 10 10 39 39 39 ++48 48 48 54 54 54 52 52 52 46 46 46 49 49 49 46 46 46 45 45 45 43 43 43 ++ ++13 13 13 10 10 10 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 4 4 4 0 0 0 6 6 6 19 19 19 21 21 21 17 17 17 20 20 20 ++17 17 17 21 21 21 14 14 14 8 8 8 16 16 16 19 19 19 17 17 17 19 19 19 ++16 16 16 16 16 16 17 17 17 20 20 20 16 16 16 6 6 6 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 8 8 8 19 19 19 ++17 17 17 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 16 16 16 ++0 0 0 0 0 0 6 6 6 6 6 6 3 3 3 3 3 3 8 8 8 14 14 14 ++8 8 8 8 8 8 8 8 8 10 10 10 13 13 13 14 14 14 16 16 16 17 17 17 ++8 8 8 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 ++16 16 16 11 11 11 0 0 0 0 0 0 8 8 8 20 20 20 20 20 20 10 10 10 ++0 0 0 0 0 0 4 4 4 11 11 11 17 17 17 20 20 20 20 20 20 17 17 17 ++6 6 6 0 0 0 0 0 0 3 3 3 6 6 6 6 6 6 6 6 6 4 4 4 ++11 11 11 0 0 0 13 13 13 4 4 4 27 27 27 45 45 45 13 13 13 4 4 4 ++4 4 4 6 6 6 11 11 11 16 16 16 19 19 19 58 58 58 19 19 19 16 16 16 ++21 21 21 4 4 4 19 19 19 8 8 8 33 33 33 62 62 62 36 36 36 21 21 21 ++14 14 14 27 27 27 25 25 25 20 20 20 40 40 40 69 69 69 68 68 68 45 45 45 ++25 25 25 31 31 31 33 33 33 37 37 37 42 42 42 72 72 72 73 73 73 70 70 70 ++52 52 52 46 46 46 40 40 40 51 51 51 63 63 63 80 80 80 88 88 88 72 72 72 ++80 80 80 66 66 66 60 60 60 59 59 59 68 68 68 92 92 92 103 103 102 88 88 88 ++83 83 83 90 90 90 85 85 85 74 74 74 87 87 87 109 110 110 112 112 113 101 101 101 ++92 92 92 105 105 105 109 110 110 99 99 99 101 101 101 117 117 117 125 122 126 115 116 115 ++103 103 102 112 112 113 127 127 127 121 121 119 112 112 113 125 122 126 137 137 137 129 129 130 ++117 117 117 125 122 126 125 122 126 140 140 140 133 133 133 128 128 128 147 147 148 137 137 137 ++142 143 144 140 140 140 134 134 134 133 133 133 139 139 139 149 149 149 155 156 156 152 153 154 ++139 139 139 144 145 144 152 153 154 157 157 157 157 157 157 152 153 154 155 156 156 163 163 163 ++163 163 163 145 146 147 144 145 144 137 138 139 248 249 239 252 251 251 255 255 255 255 255 255 ++255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ++246 251 251 255 255 255 254 249 251 255 255 255 255 255 255 231 246 232 83 172 115 83 172 72 ++86 124 83 113 122 108 122 121 126 125 122 126 113 122 108 116 129 109 116 129 109 255 255 255 ++255 255 255 255 255 255 252 251 251 252 251 251 231 224 220 231 224 220 128 128 128 11 11 11 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++10 11 14 14 16 19 11 13 16 16 20 21 53 54 57 73 74 76 75 78 80 87 88 90 ++101 101 101 112 112 113 117 117 117 121 121 119 129 129 130 139 139 139 144 145 144 152 153 154 ++147 147 148 147 147 148 149 149 149 149 151 153 152 153 154 149 149 149 144 145 144 140 140 140 ++144 145 144 152 153 154 155 156 156 152 153 154 149 149 149 147 147 148 147 147 148 152 153 154 ++144 145 144 133 133 133 122 121 126 122 121 126 131 131 131 137 138 139 137 137 137 131 131 131 ++122 121 126 112 112 113 112 112 113 125 122 126 128 128 128 121 121 119 115 116 115 122 121 126 ++112 112 113 103 103 102 99 99 99 99 99 99 95 95 94 91 91 91 95 95 94 105 104 105 ++105 104 105 88 88 88 78 78 78 83 83 83 83 83 83 76 76 76 80 80 80 90 90 90 ++103 103 102 99 99 99 85 85 85 72 72 72 68 68 68 63 63 63 60 60 60 60 60 60 ++59 59 59 75 75 75 76 76 76 62 62 62 71 71 71 58 58 58 38 38 38 45 45 45 ++39 39 39 43 43 43 46 46 46 50 50 50 58 58 58 66 66 66 72 72 72 72 72 72 ++63 63 63 63 63 63 62 62 62 56 56 56 40 40 40 29 29 29 24 24 24 19 19 19 ++21 21 21 46 46 46 63 63 63 62 62 62 59 59 59 57 57 57 48 48 48 31 31 31 ++8 8 8 13 13 13 16 16 16 13 13 13 11 11 11 10 10 10 10 10 10 8 8 8 ++16 16 16 13 13 13 14 14 14 44 44 44 44 44 44 43 43 43 63 63 63 49 49 49 ++53 53 53 61 61 61 54 54 54 38 38 38 45 45 45 52 52 52 44 44 44 43 43 43 ++19 19 19 6 6 6 31 31 31 46 46 46 37 37 37 44 44 44 52 52 52 36 36 36 ++23 23 23 54 54 54 49 49 49 11 11 11 37 37 37 38 38 38 23 23 23 53 53 53 ++40 40 40 6 6 6 28 28 28 33 33 33 23 23 23 39 39 39 28 28 28 0 0 0 ++0 0 0 17 17 17 24 24 24 17 17 17 11 11 11 10 10 10 11 11 11 13 13 13 ++13 13 13 31 31 31 36 36 36 27 27 27 17 17 17 13 13 13 10 10 10 11 11 11 ++10 10 10 16 16 16 16 16 16 24 24 24 27 27 27 21 21 21 19 19 19 8 8 8 ++4 4 4 24 24 24 39 39 39 37 37 37 23 23 23 13 13 13 13 13 13 16 16 16 ++14 14 14 8 8 8 10 10 10 23 23 23 34 34 34 34 34 34 23 23 23 11 11 11 ++16 16 16 8 8 8 16 16 16 36 36 36 42 42 42 33 33 33 36 36 36 49 49 49 ++51 51 51 51 51 51 19 19 19 0 0 0 0 0 0 0 0 0 6 6 6 0 0 0 ++27 27 27 31 31 31 24 24 24 4 4 4 8 8 8 37 37 37 6 6 6 42 42 42 ++29 29 29 44 44 44 46 46 46 38 38 38 34 34 34 23 23 23 36 36 36 48 48 48 ++ ++21 21 21 17 17 17 10 10 10 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 4 4 4 0 0 0 6 6 6 19 19 19 21 21 21 17 17 17 20 20 20 ++17 17 17 21 21 21 14 14 14 8 8 8 16 16 16 19 19 19 17 17 17 19 19 19 ++16 16 16 16 16 16 17 17 17 20 20 20 16 16 16 4 4 4 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 8 8 8 19 19 19 ++19 19 19 19 19 19 3 3 3 0 0 0 0 0 0 0 0 0 14 14 14 16 16 16 ++3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 6 6 6 6 6 6 ++16 16 16 16 16 16 16 16 16 16 16 16 14 14 14 13 13 13 11 11 11 10 10 10 ++4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 6 6 6 13 13 13 ++11 11 11 6 6 6 0 0 0 6 6 6 14 14 14 20 20 20 14 14 14 6 6 6 ++0 0 0 0 0 0 6 6 6 14 14 14 19 19 19 20 20 20 19 19 19 16 16 16 ++4 4 4 3 3 3 3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 6 6 6 ++6 6 6 10 10 10 0 0 0 11 11 11 6 6 6 19 19 19 46 46 46 8 8 8 ++3 3 3 6 6 6 6 6 6 10 10 10 16 16 16 20 20 20 60 60 60 25 25 25 ++16 16 16 16 16 16 6 6 6 20 20 20 13 13 13 32 32 32 68 68 68 36 36 36 ++28 28 28 20 20 20 29 29 29 29 29 29 25 25 25 58 58 58 74 74 74 51 51 51 ++36 36 36 31 31 31 33 33 33 36 36 36 34 34 34 62 62 62 72 72 72 82 82 82 ++48 48 48 44 44 44 50 50 50 52 52 52 42 42 42 62 62 62 95 95 94 92 92 92 ++72 72 72 54 54 54 58 58 58 67 67 67 63 63 63 75 75 75 96 96 96 99 99 99 ++101 101 101 84 84 84 73 73 73 75 75 75 83 83 83 90 90 90 105 105 105 121 121 119 ++112 112 113 105 105 105 99 99 99 96 96 96 96 96 96 101 101 101 115 116 115 129 129 130 ++117 117 117 121 121 119 125 125 127 115 116 115 105 105 105 115 116 115 133 133 133 139 139 139 ++131 131 131 121 121 119 144 145 144 134 134 134 121 121 119 134 134 134 140 140 140 149 149 149 ++147 147 148 137 137 137 133 133 133 140 140 140 144 145 144 144 145 144 145 146 147 149 151 153 ++152 153 154 155 156 156 155 156 156 157 157 157 157 157 157 149 151 153 152 153 154 166 167 167 ++166 167 167 152 153 154 152 153 154 149 149 149 231 246 232 255 255 255 252 251 251 255 255 255 ++255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ++255 255 255 254 249 251 254 249 251 255 255 255 252 251 251 255 255 255 246 251 251 136 172 147 ++83 172 115 116 129 109 113 122 108 113 122 108 116 129 109 86 124 83 116 129 109 231 246 232 ++252 251 251 255 255 255 255 255 255 252 251 251 246 251 251 200 220 210 200 220 210 42 42 42 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++11 13 16 11 13 16 11 13 16 35 36 38 69 70 72 81 81 81 87 87 87 90 91 93 ++109 110 110 121 121 119 127 127 127 127 127 127 131 131 131 139 139 139 149 149 149 160 161 160 ++149 151 153 147 147 148 147 147 148 149 151 153 155 156 156 152 153 154 145 146 147 140 140 140 ++140 140 140 149 149 149 149 151 153 147 147 148 144 145 144 139 139 139 137 137 137 142 143 144 ++145 146 147 145 146 147 144 145 144 134 134 134 128 128 128 128 128 128 134 134 134 142 143 144 ++129 129 130 121 121 119 115 116 115 117 117 117 121 121 119 121 121 119 115 116 115 112 112 113 ++121 121 119 112 112 113 101 101 101 93 93 93 93 93 93 95 95 94 94 94 94 91 91 91 ++109 110 110 93 93 93 82 82 82 81 81 81 80 80 80 73 73 73 75 75 75 84 84 84 ++95 95 94 101 101 101 93 93 93 75 75 75 65 65 65 59 59 59 56 56 56 59 59 59 ++54 54 54 62 62 62 74 74 74 68 68 68 77 77 77 62 62 62 46 46 46 53 53 53 ++58 58 58 63 63 63 70 70 70 72 72 72 73 73 73 75 75 75 71 71 71 67 67 67 ++68 68 68 67 67 67 52 52 52 33 33 33 24 24 24 23 23 23 23 23 23 21 21 21 ++11 11 11 25 25 25 51 51 51 61 61 61 51 51 51 45 45 45 43 43 43 33 33 33 ++6 6 6 11 11 11 13 13 13 10 10 10 8 8 8 10 10 10 11 11 11 8 8 8 ++4 4 4 3 3 3 10 10 10 48 48 48 42 42 42 32 32 32 62 62 62 57 57 57 ++54 54 54 62 62 62 38 38 38 19 19 19 37 37 37 52 52 52 48 48 48 33 33 33 ++8 8 8 6 6 6 27 27 27 43 43 43 42 42 42 39 39 39 40 40 40 36 36 36 ++8 8 8 32 32 32 50 50 50 38 38 38 27 27 27 34 34 34 19 19 19 33 33 33 ++54 54 54 37 37 37 27 27 27 6 6 6 0 0 0 39 39 39 49 49 49 20 20 20 ++4 4 4 6 6 6 14 14 14 17 17 17 11 11 11 10 10 10 13 13 13 13 13 13 ++24 24 24 34 34 34 29 29 29 16 16 16 11 11 11 11 11 11 10 10 10 13 13 13 ++16 16 16 24 24 24 21 21 21 25 25 25 20 20 20 8 8 8 13 13 13 8 8 8 ++17 17 17 33 33 33 38 38 38 25 25 25 11 11 11 11 11 11 16 16 16 14 14 14 ++11 11 11 10 10 10 20 20 20 33 33 33 31 31 31 19 19 19 19 19 19 29 29 29 ++23 23 23 0 0 0 13 13 13 48 48 48 56 56 56 36 36 36 32 32 32 50 50 50 ++44 44 44 37 37 37 36 36 36 11 11 11 0 0 0 0 0 0 4 4 4 14 14 14 ++34 34 34 24 24 24 10 10 10 0 0 0 13 13 13 43 43 43 0 0 0 38 38 38 ++10 10 10 23 23 23 38 38 38 37 37 37 25 25 25 3 3 3 33 33 33 45 45 45 ++ ++27 27 27 21 21 21 13 13 13 4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 4 4 4 3 3 3 6 6 6 20 20 20 21 21 21 17 17 17 20 20 20 ++17 17 17 21 21 21 14 14 14 8 8 8 16 16 16 19 19 19 17 17 17 19 19 19 ++16 16 16 16 16 16 19 19 19 20 20 20 14 14 14 4 4 4 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 8 8 8 19 19 19 ++20 20 20 20 20 20 4 4 4 0 0 0 0 0 0 0 0 0 13 13 13 16 16 16 ++11 11 11 4 4 4 0 0 0 0 0 0 4 4 4 8 8 8 3 3 3 0 0 0 ++0 0 0 3 3 3 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 10 10 10 19 19 19 ++3 3 3 3 3 3 6 6 6 14 14 14 20 20 20 17 17 17 10 10 10 3 3 3 ++0 0 0 0 0 0 8 8 8 16 16 16 20 20 20 20 20 20 17 17 17 14 14 14 ++4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 ++0 0 0 3 3 3 10 10 10 0 0 0 4 4 4 10 10 10 17 17 17 51 51 51 ++14 14 14 11 11 11 11 11 11 10 10 10 10 10 10 14 14 14 20 20 20 60 60 60 ++24 24 24 16 16 16 23 23 23 17 17 17 11 11 11 14 14 14 32 32 32 68 68 68 ++38 38 38 29 29 29 11 11 11 31 31 31 57 57 57 39 39 39 36 36 36 77 77 77 ++56 56 56 37 37 37 31 31 31 38 38 38 42 42 42 68 68 68 68 68 68 72 72 72 ++75 75 75 56 56 56 44 44 44 50 50 50 48 48 48 59 59 59 83 83 83 85 85 85 ++92 92 92 70 70 70 60 60 60 69 69 69 70 70 70 65 65 65 82 82 82 112 112 113 ++109 110 110 90 90 90 78 78 78 82 82 82 83 83 83 82 82 82 93 93 93 112 112 113 ++121 121 119 103 103 102 93 93 93 99 99 99 99 99 99 96 96 96 105 104 105 121 121 119 ++131 131 131 127 127 127 109 110 110 109 110 110 121 121 119 115 116 115 112 112 113 133 133 133 ++140 140 140 144 145 144 133 133 133 128 128 128 128 128 128 129 129 130 144 145 144 144 145 144 ++152 153 154 140 140 140 139 139 139 147 147 148 149 151 153 142 143 144 140 140 140 144 145 144 ++161 161 162 155 156 156 147 147 148 149 151 153 157 157 157 157 157 157 155 156 156 166 165 167 ++157 157 157 161 161 162 142 143 144 140 140 140 147 147 148 255 255 255 231 246 232 252 251 251 ++255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ++252 251 251 252 251 251 254 249 251 255 255 255 252 251 251 248 249 239 252 251 251 255 255 255 ++141 180 99 83 172 115 86 124 83 86 124 83 83 172 115 83 172 115 141 180 99 187 210 182 ++255 255 255 255 255 255 252 251 251 255 255 255 200 220 210 200 220 210 238 240 244 169 175 167 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++14 16 19 8 10 13 11 13 16 50 51 53 76 76 76 83 84 85 94 94 95 91 92 94 ++105 105 105 125 122 126 134 134 134 137 137 137 139 139 139 142 143 144 147 147 148 157 157 157 ++166 165 167 155 156 156 147 147 148 145 146 147 152 153 154 157 157 157 155 156 156 149 151 153 ++147 147 148 152 153 154 152 153 154 149 149 149 147 147 148 140 140 140 134 134 134 137 137 137 ++139 139 139 144 145 144 147 147 148 147 147 148 144 145 144 137 138 139 137 137 137 137 137 137 ++139 139 139 137 138 139 127 127 127 112 112 113 117 117 117 131 131 131 128 128 128 112 112 113 ++115 116 115 121 121 119 112 112 113 99 99 99 91 91 91 94 94 94 94 94 94 88 88 88 ++105 105 105 101 101 101 91 91 91 81 81 81 77 77 77 77 77 77 75 75 75 71 71 71 ++82 82 82 99 99 99 101 101 101 83 83 83 69 69 69 60 60 60 57 57 57 60 60 60 ++58 58 58 54 54 54 75 75 75 78 78 78 89 89 89 77 77 77 71 71 71 81 81 81 ++70 70 70 73 73 73 77 77 77 73 73 73 72 72 72 74 74 74 70 70 70 67 67 67 ++71 71 71 70 70 70 49 49 49 24 24 24 23 23 23 28 28 28 24 24 24 23 23 23 ++27 27 27 14 14 14 40 40 40 66 66 66 52 52 52 36 36 36 44 44 44 54 54 54 ++27 27 27 13 13 13 0 0 0 6 6 6 11 11 11 10 10 10 8 8 8 11 11 11 ++0 0 0 17 17 17 25 25 25 50 50 50 27 27 27 10 10 10 53 53 53 52 52 52 ++59 59 59 54 54 54 34 34 34 42 42 42 45 45 45 20 20 20 24 24 24 44 44 44 ++21 21 21 37 37 37 16 16 16 3 3 3 34 34 34 40 40 40 34 34 34 51 51 51 ++33 33 33 0 0 0 32 32 32 51 51 51 13 13 13 43 43 43 34 34 34 0 0 0 ++42 42 42 45 45 45 14 14 14 0 0 0 0 0 0 0 0 0 25 25 25 54 54 54 ++19 19 19 4 4 4 8 8 8 17 17 17 14 14 14 11 11 11 14 14 14 11 11 11 ++38 38 38 29 29 29 16 16 16 11 11 11 16 16 16 10 10 10 6 6 6 19 19 19 ++19 19 19 24 24 24 14 14 14 16 16 16 11 11 11 4 4 4 20 20 20 19 19 19 ++39 39 39 36 36 36 25 25 25 14 14 14 10 10 10 13 13 13 13 13 13 10 10 10 ++14 14 14 17 17 17 32 32 32 40 40 40 23 23 23 0 0 0 20 20 20 53 53 53 ++46 46 46 25 25 25 27 27 27 51 51 51 52 52 52 29 29 29 28 28 28 49 49 49 ++33 33 33 10 10 10 42 42 42 24 24 24 0 0 0 4 4 4 4 4 4 49 49 49 ++20 20 20 4 4 4 0 0 0 0 0 0 25 25 25 50 50 50 0 0 0 43 43 43 ++21 21 21 21 21 21 44 44 44 51 51 51 33 33 33 6 6 6 36 36 36 37 37 37 ++ ++0 0 0 11 11 11 23 23 23 19 19 19 4 4 4 0 0 0 0 0 0 4 4 4 ++4 4 4 0 0 0 4 4 4 19 19 19 17 17 17 19 19 19 20 20 20 16 16 16 ++17 17 17 16 16 16 14 14 14 14 14 14 17 17 17 19 19 19 17 17 17 17 17 17 ++10 10 10 16 16 16 21 21 21 19 19 19 10 10 10 3 3 3 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 ++19 19 19 16 16 16 11 11 11 4 4 4 0 0 0 0 0 0 6 6 6 10 10 10 ++16 16 16 6 6 6 0 0 0 0 0 0 4 4 4 10 10 10 4 4 4 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 3 3 3 3 3 3 6 6 6 10 10 10 11 11 11 8 8 8 4 4 4 ++0 0 0 4 4 4 14 14 14 19 19 19 14 14 14 8 8 8 3 3 3 3 3 3 ++0 0 0 4 4 4 11 11 11 16 16 16 19 19 19 17 17 17 13 13 13 10 10 10 ++4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 ++4 4 4 6 6 6 6 6 6 8 8 8 10 10 10 11 11 11 13 13 13 13 13 13 ++49 49 49 16 16 16 10 10 10 6 6 6 13 13 13 13 13 13 11 11 11 23 23 23 ++59 59 59 29 29 29 16 16 16 21 21 21 17 17 17 16 16 16 24 24 24 25 25 25 ++69 69 69 40 40 40 29 29 29 51 51 51 46 46 46 29 29 29 37 37 37 37 37 37 ++69 69 69 68 68 68 39 39 39 43 43 43 67 67 67 53 53 53 39 39 39 50 50 50 ++82 82 82 80 80 80 57 57 57 42 42 42 62 62 62 77 77 77 67 67 67 52 52 52 ++90 90 90 88 88 88 74 74 74 59 59 59 66 66 66 87 87 87 91 91 91 82 82 82 ++105 105 105 103 103 102 95 95 94 84 84 84 77 77 77 82 82 82 96 96 96 109 110 110 ++109 110 110 121 121 119 109 110 110 93 93 93 99 99 99 105 104 105 105 105 105 121 121 119 ++122 121 126 131 131 131 121 121 119 112 112 113 121 121 119 115 116 115 115 116 115 128 128 128 ++140 140 140 144 145 144 137 137 137 127 127 127 133 133 133 144 145 144 142 143 144 133 133 133 ++137 138 139 152 153 154 161 161 162 152 153 154 140 140 140 137 137 137 144 145 144 152 153 154 ++157 157 157 155 156 156 161 161 162 166 165 167 157 157 157 155 156 156 158 159 161 163 163 163 ++145 146 147 160 161 160 163 163 163 134 134 134 142 143 144 157 157 157 109 110 110 252 251 251 ++231 224 220 255 255 255 255 255 255 255 255 255 252 251 251 255 255 255 252 251 251 255 255 255 ++255 255 255 252 251 251 255 255 255 255 255 255 255 255 255 252 251 251 255 255 255 255 255 255 ++252 251 251 169 175 167 83 172 115 83 172 72 83 172 72 83 172 72 83 172 115 136 172 147 ++246 251 251 255 255 255 252 251 251 252 251 251 252 251 251 200 220 210 238 240 244 238 240 244 ++89 90 92 8 10 13 11 13 16 6 8 11 22 23 26 0 0 4 8 10 13 14 16 19 ++16 16 16 0 0 0 29 29 29 71 71 71 84 84 84 89 89 89 101 101 101 105 105 105 ++115 116 115 121 121 119 137 137 137 147 147 148 149 149 149 145 146 147 145 146 147 149 151 153 ++157 157 157 166 167 167 160 161 160 149 149 149 149 149 149 152 153 154 155 156 156 161 161 162 ++160 161 160 152 153 154 142 143 144 140 140 140 147 147 148 152 153 154 144 145 144 133 133 133 ++129 129 130 134 134 134 140 140 140 144 145 144 137 138 139 133 133 133 137 137 137 144 145 144 ++140 140 140 140 140 140 137 138 139 133 133 133 125 125 127 117 117 117 121 121 119 127 127 127 ++112 112 113 109 110 110 125 122 126 115 116 115 94 94 94 93 93 93 93 93 93 90 90 90 ++91 91 91 112 112 113 99 99 99 81 81 81 83 83 83 82 82 82 77 77 77 74 74 74 ++73 73 73 88 88 88 101 101 101 95 95 94 77 77 77 62 62 62 62 62 62 70 70 70 ++80 80 80 78 78 78 80 80 80 84 84 84 90 90 90 88 88 88 71 71 71 52 52 52 ++48 48 48 71 71 71 77 77 77 70 70 70 70 70 70 69 69 69 57 57 57 45 45 45 ++63 63 63 74 74 74 61 61 61 34 34 34 24 24 24 27 27 27 25 25 25 23 23 23 ++20 20 20 6 6 6 28 28 28 52 52 52 58 58 58 37 37 37 17 17 17 37 37 37 ++52 52 52 16 16 16 4 4 4 13 13 13 4 4 4 13 13 13 20 20 20 0 0 0 ++4 4 4 36 36 36 42 42 42 45 45 45 45 45 45 42 42 42 51 51 51 52 52 52 ++19 19 19 46 46 46 59 59 59 42 42 42 14 14 14 0 0 0 8 8 8 19 19 19 ++45 45 45 36 36 36 4 4 4 0 0 0 0 0 0 23 23 23 58 58 58 48 48 48 ++51 51 51 33 33 33 10 10 10 40 40 40 49 49 49 27 27 27 37 37 37 46 46 46 ++31 31 31 53 53 53 59 59 59 21 21 21 0 0 0 0 0 0 11 11 11 20 20 20 ++24 24 24 19 19 19 14 14 14 14 14 14 10 10 10 10 10 10 25 25 25 43 43 43 ++31 31 31 20 20 20 11 11 11 13 13 13 16 16 16 14 14 14 11 11 11 11 11 11 ++31 31 31 36 36 36 21 21 21 6 6 6 10 10 10 13 13 13 19 19 19 33 33 33 ++42 42 42 19 19 19 10 10 10 17 17 17 14 14 14 11 11 11 13 13 13 10 10 10 ++14 14 14 36 36 36 43 43 43 40 40 40 29 29 29 0 0 0 8 8 8 48 48 48 ++25 25 25 49 49 49 54 54 54 51 51 51 39 39 39 34 34 34 52 52 52 57 57 57 ++39 39 39 0 0 0 32 32 32 34 34 34 0 0 0 19 19 19 36 36 36 14 14 14 ++0 0 0 0 0 0 0 0 0 3 3 3 32 32 32 29 29 29 0 0 0 39 39 39 ++38 38 38 32 32 32 38 38 38 52 52 52 52 52 52 37 37 37 37 37 37 52 52 52 ++ ++0 0 0 0 0 0 13 13 13 25 25 25 24 24 24 8 8 8 0 0 0 0 0 0 ++3 3 3 0 0 0 6 6 6 19 19 19 19 19 19 17 17 17 20 20 20 17 17 17 ++17 17 17 16 16 16 13 13 13 14 14 14 17 17 17 19 19 19 17 17 17 16 16 16 ++11 11 11 16 16 16 20 20 20 17 17 17 8 8 8 0 0 0 0 0 0 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 8 8 8 10 10 10 ++17 17 17 16 16 16 10 10 10 3 3 3 0 0 0 0 0 0 0 0 0 6 6 6 ++17 17 17 13 13 13 8 8 8 4 4 4 4 4 4 8 8 8 11 11 11 13 13 13 ++10 10 10 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 4 4 4 8 8 8 11 11 11 13 13 13 10 10 10 4 4 4 0 0 0 ++0 0 0 10 10 10 17 17 17 20 20 20 16 16 16 10 10 10 6 6 6 4 4 4 ++6 6 6 13 13 13 19 19 19 23 23 23 21 21 21 17 17 17 11 11 11 6 6 6 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 4 4 4 6 6 6 8 8 8 8 8 8 10 10 10 ++20 20 20 59 59 59 17 17 17 10 10 10 8 8 8 6 6 6 6 6 6 13 13 13 ++27 27 27 48 48 48 36 36 36 11 11 11 19 19 19 20 20 20 16 16 16 28 28 28 ++29 29 29 65 65 65 58 58 58 42 42 42 36 36 36 23 23 23 23 23 23 33 33 33 ++53 53 53 62 62 62 66 66 66 65 65 65 50 50 50 40 40 40 46 46 46 39 39 39 ++56 56 56 89 89 89 72 72 72 58 58 58 80 80 80 63 63 63 40 40 40 69 69 69 ++67 67 67 91 91 91 99 99 99 83 83 83 76 76 76 87 87 87 84 84 84 69 69 69 ++78 78 78 105 105 105 115 116 115 95 95 94 88 88 88 103 103 102 105 105 105 93 93 93 ++96 96 96 109 110 110 121 121 119 109 110 110 96 97 98 105 105 105 117 117 117 115 116 115 ++112 112 113 121 121 119 129 129 130 128 128 128 115 116 115 115 116 115 127 127 127 134 134 134 ++131 131 131 137 137 137 137 137 137 137 137 137 140 140 140 137 138 139 133 133 133 133 133 133 ++142 143 144 149 149 149 155 156 156 149 151 153 144 145 144 144 145 144 149 151 153 157 157 157 ++149 149 149 149 151 153 158 159 161 163 163 163 158 159 161 157 157 157 160 161 160 161 161 162 ++158 159 161 152 153 154 152 153 154 152 153 154 122 121 126 128 128 128 115 116 115 144 145 144 ++83 83 83 238 240 244 231 224 220 231 224 220 255 255 255 246 251 251 255 255 255 252 251 251 ++252 251 251 255 255 255 255 255 255 252 251 251 255 255 255 255 255 255 255 255 255 255 255 255 ++252 251 251 252 251 251 187 210 182 83 172 115 83 172 72 83 172 72 83 172 115 83 172 115 ++252 251 251 252 251 251 252 251 251 255 255 255 200 220 210 180 183 185 246 251 251 238 240 244 ++187 210 182 14 16 19 11 13 16 16 20 21 1 3 7 26 29 32 0 0 4 20 21 24 ++10 10 10 14 14 14 46 46 46 77 77 77 87 87 87 91 91 91 105 104 105 112 112 113 ++121 121 119 125 125 127 137 137 137 149 149 149 157 157 157 157 157 157 152 153 154 149 149 149 ++155 156 156 160 161 160 161 161 162 157 157 157 149 151 153 145 146 147 147 147 148 157 157 157 ++157 157 157 152 153 154 144 145 144 140 140 140 144 145 144 147 147 148 145 146 147 144 145 144 ++131 131 131 133 133 133 137 137 137 140 140 140 140 140 140 133 133 133 127 127 127 121 121 119 ++129 129 130 133 133 133 137 138 139 140 140 140 134 134 134 129 129 130 131 131 131 137 137 137 ++128 128 128 125 125 127 128 128 128 115 116 115 105 105 105 103 103 102 96 96 96 94 94 94 ++95 95 94 105 105 105 101 101 101 92 92 92 89 89 89 87 87 87 88 88 88 83 83 83 ++84 84 84 91 91 91 99 99 99 103 103 102 101 101 101 96 96 96 93 93 93 92 92 92 ++73 73 73 73 73 73 73 73 73 74 74 74 77 77 77 76 76 76 67 67 67 54 54 54 ++52 52 52 56 56 56 50 50 50 45 45 45 51 51 51 53 53 53 44 44 44 38 38 38 ++34 34 34 44 44 44 42 42 42 33 33 33 33 33 33 32 32 32 25 25 25 21 21 21 ++20 20 20 27 27 27 40 40 40 52 52 52 62 62 62 46 46 46 14 14 14 23 23 23 ++44 44 44 48 48 48 28 28 28 8 8 8 14 14 14 16 16 16 6 6 6 10 10 10 ++37 37 37 43 43 43 23 23 23 24 24 24 51 51 51 59 59 59 54 54 54 56 56 56 ++57 57 57 46 46 46 56 56 56 50 50 50 27 27 27 8 8 8 10 10 10 32 32 32 ++25 25 25 54 54 54 29 29 29 0 0 0 0 0 0 4 4 4 31 31 31 48 48 48 ++51 51 51 54 54 54 27 27 27 33 33 33 54 54 54 50 50 50 46 46 46 37 37 37 ++20 20 20 24 24 24 48 48 48 49 49 49 23 23 23 0 0 0 0 0 0 11 11 11 ++14 14 14 19 19 19 14 14 14 6 6 6 14 14 14 29 29 29 34 34 34 28 28 28 ++11 11 11 8 8 8 8 8 8 11 11 11 13 13 13 13 13 13 13 13 13 14 14 14 ++34 34 34 11 11 11 10 10 10 20 20 20 13 13 13 14 14 14 29 29 29 37 37 37 ++24 24 24 14 14 14 13 13 13 16 16 16 10 10 10 6 6 6 11 11 11 17 17 17 ++43 43 43 43 43 43 40 40 40 48 48 48 56 56 56 48 48 48 44 44 44 59 59 59 ++32 32 32 40 40 40 38 38 38 40 40 40 39 39 39 38 38 38 48 48 48 45 45 45 ++53 53 53 4 4 4 19 19 19 43 43 43 28 28 28 23 23 23 27 27 27 13 13 13 ++3 3 3 4 4 4 0 0 0 0 0 0 27 27 27 29 29 29 8 8 8 40 40 40 ++34 34 34 25 25 25 37 37 37 48 48 48 46 46 46 54 54 54 58 58 58 44 44 44 ++ ++0 0 0 0 0 0 0 0 0 14 14 14 24 24 24 19 19 19 4 4 4 0 0 0 ++0 0 0 0 0 0 10 10 10 19 19 19 19 19 19 19 19 19 20 20 20 19 19 19 ++19 19 19 14 14 14 13 13 13 14 14 14 19 19 19 20 20 20 19 19 19 14 14 14 ++13 13 13 17 17 17 20 20 20 16 16 16 6 6 6 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 ++17 17 17 17 17 17 14 14 14 6 6 6 0 0 0 0 0 0 0 0 0 6 6 6 ++11 11 11 14 14 14 13 13 13 6 6 6 0 0 0 0 0 0 3 3 3 11 11 11 ++14 14 14 11 11 11 8 8 8 4 4 4 4 4 4 6 6 6 8 8 8 10 10 10 ++10 10 10 11 11 11 11 11 11 10 10 10 6 6 6 3 3 3 0 0 0 0 0 0 ++10 10 10 13 13 13 16 16 16 14 14 14 8 8 8 0 0 0 0 0 0 0 0 0 ++6 6 6 13 13 13 20 20 20 23 23 23 19 19 19 11 11 11 4 4 4 0 0 0 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 6 6 6 8 8 8 10 10 10 10 10 10 11 11 11 11 11 11 ++19 19 19 23 23 23 59 59 59 19 19 19 19 19 19 14 14 14 11 11 11 16 16 16 ++16 16 16 36 36 36 51 51 51 42 42 42 21 21 21 17 17 17 24 24 24 24 24 24 ++27 27 27 58 58 58 69 69 69 52 52 52 25 25 25 23 23 23 37 37 37 32 32 32 ++29 29 29 52 52 52 77 77 77 78 78 78 44 44 44 27 27 27 45 45 45 42 42 42 ++45 45 45 49 49 49 82 82 82 95 95 94 66 66 66 49 49 49 58 58 58 59 59 59 ++54 54 54 70 70 70 90 90 90 101 101 101 92 92 92 75 75 75 70 70 70 74 74 74 ++72 72 72 88 88 88 103 103 102 109 110 110 105 105 105 101 101 101 95 95 94 90 90 90 ++89 89 89 99 99 99 117 117 117 121 121 119 112 112 113 112 112 113 117 117 117 109 110 110 ++105 105 105 115 116 115 128 128 128 133 133 133 125 125 127 125 125 127 133 133 133 137 137 137 ++125 122 126 128 128 128 137 137 137 145 146 147 147 147 148 134 134 134 129 129 130 139 139 139 ++149 151 153 147 147 148 145 146 147 149 149 149 155 156 156 155 156 156 152 153 154 149 149 149 ++144 145 144 149 151 153 161 161 162 166 167 167 161 161 162 161 161 162 161 161 162 157 157 157 ++157 157 157 152 153 154 142 143 144 149 149 149 131 131 131 129 129 130 128 128 128 96 96 96 ++94 94 94 131 131 131 73 73 73 180 183 185 231 224 220 180 183 185 255 255 255 255 255 255 ++255 255 255 252 251 251 252 251 251 255 255 255 246 251 251 255 255 255 255 255 255 252 251 251 ++246 251 251 252 251 251 252 251 251 187 210 182 83 172 115 83 172 72 83 172 72 83 172 72 ++252 251 251 248 249 239 255 255 255 231 224 220 200 220 210 238 240 244 246 251 251 246 251 251 ++246 251 251 117 117 117 11 13 16 6 8 11 10 11 14 6 8 11 14 16 19 6 8 11 ++4 4 4 33 33 33 65 65 65 84 84 84 89 89 89 94 94 94 109 110 110 121 121 119 ++129 129 130 131 131 131 137 137 137 147 147 148 157 157 157 166 165 167 161 161 162 155 156 156 ++152 153 154 155 156 156 163 163 163 166 167 167 158 159 161 149 151 153 152 153 154 160 161 160 ++157 157 157 155 156 156 149 149 149 144 145 144 140 140 140 140 140 140 144 145 144 152 153 154 ++137 138 139 134 134 134 133 133 133 134 134 134 142 143 144 142 143 144 133 133 133 121 121 119 ++121 121 119 125 125 127 129 129 130 137 137 137 134 134 134 131 131 131 128 128 128 128 128 128 ++133 133 133 129 129 130 127 127 127 121 121 119 127 127 127 129 129 130 121 121 119 121 121 119 ++109 110 110 112 112 113 112 112 113 117 117 117 109 110 110 103 103 102 109 110 110 103 103 102 ++96 97 98 93 93 93 91 91 91 94 94 94 96 96 96 89 89 89 71 71 71 54 54 54 ++61 61 61 61 61 61 60 60 60 58 58 58 58 58 58 58 58 58 54 54 54 51 51 51 ++56 56 56 53 53 53 49 49 49 50 50 50 56 56 56 52 52 52 43 43 43 39 39 39 ++39 39 39 38 38 38 32 32 32 31 31 31 34 34 34 33 33 33 29 29 29 32 32 32 ++28 28 28 43 43 43 42 42 42 42 42 42 63 63 63 58 58 58 21 21 21 10 10 10 ++23 23 23 51 51 51 44 44 44 20 20 20 14 14 14 3 3 3 3 3 3 31 31 31 ++49 49 49 24 24 24 13 13 13 36 36 36 56 56 56 45 45 45 32 32 32 50 50 50 ++59 59 59 33 33 33 44 44 44 52 52 52 43 43 43 38 38 38 32 32 32 29 29 29 ++0 0 0 29 29 29 46 46 46 38 38 38 6 6 6 0 0 0 10 10 10 19 19 19 ++46 46 46 63 63 63 43 43 43 42 42 42 56 56 56 45 45 45 42 42 42 48 48 48 ++44 44 44 17 17 17 32 32 32 56 56 56 51 51 51 24 24 24 0 0 0 4 4 4 ++10 10 10 14 14 14 11 11 11 10 10 10 24 24 24 39 39 39 32 32 32 13 13 13 ++6 6 6 11 11 11 14 14 14 14 14 14 14 14 14 16 16 16 20 20 20 23 23 23 ++24 24 24 10 10 10 8 8 8 13 13 13 19 19 19 33 33 33 38 38 38 23 23 23 ++8 8 8 14 14 14 14 14 14 10 10 10 8 8 8 10 10 10 19 19 19 31 31 31 ++45 45 45 39 39 39 40 40 40 48 48 48 48 48 48 38 38 38 36 36 36 40 40 40 ++50 50 50 48 48 48 42 42 42 49 49 49 53 53 53 51 51 51 52 52 52 49 49 49 ++53 53 53 16 16 16 10 10 10 43 43 43 40 40 40 16 16 16 3 3 3 0 0 0 ++0 0 0 3 3 3 8 8 8 11 11 11 38 38 38 42 42 42 24 24 24 46 46 46 ++54 54 54 51 51 51 44 44 44 32 32 32 34 34 34 50 50 50 44 44 44 16 16 16 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 23 23 23 20 20 20 6 6 6 ++0 0 0 4 4 4 13 13 13 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 ++19 19 19 14 14 14 13 13 13 14 14 14 20 20 20 21 21 21 17 17 17 13 13 13 ++16 16 16 17 17 17 19 19 19 13 13 13 4 4 4 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++14 14 14 19 19 19 20 20 20 14 14 14 4 4 4 0 0 0 0 0 0 4 4 4 ++6 6 6 13 13 13 16 16 16 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 ++6 6 6 8 8 8 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++8 8 8 8 8 8 4 4 4 0 0 0 0 0 0 0 0 0 6 6 6 13 13 13 ++19 19 19 17 17 17 14 14 14 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 ++10 10 10 16 16 16 20 20 20 20 20 20 14 14 14 8 8 8 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 ++3 3 3 3 3 3 4 4 4 4 4 4 6 6 6 8 8 8 8 8 8 8 8 8 ++3 3 3 11 11 11 16 16 16 57 57 57 21 21 21 16 16 16 8 8 8 8 8 8 ++16 16 16 4 4 4 34 34 34 58 58 58 38 38 38 14 14 14 19 19 19 23 23 23 ++48 48 48 33 33 33 44 44 44 58 58 58 44 44 44 33 33 33 34 34 34 24 24 24 ++37 37 37 51 51 51 59 59 59 71 71 71 67 67 67 44 44 44 39 39 39 45 45 45 ++40 40 40 58 58 58 70 70 70 78 78 78 81 81 81 65 65 65 51 51 51 59 59 59 ++60 60 60 57 57 57 73 73 73 99 99 99 101 101 101 80 80 80 70 70 70 77 77 77 ++83 83 83 72 72 72 85 85 85 112 112 113 121 121 119 101 101 101 87 87 87 92 92 92 ++93 93 93 94 94 94 101 101 101 117 117 117 129 129 130 125 125 127 112 112 113 105 104 105 ++109 110 110 115 116 115 115 116 115 125 122 126 140 140 140 140 140 140 129 129 130 128 128 128 ++125 122 126 129 129 130 137 138 139 144 145 144 147 147 148 140 140 140 139 139 139 147 147 148 ++149 149 149 142 143 144 140 140 140 149 151 153 161 161 162 161 161 162 152 153 154 144 145 144 ++152 153 154 157 157 157 166 165 167 166 167 167 163 163 163 166 165 167 166 165 167 157 157 157 ++152 153 154 144 145 144 142 143 144 137 137 137 137 137 137 129 129 130 115 116 115 101 101 101 ++83 83 83 87 87 87 74 74 74 96 96 96 78 78 78 101 101 101 200 220 210 157 157 157 ++255 255 255 252 251 251 252 251 251 255 255 255 255 255 255 252 251 251 255 255 255 255 255 255 ++238 240 244 255 255 255 254 249 251 252 251 251 187 210 182 83 172 115 83 172 72 83 172 72 ++200 220 210 246 251 251 255 255 255 246 251 251 180 183 185 238 240 244 238 240 244 238 240 244 ++238 240 244 231 224 220 42 43 45 10 11 14 16 20 21 8 10 13 14 16 19 10 11 14 ++10 10 10 49 49 49 77 77 77 87 87 87 93 93 93 101 101 101 112 112 113 127 127 127 ++139 139 139 142 143 144 144 145 144 145 146 147 155 156 156 163 163 163 166 167 167 163 163 163 ++157 157 157 152 153 154 160 161 160 166 167 167 161 161 162 161 161 162 163 163 163 160 161 160 ++155 156 156 155 156 156 155 156 156 152 153 154 144 145 144 137 137 137 140 140 140 145 146 147 ++149 149 149 142 143 144 131 131 131 125 125 127 129 129 130 137 137 137 134 134 134 129 129 130 ++121 121 119 121 121 119 125 125 127 131 131 131 137 138 139 140 140 140 137 137 137 134 134 134 ++131 131 131 127 127 127 121 121 119 112 112 113 112 112 113 112 112 113 103 103 102 93 93 93 ++101 101 101 96 97 98 96 97 98 105 105 105 99 99 99 83 83 83 82 82 82 78 78 78 ++74 74 74 73 73 73 76 76 76 87 87 87 96 97 98 94 94 94 76 76 76 60 60 60 ++66 66 66 65 65 65 61 61 61 59 59 59 58 58 58 57 57 57 57 57 57 54 54 54 ++45 45 45 51 51 51 57 57 57 59 59 59 54 54 54 45 45 45 38 38 38 39 39 39 ++44 44 44 43 43 43 40 40 40 39 39 39 39 39 39 34 34 34 31 31 31 32 32 32 ++40 40 40 44 44 44 29 29 29 25 25 25 51 51 51 60 60 60 34 34 34 10 10 10 ++6 6 6 24 24 24 45 45 45 44 44 44 19 19 19 3 3 3 25 25 25 50 50 50 ++21 21 21 8 8 8 39 39 39 58 58 58 52 52 52 40 40 40 39 39 39 61 61 61 ++43 43 43 29 29 29 25 25 25 34 34 34 32 32 32 40 40 40 39 39 39 0 0 0 ++0 0 0 0 0 0 29 29 29 46 46 46 25 25 25 3 3 3 0 0 0 3 3 3 ++23 23 23 51 51 51 46 46 46 44 44 44 49 49 49 39 39 39 44 44 44 57 57 57 ++49 49 49 28 28 28 28 28 28 43 43 43 56 56 56 48 48 48 20 20 20 13 13 13 ++14 14 14 10 10 10 14 14 14 27 27 27 34 34 34 28 28 28 17 17 17 10 10 10 ++17 17 17 17 17 17 16 16 16 11 11 11 11 11 11 17 17 17 23 23 23 24 24 24 ++13 13 13 19 19 19 10 10 10 11 11 11 34 34 34 40 40 40 24 24 24 11 11 11 ++10 10 10 19 19 19 13 13 13 4 4 4 16 16 16 25 25 25 32 32 32 40 40 40 ++33 33 33 34 34 34 50 50 50 58 58 58 51 51 51 44 44 44 49 49 49 51 51 51 ++43 43 43 42 42 42 44 44 44 54 54 54 56 56 56 48 48 48 48 48 48 51 51 51 ++59 59 59 50 50 50 34 34 34 46 46 46 51 51 51 38 38 38 40 40 40 39 39 39 ++44 44 44 42 42 42 43 43 43 46 46 46 60 60 60 53 53 53 36 36 36 51 51 51 ++23 23 23 42 42 42 31 31 31 21 21 21 48 48 48 62 62 62 54 54 54 51 51 51 ++ ++0 0 0 8 8 8 8 8 8 0 0 0 3 3 3 16 16 16 24 24 24 24 24 24 ++6 6 6 13 13 13 17 17 17 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 ++17 17 17 14 14 14 13 13 13 16 16 16 20 20 20 20 20 20 17 17 17 14 14 14 ++17 17 17 19 19 19 17 17 17 11 11 11 4 4 4 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 ++8 8 8 14 14 14 20 20 20 19 19 19 10 10 10 0 0 0 0 0 0 0 0 0 ++3 3 3 10 10 10 16 16 16 17 17 17 13 13 13 8 8 8 3 3 3 0 0 0 ++0 0 0 0 0 0 3 3 3 4 4 4 6 6 6 4 4 4 4 4 4 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 8 17 17 17 24 24 24 ++19 19 19 16 16 16 10 10 10 3 3 3 0 0 0 3 3 3 10 10 10 14 14 14 ++19 19 19 21 21 21 23 23 23 19 19 19 11 11 11 4 4 4 4 4 4 6 6 6 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 ++10 10 10 10 10 10 16 16 16 21 21 21 58 58 58 19 19 19 16 16 16 8 8 8 ++13 13 13 13 13 13 14 14 14 37 37 37 58 58 58 42 42 42 24 24 24 39 39 39 ++44 44 44 33 33 33 24 24 24 44 44 44 69 69 69 57 57 57 29 29 29 34 34 34 ++58 58 58 51 51 51 32 32 32 51 51 51 78 78 78 69 69 69 49 49 49 40 40 40 ++54 54 54 76 76 76 58 58 58 52 52 52 87 87 87 84 84 84 57 57 57 62 62 62 ++65 65 65 76 76 76 82 82 82 82 82 82 91 91 91 101 101 101 90 90 90 69 69 69 ++75 75 75 85 85 85 94 94 94 103 103 102 112 112 113 115 116 115 105 105 105 91 91 91 ++94 94 94 96 96 96 101 101 101 112 112 113 127 127 127 128 128 128 117 117 117 109 110 110 ++112 112 113 112 112 113 112 112 113 121 121 119 142 143 144 144 145 144 133 133 133 127 127 127 ++128 128 128 137 137 137 134 134 134 133 133 133 140 140 140 149 149 149 149 151 153 152 153 154 ++140 140 140 137 137 137 140 140 140 149 151 153 158 159 161 158 159 161 155 156 156 152 153 154 ++157 157 157 158 159 161 163 163 163 163 163 163 161 161 162 166 165 167 166 167 167 161 161 162 ++152 153 154 137 137 137 149 149 149 140 140 140 127 127 127 121 121 119 109 110 110 95 95 94 ++91 91 91 84 84 84 77 77 77 54 54 54 58 58 58 63 63 63 78 78 78 52 52 52 ++231 224 220 128 128 128 200 220 210 238 240 244 246 251 251 255 255 255 255 255 255 255 255 255 ++255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 220 210 141 180 99 83 172 72 ++169 175 167 252 251 251 238 240 244 180 183 185 231 224 220 238 240 244 238 240 244 246 251 251 ++238 240 244 252 251 251 152 153 154 6 8 11 26 29 32 14 16 19 6 8 11 14 16 19 ++25 25 25 60 60 60 82 82 82 89 89 89 99 99 99 109 110 110 115 116 115 128 128 128 ++140 140 140 147 147 148 152 153 154 152 153 154 152 153 154 157 157 157 166 165 167 166 167 167 ++166 167 167 157 157 157 155 156 156 155 156 156 157 157 157 166 165 167 163 163 163 149 151 153 ++149 149 149 149 149 149 155 156 156 157 157 157 152 153 154 142 143 144 137 137 137 137 138 139 ++149 149 149 147 147 148 140 140 140 129 129 130 128 128 128 134 134 134 142 143 144 144 145 144 ++128 128 128 122 121 126 121 121 119 121 121 119 129 129 130 137 137 137 134 134 134 129 129 130 ++133 133 133 127 127 127 127 127 127 125 125 127 115 116 115 112 112 113 109 110 110 93 93 93 ++90 90 90 91 91 91 89 89 89 101 101 101 101 101 101 85 85 85 78 78 78 81 81 81 ++71 71 71 73 73 73 78 78 78 85 85 85 88 88 88 85 85 85 75 75 75 67 67 67 ++69 69 69 66 66 66 62 62 62 61 61 61 61 61 61 60 60 60 57 57 57 54 54 54 ++49 49 49 54 54 54 58 58 58 52 52 52 42 42 42 37 37 37 40 40 40 43 43 43 ++37 37 37 38 38 38 39 39 39 34 34 34 31 31 31 33 33 33 39 39 39 42 42 42 ++43 43 43 36 36 36 23 23 23 21 21 21 34 34 34 45 45 45 38 38 38 16 16 16 ++13 13 13 4 4 4 29 29 29 45 45 45 36 36 36 34 34 34 45 45 45 42 42 42 ++4 4 4 36 36 36 58 58 58 39 39 39 33 33 33 49 49 49 45 45 45 42 42 42 ++58 58 58 51 51 51 25 25 25 39 39 39 36 36 36 31 31 31 54 54 54 28 28 28 ++6 6 6 0 0 0 0 0 0 20 20 20 48 48 48 34 34 34 0 0 0 0 0 0 ++0 0 0 38 38 38 48 48 48 40 40 40 43 43 43 51 51 51 52 52 52 39 39 39 ++51 51 51 56 56 56 53 53 53 48 48 48 56 56 56 46 46 46 17 17 17 17 17 17 ++13 13 13 13 13 13 25 25 25 37 37 37 32 32 32 14 14 14 8 8 8 16 16 16 ++17 17 17 13 13 13 8 8 8 8 8 8 13 13 13 17 17 17 17 17 17 14 14 14 ++13 13 13 11 11 11 14 14 14 34 34 34 43 43 43 21 21 21 3 3 3 19 19 19 ++11 11 11 19 19 19 10 10 10 8 8 8 28 28 28 38 38 38 36 36 36 34 34 34 ++17 17 17 13 13 13 27 27 27 40 40 40 43 43 43 48 48 48 51 51 51 45 45 45 ++40 40 40 38 38 38 43 43 43 46 46 46 38 38 38 19 19 19 8 8 8 14 14 14 ++39 39 39 50 50 50 42 42 42 45 45 45 49 49 49 36 36 36 31 31 31 25 25 25 ++21 21 21 10 10 10 11 11 11 24 24 24 37 37 37 32 32 32 29 29 29 51 51 51 ++39 39 39 54 54 54 49 49 49 42 42 42 50 50 50 42 42 42 28 28 28 37 37 37 ++ ++4 4 4 0 0 0 0 0 0 8 8 8 3 3 3 0 0 0 6 6 6 27 27 27 ++16 16 16 23 23 23 21 21 21 17 17 17 20 20 20 20 20 20 17 17 17 19 19 19 ++14 14 14 14 14 14 16 16 16 17 17 17 19 19 19 19 19 19 17 17 17 14 14 14 ++19 19 19 19 19 19 16 16 16 10 10 10 4 4 4 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 10 10 10 17 17 17 19 19 19 11 11 11 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 6 6 6 14 14 14 19 19 19 17 17 17 11 11 11 4 4 4 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 6 6 6 11 11 11 13 13 13 13 13 13 14 14 14 14 14 14 ++6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 13 13 13 19 19 19 ++21 21 21 20 20 20 17 17 17 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 ++14 14 14 8 8 8 11 11 11 14 14 14 16 16 16 59 59 59 24 24 24 21 21 21 ++14 14 14 19 19 19 11 11 11 13 13 13 39 39 39 60 60 60 57 57 57 42 42 42 ++25 25 25 24 24 24 23 23 23 23 23 23 44 44 44 65 65 65 60 60 60 56 56 56 ++45 45 45 38 38 38 29 29 29 40 40 40 56 56 56 66 66 66 69 69 69 54 54 54 ++70 70 70 48 48 48 51 51 51 58 58 58 56 56 56 82 82 82 92 92 92 62 62 62 ++71 71 71 84 84 84 81 81 81 66 66 66 74 74 74 99 99 99 103 103 102 84 84 84 ++75 75 75 96 96 96 101 101 101 87 87 87 91 91 91 115 116 115 121 121 119 105 104 105 ++93 93 93 101 101 101 115 116 115 115 116 115 105 105 105 121 121 119 131 131 131 121 121 119 ++115 116 115 112 112 113 122 121 126 131 131 131 128 128 128 134 134 134 140 140 140 134 134 134 ++134 134 134 139 139 139 133 133 133 127 127 127 137 137 137 149 151 153 152 153 154 152 153 154 ++140 140 140 144 145 144 149 149 149 149 149 149 149 149 149 149 149 149 157 157 157 166 165 167 ++158 159 161 157 157 157 160 161 160 161 161 162 160 161 160 163 163 163 166 167 167 161 161 162 ++147 147 148 147 147 148 144 145 144 137 137 137 125 122 126 117 117 117 115 116 115 99 99 99 ++89 89 89 78 78 78 76 76 76 65 65 65 67 67 67 56 56 56 46 46 46 56 56 56 ++62 62 62 46 46 46 127 127 127 78 78 78 180 183 185 252 251 251 231 224 220 255 255 255 ++254 249 251 255 255 255 246 251 251 255 255 255 254 249 251 248 249 239 200 220 210 83 172 115 ++152 153 154 246 251 251 255 255 255 231 246 232 180 183 185 246 251 251 246 251 251 231 246 232 ++246 251 251 238 240 244 238 240 244 78 79 82 0 0 4 8 10 13 14 16 19 1 3 7 ++48 48 48 69 69 69 84 84 84 93 93 93 105 105 105 115 116 115 121 121 119 129 129 130 ++139 139 139 149 151 153 161 161 162 163 163 163 157 157 157 157 157 157 161 161 162 166 167 167 ++166 167 167 163 163 163 155 156 156 152 153 154 158 159 161 166 167 167 166 167 167 155 156 156 ++147 147 148 147 147 148 149 149 149 155 156 156 157 157 157 149 151 153 142 143 144 137 137 137 ++139 139 139 144 145 144 149 149 149 145 146 147 142 143 144 140 140 140 144 145 144 147 147 148 ++147 147 148 142 143 144 134 134 134 129 129 130 133 133 133 137 137 137 137 137 137 134 134 134 ++133 133 133 128 128 128 129 129 130 131 131 131 121 121 119 117 117 117 121 121 119 103 103 102 ++96 96 96 99 99 99 94 94 94 105 104 105 112 112 113 103 103 102 96 96 96 96 96 96 ++103 103 102 103 103 102 99 99 99 91 91 91 81 81 81 71 71 71 66 66 66 63 63 63 ++66 66 66 61 61 61 59 59 59 59 59 59 59 59 59 57 57 57 54 54 54 54 54 54 ++63 63 63 59 59 59 54 54 54 48 48 48 42 42 42 43 43 43 45 45 45 42 42 42 ++37 37 37 37 37 37 39 39 39 36 36 36 29 29 29 36 36 36 46 46 46 51 51 51 ++34 34 34 31 31 31 29 29 29 31 31 31 23 23 23 24 24 24 32 32 32 19 19 19 ++20 20 20 10 10 10 4 4 4 20 20 20 48 48 48 60 60 60 43 43 43 13 13 13 ++32 32 32 52 52 52 43 43 43 20 20 20 37 37 37 50 50 50 25 25 25 0 0 0 ++52 52 52 48 48 48 19 19 19 44 44 44 38 38 38 0 0 0 33 33 33 45 45 45 ++25 25 25 14 14 14 0 0 0 3 3 3 33 33 33 44 44 44 28 28 28 0 0 0 ++0 0 0 19 19 19 39 39 39 50 50 50 52 52 52 52 52 52 51 51 51 49 49 49 ++56 56 56 56 56 56 51 51 51 45 45 45 48 48 48 32 32 32 3 3 3 13 13 13 ++8 8 8 25 25 25 37 37 37 32 32 32 19 19 19 13 13 13 14 14 14 17 17 17 ++14 14 14 10 10 10 11 11 11 23 23 23 28 28 28 24 24 24 16 16 16 10 10 10 ++8 8 8 11 11 11 33 33 33 43 43 43 24 24 24 6 6 6 13 13 13 17 17 17 ++6 6 6 13 13 13 14 14 14 20 20 20 34 34 34 38 38 38 29 29 29 17 17 17 ++25 25 25 19 19 19 23 23 23 29 29 29 32 32 32 42 42 42 46 46 46 38 38 38 ++42 42 42 37 37 37 44 44 44 49 49 49 45 45 45 36 36 36 24 24 24 29 29 29 ++42 42 42 44 44 44 40 40 40 46 46 46 45 45 45 27 27 27 10 10 10 0 0 0 ++10 10 10 3 3 3 8 8 8 23 23 23 28 28 28 20 20 20 20 20 20 36 36 36 ++38 38 38 32 32 32 36 36 36 37 37 37 25 25 25 21 21 21 28 28 28 33 33 33 ++ ++21 21 21 3 3 3 0 0 0 6 6 6 4 4 4 0 0 0 0 0 0 16 16 16 ++25 25 25 31 31 31 24 24 24 16 16 16 20 20 20 20 20 20 16 16 16 16 16 16 ++13 13 13 14 14 14 19 19 19 19 19 19 19 19 19 17 17 17 16 16 16 16 16 16 ++20 20 20 19 19 19 14 14 14 10 10 10 4 4 4 3 3 3 4 4 4 6 6 6 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 10 10 10 17 17 17 19 19 19 16 16 16 11 11 11 6 6 6 4 4 4 ++0 0 0 0 0 0 0 0 0 8 8 8 14 14 14 17 17 17 16 16 16 13 13 13 ++13 13 13 10 10 10 6 6 6 3 3 3 0 0 0 3 3 3 6 6 6 8 8 8 ++13 13 13 14 14 14 17 17 17 20 20 20 20 20 20 17 17 17 13 13 13 8 8 8 ++3 3 3 3 3 3 0 0 0 3 3 3 6 6 6 10 10 10 14 14 14 16 16 16 ++19 19 19 17 17 17 14 14 14 10 10 10 4 4 4 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 6 6 6 6 6 6 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 10 10 10 ++11 11 11 8 8 8 10 10 10 13 13 13 16 16 16 21 21 21 62 62 62 23 23 23 ++21 21 21 16 16 16 20 20 20 16 16 16 17 17 17 51 51 51 66 66 66 42 42 42 ++25 25 25 16 16 16 29 29 29 20 20 20 17 17 17 56 56 56 74 74 74 66 66 66 ++39 39 39 38 38 38 42 42 42 48 48 48 42 42 42 54 54 54 80 80 80 77 77 77 ++68 68 68 51 51 51 51 51 51 58 58 58 58 58 58 72 72 72 88 88 88 85 85 85 ++87 87 87 77 77 77 70 70 70 69 69 69 74 74 74 83 83 83 96 96 96 105 105 105 ++96 97 98 96 97 98 93 93 93 87 87 87 89 89 89 101 101 101 112 112 113 121 121 119 ++105 105 105 112 112 113 121 121 119 115 116 115 105 105 105 115 116 115 128 128 128 129 129 130 ++125 122 126 121 121 119 133 133 133 134 134 134 121 121 119 127 127 127 142 143 144 144 145 144 ++144 145 144 140 140 140 133 133 133 134 134 134 144 145 144 149 149 149 149 149 149 152 153 154 ++152 153 154 155 156 156 155 156 156 149 149 149 147 147 148 149 149 149 157 157 157 163 163 163 ++163 163 163 157 157 157 160 161 160 163 163 163 163 163 163 163 163 163 163 163 163 160 161 160 ++152 153 154 160 161 160 140 140 140 128 128 128 121 121 119 117 117 117 105 104 105 99 99 99 ++92 92 92 70 70 70 67 67 67 70 70 70 50 50 50 63 63 63 71 71 71 53 53 53 ++49 49 49 66 66 66 57 57 57 54 54 54 128 128 128 105 105 105 169 175 167 255 255 255 ++200 220 210 252 251 251 252 251 251 246 251 251 254 249 251 255 255 255 246 251 251 231 246 232 ++126 132 129 246 251 251 231 224 220 187 210 182 246 251 251 238 240 244 238 240 244 246 251 251 ++238 240 244 246 251 251 246 251 251 180 183 185 14 16 19 16 20 21 11 13 16 14 16 19 ++69 69 69 76 76 76 88 88 88 101 101 101 112 112 113 121 121 119 128 128 128 137 137 137 ++144 145 144 149 151 153 161 161 162 166 167 167 166 167 167 161 161 162 160 161 160 161 161 162 ++163 163 163 166 167 167 163 163 163 163 163 163 166 165 167 166 167 167 163 163 163 166 165 167 ++155 156 156 152 153 154 147 147 148 147 147 148 152 153 154 155 156 156 149 149 149 142 143 144 ++137 137 137 142 143 144 149 149 149 149 151 153 144 145 144 134 134 134 128 128 128 128 128 128 ++134 134 134 137 137 137 134 134 134 129 129 130 125 125 127 127 127 127 129 129 130 133 133 133 ++133 133 133 131 131 131 128 128 128 128 128 128 125 125 127 125 125 127 129 129 130 117 117 117 ++117 117 117 112 112 113 105 104 105 105 105 105 109 110 110 105 105 105 105 105 105 92 92 92 ++81 81 81 82 82 82 80 80 80 75 75 75 70 70 70 68 68 68 70 70 70 72 72 72 ++68 68 68 66 66 66 63 63 63 62 62 62 60 60 60 58 58 58 62 62 62 69 69 69 ++70 70 70 52 52 52 43 43 43 44 44 44 42 42 42 39 39 39 38 38 38 33 33 33 ++32 32 32 34 34 34 50 50 50 62 62 62 57 57 57 45 45 45 38 38 38 33 33 33 ++27 27 27 33 33 33 31 31 31 32 32 32 25 25 25 19 19 19 27 27 27 20 20 20 ++19 19 19 17 17 17 6 6 6 17 17 17 49 49 49 58 58 58 39 39 39 19 19 19 ++51 51 51 37 37 37 25 25 25 38 38 38 49 49 49 45 45 45 32 32 32 10 10 10 ++45 45 45 54 54 54 38 38 38 44 44 44 45 45 45 10 10 10 4 4 4 25 25 25 ++44 44 44 32 32 32 11 11 11 0 0 0 0 0 0 23 23 23 52 52 52 31 31 31 ++37 37 37 32 32 32 36 36 36 52 52 52 57 57 57 34 34 34 25 25 25 46 46 46 ++45 45 45 28 28 28 29 29 29 34 34 34 32 32 32 21 21 21 6 6 6 14 14 14 ++20 20 20 37 37 37 39 39 39 21 21 21 8 8 8 16 16 16 19 19 19 11 11 11 ++16 16 16 11 11 11 20 20 20 34 34 34 37 37 37 25 25 25 14 14 14 14 14 14 ++13 13 13 29 29 29 40 40 40 27 27 27 3 3 3 13 13 13 23 23 23 6 6 6 ++6 6 6 14 14 14 25 25 25 32 32 32 29 29 29 27 27 27 21 21 21 13 13 13 ++16 16 16 16 16 16 19 19 19 20 20 20 24 24 24 33 33 33 36 36 36 31 31 31 ++23 23 23 14 14 14 21 21 21 21 21 21 20 20 20 20 20 20 13 13 13 23 23 23 ++40 40 40 25 25 25 23 23 23 20 20 20 17 17 17 21 21 21 20 20 20 19 19 19 ++13 13 13 21 21 21 31 31 31 37 37 37 31 31 31 21 21 21 17 17 17 17 17 17 ++21 21 21 8 8 8 13 13 13 14 14 14 6 6 6 21 21 21 33 33 33 25 25 25 ++ ++42 42 42 24 24 24 6 6 6 4 4 4 10 10 10 8 8 8 8 8 8 13 13 13 ++31 31 31 34 34 34 25 25 25 16 16 16 20 20 20 20 20 20 14 14 14 14 14 14 ++11 11 11 16 16 16 20 20 20 20 20 20 17 17 17 16 16 16 16 16 16 17 17 17 ++20 20 20 17 17 17 14 14 14 10 10 10 4 4 4 4 4 4 6 6 6 8 8 8 ++16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 ++16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 14 14 14 ++11 11 11 14 14 14 20 20 20 23 23 23 21 21 21 20 20 20 17 17 17 16 16 16 ++16 16 16 14 14 14 11 11 11 13 13 13 14 14 14 19 19 19 21 21 21 24 24 24 ++14 14 14 16 16 16 17 17 17 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++17 17 17 17 17 17 17 17 17 20 20 20 23 23 23 24 24 24 21 21 21 19 19 19 ++20 20 20 20 20 20 20 20 20 21 21 21 23 23 23 21 21 21 20 20 20 19 19 19 ++21 21 21 21 21 21 20 20 20 21 21 21 21 21 21 23 23 23 23 23 23 23 23 23 ++23 23 23 23 23 23 24 24 24 25 25 25 28 28 28 29 29 29 31 31 31 31 31 31 ++31 31 31 31 31 31 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 ++36 36 36 29 29 29 36 36 36 39 39 39 34 34 34 34 34 34 36 36 36 62 62 62 ++38 38 38 44 44 44 40 40 40 39 39 39 48 48 48 48 48 48 52 52 52 68 68 68 ++51 51 51 50 50 50 49 49 49 44 44 44 56 56 56 62 62 62 58 58 58 74 74 74 ++70 70 70 58 58 58 50 50 50 60 60 60 60 60 60 62 62 62 81 81 81 88 88 88 ++81 81 81 71 71 71 66 66 66 71 71 71 72 72 72 67 67 67 77 77 77 101 101 101 ++96 97 98 80 80 80 75 75 75 87 87 87 88 88 88 78 78 78 88 88 88 109 110 110 ++115 116 115 99 99 99 93 93 93 103 103 102 105 105 105 101 101 101 105 105 105 121 121 119 ++127 127 127 125 122 126 112 112 113 112 112 113 121 121 119 115 116 115 112 112 113 134 134 134 ++137 137 137 137 138 139 134 134 134 129 129 130 128 128 128 129 129 130 137 137 137 145 146 147 ++149 149 149 140 140 140 137 137 137 147 147 148 155 156 156 145 146 147 144 145 144 152 153 154 ++157 157 157 157 157 157 152 153 154 149 149 149 155 156 156 161 161 162 163 163 163 160 161 160 ++166 167 167 163 163 163 166 165 167 166 167 167 166 167 167 163 163 163 161 161 162 157 157 157 ++166 167 167 149 149 149 147 147 148 142 143 144 121 121 119 125 125 127 101 101 101 99 99 99 ++89 89 89 85 85 85 72 72 72 75 75 75 59 59 59 59 59 59 50 50 50 63 63 63 ++61 61 61 50 50 50 65 65 65 50 50 50 57 57 57 40 40 40 103 103 102 200 220 210 ++180 183 185 248 249 239 231 224 220 231 224 220 255 255 255 252 251 251 254 249 251 254 249 251 ++238 240 244 200 220 210 180 183 185 238 240 244 246 251 251 246 251 251 246 251 251 238 240 244 ++246 251 251 238 240 244 238 240 244 238 240 244 127 127 127 0 0 4 14 16 19 37 39 42 ++82 82 82 82 82 82 92 92 92 109 110 110 117 117 117 121 121 119 131 131 131 142 143 144 ++149 151 153 149 151 153 157 157 157 166 167 167 166 167 167 166 167 167 161 161 162 160 161 160 ++157 157 157 166 167 167 166 167 167 166 167 167 166 165 167 152 153 154 152 153 154 163 163 163 ++163 163 163 157 157 157 147 147 148 142 143 144 145 146 147 152 153 154 152 153 154 147 147 148 ++140 140 140 140 140 140 144 145 144 149 149 149 147 147 148 137 138 139 128 128 128 127 127 127 ++127 127 127 137 137 137 140 140 140 131 131 131 121 121 119 115 116 115 121 121 119 122 121 126 ++134 134 134 134 134 134 121 121 119 121 121 119 125 122 126 125 122 126 127 127 127 121 121 119 ++105 105 105 94 94 94 87 87 87 90 90 90 87 87 87 95 95 94 103 103 102 82 82 82 ++83 83 83 82 82 82 80 80 80 77 77 77 75 75 75 73 73 73 71 71 71 69 69 69 ++63 63 63 63 63 63 62 62 62 60 60 60 53 53 53 52 52 52 63 63 63 76 76 76 ++77 77 77 50 50 50 37 37 37 42 42 42 38 38 38 32 32 32 34 34 34 38 38 38 ++34 34 34 29 29 29 48 48 48 70 70 70 67 67 67 46 46 46 32 32 32 24 24 24 ++24 24 24 36 36 36 24 24 24 24 24 24 32 32 32 27 27 27 27 27 27 21 21 21 ++17 17 17 19 19 19 31 31 31 44 44 44 49 49 49 46 46 46 48 48 48 52 52 52 ++53 53 53 20 20 20 28 28 28 49 49 49 21 21 21 23 23 23 46 46 46 11 11 11 ++20 20 20 51 51 51 42 42 42 16 16 16 38 38 38 40 40 40 0 0 0 0 0 0 ++29 29 29 52 52 52 29 29 29 8 8 8 0 0 0 0 0 0 40 40 40 57 57 57 ++46 46 46 33 33 33 11 11 11 23 23 23 56 56 56 54 54 54 39 39 39 53 53 53 ++54 54 54 38 38 38 53 53 53 57 57 57 32 32 32 17 17 17 14 14 14 16 16 16 ++38 38 38 43 43 43 36 36 36 16 16 16 8 8 8 14 14 14 14 14 14 3 3 3 ++17 17 17 11 11 11 20 20 20 34 34 34 32 32 32 13 13 13 6 6 6 14 14 14 ++33 33 33 40 40 40 27 27 27 6 6 6 11 11 11 16 16 16 8 8 8 8 8 8 ++11 11 11 20 20 20 37 37 37 38 38 38 21 21 21 13 13 13 20 20 20 20 20 20 ++19 19 19 20 20 20 19 19 19 21 21 21 32 32 32 37 37 37 28 28 28 14 14 14 ++20 20 20 14 14 14 23 23 23 17 17 17 14 14 14 21 21 21 24 24 24 40 40 40 ++27 27 27 16 16 16 28 28 28 19 19 19 8 8 8 27 27 27 28 28 28 19 19 19 ++13 13 13 29 29 29 38 38 38 34 34 34 24 24 24 23 23 23 25 25 25 16 16 16 ++8 8 8 17 17 17 14 14 14 10 10 10 24 24 24 37 37 37 27 27 27 3 3 3 ++ ++33 33 33 43 43 43 43 43 43 31 31 31 24 24 24 27 27 27 27 27 27 21 21 21 ++11 11 11 29 29 29 39 39 39 32 32 32 20 20 20 17 17 17 21 21 21 24 24 24 ++25 25 25 20 20 20 14 14 14 14 14 14 20 20 20 24 24 24 23 23 23 19 19 19 ++19 19 19 21 21 21 27 27 27 29 29 29 31 31 31 29 29 29 28 28 28 27 27 27 ++29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 ++29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 ++28 28 28 27 27 27 25 25 25 23 23 23 21 21 21 20 20 20 19 19 19 17 17 17 ++27 27 27 27 27 27 28 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 29 ++24 24 24 23 23 23 23 23 23 21 21 21 20 20 20 20 20 20 19 19 19 19 19 19 ++25 25 25 27 27 27 28 28 28 29 29 29 31 31 31 29 29 29 29 29 29 28 28 28 ++31 31 31 28 28 28 24 24 24 19 19 19 17 17 17 16 16 16 16 16 16 17 17 17 ++25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 27 27 27 27 27 27 27 27 27 ++28 28 28 28 28 28 29 29 29 29 29 29 29 29 29 29 29 29 31 31 31 31 31 31 ++31 31 31 31 31 31 31 31 31 31 31 31 32 32 32 32 32 32 32 32 32 32 32 32 ++34 34 34 32 32 32 34 34 34 38 38 38 37 37 37 34 34 34 37 37 37 42 42 42 ++57 57 57 46 46 46 43 43 43 50 50 50 49 49 49 40 40 40 42 42 42 52 52 52 ++66 66 66 57 57 57 43 43 43 54 54 54 65 65 65 54 54 54 51 51 51 53 53 53 ++73 73 73 71 71 71 61 61 61 56 56 56 66 66 66 76 76 76 71 71 71 59 59 59 ++87 87 87 82 82 82 72 72 72 65 65 65 69 69 69 80 80 80 80 80 80 73 73 73 ++96 96 96 91 91 91 84 84 84 80 80 80 80 80 80 85 85 85 93 93 93 101 101 101 ++109 110 110 105 105 105 99 99 99 94 94 94 91 91 91 95 95 94 105 105 105 115 116 115 ++125 122 126 125 122 126 117 117 117 112 112 113 109 110 110 115 116 115 121 121 119 121 121 119 ++134 134 134 137 137 137 134 134 134 122 121 126 129 129 130 142 143 144 137 137 137 134 134 134 ++139 139 139 147 147 148 152 153 154 144 145 144 137 138 139 139 139 139 145 146 147 152 153 154 ++152 153 154 157 157 157 157 157 157 152 153 154 152 153 154 157 157 157 157 157 157 155 156 156 ++158 159 161 166 167 167 166 167 167 166 167 167 161 161 162 160 161 160 160 161 160 160 161 160 ++155 156 156 152 153 154 149 149 149 140 140 140 128 128 128 115 116 115 105 105 105 103 103 102 ++91 91 91 85 85 85 77 77 77 72 72 72 69 69 69 67 67 67 63 63 63 60 60 60 ++58 58 58 61 61 61 59 59 59 57 57 57 61 61 61 50 50 50 71 71 71 180 183 185 ++246 251 251 180 183 185 231 224 220 200 220 210 231 224 220 166 167 167 255 255 255 231 224 220 ++255 255 255 180 183 185 231 246 232 238 240 244 238 240 244 238 240 244 238 240 244 238 240 244 ++238 240 244 238 240 244 246 251 251 238 240 244 231 246 232 37 39 42 16 20 21 66 69 71 ++77 77 77 88 88 88 94 94 94 109 110 110 125 125 127 129 129 130 134 134 134 144 145 144 ++149 149 149 157 157 157 161 161 162 160 161 160 166 167 167 169 175 167 169 175 167 160 161 160 ++158 159 161 161 161 162 166 167 167 166 167 167 163 163 163 155 156 156 152 153 154 157 157 157 ++157 157 157 161 161 162 157 157 157 147 147 148 142 143 144 144 145 144 152 153 154 155 156 156 ++139 139 139 140 140 140 149 151 153 140 140 140 139 139 139 149 149 149 133 133 133 125 125 127 ++127 127 127 127 127 127 131 131 131 137 137 137 131 131 131 117 117 117 112 112 113 115 116 115 ++117 117 117 133 133 133 129 129 130 115 116 115 115 116 115 121 121 119 121 121 119 121 121 119 ++117 117 117 101 101 101 89 89 89 84 84 84 83 83 83 90 90 90 93 93 93 87 87 87 ++83 83 83 83 83 83 75 75 75 73 73 73 78 78 78 77 77 77 69 69 69 67 67 67 ++69 69 69 60 60 60 61 61 61 53 53 53 52 52 52 61 61 61 66 66 66 80 80 80 ++80 80 80 60 60 60 43 43 43 39 39 39 39 39 39 37 37 37 34 34 34 38 38 38 ++34 34 34 27 27 27 32 32 32 58 58 58 70 70 70 49 49 49 24 24 24 25 25 25 ++25 25 25 23 23 23 21 21 21 25 25 25 28 28 28 28 28 28 25 25 25 23 23 23 ++19 19 19 43 43 43 39 39 39 36 36 36 46 46 46 14 14 14 24 24 24 52 52 52 ++44 44 44 37 37 37 44 44 44 19 19 19 17 17 17 8 8 8 38 38 38 40 40 40 ++36 36 36 44 44 44 58 58 58 33 33 33 28 28 28 45 45 45 23 23 23 0 0 0 ++0 0 0 20 20 20 46 46 46 43 43 43 19 19 19 34 34 34 56 56 56 45 45 45 ++45 45 45 46 46 46 48 48 48 50 50 50 52 52 52 54 54 54 54 54 54 54 54 54 ++39 39 39 36 36 36 60 60 60 49 49 49 4 4 4 4 4 4 25 25 25 36 36 36 ++33 33 33 28 28 28 19 19 19 13 13 13 11 11 11 14 14 14 14 14 14 13 13 13 ++6 6 6 25 25 25 37 37 37 31 31 31 14 14 14 8 8 8 20 20 20 32 32 32 ++43 43 43 25 25 25 13 13 13 14 14 14 16 16 16 10 10 10 11 11 11 19 19 19 ++13 13 13 21 21 21 45 45 45 42 42 42 6 6 6 6 6 6 24 24 24 17 17 17 ++21 21 21 14 14 14 17 17 17 33 33 33 46 46 46 50 50 50 50 50 50 51 51 51 ++44 44 44 56 56 56 42 42 42 0 0 0 0 0 0 23 23 23 33 33 33 19 19 19 ++0 0 0 3 3 3 45 45 45 21 21 21 8 8 8 48 48 48 48 48 48 48 48 48 ++34 34 34 29 29 29 31 31 31 39 39 39 44 44 44 37 37 37 20 20 20 8 8 8 ++16 16 16 8 8 8 13 13 13 28 28 28 31 31 31 19 19 19 10 10 10 13 13 13 ++ ++19 19 19 33 33 33 43 43 43 39 39 39 28 28 28 21 21 21 20 20 20 21 21 21 ++17 17 17 19 19 19 27 27 27 36 36 36 34 34 34 24 24 24 17 17 17 19 19 19 ++20 20 20 19 19 19 17 17 17 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 ++20 20 20 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 19 19 19 19 19 19 ++20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ++20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ++20 20 20 17 17 17 16 16 16 14 14 14 14 14 14 16 16 16 19 19 19 20 20 20 ++23 23 23 21 21 21 20 20 20 17 17 17 16 16 16 14 14 14 14 14 14 14 14 14 ++19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 17 17 17 17 17 17 17 17 17 ++17 17 17 17 17 17 16 16 16 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ++21 21 21 21 21 21 21 21 21 21 21 21 20 20 20 19 19 19 17 17 17 16 16 16 ++8 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 ++8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 ++11 11 11 11 11 11 11 11 11 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 ++17 17 17 13 13 13 10 10 10 11 11 11 13 13 13 10 10 10 11 11 11 16 16 16 ++31 31 31 51 51 51 56 56 56 34 34 34 17 17 17 21 21 21 27 27 27 23 23 23 ++42 42 42 59 59 59 56 56 56 45 45 45 37 37 37 29 29 29 32 32 32 29 29 29 ++43 43 43 69 69 69 60 60 60 49 49 49 62 62 62 51 51 51 36 36 36 56 56 56 ++58 58 58 80 80 80 83 83 83 66 66 66 61 61 61 75 75 75 76 76 76 61 61 61 ++68 68 68 96 97 98 101 101 101 76 76 76 72 72 72 96 96 96 101 101 101 82 82 82 ++87 87 87 103 103 102 112 112 113 101 101 101 92 92 92 96 97 98 109 110 110 115 116 115 ++101 101 101 115 116 115 127 127 127 121 121 119 103 103 102 101 101 101 115 116 115 129 129 130 ++125 125 127 128 128 128 137 137 137 137 137 137 137 137 137 133 133 133 122 121 126 129 129 130 ++129 129 130 142 143 144 152 153 154 147 147 148 137 137 137 134 134 134 145 146 147 157 157 157 ++147 147 148 152 153 154 157 157 157 160 161 160 157 157 157 152 153 154 149 149 149 149 149 149 ++157 157 157 166 167 167 169 175 167 166 167 167 166 167 167 163 163 163 161 161 162 158 159 161 ++152 153 154 149 149 149 144 145 144 139 139 139 131 131 131 121 121 119 109 110 110 103 103 102 ++92 92 92 87 87 87 81 81 81 76 76 76 73 73 73 71 71 71 67 67 67 63 63 63 ++67 67 67 65 65 65 57 57 57 51 51 51 59 59 59 59 59 59 43 43 43 92 92 92 ++238 240 244 238 240 244 238 240 244 231 224 220 231 224 220 200 220 210 200 220 210 200 220 210 ++180 183 185 180 183 185 238 240 244 238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 ++238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 149 151 153 26 29 32 83 84 85 ++85 85 85 95 95 94 103 103 102 117 117 117 129 129 130 133 133 133 142 143 144 149 149 149 ++152 153 154 160 161 160 163 163 163 158 159 161 161 161 162 166 167 167 169 175 167 166 167 167 ++163 163 163 166 167 167 166 167 167 166 167 167 163 163 163 161 161 162 157 157 157 152 153 154 ++155 156 156 157 157 157 157 157 157 152 153 154 147 147 148 144 145 144 145 146 147 147 147 148 ++155 156 156 152 153 154 152 153 154 137 137 137 134 134 134 145 146 147 142 143 144 144 145 144 ++128 128 128 127 127 127 128 128 128 131 131 131 129 129 130 121 121 119 115 116 115 115 116 115 ++115 116 115 127 127 127 131 131 131 125 125 127 115 116 115 115 116 115 115 116 115 112 112 113 ++121 121 119 105 105 105 94 94 94 87 87 87 87 87 87 88 88 88 88 88 88 83 83 83 ++80 80 80 83 83 83 80 80 80 76 76 76 75 75 75 70 70 70 70 70 70 80 80 80 ++78 78 78 60 60 60 54 54 54 56 56 56 61 61 61 65 65 65 60 60 60 68 68 68 ++84 84 84 65 65 65 46 46 46 42 42 42 42 42 42 37 37 37 33 33 33 33 33 33 ++32 32 32 34 34 34 42 42 42 60 60 60 71 71 71 56 56 56 32 32 32 23 23 23 ++23 23 23 21 21 21 20 20 20 19 19 19 19 19 19 20 20 20 23 23 23 25 25 25 ++36 36 36 36 36 36 24 24 24 19 19 19 32 32 32 24 24 24 39 39 39 45 45 45 ++48 48 48 45 45 45 49 49 49 11 11 11 0 0 0 0 0 0 37 37 37 42 42 42 ++34 34 34 25 25 25 52 52 52 43 43 43 21 21 21 38 38 38 33 33 33 11 11 11 ++11 11 11 23 23 23 46 46 46 53 53 53 45 45 45 51 51 51 52 52 52 32 32 32 ++36 36 36 46 46 46 54 54 54 51 51 51 42 42 42 38 38 38 46 46 46 56 56 56 ++31 31 31 20 20 20 34 34 34 27 27 27 8 8 8 23 23 23 33 33 33 33 33 33 ++20 20 20 17 17 17 13 13 13 13 13 13 14 14 14 16 16 16 16 16 16 14 14 14 ++11 11 11 32 32 32 37 37 37 20 20 20 8 8 8 19 19 19 33 33 33 37 37 37 ++24 24 24 16 16 16 10 10 10 11 11 11 10 10 10 10 10 10 16 16 16 24 24 24 ++49 49 49 44 44 44 54 54 54 52 52 52 27 27 27 19 19 19 27 27 27 20 20 20 ++14 14 14 24 24 24 36 36 36 40 40 40 44 44 44 48 48 48 52 52 52 54 54 54 ++53 53 53 53 53 53 40 40 40 21 21 21 20 20 20 31 31 31 24 24 24 4 4 4 ++10 10 10 11 11 11 40 40 40 23 23 23 6 6 6 36 36 36 42 42 42 45 45 45 ++42 42 42 45 45 45 48 48 48 43 43 43 28 28 28 11 11 11 10 10 10 17 17 17 ++8 8 8 19 19 19 28 28 28 29 29 29 21 21 21 11 11 11 10 10 10 11 11 11 ++ ++0 0 0 3 3 3 17 17 17 28 28 28 28 28 28 21 21 21 17 17 17 17 17 17 ++21 21 21 14 14 14 16 16 16 31 31 31 38 38 38 32 32 32 21 21 21 14 14 14 ++17 17 17 16 16 16 19 19 19 23 23 23 20 20 20 16 16 16 16 16 16 23 23 23 ++20 20 20 14 14 14 6 6 6 3 3 3 4 4 4 6 6 6 6 6 6 6 6 6 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++8 8 8 4 4 4 3 3 3 0 0 0 4 4 4 11 11 11 17 17 17 21 21 21 ++21 21 21 19 19 19 14 14 14 10 10 10 6 6 6 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 11 11 11 14 14 14 ++16 16 16 17 17 17 21 21 21 23 23 23 21 21 21 17 17 17 13 13 13 8 8 8 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 ++16 16 16 11 11 11 8 8 8 10 10 10 10 10 10 8 8 8 8 8 8 10 10 10 ++16 16 16 44 44 44 53 53 53 36 36 36 16 16 16 19 19 19 24 24 24 21 21 21 ++14 14 14 52 52 52 61 61 61 51 51 51 37 37 37 27 27 27 29 29 29 27 27 27 ++27 27 27 50 50 50 68 68 68 72 72 72 61 61 61 40 40 40 34 34 34 44 44 44 ++42 42 42 60 60 60 78 78 78 85 85 85 77 77 77 67 67 67 59 59 59 57 57 57 ++54 54 54 78 78 78 95 95 94 93 93 93 91 91 91 93 93 93 87 87 87 73 73 73 ++75 75 75 92 92 92 105 105 105 109 110 110 109 110 110 109 110 110 105 105 105 96 97 98 ++94 94 94 109 110 110 125 125 127 129 129 130 121 121 119 115 116 115 117 117 117 127 127 127 ++115 116 115 117 117 117 133 133 133 144 145 144 144 145 144 131 131 131 121 121 119 133 133 133 ++137 137 137 139 139 139 144 145 144 149 151 153 152 153 154 149 151 153 149 149 149 149 149 149 ++142 143 144 144 145 144 155 156 156 163 163 163 163 163 163 155 156 156 152 153 154 155 156 156 ++158 159 161 166 167 167 169 175 167 169 175 167 166 167 167 166 167 167 161 161 162 155 156 156 ++152 153 154 147 147 148 142 143 144 140 140 140 137 137 137 128 128 128 117 117 117 105 105 105 ++99 99 99 94 94 94 89 89 89 85 85 85 83 83 83 80 80 80 75 75 75 71 71 71 ++70 70 70 70 70 70 67 67 67 61 61 61 60 60 60 70 70 70 56 56 56 51 51 51 ++139 140 142 252 251 251 238 240 244 238 240 244 238 240 244 255 255 255 238 240 244 246 251 251 ++200 220 210 231 224 220 231 246 232 252 251 251 231 246 232 255 255 255 231 246 232 238 240 244 ++238 240 244 246 251 251 238 240 244 238 240 244 246 251 251 238 240 244 96 98 100 75 78 80 ++87 87 87 99 99 99 105 105 105 121 121 119 133 133 133 139 139 139 149 151 153 155 156 156 ++157 157 157 161 161 162 166 167 167 163 163 163 161 161 162 163 163 163 166 167 167 169 175 167 ++166 167 167 166 167 167 166 167 167 158 159 161 161 161 162 166 167 167 163 163 163 152 153 154 ++152 153 154 152 153 154 155 156 156 157 157 157 152 153 154 145 146 147 142 143 144 142 143 144 ++155 156 156 149 149 149 149 149 149 137 137 137 133 133 133 140 140 140 137 138 139 144 145 144 ++131 131 131 127 127 127 122 121 126 125 125 127 128 128 128 127 127 127 121 121 119 115 116 115 ++109 110 110 115 116 115 128 128 128 133 133 133 121 121 119 112 112 113 115 116 115 109 110 110 ++115 116 115 109 110 110 96 97 98 90 90 90 90 90 90 89 89 89 85 85 85 84 84 84 ++77 77 77 78 78 78 78 78 78 76 76 76 74 74 74 70 70 70 75 75 75 88 88 88 ++84 84 84 62 62 62 56 56 56 61 61 61 67 67 67 61 61 61 51 51 51 56 56 56 ++85 85 85 67 67 67 49 49 49 42 42 42 40 40 40 36 36 36 33 33 33 33 33 33 ++32 32 32 40 40 40 46 46 46 54 54 54 61 61 61 54 54 54 32 32 32 14 14 14 ++23 23 23 24 24 24 23 23 23 17 17 17 14 14 14 20 20 20 28 28 28 34 34 34 ++45 45 45 31 31 31 19 19 19 13 13 13 17 17 17 25 25 25 39 39 39 23 23 23 ++37 37 37 38 38 38 42 42 42 8 8 8 6 6 6 13 13 13 42 42 42 40 40 40 ++24 24 24 11 11 11 42 42 42 44 44 44 29 29 29 39 39 39 43 43 43 39 39 39 ++46 46 46 37 37 37 34 34 34 36 36 36 37 37 37 39 39 39 32 32 32 13 13 13 ++11 11 11 27 27 27 38 38 38 32 32 32 16 16 16 8 8 8 20 20 20 34 34 34 ++28 28 28 14 14 14 14 14 14 14 14 14 23 23 23 38 38 38 33 33 33 20 20 20 ++10 10 10 8 8 8 10 10 10 13 13 13 14 14 14 14 14 14 13 13 13 13 13 13 ++14 14 14 28 28 28 28 28 28 11 11 11 13 13 13 32 32 32 38 38 38 29 29 29 ++10 10 10 11 11 11 13 13 13 10 10 10 8 8 8 11 11 11 23 23 23 31 31 31 ++37 37 37 25 25 25 25 25 25 29 29 29 21 21 21 16 16 16 17 17 17 17 17 17 ++16 16 16 29 29 29 34 34 34 28 28 28 20 20 20 23 23 23 27 27 27 28 28 28 ++24 24 24 19 19 19 19 19 19 27 27 27 33 33 33 29 29 29 17 17 17 6 6 6 ++8 8 8 4 4 4 21 21 21 11 11 11 0 0 0 17 17 17 28 28 28 32 32 32 ++17 17 17 19 19 19 20 20 20 17 17 17 10 10 10 3 3 3 8 8 8 16 16 16 ++14 14 14 28 28 28 32 32 32 20 20 20 8 8 8 10 10 10 13 13 13 11 11 11 ++ ++0 0 0 0 0 0 0 0 0 6 6 6 27 27 27 31 31 31 23 23 23 13 13 13 ++19 19 19 19 19 19 17 17 17 16 16 16 25 25 25 34 34 34 32 32 32 21 21 21 ++21 21 21 16 16 16 17 17 17 21 21 21 21 21 21 16 16 16 16 16 16 21 21 21 ++17 17 17 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 11 11 11 16 16 16 ++21 21 21 20 20 20 17 17 17 14 14 14 11 11 11 8 8 8 4 4 4 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 13 13 13 17 17 17 20 20 20 ++19 19 19 20 20 20 21 21 21 20 20 20 16 16 16 10 10 10 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 ++8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 ++10 10 10 11 11 11 13 13 13 14 14 14 13 13 13 11 11 11 13 13 13 16 16 16 ++39 39 39 32 32 32 37 37 37 49 49 49 43 43 43 21 21 21 14 14 14 27 27 27 ++31 31 31 49 49 49 52 52 52 56 56 56 50 50 50 32 32 32 31 31 31 34 34 34 ++34 34 34 43 43 43 66 66 66 75 75 75 63 63 63 52 52 52 49 49 49 44 44 44 ++51 51 51 48 48 48 65 65 65 89 89 89 88 88 88 65 65 65 53 53 53 62 62 62 ++66 66 66 58 58 58 73 73 73 101 101 101 105 105 105 84 84 84 71 71 71 78 78 78 ++84 84 84 83 83 83 90 90 90 105 105 105 115 116 115 112 112 113 99 99 99 89 89 89 ++99 99 99 99 99 99 105 105 105 121 121 119 128 128 128 127 127 127 117 117 117 112 112 113 ++115 116 115 117 117 117 127 127 127 137 137 137 142 143 144 134 134 134 128 128 128 134 134 134 ++140 140 140 133 133 133 131 131 131 142 143 144 152 153 154 152 153 154 144 145 144 137 137 137 ++144 145 144 144 145 144 152 153 154 158 159 161 158 159 161 155 156 156 157 157 157 163 163 163 ++158 159 161 166 165 167 166 167 167 166 167 167 166 167 167 166 165 167 158 159 161 152 153 154 ++155 156 156 149 151 153 145 146 147 144 145 144 142 143 144 134 134 134 125 125 127 117 117 117 ++109 110 110 105 104 105 99 99 99 95 95 94 92 92 92 89 89 89 84 84 84 80 80 80 ++75 75 75 73 73 73 73 73 73 71 71 71 59 59 59 59 59 59 65 65 65 62 62 62 ++56 57 59 180 183 185 238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 238 240 244 ++180 183 185 187 210 182 200 220 210 246 251 251 238 240 244 238 240 244 246 251 251 246 251 251 ++246 251 251 238 240 244 238 240 244 238 240 244 246 251 251 252 251 251 180 183 185 78 79 82 ++90 90 90 105 105 105 112 112 113 121 121 119 137 137 137 144 145 144 152 153 154 155 156 156 ++158 159 161 163 163 163 166 167 167 166 167 167 166 167 167 163 163 163 166 167 167 166 167 167 ++166 167 167 166 167 167 163 163 163 157 157 157 160 161 160 166 167 167 163 163 163 155 156 156 ++152 153 154 149 151 153 152 153 154 157 157 157 155 156 156 147 147 148 142 143 144 142 143 144 ++144 145 144 142 143 144 145 146 147 140 140 140 134 134 134 134 134 134 129 129 130 134 134 134 ++133 133 133 128 128 128 122 121 126 121 121 119 125 125 127 127 127 127 122 121 126 117 117 117 ++112 112 113 109 110 110 112 112 113 115 116 115 109 110 110 105 105 105 105 105 105 109 110 110 ++103 103 102 105 104 105 96 96 96 91 91 91 94 94 94 90 90 90 85 85 85 87 87 87 ++88 88 88 84 84 84 77 77 77 74 74 74 74 74 74 72 72 72 71 71 71 72 72 72 ++72 72 72 65 65 65 63 63 63 67 67 67 65 65 65 57 57 57 52 52 52 57 57 57 ++54 54 54 50 50 50 48 48 48 50 50 50 50 50 50 45 45 45 42 42 42 42 42 42 ++51 51 51 49 49 49 40 40 40 33 33 33 37 37 37 40 40 40 37 37 37 29 29 29 ++32 32 32 33 33 33 31 31 31 27 27 27 27 27 27 33 33 33 40 40 40 44 44 44 ++32 32 32 21 21 21 23 23 23 24 24 24 17 17 17 21 21 21 27 27 27 8 8 8 ++19 19 19 17 17 17 23 23 23 11 11 11 28 28 28 31 31 31 36 36 36 20 20 20 ++8 8 8 6 6 6 19 19 19 16 16 16 16 16 16 14 14 14 6 6 6 20 20 20 ++19 19 19 10 10 10 8 8 8 20 20 20 33 33 33 32 32 32 20 20 20 11 11 11 ++10 10 10 13 13 13 14 14 14 11 11 11 6 6 6 4 4 4 8 8 8 11 11 11 ++19 19 19 11 11 11 10 10 10 20 20 20 33 33 33 33 33 33 20 20 20 10 10 10 ++10 10 10 10 10 10 11 11 11 14 14 14 14 14 14 10 10 10 10 10 10 11 11 11 ++14 14 14 16 16 16 14 14 14 19 19 19 31 31 31 38 38 38 28 28 28 10 10 10 ++11 11 11 16 16 16 17 17 17 11 11 11 11 11 11 21 21 21 29 29 29 33 33 33 ++24 24 24 16 16 16 8 8 8 10 10 10 14 14 14 13 13 13 13 13 13 16 16 16 ++37 37 37 34 34 34 27 27 27 14 14 14 10 10 10 13 13 13 13 13 13 10 10 10 ++14 14 14 16 16 16 27 27 27 38 38 38 34 34 34 20 20 20 11 11 11 14 14 14 ++14 14 14 14 14 14 16 16 16 16 16 16 14 14 14 25 25 25 34 34 34 27 27 27 ++13 13 13 8 8 8 6 6 6 8 8 8 13 13 13 16 16 16 14 14 14 13 13 13 ++28 28 28 29 29 29 20 20 20 6 6 6 4 4 4 16 16 16 17 17 17 10 10 10 ++ ++8 8 8 4 4 4 0 0 0 10 10 10 24 24 24 33 33 33 31 31 31 23 23 23 ++14 14 14 21 21 21 20 20 20 14 14 14 16 16 16 25 25 25 33 33 33 33 33 33 ++28 28 28 19 19 19 14 14 14 17 17 17 20 20 20 19 19 19 17 17 17 17 17 17 ++11 11 11 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++16 16 16 17 17 17 19 19 19 20 20 20 20 20 20 19 19 19 16 16 16 14 14 14 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++14 14 14 14 14 14 14 14 14 16 16 16 17 17 17 17 17 17 19 19 19 19 19 19 ++23 23 23 20 20 20 16 16 16 11 11 11 6 6 6 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 ++3 3 3 10 10 10 13 13 13 11 11 11 8 8 8 11 11 11 21 21 21 29 29 29 ++37 37 37 13 13 13 13 13 13 42 42 42 49 49 49 28 28 28 17 17 17 28 28 28 ++40 40 40 39 39 39 32 32 32 42 42 42 46 46 46 33 33 33 34 34 34 42 42 42 ++37 37 37 54 54 54 49 49 49 45 45 45 60 60 60 57 57 57 44 44 44 52 52 52 ++56 56 56 58 58 58 62 62 62 67 67 67 71 71 71 70 70 70 67 67 67 63 63 63 ++70 70 70 65 65 65 70 70 70 84 84 84 89 89 89 82 82 82 78 78 78 83 83 83 ++87 87 87 84 84 84 87 87 87 96 97 98 101 101 101 99 99 99 96 97 98 101 101 101 ++103 103 102 99 99 99 101 101 101 112 112 113 117 117 117 117 117 117 115 116 115 117 117 117 ++117 117 117 125 125 127 125 125 127 127 127 127 129 129 130 131 131 131 129 129 130 129 129 130 ++137 137 137 133 133 133 133 133 133 137 138 139 142 143 144 140 140 140 142 143 144 144 145 144 ++147 147 148 149 149 149 152 153 154 152 153 154 152 153 154 152 153 154 155 156 156 158 159 161 ++157 157 157 158 159 161 161 161 162 161 161 162 163 163 163 163 163 163 160 161 160 155 156 156 ++157 157 157 155 156 156 152 153 154 147 147 148 142 143 144 137 137 137 131 131 131 127 127 127 ++117 117 117 115 116 115 109 110 110 103 103 102 101 101 101 96 96 96 90 90 90 87 87 87 ++83 83 83 76 76 76 71 71 71 75 75 75 73 73 73 63 63 63 65 65 65 63 63 63 ++51 52 54 90 91 93 231 224 220 238 240 244 246 251 251 238 240 244 255 255 255 238 240 244 ++246 251 251 238 240 244 187 210 182 238 240 244 238 240 244 238 240 244 246 251 251 238 240 244 ++238 240 244 238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 238 240 244 137 138 139 ++94 94 94 112 112 113 122 121 126 128 128 128 142 143 144 149 149 149 149 151 153 158 159 161 ++166 165 167 166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 166 165 167 166 167 167 ++166 167 167 166 165 167 161 161 162 160 161 160 160 161 160 160 161 160 158 159 161 157 157 157 ++157 157 157 152 153 154 149 151 153 152 153 154 152 153 154 147 147 148 147 147 148 149 149 149 ++144 145 144 142 143 144 144 145 144 140 140 140 137 138 139 134 134 134 131 131 131 134 134 134 ++131 131 131 129 129 130 127 127 127 125 122 126 122 121 126 121 121 119 121 121 119 121 121 119 ++121 121 119 117 117 117 109 110 110 109 110 110 112 112 113 105 105 105 101 101 101 101 101 101 ++96 96 96 101 101 101 95 95 94 92 92 92 94 94 94 90 90 90 85 85 85 88 88 88 ++84 84 84 82 82 82 77 77 77 74 74 74 74 74 74 77 77 77 73 73 73 65 65 65 ++62 62 62 68 68 68 69 69 69 67 67 67 61 61 61 57 57 57 58 58 58 59 59 59 ++49 49 49 49 49 49 50 50 50 49 49 49 45 45 45 42 42 42 45 45 45 51 51 51 ++53 53 53 44 44 44 37 37 37 34 34 34 34 34 34 36 36 36 36 36 36 34 34 34 ++31 31 31 31 31 31 28 28 28 25 25 25 28 28 28 34 34 34 36 36 36 32 32 32 ++19 19 19 16 16 16 20 20 20 25 25 25 21 21 21 20 20 20 19 19 19 20 20 20 ++24 24 24 14 14 14 17 17 17 20 20 20 38 38 38 33 33 33 23 23 23 6 6 6 ++19 19 19 20 20 20 19 19 19 13 13 13 17 17 17 17 17 17 8 8 8 14 14 14 ++11 11 11 13 13 13 19 19 19 29 29 29 34 34 34 21 21 21 6 6 6 8 8 8 ++21 21 21 13 13 13 6 6 6 8 8 8 17 17 17 21 21 21 17 17 17 10 10 10 ++10 10 10 13 13 13 16 16 16 28 28 28 31 31 31 16 16 16 10 10 10 17 17 17 ++14 14 14 13 13 13 13 13 13 16 16 16 13 13 13 8 8 8 11 11 11 19 19 19 ++17 17 17 10 10 10 16 16 16 34 34 34 40 40 40 28 28 28 11 11 11 4 4 4 ++14 14 14 17 17 17 14 14 14 11 11 11 19 19 19 31 31 31 36 36 36 33 33 33 ++13 13 13 17 17 17 14 14 14 6 6 6 11 11 11 17 17 17 19 19 19 21 21 21 ++34 34 34 23 23 23 11 11 11 10 10 10 13 13 13 14 14 14 13 13 13 14 14 14 ++16 16 16 21 21 21 31 31 31 32 32 32 23 23 23 8 8 8 6 6 6 14 14 14 ++14 14 14 17 17 17 13 13 13 17 17 17 24 24 24 32 32 32 31 31 31 6 6 6 ++11 11 11 17 17 17 20 20 20 17 17 17 13 13 13 13 13 13 20 20 20 25 25 25 ++31 31 31 21 21 21 8 8 8 4 4 4 13 13 13 19 19 19 16 16 16 10 10 10 ++ ++0 0 0 8 8 8 20 20 20 19 19 19 17 17 17 23 23 23 32 32 32 37 37 37 ++20 20 20 17 17 17 20 20 20 23 23 23 19 19 19 14 14 14 24 24 24 37 37 37 ++32 32 32 24 24 24 17 17 17 14 14 14 19 19 19 21 21 21 17 17 17 13 13 13 ++4 4 4 3 3 3 0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++6 6 6 10 10 10 14 14 14 17 17 17 20 20 20 20 20 20 20 20 20 20 20 20 ++23 23 23 23 23 23 21 21 21 21 21 21 20 20 20 19 19 19 17 17 17 17 17 17 ++16 16 16 17 17 17 20 20 20 21 21 21 21 21 21 20 20 20 19 19 19 17 17 17 ++17 17 17 13 13 13 8 8 8 3 3 3 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 ++8 8 8 13 13 13 13 13 13 10 10 10 10 10 10 19 19 19 31 31 31 38 38 38 ++11 11 11 10 10 10 14 14 14 27 27 27 36 36 36 38 38 38 34 34 34 31 31 31 ++27 27 27 34 34 34 28 28 28 34 34 34 42 42 42 38 38 38 40 40 40 40 40 40 ++39 39 39 48 48 48 48 48 48 44 44 44 49 49 49 51 51 51 48 48 48 48 48 48 ++50 50 50 59 59 59 62 62 62 59 59 59 60 60 60 67 67 67 68 68 68 63 63 63 ++65 65 65 72 72 72 77 77 77 76 76 76 76 76 76 81 81 81 83 83 83 82 82 82 ++82 82 82 87 87 87 90 90 90 91 91 91 93 93 93 99 99 99 101 101 101 101 101 101 ++101 101 101 103 103 102 109 110 110 112 112 113 112 112 113 112 112 113 115 116 115 117 117 117 ++112 112 113 127 127 127 125 122 126 121 121 119 125 122 126 127 127 127 129 129 130 129 129 130 ++131 131 131 134 134 134 139 139 139 142 143 144 142 143 144 142 143 144 144 145 144 147 147 148 ++145 146 147 147 147 148 149 149 149 149 149 149 149 149 149 152 153 154 152 153 154 152 153 154 ++155 156 156 157 157 157 157 157 157 157 157 157 158 159 161 163 163 163 163 163 163 161 161 162 ++158 159 161 157 157 157 155 156 156 149 149 149 144 145 144 140 140 140 137 137 137 134 134 134 ++128 128 128 125 122 126 117 117 117 112 112 113 109 110 110 105 105 105 101 101 101 96 96 96 ++91 91 91 90 90 90 83 83 83 78 78 78 87 87 87 80 80 80 73 73 73 67 67 67 ++69 70 72 58 59 61 152 153 154 238 240 244 238 240 244 238 240 244 238 240 244 238 240 244 ++238 240 244 238 240 244 158 159 161 180 183 185 200 220 210 246 251 251 238 240 244 238 240 244 ++238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 238 240 244 246 251 251 200 220 210 ++109 110 110 105 105 105 125 125 127 134 134 134 144 145 144 152 153 154 152 153 154 166 165 167 ++166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 ++166 165 167 161 161 162 161 161 162 163 163 163 161 161 162 157 157 157 155 156 156 158 159 161 ++157 157 157 155 156 156 152 153 154 149 151 153 149 149 149 147 147 148 149 149 149 152 153 154 ++145 146 147 142 143 144 140 140 140 140 140 140 142 143 144 140 140 140 134 134 134 133 133 133 ++129 129 130 129 129 130 129 129 130 128 128 128 125 125 127 121 121 119 117 117 117 117 117 117 ++115 116 115 117 117 117 105 105 105 101 101 101 109 110 110 109 110 110 101 101 101 96 97 98 ++96 96 96 99 99 99 96 96 96 93 93 93 92 92 92 89 89 89 85 85 85 87 87 87 ++76 76 76 78 78 78 82 82 82 81 81 81 75 75 75 74 74 74 73 73 73 67 67 67 ++73 73 73 77 77 77 70 70 70 63 63 63 59 59 59 56 56 56 57 57 57 50 50 50 ++54 54 54 54 54 54 53 53 53 49 49 49 44 44 44 44 44 44 51 51 51 58 58 58 ++44 44 44 36 36 36 36 36 36 40 40 40 38 38 38 33 33 33 31 31 31 29 29 29 ++36 36 36 39 39 39 38 38 38 36 36 36 39 39 39 44 44 44 39 39 39 29 29 29 ++37 37 37 31 31 31 24 24 24 21 21 21 17 17 17 21 21 21 14 14 14 27 27 27 ++39 39 39 34 34 34 33 33 33 37 37 37 45 45 45 38 38 38 34 34 34 36 36 36 ++32 32 32 23 23 23 29 29 29 29 29 29 24 24 24 32 32 32 37 37 37 25 25 25 ++33 33 33 33 33 33 36 36 36 39 39 39 37 37 37 28 28 28 29 29 29 39 39 39 ++36 36 36 29 29 29 25 25 25 27 27 27 32 32 32 36 36 36 33 33 33 31 31 31 ++32 32 32 33 33 33 31 31 31 33 33 33 23 23 23 4 4 4 16 16 16 29 29 29 ++14 14 14 11 11 11 13 13 13 16 16 16 14 14 14 11 11 11 20 20 20 32 32 32 ++24 24 24 20 20 20 28 28 28 40 40 40 34 34 34 13 13 13 6 6 6 19 19 19 ++11 11 11 11 11 11 11 11 11 16 16 16 28 28 28 39 39 39 40 40 40 34 34 34 ++34 34 34 44 44 44 46 46 46 39 39 39 36 36 36 39 39 39 43 43 43 44 44 44 ++43 43 43 37 37 37 37 37 37 42 42 42 42 42 42 38 38 38 38 38 38 43 43 43 ++36 36 36 39 39 39 40 40 40 39 39 39 37 37 37 37 37 37 39 39 39 42 42 42 ++36 36 36 39 39 39 37 37 37 38 38 38 43 43 43 45 45 45 34 34 34 10 10 10 ++4 4 4 10 10 10 13 13 13 8 8 8 6 6 6 14 14 14 24 24 24 31 31 31 ++19 19 19 11 11 11 10 10 10 16 16 16 19 19 19 14 14 14 11 11 11 11 11 11 ++ ++3 3 3 10 10 10 17 17 17 19 19 19 16 16 16 16 16 16 25 25 25 36 36 36 ++31 31 31 23 23 23 19 19 19 20 20 20 19 19 19 14 14 14 19 19 19 27 27 27 ++29 29 29 29 29 29 25 25 25 17 17 17 17 17 17 20 20 20 17 17 17 10 10 10 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 6 6 6 10 10 10 13 13 13 16 16 16 19 19 19 20 20 20 ++20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 17 17 17 17 17 17 17 17 17 ++14 14 14 16 16 16 17 17 17 19 19 19 19 19 19 17 17 17 14 14 14 13 13 13 ++8 8 8 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 ++3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 ++6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 ++6 6 6 8 8 8 8 8 8 8 8 8 16 16 16 25 25 25 27 27 27 23 23 23 ++16 16 16 24 24 24 29 29 29 27 27 27 27 27 27 32 32 32 33 33 33 29 29 29 ++28 28 28 40 40 40 36 36 36 36 36 36 39 39 39 38 38 38 42 42 42 38 38 38 ++46 46 46 36 36 36 48 48 48 56 56 56 42 42 42 46 46 46 59 59 59 52 52 52 ++56 56 56 52 52 52 56 56 56 63 63 63 63 63 63 58 58 58 62 62 62 71 71 71 ++73 73 73 70 70 70 73 73 73 78 78 78 78 78 78 75 75 75 78 78 78 87 87 87 ++89 89 89 89 89 89 89 89 89 90 90 90 94 94 94 99 99 99 99 99 99 96 97 98 ++103 103 102 105 105 105 109 110 110 105 105 105 105 105 105 109 110 110 112 112 113 115 116 115 ++121 121 119 125 122 126 117 117 117 125 122 126 129 129 130 127 127 127 129 129 130 134 134 134 ++134 134 134 134 134 134 134 134 134 137 137 137 140 140 140 144 145 144 142 143 144 140 140 140 ++149 149 149 145 146 147 147 147 148 152 153 154 155 156 156 152 153 154 152 153 154 155 156 156 ++158 159 161 161 161 162 161 161 162 157 157 157 157 157 157 161 161 162 163 163 163 161 161 162 ++166 165 167 161 161 162 157 157 157 155 156 156 155 156 156 149 151 153 144 145 144 140 140 140 ++140 140 140 134 134 134 128 128 128 125 125 127 121 121 119 121 121 119 115 116 115 112 112 113 ++105 105 105 105 105 105 101 101 101 83 83 83 87 87 87 80 80 80 73 73 73 69 69 69 ++58 59 61 69 70 72 60 61 64 200 220 210 238 240 244 246 251 251 238 240 244 238 240 244 ++238 240 244 255 255 255 231 246 232 200 220 210 238 240 244 246 251 251 246 251 251 238 240 244 ++238 240 244 246 251 251 238 240 244 238 240 244 246 251 251 246 251 251 238 240 244 246 251 251 ++166 167 167 109 110 110 121 121 119 140 140 140 144 145 144 158 159 161 157 157 157 166 167 167 ++166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 ++163 163 163 158 159 161 160 161 160 166 167 167 166 167 167 158 159 161 155 156 156 155 156 156 ++155 156 156 157 157 157 157 157 157 152 153 154 147 147 148 145 146 147 147 147 148 149 149 149 ++147 147 148 142 143 144 137 138 139 140 140 140 145 146 147 147 147 148 139 139 139 128 128 128 ++128 128 128 127 127 127 128 128 128 133 133 133 129 129 130 121 121 119 115 116 115 115 116 115 ++128 128 128 129 129 130 121 121 119 105 105 105 109 110 110 125 122 126 128 128 128 121 121 119 ++99 99 99 96 97 98 96 96 96 95 95 94 91 91 91 89 89 89 88 88 88 85 85 85 ++83 83 83 80 80 80 88 88 88 91 91 91 78 78 78 66 66 66 66 66 66 68 68 68 ++81 81 81 80 80 80 66 66 66 62 62 62 58 58 58 54 54 54 58 58 58 52 52 52 ++48 48 48 50 50 50 54 54 54 58 58 58 61 61 61 63 63 63 63 63 63 62 62 62 ++60 60 60 49 49 49 45 45 45 43 43 43 34 34 34 33 33 33 36 36 36 34 34 34 ++43 43 43 51 51 51 56 56 56 54 54 54 57 57 57 61 61 61 58 58 58 49 49 49 ++53 53 53 49 49 49 43 43 43 32 32 32 14 14 14 23 23 23 13 13 13 20 20 20 ++37 37 37 45 45 45 49 49 49 49 49 49 51 51 51 46 46 46 48 48 48 57 57 57 ++56 56 56 50 50 50 52 52 52 54 54 54 45 45 45 46 46 46 51 51 51 45 45 45 ++44 44 44 42 42 42 46 46 46 51 51 51 48 48 48 43 43 43 44 44 44 48 48 48 ++50 50 50 51 51 51 50 50 50 49 49 49 48 48 48 48 48 48 51 51 51 53 53 53 ++48 48 48 46 46 46 33 33 33 25 25 25 14 14 14 11 11 11 27 27 27 25 25 25 ++13 13 13 10 10 10 11 11 11 16 16 16 14 14 14 13 13 13 24 24 24 38 38 38 ++29 29 29 33 33 33 34 34 34 29 29 29 17 17 17 10 10 10 13 13 13 19 19 19 ++8 8 8 11 11 11 17 17 17 28 28 28 39 39 39 45 45 45 43 43 43 37 37 37 ++44 44 44 49 49 49 53 53 53 50 50 50 39 39 39 34 34 34 36 36 36 36 36 36 ++39 39 39 40 40 40 43 43 43 44 44 44 42 42 42 39 39 39 39 39 39 42 42 42 ++43 43 43 42 42 42 39 39 39 37 37 37 38 38 38 40 40 40 42 42 42 39 39 39 ++38 38 38 39 39 39 42 42 42 40 40 40 38 38 38 32 32 32 19 19 19 10 10 10 ++19 19 19 16 16 16 10 10 10 10 10 10 19 19 19 27 27 27 25 25 25 19 19 19 ++10 10 10 10 10 10 13 13 13 17 17 17 16 16 16 11 11 11 10 10 10 13 13 13 ++ ++44 44 44 25 25 25 11 11 11 17 17 17 23 23 23 19 19 19 16 16 16 20 20 20 ++39 39 39 33 33 33 19 19 19 6 6 6 11 11 11 21 21 21 21 21 21 13 13 13 ++24 24 24 33 33 33 32 32 32 21 21 21 16 16 16 19 19 19 17 17 17 8 8 8 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++3 3 3 0 0 0 0 0 0 3 3 3 6 6 6 13 13 13 17 17 17 20 20 20 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 ++21 21 21 21 21 21 20 20 20 17 17 17 14 14 14 10 10 10 4 4 4 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 ++6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 ++8 8 8 10 10 10 11 11 11 20 20 20 32 32 32 36 36 36 24 24 24 4 4 4 ++21 21 21 17 17 17 23 23 23 32 32 32 31 31 31 23 23 23 28 28 28 40 40 40 ++33 33 33 36 36 36 23 23 23 24 24 24 33 33 33 37 37 37 51 51 51 60 60 60 ++50 50 50 45 45 45 34 34 34 36 36 36 44 44 44 44 44 44 53 53 53 76 76 76 ++69 69 69 58 58 58 51 51 51 53 53 53 57 57 57 58 58 58 68 68 68 81 81 81 ++90 90 90 72 72 72 62 62 62 69 69 69 74 74 74 73 73 73 81 81 81 94 94 94 ++105 105 105 94 94 94 88 88 88 89 89 89 89 89 89 87 87 87 95 95 94 109 110 110 ++121 121 119 121 121 119 115 116 115 105 104 105 103 103 102 112 112 113 125 125 127 133 133 133 ++140 140 140 128 128 128 112 112 113 128 128 128 137 138 139 127 127 127 128 128 128 133 133 133 ++149 151 153 147 147 148 139 139 139 131 131 131 133 133 133 142 143 144 149 149 149 149 149 149 ++161 161 162 152 153 154 149 149 149 157 157 157 157 157 157 149 151 153 149 149 149 155 156 156 ++166 167 167 166 167 167 166 167 167 161 161 162 157 157 157 158 159 161 160 161 160 158 159 161 ++169 175 167 166 167 167 161 161 162 161 161 162 166 165 167 161 161 162 152 153 154 144 145 144 ++149 149 149 144 145 144 139 139 139 134 134 134 133 133 133 133 133 133 129 129 130 128 128 128 ++115 116 115 109 110 110 112 112 113 92 92 92 95 95 94 89 89 89 82 82 82 78 78 78 ++76 76 76 63 65 67 16 20 21 71 72 74 246 251 251 238 240 244 246 251 251 246 251 251 ++238 240 244 238 240 244 231 224 220 180 183 185 180 183 185 238 240 244 238 240 244 246 251 251 ++238 240 244 238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 246 251 251 238 240 244 ++238 240 244 131 131 131 127 127 127 147 147 148 147 147 148 166 167 167 163 163 163 166 165 167 ++161 161 162 166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 169 175 167 169 175 167 ++163 163 163 158 159 161 160 161 160 166 167 167 166 167 167 163 163 163 157 157 157 152 153 154 ++149 151 153 157 157 157 161 161 162 155 156 156 147 147 148 144 145 144 144 145 144 144 145 144 ++157 157 157 147 147 148 137 137 137 137 137 137 147 147 148 152 153 154 147 147 148 134 134 134 ++128 128 128 125 122 126 127 127 127 134 134 134 134 134 134 125 122 126 115 116 115 112 112 113 ++109 110 110 121 121 119 127 127 127 115 116 115 109 110 110 121 121 119 121 121 119 101 101 101 ++101 101 101 95 95 94 96 96 96 96 96 96 90 90 90 91 91 91 93 93 93 87 87 87 ++76 76 76 68 68 68 78 78 78 95 95 94 87 87 87 72 72 72 74 74 74 85 85 85 ++73 73 73 70 70 70 58 58 58 61 61 61 60 60 60 56 56 56 68 68 68 71 71 71 ++77 77 77 67 67 67 54 54 54 50 50 50 54 54 54 63 63 63 69 69 69 69 69 69 ++69 69 69 67 67 67 70 70 70 68 68 68 57 57 57 49 49 49 40 40 40 27 27 27 ++23 23 23 38 38 38 49 49 49 50 50 50 51 51 51 57 57 57 57 57 57 52 52 52 ++51 51 51 54 54 54 60 60 60 46 46 46 17 17 17 28 28 28 19 19 19 14 14 14 ++21 21 21 42 42 42 51 51 51 50 50 50 50 50 50 48 48 48 44 44 44 48 48 48 ++42 42 42 50 50 50 45 45 45 46 46 46 50 50 50 40 40 40 40 40 40 56 56 56 ++50 50 50 42 42 42 44 44 44 50 50 50 49 49 49 48 48 48 49 49 49 44 44 44 ++50 50 50 52 52 52 53 53 53 50 50 50 45 45 45 45 45 45 50 50 50 54 54 54 ++40 40 40 36 36 36 16 16 16 4 4 4 4 4 4 20 20 20 33 33 33 14 14 14 ++14 14 14 10 10 10 13 13 13 17 17 17 14 14 14 11 11 11 23 23 23 38 38 38 ++31 31 31 39 39 39 32 32 32 11 11 11 4 4 4 17 17 17 17 17 17 4 4 4 ++11 11 11 17 17 17 28 28 28 42 42 42 49 49 49 49 49 49 44 44 44 39 39 39 ++39 39 39 38 38 38 49 49 49 56 56 56 46 46 46 39 39 39 43 43 43 44 44 44 ++36 36 36 39 39 39 39 39 39 34 34 34 34 34 34 40 40 40 43 43 43 39 39 39 ++42 42 42 40 40 40 39 39 39 40 40 40 40 40 40 40 40 40 42 42 42 43 43 43 ++40 40 40 37 37 37 45 45 45 44 44 44 36 36 36 23 23 23 8 8 8 20 20 20 ++10 10 10 11 11 11 13 13 13 16 16 16 25 25 25 31 31 31 24 24 24 13 13 13 ++13 13 13 13 13 13 11 11 11 10 10 10 10 10 10 11 11 11 13 13 13 13 13 13 ++ ++36 36 36 36 36 36 29 29 29 20 20 20 16 16 16 17 17 17 17 17 17 16 16 16 ++20 20 20 32 32 32 33 33 33 20 20 20 13 13 13 19 19 19 21 21 21 14 14 14 ++19 19 19 25 25 25 31 31 31 31 31 31 25 25 25 17 17 17 6 6 6 0 0 0 ++0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 3 3 3 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 4 4 4 8 8 8 10 10 10 11 11 11 8 8 8 6 6 6 4 4 4 ++4 4 4 4 4 4 4 4 4 8 8 8 8 8 8 8 8 8 6 6 6 6 6 6 ++10 10 10 3 3 3 14 14 14 34 34 34 34 34 34 17 17 17 10 10 10 19 19 19 ++27 27 27 23 23 23 19 19 19 32 32 32 46 46 46 38 38 38 21 21 21 23 23 23 ++57 57 57 43 43 43 24 24 24 23 23 23 40 40 40 52 52 52 46 46 46 33 33 33 ++73 73 73 48 48 48 42 42 42 34 34 34 36 36 36 56 56 56 73 73 73 59 59 59 ++88 88 88 68 68 68 59 59 59 51 51 51 49 49 49 54 54 54 66 66 66 90 90 90 ++96 96 96 88 88 88 72 72 72 68 68 68 73 73 73 70 70 70 73 73 73 90 90 90 ++105 105 105 112 112 113 93 93 93 80 80 80 89 89 89 92 92 92 89 89 89 99 99 99 ++115 116 115 127 127 127 121 121 119 99 99 99 105 105 105 128 128 128 125 122 126 115 116 115 ++129 129 130 137 137 137 140 140 140 134 134 134 127 127 127 121 121 119 127 127 127 134 134 134 ++144 145 144 149 149 149 147 147 148 140 140 140 137 138 139 144 145 144 145 146 147 142 143 144 ++144 145 144 161 161 162 163 163 163 149 149 149 144 145 144 147 147 148 152 153 154 161 161 162 ++163 163 163 169 175 167 166 167 167 160 161 160 158 159 161 157 157 157 161 161 162 158 159 161 ++163 163 163 166 167 167 166 167 167 166 167 167 169 175 167 161 161 162 155 156 156 152 153 154 ++152 153 154 152 153 154 155 156 156 149 149 149 142 143 144 144 145 144 142 143 144 131 131 131 ++125 125 127 127 127 127 121 121 119 115 116 115 103 103 102 94 94 94 94 94 94 87 87 87 ++71 72 74 60 61 64 8 10 13 8 10 13 147 147 148 238 240 244 238 240 244 238 240 244 ++238 240 244 238 240 244 238 240 244 238 240 244 200 220 210 238 240 244 238 240 244 246 251 251 ++238 240 244 246 251 251 238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 238 240 244 ++238 240 244 187 210 182 134 134 134 142 143 144 155 156 156 158 159 161 169 175 167 161 161 162 ++166 167 167 166 167 167 166 167 167 163 163 163 163 163 163 169 175 167 169 175 167 161 161 162 ++158 159 161 160 161 160 158 159 161 158 159 161 163 163 163 166 167 167 161 161 162 155 156 156 ++149 151 153 149 151 153 155 156 156 158 159 161 157 157 157 147 147 148 142 143 144 142 143 144 ++139 139 139 155 156 156 149 149 149 134 134 134 137 138 139 147 147 148 145 146 147 144 145 144 ++137 137 137 129 129 130 121 121 119 121 121 119 128 128 128 133 133 133 127 127 127 115 116 115 ++109 110 110 109 110 110 121 121 119 125 125 127 117 117 117 115 116 115 109 110 110 101 101 101 ++99 99 99 96 97 98 96 97 98 95 95 94 91 91 91 90 90 90 96 97 98 105 105 105 ++84 84 84 78 78 78 76 76 76 85 85 85 96 96 96 99 99 99 87 87 87 75 75 75 ++66 66 66 65 65 65 61 61 61 62 62 62 70 70 70 80 80 80 82 82 82 77 77 77 ++61 61 61 53 53 53 54 54 54 63 63 63 61 61 61 51 51 51 56 56 56 70 70 70 ++68 68 68 66 66 66 63 63 63 65 65 65 66 66 66 65 65 65 60 60 60 56 56 56 ++32 32 32 42 42 42 44 44 44 40 40 40 45 45 45 57 57 57 59 59 59 52 52 52 ++52 52 52 58 58 58 50 50 50 51 51 51 42 42 42 14 14 14 13 13 13 25 25 25 ++36 36 36 40 40 40 46 46 46 49 49 49 50 50 50 50 50 50 49 49 49 48 48 48 ++50 50 50 49 49 49 46 46 46 42 42 42 38 38 38 39 39 39 43 43 43 46 46 46 ++40 40 40 40 40 40 40 40 40 39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 ++36 36 36 42 42 42 44 44 44 49 49 49 39 39 39 34 34 34 45 45 45 44 44 44 ++32 32 32 21 21 21 17 17 17 11 11 11 20 20 20 8 8 8 32 32 32 19 19 19 ++14 14 14 13 13 13 14 14 14 17 17 17 14 14 14 13 13 13 25 25 25 38 38 38 ++38 38 38 25 25 25 14 14 14 11 11 11 13 13 13 14 14 14 14 14 14 14 14 14 ++11 11 11 32 32 32 44 44 44 39 39 39 36 36 36 44 44 44 51 51 51 50 50 50 ++33 33 33 40 40 40 44 44 44 43 43 43 42 42 42 44 44 44 42 42 42 38 38 38 ++39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 ++39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 38 38 38 39 39 39 42 42 42 ++36 36 36 44 44 44 44 44 44 32 32 32 17 17 17 11 11 11 11 11 11 10 10 10 ++16 16 16 8 8 8 13 13 13 28 28 28 31 31 31 20 20 20 13 13 13 16 16 16 ++14 14 14 11 11 11 11 11 11 16 16 16 13 13 13 13 13 13 24 24 24 38 38 38 ++ ++21 21 21 34 34 34 37 37 37 24 24 24 14 14 14 17 17 17 21 21 21 20 20 20 ++16 16 16 19 19 19 27 27 27 33 33 33 28 28 28 17 17 17 16 16 16 23 23 23 ++16 16 16 14 14 14 21 21 21 33 33 33 32 32 32 14 14 14 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 8 8 8 10 10 10 ++13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ++10 10 10 6 6 6 0 0 0 0 0 0 6 6 6 10 10 10 11 11 11 11 11 11 ++0 0 0 17 17 17 34 34 34 37 37 37 23 23 23 8 8 8 14 14 14 28 28 28 ++24 24 24 24 24 24 36 36 36 46 46 46 38 38 38 20 20 20 16 16 16 24 24 24 ++32 32 32 60 60 60 48 48 48 32 32 32 51 51 51 46 46 46 27 27 27 38 38 38 ++33 33 33 71 71 71 59 59 59 43 43 43 45 45 45 72 72 72 57 57 57 44 44 44 ++45 45 45 87 87 87 75 75 75 58 58 58 53 53 53 68 68 68 88 88 88 61 61 61 ++62 62 62 93 93 93 94 94 94 74 74 74 70 70 70 76 76 76 85 85 85 96 97 98 ++88 88 88 101 101 101 112 112 113 103 103 102 87 87 87 87 87 87 99 99 99 109 110 110 ++115 116 115 121 121 119 125 122 126 117 117 117 121 121 119 121 121 119 109 110 110 112 112 113 ++117 117 117 129 129 130 139 139 139 134 134 134 125 122 126 121 121 119 129 129 130 140 140 140 ++134 134 134 140 140 140 144 145 144 147 147 148 144 145 144 139 139 139 137 138 139 139 139 139 ++149 149 149 157 157 157 160 161 160 157 157 157 152 153 154 152 153 154 152 153 154 157 157 157 ++157 157 157 169 175 167 166 167 167 166 165 167 161 161 162 157 157 157 160 161 160 158 159 161 ++157 157 157 166 167 167 166 167 167 169 175 167 169 175 167 161 161 162 157 157 157 157 157 157 ++155 156 156 157 157 157 158 159 161 157 157 157 152 153 154 155 156 156 149 151 153 140 140 140 ++137 137 137 128 128 128 125 125 127 128 128 128 115 116 115 105 105 105 103 103 102 85 85 85 ++87 88 90 20 21 24 14 16 19 11 13 16 25 27 29 200 220 210 246 251 251 238 240 244 ++238 240 244 246 251 251 246 251 251 238 240 244 180 183 185 180 183 185 231 224 220 238 240 244 ++246 251 251 246 251 251 238 240 244 238 240 244 238 240 244 246 251 251 238 240 244 246 251 251 ++238 240 244 238 240 244 149 151 153 142 143 144 157 157 157 152 153 154 180 183 185 161 161 162 ++166 167 167 166 167 167 166 165 167 166 165 167 166 167 167 169 175 167 166 167 167 161 161 162 ++161 161 162 161 161 162 158 159 161 157 157 157 157 157 157 158 159 161 161 161 162 163 163 163 ++152 153 154 149 151 153 149 149 149 155 156 156 157 157 157 152 153 154 145 146 147 140 140 140 ++144 145 144 140 140 140 149 149 149 144 145 144 131 131 131 139 139 139 147 147 148 137 137 137 ++140 140 140 134 134 134 125 122 126 117 117 117 121 121 119 127 127 127 128 128 128 122 121 126 ++109 110 110 105 105 105 109 110 110 117 117 117 115 116 115 109 110 110 105 104 105 99 99 99 ++101 101 101 96 96 96 94 94 94 92 92 92 87 87 87 82 82 82 85 85 85 91 91 91 ++103 103 102 99 99 99 95 95 94 92 92 92 90 90 90 84 84 84 74 74 74 67 67 67 ++68 68 68 72 72 72 76 76 76 77 77 77 81 81 81 83 83 83 80 80 80 75 75 75 ++59 59 59 59 59 59 61 61 61 63 63 63 59 59 59 52 52 52 50 50 50 52 52 52 ++49 49 49 44 44 44 39 39 39 37 37 37 37 37 37 38 38 38 37 37 37 36 36 36 ++46 46 46 43 43 43 34 34 34 27 27 27 27 27 27 32 32 32 31 31 31 25 25 25 ++28 28 28 32 32 32 27 27 27 32 32 32 29 29 29 19 19 19 27 27 27 34 34 34 ++28 28 28 25 25 25 23 23 23 23 23 23 23 23 23 21 21 21 23 23 23 25 25 25 ++21 21 21 21 21 21 21 21 21 20 20 20 21 21 21 25 25 25 32 32 32 37 37 37 ++20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 ++21 21 21 20 20 20 17 17 17 21 21 21 19 19 19 21 21 21 36 36 36 33 33 33 ++23 23 23 14 14 14 13 13 13 10 10 10 13 13 13 13 13 13 23 23 23 10 10 10 ++11 11 11 11 11 11 13 13 13 13 13 13 11 11 11 20 20 20 33 33 33 39 39 39 ++25 25 25 14 14 14 8 8 8 13 13 13 16 16 16 11 11 11 10 10 10 14 14 14 ++34 34 34 32 32 32 29 29 29 28 28 28 31 31 31 38 38 38 46 46 46 52 52 52 ++52 52 52 45 45 45 37 37 37 36 36 36 44 44 44 52 52 52 48 48 48 38 38 38 ++39 39 39 39 39 39 38 38 38 39 39 39 40 40 40 40 40 40 39 39 39 39 39 39 ++40 40 40 40 40 40 39 39 39 38 38 38 38 38 38 38 38 38 39 39 39 40 40 40 ++42 42 42 37 37 37 28 28 28 19 19 19 14 14 14 14 14 14 14 14 14 13 13 13 ++8 8 8 19 19 19 29 29 29 31 31 31 23 23 23 14 14 14 11 11 11 13 13 13 ++8 8 8 14 14 14 16 16 16 13 13 13 16 16 16 24 24 24 25 25 25 20 20 20 ++ ++14 14 14 27 27 27 36 36 36 34 34 34 27 27 27 20 20 20 17 17 17 17 17 17 ++11 11 11 11 11 11 21 21 21 36 36 36 38 38 38 27 27 27 17 17 17 19 19 19 ++14 14 14 13 13 13 17 17 17 25 25 25 27 27 27 17 17 17 4 4 4 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 8 8 8 11 11 11 13 13 13 ++10 10 10 8 8 8 6 6 6 4 4 4 4 4 4 6 6 6 10 10 10 11 11 11 ++13 13 13 10 10 10 4 4 4 0 0 0 4 4 4 10 10 10 11 11 11 10 10 10 ++13 13 13 31 31 31 39 39 39 27 27 27 10 10 10 8 8 8 20 20 20 28 28 28 ++19 19 19 25 25 25 43 43 43 44 44 44 23 23 23 14 14 14 24 24 24 25 25 25 ++19 19 19 45 45 45 61 61 61 59 59 59 48 48 48 32 32 32 25 25 25 32 32 32 ++32 32 32 45 45 45 70 70 70 58 58 58 66 66 66 48 48 48 51 51 51 39 39 39 ++45 45 45 57 57 57 84 84 84 69 69 69 67 67 67 82 82 82 63 63 63 61 61 61 ++59 59 59 67 67 67 99 99 99 99 99 99 69 69 69 82 82 82 101 101 101 80 80 80 ++71 71 71 88 88 88 105 105 105 109 110 110 96 96 96 95 95 94 105 105 105 112 112 113 ++96 96 96 99 99 99 115 116 115 127 127 127 127 127 127 112 112 113 99 99 99 112 112 113 ++125 122 126 129 129 130 137 138 139 139 139 139 133 133 133 129 129 130 133 133 133 137 137 137 ++125 122 126 129 129 130 142 143 144 152 153 154 149 151 153 140 140 140 137 138 139 142 143 144 ++152 153 154 147 147 148 152 153 154 158 159 161 161 161 162 157 157 157 152 153 154 149 149 149 ++157 157 157 166 167 167 166 167 167 166 165 167 166 165 167 161 161 162 161 161 162 157 157 157 ++155 156 156 163 163 163 166 167 167 169 175 167 169 175 167 166 167 167 163 163 163 161 161 162 ++158 159 161 161 161 162 163 163 163 163 163 163 163 163 163 163 163 163 158 159 161 147 147 148 ++144 145 144 139 139 139 133 133 133 137 137 137 128 128 128 117 117 117 109 110 110 96 96 96 ++71 72 74 8 10 13 20 21 24 0 0 4 0 0 4 73 74 76 246 251 251 238 240 244 ++238 240 244 238 240 244 246 251 251 246 251 251 238 240 244 200 220 210 238 240 244 238 240 244 ++238 240 244 238 240 244 238 240 244 238 240 244 238 240 244 246 251 251 238 240 244 238 240 244 ++238 240 244 246 251 251 200 220 210 139 140 142 152 153 154 166 165 167 166 167 167 169 175 167 ++166 165 167 166 167 167 166 165 167 166 167 167 169 175 167 166 167 167 166 165 167 161 161 162 ++161 161 162 160 161 160 158 159 161 157 157 157 152 153 154 152 153 154 158 159 161 166 167 167 ++157 157 157 152 153 154 145 146 147 147 147 148 152 153 154 157 157 157 149 151 153 144 145 144 ++137 137 137 140 140 140 142 143 144 144 145 144 142 143 144 137 137 137 134 134 134 137 138 139 ++137 138 139 137 137 137 129 129 130 121 121 119 115 116 115 117 117 117 125 122 126 128 128 128 ++121 121 119 109 110 110 103 103 102 105 105 105 112 112 113 105 105 105 99 99 99 101 101 101 ++99 99 99 94 94 94 93 93 93 96 97 98 96 97 98 91 91 91 91 91 91 95 95 94 ++109 110 110 105 105 105 103 103 102 93 93 93 83 83 83 74 74 74 71 71 71 71 71 71 ++81 81 81 83 83 83 84 84 84 84 84 84 84 84 84 84 84 84 82 82 82 77 77 77 ++58 58 58 62 62 62 61 61 61 54 54 54 51 51 51 51 51 51 48 48 48 40 40 40 ++43 43 43 44 44 44 45 45 45 46 46 46 46 46 46 46 46 46 44 44 44 43 43 43 ++49 49 49 40 40 40 33 33 33 29 29 29 25 25 25 24 24 24 29 29 29 38 38 38 ++33 33 33 34 34 34 29 29 29 33 33 33 32 32 32 31 31 31 37 37 37 31 31 31 ++19 19 19 14 14 14 16 16 16 24 24 24 31 31 31 29 29 29 28 28 28 29 29 29 ++28 28 28 28 28 28 28 28 28 27 27 27 27 27 27 29 29 29 34 34 34 38 38 38 ++27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 25 25 25 25 25 25 25 25 25 ++31 31 31 28 28 28 24 24 24 31 31 31 32 32 32 33 33 33 40 40 40 31 31 31 ++16 16 16 11 11 11 10 10 10 11 11 11 10 10 10 24 24 24 16 16 16 6 6 6 ++14 14 14 10 10 10 10 10 10 10 10 10 17 17 17 33 33 33 38 38 38 28 28 28 ++14 14 14 8 8 8 10 10 10 14 14 14 13 13 13 8 8 8 14 14 14 28 28 28 ++43 43 43 31 31 31 23 23 23 24 24 24 25 25 25 20 20 20 24 24 24 34 34 34 ++51 51 51 49 49 49 43 43 43 39 39 39 40 40 40 46 46 46 49 49 49 49 49 49 ++42 42 42 39 39 39 38 38 38 38 38 38 40 40 40 42 42 42 40 40 40 39 39 39 ++42 42 42 42 42 42 39 39 39 39 39 39 39 39 39 39 39 39 40 40 40 40 40 40 ++43 43 43 28 28 28 13 13 13 8 8 8 14 14 14 16 16 16 13 13 13 10 10 10 ++13 13 13 29 29 29 34 34 34 23 23 23 11 11 11 11 11 11 13 13 13 10 10 10 ++8 8 8 13 13 13 14 14 14 14 14 14 21 21 21 28 28 28 24 24 24 13 13 13 ++ ++21 21 21 16 16 16 23 23 23 38 38 38 42 42 42 28 28 28 13 13 13 8 8 8 ++11 11 11 19 19 19 21 21 21 24 24 24 32 32 32 38 38 38 29 29 29 10 10 10 ++14 14 14 23 23 23 21 21 21 10 10 10 11 11 11 21 21 21 21 21 21 10 10 10 ++0 0 0 0 0 0 4 4 4 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 6 6 6 11 11 11 11 11 11 10 10 10 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 ++11 11 11 14 14 14 14 14 14 10 10 10 6 6 6 8 8 8 10 10 10 8 8 8 ++37 37 37 33 33 33 21 21 21 6 6 6 6 6 6 20 20 20 25 25 25 20 20 20 ++25 25 25 32 32 32 33 33 33 21 21 21 11 11 11 23 23 23 29 29 29 19 19 19 ++23 23 23 27 27 27 51 51 51 65 65 65 49 49 49 31 31 31 29 29 29 29 29 29 ++38 38 38 34 34 34 44 44 44 87 87 87 61 61 61 51 51 51 33 33 33 48 48 48 ++53 53 53 45 45 45 52 52 52 87 87 87 91 91 91 63 63 63 56 56 56 60 60 60 ++65 65 65 67 67 67 71 71 71 89 89 89 105 105 105 94 94 94 74 74 74 72 72 72 ++76 76 76 83 83 83 83 83 83 93 93 93 112 112 113 112 112 113 101 101 101 99 99 99 ++92 92 92 99 99 99 115 116 115 125 125 127 128 128 128 121 121 119 112 112 113 121 121 119 ++128 128 128 121 121 119 121 121 119 129 129 130 139 139 139 140 140 140 133 133 133 121 121 119 ++125 125 127 131 131 131 142 143 144 149 149 149 149 149 149 147 147 148 145 146 147 145 146 147 ++147 147 148 139 139 139 142 143 144 155 156 156 161 161 162 163 163 163 157 157 157 144 145 144 ++161 161 162 166 167 167 157 157 157 158 159 161 166 167 167 166 167 167 166 167 167 157 157 157 ++161 161 162 161 161 162 160 161 160 169 175 167 180 183 185 169 175 167 166 167 167 163 163 163 ++163 163 163 163 163 163 163 163 163 166 165 167 166 167 167 166 167 167 163 163 163 152 153 154 ++149 149 149 152 153 154 142 143 144 137 137 137 134 134 134 127 127 127 117 117 117 109 110 110 ++35 36 38 11 13 16 14 16 19 14 16 19 14 16 19 1 3 7 142 143 144 246 251 251 ++246 251 251 238 240 244 238 240 244 238 240 244 238 240 244 180 183 185 180 183 185 200 220 210 ++238 240 244 238 240 244 238 240 244 238 240 244 238 240 244 246 251 251 246 251 251 246 251 251 ++238 240 244 246 251 251 238 240 244 180 183 185 149 149 149 161 161 162 169 175 167 169 175 167 ++163 163 163 166 167 167 166 165 167 166 167 167 169 175 167 166 167 167 158 159 161 161 161 162 ++158 159 161 157 157 157 157 157 157 158 159 161 155 156 156 149 151 153 152 153 154 160 161 160 ++161 161 162 157 157 157 149 149 149 142 143 144 144 145 144 149 151 153 152 153 154 149 149 149 ++133 133 133 140 140 140 137 137 137 139 139 139 147 147 148 140 140 140 133 133 133 142 143 144 ++129 129 130 131 131 131 134 134 134 133 133 133 121 121 119 112 112 113 115 116 115 125 122 126 ++128 128 128 121 121 119 105 105 105 103 103 102 109 110 110 105 104 105 99 99 99 105 104 105 ++96 96 96 93 93 93 96 96 96 105 105 105 109 110 110 105 105 105 105 104 105 105 105 105 ++101 101 101 99 99 99 93 93 93 85 85 85 75 75 75 73 73 73 77 77 77 83 83 83 ++90 90 90 87 87 87 84 84 84 83 83 83 83 83 83 83 83 83 80 80 80 76 76 76 ++68 68 68 67 67 67 58 58 58 45 45 45 42 42 42 46 46 46 48 48 48 42 42 42 ++45 45 45 49 49 49 52 52 52 56 56 56 58 58 58 59 59 59 59 59 59 59 59 59 ++59 59 59 54 54 54 52 52 52 49 49 49 36 36 36 21 21 21 31 31 31 48 48 48 ++54 54 54 54 54 54 52 52 52 51 51 51 45 45 45 44 44 44 43 43 43 19 19 19 ++20 20 20 16 16 16 21 21 21 38 38 38 50 50 50 51 51 51 49 49 49 49 49 49 ++51 51 51 50 50 50 48 48 48 45 45 45 44 44 44 44 44 44 45 45 45 46 46 46 ++49 49 49 48 48 48 48 48 48 46 46 46 46 46 46 45 45 45 44 44 44 44 44 44 ++39 39 39 40 40 40 38 38 38 44 44 44 43 43 43 44 44 44 49 49 49 37 37 37 ++16 16 16 13 13 13 11 11 11 17 17 17 11 11 11 36 36 36 14 14 14 10 10 10 ++20 20 20 10 10 10 8 8 8 19 19 19 32 32 32 40 40 40 32 32 32 10 10 10 ++11 11 11 13 13 13 14 14 14 14 14 14 11 11 11 16 16 16 28 28 28 39 39 39 ++28 28 28 29 29 29 33 33 33 39 39 39 37 37 37 20 20 20 11 11 11 21 21 21 ++37 37 37 42 42 42 45 45 45 42 42 42 38 38 38 39 39 39 45 45 45 51 51 51 ++45 45 45 43 43 43 38 38 38 38 38 38 39 39 39 40 40 40 40 40 40 39 39 39 ++42 42 42 40 40 40 39 39 39 39 39 39 40 40 40 40 40 40 40 40 40 40 40 40 ++36 36 36 23 23 23 11 11 11 13 13 13 16 16 16 13 13 13 10 10 10 11 11 11 ++31 31 31 31 31 31 23 23 23 8 8 8 6 6 6 17 17 17 17 17 17 8 8 8 ++16 16 16 10 10 10 11 11 11 23 23 23 28 28 28 27 27 27 24 24 24 27 27 27 ++ ++21 21 21 13 13 13 13 13 13 27 27 27 37 37 37 36 36 36 24 24 24 13 13 13 ++13 13 13 23 23 23 23 23 23 13 13 13 20 20 20 36 36 36 37 37 37 23 23 23 ++16 16 16 24 24 24 19 19 19 0 0 0 0 0 0 14 14 14 24 24 24 20 20 20 ++11 11 11 0 0 0 0 0 0 4 4 4 6 6 6 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 3 3 3 8 8 8 11 11 11 11 11 11 8 8 8 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 6 6 6 ++4 4 4 14 14 14 19 19 19 10 10 10 3 3 3 6 6 6 14 14 14 19 19 19 ++36 36 36 23 23 23 4 4 4 0 0 0 13 13 13 25 25 25 25 25 25 20 20 20 ++38 38 38 34 34 34 20 20 20 8 8 8 17 17 17 21 21 21 16 16 16 13 13 13 ++31 31 31 40 40 40 32 32 32 37 37 37 57 57 57 48 48 48 28 28 28 36 36 36 ++28 28 28 48 48 48 59 59 59 44 44 44 82 82 82 60 60 60 49 49 49 42 42 42 ++42 42 42 52 52 52 59 59 59 80 80 80 87 87 87 75 75 75 68 68 68 54 54 54 ++65 65 65 63 63 63 65 65 65 85 85 85 105 105 105 99 99 99 77 77 77 72 72 72 ++83 83 83 81 81 81 76 76 76 91 91 91 115 116 115 117 117 117 101 101 101 88 88 88 ++99 99 99 105 105 105 112 112 113 109 110 110 117 117 117 128 128 128 125 122 126 125 125 127 ++117 117 117 109 110 110 112 112 113 127 127 127 137 138 139 144 145 144 140 140 140 127 127 127 ++134 134 134 140 140 140 139 139 139 134 134 134 140 140 140 152 153 154 152 153 154 145 146 147 ++139 139 139 137 138 139 144 145 144 149 151 153 152 153 154 157 157 157 158 159 161 149 151 153 ++163 163 163 163 163 163 152 153 154 152 153 154 163 163 163 166 167 167 166 167 167 163 163 163 ++163 163 163 158 159 161 157 157 157 166 167 167 169 175 167 166 167 167 169 175 167 166 167 167 ++166 167 167 166 165 167 161 161 162 163 163 163 166 167 167 169 175 167 166 167 167 161 161 162 ++155 156 156 157 157 157 149 149 149 142 143 144 137 137 137 137 137 137 127 127 127 93 93 93 ++10 11 14 11 13 16 6 8 11 20 21 24 6 8 11 24 25 28 20 21 24 200 220 210 ++238 240 244 238 240 244 246 251 251 246 251 251 252 251 251 238 240 244 200 220 210 238 240 244 ++238 240 244 252 251 251 246 251 251 238 240 244 238 240 244 238 240 244 238 240 244 238 240 244 ++238 240 244 238 240 244 238 240 244 231 246 232 152 153 154 160 161 160 163 163 163 169 175 167 ++163 163 163 166 167 167 166 165 167 166 167 167 169 175 167 163 163 163 157 157 157 161 161 162 ++160 161 160 157 157 157 157 157 157 157 157 157 157 157 157 152 153 154 149 149 149 152 153 154 ++155 156 156 157 157 157 155 156 156 145 146 147 140 140 140 144 145 144 149 149 149 149 151 153 ++147 147 148 134 134 134 137 137 137 139 139 139 133 133 133 140 140 140 147 147 148 137 138 139 ++133 133 133 127 127 127 128 128 128 137 137 137 133 133 133 117 117 117 109 110 110 112 112 113 ++122 121 126 127 127 127 115 116 115 105 105 105 105 105 105 105 105 105 101 101 101 103 103 102 ++96 96 96 96 96 96 101 101 101 109 110 110 112 112 113 109 110 110 105 105 105 105 104 105 ++99 99 99 93 93 93 85 85 85 78 78 78 75 75 75 77 77 77 84 84 84 88 88 88 ++87 87 87 87 87 87 87 87 87 84 84 84 78 78 78 72 72 72 69 69 69 68 68 68 ++63 63 63 59 59 59 50 50 50 45 45 45 50 50 50 59 59 59 67 67 67 70 70 70 ++58 58 58 56 56 56 52 52 52 50 50 50 50 50 50 53 53 53 58 58 58 61 61 61 ++62 62 62 60 60 60 61 61 61 59 59 59 44 44 44 24 24 24 24 24 24 36 36 36 ++53 53 53 57 57 57 56 56 56 54 54 54 49 49 49 51 51 51 49 49 49 23 23 23 ++24 24 24 16 16 16 16 16 16 28 28 28 43 43 43 49 49 49 50 50 50 50 50 50 ++49 49 49 49 49 49 48 48 48 46 46 46 46 46 46 48 48 48 48 48 48 48 48 48 ++49 49 49 49 49 49 48 48 48 46 46 46 44 44 44 43 43 43 42 42 42 42 42 42 ++39 39 39 42 42 42 39 39 39 40 40 40 39 39 39 44 44 44 54 54 54 48 48 48 ++16 16 16 14 14 14 11 11 11 19 19 19 16 16 16 37 37 37 14 14 14 14 14 14 ++13 13 13 10 10 10 16 16 16 33 33 33 45 45 45 39 39 39 21 21 21 4 4 4 ++13 13 13 16 16 16 13 13 13 11 11 11 20 20 20 31 31 31 34 34 34 32 32 32 ++20 20 20 33 33 33 43 43 43 49 49 49 52 52 52 44 44 44 33 33 33 33 33 33 ++36 36 36 29 29 29 24 24 24 29 29 29 38 38 38 44 44 44 43 43 43 39 39 39 ++50 50 50 45 45 45 40 40 40 38 38 38 38 38 38 38 38 38 39 39 39 39 39 39 ++39 39 39 38 38 38 38 38 38 39 39 39 42 42 42 42 42 42 39 39 39 37 37 37 ++21 21 21 17 17 17 16 16 16 17 17 17 14 14 14 10 10 10 16 16 16 25 25 25 ++36 36 36 24 24 24 10 10 10 4 4 4 11 11 11 19 19 19 17 17 17 11 11 11 ++13 13 13 14 14 14 21 21 21 32 32 32 34 34 34 31 31 31 32 32 32 39 39 39 ++ ++13 13 13 19 19 19 16 16 16 8 8 8 17 17 17 34 34 34 37 37 37 29 29 29 ++17 17 17 19 19 19 20 20 20 17 17 17 16 16 16 21 21 21 32 32 32 42 42 42 ++23 23 23 16 16 16 8 8 8 4 4 4 0 0 0 0 0 0 8 8 8 20 20 20 ++28 28 28 6 6 6 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 8 8 8 11 11 11 11 11 11 8 8 8 3 3 3 0 0 0 ++3 3 3 4 4 4 6 6 6 8 8 8 8 8 8 8 8 8 6 6 6 6 6 6 ++0 0 0 13 13 13 14 14 14 6 6 6 3 3 3 13 13 13 24 24 24 28 28 28 ++11 11 11 8 8 8 8 8 8 13 13 13 17 17 17 20 20 20 24 24 24 27 27 27 ++32 32 32 21 21 21 8 8 8 16 16 16 28 28 28 16 16 16 10 10 10 31 31 31 ++44 44 44 43 43 43 29 29 29 23 23 23 42 42 42 56 56 56 49 49 49 36 36 36 ++39 39 39 62 62 62 45 45 45 43 43 43 44 44 44 81 81 81 66 66 66 51 51 51 ++44 44 44 59 59 59 81 81 81 56 56 56 58 58 58 90 90 90 80 80 80 72 72 72 ++59 59 59 60 60 60 87 87 87 91 91 91 72 72 72 91 91 91 105 105 105 81 81 81 ++76 76 76 73 73 73 90 90 90 105 104 105 103 103 102 105 105 105 112 112 113 105 104 105 ++103 103 102 105 105 105 105 104 105 94 94 94 105 105 105 128 128 128 128 128 128 127 127 127 ++112 112 113 112 112 113 122 121 126 129 129 130 128 128 128 134 134 134 142 143 144 140 140 140 ++137 137 137 137 137 137 131 131 131 125 125 127 133 133 133 149 151 153 155 156 156 149 149 149 ++137 138 139 144 145 144 152 153 154 149 151 153 145 146 147 149 149 149 158 159 161 161 161 162 ++161 161 162 163 163 163 152 153 154 149 151 153 155 156 156 157 157 157 166 167 167 166 167 167 ++161 161 162 157 157 157 160 161 160 169 175 167 166 167 167 163 163 163 169 175 167 169 175 167 ++166 167 167 166 167 167 163 163 163 166 165 167 169 175 167 180 183 185 169 175 167 169 175 167 ++166 165 167 152 153 154 152 153 154 152 153 154 139 139 139 144 145 144 125 125 127 52 52 52 ++8 10 13 11 13 16 14 16 19 0 0 4 14 16 19 8 10 13 6 8 11 96 97 98 ++238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 238 240 244 180 183 185 200 220 210 ++200 220 210 231 246 232 238 240 244 238 240 244 246 251 251 238 240 244 246 251 251 238 240 244 ++246 251 251 238 240 244 246 251 251 238 240 244 200 220 210 152 153 154 157 157 157 169 175 167 ++166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 161 161 162 157 157 157 160 161 160 ++161 161 162 157 157 157 152 153 154 152 153 154 152 153 154 152 153 154 149 149 149 147 147 148 ++145 146 147 152 153 154 157 157 157 152 153 154 144 145 144 142 143 144 142 143 144 144 145 144 ++155 156 156 147 147 148 137 137 137 128 128 128 128 128 128 137 137 137 144 145 144 140 140 140 ++142 143 144 127 127 127 121 121 119 128 128 128 133 133 133 127 127 127 112 112 113 105 105 105 ++105 105 105 117 117 117 117 117 117 109 110 110 105 105 105 105 105 105 103 103 102 99 99 99 ++96 97 98 103 103 102 105 105 105 109 110 110 112 112 113 112 112 113 105 105 105 103 103 102 ++96 96 96 89 89 89 82 82 82 80 80 80 83 83 83 88 88 88 91 91 91 91 91 91 ++87 87 87 87 87 87 85 85 85 77 77 77 67 67 67 60 60 60 63 63 63 71 71 71 ++78 78 78 72 72 72 66 66 66 62 62 62 63 63 63 65 65 65 67 67 67 69 69 69 ++71 71 71 68 68 68 62 62 62 58 58 58 54 54 54 53 53 53 52 52 52 51 51 51 ++57 57 57 54 54 54 56 56 56 59 59 59 56 56 56 43 43 43 32 32 32 25 25 25 ++42 42 42 52 52 52 51 51 51 49 49 49 48 48 48 52 52 52 56 56 56 40 40 40 ++21 21 21 16 16 16 14 14 14 24 24 24 39 39 39 49 49 49 49 49 49 45 45 45 ++48 48 48 46 46 46 45 45 45 45 45 45 46 46 46 46 46 46 46 46 46 45 45 45 ++43 43 43 43 43 43 42 42 42 40 40 40 38 38 38 37 37 37 36 36 36 36 36 36 ++38 38 38 43 43 43 42 42 42 43 43 43 39 39 39 42 42 42 48 48 48 36 36 36 ++14 14 14 13 13 13 8 8 8 16 16 16 20 20 20 27 27 27 13 13 13 14 14 14 ++0 0 0 17 17 17 27 27 27 39 39 39 48 48 48 32 32 32 13 13 13 16 16 16 ++14 14 14 11 11 11 8 8 8 16 16 16 31 31 31 39 39 39 29 29 29 10 10 10 ++34 34 34 43 43 43 40 40 40 39 39 39 51 51 51 53 53 53 45 45 45 44 44 44 ++39 39 39 27 27 27 14 14 14 19 19 19 31 31 31 38 38 38 38 38 38 37 37 37 ++48 48 48 46 46 46 44 44 44 40 40 40 39 39 39 38 38 38 38 38 38 39 39 39 ++38 38 38 37 37 37 38 38 38 39 39 39 42 42 42 39 39 39 34 34 34 29 29 29 ++13 13 13 14 14 14 14 14 14 14 14 14 11 11 11 14 14 14 25 25 25 37 37 37 ++24 24 24 16 16 16 10 10 10 14 14 14 16 16 16 14 14 14 13 13 13 16 16 16 ++8 8 8 25 25 25 38 38 38 38 38 38 37 37 37 39 39 39 40 40 40 39 39 39 ++ ++14 14 14 17 17 17 14 14 14 10 10 10 11 11 11 23 23 23 34 34 34 38 38 38 ++28 28 28 19 19 19 16 16 16 21 21 21 20 20 20 14 14 14 23 23 23 38 38 38 ++34 34 34 17 17 17 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 8 8 8 ++24 24 24 17 17 17 6 6 6 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 4 4 4 8 8 8 11 11 11 10 10 10 6 6 6 3 3 3 0 0 0 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 ++3 3 3 10 10 10 11 11 11 6 6 6 13 13 13 23 23 23 25 25 25 20 20 20 ++0 0 0 6 6 6 13 13 13 16 16 16 16 16 16 19 19 19 21 21 21 24 24 24 ++19 19 19 8 8 8 8 8 8 20 20 20 24 24 24 19 19 19 28 28 28 46 46 46 ++43 43 43 27 27 27 29 29 29 29 29 29 21 21 21 42 42 42 60 60 60 51 51 51 ++65 65 65 37 37 37 43 43 43 36 36 36 37 37 37 48 48 48 76 76 76 66 66 66 ++61 61 61 74 74 74 53 53 53 52 52 52 53 53 53 60 60 60 90 90 90 87 87 87 ++61 61 61 88 88 88 87 87 87 68 68 68 70 70 70 81 81 81 89 89 89 99 99 99 ++84 84 84 82 82 82 96 97 98 103 103 102 89 89 89 93 93 93 112 112 113 121 121 119 ++112 112 113 105 104 105 99 99 99 101 101 101 115 116 115 125 125 127 125 122 126 133 133 133 ++121 121 119 121 121 119 125 125 127 122 121 126 112 112 113 121 121 119 134 134 134 140 140 140 ++140 140 140 133 133 133 127 127 127 128 128 128 134 134 134 142 143 144 147 147 148 149 151 153 ++147 147 148 149 149 149 149 149 149 145 146 147 144 145 144 144 145 144 152 153 154 161 161 162 ++161 161 162 163 163 163 155 156 156 149 151 153 152 153 154 152 153 154 160 161 160 166 167 167 ++166 167 167 161 161 162 161 161 162 169 175 167 166 167 167 158 159 161 166 167 167 169 175 167 ++166 167 167 166 167 167 166 165 167 166 167 167 169 175 167 169 175 167 169 175 167 169 175 167 ++169 175 167 157 157 157 157 157 157 157 157 157 147 147 148 142 143 144 105 105 105 14 14 14 ++14 16 19 6 8 11 22 23 26 8 10 13 0 0 4 20 21 24 6 8 11 6 8 11 ++161 161 162 238 240 244 246 251 251 238 240 244 238 240 244 246 251 251 238 240 244 231 224 220 ++200 220 210 200 220 210 246 251 251 238 240 244 238 240 244 238 240 244 238 240 244 238 240 244 ++238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 158 159 161 166 167 167 166 167 167 ++166 167 167 166 167 167 166 167 167 166 167 167 161 161 162 158 159 161 158 159 161 157 157 157 ++157 157 157 155 156 156 152 153 154 149 151 153 149 151 153 152 153 154 149 149 149 147 147 148 ++144 145 144 147 147 148 149 151 153 152 153 154 149 151 153 144 145 144 140 140 140 137 138 139 ++144 145 144 152 153 154 140 140 140 127 127 127 133 133 133 131 131 131 128 128 128 140 140 140 ++145 146 147 134 134 134 121 121 119 117 117 117 125 122 126 128 128 128 122 121 126 112 112 113 ++105 104 105 109 110 110 112 112 113 109 110 110 105 104 105 105 104 105 103 103 102 96 96 96 ++99 99 99 109 110 110 115 116 115 109 110 110 109 110 110 109 110 110 109 110 110 101 101 101 ++87 87 87 83 83 83 80 80 80 84 84 84 91 91 91 96 97 98 96 96 96 93 93 93 ++89 89 89 81 81 81 73 73 73 68 68 68 65 65 65 66 66 66 71 71 71 78 78 78 ++77 77 77 76 76 76 74 74 74 72 72 72 71 71 71 70 70 70 69 69 69 68 68 68 ++69 69 69 67 67 67 66 66 66 65 65 65 62 62 62 57 57 57 50 50 50 44 44 44 ++56 56 56 57 57 57 57 57 57 58 58 58 60 60 60 56 56 56 39 39 39 20 20 20 ++31 31 31 50 50 50 51 51 51 50 50 50 50 50 50 52 52 52 56 56 56 51 51 51 ++21 21 21 21 21 21 20 20 20 24 24 24 39 39 39 53 53 53 54 54 54 48 48 48 ++51 51 51 50 50 50 49 49 49 49 49 49 49 49 49 49 49 49 45 45 45 43 43 43 ++42 42 42 42 42 42 42 42 42 40 40 40 40 40 40 40 40 40 39 39 39 39 39 39 ++36 36 36 40 40 40 39 39 39 42 42 42 39 39 39 38 38 38 34 34 34 10 10 10 ++13 13 13 13 13 13 10 10 10 16 16 16 29 29 29 16 16 16 14 14 14 13 13 13 ++10 10 10 32 32 32 31 31 31 31 31 31 43 43 43 29 29 29 8 8 8 20 20 20 ++14 14 14 10 10 10 14 14 14 28 28 28 34 34 34 29 29 29 17 17 17 8 8 8 ++46 46 46 51 51 51 39 39 39 32 32 32 42 42 42 45 45 45 43 43 43 48 48 48 ++42 42 42 36 36 36 29 29 29 24 24 24 21 21 21 23 23 23 32 32 32 42 42 42 ++42 42 42 44 44 44 46 46 46 45 45 45 43 43 43 39 39 39 39 39 39 39 39 39 ++39 39 39 38 38 38 39 39 39 40 40 40 40 40 40 37 37 37 27 27 27 19 19 19 ++13 13 13 13 13 13 11 11 11 11 11 11 17 17 17 25 25 25 28 28 28 28 28 28 ++13 13 13 11 11 11 13 13 13 16 16 16 14 14 14 11 11 11 13 13 13 17 17 17 ++21 21 21 36 36 36 44 44 44 42 42 42 38 38 38 40 40 40 40 40 40 38 38 38 ++ ++24 24 24 10 10 10 10 10 10 23 23 23 23 23 23 11 11 11 19 19 19 38 38 38 ++39 39 39 24 24 24 14 14 14 20 20 20 24 24 24 19 19 19 16 16 16 17 17 17 ++45 45 45 29 29 29 8 8 8 0 0 0 0 0 0 4 4 4 4 4 4 0 0 0 ++6 6 6 24 24 24 28 28 28 11 11 11 0 0 0 0 0 0 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 8 8 8 10 10 10 6 6 6 4 4 4 3 3 3 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 ++4 4 4 10 10 10 13 13 13 14 14 14 24 24 24 31 31 31 20 20 20 0 0 0 ++16 16 16 14 14 14 8 8 8 6 6 6 14 14 14 24 24 24 21 21 21 13 13 13 ++17 17 17 14 14 14 17 17 17 14 14 14 8 8 8 24 24 24 44 44 44 48 48 48 ++23 23 23 23 23 23 21 21 21 27 27 27 27 27 27 20 20 20 40 40 40 77 77 77 ++57 57 57 38 38 38 25 25 25 40 40 40 39 39 39 36 36 36 49 49 49 78 78 78 ++82 82 82 54 54 54 49 49 49 51 51 51 54 54 54 57 57 57 63 63 63 89 89 89 ++93 93 93 85 85 85 70 70 70 65 65 65 69 69 69 68 68 68 75 75 75 95 95 94 ++105 105 105 103 103 102 94 94 94 87 87 87 83 83 83 87 87 87 99 99 99 115 116 115 ++121 121 119 96 97 98 94 94 94 109 110 110 117 117 117 109 110 110 103 103 102 122 121 126 ++137 137 137 127 127 127 125 122 126 121 121 119 112 112 113 121 121 119 139 139 139 142 143 144 ++149 151 153 137 137 137 131 131 131 140 140 140 140 140 140 129 129 130 133 133 133 144 145 144 ++160 161 160 149 151 153 139 139 139 140 140 140 145 146 147 144 145 144 144 145 144 152 153 154 ++163 163 163 163 163 163 152 153 154 149 151 153 152 153 154 152 153 154 157 157 157 158 159 161 ++169 175 167 166 167 167 161 161 162 169 175 167 166 167 167 157 157 157 161 161 162 161 161 162 ++169 175 167 169 175 167 166 167 167 166 167 167 169 175 167 166 167 167 163 163 163 166 165 167 ++169 175 167 169 175 167 160 161 160 155 156 156 157 157 157 134 134 134 80 80 80 0 0 0 ++11 13 16 6 8 11 11 13 16 8 10 13 20 21 24 0 0 4 20 21 24 14 16 19 ++37 39 42 200 220 210 238 240 244 238 240 244 246 251 251 238 240 244 246 251 251 231 246 232 ++187 210 182 180 183 185 238 240 244 246 251 251 238 240 244 246 251 251 238 240 244 238 240 244 ++238 240 244 238 240 244 238 240 244 252 251 251 238 240 244 231 224 220 140 140 140 169 175 167 ++166 167 167 166 167 167 166 167 167 166 167 167 157 157 157 157 157 157 161 161 162 157 157 157 ++149 149 149 152 153 154 155 156 156 152 153 154 149 151 153 152 153 154 149 149 149 147 147 148 ++149 149 149 144 145 144 142 143 144 147 147 148 152 153 154 149 149 149 140 140 140 137 137 137 ++137 137 137 137 137 137 144 145 144 144 145 144 129 129 130 127 127 127 129 129 130 129 129 130 ++144 145 144 144 145 144 133 133 133 115 116 115 112 112 113 127 127 127 129 129 130 121 121 119 ++112 112 113 105 105 105 105 105 105 105 105 105 101 101 101 101 101 101 103 103 102 99 99 99 ++101 101 101 115 116 115 121 121 119 109 110 110 101 101 101 103 103 102 101 101 101 92 92 92 ++81 81 81 80 80 80 81 81 81 88 88 88 95 95 94 99 99 99 94 94 94 90 90 90 ++84 84 84 70 70 70 60 60 60 66 66 66 77 77 77 83 83 83 81 81 81 77 77 77 ++73 73 73 76 76 76 76 76 76 72 72 72 70 70 70 71 71 71 70 70 70 65 65 65 ++67 67 67 63 63 63 61 61 61 61 61 61 63 63 63 62 62 62 59 59 59 54 54 54 ++44 44 44 53 53 53 57 57 57 56 56 56 59 59 59 60 60 60 48 48 48 28 28 28 ++17 17 17 45 45 45 51 51 51 51 51 51 53 53 53 50 50 50 51 51 51 51 51 51 ++31 31 31 28 28 28 17 17 17 10 10 10 23 23 23 45 45 45 52 52 52 48 48 48 ++44 44 44 43 43 43 43 43 43 44 44 44 46 46 46 46 46 46 44 44 44 42 42 42 ++38 38 38 38 38 38 39 39 39 39 39 39 39 39 39 40 40 40 40 40 40 40 40 40 ++43 43 43 42 42 42 36 36 36 37 37 37 40 40 40 44 44 44 42 42 42 17 17 17 ++14 14 14 14 14 14 13 13 13 19 19 19 38 38 38 10 10 10 17 17 17 14 14 14 ++27 27 27 45 45 45 27 27 27 14 14 14 38 38 38 33 33 33 8 8 8 16 16 16 ++14 14 14 14 14 14 28 28 28 39 39 39 32 32 32 10 10 10 8 8 8 24 24 24 ++45 45 45 53 53 53 46 46 46 39 39 39 44 44 44 43 43 43 44 44 44 59 59 59 ++46 46 46 43 43 43 38 38 38 32 32 32 23 23 23 19 19 19 27 27 27 39 39 39 ++34 34 34 42 42 42 48 48 48 50 50 50 45 45 45 42 42 42 39 39 39 39 39 39 ++40 40 40 40 40 40 40 40 40 42 42 42 40 40 40 33 33 33 21 21 21 11 11 11 ++17 17 17 13 13 13 10 10 10 13 13 13 25 25 25 33 33 33 24 24 24 8 8 8 ++13 13 13 13 13 13 11 11 11 10 10 10 10 10 10 13 13 13 16 16 16 17 17 17 ++42 42 42 38 38 38 39 39 39 43 43 43 40 40 40 34 34 34 36 36 36 43 43 43 ++ ++48 48 48 24 24 24 17 17 17 20 20 20 14 14 14 17 17 17 21 21 21 16 16 16 ++36 36 36 33 33 33 25 25 25 17 17 17 16 16 16 19 19 19 19 19 19 14 14 14 ++0 0 0 33 33 33 33 33 33 8 8 8 0 0 0 0 0 0 0 0 0 4 4 4 ++0 0 0 8 8 8 23 23 23 25 25 25 13 13 13 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 6 6 6 4 4 4 0 0 0 0 0 0 6 6 6 ++4 4 4 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 14 14 14 11 11 11 0 0 0 0 0 0 8 8 8 3 3 3 ++0 0 0 10 10 10 8 8 8 0 0 0 3 3 3 13 13 13 11 11 11 0 0 0 ++3 3 3 0 0 0 11 11 11 28 28 28 29 29 29 16 16 16 4 4 4 4 4 4 ++8 8 8 14 14 14 13 13 13 8 8 8 14 14 14 24 24 24 23 23 23 11 11 11 ++16 16 16 8 8 8 13 13 13 16 16 16 24 24 24 44 44 44 44 44 44 19 19 19 ++20 20 20 21 21 21 28 28 28 25 25 25 23 23 23 42 42 42 56 56 56 50 50 50 ++72 72 72 48 48 48 39 39 39 34 34 34 38 38 38 45 45 45 51 51 51 71 71 71 ++82 82 82 67 67 67 48 48 48 48 48 48 56 56 56 52 52 52 57 57 57 77 77 77 ++95 95 94 87 87 87 75 75 75 68 68 68 67 67 67 70 70 70 73 73 73 76 76 76 ++105 105 105 112 112 113 93 93 93 76 76 76 81 81 81 101 101 101 109 110 110 93 93 93 ++112 112 113 121 121 119 115 116 115 112 112 113 101 101 101 105 105 105 105 105 105 112 112 113 ++128 128 128 137 138 139 127 127 127 112 112 113 121 121 119 129 129 130 125 125 127 121 121 119 ++134 134 134 147 147 148 144 145 144 129 129 130 127 127 127 129 129 130 134 134 134 140 140 140 ++147 147 148 155 156 156 152 153 154 142 143 144 137 137 137 142 143 144 144 145 144 144 145 144 ++158 159 161 166 167 167 157 157 157 152 153 154 152 153 154 152 153 154 155 156 156 155 156 156 ++157 157 157 166 165 167 169 175 167 166 167 167 158 159 161 158 159 161 163 163 163 160 161 160 ++158 159 161 169 175 167 180 183 185 166 167 167 166 167 167 166 167 167 166 167 167 166 167 167 ++166 165 167 166 167 167 166 167 167 160 161 160 149 149 149 126 132 129 2 8 7 6 13 11 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++10 11 14 89 90 92 238 240 244 238 240 244 246 251 251 238 240 244 246 251 251 238 240 244 ++169 175 167 200 220 210 200 220 210 238 240 244 238 240 244 246 251 251 246 251 251 238 240 244 ++246 251 251 238 240 244 246 251 251 238 240 244 246 251 251 238 240 244 180 183 185 149 151 153 ++169 175 167 166 167 167 169 175 167 155 156 156 166 167 167 149 151 153 157 157 157 155 156 156 ++152 153 154 152 153 154 152 153 154 149 151 153 149 149 149 149 149 149 147 147 148 147 147 148 ++142 143 144 145 146 147 144 145 144 137 138 139 144 145 144 157 157 157 152 153 154 137 138 139 ++131 131 131 133 133 133 139 139 139 142 143 144 139 139 139 129 129 130 122 121 126 122 121 126 ++125 122 126 137 137 137 142 143 144 122 121 126 109 110 110 109 110 110 115 116 115 133 133 133 ++128 128 128 115 116 115 105 105 105 103 103 102 105 105 105 103 103 102 91 91 91 101 101 101 ++109 110 110 109 110 110 112 112 113 112 112 113 112 112 113 103 103 102 94 94 94 87 87 87 ++76 76 76 81 81 81 93 93 93 99 99 99 93 93 93 94 94 94 94 94 94 85 85 85 ++58 58 58 73 73 73 81 81 81 76 76 76 73 73 73 77 77 77 80 80 80 80 80 80 ++75 75 75 75 75 75 73 73 73 70 70 70 68 68 68 69 69 69 68 68 68 67 67 67 ++62 62 62 61 61 61 62 62 62 61 61 61 63 63 63 65 65 65 59 59 59 58 58 58 ++46 46 46 40 40 40 57 57 57 61 61 61 50 50 50 58 58 58 60 60 60 39 39 39 ++40 40 40 44 44 44 52 52 52 57 57 57 51 51 51 50 50 50 53 53 53 53 53 53 ++42 42 42 20 20 20 14 14 14 13 13 13 19 19 19 43 43 43 54 54 54 44 44 44 ++46 46 46 48 48 48 48 48 48 44 44 44 42 42 42 40 40 40 40 40 40 42 42 42 ++42 42 42 38 38 38 38 38 38 42 42 42 43 43 43 40 40 40 40 40 40 45 45 45 ++42 42 42 39 39 39 40 40 40 39 39 39 38 38 38 43 43 43 36 36 36 13 13 13 ++19 19 19 14 14 14 6 6 6 21 21 21 34 34 34 16 16 16 4 4 4 31 31 31 ++40 40 40 29 29 29 16 16 16 19 19 19 37 37 37 17 17 17 16 16 16 11 11 11 ++10 10 10 33 33 33 38 38 38 27 27 27 17 17 17 11 11 11 13 13 13 23 23 23 ++38 38 38 40 40 40 46 46 46 51 51 51 48 48 48 40 40 40 39 39 39 45 45 45 ++56 56 56 49 49 49 40 40 40 37 37 37 36 36 36 34 34 34 33 33 33 34 34 34 ++20 20 20 42 42 42 42 42 42 38 38 38 54 54 54 54 54 54 40 40 40 37 37 37 ++46 46 46 38 38 38 37 37 37 43 43 43 40 40 40 27 27 27 14 14 14 13 13 13 ++14 14 14 4 4 4 10 10 10 28 28 28 33 33 33 23 23 23 14 14 14 16 16 16 ++19 19 19 14 14 14 14 14 14 16 16 16 13 13 13 13 13 13 24 24 24 39 39 39 ++39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 ++ ++27 27 27 43 43 43 29 29 29 11 11 11 23 23 23 20 20 20 10 10 10 20 20 20 ++20 20 20 36 36 36 39 39 39 24 24 24 13 13 13 16 16 16 11 11 11 0 0 0 ++6 6 6 0 0 0 24 24 24 33 33 33 10 10 10 0 0 0 8 8 8 0 0 0 ++3 3 3 0 0 0 4 4 4 23 23 23 29 29 29 19 19 19 4 4 4 0 0 0 ++6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 14 14 14 11 11 11 0 0 0 0 0 0 8 8 8 3 3 3 ++0 0 0 8 8 8 6 6 6 0 0 0 0 0 0 8 8 8 11 11 11 8 8 8 ++3 3 3 10 10 10 19 19 19 20 20 20 13 13 13 4 4 4 4 4 4 11 11 11 ++4 4 4 6 6 6 13 13 13 23 23 23 29 29 29 27 27 27 19 19 19 13 13 13 ++14 14 14 19 19 19 8 8 8 20 20 20 46 46 46 39 39 39 17 17 17 23 23 23 ++19 19 19 29 29 29 21 21 21 19 19 19 42 42 42 53 53 53 43 43 43 31 31 31 ++39 39 39 69 69 69 52 52 52 40 40 40 39 39 39 51 51 51 72 72 72 49 49 49 ++46 46 46 75 75 75 74 74 74 51 51 51 49 49 49 58 58 58 69 69 69 82 82 82 ++65 65 65 82 82 82 85 85 85 74 74 74 65 65 65 59 59 59 70 70 70 92 92 92 ++93 93 93 95 95 94 109 110 110 91 91 91 91 91 91 109 110 110 94 94 94 91 91 91 ++95 95 94 112 112 113 121 121 119 117 117 117 99 99 99 101 101 101 109 110 110 122 121 126 ++112 112 113 125 125 127 127 127 127 125 125 127 128 128 128 125 122 126 117 117 117 121 121 119 ++129 129 130 140 140 140 145 146 147 140 140 140 133 133 133 129 129 130 134 134 134 144 145 144 ++137 138 139 145 146 147 152 153 154 149 149 149 144 145 144 142 143 144 144 145 144 144 145 144 ++155 156 156 163 163 163 158 159 161 158 159 161 157 157 157 149 149 149 149 149 149 152 153 154 ++152 153 154 157 157 157 166 167 167 169 175 167 163 163 163 157 157 157 160 161 160 161 161 162 ++161 161 162 166 165 167 166 167 167 166 167 167 169 175 167 166 167 167 163 163 163 166 165 167 ++166 165 167 163 163 163 169 175 167 157 157 157 157 157 157 66 69 71 10 16 15 6 13 11 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++11 13 16 1 3 7 166 167 167 238 240 244 238 240 244 246 251 251 238 240 244 238 240 244 ++246 251 251 238 240 244 200 220 210 238 240 244 238 240 244 238 240 244 238 240 244 238 240 244 ++238 240 244 238 240 244 246 251 251 246 251 251 238 240 244 238 240 244 231 224 220 149 151 153 ++166 167 167 169 175 167 161 161 162 157 157 157 152 153 154 166 167 167 145 146 147 157 157 157 ++152 153 154 152 153 154 152 153 154 149 151 153 149 149 149 147 147 148 147 147 148 145 146 147 ++142 143 144 144 145 144 144 145 144 139 139 139 137 137 137 142 143 144 145 146 147 147 147 148 ++134 134 134 129 129 130 129 129 130 133 133 133 137 137 137 134 134 134 127 127 127 121 121 119 ++117 117 117 127 127 127 134 134 134 125 125 127 115 116 115 109 110 110 109 110 110 127 127 127 ++125 122 126 112 112 113 105 105 105 101 101 101 105 104 105 103 103 102 95 95 94 105 105 105 ++112 112 113 112 112 113 109 110 110 109 110 110 105 105 105 99 99 99 89 89 89 80 80 80 ++78 78 78 92 92 92 99 99 99 95 95 94 94 94 94 93 93 93 83 83 83 70 70 70 ++72 72 72 78 78 78 82 82 82 81 81 81 81 81 81 82 82 82 80 80 80 74 74 74 ++75 75 75 74 74 74 74 74 74 76 76 76 76 76 76 71 71 71 65 65 65 61 61 61 ++63 63 63 59 59 59 58 58 58 58 58 58 59 59 59 60 60 60 59 59 59 61 61 61 ++57 57 57 45 45 45 50 50 50 60 60 60 59 59 59 56 56 56 54 54 54 53 53 53 ++42 42 42 33 33 33 43 43 43 56 56 56 52 52 52 48 48 48 50 50 50 52 52 52 ++50 50 50 31 31 31 23 23 23 20 20 20 20 20 20 37 37 37 48 48 48 40 40 40 ++48 48 48 46 46 46 44 44 44 39 39 39 37 37 37 37 37 37 40 40 40 44 44 44 ++43 43 43 39 39 39 38 38 38 39 39 39 39 39 39 38 38 38 39 39 39 43 43 43 ++39 39 39 38 38 38 39 39 39 38 38 38 37 37 37 42 42 42 33 33 33 13 13 13 ++10 10 10 11 11 11 11 11 11 21 21 21 31 31 31 23 23 23 21 21 21 38 38 38 ++29 29 29 17 17 17 11 11 11 24 24 24 39 39 39 13 13 13 10 10 10 13 13 13 ++25 25 25 33 33 33 28 28 28 16 16 16 10 10 10 10 10 10 20 20 20 37 37 37 ++38 38 38 38 38 38 40 40 40 44 44 44 44 44 44 40 40 40 37 37 37 36 36 36 ++42 42 42 51 51 51 52 52 52 43 43 43 38 38 38 39 39 39 33 33 33 21 21 21 ++21 21 21 33 33 33 37 37 37 38 38 38 45 45 45 50 50 50 46 46 46 42 42 42 ++40 40 40 39 39 39 43 43 43 43 43 43 32 32 32 14 14 14 6 6 6 13 13 13 ++4 4 4 17 17 17 28 28 28 31 31 31 24 24 24 16 16 16 11 11 11 13 13 13 ++4 4 4 11 11 11 11 11 11 8 8 8 16 16 16 31 31 31 39 39 39 39 39 39 ++38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 ++ ++21 21 21 32 32 32 39 39 39 32 32 32 17 17 17 16 16 16 19 19 19 14 14 14 ++14 14 14 20 20 20 31 31 31 37 37 37 28 28 28 10 10 10 0 0 0 0 0 0 ++0 0 0 0 0 0 4 4 4 24 24 24 31 31 31 16 16 16 0 0 0 0 0 0 ++8 8 8 0 0 0 0 0 0 11 11 11 27 27 27 32 32 32 17 17 17 0 0 0 ++0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 13 13 13 11 11 11 0 0 0 0 0 0 6 6 6 3 3 3 ++3 3 3 6 6 6 8 8 8 6 6 6 3 3 3 3 3 3 6 6 6 8 8 8 ++0 0 0 11 11 11 17 17 17 11 11 11 3 3 3 4 4 4 10 10 10 14 14 14 ++3 3 3 20 20 20 33 33 33 33 33 33 24 24 24 16 16 16 14 14 14 16 16 16 ++13 13 13 13 13 13 27 27 27 40 40 40 37 37 37 24 24 24 19 19 19 19 19 19 ++23 23 23 19 19 19 19 19 19 38 38 38 56 56 56 43 43 43 24 24 24 28 28 28 ++27 27 27 44 44 44 71 71 71 49 49 49 49 49 49 72 72 72 52 52 52 42 42 42 ++40 40 40 51 51 51 81 81 81 74 74 74 45 45 45 67 67 67 89 89 89 65 65 65 ++56 56 56 65 65 65 88 88 88 92 92 92 73 73 73 74 74 74 92 92 92 96 96 96 ++75 75 75 87 87 87 88 88 88 117 117 117 115 116 115 85 85 85 90 90 90 88 88 88 ++101 101 101 109 110 110 115 116 115 121 121 119 112 112 113 112 112 113 115 116 115 121 121 119 ++103 103 102 117 117 117 128 128 128 134 134 134 134 134 134 121 121 119 112 112 113 121 121 119 ++128 128 128 129 129 130 139 139 139 144 145 144 142 143 144 137 137 137 137 137 137 137 137 137 ++131 131 131 137 137 137 147 147 148 152 153 154 152 153 154 144 145 144 142 143 144 142 143 144 ++155 156 156 157 157 157 152 153 154 161 161 162 163 163 163 152 153 154 147 147 148 147 147 148 ++152 153 154 152 153 154 161 161 162 169 175 167 166 167 167 161 161 162 157 157 157 157 157 157 ++161 161 162 160 161 160 160 161 160 166 167 167 169 175 167 169 175 167 161 161 162 158 159 161 ++161 161 162 158 159 161 166 167 167 158 159 161 144 145 144 2 8 7 14 20 19 6 13 11 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++6 8 11 8 10 13 26 29 32 231 224 220 238 240 244 238 240 244 246 251 251 238 240 244 ++238 240 244 231 224 220 180 183 185 200 220 210 246 251 251 238 240 244 238 240 244 238 240 244 ++238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 246 251 251 238 240 244 180 183 185 ++157 157 157 169 175 167 147 147 148 163 163 163 149 149 149 157 157 157 152 153 154 152 153 154 ++152 153 154 149 151 153 149 149 149 149 149 149 147 147 148 145 146 147 144 145 144 144 145 144 ++142 143 144 140 140 140 142 143 144 140 140 140 134 134 134 131 131 131 137 138 139 149 149 149 ++142 143 144 133 133 133 125 122 126 125 122 126 133 133 133 137 138 139 133 133 133 125 125 127 ++117 117 117 117 117 117 127 127 127 129 129 130 127 127 127 117 117 117 112 112 113 128 128 128 ++117 117 117 109 110 110 103 103 102 101 101 101 103 103 102 99 99 99 99 99 99 115 116 115 ++115 116 115 112 112 113 109 110 110 105 104 105 101 101 101 92 92 92 83 83 83 74 74 74 ++87 87 87 99 99 99 99 99 99 96 96 96 96 96 96 85 85 85 69 69 69 65 65 65 ++84 84 84 84 84 84 85 85 85 84 84 84 82 82 82 81 81 81 77 77 77 73 73 73 ++75 75 75 74 74 74 72 72 72 66 66 66 51 51 51 38 38 38 38 38 38 46 46 46 ++52 52 52 43 43 43 36 36 36 38 38 38 42 42 42 46 46 46 57 57 57 65 65 65 ++58 58 58 50 50 50 40 40 40 49 49 49 58 58 58 51 51 51 46 46 46 53 53 53 ++39 39 39 16 16 16 28 28 28 52 52 52 51 51 51 44 44 44 48 48 48 50 50 50 ++48 48 48 25 25 25 11 11 11 16 16 16 20 20 20 34 34 34 46 46 46 42 42 42 ++42 42 42 42 42 42 43 43 43 44 44 44 42 42 42 39 39 39 38 38 38 39 39 39 ++44 44 44 40 40 40 38 38 38 39 39 39 38 38 38 37 37 37 38 38 38 42 42 42 ++38 38 38 38 38 38 39 39 39 38 38 38 38 38 38 40 40 40 31 31 31 11 11 11 ++10 10 10 10 10 10 14 14 14 23 23 23 31 31 31 33 33 33 33 33 33 34 34 34 ++16 16 16 10 10 10 14 14 14 33 33 33 38 38 38 8 8 8 14 14 14 28 28 28 ++34 34 34 28 28 28 16 16 16 10 10 10 8 8 8 10 10 10 25 25 25 48 48 48 ++42 42 42 40 40 40 39 39 39 42 42 42 45 45 45 48 48 48 43 43 43 37 37 37 ++39 39 39 50 50 50 53 53 53 46 46 46 40 40 40 42 42 42 39 39 39 32 32 32 ++23 23 23 23 23 23 34 34 34 44 44 44 44 44 44 49 49 49 51 51 51 45 45 45 ++37 37 37 38 38 38 40 40 40 38 38 38 24 24 24 8 8 8 6 6 6 16 16 16 ++11 11 11 28 28 28 34 34 34 24 24 24 13 13 13 13 13 13 13 13 13 10 10 10 ++13 13 13 16 16 16 16 16 16 19 19 19 29 29 29 43 43 43 45 45 45 39 39 39 ++40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 ++ ++24 24 24 16 16 16 33 33 33 43 43 43 25 25 25 17 17 17 21 21 21 14 14 14 ++21 21 21 11 11 11 14 14 14 31 31 31 33 33 33 17 17 17 0 0 0 0 0 0 ++0 0 0 10 10 10 0 0 0 0 0 0 27 27 27 28 28 28 6 6 6 0 0 0 ++0 0 0 8 8 8 4 4 4 0 0 0 6 6 6 28 28 28 29 29 29 14 14 14 ++0 0 0 0 0 0 4 4 4 8 8 8 4 4 4 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 11 11 11 13 13 13 3 3 3 0 0 0 6 6 6 3 3 3 ++3 3 3 6 6 6 11 11 11 13 13 13 8 8 8 0 0 0 0 0 0 3 3 3 ++6 6 6 10 10 10 11 11 11 8 8 8 6 6 6 8 8 8 8 8 8 4 4 4 ++6 6 6 31 31 31 37 37 37 20 20 20 10 10 10 19 19 19 24 24 24 19 19 19 ++4 4 4 21 21 21 46 46 46 42 42 42 13 13 13 13 13 13 27 27 27 17 17 17 ++19 19 19 14 14 14 38 38 38 56 56 56 42 42 42 23 23 23 25 25 25 34 34 34 ++28 28 28 32 32 32 42 42 42 71 71 71 76 76 76 54 54 54 45 45 45 38 38 38 ++46 46 46 50 50 50 52 52 52 68 68 68 87 87 87 80 80 80 61 61 61 57 57 57 ++60 60 60 54 54 54 66 66 66 82 82 82 89 89 89 94 94 94 89 89 89 73 73 73 ++75 75 75 70 70 70 92 92 92 109 110 110 109 110 110 94 94 94 84 84 84 99 99 99 ++105 105 105 94 94 94 93 93 93 112 112 113 122 121 126 125 125 127 112 112 113 99 99 99 ++99 99 99 112 112 113 122 121 126 129 129 130 134 134 134 129 129 130 125 125 127 127 127 127 ++127 127 127 121 121 119 125 125 127 137 138 139 144 145 144 145 146 147 139 139 139 125 125 127 ++133 133 133 131 131 131 137 137 137 147 147 148 155 156 156 152 153 154 144 145 144 139 139 139 ++157 157 157 155 156 156 144 145 144 152 153 154 163 163 163 160 161 160 152 153 154 147 147 148 ++155 156 156 149 149 149 155 156 156 166 167 167 166 167 167 166 167 167 158 159 161 152 153 154 ++157 157 157 161 161 162 161 161 162 161 161 162 169 175 167 169 175 167 166 165 167 155 156 156 ++158 159 161 157 157 157 155 156 156 157 157 157 95 95 94 0 3 0 10 16 15 6 13 11 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++22 23 26 6 8 11 10 11 14 99 99 99 246 251 251 238 240 244 238 240 244 246 251 251 ++238 240 244 238 240 244 238 240 244 200 220 210 246 251 251 238 240 244 246 251 251 238 240 244 ++246 251 251 238 240 244 238 240 244 246 251 251 246 251 251 238 240 244 238 240 244 246 251 251 ++166 165 167 149 149 149 149 151 153 157 157 157 149 151 153 149 149 149 157 157 157 147 147 148 ++149 149 149 149 149 149 147 147 148 147 147 148 145 146 147 144 145 144 144 145 144 144 145 144 ++142 143 144 137 137 137 137 137 137 140 140 140 139 139 139 133 133 133 133 133 133 137 138 139 ++145 146 147 140 140 140 129 129 130 122 121 126 125 125 127 133 133 133 134 134 134 133 133 133 ++121 121 119 115 116 115 115 116 115 125 122 126 129 129 130 128 128 128 125 125 127 129 129 130 ++112 112 113 105 104 105 103 103 102 103 103 102 101 101 101 96 97 98 103 103 102 117 117 117 ++115 116 115 112 112 113 109 110 110 101 101 101 92 92 92 84 84 84 80 80 80 77 77 77 ++95 95 94 94 94 94 94 94 94 99 99 99 93 93 93 74 74 74 67 67 67 78 78 78 ++85 85 85 84 84 84 87 87 87 87 87 87 78 78 78 75 75 75 77 77 77 78 78 78 ++75 75 75 67 67 67 57 57 57 51 51 51 42 42 42 37 37 37 49 49 49 66 66 66 ++68 68 68 58 58 58 48 48 48 48 48 48 42 42 42 37 37 37 46 46 46 48 48 48 ++57 57 57 57 57 57 45 45 45 46 46 46 56 56 56 58 58 58 54 54 54 48 48 48 ++48 48 48 21 21 21 31 31 31 56 56 56 56 56 56 51 51 51 56 56 56 53 53 53 ++57 57 57 36 36 36 17 17 17 24 24 24 29 29 29 37 37 37 48 48 48 43 43 43 ++42 42 42 40 40 40 40 40 40 42 42 42 40 40 40 38 38 38 38 38 38 40 40 40 ++43 43 43 42 42 42 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 ++40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 39 39 39 28 28 28 13 13 13 ++20 20 20 8 8 8 13 13 13 27 27 27 34 34 34 38 38 38 32 32 32 17 17 17 ++13 13 13 14 14 14 20 20 20 36 36 36 34 34 34 14 14 14 25 25 25 42 42 42 ++27 27 27 17 17 17 11 11 11 13 13 13 11 11 11 8 8 8 25 25 25 49 49 49 ++43 43 43 44 44 44 42 42 42 40 40 40 45 45 45 51 51 51 51 51 51 46 46 46 ++38 38 38 37 37 37 39 39 39 45 45 45 45 45 45 39 39 39 38 38 38 42 42 42 ++25 25 25 17 17 17 20 20 20 32 32 32 37 37 37 40 40 40 44 44 44 43 43 43 ++48 48 48 43 43 43 37 37 37 28 28 28 17 17 17 10 10 10 11 11 11 17 17 17 ++28 28 28 31 31 31 24 24 24 10 10 10 6 6 6 16 16 16 17 17 17 10 10 10 ++16 16 16 10 10 10 16 16 16 31 31 31 39 39 39 39 39 39 37 37 37 38 38 38 ++38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 ++ ++16 16 16 23 23 23 19 19 19 27 27 27 43 43 43 32 32 32 13 13 13 21 21 21 ++20 20 20 21 21 21 14 14 14 6 6 6 16 16 16 28 28 28 20 20 20 0 0 0 ++0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 20 20 20 31 31 31 10 10 10 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 14 14 28 28 28 32 32 32 ++8 8 8 0 0 0 0 0 0 6 6 6 8 8 8 0 0 0 0 0 0 6 6 6 ++3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 4 4 4 8 8 8 10 10 10 10 10 10 8 8 8 6 6 6 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 10 10 10 13 13 13 4 4 4 0 0 0 4 4 4 3 3 3 ++3 3 3 4 4 4 8 8 8 10 10 10 8 8 8 4 4 4 6 6 6 10 10 10 ++16 16 16 11 11 11 8 8 8 8 8 8 6 6 6 3 3 3 3 3 3 6 6 6 ++34 34 34 33 33 33 20 20 20 3 3 3 10 10 10 27 27 27 23 23 23 0 0 0 ++16 16 16 44 44 44 38 38 38 14 14 14 14 14 14 17 17 17 14 14 14 21 21 21 ++16 16 16 38 38 38 54 54 54 42 42 42 19 19 19 25 25 25 37 37 37 28 28 28 ++32 32 32 33 33 33 40 40 40 70 70 70 75 75 75 53 53 53 45 45 45 42 42 42 ++48 48 48 43 43 43 45 45 45 69 69 69 90 90 90 78 78 78 54 54 54 51 51 51 ++59 59 59 63 63 63 56 56 56 68 68 68 99 99 99 99 99 99 73 73 73 66 66 66 ++77 77 77 87 87 87 96 96 96 87 87 87 91 91 91 109 110 110 109 110 110 103 103 102 ++99 99 99 84 84 84 87 87 87 105 105 105 121 121 119 125 122 126 115 116 115 99 99 99 ++112 112 113 117 117 117 115 116 115 112 112 113 125 125 127 137 137 137 134 134 134 128 128 128 ++121 121 119 115 116 115 121 121 119 131 131 131 139 139 139 145 146 147 144 145 144 131 131 131 ++131 131 131 129 129 130 129 129 130 137 137 137 145 146 147 152 153 154 149 151 153 144 145 144 ++157 157 157 155 156 156 140 140 140 142 143 144 155 156 156 161 161 162 161 161 162 152 153 154 ++149 151 153 149 149 149 157 157 157 163 163 163 166 165 167 166 167 167 163 163 163 157 157 157 ++152 153 154 158 159 161 157 157 157 158 159 161 166 167 167 169 175 167 166 167 167 163 163 163 ++157 157 157 157 157 157 157 157 157 134 134 134 38 40 39 10 16 15 6 13 11 6 13 11 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++1 3 7 20 21 24 14 16 19 6 8 11 180 183 185 238 240 244 238 240 244 238 240 244 ++238 240 244 238 240 244 231 224 220 180 183 185 180 183 185 200 220 210 238 240 244 238 240 244 ++238 240 244 238 240 244 246 251 251 238 240 244 238 240 244 246 251 251 246 251 251 238 240 244 ++180 183 185 147 147 148 157 157 157 147 147 148 149 149 149 157 157 157 142 143 144 152 153 154 ++147 147 148 147 147 148 145 146 147 144 145 144 144 145 144 142 143 144 142 143 144 142 143 144 ++140 140 140 137 137 137 137 137 137 137 138 139 139 139 139 137 137 137 131 131 131 129 129 130 ++137 137 137 142 143 144 142 143 144 129 129 130 121 121 119 121 121 119 128 128 128 133 133 133 ++128 128 128 117 117 117 109 110 110 112 112 113 125 122 126 129 129 130 129 129 130 122 121 126 ++105 105 105 103 103 102 103 103 102 105 104 105 101 101 101 96 97 98 105 105 105 115 116 115 ++109 110 110 112 112 113 109 110 110 99 99 99 85 85 85 78 78 78 82 82 82 87 87 87 ++103 103 102 93 93 93 93 93 93 93 93 93 78 78 78 69 69 69 78 78 78 92 92 92 ++82 82 82 80 80 80 87 87 87 88 88 88 82 82 82 78 78 78 81 81 81 77 77 77 ++71 71 71 53 53 53 42 42 42 50 50 50 60 60 60 63 63 63 62 62 62 65 65 65 ++65 65 65 60 60 60 54 54 54 58 58 58 46 46 46 33 33 33 38 38 38 29 29 29 ++43 43 43 42 42 42 38 38 38 45 45 45 45 45 45 51 51 51 57 57 57 36 36 36 ++42 42 42 24 24 24 29 29 29 42 42 42 40 40 40 40 40 40 43 43 43 36 36 36 ++39 39 39 32 32 32 23 23 23 32 32 32 33 33 33 32 32 32 44 44 44 43 43 43 ++48 48 48 38 38 38 28 28 28 25 25 25 25 25 25 28 28 28 36 36 36 45 45 45 ++39 39 39 40 40 40 42 42 42 43 43 43 43 43 43 43 43 43 42 42 42 39 39 39 ++42 42 42 43 43 43 42 42 42 40 40 40 40 40 40 37 37 37 25 25 25 14 14 14 ++21 21 21 8 8 8 17 17 17 34 34 34 37 37 37 32 32 32 23 23 23 4 4 4 ++13 13 13 16 16 16 17 17 17 34 34 34 36 36 36 31 31 31 33 33 33 33 33 33 ++14 14 14 10 10 10 11 11 11 17 17 17 11 11 11 10 10 10 25 25 25 45 45 45 ++42 42 42 45 45 45 44 44 44 38 38 38 37 37 37 44 44 44 49 49 49 50 50 50 ++43 43 43 37 37 37 39 39 39 50 50 50 54 54 54 49 49 49 43 43 43 42 42 42 ++40 40 40 29 29 29 19 19 19 24 24 24 38 38 38 42 42 42 42 42 42 49 49 49 ++54 54 54 49 49 49 37 37 37 21 21 21 10 10 10 10 10 10 16 16 16 21 21 21 ++33 33 33 24 24 24 13 13 13 6 6 6 11 11 11 16 16 16 16 16 16 11 11 11 ++13 13 13 14 14 14 25 25 25 39 39 39 44 44 44 40 40 40 38 38 38 42 42 42 ++39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 ++ ++14 14 14 20 20 20 17 17 17 19 19 19 33 33 33 39 39 39 29 29 29 19 19 19 ++11 11 11 11 11 11 4 4 4 0 0 0 6 6 6 20 20 20 27 27 27 24 24 24 ++0 0 0 0 0 0 4 4 4 8 8 8 0 0 0 3 3 3 19 19 19 28 28 28 ++13 13 13 0 0 0 0 0 0 4 4 4 3 3 3 0 0 0 4 4 4 23 23 23 ++28 28 28 10 10 10 0 0 0 0 0 0 4 4 4 3 3 3 0 0 0 0 0 0 ++4 4 4 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++10 10 10 11 11 11 14 14 14 17 17 17 17 17 17 17 17 17 16 16 16 14 14 14 ++16 16 16 13 13 13 8 8 8 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 8 8 8 13 13 13 4 4 4 0 0 0 4 4 4 3 3 3 ++4 4 4 0 0 0 0 0 0 0 0 0 6 6 6 14 14 14 19 19 19 19 19 19 ++8 8 8 6 6 6 4 4 4 4 4 4 3 3 3 4 4 4 17 17 17 29 29 29 ++34 34 34 20 20 20 8 8 8 10 10 10 19 19 19 21 21 21 19 19 19 14 14 14 ++45 45 45 33 33 33 14 14 14 6 6 6 17 17 17 21 21 21 17 17 17 16 16 16 ++36 36 36 50 50 50 40 40 40 21 21 21 24 24 24 31 31 31 28 28 28 27 27 27 ++34 34 34 45 45 45 68 68 68 46 46 46 46 46 46 69 69 69 52 52 52 49 49 49 ++42 42 42 38 38 38 68 68 68 75 75 75 53 53 53 65 65 65 80 80 80 54 54 54 ++56 56 56 53 53 53 71 71 71 85 85 85 82 82 82 87 87 87 91 91 91 81 81 81 ++84 84 84 101 101 101 80 80 80 75 75 75 85 85 85 99 99 99 121 121 119 101 101 101 ++85 85 85 87 87 87 103 103 102 109 110 110 109 110 110 109 110 110 121 121 119 121 121 119 ++117 117 117 115 116 115 105 105 105 101 101 101 115 116 115 133 133 133 137 137 137 128 128 128 ++112 112 113 121 121 119 128 128 128 128 128 128 128 128 128 134 134 134 144 145 144 147 147 148 ++131 131 131 131 131 131 129 129 130 129 129 130 134 134 134 144 145 144 152 153 154 155 156 156 ++155 156 156 157 157 157 142 143 144 137 138 139 144 145 144 152 153 154 161 161 162 161 161 162 ++145 146 147 149 151 153 161 161 162 163 163 163 157 157 157 158 159 161 166 165 167 166 167 167 ++157 157 157 152 153 154 152 153 154 161 161 162 166 167 167 166 167 167 166 165 167 169 175 167 ++160 161 160 152 153 154 161 161 162 85 85 85 2 8 7 14 20 19 10 16 15 2 8 7 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++6 8 11 6 8 11 14 16 19 10 11 14 46 47 50 231 224 220 238 240 244 246 251 251 ++246 251 251 246 251 251 238 240 244 238 240 244 200 220 210 231 224 220 246 251 251 238 240 244 ++238 240 244 252 251 251 238 240 244 238 240 244 246 251 251 238 240 244 238 240 244 200 220 210 ++231 224 220 200 220 210 147 147 148 145 146 147 152 153 154 152 153 154 142 143 144 152 153 154 ++145 146 147 144 145 144 144 145 144 144 145 144 142 143 144 140 140 140 140 140 140 140 140 140 ++137 138 139 139 139 139 137 137 137 134 134 134 133 133 133 133 133 133 131 131 131 129 129 130 ++125 122 126 134 134 134 142 143 144 137 137 137 125 122 126 115 116 115 117 117 117 121 121 119 ++133 133 133 127 127 127 115 116 115 115 116 115 121 121 119 129 129 130 129 129 130 115 116 115 ++105 104 105 103 103 102 101 101 101 103 103 102 99 99 99 99 99 99 109 110 110 109 110 110 ++105 105 105 109 110 110 105 105 105 94 94 94 80 80 80 76 76 76 85 85 85 96 96 96 ++101 101 101 99 99 99 96 96 96 82 82 82 65 65 65 73 73 73 91 91 91 91 91 91 ++83 83 83 77 77 77 83 83 83 88 88 88 85 85 85 85 85 85 80 80 80 65 65 65 ++53 53 53 49 49 49 53 53 53 65 65 65 69 69 69 59 59 59 43 43 43 32 32 32 ++33 33 33 32 32 32 27 27 27 34 34 34 28 28 28 27 27 27 45 45 45 36 36 36 ++25 25 25 16 16 16 23 23 23 40 40 40 32 32 32 33 33 33 50 50 50 24 24 24 ++24 24 24 17 17 17 16 16 16 16 16 16 11 11 11 11 11 11 13 13 13 8 8 8 ++6 6 6 23 23 23 25 25 25 33 33 33 25 25 25 17 17 17 38 38 38 43 43 43 ++42 42 42 29 29 29 19 19 19 17 17 17 17 17 17 19 19 19 27 27 27 36 36 36 ++37 37 37 39 39 39 40 40 40 38 38 38 38 38 38 39 39 39 38 38 38 34 34 34 ++37 37 37 39 39 39 36 36 36 34 34 34 37 37 37 32 32 32 21 21 21 16 16 16 ++14 14 14 13 13 13 28 28 28 38 38 38 29 29 29 19 19 19 16 16 16 10 10 10 ++13 13 13 11 11 11 8 8 8 33 33 33 38 38 38 38 38 38 29 29 29 10 10 10 ++10 10 10 8 8 8 13 13 13 13 13 13 8 8 8 14 14 14 31 31 31 39 39 39 ++46 46 46 51 51 51 51 51 51 44 44 44 39 39 39 40 40 40 48 48 48 53 53 53 ++49 49 49 45 45 45 39 39 39 37 37 37 43 43 43 48 48 48 43 43 43 34 34 34 ++37 37 37 33 33 33 27 27 27 32 32 32 43 43 43 40 40 40 33 33 33 37 37 37 ++39 39 39 40 40 40 33 33 33 17 17 17 8 8 8 16 16 16 28 28 28 33 33 33 ++23 23 23 16 16 16 13 13 13 16 16 16 16 16 16 13 13 13 11 11 11 14 14 14 ++14 14 14 27 27 27 36 36 36 34 34 34 33 33 33 36 36 36 34 34 34 29 29 29 ++34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 ++ ++20 20 20 10 10 10 21 21 21 25 25 25 14 14 14 29 29 29 40 40 40 23 23 23 ++10 10 10 0 0 0 0 0 0 4 4 4 6 6 6 0 0 0 17 17 17 38 38 38 ++8 8 8 16 16 16 0 0 0 0 0 0 11 11 11 0 0 0 0 0 0 24 24 24 ++28 28 28 13 13 13 3 3 3 6 6 6 4 4 4 0 0 0 0 0 0 3 3 3 ++23 23 23 20 20 20 10 10 10 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 8 8 8 10 10 10 ++17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 ++20 20 20 19 19 19 16 16 16 13 13 13 8 8 8 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 6 6 6 13 13 13 6 6 6 0 0 0 4 4 4 3 3 3 ++6 6 6 3 3 3 0 0 0 0 0 0 10 10 10 23 23 23 23 23 23 13 13 13 ++0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 19 19 19 31 31 31 36 36 36 ++3 3 3 0 0 0 4 4 4 17 17 17 20 20 20 20 20 20 29 29 29 44 44 44 ++44 44 44 10 10 10 6 6 6 19 19 19 11 11 11 16 16 16 31 31 31 25 25 25 ++48 48 48 36 36 36 19 19 19 23 23 23 33 33 33 25 25 25 20 20 20 34 34 34 ++42 42 42 65 65 65 46 46 46 38 38 38 37 37 37 45 45 45 69 69 69 52 52 52 ++40 40 40 69 69 69 70 70 70 52 52 52 52 52 52 61 61 61 69 69 69 82 82 82 ++63 63 63 52 52 52 84 84 84 96 96 96 67 67 67 77 77 77 105 104 105 92 92 92 ++103 103 102 82 82 82 88 88 88 82 82 82 90 90 90 105 105 105 96 97 98 112 112 113 ++90 90 90 93 93 93 109 110 110 101 101 101 91 91 91 94 94 94 117 117 117 125 125 127 ++115 116 115 105 104 105 99 99 99 105 105 105 117 117 117 125 122 126 129 129 130 137 137 137 ++127 127 127 128 128 128 127 127 127 121 121 119 121 121 119 125 125 127 134 134 134 147 147 148 ++140 140 140 134 134 134 131 131 131 129 129 130 131 131 131 137 137 137 144 145 144 152 153 154 ++155 156 156 157 157 157 144 145 144 139 139 139 140 140 140 142 143 144 152 153 154 157 157 157 ++152 153 154 152 153 154 158 159 161 163 163 163 157 157 157 152 153 154 157 157 157 161 161 162 ++161 161 162 155 156 156 149 151 153 158 159 161 166 167 167 166 165 167 160 161 160 166 165 167 ++161 161 162 155 156 156 139 139 139 32 34 33 4 4 4 10 16 15 6 13 11 6 13 11 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++10 11 14 16 20 21 0 0 4 14 16 19 24 25 28 118 122 119 238 240 244 238 240 244 ++238 240 244 238 240 244 238 240 244 246 251 251 200 220 210 180 183 185 200 220 210 238 240 244 ++238 240 244 246 251 251 238 240 244 246 251 251 238 240 244 200 220 210 200 220 210 238 240 244 ++238 240 244 246 251 251 169 175 167 142 143 144 152 153 154 140 140 140 149 149 149 147 147 148 ++144 145 144 144 145 144 144 145 144 142 143 144 140 140 140 140 140 140 139 139 139 137 138 139 ++137 137 137 137 137 137 134 134 134 133 133 133 129 129 130 128 128 128 128 128 128 129 129 130 ++122 121 126 125 125 127 129 129 130 133 133 133 129 129 130 122 121 126 117 117 117 115 116 115 ++127 127 127 128 128 128 127 127 127 128 128 128 127 127 127 127 127 127 127 127 127 109 110 110 ++103 103 102 105 104 105 99 99 99 99 99 99 96 96 96 103 103 102 115 116 115 105 105 105 ++105 105 105 105 105 105 101 101 101 88 88 88 77 77 77 77 77 77 88 88 88 99 99 99 ++96 97 98 101 101 101 92 92 92 71 71 71 66 66 66 82 82 82 92 92 92 87 87 87 ++87 87 87 80 80 80 81 81 81 80 80 80 73 73 73 76 76 76 72 72 72 52 52 52 ++44 44 44 58 58 58 72 72 72 75 75 75 63 63 63 45 45 45 32 32 32 28 28 28 ++25 25 25 28 28 28 19 19 19 23 23 23 16 16 16 25 25 25 52 52 52 42 42 42 ++25 25 25 25 25 25 29 29 29 39 39 39 24 24 24 29 29 29 50 50 50 23 23 23 ++17 17 17 21 21 21 19 19 19 11 11 11 8 8 8 6 6 6 10 10 10 20 20 20 ++27 27 27 43 43 43 37 37 37 34 34 34 21 21 21 13 13 13 38 38 38 43 43 43 ++33 33 33 23 23 23 17 17 17 21 21 21 21 21 21 17 17 17 17 17 17 24 24 24 ++34 34 34 37 37 37 34 34 34 29 29 29 27 27 27 29 29 29 29 29 29 25 25 25 ++27 27 27 29 29 29 25 25 25 25 25 25 31 31 31 25 25 25 16 16 16 14 14 14 ++16 16 16 25 25 25 36 36 36 31 31 31 17 17 17 11 11 11 13 13 13 14 14 14 ++13 13 13 13 13 13 13 13 13 38 38 38 33 33 33 28 28 28 19 19 19 4 4 4 ++11 11 11 11 11 11 14 14 14 10 10 10 10 10 10 27 27 27 37 37 37 29 29 29 ++14 14 14 17 17 17 19 19 19 19 19 19 13 13 13 11 11 11 17 17 17 24 24 24 ++42 42 42 34 34 34 23 23 23 16 16 16 17 17 17 24 24 24 27 27 27 24 24 24 ++17 17 17 19 19 19 28 28 28 33 33 33 29 29 29 24 24 24 20 20 20 14 14 14 ++20 20 20 25 25 25 21 21 21 13 13 13 14 14 14 25 25 25 32 32 32 32 32 32 ++14 14 14 11 11 11 13 13 13 17 17 17 16 16 16 11 11 11 11 11 11 14 14 14 ++21 21 21 28 28 28 28 28 28 21 21 21 17 17 17 20 20 20 20 20 20 14 14 14 ++21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 ++ ++14 14 14 23 23 23 19 19 19 19 19 19 23 23 23 17 17 17 21 21 21 44 44 44 ++11 11 11 8 8 8 4 4 4 0 0 0 0 0 0 0 0 0 6 6 6 19 19 19 ++40 40 40 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 ++21 21 21 19 19 19 8 8 8 0 0 0 0 0 0 4 4 4 6 6 6 0 0 0 ++0 0 0 23 23 23 28 28 28 10 10 10 0 0 0 0 0 0 6 6 6 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 13 13 13 16 16 16 ++21 21 21 19 19 19 16 16 16 13 13 13 11 11 11 11 11 11 13 13 13 14 14 14 ++19 19 19 19 19 19 20 20 20 19 19 19 16 16 16 10 10 10 4 4 4 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 4 4 4 13 13 13 6 6 6 0 0 0 4 4 4 3 3 3 ++6 6 6 6 6 6 3 3 3 3 3 3 17 17 17 28 28 28 19 19 19 0 0 0 ++3 3 3 8 8 8 6 6 6 3 3 3 14 14 14 31 31 31 31 31 31 19 19 19 ++10 10 10 13 13 13 14 14 14 13 13 13 13 13 13 20 20 20 29 29 29 37 37 37 ++4 4 4 14 14 14 14 14 14 14 14 14 17 17 17 11 11 11 23 23 23 52 52 52 ++39 39 39 20 20 20 20 20 20 28 28 28 23 23 23 23 23 23 32 32 32 36 36 36 ++70 70 70 39 39 39 29 29 29 32 32 32 36 36 36 37 37 37 43 43 43 69 69 69 ++71 71 71 69 69 69 57 57 57 49 49 49 54 54 54 59 59 59 70 70 70 89 89 89 ++85 85 85 94 94 94 93 93 93 90 90 90 91 91 91 90 90 90 93 93 93 105 104 105 ++105 104 105 101 101 101 92 92 92 103 103 102 105 105 105 103 103 102 109 110 110 109 110 110 ++117 117 117 109 110 110 109 110 110 96 96 96 91 91 91 99 99 99 121 121 119 117 117 117 ++129 129 130 112 112 113 109 110 110 122 121 126 121 121 119 105 105 105 109 110 110 127 127 127 ++144 145 144 131 131 131 115 116 115 112 112 113 121 121 119 121 121 119 122 121 126 134 134 134 ++152 153 154 139 139 139 129 129 130 131 131 131 133 133 133 131 131 131 134 134 134 144 145 144 ++157 157 157 155 156 156 140 140 140 140 140 140 142 143 144 139 139 139 144 145 144 149 149 149 ++166 167 167 155 156 156 155 156 156 163 163 163 157 157 157 149 149 149 147 147 148 149 149 149 ++166 167 167 163 163 163 155 156 156 155 156 156 166 165 167 166 167 167 157 157 157 149 151 153 ++161 161 162 158 159 161 103 103 102 0 3 0 10 13 11 20 21 24 2 8 7 10 16 15 ++10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 10 11 14 ++14 16 19 6 8 11 16 20 21 8 10 13 43 44 47 43 44 47 180 183 185 238 240 244 ++246 251 251 246 251 251 246 251 251 238 240 244 238 240 244 180 183 185 187 210 182 231 246 232 ++238 240 244 238 240 244 246 251 251 231 224 220 200 220 210 238 240 244 238 240 244 238 240 244 ++246 251 251 238 240 244 231 224 220 129 129 130 144 145 144 144 145 144 142 143 144 149 149 149 ++144 145 144 144 145 144 142 143 144 140 140 140 140 140 140 139 139 139 137 138 139 137 137 137 ++137 137 137 133 133 133 129 129 130 133 133 133 133 133 133 128 128 128 127 127 127 127 127 127 ++129 129 130 121 121 119 117 117 117 127 127 127 134 134 134 133 133 133 121 121 119 112 112 113 ++109 110 110 121 121 119 128 128 128 134 134 134 127 127 127 117 117 117 121 121 119 105 105 105 ++103 103 102 105 104 105 96 97 98 94 94 94 94 94 94 105 104 105 117 117 117 105 105 105 ++109 110 110 103 103 102 94 94 94 84 84 84 77 77 77 80 80 80 90 90 90 99 99 99 ++93 93 93 96 97 98 83 83 83 68 68 68 75 75 75 87 87 87 87 87 87 87 87 87 ++90 90 90 83 83 83 80 80 80 68 68 68 53 53 53 59 59 59 63 63 63 49 49 49 ++58 58 58 68 68 68 74 74 74 66 66 66 48 48 48 33 33 33 28 28 28 28 28 28 ++21 21 21 31 31 31 27 27 27 31 31 31 23 23 23 29 29 29 52 52 52 34 34 34 ++25 25 25 42 42 42 39 39 39 29 29 29 10 10 10 25 25 25 48 48 48 10 10 10 ++10 10 10 21 21 21 19 19 19 14 14 14 14 14 14 11 11 11 17 17 17 38 38 38 ++40 40 40 48 48 48 25 25 25 17 17 17 13 13 13 17 17 17 45 45 45 46 46 46 ++37 37 37 25 25 25 19 19 19 21 21 21 23 23 23 17 17 17 19 19 19 25 25 25 ++34 34 34 34 34 34 29 29 29 20 20 20 17 17 17 20 20 20 21 21 21 19 19 19 ++17 17 17 20 20 20 16 16 16 16 16 16 24 24 24 20 20 20 11 11 11 14 14 14 ++25 25 25 38 38 38 38 38 38 21 21 21 8 8 8 11 11 11 13 13 13 10 10 10 ++13 13 13 17 17 17 24 24 24 45 45 45 24 24 24 10 10 10 13 13 13 20 20 20 ++11 11 11 13 13 13 14 14 14 10 10 10 17 17 17 38 38 38 40 40 40 19 19 19 ++16 16 16 16 16 16 20 20 20 27 27 27 28 28 28 24 24 24 27 27 27 33 33 33 ++38 38 38 27 27 27 23 23 23 28 28 28 27 27 27 19 19 19 20 20 20 31 31 31 ++29 29 29 25 25 25 38 38 38 37 37 37 16 16 16 17 17 17 32 32 32 27 27 27 ++20 20 20 20 20 20 14 14 14 10 10 10 20 20 20 31 31 31 24 24 24 10 10 10 ++16 16 16 13 13 13 10 10 10 10 10 10 11 11 11 14 14 14 14 14 14 13 13 13 ++42 42 42 33 33 33 28 28 28 31 31 31 31 31 31 28 28 28 29 29 29 36 36 36 ++29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 ++ ++28 28 28 14 14 14 17 17 17 20 20 20 6 6 6 4 4 4 13 13 13 13 13 13 ++48 48 48 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++14 14 14 37 37 37 21 21 21 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 ++0 0 0 21 21 21 27 27 27 11 11 11 0 0 0 0 0 0 6 6 6 4 4 4 ++3 3 3 4 4 4 16 16 16 25 25 25 16 16 16 0 0 0 0 0 0 8 8 8 ++0 0 0 3 3 3 3 3 3 0 0 0 3 3 3 11 11 11 17 17 17 17 17 17 ++19 19 19 11 11 11 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 ++6 6 6 0 0 0 0 0 0 11 11 11 23 23 23 20 20 20 6 6 6 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++6 6 6 0 0 0 0 0 0 11 11 11 14 14 14 8 8 8 3 3 3 3 3 3 ++6 6 6 0 0 0 6 6 6 29 29 29 25 25 25 8 8 8 3 3 3 3 3 3 ++10 10 10 10 10 10 0 0 0 11 11 11 33 33 33 33 33 33 11 11 11 0 0 0 ++8 8 8 3 3 3 8 8 8 17 17 17 21 21 21 19 19 19 14 14 14 14 14 14 ++16 16 16 6 6 6 16 16 16 17 17 17 11 11 11 34 34 34 53 53 53 43 43 43 ++21 21 21 28 28 28 24 24 24 21 21 21 27 27 27 28 28 28 39 39 39 65 65 65 ++36 36 36 36 36 36 34 34 34 32 32 32 33 33 33 37 37 37 43 43 43 48 48 48 ++76 76 76 74 74 74 72 72 72 73 73 73 76 76 76 81 81 81 82 82 82 83 83 83 ++93 93 93 89 89 89 87 87 87 88 88 88 91 91 91 95 95 94 96 97 98 96 96 96 ++105 104 105 105 105 105 105 104 105 103 103 102 101 101 101 101 101 101 105 104 105 105 105 105 ++109 110 110 121 121 119 115 116 115 109 110 110 112 112 113 117 117 117 112 112 113 109 110 110 ++115 116 115 127 127 127 127 127 127 112 112 113 103 103 102 105 104 105 112 112 113 117 117 117 ++127 127 127 134 134 134 131 131 131 117 117 117 112 112 113 122 121 126 127 127 127 121 121 119 ++133 133 133 147 147 148 147 147 148 133 133 133 122 121 126 129 129 130 137 137 137 137 137 137 ++149 151 153 157 157 157 152 153 154 137 137 137 140 140 140 134 134 134 142 143 144 142 143 144 ++145 146 147 152 153 154 163 163 163 161 161 162 161 161 162 144 145 144 145 146 147 147 147 148 ++149 149 149 158 159 161 166 167 167 157 157 157 163 163 163 166 165 167 161 161 162 149 149 149 ++145 146 147 152 153 154 37 39 42 6 8 11 14 16 19 14 16 19 10 11 14 6 8 11 ++10 11 14 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 14 16 19 ++11 11 11 11 11 11 8 8 8 24 24 24 48 48 48 52 52 52 73 73 73 231 224 220 ++238 240 244 246 251 251 238 240 244 238 240 244 238 240 244 238 240 244 200 220 210 238 240 244 ++246 251 251 231 224 220 200 220 210 231 224 220 238 240 244 238 240 244 238 240 244 238 240 244 ++252 251 251 200 220 210 160 161 160 147 147 148 144 145 144 137 137 137 144 145 144 144 145 144 ++142 143 144 140 140 140 140 140 140 140 140 140 137 138 139 137 137 137 137 137 137 137 137 137 ++134 134 134 133 133 133 129 129 130 129 129 130 128 128 128 127 127 127 125 125 127 122 121 126 ++121 121 119 121 121 119 121 121 119 121 121 119 121 121 119 133 133 133 131 131 131 115 116 115 ++115 116 115 125 125 127 127 127 127 127 127 127 128 128 128 125 122 126 112 112 113 105 105 105 ++101 101 101 101 101 101 99 99 99 96 97 98 101 101 101 109 110 110 112 112 113 109 110 110 ++109 110 110 105 105 105 87 87 87 81 81 81 81 81 81 83 83 83 96 97 98 101 101 101 ++96 97 98 87 87 87 72 72 72 73 73 73 87 87 87 85 85 85 77 77 77 81 81 81 ++66 66 66 82 82 82 90 90 90 57 57 57 46 46 46 46 46 46 50 50 50 48 48 48 ++68 68 68 57 57 57 68 68 68 75 75 75 69 69 69 56 56 56 32 32 32 21 21 21 ++27 27 27 23 23 23 25 25 25 27 27 27 19 19 19 16 16 16 51 51 51 33 33 33 ++37 37 37 43 43 43 20 20 20 13 13 13 21 21 21 36 36 36 46 46 46 16 16 16 ++13 13 13 20 20 20 21 21 21 14 14 14 16 16 16 29 29 29 42 42 42 45 45 45 ++49 49 49 43 43 43 17 17 17 19 19 19 17 17 17 20 20 20 45 45 45 40 40 40 ++38 38 38 25 25 25 17 17 17 21 21 21 23 23 23 20 20 20 23 23 23 32 32 32 ++36 36 36 36 36 36 34 34 34 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 ++36 36 36 32 32 32 36 36 36 38 38 38 44 44 44 38 38 38 20 20 20 24 24 24 ++45 45 45 25 25 25 17 17 17 29 29 29 13 13 13 16 16 16 11 11 11 4 4 4 ++13 13 13 28 28 28 44 44 44 50 50 50 17 17 17 11 11 11 10 10 10 8 8 8 ++14 14 14 10 10 10 8 8 8 27 27 27 33 33 33 38 38 38 51 51 51 50 50 50 ++40 40 40 34 34 34 34 34 34 44 44 44 52 52 52 49 49 49 40 40 40 34 34 34 ++37 37 37 42 42 42 50 50 50 53 53 53 45 45 45 36 36 36 37 37 37 44 44 44 ++44 44 44 44 44 44 39 39 39 28 28 28 20 20 20 25 25 25 42 42 42 54 54 54 ++42 42 42 21 21 21 11 11 11 25 25 25 33 33 33 24 24 24 13 13 13 13 13 13 ++11 11 11 10 10 10 13 13 13 14 14 14 8 8 8 4 4 4 19 19 19 36 36 36 ++38 38 38 39 39 39 39 39 39 40 40 40 40 40 40 40 40 40 40 40 40 39 39 39 ++40 40 40 39 39 39 38 38 38 37 37 37 37 37 37 37 37 37 38 38 38 38 38 38 ++ ++46 46 46 36 36 36 13 13 13 4 4 4 10 10 10 0 0 0 0 0 0 8 8 8 ++10 10 10 48 48 48 4 4 4 3 3 3 0 0 0 0 0 0 3 3 3 0 0 0 ++0 0 0 21 21 21 36 36 36 19 19 19 0 0 0 0 0 0 8 8 8 3 3 3 ++0 0 0 0 0 0 16 16 16 24 24 24 19 19 19 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 8 8 8 19 19 19 24 24 24 20 20 20 8 8 8 0 0 0 ++3 3 3 4 4 4 0 0 0 0 0 0 3 3 3 19 19 19 23 23 23 17 17 17 ++10 10 10 4 4 4 0 0 0 0 0 0 6 6 6 11 11 11 13 13 13 11 11 11 ++8 8 8 10 10 10 6 6 6 6 6 6 14 14 14 19 19 19 11 11 11 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 0 0 0 8 8 8 13 13 13 11 11 11 10 10 10 ++0 0 0 4 4 4 24 24 24 31 31 31 17 17 17 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 10 10 10 28 28 28 31 31 31 20 20 20 10 10 10 6 6 6 ++13 13 13 10 10 10 10 10 10 16 16 16 20 20 20 19 19 19 11 11 11 6 6 6 ++8 8 8 21 21 21 14 14 14 3 3 3 25 25 25 49 49 49 42 42 42 20 20 20 ++27 27 27 14 14 14 23 23 23 25 25 25 17 17 17 36 36 36 53 53 53 42 42 42 ++32 32 32 31 31 31 29 29 29 32 32 32 40 40 40 54 54 54 69 69 69 80 80 80 ++76 76 76 77 77 77 78 78 78 78 78 78 78 78 78 81 81 81 83 83 83 85 85 85 ++87 87 87 89 89 89 89 89 89 87 87 87 89 89 89 96 96 96 96 96 96 92 92 92 ++92 92 92 96 97 98 103 103 102 103 103 102 101 101 101 101 101 101 105 105 105 112 112 113 ++109 110 110 115 116 115 115 116 115 112 112 113 117 117 117 117 117 117 112 112 113 115 116 115 ++121 121 119 128 128 128 127 127 127 115 116 115 103 103 102 105 105 105 115 116 115 121 121 119 ++112 112 113 122 121 126 133 133 133 129 129 130 121 121 119 115 116 115 117 117 117 122 121 126 ++125 125 127 134 134 134 144 145 144 140 140 140 131 131 131 128 128 128 131 131 131 137 138 139 ++149 149 149 149 149 149 152 153 154 147 147 148 147 147 148 131 131 131 134 134 134 144 145 144 ++140 140 140 145 146 147 157 157 157 160 161 160 160 161 160 145 146 147 145 146 147 144 145 144 ++147 147 148 149 151 153 161 161 162 157 157 157 163 163 163 160 161 160 155 156 156 144 145 144 ++145 146 147 96 98 100 11 13 16 8 10 13 8 10 13 8 10 13 1 3 7 11 13 16 ++8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 8 10 13 ++16 16 16 16 16 16 16 16 16 43 43 43 52 52 52 44 44 44 36 36 36 125 125 127 ++252 251 251 238 240 244 238 240 244 238 240 244 238 240 244 252 251 251 169 175 167 180 183 185 ++180 183 185 231 224 220 246 251 251 238 240 244 238 240 244 246 251 251 238 240 244 246 251 251 ++161 161 162 140 140 140 133 133 133 144 145 144 144 145 144 137 138 139 144 145 144 140 140 140 ++140 140 140 139 139 139 137 138 139 137 137 137 137 137 137 134 134 134 134 134 134 134 134 134 ++129 129 130 129 129 130 129 129 130 129 129 130 129 129 130 128 128 128 125 125 127 121 121 119 ++121 121 119 121 121 119 117 117 117 115 116 115 112 112 113 121 121 119 128 128 128 122 121 126 ++125 122 126 128 128 128 127 127 127 125 125 127 128 128 128 125 125 127 109 110 110 101 101 101 ++101 101 101 96 97 98 92 92 92 90 90 90 96 96 96 105 105 105 109 110 110 105 105 105 ++112 112 113 103 103 102 83 83 83 80 80 80 83 83 83 88 88 88 99 99 99 99 99 99 ++93 93 93 88 88 88 82 82 82 83 83 83 88 88 88 84 84 84 66 66 66 46 46 46 ++61 61 61 58 58 58 85 85 85 70 70 70 42 42 42 40 40 40 57 57 57 46 46 46 ++76 76 76 68 68 68 65 65 65 52 52 52 49 49 49 60 60 60 53 53 53 40 40 40 ++28 28 28 31 31 31 36 36 36 32 32 32 21 21 21 23 23 23 59 59 59 46 46 46 ++38 38 38 38 38 38 17 17 17 10 10 10 11 11 11 37 37 37 52 52 52 8 8 8 ++8 8 8 11 11 11 16 16 16 25 25 25 37 37 37 44 44 44 44 44 44 43 43 43 ++42 42 42 37 37 37 16 16 16 20 20 20 17 17 17 19 19 19 40 40 40 34 34 34 ++44 44 44 34 34 34 24 24 24 20 20 20 23 23 23 28 28 28 36 36 36 42 42 42 ++43 43 43 42 42 42 40 40 40 39 39 39 39 39 39 38 38 38 38 38 38 39 39 39 ++36 36 36 38 38 38 40 40 40 36 36 36 39 39 39 42 42 42 36 36 36 42 42 42 ++33 33 33 16 16 16 16 16 16 34 34 34 17 17 17 16 16 16 11 11 11 11 11 11 ++31 31 31 33 33 33 38 38 38 44 44 44 16 16 16 13 13 13 13 13 13 13 13 13 ++14 14 14 16 16 16 24 24 24 38 38 38 28 28 28 19 19 19 39 39 39 53 53 53 ++50 50 50 43 43 43 37 37 37 40 40 40 44 44 44 45 45 45 46 46 46 48 48 48 ++36 36 36 39 39 39 46 46 46 52 52 52 51 51 51 44 44 44 38 38 38 37 37 37 ++45 45 45 50 50 50 50 50 50 42 42 42 28 28 28 23 23 23 33 33 33 45 45 45 ++39 39 39 25 25 25 19 19 19 25 25 25 27 27 27 17 17 17 10 10 10 13 13 13 ++11 11 11 17 17 17 14 14 14 6 6 6 10 10 10 24 24 24 37 37 37 42 42 42 ++39 39 39 40 40 40 40 40 40 42 42 42 42 42 42 42 42 42 40 40 40 40 40 40 ++42 42 42 40 40 40 39 39 39 38 38 38 38 38 38 38 38 38 39 39 39 39 39 39 ++ ++28 28 28 43 43 43 28 28 28 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 ++8 8 8 10 10 10 49 49 49 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 21 21 21 38 38 38 21 21 21 0 0 0 0 0 0 8 8 8 ++0 0 0 0 0 0 4 4 4 24 24 24 31 31 31 19 19 19 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 14 14 14 23 23 23 10 10 10 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 6 6 6 21 21 21 24 24 24 16 16 16 ++3 3 3 0 0 0 0 0 0 6 6 6 13 13 13 16 16 16 17 17 17 16 16 16 ++11 11 11 16 16 16 13 13 13 3 3 3 4 4 4 17 17 17 16 16 16 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 13 13 13 14 14 14 10 10 10 ++0 0 0 24 24 24 31 31 31 17 17 17 0 0 0 0 0 0 3 3 3 11 11 11 ++3 3 3 6 6 6 27 27 27 33 33 33 16 16 16 3 3 3 8 8 8 4 4 4 ++8 8 8 11 11 11 14 14 14 16 16 16 17 17 17 16 16 16 13 13 13 10 10 10 ++17 17 17 6 6 6 3 3 3 25 25 25 44 44 44 38 38 38 20 20 20 14 14 14 ++17 17 17 19 19 19 19 19 19 25 25 25 40 40 40 45 45 45 37 37 37 29 29 29 ++28 28 28 37 37 37 49 49 49 60 60 60 67 67 67 71 71 71 74 74 74 75 75 75 ++73 73 73 76 76 76 81 81 81 82 82 82 80 80 80 80 80 80 82 82 82 84 84 84 ++82 82 82 88 88 88 91 91 91 91 91 91 93 93 93 94 94 94 94 94 94 93 93 93 ++101 101 101 103 103 102 105 105 105 105 105 105 105 104 105 103 103 102 105 105 105 105 105 105 ++109 110 110 109 110 110 112 112 113 115 116 115 121 121 119 115 116 115 115 116 115 117 117 117 ++117 117 117 125 122 126 127 127 127 121 121 119 117 117 117 117 117 117 115 116 115 109 110 110 ++105 104 105 109 110 110 122 121 126 134 134 134 133 133 133 121 121 119 115 116 115 121 121 119 ++121 121 119 121 121 119 133 133 133 144 145 144 142 143 144 129 129 130 128 128 128 133 133 133 ++149 149 149 144 145 144 149 149 149 149 149 149 152 153 154 137 137 137 133 133 133 139 139 139 ++137 137 137 140 140 140 152 153 154 157 157 157 157 157 157 147 147 148 144 145 144 142 143 144 ++147 147 148 142 143 144 149 151 153 157 157 157 163 163 163 157 157 157 155 156 156 142 143 144 ++137 137 137 37 39 42 1 3 7 16 20 21 11 13 16 14 16 19 14 16 19 20 21 24 ++11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 11 13 16 10 11 14 10 11 14 ++10 10 10 13 13 13 21 21 21 52 52 52 52 52 52 52 52 52 39 39 39 53 53 53 ++180 183 185 238 240 244 246 251 251 252 251 251 238 240 244 238 240 244 200 220 210 200 220 210 ++246 251 251 238 240 244 231 246 232 246 251 251 246 251 251 238 240 244 200 220 210 112 122 122 ++117 117 117 117 117 117 129 129 130 147 147 148 142 143 144 134 134 134 139 139 139 137 137 137 ++137 137 137 137 137 137 134 134 134 134 134 134 133 133 133 133 133 133 131 131 131 131 131 131 ++129 129 130 129 129 130 129 129 130 129 129 130 129 129 130 127 127 127 121 121 119 121 121 119 ++121 121 119 115 116 115 115 116 115 112 112 113 109 110 110 115 116 115 127 127 127 129 129 130 ++131 131 131 129 129 130 122 121 126 121 121 119 128 128 128 125 122 126 109 110 110 99 99 99 ++101 101 101 99 99 99 94 94 94 95 95 94 103 103 102 109 110 110 109 110 110 105 105 105 ++105 105 105 96 96 96 80 80 80 78 78 78 84 84 84 91 91 91 99 99 99 96 96 96 ++92 92 92 82 82 82 76 76 76 73 73 73 73 73 73 82 82 82 75 75 75 50 50 50 ++42 42 42 57 57 57 87 87 87 83 83 83 73 73 73 52 52 52 48 48 48 52 52 52 ++62 62 62 69 69 69 73 73 73 51 51 51 32 32 32 44 44 44 54 54 54 58 58 58 ++33 33 33 25 25 25 20 20 20 17 17 17 21 21 21 32 32 32 60 60 60 42 42 42 ++25 25 25 24 24 24 14 14 14 10 10 10 11 11 11 42 42 42 57 57 57 10 10 10 ++42 42 42 27 27 27 21 21 21 34 34 34 46 46 46 48 48 48 43 43 43 42 42 42 ++45 45 45 38 38 38 19 19 19 17 17 17 14 14 14 19 19 19 43 43 43 40 40 40 ++40 40 40 37 37 37 29 29 29 23 23 23 25 25 25 34 34 34 40 40 40 43 43 43 ++42 42 42 40 40 40 39 39 39 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 ++38 38 38 42 42 42 43 43 43 32 32 32 37 37 37 44 44 44 36 36 36 38 38 38 ++17 17 17 10 10 10 16 16 16 34 34 34 14 14 14 13 13 13 17 17 17 27 27 27 ++39 39 39 31 31 31 29 29 29 37 37 37 13 13 13 14 14 14 13 13 13 13 13 13 ++3 3 3 31 31 31 40 40 40 32 32 32 13 13 13 17 17 17 40 40 40 42 42 42 ++52 52 52 46 46 46 42 42 42 39 39 39 39 39 39 40 40 40 46 46 46 53 53 53 ++40 40 40 39 39 39 37 37 37 39 39 39 45 45 45 49 49 49 44 44 44 37 37 37 ++39 39 39 45 45 45 52 52 52 49 49 49 34 34 34 20 20 20 24 24 24 36 36 36 ++37 37 37 31 31 31 25 25 25 23 23 23 17 17 17 10 10 10 8 8 8 13 13 13 ++13 13 13 16 16 16 14 14 14 11 11 11 19 19 19 33 33 33 40 40 40 39 39 39 ++38 38 38 39 39 39 39 39 39 40 40 40 40 40 40 39 39 39 39 39 39 38 38 38 ++39 39 39 39 39 39 38 38 38 37 37 37 37 37 37 37 37 37 38 38 38 38 38 38 ++ ++0 0 0 21 21 21 40 40 40 24 24 24 0 0 0 0 0 0 11 11 11 0 0 0 ++3 3 3 6 6 6 4 4 4 46 46 46 4 4 4 0 0 0 0 0 0 0 0 0 ++6 6 6 0 0 0 0 0 0 23 23 23 39 39 39 14 14 14 0 0 0 0 0 0 ++4 4 4 6 6 6 3 3 3 4 4 4 20 20 20 31 31 31 20 20 20 0 0 0 ++0 0 0 6 6 6 4 4 4 0 0 0 6 6 6 20 20 20 23 23 23 16 16 16 ++0 0 0 0 0 0 0 0 0 4 4 4 13 13 13 19 19 19 19 19 19 16 16 16 ++4 4 4 6 6 6 8 8 8 11 11 11 13 13 13 13 13 13 11 11 11 8 8 8 ++11 11 11 13 13 13 13 13 13 4 4 4 0 0 0 13 13 13 19 19 19 10 10 10 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 6 6 6 11 11 11 ++13 13 13 28 28 28 21 21 21 4 4 4 0 0 0 4 4 4 6 6 6 11 11 11 ++10 10 10 24 24 24 33 33 33 20 20 20 0 0 0 4 4 4 13 13 13 4 4 4 ++13 13 13 20 20 20 23 23 23 19 19 19 10 10 10 6 6 6 6 6 6 8 8 8 ++20 20 20 0 0 0 14 14 14 48 48 48 40 40 40 16 16 16 13 13 13 21 21 21 ++19 19 19 21 21 21 17 17 17 34 34 34 53 53 53 42 42 42 27 27 27 40 40 40 ++53 53 53 59 59 59 66 66 66 70 70 70 71 71 71 70 70 70 69 69 69 68 68 68 ++69 69 69 72 72 72 76 76 76 78 78 78 80 80 80 80 80 80 80 80 80 81 81 81 ++82 82 82 84 84 84 87 87 87 93 93 93 95 95 94 89 89 89 88 88 88 96 96 96 ++99 99 99 95 95 94 93 93 93 96 96 96 103 103 102 105 105 105 105 104 105 101 101 101 ++105 104 105 105 105 105 109 110 110 112 112 113 115 116 115 112 112 113 115 116 115 117 117 117 ++115 116 115 121 121 119 121 121 119 125 122 126 128 128 128 128 128 128 121 121 119 109 110 110 ++112 112 113 105 105 105 109 110 110 122 121 126 133 133 133 129 129 130 121 121 119 115 116 115 ++121 121 119 117 117 117 122 121 126 134 134 134 142 143 144 139 139 139 131 131 131 128 128 128 ++147 147 148 144 145 144 147 147 148 137 138 139 147 147 148 147 147 148 142 143 144 129 129 130 ++137 137 137 137 137 137 149 149 149 152 153 154 152 153 154 149 149 149 144 145 144 140 140 140 ++144 145 144 137 137 137 142 143 144 149 151 153 160 161 160 157 157 157 158 159 161 144 145 144 ++105 105 105 6 8 11 14 16 19 11 13 16 1 3 7 10 11 14 11 13 16 1 3 7 ++10 11 14 8 10 13 8 10 13 10 11 14 10 11 14 10 11 14 8 10 13 6 8 11 ++11 11 11 20 20 20 38 38 38 56 56 56 43 43 43 57 57 57 53 53 53 43 43 43 ++78 79 82 231 224 220 246 251 251 231 224 220 231 224 220 200 220 210 238 240 244 238 240 244 ++238 240 244 238 240 244 252 251 251 238 240 244 200 220 210 143 144 144 87 88 90 94 94 95 ++112 112 113 117 117 117 127 127 127 137 137 137 137 138 139 131 131 131 133 133 133 137 137 137 ++134 134 134 134 134 134 133 133 133 133 133 133 131 131 131 129 129 130 129 129 130 129 129 130 ++133 133 133 131 131 131 129 129 130 129 129 130 128 128 128 125 125 127 121 121 119 117 117 117 ++115 116 115 115 116 115 117 117 117 115 116 115 112 112 113 117 117 117 127 127 127 128 128 128 ++129 129 130 127 127 127 121 121 119 117 117 117 122 121 126 121 121 119 105 105 105 99 99 99 ++99 99 99 99 99 99 99 99 99 103 103 102 105 105 105 109 110 110 105 105 105 103 103 102 ++99 99 99 88 88 88 78 78 78 78 78 78 81 81 81 88 88 88 93 93 93 90 90 90 ++101 101 101 82 82 82 71 71 71 61 61 61 52 52 52 70 70 70 82 82 82 69 69 69 ++49 49 49 65 65 65 81 81 81 73 73 73 78 78 78 59 59 59 50 50 50 65 65 65 ++45 45 45 52 52 52 70 70 70 60 60 60 33 33 33 25 25 25 37 37 37 57 57 57 ++59 59 59 39 39 39 27 27 27 23 23 23 29 29 29 32 32 32 49 49 49 27 27 27 ++19 19 19 21 21 21 17 17 17 19 19 19 20 20 20 39 39 39 48 48 48 14 14 14 ++49 49 49 28 28 28 19 19 19 34 34 34 46 46 46 43 43 43 40 40 40 44 44 44 ++42 42 42 34 34 34 19 19 19 17 17 17 13 13 13 17 17 17 38 38 38 37 37 37 ++34 34 34 36 36 36 37 37 37 38 38 38 38 38 38 38 38 38 37 37 37 36 36 36 ++36 36 36 34 34 34 33 33 33 33 33 33 32 32 32 32 32 32 33 33 33 33 33 33 ++32 32 32 32 32 32 33 33 33 31 31 31 40 40 40 44 44 44 24 24 24 16 16 16 ++8 8 8 13 13 13 17 17 17 27 27 27 6 6 6 16 16 16 27 27 27 39 39 39 ++28 28 28 19 19 19 19 19 19 31 31 31 10 10 10 11 11 11 11 11 11 11 11 11 ++19 19 19 37 37 37 36 36 36 20 20 20 6 6 6 20 20 20 36 36 36 21 21 21 ++32 32 32 36 36 36 38 38 38 37 37 37 32 32 32 29 29 29 33 33 33 38 38 38 ++33 33 33 31 31 31 24 24 24 21 21 21 29 29 29 39 39 39 38 38 38 31 31 31 ++21 21 21 25 25 25 32 32 32 34 34 34 25 25 25 14 14 14 16 16 16 25 25 25 ++34 34 34 31 31 31 24 24 24 16 16 16 10 10 10 10 10 10 10 10 10 11 11 11 ++13 13 13 8 8 8 14 14 14 25 25 25 29 29 29 25 25 25 23 23 23 27 27 27 ++20 20 20 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 20 20 20 19 19 19 ++21 21 21 20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 ++ ++0 0 0 0 0 0 23 23 23 44 44 44 25 25 25 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 4 4 4 45 45 45 4 4 4 4 4 4 0 0 0 ++0 0 0 8 8 8 0 0 0 0 0 0 23 23 23 33 33 33 16 16 16 0 0 0 ++0 0 0 8 8 8 4 4 4 0 0 0 0 0 0 24 24 24 28 28 28 17 17 17 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 11 11 23 23 23 29 29 29 ++10 10 10 0 0 0 0 0 0 6 6 6 17 17 17 17 17 17 14 14 14 14 14 14 ++4 4 4 8 8 8 13 13 13 13 13 13 11 11 11 6 6 6 0 0 0 0 0 0 ++10 10 10 4 4 4 10 10 10 13 13 13 6 6 6 10 10 10 17 17 17 14 14 14 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 6 6 6 3 3 3 0 0 0 6 6 6 21 21 21 ++10 10 10 19 19 19 13 13 13 10 10 10 16 16 16 14 14 14 4 4 4 6 6 6 ++11 11 11 25 25 25 21 21 21 6 6 6 10 10 10 19 19 19 19 19 19 16 16 16 ++16 16 16 17 17 17 16 16 16 13 13 13 11 11 11 10 10 10 11 11 11 11 11 11 ++10 10 10 21 21 21 38 38 38 36 36 36 17 17 17 14 14 14 20 20 20 16 16 16 ++28 28 28 14 14 14 32 32 32 49 49 49 40 40 40 39 39 39 53 53 53 57 57 57 ++66 66 66 67 67 67 68 68 68 68 68 68 67 67 67 68 68 68 70 70 70 72 72 72 ++69 69 69 69 69 69 72 72 72 76 76 76 81 81 81 83 83 83 81 81 81 78 78 78 ++80 80 80 84 84 84 85 85 85 87 87 87 91 91 91 88 88 88 88 88 88 95 95 94 ++92 92 92 90 90 90 90 90 90 96 96 96 103 103 102 105 105 105 105 104 105 101 101 101 ++105 104 105 105 105 105 109 110 110 109 110 110 109 110 110 115 116 115 115 116 115 115 116 115 ++115 116 115 115 116 115 117 117 117 121 121 119 122 121 126 127 127 127 127 127 127 121 121 119 ++121 121 119 115 116 115 109 110 110 109 110 110 121 121 119 131 131 131 129 129 130 121 121 119 ++117 117 117 117 117 117 117 117 117 121 121 119 133 133 133 142 143 144 140 140 140 133 133 133 ++144 145 144 140 140 140 142 143 144 127 127 127 137 137 137 149 149 149 147 147 148 137 137 137 ++137 137 137 133 133 133 144 145 144 147 147 148 145 146 147 152 153 154 149 149 149 145 146 147 ++140 140 140 137 137 137 139 139 139 145 146 147 157 157 157 152 153 154 155 156 156 137 137 137 ++50 51 53 0 0 4 14 16 19 6 8 11 11 13 16 10 11 14 16 20 21 10 11 14 ++11 13 16 10 11 14 8 10 13 10 11 14 11 13 16 11 13 16 11 13 16 10 11 14 ++4 4 4 20 20 20 51 51 51 56 56 56 40 40 40 54 54 54 50 50 50 49 49 49 ++43 44 47 139 140 142 231 224 220 200 220 210 231 224 220 238 240 244 238 240 244 238 240 244 ++238 240 244 246 251 251 238 240 244 161 161 162 87 88 90 81 81 81 94 94 95 96 97 98 ++101 101 101 112 112 113 117 117 117 125 122 126 140 140 140 137 138 139 128 128 128 134 134 134 ++133 133 133 133 133 133 131 131 131 129 129 130 129 129 130 128 128 128 128 128 128 128 128 128 ++131 131 131 129 129 130 128 128 128 128 128 128 127 127 127 125 125 127 121 121 119 121 121 119 ++115 116 115 117 117 117 117 117 117 115 116 115 112 112 113 121 121 119 122 121 126 117 117 117 ++117 117 117 117 117 117 112 112 113 109 110 110 112 112 113 109 110 110 101 101 101 99 99 99 ++94 94 94 96 96 96 99 99 99 99 99 99 96 97 98 94 94 94 92 92 92 91 91 91 ++90 90 90 81 81 81 80 80 80 78 78 78 75 75 75 81 81 81 85 85 85 82 82 82 ++88 88 88 71 71 71 68 68 68 67 67 67 56 56 56 60 60 60 72 72 72 70 70 70 ++59 59 59 50 50 50 69 69 69 63 63 63 57 57 57 56 56 56 62 62 62 56 56 56 ++49 49 49 39 39 39 49 49 49 50 50 50 40 40 40 37 37 37 36 36 36 42 42 42 ++45 45 45 32 32 32 36 36 36 39 39 39 43 43 43 34 34 34 45 45 45 36 36 36 ++27 27 27 32 32 32 25 25 25 25 25 25 28 28 28 28 28 28 28 28 28 20 20 20 ++28 28 28 16 16 16 20 20 20 38 38 38 43 43 43 31 31 31 23 23 23 27 27 27 ++24 24 24 20 20 20 16 16 16 20 20 20 16 16 16 16 16 16 23 23 23 16 16 16 ++23 23 23 21 21 21 28 28 28 38 38 38 37 37 37 25 25 25 19 19 19 21 21 21 ++20 20 20 20 20 20 19 19 19 19 19 19 17 17 17 19 19 19 19 19 19 19 19 19 ++20 20 20 17 17 17 24 24 24 32 32 32 43 43 43 39 39 39 14 14 14 10 10 10 ++11 11 11 17 17 17 14 14 14 19 19 19 11 11 11 31 31 31 34 34 34 33 33 33 ++16 16 16 10 10 10 14 14 14 27 27 27 4 4 4 13 13 13 17 17 17 21 21 21 ++43 43 43 28 28 28 14 14 14 20 20 20 16 16 16 8 8 8 20 20 20 19 19 19 ++13 13 13 21 21 21 31 31 31 32 32 32 27 27 27 21 21 21 19 19 19 19 19 19 ++14 14 14 20 20 20 21 21 21 21 21 21 24 24 24 29 29 29 28 28 28 20 20 20 ++17 17 17 13 13 13 11 11 11 16 16 16 19 19 19 16 16 16 17 17 17 21 21 21 ++29 29 29 25 25 25 17 17 17 10 10 10 10 10 10 14 14 14 13 13 13 10 10 10 ++11 11 11 11 11 11 20 20 20 31 31 31 31 31 31 21 21 21 16 16 16 19 19 19 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 16 16 16 16 16 16 ++17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 ++ ++10 10 10 0 0 0 0 0 0 25 25 25 43 43 43 24 24 24 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 6 6 6 8 8 8 50 50 50 10 10 10 8 8 8 ++0 0 0 0 0 0 8 8 8 4 4 4 0 0 0 21 21 21 34 34 34 17 17 17 ++0 0 0 0 0 0 6 6 6 3 3 3 0 0 0 4 4 4 21 21 21 33 33 33 ++13 13 13 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 11 11 11 ++28 28 28 10 10 10 0 0 0 0 0 0 17 17 17 20 20 20 16 16 16 11 11 11 ++0 0 0 6 6 6 13 13 13 14 14 14 10 10 10 4 4 4 0 0 0 0 0 0 ++6 6 6 0 0 0 8 8 8 16 16 16 8 8 8 10 10 10 17 17 17 14 14 14 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 31 31 31 ++8 8 8 10 10 10 8 8 8 10 10 10 14 14 14 11 11 11 11 11 11 17 17 17 ++16 16 16 19 19 19 10 10 10 11 11 11 23 23 23 19 19 19 11 11 11 23 23 23 ++25 25 25 13 13 13 4 4 4 8 8 8 14 14 14 14 14 14 13 13 13 13 13 13 ++14 14 14 43 43 43 38 38 38 13 13 13 13 13 13 17 17 17 13 13 13 14 14 14 ++14 14 14 33 33 33 50 50 50 52 52 52 49 49 49 54 54 54 63 63 63 65 65 65 ++58 58 58 62 62 62 68 68 68 71 71 71 71 71 71 70 70 70 69 69 69 68 68 68 ++71 71 71 71 71 71 72 72 72 76 76 76 81 81 81 83 83 83 83 83 83 82 82 82 ++82 82 82 90 90 90 87 87 87 81 81 81 89 89 89 95 95 94 93 93 93 95 95 94 ++87 87 87 91 91 91 96 97 98 99 99 99 101 101 101 101 101 101 103 103 102 105 104 105 ++105 105 105 105 105 105 105 105 105 105 105 105 109 110 110 115 116 115 117 117 117 112 112 113 ++109 110 110 115 116 115 121 121 119 121 121 119 121 121 119 121 121 119 125 125 127 128 128 128 ++121 121 119 125 125 127 121 121 119 109 110 110 109 110 110 121 121 119 129 129 130 131 131 131 ++115 116 115 121 121 119 117 117 117 115 116 115 121 121 119 134 134 134 142 143 144 140 140 140 ++140 140 140 129 129 130 139 139 139 127 127 127 129 129 130 137 137 137 144 145 144 149 149 149 ++137 137 137 129 129 130 140 140 140 142 143 144 139 139 139 152 153 154 149 151 153 149 151 153 ++139 139 139 140 140 140 137 138 139 142 143 144 152 153 154 144 145 144 142 143 144 127 127 127 ++14 16 19 6 8 11 10 11 14 1 3 7 16 20 21 1 3 7 11 13 16 11 13 16 ++14 16 19 10 11 14 6 8 11 6 8 11 10 11 14 11 13 16 10 11 14 6 8 11 ++14 14 14 29 29 29 51 51 51 53 53 53 49 49 49 54 54 54 49 49 49 57 57 57 ++51 52 54 49 50 52 180 183 185 238 240 244 238 240 244 246 251 251 246 251 251 238 240 244 ++246 251 251 180 183 185 83 83 83 54 54 54 83 83 83 74 74 74 80 80 80 92 92 92 ++99 99 99 109 110 110 112 112 113 115 116 115 134 134 134 140 140 140 127 127 127 128 128 128 ++129 129 130 129 129 130 129 129 130 128 128 128 128 128 128 127 127 127 127 127 127 125 125 127 ++128 128 128 127 127 127 125 125 127 125 125 127 125 125 127 125 125 127 122 121 126 121 121 119 ++117 117 117 117 117 117 117 117 117 112 112 113 109 110 110 115 116 115 117 117 117 109 110 110 ++105 105 105 109 110 110 105 105 105 105 105 105 105 105 105 101 101 101 94 94 94 96 96 96 ++99 99 99 96 97 98 95 95 94 93 93 93 89 89 89 85 85 85 85 85 85 88 88 88 ++87 87 87 76 76 76 80 80 80 77 77 77 71 71 71 77 77 77 80 80 80 78 78 78 ++68 68 68 60 60 60 65 65 65 74 74 74 70 70 70 58 58 58 57 57 57 63 63 63 ++59 59 59 56 56 56 63 63 63 51 51 51 57 57 57 58 58 58 57 57 57 52 52 52 ++50 50 50 44 44 44 46 46 46 40 40 40 43 43 43 56 56 56 46 46 46 31 31 31 ++36 36 36 27 27 27 40 40 40 49 49 49 53 53 53 40 40 40 38 38 38 24 24 24 ++31 31 31 33 33 33 24 24 24 24 24 24 32 32 32 28 28 28 25 25 25 34 34 34 ++17 17 17 20 20 20 32 32 32 43 43 43 40 40 40 28 28 28 20 20 20 23 23 23 ++25 25 25 17 17 17 16 16 16 19 19 19 19 19 19 23 23 23 27 27 27 20 20 20 ++24 24 24 20 20 20 24 24 24 34 34 34 32 32 32 20 20 20 16 16 16 23 23 23 ++20 20 20 19 19 19 19 19 19 17 17 17 17 17 17 19 19 19 19 19 19 20 20 20 ++25 25 25 24 24 24 32 32 32 37 37 37 39 39 39 29 29 29 10 10 10 16 16 16 ++14 14 14 17 17 17 11 11 11 21 21 21 27 27 27 43 43 43 31 31 31 14 14 14 ++14 14 14 13 13 13 17 17 17 25 25 25 4 4 4 20 20 20 29 29 29 33 33 33 ++31 31 31 19 19 19 6 6 6 14 14 14 11 11 11 13 13 13 29 29 29 33 33 33 ++24 24 24 31 31 31 34 34 34 36 36 36 34 34 34 33 33 33 31 31 31 27 27 27 ++27 27 27 32 32 32 34 34 34 33 33 33 32 32 32 33 33 33 34 34 34 34 34 34 ++39 39 39 32 32 32 25 25 25 24 24 24 29 29 29 33 33 33 32 32 32 28 28 28 ++24 24 24 17 17 17 10 10 10 8 8 8 13 13 13 16 16 16 14 14 14 10 10 10 ++13 13 13 23 23 23 28 28 28 25 25 25 25 25 25 31 31 31 31 31 31 25 25 25 ++34 34 34 36 36 36 36 36 36 36 36 36 34 34 34 33 33 33 32 32 32 32 32 32 ++33 33 33 34 34 34 34 34 34 34 34 34 34 34 34 33 33 33 32 32 32 32 32 32 ++ ++11 11 11 16 16 16 4 4 4 4 4 4 31 31 31 40 40 40 27 27 27 13 13 13 ++8 8 8 13 13 13 11 11 11 13 13 13 16 16 16 16 16 16 53 53 53 16 16 16 ++19 19 19 0 0 0 11 11 11 23 23 23 4 4 4 6 6 6 28 28 28 34 34 34 ++19 19 19 11 11 11 11 11 11 17 17 17 13 13 13 4 4 4 14 14 14 31 31 31 ++34 34 34 25 25 25 19 19 19 16 16 16 16 16 16 11 11 11 8 8 8 10 10 10 ++28 28 28 24 24 24 17 17 17 11 11 11 14 14 14 21 21 21 17 17 17 10 10 10 ++0 0 0 6 6 6 13 13 13 14 14 14 10 10 10 4 4 4 0 0 0 3 3 3 ++4 4 4 0 0 0 11 11 11 14 14 14 4 4 4 11 11 11 19 19 19 8 8 8 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 17 17 17 21 21 21 20 20 20 ++10 10 10 4 4 4 4 4 4 4 4 4 3 3 3 11 11 11 20 20 20 23 23 23 ++16 16 16 10 10 10 8 8 8 13 13 13 14 14 14 10 10 10 14 14 14 28 28 28 ++33 33 33 19 19 19 8 8 8 11 11 11 10 10 10 3 3 3 4 4 4 16 16 16 ++31 31 31 33 33 33 17 17 17 8 8 8 20 20 20 14 14 14 6 6 6 23 23 23 ++21 21 21 54 54 54 58 58 58 51 51 51 62 62 62 65 65 65 58 58 58 62 62 62 ++65 65 65 66 66 66 67 67 67 67 67 67 67 67 67 67 67 67 68 68 68 69 69 69 ++71 71 71 73 73 73 75 75 75 75 75 75 74 74 74 75 75 75 80 80 80 83 83 83 ++81 81 81 78 78 78 70 70 70 73 73 73 87 87 87 87 87 87 83 83 83 92 92 92 ++75 75 75 78 78 78 82 82 82 82 82 82 81 81 81 87 87 87 96 96 96 105 105 105 ++105 105 105 99 99 99 99 99 99 103 103 102 105 105 105 109 110 110 115 116 115 112 112 113 ++109 110 110 112 112 113 121 121 119 121 121 119 117 117 117 117 117 117 121 121 119 122 121 126 ++122 121 126 125 125 127 125 125 127 121 121 119 115 116 115 112 112 113 121 121 119 129 129 130 ++125 122 126 121 121 119 117 117 117 115 116 115 115 116 115 122 121 126 131 131 131 139 139 139 ++142 143 144 128 128 128 140 140 140 128 128 128 127 127 127 127 127 127 133 133 133 147 147 148 ++142 143 144 133 133 133 140 140 140 140 140 140 131 131 131 149 149 149 144 145 144 145 146 147 ++144 145 144 144 145 144 134 134 134 140 140 140 152 153 154 133 133 133 134 134 134 128 128 128 ++109 110 110 105 104 105 91 92 94 85 85 85 81 81 81 71 72 74 66 67 69 60 61 64 ++51 52 54 46 47 50 42 43 45 39 40 43 40 42 44 42 43 45 40 42 44 37 39 42 ++45 45 45 54 54 54 52 52 52 57 57 57 58 58 58 50 50 50 51 51 51 53 53 53 ++51 52 54 50 51 53 134 134 134 246 251 251 238 240 244 238 240 244 238 240 244 231 224 220 ++112 112 113 56 56 56 50 50 50 57 57 57 66 66 66 76 76 76 71 71 71 90 90 90 ++92 92 92 96 97 98 105 104 105 105 105 105 121 121 119 133 133 133 128 128 128 127 127 127 ++128 128 128 128 128 128 127 127 127 127 127 127 125 125 127 125 122 126 122 121 126 121 121 119 ++125 125 127 125 122 126 122 121 126 122 121 126 122 121 126 121 121 119 121 121 119 117 117 117 ++115 116 115 115 116 115 117 117 117 117 117 117 115 116 115 115 116 115 115 116 115 112 112 113 ++109 110 110 112 112 113 109 110 110 109 110 110 109 110 110 103 103 102 94 94 94 95 95 94 ++103 103 102 96 96 96 91 91 91 92 92 92 93 93 93 92 92 92 92 92 92 94 94 94 ++91 91 91 74 74 74 78 78 78 75 75 75 71 71 71 81 81 81 83 83 83 78 78 78 ++68 68 68 66 66 66 62 62 62 70 70 70 76 76 76 60 60 60 50 50 50 63 63 63 ++73 73 73 78 78 78 68 68 68 43 43 43 61 61 61 56 56 56 46 46 46 62 62 62 ++52 52 52 58 58 58 60 60 60 40 40 40 36 36 36 56 56 56 50 50 50 31 31 31 ++29 29 29 28 28 28 44 44 44 45 45 45 56 56 56 52 52 52 46 46 46 27 27 27 ++20 20 20 19 19 19 19 19 19 25 25 25 36 36 36 39 39 39 37 37 37 38 38 38 ++19 19 19 29 29 29 40 40 40 44 44 44 42 42 42 40 40 40 42 42 42 43 43 43 ++37 37 37 23 23 23 14 14 14 14 14 14 19 19 19 32 32 32 40 40 40 39 39 39 ++40 40 40 38 38 38 39 39 39 43 43 43 40 40 40 36 36 36 37 37 37 42 42 42 ++38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 38 38 38 38 38 38 ++37 37 37 38 38 38 43 43 43 38 38 38 36 36 36 28 28 28 11 11 11 14 14 14 ++13 13 13 17 17 17 17 17 17 33 33 33 33 33 33 34 34 34 16 16 16 6 6 6 ++14 14 14 17 17 17 21 21 21 28 28 28 11 11 11 29 29 29 36 36 36 29 29 29 ++6 6 6 14 14 14 11 11 11 8 8 8 6 6 6 23 23 23 46 46 46 45 45 45 ++42 42 42 42 42 42 40 40 40 40 40 40 44 44 44 49 49 49 45 45 45 39 39 39 ++43 43 43 43 43 43 43 43 43 43 43 43 42 42 42 39 39 39 42 42 42 45 45 45 ++51 51 51 50 50 50 44 44 44 39 39 39 40 40 40 44 44 44 38 38 38 28 28 28 ++17 17 17 11 11 11 8 8 8 11 11 11 14 14 14 14 14 14 11 11 11 11 11 11 ++23 23 23 25 25 25 25 25 25 24 24 24 31 31 31 40 40 40 40 40 40 34 34 34 ++37 37 37 38 38 38 38 38 38 37 37 37 37 37 37 36 36 36 34 34 34 33 33 33 ++36 36 36 36 36 36 37 37 37 37 37 37 37 37 37 36 36 36 34 34 34 34 34 34 ++ ++21 21 21 16 16 16 20 20 20 20 20 20 16 16 16 27 27 27 37 37 37 28 28 28 ++19 19 19 17 17 17 20 20 20 21 21 21 20 20 20 20 20 20 21 21 21 59 59 59 ++25 25 25 21 21 21 16 16 16 16 16 16 17 17 17 16 16 16 20 20 20 29 29 29 ++46 46 46 29 29 29 16 16 16 20 20 20 24 24 24 20 20 20 16 16 16 17 17 17 ++34 34 34 31 31 31 25 25 25 19 19 19 16 16 16 17 17 17 20 20 20 23 23 23 ++16 16 16 36 36 36 40 40 40 25 25 25 13 13 13 17 17 17 17 17 17 8 8 8 ++0 0 0 8 8 8 16 16 16 16 16 16 11 11 11 4 4 4 3 3 3 3 3 3 ++4 4 4 4 4 4 14 14 14 11 11 11 0 0 0 13 13 13 20 20 20 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 4 4 4 3 3 3 0 0 0 11 11 11 29 29 29 21 21 21 0 0 0 ++4 4 4 0 0 0 4 4 4 6 6 6 6 6 6 19 19 19 24 24 24 13 13 13 ++0 0 0 0 0 0 10 10 10 6 6 6 0 0 0 6 6 6 31 31 31 38 38 38 ++8 8 8 0 0 0 3 3 3 13 13 13 8 8 8 0 0 0 20 20 20 44 44 44 ++34 34 34 14 14 14 4 4 4 13 13 13 16 16 16 13 13 13 19 19 19 25 25 25 ++61 61 61 54 54 54 58 58 58 57 57 57 51 51 51 59 59 59 66 66 66 58 58 58 ++67 67 67 68 68 68 68 68 68 68 68 68 66 66 66 66 66 66 66 66 66 68 68 68 ++68 68 68 73 73 73 77 77 77 74 74 74 67 67 67 67 67 67 74 74 74 83 83 83 ++73 73 73 53 53 53 42 42 42 63 63 63 80 80 80 63 63 63 58 58 58 82 82 82 ++90 90 90 84 84 84 74 74 74 66 66 66 66 66 66 74 74 74 88 88 88 99 99 99 ++103 103 102 89 89 89 88 88 88 99 99 99 103 103 102 105 104 105 109 110 110 109 110 110 ++121 121 119 115 116 115 112 112 113 112 112 113 115 116 115 117 117 117 121 121 119 121 121 119 ++128 128 128 121 121 119 121 121 119 128 128 128 128 128 128 115 116 115 112 112 113 121 121 119 ++137 137 137 121 121 119 112 112 113 117 117 117 117 117 117 112 112 113 117 117 117 129 129 130 ++145 146 147 131 131 131 142 143 144 129 129 130 125 122 126 122 121 126 125 125 127 133 133 133 ++149 149 149 139 139 139 144 145 144 140 140 140 127 127 127 144 145 144 137 138 139 137 138 139 ++152 153 154 149 149 149 133 133 133 137 137 137 149 149 149 128 128 128 133 133 133 139 139 139 ++133 133 133 125 125 127 109 110 110 94 94 95 83 84 85 87 88 90 76 76 76 58 59 61 ++63 65 67 58 59 61 51 52 54 49 50 52 49 50 52 49 50 52 46 47 50 46 47 50 ++51 51 51 65 65 65 48 48 48 61 61 61 65 65 65 49 49 49 59 59 59 50 50 50 ++51 52 54 56 57 59 49 50 52 200 220 210 238 240 244 246 251 251 149 151 153 60 61 64 ++44 44 44 48 48 48 49 49 49 62 62 62 65 65 65 67 67 67 81 81 81 81 81 81 ++93 93 93 94 94 94 112 112 113 112 112 113 112 112 113 129 129 130 133 133 133 127 127 127 ++127 127 127 125 125 127 125 125 127 125 122 126 121 121 119 121 121 119 121 121 119 121 121 119 ++125 125 127 125 122 126 122 121 126 122 121 126 121 121 119 117 117 117 112 112 113 109 110 110 ++109 110 110 109 110 110 117 117 117 127 127 127 122 121 126 117 117 117 121 121 119 121 121 119 ++121 121 119 117 117 117 115 116 115 115 116 115 117 117 117 109 110 110 99 99 99 96 97 98 ++96 96 96 88 88 88 84 84 84 91 91 91 101 101 101 103 103 102 101 101 101 99 99 99 ++96 96 96 75 75 75 76 76 76 73 73 73 72 72 72 87 87 87 87 87 87 82 82 82 ++60 60 60 63 63 63 53 53 53 62 62 62 84 84 84 75 75 75 63 63 63 82 82 82 ++83 83 83 74 74 74 81 81 81 67 67 67 60 60 60 49 49 49 45 45 45 43 43 43 ++70 70 70 69 69 69 62 62 62 34 34 34 25 25 25 48 48 48 49 49 49 34 34 34 ++24 24 24 37 37 37 51 51 51 33 33 33 31 31 31 31 31 31 34 34 34 19 19 19 ++14 14 14 8 8 8 20 20 20 31 31 31 39 39 39 48 48 48 42 42 42 25 25 25 ++28 28 28 42 42 42 50 50 50 45 45 45 40 40 40 42 42 42 40 40 40 38 38 38 ++34 34 34 17 17 17 13 13 13 14 14 14 21 21 21 37 37 37 44 44 44 42 42 42 ++38 38 38 40 40 40 42 42 42 39 39 39 38 38 38 40 40 40 43 43 43 44 44 44 ++38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 39 39 39 39 39 39 ++37 37 37 40 40 40 42 42 42 34 34 34 38 38 38 39 39 39 20 20 20 13 13 13 ++6 6 6 19 19 19 27 27 27 43 43 43 29 29 29 16 16 16 0 0 0 16 16 16 ++11 11 11 19 19 19 24 24 24 32 32 32 19 19 19 36 36 36 33 33 33 17 17 17 ++14 14 14 11 11 11 11 11 11 20 20 20 14 14 14 17 17 17 40 40 40 50 50 50 ++44 44 44 40 40 40 37 37 37 37 37 37 44 44 44 51 51 51 46 46 46 38 38 38 ++38 38 38 37 37 37 42 42 42 48 48 48 46 46 46 38 38 38 34 34 34 34 34 34 ++43 43 43 49 49 49 48 48 48 39 39 39 37 37 37 38 38 38 29 29 29 14 14 14 ++13 13 13 10 10 10 10 10 10 14 14 14 14 14 14 10 10 10 8 8 8 13 13 13 ++32 32 32 20 20 20 17 17 17 29 29 29 40 40 40 42 42 42 39 39 39 38 38 38 ++38 38 38 38 38 38 38 38 38 38 38 38 37 37 37 36 36 36 34 34 34 33 33 33 ++37 37 37 37 37 37 38 38 38 38 38 38 38 38 38 37 37 37 36 36 36 34 34 34 ++ ++16 16 16 21 21 21 17 17 17 17 17 17 21 21 21 13 13 13 21 21 21 46 46 46 ++29 29 29 17 17 17 16 16 16 21 21 21 17 17 17 13 13 13 20 20 20 29 29 29 ++52 52 52 20 20 20 20 20 20 23 23 23 17 17 17 19 19 19 16 16 16 23 23 23 ++37 37 37 33 33 33 25 25 25 19 19 19 19 19 19 23 23 23 21 21 21 17 17 17 ++16 16 16 36 36 36 42 42 42 29 29 29 16 16 16 19 19 19 23 23 23 21 21 21 ++27 27 27 17 17 17 27 27 27 36 36 36 25 25 25 16 16 16 11 11 11 0 0 0 ++3 3 3 0 0 0 11 11 11 14 14 14 6 6 6 6 6 6 11 11 11 4 4 4 ++16 16 16 8 8 8 0 0 0 3 3 3 10 10 10 13 13 13 10 10 10 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 6 6 6 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 13 13 13 36 36 36 16 16 16 0 0 0 4 4 4 ++8 8 8 3 3 3 0 0 0 6 6 6 19 19 19 23 23 23 13 13 13 0 0 0 ++0 0 0 6 6 6 10 10 10 0 0 0 3 3 3 34 34 34 38 38 38 6 6 6 ++4 4 4 4 4 4 10 10 10 4 4 4 0 0 0 21 21 21 37 37 37 31 31 31 ++8 8 8 16 16 16 19 19 19 13 13 13 8 8 8 20 20 20 43 43 43 61 61 61 ++54 54 54 54 54 54 56 56 56 58 58 58 60 60 60 62 62 62 62 62 62 61 61 61 ++72 72 72 65 65 65 60 60 60 62 62 62 66 66 66 66 66 66 65 65 65 66 66 66 ++69 69 69 71 71 71 56 56 56 43 43 43 38 38 38 54 54 54 70 70 70 54 54 54 ++76 76 76 66 66 66 59 59 59 77 77 77 62 62 62 57 57 57 59 59 59 60 60 60 ++92 92 92 84 84 84 69 69 69 59 59 59 69 69 69 88 88 88 87 87 87 67 67 67 ++90 90 90 103 103 102 96 97 98 85 85 85 81 81 81 81 81 81 88 88 88 103 103 102 ++105 105 105 112 112 113 115 116 115 112 112 113 109 110 110 112 112 113 117 117 117 121 121 119 ++121 121 119 125 125 127 125 122 126 121 121 119 121 121 119 127 127 127 121 121 119 112 112 113 ++117 117 117 129 129 130 129 129 130 115 116 115 105 105 105 115 116 115 117 117 117 112 112 113 ++133 133 133 139 139 139 142 143 144 137 138 139 121 121 119 115 116 115 127 127 127 127 127 127 ++127 127 127 142 143 144 152 153 154 140 140 140 121 121 119 134 134 134 149 149 149 127 127 127 ++133 133 133 144 145 144 152 153 154 137 138 139 142 143 144 133 133 133 125 122 126 127 127 127 ++115 116 115 115 116 115 112 112 113 96 96 96 77 77 77 73 73 73 70 70 70 59 59 59 ++53 53 53 54 54 54 52 52 52 46 46 46 46 46 46 50 50 50 50 50 50 46 46 46 ++57 57 57 59 59 59 57 57 57 58 58 58 63 63 63 60 60 60 53 53 53 54 54 54 ++53 53 53 51 51 51 61 61 61 69 69 69 160 161 160 78 78 78 43 43 43 45 45 45 ++45 45 45 44 44 44 49 49 49 58 58 58 62 62 62 66 66 66 71 71 71 77 77 77 ++87 87 87 92 92 92 96 97 98 103 103 102 112 112 113 125 122 126 128 128 128 127 127 127 ++121 121 119 121 121 119 121 121 119 117 117 117 121 121 119 121 121 119 117 117 117 117 117 117 ++121 121 119 115 116 115 115 116 115 121 121 119 117 117 117 112 112 113 105 105 105 105 105 105 ++112 112 113 117 117 117 122 121 126 125 122 126 121 121 119 117 117 117 117 117 117 117 117 117 ++115 116 115 115 116 115 115 116 115 109 110 110 112 112 113 109 110 110 95 95 94 95 95 94 ++88 88 88 84 84 84 87 87 87 87 87 87 103 103 102 99 99 99 99 99 99 101 101 101 ++89 89 89 73 73 73 68 68 68 74 74 74 81 81 81 69 69 69 62 62 62 88 88 88 ++71 71 71 60 60 60 54 54 54 50 50 50 57 57 57 83 83 83 87 87 87 59 59 59 ++68 68 68 77 77 77 65 65 65 70 70 70 67 67 67 44 44 44 42 42 42 37 37 37 ++32 32 32 72 72 72 63 63 63 27 27 27 19 19 19 27 27 27 34 34 34 44 44 44 ++52 52 52 42 42 42 28 28 28 16 16 16 36 36 36 58 58 58 57 57 57 57 57 57 ++23 23 23 24 24 24 34 34 34 46 46 46 50 50 50 40 40 40 28 28 28 21 21 21 ++45 45 45 44 44 44 42 42 42 42 42 42 43 43 43 43 43 43 42 42 42 39 39 39 ++20 20 20 24 24 24 19 19 19 20 20 20 34 34 34 39 39 39 39 39 39 45 45 45 ++39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 ++39 39 39 37 37 37 37 37 37 39 39 39 38 38 38 34 34 34 36 36 36 40 40 40 ++42 42 42 40 40 40 45 45 45 38 38 38 39 39 39 34 34 34 13 13 13 14 14 14 ++6 6 6 29 29 29 44 44 44 40 40 40 4 4 4 11 11 11 16 16 16 10 10 10 ++13 13 13 14 14 14 24 24 24 38 38 38 40 40 40 25 25 25 13 13 13 13 13 13 ++13 13 13 17 17 17 14 14 14 14 14 14 11 11 11 21 21 21 42 42 42 43 43 43 ++48 48 48 50 50 50 48 48 48 40 40 40 34 34 34 38 38 38 49 49 49 57 57 57 ++45 45 45 40 40 40 36 36 36 39 39 39 49 49 49 50 50 50 42 42 42 33 33 33 ++36 36 36 39 39 39 46 46 46 44 44 44 37 37 37 39 39 39 34 34 34 17 17 17 ++14 14 14 11 11 11 13 13 13 16 16 16 13 13 13 11 11 11 23 23 23 37 37 37 ++25 25 25 14 14 14 0 0 0 43 43 43 51 51 51 49 49 49 36 36 36 39 39 39 ++40 40 40 38 38 38 40 40 40 39 39 39 34 34 34 37 37 37 40 40 40 36 36 36 ++38 38 38 38 38 38 39 39 39 38 38 38 36 36 36 34 34 34 34 34 34 36 36 36 ++ ++40 40 40 10 10 10 13 13 13 24 24 24 10 10 10 10 10 10 21 21 21 16 16 16 ++42 42 42 34 34 34 14 14 14 16 16 16 31 31 31 19 19 19 6 6 6 27 27 27 ++14 14 14 51 51 51 25 25 25 14 14 14 21 21 21 8 8 8 20 20 20 14 14 14 ++6 6 6 31 31 31 39 39 39 25 25 25 11 11 11 16 16 16 20 20 20 16 16 16 ++6 6 6 13 13 13 24 24 24 33 33 33 27 27 27 13 13 13 8 8 8 13 13 13 ++3 3 3 24 24 24 19 19 19 17 17 17 33 33 33 21 21 21 0 0 0 0 0 0 ++6 6 6 0 0 0 6 6 6 14 14 14 13 13 13 11 11 11 8 8 8 0 0 0 ++6 6 6 4 4 4 6 6 6 13 13 13 17 17 17 17 17 17 10 10 10 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 21 21 21 27 27 27 4 4 4 0 0 0 6 6 6 0 0 0 ++0 0 0 0 0 0 10 10 10 24 24 24 25 25 25 11 11 11 0 0 0 4 4 4 ++4 4 4 10 10 10 0 0 0 6 6 6 37 37 37 29 29 29 6 6 6 11 11 11 ++0 0 0 16 16 16 6 6 6 0 0 0 23 23 23 38 38 38 27 27 27 10 10 10 ++14 14 14 10 10 10 8 8 8 16 16 16 29 29 29 43 43 43 52 52 52 57 57 57 ++56 56 56 54 54 54 53 53 53 53 53 53 54 54 54 58 58 58 63 63 63 67 67 67 ++61 61 61 60 60 60 62 62 62 66 66 66 62 62 62 57 57 57 60 60 60 70 70 70 ++68 68 68 37 37 37 43 43 43 38 38 38 52 52 52 72 72 72 53 53 53 49 49 49 ++44 44 44 80 80 80 72 72 72 63 63 63 54 54 54 51 51 51 56 56 56 76 76 76 ++65 65 65 89 89 89 81 81 81 67 67 67 81 81 81 80 80 80 63 63 63 68 68 68 ++69 69 69 94 94 94 96 96 96 83 83 83 78 78 78 77 77 77 85 85 85 101 101 101 ++84 84 84 101 101 101 115 116 115 115 116 115 112 112 113 112 112 113 115 116 115 112 112 113 ++112 112 113 117 117 117 121 121 119 121 121 119 122 121 126 122 121 126 121 121 119 121 121 119 ++121 121 119 121 121 119 125 122 126 125 122 126 117 117 117 109 110 110 109 110 110 115 116 115 ++128 128 128 131 131 131 134 134 134 139 139 139 127 127 127 115 116 115 121 121 119 121 121 119 ++122 121 126 128 128 128 140 140 140 144 145 144 129 129 130 128 128 128 140 140 140 131 131 131 ++128 128 128 131 131 131 142 143 144 139 139 139 144 145 144 129 129 130 117 117 117 122 121 126 ++121 121 119 105 105 105 99 99 99 99 99 99 87 87 87 69 69 69 61 61 61 59 59 59 ++51 51 51 53 53 53 52 52 52 49 49 49 49 49 49 52 52 52 52 52 52 50 50 50 ++56 56 56 60 60 60 60 60 60 62 62 62 69 69 69 66 66 66 58 58 58 57 57 57 ++59 59 59 52 52 52 49 49 49 43 43 43 73 73 73 37 37 37 43 43 43 51 51 51 ++44 44 44 45 45 45 50 50 50 58 58 58 61 61 61 65 65 65 70 70 70 77 77 77 ++85 85 85 91 91 91 99 99 99 103 103 102 109 110 110 117 117 117 125 125 127 129 129 130 ++117 117 117 115 116 115 117 117 117 121 121 119 115 116 115 115 116 115 115 116 115 115 116 115 ++115 116 115 112 112 113 112 112 113 112 112 113 112 112 113 105 105 105 105 105 105 105 105 105 ++117 117 117 121 121 119 121 121 119 121 121 119 121 121 119 117 117 117 115 116 115 117 117 117 ++115 116 115 112 112 113 112 112 113 109 110 110 109 110 110 105 105 105 92 92 92 92 92 92 ++87 87 87 85 85 85 84 84 84 81 81 81 103 103 102 105 104 105 101 101 101 90 90 90 ++92 92 92 70 70 70 78 78 78 83 83 83 65 65 65 59 59 59 61 61 61 61 61 61 ++61 61 61 58 58 58 53 53 53 58 58 58 70 70 70 75 75 75 72 72 72 71 71 71 ++67 67 67 69 69 69 49 49 49 53 53 53 58 58 58 45 45 45 43 43 43 33 33 33 ++46 46 46 75 75 75 68 68 68 53 53 53 39 39 39 16 16 16 23 23 23 44 44 44 ++52 52 52 46 46 46 31 31 31 14 14 14 37 37 37 56 56 56 43 43 43 33 33 33 ++49 49 49 50 50 50 52 52 52 50 50 50 42 42 42 34 34 34 37 37 37 44 44 44 ++44 44 44 42 42 42 40 40 40 42 42 42 43 43 43 43 43 43 39 39 39 37 37 37 ++20 20 20 16 16 16 11 11 11 19 19 19 33 33 33 38 38 38 38 38 38 39 39 39 ++38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 ++39 39 39 37 37 37 37 37 37 39 39 39 38 38 38 36 36 36 37 37 37 39 39 39 ++37 37 37 34 34 34 37 37 37 36 36 36 43 43 43 39 39 39 14 14 14 8 8 8 ++27 27 27 29 29 29 33 33 33 33 33 33 4 4 4 14 14 14 17 17 17 13 13 13 ++10 10 10 14 14 14 28 28 28 37 37 37 31 31 31 16 16 16 10 10 10 11 11 11 ++10 10 10 10 10 10 4 4 4 13 13 13 19 19 19 29 29 29 44 44 44 37 37 37 ++37 37 37 40 40 40 43 43 43 44 44 44 40 40 40 37 37 37 39 39 39 43 43 43 ++39 39 39 43 43 43 39 39 39 34 34 34 40 40 40 51 51 51 50 50 50 39 39 39 ++36 36 36 40 40 40 50 50 50 50 50 50 45 45 45 43 43 43 33 33 33 11 11 11 ++11 11 11 16 16 16 14 14 14 8 8 8 11 11 11 23 23 23 27 27 27 25 25 25 ++13 13 13 20 20 20 21 21 21 44 44 44 50 50 50 53 53 53 52 52 52 45 45 45 ++45 45 45 43 43 43 46 46 46 48 48 48 36 36 36 28 28 28 33 33 33 37 37 37 ++50 50 50 50 50 50 48 48 48 44 44 44 39 39 39 36 36 36 33 33 33 33 33 33 ++ ++38 38 38 29 29 29 13 13 13 4 4 4 10 10 10 8 8 8 0 0 0 0 0 0 ++16 16 16 33 33 33 20 20 20 0 0 0 0 0 0 6 6 6 0 0 0 0 0 0 ++0 0 0 10 10 10 42 42 42 16 16 16 0 0 0 10 10 10 0 0 0 0 0 0 ++0 0 0 3 3 3 20 20 20 27 27 27 16 16 16 0 0 0 0 0 0 4 4 4 ++4 4 4 0 0 0 4 4 4 24 24 24 31 31 31 20 20 20 4 4 4 0 0 0 ++4 4 4 0 0 0 3 3 3 10 10 10 20 20 20 29 29 29 20 20 20 0 0 0 ++3 3 3 0 0 0 3 3 3 14 14 14 14 14 14 11 11 11 8 8 8 4 4 4 ++6 6 6 8 8 8 13 13 13 16 16 16 17 17 17 14 14 14 6 6 6 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 3 3 3 6 6 6 0 0 0 0 0 0 0 0 0 ++0 0 0 21 21 21 27 27 27 10 10 10 0 0 0 0 0 0 3 3 3 10 10 10 ++0 0 0 6 6 6 23 23 23 28 28 28 19 19 19 0 0 0 0 0 0 4 4 4 ++10 10 10 0 0 0 8 8 8 33 33 33 33 33 33 14 14 14 3 3 3 6 6 6 ++13 13 13 4 4 4 0 0 0 16 16 16 37 37 37 29 29 29 10 10 10 10 10 10 ++11 11 11 10 10 10 16 16 16 32 32 32 51 51 51 60 60 60 58 58 58 52 52 52 ++52 52 52 53 53 53 54 54 54 56 56 56 57 57 57 59 59 59 62 62 62 65 65 65 ++60 60 60 62 62 62 60 60 60 53 53 53 48 48 48 49 49 49 54 54 54 59 59 59 ++45 45 45 38 38 38 24 24 24 58 58 58 67 67 67 46 46 46 52 52 52 37 37 37 ++46 46 46 71 71 71 75 75 75 69 69 69 51 51 51 59 59 59 73 73 73 72 72 72 ++57 57 57 57 57 57 83 83 83 99 99 99 80 80 80 61 61 61 66 66 66 70 70 70 ++84 84 84 74 74 74 96 96 96 101 101 101 74 74 74 78 78 78 93 93 93 75 75 75 ++80 80 80 78 78 78 92 92 92 112 112 113 115 116 115 105 105 105 105 105 105 115 116 115 ++112 112 113 112 112 113 115 116 115 121 121 119 122 121 126 121 121 119 121 121 119 121 121 119 ++121 121 119 115 116 115 121 121 119 127 127 127 127 127 127 115 116 115 109 110 110 109 110 110 ++127 127 127 122 121 126 125 122 126 134 134 134 133 133 133 121 121 119 117 117 117 115 116 115 ++121 121 119 115 116 115 128 128 128 144 145 144 137 138 139 128 128 128 134 134 134 131 131 131 ++121 121 119 125 122 126 133 133 133 133 133 133 142 143 144 129 129 130 112 112 113 112 112 113 ++121 121 119 99 99 99 89 89 89 93 93 93 87 87 87 69 69 69 58 58 58 54 54 54 ++50 50 50 52 52 52 52 52 52 51 51 51 51 51 51 54 54 54 57 57 57 57 57 57 ++58 58 58 63 63 63 63 63 63 68 68 68 75 75 75 74 74 74 66 66 66 63 63 63 ++57 57 57 59 59 59 54 54 54 57 57 57 43 43 43 48 48 48 49 49 49 38 38 38 ++44 44 44 48 48 48 53 53 53 58 58 58 60 60 60 63 63 63 70 70 70 76 76 76 ++83 83 83 90 90 90 99 99 99 103 103 102 105 105 105 109 110 110 121 121 119 129 129 130 ++117 117 117 112 112 113 115 116 115 121 121 119 112 112 113 112 112 113 112 112 113 112 112 113 ++109 110 110 109 110 110 105 105 105 105 105 105 103 103 102 103 103 102 105 105 105 112 112 113 ++121 121 119 121 121 119 121 121 119 117 117 117 115 116 115 115 116 115 115 116 115 115 116 115 ++112 112 113 109 110 110 109 110 110 105 105 105 105 105 105 103 103 102 88 88 88 87 87 87 ++87 87 87 82 82 82 81 81 81 81 81 81 101 101 101 99 99 99 95 95 94 88 88 88 ++78 78 78 75 75 75 76 76 76 71 71 71 71 71 71 68 68 68 56 56 56 57 57 57 ++60 60 60 60 60 60 66 66 66 75 75 75 72 72 72 54 54 54 53 53 53 71 71 71 ++73 73 73 67 67 67 38 38 38 36 36 36 44 44 44 43 43 43 45 45 45 33 33 33 ++48 48 48 65 65 65 49 49 49 57 57 57 58 58 58 33 33 33 39 39 39 51 51 51 ++43 43 43 49 49 49 39 39 39 23 23 23 42 42 42 54 54 54 33 33 33 21 21 21 ++49 49 49 46 46 46 43 43 43 34 34 34 24 24 24 23 23 23 34 34 34 48 48 48 ++43 43 43 42 42 42 40 40 40 43 43 43 44 44 44 43 43 43 37 37 37 31 31 31 ++27 27 27 16 16 16 17 17 17 31 31 31 40 40 40 45 45 45 45 45 45 42 42 42 ++40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 ++40 40 40 38 38 38 38 38 38 40 40 40 40 40 40 39 39 39 39 39 39 40 40 40 ++44 44 44 42 42 42 42 42 42 38 38 38 43 43 43 38 38 38 17 17 17 13 13 13 ++37 37 37 25 25 25 23 23 23 32 32 32 11 11 11 16 16 16 14 14 14 11 11 11 ++14 14 14 20 20 20 36 36 36 38 38 38 19 19 19 8 8 8 13 13 13 10 10 10 ++14 14 14 13 13 13 8 8 8 19 19 19 27 27 27 36 36 36 44 44 44 31 31 31 ++37 37 37 44 44 44 52 52 52 51 51 51 38 38 38 25 25 25 31 31 31 45 45 45 ++42 42 42 50 50 50 42 42 42 13 13 13 0 0 0 28 28 28 49 49 49 51 51 51 ++25 25 25 27 27 27 33 33 33 42 42 42 49 49 49 51 51 51 36 36 36 10 10 10 ++13 13 13 14 14 14 13 13 13 10 10 10 17 17 17 27 27 27 25 25 25 16 16 16 ++11 11 11 3 3 3 21 21 21 44 44 44 46 46 46 32 32 32 46 46 46 50 50 50 ++17 17 17 4 4 4 8 8 8 14 14 14 3 3 3 0 0 0 0 0 0 6 6 6 ++0 0 0 0 0 0 8 8 8 13 13 13 17 17 17 21 21 21 25 25 25 28 28 28 ++ ++13 13 13 38 38 38 27 27 27 0 0 0 0 0 0 4 4 4 0 0 0 4 4 4 ++0 0 0 19 19 19 34 34 34 19 19 19 0 0 0 0 0 0 8 8 8 0 0 0 ++4 4 4 0 0 0 13 13 13 38 38 38 20 20 20 0 0 0 8 8 8 0 0 0 ++11 11 11 0 0 0 0 0 0 20 20 20 28 28 28 16 16 16 0 0 0 0 0 0 ++8 8 8 6 6 6 0 0 0 0 0 0 19 19 19 29 29 29 19 19 19 0 0 0 ++6 6 6 0 0 0 0 0 0 4 4 4 3 3 3 23 23 23 34 34 34 19 19 19 ++3 3 3 0 0 0 0 0 0 10 10 10 10 10 10 6 6 6 11 11 11 17 17 17 ++17 17 17 16 16 16 13 13 13 11 11 11 8 8 8 4 4 4 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 8 8 8 6 6 6 0 0 0 0 0 0 0 0 0 ++13 13 13 27 27 27 10 10 10 0 0 0 10 10 10 8 8 8 0 0 0 0 0 0 ++4 4 4 23 23 23 28 28 28 13 13 13 0 0 0 3 3 3 4 4 4 0 0 0 ++0 0 0 4 4 4 33 33 33 37 37 37 10 10 10 0 0 0 11 11 11 6 6 6 ++10 10 10 0 0 0 13 13 13 37 37 37 29 29 29 10 10 10 8 8 8 11 11 11 ++8 8 8 21 21 21 39 39 39 53 53 53 61 61 61 60 60 60 56 56 56 51 51 51 ++53 53 53 53 53 53 54 54 54 58 58 58 61 61 61 62 62 62 61 61 61 59 59 59 ++59 59 59 58 58 58 44 44 44 28 28 28 34 34 34 52 52 52 52 52 52 38 38 38 ++27 27 27 32 32 32 59 59 59 65 65 65 51 51 51 37 37 37 34 34 34 54 54 54 ++67 67 67 53 53 53 51 51 51 68 68 68 70 70 70 75 75 75 75 75 75 51 51 51 ++48 48 48 63 63 63 75 75 75 87 87 87 87 87 87 67 67 67 60 60 60 81 81 81 ++78 78 78 74 74 74 72 72 72 87 87 87 105 104 105 96 96 96 78 78 78 77 77 77 ++84 84 84 71 71 71 76 76 76 99 99 99 109 110 110 103 103 102 99 99 99 105 105 105 ++115 116 115 112 112 113 112 112 113 117 117 117 121 121 119 121 121 119 117 117 117 117 117 117 ++121 121 119 117 117 117 117 117 117 121 121 119 125 125 127 127 127 127 115 116 115 105 104 105 ++127 127 127 121 121 119 112 112 113 127 127 127 137 137 137 128 128 128 121 121 119 112 112 113 ++121 121 119 117 117 117 121 121 119 137 137 137 137 138 139 137 137 137 139 139 139 129 129 130 ++117 117 117 122 121 126 127 127 127 121 121 119 131 131 131 133 133 133 115 116 115 105 105 105 ++109 110 110 99 99 99 88 88 88 81 81 81 77 77 77 73 73 73 63 63 63 52 52 52 ++51 51 51 51 51 51 51 51 51 51 51 51 52 52 52 57 57 57 61 61 61 65 65 65 ++63 63 63 69 69 69 68 68 68 69 69 69 76 76 76 78 78 78 74 74 74 73 73 73 ++59 59 59 67 67 67 54 54 54 57 57 57 51 51 51 63 63 63 51 51 51 43 43 43 ++46 46 46 51 51 51 57 57 57 60 60 60 61 61 61 63 63 63 70 70 70 77 77 77 ++83 83 83 87 87 87 96 96 96 103 103 102 105 104 105 105 105 105 115 116 115 125 125 127 ++125 122 126 112 112 113 109 110 110 115 116 115 109 110 110 109 110 110 112 112 113 105 105 105 ++105 105 105 105 105 105 105 105 105 103 103 102 101 101 101 103 103 102 109 110 110 117 117 117 ++121 121 119 121 121 119 115 116 115 115 116 115 115 116 115 115 116 115 112 112 113 112 112 113 ++109 110 110 109 110 110 109 110 110 103 103 102 105 104 105 99 99 99 85 85 85 84 84 84 ++87 87 87 76 76 76 80 80 80 84 84 84 95 95 94 82 82 82 87 87 87 96 97 98 ++85 85 85 83 83 83 71 71 71 63 63 63 78 78 78 76 76 76 54 54 54 56 56 56 ++62 62 62 57 57 57 76 76 76 87 87 87 59 59 59 40 40 40 53 53 53 63 63 63 ++78 78 78 72 72 72 45 45 45 32 32 32 33 33 33 37 37 37 45 45 45 39 39 39 ++60 60 60 65 65 65 28 28 28 37 37 37 58 58 58 50 50 50 51 51 51 34 34 34 ++24 24 24 40 40 40 44 44 44 38 38 38 54 54 54 60 60 60 45 45 45 46 46 46 ++40 40 40 36 36 36 32 32 32 32 32 32 34 34 34 39 39 39 44 44 44 48 48 48 ++44 44 44 42 42 42 42 42 42 43 43 43 44 44 44 40 40 40 32 32 32 24 24 24 ++19 19 19 8 8 8 20 20 20 37 37 37 40 40 40 42 42 42 43 43 43 39 39 39 ++37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 ++34 34 34 33 33 33 34 34 34 36 36 36 37 37 37 36 36 36 36 36 36 36 36 36 ++32 32 32 37 37 37 37 37 37 34 34 34 36 36 36 33 33 33 29 29 29 36 36 36 ++29 29 29 17 17 17 20 20 20 37 37 37 17 17 17 14 14 14 11 11 11 13 13 13 ++27 27 27 28 28 28 40 40 40 39 39 39 16 16 16 10 10 10 17 17 17 10 10 10 ++13 13 13 19 19 19 20 20 20 29 29 29 31 31 31 37 37 37 45 45 45 36 36 36 ++13 13 13 24 24 24 42 42 42 52 52 52 44 44 44 24 24 24 19 19 19 25 25 25 ++43 43 43 50 50 50 43 43 43 20 20 20 10 10 10 33 33 33 51 51 51 50 50 50 ++45 45 45 46 46 46 48 48 48 46 46 46 44 44 44 42 42 42 29 29 29 13 13 13 ++16 16 16 8 8 8 10 10 10 21 21 21 27 27 27 21 21 21 14 14 14 14 14 14 ++16 16 16 0 0 0 29 29 29 50 50 50 50 50 50 20 20 20 39 39 39 42 42 42 ++34 34 34 16 16 16 6 6 6 11 11 11 8 8 8 6 6 6 8 8 8 8 8 8 ++13 13 13 14 14 14 13 13 13 10 10 10 4 4 4 0 0 0 0 0 0 0 0 0 ++ ++0 0 0 13 13 13 34 34 34 28 28 28 0 0 0 0 0 0 13 13 13 0 0 0 ++4 4 4 0 0 0 20 20 20 39 39 39 23 23 23 0 0 0 3 3 3 8 8 8 ++0 0 0 6 6 6 0 0 0 17 17 17 40 40 40 19 19 19 0 0 0 4 4 4 ++6 6 6 6 6 6 0 0 0 0 0 0 16 16 16 33 33 33 27 27 27 3 3 3 ++0 0 0 8 8 8 3 3 3 0 0 0 3 3 3 24 24 24 27 27 27 11 11 11 ++0 0 0 11 11 11 0 0 0 0 0 0 4 4 4 0 0 0 11 11 11 42 42 42 ++16 16 16 6 6 6 0 0 0 0 0 0 4 4 4 6 6 6 10 10 10 16 16 16 ++16 16 16 13 13 13 10 10 10 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 3 3 3 4 4 4 0 0 0 0 0 0 3 3 3 13 13 13 ++36 36 36 4 4 4 0 0 0 10 10 10 0 0 0 0 0 0 4 4 4 0 0 0 ++24 24 24 28 28 28 19 19 19 0 0 0 0 0 0 4 4 4 6 6 6 0 0 0 ++0 0 0 34 34 34 32 32 32 8 8 8 4 4 4 3 3 3 0 0 0 10 10 10 ++0 0 0 13 13 13 36 36 36 33 33 33 10 10 10 6 6 6 14 14 14 4 4 4 ++23 23 23 39 39 39 56 56 56 61 61 61 57 57 57 51 51 51 51 51 51 54 54 54 ++59 59 59 56 56 56 53 53 53 57 57 57 61 61 61 62 62 62 57 57 57 50 50 50 ++40 40 40 34 34 34 25 25 25 27 27 27 42 42 42 53 53 53 45 45 45 27 27 27 ++27 27 27 43 43 43 63 63 63 52 52 52 38 38 38 39 39 39 48 48 48 68 68 68 ++53 53 53 50 50 50 33 33 33 52 52 52 85 85 85 77 77 77 57 57 57 44 44 44 ++50 50 50 75 75 75 70 70 70 54 54 54 71 71 71 89 89 89 85 85 85 76 76 76 ++67 67 67 66 66 66 62 62 62 76 76 76 99 99 99 96 97 98 82 82 82 76 76 76 ++75 75 75 82 82 82 83 83 83 84 84 84 94 94 94 105 105 105 101 101 101 87 87 87 ++103 103 102 105 105 105 112 112 113 115 116 115 115 116 115 117 117 117 117 117 117 115 116 115 ++117 117 117 121 121 119 121 121 119 115 116 115 121 121 119 127 127 127 121 121 119 112 112 113 ++121 121 119 121 121 119 109 110 110 115 116 115 131 131 131 131 131 131 128 128 128 121 121 119 ++115 116 115 115 116 115 117 117 117 127 127 127 131 131 131 133 133 133 140 140 140 137 137 137 ++121 121 119 121 121 119 121 121 119 115 116 115 122 121 126 133 133 133 121 121 119 112 112 113 ++101 101 101 101 101 101 90 90 90 73 73 73 69 69 69 72 72 72 68 68 68 59 59 59 ++54 54 54 53 53 53 52 52 52 52 52 52 52 52 52 57 57 57 65 65 65 70 70 70 ++71 71 71 76 76 76 73 73 73 70 70 70 75 75 75 81 81 81 81 81 81 82 82 82 ++68 68 68 67 67 67 60 60 60 50 50 50 54 54 54 51 51 51 52 52 52 65 65 65 ++51 51 51 57 57 57 62 62 62 63 63 63 63 63 63 67 67 67 73 73 73 78 78 78 ++85 85 85 87 87 87 93 93 93 103 103 102 105 105 105 105 105 105 109 110 110 115 116 115 ++128 128 128 115 116 115 105 105 105 109 110 110 109 110 110 109 110 110 105 105 105 103 103 102 ++105 105 105 105 105 105 103 103 102 101 101 101 99 99 99 105 105 105 112 112 113 121 121 119 ++117 117 117 115 116 115 112 112 113 112 112 113 112 112 113 112 112 113 109 110 110 109 110 110 ++105 105 105 105 105 105 105 105 105 103 103 102 103 103 102 99 99 99 83 83 83 82 82 82 ++84 84 84 76 76 76 78 78 78 80 80 80 87 87 87 73 73 73 83 83 83 101 101 101 ++94 94 94 67 67 67 67 67 67 70 70 70 67 67 67 74 74 74 71 71 71 59 59 59 ++56 56 56 53 53 53 69 69 69 72 72 72 54 54 54 52 52 52 63 63 63 61 61 61 ++68 68 68 69 69 69 58 58 58 44 44 44 33 33 33 33 33 33 42 42 42 40 40 40 ++61 61 61 65 65 65 24 24 24 29 29 29 51 51 51 50 50 50 53 53 53 29 29 29 ++13 13 13 21 21 21 28 28 28 28 28 28 38 38 38 33 33 33 17 17 17 27 27 27 ++29 29 29 27 27 27 27 27 27 32 32 32 42 42 42 46 46 46 43 43 43 38 38 38 ++44 44 44 43 43 43 42 42 42 42 42 42 40 40 40 36 36 36 25 25 25 17 17 17 ++11 11 11 13 13 13 31 31 31 44 44 44 40 40 40 38 38 38 40 40 40 39 39 39 ++39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 ++37 37 37 38 38 38 39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 37 37 37 ++33 33 33 40 40 40 38 38 38 38 38 38 40 40 40 37 37 37 36 36 36 40 40 40 ++13 13 13 10 10 10 21 21 21 38 38 38 14 14 14 8 8 8 11 11 11 21 21 21 ++34 34 34 29 29 29 37 37 37 34 34 34 14 14 14 11 11 11 19 19 19 6 6 6 ++4 4 4 20 20 20 28 28 28 33 33 33 25 25 25 27 27 27 43 43 43 42 42 42 ++11 11 11 0 0 0 8 8 8 32 32 32 48 48 48 43 43 43 31 31 31 23 23 23 ++50 50 50 48 48 48 50 50 50 50 50 50 50 50 50 53 53 53 45 45 45 23 23 23 ++39 39 39 48 48 48 46 46 46 32 32 32 13 13 13 0 0 0 3 3 3 11 11 11 ++11 11 11 10 10 10 17 17 17 27 27 27 25 25 25 16 16 16 10 10 10 11 11 11 ++11 11 11 20 20 20 49 49 49 53 53 53 52 52 52 37 37 37 46 46 46 23 23 23 ++40 40 40 25 25 25 13 13 13 4 4 4 0 0 0 4 4 4 8 8 8 0 0 0 ++6 6 6 6 6 6 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++ ++0 0 0 0 0 0 21 21 21 36 36 36 28 28 28 10 10 10 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 17 17 17 33 33 33 19 19 19 0 0 0 0 0 0 ++0 0 0 0 0 0 4 4 4 0 0 0 14 14 14 42 42 42 11 11 11 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 17 17 25 25 25 25 25 25 ++0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 4 4 4 16 16 16 25 25 25 ++13 13 13 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 17 17 ++25 25 25 17 17 17 0 0 0 0 0 0 4 4 4 8 8 8 3 3 3 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 17 17 17 27 27 27 ++16 16 16 0 0 0 0 0 0 8 8 8 0 0 0 0 0 0 6 6 6 20 20 20 ++29 29 29 17 17 17 4 4 4 3 3 3 4 4 4 3 3 3 3 3 3 6 6 6 ++32 32 32 27 27 27 11 11 11 0 0 0 3 3 3 8 8 8 4 4 4 0 0 0 ++17 17 17 32 32 32 25 25 25 8 8 8 4 4 4 4 4 4 11 11 11 28 28 28 ++46 46 46 52 52 52 57 57 57 54 54 54 50 50 50 46 46 46 50 50 50 54 54 54 ++52 52 52 53 53 53 57 57 57 61 61 61 61 61 61 54 54 54 40 40 40 29 29 29 ++23 23 23 19 19 19 29 29 29 48 48 48 52 52 52 40 40 40 28 28 28 25 25 25 ++49 49 49 62 62 62 36 36 36 33 33 33 40 40 40 45 45 45 66 66 66 52 52 52 ++33 33 33 48 48 48 53 53 53 56 56 56 67 67 67 63 63 63 66 66 66 57 57 57 ++78 78 78 70 70 70 63 63 63 53 53 53 56 56 56 83 83 83 90 90 90 65 65 65 ++67 67 67 59 59 59 80 80 80 85 85 85 66 66 66 83 83 83 101 101 101 76 76 76 ++73 73 73 77 77 77 77 77 77 74 74 74 81 81 81 95 95 94 103 103 102 101 101 101 ++84 84 84 96 96 96 105 105 105 109 110 110 112 112 113 115 116 115 121 121 119 121 121 119 ++115 116 115 117 117 117 121 121 119 121 121 119 115 116 115 115 116 115 121 121 119 125 122 126 ++112 112 113 121 121 119 109 110 110 109 110 110 122 121 126 127 127 127 128 128 128 131 131 131 ++112 112 113 112 112 113 109 110 110 121 121 119 125 125 127 121 121 119 129 129 130 142 143 144 ++127 127 127 117 117 117 109 110 110 112 112 113 117 117 117 128 128 128 121 121 119 121 121 119 ++101 101 101 101 101 101 89 89 89 75 75 75 69 69 69 67 67 67 66 66 66 69 69 69 ++61 61 61 59 59 59 58 58 58 57 57 57 57 57 57 59 59 59 67 67 67 74 74 74 ++77 77 77 85 85 85 81 81 81 74 74 74 77 77 77 82 82 82 84 84 84 87 87 87 ++80 80 80 62 62 62 70 70 70 62 62 62 65 65 65 49 49 49 54 54 54 61 61 61 ++58 58 58 63 63 63 68 68 68 68 68 68 68 68 68 72 72 72 77 77 77 81 81 81 ++87 87 87 89 89 89 94 94 94 101 101 101 105 104 105 105 104 105 105 105 105 105 105 105 ++125 125 127 117 117 117 105 105 105 103 103 102 105 105 105 105 105 105 103 103 102 99 99 99 ++101 101 101 101 101 101 99 99 99 96 97 98 99 99 99 105 105 105 112 112 113 115 116 115 ++112 112 113 112 112 113 112 112 113 112 112 113 112 112 113 112 112 113 109 110 110 105 105 105 ++105 105 105 105 104 105 105 105 105 101 101 101 103 103 102 96 97 98 81 81 81 80 80 80 ++80 80 80 78 78 78 76 76 76 69 69 69 81 81 81 80 80 80 87 87 87 90 90 90 ++84 84 84 65 65 65 61 61 61 62 62 62 65 65 65 68 68 68 69 69 69 77 77 77 ++54 54 54 58 58 58 53 53 53 52 52 52 61 61 61 66 66 66 61 61 61 56 56 56 ++49 49 49 54 54 54 60 60 60 54 54 54 40 40 40 34 34 34 38 38 38 38 38 38 ++40 40 40 52 52 52 36 36 36 43 43 43 49 49 49 39 39 39 50 50 50 48 48 48 ++25 25 25 17 17 17 24 24 24 33 33 33 45 45 45 44 44 44 33 33 33 40 40 40 ++40 40 40 43 43 43 45 45 45 45 45 45 45 45 45 46 46 46 45 45 45 42 42 42 ++39 39 39 38 38 38 38 38 38 37 37 37 33 33 33 27 27 27 20 20 20 14 14 14 ++13 13 13 24 24 24 39 39 39 44 44 44 38 38 38 34 34 34 37 37 37 38 38 38 ++36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 ++33 33 33 38 38 38 40 40 40 38 38 38 36 36 36 36 36 36 36 36 36 34 34 34 ++36 36 36 40 40 40 33 33 33 38 38 38 44 44 44 36 36 36 24 24 24 14 14 14 ++6 6 6 8 8 8 20 20 20 32 32 32 4 4 4 10 10 10 20 20 20 28 28 28 ++29 29 29 21 21 21 25 25 25 24 24 24 13 13 13 10 10 10 14 14 14 8 8 8 ++14 14 14 27 27 27 31 31 31 28 28 28 11 11 11 10 10 10 29 29 29 32 32 32 ++28 28 28 11 11 11 0 0 0 16 16 16 33 33 33 39 39 39 38 38 38 36 36 36 ++37 37 37 32 32 32 39 39 39 44 44 44 37 37 37 34 34 34 32 32 32 19 19 19 ++31 31 31 34 34 34 29 29 29 20 20 20 16 16 16 13 13 13 16 16 16 24 24 24 ++8 8 8 20 20 20 25 25 25 20 20 20 16 16 16 16 16 16 13 13 13 6 6 6 ++10 10 10 19 19 19 33 33 33 37 37 37 34 34 34 28 28 28 37 37 37 20 20 20 ++31 31 31 24 24 24 20 20 20 11 11 11 0 0 0 6 6 6 16 16 16 13 13 13 ++17 17 17 17 17 17 16 16 16 13 13 13 11 11 11 13 13 13 17 17 17 21 21 21 ++ ++0 0 0 6 6 6 0 0 0 14 14 14 39 39 39 27 27 27 0 0 0 6 6 6 ++0 0 0 6 6 6 0 0 0 0 0 0 17 17 17 32 32 32 24 24 24 4 4 4 ++3 3 3 10 10 10 0 0 0 10 10 10 0 0 0 16 16 16 46 46 46 11 11 11 ++11 11 11 0 0 0 0 0 0 11 11 11 8 8 8 0 0 0 14 14 14 36 36 36 ++16 16 16 0 0 0 0 0 0 6 6 6 4 4 4 0 0 0 3 3 3 17 17 17 ++29 29 29 3 3 3 3 3 3 10 10 10 0 0 0 3 3 3 10 10 10 0 0 0 ++16 16 16 21 21 21 14 14 14 0 0 0 3 3 3 4 4 4 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 21 21 21 19 19 19 ++0 0 0 6 6 6 3 3 3 0 0 0 4 4 4 6 6 6 14 14 14 34 34 34 ++16 16 16 4 4 4 0 0 0 6 6 6 6 6 6 3 3 3 11 11 11 24 24 24 ++34 34 34 0 0 0 0 0 0 10 10 10 0 0 0 3 3 3 17 17 17 8 8 8 ++37 37 37 25 25 25 3 3 3 0 0 0 11 11 11 11 11 11 24 24 24 51 51 51 ++56 56 56 53 53 53 51 51 51 48 48 48 48 48 48 49 49 49 51 51 51 52 52 52 ++48 48 48 52 52 52 57 57 57 56 56 56 46 46 46 34 34 34 23 23 23 17 17 17 ++19 19 19 29 29 29 45 45 45 53 53 53 42 42 42 25 25 25 27 27 27 40 40 40 ++61 61 61 42 42 42 39 39 39 24 24 24 44 44 44 66 66 66 40 40 40 42 42 42 ++36 36 36 49 49 49 68 68 68 59 59 59 43 43 43 49 49 49 80 80 80 70 70 70 ++63 63 63 59 59 59 40 40 40 51 51 51 80 80 80 74 74 74 67 67 67 92 92 92 ++63 63 63 78 78 78 75 75 75 67 67 67 70 70 70 74 74 74 82 82 82 99 99 99 ++87 87 87 71 71 71 66 66 66 74 74 74 77 77 77 78 78 78 92 92 92 109 110 110 ++91 91 91 90 90 90 92 92 92 99 99 99 105 104 105 109 110 110 112 112 113 117 117 117 ++117 117 117 112 112 113 115 116 115 121 121 119 115 116 115 109 110 110 115 116 115 121 121 119 ++117 117 117 121 121 119 105 105 105 105 104 105 117 117 117 115 116 115 115 116 115 125 125 127 ++121 121 119 115 116 115 105 105 105 117 117 117 121 121 119 109 110 110 115 116 115 129 129 130 ++129 129 130 121 121 119 112 112 113 109 110 110 109 110 110 121 121 119 112 112 113 112 112 113 ++105 104 105 103 103 102 91 91 91 80 80 80 73 73 73 66 66 66 65 65 65 71 71 71 ++68 68 68 66 66 66 66 66 66 66 66 66 63 63 63 62 62 62 68 68 68 75 75 75 ++82 82 82 92 92 92 91 91 91 83 83 83 83 83 83 85 85 85 85 85 85 87 87 87 ++90 90 90 72 72 72 70 70 70 63 63 63 62 62 62 59 59 59 53 53 53 57 57 57 ++65 65 65 70 70 70 72 72 72 72 72 72 73 73 73 78 78 78 82 82 82 83 83 83 ++88 88 88 93 93 93 96 97 98 99 99 99 101 101 101 103 103 102 103 103 102 103 103 102 ++112 112 113 117 117 117 109 110 110 101 101 101 103 103 102 103 103 102 99 99 99 99 99 99 ++99 99 99 99 99 99 96 96 96 95 95 94 101 101 101 109 110 110 112 112 113 112 112 113 ++112 112 113 109 110 110 109 110 110 109 110 110 109 110 110 105 105 105 105 105 105 105 104 105 ++101 101 101 101 101 101 103 103 102 99 99 99 101 101 101 95 95 94 80 80 80 78 78 78 ++75 75 75 74 74 74 73 73 73 67 67 67 84 84 84 87 87 87 87 87 87 81 81 81 ++77 77 77 74 74 74 62 62 62 54 54 54 68 68 68 67 67 67 59 59 59 81 81 81 ++60 60 60 57 57 57 51 51 51 54 54 54 62 62 62 60 60 60 51 51 51 49 49 49 ++44 44 44 43 43 43 51 51 51 53 53 53 44 44 44 39 39 39 38 38 38 36 36 36 ++34 34 34 49 49 49 48 48 48 50 50 50 44 44 44 29 29 29 37 37 37 44 44 44 ++37 37 37 23 23 23 29 29 29 36 36 36 38 38 38 40 40 40 34 34 34 34 34 34 ++33 33 33 39 39 39 40 40 40 34 34 34 28 28 28 27 27 27 29 29 29 29 29 29 ++31 31 31 31 31 31 31 31 31 28 28 28 23 23 23 19 19 19 16 16 16 14 14 14 ++14 14 14 29 29 29 34 34 34 28 28 28 23 23 23 23 23 23 21 21 21 21 21 21 ++17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 ++19 19 19 27 27 27 31 31 31 27 27 27 21 21 21 20 20 20 20 20 20 20 20 20 ++14 14 14 21 21 21 14 14 14 25 25 25 36 36 36 27 27 27 16 16 16 0 0 0 ++10 10 10 11 11 11 16 16 16 23 23 23 4 4 4 24 24 24 29 29 29 25 25 25 ++17 17 17 11 11 11 14 14 14 17 17 17 11 11 11 6 6 6 11 11 11 19 19 19 ++31 31 31 31 31 31 24 24 24 17 17 17 3 3 3 6 6 6 24 24 24 20 20 20 ++20 20 20 21 21 21 23 23 23 25 25 25 24 24 24 21 21 21 20 20 20 20 20 20 ++16 16 16 10 10 10 19 19 19 21 21 21 11 11 11 20 20 20 36 36 36 36 36 36 ++19 19 19 20 20 20 14 14 14 13 13 13 21 21 21 19 19 19 8 8 8 6 6 6 ++17 17 17 23 23 23 23 23 23 14 14 14 10 10 10 14 14 14 14 14 14 10 10 10 ++11 11 11 19 19 19 14 14 14 24 24 24 13 13 13 13 13 13 21 21 21 24 24 24 ++16 16 16 13 13 13 19 19 19 24 24 24 19 19 19 19 19 19 23 23 23 23 23 23 ++21 21 21 20 20 20 16 16 16 13 13 13 11 11 11 13 13 13 19 19 19 24 24 24 ++ ++6 6 6 0 0 0 0 0 0 3 3 3 16 16 16 36 36 36 32 32 32 0 0 0 ++0 0 0 0 0 0 6 6 6 3 3 3 0 0 0 17 17 17 39 39 39 29 29 29 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 45 45 45 ++11 11 11 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 ++40 40 40 17 17 17 0 0 0 0 0 0 10 10 10 4 4 4 0 0 0 0 0 0 ++16 16 16 28 28 28 19 19 19 0 0 0 3 3 3 3 3 3 0 0 0 8 8 8 ++0 0 0 21 21 21 28 28 28 11 11 11 0 0 0 0 0 0 0 0 0 6 6 6 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 3 3 3 3 3 3 14 14 14 25 25 25 17 17 17 0 0 0 ++4 4 4 0 0 0 10 10 10 0 0 0 0 0 0 20 20 20 34 34 34 13 13 13 ++0 0 0 3 3 3 6 6 6 0 0 0 0 0 0 6 6 6 24 24 24 37 37 37 ++0 0 0 6 6 6 3 3 3 3 3 3 8 8 8 0 0 0 8 8 8 36 36 36 ++25 25 25 11 11 11 8 8 8 11 11 11 13 13 13 32 32 32 49 49 49 46 46 46 ++52 52 52 50 50 50 48 48 48 49 49 49 50 50 50 52 52 52 51 51 51 50 50 50 ++56 56 56 57 57 57 52 52 52 37 37 37 19 19 19 10 10 10 16 16 16 25 25 25 ++20 20 20 43 43 43 53 53 53 39 39 39 21 21 21 24 24 24 44 44 44 61 61 61 ++36 36 36 37 37 37 28 28 28 44 44 44 59 59 59 49 49 49 42 42 42 34 34 34 ++43 43 43 60 60 60 57 57 57 38 38 38 44 44 44 42 42 42 65 65 65 76 76 76 ++71 71 71 52 52 52 54 54 54 72 72 72 70 70 70 53 53 53 56 56 56 71 71 71 ++90 90 90 78 78 78 65 65 65 63 63 63 65 65 65 56 56 56 62 62 62 87 87 87 ++95 95 94 80 80 80 71 71 71 75 75 75 77 77 77 74 74 74 78 78 78 89 89 89 ++112 112 113 90 90 90 76 76 76 84 84 84 96 97 98 105 104 105 105 105 105 109 110 110 ++117 117 117 112 112 113 109 110 110 115 116 115 117 117 117 115 116 115 112 112 113 112 112 113 ++129 129 130 125 122 126 99 99 99 101 101 101 121 121 119 109 110 110 103 103 102 109 110 110 ++133 133 133 125 122 126 105 105 105 112 112 113 122 121 126 112 112 113 109 110 110 112 112 113 ++129 129 130 128 128 128 117 117 117 105 105 105 101 101 101 117 117 117 105 105 105 96 97 98 ++105 105 105 105 105 105 95 95 94 78 78 78 73 73 73 70 70 70 66 66 66 67 67 67 ++71 71 71 70 70 70 71 71 71 72 72 72 69 69 69 66 66 66 69 69 69 75 75 75 ++83 83 83 96 96 96 99 99 99 91 91 91 88 88 88 87 87 87 85 85 85 87 87 87 ++91 91 91 94 94 94 78 78 78 70 70 70 65 65 65 73 73 73 54 54 54 69 69 69 ++69 69 69 73 73 73 75 75 75 74 74 74 76 76 76 82 82 82 85 85 85 85 85 85 ++89 89 89 96 96 96 101 101 101 99 99 99 96 96 96 99 99 99 103 103 102 103 103 102 ++101 101 101 117 117 117 112 112 113 99 99 99 101 101 101 101 101 101 95 95 94 101 101 101 ++99 99 99 99 99 99 96 96 96 96 97 98 105 105 105 115 116 115 115 116 115 109 110 110 ++112 112 113 109 110 110 109 110 110 105 105 105 105 105 105 105 104 105 103 103 102 103 103 102 ++99 99 99 99 99 99 101 101 101 96 97 98 99 99 99 94 94 94 78 78 78 76 76 76 ++73 73 73 69 69 69 71 71 71 73 73 73 90 90 90 84 84 84 81 81 81 80 80 80 ++75 75 75 57 57 57 59 59 59 61 61 61 62 62 62 75 75 75 81 81 81 81 81 81 ++61 61 61 45 45 45 56 56 56 70 70 70 57 57 57 46 46 46 51 51 51 50 50 50 ++53 53 53 40 40 40 43 43 43 48 48 48 44 44 44 43 43 43 40 40 40 37 37 37 ++33 33 33 46 46 46 46 46 46 42 42 42 38 38 38 33 33 33 32 32 32 31 31 31 ++33 33 33 25 25 25 36 36 36 34 34 34 24 24 24 29 29 29 29 29 29 27 27 27 ++32 32 32 37 37 37 37 37 37 31 31 31 24 24 24 25 25 25 28 28 28 28 28 28 ++23 23 23 24 24 24 24 24 24 21 21 21 16 16 16 13 13 13 14 14 14 16 16 16 ++25 25 25 39 39 39 36 36 36 20 20 20 20 20 20 21 21 21 16 16 16 16 16 16 ++17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 ++21 21 21 32 32 32 36 36 36 31 31 31 23 23 23 21 21 21 23 23 23 23 23 23 ++21 21 21 32 32 32 25 25 25 32 32 32 36 36 36 24 24 24 20 20 20 13 13 13 ++13 13 13 13 13 13 11 11 11 20 20 20 13 13 13 37 37 37 34 34 34 14 14 14 ++6 6 6 6 6 6 10 10 10 16 16 16 14 14 14 6 6 6 13 13 13 31 31 31 ++33 33 33 25 25 25 10 10 10 6 6 6 8 8 8 20 20 20 33 33 33 25 25 25 ++31 31 31 33 33 33 32 32 32 29 29 29 25 25 25 24 24 24 23 23 23 21 21 21 ++33 33 33 21 21 21 27 27 27 33 33 33 32 32 32 38 38 38 36 36 36 13 13 13 ++6 6 6 25 25 25 33 33 33 34 34 34 31 31 31 17 17 17 6 6 6 13 13 13 ++31 31 31 20 20 20 11 11 11 13 13 13 11 11 11 8 8 8 10 10 10 17 17 17 ++3 3 3 42 42 42 36 36 36 32 32 32 14 14 14 32 32 32 29 29 29 17 17 17 ++11 11 11 0 0 0 11 11 11 29 29 29 29 29 29 21 21 21 17 17 17 13 13 13 ++3 3 3 3 3 3 4 4 4 6 6 6 13 13 13 21 21 21 32 32 32 39 39 39 ++ ++8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 17 17 17 32 32 32 31 31 31 ++0 0 0 0 0 0 8 8 8 11 11 11 0 0 0 0 0 0 13 13 13 37 37 37 ++23 23 23 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 3 3 3 0 0 0 ++44 44 44 10 10 10 0 0 0 6 6 6 3 3 3 0 0 0 3 3 3 0 0 0 ++14 14 14 29 29 29 28 28 28 3 3 3 0 0 0 0 0 0 6 6 6 0 0 0 ++0 0 0 16 16 16 24 24 24 16 16 16 0 0 0 0 0 0 4 4 4 8 8 8 ++0 0 0 0 0 0 13 13 13 31 31 31 11 11 11 0 0 0 6 6 6 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 8 8 8 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 0 0 0 13 13 13 25 25 25 10 10 10 0 0 0 6 6 6 ++4 4 4 0 0 0 0 0 0 0 0 0 21 21 21 32 32 32 20 20 20 0 0 0 ++0 0 0 6 6 6 4 4 4 0 0 0 10 10 10 29 29 29 27 27 27 8 8 8 ++10 10 10 0 0 0 4 4 4 6 6 6 0 0 0 16 16 16 38 38 38 31 31 31 ++4 4 4 3 3 3 4 4 4 19 19 19 34 34 34 46 46 46 49 49 49 48 48 48 ++51 51 51 45 45 45 42 42 42 46 46 46 49 49 49 46 46 46 48 48 48 51 51 51 ++60 60 60 42 42 42 21 21 21 14 14 14 19 19 19 21 21 21 17 17 17 14 14 14 ++34 34 34 56 56 56 34 34 34 20 20 20 23 23 23 42 42 42 61 61 61 37 37 37 ++28 28 28 31 31 31 39 39 39 57 57 57 46 46 46 28 28 28 37 37 37 38 38 38 ++57 57 57 53 53 53 43 43 43 36 36 36 45 45 45 60 60 60 58 58 58 44 44 44 ++57 57 57 75 75 75 71 71 71 60 60 60 62 62 62 54 54 54 49 49 49 65 65 65 ++80 80 80 82 82 82 69 69 69 57 57 57 62 62 62 70 70 70 66 66 66 62 62 62 ++80 80 80 90 90 90 82 82 82 67 67 67 70 70 70 81 81 81 80 80 80 74 74 74 ++87 87 87 103 103 102 99 99 99 80 80 80 80 80 80 92 92 92 101 101 101 105 105 105 ++112 112 113 115 116 115 115 116 115 112 112 113 109 110 110 112 112 113 112 112 113 109 110 110 ++99 99 99 115 116 115 122 121 126 96 97 98 99 99 99 121 121 119 105 105 105 99 99 99 ++101 101 101 122 121 126 125 125 127 115 116 115 117 117 117 115 116 115 103 103 102 103 103 102 ++112 112 113 128 128 128 127 127 127 112 112 113 99 99 99 105 105 105 115 116 115 94 94 94 ++89 89 89 103 103 102 105 105 105 90 90 90 76 76 76 75 75 75 74 74 74 70 70 70 ++66 66 66 76 76 76 85 85 85 82 82 82 75 75 75 74 74 74 76 76 76 77 77 77 ++87 87 87 91 91 91 96 96 96 95 95 94 94 94 94 93 93 93 91 91 91 88 88 88 ++85 85 85 83 83 83 78 78 78 74 74 74 71 71 71 70 70 70 70 70 70 71 71 71 ++73 73 73 72 72 72 74 74 74 81 81 81 83 83 83 84 84 84 88 88 88 95 95 94 ++94 94 94 96 96 96 99 99 99 101 101 101 103 103 102 101 101 101 99 99 99 96 96 96 ++94 94 94 105 105 105 115 116 115 105 105 105 92 92 92 94 94 94 96 97 98 91 91 91 ++96 96 96 89 89 89 91 91 91 105 104 105 112 112 113 109 110 110 105 105 105 109 110 110 ++105 105 105 105 105 105 105 105 105 105 104 105 103 103 102 101 101 101 99 99 99 99 99 99 ++96 97 98 101 101 101 96 97 98 93 93 93 96 96 96 91 91 91 77 77 77 71 71 71 ++71 71 71 70 70 70 72 72 72 72 72 72 74 74 74 85 85 85 88 88 88 76 76 76 ++53 53 53 58 58 58 58 58 58 52 52 52 59 59 59 71 71 71 75 75 75 77 77 77 ++54 54 54 54 54 54 61 61 61 60 60 60 49 49 49 45 45 45 49 49 49 48 48 48 ++48 48 48 45 45 45 33 33 33 31 31 31 38 38 38 56 56 56 67 67 67 53 53 53 ++44 44 44 44 44 44 44 44 44 48 48 48 48 48 48 31 31 31 16 16 16 23 23 23 ++27 27 27 45 45 45 50 50 50 43 43 43 39 39 39 39 39 39 40 40 40 49 49 49 ++49 49 49 45 45 45 40 40 40 38 38 38 39 39 39 42 42 42 43 43 43 43 43 43 ++36 36 36 34 34 34 29 29 29 20 20 20 11 11 11 11 11 11 21 21 21 29 29 29 ++38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 ++38 38 38 38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 36 36 36 ++36 36 36 38 38 38 39 39 39 38 38 38 36 36 36 33 33 33 33 33 33 34 34 34 ++31 31 31 40 40 40 43 43 43 36 36 36 32 32 32 33 33 33 25 25 25 13 13 13 ++14 14 14 8 8 8 0 0 0 14 14 14 31 31 31 27 27 27 14 14 14 14 14 14 ++8 8 8 6 6 6 11 11 11 8 8 8 0 0 0 16 16 16 32 32 32 34 34 34 ++23 23 23 8 8 8 8 8 8 14 14 14 14 14 14 23 23 23 33 33 33 36 36 36 ++21 21 21 32 32 32 38 38 38 43 43 43 43 43 43 27 27 27 8 8 8 6 6 6 ++34 34 34 50 50 50 46 46 46 43 43 43 38 38 38 51 51 51 43 43 43 43 43 43 ++27 27 27 49 49 49 32 32 32 14 14 14 36 36 36 34 34 34 16 16 16 25 25 25 ++20 20 20 17 17 17 11 11 11 10 10 10 11 11 11 11 11 11 11 11 11 10 10 10 ++6 6 6 43 43 43 49 49 49 39 39 39 10 10 10 10 10 10 44 44 44 38 38 38 ++0 0 0 8 8 8 0 0 0 6 6 6 39 39 39 34 34 34 4 4 4 0 0 0 ++0 0 0 3 3 3 11 11 11 10 10 10 13 13 13 32 32 32 34 34 34 13 13 13 ++ ++6 6 6 0 0 0 0 0 0 10 10 10 0 0 0 0 0 0 17 17 17 37 37 37 ++31 31 31 10 10 10 0 0 0 0 0 0 6 6 6 0 0 0 4 4 4 14 14 14 ++40 40 40 25 25 25 0 0 0 0 0 0 11 11 11 0 0 0 0 0 0 6 6 6 ++8 8 8 33 33 33 20 20 20 0 0 0 4 4 4 6 6 6 0 0 0 0 0 0 ++0 0 0 17 17 17 28 28 28 23 23 23 4 4 4 0 0 0 0 0 0 11 11 11 ++0 0 0 3 3 3 16 16 16 21 21 21 16 16 16 0 0 0 0 0 0 0 0 0 ++3 3 3 10 10 10 3 3 3 8 8 8 24 24 24 17 17 17 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 0 0 0 ++0 0 0 0 0 0 21 21 21 29 29 29 6 6 6 3 3 3 13 13 13 0 0 0 ++4 4 4 0 0 0 4 4 4 23 23 23 27 27 27 13 13 13 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 10 10 10 23 23 23 25 25 25 14 14 14 0 0 0 ++3 3 3 6 6 6 0 0 0 0 0 0 19 19 19 33 33 33 25 25 25 14 14 14 ++0 0 0 4 4 4 16 16 16 29 29 29 42 42 42 48 48 48 49 49 49 46 46 46 ++48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 50 50 50 49 49 49 48 48 48 ++38 38 38 21 21 21 13 13 13 19 19 19 19 19 19 13 13 13 21 21 21 36 36 36 ++53 53 53 32 32 32 28 28 28 21 21 21 36 36 36 51 51 51 32 32 32 25 25 25 ++29 29 29 29 29 29 60 60 60 44 44 44 27 27 27 38 38 38 38 38 38 59 59 59 ++51 51 51 39 39 39 33 33 33 42 42 42 54 54 54 57 57 57 49 49 49 40 40 40 ++49 49 49 65 65 65 74 74 74 62 62 62 45 45 45 52 52 52 67 67 67 68 68 68 ++59 59 59 77 77 77 80 80 80 66 66 66 60 60 60 61 61 61 62 62 62 63 63 63 ++69 69 69 83 83 83 88 88 88 82 82 82 73 73 73 66 66 66 68 68 68 77 77 77 ++78 78 78 94 94 94 99 99 99 93 93 93 84 84 84 78 78 78 85 85 85 99 99 99 ++105 104 105 109 110 110 112 112 113 112 112 113 109 110 110 112 112 113 112 112 113 109 110 110 ++105 104 105 109 110 110 121 121 119 109 110 110 105 105 105 112 112 113 99 99 99 101 101 101 ++96 97 98 109 110 110 115 116 115 121 121 119 122 121 126 109 110 110 96 97 98 105 105 105 ++105 105 105 121 121 119 122 121 126 117 117 117 105 105 105 103 103 102 105 105 105 99 99 99 ++91 91 91 91 91 91 94 94 94 96 96 96 88 88 88 75 75 75 71 71 71 76 76 76 ++73 73 73 81 81 81 87 87 87 87 87 87 83 83 83 81 81 81 83 83 83 85 85 85 ++87 87 87 91 91 91 93 93 93 92 92 92 92 92 92 94 94 94 95 95 94 94 94 94 ++88 88 88 85 85 85 80 80 80 75 75 75 73 73 73 73 73 73 73 73 73 74 74 74 ++75 75 75 78 78 78 82 82 82 84 84 84 87 87 87 89 89 89 91 91 91 91 91 91 ++99 99 99 96 97 98 96 97 98 96 97 98 96 97 98 99 99 99 99 99 99 99 99 99 ++95 95 94 99 99 99 109 110 110 105 105 105 96 97 98 91 91 91 92 92 92 89 89 89 ++90 90 90 89 89 89 94 94 94 105 104 105 109 110 110 105 105 105 105 104 105 105 105 105 ++103 103 102 103 103 102 103 103 102 101 101 101 101 101 101 99 99 99 96 97 98 96 97 98 ++95 95 94 99 99 99 94 94 94 91 91 91 94 94 94 89 89 89 76 76 76 70 70 70 ++63 63 63 69 69 69 74 74 74 71 71 71 67 67 67 75 75 75 84 84 84 82 82 82 ++62 62 62 61 61 61 61 61 61 56 56 56 54 54 54 70 70 70 73 73 73 60 60 60 ++67 67 67 59 59 59 58 58 58 57 57 57 50 50 50 49 49 49 49 49 49 44 44 44 ++51 51 51 54 54 54 43 43 43 29 29 29 23 23 23 40 40 40 63 63 63 61 61 61 ++46 46 46 38 38 38 29 29 29 37 37 37 49 49 49 44 44 44 28 28 28 24 24 24 ++40 40 40 53 53 53 57 57 57 52 52 52 49 49 49 42 42 42 38 38 38 43 43 43 ++49 49 49 48 48 48 45 45 45 43 43 43 42 42 42 40 40 40 38 38 38 37 37 37 ++33 33 33 28 28 28 19 19 19 11 11 11 13 13 13 20 20 20 29 29 29 36 36 36 ++38 38 38 38 38 38 38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 ++38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 36 36 36 36 36 36 ++37 37 37 37 37 37 36 36 36 36 36 36 36 36 36 34 34 34 34 34 34 33 33 33 ++36 36 36 34 34 34 33 33 33 34 34 34 34 34 34 31 31 31 20 20 20 10 10 10 ++6 6 6 16 16 16 20 20 20 25 25 25 29 29 29 21 21 21 10 10 10 10 10 10 ++6 6 6 10 10 10 8 8 8 0 0 0 6 6 6 27 27 27 32 32 32 19 19 19 ++16 16 16 10 10 10 11 11 11 11 11 11 4 4 4 3 3 3 8 8 8 13 13 13 ++33 33 33 16 16 16 19 19 19 49 49 49 54 54 54 19 19 19 0 0 0 0 0 0 ++11 11 11 44 44 44 49 49 49 36 36 36 23 23 23 40 40 40 46 46 46 56 56 56 ++49 49 49 44 44 44 10 10 10 0 0 0 10 10 10 25 25 25 21 21 21 25 25 25 ++17 17 17 14 14 14 11 11 11 10 10 10 11 11 11 13 13 13 13 13 13 11 11 11 ++16 16 16 49 49 49 49 49 49 40 40 40 23 23 23 14 14 14 42 42 42 48 48 48 ++37 37 37 3 3 3 0 0 0 14 14 14 14 14 14 34 34 34 38 38 38 0 0 0 ++0 0 0 16 16 16 31 31 31 34 34 34 34 34 34 42 42 42 46 46 46 43 43 43 ++ ++34 34 34 10 10 10 0 0 0 6 6 6 3 3 3 0 0 0 0 0 0 14 14 14 ++39 39 39 23 23 23 3 3 3 0 0 0 0 0 0 6 6 6 0 0 0 0 0 0 ++21 21 21 37 37 37 25 25 25 0 0 0 0 0 0 6 6 6 4 4 4 6 6 6 ++0 0 0 19 19 19 32 32 32 19 19 19 0 0 0 0 0 0 4 4 4 0 0 0 ++0 0 0 0 0 0 19 19 19 31 31 31 23 23 23 0 0 0 0 0 0 10 10 10 ++0 0 0 0 0 0 4 4 4 16 16 16 21 21 21 16 16 16 0 0 0 0 0 0 ++10 10 10 0 0 0 0 0 0 6 6 6 11 11 11 21 21 21 19 19 19 0 0 0 ++4 4 4 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 6 6 6 4 4 4 0 0 0 ++0 0 0 20 20 20 27 27 27 16 16 16 4 4 4 3 3 3 3 3 3 3 3 3 ++0 0 0 4 4 4 17 17 17 28 28 28 19 19 19 0 0 0 0 0 0 4 4 4 ++4 4 4 0 0 0 4 4 4 24 24 24 28 28 28 14 14 14 0 0 0 0 0 0 ++0 0 0 6 6 6 0 0 0 3 3 3 33 33 33 33 33 33 11 11 11 0 0 0 ++0 0 0 13 13 13 28 28 28 42 42 42 48 48 48 49 49 49 46 46 46 44 44 44 ++45 45 45 49 49 49 49 49 49 46 46 46 49 49 49 51 51 51 44 44 44 32 32 32 ++14 14 14 10 10 10 10 10 10 16 16 16 14 14 14 17 17 17 32 32 32 50 50 50 ++33 33 33 27 27 27 0 0 0 42 42 42 54 54 54 29 29 29 37 37 37 24 24 24 ++37 37 37 58 58 58 44 44 44 38 38 38 25 25 25 28 28 28 59 59 59 49 49 49 ++37 37 37 31 31 31 36 36 36 51 51 51 53 53 53 43 43 43 40 40 40 48 48 48 ++61 61 61 62 62 62 71 71 71 67 67 67 51 51 51 57 57 57 66 66 66 57 57 57 ++50 50 50 57 57 57 69 69 69 78 78 78 73 73 73 56 56 56 54 54 54 69 69 69 ++59 59 59 67 67 67 80 80 80 88 88 88 82 82 82 66 66 66 65 65 65 77 77 77 ++69 69 69 76 76 76 88 88 88 96 97 98 93 93 93 78 78 78 75 75 75 87 87 87 ++94 94 94 101 101 101 109 110 110 109 110 110 109 110 110 109 110 110 109 110 110 109 110 110 ++109 110 110 105 104 105 115 116 115 109 110 110 109 110 110 115 116 115 101 101 101 95 95 94 ++93 93 93 95 95 94 101 101 101 115 116 115 125 122 126 109 110 110 96 96 96 101 101 101 ++99 99 99 112 112 113 115 116 115 117 117 117 112 112 113 105 105 105 105 104 105 101 101 101 ++92 92 92 85 85 85 87 87 87 99 99 99 99 99 99 87 87 87 78 78 78 83 83 83 ++78 78 78 81 81 81 85 85 85 87 87 87 85 85 85 83 83 83 84 84 84 87 87 87 ++91 91 91 94 94 94 95 95 94 93 93 93 94 94 94 96 96 96 95 95 94 92 92 92 ++89 89 89 87 87 87 82 82 82 81 81 81 81 81 81 81 81 81 80 80 80 77 77 77 ++81 81 81 87 87 87 87 87 87 87 87 87 89 89 89 95 95 94 95 95 94 90 90 90 ++96 97 98 96 97 98 96 96 96 96 96 96 96 96 96 96 96 96 96 97 98 99 99 99 ++95 95 94 92 92 92 99 99 99 105 105 105 101 101 101 90 90 90 87 87 87 87 87 87 ++84 84 84 90 90 90 99 99 99 105 105 105 105 105 105 105 104 105 101 101 101 101 101 101 ++101 101 101 99 99 99 99 99 99 96 97 98 96 96 96 95 95 94 95 95 94 95 95 94 ++92 92 92 95 95 94 91 91 91 89 89 89 91 91 91 87 87 87 76 76 76 68 68 68 ++65 65 65 72 72 72 78 78 78 74 74 74 68 68 68 71 71 71 76 76 76 75 75 75 ++73 73 73 60 60 60 57 57 57 56 56 56 51 51 51 63 63 63 71 71 71 56 56 56 ++68 68 68 54 54 54 50 50 50 54 54 54 59 59 59 57 57 57 48 48 48 36 36 36 ++38 38 38 54 54 54 56 56 56 43 43 43 27 27 27 37 37 37 59 59 59 57 57 57 ++50 50 50 38 38 38 23 23 23 25 25 25 40 40 40 44 44 44 37 37 37 31 31 31 ++40 40 40 46 46 46 49 49 49 51 51 51 52 52 52 46 46 46 43 43 43 48 48 48 ++49 49 49 49 49 49 49 49 49 46 46 46 42 42 42 37 37 37 32 32 32 29 29 29 ++25 25 25 17 17 17 10 10 10 13 13 13 21 21 21 32 32 32 37 37 37 38 38 38 ++38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 36 36 36 36 36 36 ++37 37 37 37 37 37 37 37 37 37 37 37 36 36 36 36 36 36 36 36 36 36 36 36 ++36 36 36 34 34 34 33 33 33 33 33 33 34 34 34 36 36 36 34 34 34 33 33 33 ++38 38 38 40 40 40 37 37 37 25 25 25 11 11 11 3 3 3 4 4 4 6 6 6 ++8 8 8 24 24 24 31 31 31 28 28 28 21 21 21 13 13 13 6 6 6 10 10 10 ++11 11 11 8 8 8 0 0 0 0 0 0 20 20 20 31 31 31 23 23 23 6 6 6 ++8 8 8 13 13 13 13 13 13 13 13 13 13 13 13 10 10 10 16 16 16 29 29 29 ++21 21 21 37 37 37 31 31 31 13 13 13 24 24 24 40 40 40 29 29 29 0 0 0 ++34 34 34 50 50 50 44 44 44 37 37 37 33 33 33 39 39 39 37 37 37 36 36 36 ++53 53 53 40 40 40 13 13 13 0 0 0 10 10 10 24 24 24 21 21 21 17 17 17 ++11 11 11 11 11 11 10 10 10 10 10 10 13 13 13 13 13 13 13 13 13 13 13 13 ++8 8 8 38 38 38 34 34 34 36 36 36 37 37 37 31 31 31 43 43 43 50 50 50 ++48 48 48 33 33 33 27 27 27 13 13 13 0 0 0 17 17 17 40 40 40 39 39 39 ++37 37 37 38 38 38 36 36 36 33 33 33 31 31 31 23 23 23 17 17 17 19 19 19 ++ ++43 43 43 32 32 32 14 14 14 0 0 0 0 0 0 6 6 6 3 3 3 0 0 0 ++13 13 13 28 28 28 28 28 28 6 6 6 0 0 0 0 0 0 4 4 4 0 0 0 ++0 0 0 16 16 16 37 37 37 24 24 24 0 0 0 0 0 0 14 14 14 0 0 0 ++4 4 4 0 0 0 17 17 17 34 34 34 14 14 14 0 0 0 0 0 0 0 0 0 ++8 8 8 0 0 0 0 0 0 17 17 17 28 28 28 23 23 23 6 6 6 0 0 0 ++4 4 4 6 6 6 0 0 0 0 0 0 14 14 14 31 31 31 23 23 23 0 0 0 ++3 3 3 0 0 0 3 3 3 10 10 10 0 0 0 13 13 13 27 27 27 13 13 13 ++3 3 3 0 0 0 0 0 0 6 6 6 6 6 6 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 3 3 3 6 6 6 4 4 4 0 0 0 0 0 0 0 0 0 ++16 16 16 32 32 32 19 19 19 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 ++0 0 0 17 17 17 23 23 23 11 11 11 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 3 3 3 17 17 17 25 25 25 19 19 19 0 0 0 0 0 0 6 6 6 ++0 0 0 0 0 0 11 11 11 28 28 28 27 27 27 13 13 13 0 0 0 0 0 0 ++13 13 13 25 25 25 39 39 39 48 48 48 49 49 49 46 46 46 44 44 44 44 44 44 ++44 44 44 44 44 44 43 43 43 45 45 45 49 49 49 45 45 45 29 29 29 11 11 11 ++10 10 10 16 16 16 14 14 14 8 8 8 16 16 16 32 32 32 40 40 40 39 39 39 ++19 19 19 20 20 20 40 40 40 48 48 48 38 38 38 24 24 24 19 19 19 38 38 38 ++54 54 54 42 42 42 36 36 36 25 25 25 34 34 34 51 51 51 43 43 43 34 34 34 ++27 27 27 37 37 37 51 51 51 53 53 53 40 40 40 31 31 31 42 42 42 60 60 60 ++59 59 59 49 49 49 46 46 46 61 61 61 74 74 74 70 70 70 57 57 57 50 50 50 ++57 57 57 48 48 48 53 53 53 73 73 73 80 80 80 67 67 67 56 56 56 58 58 58 ++61 61 61 58 58 58 63 63 63 77 77 77 87 87 87 81 81 81 70 70 70 66 66 66 ++71 71 71 67 67 67 71 71 71 87 87 87 96 97 98 91 91 91 78 78 78 72 72 72 ++83 83 83 92 92 92 103 103 102 105 105 105 105 105 105 105 105 105 105 104 105 105 104 105 ++105 105 105 105 104 105 109 110 110 99 99 99 101 101 101 121 121 119 112 112 113 92 92 92 ++90 90 90 91 91 91 92 92 92 101 101 101 115 116 115 117 117 117 105 104 105 92 92 92 ++92 92 92 105 104 105 105 105 105 109 110 110 109 110 110 112 112 113 112 112 113 101 101 101 ++89 89 89 88 88 88 88 88 88 92 92 92 99 99 99 101 101 101 94 94 94 84 84 84 ++85 85 85 84 84 84 84 84 84 87 87 87 87 87 87 87 87 87 88 88 88 90 90 90 ++92 92 92 93 93 93 93 93 93 96 96 96 103 103 102 105 105 105 99 99 99 91 91 91 ++87 87 87 84 84 84 84 84 84 87 87 87 89 89 89 89 89 89 87 87 87 83 83 83 ++87 87 87 88 88 88 87 87 87 85 85 85 89 89 89 95 95 94 99 99 99 96 96 96 ++92 92 92 93 93 93 95 95 94 96 96 96 96 96 96 96 96 96 95 95 94 94 94 94 ++94 94 94 89 89 89 92 92 92 101 101 101 99 99 99 90 90 90 84 84 84 84 84 84 ++82 82 82 93 93 93 103 103 102 105 104 105 103 103 102 101 101 101 99 99 99 96 97 98 ++99 99 99 96 97 98 95 95 94 94 94 94 93 93 93 93 93 93 93 93 93 93 93 93 ++90 90 90 91 91 91 89 89 89 87 87 87 88 88 88 87 87 87 76 76 76 68 68 68 ++67 67 67 66 66 66 63 63 63 60 60 60 61 61 61 67 67 67 67 67 67 62 62 62 ++82 82 82 66 66 66 52 52 52 53 53 53 51 51 51 53 53 53 65 65 65 63 63 63 ++58 58 58 45 45 45 40 40 40 54 54 54 67 67 67 65 65 65 48 48 48 29 29 29 ++21 21 21 43 43 43 52 52 52 51 51 51 46 46 46 51 51 51 59 59 59 44 44 44 ++46 46 46 43 43 43 34 34 34 27 27 27 25 25 25 28 28 28 32 32 32 33 33 33 ++44 44 44 42 42 42 43 43 43 48 48 48 49 49 49 44 44 44 43 43 43 46 46 46 ++43 43 43 45 45 45 45 45 45 42 42 42 36 36 36 28 28 28 23 23 23 21 21 21 ++14 14 14 14 14 14 17 17 17 25 25 25 34 34 34 39 39 39 38 38 38 34 34 34 ++37 37 37 37 37 37 37 37 37 36 36 36 36 36 36 36 36 36 36 36 36 34 34 34 ++37 37 37 37 37 37 36 36 36 36 36 36 36 36 36 36 36 36 34 34 34 34 34 34 ++33 33 33 34 34 34 34 34 34 34 34 34 33 33 33 33 33 33 34 34 34 37 37 37 ++36 36 36 34 34 34 21 21 21 0 0 0 0 0 0 0 0 0 13 13 13 13 13 13 ++21 21 21 28 28 28 27 27 27 16 16 16 8 8 8 10 10 10 11 11 11 11 11 11 ++16 16 16 4 4 4 3 3 3 20 20 20 31 31 31 20 20 20 8 8 8 11 11 11 ++13 13 13 16 16 16 10 10 10 6 6 6 13 13 13 14 14 14 23 23 23 39 39 39 ++42 42 42 38 38 38 20 20 20 0 0 0 3 3 3 29 29 29 43 43 43 43 43 43 ++40 40 40 37 37 37 25 25 25 36 36 36 48 48 48 39 39 39 20 20 20 0 0 0 ++39 39 39 40 40 40 32 32 32 24 24 24 25 25 25 21 21 21 11 11 11 11 11 11 ++10 10 10 10 10 10 10 10 10 11 11 11 13 13 13 13 13 13 11 11 11 11 11 11 ++24 24 24 38 38 38 32 32 32 36 36 36 46 46 46 44 44 44 39 39 39 25 25 25 ++42 42 42 33 33 33 24 24 24 20 20 20 25 25 25 32 32 32 39 39 39 45 45 45 ++44 44 44 34 34 34 11 11 11 0 0 0 10 10 10 4 4 4 0 0 0 0 0 0 ++ ++11 11 11 29 29 29 32 32 32 14 14 14 0 0 0 0 0 0 4 4 4 3 3 3 ++0 0 0 19 19 19 33 33 33 23 23 23 4 4 4 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 17 17 17 38 38 38 24 24 24 0 0 0 0 0 0 0 0 0 ++4 4 4 3 3 3 0 0 0 11 11 11 32 32 32 16 16 16 0 0 0 8 8 8 ++6 6 6 0 0 0 0 0 0 0 0 0 16 16 16 28 28 28 21 21 21 3 3 3 ++0 0 0 6 6 6 0 0 0 0 0 0 0 0 0 21 21 21 27 27 27 20 20 20 ++0 0 0 10 10 10 0 0 0 0 0 0 10 10 10 4 4 4 3 3 3 27 27 27 ++14 14 14 3 3 3 0 0 0 0 0 0 4 4 4 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 3 3 3 10 10 10 4 4 4 0 0 0 0 0 0 13 13 13 ++31 31 31 11 11 11 8 8 8 4 4 4 0 0 0 0 0 0 8 8 8 0 0 0 ++13 13 13 23 23 23 17 17 17 0 0 0 0 0 0 6 6 6 8 8 8 0 0 0 ++0 0 0 16 16 16 23 23 23 14 14 14 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 11 11 11 25 25 25 28 28 28 14 14 14 0 0 0 0 0 0 10 10 10 ++29 29 29 37 37 37 45 45 45 48 48 48 45 45 45 42 42 42 42 42 42 44 44 44 ++43 43 43 42 42 42 44 44 44 48 48 48 43 43 43 29 29 29 13 13 13 4 4 4 ++13 13 13 13 13 13 10 10 10 14 14 14 31 31 31 42 42 42 34 34 34 16 16 16 ++11 11 11 32 32 32 53 53 53 34 34 34 17 17 17 25 25 25 32 32 32 49 49 49 ++44 44 44 23 23 23 21 21 21 32 32 32 49 49 49 52 52 52 32 32 32 28 28 28 ++36 36 36 50 50 50 54 54 54 42 42 42 32 32 32 38 38 38 51 51 51 60 60 60 ++46 46 46 37 37 37 37 37 37 54 54 54 71 71 71 68 68 68 54 54 54 46 46 46 ++51 51 51 57 57 57 56 56 56 53 53 53 65 65 65 78 78 78 71 71 71 48 48 48 ++63 63 63 60 60 60 59 59 59 65 65 65 77 77 77 87 87 87 78 78 78 61 61 61 ++72 72 72 70 70 70 69 69 69 74 74 74 87 87 87 94 94 94 87 87 87 71 71 71 ++72 72 72 81 81 81 92 92 92 101 101 101 105 104 105 103 103 102 103 103 102 105 104 105 ++103 103 102 105 104 105 105 105 105 91 91 91 89 89 89 109 110 110 112 112 113 101 101 101 ++87 87 87 88 88 88 88 88 88 90 90 90 101 101 101 112 112 113 112 112 113 101 101 101 ++91 91 91 93 93 93 99 99 99 105 105 105 101 101 101 103 103 102 115 116 115 105 105 105 ++90 90 90 90 90 90 87 87 87 85 85 85 94 94 94 105 104 105 99 99 99 85 85 85 ++89 89 89 87 87 87 87 87 87 88 88 88 92 92 92 96 96 96 99 99 99 101 101 101 ++92 92 92 88 88 88 87 87 87 92 92 92 105 105 105 115 116 115 109 110 110 101 101 101 ++88 88 88 85 85 85 83 83 83 84 84 84 88 88 88 92 92 92 92 92 92 91 91 91 ++94 94 94 87 87 87 82 82 82 83 83 83 87 87 87 91 91 91 96 97 98 103 103 102 ++90 90 90 90 90 90 91 91 91 92 92 92 92 92 92 92 92 92 92 92 92 92 92 92 ++91 91 91 90 90 90 89 89 89 91 91 91 93 93 93 90 90 90 84 84 84 82 82 82 ++85 85 85 95 95 94 103 103 102 101 101 101 96 97 98 96 97 98 99 99 99 96 96 96 ++95 95 94 94 94 94 93 93 93 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 ++89 89 89 88 88 88 87 87 87 87 87 87 87 87 87 85 85 85 78 78 78 68 68 68 ++80 80 80 72 72 72 62 62 62 58 58 58 65 65 65 73 73 73 73 73 73 71 71 71 ++74 74 74 75 75 75 56 56 56 50 50 50 52 52 52 51 51 51 59 59 59 63 63 63 ++59 59 59 49 49 49 39 39 39 46 46 46 62 62 62 67 67 67 54 54 54 42 42 42 ++27 27 27 32 32 32 33 33 33 43 43 43 52 52 52 61 61 61 58 58 58 31 31 31 ++34 34 34 40 40 40 45 45 45 38 38 38 25 25 25 20 20 20 24 24 24 28 28 28 ++29 29 29 27 27 27 33 33 33 44 44 44 48 48 48 46 46 46 46 46 46 48 48 48 ++32 32 32 32 32 32 32 32 32 27 27 27 21 21 21 16 16 16 14 14 14 14 14 14 ++16 16 16 21 21 21 29 29 29 37 37 37 39 39 39 39 39 39 36 36 36 34 34 34 ++36 36 36 36 36 36 36 36 36 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 ++36 36 36 36 36 36 36 36 36 36 36 36 34 34 34 34 34 34 34 34 34 34 34 34 ++31 31 31 34 34 34 37 37 37 36 36 36 32 32 32 31 31 31 34 34 34 38 38 38 ++16 16 16 25 25 25 32 32 32 24 24 24 8 8 8 0 0 0 0 0 0 10 10 10 ++29 29 29 24 24 24 13 13 13 3 3 3 3 3 3 13 13 13 16 16 16 8 8 8 ++13 13 13 13 13 13 23 23 23 34 34 34 29 29 29 10 10 10 4 4 4 17 17 17 ++16 16 16 16 16 16 6 6 6 8 8 8 21 21 21 27 27 27 32 32 32 45 45 45 ++42 42 42 17 17 17 0 0 0 0 0 0 3 3 3 10 10 10 31 31 31 51 51 51 ++34 34 34 43 43 43 36 36 36 40 40 40 50 50 50 38 38 38 23 23 23 0 0 0 ++34 34 34 44 44 44 36 36 36 27 27 27 29 29 29 14 14 14 0 0 0 16 16 16 ++11 11 11 11 11 11 13 13 13 13 13 13 11 11 11 10 10 10 10 10 10 10 10 10 ++20 20 20 27 27 27 27 27 27 28 28 28 33 33 33 44 44 44 40 40 40 10 10 10 ++37 37 37 21 21 21 37 37 37 52 52 52 40 40 40 29 29 29 25 25 25 10 10 10 ++27 27 27 25 25 25 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 11 11 11 ++ ++0 0 0 11 11 11 27 27 27 27 27 27 16 16 16 0 0 0 0 0 0 8 8 8 ++0 0 0 0 0 0 13 13 13 25 25 25 24 24 24 8 8 8 0 0 0 0 0 0 ++14 14 14 0 0 0 0 0 0 16 16 16 38 38 38 25 25 25 0 0 0 0 0 0 ++3 3 3 8 8 8 0 0 0 0 0 0 13 13 13 29 29 29 20 20 20 0 0 0 ++0 0 0 4 4 4 6 6 6 0 0 0 0 0 0 14 14 14 24 24 24 23 23 23 ++0 0 0 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 11 11 11 29 29 29 ++13 13 13 11 11 11 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 13 13 13 ++24 24 24 16 16 16 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 10 10 10 28 28 28 ++13 13 13 3 3 3 0 0 0 6 6 6 3 3 3 0 0 0 4 4 4 6 6 6 ++20 20 20 16 16 16 6 6 6 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 ++17 17 17 21 21 21 16 16 16 0 0 0 0 0 0 6 6 6 6 6 6 0 0 0 ++0 0 0 29 29 29 25 25 25 6 6 6 6 6 6 8 8 8 8 8 8 20 20 20 ++42 42 42 43 43 43 45 45 45 43 43 43 40 40 40 39 39 39 40 40 40 43 43 43 ++42 42 42 44 44 44 49 49 49 46 46 46 32 32 32 11 11 11 6 6 6 14 14 14 ++13 13 13 0 0 0 8 8 8 29 29 29 40 40 40 34 34 34 19 19 19 8 8 8 ++19 19 19 44 44 44 28 28 28 16 16 16 17 17 17 33 33 33 57 57 57 43 43 43 ++21 21 21 33 33 33 23 23 23 48 48 48 49 49 49 21 21 21 32 32 32 31 31 31 ++50 50 50 50 50 50 40 40 40 29 29 29 36 36 36 53 53 53 56 56 56 46 46 46 ++40 40 40 43 43 43 56 56 56 56 56 56 48 48 48 57 57 57 66 66 66 56 56 56 ++40 40 40 49 49 49 53 53 53 50 50 50 52 52 52 69 69 69 76 76 76 69 69 69 ++54 54 54 59 59 59 60 60 60 58 58 58 62 62 62 77 77 77 84 84 84 76 76 76 ++63 63 63 70 70 70 72 72 72 68 68 68 69 69 69 84 84 84 92 92 92 88 88 88 ++70 70 70 72 72 72 80 80 80 90 90 90 96 97 98 101 101 101 103 103 102 105 104 105 ++99 99 99 101 101 101 101 101 101 93 93 93 84 84 84 89 89 89 101 101 101 109 110 110 ++89 89 89 83 83 83 85 85 85 88 88 88 88 88 88 99 99 99 112 112 113 112 112 113 ++95 95 94 88 88 88 93 93 93 105 105 105 96 97 98 88 88 88 105 104 105 115 116 115 ++96 96 96 89 89 89 82 82 82 83 83 83 91 91 91 95 95 94 92 92 92 87 87 87 ++87 87 87 87 87 87 87 87 87 85 85 85 90 90 90 99 99 99 103 103 102 103 103 102 ++101 101 101 93 93 93 87 87 87 87 87 87 99 99 99 109 110 110 112 112 113 105 105 105 ++96 96 96 90 90 90 83 83 83 78 78 78 82 82 82 88 88 88 94 94 94 96 97 98 ++99 99 99 90 90 90 83 83 83 83 83 83 84 84 84 87 87 87 92 92 92 101 101 101 ++93 93 93 90 90 90 87 87 87 85 85 85 84 84 84 87 87 87 89 89 89 91 91 91 ++87 87 87 89 89 89 87 87 87 83 83 83 87 87 87 88 88 88 83 83 83 80 80 80 ++89 89 89 96 96 96 99 99 99 96 96 96 93 93 93 94 94 94 95 95 94 94 94 94 ++91 91 91 91 91 91 90 90 90 89 89 89 89 89 89 89 89 89 89 89 89 89 89 89 ++87 87 87 85 85 85 85 85 85 85 85 85 84 84 84 84 84 84 78 78 78 68 68 68 ++61 61 61 62 62 62 57 57 57 53 53 53 54 54 54 53 53 53 50 50 50 49 49 49 ++52 52 52 74 74 74 58 58 58 46 46 46 54 54 54 58 58 58 62 62 62 59 59 59 ++69 69 69 62 62 62 46 46 46 37 37 37 46 46 46 60 60 60 62 62 62 59 59 59 ++39 39 39 31 31 31 21 21 21 38 38 38 54 54 54 61 61 61 52 52 52 20 20 20 ++21 21 21 28 28 28 42 42 42 48 48 48 40 40 40 32 32 32 27 27 27 21 21 21 ++25 25 25 25 25 25 33 33 33 39 39 39 36 36 36 29 29 29 24 24 24 17 17 17 ++20 20 20 19 19 19 17 17 17 14 14 14 13 13 13 13 13 13 14 14 14 17 17 17 ++27 27 27 32 32 32 37 37 37 38 38 38 37 37 37 34 34 34 36 36 36 37 37 37 ++34 34 34 34 34 34 34 34 34 34 34 34 33 33 33 33 33 33 33 33 33 33 33 33 ++36 36 36 36 36 36 34 34 34 34 34 34 34 34 34 34 34 34 33 33 33 33 33 33 ++31 31 31 32 32 32 34 34 34 34 34 34 32 32 32 31 31 31 31 31 31 32 32 32 ++6 6 6 8 8 8 23 23 23 36 36 36 32 32 32 19 19 19 20 20 20 34 34 34 ++25 25 25 16 16 16 8 8 8 6 6 6 10 10 10 16 16 16 16 16 16 3 3 3 ++10 10 10 23 23 23 39 39 39 37 37 37 17 17 17 8 8 8 13 13 13 13 13 13 ++11 11 11 11 11 11 11 11 11 20 20 20 29 29 29 32 32 32 31 31 31 36 36 36 ++43 43 43 43 43 43 39 39 39 32 32 32 31 31 31 39 39 39 39 39 39 25 25 25 ++34 34 34 56 56 56 48 48 48 37 37 37 44 44 44 43 43 43 44 44 44 20 20 20 ++42 42 42 46 46 46 33 33 33 28 28 28 37 37 37 23 23 23 4 4 4 20 20 20 ++13 13 13 13 13 13 13 13 13 13 13 13 10 10 10 10 10 10 11 11 11 11 11 11 ++10 10 10 23 23 23 32 32 32 27 27 27 23 23 23 40 40 40 48 48 48 27 27 27 ++33 33 33 37 37 37 39 39 39 43 43 43 40 40 40 19 19 19 0 0 0 4 4 4 ++14 14 14 29 29 29 34 34 34 20 20 20 0 0 0 0 0 0 4 4 4 24 24 24 ++ ++6 6 6 3 3 3 6 6 6 23 23 23 31 31 31 14 14 14 0 0 0 0 0 0 ++8 8 8 0 0 0 0 0 0 11 11 11 24 24 24 20 20 20 8 8 8 0 0 0 ++0 0 0 10 10 10 0 0 0 0 0 0 20 20 20 36 36 36 23 23 23 6 6 6 ++4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 19 19 19 34 34 34 11 11 11 ++0 0 0 3 3 3 4 4 4 0 0 0 0 0 0 0 0 0 13 13 13 25 25 25 ++14 14 14 3 3 3 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 19 19 19 ++27 27 27 11 11 11 10 10 10 6 6 6 0 0 0 3 3 3 10 10 10 0 0 0 ++16 16 16 20 20 20 14 14 14 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 11 11 11 17 17 17 21 21 21 ++0 0 0 10 10 10 0 0 0 0 0 0 14 14 14 6 6 6 0 0 0 23 23 23 ++13 13 13 3 3 3 0 0 0 4 4 4 4 4 4 0 0 0 3 3 3 14 14 14 ++23 23 23 13 13 13 0 0 0 0 0 0 0 0 0 6 6 6 4 4 4 3 3 3 ++20 20 20 24 24 24 13 13 13 0 0 0 0 0 0 11 11 11 21 21 21 33 33 33 ++45 45 45 44 44 44 42 42 42 40 40 40 39 39 39 38 38 38 39 39 39 39 39 39 ++44 44 44 45 45 45 43 43 43 32 32 32 16 16 16 4 4 4 8 8 8 19 19 19 ++10 10 10 11 11 11 23 23 23 36 36 36 32 32 32 16 16 16 14 14 14 25 25 25 ++44 44 44 23 23 23 33 33 33 10 10 10 23 23 23 53 53 53 27 27 27 27 27 27 ++23 23 23 28 28 28 52 52 52 38 38 38 27 27 27 28 28 28 16 16 16 46 46 46 ++46 46 46 38 38 38 31 31 31 32 32 32 43 43 43 51 51 51 45 45 45 36 36 36 ++36 36 36 50 50 50 59 59 59 50 50 50 38 38 38 51 51 51 68 68 68 68 68 68 ++51 51 51 40 40 40 44 44 44 53 53 53 51 51 51 51 51 51 67 67 67 80 80 80 ++60 60 60 56 56 56 57 57 57 57 57 57 54 54 54 63 63 63 77 77 77 83 83 83 ++70 70 70 66 66 66 68 68 68 67 67 67 62 62 62 70 70 70 85 85 85 91 91 91 ++81 81 81 74 74 74 72 72 72 78 78 78 88 88 88 94 94 94 99 99 99 101 101 101 ++99 99 99 96 97 98 96 96 96 95 95 94 87 87 87 76 76 76 84 84 84 103 103 102 ++101 101 101 85 85 85 83 83 83 85 85 85 82 82 82 90 90 90 105 104 105 105 105 105 ++103 103 102 95 95 94 87 87 87 99 99 99 101 101 101 83 83 83 88 88 88 105 105 105 ++103 103 102 93 93 93 85 85 85 87 87 87 89 89 89 88 88 88 88 88 88 89 89 89 ++88 88 88 91 91 91 87 87 87 81 81 81 84 84 84 95 95 94 101 101 101 96 97 98 ++105 105 105 101 101 101 92 92 92 87 87 87 89 89 89 99 99 99 103 103 102 105 104 105 ++103 103 102 96 96 96 87 87 87 78 78 78 77 77 77 81 81 81 87 87 87 92 92 92 ++101 101 101 96 96 96 90 90 90 85 85 85 82 82 82 82 82 82 87 87 87 90 90 90 ++94 94 94 91 91 91 87 87 87 82 82 82 80 80 80 80 80 80 82 82 82 84 84 84 ++80 80 80 85 85 85 83 83 83 78 78 78 82 82 82 82 82 82 78 78 78 78 78 78 ++91 91 91 93 93 93 94 94 94 92 92 92 90 90 90 90 90 90 90 90 90 90 90 90 ++87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 85 85 85 85 85 85 ++84 84 84 81 81 81 82 82 82 82 82 82 81 81 81 82 82 82 77 77 77 66 66 66 ++53 53 53 60 60 60 60 60 60 58 58 58 56 56 56 49 49 49 42 42 42 45 45 45 ++51 51 51 66 66 66 50 50 50 50 50 50 57 57 57 54 54 54 59 59 59 50 50 50 ++62 62 62 69 69 69 56 56 56 34 34 34 37 37 37 51 51 51 61 61 61 65 65 65 ++51 51 51 40 40 40 33 33 33 49 49 49 58 58 58 57 57 57 50 50 50 29 29 29 ++20 20 20 16 16 16 31 31 31 49 49 49 51 51 51 46 46 46 38 38 38 28 28 28 ++23 23 23 25 25 25 33 33 33 33 33 33 23 23 23 19 19 19 17 17 17 8 8 8 ++19 19 19 17 17 17 16 16 16 16 16 16 20 20 20 25 25 25 31 31 31 33 33 33 ++34 34 34 36 36 36 37 37 37 36 36 36 34 34 34 33 33 33 34 34 34 37 37 37 ++34 34 34 34 34 34 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 ++34 34 34 34 34 34 34 34 34 34 34 34 33 33 33 33 33 33 33 33 33 33 33 33 ++32 32 32 28 28 28 25 25 25 28 28 28 33 33 33 33 33 33 27 27 27 20 20 20 ++45 45 45 25 25 25 4 4 4 8 8 8 25 25 25 36 36 36 34 34 34 28 28 28 ++16 16 16 10 10 10 16 16 16 20 20 20 14 14 14 11 11 11 13 13 13 8 8 8 ++20 20 20 24 24 24 40 40 40 37 37 37 13 13 13 10 10 10 17 17 17 4 4 4 ++11 11 11 10 10 10 17 17 17 24 24 24 19 19 19 8 8 8 3 3 3 0 0 0 ++3 3 3 4 4 4 24 24 24 38 38 38 38 38 38 37 37 37 37 37 37 32 32 32 ++25 25 25 44 44 44 36 36 36 25 25 25 34 34 34 31 31 31 49 49 49 39 39 39 ++44 44 44 39 39 39 32 32 32 37 37 37 43 43 43 29 29 29 11 11 11 13 13 13 ++11 11 11 13 13 13 13 13 13 11 11 11 10 10 10 11 11 11 14 14 14 17 17 17 ++27 27 27 42 42 42 51 51 51 42 42 42 34 34 34 40 40 40 43 43 43 36 36 36 ++38 38 38 40 40 40 4 4 4 0 0 0 38 38 38 37 37 37 10 10 10 17 17 17 ++0 0 0 13 13 13 29 29 29 33 33 33 16 16 16 3 3 3 19 19 19 37 37 37 ++ ++19 19 19 8 8 8 0 0 0 13 13 13 33 33 33 25 25 25 6 6 6 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 27 27 27 23 23 23 4 4 4 ++0 0 0 0 0 0 10 10 10 3 3 3 0 0 0 13 13 13 27 27 27 19 19 19 ++0 0 0 3 3 3 0 0 0 3 3 3 6 6 6 0 0 0 10 10 10 44 44 44 ++21 21 21 0 0 0 0 0 0 8 8 8 10 10 10 0 0 0 0 0 0 11 11 11 ++32 32 32 17 17 17 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 ++16 16 16 32 32 32 16 16 16 0 0 0 8 8 8 11 11 11 0 0 0 0 0 0 ++0 0 0 16 16 16 23 23 23 11 11 11 0 0 0 4 4 4 8 8 8 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 8 8 8 6 6 6 0 0 0 8 8 8 21 21 21 17 17 17 0 0 0 ++10 10 10 0 0 0 0 0 0 3 3 3 0 0 0 10 10 10 23 23 23 19 19 19 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 16 16 32 32 32 ++19 19 19 0 0 0 0 0 0 4 4 4 10 10 10 0 0 0 4 4 4 21 21 21 ++38 38 38 0 0 0 0 0 0 11 11 11 0 0 0 3 3 3 32 32 32 44 44 44 ++44 44 44 42 42 42 39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 37 37 37 ++46 46 46 43 43 43 29 29 29 10 10 10 0 0 0 8 8 8 13 13 13 13 13 13 ++11 11 11 29 29 29 43 43 43 34 34 34 11 11 11 0 0 0 20 20 20 44 44 44 ++32 32 32 16 16 16 11 11 11 31 31 31 45 45 45 42 42 42 27 27 27 14 14 14 ++17 17 17 45 45 45 40 40 40 28 28 28 21 21 21 24 24 24 43 43 43 50 50 50 ++29 29 29 25 25 25 32 32 32 45 45 45 46 46 46 36 36 36 32 32 32 37 37 37 ++45 45 45 59 59 59 48 48 48 36 36 36 43 43 43 39 39 39 37 37 37 53 53 53 ++70 70 70 52 52 52 45 45 45 49 49 49 45 45 45 46 46 46 53 53 53 58 58 58 ++81 81 81 58 58 58 51 51 51 58 58 58 56 56 56 52 52 52 61 61 61 71 71 71 ++92 92 92 68 68 68 60 60 60 67 67 67 65 65 65 60 60 60 67 67 67 74 74 74 ++93 93 93 80 80 80 69 69 69 71 71 71 81 81 81 88 88 88 92 92 92 94 94 94 ++99 99 99 99 99 99 92 92 92 93 93 93 91 91 91 76 76 76 74 74 74 87 87 87 ++112 112 113 91 91 91 82 82 82 80 80 80 77 77 77 90 90 90 99 99 99 90 90 90 ++105 105 105 105 105 105 83 83 83 87 87 87 105 105 105 91 91 91 78 78 78 89 89 89 ++105 105 105 101 101 101 93 93 93 88 88 88 88 88 88 89 89 89 89 89 89 88 88 88 ++96 97 98 101 101 101 95 95 94 83 83 83 83 83 83 95 95 94 99 99 99 93 93 93 ++99 99 99 101 101 101 96 96 96 88 88 88 85 85 85 91 91 91 99 99 99 105 104 105 ++105 105 105 101 101 101 91 91 91 83 83 83 77 77 77 77 77 77 80 80 80 83 83 83 ++103 103 102 103 103 102 99 99 99 87 87 87 81 81 81 81 81 81 82 82 82 80 80 80 ++93 93 93 91 91 91 87 87 87 83 83 83 80 80 80 76 76 76 75 75 75 75 75 75 ++75 75 75 81 81 81 80 80 80 77 77 77 81 81 81 77 77 77 73 73 73 77 77 77 ++92 92 92 91 91 91 90 90 90 90 90 90 89 89 89 88 88 88 87 87 87 87 87 87 ++84 84 84 84 84 84 85 85 85 85 85 85 85 85 85 84 84 84 83 83 83 82 82 82 ++82 82 82 77 77 77 80 80 80 81 81 81 77 77 77 80 80 80 76 76 76 65 65 65 ++53 53 53 57 57 57 52 52 52 49 49 49 52 52 52 52 52 52 54 54 54 63 63 63 ++73 73 73 62 62 62 44 44 44 57 57 57 56 56 56 38 38 38 44 44 44 38 38 38 ++43 43 43 63 63 63 61 61 61 40 40 40 36 36 36 48 48 48 56 56 56 58 58 58 ++63 63 63 53 53 53 46 46 46 56 56 56 56 56 56 51 51 51 57 57 57 51 51 51 ++28 28 28 13 13 13 23 23 23 44 44 44 52 52 52 51 51 51 48 48 48 40 40 40 ++42 42 42 43 43 43 44 44 44 34 34 34 19 19 19 19 19 19 23 23 23 17 17 17 ++24 24 24 23 23 23 21 21 21 25 25 25 33 33 33 40 40 40 45 45 45 48 48 48 ++36 36 36 34 34 34 34 34 34 34 34 34 36 36 36 36 36 36 34 34 34 33 33 33 ++33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 32 32 32 ++34 34 34 34 34 34 34 34 34 34 34 34 33 33 33 33 33 33 33 33 33 33 33 33 ++33 33 33 23 23 23 16 16 16 23 23 23 34 34 34 37 37 37 24 24 24 8 8 8 ++6 6 6 34 34 34 43 43 43 27 27 27 19 19 19 31 31 31 31 31 31 16 16 16 ++8 8 8 10 10 10 24 24 24 28 28 28 13 13 13 3 3 3 11 11 11 17 17 17 ++33 33 33 17 17 17 32 32 32 39 39 39 16 16 16 8 8 8 16 16 16 3 3 3 ++10 10 10 10 10 10 24 24 24 29 29 29 16 16 16 4 4 4 3 3 3 0 0 0 ++0 0 0 16 16 16 33 33 33 34 34 34 21 21 21 23 23 23 32 32 32 31 31 31 ++37 37 37 46 46 46 39 39 39 36 36 36 31 31 31 0 0 0 33 33 33 49 49 49 ++38 38 38 27 27 27 28 28 28 38 38 38 34 34 34 21 21 21 11 11 11 3 3 3 ++10 10 10 11 11 11 13 13 13 11 11 11 10 10 10 11 11 11 17 17 17 21 21 21 ++14 14 14 34 34 34 43 43 43 39 39 39 40 40 40 37 37 37 25 25 25 27 27 27 ++46 46 46 33 33 33 16 16 16 0 0 0 8 8 8 27 27 27 25 25 25 3 3 3 ++4 4 4 0 0 0 6 6 6 31 31 31 31 31 31 25 25 25 34 34 34 43 43 43 ++ ++32 32 32 21 21 21 13 13 13 0 0 0 6 6 6 33 33 33 23 23 23 6 6 6 ++0 0 0 4 4 4 3 3 3 0 0 0 0 0 0 10 10 10 23 23 23 29 29 29 ++10 10 10 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 6 6 6 31 31 31 ++25 25 25 10 10 10 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 ++34 34 34 17 17 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 ++13 13 13 24 24 24 23 23 23 6 6 6 0 0 0 0 0 0 3 3 3 0 0 0 ++0 0 0 14 14 14 25 25 25 14 14 14 0 0 0 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 13 13 13 20 20 20 14 14 14 0 0 0 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 4 4 4 4 4 4 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 14 14 14 20 20 20 14 14 14 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 14 14 14 21 21 21 13 13 13 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 3 3 3 20 20 20 21 21 21 13 13 13 ++3 3 3 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 17 17 17 36 36 36 ++3 3 3 4 4 4 0 0 0 0 0 0 8 8 8 28 28 28 40 40 40 44 44 44 ++43 43 43 38 38 38 37 37 37 40 40 40 40 40 40 37 37 37 38 38 38 44 44 44 ++43 43 43 28 28 28 10 10 10 3 3 3 6 6 6 10 10 10 10 10 10 10 10 10 ++24 24 24 43 43 43 29 29 29 6 6 6 8 8 8 29 29 29 43 43 43 24 24 24 ++13 13 13 10 10 10 23 23 23 42 42 42 39 39 39 19 19 19 11 11 11 23 23 23 ++38 38 38 39 39 39 31 31 31 20 20 20 25 25 25 39 39 39 40 40 40 32 32 32 ++24 24 24 32 32 32 42 42 42 45 45 45 38 38 38 29 29 29 34 34 34 46 46 46 ++51 51 51 44 44 44 37 37 37 34 34 34 38 38 38 42 42 42 42 42 42 40 40 40 ++59 59 59 63 63 63 58 58 58 44 44 44 39 39 39 48 48 48 50 50 50 46 46 46 ++66 66 66 72 72 72 63 63 63 50 50 50 52 52 52 57 57 57 54 54 54 52 52 52 ++68 68 68 78 78 78 73 73 73 60 60 60 61 61 61 65 65 65 63 63 63 62 62 62 ++67 67 67 87 87 87 87 87 87 65 65 65 61 61 61 84 84 84 93 93 93 84 84 84 ++94 94 94 92 92 92 95 95 94 96 97 98 88 88 88 73 73 73 70 70 70 77 77 77 ++95 95 94 101 101 101 96 97 98 82 82 82 74 74 74 83 83 83 90 90 90 88 88 88 ++83 83 83 103 103 102 101 101 101 88 88 88 91 91 91 96 96 96 87 87 87 76 76 76 ++96 97 98 87 87 87 87 87 87 81 81 81 81 81 81 87 87 87 87 87 87 96 96 96 ++92 92 92 99 99 99 105 105 105 95 95 94 77 77 77 82 82 82 94 94 94 96 96 96 ++81 81 81 96 96 96 105 105 105 96 96 96 78 78 78 73 73 73 87 87 87 103 103 102 ++96 96 96 101 101 101 99 99 99 87 87 87 76 76 76 76 76 76 83 83 83 89 89 89 ++93 93 93 82 82 82 94 94 94 105 105 105 91 91 91 80 80 80 78 78 78 72 72 72 ++80 80 80 80 80 80 88 88 88 91 91 91 80 80 80 71 71 71 72 72 72 71 71 71 ++71 71 71 68 68 68 71 71 71 73 73 73 69 69 69 71 71 71 75 75 75 74 74 74 ++75 75 75 85 85 85 90 90 90 88 88 88 85 85 85 87 87 87 87 87 87 84 84 84 ++87 87 87 85 85 85 83 83 83 82 82 82 81 81 81 81 81 81 78 78 78 76 76 76 ++83 83 83 72 72 72 60 60 60 65 65 65 72 72 72 62 62 62 57 57 57 71 71 71 ++50 50 50 50 50 50 52 52 52 53 53 53 50 50 50 49 49 49 59 59 59 72 72 72 ++68 68 68 70 70 70 65 65 65 53 53 53 43 43 43 40 40 40 40 40 40 38 38 38 ++52 52 52 66 66 66 59 59 59 40 40 40 33 33 33 39 39 39 48 48 48 57 57 57 ++52 52 52 50 50 50 51 51 51 59 59 59 53 53 53 28 28 28 21 21 21 43 43 43 ++48 48 48 43 43 43 38 38 38 39 39 39 44 44 44 49 49 49 48 48 48 45 45 45 ++38 38 38 37 37 37 39 39 39 46 46 46 46 46 46 39 39 39 36 36 36 36 36 36 ++38 38 38 42 42 42 44 44 44 40 40 40 34 34 34 32 32 32 37 37 37 42 42 42 ++39 39 39 36 36 36 32 32 32 32 32 32 34 34 34 36 36 36 34 34 34 32 32 32 ++32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 ++33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 33 33 33 33 33 33 34 34 34 ++37 37 37 38 38 38 33 33 33 21 21 21 10 10 10 13 13 13 27 27 27 39 39 39 ++10 10 10 4 4 4 4 4 4 24 24 24 37 37 37 29 29 29 14 14 14 14 14 14 ++6 6 6 13 13 13 29 29 29 33 33 33 14 14 14 4 4 4 19 19 19 32 32 32 ++4 4 4 23 23 23 34 34 34 29 29 29 16 16 16 8 8 8 11 11 11 16 16 16 ++13 13 13 25 25 25 24 24 24 14 14 14 10 10 10 4 4 4 0 0 0 10 10 10 ++31 31 31 36 36 36 24 24 24 17 17 17 27 27 27 19 19 19 0 0 0 3 3 3 ++11 11 11 25 25 25 40 40 40 46 46 46 43 43 43 36 36 36 33 33 33 36 36 36 ++37 37 37 37 37 37 28 28 28 29 29 29 21 21 21 6 6 6 11 11 11 4 4 4 ++13 13 13 11 11 11 8 8 8 8 8 8 11 11 11 14 14 14 14 14 14 13 13 13 ++21 21 21 40 40 40 46 46 46 39 39 39 25 25 25 28 28 28 33 33 33 10 10 10 ++29 29 29 43 43 43 21 21 21 0 0 0 10 10 10 19 19 19 23 23 23 42 42 42 ++0 0 0 0 0 0 13 13 13 23 23 23 28 28 28 40 40 40 34 34 34 0 0 0 ++ ++11 11 11 37 37 37 17 17 17 8 8 8 0 0 0 0 0 0 33 33 33 24 24 24 ++11 11 11 0 0 0 0 0 0 6 6 6 6 6 6 0 0 0 4 4 4 24 24 24 ++28 28 28 10 10 10 0 0 0 0 0 0 3 3 3 0 0 0 6 6 6 19 19 19 ++31 31 31 27 27 27 19 19 19 13 13 13 13 13 13 16 16 16 16 16 16 14 14 14 ++17 17 17 23 23 23 19 19 19 6 6 6 0 0 0 0 0 0 3 3 3 0 0 0 ++0 0 0 13 13 13 20 20 20 16 16 16 3 3 3 0 0 0 0 0 0 3 3 3 ++0 0 0 3 3 3 13 13 13 21 21 21 19 19 19 4 4 4 0 0 0 0 0 0 ++6 6 6 4 4 4 4 4 4 10 10 10 16 16 16 16 16 16 6 6 6 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 6 6 6 16 16 16 16 16 16 10 10 10 4 4 4 3 3 3 3 3 3 ++3 3 3 0 0 0 4 4 4 14 14 14 16 16 16 8 8 8 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 6 6 6 16 16 16 20 20 20 13 13 13 0 0 0 ++4 4 4 3 3 3 0 0 0 0 0 0 6 6 6 20 20 20 20 20 20 11 11 11 ++6 6 6 0 0 0 0 0 0 4 4 4 20 20 20 36 36 36 40 40 40 40 40 40 ++38 38 38 39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 39 39 39 38 38 38 ++25 25 25 10 10 10 3 3 3 10 10 10 10 10 10 3 3 3 10 10 10 24 24 24 ++34 34 34 27 27 27 4 4 4 8 8 8 25 25 25 36 36 36 33 33 33 8 8 8 ++11 11 11 27 27 27 38 38 38 33 33 33 20 20 20 14 14 14 25 25 25 37 37 37 ++37 37 37 24 24 24 17 17 17 25 25 25 39 39 39 42 42 42 32 32 32 23 23 23 ++29 29 29 37 37 37 40 40 40 37 37 37 29 29 29 31 31 31 38 38 38 45 45 45 ++42 42 42 39 39 39 36 36 36 36 36 36 38 38 38 40 40 40 40 40 40 39 39 39 ++45 45 45 53 53 53 59 59 59 53 53 53 44 44 44 42 42 42 45 45 45 50 50 50 ++48 48 48 63 63 63 69 69 69 62 62 62 54 54 54 49 49 49 51 51 51 60 60 60 ++54 54 54 70 70 70 75 75 75 69 69 69 62 62 62 57 57 57 58 58 58 67 67 67 ++61 61 61 71 71 71 81 81 81 80 80 80 70 70 70 67 67 67 77 77 77 92 92 92 ++89 89 89 87 87 87 89 89 89 93 93 93 90 90 90 81 81 81 72 72 72 71 71 71 ++81 81 81 92 92 92 96 96 96 91 91 91 82 82 82 71 71 71 76 76 76 96 97 98 ++78 78 78 87 87 87 96 96 96 95 95 94 90 90 90 91 91 91 89 89 89 80 80 80 ++87 87 87 80 80 80 82 82 82 84 84 84 87 87 87 80 80 80 73 73 73 89 89 89 ++96 97 98 90 90 90 90 90 90 95 95 94 92 92 92 80 80 80 81 81 81 94 94 94 ++85 85 85 82 82 82 87 87 87 96 97 98 94 94 94 82 82 82 82 82 82 92 92 92 ++99 99 99 93 93 93 96 96 96 101 101 101 90 90 90 72 72 72 75 75 75 95 95 94 ++77 77 77 75 75 75 81 81 81 89 89 89 92 92 92 93 93 93 91 91 91 87 87 87 ++76 76 76 70 70 70 75 75 75 85 85 85 80 80 80 72 72 72 71 71 71 71 71 71 ++70 70 70 67 67 67 71 71 71 73 73 73 70 70 70 71 71 71 73 73 73 69 69 69 ++70 70 70 77 77 77 84 84 84 84 84 84 83 83 83 82 82 82 82 82 82 81 81 81 ++81 81 81 80 80 80 78 78 78 78 78 78 80 80 80 80 80 80 77 77 77 76 76 76 ++65 65 65 57 57 57 60 60 60 62 62 62 52 52 52 52 52 52 61 61 61 63 63 63 ++52 52 52 50 50 50 49 49 49 50 50 50 50 50 50 49 49 49 51 51 51 54 54 54 ++48 48 48 49 49 49 48 48 48 44 44 44 42 42 42 42 42 42 40 40 40 38 38 38 ++53 53 53 59 59 59 54 54 54 46 46 46 37 37 37 28 28 28 29 29 29 43 43 43 ++54 54 54 54 54 54 57 57 57 60 60 60 54 54 54 31 31 31 14 14 14 23 23 23 ++45 45 45 44 44 44 43 43 43 43 43 43 43 43 43 43 43 43 44 44 44 44 44 44 ++42 42 42 38 38 38 37 37 37 39 39 39 43 43 43 42 42 42 39 39 39 37 37 37 ++34 34 34 38 38 38 42 42 42 40 40 40 37 37 37 34 34 34 34 34 34 36 36 36 ++38 38 38 38 38 38 37 37 37 34 34 34 31 31 31 31 31 31 32 32 32 33 33 33 ++32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 ++28 28 28 28 28 28 31 31 31 34 34 34 31 31 31 19 19 19 6 6 6 0 0 0 ++20 20 20 28 28 28 37 37 37 38 38 38 33 33 33 28 28 28 31 31 31 36 36 36 ++42 42 42 28 28 28 14 14 14 23 23 23 37 37 37 29 29 29 11 11 11 4 4 4 ++4 4 4 13 13 13 23 23 23 20 20 20 13 13 13 19 19 19 24 24 24 19 19 19 ++6 6 6 3 3 3 3 3 3 4 4 4 10 10 10 8 8 8 3 3 3 0 0 0 ++21 21 21 25 25 25 17 17 17 8 8 8 14 14 14 20 20 20 23 23 23 29 29 29 ++36 36 36 37 37 37 24 24 24 16 16 16 19 19 19 11 11 11 0 0 0 3 3 3 ++0 0 0 8 8 8 27 27 27 34 34 34 36 36 36 36 36 36 36 36 36 36 36 36 ++43 43 43 40 40 40 36 36 36 45 45 45 40 40 40 20 20 20 14 14 14 8 8 8 ++11 11 11 10 10 10 11 11 11 13 13 13 14 14 14 13 13 13 11 11 11 11 11 11 ++6 6 6 25 25 25 28 28 28 25 25 25 24 24 24 34 34 34 40 40 40 24 24 24 ++4 4 4 32 32 32 31 31 31 16 16 16 13 13 13 6 6 6 4 4 4 23 23 23 ++36 36 36 25 25 25 24 24 24 21 21 21 14 14 14 25 25 25 32 32 32 17 17 17 ++ ++0 0 0 6 6 6 38 38 38 19 19 19 0 0 0 3 3 3 0 0 0 37 37 37 ++27 27 27 6 6 6 0 0 0 6 6 6 8 8 8 0 0 0 0 0 0 11 11 11 ++29 29 29 24 24 24 11 11 11 0 0 0 0 0 0 10 10 10 11 11 11 3 3 3 ++10 10 10 20 20 20 20 20 20 8 8 8 0 0 0 0 0 0 8 8 8 8 8 8 ++3 3 3 19 19 19 27 27 27 17 17 17 6 6 6 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 11 11 11 19 19 19 13 13 13 0 0 0 0 0 0 0 0 0 ++8 8 8 0 0 0 0 0 0 16 16 16 25 25 25 19 19 19 3 3 3 0 0 0 ++4 4 4 3 3 3 0 0 0 0 0 0 13 13 13 23 23 23 17 17 17 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 ++0 0 0 16 16 16 23 23 23 13 13 13 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 6 6 6 14 14 14 16 16 16 10 10 10 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 8 8 8 19 19 19 21 21 21 13 13 13 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 3 3 3 17 17 17 25 25 25 14 14 14 0 0 0 ++6 6 6 0 0 0 0 0 0 19 19 19 34 34 34 42 42 42 40 40 40 36 36 36 ++36 36 36 38 38 38 37 37 37 34 34 34 38 38 38 42 42 42 36 36 36 24 24 24 ++6 6 6 0 0 0 0 0 0 8 8 8 10 10 10 8 8 8 20 20 20 34 34 34 ++28 28 28 11 11 11 0 0 0 23 23 23 37 37 37 29 29 29 17 17 17 3 3 3 ++21 21 21 38 38 38 38 38 38 19 19 19 8 8 8 24 24 24 38 38 38 38 38 38 ++27 27 27 14 14 14 17 17 17 36 36 36 43 43 43 32 32 32 23 23 23 24 24 24 ++37 37 37 38 38 38 33 33 33 25 25 25 27 27 27 36 36 36 40 40 40 38 38 38 ++32 32 32 32 32 32 33 33 33 36 36 36 37 37 37 38 38 38 38 38 38 38 38 38 ++37 37 37 44 44 44 54 54 54 58 58 58 51 51 51 42 42 42 40 40 40 46 46 46 ++38 38 38 52 52 52 65 65 65 68 68 68 61 61 61 50 50 50 48 48 48 57 57 57 ++49 49 49 58 58 58 67 67 67 71 71 71 68 68 68 58 58 58 53 53 53 60 60 60 ++59 59 59 57 57 57 69 69 69 84 84 84 78 78 78 62 62 62 66 66 66 84 84 84 ++85 85 85 83 83 83 84 84 84 88 88 88 91 91 91 87 87 87 73 73 73 62 62 62 ++68 68 68 84 84 84 90 90 90 91 91 91 88 88 88 71 71 71 69 69 69 92 92 92 ++78 78 78 69 69 69 83 83 83 95 95 94 89 89 89 90 90 90 91 91 91 77 77 77 ++76 76 76 74 74 74 77 77 77 84 84 84 90 90 90 84 84 84 71 71 71 76 76 76 ++89 89 89 87 87 87 81 81 81 88 88 88 96 96 96 87 87 87 75 75 75 84 84 84 ++93 93 93 77 77 77 73 73 73 88 88 88 96 96 96 89 89 89 77 77 77 74 74 74 ++92 92 92 83 83 83 83 83 83 94 94 94 96 96 96 87 87 87 84 84 84 91 91 91 ++72 72 72 75 75 75 72 72 72 74 74 74 87 87 87 92 92 92 87 87 87 82 82 82 ++83 83 83 75 75 75 73 73 73 76 76 76 75 75 75 73 73 73 70 70 70 63 63 63 ++67 67 67 62 62 62 62 62 62 63 63 63 65 65 65 68 68 68 69 69 69 65 65 65 ++63 63 63 68 68 68 74 74 74 80 80 80 80 80 80 76 76 76 76 76 76 77 77 77 ++75 75 75 75 75 75 75 75 75 75 75 75 76 76 76 75 75 75 73 73 73 71 71 71 ++54 54 54 51 51 51 57 57 57 59 59 59 56 56 56 62 62 62 65 65 65 52 52 52 ++48 48 48 49 49 49 48 48 48 46 46 46 45 45 45 46 46 46 45 45 45 42 42 42 ++46 46 46 40 40 40 37 37 37 38 38 38 40 40 40 40 40 40 38 38 38 37 37 37 ++49 49 49 53 53 53 53 53 53 49 49 49 42 42 42 34 34 34 34 34 34 44 44 44 ++42 42 42 49 49 49 51 51 51 50 50 50 46 46 46 34 34 34 20 20 20 17 17 17 ++42 42 42 45 45 45 49 49 49 46 46 46 40 40 40 37 37 37 39 39 39 42 42 42 ++44 44 44 40 40 40 36 36 36 33 33 33 37 37 37 43 43 43 43 43 43 39 39 39 ++32 32 32 34 34 34 37 37 37 39 39 39 39 39 39 37 37 37 33 33 33 31 31 31 ++34 34 34 39 39 39 40 40 40 37 37 37 29 29 29 25 25 25 29 29 29 34 34 34 ++32 32 32 32 32 32 31 31 31 31 31 31 31 31 31 31 31 31 29 29 29 29 29 29 ++28 28 28 25 25 25 25 25 25 24 24 24 16 16 16 0 0 0 0 0 0 0 0 0 ++24 24 24 24 24 24 29 29 29 37 37 37 39 39 39 36 36 36 33 33 33 36 36 36 ++37 37 37 36 36 36 32 32 32 34 34 34 36 36 36 23 23 23 8 8 8 8 8 8 ++8 8 8 10 10 10 13 13 13 14 14 14 17 17 17 25 25 25 21 21 21 6 6 6 ++13 13 13 13 13 13 14 14 14 14 14 14 13 13 13 11 11 11 16 16 16 20 20 20 ++24 24 24 21 21 21 8 8 8 0 0 0 14 14 14 27 27 27 29 29 29 31 31 31 ++21 21 21 28 28 28 34 34 34 38 38 38 37 37 37 27 27 27 11 11 11 0 0 0 ++0 0 0 13 13 13 24 24 24 28 28 28 31 31 31 36 36 36 38 38 38 37 37 37 ++32 32 32 25 25 25 24 24 24 39 39 39 43 43 43 24 24 24 13 13 13 10 10 10 ++8 8 8 11 11 11 14 14 14 16 16 16 14 14 14 11 11 11 10 10 10 8 8 8 ++17 17 17 32 32 32 24 24 24 19 19 19 27 27 27 36 36 36 38 38 38 27 27 27 ++3 3 3 24 24 24 29 29 29 23 23 23 13 13 13 3 3 3 4 4 4 19 19 19 ++40 40 40 29 29 29 23 23 23 14 14 14 0 0 0 10 10 10 28 28 28 29 29 29 ++ ++0 0 0 0 0 0 6 6 6 32 32 32 27 27 27 0 0 0 0 0 0 10 10 10 ++29 29 29 23 23 23 10 10 10 0 0 0 0 0 0 8 8 8 6 6 6 0 0 0 ++6 6 6 27 27 27 28 28 28 8 8 8 0 0 0 13 13 13 14 14 14 0 0 0 ++0 0 0 11 11 11 21 21 21 16 16 16 3 3 3 0 0 0 0 0 0 4 4 4 ++3 3 3 6 6 6 16 16 16 24 24 24 19 19 19 4 4 4 0 0 0 3 3 3 ++3 3 3 0 0 0 0 0 0 10 10 10 17 17 17 13 13 13 3 3 3 0 0 0 ++4 4 4 3 3 3 0 0 0 0 0 0 11 11 11 21 21 21 16 16 16 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 14 14 14 20 20 20 20 20 20 ++0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 ++11 11 11 14 14 14 13 13 13 6 6 6 0 0 0 3 3 3 0 0 0 0 0 0 ++0 0 0 16 16 16 20 20 20 6 6 6 0 0 0 6 6 6 6 6 6 0 0 0 ++0 0 0 6 6 6 19 19 19 23 23 23 14 14 14 3 3 3 0 0 0 4 4 4 ++0 0 0 0 0 0 10 10 10 20 20 20 20 20 20 8 8 8 0 0 0 0 0 0 ++3 3 3 0 0 0 11 11 11 31 31 31 42 42 42 42 42 42 37 37 37 34 34 34 ++38 38 38 34 34 34 32 32 32 33 33 33 40 40 40 40 40 40 25 25 25 6 6 6 ++0 0 0 8 8 8 8 8 8 3 3 3 10 10 10 25 25 25 32 32 32 28 28 28 ++6 6 6 13 13 13 24 24 24 36 36 36 29 29 29 13 13 13 10 10 10 17 17 17 ++33 33 33 31 31 31 19 19 19 10 10 10 21 21 21 39 39 39 37 37 37 20 20 20 ++14 14 14 21 21 21 33 33 33 38 38 38 29 29 29 17 17 17 23 23 23 37 37 37 ++39 39 39 32 32 32 24 24 24 23 23 23 33 33 33 42 42 42 38 38 38 29 29 29 ++27 27 27 29 29 29 33 33 33 34 34 34 34 34 34 34 34 34 36 36 36 37 37 37 ++39 39 39 39 39 39 44 44 44 52 52 52 56 56 56 50 50 50 42 42 42 37 37 37 ++44 44 44 44 44 44 48 48 48 58 58 58 67 67 67 62 62 62 51 51 51 43 43 43 ++53 53 53 50 50 50 51 51 51 61 61 61 71 71 71 69 69 69 57 57 57 49 49 49 ++59 59 59 54 54 54 56 56 56 68 68 68 76 76 76 74 74 74 68 68 68 63 63 63 ++82 82 82 82 82 82 82 82 82 84 84 84 88 88 88 87 87 87 75 75 75 61 61 61 ++66 66 66 77 77 77 80 80 80 78 78 78 85 85 85 85 85 85 77 77 77 74 74 74 ++84 84 84 65 65 65 67 67 67 82 82 82 85 85 85 90 90 90 88 88 88 71 71 71 ++73 73 73 74 74 74 77 77 77 80 80 80 87 87 87 93 93 93 85 85 85 71 71 71 ++71 71 71 87 87 87 87 87 87 76 76 76 83 83 83 93 93 93 87 87 87 73 73 73 ++90 90 90 84 84 84 73 73 73 71 71 71 81 81 81 89 89 89 83 83 83 70 70 70 ++82 82 82 85 85 85 81 81 81 74 74 74 82 82 82 94 94 94 92 92 92 77 77 77 ++69 69 69 70 70 70 66 66 66 67 67 67 76 76 76 81 81 81 76 76 76 72 72 72 ++83 83 83 85 85 85 84 84 84 80 80 80 82 82 82 87 87 87 80 80 80 66 66 66 ++65 65 65 63 63 63 63 63 63 65 65 65 69 69 69 71 71 71 68 68 68 61 61 61 ++60 60 60 60 60 60 67 67 67 75 75 75 77 77 77 73 73 73 73 73 73 76 76 76 ++74 74 74 74 74 74 73 73 73 73 73 73 73 73 73 70 70 70 67 67 67 63 63 63 ++48 48 48 57 57 57 54 54 54 54 54 54 66 66 66 65 65 65 50 50 50 43 43 43 ++40 40 40 46 46 46 49 49 49 43 43 43 40 40 40 43 43 43 46 46 46 46 46 46 ++52 52 52 39 39 39 29 29 29 32 32 32 37 37 37 37 37 37 36 36 36 36 36 36 ++32 32 32 44 44 44 45 45 45 34 34 34 31 31 31 38 38 38 40 40 40 38 38 38 ++42 42 42 53 53 53 56 56 56 49 49 49 45 45 45 48 48 48 46 46 46 42 42 42 ++39 39 39 44 44 44 48 48 48 46 46 46 42 42 42 37 37 37 37 37 37 38 38 38 ++43 43 43 43 43 43 39 39 39 32 32 32 32 32 32 38 38 38 42 42 42 39 39 39 ++34 34 34 33 33 33 33 33 33 36 36 36 38 38 38 38 38 38 36 36 36 32 32 32 ++32 32 32 37 37 37 39 39 39 38 38 38 33 33 33 28 28 28 29 29 29 32 32 32 ++31 31 31 31 31 31 31 31 31 31 31 31 29 29 29 28 28 28 28 28 28 27 27 27 ++23 23 23 25 25 25 23 23 23 14 14 14 4 4 4 6 6 6 19 19 19 28 28 28 ++29 29 29 16 16 16 8 8 8 16 16 16 24 24 24 24 24 24 21 21 21 21 21 21 ++21 21 21 31 31 31 34 34 34 32 32 32 28 28 28 16 16 16 6 6 6 11 11 11 ++13 13 13 6 6 6 10 10 10 21 21 21 24 24 24 17 17 17 10 10 10 8 8 8 ++6 6 6 21 21 21 29 29 29 20 20 20 8 8 8 10 10 10 20 20 20 28 28 28 ++19 19 19 14 14 14 6 6 6 3 3 3 11 11 11 20 20 20 19 19 19 14 14 14 ++17 17 17 19 19 19 24 24 24 27 27 27 24 24 24 23 23 23 23 23 23 20 20 20 ++13 13 13 19 19 19 20 20 20 17 17 17 19 19 19 27 27 27 28 28 28 25 25 25 ++21 21 21 16 16 16 8 8 8 17 17 17 28 28 28 20 20 20 10 10 10 6 6 6 ++8 8 8 11 11 11 16 16 16 16 16 16 13 13 13 10 10 10 8 8 8 8 8 8 ++13 13 13 29 29 29 19 19 19 11 11 11 19 19 19 21 21 21 24 24 24 19 19 19 ++16 16 16 14 14 14 17 17 17 20 20 20 19 19 19 17 17 17 19 19 19 20 20 20 ++25 25 25 17 17 17 19 19 19 20 20 20 10 10 10 11 11 11 23 23 23 28 28 28 ++ ++13 13 13 0 0 0 0 0 0 19 19 19 32 32 32 19 19 19 8 8 8 0 0 0 ++14 14 14 25 25 25 23 23 23 6 6 6 0 0 0 6 6 6 8 8 8 0 0 0 ++0 0 0 13 13 13 25 25 25 24 24 24 16 16 16 10 10 10 4 4 4 0 0 0 ++0 0 0 3 3 3 13 13 13 21 21 21 21 21 21 11 11 11 3 3 3 0 0 0 ++6 6 6 0 0 0 3 3 3 16 16 16 21 21 21 16 16 16 6 6 6 3 3 3 ++4 4 4 0 0 0 0 0 0 0 0 0 10 10 10 17 17 17 14 14 14 6 6 6 ++0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 11 11 11 17 17 17 14 14 14 ++0 0 0 0 0 0 3 3 3 4 4 4 0 0 0 0 0 0 11 11 11 24 24 24 ++16 16 16 6 6 6 0 0 0 6 6 6 4 4 4 0 0 0 0 0 0 11 11 11 ++19 19 19 8 8 8 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 ++11 11 11 19 19 19 14 14 14 0 0 0 0 0 0 6 6 6 6 6 6 0 0 0 ++3 3 3 16 16 16 21 21 21 14 14 14 3 3 3 0 0 0 0 0 0 4 4 4 ++0 0 0 6 6 6 19 19 19 23 23 23 11 11 11 0 0 0 0 0 0 8 8 8 ++0 0 0 6 6 6 23 23 23 37 37 37 42 42 42 36 36 36 33 33 33 34 34 34 ++36 36 36 33 33 33 33 33 33 38 38 38 37 37 37 25 25 25 10 10 10 0 0 0 ++4 4 4 8 8 8 8 8 8 10 10 10 21 21 21 31 31 31 25 25 25 10 10 10 ++3 3 3 24 24 24 38 38 38 28 28 28 11 11 11 8 8 8 19 19 19 29 29 29 ++29 29 29 14 14 14 6 6 6 20 20 20 36 36 36 38 38 38 24 24 24 8 8 8 ++20 20 20 34 34 34 39 39 39 27 27 27 16 16 16 20 20 20 32 32 32 38 38 38 ++31 31 31 24 24 24 24 24 24 32 32 32 38 38 38 37 37 37 31 31 31 27 27 27 ++28 28 28 31 31 31 33 33 33 33 33 33 32 32 32 32 32 32 34 34 34 37 37 37 ++38 38 38 37 37 37 36 36 36 42 42 42 51 51 51 56 56 56 49 49 49 39 39 39 ++45 45 45 39 39 39 37 37 37 45 45 45 59 59 59 66 66 66 57 57 57 42 42 42 ++51 51 51 45 45 45 44 44 44 50 50 50 62 62 62 70 70 70 65 65 65 53 53 53 ++53 53 53 53 53 53 51 51 51 53 53 53 66 66 66 77 77 77 73 73 73 61 61 61 ++75 75 75 78 78 78 81 81 81 80 80 80 82 82 82 84 84 84 78 78 78 69 69 69 ++63 63 63 67 67 67 73 73 73 73 73 73 74 74 74 85 85 85 87 87 87 72 72 72 ++85 85 85 73 73 73 62 62 62 65 65 65 75 75 75 83 83 83 77 77 77 68 68 68 ++73 73 73 71 71 71 77 77 77 80 80 80 76 76 76 87 87 87 93 93 93 78 78 78 ++63 63 63 76 76 76 84 84 84 76 76 76 72 72 72 87 87 87 90 90 90 77 77 77 ++75 75 75 83 83 83 78 78 78 65 65 65 66 66 66 82 82 82 87 87 87 81 81 81 ++65 65 65 77 77 77 81 81 81 72 72 72 73 73 73 85 85 85 90 90 90 87 87 87 ++69 69 69 61 61 61 61 61 61 63 63 63 65 65 65 69 69 69 75 75 75 77 77 77 ++58 58 58 63 63 63 68 68 68 71 71 71 77 77 77 83 83 83 82 82 82 78 78 78 ++71 71 71 73 73 73 74 74 74 75 75 75 81 81 81 81 81 81 71 71 71 60 60 60 ++60 60 60 58 58 58 61 61 61 70 70 70 73 73 73 72 72 72 72 72 72 75 75 75 ++72 72 72 71 71 71 71 71 71 71 71 71 70 70 70 68 68 68 65 65 65 61 61 61 ++54 54 54 63 63 63 62 62 62 60 60 60 59 59 59 46 46 46 34 34 34 40 40 40 ++43 43 43 46 46 46 46 46 46 40 40 40 38 38 38 44 44 44 49 49 49 49 49 49 ++42 42 42 29 29 29 23 23 23 29 29 29 37 37 37 38 38 38 36 36 36 34 34 34 ++32 32 32 40 40 40 43 43 43 34 34 34 31 31 31 37 37 37 36 36 36 28 28 28 ++32 32 32 45 45 45 49 49 49 37 37 37 29 29 29 37 37 37 44 44 44 40 40 40 ++39 39 39 40 40 40 42 42 42 43 43 43 43 43 43 40 40 40 38 38 38 36 36 36 ++37 37 37 43 43 43 44 44 44 36 36 36 31 31 31 33 33 33 37 37 37 37 37 37 ++39 39 39 36 36 36 32 32 32 32 32 32 34 34 34 37 37 37 37 37 37 37 37 37 ++31 31 31 32 32 32 34 34 34 37 37 37 37 37 37 36 36 36 32 32 32 29 29 29 ++31 31 31 31 31 31 31 31 31 29 29 29 28 28 28 27 27 27 24 24 24 24 24 24 ++16 16 16 23 23 23 21 21 21 14 14 14 16 16 16 27 27 27 32 32 32 28 28 28 ++25 25 25 17 17 17 13 13 13 17 17 17 20 20 20 19 19 19 17 17 17 17 17 17 ++31 31 31 33 33 33 24 24 24 16 16 16 17 17 17 13 13 13 6 6 6 6 6 6 ++11 11 11 14 14 14 23 23 23 27 27 27 21 21 21 6 6 6 3 3 3 11 11 11 ++10 10 10 23 23 23 24 24 24 13 13 13 11 11 11 21 21 21 21 21 21 10 10 10 ++10 10 10 10 10 10 10 10 10 8 8 8 11 11 11 17 17 17 20 20 20 16 16 16 ++34 34 34 31 31 31 27 27 27 21 21 21 14 14 14 17 17 17 25 25 25 29 29 29 ++23 23 23 24 24 24 24 24 24 21 21 21 24 24 24 28 28 28 24 24 24 16 16 16 ++29 29 29 31 31 31 20 20 20 11 11 11 23 23 23 25 25 25 13 13 13 4 4 4 ++11 11 11 13 13 13 14 14 14 13 13 13 10 10 10 8 8 8 8 8 8 11 11 11 ++0 0 0 24 24 24 21 21 21 19 19 19 23 23 23 20 20 20 27 27 27 29 29 29 ++17 17 17 11 11 11 17 17 17 27 27 27 29 29 29 29 29 29 23 23 23 13 13 13 ++19 19 19 13 13 13 19 19 19 29 29 29 27 27 27 20 20 20 16 16 16 13 13 13 ++ ++27 27 27 10 10 10 16 16 16 0 0 0 6 6 6 37 37 37 14 14 14 6 6 6 ++0 0 0 11 11 11 23 23 23 23 23 23 8 8 8 0 0 0 0 0 0 3 3 3 ++3 3 3 0 0 0 8 8 8 29 29 29 31 31 31 10 10 10 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 13 13 13 25 25 25 20 20 20 4 4 4 0 0 0 ++3 3 3 4 4 4 0 0 0 0 0 0 11 11 11 21 21 21 17 17 17 4 4 4 ++0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 11 11 11 19 19 19 21 21 21 ++0 0 0 0 0 0 0 0 0 6 6 6 0 0 0 0 0 0 4 4 4 19 19 19 ++13 13 13 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 11 11 11 ++24 24 24 13 13 13 3 3 3 0 0 0 0 0 0 0 0 0 8 8 8 19 19 19 ++13 13 13 3 3 3 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 11 11 11 ++24 24 24 13 13 13 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 4 4 4 ++20 20 20 20 20 20 13 13 13 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 16 16 16 19 19 19 10 10 10 0 0 0 0 0 0 3 3 3 0 0 0 ++3 3 3 17 17 17 32 32 32 39 39 39 37 37 37 31 31 31 31 31 31 34 34 34 ++31 31 31 33 33 33 39 39 39 39 39 39 25 25 25 4 4 4 0 0 0 6 6 6 ++10 10 10 0 0 0 6 6 6 23 23 23 31 31 31 21 21 21 6 6 6 0 0 0 ++24 24 24 28 28 28 28 28 28 8 8 8 3 3 3 23 23 23 28 28 28 28 28 28 ++13 13 13 10 10 10 19 19 19 33 33 33 32 32 32 19 19 19 13 13 13 19 19 19 ++34 34 34 36 36 36 25 25 25 11 11 11 19 19 19 36 36 36 37 37 37 25 25 25 ++20 20 20 23 23 23 32 32 32 39 39 39 36 36 36 25 25 25 24 24 24 31 31 31 ++29 29 29 31 31 31 32 32 32 31 31 31 29 29 29 29 29 29 32 32 32 34 34 34 ++31 31 31 33 33 33 33 33 33 34 34 34 42 42 42 50 50 50 52 52 52 50 50 50 ++39 39 39 38 38 38 40 40 40 40 40 40 44 44 44 53 53 53 58 58 58 53 53 53 ++43 43 43 44 44 44 48 48 48 46 46 46 46 46 46 57 57 57 67 67 67 67 67 67 ++48 48 48 50 50 50 52 52 52 51 51 51 54 54 54 61 61 61 69 69 69 73 73 73 ++68 68 68 73 73 73 75 75 75 74 74 74 75 75 75 80 80 80 81 81 81 78 78 78 ++62 62 62 57 57 57 69 69 69 77 77 77 66 66 66 67 67 67 81 81 81 84 84 84 ++81 81 81 82 82 82 67 67 67 56 56 56 65 65 65 70 70 70 66 66 66 68 68 68 ++72 72 72 67 67 67 72 72 72 81 81 81 69 69 69 66 66 66 83 83 83 87 87 87 ++74 74 74 63 63 63 71 71 71 81 81 81 73 73 73 70 70 70 80 80 80 85 85 85 ++71 71 71 78 78 78 80 80 80 71 71 71 63 63 63 67 67 67 75 75 75 81 81 81 ++71 71 71 65 65 65 69 69 69 83 83 83 84 84 84 75 75 75 74 74 74 84 84 84 ++82 82 82 72 72 72 69 69 69 66 66 66 58 58 58 58 58 58 68 68 68 73 73 73 ++71 71 71 62 62 62 54 54 54 56 56 56 58 58 58 54 54 54 60 60 60 74 74 74 ++78 78 78 80 80 80 73 73 73 67 67 67 72 72 72 75 75 75 70 70 70 63 63 63 ++60 60 60 58 58 58 57 57 57 61 61 61 67 67 67 69 69 69 70 70 70 72 72 72 ++67 67 67 67 67 67 66 66 66 67 67 67 68 68 68 67 67 67 65 65 65 62 62 62 ++72 72 72 59 59 59 62 62 62 70 70 70 65 65 65 62 62 62 68 68 68 68 68 68 ++50 50 50 45 45 45 39 39 39 37 37 37 42 42 42 48 48 48 46 46 46 42 42 42 ++34 34 34 32 32 32 34 34 34 43 43 43 49 49 49 46 46 46 38 38 38 31 31 31 ++34 34 34 33 33 33 40 40 40 48 48 48 44 44 44 38 38 38 33 33 33 27 27 27 ++28 28 28 39 39 39 45 45 45 38 38 38 31 31 31 38 38 38 46 46 46 43 43 43 ++39 39 39 38 38 38 37 37 37 38 38 38 42 42 42 42 42 42 39 39 39 36 36 36 ++32 32 32 39 39 39 44 44 44 39 39 39 33 33 33 31 31 31 32 32 32 34 34 34 ++39 39 39 37 37 37 33 33 33 31 31 31 31 31 31 33 33 33 37 37 37 39 39 39 ++32 32 32 31 31 31 29 29 29 33 33 33 38 38 38 38 38 38 33 33 33 28 28 28 ++29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 25 25 25 21 21 21 20 20 20 ++23 23 23 21 21 21 13 13 13 10 10 10 21 21 21 33 33 33 25 25 25 8 8 8 ++13 13 13 17 17 17 20 20 20 17 17 17 13 13 13 13 13 13 21 21 21 29 29 29 ++23 23 23 33 33 33 31 31 31 19 19 19 13 13 13 10 10 10 6 6 6 11 11 11 ++8 8 8 27 27 27 32 32 32 21 21 21 11 11 11 6 6 6 4 4 4 8 8 8 ++13 13 13 24 24 24 25 25 25 17 17 17 19 19 19 27 27 27 21 21 21 3 3 3 ++8 8 8 8 8 8 11 11 11 11 11 11 13 13 13 24 24 24 32 32 32 31 31 31 ++24 24 24 28 28 28 29 29 29 29 29 29 31 31 31 31 31 31 31 31 31 34 34 34 ++36 36 36 32 32 32 31 31 31 34 34 34 37 37 37 32 32 32 19 19 19 4 4 4 ++27 27 27 37 37 37 34 34 34 20 20 20 31 31 31 37 37 37 19 19 19 10 10 10 ++13 13 13 13 13 13 11 11 11 8 8 8 6 6 6 8 8 8 10 10 10 13 13 13 ++14 14 14 34 34 34 37 37 37 34 34 34 27 27 27 17 17 17 25 25 25 29 29 29 ++27 27 27 29 29 29 33 33 33 36 36 36 34 34 34 32 32 32 27 27 27 20 20 20 ++11 11 11 4 4 4 10 10 10 23 23 23 27 27 27 21 21 21 11 11 11 0 0 0 ++ ++8 8 8 32 32 32 8 8 8 0 0 0 0 0 0 6 6 6 34 34 34 16 16 16 ++0 0 0 0 0 0 10 10 10 23 23 23 21 21 21 3 3 3 0 0 0 3 3 3 ++8 8 8 0 0 0 0 0 0 16 16 16 27 27 27 21 21 21 8 8 8 0 0 0 ++4 4 4 0 0 0 0 0 0 8 8 8 19 19 19 21 21 21 17 17 17 13 13 13 ++0 0 0 8 8 8 8 8 8 0 0 0 0 0 0 10 10 10 16 16 16 16 16 16 ++4 4 4 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 11 11 11 21 21 21 ++13 13 13 4 4 4 3 3 3 6 6 6 3 3 3 0 0 0 0 0 0 10 10 10 ++17 17 17 11 11 11 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++13 13 13 14 14 14 10 10 10 0 0 0 0 0 0 10 10 10 14 14 14 14 14 14 ++3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 3 3 3 13 13 13 21 21 21 ++19 19 19 3 3 3 0 0 0 6 6 6 4 4 4 0 0 0 0 0 0 17 17 17 ++21 21 21 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++16 16 16 17 17 17 10 10 10 0 0 0 0 0 0 6 6 6 4 4 4 0 0 0 ++14 14 14 27 27 27 37 37 37 37 37 37 32 32 32 29 29 29 32 32 32 34 34 34 ++31 31 31 36 36 36 37 37 37 29 29 29 13 13 13 0 0 0 0 0 0 8 8 8 ++8 8 8 4 4 4 16 16 16 28 28 28 25 25 25 8 8 8 3 3 3 14 14 14 ++32 32 32 19 19 19 13 13 13 3 3 3 14 14 14 29 29 29 23 23 23 17 17 17 ++8 8 8 19 19 19 29 29 29 31 31 31 19 19 19 8 8 8 17 17 17 32 32 32 ++33 33 33 23 23 23 13 13 13 16 16 16 29 29 29 37 37 37 31 31 31 17 17 17 ++23 23 23 28 28 28 34 34 34 33 33 33 27 27 27 21 21 21 23 23 23 28 28 28 ++27 27 27 27 27 27 28 28 28 28 28 28 28 28 28 29 29 29 31 31 31 32 32 32 ++28 28 28 29 29 29 32 32 32 34 34 34 34 34 34 37 37 37 45 45 45 53 53 53 ++44 44 44 39 39 39 40 40 40 42 42 42 36 36 36 39 39 39 51 51 51 56 56 56 ++49 49 49 44 44 44 45 45 45 45 45 45 39 39 39 44 44 44 58 58 58 63 63 63 ++53 53 53 50 50 50 49 49 49 50 50 50 49 49 49 49 49 49 58 58 58 70 70 70 ++67 67 67 69 69 69 70 70 70 70 70 70 71 71 71 74 74 74 77 77 77 77 77 77 ++71 71 71 57 57 57 62 62 62 74 74 74 66 66 66 56 56 56 66 66 66 78 78 78 ++77 77 77 81 81 81 68 68 68 56 56 56 60 60 60 61 61 61 59 59 59 66 66 66 ++72 72 72 72 72 72 68 68 68 75 75 75 70 70 70 57 57 57 67 67 67 77 77 77 ++83 83 83 67 67 67 61 61 61 71 71 71 72 72 72 66 66 66 67 67 67 75 75 75 ++76 76 76 76 76 76 75 75 75 72 72 72 65 65 65 59 59 59 61 61 61 68 68 68 ++84 84 84 67 67 67 63 63 63 80 80 80 84 84 84 69 69 69 57 57 57 59 59 59 ++82 82 82 84 84 84 76 76 76 67 67 67 62 62 62 59 59 59 57 57 57 58 58 58 ++71 71 71 66 66 66 56 56 56 53 53 53 60 60 60 65 65 65 69 69 69 80 80 80 ++70 70 70 72 72 72 61 61 61 51 51 51 59 59 59 68 68 68 68 68 68 67 67 67 ++60 60 60 57 57 57 52 52 52 51 51 51 57 57 57 65 65 65 67 67 67 67 67 67 ++65 65 65 63 63 63 62 62 62 62 62 62 63 63 63 63 63 63 61 61 61 60 60 60 ++63 63 63 43 43 43 38 38 38 43 43 43 38 38 38 37 37 37 39 39 39 33 33 33 ++45 45 45 39 39 39 36 36 36 39 39 39 45 45 45 45 45 45 39 39 39 34 34 34 ++36 36 36 42 42 42 49 49 49 54 54 54 56 56 56 52 52 52 39 39 39 28 28 28 ++25 25 25 23 23 23 32 32 32 43 43 43 42 42 42 38 38 38 33 33 33 25 25 25 ++17 17 17 19 19 19 25 25 25 27 27 27 25 25 25 33 33 33 40 40 40 37 37 37 ++40 40 40 38 38 38 36 36 36 36 36 36 38 38 38 39 39 39 39 39 39 38 38 38 ++31 31 31 32 32 32 37 37 37 39 39 39 38 38 38 33 33 33 31 31 31 32 32 32 ++34 34 34 36 36 36 36 36 36 33 33 33 29 29 29 29 29 29 32 32 32 36 36 36 ++36 36 36 33 33 33 29 29 29 31 31 31 33 33 33 36 36 36 33 33 33 31 31 31 ++29 29 29 29 29 29 29 29 29 29 29 29 27 27 27 23 23 23 20 20 20 17 17 17 ++25 25 25 14 14 14 6 6 6 10 10 10 20 20 20 20 20 20 11 11 11 0 0 0 ++0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 4 4 4 20 20 20 25 25 25 ++8 8 8 31 31 31 37 37 37 23 23 23 11 11 11 6 6 6 10 10 10 16 16 16 ++17 17 17 28 28 28 24 24 24 10 10 10 8 8 8 8 8 8 6 6 6 10 10 10 ++3 3 3 13 13 13 20 20 20 19 19 19 14 14 14 11 11 11 8 8 8 4 4 4 ++10 10 10 6 6 6 8 8 8 10 10 10 11 11 11 24 24 24 32 32 32 25 25 25 ++33 33 33 34 34 34 23 23 23 11 11 11 13 13 13 8 8 8 4 4 4 16 16 16 ++36 36 36 24 24 24 19 19 19 27 27 27 32 32 32 24 24 24 11 11 11 3 3 3 ++19 19 19 33 33 33 38 38 38 28 28 28 37 37 37 39 39 39 19 19 19 17 17 17 ++13 13 13 10 10 10 8 8 8 6 6 6 8 8 8 10 10 10 11 11 11 13 13 13 ++16 16 16 28 28 28 33 33 33 33 33 33 17 17 17 0 0 0 11 11 11 11 11 11 ++32 32 32 39 39 39 38 38 38 29 29 29 27 27 27 27 27 27 25 25 25 24 24 24 ++3 3 3 0 0 0 0 0 0 10 10 10 19 19 19 17 17 17 11 11 11 3 3 3 ++ ++0 0 0 6 6 6 25 25 25 13 13 13 0 0 0 3 3 3 8 8 8 28 28 28 ++21 21 21 0 0 0 0 0 0 11 11 11 27 27 27 24 24 24 10 10 10 0 0 0 ++0 0 0 6 6 6 0 0 0 0 0 0 11 11 11 33 33 33 28 28 28 3 3 3 ++0 0 0 6 6 6 11 11 11 3 3 3 0 0 0 8 8 8 21 21 21 28 28 28 ++0 0 0 4 4 4 11 11 11 10 10 10 0 0 0 0 0 0 6 6 6 28 28 28 ++17 17 17 3 3 3 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 10 10 10 ++23 23 23 19 19 19 6 6 6 0 0 0 0 0 0 6 6 6 6 6 6 0 0 0 ++10 10 10 16 16 16 14 14 14 3 3 3 0 0 0 3 3 3 4 4 4 0 0 0 ++0 0 0 11 11 11 16 16 16 4 4 4 6 6 6 20 20 20 17 17 17 0 0 0 ++0 0 0 4 4 4 4 4 4 0 0 0 0 0 0 13 13 13 21 21 21 23 23 23 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 14 14 14 25 25 25 ++13 13 13 0 0 0 0 0 0 4 4 4 4 4 4 0 0 0 4 4 4 19 19 19 ++27 27 27 11 11 11 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 3 3 3 ++24 24 24 33 33 33 38 38 38 34 34 34 29 29 29 32 32 32 34 34 34 33 33 33 ++34 34 34 36 36 36 29 29 29 16 16 16 6 6 6 6 6 6 8 8 8 4 4 4 ++4 4 4 19 19 19 29 29 29 25 25 25 10 10 10 0 0 0 16 16 16 33 33 33 ++25 25 25 4 4 4 8 8 8 16 16 16 25 25 25 27 27 27 10 10 10 10 10 10 ++17 17 17 28 28 28 31 31 31 17 17 17 6 6 6 13 13 13 28 28 28 36 36 36 ++20 20 20 10 10 10 13 13 13 29 29 29 36 36 36 25 25 25 19 19 19 20 20 20 ++33 33 33 34 34 34 29 29 29 21 21 21 20 20 20 25 25 25 25 25 25 21 21 21 ++23 23 23 24 24 24 25 25 25 27 27 27 28 28 28 29 29 29 29 29 29 29 29 29 ++34 34 34 28 28 28 29 29 29 36 36 36 34 34 34 28 28 28 34 34 34 48 48 48 ++59 59 59 40 40 40 36 36 36 40 40 40 38 38 38 36 36 36 43 43 43 46 46 46 ++66 66 66 44 44 44 36 36 36 42 42 42 42 42 42 42 42 42 46 46 46 49 49 49 ++66 66 66 53 53 53 43 43 43 43 43 43 48 48 48 50 50 50 50 50 50 50 50 50 ++71 71 71 69 69 69 68 68 68 68 68 68 69 69 69 70 70 70 70 70 70 71 71 71 ++83 83 83 63 63 63 54 54 54 65 65 65 69 69 69 59 59 59 52 52 52 59 59 59 ++78 78 78 74 74 74 63 63 63 58 58 58 61 61 61 60 60 60 57 57 57 60 60 60 ++73 73 73 83 83 83 67 67 67 66 66 66 75 75 75 62 62 62 57 57 57 61 61 61 ++82 82 82 78 78 78 62 62 62 53 53 53 68 68 68 74 74 74 65 65 65 56 56 56 ++77 77 77 73 73 73 68 68 68 65 65 65 65 65 65 63 63 63 61 61 61 60 60 60 ++61 61 61 63 63 63 63 63 63 66 66 66 70 70 70 72 72 72 67 67 67 58 58 58 ++59 59 59 77 77 77 73 73 73 65 65 65 73 73 73 71 71 71 57 57 57 54 54 54 ++54 54 54 69 69 69 68 68 68 59 59 59 67 67 67 73 73 73 61 61 61 46 46 46 ++52 52 52 60 60 60 57 57 57 53 53 53 63 63 63 71 71 71 69 69 69 66 66 66 ++59 59 59 56 56 56 49 49 49 44 44 44 50 50 50 60 60 60 65 65 65 62 62 62 ++67 67 67 65 65 65 61 61 61 60 60 60 60 60 60 59 59 59 57 57 57 56 56 56 ++39 39 39 43 43 43 37 37 37 34 34 34 39 39 39 34 34 34 32 32 32 43 43 43 ++33 33 33 32 32 32 37 37 37 44 44 44 46 46 46 39 39 39 34 34 34 33 33 33 ++31 31 31 40 40 40 49 49 49 51 51 51 52 52 52 50 50 50 40 40 40 29 29 29 ++29 29 29 33 33 33 38 38 38 38 38 38 37 37 37 45 45 45 44 44 44 27 27 27 ++29 29 29 19 19 19 19 19 19 24 24 24 27 27 27 34 34 34 40 40 40 37 37 37 ++40 40 40 39 39 39 38 38 38 36 36 36 34 34 34 34 34 34 38 38 38 40 40 40 ++31 31 31 27 27 27 29 29 29 38 38 38 42 42 42 37 37 37 31 31 31 29 29 29 ++28 28 28 34 34 34 38 38 38 36 36 36 29 29 29 27 27 27 28 28 28 32 32 32 ++39 39 39 36 36 36 31 31 31 28 28 28 28 28 28 31 31 31 33 33 33 34 34 34 ++28 28 28 29 29 29 29 29 29 28 28 28 27 27 27 23 23 23 19 19 19 16 16 16 ++13 13 13 4 4 4 8 8 8 21 21 21 23 23 23 6 6 6 0 0 0 0 0 0 ++0 0 0 4 4 4 0 0 0 0 0 0 4 4 4 23 23 23 27 27 27 20 20 20 ++24 24 24 34 34 34 28 28 28 10 10 10 6 6 6 10 10 10 10 10 10 10 10 10 ++31 31 31 23 23 23 6 6 6 3 3 3 11 11 11 6 6 6 3 3 3 16 16 16 ++6 6 6 4 4 4 11 11 11 20 20 20 19 19 19 8 8 8 3 3 3 6 6 6 ++11 11 11 3 3 3 4 4 4 6 6 6 8 8 8 16 16 16 17 17 17 0 0 0 ++23 23 23 27 27 27 8 8 8 0 0 0 6 6 6 8 8 8 10 10 10 25 25 25 ++36 36 36 17 17 17 4 4 4 19 19 19 31 31 31 29 29 29 27 27 27 28 28 28 ++25 25 25 37 37 37 43 43 43 34 34 34 40 40 40 37 37 37 13 13 13 20 20 20 ++11 11 11 8 8 8 6 6 6 6 6 6 10 10 10 13 13 13 13 13 13 11 11 11 ++3 3 3 11 11 11 21 21 21 29 29 29 16 16 16 8 8 8 23 23 23 20 20 20 ++20 20 20 32 32 32 27 27 27 14 14 14 16 16 16 17 17 17 13 13 13 10 10 10 ++13 13 13 11 11 11 8 8 8 10 10 10 16 16 16 17 17 17 13 13 13 8 8 8 ++ ++0 0 0 0 0 0 11 11 11 24 24 24 19 19 19 0 0 0 0 0 0 8 8 8 ++24 24 24 19 19 19 0 0 0 0 0 0 6 6 6 25 25 25 24 24 24 6 6 6 ++0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 8 8 8 20 20 20 31 31 31 ++0 0 0 0 0 0 3 3 3 6 6 6 3 3 3 0 0 0 10 10 10 23 23 23 ++27 27 27 11 11 11 3 3 3 8 8 8 4 4 4 0 0 0 0 0 0 11 11 11 ++25 25 25 14 14 14 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 6 6 6 ++10 10 10 20 20 20 20 20 20 4 4 4 0 0 0 3 3 3 3 3 3 0 0 0 ++0 0 0 10 10 10 17 17 17 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 ++10 10 10 0 0 0 0 0 0 25 25 25 29 29 29 6 6 6 0 0 0 4 4 4 ++4 4 4 0 0 0 0 0 0 0 0 0 16 16 16 21 21 21 13 13 13 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 19 19 19 20 20 20 10 10 10 ++3 3 3 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 14 14 14 29 29 29 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 11 11 24 24 24 ++34 34 34 31 31 31 29 29 29 32 32 32 32 32 32 31 31 31 33 33 33 38 38 38 ++39 39 39 32 32 32 20 20 20 6 6 6 3 3 3 4 4 4 4 4 4 0 0 0 ++17 17 17 28 28 28 24 24 24 6 6 6 3 3 3 20 20 20 27 27 27 20 20 20 ++10 10 10 4 4 4 11 11 11 24 24 24 24 24 24 11 11 11 8 8 8 16 16 16 ++31 31 31 27 27 27 17 17 17 10 10 10 17 17 17 27 27 27 27 27 27 19 19 19 ++6 6 6 17 17 17 31 31 31 36 36 36 27 27 27 14 14 14 17 17 17 28 28 28 ++32 32 32 28 28 28 24 24 24 21 21 21 21 21 21 21 21 21 21 21 21 20 20 20 ++23 23 23 24 24 24 24 24 24 24 24 24 25 25 25 27 27 27 27 27 27 27 27 27 ++28 28 28 28 28 28 28 28 28 28 28 28 29 29 29 31 31 31 31 31 31 32 32 32 ++40 40 40 45 45 45 43 43 43 34 34 34 31 31 31 34 34 34 37 37 37 37 37 37 ++46 46 46 54 54 54 53 53 53 40 40 40 36 36 36 42 42 42 44 44 44 40 40 40 ++51 51 51 60 60 60 59 59 59 46 46 46 38 38 38 43 43 43 45 45 45 43 43 43 ++52 52 52 65 65 65 73 73 73 71 71 71 67 67 67 68 68 68 68 68 68 67 67 67 ++69 69 69 63 63 63 71 71 71 63 63 63 57 57 57 63 63 63 56 56 56 49 49 49 ++58 58 58 67 67 67 73 73 73 61 61 61 54 54 54 57 57 57 52 52 52 54 54 54 ++52 52 52 72 72 72 76 76 76 67 67 67 66 66 66 63 63 63 57 57 57 54 54 54 ++54 54 54 63 63 63 76 76 76 69 69 69 52 52 52 60 60 60 70 70 70 61 61 61 ++58 58 58 58 58 58 59 59 59 60 60 60 61 61 61 60 60 60 56 56 56 52 52 52 ++68 68 68 63 63 63 59 59 59 56 56 56 53 53 53 54 54 54 59 59 59 63 63 63 ++51 51 51 58 58 58 68 68 68 63 63 63 52 52 52 59 59 59 70 70 70 69 69 69 ++60 60 60 58 58 58 67 67 67 72 72 72 62 62 62 52 52 52 48 48 48 42 42 42 ++43 43 43 50 50 50 58 58 58 63 63 63 65 65 65 63 63 63 62 62 62 61 61 61 ++65 65 65 50 50 50 45 45 45 48 48 48 44 44 44 50 50 50 59 59 59 60 60 60 ++62 62 62 59 59 59 57 57 57 58 58 58 53 53 53 44 44 44 37 37 37 36 36 36 ++43 43 43 43 43 43 44 44 44 45 45 45 46 46 46 46 46 46 45 45 45 45 45 45 ++40 40 40 50 50 50 53 53 53 45 45 45 37 37 37 33 33 33 32 32 32 31 31 31 ++34 34 34 33 33 33 39 39 39 49 49 49 46 46 46 37 37 37 34 34 34 39 39 39 ++33 33 33 38 38 38 34 34 34 24 24 24 27 27 27 42 42 42 48 48 48 42 42 42 ++32 32 32 20 20 20 23 23 23 24 24 24 17 17 17 29 29 29 39 39 39 32 32 32 ++33 33 33 38 38 38 40 40 40 38 38 38 33 33 33 31 31 31 32 32 32 34 34 34 ++38 38 38 36 36 36 31 31 31 27 27 27 31 31 31 36 36 36 36 36 36 32 32 32 ++32 32 32 29 29 29 29 29 29 32 32 32 36 36 36 36 36 36 31 31 31 25 25 25 ++31 31 31 34 34 34 37 37 37 33 33 33 27 27 27 24 24 24 29 29 29 34 34 34 ++28 28 28 25 25 25 27 27 27 31 31 31 28 28 28 24 24 24 28 28 28 36 36 36 ++3 3 3 13 13 13 20 20 20 19 19 19 10 10 10 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 3 3 3 16 16 16 25 25 25 31 31 31 32 32 32 ++33 33 33 28 28 28 19 19 19 10 10 10 4 4 4 10 10 10 20 20 20 28 28 28 ++25 25 25 13 13 13 3 3 3 6 6 6 10 10 10 6 6 6 4 4 4 4 4 4 ++10 10 10 19 19 19 21 21 21 14 14 14 8 8 8 8 8 8 8 8 8 4 4 4 ++6 6 6 8 8 8 6 6 6 14 14 14 21 21 21 13 13 13 0 0 0 4 4 4 ++17 17 17 27 27 27 20 20 20 3 3 3 0 0 0 0 0 0 11 11 11 33 33 33 ++17 17 17 0 0 0 23 23 23 29 29 29 3 3 3 13 13 13 32 32 32 33 33 33 ++25 25 25 19 19 19 28 28 28 39 39 39 31 31 31 17 17 17 13 13 13 11 11 11 ++11 11 11 11 11 11 4 4 4 14 14 14 11 11 11 8 8 8 17 17 17 3 3 3 ++6 6 6 8 8 8 8 8 8 10 10 10 14 14 14 17 17 17 16 16 16 13 13 13 ++13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 17 17 17 17 17 17 14 14 14 ++11 11 11 11 11 11 11 11 11 13 13 13 16 16 16 17 17 17 14 14 14 10 10 10 ++ ++10 10 10 3 3 3 0 0 0 10 10 10 19 19 19 19 19 19 6 6 6 0 0 0 ++11 11 11 16 16 16 16 16 16 10 10 10 0 0 0 4 4 4 16 16 16 24 24 24 ++11 11 11 0 0 0 0 0 0 8 8 8 11 11 11 3 3 3 4 4 4 17 17 17 ++20 20 20 14 14 14 4 4 4 0 0 0 0 0 0 6 6 6 6 6 6 3 3 3 ++19 19 19 21 21 21 14 14 14 0 0 0 0 0 0 4 4 4 4 4 4 0 0 0 ++10 10 10 17 17 17 16 16 16 4 4 4 0 0 0 3 3 3 3 3 3 0 0 0 ++0 0 0 11 11 11 19 19 19 16 16 16 6 6 6 0 0 0 0 0 0 3 3 3 ++3 3 3 0 0 0 6 6 6 14 14 14 13 13 13 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 11 11 11 20 20 20 20 20 20 11 11 11 4 4 4 4 4 4 ++0 0 0 0 0 0 3 3 3 10 10 10 14 14 14 13 13 13 4 4 4 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 14 14 14 19 19 19 13 13 13 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 6 6 6 17 17 17 19 19 19 11 11 11 ++0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 3 3 3 17 17 17 31 31 31 ++32 32 32 28 28 28 28 28 28 31 31 31 31 31 31 29 29 29 32 32 32 36 36 36 ++36 36 36 21 21 21 11 11 11 11 11 11 8 8 8 0 0 0 3 3 3 16 16 16 ++24 24 24 19 19 19 8 8 8 4 4 4 16 16 16 24 24 24 20 20 20 10 10 10 ++6 6 6 16 16 16 24 24 24 23 23 23 14 14 14 8 8 8 13 13 13 21 21 21 ++27 27 27 17 17 17 10 10 10 14 14 14 24 24 24 25 25 25 19 19 19 11 11 11 ++16 16 16 24 24 24 31 31 31 27 27 27 19 19 19 16 16 16 21 21 21 28 28 28 ++19 19 19 17 17 17 16 16 16 16 16 16 19 19 19 21 21 21 23 23 23 23 23 23 ++23 23 23 24 24 24 24 24 24 25 25 25 25 25 25 27 27 27 27 27 27 27 27 27 ++25 25 25 25 25 25 25 25 25 27 27 27 27 27 27 27 27 27 28 28 28 28 28 28 ++33 33 33 38 38 38 44 44 44 43 43 43 34 34 34 28 28 28 31 31 31 36 36 36 ++34 34 34 44 44 44 50 50 50 46 46 46 39 39 39 37 37 37 39 39 39 43 43 43 ++39 39 39 49 49 49 56 56 56 51 51 51 43 43 43 39 39 39 42 42 42 45 45 45 ++43 43 43 52 52 52 62 62 62 65 65 65 65 65 65 63 63 63 65 65 65 65 65 65 ++63 63 63 58 58 58 63 63 63 63 63 63 60 60 60 62 62 62 57 57 57 49 49 49 ++49 49 49 56 56 56 65 65 65 56 56 56 51 51 51 54 54 54 49 49 49 48 48 48 ++51 51 51 57 57 57 65 65 65 72 72 72 75 75 75 67 67 67 56 56 56 52 52 52 ++53 53 53 51 51 51 63 63 63 70 70 70 58 58 58 53 53 53 58 58 58 56 56 56 ++54 54 54 54 54 54 60 60 60 68 68 68 69 69 69 65 65 65 62 62 62 63 63 63 ++62 62 62 54 54 54 58 58 58 68 68 68 67 67 67 53 53 53 50 50 50 58 58 58 ++50 50 50 52 52 52 56 56 56 61 61 61 61 61 61 52 52 52 48 48 48 53 53 53 ++67 67 67 65 65 65 70 70 70 70 70 70 58 58 58 49 49 49 50 50 50 50 50 50 ++49 49 49 53 53 53 59 59 59 61 61 61 60 60 60 58 58 58 57 57 57 56 56 56 ++60 60 60 50 50 50 44 44 44 43 43 43 42 42 42 46 46 46 54 54 54 59 59 59 ++57 57 57 56 56 56 57 57 57 60 60 60 60 60 60 56 56 56 54 54 54 57 57 57 ++49 49 49 50 50 50 49 49 49 48 48 48 45 45 45 42 42 42 40 40 40 39 39 39 ++49 49 49 46 46 46 40 40 40 33 33 33 28 28 28 29 29 29 31 31 31 31 31 31 ++33 33 33 31 31 31 33 33 33 37 37 37 33 33 33 24 24 24 19 19 19 21 21 21 ++31 31 31 28 28 28 25 25 25 24 24 24 23 23 23 25 25 25 36 36 36 48 48 48 ++33 33 33 11 11 11 13 13 13 23 23 23 17 17 17 16 16 16 27 27 27 29 29 29 ++31 31 31 34 34 34 39 39 39 39 39 39 37 37 37 32 32 32 31 31 31 31 31 31 ++33 33 33 36 36 36 34 34 34 29 29 29 28 28 28 32 32 32 32 32 32 31 31 31 ++32 32 32 29 29 29 28 28 28 29 29 29 32 32 32 33 33 33 31 31 31 28 28 28 ++25 25 25 29 29 29 34 34 34 36 36 36 32 32 32 28 28 28 27 27 27 27 27 27 ++31 31 31 29 29 29 31 31 31 33 33 33 32 32 32 28 28 28 25 25 25 25 25 25 ++20 20 20 20 20 20 14 14 14 4 4 4 0 0 0 3 3 3 3 3 3 0 0 0 ++6 6 6 3 3 3 6 6 6 17 17 17 29 29 29 33 33 33 28 28 28 21 21 21 ++23 23 23 16 16 16 6 6 6 4 4 4 11 11 11 20 20 20 27 27 27 29 29 29 ++17 17 17 11 11 11 6 6 6 6 6 6 6 6 6 6 6 6 10 10 10 13 13 13 ++19 19 19 17 17 17 13 13 13 6 6 6 6 6 6 8 8 8 10 10 10 8 8 8 ++4 4 4 10 10 10 11 11 11 17 17 17 20 20 20 11 11 11 0 0 0 3 3 3 ++0 0 0 19 19 19 21 21 21 0 0 0 0 0 0 20 20 20 27 27 27 23 23 23 ++0 0 0 14 14 14 25 25 25 31 31 31 25 25 25 28 28 28 27 27 27 0 0 0 ++32 32 32 21 21 21 20 20 20 23 23 23 16 16 16 14 14 14 13 13 13 4 4 4 ++6 6 6 10 10 10 0 0 0 6 6 6 14 14 14 10 10 10 14 14 14 11 11 11 ++10 10 10 13 13 13 17 17 17 19 19 19 17 17 17 17 17 17 21 21 21 27 27 27 ++24 24 24 16 16 16 10 10 10 13 13 13 20 20 20 23 23 23 20 20 20 16 16 16 ++8 8 8 11 11 11 17 17 17 19 19 19 10 10 10 0 0 0 0 0 0 11 11 11 ++ ++16 16 16 11 11 11 0 0 0 0 0 0 10 10 10 23 23 23 16 16 16 0 0 0 ++0 0 0 6 6 6 20 20 20 23 23 23 6 6 6 0 0 0 0 0 0 24 24 24 ++23 23 23 8 8 8 0 0 0 6 6 6 10 10 10 3 3 3 0 0 0 3 3 3 ++25 25 25 23 23 23 13 13 13 0 0 0 0 0 0 8 8 8 4 4 4 0 0 0 ++10 10 10 23 23 23 23 23 23 4 4 4 0 0 0 4 4 4 4 4 4 0 0 0 ++0 0 0 11 11 11 17 17 17 11 11 11 6 6 6 6 6 6 3 3 3 0 0 0 ++0 0 0 0 0 0 11 11 11 20 20 20 17 17 17 6 6 6 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 11 11 11 16 16 16 8 8 8 0 0 0 0 0 0 ++0 0 0 14 14 14 21 21 21 11 11 11 6 6 6 16 16 16 16 16 16 4 4 4 ++0 0 0 4 4 4 13 13 13 16 16 16 13 13 13 6 6 6 0 0 0 0 0 0 ++0 0 0 0 0 0 4 4 4 16 16 16 19 19 19 13 13 13 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 16 16 16 23 23 23 13 13 13 0 0 0 ++0 0 0 0 0 0 0 0 0 4 4 4 10 10 10 14 14 14 24 24 24 33 33 33 ++29 29 29 27 27 27 27 27 27 29 29 29 31 31 31 29 29 29 31 31 31 33 33 33 ++28 28 28 13 13 13 0 0 0 4 4 4 4 4 4 0 0 0 11 11 11 25 25 25 ++20 20 20 6 6 6 0 0 0 14 14 14 25 25 25 23 23 23 11 11 11 3 3 3 ++14 14 14 24 24 24 25 25 25 11 11 11 4 4 4 13 13 13 21 21 21 23 23 23 ++16 16 16 8 8 8 10 10 10 21 21 21 24 24 24 17 17 17 11 11 11 11 11 11 ++28 28 28 29 29 29 24 24 24 14 14 14 14 14 14 23 23 23 27 27 27 23 23 23 ++17 17 17 16 16 16 14 14 14 16 16 16 17 17 17 19 19 19 19 19 19 17 17 17 ++20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 23 23 23 23 23 23 24 24 24 ++24 24 24 24 24 24 25 25 25 25 25 25 27 27 27 27 27 27 27 27 27 25 25 25 ++28 28 28 29 29 29 37 37 37 45 45 45 42 42 42 31 31 31 27 27 27 29 29 29 ++27 27 27 33 33 33 43 43 43 49 49 49 45 45 45 37 37 37 34 34 34 37 37 37 ++33 33 33 37 37 37 46 46 46 52 52 52 50 50 50 42 42 42 38 38 38 40 40 40 ++37 37 37 40 40 40 50 50 50 60 60 60 62 62 62 60 60 60 59 59 59 60 60 60 ++57 57 57 52 52 52 51 51 51 60 60 60 62 62 62 60 60 60 59 59 59 50 50 50 ++42 42 42 43 43 43 52 52 52 48 48 48 48 48 48 54 54 54 46 46 46 42 42 42 ++46 46 46 43 43 43 51 51 51 66 66 66 73 73 73 70 70 70 61 61 61 51 51 51 ++49 49 49 40 40 40 51 51 51 63 63 63 58 58 58 51 51 51 51 51 51 48 48 48 ++62 62 62 59 59 59 56 56 56 58 58 58 65 65 65 69 69 69 67 67 67 65 65 65 ++50 50 50 42 42 42 45 45 45 61 61 61 66 66 66 53 53 53 44 44 44 44 44 44 ++45 45 45 46 46 46 42 42 42 49 49 49 62 62 62 59 59 59 52 52 52 60 60 60 ++54 54 54 46 46 46 46 46 46 54 54 54 59 59 59 60 60 60 60 60 60 56 56 56 ++54 54 54 57 57 57 59 59 59 60 60 60 59 59 59 58 58 58 58 58 58 58 58 58 ++54 54 54 51 51 51 43 43 43 38 38 38 39 39 39 40 40 40 48 48 48 58 58 58 ++54 54 54 53 53 53 52 52 52 49 49 49 43 43 43 36 36 36 34 34 34 37 37 37 ++31 31 31 32 32 32 33 33 33 31 31 31 28 28 28 27 27 27 28 28 28 29 29 29 ++49 49 49 38 38 38 27 27 27 24 24 24 25 25 25 28 28 28 29 29 29 29 29 29 ++27 27 27 27 27 27 29 29 29 33 33 33 37 37 37 38 38 38 38 38 38 38 38 38 ++36 36 36 25 25 25 20 20 20 21 21 21 19 19 19 17 17 17 27 27 27 40 40 40 ++39 39 39 21 21 21 23 23 23 31 31 31 23 23 23 20 20 20 25 25 25 27 27 27 ++21 21 21 27 27 27 32 32 32 37 37 37 37 37 37 34 34 34 31 31 31 28 28 28 ++27 27 27 34 34 34 37 37 37 33 33 33 28 28 28 28 28 28 29 29 29 29 29 29 ++34 34 34 33 33 33 31 31 31 29 29 29 29 29 29 31 31 31 33 33 33 34 34 34 ++27 27 27 28 28 28 32 32 32 34 34 34 34 34 34 32 32 32 28 28 28 25 25 25 ++28 28 28 32 32 32 34 34 34 36 36 36 34 34 34 32 32 32 24 24 24 16 16 16 ++28 28 28 25 25 25 16 16 16 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 ++0 0 0 6 6 6 16 16 16 25 25 25 29 29 29 25 25 25 14 14 14 3 3 3 ++13 13 13 3 3 3 0 0 0 6 6 6 20 20 20 28 28 28 28 28 28 24 24 24 ++6 6 6 10 10 10 10 10 10 6 6 6 4 4 4 10 10 10 16 16 16 19 19 19 ++20 20 20 13 13 13 4 4 4 4 4 4 10 10 10 10 10 10 8 8 8 8 8 8 ++4 4 4 13 13 13 16 16 16 19 19 19 20 20 20 8 8 8 0 0 0 0 0 0 ++0 0 0 13 13 13 23 23 23 14 14 14 11 11 11 24 24 24 23 23 23 3 3 3 ++11 11 11 27 27 27 28 28 28 37 37 37 24 24 24 0 0 0 0 0 0 10 10 10 ++21 21 21 14 14 14 10 10 10 10 10 10 13 13 13 23 23 23 24 24 24 16 16 16 ++0 0 0 8 8 8 13 13 13 19 19 19 14 14 14 3 3 3 3 3 3 0 0 0 ++4 4 4 8 8 8 16 16 16 21 21 21 16 16 16 10 10 10 19 19 19 32 32 32 ++38 38 38 27 27 27 20 20 20 27 27 27 32 32 32 32 32 32 31 31 31 31 31 31 ++4 4 4 4 4 4 14 14 14 21 21 21 13 13 13 0 0 0 4 4 4 20 20 20 ++ ++14 14 14 19 19 19 14 14 14 0 0 0 0 0 0 11 11 11 19 19 19 17 17 17 ++0 0 0 0 0 0 8 8 8 21 21 21 19 19 19 3 3 3 0 0 0 6 6 6 ++23 23 23 25 25 25 19 19 19 4 4 4 0 0 0 6 6 6 8 8 8 0 0 0 ++10 10 10 19 19 19 21 21 21 13 13 13 3 3 3 0 0 0 3 3 3 3 3 3 ++4 4 4 13 13 13 21 21 21 20 20 20 10 10 10 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 6 6 6 17 17 17 17 17 17 6 6 6 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 11 11 11 20 20 20 16 16 16 3 3 3 0 0 0 ++0 0 0 3 3 3 4 4 4 0 0 0 6 6 6 14 14 14 14 14 14 4 4 4 ++6 6 6 19 19 19 17 17 17 0 0 0 0 0 0 11 11 11 16 16 16 8 8 8 ++0 0 0 8 8 8 13 13 13 13 13 13 8 8 8 0 0 0 0 0 0 0 0 0 ++0 0 0 6 6 6 17 17 17 20 20 20 11 11 11 0 0 0 0 0 0 4 4 4 ++3 3 3 0 0 0 0 0 0 16 16 16 21 21 21 13 13 13 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 6 6 6 16 16 16 23 23 23 27 27 27 27 27 27 ++28 28 28 27 27 27 27 27 27 28 28 28 31 31 31 31 31 31 31 31 31 31 31 31 ++19 19 19 11 11 11 0 0 0 0 0 0 0 0 0 14 14 14 20 20 20 21 21 21 ++3 3 3 6 6 6 16 16 16 24 24 24 21 21 21 11 11 11 6 6 6 11 11 11 ++27 27 27 24 24 24 13 13 13 0 0 0 4 4 4 21 21 21 24 24 24 16 16 16 ++6 6 6 13 13 13 20 20 20 23 23 23 16 16 16 8 8 8 13 13 13 21 21 21 ++31 31 31 23 23 23 13 13 13 10 10 10 20 20 20 28 28 28 24 24 24 13 13 13 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 17 17 17 ++21 21 21 23 23 23 23 23 23 24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 ++23 23 23 23 23 23 25 25 25 27 27 27 27 27 27 28 28 28 28 28 28 28 28 28 ++28 28 28 24 24 24 27 27 27 37 37 37 44 44 44 40 40 40 31 31 31 24 24 24 ++31 31 31 28 28 28 32 32 32 40 40 40 45 45 45 42 42 42 34 34 34 29 29 29 ++36 36 36 32 32 32 34 34 34 44 44 44 51 51 51 49 49 49 39 39 39 33 33 33 ++38 38 38 36 36 36 43 43 43 57 57 57 62 62 62 59 59 59 56 56 56 58 58 58 ++56 56 56 50 50 50 39 39 39 52 52 52 59 59 59 57 57 57 61 61 61 54 54 54 ++42 42 42 38 38 38 45 45 45 44 44 44 48 48 48 57 57 57 51 51 51 43 43 43 ++44 44 44 40 40 40 44 44 44 49 49 49 54 54 54 68 68 68 70 70 70 54 54 54 ++46 46 46 40 40 40 44 44 44 49 49 49 50 50 50 54 54 54 54 54 54 45 45 45 ++52 52 52 58 58 58 57 57 57 50 50 50 53 53 53 63 63 63 66 66 66 59 59 59 ++49 49 49 42 42 42 36 36 36 40 40 40 52 52 52 58 58 58 51 51 51 40 40 40 ++44 44 44 49 49 49 44 44 44 40 40 40 52 52 52 61 61 61 59 59 59 57 57 57 ++45 45 45 37 37 37 36 36 36 46 46 46 58 58 58 60 60 60 57 57 57 52 52 52 ++45 45 45 48 48 48 51 51 51 54 54 54 57 57 57 58 58 58 58 58 58 58 58 58 ++52 52 52 53 53 53 43 43 43 34 34 34 36 36 36 36 36 36 40 40 40 53 53 53 ++51 51 51 50 50 50 48 48 48 42 42 42 33 33 33 27 27 27 27 27 27 29 29 29 ++24 24 24 27 27 27 27 27 27 25 25 25 23 23 23 25 25 25 32 32 32 37 37 37 ++38 38 38 28 28 28 23 23 23 28 28 28 33 33 33 31 31 31 27 27 27 27 27 27 ++25 25 25 25 25 25 25 25 25 25 25 25 29 29 29 34 34 34 34 34 34 33 33 33 ++43 43 43 34 34 34 23 23 23 17 17 17 20 20 20 24 24 24 24 24 24 21 21 21 ++38 38 38 37 37 37 39 39 39 36 36 36 28 28 28 32 32 32 32 32 32 21 21 21 ++16 16 16 17 17 17 21 21 21 27 27 27 32 32 32 33 33 33 31 31 31 29 29 29 ++23 23 23 31 31 31 36 36 36 33 33 33 29 29 29 29 29 29 28 28 28 27 27 27 ++28 28 28 28 28 28 28 28 28 25 25 25 24 24 24 25 25 25 28 28 28 31 31 31 ++28 28 28 25 25 25 21 21 21 21 21 21 25 25 25 27 27 27 27 27 27 25 25 25 ++20 20 20 31 31 31 37 37 37 36 36 36 33 33 33 32 32 32 25 25 25 17 17 17 ++21 21 21 23 23 23 23 23 23 17 17 17 6 6 6 0 0 0 0 0 0 4 4 4 ++0 0 0 14 14 14 27 27 27 29 29 29 20 20 20 10 10 10 3 3 3 0 0 0 ++8 8 8 4 4 4 6 6 6 14 14 14 24 24 24 27 27 27 20 20 20 13 13 13 ++4 4 4 10 10 10 10 10 10 4 4 4 6 6 6 14 14 14 19 19 19 17 17 17 ++13 13 13 6 6 6 4 4 4 11 11 11 14 14 14 8 8 8 4 4 4 6 6 6 ++11 11 11 16 16 16 14 14 14 14 14 14 19 19 19 11 11 11 0 0 0 0 0 0 ++4 4 4 3 3 3 20 20 20 29 29 29 20 20 20 11 11 11 10 10 10 0 0 0 ++20 20 20 33 33 33 31 31 31 17 17 17 3 3 3 0 0 0 11 11 11 19 19 19 ++8 8 8 8 8 8 13 13 13 20 20 20 27 27 27 31 31 31 32 32 32 28 28 28 ++16 16 16 11 11 11 6 6 6 4 4 4 3 3 3 14 14 14 20 20 20 10 10 10 ++14 14 14 14 14 14 19 19 19 24 24 24 17 17 17 3 3 3 6 6 6 21 21 21 ++31 31 31 24 24 24 23 23 23 29 29 29 28 28 28 21 21 21 24 24 24 33 33 33 ++17 17 17 11 11 11 10 10 10 16 16 16 20 20 20 19 19 19 19 19 19 20 20 20 ++ ++10 10 10 19 19 19 23 23 23 14 14 14 3 3 3 0 0 0 14 14 14 25 25 25 ++16 16 16 4 4 4 0 0 0 10 10 10 21 21 21 23 23 23 11 11 11 0 0 0 ++11 11 11 24 24 24 28 28 28 14 14 14 0 0 0 0 0 0 4 4 4 4 4 4 ++0 0 0 6 6 6 20 20 20 23 23 23 13 13 13 0 0 0 0 0 0 10 10 10 ++3 3 3 0 0 0 10 10 10 21 21 21 19 19 19 3 3 3 0 0 0 6 6 6 ++4 4 4 0 0 0 0 0 0 11 11 11 17 17 17 11 11 11 4 4 4 3 3 3 ++4 4 4 0 0 0 0 0 0 0 0 0 11 11 11 19 19 19 13 13 13 0 0 0 ++0 0 0 3 3 3 4 4 4 0 0 0 0 0 0 11 11 11 19 19 19 17 17 17 ++23 23 23 14 14 14 3 3 3 0 0 0 0 0 0 3 3 3 6 6 6 11 11 11 ++16 16 16 13 13 13 10 10 10 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 13 13 13 19 19 19 13 13 13 0 0 0 0 0 0 0 0 0 6 6 6 ++0 0 0 3 3 3 11 11 11 19 19 19 13 13 13 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 6 6 6 11 11 11 16 16 16 20 20 20 23 23 23 24 24 24 ++27 27 27 27 27 27 27 27 27 28 28 28 31 31 31 32 32 32 29 29 29 25 25 25 ++10 10 10 4 4 4 0 0 0 0 0 0 13 13 13 20 20 20 16 16 16 6 6 6 ++0 0 0 16 16 16 25 25 25 20 20 20 6 6 6 3 3 3 13 13 13 23 23 23 ++24 24 24 14 14 14 4 4 4 4 4 4 16 16 16 23 23 23 16 16 16 4 4 4 ++11 11 11 21 21 21 24 24 24 16 16 16 6 6 6 10 10 10 21 21 21 28 28 28 ++20 20 20 13 13 13 10 10 10 19 19 19 24 24 24 21 21 21 14 14 14 11 11 11 ++11 11 11 13 13 13 14 14 14 17 17 17 19 19 19 19 19 19 20 20 20 21 21 21 ++16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 19 19 19 19 19 19 19 19 19 ++20 20 20 20 20 20 21 21 21 23 23 23 24 24 24 25 25 25 25 25 25 27 27 27 ++25 25 25 24 24 24 23 23 23 27 27 27 37 37 37 43 43 43 38 38 38 28 28 28 ++29 29 29 28 28 28 27 27 27 29 29 29 38 38 38 43 43 43 40 40 40 33 33 33 ++34 34 34 32 32 32 29 29 29 33 33 33 43 43 43 50 50 50 45 45 45 37 37 37 ++37 37 37 29 29 29 34 34 34 50 50 50 60 60 60 57 57 57 54 54 54 58 58 58 ++57 57 57 50 50 50 33 33 33 42 42 42 51 51 51 50 50 50 59 59 59 59 59 59 ++49 49 49 38 38 38 43 43 43 43 43 43 46 46 46 59 59 59 57 57 57 50 50 50 ++44 44 44 38 38 38 38 38 38 38 38 38 40 40 40 56 56 56 66 66 66 60 60 60 ++52 52 52 44 44 44 39 39 39 39 39 39 43 43 43 52 52 52 58 58 58 54 54 54 ++31 31 31 44 44 44 57 57 57 59 59 59 56 56 56 53 53 53 57 57 57 59 59 59 ++57 57 57 51 51 51 40 40 40 36 36 36 42 42 42 52 52 52 54 54 54 52 52 52 ++38 38 38 40 40 40 45 45 45 45 45 45 44 44 44 52 52 52 57 57 57 49 49 49 ++42 42 42 44 44 44 48 48 48 50 50 50 49 49 49 45 45 45 50 50 50 58 58 58 ++34 34 34 37 37 37 42 42 42 46 46 46 50 50 50 52 52 52 52 52 52 52 52 52 ++50 50 50 53 53 53 44 44 44 33 33 33 33 33 33 33 33 33 37 37 37 48 48 48 ++48 48 48 48 48 48 45 45 45 38 38 38 31 31 31 28 28 28 31 31 31 33 33 33 ++31 31 31 31 31 31 29 29 29 27 27 27 25 25 25 29 29 29 37 37 37 44 44 44 ++33 33 33 28 28 28 29 29 29 36 36 36 36 36 36 29 29 29 25 25 25 25 25 25 ++27 27 27 25 25 25 23 23 23 21 21 21 23 23 23 25 25 25 25 25 25 23 23 23 ++39 39 39 33 33 33 25 25 25 21 21 21 23 23 23 24 24 24 20 20 20 14 14 14 ++25 25 25 31 31 31 37 37 37 33 33 33 29 29 29 32 32 32 31 31 31 19 19 19 ++19 19 19 16 16 16 14 14 14 16 16 16 20 20 20 24 24 24 25 25 25 25 25 25 ++20 20 20 25 25 25 29 29 29 29 29 29 31 31 31 32 32 32 28 28 28 23 23 23 ++29 29 29 31 31 31 32 32 32 32 32 32 29 29 29 28 28 28 31 31 31 33 33 33 ++34 34 34 29 29 29 25 25 25 24 24 24 27 27 27 31 31 31 32 32 32 32 32 32 ++8 8 8 24 24 24 34 34 34 32 32 32 28 28 28 27 27 27 27 27 27 24 24 24 ++19 19 19 16 16 16 20 20 20 25 25 25 19 19 19 0 0 0 0 0 0 10 10 10 ++14 14 14 23 23 23 29 29 29 25 25 25 14 14 14 4 4 4 6 6 6 11 11 11 ++6 6 6 11 11 11 19 19 19 24 24 24 24 24 24 20 20 20 13 13 13 6 6 6 ++8 8 8 10 10 10 6 6 6 4 4 4 11 11 11 19 19 19 17 17 17 10 10 10 ++6 6 6 4 4 4 8 8 8 14 14 14 11 11 11 4 4 4 4 4 4 13 13 13 ++17 17 17 17 17 17 8 8 8 8 8 8 17 17 17 16 16 16 4 4 4 0 0 0 ++4 4 4 0 0 0 16 16 16 31 31 31 20 20 20 4 4 4 11 11 11 20 20 20 ++32 32 32 6 6 6 0 0 0 0 0 0 4 4 4 24 24 24 17 17 17 14 14 14 ++11 11 11 13 13 13 21 21 21 32 32 32 32 32 32 23 23 23 21 21 21 28 28 28 ++0 0 0 19 19 19 19 19 19 4 4 4 10 10 10 11 11 11 3 3 3 8 8 8 ++6 6 6 3 3 3 10 10 10 24 24 24 28 28 28 23 23 23 24 24 24 31 31 31 ++23 23 23 17 17 17 20 20 20 28 28 28 25 25 25 16 16 16 16 16 16 25 25 25 ++28 28 28 23 23 23 14 14 14 10 10 10 17 17 17 25 25 25 21 21 21 11 11 11 ++ ++8 8 8 11 11 11 19 19 19 23 23 23 19 19 19 10 10 10 10 10 10 16 16 16 ++24 24 24 19 19 19 10 10 10 6 6 6 14 14 14 24 24 24 23 23 23 14 14 14 ++0 0 0 6 6 6 19 19 19 24 24 24 13 13 13 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 10 10 10 20 20 20 20 20 20 8 8 8 0 0 0 3 3 3 ++3 3 3 0 0 0 0 0 0 8 8 8 19 19 19 20 20 20 10 10 10 0 0 0 ++0 0 0 3 3 3 0 0 0 0 0 0 6 6 6 16 16 16 14 14 14 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 17 17 17 17 17 17 ++6 6 6 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 13 13 13 25 25 25 ++28 28 28 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 13 13 13 ++23 23 23 17 17 17 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++13 13 13 13 13 13 8 8 8 0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 ++0 0 0 13 13 13 20 20 20 10 10 10 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 8 8 8 17 17 17 14 14 14 10 10 10 13 13 13 20 20 20 25 25 25 ++27 27 27 27 27 27 27 27 27 27 27 27 29 29 29 31 31 31 27 27 27 20 20 20 ++4 4 4 0 0 0 0 0 0 20 20 20 27 27 27 16 16 16 3 3 3 0 0 0 ++11 11 11 20 20 20 19 19 19 4 4 4 0 0 0 10 10 10 21 21 21 25 25 25 ++10 10 10 6 6 6 11 11 11 20 20 20 21 21 21 14 14 14 6 6 6 4 4 4 ++21 21 21 23 23 23 17 17 17 6 6 6 8 8 8 19 19 19 24 24 24 21 21 21 ++6 6 6 10 10 10 19 19 19 25 25 25 21 21 21 10 10 10 8 8 8 16 16 16 ++10 10 10 11 11 11 13 13 13 13 13 13 13 13 13 14 14 14 16 16 16 17 17 17 ++16 16 16 16 16 16 17 17 17 17 17 17 19 19 19 19 19 19 20 20 20 20 20 20 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 21 21 21 23 23 23 ++20 20 20 25 25 25 25 25 25 21 21 21 24 24 24 34 34 34 38 38 38 36 36 36 ++25 25 25 28 28 28 27 27 27 24 24 24 28 28 28 37 37 37 43 43 43 43 43 43 ++31 31 31 32 32 32 29 29 29 27 27 27 32 32 32 40 40 40 45 45 45 45 45 45 ++34 34 34 25 25 25 25 25 25 40 40 40 51 51 51 52 52 52 52 52 52 56 56 56 ++57 57 57 51 51 51 34 34 34 33 33 33 39 39 39 43 43 43 50 50 50 56 56 56 ++53 53 53 39 39 39 42 42 42 42 42 42 43 43 43 56 56 56 58 58 58 53 53 53 ++46 46 46 36 36 36 34 34 34 39 39 39 39 39 39 39 39 39 49 49 49 58 58 58 ++56 56 56 43 43 43 34 34 34 38 38 38 40 40 40 42 42 42 50 50 50 59 59 59 ++46 46 46 39 39 39 43 43 43 56 56 56 58 58 58 48 48 48 45 45 45 53 53 53 ++56 56 56 50 50 50 45 45 45 43 43 43 37 37 37 32 32 32 40 40 40 53 53 53 ++45 45 45 37 37 37 43 43 43 49 49 49 40 40 40 40 40 40 52 52 52 56 56 56 ++48 48 48 48 48 48 43 43 43 38 38 38 37 37 37 33 33 33 38 38 38 49 49 49 ++39 39 39 40 40 40 43 43 43 46 46 46 49 49 49 50 50 50 49 49 49 46 46 46 ++45 45 45 49 49 49 43 43 43 33 33 33 29 29 29 31 31 31 36 36 36 42 42 42 ++44 44 44 45 45 45 40 40 40 32 32 32 25 25 25 23 23 23 24 24 24 24 24 24 ++23 23 23 23 23 23 23 23 23 21 21 21 23 23 23 29 29 29 37 37 37 44 44 44 ++36 36 36 34 34 34 34 34 34 34 34 34 32 32 32 27 27 27 23 23 23 24 24 24 ++24 24 24 23 23 23 24 24 24 27 27 27 29 29 29 31 31 31 32 32 32 33 33 33 ++27 27 27 21 21 21 23 23 23 28 28 28 24 24 24 13 13 13 13 13 13 20 20 20 ++17 17 17 17 17 17 25 25 25 33 33 33 32 32 32 28 28 28 27 27 27 27 27 27 ++25 25 25 20 20 20 14 14 14 11 11 11 13 13 13 14 14 14 16 16 16 17 17 17 ++17 17 17 21 21 21 24 24 24 24 24 24 25 25 25 28 28 28 25 25 25 19 19 19 ++24 24 24 27 27 27 29 29 29 29 29 29 27 27 27 25 25 25 27 27 27 27 27 27 ++27 27 27 27 27 27 28 28 28 28 28 28 28 28 28 28 28 28 27 27 27 27 27 27 ++3 3 3 16 16 16 27 27 27 27 27 27 21 21 21 20 20 20 23 23 23 24 24 24 ++20 20 20 10 10 10 8 8 8 17 17 17 20 20 20 13 13 13 10 10 10 14 14 14 ++21 21 21 19 19 19 14 14 14 10 10 10 8 8 8 6 6 6 8 8 8 8 8 8 ++8 8 8 14 14 14 21 21 21 24 24 24 20 20 20 14 14 14 10 10 10 8 8 8 ++11 11 11 10 10 10 6 6 6 10 10 10 16 16 16 20 20 20 14 14 14 4 4 4 ++6 6 6 6 6 6 8 8 8 8 8 8 4 4 4 3 3 3 11 11 11 20 20 20 ++17 17 17 16 16 16 6 6 6 4 4 4 16 16 16 19 19 19 10 10 10 3 3 3 ++3 3 3 10 10 10 19 19 19 20 20 20 11 11 11 10 10 10 17 17 17 23 23 23 ++16 16 16 6 6 6 11 11 11 8 8 8 13 13 13 21 21 21 13 13 13 8 8 8 ++14 14 14 16 16 16 20 20 20 27 27 27 25 25 25 11 11 11 11 11 11 27 27 27 ++13 13 13 20 20 20 6 6 6 0 0 0 17 17 17 20 20 20 0 0 0 14 14 14 ++14 14 14 8 8 8 10 10 10 19 19 19 23 23 23 17 17 17 13 13 13 14 14 14 ++24 24 24 17 17 17 16 16 16 24 24 24 27 27 27 21 21 21 17 17 17 16 16 16 ++20 20 20 23 23 23 17 17 17 6 6 6 10 10 10 20 20 20 20 20 20 11 11 11 ++ ++13 13 13 8 8 8 8 8 8 16 16 16 21 21 21 17 17 17 10 10 10 4 4 4 ++13 13 13 19 19 19 20 20 20 11 11 11 6 6 6 11 11 11 19 19 19 24 24 24 ++8 8 8 0 0 0 0 0 0 19 19 19 20 20 20 4 4 4 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 6 6 6 16 16 16 14 14 14 6 6 6 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 8 8 8 19 19 19 16 16 16 4 4 4 ++0 0 0 4 4 4 3 3 3 0 0 0 0 0 0 10 10 10 14 14 14 13 13 13 ++6 6 6 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 8 8 8 19 19 19 ++16 16 16 4 4 4 0 0 0 0 0 0 3 3 3 3 3 3 10 10 10 19 19 19 ++17 17 17 11 11 11 4 4 4 0 0 0 0 0 0 3 3 3 8 8 8 11 11 11 ++14 14 14 13 13 13 10 10 10 3 3 3 0 0 0 0 0 0 0 0 0 6 6 6 ++16 16 16 8 8 8 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 4 4 4 ++6 6 6 14 14 14 14 14 14 3 3 3 0 0 0 0 0 0 4 4 4 3 3 3 ++6 6 6 13 13 13 14 14 14 10 10 10 10 10 10 16 16 16 23 23 23 25 25 25 ++24 24 24 27 27 27 25 25 25 24 24 24 27 27 27 28 28 28 21 21 21 13 13 13 ++3 3 3 0 0 0 8 8 8 21 21 21 20 20 20 6 6 6 0 0 0 6 6 6 ++19 19 19 16 16 16 6 6 6 0 0 0 8 8 8 21 21 21 21 21 21 14 14 14 ++0 0 0 8 8 8 19 19 19 21 21 21 14 14 14 6 6 6 6 6 6 14 14 14 ++21 21 21 16 16 16 10 10 10 8 8 8 14 14 14 19 19 19 16 16 16 11 11 11 ++8 8 8 16 16 16 21 21 21 21 21 21 14 14 14 6 6 6 10 10 10 14 14 14 ++13 13 13 14 14 14 14 14 14 13 13 13 11 11 11 13 13 13 16 16 16 19 19 19 ++32 32 32 32 32 32 33 33 33 33 33 33 34 34 34 34 34 34 36 36 36 36 36 36 ++28 28 28 25 25 25 23 23 23 19 19 19 17 17 17 19 19 19 20 20 20 20 20 20 ++20 20 20 23 23 23 23 23 23 20 20 20 19 19 19 23 23 23 31 31 31 34 34 34 ++32 32 32 27 27 27 23 23 23 23 23 23 25 25 25 28 28 28 34 34 34 40 40 40 ++34 34 34 31 31 31 28 28 28 27 27 27 27 27 27 29 29 29 36 36 36 43 43 43 ++40 40 40 31 31 31 25 25 25 34 34 34 43 43 43 46 46 46 48 48 48 50 50 50 ++51 51 51 49 49 49 40 40 40 28 28 28 29 29 29 36 36 36 37 37 37 45 45 45 ++51 51 51 34 34 34 39 39 39 37 37 37 34 34 34 46 46 46 51 51 51 49 49 49 ++49 49 49 40 40 40 34 34 34 37 37 37 37 37 37 31 31 31 34 34 34 48 48 48 ++48 48 48 43 43 43 39 39 39 37 37 37 34 34 34 33 33 33 39 39 39 48 48 48 ++59 59 59 45 45 45 36 36 36 39 39 39 44 44 44 43 43 43 42 42 42 44 44 44 ++45 45 45 43 43 43 42 42 42 40 40 40 32 32 32 25 25 25 29 29 29 40 40 40 ++56 56 56 48 48 48 44 44 44 43 43 43 36 36 36 31 31 31 39 39 39 49 49 49 ++53 53 53 46 46 46 33 33 33 28 28 28 32 32 32 28 28 28 24 24 24 29 29 29 ++45 45 45 44 44 44 43 43 43 43 43 43 44 44 44 44 44 44 43 43 43 40 40 40 ++39 39 39 39 39 39 38 38 38 32 32 32 27 27 27 31 31 31 37 37 37 37 37 37 ++38 38 38 39 39 39 37 37 37 31 31 31 28 28 28 31 31 31 32 32 32 31 31 31 ++21 21 21 23 23 23 24 24 24 27 27 27 29 29 29 34 34 34 39 39 39 42 42 42 ++36 36 36 34 34 34 31 31 31 27 27 27 25 25 25 27 27 27 25 25 25 21 21 21 ++24 24 24 21 21 21 23 23 23 28 28 28 27 27 27 21 21 21 20 20 20 24 24 24 ++19 19 19 20 20 20 24 24 24 27 27 27 21 21 21 14 14 14 14 14 14 20 20 20 ++16 16 16 19 19 19 23 23 23 28 28 28 28 28 28 24 24 24 24 24 24 27 27 27 ++25 25 25 21 21 21 17 17 17 14 14 14 13 13 13 13 13 13 13 13 13 11 11 11 ++13 13 13 20 20 20 21 21 21 19 19 19 14 14 14 16 16 16 17 17 17 14 14 14 ++6 6 6 8 8 8 10 10 10 10 10 10 8 8 8 8 8 8 8 8 8 8 8 8 ++6 6 6 11 11 11 17 17 17 17 17 17 13 13 13 8 8 8 6 6 6 8 8 8 ++6 6 6 10 10 10 16 16 16 20 20 20 20 20 20 16 16 16 14 14 14 14 14 14 ++13 13 13 10 10 10 4 4 4 4 4 4 11 11 11 16 16 16 16 16 16 14 14 14 ++14 14 14 8 8 8 0 0 0 0 0 0 3 3 3 6 6 6 6 6 6 3 3 3 ++16 16 16 17 17 17 17 17 17 16 16 16 11 11 11 8 8 8 8 8 8 10 10 10 ++10 10 10 8 8 8 10 10 10 16 16 16 19 19 19 16 16 16 10 10 10 6 6 6 ++6 6 6 8 8 8 6 6 6 3 3 3 4 4 4 11 11 11 16 16 16 17 17 17 ++8 8 8 16 16 16 11 11 11 6 6 6 14 14 14 16 16 16 11 11 11 11 11 11 ++11 11 11 23 23 23 21 21 21 11 11 11 10 10 10 14 14 14 16 16 16 16 16 16 ++3 3 3 25 25 25 6 6 6 8 8 8 14 14 14 3 3 3 14 14 14 11 11 11 ++11 11 11 14 14 14 13 13 13 14 14 14 17 17 17 11 11 11 11 11 11 23 23 23 ++27 27 27 0 0 0 6 6 6 23 23 23 0 0 0 3 3 3 11 11 11 8 8 8 ++4 4 4 3 3 3 3 3 3 8 8 8 11 11 11 13 13 13 11 11 11 11 11 11 ++17 17 17 14 14 14 13 13 13 16 16 16 19 19 19 16 16 16 13 13 13 10 10 10 ++11 11 11 17 17 17 17 17 17 11 11 11 10 10 10 14 14 14 17 17 17 14 14 14 ++ ++19 19 19 8 8 8 0 0 0 0 0 0 13 13 13 19 19 19 13 13 13 3 3 3 ++0 0 0 10 10 10 21 21 21 19 19 19 4 4 4 0 0 0 6 6 6 20 20 20 ++20 20 20 3 3 3 0 0 0 3 3 3 19 19 19 21 21 21 11 11 11 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 17 17 17 14 14 14 3 3 3 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 13 13 13 21 21 21 ++4 4 4 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 8 8 8 24 24 24 ++20 20 20 6 6 6 0 0 0 6 6 6 4 4 4 0 0 0 0 0 0 8 8 8 ++19 19 19 14 14 14 3 3 3 0 0 0 0 0 0 11 11 11 11 11 11 0 0 0 ++3 3 3 16 16 16 16 16 16 0 0 0 0 0 0 10 10 10 16 16 16 11 11 11 ++0 0 0 4 4 4 10 10 10 8 8 8 3 3 3 0 0 0 8 8 8 16 16 16 ++13 13 13 0 0 0 0 0 0 8 8 8 4 4 4 0 0 0 0 0 0 10 10 10 ++20 20 20 6 6 6 0 0 0 0 0 0 6 6 6 0 0 0 0 0 0 3 3 3 ++20 20 20 14 14 14 4 4 4 0 0 0 13 13 13 25 25 25 28 28 28 23 23 23 ++23 23 23 24 24 24 24 24 24 23 23 23 24 24 24 25 25 25 17 17 17 6 6 6 ++0 0 0 13 13 13 17 17 17 10 10 10 0 0 0 0 0 0 10 10 10 17 17 17 ++14 14 14 6 6 6 0 0 0 6 6 6 20 20 20 27 27 27 17 17 17 0 0 0 ++8 8 8 14 14 14 17 17 17 13 13 13 3 3 3 3 3 3 14 14 14 24 24 24 ++13 13 13 6 6 6 8 8 8 17 17 17 19 19 19 11 11 11 4 4 4 4 4 4 ++20 20 20 21 21 21 19 19 19 10 10 10 10 10 10 14 14 14 14 14 14 10 10 10 ++10 10 10 11 11 11 14 14 14 14 14 14 16 16 16 20 20 20 25 25 25 31 31 31 ++31 31 31 31 31 31 32 32 32 32 32 32 33 33 33 33 33 33 34 34 34 34 34 34 ++37 37 37 34 34 34 29 29 29 24 24 24 21 21 21 20 20 20 21 21 21 23 23 23 ++25 25 25 19 19 19 14 14 14 19 19 19 21 21 21 20 20 20 23 23 23 28 28 28 ++43 43 43 27 27 27 17 17 17 24 24 24 28 28 28 24 24 24 24 24 24 29 29 29 ++45 45 45 32 32 32 23 23 23 27 27 27 28 28 28 23 23 23 24 24 24 31 31 31 ++51 51 51 40 40 40 32 32 32 33 33 33 39 39 39 43 43 43 44 44 44 44 44 44 ++45 45 45 46 46 46 45 45 45 27 27 27 25 25 25 32 32 32 25 25 25 37 37 37 ++46 46 46 29 29 29 34 34 34 33 33 33 27 27 27 38 38 38 44 44 44 42 42 42 ++49 49 49 50 50 50 38 38 38 27 27 27 31 31 31 32 32 32 31 31 31 36 36 36 ++33 33 33 46 46 46 46 46 46 33 33 33 25 25 25 31 31 31 33 33 33 29 29 29 ++34 34 34 48 48 48 49 49 49 34 34 34 25 25 25 34 34 34 43 43 43 43 43 43 ++39 39 39 42 42 42 39 39 39 33 33 33 34 34 34 39 39 39 38 38 38 31 31 31 ++31 31 31 43 43 43 39 39 39 31 31 31 34 34 34 37 37 37 33 33 33 37 37 37 ++34 34 34 37 37 37 33 33 33 33 33 33 37 37 37 34 34 34 34 34 34 44 44 44 ++42 42 42 38 38 38 34 34 34 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 ++33 33 33 31 31 31 34 34 34 31 31 31 24 24 24 31 31 31 39 39 39 34 34 34 ++36 36 36 37 37 37 33 33 33 27 27 27 25 25 25 29 29 29 29 29 29 25 25 25 ++28 28 28 28 28 28 29 29 29 31 31 31 31 31 31 31 31 31 29 29 29 29 29 29 ++28 28 28 27 27 27 24 24 24 20 20 20 25 25 25 32 32 32 28 28 28 20 20 20 ++23 23 23 19 19 19 23 23 23 29 29 29 27 27 27 16 16 16 14 14 14 21 21 21 ++19 19 19 28 28 28 28 28 28 19 19 19 19 19 19 25 25 25 21 21 21 8 8 8 ++13 13 13 25 25 25 25 25 25 14 14 14 13 13 13 20 20 20 20 20 20 13 13 13 ++19 19 19 19 19 19 19 19 19 19 19 19 17 17 17 16 16 16 14 14 14 13 13 13 ++10 10 10 19 19 19 23 23 23 14 14 14 4 4 4 3 3 3 8 8 8 13 13 13 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++8 8 8 16 16 16 20 20 20 19 19 19 11 11 11 6 6 6 8 8 8 13 13 13 ++14 14 14 6 6 6 8 8 8 17 17 17 20 20 20 14 14 14 4 4 4 3 3 3 ++0 0 0 11 11 11 13 13 13 0 0 0 0 0 0 13 13 13 19 19 19 13 13 13 ++6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 10 10 10 11 11 11 ++24 24 24 20 20 20 13 13 13 6 6 6 3 3 3 4 4 4 6 6 6 8 8 8 ++4 4 4 6 6 6 13 13 13 21 21 21 20 20 20 11 11 11 6 6 6 11 11 11 ++3 3 3 6 6 6 6 6 6 4 4 4 11 11 11 19 19 19 17 17 17 8 8 8 ++0 0 0 14 14 14 16 16 16 11 11 11 13 13 13 13 13 13 13 13 13 16 16 16 ++16 16 16 23 23 23 16 16 16 10 10 10 16 16 16 17 17 17 14 14 14 17 17 17 ++21 21 21 8 8 8 24 24 24 149 149 149 180 183 185 75 75 75 10 10 10 10 10 10 ++11 11 11 17 17 17 11 11 11 6 6 6 14 14 14 16 16 16 10 10 10 13 13 13 ++3 3 3 21 21 21 144 145 144 180 183 185 71 71 71 0 0 0 23 23 23 8 8 8 ++4 4 4 6 6 6 8 8 8 6 6 6 8 8 8 14 14 14 17 17 17 19 19 19 ++19 19 19 23 23 23 25 25 25 21 21 21 17 17 17 16 16 16 19 19 19 20 20 20 ++20 20 20 19 19 19 19 19 19 19 19 19 16 16 16 11 11 11 8 8 8 6 6 6 ++ ++14 14 14 14 14 14 8 8 8 0 0 0 0 0 0 11 11 11 14 14 14 13 13 13 ++0 0 0 0 0 0 6 6 6 21 21 21 17 17 17 0 0 0 0 0 0 3 3 3 ++17 17 17 19 19 19 11 11 11 0 0 0 0 0 0 17 17 17 20 20 20 11 11 11 ++0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 3 3 3 11 11 11 17 17 17 ++10 10 10 3 3 3 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 10 10 10 ++19 19 19 8 8 8 0 0 0 0 0 0 0 0 0 4 4 4 3 3 3 0 0 0 ++20 20 20 14 14 14 4 4 4 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 ++6 6 6 6 6 6 6 6 6 10 10 10 13 13 13 11 11 11 4 4 4 0 0 0 ++0 0 0 8 8 8 13 13 13 10 10 10 10 10 10 14 14 14 11 11 11 0 0 0 ++0 0 0 3 3 3 8 8 8 10 10 10 10 10 10 10 10 10 11 11 11 13 13 13 ++0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 0 0 0 13 13 13 21 21 21 ++0 0 0 4 4 4 8 8 8 4 4 4 0 0 0 0 0 0 8 8 8 16 16 16 ++11 11 11 4 4 4 0 0 0 3 3 3 14 14 14 23 23 23 24 24 24 21 21 21 ++27 27 27 23 23 23 20 20 20 23 23 23 24 24 24 20 20 20 8 8 8 0 0 0 ++8 8 8 19 19 19 19 19 19 4 4 4 0 0 0 13 13 13 17 17 17 13 13 13 ++3 3 3 0 0 0 4 4 4 21 21 21 23 23 23 8 8 8 0 0 0 3 3 3 ++20 20 20 17 17 17 10 10 10 3 3 3 8 8 8 19 19 19 20 20 20 13 13 13 ++6 6 6 8 8 8 13 13 13 19 19 19 14 14 14 6 6 6 8 8 8 19 19 19 ++23 23 23 19 19 19 13 13 13 10 10 10 10 10 10 11 11 11 11 11 11 10 10 10 ++8 8 8 10 10 10 14 14 14 21 21 21 29 29 29 33 33 33 33 33 33 32 32 32 ++31 31 31 29 29 29 29 29 29 28 28 28 27 27 27 25 25 25 24 24 24 24 24 24 ++29 29 29 32 32 32 34 34 34 34 34 34 32 32 32 25 25 25 19 19 19 14 14 14 ++14 14 14 17 17 17 20 20 20 20 20 20 19 19 19 17 17 17 19 19 19 21 21 21 ++28 28 28 32 32 32 29 29 29 23 23 23 20 20 20 24 24 24 25 25 25 21 21 21 ++32 32 32 36 36 36 33 33 33 24 24 24 21 21 21 24 24 24 24 24 24 21 21 21 ++25 25 25 39 39 39 42 42 42 29 29 29 28 28 28 39 39 39 45 45 45 40 40 40 ++39 39 39 46 46 46 45 45 45 33 33 33 25 25 25 29 29 29 32 32 32 28 28 28 ++31 31 31 25 25 25 27 27 27 33 33 33 31 31 31 25 25 25 31 31 31 44 44 44 ++27 27 27 44 44 44 49 49 49 36 36 36 25 25 25 29 29 29 33 33 33 31 31 31 ++31 31 31 42 42 42 48 48 48 42 42 42 32 32 32 28 28 28 28 28 28 28 28 28 ++44 44 44 46 46 46 44 44 44 36 36 36 31 31 31 33 33 33 36 36 36 34 34 34 ++36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 ++34 34 34 34 34 34 36 36 36 37 37 37 37 37 37 36 36 36 32 32 32 28 28 28 ++32 32 32 34 34 34 37 37 37 36 36 36 33 33 33 32 32 32 33 33 33 37 37 37 ++34 34 34 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 ++28 28 28 31 31 31 32 32 32 31 31 31 29 29 29 28 28 28 27 27 27 28 28 28 ++28 28 28 29 29 29 29 29 29 31 31 31 29 29 29 29 29 29 29 29 29 31 31 31 ++31 31 31 31 31 31 31 31 31 32 32 32 31 31 31 31 31 31 29 29 29 29 29 29 ++28 28 28 28 28 28 29 29 29 28 28 28 27 27 27 24 24 24 20 20 20 19 19 19 ++21 21 21 23 23 23 24 24 24 20 20 20 16 16 16 13 13 13 14 14 14 19 19 19 ++17 17 17 19 19 19 19 19 19 17 17 17 14 14 14 13 13 13 16 16 16 17 17 17 ++21 21 21 20 20 20 17 17 17 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 ++19 19 19 21 21 21 23 23 23 24 24 24 24 24 24 23 23 23 21 21 21 20 20 20 ++20 20 20 20 20 20 19 19 19 17 17 17 14 14 14 11 11 11 10 10 10 8 8 8 ++8 8 8 10 10 10 11 11 11 10 10 10 8 8 8 8 8 8 10 10 10 13 13 13 ++19 19 19 19 19 19 11 11 11 0 0 0 3 3 3 14 14 14 14 14 14 4 4 4 ++6 6 6 6 6 6 14 14 14 21 21 21 14 14 14 0 0 0 0 0 0 11 11 11 ++11 11 11 4 4 4 0 0 0 4 4 4 13 13 13 16 16 16 14 14 14 10 10 10 ++0 0 0 0 0 0 8 8 8 13 13 13 14 14 14 14 14 14 16 16 16 16 16 16 ++6 6 6 14 14 14 0 0 0 6 6 6 10 10 10 4 4 4 13 13 13 0 0 0 ++10 10 10 10 10 10 14 14 14 3 3 3 8 8 8 0 0 0 4 4 4 0 0 0 ++0 0 0 20 20 20 0 0 0 11 11 11 14 14 14 16 16 16 10 10 10 0 0 0 ++0 0 0 8 8 8 4 4 4 0 0 0 20 20 20 20 20 20 27 27 27 25 25 25 ++21 21 21 0 0 0 27 27 27 19 19 19 29 29 29 42 42 42 112 112 113 149 151 153 ++36 36 36 13 13 13 17 17 17 180 183 185 180 183 185 101 101 101 0 0 0 19 19 19 ++0 0 0 4 4 4 0 0 0 17 17 17 23 23 23 0 0 0 24 24 24 21 21 21 ++3 3 3 19 19 19 166 167 167 200 220 210 88 88 88 8 8 8 16 16 16 0 0 0 ++6 6 6 10 10 10 3 3 3 0 0 0 17 17 17 0 0 0 13 13 13 27 27 27 ++28 28 28 17 17 17 21 21 21 14 14 14 11 11 11 29 29 29 27 27 27 0 0 0 ++21 21 21 17 17 17 14 14 14 17 17 17 21 21 21 20 20 20 13 13 13 3 3 3 ++ ++0 0 0 8 8 8 14 14 14 11 11 11 3 3 3 0 0 0 4 4 4 14 14 14 ++10 10 10 3 3 3 0 0 0 6 6 6 14 14 14 14 14 14 6 6 6 0 0 0 ++6 6 6 13 13 13 14 14 14 10 10 10 0 0 0 0 0 0 10 10 10 17 17 17 ++8 8 8 4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 8 8 8 11 11 11 ++16 16 16 10 10 10 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 0 0 0 ++11 11 11 8 8 8 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++10 10 10 11 11 11 11 11 11 8 8 8 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 6 6 6 13 13 13 14 14 14 11 11 11 4 4 4 0 0 0 0 0 0 ++3 3 3 0 0 0 6 6 6 17 17 17 17 17 17 8 8 8 3 3 3 6 6 6 ++3 3 3 0 0 0 0 0 0 6 6 6 16 16 16 19 19 19 13 13 13 4 4 4 ++0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 8 8 8 10 10 10 11 11 11 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 10 10 10 11 11 11 ++10 10 10 3 3 3 0 0 0 4 4 4 16 16 16 23 23 23 23 23 23 21 21 21 ++21 21 21 21 21 21 21 21 21 21 21 21 20 20 20 16 16 16 11 11 11 6 6 6 ++19 19 19 10 10 10 0 0 0 0 0 0 8 8 8 14 14 14 13 13 13 8 8 8 ++0 0 0 10 10 10 17 17 17 17 17 17 10 10 10 4 4 4 8 8 8 14 14 14 ++19 19 19 10 10 10 0 0 0 8 8 8 17 17 17 19 19 19 13 13 13 4 4 4 ++0 0 0 13 13 13 19 19 19 14 14 14 4 4 4 3 3 3 11 11 11 20 20 20 ++16 16 16 14 14 14 11 11 11 10 10 10 10 10 10 10 10 10 10 10 10 8 8 8 ++11 11 11 14 14 14 19 19 19 24 24 24 28 28 28 28 28 28 25 25 25 24 24 24 ++17 17 17 16 16 16 16 16 16 14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 ++20 20 20 21 21 21 24 24 24 25 25 25 27 27 27 27 27 27 25 25 25 24 24 24 ++16 16 16 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 17 17 17 19 19 19 ++20 20 20 24 24 24 29 29 29 28 28 28 21 21 21 16 16 16 19 19 19 24 24 24 ++23 23 23 28 28 28 33 33 33 33 33 33 25 25 25 19 19 19 19 19 19 24 24 24 ++23 23 23 31 31 31 34 34 34 32 32 32 32 32 32 37 37 37 40 40 40 39 39 39 ++39 39 39 42 42 42 40 40 40 36 36 36 31 31 31 28 28 28 25 25 25 23 23 23 ++28 28 28 25 25 25 28 28 28 34 34 34 33 33 33 28 28 28 29 29 29 34 34 34 ++36 36 36 33 33 33 37 37 37 40 40 40 37 37 37 27 27 27 25 25 25 33 33 33 ++23 23 23 34 34 34 40 40 40 38 38 38 32 32 32 31 31 31 31 31 31 31 31 31 ++32 32 32 36 36 36 36 36 36 33 33 33 33 33 33 36 36 36 36 36 36 33 33 33 ++33 33 33 33 33 33 34 34 34 36 36 36 37 37 37 36 36 36 32 32 32 29 29 29 ++33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 27 27 27 24 24 24 ++21 21 21 23 23 23 27 27 27 31 31 31 33 33 33 34 34 34 34 34 34 33 33 33 ++32 32 32 34 34 34 36 36 36 37 37 37 37 37 37 36 36 36 34 34 34 33 33 33 ++31 31 31 32 32 32 32 32 32 29 29 29 27 27 27 24 24 24 24 24 24 25 25 25 ++34 34 34 34 34 34 34 34 34 34 34 34 36 36 36 34 34 34 34 34 34 33 33 33 ++34 34 34 32 32 32 29 29 29 28 28 28 29 29 29 32 32 32 33 33 33 34 34 34 ++31 31 31 28 28 28 27 27 27 27 27 27 28 28 28 28 28 28 28 28 28 27 27 27 ++29 29 29 27 27 27 21 21 21 17 17 17 16 16 16 16 16 16 14 14 14 14 14 14 ++16 16 16 16 16 16 14 14 14 14 14 14 14 14 14 16 16 16 20 20 20 23 23 23 ++20 20 20 19 19 19 16 16 16 14 14 14 13 13 13 11 11 11 11 11 11 11 11 11 ++11 11 11 11 11 11 14 14 14 17 17 17 21 21 21 24 24 24 25 25 25 25 25 25 ++20 20 20 21 21 21 23 23 23 23 23 23 23 23 23 20 20 20 17 17 17 14 14 14 ++17 17 17 19 19 19 19 19 19 17 17 17 16 16 16 16 16 16 16 16 16 17 17 17 ++17 17 17 21 21 21 19 19 19 13 13 13 16 16 16 23 23 23 19 19 19 8 8 8 ++11 11 11 10 10 10 16 16 16 21 21 21 14 14 14 0 0 0 0 0 0 10 10 10 ++17 17 17 17 17 17 17 17 17 17 17 17 19 19 19 20 20 20 20 20 20 21 21 21 ++20 20 20 17 17 17 17 17 17 19 19 19 21 21 21 21 21 21 19 19 19 14 14 14 ++10 10 10 3 3 3 4 4 4 10 10 10 13 13 13 0 0 0 0 0 0 20 20 20 ++10 10 10 3 3 3 24 24 24 0 0 0 0 0 0 4 4 4 14 14 14 13 13 13 ++6 6 6 6 6 6 0 0 0 19 19 19 3 3 3 10 10 10 17 17 17 0 0 0 ++19 19 19 8 8 8 27 27 27 28 28 28 16 16 16 13 13 13 28 28 28 14 14 14 ++24 24 24 21 21 21 31 31 31 21 21 21 24 24 24 73 73 73 200 220 210 187 210 182 ++10 10 10 40 40 40 0 0 0 36 36 36 57 57 57 6 6 6 0 0 0 0 0 0 ++14 14 14 0 0 0 10 10 10 21 21 21 11 11 11 11 11 11 0 0 0 24 24 24 ++28 28 28 0 0 0 49 49 49 49 49 49 19 19 19 0 0 0 6 6 6 14 14 14 ++0 0 0 14 14 14 10 10 10 16 16 16 0 0 0 10 10 10 8 8 8 0 0 0 ++23 23 23 20 20 20 19 19 19 6 6 6 29 29 29 4 4 4 32 32 32 16 16 16 ++19 19 19 16 16 16 14 14 14 17 17 17 21 21 21 23 23 23 19 19 19 13 13 13 ++ ++0 0 0 0 0 0 10 10 10 16 16 16 8 8 8 0 0 0 0 0 0 10 10 10 ++14 14 14 13 13 13 3 3 3 0 0 0 4 4 4 19 19 19 16 16 16 0 0 0 ++0 0 0 3 3 3 11 11 11 17 17 17 8 8 8 0 0 0 0 0 0 16 16 16 ++16 16 16 10 10 10 3 3 3 0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 ++14 14 14 14 14 14 8 8 8 0 0 0 0 0 0 6 6 6 4 4 4 0 0 0 ++0 0 0 8 8 8 11 11 11 8 8 8 0 0 0 0 0 0 0 0 0 4 4 4 ++0 0 0 6 6 6 11 11 11 11 11 11 6 6 6 0 0 0 0 0 0 0 0 0 ++0 0 0 4 4 4 13 13 13 14 14 14 10 10 10 4 4 4 0 0 0 0 0 0 ++3 3 3 0 0 0 6 6 6 16 16 16 17 17 17 8 8 8 0 0 0 4 4 4 ++3 3 3 0 0 0 0 0 0 4 4 4 17 17 17 20 20 20 13 13 13 3 3 3 ++3 3 3 0 0 0 0 0 0 4 4 4 11 11 11 13 13 13 6 6 6 0 0 0 ++6 6 6 0 0 0 0 0 0 0 0 0 6 6 6 11 11 11 10 10 10 6 6 6 ++4 4 4 0 0 0 0 0 0 8 8 8 17 17 17 23 23 23 23 23 23 20 20 20 ++16 16 16 19 19 19 21 21 21 19 19 19 14 14 14 11 11 11 13 13 13 14 14 14 ++17 17 17 0 0 0 0 0 0 6 6 6 16 16 16 10 10 10 3 3 3 3 3 3 ++3 3 3 17 17 17 20 20 20 8 8 8 0 0 0 8 8 8 17 17 17 19 19 19 ++11 11 11 3 3 3 3 3 3 14 14 14 19 19 19 13 13 13 4 4 4 3 3 3 ++4 4 4 14 14 14 16 16 16 6 6 6 3 3 3 10 10 10 14 14 14 14 14 14 ++8 8 8 10 10 10 10 10 10 10 10 10 8 8 8 8 8 8 8 8 8 10 10 10 ++16 16 16 20 20 20 24 24 24 25 25 25 24 24 24 20 20 20 16 16 16 14 14 14 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++11 11 11 11 11 11 13 13 13 14 14 14 19 19 19 24 24 24 28 28 28 31 31 31 ++19 19 19 17 17 17 14 14 14 13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 ++14 14 14 14 14 14 21 21 21 28 28 28 25 25 25 14 14 14 13 13 13 20 20 20 ++16 16 16 19 19 19 27 27 27 34 34 34 31 31 31 20 20 20 16 16 16 20 20 20 ++19 19 19 21 21 21 25 25 25 31 31 31 33 33 33 34 34 34 36 36 36 36 36 36 ++38 38 38 34 34 34 34 34 34 37 37 37 34 34 34 28 28 28 21 21 21 19 19 19 ++24 24 24 25 25 25 29 29 29 33 33 33 34 34 34 32 32 32 28 28 28 24 24 24 ++37 37 37 25 25 25 27 27 27 39 39 39 40 40 40 28 28 28 23 23 23 29 29 29 ++20 20 20 27 27 27 33 33 33 33 33 33 31 31 31 31 31 31 31 31 31 29 29 29 ++27 27 27 28 28 28 28 28 28 29 29 29 32 32 32 33 33 33 29 29 29 23 23 23 ++24 24 24 27 27 27 29 29 29 34 34 34 38 38 38 37 37 37 32 32 32 28 28 28 ++32 32 32 31 31 31 29 29 29 29 29 29 29 29 29 28 28 28 24 24 24 20 20 20 ++21 21 21 21 21 21 23 23 23 28 28 28 33 33 33 34 34 34 29 29 29 24 24 24 ++27 27 27 31 31 31 36 36 36 38 38 38 37 37 37 34 34 34 33 33 33 33 33 33 ++33 33 33 33 33 33 31 31 31 27 27 27 23 23 23 20 20 20 20 20 20 21 21 21 ++36 36 36 33 33 33 31 31 31 31 31 31 33 33 33 33 33 33 32 32 32 29 29 29 ++25 25 25 24 24 24 21 21 21 21 21 21 24 24 24 27 27 27 27 27 27 27 27 27 ++21 21 21 19 19 19 14 14 14 14 14 14 19 19 19 23 23 23 24 24 24 25 25 25 ++28 28 28 21 21 21 14 14 14 11 11 11 14 14 14 16 16 16 14 14 14 11 11 11 ++14 14 14 13 13 13 10 10 10 11 11 11 14 14 14 19 19 19 23 23 23 25 25 25 ++19 19 19 19 19 19 16 16 16 14 14 14 11 11 11 11 11 11 10 10 10 10 10 10 ++11 11 11 10 10 10 8 8 8 11 11 11 17 17 17 20 20 20 21 21 21 20 20 20 ++16 16 16 19 19 19 21 21 21 24 24 24 24 24 24 23 23 23 20 20 20 17 17 17 ++21 21 21 21 21 21 20 20 20 20 20 20 20 20 20 20 20 20 19 19 19 17 17 17 ++17 17 17 20 20 20 20 20 20 17 17 17 20 20 20 24 24 24 21 21 21 11 11 11 ++14 14 14 11 11 11 14 14 14 19 19 19 14 14 14 3 3 3 0 0 0 6 6 6 ++13 13 13 17 17 17 20 20 20 17 17 17 13 13 13 11 11 11 16 16 16 21 21 21 ++21 21 21 16 16 16 11 11 11 13 13 13 17 17 17 17 17 17 11 11 11 4 4 4 ++10 10 10 0 0 0 58 58 58 137 138 139 180 183 185 166 167 167 144 145 144 180 183 185 ++109 110 110 23 23 23 137 138 139 187 210 182 112 112 113 17 17 17 96 97 98 200 220 210 ++149 149 149 0 0 0 78 78 78 187 210 182 152 153 154 129 129 130 180 183 185 180 183 185 ++69 69 69 112 112 113 180 183 185 180 183 185 112 112 113 27 27 27 13 13 13 29 29 29 ++142 143 144 180 183 185 180 183 185 133 133 133 16 16 16 180 183 185 200 220 210 200 220 210 ++200 220 210 112 112 113 14 14 14 187 210 182 187 210 182 70 70 70 56 56 56 180 183 185 ++180 183 185 81 81 81 10 10 10 180 183 185 200 220 210 83 83 83 14 14 14 21 21 21 ++16 16 16 19 19 19 180 183 185 180 183 185 66 66 66 20 20 20 144 145 144 180 183 185 ++105 105 105 163 163 163 180 183 185 144 145 144 34 34 34 0 0 0 0 0 0 29 29 29 ++117 117 117 180 183 185 180 183 185 169 175 167 8 8 8 0 0 0 17 17 17 21 21 21 ++13 13 13 11 11 11 11 11 11 13 13 13 16 16 16 17 17 17 17 17 17 16 16 16 ++ ++6 6 6 0 0 0 0 0 0 6 6 6 11 11 11 8 8 8 0 0 0 0 0 0 ++6 6 6 14 14 14 13 13 13 0 0 0 0 0 0 10 10 10 14 14 14 10 10 10 ++8 8 8 0 0 0 0 0 0 13 13 13 14 14 14 3 3 3 0 0 0 6 6 6 ++13 13 13 11 11 11 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 13 13 13 16 16 16 8 8 8 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 4 4 4 11 11 11 10 10 10 3 3 3 0 0 0 0 0 0 3 3 3 ++3 3 3 0 0 0 3 3 3 8 8 8 11 11 11 11 11 11 4 4 4 0 0 0 ++4 4 4 3 3 3 3 3 3 6 6 6 10 10 10 10 10 10 4 4 4 0 0 0 ++0 0 0 8 8 8 11 11 11 6 6 6 6 6 6 11 11 11 8 8 8 0 0 0 ++0 0 0 3 3 3 8 8 8 10 10 10 8 8 8 6 6 6 8 8 8 10 10 10 ++4 4 4 3 3 3 3 3 3 6 6 6 11 11 11 11 11 11 3 3 3 0 0 0 ++3 3 3 0 0 0 0 0 0 3 3 3 10 10 10 13 13 13 8 8 8 3 3 3 ++0 0 0 0 0 0 4 4 4 11 11 11 17 17 17 21 21 21 20 20 20 19 19 19 ++14 14 14 16 16 16 17 17 17 17 17 17 14 14 14 11 11 11 11 11 11 11 11 11 ++3 3 3 0 0 0 4 4 4 17 17 17 16 16 16 0 0 0 0 0 0 4 4 4 ++13 13 13 16 16 16 10 10 10 0 0 0 4 4 4 17 17 17 19 19 19 10 10 10 ++0 0 0 4 4 4 13 13 13 17 17 17 11 11 11 0 0 0 3 3 3 11 11 11 ++13 13 13 10 10 10 4 4 4 3 3 3 10 10 10 16 16 16 13 13 13 4 4 4 ++4 4 4 6 6 6 10 10 10 8 8 8 8 8 8 8 8 8 11 11 11 14 14 14 ++19 19 19 21 21 21 24 24 24 21 21 21 17 17 17 13 13 13 10 10 10 8 8 8 ++13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 16 16 16 ++13 13 13 11 11 11 10 10 10 10 10 10 13 13 13 19 19 19 23 23 23 27 27 27 ++23 23 23 19 19 19 14 14 14 11 11 11 13 13 13 14 14 14 14 14 14 13 13 13 ++16 16 16 10 10 10 11 11 11 21 21 21 27 27 27 23 23 23 16 16 16 11 11 11 ++16 16 16 13 13 13 16 16 16 25 25 25 31 31 31 27 27 27 19 19 19 14 14 14 ++14 14 14 16 16 16 19 19 19 24 24 24 29 29 29 33 33 33 33 33 33 32 32 32 ++33 33 33 32 32 32 29 29 29 32 32 32 33 33 33 32 32 32 24 24 24 17 17 17 ++23 23 23 24 24 24 25 25 25 25 25 25 31 31 31 34 34 34 28 28 28 19 19 19 ++28 28 28 29 29 29 29 29 29 28 28 28 31 31 31 32 32 32 28 28 28 23 23 23 ++24 24 24 25 25 25 28 28 28 28 28 28 28 28 28 29 29 29 29 29 29 28 28 28 ++27 27 27 24 24 24 21 21 21 23 23 23 28 28 28 31 31 31 27 27 27 21 21 21 ++17 17 17 19 19 19 24 24 24 31 31 31 37 37 37 38 38 38 36 36 36 32 32 32 ++31 31 31 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 25 25 25 23 23 23 ++24 24 24 24 24 24 25 25 25 28 28 28 31 31 31 29 29 29 25 25 25 21 21 21 ++20 20 20 25 25 25 32 32 32 33 33 33 31 31 31 28 28 28 28 28 28 31 31 31 ++33 33 33 32 32 32 28 28 28 23 23 23 19 19 19 17 17 17 19 19 19 21 21 21 ++27 27 27 23 23 23 17 17 17 17 17 17 20 20 20 24 24 24 23 23 23 21 21 21 ++19 19 19 17 17 17 20 20 20 23 23 23 25 25 25 24 24 24 20 20 20 16 16 16 ++14 14 14 10 10 10 6 6 6 6 6 6 11 11 11 17 17 17 19 19 19 19 19 19 ++17 17 17 13 13 13 10 10 10 8 8 8 11 11 11 14 14 14 14 14 14 13 13 13 ++13 13 13 10 10 10 8 8 8 11 11 11 16 16 16 20 20 20 23 23 23 23 23 23 ++19 19 19 19 19 19 17 17 17 16 16 16 13 13 13 11 11 11 11 11 11 10 10 10 ++11 11 11 8 8 8 6 6 6 8 8 8 14 14 14 16 16 16 14 14 14 11 11 11 ++10 10 10 11 11 11 14 14 14 16 16 16 16 16 16 16 16 16 14 14 14 13 13 13 ++16 16 16 14 14 14 13 13 13 14 14 14 17 17 17 17 17 17 16 16 16 13 13 13 ++16 16 16 16 16 16 11 11 11 4 4 4 8 8 8 16 16 16 19 19 19 14 14 14 ++13 13 13 8 8 8 10 10 10 13 13 13 13 13 13 4 4 4 3 3 3 6 6 6 ++6 6 6 11 11 11 13 13 13 10 10 10 4 4 4 3 3 3 6 6 6 11 11 11 ++6 6 6 4 4 4 4 4 4 6 6 6 10 10 10 10 10 10 4 4 4 0 0 0 ++0 0 0 23 23 23 157 157 157 200 220 210 149 149 149 134 134 134 180 183 185 200 220 210 ++105 105 105 0 0 0 152 153 154 200 220 210 88 88 88 0 0 0 105 105 105 187 210 182 ++157 157 157 6 6 6 65 65 65 187 210 182 200 220 210 157 157 157 180 183 185 187 210 182 ++180 183 185 180 183 185 166 167 167 180 183 185 180 183 185 65 65 65 4 4 4 166 165 167 ++187 210 182 145 146 147 121 121 119 127 127 127 16 16 16 144 145 144 180 183 185 187 210 182 ++115 116 115 62 62 62 14 14 14 180 183 185 200 220 210 60 60 60 29 29 29 105 105 105 ++200 220 210 166 167 167 92 92 92 187 210 182 144 145 144 21 21 21 19 19 19 4 4 4 ++21 21 21 3 3 3 187 210 182 200 220 210 66 66 66 0 0 0 155 156 156 200 220 210 ++187 210 182 163 163 163 180 183 185 200 220 210 129 129 130 10 10 10 23 23 23 157 157 157 ++187 210 182 169 175 167 121 121 119 101 101 101 13 13 13 8 8 8 0 0 0 17 17 17 ++8 8 8 8 8 8 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 10 10 10 ++ ++13 13 13 6 6 6 0 0 0 0 0 0 6 6 6 16 16 16 10 10 10 0 0 0 ++0 0 0 8 8 8 13 13 13 8 8 8 0 0 0 0 0 0 4 4 4 11 11 11 ++11 11 11 4 4 4 0 0 0 4 4 4 13 13 13 13 13 13 6 6 6 0 0 0 ++4 4 4 8 8 8 11 11 11 8 8 8 3 3 3 0 0 0 0 0 0 3 3 3 ++0 0 0 4 4 4 11 11 11 14 14 14 8 8 8 0 0 0 0 0 0 8 8 8 ++0 0 0 0 0 0 4 4 4 8 8 8 8 8 8 4 4 4 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 4 4 4 10 10 10 11 11 11 6 6 6 3 3 3 ++8 8 8 3 3 3 0 0 0 0 0 0 4 4 4 8 8 8 6 6 6 3 3 3 ++3 3 3 10 10 10 8 8 8 0 0 0 0 0 0 8 8 8 10 10 10 3 3 3 ++0 0 0 10 10 10 14 14 14 8 8 8 0 0 0 0 0 0 3 3 3 13 13 13 ++4 4 4 6 6 6 8 8 8 8 8 8 6 6 6 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 6 6 6 10 10 10 10 10 10 8 8 8 4 4 4 0 0 0 ++0 0 0 0 0 0 6 6 6 13 13 13 17 17 17 19 19 19 19 19 19 17 17 17 ++16 16 16 14 14 14 14 14 14 14 14 14 16 16 16 13 13 13 8 8 8 3 3 3 ++0 0 0 4 4 4 14 14 14 14 14 14 8 8 8 0 0 0 3 3 3 10 10 10 ++13 13 13 6 6 6 0 0 0 0 0 0 13 13 13 17 17 17 11 11 11 0 0 0 ++3 3 3 13 13 13 17 17 17 10 10 10 3 3 3 4 4 4 10 10 10 13 13 13 ++14 14 14 4 4 4 0 0 0 8 8 8 14 14 14 13 13 13 6 6 6 3 3 3 ++6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 10 10 10 16 16 16 20 20 20 ++20 20 20 20 20 20 19 19 19 16 16 16 10 10 10 8 8 8 8 8 8 10 10 10 ++8 8 8 8 8 8 8 8 8 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 ++13 13 13 13 13 13 11 11 11 11 11 11 11 11 11 14 14 14 17 17 17 19 19 19 ++24 24 24 20 20 20 16 16 16 13 13 13 14 14 14 14 14 14 14 14 14 13 13 13 ++13 13 13 13 13 13 11 11 11 13 13 13 21 21 21 25 25 25 20 20 20 11 11 11 ++16 16 16 14 14 14 11 11 11 13 13 13 20 20 20 27 27 27 23 23 23 14 14 14 ++11 11 11 16 16 16 16 16 16 14 14 14 20 20 20 31 31 31 32 32 32 27 27 27 ++28 28 28 31 31 31 28 28 28 23 23 23 27 27 27 34 34 34 31 31 31 20 20 20 ++20 20 20 21 21 21 19 19 19 16 16 16 23 23 23 31 31 31 29 29 29 23 23 23 ++20 20 20 29 29 29 31 31 31 21 21 21 20 20 20 28 28 28 29 29 29 23 23 23 ++28 28 28 25 25 25 23 23 23 23 23 23 25 25 25 27 27 27 28 28 28 29 29 29 ++24 24 24 19 19 19 14 14 14 16 16 16 23 23 23 28 28 28 31 31 31 31 31 31 ++19 19 19 20 20 20 23 23 23 27 27 27 32 32 32 34 34 34 34 34 34 33 33 33 ++29 29 29 27 27 27 25 25 25 27 27 27 28 28 28 29 29 29 29 29 29 28 28 28 ++17 17 17 20 20 20 23 23 23 23 23 23 21 21 21 23 23 23 25 25 25 28 28 28 ++20 20 20 24 24 24 28 28 28 28 28 28 25 25 25 24 24 24 27 27 27 29 29 29 ++29 29 29 28 28 28 24 24 24 20 20 20 16 16 16 16 16 16 19 19 19 21 21 21 ++23 23 23 16 16 16 10 10 10 8 8 8 13 13 13 19 19 19 20 20 20 20 20 20 ++23 23 23 24 24 24 24 24 24 27 27 27 27 27 27 25 25 25 20 20 20 16 16 16 ++20 20 20 17 17 17 16 16 16 17 17 17 19 19 19 21 21 21 21 21 21 21 21 21 ++10 10 10 13 13 13 14 14 14 14 14 14 13 13 13 11 11 11 13 13 13 16 16 16 ++11 11 11 11 11 11 11 11 11 13 13 13 17 17 17 19 19 19 19 19 19 16 16 16 ++19 19 19 19 19 19 17 17 17 17 17 17 16 16 16 14 14 14 13 13 13 13 13 13 ++4 4 4 3 3 3 3 3 3 8 8 8 14 14 14 17 17 17 14 14 14 10 10 10 ++8 8 8 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++6 6 6 6 6 6 6 6 6 10 10 10 13 13 13 14 14 14 13 13 13 10 10 10 ++11 11 11 10 10 10 3 3 3 0 0 0 0 0 0 8 8 8 13 13 13 13 13 13 ++6 6 6 3 3 3 3 3 3 6 6 6 8 8 8 6 6 6 4 4 4 6 6 6 ++13 13 13 11 11 11 10 10 10 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++0 0 0 4 4 4 11 11 11 13 13 13 10 10 10 6 6 6 6 6 6 8 8 8 ++11 11 11 78 78 78 187 210 182 169 175 167 10 10 10 13 13 13 166 167 167 200 220 210 ++101 101 101 6 6 6 152 153 154 187 210 182 105 105 105 14 14 14 103 103 102 187 210 182 ++149 149 149 25 25 25 70 70 70 200 220 210 187 210 182 32 32 32 33 33 33 187 210 182 ++187 210 182 78 78 78 24 24 24 161 161 162 200 220 210 90 90 90 29 29 29 180 183 185 ++187 210 182 133 133 133 48 48 48 11 11 11 19 19 19 70 70 70 180 183 185 200 220 210 ++6 6 6 17 17 17 14 14 14 180 183 185 187 210 182 74 74 74 14 14 14 14 14 14 ++149 151 153 187 210 182 200 220 210 180 183 185 33 33 33 0 0 0 27 27 27 16 16 16 ++0 0 0 14 14 14 200 220 210 180 183 185 71 71 71 6 6 6 149 149 149 180 183 185 ++125 122 126 3 3 3 69 69 69 200 220 210 187 210 182 13 13 13 67 67 67 200 220 210 ++180 183 185 19 19 19 0 0 0 11 11 11 0 0 0 14 14 14 17 17 17 0 0 0 ++6 6 6 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 8 8 8 11 11 11 ++ ++10 10 10 11 11 11 6 6 6 0 0 0 0 0 0 10 10 10 13 13 13 6 6 6 ++3 3 3 0 0 0 3 3 3 10 10 10 10 10 10 3 3 3 0 0 0 3 3 3 ++6 6 6 10 10 10 10 10 10 4 4 4 4 4 4 10 10 10 10 10 10 4 4 4 ++0 0 0 4 4 4 11 11 11 11 11 11 4 4 4 0 0 0 0 0 0 3 3 3 ++3 3 3 0 0 0 0 0 0 11 11 11 16 16 16 8 8 8 3 3 3 4 4 4 ++3 3 3 0 0 0 0 0 0 3 3 3 8 8 8 8 8 8 4 4 4 0 0 0 ++0 0 0 0 0 0 4 4 4 4 4 4 0 0 0 3 3 3 8 8 8 11 11 11 ++3 3 3 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 4 4 4 11 11 11 ++13 13 13 4 4 4 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 11 11 11 ++11 11 11 11 11 11 8 8 8 3 3 3 0 0 0 0 0 0 0 0 0 6 6 6 ++6 6 6 10 10 10 10 10 10 6 6 6 0 0 0 0 0 0 0 0 0 4 4 4 ++0 0 0 3 3 3 10 10 10 11 11 11 8 8 8 3 3 3 0 0 0 3 3 3 ++0 0 0 3 3 3 10 10 10 14 14 14 16 16 16 16 16 16 16 16 16 16 16 16 ++16 16 16 13 13 13 11 11 11 13 13 13 14 14 14 11 11 11 4 4 4 0 0 0 ++10 10 10 11 11 11 8 8 8 0 0 0 0 0 0 8 8 8 11 11 11 10 10 10 ++4 4 4 0 0 0 3 3 3 10 10 10 11 11 11 6 6 6 3 3 3 4 4 4 ++11 11 11 14 14 14 10 10 10 0 0 0 3 3 3 13 13 13 14 14 14 8 8 8 ++6 6 6 3 3 3 6 6 6 13 13 13 11 11 11 0 0 0 0 0 0 8 8 8 ++10 10 10 8 8 8 8 8 8 6 6 6 8 8 8 13 13 13 19 19 19 23 23 23 ++17 17 17 16 16 16 13 13 13 8 8 8 6 6 6 6 6 6 8 8 8 11 11 11 ++8 8 8 8 8 8 8 8 8 8 8 8 10 10 10 10 10 10 11 11 11 11 11 11 ++10 10 10 10 10 10 11 11 11 11 11 11 13 13 13 13 13 13 14 14 14 14 14 14 ++21 21 21 19 19 19 16 16 16 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 ++8 8 8 16 16 16 17 17 17 11 11 11 11 11 11 19 19 19 21 21 21 17 17 17 ++11 11 11 17 17 17 16 16 16 8 8 8 8 8 8 17 17 17 23 23 23 20 20 20 ++11 11 11 16 16 16 14 14 14 8 8 8 14 14 14 25 25 25 29 29 29 23 23 23 ++25 25 25 29 29 29 27 27 27 17 17 17 19 19 19 31 31 31 32 32 32 24 24 24 ++17 17 17 19 19 19 16 16 16 11 11 11 14 14 14 24 24 24 27 27 27 25 25 25 ++21 21 21 24 24 24 24 24 24 21 21 21 19 19 19 19 19 19 21 21 21 25 25 25 ++27 27 27 21 21 21 19 19 19 20 20 20 23 23 23 24 24 24 27 27 27 29 29 29 ++28 28 28 23 23 23 17 17 17 16 16 16 17 17 17 20 20 20 25 25 25 31 31 31 ++25 25 25 25 25 25 25 25 25 24 24 24 24 24 24 24 24 24 24 24 24 25 25 25 ++27 27 27 24 24 24 23 23 23 23 23 23 25 25 25 28 28 28 29 29 29 29 29 29 ++17 17 17 19 19 19 20 20 20 16 16 16 11 11 11 11 11 11 17 17 17 23 23 23 ++23 23 23 25 25 25 27 27 27 25 25 25 23 23 23 24 24 24 27 27 27 29 29 29 ++24 24 24 24 24 24 21 21 21 17 17 17 14 14 14 14 14 14 17 17 17 20 20 20 ++25 25 25 20 20 20 16 16 16 14 14 14 17 17 17 21 21 21 23 23 23 23 23 23 ++25 25 25 24 24 24 21 21 21 19 19 19 17 17 17 17 17 17 17 17 17 19 19 19 ++21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 20 20 20 20 20 20 20 20 20 ++14 14 14 19 19 19 23 23 23 21 21 21 16 16 16 11 11 11 11 11 11 14 14 14 ++11 11 11 11 11 11 13 13 13 14 14 14 16 16 16 14 14 14 13 13 13 10 10 10 ++16 16 16 16 16 16 16 16 16 17 17 17 16 16 16 16 16 16 14 14 14 14 14 14 ++10 10 10 10 10 10 10 10 10 13 13 13 14 14 14 14 14 14 8 8 8 3 3 3 ++10 10 10 8 8 8 6 6 6 4 4 4 3 3 3 4 4 4 6 6 6 6 6 6 ++4 4 4 4 4 4 6 6 6 10 10 10 13 13 13 13 13 13 11 11 11 10 10 10 ++4 4 4 6 6 6 6 6 6 4 4 4 6 6 6 8 8 8 10 10 10 8 8 8 ++0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 6 6 6 8 8 8 ++13 13 13 10 10 10 4 4 4 4 4 4 8 8 8 10 10 10 8 8 8 4 4 4 ++0 0 0 10 10 10 14 14 14 14 14 14 6 6 6 0 0 0 3 3 3 8 8 8 ++0 0 0 105 105 105 187 210 182 152 153 154 11 11 11 0 0 0 147 147 148 200 220 210 ++105 104 105 6 6 6 145 146 147 180 183 185 109 110 110 6 6 6 105 105 105 180 183 185 ++157 157 157 0 0 0 62 62 62 200 220 210 180 183 185 14 14 14 24 24 24 187 210 182 ++200 220 210 72 72 72 10 10 10 147 147 148 187 210 182 109 110 110 4 4 4 93 93 93 ++180 183 185 180 183 185 187 210 182 117 117 117 0 0 0 78 78 78 200 220 210 180 183 185 ++10 10 10 19 19 19 0 0 0 200 220 210 180 183 185 78 78 78 0 0 0 13 13 13 ++82 82 82 187 210 182 180 183 185 112 112 113 4 4 4 33 33 33 0 0 0 10 10 10 ++16 16 16 4 4 4 200 220 210 200 220 210 63 63 63 0 0 0 157 157 157 180 183 185 ++99 99 99 10 10 10 69 69 69 200 220 210 187 210 182 0 0 0 112 112 113 187 210 182 ++149 151 153 4 4 4 19 19 19 19 19 19 19 19 19 0 0 0 11 11 11 10 10 10 ++6 6 6 6 6 6 8 8 8 8 8 8 10 10 10 13 13 13 16 16 16 17 17 17 ++ ++3 3 3 8 8 8 11 11 11 6 6 6 0 0 0 0 0 0 6 6 6 13 13 13 ++8 8 8 0 0 0 0 0 0 4 4 4 11 11 11 8 8 8 3 3 3 0 0 0 ++0 0 0 10 10 10 13 13 13 6 6 6 0 0 0 0 0 0 8 8 8 10 10 10 ++4 4 4 4 4 4 4 4 4 6 6 6 8 8 8 8 8 8 3 3 3 0 0 0 ++3 3 3 0 0 0 0 0 0 4 4 4 11 11 11 11 11 11 6 6 6 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 6 6 6 4 4 4 ++0 0 0 0 0 0 4 4 4 3 3 3 0 0 0 0 0 0 8 8 8 13 13 13 ++3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 11 11 11 ++13 13 13 3 3 3 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 10 10 10 ++13 13 13 10 10 10 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++10 10 10 10 10 10 8 8 8 4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 ++6 6 6 8 8 8 8 8 8 6 6 6 3 3 3 0 0 0 0 0 0 3 3 3 ++0 0 0 6 6 6 11 11 11 14 14 14 14 14 14 13 13 13 13 13 13 14 14 14 ++11 11 11 13 13 13 13 13 13 11 11 11 8 8 8 4 4 4 3 3 3 3 3 3 ++14 14 14 10 10 10 0 0 0 0 0 0 0 0 0 11 11 11 11 11 11 4 4 4 ++0 0 0 3 3 3 10 10 10 13 13 13 6 6 6 0 0 0 3 3 3 11 11 11 ++13 13 13 10 10 10 3 3 3 3 3 3 10 10 10 13 13 13 11 11 11 4 4 4 ++3 3 3 6 6 6 11 11 11 10 10 10 3 3 3 0 0 0 3 3 3 8 8 8 ++8 8 8 6 6 6 6 6 6 8 8 8 11 11 11 14 14 14 17 17 17 19 19 19 ++13 13 13 10 10 10 6 6 6 4 4 4 6 6 6 6 6 6 8 8 8 8 8 8 ++10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 ++16 16 16 17 17 17 16 16 16 14 14 14 13 13 13 11 11 11 11 11 11 13 13 13 ++10 10 10 13 13 13 13 13 13 11 11 11 10 10 10 13 13 13 17 17 17 20 20 20 ++14 14 14 16 16 16 14 14 14 10 10 10 8 8 8 11 11 11 17 17 17 20 20 20 ++16 16 16 14 14 14 13 13 13 11 11 11 14 14 14 19 19 19 21 21 21 23 23 23 ++24 24 24 27 27 27 23 23 23 14 14 14 13 13 13 19 19 19 24 24 24 25 25 25 ++13 13 13 16 16 16 16 16 16 13 13 13 13 13 13 16 16 16 20 20 20 23 23 23 ++23 23 23 19 19 19 19 19 19 21 21 21 20 20 20 16 16 16 16 16 16 23 23 23 ++25 25 25 20 20 20 17 17 17 20 20 20 21 21 21 19 19 19 19 19 19 21 21 21 ++29 29 29 27 27 27 24 24 24 21 21 21 16 16 16 11 11 11 14 14 14 23 23 23 ++25 25 25 27 27 27 27 27 27 23 23 23 17 17 17 14 14 14 14 14 14 17 17 17 ++23 23 23 20 20 20 17 17 17 17 17 17 20 20 20 23 23 23 24 24 24 25 25 25 ++21 21 21 20 20 20 16 16 16 13 13 13 10 10 10 11 11 11 14 14 14 16 16 16 ++23 23 23 23 23 23 23 23 23 21 21 21 21 21 21 21 21 21 23 23 23 25 25 25 ++23 23 23 21 21 21 20 20 20 16 16 16 13 13 13 13 13 13 14 14 14 17 17 17 ++23 23 23 23 23 23 21 21 21 20 20 20 20 20 20 19 19 19 17 17 17 17 17 17 ++17 17 17 19 19 19 17 17 17 13 13 13 8 8 8 8 8 8 13 13 13 16 16 16 ++16 16 16 17 17 17 19 19 19 17 17 17 14 14 14 13 13 13 14 14 14 16 16 16 ++17 17 17 19 19 19 19 19 19 17 17 17 14 14 14 13 13 13 11 11 11 11 11 11 ++11 11 11 13 13 13 13 13 13 13 13 13 11 11 11 10 10 10 10 10 10 10 10 10 ++10 10 10 11 11 11 13 13 13 14 14 14 16 16 16 14 14 14 14 14 14 13 13 13 ++17 17 17 16 16 16 16 16 16 14 14 14 13 13 13 10 10 10 6 6 6 4 4 4 ++8 8 8 8 8 8 6 6 6 6 6 6 4 4 4 6 6 6 6 6 6 6 6 6 ++4 4 4 8 8 8 11 11 11 11 11 11 11 11 11 8 8 8 6 6 6 6 6 6 ++0 0 0 4 4 4 8 8 8 10 10 10 10 10 10 8 8 8 6 6 6 4 4 4 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 10 10 10 ++6 6 6 3 3 3 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 ++6 6 6 8 8 8 8 8 8 6 6 6 0 0 0 0 0 0 0 0 0 4 4 4 ++3 3 3 89 89 89 200 220 210 163 163 163 14 14 14 23 23 23 166 167 167 180 183 185 ++109 110 110 6 6 6 147 147 148 200 220 210 115 116 115 0 0 0 125 125 127 200 220 210 ++152 153 154 6 6 6 68 68 68 180 183 185 187 210 182 6 6 6 8 8 8 200 220 210 ++187 210 182 63 63 63 25 25 25 157 157 157 180 183 185 125 125 127 8 8 8 10 10 10 ++6 6 6 92 92 92 200 220 210 187 210 182 75 75 75 51 51 51 180 183 185 200 220 210 ++3 3 3 4 4 4 17 17 17 187 210 182 200 220 210 65 65 65 6 6 6 21 21 21 ++169 175 167 180 183 185 180 183 185 187 210 182 66 66 66 0 0 0 19 19 19 10 10 10 ++13 13 13 10 10 10 180 183 185 187 210 182 75 75 75 6 6 6 147 147 148 200 220 210 ++105 105 105 0 0 0 57 57 57 180 183 185 187 210 182 14 14 14 96 96 96 180 183 185 ++180 183 185 25 25 25 0 0 0 0 0 0 6 6 6 39 39 39 112 112 113 42 42 42 ++10 10 10 10 10 10 10 10 10 10 10 10 13 13 13 14 14 14 16 16 16 17 17 17 ++ ++0 0 0 3 3 3 8 8 8 11 11 11 4 4 4 0 0 0 0 0 0 11 11 11 ++10 10 10 4 4 4 0 0 0 0 0 0 6 6 6 10 10 10 6 6 6 3 3 3 ++0 0 0 6 6 6 8 8 8 6 6 6 0 0 0 0 0 0 3 3 3 10 10 10 ++13 13 13 4 4 4 0 0 0 0 0 0 10 10 10 13 13 13 4 4 4 0 0 0 ++0 0 0 4 4 4 6 6 6 0 0 0 0 0 0 6 6 6 8 8 8 4 4 4 ++0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 3 3 3 6 6 6 10 10 10 ++4 4 4 0 0 0 0 0 0 0 0 0 4 4 4 8 8 8 8 8 8 6 6 6 ++6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 6 4 4 4 ++4 4 4 10 10 10 6 6 6 0 0 0 0 0 0 4 4 4 6 6 6 0 0 0 ++8 8 8 6 6 6 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 ++11 11 11 8 8 8 4 4 4 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++14 14 14 10 10 10 4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 8 8 8 13 13 13 14 14 14 13 13 13 11 11 11 11 11 11 14 14 14 ++8 8 8 13 13 13 14 14 14 10 10 10 0 0 0 0 0 0 4 4 4 11 11 11 ++8 8 8 3 3 3 0 0 0 3 3 3 6 6 6 8 8 8 4 4 4 0 0 0 ++0 0 0 8 8 8 11 11 11 8 8 8 0 0 0 0 0 0 6 6 6 14 14 14 ++8 8 8 3 3 3 4 4 4 11 11 11 13 13 13 4 4 4 3 3 3 8 8 8 ++6 6 6 11 11 11 8 8 8 0 0 0 0 0 0 6 6 6 6 6 6 3 3 3 ++6 6 6 4 4 4 4 4 4 8 8 8 13 13 13 16 16 16 16 16 16 14 14 14 ++10 10 10 6 6 6 4 4 4 4 4 4 6 6 6 8 8 8 6 6 6 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++10 10 10 10 10 10 8 8 8 8 8 8 6 6 6 6 6 6 6 6 6 6 6 6 ++11 11 11 14 14 14 16 16 16 14 14 14 11 11 11 10 10 10 10 10 10 11 11 11 ++16 16 16 6 6 6 0 0 0 10 10 10 14 14 14 13 13 13 13 13 13 16 16 16 ++20 20 20 11 11 11 6 6 6 13 13 13 16 16 16 13 13 13 13 13 13 16 16 16 ++20 20 20 13 13 13 11 11 11 16 16 16 17 17 17 13 13 13 16 16 16 23 23 23 ++24 24 24 23 23 23 20 20 20 16 16 16 10 10 10 8 8 8 16 16 16 24 24 24 ++10 10 10 13 13 13 17 17 17 17 17 17 13 13 13 10 10 10 14 14 14 19 19 19 ++20 20 20 20 20 20 19 19 19 19 19 19 20 20 20 20 20 20 17 17 17 13 13 13 ++27 27 27 23 23 23 20 20 20 21 21 21 20 20 20 13 13 13 8 8 8 11 11 11 ++21 21 21 23 23 23 25 25 25 25 25 25 17 17 17 10 10 10 13 13 13 23 23 23 ++20 20 20 24 24 24 25 25 25 21 21 21 14 14 14 10 10 10 10 10 10 13 13 13 ++20 20 20 17 17 17 14 14 14 13 13 13 14 14 14 17 17 17 19 19 19 20 20 20 ++20 20 20 14 14 14 11 11 11 11 11 11 17 17 17 21 21 21 23 23 23 21 21 21 ++19 19 19 19 19 19 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 ++21 21 21 21 21 21 20 20 20 16 16 16 11 11 11 11 11 11 13 13 13 14 14 14 ++17 17 17 19 19 19 20 20 20 20 20 20 17 17 17 13 13 13 8 8 8 4 4 4 ++13 13 13 17 17 17 21 21 21 20 20 20 14 14 14 11 11 11 14 14 14 17 17 17 ++13 13 13 17 17 17 19 19 19 16 16 16 10 10 10 8 8 8 13 13 13 17 17 17 ++16 16 16 11 11 11 6 6 6 8 8 8 11 11 11 13 13 13 11 11 11 6 6 6 ++11 11 11 13 13 13 13 13 13 11 11 11 8 8 8 6 6 6 10 10 10 11 11 11 ++6 6 6 6 6 6 10 10 10 11 11 11 13 13 13 13 13 13 13 13 13 13 13 13 ++14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 14 14 14 14 14 14 16 16 16 ++3 3 3 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 4 4 4 ++4 4 4 10 10 10 13 13 13 11 11 11 8 8 8 3 3 3 0 0 0 0 0 0 ++3 3 3 4 4 4 6 6 6 8 8 8 6 6 6 4 4 4 4 4 4 4 4 4 ++4 4 4 6 6 6 6 6 6 3 3 3 0 0 0 3 3 3 6 6 6 10 10 10 ++4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 4 4 4 6 6 6 ++13 13 13 10 10 10 4 4 4 3 3 3 4 4 4 6 6 6 10 10 10 11 11 11 ++10 10 10 34 34 34 180 183 185 200 220 210 140 140 140 129 129 130 180 183 185 187 210 182 ++101 101 101 3 3 3 112 112 113 180 183 185 187 210 182 149 149 149 187 210 182 180 183 185 ++149 149 149 3 3 3 71 71 71 187 210 182 200 220 210 14 14 14 10 10 10 187 210 182 ++187 210 182 74 74 74 8 8 8 152 153 154 187 210 182 101 101 101 10 10 10 152 153 154 ++117 117 117 127 127 127 180 183 185 180 183 185 17 17 17 40 40 40 187 210 182 180 183 185 ++166 167 167 91 91 91 0 0 0 187 210 182 187 210 182 69 69 69 17 17 17 96 97 98 ++180 183 185 137 137 137 101 101 101 200 220 210 142 143 144 19 19 19 3 3 3 16 16 16 ++8 8 8 16 16 16 200 220 210 187 210 182 63 63 63 14 14 14 155 156 156 180 183 185 ++105 105 105 0 0 0 74 74 74 187 210 182 187 210 182 8 8 8 17 17 17 180 183 185 ++180 183 185 169 175 167 105 105 105 121 121 119 11 11 11 139 139 139 200 220 210 140 140 140 ++13 13 13 11 11 11 10 10 10 10 10 10 11 11 11 11 11 11 10 10 10 8 8 8 ++ ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++6 6 6 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 ++0 0 0 0 0 0 3 3 3 6 6 6 6 6 6 3 3 3 0 0 0 0 0 0 ++8 8 8 6 6 6 3 3 3 0 0 0 0 0 0 3 3 3 6 6 6 8 8 8 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 8 8 8 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++14 14 14 6 6 6 0 0 0 0 0 0 4 4 4 8 8 8 3 3 3 0 0 0 ++6 6 6 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 6 6 6 ++6 6 6 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 6 6 6 ++0 0 0 4 4 4 6 6 6 4 4 4 0 0 0 0 0 0 6 6 6 11 11 11 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 6 6 6 8 8 8 8 8 8 ++8 8 8 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++8 8 8 8 8 8 10 10 10 10 10 10 11 11 11 11 11 11 10 10 10 10 10 10 ++14 14 14 11 11 11 8 8 8 4 4 4 3 3 3 3 3 3 4 4 4 6 6 6 ++0 0 0 3 3 3 8 8 8 10 10 10 6 6 6 3 3 3 3 3 3 3 3 3 ++10 10 10 6 6 6 3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 6 6 6 ++0 0 0 4 4 4 8 8 8 10 10 10 10 10 10 8 8 8 4 4 4 0 0 0 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++8 8 8 6 6 6 4 4 4 8 8 8 11 11 11 13 13 13 13 13 13 10 10 10 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++10 10 10 13 13 13 14 14 14 14 14 14 11 11 11 10 10 10 10 10 10 11 11 11 ++10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ++14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 11 11 11 11 11 11 11 11 11 ++14 14 14 14 14 14 13 13 13 13 13 13 14 14 14 14 14 14 16 16 16 17 17 17 ++19 19 19 19 19 19 17 17 17 13 13 13 8 8 8 8 8 8 11 11 11 14 14 14 ++14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ++13 13 13 14 14 14 16 16 16 16 16 16 16 16 16 14 14 14 13 13 13 13 13 13 ++13 13 13 16 16 16 17 17 17 16 16 16 13 13 13 8 8 8 8 8 8 8 8 8 ++11 11 11 16 16 16 20 20 20 21 21 21 20 20 20 19 19 19 19 19 19 19 19 19 ++19 19 19 17 17 17 16 16 16 14 14 14 13 13 13 11 11 11 10 10 10 10 10 10 ++8 8 8 10 10 10 13 13 13 16 16 16 17 17 17 17 17 17 16 16 16 14 14 14 ++10 10 10 11 11 11 14 14 14 16 16 16 17 17 17 17 17 17 16 16 16 16 16 16 ++19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 ++19 19 19 19 19 19 17 17 17 16 16 16 14 14 14 13 13 13 11 11 11 11 11 11 ++4 4 4 6 6 6 10 10 10 13 13 13 13 13 13 11 11 11 10 10 10 6 6 6 ++14 14 14 16 16 16 19 19 19 19 19 19 19 19 19 16 16 16 13 13 13 11 11 11 ++11 11 11 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++11 11 11 11 11 11 10 10 10 8 8 8 8 8 8 6 6 6 6 6 6 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++8 8 8 10 10 10 10 10 10 10 10 10 8 8 8 6 6 6 3 3 3 0 0 0 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++4 4 4 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 6 6 6 4 4 4 ++0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 4 4 4 6 6 6 10 10 10 ++8 8 8 8 8 8 6 6 6 4 4 4 4 4 4 6 6 6 8 8 8 8 8 8 ++0 0 0 16 16 16 59 59 59 158 159 161 200 220 210 144 145 144 166 167 167 180 183 185 ++103 103 102 0 0 0 28 28 28 127 127 127 200 220 210 166 167 167 112 112 113 180 183 185 ++152 153 154 6 6 6 60 60 60 200 220 210 180 183 185 4 4 4 16 16 16 187 210 182 ++187 210 182 63 63 63 14 14 14 149 149 149 200 220 210 95 95 94 44 44 44 139 139 139 ++169 175 167 180 183 185 157 157 157 80 80 80 6 6 6 4 4 4 95 95 94 180 183 185 ++187 210 182 94 94 94 25 25 25 180 183 185 187 210 182 68 68 68 60 60 60 180 183 185 ++180 183 185 42 42 42 34 34 34 180 183 185 200 220 210 101 101 101 14 14 14 16 16 16 ++3 3 3 25 25 25 180 183 185 200 220 210 67 67 67 13 13 13 152 153 154 187 210 182 ++96 97 98 11 11 11 68 68 68 187 210 182 180 183 185 25 25 25 0 0 0 40 40 40 ++131 131 131 169 175 167 200 220 210 155 156 156 16 16 16 105 105 105 187 210 182 112 112 113 ++8 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ++ ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++8 8 8 6 6 6 6 6 6 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 4 4 4 3 3 3 3 3 3 ++3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 4 4 4 3 3 3 3 3 3 ++4 4 4 3 3 3 3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 6 6 6 ++0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 8 8 8 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++6 6 6 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ++11 11 11 10 10 10 8 8 8 6 6 6 4 4 4 4 4 4 3 3 3 3 3 3 ++3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 4 4 4 4 4 4 ++6 6 6 4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 4 4 4 6 6 6 8 8 8 11 11 11 13 13 13 11 11 11 8 8 8 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++8 8 8 11 11 11 13 13 13 13 13 13 10 10 10 8 8 8 8 8 8 10 10 10 ++10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ++13 13 13 13 13 13 13 13 13 11 11 11 11 11 11 10 10 10 10 10 10 10 10 10 ++13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 16 16 16 17 17 17 19 19 19 ++17 17 17 17 17 17 17 17 17 16 16 16 11 11 11 10 10 10 11 11 11 13 13 13 ++13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 ++13 13 13 14 14 14 16 16 16 16 16 16 16 16 16 16 16 16 14 14 14 14 14 14 ++13 13 13 14 14 14 17 17 17 17 17 17 14 14 14 11 11 11 10 10 10 8 8 8 ++10 10 10 13 13 13 16 16 16 19 19 19 19 19 19 19 19 19 17 17 17 17 17 17 ++17 17 17 17 17 17 16 16 16 16 16 16 14 14 14 13 13 13 11 11 11 11 11 11 ++8 8 8 10 10 10 13 13 13 14 14 14 16 16 16 16 16 16 14 14 14 13 13 13 ++11 11 11 13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 ++17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 ++17 17 17 16 16 16 16 16 16 14 14 14 13 13 13 11 11 11 10 10 10 10 10 10 ++11 11 11 13 13 13 14 14 14 16 16 16 16 16 16 16 16 16 14 14 14 13 13 13 ++14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 13 13 13 ++13 13 13 13 13 13 13 13 13 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++11 11 11 10 10 10 10 10 10 8 8 8 8 8 8 6 6 6 4 4 4 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ++10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ++8 8 8 8 8 8 8 8 8 8 8 8 6 6 6 4 4 4 4 4 4 3 3 3 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 6 6 6 6 6 6 6 6 6 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 4 4 4 6 6 6 8 8 8 ++8 8 8 8 8 8 6 6 6 4 4 4 4 4 4 6 6 6 8 8 8 8 8 8 ++14 14 14 0 0 0 24 24 24 13 13 13 0 0 0 42 42 42 166 167 167 200 220 210 ++68 68 68 8 8 8 0 0 0 0 0 0 16 16 16 11 11 11 0 0 0 11 11 11 ++0 0 0 0 0 0 19 19 19 0 0 0 4 4 4 8 8 8 10 10 10 10 10 10 ++8 8 8 6 6 6 0 0 0 6 6 6 20 20 20 6 6 6 0 0 0 8 8 8 ++11 11 11 21 21 21 10 10 10 0 0 0 13 13 13 8 8 8 0 0 0 14 14 14 ++13 13 13 21 21 21 0 0 0 14 14 14 11 11 11 13 13 13 3 3 3 19 19 19 ++19 19 19 0 0 0 0 0 0 17 17 17 10 10 10 4 4 4 3 3 3 0 0 0 ++16 16 16 0 0 0 16 16 16 0 0 0 19 19 19 0 0 0 8 8 8 3 3 3 ++13 13 13 0 0 0 0 0 0 8 8 8 11 11 11 0 0 0 21 21 21 0 0 0 ++0 0 0 19 19 19 0 0 0 14 14 14 0 0 0 0 0 0 16 16 16 6 6 6 ++6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 10 10 10 10 10 10 ++ ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 4 4 4 6 6 6 6 6 6 4 4 4 0 0 0 0 0 0 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 3 3 3 4 4 4 6 6 6 6 6 6 4 4 4 3 3 3 0 0 0 ++6 6 6 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 6 6 6 11 11 11 8 8 8 0 0 0 0 0 0 0 0 0 6 6 6 ++0 0 0 3 3 3 6 6 6 8 8 8 8 8 8 6 6 6 3 3 3 0 0 0 ++0 0 0 3 3 3 6 6 6 8 8 8 8 8 8 6 6 6 3 3 3 0 0 0 ++6 6 6 0 0 0 0 0 0 0 0 0 8 8 8 10 10 10 6 6 6 0 0 0 ++0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 4 4 4 6 6 6 6 6 6 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 6 6 6 ++6 6 6 6 6 6 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 8 8 8 ++8 8 8 8 8 8 8 8 8 8 8 8 6 6 6 4 4 4 3 3 3 0 0 0 ++8 8 8 4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 6 6 6 ++0 0 0 4 4 4 6 6 6 8 8 8 6 6 6 4 4 4 3 3 3 3 3 3 ++8 8 8 6 6 6 3 3 3 0 0 0 0 0 0 3 3 3 6 6 6 8 8 8 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 4 4 4 6 6 6 10 10 10 11 11 11 11 11 11 10 10 10 6 6 6 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 10 10 10 11 11 11 10 10 10 8 8 8 6 6 6 6 6 6 8 8 8 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++10 10 10 10 10 10 10 10 10 10 10 10 8 8 8 8 8 8 8 8 8 8 8 8 ++10 10 10 10 10 10 11 11 11 11 11 11 13 13 13 16 16 16 17 17 17 19 19 19 ++14 14 14 16 16 16 17 17 17 16 16 16 13 13 13 11 11 11 10 10 10 11 11 11 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++11 11 11 11 11 11 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ++13 13 13 13 13 13 14 14 14 16 16 16 16 16 16 14 14 14 11 11 11 8 8 8 ++8 8 8 10 10 10 11 11 11 14 14 14 17 17 17 17 17 17 16 16 16 14 14 14 ++16 16 16 16 16 16 16 16 16 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 ++8 8 8 8 8 8 11 11 11 13 13 13 14 14 14 14 14 14 13 13 13 11 11 11 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 10 10 10 10 10 10 8 8 8 ++14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ++14 14 14 14 14 14 13 13 13 11 11 11 11 11 11 10 10 10 8 8 8 8 8 8 ++13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ++14 14 14 13 13 13 10 10 10 8 8 8 10 10 10 11 11 11 13 13 13 16 16 16 ++13 13 13 11 11 11 11 11 11 11 11 11 10 10 10 10 10 10 8 8 8 8 8 8 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++10 10 10 10 10 10 8 8 8 8 8 8 6 6 6 6 6 6 4 4 4 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++10 10 10 8 8 8 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++6 6 6 6 6 6 6 6 6 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 ++0 0 0 0 0 0 3 3 3 4 4 4 6 6 6 6 6 6 4 4 4 3 3 3 ++6 6 6 6 6 6 6 6 6 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 ++4 4 4 19 19 19 129 129 130 166 167 167 155 156 156 180 183 185 200 220 210 155 156 156 ++0 0 0 0 0 0 6 6 6 0 0 0 0 0 0 3 3 3 17 17 17 0 0 0 ++19 19 19 0 0 0 3 3 3 6 6 6 16 16 16 6 6 6 3 3 3 11 11 11 ++0 0 0 6 6 6 11 11 11 0 0 0 0 0 0 13 13 13 17 17 17 0 0 0 ++6 6 6 6 6 6 0 0 0 0 0 0 13 13 13 16 16 16 13 13 13 14 14 14 ++0 0 0 6 6 6 11 11 11 4 4 4 0 0 0 19 19 19 13 13 13 8 8 8 ++8 8 8 16 16 16 11 11 11 0 0 0 3 3 3 8 8 8 13 13 13 17 17 17 ++11 11 11 17 17 17 10 10 10 0 0 0 16 16 16 17 17 17 4 4 4 3 3 3 ++0 0 0 0 0 0 10 10 10 0 0 0 10 10 10 0 0 0 16 16 16 0 0 0 ++0 0 0 16 16 16 0 0 0 4 4 4 3 3 3 6 6 6 0 0 0 3 3 3 ++4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 ++ ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 3 3 3 4 4 4 6 6 6 6 6 6 4 4 4 3 3 3 0 0 0 ++6 6 6 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 4 4 4 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 4 4 4 10 10 10 8 8 8 3 3 3 0 0 0 0 0 0 4 4 4 ++0 0 0 3 3 3 4 4 4 6 6 6 6 6 6 4 4 4 3 3 3 0 0 0 ++0 0 0 3 3 3 4 4 4 6 6 6 6 6 6 4 4 4 3 3 3 0 0 0 ++3 3 3 0 0 0 0 0 0 4 4 4 6 6 6 6 6 6 3 3 3 0 0 0 ++0 0 0 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 6 6 6 ++4 4 4 6 6 6 8 8 8 8 8 8 10 10 10 8 8 8 8 8 8 8 8 8 ++8 8 8 8 8 8 6 6 6 6 6 6 4 4 4 3 3 3 3 3 3 3 3 3 ++8 8 8 4 4 4 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 ++0 0 0 3 3 3 6 6 6 6 6 6 4 4 4 0 0 0 3 3 3 4 4 4 ++6 6 6 4 4 4 3 3 3 0 0 0 0 0 0 3 3 3 4 4 4 6 6 6 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 6 6 6 10 10 10 11 11 11 10 10 10 6 6 6 3 3 3 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++4 4 4 6 6 6 8 8 8 8 8 8 6 6 6 3 3 3 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++4 4 4 6 6 6 6 6 6 8 8 8 10 10 10 13 13 13 14 14 14 16 16 16 ++13 13 13 13 13 13 13 13 13 11 11 11 10 10 10 10 10 10 8 8 8 8 8 8 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++6 6 6 6 6 6 8 8 8 10 10 10 11 11 11 11 11 11 11 11 11 13 13 13 ++13 13 13 11 11 11 8 8 8 10 10 10 11 11 11 13 13 13 11 11 11 8 8 8 ++6 6 6 4 4 4 6 6 6 10 10 10 14 14 14 16 16 16 14 14 14 11 11 11 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 13 13 13 ++6 6 6 8 8 8 10 10 10 11 11 11 11 11 11 11 11 11 10 10 10 10 10 10 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 6 6 6 6 6 ++11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ++11 11 11 11 11 11 10 10 10 10 10 10 8 8 8 6 6 6 6 6 6 6 6 6 ++8 8 8 6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 10 10 10 10 10 10 ++10 10 10 8 8 8 6 6 6 4 4 4 6 6 6 8 8 8 11 11 11 13 13 13 ++11 11 11 11 11 11 10 10 10 10 10 10 8 8 8 6 6 6 6 6 6 4 4 4 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++8 8 8 8 8 8 8 8 8 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++8 8 8 6 6 6 4 4 4 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 6 6 6 4 4 4 3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 ++0 0 0 0 0 0 0 0 0 4 4 4 8 8 8 8 8 8 4 4 4 0 0 0 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 0 0 0 87 87 87 144 145 144 152 153 154 139 139 139 101 101 101 23 23 23 ++0 0 0 8 8 8 6 6 6 19 19 19 17 17 17 0 0 0 3 3 3 6 6 6 ++0 0 0 8 8 8 14 14 14 6 6 6 4 4 4 6 6 6 3 3 3 0 0 0 ++10 10 10 0 0 0 0 0 0 10 10 10 3 3 3 0 0 0 4 4 4 10 10 10 ++0 0 0 3 3 3 10 10 10 10 10 10 3 3 3 0 0 0 0 0 0 0 0 0 ++11 11 11 0 0 0 8 8 8 13 13 13 4 4 4 0 0 0 0 0 0 11 11 11 ++8 8 8 3 3 3 0 0 0 0 0 0 11 11 11 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 19 19 19 23 23 23 0 0 0 0 0 0 13 13 13 0 0 0 ++10 10 10 0 0 0 6 6 6 0 0 0 11 11 11 0 0 0 0 0 0 6 6 6 ++14 14 14 0 0 0 3 3 3 20 20 20 0 0 0 6 6 6 14 14 14 0 0 0 ++3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 3 3 3 6 6 6 6 6 6 3 3 3 0 0 0 0 0 0 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++4 4 4 4 4 4 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 6 6 6 ++8 8 8 6 6 6 4 4 4 3 3 3 0 0 0 0 0 0 3 3 3 4 4 4 ++6 6 6 3 3 3 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 0 0 0 ++3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 3 3 3 6 6 6 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 6 6 6 10 10 10 10 10 10 6 6 6 4 4 4 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 4 4 4 6 6 6 6 6 6 3 3 3 0 0 0 0 0 0 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 ++0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 8 8 8 10 10 10 11 11 11 ++11 11 11 8 8 8 6 6 6 3 3 3 3 3 3 4 4 4 4 4 4 6 6 6 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 6 6 6 8 8 8 8 8 8 ++11 11 11 8 8 8 3 3 3 0 0 0 4 4 4 6 6 6 8 8 8 8 8 8 ++4 4 4 3 3 3 3 3 3 6 6 6 10 10 10 11 11 11 10 10 10 8 8 8 ++6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 8 8 8 ++8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ++8 8 8 8 8 8 8 8 8 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 6 6 6 ++4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 6 6 6 8 8 8 8 8 8 ++10 10 10 8 8 8 8 8 8 6 6 6 4 4 4 4 4 4 3 3 3 3 3 3 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++6 6 6 6 6 6 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 6 6 6 4 4 4 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++6 6 6 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 6 6 6 ++0 0 0 0 0 0 0 0 0 4 4 4 8 8 8 6 6 6 3 3 3 0 0 0 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++10 10 10 0 0 0 0 0 0 0 0 0 4 4 4 0 0 0 10 10 10 10 10 10 ++0 0 0 4 4 4 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 14 14 14 ++13 13 13 4 4 4 0 0 0 10 10 10 10 10 10 3 3 3 0 0 0 6 6 6 ++3 3 3 10 10 10 8 8 8 4 4 4 4 4 4 6 6 6 4 4 4 6 6 6 ++10 10 10 0 0 0 0 0 0 0 0 0 3 3 3 8 8 8 10 10 10 3 3 3 ++0 0 0 13 13 13 13 13 13 0 0 0 0 0 0 0 0 0 6 6 6 0 0 0 ++0 0 0 8 8 8 13 13 13 0 0 0 0 0 0 4 4 4 14 14 14 10 10 10 ++10 10 10 0 0 0 0 0 0 3 3 3 6 6 6 17 17 17 11 11 11 3 3 3 ++0 0 0 0 0 0 11 11 11 0 0 0 4 4 4 8 8 8 3 3 3 0 0 0 ++8 8 8 0 0 0 0 0 0 11 11 11 3 3 3 8 8 8 0 0 0 6 6 6 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++4 4 4 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 3 3 3 0 0 0 ++4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 ++4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 ++0 0 0 4 4 4 8 8 8 6 6 6 0 0 0 0 0 0 0 0 0 4 4 4 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 4 4 4 6 6 6 6 6 6 8 8 8 6 6 6 6 6 6 6 6 6 ++8 8 8 6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 ++0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 6 6 6 8 8 8 6 6 6 4 4 4 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 6 6 6 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 6 6 6 8 8 8 ++8 8 8 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 ++10 10 10 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 ++3 3 3 3 3 3 3 3 3 3 3 3 6 6 6 6 6 6 6 6 6 6 6 6 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 6 6 6 8 8 8 ++6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 ++4 4 4 3 3 3 3 3 3 0 0 0 3 3 3 4 4 4 6 6 6 6 6 6 ++0 0 0 3 3 3 4 4 4 4 4 4 6 6 6 4 4 4 4 4 4 3 3 3 ++6 6 6 6 6 6 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 0 0 0 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 0 0 0 ++3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 ++0 0 0 17 17 17 13 13 13 10 10 10 13 13 13 0 0 0 4 4 4 4 4 4 ++4 4 4 0 0 0 8 8 8 3 3 3 3 3 3 8 8 8 0 0 0 3 3 3 ++3 3 3 4 4 4 0 0 0 8 8 8 3 3 3 0 0 0 0 0 0 4 4 4 ++4 4 4 0 0 0 0 0 0 0 0 0 14 14 14 6 6 6 0 0 0 0 0 0 ++0 0 0 3 3 3 8 8 8 8 8 8 0 0 0 0 0 0 0 0 0 3 3 3 ++4 4 4 10 10 10 0 0 0 3 3 3 16 16 16 0 0 0 0 0 0 6 6 6 ++10 10 10 0 0 0 0 0 0 11 11 11 6 6 6 0 0 0 0 0 0 0 0 0 ++0 0 0 17 17 17 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 ++13 13 13 3 3 3 4 4 4 4 4 4 8 8 8 0 0 0 0 0 0 8 8 8 ++0 0 0 14 14 14 10 10 10 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 3 3 3 ++4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 3 3 3 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++4 4 4 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 3 3 3 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 4 4 4 ++4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 0 0 0 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 6 6 6 6 6 6 3 3 3 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 6 6 6 ++6 6 6 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 ++6 6 6 6 6 6 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 ++3 3 3 3 3 3 4 4 4 3 3 3 3 3 3 0 0 0 3 3 3 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 6 6 6 ++3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 ++0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++11 11 11 8 8 8 0 0 0 0 0 0 13 13 13 10 10 10 6 6 6 0 0 0 ++3 3 3 0 0 0 0 0 0 6 6 6 3 3 3 0 0 0 6 6 6 3 3 3 ++0 0 0 16 16 16 10 10 10 17 17 17 4 4 4 6 6 6 10 10 10 4 4 4 ++0 0 0 10 10 10 10 10 10 3 3 3 4 4 4 6 6 6 4 4 4 8 8 8 ++4 4 4 6 6 6 6 6 6 6 6 6 11 11 11 10 10 10 8 8 8 10 10 10 ++0 0 0 8 8 8 0 0 0 11 11 11 10 10 10 4 4 4 0 0 0 10 10 10 ++4 4 4 0 0 0 4 4 4 6 6 6 0 0 0 4 4 4 10 10 10 3 3 3 ++4 4 4 6 6 6 8 8 8 8 8 8 11 11 11 6 6 6 17 17 17 0 0 0 ++0 0 0 3 3 3 3 3 3 4 4 4 3 3 3 4 4 4 11 11 11 6 6 6 ++16 16 16 0 0 0 0 0 0 4 4 4 6 6 6 3 3 3 8 8 8 8 8 8 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 ++0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 6 6 6 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 ++10 10 10 4 4 4 0 0 0 0 0 0 3 3 3 4 4 4 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 6 6 6 4 4 4 4 4 4 ++0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 6 6 6 6 6 6 ++4 4 4 3 3 3 0 0 0 3 3 3 4 4 4 6 6 6 3 3 3 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++6 6 6 4 4 4 3 3 3 3 3 3 0 0 0 3 3 3 4 4 4 4 4 4 ++4 4 4 8 8 8 10 10 10 8 8 8 3 3 3 0 0 0 0 0 0 0 0 0 ++3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 ++6 6 6 6 6 6 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 ++4 4 4 4 4 4 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 3 3 3 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 4 4 4 ++0 0 0 0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 6 6 6 0 0 0 4 4 4 ++0 0 0 17 17 17 0 0 0 0 0 0 8 8 8 3 3 3 8 8 8 0 0 0 ++3 3 3 11 11 11 0 0 0 8 8 8 0 0 0 4 4 4 4 4 4 0 0 0 ++14 14 14 0 0 0 0 0 0 6 6 6 6 6 6 0 0 0 0 0 0 0 0 0 ++0 0 0 8 8 8 3 3 3 0 0 0 4 4 4 0 0 0 0 0 0 3 3 3 ++0 0 0 4 4 4 6 6 6 11 11 11 0 0 0 11 11 11 0 0 0 0 0 0 ++6 6 6 3 3 3 0 0 0 0 0 0 6 6 6 4 4 4 0 0 0 4 4 4 ++4 4 4 0 0 0 6 6 6 4 4 4 10 10 10 0 0 0 8 8 8 3 3 3 ++6 6 6 3 3 3 0 0 0 10 10 10 3 3 3 0 0 0 6 6 6 0 0 0 ++0 0 0 10 10 10 6 6 6 3 3 3 0 0 0 0 0 0 10 10 10 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++ ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++4 4 4 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 4 4 4 ++3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++0 0 0 4 4 4 6 6 6 3 3 3 3 3 3 6 6 6 4 4 4 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 4 4 4 3 3 3 0 0 0 3 3 3 4 4 4 ++3 3 3 4 4 4 6 6 6 4 4 4 3 3 3 0 0 0 0 0 0 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ++3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 4 4 4 3 3 3 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 3 3 3 4 4 4 3 3 3 0 0 0 0 0 0 0 0 0 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ++4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 ++ diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-pxa270-mmc.patch b/packages/linux/gumstix-kernel-2.6.21/gumstix-pxa270-mmc.patch new file mode 100644 index 0000000000..59d97809d1 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/gumstix-pxa270-mmc.patch @@ -0,0 +1,33 @@ +Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/gumstix.c ++++ linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +@@ -33,8 +33,9 @@ + + static struct pxamci_platform_data gumstix_mci_platform_data; + +-static int gumstix_mci_init(struct device *dev, irqreturn_t (*gumstix_detect_int)(int, void *, struct pt_regs *), void *data) ++static int gumstix_mci_init(struct device *dev, irq_handler_t gumstix_detect_int, void *data) + { ++#ifndef CONFIG_ARCH_GUMSTIX_VERDEX + int err; + + pxa_gpio_mode(GPIO6_MMCCLK_MD); +@@ -55,6 +56,17 @@ static int gumstix_mci_init(struct devic + } + + err = set_irq_type(GUMSTIX_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE); ++#else ++ // Setup GPIOs for MMC on the 120-pin connector ++ // There is no card detect on a uSD connector so no interrupt to register ++ // There is no WP detect GPIO line either ++ pxa_gpio_mode(GPIO92_MMCDAT0_MD); ++ pxa_gpio_mode(GPIO112_MMCCMD_MD); ++ pxa_gpio_mode(GPIO110_MMCDAT2_MD); ++ pxa_gpio_mode(GPIO111_MMCDAT3_MD); ++ pxa_gpio_mode(GPIO109_MMCDAT1_MD); ++ pxa_gpio_mode(GPIO32_MMCCLK_MD); ++#endif + + return 0; + } diff --git a/packages/linux/gumstix-kernel-2.6.21/gumstix-pxa270-usb-host.patch b/packages/linux/gumstix-kernel-2.6.21/gumstix-pxa270-usb-host.patch new file mode 100644 index 0000000000..f5da12fdef --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/gumstix-pxa270-usb-host.patch @@ -0,0 +1,366 @@ +Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/gumstix.c ++++ linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -178,9 +179,34 @@ static struct platform_device *devices[] + &gum_audio_device, + }; + ++#ifdef CONFIG_ARCH_GUMSTIX_VERDEX ++static int gumstix_ohci_init(struct device *dev) ++{ ++ /* setup Port1 GPIO pin. */ ++ //pxa_gpio_mode( 88 | GPIO_ALT_FN_1_IN); /* USBHPWR1 */ ++ //pxa_gpio_mode( 89 | GPIO_ALT_FN_2_OUT); /* USBHPEN1 */ ++ ++ // Turn on port 2 in host mode ++ UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE; ++ ++ UHCHR = (UHCHR) & ++ ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE); ++ ++ return 0; ++} ++ ++static struct pxaohci_platform_data gumstix_ohci_platform_data = { ++ .port_mode = PMM_PERPORT_MODE, ++ .init = gumstix_ohci_init, ++}; ++#endif ++ + static void __init gumstix_init(void) + { + pxa_set_mci_info(&gumstix_mci_platform_data); ++#ifdef CONFIG_ARCH_GUMSTIX_VERDEX ++ pxa_set_ohci_info(&gumstix_ohci_platform_data); ++#endif + pxa_set_udc_info(&gumstix_udc_info); + #if defined(CONFIG_FB_PXA_ALPS_CDOLLAR) | defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) | defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C) + set_pxa_fb_info(&gumstix_fb_info); +Index: linux-2.6.21gum/drivers/usb/gadget/ether.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/ether.c ++++ linux-2.6.21gum/drivers/usb/gadget/ether.c +@@ -260,6 +260,8 @@ MODULE_PARM_DESC(host_addr, "Host Ethern + + #ifdef CONFIG_USB_GADGET_PXA27X + #define DEV_CONFIG_CDC ++extern struct usb_ep* pxa27x_ep_config(struct usb_gadget *gadget, ++ struct usb_endpoint_descriptor *desc,int config,int interface,int alt); + #endif + + #ifdef CONFIG_USB_GADGET_S3C2410 +@@ -482,15 +484,15 @@ eth_config = { + #ifdef CONFIG_USB_ETH_RNDIS + static struct usb_config_descriptor + rndis_config = { +- .bLength = sizeof rndis_config, ++ .bLength = sizeof rndis_config, + .bDescriptorType = USB_DT_CONFIG, + + /* compute wTotalLength on the fly */ +- .bNumInterfaces = 2, ++ .bNumInterfaces = 2, + .bConfigurationValue = DEV_RNDIS_CONFIG_VALUE, +- .iConfiguration = STRING_RNDIS, ++ .iConfiguration = STRING_RNDIS, + .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER, +- .bMaxPower = 50, ++ .bMaxPower = 50, + }; + #endif + +@@ -532,15 +534,15 @@ control_intf = { + #ifdef CONFIG_USB_ETH_RNDIS + static const struct usb_interface_descriptor + rndis_control_intf = { +- .bLength = sizeof rndis_control_intf, ++ .bLength = sizeof rndis_control_intf, + .bDescriptorType = USB_DT_INTERFACE, + + .bInterfaceNumber = 0, +- .bNumEndpoints = 1, ++ .bNumEndpoints = 1, + .bInterfaceClass = USB_CLASS_COMM, + .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM, + .bInterfaceProtocol = USB_CDC_ACM_PROTO_VENDOR, +- .iInterface = STRING_RNDIS_CONTROL, ++ .iInterface = STRING_RNDIS_CONTROL, + }; + #endif + +@@ -1342,7 +1344,7 @@ static void rndis_response_complete (str + + static void rndis_command_complete (struct usb_ep *ep, struct usb_request *req) + { +- struct eth_dev *dev = ep->driver_data; ++ struct eth_dev *dev = ep->driver_data; + int status; + + /* received RNDIS command from USB_CDC_SEND_ENCAPSULATED_COMMAND */ +@@ -1578,7 +1580,7 @@ done_set_intf: + + /* return the result */ + buf = rndis_get_next_response (dev->rndis_config, +- &value); ++ &value); + if (buf) { + memcpy (req->buf, buf, value); + req->complete = rndis_response_complete; +@@ -2064,7 +2066,7 @@ static void eth_req_free (struct usb_ep + static void + rndis_control_ack_complete (struct usb_ep *ep, struct usb_request *req) + { +- struct eth_dev *dev = ep->driver_data; ++ struct eth_dev *dev = ep->driver_data; + + if (req->status || req->actual != req->length) + DEBUG (dev, +@@ -2415,7 +2417,27 @@ eth_bind (struct usb_gadget *gadget) + + /* all we really need is bulk IN/OUT */ + usb_ep_autoconfig_reset (gadget); ++#ifdef CONFIG_USB_GADGET_PXA27X ++#ifdef CONFIG_USB_ETH_RNDIS ++ in_ep = pxa27x_ep_config (gadget, &fs_source_desc, ++ DEV_RNDIS_CONFIG_VALUE, ++ (int)rndis_data_intf.bInterfaceNumber, ++ (int)rndis_data_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_CDC) ++ in_ep = pxa27x_ep_config (gadget, &fs_source_desc, ++ DEV_CONFIG_VALUE, ++ (int)data_intf.bInterfaceNumber, ++ (int)data_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_SUBSET) ++ in_ep = pxa27x_ep_config (gadget, &fs_source_desc, ++ DEV_CONFIG_VALUE, ++ (int)subset_data_intf.bInterfaceNumber, ++ (int)subset_data_intf.bAlternateSetting); ++ ++#endif //CONFIG_USB_ETH_RNDIS ++#else + in_ep = usb_ep_autoconfig (gadget, &fs_source_desc); ++#endif //CONFIG_USB_GADGET_PXA27X + if (!in_ep) { + autoconf_fail: + dev_err (&gadget->dev, +@@ -2425,7 +2447,26 @@ autoconf_fail: + } + in_ep->driver_data = in_ep; /* claim */ + ++#ifdef CONFIG_USB_GADGET_PXA27X ++#ifdef CONFIG_USB_ETH_RNDIS ++ out_ep = pxa27x_ep_config (gadget, &fs_sink_desc, ++ DEV_RNDIS_CONFIG_VALUE, ++ (int)rndis_data_intf.bInterfaceNumber, ++ (int)rndis_data_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_CDC) ++ out_ep = pxa27x_ep_config (gadget, &fs_sink_desc, ++ DEV_CONFIG_VALUE, ++ (int)data_intf.bInterfaceNumber, ++ (int)data_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_SUBSET) ++ out_ep = pxa27x_ep_config (gadget, &fs_sink_desc, ++ DEV_CONFIG_VALUE, ++ (int)subset_data_intf.bInterfaceNumber, ++ (int)subset_data_intf.bAlternateSetting); ++#endif //CONFIG_USB_ETH_RNDIS ++#else + out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc); ++#endif //CONFIG_USB_GADGET_PXA27X + if (!out_ep) + goto autoconf_fail; + out_ep->driver_data = out_ep; /* claim */ +@@ -2435,7 +2476,22 @@ autoconf_fail: + * Since some hosts expect one, try to allocate one anyway. + */ + if (cdc || rndis) { ++#ifdef CONFIG_USB_GADGET_PXA27X ++#ifdef CONFIG_USB_ETH_RNDIS ++ status_ep = pxa27x_ep_config (gadget, &fs_status_desc, ++ DEV_RNDIS_CONFIG_VALUE, ++ (int)rndis_control_intf.bInterfaceNumber, ++ (int)rndis_control_intf.bAlternateSetting); ++#elif defined(DEV_CONFIG_CDC) ++ status_ep = pxa27x_ep_config (gadget, &fs_status_desc, ++ DEV_CONFIG_VALUE, ++ (int)control_intf.bInterfaceNumber, ++ (int)control_intf.bAlternateSetting); ++ ++#endif //CONFIG_USB_ETH_RNDIS ++#else + status_ep = usb_ep_autoconfig (gadget, &fs_status_desc); ++#endif //CONFIG_USB_GADGET_PXA27X + if (status_ep) { + status_ep->driver_data = status_ep; /* claim */ + } else if (rndis) { +@@ -2444,11 +2500,13 @@ autoconf_fail: + gadget->name); + return -ENODEV; + #ifdef DEV_CONFIG_CDC ++#ifndef CONFIG_USB_GADGET_PXA27X + /* pxa25x only does CDC subset; often used with RNDIS */ + } else if (cdc) { + control_intf.bNumEndpoints = 0; + /* FIXME remove endpoint from descriptor list */ + #endif ++#endif + } + } + #endif +Index: linux-2.6.21gum/drivers/usb/gadget/file_storage.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/file_storage.c ++++ linux-2.6.21gum/drivers/usb/gadget/file_storage.c +@@ -280,6 +280,12 @@ MODULE_LICENSE("Dual BSD/GPL"); + #define DRIVER_PRODUCT_ID 0xa4a5 // Linux-USB File-backed Storage Gadget + + ++ ++#ifdef CONFIG_USB_GADGET_PXA27X ++extern struct usb_ep* pxa27x_ep_config(struct usb_gadget *gadget, ++ struct usb_endpoint_descriptor *desc,int config,int interface,int alt); ++#endif ++ + /* + * This driver assumes self-powered hardware and has no way for users to + * trigger remote wakeup. It uses autoconfiguration to select endpoints +@@ -3920,20 +3926,32 @@ static int __init fsg_bind(struct usb_ga + + /* Find all the endpoints we will use */ + usb_ep_autoconfig_reset(gadget); ++#ifdef CONFIG_USB_GADGET_PXA27X ++ ep = pxa27x_ep_config(gadget, &fs_bulk_in_desc, CONFIG_VALUE, 0, 0); ++#else + ep = usb_ep_autoconfig(gadget, &fs_bulk_in_desc); ++#endif + if (!ep) + goto autoconf_fail; + ep->driver_data = fsg; // claim the endpoint + fsg->bulk_in = ep; + ++#ifdef CONFIG_USB_GADGET_PXA27X ++ ep = pxa27x_ep_config(gadget, &fs_bulk_out_desc, CONFIG_VALUE, 0, 0); ++#else + ep = usb_ep_autoconfig(gadget, &fs_bulk_out_desc); ++#endif + if (!ep) + goto autoconf_fail; + ep->driver_data = fsg; // claim the endpoint + fsg->bulk_out = ep; + + if (transport_is_cbi()) { ++#ifdef CONFIG_USB_GADGET_PXA27X ++ ep = pxa27x_ep_config(gadget, &fs_intr_in_desc, CONFIG_VALUE, 0, 0); ++#else + ep = usb_ep_autoconfig(gadget, &fs_intr_in_desc); ++#endif + if (!ep) + goto autoconf_fail; + ep->driver_data = fsg; // claim the endpoint +@@ -4063,6 +4081,7 @@ autoconf_fail: + rc = -ENOTSUPP; + + out: ++ ERROR(fsg, "cleaning up on the way out\n"); + fsg->state = FSG_STATE_TERMINATED; // The thread is dead + fsg_unbind(gadget); + close_all_backing_files(fsg); +Index: linux-2.6.21gum/drivers/usb/gadget/serial.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/serial.c ++++ linux-2.6.21gum/drivers/usb/gadget/serial.c +@@ -126,6 +126,10 @@ static int debug = 1; + #define GS_LOG2_NOTIFY_INTERVAL 5 /* 1 << 5 == 32 msec */ + #define GS_NOTIFY_MAXPACKET 8 + ++#ifdef CONFIG_USB_GADGET_PXA27X ++extern struct usb_ep* pxa27x_ep_config(struct usb_gadget *gadget, ++ struct usb_endpoint_descriptor *desc,int config,int interface,int alt); ++#endif + + /* Structures */ + +@@ -1378,20 +1382,32 @@ static int __init gs_bind(struct usb_gad + + usb_ep_autoconfig_reset(gadget); + ++#ifdef CONFIG_USB_GADGET_PXA27X ++ ep = pxa27x_ep_config(gadget, &gs_fullspeed_in_desc, use_acm ? GS_ACM_CONFIG_ID : GS_BULK_CONFIG_ID, gs_bulk_interface_desc.bInterfaceNumber, gs_bulk_interface_desc.bAlternateSetting); ++#else + ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc); ++#endif + if (!ep) + goto autoconf_fail; + EP_IN_NAME = ep->name; + ep->driver_data = ep; /* claim the endpoint */ + ++#ifdef CONFIG_USB_GADGET_PXA27X ++ ep = pxa27x_ep_config(gadget, &gs_fullspeed_out_desc, use_acm ? GS_ACM_CONFIG_ID : GS_BULK_CONFIG_ID, gs_bulk_interface_desc.bInterfaceNumber, gs_bulk_interface_desc.bAlternateSetting); ++#else + ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc); ++#endif + if (!ep) + goto autoconf_fail; + EP_OUT_NAME = ep->name; + ep->driver_data = ep; /* claim the endpoint */ + + if (use_acm) { ++#ifdef CONFIG_USB_GADGET_PXA27X ++ ep = pxa27x_ep_config(gadget, &gs_fullspeed_notify_desc, GS_BULK_CONFIG_ID, gs_control_interface_desc.bInterfaceNumber, gs_control_interface_desc.bAlternateSetting); ++#else + ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc); ++#endif + if (!ep) { + printk(KERN_ERR "gs_bind: cannot run ACM on %s\n", gadget->name); + goto autoconf_fail; +Index: linux-2.6.21gum/drivers/usb/gadget/zero.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/zero.c ++++ linux-2.6.21gum/drivers/usb/gadget/zero.c +@@ -212,6 +212,11 @@ module_param (loopdefault, bool, S_IRUGO + #define STRING_SOURCE_SINK 250 + #define STRING_LOOPBACK 251 + ++#ifdef CONFIG_USB_GADGET_PXA27X ++extern struct usb_ep* pxa27x_ep_config(struct usb_gadget *gadget, ++ struct usb_endpoint_descriptor *desc,int config,int interface,int alt); ++#endif ++ + /* + * This device advertises two configurations; these numbers work + * on a pxa250 as well as more flexible hardware. +@@ -1155,7 +1160,11 @@ zero_bind (struct usb_gadget *gadget) + * but there may also be important quirks to address. + */ + usb_ep_autoconfig_reset (gadget); ++#ifdef CONFIG_USB_GADGET_PXA27X ++ ep = pxa27x_ep_config(gadget, &fs_source_desc, CONFIG_SOURCE_SINK, source_sink_intf.bInterfaceNumber, source_sink_intf.bAlternateSetting); ++#else + ep = usb_ep_autoconfig (gadget, &fs_source_desc); ++#endif + if (!ep) { + autoconf_fail: + printk (KERN_ERR "%s: can't autoconfigure on %s\n", +@@ -1164,8 +1173,12 @@ autoconf_fail: + } + EP_IN_NAME = ep->name; + ep->driver_data = ep; /* claim */ +- ++ ++#ifdef CONFIG_USB_GADGET_PXA27X ++ ep = pxa27x_ep_config(gadget, &fs_sink_desc, CONFIG_SOURCE_SINK, source_sink_intf.bInterfaceNumber, source_sink_intf.bAlternateSetting); ++#else + ep = usb_ep_autoconfig (gadget, &fs_sink_desc); ++#endif + if (!ep) + goto autoconf_fail; + EP_OUT_NAME = ep->name; diff --git a/packages/linux/gumstix-kernel-2.6.21/header.patch b/packages/linux/gumstix-kernel-2.6.21/header.patch new file mode 100644 index 0000000000..6086f69c9f --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/header.patch @@ -0,0 +1,170 @@ +Index: linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h +@@ -0,0 +1,165 @@ ++/* ++ * linux/include/asm-arm/arch-pxa/gumstix.h ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++ ++/* BTRESET - Reset line to Bluetooth module, active low signal. */ ++#define GPIO_GUMSTIX_BTRESET 7 ++#define GPIO_GUMSTIX_BTRESET_MD (GPIO_GUMSTIX_BTRESET | GPIO_OUT) ++ ++ ++/* GPIOn - Input from MAX823 (or equiv), normalizing USB +5V ++ into a clean interrupt signal for determining cable presence ++ On the original gumstix, this is GPIO81, and GPIO83 needs to be defined as well. ++ On the gumstix F, this moves to GPIO17 and GPIO37 */ ++/* GPIOx - Connects to USB D+ and used as a pull-up after GPIOn ++ has detected a cable insertion; driven low otherwise. */ ++ ++#ifdef CONFIG_ARCH_GUMSTIX_ORIG ++ ++#define GPIO_GUMSTIX_USB_GPIOn 81 ++#define GPIO_GUMSTIX_USB_GPIOx 83 ++ ++#else ++ ++#define GPIO_GUMSTIX_USB_GPIOn 35 ++#define GPIO_GUMSTIX_USB_GPIOx 41 ++ ++#endif ++ ++#define GUMSTIX_USB_INTR_IRQ IRQ_GPIO(GPIO_GUMSTIX_USB_GPIOn) /* usb state change */ ++#define GPIO_GUMSTIX_USB_GPIOn_MD (GPIO_GUMSTIX_USB_GPIOn | GPIO_IN) ++#define GPIO_GUMSTIX_USB_GPIOx_CON_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_OUT) ++#define GPIO_GUMSTIX_USB_GPIOx_DIS_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_IN) ++ ++ ++/* ++ * SMC Ethernet definitions ++ * ETH_RST provides a hardware reset line to the ethernet chip ++ * ETH is the IRQ line in from the ethernet chip to the PXA ++ */ ++#ifndef CONFIG_ARCH_GUMSTIX_VERDEX ++#define GPIO_GUMSTIX_ETH0_RST 80 ++#define GPIO_GUMSTIX_ETH0 36 ++#else ++#define GPIO_GUMSTIX_ETH0_RST 32 ++#define GPIO_GUMSTIX_ETH0 99 ++#endif ++#define GPIO_GUMSTIX_ETH1_RST 52 ++#define GPIO_GUMSTIX_ETH1 27 ++ ++#define GPIO_GUMSTIX_ETH0_RST_MD (GPIO_GUMSTIX_ETH0_RST | GPIO_OUT) ++#define GPIO_GUMSTIX_ETH1_RST_MD (GPIO_GUMSTIX_ETH1_RST | GPIO_OUT) ++#define GPIO_GUMSTIX_ETH0_MD (GPIO_GUMSTIX_ETH0 | GPIO_IN) ++#define GPIO_GUMSTIX_ETH1_MD (GPIO_GUMSTIX_ETH1 | GPIO_IN) ++ ++#define GUMSTIX_ETH0_IRQ IRQ_GPIO(GPIO_GUMSTIX_ETH0) ++#define GUMSTIX_ETH1_IRQ IRQ_GPIO(GPIO_GUMSTIX_ETH1) ++ ++ ++/* CF reset line */ ++#define GPIO8_CF_RESET 8 ++#define GPIO97_CF_RESET 97 ++#define GPIO110_CF_RESET 110 ++#ifndef CONFIG_ARCH_GUMSTIX_VERDEX ++#define GPIO_GUMSTIX_CF_RESET GPIO8_CF_RESET ++#else ++#define GPIO_GUMSTIX_CF_RESET GPIO97_CF_RESET ++#endif ++#define GPIO_GUMSTIX_CF_OLD_RESET GPIO110_CF_RESET ++ ++ ++/* CF signals shared by both sockets */ ++#define GPIO_GUMSTIX_nPOE GPIO48_nPOE ++#define GPIO_GUMSTIX_nPWE GPIO49_nPWE ++#define GPIO_GUMSTIX_nPIOR GPIO50_nPIOR ++#define GPIO_GUMSTIX_nPIOW GPIO51_nPIOW ++#ifndef CONFIG_ARCH_GUMSTIX_VERDEX ++#define GPIO_GUMSTIX_nPCE_1 GPIO52_nPCE_1 ++#define GPIO_GUMSTIX_nPCE_2 GPIO53_nPCE_2 ++#define GPIO_GUMSTIX_pSKTSEL GPIO54_pSKTSEL ++#else ++#define GPIO_GUMSTIX_nPCE_1 GPIO102_nPCE_1 ++#define GPIO_GUMSTIX_nPCE_2 GPIO105_nPCE_2 ++#define GPIO_GUMSTIX_pSKTSEL GPIO79_pSKTSEL ++#endif ++#define GPIO_GUMSTIX_nPREG GPIO55_nPREG ++#define GPIO_GUMSTIX_nPWAIT GPIO56_nPWAIT ++#define GPIO_GUMSTIX_nIOIS16 GPIO57_nIOIS16 ++ ++#define GPIO_GUMSTIX_nPOE_MD GPIO48_nPOE_MD ++#define GPIO_GUMSTIX_nPWE_MD GPIO49_nPWE_MD ++#define GPIO_GUMSTIX_nPIOR_MD GPIO50_nPIOR_MD ++#define GPIO_GUMSTIX_nPIOW_MD GPIO51_nPIOW_MD ++#ifndef CONFIG_ARCH_GUMSTIX_VERDEX ++#define GPIO_GUMSTIX_nPCE_1_MD GPIO52_nPCE_1_MD ++#define GPIO_GUMSTIX_nPCE_2_MD GPIO53_nPCE_2_MD ++#define GPIO_GUMSTIX_pSKTSEL_MD GPIO54_pSKTSEL_MD ++#else ++#define GPIO_GUMSTIX_nPCE_1_MD GPIO102_nPCE_1_MD ++#define GPIO_GUMSTIX_nPCE_2_MD GPIO105_nPCE_2_MD ++#define GPIO_GUMSTIX_pSKTSEL_MD GPIO79_pSKTSEL_MD ++#endif ++#define GPIO_GUMSTIX_nPREG_MD GPIO55_nPREG_MD ++#define GPIO_GUMSTIX_nPWAIT_MD GPIO56_nPWAIT_MD ++#define GPIO_GUMSTIX_nIOIS16_MD GPIO57_nIOIS16_MD ++ ++/* CF slot 0 */ ++#define GPIO4_nBVD1_0 4 ++#define GPIO4_nSTSCHG_0 GPIO4_nBVD1_0 ++#define GPIO11_nCD_0 11 ++#define GPIO26_PRDY_nBSY_0 26 ++ ++#define GPIO111_nBVD1_0 111 ++#define GPIO111_nSTSCHG_0 GPIO111_nBVD1_0 ++#define GPIO104_nCD_0 104 ++#define GPIO96_PRDY_nBSY_0 96 ++#define GPIO109_PRDY_nBSY_0 109 ++ ++#ifndef CONFIG_ARCH_GUMSTIX_VERDEX ++#define GPIO_GUMSTIX_nBVD1_0 GPIO4_nBVD1_0 ++#define GPIO_GUMSTIX_nSTSCHG_0 GPIO4_nSTSCHG_0 ++#define GPIO_GUMSTIX_nCD_0 GPIO11_nCD_0 ++#define GPIO_GUMSTIX_PRDY_nBSY_0 GPIO26_PRDY_nBSY_0 ++#else ++#define GPIO_GUMSTIX_nBVD1_0 GPIO111_nBVD1_0 ++#define GPIO_GUMSTIX_nSTSCHG_0 GPIO111_nSTSCHG_0 ++#define GPIO_GUMSTIX_nCD_0 GPIO104_nCD_0 ++#define GPIO_GUMSTIX_PRDY_nBSY_0 GPIO96_PRDY_nBSY_0 ++#endif ++#define GPIO_GUMSTIX_PRDY_nBSY_0_OLD GPIO109_PRDY_nBSY_0 ++ ++#define GUMSTIX_S0_nSTSCHG_IRQ IRQ_GPIO(GPIO_GUMSTIX_nSTSCHG_0) ++#define GUMSTIX_S0_nCD_IRQ IRQ_GPIO(GPIO_GUMSTIX_nCD_0) ++#define GUMSTIX_S0_PRDY_nBSY_IRQ IRQ_GPIO(GPIO_GUMSTIX_PRDY_nBSY_0) ++#define GUMSTIX_S0_PRDY_nBSY_OLD_IRQ IRQ_GPIO(GPIO_GUMSTIX_PRDY_nBSY_0_OLD) ++ ++/* CF slot 1 */ ++#define GPIO18_nBVD1_1 18 ++#define GPIO18_nSTSCHG_1 GPIO18_nBVD1_1 ++#define GPIO36_nCD_1 36 ++#define GPIO27_PRDY_nBSY_1 27 ++ ++#define GPIO_GUMSTIX_nBVD1_1 GPIO18_nBVD1_1 ++#define GPIO_GUMSTIX_nSTSCHG_1 GPIO18_nSTSCHG_1 ++#define GPIO_GUMSTIX_nCD_1 GPIO36_nCD_1 ++#define GPIO_GUMSTIX_PRDY_nBSY_1 GPIO27_PRDY_nBSY_1 ++ ++#define GUMSTIX_S1_nSTSCHG_IRQ IRQ_GPIO(GPIO_GUMSTIX_nSTSCHG_1) ++#define GUMSTIX_S1_nCD_IRQ IRQ_GPIO(GPIO_GUMSTIX_nCD_1) ++#define GUMSTIX_S1_PRDY_nBSY_IRQ IRQ_GPIO(GPIO_GUMSTIX_PRDY_nBSY_1) ++ ++/* CF GPIO line modes */ ++#define GPIO_GUMSTIX_CF_RESET_MD ( GPIO_GUMSTIX_CF_RESET | GPIO_OUT ) ++#define GPIO_GUMSTIX_CF_OLD_RESET_MD ( GPIO_GUMSTIX_CF_OLD_RESET | GPIO_OUT ) ++#define GPIO_GUMSTIX_nSTSCHG_0_MD ( GPIO_GUMSTIX_nSTSCHG_0 | GPIO_IN ) ++#define GPIO_GUMSTIX_nCD_0_MD ( GPIO_GUMSTIX_nCD_0 | GPIO_IN ) ++#define GPIO_GUMSTIX_PRDY_nBSY_0_MD ( GPIO_GUMSTIX_PRDY_nBSY_0 | GPIO_IN ) ++#define GPIO_GUMSTIX_PRDY_nBSY_0_OLD_MD ( GPIO_GUMSTIX_PRDY_nBSY_0_OLD | GPIO_IN ) ++#define GPIO_GUMSTIX_nSTSCHG_1_MD ( GPIO_GUMSTIX_nSTSCHG_1 | GPIO_IN ) ++#define GPIO_GUMSTIX_nCD_1_MD ( GPIO_GUMSTIX_nCD_1 | GPIO_IN ) ++#define GPIO_GUMSTIX_PRDY_nBSY_1_MD ( GPIO_GUMSTIX_PRDY_nBSY_1 | GPIO_IN ) diff --git a/packages/linux/gumstix-kernel-2.6.21/mach-types-fix.patch b/packages/linux/gumstix-kernel-2.6.21/mach-types-fix.patch new file mode 100644 index 0000000000..550eb529ed --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/mach-types-fix.patch @@ -0,0 +1,13 @@ +Index: linux-2.6.21gum/arch/arm/tools/mach-types +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/tools/mach-types ++++ linux-2.6.21gum/arch/arm/tools/mach-types +@@ -387,7 +387,7 @@ s5c7375 ARCH_S5C7375 S5C7375 369 + spearhead ARCH_SPEARHEAD SPEARHEAD 370 + pantera ARCH_PANTERA PANTERA 371 + prayoglite ARCH_PRAYOGLITE PRAYOGLITE 372 +-gumstix ARCH_GUMSTIK GUMSTIK 373 ++gumstix ARCH_GUMSTIX GUMSTIX 373 + rcube ARCH_RCUBE RCUBE 374 + rea_olv ARCH_REA_OLV REA_OLV 375 + pxa_iphone ARCH_PXA_IPHONE PXA_IPHONE 376 diff --git a/packages/linux/gumstix-kernel-2.6.21/misalignment-handling.patch b/packages/linux/gumstix-kernel-2.6.21/misalignment-handling.patch new file mode 100644 index 0000000000..e6aefb997c --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/misalignment-handling.patch @@ -0,0 +1,38 @@ +Change the default alingment handling to not be silent failure +Index: linux-2.6.21gum/arch/arm/mm/alignment.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mm/alignment.c ++++ linux-2.6.21gum/arch/arm/mm/alignment.c +@@ -797,6 +797,8 @@ static int __init alignment_init(void) + res->write_proc = proc_alignment_write; + #endif + ++ ai_usermode = CONFIG_ALIGNMENT_HANDLING; ++ + hook_fault_code(1, do_alignment, SIGILL, "alignment exception"); + hook_fault_code(3, do_alignment, SIGILL, "alignment exception"); + +Index: linux-2.6.21gum/arch/arm/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/Kconfig ++++ linux-2.6.21gum/arch/arm/Kconfig +@@ -709,6 +709,19 @@ config ALIGNMENT_TRAP + correct operation of some network protocols. With an IP-only + configuration it is safe to say N, otherwise say Y. + ++config ALIGNMENT_HANDLING ++ hex "Userspace alignment trap handling" ++ default "0x3" ++ depends on ALIGNMENT_TRAP ++ help ++ How should we handle alignment errors in userspace by default? This is a bitfield where: ++ 0 - silently ignore alignment errors (will lead to unexpected results) ++ 1 - report alignment errors through printk (will lead to unexpected results, but you'll know about them) ++ 2 - fix the alignment and make things work properly (performance degradation for un-aligned code) ++ 4 - raise SIGBUS on alignment traps ++ A good number to choose is probably either 3 (work slowly but log message) or 5 (log message and SIGBUS). ++ You can change the behavior at runtime through /proc/cpu/alignment if you have PROC_FS enabled. ++ + endmenu + + menu "Boot options" diff --git a/packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch b/packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch new file mode 100644 index 0000000000..26dd970e3b --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/mmc-card-detect.patch @@ -0,0 +1,80 @@ +Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/gumstix.c ++++ linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +@@ -29,19 +29,55 @@ + + #include "generic.h" + +-static int gumstix_mci_init(struct device *dev, irqreturn_t (*lubbock_detect_int)(int, void *, struct pt_regs *), void *data) ++static struct pxamci_platform_data gumstix_mci_platform_data; ++ ++static int gumstix_mci_init(struct device *dev, irqreturn_t (*gumstix_detect_int)(int, void *, struct pt_regs *), void *data) + { +- // Set up MMC controller ++ int err; ++ + pxa_gpio_mode(GPIO6_MMCCLK_MD); + pxa_gpio_mode(GPIO53_MMCCLK_MD); + pxa_gpio_mode(GPIO8_MMCCS0_MD); + ++ pxa_gpio_mode(GUMSTIX_GPIO_nSD_DETECT | GPIO_IN); ++ set_irq_type(GUMSTIX_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE); ++ pxa_gpio_mode(GUMSTIX_GPIO_nSD_WP | GPIO_IN); ++ ++ gumstix_mci_platform_data.detect_delay = msecs_to_jiffies(250); ++ ++ err = request_irq(GUMSTIX_IRQ_GPIO_nSD_DETECT, gumstix_detect_int, SA_INTERRUPT, ++ "MMC card detect", data); ++ if (err) { ++ printk(KERN_ERR "gumstix_mci_init: MMC/SD: can't request MMC card detect IRQ\n"); ++ return -1; ++ } ++ ++ err = set_irq_type(GUMSTIX_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE); ++ + return 0; + } + ++static int gumstix_mci_get_ro(struct device *dev) ++{ ++#ifdef CONFIG_ARCH_GUMSTIX_VERDEX ++ return 0; // microSD is always writable on verdex ++#else ++ int ro; ++ ro = GPLR(GUMSTIX_GPIO_nSD_WP) & GPIO_bit(GUMSTIX_GPIO_nSD_WP); ++ return ro; ++#endif ++} ++ ++static void gumstix_mci_exit(struct device *dev, void *data) ++{ ++ free_irq(GUMSTIX_IRQ_GPIO_nSD_DETECT, data); ++} ++ + static struct pxamci_platform_data gumstix_mci_platform_data = { + .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, +- .init = &gumstix_mci_init, ++ .init = gumstix_mci_init, ++ .get_ro = gumstix_mci_get_ro, ++ .exit = gumstix_mci_exit, + }; + + static struct pxa2xx_udc_mach_info gumstix_udc_info __initdata = { +Index: linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h +=================================================================== +--- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/gumstix.h ++++ linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h +@@ -36,6 +36,12 @@ + #define GPIO_GUMSTIX_USB_GPIOx_CON_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_OUT) + #define GPIO_GUMSTIX_USB_GPIOx_DIS_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_IN) + ++/* ++ * SD/MMC definitions ++ */ ++#define GUMSTIX_GPIO_nSD_WP 22 /* SD Write Protect */ ++#define GUMSTIX_GPIO_nSD_DETECT 11 /* MMC/SD Card Detect */ ++#define GUMSTIX_IRQ_GPIO_nSD_DETECT IRQ_GPIO(GUMSTIX_GPIO_nSD_DETECT) + + /* + * SMC Ethernet definitions diff --git a/packages/linux/gumstix-kernel-2.6.21/modular-init-bluetooth.patch b/packages/linux/gumstix-kernel-2.6.21/modular-init-bluetooth.patch new file mode 100644 index 0000000000..62fd919661 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/modular-init-bluetooth.patch @@ -0,0 +1,108 @@ +Index: linux-2.6.21gum/net/bluetooth/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/net/bluetooth/Kconfig ++++ linux-2.6.21gum/net/bluetooth/Kconfig +@@ -30,6 +30,12 @@ menuconfig BT + Bluetooth kernel modules are provided in the BlueZ packages. + For more information, see . + ++config BT_GUMSTIX ++ tristate ++ default m if BT=m ++ default y if BT=y ++ depends on BT && ARCH_GUMSTIX ++ + config BT_L2CAP + tristate "L2CAP protocol support" + depends on BT +Index: linux-2.6.21gum/net/bluetooth/Makefile +=================================================================== +--- linux-2.6.21gum.orig/net/bluetooth/Makefile ++++ linux-2.6.21gum/net/bluetooth/Makefile +@@ -9,5 +9,6 @@ obj-$(CONFIG_BT_RFCOMM) += rfcomm/ + obj-$(CONFIG_BT_BNEP) += bnep/ + obj-$(CONFIG_BT_CMTP) += cmtp/ + obj-$(CONFIG_BT_HIDP) += hidp/ ++obj-$(CONFIG_BT_GUMSTIX)+= gumstix_bluetooth.o + + bluetooth-objs := af_bluetooth.o hci_core.o hci_conn.o hci_event.o hci_sock.o hci_sysfs.o lib.o +Index: linux-2.6.21gum/net/bluetooth/af_bluetooth.c +=================================================================== +--- linux-2.6.21gum.orig/net/bluetooth/af_bluetooth.c ++++ linux-2.6.21gum/net/bluetooth/af_bluetooth.c +@@ -327,12 +327,20 @@ static struct net_proto_family bt_sock_f + .create = bt_sock_create, + }; + ++#ifdef CONFIG_ARCH_GUMSTIX ++extern void gumstix_bluetooth_load(void); ++#endif ++ + static int __init bt_init(void) + { + int err; + + BT_INFO("Core ver %s", VERSION); + ++#ifdef CONFIG_ARCH_GUMSTIX ++ gumstix_bluetooth_load(); ++#endif ++ + err = bt_sysfs_init(); + if (err < 0) + return err; +Index: linux-2.6.21gum/net/bluetooth/gumstix_bluetooth.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/net/bluetooth/gumstix_bluetooth.c +@@ -0,0 +1,50 @@ ++/* ++ * Gumstix bluetooth module intialization driver ++ * ++ * Author: Craig Hughes ++ * Created: December 9, 2004 ++ * Copyright: (C) 2004 Craig Hughes ++ * ++ * 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 ++ ++static void gumstix_bluetooth_load(void) ++{ ++} ++ ++EXPORT_SYMBOL(gumstix_bluetooth_load); ++ ++int __init gumstix_bluetooth_init(void) ++{ ++ /* Set up GPIOs to use the BTUART */ ++ pxa_gpio_mode(GPIO42_HWRXD_MD); ++ pxa_gpio_mode(GPIO43_HWTXD_MD); ++ pxa_gpio_mode(GPIO44_HWCTS_MD); ++ pxa_gpio_mode(GPIO45_HWRTS_MD); ++ ++ return 0; ++} ++ ++void __exit gumstix_bluetooth_exit(void) ++{ ++} ++ ++module_init(gumstix_bluetooth_init); ++module_exit(gumstix_bluetooth_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Craig Hughes "); ++MODULE_DESCRIPTION("Gumstix board bluetooth module initialization driver"); ++MODULE_VERSION("1:0.1"); diff --git a/packages/linux/gumstix-kernel-2.6.21/modular-init-smc91x.patch b/packages/linux/gumstix-kernel-2.6.21/modular-init-smc91x.patch new file mode 100644 index 0000000000..98fdd4ca38 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/modular-init-smc91x.patch @@ -0,0 +1,203 @@ +Index: linux-2.6.21gum/drivers/net/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/Kconfig ++++ linux-2.6.21gum/drivers/net/Kconfig +@@ -836,6 +836,12 @@ config SMC91X + module, say M here and read as well + as . + ++config SMC91X_GUMSTIX ++ tristate ++ default m if SMC91X=m ++ default y if SMC91X=y ++ depends on SMC91X && ARCH_GUMSTIX ++ + config SMC9194 + tristate "SMC 9194 support" + depends on NET_VENDOR_SMC && (ISA || MAC && BROKEN) +Index: linux-2.6.21gum/drivers/net/Makefile +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/Makefile ++++ linux-2.6.21gum/drivers/net/Makefile +@@ -200,6 +200,7 @@ obj-$(CONFIG_PASEMI_MAC) += pasemi_mac.o + + obj-$(CONFIG_MACB) += macb.o + ++obj-$(CONFIG_SMC91X_GUMSTIX) += gumstix-smc91x.o + obj-$(CONFIG_ARM) += arm/ + obj-$(CONFIG_DEV_APPLETALK) += appletalk/ + obj-$(CONFIG_TR) += tokenring/ +Index: linux-2.6.21gum/drivers/net/smc91x.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/smc91x.c ++++ linux-2.6.21gum/drivers/net/smc91x.c +@@ -2373,6 +2373,10 @@ static struct platform_driver smc_driver + }, + }; + ++#ifdef CONFIG_ARCH_GUMSTIX ++extern void gumstix_smc91x_load(void); ++#endif ++ + static int __init smc_init(void) + { + #ifdef MODULE +@@ -2384,6 +2388,10 @@ static int __init smc_init(void) + #endif + #endif + ++#ifdef CONFIG_ARCH_GUMSTIX ++ gumstix_smc91x_load(); ++#endif ++ + return platform_driver_register(&smc_driver); + } + +Index: linux-2.6.21gum/drivers/net/gumstix-smc91x.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/net/gumstix-smc91x.c +@@ -0,0 +1,143 @@ ++/* ++ * Gumstix SMC91C111 chip intialization driver ++ * ++ * Author: Craig Hughes ++ * Created: December 9, 2004 ++ * Copyright: (C) 2004 Craig Hughes ++ * ++ * 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 ++ ++#include ++ ++#define SMC_DEBUG 0 ++#include ++#include "smc91x.h" ++ ++static struct resource gumstix_smc91x0_resources[] = { ++ [0] = { ++ .name = "smc91x-regs", ++ .start = PXA_CS1_PHYS + 0x00000300, ++ .end = PXA_CS1_PHYS + 0x000fffff, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = GUMSTIX_ETH0_IRQ, ++ .end = GUMSTIX_ETH0_IRQ, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct resource gumstix_smc91x1_resources[] = { ++ [0] = { ++ .name = "smc91x-regs", ++ .start = PXA_CS2_PHYS + 0x00000300, ++ .end = PXA_CS2_PHYS + 0x000fffff, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = GUMSTIX_ETH1_IRQ, ++ .end = GUMSTIX_ETH1_IRQ, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct platform_device gumstix_smc91x0_device = { ++ .name = "smc91x", ++ .id = 0, ++ .num_resources = ARRAY_SIZE(gumstix_smc91x0_resources), ++ .resource = gumstix_smc91x0_resources, ++}; ++ ++static struct platform_device gumstix_smc91x1_device = { ++ .name = "smc91x", ++ .id = 1, ++ .num_resources = ARRAY_SIZE(gumstix_smc91x1_resources), ++ .resource = gumstix_smc91x1_resources, ++}; ++ ++static struct platform_device *smc91x_devices[] = { ++ &gumstix_smc91x0_device, ++ &gumstix_smc91x1_device, ++}; ++ ++/* First we're going to test if there's a 2nd SMC91C111, and if not, then we'll free up those resources and the GPIO lines ++ * that it would otherwise use. We have no choice but to probe by doing: ++ * Set nCS2 to CS2 mode ++ * Set the reset line to GPIO out mode, and pull it high, then drop it low (to trigger reset) ++ * Read from the memory space to check for the sentinel sequence identifying a likely SMC91C111 device ++ */ ++int __init gumstix_smc91x_init(void) ++{ ++ unsigned int val, num_devices=ARRAY_SIZE(smc91x_devices); ++ void *ioaddr; ++ ++ /* Set up nPWE */ ++ pxa_gpio_mode(GPIO49_nPWE_MD); ++ ++ pxa_gpio_mode(GPIO78_nCS_2_MD); ++ // If either if statement fails, then we'll drop out and turn_off_eth1, ++ // if both succeed, then we'll skip that and just proceed with 2 cards ++ if(request_mem_region(gumstix_smc91x1_resources[0].start, SMC_IO_EXTENT, "smc91x probe")) ++ { ++ ioaddr = ioremap(gumstix_smc91x1_resources[0].start, SMC_IO_EXTENT); ++ val = ioread16(ioaddr + BANK_SELECT); ++ iounmap(ioaddr); ++ release_mem_region(gumstix_smc91x1_resources[0].start, SMC_IO_EXTENT); ++ if ((val & 0xFF00) == 0x3300) { ++ goto proceed; ++ } ++ } ++ ++turn_off_eth1: ++ // This is apparently not an SMC91C111 ++ // So, let's decrement the number of devices to request, and reset the GPIO lines to GPIO IN mode ++ num_devices--; ++ smc91x_devices[1] = NULL; ++ pxa_gpio_mode(78 | GPIO_IN); ++ ++proceed: ++ pxa_gpio_mode(GPIO15_nCS_1_MD); ++ ++ if(smc91x_devices[1]) pxa_gpio_mode(GPIO_GUMSTIX_ETH1_RST_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_ETH0_RST_MD); ++ if(smc91x_devices[1]) GPSR(GPIO_GUMSTIX_ETH1_RST) = GPIO_bit(GPIO_GUMSTIX_ETH1_RST); ++ GPSR(GPIO_GUMSTIX_ETH0_RST) = GPIO_bit(GPIO_GUMSTIX_ETH0_RST); ++ udelay(1); // Hold RESET for at least 100ns ++ if(smc91x_devices[1]) GPCR(GPIO_GUMSTIX_ETH1_RST) = GPIO_bit(GPIO_GUMSTIX_ETH1_RST); ++ GPCR(GPIO_GUMSTIX_ETH0_RST) = GPIO_bit(GPIO_GUMSTIX_ETH0_RST); ++ msleep(50); ++ ++ return platform_add_devices(smc91x_devices, num_devices); ++} ++ ++void __exit gumstix_smc91x_exit(void) ++{ ++ if(smc91x_devices[1] != NULL) platform_device_unregister(&gumstix_smc91x1_device); ++ platform_device_unregister(&gumstix_smc91x0_device); ++} ++ ++void gumstix_smc91x_load(void) {} ++EXPORT_SYMBOL(gumstix_smc91x_load); ++ ++module_init(gumstix_smc91x_init); ++module_exit(gumstix_smc91x_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Craig Hughes "); ++MODULE_DESCRIPTION("Gumstix board SMC91C111 chip initialization driver"); ++MODULE_VERSION("1:0.1"); diff --git a/packages/linux/gumstix-kernel-2.6.21/modular-init-usb-gadget.patch b/packages/linux/gumstix-kernel-2.6.21/modular-init-usb-gadget.patch new file mode 100644 index 0000000000..e3ee0d6a7d --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/modular-init-usb-gadget.patch @@ -0,0 +1,106 @@ +Index: linux-2.6.21gum/drivers/usb/gadget/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/Kconfig ++++ linux-2.6.21gum/drivers/usb/gadget/Kconfig +@@ -56,6 +56,14 @@ config USB_GADGET_DEBUG_FILES + config USB_GADGET_SELECTED + boolean + ++config USB_GADGET_GUMSTIX ++ tristate ++ default m if USB_GADGET=m ++ default y if USB_GADGET=y ++ depends on USB_GADGET && ARCH_GUMSTIX ++ help ++ USB Gadget support for the Gumstix platform ++ + # + # USB Peripheral Controller Support + # +Index: linux-2.6.21gum/drivers/usb/gadget/Makefile +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/Makefile ++++ linux-2.6.21gum/drivers/usb/gadget/Makefile +@@ -8,6 +8,7 @@ obj-$(CONFIG_USB_GOKU) += goku_udc.o + obj-$(CONFIG_USB_OMAP) += omap_udc.o + obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o + obj-$(CONFIG_USB_AT91) += at91_udc.o ++obj-$(CONFIG_USB_GADGET_GUMSTIX) += gumstix_gadget.o + + # + # USB gadget drivers +Index: linux-2.6.21gum/drivers/usb/gadget/pxa2xx_udc.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/pxa2xx_udc.c ++++ linux-2.6.21gum/drivers/usb/gadget/pxa2xx_udc.c +@@ -2752,8 +2752,16 @@ static struct platform_driver udc_driver + }, + }; + ++#ifdef CONFIG_ARCH_GUMSTIX ++extern void gumstix_usb_gadget_load(void); ++#endif ++ + static int __init udc_init(void) + { ++#ifdef CONFIG_ARCH_GUMSTIX ++ gumstix_usb_gadget_load(); ++#endif ++ + printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION); + return platform_driver_register(&udc_driver); + } +Index: linux-2.6.21gum/drivers/usb/gadget/gumstix_gadget.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/usb/gadget/gumstix_gadget.c +@@ -0,0 +1,49 @@ ++/* ++ * Gumstix USB gadget intialization driver ++ * ++ * Author: Craig Hughes ++ * Created: December 9, 2004 ++ * Copyright: (C) 2004 Craig Hughes ++ * ++ * 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 ++ ++int __init gumstix_usb_gadget_init(void) ++{ ++ pxa_gpio_mode(GPIO_GUMSTIX_USB_GPIOx_DIS_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_USB_GPIOn_MD); ++ ++ set_irq_type(GUMSTIX_USB_INTR_IRQ, IRQT_BOTHEDGE); ++ ++ return 0; ++} ++ ++void __exit gumstix_usb_gadget_exit(void) ++{ ++} ++ ++void gumstix_usb_gadget_load(void) {} ++EXPORT_SYMBOL(gumstix_usb_gadget_load); ++ ++module_init(gumstix_usb_gadget_init); ++module_exit(gumstix_usb_gadget_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Craig Hughes "); ++MODULE_DESCRIPTION("Gumstix board USB gadget initialization driver"); ++MODULE_VERSION("1:0.1"); diff --git a/packages/linux/gumstix-kernel-2.6.21/pcm-gcc-411-bugfix.patch b/packages/linux/gumstix-kernel-2.6.21/pcm-gcc-411-bugfix.patch new file mode 100644 index 0000000000..50a26cbdf5 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/pcm-gcc-411-bugfix.patch @@ -0,0 +1,60 @@ +Index: linux-2.6.21gum/include/sound/pcm_params.h +=================================================================== +--- linux-2.6.21gum.orig/include/sound/pcm_params.h ++++ linux-2.6.21gum/include/sound/pcm_params.h +@@ -179,16 +179,8 @@ static inline int snd_mask_single(const + return 1; + } + +-static inline int snd_mask_refine(struct snd_mask *mask, +- const struct snd_mask *v) +-{ +- struct snd_mask old; +- snd_mask_copy(&old, mask); +- snd_mask_intersect(mask, v); +- if (snd_mask_empty(mask)) +- return -EINVAL; +- return !snd_mask_eq(mask, &old); +-} ++void snd_mask_print( const struct snd_mask *m1, const struct snd_mask *m2 ); ++int snd_mask_refine(struct snd_mask *mask, const struct snd_mask *v); + + static inline int snd_mask_refine_first(struct snd_mask *mask) + { +Index: linux-2.6.21gum/sound/core/pcm_lib.c +=================================================================== +--- linux-2.6.21gum.orig/sound/core/pcm_lib.c ++++ linux-2.6.21gum/sound/core/pcm_lib.c +@@ -2128,3 +2128,18 @@ snd_pcm_sframes_t snd_pcm_lib_readv(stru + } + + EXPORT_SYMBOL(snd_pcm_lib_readv); ++ ++int snd_mask_refine(struct snd_mask *mask, ++ const struct snd_mask *v) ++{ ++ struct snd_mask old; ++ snd_mask_copy(&old, mask); ++ snd_mask_print(mask, v); ++ snd_mask_intersect(mask, v); ++ snd_mask_print(mask, v); ++ if (snd_mask_empty(mask)) ++ return -EINVAL; ++ return !snd_mask_eq(mask, &old); ++} ++ ++EXPORT_SYMBOL(snd_mask_refine); +Index: linux-2.6.21gum/sound/core/pcm_native.c +=================================================================== +--- linux-2.6.21gum.orig/sound/core/pcm_native.c ++++ linux-2.6.21gum/sound/core/pcm_native.c +@@ -3450,3 +3450,9 @@ const struct file_operations snd_pcm_f_o + .fasync = snd_pcm_fasync, + } + }; ++ ++void snd_mask_print( const struct snd_mask *m1, const struct snd_mask *m2 ) ++{ ++// printk( "0x%08x %08x v: 0x%08x %08x\n", m1->bits[1], m1->bits[0], m2->bits[1], m2->bits[0] ); ++} ++ diff --git a/packages/linux/gumstix-kernel-2.6.21/proc-gpio.patch b/packages/linux/gumstix-kernel-2.6.21/proc-gpio.patch new file mode 100644 index 0000000000..51c5c7242b --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/proc-gpio.patch @@ -0,0 +1,348 @@ +Index: linux-2.6.21gum/arch/arm/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/Kconfig ++++ linux-2.6.21gum/arch/arm/Kconfig +@@ -505,6 +505,8 @@ config PCI_HOST_VIA82C505 + depends on PCI && ARCH_SHARK + default y + ++source "drivers/gpio/Kconfig" ++ + source "drivers/pci/Kconfig" + + source "drivers/pcmcia/Kconfig" +Index: linux-2.6.21gum/drivers/Makefile +=================================================================== +--- linux-2.6.21gum.orig/drivers/Makefile ++++ linux-2.6.21gum/drivers/Makefile +@@ -81,3 +81,4 @@ obj-$(CONFIG_GENERIC_TIME) += clocksourc + obj-$(CONFIG_DMA_ENGINE) += dma/ + obj-$(CONFIG_HID) += hid/ + obj-$(CONFIG_PPC_PS3) += ps3/ ++obj-$(CONFIG_PROC_GPIO) += gpio/ +Index: linux-2.6.21gum/drivers/gpio/Kconfig +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/gpio/Kconfig +@@ -0,0 +1,12 @@ ++config PROC_GPIO ++ tristate "GPIO /proc interface" ++ depends on PXA25x || PXA27x ++ help ++ This enables an interface under /proc/gpio which allows reading or setting ++ of any GPIO, and also changing the GPIO alt function mode of any line. ++ ++config PROC_GPIO_DEBUG ++ boolean "Enable /proc/gpio debug logging" ++ depends on PROC_GPIO ++ help ++ This enables printk logging of activity done through /proc/gpio +Index: linux-2.6.21gum/drivers/gpio/Makefile +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/gpio/Makefile +@@ -0,0 +1,3 @@ ++# Expose GPIOs under /proc ++obj-$(CONFIG_PROC_GPIO) += proc_gpio.o ++ +Index: linux-2.6.21gum/drivers/gpio/proc_gpio.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/gpio/proc_gpio.c +@@ -0,0 +1,296 @@ ++/* ++ * ++ * PXA25x GPIOs exposed under /proc for reading and writing ++ * They will show up under /proc/gpio/NN ++ * ++ * Based on patch 1773/1 in the arm kernel patch repository at arm.linux.co.uk ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++static struct proc_dir_entry *proc_gpio_parent; ++static struct proc_dir_entry *proc_gpios[PXA_LAST_GPIO + 1]; ++ ++typedef struct ++{ ++ int gpio; ++ char name[32]; ++} gpio_summary_type; ++ ++static gpio_summary_type gpio_summaries[PXA_LAST_GPIO + 1]; ++ ++static int proc_gpio_write(struct file *file, const char __user *buf, ++ unsigned long count, void *data) ++{ ++ char *cur, lbuf[count + 1]; ++ gpio_summary_type *summary = data; ++ u32 altfn, direction, setclear, gafr; ++ ++ if (!capable(CAP_SYS_ADMIN)) ++ return -EACCES; ++ ++ memset(lbuf, 0, count + 1); ++ ++ if (copy_from_user(lbuf, buf, count)) ++ return -EFAULT; ++ ++ cur = lbuf; ++ ++ // Initialize to current state ++ altfn = ((GAFR(summary->gpio) >> ((summary->gpio & 0x0f) << 0x01)) & 0x03); ++ direction = GPDR(summary->gpio) & GPIO_bit(summary->gpio); ++ setclear = GPLR(summary->gpio) & GPIO_bit(summary->gpio); ++ while(1) ++ { ++ // We accept options: {GPIO|AF1|AF2|AF3}, {set|clear}, {in|out} ++ // Anything else is an error ++ while(cur[0] && (isspace(cur[0]) || ispunct(cur[0]))) cur = &(cur[1]); ++ ++ if('\0' == cur[0]) break; ++ ++ // Ok, so now we're pointing at the start of something ++ switch(cur[0]) ++ { ++ case 'G': ++ // Check that next is "PIO" -- '\0' will cause safe short-circuit if end of buf ++ if(!(cur[1] == 'P' && cur[2] == 'I' && cur[3] == 'O')) goto parse_error; ++ // Ok, so set this GPIO to GPIO (non-ALT) function ++ altfn = 0; ++ cur = &(cur[4]); ++ break; ++ case 'A': ++ if(!(cur[1] == 'F' && cur[2] >= '1' && cur[2] <= '3')) goto parse_error; ++ altfn = cur[2] - '0'; ++ cur = &(cur[3]); ++ break; ++ case 's': ++ if(!(cur[1] == 'e' && cur[2] == 't')) goto parse_error; ++ setclear = 1; ++ cur = &(cur[3]); ++ break; ++ case 'c': ++ if(!(cur[1] == 'l' && cur[2] == 'e' && cur[3] == 'a' && cur[4] == 'r')) goto parse_error; ++ setclear = 0; ++ cur = &(cur[5]); ++ break; ++ case 'i': ++ if(!(cur[1] == 'n')) goto parse_error; ++ direction = 0; ++ cur = &(cur[2]); ++ break; ++ case 'o': ++ if(!(cur[1] == 'u' && cur[2] == 't')) goto parse_error; ++ direction = 1; ++ cur = &(cur[3]); ++ break; ++ default: goto parse_error; ++ } ++ } ++ // Ok, now set gpio mode and value ++ if(direction) ++ GPDR(summary->gpio) |= GPIO_bit(summary->gpio); ++ else ++ GPDR(summary->gpio) &= ~GPIO_bit(summary->gpio); ++ ++ gafr = GAFR(summary->gpio) & ~(0x3 << (((summary->gpio) & 0xf)*2)); ++ GAFR(summary->gpio) = gafr | (altfn << (((summary->gpio) & 0xf)*2)); ++ ++ if(direction && !altfn) ++ { ++ if(setclear) GPSR(summary->gpio) = GPIO_bit(summary->gpio); ++ else GPCR(summary->gpio) = GPIO_bit(summary->gpio); ++ } ++ ++#ifdef CONFIG_PROC_GPIO_DEBUG ++ printk(KERN_INFO "Set (%s,%s,%s) via /proc/gpio/%s\n",altfn ? (altfn == 1 ? "AF1" : (altfn == 2 ? "AF2" : "AF3")) : "GPIO", ++ direction ? "out" : "in", ++ setclear ? "set" : "clear", ++ summary->name); ++#endif ++ ++ return count; ++ ++parse_error: ++ printk(KERN_CRIT "Parse error: Expect \"[GPIO|AF1|AF2|AF3]|[set|clear]|[in|out] ...\"\n"); ++ return -EINVAL; ++} ++ ++static int proc_gpio_read(char *page, char **start, off_t off, ++ int count, int *eof, void *data) ++{ ++ char *p = page; ++ gpio_summary_type *summary = data; ++ int len, i, af; ++ i = summary->gpio; ++ ++ p += sprintf(p, "%d\t%s\t%s\t%s\n", i, ++ (af = ((GAFR(i) >> ((i & 0x0f) << 0x01)) & 0x03)) ? (af == 1 ? "AF1" : (af == 2 ? "AF2" : "AF3")) : "GPIO", ++ (GPDR(i) & GPIO_bit(i)) ? "out" : "in", ++ (GPLR(i) & GPIO_bit(i)) ? "set" : "clear"); ++ ++ len = (p - page) - off; ++ ++ if(len < 0) ++ { ++ len = 0; ++ } ++ ++ *eof = (len <= count) ? 1 : 0; ++ *start = page + off; ++ ++ return len; ++} ++ ++ ++#ifdef CONFIG_PXA25x ++static const char const *GAFR_DESC[] = { "GAFR0_L", "GAFR0_U", "GAFR1_L", "GAFR1_U", "GAFR2_L", "GAFR2_U" }; ++#elif defined(CONFIG_PXA27x) ++static const char const *GAFR_DESC[] = { "GAFR0_L", "GAFR0_U", "GAFR1_L", "GAFR1_U", "GAFR2_L", "GAFR2_U", "GAFR3_L", "GAFR3_U" }; ++#endif ++ ++static int proc_gafr_read(char *page, char **start, off_t off, ++ int count, int *eof, void *data) ++{ ++ char *p = page; ++ int i, len; ++ ++ for(i=0; inext) { ++ if (( proc_gpio_parent->namelen == 4 ) && ( memcmp(proc_gpio_parent->name, "gpio", 4 ) == 0 )) ++ break; ++ } ++ ++ // proc_gpio_parent will be non-NULL if the directory already exists ++ ++ if (!proc_gpio_parent) { ++ proc_gpio_parent = proc_gpio_parent = create_proc_entry("gpio", S_IFDIR | S_IRUGO | S_IXUGO, NULL); ++ } ++ ++ if(!proc_gpio_parent) return 0; ++ ++ for(i=0; i < (PXA_LAST_GPIO+1); i++) ++ { ++ gpio_summaries[i].gpio = i; ++ sprintf(gpio_summaries[i].name, "GPIO%d", i); ++ proc_gpios[i] = create_proc_entry(gpio_summaries[i].name, 0644, proc_gpio_parent); ++ if(proc_gpios[i]) ++ { ++ proc_gpios[i]->data = &gpio_summaries[i]; ++ proc_gpios[i]->read_proc = proc_gpio_read; ++ proc_gpios[i]->write_proc = proc_gpio_write; ++ } ++ } ++ ++ create_proc_read_entry("GAFR", 0444, proc_gpio_parent, proc_gafr_read, NULL); ++ create_proc_read_entry("GPDR", 0444, proc_gpio_parent, proc_gpdr_read, NULL); ++ create_proc_read_entry("GPLR", 0444, proc_gpio_parent, proc_gplr_read, NULL); ++ ++ return 0; ++} ++ ++static void gpio_exit(void) ++{ ++ int i; ++ ++ remove_proc_entry("GAFR", proc_gpio_parent); ++ remove_proc_entry("GPDR", proc_gpio_parent); ++ remove_proc_entry("GPLR", proc_gpio_parent); ++ ++ for(i=0; i < (PXA_LAST_GPIO+1); i++) ++ { ++ if(proc_gpios[i]) remove_proc_entry(gpio_summaries[i].name, proc_gpio_parent); ++ } ++ ++ if (proc_gpio_parent) ++ { ++ if (!proc_gpio_parent->subdir) ++ { ++ // Only remove /proc/gpio if it's empty. ++ remove_proc_entry( "gpio", NULL ); ++ } ++ } ++ ++} ++ ++module_init(gpio_init); ++module_exit(gpio_exit); ++MODULE_LICENSE("GPL"); diff --git a/packages/linux/gumstix-kernel-2.6.21/pxa-regs-additions.patch b/packages/linux/gumstix-kernel-2.6.21/pxa-regs-additions.patch new file mode 100644 index 0000000000..3d32a188bb --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/pxa-regs-additions.patch @@ -0,0 +1,28 @@ +Index: linux-2.6.21gum/include/asm-arm/arch-pxa/pxa-regs.h +=================================================================== +--- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/pxa-regs.h ++++ linux-2.6.21gum/include/asm-arm/arch-pxa/pxa-regs.h +@@ -1316,6 +1316,7 @@ + #define GPIO77_LCD_ACBIAS 77 /* LCD AC Bias */ + #define GPIO78_nCS_2 78 /* chip select 2 */ + #define GPIO79_nCS_3 79 /* chip select 3 */ ++#define GPIO79_pSKTSEL 79 /* Socket Select for Card Space (PXA27x) */ + #define GPIO80_nCS_4 80 /* chip select 4 */ + #define GPIO81_NSCLK 81 /* NSSP clock */ + #define GPIO82_NSFRM 82 /* NSSP Frame */ +@@ -1324,6 +1325,7 @@ + #define GPIO85_nPCE_1 85 /* Card Enable for Card Space (PXA27x) */ + #define GPIO92_MMCDAT0 92 /* MMC DAT0 (PXA27x) */ + #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */ ++#define GPIO105_nPCE_2 105 /* Card Enable for Card Space (PXA27x) */ + #define GPIO109_MMCDAT1 109 /* MMC DAT1 (PXA27x) */ + #define GPIO110_MMCDAT2 110 /* MMC DAT2 (PXA27x) */ + #define GPIO110_MMCCS0 110 /* MMC Chip Select 0 (PXA27x) */ +@@ -1468,6 +1470,7 @@ + #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT) + #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT) + #define GPIO104_pSKTSEL_MD (104 | GPIO_ALT_FN_1_OUT) ++#define GPIO105_nPCE_2_MD (105 | GPIO_ALT_FN_1_OUT) + #define GPIO109_MMCDAT1_MD (109 | GPIO_ALT_FN_1_OUT) + #define GPIO110_MMCDAT2_MD (110 | GPIO_ALT_FN_1_OUT) + #define GPIO110_MMCCS0_MD (110 | GPIO_ALT_FN_1_OUT) diff --git a/packages/linux/gumstix-kernel-2.6.21/pxa-regs-fixup.patch b/packages/linux/gumstix-kernel-2.6.21/pxa-regs-fixup.patch new file mode 100644 index 0000000000..6ab30c0e41 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/pxa-regs-fixup.patch @@ -0,0 +1,12 @@ +Index: linux-2.6.21gum/include/asm-arm/arch-pxa/udc.h +=================================================================== +--- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/udc.h ++++ linux-2.6.21gum/include/asm-arm/arch-pxa/udc.h +@@ -5,6 +5,7 @@ + * USB Device Controller (UDC) is wired. + * + */ ++#include + #include + + extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info); diff --git a/packages/linux/gumstix-kernel-2.6.21/pxa2xx_udc.patch b/packages/linux/gumstix-kernel-2.6.21/pxa2xx_udc.patch new file mode 100644 index 0000000000..4489e701bf --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/pxa2xx_udc.patch @@ -0,0 +1,65 @@ +Index: linux-2.6.21gum/drivers/usb/gadget/pxa2xx_udc.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/pxa2xx_udc.c ++++ linux-2.6.21gum/drivers/usb/gadget/pxa2xx_udc.c +@@ -51,6 +51,7 @@ + #include + #include + #include ++#include + #ifdef CONFIG_ARCH_PXA + #include + #endif +@@ -101,6 +102,10 @@ static const char ep0name [] = "ep0"; + + #endif + ++#ifdef CONFIG_ARCH_GUMSTIX ++#undef CONFIG_USB_PXA2XX_SMALL ++#endif ++ + #include "pxa2xx_udc.h" + + +@@ -2541,6 +2546,41 @@ static int __init pxa2xx_udc_probe(struc + } + #endif + ++ /* Reset UDCCS register to be able to recover from whatever ++ * state UDC was previously in. */ ++ *dev->ep[ 2].reg_udccs = UDCCS_BO_RPC | UDCCS_BO_SST; ++#ifndef CONFIG_USB_PXA2XX_SMALL ++ *dev->ep[ 7].reg_udccs = UDCCS_BO_RPC | UDCCS_BO_SST; ++ *dev->ep[12].reg_udccs = UDCCS_BO_RPC | UDCCS_BO_SST; ++#endif ++ ++ *dev->ep[ 1].reg_udccs = UDCCS_BI_TPC | UDCCS_BI_FTF | ++ UDCCS_BI_TUR | UDCCS_BI_SST | UDCCS_BI_TSP; ++#ifndef CONFIG_USB_PXA2XX_SMALL ++ *dev->ep[ 6].reg_udccs = UDCCS_BI_TPC | UDCCS_BI_FTF | ++ UDCCS_BI_TUR | UDCCS_BI_SST | UDCCS_BI_TSP; ++ *dev->ep[11].reg_udccs = UDCCS_BI_TPC | UDCCS_BI_FTF | ++ UDCCS_BI_TUR | UDCCS_BI_SST | UDCCS_BI_TSP; ++ ++ *dev->ep[ 3].reg_udccs = UDCCS_II_TPC | UDCCS_II_FTF | ++ UDCCS_II_TUR | UDCCS_II_TSP; ++ *dev->ep[ 8].reg_udccs = UDCCS_II_TPC | UDCCS_II_FTF | ++ UDCCS_II_TUR | UDCCS_II_TSP; ++ *dev->ep[13].reg_udccs = UDCCS_II_TPC | UDCCS_II_FTF | ++ UDCCS_II_TUR | UDCCS_II_TSP; ++ ++ *dev->ep[ 4].reg_udccs = UDCCS_IO_RPC | UDCCS_IO_ROF; ++ *dev->ep[ 9].reg_udccs = UDCCS_IO_RPC | UDCCS_IO_ROF; ++ *dev->ep[11].reg_udccs = UDCCS_IO_RPC | UDCCS_IO_ROF; ++ ++ *dev->ep[ 5].reg_udccs = UDCCS_INT_TPC | UDCCS_INT_FTF | ++ UDCCS_INT_TUR | UDCCS_INT_SST; ++ *dev->ep[10].reg_udccs = UDCCS_INT_TPC | UDCCS_INT_FTF | ++ UDCCS_INT_TUR | UDCCS_INT_SST; ++ *dev->ep[15].reg_udccs = UDCCS_INT_TPC | UDCCS_INT_FTF | ++ UDCCS_INT_TUR | UDCCS_INT_SST; ++#endif ++ + /* other non-static parts of init */ + dev->dev = &pdev->dev; + dev->mach = pdev->dev.platform_data; diff --git a/packages/linux/gumstix-kernel-2.6.21/pxafb-18bpp-mode.patch b/packages/linux/gumstix-kernel-2.6.21/pxafb-18bpp-mode.patch new file mode 100644 index 0000000000..e39564bdb5 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/pxafb-18bpp-mode.patch @@ -0,0 +1,433 @@ +Index: linux-2.6.21gum/drivers/video/pxafb.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/video/pxafb.c ++++ linux-2.6.21gum/drivers/video/pxafb.c +@@ -191,6 +191,10 @@ static int pxafb_bpp_to_lccr3(struct fb_ + case 4: ret = LCCR3_4BPP; break; + case 8: ret = LCCR3_8BPP; break; + case 16: ret = LCCR3_16BPP; break; ++ case 18: ret = (var->nonstd == 24 ? LCCR3_18BPP_PACKED : LCCR3_18BPP); break; ++ case 19: ret = (var->nonstd == 24 ? LCCR3_19BPP_PACKED : LCCR3_19BPP); break; ++ case 24: ret = LCCR3_24BPP; break; ++ case 25: ret = LCCR3_25BPP; break; + } + return ret; + } +@@ -204,11 +208,12 @@ static int pxafb_bpp_to_lccr3(struct fb_ + */ + static unsigned int pxafb_display_dma_period(struct fb_var_screeninfo *var) + { +- /* +- * Period = pixclock * bits_per_byte * bytes_per_transfer +- * / memory_bits_per_pixel; +- */ +- return var->pixclock * 8 * 16 / var->bits_per_pixel; ++ /* ++ * Period = pixclock * bits_per_byte * bytes_per_transfer ++ * / memory_bits_per_pixel; ++ */ ++ struct pxafb_mach_info *inf = fbi->dev->platform_data; ++ return var->pixclock * 8 * 16 / (var->nonstd ? var->nonstd : var->bits_per_pixel); + } + + extern unsigned int get_clk_frequency_khz(int info); +@@ -307,6 +312,26 @@ static int pxafb_check_var(struct fb_var + var->green.offset = 5; var->green.length = 6; + var->blue.offset = 0; var->blue.length = 5; + var->transp.offset = var->transp.length = 0; ++ } else if (var->bits_per_pixel == 18) { ++ var->transp.offset = var->transp.length = 0; ++ var->red.offset = 12; var->red.length=6; ++ var->green.offset = 6; var->green.length=6; ++ var->blue.offset = 0; var->blue.length=6; ++ } else if (var->bits_per_pixel == 19) { ++ var->transp.offset = 18; var->transp.length = 1; ++ var->red.offset = 12; var->red.length=6; ++ var->green.offset = 6; var->green.length=6; ++ var->blue.offset = 0; var->blue.length=6; ++ } else if (var->bits_per_pixel == 24) { ++ var->transp.offset = var->transp.length = 0; ++ var->red.offset = 16; var->red.length=8; ++ var->green.offset = 8; var->green.length=8; ++ var->blue.offset = 0; var->blue.length=8; ++ } else if (var->bits_per_pixel == 25) { ++ var->transp.offset = 18; var->transp.length = 1; ++ var->red.offset = 16; var->red.length=8; ++ var->green.offset = 8; var->green.length=8; ++ var->blue.offset = 0; var->blue.length=8; + } else { + var->red.offset = var->green.offset = var->blue.offset = var->transp.offset = 0; + var->red.length = 8; +@@ -342,7 +367,7 @@ static int pxafb_set_par(struct fb_info + + pr_debug("pxafb: set_par\n"); + +- if (var->bits_per_pixel == 16) ++ if (var->bits_per_pixel >= 16) + fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR; + else if (!fbi->cmap_static) + fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; +@@ -355,9 +380,10 @@ static int pxafb_set_par(struct fb_info + fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR; + } + +- fbi->fb.fix.line_length = var->xres_virtual * +- var->bits_per_pixel / 8; +- if (var->bits_per_pixel == 16) ++ fbi->fb.fix.line_length = var->xres_virtual * ++ (var->nonstd ? var->nonstd : var->bits_per_pixel) / 8; ++ ++ if (var->bits_per_pixel >= 16) + fbi->palette_size = 0; + else + fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel; +@@ -374,7 +400,7 @@ static int pxafb_set_par(struct fb_info + */ + pxafb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR); + +- if (fbi->fb.var.bits_per_pixel == 16) ++ if (fbi->fb.var.bits_per_pixel >= 16) + fb_dealloc_cmap(&fbi->fb.cmap); + else + fb_alloc_cmap(&fbi->fb.cmap, 1<fb.var.bits_per_pixel, 0); +@@ -584,6 +610,14 @@ static int pxafb_activate_var(struct fb_ + case 8: + case 16: + break; ++ case 18: ++ case 19: ++ case 24: ++ case 25: ++ if(var->nonstd) break; ++ printk(KERN_ERR "%s: must specify nonstd when bit depth==%d\n", ++ fbi->fb.fix.id, var->bits_per_pixel); ++ break; + default: + printk(KERN_ERR "%s: invalid bit depth %d\n", + fbi->fb.fix.id, var->bits_per_pixel); +@@ -679,7 +713,7 @@ static int pxafb_activate_var(struct fb_ + fbi->dmadesc_palette_cpu->fidr = 0; + fbi->dmadesc_palette_cpu->ldcmd = (fbi->palette_size * 2) | LDCMD_PAL; + +- if (var->bits_per_pixel == 16) { ++ if (var->bits_per_pixel >= 16) { + /* palette shouldn't be loaded in true-color mode */ + fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_fbhigh_dma; + fbi->fdadr0 = fbi->dmadesc_fbhigh_dma; /* no pal just fbhigh */ +@@ -785,8 +819,19 @@ static void pxafb_setup_gpio(struct pxaf + return; + } + +- for (gpio = 58; ldd_bits; gpio++, ldd_bits--) ++ for (gpio = 58; min(ldd_bits,16); gpio++, ldd_bits--) + pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT); ++ ++ switch(fbi->fb.var.bits_per_pixel) ++ { ++ case 25: ++ case 24: ++ case 19: ++ case 18: ++ pxa_gpio_mode(GPIO86_LDD_16_MD); ++ pxa_gpio_mode(GPIO87_LDD_17_MD); ++ default: break; ++ } + pxa_gpio_mode(GPIO74_LCD_FCLK_MD); + pxa_gpio_mode(GPIO75_LCD_LCLK_MD); + pxa_gpio_mode(GPIO76_LCD_PCLK_MD); +@@ -1135,7 +1180,7 @@ static struct pxafb_info * __init pxafb_ + fbi->fb.fix.ywrapstep = 0; + fbi->fb.fix.accel = FB_ACCEL_NONE; + +- fbi->fb.var.nonstd = 0; ++ fbi->fb.var.nonstd = mode->nonstd; + fbi->fb.var.activate = FB_ACTIVATE_NOW; + fbi->fb.var.height = -1; + fbi->fb.var.width = -1; +@@ -1161,7 +1206,7 @@ static struct pxafb_info * __init pxafb_ + fbi->task_state = (u_char)-1; + + for (i = 0; i < inf->num_modes; i++) { +- smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8; ++ smemlen = mode[i].xres * mode[i].yres * (mode[i].nonstd ? mode[i].nonstd : mode[i].bpp) / 8; + if (smemlen > fbi->fb.fix.smem_len) + fbi->fb.fix.smem_len = smemlen; + } +@@ -1189,12 +1234,19 @@ static int __init pxafb_parse_options(st + if (!strncmp(this_opt, "mode:", 5)) { + const char *name = this_opt+5; + unsigned int namelen = strlen(name); +- int res_specified = 0, bpp_specified = 0; +- unsigned int xres = 0, yres = 0, bpp = 0; ++ int res_specified = 0, bpp_specified = 0, nonstd_specified = 0; ++ unsigned int xres = 0, yres = 0, bpp = 0, nonstd = 0; + int yres_specified = 0; + int i; + for (i = namelen-1; i >= 0; i--) { + switch (name[i]) { ++ case '/': ++ if (!nonstd_specified) { ++ nonstd = simple_strtoul(&name[i+1], NULL, 0); ++ nonstd_specified = 1; ++ } else ++ goto done; ++ break; + case '-': + namelen = i; + if (!bpp_specified && !yres_specified) { +@@ -1227,12 +1279,29 @@ static int __init pxafb_parse_options(st + } + if (bpp_specified) + switch (bpp) { ++ case 18: ++ case 19: ++ case 24: ++ case 25: ++ if(nonstd_specified && (((bpp == 18 || bpp == 19) && nonstd == 24) || nonstd == 32)) ++ { ++ inf->modes[0].nonstd = nonstd; ++ dev_info(dev, "overriding nonstd pixel packing: %d\n",nonstd); ++ } else { ++ dev_err(dev, "Depth %d requires nonstd to be specified\n",bpp); ++ break; ++ } + case 1: + case 2: + case 4: + case 8: + case 16: + inf->modes[0].bpp = bpp; ++ if(nonstd_specified) { ++ dev_err(dev, "Depth %d requires nonstd to *not* be specified\n",bpp); ++ } else { ++ inf->modes[0].nonstd = 0; ++ } + dev_info(dev, "overriding bit depth: %d\n", bpp); + break; + default: +Index: linux-2.6.21gum/include/asm-arm/arch-pxa/pxa-regs.h +=================================================================== +--- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/pxa-regs.h ++++ linux-2.6.21gum/include/asm-arm/arch-pxa/pxa-regs.h +@@ -1323,6 +1323,8 @@ + #define GPIO83_NSTXD 83 /* NSSP transmit */ + #define GPIO84_NSRXD 84 /* NSSP receive */ + #define GPIO85_nPCE_1 85 /* Card Enable for Card Space (PXA27x) */ ++#define GPIO86_LDD_16 86 /* LCD data pin 16 */ ++#define GPIO87_LDD_17 87 /* LCD data pin 17 */ + #define GPIO92_MMCDAT0 92 /* MMC DAT0 (PXA27x) */ + #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */ + #define GPIO105_nPCE_2 105 /* Card Enable for Card Space (PXA27x) */ +@@ -1468,6 +1470,8 @@ + #define GPIO84_NSSP_TX (84 | GPIO_ALT_FN_1_OUT) + #define GPIO84_NSSP_RX (84 | GPIO_ALT_FN_2_IN) + #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT) ++#define GPIO86_LDD_16_MD (86 | GPIO_ALT_FN_2_OUT) ++#define GPIO87_LDD_17_MD (87 | GPIO_ALT_FN_2_OUT) + #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT) + #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT) + #define GPIO104_pSKTSEL_MD (104 | GPIO_ALT_FN_1_OUT) +@@ -1878,6 +1882,12 @@ + #define LCCR3_4BPP (2 << 24) + #define LCCR3_8BPP (3 << 24) + #define LCCR3_16BPP (4 << 24) ++#define LCCR3_18BPP (5 << 24) ++#define LCCR3_18BPP_PACKED (6 << 24) ++#define LCCR3_19BPP (7 << 24) ++#define LCCR3_19BPP_PACKED (1 << 29) ++#define LCCR3_24BPP ((1 << 29) | (1 << 24)) ++#define LCCR3_25BPP ((1 << 29) | (2 << 24)) + + #define FDADR0 __REG(0x44000200) /* DMA Channel 0 Frame Descriptor Address Register */ + #define FSADR0 __REG(0x44000204) /* DMA Channel 0 Frame Source Address Register */ +Index: linux-2.6.21gum/include/asm-arm/arch-pxa/pxafb.h +=================================================================== +--- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/pxafb.h ++++ linux-2.6.21gum/include/asm-arm/arch-pxa/pxafb.h +@@ -25,6 +25,7 @@ struct pxafb_mode_info { + u_short xres; + u_short yres; + ++ /* bpp is the path-to-screen bits per pixel, not the in-memory storage required */ + u_char bpp; + u_char hsync_len; + u_char left_margin; +@@ -36,7 +37,9 @@ struct pxafb_mode_info { + u_char sync; + + u_int cmap_greyscale:1, +- unused:31; ++ nonstd:8, /* nonstd represents the in-memory bits per pixel ++ ie 24 or 32 for 18/19bpp mode, or 32 for 24/25bpp mode */ ++ unused:23; + }; + + struct pxafb_mach_info { +Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/gumstix.c ++++ linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +@@ -146,7 +146,8 @@ static struct pxafb_mode_info gumstix_fb + .pixclock = 110000, + .xres = 480, + .yres = 272, +- .bpp = 16, ++ .bpp = 18, ++ .nonstd = 24, + .hsync_len = 41, + .left_margin = 2, + .right_margin = 2, +@@ -174,7 +175,8 @@ static struct pxafb_mode_info gumstix_fb + .vsync_len = 10, // VLW from datasheet: 10 typ + .upper_margin = 2, // VBP - VLW from datasheet: 12 - 10 = 2 + .lower_margin = 4, // VFP from datasheet: 4 typ +- .bpp = 16, ++ .bpp = 18, ++ .nonstd = 24, + .sync = 0, // Hsync and Vsync both active low + }; + +Index: linux-2.6.21gum/drivers/video/cfbfillrect.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/video/cfbfillrect.c ++++ linux-2.6.21gum/drivers/video/cfbfillrect.c +@@ -62,7 +62,10 @@ pixel_to_pat( u32 bpp, u32 pixel) + return 0x0001001001001001ul*pixel; + case 16: + return 0x0001000100010001ul*pixel; ++ case 18: ++ case 19: + case 24: ++ case 25: + return 0x0000000001000001ul*pixel; + case 32: + return 0x0000000100000001ul*pixel; +@@ -87,7 +90,10 @@ pixel_to_pat( u32 bpp, u32 pixel) + return 0x00001001ul*pixel; + case 16: + return 0x00010001ul*pixel; ++ case 18: ++ case 19: + case 24: ++ case 25: + return 0x00000001ul*pixel; + case 32: + return 0x00000001ul*pixel; +@@ -346,7 +352,7 @@ void cfb_fillrect(struct fb_info *p, con + unsigned long pat, fg; + unsigned long width = rect->width, height = rect->height; + int bits = BITS_PER_LONG, bytes = bits >> 3; +- u32 bpp = p->var.bits_per_pixel; ++ u32 bpp = (p->var.nonstd ? p->var.nonstd : p->var.bits_per_pixel); + unsigned long __iomem *dst; + int dst_idx, left; + +Index: linux-2.6.21gum/drivers/video/cfbimgblt.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/video/cfbimgblt.c ++++ linux-2.6.21gum/drivers/video/cfbimgblt.c +@@ -83,7 +83,7 @@ static inline void color_imageblit(const + /* Draw the penguin */ + u32 __iomem *dst, *dst2; + u32 color = 0, val, shift; +- int i, n, bpp = p->var.bits_per_pixel; ++ int i, n, bpp = (p->var.nonstd ? p->var.nonstd : p->var.bits_per_pixel); + u32 null_bits = 32 - bpp; + u32 *palette = (u32 *) p->pseudo_palette; + const u8 *src = image->data; +@@ -140,7 +140,7 @@ static inline void slow_imageblit(const + u32 start_index, + u32 pitch_index) + { +- u32 shift, color = 0, bpp = p->var.bits_per_pixel; ++ u32 shift, color = 0, bpp = (p->var.nonstd ? p->var.nonstd : p->var.bits_per_pixel); + u32 __iomem *dst, *dst2; + u32 val, pitch = p->fix.line_length; + u32 null_bits = 32 - bpp; +@@ -213,7 +213,7 @@ static inline void fast_imageblit(const + u8 __iomem *dst1, u32 fgcolor, + u32 bgcolor) + { +- u32 fgx = fgcolor, bgx = bgcolor, bpp = p->var.bits_per_pixel; ++ u32 fgx = fgcolor, bgx = bgcolor, bpp = (p->var.nonstd ? p->var.nonstd : p->var.bits_per_pixel); + u32 ppw = 32/bpp, spitch = (image->width + 7)/8; + u32 bit_mask, end_mask, eorx, shift; + const char *s = image->data, *src; +@@ -262,7 +262,7 @@ static inline void fast_imageblit(const + void cfb_imageblit(struct fb_info *p, const struct fb_image *image) + { + u32 fgcolor, bgcolor, start_index, bitstart, pitch_index = 0; +- u32 bpl = sizeof(u32), bpp = p->var.bits_per_pixel; ++ u32 bpl = sizeof(u32), bpp = (p->var.nonstd ? p->var.nonstd : p->var.bits_per_pixel); + u32 width = image->width; + u32 dx = image->dx, dy = image->dy; + u8 __iomem *dst1; +Index: linux-2.6.21gum/drivers/video/cfbcopyarea.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/video/cfbcopyarea.c ++++ linux-2.6.21gum/drivers/video/cfbcopyarea.c +@@ -365,8 +365,8 @@ void cfb_copyarea(struct fb_info *p, con + dst = src = (unsigned long __iomem *)((unsigned long)p->screen_base & ~(bytes-1)); + dst_idx = src_idx = 8*((unsigned long)p->screen_base & (bytes-1)); + // add offset of source and target area +- dst_idx += dy*bits_per_line + dx*p->var.bits_per_pixel; +- src_idx += sy*bits_per_line + sx*p->var.bits_per_pixel; ++ dst_idx += dy*bits_per_line + dx*(p->var.nonstd ? p->var.nonstd : p->var.bits_per_pixel); ++ src_idx += sy*bits_per_line + sx*(p->var.nonstd ? p->var.nonstd : p->var.bits_per_pixel); + + if (p->fbops->fb_sync) + p->fbops->fb_sync(p); +@@ -380,7 +380,7 @@ void cfb_copyarea(struct fb_info *p, con + src += src_idx >> (ffs(bits) - 1); + src_idx &= (bytes - 1); + bitcpy_rev(dst, dst_idx, src, src_idx, bits, +- width*p->var.bits_per_pixel); ++ width*(p->var.nonstd ? p->var.nonstd : p->var.bits_per_pixel)); + } + } else { + while (height--) { +@@ -389,7 +389,7 @@ void cfb_copyarea(struct fb_info *p, con + src += src_idx >> (ffs(bits) - 1); + src_idx &= (bytes - 1); + bitcpy(dst, dst_idx, src, src_idx, bits, +- width*p->var.bits_per_pixel); ++ width*(p->var.nonstd ? p->var.nonstd : p->var.bits_per_pixel)); + dst_idx += bits_per_line; + src_idx += bits_per_line; + } +Index: linux-2.6.21gum/drivers/video/console/fbcon.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/video/console/fbcon.c ++++ linux-2.6.21gum/drivers/video/console/fbcon.c +@@ -983,9 +983,10 @@ static const char *fbcon_startup(void) + + DPRINTK("mode: %s\n", info->fix.id); + DPRINTK("visual: %d\n", info->fix.visual); +- DPRINTK("res: %dx%d-%d\n", info->var.xres, ++ DPRINTK("res: %dx%d-%d(%d)\n", info->var.xres, + info->var.yres, +- info->var.bits_per_pixel); ++ info->var.bits_per_pixel, ++ info->var.nonstd ? info->var.nonstd : info->var.bits_per_pixel); + + #ifdef CONFIG_ATARI + if (MACH_IS_ATARI) { +Index: linux-2.6.21gum/Documentation/fb/pxafb.txt +=================================================================== +--- linux-2.6.21gum.orig/Documentation/fb/pxafb.txt ++++ linux-2.6.21gum/Documentation/fb/pxafb.txt +@@ -9,11 +9,13 @@ For example: + or on the kernel command line + video=pxafb:mode:640x480-8,passive + +-mode:XRESxYRES[-BPP] ++mode:XRESxYRES[-BPP[/PACKING]] + XRES == LCCR1_PPL + 1 + YRES == LLCR2_LPP + 1 + The resolution of the display in pixels + BPP == The bit depth. Valid values are 1, 2, 4, 8 and 16. ++ PACKING == The in-memory bits per pixel. Valid values are 24, 32 when ++ BPP == 18,19,24,25 + + pixclock:PIXCLOCK + Pixel clock in picoseconds diff --git a/packages/linux/gumstix-kernel-2.6.21/pxafb-definition.patch b/packages/linux/gumstix-kernel-2.6.21/pxafb-definition.patch new file mode 100644 index 0000000000..f8d5b1ecb1 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/pxafb-definition.patch @@ -0,0 +1,180 @@ +Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/gumstix.c ++++ linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + + #include "generic.h" +@@ -90,6 +91,89 @@ static struct platform_device gum_audio_ + .id = -1, + }; + ++ ++#if defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) || defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C) ++static void gumstix_lcd_backlight(int on_or_off) ++{ ++ if(on_or_off) ++ { ++ pxa_gpio_mode(17 | GPIO_IN); ++ } else { ++ GPCR(17) = GPIO_bit(17); ++ pxa_gpio_mode(17 | GPIO_OUT); ++ GPCR(17) = GPIO_bit(17); ++ } ++} ++#endif ++ ++ ++#ifdef CONFIG_FB_PXA_ALPS_CDOLLAR ++static struct pxafb_mode_info gumstix_fb_mode = { ++ .pixclock = 300000, ++ .xres = 240, ++ .yres = 320, ++ .bpp = 16, ++ .hsync_len = 2, ++ .left_margin = 1, ++ .right_margin = 1, ++ .vsync_len = 3, ++ .upper_margin = 0, ++ .lower_margin = 0, ++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, ++}; ++ ++static struct pxafb_mach_info gumstix_fb_info = { ++ .modes = &gumstix_fb_mode, ++ .num_modes = 1, ++ .lccr0 = LCCR0_Pas | LCCR0_Sngl | LCCR0_Color, ++ .lccr3 = LCCR3_PixFlEdg, ++}; ++#elif defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) ++static struct pxafb_mode_info gumstix_fb_mode = { ++ .pixclock = 110000, ++ .xres = 480, ++ .yres = 272, ++ .bpp = 16, ++ .hsync_len = 41, ++ .left_margin = 2, ++ .right_margin = 2, ++ .vsync_len = 10, ++ .upper_margin = 2, ++ .lower_margin = 2, ++ .sync = 0, // Hsync and Vsync both active low ++}; ++ ++static struct pxafb_mach_info gumstix_fb_info = { ++ .modes = &gumstix_fb_mode, ++ .num_modes = 1, ++ .lccr0 = LCCR0_Act | LCCR0_Sngl | LCCR0_Color, ++ .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | (3 << 30), ++ .pxafb_backlight_power = &gumstix_lcd_backlight, ++}; ++#elif defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C) ++static struct pxafb_mode_info gumstix_fb_mode = { ++ .pixclock = 108696, // 9.2MHz typical DOTCLK from datasheet ++ .xres = 480, ++ .hsync_len = 41, // HLW from datasheet: 41 typ ++ .left_margin = 4, // HBP - HLW from datasheet: 45 - 41 = 4 ++ .right_margin = 8, // HFP from datasheet: 8 typ ++ .yres = 272, ++ .vsync_len = 10, // VLW from datasheet: 10 typ ++ .upper_margin = 2, // VBP - VLW from datasheet: 12 - 10 = 2 ++ .lower_margin = 4, // VFP from datasheet: 4 typ ++ .bpp = 16, ++ .sync = 0, // Hsync and Vsync both active low ++}; ++ ++static struct pxafb_mach_info gumstix_fb_info = { ++ .modes = &gumstix_fb_mode, ++ .num_modes = 1, ++ .lccr0 = LCCR0_Act | LCCR0_Sngl | LCCR0_Color, ++ .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | (3 << 30), ++ .pxafb_backlight_power = &gumstix_lcd_backlight, ++}; ++#endif ++ + static struct platform_device *devices[] __initdata = { + &gum_audio_device, + }; +@@ -98,6 +182,9 @@ static void __init gumstix_init(void) + { + pxa_set_mci_info(&gumstix_mci_platform_data); + pxa_set_udc_info(&gumstix_udc_info); ++#if defined(CONFIG_FB_PXA_ALPS_CDOLLAR) | defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) | defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C) ++ set_pxa_fb_info(&gumstix_fb_info); ++#endif + (void) platform_add_devices(devices, ARRAY_SIZE(devices)); + } + +Index: linux-2.6.21gum/drivers/video/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/drivers/video/Kconfig ++++ linux-2.6.21gum/drivers/video/Kconfig +@@ -1495,6 +1495,37 @@ config FB_PXA + + If unsure, say N. + ++choice ++ depends on FB_PXA ++ prompt "LCD Panel" ++ default FB_PXA_SAMSUNG_LTE430WQ_F0C ++ ++config FB_PXA_ALPS_CDOLLAR ++ boolean "Chris Dollar's ALPS screen" ++ ---help--- ++ Enable definitions (over-ridable on the kernel command line if ++ "PXA LCD command line parameters" is also selected) for an ALPS ++ screen which Chris Dollar uses ++ ++config FB_PXA_SHARP_LQ043_PSP ++ boolean "SHARP LQ043... series" ++ ---help--- ++ Enable definitions (over-ridable on the kernel command line if ++ "PXA LCD command line parameters" is also selected) for a SHARP ++ LQ043... screen, such as the one used by the PSP. These screens are ++ the ones normally sold by gumstix with its boards. ++ ++config FB_PXA_SAMSUNG_LTE430WQ_F0C ++ boolean "Samsung LTE430WQ-F0C (standard gumstix LCD)" ++ ---help--- ++ Enable definitions for a Samsung LTE430WQ-F0C LCD panel, such as the ones resold ++ by gumstix for use with their "LCD-Ready" boards. ++ ++config FB_PXA_NONEOFTHEABOVE ++ boolean "None of the above" ++ ++endchoice ++ + config FB_PXA_PARAMETERS + bool "PXA LCD command line parameters" + default n +Index: linux-2.6.21gum/drivers/video/pxafb.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/video/pxafb.c ++++ linux-2.6.21gum/drivers/video/pxafb.c +@@ -22,6 +22,7 @@ + * + */ + ++#include + #include + #include + #include +@@ -789,7 +790,13 @@ static void pxafb_setup_gpio(struct pxaf + pxa_gpio_mode(GPIO74_LCD_FCLK_MD); + pxa_gpio_mode(GPIO75_LCD_LCLK_MD); + pxa_gpio_mode(GPIO76_LCD_PCLK_MD); ++#ifdef CONFIG_FB_PXA_SHARP_LQ043_PSP ++ /* DISP must be always high while screen is on */ ++ pxa_gpio_mode(GPIO77_LCD_ACBIAS | GPIO_OUT); ++ GPSR(GPIO77_LCD_ACBIAS) = GPIO_bit(GPIO77_LCD_ACBIAS); ++#else + pxa_gpio_mode(GPIO77_LCD_ACBIAS_MD); ++#endif + } + + static void pxafb_enable_controller(struct pxafb_info *fbi) diff --git a/packages/linux/gumstix-kernel-2.6.21/serial-divisor.patch b/packages/linux/gumstix-kernel-2.6.21/serial-divisor.patch new file mode 100644 index 0000000000..efce5a51ef --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/serial-divisor.patch @@ -0,0 +1,31 @@ +Index: linux-2.6.21gum/drivers/serial/pxa.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/serial/pxa.c ++++ linux-2.6.21gum/drivers/serial/pxa.c +@@ -41,6 +41,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -577,8 +578,16 @@ static void serial_pxa_config_port(struc + static int + serial_pxa_verify_port(struct uart_port *port, struct serial_struct *ser) + { +- /* we don't want the core code to modify any port params */ +- return -EINVAL; ++ struct uart_pxa_port *up = (struct uart_pxa_port *)port; ++ int ret = 0; ++ ++ if (up->port.uartclk / 16 != ser->baud_base) ++ ret = -EINVAL; ++ else if (((up->port.line & 1) == 0) && ser->baud_base > 230400) /* Max baud rate for STUART and FFUART */ ++ ret = -EINVAL; ++ else if (((up->port.line & 1) != 0) && ser->baud_base > 921600) /* Max baud rate for HWUART and BTUART */ ++ ret = -EINVAL; ++ return ret; + } + + static const char * diff --git a/packages/linux/gumstix-kernel-2.6.21/serial-ether-addr.patch b/packages/linux/gumstix-kernel-2.6.21/serial-ether-addr.patch new file mode 100644 index 0000000000..3161472e90 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/serial-ether-addr.patch @@ -0,0 +1,62 @@ +Index: linux-2.6.21gum/drivers/usb/gadget/ether.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/usb/gadget/ether.c ++++ linux-2.6.21gum/drivers/usb/gadget/ether.c +@@ -2249,6 +2249,38 @@ static u8 __devinit nibble (unsigned cha + return 0; + } + ++static inline unsigned int is_gumstix_oui(u8 *addr) ++{ ++ return (addr[0] == 0x00 && addr[1] == 0x15 && addr[2] == 0xC9); ++} ++ ++/** ++ * gen_serial_ether_addr - Generate software assigned Ethernet address ++ * based on the system_serial number ++ * @addr: Pointer to a six-byte array containing the Ethernet address ++ * ++ * Generate an Ethernet address (MAC) that is not multicast ++ * and has the local assigned bit set, keyed on the system_serial ++ */ ++static inline void gen_serial_ether_addr(u8 *addr) ++{ ++ static u8 ether_serial_digit = 0; ++ addr [0] = system_serial_high >> 8; ++ addr [1] = system_serial_high; ++ addr [2] = system_serial_low >> 24; ++ addr [3] = system_serial_low >> 16; ++ addr [4] = system_serial_low >> 8; ++ addr [5] = (system_serial_low & 0xc0) | /* top bits are from system serial */ ++ (2 << 4) | /* 2 bits identify interface type 1=ether, 2=usb, 3&4 undef */ ++ ((ether_serial_digit++) & 0x0f); /* 15 possible interfaces of each type */ ++ ++ if(!is_gumstix_oui(addr)) ++ { ++ addr [0] &= 0xfe; /* clear multicast bit */ ++ addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ ++ } ++} ++ + static int __devinit get_ether_addr(const char *str, u8 *dev_addr) + { + if (str) { +@@ -2266,8 +2298,16 @@ static int __devinit get_ether_addr(cons + if (is_valid_ether_addr (dev_addr)) + return 0; + } +- random_ether_addr(dev_addr); +- return 1; ++ if(system_serial_high | system_serial_low) ++ { ++ gen_serial_ether_addr(dev_addr); ++ return 0; ++ } ++ else ++ { ++ random_ether_addr(dev_addr); ++ return 1; ++ } + } + + static int __devinit diff --git a/packages/linux/gumstix-kernel-2.6.21/smc-ether-addr.patch b/packages/linux/gumstix-kernel-2.6.21/smc-ether-addr.patch new file mode 100644 index 0000000000..b4957b7a0d --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/smc-ether-addr.patch @@ -0,0 +1,62 @@ +Index: linux-2.6.21gum/drivers/net/smc91x.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/smc91x.c ++++ linux-2.6.21gum/drivers/net/smc91x.c +@@ -1815,6 +1815,39 @@ static int __init smc_findirq(void __iom + return probe_irq_off(cookie); + } + ++static inline unsigned int is_gumstix_oui(u8 *addr) ++{ ++ return (addr[0] == 0x00 && addr[1] == 0x15 && addr[2] == 0xC9); ++} ++ ++/** ++ * gen_serial_ether_addr - Generate software assigned Ethernet address ++ * based on the system_serial number ++ * @addr: Pointer to a six-byte array containing the Ethernet address ++ * ++ * Generate an Ethernet address (MAC) that is not multicast ++ * and has the local assigned bit set, keyed on the system_serial ++ */ ++static inline void gen_serial_ether_addr(u8 *addr) ++{ ++ static u8 ether_serial_digit = 0; ++ addr [0] = system_serial_high >> 8; ++ addr [1] = system_serial_high; ++ addr [2] = system_serial_low >> 24; ++ addr [3] = system_serial_low >> 16; ++ addr [4] = system_serial_low >> 8; ++ addr [5] = (system_serial_low & 0xc0) | /* top bits are from system serial */ ++ (1 << 4) | /* 2 bits identify interface type 1=ether, 2=usb, 3&4 undef */ ++ ((ether_serial_digit++) & 0x0f); /* 15 possible interfaces of each type */ ++ ++ if(!is_gumstix_oui(addr)) ++ { ++ addr [0] &= 0xfe; /* clear multicast bit */ ++ addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ ++ } ++} ++ ++ + /* + * Function: smc_probe(unsigned long ioaddr) + * +@@ -2032,15 +2065,13 @@ static int __init smc_probe(struct net_d + THROTTLE_TX_PKTS ? " [throttle_tx]" : ""); + + if (!is_valid_ether_addr(dev->dev_addr)) { +- printk("%s: Invalid ethernet MAC address. Please " +- "set using ifconfig\n", dev->name); +- } else { ++ gen_serial_ether_addr(dev->dev_addr); ++ } + /* Print the Ethernet address */ + printk("%s: Ethernet addr: ", dev->name); + for (i = 0; i < 5; i++) + printk("%2.2x:", dev->dev_addr[i]); + printk("%2.2x\n", dev->dev_addr[5]); +- } + + if (lp->phy_type == 0) { + PRINTK("%s: No PHY found\n", dev->name); diff --git a/packages/linux/gumstix-kernel-2.6.21/smc911x-fixup.patch b/packages/linux/gumstix-kernel-2.6.21/smc911x-fixup.patch new file mode 100644 index 0000000000..7e051f9fb6 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/smc911x-fixup.patch @@ -0,0 +1,392 @@ +Index: linux-2.6.21gum/drivers/net/smc911x.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/smc911x.c ++++ linux-2.6.21gum/drivers/net/smc911x.c +@@ -76,6 +76,7 @@ static const char version[] = + #include + #include + ++#include + #include + #include + +@@ -303,14 +304,14 @@ static void smc911x_reset(struct net_dev + SMC_SET_AFC_CFG(lp->afc_cfg); + + +- /* Set to LED outputs */ +- SMC_SET_GPIO_CFG(0x70070000); ++ /* Set to LED outputs and configure EEPROM pins as GP outputs */ ++ SMC_SET_GPIO_CFG(GPIO_CFG_LED1_EN_ | GPIO_CFG_LED2_EN_ | 1 << 20); + + /* +- * Deassert IRQ for 1*10us for edge type interrupts ++ * Deassert IRQ for 22*10us for edge type interrupts + * and drive IRQ pin push-pull + */ +- SMC_SET_IRQ_CFG( (1 << 24) | INT_CFG_IRQ_EN_ | INT_CFG_IRQ_TYPE_ ); ++ SMC_SET_IRQ_CFG( (22 << 24) | INT_CFG_IRQ_EN_ | INT_CFG_IRQ_TYPE_ ); + + /* clear anything saved */ + if (lp->pending_tx_skb != NULL) { +@@ -413,7 +414,7 @@ static inline void smc911x_drop_pkt(stru + if (fifo_count <= 4) { + /* Manually dump the packet data */ + while (fifo_count--) +- SMC_GET_RX_FIFO(); ++ (void)SMC_GET_RX_FIFO(); + } else { + /* Fast forward through the bad packet */ + SMC_SET_RX_DP_CTRL(RX_DP_CTRL_FFWD_BUSY_); +@@ -499,7 +500,7 @@ static inline void smc911x_rcv(struct n + SMC_SET_RX_CFG(RX_CFG_RX_END_ALGN4_ | ((2<<8) & RX_CFG_RXDOFF_)); + SMC_PULL_DATA(data, pkt_len+2+3); + +- DBG(SMC_DEBUG_PKTS, "%s: Received packet\n", dev->name,); ++ DBG(SMC_DEBUG_PKTS, "%s: Received packet\n", dev->name); + PRINT_PKT(data, ((pkt_len - 4) <= 64) ? pkt_len - 4 : 64); + dev->last_rx = jiffies; + skb->dev = dev; +@@ -900,6 +901,7 @@ static void smc911x_phy_powerdown(struct + unsigned long ioaddr = dev->base_addr; + unsigned int bmcr; + ++ DBG(SMC_DEBUG_FUNC, "%s: --> %s\n", dev->name, __FUNCTION__); + /* Enter Link Disable state */ + SMC_GET_PHY_BMCR(phy, bmcr); + bmcr |= BMCR_PDOWN; +@@ -925,6 +927,7 @@ static void smc911x_phy_check_media(stru + + if (mii_check_media(&lp->mii, netif_msg_link(lp), init)) { + /* duplex state has changed */ ++ DBG(SMC_DEBUG_MISC, "%s: duplex state has changed\n", dev->name); + SMC_GET_PHY_BMCR(phyaddr, bmcr); + SMC_GET_MAC_CR(cr); + if (lp->mii.full_duplex) { +@@ -960,6 +963,7 @@ static void smc911x_phy_configure(struct + int my_phy_caps; /* My PHY capabilities */ + int my_ad_caps; /* My Advertised capabilities */ + int status; ++ int bmcr; + unsigned long flags; + + DBG(SMC_DEBUG_FUNC, "%s: --> %s()\n", dev->name, __FUNCTION__); +@@ -1033,9 +1037,12 @@ static void smc911x_phy_configure(struct + + DBG(SMC_DEBUG_MISC, "%s: phy caps=0x%04x\n", dev->name, my_phy_caps); + DBG(SMC_DEBUG_MISC, "%s: phy advertised caps=0x%04x\n", dev->name, my_ad_caps); ++ DBG(SMC_DEBUG_MISC, "%s: phy advertised readback caps=0x%04x\n", dev->name, status); + + /* Restart auto-negotiation process in order to advertise my caps */ +- SMC_SET_PHY_BMCR(phyaddr, BMCR_ANENABLE | BMCR_ANRESTART); ++ SMC_GET_PHY_BMCR(phyaddr, bmcr); ++ bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; ++ SMC_SET_PHY_BMCR(phyaddr, bmcr); + + smc911x_phy_check_media(dev, 1); + +@@ -1888,6 +1895,39 @@ static int __init smc911x_findirq(unsign + return probe_irq_off(cookie); + } + ++static inline unsigned int is_gumstix_oui(u8 *addr) ++{ ++ return (addr[0] == 0x00 && addr[1] == 0x15 && addr[2] == 0xC9); ++} ++ ++/** ++ * gen_serial_ether_addr - Generate software assigned Ethernet address ++ * based on the system_serial number ++ * @addr: Pointer to a six-byte array containing the Ethernet address ++ * ++ * Generate an Ethernet address (MAC) that is not multicast ++ * and has the local assigned bit set, keyed on the system_serial ++ */ ++static inline void gen_serial_ether_addr(u8 *addr) ++{ ++ static u8 ether_serial_digit = 0; ++ addr [0] = system_serial_high >> 8; ++ addr [1] = system_serial_high; ++ addr [2] = system_serial_low >> 24; ++ addr [3] = system_serial_low >> 16; ++ addr [4] = system_serial_low >> 8; ++ addr [5] = (system_serial_low & 0xc0) | /* top bits are from system serial */ ++ (1 << 4) | /* 2 bits identify interface type 1=ether, 2=usb, 3&4 undef */ ++ ((ether_serial_digit++) & 0x0f); /* 15 possible interfaces of each type */ ++ ++ if(!is_gumstix_oui(addr)) ++ { ++ addr [0] &= 0xfe; /* clear multicast bit */ ++ addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ ++ } ++} ++ ++ + /* + * Function: smc911x_probe(unsigned long ioaddr) + * +@@ -2116,15 +2156,13 @@ static int __init smc911x_probe(struct n + #endif + printk("\n"); + if (!is_valid_ether_addr(dev->dev_addr)) { +- printk("%s: Invalid ethernet MAC address. Please " +- "set using ifconfig\n", dev->name); +- } else { +- /* Print the Ethernet address */ +- printk("%s: Ethernet addr: ", dev->name); +- for (i = 0; i < 5; i++) +- printk("%2.2x:", dev->dev_addr[i]); +- printk("%2.2x\n", dev->dev_addr[5]); ++ gen_serial_ether_addr(dev->dev_addr); + } ++ /* Print the Ethernet address */ ++ printk("%s: Ethernet addr: ", dev->name); ++ for (i = 0; i < 5; i++) ++ printk("%2.2x:", dev->dev_addr[i]); ++ printk("%2.2x\n", dev->dev_addr[5]); + + if (lp->phy_type == 0) { + PRINTK("%s: No PHY found\n", dev->name); +@@ -2300,8 +2338,15 @@ static struct platform_driver smc911x_dr + }, + }; + ++#ifdef CONFIG_ARCH_GUMSTIX ++extern void gumstix_smc911x_load(void); ++#endif ++ + static int __init smc911x_init(void) + { ++#ifdef CONFIG_ARCH_GUMSTIX ++ gumstix_smc911x_load(); ++#endif + return platform_driver_register(&smc911x_driver); + } + +Index: linux-2.6.21gum/drivers/net/gumstix-smc911x.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/net/gumstix-smc911x.c +@@ -0,0 +1,148 @@ ++/* ++ * Gumstix SMC911x chip intialization driver ++ * ++ * Author: Craig Hughes ++ * Created: December 9, 2004 ++ * Copyright: (C) 2004 Craig Hughes ++ * ++ * 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 ++ ++#include ++ ++#define SMC_DEBUG 9 ++#include ++#include "smc911x.h" ++ ++static struct resource gumstix_smc911x0_resources[] = { ++ [0] = { ++ .name = "smc911x-regs", ++ .start = PXA_CS1_PHYS, ++ .end = PXA_CS1_PHYS + 0x000fffff, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = GUMSTIX_ETH0_IRQ, ++ .end = GUMSTIX_ETH0_IRQ, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct resource gumstix_smc911x1_resources[] = { ++ [0] = { ++ .name = "smc911x-regs", ++ .start = PXA_CS2_PHYS, ++ .end = PXA_CS2_PHYS + 0x000fffff, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = GUMSTIX_ETH1_IRQ, ++ .end = GUMSTIX_ETH1_IRQ, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct platform_device gumstix_smc911x0_device = { ++ .name = "smc911x", ++ .id = 0, ++ .num_resources = ARRAY_SIZE(gumstix_smc911x0_resources), ++ .resource = gumstix_smc911x0_resources, ++}; ++ ++static struct platform_device gumstix_smc911x1_device = { ++ .name = "smc911x", ++ .id = 1, ++ .num_resources = ARRAY_SIZE(gumstix_smc911x1_resources), ++ .resource = gumstix_smc911x1_resources, ++}; ++ ++static struct platform_device *smc911x_devices[] = { ++ &gumstix_smc911x0_device, ++ &gumstix_smc911x1_device, ++}; ++ ++/* First we're going to test if there's a 2nd SMC911x, and if not, then we'll free up those resources and the GPIO lines ++ * that it would otherwise use. We have no choice but to probe by doing: ++ * Set nCS2 to CS2 mode ++ * Set the reset line to GPIO out mode, and pull it high, then drop it low (to trigger reset) ++ * Read from the memory space to check for the sentinel sequence identifying a likely SMC911x device ++ */ ++int __init gumstix_smc911x_init(void) ++{ ++ unsigned int val, num_devices=ARRAY_SIZE(smc911x_devices); ++ void *ioaddr; ++ ++ /* Set up nPWE */ ++ pxa_gpio_mode(GPIO49_nPWE_MD); ++ ++ pxa_gpio_mode(GPIO78_nCS_2_MD); ++ // If either if statement fails, then we'll drop out and turn_off_eth1, ++ // if both succeed, then we'll skip that and just proceed with 2 cards ++ if(request_mem_region(gumstix_smc911x1_resources[1].start, SMC911X_IO_EXTENT, "smc911x probe")) ++ { ++ ioaddr = ioremap(gumstix_smc911x1_resources[1].start, SMC911X_IO_EXTENT); ++ val = SMC_GET_PN(); ++ iounmap(ioaddr); ++ release_mem_region(gumstix_smc911x1_resources[1].start, SMC911X_IO_EXTENT); ++ if (CHIP_9115 == val || ++ CHIP_9116 == val || ++ CHIP_9117 == val || ++ CHIP_9118 == val ) { ++ goto proceed; ++ } ++ } ++ ++turn_off_eth1: ++ // This is apparently not an SMC911x ++ // So, let's decrement the number of devices to request, and reset the GPIO lines to GPIO IN mode ++ num_devices--; ++ smc911x_devices[1] = NULL; ++ pxa_gpio_mode(78 | GPIO_IN); ++ ++proceed: ++ pxa_gpio_mode(GPIO15_nCS_1_MD); ++ ++ if(smc911x_devices[1]) pxa_gpio_mode(GPIO_GUMSTIX_ETH1_RST_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_ETH0_RST_MD); ++ ++ if(smc911x_devices[1]) GPCR(GPIO_GUMSTIX_ETH1_RST) = GPIO_bit(GPIO_GUMSTIX_ETH1_RST); ++ GPCR(GPIO_GUMSTIX_ETH0_RST) = GPIO_bit(GPIO_GUMSTIX_ETH0_RST); ++ msleep(500); // Hold RESET for at least 200µ ++ ++ if(smc911x_devices[1]) GPSR(GPIO_GUMSTIX_ETH1_RST) = GPIO_bit(GPIO_GUMSTIX_ETH1_RST); ++ GPSR(GPIO_GUMSTIX_ETH0_RST) = GPIO_bit(GPIO_GUMSTIX_ETH0_RST); ++ msleep(50); ++ ++ return platform_add_devices(smc911x_devices, num_devices); ++} ++ ++void __exit gumstix_smc911x_exit(void) ++{ ++ if(smc911x_devices[1] != NULL) platform_device_unregister(&gumstix_smc911x1_device); ++ platform_device_unregister(&gumstix_smc911x0_device); ++} ++ ++void gumstix_smc911x_load(void) {} ++EXPORT_SYMBOL(gumstix_smc911x_load); ++ ++module_init(gumstix_smc911x_init); ++module_exit(gumstix_smc911x_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Craig Hughes "); ++MODULE_DESCRIPTION("Gumstix board SMC911x chip initialization driver"); ++MODULE_VERSION("1:0.1"); +Index: linux-2.6.21gum/drivers/net/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/Kconfig ++++ linux-2.6.21gum/drivers/net/Kconfig +@@ -897,6 +897,13 @@ config SMC911X + called smc911x. If you want to compile it as a module, say M + here and read + ++config SMC911X_GUMSTIX ++ tristate ++ default m if SMC911X=m ++ default y if SMC911X=y ++ depends on SMC911X && ARCH_GUMSTIX ++ ++ + config NET_VENDOR_RACAL + bool "Racal-Interlan (Micom) NI cards" + depends on NET_ETHERNET && ISA +Index: linux-2.6.21gum/drivers/net/Makefile +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/Makefile ++++ linux-2.6.21gum/drivers/net/Makefile +@@ -201,6 +201,7 @@ obj-$(CONFIG_PASEMI_MAC) += pasemi_mac.o + obj-$(CONFIG_MACB) += macb.o + + obj-$(CONFIG_SMC91X_GUMSTIX) += gumstix-smc91x.o ++obj-$(CONFIG_SMC911X_GUMSTIX) += gumstix-smc911x.o + obj-$(CONFIG_ARM) += arm/ + obj-$(CONFIG_DEV_APPLETALK) += appletalk/ + obj-$(CONFIG_TR) += tokenring/ +Index: linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h +=================================================================== +--- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/gumstix.h ++++ linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h +@@ -52,7 +52,7 @@ + #define GPIO_GUMSTIX_ETH0_RST 80 + #define GPIO_GUMSTIX_ETH0 36 + #else +-#define GPIO_GUMSTIX_ETH0_RST 32 ++#define GPIO_GUMSTIX_ETH0_RST 107 + #define GPIO_GUMSTIX_ETH0 99 + #endif + #define GPIO_GUMSTIX_ETH1_RST 52 +Index: linux-2.6.21gum/drivers/net/smc911x.h +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/smc911x.h ++++ linux-2.6.21gum/drivers/net/smc911x.h +@@ -33,7 +33,9 @@ + * Use the DMA feature on PXA chips + */ + #ifdef CONFIG_ARCH_PXA ++#if !defined( CONFIG_SMC911X_GUMSTIX ) && !defined( CONFIG_SMC911X_GUMSTIX_MODULE ) + #define SMC_USE_PXA_DMA 1 ++#endif + #define SMC_USE_16BIT 0 + #define SMC_USE_32BIT 1 + #endif +@@ -46,13 +48,13 @@ + #if SMC_USE_16BIT + #define SMC_inb(a, r) readb((a) + (r)) + #define SMC_inw(a, r) readw((a) + (r)) +-#define SMC_inl(a, r) ((SMC_inw(a, r) & 0xFFFF)+(SMC_inw(a+2, r)<<16)) ++#define SMC_inl(a, r) ((SMC_inw(a, r) & 0xFFFF)+(SMC_inw((a)+2, r)<<16)) + #define SMC_outb(v, a, r) writeb(v, (a) + (r)) + #define SMC_outw(v, a, r) writew(v, (a) + (r)) + #define SMC_outl(v, a, r) \ + do{ \ +- writel(v & 0xFFFF, (a) + (r)); \ +- writel(v >> 16, (a) + (r) + 2); \ ++ writel((v) & 0xFFFF, (a) + (r)); \ ++ writel((v) >> 16, (a) + (r) + 2); \ + } while (0) + #define SMC_insl(a, r, p, l) readsw((short*)((a) + (r)), p, l*2) + #define SMC_outsl(a, r, p, l) writesw((short*)((a) + (r)), p, l*2) diff --git a/packages/linux/gumstix-kernel-2.6.21/tsc2003-config.diff b/packages/linux/gumstix-kernel-2.6.21/tsc2003-config.diff new file mode 100644 index 0000000000..ccad5ed696 --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/tsc2003-config.diff @@ -0,0 +1,31 @@ +--- /tmp/Kconfig 2007-10-07 14:13:14.000000000 +0200 ++++ linux-2.6.21/drivers/i2c/chips/Kconfig 2007-10-07 14:13:56.902045000 +0200 +@@ -125,4 +125,18 @@ + This driver can also be built as a module. If so, the module + will be called max6875. + ++config SENSORS_TSC2003 ++ tristate "TI TSC2003" ++ depends on I2C && EXPERIMENTAL ++ default n ++ help ++ Driver for TI tsc2003 touchscreen and sensor chip/ ++ ++config SENSORS_TSC2003_SYSFS ++ tristate "TI TSC2003 sysfs interface ++ depends on SENSORS_TSC2003 ++ default n ++ help ++ Enabled the sysfs interface for tsc2003 ++ + endmenu +--- /tmp/Makefile 2007-10-07 14:14:14.000000000 +0200 ++++ linux-2.6.21/drivers/i2c/chips/Makefile 2007-10-07 14:14:20.072045000 +0200 +@@ -12,6 +12,7 @@ + obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o + obj-$(CONFIG_ISP1301_OMAP) += isp1301_omap.o + obj-$(CONFIG_TPS65010) += tps65010.o ++obj-$(CONFIG_SENSORS_TSC2003) += tsc2003.o + + ifeq ($(CONFIG_I2C_DEBUG_CHIP),y) + EXTRA_CFLAGS += -DDEBUG diff --git a/packages/linux/gumstix-kernel-2.6.21/tsc2003.c b/packages/linux/gumstix-kernel-2.6.21/tsc2003.c new file mode 100644 index 0000000000..d0f496617e --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/tsc2003.c @@ -0,0 +1,699 @@ +/* + * linux/drivers/i2c/chips/tsc2003.c + * + * Copyright (C) 2005 Bill Gatliff + * Changes for 2.6.20 kernel by Nicholas Chen + * + * 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 TI's TSC2003 I2C Touch Screen Controller + */ + +//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static unsigned short normal_i2c[] += {0x48, I2C_CLIENT_END }; + +I2C_CLIENT_INSMOD_1(tsc2003); + +#define DRIVER_NAME "tsc2003" + +enum tsc2003_pd { + PD_POWERDOWN = 0, /* penirq */ + PD_IREFOFF_ADCON = 1, /* no penirq */ + PD_IREFON_ADCOFF = 2, /* penirq */ + PD_IREFON_ADCON = 3, /* no penirq */ + PD_PENIRQ_ARM = PD_IREFON_ADCOFF, + PD_PENIRQ_DISARM = PD_IREFON_ADCON, +}; + +enum tsc2003_m { + M_12BIT = 0, + M_8BIT = 1 +}; + +enum tsc2003_cmd { + MEAS_TEMP0 = 0, + MEAS_VBAT1 = 1, + MEAS_IN1 = 2, + MEAS_TEMP1 = 4, + MEAS_VBAT2 = 5, + MEAS_IN2 = 6, + ACTIVATE_NX_DRIVERS = 8, + ACTIVATE_NY_DRIVERS = 9, + ACTIVATE_YNX_DRIVERS = 10, + MEAS_XPOS = 12, + MEAS_YPOS = 13, + MEAS_Z1POS = 14, + MEAS_Z2POS = 15 +}; + +#define TSC2003_CMD(cn,pdn,m) (((cn) << 4) | ((pdn) << 2) | ((m) << 1)) + +#define ADC_MAX ((1 << 12) - 1) + +struct tsc2003_data { + struct i2c_client client; + struct device_driver driver; + struct input_dev *idev; + struct timer_list penirq_timer; + struct semaphore sem; + struct task_struct *tstask; + struct completion tstask_completion; + struct completion penirq_completion; + enum tsc2003_pd pd; + enum tsc2003_m m; + int penirq; + + int vbat1; + int vbat2; + int temp0; + int temp1; + int in1; + int in2; +}; + +static int tsc2003_i2c_detect (struct i2c_adapter *adapter, int address, +int kind); + +static inline int tsc2003_command (struct tsc2003_data *data, + enum tsc2003_cmd cmd, + enum tsc2003_pd pd) +{ + char c; + int ret; + down(&data->sem); + c = TSC2003_CMD(cmd, pd, data->m); + ret = i2c_master_send(&data->client, &c, 1); + up(&data->sem); + return ret; +} + +static int tsc2003_read (struct tsc2003_data *data, + enum tsc2003_cmd cmd, + enum tsc2003_pd pd, + int *val) +{ + char c; + char d[2]; + int ret; + + c = TSC2003_CMD(cmd, pd, data->m); + ret = i2c_master_send(&data->client, &c, 1); + if (ret <= 0) goto err; + + udelay(20); + ret = i2c_master_recv(&data->client, d, data->m == M_12BIT ? 2 : 1); + if (ret <= 0) goto err; + + if (val) + { + *val = d[0]; + *val <<= 4; + if (data->m == M_12BIT) + *val += (d[1] >> 4); + } + +#if defined(CONFIG_I2C_DEBUG_CHIP) + printk(KERN_ERR "%s: val[%x] = %d\n", + __FUNCTION__, cmd, (((int)d[0]) << 8) + d[1]); +#endif + + return 0; + err: + if (!ret) ret = -ENODEV; + return ret; +} + +static inline int tsc2003_read_temp0 (struct tsc2003_data *d, enum +tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_TEMP0, pd, t); +} + +static inline int tsc2003_read_temp1 (struct tsc2003_data *d, enum +tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_TEMP1, pd, t); +} + +static inline int tsc2003_read_xpos (struct tsc2003_data *d, enum +tsc2003_pd pd, int *x) +{ + return tsc2003_read(d, MEAS_XPOS, pd, x); +} + +static inline int tsc2003_read_ypos (struct tsc2003_data *d, enum +tsc2003_pd pd, int *y) +{ + return tsc2003_read(d, MEAS_YPOS, pd, y); +} + +static inline int tsc2003_read_pressure (struct tsc2003_data *d, enum +tsc2003_pd pd, int *p) +{ + return tsc2003_read(d, MEAS_Z1POS, pd, p); +} + +static inline int tsc2003_read_in1 (struct tsc2003_data *d, enum +tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_IN1, pd, t); +} + +static inline int tsc2003_read_in2 (struct tsc2003_data *d, enum +tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_IN2, pd, t); +} + +static inline int tsc2003_read_vbat1 (struct tsc2003_data *d, enum +tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_VBAT1, pd, t); +} + +static inline int tsc2003_read_vbat2 (struct tsc2003_data *d, enum +tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_VBAT2, pd, t); +} + +static inline int tsc2003_powerdown (struct tsc2003_data *d) +{ + /* we don't have a distinct powerdown command, + so do a benign read with the PD bits cleared */ + return tsc2003_read(d, MEAS_IN1, PD_POWERDOWN, 0); +} + +void tsc2003_init_client (struct i2c_client *client) +{ + struct tsc2003_data *data = i2c_get_clientdata(client); + + data->pd = PD_PENIRQ_DISARM; + data->m = M_8BIT; + return; +} + +#define PENUP_TIMEOUT 50 /* msec */ + +static irqreturn_t tsc2003_penirq (int irq, void *v) +{ + struct tsc2003_data *d = v; + complete(&d->penirq_completion); + return IRQ_HANDLED; +} + +/* +static int tsc2003_remove (struct device *dev) +{ + struct tsc2003_data *d = container_of(dev->driver, struct tsc2003_data, driver); + free_irq(d->penirq,d); + input_unregister_device(d->idev); + return 0; +} +*/ + +static void tsc2003_pen_up (unsigned long v) +{ + struct tsc2003_data *d = (struct tsc2003_data *)v; + input_report_abs(d->idev, ABS_PRESSURE, 0); + input_sync(d->idev); + return; +} + +static inline void tsc2003_restart_pen_up_timer (struct tsc2003_data *d) +{ + mod_timer(&d->penirq_timer, jiffies + (PENUP_TIMEOUT * HZ) / 1000); +} + +static int tsc2003ts_thread (void *v) +{ + struct tsc2003_data *d = v; + struct task_struct *tsk = current; + int ret; + + d->tstask = tsk; + + daemonize(DRIVER_NAME "tsd"); + allow_signal(SIGKILL); + + complete(&d->tstask_completion); + +#if defined(CONFIG_I2C_DEBUG_CHIP) + printk(KERN_INFO "%s: address 0x%x\n", + __FUNCTION__, d->client.addr); +#endif + + while (!signal_pending(tsk)) + { + unsigned int x, y, p; + + if (!down_interruptible(&d->sem)) + { + d->pd = PD_PENIRQ_DISARM; + disable_irq(d->penirq); + tsc2003_read_xpos(d, PD_PENIRQ_DISARM, &x); + tsc2003_read_ypos(d, PD_PENIRQ_DISARM, &y); + tsc2003_read_pressure(d, PD_PENIRQ_DISARM, &p); + + /* non-X-Y driver read to avoid glitch in penirq (errata?) */ + tsc2003_read_vbat1(d, PD_PENIRQ_DISARM, 0); + enable_irq(d->penirq); + + + input_report_abs(d->idev, ABS_X, 4096 - x); + input_report_abs(d->idev, ABS_Y, 4096 - y); + input_report_abs(d->idev, ABS_PRESSURE, p); + input_sync(d->idev); + + + do + { + ret = wait_for_completion_interruptible_timeout(&d->penirq_completion, HZ / 100); + if (ret) + { + if (d->pd == PD_PENIRQ_DISARM) + { + /* fake penirq, avoid glitch and then start watching for real now */ + d->pd = PD_PENIRQ_ARM; + tsc2003_read_vbat1(d, PD_PENIRQ_ARM, 0); + up(&d->sem); + } + else + { + /* pen down event, (re)start the pen up timer */ + tsc2003_restart_pen_up_timer(d); + } + } + else + { + if (d->pd != PD_PENIRQ_ARM) + { + /* fake penirq never arrived, which would be the case + for a level-triggered irq line */ + tsc2003_read_vbat1(d, PD_PENIRQ_ARM, 0); + d->pd = PD_PENIRQ_ARM; + up(&d->sem); + } + if (timer_pending(&d->penirq_timer)) + { + /* pen is down, time to send (another) sample */ + break; + } + else + { + /* pen is up, nothing to do but wait for it to + come down */ + wait_for_completion_interruptible(&d->penirq_completion); + /* pen is down, (re)start the pen up timer */ + tsc2003_restart_pen_up_timer(d); + break; + } + } + } + while (!signal_pending(tsk)); + } + } + + d->tstask = NULL; + complete_and_exit(&d->tstask_completion, 0); +} + +static int tsc2003_idev_open (struct input_dev *idev) +{ + struct tsc2003_data *d = idev->private; + int ret = 0; + + if (down_interruptible(&d->sem)) + return -EINTR; + + if (d->tstask) + panic(DRIVER_NAME "tsd already running (!). abort."); + + d->penirq_timer.data = (unsigned long)d; + d->penirq_timer.function = tsc2003_pen_up; + + ret = kernel_thread(tsc2003ts_thread, d, CLONE_KERNEL); + if (ret >= 0) + { + wait_for_completion(&d->tstask_completion); + ret = 0; + } + + + + up(&d->sem); + return ret; +} + +static void tsc2003_idev_close (struct input_dev *idev) +{ + struct tsc2003_data *d = idev->private; + down_interruptible(&d->sem); + if (d->tstask) + { + send_sig(SIGKILL, d->tstask, 1); + wait_for_completion(&d->tstask_completion); + } + + if (timer_pending(&d->penirq_timer)) + del_timer(&d->penirq_timer); + up(&d->sem); + return; +} + +#if defined(CONFIG_SYSFS) && defined(CONFIG_SENSORS_TSC2003_SYSFS) +static ssize_t show_addr (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct +tsc2003_data, driver); + return sprintf(buf, "%d\n", d->client.addr); +} +static DEVICE_ATTR(addr, S_IRUGO, show_addr, NULL); + +static ssize_t show_vbat1 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct +tsc2003_data, driver); + return sprintf(buf, "%d\n", d->vbat1); +} +static DEVICE_ATTR(vbat1, S_IRUGO, show_vbat1, NULL); + +static ssize_t show_vbat2 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct +tsc2003_data, driver); + return sprintf(buf, "%d\n", d->vbat2); +} +static DEVICE_ATTR(vbat2, S_IRUGO, show_vbat2, NULL); + +static ssize_t show_in1 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct +tsc2003_data, driver); + return sprintf(buf, "%d\n", d->in1); +} +static DEVICE_ATTR(in1, S_IRUGO, show_in1, NULL); + +static ssize_t show_in2 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct +tsc2003_data, driver); + return sprintf(buf, "%d\n", d->in2); +} +static DEVICE_ATTR(in2, S_IRUGO, show_in2, NULL); + +static ssize_t show_temp0 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct +tsc2003_data, driver); + return sprintf(buf, "%d\n", d->temp0); +} +static DEVICE_ATTR(temp0, S_IRUGO, show_temp0, NULL); + +static ssize_t show_temp1 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct +tsc2003_data, driver); + return sprintf(buf, "%d\n", d->temp1); +} +static DEVICE_ATTR(temp1, S_IRUGO, show_temp1, NULL); + +#warning "TODO: this daemon sometimes hangs the touchscreen daemon" +#warning "TODO: under periods of heavy touch screen activity." +#warning "TODO: Use with caution until the bug is squashed." +static int tsc2003s_thread (void *v) +{ + struct tsc2003_data *d = v; + + daemonize(DRIVER_NAME "sd"); + allow_signal(SIGKILL); + + printk(KERN_INFO "%s: address 0x%x\n", + __FUNCTION__, d->client.addr); + + while (!signal_pending(current)) + { + if (!down_interruptible(&d->sem)) + { + if (!timer_pending(&d->penirq_timer)) + { + tsc2003_read_vbat1(d, d->pd, &d->vbat1); + tsc2003_read_vbat2(d, d->pd, &d->vbat2); + tsc2003_read_in1(d, d->pd, &d->in1); + tsc2003_read_in2(d, d->pd, &d->in2); + tsc2003_read_temp0(d, d->pd, &d->temp0); + tsc2003_read_temp1(d, d->pd, &d->temp1); + } + up(&d->sem); + } + set_task_state(current, TASK_INTERRUPTIBLE); + schedule_timeout(5 * HZ); + } + do_exit(0); +} +#endif + +static int tsc2003_detect_irq (struct tsc2003_data *d) +{ + d->penirq = IRQ_GPIO(16); //PWM0 GPIO + return 0; +} + +/* +static int tsc2003_probe (struct device *dev) +{ + //struct platform_device *p = to_platform_device(dev); + struct tsc2003_data *d = container_of(dev->driver, struct tsc2003_data, driver); + int ret = 0; + int error; + + printk(KERN_ERR "TSC2003: tsc2003_probe probing...\n"); + + error = tsc2003_detect_irq(d); + if(error) + { + printk(KERN_ERR "TSC2003: IRQ probe failed\n"); + } + + if (d->penirq) + { + ret = request_irq(d->penirq, tsc2003_penirq, IRQF_TRIGGER_FALLING, DRIVER_NAME, d); + if (!ret) + { + printk(KERN_INFO "%s: irq %d\n", __FUNCTION__, d->penirq); + } + else + { + printk(KERN_INFO "%s: cannot grab irq %d\n", __FUNCTION__, d->penirq); + } + } + +#if defined(CONFIG_SYSFS) && defined(CONFIG_SENSORS_TSC2003_SYSFS) + ret = kernel_thread(tsc2003s_thread, d, CLONE_KERNEL); + if (ret >= 0) + ret = 0; + + device_create_file(dev, &dev_attr_addr); + device_create_file(dev, &dev_attr_vbat1); + device_create_file(dev, &dev_attr_vbat2); + device_create_file(dev, &dev_attr_in1); + device_create_file(dev, &dev_attr_in2); + device_create_file(dev, &dev_attr_temp0); + device_create_file(dev, &dev_attr_temp1); +#endif + + + return ret; +} +*/ + +static int tsc2003_driver_register (struct tsc2003_data *data) +{ + struct input_dev *idev; + int ret = 0; + int error; + + init_MUTEX(&data->sem); + + init_timer(&data->penirq_timer); + data->penirq_timer.data = (unsigned long)data; + data->penirq_timer.function = tsc2003_pen_up; + + error = tsc2003_detect_irq(data); + if(error) + { + printk(KERN_ERR "TSC2003: IRQ probe failed\n"); + } + + if (data->penirq) + { + ret = request_irq(data->penirq, tsc2003_penirq, IRQF_TRIGGER_FALLING, DRIVER_NAME, data); + if (!ret) + { + printk(KERN_INFO "%s: irq %d\n", __FUNCTION__, data->penirq); + init_completion(&data->tstask_completion); + init_completion(&data->penirq_completion); + } + else + { + printk(KERN_ERR "%s: cannot grab irq %d\n", __FUNCTION__, data->penirq); + } + } + + idev = input_allocate_device(); + data->idev = idev; + + idev->private = data; + idev->name = DRIVER_NAME; + idev->evbit[0] = BIT(EV_ABS); + idev->open = tsc2003_idev_open; + idev->close = tsc2003_idev_close; + idev->absbit[LONG(ABS_X)] = BIT(ABS_X); + idev->absbit[LONG(ABS_Y)] = BIT(ABS_Y); + idev->absbit[LONG(ABS_PRESSURE)] = BIT(ABS_PRESSURE); + input_set_abs_params(idev, ABS_X, 0, ADC_MAX, 0, 0); + input_set_abs_params(idev, ABS_Y, 0, ADC_MAX, 0, 0); + input_set_abs_params(idev, ABS_PRESSURE, 0, 0, 0, 0); + + if (!ret) + { + input_register_device(idev); + printk(KERN_INFO "tsc2003 - registering input device\n"); + } + + return ret; +} + +static int tsc2003_i2c_attach_adapter(struct i2c_adapter *adapter) +{ + printk(KERN_INFO "tsc2003 i2c touch screen controller\n"); + printk(KERN_INFO "Bill Gatliff \n"); + + return i2c_probe(adapter, &addr_data, tsc2003_i2c_detect); +} + +static int tsc2003_i2c_detach_client(struct i2c_client *client) +{ + int err; + struct tsc2003_data *d = i2c_get_clientdata(client); + + free_irq(d->penirq,d); + input_unregister_device(d->idev); + + if ((err = i2c_detach_client(client))) { + dev_err(&client->dev, "Client deregistration failed, " + "client not detached.\n"); + return err; + } + + return 0; +} + +static struct i2c_driver tsc2003_driver = { + .driver = { + .owner = THIS_MODULE, + .name = DRIVER_NAME, + }, + .attach_adapter = tsc2003_i2c_attach_adapter, + .detach_client = tsc2003_i2c_detach_client, + // .command = tsc2003_command, +}; + +static int tsc2003_i2c_detect (struct i2c_adapter *adapter, int address, +int kind) +{ + struct i2c_client *new_client; + struct tsc2003_data *data; + + int err = 0; + const char *name = ""; + + if (!i2c_check_functionality(adapter, + I2C_FUNC_SMBUS_BYTE_DATA + | I2C_FUNC_I2C + | I2C_FUNC_SMBUS_WORD_DATA)) + goto exit; + + data = kcalloc(1, sizeof(*data), GFP_KERNEL); + if (!data) { + err = -ENOMEM; + goto exit; + } + + new_client = &data->client; + i2c_set_clientdata(new_client, data); + new_client->addr = address; + new_client->adapter = adapter; + new_client->driver = &tsc2003_driver; + new_client->flags = 0; + + /* TODO: I'm pretty sure I'm not dealing with kind correctly */ + if (kind == 0 /* identification */ || kind < 0 /* detection */) + kind = tsc2003; + + if (kind == tsc2003) + name = DRIVER_NAME; + + /* try a command, see if we get an ack; + if we do, assume it's our device */ + printk(KERN_INFO "%s: probing address 0x%x\n", + __FUNCTION__, address); + err = tsc2003_powerdown(data); + if (err >= 0) + { + strlcpy(new_client->name, name, I2C_NAME_SIZE); + err = i2c_attach_client(new_client); + if (err) goto exit_free; + + tsc2003_init_client(new_client); + + err = tsc2003_driver_register(data); + if (err < 0) goto exit_free; + + printk(KERN_INFO "%s: device address 0x%x attached.\n", + __FUNCTION__, address); + return 0; + } + /* failure to detect when everything else is ok isn't an error */ + else err = 0; + + exit_free: + kfree(new_client); + exit: + return err; +} + +static int __init tsc2003_init(void) +{ + return i2c_add_driver(&tsc2003_driver); +} + +static void __exit tsc2003_exit(void) +{ + i2c_del_driver(&tsc2003_driver); +} + +MODULE_AUTHOR("Bill Gatliff "); +MODULE_DESCRIPTION("TSC2003 Touch Screen Controller driver"); +MODULE_LICENSE("GPL"); + +module_init(tsc2003_init); +module_exit(tsc2003_exit); + diff --git a/packages/linux/gumstix-kernel-2.6.21/uImage-in-own-partition.patch b/packages/linux/gumstix-kernel-2.6.21/uImage-in-own-partition.patch new file mode 100644 index 0000000000..f9a9df46dc --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/uImage-in-own-partition.patch @@ -0,0 +1,56 @@ +Index: linux-2.6.21gum/drivers/mtd/maps/gumstix-flash.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/mtd/maps/gumstix-flash.c ++++ linux-2.6.21gum/drivers/mtd/maps/gumstix-flash.c +@@ -39,8 +39,12 @@ static struct mtd_partition gumstix_flas + .offset = FLASH_ADDR + },{ + .name = "RootFS", +- .size = MTDPART_SIZ_FULL, +- .offset = MTDPART_OFS_APPEND ++ .size = MTDPART_SIZ_REMAINDER, ++ .offset = MTDPART_OFS_NXTBLK ++ },{ ++ .name = "Kernel", ++ .size = 0x00100000, ++ .offset = MTDPART_OFS_NXTBLK + } + }; + +Index: linux-2.6.21gum/drivers/mtd/mtdpart.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/mtd/mtdpart.c ++++ linux-2.6.21gum/drivers/mtd/mtdpart.c +@@ -321,7 +321,7 @@ int add_mtd_partitions(struct mtd_info * + { + struct mtd_part *slave; + u_int32_t cur_offset = 0; +- int i; ++ int i,j; + + printk (KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name); + +@@ -409,6 +409,11 @@ int add_mtd_partitions(struct mtd_info * + } + if (slave->mtd.size == MTDPART_SIZ_FULL) + slave->mtd.size = master->size - slave->offset; ++ if (slave->mtd.size == MTDPART_SIZ_REMAINDER) ++ { ++ slave->mtd.size = master->size - slave->offset; ++ for(j=i+1; jmtd.size -= parts[j].size; ++ } + cur_offset = slave->offset + slave->mtd.size; + + printk (KERN_NOTICE "0x%08x-0x%08x : \"%s\"\n", slave->offset, +Index: linux-2.6.21gum/include/linux/mtd/partitions.h +=================================================================== +--- linux-2.6.21gum.orig/include/linux/mtd/partitions.h ++++ linux-2.6.21gum/include/linux/mtd/partitions.h +@@ -47,6 +47,7 @@ struct mtd_partition { + + #define MTDPART_OFS_NXTBLK (-2) + #define MTDPART_OFS_APPEND (-1) ++#define MTDPART_SIZ_REMAINDER (-1) + #define MTDPART_SIZ_FULL (0) + + diff --git a/packages/linux/gumstix-kernel-2.6.21/ucb1400-ac97-audio.patch b/packages/linux/gumstix-kernel-2.6.21/ucb1400-ac97-audio.patch new file mode 100644 index 0000000000..eb40bd714a --- /dev/null +++ b/packages/linux/gumstix-kernel-2.6.21/ucb1400-ac97-audio.patch @@ -0,0 +1,309 @@ +Index: linux-2.6.21gum/sound/pci/ac97/ac97_codec.c +=================================================================== +--- linux-2.6.21gum.orig/sound/pci/ac97/ac97_codec.c ++++ linux-2.6.21gum/sound/pci/ac97/ac97_codec.c +@@ -158,7 +158,7 @@ static const struct ac97_codec_id snd_ac + { 0x4e534300, 0xffffffff, "LM4540,43,45,46,48", NULL, NULL }, // only guess --jk + { 0x4e534331, 0xffffffff, "LM4549", NULL, NULL }, + { 0x4e534350, 0xffffffff, "LM4550", patch_lm4550, NULL }, // volume wrap fix +-{ 0x50534304, 0xffffffff, "UCB1400", patch_ucb1400, NULL }, ++{ 0x50534304, 0xffffffff, "UCB1400", patch_ucb1400, NULL, AC97_HAS_NO_STD_PCM }, + { 0x53494c20, 0xffffffe0, "Si3036,8", mpatch_si3036, mpatch_si3036, AC97_MODEM_PATCH }, + { 0x54524102, 0xffffffff, "TR28022", NULL, NULL }, + { 0x54524106, 0xffffffff, "TR28026", NULL, NULL }, +Index: linux-2.6.21gum/sound/pci/ac97/ac97_patch.c +=================================================================== +--- linux-2.6.21gum.orig/sound/pci/ac97/ac97_patch.c ++++ linux-2.6.21gum/sound/pci/ac97/ac97_patch.c +@@ -29,6 +29,10 @@ + #include + #include + ++#include ++#include ++#include ++ + #include + #include + #include +@@ -406,6 +410,238 @@ + } + + /* ++ * UCB1400 codec ++ */ ++ ++#define AC97_UCB1400_FCSR1 0x6a ++#define AC97_UCB1400_FCSR2 0x6c ++ ++static const struct snd_kcontrol_new ucb1400_snd_ac97_controls[] = { ++ AC97_SINGLE("Tone Control - Bass", AC97_UCB1400_FCSR1, 11, 4, 0), ++ AC97_SINGLE("Tone Control - Treble", AC97_UCB1400_FCSR1, 9, 2, 0), ++ AC97_SINGLE("Headphone Playback Switch", AC97_UCB1400_FCSR1, 6, 1, 0), ++ AC97_SINGLE("De-emphasis", AC97_UCB1400_FCSR1, 5, 1, 0), ++ AC97_SINGLE("DC Filter", AC97_UCB1400_FCSR1, 4, 1, 0), ++ AC97_SINGLE("Hi-pass Filter", AC97_UCB1400_FCSR1, 3, 1, 0), ++ AC97_SINGLE("ADC Filter", AC97_UCB1400_FCSR2, 12, 1, 0), ++}; ++ ++#define NUM_GPIO_LINES 10 ++ ++static struct proc_dir_entry *proc_gpio_parent; ++static struct proc_dir_entry *proc_gpios[NUM_GPIO_LINES]; ++ ++typedef struct ++{ ++ int gpio; ++ char name[32]; ++ struct snd_ac97 *ac97; ++} gpio_summary_type; ++ ++static gpio_summary_type gpio_summaries[NUM_GPIO_LINES] = ++{ ++ { 0, "UCB1400-0-0" }, ++ { 1, "UCB1400-0-1" }, ++ { 2, "UCB1400-0-2" }, ++ { 3, "UCB1400-0-3" }, ++ { 4, "UCB1400-0-4" }, ++ { 5, "UCB1400-0-5" }, ++ { 6, "UCB1400-0-6" }, ++ { 7, "UCB1400-0-7" }, ++ { 8, "UCB1400-0-8" }, ++ { 9, "UCB1400-0-9" } ++}; ++ ++ ++static int proc_ucb1400_ac97_gpio_write(struct file *file, const char __user *buf, ++ unsigned long count, void *data) ++{ ++ char *cur, lbuf[count + 1]; ++ gpio_summary_type *summary = data; ++ u32 direction_is_out, operation_is_set; ++ int i = summary->gpio; ++ u16 dir, value; ++ ++ if (!capable(CAP_SYS_ADMIN)) ++ return -EACCES; ++ ++ memset(lbuf, 0, count + 1); ++ ++ if (copy_from_user(lbuf, buf, count)) ++ return -EFAULT; ++ ++ cur = lbuf; ++ ++ // Get current values ++ direction_is_out = !!(snd_ac97_read(summary->ac97, 0x5c) & (0x0001 << i)); ++ operation_is_set = !!(snd_ac97_read(summary->ac97, 0x5a) & (0x0001 << i)); ++ while(1) ++ { ++ // We accept options: {GPIO|AF1|AF2|AF3}, {set|clear}, {in|out} ++ // Anything else is an error ++ while(cur[0] && (isspace(cur[0]) || ispunct(cur[0]))) cur = &(cur[1]); ++ ++ if('\0' == cur[0]) break; ++ ++ // Ok, so now we're pointing at the start of something ++ switch(cur[0]) ++ { ++ case 'G': ++ // Check that next is "PIO" -- '\0' will cause safe short-circuit if end of buf ++ if(!(cur[1] == 'P' && cur[2] == 'I' && cur[3] == 'O')) goto parse_error; ++ cur = &(cur[4]); ++ break; ++ case 's': ++ if(!(cur[1] == 'e' && cur[2] == 't')) goto parse_error; ++ operation_is_set = 1; ++ cur = &(cur[3]); ++ break; ++ case 'c': ++ if(!(cur[1] == 'l' && cur[2] == 'e' && cur[3] == 'a' && cur[4] == 'r')) goto ++parse_error; ++ operation_is_set = 0; ++ cur = &(cur[5]); ++ break; ++ case 'i': ++ if(!(cur[1] == 'n')) goto parse_error; ++ direction_is_out = 0; ++ cur = &(cur[2]); ++ break; ++ case 'o': ++ if(!(cur[1] == 'u' && cur[2] == 't')) goto parse_error; ++ direction_is_out = 1; ++ cur = &(cur[3]); ++ break; ++ default: goto parse_error; ++ } ++ } ++ ++ // set/get value ++ dir = snd_ac97_read(summary->ac97, 0x5c); ++ value = snd_ac97_read(summary->ac97, 0x5a); ++ if (direction_is_out) ++ { ++ dir |= 0x0001 << i; ++ if (operation_is_set) ++ { ++ value |= 0x0001 << i; ++ } ++ else ++ { ++ value &= ~(0x0001 << i); ++ } ++ ++ snd_ac97_write(summary->ac97, 0x5c, dir); ++ snd_ac97_write(summary->ac97, 0x5a, value); ++ } ++ else // direction in ++ { ++ dir &= ~(0x0001 << i); ++ snd_ac97_write(summary->ac97, 0x5c, dir); ++ operation_is_set = snd_ac97_read(summary->ac97, 0x5a) & ~(0x0001 << i); ++ } ++ ++#ifdef CONFIG_PROC_GPIO_DEBUG ++ printk(KERN_INFO "Set (%s,%s,%s) via /proc/gpio/%s\n", ++ "GPIO", ++ direction_is_out ? "out" : "in", ++ operation_is_set ? "set" : "clear", ++ summary->name); ++#endif ++ ++ return count; ++ ++parse_error: ++ printk(KERN_CRIT "Parse error: Expect \"GPIO|[set|clear]|[in|out] ...\"\n"); ++ return -EINVAL; ++} ++ ++static int proc_ucb1400_ac97_gpio_read(char *page, char **start, off_t off, ++ int count, int *eof, void *data) ++{ ++ char *p = page; ++ gpio_summary_type *summary = data; ++ int len, i; /*, af;*/ ++ i = summary->gpio; ++ ++ p += sprintf(p, "%d\t%s\t%s\t%s\n", i, ++ "GPIO", ++ (snd_ac97_read(summary->ac97, 0x5c) & (0x0001 << i)) ? "out" : "in", ++ (snd_ac97_read(summary->ac97, 0x5a) & (0x0001 << i)) ? "set" : "clear"); ++ ++ len = (p - page) - off; ++ ++ if(len < 0) ++ { ++ len = 0; ++ } ++ ++ *eof = (len <= count) ? 1 : 0; ++ *start = page + off; ++ ++ return len; ++} ++ ++int patch_ucb1400(struct snd_ac97 * ac97) ++{ ++ int err, i; ++ ++ proc_gpio_parent = NULL; ++ for (proc_gpio_parent = proc_root.subdir; proc_gpio_parent; proc_gpio_parent = proc_gpio_parent->next) { ++ if (( proc_gpio_parent->namelen == 4 ) && ( memcmp(proc_gpio_parent->name, "gpio", 4 ) == 0 )) ++ break; ++ } ++ ++ // proc_gpio_parent will be non-NULL if the directory already exists ++ ++ if (!proc_gpio_parent) { ++ proc_gpio_parent = proc_mkdir("gpio", NULL); ++ } ++ ++ if(!proc_gpio_parent) return 0; ++ ++ for(i=0; i < NUM_GPIO_LINES; i++) ++ { ++ proc_gpios[i] = create_proc_entry(gpio_summaries[i].name, 0644, proc_gpio_parent); ++ if(proc_gpios[i]) ++ { ++ gpio_summaries[i].ac97 = ac97; ++ proc_gpios[i]->data = &gpio_summaries[i]; ++ proc_gpios[i]->read_proc = proc_ucb1400_ac97_gpio_read; ++ proc_gpios[i]->write_proc = proc_ucb1400_ac97_gpio_write; ++ } ++ } ++ ++ for(i = 0; i < ARRAY_SIZE(ucb1400_snd_ac97_controls); i++) { ++ if((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&ucb1400_snd_ac97_controls[i], ac97))) < 0) ++ return err; ++ } ++ ++ snd_ac97_write_cache(ac97, AC97_UCB1400_FCSR1, ++ (0 << 11) | // 0 base boost ++ (0 << 9) | // 0 treble boost ++ (0 << 7) | // Mode = flat ++ (1 << 6) | // Headphones enable ++ (0 << 5) | // De-emphasis disabled ++ (1 << 4) | // DC filter enabled ++ (1 << 3) | // Hi-pass filter enabled ++ (0 << 2) | // disable interrupt signalling via GPIO_INT ++ (1 << 0) // clear ADC overflow status if set ++ ); ++ ++ snd_ac97_write_cache(ac97, AC97_UCB1400_FCSR2, ++ (0 << 15) | // must be 0 ++ (0 << 13) | // must be 0 ++ (1 << 12) | // ADC filter enabled ++ (0 << 10) | // must be 0 ++ (0 << 4) | // Smart low power mode on neither Codec nor PLL ++ (0 << 0) // must be 0 ++ ); ++ ++ return 0; ++} ++ ++/* + * May 2, 2003 Liam Girdwood + * removed broken wolfson00 patch. + * added support for WM9705,WM9708,WM9709,WM9710,WM9711,WM9712 and WM9717. +@@ -3408,41 +3644,3 @@ + ac97->res_table = lm4550_restbl; + return 0; + } +- +-/* +- * UCB1400 codec (http://www.semiconductors.philips.com/acrobat_download/datasheets/UCB1400-02.pdf) +- */ +-static const struct snd_kcontrol_new snd_ac97_controls_ucb1400[] = { +-/* enable/disable headphone driver which allows direct connection to +- stereo headphone without the use of external DC blocking +- capacitors */ +-AC97_SINGLE("Headphone Driver", 0x6a, 6, 1, 0), +-/* Filter used to compensate the DC offset is added in the ADC to remove idle +- tones from the audio band. */ +-AC97_SINGLE("DC Filter", 0x6a, 4, 1, 0), +-/* Control smart-low-power mode feature. Allows automatic power down +- of unused blocks in the ADC analog front end and the PLL. */ +-AC97_SINGLE("Smart Low Power Mode", 0x6c, 4, 3, 0), +-}; +- +-static int patch_ucb1400_specific(struct snd_ac97 * ac97) +-{ +- int idx, err; +- for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_ucb1400); idx++) +- if ((err = snd_ctl_add(ac97->bus->card, snd_ctl_new1(&snd_ac97_controls_ucb1400[idx], ac97))) < 0) +- return err; +- return 0; +-} +- +-static struct snd_ac97_build_ops patch_ucb1400_ops = { +- .build_specific = patch_ucb1400_specific, +-}; +- +-int patch_ucb1400(struct snd_ac97 * ac97) +-{ +- ac97->build_ops = &patch_ucb1400_ops; +- /* enable headphone driver and smart low power mode by default */ +- snd_ac97_write(ac97, 0x6a, 0x0050); +- snd_ac97_write(ac97, 0x6c, 0x0030); +- return 0; +-} diff --git a/packages/linux/gumstix-kernel_2.6.21.bb b/packages/linux/gumstix-kernel_2.6.21.bb new file mode 100644 index 0000000000..3bc7df238a --- /dev/null +++ b/packages/linux/gumstix-kernel_2.6.21.bb @@ -0,0 +1,54 @@ +require gumstix-linux.inc + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \ + ${@base_contains('MACHINE_FEATURES', 'lcd','file://defconfig', 'file://defconfig-nofb',d)} \ + file://tsc2003.c \ + file://tsc2003-config.diff;patch=1 \ + file://pxa-regs-additions.patch;patch=1 \ + file://header.patch;patch=1 \ + file://arch-config.patch;patch=1 \ + file://board-init.patch;patch=1 \ + file://compact-flash.patch;patch=1 \ + file://flash.patch;patch=1 \ + file://pxa2xx_udc.patch;patch=1 \ + file://bkpxa-pxa-cpu.patch;patch=1 \ + file://bkpxa-pxa-cpufreq.patch;patch=1 \ + file://proc-gpio.patch;patch=1 \ + file://serial-ether-addr.patch;patch=1 \ + file://cpufreq-better-freqs.patch;patch=1 \ + file://ethernet-config.patch;patch=1 \ + file://smc-ether-addr.patch;patch=1 \ + file://cpufreq-ondemand-by-default.patch;patch=1 \ + file://modular-init-bluetooth.patch;patch=1 \ + file://modular-init-smc91x.patch;patch=1 \ + file://modular-init-usb-gadget.patch;patch=1 \ + file://bugfix-i2c-include.patch;patch=1 \ + file://bugfix-mmc-clock.patch;patch=1 \ + file://bugfix-pxa-cpufreq.patch;patch=1 \ + file://bugfix-serial-interrupt.patch;patch=1 \ + file://bugfix-serial-register-status.patch;patch=1 \ + file://mach-types-fix.patch;patch=1 \ + file://pcm-gcc-411-bugfix.patch;patch=1 \ + file://ucb1400-ac97-audio.patch;patch=1 \ + file://gumstix-asoc.patch;patch=1 \ + file://disable-uncompress-message.patch;patch=1 \ + file://serial-divisor.patch;patch=1 \ + file://mmc-card-detect.patch;patch=1 \ + file://misalignment-handling.patch;patch=1 \ + file://compile-fix-pxa_cpufreq.patch;patch=1 \ + file://pxafb-definition.patch;patch=1 \ + file://270-usb-gadget-udc.patch;patch=1 \ + file://gumstix-pxa270-usb-host.patch;patch=1 \ + file://cpufreq-fixup.patch;patch=1 \ + file://uImage-in-own-partition.patch;patch=1 \ + file://pxa-regs-fixup.patch;patch=1 \ + file://gumstix-fb-logo.patch;patch=1 \ + file://gumstix-pxa270-mmc.patch;patch=1 \ + file://pxafb-18bpp-mode.patch;patch=1 \ + file://smc911x-fixup.patch;patch=1 \ + " + +do_configure_prepend() { + ${@base_contains('MACHINE_FEATURES', 'lcd','','mv ${WORKDIR}/defconfig-nofb ${WORKDIR}/defconfig',d)} + cp ${WORKDIR}/tsc2003.c ${S}/drivers/i2c/chips/ +} diff --git a/packages/linux/gumstix-linux.inc b/packages/linux/gumstix-linux.inc new file mode 100644 index 0000000000..50111cb545 --- /dev/null +++ b/packages/linux/gumstix-linux.inc @@ -0,0 +1,74 @@ +DESCRIPTION = "Linux kernel for custom configurations" +SECTION = "kernel" +LICENSE = "GPL" +PR = "r1" + +inherit kernel + +DEPENDS += " \ + u-boot-mkimage-openmoko-native \ + " + +KERNEL_IMAGE_BASE_NAME = ${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE} + +S = "${WORKDIR}/linux-${PV}" +do_deploy[dirs] = "${S}" + +do_configure_prepend() { + echo "" > ${S}/.config + + if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then + echo "CONFIG_AEABI=y" >> ${S}/.config + echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config + else + echo "# CONFIG_AEABI is not set" >> ${S}/.config + echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config + fi + + echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config + + sed -e '/CONFIG_AEABI/d' \ + -e '/CONFIG_OABI_COMPAT=/d' \ + -e '/CONFIG_CMDLINE=/d' \ + < '${WORKDIR}/defconfig' >>'${S}/.config' + + yes '' | oe_runmake oldconfig +} + +do_sizecheck() { + if [ ! -z "${KERNEL_IMAGE_MAXSIZE}" ]; then + size=`ls -l arch/${ARCH}/boot/${KERNEL_IMAGETYPE} | awk '{ print $5}'` + if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then + rm arch/${ARCH}/boot/${KERNEL_IMAGETYPE} + die "This kernel (size=$size) is too big for your device. Please reduce the size of the kernel by making more of it modular." + fi + fi +} + +do_install_prepend() { + if test -e arch/${ARCH}/boot/Image ; then + ln -f arch/${ARCH}/boot/Image arch/${ARCH}/boot/uImage + fi + + if test -e arch/${ARCH}/boot/images/uImage ; then + ln -f arch/${ARCH}/boot/images/uImage arch/${ARCH}/boot/uImage + fi +} + +do_deploy() { + install -d ${DEPLOY_DIR_IMAGE} + install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin + tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${PR}-${MACHINE}.tgz -C ${D} lib + + if test "x${KERNEL_IMAGETYPE}" = "xuImage" ; then + ${OBJCOPY} -O binary -R .note -R .comment -S arch/${ARCH}/boot/compressed/vmlinux linux.bin + uboot-mkimage -A ${ARCH} -O linux -T kernel -C none -a ${UBOOT_ENTRYPOINT} -e ${UBOOT_ENTRYPOINT} -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin + rm -f linux.bin + + fi +} + +addtask sizecheck before do_install after do_compile +addtask deploy before do_package after do_install + + -- cgit v1.2.3 From 72761e468bb3e905459f2b81ce1bc4d80419481f Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 15 Feb 2008 15:38:05 +0000 Subject: kernel.bbclass: Add satndalone task "builtin_initramfs". * Builds a zImage with linked in initramfs specified by INITRAMFS_LOC param. --- classes/kernel.bbclass | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index 047a3ec047..28e04ea204 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -11,6 +11,10 @@ PACKAGES_DYNAMIC += "kernel-image-*" export OS = "${TARGET_OS}" export CROSS_COMPILE = "${TARGET_PREFIX}" KERNEL_IMAGETYPE ?= "zImage" +# Base filename under which users see built kernel (i.e. deploy name) +KERNEL_IMAGE_BASE_NAME = "${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}" +# Symlink basename pointing to the most recently built kernel for a machine +KERNEL_IMAGE_SYMLINK_NAME = "${KERNEL_IMAGETYPE}-${MACHINE}" KERNEL_PRIORITY = "${@bb.data.getVar('PV',d,1).split('-')[0].split('.')[-1]}" @@ -30,6 +34,7 @@ HOST_LD_KERNEL_ARCH ?= "${TARGET_LD_KERNEL_ARCH}" KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc${KERNEL_CCSUFFIX} ${HOST_CC_KERNEL_ARCH}" KERNEL_LD = "${LD}${KERNEL_LDSUFFIX} ${HOST_LD_KERNEL_ARCH}" +# Where built kernel lies in the kernel tree KERNEL_OUTPUT = "arch/${ARCH}/boot/${KERNEL_IMAGETYPE}" KERNEL_IMAGEDEST = "boot" @@ -60,6 +65,22 @@ kernel_do_compile() { fi } +do_builtin_initramfs() { + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE + cp "${INITRAMFS_LOC}" usr/initramfs_data.cpio.gz + oe_runmake ${KERNEL_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" + install -d ${DEPLOY_DIR_IMAGE} + mv ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.no-initramfs.bin + install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin + # Make sure to kill injected initramfs, in case someone will do "-c compile -f" + rm usr/initramfs_data.cpio.gz + + [ -n "${DEPLOY_TO}" ] && install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_TO} +} +addtask builtin_initramfs after do_compile +# As it accepts external parameter(s), better make it unstamped +do_builtin_initramfs[nostamp] = "1" + kernel_do_stage() { ASMDIR=`readlink include/asm` -- cgit v1.2.3 From ef2f7fcdc44e806b13a199eb6ceff86ca4bcdeb5 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 15 Feb 2008 15:41:57 +0000 Subject: libxine: omit restore-esd.patch from libxine-x11_1.0.bb. Fixes bug 3074 and enables successul build. --- packages/libxine/libxine-x11_1.0.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/libxine/libxine-x11_1.0.bb b/packages/libxine/libxine-x11_1.0.bb index 28d3be1b3d..db0d725aac 100644 --- a/packages/libxine/libxine-x11_1.0.bb +++ b/packages/libxine/libxine-x11_1.0.bb @@ -5,7 +5,7 @@ PRIORITY = "optional" LICENSE = "GPL" DEPENDS = "zlib libogg libvorbis tremor libmad libmodplug esound virtual/libx11 libxext libpng" PROVIDES = "virtual/libxine" -PR = "r0" +PR = "r1" inherit autotools pkgconfig gettext binconfig @@ -17,7 +17,7 @@ SRC_URI = "http://heanet.dl.sourceforge.net/sourceforge/xine/xine-lib-${PV}.tar. file://libxine-ffmpeg-enable-arm.patch;patch=1 \ file://no-caca-no-aalib.patch;patch=1 \ file://dont-have-xv.patch;patch=1 \ - file://restore-esd.patch;patch=1 \ +# file://restore-esd.patch;patch=1 \ file://fix-syntax-xine-vorbis-decoder.patch;patch=1 \ file://libxine-cut-memusage.patch;patch=1 \ file://mpegvideo-static-inlinine.patch;patch=1 \ -- cgit v1.2.3 From 07e7c1fcd70ab0a124aaee53deacb49a9f388975 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 15 Feb 2008 15:43:42 +0000 Subject: kernel-initramfs: A recipe to build a kernel with linked in initramfs. * First builds ${KERNEL_INITRAMFS} in cpio.gz format, then stuffs it into kernel as specified by virtual/kernel, deploys to deploy dir, and packages kernel-image (the package would overrite previously built kernel-image package w/o initramfs, so caveat). * kernel-image packaing actually requires PKGPV/PKGPR support, to be RFCed. --- packages/initrdscripts/kernel-initramfs_1.0.bb | 48 ++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 packages/initrdscripts/kernel-initramfs_1.0.bb diff --git a/packages/initrdscripts/kernel-initramfs_1.0.bb b/packages/initrdscripts/kernel-initramfs_1.0.bb new file mode 100644 index 0000000000..be1c067ba2 --- /dev/null +++ b/packages/initrdscripts/kernel-initramfs_1.0.bb @@ -0,0 +1,48 @@ +DESCRIPTION = "A kernel with internal initramfs" +PR = "r1" + +#inherit kernel +KERNEL_IMAGETYPE ?= "zImage" + +# Name of initramfs recipe to build and put result into kernel +KERNEL_INITRAMFS ?= "initramfs-image" + +do_compile() { + cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} ANGSTROM_MODE=uclibc IMAGE_FSTYPES=cpio.gz DEPLOY_TO=${WORKDIR}/initramfs.bin bitbake ${KERNEL_INITRAMFS} -c deploy_to + cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} INITRAMFS_LOC=${WORKDIR}/initramfs.bin DEPLOY_TO=${WORKDIR}/\${KERNEL_IMAGE_BASE_NAME} bitbake virtual/kernel -c builtin_initramfs +} + +do_install() { + install -d ${D}/boot/ + install -m 644 ${WORKDIR}/${KERNEL_IMAGETYPE}* ${D}/boot/${KERNEL_IMAGETYPE}-${@get_pv(d)} +} + +def get_version(d): + import bb + import os + dest = bb.data.getVar("WORKDIR", d, 1) + try: + files = os.listdir(dest) + files = filter(lambda f:f.startswith("zImage-"), files) + ver = files[0][len("zImage-"):] + return ver + except: + return "dum-m-y" + +def get_pv(d): + ver = get_version(d) + verc = ver.split("-") + return verc[0] + "-" + verc[1] + +def get_pr(d): + ver = get_version(d) + verc = ver.split("-") + return verc[2] + +PACKAGES = "kernel-image" +FILES_kernel-image = "/boot/*" +PKG_kernel-image = "kernel-image-${@get_pv(d)}" +PKGPV_kernel-image = "${@get_pv(d)}" +PKGPR_kernel-image = "${@get_pr(d)}" + +PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3 From 9dc54cff61a3ff2b57d758f81c34b20cea402df9 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Fri, 15 Feb 2008 16:51:33 +0000 Subject: chinook-compat.conf: - added more packages renames - added more preferred versions --- conf/distro/chinook-compat.conf | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/conf/distro/chinook-compat.conf b/conf/distro/chinook-compat.conf index ef0fa80f65..c439ad67f6 100644 --- a/conf/distro/chinook-compat.conf +++ b/conf/distro/chinook-compat.conf @@ -83,7 +83,8 @@ PREFERRED_VERSION_pango = "1.16.4" PREFERRED_VERSION_atk = "1.18.0" PREFERRED_VERSION_gtk+ = "2.10.14" -PREFERRED_VERSION_gnome-vfs = "2.16" +PREFERRED_VERSION_gnome-vfs = "2.16.3" + # 3.9.1 would be correct PREFERRED_VERSION_gtkhtml-3.8 = "3.8.2" PREFERRED_VERSION_libxml2 = "2.6.27" @@ -99,12 +100,16 @@ PREFERRED_VERSION_gst-plugins-base = "0.10.14" # 0.11.3 would be correct ( + maemo patches) PREFERRED_VERSION_gst-ffmpeg = "0.10.2" +PREFERRED_VERSION_bluez-libs = "3.20" + PREFERRED_PROVIDER_virtual/db = "db" PREFERRED_PROVIDER_virtual/db-native = "db-native" PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive" # This is a hack to avoid building mesa which crashes the compiler PREFERRED_PROVIDER_virtual/libsdl = "libsdl-directfb" +PREFERRED_VERSION_libsdl-directfb = "1.2.9" +PREFERRED_VERSION_libsdl-image = "1.2.3" PREFERRED_PROVIDER_xserver = "xserver-kdrive" @@ -137,11 +142,6 @@ PREFERRED_VERSION_pixman = "0.9.6" PREFERRED_PROVIDER_virtual/libqte2 = "qte-mt" PREFERRED_PROVIDER_avahi = "avahi" -# Prevent chosing jikes-native (until java bootstrap patch is merged). -PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native" - -PREFERRED_PROVIDER_swt3.4-gtk = "swt3.4-gtk-hildon" - PREFERRED_VERSION_libsoup = "2.2.7" PREFERRED_VERSION_libglade = "2.4.2" PREFERRED_VERSION_gnutls = "1.4.5" @@ -150,6 +150,23 @@ PREFERRED_VERSION_libgcrypt = "1.2.3" PREFERRED_VERSION_gpe-scap = "1.3" +# various Maemo4 specific libraries +PREFERRED_VERSION_mce-dev = "1.6.3" +PREFERRED_VERSION_libosso = "2.13" +PREFERRED_VERSION_libhildon = "1.99.0" +PREFERRED_VERSION_libhildonmime = "1.10.0" +PREFERRED_VERSION_libhildonfm = "1.9.46" +PREFERRED_VERSION_hildon-thumbnail = "0.14" +PREFERRED_VERSION_osso-gwconnect = "1.0.12" +PREFERRED_VERSION_osso-gnome-vfs2 = "2.16.3" + +# Java stuff + +PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native" + +PREFERRED_PROVIDER_swt3.4-gtk = "swt3.4-gtk-hildon" +PREFERRED_VERSION_swt3.4-gtk-hildon = "3.3+3.4M5" + # Does not compile with the CodeSourcery compiler .. :( PREFERRED_VERSION_kaffe = "1.1.8+cvs20080120" PREFERRED_VERSION_kaffeh-native = "1.1.8+cvs20080120" @@ -172,3 +189,11 @@ PKG_hildon-1 = "libhildon1" PKG_zlib = "zlib1g" PKG_libglade = "libglade2-0" PKG_libsoup = "libsoup2.2-8" + +PKG_libsdl-image = "libsdl-image1.2" +PKG_libsdl-directfb = "libsdl1.2" + +PKG_bluez-libs = "libbluetooth2" + +PKG_osso-ic-oss = "osso-ic" +PKG_libconic = "libconic0" -- cgit v1.2.3 From f1d9b455031c184ea29324e8317a356e87da9d17 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Fri, 15 Feb 2008 20:18:48 +0000 Subject: linux-rt-2.6.24: Added squashfs-lzma. Reduced kernel configuration. --- packages/linux/linux-rt_2.6.24.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/linux/linux-rt_2.6.24.bb b/packages/linux/linux-rt_2.6.24.bb index 38bdfef48b..9869757391 100644 --- a/packages/linux/linux-rt_2.6.24.bb +++ b/packages/linux/linux-rt_2.6.24.bb @@ -6,12 +6,12 @@ DEFAULT_PREFERENCE_mpc8313e-rdb = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" -PR = "r0" +PR = "r1" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ ${KERNELORG_MIRROR}/pub/linux/kernel/projects/rt/patch-2.6.24-rt1.bz2;patch=1 \ - file://defconfig \ - " + http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \ + file://defconfig" S = "${WORKDIR}/linux-2.6.24" -- cgit v1.2.3 From e02f6e1fa184fb4195f3237ecda5a7ae102e7c11 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Fri, 15 Feb 2008 20:53:26 +0000 Subject: linux-rt-2.6.24: Added squashfs-lzma. Reduced kernel configuration. --- .../linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig | 419 ++++----------------- 1 file changed, 64 insertions(+), 355 deletions(-) diff --git a/packages/linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig b/packages/linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig index 9fecb47fa3..23787a16b4 100644 --- a/packages/linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig +++ b/packages/linux/linux-rt-2.6.24/mpc8313e-rdb/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.24-rt1 -# Thu Feb 14 00:07:12 2008 +# Fri Feb 15 20:51:04 2008 # # CONFIG_PPC64 is not set @@ -60,7 +60,7 @@ CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y -CONFIG_SWAP=y +# CONFIG_SWAP is not set CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set @@ -72,10 +72,10 @@ CONFIG_SYSVIPC_SYSCTL=y # 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_GROUP_SCHED is not set +# CONFIG_FAIR_USER_SCHED is not set # CONFIG_FAIR_CGROUP_SCHED is not set -CONFIG_SYSFS_DEPRECATED=y +# CONFIG_SYSFS_DEPRECATED is not set # CONFIG_RELAY is not set CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" @@ -95,14 +95,14 @@ CONFIG_ANON_INODES=y # CONFIG_EPOLL is not set CONFIG_SIGNALFD=y CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y +# CONFIG_SHMEM is not set +# CONFIG_VM_EVENT_COUNTERS is not set 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_TINY_SHMEM=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y @@ -120,14 +120,14 @@ CONFIG_BLOCK=y # IO Schedulers # CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y -CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set CONFIG_IOSCHED_CFQ=y -CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_AS is not set # CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CFQ=y # CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_IOSCHED="cfq" # # Platform support @@ -166,7 +166,7 @@ CONFIG_PPC_MPC831x=y # # CONFIG_HIGHMEM is not set CONFIG_TICK_ONESHOT=y -# CONFIG_NO_HZ is not set +CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y # CONFIG_HZ_100 is not set @@ -211,7 +211,7 @@ CONFIG_PROC_DEVICETREE=y # CONFIG_PM is not set CONFIG_SUSPEND_UP_POSSIBLE=y CONFIG_HIBERNATION_UP_POSSIBLE=y -CONFIG_SECCOMP=y +# CONFIG_SECCOMP is not set CONFIG_WANT_DEVICE_TREE=y CONFIG_DEVICE_TREE="" CONFIG_ISA_DMA_API=y @@ -237,15 +237,15 @@ CONFIG_PCI_LEGACY=y # # Advanced setup # -# CONFIG_ADVANCED_OPTIONS is not set - -# -# Default settings for advanced configuration options are used -# +CONFIG_ADVANCED_OPTIONS=y CONFIG_HIGHMEM_START=0xfe000000 +# CONFIG_LOWMEM_SIZE_BOOL is not set CONFIG_LOWMEM_SIZE=0x30000000 +# CONFIG_KERNEL_START_BOOL is not set CONFIG_KERNEL_START=0xc0000000 +# CONFIG_TASK_SIZE_BOOL is not set CONFIG_TASK_SIZE=0xc0000000 +# CONFIG_BOOT_LOAD_BOOL is not set CONFIG_BOOT_LOAD=0x00800000 # @@ -276,7 +276,7 @@ CONFIG_IP_ROUTE_VERBOSE=y CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y +# CONFIG_IP_PNP_RARP is not set CONFIG_NET_IPIP=m CONFIG_NET_IPGRE=m # CONFIG_NET_IPGRE_BROADCAST is not set @@ -456,25 +456,18 @@ CONFIG_IP6_NF_RAW=m # CONFIG_IP_DCCP is not set # CONFIG_IP_SCTP is not set # CONFIG_TIPC is not set -CONFIG_ATM=m -CONFIG_ATM_CLIP=m -# CONFIG_ATM_CLIP_NO_ICMP is not set -CONFIG_ATM_LANE=m -CONFIG_ATM_MPOA=m -CONFIG_ATM_BR2684=m -# CONFIG_ATM_BR2684_IPFILTER is not set +# CONFIG_ATM is not set CONFIG_BRIDGE=m CONFIG_VLAN_8021Q=m # CONFIG_DECNET is not set CONFIG_LLC=m CONFIG_LLC2=m -CONFIG_IPX=m -# CONFIG_IPX_INTERN 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=m +# CONFIG_WAN_ROUTER is not set CONFIG_NET_SCHED=y # @@ -483,7 +476,6 @@ CONFIG_NET_SCHED=y CONFIG_NET_SCH_CBQ=m CONFIG_NET_SCH_HTB=m CONFIG_NET_SCH_HFSC=m -CONFIG_NET_SCH_ATM=m CONFIG_NET_SCH_PRIO=m CONFIG_NET_SCH_RR=m CONFIG_NET_SCH_RED=m @@ -535,31 +527,7 @@ CONFIG_NET_SCH_FIFO=y # 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_CMTP is not set -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=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_BT is not set # CONFIG_AF_RXRPC is not set CONFIG_FIB_RULES=y @@ -581,9 +549,7 @@ CONFIG_IEEE80211_CRYPT_CCMP=m CONFIG_IEEE80211_CRYPT_TKIP=m CONFIG_IEEE80211_SOFTMAC=m # CONFIG_IEEE80211_SOFTMAC_DEBUG is not set -CONFIG_RFKILL=m -CONFIG_RFKILL_INPUT=m -CONFIG_RFKILL_LEDS=y +# CONFIG_RFKILL is not set # CONFIG_NET_9P is not set # @@ -628,6 +594,9 @@ 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_CFI_NOSWAP is not set +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set CONFIG_MTD_MAP_BANK_WIDTH_1=y CONFIG_MTD_MAP_BANK_WIDTH_2=y CONFIG_MTD_MAP_BANK_WIDTH_4=y @@ -710,7 +679,7 @@ CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=32768 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 # CONFIG_CDROM_PKTCDVD is not set -CONFIG_ATA_OVER_ETH=m +# CONFIG_ATA_OVER_ETH is not set CONFIG_MISC_DEVICES=y # CONFIG_PHANTOM is not set CONFIG_EEPROM_93CX6=m @@ -755,42 +724,7 @@ CONFIG_SCSI_SPI_ATTRS=y # 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_BUSLOGIC is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_EATA is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_GDTH is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_SRP is not set +# CONFIG_SCSI_LOWLEVEL is not set # CONFIG_ATA is not set # CONFIG_MD is not set # CONFIG_FUSION is not set @@ -952,20 +886,6 @@ CONFIG_ZD1211RW=m # CONFIG_USB_RTL8150 is not set # CONFIG_USB_USBNET is not set # CONFIG_WAN is not set -CONFIG_ATM_DRIVERS=y -# CONFIG_ATM_DUMMY is not set -# CONFIG_ATM_TCP is not set -# CONFIG_ATM_LANAI is not set -# CONFIG_ATM_ENI is not set -# CONFIG_ATM_FIRESTREAM is not set -# CONFIG_ATM_ZATM is not set -# CONFIG_ATM_NICSTAR is not set -# CONFIG_ATM_IDT77252 is not set -# CONFIG_ATM_AMBASSADOR is not set -# CONFIG_ATM_HORIZON is not set -# CONFIG_ATM_IA is not set -# CONFIG_ATM_FORE200E_MAYBE is not set -# CONFIG_ATM_HE is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set CONFIG_PPP=m @@ -977,7 +897,6 @@ CONFIG_PPP_DEFLATE=m CONFIG_PPP_BSDCOMP=m CONFIG_PPP_MPPE=m CONFIG_PPPOE=m -CONFIG_PPPOATM=m CONFIG_PPPOL2TP=m # CONFIG_SLIP is not set CONFIG_SLHC=m @@ -986,103 +905,7 @@ CONFIG_SLHC=m # CONFIG_NETCONSOLE is not set # CONFIG_NETPOLL is not set # CONFIG_NET_POLL_CONTROLLER is not set -CONFIG_ISDN=m -CONFIG_ISDN_I4L=m -# CONFIG_ISDN_PPP is not set -# CONFIG_ISDN_AUDIO is not set - -# -# ISDN feature submodules -# -CONFIG_ISDN_DRV_LOOP=m -CONFIG_ISDN_DIVERSION=m - -# -# ISDN4Linux hardware drivers -# - -# -# Passive cards -# -CONFIG_ISDN_DRV_HISAX=m - -# -# D-channel protocol features -# -CONFIG_HISAX_EURO=y -CONFIG_DE_AOC=y -# CONFIG_HISAX_NO_SENDCOMPLETE is not set -# CONFIG_HISAX_NO_LLC is not set -# CONFIG_HISAX_NO_KEYPAD is not set -CONFIG_HISAX_1TR6=y -CONFIG_HISAX_NI1=y -CONFIG_HISAX_MAX_CARDS=8 - -# -# HiSax supported cards -# -CONFIG_HISAX_16_3=y -CONFIG_HISAX_S0BOX=y -CONFIG_HISAX_FRITZPCI=y -CONFIG_HISAX_AVM_A1_PCMCIA=y -CONFIG_HISAX_ELSA=y -CONFIG_HISAX_DIEHLDIVA=y -CONFIG_HISAX_SEDLBAUER=y -CONFIG_HISAX_NICCY=y -CONFIG_HISAX_BKM_A4T=y -CONFIG_HISAX_SCT_QUADRO=y -CONFIG_HISAX_GAZEL=y -CONFIG_HISAX_W6692=y -CONFIG_HISAX_HFC_SX=y -# CONFIG_HISAX_DEBUG is not set - -# -# HiSax PCMCIA card service modules -# - -# -# HiSax sub driver modules -# -CONFIG_HISAX_ST5481=m -CONFIG_HISAX_HFCUSB=m -CONFIG_HISAX_HFC4S8S=m -CONFIG_HISAX_FRITZ_PCIPNP=m -CONFIG_HISAX_HDLC=y - -# -# Active cards -# -CONFIG_HYSDN=m -CONFIG_HYSDN_CAPI=y -CONFIG_ISDN_DRV_GIGASET=m -CONFIG_GIGASET_BASE=m -CONFIG_GIGASET_M105=m -CONFIG_GIGASET_M101=m -# CONFIG_GIGASET_DEBUG is not set -CONFIG_GIGASET_UNDOCREQ=y -CONFIG_ISDN_CAPI=m -CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y -CONFIG_CAPI_TRACE=y -# CONFIG_ISDN_CAPI_MIDDLEWARE is not set -CONFIG_ISDN_CAPI_CAPI20=m -# CONFIG_ISDN_CAPI_CAPIDRV is not set - -# -# CAPI hardware drivers -# -CONFIG_CAPI_AVM=y -CONFIG_ISDN_DRV_AVMB1_B1PCI=m -# CONFIG_ISDN_DRV_AVMB1_B1PCIV4 is not set -CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m -CONFIG_ISDN_DRV_AVMB1_T1PCI=m -CONFIG_ISDN_DRV_AVMB1_C4=m -CONFIG_CAPI_EICON=y -CONFIG_ISDN_DIVAS=m -CONFIG_ISDN_DIVAS_BRIPCI=y -CONFIG_ISDN_DIVAS_PRIPCI=y -CONFIG_ISDN_DIVAS_DIVACAPI=m -CONFIG_ISDN_DIVAS_USERIDI=m -CONFIG_ISDN_DIVAS_MAINT=m +# CONFIG_ISDN is not set # CONFIG_PHONE is not set # @@ -1229,8 +1052,23 @@ CONFIG_SPI_MPC83xx=y # CONFIG_SPI_AT25=m CONFIG_SPI_SPIDEV=m -CONFIG_SPI_TLE62X0=m -# CONFIG_W1 is not set +# CONFIG_SPI_TLE62X0 is not set +CONFIG_W1=y + +# +# 1-wire Bus Masters +# +# CONFIG_W1_MASTER_MATROX is not set +# CONFIG_W1_MASTER_DS2490 is not set +# CONFIG_W1_MASTER_DS2482 is not set + +# +# 1-wire Slaves +# +# CONFIG_W1_SLAVE_THERM is not set +# CONFIG_W1_SLAVE_SMEM is not set +# CONFIG_W1_SLAVE_DS2433 is not set +# CONFIG_W1_SLAVE_DS2760 is not set # CONFIG_POWER_SUPPLY is not set CONFIG_HWMON=y # CONFIG_HWMON_VID is not set @@ -1320,8 +1158,7 @@ CONFIG_SSB_POSSIBLE=y # # CONFIG_VIDEO_DEV is not set # CONFIG_DVB_CORE is not set -CONFIG_DAB=y -# CONFIG_USB_DABUSB is not set +# CONFIG_DAB is not set # # Graphics support @@ -1329,7 +1166,7 @@ CONFIG_DAB=y # CONFIG_AGP is not set # CONFIG_DRM is not set # CONFIG_VGASTATE is not set -CONFIG_VIDEO_OUTPUT_CONTROL=m +# CONFIG_VIDEO_OUTPUT_CONTROL is not set # CONFIG_FB is not set # CONFIG_BACKLIGHT_LCD_SUPPORT is not set @@ -1341,128 +1178,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m # # Sound # -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# PCI devices -# -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ALS300 is not set -# CONFIG_SND_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_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_EMU10K1X is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDA_INTEL is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# ALSA PowerMac devices -# - -# -# ALSA PowerPC devices -# - -# -# SPI devices -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m -# 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_SOUND is not set CONFIG_HID_SUPPORT=y CONFIG_HID=y # CONFIG_HID_DEBUG is not set @@ -1584,7 +1300,6 @@ CONFIG_USB_MON=y # # USB DSL modem support # -# CONFIG_USB_ATM is not set # # USB Gadget Support @@ -1707,9 +1422,7 @@ CONFIG_UIO_CIF=m # # File systems # -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT2_FS_XIP is not set +# CONFIG_EXT2_FS is not set CONFIG_EXT3_FS=y CONFIG_EXT3_FS_XATTR=y # CONFIG_EXT3_FS_POSIX_ACL is not set @@ -1743,14 +1456,9 @@ CONFIG_AUTOFS4_FS=y # # DOS/FAT/NT Filesystems # -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -CONFIG_NTFS_FS=m -# CONFIG_NTFS_DEBUG is not set -CONFIG_NTFS_RW=y +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set # # Pseudo filesystems @@ -1785,7 +1493,11 @@ CONFIG_JFFS2_ZLIB=y # CONFIG_JFFS2_LZO is not set CONFIG_JFFS2_RTIME=y # CONFIG_JFFS2_RUBIN is not set -CONFIG_CRAMFS=y +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_EMBEDDED=y +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=1 +# CONFIG_SQUASHFS_VMALLOC is not set # CONFIG_VXFS_FS is not set # CONFIG_HPFS_FS is not set # CONFIG_QNX4FS_FS is not set @@ -1797,13 +1509,10 @@ 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 is not set -CONFIG_NFSD_TCP=y +# CONFIG_NFSD is not set CONFIG_ROOT_NFS=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y CONFIG_SUNRPC_GSS=y @@ -1927,8 +1636,8 @@ 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 is not set +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y # CONFIG_DEBUG_SLAB is not set # CONFIG_DEBUG_PREEMPT is not set # CONFIG_DEBUG_RT_MUTEXES is not set -- cgit v1.2.3 From 1a206edc5115255238d69aa90badffa04927549b Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Fri, 15 Feb 2008 22:17:55 +0000 Subject: cairo: Added 1.4.14 with pixman memory leak patch, with -1 preference. --- packages/cairo/cairo-1.4.14/.mtn2git_empty | 0 .../0001-Fix-for-a-memory-leak-in-pixman.patch | 32 ++++++++++++++++++++++ packages/cairo/cairo_1.4.14.bb | 9 ++++++ 3 files changed, 41 insertions(+) create mode 100644 packages/cairo/cairo-1.4.14/.mtn2git_empty create mode 100644 packages/cairo/cairo-1.4.14/0001-Fix-for-a-memory-leak-in-pixman.patch create mode 100644 packages/cairo/cairo_1.4.14.bb diff --git a/packages/cairo/cairo-1.4.14/.mtn2git_empty b/packages/cairo/cairo-1.4.14/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/cairo/cairo-1.4.14/0001-Fix-for-a-memory-leak-in-pixman.patch b/packages/cairo/cairo-1.4.14/0001-Fix-for-a-memory-leak-in-pixman.patch new file mode 100644 index 0000000000..686ab7ceb0 --- /dev/null +++ b/packages/cairo/cairo-1.4.14/0001-Fix-for-a-memory-leak-in-pixman.patch @@ -0,0 +1,32 @@ +From 7647f29a2a3b69592e38f50890a96d8deeaa2dbb Mon Sep 17 00:00:00 2001 +From: Jan Slupski +Date: Fri, 15 Feb 2008 00:55:30 +0100 +Subject: [PATCH] Fix for a memory leak in pixman. + +Port of a 1.6 fix for a memory leak in pixman_region_init_rects/pixman_rect_alloc +when the count of boxes is 0. +--- + pixman/src/pixregion.c | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +diff --git a/pixman/src/pixregion.c b/pixman/src/pixregion.c +index 1ed3ad7..d6caf6c 100644 +--- a/pixman/src/pixregion.c ++++ b/pixman/src/pixregion.c +@@ -355,6 +355,15 @@ pixman_region_init_rects(pixman_region16_t *region, pixman_box16_t *boxes, int c + } + + pixman_region_init(region); ++ ++ /* if it's 0, don't call pixman_rect_alloc -- 0 rectangles is ++ * a special case, and causing pixman_rect_alloc would cause ++ * us to leak memory (because the 0-rect case should be the ++ * static pixman_region_emptyData data). ++ */ ++ if (count == 0) ++ return PIXMAN_REGION_STATUS_SUCCESS; ++ + if (!pixman_rect_alloc(region, count)) + return PIXMAN_REGION_STATUS_FAILURE; + + diff --git a/packages/cairo/cairo_1.4.14.bb b/packages/cairo/cairo_1.4.14.bb new file mode 100644 index 0000000000..b0f9fe8790 --- /dev/null +++ b/packages/cairo/cairo_1.4.14.bb @@ -0,0 +1,9 @@ +require cairo.inc + +DEFAULT_PREFERENCE = "-1" + +SRC_URI = "http://cairographics.org/releases/cairo-${PV}.tar.gz \ +file://0001-Fix-for-a-memory-leak-in-pixman.patch;patch=1;p=1" + +PR = "r0" + -- cgit v1.2.3 From 82e725505a8924059c5c75ed32cf3101ef318c10 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 16 Feb 2008 00:17:13 +0000 Subject: initramfs-module-kexecboot: Initramfs module to kexec to kernel in rootfs. * Instead of switch_root'ing to it, which was the only working mode previously. So, now, if there's /boot/zImage in rootfs, it will be kexec'ed too. Otherwise, switch_root will happen. * Caveat: there should be initramfs for new (kexec'ed to) kernel too, too handle its loading of rootfs as selected by interactive bootloader. This can be very same kernel as for bootloader, with bundled initramfs-bootmenu-image (which has special check - if root is explicitly specified on command line, then skip interactive selection); or, as a kind of optimization, that could be initramfs-image (no interactive part). Finally, initramfs (any of there two or other) can be a standalone file in rootfs, /boot/initramfs.bin. --- packages/initrdscripts/files/87-kexecboot.sh | 17 +++++++++++++++++ .../initrdscripts/initramfs-module-kexecboot_1.0.bb | 12 ++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 packages/initrdscripts/files/87-kexecboot.sh create mode 100644 packages/initrdscripts/initramfs-module-kexecboot_1.0.bb diff --git a/packages/initrdscripts/files/87-kexecboot.sh b/packages/initrdscripts/files/87-kexecboot.sh new file mode 100644 index 0000000000..ab281577d4 --- /dev/null +++ b/packages/initrdscripts/files/87-kexecboot.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# Allow kexecing to kernel in rootfs + +if [ -n "$BOOT_ROOT" -a -f "$BOOT_ROOT/boot/zImage" ]; then + echo "Kernel found in rootfs:" + ls -l "$BOOT_ROOT/boot/zImage" + initramfs="" + if [ -f "$BOOT_ROOT/boot/initramfs.bin" ]; then + echo "Initramfs found in rootfs:" + ls -l "$BOOT_ROOT/boot/initramfs.bin" + initramfs="--initrd=$BOOT_ROOT/boot/initramfs.bin" + fi + echo /usr/sbin/kexec -f "$BOOT_ROOT/boot/zImage" $initramfs --command-line="$CMDLINE" + sleep 10 + /usr/sbin/kexec -f "$BOOT_ROOT/boot/zImage" $initramfs --command-line="$CMDLINE" + sleep 10000 +fi diff --git a/packages/initrdscripts/initramfs-module-kexecboot_1.0.bb b/packages/initrdscripts/initramfs-module-kexecboot_1.0.bb new file mode 100644 index 0000000000..e8be2fd757 --- /dev/null +++ b/packages/initrdscripts/initramfs-module-kexecboot_1.0.bb @@ -0,0 +1,12 @@ +SRC_URI = "file://87-kexecboot.sh" +PR = "r0.2" +DESCRIPTION = "An initramfs module for kexecing kernel from rootfs." +RDEPENDS = "initramfs-uniboot kexec-static" + +do_install() { + install -d ${D}/initrd.d + install -m 0755 ${WORKDIR}/87-kexecboot.sh ${D}/initrd.d/ +} + +PACKAGE_ARCH = "all" +FILES_${PN} += " /initrd.d/* " -- cgit v1.2.3 From 610ba5eb16e52832579366ac404ba40d8a947561 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 16 Feb 2008 00:18:45 +0000 Subject: initramfs-bootmenu-image: Add initramfs-module-kexecboot. --- packages/images/initramfs-bootmenu-image.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/images/initramfs-bootmenu-image.bb b/packages/images/initramfs-bootmenu-image.bb index b94cc232cd..6a4974fa9d 100644 --- a/packages/images/initramfs-bootmenu-image.bb +++ b/packages/images/initramfs-bootmenu-image.bb @@ -1,7 +1,7 @@ # initramfs image with interactive boot menu allowing to select rootfs location # from choices of block devices, loopback images and NFS. -IMAGE_INSTALL = "busybox-static initramfs-module-bootmenu initramfs-module-check-modules" +IMAGE_INSTALL = "busybox-static initramfs-module-bootmenu initramfs-module-check-modules initramfs-module-kexecboot" IMAGE_LINGUAS = "" # Remove any kernel-image that the kernel-module-* packages may have pulled in. -- cgit v1.2.3 From 122a4440127e4015df191e4204fd05e132cba3eb Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 16 Feb 2008 00:20:31 +0000 Subject: devimage 0.1: Up a usb0 on load, now that we're modular. --- packages/initrdscripts/devimage/devimage.sh | 5 +++++ packages/initrdscripts/devimage_0.1.bb | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/initrdscripts/devimage/devimage.sh b/packages/initrdscripts/devimage/devimage.sh index e85debf245..8a264ed33d 100644 --- a/packages/initrdscripts/devimage/devimage.sh +++ b/packages/initrdscripts/devimage/devimage.sh @@ -7,6 +7,11 @@ mount -t sysfs sysfs /sys mkdir -p /dev/pts mount -t devpts devpts /dev/pts +modprobe g_ether +ifconfig usb0 192.168.2.202 + +export PATH=$PATH:/usr/sbin + /usr/sbin/dropbear -E /bin/sh diff --git a/packages/initrdscripts/devimage_0.1.bb b/packages/initrdscripts/devimage_0.1.bb index 08949b9515..c671f38025 100644 --- a/packages/initrdscripts/devimage_0.1.bb +++ b/packages/initrdscripts/devimage_0.1.bb @@ -1,6 +1,6 @@ DESCRIPTION = "Set of files to initialize bare system suitable for kernel, etc. testing." SRC_URI = "file://devimage.sh file://passwd file://dropbear_rsa_host_key" -PR = "r2" +PR = "r3" do_install() { install -m 0755 ${WORKDIR}/devimage.sh ${D}/init -- cgit v1.2.3 From 2c9beab0a15cccf8a519a3407fbe0c09ff6f21ec Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 16 Feb 2008 00:35:21 +0000 Subject: task-devimage: Stuff kernel-image inside, for kexec testing. --- packages/tasks/task-devimage.bb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/tasks/task-devimage.bb b/packages/tasks/task-devimage.bb index 9da765ee94..f2d25e32ac 100644 --- a/packages/tasks/task-devimage.bb +++ b/packages/tasks/task-devimage.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Image for development testing" -PR = "r2" +PR = "r4" LICENSE = "MIT" inherit task @@ -19,8 +19,10 @@ RDEPENDS = "\ " RRECOMMENDS = "\ + kernel-image \ kernel-module-msdos \ kernel-module-vfat \ kernel-modules \ ${DEVIMAGE_EXTRA_RRECOMMENDS} \ " +PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3 From f53ea006bcf4e938ed1c569080472dd05dc84b4d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 16 Feb 2008 03:00:52 +0000 Subject: initramfs-module-bootmenu, initramfs-module-kexecboot: Fixes for kexecing. * Be sure to pass original command line contents to new kernel. * Add protection against infinite recursive kexecing. --- packages/initrdscripts/files/30-bootmenu.sh | 5 +++-- packages/initrdscripts/files/87-kexecboot.sh | 24 ++++++++++++---------- .../initrdscripts/initramfs-module-bootmenu_1.0.bb | 2 +- .../initramfs-module-kexecboot_1.0.bb | 2 +- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/packages/initrdscripts/files/30-bootmenu.sh b/packages/initrdscripts/files/30-bootmenu.sh index 7bc1429b1b..d54a643807 100644 --- a/packages/initrdscripts/files/30-bootmenu.sh +++ b/packages/initrdscripts/files/30-bootmenu.sh @@ -145,12 +145,13 @@ path=`expr "$sel" : '[^/]*\([^ ]*\).*'` if [ "$dev" == "NFS" ]; then ROOT_DEVICE="/dev/nfs" - CMDLINE="$CMDLINE nfsroot=192.168.2.200:/srv/nfs/oe/image" + CMDLINE="$CMDLINE root=/dev/nfs nfsroot=192.168.2.200:/srv/nfs/oe/image" elif [ -n "$path" ]; then ROOT_DEVICE="/dev/loop" - CMDLINE="looproot=/dev/$dev:$path" + CMDLINE="$CMDLINE root=/dev/loop looproot=/dev/$dev:$path" else ROOT_DEVICE="/dev/$dev" + CMDLINE="$CMDLINE root=$ROOT_DEVICE" fi echo ROOT_DEVICE=$ROOT_DEVICE diff --git a/packages/initrdscripts/files/87-kexecboot.sh b/packages/initrdscripts/files/87-kexecboot.sh index ab281577d4..9232934f98 100644 --- a/packages/initrdscripts/files/87-kexecboot.sh +++ b/packages/initrdscripts/files/87-kexecboot.sh @@ -2,16 +2,18 @@ # Allow kexecing to kernel in rootfs if [ -n "$BOOT_ROOT" -a -f "$BOOT_ROOT/boot/zImage" ]; then - echo "Kernel found in rootfs:" - ls -l "$BOOT_ROOT/boot/zImage" - initramfs="" - if [ -f "$BOOT_ROOT/boot/initramfs.bin" ]; then - echo "Initramfs found in rootfs:" - ls -l "$BOOT_ROOT/boot/initramfs.bin" - initramfs="--initrd=$BOOT_ROOT/boot/initramfs.bin" + if ! expr "$CMDLINE" : '.*nokexec'; then + echo "Kernel found in rootfs:" + ls -l "$BOOT_ROOT/boot/zImage" + initramfs="" + if [ -f "$BOOT_ROOT/boot/initramfs.bin" ]; then + echo "Initramfs found in rootfs:" + ls -l "$BOOT_ROOT/boot/initramfs.bin" + initramfs="--initrd=$BOOT_ROOT/boot/initramfs.bin" + fi + echo /usr/sbin/kexec -f "$BOOT_ROOT/boot/zImage" $initramfs --command-line="$CMDLINE nokexec" + sleep 10 + /usr/sbin/kexec -f "$BOOT_ROOT/boot/zImage" $initramfs --command-line="$CMDLINE nokexec" + sleep 10000 fi - echo /usr/sbin/kexec -f "$BOOT_ROOT/boot/zImage" $initramfs --command-line="$CMDLINE" - sleep 10 - /usr/sbin/kexec -f "$BOOT_ROOT/boot/zImage" $initramfs --command-line="$CMDLINE" - sleep 10000 fi diff --git a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb index e87ba69776..8b9a49f40b 100644 --- a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb +++ b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb @@ -1,5 +1,5 @@ SRC_URI = "file://30-bootmenu.sh" -PR = "r8" +PR = "r9" DESCRIPTION = "An initramfs module with UI for selection of boot device." RDEPENDS = "klibc-utils-fstype initramfs-uniboot initramfs-module-block initramfs-module-loop initramfs-module-nfs" # For VFAT mounting. diff --git a/packages/initrdscripts/initramfs-module-kexecboot_1.0.bb b/packages/initrdscripts/initramfs-module-kexecboot_1.0.bb index e8be2fd757..35100a94e6 100644 --- a/packages/initrdscripts/initramfs-module-kexecboot_1.0.bb +++ b/packages/initrdscripts/initramfs-module-kexecboot_1.0.bb @@ -1,5 +1,5 @@ SRC_URI = "file://87-kexecboot.sh" -PR = "r0.2" +PR = "r0.4" DESCRIPTION = "An initramfs module for kexecing kernel from rootfs." RDEPENDS = "initramfs-uniboot kexec-static" -- cgit v1.2.3 From e8b47d47d429131882dbf3d231da9459d7690e24 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 16 Feb 2008 09:12:32 +0000 Subject: poodle,tosa: unbreak PACKAGE_ARCH --- conf/machine/poodle.conf | 1 + conf/machine/tosa.conf | 1 + 2 files changed, 2 insertions(+) diff --git a/conf/machine/poodle.conf b/conf/machine/poodle.conf index 0fbd9d1578..4e8f011a1e 100644 --- a/conf/machine/poodle.conf +++ b/conf/machine/poodle.conf @@ -3,6 +3,7 @@ #@DESCRIPTION: Machine configuration for the PXA250 based Sharp Zaurus SL-B500 and SHarp Zaurus SL-5600 devices require conf/machine/include/zaurus-2.6.inc +require conf/machine/include/tune-xscale.inc IMAGE_FSTYPES ?= "jffs2" diff --git a/conf/machine/tosa.conf b/conf/machine/tosa.conf index d8ea4b8890..914300e31c 100644 --- a/conf/machine/tosa.conf +++ b/conf/machine/tosa.conf @@ -3,6 +3,7 @@ #@DESCRIPTION: Machine configuration for the PXA255 based Sharp Zaurus SL-6000 device require conf/machine/include/zaurus-2.6.inc +require conf/machine/include/tune-xscale.inc IMAGE_FSTYPES ?= "jffs2" -- cgit v1.2.3 From 5c75b7c96efd3f1b1293e274eaf6bacbc6956766 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 16 Feb 2008 12:48:25 +0000 Subject: busybox 1.9.1 one defconfig to rule them all, add patch for long options. fixes #3781 -- thanks Andrew Paulsen! --- .../busybox/busybox-1.9.1/adduser-longops.patch | 51 ++ .../busybox/busybox-1.9.1/angstrom/.mtn2git_empty | 0 packages/busybox/busybox-1.9.1/angstrom/defconfig | 753 -------------------- packages/busybox/busybox-1.9.1/defconfig | 777 +++++++++++++++++++++ packages/busybox/busybox_1.9.1.bb | 3 +- 5 files changed, 830 insertions(+), 754 deletions(-) create mode 100644 packages/busybox/busybox-1.9.1/adduser-longops.patch delete mode 100644 packages/busybox/busybox-1.9.1/angstrom/.mtn2git_empty delete mode 100644 packages/busybox/busybox-1.9.1/angstrom/defconfig create mode 100644 packages/busybox/busybox-1.9.1/defconfig diff --git a/packages/busybox/busybox-1.9.1/adduser-longops.patch b/packages/busybox/busybox-1.9.1/adduser-longops.patch new file mode 100644 index 0000000000..cb615c381e --- /dev/null +++ b/packages/busybox/busybox-1.9.1/adduser-longops.patch @@ -0,0 +1,51 @@ +diff -Nuar busybox-1.9.1.old/loginutils/Config.in busybox-1.9.1/loginutils/Config.in +--- busybox-1.9.1.old/loginutils/Config.in Tue Feb 12 10:03:11 2008 ++++ busybox-1.9.1/loginutils/Config.in Thu Feb 14 11:48:31 2008 +@@ -88,6 +88,13 @@ + help + Utility for creating a new user account. + ++config FEATURE_ADDUSER_LONG_OPTIONS ++ bool "Enable long options" ++ default n ++ depends on ADDUSER && GETOPT_LONG ++ help ++ Support long options for the adduser applet. ++ + config DELUSER + bool "deluser" + default n +diff -Nuar busybox-1.9.1.old/loginutils/adduser.c busybox-1.9.1/loginutils/adduser.c +--- busybox-1.9.1.old/loginutils/adduser.c Thu Feb 14 10:25:33 2008 ++++ busybox-1.9.1/loginutils/adduser.c Thu Feb 14 13:32:47 2008 +@@ -66,6 +66,19 @@ + bb_error_msg_and_die("cannot execute %s, you must set password manually", prog); + } + ++#if ENABLE_FEATURE_ADDUSER_LONG_OPTIONS ++static const char adduser_longopts[] ALIGN1 = ++ "home\0" Required_argument "h" ++ "gecos\0" Required_argument "g" ++ "shell\0" Required_argument "s" ++ "ingroup\0" Required_argument "G" ++ "disabled-password\0" No_argument "D" ++ "empty-password\0" No_argument "D" ++ "system\0" No_argument "S" ++ "no-create-home\0" No_argument "H" ++ ; ++#endif ++ + /* + * adduser will take a login_name as its first parameter. + * home, shell, gecos: +@@ -77,6 +90,10 @@ + struct passwd pw; + const char *usegroup = NULL; + FILE *file; ++ ++#if ENABLE_FEATURE_ADDUSER_LONG_OPTIONS ++ applet_long_options = adduser_longopts; ++#endif + + /* got root? */ + if (geteuid()) { diff --git a/packages/busybox/busybox-1.9.1/angstrom/.mtn2git_empty b/packages/busybox/busybox-1.9.1/angstrom/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/busybox/busybox-1.9.1/angstrom/defconfig b/packages/busybox/busybox-1.9.1/angstrom/defconfig deleted file mode 100644 index 6cf2eb19ee..0000000000 --- a/packages/busybox/busybox-1.9.1/angstrom/defconfig +++ /dev/null @@ -1,753 +0,0 @@ -# -# Automatically generated make config: don't edit -# Busybox version: 1.7.2 -# Wed Feb 13 13:31:37 2008 -# -CONFIG_HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# - -# -# General Configuration -# -# CONFIG_NITPICK is not set -# CONFIG_DESKTOP is not set -# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_SHOW_USAGE=y -# CONFIG_FEATURE_VERBOSE_USAGE is not set -CONFIG_FEATURE_COMPRESS_USAGE=y -# CONFIG_FEATURE_INSTALLER is not set -CONFIG_LOCALE_SUPPORT=y -CONFIG_GETOPT_LONG=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -CONFIG_FEATURE_PIDFILE=y -CONFIG_FEATURE_SUID=y -CONFIG_FEATURE_SUID_CONFIG=y -CONFIG_FEATURE_SUID_CONFIG_QUIET=y -# CONFIG_SELINUX is not set -# CONFIG_FEATURE_PREFER_APPLETS is not set -CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" -CONFIG_FEATURE_SYSLOG=y -CONFIG_FEATURE_HAVE_RPC=y - -# -# Build Options -# -# CONFIG_STATIC is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -CONFIG_BUILD_AT_ONCE=y - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_WERROR is not set -CONFIG_NO_DEBUG_LIB=y -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set -# CONFIG_INCLUDE_SUSv2 is not set - -# -# Installation Options -# -# CONFIG_INSTALL_NO_USR is not set -CONFIG_INSTALL_APPLET_SYMLINKS=y -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_DONT is not set -CONFIG_PREFIX="./_install" - -# -# Busybox Library Tuning -# -CONFIG_PASSWORD_MINLEN=6 -CONFIG_MD5_SIZE_VS_SPEED=2 -CONFIG_FEATURE_FAST_TOP=y -# CONFIG_FEATURE_ETC_NETWORKS is not set -CONFIG_FEATURE_EDITING=y -CONFIG_FEATURE_EDITING_MAX_LEN=1024 -# CONFIG_FEATURE_EDITING_FANCY_KEYS is not set -# CONFIG_FEATURE_EDITING_VI is not set -CONFIG_FEATURE_EDITING_HISTORY=15 -CONFIG_FEATURE_EDITING_SAVEHISTORY=y -CONFIG_FEATURE_TAB_COMPLETION=y -CONFIG_FEATURE_USERNAME_COMPLETION=y -CONFIG_FEATURE_EDITING_FANCY_PROMPT=y -CONFIG_MONOTONIC_SYSCALL=y -CONFIG_IOCTL_HEX2STR_ERROR=y - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_AR=y -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -CONFIG_BUNZIP2=y -CONFIG_CPIO=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set -CONFIG_GUNZIP=y -# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set -CONFIG_GZIP=y -# CONFIG_RPM2CPIO is not set -# CONFIG_RPM is not set -# CONFIG_FEATURE_RPM_BZ2 is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_BZIP2=y -# CONFIG_FEATURE_TAR_LZMA is not set -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_GZIP=y -# CONFIG_FEATURE_TAR_COMPRESS is not set -# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set -# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set -# CONFIG_UNCOMPRESS is not set -# CONFIG_UNLZMA is not set -# CONFIG_FEATURE_LZMA_FAST is not set -CONFIG_UNZIP=y - -# -# Common options for cpio and tar -# -# CONFIG_FEATURE_UNARCHIVE_TAPE is not set -# CONFIG_FEATURE_DEB_TAR_GZ is not set -# CONFIG_FEATURE_DEB_TAR_BZ2 is not set -# CONFIG_FEATURE_DEB_TAR_LZMA is not set - -# -# Coreutils -# -CONFIG_BASENAME=y -# CONFIG_CAL is not set -CONFIG_CAT=y -# CONFIG_CATV is not set -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_CHROOT=y -# CONFIG_CKSUM is not set -# CONFIG_COMM is not set -CONFIG_CP=y -CONFIG_CUT=y -CONFIG_DATE=y -# CONFIG_FEATURE_DATE_ISOFMT is not set -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_IBS_OBS is not set -CONFIG_DF=y -CONFIG_DIRNAME=y -# CONFIG_DOS2UNIX is not set -# CONFIG_UNIX2DOS is not set -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -CONFIG_FEATURE_ENV_LONG_OPTIONS=y -# CONFIG_EXPAND is not set -# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set -CONFIG_EXPR=y -# CONFIG_EXPR_MATH_SUPPORT_64 is not set -CONFIG_FALSE=y -# CONFIG_FOLD is not set -CONFIG_HEAD=y -# CONFIG_FEATURE_FANCY_HEAD is not set -# CONFIG_HOSTID is not set -CONFIG_ID=y -# CONFIG_INSTALL is not set -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -# CONFIG_LENGTH is not set -CONFIG_LN=y -CONFIG_LOGNAME=y -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set -CONFIG_MD5SUM=y -CONFIG_MKDIR=y -CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -# CONFIG_NICE is not set -CONFIG_NOHUP=y -CONFIG_OD=y -# CONFIG_PRINTENV is not set -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -CONFIG_SEQ=y -# CONFIG_SHA1SUM is not set -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -# CONFIG_SPLIT is not set -# CONFIG_FEATURE_SPLIT_FANCY is not set -# CONFIG_STAT is not set -# CONFIG_FEATURE_STAT_FORMAT is not set -CONFIG_STTY=y -# CONFIG_SUM is not set -CONFIG_SYNC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set -CONFIG_TEST=y -# CONFIG_FEATURE_TEST_64 is not set -CONFIG_TOUCH=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -# CONFIG_FEATURE_TR_EQUIV is not set -CONFIG_TRUE=y -CONFIG_TTY=y -CONFIG_UNAME=y -# CONFIG_UNEXPAND is not set -# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set -CONFIG_UNIQ=y -CONFIG_USLEEP=y -# CONFIG_UUDECODE is not set -# CONFIG_UUENCODE is not set -CONFIG_WC=y -# CONFIG_FEATURE_WC_LARGE is not set -CONFIG_WHO=y -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options for cp and mv -# -# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Common options for md5sum, sha1sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -CONFIG_LOADFONT=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -# CONFIG_RESIZE is not set -# CONFIG_FEATURE_RESIZE_PRINT is not set -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -# CONFIG_PIPE_PROGRESS is not set -CONFIG_RUN_PARTS=y -# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set -# CONFIG_FEATURE_RUN_PARTS_FANCY is not set -CONFIG_START_STOP_DAEMON=y -CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y -CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_MATH=y -# CONFIG_CMP is not set -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_BINARY=y -CONFIG_FEATURE_DIFF_DIR=y -# CONFIG_FEATURE_DIFF_MINIMAL is not set -# CONFIG_ED is not set -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_MAX_LEN=1024 -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -CONFIG_FEATURE_VI_USE_SIGNALS=y -# CONFIG_FEATURE_VI_DOT_CMD is not set -# CONFIG_FEATURE_VI_READONLY is not set -# CONFIG_FEATURE_VI_SETOPTS is not set -# CONFIG_FEATURE_VI_SET is not set -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y -CONFIG_FEATURE_ALLOW_EXEC=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_MAXDEPTH=y -CONFIG_FEATURE_FIND_NEWER=y -# CONFIG_FEATURE_FIND_INUM is not set -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_FEATURE_FIND_USER=y -CONFIG_FEATURE_FIND_GROUP=y -CONFIG_FEATURE_FIND_NOT=y -CONFIG_FEATURE_FIND_DEPTH=y -CONFIG_FEATURE_FIND_PAREN=y -CONFIG_FEATURE_FIND_SIZE=y -CONFIG_FEATURE_FIND_PRUNE=y -# CONFIG_FEATURE_FIND_DELETE is not set -CONFIG_FEATURE_FIND_PATH=y -CONFIG_FEATURE_FIND_REGEX=y -# CONFIG_FEATURE_FIND_CONTEXT is not set -CONFIG_GREP=y -CONFIG_FEATURE_GREP_EGREP_ALIAS=y -CONFIG_FEATURE_GREP_FGREP_ALIAS=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set -# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set -# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set -# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set - -# -# Init Utilities -# -# CONFIG_INIT is not set -# CONFIG_DEBUG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_INIT_SYSLOG is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -# CONFIG_HALT is not set -# CONFIG_MESG is not set - -# -# Login/Password Management Utilities -# -# CONFIG_FEATURE_SHADOWPASSWDS is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_PWD_GRP is not set -CONFIG_ADDGROUP=y -CONFIG_FEATURE_ADDUSER_TO_GROUP=y -CONFIG_DELGROUP=y -CONFIG_FEATURE_DEL_USER_FROM_GROUP=y -CONFIG_ADDUSER=y -CONFIG_DELUSER=y -CONFIG_GETTY=y -CONFIG_FEATURE_UTMP=y -CONFIG_FEATURE_WTMP=y -CONFIG_LOGIN=y -# CONFIG_PAM is not set -# CONFIG_LOGIN_SCRIPTS is not set -CONFIG_FEATURE_NOLOGIN=y -CONFIG_FEATURE_SECURETTY=y -CONFIG_PASSWD=y -CONFIG_FEATURE_PASSWD_WEAK_CHECK=y -# CONFIG_CRYPTPW is not set -# CONFIG_CHPASSWD is not set -CONFIG_SU=y -CONFIG_FEATURE_SU_SYSLOG=y -CONFIG_FEATURE_SU_CHECKS_SHELLS=y -# CONFIG_SULOGIN is not set -CONFIG_VLOCK=y - -# -# Linux Ext2 FS Progs -# -CONFIG_CHATTR=y -CONFIG_FSCK=y -# CONFIG_LSATTR is not set - -# -# Linux Module Utilities -# -CONFIG_INSMOD=y -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_RMMOD=y -CONFIG_LSMOD=y -# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y -CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y - -# -# Options common to multiple modutils -# -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -# CONFIG_FEATURE_2_4_MODULES is not set -CONFIG_FEATURE_2_6_MODULES=y -# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set - -# -# Linux System Utilities -# -CONFIG_DMESG=y -CONFIG_FEATURE_DMESG_PRETTY=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -CONFIG_FDISK=y -CONFIG_FDISK_SUPPORT_LARGE_DISKS=y -CONFIG_FEATURE_FDISK_WRITABLE=y -# CONFIG_FEATURE_AIX_LABEL is not set -# CONFIG_FEATURE_SGI_LABEL is not set -# CONFIG_FEATURE_SUN_LABEL is not set -# CONFIG_FEATURE_OSF_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FREERAMDISK is not set -CONFIG_FSCK_MINIX=y -CONFIG_MKFS_MINIX=y - -# -# Minix filesystem support -# -CONFIG_FEATURE_MINIX2=y -# CONFIG_GETOPT is not set -CONFIG_HEXDUMP=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -# CONFIG_IPCRM is not set -# CONFIG_IPCS is not set -CONFIG_LOSETUP=y -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set -CONFIG_MKSWAP=y -# CONFIG_FEATURE_MKSWAP_V0 is not set -CONFIG_MORE=y -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_NFS=y -# CONFIG_FEATURE_MOUNT_CIFS is not set -CONFIG_FEATURE_MOUNT_FLAGS=y -CONFIG_FEATURE_MOUNT_FSTAB=y -CONFIG_PIVOT_ROOT=y -CONFIG_RDATE=y -# CONFIG_READPROFILE is not set -# CONFIG_SETARCH is not set -CONFIG_SWAPONOFF=y -CONFIG_SWITCH_ROOT=y -CONFIG_UMOUNT=y -# CONFIG_FEATURE_UMOUNT_ALL is not set - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set - -# -# Miscellaneous Utilities -# -# CONFIG_ADJTIMEX is not set -# CONFIG_BBCONFIG is not set -# CONFIG_CHRT is not set -# CONFIG_CROND is not set -# CONFIG_DEBUG_CROND_OPTION is not set -# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set -# CONFIG_CRONTAB is not set -CONFIG_DC=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_EJECT is not set -# CONFIG_LAST is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_MAXLINES=9999999 -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -# CONFIG_FEATURE_LESS_FLAGCS is not set -# CONFIG_FEATURE_LESS_MARKS is not set -# CONFIG_FEATURE_LESS_REGEXP is not set -# CONFIG_HDPARM is not set -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MOUNTPOINT is not set -# CONFIG_MT is not set -# CONFIG_RAIDAUTORUN is not set -# CONFIG_READAHEAD is not set -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_STRINGS=y -# CONFIG_SETSID is not set -# CONFIG_TASKSET is not set -# CONFIG_FEATURE_TASKSET_FANCY is not set -CONFIG_TIME=y -# CONFIG_TTYSIZE is not set -# CONFIG_WATCHDOG is not set - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set -# CONFIG_ARP is not set -# CONFIG_ARPING is not set -# CONFIG_DNSD is not set -# CONFIG_ETHER_WAKE is not set -# CONFIG_FAKEIDENTD is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set -# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -# CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -CONFIG_FEATURE_IFCONFIG_HW=y -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set -CONFIG_IFUPDOWN=y -CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" -# CONFIG_FEATURE_IFUPDOWN_IP is not set -# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set -CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -CONFIG_FEATURE_IFUPDOWN_MAPPING=y -# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set -# CONFIG_INETD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_TUNNEL=y -# CONFIG_FEATURE_IP_RULE is not set -# CONFIG_FEATURE_IP_SHORT_FORMS is not set -# CONFIG_IPADDR is not set -# CONFIG_IPLINK is not set -# CONFIG_IPROUTE is not set -# CONFIG_IPTUNNEL is not set -# CONFIG_IPRULE is not set -# CONFIG_IPCALC is not set -# CONFIG_FEATURE_IPCALC_FANCY is not set -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -# CONFIG_NAMEIF is not set -CONFIG_NC=y -# CONFIG_NC_SERVER is not set -# CONFIG_NC_EXTRA is not set -CONFIG_NETSTAT=y -# CONFIG_FEATURE_NETSTAT_WIDE is not set -CONFIG_NSLOOKUP=y -CONFIG_PING=y -CONFIG_PING6=y -# CONFIG_PSCAN is not set -CONFIG_FEATURE_FANCY_PING=y -CONFIG_ROUTE=y -# CONFIG_SLATTACH is not set -CONFIG_TELNET=y -# CONFIG_FEATURE_TELNET_TTYPE is not set -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_STANDALONE is not set -CONFIG_TFTP=y -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_DEBUG_TFTP is not set -CONFIG_TRACEROUTE=y -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set -# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set -# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set -CONFIG_APP_UDHCPD=y -# CONFIG_APP_DHCPRELAY is not set -CONFIG_APP_DUMPLEASES=y -# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set -CONFIG_APP_UDHCPC=y -# CONFIG_FEATURE_UDHCP_DEBUG is not set -# CONFIG_FEATURE_RFC3397 is not set -# CONFIG_VCONFIG is not set -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -# CONFIG_ZCIP is not set - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_KILL=y -CONFIG_KILLALL=y -# CONFIG_KILLALL5 is not set -# CONFIG_NMETER is not set -CONFIG_PIDOF=y -# CONFIG_FEATURE_PIDOF_SINGLE is not set -# CONFIG_FEATURE_PIDOF_OMIT is not set -CONFIG_PS=y -CONFIG_FEATURE_PS_WIDE=y -CONFIG_RENICE=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y -# CONFIG_FEATURE_TOP_DECIMALS is not set -CONFIG_UPTIME=y -CONFIG_WATCH=y - -# -# Shells -# -CONFIG_FEATURE_SH_IS_ASH=y -# CONFIG_FEATURE_SH_IS_HUSH is not set -# CONFIG_FEATURE_SH_IS_LASH is not set -# CONFIG_FEATURE_SH_IS_MSH is not set -# CONFIG_FEATURE_SH_IS_NONE is not set -CONFIG_ASH=y - -# -# Ash Shell Options -# -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_READ_NCHARS=y -CONFIG_ASH_READ_TIMEOUT=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_MATH_SUPPORT=y -# CONFIG_ASH_MATH_SUPPORT_64 is not set -CONFIG_ASH_GETOPTS=y -# CONFIG_ASH_BUILTIN_ECHO is not set -CONFIG_ASH_BUILTIN_TEST=y -# CONFIG_ASH_CMDCMD is not set -# CONFIG_ASH_MAIL is not set -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -# CONFIG_ASH_RANDOM_SUPPORT is not set -CONFIG_ASH_EXPAND_PRMT=y -# CONFIG_HUSH is not set -# CONFIG_HUSH_HELP is not set -# CONFIG_HUSH_INTERACTIVE is not set -# CONFIG_HUSH_JOB is not set -# CONFIG_HUSH_TICK is not set -# CONFIG_HUSH_IF is not set -# CONFIG_HUSH_LOOPS is not set -# CONFIG_LASH is not set -# CONFIG_MSH is not set - -# -# Bourne Shell Options -# -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE is not set -# CONFIG_CTTYHACK is not set - -# -# System Logging Utilities -# -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_KLOGD=y -CONFIG_LOGGER=y - -# -# Runit Utilities -# -# CONFIG_RUNSV is not set -# CONFIG_RUNSVDIR is not set -# CONFIG_SV is not set -# CONFIG_SVLOGD is not set -# CONFIG_CHPST is not set -# CONFIG_SETUIDGID is not set -# CONFIG_ENVUIDGID is not set -# CONFIG_ENVDIR is not set -# CONFIG_SOFTLIMIT is not set -# CONFIG_CHCON is not set -# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set -# CONFIG_GETENFORCE is not set -# CONFIG_GETSEBOOL is not set -# CONFIG_LOAD_POLICY is not set -# CONFIG_MATCHPATHCON is not set -# CONFIG_RESTORECON is not set -# CONFIG_RUNCON is not set -# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set -# CONFIG_SELINUXENABLED is not set -# CONFIG_SETENFORCE is not set -# CONFIG_SETFILES is not set -# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set - -# -# ipsvd utilities -# -# CONFIG_TCPSVD is not set -# CONFIG_UDPSVD is not set diff --git a/packages/busybox/busybox-1.9.1/defconfig b/packages/busybox/busybox-1.9.1/defconfig new file mode 100644 index 0000000000..61865cb4c5 --- /dev/null +++ b/packages/busybox/busybox-1.9.1/defconfig @@ -0,0 +1,777 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.9.1 +# Thu Feb 14 11:54:00 2008 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Busybox Settings +# + +# +# General Configuration +# +# CONFIG_NITPICK is not set +# CONFIG_DESKTOP is not set +# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_SHOW_USAGE=y +# CONFIG_FEATURE_VERBOSE_USAGE is not set +CONFIG_FEATURE_COMPRESS_USAGE=y +# CONFIG_FEATURE_INSTALLER is not set +CONFIG_LOCALE_SUPPORT=y +CONFIG_GETOPT_LONG=y +CONFIG_FEATURE_DEVPTS=y +# CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_PIDFILE=y +CONFIG_FEATURE_SUID=y +CONFIG_FEATURE_SUID_CONFIG=y +CONFIG_FEATURE_SUID_CONFIG_QUIET=y +# CONFIG_SELINUX is not set +# CONFIG_FEATURE_PREFER_APPLETS is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +CONFIG_FEATURE_SYSLOG=y +CONFIG_FEATURE_HAVE_RPC=y + +# +# Build Options +# +# CONFIG_STATIC is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_INDIVIDUAL is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_LFS=y + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_WERROR is not set +CONFIG_NO_DEBUG_LIB=y +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set +# CONFIG_INCLUDE_SUSv2 is not set + +# +# Installation Options +# +# CONFIG_INSTALL_NO_USR is not set +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set +# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set +# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set +CONFIG_PREFIX="./_install" + +# +# Busybox Library Tuning +# +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SIZE_VS_SPEED=2 +CONFIG_FEATURE_FAST_TOP=y +# CONFIG_FEATURE_ETC_NETWORKS is not set +CONFIG_FEATURE_EDITING=y +CONFIG_FEATURE_EDITING_MAX_LEN=1024 +CONFIG_FEATURE_EDITING_FANCY_KEYS=y +# CONFIG_FEATURE_EDITING_VI is not set +CONFIG_FEATURE_EDITING_HISTORY=15 +CONFIG_FEATURE_EDITING_SAVEHISTORY=y +CONFIG_FEATURE_TAB_COMPLETION=y +CONFIG_FEATURE_USERNAME_COMPLETION=y +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +CONFIG_FEATURE_COPYBUF_KB=4 +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y + +# +# Applets +# + +# +# Archival Utilities +# +CONFIG_AR=y +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +CONFIG_BUNZIP2=y +# CONFIG_BZIP2 is not set +CONFIG_CPIO=y +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set +CONFIG_GUNZIP=y +# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set +CONFIG_GZIP=y +# CONFIG_RPM2CPIO is not set +# CONFIG_RPM is not set +# CONFIG_FEATURE_RPM_BZ2 is not set +CONFIG_TAR=y +CONFIG_FEATURE_TAR_CREATE=y +CONFIG_FEATURE_TAR_BZIP2=y +# CONFIG_FEATURE_TAR_LZMA is not set +CONFIG_FEATURE_TAR_FROM=y +CONFIG_FEATURE_TAR_GZIP=y +# CONFIG_FEATURE_TAR_COMPRESS is not set +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set +# CONFIG_UNCOMPRESS is not set +# CONFIG_UNLZMA is not set +# CONFIG_FEATURE_LZMA_FAST is not set +CONFIG_UNZIP=y + +# +# Common options for cpio and tar +# +# CONFIG_FEATURE_UNARCHIVE_TAPE is not set +# CONFIG_FEATURE_DEB_TAR_GZ is not set +# CONFIG_FEATURE_DEB_TAR_BZ2 is not set +# CONFIG_FEATURE_DEB_TAR_LZMA is not set + +# +# Coreutils +# +CONFIG_BASENAME=y +# CONFIG_CAL is not set +CONFIG_CAT=y +# CONFIG_CATV is not set +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +CONFIG_CHROOT=y +# CONFIG_CKSUM is not set +# CONFIG_COMM is not set +CONFIG_CP=y +CONFIG_CUT=y +CONFIG_DATE=y +# CONFIG_FEATURE_DATE_ISOFMT is not set +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_IBS_OBS is not set +CONFIG_DF=y +# CONFIG_FEATURE_DF_INODE is not set +CONFIG_DIRNAME=y +# CONFIG_DOS2UNIX is not set +# CONFIG_UNIX2DOS is not set +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +CONFIG_FEATURE_ENV_LONG_OPTIONS=y +# CONFIG_EXPAND is not set +# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set +CONFIG_EXPR=y +# CONFIG_EXPR_MATH_SUPPORT_64 is not set +CONFIG_FALSE=y +# CONFIG_FOLD is not set +CONFIG_HEAD=y +# CONFIG_FEATURE_FANCY_HEAD is not set +# CONFIG_HOSTID is not set +CONFIG_ID=y +# CONFIG_INSTALL is not set +# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set +# CONFIG_LENGTH is not set +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set +CONFIG_MD5SUM=y +CONFIG_MKDIR=y +CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +CONFIG_MV=y +# CONFIG_FEATURE_MV_LONG_OPTIONS is not set +# CONFIG_NICE is not set +CONFIG_NOHUP=y +CONFIG_OD=y +# CONFIG_PRINTENV is not set +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +# CONFIG_SHA1SUM is not set +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_SPLIT is not set +# CONFIG_FEATURE_SPLIT_FANCY is not set +# CONFIG_STAT is not set +# CONFIG_FEATURE_STAT_FORMAT is not set +CONFIG_STTY=y +# CONFIG_SUM is not set +CONFIG_SYNC=y +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set +CONFIG_TEST=y +# CONFIG_FEATURE_TEST_64 is not set +CONFIG_TOUCH=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +# CONFIG_FEATURE_TR_EQUIV is not set +CONFIG_TRUE=y +CONFIG_TTY=y +CONFIG_UNAME=y +# CONFIG_UNEXPAND is not set +# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set +CONFIG_UNIQ=y +CONFIG_USLEEP=y +# CONFIG_UUDECODE is not set +# CONFIG_UUENCODE is not set +CONFIG_WC=y +# CONFIG_FEATURE_WC_LARGE is not set +CONFIG_WHO=y +CONFIG_WHOAMI=y +CONFIG_YES=y + +# +# Common options for cp and mv +# +# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set + +# +# Common options for ls, more and telnet +# +CONFIG_FEATURE_AUTOWIDTH=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y + +# +# Common options for md5sum, sha1sum +# +CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y + +# +# Console Utilities +# +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y +# CONFIG_KBD_MODE is not set +CONFIG_LOADFONT=y +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +# CONFIG_RESIZE is not set +# CONFIG_FEATURE_RESIZE_PRINT is not set +CONFIG_SETCONSOLE=y +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +# CONFIG_SETKEYCODES is not set +# CONFIG_SETLOGCONS is not set + +# +# Debian Utilities +# +CONFIG_MKTEMP=y +# CONFIG_PIPE_PROGRESS is not set +CONFIG_RUN_PARTS=y +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y +# CONFIG_FEATURE_RUN_PARTS_FANCY is not set +CONFIG_START_STOP_DAEMON=y +CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y +CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y +CONFIG_WHICH=y + +# +# Editors +# +CONFIG_AWK=y +CONFIG_FEATURE_AWK_MATH=y +# CONFIG_CMP is not set +CONFIG_DIFF=y +CONFIG_FEATURE_DIFF_BINARY=y +CONFIG_FEATURE_DIFF_DIR=y +# CONFIG_FEATURE_DIFF_MINIMAL is not set +# CONFIG_ED is not set +CONFIG_PATCH=y +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_MAX_LEN=1024 +CONFIG_FEATURE_VI_8BIT=y +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +CONFIG_FEATURE_VI_USE_SIGNALS=y +# CONFIG_FEATURE_VI_DOT_CMD is not set +# CONFIG_FEATURE_VI_READONLY is not set +# CONFIG_FEATURE_VI_SETOPTS is not set +# CONFIG_FEATURE_VI_SET is not set +CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y +CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_XDEV=y +CONFIG_FEATURE_FIND_MAXDEPTH=y +CONFIG_FEATURE_FIND_NEWER=y +# CONFIG_FEATURE_FIND_INUM is not set +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_FEATURE_FIND_USER=y +CONFIG_FEATURE_FIND_GROUP=y +CONFIG_FEATURE_FIND_NOT=y +CONFIG_FEATURE_FIND_DEPTH=y +CONFIG_FEATURE_FIND_PAREN=y +CONFIG_FEATURE_FIND_SIZE=y +CONFIG_FEATURE_FIND_PRUNE=y +# CONFIG_FEATURE_FIND_DELETE is not set +CONFIG_FEATURE_FIND_PATH=y +CONFIG_FEATURE_FIND_REGEX=y +# CONFIG_FEATURE_FIND_CONTEXT is not set +CONFIG_GREP=y +CONFIG_FEATURE_GREP_EGREP_ALIAS=y +CONFIG_FEATURE_GREP_FGREP_ALIAS=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set +# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set +# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set + +# +# Init Utilities +# +# CONFIG_INIT is not set +# CONFIG_DEBUG_INIT is not set +# CONFIG_FEATURE_USE_INITTAB is not set +# CONFIG_FEATURE_INIT_SCTTY is not set +# CONFIG_FEATURE_INIT_SYSLOG is not set +# CONFIG_FEATURE_EXTRA_QUIET is not set +# CONFIG_FEATURE_INIT_COREDUMPS is not set +# CONFIG_FEATURE_INITRD is not set +# CONFIG_HALT is not set +# CONFIG_MESG is not set + +# +# Login/Password Management Utilities +# +# CONFIG_FEATURE_SHADOWPASSWDS is not set +# CONFIG_USE_BB_SHADOW is not set +# CONFIG_USE_BB_PWD_GRP is not set +CONFIG_ADDGROUP=y +CONFIG_FEATURE_ADDUSER_TO_GROUP=y +CONFIG_DELGROUP=y +CONFIG_FEATURE_DEL_USER_FROM_GROUP=y +CONFIG_ADDUSER=y +CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y +CONFIG_DELUSER=y +CONFIG_GETTY=y +CONFIG_FEATURE_UTMP=y +CONFIG_FEATURE_WTMP=y +CONFIG_LOGIN=y +# CONFIG_PAM is not set +# CONFIG_LOGIN_SCRIPTS is not set +CONFIG_FEATURE_NOLOGIN=y +CONFIG_FEATURE_SECURETTY=y +CONFIG_PASSWD=y +CONFIG_FEATURE_PASSWD_WEAK_CHECK=y +# CONFIG_CRYPTPW is not set +# CONFIG_CHPASSWD is not set +CONFIG_SU=y +CONFIG_FEATURE_SU_SYSLOG=y +CONFIG_FEATURE_SU_CHECKS_SHELLS=y +# CONFIG_SULOGIN is not set +CONFIG_VLOCK=y + +# +# Linux Ext2 FS Progs +# +CONFIG_CHATTR=y +CONFIG_FSCK=y +# CONFIG_LSATTR is not set + +# +# Linux Module Utilities +# +CONFIG_INSMOD=y +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +CONFIG_RMMOD=y +CONFIG_LSMOD=y +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +CONFIG_MODPROBE=y +CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y +CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y + +# +# Options common to multiple modutils +# +CONFIG_FEATURE_CHECK_TAINTED_MODULE=y +# CONFIG_FEATURE_2_4_MODULES is not set +CONFIG_FEATURE_2_6_MODULES=y +# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set + +# +# Linux System Utilities +# +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +CONFIG_FBSET=y +CONFIG_FEATURE_FBSET_FANCY=y +CONFIG_FEATURE_FBSET_READMODE=y +# CONFIG_FDFLUSH is not set +# CONFIG_FDFORMAT is not set +CONFIG_FDISK=y +CONFIG_FDISK_SUPPORT_LARGE_DISKS=y +CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_FDISK_ADVANCED is not set +# CONFIG_FREERAMDISK is not set +CONFIG_FSCK_MINIX=y +CONFIG_MKFS_MINIX=y + +# +# Minix filesystem support +# +CONFIG_FEATURE_MINIX2=y +# CONFIG_GETOPT is not set +CONFIG_HEXDUMP=y +# CONFIG_HD is not set +# CONFIG_FEATURE_HEXDUMP_REVERSE is not set +CONFIG_HWCLOCK=y +CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y +CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +CONFIG_LOSETUP=y +# CONFIG_MDEV is not set +# CONFIG_FEATURE_MDEV_CONF is not set +# CONFIG_FEATURE_MDEV_EXEC is not set +# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_V0 is not set +CONFIG_MORE=y +CONFIG_FEATURE_USE_TERMIOS=y +CONFIG_MOUNT=y +# CONFIG_FEATURE_MOUNT_HELPERS is not set +CONFIG_FEATURE_MOUNT_NFS=y +# CONFIG_FEATURE_MOUNT_CIFS is not set +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +CONFIG_PIVOT_ROOT=y +CONFIG_RDATE=y +# CONFIG_READPROFILE is not set +# CONFIG_SETARCH is not set +CONFIG_SWAPONOFF=y +CONFIG_SWITCH_ROOT=y +CONFIG_UMOUNT=y +# CONFIG_FEATURE_UMOUNT_ALL is not set + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set + +# +# Miscellaneous Utilities +# +# CONFIG_ADJTIMEX is not set +# CONFIG_BBCONFIG is not set +# CONFIG_CHRT is not set +# CONFIG_CROND is not set +# CONFIG_DEBUG_CROND_OPTION is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +# CONFIG_CRONTAB is not set +CONFIG_DC=y +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +# CONFIG_EJECT is not set +# CONFIG_LAST is not set +CONFIG_LESS=y +CONFIG_FEATURE_LESS_MAXLINES=9999999 +CONFIG_FEATURE_LESS_BRACKETS=y +CONFIG_FEATURE_LESS_FLAGS=y +# CONFIG_FEATURE_LESS_FLAGCS is not set +# CONFIG_FEATURE_LESS_MARKS is not set +# CONFIG_FEATURE_LESS_REGEXP is not set +# CONFIG_HDPARM is not set +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +# CONFIG_MAKEDEVS is not set +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +# CONFIG_FEATURE_MAKEDEVS_TABLE is not set +# CONFIG_MICROCOM is not set +# CONFIG_MOUNTPOINT is not set +# CONFIG_MT is not set +# CONFIG_RAIDAUTORUN is not set +# CONFIG_READAHEAD is not set +# CONFIG_RUNLEVEL is not set +# CONFIG_RX is not set +CONFIG_STRINGS=y +# CONFIG_SETSID is not set +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +CONFIG_TIME=y +# CONFIG_TTYSIZE is not set +# CONFIG_WATCHDOG is not set + +# +# Networking Utilities +# +CONFIG_FEATURE_IPV6=y +CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +# CONFIG_ARP is not set +# CONFIG_ARPING is not set +# CONFIG_DNSD is not set +# CONFIG_ETHER_WAKE is not set +# CONFIG_FAKEIDENTD is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_RANGES is not set +# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set +# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set +# CONFIG_FEATURE_HTTPD_PROXY is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +# CONFIG_FEATURE_IFCONFIG_SLIP is not set +# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set +CONFIG_FEATURE_IFCONFIG_HW=y +# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +CONFIG_IFUPDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" +# CONFIG_FEATURE_IFUPDOWN_IP is not set +# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set +CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y +CONFIG_FEATURE_IFUPDOWN_MAPPING=y +# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +# CONFIG_INETD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_TUNNEL=y +# CONFIG_FEATURE_IP_RULE is not set +# CONFIG_FEATURE_IP_SHORT_FORMS is not set +# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set +# CONFIG_IPADDR is not set +# CONFIG_IPLINK is not set +# CONFIG_IPROUTE is not set +# CONFIG_IPTUNNEL is not set +# CONFIG_IPRULE is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_NAMEIF is not set +# CONFIG_FEATURE_NAMEIF_EXTENDED is not set +CONFIG_NC=y +# CONFIG_NC_SERVER is not set +# CONFIG_NC_EXTRA is not set +CONFIG_NETSTAT=y +# CONFIG_FEATURE_NETSTAT_WIDE is not set +CONFIG_NSLOOKUP=y +CONFIG_PING=y +CONFIG_PING6=y +# CONFIG_PSCAN is not set +CONFIG_FEATURE_FANCY_PING=y +CONFIG_ROUTE=y +# CONFIG_SLATTACH is not set +CONFIG_TELNET=y +# CONFIG_FEATURE_TELNET_TTYPE is not set +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +# CONFIG_TELNETD is not set +# CONFIG_FEATURE_TELNETD_STANDALONE is not set +CONFIG_TFTP=y +CONFIG_FEATURE_TFTP_GET=y +CONFIG_FEATURE_TFTP_PUT=y +# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set +# CONFIG_DEBUG_TFTP is not set +CONFIG_TRACEROUTE=y +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +CONFIG_APP_UDHCPD=y +# CONFIG_APP_DHCPRELAY is not set +CONFIG_APP_DUMPLEASES=y +# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set +CONFIG_APP_UDHCPC=y +CONFIG_FEATURE_UDHCPC_ARPING=y +# CONFIG_FEATURE_UDHCP_DEBUG is not set +# CONFIG_FEATURE_RFC3397 is not set +CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +# CONFIG_VCONFIG is not set +CONFIG_WGET=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_LONG_OPTIONS=y +# CONFIG_ZCIP is not set + +# +# Process Utilities +# +CONFIG_FREE=y +CONFIG_FUSER=y +CONFIG_KILL=y +CONFIG_KILLALL=y +# CONFIG_KILLALL5 is not set +# CONFIG_NMETER is not set +# CONFIG_PGREP is not set +CONFIG_PIDOF=y +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set +# CONFIG_PKILL is not set +CONFIG_PS=y +CONFIG_FEATURE_PS_WIDE=y +CONFIG_RENICE=y +CONFIG_BB_SYSCTL=y +CONFIG_TOP=y +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +# CONFIG_FEATURE_TOP_DECIMALS is not set +# CONFIG_FEATURE_TOPMEM is not set +CONFIG_UPTIME=y +CONFIG_WATCH=y + +# +# Shells +# +CONFIG_FEATURE_SH_IS_ASH=y +# CONFIG_FEATURE_SH_IS_HUSH is not set +# CONFIG_FEATURE_SH_IS_MSH is not set +# CONFIG_FEATURE_SH_IS_NONE is not set +CONFIG_ASH=y + +# +# Ash Shell Options +# +CONFIG_ASH_JOB_CONTROL=y +CONFIG_ASH_READ_NCHARS=y +CONFIG_ASH_READ_TIMEOUT=y +CONFIG_ASH_ALIAS=y +CONFIG_ASH_MATH_SUPPORT=y +# CONFIG_ASH_MATH_SUPPORT_64 is not set +CONFIG_ASH_GETOPTS=y +# CONFIG_ASH_BUILTIN_ECHO is not set +CONFIG_ASH_BUILTIN_TEST=y +# CONFIG_ASH_CMDCMD is not set +# CONFIG_ASH_MAIL is not set +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +# CONFIG_ASH_RANDOM_SUPPORT is not set +CONFIG_ASH_EXPAND_PRMT=y +# CONFIG_HUSH is not set +# CONFIG_HUSH_HELP is not set +# CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_JOB is not set +# CONFIG_HUSH_TICK is not set +# CONFIG_HUSH_IF is not set +# CONFIG_HUSH_LOOPS is not set +# CONFIG_LASH is not set +# CONFIG_MSH is not set + +# +# Bourne Shell Options +# +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE is not set +# CONFIG_CTTYHACK is not set + +# +# System Logging Utilities +# +CONFIG_SYSLOGD=y +CONFIG_FEATURE_ROTATE_LOGFILE=y +CONFIG_FEATURE_REMOTE_LOG=y +CONFIG_FEATURE_IPC_SYSLOG=y +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 +CONFIG_LOGREAD=y +CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y +CONFIG_KLOGD=y +CONFIG_LOGGER=y + +# +# Runit Utilities +# +# CONFIG_RUNSV is not set +# CONFIG_RUNSVDIR is not set +# CONFIG_SV is not set +# CONFIG_SVLOGD is not set +# CONFIG_CHPST is not set +# CONFIG_SETUIDGID is not set +# CONFIG_ENVUIDGID is not set +# CONFIG_ENVDIR is not set +# CONFIG_SOFTLIMIT is not set +# CONFIG_CHCON is not set +# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set +# CONFIG_GETENFORCE is not set +# CONFIG_GETSEBOOL is not set +# CONFIG_LOAD_POLICY is not set +# CONFIG_MATCHPATHCON is not set +# CONFIG_RESTORECON is not set +# CONFIG_RUNCON is not set +# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set +# CONFIG_SELINUXENABLED is not set +# CONFIG_SETENFORCE is not set +# CONFIG_SETFILES is not set +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set +# CONFIG_SETSEBOOL is not set +# CONFIG_SESTATUS is not set + +# +# ipsvd utilities +# +# CONFIG_TCPSVD is not set +# CONFIG_UDPSVD is not set diff --git a/packages/busybox/busybox_1.9.1.bb b/packages/busybox/busybox_1.9.1.bb index 85b2abbc5c..b41f1779b0 100644 --- a/packages/busybox/busybox_1.9.1.bb +++ b/packages/busybox/busybox_1.9.1.bb @@ -1,5 +1,5 @@ require busybox.inc -PR = "r0" +PR = "r1" SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ file://busybox-cron \ @@ -11,6 +11,7 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ file://syslog \ file://syslog.conf \ file://udhcpscript.patch;patch=1 \ + file://adduser-longops.patch;patch=1 \ file://umount.busybox \ file://run_parts.c \ file://defconfig" -- cgit v1.2.3 From 8af665768f69f7bc46c9912d849fd59f8bef0a5d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 16 Feb 2008 12:53:32 +0000 Subject: h3900.conf: Ship ipaq-boot-params --- conf/machine/h3900.conf | 2 ++ packages/tasks/task-base.bb | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/machine/h3900.conf b/conf/machine/h3900.conf index 5db7abd3d4..8b9b7ee365 100644 --- a/conf/machine/h3900.conf +++ b/conf/machine/h3900.conf @@ -24,6 +24,8 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-handhelds-2.6" PCMCIA_MANAGER = "pcmciautils" PREFERRED_PROVIDER_xserver = "xserver-kdrive" +MACHINE_EXTRA_RDEPENDS = "kernel ipaq-boot-params" + # # Modules autoload and other boot properties # diff --git a/packages/tasks/task-base.bb b/packages/tasks/task-base.bb index b5b3e82f70..bb89ac0c2b 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 = "r60" +PR = "r61" inherit task -- cgit v1.2.3 From 13e4189a1ce3f4983fc4747de596bf3ae6c5969c Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 16 Feb 2008 12:54:10 +0000 Subject: ifplugd 0.25 remove nylonisms and bashisms, remove 0.20, closes #1587 --- packages/ifplugd/files/nobash.patch | 8 ++++++++ packages/ifplugd/ifplugd_0.20.bb | 13 ------------- packages/ifplugd/ifplugd_0.25.bb | 14 ++++++++------ 3 files changed, 16 insertions(+), 19 deletions(-) create mode 100644 packages/ifplugd/files/nobash.patch delete mode 100644 packages/ifplugd/ifplugd_0.20.bb diff --git a/packages/ifplugd/files/nobash.patch b/packages/ifplugd/files/nobash.patch new file mode 100644 index 0000000000..8d0be50925 --- /dev/null +++ b/packages/ifplugd/files/nobash.patch @@ -0,0 +1,8 @@ +--- ifplugd-0.28/conf/ifplugd.init.in.orig 2007-05-24 19:00:03.000000000 +0000 ++++ ifplugd-0.28/conf/ifplugd.init.in 2007-05-24 19:00:09.000000000 +0000 +@@ -1,4 +1,4 @@ +-#!/bin/bash ++#!/bin/sh + # $Id: ifplugd.init.in 86 2004-01-26 15:34:24Z lennart $ + + # This file is part of ifplugd. diff --git a/packages/ifplugd/ifplugd_0.20.bb b/packages/ifplugd/ifplugd_0.20.bb deleted file mode 100644 index 18e9a66c94..0000000000 --- a/packages/ifplugd/ifplugd_0.20.bb +++ /dev/null @@ -1,13 +0,0 @@ -SECTION = "console/network" -DESCRIPTION = "ifplugd is a Linux daemon which will automatically configure your ethernet device when a cable is plugged in and automatically unconfigure it if the cable is pulled." -DEPENDS = "libdaemon" -LICENSE = "GPL" - -SRC_URI = "http://0pointer.de/lennart/projects/ifplugd/ifplugd-${PV}.tar.gz" - -inherit autotools update-rc.d - -EXTRA_OECONF = "--disable-lynx" - -INITSCRIPT_NAME = "ifplugd" -INITSCRIPT_PARAMS = "defaults" \ No newline at end of file diff --git a/packages/ifplugd/ifplugd_0.25.bb b/packages/ifplugd/ifplugd_0.25.bb index 55c2be0ced..ca7f219165 100644 --- a/packages/ifplugd/ifplugd_0.25.bb +++ b/packages/ifplugd/ifplugd_0.25.bb @@ -1,12 +1,14 @@ -SECTION = "console/network" -DESCRIPTION = "ifplugd is a Linux daemon which will automatically configure your ethernet device when a cable is plugged in and automatically unconfigure it if the cable is pulled." +DESCRIPTION = "ifplugd is a Linux daemon which will automatically configure your ethernet device \ +when a cable is plugged in and automatically unconfigure it if the cable is pulled." HOMEPAGE = "http://0pointer.de/lennart/projects/ifplugd/" +SECTION = "network" DEPENDS = "libdaemon" LICENSE = "GPL" +PR = "r1" -SRC_URI = "http://0pointer.de/lennart/projects/ifplugd/ifplugd-${PV}.tar.gz" - -SRC_URI_append_nylon = " file://kernel-types.patch;patch=1" +SRC_URI = "http://0pointer.de/lennart/projects/ifplugd/ifplugd-${PV}.tar.gz \ + file://kernel-types.patch;patch=1 \ + file://nobash.patch;patch=1" inherit autotools update-rc.d pkgconfig @@ -15,4 +17,4 @@ EXTRA_OECONF = "--disable-lynx" INITSCRIPT_NAME = "ifplugd" INITSCRIPT_PARAMS = "defaults" -CONFFILES_${PN}_nylon = "${sysconfdir}/ifplugd/ifplugd.conf" +CONFFILES_${PN} = "${sysconfdir}/ifplugd/ifplugd.conf" -- cgit v1.2.3 From 16de56e20ea575bd81dab5b8868a18fbf2679777 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 16 Feb 2008 13:24:03 +0000 Subject: gpsd: remove python-ncurses dependency from gspd, it's actually python-curses we depend on --- packages/gpsd/gpsd.inc | 2 +- packages/python/python_2.5.1.bb | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/gpsd/gpsd.inc b/packages/gpsd/gpsd.inc index d2630e5e43..f7952e0297 100644 --- a/packages/gpsd/gpsd.inc +++ b/packages/gpsd/gpsd.inc @@ -82,5 +82,5 @@ RDEPENDS_gps-utils = "python-pygps" DESCRIPTION_python-pygps = "Python bindings to gpsd" FILES_python-pygps = "${libdir}/*/site-packages/*" -RDEPENDS_python-pygps = "python-core python-ncurses gpsd" +RDEPENDS_python-pygps = "python-core python-curses gpsd" diff --git a/packages/python/python_2.5.1.bb b/packages/python/python_2.5.1.bb index 5b15634dd0..ecfedf15fe 100644 --- a/packages/python/python_2.5.1.bb +++ b/packages/python/python_2.5.1.bb @@ -7,7 +7,7 @@ DEPENDS = "python-native readline zlib gdbm openssl sqlite3 tcl tk" DEPENDS_sharprom = "python-native readline zlib gdbm openssl" # NOTE: Keep the digit in sync with BASEREV in contrib/generate-manifest-2.5.py -PR = "ml9" +PR = "ml10" PYTHON_MAJMIN = "2.5" @@ -103,5 +103,3 @@ FILES_python-misc = "${libdir}/python${PYTHON_MAJMIN}" PACKAGES += "python-man" FILES_python-man = "${datadir}/man" -PACKAGES_DYNAMIC += "python-ncurses" - -- cgit v1.2.3 From 08653b16db42a76bc13abae66d34c0fc85f9a99c Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Sat, 16 Feb 2008 14:33:38 +0000 Subject: linux-(rt-)2.6.24: Fix clock resolution to nanosecond. --- packages/linux/linux-2.6.24/powerpc-clockres.patch | 47 ++++++++++++++++++++++ .../linux/linux-rt-2.6.24/powerpc-clockres.patch | 47 ++++++++++++++++++++++ packages/linux/linux-rt_2.6.24.bb | 3 +- packages/linux/linux_2.6.24.bb | 7 ++-- 4 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 packages/linux/linux-2.6.24/powerpc-clockres.patch create mode 100644 packages/linux/linux-rt-2.6.24/powerpc-clockres.patch diff --git a/packages/linux/linux-2.6.24/powerpc-clockres.patch b/packages/linux/linux-2.6.24/powerpc-clockres.patch new file mode 100644 index 0000000000..a0cf05b44e --- /dev/null +++ b/packages/linux/linux-2.6.24/powerpc-clockres.patch @@ -0,0 +1,47 @@ +Index: linux-2.6.24/arch/powerpc/kernel/asm-offsets.c +=================================================================== +--- linux-2.6.24.orig/arch/powerpc/kernel/asm-offsets.c 2008-02-16 13:54:09.000000000 +0100 ++++ linux-2.6.24/arch/powerpc/kernel/asm-offsets.c 2008-02-16 13:54:30.000000000 +0100 +@@ -312,7 +312,7 @@ + DEFINE(CLOCK_REALTIME, CLOCK_REALTIME); + DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC); + DEFINE(NSEC_PER_SEC, NSEC_PER_SEC); +- DEFINE(CLOCK_REALTIME_RES, TICK_NSEC); ++ DEFINE(CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC); + + #ifdef CONFIG_BUG + DEFINE(BUG_ENTRY_SIZE, sizeof(struct bug_entry)); +Index: linux-2.6.24/include/linux/hrtimer.h +=================================================================== +--- linux-2.6.24.orig/include/linux/hrtimer.h 2008-02-16 13:54:09.000000000 +0100 ++++ linux-2.6.24/include/linux/hrtimer.h 2008-02-16 13:54:33.000000000 +0100 +@@ -223,11 +223,13 @@ + * idea of the (in)accuracy of timers. Timer values are rounded up to + * this resolution values. + */ +-# define KTIME_HIGH_RES (ktime_t) { .tv64 = 1 } ++# define HIGH_RES_NSEC 1 ++# define KTIME_HIGH_RES (ktime_t) { .tv64 = HIGH_RES_NSEC } ++# define MONOTONIC_RES_NSEC HIGH_RES_NSEC + # define KTIME_MONOTONIC_RES KTIME_HIGH_RES + + #else +- ++# define MONOTONIC_RES_NSEC LOW_RES_NSEC + # define KTIME_MONOTONIC_RES KTIME_LOW_RES + + /* +Index: linux-2.6.24/include/linux/ktime.h +=================================================================== +--- linux-2.6.24.orig/include/linux/ktime.h 2008-02-16 13:54:09.000000000 +0100 ++++ linux-2.6.24/include/linux/ktime.h 2008-02-16 13:54:36.000000000 +0100 +@@ -316,7 +316,8 @@ + * idea of the (in)accuracy of timers. Timer values are rounded up to + * this resolution values. + */ +-#define KTIME_LOW_RES (ktime_t){ .tv64 = TICK_NSEC } ++#define LOW_RES_NSEC TICK_NSEC ++#define KTIME_LOW_RES (ktime_t){ .tv64 = LOW_RES_NSEC } + + /* Get the monotonic time in timespec format: */ + extern void ktime_get_ts(struct timespec *ts); diff --git a/packages/linux/linux-rt-2.6.24/powerpc-clockres.patch b/packages/linux/linux-rt-2.6.24/powerpc-clockres.patch new file mode 100644 index 0000000000..a0cf05b44e --- /dev/null +++ b/packages/linux/linux-rt-2.6.24/powerpc-clockres.patch @@ -0,0 +1,47 @@ +Index: linux-2.6.24/arch/powerpc/kernel/asm-offsets.c +=================================================================== +--- linux-2.6.24.orig/arch/powerpc/kernel/asm-offsets.c 2008-02-16 13:54:09.000000000 +0100 ++++ linux-2.6.24/arch/powerpc/kernel/asm-offsets.c 2008-02-16 13:54:30.000000000 +0100 +@@ -312,7 +312,7 @@ + DEFINE(CLOCK_REALTIME, CLOCK_REALTIME); + DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC); + DEFINE(NSEC_PER_SEC, NSEC_PER_SEC); +- DEFINE(CLOCK_REALTIME_RES, TICK_NSEC); ++ DEFINE(CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC); + + #ifdef CONFIG_BUG + DEFINE(BUG_ENTRY_SIZE, sizeof(struct bug_entry)); +Index: linux-2.6.24/include/linux/hrtimer.h +=================================================================== +--- linux-2.6.24.orig/include/linux/hrtimer.h 2008-02-16 13:54:09.000000000 +0100 ++++ linux-2.6.24/include/linux/hrtimer.h 2008-02-16 13:54:33.000000000 +0100 +@@ -223,11 +223,13 @@ + * idea of the (in)accuracy of timers. Timer values are rounded up to + * this resolution values. + */ +-# define KTIME_HIGH_RES (ktime_t) { .tv64 = 1 } ++# define HIGH_RES_NSEC 1 ++# define KTIME_HIGH_RES (ktime_t) { .tv64 = HIGH_RES_NSEC } ++# define MONOTONIC_RES_NSEC HIGH_RES_NSEC + # define KTIME_MONOTONIC_RES KTIME_HIGH_RES + + #else +- ++# define MONOTONIC_RES_NSEC LOW_RES_NSEC + # define KTIME_MONOTONIC_RES KTIME_LOW_RES + + /* +Index: linux-2.6.24/include/linux/ktime.h +=================================================================== +--- linux-2.6.24.orig/include/linux/ktime.h 2008-02-16 13:54:09.000000000 +0100 ++++ linux-2.6.24/include/linux/ktime.h 2008-02-16 13:54:36.000000000 +0100 +@@ -316,7 +316,8 @@ + * idea of the (in)accuracy of timers. Timer values are rounded up to + * this resolution values. + */ +-#define KTIME_LOW_RES (ktime_t){ .tv64 = TICK_NSEC } ++#define LOW_RES_NSEC TICK_NSEC ++#define KTIME_LOW_RES (ktime_t){ .tv64 = LOW_RES_NSEC } + + /* Get the monotonic time in timespec format: */ + extern void ktime_get_ts(struct timespec *ts); diff --git a/packages/linux/linux-rt_2.6.24.bb b/packages/linux/linux-rt_2.6.24.bb index 9869757391..b9f374099e 100644 --- a/packages/linux/linux-rt_2.6.24.bb +++ b/packages/linux/linux-rt_2.6.24.bb @@ -6,11 +6,12 @@ DEFAULT_PREFERENCE_mpc8313e-rdb = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" -PR = "r1" +PR = "r2" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ ${KERNELORG_MIRROR}/pub/linux/kernel/projects/rt/patch-2.6.24-rt1.bz2;patch=1 \ http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \ + file://powerpc-clockres.patch;patch=1 \ file://defconfig" S = "${WORKDIR}/linux-2.6.24" diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb index 18ba900fce..afb45159c4 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -7,11 +7,12 @@ DEFAULT_PREFERENCE_mpc8313e-rdb = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" -PR = "r3" +PR = "r5" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ - file://defconfig \ - " + http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \ + file://powerpc-clockres.patch;patch=1 \ + file://defconfig" # Real-time preemption. This is experimental and requires a different defconfig. #SRC_URI += " http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.24-rt1.bz2;patch=1" -- cgit v1.2.3 From 5f52c593a937c3463f58ec1b5521431521da4ec6 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sat, 16 Feb 2008 15:08:17 +0000 Subject: classpath: - make classpath-tools and classpath-examples rdepend on a runtime - make classpath-examples rdepend on classpath-awt since it contains AWT + Swing demos - adjust revisions --- packages/classpath/classpath-minimal_0.96.1.bb | 2 +- packages/classpath/classpath.inc | 2 ++ packages/classpath/classpath_0.96.1.bb | 5 +++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/classpath/classpath-minimal_0.96.1.bb b/packages/classpath/classpath-minimal_0.96.1.bb index 0597274915..982203553e 100644 --- a/packages/classpath/classpath-minimal_0.96.1.bb +++ b/packages/classpath/classpath-minimal_0.96.1.bb @@ -1,6 +1,6 @@ require classpath.inc -PR = "r3" +PR = "r4" SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0" diff --git a/packages/classpath/classpath.inc b/packages/classpath/classpath.inc index 97c081af89..3e0c99c958 100644 --- a/packages/classpath/classpath.inc +++ b/packages/classpath/classpath.inc @@ -9,6 +9,8 @@ DEPENDS = "virtual/javac-native fastjar-native zip-native" RPROVIDES = "" RDEPENDS_${PN} = "${PBN}-common (>= ${PV})" +RDEPENDS_${PN}-examples = "java2-runtime ${PN}-awt" +RDEPENDS_${PN}-tools = "java2-runtime" RPROVIDES_${PN} = "${PBN}" RPROVIDES_${PN}-gtk = "${PBN}-awt" diff --git a/packages/classpath/classpath_0.96.1.bb b/packages/classpath/classpath_0.96.1.bb index 6b167a2d47..fdb811a89f 100644 --- a/packages/classpath/classpath_0.96.1.bb +++ b/packages/classpath/classpath_0.96.1.bb @@ -1,8 +1,9 @@ require classpath.inc -SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0" +SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0 \ + " -PR = "r2" +PR = "r3" DEPENDS += "gtk+ gconf libxtst" -- cgit v1.2.3 From 81d60d223becf845ecc2a035648f9effd2437d0e Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 16 Feb 2008 16:09:19 +0000 Subject: linux-handhelds-2.6: More elaboration to HaRET's sample startup.txt. --- packages/linux/linux-handhelds-2.6.inc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/linux/linux-handhelds-2.6.inc b/packages/linux/linux-handhelds-2.6.inc index 81af72e413..a0aec9cb36 100644 --- a/packages/linux/linux-handhelds-2.6.inc +++ b/packages/linux/linux-handhelds-2.6.inc @@ -88,20 +88,27 @@ set cmdline "root=/dev/mmcblk0p2 rootdelay=10 console=ttyS0,115200n8 console=tty ## Choice 2 - Boot from CF card, setup like above #set cmdline "root=/dev/hda2 rootdelay=10 console=ttyS0,115200n8 console=tty0" -## Choice 3 - Boot rootfs image as initramfs (works only for smaller images) +## Choice 3 - Boot kernel with builtin interactive bootloader (initramfs-bootmenu-image) +# rootdelay is a wait before scanning for the available partitions +# if root= is also specified, interactive selection will be skipped and +# direct boot will happen. +#set cmdline "rootdelay=3 console=ttyS0,115200n8 console=tty0" + +## Choice 4 - Boot rootfs image as initramfs (works only for smaller images) # have a cpio.gz file below together with zImage, no EXT2 partition required #set initrd ".rootfs.cpio.gz" #set cmdline "rdinit=/sbin/init console=ttyS0,115200n8 console=tty0" -## Choice 4 - Boot via NFS over USB networking (must be kernel-builtin) +## Choice 5 - Boot via NFS over USB networking (must be kernel-builtin +# or initramfs-*-image works too) # 192.168.x.x - Server address (the other side) # 192.168.y.y - Handheld's address #set cmdline "root=/dev/nfs nfsroot=192.168.x.x: ip=192.168.y.y:192.168.x.x:192.168.x.x:255.255.255.0:pda:usb0 console=ttyS0,115200n8 console=tty0" -## Choice 5 - Boot from MTD partition, for devices with lots of flash +## Choice 6 - Boot from MTD partition, for devices with lots of flash # to have both WinCE and Linux there. Note the value of root param, # that's how it should be, not "/dev/mtdblockN". -# set cmdline "root=mtdN console=ttyS0,115200n8 console=tty0" +#set cmdline "root=mtdN console=ttyS0,115200n8 console=tty0" bootlinux EOF -- cgit v1.2.3 From a30a065aa1974fbc8c1fab60dfa403485f44f17d Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 16 Feb 2008 16:21:49 +0000 Subject: (python-)efl cvs update and catch up with upstream version changes, add missing dependency in python-ecore --- conf/distro/include/sane-srcdates.inc | 2 +- packages/python/python-ecore_cvs.bb | 5 +++-- packages/python/python-edbus_cvs.bb | 4 ++-- packages/python/python-edje_cvs.bb | 3 ++- packages/python/python-efl-examples.bb | 10 ---------- packages/python/python-efl.bb | 7 ------- packages/python/python-efl.inc | 1 - packages/python/python-emotion_cvs.bb | 3 ++- packages/python/python-epsilon_cvs.bb | 3 ++- packages/python/python-evas_cvs.bb | 3 ++- packages/tasks/task-python-efl-examples.bb | 10 ++++++++++ packages/tasks/task-python-efl.bb | 7 +++++++ 12 files changed, 31 insertions(+), 27 deletions(-) delete mode 100644 packages/python/python-efl-examples.bb delete mode 100644 packages/python/python-efl.bb create mode 100644 packages/tasks/task-python-efl-examples.bb create mode 100644 packages/tasks/task-python-efl.bb diff --git a/conf/distro/include/sane-srcdates.inc b/conf/distro/include/sane-srcdates.inc index 43ffa1de9f..5a1e8f2758 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 = "20080129" +EFL_SRCDATE = "20080216" SRCDATE_edb-native ?= "${EFL_SRCDATE}" SRCDATE_edb ?= "${EFL_SRCDATE}" SRCDATE_eet-native ?= "${EFL_SRCDATE}" diff --git a/packages/python/python-ecore_cvs.bb b/packages/python/python-ecore_cvs.bb index 0ec598f5a0..73c4b7ea00 100644 --- a/packages/python/python-ecore_cvs.bb +++ b/packages/python/python-ecore_cvs.bb @@ -1,6 +1,7 @@ require python-efl.inc -DEPENDS += "ecore" -PR = "r5" +DEPENDS += "python-evas ecore" +PV = "0.2.1+cvs${SRCDATE}" +PR = "r0" do_stage() { distutils_stage_all diff --git a/packages/python/python-edbus_cvs.bb b/packages/python/python-edbus_cvs.bb index 544a6f347f..dc4b09cee8 100644 --- a/packages/python/python-edbus_cvs.bb +++ b/packages/python/python-edbus_cvs.bb @@ -1,7 +1,7 @@ require python-efl.inc DEPENDS += "edbus python-dbus" - -PR = "r3" +PV = "0.1.1+cvs${SRCDATE}" +PR = "r0" SRC_URI = "${E_CVS};module=e17/proto/python-efl/python-e_dbus" S = "${WORKDIR}/python-e_dbus" diff --git a/packages/python/python-edje_cvs.bb b/packages/python/python-edje_cvs.bb index 1205e7ec84..3ee4b1decd 100644 --- a/packages/python/python-edje_cvs.bb +++ b/packages/python/python-edje_cvs.bb @@ -1,4 +1,5 @@ require python-efl.inc DEPENDS += "edje python-evas" -PR = "r5" +PV = "0.2.1+cvs${SRCDATE}" +PR = "r0" diff --git a/packages/python/python-efl-examples.bb b/packages/python/python-efl-examples.bb deleted file mode 100644 index 0a4e32097f..0000000000 --- a/packages/python/python-efl-examples.bb +++ /dev/null @@ -1,10 +0,0 @@ -DESCRIPTION = "Python Examples for the Enlightenment Foundation Libraries" -LICENSE = "MIT" -SECTION = "devel/python" -RDEPENDS = "\ - python-efl python-ecore-examples python-emotion-examples python-edje-examples python-epsilon-examples \ - python-math python-textutils \ -" -PR = "ml2" - -ALLOW_EMPTY = "1" diff --git a/packages/python/python-efl.bb b/packages/python/python-efl.bb deleted file mode 100644 index 1c7f23a1eb..0000000000 --- a/packages/python/python-efl.bb +++ /dev/null @@ -1,7 +0,0 @@ -DESCRIPTION = "Python Bindings to the Enlightenment Foundation Libraries" -LICENSE = "MIT" -SECTION = "devel/python" -RDEPENDS = "python-evas python-ecore python-emotion python-edje python-epsilon python-edbus" -PR = "ml2" - -ALLOW_EMPTY = "1" diff --git a/packages/python/python-efl.inc b/packages/python/python-efl.inc index e6cc62df5e..1cbec65fa5 100644 --- a/packages/python/python-efl.inc +++ b/packages/python/python-efl.inc @@ -6,7 +6,6 @@ HOMEPAGE = "http://www.enlightenment.org" # does not compile unless pyrex has been built DEPENDS = "python-cython-native python-pyrex-native python-numeric" RDEPENDS += "python-lang" -PV = "0.1.1+cvs${SRCDATE}" inherit setuptools diff --git a/packages/python/python-emotion_cvs.bb b/packages/python/python-emotion_cvs.bb index d3f5109d86..cc79ad51e6 100644 --- a/packages/python/python-emotion_cvs.bb +++ b/packages/python/python-emotion_cvs.bb @@ -1,3 +1,4 @@ require python-efl.inc DEPENDS += "emotion python-evas" -PR = "r4" +PV = "0.2.1+cvs${SRCDATE}" +PR = "r0" diff --git a/packages/python/python-epsilon_cvs.bb b/packages/python/python-epsilon_cvs.bb index 204dd95610..f979159b49 100644 --- a/packages/python/python-epsilon_cvs.bb +++ b/packages/python/python-epsilon_cvs.bb @@ -1,3 +1,4 @@ require python-efl.inc DEPENDS += "epsilon python-ecore" -PR = "r4" +PV = "0.2.1+cvs${SRCDATE}" +PR = "r0" diff --git a/packages/python/python-evas_cvs.bb b/packages/python/python-evas_cvs.bb index e0de4569bd..92f4466a24 100644 --- a/packages/python/python-evas_cvs.bb +++ b/packages/python/python-evas_cvs.bb @@ -1,6 +1,7 @@ require python-efl.inc DEPENDS += "evas" -PR = "r4" +PV = "0.2.1+cvs${SRCDATE}" +PR = "r0" do_stage() { distutils_stage_all diff --git a/packages/tasks/task-python-efl-examples.bb b/packages/tasks/task-python-efl-examples.bb new file mode 100644 index 0000000000..0a4e32097f --- /dev/null +++ b/packages/tasks/task-python-efl-examples.bb @@ -0,0 +1,10 @@ +DESCRIPTION = "Python Examples for the Enlightenment Foundation Libraries" +LICENSE = "MIT" +SECTION = "devel/python" +RDEPENDS = "\ + python-efl python-ecore-examples python-emotion-examples python-edje-examples python-epsilon-examples \ + python-math python-textutils \ +" +PR = "ml2" + +ALLOW_EMPTY = "1" diff --git a/packages/tasks/task-python-efl.bb b/packages/tasks/task-python-efl.bb new file mode 100644 index 0000000000..1c7f23a1eb --- /dev/null +++ b/packages/tasks/task-python-efl.bb @@ -0,0 +1,7 @@ +DESCRIPTION = "Python Bindings to the Enlightenment Foundation Libraries" +LICENSE = "MIT" +SECTION = "devel/python" +RDEPENDS = "python-evas python-ecore python-emotion python-edje python-epsilon python-edbus" +PR = "ml2" + +ALLOW_EMPTY = "1" -- cgit v1.2.3 From 6f3bf92b602a4229723e1b4e2d09b6291ea16d29 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 16 Feb 2008 16:22:54 +0000 Subject: task-openmoko-python-devel: catch up with renaming python-efl to task-python-efl --- packages/tasks/task-openmoko-python-devel.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tasks/task-openmoko-python-devel.bb b/packages/tasks/task-openmoko-python-devel.bb index 695c380bc6..a5baed0024 100644 --- a/packages/tasks/task-openmoko-python-devel.bb +++ b/packages/tasks/task-openmoko-python-devel.bb @@ -1,12 +1,12 @@ DESCRIPTION = "OpenMoko: Python Development Tools" SECTION = "openmoko/devel" LICENSE = "MIT" -PR = "r2" +PR = "r3" inherit task RDEPENDS_task-openmoko-python-devel = "\ - python-efl \ + task-python-efl \ python-pygtk \ python-lightmediascanner \ " -- cgit v1.2.3 From ac2d3569ec4df552378dcd304021f139dbe5e698 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Sat, 16 Feb 2008 16:30:02 +0000 Subject: lighttpd: annotate upstreamed patch. --- packages/lighttpd/lighttpd/src-server.c.patch | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/lighttpd/lighttpd/src-server.c.patch b/packages/lighttpd/lighttpd/src-server.c.patch index 6ca0c9ea40..dbf614b2bd 100644 --- a/packages/lighttpd/lighttpd/src-server.c.patch +++ b/packages/lighttpd/lighttpd/src-server.c.patch @@ -1,3 +1,6 @@ +upstream: http://trac.lighttpd.net/trac/ticket/1402 +status: pending + --- lighttpd/src/server.c.orig 2006-03-04 09:12:17.000000000 -0800 +++ lighttpd/src/server.c 2006-07-11 09:16:28.000000000 -0700 @@ -1174,8 +1174,8 @@ -- cgit v1.2.3 From b7b7b8ba477be3f471d96ce473a55fcfaf24917b Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Sat, 16 Feb 2008 20:06:08 +0000 Subject: image.bbclass: Innocent typo fix. --- classes/image.bbclass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/image.bbclass b/classes/image.bbclass index e8fca61fb2..67a3a4fa10 100644 --- a/classes/image.bbclass +++ b/classes/image.bbclass @@ -35,9 +35,9 @@ python () { } # -# Get a list of files containing device tables to create. +# Get a list of files containing tables of devices to be created. # * IMAGE_DEVICE_TABLE is the old name to an absolute path to a device table file -# * IMAGE_DEVICE_TABLES is a new name for a file, or list of files, seached +# * IMAGE_DEVICE_TABLES is a new name for a file, or list of files, searched # for in the BBPATH # If neither are specified then the default name of files/device_table-minimal.txt # is searched for in the BBPATH (same as the old version.) -- cgit v1.2.3 From d9971a1a3d12421aea6e77f90e80589786a3a40a Mon Sep 17 00:00:00 2001 From: Derek Young Date: Sun, 17 Feb 2008 00:40:09 +0000 Subject: Add forgotten patch to re-enable big endian builds based on gcc 4.2.2 --- packages/gcc/gcc_4.2.2.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/gcc/gcc_4.2.2.bb b/packages/gcc/gcc_4.2.2.bb index 15a25c9c6a..dea9f14d9a 100644 --- a/packages/gcc/gcc_4.2.2.bb +++ b/packages/gcc/gcc_4.2.2.bb @@ -27,6 +27,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://602-sdk-libstdc++-includes.patch;patch=1 \ file://740-sh-pr24836.patch;patch=1 \ file://800-arm-bigendian.patch;patch=1 \ + file://801-arm-bigendian-eabi.patch;patch=1 \ file://904-flatten-switch-stmt-00.patch;patch=1 \ file://arm-nolibfloat.patch;patch=1 \ file://arm-softfloat.patch;patch=1 \ -- cgit v1.2.3 From c7c0ee0bb756ca79840a318378562d65a236bd4c Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 17 Feb 2008 02:49:20 +0000 Subject: devimage 0.1: Link init script to /sbin/init, so this can be booted as normal rootfs. * In addition to default initramfs booting. --- packages/initrdscripts/devimage_0.1.bb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/initrdscripts/devimage_0.1.bb b/packages/initrdscripts/devimage_0.1.bb index c671f38025..0622dd0330 100644 --- a/packages/initrdscripts/devimage_0.1.bb +++ b/packages/initrdscripts/devimage_0.1.bb @@ -1,12 +1,14 @@ DESCRIPTION = "Set of files to initialize bare system suitable for kernel, etc. testing." SRC_URI = "file://devimage.sh file://passwd file://dropbear_rsa_host_key" -PR = "r3" +PR = "r4" do_install() { - install -m 0755 ${WORKDIR}/devimage.sh ${D}/init install -d ${D}/etc/dropbear + install -d ${D}/sbin + install -m 0755 ${WORKDIR}/devimage.sh ${D}/init install -m 0600 ${WORKDIR}/dropbear_rsa_host_key ${D}/etc/dropbear/ install -m 0644 ${WORKDIR}/passwd ${D}/etc/ + ln -s /init ${D}/sbin/init } -FILES_${PN} += " /init /etc/*" +FILES_${PN} += " /init /etc/* /sbin/*" -- cgit v1.2.3 From db5d22bd31a498aa24a74e2fec7faa3467fa42ad Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 17 Feb 2008 02:52:18 +0000 Subject: initramfs-uniboot: Modprobe mtdblock and factor out fatal(). --- packages/initrdscripts/files/init.sh | 10 ++++++---- packages/initrdscripts/initramfs-uniboot_1.0.bb | 3 ++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/initrdscripts/files/init.sh b/packages/initrdscripts/files/init.sh index f8d5de9173..08163fa040 100644 --- a/packages/initrdscripts/files/init.sh +++ b/packages/initrdscripts/files/init.sh @@ -8,6 +8,7 @@ early_setup() { mkdir /proc mount -t proc proc /proc mkdir /mnt + modprobe -q mtdblock } dev_setup() @@ -48,13 +49,13 @@ boot_root() { exec switch_root -c /dev/console $BOOT_ROOT /sbin/init } -boot_failed() { - echo "No valid root device was specified. Please add root=/dev/something to" - echo "the kernel command-line and try again." +fatal() { + echo $1 echo exec sh } + echo "Starting initramfs boot..." early_setup read_args @@ -68,4 +69,5 @@ dev_setup load_modules [ -n "$BOOT_ROOT" ] && boot_root -boot_failed + +fatal "No valid root device was specified. Please add root=/dev/something to the kernel command-line and try again." diff --git a/packages/initrdscripts/initramfs-uniboot_1.0.bb b/packages/initrdscripts/initramfs-uniboot_1.0.bb index 167ce71ffe..786afb972c 100644 --- a/packages/initrdscripts/initramfs-uniboot_1.0.bb +++ b/packages/initrdscripts/initramfs-uniboot_1.0.bb @@ -1,6 +1,7 @@ SRC_URI = "file://init.sh" -PR = "r2" +PR = "r3" DESCRIPTON = "A modular initramfs init script system." +RRECOMMENDS = "kernel-module-mtdblock" do_install() { install -m 0755 ${WORKDIR}/init.sh ${D}/init -- cgit v1.2.3 From d48df38d1f5109cfa951d407ff26dd84155c7ae8 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 17 Feb 2008 02:54:44 +0000 Subject: initramfs-module-block: Accept additional FSTYPE param, handle mount failure. * FSTYPE useful for FSes not automatically recognized by mount (e.g. jffs2). --- packages/initrdscripts/files/85-blockboot.sh | 6 +++++- packages/initrdscripts/initramfs-module-block_1.0.bb | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/initrdscripts/files/85-blockboot.sh b/packages/initrdscripts/files/85-blockboot.sh index 567f7e29b3..fee9072d3a 100644 --- a/packages/initrdscripts/files/85-blockboot.sh +++ b/packages/initrdscripts/files/85-blockboot.sh @@ -3,6 +3,10 @@ if [ -e "$ROOT_DEVICE" ]; then echo "booting from: $ROOT_DEVICE" - mount "$ROOT_DEVICE" /mnt + type="" + if [ -n "$FSTYPE" ]; then + type="-t $FSTYPE" + fi + mount $type "$ROOT_DEVICE" /mnt || fatal "Unable to mount rootfs device" BOOT_ROOT=/mnt fi diff --git a/packages/initrdscripts/initramfs-module-block_1.0.bb b/packages/initrdscripts/initramfs-module-block_1.0.bb index 72812a2490..dcee113dd1 100644 --- a/packages/initrdscripts/initramfs-module-block_1.0.bb +++ b/packages/initrdscripts/initramfs-module-block_1.0.bb @@ -1,5 +1,5 @@ SRC_URI = "file://85-blockboot.sh" -PR = "r1" +PR = "r2" RDEPENDS = "initramfs-uniboot" DESCRIPTION = "An initramfs module for booting off normal block devices." -- cgit v1.2.3 From 71a0ef43a6bf3c9eabc5ca4b9bd62229e574015d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 17 Feb 2008 02:56:43 +0000 Subject: * initramfs-module-bootmenu: Add support for jffs2 booting and "drop to shell" option. --- packages/initrdscripts/files/10-initfs.sh | 1 + packages/initrdscripts/files/30-bootmenu.sh | 10 +++++++++- packages/initrdscripts/initramfs-module-bootmenu_1.0.bb | 2 +- packages/initrdscripts/initramfs-module-initfs_1.0.bb | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/initrdscripts/files/10-initfs.sh b/packages/initrdscripts/files/10-initfs.sh index bad649e5c2..c2a843eb12 100644 --- a/packages/initrdscripts/files/10-initfs.sh +++ b/packages/initrdscripts/files/10-initfs.sh @@ -3,3 +3,4 @@ modprobe -q vfat >/dev/null 2>&1 modprobe -q ext2 >/dev/null 2>&1 modprobe -q ext3 >/dev/null 2>&1 +modprobe -q jffs2 >/dev/null 2>&1 diff --git a/packages/initrdscripts/files/30-bootmenu.sh b/packages/initrdscripts/files/30-bootmenu.sh index d54a643807..a45b55a353 100644 --- a/packages/initrdscripts/files/30-bootmenu.sh +++ b/packages/initrdscripts/files/30-bootmenu.sh @@ -95,6 +95,7 @@ while read maj min nblk dev; do done < /proc/partitions add_menu_item "NFS (nfsroot=192.168.2.200:/srv/nfs/oe/image)" +add_menu_item "Shell" total=`echo -e $list | wc -l` num=0 @@ -142,8 +143,11 @@ echo Selected: $sel dev=`expr "$sel" : '\([^ /]*\)'` path=`expr "$sel" : '[^/]*\([^ ]*\).*'` +fstype=`expr "$sel" : '[^ ]* *\(.*\)'` -if [ "$dev" == "NFS" ]; then +if [ "$dev" == "Shell" ]; then + exec /bin/sh +elif [ "$dev" == "NFS" ]; then ROOT_DEVICE="/dev/nfs" CMDLINE="$CMDLINE root=/dev/nfs nfsroot=192.168.2.200:/srv/nfs/oe/image" elif [ -n "$path" ]; then @@ -151,6 +155,10 @@ elif [ -n "$path" ]; then CMDLINE="$CMDLINE root=/dev/loop looproot=/dev/$dev:$path" else ROOT_DEVICE="/dev/$dev" + # jffs2 is not recognized by mount automagically + if [ "$fstype" == "(jffs2)" ]; then + FSTYPE="jffs2" + fi CMDLINE="$CMDLINE root=$ROOT_DEVICE" fi diff --git a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb index 8b9a49f40b..6f3c6ec565 100644 --- a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb +++ b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb @@ -1,5 +1,5 @@ SRC_URI = "file://30-bootmenu.sh" -PR = "r9" +PR = "r10" DESCRIPTION = "An initramfs module with UI for selection of boot device." RDEPENDS = "klibc-utils-fstype initramfs-uniboot initramfs-module-block initramfs-module-loop initramfs-module-nfs" # For VFAT mounting. diff --git a/packages/initrdscripts/initramfs-module-initfs_1.0.bb b/packages/initrdscripts/initramfs-module-initfs_1.0.bb index 64bba4a304..2c2ec07bf5 100644 --- a/packages/initrdscripts/initramfs-module-initfs_1.0.bb +++ b/packages/initrdscripts/initramfs-module-initfs_1.0.bb @@ -1,5 +1,5 @@ SRC_URI = "file://10-initfs.sh" -PR = "r2" +PR = "r4" DESCRIPTION = "An initramfs module for initializing filesystems." RDEPENDS = "initramfs-uniboot" RRECOMMENDS = "kernel-module-vfat kernel-module-ext2" -- cgit v1.2.3 From d1d941876523b687b4153a5f79e0b4f6c2d7fe5e Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 17 Feb 2008 03:09:06 +0000 Subject: initramfs-uniboot: FSTYPE -> ROOT_FSTYPE, set from rootfstype= command line param. --- packages/initrdscripts/files/30-bootmenu.sh | 2 +- packages/initrdscripts/files/85-blockboot.sh | 4 ++-- packages/initrdscripts/files/init.sh | 2 ++ packages/initrdscripts/initramfs-module-block_1.0.bb | 2 +- packages/initrdscripts/initramfs-module-bootmenu_1.0.bb | 2 +- packages/initrdscripts/initramfs-uniboot_1.0.bb | 2 +- 6 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/initrdscripts/files/30-bootmenu.sh b/packages/initrdscripts/files/30-bootmenu.sh index a45b55a353..3f3b8c7079 100644 --- a/packages/initrdscripts/files/30-bootmenu.sh +++ b/packages/initrdscripts/files/30-bootmenu.sh @@ -157,7 +157,7 @@ else ROOT_DEVICE="/dev/$dev" # jffs2 is not recognized by mount automagically if [ "$fstype" == "(jffs2)" ]; then - FSTYPE="jffs2" + ROOT_FSTYPE="jffs2" fi CMDLINE="$CMDLINE root=$ROOT_DEVICE" fi diff --git a/packages/initrdscripts/files/85-blockboot.sh b/packages/initrdscripts/files/85-blockboot.sh index fee9072d3a..e1c3ed893e 100644 --- a/packages/initrdscripts/files/85-blockboot.sh +++ b/packages/initrdscripts/files/85-blockboot.sh @@ -4,8 +4,8 @@ if [ -e "$ROOT_DEVICE" ]; then echo "booting from: $ROOT_DEVICE" type="" - if [ -n "$FSTYPE" ]; then - type="-t $FSTYPE" + if [ -n "$ROOT_FSTYPE" ]; then + type="-t $ROOT_FSTYPE" fi mount $type "$ROOT_DEVICE" /mnt || fatal "Unable to mount rootfs device" BOOT_ROOT=/mnt diff --git a/packages/initrdscripts/files/init.sh b/packages/initrdscripts/files/init.sh index 08163fa040..8b9fe12429 100644 --- a/packages/initrdscripts/files/init.sh +++ b/packages/initrdscripts/files/init.sh @@ -31,6 +31,8 @@ read_args() { case $arg in root=*) ROOT_DEVICE=$optarg ;; + rootfstype=*) + ROOT_FSTYPE=$optarg ;; rootdelay=*) rootdelay=$optarg ;; esac diff --git a/packages/initrdscripts/initramfs-module-block_1.0.bb b/packages/initrdscripts/initramfs-module-block_1.0.bb index dcee113dd1..b4b2d43150 100644 --- a/packages/initrdscripts/initramfs-module-block_1.0.bb +++ b/packages/initrdscripts/initramfs-module-block_1.0.bb @@ -1,5 +1,5 @@ SRC_URI = "file://85-blockboot.sh" -PR = "r2" +PR = "r3" RDEPENDS = "initramfs-uniboot" DESCRIPTION = "An initramfs module for booting off normal block devices." diff --git a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb index 6f3c6ec565..8c66521f30 100644 --- a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb +++ b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb @@ -1,5 +1,5 @@ SRC_URI = "file://30-bootmenu.sh" -PR = "r10" +PR = "r11" DESCRIPTION = "An initramfs module with UI for selection of boot device." RDEPENDS = "klibc-utils-fstype initramfs-uniboot initramfs-module-block initramfs-module-loop initramfs-module-nfs" # For VFAT mounting. diff --git a/packages/initrdscripts/initramfs-uniboot_1.0.bb b/packages/initrdscripts/initramfs-uniboot_1.0.bb index 786afb972c..e0f726582e 100644 --- a/packages/initrdscripts/initramfs-uniboot_1.0.bb +++ b/packages/initrdscripts/initramfs-uniboot_1.0.bb @@ -1,5 +1,5 @@ SRC_URI = "file://init.sh" -PR = "r3" +PR = "r4" DESCRIPTON = "A modular initramfs init script system." RRECOMMENDS = "kernel-module-mtdblock" -- cgit v1.2.3 From 0395d7bcfd686b1e3761ae3dcb0d30f116a1d11a Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 17 Feb 2008 08:19:00 +0000 Subject: at76c503a: add 0.17 release of at76_usb modules * this works with 2.6.21-hh for the h5000 machine * this driver also needs a firmware package, that will follow later --- packages/at76c503a/at76c503a-modules_0.17.bb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/at76c503a/at76c503a-modules_0.17.bb diff --git a/packages/at76c503a/at76c503a-modules_0.17.bb b/packages/at76c503a/at76c503a-modules_0.17.bb new file mode 100644 index 0000000000..affffa39ef --- /dev/null +++ b/packages/at76c503a/at76c503a-modules_0.17.bb @@ -0,0 +1,19 @@ +SECTION = "base" +LICENSE = "GPL" + +SRCDATE = "20080116" + +SRC_URI = "http://download.berlios.de/at76c503a/at76_usb-0.17.tar.gz" +S = "${WORKDIR}/at76_usb-${PV}/" + +inherit module + +MODULES = "at76c503 at76_usbdfu at76c503-i3861 at76c503-rfmd at76c503-rfmd-acc \ + at76c505-rfmd at76c503-i3863 at76c505-rfmd2958" + +do_install() { + install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/usb/ + for i in *${KERNEL_OBJECT_SUFFIX}; do + install -m 0644 $i ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/usb/ + done +} -- cgit v1.2.3 From 22930c300b7927092bc75eee464be0ad73213e8f Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 17 Feb 2008 08:34:39 +0000 Subject: h5000: ship all kernel-modules and at76_usb --- conf/machine/h5000.conf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/conf/machine/h5000.conf b/conf/machine/h5000.conf index e795395534..a55b75cd89 100644 --- a/conf/machine/h5000.conf +++ b/conf/machine/h5000.conf @@ -24,12 +24,15 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-handhelds-2.6" PREFERRED_PROVIDER_xserver = "xserver-kdrive" EXTRA_IMAGECMD_jffs2 = "-e 0x40000 -p ; echo '${IMAGE_NAME} ${IMAGE_NAME}.rootfs.jffs2 - root' >> ${DEPLOY_DIR_IMAGE}/reflash.ctl" +# Ship complete set of modules ('kernel-modules') for easier debug purposes MACHINE_EXTRA_RDEPENDS = "kernel ipaq-boot-params" -MACHINE_EXTRA_RRECOMMENDS = " kernel-module-h5400-lcd \ +MACHINE_EXTRA_RRECOMMENDS = " kernel-modules \ + kernel-module-h5400-lcd \ kernel-module-h5400-battery \ kernel-module-h5400-bt \ kernel-module-snd-soc-h5000 \ - kernel-module-i2c-pxa" + kernel-module-i2c-pxa \ + at76c503a-modules" # # Modules autoload and other boot properties -- cgit v1.2.3 From 77ea601316feb01887b5f4bc26d97f072d111ab1 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 17 Feb 2008 09:47:56 +0000 Subject: busybox: add docu for "push 'em"-status of packages/busybox/busybox-1.9.1/adduser-longops.patch * add lines upstream, status and comment to the patch --- packages/busybox/busybox-1.9.1/adduser-longops.patch | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/busybox/busybox-1.9.1/adduser-longops.patch b/packages/busybox/busybox-1.9.1/adduser-longops.patch index cb615c381e..f221d30895 100644 --- a/packages/busybox/busybox-1.9.1/adduser-longops.patch +++ b/packages/busybox/busybox-1.9.1/adduser-longops.patch @@ -1,3 +1,7 @@ +upstream: http://bugs.busybox.net/view.php?id=2134 +status: accepted in rev. 21031 on Feb 15 2008 +comment: fixes OE bug 3781, applied by mickeyl + diff -Nuar busybox-1.9.1.old/loginutils/Config.in busybox-1.9.1/loginutils/Config.in --- busybox-1.9.1.old/loginutils/Config.in Tue Feb 12 10:03:11 2008 +++ busybox-1.9.1/loginutils/Config.in Thu Feb 14 11:48:31 2008 -- cgit v1.2.3 From 87f5a11c6c0fa6f2ed6dffd2d00990caba59063a Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 17 Feb 2008 10:19:00 +0000 Subject: anki: export PV that should work with bitbake 1.8.8, too. --- packages/anki/anki_0.4.3.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/anki/anki_0.4.3.bb b/packages/anki/anki_0.4.3.bb index e4878645d8..f3a62f3323 100644 --- a/packages/anki/anki_0.4.3.bb +++ b/packages/anki/anki_0.4.3.bb @@ -1,9 +1,9 @@ require anki.inc RDEPENDS += "libanki" -PR = "r0" +PR = "r1" -#export PV="${PV}" +export PV := "${PV}" SRC_URI += "file://no-need-for-pyqt-at-buildtime.patch;patch=1" S = "${WORKDIR}/anki-${PV}" -- cgit v1.2.3 From 456ba7ffd159821e86ad7ad4b66ec7d5790bd054 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 17 Feb 2008 13:56:40 +0000 Subject: classes/kernel.bbclass: Remove usage of non-standard variables (DEPLOY_TO) and random renaming of output. --- classes/kernel.bbclass | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index 28e04ea204..6c12004dad 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -65,21 +65,21 @@ kernel_do_compile() { fi } +INITRAMFS_SYMLINK_NAME ?= "initramfs-${MACHINE}" +INITRAMFS_IMAGE_TARGET ?= "initramfs-image" + do_builtin_initramfs() { unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE - cp "${INITRAMFS_LOC}" usr/initramfs_data.cpio.gz + cp "${DEPLOY_DIR_IMAME}/${INITRAMFS_SYMLINK_NAME}" usr/initramfs_data.cpio.gz oe_runmake ${KERNEL_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" install -d ${DEPLOY_DIR_IMAGE} - mv ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.no-initramfs.bin - install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin + install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}-initramfs.bin # Make sure to kill injected initramfs, in case someone will do "-c compile -f" rm usr/initramfs_data.cpio.gz - - [ -n "${DEPLOY_TO}" ] && install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_TO} } addtask builtin_initramfs after do_compile -# As it accepts external parameter(s), better make it unstamped do_builtin_initramfs[nostamp] = "1" +do_builtin_initramfs[depends] = "${INITRAMFS_IMAGE_TARGET}:do_rootfs" kernel_do_stage() { ASMDIR=`readlink include/asm` -- cgit v1.2.3 From 4ba579914b3b0058f095d3cc5e4336bfd27e5503 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 17 Feb 2008 13:57:45 +0000 Subject: kernel-initramfs: Remove recursive usage of bitbake as per discussion on the mailing list and agreement by the OE core team. --- packages/initrdscripts/kernel-initramfs_1.0.bb | 48 -------------------------- 1 file changed, 48 deletions(-) delete mode 100644 packages/initrdscripts/kernel-initramfs_1.0.bb diff --git a/packages/initrdscripts/kernel-initramfs_1.0.bb b/packages/initrdscripts/kernel-initramfs_1.0.bb deleted file mode 100644 index be1c067ba2..0000000000 --- a/packages/initrdscripts/kernel-initramfs_1.0.bb +++ /dev/null @@ -1,48 +0,0 @@ -DESCRIPTION = "A kernel with internal initramfs" -PR = "r1" - -#inherit kernel -KERNEL_IMAGETYPE ?= "zImage" - -# Name of initramfs recipe to build and put result into kernel -KERNEL_INITRAMFS ?= "initramfs-image" - -do_compile() { - cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} ANGSTROM_MODE=uclibc IMAGE_FSTYPES=cpio.gz DEPLOY_TO=${WORKDIR}/initramfs.bin bitbake ${KERNEL_INITRAMFS} -c deploy_to - cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} INITRAMFS_LOC=${WORKDIR}/initramfs.bin DEPLOY_TO=${WORKDIR}/\${KERNEL_IMAGE_BASE_NAME} bitbake virtual/kernel -c builtin_initramfs -} - -do_install() { - install -d ${D}/boot/ - install -m 644 ${WORKDIR}/${KERNEL_IMAGETYPE}* ${D}/boot/${KERNEL_IMAGETYPE}-${@get_pv(d)} -} - -def get_version(d): - import bb - import os - dest = bb.data.getVar("WORKDIR", d, 1) - try: - files = os.listdir(dest) - files = filter(lambda f:f.startswith("zImage-"), files) - ver = files[0][len("zImage-"):] - return ver - except: - return "dum-m-y" - -def get_pv(d): - ver = get_version(d) - verc = ver.split("-") - return verc[0] + "-" + verc[1] - -def get_pr(d): - ver = get_version(d) - verc = ver.split("-") - return verc[2] - -PACKAGES = "kernel-image" -FILES_kernel-image = "/boot/*" -PKG_kernel-image = "kernel-image-${@get_pv(d)}" -PKGPV_kernel-image = "${@get_pv(d)}" -PKGPR_kernel-image = "${@get_pr(d)}" - -PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3 From c84138ac986f55076982bc368b5ae6a9033ea15d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 17 Feb 2008 14:18:01 +0000 Subject: kernel-initramfs, initramfs-image-ipk: Remove recipes with recursive bitbake invocations. * As not maintainable on global OE level. --- packages/initrdscripts/initramfs-image-ipk_1.0.bb | 15 ------- packages/initrdscripts/kernel-initramfs_1.0.bb | 48 ----------------------- 2 files changed, 63 deletions(-) delete mode 100644 packages/initrdscripts/initramfs-image-ipk_1.0.bb delete mode 100644 packages/initrdscripts/kernel-initramfs_1.0.bb diff --git a/packages/initrdscripts/initramfs-image-ipk_1.0.bb b/packages/initrdscripts/initramfs-image-ipk_1.0.bb deleted file mode 100644 index 8c79c24478..0000000000 --- a/packages/initrdscripts/initramfs-image-ipk_1.0.bb +++ /dev/null @@ -1,15 +0,0 @@ -DESCRIPTION = "Boot initramfs as a package" -PR = "r1" - -do_compile() { - cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} ANGSTROM_MODE=uclibc IMAGE_FSTYPES=cpio.gz DEPLOY_TO=${D}/boot/initramfs.bin bitbake initramfs-image -} - -do_install() { - install -d ${D}/boot/ - cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} ANGSTROM_MODE=uclibc IMAGE_FSTYPES=cpio.gz DEPLOY_TO=${D}/boot/initramfs.bin bitbake initramfs-image -c deploy_to -} - -FILES_${PN} += "/boot/*" - -PACKAGE_ARCH = "${MACHINE_ARCH}" diff --git a/packages/initrdscripts/kernel-initramfs_1.0.bb b/packages/initrdscripts/kernel-initramfs_1.0.bb deleted file mode 100644 index be1c067ba2..0000000000 --- a/packages/initrdscripts/kernel-initramfs_1.0.bb +++ /dev/null @@ -1,48 +0,0 @@ -DESCRIPTION = "A kernel with internal initramfs" -PR = "r1" - -#inherit kernel -KERNEL_IMAGETYPE ?= "zImage" - -# Name of initramfs recipe to build and put result into kernel -KERNEL_INITRAMFS ?= "initramfs-image" - -do_compile() { - cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} ANGSTROM_MODE=uclibc IMAGE_FSTYPES=cpio.gz DEPLOY_TO=${WORKDIR}/initramfs.bin bitbake ${KERNEL_INITRAMFS} -c deploy_to - cd ${TOPDIR}; DISTRO=${USERDISTRO} MACHINE=${MACHINE} INITRAMFS_LOC=${WORKDIR}/initramfs.bin DEPLOY_TO=${WORKDIR}/\${KERNEL_IMAGE_BASE_NAME} bitbake virtual/kernel -c builtin_initramfs -} - -do_install() { - install -d ${D}/boot/ - install -m 644 ${WORKDIR}/${KERNEL_IMAGETYPE}* ${D}/boot/${KERNEL_IMAGETYPE}-${@get_pv(d)} -} - -def get_version(d): - import bb - import os - dest = bb.data.getVar("WORKDIR", d, 1) - try: - files = os.listdir(dest) - files = filter(lambda f:f.startswith("zImage-"), files) - ver = files[0][len("zImage-"):] - return ver - except: - return "dum-m-y" - -def get_pv(d): - ver = get_version(d) - verc = ver.split("-") - return verc[0] + "-" + verc[1] - -def get_pr(d): - ver = get_version(d) - verc = ver.split("-") - return verc[2] - -PACKAGES = "kernel-image" -FILES_kernel-image = "/boot/*" -PKG_kernel-image = "kernel-image-${@get_pv(d)}" -PKGPV_kernel-image = "${@get_pv(d)}" -PKGPR_kernel-image = "${@get_pr(d)}" - -PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3 From 673d1bb689817bb46661662b5d1459d587f038ab Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 17 Feb 2008 15:22:06 +0000 Subject: zten: push patches upstream. Add AUTHOR to bb file. --- packages/zten/files/zten.patch | 2 ++ packages/zten/zten_1.6.2.bb | 1 + 2 files changed, 3 insertions(+) diff --git a/packages/zten/files/zten.patch b/packages/zten/files/zten.patch index 22ba56951a..3fff27a23d 100644 --- a/packages/zten/files/zten.patch +++ b/packages/zten/files/zten.patch @@ -1,3 +1,5 @@ +upstream: no upstream bug tracker. Laibsch contacted author by mail on 2008-02-17. + --- zten/zten.pro.orig 2003-02-16 16:45:44.000000000 +0100 +++ zten/zten.pro 2006-04-23 18:50:19.000000000 +0200 @@ -1,11 +1,9 @@ diff --git a/packages/zten/zten_1.6.2.bb b/packages/zten/zten_1.6.2.bb index b5a4c6eac1..33feae0911 100644 --- a/packages/zten/zten_1.6.2.bb +++ b/packages/zten/zten_1.6.2.bb @@ -1,4 +1,5 @@ DESCRIPTION = "EB*/EPWING dictionary browser for Linux Zaurus" +AUTHOR = "Yuuichi Teranishi " HOMEPAGE = "http://www.gohome.org/zten" SECTION = "opie/applications" PRIORITY = "optional" -- cgit v1.2.3 From 221ba4650fa3b92d3abc6f5c8f0291cbddedee18 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sun, 17 Feb 2008 18:17:05 +0000 Subject: openmoko-sound-system2: remove hard-coded fragment size for alsa sink --- packages/openmoko2/openmoko-sound-system2/session | 2 +- packages/openmoko2/openmoko-sound-system2_0.1.0.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/openmoko2/openmoko-sound-system2/session b/packages/openmoko2/openmoko-sound-system2/session index ed2346d55f..7ba07e9784 100644 --- a/packages/openmoko2/openmoko-sound-system2/session +++ b/packages/openmoko2/openmoko-sound-system2/session @@ -1,7 +1,7 @@ #!/usr/bin/pulseaudio -nF # Create autoload entries for the device drivers -add-autoload-sink output module-alsa-sink fragment_size=2048 sink_name=output +add-autoload-sink output module-alsa-sink sink_name=output add-autoload-source input module-alsa-source source_name=input # Load several protocols diff --git a/packages/openmoko2/openmoko-sound-system2_0.1.0.bb b/packages/openmoko2/openmoko-sound-system2_0.1.0.bb index 29d0cba1fe..ac281dad76 100644 --- a/packages/openmoko2/openmoko-sound-system2_0.1.0.bb +++ b/packages/openmoko2/openmoko-sound-system2_0.1.0.bb @@ -13,7 +13,7 @@ RDEPENDS = "\ " RREPLACES = "openmoko-sound-system" RPROVIDES = "openmoko-sound-system" -PR = "r4" +PR = "r5" inherit openmoko-base update-rc.d -- cgit v1.2.3 From befe5e55ec935233638e8adfa0d4ba5ead58f2c8 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sun, 17 Feb 2008 18:19:06 +0000 Subject: pulseaudio: 0.9.9 works good enough to be the default version now * add pulse to audio user group, so it can run as system daemon eventually --- packages/pulseaudio/pulse.inc | 7 ++++--- packages/pulseaudio/pulseaudio_0.9.9.bb | 6 ++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/pulseaudio/pulse.inc b/packages/pulseaudio/pulse.inc index b6b622d9c6..7f7f205613 100644 --- a/packages/pulseaudio/pulse.inc +++ b/packages/pulseaudio/pulse.inc @@ -20,8 +20,8 @@ EXTRA_OECONF = "\ --with-glib \ --with-alsa \ --with-oss \ - --with-hal \ - " + --with-hal \ +" PARALLEL_MAKE = "" @@ -83,7 +83,8 @@ pkg_postinst_${PN}-server() { grep -q pulse: /etc/group || addgroup pulse grep -q pulse: /etc/passwd || \ adduser --disabled-password --home=/var/run/pulse --system \ - --ingroup pulse --no-create-home -g "Pulse audio daemon" pulse + --ingroup pulse --no-create-home -g "Pulse audio daemon" pulse + adduser pulse audio /etc/init.d/populate-volatile.sh update } diff --git a/packages/pulseaudio/pulseaudio_0.9.9.bb b/packages/pulseaudio/pulseaudio_0.9.9.bb index d1e5706809..b884c27dd6 100644 --- a/packages/pulseaudio/pulseaudio_0.9.9.bb +++ b/packages/pulseaudio/pulseaudio_0.9.9.bb @@ -8,11 +8,9 @@ SRC_URI += "\ file://fix-dbus-without-hal.patch;patch=1 \ " -PR = "r1" +PR = "r2" # problems w/ pulseaudio 0.9.9 atm: # 1.) needs libltdl >= 1.5.24 (yes, any older version will NOT work at runtime) # 2.) doesn't build w/ glibc TLS support (hence patched out) -# 3.) hangs, if used with gst-pulse 0.9.7, fails with hierarchical pthread stuff -DEFAULT_PREFERENCE = "-1" - +# 3.) fails with hierarchical pthread stuff w/ gst-pulse (hence patched out) -- cgit v1.2.3 From 094aa0b6c929924c7cf0915c5d2cfc1234adb73b Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sun, 17 Feb 2008 18:19:21 +0000 Subject: gst-plug-pulse 0.9.7 new default version --- packages/gstreamer/gst-plugin-pulse_0.9.7.bb | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/gstreamer/gst-plugin-pulse_0.9.7.bb b/packages/gstreamer/gst-plugin-pulse_0.9.7.bb index 5a83f3915b..8351856143 100644 --- a/packages/gstreamer/gst-plugin-pulse_0.9.7.bb +++ b/packages/gstreamer/gst-plugin-pulse_0.9.7.bb @@ -4,8 +4,6 @@ LICENSE = "GPL" DEPENDS = "gstreamer pulseaudio" PR = "r1" -DEFAULT_PREFERENCE = "-1" - SRC_URI = "http://0pointer.de/lennart/projects/gst-pulse/gst-pulse-${PV}.tar.gz \ file://dont-overload-pulseaudio.patch;patch=1" S = "${WORKDIR}/gst-pulse-${PV}" -- cgit v1.2.3 From 55f1bbed28e78a1f327b5ac198a0e54d02263890 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sun, 17 Feb 2008 18:20:56 +0000 Subject: sane-srvrevs.inc: bump gsm0710muxd to r77 --- 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 4d92f48928..755b874083 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -26,7 +26,7 @@ SRCREV_pn-fstests ?= "204" SRCREV_pn-gconf-dbus ?= "641" SRCREV_pn-gnuradio ?= "6377" SRCREV_pn-gpe-contacts ?= "9312" -SRCREV_pn-gsm0710muxd ?= "73" +SRCREV_pn-gsm0710muxd ?= "77" SRCREV_pn-gtkhtml2 ?= "1158" SRCREV_pn-gypsy ?= "56" SRCREV_pn-hildon-1 ?= "14429" -- cgit v1.2.3 From bfcee58f3400d1fed759a65117ddbde78fca768f Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 17 Feb 2008 20:47:10 +0000 Subject: wxbase: consolidate into wxwidgets project directory. --- packages/wxbase/.mtn2git_empty | 0 packages/wxbase/wxbase_2.6.2.bb | 54 ------------------------------------ packages/wxbase/wxbase_2.7+cvs.bb | 53 ----------------------------------- packages/wxwidgets/wxbase_2.6.2.bb | 54 ++++++++++++++++++++++++++++++++++++ packages/wxwidgets/wxbase_2.7+cvs.bb | 53 +++++++++++++++++++++++++++++++++++ 5 files changed, 107 insertions(+), 107 deletions(-) delete mode 100644 packages/wxbase/.mtn2git_empty delete mode 100644 packages/wxbase/wxbase_2.6.2.bb delete mode 100644 packages/wxbase/wxbase_2.7+cvs.bb create mode 100644 packages/wxwidgets/wxbase_2.6.2.bb create mode 100644 packages/wxwidgets/wxbase_2.7+cvs.bb diff --git a/packages/wxbase/.mtn2git_empty b/packages/wxbase/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/wxbase/wxbase_2.6.2.bb b/packages/wxbase/wxbase_2.6.2.bb deleted file mode 100644 index 07d9199ae1..0000000000 --- a/packages/wxbase/wxbase_2.6.2.bb +++ /dev/null @@ -1,54 +0,0 @@ -DESCRIPTION = "wxBase is a library for programming \ -non-GUI (console) applications using the base wxWidgets functionality." -HOMEPAGE = "http://www.wxwidgets.org/" -LICENSE = "GPL" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "jpeg libpng zlib" - - -SRC_URI = "${SOURCEFORGE_MIRROR}/wxwindows/wxBase-${PV}.tar.bz2" - -S = "${WORKDIR}/wxBase-${PV}" - -inherit autotools pkgconfig - -EXTRA_OECONF = "--enable-largefile" - -LEAD_SONAME = "libwx_base-2.6.so*" - -do_configure() { - oe_runconf -} - -do_stage() { - install -d ${STAGING_INCDIR}/wx-2.6/wx - cp -pR include/wx ${STAGING_INCDIR}/wx-2.6 - cp -pR lib/libwx* ${STAGING_LIBDIR} - cp -pR lib/wx ${STAGING_LIBDIR} - cp -pR build/bakefiles/wxpresets/presets ${STAGING_DATADIR}/bakefile - cp -pR wxwin.m4 ${STAGING_DATADIR}/aclocal - ln -sf ${STAGING_LIBDIR}/wx/config/${TARGET_PREFIX}base-ansi-release-2.6 ${STAGING_BINDIR_CROSS}/wx-config - sed -e s,'wxconfdir=".*"','wxconfigdir="${STAGING_LIBDIR}/wx/config"', \ - -e s,'bindir=".*"','bindir="${STAGING_BINDIR}"', \ - -e s,'libdir=".*"','libdir="${STAGING_LIBDIR}"', \ - -e s,'includedir=".*"','includedir="${STAGING_INCDIR}"', \ - -i ${STAGING_LIBDIR}/wx/config/${TARGET_PREFIX}base-ansi-release-2.6 -} - -FILES_${PN} += " \ - ${libdir}/wx/config" - -FILES_${PN}-dev += " \ - ${libdir}/wx/include \ - ${datadir}/bakefile" - -do_install() { - oe_runmake 'DESTDIR=${D}' install - ln -sf ${libdir}/wx/config/${TARGET_PREFIX}base-ansi-release-2.6 ${D}${bindir}/wx-config - install -d ${D}${docdir}/${PN}-${PV} - install -m 644 -p CHANGES.txt ${D}${docdir}/${PN}-${PV} - install -m 644 -p COPYING.LIB ${D}${docdir}/${PN}-${PV} - install -m 644 -p LICENCE.txt ${D}${docdir}/${PN}-${PV} - install -m 644 -p README.txt ${D}${docdir}/${PN}-${PV} -} diff --git a/packages/wxbase/wxbase_2.7+cvs.bb b/packages/wxbase/wxbase_2.7+cvs.bb deleted file mode 100644 index 772ea4e27f..0000000000 --- a/packages/wxbase/wxbase_2.7+cvs.bb +++ /dev/null @@ -1,53 +0,0 @@ -DESCRIPTION = "wxBase is a library for programming \ -non-GUI (console) applications using the base wxWidgets functionality." -HOMEPAGE = "http://www.wxwidgets.org/" -LICENSE = "GPL" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "jpeg libpng zlib" - - -SRC_URI = "http://biolpc22.york.ac.uk/pub/CVS_HEAD/v1/wx-cvs-Gtk.tar.bz2" -#SRC_URI = "${SOURCEFORGE_MIRROR}/wxwindows/wxBase-${PV}.tar.bz2" - -S = "${WORKDIR}/wxGTK" - -inherit autotools pkgconfig - -EXTRA_OECONF = "--disable-gui --enable-largefile" - -LEAD_SONAME = "libwx_base-2.7*" - -do_configure() { - oe_runconf -} - -do_stage() { - install -d ${STAGING_INCDIR}/wx-2.7/wx - cp -pR include/wx ${STAGING_INCDIR}/wx-2.7 - cp -pR lib/libwx* ${STAGING_LIBDIR} - cp -pR lib/wx ${STAGING_LIBDIR} - cp -pR build/bakefiles/wxpresets/presets ${STAGING_DATADIR}/bakefile - cp -pR wxwin.m4 ${STAGING_DATADIR}/aclocal - ln -sf ${STAGING_LIBDIR}/wx/config/${TARGET_PREFIX}base-ansi-release-2.7 ${STAGING_BINDIR_CROSS}/wx-config - sed -e s,'wxconfdir=".*"','wxconfigdir="${STAGING_LIBDIR}/wx/config"', \ - -e s,'bindir=".*"','bindir="${STAGING_BINDIR}"', \ - -e s,'libdir=".*"','libdir="${STAGING_LIBDIR}"', \ - -e s,'includedir=".*"','includedir="${STAGING_INCDIR}"', \ - -i ${STAGING_LIBDIR}/wx/config/${TARGET_PREFIX}base-ansi-release-2.7 -} - -FILES_${PN} += " \ - ${libdir}/wx/config" - -FILES_${PN}-dev += " \ - ${libdir}/wx/include \ - ${datadir}/bakefile" - -do_install() { - oe_runmake 'DESTDIR=${D}' install - ln -sf ${libdir}/wx/config/${TARGET_PREFIX}base-ansi-release-2.7 ${D}${bindir}/wx-config - install -d ${D}${docdir}/${PN}-${PV} - install -m 644 -p docs/*.txt ${D}${docdir}/${PN}-${PV} - install -m 644 -p docs/*.htm ${D}${docdir}/${PN}-${PV} -} diff --git a/packages/wxwidgets/wxbase_2.6.2.bb b/packages/wxwidgets/wxbase_2.6.2.bb new file mode 100644 index 0000000000..07d9199ae1 --- /dev/null +++ b/packages/wxwidgets/wxbase_2.6.2.bb @@ -0,0 +1,54 @@ +DESCRIPTION = "wxBase is a library for programming \ +non-GUI (console) applications using the base wxWidgets functionality." +HOMEPAGE = "http://www.wxwidgets.org/" +LICENSE = "GPL" +SECTION = "libs" +PRIORITY = "optional" +DEPENDS = "jpeg libpng zlib" + + +SRC_URI = "${SOURCEFORGE_MIRROR}/wxwindows/wxBase-${PV}.tar.bz2" + +S = "${WORKDIR}/wxBase-${PV}" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--enable-largefile" + +LEAD_SONAME = "libwx_base-2.6.so*" + +do_configure() { + oe_runconf +} + +do_stage() { + install -d ${STAGING_INCDIR}/wx-2.6/wx + cp -pR include/wx ${STAGING_INCDIR}/wx-2.6 + cp -pR lib/libwx* ${STAGING_LIBDIR} + cp -pR lib/wx ${STAGING_LIBDIR} + cp -pR build/bakefiles/wxpresets/presets ${STAGING_DATADIR}/bakefile + cp -pR wxwin.m4 ${STAGING_DATADIR}/aclocal + ln -sf ${STAGING_LIBDIR}/wx/config/${TARGET_PREFIX}base-ansi-release-2.6 ${STAGING_BINDIR_CROSS}/wx-config + sed -e s,'wxconfdir=".*"','wxconfigdir="${STAGING_LIBDIR}/wx/config"', \ + -e s,'bindir=".*"','bindir="${STAGING_BINDIR}"', \ + -e s,'libdir=".*"','libdir="${STAGING_LIBDIR}"', \ + -e s,'includedir=".*"','includedir="${STAGING_INCDIR}"', \ + -i ${STAGING_LIBDIR}/wx/config/${TARGET_PREFIX}base-ansi-release-2.6 +} + +FILES_${PN} += " \ + ${libdir}/wx/config" + +FILES_${PN}-dev += " \ + ${libdir}/wx/include \ + ${datadir}/bakefile" + +do_install() { + oe_runmake 'DESTDIR=${D}' install + ln -sf ${libdir}/wx/config/${TARGET_PREFIX}base-ansi-release-2.6 ${D}${bindir}/wx-config + install -d ${D}${docdir}/${PN}-${PV} + install -m 644 -p CHANGES.txt ${D}${docdir}/${PN}-${PV} + install -m 644 -p COPYING.LIB ${D}${docdir}/${PN}-${PV} + install -m 644 -p LICENCE.txt ${D}${docdir}/${PN}-${PV} + install -m 644 -p README.txt ${D}${docdir}/${PN}-${PV} +} diff --git a/packages/wxwidgets/wxbase_2.7+cvs.bb b/packages/wxwidgets/wxbase_2.7+cvs.bb new file mode 100644 index 0000000000..772ea4e27f --- /dev/null +++ b/packages/wxwidgets/wxbase_2.7+cvs.bb @@ -0,0 +1,53 @@ +DESCRIPTION = "wxBase is a library for programming \ +non-GUI (console) applications using the base wxWidgets functionality." +HOMEPAGE = "http://www.wxwidgets.org/" +LICENSE = "GPL" +SECTION = "libs" +PRIORITY = "optional" +DEPENDS = "jpeg libpng zlib" + + +SRC_URI = "http://biolpc22.york.ac.uk/pub/CVS_HEAD/v1/wx-cvs-Gtk.tar.bz2" +#SRC_URI = "${SOURCEFORGE_MIRROR}/wxwindows/wxBase-${PV}.tar.bz2" + +S = "${WORKDIR}/wxGTK" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--disable-gui --enable-largefile" + +LEAD_SONAME = "libwx_base-2.7*" + +do_configure() { + oe_runconf +} + +do_stage() { + install -d ${STAGING_INCDIR}/wx-2.7/wx + cp -pR include/wx ${STAGING_INCDIR}/wx-2.7 + cp -pR lib/libwx* ${STAGING_LIBDIR} + cp -pR lib/wx ${STAGING_LIBDIR} + cp -pR build/bakefiles/wxpresets/presets ${STAGING_DATADIR}/bakefile + cp -pR wxwin.m4 ${STAGING_DATADIR}/aclocal + ln -sf ${STAGING_LIBDIR}/wx/config/${TARGET_PREFIX}base-ansi-release-2.7 ${STAGING_BINDIR_CROSS}/wx-config + sed -e s,'wxconfdir=".*"','wxconfigdir="${STAGING_LIBDIR}/wx/config"', \ + -e s,'bindir=".*"','bindir="${STAGING_BINDIR}"', \ + -e s,'libdir=".*"','libdir="${STAGING_LIBDIR}"', \ + -e s,'includedir=".*"','includedir="${STAGING_INCDIR}"', \ + -i ${STAGING_LIBDIR}/wx/config/${TARGET_PREFIX}base-ansi-release-2.7 +} + +FILES_${PN} += " \ + ${libdir}/wx/config" + +FILES_${PN}-dev += " \ + ${libdir}/wx/include \ + ${datadir}/bakefile" + +do_install() { + oe_runmake 'DESTDIR=${D}' install + ln -sf ${libdir}/wx/config/${TARGET_PREFIX}base-ansi-release-2.7 ${D}${bindir}/wx-config + install -d ${D}${docdir}/${PN}-${PV} + install -m 644 -p docs/*.txt ${D}${docdir}/${PN}-${PV} + install -m 644 -p docs/*.htm ${D}${docdir}/${PN}-${PV} +} -- cgit v1.2.3 From ec91747176dcfbb05f2a3e87100b67ecdd076013 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 17 Feb 2008 21:08:59 +0000 Subject: acpid: push gcc patch upstream and consolidate identical patches. --- packages/acpid/acpid-1.0.3/.mtn2git_empty | 0 packages/acpid/acpid-1.0.3/gcc40.patch | 13 ------------- packages/acpid/acpid-1.0.4/.mtn2git_empty | 0 packages/acpid/acpid-1.0.4/gcc40.patch | 13 ------------- packages/acpid/acpid/.mtn2git_empty | 0 packages/acpid/acpid/gcc40.patch | 15 +++++++++++++++ 6 files changed, 15 insertions(+), 26 deletions(-) delete mode 100644 packages/acpid/acpid-1.0.3/.mtn2git_empty delete mode 100644 packages/acpid/acpid-1.0.3/gcc40.patch delete mode 100644 packages/acpid/acpid-1.0.4/.mtn2git_empty delete mode 100644 packages/acpid/acpid-1.0.4/gcc40.patch create mode 100644 packages/acpid/acpid/.mtn2git_empty create mode 100644 packages/acpid/acpid/gcc40.patch diff --git a/packages/acpid/acpid-1.0.3/.mtn2git_empty b/packages/acpid/acpid-1.0.3/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/acpid/acpid-1.0.3/gcc40.patch b/packages/acpid/acpid-1.0.3/gcc40.patch deleted file mode 100644 index dbe090ba41..0000000000 --- a/packages/acpid/acpid-1.0.3/gcc40.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: acpid-1.0.3/ud_socket.c -=================================================================== ---- acpid-1.0.3.orig/ud_socket.c 2003-11-17 14:24:58.000000000 -0700 -+++ acpid-1.0.3/ud_socket.c 2005-06-27 14:44:17.785576106 -0700 -@@ -58,7 +58,7 @@ - while (1) { - int newsock = 0; - struct sockaddr_un cliaddr; -- int len = sizeof(struct sockaddr_un); -+ socklen_t len = sizeof(struct sockaddr_un); - - newsock = accept(listenfd, (struct sockaddr *)&cliaddr, &len); - if (newsock < 0) { diff --git a/packages/acpid/acpid-1.0.4/.mtn2git_empty b/packages/acpid/acpid-1.0.4/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/acpid/acpid-1.0.4/gcc40.patch b/packages/acpid/acpid-1.0.4/gcc40.patch deleted file mode 100644 index dbe090ba41..0000000000 --- a/packages/acpid/acpid-1.0.4/gcc40.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: acpid-1.0.3/ud_socket.c -=================================================================== ---- acpid-1.0.3.orig/ud_socket.c 2003-11-17 14:24:58.000000000 -0700 -+++ acpid-1.0.3/ud_socket.c 2005-06-27 14:44:17.785576106 -0700 -@@ -58,7 +58,7 @@ - while (1) { - int newsock = 0; - struct sockaddr_un cliaddr; -- int len = sizeof(struct sockaddr_un); -+ socklen_t len = sizeof(struct sockaddr_un); - - newsock = accept(listenfd, (struct sockaddr *)&cliaddr, &len); - if (newsock < 0) { diff --git a/packages/acpid/acpid/.mtn2git_empty b/packages/acpid/acpid/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/acpid/acpid/gcc40.patch b/packages/acpid/acpid/gcc40.patch new file mode 100644 index 0000000000..5320cee0bb --- /dev/null +++ b/packages/acpid/acpid/gcc40.patch @@ -0,0 +1,15 @@ +upstream: https://sourceforge.net/tracker/index.php?func=detail&aid=1895615&group_id=33140&atid=407341 + +Index: acpid-1.0.3/ud_socket.c +=================================================================== +--- acpid-1.0.3.orig/ud_socket.c 2003-11-17 14:24:58.000000000 -0700 ++++ acpid-1.0.3/ud_socket.c 2005-06-27 14:44:17.785576106 -0700 +@@ -58,7 +58,7 @@ + while (1) { + int newsock = 0; + struct sockaddr_un cliaddr; +- int len = sizeof(struct sockaddr_un); ++ socklen_t len = sizeof(struct sockaddr_un); + + newsock = accept(listenfd, (struct sockaddr *)&cliaddr, &len); + if (newsock < 0) { -- cgit v1.2.3 From fb4ada7351bbe36370505d8244c95f47614aa636 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 17 Feb 2008 21:19:59 +0000 Subject: packages/libmrss/files/better-parse-url-r0.patch: Document what's up with this patch, hopefully some one is sending it upstream --- packages/libmrss/files/better-parse-url-r0.patch | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/libmrss/files/better-parse-url-r0.patch b/packages/libmrss/files/better-parse-url-r0.patch index 94a78110a2..18a3ef56e2 100644 --- a/packages/libmrss/files/better-parse-url-r0.patch +++ b/packages/libmrss/files/better-parse-url-r0.patch @@ -1,3 +1,10 @@ +upstream: bakunin_at_autistici_dot_org +status: API addition not proposed upstream +comment: API addition to not manually setup the CURL connection and still +be able to get the transfered feed and save it to secondary storage. done +by zecke for the OpenMoko RSS reader. + + Index: libmrss-0.17.2/src/mrss.h =================================================================== --- libmrss-0.17.2.orig/src/mrss.h 2007-04-02 14:42:55.000000000 +0200 -- cgit v1.2.3 From 45bb225e01108328a5006ef0b8238e94737d4f66 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 17 Feb 2008 21:27:45 +0000 Subject: packages/glibc/zecke-sane-readelf.patch: This was needed because OSX has no readelf command by default and thread support of the compiler was misdetected to the missing readelf. --- packages/glibc/glibc-2.4/zecke-sane-readelf.patch | 5 +++++ packages/glibc/glibc-cvs-2.3.5/zecke-sane-readelf.patch | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/packages/glibc/glibc-2.4/zecke-sane-readelf.patch b/packages/glibc/glibc-2.4/zecke-sane-readelf.patch index 023b6a51bc..229db09fb3 100644 --- a/packages/glibc/glibc-2.4/zecke-sane-readelf.patch +++ b/packages/glibc/glibc-2.4/zecke-sane-readelf.patch @@ -1,3 +1,8 @@ +upstream: http://sources.redhat.com/bugzilla/show_bug.cgi?id=3004 +status: WONTFIX +comment: Use OEs version of the readelf version. There might be no +host system version (e.g. on OSX) or it is not multiarch. + Index: glibc-2.4/configure =================================================================== --- glibc-2.4.orig/configure 2006-03-06 12:18:56.000000000 +0100 diff --git a/packages/glibc/glibc-cvs-2.3.5/zecke-sane-readelf.patch b/packages/glibc/glibc-cvs-2.3.5/zecke-sane-readelf.patch index c57494f937..7dc699cfad 100644 --- a/packages/glibc/glibc-cvs-2.3.5/zecke-sane-readelf.patch +++ b/packages/glibc/glibc-cvs-2.3.5/zecke-sane-readelf.patch @@ -1,3 +1,8 @@ +upstream: http://sources.redhat.com/bugzilla/show_bug.cgi?id=3004 +status: WONTFIX +comment: Use OEs version of the readelf version. There might be no +host system version (e.g. on OSX) or it is not multiarch. + Index: glibc-2.3.2/configure =================================================================== --- glibc-2.3.2.orig/configure 2006-08-05 20:18:11.000000000 +0200 -- cgit v1.2.3 From 813b702be534bd460e69c32ac4671e8be7573204 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 17 Feb 2008 21:36:24 +0000 Subject: packages/gcc/gcc-4.2.1/zecke-no-host-includes.patch: Document this patch and explain why it is a hack --- packages/gcc/gcc-4.2.1/zecke-no-host-includes.patch | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/gcc/gcc-4.2.1/zecke-no-host-includes.patch b/packages/gcc/gcc-4.2.1/zecke-no-host-includes.patch index 6afb10d6ef..0b401defd8 100644 --- a/packages/gcc/gcc-4.2.1/zecke-no-host-includes.patch +++ b/packages/gcc/gcc-4.2.1/zecke-no-host-includes.patch @@ -1,3 +1,16 @@ +upstream: n/a +status: evil hack +comment: Including host system headers when cross compiling can lead to weird +issues, in the best case compile issues, in the worst case crashes. E.g. if you +are building a uclibc system, you certainly do not want glibc headers or OSX libc +headers to be picked up. To avoid that this patch is penetalizing certain common +Linux/Unix host directories. + +To send the patch upstream the evil paths should be specified by +a setting or command-line options. Until now this is a evil hack assuming +certain host system paths. E.g. /usr/local/ and other common paths should be +added. + Index: gcc-4.0.2/gcc/c-incpath.c =================================================================== --- gcc-4.0.2.orig/gcc/c-incpath.c 2005-01-23 16:05:27.000000000 +0100 -- cgit v1.2.3 From 1b1d31889caebc06e4a140011ee41db4b2f4c989 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 17 Feb 2008 21:37:25 +0000 Subject: packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch: When cross compiling we want to use gcc's cpp for the cross compiled headers --- packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch b/packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch index 42ec190600..921cab6e18 100644 --- a/packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch +++ b/packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch @@ -1,3 +1,7 @@ +upstream: n/a +comment: Use the preprocessor we have just compiled instead the one of +the system. There might be incompabilities between us and them. + Index: gcc-4.1.1/Makefile.in =================================================================== --- gcc-4.1.1.orig/Makefile.in 2006-08-06 13:32:44.000000000 +0200 -- cgit v1.2.3 From f759ed80ed16b61b1641bd1bbada501607b600a4 Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Sun, 17 Feb 2008 22:17:49 +0000 Subject: zaurus-2.6: add pcmcia modules for Poodle --- conf/machine/include/zaurus-2.6.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/include/zaurus-2.6.inc b/conf/machine/include/zaurus-2.6.inc index f6d1ec0d8e..9a4d373de0 100644 --- a/conf/machine/include/zaurus-2.6.inc +++ b/conf/machine/include/zaurus-2.6.inc @@ -31,7 +31,7 @@ MACHINE_EXTRA_RDEPENDS = "zaurusd" MACHINE_EXTRA_RRECOMMENDS_c7x0 = "kernel-module-snd-soc-corgi kernel-module-pxa2xx-cs kernel-module-pcmcia" MACHINE_EXTRA_RRECOMMENDS_akita = "kernel-module-snd-soc-spitz kernel-module-pxa2xx-cs kernel-module-pcmcia" MACHINE_EXTRA_RRECOMMENDS_spitz = "kernel-module-snd-soc-spitz" -MACHINE_EXTRA_RRECOMMENDS_poodle = "kernel-module-snd-soc-poodle" +MACHINE_EXTRA_RRECOMMENDS_poodle = "kernel-module-snd-soc-poodle kernel-module-pxa2xx-cs kernel-module-pcmcia" MACHINE_EXTRA_RRECOMMENDS_collie = "kernel-module-locomo-spi kernel-module-sa1100-cs kernel-module-mmc-block \ kernel-module-collie-ts kernel-module-leds-locomo kernel-module-locomokbd" -- cgit v1.2.3 From 442bbafc8dfde04b2c082cba2567aa016152ffa2 Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Sun, 17 Feb 2008 22:19:04 +0000 Subject: task-base: add crypto_algapi/cryptomgr for task-base-wifi --- packages/tasks/task-base.bb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/tasks/task-base.bb b/packages/tasks/task-base.bb index bb89ac0c2b..77aa07de00 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 = "r61" +PR = "r62" inherit task @@ -345,6 +345,8 @@ RRECOMMENDS_task-base-wifi = "\ kernel-module-ieee80211-crypt-wep \ kernel-module-ecb \ kernel-module-arc4 \ + kernel-module-crypto_algapi \ + kernel-module-cryptomgr \ kernel-module-michael-mic \ kernel-module-aes" -- cgit v1.2.3 From 6b2b68e32c0673c71d31aa40c063d4eb52de2452 Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Sun, 17 Feb 2008 22:20:29 +0000 Subject: linux-rp 2.6.24: remove repeated content from pxafb.patch --- packages/linux/linux-rp-2.6.24/pxafb.patch | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/packages/linux/linux-rp-2.6.24/pxafb.patch b/packages/linux/linux-rp-2.6.24/pxafb.patch index efcfb079b2..7fe693cd91 100644 --- a/packages/linux/linux-rp-2.6.24/pxafb.patch +++ b/packages/linux/linux-rp-2.6.24/pxafb.patch @@ -11,16 +11,3 @@ Index: linux-2.6.23/drivers/video/pxafb.c lccr3 = fbi->reg_lccr3; set_hsync_time(fbi, pcd); fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd); -Index: linux-2.6.23/drivers/video/pxafb.c -=================================================================== ---- linux-2.6.23.orig/drivers/video/pxafb.c 2008-01-25 16:25:21.000000000 -0800 -+++ linux-2.6.23/drivers/video/pxafb.c 2008-01-25 16:32:14.000000000 -0800 -@@ -1194,7 +1194,7 @@ - if ((clkinfo->old == 13000)) - break; - -- pcd = get_pcd(fbi->fb.var.pixclock); -+ pcd = get_pcd(fbi,fbi->fb.var.pixclock); - lccr3 = fbi->reg_lccr3; - set_hsync_time(fbi, pcd); - fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd); -- cgit v1.2.3 From b58a2b81ad312b1699f0cdbb6b8162ba91d21ead Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 17 Feb 2008 23:47:59 +0000 Subject: task-opie-all: drop opie-usermanager. Fixes bug 3311. --- packages/tasks/task-opie-all.bb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/tasks/task-opie-all.bb b/packages/tasks/task-opie-all.bb index 4666b4ab8d..5487985fd4 100644 --- a/packages/tasks/task-opie-all.bb +++ b/packages/tasks/task-opie-all.bb @@ -50,8 +50,7 @@ RDEPENDS_task-opie-settings = "opie-appearance opie-aqpkg opie-backup opie-butto opie-formatter opie-language opie-launcher-settings \ opie-light-and-power opie-mediummount opie-networksettings \ opie-packagemanager opie-security opie-sshkeys opie-sysinfo \ - opie-systemtime opie-usermanager opie-icon-reload \ - opie-vmemo-settings" + opie-systemtime opie-icon-reload opie-vmemo-settings" RDEPENDS_task-opie-pim = "task-opie-base-pim task-opie-todayplugins task-opie-datebookplugins \ opie-mail opie-pimconverter" -- cgit v1.2.3 From 701691dd6d5b1a6c129c455730026ee726d16508 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 17 Feb 2008 23:57:48 +0000 Subject: libmrss: document better-parse-url-r0.patch being sent upstream. --- packages/libmrss/files/better-parse-url-r0.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/libmrss/files/better-parse-url-r0.patch b/packages/libmrss/files/better-parse-url-r0.patch index 18a3ef56e2..72fa3688a7 100644 --- a/packages/libmrss/files/better-parse-url-r0.patch +++ b/packages/libmrss/files/better-parse-url-r0.patch @@ -1,5 +1,5 @@ -upstream: bakunin_at_autistici_dot_org -status: API addition not proposed upstream +upstream: mailed to bakunin_at_autistici_dot_org by Laibsch +status: pending comment: API addition to not manually setup the CURL connection and still be able to get the transfered feed and save it to secondary storage. done by zecke for the OpenMoko RSS reader. -- cgit v1.2.3 From 632f5de2cc8377e4856c5062f3c7c863b090766e Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 00:25:58 +0000 Subject: gcc: add upstream comments to three more, otherwise identical patches. * complimentary to 4b9bf269fccb2d8469b9d1ccfe6d73ac060a6b29 * "upstream: n/a" should really have a more verbose explanation is it a hack, is upstream being a d0rk, did you try but failed? --- packages/gcc/gcc-4.1.1/zecke-xgcc-cpp.patch | 4 ++++ packages/gcc/gcc-4.1.2/zecke-xgcc-cpp.patch | 4 ++++ packages/gcc/gcc-4.2.2/zecke-xgcc-cpp.patch | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/packages/gcc/gcc-4.1.1/zecke-xgcc-cpp.patch b/packages/gcc/gcc-4.1.1/zecke-xgcc-cpp.patch index 42ec190600..921cab6e18 100644 --- a/packages/gcc/gcc-4.1.1/zecke-xgcc-cpp.patch +++ b/packages/gcc/gcc-4.1.1/zecke-xgcc-cpp.patch @@ -1,3 +1,7 @@ +upstream: n/a +comment: Use the preprocessor we have just compiled instead the one of +the system. There might be incompabilities between us and them. + Index: gcc-4.1.1/Makefile.in =================================================================== --- gcc-4.1.1.orig/Makefile.in 2006-08-06 13:32:44.000000000 +0200 diff --git a/packages/gcc/gcc-4.1.2/zecke-xgcc-cpp.patch b/packages/gcc/gcc-4.1.2/zecke-xgcc-cpp.patch index 42ec190600..921cab6e18 100644 --- a/packages/gcc/gcc-4.1.2/zecke-xgcc-cpp.patch +++ b/packages/gcc/gcc-4.1.2/zecke-xgcc-cpp.patch @@ -1,3 +1,7 @@ +upstream: n/a +comment: Use the preprocessor we have just compiled instead the one of +the system. There might be incompabilities between us and them. + Index: gcc-4.1.1/Makefile.in =================================================================== --- gcc-4.1.1.orig/Makefile.in 2006-08-06 13:32:44.000000000 +0200 diff --git a/packages/gcc/gcc-4.2.2/zecke-xgcc-cpp.patch b/packages/gcc/gcc-4.2.2/zecke-xgcc-cpp.patch index 42ec190600..921cab6e18 100644 --- a/packages/gcc/gcc-4.2.2/zecke-xgcc-cpp.patch +++ b/packages/gcc/gcc-4.2.2/zecke-xgcc-cpp.patch @@ -1,3 +1,7 @@ +upstream: n/a +comment: Use the preprocessor we have just compiled instead the one of +the system. There might be incompabilities between us and them. + Index: gcc-4.1.1/Makefile.in =================================================================== --- gcc-4.1.1.orig/Makefile.in 2006-08-06 13:32:44.000000000 +0200 -- cgit v1.2.3 From c0cb44d08ae453391b643b3e458a349dc00b5a51 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 00:40:37 +0000 Subject: tshark: initial commit of tshark, the text-based version of wireshark. closes 2283. * the latest version 0.99.7 fails do_patch, so I left everything at 0.99.4 --- packages/wireshark/tshark_0.99.4.bb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 packages/wireshark/tshark_0.99.4.bb diff --git a/packages/wireshark/tshark_0.99.4.bb b/packages/wireshark/tshark_0.99.4.bb new file mode 100644 index 0000000000..4f8f6781bf --- /dev/null +++ b/packages/wireshark/tshark_0.99.4.bb @@ -0,0 +1,21 @@ +DESCRIPTION = "tshark is the text based verion of wireshark - a popular network protocol analyzer" +HOMEPAGE = "http://www.ethereal.com" +SECTION = "network" +LICENSE = "GPL" +DEPENDS = "perl-native gnutls libpcap pcre expat" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ + file://use-our-lemon.patch;patch=1 \ + file://no-host-includes.patch;patch=1" + +S=${WORKDIR}/wireshark-${PV} + +inherit autotools + +EXTRA_OECONF = "--disable-wireshark" + +do_compile_prepend() { + ${BUILD_CC} ${BUILD_CFLAGS} -o rdps rdps.c + oe_runmake -C tools/lemon CC="${BUILD_CC} ${BUILD_CFLAGS}" LDFLAGS="${BUILD_LDFLAGS}" +} + -- cgit v1.2.3 From 260ca99bdd4b18f0575af0ef9cc063aec09dc367 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 01:22:55 +0000 Subject: djvulibre: replace QTDIR with PALMTOPDIR to enable successful compilation. closes 3044. * use sourceforge mirror * reorder fields according to style guide --- packages/djvulibre/djvulibre_3.5.19.bb | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/djvulibre/djvulibre_3.5.19.bb b/packages/djvulibre/djvulibre_3.5.19.bb index 5ba5751f2d..8a90efe85c 100644 --- a/packages/djvulibre/djvulibre_3.5.19.bb +++ b/packages/djvulibre/djvulibre_3.5.19.bb @@ -1,27 +1,23 @@ DESCRIPTION = "DjVuLibre is an open source (GPL'ed) implementation of DjVu, including viewers, browser plugins, decoders, simple encoders, and utilities." LICENSE = "GPL" - DEPENDS = "jpeg libpng tiff" +PR = "r1" -SRC_URI = "http://downloads.sourceforge.net/djvu/djvulibre-${PV}.tar.gz \ +SRC_URI = "http://{SOURCEFORGE_MIRROR}/djvu/djvulibre-${PV}.tar.gz \ file://fix-cross-configure.patch;patch=1" - inherit qt4x11 autotools pkgconfig #export QT_LIBS = "${OE_QMAKE_LIBS_QT}" #export QT_CFLAGS = "${OE_QMAKE_CXXFLAGS} -I${QTDIR}/include/Qt/ " EXTRA_OECONF = " --enable-threads \ - --with-qt=${QTDIR} " - -PACKAGES =+ "libdjvulibre" - -FILES_libdjvulibre = "${libdir}/libdjvulibre.so.*" -FILES_${PN} += "${datadir}/djvu" + --with-qt=${PAMLTOPDIR} " do_stage() { autotools_stage_all } - +PACKAGES =+ "libdjvulibre" +FILES_libdjvulibre = "${libdir}/libdjvulibre.so.*" +FILES_${PN} += "${datadir}/djvu" -- cgit v1.2.3 From 8ae01e8bbfb6d2b2638eedbecda66b317f676395 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 01:28:04 +0000 Subject: djvulibre: update to version 3.5.20. --- packages/djvulibre/djvulibre_3.5.19.bb | 23 ----------------------- packages/djvulibre/djvulibre_3.5.20.bb | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 23 deletions(-) delete mode 100644 packages/djvulibre/djvulibre_3.5.19.bb create mode 100644 packages/djvulibre/djvulibre_3.5.20.bb diff --git a/packages/djvulibre/djvulibre_3.5.19.bb b/packages/djvulibre/djvulibre_3.5.19.bb deleted file mode 100644 index 8a90efe85c..0000000000 --- a/packages/djvulibre/djvulibre_3.5.19.bb +++ /dev/null @@ -1,23 +0,0 @@ -DESCRIPTION = "DjVuLibre is an open source (GPL'ed) implementation of DjVu, including viewers, browser plugins, decoders, simple encoders, and utilities." -LICENSE = "GPL" -DEPENDS = "jpeg libpng tiff" -PR = "r1" - -SRC_URI = "http://{SOURCEFORGE_MIRROR}/djvu/djvulibre-${PV}.tar.gz \ - file://fix-cross-configure.patch;patch=1" - -inherit qt4x11 autotools pkgconfig - -#export QT_LIBS = "${OE_QMAKE_LIBS_QT}" -#export QT_CFLAGS = "${OE_QMAKE_CXXFLAGS} -I${QTDIR}/include/Qt/ " - -EXTRA_OECONF = " --enable-threads \ - --with-qt=${PAMLTOPDIR} " - -do_stage() { - autotools_stage_all -} - -PACKAGES =+ "libdjvulibre" -FILES_libdjvulibre = "${libdir}/libdjvulibre.so.*" -FILES_${PN} += "${datadir}/djvu" diff --git a/packages/djvulibre/djvulibre_3.5.20.bb b/packages/djvulibre/djvulibre_3.5.20.bb new file mode 100644 index 0000000000..8a90efe85c --- /dev/null +++ b/packages/djvulibre/djvulibre_3.5.20.bb @@ -0,0 +1,23 @@ +DESCRIPTION = "DjVuLibre is an open source (GPL'ed) implementation of DjVu, including viewers, browser plugins, decoders, simple encoders, and utilities." +LICENSE = "GPL" +DEPENDS = "jpeg libpng tiff" +PR = "r1" + +SRC_URI = "http://{SOURCEFORGE_MIRROR}/djvu/djvulibre-${PV}.tar.gz \ + file://fix-cross-configure.patch;patch=1" + +inherit qt4x11 autotools pkgconfig + +#export QT_LIBS = "${OE_QMAKE_LIBS_QT}" +#export QT_CFLAGS = "${OE_QMAKE_CXXFLAGS} -I${QTDIR}/include/Qt/ " + +EXTRA_OECONF = " --enable-threads \ + --with-qt=${PAMLTOPDIR} " + +do_stage() { + autotools_stage_all +} + +PACKAGES =+ "libdjvulibre" +FILES_libdjvulibre = "${libdir}/libdjvulibre.so.*" +FILES_${PN} += "${datadir}/djvu" -- cgit v1.2.3 From 2e5342507b4e589c1d3dcbffe8a8d2617326e979 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 02:11:37 +0000 Subject: qclockchange: update to version 0.1b. Closes 2653. --- packages/qclockchange/files/.mtn2git_empty | 0 packages/qclockchange/files/qclockchange.desktop | 6 ++++++ packages/qclockchange/files/qclockchange.png | Bin 0 -> 5472 bytes packages/qclockchange/qclockchange_0.1a.bb | 22 --------------------- packages/qclockchange/qclockchange_0.1b.bb | 24 +++++++++++++++++++++++ 5 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 packages/qclockchange/files/.mtn2git_empty create mode 100644 packages/qclockchange/files/qclockchange.desktop create mode 100644 packages/qclockchange/files/qclockchange.png delete mode 100644 packages/qclockchange/qclockchange_0.1a.bb create mode 100644 packages/qclockchange/qclockchange_0.1b.bb diff --git a/packages/qclockchange/files/.mtn2git_empty b/packages/qclockchange/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/qclockchange/files/qclockchange.desktop b/packages/qclockchange/files/qclockchange.desktop new file mode 100644 index 0000000000..9463623883 --- /dev/null +++ b/packages/qclockchange/files/qclockchange.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Comment= Changes the CPU frequency +Exec=qclockchange +Icon=qclockchange +Type=Application +Name=Qclockchange diff --git a/packages/qclockchange/files/qclockchange.png b/packages/qclockchange/files/qclockchange.png new file mode 100644 index 0000000000..861fe2eecc Binary files /dev/null and b/packages/qclockchange/files/qclockchange.png differ diff --git a/packages/qclockchange/qclockchange_0.1a.bb b/packages/qclockchange/qclockchange_0.1a.bb deleted file mode 100644 index 0061c830c9..0000000000 --- a/packages/qclockchange/qclockchange_0.1a.bb +++ /dev/null @@ -1,22 +0,0 @@ -DESCRIPTION = "Program that allows you to set the CCCR registers on PXA Zauruses." -SECTION = "opie/settings" -PRIORITY = "optional" -LICENSE = "GPL" -AUTHOR = "piro " -HOMEPAGE = "http://www.piro.hopto.org/~piro/pukiwiki/pukiwiki.php?%5B%5B%A5%AB%A1%BC%A5%CD%A5%EB%A5%D1%A5%C3%A5%C1%A4%F2%A4%DE%A4%C8%A4%E1%A4%EB%5D%5D" -APPTYPE="binary" -PR = "r1" - -SRC_URI = "http://www.piro.hopto.org/~piro/zaurus/qclockchange-${PV}.tar.gz" - -inherit palmtop - -do_install() { - install -d ${D}${palmtopdir}/bin/ \ - ${D}${palmtopdir}/pics \ - ${D}${palmtopdir}/apps/Settings - - install -m 0755 qclockchange ${D}${palmtopdir}/bin/qclockchange - install -m 0644 ipkg/opt/QtPalmtop/pics/qclockchange.png ${D}${palmtopdir}/pics/qclockchange.png - install -m 0644 ipkg/opt/QtPalmtop/apps/Settings/qclockchange.desktop ${D}${palmtopdir}/apps/Settings/qclockchange.desktop -} diff --git a/packages/qclockchange/qclockchange_0.1b.bb b/packages/qclockchange/qclockchange_0.1b.bb new file mode 100644 index 0000000000..7980618f97 --- /dev/null +++ b/packages/qclockchange/qclockchange_0.1b.bb @@ -0,0 +1,24 @@ +DESCRIPTION = "Program that allows you to set the CCCR registers on PXA Zauruses." +SECTION = "opie/settings" +PRIORITY = "optional" +LICENSE = "GPL" +AUTHOR = "piro " +HOMEPAGE = "http://piro.sytes.net/~piro/zaurus/" +APPTYPE="binary" +PR = "r0" + +SRC_URI = "http://piro.sytes.net/~piro/zaurus/etc/qclockchange-${PV}.tar.gz \ + file://qclockchange.png \ + file://qclockchange.desktop " + +inherit palmtop + +do_install() { + install -d ${D}${palmtopdir}/bin/ \ + ${D}${palmtopdir}/pics \ + ${D}${palmtopdir}/apps/Settings + + install -m 0755 bin/qclockchange ${D}${palmtopdir}/bin/qclockchange + install -m 0644 ${WORKDIR}/qclockchange.png ${D}${palmtopdir}/pics/qclockchange.png + install -m 0644 ${WORKDIR}/qclockchange.desktop ${D}${palmtopdir}/apps/Settings/qclockchange.desktop +} -- cgit v1.2.3 From d49b83f25ab47fbcbc3281be6edf9f4e89bce85b Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 02:46:36 +0000 Subject: icewm: RRECOMENDS ttf-dejavu-sans to make sure some font is installed. partly closes 1506. * if there is a more general solution, let your voice be heard. --- packages/icewm/icewm_1.2.20.bb | 3 ++- packages/icewm/icewm_1.2.30.bb | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/icewm/icewm_1.2.20.bb b/packages/icewm/icewm_1.2.20.bb index b6a90a54a4..1567e985e2 100644 --- a/packages/icewm/icewm_1.2.20.bb +++ b/packages/icewm/icewm_1.2.20.bb @@ -2,7 +2,8 @@ SECTION = "x11/wm" DESCRIPTION = "IceWM Window Manager" LICENSE = "GPL" DEPENDS = "virtual/libx11 libxext libxcomposite libxfixes libxdamage libxrender libxinerama libxpm xrandr xft mkfontdir-native" -PR = "r1" +RRECOMMENDS = "ttf-dejavu-sans" +PR = "r2" SRC_URI = "${SOURCEFORGE_MIRROR}/icewm/icewm-${PV}.tar.gz \ file://makefile.patch;patch=1 \ diff --git a/packages/icewm/icewm_1.2.30.bb b/packages/icewm/icewm_1.2.30.bb index 4e7b7125ec..3dfffb1ae8 100644 --- a/packages/icewm/icewm_1.2.30.bb +++ b/packages/icewm/icewm_1.2.30.bb @@ -2,7 +2,8 @@ SECTION = "x11/wm" DESCRIPTION = "IceWM Window Manager" LICENSE = "GPL" DEPENDS = "virtual/libx11 libxext libxcomposite libxfixes libxdamage libxrender libxinerama libxpm xrandr xft mkfontdir-native" -PR = "r0" +RRECOMMENDS = "ttf-dejavu-sans" +PR = "r1" SRC_URI = "${SOURCEFORGE_MIRROR}/icewm/icewm-${PV}.tar.gz \ file://makefile.patch;patch=1 \ -- cgit v1.2.3 From 98a496542c02d7775a6fb5ec45851d3bc5009f2e Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 02:55:49 +0000 Subject: gnome-doc-utils: add libxslt-native to DEPENDS and reorder some fields according to StyleGuide --- packages/gnome/gnome-doc-utils_0.10.3.bb | 6 +++--- packages/gnome/gnome-doc-utils_0.12.0.bb | 8 ++++---- packages/gnome/gnome-doc-utils_0.7.1.bb | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/gnome/gnome-doc-utils_0.10.3.bb b/packages/gnome/gnome-doc-utils_0.10.3.bb index 315cdbd160..c5390128cf 100644 --- a/packages/gnome/gnome-doc-utils_0.10.3.bb +++ b/packages/gnome/gnome-doc-utils_0.10.3.bb @@ -1,5 +1,5 @@ LICENSE = "GPL LGPL" -DEPENDS = "libxml2 libxslt" +DEPENDS = "libxml2 libxslt libxslt-native" PR = "r0" @@ -7,10 +7,10 @@ inherit gnome EXTRA_OECONF = "--disable-scrollkeeper" -FILES_${PN} += "${datadir}/xml*" - do_stage() { mkdir -p ${STAGING_DATADIR}/xml/gnome/xslt/ cp -pPr ${S}/xslt/* ${STAGING_DATADIR}/xml/gnome/xslt/ autotools_stage_all } + +FILES_${PN} += "${datadir}/xml*" diff --git a/packages/gnome/gnome-doc-utils_0.12.0.bb b/packages/gnome/gnome-doc-utils_0.12.0.bb index f190a5ae13..ff62257aa8 100644 --- a/packages/gnome/gnome-doc-utils_0.12.0.bb +++ b/packages/gnome/gnome-doc-utils_0.12.0.bb @@ -1,5 +1,5 @@ -LICENSE = "GPL/LGPL" -DEPENDS = "libxml2 libxslt" +LICENSE = "GPL LGPL" +DEPENDS = "libxml2 libxslt libxslt-native" PR = "r1" @@ -7,10 +7,10 @@ inherit gnome EXTRA_OECONF = "--disable-scrollkeeper" -FILES_${PN} += "${datadir}/xml*" - do_stage() { mkdir -p ${STAGING_DATADIR}/xml/gnome/xslt/ cp -pPr ${S}/xslt/* ${STAGING_DATADIR}/xml/gnome/xslt/ autotools_stage_all } + +FILES_${PN} += "${datadir}/xml*" diff --git a/packages/gnome/gnome-doc-utils_0.7.1.bb b/packages/gnome/gnome-doc-utils_0.7.1.bb index 86a36c4bd7..ff62257aa8 100644 --- a/packages/gnome/gnome-doc-utils_0.7.1.bb +++ b/packages/gnome/gnome-doc-utils_0.7.1.bb @@ -1,5 +1,5 @@ LICENSE = "GPL LGPL" -DEPENDS = "libxml2 libxslt" +DEPENDS = "libxml2 libxslt libxslt-native" PR = "r1" @@ -7,10 +7,10 @@ inherit gnome EXTRA_OECONF = "--disable-scrollkeeper" -FILES_${PN} += "${datadir}/xml*" - do_stage() { mkdir -p ${STAGING_DATADIR}/xml/gnome/xslt/ cp -pPr ${S}/xslt/* ${STAGING_DATADIR}/xml/gnome/xslt/ autotools_stage_all } + +FILES_${PN} += "${datadir}/xml*" -- cgit v1.2.3 From 0066592ec6273dfe870fa877ca315ba45e636da2 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 03:00:16 +0000 Subject: gnome-doc-utils: unify --- packages/gnome/gnome-doc-utils.inc | 16 ++++++++++++++++ packages/gnome/gnome-doc-utils_0.10.3.bb | 15 +-------------- packages/gnome/gnome-doc-utils_0.12.0.bb | 15 +-------------- packages/gnome/gnome-doc-utils_0.7.1.bb | 15 +-------------- 4 files changed, 19 insertions(+), 42 deletions(-) create mode 100644 packages/gnome/gnome-doc-utils.inc diff --git a/packages/gnome/gnome-doc-utils.inc b/packages/gnome/gnome-doc-utils.inc new file mode 100644 index 0000000000..ff62257aa8 --- /dev/null +++ b/packages/gnome/gnome-doc-utils.inc @@ -0,0 +1,16 @@ +LICENSE = "GPL LGPL" +DEPENDS = "libxml2 libxslt libxslt-native" + +PR = "r1" + +inherit gnome + +EXTRA_OECONF = "--disable-scrollkeeper" + +do_stage() { + mkdir -p ${STAGING_DATADIR}/xml/gnome/xslt/ + cp -pPr ${S}/xslt/* ${STAGING_DATADIR}/xml/gnome/xslt/ + autotools_stage_all +} + +FILES_${PN} += "${datadir}/xml*" diff --git a/packages/gnome/gnome-doc-utils_0.10.3.bb b/packages/gnome/gnome-doc-utils_0.10.3.bb index c5390128cf..cfb4788076 100644 --- a/packages/gnome/gnome-doc-utils_0.10.3.bb +++ b/packages/gnome/gnome-doc-utils_0.10.3.bb @@ -1,16 +1,3 @@ -LICENSE = "GPL LGPL" -DEPENDS = "libxml2 libxslt libxslt-native" +require gnome-doc-utils.inc PR = "r0" - -inherit gnome - -EXTRA_OECONF = "--disable-scrollkeeper" - -do_stage() { - mkdir -p ${STAGING_DATADIR}/xml/gnome/xslt/ - cp -pPr ${S}/xslt/* ${STAGING_DATADIR}/xml/gnome/xslt/ - autotools_stage_all -} - -FILES_${PN} += "${datadir}/xml*" diff --git a/packages/gnome/gnome-doc-utils_0.12.0.bb b/packages/gnome/gnome-doc-utils_0.12.0.bb index ff62257aa8..2499ac36e4 100644 --- a/packages/gnome/gnome-doc-utils_0.12.0.bb +++ b/packages/gnome/gnome-doc-utils_0.12.0.bb @@ -1,16 +1,3 @@ -LICENSE = "GPL LGPL" -DEPENDS = "libxml2 libxslt libxslt-native" +require gnome-doc-utils.inc PR = "r1" - -inherit gnome - -EXTRA_OECONF = "--disable-scrollkeeper" - -do_stage() { - mkdir -p ${STAGING_DATADIR}/xml/gnome/xslt/ - cp -pPr ${S}/xslt/* ${STAGING_DATADIR}/xml/gnome/xslt/ - autotools_stage_all -} - -FILES_${PN} += "${datadir}/xml*" diff --git a/packages/gnome/gnome-doc-utils_0.7.1.bb b/packages/gnome/gnome-doc-utils_0.7.1.bb index ff62257aa8..2499ac36e4 100644 --- a/packages/gnome/gnome-doc-utils_0.7.1.bb +++ b/packages/gnome/gnome-doc-utils_0.7.1.bb @@ -1,16 +1,3 @@ -LICENSE = "GPL LGPL" -DEPENDS = "libxml2 libxslt libxslt-native" +require gnome-doc-utils.inc PR = "r1" - -inherit gnome - -EXTRA_OECONF = "--disable-scrollkeeper" - -do_stage() { - mkdir -p ${STAGING_DATADIR}/xml/gnome/xslt/ - cp -pPr ${S}/xslt/* ${STAGING_DATADIR}/xml/gnome/xslt/ - autotools_stage_all -} - -FILES_${PN} += "${datadir}/xml*" -- cgit v1.2.3 From 0c576349f827441d562ac51bc4f1d5258e49a002 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 03:28:52 +0000 Subject: gnome-desktop: unify --- packages/gnome/gnome-desktop.inc | 16 ++++++++++++++++ packages/gnome/gnome-desktop_2.10.2.bb | 16 +++------------- packages/gnome/gnome-desktop_2.16.1.bb | 20 +++----------------- packages/gnome/gnome-desktop_2.18.3.bb | 21 ++++----------------- packages/gnome/gnome-desktop_2.7.90.bb | 13 ++++--------- 5 files changed, 30 insertions(+), 56 deletions(-) create mode 100644 packages/gnome/gnome-desktop.inc diff --git a/packages/gnome/gnome-desktop.inc b/packages/gnome/gnome-desktop.inc new file mode 100644 index 0000000000..aeabf4f41e --- /dev/null +++ b/packages/gnome/gnome-desktop.inc @@ -0,0 +1,16 @@ +DESCRIPTION = "GNOME library for reading .desktop files" +SECTION = "x11/gnome" +LICENSE = "GPL" +DEPENDS = "gnome-common libgnomeui" + +EXTRA_OECONF = "--disable-scrollkeeper" + +do_configure_prepend () { + cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S} +} + +do_stage () { + autotools_stage_all +} + +FILES_${PN} += "${datadir}/gnome-about" diff --git a/packages/gnome/gnome-desktop_2.10.2.bb b/packages/gnome/gnome-desktop_2.10.2.bb index b8e098f40c..55add53cce 100644 --- a/packages/gnome/gnome-desktop_2.10.2.bb +++ b/packages/gnome/gnome-desktop_2.10.2.bb @@ -1,17 +1,7 @@ -LICENSE = "GPL" -SECTION = "x11/gnome" +require gnome-desktop.inc + PR = "r1" -DESCRIPTION = "GNOME library for reading .desktop files" -inherit gnome pkgconfig -DEPENDS = "gnome-common libgnomeui" +inherit gnome pkgconfig EXTRA_AUTORECONF = "-I ${STAGING_DATADIR}/aclocal/gnome2-macros" - -do_configure_prepend () { - cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S} -} - -do_stage () { -autotools_stage_all -} diff --git a/packages/gnome/gnome-desktop_2.16.1.bb b/packages/gnome/gnome-desktop_2.16.1.bb index 69de709350..292984ab7d 100644 --- a/packages/gnome/gnome-desktop_2.16.1.bb +++ b/packages/gnome/gnome-desktop_2.16.1.bb @@ -1,25 +1,11 @@ -LICENSE = "GPL" -SECTION = "x11/gnome" +require gnome-desktop.inc + PR = "r2" -DESCRIPTION = "GNOME library for reading .desktop files" inherit gnome pkgconfig -DEPENDS = "gnome-common gnome-doc-utils libgnomeui" +DEPENDS += "gnome-doc-utils" SRC_URI += "file://scrollkeeper.patch;patch=1 \ file://no-desktop-docs.patch;patch=1;pnum=0" -EXTRA_OECONF = "--disable-scrollkeeper" - EXTRA_AUTORECONF = "-I ${STAGING_DATADIR}/aclocal/gnome2-macros" - -do_configure_prepend () { - cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S} -} - -FILES_${PN} += "${datadir}/gnome-about" - - -do_stage () { - autotools_stage_all -} diff --git a/packages/gnome/gnome-desktop_2.18.3.bb b/packages/gnome/gnome-desktop_2.18.3.bb index c2888bf2a4..7b9a5932e1 100644 --- a/packages/gnome/gnome-desktop_2.18.3.bb +++ b/packages/gnome/gnome-desktop_2.18.3.bb @@ -1,23 +1,10 @@ -LICENSE = "GPL" -SECTION = "x11/gnome" +require gnome-desktop.inc + PR = "r2" -DESCRIPTION = "GNOME library for reading .desktop files" + inherit gnome pkgconfig -DEPENDS = "gnome-common gnome-doc-utils gnome-vfs libgnomeui" +DEPENDS += "gnome-doc-utils gnome-vfs" SRC_URI += "file://scrollkeeper.patch;patch=1 \ file://no-desktop-docs.patch;patch=1;pnum=0" - -EXTRA_OECONF = "--disable-scrollkeeper" - -do_configure_prepend () { - cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S} -} - -FILES_${PN} += "${datadir}/gnome-about" - - -do_stage () { - autotools_stage_all -} diff --git a/packages/gnome/gnome-desktop_2.7.90.bb b/packages/gnome/gnome-desktop_2.7.90.bb index c7fd61470d..53b70245ca 100644 --- a/packages/gnome/gnome-desktop_2.7.90.bb +++ b/packages/gnome/gnome-desktop_2.7.90.bb @@ -1,17 +1,12 @@ -LICENSE = "GPL" -SECTION = "x11/gnome" +require gnome-desktop.inc + PR = "r0" -DESCRIPTION = "GNOME library for reading .desktop files" -inherit gnome -DEPENDS = "gnome-common libgnomeui" +inherit gnome +EXTRA_OECONF = "" EXTRA_AUTORECONF = "-I ${STAGING_DATADIR}/aclocal/gnome2-macros" -do_configure_prepend () { - cp ${STAGING_DATADIR}/gnome-common/data/omf.make ${S} -} - do_stage () { install -d ${STAGING_INCDIR}/gnome-desktop-2.0/libgnome/ # install -d ${STAGING_INCDIR}/gnome-desktop-2.0/libgnomeui/ -- cgit v1.2.3 From ad1e99f5dcbcb0860b17a53a93e4d9ee82737497 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 03:46:12 +0000 Subject: tshark: fix SRC_URI --- packages/wireshark/tshark_0.99.4.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wireshark/tshark_0.99.4.bb b/packages/wireshark/tshark_0.99.4.bb index 4f8f6781bf..7338efdda7 100644 --- a/packages/wireshark/tshark_0.99.4.bb +++ b/packages/wireshark/tshark_0.99.4.bb @@ -4,7 +4,7 @@ SECTION = "network" LICENSE = "GPL" DEPENDS = "perl-native gnutls libpcap pcre expat" -SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ +SRC_URI = "${SOURCEFORGE_MIRROR}/wireshark/wireshark-${PV}.tar.bz2 \ file://use-our-lemon.patch;patch=1 \ file://no-host-includes.patch;patch=1" -- cgit v1.2.3 From 03b5351cd7dc2bc54de804036ba8d5aa542828a3 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 04:12:46 +0000 Subject: gnome-desktop: remove EXTRA_AUTORECONF from 2.10 and 2.16 recipe * same thing that got 2.18 version to compile in 4f51dba47b3fab8347a4183dda20e0be798b3928 * version 2.7.90 still does not compile successfully, leaving unchanged --- packages/gnome/gnome-desktop_2.10.2.bb | 2 -- packages/gnome/gnome-desktop_2.16.1.bb | 2 -- 2 files changed, 4 deletions(-) diff --git a/packages/gnome/gnome-desktop_2.10.2.bb b/packages/gnome/gnome-desktop_2.10.2.bb index 55add53cce..2bf249ddb6 100644 --- a/packages/gnome/gnome-desktop_2.10.2.bb +++ b/packages/gnome/gnome-desktop_2.10.2.bb @@ -3,5 +3,3 @@ require gnome-desktop.inc PR = "r1" inherit gnome pkgconfig - -EXTRA_AUTORECONF = "-I ${STAGING_DATADIR}/aclocal/gnome2-macros" diff --git a/packages/gnome/gnome-desktop_2.16.1.bb b/packages/gnome/gnome-desktop_2.16.1.bb index 292984ab7d..fb45b134ae 100644 --- a/packages/gnome/gnome-desktop_2.16.1.bb +++ b/packages/gnome/gnome-desktop_2.16.1.bb @@ -7,5 +7,3 @@ DEPENDS += "gnome-doc-utils" SRC_URI += "file://scrollkeeper.patch;patch=1 \ file://no-desktop-docs.patch;patch=1;pnum=0" - -EXTRA_AUTORECONF = "-I ${STAGING_DATADIR}/aclocal/gnome2-macros" -- cgit v1.2.3 From 9efa32537d850d8283f44a728577d043bf7b2a98 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 04:17:19 +0000 Subject: sqlite3: drop a bunch of patches from version specific directories that are also available from sqlite3/ dir. --- packages/sqlite/sqlite3-3.2.2/libtool.patch | 25 ------ packages/sqlite/sqlite3-3.2.5/libtool.patch | 25 ------ packages/sqlite/sqlite3-3.2.7/libtool.patch | 25 ------ packages/sqlite/sqlite3-3.3.12/cross-compile.patch | 92 ---------------------- packages/sqlite/sqlite3-3.3.12/libtool.patch | 25 ------ packages/sqlite/sqlite3-3.3.13/cross-compile.patch | 92 ---------------------- packages/sqlite/sqlite3-3.3.13/libtool.patch | 25 ------ packages/sqlite/sqlite3-3.3.17/libtool.patch | 25 ------ packages/sqlite/sqlite3-3.4.1/libtool.patch | 25 ------ 9 files changed, 359 deletions(-) delete mode 100644 packages/sqlite/sqlite3-3.2.2/libtool.patch delete mode 100644 packages/sqlite/sqlite3-3.2.5/libtool.patch delete mode 100644 packages/sqlite/sqlite3-3.2.7/libtool.patch delete mode 100644 packages/sqlite/sqlite3-3.3.12/cross-compile.patch delete mode 100644 packages/sqlite/sqlite3-3.3.12/libtool.patch delete mode 100644 packages/sqlite/sqlite3-3.3.13/cross-compile.patch delete mode 100644 packages/sqlite/sqlite3-3.3.13/libtool.patch delete mode 100644 packages/sqlite/sqlite3-3.3.17/libtool.patch delete mode 100644 packages/sqlite/sqlite3-3.4.1/libtool.patch diff --git a/packages/sqlite/sqlite3-3.2.2/libtool.patch b/packages/sqlite/sqlite3-3.2.2/libtool.patch deleted file mode 100644 index ccf9993ed2..0000000000 --- a/packages/sqlite/sqlite3-3.2.2/libtool.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: sqlite-3.2.1/Makefile.in -=================================================================== ---- sqlite-3.2.1.orig/Makefile.in 2005-03-23 17:09:39.000000000 +0100 -+++ sqlite-3.2.1/Makefile.in 2005-04-25 23:11:20.000000000 +0200 -@@ -15,7 +15,10 @@ - # The toplevel directory of the source tree. This is the directory - # that contains this "Makefile.in" and the "configure.in" script. - # --TOP = @srcdir@ -+TOP = $(srcdir) -+srcdir = @srcdir@ -+top_srcdir = @top_srcdir@ -+top_builddir = . - - # C Compiler and options for use in building executables that - # will run on the platform that is doing the build. -@@ -96,7 +99,7 @@ - exec_prefix = @exec_prefix@ - libdir = @libdir@ - INSTALL = @INSTALL@ --LIBTOOL = ./libtool -+LIBTOOL = @LIBTOOL@ - ALLOWRELEASE = @ALLOWRELEASE@ - - # libtool compile/link/install diff --git a/packages/sqlite/sqlite3-3.2.5/libtool.patch b/packages/sqlite/sqlite3-3.2.5/libtool.patch deleted file mode 100644 index ccf9993ed2..0000000000 --- a/packages/sqlite/sqlite3-3.2.5/libtool.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: sqlite-3.2.1/Makefile.in -=================================================================== ---- sqlite-3.2.1.orig/Makefile.in 2005-03-23 17:09:39.000000000 +0100 -+++ sqlite-3.2.1/Makefile.in 2005-04-25 23:11:20.000000000 +0200 -@@ -15,7 +15,10 @@ - # The toplevel directory of the source tree. This is the directory - # that contains this "Makefile.in" and the "configure.in" script. - # --TOP = @srcdir@ -+TOP = $(srcdir) -+srcdir = @srcdir@ -+top_srcdir = @top_srcdir@ -+top_builddir = . - - # C Compiler and options for use in building executables that - # will run on the platform that is doing the build. -@@ -96,7 +99,7 @@ - exec_prefix = @exec_prefix@ - libdir = @libdir@ - INSTALL = @INSTALL@ --LIBTOOL = ./libtool -+LIBTOOL = @LIBTOOL@ - ALLOWRELEASE = @ALLOWRELEASE@ - - # libtool compile/link/install diff --git a/packages/sqlite/sqlite3-3.2.7/libtool.patch b/packages/sqlite/sqlite3-3.2.7/libtool.patch deleted file mode 100644 index ccf9993ed2..0000000000 --- a/packages/sqlite/sqlite3-3.2.7/libtool.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: sqlite-3.2.1/Makefile.in -=================================================================== ---- sqlite-3.2.1.orig/Makefile.in 2005-03-23 17:09:39.000000000 +0100 -+++ sqlite-3.2.1/Makefile.in 2005-04-25 23:11:20.000000000 +0200 -@@ -15,7 +15,10 @@ - # The toplevel directory of the source tree. This is the directory - # that contains this "Makefile.in" and the "configure.in" script. - # --TOP = @srcdir@ -+TOP = $(srcdir) -+srcdir = @srcdir@ -+top_srcdir = @top_srcdir@ -+top_builddir = . - - # C Compiler and options for use in building executables that - # will run on the platform that is doing the build. -@@ -96,7 +99,7 @@ - exec_prefix = @exec_prefix@ - libdir = @libdir@ - INSTALL = @INSTALL@ --LIBTOOL = ./libtool -+LIBTOOL = @LIBTOOL@ - ALLOWRELEASE = @ALLOWRELEASE@ - - # libtool compile/link/install diff --git a/packages/sqlite/sqlite3-3.3.12/cross-compile.patch b/packages/sqlite/sqlite3-3.3.12/cross-compile.patch deleted file mode 100644 index 31d4f0d162..0000000000 --- a/packages/sqlite/sqlite3-3.3.12/cross-compile.patch +++ /dev/null @@ -1,92 +0,0 @@ ---- sqlite-3.3.7/configure.ac.orig 2006-08-21 00:20:50.000000000 +0200 -+++ sqlite-3.3.7/configure.ac 2006-08-21 00:22:35.000000000 +0200 -@@ -187,10 +187,11 @@ - default_build_cflags="-g" - if test "$config_BUILD_CC" = ""; then - AC_PROG_CC -- if test "$cross_compiling" = "yes"; then -- AC_MSG_ERROR([unable to find a compiler for building build tools]) -- fi -- BUILD_CC=$CC -+# if test "$cross_compiling" = "yes"; then -+# AC_MSG_ERROR([unable to find a compiler for building build tools]) -+# fi -+# BUILD_CC=$CC -+BUILD_CC=gcc - default_build_cflags=$CFLAGS - else - BUILD_CC=$config_BUILD_CC -@@ -238,6 +239,12 @@ - TARGET_LINK=$config_TARGET_LINK - fi - AC_MSG_RESULT($TARGET_LINK) -+if test "$config_TARGET_LFLAGS" != ""; then -+ TARGET_LFLAGS=$config_TARGET_LFLAGS -+ else -+ TARGET_LFLAGS=$BUILD_LFLAGS -+ fi -+AC_MSG_RESULT($TARGET_LFLAGS) - AC_MSG_CHECKING([switches on the target compiler]) - if test "$config_TARGET_TFLAGS" != ""; then - TARGET_TFLAGS=$config_TARGET_TFLAGS -@@ -592,15 +599,7 @@ - # Figure out what C libraries are required to compile programs - # that use "readline()" library. - # --if test "$config_TARGET_READLINE_LIBS" != ""; then -- TARGET_READLINE_LIBS="$config_TARGET_READLINE_LIBS" --else -- CC=$TARGET_CC -- LIBS="" -- AC_SEARCH_LIBS(tgetent, [readline ncurses curses termcap]) -- AC_CHECK_LIB([readline], [readline]) -- TARGET_READLINE_LIBS="$LIBS" --fi -+TARGET_READLINE_LIBS="-lreadline" - AC_SUBST(TARGET_READLINE_LIBS) - - ########## -@@ -615,41 +614,8 @@ - ########## - # Figure out where to get the READLINE header files. - # --AC_MSG_CHECKING([readline header files]) --found=no --if test "$config_TARGET_READLINE_INC" != ""; then -- TARGET_READLINE_INC=$config_TARGET_READLINE_INC -- found=yes --fi --if test "$found" = "yes"; then -- AC_MSG_RESULT($TARGET_READLINE_INC) --else -- AC_MSG_RESULT(not specified: still searching...) -- AC_CHECK_HEADER(readline.h, [found=yes]) --fi --if test "$found" = "no"; then -- for dir in /usr /usr/local /usr/local/readline /usr/contrib /mingw; do -- AC_CHECK_FILE($dir/include/readline.h, found=yes) -- if test "$found" = "yes"; then -- TARGET_READLINE_INC="-I$dir/include" -- break -- fi -- AC_CHECK_FILE($dir/include/readline/readline.h, found=yes) -- if test "$found" = "yes"; then -- TARGET_READLINE_INC="-I$dir/include/readline" -- break -- fi -- done --fi --if test "$found" = "yes"; then -- if test "$TARGET_READLINE_LIBS" = ""; then -- TARGET_HAVE_READLINE=0 -- else -- TARGET_HAVE_READLINE=1 -- fi --else -- TARGET_HAVE_READLINE=0 --fi -+TARGET_READLINE_INC="" -+TARGET_HAVE_READLINE=1 - AC_SUBST(TARGET_READLINE_INC) - AC_SUBST(TARGET_HAVE_READLINE) - diff --git a/packages/sqlite/sqlite3-3.3.12/libtool.patch b/packages/sqlite/sqlite3-3.3.12/libtool.patch deleted file mode 100644 index ccf9993ed2..0000000000 --- a/packages/sqlite/sqlite3-3.3.12/libtool.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: sqlite-3.2.1/Makefile.in -=================================================================== ---- sqlite-3.2.1.orig/Makefile.in 2005-03-23 17:09:39.000000000 +0100 -+++ sqlite-3.2.1/Makefile.in 2005-04-25 23:11:20.000000000 +0200 -@@ -15,7 +15,10 @@ - # The toplevel directory of the source tree. This is the directory - # that contains this "Makefile.in" and the "configure.in" script. - # --TOP = @srcdir@ -+TOP = $(srcdir) -+srcdir = @srcdir@ -+top_srcdir = @top_srcdir@ -+top_builddir = . - - # C Compiler and options for use in building executables that - # will run on the platform that is doing the build. -@@ -96,7 +99,7 @@ - exec_prefix = @exec_prefix@ - libdir = @libdir@ - INSTALL = @INSTALL@ --LIBTOOL = ./libtool -+LIBTOOL = @LIBTOOL@ - ALLOWRELEASE = @ALLOWRELEASE@ - - # libtool compile/link/install diff --git a/packages/sqlite/sqlite3-3.3.13/cross-compile.patch b/packages/sqlite/sqlite3-3.3.13/cross-compile.patch deleted file mode 100644 index 31d4f0d162..0000000000 --- a/packages/sqlite/sqlite3-3.3.13/cross-compile.patch +++ /dev/null @@ -1,92 +0,0 @@ ---- sqlite-3.3.7/configure.ac.orig 2006-08-21 00:20:50.000000000 +0200 -+++ sqlite-3.3.7/configure.ac 2006-08-21 00:22:35.000000000 +0200 -@@ -187,10 +187,11 @@ - default_build_cflags="-g" - if test "$config_BUILD_CC" = ""; then - AC_PROG_CC -- if test "$cross_compiling" = "yes"; then -- AC_MSG_ERROR([unable to find a compiler for building build tools]) -- fi -- BUILD_CC=$CC -+# if test "$cross_compiling" = "yes"; then -+# AC_MSG_ERROR([unable to find a compiler for building build tools]) -+# fi -+# BUILD_CC=$CC -+BUILD_CC=gcc - default_build_cflags=$CFLAGS - else - BUILD_CC=$config_BUILD_CC -@@ -238,6 +239,12 @@ - TARGET_LINK=$config_TARGET_LINK - fi - AC_MSG_RESULT($TARGET_LINK) -+if test "$config_TARGET_LFLAGS" != ""; then -+ TARGET_LFLAGS=$config_TARGET_LFLAGS -+ else -+ TARGET_LFLAGS=$BUILD_LFLAGS -+ fi -+AC_MSG_RESULT($TARGET_LFLAGS) - AC_MSG_CHECKING([switches on the target compiler]) - if test "$config_TARGET_TFLAGS" != ""; then - TARGET_TFLAGS=$config_TARGET_TFLAGS -@@ -592,15 +599,7 @@ - # Figure out what C libraries are required to compile programs - # that use "readline()" library. - # --if test "$config_TARGET_READLINE_LIBS" != ""; then -- TARGET_READLINE_LIBS="$config_TARGET_READLINE_LIBS" --else -- CC=$TARGET_CC -- LIBS="" -- AC_SEARCH_LIBS(tgetent, [readline ncurses curses termcap]) -- AC_CHECK_LIB([readline], [readline]) -- TARGET_READLINE_LIBS="$LIBS" --fi -+TARGET_READLINE_LIBS="-lreadline" - AC_SUBST(TARGET_READLINE_LIBS) - - ########## -@@ -615,41 +614,8 @@ - ########## - # Figure out where to get the READLINE header files. - # --AC_MSG_CHECKING([readline header files]) --found=no --if test "$config_TARGET_READLINE_INC" != ""; then -- TARGET_READLINE_INC=$config_TARGET_READLINE_INC -- found=yes --fi --if test "$found" = "yes"; then -- AC_MSG_RESULT($TARGET_READLINE_INC) --else -- AC_MSG_RESULT(not specified: still searching...) -- AC_CHECK_HEADER(readline.h, [found=yes]) --fi --if test "$found" = "no"; then -- for dir in /usr /usr/local /usr/local/readline /usr/contrib /mingw; do -- AC_CHECK_FILE($dir/include/readline.h, found=yes) -- if test "$found" = "yes"; then -- TARGET_READLINE_INC="-I$dir/include" -- break -- fi -- AC_CHECK_FILE($dir/include/readline/readline.h, found=yes) -- if test "$found" = "yes"; then -- TARGET_READLINE_INC="-I$dir/include/readline" -- break -- fi -- done --fi --if test "$found" = "yes"; then -- if test "$TARGET_READLINE_LIBS" = ""; then -- TARGET_HAVE_READLINE=0 -- else -- TARGET_HAVE_READLINE=1 -- fi --else -- TARGET_HAVE_READLINE=0 --fi -+TARGET_READLINE_INC="" -+TARGET_HAVE_READLINE=1 - AC_SUBST(TARGET_READLINE_INC) - AC_SUBST(TARGET_HAVE_READLINE) - diff --git a/packages/sqlite/sqlite3-3.3.13/libtool.patch b/packages/sqlite/sqlite3-3.3.13/libtool.patch deleted file mode 100644 index ccf9993ed2..0000000000 --- a/packages/sqlite/sqlite3-3.3.13/libtool.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: sqlite-3.2.1/Makefile.in -=================================================================== ---- sqlite-3.2.1.orig/Makefile.in 2005-03-23 17:09:39.000000000 +0100 -+++ sqlite-3.2.1/Makefile.in 2005-04-25 23:11:20.000000000 +0200 -@@ -15,7 +15,10 @@ - # The toplevel directory of the source tree. This is the directory - # that contains this "Makefile.in" and the "configure.in" script. - # --TOP = @srcdir@ -+TOP = $(srcdir) -+srcdir = @srcdir@ -+top_srcdir = @top_srcdir@ -+top_builddir = . - - # C Compiler and options for use in building executables that - # will run on the platform that is doing the build. -@@ -96,7 +99,7 @@ - exec_prefix = @exec_prefix@ - libdir = @libdir@ - INSTALL = @INSTALL@ --LIBTOOL = ./libtool -+LIBTOOL = @LIBTOOL@ - ALLOWRELEASE = @ALLOWRELEASE@ - - # libtool compile/link/install diff --git a/packages/sqlite/sqlite3-3.3.17/libtool.patch b/packages/sqlite/sqlite3-3.3.17/libtool.patch deleted file mode 100644 index ccf9993ed2..0000000000 --- a/packages/sqlite/sqlite3-3.3.17/libtool.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: sqlite-3.2.1/Makefile.in -=================================================================== ---- sqlite-3.2.1.orig/Makefile.in 2005-03-23 17:09:39.000000000 +0100 -+++ sqlite-3.2.1/Makefile.in 2005-04-25 23:11:20.000000000 +0200 -@@ -15,7 +15,10 @@ - # The toplevel directory of the source tree. This is the directory - # that contains this "Makefile.in" and the "configure.in" script. - # --TOP = @srcdir@ -+TOP = $(srcdir) -+srcdir = @srcdir@ -+top_srcdir = @top_srcdir@ -+top_builddir = . - - # C Compiler and options for use in building executables that - # will run on the platform that is doing the build. -@@ -96,7 +99,7 @@ - exec_prefix = @exec_prefix@ - libdir = @libdir@ - INSTALL = @INSTALL@ --LIBTOOL = ./libtool -+LIBTOOL = @LIBTOOL@ - ALLOWRELEASE = @ALLOWRELEASE@ - - # libtool compile/link/install diff --git a/packages/sqlite/sqlite3-3.4.1/libtool.patch b/packages/sqlite/sqlite3-3.4.1/libtool.patch deleted file mode 100644 index ccf9993ed2..0000000000 --- a/packages/sqlite/sqlite3-3.4.1/libtool.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: sqlite-3.2.1/Makefile.in -=================================================================== ---- sqlite-3.2.1.orig/Makefile.in 2005-03-23 17:09:39.000000000 +0100 -+++ sqlite-3.2.1/Makefile.in 2005-04-25 23:11:20.000000000 +0200 -@@ -15,7 +15,10 @@ - # The toplevel directory of the source tree. This is the directory - # that contains this "Makefile.in" and the "configure.in" script. - # --TOP = @srcdir@ -+TOP = $(srcdir) -+srcdir = @srcdir@ -+top_srcdir = @top_srcdir@ -+top_builddir = . - - # C Compiler and options for use in building executables that - # will run on the platform that is doing the build. -@@ -96,7 +99,7 @@ - exec_prefix = @exec_prefix@ - libdir = @libdir@ - INSTALL = @INSTALL@ --LIBTOOL = ./libtool -+LIBTOOL = @LIBTOOL@ - ALLOWRELEASE = @ALLOWRELEASE@ - - # libtool compile/link/install -- cgit v1.2.3 From fe620072876ebaa842f1493cf15d6b2ccf78ce82 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 04:28:36 +0000 Subject: sqlite3: update to latest stable (3.5.6) --- packages/sqlite/sqlite3_3.5.2.bb | 1 - packages/sqlite/sqlite3_3.5.6.bb | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 packages/sqlite/sqlite3_3.5.2.bb create mode 100644 packages/sqlite/sqlite3_3.5.6.bb diff --git a/packages/sqlite/sqlite3_3.5.2.bb b/packages/sqlite/sqlite3_3.5.2.bb deleted file mode 100644 index 53fd96c705..0000000000 --- a/packages/sqlite/sqlite3_3.5.2.bb +++ /dev/null @@ -1 +0,0 @@ -require sqlite3.inc diff --git a/packages/sqlite/sqlite3_3.5.6.bb b/packages/sqlite/sqlite3_3.5.6.bb new file mode 100644 index 0000000000..53fd96c705 --- /dev/null +++ b/packages/sqlite/sqlite3_3.5.6.bb @@ -0,0 +1 @@ +require sqlite3.inc -- cgit v1.2.3 From ab9b018ebdc0673c65d69016a6b4c354af62980e Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 11:05:06 +0000 Subject: amule: initial commit. closes 717 for OE. --- packages/amule/.mtn2git_empty | 0 packages/amule/amule_2.1.3.bb | 25 +++++++++++++++++++++++++ packages/amule/files/.mtn2git_empty | 0 packages/amule/files/parser.patch | 20 ++++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 packages/amule/.mtn2git_empty create mode 100644 packages/amule/amule_2.1.3.bb create mode 100644 packages/amule/files/.mtn2git_empty create mode 100644 packages/amule/files/parser.patch diff --git a/packages/amule/.mtn2git_empty b/packages/amule/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/amule/amule_2.1.3.bb b/packages/amule/amule_2.1.3.bb new file mode 100644 index 0000000000..b160203ffd --- /dev/null +++ b/packages/amule/amule_2.1.3.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "aMule is an eMule-like client for the eD2k \ +and Kademlia networks, supporting multiple platforms." +HOMEPAGE = "http://www.amule.org" +LICENSE = "GPL" +SECTION = "web" +PRIORITY = "optional" +DEPENDS = "wxbase" + + +SRC_URI = "${SOURCEFORGE_MIRROR}/amule/aMule-${PV}.tar.bz2 \ + file://parser.patch;patch=1" + +S = "${WORKDIR}/aMule-${PV}" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--enable-amulecmd \ + --enable-webserver \ + --disable-monolithic \ + --enable-amule-daemon \ + --disable-nls" +# --enable-optimize" + +FILES_${PN} += " \ + ${libdir}/xchat" diff --git a/packages/amule/files/.mtn2git_empty b/packages/amule/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/amule/files/parser.patch b/packages/amule/files/parser.patch new file mode 100644 index 0000000000..ee77c42380 --- /dev/null +++ b/packages/amule/files/parser.patch @@ -0,0 +1,20 @@ +diff -ur aMule-2.1.0_orig/src/Parser.cpp aMule-2.1.0/src/Parser.cpp +--- aMule-2.1.0_orig/src/Parser.cpp 2005-12-20 05:13:25.000000000 +0100 ++++ aMule-2.1.0/src/Parser.cpp 2006-01-29 15:16:45.000000000 +0100 +@@ -203,14 +203,14 @@ + # define YYMALLOC malloc + # if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \ + && (defined (__STDC__) || defined (__cplusplus))) +-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ ++/*void *malloc (YYSIZE_T);*/ /* INFRINGES ON USER NAME SPACE */ + # endif + # endif + # ifndef YYFREE + # define YYFREE free + # if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \ + && (defined (__STDC__) || defined (__cplusplus))) +-void free (void *); /* INFRINGES ON USER NAME SPACE */ ++/*void free (void *);*/ /* INFRINGES ON USER NAME SPACE */ + # endif + # endif + # ifdef __cplusplus -- cgit v1.2.3 From e40c4bc863160289dbd9d0e7bc5164c0c9ecae7c Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 18 Feb 2008 14:13:32 +0000 Subject: renderproto: Lower preference of v. 0.9.3 since it breaks xserver-kdrive-xomap. --- packages/xorg-proto/renderproto_0.9.3.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/xorg-proto/renderproto_0.9.3.bb b/packages/xorg-proto/renderproto_0.9.3.bb index 3d20b24afd..f1d19df46e 100644 --- a/packages/xorg-proto/renderproto_0.9.3.bb +++ b/packages/xorg-proto/renderproto_0.9.3.bb @@ -2,3 +2,5 @@ require xorg-proto-common.inc CONFLICTS = "renderext" PE = "1" + +DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From effac7639d733d602eefafd90f7bb59fb8c934ee Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Mon, 18 Feb 2008 14:49:56 +0000 Subject: linux-2.6.2[34]: rename mpc8313e-rdb LEDs --- .../linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch | 10 +++++----- .../linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-leds.patch | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch b/packages/linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch index be322be927..1116ce3998 100644 --- a/packages/linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch +++ b/packages/linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch @@ -20,8 +20,8 @@ diff -urN linux-2.6.23.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.23/driver @@ -0,0 +1,171 @@ +/* + * drivers/leds/leds-mpc8313e-rdb.c -+ * Copyright (C) 2007 Leon Woestenberg + * Copyright (C) 2007 Jeremy Laine ++ * Copyright (C) 2007 Leon Woestenberg + * + * 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 @@ -99,21 +99,21 @@ diff -urN linux-2.6.23.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.23/driver + }, + { + .cdev = { -+ .name = "mpc8313:green", ++ .name = "mpc8313:led5", + .brightness_set = mpc8313leds_set, + }, + .bitmask = 32, + }, + { + .cdev = { -+ .name = "mpc8313:yellow", ++ .name = "mpc8313:led6", + .brightness_set = mpc8313leds_set, + }, + .bitmask = 64, + }, + { + .cdev = { -+ .name = "mpc8313:red", ++ .name = "mpc8313:led7", + .brightness_set = mpc8313leds_set, + }, + .bitmask = 128, @@ -186,7 +186,7 @@ diff -urN linux-2.6.23.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.23/driver +module_init(mpc8313leds_init); +module_exit(mpc8313leds_exit); + -+MODULE_AUTHOR("Leon Woestenberg "); ++MODULE_AUTHOR("Jeremy Laine "); +MODULE_DESCRIPTION("MPC8313E-RDB LED driver"); +MODULE_LICENSE("GPL"); diff -urN linux-2.6.23.orig/drivers/leds/Makefile linux-2.6.23/drivers/leds/Makefile diff --git a/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-leds.patch b/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-leds.patch index f1dca9d8e1..5336905a66 100644 --- a/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-leds.patch +++ b/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc8313e-rdb-leds.patch @@ -20,8 +20,8 @@ diff -urN linux-2.6.24.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.24/driver @@ -0,0 +1,171 @@ +/* + * drivers/leds/leds-mpc8313e-rdb.c -+ * Copyright (C) 2007 Leon Woestenberg + * Copyright (C) 2007 Jeremy Laine ++ * Copyright (C) 2007 Leon Woestenberg + * + * 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 @@ -99,21 +99,21 @@ diff -urN linux-2.6.24.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.24/driver + }, + { + .cdev = { -+ .name = "mpc8313:green", ++ .name = "mpc8313:led5", + .brightness_set = mpc8313leds_set, + }, + .bitmask = 32, + }, + { + .cdev = { -+ .name = "mpc8313:yellow", ++ .name = "mpc8313:led6", + .brightness_set = mpc8313leds_set, + }, + .bitmask = 64, + }, + { + .cdev = { -+ .name = "mpc8313:red", ++ .name = "mpc8313:led7", + .brightness_set = mpc8313leds_set, + }, + .bitmask = 128, @@ -186,7 +186,7 @@ diff -urN linux-2.6.24.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.24/driver +module_init(mpc8313leds_init); +module_exit(mpc8313leds_exit); + -+MODULE_AUTHOR("Leon Woestenberg "); ++MODULE_AUTHOR("Jeremy Laine "); +MODULE_DESCRIPTION("MPC8313E-RDB LED driver"); +MODULE_LICENSE("GPL"); diff -urN linux-2.6.24.orig/drivers/leds/Makefile linux-2.6.24/drivers/leds/Makefile -- cgit v1.2.3 From 24b026d78e9e80318f8eb744754aeaa9034267ad Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 18 Feb 2008 14:51:12 +0000 Subject: osb-ncore: Add missing DEPENDS on gperf-native --- packages/gtk-webcore/osb-nrcore.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gtk-webcore/osb-nrcore.inc b/packages/gtk-webcore/osb-nrcore.inc index 7cbf0ce890..a6a1832853 100644 --- a/packages/gtk-webcore/osb-nrcore.inc +++ b/packages/gtk-webcore/osb-nrcore.inc @@ -3,7 +3,7 @@ HOMEPAGE = "http://gtk-webcore.sourceforge.net/" PRIORITY = "optional" SECTION = "gpe" LICENSE = "GPL" -DEPENDS = "glib-2.0 gtk+ pango osb-jscore libxt" +DEPENDS = "glib-2.0 gtk+ pango osb-jscore libxt gperf-native" LEAD_SONAME = "libnrcore.so" -- cgit v1.2.3 From 5d4ce8a8a30c9c595f5868da6ed14eebd0fd2683 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Mon, 18 Feb 2008 15:13:30 +0000 Subject: linux-2.6.23: for mpc8313e-rdb, modularise kernel some more to reduce size --- packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig | 84 +++------------------- packages/linux/linux_2.6.23.bb | 2 +- 2 files changed, 9 insertions(+), 77 deletions(-) diff --git a/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig b/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig index 3cc17679c1..d842308fc9 100644 --- a/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig +++ b/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig @@ -687,7 +687,7 @@ CONFIG_EEPROM_93CX6=m # SCSI device support # # CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=y +CONFIG_SCSI=m CONFIG_SCSI_DMA=y # CONFIG_SCSI_TGT is not set # CONFIG_SCSI_NETLINK is not set @@ -696,11 +696,11 @@ CONFIG_SCSI_PROC_FS=y # # SCSI support type (disk, tape, CD-ROM) # -CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SD=m # CONFIG_CHR_DEV_ST is not set # CONFIG_CHR_DEV_OSST is not set # CONFIG_BLK_DEV_SR is not set -CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SG is not set # CONFIG_CHR_DEV_SCH is not set # @@ -715,45 +715,11 @@ CONFIG_SCSI_WAIT_SCAN=m # # SCSI Transports # -CONFIG_SCSI_SPI_ATTRS=y +CONFIG_SCSI_SPI_ATTRS=m # CONFIG_SCSI_FC_ATTRS is not set # CONFIG_SCSI_ISCSI_ATTRS is not set # CONFIG_SCSI_SAS_LIBSAS 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_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_EATA is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_GDTH is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_SRP is not set +# CONFIG_SCSI_LOWLEVEL is not set # CONFIG_ATA is not set # CONFIG_MD is not set @@ -796,34 +762,7 @@ CONFIG_CICADA_PHY=y # CONFIG_BROADCOM_PHY is not set # CONFIG_ICPLUS_PHY is not set # CONFIG_FIXED_PHY is not set -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_NET_TULIP is not set -# CONFIG_HP100 is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_FORCEDETH is not set -# CONFIG_DGRS is not set -# CONFIG_EEPRO100 is not set -CONFIG_E100=y -# CONFIG_FEALNX is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_SC92031 is not set +# CONFIG_NET_ETHERNET is not set CONFIG_NETDEV_1000=y # CONFIG_ACENIC is not set # CONFIG_DL2K is not set @@ -843,14 +782,7 @@ CONFIG_GIANFAR=y CONFIG_GFAR_NAPI=y # CONFIG_QLA3XXX is not set # CONFIG_ATL1 is not set -CONFIG_NETDEV_10000=y -# CONFIG_CHELSIO_T1 is not set -# CONFIG_CHELSIO_T3 is not set -# CONFIG_IXGB is not set -# CONFIG_S2IO is not set -# CONFIG_MYRI10GE is not set -# CONFIG_NETXEN_NIC is not set -# CONFIG_MLX4_CORE is not set +# CONFIG_NETDEV_10000 is not set # CONFIG_TR is not set # @@ -1470,7 +1402,7 @@ CONFIG_USB_UHCI_HCD=y # # may also be needed; see USB_STORAGE Help for more information # -CONFIG_USB_STORAGE=y +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 diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb index f754e6be83..ffc1820229 100644 --- a/packages/linux/linux_2.6.23.bb +++ b/packages/linux/linux_2.6.23.bb @@ -10,7 +10,7 @@ DEFAULT_PREFERENCE_avr32 = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" DEPENDS_append_mpc8323e-rdb = " dtc-native" -PR = "r11" +PR = "r12" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ file://binutils-buildid-arm.patch;patch=1 \ -- cgit v1.2.3 From 3f4428a1a467d2e10b64d849699008476bcd0830 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 18 Feb 2008 15:24:49 +0000 Subject: preferred-om-2008-versions.inc: prefer libtool 1.5.24 (PA 0.9.9 needs it) --- conf/distro/include/preferred-om-2008-versions.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc index 5641c8ee39..9d002f617b 100644 --- a/conf/distro/include/preferred-om-2008-versions.inc +++ b/conf/distro/include/preferred-om-2008-versions.inc @@ -1,7 +1,7 @@ PREFERRED_VERSION_dbus = "1.1.4" PREFERRED_VERSION_busybox = "1.9.1" PREFERRED_VERSION_gst-pulse = "0.9.7" -PREFERRED_VERSION_libtool = "1.2.14" +PREFERRED_VERSION_libtool = "1.5.24" PREFERRED_VERSION_pulseaudio = "0.9.9" PREFERRED_VERSION_udev = "118" PREFERRED_VERSION_vte = "0.16.10" -- cgit v1.2.3 From ad9ce746358d5bf6d0147670304e8ed05131e2ae Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Mon, 18 Feb 2008 15:43:27 +0000 Subject: sane-srcrevs.inc : bump OM kernel to get SD working --- 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 755b874083..e0df400ab1 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -47,7 +47,7 @@ SRCREV_pn-lightmediascanner ?= "68" SRCREV_pn-linux-bfin ?= "3758" SRCREV_pn-linux-hackndev-2.6 ?= "1308" SRCREV_pn-linux-ixp4xx ?= "1039" -SRCREV_pn-linux-openmoko ?= "4014" +SRCREV_pn-linux-openmoko ?= "4082" SRCREV_pn-llvm-gcc4 ?= "374" SRCREV_pn-llvm-gcc4-cross ?= "374" SRCREV_pn-maemo-mapper ?= "118" -- cgit v1.2.3 From ffd4a5b48f26451870c89660a1b92b1d4f9a4073 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 18 Feb 2008 16:20:02 +0000 Subject: osb-nrcore: Disable PARALLEL_MAKE as it breaks with it set. --- packages/gtk-webcore/osb-nrcore.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/gtk-webcore/osb-nrcore.inc b/packages/gtk-webcore/osb-nrcore.inc index a6a1832853..6fd1d22580 100644 --- a/packages/gtk-webcore/osb-nrcore.inc +++ b/packages/gtk-webcore/osb-nrcore.inc @@ -9,6 +9,9 @@ LEAD_SONAME = "libnrcore.so" inherit autotools pkgconfig +#/khtml/css/cssproperties.h failes to generate properly with high parallel makes +PARALLEL_MAKE = "" + do_configure () { autotools_do_configure cd ${S} -- cgit v1.2.3 From 7d427c988107e61e6d9b9f949af49398caa204e4 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 18 Feb 2008 16:20:58 +0000 Subject: calibrateproto, libxcalibrate: Update recipes to SRCREV and a new tag since the patches were merged upstream --- .../include/preferred-xorg-versions-X11R7.0.inc | 6 +++ .../include/preferred-xorg-versions-X11R7.1.inc | 6 +++ .../include/preferred-xorg-versions-X11R7.2.inc | 5 ++ .../include/preferred-xorg-versions-X11R7.3.inc | 5 ++ .../include/preferred-xorg-versions-X11R7.4.inc | 6 +++ conf/distro/include/preferred-xorg-versions.inc | 4 ++ packages/xorg-lib/libxcalibrate/.mtn2git_empty | 0 packages/xorg-lib/libxcalibrate/coords.patch | 50 ------------------- packages/xorg-lib/libxcalibrate_git.bb | 6 +-- packages/xorg-proto/calibrateproto/.mtn2git_empty | 0 packages/xorg-proto/calibrateproto/coords.patch | 56 ---------------------- packages/xorg-proto/calibrateproto_git.bb | 6 +-- 12 files changed, 36 insertions(+), 114 deletions(-) delete mode 100644 packages/xorg-lib/libxcalibrate/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxcalibrate/coords.patch delete mode 100644 packages/xorg-proto/calibrateproto/.mtn2git_empty delete mode 100644 packages/xorg-proto/calibrateproto/coords.patch diff --git a/conf/distro/include/preferred-xorg-versions-X11R7.0.inc b/conf/distro/include/preferred-xorg-versions-X11R7.0.inc index 6db9d92f71..5a391aa45a 100644 --- a/conf/distro/include/preferred-xorg-versions-X11R7.0.inc +++ b/conf/distro/include/preferred-xorg-versions-X11R7.0.inc @@ -339,3 +339,9 @@ PREFERRED_VERSION_util-macros-native = "X11R7.0-1.0.1" PREFERRED_VERSION_util-macros = "X11R7.0-1.0.1" PREFERRED_VERSION_xorg-cf-files = "X11R7.0-1.0.1" PREFERRED_VERSION_xserver-xorg = "X11R7.0-1.0.1" + +# Unreleased Packages +SRCREV_pn-libxcalibrate ?= "7b8e29186097170e930de634a4a68072558aa056" +PV_pn-libxcalibrate ?= "0.0-oe1-${SRCREV}" +SRCREV_pn-calibrateproto ?= "1da6fd1e2c7a49648245c98481fabea8b9690a8c" +PV_pn-calibrateproto ?= "0.0-oe1-${SRCREV}" diff --git a/conf/distro/include/preferred-xorg-versions-X11R7.1.inc b/conf/distro/include/preferred-xorg-versions-X11R7.1.inc index 782549589d..c387161577 100644 --- a/conf/distro/include/preferred-xorg-versions-X11R7.1.inc +++ b/conf/distro/include/preferred-xorg-versions-X11R7.1.inc @@ -183,3 +183,9 @@ PREFERRED_VERSION_util-macros ?= "X11R7.1-1.0.2" PREFERRED_VERSION_xorg-cf-files ?= "X11R7.1-1.0.2" PREFERRED_VERSION_xserver-kdrive ?= "X11R7.1-1.1.0" PREFERRED_VERSION_xserver-xorg ?= "X11R7.1-1.1.0" + +# Unreleased packages +SRCREV_pn-libxcalibrate ?= "7b8e29186097170e930de634a4a68072558aa056" +PV_pn-libxcalibrate ?= "0.0-oe1-${SRCREV}" +SRCREV_pn-calibrateproto ?= "1da6fd1e2c7a49648245c98481fabea8b9690a8c" +PV_pn-calibrateproto ?= "0.0-oe1-${SRCREV}" diff --git a/conf/distro/include/preferred-xorg-versions-X11R7.2.inc b/conf/distro/include/preferred-xorg-versions-X11R7.2.inc index 59a481a104..dc34a99340 100644 --- a/conf/distro/include/preferred-xorg-versions-X11R7.2.inc +++ b/conf/distro/include/preferred-xorg-versions-X11R7.2.inc @@ -269,3 +269,8 @@ PREFERRED_VERSION_xorg-cf-files ?= "X11R7.1-1.0.2" PREFERRED_VERSION_xserver-kdrive ?= "1.2.0" PREFERRED_VERSION_xserver-xorg ?= "1.2.0" +# Unreleased packages +SRCREV_pn-libxcalibrate ?= "7b8e29186097170e930de634a4a68072558aa056" +PV_pn-libxcalibrate ?= "0.0-oe1-${SRCREV}" +SRCREV_pn-calibrateproto ?= "1da6fd1e2c7a49648245c98481fabea8b9690a8c" +PV_pn-calibrateproto ?= "0.0-oe1-${SRCREV}" diff --git a/conf/distro/include/preferred-xorg-versions-X11R7.3.inc b/conf/distro/include/preferred-xorg-versions-X11R7.3.inc index d7e19284bc..648472e9b6 100644 --- a/conf/distro/include/preferred-xorg-versions-X11R7.3.inc +++ b/conf/distro/include/preferred-xorg-versions-X11R7.3.inc @@ -280,3 +280,8 @@ PREFERRED_VERSION_xorg-cf-files ?= "1.0.2" PREFERRED_VERSION_xserver-kdrive ?= "1.4" PREFERRED_VERSION_xserver-xorg ?= "1.4" +# Unreleased packages +SRCREV_pn-libxcalibrate ?= "7b8e29186097170e930de634a4a68072558aa056" +PV_pn-libxcalibrate ?= "0.0-oe1-${SRCREV}" +SRCREV_pn-calibrateproto ?= "1da6fd1e2c7a49648245c98481fabea8b9690a8c" +PV_pn-calibrateproto ?= "0.0-oe1-${SRCREV}" diff --git a/conf/distro/include/preferred-xorg-versions-X11R7.4.inc b/conf/distro/include/preferred-xorg-versions-X11R7.4.inc index b04f72180d..4af2405aa7 100644 --- a/conf/distro/include/preferred-xorg-versions-X11R7.4.inc +++ b/conf/distro/include/preferred-xorg-versions-X11R7.4.inc @@ -284,3 +284,9 @@ PREFERRED_VERSION_xorg-cf-files ?= "1.0.2" # xserver PREFERRED_VERSION_xserver-kdrive ?= "1.4" PREFERRED_VERSION_xserver-xorg ?= "1.4" + +# Unreleased packages +SRCREV_pn-libxcalibrate ?= "7b8e29186097170e930de634a4a68072558aa056" +PV_pn-libxcalibrate ?= "0.0-oe1-${SRCREV}" +SRCREV_pn-calibrateproto ?= "1da6fd1e2c7a49648245c98481fabea8b9690a8c" +PV_pn-calibrateproto ?= "0.0-oe1-${SRCREV}" diff --git a/conf/distro/include/preferred-xorg-versions.inc b/conf/distro/include/preferred-xorg-versions.inc index f34b29f147..05136138fc 100644 --- a/conf/distro/include/preferred-xorg-versions.inc +++ b/conf/distro/include/preferred-xorg-versions.inc @@ -109,3 +109,7 @@ PREFERRED_VERSION_xtrans ?= "1.0.3" PREFERRED_VERSION_xtrans-native ?= "1.0.3" PREFERRED_VERSION_xinit ?= "1.0.4" PREFERRED_VERSION_xev ?= "1.0.2" +SRCREV_pn-libxcalibrate ?= "7b8e29186097170e930de634a4a68072558aa056" +PV_pn-libxcalibrate ?= "0.0-oe1-${SRCREV}" +SRCREV_pn-calibrateproto ?= "1da6fd1e2c7a49648245c98481fabea8b9690a8c" +PV_pn-calibrateproto ?= "0.0-oe1-${SRCREV}" diff --git a/packages/xorg-lib/libxcalibrate/.mtn2git_empty b/packages/xorg-lib/libxcalibrate/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxcalibrate/coords.patch b/packages/xorg-lib/libxcalibrate/coords.patch deleted file mode 100644 index 19cf1639f6..0000000000 --- a/packages/xorg-lib/libxcalibrate/coords.patch +++ /dev/null @@ -1,50 +0,0 @@ ---- - xcalibrate.c | 26 ++++++++++++++++++++++++++ - xcalibrate.h | 2 ++ - 2 files changed, 28 insertions(+) - -Index: XCalibrate/xcalibrate.c -=================================================================== ---- XCalibrate.orig/xcalibrate.c 2007-06-30 14:12:22.000000000 +0100 -+++ XCalibrate/xcalibrate.c 2007-06-30 14:18:10.000000000 +0100 -@@ -227,3 +227,29 @@ XCalibrateSetRawMode (Display *dpy, Bool - SyncHandle (); - return 0; - } -+ -+Status -+XCalibrateScreenToCoord (Display *dpy, int *x, int *y) -+{ -+ XExtDisplayInfo *info = XCalibrateFindDisplay (dpy); -+ xXCalibrateScreenToCoordReq *req; -+ xXCalibrateScreenToCoordReply rep; -+ LockDisplay (dpy); -+ GetReq (XCalibrateScreenToCoord, req); -+ req->reqType = info->codes->major_opcode; -+ req->xCalibrateReqType = X_XCalibrateScreenToCoord; -+ req->x = *x; -+ req->y = *y; -+ if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) -+ { -+ UnlockDisplay (dpy); -+ SyncHandle (); -+ return 1; -+ } -+ *x = rep.x; -+ *y = rep.y; -+ UnlockDisplay (dpy); -+ SyncHandle (); -+ return 0; -+} -+ -Index: XCalibrate/xcalibrate.h -=================================================================== ---- XCalibrate.orig/xcalibrate.h 2007-06-30 14:16:16.000000000 +0100 -+++ XCalibrate/xcalibrate.h 2007-06-30 14:16:38.000000000 +0100 -@@ -43,4 +43,6 @@ Status XCalibrateQueryVersion (Display * - - Status XCalibrateSetRawMode (Display *dpy, Bool enable); - -+Status XCalibrateScreenToCoord (Display *dpy, int *x, int *y); -+ - #endif diff --git a/packages/xorg-lib/libxcalibrate_git.bb b/packages/xorg-lib/libxcalibrate_git.bb index 99f11e40fd..24b4a1f067 100644 --- a/packages/xorg-lib/libxcalibrate_git.bb +++ b/packages/xorg-lib/libxcalibrate_git.bb @@ -3,11 +3,9 @@ require xorg-lib-common.inc DESCRIPTION = " Touchscreen calibration client library" LICENSE = "BSD-X" DEPENDS = "virtual/libx11 calibrateproto libxext" -PV = "0.0+git${SRCDATE}" -PR = "r2" +PV = "0.0+git${SRCREV}" -SRC_URI = "git://anongit.freedesktop.org/git/xorg/lib/libXCalibrate;protocol=git;tag=4be232e30cd33a44a1ce6d3ec429ee6101540c62 \ - file://coords.patch;patch=1" +SRC_URI = "git://anongit.freedesktop.org/git/xorg/lib/libXCalibrate;protocol=git" S = "${WORKDIR}/git" diff --git a/packages/xorg-proto/calibrateproto/.mtn2git_empty b/packages/xorg-proto/calibrateproto/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-proto/calibrateproto/coords.patch b/packages/xorg-proto/calibrateproto/coords.patch deleted file mode 100644 index 8f44b029c5..0000000000 --- a/packages/xorg-proto/calibrateproto/coords.patch +++ /dev/null @@ -1,56 +0,0 @@ ---- - xcalibrateproto.h | 25 +++++++++++++++++++++++++ - xcalibratewire.h | 3 ++- - 2 files changed, 27 insertions(+), 1 deletion(-) - -Index: XCalibrateExt/xcalibrateproto.h -=================================================================== ---- XCalibrateExt.orig/xcalibrateproto.h 2004-06-02 20:18:47.000000000 +0100 -+++ XCalibrateExt/xcalibrateproto.h 2007-06-30 14:17:29.000000000 +0100 -@@ -78,6 +78,31 @@ typedef struct { - - #define sz_xXCalibrateRawModeReply 32 - -+typedef struct { -+ CARD8 reqType; -+ CARD8 xCalibrateReqType; -+ CARD16 length B16; -+ CARD32 x B32; -+ CARD32 y B32; -+} xXCalibrateScreenToCoordReq; -+ -+#define sz_xXCalibrateScreenToCoordReq 12 -+ -+typedef struct { -+ BYTE type; /* X_Reply */ -+ BYTE pad1; -+ CARD16 sequenceNumber B16; -+ CARD32 x; -+ CARD32 y; -+ CARD32 pad2 B32; -+ CARD32 pad3 B32; -+ CARD32 pad4 B32; -+ CARD32 pad5 B32; -+ CARD32 pad6 B32; -+} xXCalibrateScreenToCoordReply; -+ -+#define sz_xXCalibrateScreenToCoordReply 32 -+ - /* Events */ - - typedef struct { -Index: XCalibrateExt/xcalibratewire.h -=================================================================== ---- XCalibrateExt.orig/xcalibratewire.h 2004-06-02 20:18:47.000000000 +0100 -+++ XCalibrateExt/xcalibratewire.h 2007-06-30 14:17:29.000000000 +0100 -@@ -31,8 +31,9 @@ - - #define X_XCalibrateQueryVersion 0 - #define X_XCalibrateRawMode 1 -+#define X_XCalibrateScreenToCoord 2 - --#define XCalibrateNumberRequests (X_XCalibrateSetRawMode + 1) -+#define XCalibrateNumberRequests (X_XCalibrateScreenToCoord + 1) - - #define X_XCalibrateRawTouchscreen 0 - diff --git a/packages/xorg-proto/calibrateproto_git.bb b/packages/xorg-proto/calibrateproto_git.bb index 60308601b9..02d20b5038 100644 --- a/packages/xorg-proto/calibrateproto_git.bb +++ b/packages/xorg-proto/calibrateproto_git.bb @@ -2,10 +2,8 @@ require xorg-proto-common.inc DESCRIPTION = "Touchscreen calibration protocol" -PV = "0.0+git${SRCDATE}" +PV = "0.0+git${SRCREV}" PR = "r1" -SRC_URI = "git://anongit.freedesktop.org/git/xorg/proto/calibrateproto;protocol=git;tag=a1d5ef0c73fbef3e758c51b57ac69ba9567bae04 \ - file://coords.patch;patch=1" - +SRC_URI = "git://anongit.freedesktop.org/git/xorg/proto/calibrateproto;protocol=git" S = "${WORKDIR}/git" -- cgit v1.2.3 From 8217f2c1337c6e270030ee3a182c6aa2a06f905f Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 18 Feb 2008 16:21:43 +0000 Subject: osso-gnome-vfs2: Move include to fix SRC_URI. --- packages/maemo4/osso-gnome-vfs2_2.16.3.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/maemo4/osso-gnome-vfs2_2.16.3.bb b/packages/maemo4/osso-gnome-vfs2_2.16.3.bb index 4d2e9aa94e..45a373fd11 100644 --- a/packages/maemo4/osso-gnome-vfs2_2.16.3.bb +++ b/packages/maemo4/osso-gnome-vfs2_2.16.3.bb @@ -6,12 +6,13 @@ DESCRIPTION = "gnomevfs - osso variant" PR = "r0" +inherit gnome + SRC_URI = "\ http://repository.maemo.org/pool/maemo4.0/free/source/o/${PN}/${PN}_${PV}-1osso31.tar.gz \ file://gnome-vfs-no-kerberos.patch;patch=1;pnum=0 \ " -inherit gnome EXTRA_OECONF = " \ --disable-openssl \ -- cgit v1.2.3 From f4e2ff6d616a1788f35719797bffc44ce89176f8 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Mon, 18 Feb 2008 16:33:18 +0000 Subject: linux-2.6.24: improve mpc8313e-rdb support * apply patch for NAND controller * modularise kernel some more to reduce kernel size --- packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig | 78 +- .../linux-2.6.24/mpc8313e-rdb/mpc831x-nand.patch | 1807 ++++++++++++++++++++ packages/linux/linux_2.6.24.bb | 3 +- 3 files changed, 1816 insertions(+), 72 deletions(-) create mode 100644 packages/linux/linux-2.6.24/mpc8313e-rdb/mpc831x-nand.patch diff --git a/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig b/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig index 9c385704df..b87f62acbc 100644 --- a/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig +++ b/packages/linux/linux-2.6.24/mpc8313e-rdb/defconfig @@ -707,7 +707,7 @@ CONFIG_EEPROM_93CX6=m # SCSI device support # # CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=y +CONFIG_SCSI=m CONFIG_SCSI_DMA=y # CONFIG_SCSI_TGT is not set # CONFIG_SCSI_NETLINK is not set @@ -716,11 +716,11 @@ CONFIG_SCSI_PROC_FS=y # # SCSI support type (disk, tape, CD-ROM) # -CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SD=m # CONFIG_CHR_DEV_ST is not set # CONFIG_CHR_DEV_OSST is not set # CONFIG_BLK_DEV_SR is not set -CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SG is not set # CONFIG_CHR_DEV_SCH is not set # @@ -735,47 +735,11 @@ CONFIG_SCSI_WAIT_SCAN=m # # SCSI Transports # -CONFIG_SCSI_SPI_ATTRS=y +CONFIG_SCSI_SPI_ATTRS=m # CONFIG_SCSI_FC_ATTRS is not set # CONFIG_SCSI_ISCSI_ATTRS is not set # CONFIG_SCSI_SAS_LIBSAS is not set # CONFIG_SCSI_SRP_ATTRS is not set -CONFIG_SCSI_LOWLEVEL=y -# CONFIG_ISCSI_TCP is not set -# CONFIG_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_BUSLOGIC is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_EATA is not set -# CONFIG_SCSI_FUTURE_DOMAIN is not set -# CONFIG_SCSI_GDTH is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -# CONFIG_SCSI_QLA_FC is not set -# CONFIG_SCSI_QLA_ISCSI is not set -# CONFIG_SCSI_LPFC is not set -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_NSP32 is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_SRP is not set # CONFIG_ATA is not set # CONFIG_MD is not set # CONFIG_FUSION is not set @@ -813,25 +777,7 @@ CONFIG_CICADA_PHY=y # CONFIG_ICPLUS_PHY is not set # CONFIG_FIXED_PHY is not set # CONFIG_MDIO_BITBANG is not set -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_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=y -# CONFIG_PCNET32 is not set -# CONFIG_AMD8111_ETH is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_B44 is not set -# CONFIG_FORCEDETH is not set -# CONFIG_EEPRO100 is not set +# CONFIG_NET_ETHERNET is not set CONFIG_E100=y # CONFIG_FEALNX is not set # CONFIG_NATSEMI is not set @@ -865,17 +811,7 @@ CONFIG_GIANFAR=y CONFIG_GFAR_NAPI=y # CONFIG_QLA3XXX is not set # CONFIG_ATL1 is not set -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 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_NETDEV_10000 is not set # CONFIG_TR is not set # @@ -1509,7 +1445,7 @@ CONFIG_USB_UHCI_HCD=y # # may also be needed; see USB_STORAGE Help for more information # -CONFIG_USB_STORAGE=y +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 diff --git a/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc831x-nand.patch b/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc831x-nand.patch new file mode 100644 index 0000000000..7c6502d232 --- /dev/null +++ b/packages/linux/linux-2.6.24/mpc8313e-rdb/mpc831x-nand.patch @@ -0,0 +1,1807 @@ +diff -urN linux-2.6.24.orig/arch/powerpc/boot/dts/mpc8313erdb.dts linux-2.6.24/arch/powerpc/boot/dts/mpc8313erdb.dts +--- linux-2.6.24.orig/arch/powerpc/boot/dts/mpc8313erdb.dts 2008-01-24 23:58:37.000000000 +0100 ++++ linux-2.6.24/arch/powerpc/boot/dts/mpc8313erdb.dts 2008-02-18 16:39:43.000000000 +0100 +@@ -36,6 +36,12 @@ + device_type = "memory"; + reg = <00000000 08000000>; // 128MB at 0 + }; ++ ++ nand0 { ++ device_type = "nand"; ++ compatible = "fsl-nand"; ++ reg = ; ++ }; + + soc8313@e0000000 { + #address-cells = <1>; +@@ -177,6 +183,16 @@ + reg = <700 100>; + device_type = "ipic"; + }; ++ ++ elbc@5000 { ++ device_type = "elbc"; ++ compatible = "fsl-elbc"; ++ reg = <5000 1000>; ++ interrupts = <4d 8>; ++ interrupt-parent = < &ipic >; ++ allow-direct-device-sleep; ++ }; ++ + }; + + pci@e0008500 { +diff -urN linux-2.6.24.orig/arch/powerpc/sysdev/fsl_soc.c linux-2.6.24/arch/powerpc/sysdev/fsl_soc.c +--- linux-2.6.24.orig/arch/powerpc/sysdev/fsl_soc.c 2008-01-24 23:58:37.000000000 +0100 ++++ linux-2.6.24/arch/powerpc/sysdev/fsl_soc.c 2008-02-18 17:07:57.000000000 +0100 +@@ -6,6 +6,12 @@ + * 2006 (c) MontaVista Software, Inc. + * Vitaly Bordug + * ++ * Change log: ++ * Copyright (C) 2006 Freescale Semiconductor, Inc. ++ * 2006: Lo Wilson (r43300@freescale.com) ++ * Added support for Enhanced Local Bus Controller ++ * Added support for USB UTMI mode on-chip PHY ++ * + * 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 +@@ -28,6 +34,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -671,6 +679,75 @@ + + arch_initcall(fsl_usb_of_init); + ++static int __init fsl_elbc_of_init(void) ++{ ++ struct device_node *np; ++ unsigned int i; ++ struct platform_device *elbc_dev = NULL; ++ struct platform_device *nand_dev = NULL; ++ int ret; ++ ++ /* find and register the enhanced local bus controller */ ++ for (np = NULL, i = 0; ++ (np = of_find_compatible_node(np, "elbc", "fsl-elbc")) != NULL; ++ i++) { ++ struct resource r[2]; ++ ++ memset(&r, 0, sizeof(r)); ++ ++ ret = of_address_to_resource(np, 0, &r[0]); ++ if (ret) ++ goto err; ++ ++ r[1].start = r[1].end = irq_of_parse_and_map(np, 0); ++ r[1].flags = IORESOURCE_IRQ; ++ ++ elbc_dev = ++ platform_device_register_simple("fsl-elbc", i, r, 2); ++ if (IS_ERR(elbc_dev)) { ++ ret = PTR_ERR(elbc_dev); ++ goto err; ++ } ++ } ++ ++ /* find and register NAND memories if the eLBC was found */ ++ for (np = NULL, i = 0; ++ elbc_dev && ++ (np = of_find_compatible_node(np, "nand", "fsl-nand")) != NULL; ++ i++) { ++ struct resource r; ++ struct platform_fsl_nand_chip chip_data; ++ ++ memset(&r, 0, sizeof(r)); ++ memset(&chip_data, 0, sizeof(chip_data)); ++ ++ ret = of_address_to_resource(np, 0, &r); ++ if (ret) ++ goto err; ++ ++ nand_dev = ++ platform_device_register_simple("fsl-nand", i, &r, 1); ++ if (IS_ERR(nand_dev)) { ++ ret = PTR_ERR(nand_dev); ++ goto err; ++ } ++ ++ chip_data.name = of_get_property(np, "name", NULL); ++ chip_data.partitions_str = of_get_property(np, "partitions", NULL); ++ ++ ret = platform_device_add_data(nand_dev, &chip_data, ++ sizeof(struct platform_fsl_nand_chip)); ++ if (ret) ++ goto err; ++ } ++ return 0; ++ ++err: ++ return ret; ++} ++ ++arch_initcall(fsl_elbc_of_init); ++ + #ifndef CONFIG_PPC_CPM_NEW_BINDING + #ifdef CONFIG_CPM2 + +diff -urN linux-2.6.24.orig/drivers/mtd/nand/fsl_elbc.c linux-2.6.24/drivers/mtd/nand/fsl_elbc.c +--- linux-2.6.24.orig/drivers/mtd/nand/fsl_elbc.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24/drivers/mtd/nand/fsl_elbc.c 2008-02-18 17:08:08.000000000 +0100 +@@ -0,0 +1,1324 @@ ++/* linux/drivers/mtd/nand/fsl_elbc.c ++ * ++ * Copyright (C) 2006 Freescale Semiconductor, Inc. ++ * ++ * Freescale Enhanced Local Bus Controller NAND driver ++ * ++ * Author: Nick Spence ++ * Maintainer: Tony Li ++ * ++ * Changelog: ++ * 2006-12 Tony Li ++ * Adopt to MPC8313ERDB board ++ * ++ * 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 ++*/ ++ ++//#ifdef CONFIG_MTD_NAND_DEBUG ++//#define DEBUG ++//#endif ++//#define DEBUG ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#define PFX "fsl-elbc: " ++ ++#undef CFG_FCM_DEBUG ++#define CFG_FCM_DEBUG_LVL 3 ++#ifdef CFG_FCM_DEBUG ++static int fcm_debug_level = CFG_FCM_DEBUG_LVL; ++#define FCM_DEBUG(n, args...) \ ++ do { \ ++ if (n <= fcm_debug_level) \ ++ printk(args); \ ++ } while(0) ++#else /* CONFIG_FCM_DEBUG */ ++#define FCM_DEBUG(n, args...) do { } while(0) ++#endif ++ ++#define FCM_SIZE (8 * 1024) ++ ++#define MAX_BANKS (8) ++ ++/* use interrupt instead of busy waiting TODO */ ++#define FCM_USE_INTERRUPT ++ ++#define MIN(x, y) ((x < y) ? x : y) ++ ++#define ERR_BYTE 0xFF /* Value returned for read bytes when read failed */ ++ ++#define FCM_TIMEOUT_MSECS 100 /* Maximum number of mSecs to wait for FCM */ ++ ++ ++ ++struct fsl_elbc_ctrl; ++ ++/* mtd information per set */ ++ ++struct fsl_elbc_mtd { ++ struct mtd_info mtd; ++ struct nand_chip chip; ++ struct platform_fsl_nand_chip pl_chip; ++ struct fsl_elbc_ctrl *ctrl; ++ ++ struct device *device; ++// int nr_chips; /* Number of chips in set */ ++// int nr_partitions; /* Number of partitions or 0 */ ++ char *name; /* Name of set (optional) */ ++ int *nr_map; /* Physical chip num (option)*/ ++// struct mtd_partition *partitions; /* MTD partition list (option*/ ++// struct nand_ecclayout *ecclayout; ++ unsigned int options; ++ struct resource *area; ++ int bank; /* Chip select bank number */ ++ unsigned int pbase; /* Chip select base physical address */ ++ unsigned int vbase; /* Chip select base virtual address */ ++ int pgs; /* NAND page size (0=512, 1=2048) */ ++ unsigned int fmr; /* FCM Flash Mode Register value */ ++}; ++ ++/* overview of the fsl elbc controller */ ++ ++struct fsl_elbc_ctrl { ++ struct nand_hw_control controller; ++ struct fsl_elbc_mtd *nmtd[MAX_BANKS]; ++ ++ /* device info */ ++ atomic_t childs_active; ++ struct device *device; ++ struct resource *area; ++ lbus83xx_t *regs; ++ int irq; ++ wait_queue_head_t irq_wait; ++ unsigned int irq_status; /* status read from LTESR by irq handler */ ++ u_char *addr; /* Address of assigned FCM buffer */ ++ unsigned int page; /* Last page written to / read from */ ++ unsigned int read_bytes; /* Number of bytes read during command */ ++ unsigned int index; /* Pointer to next byte to 'read' */ ++ unsigned int status; /* status read from LTESR after last op */ ++ int oobbuf; /* Pointer to OOB block */ ++ unsigned int mdr; /* UPM/FCM Data Register value */ ++ unsigned int use_mdr; /* Non zero if the MDR is to be set */ ++}; ++ ++struct fsl_elbc_ctrl elbc_ctrl; ++ ++/* These map to the positions used by the FCM hardware ECC generator */ ++ ++/* Small Page FLASH with FMR[ECCM] = 0 */ ++static struct nand_ecclayout fsl_elbc_oob_sp_eccm0 = { /* TODO */ ++//TODO .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 3, ++ .eccpos = {6, 7, 8}, ++ .oobfree = { {0, 5}, {9, 7} } ++}; ++ ++/* Small Page FLASH with FMR[ECCM] = 1 */ ++static struct nand_ecclayout fsl_elbc_oob_sp_eccm1 = { /* TODO */ ++//TODO .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 3, ++ .eccpos = {8, 9, 10}, ++ .oobfree = { {0, 5}, {6, 2}, {11, 5} } ++}; ++ ++/* Large Page FLASH with FMR[ECCM] = 0 */ ++static struct nand_ecclayout fsl_elbc_oob_lp_eccm0 = { ++//TODO .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 12, ++ .eccpos = {6, 7, 8, 22, 23, 24, 38, 39, 40, 54, 55, 56}, ++ .oobfree = { {1, 5}, {9, 13}, {25, 13}, {41, 13}, {57, 7} } ++}; ++ ++/* Large Page FLASH with FMR[ECCM] = 1 */ ++static struct nand_ecclayout fsl_elbc_oob_lp_eccm1 = { ++//TODO .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 12, ++ .eccpos = {8, 9, 10, 24, 25, 26, 40, 41, 42, 56, 57, 58}, ++ .oobfree = { {1, 7}, {11, 13}, {27, 13}, {43, 13}, {59, 5} } ++}; ++ ++/*=================================*/ ++ ++/* ++ * Set up the FCM hardware block and page address fields, and the fcm ++ * structure addr field to point to the correct FCM buffer in memory ++ */ ++static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ volatile lbus83xx_t *lbc = ctrl->regs; ++ int buf_num; ++ ++ ctrl->page = page_addr; ++ ++ lbc->fbar = page_addr >> (chip->phys_erase_shift - chip->page_shift); ++ if (nmtd->pgs) { ++ lbc->fpar = ((page_addr << FPAR_LP_PI_SHIFT) & FPAR_LP_PI) | ++ ( oob ? FPAR_LP_MS : 0) | ++ column; ++ buf_num = (page_addr & 1) << 2; ++ } else { ++ lbc->fpar = ((page_addr << FPAR_SP_PI_SHIFT) & FPAR_SP_PI) | ++ ( oob ? FPAR_SP_MS : 0) | ++ column; ++ buf_num = page_addr & 7; ++ } ++ ctrl->addr = (unsigned char*)(nmtd->vbase + (buf_num * 1024)); ++ ++ /* for OOB data point to the second half of the buffer */ ++ if (oob) { ++ ctrl->addr += (nmtd->pgs ? 2048 : 512); ++ } ++ FCM_DEBUG(2,"set_addr: bank=%d, ctrl->addr=0x%p (0x%08x)\n", buf_num, ctrl->addr, nmtd->vbase); ++} ++ ++/* ++ * execute FCM command and wait for it to complete ++ */ ++static int fsl_elbc_run_command(struct mtd_info *mtd) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ volatile lbus83xx_t *lbc = ctrl->regs; ++ /* Setup the FMR[OP] to execute without write protection */ ++ lbc->fmr = nmtd->fmr | 3; ++ if (ctrl->use_mdr) ++ lbc->mdr = ctrl->mdr; ++ ++ FCM_DEBUG(5,"fsl_elbc_run_command: fmr= %08X fir= %08X fcr= %08X\n", ++ lbc->fmr, lbc->fir, lbc->fcr); ++ FCM_DEBUG(5,"fsl_elbc_run_command: fbar=%08X fpar=%08X fbcr=%08X bank=%d\n", ++ lbc->fbar, lbc->fpar, lbc->fbcr, nmtd->bank); ++ ++ /* clear event registers */ ++ lbc->lteatr = 0; ++ lbc->ltesr |= (LTESR_FCT | LTESR_PAR | LTESR_CC); ++ ++ /* execute special operation */ ++ lbc->lsor = nmtd->bank; ++ ++ /* wait for FCM complete flag or timeout */ ++/* TODO */ ++#ifdef FCM_USE_INTERRUPT ++ ctrl->status = ctrl->irq_status = 0; ++ wait_event_timeout(ctrl->irq_wait, ctrl->irq_status, FCM_TIMEOUT_MSECS * HZ/1000); ++ ctrl->status = ctrl->irq_status; ++#else ++ { ++ unsigned long timeout; ++ unsigned long now; ++ now = jiffies_to_msecs(jiffies); ++ timeout = now + FCM_TIMEOUT_MSECS; ++ while (time_before(now, timeout)) { ++ ctrl->status = lbc->ltesr & (LTESR_FCT | LTESR_PAR | LTESR_CC); ++ if (ctrl->status) ++ break; ++ now = jiffies_to_msecs(jiffies); ++ } ++ } ++#endif ++ ++ /* store mdr value in case it was needed */ ++ if (ctrl->use_mdr) ++ ctrl->mdr = lbc->mdr; ++ ++ ctrl->use_mdr = 0; ++ ++ FCM_DEBUG(5,"fsl_elbc_run_command: stat=%08X mdr= %08X fmr= %08X\n", ++ ctrl->status, ctrl->mdr, lbc->fmr); ++ ++ /* returns 0 on success otherwise non-zero) */ ++ return (ctrl->status == LTESR_CC ? 0 : EFAULT); ++} ++ ++/* cmdfunc send commands to the FCM */ ++static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned command, ++ int column, int page_addr) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ volatile lbus83xx_t *lbc = ctrl->regs; ++ ++ ctrl->use_mdr = 0; ++ ++ /* clear the read buffer */ ++ ctrl->read_bytes = 0; ++ if (command != NAND_CMD_PAGEPROG) { ++ ctrl->index = 0; ++ ctrl->oobbuf = -1; ++ } ++ ++ switch (command) { ++ /* READ0 and READ1 read the entire buffer to use hardware ECC */ ++ case NAND_CMD_READ1: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_READ1, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ ctrl->index = column + 256; ++ goto read0; ++ case NAND_CMD_READ0: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_READ0, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ ctrl->index = column; ++read0: ++ if (nmtd->pgs) { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP3_SHIFT) | ++ (FIR_OP_RBW << FIR_OP4_SHIFT); ++ } else { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_RBW << FIR_OP3_SHIFT); ++ } ++ lbc->fcr = (NAND_CMD_READ0 << FCR_CMD0_SHIFT) | ++ (NAND_CMD_READSTART << FCR_CMD1_SHIFT); ++ lbc->fbcr = 0; /* read entire page to enable ECC */ ++ set_addr(mtd, 0, page_addr, 0); ++ ctrl->read_bytes = mtd->writesize + mtd->oobsize; ++ goto write_cmd2; ++ /* READOOB read only the OOB becasue no ECC is performed */ ++ case NAND_CMD_READOOB: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_READOOB, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ if (nmtd->pgs) { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP3_SHIFT) | ++ (FIR_OP_RBW << FIR_OP4_SHIFT); ++ lbc->fcr = (NAND_CMD_READ0 << FCR_CMD0_SHIFT) | ++ (NAND_CMD_READSTART << FCR_CMD1_SHIFT); ++ } else { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_RBW << FIR_OP3_SHIFT); ++ lbc->fcr = (NAND_CMD_READOOB << FCR_CMD0_SHIFT); ++ } ++ lbc->fbcr = mtd->oobsize - column; ++ set_addr(mtd, column, page_addr, 1); ++ ctrl->read_bytes = mtd->oobsize; ++ ctrl->index = column; ++ goto write_cmd2; ++ /* READID must read all 5 possible bytes while CEB is active */ ++ case NAND_CMD_READID: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_READID.\n"); ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_UA << FIR_OP1_SHIFT) | ++ (FIR_OP_RBW << FIR_OP2_SHIFT); ++ lbc->fcr = (NAND_CMD_READID << FCR_CMD0_SHIFT); ++ lbc->fbcr = 5; /* 5 bytes for manuf, device and exts */ ++ ctrl->use_mdr = 1; ++ ctrl->mdr = 0; ++ goto write_cmd0; ++ /* ERASE1 stores the block and page address */ ++ case NAND_CMD_ERASE1: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_ERASE1, page_addr:" ++ " 0x%x.\n", page_addr); ++ set_addr(mtd, 0, page_addr, 0); ++ goto end; ++ /* ERASE2 uses the block and page address from ERASE1 */ ++ case NAND_CMD_ERASE2: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_ERASE2.\n"); ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_PA << FIR_OP1_SHIFT) | ++ (FIR_OP_CM1 << FIR_OP2_SHIFT); ++ lbc->fcr = (NAND_CMD_ERASE1 << FCR_CMD0_SHIFT) | ++ (NAND_CMD_ERASE2 << FCR_CMD1_SHIFT); ++ lbc->fbcr = 0; ++ goto write_cmd1; ++ /* SEQIN sets up the addr buffer and all registers except the length */ ++ case NAND_CMD_SEQIN: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_SEQIN/PAGE_PROG, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ if (column == 0) { ++ lbc->fbcr = 0; /* write entire page to enable ECC */ ++ } else { ++ lbc->fbcr = 1; /* mark as partial page so no HW ECC */ ++ } ++ if (nmtd->pgs) { ++ /* always use READ0 for large page devices */ ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_WB << FIR_OP3_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP4_SHIFT); ++ lbc->fcr = (NAND_CMD_SEQIN << FCR_CMD0_SHIFT) | ++ (NAND_CMD_PAGEPROG << FCR_CMD1_SHIFT); ++ set_addr(mtd, column, page_addr, 0); ++ } else { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CM2 << FIR_OP1_SHIFT) | ++ (FIR_OP_CA << FIR_OP2_SHIFT) | ++ (FIR_OP_PA << FIR_OP3_SHIFT) | ++ (FIR_OP_WB << FIR_OP4_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP5_SHIFT); ++ if (column >= mtd->writesize) { ++ /* OOB area --> READOOB */ ++ column -= mtd->writesize; ++ lbc->fcr = (NAND_CMD_READOOB << FCR_CMD0_SHIFT) ++ | (NAND_CMD_PAGEPROG<< FCR_CMD1_SHIFT) ++ | (NAND_CMD_SEQIN << FCR_CMD2_SHIFT); ++ set_addr(mtd, column, page_addr, 1); ++ } else if (column < 256) { ++ /* First 256 bytes --> READ0 */ ++ lbc->fcr = (NAND_CMD_READ0 << FCR_CMD0_SHIFT) ++ | (NAND_CMD_PAGEPROG<< FCR_CMD1_SHIFT) ++ | (NAND_CMD_SEQIN << FCR_CMD2_SHIFT); ++ set_addr(mtd, column, page_addr, 0); ++ } else { ++ /* Second 256 bytes --> READ1 */ ++ column -= 256; ++ lbc->fcr = (NAND_CMD_READ1 << FCR_CMD0_SHIFT) ++ | (NAND_CMD_PAGEPROG<< FCR_CMD1_SHIFT) ++ | (NAND_CMD_SEQIN << FCR_CMD2_SHIFT); ++ set_addr(mtd, column, page_addr, 0); ++ } ++ } ++ goto end; ++ /* PAGEPROG reuses all of the setup from SEQIN and adds the length */ ++ case NAND_CMD_PAGEPROG: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_PAGEPROG" ++ " writing %d bytes.\n",ctrl->index); ++ /* if the write did not start at 0 or is not a full page */ ++ /* then set the exact length, otherwise use a full page */ ++ /* write so the HW generates the ECC. */ ++ if (lbc->fbcr || ++ (ctrl->index != (mtd->writesize + mtd->oobsize))) ++ lbc->fbcr = ctrl->index; ++ goto write_cmd2; ++ /* CMD_STATUS must read the status byte while CEB is active */ ++ /* Note - it does not wait for the ready line */ ++ case NAND_CMD_STATUS: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_STATUS.\n"); ++ lbc->fir = (FIR_OP_CM0 << FIR_OP0_SHIFT) | ++ (FIR_OP_RBW << FIR_OP1_SHIFT); ++ lbc->fcr = (NAND_CMD_STATUS << FCR_CMD0_SHIFT); ++ lbc->fbcr = 1; ++ goto write_cmd0; ++ /* RESET without waiting for the ready line */ ++ case NAND_CMD_RESET: ++ FCM_DEBUG(2,"fsl_elbc_cmdfunc: NAND_CMD_RESET.\n"); ++ lbc->fir = (FIR_OP_CM0 << FIR_OP0_SHIFT); ++ lbc->fcr = (NAND_CMD_RESET << FCR_CMD0_SHIFT); ++ lbc->fbcr = 0; ++ goto write_cmd0; ++ default: ++ printk("fsl_elbc_cmdfunc: error, unsupported command.\n"); ++ goto end; ++ } ++ ++ /* Short cuts fall through to save code */ ++ write_cmd0: ++ set_addr(mtd, 0, 0, 0); ++ write_cmd1: ++ ctrl->read_bytes = lbc->fbcr; ++ write_cmd2: ++ fsl_elbc_run_command(mtd); ++ ++#ifdef CONFIG_MTD_NAND_VERIFY_WRITE ++ /* if we wrote a page then read back the oob to get the ECC */ ++ if ((command == NAND_CMD_PAGEPROG) && ++ (chip->ecc.mode > NAND_ECC_SOFT) && ++ (lbc->fbcr == 0) && ++ (ctrl->oobbuf != 0) && ++ (ctrl->oobbuf != -1)) { ++ int i; ++ uint *oob_config; ++ unsigned char *oob_buf; ++ ++ i = ctrl->page; ++ oob_buf = (unsigned char*) ctrl->oobbuf; ++ oob_config = chip->ecc.layout->eccpos; ++ ++ /* wait for the write to complete and check it passed */ ++ if (!(chip->waitfunc(mtd, chip) & 0x01)) { ++ /* read back the OOB */ ++ fsl_elbc_cmdfunc(mtd, NAND_CMD_READOOB, 0, i); ++ /* if it succeeded then copy the ECC bytes */ ++ if (ctrl->status == LTESR_CC) { ++ for (i=0; i < chip->ecc.layout->eccbytes; i++) { ++ oob_buf[oob_config[i]] = ++ ctrl->addr[oob_config[i]]; ++ } ++ } ++ } ++ } ++#endif ++ ++ end: ++ return; ++} ++ ++/* select chip */ ++ ++static void fsl_elbc_select_chip(struct mtd_info *mtd, int chip) ++{ ++} ++ ++/* fsl_elbc_cmd_ctrl ++ * ++ * Issue command and address cycles to the chip ++*/ ++ ++static void fsl_elbc_cmd_ctrl(struct mtd_info *mtd, int dat, ++ unsigned int ctrl) ++{ ++} ++ ++/* fsl_elbc_dev_ready() ++ * ++ * returns 0 if the nand is busy, 1 if it is ready ++*/ ++ ++static int fsl_elbc_dev_ready(struct mtd_info *mtd) ++{ ++ return 0; ++} ++ ++/* ++ * FCM does not support 16 bit data busses ++ */ ++static u16 fsl_elbc_read_word(struct mtd_info *mtd) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_ctrl *ctrl = (struct fsl_elbc_ctrl *) chip->controller; ++ ++ dev_err(ctrl->device, "fsl_elbc_read_word: UNIMPLEMENTED.\n"); ++ return 0; ++} ++ ++/* ++ * Write buf to the FCM Controller Data Buffer ++ */ ++static void fsl_elbc_write_buf(struct mtd_info *mtd, const u_char *buf, int len) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ ++ FCM_DEBUG(3,"fsl_elbc_write_buf: writing %d bytes starting with 0x%lx" ++ " at %d.\n", len, *((unsigned long*) buf), ctrl->index); ++ ++ /* If armed catch the address of the OOB buffer so that it can be */ ++ /* updated with the real signature after the program comletes */ ++ if (!ctrl->oobbuf) ++ ctrl->oobbuf = (int) buf; ++ ++ /* copy the data into the FCM hardware buffer and update the index */ ++ memcpy(&(ctrl->addr[ctrl->index]), buf, len); ++ ctrl->index += len; ++ return; ++} ++ ++ ++/* ++ * read a byte from either the FCM hardware buffer if it has any data left ++ * otherwise issue a command to read a single byte. ++ */ ++static u_char fsl_elbc_read_byte(struct mtd_info *mtd) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ volatile lbus83xx_t *lbc = ctrl->regs; ++ unsigned char byte; ++ ++ /* If there are still bytes in the FCM then use the next byte */ ++ if(ctrl->index < ctrl->read_bytes) { ++ byte = ctrl->addr[(ctrl->index)++]; ++ FCM_DEBUG(4,"fsl_elbc_read_byte: byte %u (%02X): %d of %d.\n", ++ byte, byte, ctrl->index-1, ctrl->read_bytes); ++ } else { ++ /* otherwise issue a command to read 1 byte */ ++ lbc->fir = (FIR_OP_RSW << FIR_OP0_SHIFT); ++ ctrl->use_mdr = 1; ++ ctrl->read_bytes = 0; ++ ctrl->index = 0; ++ ctrl->read_bytes = 0; ++ ctrl->index = 0; ++ byte = fsl_elbc_run_command(mtd) ? ERR_BYTE : ctrl->mdr & 0xff; ++ FCM_DEBUG(4,"fsl_elbc_read_byte: byte %u (%02X) from bus.\n", ++ byte, byte); ++ } ++ ++ return byte; ++} ++ ++/* ++ * Read from the FCM Controller Data Buffer ++ */ ++static void fsl_elbc_read_buf(struct mtd_info *mtd, u_char* buf, int len) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ int i; ++ int rest; ++ unsigned long old_status; ++ ++ FCM_DEBUG(3,"fsl_elbc_read_buf: reading %d bytes.\n", len); ++ ++ /* see how much is still in the FCM buffer */ ++ i = min((unsigned int)len, (ctrl->read_bytes - ctrl->index)); ++ rest = len - i; ++ len = i; ++ ++ /* copying bytes even if there was an error so that the oob works */ ++ memcpy(buf, &(ctrl->addr[(ctrl->index)]), len); ++ ctrl->index += len; ++ ++ /* If more data is needed then issue another block read */ ++ if (rest) { ++ FCM_DEBUG(3,"fsl_elbc_read_buf: getting %d more bytes.\n", ++ rest); ++ ++ buf += len; ++ ++ /* keep last status in case it was an error */ ++ old_status = ctrl->status; ++ ++ /* read full next page to use HW ECC if enabled */ ++ fsl_elbc_cmdfunc(mtd, NAND_CMD_READ0, 0, ctrl->page + 1); ++ ++ /* preserve the worst status code */ ++ if (ctrl->status == LTESR_CC) ++ ctrl->status = old_status; ++ ++ fsl_elbc_read_buf(mtd, buf, rest); ++ } ++ return; ++} ++ ++ ++/* ++ * Verify buffer against the FCM Controller Data Buffer ++ */ ++static int fsl_elbc_verify_buf(struct mtd_info *mtd, const u_char *buf, int len) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ int i; ++ int rest; ++ ++ FCM_DEBUG(3,"fsl_elbc_verify_buf: checking %d bytes starting with 0x%02lx.\n", ++ len, *((unsigned long*) buf)); ++ ++ /* If last read failed then return error bytes */ ++ if (ctrl->status != LTESR_CC) { ++ return EFAULT; ++ } ++ ++ /* see how much is still in the FCM buffer */ ++ i = min((unsigned int)len, (ctrl->read_bytes - ctrl->index)); ++ rest = len - i; ++ len = i; ++ ++ if (memcmp(buf, &(ctrl->addr[(ctrl->index)]), len)) { ++ return EFAULT; ++ } ++ ++ ctrl->index += len; ++ if (rest) { ++ FCM_DEBUG(3,"fsl_elbc_verify_buf: getting %d more bytes.\n", rest); ++ buf += len; ++ ++ /* read full next page to use HW ECC if enabled */ ++ fsl_elbc_cmdfunc(mtd, NAND_CMD_READ0, 0, ctrl->page + 1); ++ ++ return fsl_elbc_verify_buf(mtd, buf, rest); ++ } ++ return 0; ++} ++ ++/* this function is called after Program and Erase Operations to ++ * check for success or failure */ ++static int fsl_elbc_wait(struct mtd_info *mtd, struct nand_chip *this) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ volatile lbus83xx_t *lbc = ctrl->regs; ++ ++ if (ctrl->status != LTESR_CC) { ++ return(0x1); /* Status Read error */ ++ } ++ ++ /* Use READ_STATUS command, but wait for the device to be ready */ ++ ctrl->use_mdr = 0; ++ ctrl->oobbuf = -1; ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_RBW << FIR_OP1_SHIFT); ++ lbc->fcr = (NAND_CMD_STATUS << FCR_CMD0_SHIFT); ++ set_addr(mtd, 0, 0, 0); ++ lbc->fbcr = 1; ++ ctrl->index = 0; ++ ctrl->read_bytes = lbc->fbcr; ++ fsl_elbc_run_command(mtd); ++ if (ctrl->status != LTESR_CC) { ++ return(0x1); /* Status Read error */ ++ } ++ return chip->read_byte(mtd); ++} ++ ++/* ECC handling functions */ ++ ++/* ++ * fsl_elbc_enable_hwecc - start ECC generation ++ */ ++static void fsl_elbc_enable_hwecc(struct mtd_info *mtd, int mode) ++{ ++ return; ++} ++ ++/* ++ * fsl_elbc_calculate_ecc - Calculate the ECC bytes ++ * This is done by hardware during the write process, so we use this ++ * to arm the oob buf capture on the next write_buf() call. The ECC bytes ++ * only need to be captured if CONFIG_MTD_NAND_VERIFY_WRITE is defined which ++ * reads back the pages and checks they match the data and oob buffers. ++ */ ++static int fsl_elbc_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code) ++{ ++#ifdef CONFIG_MTD_NAND_VERIFY_WRITE ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ ++ /* arm capture of oob buf ptr on next write_buf */ ++ ctrl->oobbuf = 0; ++#endif ++ return 0; ++} ++ ++/* ++ * fsl_elbc_correct_data - Detect and correct bit error(s) ++ * The detection and correction is done automatically by the hardware, ++ * if the complete page was read. If the status code is okay then there ++ * was no error, otherwise we return an error code indicating an uncorrectable ++ * error. ++ */ ++static int fsl_elbc_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ ++ /* No errors */ ++ if (ctrl->status == LTESR_CC) ++ return 0; ++ ++ return -1; /* uncorrectable error */ ++} ++ ++/*************************************************************************/ ++/* Chip setup and control functions */ ++/*************************************************************************/ ++ ++/* ++ * Dummy scan_bbt to complete setup of the FMR based on NAND size ++ */ ++static int fsl_elbc_chip_init_tail (struct mtd_info *mtd) ++{ ++ struct nand_chip *chip = mtd->priv; ++ struct fsl_elbc_mtd *nmtd = chip->priv; ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ volatile lbus83xx_t *lbc = ctrl->regs; ++ unsigned int i; ++ unsigned int al; ++ ++ /* calculate FMR Address Length field */ ++ al = 0; ++ for (i = chip->pagemask >> 16; i ; i >>= 8) { ++ al++; ++ } ++ ++ /* add to ECCM mode set in fsl_elbc_init */ ++ nmtd->fmr |= 12 << FMR_CWTO_SHIFT | /* Timeout > 12 mSecs */ ++ al << FMR_AL_SHIFT; ++ ++ FCM_DEBUG(1,"fsl_elbc_init: nand->options = %08X\n", chip->options); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->numchips = %10d\n", chip->numchips); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->chipsize = %10ld\n", chip->chipsize); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->pagemask = %10X\n", chip->pagemask); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->chip_delay = %8d\n", chip->chip_delay); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->badblockpos = %7d\n", chip->badblockpos); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->chip_shift = %8d\n", chip->chip_shift); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->page_shift = %8d\n", chip->page_shift); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->phys_erase_shift = %2d\n", ++ chip->phys_erase_shift); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->ecclayout= %10p\n", chip->ecclayout); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->eccmode = %10d\n", chip->ecc.mode ); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->eccsteps = %10d\n", chip->ecc.steps); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->eccsize = %10d\n", chip->ecc.size ); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->eccbytes = %10d\n", chip->ecc.bytes); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->ecctotal = %10d\n", chip->ecc.total); ++ FCM_DEBUG(1,"fsl_elbc_init: nand->ecclayout= %10p\n", chip->ecc.layout); ++ FCM_DEBUG(1,"fsl_elbc_init: mtd->flags = %08X\n", mtd->flags); ++ FCM_DEBUG(1,"fsl_elbc_init: mtd->size = %10d\n", mtd->size); ++ FCM_DEBUG(1,"fsl_elbc_init: mtd->erasesize = %10d\n", mtd->erasesize); ++ FCM_DEBUG(1,"fsl_elbc_init: mtd->writesize = %10d\n", mtd->writesize); ++ FCM_DEBUG(1,"fsl_elbc_init: mtd->oobsize = %10d\n", mtd->oobsize); ++ FCM_DEBUG(1,"fsl_elbc_init: mtd->ecctype = %10d\n", mtd->ecctype); ++ FCM_DEBUG(1,"fsl_elbc_init: mtd->eccsize = %10d\n", mtd->eccsize); ++ ++ /* adjust Option Register and ECC to match Flash page size */ ++ if (mtd->writesize == 512) ++ lbc->bank[nmtd->bank].or &= ~(OR_FCM_PGS); ++ else if (mtd->writesize == 2048) { ++ lbc->bank[nmtd->bank].or |= OR_FCM_PGS; ++ /* adjust ecc setup if needed */ ++ if ( (lbc->bank[nmtd->bank].br & BR_DECC) == BR_DECC_CHK_GEN) { ++ chip->ecc.size = 2048; ++ chip->ecc.steps = 1; ++//TODO chip->ecc.bytes += 9; ++//TODO chip->ecc.total += 9; ++ chip->ecc.layout = (nmtd->fmr & FMR_ECCM) ? ++ &fsl_elbc_oob_lp_eccm1 : &fsl_elbc_oob_lp_eccm0; ++ mtd->ecclayout = chip->ecc.layout; ++ } ++ } ++ else { ++ printk("fsl_elbc_init: page size %d is not supported\n", ++ mtd->writesize); ++ return -1; ++ } ++ nmtd->pgs = (lbc->bank[nmtd->bank].or>>OR_FCM_PGS_SHIFT) & 1; ++ ++ /* fix up the oobavail size in case the layout was changed */ ++ chip->ecc.layout->oobavail = 0; ++ for (i = 0; chip->ecc.layout->oobfree[i].length; i++) ++ chip->ecc.layout->oobavail += ++ chip->ecc.layout->oobfree[i].length; ++ ++ /* return to the default bbt_scan_routine */ ++ chip->scan_bbt = nand_default_bbt; ++ ++ /* restore complete options including the real SKIP_BBTSCAN setting */ ++ chip->options = nmtd->options; ++ ++ /* Check, if we should skip the bad block table scan */ ++ if (chip->options & NAND_SKIP_BBTSCAN) ++ return 0; ++ ++ return chip->scan_bbt(mtd); ++} ++/* fsl_elbc_chip_init ++ * ++ * init a single instance of an chip ++*/ ++ ++static int fsl_elbc_chip_init(struct fsl_elbc_mtd *nmtd) ++{ ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ volatile lbus83xx_t *lbc = ctrl->regs; ++ struct nand_chip *chip = &nmtd->chip; ++ ++ FCM_DEBUG(1,"eLBC Set Information for bank %d\n", nmtd->bank); ++ FCM_DEBUG(1," name = %s\n", ++ nmtd->pl_chip.name ? nmtd->pl_chip.name : "(NULL)"); ++ FCM_DEBUG(1," nr_chips = %d\n", nmtd->pl_chip.nr_chips); ++ FCM_DEBUG(1," partitions = %s\n", ++ nmtd->pl_chip.partitions_str ? ++ nmtd->pl_chip.partitions_str : "(NULL)"); ++ dev_dbg(nmtd->device,"eLBC Set Information for bank %d\n", nmtd->bank); ++ dev_dbg(nmtd->device," name = %s\n", ++ nmtd->name ? nmtd->name : "(NULL)"); ++ dev_dbg(nmtd->device," nr_chips = %d\n", nmtd->pl_chip.nr_chips); ++ dev_dbg(nmtd->device," partitions = %s\n", ++ nmtd->pl_chip.partitions_str ? ++ nmtd->pl_chip.partitions_str : "(NULL)"); ++ ++ /* Fill in fsl_elbc_mtd structure */ ++ nmtd->name = (char *) nmtd->pl_chip.name; ++ nmtd->mtd.name = nmtd->name; ++ nmtd->mtd.priv = chip; ++ nmtd->mtd.owner = THIS_MODULE; ++ nmtd->pgs = (lbc->bank[nmtd->bank].or>>OR_FCM_PGS_SHIFT) & 1; ++// TODO nmtd->fmr = FMR_ECCM; /* rest filled in later */ ++ nmtd->fmr = 0; /* rest filled in later */ ++ ++ /* fill in nand_chip structure */ ++ /* set physical base address from the Base Register */ ++ chip->IO_ADDR_W = (void __iomem*) (nmtd->pbase); ++ chip->IO_ADDR_R = chip->IO_ADDR_W; ++ ++ /* set up function call table */ ++// chip->hwcontrol = fsl_elbc_hwcontrol; ++ chip->read_byte = fsl_elbc_read_byte; ++ chip->read_word = fsl_elbc_read_word; ++ chip->write_buf = fsl_elbc_write_buf; ++ chip->read_buf = fsl_elbc_read_buf; ++ chip->verify_buf = fsl_elbc_verify_buf; ++ chip->select_chip = fsl_elbc_select_chip; ++// TODO chip->block_bad ++// TODO chip->block_markbad ++ chip->cmd_ctrl = fsl_elbc_cmd_ctrl; ++ chip->dev_ready = fsl_elbc_dev_ready; ++ chip->cmdfunc = fsl_elbc_cmdfunc; ++ chip->waitfunc = fsl_elbc_wait; ++ chip->scan_bbt = fsl_elbc_chip_init_tail; ++// TODO chip->errstat ++ ++ /* set up nand options */ ++ chip->options = NAND_NO_READRDY; ++ chip->chip_delay = 1; ++ ++ chip->controller = &ctrl->controller; ++ chip->priv = nmtd; ++ ++ /* If CS Base Register selects full hardware ECC then use it */ ++ if ( (lbc->bank[nmtd->bank].br & BR_DECC) == BR_DECC_CHK_GEN) { ++ chip->ecc.mode = NAND_ECC_HW; ++ chip->ecc.calculate = fsl_elbc_calculate_ecc; ++ chip->ecc.correct = fsl_elbc_correct_data; ++ chip->ecc.hwctl = fsl_elbc_enable_hwecc; ++ /* put in small page settings and adjust later if needed */ ++ chip->ecc.layout = (nmtd->fmr & FMR_ECCM) ? ++ &fsl_elbc_oob_sp_eccm1 : &fsl_elbc_oob_sp_eccm0; ++ chip->ecc.size = 512; ++ chip->ecc.bytes = 3; ++ } else { ++ /* otherwise fall back to default software ECC */ ++ chip->ecc.mode = NAND_ECC_SOFT; ++ } ++ ++ /* force BBT scan to get to custom scan_bbt for final settings */ ++ nmtd->options = chip->options; ++ chip-> options &= ~(NAND_SKIP_BBTSCAN); ++ ++ return 0; ++} ++ ++ ++ ++static int fsl_elbc_chip_remove(struct platform_device *pdev) ++{ ++ struct fsl_elbc_mtd *nmtd = platform_get_drvdata(pdev); ++ struct fsl_elbc_ctrl *ctrl = nmtd->ctrl; ++ ++ nand_release(&nmtd->mtd); ++ ++ if (nmtd->vbase != 0) { ++ iounmap((void __iomem*)nmtd->vbase); ++ nmtd->vbase = 0; ++ } ++ ++/* TODO ++ if (nmtd->area != NULL) { ++ release_resource(nmtd->area); ++ kfree(nmtd->area); ++ nmtd->area = NULL; ++ } ++*/ ++ ++ platform_set_drvdata(pdev, NULL); ++ ++ ctrl->nmtd[nmtd->bank] = NULL; ++ atomic_dec(&ctrl->childs_active); ++ ++ kfree(nmtd); ++ ++ return 0; ++} ++ ++#ifdef CONFIG_MTD_PARTITIONS ++const char *part_probes[] = { "cmdlinepart", NULL }; ++#endif ++ ++static int fsl_elbc_chip_probe(struct platform_device *pdev) ++{ ++ struct platform_fsl_nand_chip *pnc = pdev->dev.platform_data; ++ struct fsl_elbc_ctrl *ctrl = &elbc_ctrl; ++ volatile lbus83xx_t *lbc = ctrl->regs; ++ struct fsl_elbc_mtd *nmtd; ++ struct resource *res; ++ int err = 0; ++ int size; ++ int bank; ++ int mtd_parts_nb = 0; ++ struct mtd_partition *mtd_parts = 0; ++ ++ dev_dbg(&pdev->dev, "fsl_elbc_chip_probe(%p)\n", pdev); ++ ++ /* check that the platform data structure was supplied */ ++ if (pnc == NULL) { ++ dev_err(&pdev->dev,"Device needs a platform data structure\n"); ++ return -ENOENT; ++ } ++ ++ /* check that the device has a name */ ++ if (pnc->name == NULL) { ++ dev_err(&pdev->dev,"Device requires a name\n"); ++ return -ENOENT; ++ } ++ /* get, allocate and map the memory resource */ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (res == NULL) { ++ dev_err(&pdev->dev,"failed to get memory region resource\n"); ++ return -ENOENT; ++ } ++ /* find which chip select it is connected to */ ++ for (bank=0; bank < MAX_BANKS; bank++) { ++ if ( (lbc->bank[bank].br & BR_V) && ++ ((lbc->bank[bank].br & BR_MSEL) == BR_MS_FCM) && ++ ((lbc->bank[bank].br & lbc->bank[bank].or & BR_BA) == ++ res->start) ) { ++ break; ++ } ++ } ++ ++ if (bank >= MAX_BANKS) { ++ dev_err(&pdev->dev,"address did not match any chip selects\n"); ++ return -ENOENT; ++ } ++ ++ nmtd = kmalloc (sizeof(*nmtd), GFP_KERNEL); ++ if (!nmtd) { ++ dev_err(ctrl->device, "no memory for nand chip structure\n"); ++ return -ENOMEM; ++ } ++ memset(nmtd, 0, sizeof(*nmtd)); ++ ++ platform_set_drvdata(pdev, nmtd); ++ ++ atomic_inc(&ctrl->childs_active); ++ if (pnc) ++ memcpy(&(nmtd->pl_chip), pnc, sizeof(*pnc)); ++ ctrl->nmtd[bank] = nmtd; ++ nmtd->bank = bank; ++ nmtd->ctrl = ctrl; ++ nmtd->device = &pdev->dev; ++ ++ size = ( res->end - res->start ) + 1; ++/* TODO - already requested by the elbc instance ????? ++ ctrl->area = request_mem_region(res->start, size, pdev->name); ++ if (ctrl->area == NULL) { ++ dev_err(&pdev->dev, "failed to get memory region\n"); ++ err = -ENOENT; ++ goto exit_error; ++ } ++*/ ++ nmtd->pbase = res->start; ++ nmtd->vbase = (unsigned int) ioremap(nmtd->pbase, FCM_SIZE); ++ if (nmtd->vbase == 0) { ++ dev_err(ctrl->device, "failed to ioremap() memory region\n"); ++ err = -EIO; ++ goto exit_error; ++ } ++ ++ err = fsl_elbc_chip_init(nmtd); ++ if (err != 0) ++ goto exit_error; ++ ++ err = nand_scan(&nmtd->mtd, ++ nmtd->pl_chip.nr_chips ? nmtd->pl_chip.nr_chips : 1 ); ++ if (err != 0) ++ goto exit_error; ++ ++#ifdef CONFIG_MTD_PARTITIONS ++ /* check for command line partition information */ ++ if (!(nmtd->pl_chip.options & FSL_ELBC_NO_CMDLINE_PARTITIONS)) ++ mtd_parts_nb = parse_mtd_partitions( ++ &nmtd->mtd, ++ part_probes, ++ &mtd_parts, ++ 0); ++#if 0 ++ /* otherwise try local partition string */ ++ if (mtd_parts_nb <= 0 && nmtd->pl_chip.partitions_str) ++ mtd_parts_nb = parse_mtd_string_partitions( ++ &nmtd->mtd, ++ part_probes, ++ &mtd_parts, ++ 0, ++ nmtd->pl_chip.partitions_str); ++#endif ++ if (mtd_parts_nb > 0) ++ err = add_mtd_partitions(&nmtd->mtd, ++ mtd_parts, ++ mtd_parts_nb); ++ else ++#endif ++ err = add_mtd_device(&nmtd->mtd); ++ ++ if (err == 0) ++ return 0; ++ ++ exit_error: ++ fsl_elbc_chip_remove(pdev); ++ ++ if (err == 0) ++ err = -EINVAL; ++ return err; ++} ++ ++ ++/**************************************************************************/ ++/* Controller setup and control functions */ ++/**************************************************************************/ ++ ++static int fsl_elbc_ctrl_init(struct fsl_elbc_ctrl *ctrl, ++ struct platform_device *pdev) ++{ ++ volatile lbus83xx_t *lbc= (lbus83xx_t*) ctrl->regs; ++ ++ /* Enable only FCM detection of timeouts, ECC errors and completion */ ++ lbc->ltedr = ~(LTESR_FCT | LTESR_PAR | LTESR_CC); ++ ++ /* clear event registers */ ++ lbc->lteatr = 0; ++ lbc->ltesr |= (LTESR_FCT | LTESR_PAR | LTESR_CC); ++ ++ /* Enable interrupts for any detected events */ ++ lbc->lteir = ~0; ++ ++ ctrl->read_bytes = 0; ++ ctrl->index = 0; ++ ctrl->addr = (unsigned char*) (NULL); ++ ctrl->oobbuf = -1; ++ ++ return 0; ++} ++ ++static int fsl_elbc_ctrl_remove(struct platform_device *pdev) ++{ ++ struct fsl_elbc_ctrl *ctrl = platform_get_drvdata(pdev); ++ ++ if (atomic_read(&ctrl->childs_active)) ++ return -EBUSY; ++ ++ if (ctrl->regs != NULL) { ++ iounmap(ctrl->regs); ++ ctrl->regs = NULL; ++ } ++ ++/* TODO ++ if (ctrl->area != NULL) { ++ release_resource(ctrl->area); ++ kfree(ctrl->area); ++ ctrl->area = NULL; ++ } ++*/ ++ if (ctrl->irq) { ++ free_irq(ctrl->irq, pdev); ++ ctrl->irq = 0; ++ } ++ ++ platform_set_drvdata(pdev, NULL); ++ memset(ctrl, 0, sizeof(*ctrl)); ++ ++ return 0; ++} ++ ++ ++/* interrupt handler code */ ++ ++static irqreturn_t fsl_elbc_ctrl_irq(int irqno, void *param) ++{ ++ struct fsl_elbc_ctrl *ctrl = platform_get_drvdata((struct platform_device*)param); ++ volatile lbus83xx_t *lbc= (lbus83xx_t*) ctrl->regs; ++ ++ ctrl->irq_status = lbc->ltesr & (LTESR_FCT | LTESR_PAR | LTESR_CC); ++ if (ctrl->irq_status) ++ wake_up(&ctrl->irq_wait); ++ ++ /* clear event registers */ ++ lbc->lteatr = 0; ++ lbc->ltesr |= ctrl->irq_status; ++ ++ return IRQ_HANDLED; ++} ++ ++ ++/* fsl_elbc_ctrl_probe ++ * ++ * called by device layer when it finds a device matching ++ * one our driver can handled. This code allocates all of ++ * the resources needed for the controller only. The ++ * resources for the NAND banks themselves are allocated ++ * in the chip probe function. ++*/ ++ ++static int fsl_elbc_ctrl_probe(struct platform_device *pdev) ++{ ++ struct fsl_elbc_ctrl *ctrl; ++ struct resource *res; ++ int err = 0; ++ int size; ++ int ret; ++ ++ dev_dbg(&pdev->dev, "fsl_elbc_ctrl_probe(%p)\n", pdev); ++ ctrl = &elbc_ctrl; ++ ++ memset(ctrl, 0, sizeof(*ctrl)); ++ platform_set_drvdata(pdev, ctrl); ++ ++ spin_lock_init(&ctrl->controller.lock); ++ init_waitqueue_head(&ctrl->controller.wq); ++ init_waitqueue_head(&ctrl->irq_wait); ++ ++ /* get, allocate and map the memory resource */ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (res == NULL) { ++ dev_err(&pdev->dev,"failed to get memory region resouce\n"); ++ err = -ENOENT; ++ goto exit_error; ++ } ++ ++ size = ( res->end - res->start ) + 1; ++/* TODO - already requested by the elbc instance ????? ++ ctrl->area = request_mem_region(res->start, size, pdev->name); ++ if (ctrl->area == NULL) { ++ dev_err(&pdev->dev, "failed to get memory region\n"); ++ err = -ENOENT; ++ goto exit_error; ++ } ++*/ ++ ctrl->regs = ioremap(res->start, size); ++ if (ctrl->regs == 0) { ++ dev_err(&pdev->dev, "failed to ioremap() region\n"); ++ err = -EIO; ++ goto exit_error; ++ } ++ ++ /* get and allocate the irq resource */ ++ res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); ++ if (res == NULL) { ++ dev_err(&pdev->dev, "failed to get irq resource\n"); ++ err = -ENOENT; ++ goto exit_error; ++ } ++ ++ ret = request_irq(res->start, fsl_elbc_ctrl_irq, 0, pdev->name, pdev); ++ if (ret != 0) { ++ dev_err(&pdev->dev, "failed to install irq (%d)\n", ret); ++ err = -EIO; ++ goto exit_error; ++ } ++ ++ ctrl->irq = res->start; ++ ctrl->device = &pdev->dev; ++ dev_dbg(&pdev->dev, "mapped registers at %p\n", ctrl->regs); ++ ++ /* initialise the hardware */ ++ ++ err = fsl_elbc_ctrl_init(ctrl, pdev); ++ if (err == 0) ++ return 0; ++ ++ exit_error: ++ fsl_elbc_ctrl_remove(pdev); ++ ++ if (err == 0) ++ err = -EINVAL; ++ return err; ++} ++ ++/* PM Support */ ++#ifdef CONFIG_PM ++ ++static int fsl_elbc_ctrl_suspend(struct platform_device *dev, pm_message_t pm) ++{ ++ return 0; ++} ++ ++static int fsl_elbc_ctrl_resume(struct platform_device *dev) ++{ ++ return 0; ++} ++ ++#else ++#define fsl_elbc_ctrl_suspend NULL ++#define fsl_elbc_ctrl_resume NULL ++#endif ++ ++/*************************************************************************/ ++/* device driver registration */ ++/*************************************************************************/ ++ ++ ++static struct platform_driver fsl_elbc_ctrl_driver = { ++ .probe = fsl_elbc_ctrl_probe, ++ .remove = fsl_elbc_ctrl_remove, ++ .suspend = fsl_elbc_ctrl_suspend, ++ .resume = fsl_elbc_ctrl_resume, ++ .driver = { ++ .name = "fsl-elbc", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static struct platform_driver fsl_elbc_chip_driver = { ++ .probe = fsl_elbc_chip_probe, ++ .remove = fsl_elbc_chip_remove, ++ .driver = { ++ .name = "fsl-nand", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __init fsl_elbc_init(void) ++{ ++ int ret; ++ ++ printk("Freescale eLBC NAND Driver (C) 2006 Freescale\n"); ++ ++ ret = platform_driver_register(&fsl_elbc_ctrl_driver); ++ if (!ret) ++ ret = platform_driver_register(&fsl_elbc_chip_driver); ++ ++ return ret; ++} ++ ++static void __exit fsl_elbc_exit(void) ++{ ++ platform_driver_unregister(&fsl_elbc_chip_driver); ++ platform_driver_unregister(&fsl_elbc_ctrl_driver); ++} ++ ++module_init(fsl_elbc_init); ++module_exit(fsl_elbc_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Nick Spence"); ++MODULE_DESCRIPTION("Freescale Enhanced Local Bus Controller MTD NAND driver"); +diff -urN linux-2.6.24.orig/drivers/mtd/nand/Kconfig linux-2.6.24/drivers/mtd/nand/Kconfig +--- linux-2.6.24.orig/drivers/mtd/nand/Kconfig 2008-01-24 23:58:37.000000000 +0100 ++++ linux-2.6.24/drivers/mtd/nand/Kconfig 2008-02-18 16:39:43.000000000 +0100 +@@ -284,6 +284,14 @@ + depends on MTD_NAND && MACH_ARMCORE + + ++config MTD_NAND_FSL_ELBC ++ tristate "NAND support for MPC831x" ++ depends on MTD_NAND && PPC_MPC831x ++ help ++ The MPC831x includes a NAND FLASH Controller Module with built-in hardware ++ ECC capabilities. Enabling this This option will enable you to use these to ++ control external NAND device. ++ + config MTD_NAND_NANDSIM + tristate "Support for NAND Flash Simulator" + depends on MTD_PARTITIONS +diff -urN linux-2.6.24.orig/drivers/mtd/nand/Makefile linux-2.6.24/drivers/mtd/nand/Makefile +--- linux-2.6.24.orig/drivers/mtd/nand/Makefile 2008-01-24 23:58:37.000000000 +0100 ++++ linux-2.6.24/drivers/mtd/nand/Makefile 2008-02-18 16:40:08.000000000 +0100 +@@ -29,5 +29,6 @@ + obj-$(CONFIG_MTD_NAND_BASLER_EXCITE) += excite_nandflash.o + obj-$(CONFIG_MTD_NAND_PLATFORM) += plat_nand.o + obj-$(CONFIG_MTD_ALAUDA) += alauda.o ++obj-$(CONFIG_MTD_NAND_FSL_ELBC) += fsl_elbc.o + + nand-objs := nand_base.o nand_bbt.o +diff -urN linux-2.6.24.orig/include/linux/mtd/fsl_elbc.h linux-2.6.24/include/linux/mtd/fsl_elbc.h +--- linux-2.6.24.orig/include/linux/mtd/fsl_elbc.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24/include/linux/mtd/fsl_elbc.h 2008-02-18 16:39:43.000000000 +0100 +@@ -0,0 +1,313 @@ ++/* ++ * (C) Copyright 2004-2006 Freescale Semiconductor, Inc. ++ * ++ * Freescale Enhanced Local Bus Controller Internal Memory Map ++ * ++ * History : ++ * 20061010 : Extracted fomr immap_83xx.h ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * This 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 ++ * ++ */ ++#ifdef __KERNEL__ ++#ifndef __FSL_ELBC__ ++#define __FSL_ELBC__ ++ ++/* ++ * Local Bus Controller Registers ++ */ ++typedef struct lbus_bank{ ++ u32 br; /**< Base Register */ ++#define BR0 0x5000 ++#define BR1 0x5008 ++#define BR2 0x5010 ++#define BR3 0x5018 ++#define BR4 0x5020 ++#define BR5 0x5028 ++#define BR6 0x5030 ++#define BR7 0x5038 ++ ++#define BR_BA 0xFFFF8000 ++#define BR_BA_SHIFT 15 ++#define BR_PS 0x00001800 ++#define BR_PS_SHIFT 11 ++#define BR_PS_8 0x00000800 /* Port Size 8 bit */ ++#define BR_PS_16 0x00001000 /* Port Size 16 bit */ ++#define BR_PS_32 0x00001800 /* Port Size 32 bit */ ++#define BR_DECC 0x00000600 ++#define BR_DECC_SHIFT 9 ++#define BR_DECC_OFF 0x00000000 /* HW ECC checking and generation off */ ++#define BR_DECC_CHK 0x00000200 /* HW ECC checking on, generation off */ ++#define BR_DECC_CHK_GEN 0x00000400 /* HW ECC checking and generation on */ ++#define BR_WP 0x00000100 ++#define BR_WP_SHIFT 8 ++#define BR_MSEL 0x000000E0 ++#define BR_MSEL_SHIFT 5 ++#define BR_MS_GPCM 0x00000000 /* GPCM */ ++#define BR_MS_FCM 0x00000020 /* FCM */ ++#define BR_MS_SDRAM 0x00000060 /* SDRAM */ ++#define BR_MS_UPMA 0x00000080 /* UPMA */ ++#define BR_MS_UPMB 0x000000A0 /* UPMB */ ++#define BR_MS_UPMC 0x000000C0 /* UPMC */ ++#define BR_V 0x00000001 ++#define BR_V_SHIFT 0 ++#define BR_RES ~(BR_BA|BR_PS|BR_DECC|BR_WP|BR_MSEL|BR_V) ++ ++ u32 or; /**< Base Register */ ++#define OR0 0x5004 ++#define OR1 0x500C ++#define OR2 0x5014 ++#define OR3 0x501C ++#define OR4 0x5024 ++#define OR5 0x502C ++#define OR6 0x5034 ++#define OR7 0x503C ++ ++#define OR_GPCM_AM 0xFFFF8000 ++#define OR_GPCM_AM_SHIFT 15 ++#define OR_GPCM_BCTLD 0x00001000 ++#define OR_GPCM_BCTLD_SHIFT 12 ++#define OR_GPCM_CSNT 0x00000800 ++#define OR_GPCM_CSNT_SHIFT 11 ++#define OR_GPCM_ACS 0x00000600 ++#define OR_GPCM_ACS_SHIFT 9 ++#define OR_GPCM_ACS_0b10 0x00000400 ++#define OR_GPCM_ACS_0b11 0x00000600 ++#define OR_GPCM_XACS 0x00000100 ++#define OR_GPCM_XACS_SHIFT 8 ++#define OR_GPCM_SCY 0x000000F0 ++#define OR_GPCM_SCY_SHIFT 4 ++#define OR_GPCM_SCY_1 0x00000010 ++#define OR_GPCM_SCY_2 0x00000020 ++#define OR_GPCM_SCY_3 0x00000030 ++#define OR_GPCM_SCY_4 0x00000040 ++#define OR_GPCM_SCY_5 0x00000050 ++#define OR_GPCM_SCY_6 0x00000060 ++#define OR_GPCM_SCY_7 0x00000070 ++#define OR_GPCM_SCY_8 0x00000080 ++#define OR_GPCM_SCY_9 0x00000090 ++#define OR_GPCM_SCY_10 0x000000a0 ++#define OR_GPCM_SCY_11 0x000000b0 ++#define OR_GPCM_SCY_12 0x000000c0 ++#define OR_GPCM_SCY_13 0x000000d0 ++#define OR_GPCM_SCY_14 0x000000e0 ++#define OR_GPCM_SCY_15 0x000000f0 ++#define OR_GPCM_SETA 0x00000008 ++#define OR_GPCM_SETA_SHIFT 3 ++#define OR_GPCM_TRLX 0x00000004 ++#define OR_GPCM_TRLX_SHIFT 2 ++#define OR_GPCM_EHTR 0x00000002 ++#define OR_GPCM_EHTR_SHIFT 1 ++#define OR_GPCM_EAD 0x00000001 ++#define OR_GPCM_EAD_SHIFT 0 ++ ++#define OR_UPM_AM 0xFFFF8000 ++#define OR_UPM_AM_SHIFT 15 ++#define OR_UPM_XAM 0x00006000 ++#define OR_UPM_XAM_SHIFT 13 ++#define OR_UPM_BCTLD 0x00001000 ++#define OR_UPM_BCTLD_SHIFT 12 ++#define OR_UPM_BI 0x00000100 ++#define OR_UPM_BI_SHIFT 8 ++#define OR_UPM_TRLX 0x00000004 ++#define OR_UPM_TRLX_SHIFT 2 ++#define OR_UPM_EHTR 0x00000002 ++#define OR_UPM_EHTR_SHIFT 1 ++#define OR_UPM_EAD 0x00000001 ++#define OR_UPM_EAD_SHIFT 0 ++ ++#define OR_SDRAM_AM 0xFFFF8000 ++#define OR_SDRAM_AM_SHIFT 15 ++#define OR_SDRAM_XAM 0x00006000 ++#define OR_SDRAM_XAM_SHIFT 13 ++#define OR_SDRAM_COLS 0x00001C00 ++#define OR_SDRAM_COLS_SHIFT 10 ++#define OR_SDRAM_ROWS 0x000001C0 ++#define OR_SDRAM_ROWS_SHIFT 6 ++#define OR_SDRAM_PMSEL 0x00000020 ++#define OR_SDRAM_PMSEL_SHIFT 5 ++#define OR_SDRAM_EAD 0x00000001 ++#define OR_SDRAM_EAD_SHIFT 0 ++ ++#define OR_FCM_AM 0xFFFF8000 ++#define OR_FCM_AM_SHIFT 15 ++#define OR_FCM_BCTLD 0x00001000 ++#define OR_FCM_BCTLD_SHIFT 12 ++#define OR_FCM_PGS 0x00000400 ++#define OR_FCM_PGS_SHIFT 10 ++#define OR_FCM_CSCT 0x00000200 ++#define OR_FCM_CSCT_SHIFT 9 ++#define OR_FCM_CST 0x00000100 ++#define OR_FCM_CST_SHIFT 8 ++#define OR_FCM_CHT 0x00000080 ++#define OR_FCM_CHT_SHIFT 7 ++#define OR_FCM_SCY 0x00000070 ++#define OR_FCM_SCY_SHIFT 4 ++#define OR_FCM_SCY_1 0x00000010 ++#define OR_FCM_SCY_2 0x00000020 ++#define OR_FCM_SCY_3 0x00000030 ++#define OR_FCM_SCY_4 0x00000040 ++#define OR_FCM_SCY_5 0x00000050 ++#define OR_FCM_SCY_6 0x00000060 ++#define OR_FCM_SCY_7 0x00000070 ++#define OR_FCM_RST 0x00000008 ++#define OR_FCM_RST_SHIFT 3 ++#define OR_FCM_TRLX 0x00000004 ++#define OR_FCM_TRLX_SHIFT 2 ++#define OR_FCM_EHTR 0x00000002 ++#define OR_FCM_EHTR_SHIFT 1 ++} lbus_bank_t; ++ ++typedef struct lbus83xx { ++ lbus_bank_t bank[8]; ++ u8 res0[0x28]; ++ u32 mar; /**< UPM Address Register */ ++ u8 res1[0x4]; ++ u32 mamr; /**< UPMA Mode Register */ ++ u32 mbmr; /**< UPMB Mode Register */ ++ u32 mcmr; /**< UPMC Mode Register */ ++ u8 res2[0x8]; ++ u32 mrtpr; /**< Memory Refresh Timer Prescaler Register */ ++ u32 mdr; /**< UPM Data Register */ ++ u8 res3[0x4]; ++ u32 lsor; /**< Special Operation Initiation Register */ ++ u32 lsdmr; /**< SDRAM Mode Register */ ++ u8 res4[0x8]; ++ u32 lurt; /**< UPM Refresh Timer */ ++ u32 lsrt; /**< SDRAM Refresh Timer */ ++ u8 res5[0x8]; ++ u32 ltesr; /**< Transfer Error Status Register */ ++#define LTESR_BM 0x80000000 ++#define LTESR_FCT 0x40000000 ++#define LTESR_PAR 0x20000000 ++#define LTESR_WP 0x04000000 ++#define LTESR_ATMW 0x00800000 ++#define LTESR_ATMR 0x00400000 ++#define LTESR_CS 0x00080000 ++#define LTESR_CC 0x00000001 ++ u32 ltedr; /**< Transfer Error Disable Register */ ++ u32 lteir; /**< Transfer Error Interrupt Register */ ++ u32 lteatr; /**< Transfer Error Attributes Register */ ++ u32 ltear; /**< Transfer Error Address Register */ ++ u8 res6[0xC]; ++ u32 lbcr; /**< Configuration Register */ ++#define LBCR_LDIS 0x80000000 ++#define LBCR_LDIS_SHIFT 31 ++#define LBCR_BCTLC 0x00C00000 ++#define LBCR_BCTLC_SHIFT 22 ++#define LBCR_AHD 0x00200000 ++#define LBCR_LPBSE 0x00020000 ++#define LBCR_LPBSE_SHIFT 17 ++#define LBCR_EPAR 0x00010000 ++#define LBCR_EPAR_SHIFT 16 ++#define LBCR_BMT 0x0000FF00 ++#define LBCR_BMT_SHIFT 8 ++#define LBCR_INIT 0x00040000 ++ u32 lcrr; /**< Clock Ratio Register */ ++#define LCRR_DBYP 0x80000000 ++#define LCRR_DBYP_SHIFT 31 ++#define LCRR_BUFCMDC 0x30000000 ++#define LCRR_BUFCMDC_SHIFT 28 ++#define LCRR_ECL 0x03000000 ++#define LCRR_ECL_SHIFT 24 ++#define LCRR_EADC 0x00030000 ++#define LCRR_EADC_SHIFT 16 ++#define LCRR_CLKDIV 0x0000000F ++#define LCRR_CLKDIV_SHIFT 0 ++ u8 res7[0x8]; ++ u32 fmr; /**< Flash Mode Register */ ++#define FMR_CWTO 0x0000F000 ++#define FMR_CWTO_SHIFT 12 ++#define FMR_BOOT 0x00000800 ++#define FMR_ECCM 0x00000100 ++#define FMR_AL 0x00000030 ++#define FMR_AL_SHIFT 4 ++#define FMR_OP 0x00000003 ++#define FMR_OP_SHIFT 0 ++ u32 fir; /**< Flash Instruction Register */ ++#define FIR_OP0 0xF0000000 ++#define FIR_OP0_SHIFT 28 ++#define FIR_OP1 0x0F000000 ++#define FIR_OP1_SHIFT 24 ++#define FIR_OP2 0x00F00000 ++#define FIR_OP2_SHIFT 20 ++#define FIR_OP3 0x000F0000 ++#define FIR_OP3_SHIFT 16 ++#define FIR_OP4 0x0000F000 ++#define FIR_OP4_SHIFT 12 ++#define FIR_OP5 0x00000F00 ++#define FIR_OP5_SHIFT 8 ++#define FIR_OP6 0x000000F0 ++#define FIR_OP6_SHIFT 4 ++#define FIR_OP7 0x0000000F ++#define FIR_OP7_SHIFT 0 ++#define FIR_OP_NOP 0x0 /* No operation and end of sequence */ ++#define FIR_OP_CA 0x1 /* Issue current column address */ ++#define FIR_OP_PA 0x2 /* Issue current block+page address */ ++#define FIR_OP_UA 0x3 /* Issue user defined address */ ++#define FIR_OP_CM0 0x4 /* Issue command from FCR[CMD0] */ ++#define FIR_OP_CM1 0x5 /* Issue command from FCR[CMD1] */ ++#define FIR_OP_CM2 0x6 /* Issue command from FCR[CMD2] */ ++#define FIR_OP_CM3 0x7 /* Issue command from FCR[CMD3] */ ++#define FIR_OP_WB 0x8 /* Write FBCR bytes from FCM buffer */ ++#define FIR_OP_WS 0x9 /* Write 1 or 2 bytes from MDR[AS] */ ++#define FIR_OP_RB 0xA /* Read FBCR bytes to FCM buffer */ ++#define FIR_OP_RS 0xB /* Read 1 or 2 bytes to MDR[AS] */ ++#define FIR_OP_CW0 0xC /* Wait then issue FCR[CMD0] */ ++#define FIR_OP_CW1 0xD /* Wait then issue FCR[CMD1] */ ++#define FIR_OP_RBW 0xE /* Wait then read FBCR bytes */ ++#define FIR_OP_RSW 0xE /* Wait then read 1 or 2 bytes */ ++ u32 fcr; /**< Flash Command Register */ ++#define FCR_CMD0 0xFF000000 ++#define FCR_CMD0_SHIFT 24 ++#define FCR_CMD1 0x00FF0000 ++#define FCR_CMD1_SHIFT 16 ++#define FCR_CMD2 0x0000FF00 ++#define FCR_CMD2_SHIFT 8 ++#define FCR_CMD3 0x000000FF ++#define FCR_CMD3_SHIFT 0 ++ u32 fbar; /**< Flash Block Address Register */ ++#define FBAR_BLK 0x00FFFFFF ++ u32 fpar; /**< Flash Page Address Register */ ++#define FPAR_SP_PI 0x00007C00 ++#define FPAR_SP_PI_SHIFT 10 ++#define FPAR_SP_MS 0x00000200 ++#define FPAR_SP_CI 0x000001FF ++#define FPAR_SP_CI_SHIFT 0 ++#define FPAR_LP_PI 0x0003F000 ++#define FPAR_LP_PI_SHIFT 12 ++#define FPAR_LP_MS 0x00000800 ++#define FPAR_LP_CI 0x000007FF ++#define FPAR_LP_CI_SHIFT 0 ++ u32 fbcr; /**< Flash Byte Count Register */ ++#define FBCR_BC 0x00000FFF ++ u8 res11[0x8]; ++ u8 res8[0xF00]; ++} lbus83xx_t; ++ ++struct platform_fsl_nand_chip { ++ const char *name; ++ int nr_chips; ++ const char *partitions_str; ++ unsigned int options; ++}; ++ ++/* Setting this option prevents the command line from being parsed ++ * for MTD partitions. */ ++#define FSL_ELBC_NO_CMDLINE_PARTITIONS 0x10000000 ++ ++#endif /* __FSL_ELBC__ */ ++#endif /* __KERNEL__ */ diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb index afb45159c4..04470bdf03 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -7,7 +7,7 @@ DEFAULT_PREFERENCE_mpc8313e-rdb = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" -PR = "r5" +PR = "r6" 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 \ @@ -24,6 +24,7 @@ SRC_URI_append_gesbc-9302 = " \ " SRC_URI_append_mpc8313e-rdb = "\ + file://mpc831x-nand.patch;patch=1 \ file://mpc8313e-rdb-leds.patch;patch=1 \ file://mpc8313e-rdb-rtc.patch;patch=1" -- cgit v1.2.3 From 9b80ead019e6694a3eddf818975dd769fd139668 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 18 Feb 2008 17:25:10 +0000 Subject: xorg-lib: push a couple of autofoo patches upstream. partly closes 3828. --- packages/xorg-lib/libice/autofoo.patch | 1 + packages/xorg-lib/libxau/autofoo.patch | 1 + packages/xorg-lib/libxft/autofoo.patch | 1 + packages/xorg-lib/libxpm/autofoo.patch | 2 ++ 4 files changed, 5 insertions(+) diff --git a/packages/xorg-lib/libice/autofoo.patch b/packages/xorg-lib/libice/autofoo.patch index 8ab0585fb8..c5050816fc 100644 --- a/packages/xorg-lib/libice/autofoo.patch +++ b/packages/xorg-lib/libice/autofoo.patch @@ -1,3 +1,4 @@ +upstream: https://bugs.freedesktop.org/show_bug.cgi?id=14543 # # Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher diff --git a/packages/xorg-lib/libxau/autofoo.patch b/packages/xorg-lib/libxau/autofoo.patch index 1e42eb974d..852be49c1b 100644 --- a/packages/xorg-lib/libxau/autofoo.patch +++ b/packages/xorg-lib/libxau/autofoo.patch @@ -1,3 +1,4 @@ +upstream: https://bugs.freedesktop.org/show_bug.cgi?id=14544 # # Patch managed by http://www.holgerschurig.de/patcher.html diff --git a/packages/xorg-lib/libxft/autofoo.patch b/packages/xorg-lib/libxft/autofoo.patch index 54120aa612..da96b0b648 100644 --- a/packages/xorg-lib/libxft/autofoo.patch +++ b/packages/xorg-lib/libxft/autofoo.patch @@ -1,3 +1,4 @@ +upstream: https://bugs.freedesktop.org/show_bug.cgi?id=14545 # # Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher diff --git a/packages/xorg-lib/libxpm/autofoo.patch b/packages/xorg-lib/libxpm/autofoo.patch index 6b2174bf02..544843837f 100644 --- a/packages/xorg-lib/libxpm/autofoo.patch +++ b/packages/xorg-lib/libxpm/autofoo.patch @@ -1,3 +1,5 @@ +upstream: https://bugs.freedesktop.org/show_bug.cgi?id=14546 + Index: libXpm-3.5.1/configure.ac =================================================================== --- libXpm-3.5.1.orig/configure.ac 2004-05-11 02:00:35.000000000 -0400 -- cgit v1.2.3 From 0d3f844b104f15d15a7a328800d49e4fabcd0317 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 18 Feb 2008 20:06:40 +0000 Subject: openmoko.conf: change OVERRIDES line to catch up with DISTRO = angstrom in angstrom.inc * We need an openmoko override for where we diverge from Angstrom. --- conf/distro/openmoko.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/openmoko.conf b/conf/distro/openmoko.conf index b08e5f2ddb..f6968cee00 100644 --- a/conf/distro/openmoko.conf +++ b/conf/distro/openmoko.conf @@ -15,7 +15,7 @@ DISTRO_VERSION = "P1-Snapshot-${DATE}" #DISTRO_TYPE = "release" DISTRO_TYPE = "debug" -OVERRIDES = "local:${MACHINE}:${DISTRO}:angstrom:${TARGET_OS}:${TARGET_ARCH}:build-${BUILD_OS}:fail-fast:pn-${PN}" +OVERRIDES = "local:${MACHINE}:openmoko:angstrom:${TARGET_OS}:${TARGET_ARCH}:build-${BUILD_OS}:fail-fast:pn-${PN}" CVS_TARBALL_STASH = "http://downloads.openmoko.org/sources/" -- cgit v1.2.3 From 9ca92436dd93bfd5ef5042e7999d07beb42344c7 Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Mon, 18 Feb 2008 21:38:24 +0000 Subject: Hastily reverting back to a version of the kernel that will not risk corrupting SD cards. --- 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 e0df400ab1..3784303d19 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -47,7 +47,7 @@ SRCREV_pn-lightmediascanner ?= "68" SRCREV_pn-linux-bfin ?= "3758" SRCREV_pn-linux-hackndev-2.6 ?= "1308" SRCREV_pn-linux-ixp4xx ?= "1039" -SRCREV_pn-linux-openmoko ?= "4082" +SRCREV_pn-linux-openmoko ?= "4079" SRCREV_pn-llvm-gcc4 ?= "374" SRCREV_pn-llvm-gcc4-cross ?= "374" SRCREV_pn-maemo-mapper ?= "118" -- cgit v1.2.3 From 32d95e207b00b0d11e06e17904a6d71db5f70ca8 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 18 Feb 2008 22:27:02 +0000 Subject: libosso: Adjust dependencies --- packages/maemo4/libosso.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/maemo4/libosso.inc b/packages/maemo4/libosso.inc index 56437e625f..7af653ed44 100644 --- a/packages/maemo4/libosso.inc +++ b/packages/maemo4/libosso.inc @@ -1,7 +1,7 @@ LICENSE = "LGPL" -DESCRIPTION = "Nokia osso library" +DESCRIPTION = "Nokia OSSO IPC library" -DEPENDS = "dbus-glib glib-2.0" +DEPENDS = "dbus-glib glib-2.0 mce-dev" inherit autotools pkgconfig lib_package -- cgit v1.2.3 From 69a548babd09de74824c803379fba75719afe084 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 18 Feb 2008 22:59:12 +0000 Subject: psplash: Note upstream ref for logo-math.patch. --- packages/psplash/files/logo-math.patch | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/psplash/files/logo-math.patch b/packages/psplash/files/logo-math.patch index 87574b1855..21467af0ec 100644 --- a/packages/psplash/files/logo-math.patch +++ b/packages/psplash/files/logo-math.patch @@ -1,3 +1,5 @@ +upstream: http://bugzilla.openedhand.com/show_bug.cgi?id=801 +comment: Do better math when showing logo vs progressbar. --- psplash/psplash.c.org 2007-09-22 20:33:36.000000000 +0300 -- cgit v1.2.3 From 5bbd952b784fb5bd75832eb0ed15ee96c6ae22fd Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 18 Feb 2008 23:05:10 +0000 Subject: xorg-lib: Drop some unused patches --- packages/xorg-lib/libice/.mtn2git_empty | 0 packages/xorg-lib/libice/autofoo.patch | 22 ---------------- packages/xorg-lib/libsm/.mtn2git_empty | 0 packages/xorg-lib/libsm/autofoo.patch | 21 --------------- packages/xorg-lib/libxau/.mtn2git_empty | 0 packages/xorg-lib/libxau/autofoo.patch | 22 ---------------- packages/xorg-lib/libxaw/.mtn2git_empty | 0 packages/xorg-lib/libxaw/auxdir.patch | 10 -------- .../xorg-lib/libxcomposite-1.0.1/.mtn2git_empty | 0 .../xorg-lib/libxcomposite-1.0.1/autofoo.patch | 17 ------------ packages/xorg-lib/libxcursor-1.1.2/.mtn2git_empty | 0 packages/xorg-lib/libxcursor-1.1.2/autofoo.patch | 20 --------------- packages/xorg-lib/libxcursor/.mtn2git_empty | 0 packages/xorg-lib/libxcursor/autofoo.patch | 22 ---------------- packages/xorg-lib/libxdamage-1.0.1/.mtn2git_empty | 0 packages/xorg-lib/libxdamage-1.0.1/autofoo.patch | 17 ------------ packages/xorg-lib/libxdmcp/.mtn2git_empty | 0 packages/xorg-lib/libxdmcp/autofoo.patch | 22 ---------------- packages/xorg-lib/libxext/.mtn2git_empty | 0 packages/xorg-lib/libxext/autofoo.patch | 18 ------------- packages/xorg-lib/libxfixes/.mtn2git_empty | 0 packages/xorg-lib/libxfixes/autofoo.patch | 20 --------------- packages/xorg-lib/libxfont/autofoo.patch | 18 ------------- packages/xorg-lib/libxft/autofoo.patch | 22 ---------------- packages/xorg-lib/libxi/autofoo.patch | 12 --------- packages/xorg-lib/libxpm/autofoo.patch | 20 --------------- packages/xorg-lib/libxrandr-1.0.2/.mtn2git_empty | 0 packages/xorg-lib/libxrandr-1.0.2/autofoo.patch | 20 --------------- packages/xorg-lib/libxrandr/.mtn2git_empty | 0 packages/xorg-lib/libxrandr/autofoo.patch | 30 ---------------------- packages/xorg-lib/libxrender/.mtn2git_empty | 0 packages/xorg-lib/libxrender/autofoo.patch | 20 --------------- packages/xorg-lib/libxt/.mtn2git_empty | 0 packages/xorg-lib/libxt/autofoo.patch | 20 --------------- 34 files changed, 373 deletions(-) delete mode 100644 packages/xorg-lib/libice/.mtn2git_empty delete mode 100644 packages/xorg-lib/libice/autofoo.patch delete mode 100644 packages/xorg-lib/libsm/.mtn2git_empty delete mode 100644 packages/xorg-lib/libsm/autofoo.patch delete mode 100644 packages/xorg-lib/libxau/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxau/autofoo.patch delete mode 100644 packages/xorg-lib/libxaw/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxaw/auxdir.patch delete mode 100644 packages/xorg-lib/libxcomposite-1.0.1/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxcomposite-1.0.1/autofoo.patch delete mode 100644 packages/xorg-lib/libxcursor-1.1.2/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxcursor-1.1.2/autofoo.patch delete mode 100644 packages/xorg-lib/libxcursor/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxcursor/autofoo.patch delete mode 100644 packages/xorg-lib/libxdamage-1.0.1/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxdamage-1.0.1/autofoo.patch delete mode 100644 packages/xorg-lib/libxdmcp/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxdmcp/autofoo.patch delete mode 100644 packages/xorg-lib/libxext/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxext/autofoo.patch delete mode 100644 packages/xorg-lib/libxfixes/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxfixes/autofoo.patch delete mode 100644 packages/xorg-lib/libxfont/autofoo.patch delete mode 100644 packages/xorg-lib/libxft/autofoo.patch delete mode 100644 packages/xorg-lib/libxi/autofoo.patch delete mode 100644 packages/xorg-lib/libxpm/autofoo.patch delete mode 100644 packages/xorg-lib/libxrandr-1.0.2/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxrandr-1.0.2/autofoo.patch delete mode 100644 packages/xorg-lib/libxrandr/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxrandr/autofoo.patch delete mode 100644 packages/xorg-lib/libxrender/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxrender/autofoo.patch delete mode 100644 packages/xorg-lib/libxt/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxt/autofoo.patch diff --git a/packages/xorg-lib/libice/.mtn2git_empty b/packages/xorg-lib/libice/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libice/autofoo.patch b/packages/xorg-lib/libice/autofoo.patch deleted file mode 100644 index c5050816fc..0000000000 --- a/packages/xorg-lib/libice/autofoo.patch +++ /dev/null @@ -1,22 +0,0 @@ -upstream: https://bugs.freedesktop.org/show_bug.cgi?id=14543 - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- libICE-6.3.3/configure.ac~autofoo 2004-05-11 01:50:07.000000000 -0400 -+++ libICE-6.3.3/configure.ac 2005-01-18 02:30:07.463895544 -0500 -@@ -8,12 +8,12 @@ - libICE) - - AC_CONFIG_SRCDIR([Makefile.am]) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER([config.h]) --AC_CONFIG_AUX_DIR(.) - - # Checks for programs. - AC_PROG_LIBTOOL diff --git a/packages/xorg-lib/libsm/.mtn2git_empty b/packages/xorg-lib/libsm/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libsm/autofoo.patch b/packages/xorg-lib/libsm/autofoo.patch deleted file mode 100644 index 8cb204a66e..0000000000 --- a/packages/xorg-lib/libsm/autofoo.patch +++ /dev/null @@ -1,21 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- libSM-6.0.3/configure.ac~autofoo 2004-05-11 01:51:21.000000000 -0400 -+++ libSM-6.0.3/configure.ac 2005-01-18 12:15:50.405356376 -0500 -@@ -8,12 +8,12 @@ - libSM) - - AC_CONFIG_SRCDIR([Makefile.am]) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER([config.h]) --AC_CONFIG_AUX_DIR(.) - - # Checks for programs. - AC_PROG_LIBTOOL diff --git a/packages/xorg-lib/libxau/.mtn2git_empty b/packages/xorg-lib/libxau/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxau/autofoo.patch b/packages/xorg-lib/libxau/autofoo.patch deleted file mode 100644 index 852be49c1b..0000000000 --- a/packages/xorg-lib/libxau/autofoo.patch +++ /dev/null @@ -1,22 +0,0 @@ -upstream: https://bugs.freedesktop.org/show_bug.cgi?id=14544 - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- libXau-0.1.1/configure.ac~autofoo -+++ libXau-0.1.1/configure.ac -@@ -25,11 +25,10 @@ - - AC_PREREQ([2.57]) - AC_INIT(libXau, [0.1.1], [keithp@keithp.com],libXau) --AM_INIT_AUTOMAKE([dist-bzip2]) --AM_MAINTAINER_MODE -- - AM_CONFIG_HEADER(config.h) - AC_CONFIG_AUX_DIR(.) -+AM_INIT_AUTOMAKE([dist-bzip2]) -+AM_MAINTAINER_MODE - - AC_PROG_CC - AC_PROG_INSTALL diff --git a/packages/xorg-lib/libxaw/.mtn2git_empty b/packages/xorg-lib/libxaw/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxaw/auxdir.patch b/packages/xorg-lib/libxaw/auxdir.patch deleted file mode 100644 index 4226ab6a4d..0000000000 --- a/packages/xorg-lib/libxaw/auxdir.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- /tmp/configure.ac 2005-06-17 21:26:17.519157272 +0200 -+++ libXaw-7.0.2/configure.ac 2005-06-17 21:26:34.832525240 +0200 -@@ -10,7 +10,6 @@ - AM_INIT_AUTOMAKE([dist-bzip2]) - - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - # Check for progs - AC_PROG_CC diff --git a/packages/xorg-lib/libxcomposite-1.0.1/.mtn2git_empty b/packages/xorg-lib/libxcomposite-1.0.1/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxcomposite-1.0.1/autofoo.patch b/packages/xorg-lib/libxcomposite-1.0.1/autofoo.patch deleted file mode 100644 index 072cf25214..0000000000 --- a/packages/xorg-lib/libxcomposite-1.0.1/autofoo.patch +++ /dev/null @@ -1,17 +0,0 @@ -Index: libXcomposite-1.0.1/configure.ac -=================================================================== ---- libXcomposite-1.0.1.orig/configure.ac 2004-01-15 03:59:12.000000000 -0500 -+++ libXcomposite-1.0.1/configure.ac 2005-01-18 17:05:25.573929256 -0500 -@@ -33,11 +33,11 @@ - dnl protocol, so Xfixes version l.n.m corresponds to protocol version l.n - dnl - AC_INIT(libXcomposite, 1.0.1, [keithp@keithp.com], libXcomposite) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - # Check for progs - AC_PROG_CC diff --git a/packages/xorg-lib/libxcursor-1.1.2/.mtn2git_empty b/packages/xorg-lib/libxcursor-1.1.2/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxcursor-1.1.2/autofoo.patch b/packages/xorg-lib/libxcursor-1.1.2/autofoo.patch deleted file mode 100644 index 99cd45a7ea..0000000000 --- a/packages/xorg-lib/libxcursor-1.1.2/autofoo.patch +++ /dev/null @@ -1,20 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- libXcursor-1.1.2/configure.ac~autofoo 2004-01-16 23:38:26.000000000 -0500 -+++ libXcursor-1.1.2/configure.ac 2005-01-18 13:40:06.539707120 -0500 -@@ -31,11 +31,11 @@ - dnl not possible to extract the version number here from Xcursor.h - dnl - AC_INIT([libXcursor],1.1.2,[keithp@keithp.com],[libXcursor]) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AC_CONFIG_SRCDIR([Makefile.am]) - AM_MAINTAINER_MODE - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - dnl libtool versioning - diff --git a/packages/xorg-lib/libxcursor/.mtn2git_empty b/packages/xorg-lib/libxcursor/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxcursor/autofoo.patch b/packages/xorg-lib/libxcursor/autofoo.patch deleted file mode 100644 index 7aa573ce13..0000000000 --- a/packages/xorg-lib/libxcursor/autofoo.patch +++ /dev/null @@ -1,22 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - -Index: Xcursor/configure.ac -=================================================================== ---- Xcursor.orig/configure.ac 2004-04-12 10:11:12.000000000 -0400 -+++ Xcursor/configure.ac 2005-01-18 16:04:36.860617992 -0500 -@@ -31,11 +31,11 @@ - dnl not possible to extract the version number here from Xcursor.h - dnl - AC_INIT([libXcursor],1.1.3,[keithp@keithp.com],[libXcursor]) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AC_CONFIG_SRCDIR([Makefile.am]) - AM_MAINTAINER_MODE - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - dnl libtool versioning - diff --git a/packages/xorg-lib/libxdamage-1.0.1/.mtn2git_empty b/packages/xorg-lib/libxdamage-1.0.1/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxdamage-1.0.1/autofoo.patch b/packages/xorg-lib/libxdamage-1.0.1/autofoo.patch deleted file mode 100644 index 1e3ec45d4a..0000000000 --- a/packages/xorg-lib/libxdamage-1.0.1/autofoo.patch +++ /dev/null @@ -1,17 +0,0 @@ -Index: libXdamage-1.0.1/configure.ac -=================================================================== ---- libXdamage-1.0.1.orig/configure.ac 2004-01-15 03:54:55.000000000 -0500 -+++ libXdamage-1.0.1/configure.ac 2005-01-18 19:07:16.951430928 -0500 -@@ -33,11 +33,11 @@ - dnl protocol, so Xfixes version l.n.m corresponds to protocol version l.n - dnl - AC_INIT(libXdamage, 1.0.1, [keithp@keithp.com], libXdamage) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - # Check for progs - AC_PROG_CC diff --git a/packages/xorg-lib/libxdmcp/.mtn2git_empty b/packages/xorg-lib/libxdmcp/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxdmcp/autofoo.patch b/packages/xorg-lib/libxdmcp/autofoo.patch deleted file mode 100644 index ff1a76ad04..0000000000 --- a/packages/xorg-lib/libxdmcp/autofoo.patch +++ /dev/null @@ -1,22 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- libXdmcp-0.1.3/configure.ac~autofoo -+++ libXdmcp-0.1.3/configure.ac -@@ -25,12 +25,11 @@ - - AC_PREREQ([2.57]) - AC_INIT(libXdmcp, [0.1.3], [keithp@keithp.com],libXdmcp) -+AC_CONFIG_AUX_DIR(.) -+AC_CONFIG_HEADERS([include/X11/Xdmcpconf.h]) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE -- - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) --AC_CONFIG_HEADERS([include/X11/Xdmcpconf.h]) - - AC_PROG_CC - AC_PROG_INSTALL diff --git a/packages/xorg-lib/libxext/.mtn2git_empty b/packages/xorg-lib/libxext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxext/autofoo.patch b/packages/xorg-lib/libxext/autofoo.patch deleted file mode 100644 index c006884526..0000000000 --- a/packages/xorg-lib/libxext/autofoo.patch +++ /dev/null @@ -1,18 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- Xext/configure.ac~autofoo -+++ Xext/configure.ac -@@ -8,9 +8,8 @@ - libXext) - - AC_CONFIG_SRCDIR([Makefile.am]) --AM_INIT_AUTOMAKE([dist-bzip2]) -- - AC_CONFIG_AUX_DIR(.) -+AM_INIT_AUTOMAKE([dist-bzip2]) - - AM_MAINTAINER_MODE - diff --git a/packages/xorg-lib/libxfixes/.mtn2git_empty b/packages/xorg-lib/libxfixes/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxfixes/autofoo.patch b/packages/xorg-lib/libxfixes/autofoo.patch deleted file mode 100644 index 26803cf7f3..0000000000 --- a/packages/xorg-lib/libxfixes/autofoo.patch +++ /dev/null @@ -1,20 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- libXfixes-2.0.1/configure.ac~autofoo 2004-01-15 03:40:23.000000000 -0500 -+++ libXfixes-2.0.1/configure.ac 2005-01-18 13:35:33.461221360 -0500 -@@ -33,11 +33,11 @@ - dnl protocol, so Xfixes version l.n.m corresponds to protocol version l.n - dnl - AC_INIT(libXfixes, 2.0.1, [keithp@keithp.com], libXfixes) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - # Check for progs - AC_PROG_CC diff --git a/packages/xorg-lib/libxfont/autofoo.patch b/packages/xorg-lib/libxfont/autofoo.patch deleted file mode 100644 index 4998625c24..0000000000 --- a/packages/xorg-lib/libxfont/autofoo.patch +++ /dev/null @@ -1,18 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- libXfont-1.4.2/configure.ac~autofoo 2004-05-06 20:19:03.000000000 -0400 -+++ libXfont-1.4.2/configure.ac 2005-01-16 12:14:14.042598720 -0500 -@@ -35,9 +35,9 @@ - dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's - dnl not possible to extract the version number here from Xfont.h - dnl -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - AC_CONFIG_HEADERS([include/X11/fonts/fontconf.h]) - - # Check for progs diff --git a/packages/xorg-lib/libxft/autofoo.patch b/packages/xorg-lib/libxft/autofoo.patch deleted file mode 100644 index da96b0b648..0000000000 --- a/packages/xorg-lib/libxft/autofoo.patch +++ /dev/null @@ -1,22 +0,0 @@ -upstream: https://bugs.freedesktop.org/show_bug.cgi?id=14545 - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- libXft-2.1.6/configure.ac~autofoo 2004-03-22 10:02:59.000000000 -0500 -+++ libXft-2.1.6/configure.ac 2005-01-17 02:08:10.165951760 -0500 -@@ -33,12 +33,12 @@ - dnl Please bump the minor library number at each release as well. - dnl - AC_INIT(libXft, 2.1.6, [keithp@keithp.com], libXft) -+AC_CONFIG_AUX_DIR(.) - - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - # checks for progs - AC_PROG_CC diff --git a/packages/xorg-lib/libxi/autofoo.patch b/packages/xorg-lib/libxi/autofoo.patch deleted file mode 100644 index f1bce9ed7a..0000000000 --- a/packages/xorg-lib/libxi/autofoo.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: libXi-6.0.1/configure.ac -=================================================================== ---- libXi-6.0.1.orig/configure.ac 2003-11-01 04:11:49.000000000 -0500 -+++ libXi-6.0.1/configure.ac 2005-01-20 11:34:06.878357352 -0500 -@@ -8,7 +8,6 @@ - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER([config.h]) --AC_CONFIG_AUX_DIR(.) - - # Checks for programs. - AC_PROG_LIBTOOL diff --git a/packages/xorg-lib/libxpm/autofoo.patch b/packages/xorg-lib/libxpm/autofoo.patch deleted file mode 100644 index 544843837f..0000000000 --- a/packages/xorg-lib/libxpm/autofoo.patch +++ /dev/null @@ -1,20 +0,0 @@ -upstream: https://bugs.freedesktop.org/show_bug.cgi?id=14546 - -Index: libXpm-3.5.1/configure.ac -=================================================================== ---- libXpm-3.5.1.orig/configure.ac 2004-05-11 02:00:35.000000000 -0400 -+++ libXpm-3.5.1/configure.ac 2005-01-19 18:35:57.187402008 -0500 -@@ -1,12 +1,12 @@ - AC_PREREQ(2.57) - AC_INIT([libXpm], 3.5.1, [daniel@freedesktop.org], libXpm) - AC_CONFIG_SRCDIR([Makefile.am]) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER([lib/config.h]) --AC_CONFIG_AUX_DIR(.) - - # Checks for programs. - AC_PROG_LIBTOOL diff --git a/packages/xorg-lib/libxrandr-1.0.2/.mtn2git_empty b/packages/xorg-lib/libxrandr-1.0.2/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxrandr-1.0.2/autofoo.patch b/packages/xorg-lib/libxrandr-1.0.2/autofoo.patch deleted file mode 100644 index 21f6e7fd78..0000000000 --- a/packages/xorg-lib/libxrandr-1.0.2/autofoo.patch +++ /dev/null @@ -1,20 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- libXrandr-1.0.2/configure.ac~autofoo 2004-01-15 03:23:00.000000000 -0500 -+++ libXrandr-1.0.2/configure.ac 2005-01-16 11:18:35.924069872 -0500 -@@ -33,11 +33,11 @@ - dnl protocol, so Xrandr version l.n.m corresponds to protocol version l.n - dnl - AC_INIT(libXrandr, 1.0.2, [keithp@keithp.com], libXrandr) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - # Check for progs - AC_PROG_CC diff --git a/packages/xorg-lib/libxrandr/.mtn2git_empty b/packages/xorg-lib/libxrandr/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxrandr/autofoo.patch b/packages/xorg-lib/libxrandr/autofoo.patch deleted file mode 100644 index 7b1db760f2..0000000000 --- a/packages/xorg-lib/libxrandr/autofoo.patch +++ /dev/null @@ -1,30 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- Xrandr/configure.ac~autofoo.patch 2004-07-01 15:01:55.000000000 -0400 -+++ Xrandr/configure.ac 2005-01-16 11:22:09.169651616 -0500 -@@ -33,11 +33,11 @@ - dnl protocol, so Xrandr version l.n.m corresponds to protocol version l.n - dnl - AC_INIT(libXrandr, 1.0.2, [keithp@keithp.com], libXrandr) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - # Check for progs - AC_PROG_CC ---- Xrandr/ChangeLog~autofoo.patch 2004-09-19 04:53:38.000000000 -0400 -+++ Xrandr/ChangeLog 2005-01-16 11:52:29.694889712 -0500 -@@ -1,3 +1,7 @@ -+2005-01-16 Chris Larson -+ -+ * configure.ac: Fix to work with automake 1.9.x. -+ - 2004-09-19 Carlos Romero - - * Makefile.am: diff --git a/packages/xorg-lib/libxrender/.mtn2git_empty b/packages/xorg-lib/libxrender/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxrender/autofoo.patch b/packages/xorg-lib/libxrender/autofoo.patch deleted file mode 100644 index eb21c766f8..0000000000 --- a/packages/xorg-lib/libxrender/autofoo.patch +++ /dev/null @@ -1,20 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- libXrender-0.8.4/configure.ac~autofoo -+++ libXrender-0.8.4/configure.ac -@@ -33,11 +33,10 @@ - dnl protocol, so Xrender version l.n.m corresponds to protocol version l.n - dnl - AC_INIT(libXrender, 0.8.4, [keithp@keithp.com], libXrender) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE -- - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - # Check for progs - AC_PROG_CC diff --git a/packages/xorg-lib/libxt/.mtn2git_empty b/packages/xorg-lib/libxt/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxt/autofoo.patch b/packages/xorg-lib/libxt/autofoo.patch deleted file mode 100644 index ff6dfdbbcc..0000000000 --- a/packages/xorg-lib/libxt/autofoo.patch +++ /dev/null @@ -1,20 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- libXt-0.1.5/configure.ac~autofoo 2004-05-06 20:19:04.000000000 -0400 -+++ libXt-0.1.5/configure.ac 2005-01-18 13:10:13.683262728 -0500 -@@ -28,11 +28,11 @@ - dnl - dnl - AC_INIT(libXt, 0.1.5, [keithp@keithp.com], libXt) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER(config.h) --AC_CONFIG_AUX_DIR(.) - - # Check for progs - AC_PROG_CC -- cgit v1.2.3 From 47958ec67e67f9f8ff4e425345ed72d7cbf16a8c Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 18 Feb 2008 23:30:36 +0000 Subject: xserver-kdrive-xomap: use fix-picturestr-include-order patch to fix compatibility with more modern xrender --- .../xorg-xserver/files/fix-picturestr-include-order.patch | 15 +++++++++++++++ packages/xorg-xserver/xserver-kdrive-xomap_1.1.99.3.bb | 2 ++ .../xserver-kdrive/fix-picturestr-include-order.patch | 15 --------------- 3 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 packages/xorg-xserver/files/fix-picturestr-include-order.patch delete mode 100644 packages/xorg-xserver/xserver-kdrive/fix-picturestr-include-order.patch diff --git a/packages/xorg-xserver/files/fix-picturestr-include-order.patch b/packages/xorg-xserver/files/fix-picturestr-include-order.patch new file mode 100644 index 0000000000..3da235e1e1 --- /dev/null +++ b/packages/xorg-xserver/files/fix-picturestr-include-order.patch @@ -0,0 +1,15 @@ +# Reverse include order in render/picturestr.h to be able to compile against renderproto >= 0.9.3 +Index: xorg-server-1.2.0/render/picturestr.h +=================================================================== +--- xorg-server-1.2.0.orig/render/picturestr.h 2008-02-09 22:54:46.000000000 +0100 ++++ xorg-server-1.2.0/render/picturestr.h 2008-02-09 22:54:50.000000000 +0100 +@@ -26,8 +26,8 @@ + #ifndef _PICTURESTR_H_ + #define _PICTURESTR_H_ + +-#include "glyphstr.h" + #include "scrnintstr.h" ++#include "glyphstr.h" + #include "resource.h" + + typedef struct _DirectFormat { diff --git a/packages/xorg-xserver/xserver-kdrive-xomap_1.1.99.3.bb b/packages/xorg-xserver/xserver-kdrive-xomap_1.1.99.3.bb index 372971e2ed..9a8db266b6 100644 --- a/packages/xorg-xserver/xserver-kdrive-xomap_1.1.99.3.bb +++ b/packages/xorg-xserver/xserver-kdrive-xomap_1.1.99.3.bb @@ -7,6 +7,7 @@ SECTION = "x11/base" DESCRIPTION = "X server from freedesktop.org" DESCRIPTION_xserver-kdrive-xomap = "X server for the OMAP in the Nokia 800" +PR = "r1" PE = "1" COMPATIBLE_MACHINE = "nokia(800|770)" @@ -23,6 +24,7 @@ SRC_URI = "http://repository.maemo.org/pool/maemo3.1/free/source/xorg-server_1.1 file://fixups.patch;patch=1 \ file://button_only.patch;patch=1 \ file://calibrateext.patch;patch=1 \ + file://fix-picturestr-include-order.patch;patch=1 \ file://xcalibrate_coords.patch;patch=1" # file://kdrive-evdev.patch;patch=1 \ # file://kdrive-use-evdev.patch;patch=1 \ diff --git a/packages/xorg-xserver/xserver-kdrive/fix-picturestr-include-order.patch b/packages/xorg-xserver/xserver-kdrive/fix-picturestr-include-order.patch deleted file mode 100644 index 3da235e1e1..0000000000 --- a/packages/xorg-xserver/xserver-kdrive/fix-picturestr-include-order.patch +++ /dev/null @@ -1,15 +0,0 @@ -# Reverse include order in render/picturestr.h to be able to compile against renderproto >= 0.9.3 -Index: xorg-server-1.2.0/render/picturestr.h -=================================================================== ---- xorg-server-1.2.0.orig/render/picturestr.h 2008-02-09 22:54:46.000000000 +0100 -+++ xorg-server-1.2.0/render/picturestr.h 2008-02-09 22:54:50.000000000 +0100 -@@ -26,8 +26,8 @@ - #ifndef _PICTURESTR_H_ - #define _PICTURESTR_H_ - --#include "glyphstr.h" - #include "scrnintstr.h" -+#include "glyphstr.h" - #include "resource.h" - - typedef struct _DirectFormat { -- cgit v1.2.3 From 3736c8dda619105cbe8908c9a86f4263d610a59e Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 18 Feb 2008 23:32:03 +0000 Subject: xorg-lib: Remove unused patches, combine diet-x11 and libx11 patches into the same place --- packages/xorg-lib/diet-x11/.mtn2git_empty | 0 packages/xorg-lib/diet-x11/X18NCMSstubs.diff | 528 --------------------- packages/xorg-lib/diet-x11/autofoo.patch | 22 - .../xorg-lib/diet-x11/fix-disable-xlocale.diff | 14 - .../xorg-lib/diet-x11/fix-utf8-wrong-define.patch | 16 - packages/xorg-lib/diet-x11/makekeys.diff | 12 - packages/xorg-lib/diet-x11/xchar2b.patch | 13 - packages/xorg-lib/diet-x11/xim.patch | 55 --- packages/xorg-lib/diet-x11_1.1.1.bb | 2 + packages/xorg-lib/diet-x11_1.1.2.bb | 2 + packages/xorg-lib/diet-x11_1.1.3.bb | 2 + packages/xorg-lib/files/.mtn2git_empty | 0 .../xorg-lib/files/errordb-keysymdb-path-fix.patch | 22 - .../xorg-lib/files/fix-utf8-wrong-define.patch | 16 - packages/xorg-lib/files/ruutf8.patch | 12 - .../xorg-lib/liblbxutil/mkg3states-1.0.0.patch | 54 --- packages/xorg-lib/libx11/X18NCMSstubs.diff | 528 +++++++++++++++++++++ packages/xorg-lib/libx11/autofoo.patch | 22 - packages/xorg-lib/libx11/fix-disable-xlocale.diff | 14 + .../xorg-lib/libx11/fix-utf8-wrong-define.patch | 16 + packages/xorg-lib/libx11/ruutf8.patch | 12 + packages/xorg-lib/libx11/xchar2b.patch | 13 + packages/xorg-lib/libx11/xim.patch | 55 +++ packages/xorg-lib/libxdamage/.mtn2git_empty | 0 packages/xorg-lib/libxdamage/m4.patch | 65 --- packages/xorg-lib/libxfont/scalable.patch | 27 -- packages/xorg-lib/libxft/.mtn2git_empty | 0 packages/xorg-lib/libxi/.mtn2git_empty | 0 packages/xorg-lib/libxpm/.mtn2git_empty | 0 29 files changed, 644 insertions(+), 878 deletions(-) delete mode 100644 packages/xorg-lib/diet-x11/.mtn2git_empty delete mode 100644 packages/xorg-lib/diet-x11/X18NCMSstubs.diff delete mode 100644 packages/xorg-lib/diet-x11/autofoo.patch delete mode 100644 packages/xorg-lib/diet-x11/fix-disable-xlocale.diff delete mode 100644 packages/xorg-lib/diet-x11/fix-utf8-wrong-define.patch delete mode 100644 packages/xorg-lib/diet-x11/makekeys.diff delete mode 100644 packages/xorg-lib/diet-x11/xchar2b.patch delete mode 100644 packages/xorg-lib/diet-x11/xim.patch delete mode 100644 packages/xorg-lib/files/.mtn2git_empty delete mode 100644 packages/xorg-lib/files/errordb-keysymdb-path-fix.patch delete mode 100644 packages/xorg-lib/files/fix-utf8-wrong-define.patch delete mode 100644 packages/xorg-lib/files/ruutf8.patch delete mode 100644 packages/xorg-lib/liblbxutil/mkg3states-1.0.0.patch create mode 100644 packages/xorg-lib/libx11/X18NCMSstubs.diff delete mode 100644 packages/xorg-lib/libx11/autofoo.patch create mode 100644 packages/xorg-lib/libx11/fix-disable-xlocale.diff create mode 100644 packages/xorg-lib/libx11/fix-utf8-wrong-define.patch create mode 100644 packages/xorg-lib/libx11/ruutf8.patch create mode 100644 packages/xorg-lib/libx11/xchar2b.patch create mode 100644 packages/xorg-lib/libx11/xim.patch delete mode 100644 packages/xorg-lib/libxdamage/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxdamage/m4.patch delete mode 100644 packages/xorg-lib/libxfont/scalable.patch delete mode 100644 packages/xorg-lib/libxft/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxi/.mtn2git_empty delete mode 100644 packages/xorg-lib/libxpm/.mtn2git_empty diff --git a/packages/xorg-lib/diet-x11/.mtn2git_empty b/packages/xorg-lib/diet-x11/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/diet-x11/X18NCMSstubs.diff b/packages/xorg-lib/diet-x11/X18NCMSstubs.diff deleted file mode 100644 index 54b1727a95..0000000000 --- a/packages/xorg-lib/diet-x11/X18NCMSstubs.diff +++ /dev/null @@ -1,528 +0,0 @@ ---- libX11-X11R7.0-1.0.0/src/imConv.c.orig 2006-03-08 09:46:03.000000000 +0100 -+++ libX11-X11R7.0-1.0.0/src/imConv.c 2006-03-08 10:50:10.000000000 +0100 -@@ -83,6 +83,7 @@ - * from UCS char to specified charset char. - * This converter is needed for _XimGetCharCode subroutine. - */ -+#ifdef XLOCALE - XPointer - _XimGetLocaleCode ( - _Xconst char* encoding_name) -@@ -96,6 +97,7 @@ - } - return cvt; - } -+#endif - - /* - * Returns the locale dependent representation of a keysym. -@@ -107,6 +109,7 @@ - * locale - */ - /*ARGSUSED*/ -+#ifdef XLOCALE - int - _XimGetCharCode ( - XPointer ucs_conv, -@@ -135,6 +138,7 @@ - buf[count]= '\0'; - return count; - } -+#endif - - #ifdef XKB - static int lookup_string( ---- libX11-X11R7.0-1.0.0/src/X18NCMSstubs.c.orig 2006-03-08 08:43:19.000000000 +0100 -+++ libX11-X11R7.0-1.0.0/src/X18NCMSstubs.c 2006-03-08 11:41:28.000000000 +0100 -@@ -0,0 +1,428 @@ -+/* -+ * X18NCMSstubs.c -+ * - Provides stubs and dummy funcs needed when Xcms and XLocale stuff removed -+ * -+ * Copyright © 2003 Matthew Allum -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Matthew Allum not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Keith Packard and Compaq makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MATTHEW ALLUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -+ * IN NO EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#include -+#include "Xlibint.h" -+#include "Xlcint.h" -+#include -+#include -+#ifdef WIN32 -+#undef close -+#endif -+#include -+#include "XlcPubI.h" -+ -+#include "Xcmsint.h" /* for XcmsCCC type */ -+#include "XlcPubI.h" /* for XLCd type */ -+#include "config.h" -+ -+#if ! XLOCALE -+ -+Bool -+XSupportsLocale() -+{ -+ return False; -+} -+ -+char * -+XSetLocaleModifiers( -+ const char *modifiers) -+{ -+ return NULL; -+} -+ -+XLCd -+_XOpenLC( -+ char *name) -+{ -+ return NULL; -+} -+ -+XLCd -+_XlcCurrentLC() -+{ -+ return NULL; -+} -+ -+void -+_XlcVaToArgList( -+ va_list var, -+ int count, -+ XlcArgList *args_ret) -+{ -+ return; -+} -+ -+void -+_XlcCountVaList( -+ va_list var, -+ int *count_ret) -+{ -+ return; -+} -+ -+void -+_XCloseLC( -+ XLCd lcd) -+{ -+ return; -+} -+ -+int -+_XlcConvert( -+ XlcConv conv, -+ XPointer *from, -+ int *from_left, -+ XPointer *to, -+ int *to_left, -+ XPointer *args, -+ int num_args) -+{ -+ return 0; -+} -+ -+/* XIM Stubs */ -+ -+XPointer -+_XimGetLocaleCode ( _Xconst char* encoding_name ) -+{ -+ return NULL; -+} -+ -+int -+_XimGetCharCode ( -+ XPointer ucs_conv, -+ KeySym keysym, -+ unsigned char* buf, -+ int nbytes) -+{ -+ return 0; -+} -+ -+/* Xrm Stubs */ -+ -+XrmMethods -+_XrmInitParseInfo( -+ XPointer *state) -+{ -+ return (XrmMethods) NULL; -+} -+ -+/* Xwc Stubs */ -+ -+int -+XwcTextExtents( -+ XFontSet font_set, -+ _Xconst wchar_t *text, -+ int text_len, -+ XRectangle *overall_ink_extents, -+ XRectangle *overall_logical_extents) -+{ -+ return 0; -+} -+ -+void -+XwcDrawString(Display *display, -+ Drawable d, -+ XFontSet font_set, -+ GC gc, -+ int x, int y, -+ _Xconst wchar_t *string, -+ int num_wchars) -+{ -+ ; -+} -+ -+void -+XwcDrawText( -+ Display *dpy, -+ Drawable d, -+ GC gc, -+ int x, -+ int y, -+ XwcTextItem *text_items, -+ int nitems) -+{ -+ ; -+} -+ -+void -+XwcDrawImageString( -+ Display *dpy, -+ Drawable d, -+ XFontSet font_set, -+ GC gc, -+ int x, -+ int y, -+ _Xconst wchar_t *text, -+ int text_len) -+{ -+ ; -+} -+ -+int -+XwcTextEscapement( -+ XFontSet font_set, -+ _Xconst wchar_t *text, -+ int text_len) -+{ -+ return 0; -+} -+ -+Status -+XwcTextPerCharExtents( -+ XFontSet font_set, -+ _Xconst wchar_t *text, -+ int text_len, -+ XRectangle *ink_extents_buffer, -+ XRectangle *logical_extents_buffer, -+ int buffer_size, -+ int *num_chars, -+ XRectangle *max_ink_extents, -+ XRectangle *max_logical_extents) -+{ -+ ; -+} -+ -+int -+XwcTextPropertyToTextList( -+ Display *dpy, -+ const XTextProperty *text_prop, -+ wchar_t ***list_ret, -+ int *count_ret) -+{ -+ return 0; -+} -+ -+int -+XwcTextListToTextProperty( -+ Display *dpy, -+ wchar_t **list, -+ int count, -+ XICCEncodingStyle style, -+ XTextProperty *text_prop) -+{ -+ return 0; -+} -+ -+void -+XwcFreeStringList(wchar_t **list) -+{ -+ return; -+} -+ -+ -+void XmbSetWMProperties ( /* Actually from mbWMProps.c */ -+ Display *dpy, -+ Window w, -+ _Xconst char *windowName, -+ _Xconst char *iconName, -+ char **argv, -+ int argc, -+ XSizeHints *sizeHints, -+ XWMHints *wmHints, -+ XClassHint *classHints) -+{ -+ return; -+} -+ -+int -+XmbTextPropertyToTextList( -+ Display *dpy, -+ const XTextProperty *text_prop, -+ char ***list_ret, -+ int *count_ret) -+{ -+ return XLocaleNotSupported; -+} -+ -+int -+XmbTextListToTextProperty( -+ Display *dpy, -+ char **list, -+ int count, -+ XICCEncodingStyle style, -+ XTextProperty *text_prop) -+{ -+ return XLocaleNotSupported; -+} -+ -+int -+XmbTextExtents( -+ XFontSet font_set, -+ _Xconst char *text, -+ int text_len, -+ XRectangle *overall_ink_extents, -+ XRectangle *overall_logical_extents) -+{ -+ return 0; -+} -+ -+void -+XmbDrawText( -+ Display *dpy, -+ Drawable d, -+ GC gc, -+ int x, -+ int y, -+ XmbTextItem *text_items, -+ int nitems) -+{ -+ ; -+} -+ -+void -+XmbDrawString( -+ Display *dpy, -+ Drawable d, -+ XFontSet font_set, -+ GC gc, -+ int x, -+ int y, -+ _Xconst char *text, -+ int text_len) -+{ -+ ; -+} -+ -+void -+XmbDrawImageString( -+ Display *dpy, -+ Drawable d, -+ XFontSet font_set, -+ GC gc, -+ int x, -+ int y, -+ _Xconst char *text, -+ int text_len) -+{ -+ ; -+} -+ -+int -+XmbTextEscapement( -+ XFontSet font_set, -+ _Xconst char *text, -+ int text_len) -+{ -+ return 0; -+} -+ -+Status -+XmbTextPerCharExtents( -+ XFontSet font_set, -+ _Xconst char *text, -+ int text_len, -+ XRectangle *ink_extents_buffer, -+ XRectangle *logical_extents_buffer, -+ int buffer_size, -+ int *num_chars, -+ XRectangle *max_ink_extents, -+ XRectangle *max_logical_extents) -+{ -+ return 0; -+} -+ -+unsigned int -+KeySymToUcs4(KeySym keysym) -+{ -+ return 0; -+} -+ -+#endif -+ -+#if ! XCMS -+ -+XcmsCCC -+XcmsCCCOfColormap(dpy, cmap) -+ Display *dpy; -+ Colormap cmap; -+{ -+ return NULL; -+} -+ -+Status -+_XcmsResolveColorString ( -+ XcmsCCC ccc, -+ const char **color_string, -+ XcmsColor *pColor_exact_return, -+ XcmsColorFormat result_format) -+{ -+ return(XcmsFailure); -+} -+ -+void -+_XcmsUnresolveColor( -+ XcmsCCC ccc, -+ XcmsColor *pColor) -+{ -+ return; -+} -+ -+void -+_XUnresolveColor( -+ XcmsCCC ccc, -+ XColor *pXColor) -+{ -+ return; -+} -+ -+XcmsCmapRec * -+_XcmsAddCmapRec(dpy, cmap, windowID, visual) -+ Display *dpy; -+ Colormap cmap; -+ Window windowID; -+ Visual *visual; -+{ -+ return NULL; -+} -+ -+void -+_XcmsRGB_to_XColor( -+ XcmsColor *pColors, -+ XColor *pXColors, -+ unsigned int nColors) -+{ -+ return; -+} -+ -+XcmsCmapRec * -+_XcmsCopyCmapRecAndFree( -+ Display *dpy, -+ Colormap src_cmap, -+ Colormap copy_cmap) -+{ -+ return NULL; -+} -+ -+void -+_XcmsDeleteCmapRec( -+ Display *dpy, -+ Colormap cmap) -+{ -+ return; -+} -+ -+#endif ---- libX11-X11R7.0-1.0.0/src/Makefile.am.orig 2006-03-08 08:31:09.000000000 +0100 -+++ libX11-X11R7.0-1.0.0/src/Makefile.am 2006-03-08 09:36:23.000000000 +0100 -@@ -331,6 +331,8 @@ - libX11_la_SOURCES+=UIThrStubs.c - endif - -+libX11_la_SOURCES+=X18NCMSstubs.c -+ - x11datadir = @X11_DATADIR@ - x11data_DATA = XKeysymDB XErrorDB - -@@ -338,7 +340,8 @@ - $(x11data_DATA) \ - os2Stubs.c \ - udcInf.c \ -- UIThrStubs.c -+ UIThrStubs.c \ -+ X18NCMSstubs.c - - # - # Figure out which sub-libraries to link into Xlib ---- libX11-X11R7.0-1.0.0/src/locking.c.orig 2006-03-08 11:05:56.000000000 +0100 -+++ libX11-X11R7.0-1.0.0/src/locking.c 2006-03-08 11:06:37.000000000 +0100 -@@ -55,7 +55,9 @@ - #define NUM_FREE_CVLS 4 - - /* in lcWrap.c */ -+#ifdef XLOCALE - extern LockInfoPtr _Xi18n_lock; -+#endif - - #ifdef WIN32 - static DWORD _X_TlsIndex = (DWORD)-1; -@@ -625,9 +627,11 @@ - _Xglobal_lock = &global_lock; - xmutex_init(_Xglobal_lock->lock); - xmutex_set_name(_Xglobal_lock->lock, "Xlib global"); -+#ifdef XLOCALE - _Xi18n_lock = &i18n_lock; - xmutex_init(_Xi18n_lock->lock); - xmutex_set_name(_Xi18n_lock->lock, "Xlib i18n"); -+#endif - _XLockMutex_fn = _XLockMutex; - _XUnlockMutex_fn = _XUnlockMutex; - _XCreateMutex_fn = _XCreateMutex; ---- libX11-X11R7.0-1.0.0/configure.ac.orig 2006-03-08 10:03:57.000000000 +0100 -+++ libX11-X11R7.0-1.0.0/configure.ac 2006-03-08 10:06:01.000000000 +0100 -@@ -215,7 +215,14 @@ - esac - AC_SUBST(KEYSYMDEF) - --AM_CONDITIONAL(UDC, test xfalse = xtrue) -+AC_ARG_ENABLE(udc, -+ AC_HELP_STRING([--disable-udc], -+ [Disable Xlib support for UDC *EXPERIMENTAL*]), -+ [UDC=$enableval],[UDC=yes]) -+AM_CONDITIONAL(UDC, [test x$UDC = xyes ]) -+if test x"$UDC" = "xyes"; then -+ AC_DEFINE(UDC,1,[Include support for UDC]) -+fi - - AC_ARG_ENABLE(xcms, - AC_HELP_STRING([--disable-xcms], diff --git a/packages/xorg-lib/diet-x11/autofoo.patch b/packages/xorg-lib/diet-x11/autofoo.patch deleted file mode 100644 index 8bdba09768..0000000000 --- a/packages/xorg-lib/diet-x11/autofoo.patch +++ /dev/null @@ -1,22 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- libX11-6.2.1/configure.ac~autofoo -+++ libX11-6.2.1/configure.ac -@@ -7,12 +7,12 @@ - [jg@freedesktop.org], - libX11) - AC_CONFIG_SRCDIR([Makefile.am]) --AM_INIT_AUTOMAKE([dist-bzip2]) -+AC_CONFIG_AUX_DIR(.) - -+AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER([src/config.h]) --AC_CONFIG_AUX_DIR(.) - - # Checks for programs. - AC_PROG_LIBTOOL diff --git a/packages/xorg-lib/diet-x11/fix-disable-xlocale.diff b/packages/xorg-lib/diet-x11/fix-disable-xlocale.diff deleted file mode 100644 index 9dbf6dac68..0000000000 --- a/packages/xorg-lib/diet-x11/fix-disable-xlocale.diff +++ /dev/null @@ -1,14 +0,0 @@ ---- libX11-X11R7.0-1.0.0/src/Font.c.orig 2006-03-12 18:35:42.000000000 +0100 -+++ libX11-X11R7.0-1.0.0/src/Font.c 2006-03-12 18:40:27.000000000 +0100 -@@ -701,7 +701,11 @@ - } - if (l - 2 - (p - charset) < 0) - return 0; -+#ifdef XLOCALE - if (_XlcNCompareISOLatin1(name + l - 2 - (p - charset), charset, p - charset)) -+#else -+ if (strncasecmp(name + l - 2 - (p - charset), charset, p - charset)) -+#endif - return 0; - if (strlen(p + 1) + l - 1 >= sizeof(buf) - 1) - return 0; diff --git a/packages/xorg-lib/diet-x11/fix-utf8-wrong-define.patch b/packages/xorg-lib/diet-x11/fix-utf8-wrong-define.patch deleted file mode 100644 index a098db1941..0000000000 --- a/packages/xorg-lib/diet-x11/fix-utf8-wrong-define.patch +++ /dev/null @@ -1,16 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- libX11-X11R7.0-1.0.0/include/X11/Xlib.h~fix-utf8-wrong-define -+++ libX11-X11R7.0-1.0.0/include/X11/Xlib.h -@@ -103,7 +103,7 @@ - - /* API mentioning "UTF8" or "utf8" is an XFree86 extension, introduced in - November 2000. Its presence is indicated through the following macro. */ --#define X_HAVE_UTF8_STRING 1 -+#undef X_HAVE_UTF8_STRING - - typedef char *XPointer; - diff --git a/packages/xorg-lib/diet-x11/makekeys.diff b/packages/xorg-lib/diet-x11/makekeys.diff deleted file mode 100644 index cea08725ec..0000000000 --- a/packages/xorg-lib/diet-x11/makekeys.diff +++ /dev/null @@ -1,12 +0,0 @@ -diff -Nru libX11-X11R7.1-1.0.1.org/src/util/makekeys.c libX11-X11R7.1-1.0.1/src/util/makekeys.c ---- libX11-X11R7.1-1.0.1.org/src/util/makekeys.c 2007-03-08 14:34:34.000000000 +0100 -+++ libX11-X11R7.1-1.0.1/src/util/makekeys.c 2007-03-08 14:34:58.000000000 +0100 -@@ -49,7 +49,7 @@ - KeySym val; - } info[KTNUM]; - --#define MIN_REHASH 10 -+#define MIN_REHASH 15 - #define MATCHES 10 - - char tab[KTNUM]; diff --git a/packages/xorg-lib/diet-x11/xchar2b.patch b/packages/xorg-lib/diet-x11/xchar2b.patch deleted file mode 100644 index 31da58fa5c..0000000000 --- a/packages/xorg-lib/diet-x11/xchar2b.patch +++ /dev/null @@ -1,13 +0,0 @@ -http://www.koka-in.org/~kensyu/zaurus/diary/20030618.html - ---- /tmp/Xlib.h 2006-12-01 14:40:27.000000000 +0100 -+++ libX11-X11R7.1-1.0.1/include/X11/Xlib.h 2006-12-01 14:40:56.948254000 +0100 -@@ -1067,7 +1067,7 @@ - typedef struct { /* normal 16 bit characters are two bytes */ - unsigned char byte1; - unsigned char byte2; --} XChar2b; -+} __attribute__ ((packed)) XChar2b; - - typedef struct { - XChar2b *chars; /* two byte characters */ diff --git a/packages/xorg-lib/diet-x11/xim.patch b/packages/xorg-lib/diet-x11/xim.patch deleted file mode 100644 index 0eab197a80..0000000000 --- a/packages/xorg-lib/diet-x11/xim.patch +++ /dev/null @@ -1,55 +0,0 @@ ---- libX11-6.2.1/src/X18NCMSstubs.c 2003-12-04 22:47:47.000000000 +0000 -+++ libX11-6.2.1/src/X18NCMSstubs.c-new 2005-12-09 12:09:03.000000000 +0000 -@@ -90,6 +90,52 @@ - return; - } - -+XIM -+XOpenIM ( -+ Display* display, -+ struct _XrmHashBucketRec* rdb, -+ char* res_name, -+ char* res_class) -+{ -+ return (XIM) NULL; -+} -+ -+Status -+XCloseIM ( XIM im ) -+{ -+ return NULL; -+} -+ -+XIC -+XCreateIC ( XIM im, ...) -+{ -+ return NULL; -+} -+ -+void -+XDestroyIC ( XIC ic ) -+{ -+ return; -+} -+ -+int -+XmbLookupString ( -+ XIC ic, -+ XKeyPressedEvent* ev, -+ char* buffer, -+ int nbytes, -+ KeySym* keysym, -+ Status* status) -+{ -+ return XLookupNone; -+} -+ -+char * -+XGetICValues( XIC ic, ...) -+{ -+ return (char *) NULL; -+} -+ - XPointer - _XimGetLocaleCode ( _Xconst char* encoding_name ) - { diff --git a/packages/xorg-lib/diet-x11_1.1.1.bb b/packages/xorg-lib/diet-x11_1.1.1.bb index 8dc3174a16..4219b0c997 100644 --- a/packages/xorg-lib/diet-x11_1.1.1.bb +++ b/packages/xorg-lib/diet-x11_1.1.1.bb @@ -4,6 +4,8 @@ require libx11_${PV}.bb EXTRA_OECONF += "--disable-udc --enable-xcms --disable-xlocale --disable-xkb" CFLAGS += "-D_GNU_SOURCE" +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libx11" + SRC_URI += "file://X18NCMSstubs.diff;patch=1 \ file://fix-disable-xlocale.diff;patch=1 \ file://fix-utf8-wrong-define.patch;patch=1 \ diff --git a/packages/xorg-lib/diet-x11_1.1.2.bb b/packages/xorg-lib/diet-x11_1.1.2.bb index f032987b88..2dbd458ec7 100644 --- a/packages/xorg-lib/diet-x11_1.1.2.bb +++ b/packages/xorg-lib/diet-x11_1.1.2.bb @@ -4,5 +4,7 @@ SRC_URI += "file://X18NCMSstubs.diff;patch=1 \ file://fix-disable-xlocale.diff;patch=1 \ file://fix-utf8-wrong-define.patch;patch=1" +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libx11" + EXTRA_OECONF += "--disable-udc --disable-xcms --disable-xlocale --disable-xkb" CFLAGS += "-D_GNU_SOURCE" diff --git a/packages/xorg-lib/diet-x11_1.1.3.bb b/packages/xorg-lib/diet-x11_1.1.3.bb index f032987b88..2dbd458ec7 100644 --- a/packages/xorg-lib/diet-x11_1.1.3.bb +++ b/packages/xorg-lib/diet-x11_1.1.3.bb @@ -4,5 +4,7 @@ SRC_URI += "file://X18NCMSstubs.diff;patch=1 \ file://fix-disable-xlocale.diff;patch=1 \ file://fix-utf8-wrong-define.patch;patch=1" +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libx11" + EXTRA_OECONF += "--disable-udc --disable-xcms --disable-xlocale --disable-xkb" CFLAGS += "-D_GNU_SOURCE" diff --git a/packages/xorg-lib/files/.mtn2git_empty b/packages/xorg-lib/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/files/errordb-keysymdb-path-fix.patch b/packages/xorg-lib/files/errordb-keysymdb-path-fix.patch deleted file mode 100644 index f43d38065e..0000000000 --- a/packages/xorg-lib/files/errordb-keysymdb-path-fix.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- X11/src/ErrDes.c.orig 2005-09-03 16:15:48 +0200 -+++ X11/src/ErrDes.c 2005-09-03 16:16:03 +0200 -@@ -56,7 +56,7 @@ - #include - - #ifndef ERRORDB --#define ERRORDB "/usr/lib/X11/XErrorDB" -+#define ERRORDB "/usr/share/X11/XErrorDB" - #endif - - /* ---- X11/src/StrKeysym.c.orig 2005-09-03 16:41:18 +0200 -+++ X11/src/StrKeysym.c 2005-09-03 16:41:33 +0200 -@@ -36,7 +36,7 @@ - #include "Key.h" - - #ifndef KEYSYMDB --#define KEYSYMDB "/usr/lib/X11/XKeysymDB" -+#define KEYSYMDB "/usr/share/X11/XKeysymDB" - #endif - - static Bool initialized; diff --git a/packages/xorg-lib/files/fix-utf8-wrong-define.patch b/packages/xorg-lib/files/fix-utf8-wrong-define.patch deleted file mode 100644 index dca88fba92..0000000000 --- a/packages/xorg-lib/files/fix-utf8-wrong-define.patch +++ /dev/null @@ -1,16 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- libX11-6.2.1/include/X11/Xlib.h~fix-utf8-wrong-define -+++ libX11-6.2.1/include/X11/Xlib.h -@@ -100,7 +100,7 @@ - - /* API mentioning "UTF8" or "utf8" is an XFree86 extension, introduced in - November 2000. Its presence is indicated through the following macro. */ --#define X_HAVE_UTF8_STRING 1 -+#undef X_HAVE_UTF8_STRING - - typedef char *XPointer; - diff --git a/packages/xorg-lib/files/ruutf8.patch b/packages/xorg-lib/files/ruutf8.patch deleted file mode 100644 index 0822b30cb8..0000000000 --- a/packages/xorg-lib/files/ruutf8.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/nls/locale.alias.pre b/nls/locale.alias.pre -index a74ca75..ff5bc3f 100644 ---- a/nls/locale.alias.pre -+++ b/nls/locale.alias.pre -@@ -898,6 +898,7 @@ ru_RU.cp1251: ru_RU.CP1251 - ru_RU.microsoftcp1251: ru_RU.CP1251 - ru_RU.microsoft-cp1251: ru_RU.CP1251 - ru_RU.MICROSOFT-CP1251: ru_RU.CP1251 -+ru_RU.utf8: ru_RU.UTF-8 - #if defined(INCLUDE_ru_SU) - XCOMM ru_SU is redundant now - ru_SU: ru_RU.KOI8-R diff --git a/packages/xorg-lib/liblbxutil/mkg3states-1.0.0.patch b/packages/xorg-lib/liblbxutil/mkg3states-1.0.0.patch deleted file mode 100644 index afa34712e2..0000000000 --- a/packages/xorg-lib/liblbxutil/mkg3states-1.0.0.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff -ruN liblbxutil-X11R7.0-1.0.0_orig/configure.ac liblbxutil-X11R7.0-1.0.0/configure.ac ---- liblbxutil-X11R7.0-1.0.0_orig/configure.ac 2005-12-15 00:24:36.000000000 +0000 -+++ liblbxutil-X11R7.0-1.0.0/configure.ac 2006-08-21 18:32:04.000000000 +0000 -@@ -60,4 +60,5 @@ - - AC_OUTPUT([Makefile - src/Makefile -+ src/image/Makefile - lbxutil.pc]) -diff -ruN liblbxutil-X11R7.0-1.0.0_orig/src/Makefile.am liblbxutil-X11R7.0-1.0.0/src/Makefile.am ---- liblbxutil-X11R7.0-1.0.0_orig/src/Makefile.am 2005-10-16 02:07:10.000000000 +0000 -+++ liblbxutil-X11R7.0-1.0.0/src/Makefile.am 2006-08-21 18:32:04.000000000 +0000 -@@ -1,9 +1,6 @@ - lib_LTLIBRARIES = liblbxutil.la - --noinst_PROGRAMS = mkg3states -- --mkg3states_SOURCES = \ -- $(srcdir)/image/mkg3states.c -+SUBDIRS = image - - liblbxutil_la_SOURCES = \ - $(srcdir)/lbx_zlib/reqstats.h \ -@@ -28,9 +25,8 @@ - - $(srcdir)/image/dfaxg42d.c: g3states.h - --g3states.h: mkg3states -- -rm -f g3states.h -- ./mkg3states -c > g3states.h_ && mv g3states.h_ g3states.h -+g3states.h: image/mkg3states -+ ./image/mkg3states -c > g3states.h_ && mv g3states.h_ g3states.h - - liblbxutil_la_LDFLAGS = -version-number 1:0:0 - -diff -ruN liblbxutil-X11R7.0-1.0.0_orig/src/image/Makefile.am liblbxutil-X11R7.0-1.0.0/src/image/Makefile.am ---- liblbxutil-X11R7.0-1.0.0_orig/src/image/Makefile.am 1970-01-01 00:00:00.000000000 +0000 -+++ liblbxutil-X11R7.0-1.0.0/src/image/Makefile.am 2006-08-21 18:32:04.000000000 +0000 -@@ -0,0 +1,15 @@ -+# evil hack -+CFLAGS=$(CFLAGS_FOR_BUILD) -+CPPFLAGS=$(CPPFLAGS_FOR_BUILD) -+LDFLAGS=$(LDFLAGS_FOR_BUILD) -+ -+CC=$(CC_FOR_BUILD) -+LIBTOOL = @LIBTOOL@ --tag=CC -+ -+noinst_PROGRAMS = mkg3states -+ -+mkg3states_SOURCES = \ -+ mkg3states.c -+ -+mkg3states_CFLAGS=$(CFLAGS_FOR_BUILD) -+mkg3states_LDFLAGS=$(LDFLAGS_FOR_BUILD) diff --git a/packages/xorg-lib/libx11/X18NCMSstubs.diff b/packages/xorg-lib/libx11/X18NCMSstubs.diff new file mode 100644 index 0000000000..54b1727a95 --- /dev/null +++ b/packages/xorg-lib/libx11/X18NCMSstubs.diff @@ -0,0 +1,528 @@ +--- libX11-X11R7.0-1.0.0/src/imConv.c.orig 2006-03-08 09:46:03.000000000 +0100 ++++ libX11-X11R7.0-1.0.0/src/imConv.c 2006-03-08 10:50:10.000000000 +0100 +@@ -83,6 +83,7 @@ + * from UCS char to specified charset char. + * This converter is needed for _XimGetCharCode subroutine. + */ ++#ifdef XLOCALE + XPointer + _XimGetLocaleCode ( + _Xconst char* encoding_name) +@@ -96,6 +97,7 @@ + } + return cvt; + } ++#endif + + /* + * Returns the locale dependent representation of a keysym. +@@ -107,6 +109,7 @@ + * locale + */ + /*ARGSUSED*/ ++#ifdef XLOCALE + int + _XimGetCharCode ( + XPointer ucs_conv, +@@ -135,6 +138,7 @@ + buf[count]= '\0'; + return count; + } ++#endif + + #ifdef XKB + static int lookup_string( +--- libX11-X11R7.0-1.0.0/src/X18NCMSstubs.c.orig 2006-03-08 08:43:19.000000000 +0100 ++++ libX11-X11R7.0-1.0.0/src/X18NCMSstubs.c 2006-03-08 11:41:28.000000000 +0100 +@@ -0,0 +1,428 @@ ++/* ++ * X18NCMSstubs.c ++ * - Provides stubs and dummy funcs needed when Xcms and XLocale stuff removed ++ * ++ * Copyright © 2003 Matthew Allum ++ * ++ * Permission to use, copy, modify, distribute, and sell this software and its ++ * documentation for any purpose is hereby granted without fee, provided that ++ * the above copyright notice appear in all copies and that both that ++ * copyright notice and this permission notice appear in supporting ++ * documentation, and that the name of Matthew Allum not be used in ++ * advertising or publicity pertaining to distribution of the software without ++ * specific, written prior permission. Keith Packard and Compaq makes no ++ * representations about the suitability of this software for any purpose. It ++ * is provided "as is" without express or implied warranty. ++ * ++ * MATTHEW ALLUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS ++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, ++ * IN NO EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR ++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, ++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ++ * PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#include ++#include "Xlibint.h" ++#include "Xlcint.h" ++#include ++#include ++#ifdef WIN32 ++#undef close ++#endif ++#include ++#include "XlcPubI.h" ++ ++#include "Xcmsint.h" /* for XcmsCCC type */ ++#include "XlcPubI.h" /* for XLCd type */ ++#include "config.h" ++ ++#if ! XLOCALE ++ ++Bool ++XSupportsLocale() ++{ ++ return False; ++} ++ ++char * ++XSetLocaleModifiers( ++ const char *modifiers) ++{ ++ return NULL; ++} ++ ++XLCd ++_XOpenLC( ++ char *name) ++{ ++ return NULL; ++} ++ ++XLCd ++_XlcCurrentLC() ++{ ++ return NULL; ++} ++ ++void ++_XlcVaToArgList( ++ va_list var, ++ int count, ++ XlcArgList *args_ret) ++{ ++ return; ++} ++ ++void ++_XlcCountVaList( ++ va_list var, ++ int *count_ret) ++{ ++ return; ++} ++ ++void ++_XCloseLC( ++ XLCd lcd) ++{ ++ return; ++} ++ ++int ++_XlcConvert( ++ XlcConv conv, ++ XPointer *from, ++ int *from_left, ++ XPointer *to, ++ int *to_left, ++ XPointer *args, ++ int num_args) ++{ ++ return 0; ++} ++ ++/* XIM Stubs */ ++ ++XPointer ++_XimGetLocaleCode ( _Xconst char* encoding_name ) ++{ ++ return NULL; ++} ++ ++int ++_XimGetCharCode ( ++ XPointer ucs_conv, ++ KeySym keysym, ++ unsigned char* buf, ++ int nbytes) ++{ ++ return 0; ++} ++ ++/* Xrm Stubs */ ++ ++XrmMethods ++_XrmInitParseInfo( ++ XPointer *state) ++{ ++ return (XrmMethods) NULL; ++} ++ ++/* Xwc Stubs */ ++ ++int ++XwcTextExtents( ++ XFontSet font_set, ++ _Xconst wchar_t *text, ++ int text_len, ++ XRectangle *overall_ink_extents, ++ XRectangle *overall_logical_extents) ++{ ++ return 0; ++} ++ ++void ++XwcDrawString(Display *display, ++ Drawable d, ++ XFontSet font_set, ++ GC gc, ++ int x, int y, ++ _Xconst wchar_t *string, ++ int num_wchars) ++{ ++ ; ++} ++ ++void ++XwcDrawText( ++ Display *dpy, ++ Drawable d, ++ GC gc, ++ int x, ++ int y, ++ XwcTextItem *text_items, ++ int nitems) ++{ ++ ; ++} ++ ++void ++XwcDrawImageString( ++ Display *dpy, ++ Drawable d, ++ XFontSet font_set, ++ GC gc, ++ int x, ++ int y, ++ _Xconst wchar_t *text, ++ int text_len) ++{ ++ ; ++} ++ ++int ++XwcTextEscapement( ++ XFontSet font_set, ++ _Xconst wchar_t *text, ++ int text_len) ++{ ++ return 0; ++} ++ ++Status ++XwcTextPerCharExtents( ++ XFontSet font_set, ++ _Xconst wchar_t *text, ++ int text_len, ++ XRectangle *ink_extents_buffer, ++ XRectangle *logical_extents_buffer, ++ int buffer_size, ++ int *num_chars, ++ XRectangle *max_ink_extents, ++ XRectangle *max_logical_extents) ++{ ++ ; ++} ++ ++int ++XwcTextPropertyToTextList( ++ Display *dpy, ++ const XTextProperty *text_prop, ++ wchar_t ***list_ret, ++ int *count_ret) ++{ ++ return 0; ++} ++ ++int ++XwcTextListToTextProperty( ++ Display *dpy, ++ wchar_t **list, ++ int count, ++ XICCEncodingStyle style, ++ XTextProperty *text_prop) ++{ ++ return 0; ++} ++ ++void ++XwcFreeStringList(wchar_t **list) ++{ ++ return; ++} ++ ++ ++void XmbSetWMProperties ( /* Actually from mbWMProps.c */ ++ Display *dpy, ++ Window w, ++ _Xconst char *windowName, ++ _Xconst char *iconName, ++ char **argv, ++ int argc, ++ XSizeHints *sizeHints, ++ XWMHints *wmHints, ++ XClassHint *classHints) ++{ ++ return; ++} ++ ++int ++XmbTextPropertyToTextList( ++ Display *dpy, ++ const XTextProperty *text_prop, ++ char ***list_ret, ++ int *count_ret) ++{ ++ return XLocaleNotSupported; ++} ++ ++int ++XmbTextListToTextProperty( ++ Display *dpy, ++ char **list, ++ int count, ++ XICCEncodingStyle style, ++ XTextProperty *text_prop) ++{ ++ return XLocaleNotSupported; ++} ++ ++int ++XmbTextExtents( ++ XFontSet font_set, ++ _Xconst char *text, ++ int text_len, ++ XRectangle *overall_ink_extents, ++ XRectangle *overall_logical_extents) ++{ ++ return 0; ++} ++ ++void ++XmbDrawText( ++ Display *dpy, ++ Drawable d, ++ GC gc, ++ int x, ++ int y, ++ XmbTextItem *text_items, ++ int nitems) ++{ ++ ; ++} ++ ++void ++XmbDrawString( ++ Display *dpy, ++ Drawable d, ++ XFontSet font_set, ++ GC gc, ++ int x, ++ int y, ++ _Xconst char *text, ++ int text_len) ++{ ++ ; ++} ++ ++void ++XmbDrawImageString( ++ Display *dpy, ++ Drawable d, ++ XFontSet font_set, ++ GC gc, ++ int x, ++ int y, ++ _Xconst char *text, ++ int text_len) ++{ ++ ; ++} ++ ++int ++XmbTextEscapement( ++ XFontSet font_set, ++ _Xconst char *text, ++ int text_len) ++{ ++ return 0; ++} ++ ++Status ++XmbTextPerCharExtents( ++ XFontSet font_set, ++ _Xconst char *text, ++ int text_len, ++ XRectangle *ink_extents_buffer, ++ XRectangle *logical_extents_buffer, ++ int buffer_size, ++ int *num_chars, ++ XRectangle *max_ink_extents, ++ XRectangle *max_logical_extents) ++{ ++ return 0; ++} ++ ++unsigned int ++KeySymToUcs4(KeySym keysym) ++{ ++ return 0; ++} ++ ++#endif ++ ++#if ! XCMS ++ ++XcmsCCC ++XcmsCCCOfColormap(dpy, cmap) ++ Display *dpy; ++ Colormap cmap; ++{ ++ return NULL; ++} ++ ++Status ++_XcmsResolveColorString ( ++ XcmsCCC ccc, ++ const char **color_string, ++ XcmsColor *pColor_exact_return, ++ XcmsColorFormat result_format) ++{ ++ return(XcmsFailure); ++} ++ ++void ++_XcmsUnresolveColor( ++ XcmsCCC ccc, ++ XcmsColor *pColor) ++{ ++ return; ++} ++ ++void ++_XUnresolveColor( ++ XcmsCCC ccc, ++ XColor *pXColor) ++{ ++ return; ++} ++ ++XcmsCmapRec * ++_XcmsAddCmapRec(dpy, cmap, windowID, visual) ++ Display *dpy; ++ Colormap cmap; ++ Window windowID; ++ Visual *visual; ++{ ++ return NULL; ++} ++ ++void ++_XcmsRGB_to_XColor( ++ XcmsColor *pColors, ++ XColor *pXColors, ++ unsigned int nColors) ++{ ++ return; ++} ++ ++XcmsCmapRec * ++_XcmsCopyCmapRecAndFree( ++ Display *dpy, ++ Colormap src_cmap, ++ Colormap copy_cmap) ++{ ++ return NULL; ++} ++ ++void ++_XcmsDeleteCmapRec( ++ Display *dpy, ++ Colormap cmap) ++{ ++ return; ++} ++ ++#endif +--- libX11-X11R7.0-1.0.0/src/Makefile.am.orig 2006-03-08 08:31:09.000000000 +0100 ++++ libX11-X11R7.0-1.0.0/src/Makefile.am 2006-03-08 09:36:23.000000000 +0100 +@@ -331,6 +331,8 @@ + libX11_la_SOURCES+=UIThrStubs.c + endif + ++libX11_la_SOURCES+=X18NCMSstubs.c ++ + x11datadir = @X11_DATADIR@ + x11data_DATA = XKeysymDB XErrorDB + +@@ -338,7 +340,8 @@ + $(x11data_DATA) \ + os2Stubs.c \ + udcInf.c \ +- UIThrStubs.c ++ UIThrStubs.c \ ++ X18NCMSstubs.c + + # + # Figure out which sub-libraries to link into Xlib +--- libX11-X11R7.0-1.0.0/src/locking.c.orig 2006-03-08 11:05:56.000000000 +0100 ++++ libX11-X11R7.0-1.0.0/src/locking.c 2006-03-08 11:06:37.000000000 +0100 +@@ -55,7 +55,9 @@ + #define NUM_FREE_CVLS 4 + + /* in lcWrap.c */ ++#ifdef XLOCALE + extern LockInfoPtr _Xi18n_lock; ++#endif + + #ifdef WIN32 + static DWORD _X_TlsIndex = (DWORD)-1; +@@ -625,9 +627,11 @@ + _Xglobal_lock = &global_lock; + xmutex_init(_Xglobal_lock->lock); + xmutex_set_name(_Xglobal_lock->lock, "Xlib global"); ++#ifdef XLOCALE + _Xi18n_lock = &i18n_lock; + xmutex_init(_Xi18n_lock->lock); + xmutex_set_name(_Xi18n_lock->lock, "Xlib i18n"); ++#endif + _XLockMutex_fn = _XLockMutex; + _XUnlockMutex_fn = _XUnlockMutex; + _XCreateMutex_fn = _XCreateMutex; +--- libX11-X11R7.0-1.0.0/configure.ac.orig 2006-03-08 10:03:57.000000000 +0100 ++++ libX11-X11R7.0-1.0.0/configure.ac 2006-03-08 10:06:01.000000000 +0100 +@@ -215,7 +215,14 @@ + esac + AC_SUBST(KEYSYMDEF) + +-AM_CONDITIONAL(UDC, test xfalse = xtrue) ++AC_ARG_ENABLE(udc, ++ AC_HELP_STRING([--disable-udc], ++ [Disable Xlib support for UDC *EXPERIMENTAL*]), ++ [UDC=$enableval],[UDC=yes]) ++AM_CONDITIONAL(UDC, [test x$UDC = xyes ]) ++if test x"$UDC" = "xyes"; then ++ AC_DEFINE(UDC,1,[Include support for UDC]) ++fi + + AC_ARG_ENABLE(xcms, + AC_HELP_STRING([--disable-xcms], diff --git a/packages/xorg-lib/libx11/autofoo.patch b/packages/xorg-lib/libx11/autofoo.patch deleted file mode 100644 index 8bdba09768..0000000000 --- a/packages/xorg-lib/libx11/autofoo.patch +++ /dev/null @@ -1,22 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- libX11-6.2.1/configure.ac~autofoo -+++ libX11-6.2.1/configure.ac -@@ -7,12 +7,12 @@ - [jg@freedesktop.org], - libX11) - AC_CONFIG_SRCDIR([Makefile.am]) --AM_INIT_AUTOMAKE([dist-bzip2]) -+AC_CONFIG_AUX_DIR(.) - -+AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE - - AM_CONFIG_HEADER([src/config.h]) --AC_CONFIG_AUX_DIR(.) - - # Checks for programs. - AC_PROG_LIBTOOL diff --git a/packages/xorg-lib/libx11/fix-disable-xlocale.diff b/packages/xorg-lib/libx11/fix-disable-xlocale.diff new file mode 100644 index 0000000000..9dbf6dac68 --- /dev/null +++ b/packages/xorg-lib/libx11/fix-disable-xlocale.diff @@ -0,0 +1,14 @@ +--- libX11-X11R7.0-1.0.0/src/Font.c.orig 2006-03-12 18:35:42.000000000 +0100 ++++ libX11-X11R7.0-1.0.0/src/Font.c 2006-03-12 18:40:27.000000000 +0100 +@@ -701,7 +701,11 @@ + } + if (l - 2 - (p - charset) < 0) + return 0; ++#ifdef XLOCALE + if (_XlcNCompareISOLatin1(name + l - 2 - (p - charset), charset, p - charset)) ++#else ++ if (strncasecmp(name + l - 2 - (p - charset), charset, p - charset)) ++#endif + return 0; + if (strlen(p + 1) + l - 1 >= sizeof(buf) - 1) + return 0; diff --git a/packages/xorg-lib/libx11/fix-utf8-wrong-define.patch b/packages/xorg-lib/libx11/fix-utf8-wrong-define.patch new file mode 100644 index 0000000000..a098db1941 --- /dev/null +++ b/packages/xorg-lib/libx11/fix-utf8-wrong-define.patch @@ -0,0 +1,16 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- libX11-X11R7.0-1.0.0/include/X11/Xlib.h~fix-utf8-wrong-define ++++ libX11-X11R7.0-1.0.0/include/X11/Xlib.h +@@ -103,7 +103,7 @@ + + /* API mentioning "UTF8" or "utf8" is an XFree86 extension, introduced in + November 2000. Its presence is indicated through the following macro. */ +-#define X_HAVE_UTF8_STRING 1 ++#undef X_HAVE_UTF8_STRING + + typedef char *XPointer; + diff --git a/packages/xorg-lib/libx11/ruutf8.patch b/packages/xorg-lib/libx11/ruutf8.patch new file mode 100644 index 0000000000..0822b30cb8 --- /dev/null +++ b/packages/xorg-lib/libx11/ruutf8.patch @@ -0,0 +1,12 @@ +diff --git a/nls/locale.alias.pre b/nls/locale.alias.pre +index a74ca75..ff5bc3f 100644 +--- a/nls/locale.alias.pre ++++ b/nls/locale.alias.pre +@@ -898,6 +898,7 @@ ru_RU.cp1251: ru_RU.CP1251 + ru_RU.microsoftcp1251: ru_RU.CP1251 + ru_RU.microsoft-cp1251: ru_RU.CP1251 + ru_RU.MICROSOFT-CP1251: ru_RU.CP1251 ++ru_RU.utf8: ru_RU.UTF-8 + #if defined(INCLUDE_ru_SU) + XCOMM ru_SU is redundant now + ru_SU: ru_RU.KOI8-R diff --git a/packages/xorg-lib/libx11/xchar2b.patch b/packages/xorg-lib/libx11/xchar2b.patch new file mode 100644 index 0000000000..31da58fa5c --- /dev/null +++ b/packages/xorg-lib/libx11/xchar2b.patch @@ -0,0 +1,13 @@ +http://www.koka-in.org/~kensyu/zaurus/diary/20030618.html + +--- /tmp/Xlib.h 2006-12-01 14:40:27.000000000 +0100 ++++ libX11-X11R7.1-1.0.1/include/X11/Xlib.h 2006-12-01 14:40:56.948254000 +0100 +@@ -1067,7 +1067,7 @@ + typedef struct { /* normal 16 bit characters are two bytes */ + unsigned char byte1; + unsigned char byte2; +-} XChar2b; ++} __attribute__ ((packed)) XChar2b; + + typedef struct { + XChar2b *chars; /* two byte characters */ diff --git a/packages/xorg-lib/libx11/xim.patch b/packages/xorg-lib/libx11/xim.patch new file mode 100644 index 0000000000..0eab197a80 --- /dev/null +++ b/packages/xorg-lib/libx11/xim.patch @@ -0,0 +1,55 @@ +--- libX11-6.2.1/src/X18NCMSstubs.c 2003-12-04 22:47:47.000000000 +0000 ++++ libX11-6.2.1/src/X18NCMSstubs.c-new 2005-12-09 12:09:03.000000000 +0000 +@@ -90,6 +90,52 @@ + return; + } + ++XIM ++XOpenIM ( ++ Display* display, ++ struct _XrmHashBucketRec* rdb, ++ char* res_name, ++ char* res_class) ++{ ++ return (XIM) NULL; ++} ++ ++Status ++XCloseIM ( XIM im ) ++{ ++ return NULL; ++} ++ ++XIC ++XCreateIC ( XIM im, ...) ++{ ++ return NULL; ++} ++ ++void ++XDestroyIC ( XIC ic ) ++{ ++ return; ++} ++ ++int ++XmbLookupString ( ++ XIC ic, ++ XKeyPressedEvent* ev, ++ char* buffer, ++ int nbytes, ++ KeySym* keysym, ++ Status* status) ++{ ++ return XLookupNone; ++} ++ ++char * ++XGetICValues( XIC ic, ...) ++{ ++ return (char *) NULL; ++} ++ + XPointer + _XimGetLocaleCode ( _Xconst char* encoding_name ) + { diff --git a/packages/xorg-lib/libxdamage/.mtn2git_empty b/packages/xorg-lib/libxdamage/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxdamage/m4.patch b/packages/xorg-lib/libxdamage/m4.patch deleted file mode 100644 index 393f3d13d2..0000000000 --- a/packages/xorg-lib/libxdamage/m4.patch +++ /dev/null @@ -1,65 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- /dev/null -+++ Xdamage/m4/pkg.m4 -@@ -0,0 +1,57 @@ -+ -+dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) -+dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page -+dnl also defines GSTUFF_PKG_ERRORS on error -+AC_DEFUN(PKG_CHECK_MODULES, [ -+ succeeded=no -+ -+ if test -z "$PKG_CONFIG"; then -+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no) -+ fi -+ -+ if test "$PKG_CONFIG" = "no" ; then -+ echo "*** The pkg-config script could not be found. Make sure it is" -+ echo "*** in your path, or set the PKG_CONFIG environment variable" -+ echo "*** to the full path to pkg-config." -+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." -+ else -+ PKG_CONFIG_MIN_VERSION=0.9.0 -+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then -+ AC_MSG_CHECKING(for $2) -+ -+ if $PKG_CONFIG --exists "$2" ; then -+ AC_MSG_RESULT(yes) -+ succeeded=yes -+ -+ AC_MSG_CHECKING($1_CFLAGS) -+ $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` -+ AC_MSG_RESULT($$1_CFLAGS) -+ -+ AC_MSG_CHECKING($1_LIBS) -+ $1_LIBS=`$PKG_CONFIG --libs "$2"` -+ AC_MSG_RESULT($$1_LIBS) -+ else -+ $1_CFLAGS="" -+ $1_LIBS="" -+ ## If we have a custom action on failure, don't print errors, but -+ ## do set a variable so people can do so. -+ $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` -+ ifelse([$4], ,echo $$1_PKG_ERRORS,) -+ fi -+ -+ AC_SUBST($1_CFLAGS) -+ AC_SUBST($1_LIBS) -+ else -+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." -+ echo "*** See http://www.freedesktop.org/software/pkgconfig" -+ fi -+ fi -+ -+ if test $succeeded = yes; then -+ ifelse([$3], , :, [$3]) -+ else -+ ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) -+ fi -+]) -+ -+ diff --git a/packages/xorg-lib/libxfont/scalable.patch b/packages/xorg-lib/libxfont/scalable.patch deleted file mode 100644 index 7f97b9a8f6..0000000000 --- a/packages/xorg-lib/libxfont/scalable.patch +++ /dev/null @@ -1,27 +0,0 @@ -Index: fontfile/fontdir.c -=================================================================== -RCS file: /cvs/xlibs/Xfont/fontfile/fontdir.c,v -retrieving revision 3.22 -diff -u -r3.22 fontdir.c ---- xfont/fontfile/fontdir.c 7 Jul 2003 16:40:11 -0000 3.22 -+++ xfont/fontfile/fontdir.c 30 Dec 2004 20:37:12 -0000 -@@ -699,6 +699,11 @@ - */ - if (isscale) - { -+ /* If the fontname says it is scalable, make sure that the -+ * renderer supports OpenScalable and GetInfoScalable. -+ */ -+ if (renderer->OpenScalable && renderer->GetInfoScalable) -+ { - if (vals.values_supplied & SIZE_SPECIFY_MASK) - { - bzero((char *)&zeroVals, sizeof(zeroVals)); -@@ -798,6 +803,7 @@ - bitmap->name.name); - } - } -+ } - } - return TRUE; - } diff --git a/packages/xorg-lib/libxft/.mtn2git_empty b/packages/xorg-lib/libxft/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxi/.mtn2git_empty b/packages/xorg-lib/libxi/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xorg-lib/libxpm/.mtn2git_empty b/packages/xorg-lib/libxpm/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 -- cgit v1.2.3 From 3d643c2aa51794be0e01fa8e5fb8df4d34070780 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 18 Feb 2008 23:33:06 +0000 Subject: renderproto: remove default preference after fixing xserv-kdrive-xomap --- packages/xorg-proto/renderproto_0.9.3.bb | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/xorg-proto/renderproto_0.9.3.bb b/packages/xorg-proto/renderproto_0.9.3.bb index f1d19df46e..3d20b24afd 100644 --- a/packages/xorg-proto/renderproto_0.9.3.bb +++ b/packages/xorg-proto/renderproto_0.9.3.bb @@ -2,5 +2,3 @@ require xorg-proto-common.inc CONFLICTS = "renderext" PE = "1" - -DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From f659468be29e8e2056fc1aa9f382abd790fcd6f8 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Mon, 18 Feb 2008 23:34:42 +0000 Subject: nokia770.conf: Fix virtual/xserver --- conf/machine/nokia770.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/nokia770.conf b/conf/machine/nokia770.conf index 4e36c6d38a..15126d56a9 100644 --- a/conf/machine/nokia770.conf +++ b/conf/machine/nokia770.conf @@ -4,7 +4,7 @@ TARGET_ARCH = "arm" PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5te" -PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive-omap" +PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive-xomap" PREFERRED_PROVIDER_virtual/bootloader = "" PREFERRED_PROVIDER_tslib = "tslib-maemo" -- cgit v1.2.3 From 120896d7c0cb48c44d52fcf26b399610be14d428 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Tue, 19 Feb 2008 00:02:50 +0000 Subject: libhildonmime: Set extra config flag to avoid -Werror to get used. --- packages/maemo4/libhildonmime_1.10.0.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/maemo4/libhildonmime_1.10.0.bb b/packages/maemo4/libhildonmime_1.10.0.bb index 68cdd64413..2198f6b2ee 100644 --- a/packages/maemo4/libhildonmime_1.10.0.bb +++ b/packages/maemo4/libhildonmime_1.10.0.bb @@ -5,3 +5,5 @@ DEPENDS += "osso-gnome-vfs2" PR = "r0" SRC_URI = "http://repository.maemo.org/pool/maemo4.0/free/source/libh/${PN}/${PN}_${PV}-1.tar.gz" + +EXTRA_OECONF += "--with-compile-warnings=no" -- cgit v1.2.3 From 3c93cedf7c10f7751de0209cd33338cca8005c11 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 00:24:34 +0000 Subject: python-dbus 0.81.1 update to 0.82.4, patches no longer necessary --- packages/python/python-dbus/.mtn2git_empty | 0 .../python/python-dbus/allow-older-autotools.patch | 27 ---------------------- packages/python/python-dbus/python-path.patch | 21 ----------------- packages/python/python-dbus_0.81.1.bb | 22 ------------------ packages/python/python-dbus_0.82.4.bb | 20 ++++++++++++++++ 5 files changed, 20 insertions(+), 70 deletions(-) delete mode 100644 packages/python/python-dbus/.mtn2git_empty delete mode 100644 packages/python/python-dbus/allow-older-autotools.patch delete mode 100644 packages/python/python-dbus/python-path.patch delete mode 100644 packages/python/python-dbus_0.81.1.bb create mode 100644 packages/python/python-dbus_0.82.4.bb diff --git a/packages/python/python-dbus/.mtn2git_empty b/packages/python/python-dbus/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/python/python-dbus/allow-older-autotools.patch b/packages/python/python-dbus/allow-older-autotools.patch deleted file mode 100644 index 7595f70e5d..0000000000 --- a/packages/python/python-dbus/allow-older-autotools.patch +++ /dev/null @@ -1,27 +0,0 @@ -# -# so it looks like dbus-python really doesn't make use of any 2.59c features -# Signed-Off: mickey@openmoko.org -# -Index: dbus-python-0.81.1/configure.ac -=================================================================== ---- dbus-python-0.81.1.orig/configure.ac 2007-06-04 13:17:10.000000000 +0000 -+++ dbus-python-0.81.1/configure.ac 2007-06-11 06:57:20.000000000 +0000 -@@ -1,5 +1,5 @@ - -*- mode: m4 -*- --AC_PREREQ(2.59c) -+AC_PREREQ(2.59) - - dnl If not 1, append datestamp to the version number - m4_define(dbus_python_released, 1) -Index: dbus-python-0.81.1/Makefile.am -=================================================================== ---- dbus-python-0.81.1.orig/Makefile.am 2007-05-09 09:44:40.000000000 +0000 -+++ dbus-python-0.81.1/Makefile.am 2007-06-11 06:59:23.000000000 +0000 -@@ -38,6 +38,7 @@ - - TXT_RSTDOCS = doc/tutorial.txt doc/API_CHANGES.txt doc/HACKING.txt - RSTDOCS = README NEWS TODO -+docdir=foo - dist_doc_DATA = $(TXT_RSTDOCS) $(RSTDOCS) - - maintainer-update-website: _maintainer-update-apidocs \ diff --git a/packages/python/python-dbus/python-path.patch b/packages/python/python-dbus/python-path.patch deleted file mode 100644 index 6bdbd19d03..0000000000 --- a/packages/python/python-dbus/python-path.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- dbus-python-0.81.1/m4.orig/am-check-python-headers.m4 -+++ dbus-python-0.81.1/m4/am-check-python-headers.m4 -@@ -7214,12 +7214,18 @@ - [AC_REQUIRE([AM_PATH_PYTHON]) - AC_MSG_CHECKING(for headers required to compile python extensions) - dnl deduce PYTHON_INCLUDES -+AC_ARG_WITH(python-includes, -+ [ --with-python-includes=DIR path to Python includes], py_exec_prefix=$withval) -+if test x$py_exec_prefix != x; then -+PYTHON_INCLUDES="-I${py_exec_prefix}/include/python${PYTHON_VERSION}" -+else - py_prefix=`$PYTHON -c "import sys; print sys.prefix"` - py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` - PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" - if test "$py_prefix" != "$py_exec_prefix"; then - PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" - fi -+fi - AC_SUBST(PYTHON_INCLUDES) - dnl check if the headers exist: - save_CPPFLAGS="$CPPFLAGS" diff --git a/packages/python/python-dbus_0.81.1.bb b/packages/python/python-dbus_0.81.1.bb deleted file mode 100644 index 86628bad26..0000000000 --- a/packages/python/python-dbus_0.81.1.bb +++ /dev/null @@ -1,22 +0,0 @@ -DESCRIPTION = "Python bindings for DBus, a socket-based message bus system for interprocess communication" -SECTION = "devel/python" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" -LICENSE = "GPL" -DEPENDS = "expat glib-2.0 virtual/libintl python-pyrex-native python" -RDEPENDS = "dbus python-threading python-io python-stringold python-logging" -PR = "ml2" - -SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz \ - file://allow-older-autotools.patch;patch=1 \ - file://python-path.patch;patch=1" - -S = "${WORKDIR}/dbus-python-${PV}" - -inherit distutils-base autotools - -EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../" - -do_stage() { - autotools_stage_all -} - diff --git a/packages/python/python-dbus_0.82.4.bb b/packages/python/python-dbus_0.82.4.bb new file mode 100644 index 0000000000..9f00c64701 --- /dev/null +++ b/packages/python/python-dbus_0.82.4.bb @@ -0,0 +1,20 @@ +DESCRIPTION = "Python bindings for DBus, a socket-based message bus system for interprocess communication" +SECTION = "devel/python" +HOMEPAGE = "http://www.freedesktop.org/Software/dbus" +LICENSE = "MIT" +DEPENDS = "expat glib-2.0 virtual/libintl python-pyrex-native python" +RDEPENDS = "dbus python-threading python-io python-stringold python-logging" +PR = "ml0" + +SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz" +S = "${WORKDIR}/dbus-python-${PV}" + +inherit distutils-base autotools + +export BUILD_SYS := "${BUILD_SYS}" +export HOST_SYS := "${HOST_SYS}" + +do_stage() { + autotools_stage_all +} + -- cgit v1.2.3 From a26724d94e4499a95343d7d4069dc3c006f85365 Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Tue, 19 Feb 2008 00:24:46 +0000 Subject: hildon-thumbnail: Add missing dependencies... --- packages/maemo4/hildon-thumbnail_0.14.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/maemo4/hildon-thumbnail_0.14.bb b/packages/maemo4/hildon-thumbnail_0.14.bb index adc52b3912..4098e465b1 100644 --- a/packages/maemo4/hildon-thumbnail_0.14.bb +++ b/packages/maemo4/hildon-thumbnail_0.14.bb @@ -1,6 +1,6 @@ require hildon-thumbnail.inc -DEPENDS = "libhildon libosso" +DEPENDS = "libhildon libosso osso-gnome-vfs2" PR = "r0" -- cgit v1.2.3 From b5a19ef64dc7a61915bf05510a975dd9d1dce2ee Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 00:33:18 +0000 Subject: ipkg: Partially fix broken version comparisions --- .../ipkg/files/update_version_comparision.patch | 82 ++++++++++++++++++++++ packages/ipkg/ipkg-native_0.99.163.bb | 3 +- packages/ipkg/ipkg.inc | 1 + packages/ipkg/ipkg_0.99.163.bb | 2 +- 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 packages/ipkg/files/update_version_comparision.patch diff --git a/packages/ipkg/files/update_version_comparision.patch b/packages/ipkg/files/update_version_comparision.patch new file mode 100644 index 0000000000..9f617ef9f0 --- /dev/null +++ b/packages/ipkg/files/update_version_comparision.patch @@ -0,0 +1,82 @@ +Update the version comparision to a more recent one from dpkg. This +means it now recognises 0.0-foo > 0.0+foo as it should. + +Index: ipkg-0.99.163/pkg.c +=================================================================== +--- ipkg-0.99.163.orig/pkg.c 2008-02-18 11:24:45.000000000 +0000 ++++ ipkg-0.99.163/pkg.c 2008-02-19 00:24:50.000000000 +0000 +@@ -1128,43 +1130,37 @@ + return r; + } + +-int verrevcmp(const char *val, const char *ref) +-{ +- int vc, rc; +- long vl, rl; +- const char *vp, *rp; +- const char *vsep, *rsep; +- +- if (!val) val= ""; +- if (!ref) ref= ""; +- for (;;) { +- vp= val; while (*vp && !isdigit(*vp)) vp++; +- rp= ref; while (*rp && !isdigit(*rp)) rp++; +- for (;;) { +- vc= (val == vp) ? 0 : *val++; +- rc= (ref == rp) ? 0 : *ref++; +- if (!rc && !vc) break; +- if (vc && !isalpha(vc)) vc += 256; /* assumes ASCII character set */ +- if (rc && !isalpha(rc)) rc += 256; +- if (vc != rc) return vc - rc; +- } +- val= vp; +- ref= rp; +- vl=0; if (isdigit(*vp)) vl= strtol(val,(char**)&val,10); +- rl=0; if (isdigit(*rp)) rl= strtol(ref,(char**)&ref,10); +- if (vl != rl) return vl - rl; +- +- vc = *val; +- rc = *ref; +- vsep = strchr(".-", vc); +- rsep = strchr(".-", rc); +- if (vsep && !rsep) return -1; +- if (!vsep && rsep) return +1; +- +- if (!*val && !*ref) return 0; +- if (!*val) return -1; +- if (!*ref) return +1; +- } ++/* assume ascii; warning: evaluates x multiple times! */ ++#define order(x) ((x) == '~' ? -1 \ ++ : isdigit((x)) ? 0 \ ++ : !(x) ? 0 \ ++ : isalpha((x)) ? (x) \ ++ : (x) + 256) ++ ++static int verrevcmp(const char *val, const char *ref) { ++ if (!val) val= ""; ++ if (!ref) ref= ""; ++ ++ while (*val || *ref) { ++ int first_diff= 0; ++ ++ while ( (*val && !isdigit(*val)) || (*ref && !isdigit(*ref)) ) { ++ int vc= order(*val), rc= order(*ref); ++ if (vc != rc) return vc - rc; ++ val++; ref++; ++ } ++ ++ while ( *val == '0' ) val++; ++ while ( *ref == '0' ) ref++; ++ while (isdigit(*val) && isdigit(*ref)) { ++ if (!first_diff) first_diff= *val - *ref; ++ val++; ref++; ++ } ++ if (isdigit(*val)) return 1; ++ if (isdigit(*ref)) return -1; ++ if (first_diff) return first_diff; ++ } ++ return 0; + } + + int pkg_version_satisfied(pkg_t *it, pkg_t *ref, const char *op) diff --git a/packages/ipkg/ipkg-native_0.99.163.bb b/packages/ipkg/ipkg-native_0.99.163.bb index 7a95b28159..163eba62e2 100644 --- a/packages/ipkg/ipkg-native_0.99.163.bb +++ b/packages/ipkg/ipkg-native_0.99.163.bb @@ -2,11 +2,12 @@ S = "${WORKDIR}/ipkg-${PV}" #require ipkg_${PV}.bb require ipkg-native.inc -PR = "r4" +PR = "r5" inherit autotools pkgconfig native SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \ + file://update_version_comparision.patch;patch=1 \ file://is-processing.patch;patch=1 \ file://1-pkg-parse--Optimize-inefficient-parsing.patch;patch=1 \ file://2-pkg-vec--Optimize-gross-inefficiency.patch;patch=1 \ diff --git a/packages/ipkg/ipkg.inc b/packages/ipkg/ipkg.inc index 9154572f08..980a4265bd 100644 --- a/packages/ipkg/ipkg.inc +++ b/packages/ipkg/ipkg.inc @@ -10,6 +10,7 @@ FILES_libipkg = "${libdir}/*.so.*" AUTO_LIBNAME_PKGS = "libipkg" SRC_URI = "${HANDHELDS_CVS};module=familiar/dist/ipkg;tag=${@'V' + bb.data.getVar('PV',d,1).replace('.', '-')} \ + file://update_version_comparision.patch;patch=1 \ file://ipkg-configure \ file://terse.patch;patch=1" diff --git a/packages/ipkg/ipkg_0.99.163.bb b/packages/ipkg/ipkg_0.99.163.bb index fccfe8d53f..f2d7652b89 100644 --- a/packages/ipkg/ipkg_0.99.163.bb +++ b/packages/ipkg/ipkg_0.99.163.bb @@ -1,5 +1,5 @@ include ipkg.inc -PR = "r6" +PR = "r7" S = "${WORKDIR}/ipkg-${PV}" -- cgit v1.2.3 From 77dae1e21672ceae799faab554cb0277047d33c1 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 00:53:36 +0000 Subject: ipkg: Enable debian revision comparing --- packages/ipkg/files/enable_debversion.patch | 111 +++++++++++++++++++++ .../ipkg/files/update_version_comparision.patch | 2 + packages/ipkg/ipkg-native_0.99.163.bb | 3 +- packages/ipkg/ipkg.inc | 1 + packages/ipkg/ipkg_0.99.163.bb | 2 +- 5 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 packages/ipkg/files/enable_debversion.patch diff --git a/packages/ipkg/files/enable_debversion.patch b/packages/ipkg/files/enable_debversion.patch new file mode 100644 index 0000000000..e9c3a7a1d4 --- /dev/null +++ b/packages/ipkg/files/enable_debversion.patch @@ -0,0 +1,111 @@ +OE makes heavy use of the revision field so it makes sense to +enable it. We don't want the familiar stuff though so patch that +out. + +RP - 19/02/2008 + +Index: ipkg-0.99.163/pkg.c +=================================================================== +--- ipkg-0.99.163.orig/pkg.c 2008-02-19 00:35:03.000000000 +0000 ++++ ipkg-0.99.163/pkg.c 2008-02-19 00:36:02.000000000 +0000 +@@ -1118,15 +1118,11 @@ + return r; + } + +-#ifdef USE_DEBVERSION + r = verrevcmp(pkg->revision, ref_pkg->revision); + if (r) { + return r; + } + +- r = verrevcmp(pkg->familiar_revision, ref_pkg->familiar_revision); +-#endif +- + return r; + } + +@@ -1240,10 +1236,7 @@ + { + char *complete_version; + char *epoch_str; +-#ifdef USE_DEBVERSION + char *revision_str; +- char *familiar_revision_str; +-#endif + + if (pkg->epoch) { + sprintf_alloc(&epoch_str, "%d:", pkg->epoch); +@@ -1251,33 +1244,18 @@ + epoch_str = strdup(""); + } + +-#ifdef USE_DEBVERSION + if (pkg->revision && strlen(pkg->revision)) { + sprintf_alloc(&revision_str, "-%s", pkg->revision); + } else { + revision_str = strdup(""); + } + +- if (pkg->familiar_revision && strlen(pkg->familiar_revision)) { +- sprintf_alloc(&familiar_revision_str, "-fam%s", pkg->familiar_revision); +- } else { +- familiar_revision_str = strdup(""); +- } +-#endif + +-#ifdef USE_DEBVERSION +- sprintf_alloc(&complete_version, "%s%s%s%s", +- epoch_str, pkg->version, revision_str, familiar_revision_str); +-#else +- sprintf_alloc(&complete_version, "%s%s", +- epoch_str, pkg->version); +-#endif ++ sprintf_alloc(&complete_version, "%s%s%s", ++ epoch_str, pkg->version, revision_str); + + free(epoch_str); +-#ifdef USE_DEBVERSION + free(revision_str); +- free(familiar_revision_str); +-#endif + + return complete_version; + } +Index: ipkg-0.99.163/pkg_parse.c +=================================================================== +--- ipkg-0.99.163.orig/pkg_parse.c 2008-02-19 00:35:03.000000000 +0000 ++++ ipkg-0.99.163/pkg_parse.c 2008-02-19 00:38:42.000000000 +0000 +@@ -105,9 +105,7 @@ + int parseVersion(pkg_t *pkg, char *raw) + { + char *colon, *eepochcolon; +-#ifdef USE_DEBVERSION + char *hyphen; +-#endif + unsigned long epoch; + + if (!*raw) { +@@ -149,23 +147,12 @@ + } + strcpy(pkg->version, raw); + +-#ifdef USE_DEBVERSION + hyphen= strrchr(pkg->version,'-'); + + if (hyphen) { + *hyphen++= 0; +- if (strncmp("fam", hyphen, 3) == 0) { +- pkg->familiar_revision=hyphen+3; +- hyphen= strrchr(pkg->version,'-'); +- if (hyphen) { +- *hyphen++= 0; +- pkg->revision = hyphen; +- } +- } else { + pkg->revision = hyphen; +- } + } +-#endif + + /* + fprintf(stderr,"Parsed version: %lu, %s, %s, %s\n", diff --git a/packages/ipkg/files/update_version_comparision.patch b/packages/ipkg/files/update_version_comparision.patch index 9f617ef9f0..b0d0df525b 100644 --- a/packages/ipkg/files/update_version_comparision.patch +++ b/packages/ipkg/files/update_version_comparision.patch @@ -1,6 +1,8 @@ Update the version comparision to a more recent one from dpkg. This means it now recognises 0.0-foo > 0.0+foo as it should. +RP - 19/02/2008 + Index: ipkg-0.99.163/pkg.c =================================================================== --- ipkg-0.99.163.orig/pkg.c 2008-02-18 11:24:45.000000000 +0000 diff --git a/packages/ipkg/ipkg-native_0.99.163.bb b/packages/ipkg/ipkg-native_0.99.163.bb index 163eba62e2..dd9ff16b65 100644 --- a/packages/ipkg/ipkg-native_0.99.163.bb +++ b/packages/ipkg/ipkg-native_0.99.163.bb @@ -2,12 +2,13 @@ S = "${WORKDIR}/ipkg-${PV}" #require ipkg_${PV}.bb require ipkg-native.inc -PR = "r5" +PR = "r6" inherit autotools pkgconfig native SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \ file://update_version_comparision.patch;patch=1 \ + file://enable_debversion.patch;patch=1 \ file://is-processing.patch;patch=1 \ file://1-pkg-parse--Optimize-inefficient-parsing.patch;patch=1 \ file://2-pkg-vec--Optimize-gross-inefficiency.patch;patch=1 \ diff --git a/packages/ipkg/ipkg.inc b/packages/ipkg/ipkg.inc index 980a4265bd..ee5da71c22 100644 --- a/packages/ipkg/ipkg.inc +++ b/packages/ipkg/ipkg.inc @@ -11,6 +11,7 @@ AUTO_LIBNAME_PKGS = "libipkg" SRC_URI = "${HANDHELDS_CVS};module=familiar/dist/ipkg;tag=${@'V' + bb.data.getVar('PV',d,1).replace('.', '-')} \ file://update_version_comparision.patch;patch=1 \ + file://enable_debversion.patch;patch=1 \ file://ipkg-configure \ file://terse.patch;patch=1" diff --git a/packages/ipkg/ipkg_0.99.163.bb b/packages/ipkg/ipkg_0.99.163.bb index f2d7652b89..f546f6e6c8 100644 --- a/packages/ipkg/ipkg_0.99.163.bb +++ b/packages/ipkg/ipkg_0.99.163.bb @@ -1,5 +1,5 @@ include ipkg.inc -PR = "r7" +PR = "r8" S = "${WORKDIR}/ipkg-${PV}" -- cgit v1.2.3 From 482ff00d8922c122953206660d1baac0e26cca76 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Tue, 19 Feb 2008 06:25:09 +0000 Subject: linux-2.6.24: add defconfig for qemux86 --- packages/linux/linux-2.6.24/qemux86/.mtn2git_empty | 0 packages/linux/linux-2.6.24/qemux86/defconfig | 2039 ++++++++++++++++++++ packages/linux/linux_2.6.24.bb | 1 + 3 files changed, 2040 insertions(+) create mode 100644 packages/linux/linux-2.6.24/qemux86/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.24/qemux86/defconfig diff --git a/packages/linux/linux-2.6.24/qemux86/.mtn2git_empty b/packages/linux/linux-2.6.24/qemux86/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.24/qemux86/defconfig b/packages/linux/linux-2.6.24/qemux86/defconfig new file mode 100644 index 0000000000..c143746db8 --- /dev/null +++ b/packages/linux/linux-2.6.24/qemux86/defconfig @@ -0,0 +1,2039 @@ +# +# 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=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_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=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 is not set +CONFIG_NF_CT_PROTO_GRE=m +# CONFIG_NF_CT_PROTO_SCTP is not set +# CONFIG_NF_CT_PROTO_UDPLITE is not set +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +# CONFIG_NF_CONNTRACK_H323 is not set +CONFIG_NF_CONNTRACK_IRC=m +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set +CONFIG_NF_CONNTRACK_PPTP=m +# CONFIG_NF_CONNTRACK_SANE is not set +# CONFIG_NF_CONNTRACK_SIP is not set +CONFIG_NF_CONNTRACK_TFTP=m +# CONFIG_NF_CT_NETLINK is not set +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +# CONFIG_IP_NF_TARGET_SAME is not set +# CONFIG_NF_NAT_SNMP_BASIC is not set +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +# CONFIG_NF_NAT_H323 is not set +# CONFIG_NF_NAT_SIP is not set +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 is not set +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_NF_CONNTRACK_IPV6 is not set +# 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 +CONFIG_NET_CLS_ROUTE=y + +# +# 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_2.6.24.bb b/packages/linux/linux_2.6.24.bb index 04470bdf03..a6f24a4ec0 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -4,6 +4,7 @@ require linux.inc DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_gesbc-9302 = "1" DEFAULT_PREFERENCE_mpc8313e-rdb = "1" +DEFAULT_PREFERENCE_qemux86 = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" -- cgit v1.2.3 From 7904f3397095b3b1d8b7eb96a10c455019a1e71b Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Tue, 19 Feb 2008 09:26:36 +0000 Subject: classes/kernel.bbclass: fix staging for x86 on kernels >= 2.6.24 --- classes/kernel.bbclass | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index 6c12004dad..1e325323df 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -128,6 +128,10 @@ kernel_do_stage() { if [ -e arch/${ARCH}/Makefile ]; then install -d ${STAGING_KERNEL_DIR}/arch/${ARCH} install -m 0644 arch/${ARCH}/Makefile* ${STAGING_KERNEL_DIR}/arch/${ARCH} + # Otherwise check arch/x86/Makefile for i386 and x86_64 on kernels >= 2.6.24 + elif [ -e arch/x86/Makefile ]; then + install -d ${STAGING_KERNEL_DIR}/arch/x86 + install -m 0644 arch/x86/Makefile* ${STAGING_KERNEL_DIR}/arch/x86 fi cp -fR include/config* ${STAGING_KERNEL_DIR}/include/ install -m 0644 ${KERNEL_OUTPUT} ${STAGING_KERNEL_DIR}/${KERNEL_IMAGETYPE} -- cgit v1.2.3 From ea207caf4f396116444d2eb734de37fc16248a71 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 11:31:24 +0000 Subject: sanity.conf: Set the minimum bitbake version for OE.dev to 1.8.10 --- conf/sanity.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/sanity.conf b/conf/sanity.conf index fe1e2282e4..0d494f1409 100644 --- a/conf/sanity.conf +++ b/conf/sanity.conf @@ -3,6 +3,6 @@ # See sanity.bbclass # # Expert users can confirm their sanity with "touch conf/sanity.conf" -BB_MIN_VERSION = "1.8.8" +BB_MIN_VERSION = "1.8.10" INHERIT += "sanity" -- cgit v1.2.3 From c53219c559c828a4626b138a332a6bf4440975ac Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Tue, 19 Feb 2008 11:32:42 +0000 Subject: linux-rp-2.6.24: add netfilter modules for qemux86, make 2.6.24 preferred --- packages/linux/linux-rp-2.6.24/defconfig-qemux86 | 106 ++++++++++++++++------- packages/linux/linux-rp_2.6.24.bb | 3 +- 2 files changed, 78 insertions(+), 31 deletions(-) diff --git a/packages/linux/linux-rp-2.6.24/defconfig-qemux86 b/packages/linux/linux-rp-2.6.24/defconfig-qemux86 index e0094fec3c..c143746db8 100644 --- a/packages/linux/linux-rp-2.6.24/defconfig-qemux86 +++ b/packages/linux/linux-rp-2.6.24/defconfig-qemux86 @@ -396,42 +396,70 @@ CONFIG_NETFILTER=y # # Core Netfilter Configuration # -# CONFIG_NETFILTER_NETLINK is not set -# CONFIG_NF_CONNTRACK_ENABLED is not set -# CONFIG_NF_CONNTRACK is not set +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 is not set +CONFIG_NF_CT_PROTO_GRE=m +# CONFIG_NF_CT_PROTO_SCTP is not set +# CONFIG_NF_CT_PROTO_UDPLITE is not set +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +# CONFIG_NF_CONNTRACK_H323 is not set +CONFIG_NF_CONNTRACK_IRC=m +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set +CONFIG_NF_CONNTRACK_PPTP=m +# CONFIG_NF_CONNTRACK_SANE is not set +# CONFIG_NF_CONNTRACK_SIP is not set +CONFIG_NF_CONNTRACK_TFTP=m +# CONFIG_NF_CT_NETLINK 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_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m # 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 +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m # # IP: Netfilter Configuration # -CONFIG_IP_NF_QUEUE=m +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 @@ -445,10 +473,26 @@ 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 is not set +# CONFIG_NF_NAT_SNMP_BASIC is not set +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +# CONFIG_NF_NAT_H323 is not set +# CONFIG_NF_NAT_SIP is not set 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 is not set CONFIG_IP_NF_RAW=m CONFIG_IP_NF_ARPTABLES=m CONFIG_IP_NF_ARPFILTER=m @@ -457,6 +501,7 @@ CONFIG_IP_NF_ARP_MANGLE=m # # IPv6: Netfilter Configuration (EXPERIMENTAL) # +# CONFIG_NF_CONNTRACK_IPV6 is not set # CONFIG_IP6_NF_QUEUE is not set # CONFIG_IP6_NF_IPTABLES is not set # CONFIG_IP_DCCP is not set @@ -474,6 +519,7 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_SCHED is not set +CONFIG_NET_CLS_ROUTE=y # # Network testing diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb index c42b2d2ce7..b3e04980de 100644 --- a/packages/linux/linux-rp_2.6.24.bb +++ b/packages/linux/linux-rp_2.6.24.bb @@ -1,9 +1,10 @@ require linux-rp.inc -PR = "r4" +PR = "r5" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_collie = "1" +DEFAULT_PREFERENCE_qemux86 = "1" # Handy URLs # git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 -- cgit v1.2.3 From c854b1a4246ba2769442daca3c1b39219127ab0c Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Tue, 19 Feb 2008 11:36:33 +0000 Subject: linux-2.6.24: revert addition of qemux86 defconfig, use linux-rp-2.6.24 instead --- packages/linux/linux-2.6.24/qemux86/.mtn2git_empty | 0 packages/linux/linux-2.6.24/qemux86/defconfig | 2039 -------------------- packages/linux/linux_2.6.24.bb | 1 - 3 files changed, 2040 deletions(-) delete mode 100644 packages/linux/linux-2.6.24/qemux86/.mtn2git_empty delete mode 100644 packages/linux/linux-2.6.24/qemux86/defconfig diff --git a/packages/linux/linux-2.6.24/qemux86/.mtn2git_empty b/packages/linux/linux-2.6.24/qemux86/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/linux-2.6.24/qemux86/defconfig b/packages/linux/linux-2.6.24/qemux86/defconfig deleted file mode 100644 index c143746db8..0000000000 --- a/packages/linux/linux-2.6.24/qemux86/defconfig +++ /dev/null @@ -1,2039 +0,0 @@ -# -# 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=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_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=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 is not set -CONFIG_NF_CT_PROTO_GRE=m -# CONFIG_NF_CT_PROTO_SCTP is not set -# CONFIG_NF_CT_PROTO_UDPLITE is not set -CONFIG_NF_CONNTRACK_AMANDA=m -CONFIG_NF_CONNTRACK_FTP=m -# CONFIG_NF_CONNTRACK_H323 is not set -CONFIG_NF_CONNTRACK_IRC=m -# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set -CONFIG_NF_CONNTRACK_PPTP=m -# CONFIG_NF_CONNTRACK_SANE is not set -# CONFIG_NF_CONNTRACK_SIP is not set -CONFIG_NF_CONNTRACK_TFTP=m -# CONFIG_NF_CT_NETLINK is not set -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -CONFIG_NETFILTER_XT_TARGET_TRACE=m -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -# CONFIG_NETFILTER_XT_MATCH_SCTP is not set -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_TIME=m -CONFIG_NETFILTER_XT_MATCH_U32=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -# CONFIG_IP_NF_QUEUE is not set -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_IPRANGE=m -CONFIG_IP_NF_MATCH_TOS=m -CONFIG_IP_NF_MATCH_RECENT=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_TARGET_NETMAP=m -# CONFIG_IP_NF_TARGET_SAME is not set -# CONFIG_NF_NAT_SNMP_BASIC is not set -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_TFTP=m -CONFIG_NF_NAT_AMANDA=m -CONFIG_NF_NAT_PPTP=m -# CONFIG_NF_NAT_H323 is not set -# CONFIG_NF_NAT_SIP is not set -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 is not set -CONFIG_IP_NF_RAW=m -CONFIG_IP_NF_ARPTABLES=m -CONFIG_IP_NF_ARPFILTER=m -CONFIG_IP_NF_ARP_MANGLE=m - -# -# IPv6: Netfilter Configuration (EXPERIMENTAL) -# -# CONFIG_NF_CONNTRACK_IPV6 is not set -# 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 -CONFIG_NET_CLS_ROUTE=y - -# -# 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_2.6.24.bb b/packages/linux/linux_2.6.24.bb index a6f24a4ec0..04470bdf03 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -4,7 +4,6 @@ require linux.inc DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_gesbc-9302 = "1" DEFAULT_PREFERENCE_mpc8313e-rdb = "1" -DEFAULT_PREFERENCE_qemux86 = "1" DEPENDS_append_mpc8313e-rdb = " dtc-native" -- cgit v1.2.3 From 1142b6570b3cd6c4c8f2598a48b184054feb672a Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 19 Feb 2008 11:39:12 +0000 Subject: claws-mail_3.3.0.bb : new version claws-plugin-gtkhtml2-viewer_0.17.1.bb : new version claws-plugin-rssyl_0.18.bb : new version --- packages/sylpheed/claws-mail_3.2.0.bb | 43 ---------------------- packages/sylpheed/claws-mail_3.3.0.bb | 43 ++++++++++++++++++++++ .../claws-plugin-gtkhtml2-viewer_0.17.1.bb | 20 ++++++++++ .../sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb | 20 ---------- packages/sylpheed/claws-plugin-rssyl_0.17.bb | 20 ---------- packages/sylpheed/claws-plugin-rssyl_0.18.bb | 20 ++++++++++ 6 files changed, 83 insertions(+), 83 deletions(-) delete mode 100644 packages/sylpheed/claws-mail_3.2.0.bb create mode 100644 packages/sylpheed/claws-mail_3.3.0.bb create mode 100644 packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.1.bb delete mode 100644 packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb delete mode 100644 packages/sylpheed/claws-plugin-rssyl_0.17.bb create mode 100644 packages/sylpheed/claws-plugin-rssyl_0.18.bb diff --git a/packages/sylpheed/claws-mail_3.2.0.bb b/packages/sylpheed/claws-mail_3.2.0.bb deleted file mode 100644 index 29e7a5bc63..0000000000 --- a/packages/sylpheed/claws-mail_3.2.0.bb +++ /dev/null @@ -1,43 +0,0 @@ -SECTION = "x11/network" -DESCRIPTION = "Mail user agent" -DEPENDS = "gtk+ libetpan openssl aspell" -LICENSE = "GPL" -PR = "r0" - -SRC_URI = "\ - ${SOURCEFORGE_MIRROR}/sylpheed-claws/claws-mail-${PV}.tar.bz2 \ - file://desktop.patch;patch=1 \ - " - -FILES_${PN} = "${bindir} ${datadir}/pixmaps ${datadir}/applications" - -EXTRA_OECONF = "--disable-aspell-test \ - --enable--aspell \ - --disable-manual \ - --disable-crash-dialog \ - --disable-jpilot \ - --disable-trayicon-plugin \ - --disable-spamassassin-plugin \ - --disable-bogofilter-plugin \ - --disable-pgpcore-plugin \ - --disable-pgpmime-plugin \ - --disable-pgpinline-plugin \ - --disable-dillo-viewer-plugin \ - --disable-clamav-plugin \ - --disable-gnomeprint \ - --disable-valgrind \ - " - -inherit autotools pkgconfig - -do_install_append() { - install -d ${D}${datadir}/applications - install -m 0644 claws-mail.desktop ${D}${datadir}/applications/ - install -d ${D}${datadir}/pixmaps - install -m 0644 claws-mail.png ${D}${datadir}/pixmaps/ -} - -do_stage () { - autotools_stage_all -} - diff --git a/packages/sylpheed/claws-mail_3.3.0.bb b/packages/sylpheed/claws-mail_3.3.0.bb new file mode 100644 index 0000000000..29e7a5bc63 --- /dev/null +++ b/packages/sylpheed/claws-mail_3.3.0.bb @@ -0,0 +1,43 @@ +SECTION = "x11/network" +DESCRIPTION = "Mail user agent" +DEPENDS = "gtk+ libetpan openssl aspell" +LICENSE = "GPL" +PR = "r0" + +SRC_URI = "\ + ${SOURCEFORGE_MIRROR}/sylpheed-claws/claws-mail-${PV}.tar.bz2 \ + file://desktop.patch;patch=1 \ + " + +FILES_${PN} = "${bindir} ${datadir}/pixmaps ${datadir}/applications" + +EXTRA_OECONF = "--disable-aspell-test \ + --enable--aspell \ + --disable-manual \ + --disable-crash-dialog \ + --disable-jpilot \ + --disable-trayicon-plugin \ + --disable-spamassassin-plugin \ + --disable-bogofilter-plugin \ + --disable-pgpcore-plugin \ + --disable-pgpmime-plugin \ + --disable-pgpinline-plugin \ + --disable-dillo-viewer-plugin \ + --disable-clamav-plugin \ + --disable-gnomeprint \ + --disable-valgrind \ + " + +inherit autotools pkgconfig + +do_install_append() { + install -d ${D}${datadir}/applications + install -m 0644 claws-mail.desktop ${D}${datadir}/applications/ + install -d ${D}${datadir}/pixmaps + install -m 0644 claws-mail.png ${D}${datadir}/pixmaps/ +} + +do_stage () { + autotools_stage_all +} + diff --git a/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.1.bb b/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.1.bb new file mode 100644 index 0000000000..5ca95d9dfb --- /dev/null +++ b/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.1.bb @@ -0,0 +1,20 @@ +SECTION = "x11/network" +DESCRIPTION = "Mail user agent plugins" +DEPENDS = "claws-mail gtkhtml2 curl" +LICENSE = "GPL" +PR = "r0" + +SRC_URI = "http://www.claws-mail.org/downloads/plugins/gtkhtml2_viewer-${PV}.tar.gz" + +inherit autotools pkgconfig + +S = "${WORKDIR}/gtkhtml2_viewer-${PV}" + +do_configure() { + gnu-configize + libtoolize --force + oe_runconf +} + +FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" + diff --git a/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb b/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb deleted file mode 100644 index 5ca95d9dfb..0000000000 --- a/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.17.bb +++ /dev/null @@ -1,20 +0,0 @@ -SECTION = "x11/network" -DESCRIPTION = "Mail user agent plugins" -DEPENDS = "claws-mail gtkhtml2 curl" -LICENSE = "GPL" -PR = "r0" - -SRC_URI = "http://www.claws-mail.org/downloads/plugins/gtkhtml2_viewer-${PV}.tar.gz" - -inherit autotools pkgconfig - -S = "${WORKDIR}/gtkhtml2_viewer-${PV}" - -do_configure() { - gnu-configize - libtoolize --force - oe_runconf -} - -FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" - diff --git a/packages/sylpheed/claws-plugin-rssyl_0.17.bb b/packages/sylpheed/claws-plugin-rssyl_0.17.bb deleted file mode 100644 index 29fc245ac4..0000000000 --- a/packages/sylpheed/claws-plugin-rssyl_0.17.bb +++ /dev/null @@ -1,20 +0,0 @@ -SECTION = "x11/network" -DESCRIPTION = "Mail user agent plugins" -DEPENDS = "claws-mail libxml2 curl glib-2.0 gtk+" -LICENSE = "GPL" -PR = "r0" - -SRC_URI = "http://www.claws-mail.org/downloads/plugins/rssyl-${PV}.tar.gz" - -inherit autotools pkgconfig - -S = "${WORKDIR}/rssyl-${PV}" - -do_configure() { - gnu-configize - libtoolize --force - oe_runconf -} - -FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" - diff --git a/packages/sylpheed/claws-plugin-rssyl_0.18.bb b/packages/sylpheed/claws-plugin-rssyl_0.18.bb new file mode 100644 index 0000000000..29fc245ac4 --- /dev/null +++ b/packages/sylpheed/claws-plugin-rssyl_0.18.bb @@ -0,0 +1,20 @@ +SECTION = "x11/network" +DESCRIPTION = "Mail user agent plugins" +DEPENDS = "claws-mail libxml2 curl glib-2.0 gtk+" +LICENSE = "GPL" +PR = "r0" + +SRC_URI = "http://www.claws-mail.org/downloads/plugins/rssyl-${PV}.tar.gz" + +inherit autotools pkgconfig + +S = "${WORKDIR}/rssyl-${PV}" + +do_configure() { + gnu-configize + libtoolize --force + oe_runconf +} + +FILES_${PN} = "${libdir}/claws-mail/plugins/*.so" + -- cgit v1.2.3 From 23db6097b2e40cae71bb936c9165f403dc43be2a Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 11:54:37 +0000 Subject: package.bbclass: Drop unneeded copyfile function since we can use the version from bitbake now --- classes/package.bbclass | 72 +------------------------------------------------ 1 file changed, 1 insertion(+), 71 deletions(-) diff --git a/classes/package.bbclass b/classes/package.bbclass index ec8c3d97e2..e14349a9e5 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -291,76 +291,6 @@ python package_do_split_locales() { #bb.data.setVar('RDEPENDS_%s' % mainpkg, ' '.join(rdep), d) } -def copyfile(src,dest,newmtime=None,sstat=None): - """ - Copies a file from src to dest, preserving all permissions and - attributes; mtime will be preserved even when moving across - filesystems. Returns true on success and false on failure. - """ - import os, stat, shutil, commands - - #print "copyfile("+src+","+dest+","+str(newmtime)+","+str(sstat)+")" - try: - if not sstat: - sstat=os.lstat(src) - except Exception, e: - print "copyfile: Stating source file failed...", e - return False - - destexists=1 - try: - dstat=os.lstat(dest) - except: - dstat=os.lstat(os.path.dirname(dest)) - destexists=0 - - if destexists: - if stat.S_ISLNK(dstat[stat.ST_MODE]): - try: - os.unlink(dest) - destexists=0 - except Exception, e: - pass - - if stat.S_ISLNK(sstat[stat.ST_MODE]): - try: - target=os.readlink(src) - if destexists and not stat.S_ISDIR(dstat[stat.ST_MODE]): - os.unlink(dest) - os.symlink(target,dest) - #os.lchown(dest,sstat[stat.ST_UID],sstat[stat.ST_GID]) - return os.lstat(dest) - except Exception, e: - print "copyfile: failed to properly create symlink:", dest, "->", target, e - return False - - if stat.S_ISREG(sstat[stat.ST_MODE]): - try: # For safety copy then move it over. - shutil.copyfile(src,dest+"#new") - os.rename(dest+"#new",dest) - except Exception, e: - print 'copyfile: copy', src, '->', dest, 'failed.', e - return False - else: - #we don't yet handle special, so we need to fall back to /bin/mv - a=commands.getstatusoutput("/bin/cp -f "+"'"+src+"' '"+dest+"'") - if a[0]!=0: - print "copyfile: Failed to copy special file:" + src + "' to '" + dest + "'", a - return False # failure - try: - os.lchown(dest,sstat[stat.ST_UID],sstat[stat.ST_GID]) - os.chmod(dest, stat.S_IMODE(sstat[stat.ST_MODE])) # Sticky is reset on chown - except Exception, e: - print "copyfile: Failed to chown/chmod/unlink", dest, e - return False - - if newmtime: - os.utime(dest,(newmtime,newmtime)) - else: - os.utime(dest, (sstat[stat.ST_ATIME], sstat[stat.ST_MTIME])) - newmtime=sstat[stat.ST_MTIME] - return newmtime - python populate_packages () { import glob, stat, errno, re @@ -462,7 +392,7 @@ python populate_packages () { fpath = os.path.join(root,file) dpath = os.path.dirname(fpath) bb.mkdirhier(dpath) - ret = copyfile(file, fpath) + ret = bb.copyfile(file, fpath) if ret is False or ret == 0: raise bb.build.FuncFailed("File population failed") del localdata -- cgit v1.2.3 From d56c0688ea805c88d94afad341cf074060b61c16 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 11:59:30 +0000 Subject: package_ipk.bbclass/package_deb.bbclass: Use bitbake locking functions --- classes/package_deb.bbclass | 22 +++++++++------------- classes/package_ipk.bbclass | 28 +++++++++------------------- 2 files changed, 18 insertions(+), 32 deletions(-) diff --git a/classes/package_deb.bbclass b/classes/package_deb.bbclass index b85ffe254f..c550c2fbff 100644 --- a/classes/package_deb.bbclass +++ b/classes/package_deb.bbclass @@ -69,7 +69,7 @@ python do_package_deb_install () { } python do_package_deb () { - import sys, re, fcntl, copy + import sys, re, copy workdir = bb.data.getVar('WORKDIR', d, 1) if not workdir: @@ -102,20 +102,11 @@ python do_package_deb () { bb.debug(1, "No packages; nothing to do") return - def lockfile(name): - lf = open(name, "a+") - fcntl.flock(lf.fileno(), fcntl.LOCK_EX) - return lf - - def unlockfile(lf): - fcntl.flock(lf.fileno(), fcntl.LOCK_UN) - lf.close - for pkg in packages.split(): localdata = bb.data.createCopy(d) root = "%s/install/%s" % (workdir, pkg) - lf = lockfile(root + ".lock") + lf = bb.utils.lockfile(root + ".lock") bb.data.setVar('ROOT', '', localdata) bb.data.setVar('ROOT_%s' % pkg, root, localdata) @@ -147,7 +138,7 @@ python do_package_deb () { if not g and bb.data.getVar('ALLOW_EMPTY', localdata) != "1": from bb import note note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1))) - unlockfile(lf) + bb.utils.unlockfile(lf) continue controldir = os.path.join(root, 'DEBIAN') @@ -158,6 +149,7 @@ python do_package_deb () { # import codecs # ctrlfile = codecs.open("someFile", "w", "utf-8") except OSError: + bb.utils.unlockfile(lf) raise bb.build.FuncFailed("unable to open control file for writing.") fields = [] @@ -196,6 +188,7 @@ python do_package_deb () { ctrlfile.write(unicode(c % tuple(pullData(fs, localdata)))) except KeyError: (type, value, traceback) = sys.exc_info() + bb.utils.unlockfile(lf) ctrlfile.close() raise bb.build.FuncFailed("Missing field for deb generation: %s" % value) # more fields @@ -231,6 +224,7 @@ python do_package_deb () { try: scriptfile = file(os.path.join(controldir, script), 'w') except OSError: + bb.utils.unlockfile(lf) raise bb.build.FuncFailed("unable to open %s script file for writing." % script) scriptfile.write("#!/bin/sh\n") scriptfile.write(scriptvar) @@ -242,6 +236,7 @@ python do_package_deb () { try: conffiles = file(os.path.join(controldir, 'conffiles'), 'w') except OSError: + bb.utils.unlockfile(lf) raise bb.build.FuncFailed("unable to open conffiles for writing.") for f in conffiles_str.split(): conffiles.write('%s\n' % f) @@ -250,6 +245,7 @@ python do_package_deb () { os.chdir(basedir) ret = os.system("PATH=\"%s\" fakeroot dpkg-deb -b %s %s" % (bb.data.getVar("PATH", localdata, 1), root, pkgoutdir)) if ret != 0: + bb.utils.unlockfile(lf) raise bb.build.FuncFailed("dpkg-deb execution failed") for script in ["preinst", "postinst", "prerm", "postrm", "control" ]: @@ -263,7 +259,7 @@ python do_package_deb () { except OSError: pass - unlockfile(lf) + bb.utils.unlockfile(lf) } python () { diff --git a/classes/package_ipk.bbclass b/classes/package_ipk.bbclass index 087bbcbfb4..57fcaa763f 100644 --- a/classes/package_ipk.bbclass +++ b/classes/package_ipk.bbclass @@ -114,7 +114,7 @@ package_generate_ipkg_conf () { } python do_package_ipk () { - import sys, re, copy, fcntl + import sys, re, copy workdir = bb.data.getVar('WORKDIR', d, 1) if not workdir: @@ -147,22 +147,12 @@ python do_package_ipk () { bb.debug(1, "No packages; nothing to do") return - def lockfile(name): - lf = open(name, "a+") - fcntl.flock(lf.fileno(), fcntl.LOCK_EX) - return lf - - def unlockfile(lf): - fcntl.flock(lf.fileno(), fcntl.LOCK_UN) - lf.close - - for pkg in packages.split(): localdata = bb.data.createCopy(d) pkgdest = bb.data.getVar('PKGDEST', d, 1) root = "%s/%s" % (pkgdest, pkg) - lf = lockfile(root + ".lock") + lf = bb.utils.lockfile(root + ".lock") bb.data.setVar('ROOT', '', localdata) bb.data.setVar('ROOT_%s' % pkg, root, localdata) @@ -193,7 +183,7 @@ python do_package_ipk () { if not g and bb.data.getVar('ALLOW_EMPTY', localdata) != "1": from bb import note note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1))) - unlockfile(lf) + bb.utils.unlockfile(lf) continue controldir = os.path.join(root, 'CONTROL') @@ -201,7 +191,7 @@ python do_package_ipk () { try: ctrlfile = file(os.path.join(controldir, 'control'), 'w') except OSError: - unlockfile(lf) + bb.utils.unlockfile(lf) raise bb.build.FuncFailed("unable to open control file for writing.") fields = [] @@ -235,7 +225,7 @@ python do_package_ipk () { except KeyError: (type, value, traceback) = sys.exc_info() ctrlfile.close() - unlockfile(lf) + bb.utils.unlockfile(lf) raise bb.build.FuncFailed("Missing field for ipk generation: %s" % value) # more fields @@ -272,7 +262,7 @@ python do_package_ipk () { try: scriptfile = file(os.path.join(controldir, script), 'w') except OSError: - unlockfile(lf) + bb.utils.unlockfile(lf) raise bb.build.FuncFailed("unable to open %s script file for writing." % script) scriptfile.write(scriptvar) scriptfile.close() @@ -283,7 +273,7 @@ python do_package_ipk () { try: conffiles = file(os.path.join(controldir, 'conffiles'), 'w') except OSError: - unlockfile(lf) + bb.utils.unlockfile(lf) raise bb.build.FuncFailed("unable to open conffiles for writing.") for f in conffiles_str.split(): conffiles.write('%s\n' % f) @@ -293,7 +283,7 @@ python do_package_ipk () { ret = os.system("PATH=\"%s\" %s %s %s" % (bb.data.getVar("PATH", localdata, 1), bb.data.getVar("IPKGBUILDCMD",d,1), pkg, pkgoutdir)) if ret != 0: - unlockfile(lf) + bb.utils.unlockfile(lf) raise bb.build.FuncFailed("ipkg-build execution failed") for script in ["preinst", "postinst", "prerm", "postrm", "control" ]: @@ -306,7 +296,7 @@ python do_package_ipk () { os.rmdir(controldir) except OSError: pass - unlockfile(lf) + bb.utils.unlockfile(lf) } python () { -- cgit v1.2.3 From 695ca19882ed557a40fd39c9d5252af105190eac Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 12:08:38 +0000 Subject: packaged-staging.bbclass: Remove older version and replace with improved version --- classes/packaged-staging.bbclass | 389 +++++++++++++++++++------------------- classes/packaged-staging2.bbclass | 229 ---------------------- 2 files changed, 195 insertions(+), 423 deletions(-) delete mode 100644 classes/packaged-staging2.bbclass diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass index 4b4ebb58bf..29ce72d65c 100644 --- a/classes/packaged-staging.bbclass +++ b/classes/packaged-staging.bbclass @@ -1,228 +1,229 @@ # -# Populated ${STAGING} using packages +# Populate builds using prebuilt packages where possible to speed up builds +# and allow staging to be reconstructed. # # To use it add that line to conf/local.conf: # -# INHERIT += "packaged-staging" -# -# You also need ipkg-cl and ipkg-make-index installed on your host -# put ipkg-build from org.openembedded.packaged-staging/contrib/ in your $PATH - -# BUGS: -# * does not distinguish between -native, -cross and other packages - -# TODO: -# * also build a feed for native and cross packages -# * make package detection a bit smarter (search for compatible archs) -# * make do_clean clean staging as well - -# Summary: -# This class will have two modes of operation: -# PSTAGE_MODE = 'repopulate': repopulated staging from scratch for each packages -# PSTAGE_MODE = 'append': append each package to staging (current behaviour) - -inherit package +# INHERIT = "packaged-staging" + +python () { + import bb + if not bb.data.inherits_class('native', d) and not bb.data.inherits_class('image', d) and not bb.data.inherits_class('cross', d) and not bb.data.inherits_class('sdk', d): + deps = bb.data.getVarFlag('do_populate_staging', 'depends', d) or "" + deps += " stagemanager-native:do_populate_staging" + bb.data.setVarFlag('do_populate_staging', 'depends', deps, d) + + deps = bb.data.getVarFlag('do_prepackaged_stage', 'depends', d) or "" + deps += " ipkg-native:do_populate_staging ipkg-utils-native:do_populate_staging" + bb.data.setVarFlag('do_prepackaged_stage', 'depends', deps, d) + else: + bb.data.setVar("PSTAGING_DISABLED", "1", d) +} -DEPENDS = "stagemanager-native" +export PSTAGING_DISABLED = "0" DEPLOY_DIR_PSTAGE = "${DEPLOY_DIR}/pstage" PSTAGE_BUILD_CMD = "${IPKGBUILDCMD}" -PSTAGE_INSTALL_CMD = "ipkg-cl install -force-depends -f ${DEPLOY_DIR_PSTAGE}/ipkg.conf -o " -PSTAGE_UPDATE_CMD = "ipkg-cl update -f ${DEPLOY_DIR_PSTAGE}/ipkg.conf -o " -PSTAGE_LIST_CMD = "ipkg-cl list_installed -f ${DEPLOY_DIR_PSTAGE}/ipkg.conf -o " -PSTAGE_PKGNAME = "staging-${PN}_${PV}-${PR}_${PACKAGE_ARCH}.ipk" -PCROSS_PKGNAME = "cross-${PN}_${PV}-${PR}_${BUILD_ARCH}.ipk" - -SPAWNFILE = "${STAGING_DIR}/pkgmaps/${P}-${PR}.spawn" -SPAWNIPK = "${spawn}" - -PSTAGE_TMPDIR_STAGE = "${TMPDIR}/tmp-staging" -PSTAGE_TMPDIR_CROSS = "${TMPDIR}/tmp-cross" - -STAGING_BASEDIR = "${STAGING_LIBDIR}/.." - -PACKAGEFUNCS += "do_write_ipk_list" - -python do_write_ipk_list () { - import os, sys - ipkdir = bb.data.getVar('DEPLOY_DIR_IPK', d, 1) - stagingdir = bb.data.getVar('STAGING_DIR', d, 1) - tmpdir = bb.data.getVar('TMPDIR', d, 1) - p = bb.data.getVar('P', d, 1) - pr = bb.data.getVar('PR', d, 1) - - packages = bb.data.getVar('PACKAGES', d, 1) - if not packages: - bb.debug(1, "PACKAGES not defined, nothing to package") - return - - if packages == []: - bb.debug(1, "No packages; nothing to do") - return - - # Generate ipk.conf if it or the stamp doesnt exist - listfile = os.path.join(stagingdir,"pkgmaps","%s-%s.spawn" % ( p , pr )) - os.system('mkdir -p ' + stagingdir + '/pkgmaps') - if not os.access(listfile, os.R_OK): - os.system('rm -f ' + listfile) - f = open(listfile,"w") - for spawn in packages.split(): - #check if the packagename has changed due to debian shlib renaming - localdata = bb.data.createCopy(d) - pkgname = bb.data.getVar('PKG_%s' % spawn, localdata, 1) - if not pkgname: - pkgname = spawn - f.write("%s\n" % pkgname) - f.close() -} +PSTAGE_INSTALL_CMD = "ipkg-cl install -force-depends -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}" +PSTAGE_UPDATE_CMD = "ipkg-cl update -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}" +PSTAGE_REMOVE_CMD = "ipkg-cl remove -force-depends -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}" +PSTAGE_LIST_CMD = "ipkg-cl list_installed -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}" +PSTAGE_PKGNAME = "staging-${PN}_${PV}-${PR}_${MULTIMACH_ARCH}.ipk" +PSTAGE_TMPDIR_STAGE = "${WORKDIR}/staging-pkg" do_clean_append() { - """clear the build and temp directories""" + """ + Clear the build and temp directories + """ + bb.note("Uninstalling package from staging...") + path = bb.data.getVar("PATH", d, 1) + removecmd = bb.data.getVar("PSTAGE_REMOVE_CMD", d, 1) + removepkg = bb.data.expand("staging-${PN}", d) + ret = os.system("PATH=\"%s\" %s %s" % (path, removecmd, removepkg)) + if ret != 0: + bb.note("Failure removing staging package") + stagepkg = bb.data.expand("${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME}", d) - if stagepkg == '//': raise bb.build.FuncFailed("wrong DATADIR") - bb.note("removing " + stagepkg) - os.system('rm -rf ' + stagepkg) + bb.note("Removing staging package %s" % stagepkg) + #os.system('rm -rf ' + stagepkg) } - -do_stage_prepend() { - - stage-manager -p ${STAGING_DIR} -c ${DEPLOY_DIR_PSTAGE}/staging-stamp-cache -u - - stage-manager -p ${CROSS_DIR} -c ${DEPLOY_DIR_PSTAGE}/cross-stamp-cache -u - - if [ ! -e ${STAGING_BASEDIR} ]; then - mkdir -p ${STAGING_BASEDIR} - fi - - if [ ! -e ${DEPLOY_DIR_PSTAGE} ]; then - mkdir -p ${DEPLOY_DIR_PSTAGE} - fi - - if [ -e ${STAGING_BASEDIR}/usr ]; then - oenote "${STAGING_BASEDIR}/usr already present, leaving it alone" - else - oenote "${STAGING_BASEDIR}/usr not present, symlinking it" - ln -s ${STAGING_BASEDIR}/ ${STAGING_BASEDIR}/usr - fi - +staging_helper () { #assemble appropriate ipkg.conf - if [ -e ${DEPLOY_DIR_PSTAGE}/ipkg.conf ]; then - rm ${DEPLOY_DIR_PSTAGE}/ipkg.conf + conffile=${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf + mkdir -p ${DEPLOY_DIR_PSTAGE}/pstaging_lists + if [ ! -e $conffile ]; then + ipkgarchs="${BUILD_ARCH} all any noarch ${TARGET_ARCH} ${PACKAGE_ARCHS} ${PACKAGE_EXTRA_ARCHS} ${MACHINE}" + priority=1 + for arch in $ipkgarchs; do + echo "arch $arch $priority" >> $conffile + priority=$(expr $priority + 5) + done + echo "src oe-staging file:${DEPLOY_DIR_PSTAGE}" >> $conffile + + OLD_PWD=`pwd` + cd ${DEPLOY_DIR_PSTAGE} + ipkg-make-index -p Packages . + cd ${OLD_PWD} + + ${PSTAGE_UPDATE_CMD} fi +} - ipkgarchs="${BUILD_ARCH} all any noarch ${TARGET_ARCH} ${PACKAGE_ARCHS} ${PACKAGE_EXTRA_ARCHS} ${MACHINE}" - priority=1 - for arch in $ipkgarchs; do - echo "arch $arch $priority" >> ${DEPLOY_DIR_PSTAGE}/ipkg.conf - priority=$(expr $priority + 5) - done - echo "src oe file:${DEPLOY_DIR_IPK}" >> ${DEPLOY_DIR_PSTAGE}/ipkg.conf - export OLD_PWD=`pwd` - cd ${DEPLOY_DIR_IPK} && rm *${BUILD_ARCH}.ipk -f ; ipkg-make-index -p Packages . ; cd ${OLD_PWD} - ${PSTAGE_UPDATE_CMD} ${STAGING_BASEDIR} - - #check for generated packages - if [ -e ${SPAWNFILE} ]; then - oenote "List of spawned packages found: ${P}.spawn" - for spawn in `cat ${SPAWNFILE} | grep -v locale | grep -v dbg | grep -v gconv | grep -v charmap` ; do \ - if [ -e ${DEPLOY_DIR_IPK}/${spawn}_* ]; then - ${PSTAGE_INSTALL_CMD} ${STAGING_BASEDIR} ${spawn} - # clean up .la files to avoid having references to the builddirs in the binaries - for lafile in ${STAGING_LIBDIR}/*.la ; do \ - sed -i s:installed=yes:installed=no:g ${lafile} || true - done - - #fix up linker script to poin to staging - if [ -e ${STAGING_LIBDIR}/libc.so ]; then - sed -i s:\ /lib:\ ${STAGING_LIBDIR}:g ${STAGING_LIBDIR}/libc.so - sed -i s:\ /usr/lib:\ ${STAGING_LIBDIR}:g ${STAGING_LIBDIR}/libc.so - fi - else - oenote "${spawn} not found, probably empty package" - fi - done - exit 0 - else - oenote "Spawn file not found!" - fi +python do_prepackaged_stage () { + import os + + if bb.data.getVar("PSTAGING_DISABLED", d, 1) == "1": + bb.build.make_stamp("do_prepackaged_stage", d) + return + + bb.note("Uninstalling any existing package from staging...") + path = bb.data.getVar("PATH", d, 1) + removecmd = bb.data.getVar("PSTAGE_REMOVE_CMD", d, 1) + removepkg = bb.data.expand("staging-${PN}", d) + lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) + ret = os.system("PATH=\"%s\" %s %s" % (path, removecmd, removepkg)) + bb.utils.unlockfile(lf) + if ret != 0: + bb.note("Failure attempting to remove staging package") + + stagepkg = bb.data.expand("${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME}", d) + + if os.path.exists(stagepkg): + bb.note("Following speedup\n") + path = bb.data.getVar("PATH", d, 1) + installcmd = bb.data.getVar("PSTAGE_INSTALL_CMD", d, 1) + + bb.build.exec_func("staging_helper", d) + + bb.debug(1, "Staging stuff already packaged, using that instead") + lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) + ret = os.system("PATH=\"%s\" %s %s" % (path, installcmd, stagepkg)) + bb.utils.unlockfile(lf) + if ret != 0: + bb.note("Failure installing prestage package") + + bb.build.make_stamp("do_prepackaged_stage", d) + bb.build.make_stamp("do_fetch", d) + bb.build.make_stamp("do_unpack", d) + bb.build.make_stamp("do_munge", d) + bb.build.make_stamp("do_patch", d) + bb.build.make_stamp("do_configure", d) + bb.build.make_stamp("do_qa_configure", d) + bb.build.make_stamp("do_rig_locales", d) + bb.build.make_stamp("do_compile", d) + bb.build.make_stamp("do_install", d) + bb.build.make_stamp("do_deploy", d) + bb.build.make_stamp("do_package", d) + bb.build.make_stamp("do_populate_staging", d) + bb.build.make_stamp("do_package_write_deb", d) + bb.build.make_stamp("do_package_write_ipk", d) + bb.build.make_stamp("do_package_write", d) + bb.build.make_stamp("do_package_stage", d) + bb.build.make_stamp("do_qa_staging", d) + + else: + bb.build.make_stamp("do_prepackaged_stage", d) +} +do_prepackaged_stage[cleandirs] = "${PSTAGE_TMPDIR_STAGE}" +do_prepackaged_stage[selfstamp] = "1" +addtask prepackaged_stage before do_fetch - if [ -e ${DEPLOY_DIR_PSTAGE}/${PCROSS_PKGNAME} ]; then - oenote "Cross stuff already packaged, using that instead" - ${PSTAGE_INSTALL_CMD} ${CROSS_DIR} ${DEPLOY_DIR_PSTAGE}/${PCROSS_PKGNAME} - fi +populate_staging_preamble () { + if [ "$PSTAGING_DISABLED" != "1" ]; then + #mkdir -p ${DEPLOY_DIR_PSTAGE} - if [ -e ${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME} ]; then - oenote "Staging stuff already packaged, using that instead" - ${PSTAGE_INSTALL_CMD} ${STAGING_DIR} ${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME} - exit 0 + stage-manager -p ${STAGING_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-staging -u + stage-manager -p ${CROSS_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-cross -u fi - - - mkdir -p ${STAGING_BINDIR} - mkdir -p ${STAGING_LIBDIR} - mkdir -p ${STAGING_INCDIR} - mkdir -p ${STAGING_DATADIR}/aclocal } -do_stage_append() { +populate_staging_postamble () { + if [ "$PSTAGING_DISABLED" != "1" ]; then + # list the packages currently installed in staging + ${PSTAGE_LIST_CMD} | awk '{print $1}' > ${DEPLOY_DIR_PSTAGE}/installed-list - mkdir -p ${DEPLOY_DIR_PSTAGE} + set +e + stage-manager -p ${STAGING_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-staging -u -d ${PSTAGE_TMPDIR_STAGE}/staging + stage-manager -p ${CROSS_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-cross -u -d ${PSTAGE_TMPDIR_STAGE}/cross + set -e + fi +} - # list the packages currently installed in staging - ${PSTAGE_LIST_CMD} ${STAGING_DIR} | awk '{print $1}' > ${DEPLOY_DIR_PSTAGE}/installed-staging_list - ${PSTAGE_LIST_CMD} ${CROSS_DIR} | awk '{print $1}' > ${DEPLOY_DIR_PSTAGE}/installed-cross_list +do_populate_staging[lockfiles] = "${STAGING_DIR}/staging.lock" +do_populate_staging[dirs] =+ "${DEPLOY_DIR_PSTAGE}" +python do_populate_staging_prepend() { + bb.build.exec_func("populate_staging_preamble", d) +} - set +e - rm -rf ${PSTAGE_TMPDIR_STAGE} - stage-manager -p ${STAGING_DIR} -c ${DEPLOY_DIR_PSTAGE}/staging-stamp-cache -u -d ${PSTAGE_TMPDIR_STAGE} - rc=$? - set -e +python do_populate_staging_append() { + bb.build.exec_func("populate_staging_postamble", d) +} - if [ $rc == 5 ]; then - #make a package for staging - mkdir -p ${PSTAGE_TMPDIR_STAGE}/CONTROL +staging_packager () { - echo "Package: staging-${PN}" > ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Version: ${PV}-${PR}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Description: ${DESCRIPTION}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Section: ${SECTION}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Priority: Optional" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Maintainer: ${MAINTAINER}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Architecture: ${PACKAGE_ARCH}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Source: ${SRC_URI}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control + mkdir -p ${PSTAGE_TMPDIR_STAGE}/CONTROL - ${PSTAGE_BUILD_CMD} ${PSTAGE_TMPDIR_STAGE} ${DEPLOY_DIR_PSTAGE} + echo "Package: staging-${PN}" > ${PSTAGE_TMPDIR_STAGE}/CONTROL/control + echo "Version: ${PV}-${PR}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control + echo "Description: ${DESCRIPTION}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control + echo "Section: ${SECTION}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control + echo "Priority: Optional" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control + echo "Maintainer: ${MAINTAINER}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control + echo "Architecture: ${MULTIMACH_ARCH}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control + echo "Source: ${SRC_URI}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - ${PSTAGE_INSTALL_CMD} ${STAGING_DIR} ${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME} - fi + ${PSTAGE_BUILD_CMD} ${PSTAGE_TMPDIR_STAGE} ${DEPLOY_DIR_PSTAGE} + ${PSTAGE_INSTALL_CMD} ${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME} +} - set +e - rm -rf ${PSTAGE_TMPDIR_CROSS} - stage-manager -p ${CROSS_DIR} -c ${DEPLOY_DIR_PSTAGE}/cross-stamp-cache -u -d ${PSTAGE_TMPDIR_CROSS} - rc=$? - set -e - - if [ $rc == 5 ]; then - - #make a package for cross - mkdir -p ${PSTAGE_TMPDIR_CROSS}/CONTROL - - echo "Package: cross-${PN}" > ${PSTAGE_TMPDIR_CROSS}/CONTROL/control - echo "Version: ${PV}-${PR}" >> ${PSTAGE_TMPDIR_CROSS}/CONTROL/control - echo "Description: ${DESCRIPTION}" >> ${PSTAGE_TMPDIR_CROSS}/CONTROL/control - echo "Section: ${SECTION}" >> ${PSTAGE_TMPDIR_CROSS}/CONTROL/control - echo "Priority: Optional" >> ${PSTAGE_TMPDIR_CROSS}/CONTROL/control - echo "Maintainer: ${MAINTAINER}" >> ${PSTAGE_TMPDIR_CROSS}/CONTROL/control - echo "Architecture: ${BUILD_ARCH}" >> ${PSTAGE_TMPDIR_CROSS}/CONTROL/control - echo "Source: ${SRC_URI}" >> ${PSTAGE_TMPDIR_CROSS}/CONTROL/control - - ${PSTAGE_BUILD_CMD} ${PSTAGE_TMPDIR_CROSS} ${DEPLOY_DIR_PSTAGE} - - ${PSTAGE_INSTALL_CMD} ${CROSS_DIR} ${DEPLOY_DIR_PSTAGE}/${PCROSS_PKGNAME} - fi +python do_package_stage () { + if bb.data.getVar("PSTAGING_DISABLED", d, 1) == "1": + return + + bb.build.exec_func("read_subpackage_metadata", d) + packages = (bb.data.getVar('PACKAGES', d, 1) or "").split() + if len(packages) > 0: + stagepath = bb.data.getVar("PSTAGE_TMPDIR_STAGE", d, 1) + if bb.data.inherits_class('package_ipk', d): + ipkpath = os.path.join(stagepath, "deploy", "ipk") + bb.mkdirhier(ipkpath) + if bb.data.inherits_class('package_deb', d): + debpath = os.path.join(stagepath, "deploy", "deb") + bb.mkdirhier(debpath) + + for pkg in packages: + pkgname = bb.data.getVar('PKG_%s' % pkg, d, 1) + if not pkgname: + pkgname = pkg + arch = bb.data.getVar('PACKAGE_ARCH_%s' % pkg, d, 1) + if not arch: + arch = bb.data.getVar('PACKAGE_ARCH', d, 1) + if not packaged(pkg, d): + continue + if bb.data.inherits_class('package_ipk', d): + srcname = bb.data.expand(pkgname + "_${PV}-${PR}_" + arch + ".ipk", d) + srcfile = bb.data.expand("${DEPLOY_DIR_IPK}/" + arch + "/" + srcname, d) + if not os.path.exists(srcfile): + bb.fatal("Package %s does not exist yet it should" % srcfile) + bb.copyfile(srcfile, ipkpath + "/" + srcname) + if bb.data.inherits_class('package_deb', d): + if arch == 'all': + srcname = bb.data.expand(pkgname + "_${PV}-${PR}_all.deb", d) + else: + srcname = bb.data.expand(pkgname + "_${PV}-${PR}_${DPKG_ARCH}.deb", d) + srcfile = bb.data.expand("${DEPLOY_DIR_DEB}/" + arch + "/" + srcname, d) + if not os.path.exists(srcfile): + bb.fatal("Package %s does not exist yet it should" % srcfile) + bb.copyfile(srcfile, debpath + "/" + srcname) + bb.build.exec_func("staging_helper", d) + lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) + bb.build.exec_func("staging_packager", d) + bb.utils.unlockfile(lf) } +addtask package_stage after do_package_write_ipk do_package_write_deb do_package_write do_populate_staging before do_build + diff --git a/classes/packaged-staging2.bbclass b/classes/packaged-staging2.bbclass deleted file mode 100644 index 29ce72d65c..0000000000 --- a/classes/packaged-staging2.bbclass +++ /dev/null @@ -1,229 +0,0 @@ -# -# Populate builds using prebuilt packages where possible to speed up builds -# and allow staging to be reconstructed. -# -# To use it add that line to conf/local.conf: -# -# INHERIT = "packaged-staging" - -python () { - import bb - if not bb.data.inherits_class('native', d) and not bb.data.inherits_class('image', d) and not bb.data.inherits_class('cross', d) and not bb.data.inherits_class('sdk', d): - deps = bb.data.getVarFlag('do_populate_staging', 'depends', d) or "" - deps += " stagemanager-native:do_populate_staging" - bb.data.setVarFlag('do_populate_staging', 'depends', deps, d) - - deps = bb.data.getVarFlag('do_prepackaged_stage', 'depends', d) or "" - deps += " ipkg-native:do_populate_staging ipkg-utils-native:do_populate_staging" - bb.data.setVarFlag('do_prepackaged_stage', 'depends', deps, d) - else: - bb.data.setVar("PSTAGING_DISABLED", "1", d) -} - -export PSTAGING_DISABLED = "0" - -DEPLOY_DIR_PSTAGE = "${DEPLOY_DIR}/pstage" - -PSTAGE_BUILD_CMD = "${IPKGBUILDCMD}" -PSTAGE_INSTALL_CMD = "ipkg-cl install -force-depends -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}" -PSTAGE_UPDATE_CMD = "ipkg-cl update -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}" -PSTAGE_REMOVE_CMD = "ipkg-cl remove -force-depends -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}" -PSTAGE_LIST_CMD = "ipkg-cl list_installed -f ${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf -o ${TMPDIR}" -PSTAGE_PKGNAME = "staging-${PN}_${PV}-${PR}_${MULTIMACH_ARCH}.ipk" - -PSTAGE_TMPDIR_STAGE = "${WORKDIR}/staging-pkg" - -do_clean_append() { - """ - Clear the build and temp directories - """ - bb.note("Uninstalling package from staging...") - path = bb.data.getVar("PATH", d, 1) - removecmd = bb.data.getVar("PSTAGE_REMOVE_CMD", d, 1) - removepkg = bb.data.expand("staging-${PN}", d) - ret = os.system("PATH=\"%s\" %s %s" % (path, removecmd, removepkg)) - if ret != 0: - bb.note("Failure removing staging package") - - stagepkg = bb.data.expand("${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME}", d) - bb.note("Removing staging package %s" % stagepkg) - #os.system('rm -rf ' + stagepkg) -} - -staging_helper () { - #assemble appropriate ipkg.conf - conffile=${DEPLOY_DIR_PSTAGE}/ipkg-${MACHINE}.conf - mkdir -p ${DEPLOY_DIR_PSTAGE}/pstaging_lists - if [ ! -e $conffile ]; then - ipkgarchs="${BUILD_ARCH} all any noarch ${TARGET_ARCH} ${PACKAGE_ARCHS} ${PACKAGE_EXTRA_ARCHS} ${MACHINE}" - priority=1 - for arch in $ipkgarchs; do - echo "arch $arch $priority" >> $conffile - priority=$(expr $priority + 5) - done - echo "src oe-staging file:${DEPLOY_DIR_PSTAGE}" >> $conffile - - OLD_PWD=`pwd` - cd ${DEPLOY_DIR_PSTAGE} - ipkg-make-index -p Packages . - cd ${OLD_PWD} - - ${PSTAGE_UPDATE_CMD} - fi -} - -python do_prepackaged_stage () { - import os - - if bb.data.getVar("PSTAGING_DISABLED", d, 1) == "1": - bb.build.make_stamp("do_prepackaged_stage", d) - return - - bb.note("Uninstalling any existing package from staging...") - path = bb.data.getVar("PATH", d, 1) - removecmd = bb.data.getVar("PSTAGE_REMOVE_CMD", d, 1) - removepkg = bb.data.expand("staging-${PN}", d) - lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) - ret = os.system("PATH=\"%s\" %s %s" % (path, removecmd, removepkg)) - bb.utils.unlockfile(lf) - if ret != 0: - bb.note("Failure attempting to remove staging package") - - stagepkg = bb.data.expand("${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME}", d) - - if os.path.exists(stagepkg): - bb.note("Following speedup\n") - path = bb.data.getVar("PATH", d, 1) - installcmd = bb.data.getVar("PSTAGE_INSTALL_CMD", d, 1) - - bb.build.exec_func("staging_helper", d) - - bb.debug(1, "Staging stuff already packaged, using that instead") - lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) - ret = os.system("PATH=\"%s\" %s %s" % (path, installcmd, stagepkg)) - bb.utils.unlockfile(lf) - if ret != 0: - bb.note("Failure installing prestage package") - - bb.build.make_stamp("do_prepackaged_stage", d) - bb.build.make_stamp("do_fetch", d) - bb.build.make_stamp("do_unpack", d) - bb.build.make_stamp("do_munge", d) - bb.build.make_stamp("do_patch", d) - bb.build.make_stamp("do_configure", d) - bb.build.make_stamp("do_qa_configure", d) - bb.build.make_stamp("do_rig_locales", d) - bb.build.make_stamp("do_compile", d) - bb.build.make_stamp("do_install", d) - bb.build.make_stamp("do_deploy", d) - bb.build.make_stamp("do_package", d) - bb.build.make_stamp("do_populate_staging", d) - bb.build.make_stamp("do_package_write_deb", d) - bb.build.make_stamp("do_package_write_ipk", d) - bb.build.make_stamp("do_package_write", d) - bb.build.make_stamp("do_package_stage", d) - bb.build.make_stamp("do_qa_staging", d) - - else: - bb.build.make_stamp("do_prepackaged_stage", d) -} -do_prepackaged_stage[cleandirs] = "${PSTAGE_TMPDIR_STAGE}" -do_prepackaged_stage[selfstamp] = "1" -addtask prepackaged_stage before do_fetch - -populate_staging_preamble () { - if [ "$PSTAGING_DISABLED" != "1" ]; then - #mkdir -p ${DEPLOY_DIR_PSTAGE} - - stage-manager -p ${STAGING_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-staging -u - stage-manager -p ${CROSS_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-cross -u - fi -} - -populate_staging_postamble () { - if [ "$PSTAGING_DISABLED" != "1" ]; then - # list the packages currently installed in staging - ${PSTAGE_LIST_CMD} | awk '{print $1}' > ${DEPLOY_DIR_PSTAGE}/installed-list - - set +e - stage-manager -p ${STAGING_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-staging -u -d ${PSTAGE_TMPDIR_STAGE}/staging - stage-manager -p ${CROSS_DIR} -c ${DEPLOY_DIR_PSTAGE}/stamp-cache-cross -u -d ${PSTAGE_TMPDIR_STAGE}/cross - set -e - fi -} - -do_populate_staging[lockfiles] = "${STAGING_DIR}/staging.lock" -do_populate_staging[dirs] =+ "${DEPLOY_DIR_PSTAGE}" -python do_populate_staging_prepend() { - bb.build.exec_func("populate_staging_preamble", d) -} - -python do_populate_staging_append() { - bb.build.exec_func("populate_staging_postamble", d) -} - - -staging_packager () { - - mkdir -p ${PSTAGE_TMPDIR_STAGE}/CONTROL - - echo "Package: staging-${PN}" > ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Version: ${PV}-${PR}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Description: ${DESCRIPTION}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Section: ${SECTION}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Priority: Optional" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Maintainer: ${MAINTAINER}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Architecture: ${MULTIMACH_ARCH}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - echo "Source: ${SRC_URI}" >> ${PSTAGE_TMPDIR_STAGE}/CONTROL/control - - ${PSTAGE_BUILD_CMD} ${PSTAGE_TMPDIR_STAGE} ${DEPLOY_DIR_PSTAGE} - ${PSTAGE_INSTALL_CMD} ${DEPLOY_DIR_PSTAGE}/${PSTAGE_PKGNAME} -} - -python do_package_stage () { - if bb.data.getVar("PSTAGING_DISABLED", d, 1) == "1": - return - - bb.build.exec_func("read_subpackage_metadata", d) - packages = (bb.data.getVar('PACKAGES', d, 1) or "").split() - if len(packages) > 0: - stagepath = bb.data.getVar("PSTAGE_TMPDIR_STAGE", d, 1) - if bb.data.inherits_class('package_ipk', d): - ipkpath = os.path.join(stagepath, "deploy", "ipk") - bb.mkdirhier(ipkpath) - if bb.data.inherits_class('package_deb', d): - debpath = os.path.join(stagepath, "deploy", "deb") - bb.mkdirhier(debpath) - - for pkg in packages: - pkgname = bb.data.getVar('PKG_%s' % pkg, d, 1) - if not pkgname: - pkgname = pkg - arch = bb.data.getVar('PACKAGE_ARCH_%s' % pkg, d, 1) - if not arch: - arch = bb.data.getVar('PACKAGE_ARCH', d, 1) - if not packaged(pkg, d): - continue - if bb.data.inherits_class('package_ipk', d): - srcname = bb.data.expand(pkgname + "_${PV}-${PR}_" + arch + ".ipk", d) - srcfile = bb.data.expand("${DEPLOY_DIR_IPK}/" + arch + "/" + srcname, d) - if not os.path.exists(srcfile): - bb.fatal("Package %s does not exist yet it should" % srcfile) - bb.copyfile(srcfile, ipkpath + "/" + srcname) - if bb.data.inherits_class('package_deb', d): - if arch == 'all': - srcname = bb.data.expand(pkgname + "_${PV}-${PR}_all.deb", d) - else: - srcname = bb.data.expand(pkgname + "_${PV}-${PR}_${DPKG_ARCH}.deb", d) - srcfile = bb.data.expand("${DEPLOY_DIR_DEB}/" + arch + "/" + srcname, d) - if not os.path.exists(srcfile): - bb.fatal("Package %s does not exist yet it should" % srcfile) - bb.copyfile(srcfile, debpath + "/" + srcname) - bb.build.exec_func("staging_helper", d) - lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) - bb.build.exec_func("staging_packager", d) - bb.utils.unlockfile(lf) -} - -addtask package_stage after do_package_write_ipk do_package_write_deb do_package_write do_populate_staging before do_build - -- cgit v1.2.3 From fe7f68a8201ffd272cb2abd9bf6b6c2a8cf0e172 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 12:21:57 +0000 Subject: package_deb.bbclass: Tweaks from poky - use PKGDEST, don't clobber any existing do_package_write_deb depends and only set when PACKAGES isn't empty --- classes/package_deb.bbclass | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/classes/package_deb.bbclass b/classes/package_deb.bbclass index c550c2fbff..1a3622c3bb 100644 --- a/classes/package_deb.bbclass +++ b/classes/package_deb.bbclass @@ -54,7 +54,7 @@ python do_package_deb_install () { # env of the fork+execve'd processs # Set up environment - apt_config = os.getenv('APT_CONFIG') + apt_config_backup = os.getenv('APT_CONFIG') os.putenv('APT_CONFIG', os.path.join(stagingdir, 'etc', 'apt', 'apt.conf')) path = os.getenv('PATH') os.putenv('PATH', '%s:%s' % (stagingbindir, os.getenv('PATH'))) @@ -64,7 +64,7 @@ python do_package_deb_install () { commands.getstatusoutput('apt-get install -y %s' % pkgfn) # revert environment - os.putenv('APT_CONFIG', apt_config) + os.putenv('APT_CONFIG', apt_config_backup) os.putenv('PATH', path) } @@ -104,7 +104,8 @@ python do_package_deb () { for pkg in packages.split(): localdata = bb.data.createCopy(d) - root = "%s/install/%s" % (workdir, pkg) + pkgdest = bb.data.getVar('PKGDEST', d, 1) + root = "%s/%s" % (pkgdest, pkg) lf = bb.utils.lockfile(root + ".lock") @@ -265,7 +266,10 @@ python do_package_deb () { python () { import bb if bb.data.getVar('PACKAGES', d, True) != '': - bb.data.setVarFlag('do_package_write_deb', 'depends', 'dpkg-native:do_populate_staging fakeroot-native:do_populate_staging', d) + deps = (bb.data.getVarFlag('do_package_write_deb', 'depends', d) or "").split() + deps.append('dpkg-native:do_populate_staging') + deps.append('fakeroot-native:do_populate_staging') + bb.data.setVarFlag('do_package_write_deb', 'depends', " ".join(deps), d) } python do_package_write_deb () { -- cgit v1.2.3 From a6b99dfd68512d6ce292534d0524b8abae5da4cf Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 12:23:07 +0000 Subject: package_ipkg.bbclass: Remove uneeded line, the anonymous python function sets this only in the case its needed (PACKAGES isnt empty) --- classes/package_ipk.bbclass | 1 - 1 file changed, 1 deletion(-) diff --git a/classes/package_ipk.bbclass b/classes/package_ipk.bbclass index 57fcaa763f..de7f0fe0c4 100644 --- a/classes/package_ipk.bbclass +++ b/classes/package_ipk.bbclass @@ -313,5 +313,4 @@ python do_package_write_ipk () { bb.build.exec_func("do_package_ipk", d) } do_package_write_ipk[dirs] = "${D}" -do_package_write_ipk[depends] = "ipkg-utils-native:do_populate_staging" addtask package_write_ipk before do_package_write after do_package -- cgit v1.2.3 From a6862865f72d4becafae03b9a973b5c12f6373f2 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 12:26:02 +0000 Subject: package_rpm/tar.bbclass: Don't clobber task depends, append to it. Also make tar packaging slightly less verbose (from poky) --- classes/package_rpm.bbclass | 5 ++++- classes/package_tar.bbclass | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/classes/package_rpm.bbclass b/classes/package_rpm.bbclass index 7fc5e8ea96..6713f8fcad 100644 --- a/classes/package_rpm.bbclass +++ b/classes/package_rpm.bbclass @@ -134,7 +134,10 @@ python do_package_rpm () { python () { import bb if bb.data.getVar('PACKAGES', d, True) != '': - bb.data.setVarFlag('do_package_write_rpm', 'depends', 'rpm-native:do_populate_staging', d) + deps = (bb.data.getVarFlag('do_package_write_rpm', 'depends', d) or "").split() + deps.append('rpm-native:do_populate_staging') + deps.append('fakeroot-native:do_populate_staging') + bb.data.setVarFlag('do_package_write_rpm', 'depends', " ".join(deps), d) } diff --git a/classes/package_tar.bbclass b/classes/package_tar.bbclass index cb4c42b261..876cec6cfe 100644 --- a/classes/package_tar.bbclass +++ b/classes/package_tar.bbclass @@ -83,15 +83,12 @@ python do_package_tar () { bb.mkdirhier(pkgoutdir) bb.build.exec_func('package_tar_fn', localdata) tarfn = bb.data.getVar('PKGFN', localdata, 1) -# if os.path.exists(tarfn): -# del localdata -# continue os.chdir(root) from glob import glob if not glob('*'): bb.note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1))) continue - ret = os.system("tar -czvf %s %s" % (tarfn, '.')) + ret = os.system("tar -czf %s %s" % (tarfn, '.')) if ret != 0: bb.error("Creation of tar %s failed." % tarfn) } @@ -99,7 +96,10 @@ python do_package_tar () { python () { import bb if bb.data.getVar('PACKAGES', d, True) != '': - bb.data.setVarFlag('do_package_write_tar', 'depends', 'tar-native:do_populate_staging', d) + deps = (bb.data.getVarFlag('do_package_write_tar', 'depends', d) or "").split() + deps.append('tar-native:do_populate_staging') + deps.append('fakeroot-native:do_populate_staging') + bb.data.setVarFlag('do_package_write_tar', 'depends', " ".join(deps), d) } -- cgit v1.2.3 From 06943f4e268cd80b0ac1601e7da7d3cb0a173917 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 12:30:54 +0000 Subject: package.bbclass: Add SHLIBSDIR variable and replace hardcoded paths with it. Also replace long since unused old_shlibs_dir (from poky) --- classes/package.bbclass | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/classes/package.bbclass b/classes/package.bbclass index e14349a9e5..0b3a28926b 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -508,7 +508,8 @@ python emit_pkgdata() { os.chdir(root) g = glob('*') if g or allow_empty == "1": - file(bb.data.expand('${PKGDATA_DIR}/runtime/%s.packaged' % pkg, d), 'w').close() + packagedfile = bb.data.expand('${PKGDATA_DIR}/runtime/%s.packaged' % pkg, d) + file(packagedfile, 'w').close() } emit_pkgdata[dirs] = "${PKGDATA_DIR}/runtime" @@ -518,6 +519,8 @@ if [ x"$D" = "x" ]; then fi } +SHLIBSDIR = "${STAGING_DIR}/${TARGET_SYS}/shlibs" + python package_do_shlibs() { import os, re, os.path @@ -536,25 +539,14 @@ python package_do_shlibs() { bb.error("WORKDIR not defined") return - staging = bb.data.getVar('STAGING_DIR', d, 1) - if not staging: - bb.error("STAGING_DIR not defined") - return - ver = bb.data.getVar('PV', d, 1) if not ver: bb.error("PV not defined") return - target_sys = bb.data.getVar('TARGET_SYS', d, 1) - if not target_sys: - bb.error("TARGET_SYS not defined") - return - pkgdest = bb.data.getVar('PKGDEST', d, 1) - shlibs_dir = os.path.join(staging, target_sys, "shlibs") - old_shlibs_dir = os.path.join(staging, "shlibs") + shlibs_dir = bb.data.getVar('SHLIBSDIR', d, 1) bb.mkdirhier(shlibs_dir) needed = {} @@ -611,7 +603,7 @@ python package_do_shlibs() { shlib_provider = {} list_re = re.compile('^(.*)\.list$') - for dir in [old_shlibs_dir, shlibs_dir]: + for dir in [shlibs_dir]: if not os.path.exists(dir): continue for file in os.listdir(dir): @@ -681,20 +673,9 @@ python package_do_pkgconfig () { bb.error("WORKDIR not defined") return - staging = bb.data.getVar('STAGING_DIR', d, 1) - if not staging: - bb.error("STAGING_DIR not defined") - return - - target_sys = bb.data.getVar('TARGET_SYS', d, 1) - if not target_sys: - bb.error("TARGET_SYS not defined") - return - pkgdest = bb.data.getVar('PKGDEST', d, 1) - shlibs_dir = os.path.join(staging, target_sys, "shlibs") - old_shlibs_dir = os.path.join(staging, "shlibs") + shlibs_dir = bb.data.getVar('SHLIBSDIR', d, 1) bb.mkdirhier(shlibs_dir) pc_re = re.compile('(.*)\.pc$') @@ -744,7 +725,7 @@ python package_do_pkgconfig () { f.write('%s\n' % p) f.close() - for dir in [old_shlibs_dir, shlibs_dir]: + for dir in [shlibs_dir]: if not os.path.exists(dir): continue for file in os.listdir(dir): -- cgit v1.2.3 From 7406b7866936a6e4744ee130d95441442eb2efa8 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 12:33:09 +0000 Subject: package.bbclass: Add various depchains improvements/fixes from poky. This whole functionality ideally needs rewriting but this fixes various important issues with SDK generation --- classes/package.bbclass | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/classes/package.bbclass b/classes/package.bbclass index 0b3a28926b..3137b6a041 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -793,14 +793,39 @@ python package_depchains() { postfixes = (bb.data.getVar('DEPCHAIN_POST', d, 1) or '').split() prefixes = (bb.data.getVar('DEPCHAIN_PRE', d, 1) or '').split() + def pkg_adddeprrecs(pkg, base, suffix, getname, depends, d): + + #bb.note('depends for %s is %s' % (base, depends)) + rreclist = explode_deps(bb.data.getVar('RRECOMMENDS_' + pkg, d, 1) or bb.data.getVar('RRECOMMENDS', d, 1) or "") + + for depend in depends: + if depend.find('-native') != -1 or depend.find('-cross') != -1 or depend.startswith('virtual/'): + #bb.note("Skipping %s" % depend) + continue + if depend.endswith('-dev'): + depend = depend.replace('-dev', '') + if depend.endswith('-dbg'): + depend = depend.replace('-dbg', '') + pkgname = getname(depend, suffix) + #bb.note("Adding %s for %s" % (pkgname, depend)) + if not pkgname in rreclist: + rreclist.append(pkgname) + + #bb.note('setting: RRECOMMENDS_%s=%s' % (pkg, ' '.join(rreclist))) + bb.data.setVar('RRECOMMENDS_%s' % pkg, ' '.join(rreclist), d) + def pkg_addrrecs(pkg, base, suffix, getname, rdepends, d): - #bb.note('rdepends for %s is %s' % (base, rdepends)) + #bb.note('rdepends for %s is %s' % (base, rdepends)) rreclist = explode_deps(bb.data.getVar('RRECOMMENDS_' + pkg, d, 1) or bb.data.getVar('RRECOMMENDS', d, 1) or "") for depend in rdepends: + if depend.endswith('-dev'): + depend = depend.replace('-dev', '') + if depend.endswith('-dbg'): + depend = depend.replace('-dbg', '') pkgname = getname(depend, suffix) - if not pkgname in rreclist and packaged(pkgname, d): + if not pkgname in rreclist: rreclist.append(pkgname) #bb.note('setting: RRECOMMENDS_%s=%s' % (pkg, ' '.join(rreclist))) @@ -811,6 +836,10 @@ python package_depchains() { if dep not in list: list.append(dep) + depends = [] + for dep in explode_deps(bb.data.getVar('DEPENDS', d, 1) or ""): + add_dep(depends, dep) + rdepends = [] for dep in explode_deps(bb.data.getVar('RDEPENDS', d, 1) or ""): add_dep(rdepends, dep) @@ -843,6 +872,8 @@ python package_depchains() { for suffix in pkgs: for pkg in pkgs[suffix]: (base, func) = pkgs[suffix][pkg] + if suffix == "-dev": + pkg_adddeprrecs(pkg, base, suffix, func, depends, d) if len(pkgs[suffix]) == 1: pkg_addrrecs(pkg, base, suffix, func, rdepends, d) else: -- cgit v1.2.3 From fd63d3b404c29499bd8ab3a271fe7687d9ea5cd4 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 12:36:34 +0000 Subject: gcc-package.inc: Override SHLIBSDIR since gcc is a very special case --- packages/gcc/gcc-package.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/gcc/gcc-package.inc b/packages/gcc/gcc-package.inc index d1b4607de5..3d57d01113 100644 --- a/packages/gcc/gcc-package.inc +++ b/packages/gcc/gcc-package.inc @@ -12,6 +12,10 @@ PACKAGES = "libgcc ${PN} ${PN}-symlinks \ libstdc++-dev libg2c-dev \ ${PN}-doc" +# We really need HOST_SYS here for some packages and TARGET_SYS for others. +# For now, libgcc is most important so we fix for that - RP. +SHLIBSDIR = "${STAGING_DIR}/${TARGET_SYS}/shlibs" + FILES_${PN} = "${bindir}/${TARGET_PREFIX}gcc \ ${bindir}/${TARGET_PREFIX}gccbug \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1 \ -- cgit v1.2.3 From a566027593bbace5286e39ed258b6ecf4c3888e4 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 12:37:58 +0000 Subject: package.bbclass: Correct SHLIBSDIR to use HOST_SYS, not TARGET_SYS. For most packages this doesn't change much but for cross/sdk/native packages the distinction is important (from poky) --- classes/package.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/package.bbclass b/classes/package.bbclass index 3137b6a041..e267478561 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -519,7 +519,7 @@ if [ x"$D" = "x" ]; then fi } -SHLIBSDIR = "${STAGING_DIR}/${TARGET_SYS}/shlibs" +SHLIBSDIR = "${STAGING_DIR}/${HOST_SYS}/shlibs" python package_do_shlibs() { import os, re, os.path -- cgit v1.2.3 From 394537d89c0118bf2103ea4edbf5495bf6981a55 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 12:57:33 +0000 Subject: base.bbclass: Drop now unused bbdepcmd flag --- classes/base.bbclass | 5 ----- 1 file changed, 5 deletions(-) diff --git a/classes/base.bbclass b/classes/base.bbclass index c8ee75627f..3250e0ca43 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -412,7 +412,6 @@ python do_listtasks() { addtask clean do_clean[dirs] = "${TOPDIR}" do_clean[nostamp] = "1" -do_clean[bbdepcmd] = "" python base_do_clean() { """clear the build and temp directories""" dir = bb.data.expand("${WORKDIR}", d) @@ -428,7 +427,6 @@ python base_do_clean() { addtask rebuild do_rebuild[dirs] = "${TOPDIR}" do_rebuild[nostamp] = "1" -do_rebuild[bbdepcmd] = "" python base_do_rebuild() { """rebuild a package""" bb.build.exec_task('do_clean', d) @@ -438,7 +436,6 @@ python base_do_rebuild() { addtask mrproper do_mrproper[dirs] = "${TOPDIR}" do_mrproper[nostamp] = "1" -do_mrproper[bbdepcmd] = "" python base_do_mrproper() { """clear downloaded sources, build and temp directories""" dir = bb.data.expand("${DL_DIR}", d) @@ -680,7 +677,6 @@ python base_eventhandler() { addtask configure after do_unpack do_patch do_configure[dirs] = "${S} ${B}" -do_configure[bbdepcmd] = "do_populate_staging" do_configure[deptask] = "do_populate_staging" base_do_configure() { : @@ -688,7 +684,6 @@ base_do_configure() { addtask compile after do_configure do_compile[dirs] = "${S} ${B}" -do_compile[bbdepcmd] = "do_populate_staging" base_do_compile() { if [ -e Makefile -o -e makefile ]; then oe_runmake || die "make failed" -- cgit v1.2.3 From 8d1ca488e9ffa8ed7540c2f3dd5b8592ce619150 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 13:02:56 +0000 Subject: ecore[-native] cvs really disable SDL --- packages/efl1/ecore-native_cvs.bb | 3 ++- packages/efl1/ecore_cvs.bb | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/efl1/ecore-native_cvs.bb b/packages/efl1/ecore-native_cvs.bb index 52855d99a8..b7d16b54ba 100644 --- a/packages/efl1/ecore-native_cvs.bb +++ b/packages/efl1/ecore-native_cvs.bb @@ -1,7 +1,7 @@ require ecore.inc inherit native DEPENDS = "eet-native evas-native" -PR = "r2" +PR = "r3" EXTRA_OECONF = "\ --x-includes=${STAGING_INCDIR}/X11 \ @@ -19,6 +19,7 @@ EXTRA_OECONF = "\ --disable-ecore-evas-x11-gl \ --disable-ecore-evas-xrender \ --disable-ecore-evas-dfb \ + --disable-ecore-evas-sdl \ --disable-openssl \ --enable-abstract-sockets \ --enable-ecore-con \ diff --git a/packages/efl1/ecore_cvs.bb b/packages/efl1/ecore_cvs.bb index b0a2a24f98..3e8cdcf5be 100644 --- a/packages/efl1/ecore_cvs.bb +++ b/packages/efl1/ecore_cvs.bb @@ -1,5 +1,5 @@ require ecore.inc -PR = "r0" +PR = "r1" EXTRA_OECONF = "\ --x-includes=${STAGING_INCDIR}/X11 \ @@ -19,6 +19,7 @@ EXTRA_OECONF = "\ --disable-ecore-evas-x11-gl \ --enable-ecore-evas-xrender \ --disable-ecore-evas-dfb \ + --disable-ecore-evas-sdl \ --disable-openssl \ --enable-abstract-sockets \ --enable-ecore-con \ -- cgit v1.2.3 From e769e8d1651227d771916b70afaf1138b0ac8925 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 19 Feb 2008 14:12:43 +0000 Subject: package-index: Add explicit DEPENDS on "ipkg-utils-native" * Otherwise it relies that something else staged it. Good guess, but let's be explicit. --- packages/meta/package-index.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/meta/package-index.bb b/packages/meta/package-index.bb index 3d7d5f2839..f52fb6c72b 100644 --- a/packages/meta/package-index.bb +++ b/packages/meta/package-index.bb @@ -1,5 +1,6 @@ DESCRIPTION = "Rebuild the package index" LICENSE = "MIT" +DEPENDS = "ipkg-utils-native" INHIBIT_DEFAULT_DEPS = "1" ALLOW_EMPTY = "1" -- cgit v1.2.3 From 6e50c9e36c98b400543d602f674ec5a4899398e6 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 15:14:55 +0000 Subject: e-wm cvs need to call autopoint for gettext support --- packages/e17/e-wm_cvs.bb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/e17/e-wm_cvs.bb b/packages/e17/e-wm_cvs.bb index e7af400a1c..4dbacffe1b 100644 --- a/packages/e17/e-wm_cvs.bb +++ b/packages/e17/e-wm_cvs.bb @@ -21,9 +21,7 @@ EXTRA_OECONF = "\ " do_configure_prepend() { - install -m 0644 ${WORKDIR}/Makefile.in.in po/ - echo "install -d $*" >./mkinstalldirs - chmod a+rx ./mkinstalldirs + autopoint } do_stage() { -- cgit v1.2.3 From d69d798924c7d9e543f7078e611ee8c410f2fad6 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 15:18:31 +0000 Subject: libpng[-native] 1.2.19 remove buggy version --- packages/libpng/libpng-native_1.2.19.bb | 14 --------- packages/libpng/libpng_1.2.19.bb | 50 --------------------------------- 2 files changed, 64 deletions(-) delete mode 100644 packages/libpng/libpng-native_1.2.19.bb delete mode 100644 packages/libpng/libpng_1.2.19.bb diff --git a/packages/libpng/libpng-native_1.2.19.bb b/packages/libpng/libpng-native_1.2.19.bb deleted file mode 100644 index 231b956678..0000000000 --- a/packages/libpng/libpng-native_1.2.19.bb +++ /dev/null @@ -1,14 +0,0 @@ -require libpng_${PV}.bb -inherit native -FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libpng-${PV}" -DEPENDS = "zlib-native" - -INHIBIT_NATIVE_STAGE_INSTALL = "1" - -do_stage_append() { - cp libpng.pc libpng12.pc - install -m 644 png.h ${STAGING_INCDIR}/png.h - install -m 644 pngconf.h ${STAGING_INCDIR}/pngconf.h - oe_libinstall -so libpng12 ${STAGING_LIBDIR}/ - ln -sf libpng12.so ${STAGING_LIBDIR}/libpng.so -} diff --git a/packages/libpng/libpng_1.2.19.bb b/packages/libpng/libpng_1.2.19.bb deleted file mode 100644 index 3730f3d727..0000000000 --- a/packages/libpng/libpng_1.2.19.bb +++ /dev/null @@ -1,50 +0,0 @@ -DESCRIPTION = "PNG Library" -HOMEPAGE = "http://www.libpng.org/" -LICENSE = "libpng" -SECTION = "libs" -DEPENDS = "zlib" -PRIORITY = "required" -PR = "r0" - -SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/libpng-${PV}.tar.bz2" -S = "${WORKDIR}/libpng-${PV}" - -inherit autotools binconfig pkgconfig - -do_stage() { - cp libpng.pc libpng12.pc - install -m 644 png.h ${STAGING_INCDIR}/png.h - install -m 644 pngconf.h ${STAGING_INCDIR}/pngconf.h - oe_libinstall -so libpng ${STAGING_LIBDIR}/ - oe_libinstall -so libpng12 ${STAGING_LIBDIR}/ - ln -sf libpng12.so ${STAGING_LIBDIR}/libpng.so -} - -do_install() { - install -d ${D}${bindir} - install -d ${D}${mandir} - install -d ${D}${libdir} - install -d ${D}${includedir} - unset LDFLAGS - oe_runmake 'prefix=${prefix}' 'DESTDIR=${D}' \ - 'DB=${D}${bindir}' 'DI=${D}${includedir}' \ - 'DL=${D}${libdir}' 'DM=${D}${mandir}' \ - install -} - -python do_package() { - if bb.data.getVar('DEBIAN_NAMES', d, 1): - bb.data.setVar('PKG_${PN}', 'libpng12', d) - bb.build.exec_func('package_do_package', d) -} - -PACKAGES =+ "${PN}12-dbg ${PN}12 ${PN}12-dev" - -FILES_${PN}12-dbg += "${libdir}/libpng12*.dbg" -FILES_${PN}12 = "${libdir}/libpng12.so.*" -FILES_${PN}12-dev = "${libdir}/libpng12.* ${includedir}/libpng12 ${libdir}/pkgconfig/libpng12.pc" -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \ - ${libdir}/*.a ${libdir}/pkgconfig \ - ${datadir}/aclocal ${bindir} ${sbindir}" - -- cgit v1.2.3 From 18bae0d61ca9ad3cb8970bbeedef55ad328bb422 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 16:00:47 +0000 Subject: add fbvncserver2. closes #2126 --- packages/vnc/fbvncserver2_cvs.bb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 packages/vnc/fbvncserver2_cvs.bb diff --git a/packages/vnc/fbvncserver2_cvs.bb b/packages/vnc/fbvncserver2_cvs.bb new file mode 100644 index 0000000000..29ce53274b --- /dev/null +++ b/packages/vnc/fbvncserver2_cvs.bb @@ -0,0 +1,21 @@ +DESCRIPTION = "A Framebuffer VNC Server for PDA" +AUTHOR = "Patrik Gfeller " +HOMEPAGE = "http://fbvncserver.sourceforge.net/" +SECTION = "console/utils" +PRIORITY = "optional" +LICENSE = "GPLv2" +DEPENDS = "libvncserver jpeg zlib gmp tslib" +RRECOMMENDS = "kernel-modules-uinput kernel-module-keybdev" +RCONFLICTS = "fbvncserver, fbvncserver-kmodule" +PV = "0.0.0+cvs${SRCDATE}" +PR = "r0" + +SRC_URI = "cvs://anonymous@fbvncserver.cvs.sourceforge.net/cvsroot/fbvncserver;method=pserver;module=ipkg" +S = "${WORKDIR}/ipkg/src/" + +inherit autotools + +EXTRA_OECONF = "--enable-debug" + +FILES_${PN} += "${datadir}" + -- cgit v1.2.3 From d943db59fb909d40ad1dbeea2a3f74f94c372132 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 16:16:14 +0000 Subject: gammu 1.17.0 remove bogus pc file so it doesn't conflict with the real one --- packages/gammu/gammu_1.17.0.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/gammu/gammu_1.17.0.bb b/packages/gammu/gammu_1.17.0.bb index fc7adb1b79..65ab877495 100644 --- a/packages/gammu/gammu_1.17.0.bb +++ b/packages/gammu/gammu_1.17.0.bb @@ -3,6 +3,7 @@ SECTION = "console/network" DEPENDS = "bluez-libs cmake-native" LICENSE = "GPL" HOMEPAGE = "http://www.gammu.org/" +PR = "r1" SRC_URI = "http://dl.cihar.com/gammu/releases/gammu-${PV}.tar.bz2 " @@ -25,6 +26,7 @@ do_stage() { install -m 0644 build-configure/include/*.h ${STAGING_INCDIR}/gammu/ oe_libinstall -so -C build-configure/common libGammu ${STAGING_LIBDIR} + rm -f ./build-configure/pkgconfig/gammu.pc } PACKAGES =+ "libgammu" -- cgit v1.2.3 From 13b71d3646054a698956460aa4246d9c9167dee4 Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Tue, 19 Feb 2008 16:31:45 +0000 Subject: Output NUL terminated lines with sort -z (busybox#1591). Fixes updatedb. --- packages/busybox/busybox-1.9.1/sort-z-nul.patch | 50 +++++++++++++++++++++++++ packages/busybox/busybox_1.9.1.bb | 3 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 packages/busybox/busybox-1.9.1/sort-z-nul.patch diff --git a/packages/busybox/busybox-1.9.1/sort-z-nul.patch b/packages/busybox/busybox-1.9.1/sort-z-nul.patch new file mode 100644 index 0000000000..55452a4524 --- /dev/null +++ b/packages/busybox/busybox-1.9.1/sort-z-nul.patch @@ -0,0 +1,50 @@ +Summary: 0001591: inconsistent behavior of sort -z + +URL: http://busybox.net/bugs/view.php?id=1591 +http://www.busybox.net/cgi-bin/viewcvs.cgi/trunk/busybox/coreutils/sort.c?rev=21004&r1=20435&r2=21004&makepatch=1&diff_format=u + +Description: + +busybox sort -z does: +use NUL instead of EOL on input + +GNU sort -z does: +use NUL instead of EOL on input and output + +GNU sort -z documents: +use NUL instead of EOL on input + +Additional Information: + +Note that sort -z is not part of any standard. But several applications +(e. g. GNU findutils updatedb) depends on the NUL-on-output behavior. + +GNU sort documentation bug was reported to coreutils maintainers. + +Notes: + +vda 02-13-08 06:30 (0004364) +Fixed in revision 21004. Thanks! + +--- busybox/coreutils/sort.c 2007/11/16 12:39:16 20435 ++++ busybox/coreutils/sort.c 2008/02/13 14:30:33 21004 +@@ -32,7 +32,7 @@ + FLAG_u = 8, /* Unique */ + FLAG_c = 0x10, /* Check: no output, exit(!ordered) */ + FLAG_s = 0x20, /* Stable sort, no ascii fallback at end */ +- FLAG_z = 0x40, /* Input is null terminated, not \n */ ++ FLAG_z = 0x40, /* Input and output is NUL terminated, not \n */ + /* These can be applied to search keys, the previous four can't */ + FLAG_b = 0x80, /* Ignore leading blanks */ + FLAG_r = 0x100, /* Reverse */ +@@ -396,8 +396,9 @@ + if (linecount) linecount = flag+1; + } + /* Print it */ ++ flag = (option_mask32 & FLAG_z) ? '\0' : '\n'; + for (i = 0; i < linecount; i++) +- fprintf(outfile, "%s\n", lines[i]); ++ fprintf(outfile, "%s%c", lines[i], flag); + + fflush_stdout_and_exit(EXIT_SUCCESS); + } diff --git a/packages/busybox/busybox_1.9.1.bb b/packages/busybox/busybox_1.9.1.bb index b41f1779b0..237f6a6dac 100644 --- a/packages/busybox/busybox_1.9.1.bb +++ b/packages/busybox/busybox_1.9.1.bb @@ -1,5 +1,5 @@ require busybox.inc -PR = "r1" +PR = "r2" SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ file://busybox-cron \ @@ -12,6 +12,7 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ file://syslog.conf \ file://udhcpscript.patch;patch=1 \ file://adduser-longops.patch;patch=1 \ + file://sort-z-nul.patch;patch=1;status=upstream \ file://umount.busybox \ file://run_parts.c \ file://defconfig" -- cgit v1.2.3 From 74a532e4bc5f8b037d050a0a1fb66ea35eeac1ec Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Tue, 19 Feb 2008 17:08:48 +0000 Subject: - Ignore false toggle signals (work-around for OE#3390). - Fixed default ALSA state for SL-Cxx00 (OE#2617). - Do not alter incorrect mixer levels by zaurus-mixer-callback. - Allow to disable rotation by touch ~/.norot. - Fixed detection of panel_user. --- packages/zaurusd/files/01-check-toggle-landscape | 9 + packages/zaurusd/files/01-check-toggle-portait | 9 + .../zaurusd/files/alsa-cxx00-default.state.patch | 276 +++++++++++++++------ packages/zaurusd/files/zaurus-hinge.in | 7 +- .../zaurusd/files/zaurusd-mixer-callback.patch | 11 - packages/zaurusd/zaurusd_svn.bb | 10 +- 6 files changed, 237 insertions(+), 85 deletions(-) create mode 100644 packages/zaurusd/files/01-check-toggle-landscape create mode 100644 packages/zaurusd/files/01-check-toggle-portait delete mode 100644 packages/zaurusd/files/zaurusd-mixer-callback.patch diff --git a/packages/zaurusd/files/01-check-toggle-landscape b/packages/zaurusd/files/01-check-toggle-landscape new file mode 100644 index 0000000000..13ae9a4e68 --- /dev/null +++ b/packages/zaurusd/files/01-check-toggle-landscape @@ -0,0 +1,9 @@ +#!/bin/sh + +# Try to determine and ignore false rotation signals caused by +# headphones removal or remote removal remembering the old state. +# OE#3390 +if test "`cat /var/run/last-screen-rotation`" = landscape ; then + exit +fi +echo landscape > /var/run/last-screen-rotation diff --git a/packages/zaurusd/files/01-check-toggle-portait b/packages/zaurusd/files/01-check-toggle-portait new file mode 100644 index 0000000000..4c3b7f1291 --- /dev/null +++ b/packages/zaurusd/files/01-check-toggle-portait @@ -0,0 +1,9 @@ +#!/bin/sh + +# Try to determine and ignore false rotation signals caused by +# headphones removal or remote removal remembering the old state. +# OE#3390 +if test "`cat /var/run/last-screen-rotation`" = portait ; then + exit +fi +echo portait > /var/run/last-screen-rotation diff --git a/packages/zaurusd/files/alsa-cxx00-default.state.patch b/packages/zaurusd/files/alsa-cxx00-default.state.patch index c3e234b534..b10e6c85dd 100644 --- a/packages/zaurusd/files/alsa-cxx00-default.state.patch +++ b/packages/zaurusd/files/alsa-cxx00-default.state.patch @@ -1,64 +1,194 @@ ---- zaurusd/config/alsa/cxx00-default.state.orig 2006-06-28 08:45:07.000000000 +0000 -+++ zaurusd/config/alsa/cxx00-default.state 2007-05-21 21:40:50.000000000 +0000 -@@ -32,7 +32,7 @@ +http://bugs.openembedded.org/show_bug.cgi?id=2617 +- Fixes default ALSA state for SL-Cxx00. + * Treble level reflects kernel fix alsa-wm8750-treble.patch (>2.6.24). + * Increased Mic Levels and Boost. + * Enabled Capture Switch. + * Improved Headphones / Speaker volume balance. + * 3D Mode changed to "Playback" (still Off by default). + * Disabled all bypasses. + * All Mono signals decreased to 0 (not connected). + * Line Mux changed to differential, keeping PGA unused. + * Using Digital mono for recording (jack supports ony mono). + * Enabled Automatic Level Control, optimized for voice recording. + * Enabled Zero Cross volume changes. +- Do not alter incorrect mixer levels by zaurus-mixer-callback. + +Index: zaurusd/config/alsa/cxx00-default.state +=================================================================== +--- zaurusd.orig/config/alsa/cxx00-default.state 2006-06-28 08:45:07.000000000 +0000 ++++ zaurusd/config/alsa/cxx00-default.state 2007-11-27 23:06:43.000000000 +0000 +@@ -6,8 +6,8 @@ + comment.range '0 - 63' + iface MIXER + name 'Capture Volume' +- value.0 23 +- value.1 23 ++ value.0 48 ++ value.1 48 + } + control.2 { + comment.access 'read write' +@@ -15,8 +15,8 @@ + comment.count 2 + iface MIXER + name 'Capture ZC Switch' +- value.0 false +- value.1 false ++ value.0 true ++ value.1 true + } + control.3 { + comment.access 'read write' +@@ -24,26 +24,26 @@ + comment.count 2 + iface MIXER + name 'Capture Switch' +- value.0 false +- value.1 false ++ value.0 true ++ value.1 true + } + control.4 { + comment.access 'read write' comment.type BOOLEAN comment.count 2 iface MIXER - name 'Out1 Playback ZC Switch' +- value.0 false +- value.1 false + name 'Headphone Playback ZC Switch' - value.0 false - value.1 false ++ value.0 true ++ value.1 true } -@@ -41,7 +41,7 @@ + control.5 { + comment.access 'read write' comment.type BOOLEAN comment.count 2 iface MIXER - name 'Out2 Playback ZC Switch' +- value.0 false +- value.1 false + name 'Speaker Playback ZC Switch' - value.0 false - value.1 false ++ value.0 true ++ value.1 true + } + control.6 { + comment.access 'read write' +@@ -92,8 +92,8 @@ + comment.range '0 - 255' + iface MIXER + name 'PCM Volume' +- value.0 255 +- value.1 255 ++ value.0 220 ++ value.1 220 } -@@ -218,7 +218,7 @@ - comment.item.3 Stereo + control.11 { + comment.access 'read write' +@@ -131,7 +131,7 @@ + comment.range '0 - 15' + iface MIXER + name 'Treble Volume' +- value 15 ++ value 0 + } + control.15 { + comment.access 'read write' +@@ -188,7 +188,7 @@ + comment.item.1 Playback iface MIXER - name 'ALC Capture Function' -- value Left -+ value Off + name '3D Mode' +- value Capture ++ value Playback } - control.24 { + control.21 { comment.access 'read write' -@@ -321,8 +321,8 @@ +@@ -226,7 +226,7 @@ + comment.count 1 + iface MIXER + name 'ALC Capture ZC Switch' +- value false ++ value true + } + control.25 { + comment.access 'read write' +@@ -235,7 +235,7 @@ + comment.range '0 - 15' + iface MIXER + name 'ALC Capture Hold Time' +- value 0 ++ value 9 + } + control.26 { + comment.access 'read write' +@@ -244,7 +244,7 @@ + comment.range '0 - 15' + iface MIXER + name 'ALC Capture Decay Time' +- value 3 ++ value 9 + } + control.27 { + comment.access 'read write' +@@ -253,7 +253,7 @@ + comment.range '0 - 15' + iface MIXER + name 'ALC Capture Attack Time' +- value 2 ++ value 3 + } + control.28 { + comment.access 'read write' +@@ -306,7 +306,7 @@ + comment.count 1 + iface MIXER + name 'ZC Timeout Switch' +- value false ++ value true + } + control.34 { + comment.access 'read write' +@@ -321,7 +321,7 @@ comment.type BOOLEAN comment.count 1 iface MIXER - name 'Right Out2 Playback Invert Switch' -- value true + name 'Right Speaker Playback Invert Switch' -+ value false + value true } control.36 { - comment.access 'read write' @@ -331,8 +331,8 @@ comment.range '0 - 3' iface MIXER name 'Mic Boost' - value.0 2 - value.1 2 ++ value.0 3 ++ value.1 3 + } + control.37 { + comment.access 'read write' +@@ -341,8 +341,8 @@ + comment.range '0 - 7' + iface MIXER + name 'Bypass Left Playback Volume' +- value.0 2 +- value.1 2 + value.0 0 + value.1 0 } - control.37 { + control.38 { comment.access 'read write' -@@ -351,8 +351,8 @@ +@@ -361,8 +361,8 @@ comment.range '0 - 7' iface MIXER - name 'Bypass Right Playback Volume' -- value.0 0 -- value.1 0 -+ value.0 2 -+ value.1 2 + name 'Bypass Mono Playback Volume' +- value.0 2 +- value.1 2 ++ value.0 0 ++ value.1 0 } - control.39 { + control.40 { comment.access 'read write' @@ -378,9 +378,9 @@ comment.count 2 @@ -68,8 +198,8 @@ - value.0 120 - value.1 120 + name 'Headphone Playback Volume' -+ value.0 121 -+ value.1 121 ++ value.0 105 ++ value.1 105 } control.42 { comment.access 'read write' @@ -81,17 +211,26 @@ - value.0 119 - value.1 119 + name 'Speaker Playback Volume' -+ value.0 121 -+ value.1 121 ++ value.0 127 ++ value.1 127 } control.43 { comment.access 'read write' +@@ -399,7 +399,7 @@ + comment.range '0 - 127' + iface MIXER + name 'Mono Playback Volume' +- value 121 ++ value 0 + } + control.44 { + comment.access 'read write' @@ -411,7 +411,7 @@ comment.item.3 'Digital Mono' iface MIXER name 'Right ADC Mux' - value 'Mono (Left)' -+ value Stereo ++ value 'Digital Mono' } control.45 { comment.access 'read write' @@ -100,55 +239,19 @@ iface MIXER name 'Left ADC Mux' - value 'Mono (Left)' -+ value Stereo ++ value 'Digital Mono' } control.46 { comment.access 'read write' -@@ -458,7 +458,7 @@ - comment.item.4 Differential - iface MIXER - name 'Right Line Mux' -- value Differential -+ value 'Line 1' - } - control.49 { - comment.access 'read write' @@ -471,7 +471,7 @@ comment.item.4 Differential iface MIXER name 'Left Line Mux' - value PGA -+ value 'Line 1' ++ value Differential } control.50 { comment.access 'read write' -@@ -483,7 +483,7 @@ - comment.item.3 Differential - iface MIXER - name 'Right PGA Mux' -- value Differential -+ value 'Line 1' - } - control.51 { - comment.access 'read write' -@@ -495,7 +495,7 @@ - comment.item.3 Differential - iface MIXER - name 'Left PGA Mux' -- value Differential -+ value 'Line 1' - } - control.52 { - comment.access 'read write' -@@ -535,7 +535,7 @@ - comment.count 1 - iface MIXER - name 'Right Mixer Left Playback Switc' -- value false -+ value true - } - control.57 { - comment.access 'read write' @@ -610,9 +610,8 @@ comment.access 'read write' comment.type ENUMERATED @@ -161,3 +264,38 @@ iface MIXER name 'Speaker Function' value On +Index: zaurusd/scripts/zaurus-mixer-callback.in +=================================================================== +--- zaurusd.orig/scripts/zaurus-mixer-callback.in 2007-11-27 23:32:45.000000000 +0000 ++++ zaurusd/scripts/zaurus-mixer-callback.in 2007-11-27 23:36:54.000000000 +0000 +@@ -16,8 +16,6 @@ + JACK="$1" + SPK="$2" + LEFT="true" +-RLPLAYBACK="false" +-RLBYPASS="false" + + case $SPK in + "On") +@@ -37,8 +35,6 @@ + ;; + "Headset" | "Mic" | "Line") + LEFT="false" +- RLPLAYBACK="true" +- RLBYPASS="true" + SPK="Off" + ;; + *) +@@ -58,12 +54,6 @@ + }; /Speaker Function/ { + N + s:\(Speaker Function.*\n.*value \).*$:\1$SPK: +-}; /Right Mixer Left Playback/ { +-N +-s:\(Right Mixer Left Playback.*\n.*value \).*$:\1$RLPLAYBACK: +-}; /Right Mixer Left Bypass/ { +-N +-s:\(Right Mixer Left Bypass.*\n.*value \).*$:\1$RLBYPASS: + }; /Left Mixer Playback/ { + N + s:\(Left Mixer Playback.*\n.*value \).*$:\1$LEFT: diff --git a/packages/zaurusd/files/zaurus-hinge.in b/packages/zaurusd/files/zaurus-hinge.in index f719ba3c76..9670e8803e 100644 --- a/packages/zaurusd/files/zaurus-hinge.in +++ b/packages/zaurusd/files/zaurus-hinge.in @@ -19,9 +19,12 @@ if [ -z "$1" ]; then exit 1 fi -panel_user="`ps aux|grep matchbox-panel|grep -v grep | awk '{print $2}'`" - +panel_user="`ps aux|grep matchbox-panel|grep -v grep | awk '{print $1}'`" +# touch ~/.norot can disable rotation. +if test -f /home/$panel_user/.norot ; then + exit +fi STATE=$1 diff --git a/packages/zaurusd/files/zaurusd-mixer-callback.patch b/packages/zaurusd/files/zaurusd-mixer-callback.patch deleted file mode 100644 index 7c9455d042..0000000000 --- a/packages/zaurusd/files/zaurusd-mixer-callback.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- zaurusd/scripts/zaurus-mixer-callback.in.orig 2007-06-05 03:15:30.000000000 +0000 -+++ zaurusd/scripts/zaurus-mixer-callback.in 2007-06-05 03:14:53.000000000 +0000 -@@ -16,7 +16,7 @@ - JACK="$1" - SPK="$2" - LEFT="true" --RLPLAYBACK="false" -+RLPLAYBACK="true" - RLBYPASS="false" - - case $SPK in diff --git a/packages/zaurusd/zaurusd_svn.bb b/packages/zaurusd/zaurusd_svn.bb index 3ea0d2b22f..be9379eced 100644 --- a/packages/zaurusd/zaurusd_svn.bb +++ b/packages/zaurusd/zaurusd_svn.bb @@ -4,7 +4,7 @@ LICENSE = "GPL" DEPENDS = "tslib" RDEPENDS = "procps" PV = "0.0+svn${SRCDATE}" -PR = "r16" +PR = "r17" SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=zaurusd;proto=http \ file://zaurus-hinge.in \ @@ -14,10 +14,11 @@ SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=zaurusd;proto=http \ file://disable-alsa-handling.patch;patch=1 \ file://zaurus-hinge.matchbox-portrait \ file://zaurus-hinge.matchbox-landscape \ - file://zaurusd-mixer-callback.patch;patch=1 \ file://tslib-1.diff;patch=1 \ file://zaurus-hinge.bl-on \ - file://zaurus-hinge.bl-off" + file://zaurus-hinge.bl-off \ + file://01-check-toggle-landscape \ + file://01-check-toggle-portait" S = "${WORKDIR}/${PN}" @@ -39,6 +40,9 @@ do_install_append() { install -m 0755 "${WORKDIR}/zaurus-hinge.bl-on" "${D}/etc/zaurusd/hinge-portrait.d/00-backlight-on" install -m 0755 "${WORKDIR}/zaurus-hinge.bl-off" "${D}/etc/zaurusd/hinge-close.d/00-backlight-off" + install -m 0755 "${WORKDIR}/01-check-toggle-landscape" "${D}/etc/zaurusd/hinge-landscape.d/01-check-toggle" + install -m 0755 "${WORKDIR}/01-check-toggle-portait" "${D}/etc/zaurusd/hinge-portrait.d/01-check-toggle" + install -m 0755 "${WORKDIR}/zaurus-hinge.matchbox-landscape" "${D}/etc/zaurusd/hinge-landscape.d/20-matchbox-landscape" install -m 0755 "${WORKDIR}/zaurus-hinge.matchbox-portrait" "${D}/etc/zaurusd/hinge-portrait.d/20-matchbox-portrait" } -- cgit v1.2.3 From df5fbc51fd3d8c823626e4f375019bab9dd64a8b Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 17:45:38 +0000 Subject: libsdl-* consolidate using a .inc file, enable fbcon, closes #35 (yes, this one has been open since 2005-05-24 *cough*) --- packages/libsdl/files/explicit-extern-C.patch | 22 ++ packages/libsdl/files/fixlibs-1.2.9.patch | 27 ++ packages/libsdl/files/kill-stdc++-1.2.9.patch | 422 +++++++++++++++++++++ packages/libsdl/files/pagesize.patch | 15 + packages/libsdl/files/pygame-1.2.9.patch | 191 ++++++++++ packages/libsdl/libsdl-directfb_1.2.9.bb | 68 +--- .../libsdl-qpe-1.2.9/explicit-extern-C.patch | 22 -- .../libsdl/libsdl-qpe-1.2.9/fixlibs-1.2.9.patch | 27 -- .../libsdl-qpe-1.2.9/kill-stdc++-1.2.9.patch | 422 --------------------- .../libsdl/libsdl-qpe-1.2.9/pygame-1.2.9.patch | 191 ---------- packages/libsdl/libsdl-qpe_1.2.9.bb | 64 +--- packages/libsdl/libsdl-x11_1.2.7.bb | 57 --- packages/libsdl/libsdl-x11_1.2.9.bb | 49 +-- packages/libsdl/libsdl.inc | 50 +++ 14 files changed, 750 insertions(+), 877 deletions(-) create mode 100644 packages/libsdl/files/explicit-extern-C.patch create mode 100644 packages/libsdl/files/fixlibs-1.2.9.patch create mode 100644 packages/libsdl/files/kill-stdc++-1.2.9.patch create mode 100644 packages/libsdl/files/pagesize.patch create mode 100644 packages/libsdl/files/pygame-1.2.9.patch delete mode 100644 packages/libsdl/libsdl-qpe-1.2.9/explicit-extern-C.patch delete mode 100644 packages/libsdl/libsdl-qpe-1.2.9/fixlibs-1.2.9.patch delete mode 100644 packages/libsdl/libsdl-qpe-1.2.9/kill-stdc++-1.2.9.patch delete mode 100644 packages/libsdl/libsdl-qpe-1.2.9/pygame-1.2.9.patch delete mode 100644 packages/libsdl/libsdl-x11_1.2.7.bb create mode 100644 packages/libsdl/libsdl.inc diff --git a/packages/libsdl/files/explicit-extern-C.patch b/packages/libsdl/files/explicit-extern-C.patch new file mode 100644 index 0000000000..3dd44bea27 --- /dev/null +++ b/packages/libsdl/files/explicit-extern-C.patch @@ -0,0 +1,22 @@ +--- SDL-1.2.9-orig/src/video/SDL_sysvideo.h.org 2005-04-17 10:40:41.000000000 +0000 ++++ SDL-1.2.9-orig/src/video/SDL_sysvideo.h 2007-05-25 07:34:38.000000000 +0000 +@@ -332,6 +332,9 @@ + SDL_VideoDevice *(*create)(int devindex); + } VideoBootStrap; + ++#ifdef __cplusplus ++extern "C" { ++#endif + #ifdef ENABLE_X11 + extern VideoBootStrap X11_bootstrap; + #endif +@@ -417,6 +420,9 @@ + #ifdef ENABLE_RISCOS + extern VideoBootStrap RISCOS_bootstrap; + #endif ++#ifdef __cplusplus ++}; ++#endif + /* This is the current video device */ + extern SDL_VideoDevice *current_video; + diff --git a/packages/libsdl/files/fixlibs-1.2.9.patch b/packages/libsdl/files/fixlibs-1.2.9.patch new file mode 100644 index 0000000000..ebc6ec7769 --- /dev/null +++ b/packages/libsdl/files/fixlibs-1.2.9.patch @@ -0,0 +1,27 @@ +diff -Naur SDL-1.2.9-orig/configure.in SDL-1.2.9/configure.in +--- SDL-1.2.9-orig/configure.in 2007-03-12 20:56:23.000000000 +0100 ++++ SDL-1.2.9/configure.in 2007-03-12 20:59:28.000000000 +0100 +@@ -1593,8 +1593,8 @@ + AC_MSG_RESULT($video_qtopia) + if test x$video_qtopia = xyes; then + CFLAGS="$CFLAGS -DENABLE_QTOPIA -DQT_QWS_EBX -DQT_QWS_CUSTOM -DQWS -I${QPEDIR}/include -I${QTDIR}/include/ -DNO_DEBUG -fno-rtti -fno-exceptions" +- SDL_LIBS="$SDL_LIBS -L${QPEDIR}/lib -L${QTDIR}/lib/ -lqpe -lqte" +- SDL_CFLAGS="$SDL_CFLAGS -DQWS" ++ SDL_LIBS="$SDL_LIBS -Wl,-rpath-link -Wl,${QPEDIR}/lib -Wl,-rpath-link -Wl,${QTDIR}/lib" ++ SYSTEM_LIBS="$SYSTEM_LIBS -L${QPEDIR}/lib -L${QTDIR}/lib/ -lqpe -lqte-mt" + VIDEO_SUBDIRS="$VIDEO_SUBDIRS qtopia" + VIDEO_DRIVERS="$VIDEO_DRIVERS qtopia/libvideo_qtopia.la" + else +@@ -1908,12 +1908,6 @@ + CheckAltivec + CheckLinuxVersion + CheckRPATH +- +- # Set up files for the main() stub +- if test "x$video_qtopia" = "xyes"; then +- SDL_CFLAGS="$SDL_CFLAGS -Dmain=SDL_main" +- +- fi + # Set up files for the audio library + # We use the OSS and ALSA API's, not the Sun audio API + #if test x$enable_audio = xyes; then diff --git a/packages/libsdl/files/kill-stdc++-1.2.9.patch b/packages/libsdl/files/kill-stdc++-1.2.9.patch new file mode 100644 index 0000000000..884cb2191c --- /dev/null +++ b/packages/libsdl/files/kill-stdc++-1.2.9.patch @@ -0,0 +1,422 @@ +diff -Naur SDL-1.2.9-orig/acinclude.m4 SDL-1.2.9/acinclude.m4 +--- SDL-1.2.9-orig/acinclude.m4 2004-08-24 08:32:50.000000000 +0200 ++++ SDL-1.2.9/acinclude.m4 2007-03-12 20:57:08.000000000 +0100 +@@ -1473,11 +1473,11 @@ + case $host_os in + aix3*) + version_type=linux +- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' ++ library_names_spec='${libname}${release}${shrext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. +- soname_spec='${libname}${release}${shared_ext}$major' ++ soname_spec='${libname}${release}${shrext}$major' + ;; + + aix4* | aix5*) +@@ -1487,7 +1487,7 @@ + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 +- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' ++ library_names_spec='${libname}${release}${shrext}$major ${libname}${release}${shrext}$versuffix $libname${shrext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file +@@ -1513,12 +1513,12 @@ + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' +- soname_spec='${libname}${release}${shared_ext}$major' ++ soname_spec='${libname}${release}${shrext}$major' + fi + shlibpath_var=LIBPATH + fi +@@ -1531,7 +1531,7 @@ + ;; + + beos*) +- library_names_spec='${libname}${shared_ext}' ++ library_names_spec='${libname}${shrext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; +@@ -1539,8 +1539,8 @@ + bsdi[[45]]*) + version_type=linux + need_version=no +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" +@@ -1573,14 +1573,14 @@ + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' +- #soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +- soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shared_ext}' ++ #soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shrext}' ++ soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shrext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix +- #soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +- soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shared_ext}' ++ #soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shrext}' ++ soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shrext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by +@@ -1596,13 +1596,13 @@ + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' +- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ++ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shrext}' + ;; + esac + ;; + + *) +- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ++ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shrext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' +@@ -1615,8 +1615,8 @@ + version_type=darwin + need_lib_prefix=no + need_version=no +- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' +- soname_spec='${libname}${release}${major}$shared_ext' ++ library_names_spec='${libname}${release}${versuffix}$shrext ${libname}${release}${major}$shrext ${libname}$shrext' ++ soname_spec='${libname}${release}${major}$shrext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' +@@ -1633,8 +1633,8 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname$shrext' ++ soname_spec='${libname}${release}${shrext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +@@ -1646,8 +1646,8 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes +@@ -1659,12 +1659,12 @@ + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext} $libname${shrext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) +- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' ++ library_names_spec='${libname}${release}${shrext}$versuffix $libname${shrext}$versuffix' + need_version=yes + ;; + esac +@@ -1688,8 +1688,8 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}${major} ${libname}${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; +@@ -1707,8 +1707,8 @@ + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else +@@ -1722,8 +1722,8 @@ + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; +@@ -1732,8 +1732,8 @@ + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. +@@ -1752,8 +1752,8 @@ + esac + need_lib_prefix=no + need_version=no +- soname_spec='${libname}${release}${shared_ext}$major' +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' ++ soname_spec='${libname}${release}${shrext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${release}${shrext} $libname${shrext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= +@@ -1787,8 +1787,8 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no +@@ -1816,8 +1816,8 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes +@@ -1829,12 +1829,12 @@ + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${shrext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH +@@ -1844,7 +1844,7 @@ + + newsos6) + version_type=linux +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; +@@ -1853,8 +1853,8 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; +@@ -1863,7 +1863,7 @@ + version_type=sunos + need_lib_prefix=no + need_version=no +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${shrext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +@@ -1884,7 +1884,7 @@ + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no +- library_names_spec='$libname${shared_ext} $libname.a' ++ library_names_spec='$libname${shrext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; +@@ -1893,8 +1893,8 @@ + version_type=osf + need_lib_prefix=no + need_version=no +- soname_spec='${libname}${release}${shared_ext}$major' +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shrext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" +@@ -1902,8 +1902,8 @@ + + sco3.2v5*) + version_type=osf +- soname_spec='${libname}${release}${shared_ext}$major' +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shrext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +@@ -1911,8 +1911,8 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes +@@ -1922,7 +1922,7 @@ + + sunos4*) + version_type=sunos +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${shrext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes +@@ -1934,8 +1934,8 @@ + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) +@@ -1959,16 +1959,16 @@ + sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux +- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' +- soname_spec='$libname${shared_ext}.$major' ++ library_names_spec='$libname${shrext}.$versuffix $libname${shrext}.$major $libname${shrext}' ++ soname_spec='$libname${shrext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + + uts4*) + version_type=linux +- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +- soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' ++ soname_spec='${libname}${release}${shrext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +@@ -3471,8 +3471,8 @@ + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. +- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' +- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' ++ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' ++ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. +@@ -3481,7 +3481,7 @@ + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. +- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ++ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shrext 2>&1 | grep "ld"`; rm -f libconftest$shrext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' +@@ -3585,7 +3585,7 @@ + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. +- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' ++ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: +@@ -3645,7 +3645,7 @@ + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. +- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' ++ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: +@@ -4596,7 +4596,7 @@ + # Whether we need a single -rpath flag with a separated argument. + hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the ++# Set to yes if using DIR/libNAME${shrext} during linking hardcodes DIR into the + # resulting binary. + hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +diff -Naur SDL-1.2.9-orig/src/main/Makefile.am SDL-1.2.9/src/main/Makefile.am +--- SDL-1.2.9-orig/src/main/Makefile.am 2007-03-12 20:56:23.000000000 +0100 ++++ SDL-1.2.9/src/main/Makefile.am 2007-03-12 20:57:08.000000000 +0100 +@@ -46,3 +46,9 @@ + (cd $(distdir) && rm -f $(BUILT_SOURCES)) + cp -rp $(ARCH_SUBDIRS) $(distdir) + (cd $(distdir) && rm -rf `find . -name CVS`) ++ ++# overwrite USER variables ++CXXLD = $(CC) ++CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ ++ $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++ +diff -Naur SDL-1.2.9-orig/src/video/qtopia/Makefile.am SDL-1.2.9/src/video/qtopia/Makefile.am +--- SDL-1.2.9-orig/src/video/qtopia/Makefile.am 2007-03-12 20:56:23.000000000 +0100 ++++ SDL-1.2.9/src/video/qtopia/Makefile.am 2007-03-12 20:57:08.000000000 +0100 +@@ -17,3 +17,9 @@ + SDL_sysevents.cc \ + SDL_sysevents_c.h \ + SDL_qmain.cc ++ ++ ++# overwrite USER variables ++CXXLD = $(CC) ++CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ ++ $(AM_LDFLAGS) $(LDFLAGS) -o $@ diff --git a/packages/libsdl/files/pagesize.patch b/packages/libsdl/files/pagesize.patch new file mode 100644 index 0000000000..ea9ea9849b --- /dev/null +++ b/packages/libsdl/files/pagesize.patch @@ -0,0 +1,15 @@ +Remove obsolete non-portable macro. + +Index: SDL-1.2.9/src/video/fbcon/SDL_fbvideo.c +=================================================================== +--- SDL-1.2.9.orig/src/video/fbcon/SDL_fbvideo.c ++++ SDL-1.2.9/src/video/fbcon/SDL_fbvideo.c +@@ -405,7 +405,7 @@ static int FB_VideoInit(_THIS, SDL_Pixel + + /* Memory map the device, compensating for buggy PPC mmap() */ + mapped_offset = (((long)finfo.smem_start) - +- (((long)finfo.smem_start)&~(PAGE_SIZE-1))); ++ (((long)finfo.smem_start)&~(getpagesize()-1))); + mapped_memlen = finfo.smem_len+mapped_offset; + mapped_mem = mmap(NULL, mapped_memlen, + PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0); diff --git a/packages/libsdl/files/pygame-1.2.9.patch b/packages/libsdl/files/pygame-1.2.9.patch new file mode 100644 index 0000000000..4073de25bf --- /dev/null +++ b/packages/libsdl/files/pygame-1.2.9.patch @@ -0,0 +1,191 @@ +diff -Naur SDL-1.2.9-orig/configure.in SDL-1.2.9/configure.in +--- SDL-1.2.9-orig/configure.in 2005-08-28 08:31:18.000000000 +0200 ++++ SDL-1.2.9/configure.in 2007-03-12 20:55:18.000000000 +0100 +@@ -1912,7 +1912,7 @@ + # Set up files for the main() stub + if test "x$video_qtopia" = "xyes"; then + SDL_CFLAGS="$SDL_CFLAGS -Dmain=SDL_main" +- SDL_LIBS="-lSDLmain $SDL_LIBS" ++ + fi + # Set up files for the audio library + # We use the OSS and ALSA API's, not the Sun audio API +diff -Naur SDL-1.2.9-orig/src/main/Makefile.am SDL-1.2.9/src/main/Makefile.am +--- SDL-1.2.9-orig/src/main/Makefile.am 2004-02-12 07:21:13.000000000 +0100 ++++ SDL-1.2.9/src/main/Makefile.am 2007-03-12 20:55:18.000000000 +0100 +@@ -21,11 +21,7 @@ + if TARGET_MACOSX + MAINLIB_ARCH_SRCS = macosx/SDLMain.m macosx/SDLMain.h + else +-if TARGET_QTOPIA +-MAINLIB_ARCH_SRCS = qtopia/SDL_qtopia_main.cc +-else + MAINLIB_ARCH_SRCS = dummy/SDL_dummy_main.c +-endif # !TARGET_QTOPIA + endif # !TARGET_MACOSX + endif # !TARGET_WIN32 + libSDLmain_a_SOURCES = $(MAINLIB_ARCH_SRCS) +diff -Naur SDL-1.2.9-orig/src/main/qtopia/SDL_qtopia_main.cc SDL-1.2.9/src/main/qtopia/SDL_qtopia_main.cc +--- SDL-1.2.9-orig/src/main/qtopia/SDL_qtopia_main.cc 2003-12-14 07:25:53.000000000 +0100 ++++ SDL-1.2.9/src/main/qtopia/SDL_qtopia_main.cc 1970-01-01 01:00:00.000000000 +0100 +@@ -1,47 +0,0 @@ +- +-/* Include the SDL main definition header */ +-#include "SDL_main.h" +-#include +-#include +-#ifdef main +-#undef main +-#endif +-#ifdef QWS +-#include +-#include +-#include +-#include +- +-// Workaround for OPIE to remove taskbar icon. Also fixes +-// some issues in Qtopia where there are left-over qcop files in /tmp/. +-// I'm guessing this will also clean up the taskbar in the Sharp version +-// of Qtopia. +-static inline void cleanupQCop() { +- QString appname(qApp->argv()[0]); +- int slash = appname.findRev("/"); +- if(slash != -1) { appname = appname.mid(slash+1); } +- QString cmd = QPEApplication::qpeDir() + "bin/qcop QPE/System 'closing(QString)' '"+appname+"'"; +- system(cmd.latin1()); +- cmd = "/tmp/qcop-msg-"+appname; +- unlink(cmd.latin1()); +-} +- +-static QPEApplication *app; +-#endif +- +-extern int SDL_main(int argc, char *argv[]); +- +-int main(int argc, char *argv[]) +-{ +-#ifdef QWS +- // This initializes the Qtopia application. It needs to be done here +- // because it parses command line options. +- app = new QPEApplication(argc, argv); +- QWidget dummy; +- app->showMainWidget(&dummy); +- atexit(cleanupQCop); +-#endif +- // Exit here because if return is used, the application +- // doesn't seem to quit correctly. +- exit(SDL_main(argc, argv)); +-} +diff -Naur SDL-1.2.9-orig/src/video/qtopia/Makefile.am SDL-1.2.9/src/video/qtopia/Makefile.am +--- SDL-1.2.9-orig/src/video/qtopia/Makefile.am 2002-05-28 21:24:11.000000000 +0200 ++++ SDL-1.2.9/src/video/qtopia/Makefile.am 2007-03-12 20:55:18.000000000 +0100 +@@ -15,4 +15,5 @@ + SDL_syswm.cc \ + SDL_syswm_c.h \ + SDL_sysevents.cc \ +- SDL_sysevents_c.h ++ SDL_sysevents_c.h \ ++ SDL_qmain.cc +diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_qmain.cc SDL-1.2.9/src/video/qtopia/SDL_qmain.cc +--- SDL-1.2.9-orig/src/video/qtopia/SDL_qmain.cc 1970-01-01 01:00:00.000000000 +0100 ++++ SDL-1.2.9/src/video/qtopia/SDL_qmain.cc 2007-03-12 20:55:18.000000000 +0100 +@@ -0,0 +1,99 @@ ++/* Include the SDL main definition header */ ++#include "SDL_main.h" ++#include ++ ++#include ++#include ++#include ++ ++ ++#ifdef QWS ++#include ++#include ++#include ++ ++ ++ ++static QWidget *dummyW = 0; ++static QPEApplication *theApp = 0; ++static char **cmdline= 0; ++static int size = 0; ++ ++static void parse_cmd_line() { ++ /* ++ * find the number ++ */ ++ char buf[1024]; ++ int available = 0; ++ char *string_start = 0; ++ int fd = ::open( "/proc/self/cmdline", O_RDONLY ); ++ if ( fd < 0 ) { ++ qWarning( "Error getting the cmdline, can't be" ); ++ goto error_out; ++ } ++ ++ available = ::read( fd, &buf, sizeof(buf) ); ++ if ( available <= 0 ) ++ goto error_out; ++ ++ /* ++ * find out the number of arguments ++ */ ++ size = 0; ++ for (int i = 0; i < available; ++i ) ++ if ( buf[i] == '\0' ) ++ ++size; ++ ++ /* now create a the cmdline */ ++ cmdline = new char*[size+1]; ++ cmdline[size] = '\0'; // parnoid... ++ ++ string_start = &buf[0]; ++ for ( int i = 0; i < size; ++i ) { ++ /* ++ * find the end of the string ++ */ ++ size_t sz = ::strlen(string_start); ++ cmdline[i] = new char[sz+1]; ++ memcpy( cmdline[i], string_start, sz+1 ); ++ string_start += (sz+1); // +1 for '\0' +1 to set it beyond ++ } ++ ++ ::close(fd); ++ ++ return; ++ ++/* error code */ ++error_out: ++ cmdline = new char*[2]; ++ cmdline[0] = "unknown_app"; ++ cmdline[1] = '\0'; ++ size = 1; ++} ++ ++static void free_cmd_line() { ++ /* ++ * free each string and then free the array ++ */ ++ for ( int i = 0; i < size; ++i ) ++ delete [] cmdline[i]; ++ ++ delete [] cmdline; ++} ++ ++static void __attribute__((constructor)) initialize_qpe_app() { ++ parse_cmd_line(); ++ ++ theApp = new QPEApplication( size, cmdline ); ++ dummyW = new QWidget; ++ theApp->showMainWidget(dummyW); ++} ++ ++static void __attribute__((destructor)) deinitialize_qpe_app() { ++ free_cmd_line(); ++ delete dummyW; ++ delete theApp; ++} ++ ++ ++#endif diff --git a/packages/libsdl/libsdl-directfb_1.2.9.bb b/packages/libsdl/libsdl-directfb_1.2.9.bb index 73e94e9d22..7a9bd88ee2 100644 --- a/packages/libsdl/libsdl-directfb_1.2.9.bb +++ b/packages/libsdl/libsdl-directfb_1.2.9.bb @@ -1,28 +1,13 @@ -DESCRIPTION = "Simple DirectMedia Layer - DirectFB Edition" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "alsa-lib directfb" -PROVIDES = "virtual/libsdl" -LICENSE = "LGPL" +require libsdl.inc -PR = "r3" +DEPENDS = "alsa-lib directfb" DEFAULT_PREFERENCE = "-1" -SRC_URI = "http://www.libsdl.org/release/SDL-${PV}.tar.gz \ - file://agawa-piro-mickey-1.2.9.patch;patch=1 \ - file://pygame-1.2.9.patch;patch=1 \ - file://mouse-1.2.9.patch;patch=1 \ - file://kill-stdc++-1.2.9.patch;patch=1 \ - file://ipaq-1.2.9.patch;patch=1 \ - file://SDL-Akita-1.2.9.patch;patch=1 \ - file://fixlibs-1.2.9.patch;patch=1 \ - file://no-PAGE_SIZE.patch;patch=1 \ - file://explicit-extern-C.patch;patch=1 \ - file://acinclude.m4 \ - file://directfb_obsolete_calls.patch;patch=1" -S = "${WORKDIR}/SDL-${PV}" - -inherit autotools binconfig +SRC_URI += "\ + file://explicit-extern-C.patch;patch=1 \ + file://acinclude.m4 \ + file://directfb_obsolete_calls.patch;patch=1 \ +" CFLAGS_append += " -I${STAGING_INCDIR}/directfb -I${STAGING_INCDIR}/directfb-internal" @@ -30,44 +15,7 @@ EXTRA_OECONF = "--disable-static --disable-debug --enable-cdrom --enable-threads --enable-file --enable-oss --enable-alsa --disable-esd --disable-arts \ --disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest \ --disable-mintaudio --disable-nasm --disable-video-x11 --disable-video-dga \ - --disable-video-fbcon --enable-video-directfb --disable-video-ps2gs \ + --enable-video-fbcon --enable-video-directfb --disable-video-ps2gs \ --disable-video-xbios --disable-video-gem --disable-video-dummy \ --disable-video-opengl --enable-input-events --enable-pthreads \ --disable-video-picogui --disable-video-qtopia --enable-dlopen" - -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-dev += "${bindir}/*config" - -do_configure_prepend() { - rm -f ${S}/acinclude.m4 - cp ${WORKDIR}/acinclude.m4 ${S}/ - if [ "${PALMTOP_USE_MULTITHREADED_QT}" == "yes" ] - then - sed -i s,-lqte,-lqte-mt, src/Makefile - fi -} -do_configure_append () { - cd ${S} - - # prevent libtool from linking libs against libstdc++, libgcc, ... - cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp - mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool - find ${S} -type f | xargs sed -i 's:I/usr/include:I${STAGING_INCDIR}:g' - -} - -do_stage() { - oe_libinstall -so -C src libSDL ${STAGING_LIBDIR} - rm ${STAGING_LIBDIR}/libSDL.la - ln -sf libSDL.so ${STAGING_LIBDIR}/libSDL-1.2.so - #oe_libinstall -a -C src/main libSDLmain ${STAGING_LIBDIR} - install -m 0644 src/main/libSDLmain.a ${STAGING_LIBDIR} - - install -d ${STAGING_INCDIR}/SDL - for f in include/*.h - do - install -m 0644 $f ${STAGING_INCDIR}/SDL/ - done - - install -m 0644 *.m4 ${STAGING_DATADIR}/aclocal/ -} diff --git a/packages/libsdl/libsdl-qpe-1.2.9/explicit-extern-C.patch b/packages/libsdl/libsdl-qpe-1.2.9/explicit-extern-C.patch deleted file mode 100644 index 3dd44bea27..0000000000 --- a/packages/libsdl/libsdl-qpe-1.2.9/explicit-extern-C.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- SDL-1.2.9-orig/src/video/SDL_sysvideo.h.org 2005-04-17 10:40:41.000000000 +0000 -+++ SDL-1.2.9-orig/src/video/SDL_sysvideo.h 2007-05-25 07:34:38.000000000 +0000 -@@ -332,6 +332,9 @@ - SDL_VideoDevice *(*create)(int devindex); - } VideoBootStrap; - -+#ifdef __cplusplus -+extern "C" { -+#endif - #ifdef ENABLE_X11 - extern VideoBootStrap X11_bootstrap; - #endif -@@ -417,6 +420,9 @@ - #ifdef ENABLE_RISCOS - extern VideoBootStrap RISCOS_bootstrap; - #endif -+#ifdef __cplusplus -+}; -+#endif - /* This is the current video device */ - extern SDL_VideoDevice *current_video; - diff --git a/packages/libsdl/libsdl-qpe-1.2.9/fixlibs-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/fixlibs-1.2.9.patch deleted file mode 100644 index ebc6ec7769..0000000000 --- a/packages/libsdl/libsdl-qpe-1.2.9/fixlibs-1.2.9.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff -Naur SDL-1.2.9-orig/configure.in SDL-1.2.9/configure.in ---- SDL-1.2.9-orig/configure.in 2007-03-12 20:56:23.000000000 +0100 -+++ SDL-1.2.9/configure.in 2007-03-12 20:59:28.000000000 +0100 -@@ -1593,8 +1593,8 @@ - AC_MSG_RESULT($video_qtopia) - if test x$video_qtopia = xyes; then - CFLAGS="$CFLAGS -DENABLE_QTOPIA -DQT_QWS_EBX -DQT_QWS_CUSTOM -DQWS -I${QPEDIR}/include -I${QTDIR}/include/ -DNO_DEBUG -fno-rtti -fno-exceptions" -- SDL_LIBS="$SDL_LIBS -L${QPEDIR}/lib -L${QTDIR}/lib/ -lqpe -lqte" -- SDL_CFLAGS="$SDL_CFLAGS -DQWS" -+ SDL_LIBS="$SDL_LIBS -Wl,-rpath-link -Wl,${QPEDIR}/lib -Wl,-rpath-link -Wl,${QTDIR}/lib" -+ SYSTEM_LIBS="$SYSTEM_LIBS -L${QPEDIR}/lib -L${QTDIR}/lib/ -lqpe -lqte-mt" - VIDEO_SUBDIRS="$VIDEO_SUBDIRS qtopia" - VIDEO_DRIVERS="$VIDEO_DRIVERS qtopia/libvideo_qtopia.la" - else -@@ -1908,12 +1908,6 @@ - CheckAltivec - CheckLinuxVersion - CheckRPATH -- -- # Set up files for the main() stub -- if test "x$video_qtopia" = "xyes"; then -- SDL_CFLAGS="$SDL_CFLAGS -Dmain=SDL_main" -- -- fi - # Set up files for the audio library - # We use the OSS and ALSA API's, not the Sun audio API - #if test x$enable_audio = xyes; then diff --git a/packages/libsdl/libsdl-qpe-1.2.9/kill-stdc++-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/kill-stdc++-1.2.9.patch deleted file mode 100644 index 884cb2191c..0000000000 --- a/packages/libsdl/libsdl-qpe-1.2.9/kill-stdc++-1.2.9.patch +++ /dev/null @@ -1,422 +0,0 @@ -diff -Naur SDL-1.2.9-orig/acinclude.m4 SDL-1.2.9/acinclude.m4 ---- SDL-1.2.9-orig/acinclude.m4 2004-08-24 08:32:50.000000000 +0200 -+++ SDL-1.2.9/acinclude.m4 2007-03-12 20:57:08.000000000 +0100 -@@ -1473,11 +1473,11 @@ - case $host_os in - aix3*) - version_type=linux -- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' -+ library_names_spec='${libname}${release}${shrext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. -- soname_spec='${libname}${release}${shared_ext}$major' -+ soname_spec='${libname}${release}${shrext}$major' - ;; - - aix4* | aix5*) -@@ -1487,7 +1487,7 @@ - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 -- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' -+ library_names_spec='${libname}${release}${shrext}$major ${libname}${release}${shrext}$versuffix $libname${shrext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file -@@ -1513,12 +1513,12 @@ - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' -- soname_spec='${libname}${release}${shared_ext}$major' -+ soname_spec='${libname}${release}${shrext}$major' - fi - shlibpath_var=LIBPATH - fi -@@ -1531,7 +1531,7 @@ - ;; - - beos*) -- library_names_spec='${libname}${shared_ext}' -+ library_names_spec='${libname}${shrext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; -@@ -1539,8 +1539,8 @@ - bsdi[[45]]*) - version_type=linux - need_version=no -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" -@@ -1573,14 +1573,14 @@ - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' -- #soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -- soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shared_ext}' -+ #soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shrext}' -+ soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shrext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix -- #soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -- soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shared_ext}' -+ #soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shrext}' -+ soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shrext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by -@@ -1596,13 +1596,13 @@ - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' -- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' -+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shrext}' - ;; - esac - ;; - - *) -- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' -+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shrext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' -@@ -1615,8 +1615,8 @@ - version_type=darwin - need_lib_prefix=no - need_version=no -- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' -- soname_spec='${libname}${release}${major}$shared_ext' -+ library_names_spec='${libname}${release}${versuffix}$shrext ${libname}${release}${major}$shrext ${libname}$shrext' -+ soname_spec='${libname}${release}${major}$shrext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' -@@ -1633,8 +1633,8 @@ - version_type=linux - need_lib_prefix=no - need_version=no -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname$shrext' -+ soname_spec='${libname}${release}${shrext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -@@ -1646,8 +1646,8 @@ - version_type=linux - need_lib_prefix=no - need_version=no -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes -@@ -1659,12 +1659,12 @@ - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext} $libname${shrext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) -- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' -+ library_names_spec='${libname}${release}${shrext}$versuffix $libname${shrext}$versuffix' - need_version=yes - ;; - esac -@@ -1688,8 +1688,8 @@ - version_type=linux - need_lib_prefix=no - need_version=no -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}${major} ${libname}${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; -@@ -1707,8 +1707,8 @@ - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else -@@ -1722,8 +1722,8 @@ - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; -@@ -1732,8 +1732,8 @@ - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. -@@ -1752,8 +1752,8 @@ - esac - need_lib_prefix=no - need_version=no -- soname_spec='${libname}${release}${shared_ext}$major' -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' -+ soname_spec='${libname}${release}${shrext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${release}${shrext} $libname${shrext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= -@@ -1787,8 +1787,8 @@ - version_type=linux - need_lib_prefix=no - need_version=no -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no -@@ -1816,8 +1816,8 @@ - version_type=linux - need_lib_prefix=no - need_version=no -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes -@@ -1829,12 +1829,12 @@ - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${shrext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH -@@ -1844,7 +1844,7 @@ - - newsos6) - version_type=linux -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -@@ -1853,8 +1853,8 @@ - version_type=linux - need_lib_prefix=no - need_version=no -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -@@ -1863,7 +1863,7 @@ - version_type=sunos - need_lib_prefix=no - need_version=no -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${shrext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then -@@ -1884,7 +1884,7 @@ - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no -- library_names_spec='$libname${shared_ext} $libname.a' -+ library_names_spec='$libname${shrext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; -@@ -1893,8 +1893,8 @@ - version_type=osf - need_lib_prefix=no - need_version=no -- soname_spec='${libname}${release}${shared_ext}$major' -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -+ soname_spec='${libname}${release}${shrext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" -@@ -1902,8 +1902,8 @@ - - sco3.2v5*) - version_type=osf -- soname_spec='${libname}${release}${shared_ext}$major' -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -+ soname_spec='${libname}${release}${shrext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' - shlibpath_var=LD_LIBRARY_PATH - ;; - -@@ -1911,8 +1911,8 @@ - version_type=linux - need_lib_prefix=no - need_version=no -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes -@@ -1922,7 +1922,7 @@ - - sunos4*) - version_type=sunos -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${shrext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes -@@ -1934,8 +1934,8 @@ - - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) -@@ -1959,16 +1959,16 @@ - sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux -- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' -- soname_spec='$libname${shared_ext}.$major' -+ library_names_spec='$libname${shrext}.$versuffix $libname${shrext}.$major $libname${shrext}' -+ soname_spec='$libname${shrext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - - uts4*) - version_type=linux -- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -- soname_spec='${libname}${release}${shared_ext}$major' -+ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}' -+ soname_spec='${libname}${release}${shrext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -@@ -3471,8 +3471,8 @@ - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. -- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' -- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' -+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' -+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. -@@ -3481,7 +3481,7 @@ - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. -- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' -+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shrext 2>&1 | grep "ld"`; rm -f libconftest$shrext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' -@@ -3585,7 +3585,7 @@ - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. -- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' -+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: -@@ -3645,7 +3645,7 @@ - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. -- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' -+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: -@@ -4596,7 +4596,7 @@ - # Whether we need a single -rpath flag with a separated argument. - hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) - --# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -+# Set to yes if using DIR/libNAME${shrext} during linking hardcodes DIR into the - # resulting binary. - hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) - -diff -Naur SDL-1.2.9-orig/src/main/Makefile.am SDL-1.2.9/src/main/Makefile.am ---- SDL-1.2.9-orig/src/main/Makefile.am 2007-03-12 20:56:23.000000000 +0100 -+++ SDL-1.2.9/src/main/Makefile.am 2007-03-12 20:57:08.000000000 +0100 -@@ -46,3 +46,9 @@ - (cd $(distdir) && rm -f $(BUILT_SOURCES)) - cp -rp $(ARCH_SUBDIRS) $(distdir) - (cd $(distdir) && rm -rf `find . -name CVS`) -+ -+# overwrite USER variables -+CXXLD = $(CC) -+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ -+ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -+ -diff -Naur SDL-1.2.9-orig/src/video/qtopia/Makefile.am SDL-1.2.9/src/video/qtopia/Makefile.am ---- SDL-1.2.9-orig/src/video/qtopia/Makefile.am 2007-03-12 20:56:23.000000000 +0100 -+++ SDL-1.2.9/src/video/qtopia/Makefile.am 2007-03-12 20:57:08.000000000 +0100 -@@ -17,3 +17,9 @@ - SDL_sysevents.cc \ - SDL_sysevents_c.h \ - SDL_qmain.cc -+ -+ -+# overwrite USER variables -+CXXLD = $(CC) -+CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ -+ $(AM_LDFLAGS) $(LDFLAGS) -o $@ diff --git a/packages/libsdl/libsdl-qpe-1.2.9/pygame-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/pygame-1.2.9.patch deleted file mode 100644 index 4073de25bf..0000000000 --- a/packages/libsdl/libsdl-qpe-1.2.9/pygame-1.2.9.patch +++ /dev/null @@ -1,191 +0,0 @@ -diff -Naur SDL-1.2.9-orig/configure.in SDL-1.2.9/configure.in ---- SDL-1.2.9-orig/configure.in 2005-08-28 08:31:18.000000000 +0200 -+++ SDL-1.2.9/configure.in 2007-03-12 20:55:18.000000000 +0100 -@@ -1912,7 +1912,7 @@ - # Set up files for the main() stub - if test "x$video_qtopia" = "xyes"; then - SDL_CFLAGS="$SDL_CFLAGS -Dmain=SDL_main" -- SDL_LIBS="-lSDLmain $SDL_LIBS" -+ - fi - # Set up files for the audio library - # We use the OSS and ALSA API's, not the Sun audio API -diff -Naur SDL-1.2.9-orig/src/main/Makefile.am SDL-1.2.9/src/main/Makefile.am ---- SDL-1.2.9-orig/src/main/Makefile.am 2004-02-12 07:21:13.000000000 +0100 -+++ SDL-1.2.9/src/main/Makefile.am 2007-03-12 20:55:18.000000000 +0100 -@@ -21,11 +21,7 @@ - if TARGET_MACOSX - MAINLIB_ARCH_SRCS = macosx/SDLMain.m macosx/SDLMain.h - else --if TARGET_QTOPIA --MAINLIB_ARCH_SRCS = qtopia/SDL_qtopia_main.cc --else - MAINLIB_ARCH_SRCS = dummy/SDL_dummy_main.c --endif # !TARGET_QTOPIA - endif # !TARGET_MACOSX - endif # !TARGET_WIN32 - libSDLmain_a_SOURCES = $(MAINLIB_ARCH_SRCS) -diff -Naur SDL-1.2.9-orig/src/main/qtopia/SDL_qtopia_main.cc SDL-1.2.9/src/main/qtopia/SDL_qtopia_main.cc ---- SDL-1.2.9-orig/src/main/qtopia/SDL_qtopia_main.cc 2003-12-14 07:25:53.000000000 +0100 -+++ SDL-1.2.9/src/main/qtopia/SDL_qtopia_main.cc 1970-01-01 01:00:00.000000000 +0100 -@@ -1,47 +0,0 @@ -- --/* Include the SDL main definition header */ --#include "SDL_main.h" --#include --#include --#ifdef main --#undef main --#endif --#ifdef QWS --#include --#include --#include --#include -- --// Workaround for OPIE to remove taskbar icon. Also fixes --// some issues in Qtopia where there are left-over qcop files in /tmp/. --// I'm guessing this will also clean up the taskbar in the Sharp version --// of Qtopia. --static inline void cleanupQCop() { -- QString appname(qApp->argv()[0]); -- int slash = appname.findRev("/"); -- if(slash != -1) { appname = appname.mid(slash+1); } -- QString cmd = QPEApplication::qpeDir() + "bin/qcop QPE/System 'closing(QString)' '"+appname+"'"; -- system(cmd.latin1()); -- cmd = "/tmp/qcop-msg-"+appname; -- unlink(cmd.latin1()); --} -- --static QPEApplication *app; --#endif -- --extern int SDL_main(int argc, char *argv[]); -- --int main(int argc, char *argv[]) --{ --#ifdef QWS -- // This initializes the Qtopia application. It needs to be done here -- // because it parses command line options. -- app = new QPEApplication(argc, argv); -- QWidget dummy; -- app->showMainWidget(&dummy); -- atexit(cleanupQCop); --#endif -- // Exit here because if return is used, the application -- // doesn't seem to quit correctly. -- exit(SDL_main(argc, argv)); --} -diff -Naur SDL-1.2.9-orig/src/video/qtopia/Makefile.am SDL-1.2.9/src/video/qtopia/Makefile.am ---- SDL-1.2.9-orig/src/video/qtopia/Makefile.am 2002-05-28 21:24:11.000000000 +0200 -+++ SDL-1.2.9/src/video/qtopia/Makefile.am 2007-03-12 20:55:18.000000000 +0100 -@@ -15,4 +15,5 @@ - SDL_syswm.cc \ - SDL_syswm_c.h \ - SDL_sysevents.cc \ -- SDL_sysevents_c.h -+ SDL_sysevents_c.h \ -+ SDL_qmain.cc -diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_qmain.cc SDL-1.2.9/src/video/qtopia/SDL_qmain.cc ---- SDL-1.2.9-orig/src/video/qtopia/SDL_qmain.cc 1970-01-01 01:00:00.000000000 +0100 -+++ SDL-1.2.9/src/video/qtopia/SDL_qmain.cc 2007-03-12 20:55:18.000000000 +0100 -@@ -0,0 +1,99 @@ -+/* Include the SDL main definition header */ -+#include "SDL_main.h" -+#include -+ -+#include -+#include -+#include -+ -+ -+#ifdef QWS -+#include -+#include -+#include -+ -+ -+ -+static QWidget *dummyW = 0; -+static QPEApplication *theApp = 0; -+static char **cmdline= 0; -+static int size = 0; -+ -+static void parse_cmd_line() { -+ /* -+ * find the number -+ */ -+ char buf[1024]; -+ int available = 0; -+ char *string_start = 0; -+ int fd = ::open( "/proc/self/cmdline", O_RDONLY ); -+ if ( fd < 0 ) { -+ qWarning( "Error getting the cmdline, can't be" ); -+ goto error_out; -+ } -+ -+ available = ::read( fd, &buf, sizeof(buf) ); -+ if ( available <= 0 ) -+ goto error_out; -+ -+ /* -+ * find out the number of arguments -+ */ -+ size = 0; -+ for (int i = 0; i < available; ++i ) -+ if ( buf[i] == '\0' ) -+ ++size; -+ -+ /* now create a the cmdline */ -+ cmdline = new char*[size+1]; -+ cmdline[size] = '\0'; // parnoid... -+ -+ string_start = &buf[0]; -+ for ( int i = 0; i < size; ++i ) { -+ /* -+ * find the end of the string -+ */ -+ size_t sz = ::strlen(string_start); -+ cmdline[i] = new char[sz+1]; -+ memcpy( cmdline[i], string_start, sz+1 ); -+ string_start += (sz+1); // +1 for '\0' +1 to set it beyond -+ } -+ -+ ::close(fd); -+ -+ return; -+ -+/* error code */ -+error_out: -+ cmdline = new char*[2]; -+ cmdline[0] = "unknown_app"; -+ cmdline[1] = '\0'; -+ size = 1; -+} -+ -+static void free_cmd_line() { -+ /* -+ * free each string and then free the array -+ */ -+ for ( int i = 0; i < size; ++i ) -+ delete [] cmdline[i]; -+ -+ delete [] cmdline; -+} -+ -+static void __attribute__((constructor)) initialize_qpe_app() { -+ parse_cmd_line(); -+ -+ theApp = new QPEApplication( size, cmdline ); -+ dummyW = new QWidget; -+ theApp->showMainWidget(dummyW); -+} -+ -+static void __attribute__((destructor)) deinitialize_qpe_app() { -+ free_cmd_line(); -+ delete dummyW; -+ delete theApp; -+} -+ -+ -+#endif diff --git a/packages/libsdl/libsdl-qpe_1.2.9.bb b/packages/libsdl/libsdl-qpe_1.2.9.bb index 2fbf66b5d8..3583f20cf0 100644 --- a/packages/libsdl/libsdl-qpe_1.2.9.bb +++ b/packages/libsdl/libsdl-qpe_1.2.9.bb @@ -1,69 +1,31 @@ -DESCRIPTION = "Simple DirectMedia Layer - QtE-based Palmtop Environments Edition" +require libsdl.inc + SECTION = "opie/libs" -PRIORITY = "optional" DEPENDS = "virtual/libqpe1 libopie2" -PROVIDES = "virtual/libsdl" -LICENSE = "LGPL" - -# NOTE: make sure to keep PR in sync with libsdl-x11 -PR = "r1" - -SRC_URI = "http://www.libsdl.org/release/SDL-${PV}.tar.gz \ - file://agawa-piro-mickey-1.2.9.patch;patch=1 \ - file://pygame-1.2.9.patch;patch=1 \ - file://mouse-1.2.9.patch;patch=1 \ - file://kill-stdc++-1.2.9.patch;patch=1 \ - file://ipaq-1.2.9.patch;patch=1 \ - file://SDL-Akita-1.2.9.patch;patch=1 \ - file://fixlibs-1.2.9.patch;patch=1 \ - file://no-PAGE_SIZE.patch;patch=1 \ - file://explicit-extern-C.patch;patch=1 \ - file://acinclude.m4" -S = "${WORKDIR}/SDL-${PV}" -inherit autotools binconfig +SRC_URI += "\ + file://agawa-piro-mickey-1.2.9.patch;patch=1 \ + file://pygame-1.2.9.patch;patch=1 \ + file://mouse-1.2.9.patch;patch=1 \ + file://kill-stdc++-1.2.9.patch;patch=1 \ + file://ipaq-1.2.9.patch;patch=1 \ + file://SDL-Akita-1.2.9.patch;patch=1 \ + file://fixlibs-1.2.9.patch;patch=1 \ + file://explicit-extern-C.patch;patch=1 \ +" EXTRA_OECONF = "--disable-static --disable-debug --enable-cdrom --enable-threads --enable-timers --enable-endian \ --enable-file --enable-oss --disable-alsa --disable-esd --disable-arts \ --disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest \ --disable-mintaudio --disable-nasm --disable-video-x11 --disable-video-dga \ - --disable-video-fbcon --disable-video-directfb --disable-video-ps2gs \ + --enable-video-fbcon --disable-video-directfb --disable-video-ps2gs \ --disable-video-xbios --disable-video-gem --disable-video-dummy \ --disable-video-opengl --enable-input-events --enable-pthreads \ --disable-video-picogui --enable-video-qtopia --enable-dlopen" -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-dev += "${bindir}/*config" - do_compile_prepend() { - rm -f ${S}/acinclude.m4 - cp ${WORKDIR}/acinclude.m4 ${S}/ if [ "${PALMTOP_USE_MULTITHREADED_QT}" == "yes" ] then sed -i s,-lqte,-lqte-mt, src/Makefile fi } - -do_configure_append () { - cd ${S} - - # prevent libtool from linking libs against libstdc++, libgcc, ... - cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp - mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool -} - -do_stage() { - oe_libinstall -so -C src libSDL ${STAGING_LIBDIR} - rm ${STAGING_LIBDIR}/libSDL.la - ln -sf libSDL.so ${STAGING_LIBDIR}/libSDL-1.2.so - install -m 0655 src/main/libSDLmain.a src/main/.libs/ - oe_libinstall -a -C src/main libSDLmain ${STAGING_LIBDIR} - - install -d ${STAGING_INCDIR}/SDL - for f in include/*.h - do - install -m 0644 $f ${STAGING_INCDIR}/SDL/ - done - - install -m 0644 *.m4 ${STAGING_DATADIR}/aclocal/ -} diff --git a/packages/libsdl/libsdl-x11_1.2.7.bb b/packages/libsdl/libsdl-x11_1.2.7.bb deleted file mode 100644 index 125aec5f36..0000000000 --- a/packages/libsdl/libsdl-x11_1.2.7.bb +++ /dev/null @@ -1,57 +0,0 @@ -DESCRIPTION = "Simple DirectMedia Layer - X11 Edition" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "virtual/libx11 libxext" -PROVIDES = "virtual/libsdl" -LICENSE = "LGPL" - -# NOTE: make sure to keep PR in sync with libsdl-qpe -PR = "r9" - -SRC_URI = "http://www.libsdl.org/release/SDL-${PV}.tar.gz \ - file://extra-keys.patch;patch=1 \ - file://acinclude.m4" -S = "${WORKDIR}/SDL-${PV}" - -inherit autotools binconfig - -EXTRA_OECONF = "--disable-static --disable-debug --enable-cdrom --enable-threads --enable-timers --enable-endian \ - --enable-file --enable-oss --enable-alsa --disable-esd --disable-arts \ - --disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest \ - --disable-mintaudio --disable-nasm --enable-video-x11 --disable-video-dga \ - --disable-video-fbcon --disable-video-directfb --disable-video-ps2gs \ - --disable-video-xbios --disable-video-gem --disable-video-dummy \ - --disable-video-opengl --enable-input-events --enable-pthreads \ - --disable-video-picogui --disable-video-qtopia --enable-dlopen" - -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-dev += "${bindir}/*config" - -do_configure_prepend() { - rm -f ${S}/acinclude.m4 - cp ${WORKDIR}/acinclude.m4 ${S}/ -} - -do_configure_append () { - cd ${S} - - # prevent libtool from linking libs against libstdc++, libgcc, ... - cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp - mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool -} - -do_stage() { - oe_libinstall -so -C src libSDL ${STAGING_LIBDIR} - rm ${STAGING_LIBDIR}/libSDL.la - ln -sf libSDL.so ${STAGING_LIBDIR}/libSDL-1.2.so - #oe_libinstall -a -C src/main libSDLmain ${STAGING_LIBDIR} - install -m 0644 src/main/libSDLmain.a ${STAGING_LIBDIR} - - install -d ${STAGING_INCDIR}/SDL - for f in include/*.h - do - install -m 0644 $f ${STAGING_INCDIR}/SDL/ - done - - install -m 0644 *.m4 ${STAGING_DATADIR}/aclocal/ -} diff --git a/packages/libsdl/libsdl-x11_1.2.9.bb b/packages/libsdl/libsdl-x11_1.2.9.bb index 42c0ad3579..43148d4b00 100644 --- a/packages/libsdl/libsdl-x11_1.2.9.bb +++ b/packages/libsdl/libsdl-x11_1.2.9.bb @@ -1,56 +1,11 @@ -DESCRIPTION = "Simple DirectMedia Layer - X11 Edition" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "alsa-lib mesa virtual/libx11 libxext" -PROVIDES = "virtual/libsdl" -LICENSE = "LGPL" - -PR = "r2" - -SRC_URI = "http://www.libsdl.org/release/SDL-${PV}.tar.gz \ - file://extra-keys.patch;patch=1 \ - file://acinclude.m4" -S = "${WORKDIR}/SDL-${PV}" - -inherit autotools binconfig +require libsdl.inc EXTRA_OECONF = "--disable-static --disable-debug --enable-cdrom --enable-threads --enable-timers --enable-endian \ --enable-file --enable-oss --enable-alsa --disable-esd --disable-arts \ --disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest \ --disable-mintaudio --disable-nasm --enable-video-x11 --disable-video-dga \ - --disable-video-fbcon --disable-video-directfb --disable-video-ps2gs \ + --enable-video-fbcon --disable-video-directfb --disable-video-ps2gs \ --disable-video-xbios --disable-video-gem --disable-video-dummy \ --enable-video-opengl --enable-input-events --enable-pthreads \ --disable-video-picogui --disable-video-qtopia --enable-dlopen" -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-dev += "${bindir}/*config" - -do_configure_prepend() { - rm -f ${S}/acinclude.m4 - cp ${WORKDIR}/acinclude.m4 ${S}/ -} - -do_configure_append () { - cd ${S} - - # prevent libtool from linking libs against libstdc++, libgcc, ... - cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp - mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool -} - -do_stage() { - oe_libinstall -so -C src libSDL ${STAGING_LIBDIR} - rm ${STAGING_LIBDIR}/libSDL.la - ln -sf libSDL.so ${STAGING_LIBDIR}/libSDL-1.2.so - #oe_libinstall -a -C src/main libSDLmain ${STAGING_LIBDIR} - install -m 0644 src/main/libSDLmain.a ${STAGING_LIBDIR} - - install -d ${STAGING_INCDIR}/SDL - for f in include/*.h - do - install -m 0644 $f ${STAGING_INCDIR}/SDL/ - done - - install -m 0644 *.m4 ${STAGING_DATADIR}/aclocal/ -} diff --git a/packages/libsdl/libsdl.inc b/packages/libsdl/libsdl.inc new file mode 100644 index 0000000000..a65efb51be --- /dev/null +++ b/packages/libsdl/libsdl.inc @@ -0,0 +1,50 @@ +DESCRIPTION = "Simple DirectMedia Layer - X11 Edition" +SECTION = "libs" +PRIORITY = "optional" +DEPENDS = "alsa-lib mesa virtual/libx11 libxext" +PROVIDES = "virtual/libsdl" +LICENSE = "LGPL" +PR = "r3" + +SRC_URI = "\ + http://www.libsdl.org/release/SDL-${PV}.tar.gz \ + file://extra-keys.patch;patch=1 \ + file://pagesize.patch;patch=1 \ + file://acinclude.m4" +S = "${WORKDIR}/SDL-${PV}" + +inherit autotools binconfig + +EXTRA_OECONF = "" + +FILES_${PN} = "${libdir}/lib*.so.*" +FILES_${PN}-dev += "${bindir}/*config" + +do_configure_prepend() { + rm -f ${S}/acinclude.m4 + cp ${WORKDIR}/acinclude.m4 ${S}/ +} + +do_configure_append () { + cd ${S} + + # prevent libtool from linking libs against libstdc++, libgcc, ... + cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp + mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool +} + +do_stage() { + oe_libinstall -so -C src libSDL ${STAGING_LIBDIR} + rm ${STAGING_LIBDIR}/libSDL.la + ln -sf libSDL.so ${STAGING_LIBDIR}/libSDL-1.2.so + #oe_libinstall -a -C src/main libSDLmain ${STAGING_LIBDIR} + install -m 0644 src/main/libSDLmain.a ${STAGING_LIBDIR} + + install -d ${STAGING_INCDIR}/SDL + for f in include/*.h + do + install -m 0644 $f ${STAGING_INCDIR}/SDL/ + done + + install -m 0644 *.m4 ${STAGING_DATADIR}/aclocal/ +} -- cgit v1.2.3 From 63d69e64884df1dc0e7919b641d2afb2fd1782d3 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 18:08:57 +0000 Subject: nylon|colinuxoe.conf: add TARGET_OS. closes #348 --- conf/distro/colinuxoe.conf | 2 ++ conf/distro/nylon.conf | 2 ++ 2 files changed, 4 insertions(+) diff --git a/conf/distro/colinuxoe.conf b/conf/distro/colinuxoe.conf index 7454c0167f..25ea04a1f5 100644 --- a/conf/distro/colinuxoe.conf +++ b/conf/distro/colinuxoe.conf @@ -2,6 +2,8 @@ #@NAME: coLinuxoe #@DESCRIPTION: Generic OE built distro for the coLinux MACHINE +TARGET_OS = "linux" + INHERIT += "package_ipk debian" # MACHINE decides that linux-colinux is the correct kernel. diff --git a/conf/distro/nylon.conf b/conf/distro/nylon.conf index 334c8bba9b..0623ce6dd0 100644 --- a/conf/distro/nylon.conf +++ b/conf/distro/nylon.conf @@ -11,6 +11,8 @@ # # Bruno Randolf +TARGET_OS = "linux" + INHERIT += "package_ipk debian nylon-mirrors" INHERIT += "linux-kernel-base" -- cgit v1.2.3 From 261df5a8c72d69c27acc60224c6562d2e6153a09 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 18:34:28 +0000 Subject: busybox 1.9.1 add fix for lineedit on arm, remove our own version of run_parts.c which is identical with upstream nowadays --- packages/busybox/busybox_1.9.1.bb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/busybox/busybox_1.9.1.bb b/packages/busybox/busybox_1.9.1.bb index b41f1779b0..1626b1c6d2 100644 --- a/packages/busybox/busybox_1.9.1.bb +++ b/packages/busybox/busybox_1.9.1.bb @@ -1,7 +1,10 @@ require busybox.inc -PR = "r1" +PR = "r2" SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ + http://busybox.net/downloads/fixes-1.9.1/busybox-1.9.1-lineedit.patch;patch=1 \ + file://udhcpscript.patch;patch=1 \ + file://adduser-longops.patch;patch=1 \ file://busybox-cron \ file://busybox-httpd \ file://busybox-udhcpd \ @@ -10,16 +13,12 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \ file://mount.busybox \ file://syslog \ file://syslog.conf \ - file://udhcpscript.patch;patch=1 \ - file://adduser-longops.patch;patch=1 \ file://umount.busybox \ - file://run_parts.c \ file://defconfig" EXTRA_OEMAKE += "V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}" do_configure () { - cp ${WORKDIR}/run_parts.c ${S}/debianutils/ install -m 0644 ${WORKDIR}/defconfig ${S}/.config cml1_do_configure } -- cgit v1.2.3 From fd1d123937127920b69822040996b42f1e26aace Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 18:59:57 +0000 Subject: generic-uclibc.conf: prefer uclibc 0.9.29 --- conf/distro/generic-uclibc.conf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/conf/distro/generic-uclibc.conf b/conf/distro/generic-uclibc.conf index 26e78f89c1..805cfe7955 100644 --- a/conf/distro/generic-uclibc.conf +++ b/conf/distro/generic-uclibc.conf @@ -27,3 +27,10 @@ PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross" PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers" PREFERRED_PROVIDER_virtual/libiconv = "libiconv" PREFERRED_PROVIDER_virtual/libintl = "libintl" + +USE_NLS ?= "no" +USE_NLS_glib-2.0 = "yes" + +PREFERRED_VERSION_uclibc = "0.9.29" +PREFERRED_VERSION_uclibc-initial = "0.9.29" + -- cgit v1.2.3 From abd6308d57c2262b0d56250c920e5d331efbbfd5 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 19:02:19 +0000 Subject: dbus 1.1.4 ship necessary files and directories for system bus activation --- packages/dbus/dbus.inc | 13 ++++++++++++- packages/dbus/dbus_1.1.4.bb | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc index bbe7cb4fe4..b2ced23d99 100644 --- a/packages/dbus/dbus.inc +++ b/packages/dbus/dbus.inc @@ -25,7 +25,18 @@ DEBIANNAME_${PN} = "dbus-1" PACKAGES += "${PN}-lib" -FILES_${PN} = "${bindir}/dbus-daemon* ${bindir}/dbus-uuidgen ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services" +FILES_${PN} = "\ +${bindir}/dbus-daemon* \ +${bindir}/dbus-uuidgen \ +${bindir}/dbus-launch \ +${bindir}/dbus-cleanup-sockets \ +${bindir}/dbus-send \ +${bindir}/dbus-monitor \ +${libexecdir}/dbus* \ +${sysconfdir} \ +${datadir}/dbus-1/services \ +${datadir}/dbus-1/system-services \ +" FILES_${PN}-lib = "${libdir}/lib*.so.*" FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool" diff --git a/packages/dbus/dbus_1.1.4.bb b/packages/dbus/dbus_1.1.4.bb index f331b140aa..8e3e329fde 100644 --- a/packages/dbus/dbus_1.1.4.bb +++ b/packages/dbus/dbus_1.1.4.bb @@ -1,3 +1,3 @@ include dbus.inc -PR = "r0" +PR = "r1" -- cgit v1.2.3 From 3b7ea13cbd6916d7a0855411573598c52afb4290 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 19:11:42 +0000 Subject: add libjson, a library to create and parse json files --- packages/libjson/.mtn2git_empty | 0 packages/libjson/libjson_0.6.bb | 15 +++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 packages/libjson/.mtn2git_empty create mode 100644 packages/libjson/libjson_0.6.bb diff --git a/packages/libjson/.mtn2git_empty b/packages/libjson/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libjson/libjson_0.6.bb b/packages/libjson/libjson_0.6.bb new file mode 100644 index 0000000000..4c93e82a0b --- /dev/null +++ b/packages/libjson/libjson_0.6.bb @@ -0,0 +1,15 @@ +DESCRIPTION = "A library for parsing and creating JSON files" +HOMEPAGE = "http://oss.metaparadigm.com/json-c/" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "BSD" +PR = "r0" + +SRC_URI = "http://oss.metaparadigm.com/json-c/json-c-${PV}.tar.gz" +S = "${WORKDIR}/json-c-${PV}" + +inherit autotools + +do_stage() { + autotools_stage_all +} -- cgit v1.2.3 From 0bf5a6a8d22ab206b36b2bc7a54ef30c83a9e8d8 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 19:26:01 +0000 Subject: repair openmoko-python-devel-image --- packages/images/openmoko-python-devel-image.bb | 3 ++- packages/tasks/task-python-efl-examples.bb | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/images/openmoko-python-devel-image.bb b/packages/images/openmoko-python-devel-image.bb index 9d2a8db2c6..615042f3b8 100644 --- a/packages/images/openmoko-python-devel-image.bb +++ b/packages/images/openmoko-python-devel-image.bb @@ -2,5 +2,6 @@ require openmoko-image.bb IMAGE_INSTALL += "\ task-openmoko-python-devel \ + task-python-efl-examples \ + edje-viewer \ " - diff --git a/packages/tasks/task-python-efl-examples.bb b/packages/tasks/task-python-efl-examples.bb index 0a4e32097f..e78a4cabae 100644 --- a/packages/tasks/task-python-efl-examples.bb +++ b/packages/tasks/task-python-efl-examples.bb @@ -2,9 +2,13 @@ DESCRIPTION = "Python Examples for the Enlightenment Foundation Libraries" LICENSE = "MIT" SECTION = "devel/python" RDEPENDS = "\ - python-efl python-ecore-examples python-emotion-examples python-edje-examples python-epsilon-examples \ + task-python-efl \ + python-ecore-examples \ + python-emotion-examples \ + python-edje-examples \ + python-epsilon-examples \ python-math python-textutils \ " -PR = "ml2" +PR = "ml3" ALLOW_EMPTY = "1" -- cgit v1.2.3 From c29453d85e7236aaef0ed5b5b20de2b18b1a8381 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 19 Feb 2008 19:34:46 +0000 Subject: ipkg-utils: ipkg-make-index-track-stamps.patch: Remove hunk with whitespace-only changes. --- .../ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch b/packages/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch index 9f9b9359ce..ad6df4f2e9 100644 --- a/packages/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch +++ b/packages/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch @@ -86,12 +86,3 @@ Index: ipkg-utils/ipkg-make-index if opt_s: sys.exit(0) -@@ -154,7 +177,7 @@ if packages_filename: - os.rename(tmp_packages_filename, packages_filename) - os.rename(tmp_gzip_filename, gzip_filename) - --if verbose: -+if verbose: - sys.stderr.write("Generate Packages.filelist file\n") - files = {} - names = packages.packages.keys() -- cgit v1.2.3 From 5afdb5f594d828b1f948ea5dc7820e3d1deef4e6 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 19:40:27 +0000 Subject: add blackbox 0.70.1, fixes #981 --- packages/blackbox/.mtn2git_empty | 0 packages/blackbox/blackbox_0.70.1.bb | 14 ++++++++++++++ packages/blackbox/files/.mtn2git_empty | 0 packages/blackbox/files/remove-host-includes.patch | 19 +++++++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 packages/blackbox/.mtn2git_empty create mode 100644 packages/blackbox/blackbox_0.70.1.bb create mode 100644 packages/blackbox/files/.mtn2git_empty create mode 100644 packages/blackbox/files/remove-host-includes.patch diff --git a/packages/blackbox/.mtn2git_empty b/packages/blackbox/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/blackbox/blackbox_0.70.1.bb b/packages/blackbox/blackbox_0.70.1.bb new file mode 100644 index 0000000000..50dc5a69c6 --- /dev/null +++ b/packages/blackbox/blackbox_0.70.1.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Blackbox Window Manager" +SECTION = "x11/wm" +LICENSE = "GPL" +DEPENDS = "libx11 libxext libxcomposite libxfixes libxdamage libxrender libxinerama libxpm xrandr xft" +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/blackboxwm/blackbox-0.70.1.tar.gz \ + file://remove-host-includes.patch;patch=1" +S = "${WORKDIR}/blackbox-${PV}" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--disable-i18n --without-imlib --with-xpm --with-gnome-menus" + diff --git a/packages/blackbox/files/.mtn2git_empty b/packages/blackbox/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/blackbox/files/remove-host-includes.patch b/packages/blackbox/files/remove-host-includes.patch new file mode 100644 index 0000000000..bf557b51da --- /dev/null +++ b/packages/blackbox/files/remove-host-includes.patch @@ -0,0 +1,19 @@ +Index: blackbox-0.70.1/configure.ac +=================================================================== +--- blackbox-0.70.1.orig/configure.ac ++++ blackbox-0.70.1/configure.ac +@@ -8,14 +8,6 @@ AC_CONFIG_SRCDIR([src/blackbox.cc]) + dnl Determine default prefix + test "x$prefix" = "xNONE" && prefix="$ac_default_prefix" + +-dnl Look in the most logical places for external libraries +-CPPFLAGS="$CPPFLAGS -I$prefix/include" +-LDFLAGS="$LDFLAGS -L$prefix/lib" +-if test "x$prefix" != "x/usr/local"; then +- CPPFLAGS="$CPPFLAGS -I/usr/local/include" +- LDFLAGS="$LDFLAGS -L/usr/local/lib" +-fi +- + dnl Locate required external software + AC_PROG_CC + -- cgit v1.2.3 From f14f0d3bfd9ebd96079700cf30b5c4ebffc9b6c4 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 19 Feb 2008 21:15:37 +0000 Subject: ipkg-utils*: Re-add support for openwrt-style .ipk's. * There're two .ipk formats: one with ar top-level wrapping (essentially, .deb format, native OE format) and with tar.gz top-level wrap, used by OpenWRT and some tiny distros. When I did performance optimization work on ipkg-make-index, I just blocked support of tar.gz-style ipk's, as it was unclear if those are used in OE at all. Now support is readded, with the old code to handle them (i.e. not as optimal as ar-style ones). * This makes DISTRO=openwrt-sdk usable for producing compatible packages and deploy-feed for them. But there're still some issues to resolve before OE can be said to provide seamless support for building packages for OpenWRT. --- .../ipkg-utils-native_1.6+cvs20050404.bb | 2 +- .../ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch | 105 +++++++++++---------- packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb | 2 +- 3 files changed, 56 insertions(+), 53 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 3101ecb3be..ba3c8ecd0c 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 = "r15" +PR = "r16" inherit native diff --git a/packages/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch b/packages/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch index 25eb2cce6f..389a86018b 100644 --- a/packages/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch +++ b/packages/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch @@ -1,13 +1,6 @@ ---- - arfile.py | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - ipkg.py | 106 ++++++++++++++++++++++++++--------------------------- - setup.py | 2 - - 3 files changed, 177 insertions(+), 55 deletions(-) - -Index: ipkg-utils/arfile.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ ipkg-utils/arfile.py 2007-05-26 23:46:59.000000000 +0100 +diff -r 720080c24d2f arfile.py +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/arfile.py Sun Jan 27 23:26:35 2008 +0200 @@ -0,0 +1,124 @@ +""" +arfile - A module to parse GNU ar archives. @@ -133,23 +126,10 @@ Index: ipkg-utils/arfile.py + + f2 = tarf.extractfile("control") + print f2.read() -Index: ipkg-utils/setup.py -=================================================================== ---- ipkg-utils.orig/setup.py 2007-05-26 23:45:55.000000000 +0100 -+++ ipkg-utils/setup.py 2007-05-26 23:46:59.000000000 +0100 -@@ -16,6 +16,6 @@ distutils.core.setup( name = 'ipkg-utils - platforms = 'POSIX', - keywords = 'ipkg familiar', - url = 'http://www.handhelds.org/sources.html/', -- py_modules = [ 'ipkg' ], -+ py_modules = [ 'ipkg', 'arfile' ], - scripts = ['ipkg-compare-indexes', 'ipkg-make-index', 'ipkg-update-index', 'ipkg-build', 'ipkg-unbuild', 'ipkg-upload'] - ) -Index: ipkg-utils/ipkg.py -=================================================================== ---- ipkg-utils.orig/ipkg.py 2007-05-26 23:46:55.000000000 +0100 -+++ ipkg-utils/ipkg.py 2007-05-26 23:45:20.000000000 +0100 -@@ -41,6 +41,8 @@ import re +diff -r 720080c24d2f ipkg.py +--- a/ipkg.py Sun Jan 27 23:13:26 2008 +0200 ++++ b/ipkg.py Sun Jan 27 23:26:35 2008 +0200 +@@ -41,6 +41,8 @@ import string import string import commands from stat import ST_SIZE @@ -158,7 +138,7 @@ Index: ipkg-utils/ipkg.py class Version: """A class for holding parsed package version information.""" -@@ -131,78 +133,61 @@ class Package: +@@ -131,77 +133,61 @@ class Package: self.section = None self.filename_header = None self.file_list = [] @@ -198,8 +178,6 @@ Index: ipkg-utils/ipkg.py - self.size = stat[ST_SIZE] + self.filename = os.path.basename(fn) -+ assert self.isdeb == 1, "Old ipk format (non-deb) is unsupported" -+ ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,)) - if self.isdeb: - control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - './control'","r") @@ -227,15 +205,18 @@ Index: ipkg-utils/ipkg.py - self.__dict__[name] = value - else: - line = control.readline() ++ if self.isdeb: ++ ar = arfile.ArFile(f) ++ tarStream = ar.open("control.tar.gz") ++ tarf = tarfile.open("control.tar.gz", "r", tarStream) ++ ++ try: ++ control = tarf.extractfile("control") ++ except KeyError: ++ control = tarf.extractfile("./control") ++ else: ++ control = os.popen("tar --wildcards -xzO -f " + fn + " '*control.tar.gz' | tar xfzO - './control'", "r") + -+ ar = arfile.ArFile(f) -+ tarStream = ar.open("control.tar.gz") -+ tarf = tarfile.open("control.tar.gz", "r", tarStream) -+ -+ try: -+ control = tarf.extractfile("control") -+ except KeyError: -+ control = tarf.extractfile("./control") + self.read_control(control) control.close() - if self.isdeb: @@ -251,7 +232,7 @@ Index: ipkg-utils/ipkg.py self.scratch_dir = None self.file_dir = None self.meta_dir = None - ++ + def __getattr__(self, name): + if name == "md5": + self._computeFileMD5() @@ -269,11 +250,10 @@ Index: ipkg-utils/ipkg.py + sum.update(data) + f.close() + self.md5 = sum.hexdigest() -+ + def read_control(self, control): import os - -@@ -221,9 +203,15 @@ class Package: +@@ -221,9 +207,15 @@ class Package: value = value + '\n' + line if name == 'size': self.size = int(value) @@ -290,20 +270,43 @@ Index: ipkg-utils/ipkg.py return # consumes one blank line at end of package descriptoin else: line = control.readline() -@@ -314,6 +302,16 @@ class Package: +@@ -314,7 +306,27 @@ class Package: return self.section def get_file_list(self): +- return self.file_list + if not self.fn: + return [] -+ f = open(self.fn, "rb") -+ ar = arfile.ArFile(f) -+ tarStream = ar.open("data.tar.gz") -+ tarf = tarfile.open("data.tar.gz", "r", tarStream) -+ self.file_list = tarf.getnames() ++ ++ if self.isdeb: ++ f = open(self.fn, "rb") ++ ar = arfile.ArFile(f) ++ tarStream = ar.open("data.tar.gz") ++ tarf = tarfile.open("data.tar.gz", "r", tarStream) ++ self.file_list = tarf.getnames() ++ f.close() ++ else: ++ f = os.popen("tar xfzO " + self.fn + " '*data.tar.gz' | tar tfz -","r") ++ while 1: ++ line = f.readline() ++ if not line: break ++ self.file_list.append(string.rstrip(line)) ++ f.close() ++ ++ # Make sure that filelist has consistent format regardless of tar version + self.file_list = map(lambda a: ["./", ""][a.startswith("./")] + a, self.file_list) -+ -+ f.close() - return self.file_list ++ return self.file_list def write_package(self, dirname): + buf = self.render_control() +diff -r 720080c24d2f setup.py +--- a/setup.py Sun Jan 27 23:13:26 2008 +0200 ++++ b/setup.py Sun Jan 27 23:26:35 2008 +0200 +@@ -16,6 +16,6 @@ distutils.core.setup( name = 'ipkg-utils + platforms = 'POSIX', + keywords = 'ipkg familiar', + url = 'http://www.handhelds.org/sources.html/', +- py_modules = [ 'ipkg' ], ++ py_modules = [ 'ipkg', 'arfile' ], + scripts = ['ipkg-compare-indexes', 'ipkg-make-index', 'ipkg-update-index', 'ipkg-build', 'ipkg-unbuild', 'ipkg-upload'] + ) diff --git a/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb b/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb index c089796ccb..febecb0085 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 = "r17" +PR = "r18" SRC_URI = "${HANDHELDS_CVS};module=ipkg-utils \ file://ipkg-utils-fix.patch;patch=1 \ -- cgit v1.2.3 From 2e6af6d47a620f38b76fb1442f72161dcbcc736b Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 19 Feb 2008 21:37:09 +0000 Subject: joe 3.1: Update DESCRIPTION to something useful and add HOMEPAGE. --- packages/joe/joe_3.1.bb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/joe/joe_3.1.bb b/packages/joe/joe_3.1.bb index 31050477b8..d2f2aa6ad2 100644 --- a/packages/joe/joe_3.1.bb +++ b/packages/joe/joe_3.1.bb @@ -1,6 +1,8 @@ SECTION = "console/utils" -DESCRIPTION = "Joe's own editor." +DESCRIPTION = "Console text editor with good functionality, good choice for vi-haters." +HOMEPAGE = "http://joe-editor.sourceforge.net/" LICENSE ="GPL" SRC_URI = "${SOURCEFORGE_MIRROR}/joe-editor/joe-${PV}.tar.gz" +PR = "r1" inherit autotools -- cgit v1.2.3 From 0efa4c6c1cf75c70c9eae673daae44e937a92e1f Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Tue, 19 Feb 2008 23:35:23 +0000 Subject: Fixed default ALSA state for SL-Cxx00 (OE#2617). * Fixes bass/treble levels (reflects kernel fix alsa-wm8750-treble.patch (>2.6.24)). * Increased Mic Levels and Boost. * Enabled Capture Switch. * Improved Headphones / Speaker volume balance. * Disabled all bypasses. * Disabled Left -> Right routing. * All Mono signals decreased to 0 (not connected). * Line Mux changed to differential, keeping PGA unused. * Using Digital mono for recording (jack supports ony mono). * Enabled Automatic Level Control, optimized for voice recording. * Enabled Zero Cross volume changes. --- packages/alsa/alsa-state/akita/asound.state | 66 +++++++++++------------ packages/alsa/alsa-state/spitz/asound.state | 82 ++++++++++++++--------------- 2 files changed, 74 insertions(+), 74 deletions(-) diff --git a/packages/alsa/alsa-state/akita/asound.state b/packages/alsa/alsa-state/akita/asound.state index ee5ef519c3..d1bacfb708 100644 --- a/packages/alsa/alsa-state/akita/asound.state +++ b/packages/alsa/alsa-state/akita/asound.state @@ -6,8 +6,8 @@ state.Spitz { comment.range '0 - 63' iface MIXER name 'Capture Volume' - value.0 23 - value.1 23 + value.0 48 + value.1 48 } control.2 { comment.access 'read write' @@ -15,8 +15,8 @@ state.Spitz { comment.count 2 iface MIXER name 'Capture ZC Switch' - value.0 false - value.1 false + value.0 true + value.1 true } control.3 { comment.access 'read write' @@ -24,8 +24,8 @@ state.Spitz { comment.count 2 iface MIXER name 'Capture Switch' - value.0 false - value.1 false + value.0 true + value.1 true } control.4 { comment.access 'read write' @@ -33,8 +33,8 @@ state.Spitz { comment.count 2 iface MIXER name 'Headphone Playback ZC Switch' - value.0 false - value.1 false + value.0 true + value.1 true } control.5 { comment.access 'read write' @@ -42,8 +42,8 @@ state.Spitz { comment.count 2 iface MIXER name 'Speaker Playback ZC Switch' - value.0 false - value.1 false + value.0 true + value.1 true } control.6 { comment.access 'read write' @@ -92,8 +92,8 @@ state.Spitz { comment.range '0 - 255' iface MIXER name 'PCM Volume' - value.0 255 - value.1 255 + value.0 220 + value.1 220 } control.11 { comment.access 'read write' @@ -122,7 +122,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name 'Bass Volume' - value 11 + value 0 } control.14 { comment.access 'read write' @@ -131,7 +131,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name 'Treble Volume' - value 11 + value 0 } control.15 { comment.access 'read write' @@ -158,7 +158,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name '3D Volume' - value 9 + value 0 } control.18 { comment.access 'read write' @@ -226,7 +226,7 @@ state.Spitz { comment.count 1 iface MIXER name 'ALC Capture ZC Switch' - value false + value true } control.25 { comment.access 'read write' @@ -235,7 +235,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name 'ALC Capture Hold Time' - value 0 + value 9 } control.26 { comment.access 'read write' @@ -244,7 +244,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name 'ALC Capture Decay Time' - value 3 + value 9 } control.27 { comment.access 'read write' @@ -253,7 +253,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name 'ALC Capture Attack Time' - value 2 + value 3 } control.28 { comment.access 'read write' @@ -298,7 +298,7 @@ state.Spitz { comment.range '0 - 255' iface MIXER name 'Right ADC Capture Volume' - value 0 + value 195 } control.33 { comment.access 'read write' @@ -306,7 +306,7 @@ state.Spitz { comment.count 1 iface MIXER name 'ZC Timeout Switch' - value false + value true } control.34 { comment.access 'read write' @@ -331,8 +331,8 @@ state.Spitz { comment.range '0 - 3' iface MIXER name 'Mic Boost' - value.0 0 - value.1 0 + value.0 3 + value.1 3 } control.37 { comment.access 'read write' @@ -379,8 +379,8 @@ state.Spitz { comment.range '0 - 127' iface MIXER name 'Headphone Playback Volume' - value.0 121 - value.1 121 + value.0 105 + value.1 105 } control.42 { comment.access 'read write' @@ -389,8 +389,8 @@ state.Spitz { comment.range '0 - 127' iface MIXER name 'Speaker Playback Volume' - value.0 121 - value.1 121 + value.0 127 + value.1 127 } control.43 { comment.access 'read write' @@ -411,7 +411,7 @@ state.Spitz { comment.item.3 'Digital Mono' iface MIXER name 'Right ADC Mux' - value 'Mono (Left)' + value 'Digital Mono' } control.45 { comment.access 'read write' @@ -423,7 +423,7 @@ state.Spitz { comment.item.3 'Digital Mono' iface MIXER name 'Left ADC Mux' - value 'Mono (Left)' + value 'Digital Mono' } control.46 { comment.access 'read write' @@ -458,7 +458,7 @@ state.Spitz { comment.item.4 Differential iface MIXER name 'Right Line Mux' - value 'Line 2' + value Differential } control.49 { comment.access 'read write' @@ -471,7 +471,7 @@ state.Spitz { comment.item.4 Differential iface MIXER name 'Left Line Mux' - value 'Line 1' + value Differential } control.50 { comment.access 'read write' @@ -483,7 +483,7 @@ state.Spitz { comment.item.3 Differential iface MIXER name 'Right PGA Mux' - value 'Line 2' + value Differential } control.51 { comment.access 'read write' @@ -495,7 +495,7 @@ state.Spitz { comment.item.3 Differential iface MIXER name 'Left PGA Mux' - value 'Line 1' + value Differential } control.52 { comment.access 'read write' diff --git a/packages/alsa/alsa-state/spitz/asound.state b/packages/alsa/alsa-state/spitz/asound.state index 81b6ed9814..d1bacfb708 100644 --- a/packages/alsa/alsa-state/spitz/asound.state +++ b/packages/alsa/alsa-state/spitz/asound.state @@ -6,8 +6,8 @@ state.Spitz { comment.range '0 - 63' iface MIXER name 'Capture Volume' - value.0 23 - value.1 23 + value.0 48 + value.1 48 } control.2 { comment.access 'read write' @@ -15,8 +15,8 @@ state.Spitz { comment.count 2 iface MIXER name 'Capture ZC Switch' - value.0 false - value.1 false + value.0 true + value.1 true } control.3 { comment.access 'read write' @@ -24,8 +24,8 @@ state.Spitz { comment.count 2 iface MIXER name 'Capture Switch' - value.0 false - value.1 false + value.0 true + value.1 true } control.4 { comment.access 'read write' @@ -33,8 +33,8 @@ state.Spitz { comment.count 2 iface MIXER name 'Headphone Playback ZC Switch' - value.0 false - value.1 false + value.0 true + value.1 true } control.5 { comment.access 'read write' @@ -42,8 +42,8 @@ state.Spitz { comment.count 2 iface MIXER name 'Speaker Playback ZC Switch' - value.0 false - value.1 false + value.0 true + value.1 true } control.6 { comment.access 'read write' @@ -92,8 +92,8 @@ state.Spitz { comment.range '0 - 255' iface MIXER name 'PCM Volume' - value.0 255 - value.1 255 + value.0 220 + value.1 220 } control.11 { comment.access 'read write' @@ -131,7 +131,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name 'Treble Volume' - value 15 + value 0 } control.15 { comment.access 'read write' @@ -188,7 +188,7 @@ state.Spitz { comment.item.1 Playback iface MIXER name '3D Mode' - value Capture + value Playback } control.21 { comment.access 'read write' @@ -218,7 +218,7 @@ state.Spitz { comment.item.3 Stereo iface MIXER name 'ALC Capture Function' - value Off + value Left } control.24 { comment.access 'read write' @@ -226,7 +226,7 @@ state.Spitz { comment.count 1 iface MIXER name 'ALC Capture ZC Switch' - value false + value true } control.25 { comment.access 'read write' @@ -235,7 +235,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name 'ALC Capture Hold Time' - value 0 + value 9 } control.26 { comment.access 'read write' @@ -244,7 +244,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name 'ALC Capture Decay Time' - value 3 + value 9 } control.27 { comment.access 'read write' @@ -253,7 +253,7 @@ state.Spitz { comment.range '0 - 15' iface MIXER name 'ALC Capture Attack Time' - value 2 + value 3 } control.28 { comment.access 'read write' @@ -306,7 +306,7 @@ state.Spitz { comment.count 1 iface MIXER name 'ZC Timeout Switch' - value false + value true } control.34 { comment.access 'read write' @@ -322,7 +322,7 @@ state.Spitz { comment.count 1 iface MIXER name 'Right Speaker Playback Invert Switch' - value false + value true } control.36 { comment.access 'read write' @@ -331,8 +331,8 @@ state.Spitz { comment.range '0 - 3' iface MIXER name 'Mic Boost' - value.0 0 - value.1 0 + value.0 3 + value.1 3 } control.37 { comment.access 'read write' @@ -341,8 +341,8 @@ state.Spitz { comment.range '0 - 7' iface MIXER name 'Bypass Left Playback Volume' - value.0 2 - value.1 2 + value.0 0 + value.1 0 } control.38 { comment.access 'read write' @@ -351,8 +351,8 @@ state.Spitz { comment.range '0 - 7' iface MIXER name 'Bypass Right Playback Volume' - value.0 2 - value.1 2 + value.0 0 + value.1 0 } control.39 { comment.access 'read write' @@ -361,8 +361,8 @@ state.Spitz { comment.range '0 - 7' iface MIXER name 'Bypass Mono Playback Volume' - value.0 2 - value.1 2 + value.0 0 + value.1 0 } control.40 { comment.access 'read write' @@ -379,8 +379,8 @@ state.Spitz { comment.range '0 - 127' iface MIXER name 'Headphone Playback Volume' - value.0 121 - value.1 121 + value.0 105 + value.1 105 } control.42 { comment.access 'read write' @@ -389,8 +389,8 @@ state.Spitz { comment.range '0 - 127' iface MIXER name 'Speaker Playback Volume' - value.0 121 - value.1 121 + value.0 127 + value.1 127 } control.43 { comment.access 'read write' @@ -399,7 +399,7 @@ state.Spitz { comment.range '0 - 127' iface MIXER name 'Mono Playback Volume' - value 121 + value 0 } control.44 { comment.access 'read write' @@ -411,7 +411,7 @@ state.Spitz { comment.item.3 'Digital Mono' iface MIXER name 'Right ADC Mux' - value Stereo + value 'Digital Mono' } control.45 { comment.access 'read write' @@ -423,7 +423,7 @@ state.Spitz { comment.item.3 'Digital Mono' iface MIXER name 'Left ADC Mux' - value Stereo + value 'Digital Mono' } control.46 { comment.access 'read write' @@ -458,7 +458,7 @@ state.Spitz { comment.item.4 Differential iface MIXER name 'Right Line Mux' - value 'Line 1' + value Differential } control.49 { comment.access 'read write' @@ -471,7 +471,7 @@ state.Spitz { comment.item.4 Differential iface MIXER name 'Left Line Mux' - value 'Line 1' + value Differential } control.50 { comment.access 'read write' @@ -483,7 +483,7 @@ state.Spitz { comment.item.3 Differential iface MIXER name 'Right PGA Mux' - value 'Line 1' + value Differential } control.51 { comment.access 'read write' @@ -495,7 +495,7 @@ state.Spitz { comment.item.3 Differential iface MIXER name 'Left PGA Mux' - value 'Line 1' + value Differential } control.52 { comment.access 'read write' @@ -535,7 +535,7 @@ state.Spitz { comment.count 1 iface MIXER name 'Right Mixer Left Playback Switc' - value true + value false } control.57 { comment.access 'read write' -- cgit v1.2.3 From a31fef72ef3076a0250cc304c25f6a68ae2b9b9e Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 23:42:47 +0000 Subject: dbus 1.1.4 fix permissions of dbus system bus activation helper binary * with this revision, system bus activation finally works --- packages/dbus/dbus.inc | 22 ++++++++++++++++------ packages/dbus/dbus_1.1.4.bb | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc index b2ced23d99..ed0a0b3cf2 100644 --- a/packages/dbus/dbus.inc +++ b/packages/dbus/dbus.inc @@ -1,5 +1,6 @@ +DESCRIPTION = "A message bus system for inter-process communication" HOMEPAGE = "http://dbus.freedesktop.org" -DESCRIPTION = "Message bus system for applications to talk to one another" +SECTION = "base" LICENSE = "GPL" DEPENDS = "expat glib-2.0 virtual/libintl" @@ -56,13 +57,20 @@ chgrp "$MESSAGEUSER" "$MESSAGEHOME" 2>/dev/null || addgroup "$MESSAGEUSER" chown "$MESSAGEUSER"."$MESSAGEUSER" "$MESSAGEHOME" 2>/dev/null || adduser --system --home "$MESSAGEHOME" --no-create-home --disabled-password --ingroup "$MESSAGEUSER" "$MESSAGEUSER" grep -q netdev: /etc/group || addgroup netdev - +chmod u+s /usr/libexec/dbus-daemon-launch-helper } -EXTRA_OECONF = "--disable-qt --disable-qt3 --disable-gtk --disable-tests \ - --disable-checks --disable-xml-docs --disable-doxygen-docs \ - --with-xml=expat --without-x" - +EXTRA_OECONF = "\ + --disable-qt \ + --disable-qt3 \ + --disable-gtk \ + --disable-tests \ + --disable-checks \ + --disable-xml-docs \ + --disable-doxygen-docs \ + --with-xml=expat \ + --without-x \ +" do_stage() { oe_libinstall -so -C dbus libdbus-1 ${STAGING_LIBDIR} @@ -76,4 +84,6 @@ do_stage() { do_install_append() { install -d ${D}${sysconfdir}/init.d install -m 0755 ${WORKDIR}/dbus-1.init ${D}${sysconfdir}/init.d/dbus-1 + # the stock install seems to install the libtool wrapper script, so we have to copy this manually :M: + install -m 0755 bus/.libs/dbus-daemon-launch-helper ${D}${libexecdir}/ } diff --git a/packages/dbus/dbus_1.1.4.bb b/packages/dbus/dbus_1.1.4.bb index 8e3e329fde..7838e55ca1 100644 --- a/packages/dbus/dbus_1.1.4.bb +++ b/packages/dbus/dbus_1.1.4.bb @@ -1,3 +1,3 @@ include dbus.inc -PR = "r1" +PR = "r2" -- cgit v1.2.3 From caa7a3cfd0e36fd85c88be9b3da099623eff09a0 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 19 Feb 2008 23:43:14 +0000 Subject: gsm0710muxd svn fix name of dbus service file (temp.) --- packages/freesmartphone/gsm0710muxd_svn.bb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/freesmartphone/gsm0710muxd_svn.bb b/packages/freesmartphone/gsm0710muxd_svn.bb index 4a4dc3b7d4..98b9360c00 100644 --- a/packages/freesmartphone/gsm0710muxd_svn.bb +++ b/packages/freesmartphone/gsm0710muxd_svn.bb @@ -5,13 +5,18 @@ SECTION = "console/network" DEPENDS = "intltool-native dbus" LICENSE = "GPL" PV = "0.0+svnr${SRCREV}" -PR = "r0" +PR = "r2" SRC_URI = "svn://projects.linuxtogo.org/svn/smartphones/trunk/software;module=gsm0710muxd" S = "${WORKDIR}/gsm0710muxd" inherit autotools +do_install_append() { + # temp hack + mv -f ${D}${datadir}/dbus-1/system-services/org.freesmartphone.GSM.MUX.service ${D}${datadir}/dbus-1/system-services/org.mobile.mux.service +} + pkg_postinst_${PN}() { # can't do this offline if [ "x$D" != "x" ]; then -- cgit v1.2.3 From 20d42693b736d4986cbf898c9ef1b392a65f3f85 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Tue, 19 Feb 2008 23:53:49 +0000 Subject: zziplib: Unification and new versions. - added zziplib.inc file - added native and non-native recipe for latest stable (0.12) series - added native and non-native recipe for latest development (0.13) series --- packages/zziplib/files/.mtn2git_empty | 0 packages/zziplib/files/zip_c.patch | 15 + packages/zziplib/files/zziplib-autoconf.patch | 509 ++++++++++++++++++++++++++ packages/zziplib/zziplib-native_0.12.83.bb | 9 + packages/zziplib/zziplib-native_0.13.49.bb | 9 + packages/zziplib/zziplib.inc | 20 + packages/zziplib/zziplib_0.10.82.bb | 22 +- packages/zziplib/zziplib_0.12.83.bb | 4 + packages/zziplib/zziplib_0.13.49.bb | 12 + 9 files changed, 580 insertions(+), 20 deletions(-) create mode 100644 packages/zziplib/files/.mtn2git_empty create mode 100644 packages/zziplib/files/zip_c.patch create mode 100644 packages/zziplib/files/zziplib-autoconf.patch create mode 100644 packages/zziplib/zziplib-native_0.12.83.bb create mode 100644 packages/zziplib/zziplib-native_0.13.49.bb create mode 100644 packages/zziplib/zziplib.inc create mode 100644 packages/zziplib/zziplib_0.12.83.bb create mode 100644 packages/zziplib/zziplib_0.13.49.bb diff --git a/packages/zziplib/files/.mtn2git_empty b/packages/zziplib/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/zziplib/files/zip_c.patch b/packages/zziplib/files/zip_c.patch new file mode 100644 index 0000000000..fb23ce650e --- /dev/null +++ b/packages/zziplib/files/zip_c.patch @@ -0,0 +1,15 @@ +From zziplib Debian source package +--- a/zzip/zip.c 2007-03-19 02:27:49.000000000 +1100 ++++ b/zzip/zip.c 2007-11-07 17:40:52.985849197 +1100 +@@ -402,7 +402,10 @@ + uint16_t u_extras, u_comment, u_namlen; + + if (fd_map) +- { d = (void*)(fd_map+zz_fd_gap+zz_offset); } /* fd_map+fd_gap==u_rootseek */ ++ { ++ d = &dirent; ++ memcpy(d, fd_map+zz_fd_gap+zz_offset, sizeof(*d)); /* fd_map+fd_gap==u_rootseek */ ++ } + else + { + if (io->fd.seeks(fd, zz_rootseek+zz_offset, SEEK_SET) < 0) diff --git a/packages/zziplib/files/zziplib-autoconf.patch b/packages/zziplib/files/zziplib-autoconf.patch new file mode 100644 index 0000000000..6fc666f8f2 --- /dev/null +++ b/packages/zziplib/files/zziplib-autoconf.patch @@ -0,0 +1,509 @@ +Reworks zziplib's configure and top-level makefile considerably to make +this package compile in a cross-compilation environment. This has not +and will not be sent upstream because the author most likely wants it that +way (lots of MSVC crap). + +Index: zziplib-0.13.49/Makefile.am +=================================================================== +--- zziplib-0.13.49.orig/Makefile.am 2008-02-19 22:54:19.000000000 +0100 ++++ zziplib-0.13.49/Makefile.am 2008-02-19 23:37:40.000000000 +0100 +@@ -1,126 +1,10 @@ +-AUTOMAKE_OPTIONS = 1.4 foreign dist-bzip2 + ACLOCAL_AMFLAGS = -I m4 +-WANT_AUTOMAKE = 1.7 +-WANT_AUTOCONF = 2.57 ++WANT_AUTOMAKE = 1.96 ++WANT_AUTOCONF = 2.61 + + DIST_SUBDIRS = zzip zzipwrap bins test docs SDL + SUBDIRS = zzip zzipwrap bins test docs @SDL@ + +-# see Makefile.mk for the "make rpm" target +-rpm2: dist-bzip2 $(PACKAGE).spec +- rpmbuild -ta $(PACKAGE)-$(VERSION).tar.bz2 +- +-indent-check: +- (cd zzip && $(MAKE) `basename $@`) +- +-doc docs docu clean-doc clean-docs clean-docu zzip.html zzip.xml zzip.pdf \ +-man mans manpages htmpages unpack clean-unpack changes.htm pdfs \ +-omf install-omf install-doc install-docs install-sf install-man3 install-mans : +- (cd docs && $(MAKE) `basename $@`) +- +-sdl testsdl test-sdl install-sdl : +- (cd SDL && $(MAKE) `basename $@`) +- +-check-test0 check-test1 check-zzdir check-zzcat \ +-check-zzxor check-zzxordir check-zzxorcat \ +-check-sfx check-readme : \ +- (cd test && $(MAKE) `basename $@`) +- +-MSVC8 = msvc8/README.TXT msvc8/zip.exe msvc8/test1.zip msvc8/test.zip \ +-msvc8/zzdir.vcproj msvc8/zzipself.vcproj msvc8/zzip.vcproj \ +-msvc8/zziplib.sln msvc8/zzipsetstub.sln msvc8/zzobfuscated.sln \ +-msvc8/zziplib.vcproj msvc8/zzipsetstub.vcproj msvc8/zzobfuscated.vcproj \ +-msvc8/zzcat.sln msvc8/zzipself.bat msvc8/zzip.sln \ +-msvc8/zzcat.vcproj msvc8/zzipself.sln msvc8/zziptest.sln \ +-msvc8/zzdir.sln msvc8/zzipself.txt msvc8/zziptest.vcproj \ +- msvc8/zzipfseeko.vcproj msvc8/zzipmmapped.vcproj +- +-MSVC7 = msvc7/pkzip.exe msvc7/test1.zip msvc7/test.zip \ +-msvc7/zzdir.vcproj msvc7/zzipself.vcproj msvc7/zzip.vcproj \ +-msvc7/zziplib.sln msvc7/zzipsetstub.sln msvc7/zzobfuscated.sln \ +-msvc7/zziplib.vcproj msvc7/zzipsetstub.vcproj msvc7/zzobfuscated.vcproj \ +-msvc7/zzcat.sln msvc7/zzipself.bat msvc7/zzip.sln \ +-msvc7/zzcat.vcproj msvc7/zzipself.sln msvc7/zziptest.sln \ +-msvc7/zzdir.sln msvc7/zzipself.txt msvc7/zziptest.vcproj +- +-MSVC6 = \ +-msvc6/zzcat.dsp msvc6/zziplib.dsp msvc6/zzipwrap.dsp \ +-msvc6/zzdir.dsp msvc6/zziplib.dsw msvc6/zzobfuscated.dsp \ +-msvc6/zziptest.dsp msvc6/zzip.dsp +- + EXTRA_DIST = zziplib.spec zzipback.sed Makefile.mk \ +- $(MSVC8) $(MSVC7) $(MSVC6) $(am__aclocal_m4_deps) +- +-PHONY = auto boottrap rpm doc docs man manpages htmpages sdl testsdl \ +- comp compats msvc6 msvc7 +-# ------------------------------------------------------------------------ +- +-test-comp: +- test ! -d testing || rm -r testing +- mkdir testing +- (cd testing && tar xzvf ../$(PACKAGE)-$(VERSION).tar.gz) +- (cd "testing/$(PACKAGE)-$(VERSION)/zziplib" && sh configure) +- $(MAKE) -C "testing/$(PACKAGE)-$(VERSION)/zziplib" +- $(MAKE) -C "testing/$(PACKAGE)-$(VERSION)/zziplib" check +- +-clean-comp: +- test ! -d testing || rm -r testing +- +-msvc : +- mkdir bin +- mkdir lib +- mkdir include +- mkdir include/zzip +- cp $(srcdir)/msvc6/Release/*.exe bin/ +- cp $(srcdir)/msvc6/Release/*.dll bin/ +- cp $(srcdir)/msvc6/Release/*.lib lib/ +- cp $(srcdir)/zzip/*.h include/zzip/ +- zip -9r $(srcdir)/$(PACKAGE)-$(VERSION)-msvc6-bin.zip bin/ +- zip -9r $(srcdir)/$(PACKAGE)-$(VERSION)-msvc6-lib.zip lib/ include/ +- rm -r bin lib include +- +-# ------------------------------------------------------------------ zzip64 +-_FILE_OFFSET64 = -D_ZZIP_LARGEFILE -D_FILE_OFFSET_BITS=64 +-_RELEASEINFO64 = "RELEASE_INFO=-release 0-64" ++ $(am__aclocal_m4_deps) + +-zzip64-setup: zzip64-setup.tmp +-zzip64-setup.tmp : zzip/Makefile zzip/_config.h zzip/.deps/* zzip/zziplib.pc +- - mkdir zzip64 +- cp -a zzip/Makefile zzip/_config.h zzip/.deps/ zzip/zziplib.pc zzip64/ +- date > zzip64.dir +-zzip64-build: zzip64-build.tmp +-zzip64-build.tmp : zzip64-setup.tmp $(top_srcdir)/zzip/* +- cd zzip64 && $(MAKE) "AM_CFLAGS=$(_FILE_OFFSET64)" $(_RELEASEINFO64) +-zzip64-install: zzip64-install.tmp +-zzip64-install.tmp : zzip64-build.tmp +- cd zzip64 && $(MAKE) install $(_RELEASEINFO64) +- cd $(DESTDIR)$(libdir) && mv libzzip.so libzzip64.so +- cd $(DESTDIR)$(libdir) && mv libzzip.a libzzip64.a +- cd $(DESTDIR)$(libdir) && \ +- sed -e 's/zzip.so/zzip64.so/' \ +- -e 's/zzip.a/zzip64.a/' libzzip.la > libzzip64.la +- cd $(DESTDIR)$(libdir)/pkgconfig && \ +- sed -e 's/largefile=/largefile= %_FILE_OFFSET64/' \ +- -e 's/-lzzip/-lzzip64/' \ +- -e 's/zziplib/zziplib64/' zziplib.pc > zziplib64.pc +-zzip32-postinstall: +- cd $(DESTDIR)$(libdir) && mv libzzip.so libzzip32.so +- cd $(DESTDIR)$(libdir) && mv libzzip.a libzzip32.a +- cd $(DESTDIR)$(libdir) && ln -s libzzip32.so libzzip.so +- cd $(DESTDIR)$(libdir) && ln -s libzzip32.a libzzip.a +- cd $(DESTDIR)$(libdir) && \ +- sed -e 's/zzip.so/zzip32.so/' \ +- -e 's/zzip.a/zzip32.a/' libzzip.la > libzzip32.la +- cd $(DESTDIR)$(libdir)/pkgconfig && \ +- sed -e 's/-lzzip/-lzzip32/' \ +- -e 's/zziplib/zziplib32/' zziplib.pc > zziplib32.pc +-zzip-postinstall: +- : "the 12.8x and 11.8x and 10.8x packages are all the same actually" +- cd $(DESTDIR)$(libdir) || exit 1 \ +- ; for i in libzzip*.so.1? ; do : \ +- ; v10=`echo $i | sed -e "s/.so.../.so.10/"` \ +- ; v11=`echo $i | sed -e "s/.so.../.so.11/"` \ +- ; v12=`echo $i | sed -e "s/.so.../.so.12/"` \ +- ; test ! -e $v10 && test -e $v12 && ln -s $v12 $v10 \ +- ; test ! -e $v12 && test -e $v10 && ln -s $v10 $v12 \ +- ; ln -s $v10 $v11 || true; done +Index: zziplib-0.13.49/configure.ac +=================================================================== +--- zziplib-0.13.49.orig/configure.ac 2008-02-15 21:56:37.000000000 +0100 ++++ zziplib-0.13.49/configure.ac 2008-02-19 23:43:05.000000000 +0100 +@@ -1,12 +1,12 @@ +-AC_INIT(zziplib.spec) +-AC_PREREQ(2.49) +-AC_COPYRIGHT([Guido Draheim for ZZipLib.SF.net]) ++AC_PREREQ(2.61) ++AC_INIT([zziplib], [0.13.49], [Guido Draheim ]) ++AC_CANONICAL_TARGET ++AM_INIT_AUTOMAKE([foreign 1.9 dist-bzip2]) ++ ++AC_CONFIG_SRCDIR([zzip/zip.c]) + AC_REVISION($Revision: 1.9 $) +-AC_CONFIG_AUX_DIR(uses) ++ + # ======================================================================= +-AC_CANONICAL_SYSTEM +-dnl AM_ENABLE_MULTILIB([Makefile],[$host]) +-AX_ENABLE_BUILDDIR_UNAME + AC_SET_DEFAULT_PATHS_SYSTEM + # ----------------------------------------------------------------------- + AC_ARG_ENABLE(thread-safe,AC_HELP_STRING( +@@ -61,8 +61,6 @@ + AC_SUBST(ZLIB_INCL) + AC_SUBST(ZLIB_LDIR) + # ----------------------------------------------------------------------- +-AX_SPEC_DEFAULTS +-AM_INIT_AUTOMAKE($PACKAGE,$VERSION) + dnl test ".$CFLAGS" = "." && CFLAGS="" + AC_PROG_CC + dnl test ".$CFLAGS" = "." && test "$GCC" = "yes" && CFLAGS="-O3" +@@ -77,7 +75,7 @@ + sed -f $srcdir/zzip/_msvc.sed $srcdir/config.h.in >zzip/_msvc.in + AC_CONFIG_HEADERS([config.h]) + AX_PREFIX_CONFIG_H([zzip/_config.h],[zzip],[config.h]) +-AX_PREFIX_CONFIG_H([zzip/_msvc.h],[zzip],[zzip/_msvc.in]) ++#AX_PREFIX_CONFIG_H([zzip/_msvc.h],[zzip],[zzip/_msvc.in]) + AM_MAINTAINER_MODE + + AX_CREATE_PKGCONFIG_INFO(dnl +Index: zziplib-0.13.49/install-sh +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ zziplib-0.13.49/install-sh 2008-02-19 23:43:36.000000000 +0100 +@@ -0,0 +1,323 @@ ++#!/bin/sh ++# install - install a program, script, or datafile ++ ++scriptversion=2005-05-14.22 ++ ++# This originates from X11R5 (mit/util/scripts/install.sh), which was ++# later released in X11R6 (xc/config/util/install.sh) with the ++# following copyright and license. ++# ++# Copyright (C) 1994 X Consortium ++# ++# Permission is hereby granted, free of charge, to any person obtaining a copy ++# of this software and associated documentation files (the "Software"), to ++# deal in the Software without restriction, including without limitation the ++# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or ++# sell copies of the Software, and to permit persons to whom the Software is ++# furnished to do so, subject to the following conditions: ++# ++# The above copyright notice and this permission notice shall be included in ++# all copies or substantial portions of the Software. ++# ++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- ++# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++# ++# Except as contained in this notice, the name of the X Consortium shall not ++# be used in advertising or otherwise to promote the sale, use or other deal- ++# ings in this Software without prior written authorization from the X Consor- ++# tium. ++# ++# ++# FSF changes to this file are in the public domain. ++# ++# Calling this script install-sh is preferred over install.sh, to prevent ++# `make' implicit rules from creating a file called install from it ++# when there is no Makefile. ++# ++# This script is compatible with the BSD install script, but was written ++# from scratch. It can only install one file at a time, a restriction ++# shared with many OS's install programs. ++ ++# set DOITPROG to echo to test this script ++ ++# Don't use :- since 4.3BSD and earlier shells don't like it. ++doit="${DOITPROG-}" ++ ++# put in absolute paths if you don't have them in your path; or use env. vars. ++ ++mvprog="${MVPROG-mv}" ++cpprog="${CPPROG-cp}" ++chmodprog="${CHMODPROG-chmod}" ++chownprog="${CHOWNPROG-chown}" ++chgrpprog="${CHGRPPROG-chgrp}" ++stripprog="${STRIPPROG-strip}" ++rmprog="${RMPROG-rm}" ++mkdirprog="${MKDIRPROG-mkdir}" ++ ++chmodcmd="$chmodprog 0755" ++chowncmd= ++chgrpcmd= ++stripcmd= ++rmcmd="$rmprog -f" ++mvcmd="$mvprog" ++src= ++dst= ++dir_arg= ++dstarg= ++no_target_directory= ++ ++usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE ++ or: $0 [OPTION]... SRCFILES... DIRECTORY ++ or: $0 [OPTION]... -t DIRECTORY SRCFILES... ++ or: $0 [OPTION]... -d DIRECTORIES... ++ ++In the 1st form, copy SRCFILE to DSTFILE. ++In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. ++In the 4th, create DIRECTORIES. ++ ++Options: ++-c (ignored) ++-d create directories instead of installing files. ++-g GROUP $chgrpprog installed files to GROUP. ++-m MODE $chmodprog installed files to MODE. ++-o USER $chownprog installed files to USER. ++-s $stripprog installed files. ++-t DIRECTORY install into DIRECTORY. ++-T report an error if DSTFILE is a directory. ++--help display this help and exit. ++--version display version info and exit. ++ ++Environment variables override the default commands: ++ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG ++" ++ ++while test -n "$1"; do ++ case $1 in ++ -c) shift ++ continue;; ++ ++ -d) dir_arg=true ++ shift ++ continue;; ++ ++ -g) chgrpcmd="$chgrpprog $2" ++ shift ++ shift ++ continue;; ++ ++ --help) echo "$usage"; exit $?;; ++ ++ -m) chmodcmd="$chmodprog $2" ++ shift ++ shift ++ continue;; ++ ++ -o) chowncmd="$chownprog $2" ++ shift ++ shift ++ continue;; ++ ++ -s) stripcmd=$stripprog ++ shift ++ continue;; ++ ++ -t) dstarg=$2 ++ shift ++ shift ++ continue;; ++ ++ -T) no_target_directory=true ++ shift ++ continue;; ++ ++ --version) echo "$0 $scriptversion"; exit $?;; ++ ++ *) # When -d is used, all remaining arguments are directories to create. ++ # When -t is used, the destination is already specified. ++ test -n "$dir_arg$dstarg" && break ++ # Otherwise, the last argument is the destination. Remove it from $@. ++ for arg ++ do ++ if test -n "$dstarg"; then ++ # $@ is not empty: it contains at least $arg. ++ set fnord "$@" "$dstarg" ++ shift # fnord ++ fi ++ shift # arg ++ dstarg=$arg ++ done ++ break;; ++ esac ++done ++ ++if test -z "$1"; then ++ if test -z "$dir_arg"; then ++ echo "$0: no input file specified." >&2 ++ exit 1 ++ fi ++ # It's OK to call `install-sh -d' without argument. ++ # This can happen when creating conditional directories. ++ exit 0 ++fi ++ ++for src ++do ++ # Protect names starting with `-'. ++ case $src in ++ -*) src=./$src ;; ++ esac ++ ++ if test -n "$dir_arg"; then ++ dst=$src ++ src= ++ ++ if test -d "$dst"; then ++ mkdircmd=: ++ chmodcmd= ++ else ++ mkdircmd=$mkdirprog ++ fi ++ else ++ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command ++ # might cause directories to be created, which would be especially bad ++ # if $src (and thus $dsttmp) contains '*'. ++ if test ! -f "$src" && test ! -d "$src"; then ++ echo "$0: $src does not exist." >&2 ++ exit 1 ++ fi ++ ++ if test -z "$dstarg"; then ++ echo "$0: no destination specified." >&2 ++ exit 1 ++ fi ++ ++ dst=$dstarg ++ # Protect names starting with `-'. ++ case $dst in ++ -*) dst=./$dst ;; ++ esac ++ ++ # If destination is a directory, append the input filename; won't work ++ # if double slashes aren't ignored. ++ if test -d "$dst"; then ++ if test -n "$no_target_directory"; then ++ echo "$0: $dstarg: Is a directory" >&2 ++ exit 1 ++ fi ++ dst=$dst/`basename "$src"` ++ fi ++ fi ++ ++ # This sed command emulates the dirname command. ++ dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` ++ ++ # Make sure that the destination directory exists. ++ ++ # Skip lots of stat calls in the usual case. ++ if test ! -d "$dstdir"; then ++ defaultIFS=' ++ ' ++ IFS="${IFS-$defaultIFS}" ++ ++ oIFS=$IFS ++ # Some sh's can't handle IFS=/ for some reason. ++ IFS='%' ++ set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` ++ shift ++ IFS=$oIFS ++ ++ pathcomp= ++ ++ while test $# -ne 0 ; do ++ pathcomp=$pathcomp$1 ++ shift ++ if test ! -d "$pathcomp"; then ++ $mkdirprog "$pathcomp" ++ # mkdir can fail with a `File exist' error in case several ++ # install-sh are creating the directory concurrently. This ++ # is OK. ++ test -d "$pathcomp" || exit ++ fi ++ pathcomp=$pathcomp/ ++ done ++ fi ++ ++ if test -n "$dir_arg"; then ++ $doit $mkdircmd "$dst" \ ++ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ ++ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ ++ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ ++ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } ++ ++ else ++ dstfile=`basename "$dst"` ++ ++ # Make a couple of temp file names in the proper directory. ++ dsttmp=$dstdir/_inst.$$_ ++ rmtmp=$dstdir/_rm.$$_ ++ ++ # Trap to clean up those temp files at exit. ++ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 ++ trap '(exit $?); exit' 1 2 13 15 ++ ++ # Copy the file name to the temp name. ++ $doit $cpprog "$src" "$dsttmp" && ++ ++ # and set any options; do chmod last to preserve setuid bits. ++ # ++ # If any of these fail, we abort the whole thing. If we want to ++ # ignore errors from any of these, just make sure not to ignore ++ # errors from the above "$doit $cpprog $src $dsttmp" command. ++ # ++ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ ++ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ ++ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ ++ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && ++ ++ # Now rename the file to the real destination. ++ { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ ++ || { ++ # The rename failed, perhaps because mv can't rename something else ++ # to itself, or perhaps because mv is so ancient that it does not ++ # support -f. ++ ++ # Now remove or move aside any old file at destination location. ++ # We try this two ways since rm can't unlink itself on some ++ # systems and the destination file might be busy for other ++ # reasons. In this case, the final cleanup might fail but the new ++ # file should still install successfully. ++ { ++ if test -f "$dstdir/$dstfile"; then ++ $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ ++ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ ++ || { ++ echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 ++ (exit 1); exit 1 ++ } ++ else ++ : ++ fi ++ } && ++ ++ # Now rename the file to the real destination. ++ $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" ++ } ++ } ++ fi || { (exit 1); exit 1; } ++done ++ ++# The final little trick to "correctly" pass the exit status to the exit trap. ++{ ++ (exit 0); exit 0 ++} ++ ++# Local variables: ++# eval: (add-hook 'write-file-hooks 'time-stamp) ++# time-stamp-start: "scriptversion=" ++# time-stamp-format: "%:y-%02m-%02d.%02H" ++# time-stamp-end: "$" ++# End: diff --git a/packages/zziplib/zziplib-native_0.12.83.bb b/packages/zziplib/zziplib-native_0.12.83.bb new file mode 100644 index 0000000000..eb954f12c1 --- /dev/null +++ b/packages/zziplib/zziplib-native_0.12.83.bb @@ -0,0 +1,9 @@ +require zziplib_${PV}.bb + +DEPENDS = "zlib-native" + +inherit native + +S = "${WORKDIR}/zziplib-${PV}" + +PACKAGES = "" diff --git a/packages/zziplib/zziplib-native_0.13.49.bb b/packages/zziplib/zziplib-native_0.13.49.bb new file mode 100644 index 0000000000..eb954f12c1 --- /dev/null +++ b/packages/zziplib/zziplib-native_0.13.49.bb @@ -0,0 +1,9 @@ +require zziplib_${PV}.bb + +DEPENDS = "zlib-native" + +inherit native + +S = "${WORKDIR}/zziplib-${PV}" + +PACKAGES = "" diff --git a/packages/zziplib/zziplib.inc b/packages/zziplib/zziplib.inc new file mode 100644 index 0000000000..602eae6315 --- /dev/null +++ b/packages/zziplib/zziplib.inc @@ -0,0 +1,20 @@ +DESCRIPTION = "Support library for dealing with zip files" +SECTION = "libs" +PRIORITY = "optional" + +DEPENDS = "zlib python-native" + +SRC_URI = "${SOURCEFORGE_MIRROR}/zziplib/zziplib-${PV}.tar.bz2" +LICENSE = "LGPL MPL" + +inherit autotools pkgconfig + +do_configure_append() { + # Fix some brokenness in the generated makefile. + sed -i \ + -e "s|tail -1|tail -n 1|" \ + -e "s|dist dist-all dist-all:|dist dist-all:|" \ + Makefile + + mkdir ${S}/build +} diff --git a/packages/zziplib/zziplib_0.10.82.bb b/packages/zziplib/zziplib_0.10.82.bb index 4fb129592e..676444c072 100644 --- a/packages/zziplib/zziplib_0.10.82.bb +++ b/packages/zziplib/zziplib_0.10.82.bb @@ -1,21 +1,3 @@ -DESCRIPTION = "Support library for dealing with zip files" -SECTION = "libs" -PRIORITY = "optional" +require zziplib.inc -SRC_URI = "${SOURCEFORGE_MIRROR}/zziplib/zziplib-${PV}.tar.bz2" -LICENSE = "LGPL MPL" -inherit autotools pkgconfig - -do_stage() { - oe_libinstall -a -so -C zzip libzzip ${STAGING_LIBDIR} - oe_libinstall -a -so -C zzipwrap libzzipwrap ${STAGING_LIBDIR} - install -d ${STAGING_DATADIR}/aclocal - install -m 0644 ${S}/bins/zziplib.m4 ${STAGING_DATADIR}/aclocal/ - for h in zzip.h zzipformat.h zzipwrap.h zziplib.h zzip-io.h; do - install -m 0644 ${S}/zziplib/$h ${STAGING_INCDIR}/ - done - install -d ${STAGING_INCDIR}/zzip - for h in lib.h format.h _msvc.h conf.h file.h stdint.h zzip.h _config.h plugin.h; do - install -m 0644 ${S}/zzip/$h ${STAGING_INCDIR}/zzip/ - done -} +PR = "r1" diff --git a/packages/zziplib/zziplib_0.12.83.bb b/packages/zziplib/zziplib_0.12.83.bb new file mode 100644 index 0000000000..c9078ac6b6 --- /dev/null +++ b/packages/zziplib/zziplib_0.12.83.bb @@ -0,0 +1,4 @@ +require zziplib.inc + +SRC_URI += "file://zziplib-buildfix.patch;patch=1" + diff --git a/packages/zziplib/zziplib_0.13.49.bb b/packages/zziplib/zziplib_0.13.49.bb new file mode 100644 index 0000000000..3a6c148dc5 --- /dev/null +++ b/packages/zziplib/zziplib_0.13.49.bb @@ -0,0 +1,12 @@ +require zziplib.inc + +SRC_URI += "\ + file://zip_c.patch;patch=1 \ + file://zziplib-autoconf.patch;patch=1 \ + " + +#EXTRA_OECONF = "--srcdir=${S} --enable-builddir=${S}/build" + +do_stage() { + autotools_stage_all +} -- cgit v1.2.3 From c9e8762b3c2c940689bee98c2f78af69b47407e2 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 20 Feb 2008 00:34:07 +0000 Subject: gaim: moved gaim to packages/obsolete and pidgin to its own directory. Fixes 2374. --- packages/gaim/.mtn2git_empty | 0 packages/gaim/files/.mtn2git_empty | 0 .../gaim/files/01-optional-icons-in-dialogs.patch | 514 --------------------- packages/gaim/files/02-request-field-dialogs.patch | 116 ----- packages/gaim/files/03-blist-dialogs.patch | 240 ---------- packages/gaim/files/04-saved-status-dialogs.patch | 40 -- packages/gaim/files/05-statusbox-icon-size.patch | 11 - packages/gaim/files/06-account-dialogs.patch | 219 --------- packages/gaim/files/07-roomlist-dialog.patch | 67 --- packages/gaim/files/08-prefs-dialog.patch | 64 --- packages/gaim/files/09-filetransfer-dialog.patch | 52 --- packages/gaim/files/10-pda-default-settings.patch | 13 - packages/gaim/files/define-pda-mode.patch | 36 -- packages/gaim/files/desktop-name-2.0.0.patch | 27 -- packages/gaim/files/desktop-name.patch | 10 - packages/gaim/files/desktop-name_1.4.0.patch | 11 - packages/gaim/files/desktop-name_1.5.0.patch | 11 - packages/gaim/files/docklet-icon-size.patch | 13 - packages/gaim/files/gaim-OE-branding.patch | 11 - packages/gaim/files/gevolution-eds-dbus.patch | 53 --- packages/gaim/files/gtk-deprecated-2.0.0.patch | 13 - .../files/no-superimposed-version-on-logo.patch | 19 - packages/gaim/files/purple-OE-branding.patch | 14 - packages/gaim/files/series | 14 - packages/gaim/gaim.inc | 35 -- packages/gaim/gaim_1.0.3.bb | 6 - packages/gaim/gaim_1.1.0.bb | 6 - packages/gaim/gaim_1.1.1.bb | 6 - packages/gaim/gaim_1.1.2.bb | 9 - packages/gaim/gaim_1.4.0.bb | 9 - packages/gaim/gaim_1.5.0.bb | 9 - packages/gaim/gaim_2.0.0-cvs-mco1.bb | 44 -- packages/gaim/pidgin.inc | 85 ---- packages/gaim/pidgin/.mtn2git_empty | 0 packages/gaim/pidgin/gconf-no-errors.patch | 12 - packages/gaim/pidgin/pidgin.desktop-set-icon.patch | 11 - packages/gaim/pidgin/sanitize-configure.ac.patch | 33 -- packages/gaim/pidgin_2.0.2.bb | 9 - packages/gaim/pidgin_2.1.1.bb | 10 - packages/gaim/pidgin_2.2.1.bb | 10 - packages/obsolete/gaim/.mtn2git_empty | 0 packages/obsolete/gaim/files/.mtn2git_empty | 0 .../gaim/files/01-optional-icons-in-dialogs.patch | 514 +++++++++++++++++++++ .../gaim/files/02-request-field-dialogs.patch | 116 +++++ .../obsolete/gaim/files/03-blist-dialogs.patch | 240 ++++++++++ .../gaim/files/04-saved-status-dialogs.patch | 40 ++ .../gaim/files/05-statusbox-icon-size.patch | 11 + .../obsolete/gaim/files/06-account-dialogs.patch | 219 +++++++++ .../obsolete/gaim/files/07-roomlist-dialog.patch | 67 +++ packages/obsolete/gaim/files/08-prefs-dialog.patch | 64 +++ .../gaim/files/09-filetransfer-dialog.patch | 52 +++ .../gaim/files/10-pda-default-settings.patch | 13 + packages/obsolete/gaim/files/define-pda-mode.patch | 36 ++ .../obsolete/gaim/files/desktop-name-2.0.0.patch | 27 ++ packages/obsolete/gaim/files/desktop-name.patch | 10 + .../obsolete/gaim/files/desktop-name_1.4.0.patch | 11 + .../obsolete/gaim/files/desktop-name_1.5.0.patch | 11 + .../obsolete/gaim/files/docklet-icon-size.patch | 13 + .../obsolete/gaim/files/gaim-OE-branding.patch | 11 + .../obsolete/gaim/files/gevolution-eds-dbus.patch | 53 +++ .../obsolete/gaim/files/gtk-deprecated-2.0.0.patch | 13 + .../files/no-superimposed-version-on-logo.patch | 19 + packages/obsolete/gaim/files/series | 14 + packages/obsolete/gaim/gaim.inc | 35 ++ packages/obsolete/gaim/gaim_1.0.3.bb | 6 + packages/obsolete/gaim/gaim_1.1.0.bb | 6 + packages/obsolete/gaim/gaim_1.1.1.bb | 6 + packages/obsolete/gaim/gaim_1.1.2.bb | 9 + packages/obsolete/gaim/gaim_1.4.0.bb | 9 + packages/obsolete/gaim/gaim_1.5.0.bb | 9 + packages/obsolete/gaim/gaim_2.0.0-cvs-mco1.bb | 44 ++ packages/pidgin/.mtn2git_empty | 0 packages/pidgin/pidgin.inc | 85 ++++ packages/pidgin/pidgin/.mtn2git_empty | 0 packages/pidgin/pidgin/gconf-no-errors.patch | 12 + .../pidgin/pidgin/pidgin.desktop-set-icon.patch | 11 + packages/pidgin/pidgin/purple-OE-branding.patch | 14 + packages/pidgin/pidgin/sanitize-configure.ac.patch | 33 ++ packages/pidgin/pidgin_2.0.2.bb | 9 + packages/pidgin/pidgin_2.1.1.bb | 10 + packages/pidgin/pidgin_2.2.1.bb | 10 + 81 files changed, 1862 insertions(+), 1862 deletions(-) delete mode 100644 packages/gaim/.mtn2git_empty delete mode 100644 packages/gaim/files/.mtn2git_empty delete mode 100644 packages/gaim/files/01-optional-icons-in-dialogs.patch delete mode 100644 packages/gaim/files/02-request-field-dialogs.patch delete mode 100644 packages/gaim/files/03-blist-dialogs.patch delete mode 100644 packages/gaim/files/04-saved-status-dialogs.patch delete mode 100644 packages/gaim/files/05-statusbox-icon-size.patch delete mode 100644 packages/gaim/files/06-account-dialogs.patch delete mode 100644 packages/gaim/files/07-roomlist-dialog.patch delete mode 100644 packages/gaim/files/08-prefs-dialog.patch delete mode 100644 packages/gaim/files/09-filetransfer-dialog.patch delete mode 100644 packages/gaim/files/10-pda-default-settings.patch delete mode 100644 packages/gaim/files/define-pda-mode.patch delete mode 100644 packages/gaim/files/desktop-name-2.0.0.patch delete mode 100644 packages/gaim/files/desktop-name.patch delete mode 100644 packages/gaim/files/desktop-name_1.4.0.patch delete mode 100644 packages/gaim/files/desktop-name_1.5.0.patch delete mode 100644 packages/gaim/files/docklet-icon-size.patch delete mode 100644 packages/gaim/files/gaim-OE-branding.patch delete mode 100644 packages/gaim/files/gevolution-eds-dbus.patch delete mode 100644 packages/gaim/files/gtk-deprecated-2.0.0.patch delete mode 100644 packages/gaim/files/no-superimposed-version-on-logo.patch delete mode 100644 packages/gaim/files/purple-OE-branding.patch delete mode 100644 packages/gaim/files/series delete mode 100644 packages/gaim/gaim.inc delete mode 100644 packages/gaim/gaim_1.0.3.bb delete mode 100644 packages/gaim/gaim_1.1.0.bb delete mode 100644 packages/gaim/gaim_1.1.1.bb delete mode 100644 packages/gaim/gaim_1.1.2.bb delete mode 100644 packages/gaim/gaim_1.4.0.bb delete mode 100644 packages/gaim/gaim_1.5.0.bb delete mode 100644 packages/gaim/gaim_2.0.0-cvs-mco1.bb delete mode 100644 packages/gaim/pidgin.inc delete mode 100644 packages/gaim/pidgin/.mtn2git_empty delete mode 100644 packages/gaim/pidgin/gconf-no-errors.patch delete mode 100644 packages/gaim/pidgin/pidgin.desktop-set-icon.patch delete mode 100644 packages/gaim/pidgin/sanitize-configure.ac.patch delete mode 100644 packages/gaim/pidgin_2.0.2.bb delete mode 100644 packages/gaim/pidgin_2.1.1.bb delete mode 100644 packages/gaim/pidgin_2.2.1.bb create mode 100644 packages/obsolete/gaim/.mtn2git_empty create mode 100644 packages/obsolete/gaim/files/.mtn2git_empty create mode 100644 packages/obsolete/gaim/files/01-optional-icons-in-dialogs.patch create mode 100644 packages/obsolete/gaim/files/02-request-field-dialogs.patch create mode 100644 packages/obsolete/gaim/files/03-blist-dialogs.patch create mode 100644 packages/obsolete/gaim/files/04-saved-status-dialogs.patch create mode 100644 packages/obsolete/gaim/files/05-statusbox-icon-size.patch create mode 100644 packages/obsolete/gaim/files/06-account-dialogs.patch create mode 100644 packages/obsolete/gaim/files/07-roomlist-dialog.patch create mode 100644 packages/obsolete/gaim/files/08-prefs-dialog.patch create mode 100644 packages/obsolete/gaim/files/09-filetransfer-dialog.patch create mode 100644 packages/obsolete/gaim/files/10-pda-default-settings.patch create mode 100644 packages/obsolete/gaim/files/define-pda-mode.patch create mode 100644 packages/obsolete/gaim/files/desktop-name-2.0.0.patch create mode 100644 packages/obsolete/gaim/files/desktop-name.patch create mode 100644 packages/obsolete/gaim/files/desktop-name_1.4.0.patch create mode 100644 packages/obsolete/gaim/files/desktop-name_1.5.0.patch create mode 100644 packages/obsolete/gaim/files/docklet-icon-size.patch create mode 100644 packages/obsolete/gaim/files/gaim-OE-branding.patch create mode 100644 packages/obsolete/gaim/files/gevolution-eds-dbus.patch create mode 100644 packages/obsolete/gaim/files/gtk-deprecated-2.0.0.patch create mode 100644 packages/obsolete/gaim/files/no-superimposed-version-on-logo.patch create mode 100644 packages/obsolete/gaim/files/series create mode 100644 packages/obsolete/gaim/gaim.inc create mode 100644 packages/obsolete/gaim/gaim_1.0.3.bb create mode 100644 packages/obsolete/gaim/gaim_1.1.0.bb create mode 100644 packages/obsolete/gaim/gaim_1.1.1.bb create mode 100644 packages/obsolete/gaim/gaim_1.1.2.bb create mode 100644 packages/obsolete/gaim/gaim_1.4.0.bb create mode 100644 packages/obsolete/gaim/gaim_1.5.0.bb create mode 100644 packages/obsolete/gaim/gaim_2.0.0-cvs-mco1.bb create mode 100644 packages/pidgin/.mtn2git_empty create mode 100644 packages/pidgin/pidgin.inc create mode 100644 packages/pidgin/pidgin/.mtn2git_empty create mode 100644 packages/pidgin/pidgin/gconf-no-errors.patch create mode 100644 packages/pidgin/pidgin/pidgin.desktop-set-icon.patch create mode 100644 packages/pidgin/pidgin/purple-OE-branding.patch create mode 100644 packages/pidgin/pidgin/sanitize-configure.ac.patch create mode 100644 packages/pidgin/pidgin_2.0.2.bb create mode 100644 packages/pidgin/pidgin_2.1.1.bb create mode 100644 packages/pidgin/pidgin_2.2.1.bb diff --git a/packages/gaim/.mtn2git_empty b/packages/gaim/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gaim/files/.mtn2git_empty b/packages/gaim/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gaim/files/01-optional-icons-in-dialogs.patch b/packages/gaim/files/01-optional-icons-in-dialogs.patch deleted file mode 100644 index 260dcf364f..0000000000 --- a/packages/gaim/files/01-optional-icons-in-dialogs.patch +++ /dev/null @@ -1,514 +0,0 @@ -Index: gaim/src/gtkblist.c -=================================================================== ---- gaim.orig/src/gtkblist.c 2005-08-19 23:23:45.000000000 +0200 -+++ gaim/src/gtkblist.c 2005-08-21 02:32:13.989658832 +0200 -@@ -873,16 +873,23 @@ - void - gaim_gtk_blist_joinchat_show(void) - { -- GtkWidget *hbox, *vbox; -+ GtkWidget *vbox; - GtkWidget *rowbox; - GtkWidget *label; -+ GtkWidget *pri_label; - GaimGtkBuddyList *gtkblist; -+ GtkWidget *sw; -+#if ICONS_IN_DIALOGS -+ GtkWidget *hbox; - GtkWidget *img = NULL; -+#endif - GaimGtkJoinChatData *data = NULL; - - gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); -+#if ICONS_IN_DIALOGS - img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, - GTK_ICON_SIZE_DIALOG); -+#endif - data = g_new0(GaimGtkJoinChatData, 1); - - data->window = gtk_dialog_new_with_buttons(_("Join a Chat"), -@@ -897,6 +904,7 @@ - GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), GAIM_HIG_BOX_SPACE); - gtk_window_set_role(GTK_WINDOW(data->window), "join_chat"); - -+#if ICONS_IN_DIALOGS - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); -@@ -905,6 +913,9 @@ - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 0); - gtk_container_add(GTK_CONTAINER(hbox), vbox); -+#else -+ vbox = GTK_DIALOG(data->window)->vbox; -+#endif - - label = gtk_label_new(_("Please enter the appropriate information " - "about the chat you would like to join.\n")); -@@ -4304,9 +4315,13 @@ - { - GtkWidget *table; - GtkWidget *label; -+ GtkWidget *pri_label; - GtkWidget *hbox; - GtkWidget *vbox; -+ GtkWidget *sw; -+#if ICONS_IN_DIALOGS - GtkWidget *img; -+#endif - GaimGtkBuddyList *gtkblist; - GaimGtkAddBuddyData *data = g_new0(GaimGtkAddBuddyData, 1); - -@@ -4315,8 +4330,10 @@ - ? account - : gaim_connection_get_account(gaim_connections_get_all()->data)); - -+#if ICONS_IN_DIALOGS - img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, - GTK_ICON_SIZE_DIALOG); -+#endif - - gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); - -@@ -4335,6 +4352,7 @@ - gtk_window_set_type_hint(GTK_WINDOW(data->window), - GDK_WINDOW_TYPE_HINT_DIALOG); - -+#if ICONS_IN_DIALOGS - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); -@@ -4342,6 +4360,9 @@ - - vbox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(hbox), vbox); -+#else -+ vbox = GTK_DIALOG(data->window)->vbox; -+#endif - - label = gtk_label_new( - _("Please enter the screen name of the person you would like " -@@ -4663,10 +4684,14 @@ - GList *l; - GaimConnection *gc; - GtkWidget *label; -+ GtkWidget *pri_label; - GtkWidget *rowbox; -- GtkWidget *hbox; - GtkWidget *vbox; -+ GtkWidget *sw; -+#if ICONS_IN_DIALOGS -+ GtkWidget *hbox; - GtkWidget *img; -+#endif - - if (account != NULL) { - gc = gaim_account_get_connection(account); -@@ -4698,8 +4723,10 @@ - data->account = account; - data->default_chat_name = g_strdup(name); - -+#if ICONS_IN_DIALOGS - img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, - GTK_ICON_SIZE_DIALOG); -+#endif - - gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); - -@@ -4720,6 +4747,7 @@ - gtk_window_set_type_hint(GTK_WINDOW(data->window), - GDK_WINDOW_TYPE_HINT_DIALOG); - -+#if ICONS_IN_DIALOGS - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); -@@ -4727,6 +4755,9 @@ - - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(hbox), vbox); -+#else -+ vbox = GTK_DIALOG(data->window)->vbox; -+#endif - - label = gtk_label_new( - _("Please enter an alias, and the appropriate information " -Index: gaim/src/gtkconn.c -=================================================================== ---- gaim.orig/src/gtkconn.c 2005-08-19 23:23:45.000000000 +0200 -+++ gaim/src/gtkconn.c 2005-08-19 23:27:18.000000000 +0200 -@@ -371,7 +371,10 @@ - - /* Build the window if it isn't there yet */ - if (!disconnect_window) { -- GtkWidget *hbox, *vbox, *img; -+ GtkWidget *hbox, *vbox; -+ #if ICONS_IN_DIALOGS -+ GtkWidget *img; -+ #endif - GtkCellRenderer *rend, *rend2; - - disconnect_window = g_new0(struct disconnect_window, 1); -@@ -384,6 +387,7 @@ - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(disconnect_window->window)->vbox), GAIM_HIG_BORDER); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), GAIM_HIG_BOX_SPACE); - -+#if ICONS_IN_DIALOGS - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), hbox); - img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG); -@@ -392,6 +396,9 @@ - - vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); -+#else -+ vbox = GTK_DIALOG(disconnect_window->window)->vbox; -+#endif - - disconnect_window->label = gtk_label_new(label_text); - -Index: gaim/src/gtkconv.c -=================================================================== ---- gaim.orig/src/gtkconv.c 2005-08-19 23:23:45.000000000 +0200 -+++ gaim/src/gtkconv.c 2005-08-19 23:27:18.000000000 +0200 -@@ -847,10 +847,12 @@ - GtkWidget *label; - GtkWidget *vbox, *hbox; - GtkWidget *table; -+#if ICONS_IN_DIALOGS - GtkWidget *img; - - img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, - GTK_ICON_SIZE_DIALOG); -+#endif - - info = g_new0(InviteBuddyInfo, 1); - info->conv = conv; -@@ -880,6 +882,7 @@ - gtk_box_set_spacing(GTK_BOX(vbox), GAIM_HIG_BORDER); - gtk_container_set_border_width(GTK_CONTAINER(vbox), GAIM_HIG_BOX_SPACE); - -+#if ICONS_IN_DIALOGS - /* Setup the inner hbox and put the dialog's icon in it. */ - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(vbox), hbox); -@@ -889,6 +892,7 @@ - /* Setup the right vbox. */ - vbox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(hbox), vbox); -+#endif - - /* Put our happy label in it. */ - label = gtk_label_new(_("Please enter the name of the user you wish " -@@ -1107,8 +1111,10 @@ - GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); - GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); - GtkWidget *hbox; -+#if ICONS_IN_DIALOGS - GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, - GTK_ICON_SIZE_DIALOG); -+#endif - GtkWidget *label; - struct _search *s; - -@@ -1139,9 +1145,11 @@ - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox), - hbox); -+#if ICONS_IN_DIALOGS - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); - - gtk_misc_set_alignment(GTK_MISC(img), 0, 0); -+#endif - gtk_dialog_set_response_sensitive(GTK_DIALOG(gtkconv->dialogs.search), - GTK_RESPONSE_OK, FALSE); - -Index: gaim/src/gtkdebug.c -=================================================================== ---- gaim.orig/src/gtkdebug.c 2005-08-19 23:23:45.000000000 +0200 -+++ gaim/src/gtkdebug.c 2005-08-19 23:27:18.000000000 +0200 -@@ -149,7 +149,10 @@ - static void - find_cb(GtkWidget *w, DebugWindow *win) - { -- GtkWidget *hbox, *img, *label; -+ GtkWidget *hbox, *label; -+#if ICONS_IN_DIALOGS -+ GtkWidget *img; -+#endif - struct _find *f; - - if(win->find) -@@ -179,11 +182,13 @@ - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(win->find)->vbox), - hbox); -+#if ICONS_IN_DIALOGS - img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, - GTK_ICON_SIZE_DIALOG); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); - - gtk_misc_set_alignment(GTK_MISC(img), 0, 0); -+#endif - gtk_dialog_set_response_sensitive(GTK_DIALOG(win->find), - GTK_RESPONSE_OK, FALSE); - -Index: gaim/src/gtkdialogs.c -=================================================================== ---- gaim.orig/src/gtkdialogs.c 2005-08-19 23:23:45.000000000 +0200 -+++ gaim/src/gtkdialogs.c 2005-08-19 23:27:18.000000000 +0200 -@@ -534,7 +534,9 @@ - GtkWidget *window; - GtkWidget *hbox; - GtkWidget *label; -+#if ICONS_IN_DIALOGS - GtkWidget *img; -+#endif - gchar *norm = gaim_strreplace(ee, "rocksmyworld", ""); - - label = gtk_label_new(NULL); -@@ -582,8 +584,10 @@ - - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), hbox); -+#if ICONS_IN_DIALOGS - img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_COOL, gtk_icon_size_from_name(GAIM_ICON_SIZE_DIALOG_COOL)); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); -+#endif - - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); -Index: gaim/src/gtkgaim.h -=================================================================== ---- gaim.orig/src/gtkgaim.h 2005-08-19 23:26:29.000000000 +0200 -+++ gaim/src/gtkgaim.h 2005-08-21 02:32:29.270335816 +0200 -@@ -61,5 +61,10 @@ - #define GAIM_HIG_BORDER 12 - #define GAIM_HIG_BOX_SPACE 6 - -+/** -+ * Do we want icons in dialogs? -+ */ -+#define ICONS_IN_DIALOGS 1 -+ - #endif /* _GAIM_GTKGAIM_H_ */ - -Index: gaim/src/gtknotify.c -=================================================================== ---- gaim.orig/src/gtknotify.c 2005-08-19 23:23:45.000000000 +0200 -+++ gaim/src/gtknotify.c 2005-08-21 02:32:03.765213184 +0200 -@@ -125,7 +125,9 @@ - GtkWidget *dialog; - GtkWidget *hbox; - GtkWidget *label; -+#if ICONS_IN_DIALOGS - GtkWidget *img = NULL; -+#endif - char label_text[2048]; - const char *icon_name = NULL; - char *primary_esc, *secondary_esc; -@@ -149,11 +151,13 @@ - break; - } - -+#if ICONS_IN_DIALOGS - if (icon_name != NULL) - { - img = gtk_image_new_from_stock(icon_name, GTK_ICON_SIZE_DIALOG); - gtk_misc_set_alignment(GTK_MISC(img), 0, 0); - } -+#endif - - dialog = gtk_dialog_new_with_buttons(title ? title : GAIM_ALERT_TITLE, - NULL, 0, GTK_STOCK_CLOSE, -@@ -173,8 +177,10 @@ - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); - -+#if ICONS_IN_DIALOGS - if (img != NULL) - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); -+#endif - - primary_esc = g_markup_escape_text(primary, -1); - secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; -@@ -218,9 +224,11 @@ - GaimNotifyMailData *data; - GtkWidget *dialog; - GtkWidget *vbox; -- GtkWidget *hbox; - GtkWidget *label; -+#if ICONS_IN_DIALOGS -+ GtkWidget *hbox; - GtkWidget *img; -+#endif - char *detail_text; - char *label_text; - -@@ -248,6 +256,7 @@ - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); - -+#if ICONS_IN_DIALOGS - /* Setup the main horizontal box */ - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); -@@ -262,6 +271,9 @@ - vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); - - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); -+#else -+ vbox = GTK_DIALOG(dialog)->vbox; -+#endif - - /* Descriptive label */ - detail_text = g_strdup_printf(ngettext("%s has %d new message.", -Index: gaim/src/gtkrequest.c -=================================================================== ---- gaim.orig/src/gtkrequest.c 2005-08-19 23:23:45.000000000 +0200 -+++ gaim/src/gtkrequest.c 2005-08-21 02:32:15.943361824 +0200 -@@ -281,10 +281,12 @@ - GaimGtkRequestData *data; - GtkWidget *dialog; - GtkWidget *vbox; -- GtkWidget *hbox; - GtkWidget *label; - GtkWidget *entry; -+#if ICONS_IN_DIALOGS -+ GtkWidget *hbox; - GtkWidget *img; -+#endif - GtkWidget *toolbar; - char *label_text; - char *primary_esc, *secondary_esc; -@@ -318,6 +320,7 @@ - gtk_dialog_set_default_response(GTK_DIALOG(dialog), 0); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); - -+#if ICONS_IN_DIALOGS - /* Setup the main horizontal box */ - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); -@@ -332,6 +335,9 @@ - vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); - - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); -+#else -+ vbox = GTK_DIALOG(dialog)->vbox; -+#endif - - /* Descriptive label */ - primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL; -@@ -435,9 +441,11 @@ - GaimGtkRequestData *data; - GtkWidget *dialog; - GtkWidget *vbox, *vbox2; -- GtkWidget *hbox; - GtkWidget *label; -+#if ICONS_IN_DIALOGS -+ GtkWidget *hbox; - GtkWidget *img; -+#endif - GtkWidget *radio = NULL; - char *label_text; - char *radio_text; -@@ -475,6 +483,7 @@ - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); - -+#if ICONS_IN_DIALOGS - /* Setup the main horizontal box */ - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); -@@ -488,6 +497,9 @@ - /* Vertical box */ - vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); -+#else -+ vbox = GTK_DIALOG(dialog)->vbox; -+#endif - - /* Descriptive label */ - primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL; -@@ -536,9 +548,11 @@ - GaimGtkRequestData *data; - GtkWidget *dialog; - GtkWidget *vbox; -- GtkWidget *hbox; - GtkWidget *label; -+#if ICONS_IN_DIALOGS -+ GtkWidget *hbox; - GtkWidget *img; -+#endif - void **buttons; - char *label_text; - char *primary_esc, *secondary_esc; -@@ -584,6 +598,7 @@ - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); - -+#if ICONS_IN_DIALOGS - /* Setup the main horizontal box */ - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); -@@ -597,7 +612,10 @@ - /* Vertical box */ - vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); -- -+#else -+ vbox = GTK_DIALOG(dialog)->vbox; -+#endif -+ - /* Descriptive label */ - primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL; - secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; -@@ -620,10 +638,12 @@ - - - if (default_action == GAIM_DEFAULT_ACTION_NONE) { -+#if ICONS_IN_DIALOGS - GTK_WIDGET_SET_FLAGS(img, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS(img, GTK_CAN_FOCUS); - gtk_widget_grab_focus(img); - gtk_widget_grab_default(img); -+#endif - } else - gtk_dialog_set_default_response(GTK_DIALOG(dialog), default_action); - -@@ -1351,13 +1371,15 @@ - GtkWidget *win; - GtkWidget *vbox; - GtkWidget *vbox2; -- GtkWidget *hbox; - GtkWidget *bbox; - GtkWidget *frame; - GtkWidget *label; - GtkWidget *table; - GtkWidget *button; -+#if ICONS_IN_DIALOGS -+ GtkWidget *hbox; - GtkWidget *img; -+#endif - GtkWidget *sw; - GtkSizeGroup *sg; - GList *gl, *fl; -@@ -1392,6 +1414,7 @@ - g_signal_connect(G_OBJECT(win), "delete_event", - G_CALLBACK(destroy_multifield_cb), data); - -+#if ICONS_IN_DIALOGS - /* Setup the main horizontal box */ - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(win), hbox); -@@ -1407,6 +1430,10 @@ - /* Setup the vbox */ - vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); -+#else -+ vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); -+ gtk_container_add(GTK_CONTAINER(win), vbox); -+#endif - gtk_widget_show(vbox); - - sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); diff --git a/packages/gaim/files/02-request-field-dialogs.patch b/packages/gaim/files/02-request-field-dialogs.patch deleted file mode 100644 index 50529ca53e..0000000000 --- a/packages/gaim/files/02-request-field-dialogs.patch +++ /dev/null @@ -1,116 +0,0 @@ -Identiske underkataloger: src2/CVS og src/CVS -Identiske underkataloger: src2/.deps og src/.deps -Index: gaim/src/gtkgaim.h -=================================================================== ---- gaim.orig/src/gtkgaim.h 2005-08-19 21:46:09.550560256 +0200 -+++ gaim/src/gtkgaim.h 2005-08-19 21:47:37.276223928 +0200 -@@ -66,5 +66,11 @@ - */ - #define ICONS_IN_DIALOGS 0 - -+/** -+ * How many fields is there screen-space for vertically, before a scrollbar is needed? -+ */ -+#define VERT_ITEMS 0 -+ -+ - #endif /* _GAIM_GTKGAIM_H_ */ - -Index: gaim/src/gtkrequest.c -=================================================================== ---- gaim.orig/src/gtkrequest.c 2005-08-19 21:46:09.550560256 +0200 -+++ gaim/src/gtkrequest.c 2005-08-19 21:53:46.782050504 +0200 -@@ -1381,6 +1381,8 @@ - GtkWidget *img; - #endif - GtkWidget *sw; -+ GtkWidget *pri_label; -+ GtkWidget *sec_label; - GtkSizeGroup *sg; - GList *gl, *fl; - GaimRequestFieldGroup *group; -@@ -1450,6 +1452,7 @@ - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); - gtk_widget_show(label); -+ pri_label = label; - g_free(label_text); - } - -@@ -1457,7 +1460,7 @@ - gl = gl->next) - total_fields += g_list_length(gaim_request_field_group_get_fields(gl->data)); - -- if(total_fields > 9) { -+ if(total_fields > VERT_ITEMS) { - sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); -@@ -1484,6 +1487,7 @@ - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0); - gtk_widget_show(label); -+ sec_label = label; - } - - for (gl = gaim_request_fields_get_groups(fields); -@@ -1718,6 +1722,59 @@ - - gtk_widget_show(win); - -+ //Wait for the window to have recieved its "configure_event", -+ //which means it has been resized by the WM -+ while (gtk_events_pending ()) gtk_main_iteration (); -+ -+ //Get allocated size, and adjust widgets accordingly -+ int w, h, field_labels_w; -+ GtkRequisition sg_labels_req; -+ gtk_window_get_size(GTK_WINDOW(win), &w, &h); -+ field_labels_w = label->allocation.width + GAIM_HIG_BORDER*2; //The width of the largest field-label -+ -+ printf("%d / %d\n", field_labels_w, w); -+ -+ w = w - GAIM_HIG_BORDER * 2; -+ if (primary) gtk_widget_set_size_request(GTK_WIDGET(pri_label), w, -1); -+ if (secondary) gtk_widget_set_size_request(GTK_WIDGET(sec_label), w, -1); -+ -+ //Determine what to do - add a scrollbar or resize the input fields? -+ if ((float)field_labels_w / w > 0.5) //if the labels fill more than half the screen add a horizontal scrollbar -+ { -+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), -+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); -+ } -+ else //resize the input fields -+ { -+ for (gl = gaim_request_fields_get_groups(fields); -+ gl != NULL; -+ gl = gl->next) -+ { -+ GList *field_list; -+ size_t field_count = 0; -+ size_t cols = 1; -+ size_t rows; -+ size_t col_num; -+ size_t row_num = 0; -+ -+ group = gl->data; -+ field_list = gaim_request_field_group_get_fields(group); -+ -+ for (row_num = 0, fl = field_list; -+ row_num < rows && fl != NULL; -+ row_num++) -+ { -+ for (col_num = 0; -+ col_num < cols && fl != NULL; -+ col_num++, fl = fl->next) -+ { -+ field = fl->data; -+ gtk_widget_set_size_request(GTK_WIDGET(field->ui_data), w-field_labels_w, -1); -+ } -+ } -+ } -+ } -+ - return data; - } - diff --git a/packages/gaim/files/03-blist-dialogs.patch b/packages/gaim/files/03-blist-dialogs.patch deleted file mode 100644 index 62d4710d46..0000000000 --- a/packages/gaim/files/03-blist-dialogs.patch +++ /dev/null @@ -1,240 +0,0 @@ -Identiske underkataloger: src2/CVS og src/CVS -Identiske underkataloger: src2/.deps og src/.deps -Index: gaim/src/gtkblist.c -=================================================================== ---- gaim.orig/src/gtkblist.c 2005-08-19 21:57:30.272074856 +0200 -+++ gaim/src/gtkblist.c 2005-08-19 21:57:42.030287336 +0200 -@@ -825,6 +825,15 @@ - joinchat_set_sensitive_if_input_cb(NULL, data); - - gtk_widget_show_all(data->entries_box); -+ -+ GList* children; -+ children = GTK_BOX(data->entries_box)->children; -+ while (children) -+ { -+ //Let the prilabel handle the maxsize -+ gtk_widget_set_size_request(((GtkBoxChild*)(children->data))->widget, 0, -1); -+ children = children->next; -+ } - } - - static void -@@ -916,12 +925,26 @@ - #else - vbox = GTK_DIALOG(data->window)->vbox; - #endif -+ -+ //Make a scrollview to accomodate it all -+ sw = gtk_scrolled_window_new(NULL, NULL); -+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), -+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); -+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), -+ GTK_SHADOW_NONE); -+ gtk_widget_set_size_request(sw, -1, 200); -+ gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); -+ gtk_widget_show(sw); -+ -+ vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); -+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox); - - label = gtk_label_new(_("Please enter the appropriate information " - "about the chat you would like to join.\n")); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); -+ pri_label = label; - - rowbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_box_pack_start(GTK_BOX(vbox), rowbox, TRUE, TRUE, 0); -@@ -955,6 +978,22 @@ - g_object_unref(data->sg); - - gtk_widget_show_all(data->window); -+ -+ //Wait for the window to have recieved its "configure_event", -+ //which means it has been resized by the WM -+ while (gtk_events_pending ()) gtk_main_iteration (); -+ -+ //Get allocated size, and adjust widgets accordingly -+ int w, h; -+ gtk_window_get_size(GTK_WINDOW(data->window), &w, &h); -+ -+ // Window_border Scrollbar (FFH) -+ w = w - GAIM_HIG_BORDER * 2 - GAIM_HIG_BORDER * 4; -+ gtk_widget_set_size_request(GTK_WIDGET(pri_label), w, -1); -+ -+ //Let the prilabel handle the maxsize -+ gtk_widget_set_size_request(GTK_WIDGET(data->account_menu), 0, -1); -+ gtk_widget_set_size_request(GTK_WIDGET(data->entries_box), 0, -1); - } - - static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) { -@@ -4364,6 +4403,19 @@ - vbox = GTK_DIALOG(data->window)->vbox; - #endif - -+ //Make a scrollview to accomodate it all -+ sw = gtk_scrolled_window_new(NULL, NULL); -+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), -+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); -+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), -+ GTK_SHADOW_NONE); -+ gtk_widget_set_size_request(sw, -1, 200); -+ gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); -+ gtk_widget_show(sw); -+ -+ vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); -+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox); -+ - label = gtk_label_new( - _("Please enter the screen name of the person you would like " - "to add to your buddy list. You may optionally enter an alias, " -@@ -4374,6 +4426,7 @@ - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); -+ pri_label = label; - - hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); - gtk_container_add(GTK_CONTAINER(vbox), hbox); -@@ -4446,6 +4499,25 @@ - - if (group != NULL) - gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(data->combo)->entry), group); -+ -+ //Wait for the window to have recieved its "configure_event", -+ //which means it has been resized by the WM -+ while (gtk_events_pending ()) gtk_main_iteration (); -+ -+ //Get allocated size, and adjust widgets accordingly -+ int w, h, field_labels_w; -+ gtk_window_get_size(GTK_WINDOW(data->window), &w, &h); -+ field_labels_w = label->allocation.width + GAIM_HIG_BORDER*2; //The width of the largest field-label -+ -+ // Window_border Scrollbar (FFH) -+ w = w - GAIM_HIG_BORDER * 2 - GAIM_HIG_BORDER * 4; -+ gtk_widget_set_size_request(GTK_WIDGET(pri_label), w, -1); -+ //Set the size of the input fields -+ gtk_widget_set_size_request(GTK_WIDGET(data->entry), w-field_labels_w, -1); -+ gtk_widget_set_size_request(GTK_WIDGET(data->entry_for_alias), w-field_labels_w, -1); -+ gtk_widget_set_size_request(GTK_WIDGET(data->combo), w-field_labels_w, -1); -+ gtk_widget_set_size_request(GTK_WIDGET(data->account_box), w-field_labels_w, -1); -+ - } - - static void -@@ -4572,6 +4644,9 @@ - GHashTable *defaults = NULL; - struct proto_chat_entry *pce; - gboolean focus = TRUE; -+ GtkWidget *label; -+ GtkWidget *rowbox; -+ GtkWidget *input; - - g_return_if_fail(data->account != NULL); - -@@ -4596,10 +4671,6 @@ - - for (tmp = list; tmp; tmp = tmp->next) - { -- GtkWidget *label; -- GtkWidget *rowbox; -- GtkWidget *input; -- - pce = tmp->data; - - rowbox = gtk_hbox_new(FALSE, 5); -@@ -4657,6 +4728,15 @@ - addchat_set_sensitive_if_input_cb(NULL, data); - - gtk_widget_show_all(data->entries_box); -+ -+ GList* children; -+ children = GTK_BOX(data->entries_box)->children; -+ while (children) -+ { -+ //Let the prilabel handle the maxsize -+ gtk_widget_set_size_request(((GtkBoxChild*)(children->data))->widget, 0, -1); -+ children = children->next; -+ } - } - - static void -@@ -4759,6 +4839,19 @@ - vbox = GTK_DIALOG(data->window)->vbox; - #endif - -+ //Make a scrollview to accomodate it all -+ sw = gtk_scrolled_window_new(NULL, NULL); -+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), -+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); -+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), -+ GTK_SHADOW_NONE); -+ gtk_widget_set_size_request(sw, -1, 200); -+ gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); -+ gtk_widget_show(sw); -+ -+ vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); -+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox); -+ - label = gtk_label_new( - _("Please enter an alias, and the appropriate information " - "about the chat you would like to add to your buddy list.\n")); -@@ -4766,7 +4859,8 @@ - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); -- -+ pri_label = label; -+ - rowbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(vbox), rowbox, FALSE, FALSE, 0); - -@@ -4825,6 +4919,24 @@ - G_CALLBACK(add_chat_resp_cb), data); - - gtk_widget_show_all(data->window); -+ -+ //Wait for the window to have recieved its "configure_event", -+ //which means it has been resized by the WM -+ while (gtk_events_pending ()) gtk_main_iteration (); -+ -+ //Get allocated size, and adjust the label accordingly -+ int w, h; -+ gtk_window_get_size(GTK_WINDOW(data->window), &w, &h); -+ -+ // Window_border Scrollbar (FFH) -+ w = w - GAIM_HIG_BORDER * 2 - GAIM_HIG_BORDER * 4; -+ gtk_widget_set_size_request(GTK_WIDGET(pri_label), w, -1); -+ //Let the prilabel handle the maxsize -+ gtk_widget_set_size_request(GTK_WIDGET(data->account_menu), 0, -1); -+ gtk_widget_set_size_request(GTK_WIDGET(data->entries_box), 0, -1); -+ gtk_widget_set_size_request(GTK_WIDGET(data->alias_entry), 0, -1); -+ gtk_widget_set_size_request(GTK_WIDGET(data->group_combo), 0, -1); -+ - } - - static void -Index: gaim/src/gtkrequest.c -=================================================================== ---- gaim.orig/src/gtkrequest.c 2005-08-19 21:57:30.273074704 +0200 -+++ gaim/src/gtkrequest.c 2005-08-19 21:58:05.468724152 +0200 -@@ -650,6 +650,17 @@ - /* Show everything. */ - gtk_widget_show_all(dialog); - -+ //Wait for the window to have recieved its "configure_event", -+ //which means it has been resized by the WM -+ while (gtk_events_pending ()) gtk_main_iteration (); -+ -+ //Get allocated size, and adjust widgets accordingly -+ int w, h; -+ gtk_window_get_size(GTK_WINDOW(dialog), &w, &h); -+ -+ w = w - GAIM_HIG_BORDER * 2; -+ gtk_widget_set_size_request(GTK_WIDGET(label), w, -1); -+ - return data; - } - diff --git a/packages/gaim/files/04-saved-status-dialogs.patch b/packages/gaim/files/04-saved-status-dialogs.patch deleted file mode 100644 index 2cdf70c5c1..0000000000 --- a/packages/gaim/files/04-saved-status-dialogs.patch +++ /dev/null @@ -1,40 +0,0 @@ -Identiske underkataloger: src2/CVS og src/CVS -Identiske underkataloger: src2/.deps og src/.deps -Index: gaim/src/gtksavedstatuses.c -=================================================================== ---- gaim.orig/src/gtksavedstatuses.c 2005-08-13 07:54:33.000000000 +0200 -+++ gaim/src/gtksavedstatuses.c 2005-08-19 21:20:41.806812608 +0200 -@@ -417,6 +417,7 @@ - bbox = gtk_hbutton_box_new(); - gtk_box_set_spacing(GTK_BOX(bbox), GAIM_HIG_BOX_SPACE); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); -+ gtk_button_box_set_child_size(GTK_BUTTON_BOX(bbox), 20, -1); //DEPRECATED FFH - gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); - gtk_widget_show(bbox); - -@@ -449,12 +450,13 @@ - G_CALLBACK(status_window_delete_cb), dialog); - - /* Close button */ -- button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); -+ //We can do without the close button to save screen estate -+ /*button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - g_signal_connect(G_OBJECT(button), "clicked", -- G_CALLBACK(status_window_close_cb), dialog); -+ G_CALLBACK(status_window_close_cb), dialog);*/ - - gtk_widget_show(win); - } -@@ -790,7 +792,8 @@ - disclosure = gaim_disclosure_new(_("Use a different status for some accounts"), - _("Use a different status for some accounts")); - gtk_box_pack_start(GTK_BOX(vbox), disclosure, FALSE, FALSE, 0); -- gtk_widget_show(disclosure); -+ //For now, do without the custom messages - not implemented yet -+ //gtk_widget_show(disclosure); - - /* Setup the box that the disclosure will cover */ - dbox = gtk_vbox_new(FALSE, GAIM_HIG_CAT_SPACE); diff --git a/packages/gaim/files/05-statusbox-icon-size.patch b/packages/gaim/files/05-statusbox-icon-size.patch deleted file mode 100644 index e18f3b2bcb..0000000000 --- a/packages/gaim/files/05-statusbox-icon-size.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gaim.ori/src/gtkstatusbox.c 2005-09-04 20:42:29.000000000 +0200 -+++ gaim/src/gtkstatusbox.c 2005-09-05 08:44:13.000000000 +0200 -@@ -173,7 +173,7 @@ - - text_rend = gtk_cell_renderer_text_new(); - icon_rend = gtk_cell_renderer_pixbuf_new(); -- icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); -+ icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR; - - status_box->imhtml_visible = FALSE; - status_box->error_pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_OFFLINE, diff --git a/packages/gaim/files/06-account-dialogs.patch b/packages/gaim/files/06-account-dialogs.patch deleted file mode 100644 index 9d2cb9acb0..0000000000 --- a/packages/gaim/files/06-account-dialogs.patch +++ /dev/null @@ -1,219 +0,0 @@ -Index: gaim/src/gtkaccount.c -=================================================================== ---- gaim.orig/src/gtkaccount.c 2005-08-25 17:16:44.000000000 +0200 -+++ gaim/src/gtkaccount.c 2005-08-29 22:34:25.511003600 +0200 -@@ -857,7 +857,6 @@ - { - GtkWidget *frame; - GtkWidget *vbox; -- GtkWidget *vbox2; - GtkWidget *hbox; - GtkWidget *hbox2; - GtkWidget *button; -@@ -901,12 +900,8 @@ - gaim_set_accessible_label (dialog->icon_entry, label); - dialog->icon_path = NULL; - -- vbox2 = gtk_vbox_new(FALSE, 0); -- gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0); -- gtk_widget_show(vbox2); -- - hbox2 = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); -- gtk_box_pack_start(GTK_BOX(vbox2), hbox2, FALSE, FALSE, GAIM_HIG_BORDER); -+ gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, GAIM_HIG_BORDER); - gtk_widget_show(hbox2); - - button = gtk_button_new_from_stock(GTK_STOCK_OPEN); -@@ -1275,7 +1270,18 @@ - gtk_option_menu_get_menu(GTK_OPTION_MENU(dialog->proxy_dropdown)); - #endif - -- add_pref_box(dialog, vbox, _("Proxy _type:"), dialog->proxy_dropdown); -+ GtkWidget *label; -+ label = gtk_label_new_with_mnemonic(_("Proxy _type:")); -+ gtk_size_group_add_widget(dialog->sg, label); -+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); -+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); -+ gtk_widget_show(label); -+ -+ gtk_box_pack_start(GTK_BOX(vbox), dialog->proxy_dropdown, TRUE, TRUE, GAIM_HIG_BORDER); -+ gtk_widget_show(dialog->proxy_dropdown); -+ gaim_set_accessible_label (dialog->proxy_dropdown, label); -+ -+ //add_pref_box(dialog, vbox, _("Proxy _type:"), dialog->proxy_dropdown); - - /* Setup the second vbox, which may be hidden at times. */ - dialog->proxy_vbox = vbox2 = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); -@@ -1643,6 +1649,7 @@ - AccountPrefsDialog *dialog; - GtkWidget *win; - GtkWidget *main_vbox; -+ GtkWidget *sw; - GtkWidget *vbox; - GtkWidget *bbox; - GtkWidget *dbox; -@@ -1709,10 +1716,19 @@ - gtk_box_pack_start(GTK_BOX(main_vbox), notebook, FALSE, FALSE, 0); - - /* Setup the inner vbox */ -+ //With a scrollbox -+ sw = gtk_scrolled_window_new(NULL, NULL); -+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), -+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); -+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), -+ GTK_SHADOW_NONE); -+ gtk_widget_set_size_request(sw, -1, -1); -+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), sw, -+ gtk_label_new_with_mnemonic("_Basic")); -+ gtk_widget_show(sw); - dialog->top_vbox = vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_set_border_width(GTK_CONTAINER(vbox), GAIM_HIG_BORDER); -- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, -- gtk_label_new_with_mnemonic("_Basic")); -+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox); - gtk_widget_show(vbox); - - /* Setup the top frames. */ -@@ -1720,10 +1736,20 @@ - add_user_options(dialog, vbox); - - /* Setup the page with 'Advanced'. */ -+ //With a scrollbox -+ sw = gtk_scrolled_window_new(NULL, NULL); -+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), -+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); -+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), -+ GTK_SHADOW_NONE); -+ gtk_widget_set_size_request(sw, -1, -1); -+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), sw, -+ gtk_label_new_with_mnemonic("_Advanced")); -+ gtk_widget_show(sw); - dialog->bottom_vbox = dbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); - gtk_container_set_border_width(GTK_CONTAINER(dbox), GAIM_HIG_BORDER); -- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dbox, -- gtk_label_new_with_mnemonic("_Advanced")); -+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), dbox); -+ gtk_widget_show(dbox); - - /** Setup the bottom frames. */ - add_protocol_options(dialog, dbox); -@@ -1731,46 +1757,50 @@ - add_proxy_options(dialog, dbox); - - /* Setup the button box */ -- bbox = gtk_hbutton_box_new(); -+ //bbox = gtk_hbutton_box_new(); -+ //Replaced with a hbox, otherwise the Register-button doesn't fit (same size required) -+ bbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); - gtk_box_set_spacing(GTK_BOX(bbox), GAIM_HIG_BOX_SPACE); -- gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); - gtk_box_pack_end(GTK_BOX(main_vbox), bbox, FALSE, TRUE, 0); - gtk_widget_show(bbox); - -- /* Register button */ -- button = gtk_button_new_with_label(_("Register")); -- gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); -- gtk_widget_show(button); -- -- g_signal_connect(G_OBJECT(button), "clicked", -- G_CALLBACK(register_account_prefs_cb), dialog); -- -- dialog->register_button = button; -- -+ /* Save button */ -+ button = gtk_button_new_from_stock(GTK_STOCK_SAVE); -+ gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); -+ - if (dialog->account == NULL) - gtk_widget_set_sensitive(button, FALSE); - -- if (!dialog->prpl_info || !dialog->prpl_info->register_user) -- gtk_widget_hide(button); -+ gtk_widget_show(button); -+ -+ dialog->ok_button = button; -+ -+ g_signal_connect(G_OBJECT(button), "clicked", -+ G_CALLBACK(ok_account_prefs_cb), dialog); - - /* Cancel button */ - button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); -- gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); -+ gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - g_signal_connect(G_OBJECT(button), "clicked", - G_CALLBACK(cancel_account_prefs_cb), dialog); - -- /* Save button */ -- button = gtk_button_new_from_stock(GTK_STOCK_SAVE); -- gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); -+ /* Register button */ -+ button = gtk_button_new_with_label(_("Register")); -+ gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); -+ gtk_widget_show(button); -+ -+ g_signal_connect(G_OBJECT(button), "clicked", -+ G_CALLBACK(register_account_prefs_cb), dialog); -+ -+ dialog->register_button = button; - - if (dialog->account == NULL) - gtk_widget_set_sensitive(button, FALSE); - -- gtk_widget_show(button); -- -- dialog->ok_button = button; -+ if (!dialog->prpl_info || !dialog->prpl_info->register_user) -+ gtk_widget_hide(button); - - /* Set up DND */ - gtk_drag_dest_set(dialog->window, -@@ -1783,11 +1813,20 @@ - g_signal_connect(G_OBJECT(dialog->window), "drag_data_received", - G_CALLBACK(account_dnd_recv), dialog); - -- g_signal_connect(G_OBJECT(button), "clicked", -- G_CALLBACK(ok_account_prefs_cb), dialog); -- - /* Show the window. */ - gtk_widget_show(win); -+ -+ //Wait for the window to have recieved its "configure_event", -+ //which means it has been resized by the WM -+ while (gtk_events_pending ()) gtk_main_iteration (); -+ -+ //Get allocated size, and adjust widgets accordingly -+ int w, h; -+ gtk_window_get_size(GTK_WINDOW(win), &w, &h); -+ -+ w = w - GAIM_HIG_BORDER * 2; -+ gtk_widget_set_size_request(GTK_WIDGET(dialog->protocol_menu), w, -1); -+ - } - - /************************************************************************** -@@ -2389,6 +2428,7 @@ - bbox = gtk_hbutton_box_new(); - gtk_box_set_spacing(GTK_BOX(bbox), GAIM_HIG_BOX_SPACE); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); -+ gtk_button_box_set_child_size(GTK_BUTTON_BOX(bbox), 20, -1); //DEPRECATED FFH - gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); - gtk_widget_show(bbox); - -@@ -2421,12 +2461,13 @@ - G_CALLBACK(ask_delete_account_cb), dialog); - - /* Close button */ -- button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); -+ //We can do without the close button to save screen estate -+ /*button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - g_signal_connect(G_OBJECT(button), "clicked", -- G_CALLBACK(close_accounts_cb), dialog); -+ G_CALLBACK(close_accounts_cb), dialog);*/ - - /* Setup some gaim signal handlers. */ - gaim_signal_connect(gaim_connections_get_handle(), "signed-on", diff --git a/packages/gaim/files/07-roomlist-dialog.patch b/packages/gaim/files/07-roomlist-dialog.patch deleted file mode 100644 index 2806c78fd4..0000000000 --- a/packages/gaim/files/07-roomlist-dialog.patch +++ /dev/null @@ -1,67 +0,0 @@ -Index: gaim/src/gtkroomlist.c -=================================================================== ---- gaim.orig/src/gtkroomlist.c 2005-08-13 01:53:28.000000000 +0200 -+++ gaim/src/gtkroomlist.c 2005-08-19 21:37:26.225117816 +0200 -@@ -129,7 +129,9 @@ - gtk_container_add(GTK_CONTAINER(dialog->sw), rl->tree); - - gtk_widget_set_sensitive(dialog->stop_button, TRUE); -+ gtk_widget_show(dialog->stop_button); - gtk_widget_set_sensitive(dialog->list_button, FALSE); -+ gtk_widget_hide(dialog->list_button); - gtk_widget_set_sensitive(dialog->join_button, FALSE); - } - -@@ -141,7 +143,9 @@ - gtk_widget_set_sensitive(dialog->account_widget, TRUE); - - gtk_widget_set_sensitive(dialog->stop_button, FALSE); -+ gtk_widget_hide(dialog->stop_button); - gtk_widget_set_sensitive(dialog->list_button, TRUE); -+ gtk_widget_show(dialog->list_button); - gtk_widget_set_sensitive(dialog->join_button, FALSE); - } - -@@ -396,7 +400,7 @@ - g_signal_connect(G_OBJECT(dialog->stop_button), "clicked", - G_CALLBACK(stop_button_cb), dialog); - gtk_widget_set_sensitive(dialog->stop_button, FALSE); -- gtk_widget_show(dialog->stop_button); -+ //gtk_widget_show(dialog->stop_button); - - /* list button */ - dialog->list_button = gtk_button_new_with_mnemonic(_("_Get List")); -@@ -415,11 +419,12 @@ - gtk_widget_show(dialog->join_button); - - /* close button */ -- dialog->close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); -+ //We can do without the close button to save screen estate -+ /*dialog->close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); - gtk_box_pack_start(GTK_BOX(bbox), dialog->close_button, FALSE, FALSE, 0); - g_signal_connect(G_OBJECT(dialog->close_button), "clicked", - G_CALLBACK(close_button_cb), dialog); -- gtk_widget_show(dialog->close_button); -+ gtk_widget_show(dialog->close_button);*/ - - /* show the dialog window and return the dialog */ - gtk_widget_show(dialog->window); -@@ -683,14 +688,18 @@ - if (rl->dialog->account_widget) - gtk_widget_set_sensitive(rl->dialog->account_widget, FALSE); - gtk_widget_set_sensitive(rl->dialog->stop_button, TRUE); -+ gtk_widget_show(rl->dialog->stop_button); - gtk_widget_set_sensitive(rl->dialog->list_button, FALSE); -+ gtk_widget_hide(rl->dialog->list_button); - } else { - rl->dialog->pg_needs_pulse = FALSE; - gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(rl->dialog->progress), 0.0); - if (rl->dialog->account_widget) - gtk_widget_set_sensitive(rl->dialog->account_widget, TRUE); - gtk_widget_set_sensitive(rl->dialog->stop_button, FALSE); -+ gtk_widget_hide(rl->dialog->stop_button); - gtk_widget_set_sensitive(rl->dialog->list_button, TRUE); -+ gtk_widget_show(rl->dialog->list_button); - } - } - diff --git a/packages/gaim/files/08-prefs-dialog.patch b/packages/gaim/files/08-prefs-dialog.patch deleted file mode 100644 index a8fcb89311..0000000000 --- a/packages/gaim/files/08-prefs-dialog.patch +++ /dev/null @@ -1,64 +0,0 @@ ---- gaim.ori/src/gtkprefs.c 2005-09-05 08:28:17.000000000 +0200 -+++ gaim/src/gtkprefs.c 2005-09-05 09:06:27.000000000 +0200 -@@ -2108,12 +2108,18 @@ - if (icon) - g_object_unref(icon); - --#if GTK_CHECK_VERSION(2,4,0) -- return gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text)); --#else -- gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text)); -- return gtk_notebook_page_num(GTK_NOTEBOOK(prefsnotebook), page); --#endif -+ //Add a scrolled window around the page contents -+ GtkWidget *sw; -+ sw = gtk_scrolled_window_new(NULL, NULL); -+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), -+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); -+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), -+ GTK_SHADOW_NONE); -+ //gtk_widget_set_size_request(sw, -1, 200); -+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), page); -+ -+ -+ return gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), sw, gtk_label_new(text)); - } - - static void prefs_notebook_init() { -@@ -2146,9 +2152,9 @@ - void gaim_gtk_prefs_show(void) - { - GtkWidget *vbox; -- GtkWidget *bbox; -+ //GtkWidget *bbox; - GtkWidget *notebook; -- GtkWidget *button; -+ //GtkWidget *button; - - if (prefs) { - gtk_window_present(GTK_WINDOW(prefs)); -@@ -2176,11 +2182,13 @@ - - /* The notebook */ - prefsnotebook = notebook = gtk_notebook_new (); -- gtk_box_pack_start (GTK_BOX (vbox), notebook, FALSE, FALSE, 0); -+ gtk_notebook_set_scrollable(GTK_NOTEBOOK(prefsnotebook), TRUE); -+ gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0); - - - /* The buttons to press! */ -- bbox = gtk_hbutton_box_new(); -+ //To save screen estate we will do without a close button -+ /*bbox = gtk_hbutton_box_new(); - gtk_box_set_spacing(GTK_BOX(bbox), GAIM_HIG_BOX_SPACE); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); - gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); -@@ -2190,7 +2198,7 @@ - g_signal_connect_swapped(G_OBJECT(button), "clicked", - G_CALLBACK(gtk_widget_destroy), prefs); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); -- gtk_widget_show(button); -+ gtk_widget_show(button);*/ - - prefs_notebook_init(); - diff --git a/packages/gaim/files/09-filetransfer-dialog.patch b/packages/gaim/files/09-filetransfer-dialog.patch deleted file mode 100644 index c4fa3a0a6d..0000000000 --- a/packages/gaim/files/09-filetransfer-dialog.patch +++ /dev/null @@ -1,52 +0,0 @@ -Index: gaim/src/gtkft.c -=================================================================== ---- gaim.orig/src/gtkft.c 2005-08-21 01:59:50.000000000 +0200 -+++ gaim/src/gtkft.c 2005-08-29 23:05:02.000000000 +0200 -@@ -772,24 +772,26 @@ - G_CALLBACK(open_button_cb), dialog); - - /* Pause button */ -- button = gtk_button_new_with_mnemonic(_("_Pause")); -+ /* Pause button has no function*/ -+ /*button = gtk_button_new_with_mnemonic(_("_Pause")); - gtk_widget_set_sensitive(button, FALSE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - dialog->pause_button = button; - - g_signal_connect(G_OBJECT(button), "clicked", -- G_CALLBACK(pause_button_cb), dialog); -+ G_CALLBACK(pause_button_cb), dialog);*/ - - /* Resume button */ -- button = gtk_button_new_with_mnemonic(_("_Resume")); -+ /* Resume button has no function */ -+ /*button = gtk_button_new_with_mnemonic(_("_Resume")); - gtk_widget_set_sensitive(button, FALSE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - dialog->resume_button = button; - - g_signal_connect(G_OBJECT(button), "clicked", -- G_CALLBACK(resume_button_cb), dialog); -+ G_CALLBACK(resume_button_cb), dialog);*/ - - /* Remove button */ - button = gtk_button_new_from_stock(GTK_STOCK_REMOVE); -@@ -811,13 +813,14 @@ - G_CALLBACK(stop_button_cb), dialog); - - /* Close button */ -- button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); -+ /* Do without a close button to save screen estate */ -+ /*button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - dialog->close_button = button; - - g_signal_connect(G_OBJECT(button), "clicked", -- G_CALLBACK(close_button_cb), dialog); -+ G_CALLBACK(close_button_cb), dialog);*/ - - return dialog; - } diff --git a/packages/gaim/files/10-pda-default-settings.patch b/packages/gaim/files/10-pda-default-settings.patch deleted file mode 100644 index 953dc11612..0000000000 --- a/packages/gaim/files/10-pda-default-settings.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: gaim/src/gtkconv.c -=================================================================== ---- gaim.orig/src/gtkconv.c 2005-08-25 17:16:50.000000000 +0200 -+++ gaim/src/gtkconv.c 2005-08-29 23:56:48.142463528 +0200 -@@ -6126,7 +6126,7 @@ - gaim_prefs_add_bool("/gaim/gtk/conversations/spellcheck", TRUE); - gaim_prefs_add_bool("/gaim/gtk/conversations/show_incoming_formatting", TRUE); - -- gaim_prefs_add_bool("/gaim/gtk/conversations/show_formatting_toolbar", TRUE); -+ gaim_prefs_add_bool("/gaim/gtk/conversations/show_formatting_toolbar", FALSE); - gaim_prefs_add_bool("/gaim/gtk/conversations/passthrough_unknown_commands", FALSE); - - gaim_prefs_add_string("/gaim/gtk/conversations/placement", "last"); diff --git a/packages/gaim/files/define-pda-mode.patch b/packages/gaim/files/define-pda-mode.patch deleted file mode 100644 index f1a368bc73..0000000000 --- a/packages/gaim/files/define-pda-mode.patch +++ /dev/null @@ -1,36 +0,0 @@ -Index: gaim/src/gtkgaim.h -=================================================================== ---- gaim.orig/src/gtkgaim.h 2005-08-25 17:29:42.000000000 +0200 -+++ gaim/src/gtkgaim.h 2005-08-25 19:00:37.335318168 +0200 -@@ -57,14 +57,14 @@ - * Spacings between components, as defined by the - * Gnome Human Interface Guidelines. - */ --#define GAIM_HIG_CAT_SPACE 18 --#define GAIM_HIG_BORDER 12 --#define GAIM_HIG_BOX_SPACE 6 -+#define GAIM_HIG_CAT_SPACE 9 -+#define GAIM_HIG_BORDER 6 -+#define GAIM_HIG_BOX_SPACE 3 - - /** - * Do we want icons in dialogs? - */ --#define ICONS_IN_DIALOGS 1 -+#define ICONS_IN_DIALOGS 0 - - /** - * How many fields is there screen-space for vertically, before a scrollbar is needed? -Index: gaim/src/gtkutils.c -=================================================================== ---- gaim.orig/src/gtkutils.c 2005-08-25 19:01:19.630888264 +0200 -+++ gaim/src/gtkutils.c 2005-08-25 19:02:05.067980776 +0200 -@@ -398,7 +398,7 @@ - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show(hbox); - -- label = gtk_label_new(" "); -+ label = gtk_label_new(" "); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_widget_show(label); - diff --git a/packages/gaim/files/desktop-name-2.0.0.patch b/packages/gaim/files/desktop-name-2.0.0.patch deleted file mode 100644 index c921619721..0000000000 --- a/packages/gaim/files/desktop-name-2.0.0.patch +++ /dev/null @@ -1,27 +0,0 @@ -Index: gaim/gaim.desktop -=================================================================== ---- gaim.orig/gaim.desktop 2005-06-06 03:40:46.000000000 +0200 -+++ gaim/gaim.desktop 2005-08-21 02:00:18.525853592 +0200 -@@ -33,21 +33,7 @@ - GenericName[sq]=LajmĂ«sjellĂ«s Internet - GenericName[sv]=Meddelandeklient - GenericName[zh_CN]=äş’č”网通讯程序 --Name=Gaim Internet Messenger --Name[da]=Gaim - internet beskeder --Name[de]=Gaim Internet Messenger --Name[fr]=Gaim Messagerie InstantanĂ©e --Name[hu]=Gaim IM --Name[it]=Gaim Internet Messenger --Name[ko]=게임 메신저 --Name[nb]=Gaim lynmeldingsklient --Name[nl]=Gaim - Expresberichten --Name[pl]=Komunikator Internetowy Gaim --Name[pt]=Mensageiro Internet Gaim --Name[sl]=Gaim - spletni sel --Name[sq]=LajmĂ«sjellĂ«si Internet Gaim --Name[sv]=Gaim Internet Messenger --Name[zh_CN]=Gaim äş’č”网通讯程序 -+Name=Gaim - Exec=gaim - Icon=gaim.png - StartupNotify=true diff --git a/packages/gaim/files/desktop-name.patch b/packages/gaim/files/desktop-name.patch deleted file mode 100644 index 6095a77e47..0000000000 --- a/packages/gaim/files/desktop-name.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- gaim-1.0.3/gaim.desktop.old 2005-01-01 16:48:58.000000000 +0000 -+++ gaim-1.0.3/gaim.desktop 2005-01-01 16:49:15.000000000 +0000 -@@ -1,6 +1,6 @@ - [Desktop Entry] - Encoding=UTF-8 --Name=Gaim Internet Messenger -+Name=Gaim - Name[de]=Gaim Internet Messenger - Name[da]=Gaim - internet beskeder - Name[fr]=Gaim Messagerie InstantanĂ©e diff --git a/packages/gaim/files/desktop-name_1.4.0.patch b/packages/gaim/files/desktop-name_1.4.0.patch deleted file mode 100644 index 3cfaa5771e..0000000000 --- a/packages/gaim/files/desktop-name_1.4.0.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gaim-1.4.0/gaim.desktop.old 2005-07-15 00:58:50.000000000 +0200 -+++ gaim-1.4.0/gaim.desktop 2005-07-15 00:59:35.000000000 +0200 -@@ -7,7 +7,7 @@ - Terminal=false - Type=Application - --Name=Gaim Internet Messenger -+Name=Gaim - Name[ca]=Missatger d'Internet Gaim - Name[cs]=Gaim Internet Messenger - Name[da]=Gaim - internet beskeder diff --git a/packages/gaim/files/desktop-name_1.5.0.patch b/packages/gaim/files/desktop-name_1.5.0.patch deleted file mode 100644 index 3cfaa5771e..0000000000 --- a/packages/gaim/files/desktop-name_1.5.0.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gaim-1.4.0/gaim.desktop.old 2005-07-15 00:58:50.000000000 +0200 -+++ gaim-1.4.0/gaim.desktop 2005-07-15 00:59:35.000000000 +0200 -@@ -7,7 +7,7 @@ - Terminal=false - Type=Application - --Name=Gaim Internet Messenger -+Name=Gaim - Name[ca]=Missatger d'Internet Gaim - Name[cs]=Gaim Internet Messenger - Name[da]=Gaim - internet beskeder diff --git a/packages/gaim/files/docklet-icon-size.patch b/packages/gaim/files/docklet-icon-size.patch deleted file mode 100644 index 6b8047a30c..0000000000 --- a/packages/gaim/files/docklet-icon-size.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: gaim/plugins/docklet/docklet-x11.c -=================================================================== ---- gaim.orig/plugins/docklet/docklet-x11.c 2005-04-02 17:23:28.000000000 +0200 -+++ gaim/plugins/docklet/docklet-x11.c 2005-08-21 02:06:51.869056336 +0200 -@@ -112,7 +112,7 @@ - break; - } - -- gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); -+ gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, GTK_ICON_SIZE_SMALL_TOOLBAR); - - #if 0 - GdkPixbuf *p; diff --git a/packages/gaim/files/gaim-OE-branding.patch b/packages/gaim/files/gaim-OE-branding.patch deleted file mode 100644 index d090899cac..0000000000 --- a/packages/gaim/files/gaim-OE-branding.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- /tmp/irc.h 2005-10-04 14:10:59.699874560 +0200 -+++ gaim/src/protocols/irc/irc.h 2005-10-04 14:13:10.135045400 +0200 -@@ -35,7 +35,7 @@ - #define IRC_DEFAULT_CHARSET "UTF-8" - #define IRC_DEFAULT_ALIAS "gaim" - --#define IRC_DEFAULT_QUIT "Download Gaim: " GAIM_WEBSITE -+#define IRC_DEFAULT_QUIT "Powered by OE: www.openembedded.org" - - #define IRC_INITIAL_BUFSIZE 1024 - diff --git a/packages/gaim/files/gevolution-eds-dbus.patch b/packages/gaim/files/gevolution-eds-dbus.patch deleted file mode 100644 index 0b7479d4f7..0000000000 --- a/packages/gaim/files/gevolution-eds-dbus.patch +++ /dev/null @@ -1,53 +0,0 @@ ---- gaim/plugins/gevolution/gevolution.c.orig 2006-02-23 23:30:25.000000000 +0100 -+++ gaim/plugins/gevolution/gevolution.c 2006-02-23 23:31:42.000000000 +0100 -@@ -38,17 +38,12 @@ - --#include - --#include --#include --#include -+#include -+#include - - #include - - #define GEVOLUTION_PLUGIN_ID "gtk-x11-gevolution" - --#define E_DATA_BOOK_FACTORY_OAF_ID \ -- "OAFIID:GNOME_Evolution_DataServer_BookFactory" -- - enum - { - COLUMN_AUTOADD, -@@ -324,8 +320,6 @@ - static gboolean - plugin_load(GaimPlugin *plugin) - { -- bonobo_activate(); -- - backup_blist_ui_ops = gaim_blist_get_ui_ops(); - - blist_ui_ops = g_memdup(backup_blist_ui_ops, sizeof(GaimBlistUiOps)); -@@ -370,7 +364,6 @@ - static void - plugin_destroy(GaimPlugin *plugin) - { -- bonobo_debug_shutdown(); - } - - static void -@@ -563,13 +556,6 @@ - * So, in conclusion, this is an evil hack, but it doesn't harm anything - * and it works. - */ -- g_module_make_resident(plugin->handle); -- -- if (!bonobo_init_full(NULL, NULL, bonobo_activation_orb_get(), -- CORBA_OBJECT_NIL, CORBA_OBJECT_NIL)) -- { -- gaim_debug_error("evolution", "Unable to initialize bonobo.\n"); -- } - } - - GAIM_INIT_PLUGIN(gevolution, init_plugin, info) diff --git a/packages/gaim/files/gtk-deprecated-2.0.0.patch b/packages/gaim/files/gtk-deprecated-2.0.0.patch deleted file mode 100644 index 04bb9244f0..0000000000 --- a/packages/gaim/files/gtk-deprecated-2.0.0.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- gaim/configure.ac.orig 2005-12-19 23:04:14 +0100 -+++ gaim/configure.ac 2005-12-19 23:04:49 +0100 -@@ -442,10 +442,6 @@ - fi - fi - --if test "x$enable_deprecated" = "xno"; then -- DEBUG_CFLAGS="$DEBUG_CFLAGS -DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED" --fi -- - if test "x$GCC" = "xyes"; then - DEBUG_CFLAGS="-Wall $DEBUG_CFLAGS" - CFLAGS="-g $CFLAGS" diff --git a/packages/gaim/files/no-superimposed-version-on-logo.patch b/packages/gaim/files/no-superimposed-version-on-logo.patch deleted file mode 100644 index 86809dfe98..0000000000 --- a/packages/gaim/files/no-superimposed-version-on-logo.patch +++ /dev/null @@ -1,19 +0,0 @@ -Index: gaim/src/gtkstock.c -=================================================================== ---- gaim.orig/src/gtkstock.c 2005-08-15 08:52:45.000000000 +0200 -+++ gaim/src/gtkstock.c 2005-08-19 18:13:26.550881552 +0200 -@@ -214,12 +214,12 @@ - - pixbuf = gdk_pixbuf_new_from_file(filename, NULL); - - g_free(filename); - -- if (!strcmp(stock_icons[i].name, GAIM_STOCK_LOGO)) -- gaim_gtk_stock_versionize(&pixbuf, win); -+ /*if (!strcmp(stock_icons[i].name, GAIM_STOCK_LOGO)) -+ gaim_gtk_stock_versionize(&pixbuf, win);*/ - - iconset = gtk_icon_set_new_from_pixbuf(pixbuf); - - g_object_unref(G_OBJECT(pixbuf)); - } diff --git a/packages/gaim/files/purple-OE-branding.patch b/packages/gaim/files/purple-OE-branding.patch deleted file mode 100644 index 99c61375ce..0000000000 --- a/packages/gaim/files/purple-OE-branding.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- /tmp/irc.h 2007-08-04 20:27:10.000000000 +0200 -+++ pidgin-2.1.0/libpurple/protocols/irc/irc.h 2007-08-04 20:28:15.318400000 +0200 -@@ -35,9 +35,9 @@ - #define IRC_DEFAULT_SSL_PORT 994 - - #define IRC_DEFAULT_CHARSET "UTF-8" --#define IRC_DEFAULT_ALIAS "purple" -+#define IRC_DEFAULT_ALIAS "OE-user" - --#define IRC_DEFAULT_QUIT "Leaving." -+#define IRC_DEFAULT_QUIT "Powered by OE: www.openembedded.org" - - #define IRC_INITIAL_BUFSIZE 1024 - diff --git a/packages/gaim/files/series b/packages/gaim/files/series deleted file mode 100644 index c7a16f71c1..0000000000 --- a/packages/gaim/files/series +++ /dev/null @@ -1,14 +0,0 @@ -no-superimposed-version-on-logo.patch -01-optional-icons-in-dialogs.patch -02-request-field-dialogs.patch -03-blist-dialogs.patch -04-saved-status-dialogs.patch -05-statusbox-icon-size.patch -06-account-dialogs.patch -07-roomlist-dialog.patch -define-pda-mode.patch -desktop-name-2.0.0.patch -docklet-icon-size.patch -08-prefs-dialog.patch -09-filetransfer-dialog.patch -10-pda-default-settings.patch diff --git a/packages/gaim/gaim.inc b/packages/gaim/gaim.inc deleted file mode 100644 index d2fb38881a..0000000000 --- a/packages/gaim/gaim.inc +++ /dev/null @@ -1,35 +0,0 @@ -SECTION = "x11/network" -DESCRIPTION = "multi-protocol instant messaging client" -LICENSE = "GPL" - -DEPENDS = "gtk+ gnutls virtual/libintl" -RRECOMMENDS_${PN} = "gaim-protocol-irc gaim-protocol-jabber gaim-plugin-docklet" - -EXTRA_OECONF = "--disable-audio --disable-perl --disable-tcl --disable-deprecated" - -FILES_${PN} = "${bindir} ${sbindir} ${libexecdir} ${libdir}/lib*.so.* \ - ${sysconfdir} ${sharedstatedir} ${localstatedir} \ - /bin /sbin /lib/*.so* ${datadir}/${PN} ${libdir}/${PN}/*.so \ - ${datadir}/pixmaps ${datadir}/applications \ - ${datadir}/idl ${datadir}/omf ${datadir}/sounds \ - ${libdir}/bonobo/servers" -FILES_${PN}-dev += "${libdir}/gaim/*.la" - -inherit autotools gettext - -PACKAGES_DYNAMIC = "gaim-protocol-* gaim-plugin-*" - -python populate_packages_prepend () { - root = bb.data.expand('${libdir}/gaim', d) - - do_split_packages(d, root, '^([^l][^i][^b].*)\.so$', - output_pattern='gaim-plugin-%s', - description='GAIM plugin %s', - prepend=True) - - do_split_packages(d, root, '^lib(.*)\.so$', - output_pattern='gaim-protocol-%s', - description='GAIM protocol plugin for %s', - prepend=True, - aux_files_pattern=['${datadir}/pixmaps/gaim/status/default/%s.png', '${datadir}/pixmaps/gaim/smileys/default/%s_*']) -} diff --git a/packages/gaim/gaim_1.0.3.bb b/packages/gaim/gaim_1.0.3.bb deleted file mode 100644 index f833ddde28..0000000000 --- a/packages/gaim/gaim_1.0.3.bb +++ /dev/null @@ -1,6 +0,0 @@ -PR = "r0" - -SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ - file://desktop-name.patch;patch=1" - -require gaim.inc diff --git a/packages/gaim/gaim_1.1.0.bb b/packages/gaim/gaim_1.1.0.bb deleted file mode 100644 index f833ddde28..0000000000 --- a/packages/gaim/gaim_1.1.0.bb +++ /dev/null @@ -1,6 +0,0 @@ -PR = "r0" - -SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ - file://desktop-name.patch;patch=1" - -require gaim.inc diff --git a/packages/gaim/gaim_1.1.1.bb b/packages/gaim/gaim_1.1.1.bb deleted file mode 100644 index f833ddde28..0000000000 --- a/packages/gaim/gaim_1.1.1.bb +++ /dev/null @@ -1,6 +0,0 @@ -PR = "r0" - -SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ - file://desktop-name.patch;patch=1" - -require gaim.inc diff --git a/packages/gaim/gaim_1.1.2.bb b/packages/gaim/gaim_1.1.2.bb deleted file mode 100644 index 3bf9aeb3a7..0000000000 --- a/packages/gaim/gaim_1.1.2.bb +++ /dev/null @@ -1,9 +0,0 @@ -PR = "r0" - -SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ - file://desktop-name.patch;patch=1" - -require gaim.inc - -CFLAGS += "-D_GNU_SOURCE" - diff --git a/packages/gaim/gaim_1.4.0.bb b/packages/gaim/gaim_1.4.0.bb deleted file mode 100644 index 1585229b14..0000000000 --- a/packages/gaim/gaim_1.4.0.bb +++ /dev/null @@ -1,9 +0,0 @@ -PR = "r0" - -SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ - file://desktop-name_1.4.0.patch;patch=1" - -require gaim.inc - -CFLAGS += "-D_GNU_SOURCE" - diff --git a/packages/gaim/gaim_1.5.0.bb b/packages/gaim/gaim_1.5.0.bb deleted file mode 100644 index 3bf9aeb3a7..0000000000 --- a/packages/gaim/gaim_1.5.0.bb +++ /dev/null @@ -1,9 +0,0 @@ -PR = "r0" - -SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ - file://desktop-name.patch;patch=1" - -require gaim.inc - -CFLAGS += "-D_GNU_SOURCE" - diff --git a/packages/gaim/gaim_2.0.0-cvs-mco1.bb b/packages/gaim/gaim_2.0.0-cvs-mco1.bb deleted file mode 100644 index bf8591920c..0000000000 --- a/packages/gaim/gaim_2.0.0-cvs-mco1.bb +++ /dev/null @@ -1,44 +0,0 @@ -PR = "r3" -SRCDATE_${PN} = "20050904" -#Change to x.y.z+cvs${SRCDATE}-mco1 when 2.0.0 changes -PV = "2.0.0-cvs-mco1-${SRCDATE}" - -DEFAULT_PREFERENCE = "-1" - -WEBCVSURL = "http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/gaim" - -SRC_URI = "cvs://anonymous@gaim.cvs.sourceforge.net/cvsroot/gaim;module=gaim \ - ${WEBCVSURL}/no-superimposed-version-on-logo.patch;patch=1 \ - ${WEBCVSURL}/01-optional-icons-in-dialogs.patch;patch=1 \ - ${WEBCVSURL}/02-request-field-dialogs.patch;patch=1 \ - ${WEBCVSURL}/03-blist-dialogs.patch;patch=1 \ - ${WEBCVSURL}/04-saved-status-dialogs.patch;patch=1 \ - ${WEBCVSURL}/05-statusbox-icon-size.patch;patch=1 \ - ${WEBCVSURL}/06-account-dialogs.patch;patch=1 \ - ${WEBCVSURL}/07-roomlist-dialog.patch;patch=1 \ - ${WEBCVSURL}/define-pda-mode.patch;patch=1 \ - ${WEBCVSURL}/desktop-name-2.0.0.patch;patch=1 \ - ${WEBCVSURL}/docklet-icon-size.patch;patch=1 \ - ${WEBCVSURL}/08-prefs-dialog.patch;patch=1 \ - ${WEBCVSURL}/09-filetransfer-dialog.patch;patch=1 \ - ${WEBCVSURL}/10-pda-default-settings.patch;patch=1 \ - file://gaim-OE-branding.patch;patch=1 \ - " - -require gaim.inc - -S = "${WORKDIR}/gaim" - -CFLAGS += "-D_GNU_SOURCE" - - -DEPENDS += "startup-notification" - -#include autopoint (gettext) -EXTRA_AUTORECONF = "" - -#disable "X Session Management"... It is EVIL -EXTRA_OECONF += "--disable-sm --enable-startup-notification \ - --with-gnutls-includes=${STAGING_INCDIR}" - - diff --git a/packages/gaim/pidgin.inc b/packages/gaim/pidgin.inc deleted file mode 100644 index a2ef61a508..0000000000 --- a/packages/gaim/pidgin.inc +++ /dev/null @@ -1,85 +0,0 @@ -SECTION = "x11/network" -DESCRIPTION = "multi-protocol instant messaging client" -LICENSE = "GPL" - -DEPENDS = "avahi gtk+ ncurses gnutls virtual/libintl gstreamer dbus" -RRECOMMENDS_${PN} = "libpurple-plugin-ssl-gnutls libpurple-protocol-irc libpurple-protocol-xmpp" - -EXTRA_OECONF = " \ - --disable-audio \ - --disable-perl \ - --disable-tcl \ - --disable-deprecated \ - --disable-gevolution \ - --x-includes=${STAGING_INCDIR} \ - --x-libraries=${STAGING_LIBDIR} \ - --enable-gnutls=yes \ - --with-ncurses-headers=${STAGING_INCDIR} \ - --with-gnutls-includes=${STAGING_INCDIR} \ - --with-gnutls-libs=${STAGING_LIBDIR} \ - " - -OE_LT_RPATH_ALLOW=":${libdir}/purple-2:" -OE_LT_RPATH_ALLOW[export]="1" - -PACKAGES =+ "libpurple libpurple-dev libpurple-dbg libpurple-liboscar libpurple-libjabber libpurple-logreader finch finch-dev finch-dbg" - - -LEAD_SONAME = "libpurple.so.0" -FILES_libpurple = "${libdir}/libpurple*.so.* /usr/bin/purple-* /etc/gconf/schemas/purple*" -FILES_libpurple-dev = "${libdir}/libpurple* \ - ${libdir}/purple-2/*.la " -FILES_libpurple-dbg += "${libdir}/.debug/libpurple* \ - ${libdir}/purple-2/.debug" -FILES_libpurple-liboscar = "${libdir}/purple-2/liboscar.so.*" -FILES_libpurple-libjabber = "${libdir}/purple-2/libjabber.so.*" -FILES_libpurple-logreader = "${libdir}/purple-2/log_reader.so" -FILES_finch = "${bindir}/finch /usr/lib/libgnt.so.*" -FILES_finch-dev = "${libdir}/finch/*.la" -FILES_finch-dbg = "${bindir}/.debug/finch \ - ${libdir}/finch/.debug" - -FILES_${PN} = "${bindir} ${sbindir} ${libexecdir} ${libdir}/lib*.so.* \ - ${sysconfdir} ${sharedstatedir} ${localstatedir} \ - /bin /sbin /lib/*.so* ${datadir}/${PN} ${libdir}/${PN}/*.so \ - ${datadir}/pixmaps ${datadir}/applications \ - ${datadir}/idl ${datadir}/omf ${datadir}/sounds \ - ${libdir}/bonobo/servers ${datadir}/icons" -FILES_${PN}-dev += "${libdir}/pidgin/*.la" - -inherit autotools gettext pkgconfig gconf - -PACKAGES_DYNAMIC = "libpurple-protocol-* libpurple-plugin-* pidgin-plugin-* finch-plugin-*" - -python populate_packages_prepend () { - root = bb.data.expand('${libdir}/pidgin', d) - purple = bb.data.expand('${libdir}/purple-2', d) - finch = bb.data.expand('${libdir}/finch', d) - - do_split_packages(d, root, '^([^l][^i][^b].*)\.so$', - output_pattern='pidgin-plugin-%s', - description='Pidgin plugin %s', - prepend=True, extra_depends='') - - do_split_packages(d, purple, '^lib(.*)\.so$', - output_pattern='libpurple-protocol-%s', - description='Libpurple protocol plugin for %s', - prepend=True, extra_depends='') - - do_split_packages(d, purple, '^(ssl-.*)\.so$', - output_pattern='libpurple-plugin-%s', - description='libpurple plugin %s', - prepend=True, extra_depends='libpurple-plugin-ssl') - - do_split_packages(d, purple, '^([^l][^i][^b].*)\.so$', - output_pattern='libpurple-plugin-%s', - description='libpurple plugin %s', - prepend=True, extra_depends='') - - do_split_packages(d, finch, '^([^l][^i][^b].*)\.so$', - output_pattern='finch-plugin-%s', - description='Finch plugin %s', - prepend=True, extra_depends='') - - -} diff --git a/packages/gaim/pidgin/.mtn2git_empty b/packages/gaim/pidgin/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gaim/pidgin/gconf-no-errors.patch b/packages/gaim/pidgin/gconf-no-errors.patch deleted file mode 100644 index 9a95175ac9..0000000000 --- a/packages/gaim/pidgin/gconf-no-errors.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- /tmp/Makefile.am 2007-05-08 18:39:49.000000000 +0200 -+++ pidgin-2.0.0/libpurple/gconf/Makefile.am 2007-05-08 18:40:13.755251000 +0200 -@@ -8,8 +8,7 @@ - - if GCONF_SCHEMAS_INSTALL - install-data-local: -- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA) 2>&1 | \ -- grep -v "^WARNING: failed to install schema" | grep -v "^Attached schema" 1>&2 -+ GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA) 2>&1 - else - install-data-local: - endif diff --git a/packages/gaim/pidgin/pidgin.desktop-set-icon.patch b/packages/gaim/pidgin/pidgin.desktop-set-icon.patch deleted file mode 100644 index 05f76895ba..0000000000 --- a/packages/gaim/pidgin/pidgin.desktop-set-icon.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- pidgin-2.0.1/pidgin.desktop.in.orig 2007-06-20 23:50:44.000000000 +0000 -+++ pidgin-2.0.1/pidgin.desktop.in 2007-06-20 23:51:05.000000000 +0000 -@@ -4,7 +4,7 @@ - _GenericName=Internet Messenger - _Comment=Send instant messages over multiple protocols - Exec=pidgin --Icon=pidgin -+Icon=/usr/share/icons/hicolor/48x48/apps/pidgin.png - StartupNotify=true - Terminal=false - Type=Application diff --git a/packages/gaim/pidgin/sanitize-configure.ac.patch b/packages/gaim/pidgin/sanitize-configure.ac.patch deleted file mode 100644 index a77d64f40b..0000000000 --- a/packages/gaim/pidgin/sanitize-configure.ac.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- /tmp/configure.ac 2007-05-08 17:29:02.000000000 +0200 -+++ pidgin-2.0.0/configure.ac 2007-05-08 17:30:30.325251000 +0200 -@@ -472,7 +472,7 @@ - if test "x$enable_consoleui" = "xyes"; then - dnl # Some distros put the headers in ncursesw/, some don't - found_ncurses_h=no -- for location in $ac_ncurses_includes $NCURSES_HEADERS /usr/include/ncursesw /usr/include -+ for location in $ac_ncurses_includes $NCURSES_HEADERS - do - f="$location/ncurses.h" - AC_CHECK_HEADER($f,[ -@@ -1860,10 +1860,6 @@ - KRB4_CFLAGS="$KRB4_CFLAGS -I${kerberos}/include/kerberosIV" - fi - KRB4_LDFLAGS="-L${kerberos}/lib" -- elif test -d /usr/local/include/kerberosIV ; then -- KRB4_CFLAGS="-I/usr/local/include/kerberosIV" -- elif test -d /usr/include/kerberosIV ; then -- KRB4_CFLAGS="-I/usr/include/kerberosIV" - fi - AC_DEFINE(ZEPHYR_USES_KERBEROS, 1, [Define if kerberos should be used in Zephyr.]) - -@@ -1896,10 +1892,6 @@ - ZEPHYR_LDFLAGS="-L${zephyr}/lib" - elif test -d /usr/athena/include/zephyr ; then - ZEPHYR_CFLAGS="-I/usr/athena/include" -- elif test -d /usr/include/zephyr ; then -- ZEPHYR_CFLAGS="-I/usr/include" -- elif test -d /usr/local/include/zephyr ; then -- ZEPHYR_CFLAGS="-I/usr/local/include" - fi - AC_DEFINE(LIBZEPHYR_EXT, 1 , [Define if external libzephyr should be used.]) - AM_CONDITIONAL(EXTERNAL_LIBZEPHYR, test "x$zephyr" != "xno") diff --git a/packages/gaim/pidgin_2.0.2.bb b/packages/gaim/pidgin_2.0.2.bb deleted file mode 100644 index 2cc02c5072..0000000000 --- a/packages/gaim/pidgin_2.0.2.bb +++ /dev/null @@ -1,9 +0,0 @@ -require pidgin.inc - -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 \ - " - -PR = "r1" diff --git a/packages/gaim/pidgin_2.1.1.bb b/packages/gaim/pidgin_2.1.1.bb deleted file mode 100644 index 5531880669..0000000000 --- a/packages/gaim/pidgin_2.1.1.bb +++ /dev/null @@ -1,10 +0,0 @@ -require pidgin.inc - -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 \ - " - -PR = "r0" diff --git a/packages/gaim/pidgin_2.2.1.bb b/packages/gaim/pidgin_2.2.1.bb deleted file mode 100644 index 5531880669..0000000000 --- a/packages/gaim/pidgin_2.2.1.bb +++ /dev/null @@ -1,10 +0,0 @@ -require pidgin.inc - -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 \ - " - -PR = "r0" diff --git a/packages/obsolete/gaim/.mtn2git_empty b/packages/obsolete/gaim/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/gaim/files/.mtn2git_empty b/packages/obsolete/gaim/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/gaim/files/01-optional-icons-in-dialogs.patch b/packages/obsolete/gaim/files/01-optional-icons-in-dialogs.patch new file mode 100644 index 0000000000..260dcf364f --- /dev/null +++ b/packages/obsolete/gaim/files/01-optional-icons-in-dialogs.patch @@ -0,0 +1,514 @@ +Index: gaim/src/gtkblist.c +=================================================================== +--- gaim.orig/src/gtkblist.c 2005-08-19 23:23:45.000000000 +0200 ++++ gaim/src/gtkblist.c 2005-08-21 02:32:13.989658832 +0200 +@@ -873,16 +873,23 @@ + void + gaim_gtk_blist_joinchat_show(void) + { +- GtkWidget *hbox, *vbox; ++ GtkWidget *vbox; + GtkWidget *rowbox; + GtkWidget *label; ++ GtkWidget *pri_label; + GaimGtkBuddyList *gtkblist; ++ GtkWidget *sw; ++#if ICONS_IN_DIALOGS ++ GtkWidget *hbox; + GtkWidget *img = NULL; ++#endif + GaimGtkJoinChatData *data = NULL; + + gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); ++#if ICONS_IN_DIALOGS + img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, + GTK_ICON_SIZE_DIALOG); ++#endif + data = g_new0(GaimGtkJoinChatData, 1); + + data->window = gtk_dialog_new_with_buttons(_("Join a Chat"), +@@ -897,6 +904,7 @@ + GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), GAIM_HIG_BOX_SPACE); + gtk_window_set_role(GTK_WINDOW(data->window), "join_chat"); + ++#if ICONS_IN_DIALOGS + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); +@@ -905,6 +913,9 @@ + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 0); + gtk_container_add(GTK_CONTAINER(hbox), vbox); ++#else ++ vbox = GTK_DIALOG(data->window)->vbox; ++#endif + + label = gtk_label_new(_("Please enter the appropriate information " + "about the chat you would like to join.\n")); +@@ -4304,9 +4315,13 @@ + { + GtkWidget *table; + GtkWidget *label; ++ GtkWidget *pri_label; + GtkWidget *hbox; + GtkWidget *vbox; ++ GtkWidget *sw; ++#if ICONS_IN_DIALOGS + GtkWidget *img; ++#endif + GaimGtkBuddyList *gtkblist; + GaimGtkAddBuddyData *data = g_new0(GaimGtkAddBuddyData, 1); + +@@ -4315,8 +4330,10 @@ + ? account + : gaim_connection_get_account(gaim_connections_get_all()->data)); + ++#if ICONS_IN_DIALOGS + img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, + GTK_ICON_SIZE_DIALOG); ++#endif + + gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); + +@@ -4335,6 +4352,7 @@ + gtk_window_set_type_hint(GTK_WINDOW(data->window), + GDK_WINDOW_TYPE_HINT_DIALOG); + ++#if ICONS_IN_DIALOGS + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); +@@ -4342,6 +4360,9 @@ + + vbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(hbox), vbox); ++#else ++ vbox = GTK_DIALOG(data->window)->vbox; ++#endif + + label = gtk_label_new( + _("Please enter the screen name of the person you would like " +@@ -4663,10 +4684,14 @@ + GList *l; + GaimConnection *gc; + GtkWidget *label; ++ GtkWidget *pri_label; + GtkWidget *rowbox; +- GtkWidget *hbox; + GtkWidget *vbox; ++ GtkWidget *sw; ++#if ICONS_IN_DIALOGS ++ GtkWidget *hbox; + GtkWidget *img; ++#endif + + if (account != NULL) { + gc = gaim_account_get_connection(account); +@@ -4698,8 +4723,10 @@ + data->account = account; + data->default_chat_name = g_strdup(name); + ++#if ICONS_IN_DIALOGS + img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, + GTK_ICON_SIZE_DIALOG); ++#endif + + gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); + +@@ -4720,6 +4747,7 @@ + gtk_window_set_type_hint(GTK_WINDOW(data->window), + GDK_WINDOW_TYPE_HINT_DIALOG); + ++#if ICONS_IN_DIALOGS + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); +@@ -4727,6 +4755,9 @@ + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(hbox), vbox); ++#else ++ vbox = GTK_DIALOG(data->window)->vbox; ++#endif + + label = gtk_label_new( + _("Please enter an alias, and the appropriate information " +Index: gaim/src/gtkconn.c +=================================================================== +--- gaim.orig/src/gtkconn.c 2005-08-19 23:23:45.000000000 +0200 ++++ gaim/src/gtkconn.c 2005-08-19 23:27:18.000000000 +0200 +@@ -371,7 +371,10 @@ + + /* Build the window if it isn't there yet */ + if (!disconnect_window) { +- GtkWidget *hbox, *vbox, *img; ++ GtkWidget *hbox, *vbox; ++ #if ICONS_IN_DIALOGS ++ GtkWidget *img; ++ #endif + GtkCellRenderer *rend, *rend2; + + disconnect_window = g_new0(struct disconnect_window, 1); +@@ -384,6 +387,7 @@ + gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(disconnect_window->window)->vbox), GAIM_HIG_BORDER); + gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), GAIM_HIG_BOX_SPACE); + ++#if ICONS_IN_DIALOGS + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(disconnect_window->window)->vbox), hbox); + img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG); +@@ -392,6 +396,9 @@ + + vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); ++#else ++ vbox = GTK_DIALOG(disconnect_window->window)->vbox; ++#endif + + disconnect_window->label = gtk_label_new(label_text); + +Index: gaim/src/gtkconv.c +=================================================================== +--- gaim.orig/src/gtkconv.c 2005-08-19 23:23:45.000000000 +0200 ++++ gaim/src/gtkconv.c 2005-08-19 23:27:18.000000000 +0200 +@@ -847,10 +847,12 @@ + GtkWidget *label; + GtkWidget *vbox, *hbox; + GtkWidget *table; ++#if ICONS_IN_DIALOGS + GtkWidget *img; + + img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, + GTK_ICON_SIZE_DIALOG); ++#endif + + info = g_new0(InviteBuddyInfo, 1); + info->conv = conv; +@@ -880,6 +882,7 @@ + gtk_box_set_spacing(GTK_BOX(vbox), GAIM_HIG_BORDER); + gtk_container_set_border_width(GTK_CONTAINER(vbox), GAIM_HIG_BOX_SPACE); + ++#if ICONS_IN_DIALOGS + /* Setup the inner hbox and put the dialog's icon in it. */ + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(vbox), hbox); +@@ -889,6 +892,7 @@ + /* Setup the right vbox. */ + vbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(hbox), vbox); ++#endif + + /* Put our happy label in it. */ + label = gtk_label_new(_("Please enter the name of the user you wish " +@@ -1107,8 +1111,10 @@ + GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); + GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); + GtkWidget *hbox; ++#if ICONS_IN_DIALOGS + GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, + GTK_ICON_SIZE_DIALOG); ++#endif + GtkWidget *label; + struct _search *s; + +@@ -1139,9 +1145,11 @@ + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox), + hbox); ++#if ICONS_IN_DIALOGS + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); + + gtk_misc_set_alignment(GTK_MISC(img), 0, 0); ++#endif + gtk_dialog_set_response_sensitive(GTK_DIALOG(gtkconv->dialogs.search), + GTK_RESPONSE_OK, FALSE); + +Index: gaim/src/gtkdebug.c +=================================================================== +--- gaim.orig/src/gtkdebug.c 2005-08-19 23:23:45.000000000 +0200 ++++ gaim/src/gtkdebug.c 2005-08-19 23:27:18.000000000 +0200 +@@ -149,7 +149,10 @@ + static void + find_cb(GtkWidget *w, DebugWindow *win) + { +- GtkWidget *hbox, *img, *label; ++ GtkWidget *hbox, *label; ++#if ICONS_IN_DIALOGS ++ GtkWidget *img; ++#endif + struct _find *f; + + if(win->find) +@@ -179,11 +182,13 @@ + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(win->find)->vbox), + hbox); ++#if ICONS_IN_DIALOGS + img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, + GTK_ICON_SIZE_DIALOG); + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); + + gtk_misc_set_alignment(GTK_MISC(img), 0, 0); ++#endif + gtk_dialog_set_response_sensitive(GTK_DIALOG(win->find), + GTK_RESPONSE_OK, FALSE); + +Index: gaim/src/gtkdialogs.c +=================================================================== +--- gaim.orig/src/gtkdialogs.c 2005-08-19 23:23:45.000000000 +0200 ++++ gaim/src/gtkdialogs.c 2005-08-19 23:27:18.000000000 +0200 +@@ -534,7 +534,9 @@ + GtkWidget *window; + GtkWidget *hbox; + GtkWidget *label; ++#if ICONS_IN_DIALOGS + GtkWidget *img; ++#endif + gchar *norm = gaim_strreplace(ee, "rocksmyworld", ""); + + label = gtk_label_new(NULL); +@@ -582,8 +584,10 @@ + + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), hbox); ++#if ICONS_IN_DIALOGS + img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_COOL, gtk_icon_size_from_name(GAIM_ICON_SIZE_DIALOG_COOL)); + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); ++#endif + + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); +Index: gaim/src/gtkgaim.h +=================================================================== +--- gaim.orig/src/gtkgaim.h 2005-08-19 23:26:29.000000000 +0200 ++++ gaim/src/gtkgaim.h 2005-08-21 02:32:29.270335816 +0200 +@@ -61,5 +61,10 @@ + #define GAIM_HIG_BORDER 12 + #define GAIM_HIG_BOX_SPACE 6 + ++/** ++ * Do we want icons in dialogs? ++ */ ++#define ICONS_IN_DIALOGS 1 ++ + #endif /* _GAIM_GTKGAIM_H_ */ + +Index: gaim/src/gtknotify.c +=================================================================== +--- gaim.orig/src/gtknotify.c 2005-08-19 23:23:45.000000000 +0200 ++++ gaim/src/gtknotify.c 2005-08-21 02:32:03.765213184 +0200 +@@ -125,7 +125,9 @@ + GtkWidget *dialog; + GtkWidget *hbox; + GtkWidget *label; ++#if ICONS_IN_DIALOGS + GtkWidget *img = NULL; ++#endif + char label_text[2048]; + const char *icon_name = NULL; + char *primary_esc, *secondary_esc; +@@ -149,11 +151,13 @@ + break; + } + ++#if ICONS_IN_DIALOGS + if (icon_name != NULL) + { + img = gtk_image_new_from_stock(icon_name, GTK_ICON_SIZE_DIALOG); + gtk_misc_set_alignment(GTK_MISC(img), 0, 0); + } ++#endif + + dialog = gtk_dialog_new_with_buttons(title ? title : GAIM_ALERT_TITLE, + NULL, 0, GTK_STOCK_CLOSE, +@@ -173,8 +177,10 @@ + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); + ++#if ICONS_IN_DIALOGS + if (img != NULL) + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); ++#endif + + primary_esc = g_markup_escape_text(primary, -1); + secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; +@@ -218,9 +224,11 @@ + GaimNotifyMailData *data; + GtkWidget *dialog; + GtkWidget *vbox; +- GtkWidget *hbox; + GtkWidget *label; ++#if ICONS_IN_DIALOGS ++ GtkWidget *hbox; + GtkWidget *img; ++#endif + char *detail_text; + char *label_text; + +@@ -248,6 +256,7 @@ + gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); + ++#if ICONS_IN_DIALOGS + /* Setup the main horizontal box */ + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); +@@ -262,6 +271,9 @@ + vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); + + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); ++#else ++ vbox = GTK_DIALOG(dialog)->vbox; ++#endif + + /* Descriptive label */ + detail_text = g_strdup_printf(ngettext("%s has %d new message.", +Index: gaim/src/gtkrequest.c +=================================================================== +--- gaim.orig/src/gtkrequest.c 2005-08-19 23:23:45.000000000 +0200 ++++ gaim/src/gtkrequest.c 2005-08-21 02:32:15.943361824 +0200 +@@ -281,10 +281,12 @@ + GaimGtkRequestData *data; + GtkWidget *dialog; + GtkWidget *vbox; +- GtkWidget *hbox; + GtkWidget *label; + GtkWidget *entry; ++#if ICONS_IN_DIALOGS ++ GtkWidget *hbox; + GtkWidget *img; ++#endif + GtkWidget *toolbar; + char *label_text; + char *primary_esc, *secondary_esc; +@@ -318,6 +320,7 @@ + gtk_dialog_set_default_response(GTK_DIALOG(dialog), 0); + gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); + ++#if ICONS_IN_DIALOGS + /* Setup the main horizontal box */ + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); +@@ -332,6 +335,9 @@ + vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); + + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); ++#else ++ vbox = GTK_DIALOG(dialog)->vbox; ++#endif + + /* Descriptive label */ + primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL; +@@ -435,9 +441,11 @@ + GaimGtkRequestData *data; + GtkWidget *dialog; + GtkWidget *vbox, *vbox2; +- GtkWidget *hbox; + GtkWidget *label; ++#if ICONS_IN_DIALOGS ++ GtkWidget *hbox; + GtkWidget *img; ++#endif + GtkWidget *radio = NULL; + char *label_text; + char *radio_text; +@@ -475,6 +483,7 @@ + gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); + ++#if ICONS_IN_DIALOGS + /* Setup the main horizontal box */ + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); +@@ -488,6 +497,9 @@ + /* Vertical box */ + vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); ++#else ++ vbox = GTK_DIALOG(dialog)->vbox; ++#endif + + /* Descriptive label */ + primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL; +@@ -536,9 +548,11 @@ + GaimGtkRequestData *data; + GtkWidget *dialog; + GtkWidget *vbox; +- GtkWidget *hbox; + GtkWidget *label; ++#if ICONS_IN_DIALOGS ++ GtkWidget *hbox; + GtkWidget *img; ++#endif + void **buttons; + char *label_text; + char *primary_esc, *secondary_esc; +@@ -584,6 +598,7 @@ + gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); + ++#if ICONS_IN_DIALOGS + /* Setup the main horizontal box */ + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); +@@ -597,7 +612,10 @@ + /* Vertical box */ + vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); +- ++#else ++ vbox = GTK_DIALOG(dialog)->vbox; ++#endif ++ + /* Descriptive label */ + primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL; + secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; +@@ -620,10 +638,12 @@ + + + if (default_action == GAIM_DEFAULT_ACTION_NONE) { ++#if ICONS_IN_DIALOGS + GTK_WIDGET_SET_FLAGS(img, GTK_CAN_DEFAULT); + GTK_WIDGET_SET_FLAGS(img, GTK_CAN_FOCUS); + gtk_widget_grab_focus(img); + gtk_widget_grab_default(img); ++#endif + } else + gtk_dialog_set_default_response(GTK_DIALOG(dialog), default_action); + +@@ -1351,13 +1371,15 @@ + GtkWidget *win; + GtkWidget *vbox; + GtkWidget *vbox2; +- GtkWidget *hbox; + GtkWidget *bbox; + GtkWidget *frame; + GtkWidget *label; + GtkWidget *table; + GtkWidget *button; ++#if ICONS_IN_DIALOGS ++ GtkWidget *hbox; + GtkWidget *img; ++#endif + GtkWidget *sw; + GtkSizeGroup *sg; + GList *gl, *fl; +@@ -1392,6 +1414,7 @@ + g_signal_connect(G_OBJECT(win), "delete_event", + G_CALLBACK(destroy_multifield_cb), data); + ++#if ICONS_IN_DIALOGS + /* Setup the main horizontal box */ + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(win), hbox); +@@ -1407,6 +1430,10 @@ + /* Setup the vbox */ + vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); ++#else ++ vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); ++ gtk_container_add(GTK_CONTAINER(win), vbox); ++#endif + gtk_widget_show(vbox); + + sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); diff --git a/packages/obsolete/gaim/files/02-request-field-dialogs.patch b/packages/obsolete/gaim/files/02-request-field-dialogs.patch new file mode 100644 index 0000000000..50529ca53e --- /dev/null +++ b/packages/obsolete/gaim/files/02-request-field-dialogs.patch @@ -0,0 +1,116 @@ +Identiske underkataloger: src2/CVS og src/CVS +Identiske underkataloger: src2/.deps og src/.deps +Index: gaim/src/gtkgaim.h +=================================================================== +--- gaim.orig/src/gtkgaim.h 2005-08-19 21:46:09.550560256 +0200 ++++ gaim/src/gtkgaim.h 2005-08-19 21:47:37.276223928 +0200 +@@ -66,5 +66,11 @@ + */ + #define ICONS_IN_DIALOGS 0 + ++/** ++ * How many fields is there screen-space for vertically, before a scrollbar is needed? ++ */ ++#define VERT_ITEMS 0 ++ ++ + #endif /* _GAIM_GTKGAIM_H_ */ + +Index: gaim/src/gtkrequest.c +=================================================================== +--- gaim.orig/src/gtkrequest.c 2005-08-19 21:46:09.550560256 +0200 ++++ gaim/src/gtkrequest.c 2005-08-19 21:53:46.782050504 +0200 +@@ -1381,6 +1381,8 @@ + GtkWidget *img; + #endif + GtkWidget *sw; ++ GtkWidget *pri_label; ++ GtkWidget *sec_label; + GtkSizeGroup *sg; + GList *gl, *fl; + GaimRequestFieldGroup *group; +@@ -1450,6 +1452,7 @@ + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); + gtk_widget_show(label); ++ pri_label = label; + g_free(label_text); + } + +@@ -1457,7 +1460,7 @@ + gl = gl->next) + total_fields += g_list_length(gaim_request_field_group_get_fields(gl->data)); + +- if(total_fields > 9) { ++ if(total_fields > VERT_ITEMS) { + sw = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); +@@ -1484,6 +1487,7 @@ + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0); + gtk_widget_show(label); ++ sec_label = label; + } + + for (gl = gaim_request_fields_get_groups(fields); +@@ -1718,6 +1722,59 @@ + + gtk_widget_show(win); + ++ //Wait for the window to have recieved its "configure_event", ++ //which means it has been resized by the WM ++ while (gtk_events_pending ()) gtk_main_iteration (); ++ ++ //Get allocated size, and adjust widgets accordingly ++ int w, h, field_labels_w; ++ GtkRequisition sg_labels_req; ++ gtk_window_get_size(GTK_WINDOW(win), &w, &h); ++ field_labels_w = label->allocation.width + GAIM_HIG_BORDER*2; //The width of the largest field-label ++ ++ printf("%d / %d\n", field_labels_w, w); ++ ++ w = w - GAIM_HIG_BORDER * 2; ++ if (primary) gtk_widget_set_size_request(GTK_WIDGET(pri_label), w, -1); ++ if (secondary) gtk_widget_set_size_request(GTK_WIDGET(sec_label), w, -1); ++ ++ //Determine what to do - add a scrollbar or resize the input fields? ++ if ((float)field_labels_w / w > 0.5) //if the labels fill more than half the screen add a horizontal scrollbar ++ { ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), ++ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); ++ } ++ else //resize the input fields ++ { ++ for (gl = gaim_request_fields_get_groups(fields); ++ gl != NULL; ++ gl = gl->next) ++ { ++ GList *field_list; ++ size_t field_count = 0; ++ size_t cols = 1; ++ size_t rows; ++ size_t col_num; ++ size_t row_num = 0; ++ ++ group = gl->data; ++ field_list = gaim_request_field_group_get_fields(group); ++ ++ for (row_num = 0, fl = field_list; ++ row_num < rows && fl != NULL; ++ row_num++) ++ { ++ for (col_num = 0; ++ col_num < cols && fl != NULL; ++ col_num++, fl = fl->next) ++ { ++ field = fl->data; ++ gtk_widget_set_size_request(GTK_WIDGET(field->ui_data), w-field_labels_w, -1); ++ } ++ } ++ } ++ } ++ + return data; + } + diff --git a/packages/obsolete/gaim/files/03-blist-dialogs.patch b/packages/obsolete/gaim/files/03-blist-dialogs.patch new file mode 100644 index 0000000000..62d4710d46 --- /dev/null +++ b/packages/obsolete/gaim/files/03-blist-dialogs.patch @@ -0,0 +1,240 @@ +Identiske underkataloger: src2/CVS og src/CVS +Identiske underkataloger: src2/.deps og src/.deps +Index: gaim/src/gtkblist.c +=================================================================== +--- gaim.orig/src/gtkblist.c 2005-08-19 21:57:30.272074856 +0200 ++++ gaim/src/gtkblist.c 2005-08-19 21:57:42.030287336 +0200 +@@ -825,6 +825,15 @@ + joinchat_set_sensitive_if_input_cb(NULL, data); + + gtk_widget_show_all(data->entries_box); ++ ++ GList* children; ++ children = GTK_BOX(data->entries_box)->children; ++ while (children) ++ { ++ //Let the prilabel handle the maxsize ++ gtk_widget_set_size_request(((GtkBoxChild*)(children->data))->widget, 0, -1); ++ children = children->next; ++ } + } + + static void +@@ -916,12 +925,26 @@ + #else + vbox = GTK_DIALOG(data->window)->vbox; + #endif ++ ++ //Make a scrollview to accomodate it all ++ sw = gtk_scrolled_window_new(NULL, NULL); ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), ++ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); ++ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), ++ GTK_SHADOW_NONE); ++ gtk_widget_set_size_request(sw, -1, 200); ++ gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); ++ gtk_widget_show(sw); ++ ++ vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); ++ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox); + + label = gtk_label_new(_("Please enter the appropriate information " + "about the chat you would like to join.\n")); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); ++ pri_label = label; + + rowbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_box_pack_start(GTK_BOX(vbox), rowbox, TRUE, TRUE, 0); +@@ -955,6 +978,22 @@ + g_object_unref(data->sg); + + gtk_widget_show_all(data->window); ++ ++ //Wait for the window to have recieved its "configure_event", ++ //which means it has been resized by the WM ++ while (gtk_events_pending ()) gtk_main_iteration (); ++ ++ //Get allocated size, and adjust widgets accordingly ++ int w, h; ++ gtk_window_get_size(GTK_WINDOW(data->window), &w, &h); ++ ++ // Window_border Scrollbar (FFH) ++ w = w - GAIM_HIG_BORDER * 2 - GAIM_HIG_BORDER * 4; ++ gtk_widget_set_size_request(GTK_WIDGET(pri_label), w, -1); ++ ++ //Let the prilabel handle the maxsize ++ gtk_widget_set_size_request(GTK_WIDGET(data->account_menu), 0, -1); ++ gtk_widget_set_size_request(GTK_WIDGET(data->entries_box), 0, -1); + } + + static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) { +@@ -4364,6 +4403,19 @@ + vbox = GTK_DIALOG(data->window)->vbox; + #endif + ++ //Make a scrollview to accomodate it all ++ sw = gtk_scrolled_window_new(NULL, NULL); ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), ++ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); ++ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), ++ GTK_SHADOW_NONE); ++ gtk_widget_set_size_request(sw, -1, 200); ++ gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); ++ gtk_widget_show(sw); ++ ++ vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); ++ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox); ++ + label = gtk_label_new( + _("Please enter the screen name of the person you would like " + "to add to your buddy list. You may optionally enter an alias, " +@@ -4374,6 +4426,7 @@ + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); ++ pri_label = label; + + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); + gtk_container_add(GTK_CONTAINER(vbox), hbox); +@@ -4446,6 +4499,25 @@ + + if (group != NULL) + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(data->combo)->entry), group); ++ ++ //Wait for the window to have recieved its "configure_event", ++ //which means it has been resized by the WM ++ while (gtk_events_pending ()) gtk_main_iteration (); ++ ++ //Get allocated size, and adjust widgets accordingly ++ int w, h, field_labels_w; ++ gtk_window_get_size(GTK_WINDOW(data->window), &w, &h); ++ field_labels_w = label->allocation.width + GAIM_HIG_BORDER*2; //The width of the largest field-label ++ ++ // Window_border Scrollbar (FFH) ++ w = w - GAIM_HIG_BORDER * 2 - GAIM_HIG_BORDER * 4; ++ gtk_widget_set_size_request(GTK_WIDGET(pri_label), w, -1); ++ //Set the size of the input fields ++ gtk_widget_set_size_request(GTK_WIDGET(data->entry), w-field_labels_w, -1); ++ gtk_widget_set_size_request(GTK_WIDGET(data->entry_for_alias), w-field_labels_w, -1); ++ gtk_widget_set_size_request(GTK_WIDGET(data->combo), w-field_labels_w, -1); ++ gtk_widget_set_size_request(GTK_WIDGET(data->account_box), w-field_labels_w, -1); ++ + } + + static void +@@ -4572,6 +4644,9 @@ + GHashTable *defaults = NULL; + struct proto_chat_entry *pce; + gboolean focus = TRUE; ++ GtkWidget *label; ++ GtkWidget *rowbox; ++ GtkWidget *input; + + g_return_if_fail(data->account != NULL); + +@@ -4596,10 +4671,6 @@ + + for (tmp = list; tmp; tmp = tmp->next) + { +- GtkWidget *label; +- GtkWidget *rowbox; +- GtkWidget *input; +- + pce = tmp->data; + + rowbox = gtk_hbox_new(FALSE, 5); +@@ -4657,6 +4728,15 @@ + addchat_set_sensitive_if_input_cb(NULL, data); + + gtk_widget_show_all(data->entries_box); ++ ++ GList* children; ++ children = GTK_BOX(data->entries_box)->children; ++ while (children) ++ { ++ //Let the prilabel handle the maxsize ++ gtk_widget_set_size_request(((GtkBoxChild*)(children->data))->widget, 0, -1); ++ children = children->next; ++ } + } + + static void +@@ -4759,6 +4839,19 @@ + vbox = GTK_DIALOG(data->window)->vbox; + #endif + ++ //Make a scrollview to accomodate it all ++ sw = gtk_scrolled_window_new(NULL, NULL); ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), ++ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); ++ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), ++ GTK_SHADOW_NONE); ++ gtk_widget_set_size_request(sw, -1, 200); ++ gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); ++ gtk_widget_show(sw); ++ ++ vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); ++ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox); ++ + label = gtk_label_new( + _("Please enter an alias, and the appropriate information " + "about the chat you would like to add to your buddy list.\n")); +@@ -4766,7 +4859,8 @@ + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); +- ++ pri_label = label; ++ + rowbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), rowbox, FALSE, FALSE, 0); + +@@ -4825,6 +4919,24 @@ + G_CALLBACK(add_chat_resp_cb), data); + + gtk_widget_show_all(data->window); ++ ++ //Wait for the window to have recieved its "configure_event", ++ //which means it has been resized by the WM ++ while (gtk_events_pending ()) gtk_main_iteration (); ++ ++ //Get allocated size, and adjust the label accordingly ++ int w, h; ++ gtk_window_get_size(GTK_WINDOW(data->window), &w, &h); ++ ++ // Window_border Scrollbar (FFH) ++ w = w - GAIM_HIG_BORDER * 2 - GAIM_HIG_BORDER * 4; ++ gtk_widget_set_size_request(GTK_WIDGET(pri_label), w, -1); ++ //Let the prilabel handle the maxsize ++ gtk_widget_set_size_request(GTK_WIDGET(data->account_menu), 0, -1); ++ gtk_widget_set_size_request(GTK_WIDGET(data->entries_box), 0, -1); ++ gtk_widget_set_size_request(GTK_WIDGET(data->alias_entry), 0, -1); ++ gtk_widget_set_size_request(GTK_WIDGET(data->group_combo), 0, -1); ++ + } + + static void +Index: gaim/src/gtkrequest.c +=================================================================== +--- gaim.orig/src/gtkrequest.c 2005-08-19 21:57:30.273074704 +0200 ++++ gaim/src/gtkrequest.c 2005-08-19 21:58:05.468724152 +0200 +@@ -650,6 +650,17 @@ + /* Show everything. */ + gtk_widget_show_all(dialog); + ++ //Wait for the window to have recieved its "configure_event", ++ //which means it has been resized by the WM ++ while (gtk_events_pending ()) gtk_main_iteration (); ++ ++ //Get allocated size, and adjust widgets accordingly ++ int w, h; ++ gtk_window_get_size(GTK_WINDOW(dialog), &w, &h); ++ ++ w = w - GAIM_HIG_BORDER * 2; ++ gtk_widget_set_size_request(GTK_WIDGET(label), w, -1); ++ + return data; + } + diff --git a/packages/obsolete/gaim/files/04-saved-status-dialogs.patch b/packages/obsolete/gaim/files/04-saved-status-dialogs.patch new file mode 100644 index 0000000000..2cdf70c5c1 --- /dev/null +++ b/packages/obsolete/gaim/files/04-saved-status-dialogs.patch @@ -0,0 +1,40 @@ +Identiske underkataloger: src2/CVS og src/CVS +Identiske underkataloger: src2/.deps og src/.deps +Index: gaim/src/gtksavedstatuses.c +=================================================================== +--- gaim.orig/src/gtksavedstatuses.c 2005-08-13 07:54:33.000000000 +0200 ++++ gaim/src/gtksavedstatuses.c 2005-08-19 21:20:41.806812608 +0200 +@@ -417,6 +417,7 @@ + bbox = gtk_hbutton_box_new(); + gtk_box_set_spacing(GTK_BOX(bbox), GAIM_HIG_BOX_SPACE); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); ++ gtk_button_box_set_child_size(GTK_BUTTON_BOX(bbox), 20, -1); //DEPRECATED FFH + gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); + gtk_widget_show(bbox); + +@@ -449,12 +450,13 @@ + G_CALLBACK(status_window_delete_cb), dialog); + + /* Close button */ +- button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); ++ //We can do without the close button to save screen estate ++ /*button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + + g_signal_connect(G_OBJECT(button), "clicked", +- G_CALLBACK(status_window_close_cb), dialog); ++ G_CALLBACK(status_window_close_cb), dialog);*/ + + gtk_widget_show(win); + } +@@ -790,7 +792,8 @@ + disclosure = gaim_disclosure_new(_("Use a different status for some accounts"), + _("Use a different status for some accounts")); + gtk_box_pack_start(GTK_BOX(vbox), disclosure, FALSE, FALSE, 0); +- gtk_widget_show(disclosure); ++ //For now, do without the custom messages - not implemented yet ++ //gtk_widget_show(disclosure); + + /* Setup the box that the disclosure will cover */ + dbox = gtk_vbox_new(FALSE, GAIM_HIG_CAT_SPACE); diff --git a/packages/obsolete/gaim/files/05-statusbox-icon-size.patch b/packages/obsolete/gaim/files/05-statusbox-icon-size.patch new file mode 100644 index 0000000000..e18f3b2bcb --- /dev/null +++ b/packages/obsolete/gaim/files/05-statusbox-icon-size.patch @@ -0,0 +1,11 @@ +--- gaim.ori/src/gtkstatusbox.c 2005-09-04 20:42:29.000000000 +0200 ++++ gaim/src/gtkstatusbox.c 2005-09-05 08:44:13.000000000 +0200 +@@ -173,7 +173,7 @@ + + text_rend = gtk_cell_renderer_text_new(); + icon_rend = gtk_cell_renderer_pixbuf_new(); +- icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); ++ icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR; + + status_box->imhtml_visible = FALSE; + status_box->error_pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_OFFLINE, diff --git a/packages/obsolete/gaim/files/06-account-dialogs.patch b/packages/obsolete/gaim/files/06-account-dialogs.patch new file mode 100644 index 0000000000..9d2cb9acb0 --- /dev/null +++ b/packages/obsolete/gaim/files/06-account-dialogs.patch @@ -0,0 +1,219 @@ +Index: gaim/src/gtkaccount.c +=================================================================== +--- gaim.orig/src/gtkaccount.c 2005-08-25 17:16:44.000000000 +0200 ++++ gaim/src/gtkaccount.c 2005-08-29 22:34:25.511003600 +0200 +@@ -857,7 +857,6 @@ + { + GtkWidget *frame; + GtkWidget *vbox; +- GtkWidget *vbox2; + GtkWidget *hbox; + GtkWidget *hbox2; + GtkWidget *button; +@@ -901,12 +900,8 @@ + gaim_set_accessible_label (dialog->icon_entry, label); + dialog->icon_path = NULL; + +- vbox2 = gtk_vbox_new(FALSE, 0); +- gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0); +- gtk_widget_show(vbox2); +- + hbox2 = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); +- gtk_box_pack_start(GTK_BOX(vbox2), hbox2, FALSE, FALSE, GAIM_HIG_BORDER); ++ gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, GAIM_HIG_BORDER); + gtk_widget_show(hbox2); + + button = gtk_button_new_from_stock(GTK_STOCK_OPEN); +@@ -1275,7 +1270,18 @@ + gtk_option_menu_get_menu(GTK_OPTION_MENU(dialog->proxy_dropdown)); + #endif + +- add_pref_box(dialog, vbox, _("Proxy _type:"), dialog->proxy_dropdown); ++ GtkWidget *label; ++ label = gtk_label_new_with_mnemonic(_("Proxy _type:")); ++ gtk_size_group_add_widget(dialog->sg, label); ++ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); ++ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); ++ gtk_widget_show(label); ++ ++ gtk_box_pack_start(GTK_BOX(vbox), dialog->proxy_dropdown, TRUE, TRUE, GAIM_HIG_BORDER); ++ gtk_widget_show(dialog->proxy_dropdown); ++ gaim_set_accessible_label (dialog->proxy_dropdown, label); ++ ++ //add_pref_box(dialog, vbox, _("Proxy _type:"), dialog->proxy_dropdown); + + /* Setup the second vbox, which may be hidden at times. */ + dialog->proxy_vbox = vbox2 = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); +@@ -1643,6 +1649,7 @@ + AccountPrefsDialog *dialog; + GtkWidget *win; + GtkWidget *main_vbox; ++ GtkWidget *sw; + GtkWidget *vbox; + GtkWidget *bbox; + GtkWidget *dbox; +@@ -1709,10 +1716,19 @@ + gtk_box_pack_start(GTK_BOX(main_vbox), notebook, FALSE, FALSE, 0); + + /* Setup the inner vbox */ ++ //With a scrollbox ++ sw = gtk_scrolled_window_new(NULL, NULL); ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), ++ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); ++ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), ++ GTK_SHADOW_NONE); ++ gtk_widget_set_size_request(sw, -1, -1); ++ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), sw, ++ gtk_label_new_with_mnemonic("_Basic")); ++ gtk_widget_show(sw); + dialog->top_vbox = vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_set_border_width(GTK_CONTAINER(vbox), GAIM_HIG_BORDER); +- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, +- gtk_label_new_with_mnemonic("_Basic")); ++ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox); + gtk_widget_show(vbox); + + /* Setup the top frames. */ +@@ -1720,10 +1736,20 @@ + add_user_options(dialog, vbox); + + /* Setup the page with 'Advanced'. */ ++ //With a scrollbox ++ sw = gtk_scrolled_window_new(NULL, NULL); ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), ++ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); ++ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), ++ GTK_SHADOW_NONE); ++ gtk_widget_set_size_request(sw, -1, -1); ++ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), sw, ++ gtk_label_new_with_mnemonic("_Advanced")); ++ gtk_widget_show(sw); + dialog->bottom_vbox = dbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_set_border_width(GTK_CONTAINER(dbox), GAIM_HIG_BORDER); +- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dbox, +- gtk_label_new_with_mnemonic("_Advanced")); ++ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), dbox); ++ gtk_widget_show(dbox); + + /** Setup the bottom frames. */ + add_protocol_options(dialog, dbox); +@@ -1731,46 +1757,50 @@ + add_proxy_options(dialog, dbox); + + /* Setup the button box */ +- bbox = gtk_hbutton_box_new(); ++ //bbox = gtk_hbutton_box_new(); ++ //Replaced with a hbox, otherwise the Register-button doesn't fit (same size required) ++ bbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_box_set_spacing(GTK_BOX(bbox), GAIM_HIG_BOX_SPACE); +- gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + gtk_box_pack_end(GTK_BOX(main_vbox), bbox, FALSE, TRUE, 0); + gtk_widget_show(bbox); + +- /* Register button */ +- button = gtk_button_new_with_label(_("Register")); +- gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); +- gtk_widget_show(button); +- +- g_signal_connect(G_OBJECT(button), "clicked", +- G_CALLBACK(register_account_prefs_cb), dialog); +- +- dialog->register_button = button; +- ++ /* Save button */ ++ button = gtk_button_new_from_stock(GTK_STOCK_SAVE); ++ gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); ++ + if (dialog->account == NULL) + gtk_widget_set_sensitive(button, FALSE); + +- if (!dialog->prpl_info || !dialog->prpl_info->register_user) +- gtk_widget_hide(button); ++ gtk_widget_show(button); ++ ++ dialog->ok_button = button; ++ ++ g_signal_connect(G_OBJECT(button), "clicked", ++ G_CALLBACK(ok_account_prefs_cb), dialog); + + /* Cancel button */ + button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); +- gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); ++ gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + + g_signal_connect(G_OBJECT(button), "clicked", + G_CALLBACK(cancel_account_prefs_cb), dialog); + +- /* Save button */ +- button = gtk_button_new_from_stock(GTK_STOCK_SAVE); +- gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); ++ /* Register button */ ++ button = gtk_button_new_with_label(_("Register")); ++ gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); ++ gtk_widget_show(button); ++ ++ g_signal_connect(G_OBJECT(button), "clicked", ++ G_CALLBACK(register_account_prefs_cb), dialog); ++ ++ dialog->register_button = button; + + if (dialog->account == NULL) + gtk_widget_set_sensitive(button, FALSE); + +- gtk_widget_show(button); +- +- dialog->ok_button = button; ++ if (!dialog->prpl_info || !dialog->prpl_info->register_user) ++ gtk_widget_hide(button); + + /* Set up DND */ + gtk_drag_dest_set(dialog->window, +@@ -1783,11 +1813,20 @@ + g_signal_connect(G_OBJECT(dialog->window), "drag_data_received", + G_CALLBACK(account_dnd_recv), dialog); + +- g_signal_connect(G_OBJECT(button), "clicked", +- G_CALLBACK(ok_account_prefs_cb), dialog); +- + /* Show the window. */ + gtk_widget_show(win); ++ ++ //Wait for the window to have recieved its "configure_event", ++ //which means it has been resized by the WM ++ while (gtk_events_pending ()) gtk_main_iteration (); ++ ++ //Get allocated size, and adjust widgets accordingly ++ int w, h; ++ gtk_window_get_size(GTK_WINDOW(win), &w, &h); ++ ++ w = w - GAIM_HIG_BORDER * 2; ++ gtk_widget_set_size_request(GTK_WIDGET(dialog->protocol_menu), w, -1); ++ + } + + /************************************************************************** +@@ -2389,6 +2428,7 @@ + bbox = gtk_hbutton_box_new(); + gtk_box_set_spacing(GTK_BOX(bbox), GAIM_HIG_BOX_SPACE); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); ++ gtk_button_box_set_child_size(GTK_BUTTON_BOX(bbox), 20, -1); //DEPRECATED FFH + gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); + gtk_widget_show(bbox); + +@@ -2421,12 +2461,13 @@ + G_CALLBACK(ask_delete_account_cb), dialog); + + /* Close button */ +- button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); ++ //We can do without the close button to save screen estate ++ /*button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + + g_signal_connect(G_OBJECT(button), "clicked", +- G_CALLBACK(close_accounts_cb), dialog); ++ G_CALLBACK(close_accounts_cb), dialog);*/ + + /* Setup some gaim signal handlers. */ + gaim_signal_connect(gaim_connections_get_handle(), "signed-on", diff --git a/packages/obsolete/gaim/files/07-roomlist-dialog.patch b/packages/obsolete/gaim/files/07-roomlist-dialog.patch new file mode 100644 index 0000000000..2806c78fd4 --- /dev/null +++ b/packages/obsolete/gaim/files/07-roomlist-dialog.patch @@ -0,0 +1,67 @@ +Index: gaim/src/gtkroomlist.c +=================================================================== +--- gaim.orig/src/gtkroomlist.c 2005-08-13 01:53:28.000000000 +0200 ++++ gaim/src/gtkroomlist.c 2005-08-19 21:37:26.225117816 +0200 +@@ -129,7 +129,9 @@ + gtk_container_add(GTK_CONTAINER(dialog->sw), rl->tree); + + gtk_widget_set_sensitive(dialog->stop_button, TRUE); ++ gtk_widget_show(dialog->stop_button); + gtk_widget_set_sensitive(dialog->list_button, FALSE); ++ gtk_widget_hide(dialog->list_button); + gtk_widget_set_sensitive(dialog->join_button, FALSE); + } + +@@ -141,7 +143,9 @@ + gtk_widget_set_sensitive(dialog->account_widget, TRUE); + + gtk_widget_set_sensitive(dialog->stop_button, FALSE); ++ gtk_widget_hide(dialog->stop_button); + gtk_widget_set_sensitive(dialog->list_button, TRUE); ++ gtk_widget_show(dialog->list_button); + gtk_widget_set_sensitive(dialog->join_button, FALSE); + } + +@@ -396,7 +400,7 @@ + g_signal_connect(G_OBJECT(dialog->stop_button), "clicked", + G_CALLBACK(stop_button_cb), dialog); + gtk_widget_set_sensitive(dialog->stop_button, FALSE); +- gtk_widget_show(dialog->stop_button); ++ //gtk_widget_show(dialog->stop_button); + + /* list button */ + dialog->list_button = gtk_button_new_with_mnemonic(_("_Get List")); +@@ -415,11 +419,12 @@ + gtk_widget_show(dialog->join_button); + + /* close button */ +- dialog->close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); ++ //We can do without the close button to save screen estate ++ /*dialog->close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + gtk_box_pack_start(GTK_BOX(bbox), dialog->close_button, FALSE, FALSE, 0); + g_signal_connect(G_OBJECT(dialog->close_button), "clicked", + G_CALLBACK(close_button_cb), dialog); +- gtk_widget_show(dialog->close_button); ++ gtk_widget_show(dialog->close_button);*/ + + /* show the dialog window and return the dialog */ + gtk_widget_show(dialog->window); +@@ -683,14 +688,18 @@ + if (rl->dialog->account_widget) + gtk_widget_set_sensitive(rl->dialog->account_widget, FALSE); + gtk_widget_set_sensitive(rl->dialog->stop_button, TRUE); ++ gtk_widget_show(rl->dialog->stop_button); + gtk_widget_set_sensitive(rl->dialog->list_button, FALSE); ++ gtk_widget_hide(rl->dialog->list_button); + } else { + rl->dialog->pg_needs_pulse = FALSE; + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(rl->dialog->progress), 0.0); + if (rl->dialog->account_widget) + gtk_widget_set_sensitive(rl->dialog->account_widget, TRUE); + gtk_widget_set_sensitive(rl->dialog->stop_button, FALSE); ++ gtk_widget_hide(rl->dialog->stop_button); + gtk_widget_set_sensitive(rl->dialog->list_button, TRUE); ++ gtk_widget_show(rl->dialog->list_button); + } + } + diff --git a/packages/obsolete/gaim/files/08-prefs-dialog.patch b/packages/obsolete/gaim/files/08-prefs-dialog.patch new file mode 100644 index 0000000000..a8fcb89311 --- /dev/null +++ b/packages/obsolete/gaim/files/08-prefs-dialog.patch @@ -0,0 +1,64 @@ +--- gaim.ori/src/gtkprefs.c 2005-09-05 08:28:17.000000000 +0200 ++++ gaim/src/gtkprefs.c 2005-09-05 09:06:27.000000000 +0200 +@@ -2108,12 +2108,18 @@ + if (icon) + g_object_unref(icon); + +-#if GTK_CHECK_VERSION(2,4,0) +- return gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text)); +-#else +- gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text)); +- return gtk_notebook_page_num(GTK_NOTEBOOK(prefsnotebook), page); +-#endif ++ //Add a scrolled window around the page contents ++ GtkWidget *sw; ++ sw = gtk_scrolled_window_new(NULL, NULL); ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), ++ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); ++ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), ++ GTK_SHADOW_NONE); ++ //gtk_widget_set_size_request(sw, -1, 200); ++ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), page); ++ ++ ++ return gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), sw, gtk_label_new(text)); + } + + static void prefs_notebook_init() { +@@ -2146,9 +2152,9 @@ + void gaim_gtk_prefs_show(void) + { + GtkWidget *vbox; +- GtkWidget *bbox; ++ //GtkWidget *bbox; + GtkWidget *notebook; +- GtkWidget *button; ++ //GtkWidget *button; + + if (prefs) { + gtk_window_present(GTK_WINDOW(prefs)); +@@ -2176,11 +2182,13 @@ + + /* The notebook */ + prefsnotebook = notebook = gtk_notebook_new (); +- gtk_box_pack_start (GTK_BOX (vbox), notebook, FALSE, FALSE, 0); ++ gtk_notebook_set_scrollable(GTK_NOTEBOOK(prefsnotebook), TRUE); ++ gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0); + + + /* The buttons to press! */ +- bbox = gtk_hbutton_box_new(); ++ //To save screen estate we will do without a close button ++ /*bbox = gtk_hbutton_box_new(); + gtk_box_set_spacing(GTK_BOX(bbox), GAIM_HIG_BOX_SPACE); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); +@@ -2190,7 +2198,7 @@ + g_signal_connect_swapped(G_OBJECT(button), "clicked", + G_CALLBACK(gtk_widget_destroy), prefs); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); +- gtk_widget_show(button); ++ gtk_widget_show(button);*/ + + prefs_notebook_init(); + diff --git a/packages/obsolete/gaim/files/09-filetransfer-dialog.patch b/packages/obsolete/gaim/files/09-filetransfer-dialog.patch new file mode 100644 index 0000000000..c4fa3a0a6d --- /dev/null +++ b/packages/obsolete/gaim/files/09-filetransfer-dialog.patch @@ -0,0 +1,52 @@ +Index: gaim/src/gtkft.c +=================================================================== +--- gaim.orig/src/gtkft.c 2005-08-21 01:59:50.000000000 +0200 ++++ gaim/src/gtkft.c 2005-08-29 23:05:02.000000000 +0200 +@@ -772,24 +772,26 @@ + G_CALLBACK(open_button_cb), dialog); + + /* Pause button */ +- button = gtk_button_new_with_mnemonic(_("_Pause")); ++ /* Pause button has no function*/ ++ /*button = gtk_button_new_with_mnemonic(_("_Pause")); + gtk_widget_set_sensitive(button, FALSE); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + dialog->pause_button = button; + + g_signal_connect(G_OBJECT(button), "clicked", +- G_CALLBACK(pause_button_cb), dialog); ++ G_CALLBACK(pause_button_cb), dialog);*/ + + /* Resume button */ +- button = gtk_button_new_with_mnemonic(_("_Resume")); ++ /* Resume button has no function */ ++ /*button = gtk_button_new_with_mnemonic(_("_Resume")); + gtk_widget_set_sensitive(button, FALSE); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + dialog->resume_button = button; + + g_signal_connect(G_OBJECT(button), "clicked", +- G_CALLBACK(resume_button_cb), dialog); ++ G_CALLBACK(resume_button_cb), dialog);*/ + + /* Remove button */ + button = gtk_button_new_from_stock(GTK_STOCK_REMOVE); +@@ -811,13 +813,14 @@ + G_CALLBACK(stop_button_cb), dialog); + + /* Close button */ +- button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); ++ /* Do without a close button to save screen estate */ ++ /*button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + dialog->close_button = button; + + g_signal_connect(G_OBJECT(button), "clicked", +- G_CALLBACK(close_button_cb), dialog); ++ G_CALLBACK(close_button_cb), dialog);*/ + + return dialog; + } diff --git a/packages/obsolete/gaim/files/10-pda-default-settings.patch b/packages/obsolete/gaim/files/10-pda-default-settings.patch new file mode 100644 index 0000000000..953dc11612 --- /dev/null +++ b/packages/obsolete/gaim/files/10-pda-default-settings.patch @@ -0,0 +1,13 @@ +Index: gaim/src/gtkconv.c +=================================================================== +--- gaim.orig/src/gtkconv.c 2005-08-25 17:16:50.000000000 +0200 ++++ gaim/src/gtkconv.c 2005-08-29 23:56:48.142463528 +0200 +@@ -6126,7 +6126,7 @@ + gaim_prefs_add_bool("/gaim/gtk/conversations/spellcheck", TRUE); + gaim_prefs_add_bool("/gaim/gtk/conversations/show_incoming_formatting", TRUE); + +- gaim_prefs_add_bool("/gaim/gtk/conversations/show_formatting_toolbar", TRUE); ++ gaim_prefs_add_bool("/gaim/gtk/conversations/show_formatting_toolbar", FALSE); + gaim_prefs_add_bool("/gaim/gtk/conversations/passthrough_unknown_commands", FALSE); + + gaim_prefs_add_string("/gaim/gtk/conversations/placement", "last"); diff --git a/packages/obsolete/gaim/files/define-pda-mode.patch b/packages/obsolete/gaim/files/define-pda-mode.patch new file mode 100644 index 0000000000..f1a368bc73 --- /dev/null +++ b/packages/obsolete/gaim/files/define-pda-mode.patch @@ -0,0 +1,36 @@ +Index: gaim/src/gtkgaim.h +=================================================================== +--- gaim.orig/src/gtkgaim.h 2005-08-25 17:29:42.000000000 +0200 ++++ gaim/src/gtkgaim.h 2005-08-25 19:00:37.335318168 +0200 +@@ -57,14 +57,14 @@ + * Spacings between components, as defined by the + * Gnome Human Interface Guidelines. + */ +-#define GAIM_HIG_CAT_SPACE 18 +-#define GAIM_HIG_BORDER 12 +-#define GAIM_HIG_BOX_SPACE 6 ++#define GAIM_HIG_CAT_SPACE 9 ++#define GAIM_HIG_BORDER 6 ++#define GAIM_HIG_BOX_SPACE 3 + + /** + * Do we want icons in dialogs? + */ +-#define ICONS_IN_DIALOGS 1 ++#define ICONS_IN_DIALOGS 0 + + /** + * How many fields is there screen-space for vertically, before a scrollbar is needed? +Index: gaim/src/gtkutils.c +=================================================================== +--- gaim.orig/src/gtkutils.c 2005-08-25 19:01:19.630888264 +0200 ++++ gaim/src/gtkutils.c 2005-08-25 19:02:05.067980776 +0200 +@@ -398,7 +398,7 @@ + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + +- label = gtk_label_new(" "); ++ label = gtk_label_new(" "); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + diff --git a/packages/obsolete/gaim/files/desktop-name-2.0.0.patch b/packages/obsolete/gaim/files/desktop-name-2.0.0.patch new file mode 100644 index 0000000000..c921619721 --- /dev/null +++ b/packages/obsolete/gaim/files/desktop-name-2.0.0.patch @@ -0,0 +1,27 @@ +Index: gaim/gaim.desktop +=================================================================== +--- gaim.orig/gaim.desktop 2005-06-06 03:40:46.000000000 +0200 ++++ gaim/gaim.desktop 2005-08-21 02:00:18.525853592 +0200 +@@ -33,21 +33,7 @@ + GenericName[sq]=LajmĂ«sjellĂ«s Internet + GenericName[sv]=Meddelandeklient + GenericName[zh_CN]=äş’č”网通讯程序 +-Name=Gaim Internet Messenger +-Name[da]=Gaim - internet beskeder +-Name[de]=Gaim Internet Messenger +-Name[fr]=Gaim Messagerie InstantanĂ©e +-Name[hu]=Gaim IM +-Name[it]=Gaim Internet Messenger +-Name[ko]=게임 메신저 +-Name[nb]=Gaim lynmeldingsklient +-Name[nl]=Gaim - Expresberichten +-Name[pl]=Komunikator Internetowy Gaim +-Name[pt]=Mensageiro Internet Gaim +-Name[sl]=Gaim - spletni sel +-Name[sq]=LajmĂ«sjellĂ«si Internet Gaim +-Name[sv]=Gaim Internet Messenger +-Name[zh_CN]=Gaim äş’č”网通讯程序 ++Name=Gaim + Exec=gaim + Icon=gaim.png + StartupNotify=true diff --git a/packages/obsolete/gaim/files/desktop-name.patch b/packages/obsolete/gaim/files/desktop-name.patch new file mode 100644 index 0000000000..6095a77e47 --- /dev/null +++ b/packages/obsolete/gaim/files/desktop-name.patch @@ -0,0 +1,10 @@ +--- gaim-1.0.3/gaim.desktop.old 2005-01-01 16:48:58.000000000 +0000 ++++ gaim-1.0.3/gaim.desktop 2005-01-01 16:49:15.000000000 +0000 +@@ -1,6 +1,6 @@ + [Desktop Entry] + Encoding=UTF-8 +-Name=Gaim Internet Messenger ++Name=Gaim + Name[de]=Gaim Internet Messenger + Name[da]=Gaim - internet beskeder + Name[fr]=Gaim Messagerie InstantanĂ©e diff --git a/packages/obsolete/gaim/files/desktop-name_1.4.0.patch b/packages/obsolete/gaim/files/desktop-name_1.4.0.patch new file mode 100644 index 0000000000..3cfaa5771e --- /dev/null +++ b/packages/obsolete/gaim/files/desktop-name_1.4.0.patch @@ -0,0 +1,11 @@ +--- gaim-1.4.0/gaim.desktop.old 2005-07-15 00:58:50.000000000 +0200 ++++ gaim-1.4.0/gaim.desktop 2005-07-15 00:59:35.000000000 +0200 +@@ -7,7 +7,7 @@ + Terminal=false + Type=Application + +-Name=Gaim Internet Messenger ++Name=Gaim + Name[ca]=Missatger d'Internet Gaim + Name[cs]=Gaim Internet Messenger + Name[da]=Gaim - internet beskeder diff --git a/packages/obsolete/gaim/files/desktop-name_1.5.0.patch b/packages/obsolete/gaim/files/desktop-name_1.5.0.patch new file mode 100644 index 0000000000..3cfaa5771e --- /dev/null +++ b/packages/obsolete/gaim/files/desktop-name_1.5.0.patch @@ -0,0 +1,11 @@ +--- gaim-1.4.0/gaim.desktop.old 2005-07-15 00:58:50.000000000 +0200 ++++ gaim-1.4.0/gaim.desktop 2005-07-15 00:59:35.000000000 +0200 +@@ -7,7 +7,7 @@ + Terminal=false + Type=Application + +-Name=Gaim Internet Messenger ++Name=Gaim + Name[ca]=Missatger d'Internet Gaim + Name[cs]=Gaim Internet Messenger + Name[da]=Gaim - internet beskeder diff --git a/packages/obsolete/gaim/files/docklet-icon-size.patch b/packages/obsolete/gaim/files/docklet-icon-size.patch new file mode 100644 index 0000000000..6b8047a30c --- /dev/null +++ b/packages/obsolete/gaim/files/docklet-icon-size.patch @@ -0,0 +1,13 @@ +Index: gaim/plugins/docklet/docklet-x11.c +=================================================================== +--- gaim.orig/plugins/docklet/docklet-x11.c 2005-04-02 17:23:28.000000000 +0200 ++++ gaim/plugins/docklet/docklet-x11.c 2005-08-21 02:06:51.869056336 +0200 +@@ -112,7 +112,7 @@ + break; + } + +- gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); ++ gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, GTK_ICON_SIZE_SMALL_TOOLBAR); + + #if 0 + GdkPixbuf *p; diff --git a/packages/obsolete/gaim/files/gaim-OE-branding.patch b/packages/obsolete/gaim/files/gaim-OE-branding.patch new file mode 100644 index 0000000000..d090899cac --- /dev/null +++ b/packages/obsolete/gaim/files/gaim-OE-branding.patch @@ -0,0 +1,11 @@ +--- /tmp/irc.h 2005-10-04 14:10:59.699874560 +0200 ++++ gaim/src/protocols/irc/irc.h 2005-10-04 14:13:10.135045400 +0200 +@@ -35,7 +35,7 @@ + #define IRC_DEFAULT_CHARSET "UTF-8" + #define IRC_DEFAULT_ALIAS "gaim" + +-#define IRC_DEFAULT_QUIT "Download Gaim: " GAIM_WEBSITE ++#define IRC_DEFAULT_QUIT "Powered by OE: www.openembedded.org" + + #define IRC_INITIAL_BUFSIZE 1024 + diff --git a/packages/obsolete/gaim/files/gevolution-eds-dbus.patch b/packages/obsolete/gaim/files/gevolution-eds-dbus.patch new file mode 100644 index 0000000000..0b7479d4f7 --- /dev/null +++ b/packages/obsolete/gaim/files/gevolution-eds-dbus.patch @@ -0,0 +1,53 @@ +--- gaim/plugins/gevolution/gevolution.c.orig 2006-02-23 23:30:25.000000000 +0100 ++++ gaim/plugins/gevolution/gevolution.c 2006-02-23 23:31:42.000000000 +0100 +@@ -38,17 +38,12 @@ + +-#include + +-#include +-#include +-#include ++#include ++#include + + #include + + #define GEVOLUTION_PLUGIN_ID "gtk-x11-gevolution" + +-#define E_DATA_BOOK_FACTORY_OAF_ID \ +- "OAFIID:GNOME_Evolution_DataServer_BookFactory" +- + enum + { + COLUMN_AUTOADD, +@@ -324,8 +320,6 @@ + static gboolean + plugin_load(GaimPlugin *plugin) + { +- bonobo_activate(); +- + backup_blist_ui_ops = gaim_blist_get_ui_ops(); + + blist_ui_ops = g_memdup(backup_blist_ui_ops, sizeof(GaimBlistUiOps)); +@@ -370,7 +364,6 @@ + static void + plugin_destroy(GaimPlugin *plugin) + { +- bonobo_debug_shutdown(); + } + + static void +@@ -563,13 +556,6 @@ + * So, in conclusion, this is an evil hack, but it doesn't harm anything + * and it works. + */ +- g_module_make_resident(plugin->handle); +- +- if (!bonobo_init_full(NULL, NULL, bonobo_activation_orb_get(), +- CORBA_OBJECT_NIL, CORBA_OBJECT_NIL)) +- { +- gaim_debug_error("evolution", "Unable to initialize bonobo.\n"); +- } + } + + GAIM_INIT_PLUGIN(gevolution, init_plugin, info) diff --git a/packages/obsolete/gaim/files/gtk-deprecated-2.0.0.patch b/packages/obsolete/gaim/files/gtk-deprecated-2.0.0.patch new file mode 100644 index 0000000000..04bb9244f0 --- /dev/null +++ b/packages/obsolete/gaim/files/gtk-deprecated-2.0.0.patch @@ -0,0 +1,13 @@ +--- gaim/configure.ac.orig 2005-12-19 23:04:14 +0100 ++++ gaim/configure.ac 2005-12-19 23:04:49 +0100 +@@ -442,10 +442,6 @@ + fi + fi + +-if test "x$enable_deprecated" = "xno"; then +- DEBUG_CFLAGS="$DEBUG_CFLAGS -DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED" +-fi +- + if test "x$GCC" = "xyes"; then + DEBUG_CFLAGS="-Wall $DEBUG_CFLAGS" + CFLAGS="-g $CFLAGS" diff --git a/packages/obsolete/gaim/files/no-superimposed-version-on-logo.patch b/packages/obsolete/gaim/files/no-superimposed-version-on-logo.patch new file mode 100644 index 0000000000..86809dfe98 --- /dev/null +++ b/packages/obsolete/gaim/files/no-superimposed-version-on-logo.patch @@ -0,0 +1,19 @@ +Index: gaim/src/gtkstock.c +=================================================================== +--- gaim.orig/src/gtkstock.c 2005-08-15 08:52:45.000000000 +0200 ++++ gaim/src/gtkstock.c 2005-08-19 18:13:26.550881552 +0200 +@@ -214,12 +214,12 @@ + + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + + g_free(filename); + +- if (!strcmp(stock_icons[i].name, GAIM_STOCK_LOGO)) +- gaim_gtk_stock_versionize(&pixbuf, win); ++ /*if (!strcmp(stock_icons[i].name, GAIM_STOCK_LOGO)) ++ gaim_gtk_stock_versionize(&pixbuf, win);*/ + + iconset = gtk_icon_set_new_from_pixbuf(pixbuf); + + g_object_unref(G_OBJECT(pixbuf)); + } diff --git a/packages/obsolete/gaim/files/series b/packages/obsolete/gaim/files/series new file mode 100644 index 0000000000..c7a16f71c1 --- /dev/null +++ b/packages/obsolete/gaim/files/series @@ -0,0 +1,14 @@ +no-superimposed-version-on-logo.patch +01-optional-icons-in-dialogs.patch +02-request-field-dialogs.patch +03-blist-dialogs.patch +04-saved-status-dialogs.patch +05-statusbox-icon-size.patch +06-account-dialogs.patch +07-roomlist-dialog.patch +define-pda-mode.patch +desktop-name-2.0.0.patch +docklet-icon-size.patch +08-prefs-dialog.patch +09-filetransfer-dialog.patch +10-pda-default-settings.patch diff --git a/packages/obsolete/gaim/gaim.inc b/packages/obsolete/gaim/gaim.inc new file mode 100644 index 0000000000..d2fb38881a --- /dev/null +++ b/packages/obsolete/gaim/gaim.inc @@ -0,0 +1,35 @@ +SECTION = "x11/network" +DESCRIPTION = "multi-protocol instant messaging client" +LICENSE = "GPL" + +DEPENDS = "gtk+ gnutls virtual/libintl" +RRECOMMENDS_${PN} = "gaim-protocol-irc gaim-protocol-jabber gaim-plugin-docklet" + +EXTRA_OECONF = "--disable-audio --disable-perl --disable-tcl --disable-deprecated" + +FILES_${PN} = "${bindir} ${sbindir} ${libexecdir} ${libdir}/lib*.so.* \ + ${sysconfdir} ${sharedstatedir} ${localstatedir} \ + /bin /sbin /lib/*.so* ${datadir}/${PN} ${libdir}/${PN}/*.so \ + ${datadir}/pixmaps ${datadir}/applications \ + ${datadir}/idl ${datadir}/omf ${datadir}/sounds \ + ${libdir}/bonobo/servers" +FILES_${PN}-dev += "${libdir}/gaim/*.la" + +inherit autotools gettext + +PACKAGES_DYNAMIC = "gaim-protocol-* gaim-plugin-*" + +python populate_packages_prepend () { + root = bb.data.expand('${libdir}/gaim', d) + + do_split_packages(d, root, '^([^l][^i][^b].*)\.so$', + output_pattern='gaim-plugin-%s', + description='GAIM plugin %s', + prepend=True) + + do_split_packages(d, root, '^lib(.*)\.so$', + output_pattern='gaim-protocol-%s', + description='GAIM protocol plugin for %s', + prepend=True, + aux_files_pattern=['${datadir}/pixmaps/gaim/status/default/%s.png', '${datadir}/pixmaps/gaim/smileys/default/%s_*']) +} diff --git a/packages/obsolete/gaim/gaim_1.0.3.bb b/packages/obsolete/gaim/gaim_1.0.3.bb new file mode 100644 index 0000000000..f833ddde28 --- /dev/null +++ b/packages/obsolete/gaim/gaim_1.0.3.bb @@ -0,0 +1,6 @@ +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ + file://desktop-name.patch;patch=1" + +require gaim.inc diff --git a/packages/obsolete/gaim/gaim_1.1.0.bb b/packages/obsolete/gaim/gaim_1.1.0.bb new file mode 100644 index 0000000000..f833ddde28 --- /dev/null +++ b/packages/obsolete/gaim/gaim_1.1.0.bb @@ -0,0 +1,6 @@ +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ + file://desktop-name.patch;patch=1" + +require gaim.inc diff --git a/packages/obsolete/gaim/gaim_1.1.1.bb b/packages/obsolete/gaim/gaim_1.1.1.bb new file mode 100644 index 0000000000..f833ddde28 --- /dev/null +++ b/packages/obsolete/gaim/gaim_1.1.1.bb @@ -0,0 +1,6 @@ +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ + file://desktop-name.patch;patch=1" + +require gaim.inc diff --git a/packages/obsolete/gaim/gaim_1.1.2.bb b/packages/obsolete/gaim/gaim_1.1.2.bb new file mode 100644 index 0000000000..3bf9aeb3a7 --- /dev/null +++ b/packages/obsolete/gaim/gaim_1.1.2.bb @@ -0,0 +1,9 @@ +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ + file://desktop-name.patch;patch=1" + +require gaim.inc + +CFLAGS += "-D_GNU_SOURCE" + diff --git a/packages/obsolete/gaim/gaim_1.4.0.bb b/packages/obsolete/gaim/gaim_1.4.0.bb new file mode 100644 index 0000000000..1585229b14 --- /dev/null +++ b/packages/obsolete/gaim/gaim_1.4.0.bb @@ -0,0 +1,9 @@ +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ + file://desktop-name_1.4.0.patch;patch=1" + +require gaim.inc + +CFLAGS += "-D_GNU_SOURCE" + diff --git a/packages/obsolete/gaim/gaim_1.5.0.bb b/packages/obsolete/gaim/gaim_1.5.0.bb new file mode 100644 index 0000000000..3bf9aeb3a7 --- /dev/null +++ b/packages/obsolete/gaim/gaim_1.5.0.bb @@ -0,0 +1,9 @@ +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \ + file://desktop-name.patch;patch=1" + +require gaim.inc + +CFLAGS += "-D_GNU_SOURCE" + diff --git a/packages/obsolete/gaim/gaim_2.0.0-cvs-mco1.bb b/packages/obsolete/gaim/gaim_2.0.0-cvs-mco1.bb new file mode 100644 index 0000000000..bf8591920c --- /dev/null +++ b/packages/obsolete/gaim/gaim_2.0.0-cvs-mco1.bb @@ -0,0 +1,44 @@ +PR = "r3" +SRCDATE_${PN} = "20050904" +#Change to x.y.z+cvs${SRCDATE}-mco1 when 2.0.0 changes +PV = "2.0.0-cvs-mco1-${SRCDATE}" + +DEFAULT_PREFERENCE = "-1" + +WEBCVSURL = "http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/gaim" + +SRC_URI = "cvs://anonymous@gaim.cvs.sourceforge.net/cvsroot/gaim;module=gaim \ + ${WEBCVSURL}/no-superimposed-version-on-logo.patch;patch=1 \ + ${WEBCVSURL}/01-optional-icons-in-dialogs.patch;patch=1 \ + ${WEBCVSURL}/02-request-field-dialogs.patch;patch=1 \ + ${WEBCVSURL}/03-blist-dialogs.patch;patch=1 \ + ${WEBCVSURL}/04-saved-status-dialogs.patch;patch=1 \ + ${WEBCVSURL}/05-statusbox-icon-size.patch;patch=1 \ + ${WEBCVSURL}/06-account-dialogs.patch;patch=1 \ + ${WEBCVSURL}/07-roomlist-dialog.patch;patch=1 \ + ${WEBCVSURL}/define-pda-mode.patch;patch=1 \ + ${WEBCVSURL}/desktop-name-2.0.0.patch;patch=1 \ + ${WEBCVSURL}/docklet-icon-size.patch;patch=1 \ + ${WEBCVSURL}/08-prefs-dialog.patch;patch=1 \ + ${WEBCVSURL}/09-filetransfer-dialog.patch;patch=1 \ + ${WEBCVSURL}/10-pda-default-settings.patch;patch=1 \ + file://gaim-OE-branding.patch;patch=1 \ + " + +require gaim.inc + +S = "${WORKDIR}/gaim" + +CFLAGS += "-D_GNU_SOURCE" + + +DEPENDS += "startup-notification" + +#include autopoint (gettext) +EXTRA_AUTORECONF = "" + +#disable "X Session Management"... It is EVIL +EXTRA_OECONF += "--disable-sm --enable-startup-notification \ + --with-gnutls-includes=${STAGING_INCDIR}" + + diff --git a/packages/pidgin/.mtn2git_empty b/packages/pidgin/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/pidgin/pidgin.inc b/packages/pidgin/pidgin.inc new file mode 100644 index 0000000000..a2ef61a508 --- /dev/null +++ b/packages/pidgin/pidgin.inc @@ -0,0 +1,85 @@ +SECTION = "x11/network" +DESCRIPTION = "multi-protocol instant messaging client" +LICENSE = "GPL" + +DEPENDS = "avahi gtk+ ncurses gnutls virtual/libintl gstreamer dbus" +RRECOMMENDS_${PN} = "libpurple-plugin-ssl-gnutls libpurple-protocol-irc libpurple-protocol-xmpp" + +EXTRA_OECONF = " \ + --disable-audio \ + --disable-perl \ + --disable-tcl \ + --disable-deprecated \ + --disable-gevolution \ + --x-includes=${STAGING_INCDIR} \ + --x-libraries=${STAGING_LIBDIR} \ + --enable-gnutls=yes \ + --with-ncurses-headers=${STAGING_INCDIR} \ + --with-gnutls-includes=${STAGING_INCDIR} \ + --with-gnutls-libs=${STAGING_LIBDIR} \ + " + +OE_LT_RPATH_ALLOW=":${libdir}/purple-2:" +OE_LT_RPATH_ALLOW[export]="1" + +PACKAGES =+ "libpurple libpurple-dev libpurple-dbg libpurple-liboscar libpurple-libjabber libpurple-logreader finch finch-dev finch-dbg" + + +LEAD_SONAME = "libpurple.so.0" +FILES_libpurple = "${libdir}/libpurple*.so.* /usr/bin/purple-* /etc/gconf/schemas/purple*" +FILES_libpurple-dev = "${libdir}/libpurple* \ + ${libdir}/purple-2/*.la " +FILES_libpurple-dbg += "${libdir}/.debug/libpurple* \ + ${libdir}/purple-2/.debug" +FILES_libpurple-liboscar = "${libdir}/purple-2/liboscar.so.*" +FILES_libpurple-libjabber = "${libdir}/purple-2/libjabber.so.*" +FILES_libpurple-logreader = "${libdir}/purple-2/log_reader.so" +FILES_finch = "${bindir}/finch /usr/lib/libgnt.so.*" +FILES_finch-dev = "${libdir}/finch/*.la" +FILES_finch-dbg = "${bindir}/.debug/finch \ + ${libdir}/finch/.debug" + +FILES_${PN} = "${bindir} ${sbindir} ${libexecdir} ${libdir}/lib*.so.* \ + ${sysconfdir} ${sharedstatedir} ${localstatedir} \ + /bin /sbin /lib/*.so* ${datadir}/${PN} ${libdir}/${PN}/*.so \ + ${datadir}/pixmaps ${datadir}/applications \ + ${datadir}/idl ${datadir}/omf ${datadir}/sounds \ + ${libdir}/bonobo/servers ${datadir}/icons" +FILES_${PN}-dev += "${libdir}/pidgin/*.la" + +inherit autotools gettext pkgconfig gconf + +PACKAGES_DYNAMIC = "libpurple-protocol-* libpurple-plugin-* pidgin-plugin-* finch-plugin-*" + +python populate_packages_prepend () { + root = bb.data.expand('${libdir}/pidgin', d) + purple = bb.data.expand('${libdir}/purple-2', d) + finch = bb.data.expand('${libdir}/finch', d) + + do_split_packages(d, root, '^([^l][^i][^b].*)\.so$', + output_pattern='pidgin-plugin-%s', + description='Pidgin plugin %s', + prepend=True, extra_depends='') + + do_split_packages(d, purple, '^lib(.*)\.so$', + output_pattern='libpurple-protocol-%s', + description='Libpurple protocol plugin for %s', + prepend=True, extra_depends='') + + do_split_packages(d, purple, '^(ssl-.*)\.so$', + output_pattern='libpurple-plugin-%s', + description='libpurple plugin %s', + prepend=True, extra_depends='libpurple-plugin-ssl') + + do_split_packages(d, purple, '^([^l][^i][^b].*)\.so$', + output_pattern='libpurple-plugin-%s', + description='libpurple plugin %s', + prepend=True, extra_depends='') + + do_split_packages(d, finch, '^([^l][^i][^b].*)\.so$', + output_pattern='finch-plugin-%s', + description='Finch plugin %s', + prepend=True, extra_depends='') + + +} diff --git a/packages/pidgin/pidgin/.mtn2git_empty b/packages/pidgin/pidgin/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/pidgin/pidgin/gconf-no-errors.patch b/packages/pidgin/pidgin/gconf-no-errors.patch new file mode 100644 index 0000000000..9a95175ac9 --- /dev/null +++ b/packages/pidgin/pidgin/gconf-no-errors.patch @@ -0,0 +1,12 @@ +--- /tmp/Makefile.am 2007-05-08 18:39:49.000000000 +0200 ++++ pidgin-2.0.0/libpurple/gconf/Makefile.am 2007-05-08 18:40:13.755251000 +0200 +@@ -8,8 +8,7 @@ + + if GCONF_SCHEMAS_INSTALL + install-data-local: +- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA) 2>&1 | \ +- grep -v "^WARNING: failed to install schema" | grep -v "^Attached schema" 1>&2 ++ GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA) 2>&1 + else + install-data-local: + endif diff --git a/packages/pidgin/pidgin/pidgin.desktop-set-icon.patch b/packages/pidgin/pidgin/pidgin.desktop-set-icon.patch new file mode 100644 index 0000000000..05f76895ba --- /dev/null +++ b/packages/pidgin/pidgin/pidgin.desktop-set-icon.patch @@ -0,0 +1,11 @@ +--- pidgin-2.0.1/pidgin.desktop.in.orig 2007-06-20 23:50:44.000000000 +0000 ++++ pidgin-2.0.1/pidgin.desktop.in 2007-06-20 23:51:05.000000000 +0000 +@@ -4,7 +4,7 @@ + _GenericName=Internet Messenger + _Comment=Send instant messages over multiple protocols + Exec=pidgin +-Icon=pidgin ++Icon=/usr/share/icons/hicolor/48x48/apps/pidgin.png + StartupNotify=true + Terminal=false + Type=Application diff --git a/packages/pidgin/pidgin/purple-OE-branding.patch b/packages/pidgin/pidgin/purple-OE-branding.patch new file mode 100644 index 0000000000..99c61375ce --- /dev/null +++ b/packages/pidgin/pidgin/purple-OE-branding.patch @@ -0,0 +1,14 @@ +--- /tmp/irc.h 2007-08-04 20:27:10.000000000 +0200 ++++ pidgin-2.1.0/libpurple/protocols/irc/irc.h 2007-08-04 20:28:15.318400000 +0200 +@@ -35,9 +35,9 @@ + #define IRC_DEFAULT_SSL_PORT 994 + + #define IRC_DEFAULT_CHARSET "UTF-8" +-#define IRC_DEFAULT_ALIAS "purple" ++#define IRC_DEFAULT_ALIAS "OE-user" + +-#define IRC_DEFAULT_QUIT "Leaving." ++#define IRC_DEFAULT_QUIT "Powered by OE: www.openembedded.org" + + #define IRC_INITIAL_BUFSIZE 1024 + diff --git a/packages/pidgin/pidgin/sanitize-configure.ac.patch b/packages/pidgin/pidgin/sanitize-configure.ac.patch new file mode 100644 index 0000000000..a77d64f40b --- /dev/null +++ b/packages/pidgin/pidgin/sanitize-configure.ac.patch @@ -0,0 +1,33 @@ +--- /tmp/configure.ac 2007-05-08 17:29:02.000000000 +0200 ++++ pidgin-2.0.0/configure.ac 2007-05-08 17:30:30.325251000 +0200 +@@ -472,7 +472,7 @@ + if test "x$enable_consoleui" = "xyes"; then + dnl # Some distros put the headers in ncursesw/, some don't + found_ncurses_h=no +- for location in $ac_ncurses_includes $NCURSES_HEADERS /usr/include/ncursesw /usr/include ++ for location in $ac_ncurses_includes $NCURSES_HEADERS + do + f="$location/ncurses.h" + AC_CHECK_HEADER($f,[ +@@ -1860,10 +1860,6 @@ + KRB4_CFLAGS="$KRB4_CFLAGS -I${kerberos}/include/kerberosIV" + fi + KRB4_LDFLAGS="-L${kerberos}/lib" +- elif test -d /usr/local/include/kerberosIV ; then +- KRB4_CFLAGS="-I/usr/local/include/kerberosIV" +- elif test -d /usr/include/kerberosIV ; then +- KRB4_CFLAGS="-I/usr/include/kerberosIV" + fi + AC_DEFINE(ZEPHYR_USES_KERBEROS, 1, [Define if kerberos should be used in Zephyr.]) + +@@ -1896,10 +1892,6 @@ + ZEPHYR_LDFLAGS="-L${zephyr}/lib" + elif test -d /usr/athena/include/zephyr ; then + ZEPHYR_CFLAGS="-I/usr/athena/include" +- elif test -d /usr/include/zephyr ; then +- ZEPHYR_CFLAGS="-I/usr/include" +- elif test -d /usr/local/include/zephyr ; then +- ZEPHYR_CFLAGS="-I/usr/local/include" + fi + AC_DEFINE(LIBZEPHYR_EXT, 1 , [Define if external libzephyr should be used.]) + AM_CONDITIONAL(EXTERNAL_LIBZEPHYR, test "x$zephyr" != "xno") diff --git a/packages/pidgin/pidgin_2.0.2.bb b/packages/pidgin/pidgin_2.0.2.bb new file mode 100644 index 0000000000..2cc02c5072 --- /dev/null +++ b/packages/pidgin/pidgin_2.0.2.bb @@ -0,0 +1,9 @@ +require pidgin.inc + +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 \ + " + +PR = "r1" diff --git a/packages/pidgin/pidgin_2.1.1.bb b/packages/pidgin/pidgin_2.1.1.bb new file mode 100644 index 0000000000..5531880669 --- /dev/null +++ b/packages/pidgin/pidgin_2.1.1.bb @@ -0,0 +1,10 @@ +require pidgin.inc + +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 \ + " + +PR = "r0" diff --git a/packages/pidgin/pidgin_2.2.1.bb b/packages/pidgin/pidgin_2.2.1.bb new file mode 100644 index 0000000000..5531880669 --- /dev/null +++ b/packages/pidgin/pidgin_2.2.1.bb @@ -0,0 +1,10 @@ +require pidgin.inc + +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 \ + " + +PR = "r0" -- cgit v1.2.3 From 1bd9cd965d8cbef3eeb9527284e246d2a526d41d Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Wed, 20 Feb 2008 01:27:34 +0000 Subject: angstrom-2008-preferred-versions.inc: bump libtool to 1.5.10. version 1.2.14 no longer exist. --- conf/distro/include/angstrom-2008-preferred-versions.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/include/angstrom-2008-preferred-versions.inc b/conf/distro/include/angstrom-2008-preferred-versions.inc index 5641c8ee39..b8685a578e 100644 --- a/conf/distro/include/angstrom-2008-preferred-versions.inc +++ b/conf/distro/include/angstrom-2008-preferred-versions.inc @@ -1,7 +1,7 @@ PREFERRED_VERSION_dbus = "1.1.4" PREFERRED_VERSION_busybox = "1.9.1" PREFERRED_VERSION_gst-pulse = "0.9.7" -PREFERRED_VERSION_libtool = "1.2.14" +PREFERRED_VERSION_libtool = "1.5.10" PREFERRED_VERSION_pulseaudio = "0.9.9" PREFERRED_VERSION_udev = "118" PREFERRED_VERSION_vte = "0.16.10" -- cgit v1.2.3 From baf2170838af7e63f7aea9049972018e27d36957 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 20 Feb 2008 02:01:26 +0000 Subject: bvi 1.3.1: Usual "don't install -s" patch. --- packages/bvi/bvi-1.3.1/no-strip.patch | 13 +++++++++++++ packages/bvi/bvi_1.3.1.bb | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 packages/bvi/bvi-1.3.1/no-strip.patch diff --git a/packages/bvi/bvi-1.3.1/no-strip.patch b/packages/bvi/bvi-1.3.1/no-strip.patch new file mode 100644 index 0000000000..520b058ea0 --- /dev/null +++ b/packages/bvi/bvi-1.3.1/no-strip.patch @@ -0,0 +1,13 @@ +--- 1/Makefile.in.org 2001-12-25 15:37:37.000000000 +0200 ++++ 1/Makefile.in 2008-02-20 02:54:56.000000000 +0200 +@@ -63,8 +63,8 @@ + install: all installdirs + @echo "Installing bvi" + @$(INSTALL_DATA) bvi.1 bmore.1 $(man1dir) +- @$(INSTALL_PROGRAM) -s bvi $(bindir) +- @$(INSTALL_PROGRAM) -s bmore $(bindir) ++ @$(INSTALL_PROGRAM) bvi $(bindir) ++ @$(INSTALL_PROGRAM) bmore $(bindir) + @$(INSTALL_DATA) bmore.help $(datadir) + @if [ -f $(bindir)/bview ]; then rm $(bindir)/bview; fi + @if [ -f $(bindir)/bvedit ]; then rm $(bindir)/bvedit; fi diff --git a/packages/bvi/bvi_1.3.1.bb b/packages/bvi/bvi_1.3.1.bb index 8e7a8adbe9..b6525aad88 100644 --- a/packages/bvi/bvi_1.3.1.bb +++ b/packages/bvi/bvi_1.3.1.bb @@ -3,9 +3,11 @@ DESCRIPTION = "binary vi (binary file editor)" SECTION = "console/utils" DEPENDS = "ncurses" LICENSE = "GPL" +PR = "r1" SRC_URI = "${SOURCEFORGE_MIRROR}/bvi/bvi-${PV}.src.tar.gz \ file://configure.patch;patch=1 \ - file://compile.patch;patch=1" + file://compile.patch;patch=1 \ + file://no-strip.patch;patch=1" inherit autotools -- cgit v1.2.3 From fd0389bfa4e929d119e4d0aada7d6016762b4835 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 20 Feb 2008 02:03:06 +0000 Subject: openwrt-sdk.conf: Start adding package renaming stuff. --- conf/distro/openwrt-sdk.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/distro/openwrt-sdk.conf b/conf/distro/openwrt-sdk.conf index 92e5ac5b39..0646b17f90 100644 --- a/conf/distro/openwrt-sdk.conf +++ b/conf/distro/openwrt-sdk.conf @@ -20,10 +20,14 @@ require conf/distro/generic-uclibc.conf DISTRO_NAME = "OpenWRT" DISTRO_REVISION = "2" +# Build ipk's wrapped with tar.gz instead of ar, like OpenWRT has them IPKGBUILDCMD = "ipkg-build -c -o 0 -g 0" # This is what lives in SDK ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}gcc virtual/libc" +# Rename packages to names used in OpenWRT +PKG_ncurses = "libncurses" + # Make sure that we have correct package dependencies for SDK-provided libs. ASSUME_SHLIBS += "libc.so.0:uclibc libm.so.0:uclibc libgcc_s.so.1:libgcc" -- cgit v1.2.3 From 4a8911b57e11158f59bd97cb1fadf7baa267ad32 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Wed, 20 Feb 2008 06:22:26 +0000 Subject: altboot: RRECOMMENDS e2fsprogs-mke2fs, bump PR * e2fsprogs-mke2fs is needed to generate loop-image --- packages/altboot/altboot.inc | 2 +- packages/altboot/altboot_1.0.8+1.0.9_pre1.bb | 2 +- packages/altboot/altboot_1.0.8.bb | 2 +- packages/altboot/altboot_1.1.1+wip-SVNR78.bb | 2 +- packages/altboot/altboot_svn.bb | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/altboot/altboot.inc b/packages/altboot/altboot.inc index 9fe1e7a03b..772a6b8eb4 100644 --- a/packages/altboot/altboot.inc +++ b/packages/altboot/altboot.inc @@ -3,7 +3,7 @@ HOMEPAGE = "http://www.hentges.net/misc/openzaurus/index.shtml" LICENSE = "GPL" RDEPENDS_${PN} = "${PN}-conf" RDEPENDS_${PN}-conf = "${PN}" -RRECOMMENDS_${PN} = "e2fsprogs-e2fsck dosfstools kexec-tools kernel-module-loop" +RRECOMMENDS_${PN} = "e2fsprogs-e2fsck e2fsprogs-mke2fs dosfstools kexec-tools kernel-module-loop" RRECOMMENDS_${PN}_spitz += " kernel-module-jffs2" S = "${WORKDIR}/trunk/" diff --git a/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb index aa359ff0c9..3890e68893 100644 --- a/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb +++ b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb @@ -9,7 +9,7 @@ DEFAULT_PREFERENCE = "-1" #RDEPENDS_${PN}_append_poodle = " kexec-tools" #RDEPENDS_${PN}-conf = "${PN}" -PR = "r1" +PR = "r2" SVN_REV="65" #TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-')}" diff --git a/packages/altboot/altboot_1.0.8.bb b/packages/altboot/altboot_1.0.8.bb index de2a249010..3e18111a5b 100644 --- a/packages/altboot/altboot_1.0.8.bb +++ b/packages/altboot/altboot_1.0.8.bb @@ -1,6 +1,6 @@ require altboot.inc -PR = "r3" +PR = "r4" TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-')}" SRC_URI = "svn://hentges.net/public/altboot/tags/;module=${TAG};proto=svn" diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR78.bb b/packages/altboot/altboot_1.1.1+wip-SVNR78.bb index be50911f69..db7c10d79f 100644 --- a/packages/altboot/altboot_1.1.1+wip-SVNR78.bb +++ b/packages/altboot/altboot_1.1.1+wip-SVNR78.bb @@ -1,6 +1,6 @@ require altboot.inc -PR = "r1" +PR = "r2" SVN_REV = "78" SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \ diff --git a/packages/altboot/altboot_svn.bb b/packages/altboot/altboot_svn.bb index a736ccd7c4..85a7fe612f 100644 --- a/packages/altboot/altboot_svn.bb +++ b/packages/altboot/altboot_svn.bb @@ -1,7 +1,7 @@ require altboot.inc PV = "1.1.1+wip-${SRCDATE}" -PR = "r3" +PR = "r4" SRC_URI = "svn://hentges.net/public/altboot;module=trunk;proto=svn" -- cgit v1.2.3 From e8570d9b6260850e2e369d9c855eae39fe8a18cc Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Wed, 20 Feb 2008 07:00:08 +0000 Subject: navit: new upstream release 0.0.4 * bump 0.0.3 to 0.0.4, which is the last alpha release * bump cvs to 0.1.0cvs, add DEFAULT_PREFERENCE="-1" --- packages/navit/navit_0.0.3.bb | 5 ----- packages/navit/navit_0.0.4.bb | 5 +++++ packages/navit/navit_cvs.bb | 6 ++++-- 3 files changed, 9 insertions(+), 7 deletions(-) delete mode 100644 packages/navit/navit_0.0.3.bb create mode 100644 packages/navit/navit_0.0.4.bb diff --git a/packages/navit/navit_0.0.3.bb b/packages/navit/navit_0.0.3.bb deleted file mode 100644 index 6688768b88..0000000000 --- a/packages/navit/navit_0.0.3.bb +++ /dev/null @@ -1,5 +0,0 @@ -require navit.inc - -PR = "r5" - -SRC_URI = "${SOURCEFORGE_MIRROR}/navit/navit-${PV}.tar.gz" diff --git a/packages/navit/navit_0.0.4.bb b/packages/navit/navit_0.0.4.bb new file mode 100644 index 0000000000..f1dfb1ceb4 --- /dev/null +++ b/packages/navit/navit_0.0.4.bb @@ -0,0 +1,5 @@ +require navit.inc + +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/navit/navit-${PV}.tar.gz" diff --git a/packages/navit/navit_cvs.bb b/packages/navit/navit_cvs.bb index f548c192df..5739063f7b 100644 --- a/packages/navit/navit_cvs.bb +++ b/packages/navit/navit_cvs.bb @@ -1,7 +1,9 @@ require navit.inc -PV = "0.0.4+cvs${SRCDATE}" -PR = "r5" +PV = "0.1.0+cvs${SRCDATE}" +PR = "r0" + +DEFAULT_PREFERENCE = "-1" S = "${WORKDIR}/navit" -- cgit v1.2.3 From eca355c292e689473615f5b74419bbba7288fa4d Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Wed, 20 Feb 2008 11:17:39 +0000 Subject: zziplib: Added patch to disable non-compiling test. --- packages/zziplib/files/zziplib-0.10-disable-test.patch | 13 +++++++++++++ packages/zziplib/zziplib_0.10.82.bb | 2 ++ 2 files changed, 15 insertions(+) create mode 100644 packages/zziplib/files/zziplib-0.10-disable-test.patch diff --git a/packages/zziplib/files/zziplib-0.10-disable-test.patch b/packages/zziplib/files/zziplib-0.10-disable-test.patch new file mode 100644 index 0000000000..143045dac6 --- /dev/null +++ b/packages/zziplib/files/zziplib-0.10-disable-test.patch @@ -0,0 +1,13 @@ +Index: zziplib-0.10.82/bins/zziptest.c +=================================================================== +--- zziplib-0.10.82.orig/bins/zziptest.c 2008-02-20 12:10:35.000000000 +0100 ++++ zziplib-0.10.82/bins/zziptest.c 2008-02-20 12:10:44.000000000 +0100 +@@ -52,7 +52,7 @@ + } + } printf("OK.\n"); + +-#if 1 ++#if 0 + printf("{check...\n"); + { struct zzip_dir_hdr * hdr = dir->hdr0; + diff --git a/packages/zziplib/zziplib_0.10.82.bb b/packages/zziplib/zziplib_0.10.82.bb index 676444c072..7e2130368d 100644 --- a/packages/zziplib/zziplib_0.10.82.bb +++ b/packages/zziplib/zziplib_0.10.82.bb @@ -1,3 +1,5 @@ require zziplib.inc +SRC_URI += "file://zziplib-0.10-disable-test.patch;patch=1" + PR = "r1" -- cgit v1.2.3 From 99b94714d318acd5ddfe1700464fd12adbcfc02d Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 20 Feb 2008 16:32:24 +0000 Subject: gcc 4.x.x ship cc1 as part of the cpp package. closes #670 repair badly mixed up formatting. guys, _please_ don't mix tabs and spaces, stick to the major formatting style in the file --- packages/gcc/gcc-package.inc | 142 +++++++++++++++++++++++++------------------ packages/gcc/gcc_4.0.0.bb | 2 +- packages/gcc/gcc_4.0.2.bb | 2 +- packages/gcc/gcc_4.1.0.bb | 3 +- packages/gcc/gcc_4.1.1.bb | 2 +- packages/gcc/gcc_4.1.2.bb | 2 +- packages/gcc/gcc_4.2.1.bb | 20 +++--- packages/gcc/gcc_4.2.2.bb | 24 ++++---- 8 files changed, 111 insertions(+), 86 deletions(-) diff --git a/packages/gcc/gcc-package.inc b/packages/gcc/gcc-package.inc index 3d57d01113..2976d58d05 100644 --- a/packages/gcc/gcc-package.inc +++ b/packages/gcc/gcc-package.inc @@ -1,45 +1,58 @@ gcclibdir ?= "${libdir}/gcc" BINV ?= "${PV}" -PACKAGES = "libgcc ${PN} ${PN}-symlinks \ - g++ g++-symlinks \ - cpp cpp-symlinks \ - g77 g77-symlinks \ - gfortran gfortran-symlinks \ - gcov gcov-symlinks \ - libmudflap libmudflap-dev \ - libstdc++ libg2c \ - libstdc++-dev libg2c-dev \ - ${PN}-doc" +PACKAGES = "\ + libgcc ${PN} ${PN}-symlinks \ + g++ g++-symlinks \ + cpp cpp-symlinks \ + g77 g77-symlinks \ + gfortran gfortran-symlinks \ + gcov gcov-symlinks \ + libmudflap libmudflap-dev \ + libstdc++ libg2c \ + libstdc++-dev libg2c-dev \ + ${PN}-doc \ +" # We really need HOST_SYS here for some packages and TARGET_SYS for others. # For now, libgcc is most important so we fix for that - RP. SHLIBSDIR = "${STAGING_DIR}/${TARGET_SYS}/shlibs" -FILES_${PN} = "${bindir}/${TARGET_PREFIX}gcc \ - ${bindir}/${TARGET_PREFIX}gccbug \ - ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1 \ - ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/collect2 \ - ${gcclibdir}/${TARGET_SYS}/${BINV}/*.o \ - ${gcclibdir}/${TARGET_SYS}/${BINV}/specs \ - ${gcclibdir}/${TARGET_SYS}/${BINV}/lib* \ - ${gcclibdir}/${TARGET_SYS}/${BINV}/include" -FILES_${PN}-symlinks = "${bindir}/cc \ - ${bindir}/gcc \ - ${bindir}/gccbug" - -FILES_g77 = "${bindir}/${TARGET_PREFIX}g77 \ - ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f771" -FILES_g77-symlinks = "${bindir}/g77 \ - ${bindir}/f77" - -FILES_gfortran = "${bindir}/${TARGET_PREFIX}gfortran \ - ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f951" -FILES_gfortran-symlinks = "${bindir}/gfortran \ - ${bindir}/f95" - -FILES_cpp = "${bindir}/${TARGET_PREFIX}cpp \ - ${base_libdir}/cpp" +FILES_${PN} = "\ + ${bindir}/${TARGET_PREFIX}gcc \ + ${bindir}/${TARGET_PREFIX}gccbug \ + ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/collect2 \ + ${gcclibdir}/${TARGET_SYS}/${BINV}/*.o \ + ${gcclibdir}/${TARGET_SYS}/${BINV}/specs \ + ${gcclibdir}/${TARGET_SYS}/${BINV}/lib* \ + ${gcclibdir}/${TARGET_SYS}/${BINV}/include \ +" +FILES_${PN}-symlinks = "\ + ${bindir}/cc \ + ${bindir}/gcc \ + ${bindir}/gccbug \ +" + +FILES_g77 = "\ + ${bindir}/${TARGET_PREFIX}g77 \ + ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f771 \ +" +FILES_g77-symlinks = "\ + ${bindir}/g77 \ + ${bindir}/f77 \ +" +FILES_gfortran = "\ + ${bindir}/${TARGET_PREFIX}gfortran \ + ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f951 \ +" +FILES_gfortran-symlinks = "\ + ${bindir}/gfortran \ + ${bindir}/f95" + +FILES_cpp = "\ + ${bindir}/${TARGET_PREFIX}cpp \ + ${base_libdir}/cpp \ + ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1" FILES_cpp-symlinks = "${bindir}/cpp" FILES_gcov = "${bindir}/${TARGET_PREFIX}gcov" @@ -50,37 +63,48 @@ FILES_libgcc-dev = "${base_libdir}/libgcc*.so" # Called from within gcc-cross, so libdir is set wrong FILES_libg2c = "${target_libdir}/libg2c.so.*" -FILES_libg2c-dev = "${libdir}/libg2c.so \ - ${libdir}/libg2c.a \ - ${libdir}/libfrtbegin.a" - -FILES_g++ = "${bindir}/${TARGET_PREFIX}g++ \ - ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1plus" -FILES_g++-symlinks = "${bindir}/c++ \ - ${bindir}/g++" +FILES_libg2c-dev = "\ + ${libdir}/libg2c.so \ + ${libdir}/libg2c.a \ + ${libdir}/libfrtbegin.a \ +" + +FILES_g++ = "\ + ${bindir}/${TARGET_PREFIX}g++ \ + ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1plus \ +" +FILES_g++-symlinks = "\ + ${bindir}/c++ \ + ${bindir}/g++ \ +" FILES_libstdc++ = "${libdir}/libstdc++.so.*" -FILES_libstdc++-dev = "${includedir}/c++/${BINV} \ - ${libdir}/libstdc++.so \ - ${libdir}/libstdc++.la \ - ${libdir}/libstdc++.a \ - ${libdir}/libsupc++.la \ - ${libdir}/libsupc++.a" +FILES_libstdc++-dev = "\ + ${includedir}/c++/${BINV} \ + ${libdir}/libstdc++.so \ + ${libdir}/libstdc++.la \ + ${libdir}/libstdc++.a \ + ${libdir}/libsupc++.la \ + ${libdir}/libsupc++.a \ +" FILES_libmudflap = "${libdir}/libmudflap*.so.*" -FILES_libmudflap-dev = "${libdir}/libmudflap*.so \ - ${libdir}/libmudflap*.a \ - ${libdir}/libmudflap*.a" - - -FILES_${PN}-doc = "${infodir} \ - ${mandir} \ - ${gcclibdir}/${TARGET_SYS}/${BINV}/include/README" +FILES_libmudflap-dev = "\ + ${libdir}/libmudflap*.so \ + ${libdir}/libmudflap*.a \ + ${libdir}/libmudflap*.a \ +" + +FILES_${PN}-doc = "\ + ${infodir} \ + ${mandir} \ + ${gcclibdir}/${TARGET_SYS}/${BINV}/include/README \ +" python do_package() { - if bb.data.getVar('DEBIAN_NAMES', d, 1): - bb.data.setVar('PKG_libgcc', 'libgcc1', d) - bb.build.exec_func('package_do_package', d) + if bb.data.getVar('DEBIAN_NAMES', d, 1): + bb.data.setVar('PKG_libgcc', 'libgcc1', d) + bb.build.exec_func('package_do_package', d) } diff --git a/packages/gcc/gcc_4.0.0.bb b/packages/gcc/gcc_4.0.0.bb index 28561e1e07..9f75bf1f54 100644 --- a/packages/gcc/gcc_4.0.0.bb +++ b/packages/gcc/gcc_4.0.0.bb @@ -1,8 +1,8 @@ -PR = "r2" DESCRIPTION = "The GNU cc and gcc C compilers." HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" LICENSE = "GPL" +PR = "r3" inherit autotools gettext diff --git a/packages/gcc/gcc_4.0.2.bb b/packages/gcc/gcc_4.0.2.bb index 19d67ab1b4..2945592659 100644 --- a/packages/gcc/gcc_4.0.2.bb +++ b/packages/gcc/gcc_4.0.2.bb @@ -3,7 +3,7 @@ HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" LICENSE = "GPL" DEPENDS = "mpfr gmp" -PR = "r6" +PR = "r7" inherit autotools gettext diff --git a/packages/gcc/gcc_4.1.0.bb b/packages/gcc/gcc_4.1.0.bb index a9dbad579f..6a5f607729 100644 --- a/packages/gcc/gcc_4.1.0.bb +++ b/packages/gcc/gcc_4.1.0.bb @@ -1,8 +1,9 @@ -PR = "r2" DESCRIPTION = "The GNU cc and gcc C compilers." HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" LICENSE = "GPL" +PR = "r3" + DEFAULT_PREFERENCE = "-1" inherit autotools gettext diff --git a/packages/gcc/gcc_4.1.1.bb b/packages/gcc/gcc_4.1.1.bb index 8d08df6b8c..4b538219b3 100644 --- a/packages/gcc/gcc_4.1.1.bb +++ b/packages/gcc/gcc_4.1.1.bb @@ -1,8 +1,8 @@ -PR = "r17" DESCRIPTION = "The GNU cc and gcc C compilers." HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" LICENSE = "GPL" +PR = "r18" inherit autotools gettext diff --git a/packages/gcc/gcc_4.1.2.bb b/packages/gcc/gcc_4.1.2.bb index b3eb0100e8..fc75e942bb 100644 --- a/packages/gcc/gcc_4.1.2.bb +++ b/packages/gcc/gcc_4.1.2.bb @@ -4,7 +4,7 @@ SECTION = "devel" LICENSE = "GPL" # NOTE: split PR. If the main .bb changes something that affects its *build* # remember to increment the -cross .bb PR too. -PR = "r10" +PR = "r11" inherit autotools gettext diff --git a/packages/gcc/gcc_4.2.1.bb b/packages/gcc/gcc_4.2.1.bb index 688ccdaeb8..dac620397b 100644 --- a/packages/gcc/gcc_4.2.1.bb +++ b/packages/gcc/gcc_4.2.1.bb @@ -1,8 +1,8 @@ -PR = "r7" DESCRIPTION = "The GNU cc and gcc C compilers." HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" LICENSE = "GPL" +PR = "r8" inherit autotools gettext @@ -11,8 +11,8 @@ require gcc-package.inc SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://100-uclibc-conf.patch;patch=1 \ file://103-uclibc-conf-noupstream.patch;patch=1 \ - file://200-uclibc-locale.patch;patch=1 \ - file://203-uclibc-locale-no__x.patch;patch=1 \ + file://200-uclibc-locale.patch;patch=1 \ + file://203-uclibc-locale-no__x.patch;patch=1 \ file://204-uclibc-locale-wchar_fix.patch;patch=1 \ file://205-uclibc-locale-update.patch;patch=1 \ file://300-libstdc++-pic.patch;patch=1 \ @@ -20,11 +20,11 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://302-c99-snprintf.patch;patch=1 \ file://303-c99-complex-ugly-hack.patch;patch=1 \ file://304-index_macro.patch;patch=1 \ - file://305-libmudflap-susv3-legacy.patch;patch=1 \ - file://306-libstdc++-namespace.patch;patch=1 \ + file://305-libmudflap-susv3-legacy.patch;patch=1 \ + file://306-libstdc++-namespace.patch;patch=1 \ file://307-locale_facets.patch;patch=1 \ - file://402-libbackend_dep_gcov-iov.h.patch;patch=1 \ - file://602-sdk-libstdc++-includes.patch;patch=1 \ + file://402-libbackend_dep_gcov-iov.h.patch;patch=1 \ + file://602-sdk-libstdc++-includes.patch;patch=1 \ file://740-sh-pr24836.patch;patch=1 \ file://800-arm-bigendian.patch;patch=1 \ file://904-flatten-switch-stmt-00.patch;patch=1 \ @@ -36,10 +36,10 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://ldflags.patch;patch=1 \ file://zecke-xgcc-cpp.patch;patch=1 \ file://unbreak-armv4t.patch;patch=1 \ - file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \ + file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \ file://cache-amnesia.patch;patch=1 \ - file://gfortran.patch;patch=1 \ - file://pr34130.patch;patch=1 \ + file://gfortran.patch;patch=1 \ + file://pr34130.patch;patch=1 \ " SRC_URI_avr32 = " http://ewi546.ewi.utwente.nl/tmp/avr32-gcc-4.2.1-atmel.1.0.1.tar.gz \ diff --git a/packages/gcc/gcc_4.2.2.bb b/packages/gcc/gcc_4.2.2.bb index dea9f14d9a..06cbbb23e4 100644 --- a/packages/gcc/gcc_4.2.2.bb +++ b/packages/gcc/gcc_4.2.2.bb @@ -1,8 +1,8 @@ -PR = "r3" DESCRIPTION = "The GNU cc and gcc C compilers." HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" LICENSE = "GPL" +PR = "r4" inherit autotools gettext @@ -11,8 +11,8 @@ require gcc-package.inc SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://100-uclibc-conf.patch;patch=1 \ file://103-uclibc-conf-noupstream.patch;patch=1 \ - file://200-uclibc-locale.patch;patch=1 \ - file://203-uclibc-locale-no__x.patch;patch=1 \ + file://200-uclibc-locale.patch;patch=1 \ + file://203-uclibc-locale-no__x.patch;patch=1 \ file://204-uclibc-locale-wchar_fix.patch;patch=1 \ file://205-uclibc-locale-update.patch;patch=1 \ file://300-libstdc++-pic.patch;patch=1 \ @@ -20,11 +20,11 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://302-c99-snprintf.patch;patch=1 \ file://303-c99-complex-ugly-hack.patch;patch=1 \ file://304-index_macro.patch;patch=1 \ - file://305-libmudflap-susv3-legacy.patch;patch=1 \ - file://306-libstdc++-namespace.patch;patch=1 \ + file://305-libmudflap-susv3-legacy.patch;patch=1 \ + file://306-libstdc++-namespace.patch;patch=1 \ file://307-locale_facets.patch;patch=1 \ - file://402-libbackend_dep_gcov-iov.h.patch;patch=1 \ - file://602-sdk-libstdc++-includes.patch;patch=1 \ + file://402-libbackend_dep_gcov-iov.h.patch;patch=1 \ + file://602-sdk-libstdc++-includes.patch;patch=1 \ file://740-sh-pr24836.patch;patch=1 \ file://800-arm-bigendian.patch;patch=1 \ file://801-arm-bigendian-eabi.patch;patch=1 \ @@ -37,12 +37,12 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://ldflags.patch;patch=1 \ file://zecke-xgcc-cpp.patch;patch=1 \ file://unbreak-armv4t.patch;patch=1 \ - file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \ + file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \ file://cache-amnesia.patch;patch=1 \ - file://gfortran.patch;patch=1 \ - file://gcc-4.0.2-e300c2c3.patch;patch=1 \ - file://pr34130.patch;patch=1 \ - file://fortran-static-linking.patch;patch=1 \ + file://gfortran.patch;patch=1 \ + file://gcc-4.0.2-e300c2c3.patch;patch=1 \ + file://pr34130.patch;patch=1 \ + file://fortran-static-linking.patch;patch=1 \ " SRC_URI_append_ep93xx = " \ -- cgit v1.2.3 From 3d958d91ab81200fb1d53233e5855e08b5f56bbc Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 20 Feb 2008 17:11:27 +0000 Subject: dbus repair building 1.0.2 --- packages/dbus/dbus.inc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc index ed0a0b3cf2..a8fd31d8c7 100644 --- a/packages/dbus/dbus.inc +++ b/packages/dbus/dbus.inc @@ -85,5 +85,7 @@ do_install_append() { install -d ${D}${sysconfdir}/init.d install -m 0755 ${WORKDIR}/dbus-1.init ${D}${sysconfdir}/init.d/dbus-1 # the stock install seems to install the libtool wrapper script, so we have to copy this manually :M: - install -m 0755 bus/.libs/dbus-daemon-launch-helper ${D}${libexecdir}/ + if [ -e bus/.libs/dbus-daemon-launch-helper ]; then + install -m 0755 bus/.libs/dbus-daemon-launch-helper ${D}${libexecdir}/ + fi } -- cgit v1.2.3 From 9c144f0bf3404b31709b8756b61d80a4453e3369 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 20 Feb 2008 17:47:31 +0000 Subject: export SDL_CONFIG for those sdl programs who are not yet using pkgconfig. closes #500 --- classes/sdl.bbclass | 2 ++ 1 file changed, 2 insertions(+) diff --git a/classes/sdl.bbclass b/classes/sdl.bbclass index 23cbf10919..dc4cd8ffa2 100644 --- a/classes/sdl.bbclass +++ b/classes/sdl.bbclass @@ -8,6 +8,8 @@ APPDESKTOP ?= "${WORKDIR}/${PN}.desktop" APPNAME ?= "${PN}" APPIMAGE ?= "${WORKDIR}/${PN}.png" +export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config" + sdl_do_sdl_install() { install -d ${D}${datadir}/applications install -d ${D}${datadir}/pixmaps -- cgit v1.2.3 From 0b0038780ce149f018f511a7adfd4d0773ab9a5d Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 20 Feb 2008 21:56:12 +0000 Subject: add efltk, the enhanced FLTK --- packages/fltk/efltk_2.0.7.bb | 67 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 packages/fltk/efltk_2.0.7.bb diff --git a/packages/fltk/efltk_2.0.7.bb b/packages/fltk/efltk_2.0.7.bb new file mode 100644 index 0000000000..57737e1c57 --- /dev/null +++ b/packages/fltk/efltk_2.0.7.bb @@ -0,0 +1,67 @@ +DESCRIPTION = "EFLTK is a cross-platform C++ GUI toolkit" +HOMEPAGE = "http://equinox-project.org/page/documentation" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "LGPL" +DEPENDS = "zlib jpeg libpng libxext libxft" +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/ede/efltk-${PV}.tar.gz" +S = "${WORKDIR}/efltk" + +inherit autotools binconfig + +EXTRA_OECONF = "\ + --enable-shared \ + --enable-xdbe \ + --enable-xft \ + --enable-gl \ + --disable-mysql \ + --disable-unixODBC \ + --x-includes=${STAGING_INCDIR}/freetype2 \ + --x-libraries=${STAGING_LIBDIR} \ +" + +# yes, this is nasty, but configure is so broken there is no other way +do_configure() { + gnu-configize + oe_runconf + mv -f config.h save + autotools_do_configure + mv -f save config.h +} + +# more nasties +do_configure_append() { + sed -i s,/usr/include,${STAGING_INCDIR}, makeinclude + sed -i s,/usr/include/freetype2,, makeinclude + sed -i s,/usr/bin/strip,echo, makeinclude + sed -i s,CONFIGDIR,'"${datadir}/ede/"', src/core/Fl_Config.cpp +} + +do_stage() { + oe_runmake install prefix="${STAGING_DIR}" \ + bindir="${STAGING_BINDIR}" \ + includedir="${STAGING_INCDIR}" \ + libdir="${STAGING_LIBDIR}" \ + datadir="${STAGING_DATADIR}" +} + +do_install () { + install -d ${D}${libdir} + oe_runmake install prefix="${D}${prefix}" \ + bindir="${D}${bindir}" \ + libdir="${D}${libdir}" \ + includedir="${D}${includedir}" \ + datadir="${STAGING_DATADIR}" +} + +python populate_packages_prepend () { + if (bb.data.getVar('DEBIAN_NAMES', d, 1)): + bb.data.setVar('PKG_${PN}', 'libefltk${PV}', d) +} + +LEAD_SONAME = "libefltk.so" + +FILES_${PN} += "${libdir}/fltk/*.theme" +FILES_${PN}-dbg += "${libdir}/fltk/.debug" -- cgit v1.2.3 From d523b7b1febdde47a21f5908a78fe7dd222bd3e4 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Wed, 20 Feb 2008 22:36:13 +0000 Subject: kobodeluxe: Added desktop icon and make recipe use that. --- packages/kobodeluxe/files/fighter-48.xpm | 442 +++++++++++++++++++++++++++++++ packages/kobodeluxe/kobodeluxe_0.5.1.bb | 9 +- 2 files changed, 448 insertions(+), 3 deletions(-) create mode 100644 packages/kobodeluxe/files/fighter-48.xpm diff --git a/packages/kobodeluxe/files/fighter-48.xpm b/packages/kobodeluxe/files/fighter-48.xpm new file mode 100644 index 0000000000..3c1e8c8b7a --- /dev/null +++ b/packages/kobodeluxe/files/fighter-48.xpm @@ -0,0 +1,442 @@ +/* XPM */ +static char * fighter_48_xpm[] = { +"40 40 399 2", +" c None", +". c #C8E2CD", +"+ c #8AB7A3", +"@ c #408474", +"# c #023D3D", +"$ c #F2FBEA", +"% c #CEE5D1", +"& c #7DB09B", +"* c #063E32", +"= c #002320", +"- c #D0E6D2", +"; c #F6FEEE", +"> c #C7E0CC", +", c #639C89", +"' c #054137", +") c #002629", +"! c #A6C9B3", +"~ c #E8F6E4", +"{ c #EEF8E8", +"] c #92BDA9", +"^ c #3A7F6F", +"/ c #074847", +"( c #002924", +"_ c #00286F", +": c #9CC2AD", +"< c #F0F9E9", +"[ c #C8E0CC", +"} c #6FA894", +"| c #377F6E", +"1 c #105251", +"2 c #002F23", +"3 c #002863", +"4 c #ACCDB8", +"5 c #F0F8E8", +"6 c #ABCDB8", +"7 c #62A28E", +"8 c #3B8572", +"9 c #195B5D", +"0 c #003729", +"a c #002750", +"b c #8AB4A0", +"c c #C4DDC9", +"d c #E8F4E3", +"e c #99C1AC", +"f c #569D89", +"g c #3D8876", +"h c #23645D", +"i c #013F3A", +"j c #00273F", +"k c #81B09C", +"l c #CAE1CE", +"m c #D1E7D3", +"n c #86B4A0", +"o c #4E9885", +"p c #3F8A76", +"q c #2A6C60", +"r c #064646", +"s c #002831", +"t c #7AAD99", +"u c #C8E1CD", +"v c #BAD8C3", +"w c #77AC98", +"x c #4B9783", +"y c #408B77", +"z c #307465", +"A c #094B4E", +"B c #002A24", +"C c #7EB09C", +"D c #CCE4D0", +"E c #AFD0BB", +"F c #6BA693", +"G c #489581", +"H c #418E7A", +"I c #337868", +"J c #0D4F54", +"K c #002C22", +"L c #7AAE9A", +"M c #C4E0CB", +"N c #A4C8B2", +"O c #66A490", +"P c #46947F", +"Q c #428F7A", +"R c #357C6B", +"S c #115355", +"T c #002E22", +"U c #002869", +"V c #88B9A8", +"W c #87B6A2", +"X c #C5E1CC", +"Y c #9FC4AF", +"Z c #5DA08D", +"` c #428F7B", +" . c #377E6D", +".. c #135555", +"+. c #003124", +"@. c #00275F", +"#. c #001B3C", +"$. c #8DBCAE", +"%. c #7EB19D", +"&. c #B9D9C2", +"*. c #95BDA8", +"=. c #5A9988", +"-. c #4F7666", +";. c #466F5F", +">. c #357868", +",. c #18595A", +"'. c #003426", +"). c #00275D", +"!. c #001931", +"~. c #9CC4B8", +"{. c #75AC98", +"]. c #AFD1BB", +"^. c #8CAD9A", +"/. c #B2ACA7", +"(. c #C08F8E", +"_. c #792D2C", +":. c #271C19", +"<. c #174A50", +"[. c #003628", +"}. c #00275C", +"|. c #02202F", +"1. c #D3E4DE", +"2. c #80B5A4", +"3. c #73AA97", +"4. c #A9CBB6", +"5. c #BDB3AC", +"6. c #F7F0F0", +"7. c #CB9B9B", +"8. c #6B2222", +"9. c #1B0404", +"0. c #131112", +"a. c #012E23", +"b. c #002559", +"c. c #042C31", +"d. c #01120F", +"e. c #ECEEEA", +"f. c #C5DAD1", +"g. c #76B09E", +"h. c #75AC97", +"i. c #A6AA9B", +"j. c #E2C8C8", +"k. c #DEC0C0", +"l. c #AE6C6C", +"m. c #460E0E", +"n. c #150303", +"o. c #110303", +"p. c #07120D", +"q. c #001F47", +"r. c #042E2B", +"s. c #03231D", +"t. c #01110D", +"u. c #E3E9E4", +"v. c #82B7A5", +"w. c #78B19E", +"x. c #78AD98", +"y. c #A88E86", +"z. c #BF8686", +"A. c #8D3E3E", +"B. c #2F0808", +"C. c #140303", +"D. c #0D0604", +"E. c #000F22", +"F. c #04251F", +"G. c #052D25", +"H. c #032B23", +"I. c #EFEFEC", +"J. c #8ABCAB", +"K. c #82B6A4", +"L. c #7BB2A0", +"M. c #79AB98", +"N. c #A56F6B", +"O. c #B77878", +"P. c #AD6868", +"Q. c #7C2A2A", +"R. c #2C0707", +"S. c #100403", +"T. c #000A15", +"U. c #041411", +"V. c #052922", +"W. c #064034", +"X. c #04362C", +"Y. c #EBEDEA", +"Z. c #92C0B1", +"`. c #7CB3A1", +" + c #7EB4A2", +".+ c #76A391", +"++ c #9F5B5A", +"@+ c #AA6363", +"#+ c #A35959", +"$+ c #742323", +"%+ c #2A0707", +"&+ c #020B13", +"*+ c #050F0C", +"=+ c #05201B", +"-+ c #063D32", +";+ c #095747", +">+ c #064135", +",+ c #DDE6E1", +"'+ c #8ABBAA", +")+ c #80B5A3", +"!+ c #6EA18F", +"~+ c #975150", +"{+ c #A65E5E", +"]+ c #9F5353", +"^+ c #712020", +"/+ c #280606", +"(+ c #130303", +"_+ c #280707", +":+ c #030B13", +"<+ c #050E0B", +"[+ c #051914", +"}+ c #06352B", +"|+ c #095545", +"1+ c #0A5A4A", +"2+ c #084E3F", +"3+ c #BAD5CB", +"4+ c #81B6A5", +"5+ c #80B6A3", +"6+ c #6FA795", +"7+ c #8A4846", +"8+ c #9A4C4C", +"9+ c #974747", +"0+ c #671A1A", +"a+ c #220606", +"b+ c #120303", +"c+ c #631818", +"d+ c #030B15", +"e+ c #050E0C", +"f+ c #051712", +"g+ c #052C24", +"h+ c #074D3F", +"i+ c #0A5C4C", +"j+ c #0A5848", +"k+ c #0A5C4B", +"l+ c #0A6350", +"m+ c #8DBFAE", +"n+ c #84B8A7", +"o+ c #7FB5A2", +"p+ c #7BB3A0", +"q+ c #7AB2A0", +"r+ c #7DB4A2", +"s+ c #81B6A3", +"t+ c #6CA996", +"u+ c #6F4C45", +"v+ c #792222", +"w+ c #802A2A", +"x+ c #591111", +"y+ c #1D0505", +"z+ c #420D0D", +"A+ c #572020", +"B+ c #020D14", +"C+ c #051512", +"D+ c #052720", +"E+ c #095A4B", +"F+ c #095646", +"G+ c #0A5849", +"H+ c #0A5B4B", +"I+ c #0A5A49", +"J+ c #7FB5A3", +"K+ c #6BA795", +"L+ c #6E8173", +"M+ c #470F0E", +"N+ c #571010", +"O+ c #3B0A0A", +"P+ c #170404", +"Q+ c #1C0505", +"R+ c #5A1111", +"S+ c #200E10", +"T+ c #030C12", +"U+ c #051612", +"V+ c #05251F", +"W+ c #063A2F", +"X+ c #095848", +"Y+ c #0A5949", +"Z+ c #085142", +"`+ c #7BB3A1", +" @ c #6EA997", +".@ c #74A794", +"+@ c #423430", +"@@ c #1C0404", +"#@ c #360909", +"$@ c #280909", +"%@ c #010A12", +"&@ c #030D10", +"*@ c #050F0D", +"=@ c #051814", +"-@ c #052721", +";@ c #06382E", +">@ c #095546", +",@ c #074C3E", +"'@ c #58A894", +")@ c #6CAE9B", +"!@ c #81B6A4", +"~@ c #6DA695", +"{@ c #5B9B88", +"]@ c #789888", +"^@ c #221715", +"/@ c #2C0808", +"(@ c #2D0A0A", +"_@ c #040D0A", +":@ c #000B18", +"<@ c #040D0F", +"[@ c #05110F", +"}@ c #051C16", +"|@ c #063A30", +"1@ c #095344", +"2@ c #0A5B4A", +"3@ c #095647", +"4@ c #074B3D", +"5@ c #053D32", +"6@ c #18866E", +"7@ c #3C9681", +"8@ c #6DAE9B", +"9@ c #7DB3A1", +"0@ c #70A998", +"a@ c #428776", +"b@ c #82B09C", +"c@ c #658E7D", +"d@ c #342E28", +"e@ c #3E1A17", +"f@ c #141616", +"g@ c #000E0A", +"h@ c #000C1E", +"i@ c #040E0E", +"j@ c #051511", +"k@ c #063E33", +"l@ c #085344", +"m@ c #084C3E", +"n@ c #042F26", +"o@ c #021F19", +"p@ c #084D3E", +"q@ c #0C5344", +"r@ c #2F806E", +"s@ c #60A895", +"t@ c #75AD9B", +"u@ c #307365", +"v@ c #6DA793", +"w@ c #76AA97", +"x@ c #4C7E6F", +"y@ c #34332C", +"z@ c #091616", +"A@ c #000C0D", +"B@ c #000C21", +"C@ c #041311", +"D@ c #051B16", +"E@ c #052821", +"F@ c #05362C", +"G@ c #032C24", +"H@ c #021D18", +"I@ c #02211B", +"J@ c #042B23", +"K@ c #145345", +"L@ c #38806F", +"M@ c #5DA592", +"N@ c #72AE9C", +"O@ c #24635D", +"P@ c #4C927F", +"Q@ c #70A995", +"R@ c #529784", +"S@ c #29524A", +"T@ c #021B19", +"U@ c #000E1A", +"V@ c #00112E", +"W@ c #041916", +"X@ c #031B16", +"Y@ c #021B16", +"Z@ c #011411", +"`@ c #011915", +" # c #021E19", +".# c #021C17", +"+# c #03221C", +"@# c #083B31", +"## c #11525B", +"$# c #2C7166", +"%# c #5FA08D", +"&# c #559A87", +"*# c #195957", +"=# c #00281E", +"-# c #001B46", +";# c #00173B", +"># c #010C0B", +",# c #010F0C", +"'# c #01110F", +")# c #023637", +"!# c #0D5058", +"~# c #377D6D", +"{# c #2E7369", +"]# c #05443F", +"^# c #002742", +"/# c #00276C", +"(# c #001D42", +"_# c #003E2F", +":# c #05413A", +"<# c #023930", +"[# c #002A31", +"}# c #00286B", +"|# c #002727", +"1# c #002651", +"2# c #00286C", +" ", +" ", +" . + @ # ", +" . $ % & * = ", +" - ; > , ' ) ", +" ! ~ { ] ^ / ( _ ", +" : < [ } | 1 2 3 ", +" 4 5 6 7 8 9 0 a ", +" b c d e f g h i j _ ", +" k l m n o p q r s _ ", +" t u v w x y z A B _ ", +" C D E F G H I J K _ ", +" L M N O P Q R S T U ", +" V W X Y Z P ` ...+.@.#. ", +" $.%.&.*.=.-.;.>.,.'.).!. ", +" ~.{.].^./.(._.:.<.[.}.|. ", +" 1.2.3.4.5.6.7.8.9.0.a.b.c.d. ", +" e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t. ", +" u.v.w.x.y.7.z.A.B.C.o.D.E.F.G.H. ", +" I.J.K.L.M.N.O.P.Q.R.C.o.S.T.U.V.W.X. ", +" Y.Z.`. + +.+++@+#+$+%+C.o.o.&+*+=+-+;+>+ ", +" ,+'+`.)+`.)+!+~+{+]+^+/+(+(+_+:+<+[+}+|+1+2+ ", +" I.3+4+K.`.)+L.5+6+7+8+9+0+a+b+a+c+d+e+f+g+h+i+j+k+l+ ", +" m+n+o+`.p+q+r+s+`.t+u+v+w+x+y+b+z+A+B+e+C+D+W.E+F+G+H+I+ ", +" J+`.K.q+)+L.)+ +q+K+L+M+N+O+P+Q+R+S+T+*+U+V+W+X+Y+;+i+Z+ ", +" q+`.`+`+o+ +`.J+`+ @.@+@%+@@(+#@$@%@&@*@=@-@;@>@Y+X+i+,@ ", +" '@)@`.!@`+r+`+J+r+~@{@]@^@(+/@(@_@:@<@[@}@V.|@1@2@3@4@5@ ", +" 6@7@8@q+)+`. +9@0@a@b@c@d@e@f@g@h@i@j@=+g+k@l@m@n@o@ ", +" p@q@r@s@r+L.5+t@u@v@w@x@y@z@A@B@C@D@E@G.F@G@o@H@ ", +" I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@`@ # ", +" .#+#@###$#%#&#*#=#-#;#>#,#'# ", +" )#!#~#{#]#^#/#(# ", +" _#:#<#[#}#_ ", +" |#1#2#_ ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/packages/kobodeluxe/kobodeluxe_0.5.1.bb b/packages/kobodeluxe/kobodeluxe_0.5.1.bb index cc3f85bd19..b2257207ab 100644 --- a/packages/kobodeluxe/kobodeluxe_0.5.1.bb +++ b/packages/kobodeluxe/kobodeluxe_0.5.1.bb @@ -5,13 +5,14 @@ LICENSE = "GPL" AUTHOR = "David Olofson " HOMEPAGE = "http://olofson.net/kobodl" -PR = "r3" +PR = "r4" DEPENDS = "libsdl-image virtual/libsdl" RDEPENDS_${PN} = "${PN}-data" SRC_URI = "http://olofson.net/kobodl/download/KoboDeluxe-${PV}.tar.bz2 \ + file://fighter-48.xpm \ file://debian-kobo.patch;patch=1 \ file://kobodeluxe-putenv.patch;patch=1 \ file://kobodeluxe-sysconf-support.patch;patch=1 \ @@ -22,12 +23,14 @@ SRC_URI = "http://olofson.net/kobodl/download/KoboDeluxe-${PV}.tar.bz2 \ S = "${WORKDIR}/KoboDeluxe-${PV}" -inherit autotools +inherit autotools sdl -export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config" +APPIMAGE = "${WORKDIR}/fighter-48.xpm" EXTRA_OECONF = "--disable-opengl --disable-sdltest --enable-touchscreen" +export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config" + do_configure_prepend() { sed -i \ -e "s|width WIDTH_HERE|width ${MACHINE_DISPLAY_WIDTH_PIXELS}|" \ -- cgit v1.2.3 From f05fe9cdc83de4e683b510eecee5d508dbf9f8bf Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Wed, 20 Feb 2008 22:38:07 +0000 Subject: openttd: Various changes. - added include recipe - added recipe for new version 0.6.0-beta4 - fixed dependencies --- packages/openttd/files/.mtn2git_empty | 0 .../openttd/files/openttd_0.6.0-buildfix.patch | 25 ++++++++++++ packages/openttd/openttd.inc | 46 ++++++++++++++++++++++ packages/openttd/openttd_0.4.0.1.bb | 14 +++---- packages/openttd/openttd_0.6.0-beta4.bb | 8 ++++ 5 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 packages/openttd/files/.mtn2git_empty create mode 100644 packages/openttd/files/openttd_0.6.0-buildfix.patch create mode 100644 packages/openttd/openttd.inc create mode 100644 packages/openttd/openttd_0.6.0-beta4.bb diff --git a/packages/openttd/files/.mtn2git_empty b/packages/openttd/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/openttd/files/openttd_0.6.0-buildfix.patch b/packages/openttd/files/openttd_0.6.0-buildfix.patch new file mode 100644 index 0000000000..d815cfc9c6 --- /dev/null +++ b/packages/openttd/files/openttd_0.6.0-buildfix.patch @@ -0,0 +1,25 @@ +Index: openttd-0.6.0-beta4/config.lib +=================================================================== +--- openttd-0.6.0-beta4.orig/config.lib 2008-02-20 20:24:58.000000000 +0100 ++++ openttd-0.6.0-beta4/config.lib 2008-02-20 20:26:55.000000000 +0100 +@@ -1255,7 +1255,7 @@ + if [ -z "$6" ]; then + compiler="$3" + else +- compiler="$3-$6" ++ compiler="$4" + fi + machine=`eval $compiler $9 2>/dev/null` + ret=$? +@@ -1271,11 +1271,6 @@ + exit 1 + fi + +- if [ "$machine" != "$3" ] && ( [ "$8" = "0" ] || [ "$8" = "1" ] ); then +- log 1 "checking $1... expected $3, found $machine" +- log 1 "the compiler suggests it doesn't build code for the machine you specified" +- exit 1 +- fi + elif [ -n "$4" ]; then + # Check for manual compiler + machine=`$4 $9 2>/dev/null` diff --git a/packages/openttd/openttd.inc b/packages/openttd/openttd.inc new file mode 100644 index 0000000000..4c4c009296 --- /dev/null +++ b/packages/openttd/openttd.inc @@ -0,0 +1,46 @@ +# Note: OpenTTD's build system changed considerably in 0.6.x +# This include file is written towards the newer versions. + +DESCRIPTION = "Open source clone of the Microprose game 'Transport Tycoon Deluxe' - SDL edition." +HOMEPAGE = "http://openttd.sf.net" +LICENSE = "GPLv2" + +DEPENDS = "libsdl-net libpng zlib freetype fontconfig" + +SRC_URI = "${SOURCEFORGE_MIRROR}/openttd/openttd-${PV}-source.tar.bz2" + +APPIMAGE = "media/openttd.48.png" + +inherit siteinfo sdl + +do_configure() { + # The way the OTTD configure system handles the application's directories + # isn't the way autotools does it. Mainly prefix is always prepended even if + # absolute binary-dir and data-dir is given. Sigh ... + + # Disabling MIDI feature for now. + ./configure \ + --build=${BUILD_SYS} \ + --host=${TARGET_SYS} \ + --windres=${MACHINE_DISPLAY_WIDTH_PIXELS}x${MACHINE_DISPLAY_HEIGHT_PIXELS} \ + --os=UNIX \ + --endian=${SITEINFO_ENDIANESS} \ + --prefix-dir=${prefix} \ + --binary-dir=bin \ + --with-midi=/bin/true \ + --with-zlib \ + --with-png \ + --with-freetype \ + --cc-build=gcc \ + --cc-host=${TARGET_SYS}-gcc \ + --cxx-build=g++ \ + --cxx-host=${TARGET_SYS}-g++ \ + --strip=${TARGET_SYS}-strip \ + --install-dir=${D} +} + +do_install() { + oe_runmake install +} + +FILES_${PN} += "${datadir}/*" diff --git a/packages/openttd/openttd_0.4.0.1.bb b/packages/openttd/openttd_0.4.0.1.bb index eb5f2e27e9..9dab970849 100644 --- a/packages/openttd/openttd_0.4.0.1.bb +++ b/packages/openttd/openttd_0.4.0.1.bb @@ -1,11 +1,6 @@ -DESCRIPTION = "Open source clone of the Microprose game 'Transport Tycoon Deluxe' - SDL edition." -HOMEPAGE = "http://openttd.sf.net" -LICENSE = "GPLv2" -PR = "r1" +require openttd.inc -SRC_URI = "${SOURCEFORGE_MIRROR}/openttd/openttd-${PV}-source.tar.gz" - -APPIMAGE = "media/openttd.48.png" +PR = "r2" EXTRA_OEMAKE = "WITH_ZLIB=1 \ WITH_PNG=1 \ @@ -22,7 +17,9 @@ EXTRA_OEMAKE = "WITH_ZLIB=1 \ CC_HOST=gcc \ CC_TARGET=${TARGET_SYS}-gcc" -inherit sdl +do_configure() { + : +} do_install() { oe_runmake install DESTDIR="${D}" @@ -34,4 +31,3 @@ do_install() { install -m 0644 ${S}/data/*.grf ${D}${datadir}/games/openttd/data/ } -FILES_${PN} += "${datadir}/*" diff --git a/packages/openttd/openttd_0.6.0-beta4.bb b/packages/openttd/openttd_0.6.0-beta4.bb new file mode 100644 index 0000000000..b984d45dbf --- /dev/null +++ b/packages/openttd/openttd_0.6.0-beta4.bb @@ -0,0 +1,8 @@ +require openttd.inc + +PR = "r0" + +SRC_URI += "file://openttd_0.6.0-buildfix.patch;patch=1" + + + -- cgit v1.2.3 From bf4b8015982e2cd26049a340f48a2191fd431c11 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Thu, 21 Feb 2008 08:56:53 +0000 Subject: gvim: added xt to dependencies --- packages/vim/gvim_7.0.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vim/gvim_7.0.bb b/packages/vim/gvim_7.0.bb index 3547c89d47..78a0c54f9d 100644 --- a/packages/vim/gvim_7.0.bb +++ b/packages/vim/gvim_7.0.bb @@ -2,7 +2,7 @@ VIMVER = "70" require vim.inc -DEPENDS += "gtk+" +DEPENDS += "gtk+ xt" PR = "r1" FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/vim-7.0', '${FILE_DIRNAME}/vim', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}" -- cgit v1.2.3 From fb0cfd1b02a5c2d12edc3f8d29e8f6b3cfc328d5 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 10:09:55 +0000 Subject: bitbake.conf: Remove hardcoded paths from staging and flags variables, add BUILDSDK flags (from poky) --- conf/bitbake.conf | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/conf/bitbake.conf b/conf/bitbake.conf index 27a04a028c..a3706b1b6b 100644 --- a/conf/bitbake.conf +++ b/conf/bitbake.conf @@ -216,18 +216,18 @@ B = "${S}" STAGING_DIR = "${TMPDIR}/staging" STAGING_DIR_NATIVE = "${STAGING_DIR}/${BUILD_SYS}" -STAGING_BINDIR_NATIVE = "${STAGING_DIR_NATIVE}/bin" -STAGING_BINDIR_CROSS = "${STAGING_DIR_NATIVE}/bin/${HOST_SYS}" -STAGING_LIBDIR_NATIVE = "${STAGING_DIR_NATIVE}/lib" -STAGING_INCDIR_NATIVE = "${STAGING_DIR_NATIVE}/include" -STAGING_ETCDIR_NATIVE = "${STAGING_DIR_NATIVE}/etc" -STAGING_DATADIR_NATIVE = "${STAGING_DIR_NATIVE}/share" +STAGING_BINDIR_NATIVE = "${STAGING_DIR_NATIVE}${layout_bindir}" +STAGING_BINDIR_CROSS = "${STAGING_DIR_NATIVE}${layout_bindir}/${HOST_SYS}" +STAGING_LIBDIR_NATIVE = "${STAGING_DIR_NATIVE}${layout_libdir}" +STAGING_INCDIR_NATIVE = "${STAGING_DIR_NATIVE}${layout_includedir}" +STAGING_ETCDIR_NATIVE = "${STAGING_DIR_NATIVE}${layout_sysconfdir}" +STAGING_DATADIR_NATIVE = "${STAGING_DIR_NATIVE}${layout_datadir}" STAGING_DIR_HOST = "${STAGING_DIR}/${HOST_SYS}" -STAGING_BINDIR = "${STAGING_DIR_HOST}/bin" -STAGING_LIBDIR = "${STAGING_DIR_HOST}/lib" -STAGING_INCDIR = "${STAGING_DIR_HOST}/include" -STAGING_DATADIR = "${STAGING_DIR_HOST}/share" +STAGING_BINDIR = "${STAGING_DIR_HOST}${layout_bindir}" +STAGING_LIBDIR = "${STAGING_DIR_HOST}${layout_libdir}" +STAGING_INCDIR = "${STAGING_DIR_HOST}${layout_includedir}" +STAGING_DATADIR = "${STAGING_DIR_HOST}${layout_datadir}" STAGING_LOADER_DIR = "${STAGING_DIR_HOST}/loader" STAGING_FIRMWARE_DIR = "${STAGING_DIR_HOST}/firmware" STAGING_PYDIR = "${STAGING_DIR}/lib/python2.4" @@ -351,10 +351,12 @@ PATCHRESOLVE = 'noop' ################################################################## export BUILD_CPPFLAGS = "-isystem${STAGING_INCDIR_NATIVE}" +BUILDSDK_CPPFLAGS = "-isystem${STAGING_INCDIR}" export CPPFLAGS = "${TARGET_CPPFLAGS}" -export TARGET_CPPFLAGS = "-isystem${STAGING_DIR_TARGET}/include" +export TARGET_CPPFLAGS = "-isystem${STAGING_DIR_TARGET}${layout_includedir}" export BUILD_CFLAGS = "${BUILD_CPPFLAGS} ${BUILD_OPTIMIZATION}" +BUILDSDK_CFLAGS = "${BUILDSDK_CPPFLAGS} ${BUILD_OPTIMIZATION}" export CFLAGS = "${TARGET_CFLAGS}" export TARGET_CFLAGS = "${TARGET_CPPFLAGS} ${SELECTED_OPTIMIZATION}" @@ -365,9 +367,14 @@ export TARGET_CXXFLAGS = "${TARGET_CFLAGS} -fpermissive" export BUILD_LDFLAGS = "-L${STAGING_LIBDIR_NATIVE} \ -Wl,-rpath-link,${STAGING_LIBDIR_NATIVE} \ -Wl,-rpath,${STAGING_LIBDIR_NATIVE} -Wl,-O1" + +BUILDSDK_LDFLAGS = "-L${STAGING_LIBDIR} \ + -Wl,-rpath-link,${STAGING_LIBDIR} \ + -Wl,-rpath,${libdir} -Wl,-O1" + export LDFLAGS = "${TARGET_LDFLAGS}" -export TARGET_LDFLAGS = "-L${STAGING_DIR_TARGET}/lib \ - -Wl,-rpath-link,${STAGING_DIR_TARGET}/lib \ +export TARGET_LDFLAGS = "-L${STAGING_DIR_TARGET}${layout_libdir} \ + -Wl,-rpath-link,${STAGING_DIR_TARGET}${layout_libdir} \ -Wl,-O1" # Which flags to leave by strip-flags() in bin/build/oebuild.sh ? -- cgit v1.2.3 From eaa6fa080f580cda447d464568c3b5076da7f5b2 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 10:13:26 +0000 Subject: bitbake.conf: Make sure CCACHE uses expanded data when searching the PATH (from poky) --- conf/bitbake.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/bitbake.conf b/conf/bitbake.conf index a3706b1b6b..4caa55c0b6 100644 --- a/conf/bitbake.conf +++ b/conf/bitbake.conf @@ -310,7 +310,7 @@ export PATH_prepend = "${STAGING_BINDIR_CROSS}:${STAGING_DIR_NATIVE}${layout_sbi # Build utility info. ################################################################## -CCACHE = "${@bb.which(bb.data.getVar('PATH', d), 'ccache') and 'ccache '}" +CCACHE = "${@bb.which(bb.data.getVar('PATH', d, 1), 'ccache') and 'ccache '}" TOOLCHAIN_OPTIONS = "" export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" -- cgit v1.2.3 From 1d0ad602b2a9ccc30d87a7bcf5cf4c01fcf6c188 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 11:35:44 +0000 Subject: sanity.bbclass: Add ABI version number and checks so we can warn users when the 'abi' of TMPDIR changes. Add checks for qemu in various scenarios from poky. Add check TMPDIR hasn't moved from poky. Remove now unneeded bitbake version check. --- classes/sanity.bbclass | 67 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass index 9994febf0d..9ef2f09fe0 100644 --- a/classes/sanity.bbclass +++ b/classes/sanity.bbclass @@ -2,6 +2,15 @@ # Sanity check the users setup for common misconfigurations # +# +# SANITY_ABI allows us to notify users when the format of TMPDIR changes in +# an incompatible way. Such changes should usually be detailed in the commit +# that breaks the format and have been previously discussed on the mailing list +# with general agreement from the core team. +# +SANITY_ABI = "0" +SANITY_ABIFILE = "${TMPDIR}/abi_version" + def raise_sanity_error(msg): import bb bb.fatal(""" Openembedded's config sanity checker detected a potential misconfiguration. @@ -31,7 +40,7 @@ def check_sanity(e): from distutils.version import LooseVersion except ImportError: def LooseVersion(v): print "WARNING: sanity.bbclass can't compare versions without python-distutils"; return 1 - import os + import os, commands # Check the bitbake version meets minimum requirements minversion = data.getVar('BB_MIN_VERSION', e.data , True) @@ -64,8 +73,8 @@ def check_sanity(e): # Check that the MACHINE is valid, if it is set if data.getVar('MACHINE', e.data, True): - if not check_conf_exists("conf/machine/${MACHINE}.conf", e.data): - messages = messages + 'Please set a valid MACHINE in your local.conf\n' + if not check_conf_exists("conf/machine/${MACHINE}.conf", e.data): + messages = messages + 'Please set a valid MACHINE in your local.conf\n' # Check that the DISTRO is valid # need to take into account DISTRO renaming DISTRO @@ -85,6 +94,19 @@ def check_sanity(e): required_utilities = "patch help2man diffstat texi2html makeinfo cvs svn bzip2 tar gzip gawk md5sum" + if data.getVar('TARGET_ARCH', e.data, True) == "arm": + # qemu-native needs gcc 3.x + if "qemu-native" not in assume_provided and "gcc3-native" in assume_provided: + gcc_version = commands.getoutput("${BUILD_PREFIX}gcc --version | head -n 1 | cut -f 3 -d ' '") + + if not check_gcc3(e.data) and gcc_version[0] != '3': + messages = messages + "gcc3-native was in ASSUME_PROVIDED but the gcc-3.x binary can't be found in PATH" + missing = missing + "gcc-3.x (needed for qemu-native)," + + if "qemu-native" in assume_provided: + if not check_app_exists("qemu-arm", e.data): + messages = messages + "qemu-native was in ASSUME_PROVIDED but the QEMU binaries (qemu-arm) can't be found in PATH" + for util in required_utilities.split(): if not check_app_exists( util, e.data ): missing = missing + "%s," % util @@ -100,7 +122,37 @@ def check_sanity(e): oes_bb_conf = data.getVar( 'OES_BITBAKE_CONF', e.data, True ) if not oes_bb_conf: - messages = messages + 'You do not include OpenEmbeddeds version of conf/bitbake.conf\n' + messages = messages + 'You do not include OpenEmbeddeds version of conf/bitbake.conf. This means your environment is misconfigured, in particular check BBPATH.\n' + + # + # Check that TMPDIR hasn't changed location since the last time we were run + # + tmpdir = data.getVar('TMPDIR', e.data, True) + checkfile = os.path.join(tmpdir, "saved_tmpdir") + if os.path.exists(checkfile): + f = file(checkfile, "r") + if (f.read().strip() != tmpdir): + messages = messages + "Error, TMPDIR has changed location. You need to either move it back to %s or rebuild\n" % tmpdir + else: + f = file(checkfile, "w") + f.write(tmpdir) + f.close() + + # + # Check the 'ABI' of TMPDIR + # + current_abi = data.getVar('SANITY_ABI', e.data, True) + abifile = data.getVar('SANITY_ABIFILE', e.data, True) + if os.path.exists(abifile): + f = file(abifile, "r") + abi = f.read().strip() + if (abi != current_abi): + # Code to convert from one ABI to another could go here if possible. + messages = messages + "Error, TMPDIR has changed ABI (%s to %s) and you need to either rebuild, revert or adjust it at your own risk.\n" % (abi, current_abi) + else: + f = file(abifile, "w") + f.write(current_abi) + f.close() if messages != "": raise_sanity_error(messages) @@ -115,12 +167,7 @@ python check_sanity_eventhandler() { except ImportError: def LooseVersion(v): print "WARNING: sanity.bbclass can't compare versions without python-distutils"; return 1 - if (LooseVersion(bb.__version__) > LooseVersion("1.8.6")): - if getName(e) == "ConfigParsed": - check_sanity(e) - return NotHandled - - if getName(e) == "BuildStarted": + if getName(e) == "ConfigParsed": check_sanity(e) return NotHandled -- cgit v1.2.3 From 242f47ab5f6aeb28da01e9a5baefac17529f0b52 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Thu, 21 Feb 2008 12:50:45 +0000 Subject: kobodeluxe: Fixed APPNAME. --- packages/kobodeluxe/kobodeluxe_0.5.1.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/kobodeluxe/kobodeluxe_0.5.1.bb b/packages/kobodeluxe/kobodeluxe_0.5.1.bb index b2257207ab..e9162b9981 100644 --- a/packages/kobodeluxe/kobodeluxe_0.5.1.bb +++ b/packages/kobodeluxe/kobodeluxe_0.5.1.bb @@ -26,6 +26,7 @@ S = "${WORKDIR}/KoboDeluxe-${PV}" inherit autotools sdl APPIMAGE = "${WORKDIR}/fighter-48.xpm" +APPNAME = "kobodl" EXTRA_OECONF = "--disable-opengl --disable-sdltest --enable-touchscreen" -- cgit v1.2.3 From 767478b11ad7c1e260db8b391fc9c34176d81915 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:07:36 +0000 Subject: renderext: Drop, superceeded by renderproto and X11R7.X --- packages/renderext/.mtn2git_empty | 0 packages/renderext/renderext_0.8.bb | 15 --------------- packages/renderext/renderext_cvs.bb | 18 ------------------ 3 files changed, 33 deletions(-) delete mode 100644 packages/renderext/.mtn2git_empty delete mode 100644 packages/renderext/renderext_0.8.bb delete mode 100644 packages/renderext/renderext_cvs.bb diff --git a/packages/renderext/.mtn2git_empty b/packages/renderext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/renderext/renderext_0.8.bb b/packages/renderext/renderext_0.8.bb deleted file mode 100644 index a12f7c0da5..0000000000 --- a/packages/renderext/renderext_0.8.bb +++ /dev/null @@ -1,15 +0,0 @@ -SECTION = "libs" -LICENSE = "MIT-X" -DESCRIPTION = "X Render extension headers" - -SRC_URI = "${XLIBS_MIRROR}/renderext-${PV}.tar.bz2" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/renderext/renderext_cvs.bb b/packages/renderext/renderext_cvs.bb deleted file mode 100644 index 08053d95b9..0000000000 --- a/packages/renderext/renderext_cvs.bb +++ /dev/null @@ -1,18 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -LICENSE = "MIT-X" -SECTION = "libs" -DESCRIPTION = "X Render extension headers" -DEFAULT_PREFERENCE = "1" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=Render" -S = "${WORKDIR}/Render" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} -- cgit v1.2.3 From baf908c40064e4769bb5a72ab3ef1c1d4a232439 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:12:41 +0000 Subject: recordext: Drop, superceeded by recordproto and X11R7.X --- packages/recordext/.mtn2git_empty | 0 packages/recordext/recordext_cvs.bb | 17 ----------------- 2 files changed, 17 deletions(-) delete mode 100644 packages/recordext/.mtn2git_empty delete mode 100644 packages/recordext/recordext_cvs.bb diff --git a/packages/recordext/.mtn2git_empty b/packages/recordext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/recordext/recordext_cvs.bb b/packages/recordext/recordext_cvs.bb deleted file mode 100644 index eeaae24762..0000000000 --- a/packages/recordext/recordext_cvs.bb +++ /dev/null @@ -1,17 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -LICENSE = "BSD-X" -SECTION = "libs" -DESCRIPTION = "XRecord extension protocol bits" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=RecordExt" -S = "${WORKDIR}/RecordExt" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} -- cgit v1.2.3 From c70adf6fe1101553fda408f04c397333d3b0e827 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:13:41 +0000 Subject: randrext: Drop, superceeded by randrproto and X11R7.X --- packages/randrext/.mtn2git_empty | 0 packages/randrext/randrext_1.0.bb | 15 --------------- packages/randrext/randrext_cvs.bb | 17 ----------------- 3 files changed, 32 deletions(-) delete mode 100644 packages/randrext/.mtn2git_empty delete mode 100644 packages/randrext/randrext_1.0.bb delete mode 100644 packages/randrext/randrext_cvs.bb diff --git a/packages/randrext/.mtn2git_empty b/packages/randrext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/randrext/randrext_1.0.bb b/packages/randrext/randrext_1.0.bb deleted file mode 100644 index 3fe6a442ac..0000000000 --- a/packages/randrext/randrext_1.0.bb +++ /dev/null @@ -1,15 +0,0 @@ -SECTION = "libs" -LICENSE= "BSD-X" -DESCRIPTION = "X Resize and Rotate extension headers" - -SRC_URI = "${XLIBS_MIRROR}/randrext-${PV}.tar.bz2" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/randrext/randrext_cvs.bb b/packages/randrext/randrext_cvs.bb deleted file mode 100644 index 29cff38373..0000000000 --- a/packages/randrext/randrext_cvs.bb +++ /dev/null @@ -1,17 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -LICENSE= "BSD-X" -SECTION = "libs" -DESCRIPTION = "X Resize and Rotate extension headers" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=Randr" -S = "${WORKDIR}/Randr" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} -- cgit v1.2.3 From 4bc37472f48c57a434b5fc479050541cfe869e75 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:17:28 +0000 Subject: sanity.bbclass: Remove some now unneeded code --- classes/sanity.bbclass | 5 ----- 1 file changed, 5 deletions(-) diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass index 9ef2f09fe0..08b077a1e1 100644 --- a/classes/sanity.bbclass +++ b/classes/sanity.bbclass @@ -162,11 +162,6 @@ python check_sanity_eventhandler() { from bb import note, error, data, __version__ from bb.event import getName - try: - from distutils.version import LooseVersion - except ImportError: - def LooseVersion(v): print "WARNING: sanity.bbclass can't compare versions without python-distutils"; return 1 - if getName(e) == "ConfigParsed": check_sanity(e) -- cgit v1.2.3 From 1f448521217ebe5947a87c953058b87b41e64931 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:17:54 +0000 Subject: bitbake.conf: Add STAGING_EXECPREFIXDIR --- conf/bitbake.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/bitbake.conf b/conf/bitbake.conf index 4caa55c0b6..d0aa47a143 100644 --- a/conf/bitbake.conf +++ b/conf/bitbake.conf @@ -228,6 +228,7 @@ STAGING_BINDIR = "${STAGING_DIR_HOST}${layout_bindir}" STAGING_LIBDIR = "${STAGING_DIR_HOST}${layout_libdir}" STAGING_INCDIR = "${STAGING_DIR_HOST}${layout_includedir}" STAGING_DATADIR = "${STAGING_DIR_HOST}${layout_datadir}" +STAGING_EXECPREFIXDIR = "${STAGING_DIR_HOST}${layout_exec_prefix}" STAGING_LOADER_DIR = "${STAGING_DIR_HOST}/loader" STAGING_FIRMWARE_DIR = "${STAGING_DIR_HOST}/firmware" STAGING_PYDIR = "${STAGING_DIR}/lib/python2.4" -- cgit v1.2.3 From e05f5c59801f4f8d7bdfcb6e9b97c6b513654776 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:18:32 +0000 Subject: mkbold-mkitalic-native: Remove hardcoded staging references --- packages/xorg-app/mkbold-mkitalic-native_0.11.bb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/xorg-app/mkbold-mkitalic-native_0.11.bb b/packages/xorg-app/mkbold-mkitalic-native_0.11.bb index 40082ec816..24ff14e01a 100644 --- a/packages/xorg-app/mkbold-mkitalic-native_0.11.bb +++ b/packages/xorg-app/mkbold-mkitalic-native_0.11.bb @@ -12,10 +12,10 @@ S = "${WORKDIR}/mkbold-mkitalic-${PV}" inherit native do_stage() { - install -d ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin - install -m 755 mkbold ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin/ - install -m 755 mkitalic ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin/ - install -m 755 mkbolditalic ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin/ - install -m 755 ${WORKDIR}/makebifonts ${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}/bin/ + install -d ${STAGING_BINDIR_NATIVE} + install -m 755 mkbold ${STAGING_BINDIR_NATIVE}/ + install -m 755 mkitalic ${STAGING_BINDIR_NATIVE}/ + install -m 755 mkbolditalic ${STAGING_BINDIR_NATIVE}/ + install -m 755 ${WORKDIR}/makebifonts ${STAGING_BINDIR_NATIVE}/ } -- cgit v1.2.3 From 7901d1674a37406ca0ae289256fc6ab16131a66b Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:19:23 +0000 Subject: subversion: Remove hardcoded or plain broken staging references --- packages/subversion/subversion_1.3.1.bb | 2 +- packages/subversion/subversion_1.4.0.bb | 2 +- packages/subversion/subversion_1.4.3.bb | 2 +- packages/subversion/subversion_1.4.5.bb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/subversion/subversion_1.3.1.bb b/packages/subversion/subversion_1.3.1.bb index 1e40cd7a55..79e5e67d7b 100644 --- a/packages/subversion/subversion_1.3.1.bb +++ b/packages/subversion/subversion_1.3.1.bb @@ -9,7 +9,7 @@ SRC_URI = "http://subversion.tigris.org/downloads/${P}.tar.bz2 \ file://disable-revision-install.patch;patch=1 \ file://apr-regex.patch;patch=1" -EXTRA_OECONF = "--with-neon=${STAGING_DIR_NATIVE}${layout_exec_prefix} \ +EXTRA_OECONF = "--with-neon=${STAGING_EXECPREFIXDIR} \ --without-berkeley-db --without-apxs --without-apache \ --without-swig --with-apr=${STAGING_BINDIR_CROSS} \ --with-apr-util=${STAGING_BINDIR_CROSS}" diff --git a/packages/subversion/subversion_1.4.0.bb b/packages/subversion/subversion_1.4.0.bb index 59f42b8c66..305b13c6a4 100644 --- a/packages/subversion/subversion_1.4.0.bb +++ b/packages/subversion/subversion_1.4.0.bb @@ -10,7 +10,7 @@ SRC_URI = "http://subversion.tigris.org/downloads/${P}.tar.bz2 \ file://disable-revision-install.patch;patch=1 \ file://neon-detection.patch;patch=1" -EXTRA_OECONF = "--with-neon=${STAGING_DIR}/${TARGET_SYS} \ +EXTRA_OECONF = "--with-neon=${STAGING_EXECPREFIXDIR} \ --without-berkeley-db --without-apxs --without-apache \ --without-swig --with-apr=${STAGING_BINDIR_CROSS} \ --with-apr-util=${STAGING_BINDIR_CROSS}" diff --git a/packages/subversion/subversion_1.4.3.bb b/packages/subversion/subversion_1.4.3.bb index 9674329f6c..4871674cc8 100644 --- a/packages/subversion/subversion_1.4.3.bb +++ b/packages/subversion/subversion_1.4.3.bb @@ -11,7 +11,7 @@ SRC_URI = "http://subversion.tigris.org/downloads/${P}.tar.bz2 \ file://disable-revision-install.patch;patch=1 \ file://neon-detection.patch;patch=1" -EXTRA_OECONF = "--with-neon=${STAGING_DIR}/${TARGET_SYS} \ +EXTRA_OECONF = "--with-neon=${STAGING_EXECPREFIXDIR} \ --without-berkeley-db --without-apxs --without-apache \ --without-swig --with-apr=${STAGING_BINDIR_CROSS} \ --with-apr-util=${STAGING_BINDIR_CROSS}" diff --git a/packages/subversion/subversion_1.4.5.bb b/packages/subversion/subversion_1.4.5.bb index 1daf45bd0c..5c15d67daf 100644 --- a/packages/subversion/subversion_1.4.5.bb +++ b/packages/subversion/subversion_1.4.5.bb @@ -11,7 +11,7 @@ SRC_URI = "http://subversion.tigris.org/downloads/${P}.tar.bz2 \ file://disable-revision-install.patch;patch=1 \ file://neon-detection.patch;patch=1" -EXTRA_OECONF = "--with-neon=${STAGING_DIR}/${TARGET_SYS} \ +EXTRA_OECONF = "--with-neon=${STAGING_EXECPREFIXDIR} \ --without-berkeley-db --without-apxs --without-apache \ --without-swig --with-apr=${STAGING_BINDIR_CROSS} \ --with-apr-util=${STAGING_BINDIR_CROSS}" -- cgit v1.2.3 From de888109692d3bcb8be8b1268b6b0ad15cbc9879 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:19:58 +0000 Subject: asterisk: Remove hardcoded staging references --- packages/asterisk/asterisk_1.4.10.bb | 20 ++++++++++---------- packages/asterisk/asterisk_1.4.11.bb | 20 ++++++++++---------- packages/asterisk/asterisk_1.4.17.bb | 20 ++++++++++---------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/asterisk/asterisk_1.4.10.bb b/packages/asterisk/asterisk_1.4.10.bb index 4110f01930..416495a0b8 100644 --- a/packages/asterisk/asterisk_1.4.10.bb +++ b/packages/asterisk/asterisk_1.4.10.bb @@ -30,17 +30,17 @@ INITSCRIPT_PARAMS = "defaults 60" inherit autotools update-rc.d -EXTRA_OECONF = "--with-ssl=${STAGING_DIR}/${TARGET_SYS}\ - --with-z=${STAGING_DIR}/${TARGET_SYS}\ - --with-curl=${STAGING_DIR}/${TARGET_SYS}\ - --with-termcap=${STAGING_DIR}/${TARGET_SYS}\ - --with-ogg=${STAGING_DIR}/${TARGET_SYS}\ - --with-vorbis=${STAGING_DIR}/${TARGET_SYS}\ - --with-sqlite=${STAGING_DIR}/${TARGET_SYS}\ - --with-popt=${STAGING_DIR}/${TARGET_SYS}\ - --with-gnutls=${STAGING_DIR}/${TARGET_SYS}\ +EXTRA_OECONF = "--with-ssl=${STAGING_EXECPREFIXDIR} \ + --with-z=${STAGING_EXECPREFIXDIR} \ + --with-curl=${STAGING_EXECPREFIXDIR} \ + --with-termcap=${STAGING_EXECPREFIXDIR} \ + --with-ogg=${STAGING_EXECPREFIXDIR} \ + --with-vorbis=${STAGING_EXECPREFIXDIR} \ + --with-sqlite=${STAGING_EXECPREFIXDIR} \ + --with-popt=${STAGING_EXECPREFIXDIR} \ + --with-gnutls=${STAGING_EXECPREFIXDIR} \ --without-curses\ - --with-ncurses=${STAGING_DIR}/${TARGET_SYS}\ + --with-ncurses=${STAGING_EXECPREFIXDIR} \ --without-imap\ --without-netsnmp\ --without-odbc\ diff --git a/packages/asterisk/asterisk_1.4.11.bb b/packages/asterisk/asterisk_1.4.11.bb index 0d4f30aef9..2f116864e4 100644 --- a/packages/asterisk/asterisk_1.4.11.bb +++ b/packages/asterisk/asterisk_1.4.11.bb @@ -32,17 +32,17 @@ INITSCRIPT_PARAMS = "defaults 60" inherit autotools update-rc.d -EXTRA_OECONF = "--with-ssl=${STAGING_DIR}/${TARGET_SYS}\ - --with-z=${STAGING_DIR}/${TARGET_SYS}\ - --with-curl=${STAGING_DIR}/${TARGET_SYS}\ - --with-termcap=${STAGING_DIR}/${TARGET_SYS}\ - --with-ogg=${STAGING_DIR}/${TARGET_SYS}\ - --with-vorbis=${STAGING_DIR}/${TARGET_SYS}\ - --with-sqlite=${STAGING_DIR}/${TARGET_SYS}\ - --with-popt=${STAGING_DIR}/${TARGET_SYS}\ - --with-gnutls=${STAGING_DIR}/${TARGET_SYS}\ +EXTRA_OECONF = "--with-ssl=${STAGING_EXECPREFIXDIR}\ + --with-z=${STAGING_EXECPREFIXDIR}\ + --with-curl=${STAGING_EXECPREFIXDIR}\ + --with-termcap=${STAGING_EXECPREFIXDIR}\ + --with-ogg=${STAGING_EXECPREFIXDIR}\ + --with-vorbis=${STAGING_EXECPREFIXDIR}\ + --with-sqlite=${STAGING_EXECPREFIXDIR}\ + --with-popt=${STAGING_EXECPREFIXDIR}\ + --with-gnutls=${STAGING_EXECPREFIXDIR}\ --without-curses\ - --with-ncurses=${STAGING_DIR}/${TARGET_SYS}\ + --with-ncurses=${STAGING_EXECPREFIXDIR}\ --without-imap\ --without-netsnmp\ --without-odbc\ diff --git a/packages/asterisk/asterisk_1.4.17.bb b/packages/asterisk/asterisk_1.4.17.bb index fb64581364..cecb403262 100644 --- a/packages/asterisk/asterisk_1.4.17.bb +++ b/packages/asterisk/asterisk_1.4.17.bb @@ -31,17 +31,17 @@ INITSCRIPT_PARAMS = "defaults 60" inherit autotools update-rc.d -EXTRA_OECONF = "--with-ssl=${STAGING_DIR}/${TARGET_SYS}\ - --with-z=${STAGING_DIR}/${TARGET_SYS}\ - --with-curl=${STAGING_DIR}/${TARGET_SYS}\ - --with-termcap=${STAGING_DIR}/${TARGET_SYS}\ - --with-ogg=${STAGING_DIR}/${TARGET_SYS}\ - --with-vorbis=${STAGING_DIR}/${TARGET_SYS}\ - --with-sqlite=${STAGING_DIR}/${TARGET_SYS}\ - --with-popt=${STAGING_DIR}/${TARGET_SYS}\ - --with-gnutls=${STAGING_DIR}/${TARGET_SYS}\ +EXTRA_OECONF = "--with-ssl=${STAGING_EXECPREFIXDIR} \ + --with-z=${STAGING_EXECPREFIXDIR} \ + --with-curl=${STAGING_EXECPREFIXDIR} \ + --with-termcap=${STAGING_EXECPREFIXDIR} \ + --with-ogg=${STAGING_EXECPREFIXDIR} \ + --with-vorbis=${STAGING_EXECPREFIXDIR} \ + --with-sqlite=${STAGING_EXECPREFIXDIR} \ + --with-popt=${STAGING_EXECPREFIXDIR} \ + --with-gnutls=${STAGING_EXECPREFIXDIR} \ --without-curses\ - --with-ncurses=${STAGING_DIR}/${TARGET_SYS}\ + --with-ncurses=${STAGING_EXECPREFIXDIR} \ --without-imap\ --without-netsnmp\ --without-odbc\ -- cgit v1.2.3 From d2d8d6ce29dcaf31e9945df4aa7d9e27603a1311 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:21:04 +0000 Subject: libxine: Remove hardcoded staging references --- packages/libxine/libxine-fb_1.0.bb | 6 +++--- packages/libxine/libxine-x11_1.0.bb | 6 +++--- packages/libxine/libxine_1.1.0.bb | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/libxine/libxine-fb_1.0.bb b/packages/libxine/libxine-fb_1.0.bb index d0f58303fa..a51dc83896 100644 --- a/packages/libxine/libxine-fb_1.0.bb +++ b/packages/libxine/libxine-fb_1.0.bb @@ -26,10 +26,10 @@ S = "${WORKDIR}/xine-lib-${PV}" SOV = "1.0.7" -EXTRA_OECONF="-with-zlib-path=${STAGING_DIR}/${HOST_SYS} \ - --with-vorbis-prefix=${STAGING_DIR}/${HOST_SYS} \ +EXTRA_OECONF="-with-zlib-path=${STAGING_EXECPREFIXDIR} \ + --with-vorbis-prefix=${STAGING_EXECPREFIXDIR} \ --disable-oggtest \ - --with-ogg-prefix=${STAGING_DIR}/${HOST_SYS} \ + --with-ogg-prefix=${STAGING_EXECPREFIXDIR} \ --disable-altivec --disable-vis --disable-mlib \ --enable-shared --disable-static \ --disable-fb --disable-alsa --disable-vcd \ diff --git a/packages/libxine/libxine-x11_1.0.bb b/packages/libxine/libxine-x11_1.0.bb index db0d725aac..806f8fd4b7 100644 --- a/packages/libxine/libxine-x11_1.0.bb +++ b/packages/libxine/libxine-x11_1.0.bb @@ -27,10 +27,10 @@ S = "${WORKDIR}/xine-lib-${PV}" SOV = "1.0.7" -EXTRA_OECONF="-with-zlib-path=${STAGING_DIR}/${HOST_SYS} \ - --with-vorbis-prefix=${STAGING_DIR}/${HOST_SYS} \ +EXTRA_OECONF="-with-zlib-path=${STAGING_EXECPREFIXDIR} \ + --with-vorbis-prefix=${STAGING_EXECPREFIXDIR} \ --disable-oggtest \ - --with-ogg-prefix=${STAGING_DIR}/${HOST_SYS} \ + --with-ogg-prefix=${STAGING_EXECPREFIXDIR} \ --disable-altivec --disable-vis --disable-mlib \ --disable-fb --disable-alsa --disable-vcd \ --disable-asf --disable-faad --disable-iconv \ diff --git a/packages/libxine/libxine_1.1.0.bb b/packages/libxine/libxine_1.1.0.bb index 7732eb813e..9219e5fdcd 100644 --- a/packages/libxine/libxine_1.1.0.bb +++ b/packages/libxine/libxine_1.1.0.bb @@ -31,10 +31,10 @@ S = "${WORKDIR}/xine-lib-${PV}" SOV = "1.0.7" -EXTRA_OECONF="-with-zlib-path=${STAGING_DIR}/${HOST_SYS} \ - --with-vorbis-prefix=${STAGING_DIR}/${HOST_SYS} \ +EXTRA_OECONF="-with-zlib-path=${STAGING_EXECPREFIXDIR} \ + --with-vorbis-prefix=${STAGING_EXECPREFIXDIR} \ --disable-oggtest \ - --with-ogg-prefix=${STAGING_DIR}/${HOST_SYS} \ + --with-ogg-prefix=${STAGING_EXECPREFIXDIR} \ --disable-altivec --disable-vis --disable-mlib \ --disable-fb --disable-alsa --disable-vcd \ --disable-asf --disable-faad --disable-iconv \ -- cgit v1.2.3 From 82f966b8c7ef4214975b5abd171d0bccc870ea1a Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:22:10 +0000 Subject: rdesktop, elf2flt, primstumbler, xmms-embedded: Remove hardcoded staging references --- packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb | 6 +++--- packages/prismstumbler/prismstumbler_0.7.3.bb | 2 +- packages/rdesktop/rdesktop_1.3.1.bb | 4 ++-- packages/rdesktop/rdesktop_1.4.1.bb | 2 +- packages/rdesktop/rdesktop_1.5.0.bb | 2 +- packages/uclibc/elf2flt_svn.bb | 6 +++--- packages/xmms-embedded/xmms-embedded_20040327.bb | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb b/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb index 7b60122445..22309f9203 100644 --- a/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb +++ b/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb @@ -20,12 +20,12 @@ inherit autotools pkgconfig EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \ --x-libraries=${STAGING_LIBDIR} \ - --with-libgps=${STAGING_DIR}/${HOST_SYS} \ - --with-libpcap=${STAGING_DIR}/${HOST_SYS} \ + --with-libgps=${STAGING_EXECPREFIXDIR} \ + --with-libpcap=${STAGING_EXECPREFIXDIR} \ --with-sqlite-includes=${STAGING_INCDIR} \ --with-sqlite-libs=${STAGING_LIBDIR} \ --without-athena --enable-dbus \ - --with-libiw=${STAGING_DIR}/${HOST_SYS}" + --with-libiw=${STAGING_EXECPREFIXDIR}" CFLAGS =+ "-I${S}/include" LDFLAGS += "-lz" diff --git a/packages/prismstumbler/prismstumbler_0.7.3.bb b/packages/prismstumbler/prismstumbler_0.7.3.bb index 29a112d95a..5bddcf31b6 100644 --- a/packages/prismstumbler/prismstumbler_0.7.3.bb +++ b/packages/prismstumbler/prismstumbler_0.7.3.bb @@ -17,7 +17,7 @@ inherit autotools pkgconfig EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \ --x-libraries=${STAGING_LIBDIR} \ - --with-libpcap=${STAGING_DIR}/${HOST_SYS} \ + --with-libpcap=${STAGING_EXECPREFIXDIR} \ --with-sqlite-includes=${STAGING_INCDIR} \ --with-sqlite-libs=${STAGING_LIBDIR} \ --without-athena \ diff --git a/packages/rdesktop/rdesktop_1.3.1.bb b/packages/rdesktop/rdesktop_1.3.1.bb index 12ff1c5bcd..f54c675314 100644 --- a/packages/rdesktop/rdesktop_1.3.1.bb +++ b/packages/rdesktop/rdesktop_1.3.1.bb @@ -22,8 +22,8 @@ do_configure() { --bindir=${bindir} \ --mandir=${mandir} \ --sharedir=${datadir} \ - --with-x=${STAGING_DIR}/${HOST_SYS} \ - --with-openssl=${STAGING_DIR}/${HOST_SYS} \ + --with-x=${STAGING_EXECPREFIXDIR} \ + --with-openssl=${STAGING_EXECPREFIXDIR} \ --with-oss \ --without-debug } diff --git a/packages/rdesktop/rdesktop_1.4.1.bb b/packages/rdesktop/rdesktop_1.4.1.bb index 7581647a57..da1794b190 100644 --- a/packages/rdesktop/rdesktop_1.4.1.bb +++ b/packages/rdesktop/rdesktop_1.4.1.bb @@ -11,4 +11,4 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/rdesktop/rdesktop-${PV}.tar.gz \ inherit autotools -EXTRA_OECONF = "--with-openssl=${STAGING_LIBDIR}/.. " +EXTRA_OECONF = "--with-openssl=${STAGING_EXECPREFIXDIR} " diff --git a/packages/rdesktop/rdesktop_1.5.0.bb b/packages/rdesktop/rdesktop_1.5.0.bb index de270e1025..12385c127f 100644 --- a/packages/rdesktop/rdesktop_1.5.0.bb +++ b/packages/rdesktop/rdesktop_1.5.0.bb @@ -10,4 +10,4 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/rdesktop/rdesktop-${PV}.tar.gz" inherit autotools -EXTRA_OECONF = "--with-openssl=${STAGING_LIBDIR}/.. " +EXTRA_OECONF = "--with-openssl=${STAGING_EXECPREFIXDIR} " diff --git a/packages/uclibc/elf2flt_svn.bb b/packages/uclibc/elf2flt_svn.bb index 0fac49d468..3af893a7a8 100644 --- a/packages/uclibc/elf2flt_svn.bb +++ b/packages/uclibc/elf2flt_svn.bb @@ -9,7 +9,7 @@ SRC_URI = "svn://sources.blackfin.uclinux.org/toolchain/trunk;module=${PN}" S = "${WORKDIR}/${PN}" -EXTRA_OECONF = " --with-libbfd=${STAGING_DIR}/${TARGET_SYS}/lib/libbfd.a \ - --with-libiberty=${STAGING_DIR}/${TARGET_SYS}/lib/libiberty.a \ - --with-bfd-include-dir=${STAGING_DIR}/${TARGET_SYS}/include \ +EXTRA_OECONF = " --with-libbfd=${STAGING_LIBDIR}/libbfd.a \ + --with-libiberty=${STAGING_LIBDIR}/libiberty.a \ + --with-bfd-include-dir=${STAGING_INCDIR} \ " diff --git a/packages/xmms-embedded/xmms-embedded_20040327.bb b/packages/xmms-embedded/xmms-embedded_20040327.bb index c525f6299c..4d5ea6a12b 100644 --- a/packages/xmms-embedded/xmms-embedded_20040327.bb +++ b/packages/xmms-embedded/xmms-embedded_20040327.bb @@ -31,7 +31,7 @@ do_configure_prepend() { } do_compile() { - oe_runmake "STAGING_DIR=${STAGING_DIR}/${HOST_SYS}" + oe_runmake "STAGING_DIR=${STAGING_EXECPREFIXDIR}" } do_install() { -- cgit v1.2.3 From 5f80772db194135a8817add109762e7e96ee75f2 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 21 Feb 2008 13:33:35 +0000 Subject: Move various X extensions to obsolete since they've been superceeded by *proto in X11R7.X --- packages/compositeext/.mtn2git_empty | 0 packages/compositeext/compositeext_2.0.bb | 16 ------------- packages/compositeext/compositeext_cvs.bb | 19 --------------- packages/damageext/.mtn2git_empty | 0 packages/damageext/damageext-1.0/.mtn2git_empty | 0 packages/damageext/damageext-1.0/autofoo.patch | 18 -------------- packages/damageext/damageext_1.0.bb | 18 -------------- packages/damageext/damageext_cvs.bb | 19 --------------- packages/damageext/files/.mtn2git_empty | 0 packages/damageext/files/autofoo.patch | 28 ---------------------- packages/fixesext/.mtn2git_empty | 0 packages/fixesext/fixesext_2.0.1.bb | 16 ------------- packages/fixesext/fixesext_cvs.bb | 19 --------------- packages/obsolete/compositeext/.mtn2git_empty | 0 packages/obsolete/compositeext/compositeext_2.0.bb | 16 +++++++++++++ packages/obsolete/compositeext/compositeext_cvs.bb | 19 +++++++++++++++ packages/obsolete/damageext/.mtn2git_empty | 0 .../damageext/damageext-1.0/.mtn2git_empty | 0 .../obsolete/damageext/damageext-1.0/autofoo.patch | 18 ++++++++++++++ packages/obsolete/damageext/damageext_1.0.bb | 18 ++++++++++++++ packages/obsolete/damageext/damageext_cvs.bb | 19 +++++++++++++++ packages/obsolete/damageext/files/.mtn2git_empty | 0 packages/obsolete/damageext/files/autofoo.patch | 28 ++++++++++++++++++++++ packages/obsolete/fixesext/.mtn2git_empty | 0 packages/obsolete/fixesext/fixesext_2.0.1.bb | 16 +++++++++++++ packages/obsolete/fixesext/fixesext_cvs.bb | 19 +++++++++++++++ packages/obsolete/panoramixext/.mtn2git_empty | 0 packages/obsolete/panoramixext/panoramixext_1.1.bb | 17 +++++++++++++ packages/obsolete/panoramixext/panoramixext_cvs.bb | 19 +++++++++++++++ packages/obsolete/resourceext/.mtn2git_empty | 0 packages/obsolete/resourceext/resourceext_1.0.bb | 16 +++++++++++++ packages/obsolete/resourceext/resourceext_cvs.bb | 18 ++++++++++++++ packages/obsolete/xxf86dgaext/.mtn2git_empty | 0 packages/obsolete/xxf86dgaext/xxf86dgaext_cvs.bb | 13 ++++++++++ packages/obsolete/xxf86vmext/.mtn2git_empty | 0 packages/obsolete/xxf86vmext/xxf86vmext_cvs.bb | 13 ++++++++++ packages/panoramixext/.mtn2git_empty | 0 packages/panoramixext/panoramixext_1.1.bb | 17 ------------- packages/panoramixext/panoramixext_cvs.bb | 19 --------------- packages/resourceext/.mtn2git_empty | 0 packages/resourceext/resourceext_1.0.bb | 16 ------------- packages/resourceext/resourceext_cvs.bb | 18 -------------- packages/xxf86dgaext/.mtn2git_empty | 0 packages/xxf86dgaext/xxf86dgaext_cvs.bb | 13 ---------- packages/xxf86vmext/.mtn2git_empty | 0 packages/xxf86vmext/xxf86vmext_cvs.bb | 13 ---------- 46 files changed, 249 insertions(+), 249 deletions(-) delete mode 100644 packages/compositeext/.mtn2git_empty delete mode 100644 packages/compositeext/compositeext_2.0.bb delete mode 100644 packages/compositeext/compositeext_cvs.bb delete mode 100644 packages/damageext/.mtn2git_empty delete mode 100644 packages/damageext/damageext-1.0/.mtn2git_empty delete mode 100644 packages/damageext/damageext-1.0/autofoo.patch delete mode 100644 packages/damageext/damageext_1.0.bb delete mode 100644 packages/damageext/damageext_cvs.bb delete mode 100644 packages/damageext/files/.mtn2git_empty delete mode 100644 packages/damageext/files/autofoo.patch delete mode 100644 packages/fixesext/.mtn2git_empty delete mode 100644 packages/fixesext/fixesext_2.0.1.bb delete mode 100644 packages/fixesext/fixesext_cvs.bb create mode 100644 packages/obsolete/compositeext/.mtn2git_empty create mode 100644 packages/obsolete/compositeext/compositeext_2.0.bb create mode 100644 packages/obsolete/compositeext/compositeext_cvs.bb create mode 100644 packages/obsolete/damageext/.mtn2git_empty create mode 100644 packages/obsolete/damageext/damageext-1.0/.mtn2git_empty create mode 100644 packages/obsolete/damageext/damageext-1.0/autofoo.patch create mode 100644 packages/obsolete/damageext/damageext_1.0.bb create mode 100644 packages/obsolete/damageext/damageext_cvs.bb create mode 100644 packages/obsolete/damageext/files/.mtn2git_empty create mode 100644 packages/obsolete/damageext/files/autofoo.patch create mode 100644 packages/obsolete/fixesext/.mtn2git_empty create mode 100644 packages/obsolete/fixesext/fixesext_2.0.1.bb create mode 100644 packages/obsolete/fixesext/fixesext_cvs.bb create mode 100644 packages/obsolete/panoramixext/.mtn2git_empty create mode 100644 packages/obsolete/panoramixext/panoramixext_1.1.bb create mode 100644 packages/obsolete/panoramixext/panoramixext_cvs.bb create mode 100644 packages/obsolete/resourceext/.mtn2git_empty create mode 100644 packages/obsolete/resourceext/resourceext_1.0.bb create mode 100644 packages/obsolete/resourceext/resourceext_cvs.bb create mode 100644 packages/obsolete/xxf86dgaext/.mtn2git_empty create mode 100644 packages/obsolete/xxf86dgaext/xxf86dgaext_cvs.bb create mode 100644 packages/obsolete/xxf86vmext/.mtn2git_empty create mode 100644 packages/obsolete/xxf86vmext/xxf86vmext_cvs.bb delete mode 100644 packages/panoramixext/.mtn2git_empty delete mode 100644 packages/panoramixext/panoramixext_1.1.bb delete mode 100644 packages/panoramixext/panoramixext_cvs.bb delete mode 100644 packages/resourceext/.mtn2git_empty delete mode 100644 packages/resourceext/resourceext_1.0.bb delete mode 100644 packages/resourceext/resourceext_cvs.bb delete mode 100644 packages/xxf86dgaext/.mtn2git_empty delete mode 100644 packages/xxf86dgaext/xxf86dgaext_cvs.bb delete mode 100644 packages/xxf86vmext/.mtn2git_empty delete mode 100644 packages/xxf86vmext/xxf86vmext_cvs.bb diff --git a/packages/compositeext/.mtn2git_empty b/packages/compositeext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/compositeext/compositeext_2.0.bb b/packages/compositeext/compositeext_2.0.bb deleted file mode 100644 index b9b634d391..0000000000 --- a/packages/compositeext/compositeext_2.0.bb +++ /dev/null @@ -1,16 +0,0 @@ -SECTION = "libs" -LICENSE= "BSD-X" -DEPENDS = "xextensions fixesext" -DESCRIPTION = "X Composite extension headers and specification" - -SRC_URI = "${XLIBS_MIRROR}/compositeext-${PV}.tar.bz2" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/compositeext/compositeext_cvs.bb b/packages/compositeext/compositeext_cvs.bb deleted file mode 100644 index 8f0f4f9f46..0000000000 --- a/packages/compositeext/compositeext_cvs.bb +++ /dev/null @@ -1,19 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -LICENSE= "BSD-X" -SECTION = "libs" -DEPENDS = "xextensions fixesext" -DESCRIPTION = "X Composite extension headers and specification" -DEFAULT_PREFERENCE = "1" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=CompositeExt" -S = "${WORKDIR}/CompositeExt" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/damageext/.mtn2git_empty b/packages/damageext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/damageext/damageext-1.0/.mtn2git_empty b/packages/damageext/damageext-1.0/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/damageext/damageext-1.0/autofoo.patch b/packages/damageext/damageext-1.0/autofoo.patch deleted file mode 100644 index e36fb1d74b..0000000000 --- a/packages/damageext/damageext-1.0/autofoo.patch +++ /dev/null @@ -1,18 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- damageext-1.0/configure.ac~autofoo 2003-11-25 22:47:58.000000000 -0500 -+++ damageext-1.0/configure.ac 2005-01-16 11:47:08.123775952 -0500 -@@ -25,9 +25,9 @@ - - AC_PREREQ([2.57]) - AC_INIT([damageext], [1.0], [keithp@keithp.com], damageext) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE --AC_CONFIG_AUX_DIR(.) - - PKG_CHECK_MODULES(FIXESEXT, fixesext) - diff --git a/packages/damageext/damageext_1.0.bb b/packages/damageext/damageext_1.0.bb deleted file mode 100644 index 3b431a8688..0000000000 --- a/packages/damageext/damageext_1.0.bb +++ /dev/null @@ -1,18 +0,0 @@ -SECTION = "libs" -LICENSE = "MIT-X" -DEPENDS = "xextensions fixesext" -DESCRIPTION = "X Damage extension headers and specification" -PR = "r1" - -SRC_URI = "${XLIBS_MIRROR}/damageext-${PV}.tar.bz2 \ - file://autofoo.patch;patch=1" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/damageext/damageext_cvs.bb b/packages/damageext/damageext_cvs.bb deleted file mode 100644 index e9ffa7d2b1..0000000000 --- a/packages/damageext/damageext_cvs.bb +++ /dev/null @@ -1,19 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -LICENSE = "MIT-X" -SECTION = "libs" -DEPENDS = "xextensions fixesext" -DESCRIPTION = "X Damage extension headers and specification" -PR = "r1" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=DamageExt" -S = "${WORKDIR}/DamageExt" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/damageext/files/.mtn2git_empty b/packages/damageext/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/damageext/files/autofoo.patch b/packages/damageext/files/autofoo.patch deleted file mode 100644 index 48c05cd836..0000000000 --- a/packages/damageext/files/autofoo.patch +++ /dev/null @@ -1,28 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- DamageExt/configure.ac~autofoo.patch 2003-11-25 22:47:58.000000000 -0500 -+++ DamageExt/configure.ac 2005-01-16 11:50:07.183554728 -0500 -@@ -25,9 +25,9 @@ - - AC_PREREQ([2.57]) - AC_INIT([damageext], [1.0], [keithp@keithp.com], damageext) -+AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) - AM_MAINTAINER_MODE --AC_CONFIG_AUX_DIR(.) - - PKG_CHECK_MODULES(FIXESEXT, fixesext) - ---- DamageExt/ChangeLog~autofoo.patch 2004-02-03 15:44:42.000000000 -0500 -+++ DamageExt/ChangeLog 2005-01-16 11:52:45.455493736 -0500 -@@ -1,3 +1,7 @@ -+2005-01-16 Chris Larson -+ -+ * configure.ac: Fix to work with automake 1.9.x. -+ - 2004-02-03 Jim Gettys - - * AUTHORS: Add AUTHORS to file diff --git a/packages/fixesext/.mtn2git_empty b/packages/fixesext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/fixesext/fixesext_2.0.1.bb b/packages/fixesext/fixesext_2.0.1.bb deleted file mode 100644 index feb53d60eb..0000000000 --- a/packages/fixesext/fixesext_2.0.1.bb +++ /dev/null @@ -1,16 +0,0 @@ -SECTION = "libs" -LICENSE= "BSD-X" -DEPENDS = "xextensions" -DESCRIPTION = "X Fixes extension headers and specification." - -SRC_URI = "${XLIBS_MIRROR}/fixesext-${PV}.tar.bz2" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/fixesext/fixesext_cvs.bb b/packages/fixesext/fixesext_cvs.bb deleted file mode 100644 index 4ddbc96c64..0000000000 --- a/packages/fixesext/fixesext_cvs.bb +++ /dev/null @@ -1,19 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -LICENSE= "BSD-X" -SECTION = "libs" -DEPENDS = "xextensions" -DESCRIPTION = "X Fixes extension headers and specification." -DEFAULT_PREFERENCE = "1" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=FixesExt" -S = "${WORKDIR}/FixesExt" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/obsolete/compositeext/.mtn2git_empty b/packages/obsolete/compositeext/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/compositeext/compositeext_2.0.bb b/packages/obsolete/compositeext/compositeext_2.0.bb new file mode 100644 index 0000000000..b9b634d391 --- /dev/null +++ b/packages/obsolete/compositeext/compositeext_2.0.bb @@ -0,0 +1,16 @@ +SECTION = "libs" +LICENSE= "BSD-X" +DEPENDS = "xextensions fixesext" +DESCRIPTION = "X Composite extension headers and specification" + +SRC_URI = "${XLIBS_MIRROR}/compositeext-${PV}.tar.bz2" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} +} diff --git a/packages/obsolete/compositeext/compositeext_cvs.bb b/packages/obsolete/compositeext/compositeext_cvs.bb new file mode 100644 index 0000000000..8f0f4f9f46 --- /dev/null +++ b/packages/obsolete/compositeext/compositeext_cvs.bb @@ -0,0 +1,19 @@ +PV = "0.0+cvs${SRCDATE}" +LICENSE= "BSD-X" +SECTION = "libs" +DEPENDS = "xextensions fixesext" +DESCRIPTION = "X Composite extension headers and specification" +DEFAULT_PREFERENCE = "1" + +SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=CompositeExt" +S = "${WORKDIR}/CompositeExt" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} +} diff --git a/packages/obsolete/damageext/.mtn2git_empty b/packages/obsolete/damageext/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/damageext/damageext-1.0/.mtn2git_empty b/packages/obsolete/damageext/damageext-1.0/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/damageext/damageext-1.0/autofoo.patch b/packages/obsolete/damageext/damageext-1.0/autofoo.patch new file mode 100644 index 0000000000..e36fb1d74b --- /dev/null +++ b/packages/obsolete/damageext/damageext-1.0/autofoo.patch @@ -0,0 +1,18 @@ + +# +# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher +# + +--- damageext-1.0/configure.ac~autofoo 2003-11-25 22:47:58.000000000 -0500 ++++ damageext-1.0/configure.ac 2005-01-16 11:47:08.123775952 -0500 +@@ -25,9 +25,9 @@ + + AC_PREREQ([2.57]) + AC_INIT([damageext], [1.0], [keithp@keithp.com], damageext) ++AC_CONFIG_AUX_DIR(.) + AM_INIT_AUTOMAKE([dist-bzip2]) + AM_MAINTAINER_MODE +-AC_CONFIG_AUX_DIR(.) + + PKG_CHECK_MODULES(FIXESEXT, fixesext) + diff --git a/packages/obsolete/damageext/damageext_1.0.bb b/packages/obsolete/damageext/damageext_1.0.bb new file mode 100644 index 0000000000..3b431a8688 --- /dev/null +++ b/packages/obsolete/damageext/damageext_1.0.bb @@ -0,0 +1,18 @@ +SECTION = "libs" +LICENSE = "MIT-X" +DEPENDS = "xextensions fixesext" +DESCRIPTION = "X Damage extension headers and specification" +PR = "r1" + +SRC_URI = "${XLIBS_MIRROR}/damageext-${PV}.tar.bz2 \ + file://autofoo.patch;patch=1" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} +} diff --git a/packages/obsolete/damageext/damageext_cvs.bb b/packages/obsolete/damageext/damageext_cvs.bb new file mode 100644 index 0000000000..e9ffa7d2b1 --- /dev/null +++ b/packages/obsolete/damageext/damageext_cvs.bb @@ -0,0 +1,19 @@ +PV = "0.0+cvs${SRCDATE}" +LICENSE = "MIT-X" +SECTION = "libs" +DEPENDS = "xextensions fixesext" +DESCRIPTION = "X Damage extension headers and specification" +PR = "r1" + +SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=DamageExt" +S = "${WORKDIR}/DamageExt" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} +} diff --git a/packages/obsolete/damageext/files/.mtn2git_empty b/packages/obsolete/damageext/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/damageext/files/autofoo.patch b/packages/obsolete/damageext/files/autofoo.patch new file mode 100644 index 0000000000..48c05cd836 --- /dev/null +++ b/packages/obsolete/damageext/files/autofoo.patch @@ -0,0 +1,28 @@ + +# +# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher +# + +--- DamageExt/configure.ac~autofoo.patch 2003-11-25 22:47:58.000000000 -0500 ++++ DamageExt/configure.ac 2005-01-16 11:50:07.183554728 -0500 +@@ -25,9 +25,9 @@ + + AC_PREREQ([2.57]) + AC_INIT([damageext], [1.0], [keithp@keithp.com], damageext) ++AC_CONFIG_AUX_DIR(.) + AM_INIT_AUTOMAKE([dist-bzip2]) + AM_MAINTAINER_MODE +-AC_CONFIG_AUX_DIR(.) + + PKG_CHECK_MODULES(FIXESEXT, fixesext) + +--- DamageExt/ChangeLog~autofoo.patch 2004-02-03 15:44:42.000000000 -0500 ++++ DamageExt/ChangeLog 2005-01-16 11:52:45.455493736 -0500 +@@ -1,3 +1,7 @@ ++2005-01-16 Chris Larson ++ ++ * configure.ac: Fix to work with automake 1.9.x. ++ + 2004-02-03 Jim Gettys + + * AUTHORS: Add AUTHORS to file diff --git a/packages/obsolete/fixesext/.mtn2git_empty b/packages/obsolete/fixesext/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/fixesext/fixesext_2.0.1.bb b/packages/obsolete/fixesext/fixesext_2.0.1.bb new file mode 100644 index 0000000000..feb53d60eb --- /dev/null +++ b/packages/obsolete/fixesext/fixesext_2.0.1.bb @@ -0,0 +1,16 @@ +SECTION = "libs" +LICENSE= "BSD-X" +DEPENDS = "xextensions" +DESCRIPTION = "X Fixes extension headers and specification." + +SRC_URI = "${XLIBS_MIRROR}/fixesext-${PV}.tar.bz2" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} +} diff --git a/packages/obsolete/fixesext/fixesext_cvs.bb b/packages/obsolete/fixesext/fixesext_cvs.bb new file mode 100644 index 0000000000..4ddbc96c64 --- /dev/null +++ b/packages/obsolete/fixesext/fixesext_cvs.bb @@ -0,0 +1,19 @@ +PV = "0.0+cvs${SRCDATE}" +LICENSE= "BSD-X" +SECTION = "libs" +DEPENDS = "xextensions" +DESCRIPTION = "X Fixes extension headers and specification." +DEFAULT_PREFERENCE = "1" + +SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=FixesExt" +S = "${WORKDIR}/FixesExt" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} +} diff --git a/packages/obsolete/panoramixext/.mtn2git_empty b/packages/obsolete/panoramixext/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/panoramixext/panoramixext_1.1.bb b/packages/obsolete/panoramixext/panoramixext_1.1.bb new file mode 100644 index 0000000000..2da504779f --- /dev/null +++ b/packages/obsolete/panoramixext/panoramixext_1.1.bb @@ -0,0 +1,17 @@ +SECTION = "libs" +LICENSE= "MIT" +PRIORITY = "optional" +DESCRIPTION = "PanoramiX extension headers" + +SRC_URI = "${XLIBS_MIRROR}/panoramixext-${PV}.tar.bz2" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} \ + mandir=${STAGING_DIR}/man +} diff --git a/packages/obsolete/panoramixext/panoramixext_cvs.bb b/packages/obsolete/panoramixext/panoramixext_cvs.bb new file mode 100644 index 0000000000..08cc0cc51e --- /dev/null +++ b/packages/obsolete/panoramixext/panoramixext_cvs.bb @@ -0,0 +1,19 @@ +PV = "0.0+cvs${SRCDATE}" +LICENSE= "MIT" +SECTION = "libs" +PRIORITY = "optional" +DESCRIPTION = "PanoramiX extension headers" + +SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=PanoramiXExt" +S = "${WORKDIR}/PanoramiXExt" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} \ + mandir=${STAGING_DIR}/man +} diff --git a/packages/obsolete/resourceext/.mtn2git_empty b/packages/obsolete/resourceext/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/resourceext/resourceext_1.0.bb b/packages/obsolete/resourceext/resourceext_1.0.bb new file mode 100644 index 0000000000..55780b1d22 --- /dev/null +++ b/packages/obsolete/resourceext/resourceext_1.0.bb @@ -0,0 +1,16 @@ +SECTION = "libs" +LICENSE = "Xorg" +DEPENDS = "xextensions" +DESCRIPTION = "X Resource usage extension headers" + +SRC_URI = "${XLIBS_MIRROR}/resourceext-${PV}.tar.bz2" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} +} diff --git a/packages/obsolete/resourceext/resourceext_cvs.bb b/packages/obsolete/resourceext/resourceext_cvs.bb new file mode 100644 index 0000000000..b0fe23392e --- /dev/null +++ b/packages/obsolete/resourceext/resourceext_cvs.bb @@ -0,0 +1,18 @@ +PV = "0.0+cvs${SRCDATE}" +SECTION = "libs" +LICENSE = "Xorg" +DEPENDS = "xextensions" +DESCRIPTION = "X Resource usage extension headers" + +SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=ResourceExt" +S = "${WORKDIR}/ResourceExt" + +inherit autotools pkgconfig + +do_stage() { + oe_runmake install prefix=${STAGING_DIR} \ + bindir=${STAGING_BINDIR} \ + includedir=${STAGING_INCDIR} \ + libdir=${STAGING_LIBDIR} \ + datadir=${STAGING_DATADIR} +} diff --git a/packages/obsolete/xxf86dgaext/.mtn2git_empty b/packages/obsolete/xxf86dgaext/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/xxf86dgaext/xxf86dgaext_cvs.bb b/packages/obsolete/xxf86dgaext/xxf86dgaext_cvs.bb new file mode 100644 index 0000000000..30788049c7 --- /dev/null +++ b/packages/obsolete/xxf86dgaext/xxf86dgaext_cvs.bb @@ -0,0 +1,13 @@ +PV = "0.0+cvs${SRCDATE}" +LICENSE = "Xorg" +SECTION = "x11/libs" +DESCRIPTION = "Xxf86dga extension headers" + +SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=XF86DGAExt" +S = "${WORKDIR}/XF86DGAExt" + +inherit autotools pkgconfig + +do_stage() { + autotools_stage_all +} diff --git a/packages/obsolete/xxf86vmext/.mtn2git_empty b/packages/obsolete/xxf86vmext/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/obsolete/xxf86vmext/xxf86vmext_cvs.bb b/packages/obsolete/xxf86vmext/xxf86vmext_cvs.bb new file mode 100644 index 0000000000..06145e2905 --- /dev/null +++ b/packages/obsolete/xxf86vmext/xxf86vmext_cvs.bb @@ -0,0 +1,13 @@ +PV = "0.0+cvs${SRCDATE}" +LICENSE = "MIT" +SECTION = "x11/libs" +DESCRIPTION = "Xxf86vm extension headers" + +SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=XF86VMExt" +S = "${WORKDIR}/XF86VMExt" + +inherit autotools pkgconfig + +do_stage() { + autotools_stage_all +} diff --git a/packages/panoramixext/.mtn2git_empty b/packages/panoramixext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/panoramixext/panoramixext_1.1.bb b/packages/panoramixext/panoramixext_1.1.bb deleted file mode 100644 index 2da504779f..0000000000 --- a/packages/panoramixext/panoramixext_1.1.bb +++ /dev/null @@ -1,17 +0,0 @@ -SECTION = "libs" -LICENSE= "MIT" -PRIORITY = "optional" -DESCRIPTION = "PanoramiX extension headers" - -SRC_URI = "${XLIBS_MIRROR}/panoramixext-${PV}.tar.bz2" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} \ - mandir=${STAGING_DIR}/man -} diff --git a/packages/panoramixext/panoramixext_cvs.bb b/packages/panoramixext/panoramixext_cvs.bb deleted file mode 100644 index 08cc0cc51e..0000000000 --- a/packages/panoramixext/panoramixext_cvs.bb +++ /dev/null @@ -1,19 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -LICENSE= "MIT" -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "PanoramiX extension headers" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=PanoramiXExt" -S = "${WORKDIR}/PanoramiXExt" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} \ - mandir=${STAGING_DIR}/man -} diff --git a/packages/resourceext/.mtn2git_empty b/packages/resourceext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/resourceext/resourceext_1.0.bb b/packages/resourceext/resourceext_1.0.bb deleted file mode 100644 index 55780b1d22..0000000000 --- a/packages/resourceext/resourceext_1.0.bb +++ /dev/null @@ -1,16 +0,0 @@ -SECTION = "libs" -LICENSE = "Xorg" -DEPENDS = "xextensions" -DESCRIPTION = "X Resource usage extension headers" - -SRC_URI = "${XLIBS_MIRROR}/resourceext-${PV}.tar.bz2" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/resourceext/resourceext_cvs.bb b/packages/resourceext/resourceext_cvs.bb deleted file mode 100644 index b0fe23392e..0000000000 --- a/packages/resourceext/resourceext_cvs.bb +++ /dev/null @@ -1,18 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -SECTION = "libs" -LICENSE = "Xorg" -DEPENDS = "xextensions" -DESCRIPTION = "X Resource usage extension headers" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=ResourceExt" -S = "${WORKDIR}/ResourceExt" - -inherit autotools pkgconfig - -do_stage() { - oe_runmake install prefix=${STAGING_DIR} \ - bindir=${STAGING_BINDIR} \ - includedir=${STAGING_INCDIR} \ - libdir=${STAGING_LIBDIR} \ - datadir=${STAGING_DATADIR} -} diff --git a/packages/xxf86dgaext/.mtn2git_empty b/packages/xxf86dgaext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xxf86dgaext/xxf86dgaext_cvs.bb b/packages/xxf86dgaext/xxf86dgaext_cvs.bb deleted file mode 100644 index 30788049c7..0000000000 --- a/packages/xxf86dgaext/xxf86dgaext_cvs.bb +++ /dev/null @@ -1,13 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -LICENSE = "Xorg" -SECTION = "x11/libs" -DESCRIPTION = "Xxf86dga extension headers" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=XF86DGAExt" -S = "${WORKDIR}/XF86DGAExt" - -inherit autotools pkgconfig - -do_stage() { - autotools_stage_all -} diff --git a/packages/xxf86vmext/.mtn2git_empty b/packages/xxf86vmext/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/xxf86vmext/xxf86vmext_cvs.bb b/packages/xxf86vmext/xxf86vmext_cvs.bb deleted file mode 100644 index 06145e2905..0000000000 --- a/packages/xxf86vmext/xxf86vmext_cvs.bb +++ /dev/null @@ -1,13 +0,0 @@ -PV = "0.0+cvs${SRCDATE}" -LICENSE = "MIT" -SECTION = "x11/libs" -DESCRIPTION = "Xxf86vm extension headers" - -SRC_URI = "${FREEDESKTOP_CVS}/xlibs;module=XF86VMExt" -S = "${WORKDIR}/XF86VMExt" - -inherit autotools pkgconfig - -do_stage() { - autotools_stage_all -} -- cgit v1.2.3 From ac78e1a06bcc2517a849fa43568e82bbda903fe4 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Thu, 21 Feb 2008 13:44:31 +0000 Subject: sane-srcrevs.inc: add SRCREV for u-boot-openmoko and restore alphabetical sort obviously it seems to be very hard to sort... guys, please consult your ASCII tables... --- conf/distro/include/sane-srcrevs.inc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 3784303d19..34c0717543 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -7,6 +7,10 @@ # this is alphabetical! +# yes, really! + +# you know what that means? like... a, b, c, d, e, f, g... + SRCREV_pn-aircrack-ng ?= "802" SRCREV_pn-bfin-uclibc ?= "1857" SRCREV_pn-contact ?= "1410" @@ -41,6 +45,7 @@ SRCREV_pn-libmokogsmd2 ?= "3663" SRCREV_pn-libmokojournal2 ?= "3217" SRCREV_pn-libmokopanelui2 ?= "3349" SRCREV_pn-libmokoui2 ?= "3688" +SRCREV_pn-libw100 ?= "47" SRCREV_pn-libowl ?= "277" SRCREV_pn-libxosd ?= "627" SRCREV_pn-lightmediascanner ?= "68" @@ -57,7 +62,10 @@ SRCREV_pn-matchbox-keyboard-inputmethod ?= "1739" SRCREV_pn-matchbox-panel-2 ?= "1626" SRCREV_pn-moko-gtk-engine ?= "3405" SRCREV_pn-mpd-alsa ?= "6952" +SRCREV_pn-mplayer ?= "24587" SRCREV_pn-neod ?= "3421" +SRCREV_pn-networkmanager ?= "2887" +SRCREV_pn-networkmanager-applet ?= "200" SRCREV_pn-oh-puzzles ?= "22" SRCREV_pn-osb-browser ?= "125" SRCREV_pn-osb-jscore ?= "117" @@ -132,14 +140,12 @@ SRCREV_pn-settings-daemon ?= "1755" SRCREV_pn-sjf2410-linux-native ?= "933" SRCREV_pn-sphyrna ?= "45" SRCREV_pn-tmut ?= "60" +SRCREV_pn-u-boot-openmoko ?= "4100" +SRCREV_pn-usbpath ?= "3108" +SRCREV_pn-usbpath-native ?= "3108" SRCREV_pn-webkit-gtk ?= "28656" SRCREV_pn-webkit-qt ?= "28656" SRCREV_pn-webkit-qtopia ?= "28656" SRCREV_pn-wesnoth ?= "22021" SRCREV_pn-xoo ?= "1623" -SRCREV_pn-mplayer ?= "24587" -SRCREV_pn-networkmanager ?= "2887" -SRCREV_pn-networkmanager-applet ?= "200" -SRCREV_pn-libw100 ?= "47" -SRCREV_pn-usbpath ?= "3108" -SRCREV_pn-usbpath-native ?= "3108" + -- cgit v1.2.3 From b8d4af8ad68ef847d381259b8e8c25a998a6b88b Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Thu, 21 Feb 2008 13:45:08 +0000 Subject: u-boot-openmoko svn update the blessed GIT rev --- packages/u-boot/u-boot-openmoko_svn.bb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/u-boot/u-boot-openmoko_svn.bb b/packages/u-boot/u-boot-openmoko_svn.bb index 3ec97f2a77..ca21f54f8a 100644 --- a/packages/u-boot/u-boot-openmoko_svn.bb +++ b/packages/u-boot/u-boot-openmoko_svn.bb @@ -14,8 +14,11 @@ UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4 gta02v1 gta02v2 gta02v3 gta02v4" DEFAULT_PREFERENCE = "-1" +BLESSED_GIT_REV = "928d1d77f8623c120d8763e20e1ca58df9c5c4c6" + SRC_URI = "\ - git://www.denx.de/git/u-boot.git/;protocol=git;name=upstream;tag=3afac79ec27b91df185f090b31dad9620779f440 \ + +git://www.denx.de/git/u-boot.git/;protocol=git;name=upstream;tag=${BLESSED_GIT_REV} \ svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;proto=http;name=patches \ file://uboot-eabi-fix-HACK.patch;patch=1;maxrev=3773 \ file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \ -- cgit v1.2.3 From fc8bb1b8fad9b45a31b5b1081fb6c8a67d0654db Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Thu, 21 Feb 2008 15:10:44 +0000 Subject: firefox all use autotools_do_stage to populate staging this is needed to compile plugins against firefox. closes #1612 --- packages/mozilla/firefox.inc | 9 +++++++++ packages/mozilla/firefox_1.0.7.bb | 9 ++++----- packages/mozilla/firefox_2.0.0.3.bb | 26 ++++++++++++-------------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/packages/mozilla/firefox.inc b/packages/mozilla/firefox.inc index bd0322334d..f5e020dc68 100644 --- a/packages/mozilla/firefox.inc +++ b/packages/mozilla/firefox.inc @@ -1,4 +1,5 @@ SRC_URI += "file://mozilla-firefox.png file://mozilla-firefox.desktop" + PACKAGES =+ "firefox-inspector" FILES_firefox-inspector = " ${libdir}/firefox-${PV}/chrome/inspector* \ @@ -27,3 +28,11 @@ pkg_postinst_firefox() { # work around requirement for root access on first startup chmod -R a+w ${libdir}/firefox* } + +do_stage() { + autotools_stage_all + + + +} + diff --git a/packages/mozilla/firefox_1.0.7.bb b/packages/mozilla/firefox_1.0.7.bb index dd4d734f89..b82dbda91e 100644 --- a/packages/mozilla/firefox_1.0.7.bb +++ b/packages/mozilla/firefox_1.0.7.bb @@ -1,4 +1,5 @@ -PR = "r0" +PR = "r2" + SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/firefox-${PV}-source.tar.bz2 \ file://xptcstubs.patch;patch=1 \ file://no-xmb.patch;patch=1 \ @@ -8,11 +9,10 @@ SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/ file://firefox-1.0-gcc4-compile.patch;patch=1;pnum=0 \ file://xptcinvoke-arm.patch;patch=1 \ file://mozilla-eabi.patch;patch=1" - S = "${WORKDIR}/mozilla" -inherit mozilla - +inherit autotools mozilla + require firefox.inc EXTRA_OECONF += " --with-gssapi=${STAGINGLIBDIR}/../" @@ -20,4 +20,3 @@ EXTRA_OECONF += " --with-gssapi=${STAGINGLIBDIR}/../" do_compile_prepend() { cp ${WORKDIR}/jsautocfg.h ${S}/js/src/ } - diff --git a/packages/mozilla/firefox_2.0.0.3.bb b/packages/mozilla/firefox_2.0.0.3.bb index e1fb5a996d..72c42bc074 100644 --- a/packages/mozilla/firefox_2.0.0.3.bb +++ b/packages/mozilla/firefox_2.0.0.3.bb @@ -6,38 +6,36 @@ SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/ file://no-xmb.patch;patch=1 \ file://jsautocfg.h \ file://extensions-hack.patch;patch=1 \ - file://security-cross.patch;patch=1 \ - file://jsautocfg-dontoverwrite.patch;patch=1 \ - file://xptcinvoke-arm.patch;patch=1 \ - file://eabi-fix.patch;patch=1 \ - file://eabi-fix2.patch;patch=1 \ - file://eabi-fix3.patch;patch=1 \ - file://linkage-problem.patch;patch=1 \ - " + file://security-cross.patch;patch=1 \ + file://jsautocfg-dontoverwrite.patch;patch=1 \ + file://xptcinvoke-arm.patch;patch=1 \ + file://eabi-fix.patch;patch=1 \ + file://eabi-fix2.patch;patch=1 \ + file://eabi-fix3.patch;patch=1 \ + file://linkage-problem.patch;patch=1 \ +" S = "${WORKDIR}/mozilla" DEFAULT_PREFERENCE = "-1" inherit mozilla - require firefox.inc do_compile_prepend() { cp ${WORKDIR}/jsautocfg.h ${S}/js/src/ - sed -i "s|CPU_ARCH =|CPU_ARCH = ${TARGET_ARCH}|" security/coreconf/Linux.mk } do_stage() { - - install -d ${STAGING_INCDIR}/${P} + install -d ${STAGING_INCDIR}/firefox-${PV} cd dist/sdk/include + rm -rf obsolete headers=`find . -name "*.h"` for f in $headers do - install -D -m 0644 $f ${STAGING_INCDIR}/${P}/$f + install -D -m 0644 $f ${STAGING_INCDIR}/firefox-${PV}/ done # removes 2 lines that call absent headers - sed -e '178,179d' ${STAGING_INCDIR}/${P}/nsIServiceManager.h + sed -e '178,179d' ${STAGING_INCDIR}/firefox-${PV}/nsIServiceManager.h } -- cgit v1.2.3 From 55e2d5cea3fef4800ac4e9e0ebcebb703fd0e75d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 21 Feb 2008 15:44:52 +0000 Subject: gpe-login: Move chvt-keylaunch.patch for old version to version-specific dir. --- packages/gpe-login/files/chvt-keylaunch.patch | 11 ----------- packages/gpe-login/files/lock-on-supend.patch | 1 + packages/gpe-login/gpe-login-0.86/.mtn2git_empty | 0 packages/gpe-login/gpe-login-0.86/chvt-keylaunch.patch | 11 +++++++++++ 4 files changed, 12 insertions(+), 11 deletions(-) delete mode 100644 packages/gpe-login/files/chvt-keylaunch.patch create mode 100644 packages/gpe-login/gpe-login-0.86/.mtn2git_empty create mode 100644 packages/gpe-login/gpe-login-0.86/chvt-keylaunch.patch diff --git a/packages/gpe-login/files/chvt-keylaunch.patch b/packages/gpe-login/files/chvt-keylaunch.patch deleted file mode 100644 index 5e62a1107e..0000000000 --- a/packages/gpe-login/files/chvt-keylaunch.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gpe-login-0.86/gpe-login.keylaunchrc.orig 2006-05-28 20:38:39.846547024 +0200 -+++ gpe-login-0.86/gpe-login.keylaunchrc 2006-05-28 20:38:56.800969560 +0200 -@@ -1,3 +1,8 @@ - key=???XF86AudioRecord:xcalibrate:/usr/bin/gpe-xcalibrate.sh - key=???XF86PowerDown:-:/usr/bin/apm --suspend - key=???Held XF86PowerDown:-:bl toggle -+ -+# VT changing -+key=...*Left:-:~chvt 1 -+key=...*Right:-:~chvt 3 -+key=...*Escape:-:~/etc/init.d/gpe-dm stop diff --git a/packages/gpe-login/files/lock-on-supend.patch b/packages/gpe-login/files/lock-on-supend.patch index 29ccce5ae6..0b00a75ead 100644 --- a/packages/gpe-login/files/lock-on-supend.patch +++ b/packages/gpe-login/files/lock-on-supend.patch @@ -1,4 +1,5 @@ upstream: http://bugs.linuxtogo.org/show_bug.cgi?id=125 +status: accepted in 0.91 Lock screen when device goes to suspend, not after some time has passed since resume and they stole your data from the unprotected screen. diff --git a/packages/gpe-login/gpe-login-0.86/.mtn2git_empty b/packages/gpe-login/gpe-login-0.86/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/gpe-login/gpe-login-0.86/chvt-keylaunch.patch b/packages/gpe-login/gpe-login-0.86/chvt-keylaunch.patch new file mode 100644 index 0000000000..5e62a1107e --- /dev/null +++ b/packages/gpe-login/gpe-login-0.86/chvt-keylaunch.patch @@ -0,0 +1,11 @@ +--- gpe-login-0.86/gpe-login.keylaunchrc.orig 2006-05-28 20:38:39.846547024 +0200 ++++ gpe-login-0.86/gpe-login.keylaunchrc 2006-05-28 20:38:56.800969560 +0200 +@@ -1,3 +1,8 @@ + key=???XF86AudioRecord:xcalibrate:/usr/bin/gpe-xcalibrate.sh + key=???XF86PowerDown:-:/usr/bin/apm --suspend + key=???Held XF86PowerDown:-:bl toggle ++ ++# VT changing ++key=...*Left:-:~chvt 1 ++key=...*Right:-:~chvt 3 ++key=...*Escape:-:~/etc/init.d/gpe-dm stop -- cgit v1.2.3 From c12df53a0f9f5ed69b961c480f1822ab2e301f86 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 21 Feb 2008 15:46:24 +0000 Subject: gpe-login: Move chvt-keylaunch.patch for 0.90+ to files/. --- packages/gpe-login/files/chvt-keylaunch.patch | 12 ++++++++++++ packages/gpe-login/gpe-login-0.90/.mtn2git_empty | 0 packages/gpe-login/gpe-login-0.90/chvt-keylaunch.patch | 12 ------------ 3 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 packages/gpe-login/files/chvt-keylaunch.patch delete mode 100644 packages/gpe-login/gpe-login-0.90/.mtn2git_empty delete mode 100644 packages/gpe-login/gpe-login-0.90/chvt-keylaunch.patch diff --git a/packages/gpe-login/files/chvt-keylaunch.patch b/packages/gpe-login/files/chvt-keylaunch.patch new file mode 100644 index 0000000000..798c059ccc --- /dev/null +++ b/packages/gpe-login/files/chvt-keylaunch.patch @@ -0,0 +1,12 @@ +--- /tmp/gpe-login.keylaunchrc 2006-05-29 23:46:42.806081576 +0200 ++++ gpe-login-0.87/gpe-login.keylaunchrc 2006-05-29 23:48:18.476537456 +0200 +@@ -1,3 +1,9 @@ + key=????XF86AudioRecord:xcalibrate:/usr/bin/gpe-xcalibrate.sh + key=????XF86PowerDown:-:/usr/bin/apm --suspend + key=????Held XF86PowerDown:-:bl toggle ++ ++# VT changing ++key=...*Left:-:~chvt 1 ++key=...*Right:-:~chvt 3 ++key=...*Escape:-:~/etc/init.d/gpe-dm stop ++ diff --git a/packages/gpe-login/gpe-login-0.90/.mtn2git_empty b/packages/gpe-login/gpe-login-0.90/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gpe-login/gpe-login-0.90/chvt-keylaunch.patch b/packages/gpe-login/gpe-login-0.90/chvt-keylaunch.patch deleted file mode 100644 index 798c059ccc..0000000000 --- a/packages/gpe-login/gpe-login-0.90/chvt-keylaunch.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- /tmp/gpe-login.keylaunchrc 2006-05-29 23:46:42.806081576 +0200 -+++ gpe-login-0.87/gpe-login.keylaunchrc 2006-05-29 23:48:18.476537456 +0200 -@@ -1,3 +1,9 @@ - key=????XF86AudioRecord:xcalibrate:/usr/bin/gpe-xcalibrate.sh - key=????XF86PowerDown:-:/usr/bin/apm --suspend - key=????Held XF86PowerDown:-:bl toggle -+ -+# VT changing -+key=...*Left:-:~chvt 1 -+key=...*Right:-:~chvt 3 -+key=...*Escape:-:~/etc/init.d/gpe-dm stop -+ -- cgit v1.2.3 From 03d1533793cf8be57ba5712bc5bf61e2474b9867 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 21 Feb 2008 15:49:42 +0000 Subject: gpe-login: Add 0.91, lock-on-supend.patch accepted upstream. --- packages/gpe-login/gpe-login_0.91.bb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 packages/gpe-login/gpe-login_0.91.bb diff --git a/packages/gpe-login/gpe-login_0.91.bb b/packages/gpe-login/gpe-login_0.91.bb new file mode 100644 index 0000000000..16d9e471d7 --- /dev/null +++ b/packages/gpe-login/gpe-login_0.91.bb @@ -0,0 +1,26 @@ +DESCRIPTION = "GPE user login screen" +SECTION = "gpe" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "gtk+ libgpewidget gpe-ownerinfo xkbd" +RDEPENDS = "xkbd gpe-theme-clearlooks" +RPROVIDES_${PN} = "gpe-session-starter" +PR = "r0" + +SRC_URI_OVERRIDES_PACKAGE_ARCH = "1" + +GPE_TARBALL_SUFFIX = "bz2" + +inherit gpe autotools pkgconfig + + +SRC_URI += "file://removeblue-fontsize8.patch;patch=1" +SRC_URI += " file://chvt-keylaunch.patch;patch=1 " +SRC_URI += " file://gpe-xcalibrate-rises-from-dead.patch;patch=1 " +SRC_URI += " file://size-autolock-properly.patch;patch=1 " +SRC_URI += " file://c-locale.patch;patch=1 " + +SRC_URI_append_spitz = "file://brightness-adjust-keyluanchrc.patch;patch=1" +SRC_URI_append_akita = "file://brightness-adjust-keyluanchrc.patch;patch=1" +SRC_URI_append_c7x0 = "file://brightness-adjust-keyluanchrc.patch;patch=1" + -- cgit v1.2.3 From aec20185812f752b04917ebda2293440ace6b3db Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 21 Feb 2008 15:55:45 +0000 Subject: angstrom-2007-for-openmoko-versions.inc, preferred-gpe-versions-2.8.inc: Bump gpe-login to 0.91 * Includes OE patch merge (mild security fix) and l19n updates. --- conf/distro/include/angstrom-2007-for-openmoko-versions.inc | 2 +- conf/distro/include/preferred-gpe-versions-2.8.inc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/distro/include/angstrom-2007-for-openmoko-versions.inc b/conf/distro/include/angstrom-2007-for-openmoko-versions.inc index d712fadb8c..6cabe8164c 100644 --- a/conf/distro/include/angstrom-2007-for-openmoko-versions.inc +++ b/conf/distro/include/angstrom-2007-for-openmoko-versions.inc @@ -548,7 +548,7 @@ PREFERRED_VERSION_gpe-irc ?= "0.08" PREFERRED_VERSION_gpe-keylock ?= "0.12" PREFERRED_VERSION_gpe-life ?= "0.2" PREFERRED_VERSION_gpe-lights ?= "0.13" -PREFERRED_VERSION_gpe-login ?= "0.90" +PREFERRED_VERSION_gpe-login ?= "0.91" PREFERRED_VERSION_gpe-mini-browser ?= "0.21" PREFERRED_VERSION_gpe-mini-browser-hildon ?= "0.17" PREFERRED_VERSION_gpe-mininet ?= "0.7" diff --git a/conf/distro/include/preferred-gpe-versions-2.8.inc b/conf/distro/include/preferred-gpe-versions-2.8.inc index fb9e2815ba..55e51409be 100644 --- a/conf/distro/include/preferred-gpe-versions-2.8.inc +++ b/conf/distro/include/preferred-gpe-versions-2.8.inc @@ -32,7 +32,7 @@ PREFERRED_VERSION_libxsettings-client ?= "0.17" PREFERRED_VERSION_gpe-icons ?= "0.25" -PREFERRED_VERSION_gpe-login ?= "0.90" +PREFERRED_VERSION_gpe-login ?= "0.91" PREFERRED_VERSION_gpe-session-scripts ?= "0.67" PREFERRED_VERSION_gpe-su ?= "0.19" PREFERRED_VERSION_keylaunch ?= "2.0.10" -- cgit v1.2.3 From 8063e34bb175e058ea2de0d8fffc03011f68c3ee Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 21 Feb 2008 16:18:33 +0000 Subject: fix mirror handling for openmoko, oplinux and nylon. Closes 3585. * patch from 3585 is now fully applied --- classes/nylon-mirrors.bbclass | 8 ++++---- classes/oplinux-mirrors.bbclass | 16 ++++++++-------- conf/distro/openmoko.conf | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/classes/nylon-mirrors.bbclass b/classes/nylon-mirrors.bbclass index 25a8b87d9b..02fddc01ba 100644 --- a/classes/nylon-mirrors.bbclass +++ b/classes/nylon-mirrors.bbclass @@ -1,6 +1,6 @@ MIRRORS_append () { -ftp://.*/.*/ http://meshcube.org/nylon/stable/sources/ -https?://.*/.*/ http://meshcube.org/nylon/stable/sources/ -ftp://.*/.*/ http://meshcube.org/nylon/unstable/sources/ -https?://.*/.*/ http://meshcube.org/nylon/unstable/sources/ +ftp://.*/.* http://meshcube.org/nylon/stable/sources/ +https?://.*/.* http://meshcube.org/nylon/stable/sources/ +ftp://.*/.* http://meshcube.org/nylon/unstable/sources/ +https?://.*/.* http://meshcube.org/nylon/unstable/sources/ } \ No newline at end of file diff --git a/classes/oplinux-mirrors.bbclass b/classes/oplinux-mirrors.bbclass index c76e822ce3..59c199485c 100644 --- a/classes/oplinux-mirrors.bbclass +++ b/classes/oplinux-mirrors.bbclass @@ -2,13 +2,13 @@ # Released under the MIT license (see packages/COPYING) MIRRORS_append () { -ftp://.*/.*/ http://digital-opsis.com/oplinux/stable/sources/ -https?://.*/.*/ http://digital-opsis.com/oplinux/stable/sources/ -ftp://.*/.*/ http://digital-opsis.com/oplinux/unstable/sources/ -https?://.*/.*/ http://digital-opsis.com/oplinux/unstable/sources/ +ftp://.*/.* http://digital-opsis.com/oplinux/stable/sources/ +https?://.*/.* http://digital-opsis.com/oplinux/stable/sources/ +ftp://.*/.* http://digital-opsis.com/oplinux/unstable/sources/ +https?://.*/.* http://digital-opsis.com/oplinux/unstable/sources/ -ftp://.*/.*/ http://digital-opsis.com/oplinux-uclibc/stable/sources/ -https?://.*/.*/ http://digital-opsis.com/oplinux-uclibc/stable/sources/ -ftp://.*/.*/ http://digital-opsis.com/oplinux-uclibc/unstable/sources/ -https?://.*/.*/ http://digital-opsis.com/oplinux-uclibc/unstable/sources/ +ftp://.*/.* http://digital-opsis.com/oplinux-uclibc/stable/sources/ +https?://.*/.* http://digital-opsis.com/oplinux-uclibc/stable/sources/ +ftp://.*/.* http://digital-opsis.com/oplinux-uclibc/unstable/sources/ +https?://.*/.* http://digital-opsis.com/oplinux-uclibc/unstable/sources/ } diff --git a/conf/distro/openmoko.conf b/conf/distro/openmoko.conf index f6968cee00..55237c89b8 100644 --- a/conf/distro/openmoko.conf +++ b/conf/distro/openmoko.conf @@ -19,7 +19,7 @@ OVERRIDES = "local:${MACHINE}:openmoko:angstrom:${TARGET_OS}:${TARGET_ARCH}:buil CVS_TARBALL_STASH = "http://downloads.openmoko.org/sources/" -PREMIRRORS = "(ftp|https?)$://.*/.*/ http://downloads.openmoko.org/sources/" +PREMIRRORS = "(ftp|https?)$://.*/.* http://downloads.openmoko.org/sources/" FEED_URIS = "\ snapshot-all##http://buildhost.openmoko.org/snapshots/2007.08/ipk/all \ -- cgit v1.2.3 From bf2139a143b3dc66c0e7c04b327eb4e28fb6562f Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 21 Feb 2008 16:43:54 +0000 Subject: angstrom.inc: Make Angstrom bitbake caches to be per libc mode. * This is allows easy switching between glibc and uclibc builds, without waiting for long reparses on every switch. * Note that it applies to dependent distros, like OpenMoko, too. --- conf/distro/include/angstrom.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc index 6ba20c4830..d55b5bf3db 100644 --- a/conf/distro/include/angstrom.inc +++ b/conf/distro/include/angstrom.inc @@ -12,6 +12,7 @@ TARGET_VENDOR = "-angstrom" # Can be "glibc", "eglibc" or "uclibc" ANGSTROM_MODE ?= "glibc" +CACHE = "${TMPDIR}/cache/${ANGSTROM_MODE}/${MACHINE}" DEPLOY_DIR = "${TMPDIR}/deploy/${ANGSTROM_MODE}" require conf/distro/include/angstrom-${ANGSTROM_MODE}.inc -- cgit v1.2.3 From d5a05e2429751245399bec95f0cf710471100100 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 21 Feb 2008 17:02:20 +0000 Subject: kdepimpi: commit hrw's kdepimpi X11 version. Yet untested. Closes 371. --- packages/kdepimpi/kdepimpi-qte.inc | 163 ++++++++++++++++++++++++ packages/kdepimpi/kdepimpi-x11.inc | 70 ++++++++++ packages/kdepimpi/kdepimpi-x11/.mtn2git_empty | 0 packages/kdepimpi/kdepimpi-x11/kabc.patch | 22 ++++ packages/kdepimpi/kdepimpi-x11/kammu.patch | 16 +++ packages/kdepimpi/kdepimpi-x11/korganizer.patch | 22 ++++ packages/kdepimpi/kdepimpi-x11/libkcal.patch | 13 ++ packages/kdepimpi/kdepimpi-x11/nomail.patch | 16 +++ packages/kdepimpi/kdepimpi-x11_2.2.3.bb | 10 ++ packages/kdepimpi/kdepimpi_2.2.3.bb | 3 + packages/kdepimpi/pwmpi_2.2.3.bb | 3 + 11 files changed, 338 insertions(+) create mode 100644 packages/kdepimpi/kdepimpi-qte.inc create mode 100644 packages/kdepimpi/kdepimpi-x11.inc create mode 100644 packages/kdepimpi/kdepimpi-x11/.mtn2git_empty create mode 100644 packages/kdepimpi/kdepimpi-x11/kabc.patch create mode 100644 packages/kdepimpi/kdepimpi-x11/kammu.patch create mode 100644 packages/kdepimpi/kdepimpi-x11/korganizer.patch create mode 100644 packages/kdepimpi/kdepimpi-x11/libkcal.patch create mode 100644 packages/kdepimpi/kdepimpi-x11/nomail.patch create mode 100644 packages/kdepimpi/kdepimpi-x11_2.2.3.bb create mode 100644 packages/kdepimpi/kdepimpi_2.2.3.bb create mode 100644 packages/kdepimpi/pwmpi_2.2.3.bb diff --git a/packages/kdepimpi/kdepimpi-qte.inc b/packages/kdepimpi/kdepimpi-qte.inc new file mode 100644 index 0000000000..3fa8781658 --- /dev/null +++ b/packages/kdepimpi/kdepimpi-qte.inc @@ -0,0 +1,163 @@ +DESCRIPTION = "KDE-Pim Platform Independent - port of KDE Pim to PDA" +DESCRIPTION_kopi = "Korganizer/PI is a powerful calendar and ToDo Tool" +DESCRIPTION_kopi-applet = "KDE Pim/PI applet" +DESCRIPTION_kapi = "KAddressbook/PI is a port of KDE addressbook" +DESCRIPTION_libmicrokdelibs = "KDE Pim/PI library - microkde" +DESCRIPTION_libmicrokcal = "KDE Pim/PI library - microkcal" +DESCRIPTION_libmicrokabc = "KDE Pim/PI library - microkabc" +DESCRIPTION_libmicrokammu = "KDE Pim/PI fork of libGammu" +DESCRIPTION_kammu = "KDE Pim/PI fork of gammu" + +SECTION = "opie/pim" +PRIORITY = "optional" +LICENSE = "GPL" +HOMEPAGE = "http://www.pi-sync.net/ http://sf.net/projects/kdepimpi/" +MAINTAINER = "Marcin Juszkiewicz " + +# we can't build: +# kabc/plugins/sharpdtm - wants libsl (Sharp ROM 3.x closed source library) +# kabc/plugins/ldap - wants ldap libs (?) +# kabc/plugins/opie - wants libopie1 (we don't plan to have it in OE) +# kmicromail - conflict with OE libetpan, libmailwrapper/OPIE + +PARALLEL_MAKE = "" + +S = "${WORKDIR}/kdepim" + +EXTRA_QMAKEVARS_POST += " \ +INCLUDEPATH+=../ \ +OBJECTS_DIR=obj/ MOC_DIR=moc/ \ +DESTDIR=${S}/dest \ +LIBS+=-L${S}/dest/ \ +LIBS-=-lzlib \ +LIBS+=-lz \ +" +# That changes will be needed for KMicroMail/PI to get it build with OE libs +# +# LIBS-=-lkmicromailwrapper LIBS+=-lmailwrapper LIBS+=-lopiecore2 \ + +QMAKE_PROFILES= "all.pro" + +SUBDIRS="qtcompat libical/src/libical libical/src/libicalss microkde libkcal libkdepim \ + kabc korganizer kalarmd kaddressbook kabc/plugins/file kabc/plugins/dir \ + kabc/formats/binary kabc/plugins/qtopia \ + gammu/emb/common \ + gammu/emb/gammu \ +# pwmanager/libcrypt/mpi \ +# pwmanager/libcrypt/error \ +# pwmanager/libcrypt/cipher \ +# pwmanager/libcrypt/zlib \ +# pwmanager/pwmanager \ + " + +inherit palmtop + +do_configure_prepend() { + mv ${S}/kabc/formats/binary/kabcformat_binaryE.pro ${S}/kabc/formats/binary/binaryE.pro + echo -e "TEMPLATE=subdirs\nSUBDIRS=${SUBDIRS}\n" >all.pro + for d in ${SUBDIRS} + do + if [ -f ${d}/`basename ${d}`E.pro ]; + then + mv -f ${d}/`basename ${d}`E.pro ${d}/`basename ${d}`.pro + fi + done +} + +do_compile() { + export KDEPIMDIR=${S} + oe_runmake +} + +HEADERS_DIRS = "qtcompat \ +microkde \ +microkde/kdecore \ +microkde/kdeui \ +microkde/kio \ +microkde/kresources \ +microkde/kutils \ +microkde/opie2 \ +kabc \ +libkcal \ +libkdepim " + +do_unstage() { + + for dir in ${HEADERS_DIRS}; + do + rm -rf ${STAGING_INCDIR}/kdepimpi/$dir + done + + for f in libmicrokde libmicrokdepim libmicrokabc libmicrokcal libmicroqtcompat + do + rm -f ${STAGING_LIBDIR}/kdepimpi/$f* + done +} + +addtask unstage before do_configure + +do_stage() { + + for dir in ${HEADERS_DIRS}; + do + install -d ${STAGING_INCDIR}/kdepimpi/$dir + install -m 0644 ${S}/$dir/*.h ${STAGING_INCDIR}/kdepimpi/$dir/ + done + + for f in libmicrokde libmicrokdepim libmicrokabc libmicrokcal libmicroqtcompat + do + oe_libinstall -so -C ${S}/dest/ $f ${STAGING_LIBDIR}/kdepimpi/ + done +} + +do_install() { + install -d ${D}${palmtopdir}/bin \ + ${D}${palmtopdir}/lib \ + ${D}${palmtopdir}/apps/1Pim \ + ${D}${palmtopdir}/pics/kdepim/korganizer/icons16 \ + ${D}${palmtopdir}/pics/kdepim/korganizer/iconsmini \ + ${D}${palmtopdir}/pics/kdepim/kaddressbook/icons16 \ + ${D}${palmtopdir}/pics/kdepim/kaddressbook/icons22 \ + ${D}${palmtopdir}/plugins/applets + + install -m 0644 ${S}/bin/kdepim/korganizer/ko16.png ${D}${palmtopdir}/pics/ + install -m 0644 ${S}/bin/kdepim/korganizer/ko24.png ${D}${palmtopdir}/pics/ + install -m 0644 ${S}/bin/kdepim/korganizer/*.* ${D}${palmtopdir}/pics/kdepim/korganizer + install -m 0644 ${S}/bin/kdepim/korganizer/icons16/*.png ${D}${palmtopdir}/pics/kdepim/korganizer/icons16 + install -m 0644 ${S}/bin/kdepim/korganizer/iconsmini/*.png ${D}${palmtopdir}/pics/kdepim/korganizer/iconsmini + install -m 0644 korganizer/korganizer.desktop ${D}${palmtopdir}/apps/1Pim/korganizer.desktop + + install -m 0644 ${S}/bin/kdepim/kaddressbook/*.* ${D}${palmtopdir}/pics/kdepim/kaddressbook + install -m 0644 ${S}/bin/kdepim/kaddressbook/icons16/*.png ${D}${palmtopdir}/pics/kdepim/kaddressbook/icons16 + install -m 0644 ${S}/bin/kdepim/kaddressbook/icons22/*.png ${D}${palmtopdir}/pics/kdepim/kaddressbook/icons22 + install -m 0644 kaddressbook/kaddressbook.desktop ${D}${palmtopdir}/apps/1Pim/kaddressbook.desktop + + for f in libmicrokde libmicrokdepim libmicrokabc libmicrokcal libmicroqtcompat libmicrokabc_file libmicrokabc_dir libmicrokabcformat_binary libmicrokabc_qtopia + do + oe_libinstall -so -C ${S}/dest/ $f ${D}${palmtopdir}/lib + done + + install -m 0755 ${S}/dest/kopi ${D}${palmtopdir}/bin/kopi + install -m 0755 ${S}/dest/kapi ${D}${palmtopdir}/bin/kapi + + install -d ${D}${bindir} ${D}${libdir} + install -m 0755 ${S}/dest/kammu ${D}${bindir}/kammu + oe_libinstall -so -C ${S}/dest/ libmicrokammu ${D}${libdir} + + for f in libkopialarmapplet + do + oe_libinstall -so -C ${S}/dest/ $f ${D}${palmtopdir}/plugins/applets + done +} + + +PACKAGES = "libmicrokcal libmicrokabc kopi-applet kopi kapi libmicrokdelibs kammu libmicrokammu" + +FILES_kopi = "${palmtopdir}/bin/kopi ${palmtopdir}/apps/1Pim/korganizer.desktop ${palmtopdir}/pics/kdepim/korganizer/* " +FILES_kapi = "${palmtopdir}/bin/kapi ${palmtopdir}/apps/1Pim/kaddressbook.desktop ${palmtopdir}/pics/kdepim/kaddressbook/* ${palmtopdir}/lib/libmicrokabc_* ${palmtopdir}/lib/libmicrokabcformat_binary*" +FILES_kopi-applet = "${palmtopdir}/plugins/applets/* ${palmtopdir}/pics/ko16.png ${palmtopdir}/pics/ko24.png" +FILES_libmicrokabc = "${palmtopdir}/lib/libmicrokabc*" +FILES_libmicrokcal = "${palmtopdir}/lib/libmicrokcal*" +FILES_libmicrokdelibs = "${palmtopdir}/lib/*" +FILES_kammu = "${bindir}/kammu" +FILES_libmicrokammu = "${libdir}/libmicrokammu*" diff --git a/packages/kdepimpi/kdepimpi-x11.inc b/packages/kdepimpi/kdepimpi-x11.inc new file mode 100644 index 0000000000..80c246ad7c --- /dev/null +++ b/packages/kdepimpi/kdepimpi-x11.inc @@ -0,0 +1,70 @@ +DESCRIPTION = "KDE-Pim Platform Independent - port of KDE Pim to PDA - X11 version" +DESCRIPTION_kopi-x11 = "Korganizer/PI is a powerful calendar and ToDo Tool - X11 version" +DESCRIPTION_kopi-applet-x11 = "KDE Pim/PI applet - X11 version" +DESCRIPTION_kapi-x11 = "KAddressbook/PI is a port of KDE addressbook - X11 version" +DESCRIPTION_libmicrokdelibs-x11 = "KDE Pim/PI library - microkde - X11 version" +DESCRIPTION_libmicrokcal-x11 = "KDE Pim/PI library - microkcal - X11 version" +DESCRIPTION_libmicrokabc-x11 = "KDE Pim/PI library - microkabc - X11 version" +DESCRIPTION_libmicrokammu-x11 = "KDE Pim/PI fork of libGammu - X11 version" +DESCRIPTION_kammu-x11 = "KDE Pim/PI fork of gammu - X11 version" + +SECTION = "x11/pim" + +inherit qmake qt3x11 + +QMAKE_PROFILES= "kdepim-desktop.pro" + +do_install() { + oe_runmake install +} + +do_install-broken() { + install -d ${D}${palmtopdir}/bin \ + ${D}${palmtopdir}/lib \ + ${D}${palmtopdir}/apps/1Pim \ + ${D}${palmtopdir}/pics/kdepim/korganizer/icons16 \ + ${D}${palmtopdir}/pics/kdepim/korganizer/iconsmini \ + ${D}${palmtopdir}/pics/kdepim/kaddressbook/icons16 \ + ${D}${palmtopdir}/pics/kdepim/kaddressbook/icons22 \ + ${D}${palmtopdir}/plugins/applets + + install -m 0644 ${S}/bin/kdepim/korganizer/ko16.png ${D}${palmtopdir}/pics/ + install -m 0644 ${S}/bin/kdepim/korganizer/ko24.png ${D}${palmtopdir}/pics/ + install -m 0644 ${S}/bin/kdepim/korganizer/*.* ${D}${palmtopdir}/pics/kdepim/korganizer + install -m 0644 ${S}/bin/kdepim/korganizer/icons16/*.png ${D}${palmtopdir}/pics/kdepim/korganizer/icons16 + install -m 0644 ${S}/bin/kdepim/korganizer/iconsmini/*.png ${D}${palmtopdir}/pics/kdepim/korganizer/iconsmini + install -m 0644 korganizer/korganizer.desktop ${D}${palmtopdir}/apps/1Pim/korganizer.desktop + + install -m 0644 ${S}/bin/kdepim/kaddressbook/*.* ${D}${palmtopdir}/pics/kdepim/kaddressbook + install -m 0644 ${S}/bin/kdepim/kaddressbook/icons16/*.png ${D}${palmtopdir}/pics/kdepim/kaddressbook/icons16 + install -m 0644 ${S}/bin/kdepim/kaddressbook/icons22/*.png ${D}${palmtopdir}/pics/kdepim/kaddressbook/icons22 + install -m 0644 kaddressbook/kaddressbook.desktop ${D}${palmtopdir}/apps/1Pim/kaddressbook.desktop + + for f in libmicrokde libmicrokdepim libmicrokabc libmicrokcal libmicroqtcompat libmicrokabc_file libmicrokabc_dir libmicrokabcformat_binary libmicrokabc_qtopia + do + oe_libinstall -so -C ${S}/dest/ $f ${D}${palmtopdir}/lib + done + + install -m 0755 ${S}/dest/kopi ${D}${palmtopdir}/bin/kopi + install -m 0755 ${S}/dest/kapi ${D}${palmtopdir}/bin/kapi + + install -d ${D}${bindir} ${D}${libdir} + install -m 0755 ${S}/dest/kammu ${D}${bindir}/kammu + oe_libinstall -so -C ${S}/dest/ libmicrokammu ${D}${libdir} + + for f in libkopialarmapplet + do + oe_libinstall -so -C ${S}/dest/ $f ${D}${palmtopdir}/plugins/applets + done +} + +PACKAGES = "libmicrokcal-x11 libmicrokabc-x11 kopi-applet-x11 kopi-x11 kapi-x11 libmicrokdelibs-x11 kammu-x11 libmicrokammu-x11" + +FILES_kopi-x11 = "${palmtopdir}/bin/kopi ${palmtopdir}/apps/1Pim/korganizer.desktop ${palmtopdir}/pics/kdepim/korganizer/* " +FILES_kapi-x11 = "${palmtopdir}/bin/kapi ${palmtopdir}/apps/1Pim/kaddressbook.desktop ${palmtopdir}/pics/kdepim/kaddressbook/* ${palmtopdir}/lib/libmicrokabc_* ${palmtopdir}/lib/libmicrokabcformat_binary*" +FILES_kopi-applet-x11 = "${palmtopdir}/plugins/applets/* ${palmtopdir}/pics/ko16.png ${palmtopdir}/pics/ko24.png" +FILES_libmicrokabc-x11 = "${palmtopdir}/lib/libmicrokabc*" +FILES_libmicrokcal-x11 = "${palmtopdir}/lib/libmicrokcal*" +FILES_libmicrokdelibs-x11 = "${palmtopdir}/lib/*" +FILES_kammu-x11 = "${bindir}/kammu" +FILES_libmicrokammu-x11 = "${libdir}/libmicrokammu*" diff --git a/packages/kdepimpi/kdepimpi-x11/.mtn2git_empty b/packages/kdepimpi/kdepimpi-x11/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/kdepimpi/kdepimpi-x11/kabc.patch b/packages/kdepimpi/kdepimpi-x11/kabc.patch new file mode 100644 index 0000000000..9a3c1c9694 --- /dev/null +++ b/packages/kdepimpi/kdepimpi-x11/kabc.patch @@ -0,0 +1,22 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- kdepim/kaddressbook/kaddressbook.pro~kabc ++++ kdepim/kaddressbook/kaddressbook.pro +@@ -31,10 +31,10 @@ + LIBS += ../libical/lib/libicalss.a + + } else { +-LIBS += ../bin/libmicrokdepim.so +-LIBS += ../bin/libmicrokde.so +-LIBS += ../bin/libmicrokabc.so +-LIBS += ../bin/libmicrokcal.so ++LIBS += $(DESTDIR)/libmicrokdepim.so ++LIBS += $(DESTDIR)/libmicrokde.so ++LIBS += $(DESTDIR)/libmicrokabc.so ++LIBS += $(DESTDIR)/libmicrokcal.so + #LIBS += -lldap + } + OBJECTS_DIR = obj/unix diff --git a/packages/kdepimpi/kdepimpi-x11/kammu.patch b/packages/kdepimpi/kdepimpi-x11/kammu.patch new file mode 100644 index 0000000000..364dce736e --- /dev/null +++ b/packages/kdepimpi/kdepimpi-x11/kammu.patch @@ -0,0 +1,16 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- kdepim/gammu/emb/gammu/gammu.pro~kammu ++++ kdepim/gammu/emb/gammu/gammu.pro +@@ -47,7 +47,7 @@ + depend/nokia/dct3trac/wmx-util.c \ + depend/nokia/dct3trac/wmx.c + unix : { +-LIBS += ../../../bin/libmicrogammu.so /usr/lib/libpthread.so ++LIBS += $(DESTDIR)/libmicrogammu.so + # bluetooth disabled for now + #/usr/lib/libbluetooth.so /usr/lib/libsdp.so + OBJECTS_DIR = obj/unix diff --git a/packages/kdepimpi/kdepimpi-x11/korganizer.patch b/packages/kdepimpi/kdepimpi-x11/korganizer.patch new file mode 100644 index 0000000000..830205e04d --- /dev/null +++ b/packages/kdepimpi/kdepimpi-x11/korganizer.patch @@ -0,0 +1,22 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- kdepim/korganizer/korganizer.pro~korganizer ++++ kdepim/korganizer/korganizer.pro +@@ -34,10 +34,10 @@ + LIBS += ../libical/lib/libical.a + LIBS += ../libical/lib/libicalss.a + } else { +-LIBS += ../bin/libmicrokdepim.so +-LIBS += ../bin/libmicrokcal.so +-LIBS += ../bin/libmicrokde.so +-LIBS += ../bin/libmicrokabc.so ++LIBS += $(DESTDIR)/libmicrokdepim.so ++LIBS += $(DESTDIR)/libmicrokcal.so ++LIBS += $(DESTDIR)/libmicrokde.so ++LIBS += $(DESTDIR)/libmicrokabc.so + #LIBS += -lbluetooth + #LIBS += -lsdp + diff --git a/packages/kdepimpi/kdepimpi-x11/libkcal.patch b/packages/kdepimpi/kdepimpi-x11/libkcal.patch new file mode 100644 index 0000000000..04456f9c3d --- /dev/null +++ b/packages/kdepimpi/kdepimpi-x11/libkcal.patch @@ -0,0 +1,13 @@ +--- kdepim/libkcal/libkcal.pro~paths 2005-01-30 00:23:34.000000000 +0100 ++++ kdepim/libkcal/libkcal.pro 2005-10-03 11:09:49.000000000 +0200 +@@ -11,8 +11,8 @@ + DESTDIR = ../bin + DEFINES += DESKTOP_VERSION + unix: { +-LIBS += ../libical/lib/libical.a +-LIBS += ../libical/lib/libicalss.a ++LIBS += ../dest$(LIBICAL_PATH)/libical.a ++LIBS += ../dest$(LIBICAL_PATH)/libicalss.a + OBJECTS_DIR = obj/unix + MOC_DIR = moc/unix + } diff --git a/packages/kdepimpi/kdepimpi-x11/nomail.patch b/packages/kdepimpi/kdepimpi-x11/nomail.patch new file mode 100644 index 0000000000..2c8916bb12 --- /dev/null +++ b/packages/kdepimpi/kdepimpi-x11/nomail.patch @@ -0,0 +1,16 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- kdepim/kdepim-desktop.pro~nomail ++++ kdepim/kdepim-desktop.pro +@@ -15,7 +15,7 @@ + } + unix:{ + !staticlib: { +-SUBDIRS += libetpan kmicromail/libmailwrapper kmicromail pwmanager/libcrypt/cipher pwmanager/libcrypt/error pwmanager/libcrypt/mpi pwmanager/libcrypt/zlib pwmanager/pwmanager ++SUBDIRS += pwmanager/libcrypt/cipher pwmanager/libcrypt/error pwmanager/libcrypt/mpi pwmanager/libcrypt/zlib pwmanager/pwmanager + } + } + diff --git a/packages/kdepimpi/kdepimpi-x11_2.2.3.bb b/packages/kdepimpi/kdepimpi-x11_2.2.3.bb new file mode 100644 index 0000000000..6c48baf266 --- /dev/null +++ b/packages/kdepimpi/kdepimpi-x11_2.2.3.bb @@ -0,0 +1,10 @@ +SRC_URI = "${SOURCEFORGE_MIRROR}/kdepimpi/kdepimpi-${PV}.tar.gz \ +file://libkcal.patch;patch=1 \ +file://kabc.patch;patch=1 \ +file://kammu.patch;patch=1 \ +file://korganizer.patch;patch=1 \ +file://nomail.patch;patch=1 \ +" + +include kdepimpi-base.inc +include kdepimpi-x11.inc diff --git a/packages/kdepimpi/kdepimpi_2.2.3.bb b/packages/kdepimpi/kdepimpi_2.2.3.bb new file mode 100644 index 0000000000..f3dde1a2fd --- /dev/null +++ b/packages/kdepimpi/kdepimpi_2.2.3.bb @@ -0,0 +1,3 @@ +SRC_URI = "${SOURCEFORGE_MIRROR}/kdepimpi/kdepimpi-${PV}.tar.gz " + +include kdepimpi-base.inc diff --git a/packages/kdepimpi/pwmpi_2.2.3.bb b/packages/kdepimpi/pwmpi_2.2.3.bb new file mode 100644 index 0000000000..904f640955 --- /dev/null +++ b/packages/kdepimpi/pwmpi_2.2.3.bb @@ -0,0 +1,3 @@ +include kdepimpi_${PV}.bb + +include pwmpi.inc -- cgit v1.2.3 From 2ad892a4f0b835ad6e90f28f401be5db7386b12f Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 21 Feb 2008 17:13:34 +0000 Subject: kdepimpi: not sending patches for kdepimpi-x11 upstream since it has been abandoned. --- packages/kdepimpi/kdepimpi-x11/kabc.patch | 2 +- packages/kdepimpi/kdepimpi-x11/kammu.patch | 2 +- packages/kdepimpi/kdepimpi-x11/korganizer.patch | 2 +- packages/kdepimpi/kdepimpi-x11/libkcal.patch | 2 ++ packages/kdepimpi/kdepimpi-x11/nomail.patch | 1 + 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/kdepimpi/kdepimpi-x11/kabc.patch b/packages/kdepimpi/kdepimpi-x11/kabc.patch index 9a3c1c9694..6428c2d19f 100644 --- a/packages/kdepimpi/kdepimpi-x11/kabc.patch +++ b/packages/kdepimpi/kdepimpi-x11/kabc.patch @@ -1,4 +1,4 @@ - +upstream: is basically dead # # Patch managed by http://www.holgerschurig.de/patcher.html # diff --git a/packages/kdepimpi/kdepimpi-x11/kammu.patch b/packages/kdepimpi/kdepimpi-x11/kammu.patch index 364dce736e..1f81c390ad 100644 --- a/packages/kdepimpi/kdepimpi-x11/kammu.patch +++ b/packages/kdepimpi/kdepimpi-x11/kammu.patch @@ -1,4 +1,4 @@ - +upstream: is basically dead # # Patch managed by http://www.holgerschurig.de/patcher.html # diff --git a/packages/kdepimpi/kdepimpi-x11/korganizer.patch b/packages/kdepimpi/kdepimpi-x11/korganizer.patch index 830205e04d..be38a07a99 100644 --- a/packages/kdepimpi/kdepimpi-x11/korganizer.patch +++ b/packages/kdepimpi/kdepimpi-x11/korganizer.patch @@ -1,4 +1,4 @@ - +upstream: is basically dead # # Patch managed by http://www.holgerschurig.de/patcher.html # diff --git a/packages/kdepimpi/kdepimpi-x11/libkcal.patch b/packages/kdepimpi/kdepimpi-x11/libkcal.patch index 04456f9c3d..3bc8d869c2 100644 --- a/packages/kdepimpi/kdepimpi-x11/libkcal.patch +++ b/packages/kdepimpi/kdepimpi-x11/libkcal.patch @@ -1,3 +1,5 @@ +upstream: is basically dead + --- kdepim/libkcal/libkcal.pro~paths 2005-01-30 00:23:34.000000000 +0100 +++ kdepim/libkcal/libkcal.pro 2005-10-03 11:09:49.000000000 +0200 @@ -11,8 +11,8 @@ diff --git a/packages/kdepimpi/kdepimpi-x11/nomail.patch b/packages/kdepimpi/kdepimpi-x11/nomail.patch index 2c8916bb12..4b47c9e7e9 100644 --- a/packages/kdepimpi/kdepimpi-x11/nomail.patch +++ b/packages/kdepimpi/kdepimpi-x11/nomail.patch @@ -1,3 +1,4 @@ +upstream: is basically dead # # Patch managed by http://www.holgerschurig.de/patcher.html -- cgit v1.2.3 From 6f7d91756982de749db89a45cdc9ada7b27fb15b Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 21 Feb 2008 17:24:22 +0000 Subject: kdepimpi: drop superseeded versions that weren't really meant for commit. --- packages/kdepimpi/kdepimpi_2.2.3.bb | 3 --- packages/kdepimpi/pwmpi_2.2.3.bb | 3 --- 2 files changed, 6 deletions(-) delete mode 100644 packages/kdepimpi/kdepimpi_2.2.3.bb delete mode 100644 packages/kdepimpi/pwmpi_2.2.3.bb diff --git a/packages/kdepimpi/kdepimpi_2.2.3.bb b/packages/kdepimpi/kdepimpi_2.2.3.bb deleted file mode 100644 index f3dde1a2fd..0000000000 --- a/packages/kdepimpi/kdepimpi_2.2.3.bb +++ /dev/null @@ -1,3 +0,0 @@ -SRC_URI = "${SOURCEFORGE_MIRROR}/kdepimpi/kdepimpi-${PV}.tar.gz " - -include kdepimpi-base.inc diff --git a/packages/kdepimpi/pwmpi_2.2.3.bb b/packages/kdepimpi/pwmpi_2.2.3.bb deleted file mode 100644 index 904f640955..0000000000 --- a/packages/kdepimpi/pwmpi_2.2.3.bb +++ /dev/null @@ -1,3 +0,0 @@ -include kdepimpi_${PV}.bb - -include pwmpi.inc -- cgit v1.2.3 From 3451c15f3778943419b616d1fa035548fe91dfab Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 21 Feb 2008 17:52:18 +0000 Subject: kdepimpi: I at least found a place to report the patches to now. * in case anybody ever revives the kdepimpi project, they have our patches --- packages/kdepimpi/files/gcc4.patch | 3 +++ packages/kdepimpi/files/gcc42.patch | 6 +++++- packages/kdepimpi/files/qt-mt.patch | 6 +++++- packages/kdepimpi/kdepimpi-x11/kabc.patch | 4 +++- packages/kdepimpi/kdepimpi-x11/kammu.patch | 4 +++- packages/kdepimpi/kdepimpi-x11/korganizer.patch | 4 +++- packages/kdepimpi/kdepimpi-x11/libkcal.patch | 3 ++- packages/kdepimpi/kdepimpi-x11/nomail.patch | 3 ++- 8 files changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/kdepimpi/files/gcc4.patch b/packages/kdepimpi/files/gcc4.patch index 70bd00c889..4f0f212ea6 100644 --- a/packages/kdepimpi/files/gcc4.patch +++ b/packages/kdepimpi/files/gcc4.patch @@ -1,3 +1,6 @@ +upstream: http://sourceforge.net/tracker/index.php?func=detail&aid=1898924&group_id=104103&atid=636951 +status: upstream is pretty dead + --- ./gammu/emb/gammu/depend/siemens/dsiemens.c 2006/04/14 23:30:53 1.1 +++ ./gammu/emb/gammu/depend/siemens/dsiemens.c 2006/04/14 23:31:08 @@ -351,7 +351,7 @@ diff --git a/packages/kdepimpi/files/gcc42.patch b/packages/kdepimpi/files/gcc42.patch index 30e425aeda..e6328eb1ee 100644 --- a/packages/kdepimpi/files/gcc42.patch +++ b/packages/kdepimpi/files/gcc42.patch @@ -1,4 +1,8 @@ -diff --git a/kabc/secrecy.h b/kabc/secrecy.h +upstream: http://sourceforge.net/tracker/index.php?func=detail&aid=1898924&group_id=104103&atid=636951 +status: upstream is pretty dead + +diff --git +a/kabc/secrecy.h b/kabc/secrecy.h index 21e22f2..3011ae9 100644 --- a/kabc/secrecy.h +++ b/kabc/secrecy.h diff --git a/packages/kdepimpi/files/qt-mt.patch b/packages/kdepimpi/files/qt-mt.patch index c7e3f9d88a..f0a5721bd1 100644 --- a/packages/kdepimpi/files/qt-mt.patch +++ b/packages/kdepimpi/files/qt-mt.patch @@ -1,4 +1,8 @@ -diff --git a/microkde/kresources/resource.cpp b/microkde/kresources/resource.cpp +upstream: http://sourceforge.net/tracker/index.php?func=detail&aid=1898924&group_id=104103&atid=636951 +status: upstream is pretty dead + +diff --git +a/microkde/kresources/resource.cpp b/microkde/kresources/resource.cpp index cccd485..65d82e2 100644 --- a/microkde/kresources/resource.cpp +++ b/microkde/kresources/resource.cpp diff --git a/packages/kdepimpi/kdepimpi-x11/kabc.patch b/packages/kdepimpi/kdepimpi-x11/kabc.patch index 6428c2d19f..1f57b855c3 100644 --- a/packages/kdepimpi/kdepimpi-x11/kabc.patch +++ b/packages/kdepimpi/kdepimpi-x11/kabc.patch @@ -1,4 +1,6 @@ -upstream: is basically dead +upstream: http://sourceforge.net/tracker/index.php?func=detail&aid=1898924&group_id=104103&atid=636951 +status: upstream is pretty dead + # # Patch managed by http://www.holgerschurig.de/patcher.html # diff --git a/packages/kdepimpi/kdepimpi-x11/kammu.patch b/packages/kdepimpi/kdepimpi-x11/kammu.patch index 1f81c390ad..b7ccf7c731 100644 --- a/packages/kdepimpi/kdepimpi-x11/kammu.patch +++ b/packages/kdepimpi/kdepimpi-x11/kammu.patch @@ -1,4 +1,6 @@ -upstream: is basically dead +upstream: http://sourceforge.net/tracker/index.php?func=detail&aid=1898924&group_id=104103&atid=636951 +status: upstream is pretty dead + # # Patch managed by http://www.holgerschurig.de/patcher.html # diff --git a/packages/kdepimpi/kdepimpi-x11/korganizer.patch b/packages/kdepimpi/kdepimpi-x11/korganizer.patch index be38a07a99..3537b5ca10 100644 --- a/packages/kdepimpi/kdepimpi-x11/korganizer.patch +++ b/packages/kdepimpi/kdepimpi-x11/korganizer.patch @@ -1,4 +1,6 @@ -upstream: is basically dead +upstream: http://sourceforge.net/tracker/index.php?func=detail&aid=1898924&group_id=104103&atid=636951 +status: upstream is pretty dead + # # Patch managed by http://www.holgerschurig.de/patcher.html # diff --git a/packages/kdepimpi/kdepimpi-x11/libkcal.patch b/packages/kdepimpi/kdepimpi-x11/libkcal.patch index 3bc8d869c2..e226c8c02b 100644 --- a/packages/kdepimpi/kdepimpi-x11/libkcal.patch +++ b/packages/kdepimpi/kdepimpi-x11/libkcal.patch @@ -1,4 +1,5 @@ -upstream: is basically dead +upstream: http://sourceforge.net/tracker/index.php?func=detail&aid=1898924&group_id=104103&atid=636951 +status: upstream is pretty dead --- kdepim/libkcal/libkcal.pro~paths 2005-01-30 00:23:34.000000000 +0100 +++ kdepim/libkcal/libkcal.pro 2005-10-03 11:09:49.000000000 +0200 diff --git a/packages/kdepimpi/kdepimpi-x11/nomail.patch b/packages/kdepimpi/kdepimpi-x11/nomail.patch index 4b47c9e7e9..b37ed7badf 100644 --- a/packages/kdepimpi/kdepimpi-x11/nomail.patch +++ b/packages/kdepimpi/kdepimpi-x11/nomail.patch @@ -1,4 +1,5 @@ -upstream: is basically dead +upstream: http://sourceforge.net/tracker/index.php?func=detail&aid=1898924&group_id=104103&atid=636951 +status: upstream is pretty dead # # Patch managed by http://www.holgerschurig.de/patcher.html -- cgit v1.2.3 From ae6b04161ef07ca09cc5096f6f3e6bc25c9506c6 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 21 Feb 2008 18:01:38 +0000 Subject: kdepimpi: consolidate kphonepi and ktimetrackerpi into kdepimpi directory. --- packages/kdepimpi/kphonepi_1.0.0.bb | 30 +++++++++++++++++++++++++ packages/kdepimpi/ktimetrackerpi_0.9.7.bb | 30 +++++++++++++++++++++++++ packages/kphonepi/.mtn2git_empty | 0 packages/kphonepi/kphonepi_1.0.0.bb | 30 ------------------------- packages/ktimetrackerpi/.mtn2git_empty | 0 packages/ktimetrackerpi/ktimetrackerpi_0.9.7.bb | 30 ------------------------- 6 files changed, 60 insertions(+), 60 deletions(-) create mode 100644 packages/kdepimpi/kphonepi_1.0.0.bb create mode 100644 packages/kdepimpi/ktimetrackerpi_0.9.7.bb delete mode 100644 packages/kphonepi/.mtn2git_empty delete mode 100644 packages/kphonepi/kphonepi_1.0.0.bb delete mode 100644 packages/ktimetrackerpi/.mtn2git_empty delete mode 100644 packages/ktimetrackerpi/ktimetrackerpi_0.9.7.bb diff --git a/packages/kdepimpi/kphonepi_1.0.0.bb b/packages/kdepimpi/kphonepi_1.0.0.bb new file mode 100644 index 0000000000..1f8a5d8196 --- /dev/null +++ b/packages/kdepimpi/kphonepi_1.0.0.bb @@ -0,0 +1,30 @@ +DESCRIPTION = "Kphone/Pi is a 'Voice Over Internet' phone which uses the Session Initiation Protocol (SIP)." +SECTION = "opie/applications" +PRIORITY = "optional" +LICENSE = "GPL" +HOMEPAGE = "http://www.pi-sync.net/html/kp_pi.html" +DEPENDS ="openssl" + +SRC_URI = "${SOURCEFORGE_MIRROR}/kdepimpi/kphone_pi_${PV}.tar.gz" + +S = "${WORKDIR}/kphone_pi" + +inherit palmtop + +EXTRA_QMAKEVARS_POST += "QMAKE_UIC=${STAGING_BINDIR_NATIVE}/uic QMAKE_MOC=${STAGING_BINDIR_NATIVE}/moc QMAKE_RPATH=-Wl,-rpath-link, OBJECTS_DIR=obj/ MOC_DIR=moc/ TARGET=${S}/dest/kppi HEADERS-=kphone/qptrlisth HEADERS+=kphone/qptrlist.h LIBS+=-lstdc++" +QMAKE_PROFILES= "kphone_piE.pro" + +do_configure_prepend() { + mkdir ${S}/dest/ +} + +do_install() { + install -d ${D}${palmtopdir}/bin \ + ${D}${palmtopdir}/apps/Applications \ + ${D}${palmtopdir}/pics/kphone/ + + install -m 0644 ${S}/bin/kdepim/kphone/*.png ${D}${palmtopdir}/pics/kphone/ + install -m 0644 ${S}/kphone.desktop ${D}${palmtopdir}/apps/Applications/ + + install -m 0755 ${S}/dest/kppi ${D}${palmtopdir}/bin/kppi +} diff --git a/packages/kdepimpi/ktimetrackerpi_0.9.7.bb b/packages/kdepimpi/ktimetrackerpi_0.9.7.bb new file mode 100644 index 0000000000..d022dc55cc --- /dev/null +++ b/packages/kdepimpi/ktimetrackerpi_0.9.7.bb @@ -0,0 +1,30 @@ +DESCRIPTION = "Time tracking program" +SECTION = "opie/applications" +PRIORITY = "optional" +LICENSE = "GPL" +HOMEPAGE = "http://www.pi-sync.net" +PR = "r1" + +SRC_URI = "${SOURCEFORGE_MIRROR}/kdepimpi/ktimetracker_pi097.tar.gz" + +S = "${WORKDIR}/ktimetracker_pi" + +inherit palmtop + +EXTRA_QMAKEVARS_POST += "QMAKE_UIC=${STAGING_BINDIR_NATIVE}/uic QMAKE_MOC=${STAGING_BINDIR_NATIVE}/moc QMAKE_RPATH=-Wl,-rpath-link, OBJECTS_DIR=obj/ MOC_DIR=moc/ TARGET=${S}/dest/ktpi HEADERS-=kphone/qptrlisth HEADERS+=kphone/qptrlist.h LIBS+=-lstdc++" +QMAKE_PROFILES= "ktimetracker_piE.pro" + +do_configure_prepend() { + mkdir ${S}/dest/ +} + +do_install() { + install -d ${D}${palmtopdir}/bin \ + ${D}${palmtopdir}/apps/1Pim \ + ${D}${palmtopdir}/pics/ + + install -m 0644 ${S}/ktimetracker.png ${D}${palmtopdir}/pics/ + install -m 0644 ${S}/ktimetracker.desktop ${D}${palmtopdir}/apps/1Pim/ + + install -m 0755 ${S}/dest/ktpi ${D}${palmtopdir}/bin/ktpi +} diff --git a/packages/kphonepi/.mtn2git_empty b/packages/kphonepi/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/kphonepi/kphonepi_1.0.0.bb b/packages/kphonepi/kphonepi_1.0.0.bb deleted file mode 100644 index 1f8a5d8196..0000000000 --- a/packages/kphonepi/kphonepi_1.0.0.bb +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION = "Kphone/Pi is a 'Voice Over Internet' phone which uses the Session Initiation Protocol (SIP)." -SECTION = "opie/applications" -PRIORITY = "optional" -LICENSE = "GPL" -HOMEPAGE = "http://www.pi-sync.net/html/kp_pi.html" -DEPENDS ="openssl" - -SRC_URI = "${SOURCEFORGE_MIRROR}/kdepimpi/kphone_pi_${PV}.tar.gz" - -S = "${WORKDIR}/kphone_pi" - -inherit palmtop - -EXTRA_QMAKEVARS_POST += "QMAKE_UIC=${STAGING_BINDIR_NATIVE}/uic QMAKE_MOC=${STAGING_BINDIR_NATIVE}/moc QMAKE_RPATH=-Wl,-rpath-link, OBJECTS_DIR=obj/ MOC_DIR=moc/ TARGET=${S}/dest/kppi HEADERS-=kphone/qptrlisth HEADERS+=kphone/qptrlist.h LIBS+=-lstdc++" -QMAKE_PROFILES= "kphone_piE.pro" - -do_configure_prepend() { - mkdir ${S}/dest/ -} - -do_install() { - install -d ${D}${palmtopdir}/bin \ - ${D}${palmtopdir}/apps/Applications \ - ${D}${palmtopdir}/pics/kphone/ - - install -m 0644 ${S}/bin/kdepim/kphone/*.png ${D}${palmtopdir}/pics/kphone/ - install -m 0644 ${S}/kphone.desktop ${D}${palmtopdir}/apps/Applications/ - - install -m 0755 ${S}/dest/kppi ${D}${palmtopdir}/bin/kppi -} diff --git a/packages/ktimetrackerpi/.mtn2git_empty b/packages/ktimetrackerpi/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/ktimetrackerpi/ktimetrackerpi_0.9.7.bb b/packages/ktimetrackerpi/ktimetrackerpi_0.9.7.bb deleted file mode 100644 index d022dc55cc..0000000000 --- a/packages/ktimetrackerpi/ktimetrackerpi_0.9.7.bb +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION = "Time tracking program" -SECTION = "opie/applications" -PRIORITY = "optional" -LICENSE = "GPL" -HOMEPAGE = "http://www.pi-sync.net" -PR = "r1" - -SRC_URI = "${SOURCEFORGE_MIRROR}/kdepimpi/ktimetracker_pi097.tar.gz" - -S = "${WORKDIR}/ktimetracker_pi" - -inherit palmtop - -EXTRA_QMAKEVARS_POST += "QMAKE_UIC=${STAGING_BINDIR_NATIVE}/uic QMAKE_MOC=${STAGING_BINDIR_NATIVE}/moc QMAKE_RPATH=-Wl,-rpath-link, OBJECTS_DIR=obj/ MOC_DIR=moc/ TARGET=${S}/dest/ktpi HEADERS-=kphone/qptrlisth HEADERS+=kphone/qptrlist.h LIBS+=-lstdc++" -QMAKE_PROFILES= "ktimetracker_piE.pro" - -do_configure_prepend() { - mkdir ${S}/dest/ -} - -do_install() { - install -d ${D}${palmtopdir}/bin \ - ${D}${palmtopdir}/apps/1Pim \ - ${D}${palmtopdir}/pics/ - - install -m 0644 ${S}/ktimetracker.png ${D}${palmtopdir}/pics/ - install -m 0644 ${S}/ktimetracker.desktop ${D}${palmtopdir}/apps/1Pim/ - - install -m 0755 ${S}/dest/ktpi ${D}${palmtopdir}/bin/ktpi -} -- cgit v1.2.3 From 6f9b918ba4c22fec0628869ab323f43d7cc9ce5e Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Thu, 21 Feb 2008 19:38:56 +0000 Subject: tcl: drop -L${libdir} in tclConfig.sh. Fixes 3771. Thanks, zecke. --- packages/tcltk/tcl_8.4.11.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/tcltk/tcl_8.4.11.bb b/packages/tcltk/tcl_8.4.11.bb index 963bc30fc8..4bf3efd786 100644 --- a/packages/tcltk/tcl_8.4.11.bb +++ b/packages/tcltk/tcl_8.4.11.bb @@ -2,7 +2,7 @@ DESCRIPTION = "Tool Command Language" LICENSE = "tcl" SECTION = "devel/tcltk" HOMEPAGE = "http://tcl.sourceforge.net" -PR = "r5" +PR = "r6" SRC_URI = "${SOURCEFORGE_MIRROR}/tcl/tcl${PV}-src.tar.gz \ file://tcl-add-soname.patch;patch=1 \ @@ -27,6 +27,7 @@ do_stage() { oe_libinstall -a libtclstub8.4 ${STAGING_LIBDIR} oe_libinstall -so libtcl8.4 ${STAGING_LIBDIR} sed -i "s+${WORKDIR}+${STAGING_INCDIR}+g" tclConfig.sh + sed -i "s,-L${libdir},," tclConfig.sh install -d ${STAGING_BINDIR_CROSS}/ install -m 0755 tclConfig.sh ${STAGING_BINDIR_CROSS} cd .. -- cgit v1.2.3 From c75944cb1477cf822e252faeb9ebaf56c2286acf Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 21 Feb 2008 22:38:48 +0000 Subject: kernel-arch.bbclass: Fix obvious typo supposedly causing issues with x86_64. --- classes/kernel-arch.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/kernel-arch.bbclass b/classes/kernel-arch.bbclass index b45f3f9696..5e5d9a94a8 100644 --- a/classes/kernel-arch.bbclass +++ b/classes/kernel-arch.bbclass @@ -5,7 +5,7 @@ # valid_archs = "alpha cris ia64 \ - x86_64,i386 x86 \ + x86_64 i386 x86 \ m68knommu m68k ppc powerpc ppc64 \ sparc sparc64 \ arm arm26 \ -- cgit v1.2.3 From 37f2fe4b801df832e93553a08eff24fec736c7d4 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 21 Feb 2008 22:56:03 +0000 Subject: kernel.bbclass: Fis typo in do_builtin_initramfs. --- classes/kernel.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index 1e325323df..459c553ffe 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -70,7 +70,7 @@ INITRAMFS_IMAGE_TARGET ?= "initramfs-image" do_builtin_initramfs() { unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE - cp "${DEPLOY_DIR_IMAME}/${INITRAMFS_SYMLINK_NAME}" usr/initramfs_data.cpio.gz + cp "${DEPLOY_DIR_IMAGE}/${INITRAMFS_SYMLINK_NAME}" usr/initramfs_data.cpio.gz oe_runmake ${KERNEL_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" install -d ${DEPLOY_DIR_IMAGE} install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}-initramfs.bin -- cgit v1.2.3 From 355bcc65fe217907a468c2754f85639109a59ff7 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 21 Feb 2008 23:10:24 +0000 Subject: ipaq-boot-params: Fix to actually enable flash booting with the recent kernels. * Uses modern syntax for MTD device, mtdN. * Also, make tty0 a primary console. This matches HaRET default setting and focuses on providing users proper feedback of boot procedure. Hackers who may need to access serial console as well can do needed settings with bootloader. --- packages/ipaq-boot-params/files/h5000/params | 2 +- packages/ipaq-boot-params/files/params | 2 +- packages/ipaq-boot-params/ipaq-boot-params.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ipaq-boot-params/files/h5000/params b/packages/ipaq-boot-params/files/h5000/params index a1a1f4e6e9..fb42935fd5 100644 --- a/packages/ipaq-boot-params/files/h5000/params +++ b/packages/ipaq-boot-params/files/h5000/params @@ -1 +1 @@ -set linuxargs "root=/dev/mtdblock1 noinitrd console=tty0 console=ttyS0,115200" +set linuxargs "root=mtd1 noinitrd console=ttyS0,115200 console=tty0" diff --git a/packages/ipaq-boot-params/files/params b/packages/ipaq-boot-params/files/params index a1a1f4e6e9..fb42935fd5 100644 --- a/packages/ipaq-boot-params/files/params +++ b/packages/ipaq-boot-params/files/params @@ -1 +1 @@ -set linuxargs "root=/dev/mtdblock1 noinitrd console=tty0 console=ttyS0,115200" +set linuxargs "root=mtd1 noinitrd console=ttyS0,115200 console=tty0" diff --git a/packages/ipaq-boot-params/ipaq-boot-params.bb b/packages/ipaq-boot-params/ipaq-boot-params.bb index 7b73df1d34..216811ab56 100644 --- a/packages/ipaq-boot-params/ipaq-boot-params.bb +++ b/packages/ipaq-boot-params/ipaq-boot-params.bb @@ -1,6 +1,6 @@ DESCRIPTION = "Kernel boot parameters for HH.org bootldr" LICENSE = "MIT" -PR = "r4" +PR = "r5" COMPATIBLE_MACHINE = "(h3600|h3800|h3900|h5000|simpad)" -- cgit v1.2.3 From 25d8d3285f2bce8a6d63f9f3a1e7aca2a4a55a25 Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Thu, 21 Feb 2008 23:21:03 +0000 Subject: Fixed sort path in updatedb. * Set ac_cv_path_SORT to the correct value. --- packages/findutils/findutils_4.2.29.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/findutils/findutils_4.2.29.bb b/packages/findutils/findutils_4.2.29.bb index 2f40d03bd4..fcb074c185 100644 --- a/packages/findutils/findutils_4.2.29.bb +++ b/packages/findutils/findutils_4.2.29.bb @@ -1,5 +1,7 @@ require findutils.inc +EXTRA_OECONF += " ac_cv_path_SORT=/usr/bin/sort " + do_install_append () { mv ${D}${bindir}/find ${D}${bindir}/find.${PN} mv ${D}${bindir}/xargs ${D}${bindir}/xargs.${PN} -- cgit v1.2.3 From f391a32d62b34e032902234b075c718d328682bc Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 22 Feb 2008 01:26:06 +0000 Subject: libcap: update to latest release 0.9.8. Partly closes 2989. --- packages/libpcap/libpcap-0.9.6/.mtn2git_empty | 0 packages/libpcap/libpcap-0.9.6/shared.patch | 119 -------------------------- packages/libpcap/libpcap-0.9.8/.mtn2git_empty | 0 packages/libpcap/libpcap-0.9.8/shared.patch | 119 ++++++++++++++++++++++++++ packages/libpcap/libpcap_0.9.6.bb | 3 - packages/libpcap/libpcap_0.9.8.bb | 3 + 6 files changed, 122 insertions(+), 122 deletions(-) delete mode 100644 packages/libpcap/libpcap-0.9.6/.mtn2git_empty delete mode 100644 packages/libpcap/libpcap-0.9.6/shared.patch create mode 100644 packages/libpcap/libpcap-0.9.8/.mtn2git_empty create mode 100644 packages/libpcap/libpcap-0.9.8/shared.patch delete mode 100644 packages/libpcap/libpcap_0.9.6.bb create mode 100644 packages/libpcap/libpcap_0.9.8.bb diff --git a/packages/libpcap/libpcap-0.9.6/.mtn2git_empty b/packages/libpcap/libpcap-0.9.6/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/libpcap/libpcap-0.9.6/shared.patch b/packages/libpcap/libpcap-0.9.6/shared.patch deleted file mode 100644 index 159389bb87..0000000000 --- a/packages/libpcap/libpcap-0.9.6/shared.patch +++ /dev/null @@ -1,119 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- libpcap-0.9.3/Makefile.in~shared -+++ libpcap-0.9.3/Makefile.in -@@ -37,6 +37,15 @@ - srcdir = @srcdir@ - VPATH = @srcdir@ - -+# some defines for shared library compilation - FIXME, if not matching -+MAJ=0.9 -+MIN=6 -+VERSION=$(MAJ).$(MIN) -+LIBNAME=pcap -+LIBRARY=lib$(LIBNAME).a -+SOLIBRARY=lib$(LIBNAME).so -+SHAREDLIB=$(SOLIBRARY).$(VERSION) -+ - # - # You shouldn't need to edit anything below. - # -@@ -50,6 +59,7 @@ - - # Standard CFLAGS - CFLAGS = $(CCOPT) $(INCLS) $(DEFS) -+CFLAGS_SHARED = -shared -Wl,-soname,$(SOLIBRARY).$(MAJ) - - INSTALL = @INSTALL@ - INSTALL_PROGRAM = @INSTALL_PROGRAM@ -@@ -70,6 +80,9 @@ - .c.o: - @rm -f $@ - $(CC) $(CFLAGS) -c $(srcdir)/$*.c -+%_pic.o: %.c -+ @rm -f $@ -+ $(CC) -fPIC $(CFLAGS) -c -o $@ $(srcdir)/$*.c - - PSRC = pcap-@V_PCAP@.c - FSRC = fad-@V_FINDALLDEVS@.c -@@ -84,6 +97,7 @@ - # We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot - # hack the extra indirection - OBJ = $(PSRC:.c=.o) $(FSRC:.c=.o) $(CSRC:.c=.o) $(SSRC:.c=.o) $(GENSRC:.c=.o) $(LIBOBJS) -+OBJ_PIC = $(PSRC:.c=_pic.o) $(FSRC:.c=.o) $(CSRC:.c=_pic.o) $(GENSRC:.c=_pic.o) - HDR = pcap.h pcap-int.h pcap-namedb.h pcap-nit.h pcap-pf.h \ - ethertype.h gencode.h gnuc.h - GENHDR = \ -@@ -95,15 +109,22 @@ - TAGFILES = \ - $(SRC) $(HDR) $(TAGHDR) - --CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c -+CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c libpcap.so* - --all: libpcap.a -+all: libpcap.a $(SHAREDLIB) - - libpcap.a: $(OBJ) - @rm -f $@ - ar rc $@ $(OBJ) $(LIBS) - $(RANLIB) $@ - -+$(SHAREDLIB): $(OBJ_PIC) -+ -@rm -f $@ -+ -@rm -f $(SOLIBRARY) $(SOLIBRARY).$(MAJ) -+ $(CC) $(CFLAGS_SHARED) -o $(SHAREDLIB) $(OBJ_PIC) -lc -+ ln -s $(SHAREDLIB) $(SOLIBRARY).$(MAJ) -+ ln -s $(SOLIBRARY).$(MAJ) $(SOLIBRARY) -+ - shared: libpcap.$(DYEXT) - - # -@@ -129,6 +150,9 @@ - scanner.o: scanner.c tokdefs.h - $(CC) $(CFLAGS) -c scanner.c - -+scanner_pic.o: scanner.c tokdefs.h -+ $(CC) -fPIC $(CFLAGS) -o $@ -c scanner.c -+ - pcap.o: version.h - - tokdefs.h: grammar.c -@@ -142,9 +166,16 @@ - @rm -f $@ - $(CC) $(CFLAGS) -Dyylval=pcap_lval -c grammar.c - -+grammer_pic.o: grammar.c -+ @rm -f $@ -+ $(CC) -fPIC $(CFLAGS) -Dyylval=pcap_lval -o $@ -c grammar.c -+ - version.o: version.c - $(CC) $(CFLAGS) -c version.c - -+version_pic.o: version.c -+ $(CC) -fPIC $(CFLAGS) -c version.c -o $@ -+ - snprintf.o: $(srcdir)/missing/snprintf.c - $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c - -@@ -170,11 +201,17 @@ - bpf_filter.o: bpf_filter.c - $(CC) $(CFLAGS) -c bpf_filter.c - -+bpf_filter_pic.o: bpf_filter.c -+ $(CC) -fPIC $(CFLAGS) -c bpf_filter.c -o $@ -+ - install: libpcap.a - [ -d $(DESTDIR)$(libdir) ] || \ - (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir)) - $(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a - $(RANLIB) $(DESTDIR)$(libdir)/libpcap.a -+ $(INSTALL_DATA) $(SHAREDLIB) $(DESTDIR)$(libdir)/ -+ ln -sf $(SHAREDLIB) $(DESTDIR)$(libdir)/$(SOLIBRARY).$(MAJ) -+ ln -sf $(SOLIBRARY).$(MAJ) $(DESTDIR)$(libdir)/$(SOLIBRARY) - [ -d $(DESTDIR)$(includedir) ] || \ - (mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir)) - $(INSTALL_DATA) $(srcdir)/pcap.h $(DESTDIR)$(includedir)/pcap.h diff --git a/packages/libpcap/libpcap-0.9.8/.mtn2git_empty b/packages/libpcap/libpcap-0.9.8/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/libpcap/libpcap-0.9.8/shared.patch b/packages/libpcap/libpcap-0.9.8/shared.patch new file mode 100644 index 0000000000..159389bb87 --- /dev/null +++ b/packages/libpcap/libpcap-0.9.8/shared.patch @@ -0,0 +1,119 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- libpcap-0.9.3/Makefile.in~shared ++++ libpcap-0.9.3/Makefile.in +@@ -37,6 +37,15 @@ + srcdir = @srcdir@ + VPATH = @srcdir@ + ++# some defines for shared library compilation - FIXME, if not matching ++MAJ=0.9 ++MIN=6 ++VERSION=$(MAJ).$(MIN) ++LIBNAME=pcap ++LIBRARY=lib$(LIBNAME).a ++SOLIBRARY=lib$(LIBNAME).so ++SHAREDLIB=$(SOLIBRARY).$(VERSION) ++ + # + # You shouldn't need to edit anything below. + # +@@ -50,6 +59,7 @@ + + # Standard CFLAGS + CFLAGS = $(CCOPT) $(INCLS) $(DEFS) ++CFLAGS_SHARED = -shared -Wl,-soname,$(SOLIBRARY).$(MAJ) + + INSTALL = @INSTALL@ + INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -70,6 +80,9 @@ + .c.o: + @rm -f $@ + $(CC) $(CFLAGS) -c $(srcdir)/$*.c ++%_pic.o: %.c ++ @rm -f $@ ++ $(CC) -fPIC $(CFLAGS) -c -o $@ $(srcdir)/$*.c + + PSRC = pcap-@V_PCAP@.c + FSRC = fad-@V_FINDALLDEVS@.c +@@ -84,6 +97,7 @@ + # We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot + # hack the extra indirection + OBJ = $(PSRC:.c=.o) $(FSRC:.c=.o) $(CSRC:.c=.o) $(SSRC:.c=.o) $(GENSRC:.c=.o) $(LIBOBJS) ++OBJ_PIC = $(PSRC:.c=_pic.o) $(FSRC:.c=.o) $(CSRC:.c=_pic.o) $(GENSRC:.c=_pic.o) + HDR = pcap.h pcap-int.h pcap-namedb.h pcap-nit.h pcap-pf.h \ + ethertype.h gencode.h gnuc.h + GENHDR = \ +@@ -95,15 +109,22 @@ + TAGFILES = \ + $(SRC) $(HDR) $(TAGHDR) + +-CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c ++CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c libpcap.so* + +-all: libpcap.a ++all: libpcap.a $(SHAREDLIB) + + libpcap.a: $(OBJ) + @rm -f $@ + ar rc $@ $(OBJ) $(LIBS) + $(RANLIB) $@ + ++$(SHAREDLIB): $(OBJ_PIC) ++ -@rm -f $@ ++ -@rm -f $(SOLIBRARY) $(SOLIBRARY).$(MAJ) ++ $(CC) $(CFLAGS_SHARED) -o $(SHAREDLIB) $(OBJ_PIC) -lc ++ ln -s $(SHAREDLIB) $(SOLIBRARY).$(MAJ) ++ ln -s $(SOLIBRARY).$(MAJ) $(SOLIBRARY) ++ + shared: libpcap.$(DYEXT) + + # +@@ -129,6 +150,9 @@ + scanner.o: scanner.c tokdefs.h + $(CC) $(CFLAGS) -c scanner.c + ++scanner_pic.o: scanner.c tokdefs.h ++ $(CC) -fPIC $(CFLAGS) -o $@ -c scanner.c ++ + pcap.o: version.h + + tokdefs.h: grammar.c +@@ -142,9 +166,16 @@ + @rm -f $@ + $(CC) $(CFLAGS) -Dyylval=pcap_lval -c grammar.c + ++grammer_pic.o: grammar.c ++ @rm -f $@ ++ $(CC) -fPIC $(CFLAGS) -Dyylval=pcap_lval -o $@ -c grammar.c ++ + version.o: version.c + $(CC) $(CFLAGS) -c version.c + ++version_pic.o: version.c ++ $(CC) -fPIC $(CFLAGS) -c version.c -o $@ ++ + snprintf.o: $(srcdir)/missing/snprintf.c + $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c + +@@ -170,11 +201,17 @@ + bpf_filter.o: bpf_filter.c + $(CC) $(CFLAGS) -c bpf_filter.c + ++bpf_filter_pic.o: bpf_filter.c ++ $(CC) -fPIC $(CFLAGS) -c bpf_filter.c -o $@ ++ + install: libpcap.a + [ -d $(DESTDIR)$(libdir) ] || \ + (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir)) + $(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a + $(RANLIB) $(DESTDIR)$(libdir)/libpcap.a ++ $(INSTALL_DATA) $(SHAREDLIB) $(DESTDIR)$(libdir)/ ++ ln -sf $(SHAREDLIB) $(DESTDIR)$(libdir)/$(SOLIBRARY).$(MAJ) ++ ln -sf $(SOLIBRARY).$(MAJ) $(DESTDIR)$(libdir)/$(SOLIBRARY) + [ -d $(DESTDIR)$(includedir) ] || \ + (mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir)) + $(INSTALL_DATA) $(srcdir)/pcap.h $(DESTDIR)$(includedir)/pcap.h diff --git a/packages/libpcap/libpcap_0.9.6.bb b/packages/libpcap/libpcap_0.9.6.bb deleted file mode 100644 index 865e57ab93..0000000000 --- a/packages/libpcap/libpcap_0.9.6.bb +++ /dev/null @@ -1,3 +0,0 @@ -require libpcap.inc - -PR = "r2" diff --git a/packages/libpcap/libpcap_0.9.8.bb b/packages/libpcap/libpcap_0.9.8.bb new file mode 100644 index 0000000000..865e57ab93 --- /dev/null +++ b/packages/libpcap/libpcap_0.9.8.bb @@ -0,0 +1,3 @@ +require libpcap.inc + +PR = "r2" -- cgit v1.2.3 From 21153662198e3801aa410298d5bda559d3877c94 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Fri, 22 Feb 2008 01:31:25 +0000 Subject: angstrom-task-sectest: update ettercap to ettercap-ng, close oebug 3307 --- packages/angstrom/angstrom-task-sectest.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/angstrom/angstrom-task-sectest.bb b/packages/angstrom/angstrom-task-sectest.bb index c3ebcab31d..bf8019da0d 100644 --- a/packages/angstrom/angstrom-task-sectest.bb +++ b/packages/angstrom/angstrom-task-sectest.bb @@ -1,11 +1,11 @@ DESCRIPTION = "Task packages for the Angstrom distribution" -PR = "r32" +PR = "r33" inherit task RDEPENDS_${PN} = "\ nmap \ - ettercap \ + ettercap-ng \ stunnel \ curl \ # dsniff \ -- cgit v1.2.3 From aeadc77957a6b716256cd39bc10cd82dbf1d8c30 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Fri, 22 Feb 2008 02:52:20 +0000 Subject: gpgme: unify, fix LEAD_SONAME --- packages/gpgme/gpgme.inc | 27 +++++++++++++++++++++++++++ packages/gpgme/gpgme_1.0.0.bb | 23 ++--------------------- packages/gpgme/gpgme_1.0.3.bb | 23 ++--------------------- packages/gpgme/gpgme_1.1.4.bb | 28 ++-------------------------- 4 files changed, 33 insertions(+), 68 deletions(-) create mode 100644 packages/gpgme/gpgme.inc diff --git a/packages/gpgme/gpgme.inc b/packages/gpgme/gpgme.inc new file mode 100644 index 0000000000..dc8df2c85f --- /dev/null +++ b/packages/gpgme/gpgme.inc @@ -0,0 +1,27 @@ +DESCRIPTION = "GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG easier for applications" +HOMEPAGE = "http://www.gnupg.org/gpgme.html" +LICENSE = "GPL" +DEPENDS = "libgpg-error pth libassuan" + +SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-${PV}.tar.gz" + +EXTRA_OECONF = "--with-pth=${STAGING_DIR}/${HOST_SYS} --without-pth-test --with-gpg=${bindir}/gpg --without-gpgsm" + +LEAD_SONAME = "libgpgme.so" + +inherit autotools binconfig + +do_stage() { + autotools_stage_includes + + install -d ${STAGING_LIBDIR} + oe_libinstall -C gpgme -so libgpgme ${STAGING_LIBDIR} + oe_libinstall -C gpgme -so libgpgme-pth ${STAGING_LIBDIR} + oe_libinstall -C gpgme -so libgpgme-pthread ${STAGING_LIBDIR} + + install -d ${STAGING_DATADIR}/aclocal + install -m 0644 gpgme/gpgme.m4 ${STAGING_DATADIR}/aclocal/ +} + +FILES_${PN} = "${libdir}/libgpgme*.so.*" +FILES_${PN}-dev += "${bindir}/gpgme-config" diff --git a/packages/gpgme/gpgme_1.0.0.bb b/packages/gpgme/gpgme_1.0.0.bb index 8292991a89..2a8923ba4c 100644 --- a/packages/gpgme/gpgme_1.0.0.bb +++ b/packages/gpgme/gpgme_1.0.0.bb @@ -1,22 +1,3 @@ -LICENSE = "GPL" -SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-${PV}.tar.gz" -PR = "r1" - -DEPENDS = "libgpg-error pth libassuan" - -EXTRA_OECONF = "--with-pth=${STAGING_DIR}/${HOST_SYS} --without-pth-test --with-gpg=${bindir}/gpg --without-gpgsm" - -inherit autotools binconfig - -do_stage() { - autotools_stage_includes - - install -d ${STAGING_LIBDIR} - oe_libinstall -C gpgme -so libgpgme ${STAGING_LIBDIR} - oe_libinstall -C gpgme -so libgpgme-pth ${STAGING_LIBDIR} - oe_libinstall -C gpgme -so libgpgme-pthread ${STAGING_LIBDIR} - - install -d ${STAGING_DATADIR}/aclocal - install -m 0644 gpgme/gpgme.m4 ${STAGING_DATADIR}/aclocal/ -} +require gpgme.inc +PR = "r2" diff --git a/packages/gpgme/gpgme_1.0.3.bb b/packages/gpgme/gpgme_1.0.3.bb index 8292991a89..2a8923ba4c 100644 --- a/packages/gpgme/gpgme_1.0.3.bb +++ b/packages/gpgme/gpgme_1.0.3.bb @@ -1,22 +1,3 @@ -LICENSE = "GPL" -SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-${PV}.tar.gz" -PR = "r1" - -DEPENDS = "libgpg-error pth libassuan" - -EXTRA_OECONF = "--with-pth=${STAGING_DIR}/${HOST_SYS} --without-pth-test --with-gpg=${bindir}/gpg --without-gpgsm" - -inherit autotools binconfig - -do_stage() { - autotools_stage_includes - - install -d ${STAGING_LIBDIR} - oe_libinstall -C gpgme -so libgpgme ${STAGING_LIBDIR} - oe_libinstall -C gpgme -so libgpgme-pth ${STAGING_LIBDIR} - oe_libinstall -C gpgme -so libgpgme-pthread ${STAGING_LIBDIR} - - install -d ${STAGING_DATADIR}/aclocal - install -m 0644 gpgme/gpgme.m4 ${STAGING_DATADIR}/aclocal/ -} +require gpgme.inc +PR = "r2" diff --git a/packages/gpgme/gpgme_1.1.4.bb b/packages/gpgme/gpgme_1.1.4.bb index e51fca90b9..2b8b07c90e 100644 --- a/packages/gpgme/gpgme_1.1.4.bb +++ b/packages/gpgme/gpgme_1.1.4.bb @@ -1,27 +1,3 @@ -LICENSE = "GPL" -SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-${PV}.tar.bz2" -PR = "r2" - -DEPENDS = "libgpg-error pth libassuan" - -EXTRA_OECONF = "--with-pth=${STAGING_DIR}/${HOST_SYS} --without-pth-test --with-gpg=${bindir}/gpg --without-gpgsm" - -inherit autotools binconfig - -do_stage() { - autotools_stage_includes - - install -d ${STAGING_LIBDIR} - oe_libinstall -C gpgme -so libgpgme ${STAGING_LIBDIR} - oe_libinstall -C gpgme -so libgpgme-pth ${STAGING_LIBDIR} - oe_libinstall -C gpgme -so libgpgme-pthread ${STAGING_LIBDIR} - - install -d ${STAGING_DATADIR}/aclocal - install -m 0644 gpgme/gpgme.m4 ${STAGING_DATADIR}/aclocal/ -} - -FILES_${PN} = "${libdir}/libgpgme*.so.*" -FILES_${PN}-dev += "${bindir}/gpgme-config" - -LEAD_SONAME = "libgpgme" +require gpgme.inc +PR = "r3" -- cgit v1.2.3 From 08752ad7c3067ddb8a2f58fb6c7a74b831791beb Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 22 Feb 2008 12:08:53 +0000 Subject: bootsplash-native: add jpeg-native to DEPENDS. Fixes 1947. --- packages/bootsplash/bootsplash-native_3.0.7.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/bootsplash/bootsplash-native_3.0.7.bb b/packages/bootsplash/bootsplash-native_3.0.7.bb index 7eabf484ac..bc5956d2c4 100644 --- a/packages/bootsplash/bootsplash-native_3.0.7.bb +++ b/packages/bootsplash/bootsplash-native_3.0.7.bb @@ -4,6 +4,8 @@ require bootsplash_${PV}.bb +DEPENDS += "jpeg-native" + inherit native S="${WORKDIR}/bootsplash-${PV}" -- cgit v1.2.3 From f491dfaa97dbcbfdd0f14c6372f5941055167b3b Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 22 Feb 2008 13:05:59 +0000 Subject: sharprom-compatible.conf: set palmtopdir and PREFERRED_PROVIDER_linux-libc-headers. partly closes 2809. ============================================================ --- conf/distro/sharprom-compatible.conf 1917f33c694aff55fe7253f1a1dcb3dcb92edde8 +++ conf/distro/sharprom-compatible.conf a56c571d457931934464e14394215bc4932503e6 @@ -38,6 +38,7 @@ PREFERRED_PROVIDER_virtual/linux-libc-he PREFERRED_PROVIDER_virtual/libc = "sharprom-toolchain-native" PREFERRED_PROVIDER_virtual/arm-linux-gcc = "sharprom-toolchain-native" PREFERRED_PROVIDER_virtual/linux-libc-headers = "linux-libc-headers" +PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers" PREFERRED_PROVIDER_virtual/arm-linux-gcc-initial = "sharprom-toolchain-native" PREFERRED_VERSION_glibc = "2.2.5" @@ -52,6 +53,7 @@ PALMTOP_USE_MULTITHREADED_QT = "no" QTE_VERSION = "2.3.10" OPIE_VERSION = "1.2.2" PALMTOP_USE_MULTITHREADED_QT = "no" +export palmtopdir = "/opt/QtPalmtop" require conf/distro/include/preferred-opie-versions.inc --- conf/distro/sharprom-compatible.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/distro/sharprom-compatible.conf b/conf/distro/sharprom-compatible.conf index 3fbe79e354..0e130a2fd7 100644 --- a/conf/distro/sharprom-compatible.conf +++ b/conf/distro/sharprom-compatible.conf @@ -38,6 +38,7 @@ PREFERRED_PROVIDER_virtual/arm-linux-binutils = "sharprom-toolchain-native" PREFERRED_PROVIDER_virtual/libc = "sharprom-toolchain-native" PREFERRED_PROVIDER_virtual/arm-linux-gcc = "sharprom-toolchain-native" PREFERRED_PROVIDER_virtual/linux-libc-headers = "linux-libc-headers" +PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers" PREFERRED_PROVIDER_virtual/arm-linux-gcc-initial = "sharprom-toolchain-native" PREFERRED_VERSION_glibc = "2.2.5" @@ -52,6 +53,7 @@ PREFERRED_PROVIDERS += " virtual/libqpe:libqpe-opie" QTE_VERSION = "2.3.10" OPIE_VERSION = "1.2.2" PALMTOP_USE_MULTITHREADED_QT = "no" +export palmtopdir = "/opt/QtPalmtop" require conf/distro/include/preferred-opie-versions.inc # -- cgit v1.2.3 From 63abf4b57db58cbfb1b1d652f80ce2f81f524fbd Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 22 Feb 2008 20:36:06 +0000 Subject: klibc-utils-static: add some missing utils --- packages/klibc/klibc-utils-static_1.5.bb | 51 ++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/packages/klibc/klibc-utils-static_1.5.bb b/packages/klibc/klibc-utils-static_1.5.bb index bbb3248158..7248576c9f 100644 --- a/packages/klibc/klibc-utils-static_1.5.bb +++ b/packages/klibc/klibc-utils-static_1.5.bb @@ -1,22 +1,21 @@ require klibc-common.inc -PR = "r3" - -SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/Stable/klibc-${PV}.tar.bz2" +PR = "r4" SRC_URI_append_linux-gnueabi = "\ file://klibc-config-eabi.patch;patch=1" -EXTRA_OEMAKE = "'KLIBCARCH=${KLIBC_ARCH}' \ - 'CROSS_COMPILE=${TARGET_PREFIX}' \ - " - +# We only want the static utils. klibc build both. So we install only what we want. do_install() { install -d ${D}${base_bindir} install -m 755 usr/dash/sh ${D}${base_bindir} install -m 755 usr/gzip/gzip ${D}${base_bindir} - ln -s ${D}${base_bindir}/gzip ${D}${base_bindir}/gunzip - ln -s ${D}${base_bindir}/gzip ${D}${base_bindir}/zcat + install -m 755 usr/kinit/kinit ${D}${base_bindir} + install -m 755 usr/kinit/fstype/static/fstype ${D}${base_bindir} + install -m 755 usr/kinit/ipconfig/static/ipconfig ${D}${base_bindir} + install -m 755 usr/kinit/nfsmount/static/nfsmount ${D}${base_bindir} + install -m 755 usr/kinit/resume/static/resume ${D}${base_bindir} + install -m 755 usr/kinit/run-init/static/run-init ${D}${base_bindir} install -m 755 usr/utils/static/cat ${D}${base_bindir} install -m 755 usr/utils/static/chroot ${D}${base_bindir} install -m 755 usr/utils/static/cpio ${D}${base_bindir} @@ -28,31 +27,50 @@ do_install() { install -m 755 usr/utils/static/ln ${D}${base_bindir} install -m 755 usr/utils/static/minips ${D}${base_bindir} install -m 755 usr/utils/static/mkdir ${D}${base_bindir} + install -m 755 usr/utils/static/mkfifo ${D}${base_bindir} install -m 755 usr/utils/static/mknod ${D}${base_bindir} install -m 755 usr/utils/static/mount ${D}${base_bindir} install -m 755 usr/utils/static/nuke ${D}${base_bindir} install -m 755 usr/utils/static/pivot_root ${D}${base_bindir} + install -m 755 usr/utils/static/poweroff ${D}${base_bindir} install -m 755 usr/utils/static/readlink ${D}${base_bindir} + install -m 755 usr/utils/static/reboot ${D}${base_bindir} install -m 755 usr/utils/static/sleep ${D}${base_bindir} install -m 755 usr/utils/static/true ${D}${base_bindir} install -m 755 usr/utils/static/umount ${D}${base_bindir} install -m 755 usr/utils/static/uname ${D}${base_bindir} + cd ${D}${base_bindir} + ln -s gzip gunzip + ln -s gzip zcat + cd - } PACKAGES = "klibc-utils-static-sh klibc-utils-static-gzip \ - klibc-utils-static-cat klibc-utils-static-chroot \ + klibc-utils-static-kinit klibc-utils-static-fstype \ + klibc-utils-static-ipconfig klibc-utils-static-nfsmount \ + klibc-utils-static-resume klibc-utils-static-run-init \ + klibc-utils-static-cat klibc-utils-static-chroot \ klibc-utils-static-cpio klibc-utils-static-dd \ klibc-utils-static-false klibc-utils-static-halt \ klibc-utils-static-insmod klibc-utils-static-kill \ klibc-utils-static-ln klibc-utils-static-minips \ - klibc-utils-static-mkdir klibc-utils-static-mknod \ - klibc-utils-static-mount klibc-utils-static-nuke \ - klibc-utils-static-pivot-root klibc-utils-static-readlink \ - klibc-utils-static-sleep klibc-utils-static-true \ - klibc-utils-static-umount klibc-utils-static-uname " + klibc-utils-static-mkdir klibc-utils-static-mkfifo \ + klibc-utils-static-mknod klibc-utils-static-mount \ + klibc-utils-static-nuke klibc-utils-static-pivot-root \ + klibc-utils-static-poweroff klibc-utils-static-readlink \ + klibc-utils-static-reboot klibc-utils-static-sleep \ + klibc-utils-static-true klibc-utils-static-umount \ + klibc-utils-static-uname \ + " FILES_klibc-utils-static-sh = "${base_bindir}/sh" FILES_klibc-utils-static-gzip = "${base_bindir}/gzip ${base_bindir}/gunzip ${base_bindir}/zcat" +FILES_klibc-utils-static-kinit = "${base_bindir}/kinit" +FILES_klibc-utils-static-fstype = "${base_bindir}/fstype" +FILES_klibc-utils-static-ipconfig = "${base_bindir}/ipconfig" +FILES_klibc-utils-static-nfsmount = "${base_bindir}/nfsmount" +FILES_klibc-utils-static-resume = "${base_bindir}/resume" +FILES_klibc-utils-static-run-init = "${base_bindir}/run-init" FILES_klibc-utils-static-cat = "${base_bindir}/cat" FILES_klibc-utils-static-chroot = "${base_bindir}/chroot" FILES_klibc-utils-static-cpio = "${base_bindir}/cpio" @@ -64,11 +82,14 @@ FILES_klibc-utils-static-kill = "${base_bindir}/kill" FILES_klibc-utils-static-ln = "${base_bindir}/ln" FILES_klibc-utils-static-minips = "${base_bindir}/minips" FILES_klibc-utils-static-mkdir = "${base_bindir}/mkdir" +FILES_klibc-utils-static-mkfifo = "${base_bindir}/mkfifo" FILES_klibc-utils-static-mknod = "${base_bindir}/mknod" FILES_klibc-utils-static-mount = "${base_bindir}/mount" FILES_klibc-utils-static-nuke = "${base_bindir}/nuke" FILES_klibc-utils-static-pivot-root = "${base_bindir}/pivot_root" +FILES_klibc-utils-static-poweroff = "${base_bindir}/poweroff" FILES_klibc-utils-static-readlink = "${base_bindir}/readlink" +FILES_klibc-utils-static-reboot = "${base_bindir}/reboot" FILES_klibc-utils-static-sleep = "${base_bindir}/sleep" FILES_klibc-utils-static-true = "${base_bindir}/true" FILES_klibc-utils-static-umount = "${base_bindir}/umount" -- cgit v1.2.3 From a502812fd2f097fe0cf69ddc514685e601f0fd9b Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 22 Feb 2008 20:39:28 +0000 Subject: klibc: update to 1.5 remove old non-working versions * build shared klibc-utils * set CC="${TARGET_PREFIX}klcc" if you want to compile against klibc --- packages/klibc/files/install.patch | 42 -------- packages/klibc/files/klibc_kexecsyscall.patch | 11 ++ packages/klibc/files/staging.patch | 130 +++++++++++++++++++++++ packages/klibc/klibc-common.inc | 43 +------- packages/klibc/klibc.inc | 147 +++++++++++++++++++++++--- packages/klibc/klibc_0.190.bb | 1 - packages/klibc/klibc_1.1.1.bb | 3 - packages/klibc/klibc_1.5.bb | 2 + 8 files changed, 283 insertions(+), 96 deletions(-) delete mode 100644 packages/klibc/files/install.patch create mode 100644 packages/klibc/files/klibc_kexecsyscall.patch create mode 100644 packages/klibc/files/staging.patch delete mode 100644 packages/klibc/klibc_0.190.bb delete mode 100644 packages/klibc/klibc_1.1.1.bb create mode 100644 packages/klibc/klibc_1.5.bb diff --git a/packages/klibc/files/install.patch b/packages/klibc/files/install.patch deleted file mode 100644 index b165e8b177..0000000000 --- a/packages/klibc/files/install.patch +++ /dev/null @@ -1,42 +0,0 @@ -# These are OE specific patches which make the install stuff work -# in the OE build environment and fix the problem that the gzip -# stuff should be all links to one executable but end up being -# copies ---- klibc-1.1.1/Makefile.orig 2005-12-29 14:20:09.080981353 -0800 -+++ klibc-1.1.1/Makefile 2005-12-29 14:20:25.634022970 -0800 -@@ -61,7 +61,7 @@ local-install: $(CROSS)klcc - mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)include/$$d ; \ - for r in $(KRNLSRC)/include $(KRNLOBJ)/include $(KRNLOBJ)/include2 ; do \ - [ ! -d $$r/$$d ] || \ -- cp -rfL $$r/$$d/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/$$d/. ; \ -+ cp -rf $$r/$$d/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/$$d/. ; \ - done ; \ - done - cd $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include && ln -sf asm-$(ARCH) asm ---- klibc-1.1.1/gzip/Makefile.orig 2005-12-29 18:10:00.787869930 -0800 -+++ klibc-1.1.1/gzip/Makefile 2005-12-29 18:11:21.084922705 -0800 -@@ -70,9 +70,12 @@ clean: - spotless: clean - rm -f *~ - --# These should presumably be shared... - install: all -- $(INSTALL_EXEC) gzip gunzip zcat $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin -+ $(INSTALL_EXEC) gzip $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin -+ rm -f $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin/gunzip -+ ln $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin/gzip $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin/gunzip -+ rm -f $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin/zcat -+ ln $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin/gzip $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)bin/zcat - - ifneq ($(wildcard .*.d),) - include $(wildcard .*.d) ---- klibc-1.1.1/klibc/Makefile.orig 2005-12-30 10:39:04.504930675 -0800 -+++ klibc-1.1.1/klibc/Makefile 2005-12-30 10:39:52.755966921 -0800 -@@ -184,6 +184,7 @@ install: all - $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)lib - $(INSTALL_EXEC) klibc-`cat $(SOLIB).hash`.so \ - $(INSTALLROOT)$(INSTALLDIR)/$(CROSS)lib -+ test -z "$(INSTALLROOT)" || \ - $(INSTALL_EXEC) klibc-`cat $(SOLIB).hash`.so \ - $(INSTALLROOT)/$(SHLIBDIR) - diff --git a/packages/klibc/files/klibc_kexecsyscall.patch b/packages/klibc/files/klibc_kexecsyscall.patch new file mode 100644 index 0000000000..9b2dca4738 --- /dev/null +++ b/packages/klibc/files/klibc_kexecsyscall.patch @@ -0,0 +1,11 @@ +--- klibc-1.5/usr/klibc/SYSCALLS.def 2007-03-04 02:52:10.000000000 +0100 ++++ klibc.clean/usr/klibc/SYSCALLS.def 2008-02-22 17:12:23.663612084 +0100 +@@ -13,6 +13,8 @@ + #include + #include + #include ++#include ++long kexec_load(void *, unsigned long , struct kexec_segment *, unsigned long ); + + /* + * Process-related syscalls diff --git a/packages/klibc/files/staging.patch b/packages/klibc/files/staging.patch new file mode 100644 index 0000000000..f5ce23af9f --- /dev/null +++ b/packages/klibc/files/staging.patch @@ -0,0 +1,130 @@ +diff -ru klibc.clean/Makefile klibc-1.5/Makefile +--- klibc.clean/Makefile 2008-02-08 22:37:36.000000000 +0100 ++++ klibc-1.5/Makefile 2008-02-15 12:46:48.000000000 +0100 +@@ -33,7 +33,7 @@ + export PERL := perl + + # Location for installation +-export prefix = /usr ++export prefix = $(INST) + export bindir = $(prefix)/bin + export libdir = $(prefix)/lib + export mandir = $(prefix)/man +diff -ru klibc.clean/scripts/Kbuild.install klibc-1.5/scripts/Kbuild.install +--- klibc.clean/scripts/Kbuild.install 2008-02-08 22:37:36.000000000 +0100 ++++ klibc-1.5/scripts/Kbuild.install 2008-02-18 22:36:35.434193918 +0100 +@@ -88,14 +88,11 @@ + header: + $(Q)echo " INSTALL headers + man pages to $(INSTALLROOT)$(INSTALLDIR)" + $(Q)mkdir -p $(INSTALLROOT)$(bindir) +- $(Q)mkdir -p $(INSTALLROOT)$(mandir)/man1 +- $(Q)mkdir -p $(INSTALLROOT)$(SHLIBDIR) + $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR) + $(Q)-rm -rf $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include + $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include + $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib +- $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin +- $(Q)set -e ; for d in linux scsi asm-$(KLIBCARCH) asm-generic $(ASMKLIBCARCH); do \ ++ $(Q)-set -e ; for d in linux scsi asm-$(KLIBCARCH) asm-generic $(ASMKLIBCARCH); do \ + mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)include/$$d ; \ + for r in $(KLIBCKERNELSRC)/include $(KLIBCKERNELOBJ)/include \ + $(KLIBCKERNELOBJ)/include2 ; do \ +@@ -106,7 +103,6 @@ + done + $(Q)cd $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include && ln -sf asm-$(KLIBCARCH) asm + $(Q)cp -rf usr/include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/. +- $(Q)$(install-data) $(srctree)/klcc/klcc.1 $(INSTALLROOT)$(mandir)/man1/$(KCROSS)klcc.1 + $(Q)$(install-bin) $(objtree)/klcc/$(KCROSS)klcc $(INSTALLROOT)$(bindir) + + footer: header +diff -ru klibc.clean/usr/dash/Kbuild klibc-1.5/usr/dash/Kbuild +--- klibc.clean/usr/dash/Kbuild 2008-02-08 22:37:41.000000000 +0100 ++++ klibc-1.5/usr/dash/Kbuild 2008-02-15 12:18:08.000000000 +0100 +@@ -107,5 +107,3 @@ + $(obj)/arith.c: $(obj)/arith.h + $(Q): + +-# Targets to install +-install-y := sh.shared +diff -ru klibc.clean/usr/gzip/Kbuild klibc-1.5/usr/gzip/Kbuild +--- klibc.clean/usr/gzip/Kbuild 2008-02-08 22:37:42.000000000 +0100 ++++ klibc-1.5/usr/gzip/Kbuild 2008-02-15 12:18:24.000000000 +0100 +@@ -21,5 +21,3 @@ + # Cleaning + targets := gzip gzip.g gunzip zcat + +-# Targets to install +-install-y := gzip gunzip zcat +diff -ru klibc.clean/usr/kinit/fstype/Kbuild klibc-1.5/usr/kinit/fstype/Kbuild +--- klibc.clean/usr/kinit/fstype/Kbuild 2008-02-08 22:37:40.000000000 +0100 ++++ klibc-1.5/usr/kinit/fstype/Kbuild 2008-02-15 12:26:20.000000000 +0100 +@@ -21,5 +21,3 @@ + # Cleaning + clean-dirs := static shared + +-# install binary +-install-y := $(shared-y) +diff -ru klibc.clean/usr/kinit/ipconfig/Kbuild klibc-1.5/usr/kinit/ipconfig/Kbuild +--- klibc.clean/usr/kinit/ipconfig/Kbuild 2008-02-08 22:37:40.000000000 +0100 ++++ klibc-1.5/usr/kinit/ipconfig/Kbuild 2008-02-15 12:26:33.000000000 +0100 +@@ -27,5 +27,3 @@ + # Cleaning + clean-dirs := static shared + +-# install binary +-install-y := $(shared-y) +diff -ru klibc.clean/usr/kinit/Kbuild klibc-1.5/usr/kinit/Kbuild +--- klibc.clean/usr/kinit/Kbuild 2008-02-08 22:37:40.000000000 +0100 ++++ klibc-1.5/usr/kinit/Kbuild 2008-02-15 12:18:43.000000000 +0100 +@@ -33,5 +33,3 @@ + subdir- := fstype ipconfig nfsmount resume run-init + + +-# install binary +-install-y := kinit kinit.shared +diff -ru klibc.clean/usr/kinit/nfsmount/Kbuild klibc-1.5/usr/kinit/nfsmount/Kbuild +--- klibc.clean/usr/kinit/nfsmount/Kbuild 2008-02-08 22:37:40.000000000 +0100 ++++ klibc-1.5/usr/kinit/nfsmount/Kbuild 2008-02-15 12:26:46.000000000 +0100 +@@ -23,5 +23,3 @@ + + clean-dirs := static shared + +-# Install binary +-install-y := $(shared-y) +diff -ru klibc.clean/usr/kinit/resume/Kbuild klibc-1.5/usr/kinit/resume/Kbuild +--- klibc.clean/usr/kinit/resume/Kbuild 2008-02-08 22:37:39.000000000 +0100 ++++ klibc-1.5/usr/kinit/resume/Kbuild 2008-02-15 12:27:01.000000000 +0100 +@@ -26,5 +26,3 @@ + # Cleaning + clean-dirs := static shared + +-# install binary +-install-y := $(shared-y) +diff -ru klibc.clean/usr/kinit/run-init/Kbuild klibc-1.5/usr/kinit/run-init/Kbuild +--- klibc.clean/usr/kinit/run-init/Kbuild 2008-02-08 22:37:39.000000000 +0100 ++++ klibc-1.5/usr/kinit/run-init/Kbuild 2008-02-15 12:27:12.000000000 +0100 +@@ -21,5 +21,3 @@ + # Cleaning + clean-dirs := static shared + +-# install binary +-install-y := $(shared-y) +Only in klibc-1.5/usr/klibc/arch/arm: klib.list +diff -ru klibc.clean/usr/klibc/Kbuild klibc-1.5/usr/klibc/Kbuild +--- klibc.clean/usr/klibc/Kbuild 2008-02-08 22:37:49.000000000 +0100 ++++ klibc-1.5/usr/klibc/Kbuild 2008-02-15 12:17:24.000000000 +0100 +@@ -175,5 +175,3 @@ + $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib)) + $(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \ + $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib +- $(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \ +- $(INSTALLROOT)$(SHLIBDIR) +diff -ru klibc.clean/usr/utils/Kbuild klibc-1.5/usr/utils/Kbuild +--- klibc.clean/usr/utils/Kbuild 2008-02-08 22:37:37.000000000 +0100 ++++ klibc-1.5/usr/utils/Kbuild 2008-02-15 12:17:51.000000000 +0100 +@@ -64,5 +64,3 @@ + # Clean deletes the static and shared dir + clean-dirs := static shared + +-# install only install the shared binaries +-install-y := $(shared-y) shared/reboot shared/poweroff diff --git a/packages/klibc/klibc-common.inc b/packages/klibc/klibc-common.inc index 146968eaf0..87f806dfe2 100644 --- a/packages/klibc/klibc-common.inc +++ b/packages/klibc/klibc-common.inc @@ -5,31 +5,9 @@ use with initramfs. It is deliberately written for small size, \ minimal entaglement, and portability, not speed." LICENSE = "BSD-ADV" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/klibc/Stable/klibc-${PV}.tar.bz2" -SRC_URI += "file://install.patch;patch=1" S = "${WORKDIR}/klibc-${PV}" PACKAGE_ARCH = "${MACHINE_ARCH}" -# for the correct kernel staging path -# inherit module-base - -EXTRA_OEMAKE = "'ARCH=${KLIBC_ARCH}' \ - 'CROSS=${TARGET_PREFIX}' \ - 'CC=${HOST_PREFIX}gcc' \ - 'LD=${HOST_PREFIX}ld' \ - 'AR=${AR}' \ - 'RANLIB=${RANLIB}' \ - 'NM=${TARGET_PREFIX}nm' \ - 'STRIP=echo' \ - 'SHLIBDIR=/lib' \ - 'HOST_CC=${BUILD_CC}' \ - 'HOST_CFLAGS=${BUILD_CFLAGS}' \ - 'HOST_LDFLAGS=${BUILD_LDFLAGS}' \ - 'HOST_LIBS=' \ - 'LDFLAGS=' \ - 'ARCHREQFLAGS=${HOST_CC_ARCH}' \ - 'OPTFLAGS=${TARGET_CFLAGS}' \ - 'mandir=${mandir}'" - KLIBC_ARCH = '${TARGET_ARCH}' KLIBC_ARCH_armeb = 'arm' KLIBC_ARCH_mipsel = 'mips' @@ -38,25 +16,14 @@ KLIBC_ARCH_mipsel = 'mips' # could be fixed, but for the moment: ARM_INSTRUCTION_SET = "arm" -TARGET_CFLAGS := "${@oe_filter_out('-I\S+', '${TARGET_CFLAGS}', d)} -I${STAGING_KERNEL_DIR}/include" - -INSTALLDIR = "/usr/lib/klibc" -INSTALLPREFIX = "${INSTALLDIR}/${TARGET_PREFIX}" -INSTALLBINDIR = "${INSTALLPREFIX}bin" -INSTALLLIBDIR = "${INSTALLPREFIX}lib" -INSTALLINCDIR = "${INSTALLPREFIX}include" +SRC_URI_append_linux-gnueabi = "\ + file://klibc-config-eabi.patch;patch=1" -PACKAGES = "${PN}-dbg ${PN} ${PN}-dev ${PN}-doc" - -FILES_${PN} = "/lib/*.so* ${INSTALLBINDIR}" -FILES_${PN}-dev = "/usr/bin ${INSTALLINCDIR} ${INSTALLLIBDIR}" +EXTRA_OEMAKE = "'KLIBCARCH=${KLIBC_ARCH}' \ + 'CROSS_COMPILE=${TARGET_PREFIX}' \ + " do_configure () { ln -sf ${STAGING_KERNEL_DIR} linux } -do_install() { - # The installed -dev won't work because it has the cross compiler - # path compiled in. - oe_runmake 'INSTALLROOT=${D}' install -} diff --git a/packages/klibc/klibc.inc b/packages/klibc/klibc.inc index efaf298e36..d7065f1e67 100644 --- a/packages/klibc/klibc.inc +++ b/packages/klibc/klibc.inc @@ -1,17 +1,140 @@ require klibc-common.inc -STAGING_KLIBC_DIR = "${STAGING_DIR_HOST}/klibc" +SRC_URI += "file://staging.patch;patch=1 \ + file://klibc_kexecsyscall.patch;patch=1 \ + " +SRC_URI_append_linux-gnueabi = "file://klibc-config-eabi.patch;patch=1" +# we want only the shared programms and the lib so we chose them manually +do_install() { + install -d ${D}${base_bindir} + install -m 755 usr/dash/sh.shared ${D}${base_bindir}/sh + install -m 755 usr/gzip/gzip ${D}${base_bindir} + install -m 755 usr/kinit/kinit.shared ${D}${base_bindir}/kinit + install -m 755 usr/kinit/fstype/shared/fstype ${D}${base_bindir} + install -m 755 usr/kinit/ipconfig/shared/ipconfig ${D}${base_bindir} + install -m 755 usr/kinit/nfsmount/shared/nfsmount ${D}${base_bindir} + install -m 755 usr/kinit/resume/shared/resume ${D}${base_bindir} + install -m 755 usr/kinit/run-init/shared/run-init ${D}${base_bindir} + install -m 755 usr/utils/shared/cat ${D}${base_bindir} + install -m 755 usr/utils/shared/chroot ${D}${base_bindir} + install -m 755 usr/utils/shared/cpio ${D}${base_bindir} + install -m 755 usr/utils/shared/dd ${D}${base_bindir} + install -m 755 usr/utils/shared/false ${D}${base_bindir} + install -m 755 usr/utils/shared/halt ${D}${base_bindir} + install -m 755 usr/utils/shared/insmod ${D}${base_bindir} + install -m 755 usr/utils/shared/kill ${D}${base_bindir} + install -m 755 usr/utils/shared/ln ${D}${base_bindir} + install -m 755 usr/utils/shared/minips ${D}${base_bindir} + install -m 755 usr/utils/shared/mkdir ${D}${base_bindir} + install -m 755 usr/utils/shared/mkfifo ${D}${base_bindir} + install -m 755 usr/utils/shared/mknod ${D}${base_bindir} + install -m 755 usr/utils/shared/mount ${D}${base_bindir} + install -m 755 usr/utils/shared/nuke ${D}${base_bindir} + install -m 755 usr/utils/shared/pivot_root ${D}${base_bindir} + install -m 755 usr/utils/shared/poweroff ${D}${base_bindir} + install -m 755 usr/utils/shared/readlink ${D}${base_bindir} + install -m 755 usr/utils/shared/reboot ${D}${base_bindir} + install -m 755 usr/utils/shared/sleep ${D}${base_bindir} + install -m 755 usr/utils/shared/true ${D}${base_bindir} + install -m 755 usr/utils/shared/umount ${D}${base_bindir} + install -m 755 usr/utils/shared/uname ${D}${base_bindir} + + install -d ${D}${base_libdir} + install -m 755 usr/klibc/klibc-*.so ${D}${base_libdir} + cd ${D}${base_libdir} + ln -s klibc-*.so klibc.so + cd - + cd ${D}${base_bindir} + ln -s gzip gunzip + ln -s gzip zcat + cd - +} + +export INST=${STAGING_DIR_TARGET} do_stage() { - rm -rf "${STAGING_KLIBC_DIR}" - oe_runmake 'prefix=${STAGING_KLIBC_DIR}' \ - 'bindir=${STAGING_BINDIR}' \ - 'mandir=${STAGING_DIR_HOST}${layout_mandir}' \ - install - # The following is sufficient, at least in klibc 1.1.1 to make klcc - # use the staged libraries and include files. - sed -i -e 's@^\$prefix = .*$@\$prefix = "${STAGING_KLIBC_DIR}/lib/klibc";@' \ - '${STAGING_BINDIR}/${TARGET_PREFIX}klcc' - # Perhaps other binaries need to be moved to cross? - mv '${STAGING_BINDIR}/${TARGET_PREFIX}klcc' '${STAGING_BINDIR_CROSS}' + oe_runmake install + cp '${STAGING_DIR_TARGET}/bin/klcc' '${CROSS_DIR}/bin/${TARGET_PREFIX}klcc' } + +PACKAGES = "${PN} klibc-utils-sh klibc-utils-kinit \ + klibc-utils-fstype klibc-utils-ipconfig \ + klibc-utils-nfsmount klibc-utils-resume \ + klibc-utils-run-init klibc-utils-cat \ + klibc-utils-chroot klibc-utils-cpio \ + klibc-utils-dd klibc-utils-false \ + klibc-utils-halt klibc-utils-insmod \ + klibc-utils-kill klibc-utils-ln \ + klibc-utils-minips klibc-utils-mkdir \ + klibc-utils-mkfifo klibc-utils-mknod \ + klibc-utils-mount klibc-utils-nuke \ + klibc-utils-pivot-root klibc-utils-poweroff \ + klibc-utils-readlink klibc-utils-reboot \ + klibc-utils-sleep klibc-utils-true \ + klibc-utils-umount klibc-utils-uname \ + klibc-utils-gzip" + +FILES_${PN} = "${base_libdir}/klibc*.so" +FILES_klibc-utils-sh = "${base_bindir}/sh" +FILES_klibc-utils-static-gzip = "${base_bindir}/gzip ${base_bindir}/gunzip ${base_bindir}/zcat" +FILES_klibc-utils-kinit = "${base_bindir}/kinit" +FILES_klibc-utils-fstype = "${base_bindir}/fstype" +FILES_klibc-utils-ipconfig = "${base_bindir}/ipconfig" +FILES_klibc-utils-nfsmount = "${base_bindir}/nfsmount" +FILES_klibc-utils-resume = "${base_bindir}/resume" +FILES_klibc-utils-run-init = "${base_bindir}/run-init" +FILES_klibc-utils-cat = "${base_bindir}/cat" +FILES_klibc-utils-chroot = "${base_bindir}/chroot" +FILES_klibc-utils-cpio = "${base_bindir}/cpio" +FILES_klibc-utils-dd = "${base_bindir}/dd" +FILES_klibc-utils-false = "${base_bindir}/false" +FILES_klibc-utils-halt = "${base_bindir}/halt" +FILES_klibc-utils-insmod = "${base_bindir}/insmod" +FILES_klibc-utils-kill = "${base_bindir}/kill" +FILES_klibc-utils-ln = "${base_bindir}/ln" +FILES_klibc-utils-minips = "${base_bindir}/minips" +FILES_klibc-utils-mkdir = "${base_bindir}/mkdir" +FILES_klibc-utils-mkfifo = "${base_bindir}/mkfifo" +FILES_klibc-utils-mknod = "${base_bindir}/mknod" +FILES_klibc-utils-mount = "${base_bindir}/mount" +FILES_klibc-utils-nuke = "${base_bindir}/nuke" +FILES_klibc-utils-pivot-root = "${base_bindir}/pivot_root" +FILES_klibc-utils-poweroff = "${base_bindir}/poweroff" +FILES_klibc-utils-readlink = "${base_bindir}/readlink" +FILES_klibc-utils-reboot = "${base_bindir}/reboot" +FILES_klibc-utils-sleep = "${base_bindir}/sleep" +FILES_klibc-utils-true = "${base_bindir}/true" +FILES_klibc-utils-umount = "${base_bindir}/umount" +FILES_klibc-utils-uname = "${base_bindir}/uname" + +# Yes we want exactly the klibc that was compiled with the utils +RDEPENDS_klibc-utils-sh = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-kinit = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-fstype = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-ipconfig = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-nfsmount = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-resume = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-run-init = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-cat = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-chroot = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-cpio = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-dd = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-false = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-halt = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-insmod = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-kill = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-ln = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-minips = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-mkdir = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-mkfifo = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-mknod = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-mount = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-nuke = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-pivot-root = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-poweroff = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-readlink = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-reboot = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-sleep = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-true = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-umount = "${PN} (=${PV}-${PR})" +RDEPENDS_klibc-utils-uname = "${PN} (=${PV}-${PR})" diff --git a/packages/klibc/klibc_0.190.bb b/packages/klibc/klibc_0.190.bb deleted file mode 100644 index cd1ba9d56e..0000000000 --- a/packages/klibc/klibc_0.190.bb +++ /dev/null @@ -1 +0,0 @@ -require klibc.inc diff --git a/packages/klibc/klibc_1.1.1.bb b/packages/klibc/klibc_1.1.1.bb deleted file mode 100644 index ff715765d5..0000000000 --- a/packages/klibc/klibc_1.1.1.bb +++ /dev/null @@ -1,3 +0,0 @@ -require klibc.inc - -PR = "r1" diff --git a/packages/klibc/klibc_1.5.bb b/packages/klibc/klibc_1.5.bb new file mode 100644 index 0000000000..a8f054cd23 --- /dev/null +++ b/packages/klibc/klibc_1.5.bb @@ -0,0 +1,2 @@ +require klibc.inc +PR = "r1" -- cgit v1.2.3 From 9e8d9da364854e9921769c33b0eb57dac923d002 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 22 Feb 2008 20:44:16 +0000 Subject: kexec-utils-static: make it compile against klibc --- packages/kexec/files/kexec-klibc.patch | 140 +++++++++++++++++++++++++++++ packages/kexec/kexec-tools-static_1.101.bb | 21 +++-- packages/kexec/kexec-tools.inc | 2 - packages/kexec/kexec-tools_1.101.bb | 4 +- 4 files changed, 159 insertions(+), 8 deletions(-) create mode 100644 packages/kexec/files/kexec-klibc.patch diff --git a/packages/kexec/files/kexec-klibc.patch b/packages/kexec/files/kexec-klibc.patch new file mode 100644 index 0000000000..b8e2c81689 --- /dev/null +++ b/packages/kexec/files/kexec-klibc.patch @@ -0,0 +1,140 @@ +Index: kexec-tools-1.101/kexec/arch/arm/kexec-elf-rel-arm.c +=================================================================== +--- kexec-tools-1.101.orig/kexec/arch/arm/kexec-elf-rel-arm.c 2008-02-22 20:45:15.907610333 +0100 ++++ kexec-tools-1.101/kexec/arch/arm/kexec-elf-rel-arm.c 2008-02-22 20:45:27.508612989 +0100 +@@ -1,5 +1,5 @@ + #include +-#include ++#include "../../../include/elf.h" + #include "../../kexec.h" + #include "../../kexec-elf.h" + +Index: kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c +=================================================================== +--- kexec-tools-1.101.orig/kexec/arch/arm/kexec-zImage-arm.c 2008-02-22 20:45:15.959611260 +0100 ++++ kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c 2008-02-22 20:45:27.508612989 +0100 +@@ -110,13 +110,13 @@ + } + + fread(buf, sizeof(buf[1]), BOOT_PARAMS_SIZE, fp); +- if (ferror(fp)) { ++/* if (ferror(fp)) { + fprintf(stderr, "Cannot read %s: %s\n", + fn, strerror(errno)); + fclose(fp); + return NULL; + } +- ++*/ + fclose(fp); + return (struct tag *) buf; + } +Index: kexec-tools-1.101/kexec/ifdown.c +=================================================================== +--- kexec-tools-1.101.orig/kexec/ifdown.c 2004-06-09 20:55:31.000000000 +0200 ++++ kexec-tools-1.101/kexec/ifdown.c 2008-02-22 20:45:27.508612989 +0100 +@@ -14,7 +14,7 @@ + #include + #include + #include +-#include ++#include + + #include + #include +Index: kexec-tools-1.101/purgatory/Makefile +=================================================================== +--- kexec-tools-1.101.orig/purgatory/Makefile 2005-01-08 23:36:32.000000000 +0100 ++++ kexec-tools-1.101/purgatory/Makefile 2008-02-22 20:45:27.516611391 +0100 +@@ -13,7 +13,7 @@ + + PCFLAGS += $(call cc-option, -ffreestanding) + PCFLAGS += $(call cc-option, -fnobuiltin) +-PCFLAGS += $(call cc-option, -fnostdinc) ++PCFLAGS += $(call cc-option, -nostdinc) + PCFLAGS += $(call cc-option, -fno-zero-initialized-in-bss) + + PURGATORY_C_SRCS:= +Index: kexec-tools-1.101/kexec/kexec-elf-rel.c +=================================================================== +--- kexec-tools-1.101.orig/kexec/kexec-elf-rel.c 2005-01-13 14:04:21.000000000 +0100 ++++ kexec-tools-1.101/kexec/kexec-elf-rel.c 2008-02-22 20:45:27.524612027 +0100 +@@ -4,7 +4,7 @@ + #include + #include + #include +-#include "elf.h" ++#include "../include/elf.h" + #include + #include "kexec.h" + #include "kexec-elf.h" +Index: kexec-tools-1.101/kexec/kexec-syscall.h +=================================================================== +--- kexec-tools-1.101.orig/kexec/kexec-syscall.h 2008-02-22 20:45:15.923611048 +0100 ++++ kexec-tools-1.101/kexec/kexec-syscall.h 2008-02-22 20:45:27.524612027 +0100 +@@ -2,7 +2,7 @@ + #define KEXEC_SYSCALL_H + + #define __LIBRARY__ +-#include ++/*#include */ + #include + #include + +@@ -21,7 +21,7 @@ + #define LINUX_REBOOT_CMD_KEXEC_OLD 0x81726354 + #define LINUX_REBOOT_CMD_KEXEC_OLD2 0x18263645 + #define LINUX_REBOOT_CMD_KEXEC 0x45584543 +- ++/* + #ifdef __i386__ + #define __NR_kexec_load 283 + #endif +@@ -43,18 +43,19 @@ + #ifndef __NR_kexec_load + #error Unknown processor architecture. Needs a kexec_load syscall number. + #endif +- ++*/ + struct kexec_segment; +- ++/* + static inline long kexec_load(void *entry, unsigned long nr_segments, + struct kexec_segment *segments, unsigned long flags) + { + return (long) syscall(__NR_kexec_load, entry, nr_segments, segments, flags); + } +- ++*/ + static inline long kexec_reboot(void) + { +- return (long) syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KEXEC, 0); ++ //return (long) syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KEXEC, 0); ++ return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KEXEC, 0); + } + + +Index: kexec-tools-1.101/kexec/kexec.c +=================================================================== +--- kexec-tools-1.101.orig/kexec/kexec.c 2008-02-22 20:45:15.923611048 +0100 ++++ kexec-tools-1.101/kexec/kexec.c 2008-02-22 20:45:38.847612035 +0100 +@@ -29,9 +29,7 @@ + #include + #include + #include +-#ifdef HAVE_ZLIB_H +-#include +-#endif ++#include "zlib.h" + #include + #include "kexec.h" + #include "kexec-syscall.h" +@@ -383,7 +381,7 @@ + return buf; + } + +-#if HAVE_ZLIB_H ++#if 1 + char *slurp_decompress_file(const char *filename, off_t *r_size) + { + gzFile fp; diff --git a/packages/kexec/kexec-tools-static_1.101.bb b/packages/kexec/kexec-tools-static_1.101.bb index ca23917a11..5031b5f923 100644 --- a/packages/kexec/kexec-tools-static_1.101.bb +++ b/packages/kexec/kexec-tools-static_1.101.bb @@ -1,12 +1,23 @@ +# the binaries are statical linked against klibc require kexec-tools.inc -PR = "r0" +PR = "r1" +DEPENDS = "klibc" -SRC_URI += "file://kexec-static.patch;patch=1" +SRC_URI += "file://kexec-klibc.patch;patch=1" S = "${WORKDIR}/kexec-tools-${PV}" -PACKAGES =+ "kexec-static kdump-static" +EXTRA_OECONF = " --without-zlib" -FILES_kexec-static = "${sbindir}/kexec" -FILES_kdump-static = "${sbindir}/kdump" +export CC=${TARGET_PREFIX}klcc + +# standart oe cflags don't work with klcc +export CFLAGS="" +export CPPFLAGS="" +export LDFLAGS="" + +PACKAGES =+ "kexec-klibc kdump-klibc" + +FILES_kexec-klibc = "${sbindir}/kexec" +FILES_kdump-klibc = "${sbindir}/kdump" diff --git a/packages/kexec/kexec-tools.inc b/packages/kexec/kexec-tools.inc index 5649934a5b..f806e71480 100644 --- a/packages/kexec/kexec-tools.inc +++ b/packages/kexec/kexec-tools.inc @@ -7,8 +7,6 @@ DEPENDS = "virtual/kernel zlib" inherit autotools -export LDFLAGS = "-L${STAGING_LIBDIR}" -EXTRA_OECONF = " --with-zlib=yes" SRC_URI = "http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-${PV}.tar.gz \ file://kexec-tools-arm.patch;patch=1 \ diff --git a/packages/kexec/kexec-tools_1.101.bb b/packages/kexec/kexec-tools_1.101.bb index 366fad4978..f74c7bcd83 100644 --- a/packages/kexec/kexec-tools_1.101.bb +++ b/packages/kexec/kexec-tools_1.101.bb @@ -1,3 +1,5 @@ require kexec-tools.inc +export LDFLAGS = "-L${STAGING_LIBDIR}" +EXTRA_OECONF = " --with-zlib=yes" -PR = "r4" +PR = "r5" -- cgit v1.2.3 From 6e8198eadd0e3f9b108f2907fbe20a4afd62b3ec Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Fri, 22 Feb 2008 21:14:32 +0000 Subject: initramfs-kexec: change rootdev vor collie from mtdblock2 to mtd2 --- packages/initrdscripts/initramfs-kexec_1.0.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/initrdscripts/initramfs-kexec_1.0.bb b/packages/initrdscripts/initramfs-kexec_1.0.bb index b5bf497f37..b14ebbe60c 100644 --- a/packages/initrdscripts/initramfs-kexec_1.0.bb +++ b/packages/initrdscripts/initramfs-kexec_1.0.bb @@ -1,11 +1,11 @@ DESCRIPTON = "A init script that mounts a device and kexecs a new kernel from it." -PR = "r3" +PR = "r4" do_compile() { cat > init.sh << EOF #!/bin/sh /bin/mount -t proc proc /proc -/bin/mount -t ${ROOTFS} /dev/${ROOTDEV} /mnt +/bin/mount -t ${ROOTFS} ${ROOTDEV} /mnt /usr/sbin/kexec -l /mnt/zImage /usr/sbin/kexec -e EOF @@ -21,5 +21,5 @@ PACKAGE_ARCH = "all" FILES_${PN} = "/init /proc /mnt" -ROOTDEV = "mtdblock2" +ROOTDEV = "mtd2" ROOTFS = "jffs2" -- cgit v1.2.3 From de86069e7a47a55a23af6c2c6fcefe9f11e50666 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 22 Feb 2008 21:26:04 +0000 Subject: fbset-modes: Add qemuarm definitions. --- packages/fbset/fbset-modes.bb | 2 +- packages/fbset/fbset-modes/qemuarm/.mtn2git_empty | 0 packages/fbset/fbset-modes/qemuarm/fb.modes | 17 +++++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 packages/fbset/fbset-modes/qemuarm/.mtn2git_empty create mode 100644 packages/fbset/fbset-modes/qemuarm/fb.modes diff --git a/packages/fbset/fbset-modes.bb b/packages/fbset/fbset-modes.bb index 2724252125..403751c90a 100644 --- a/packages/fbset/fbset-modes.bb +++ b/packages/fbset/fbset-modes.bb @@ -1,6 +1,6 @@ DESCRIPTION = "Default display timings and resolutions for fbset" PV = "0.1.0" -PR = "r2" +PR = "r3" SRC_URI = "file://fb.modes" diff --git a/packages/fbset/fbset-modes/qemuarm/.mtn2git_empty b/packages/fbset/fbset-modes/qemuarm/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/fbset/fbset-modes/qemuarm/fb.modes b/packages/fbset/fbset-modes/qemuarm/fb.modes new file mode 100644 index 0000000000..1114564797 --- /dev/null +++ b/packages/fbset/fbset-modes/qemuarm/fb.modes @@ -0,0 +1,17 @@ +# QEMU versatilepb machine, qemuarm in OE + +mode "vga" "640x480" + geometry 640 480 640 480 16 +endmode + +mode "vga-portrait" "480x640" + geometry 480 640 480 640 16 +endmode + +mode "qvga" "320x240" + geometry 320 240 320 240 16 +endmode + +mode "qvga-portrait" "240x320" + geometry 240 320 240 320 16 +endmode -- cgit v1.2.3 From 8cb226ed50f8acc4223ffd04d8b41b8ed768c18f Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 22 Feb 2008 23:40:29 +0000 Subject: gpsdrive: fix SRC_URI. closes 3494. --- packages/gpsdrive/gpsdrive_2.10pre2.bb | 2 +- packages/gpsdrive/gpsdrive_2.10pre3.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gpsdrive/gpsdrive_2.10pre2.bb b/packages/gpsdrive/gpsdrive_2.10pre2.bb index 675c556b6f..f44c5925d2 100644 --- a/packages/gpsdrive/gpsdrive_2.10pre2.bb +++ b/packages/gpsdrive/gpsdrive_2.10pre2.bb @@ -9,7 +9,7 @@ SECTION = "x11" PRIORITY = "optional" LICENSE = "GPL" -SRC_URI = "http://www.gpsdrive.de/${PN}-${PV}.tar.gz \ +SRC_URI = "http://www.gpsdrive.de/packages/${PN}-${PV}.tar.gz \ file://gpsdrive.desktop" CFLAGS += "-D_GNU_SOURCE" diff --git a/packages/gpsdrive/gpsdrive_2.10pre3.bb b/packages/gpsdrive/gpsdrive_2.10pre3.bb index cb651aaf39..6a97344260 100644 --- a/packages/gpsdrive/gpsdrive_2.10pre3.bb +++ b/packages/gpsdrive/gpsdrive_2.10pre3.bb @@ -11,7 +11,7 @@ SECTION = "x11" PRIORITY = "optional" LICENSE = "GPL" -SRC_URI = "http://www.ostertag.name/tweety/Projekte/gpsdrive/gpsdrive-2.10pre3.tar.gz \ +SRC_URI = "http://www.gpsdrive.de/packages/${PN}-${PV}.tar.gz \ file://gpsdrive.desktop" CFLAGS += "-D_GNU_SOURCE" -- cgit v1.2.3 From df4b6704ad5b3e016af70810f7ee9bb358ffd6fc Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 22 Feb 2008 23:56:40 +0000 Subject: free42: fix SRC_URI, add HOMEPAGE and update to latest version 1.4.41. Closes 3643. --- packages/free42/free42-vga_1.4.36.bb | 44 ------------------------------------ packages/free42/free42-vga_1.4.41.bb | 44 ++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 44 deletions(-) delete mode 100644 packages/free42/free42-vga_1.4.36.bb create mode 100644 packages/free42/free42-vga_1.4.41.bb diff --git a/packages/free42/free42-vga_1.4.36.bb b/packages/free42/free42-vga_1.4.36.bb deleted file mode 100644 index 3f64f99c6a..0000000000 --- a/packages/free42/free42-vga_1.4.36.bb +++ /dev/null @@ -1,44 +0,0 @@ -DESCRIPTION = "Free42 RPN Calculator" -SECTION = "openmoko/applications" -DEPENDS = "gtk+" -PV = "1.4.36" -PR = "r1" - -SRC_URI = "http://home.planet.nl/~demun000/thomas_projects/free42/free42.tgz \ - http://sense.net/zc/free42/42c_skins.tgz \ - file://free42-bcd-gtk-only.patch;patch=1 \ - file://free42-vga-skin.patch;patch=1 \ - file://free42-dont-declare-sincos.patch;patch=1 \ - file://free42dec.desktop" - -S = "${WORKDIR}/free42" - -TARGET_CXXFLAGS_append = " -fsigned-char" -TARGET_CXXFLAGS_append += "-DVERSION=\\"${PV}\\" -DBCD_MATH" -TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/gtk-2.0" -TARGET_CXXFLAGS_append += "-I${STAGING_LIBDIR}/gtk-2.0/include" -TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/cairo" -TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/glib-2.0" -TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/pango-1.0" -TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/atk-1.0" - -do_compile() { - cp -fv ${S}/common/* ${S}/gtk - cp -fv ${S}/ppcskins/Ehrling42ssv.* ${S}/skins/ - cp ${WORKDIR}/42ct.* ${S}/skins/ - cd ${S}/gtk/ - ${BUILD_CXX} -o skin2cc skin2cc.cc ${BUILD_CXXFLAGS} - ${BUILD_CXX} -o keymap2cc keymap2cc.cc ${BUILD_CXXFLAGS} - oe_runmake -} - -do_install() { - install -d ${D}${bindir} - install -m 0755 ${S}/gtk/free42dec ${D}${bindir}/free42dec - install -d ${D}${datadir}/applications - install -m 0644 ${WORKDIR}/free42dec.desktop ${D}${datadir}/applications/ - install -d ${D}${datadir}/pixmaps - install -m 0644 ${S}/gtk/icon.xpm ${D}${datadir}/pixmaps/free42.xpm -} - - diff --git a/packages/free42/free42-vga_1.4.41.bb b/packages/free42/free42-vga_1.4.41.bb new file mode 100644 index 0000000000..ff5e07feae --- /dev/null +++ b/packages/free42/free42-vga_1.4.41.bb @@ -0,0 +1,44 @@ +DESCRIPTION = "Free42 RPN Calculator" +HOMEPAGE = "http://free42.sf.net" +SECTION = "openmoko/applications" +DEPENDS = "gtk+" +PR = "r1" + +SRC_URI = "${SOURCEFORGE_MIRROR}/free42/free42.tgz \ + http://sense.net/zc/free42/42c_skins.tgz \ + file://free42-bcd-gtk-only.patch;patch=1 \ + file://free42-vga-skin.patch;patch=1 \ + file://free42-dont-declare-sincos.patch;patch=1 \ + file://free42dec.desktop" + +S = "${WORKDIR}/free42" + +TARGET_CXXFLAGS_append = " -fsigned-char" +TARGET_CXXFLAGS_append += "-DVERSION=\\"${PV}\\" -DBCD_MATH" +TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/gtk-2.0" +TARGET_CXXFLAGS_append += "-I${STAGING_LIBDIR}/gtk-2.0/include" +TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/cairo" +TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/glib-2.0" +TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/pango-1.0" +TARGET_CXXFLAGS_append += "-I${STAGING_INCDIR}/atk-1.0" + +do_compile() { + cp -fv ${S}/common/* ${S}/gtk + cp -fv ${S}/ppcskins/Ehrling42ssv.* ${S}/skins/ + cp ${WORKDIR}/42ct.* ${S}/skins/ + cd ${S}/gtk/ + ${BUILD_CXX} -o skin2cc skin2cc.cc ${BUILD_CXXFLAGS} + ${BUILD_CXX} -o keymap2cc keymap2cc.cc ${BUILD_CXXFLAGS} + oe_runmake +} + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${S}/gtk/free42dec ${D}${bindir}/free42dec + install -d ${D}${datadir}/applications + install -m 0644 ${WORKDIR}/free42dec.desktop ${D}${datadir}/applications/ + install -d ${D}${datadir}/pixmaps + install -m 0644 ${S}/gtk/icon.xpm ${D}${datadir}/pixmaps/free42.xpm +} + + -- cgit v1.2.3 From 5218c8747e42414b83bfded3169a4ef5c3d52f0e Mon Sep 17 00:00:00 2001 From: Matthias Hentges Date: Sat, 23 Feb 2008 12:15:49 +0000 Subject: altboot: Update to SVNR79 (add proper modules for collies SD support) --- packages/altboot/altboot_1.1.1+wip-SVNR78.bb | 76 ---------------------------- packages/altboot/altboot_1.1.1+wip-SVNR79.bb | 76 ++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 76 deletions(-) delete mode 100644 packages/altboot/altboot_1.1.1+wip-SVNR78.bb create mode 100644 packages/altboot/altboot_1.1.1+wip-SVNR79.bb diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR78.bb b/packages/altboot/altboot_1.1.1+wip-SVNR78.bb deleted file mode 100644 index db7c10d79f..0000000000 --- a/packages/altboot/altboot_1.1.1+wip-SVNR78.bb +++ /dev/null @@ -1,76 +0,0 @@ -require altboot.inc - -PR = "r2" - -SVN_REV = "78" -SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \ - " - -do_install() { - install -d ${D}/sbin - install -d ${D}/etc/altboot-menu - install -d ${D}/etc/altboot.rc - install -d ${D}/usr/share/doc/altboot - install -d ${D}/usr/share/sounds - - if test -d ${S}/${MACHINE_DIR} - then - install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/ - else - install -m 0644 ${S}/altboot*.cfg ${D}/etc/ - fi - - install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds - install -m 0644 ${S}/altboot.func ${D}/etc - install -m 0644 ${S}/altboot.sbin ${D}/etc - install -m 0644 ${S}/altbootctl.conf ${D}/etc - install -m 0755 ${S}/init.altboot ${D}/sbin - install -m 0755 ${S}/altbootctl ${D}/sbin - - ln -s /sbin/init.altboot ${D}/sbin/altboot - - if test -d ${S}/${MACHINE_DIR}/altboot-menu - then - install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu - - if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced - then - install -d ${D}/etc/altboot-menu/Advanced - install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced - fi - else - install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu - - if test -d ${S}/altboot-menu/Advanced - then - install -d ${D}/etc/altboot-menu/Advanced - install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced - fi - fi - - if test -d ${S}/${MACHINE_DIR}/altboot.rc - then - install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc - install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc - else - install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc - install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc - fi -} - -do_configure() { - cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_ - mv ${S}/init.altboot_ ${S}/init.altboot -} - -pkg_postinst_${PN}() { - test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55 - - update-alternatives --install /sbin/init init /sbin/init.altboot 55 -} - -pkg_postrm_${PN}() { - test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot - - update-alternatives --remove init /sbin/init.altboot -} diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR79.bb b/packages/altboot/altboot_1.1.1+wip-SVNR79.bb new file mode 100644 index 0000000000..335572f3c1 --- /dev/null +++ b/packages/altboot/altboot_1.1.1+wip-SVNR79.bb @@ -0,0 +1,76 @@ +require altboot.inc + +PR = "r0" + +SVN_REV = "79" +SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \ + " + +do_install() { + install -d ${D}/sbin + install -d ${D}/etc/altboot-menu + install -d ${D}/etc/altboot.rc + install -d ${D}/usr/share/doc/altboot + install -d ${D}/usr/share/sounds + + if test -d ${S}/${MACHINE_DIR} + then + install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/ + else + install -m 0644 ${S}/altboot*.cfg ${D}/etc/ + fi + + install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds + install -m 0644 ${S}/altboot.func ${D}/etc + install -m 0644 ${S}/altboot.sbin ${D}/etc + install -m 0644 ${S}/altbootctl.conf ${D}/etc + install -m 0755 ${S}/init.altboot ${D}/sbin + install -m 0755 ${S}/altbootctl ${D}/sbin + + ln -s /sbin/init.altboot ${D}/sbin/altboot + + if test -d ${S}/${MACHINE_DIR}/altboot-menu + then + install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu + + if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced + then + install -d ${D}/etc/altboot-menu/Advanced + install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced + fi + else + install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu + + if test -d ${S}/altboot-menu/Advanced + then + install -d ${D}/etc/altboot-menu/Advanced + install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced + fi + fi + + if test -d ${S}/${MACHINE_DIR}/altboot.rc + then + install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc + install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc + else + install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc + install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc + fi +} + +do_configure() { + cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_ + mv ${S}/init.altboot_ ${S}/init.altboot +} + +pkg_postinst_${PN}() { + test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55 + + update-alternatives --install /sbin/init init /sbin/init.altboot 55 +} + +pkg_postrm_${PN}() { + test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot + + update-alternatives --remove init /sbin/init.altboot +} -- cgit v1.2.3 From 1650b49346625934d23cb75e4adc6e3acdf69252 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sat, 23 Feb 2008 13:35:56 +0000 Subject: conf/checksums.ini: Add xtrans 1.0.4 to the list of checksums --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index 36b7a8f4bf..b1a5460336 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -12846,6 +12846,10 @@ sha256=652f579171e6e8f73c13ab6b060d2447ae35ebfbd39a6002b7c05a1dfc0f7eb8 md5=bb196907ea1e182dcb396eb22f7d2c1a sha256=e1a3c4986f16a5fbca611d0547cc7499a1fa47ca2096593644037e2609363085 +[http://xorg.freedesktop.org/releases/individual/lib/xtrans-1.0.4.tar.bz2] +md5=8b36cdf08df12be96615e3d550236626 +sha256=765219fa822edeffb0650e93458e4ebf63c23176e58fce06806fb251fbfe7d8c + [http://xorg.freedesktop.org/releases/X11R7.0/src/lib/xtrans-X11R7.0-1.0.0.tar.bz2] md5=153642136a003871a9093c8103d6ac5a sha256=c9a049b4367318b53cbad02bc7e3c4450778e3237400a515b2a6272405b8b912 -- cgit v1.2.3 From b0eea426509435ed161626a73d37894d475d374c Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sat, 23 Feb 2008 13:36:54 +0000 Subject: conf/checksums.ini: Add glib-2.14.4 to the list --- conf/checksums.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/checksums.ini b/conf/checksums.ini index b1a5460336..596674eca0 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -3306,6 +3306,10 @@ sha256=6f36ca624a12dce03cdea59c9eb900eda49ea2f463b329737eb9f2a8f3ac144d md5=fca5d26c8efea4e6e547c81c801bf67c sha256=bd6767cc7c8d9551df0fb3e6d40706746723f6daa0ecd4a78facffc40f9d8a97 +[http://ftp.gnome.org/pub/GNOME/sources/glib/2.14/glib-2.14.4.tar.bz2] +md5=7ee7874108cbe9ea7fff1f4ab3389ce8 +sha256=10e6ebecc2cbd07f193a5d26b88c3bf2107e32b2a4d024f10f77f59a98d579ff + [http://ftp.gnome.org/pub/gnome/sources/glib/2.2/glib-2.2.3.tar.bz2] md5=aa214a10d873b68ddd67cd9de2ccae55 sha256=af1456e075954c122bda008736437b048d5336d0b426847c627e607eb35e59e5 -- cgit v1.2.3 From 1a870be8951d1763ea287a0fd0ae61907f349bda Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 23 Feb 2008 17:59:19 +0000 Subject: fbset-init: Add init.d script to init fb device using fbset. --- packages/fbset/fbset-init.bb | 19 +++++++++++++++++++ packages/fbset/fbset-init/.mtn2git_empty | 0 packages/fbset/fbset-init/default-fbset | 3 +++ packages/fbset/fbset-init/fbset.sh | 4 ++++ 4 files changed, 26 insertions(+) create mode 100644 packages/fbset/fbset-init.bb create mode 100644 packages/fbset/fbset-init/.mtn2git_empty create mode 100644 packages/fbset/fbset-init/default-fbset create mode 100755 packages/fbset/fbset-init/fbset.sh diff --git a/packages/fbset/fbset-init.bb b/packages/fbset/fbset-init.bb new file mode 100644 index 0000000000..f04691d793 --- /dev/null +++ b/packages/fbset/fbset-init.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "Set framebuffer mode during boot" +PR = "r1" + +SRC_URI = "file://fbset.sh file://default-fbset" + +inherit update-rc.d + +INITSCRIPT_NAME = "fbset.sh" +INITSCRIPT_PARAMS = "start 0 S ." + +do_install() { + install -d ${D}${sysconfdir}/init.d + install -d ${D}${sysconfdir}/default + install -m 0755 ${WORKDIR}/fbset.sh ${D}${sysconfdir}/init.d/ + install -m 0644 ${WORKDIR}/default-fbset ${D}${sysconfdir}/default/fbset +} + +PACKAGE_ARCH = "all" +CONFFILES_${PN} = "${sysconfdir}/default/fbset" diff --git a/packages/fbset/fbset-init/.mtn2git_empty b/packages/fbset/fbset-init/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/fbset/fbset-init/default-fbset b/packages/fbset/fbset-init/default-fbset new file mode 100644 index 0000000000..5c163a7f7c --- /dev/null +++ b/packages/fbset/fbset-init/default-fbset @@ -0,0 +1,3 @@ +# Uncomment and set value below to one of modes from /etc/fb.modes +# or alternatively to "-xres -yres " +#FBSET_MODE="vga" diff --git a/packages/fbset/fbset-init/fbset.sh b/packages/fbset/fbset-init/fbset.sh new file mode 100755 index 0000000000..900a1d4182 --- /dev/null +++ b/packages/fbset/fbset-init/fbset.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +. /etc/default/fbset +[ -n "$FBSET_MODE" ] && fbset -n $FBSET_MODE -- cgit v1.2.3 From ac68d5d71a59efe631087a9b576c95d2722822e7 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 23 Feb 2008 18:01:33 +0000 Subject: psplash svn: Move startup to S 01, freeing S 00 for something doing fbdev init. * Like just added fbset-init. --- packages/psplash/psplash_svn.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/psplash/psplash_svn.bb b/packages/psplash/psplash_svn.bb index 17b459a15f..7e19ce3cbb 100644 --- a/packages/psplash/psplash_svn.bb +++ b/packages/psplash/psplash_svn.bb @@ -3,7 +3,7 @@ HOMEPAGE = "http://projects.o-hand.com/psplash" SECTION = "base" LICENSE = "GPL" PV = "0.0+svnr${SRCREV}" -PR = "r12" +PR = "r13" RDEPENDS = "initscripts" # You can create your own pslash-hand-img.h by doing @@ -36,6 +36,6 @@ do_install_prepend() { } INITSCRIPT_NAME = "psplash" -INITSCRIPT_PARAMS = "start 0 S . stop 20 0 1 6 ." +INITSCRIPT_PARAMS = "start 01 S . stop 20 0 1 6 ." FILES_${PN} += "/mnt/.psplash" -- cgit v1.2.3 From 6ca016b5ae51f6384315e5648915d0e94a48ba97 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sat, 23 Feb 2008 18:07:14 +0000 Subject: sanity: Move variable declarations to sanity.conf to workaround problems with bitbake 1.8.10 --- classes/sanity.bbclass | 9 --------- conf/sanity.conf | 10 ++++++++++ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass index 08b077a1e1..f0ffa5c31a 100644 --- a/classes/sanity.bbclass +++ b/classes/sanity.bbclass @@ -2,15 +2,6 @@ # Sanity check the users setup for common misconfigurations # -# -# SANITY_ABI allows us to notify users when the format of TMPDIR changes in -# an incompatible way. Such changes should usually be detailed in the commit -# that breaks the format and have been previously discussed on the mailing list -# with general agreement from the core team. -# -SANITY_ABI = "0" -SANITY_ABIFILE = "${TMPDIR}/abi_version" - def raise_sanity_error(msg): import bb bb.fatal(""" Openembedded's config sanity checker detected a potential misconfiguration. diff --git a/conf/sanity.conf b/conf/sanity.conf index 0d494f1409..4af4454e2e 100644 --- a/conf/sanity.conf +++ b/conf/sanity.conf @@ -4,5 +4,15 @@ # # Expert users can confirm their sanity with "touch conf/sanity.conf" BB_MIN_VERSION = "1.8.10" + +# +# SANITY_ABI allows us to notify users when the format of TMPDIR changes in +# an incompatible way. Such changes should usually be detailed in the commit +# that breaks the format and have been previously discussed on the mailing list +# with general agreement from the core team. +# +SANITY_ABI = "0" +SANITY_ABIFILE = "${TMPDIR}/abi_version" + INHERIT += "sanity" -- cgit v1.2.3 From bbaf9d820b71fa259dc9c5ca28c059108d8f8203 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sat, 23 Feb 2008 19:17:11 +0000 Subject: sanity.bbclass: Cope with empty abi files generated by previous issues --- classes/sanity.bbclass | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass index f0ffa5c31a..44c74a0354 100644 --- a/classes/sanity.bbclass +++ b/classes/sanity.bbclass @@ -137,7 +137,10 @@ def check_sanity(e): if os.path.exists(abifile): f = file(abifile, "r") abi = f.read().strip() - if (abi != current_abi): + if not abi.isdigit(): + f = file(abifile, "w") + f.write(current_abi) + elif (abi != current_abi): # Code to convert from one ABI to another could go here if possible. messages = messages + "Error, TMPDIR has changed ABI (%s to %s) and you need to either rebuild, revert or adjust it at your own risk.\n" % (abi, current_abi) else: -- cgit v1.2.3 From 8447a7a247485df03adfe336c4e098e29ff777c2 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sat, 23 Feb 2008 19:18:27 +0000 Subject: base.bbclass: Cleanups possible with recent improvements in bitbake syntax --- classes/base.bbclass | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/classes/base.bbclass b/classes/base.bbclass index 3250e0ca43..f38a5b7fbc 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -85,7 +85,7 @@ def base_chk_file(parser, pn, pv, src_uri, localpath, data): def base_dep_prepend(d): - import bb; + import bb # # Ideally this will check a flag so we will operate properly in # the case where host == build == target, for now we don't work in @@ -814,6 +814,20 @@ python read_subpackage_metadata () { bb.data.setVar(key, sdata[key], d) } +# Make sure MACHINE isn't exported +# (breaks binutils at least) +MACHINE[unexport] = "1" + +# Make sure TARGET_ARCH isn't exported +# (breaks Makefiles using implicit rules, e.g. quilt, as GNU make has this +# in them, undocumented) +TARGET_ARCH[unexport] = "1" + +# Make sure DISTRO isn't exported +# (breaks sysvinit at least) +DISTRO[unexport] = "1" + + def base_after_parse(d): import bb, os, exceptions @@ -833,8 +847,6 @@ def base_after_parse(d): if this_machine and not re.match(need_machine, this_machine): raise bb.parse.SkipPackage("incompatible with machine %s" % this_machine) - - pn = bb.data.getVar('PN', d, 1) # OBSOLETE in bitbake 1.7.4 @@ -846,22 +858,6 @@ def base_after_parse(d): if use_nls != None: bb.data.setVar('USE_NLS', use_nls, d) - # Make sure MACHINE isn't exported - # (breaks binutils at least) - bb.data.delVarFlag('MACHINE', 'export', d) - bb.data.setVarFlag('MACHINE', 'unexport', 1, d) - - # Make sure TARGET_ARCH isn't exported - # (breaks Makefiles using implicit rules, e.g. quilt, as GNU make has this - # in them, undocumented) - bb.data.delVarFlag('TARGET_ARCH', 'export', d) - bb.data.setVarFlag('TARGET_ARCH', 'unexport', 1, d) - - # Make sure DISTRO isn't exported - # (breaks sysvinit at least) - bb.data.delVarFlag('DISTRO', 'export', d) - bb.data.setVarFlag('DISTRO', 'unexport', 1, d) - # Git packages should DEPEND on git-native srcuri = bb.data.getVar('SRC_URI', d, 1) if "git://" in srcuri: @@ -891,7 +887,7 @@ def base_after_parse(d): if len(paths) == 0: return - for s in bb.data.getVar('SRC_URI', d, 1).split(): + for s in srcuri.split(): if not s.startswith("file://"): continue local = bb.data.expand(bb.fetch.localpath(s, d), d) -- cgit v1.2.3 From de8b532db542948c06b2226a2df53b7bcbfb1f44 Mon Sep 17 00:00:00 2001 From: Ovidiu Sas Date: Sat, 23 Feb 2008 23:36:34 +0000 Subject: gpsd: promoted for slugos --- packages/meta/slugos-packages.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb index 159f74df5c..b5d05c9203 100644 --- a/packages/meta/slugos-packages.bb +++ b/packages/meta/slugos-packages.bb @@ -94,6 +94,7 @@ SLUGOS_PACKAGES = "\ glib-2.0 \ gnu-config \ gphoto2 \ + gpsd \ grep \ groff \ gtk-doc \ -- cgit v1.2.3 From f48a8a5ec8959fd33b052181d71b620568899f73 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sat, 23 Feb 2008 23:37:01 +0000 Subject: ttf-dejavu: Fix -dbg package RRECOMMENDS since PN as a package doesn't exist --- packages/ttf-fonts/ttf-dejavu_2.23.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ttf-fonts/ttf-dejavu_2.23.bb b/packages/ttf-fonts/ttf-dejavu_2.23.bb index c0655ec5f4..fe291163fc 100644 --- a/packages/ttf-fonts/ttf-dejavu_2.23.bb +++ b/packages/ttf-fonts/ttf-dejavu_2.23.bb @@ -18,6 +18,7 @@ do_install_append () { PACKAGES = "${PN}-dbg ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed \ ttf-dejavu-serif ttf-dejavu-serif-condensed ttf-dejavu-common" +RRECOMMENDS_${PN}-dbg = "" FILES_ttf-dejavu-sans = "${datadir}/fonts/truetype/DejaVuSans.ttf ${datadir}/fonts/truetype/DejaVuSans-*.ttf" FILES_ttf-dejavu-sans-mono = "${datadir}/fonts/truetype/DejaVuSansMono*.ttf" -- cgit v1.2.3 From c4d731645de4e5e8e588f12efd5bfd3c361ebc51 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sat, 23 Feb 2008 23:39:55 +0000 Subject: bitbake.conf: Unconditionally set RDEPENDS for -dev package and RRECOMMENDS for -dbg package. This is important since these packages should always exist. If they don't, depchains functionality falls apart and its impossible to pull in all the dependencies to build X or debug Y. This check also causes a significant performance hit when parsing. --- conf/bitbake.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/bitbake.conf b/conf/bitbake.conf index d0aa47a143..858e411d8c 100644 --- a/conf/bitbake.conf +++ b/conf/bitbake.conf @@ -176,14 +176,14 @@ FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \ ${base_libdir}/*.a ${base_libdir}/*.o ${datadir}/aclocal" SECTION_${PN}-dev = "devel" ALLOW_EMPTY_${PN}-dev = "1" -RDEPENDS_${PN}-dev = "${@['', '${PN} (= ${DEBPV})'][packaged(bb.data.getVar('PN', d, 1), d) == True]}" +RDEPENDS_${PN}-dev = "${PN} (= ${DEBPV})" FILES_${PN}-dbg = "${bindir}/.debug ${sbindir}/.debug ${libexecdir}/.debug ${libdir}/.debug \ ${base_bindir}/.debug ${base_sbindir}/.debug ${base_libdir}/.debug ${libdir}/${PN}/.debug \ ${libdir}/matchbox-panel/.debug" SECTION_${PN}-dbg = "devel" ALLOW_EMPTY_${PN}-dbg = "1" -RRECOMMENDS_${PN}-dbg = "${@['', '${PN} (= ${DEBPV})'][packaged(bb.data.getVar('PN', d, 1), d) == True]}" +RRECOMMENDS_${PN}-dbg = "${PN} (= ${DEBPV})" FILES_${PN}-locale = "${datadir}/locale" -- cgit v1.2.3 From 3388719cb1741964a43d7eb1cb093e3fcb0a8f56 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sat, 23 Feb 2008 23:40:47 +0000 Subject: base.bbclass: Optimise get_subpkgedata_fn() to minimise expand calls --- classes/base.bbclass | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/classes/base.bbclass b/classes/base.bbclass index f38a5b7fbc..2f74104185 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -777,8 +777,10 @@ def get_subpkgedata_fn(pkg, d): import bb, os archs = bb.data.expand("${PACKAGE_ARCHS}", d).split(" ") archs.reverse() + pkgdata = bb.data.expand('${STAGING_DIR}/pkgdata/', d) + targetdir = bb.data.expand('${TARGET_VENDOR}-${TARGET_OS}/runtime/', d) for arch in archs: - fn = bb.data.expand('${STAGING_DIR}/pkgdata/' + arch + '${TARGET_VENDOR}-${TARGET_OS}/runtime/%s' % pkg, d) + fn = pkgdata + arch + targetdir + pkg if os.path.exists(fn): return fn return bb.data.expand('${PKGDATA_DIR}/runtime/%s' % pkg, d) -- cgit v1.2.3 From d6725444ab68574439642166d0cd66a2b6a3254e Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 24 Feb 2008 00:02:02 +0000 Subject: kexec-utils-static: fix PACKAGES --- packages/kexec/kexec-tools-static_1.101.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/kexec/kexec-tools-static_1.101.bb b/packages/kexec/kexec-tools-static_1.101.bb index 5031b5f923..21c212c2db 100644 --- a/packages/kexec/kexec-tools-static_1.101.bb +++ b/packages/kexec/kexec-tools-static_1.101.bb @@ -1,7 +1,7 @@ # the binaries are statical linked against klibc require kexec-tools.inc -PR = "r1" +PR = "r2" DEPENDS = "klibc" SRC_URI += "file://kexec-klibc.patch;patch=1" @@ -16,7 +16,7 @@ export CFLAGS="" export CPPFLAGS="" export LDFLAGS="" -PACKAGES =+ "kexec-klibc kdump-klibc" +PACKAGES =+ "kexec-static kdump-static" FILES_kexec-klibc = "${sbindir}/kexec" FILES_kdump-klibc = "${sbindir}/kdump" -- cgit v1.2.3 From 04ca25a7f9957906c5121005391967de930eb58a Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Sun, 24 Feb 2008 02:23:16 +0000 Subject: ffmpeg: fix 0.4.9-pre1 oebug 1897, fix svn packaging oebug 3850 * gcc4.patch absorbs the original common.patch and adds hacks to satisfy stricter type checking by gcc4 * soname.patch adds libpostproc fix in oebug 1897 comment#1 * drop the obsolete/dup patches in ffmpeg dir * 1st attemp to unify 0.4.9 and svn. * TODO: further unification of packaging and staging is desired once svn recipie settles --- packages/ffmpeg/ffmpeg-0.4.9-pre1/common.patch | 13 --- packages/ffmpeg/ffmpeg-0.4.9-pre1/gcc4.patch | 146 +++++++++++++++++++++++++ packages/ffmpeg/ffmpeg-0.4.9-pre1/soname.patch | 36 +++--- packages/ffmpeg/ffmpeg.inc | 39 +++++++ packages/ffmpeg/ffmpeg/.mtn2git_empty | 0 packages/ffmpeg/ffmpeg/common.patch | 13 --- packages/ffmpeg/ffmpeg/configure.patch | 87 --------------- packages/ffmpeg/ffmpeg/soname.patch | 65 ----------- packages/ffmpeg/ffmpeg_0.4.9-pre1.bb | 107 +++++++----------- packages/ffmpeg/ffmpeg_svn.bb | 60 ++++------ 10 files changed, 273 insertions(+), 293 deletions(-) delete mode 100644 packages/ffmpeg/ffmpeg-0.4.9-pre1/common.patch create mode 100644 packages/ffmpeg/ffmpeg-0.4.9-pre1/gcc4.patch create mode 100644 packages/ffmpeg/ffmpeg.inc delete mode 100644 packages/ffmpeg/ffmpeg/.mtn2git_empty delete mode 100644 packages/ffmpeg/ffmpeg/common.patch delete mode 100644 packages/ffmpeg/ffmpeg/configure.patch delete mode 100644 packages/ffmpeg/ffmpeg/soname.patch diff --git a/packages/ffmpeg/ffmpeg-0.4.9-pre1/common.patch b/packages/ffmpeg/ffmpeg-0.4.9-pre1/common.patch deleted file mode 100644 index 5a1ceaa10d..0000000000 --- a/packages/ffmpeg/ffmpeg-0.4.9-pre1/common.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- ffmpeg-0.4.9-pre1/libavcodec/common.h.orig 2004-12-24 23:49:50.000000000 +0100 -+++ ffmpeg-0.4.9-pre1/libavcodec/common.h 2004-12-24 23:51:37.000000000 +0100 -@@ -1292,10 +1292,6 @@ - #define time time_is_forbidden_due_to_security_issues - #define rand rand_is_forbidden_due_to_state_trashing - #define srand srand_is_forbidden_due_to_state_trashing --#if !(defined(LIBAVFORMAT_BUILD) || defined(_FRAMEHOOK_H)) --#define printf please_use_av_log --#define fprintf please_use_av_log --#endif - - #define CHECKED_ALLOCZ(p, size)\ - {\ diff --git a/packages/ffmpeg/ffmpeg-0.4.9-pre1/gcc4.patch b/packages/ffmpeg/ffmpeg-0.4.9-pre1/gcc4.patch new file mode 100644 index 0000000000..e04fdab3e5 --- /dev/null +++ b/packages/ffmpeg/ffmpeg-0.4.9-pre1/gcc4.patch @@ -0,0 +1,146 @@ +--- ffmpeg-0.4.9-pre1/libavcodec/common.h.orig 2008-02-23 19:42:48.000000000 -0500 ++++ ffmpeg-0.4.9-pre1/libavcodec/common.h 2008-02-23 19:08:09.000000000 -0500 +@@ -64,11 +64,11 @@ + + struct AVOption; + #ifdef HAVE_MMX +-extern const struct AVOption avoptions_common[3 + 5]; ++extern const struct AVOption *avoptions_common[2 + 5]; + #else +-extern const struct AVOption avoptions_common[3]; ++extern const struct AVOption *avoptions_common[2]; + #endif +-extern const struct AVOption avoptions_workaround_bug[11]; ++extern const struct AVOption *avoptions_workaround_bug[10]; + + #endif /* HAVE_AV_CONFIG_H */ + +@@ -1292,10 +1292,6 @@ tend= rdtsc();\ + #define time time_is_forbidden_due_to_security_issues + #define rand rand_is_forbidden_due_to_state_trashing + #define srand srand_is_forbidden_due_to_state_trashing +-#if !(defined(LIBAVFORMAT_BUILD) || defined(_FRAMEHOOK_H)) +-#define printf please_use_av_log +-#define fprintf please_use_av_log +-#endif + + #define CHECKED_ALLOCZ(p, size)\ + {\ +--- ffmpeg-0.4.9-pre1/libavcodec/ac3tab.h.orig 2008-02-23 19:46:06.000000000 -0500 ++++ ffmpeg-0.4.9-pre1/libavcodec/ac3tab.h 2008-02-23 19:08:09.000000000 -0500 +@@ -4,10 +4,10 @@ + */ + + /* possible frequencies */ +-static const uint16_t ac3_freqs[3] = { 48000, 44100, 32000 }; ++const uint16_t ac3_freqs[3] = { 48000, 44100, 32000 }; + + /* possible bitrates */ +-static const uint16_t ac3_bitratetab[19] = { ++const uint16_t ac3_bitratetab[19] = { + 32, 40, 48, 56, 64, 80, 96, 112, 128, + 160, 192, 224, 256, 320, 384, 448, 512, 576, 640 + }; +@@ -15,7 +15,7 @@ static const uint16_t ac3_bitratetab[19] + /* AC3 MDCT window */ + + /* MDCT window */ +-static const int16_t ac3_window[256] = { ++const int16_t ac3_window[256] = { + 4, 7, 12, 16, 21, 28, 34, 42, + 51, 61, 72, 84, 97, 111, 127, 145, + 164, 184, 207, 231, 257, 285, 315, 347, +@@ -144,27 +144,27 @@ static const uint8_t baptab[64]= { + 15, 15, 15, 15, + }; + +-static const uint8_t sdecaytab[4]={ ++const uint8_t sdecaytab[4]={ + 0x0f, 0x11, 0x13, 0x15, + }; + +-static const uint8_t fdecaytab[4]={ ++const uint8_t fdecaytab[4]={ + 0x3f, 0x53, 0x67, 0x7b, + }; + +-static const uint16_t sgaintab[4]= { ++const uint16_t sgaintab[4]= { + 0x540, 0x4d8, 0x478, 0x410, + }; + +-static const uint16_t dbkneetab[4]= { ++const uint16_t dbkneetab[4]= { + 0x000, 0x700, 0x900, 0xb00, + }; + +-static const uint16_t floortab[8]= { ++const uint16_t floortab[8]= { + 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800, + }; + +-static const uint16_t fgaintab[8]= { ++const uint16_t fgaintab[8]= { + 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400, + }; + +--- ffmpeg-0.4.9-pre1/libavcodec/dsputil.h.orig 2008-02-23 19:47:34.000000000 -0500 ++++ ffmpeg-0.4.9-pre1/libavcodec/dsputil.h 2008-02-23 19:08:09.000000000 -0500 +@@ -558,15 +558,15 @@ static int name16(void /*MpegEncContext* + /* XXX: add ISOC specific test to avoid specific BSD testing. */ + /* better than nothing implementation. */ + /* btw, rintf() is existing on fbsd too -- alex */ +-static inline long int lrintf(float x) +-{ +-#ifdef CONFIG_WIN32 +- /* XXX: incorrect, but make it compile */ +- return (int)(x); +-#else +- return (int)(rint(x)); +-#endif +-} ++//static inline long int lrintf(float x) ++//{ ++//#ifdef CONFIG_WIN32 ++// /* XXX: incorrect, but make it compile */ ++// return (int)(x); ++//#else ++// return (int)(rint(x)); ++//#endif ++//} + #else + #ifndef _ISOC9X_SOURCE + #define _ISOC9X_SOURCE +--- ffmpeg-0.4.9-pre1/libavcodec/opts.c.orig 2008-02-23 19:49:11.000000000 -0500 ++++ ffmpeg-0.4.9-pre1/libavcodec/opts.c 2008-02-23 19:08:09.000000000 -0500 +@@ -12,7 +12,7 @@ + + #include "avcodec.h" + +-const AVOption avoptions_common[] = { ++const AVOption *avoptions_common[] = { + AVOPTION_CODEC_FLAG("bit_exact", "use only bit-exact stuff", flags, CODEC_FLAG_BITEXACT, 0), + AVOPTION_CODEC_FLAG("mm_force", "force mm flags", dsp_mask, FF_MM_FORCE, 0), + #ifdef HAVE_MMX +@@ -22,10 +22,10 @@ const AVOption avoptions_common[] = { + AVOPTION_CODEC_FLAG("mm_sse", "mask SSE feature", dsp_mask, FF_MM_SSE, 0), + AVOPTION_CODEC_FLAG("mm_sse2", "mask SSE2 feature", dsp_mask, FF_MM_SSE2, 0), + #endif +- AVOPTION_END() ++// AVOPTION_END() + }; + +-const AVOption avoptions_workaround_bug[] = { ++const AVOption *avoptions_workaround_bug[] = { + AVOPTION_CODEC_FLAG("bug_autodetect", "workaround bug autodetection", workaround_bugs, FF_BUG_AUTODETECT, 1), + AVOPTION_CODEC_FLAG("bug_old_msmpeg4", "workaround old msmpeg4 bug", workaround_bugs, FF_BUG_OLD_MSMPEG4, 0), + AVOPTION_CODEC_FLAG("bug_xvid_ilace", "workaround XviD interlace bug", workaround_bugs, FF_BUG_XVID_ILACE, 0), +@@ -36,7 +36,7 @@ const AVOption avoptions_workaround_bug[ + AVOPTION_CODEC_FLAG("bug_std_qpel", "workaround std qpel bug", workaround_bugs, FF_BUG_STD_QPEL, 0), + AVOPTION_CODEC_FLAG("bug_qpel_chroma2", "workaround qpel chroma2 bug", workaround_bugs, FF_BUG_QPEL_CHROMA2, 0), + AVOPTION_CODEC_FLAG("bug_direct_blocksize", "workaround direct blocksize bug", workaround_bugs, FF_BUG_DIRECT_BLOCKSIZE, 0), +- AVOPTION_END() ++// AVOPTION_END() + }; + + /* avoid compatibility problems by redefining it */ diff --git a/packages/ffmpeg/ffmpeg-0.4.9-pre1/soname.patch b/packages/ffmpeg/ffmpeg-0.4.9-pre1/soname.patch index 48de6f01bf..80bf3937e4 100644 --- a/packages/ffmpeg/ffmpeg-0.4.9-pre1/soname.patch +++ b/packages/ffmpeg/ffmpeg-0.4.9-pre1/soname.patch @@ -1,6 +1,6 @@ ---- ffmpeg-0.4.9-pre1/libavcodec/Makefile.orig 2004-08-25 22:36:39.000000000 +0200 -+++ ffmpeg-0.4.9-pre1/libavcodec/Makefile 2004-08-25 22:37:22.000000000 +0200 -@@ -7,7 +7,7 @@ +--- ffmpeg-0.4.9-pre1/libavcodec/Makefile.orig 2008-02-23 19:34:18.000000000 -0500 ++++ ffmpeg-0.4.9-pre1/libavcodec/Makefile 2008-02-23 19:24:55.000000000 -0500 +@@ -7,7 +7,7 @@ include ../config.mak VPATH=$(SRC_PATH)/libavcodec # NOTE: -I.. is needed to include config.h @@ -9,7 +9,19 @@ OBJS= common.o utils.o mem.o allcodecs.o \ mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o\ -@@ -197,7 +197,7 @@ +@@ -89,9 +89,10 @@ endif + + ifeq ($(CONFIG_PP),yes) + ifeq ($(SHARED_PP),yes) +-EXTRALIBS += -lpostproc ++LIBS += -lpostproc + else + # LIBS += libpostproc/libpostproc.a ... should be fixed ++LIBS += libpostproc/libpostproc.a + OBJS += libpostproc/postprocess.o + endif + endif +@@ -197,7 +198,7 @@ ifeq ($(CONFIG_WIN32),yes) $(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS) -lib /machine:i386 /def:$(@:.dll=.def) else @@ -18,7 +30,7 @@ endif dsputil.o: dsputil.c dsputil.h -@@ -269,8 +269,9 @@ +@@ -269,8 +270,9 @@ ifeq ($(CONFIG_WIN32),yes) install -s -m 755 $(SLIB) "$(prefix)" else install -d $(prefix)/lib @@ -30,10 +42,9 @@ ldconfig || true endif else - ---- ffmpeg-0.4.9-pre1/libavformat/Makefile.orig 2004-08-26 13:45:12.000000000 +0200 -+++ ffmpeg-0.4.9-pre1/libavformat/Makefile 2004-08-26 13:46:00.000000000 +0200 -@@ -6,7 +6,7 @@ +--- ffmpeg-0.4.9-pre1/libavformat/Makefile.orig 2008-02-23 19:37:40.000000000 -0500 ++++ ffmpeg-0.4.9-pre1/libavformat/Makefile 2008-02-23 19:06:56.000000000 -0500 +@@ -6,7 +6,7 @@ include ../config.mak VPATH=$(SRC_PATH)/libavformat @@ -42,7 +53,7 @@ OBJS= utils.o cutils.o os_support.o allformats.o PPOBJS= -@@ -54,6 +54,7 @@ +@@ -54,6 +54,7 @@ endif ifeq ($(CONFIG_AUDIO_BEOS),yes) PPOBJS+= beosaudio.o EXTRALIBS+=-lbe -lmedia @@ -50,7 +61,7 @@ # this should be the default ! EXTRALIBS+=-lavcodec -L../libavcodec endif -@@ -93,7 +94,7 @@ +@@ -93,7 +94,7 @@ ifeq ($(CONFIG_WIN32),yes) $(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $(PPOBJS) $(EXTRALIBS) $(VPATH)/../libavcodec/avcodec.dll -lib /machine:i386 /def:$(@:.dll=.def) else @@ -59,7 +70,7 @@ endif depend: $(SRCS) -@@ -105,8 +106,9 @@ +@@ -105,8 +106,9 @@ ifeq ($(CONFIG_WIN32),yes) install -s -m 755 $(SLIB) "$(prefix)" else install -d $(prefix)/lib @@ -71,4 +82,3 @@ ldconfig || true endif else - diff --git a/packages/ffmpeg/ffmpeg.inc b/packages/ffmpeg/ffmpeg.inc new file mode 100644 index 0000000000..00f1423450 --- /dev/null +++ b/packages/ffmpeg/ffmpeg.inc @@ -0,0 +1,39 @@ +DESCRIPTION = "ffmpeg" +HOMEPAGE = "http://ffmpeg.mplayerhq.hu/" +AUTHOR = "Fabrice Bellard ffmpeg-devel@mplayerhq.hu" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "LGPL" + +DEPENDS = "zlib libvorbis faac liba52 lame" +RSUGGESTS = "mplayer" + +inherit autotools pkgconfig + +TARGET_LDFLAGS_append = " -lm -la52 " + +EXTRA_OECONF = "\ + --enable-pp \ + --enable-shared \ + --enable-pthreads \ + --enable-gpl \ + \ + --disable-audio-beos \ + --disable-v4l \ + --disable-dv1394 \ + --disable-debug \ + --disable-ffserver \ + --disable-ffplay \ + \ + --cross-prefix=${TARGET_PREFIX} \ + \ + --cpu=${PACKAGE_ARCH} \ + \ +" + +# 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:" + +do_configure_prepend() { + export CC="${CC}" +} diff --git a/packages/ffmpeg/ffmpeg/.mtn2git_empty b/packages/ffmpeg/ffmpeg/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/ffmpeg/ffmpeg/common.patch b/packages/ffmpeg/ffmpeg/common.patch deleted file mode 100644 index 233a454a48..0000000000 --- a/packages/ffmpeg/ffmpeg/common.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- ffmpeg/libavcodec/common.h.orig 2005-02-10 15:10:34.000000000 +0100 -+++ ffmpeg/libavcodec/common.h 2005-02-10 15:11:28.000000000 +0100 -@@ -501,10 +501,6 @@ - #define srand srand_is_forbidden_due_to_state_trashing - #define sprintf sprintf_is_forbidden_due_to_security_issues_use_snprintf - #define strcat strcat_is_forbidden_due_to_security_issues_use_pstrcat --#if !(defined(LIBAVFORMAT_BUILD) || defined(_FRAMEHOOK_H)) --#define printf please_use_av_log --#define fprintf please_use_av_log --#endif - - #define CHECKED_ALLOCZ(p, size)\ - {\ diff --git a/packages/ffmpeg/ffmpeg/configure.patch b/packages/ffmpeg/ffmpeg/configure.patch deleted file mode 100644 index ae13b861b0..0000000000 --- a/packages/ffmpeg/ffmpeg/configure.patch +++ /dev/null @@ -1,87 +0,0 @@ ---- ./configure~configure.patch 2004-07-06 03:36:16.000000000 +0930 -+++ ./configure 2004-09-27 00:07:23.000000000 +0930 -@@ -88,7 +88,7 @@ - mandir="" - bindir="" - cross_prefix="" --cc="gcc" -+cc="$CC" - ar="ar" - ranlib="ranlib" - make="make" -@@ -104,7 +104,7 @@ - cpu="x86" - ;; - # armv4l is a subset of armv5tel -- armv4l|armv5tel) -+ armv4l|armv5tel|arm|xscale) - cpu="armv4l" - ;; - alpha) -@@ -434,6 +434,37 @@ - esac - done - -+case "$cpu" in -+ i386|i486|i586|i686|i86pc|BePC) -+ cpu="x86" -+ ;; -+ # armv4l is a subset of armv5tel -+ armv4l|armv5tel|arm|xscale) -+ cpu="armv4l" -+ ;; -+ alpha) -+ cpu="alpha" -+ ;; -+ "Power Macintosh"|ppc) -+ cpu="powerpc" -+ ;; -+ mips) -+ cpu="mips" -+ ;; -+ sun4u|sparc64) -+ cpu="sparc64" -+ ;; -+ sparc) -+ cpu="sparc" -+ ;; -+ sh4) -+ cpu="sh4" -+ ;; -+ *) -+ cpu="unknown" -+ ;; -+esac -+ - if test "$gpl" != "yes"; then - if test "$pp" != "no" -o "$shared_pp" != "no"; then - echo "The Postprocessing code is under GPL and --enable-gpl is not specified" -@@ -662,7 +693,6 @@ - bindir="$prefix" - fi - --cc="${cross_prefix}${cc}" - ar="${cross_prefix}${ar}" - ranlib="${cross_prefix}${ranlib}" - strip="${cross_prefix}${strip}" -@@ -753,21 +783,6 @@ - fi - - if test "$zlib" = "yes"; then --# check for zlib - mmu_man --cat > $TMPC << EOF --#include --int main ( void ) { --if (zlibVersion() != ZLIB_VERSION) -- puts("zlib version differs !!!"); -- return 1; --return 0; --} --EOF --$cc $CFLAGS -o $TMPE $TMPC -lz 2> /dev/null || zlib="no" --# $TMPE 2> /dev/null > /dev/null || zlib="no" --# XXX: more tests needed - runtime test --fi --if test "$zlib" = "yes"; then - extralibs="$extralibs -lz" - fi diff --git a/packages/ffmpeg/ffmpeg/soname.patch b/packages/ffmpeg/ffmpeg/soname.patch deleted file mode 100644 index 6d01f922af..0000000000 --- a/packages/ffmpeg/ffmpeg/soname.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- ffmpeg/libavcodec/Makefile.orig 2005-02-10 18:11:57.000000000 +0100 -+++ ffmpeg/libavcodec/Makefile 2005-02-10 18:15:36.000000000 +0100 -@@ -7,7 +7,7 @@ - VPATH=$(SRC_PATH)/libavcodec - - # NOTE: -I.. is needed to include config.h --CFLAGS=$(OPTFLAGS) -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -+CFLAGS=$(OPTFLAGS) -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -fPIC -DPIC - - OBJS= bitstream.o utils.o mem.o allcodecs.o \ - mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o\ -@@ -222,7 +222,7 @@ - $(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS) - -lib /machine:i386 /def:$(@:.dll=.def) - else -- $(CC) $(SHFLAGS) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS) $(LDFLAGS) -+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS) $(LDFLAGS) -Wl,-soname -Wl,libavcodec.so.0 - endif - - dsputil.o: dsputil.c dsputil.h -@@ -294,8 +294,9 @@ - install $(INSTALLSTRIP) -m 755 $(SLIB) "$(prefix)" - else - install -d $(prefix)/lib -- install $(INSTALLSTRIP) -m 755 $(SLIB) $(prefix)/lib/libavcodec-$(VERSION).so -- ln -sf libavcodec-$(VERSION).so $(prefix)/lib/libavcodec.so -+ install -m 755 $(SLIB) $(prefix)/lib/libavcodec.so.0.4.9 -+ ln -sf libavcodec.so.0.4.9 $(prefix)/lib/libavcodec.so.0 -+ ln -sf libavcodec.so.0.4.9 $(prefix)/lib/libavcodec.so - ldconfig || true - endif - ifeq ($(CONFIG_PP),yes) - ---- ffmpeg/libavformat/Makefile.orig 2005-02-10 18:15:50.000000000 +0100 -+++ ffmpeg/libavformat/Makefile 2005-02-10 18:18:23.000000000 +0100 -@@ -6,7 +6,7 @@ - - VPATH=$(SRC_PATH)/libavformat - --CFLAGS=$(OPTFLAGS) -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavcodec -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -+CFLAGS=$(OPTFLAGS) -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavcodec -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -fPIC -DPIC - - OBJS= utils.o cutils.o os_support.o allformats.o - PPOBJS= -@@ -104,7 +104,7 @@ - $(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $(PPOBJS) $(EXTRALIBS) $(VPATH)/../libavcodec/avcodec.dll - -lib /machine:i386 /def:$(@:.dll=.def) - else -- $(CC) $(SHFLAGS) -o $@ $(OBJS) $(PPOBJS) $(EXTRALIBS) -+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(PPOBJS) $(EXTRALIBS) -Wl,-soname -Wl,libavformat.so.0 - endif - - depend: $(SRCS) -@@ -116,8 +116,9 @@ - install $(INSTALLSTRIP) -m 755 $(SLIB) "$(prefix)" - else - install -d $(prefix)/lib -- install $(INSTALLSTRIP) -m 755 $(SLIB) $(prefix)/lib/libavformat-$(VERSION).so -- ln -sf libavformat-$(VERSION).so $(prefix)/lib/libavformat.so -+ install -m 755 $(SLIB) $(prefix)/lib/libavformat.so.0.4.9 -+ ln -sf libavformat.so.0.4.9 $(prefix)/lib/libavformat.so.0 -+ ln -sf libavformat.so.0.4.9 $(prefix)/lib/libavformat.so - ldconfig || true - endif - else diff --git a/packages/ffmpeg/ffmpeg_0.4.9-pre1.bb b/packages/ffmpeg/ffmpeg_0.4.9-pre1.bb index 12a73cceb6..defc37daa0 100644 --- a/packages/ffmpeg/ffmpeg_0.4.9-pre1.bb +++ b/packages/ffmpeg/ffmpeg_0.4.9-pre1.bb @@ -1,85 +1,60 @@ +require ffmpeg.inc -DESCRIPTION = "ffmpeg" -SECTION = "libs" -PRIORITY = "optional" -DEPENDS = "zlib libvorbis faad2 faac liba52 lame mplayer" -LICENSE = "LGPL" -PR = "r1" +DEPENDS += "faad2" - -inherit autotools +PR = "r2" SRC_URI = "${SOURCEFORGE_MIRROR}/ffmpeg/ffmpeg-${PV}.tar.gz \ file://configure.patch;patch=0 \ - file://common.patch;patch=1 \ + file://gcc4.patch;patch=1 \ file://soname.patch;patch=1 \ " -TARGET_LDFLAGS_append = " -lm -la52 " - -EXTRA_OECONF=" \ - --enable-mp3lame \ - --enable-vorbis \ - --enable-faad \ - --enable-faadbin \ - --enable-faac \ - --enable-a52 \ - --enable-a52bin \ - --enable-pp \ - --enable-shared-pp \ - --enable-shared \ - --disable-amr_nb \ - --enable-amr_nb-fixed \ - --disable-amr_wb \ - --enable-pthreads \ - --enable-gpl \ - --enable-zlib \ - \ - --disable-audio-beos \ - --disable-v4l \ - --disable-dv1394 \ - --disable-debug \ - --disable-ffserver \ - --disable-ffplay \ - \ - --cross-prefix=${TARGET_PREFIX} \ - --extra-cflags=\$(TARGET_CFLAGS) \ - --extra-ldflags=\$(TARGET_LDFLAGS) \ - --extra-libs=\$(TARGET_LDFLAGS) \ - \ - --cpu=${PACKAGE_ARCH} \ - --prefix=${D}${prefix} \ - --mandir=${D}${prefix}/share/man \ +EXTRA_OECONF += " \ + --enable-mp3lame \ + --enable-vorbis \ + --enable-faad \ + --enable-faadbin \ + --enable-faac \ + --enable-a52 \ + --enable-a52bin \ + --enable-shared-pp \ + --disable-amr_nb \ + --enable-amr_nb-fixed \ + --disable-amr_wb \ + --enable-zlib \ + \ + \ + --extra-cflags=\$(TARGET_CFLAGS) \ + --extra-ldflags=\$(TARGET_LDFLAGS) \ + --extra-libs=\$(TARGET_LDFLAGS) \ + \ + --prefix=${D}${prefix} \ + --mandir=${D}${prefix}/share/man \ " PACKAGES += "libavcodec libavcodec-dev libavformat libavformat-dev" -FILES_${PN} = "${bindir}" + +FILES_${PN} += "${libdir}/vhook" FILES_${PN}-dev = "${includedir}" +FILES_${PN}-dbg += "${libdir}/vhook/.debug" + FILES_libavcodec = "${libdir}/libavcodec*.so.*" FILES_libavcodec-dev = "${libdir}/libavcodec*.so ${libdir}/libavcodec*.la ${libdir}/libavcodec*.a" FILES_libavformat = "${libdir}/libavformat*.so.*" FILES_libavformat-dev = "${libdir}/libavformat*.so ${libdir}/libavformat*.la ${libdir}/libavformat*.a" -# 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:" - -# --enable-shared-pp \ - -do_configure_prepend() { - export CC="${CC}" -} - do_stage() { - oe_libinstall -a -so -C libavcodec libavcodec ${STAGING_LIBDIR} - oe_libinstall -a -so -C libavformat libavformat ${STAGING_LIBDIR} - - install -d ${STAGING_INCDIR}/ffmpeg - install -m 0644 ${S}/libavcodec/avcodec.h ${STAGING_INCDIR}/ffmpeg/avcodec.h - install -m 0644 ${S}/libavcodec/common.h ${STAGING_INCDIR}/ffmpeg/common.h - install -m 0644 ${S}/libavcodec/rational.h ${STAGING_INCDIR}/ffmpeg/rational.h - install -m 0644 ${S}/libavformat/avformat.h ${STAGING_INCDIR}/ffmpeg/avformat.h - install -m 0644 ${S}/libavformat/avio.h ${STAGING_INCDIR}/ffmpeg/avio.h - install -m 0644 ${S}/libavformat/rtp.h ${STAGING_INCDIR}/ffmpeg/rtp.h - install -m 0644 ${S}/libavformat/rtsp.h ${STAGING_INCDIR}/ffmpeg/rtsp.h - install -m 0644 ${S}/libavformat/rtspcodes.h ${STAGING_INCDIR}/ffmpeg/rtspcodes.h + oe_libinstall -a -so -C libavcodec libavcodec ${STAGING_LIBDIR} + oe_libinstall -a -so -C libavformat libavformat ${STAGING_LIBDIR} + + install -d ${STAGING_INCDIR}/ffmpeg + install -m 0644 ${S}/libavcodec/avcodec.h ${STAGING_INCDIR}/ffmpeg/avcodec.h + install -m 0644 ${S}/libavcodec/common.h ${STAGING_INCDIR}/ffmpeg/common.h + install -m 0644 ${S}/libavcodec/rational.h ${STAGING_INCDIR}/ffmpeg/rational.h + install -m 0644 ${S}/libavformat/avformat.h ${STAGING_INCDIR}/ffmpeg/avformat.h + install -m 0644 ${S}/libavformat/avio.h ${STAGING_INCDIR}/ffmpeg/avio.h + install -m 0644 ${S}/libavformat/rtp.h ${STAGING_INCDIR}/ffmpeg/rtp.h + install -m 0644 ${S}/libavformat/rtsp.h ${STAGING_INCDIR}/ffmpeg/rtsp.h + install -m 0644 ${S}/libavformat/rtspcodes.h ${STAGING_INCDIR}/ffmpeg/rtspcodes.h } diff --git a/packages/ffmpeg/ffmpeg_svn.bb b/packages/ffmpeg/ffmpeg_svn.bb index 5276a8fef6..5742d26f5a 100644 --- a/packages/ffmpeg/ffmpeg_svn.bb +++ b/packages/ffmpeg/ffmpeg_svn.bb @@ -1,10 +1,9 @@ -DESCRIPTION = "ffmpeg" -SECTION = "libs" -PRIORITY = "optional" -LICENSE = "GPL" -DEPENDS = "libogg zlib libvorbis faac liba52 lame" +require ffmpeg.inc + +DEPENDS += "libogg" + PV = "0.4.9+svnr${SRCREV}" -PR = "r1" +PR = "r2" DEFAULT_PREFERENCE = "-1" @@ -12,45 +11,22 @@ SRC_URI = "svn://svn.mplayerhq.hu/ffmpeg/;module=trunk" S = "${WORKDIR}/trunk" -inherit autotools pkgconfig - -TARGET_LDFLAGS_append = " -lm -la52 " - -EXTRA_OECONF = " \ - --enable-libmp3lame \ +EXTRA_OECONF += " \ + --enable-libmp3lame \ --enable-libvorbis \ --disable-libfaad \ --enable-liba52 \ --enable-liba52bin \ --enable-libogg \ - --enable-pp \ - --enable-shared \ - --enable-pthreads \ --enable-gpl \ \ - --disable-audio-beos \ - --disable-v4l \ - --disable-dv1394 \ - --disable-debug \ - --disable-ffserver \ - --disable-ffplay \ - --disable-strip \ + --disable-strip \ \ - --cross-prefix=${TARGET_PREFIX} \ \ --cpu=${PACKAGE_ARCH} \ - --arch=${PACKAGE_ARCH} \ + --arch=${PACKAGE_ARCH} \ " - -# 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:" - -do_configure_prepend() { - export CC="${CC}" -} - oe_runconf () { # make ffmpeg detect arm targets that don't end in 'l' sed -i -e s:'armv\[4567\]\*l':'armv\[4567\]\*':g ${S}/configure @@ -70,6 +46,7 @@ oe_runconf () { do_stage() { oe_libinstall -a -so -C libavcodec libavcodec ${STAGING_LIBDIR} + oe_libinstall -a -so -C libavdevice libavdevice ${STAGING_LIBDIR} oe_libinstall -a -so -C libavformat libavformat ${STAGING_LIBDIR} oe_libinstall -a -so -C libavutil libavutil ${STAGING_LIBDIR} oe_libinstall -a -so -C libpostproc libpostproc ${STAGING_LIBDIR} @@ -77,7 +54,8 @@ do_stage() { install -d ${STAGING_INCDIR}/ffmpeg install -m 0644 ${S}/libavcodec/avcodec.h \ ${STAGING_INCDIR}/ffmpeg/avcodec.h - + install -m 0644 ${S}/libavdevice/avdevice.h \ + ${STAGING_INCDIR}/ffmpeg/avdevice.h install -m 0644 ${S}/libavformat/avformat.h \ ${STAGING_INCDIR}/ffmpeg/avformat.h install -m 0644 ${S}/libavformat/avio.h \ @@ -116,26 +94,36 @@ do_stage() { } PACKAGES += "libavcodec libavcodec-dev \ + libavdevice libavdevice-dev \ libavformat libavformat-dev \ libavutil libavutil-dev \ libpostproc libpostproc-dev" -FILES_${PN} = "${bindir}" -FILES_${PN}-dev = "${includedir}" +FILES_${PN} = "${bindir} ${libdir}/vhook" +FILES_${PN}-dev += "${bindir} ${libdir}/pkgconfig/libswscale.pc" FILES_${PN}-doc = "${mandir}" FILES_libavcodec = "${libdir}/libavcodec*.so.*" FILES_libavcodec-dev = "${libdir}/libavcodec*.so \ + ${libdir}/pkgconfig/libavcodec.pc \ ${libdir}/libavcodec*.la ${libdir}/libavcodec*.a" +FILES_libavdevice = "${libdir}/libavdevice*.so.*" +FILES_libavdevice-dev = "${libdir}/libavdevice*.so \ + ${libdir}/pkgconfig/libavdevice.pc \ + ${libdir}/libavdevice*.la ${libdir}/libavdevice*.a" + FILES_libavformat = "${libdir}/libavformat*.so.*" FILES_libavformat-dev = "${libdir}/libavformat*.so \ + ${libdir}/pkgconfig/libavformat.pc \ ${libdir}/libavformat*.la ${libdir}/libavformat*.a" FILES_libavutil = "${libdir}/libavutil*.so.*" FILES_libavutil-dev = "${libdir}/libavutil*.so \ + ${libdir}/pkgconfig/libavutil.pc \ ${libdir}/libavutil*.la ${libdir}/libavutil*.a" FILES_libpostproc = "${libdir}/libpostproc*.so.*" FILES_libpostproc-dev = "${libdir}/libpostproc*.so \ + ${libdir}/pkgconfig/libpostproc.pc \ ${libdir}/libpostproc*.la ${libdir}/libpostproc*.a" -- cgit v1.2.3 From dce025ac6c9ed5041af6deea962fa80de120897e Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Sun, 24 Feb 2008 04:52:13 +0000 Subject: sane-srcrev for openmoko linux kernel bumped to 4102 in order to fix the SD card problem on the gta01. Tested more thoroughly this time. --- 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 34c0717543..1c6d81023a 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -52,7 +52,7 @@ SRCREV_pn-lightmediascanner ?= "68" SRCREV_pn-linux-bfin ?= "3758" SRCREV_pn-linux-hackndev-2.6 ?= "1308" SRCREV_pn-linux-ixp4xx ?= "1039" -SRCREV_pn-linux-openmoko ?= "4079" +SRCREV_pn-linux-openmoko ?= "4102" SRCREV_pn-llvm-gcc4 ?= "374" SRCREV_pn-llvm-gcc4-cross ?= "374" SRCREV_pn-maemo-mapper ?= "118" -- cgit v1.2.3 From f7d9bfb1a8285e46b6156a8cc7cced5d00a308d1 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Sun, 24 Feb 2008 06:50:23 +0000 Subject: libgsm: fix staging following debian style * make a symlink from ${INCLUDEDIR}/gsm/gsm.h to ${INCLUDEDIR}/gsm.h * replace tab with space --- packages/libgsm/libgsm_1.0.10.bb | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/libgsm/libgsm_1.0.10.bb b/packages/libgsm/libgsm_1.0.10.bb index 0a86bd0bb4..93d042ed36 100644 --- a/packages/libgsm/libgsm_1.0.10.bb +++ b/packages/libgsm/libgsm_1.0.10.bb @@ -3,10 +3,13 @@ SECTION = "libs" PRIORITY = "optional" #DEPENDS = "" LICENSE = "libgsm" + +PR = "r1" + inherit pkgconfig gpe SRC_URI = "http://www.netsw.org/audio/convert/gsm-${PV}.tar.gz \ - file://${FILESDIR}/libgsm_patch;patch=1;pnum=0" + file://${FILESDIR}/libgsm_patch;patch=1;pnum=0" S = "${WORKDIR}/gsm-1.0-pl10/" @@ -14,13 +17,14 @@ headers = "gsm.h" do_stage () { oe_libinstall -a -C lib libgsm ${STAGING_LIBDIR} - mkdir -p ${STAGING_INCDIR}/gsm - for h in ${headers}; do - install -m 0644 ${S}/inc/$h ${STAGING_INCDIR}/gsm/$h - done + mkdir -p ${STAGING_INCDIR}/gsm + for h in ${headers}; do + install -m 0644 ${S}/inc/$h ${STAGING_INCDIR}/gsm/$h + done + ln -s ${STAGING_INCDIR}/gsm/gsm.h ${STAGING_INCDIR}/gsm.h } #do_install () { -# gpe_do_install -# oe_runmake PREFIX=${prefix} DESTDIR=${D} install-devel +# gpe_do_install +# oe_runmake PREFIX=${prefix} DESTDIR=${D} install-devel #} -- cgit v1.2.3 From d9a1af61ed037f1d5847bbaca10000b248937ce1 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Sun, 24 Feb 2008 11:14:19 +0000 Subject: ffmpeg: make svn buildable, fix configure options for 0.4.9-pre1, unify, clean up * fix svn using SRCDATE * reformat EXTRA_OECONF to make the order of the options follow ./configure --help * NOTE: --cpu(0.4.9-pre1) equals --arch(svn); while --tune(0.4.9-pre1) equals --cpu(svn) * NOTE: oe uses --march and --mtune, so the above optimization by ffmpeg (--mcpu) is not really needed * NOTE: but we try to make --cpu(0.4.9-pre1) or --arch(svn) as close to $TARGET_ARCH as possible * checked --march and --mtune and $TARGET_CFLAGS are used correctly * remove unnecessary FLAGS, configure options, oe_runconf(), etc in either svn or pre1 * unify svn and 0.4.9-pre1, however not much can be done for packaging and staging * QA: add LEAD_SONAME, fix DESCRIPTION, HOME, AUTHOR --- packages/ffmpeg/ffmpeg.inc | 26 +++--- packages/ffmpeg/ffmpeg_0.4.9-pre1.bb | 64 +++++++------- packages/ffmpeg/ffmpeg_svn.bb | 164 +++++++++++++++-------------------- 3 files changed, 113 insertions(+), 141 deletions(-) diff --git a/packages/ffmpeg/ffmpeg.inc b/packages/ffmpeg/ffmpeg.inc index 00f1423450..aab2c62fa9 100644 --- a/packages/ffmpeg/ffmpeg.inc +++ b/packages/ffmpeg/ffmpeg.inc @@ -1,39 +1,35 @@ -DESCRIPTION = "ffmpeg" +DESCRIPTION = "FFmpeg is a complete solution to record, convert and stream audio and video" HOMEPAGE = "http://ffmpeg.mplayerhq.hu/" AUTHOR = "Fabrice Bellard ffmpeg-devel@mplayerhq.hu" SECTION = "libs" PRIORITY = "optional" LICENSE = "LGPL" -DEPENDS = "zlib libvorbis faac liba52 lame" +DEPENDS = "zlib libogg libvorbis faac faad2 liba52 lame" RSUGGESTS = "mplayer" inherit autotools pkgconfig -TARGET_LDFLAGS_append = " -lm -la52 " +LEAD_SONAME = "libavcodec.so" EXTRA_OECONF = "\ + \ --enable-pp \ --enable-shared \ --enable-pthreads \ --enable-gpl \ \ - --disable-audio-beos \ - --disable-v4l \ - --disable-dv1394 \ + --cross-prefix=${TARGET_PREFIX} \ --disable-debug \ --disable-ffserver \ --disable-ffplay \ \ - --cross-prefix=${TARGET_PREFIX} \ - \ - --cpu=${PACKAGE_ARCH} \ - \ " -# 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:" +PACKAGES += "${PN}-vhook-dbg ${PN}-vhook" + +FILES_${PN} = "${bindir}" +FILES_${PN}-dev = "${includedir}/${PN}" -do_configure_prepend() { - export CC="${CC}" -} +FILES_${PN}-vhook = "${libdir}/vhook" +FILES_${PN}-vhook-dbg += "${libdir}/vhook/.debug" diff --git a/packages/ffmpeg/ffmpeg_0.4.9-pre1.bb b/packages/ffmpeg/ffmpeg_0.4.9-pre1.bb index defc37daa0..6df6d89ca0 100644 --- a/packages/ffmpeg/ffmpeg_0.4.9-pre1.bb +++ b/packages/ffmpeg/ffmpeg_0.4.9-pre1.bb @@ -1,16 +1,18 @@ require ffmpeg.inc -DEPENDS += "faad2" - -PR = "r2" +PR = "r3" SRC_URI = "${SOURCEFORGE_MIRROR}/ffmpeg/ffmpeg-${PV}.tar.gz \ - file://configure.patch;patch=0 \ - file://gcc4.patch;patch=1 \ - file://soname.patch;patch=1 \ - " + file://configure.patch;patch=0 \ + file://gcc4.patch;patch=1 \ + file://soname.patch;patch=1 \ + " EXTRA_OECONF += " \ + \ + --prefix=${D}${prefix} \ + --mandir=${D}${prefix}/share/man \ + \ --enable-mp3lame \ --enable-vorbis \ --enable-faad \ @@ -22,39 +24,37 @@ EXTRA_OECONF += " \ --disable-amr_nb \ --enable-amr_nb-fixed \ --disable-amr_wb \ - --enable-zlib \ \ + --cpu=${TARGET_ARCH} \ + --tune=${PACKAGE_ARCH} \ + --extra-ldflags="-la52" \ \ - --extra-cflags=\$(TARGET_CFLAGS) \ - --extra-ldflags=\$(TARGET_LDFLAGS) \ - --extra-libs=\$(TARGET_LDFLAGS) \ - \ - --prefix=${D}${prefix} \ - --mandir=${D}${prefix}/share/man \ + --disable-audio-beos \ + --disable-v4l \ + --disable-dv1394 \ " -PACKAGES += "libavcodec libavcodec-dev libavformat libavformat-dev" - -FILES_${PN} += "${libdir}/vhook" -FILES_${PN}-dev = "${includedir}" -FILES_${PN}-dbg += "${libdir}/vhook/.debug" - -FILES_libavcodec = "${libdir}/libavcodec*.so.*" -FILES_libavcodec-dev = "${libdir}/libavcodec*.so ${libdir}/libavcodec*.la ${libdir}/libavcodec*.a" -FILES_libavformat = "${libdir}/libavformat*.so.*" -FILES_libavformat-dev = "${libdir}/libavformat*.so ${libdir}/libavformat*.la ${libdir}/libavformat*.a" - do_stage() { - oe_libinstall -a -so -C libavcodec libavcodec ${STAGING_LIBDIR} + oe_libinstall -a -so -C libavcodec libavcodec ${STAGING_LIBDIR} oe_libinstall -a -so -C libavformat libavformat ${STAGING_LIBDIR} install -d ${STAGING_INCDIR}/ffmpeg - install -m 0644 ${S}/libavcodec/avcodec.h ${STAGING_INCDIR}/ffmpeg/avcodec.h - install -m 0644 ${S}/libavcodec/common.h ${STAGING_INCDIR}/ffmpeg/common.h + + install -m 0644 ${S}/libavcodec/avcodec.h ${STAGING_INCDIR}/ffmpeg/avcodec.h + install -m 0644 ${S}/libavcodec/common.h ${STAGING_INCDIR}/ffmpeg/common.h install -m 0644 ${S}/libavcodec/rational.h ${STAGING_INCDIR}/ffmpeg/rational.h - install -m 0644 ${S}/libavformat/avformat.h ${STAGING_INCDIR}/ffmpeg/avformat.h - install -m 0644 ${S}/libavformat/avio.h ${STAGING_INCDIR}/ffmpeg/avio.h - install -m 0644 ${S}/libavformat/rtp.h ${STAGING_INCDIR}/ffmpeg/rtp.h - install -m 0644 ${S}/libavformat/rtsp.h ${STAGING_INCDIR}/ffmpeg/rtsp.h + + install -m 0644 ${S}/libavformat/avformat.h ${STAGING_INCDIR}/ffmpeg/avformat.h + install -m 0644 ${S}/libavformat/avio.h ${STAGING_INCDIR}/ffmpeg/avio.h + install -m 0644 ${S}/libavformat/rtp.h ${STAGING_INCDIR}/ffmpeg/rtp.h + install -m 0644 ${S}/libavformat/rtsp.h ${STAGING_INCDIR}/ffmpeg/rtsp.h install -m 0644 ${S}/libavformat/rtspcodes.h ${STAGING_INCDIR}/ffmpeg/rtspcodes.h } + +PACKAGES += "libavcodec libavcodec-dev \ + libavformat libavformat-dev" + +FILES_libavcodec = "${libdir}/libavcodec*.so.*" +FILES_libavcodec-dev = "${libdir}/libavcodec*.so" +FILES_libavformat = "${libdir}/libavformat*.so.*" +FILES_libavformat-dev = "${libdir}/libavformat*.so" diff --git a/packages/ffmpeg/ffmpeg_svn.bb b/packages/ffmpeg/ffmpeg_svn.bb index 5742d26f5a..83c40f8b3f 100644 --- a/packages/ffmpeg/ffmpeg_svn.bb +++ b/packages/ffmpeg/ffmpeg_svn.bb @@ -1,9 +1,9 @@ require ffmpeg.inc -DEPENDS += "libogg" +DEPENDS += "libgsm" -PV = "0.4.9+svnr${SRCREV}" -PR = "r2" +PV = "0.4.9+svn${SRCDATE}" +PR = "r3" DEFAULT_PREFERENCE = "-1" @@ -12,118 +12,94 @@ SRC_URI = "svn://svn.mplayerhq.hu/ffmpeg/;module=trunk" S = "${WORKDIR}/trunk" EXTRA_OECONF += " \ - --enable-libmp3lame \ - --enable-libvorbis \ - --disable-libfaad \ - --enable-liba52 \ - --enable-liba52bin \ - --enable-libogg \ - --enable-gpl \ + --prefix=/usr \ \ - --disable-strip \ + --enable-nonfree \ + --enable-swscaler \ + --enable-x11grab \ \ + --enable-liba52 \ + --enable-liba52bin \ + --enable-libfaac \ + --enable-libfaad \ + --enable-libfaadbin \ + --enable-libgsm \ + --enable-libmp3lame \ + --enable-libvorbis \ \ - --cpu=${PACKAGE_ARCH} \ - --arch=${PACKAGE_ARCH} \ + --arch=${TARGET_ARCH} \ + --cross-compile \ + --cc="gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \ + --extra-cflags="${TARGET_CFLAGS}" \ + --extra-ldflags="${TARGET_LDFLAGS}" \ + --enable-hardcoded-tables \ " -oe_runconf () { - # make ffmpeg detect arm targets that don't end in 'l' - sed -i -e s:'armv\[4567\]\*l':'armv\[4567\]\*':g ${S}/configure - if [ -x ${S}/configure ] ; then - cfgcmd="${S}/configure \ - --prefix=${prefix} \ - --mandir=${mandir} \ - ${EXTRA_OECONF} \ - $@" - oenote "Running $cfgcmd..." - $cfgcmd || oefatal "oe_runconf failed" - else - oefatal "no configure script found" - fi - +do_configure() { + ${S}/configure ${EXTRA_OECONF} } do_stage() { - oe_libinstall -a -so -C libavcodec libavcodec ${STAGING_LIBDIR} - oe_libinstall -a -so -C libavdevice libavdevice ${STAGING_LIBDIR} - oe_libinstall -a -so -C libavformat libavformat ${STAGING_LIBDIR} - oe_libinstall -a -so -C libavutil libavutil ${STAGING_LIBDIR} - oe_libinstall -a -so -C libpostproc libpostproc ${STAGING_LIBDIR} + for lib in libavcodec libavdevice libavformat \ + libavutil libpostproc libswscale + do + oe_libinstall -a -so -C $lib $lib ${STAGING_LIBDIR} + done install -d ${STAGING_INCDIR}/ffmpeg - install -m 0644 ${S}/libavcodec/avcodec.h \ - ${STAGING_INCDIR}/ffmpeg/avcodec.h - install -m 0644 ${S}/libavdevice/avdevice.h \ - ${STAGING_INCDIR}/ffmpeg/avdevice.h - install -m 0644 ${S}/libavformat/avformat.h \ - ${STAGING_INCDIR}/ffmpeg/avformat.h - install -m 0644 ${S}/libavformat/avio.h \ - ${STAGING_INCDIR}/ffmpeg/avio.h - install -m 0644 ${S}/libavformat/rtp.h \ - ${STAGING_INCDIR}/ffmpeg/rtp.h - install -m 0644 ${S}/libavformat/rtsp.h \ - ${STAGING_INCDIR}/ffmpeg/rtsp.h - install -m 0644 ${S}/libavformat/rtspcodes.h \ - ${STAGING_INCDIR}/ffmpeg/rtspcodes.h - - install -m 0644 ${S}/libavutil/avutil.h \ - ${STAGING_INCDIR}/ffmpeg/avutil.h - install -m 0644 ${S}/libavutil/bswap.h \ - ${STAGING_INCDIR}/ffmpeg/bswap.h - install -m 0644 ${S}/libavutil/common.h \ - ${STAGING_INCDIR}/ffmpeg/common.h - install -m 0644 ${S}/libavutil/crc.h \ - ${STAGING_INCDIR}/ffmpeg/crc.h - install -m 0644 ${S}/libavutil/integer.h \ - ${STAGING_INCDIR}/ffmpeg/integer.h - install -m 0644 ${S}/libavutil/intfloat_readwrite.h \ - ${STAGING_INCDIR}/ffmpeg/intfloat_readwrite.h - install -m 0644 ${S}/libavutil/mathematics.h \ - ${STAGING_INCDIR}/ffmpeg/mathematics.h - install -m 0644 ${S}/libavutil/rational.h \ - ${STAGING_INCDIR}/ffmpeg/rational.h - install -m 0644 ${S}/libavutil/mem.h \ - ${STAGING_INCDIR}/ffmpeg/mem.h - install -m 0644 ${S}/libavutil/log.h \ - ${STAGING_INCDIR}/ffmpeg/log.h + + 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}/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 + 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 -m 0644 ${S}/libpostproc/postprocess.h \ - ${STAGING_INCDIR}/libpostproc/postprocess.h + install -m 0644 ${S}/libpostproc/postprocess.h ${STAGING_INCDIR}/libpostproc/postprocess.h } -PACKAGES += "libavcodec libavcodec-dev \ - libavdevice libavdevice-dev \ - libavformat libavformat-dev \ - libavutil libavutil-dev \ - libpostproc libpostproc-dev" - -FILES_${PN} = "${bindir} ${libdir}/vhook" -FILES_${PN}-dev += "${bindir} ${libdir}/pkgconfig/libswscale.pc" -FILES_${PN}-doc = "${mandir}" +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_libavcodec = "${libdir}/libavcodec*.so.*" -FILES_libavcodec-dev = "${libdir}/libavcodec*.so \ - ${libdir}/pkgconfig/libavcodec.pc \ - ${libdir}/libavcodec*.la ${libdir}/libavcodec*.a" +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*.la ${libdir}/libavdevice*.a" +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*.la ${libdir}/libavformat*.a" +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*.la ${libdir}/libavutil*.a" +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*.la ${libdir}/libpostproc*.a" +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*" -- cgit v1.2.3 From a67ec1efcb91fcd479826ac49cd87a9639cfbdc7 Mon Sep 17 00:00:00 2001 From: Matthias Hentges Date: Sun, 24 Feb 2008 11:49:57 +0000 Subject: altboot: Apply fix from oebug #2647 --- packages/altboot/altboot_1.1.1+wip-SVNR79.bb | 76 ---------------------------- packages/altboot/altboot_1.1.1+wip-SVNR80.bb | 76 ++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 76 deletions(-) delete mode 100644 packages/altboot/altboot_1.1.1+wip-SVNR79.bb create mode 100644 packages/altboot/altboot_1.1.1+wip-SVNR80.bb diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR79.bb b/packages/altboot/altboot_1.1.1+wip-SVNR79.bb deleted file mode 100644 index 335572f3c1..0000000000 --- a/packages/altboot/altboot_1.1.1+wip-SVNR79.bb +++ /dev/null @@ -1,76 +0,0 @@ -require altboot.inc - -PR = "r0" - -SVN_REV = "79" -SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \ - " - -do_install() { - install -d ${D}/sbin - install -d ${D}/etc/altboot-menu - install -d ${D}/etc/altboot.rc - install -d ${D}/usr/share/doc/altboot - install -d ${D}/usr/share/sounds - - if test -d ${S}/${MACHINE_DIR} - then - install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/ - else - install -m 0644 ${S}/altboot*.cfg ${D}/etc/ - fi - - install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds - install -m 0644 ${S}/altboot.func ${D}/etc - install -m 0644 ${S}/altboot.sbin ${D}/etc - install -m 0644 ${S}/altbootctl.conf ${D}/etc - install -m 0755 ${S}/init.altboot ${D}/sbin - install -m 0755 ${S}/altbootctl ${D}/sbin - - ln -s /sbin/init.altboot ${D}/sbin/altboot - - if test -d ${S}/${MACHINE_DIR}/altboot-menu - then - install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu - - if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced - then - install -d ${D}/etc/altboot-menu/Advanced - install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced - fi - else - install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu - - if test -d ${S}/altboot-menu/Advanced - then - install -d ${D}/etc/altboot-menu/Advanced - install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced - fi - fi - - if test -d ${S}/${MACHINE_DIR}/altboot.rc - then - install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc - install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc - else - install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc - install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc - fi -} - -do_configure() { - cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_ - mv ${S}/init.altboot_ ${S}/init.altboot -} - -pkg_postinst_${PN}() { - test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55 - - update-alternatives --install /sbin/init init /sbin/init.altboot 55 -} - -pkg_postrm_${PN}() { - test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot - - update-alternatives --remove init /sbin/init.altboot -} diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR80.bb b/packages/altboot/altboot_1.1.1+wip-SVNR80.bb new file mode 100644 index 0000000000..b333264d34 --- /dev/null +++ b/packages/altboot/altboot_1.1.1+wip-SVNR80.bb @@ -0,0 +1,76 @@ +require altboot.inc + +PR = "r0" + +SVN_REV = "80" +SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \ + " + +do_install() { + install -d ${D}/sbin + install -d ${D}/etc/altboot-menu + install -d ${D}/etc/altboot.rc + install -d ${D}/usr/share/doc/altboot + install -d ${D}/usr/share/sounds + + if test -d ${S}/${MACHINE_DIR} + then + install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/ + else + install -m 0644 ${S}/altboot*.cfg ${D}/etc/ + fi + + install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds + install -m 0644 ${S}/altboot.func ${D}/etc + install -m 0644 ${S}/altboot.sbin ${D}/etc + install -m 0644 ${S}/altbootctl.conf ${D}/etc + install -m 0755 ${S}/init.altboot ${D}/sbin + install -m 0755 ${S}/altbootctl ${D}/sbin + + ln -s /sbin/init.altboot ${D}/sbin/altboot + + if test -d ${S}/${MACHINE_DIR}/altboot-menu + then + install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu + + if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced + then + install -d ${D}/etc/altboot-menu/Advanced + install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced + fi + else + install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu + + if test -d ${S}/altboot-menu/Advanced + then + install -d ${D}/etc/altboot-menu/Advanced + install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced + fi + fi + + if test -d ${S}/${MACHINE_DIR}/altboot.rc + then + install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc + install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc + else + install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc + install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc + fi +} + +do_configure() { + cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_ + mv ${S}/init.altboot_ ${S}/init.altboot +} + +pkg_postinst_${PN}() { + test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55 + + update-alternatives --install /sbin/init init /sbin/init.altboot 55 +} + +pkg_postrm_${PN}() { + test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot + + update-alternatives --remove init /sbin/init.altboot +} -- cgit v1.2.3 From 4886b55038d7e075a4ca3fbb1ade20751dc7d536 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 24 Feb 2008 13:11:03 +0000 Subject: klibc, klibc-utils-static: apply config-eabi.patch only once --- packages/klibc/klibc-utils-static_1.5.bb | 4 +--- packages/klibc/klibc.inc | 1 - packages/klibc/klibc_1.5.bb | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/klibc/klibc-utils-static_1.5.bb b/packages/klibc/klibc-utils-static_1.5.bb index 7248576c9f..cac8c1c67f 100644 --- a/packages/klibc/klibc-utils-static_1.5.bb +++ b/packages/klibc/klibc-utils-static_1.5.bb @@ -1,9 +1,7 @@ require klibc-common.inc -PR = "r4" +PR = "r5" -SRC_URI_append_linux-gnueabi = "\ - file://klibc-config-eabi.patch;patch=1" # We only want the static utils. klibc build both. So we install only what we want. do_install() { diff --git a/packages/klibc/klibc.inc b/packages/klibc/klibc.inc index d7065f1e67..78e1bca125 100644 --- a/packages/klibc/klibc.inc +++ b/packages/klibc/klibc.inc @@ -3,7 +3,6 @@ require klibc-common.inc SRC_URI += "file://staging.patch;patch=1 \ file://klibc_kexecsyscall.patch;patch=1 \ " -SRC_URI_append_linux-gnueabi = "file://klibc-config-eabi.patch;patch=1" # we want only the shared programms and the lib so we chose them manually do_install() { diff --git a/packages/klibc/klibc_1.5.bb b/packages/klibc/klibc_1.5.bb index a8f054cd23..db0ba748cb 100644 --- a/packages/klibc/klibc_1.5.bb +++ b/packages/klibc/klibc_1.5.bb @@ -1,2 +1,2 @@ require klibc.inc -PR = "r1" +PR = "r2" -- cgit v1.2.3 From 3ed78be483e36c5a0f1ecf130cefed353e059d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Sun, 24 Feb 2008 13:54:43 +0000 Subject: ttf-liberation: Fix -dbg package RRECOMMENDS since PN as a package doesn't exist This is the same fix as the one by rpurdie to ttf-dejavu. --- packages/ttf-fonts/ttf-liberation_0.2.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/ttf-fonts/ttf-liberation_0.2.bb b/packages/ttf-fonts/ttf-liberation_0.2.bb index 08d450e2ab..048d43c1c8 100644 --- a/packages/ttf-fonts/ttf-liberation_0.2.bb +++ b/packages/ttf-fonts/ttf-liberation_0.2.bb @@ -9,6 +9,8 @@ SRC_URI = "http://www.redhat.com/f/fonts/liberation-fonts-ttf-3.tar.gz" S = "${WORKDIR}/liberation-fonts-${PV}" PACKAGES = "${PN}-dbg ttf-liberation-mono ttf-liberation-sans ttf-liberation-serif" +RRECOMMENDS_${PN}-dbg = "" + FILES_ttf-liberation-mono = "${datadir}/fonts/truetype/*Mono*" FILES_ttf-liberation-sans = "${datadir}/fonts/truetype/*Sans*" FILES_ttf-liberation-serif = "${datadir}/fonts/truetype/*Serif*" -- cgit v1.2.3 From eefb99a313bbcc8f34c8b32bf0c5aa2dd2580735 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Sun, 24 Feb 2008 14:30:49 +0000 Subject: klibc: fix a staging error --- packages/klibc/files/staging.patch | 96 ++++++++++++++++++++++---------------- packages/klibc/klibc_1.5.bb | 2 +- 2 files changed, 56 insertions(+), 42 deletions(-) diff --git a/packages/klibc/files/staging.patch b/packages/klibc/files/staging.patch index f5ce23af9f..215daad456 100644 --- a/packages/klibc/files/staging.patch +++ b/packages/klibc/files/staging.patch @@ -1,6 +1,7 @@ -diff -ru klibc.clean/Makefile klibc-1.5/Makefile ---- klibc.clean/Makefile 2008-02-08 22:37:36.000000000 +0100 -+++ klibc-1.5/Makefile 2008-02-15 12:46:48.000000000 +0100 +Index: klibc-1.5/Makefile +=================================================================== +--- klibc-1.5.orig/Makefile 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/Makefile 2008-02-24 15:25:15.213824149 +0100 @@ -33,7 +33,7 @@ export PERL := perl @@ -10,10 +11,11 @@ diff -ru klibc.clean/Makefile klibc-1.5/Makefile export bindir = $(prefix)/bin export libdir = $(prefix)/lib export mandir = $(prefix)/man -diff -ru klibc.clean/scripts/Kbuild.install klibc-1.5/scripts/Kbuild.install ---- klibc.clean/scripts/Kbuild.install 2008-02-08 22:37:36.000000000 +0100 -+++ klibc-1.5/scripts/Kbuild.install 2008-02-18 22:36:35.434193918 +0100 -@@ -88,14 +88,11 @@ +Index: klibc-1.5/scripts/Kbuild.install +=================================================================== +--- klibc-1.5.orig/scripts/Kbuild.install 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/scripts/Kbuild.install 2008-02-24 15:24:28.085825030 +0100 +@@ -88,25 +88,21 @@ header: $(Q)echo " INSTALL headers + man pages to $(INSTALLROOT)$(INSTALLDIR)" $(Q)mkdir -p $(INSTALLROOT)$(bindir) @@ -24,12 +26,15 @@ diff -ru klibc.clean/scripts/Kbuild.install klibc-1.5/scripts/Kbuild.install $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib - $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin -- $(Q)set -e ; for d in linux scsi asm-$(KLIBCARCH) asm-generic $(ASMKLIBCARCH); do \ -+ $(Q)-set -e ; for d in linux scsi asm-$(KLIBCARCH) asm-generic $(ASMKLIBCARCH); do \ + $(Q)set -e ; for d in linux scsi asm-$(KLIBCARCH) asm-generic $(ASMKLIBCARCH); do \ mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)include/$$d ; \ for r in $(KLIBCKERNELSRC)/include $(KLIBCKERNELOBJ)/include \ $(KLIBCKERNELOBJ)/include2 ; do \ -@@ -106,7 +103,6 @@ + [ ! -d $$r/$$d ] || \ +- cp -rfL $$r/$$d/. \ ++ cp -rfd $$r/$$d/. \ + $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/$$d/. ; \ + done ; \ done $(Q)cd $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include && ln -sf asm-$(KLIBCARCH) asm $(Q)cp -rf usr/include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/. @@ -37,91 +42,100 @@ diff -ru klibc.clean/scripts/Kbuild.install klibc-1.5/scripts/Kbuild.install $(Q)$(install-bin) $(objtree)/klcc/$(KCROSS)klcc $(INSTALLROOT)$(bindir) footer: header -diff -ru klibc.clean/usr/dash/Kbuild klibc-1.5/usr/dash/Kbuild ---- klibc.clean/usr/dash/Kbuild 2008-02-08 22:37:41.000000000 +0100 -+++ klibc-1.5/usr/dash/Kbuild 2008-02-15 12:18:08.000000000 +0100 +Index: klibc-1.5/usr/dash/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/dash/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/dash/Kbuild 2008-02-24 15:13:50.189827040 +0100 @@ -107,5 +107,3 @@ $(obj)/arith.c: $(obj)/arith.h $(Q): -# Targets to install -install-y := sh.shared -diff -ru klibc.clean/usr/gzip/Kbuild klibc-1.5/usr/gzip/Kbuild ---- klibc.clean/usr/gzip/Kbuild 2008-02-08 22:37:42.000000000 +0100 -+++ klibc-1.5/usr/gzip/Kbuild 2008-02-15 12:18:24.000000000 +0100 +Index: klibc-1.5/usr/gzip/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/gzip/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/gzip/Kbuild 2008-02-24 15:13:50.197824604 +0100 @@ -21,5 +21,3 @@ # Cleaning targets := gzip gzip.g gunzip zcat -# Targets to install -install-y := gzip gunzip zcat -diff -ru klibc.clean/usr/kinit/fstype/Kbuild klibc-1.5/usr/kinit/fstype/Kbuild ---- klibc.clean/usr/kinit/fstype/Kbuild 2008-02-08 22:37:40.000000000 +0100 -+++ klibc-1.5/usr/kinit/fstype/Kbuild 2008-02-15 12:26:20.000000000 +0100 +Index: klibc-1.5/usr/kinit/fstype/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/kinit/fstype/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/kinit/fstype/Kbuild 2008-02-24 15:13:50.201824503 +0100 @@ -21,5 +21,3 @@ # Cleaning clean-dirs := static shared -# install binary -install-y := $(shared-y) -diff -ru klibc.clean/usr/kinit/ipconfig/Kbuild klibc-1.5/usr/kinit/ipconfig/Kbuild ---- klibc.clean/usr/kinit/ipconfig/Kbuild 2008-02-08 22:37:40.000000000 +0100 -+++ klibc-1.5/usr/kinit/ipconfig/Kbuild 2008-02-15 12:26:33.000000000 +0100 +Index: klibc-1.5/usr/kinit/ipconfig/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/kinit/ipconfig/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/kinit/ipconfig/Kbuild 2008-02-24 15:13:50.205824123 +0100 @@ -27,5 +27,3 @@ # Cleaning clean-dirs := static shared -# install binary -install-y := $(shared-y) -diff -ru klibc.clean/usr/kinit/Kbuild klibc-1.5/usr/kinit/Kbuild ---- klibc.clean/usr/kinit/Kbuild 2008-02-08 22:37:40.000000000 +0100 -+++ klibc-1.5/usr/kinit/Kbuild 2008-02-15 12:18:43.000000000 +0100 +Index: klibc-1.5/usr/kinit/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/kinit/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/kinit/Kbuild 2008-02-24 15:13:50.209824302 +0100 @@ -33,5 +33,3 @@ subdir- := fstype ipconfig nfsmount resume run-init -# install binary -install-y := kinit kinit.shared -diff -ru klibc.clean/usr/kinit/nfsmount/Kbuild klibc-1.5/usr/kinit/nfsmount/Kbuild ---- klibc.clean/usr/kinit/nfsmount/Kbuild 2008-02-08 22:37:40.000000000 +0100 -+++ klibc-1.5/usr/kinit/nfsmount/Kbuild 2008-02-15 12:26:46.000000000 +0100 +Index: klibc-1.5/usr/kinit/nfsmount/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/kinit/nfsmount/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/kinit/nfsmount/Kbuild 2008-02-24 15:13:50.213824201 +0100 @@ -23,5 +23,3 @@ clean-dirs := static shared -# Install binary -install-y := $(shared-y) -diff -ru klibc.clean/usr/kinit/resume/Kbuild klibc-1.5/usr/kinit/resume/Kbuild ---- klibc.clean/usr/kinit/resume/Kbuild 2008-02-08 22:37:39.000000000 +0100 -+++ klibc-1.5/usr/kinit/resume/Kbuild 2008-02-15 12:27:01.000000000 +0100 +Index: klibc-1.5/usr/kinit/resume/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/kinit/resume/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/kinit/resume/Kbuild 2008-02-24 15:13:50.217824380 +0100 @@ -26,5 +26,3 @@ # Cleaning clean-dirs := static shared -# install binary -install-y := $(shared-y) -diff -ru klibc.clean/usr/kinit/run-init/Kbuild klibc-1.5/usr/kinit/run-init/Kbuild ---- klibc.clean/usr/kinit/run-init/Kbuild 2008-02-08 22:37:39.000000000 +0100 -+++ klibc-1.5/usr/kinit/run-init/Kbuild 2008-02-15 12:27:12.000000000 +0100 +Index: klibc-1.5/usr/kinit/run-init/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/kinit/run-init/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/kinit/run-init/Kbuild 2008-02-24 15:13:50.221824559 +0100 @@ -21,5 +21,3 @@ # Cleaning clean-dirs := static shared -# install binary -install-y := $(shared-y) -Only in klibc-1.5/usr/klibc/arch/arm: klib.list -diff -ru klibc.clean/usr/klibc/Kbuild klibc-1.5/usr/klibc/Kbuild ---- klibc.clean/usr/klibc/Kbuild 2008-02-08 22:37:49.000000000 +0100 -+++ klibc-1.5/usr/klibc/Kbuild 2008-02-15 12:17:24.000000000 +0100 +Index: klibc-1.5/usr/klibc/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/klibc/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/klibc/Kbuild 2008-02-24 15:13:50.229824358 +0100 @@ -175,5 +175,3 @@ $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib)) $(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \ $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib - $(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \ - $(INSTALLROOT)$(SHLIBDIR) -diff -ru klibc.clean/usr/utils/Kbuild klibc-1.5/usr/utils/Kbuild ---- klibc.clean/usr/utils/Kbuild 2008-02-08 22:37:37.000000000 +0100 -+++ klibc-1.5/usr/utils/Kbuild 2008-02-15 12:17:51.000000000 +0100 +Index: klibc-1.5/usr/utils/Kbuild +=================================================================== +--- klibc-1.5.orig/usr/utils/Kbuild 2007-03-04 02:52:10.000000000 +0100 ++++ klibc-1.5/usr/utils/Kbuild 2008-02-24 15:13:50.229824358 +0100 @@ -64,5 +64,3 @@ # Clean deletes the static and shared dir clean-dirs := static shared diff --git a/packages/klibc/klibc_1.5.bb b/packages/klibc/klibc_1.5.bb index db0ba748cb..524437f9f9 100644 --- a/packages/klibc/klibc_1.5.bb +++ b/packages/klibc/klibc_1.5.bb @@ -1,2 +1,2 @@ require klibc.inc -PR = "r2" +PR = "r3" -- cgit v1.2.3 From 7d98f59107a7ff7dda3632c89cd77928b954147b Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 24 Feb 2008 15:38:04 +0000 Subject: ttf-fonts: Add some missing -dbg RRECOMMENDS overrides --- packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb | 1 + packages/ttf-fonts/ttf-sazanami_20040629.bb | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb b/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb index 2964d7a7d8..a3126c00d3 100644 --- a/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb +++ b/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb @@ -10,5 +10,6 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/hunkyfonts/hunkyfonts-${PV}.tar.bz2" S = "${WORKDIR}/hunkyfonts-${PV}/TTF/" PACKAGES = "${PN}-dbg ttf-hunky-sans ttf-hunky-serif" +RRECOMMENDS_${PN}-dbg = "" FILES_ttf-hunky-sans = "${datadir}/fonts/truetype/HunkySans*.ttf" FILES_ttf-hunky-serif = "${datadir}/fonts/truetype/HunkySerif*.ttf" diff --git a/packages/ttf-fonts/ttf-sazanami_20040629.bb b/packages/ttf-fonts/ttf-sazanami_20040629.bb index ef65d40b6b..8cf46ae82d 100644 --- a/packages/ttf-fonts/ttf-sazanami_20040629.bb +++ b/packages/ttf-fonts/ttf-sazanami_20040629.bb @@ -14,6 +14,7 @@ SRC_URI = "http://download.sourceforge.jp/efont/10087/sazanami-20040629.tar.bz2" S = "${WORKDIR}/sazanami-20040629" PACKAGES = "${PN}-dbg ttf-sazanami-gothic ttf-sazanami-mincho" +RRECOMMENDS_${PN}-dbg = "" FILES_ttf-sazanami-gothic = "${datadir}/fonts/truetype/sazanami-gothic.ttf \ ${datadir}/doc/ttf-sazanami-gothic/README" FILES_ttf-sazanami-mincho = "${datadir}/fonts/truetype/sazanami-mincho.ttf \ -- cgit v1.2.3 From 3de1c419a2b0a4ca36e26097da74854e86f5a172 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 24 Feb 2008 15:41:54 +0000 Subject: xserver-kdrive-imageon: remove FILESPATH definition to make sure it finds all necessary patches. --- packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb index 622b32179d..3a7302c3da 100644 --- a/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb +++ b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb @@ -9,7 +9,6 @@ PROVIDES = "virtual/xserver" PE = "1" PR = "r4" -FILESPATH = "${FILE_DIRNAME}/xserver-kdrive-1.2.0:${FILE_DIRNAME}/xserver-kdrive" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ ${KDRIVE_COMMON_PATCHES} \ file://kdrive-evdev.patch;patch=1 \ -- cgit v1.2.3 From 65812346e8fbf3044afa918dd991496d04cacd96 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Sun, 24 Feb 2008 17:09:01 +0000 Subject: xserver-kdrive-imageon: reintroduce FILESPATH * for some reason I am too lazy to inspect further not all patches were found * adding ${FILE_DIRNAME}/files to the previous setting results in successful do_patch and do_build * there are quite many duplicate patches in the packages/xorg-xserver/ directory consolidating them would be beneficial IMHO (I don't have time for it today) --- packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb index 3a7302c3da..54fe19d990 100644 --- a/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb +++ b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb @@ -9,6 +9,7 @@ PROVIDES = "virtual/xserver" PE = "1" PR = "r4" +FILESPATH = "${FILE_DIRNAME}/xserver-kdrive-${PV}:${FILE_DIRNAME}/xserver-kdrive:${FILE_DIRNAME}/files" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ ${KDRIVE_COMMON_PATCHES} \ file://kdrive-evdev.patch;patch=1 \ -- cgit v1.2.3 From 626030cab71d4fd02092e25aeff27f2b87d3e257 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Sun, 24 Feb 2008 22:15:09 +0000 Subject: linux-nokia800: added 2.6.21-osso71 used by OS2008 release (from Poky) --- .../linux-nokia800-2.6.21-osso71/.mtn2git_empty | 0 .../nokia800/.mtn2git_empty | 0 .../nokia800/defconfig | 1585 ++++++++++++++++++++ packages/linux/linux-nokia800_2.6.21-osso71.bb | 16 + 4 files changed, 1601 insertions(+) create mode 100644 packages/linux/linux-nokia800-2.6.21-osso71/.mtn2git_empty create mode 100644 packages/linux/linux-nokia800-2.6.21-osso71/nokia800/.mtn2git_empty create mode 100644 packages/linux/linux-nokia800-2.6.21-osso71/nokia800/defconfig create mode 100644 packages/linux/linux-nokia800_2.6.21-osso71.bb diff --git a/packages/linux/linux-nokia800-2.6.21-osso71/.mtn2git_empty b/packages/linux/linux-nokia800-2.6.21-osso71/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-nokia800-2.6.21-osso71/nokia800/.mtn2git_empty b/packages/linux/linux-nokia800-2.6.21-osso71/nokia800/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-nokia800-2.6.21-osso71/nokia800/defconfig b/packages/linux/linux-nokia800-2.6.21-osso71/nokia800/defconfig new file mode 100644 index 0000000000..b1af97af35 --- /dev/null +++ b/packages/linux/linux-nokia800-2.6.21-osso71/nokia800/defconfig @@ -0,0 +1,1585 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.21-omap1 +# Wed Feb 6 17:40:31 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SHMEM=y +CONFIG_SLAB=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +# CONFIG_SLOB is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_KMOD is not set + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +CONFIG_ARCH_OMAP=y + +# +# TI OMAP Implementations +# +CONFIG_ARCH_OMAP_OTG=y +# CONFIG_ARCH_OMAP1 is not set +CONFIG_ARCH_OMAP2=y + +# +# OMAP Feature Selections +# +CONFIG_MACH_OMAP2420_DVFS=y +CONFIG_ARCH_OMAP2420_DEBUG=y +CONFIG_ARCH_OMAP2420_OBSERVABILITY=m +CONFIG_ARCH_OMAP2420_PEEK_N_POKE=m +CONFIG_ARCH_OMAP2420_SNAPSHOT=m +CONFIG_ARCH_OMAP2420_DMA_DRAIN=y +CONFIG_OMAP_RESET_CLOCKS=y +CONFIG_OMAP_BOOT_TAG=y +CONFIG_OMAP_BOOT_REASON=y +CONFIG_OMAP_COMPONENT_VERSION=y +CONFIG_OMAP_GPIO_SWITCH=y +# CONFIG_OMAP_MUX is not set +CONFIG_OMAP_STI=y +CONFIG_OMAP_STI_CONSOLE=y +# CONFIG_OMAP_MCBSP is not set +CONFIG_OMAP_MMU_FWK=y +CONFIG_OMAP_MBOX_FWK=y +# CONFIG_OMAP_MPU_TIMER is not set +CONFIG_OMAP_32K_TIMER=y +CONFIG_OMAP_32K_TIMER_HZ=128 +CONFIG_OMAP_DM_TIMER=y +# CONFIG_OMAP_LL_DEBUG_UART1 is not set +# CONFIG_OMAP_LL_DEBUG_UART2 is not set +CONFIG_OMAP_LL_DEBUG_UART3=y +CONFIG_OMAP_DSP=y +# CONFIG_OMAP_DSP_MBCMD_VERBOSE is not set +CONFIG_OMAP_DSP_TASK_MULTIOPEN=y +CONFIG_OMAP_DSP_FBEXPORT=y +CONFIG_OMAP_DSP_PAUSING=y +# CONFIG_MACH_OMAP_GENERIC is not set + +# +# OMAP Core Type +# +CONFIG_ARCH_OMAP24XX=y +CONFIG_ARCH_OMAP2420=y +# CONFIG_ARCH_OMAP2430 is not set + +# +# OMAP Board Type +# +CONFIG_MACH_NOKIA_N800=y +CONFIG_MACH_NOKIA_RX44=y +CONFIG_MACH_OMAP2_TUSB6010=y +# CONFIG_MACH_OMAP_H4 is not set +# CONFIG_MACH_OMAP_APOLLON is not set +# CONFIG_MACH_OMAP_2430SDP is not set + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_V6=y +# CONFIG_CPU_32v6K is not set +CONFIG_CPU_32v6=y +CONFIG_CPU_ABRT_EV6=y +CONFIG_CPU_CACHE_V6=y +CONFIG_CPU_CACHE_VIPT=y +CONFIG_CPU_COPY_V6=y +CONFIG_CPU_TLB_V6=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_CPU_BPREDICT_DISABLE is not set +# CONFIG_OUTER_CACHE is not set + +# +# Bus support +# + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_PREEMPT is not set +CONFIG_NO_IDLE_HZ=y +CONFIG_HZ=128 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_LEDS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x10C08000 +CONFIG_ZBOOT_ROM_BSS=0x10200000 +# CONFIG_ZBOOT_ROM is not set +CONFIG_CMDLINE="root=1f03 rootfstype=jffs2 ro console=tty0" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC 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=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_NULL=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_NULL=y +# CONFIG_CPU_FREQ_GOV_USERSPACE is not set +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 +CONFIG_VFP=y + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +# CONFIG_PM_SYSFS_DEPRECATED is not set +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_NETDEBUG is not set +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETLABEL is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=y +# CONFIG_NETFILTER_NETLINK_QUEUE is not set +# CONFIG_NETFILTER_NETLINK_LOG is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +CONFIG_NETFILTER_XTABLES=y +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=y +# CONFIG_IP_NF_MATCH_IPRANGE is not set +# CONFIG_IP_NF_MATCH_TOS is not set +# CONFIG_IP_NF_MATCH_RECENT is not set +# CONFIG_IP_NF_MATCH_ECN is not set +# CONFIG_IP_NF_MATCH_AH is not set +# CONFIG_IP_NF_MATCH_TTL is not set +# CONFIG_IP_NF_MATCH_OWNER is not set +# CONFIG_IP_NF_MATCH_ADDRTYPE is not set +CONFIG_IP_NF_FILTER=y +# CONFIG_IP_NF_TARGET_REJECT is not set +# CONFIG_IP_NF_TARGET_LOG is not set +# CONFIG_IP_NF_TARGET_ULOG is not set +CONFIG_IP_NF_TARGET_IDLETIMER=y +# CONFIG_IP_NF_MANGLE is not set +# CONFIG_IP_NF_RAW is not set +# CONFIG_IP_NF_ARPTABLES is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=y +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +# CONFIG_BT_BNEP_MC_FILTER is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=y + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +# CONFIG_BT_HCIUART is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIBRF6150 is not set +CONFIG_BT_HCIH4P=y +# CONFIG_BT_HCIVHCI is not set +# CONFIG_IEEE80211 is not set +CONFIG_WIRELESS_EXT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +CONFIG_MTD_ONENAND=y +# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set +# CONFIG_MTD_ONENAND_GENERIC is not set +CONFIG_MTD_ONENAND_OMAP2=y +CONFIG_MTD_ONENAND_OTP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# +# CONFIG_ATA is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# + +# +# I2O device support +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=y + +# +# PHY device support +# + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set +CONFIG_MII=y + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_NET_WIRELESS_RTNETLINK is not set + +# +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_HOSTAP is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +CONFIG_PPP=y +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=y +CONFIG_PPP_SYNC_TTY=y +CONFIG_PPP_DEFLATE=y +CONFIG_PPP_BSDCOMP=y +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=y +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_OMAP is not set +# CONFIG_KEYBOARD_GPIO is not set +CONFIG_KEYBOARD_TSC2301=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +CONFIG_TOUCHSCREEN_TSC2005=y +CONFIG_TOUCHSCREEN_TSC2301=y +# CONFIG_TOUCHSCREEN_TSC2046 is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_OMAP=y +CONFIG_SERIAL_OMAP_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_OMAP_WATCHDOG=y + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set + +# +# I2C support +# +CONFIG_I2C=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_OMAP=y +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_ISP1301_OMAP is not set +# CONFIG_TPS65010 is not set +# CONFIG_SENSORS_TLV320AIC23 is not set +CONFIG_SENSORS_TSL2563=y +# CONFIG_GPIOEXPANDER_OMAP is not set +CONFIG_LM8323=y +CONFIG_LP5521=y +CONFIG_MENELAUS=y +# CONFIG_TWL4030_CORE is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_OMAP24XX=y +CONFIG_SPI_OMAP_PAUSING=y + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_TSC2005 is not set +# CONFIG_SPI_TSC2101 is not set +# CONFIG_SPI_TSC2102 is not set +CONFIG_SPI_TSC2301=y +CONFIG_SPI_TSC2301_AUDIO=y + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set + +# +# Hardware Monitoring support +# +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_FSCPOS is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +CONFIG_SENSORS_TMP105=y +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Misc devices +# + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# LED devices +# +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_OMAP_DEBUG is not set +# CONFIG_LEDS_OMAP is not set +CONFIG_LEDS_OMAP_PWM=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=y +# CONFIG_VIDEO_V4L1 is not set +# CONFIG_VIDEO_V4L1_COMPAT is not set +CONFIG_VIDEO_V4L2=y + +# +# Video Capture Adapters +# + +# +# Video Capture Adapters +# +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set + +# +# V4L USB devices +# +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_USBVISION is not set +CONFIG_VIDEO_OMAP_CAMERA=y +# CONFIG_VIDEO_CAMERA_SENSOR_OV9640 is not set +CONFIG_VIDEO_CAMERA_SENSOR_TCM825X=y + +# +# Radio Adapters +# +CONFIG_RADIO_TEA5761=y +# CONFIG_USB_DSBR is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set +CONFIG_VIDEO_BUF=y +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +# CONFIG_FB_CFB_FILLRECT is not set +# CONFIG_FB_CFB_COPYAREA is not set +# CONFIG_FB_CFB_IMAGEBLIT is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_OMAP=y +CONFIG_FB_OMAP_LCDC_EXTERNAL=y +# CONFIG_FB_OMAP_LCDC_HWA742 is not set +CONFIG_FB_OMAP_LCDC_BLIZZARD=y +# CONFIG_FB_OMAP_MANUAL_UPDATE is not set +CONFIG_FB_OMAP_LCD_MIPID=y +CONFIG_FB_OMAP_BOOTLOADER_INIT=y +CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=4 +CONFIG_FB_OMAP_PAUSING=y +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Logo configuration +# +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +# CONFIG_SND_PCM_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +# CONFIG_SND_VERBOSE_PROCFS is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_OMAP_AIC23 is not set +CONFIG_SND_AIC33=y +# CONFIG_SND_OMAP_TSC2101 is not set +# CONFIG_SND_SX1 is not set +# CONFIG_SND_OMAP_TSC2102 is not set +CONFIG_SND_OMAP24XX_EAC=y + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set + +# +# SoC audio support +# +# CONFIG_SND_SOC is not set + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set + +# +# HID Devices +# +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +CONFIG_USB_DEBUG=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DYNAMIC_MINORS=y +CONFIG_USB_SUSPEND=y +CONFIG_USB_OTG=y +CONFIG_USB_OTG_WHITELIST=y +# CONFIG_USB_OTG_BLACKLIST_HUB is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_OHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set +CONFIG_USB_MUSB_HDRC=y +CONFIG_USB_TUSB6010=y +CONFIG_USB_TUSB6010_TEST=y +# CONFIG_USB_MUSB_HOST is not set +# CONFIG_USB_MUSB_PERIPHERAL is not set +CONFIG_USB_MUSB_OTG=y +CONFIG_USB_GADGET_MUSB_HDRC=y +CONFIG_USB_MUSB_HDRC_HCD=y +CONFIG_USB_MUSB_HSET=y +# CONFIG_MUSB_PIO_ONLY is not set +# CONFIG_USB_INVENTRA_DMA is not set +# CONFIG_USB_TI_CPPI_DMA is not set +CONFIG_USB_TUSB_OMAP_DMA=y +CONFIG_USB_MUSB_LOGLEVEL=1 + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +CONFIG_USB_LIBUSUAL=y + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_ACECAD is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_TOUCHSCREEN is not set +# CONFIG_USB_YEALINK is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set +# CONFIG_USB_ATI_REMOTE2 is not set +# CONFIG_USB_KEYSPAN_REMOTE is not set +# CONFIG_USB_APPLETOUCH is not set +# CONFIG_USB_GTCO is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +CONFIG_USB_RTL8150=y +# CONFIG_USB_USBNET_MII is not set +CONFIG_USB_USBNET=y +CONFIG_USB_NET_CDCETHER=y +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=y +CONFIG_USB_NET_PLUSB=y +# CONFIG_USB_NET_MCS7830 is not set +CONFIG_USB_NET_RNDIS_HOST=y +CONFIG_USB_NET_CDC_SUBSET=y +# CONFIG_USB_ALI_M5632 is not set +# CONFIG_USB_AN2720 is not set +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +# CONFIG_USB_EPSON2888 is not set +# CONFIG_USB_KC2190 is not set +CONFIG_USB_NET_ZAURUS=y +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +CONFIG_USB_TEST=y + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=m +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_GADGETFS=m +CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_FILE_STORAGE_TEST=y +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set + +# +# MMC/SD Card support +# +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_BLOCK=y +CONFIG_MMC_OMAP=y +CONFIG_MMC_PAUSING=y + +# +# Real Time Clock +# +CONFIG_RTC_LIB=y +# CONFIG_RTC_CLASS is not set + +# +# CBUS support +# +CONFIG_CBUS=y +CONFIG_CBUS_TAHVO=y +CONFIG_CBUS_TAHVO_USER=y +# CONFIG_CBUS_TAHVO_USB is not set +CONFIG_CBUS_RETU=y +CONFIG_CBUS_RETU_USER=y +CONFIG_CBUS_RETU_POWERBUTTON=y +CONFIG_CBUS_RETU_RTC=y +CONFIG_CBUS_RETU_WDT=y +CONFIG_CBUS_RETU_HEADSET=y + +# +# File systems +# +CONFIG_EXT2_FS=m +CONFIG_EXT2_FS_XATTR=y +# CONFIG_EXT2_FS_POSIX_ACL is not set +# CONFIG_EXT2_FS_SECURITY is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=m +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +# CONFIG_NFS_FS is not set +# CONFIG_NFSD is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +CONFIG_NLS_ISO8859_15=y +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +CONFIG_PRINTK_TIME=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +CONFIG_FRAME_POINTER=y +CONFIG_FORCED_INLINING=y +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +CONFIG_SECURITY=y +# CONFIG_SECURITY_NETWORK is not set +# CONFIG_SECURITY_CAPABILITIES is not set +# CONFIG_SECURITY_ROOTPLUG is not set +CONFIG_SECURITY_LOWMEM=y + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y diff --git a/packages/linux/linux-nokia800_2.6.21-osso71.bb b/packages/linux/linux-nokia800_2.6.21-osso71.bb new file mode 100644 index 0000000000..34cc82a842 --- /dev/null +++ b/packages/linux/linux-nokia800_2.6.21-osso71.bb @@ -0,0 +1,16 @@ +require linux-nokia800.inc +PR = "r1" + +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_nokia800 = "1" + +SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2 \ + http://repository.maemo.org/pool/os2008/free/source/k/kernel-source-rx-34/kernel-source-rx-34_2.6.21.0-osso71.diff.gz;patch=1 \ + file://defconfig" + +S = "${WORKDIR}/linux-2.6.21" + +do_stage_append () { + mkdir -p ${STAGING_KERNEL_DIR}/drivers/media/video/omap/ + cp -f drivers/media/video/omap/tcm825x.h ${STAGING_KERNEL_DIR}/drivers/media/video/omap/ +} -- cgit v1.2.3 From 89edf25da6cbf515358aaa5fd64987d2a04bbc4f Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 24 Feb 2008 23:35:07 +0000 Subject: package.bbclass: shlib postinst: Check for ldconfig presence before running it. * This helps uclibc systems where ldconfig is optional, in particular 3rd-party systems like OpenWRT. * Per RFC on the list. --- classes/package.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/package.bbclass b/classes/package.bbclass index e267478561..cb4417fc7f 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -515,7 +515,7 @@ emit_pkgdata[dirs] = "${PKGDATA_DIR}/runtime" ldconfig_postinst_fragment() { if [ x"$D" = "x" ]; then - ldconfig + [ -x /sbin/ldconfig ] && /sbin/ldconfig fi } -- cgit v1.2.3 From 4d24a5becc3b0a86fc6c0027c43eddc812f169f4 Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Mon, 25 Feb 2008 03:22:41 +0000 Subject: motion: fix build, upgrade to 3.2.9, oebug 3286 --- packages/motion/motion_3.2.6.bb | 12 ------------ packages/motion/motion_3.2.9.bb | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 12 deletions(-) delete mode 100644 packages/motion/motion_3.2.6.bb create mode 100644 packages/motion/motion_3.2.9.bb diff --git a/packages/motion/motion_3.2.6.bb b/packages/motion/motion_3.2.6.bb deleted file mode 100644 index 2d12802cbc..0000000000 --- a/packages/motion/motion_3.2.6.bb +++ /dev/null @@ -1,12 +0,0 @@ -DESCRIPTION = "Motion - a motion detection program" -HOMEPAGE = "http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome" -PRIORITY = "optional" -PR = "r0" -LICENSE = "GPL" -DEPENDS = "jpeg" -PRIORITY = "optional" - -SRC_URI = "${SOURCEFORGE_MIRROR}/motion/motion-3.2.6.tar.gz" - -inherit autotools - diff --git a/packages/motion/motion_3.2.9.bb b/packages/motion/motion_3.2.9.bb new file mode 100644 index 0000000000..1010e7f046 --- /dev/null +++ b/packages/motion/motion_3.2.9.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "Motion - a motion detection program" +HOMEPAGE = "http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome" +AUTHOR = "Kenneth Lavrsen motion-user@lists.sourceforge.net" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "jpeg ffmpeg mysql postgresql" + +RSUGGESTS = "mysql-client postgresql-client" + +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.gz" + +inherit autotools + +EXTRA_OECONF = " --with-ffmpeg=${STAGING_LIBDIR} \ + --with-mysql-lib=${STAGING_LIBDIR} \ + --with-mysql-include=${STAGING_INCDIR}/mysql \ + --with-pgsql=${STAGING_DIR} " -- cgit v1.2.3 From ca839187f8f77ee0717024e550bb2ad24085bbbb Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Mon, 25 Feb 2008 03:38:25 +0000 Subject: postgresql: fix packaging and staging for 8.1.x * modular packaging for lib, seperate client from server * NOTE: 8.2.x and 8.3.x may have different header file location --- packages/postgresql/postgresql.inc | 55 +++++++++++++++++++++++++++++++++ packages/postgresql/postgresql_8.1.4.bb | 2 +- packages/postgresql/postgresql_8.1.8.bb | 2 +- packages/postgresql/postgresql_8.2.4.bb | 2 +- 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/packages/postgresql/postgresql.inc b/packages/postgresql/postgresql.inc index 36ec1187aa..9f1335b2bd 100644 --- a/packages/postgresql/postgresql.inc +++ b/packages/postgresql/postgresql.inc @@ -7,10 +7,65 @@ DEPENDS = "zlib readline" SRC_URI = "ftp://ftp-archives.postgresql.org/pub/source/v${PV}/${P}.tar.bz2" +LEAD_SONAME = "libpq.so" + inherit autotools pkgconfig do_compile_append() { cp /usr/sbin/zic ${S}/src/timezone/ } +do_stage() { + autotools_stage_includes + + mkdir -p ${STAGING_LIBDIR}/pgsql + oe_libinstall -a -so -C src/interfaces/libpq libpq ${STAGING_LIBDIR}/pgsql + + oe_libinstall -a -so -C src/interfaces/ecpg/ecpglib libecpg ${STAGING_LIBDIR} + oe_libinstall -a -so -C src/interfaces/ecpg/compatlib libecpg_compat ${STAGING_LIBDIR} + oe_libinstall -a -so -C src/interfaces/ecpg/pgtypeslib libpgtypes ${STAGING_LIBDIR} +} + +PACKAGES =+ "${PN}-client ${PN}-server-dev ${PN}-timezone \ + libecpg-compat-dbg libecpg-compat \ + libecpg-dbg libecpg libecpg-dev \ + libpq-dbg libpq libpq-dev \ + libpgtypes-dbg libpgtypes " + +FILES_${PN}-client = "${bindir}/clusterdb \ + ${bindir}/createdb \ + ${bindir}/createlang \ + ${bindir}/createuser \ + ${bindir}/dropdb \ + ${bindir}/droplang \ + ${bindir}/dropuser \ + ${bindir}/pg_dump \ + ${bindir}/pg_dumpall \ + ${bindir}/pg_restore \ + ${bindir}/psql \ + ${bindir}/reindexdb \ + ${bindir}/vacuumdb \ + ${bindir}/vacuumlo \ + ${datadir}/${PN}/psqlrc.sample" + FILES_${PN}-doc += "${prefix}/doc/" +FILES_${PN}-timezone = "${datadir}/${PN}/timezone" +FILES_${PN}-server-dev = "${includedir}/${PN}/server" + +FILES_libecpg = "${libdir}/libecpg*.so.*" +FILES_libecpg-dbg = "${libdir}/.debug/libecpg*" +FILES_libecpg-dev = "${libdir}/libecpg*.a ${libdir}/libecpg*.so \ + ${libdir}/libpgtypes*.a ${libdir}/libpgtypes*.so \ + ${includedir}/ecpg*.h ${includedir}/${PN}/ecpg*.h \ + ${includedir}/pgtypes*.h ${includedir}/${PN}/informix \ + ${includedir}/sql3types.h ${includedir}/sqlca.h" + +FILES_libpq = "${libdir}/libpq*.so.*" +FILES_libpq-dbg = "${libdir}/.debug/libpq*" +FILES_libpq-dev = "${libdir}/libpq*.a ${libdir}/libpq*.so ${libdir}/libpgport.a \ + ${includedir}" + +FILES_libecpg-compat = "${libdir}/libecpg_compat*.so.*" +FILES_libecpg-compat-dbg = "${libdir}/.debug/libecpg_compat*" +FILES_libpgtypes = "${libdir}/libpgtypes*.so.*" +FILES_libpgtypes-dbg = "${libdir}/.debug/libpgtypes*" diff --git a/packages/postgresql/postgresql_8.1.4.bb b/packages/postgresql/postgresql_8.1.4.bb index 27b067b5cb..eb03642085 100644 --- a/packages/postgresql/postgresql_8.1.4.bb +++ b/packages/postgresql/postgresql_8.1.4.bb @@ -1,3 +1,3 @@ require postgresql.inc -PR = "r1" +PR = "r2" diff --git a/packages/postgresql/postgresql_8.1.8.bb b/packages/postgresql/postgresql_8.1.8.bb index 27b067b5cb..eb03642085 100644 --- a/packages/postgresql/postgresql_8.1.8.bb +++ b/packages/postgresql/postgresql_8.1.8.bb @@ -1,3 +1,3 @@ require postgresql.inc -PR = "r1" +PR = "r2" diff --git a/packages/postgresql/postgresql_8.2.4.bb b/packages/postgresql/postgresql_8.2.4.bb index 3dc8577c1c..6e778e5b49 100644 --- a/packages/postgresql/postgresql_8.2.4.bb +++ b/packages/postgresql/postgresql_8.2.4.bb @@ -1,6 +1,6 @@ require postgresql.inc -PR = "r1" +PR = "r2" DEFAULT_PREFERENCE = "-1" SRC_URI = "http://ftp.de.postgresql.org/mirror/postgresql/source/v${PV}/${P}.tar.bz2 \ -- cgit v1.2.3 From 2185e4521726d16b4cded1cd44e6b2a76c1d5b6b Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Mon, 25 Feb 2008 04:10:47 +0000 Subject: lemon: upgrade to 3.4.4, fix pakaging, close oebug 3855 --- packages/lemon/lemon-native_3.3.5.bb | 9 --------- packages/lemon/lemon-native_3.5.4.bb | 11 +++++++++++ packages/lemon/lemon.inc | 1 + packages/lemon/lemon_3.3.5.bb | 10 ---------- packages/lemon/lemon_3.5.4.bb | 11 +++++++++++ 5 files changed, 23 insertions(+), 19 deletions(-) delete mode 100644 packages/lemon/lemon-native_3.3.5.bb create mode 100644 packages/lemon/lemon-native_3.5.4.bb delete mode 100644 packages/lemon/lemon_3.3.5.bb create mode 100644 packages/lemon/lemon_3.5.4.bb diff --git a/packages/lemon/lemon-native_3.3.5.bb b/packages/lemon/lemon-native_3.3.5.bb deleted file mode 100644 index 4c721723de..0000000000 --- a/packages/lemon/lemon-native_3.3.5.bb +++ /dev/null @@ -1,9 +0,0 @@ -require lemon.inc -inherit native - -do_stage() { - install -d ${STAGING_BINDIR} - install -m 0755 lemon ${STAGING_BINDIR}/ - install -d ${STAGING_DATADIR}/lemon - install -m 0644 lempar.c ${STAGING_DATADIR}/lemon/ -} diff --git a/packages/lemon/lemon-native_3.5.4.bb b/packages/lemon/lemon-native_3.5.4.bb new file mode 100644 index 0000000000..55a083ccb7 --- /dev/null +++ b/packages/lemon/lemon-native_3.5.4.bb @@ -0,0 +1,11 @@ +require lemon.inc + +PR = "r0" + +inherit native + +do_stage() { + install -d ${STAGING_BINDIR} + install -m 0755 lemon ${STAGING_BINDIR} + install -m 0644 lempar.c ${STAGING_BINDIR} +} diff --git a/packages/lemon/lemon.inc b/packages/lemon/lemon.inc index 9dcadbd674..7742fb8118 100644 --- a/packages/lemon/lemon.inc +++ b/packages/lemon/lemon.inc @@ -6,6 +6,7 @@ SECTION = "devel" SRC_URI = "http://www.sqlite.org/sqlite-${PV}.tar.gz \ file://lemon.1" + S = "${WORKDIR}/sqlite-${PV}/tool" do_compile() { diff --git a/packages/lemon/lemon_3.3.5.bb b/packages/lemon/lemon_3.3.5.bb deleted file mode 100644 index b057360010..0000000000 --- a/packages/lemon/lemon_3.3.5.bb +++ /dev/null @@ -1,10 +0,0 @@ -require lemon.inc - -do_install() { - install -d ${D}${bindir} - install -m 0755 lemon ${D}${bindir}/ - install -d ${D}${datadir}/lemon - install -m 0644 lempar.c ${D}${datadir}/lemon/ - install -d ${D}${mandir}/man1 - install -m 0644 ${WORKDIR}/lemon.1 ${D}${mandir}/man1/ -} diff --git a/packages/lemon/lemon_3.5.4.bb b/packages/lemon/lemon_3.5.4.bb new file mode 100644 index 0000000000..4a7e5e77f0 --- /dev/null +++ b/packages/lemon/lemon_3.5.4.bb @@ -0,0 +1,11 @@ +require lemon.inc + +PR = "r0" + +do_install() { + install -d ${D}${bindir} + install -m 0755 lemon ${D}${bindir} + install -m 0644 lempar.c ${D}${bindir} + install -d ${D}${mandir}/man1 + install -m 0644 ${WORKDIR}/lemon.1 ${D}${mandir}/man1/ +} -- cgit v1.2.3 From 63dc1c82b4c327bd78a38e280e96ebb42b7c4b0b Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Mon, 25 Feb 2008 04:28:19 +0000 Subject: re2c: new recipie, version 0.13.1. close oebug 3856. --- packages/re2c/.mtn2git_empty | 0 packages/re2c/re2c-native_0.13.1.bb | 5 +++++ packages/re2c/re2c.inc | 12 ++++++++++++ packages/re2c/re2c_0.13.1.bb | 3 +++ 4 files changed, 20 insertions(+) create mode 100644 packages/re2c/.mtn2git_empty create mode 100644 packages/re2c/re2c-native_0.13.1.bb create mode 100644 packages/re2c/re2c.inc create mode 100644 packages/re2c/re2c_0.13.1.bb diff --git a/packages/re2c/.mtn2git_empty b/packages/re2c/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/re2c/re2c-native_0.13.1.bb b/packages/re2c/re2c-native_0.13.1.bb new file mode 100644 index 0000000000..fb7e3df626 --- /dev/null +++ b/packages/re2c/re2c-native_0.13.1.bb @@ -0,0 +1,5 @@ +require re2c.inc + +PR = "r0" + +inherit native diff --git a/packages/re2c/re2c.inc b/packages/re2c/re2c.inc new file mode 100644 index 0000000000..730059e526 --- /dev/null +++ b/packages/re2c/re2c.inc @@ -0,0 +1,12 @@ +DESCRIPTION = "Tool for writing very fast and very flexible scanners" +HOMEPAGE = "http://re2c.sourceforge.net/" +AUTHOR = "Marcus Börger helly@users.sourceforge.net" +SECTION = "devel" +PRIORITY = "optional" +LICENSE = "PD" + +SRC_URI = "${SOURCEFORGE_MIRROR}/re2c/re2c-${PV}.tar.gz" + +S = "${WORKDIR}/re2c-${PV}" + +inherit autotools diff --git a/packages/re2c/re2c_0.13.1.bb b/packages/re2c/re2c_0.13.1.bb new file mode 100644 index 0000000000..5846dc4bf1 --- /dev/null +++ b/packages/re2c/re2c_0.13.1.bb @@ -0,0 +1,3 @@ +require re2c.inc + +PR = "r0" -- cgit v1.2.3 From bf97fc4b3502cd5f42213fccb35be2b0f5d5af0f Mon Sep 17 00:00:00 2001 From: Junqian Gordon Xu Date: Mon, 25 Feb 2008 05:09:03 +0000 Subject: netsurf: new recipie. close oebug 3857. --- packages/netsurf/.mtn2git_empty | 0 packages/netsurf/files/.mtn2git_empty | 0 packages/netsurf/files/netsurf.desktop | 10 ++++++++ packages/netsurf/netsurf_svn.bb | 43 ++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 packages/netsurf/.mtn2git_empty create mode 100644 packages/netsurf/files/.mtn2git_empty create mode 100644 packages/netsurf/files/netsurf.desktop create mode 100644 packages/netsurf/netsurf_svn.bb diff --git a/packages/netsurf/.mtn2git_empty b/packages/netsurf/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/netsurf/files/.mtn2git_empty b/packages/netsurf/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/netsurf/files/netsurf.desktop b/packages/netsurf/files/netsurf.desktop new file mode 100644 index 0000000000..4188d3019d --- /dev/null +++ b/packages/netsurf/files/netsurf.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Name=NetSurf +Comment=NetSurf Web Browser +GenericName=Web Browser +Icon=netsurf +Exec=netsurf +Terminal=false +StartupNotify=false +Categories=Network;WebBrowser; diff --git a/packages/netsurf/netsurf_svn.bb b/packages/netsurf/netsurf_svn.bb new file mode 100644 index 0000000000..4766a20297 --- /dev/null +++ b/packages/netsurf/netsurf_svn.bb @@ -0,0 +1,43 @@ +DESCRIPTION = "Lightweight web browser capable of handling many of the \ +web standards in use today." +HOMEPAGE = "http://www.netsurf-browser.org/" +SECTION = "x11/network" +LICENSE = "GPLv2" +PV = "1.1+svn${SRCDATE}" +PR = "r0" + +SRC_URI = "svn://svn.netsurf-browser.org/trunk;module=netsurf \ + file://netsurf.desktop" +S = "${WORKDIR}/netsurf" + +DEPENDS = "gtk+ (>=2.8) lemon-native re2c-native libxml2 librsvg jpeg \ + libmng curl openssl libglade (>=2.0)" + +do_compile() { + make -f Makefile.unix +} + +do_install() { + install -d ${D}/${bindir} + install -d ${D}/${libdir}/netsurf + install -d ${D}/${datadir}/netsurf + install -d ${D}/${datadir}/applications + install -d ${D}/${datadir}/pixmaps + install -m 0755 nsgtk ${D}/${libdir}/netsurf + install -m 0644 gtk/res/*.css ${D}/${datadir}/netsurf + install -m 0644 gtk/res/ca-bundle.txt ${D}/${datadir}/netsurf + install -m 0644 gtk/res/netsurf.glade ${D}/${datadir}/netsurf + install -m 0644 gtk/res/netsurf-logo.png ${D}/${datadir}/netsurf + install -m 0644 gtk/res/netsurf.xpm ${D}/${datadir}/netsurf + install -m 0644 gtk/res/throbber.gif ${D}/${datadir}/netsurf + install -m 0644 gtk/res/messages ${D}/${datadir}/netsurf + install -m 0644 gtk/res/netsurf.xpm ${D}/${datadir}/pixmaps + install -m 0644 ${WORKDIR}/netsurf.desktop ${D}/${datadir}/applications + cat >${D}/${bindir}/netsurf < Date: Mon, 25 Feb 2008 10:20:51 +0000 Subject: djvulibre: fix spelling mistake in SRC_URI. Closes 3871. --- packages/djvulibre/djvulibre_3.5.20.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/djvulibre/djvulibre_3.5.20.bb b/packages/djvulibre/djvulibre_3.5.20.bb index 8a90efe85c..386eccc6cb 100644 --- a/packages/djvulibre/djvulibre_3.5.20.bb +++ b/packages/djvulibre/djvulibre_3.5.20.bb @@ -3,7 +3,7 @@ LICENSE = "GPL" DEPENDS = "jpeg libpng tiff" PR = "r1" -SRC_URI = "http://{SOURCEFORGE_MIRROR}/djvu/djvulibre-${PV}.tar.gz \ +SRC_URI = "http://${SOURCEFORGE_MIRROR}/djvu/djvulibre-${PV}.tar.gz \ file://fix-cross-configure.patch;patch=1" inherit qt4x11 autotools pkgconfig -- cgit v1.2.3 From a82af50b09838e2e7b4229c520c3248066140e5d Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Mon, 25 Feb 2008 10:26:11 +0000 Subject: wlan-ng-modules: follow upstream reshuffling of older sources into "older" directory. Fixes 3867. --- packages/wlan-ng/wlan-ng-modules_0.2.1-pre26.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wlan-ng/wlan-ng-modules_0.2.1-pre26.bb b/packages/wlan-ng/wlan-ng-modules_0.2.1-pre26.bb index 60b29999ef..d9597febe4 100644 --- a/packages/wlan-ng/wlan-ng-modules_0.2.1-pre26.bb +++ b/packages/wlan-ng/wlan-ng-modules_0.2.1-pre26.bb @@ -6,7 +6,7 @@ RRECOMMENDS = "wlan-ng-utils" LICENSE = "GPL" PR = "r2" -SRC_URI = "ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-${PV}.tar.bz2 \ +SRC_URI = "ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/older/linux-wlan-ng-${PV}.tar.bz2 \ file://no-compat.patch;patch=1 \ file://only-the-modules.patch;patch=1 \ file://config.in" -- cgit v1.2.3 From 63372783a1663e78502dbd241d817cd4ba9efc9f Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Mon, 25 Feb 2008 15:31:30 +0000 Subject: kexec-tools-static: fix FILES applied changes from 2c3a38874a4f6692c855ed4f099954ecf8bcd8b3 through 7ab0c406df80db3fa391ee33a803bc653763cafb --- packages/kexec/kexec-tools-static_1.101.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/kexec/kexec-tools-static_1.101.bb b/packages/kexec/kexec-tools-static_1.101.bb index 21c212c2db..5fa51b2e70 100644 --- a/packages/kexec/kexec-tools-static_1.101.bb +++ b/packages/kexec/kexec-tools-static_1.101.bb @@ -1,7 +1,7 @@ # the binaries are statical linked against klibc require kexec-tools.inc -PR = "r2" +PR = "r3" DEPENDS = "klibc" SRC_URI += "file://kexec-klibc.patch;patch=1" @@ -18,6 +18,6 @@ export LDFLAGS="" PACKAGES =+ "kexec-static kdump-static" -FILES_kexec-klibc = "${sbindir}/kexec" -FILES_kdump-klibc = "${sbindir}/kdump" +FILES_kexec-static = "${sbindir}/kexec" +FILES_kdump-static = "${sbindir}/kdump" -- cgit v1.2.3 From 2c8312853e3613d00057dfff29d18c761b8d4fd5 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Mon, 25 Feb 2008 22:57:36 +0000 Subject: mpc83x3e-rdb machines: Use ?= for virtual/kernel so it can be user-configured. --- conf/machine/mpc8313e-rdb.conf | 4 ++-- conf/machine/mpc8323e-rdb.conf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/machine/mpc8313e-rdb.conf b/conf/machine/mpc8313e-rdb.conf index a43f621406..31f13b00b6 100644 --- a/conf/machine/mpc8313e-rdb.conf +++ b/conf/machine/mpc8313e-rdb.conf @@ -5,8 +5,8 @@ TARGET_ARCH = "powerpc" PACKAGE_EXTRA_ARCHS = "all ${MACHINE} ppc ppce300c3" -PREFERRED_PROVIDER_virtual/kernel = "linux" -PREFERRED_VERSION_u-boot = "git" +PREFERRED_PROVIDER_virtual/kernel ?= "linux" +PREFERRED_VERSION_u-boot ?= "git" MACHINE_FEATURES = "kernel26 usbhost ext2" diff --git a/conf/machine/mpc8323e-rdb.conf b/conf/machine/mpc8323e-rdb.conf index 38f3b1930c..db1a7ccf16 100644 --- a/conf/machine/mpc8323e-rdb.conf +++ b/conf/machine/mpc8323e-rdb.conf @@ -6,7 +6,7 @@ TARGET_ARCH = "powerpc" TARGET_FPU ?= "soft" PACKAGE_EXTRA_ARCHS = "all ${MACHINE} ppc ppce300c2" -PREFERRED_PROVIDER_virtual/kernel = "linux" +PREFERRED_PROVIDER_virtual/kernel ?= "linux" MACHINE_FEATURES = "kernel26 usbhost pci ext2 uboot" -- cgit v1.2.3 From 64eb8308d57862983828fbadedf85e7bb59e36c7 Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Mon, 25 Feb 2008 23:18:04 +0000 Subject: Export PATH in udev network.sh. * udevd does clearenv(). Without PATH, ifup/ifdown does not work properly. * Exporting default shell PATH fixes it. --- packages/udev/files/network.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/udev/files/network.sh b/packages/udev/files/network.sh index 5016328df4..182c26d86a 100644 --- a/packages/udev/files/network.sh +++ b/packages/udev/files/network.sh @@ -1,5 +1,8 @@ #!/bin/sh +# udevd does clearenv(). Export shell PATH to children. +export PATH + # Do not run when pcmcia-cs is installed test -x /sbin/cardctl && exit 0 -- cgit v1.2.3 From 1288e80ac1b58b6c14a6bfb8499cc1dec7e85249 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Tue, 26 Feb 2008 00:48:02 +0000 Subject: klibc: make klibc compile with eabi uclibc --- packages/klibc/klibc-common.inc | 4 ++-- packages/klibc/klibc-utils-static_1.5.bb | 2 +- packages/klibc/klibc_1.5.bb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/klibc/klibc-common.inc b/packages/klibc/klibc-common.inc index 87f806dfe2..76e393796a 100644 --- a/packages/klibc/klibc-common.inc +++ b/packages/klibc/klibc-common.inc @@ -16,8 +16,8 @@ KLIBC_ARCH_mipsel = 'mips' # could be fixed, but for the moment: ARM_INSTRUCTION_SET = "arm" -SRC_URI_append_linux-gnueabi = "\ - file://klibc-config-eabi.patch;patch=1" +SRC_URI_append_linux-gnueabi = "file://klibc-config-eabi.patch;patch=1" +SRC_URI_append_linux-uclibcgnueabi = "file://klibc-config-eabi.patch;patch=1" EXTRA_OEMAKE = "'KLIBCARCH=${KLIBC_ARCH}' \ 'CROSS_COMPILE=${TARGET_PREFIX}' \ diff --git a/packages/klibc/klibc-utils-static_1.5.bb b/packages/klibc/klibc-utils-static_1.5.bb index cac8c1c67f..f9c9923212 100644 --- a/packages/klibc/klibc-utils-static_1.5.bb +++ b/packages/klibc/klibc-utils-static_1.5.bb @@ -1,6 +1,6 @@ require klibc-common.inc -PR = "r5" +PR = "r6" # We only want the static utils. klibc build both. So we install only what we want. diff --git a/packages/klibc/klibc_1.5.bb b/packages/klibc/klibc_1.5.bb index 524437f9f9..71eed9f8da 100644 --- a/packages/klibc/klibc_1.5.bb +++ b/packages/klibc/klibc_1.5.bb @@ -1,2 +1,2 @@ require klibc.inc -PR = "r3" +PR = "r4" -- cgit v1.2.3 From 602390def86f581928680f00814cb8f2bd7ac5b9 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 26 Feb 2008 12:36:51 +0000 Subject: s3c2410-utils: rename to s3c24xx-utils --- packages/s3c2410-utils/.mtn2git_empty | 0 .../s3c2410-utils/s3c2410-boot-usb-native_svn.bb | 31 --------------------- packages/s3c2410-utils/sjf2410-linux-native_svn.bb | 32 ---------------------- packages/s3c24xx-utils/.mtn2git_empty | 0 .../s3c24xx-utils/s3c2410-boot-usb-native_svn.bb | 31 +++++++++++++++++++++ packages/s3c24xx-utils/sjf2410-linux-native_svn.bb | 32 ++++++++++++++++++++++ 6 files changed, 63 insertions(+), 63 deletions(-) delete mode 100644 packages/s3c2410-utils/.mtn2git_empty delete mode 100644 packages/s3c2410-utils/s3c2410-boot-usb-native_svn.bb delete mode 100644 packages/s3c2410-utils/sjf2410-linux-native_svn.bb create mode 100644 packages/s3c24xx-utils/.mtn2git_empty create mode 100644 packages/s3c24xx-utils/s3c2410-boot-usb-native_svn.bb create mode 100644 packages/s3c24xx-utils/sjf2410-linux-native_svn.bb diff --git a/packages/s3c2410-utils/.mtn2git_empty b/packages/s3c2410-utils/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/s3c2410-utils/s3c2410-boot-usb-native_svn.bb b/packages/s3c2410-utils/s3c2410-boot-usb-native_svn.bb deleted file mode 100644 index c7b89647f5..0000000000 --- a/packages/s3c2410-utils/s3c2410-boot-usb-native_svn.bb +++ /dev/null @@ -1,31 +0,0 @@ -DESCRIPTION = "Boots a S3C2410 device with a user supplied kernel zImage" -DEPENDS = "libusb-native" -SECTION = "devel" -AUTHOR = "Harald Welte" -LICENSE = "GPL" -PV = "0.1.0+svn${SRCDATE}" -PR = "r0" - -SRC_URI = "svn://svn.openmoko.org/trunk/src/host/;module=s3c2410_boot_usb;proto=https" -S = "${WORKDIR}/s3c2410_boot_usb" - -inherit native - -do_compile() { - ${CC} ${CFLAGS} ${LDFLAGS} -lusb -o s3c2410-boot-usb boot_usb.c -} - -do_deploy() { - install -d ${DEPLOY_DIR_IMAGE} - install -m 0755 s3c2410-boot-usb ${DEPLOY_DIR_IMAGE} -} - -do_stage() { - : -} - -do_install() { - : -} - -addtask deploy before do_build after do_compile diff --git a/packages/s3c2410-utils/sjf2410-linux-native_svn.bb b/packages/s3c2410-utils/sjf2410-linux-native_svn.bb deleted file mode 100644 index 60cce4a3e2..0000000000 --- a/packages/s3c2410-utils/sjf2410-linux-native_svn.bb +++ /dev/null @@ -1,32 +0,0 @@ -DESCRIPTION = "JTAG utility to interface w/ a S3C2410 device" -SECTION = "devel" -AUTHOR = "Harald Welte" -LICENSE = "GPL" -PV = "0.1+svn${SRCDATE}" -PR = "r0" - -SRC_URI = "svn://svn.openmoko.org/trunk/src/host/;module=sjf2410-linux;proto=https" -S = "${WORKDIR}/sjf2410-linux" - -inherit native - -CFLAGS += "-DLINUX_PPDEV" - -do_compile() { - oe_runmake -} - -do_deploy() { - install -d ${DEPLOY_DIR_IMAGE} - install -m 0755 sjf2410 ${DEPLOY_DIR_IMAGE}/sjf2410 -} - -do_stage() { - : -} - -do_install() { - : -} - -addtask deploy before do_package after do_install diff --git a/packages/s3c24xx-utils/.mtn2git_empty b/packages/s3c24xx-utils/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/s3c24xx-utils/s3c2410-boot-usb-native_svn.bb b/packages/s3c24xx-utils/s3c2410-boot-usb-native_svn.bb new file mode 100644 index 0000000000..c7b89647f5 --- /dev/null +++ b/packages/s3c24xx-utils/s3c2410-boot-usb-native_svn.bb @@ -0,0 +1,31 @@ +DESCRIPTION = "Boots a S3C2410 device with a user supplied kernel zImage" +DEPENDS = "libusb-native" +SECTION = "devel" +AUTHOR = "Harald Welte" +LICENSE = "GPL" +PV = "0.1.0+svn${SRCDATE}" +PR = "r0" + +SRC_URI = "svn://svn.openmoko.org/trunk/src/host/;module=s3c2410_boot_usb;proto=https" +S = "${WORKDIR}/s3c2410_boot_usb" + +inherit native + +do_compile() { + ${CC} ${CFLAGS} ${LDFLAGS} -lusb -o s3c2410-boot-usb boot_usb.c +} + +do_deploy() { + install -d ${DEPLOY_DIR_IMAGE} + install -m 0755 s3c2410-boot-usb ${DEPLOY_DIR_IMAGE} +} + +do_stage() { + : +} + +do_install() { + : +} + +addtask deploy before do_build after do_compile diff --git a/packages/s3c24xx-utils/sjf2410-linux-native_svn.bb b/packages/s3c24xx-utils/sjf2410-linux-native_svn.bb new file mode 100644 index 0000000000..60cce4a3e2 --- /dev/null +++ b/packages/s3c24xx-utils/sjf2410-linux-native_svn.bb @@ -0,0 +1,32 @@ +DESCRIPTION = "JTAG utility to interface w/ a S3C2410 device" +SECTION = "devel" +AUTHOR = "Harald Welte" +LICENSE = "GPL" +PV = "0.1+svn${SRCDATE}" +PR = "r0" + +SRC_URI = "svn://svn.openmoko.org/trunk/src/host/;module=sjf2410-linux;proto=https" +S = "${WORKDIR}/sjf2410-linux" + +inherit native + +CFLAGS += "-DLINUX_PPDEV" + +do_compile() { + oe_runmake +} + +do_deploy() { + install -d ${DEPLOY_DIR_IMAGE} + install -m 0755 sjf2410 ${DEPLOY_DIR_IMAGE}/sjf2410 +} + +do_stage() { + : +} + +do_install() { + : +} + +addtask deploy before do_package after do_install -- cgit v1.2.3 From cf20be0e809f4452b6098ad028635c4b3c70a089 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 26 Feb 2008 12:52:34 +0000 Subject: add gpio, a userspace utility to tweak the GPIOs on the s3c24xx platform --- conf/distro/include/sane-srcrevs.inc | 1 + packages/s3c24xx-utils/gpio_svn.bb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 packages/s3c24xx-utils/gpio_svn.bb diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 1c6d81023a..2ff0809324 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -30,6 +30,7 @@ SRCREV_pn-fstests ?= "204" SRCREV_pn-gconf-dbus ?= "641" SRCREV_pn-gnuradio ?= "6377" SRCREV_pn-gpe-contacts ?= "9312" +SRCREV_pn-gpio ?= "4112" SRCREV_pn-gsm0710muxd ?= "77" SRCREV_pn-gtkhtml2 ?= "1158" SRCREV_pn-gypsy ?= "56" diff --git a/packages/s3c24xx-utils/gpio_svn.bb b/packages/s3c24xx-utils/gpio_svn.bb new file mode 100644 index 0000000000..263161aa5d --- /dev/null +++ b/packages/s3c24xx-utils/gpio_svn.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "A user-space tool to show and modify the state of GPIOs on the S3c24xx platform" +SECTION = "console/utils" +LICENSE = "GPL" +PV = "1.0+svn${SRCDATE}" +PR = "r1" + +SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gpio;proto=http" +S = "${WORKDIR}/gpio" + +do_compile() { + ${CC} ${CFLAGS} ${LDFLAGS} -static -o gpio gpio.c +} + +do_install() { + install -d ${D}${sbindir} + install -m 0755 gpio ${D}${sbindir} +} -- cgit v1.2.3 From 999226341f32a3237d4efe6b74cebbb779d3e43e Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 26 Feb 2008 13:21:59 +0000 Subject: python-dbus: add dependency to dbus-glib (thanks Emdete) --- packages/python/python-dbus_0.82.4.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/python/python-dbus_0.82.4.bb b/packages/python/python-dbus_0.82.4.bb index 9f00c64701..c17f1c766b 100644 --- a/packages/python/python-dbus_0.82.4.bb +++ b/packages/python/python-dbus_0.82.4.bb @@ -2,9 +2,9 @@ DESCRIPTION = "Python bindings for DBus, a socket-based message bus system for i SECTION = "devel/python" HOMEPAGE = "http://www.freedesktop.org/Software/dbus" LICENSE = "MIT" -DEPENDS = "expat glib-2.0 virtual/libintl python-pyrex-native python" -RDEPENDS = "dbus python-threading python-io python-stringold python-logging" -PR = "ml0" +DEPENDS = "expat dbus dbus-glib virtual/libintl python-pyrex-native" +RDEPENDS = "python-threading python-io python-stringold python-logging" +PR = "ml1" SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz" S = "${WORKDIR}/dbus-python-${PV}" -- cgit v1.2.3 From 742fc8adde250d069d21bac9c663c25b1629444b Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 26 Feb 2008 14:50:00 +0000 Subject: naming tweaks for gpio on s3c24xx --- packages/s3c24xx-utils/gpio_svn.bb | 17 ----------------- packages/s3c24xx-utils/s3c24xx-gpio_svn.bb | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 packages/s3c24xx-utils/gpio_svn.bb create mode 100644 packages/s3c24xx-utils/s3c24xx-gpio_svn.bb diff --git a/packages/s3c24xx-utils/gpio_svn.bb b/packages/s3c24xx-utils/gpio_svn.bb deleted file mode 100644 index 263161aa5d..0000000000 --- a/packages/s3c24xx-utils/gpio_svn.bb +++ /dev/null @@ -1,17 +0,0 @@ -DESCRIPTION = "A user-space tool to show and modify the state of GPIOs on the S3c24xx platform" -SECTION = "console/utils" -LICENSE = "GPL" -PV = "1.0+svn${SRCDATE}" -PR = "r1" - -SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gpio;proto=http" -S = "${WORKDIR}/gpio" - -do_compile() { - ${CC} ${CFLAGS} ${LDFLAGS} -static -o gpio gpio.c -} - -do_install() { - install -d ${D}${sbindir} - install -m 0755 gpio ${D}${sbindir} -} diff --git a/packages/s3c24xx-utils/s3c24xx-gpio_svn.bb b/packages/s3c24xx-utils/s3c24xx-gpio_svn.bb new file mode 100644 index 0000000000..085339a9c1 --- /dev/null +++ b/packages/s3c24xx-utils/s3c24xx-gpio_svn.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "A user-space tool to show and modify the state of GPIOs on the S3c24xx platform" +SECTION = "console/utils" +LICENSE = "GPL" +PV = "1.0+svn${SRCDATE}" +PR = "r0" + +SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gpio;proto=http" +S = "${WORKDIR}/gpio" + +do_compile() { + ${CC} ${CFLAGS} ${LDFLAGS} -static -o ${PN} gpio.c +} + +do_install() { + install -d ${D}${sbindir} + install -m 0755 ${PN} ${D}${sbindir} +} -- cgit v1.2.3 From 271935c586a9af040c2fa1ecaacf54c9fcd5e0a2 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 26 Feb 2008 16:17:30 +0000 Subject: u-boot-openmoko_1.3.1+git+svn.bb : update svn and make it generate gta02v5 u-boots --- packages/u-boot/u-boot-openmoko_1.3.1+git+svn.bb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/u-boot/u-boot-openmoko_1.3.1+git+svn.bb b/packages/u-boot/u-boot-openmoko_1.3.1+git+svn.bb index 7a9800f94a..737cf8ef0c 100644 --- a/packages/u-boot/u-boot-openmoko_1.3.1+git+svn.bb +++ b/packages/u-boot/u-boot-openmoko_1.3.1+git+svn.bb @@ -4,12 +4,12 @@ LICENSE = "GPL" SECTION = "bootloader" PRIORITY = "optional" -UBOOT_UPSTREAM_REV = "0ec595243dc99edcd248bbcfbfd5a1dc860bde89" -UBOOT_OPENMOKO_REV = "3817" -UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4 gta02v2 gta02v3 gta02v4" +UBOOT_UPSTREAM_REV = "10bbb38a402a2faf18858c451bcdc63d45888e6e" +UBOOT_OPENMOKO_REV = "4118" +UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4 gta02v2 gta02v3 gta02v4 gta02v5" LOCALVERSION = "+git${UBOOT_UPSTREAM_REV}+svn${UBOOT_OPENMOKO_REV}" PV = "1.3.1${LOCALVERSION}" -PR = "r1" +PR = "r3" PROVIDES = "virtual/bootloader" S = "${WORKDIR}/git" @@ -18,11 +18,11 @@ SRC_URI = "\ git://www.denx.de/git/u-boot.git;protocol=git;tag=${UBOOT_UPSTREAM_REV} \ svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;rev=${UBOOT_OPENMOKO_REV};proto=http \ file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \ - file://makefile-no-dirafter.patch;patch=1 \ - file://fix-data-abort-from-sd-ombug799.patch;patch=1 \ +# file://makefile-no-dirafter.patch;patch=1 \ +# file://fix-data-abort-from-sd-ombug799.patch;patch=1 \ " -EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}" +EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}" TARGET_LDFLAGS = "" do_quilt() { -- cgit v1.2.3 From bda2ee570244a833a9fa5981b5ab936eb1f7fd26 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 26 Feb 2008 17:06:14 +0000 Subject: gsmd : flip an extra bit on gta02 machines that stops hideous noise in sound system --- packages/gsm/files/default | 1 + packages/gsm/files/gsmd | 2 ++ packages/gsm/gsmd.inc | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/gsm/files/default b/packages/gsm/files/default index 467bd339eb..cf36460fac 100644 --- a/packages/gsm/files/default +++ b/packages/gsm/files/default @@ -13,6 +13,7 @@ case `machine_id` in GSM_RES="/sys/bus/platform/devices/neo1973-pm-gsm.0/reset" fi GSM_DEV="/dev/ttySAC0" + GSM_DL="/sys/devices/platform/neo1973-pm-gsm.0/download" ;; "htc_apache"|"htc_blueangel"|"htc_universal") GSMD_OPTS="-s 115200 -F" diff --git a/packages/gsm/files/gsmd b/packages/gsm/files/gsmd index 9257b901ad..72f66a17ad 100644 --- a/packages/gsm/files/gsmd +++ b/packages/gsm/files/gsmd @@ -13,6 +13,8 @@ PATH=/bin:/usr/bin:/sbin:/usr/sbin case "$1" in start) + [ -n "$GSM_DL" ] && echo "1" >$GSM_DL; + [ -n "$GSM_POW" ] && ( echo "0" >$GSM_POW; sleep 1 ) [ -n "$GSM_POW" ] && ( echo "1" >$GSM_POW; sleep 1 ) [ -n "$GSM_RES" ] && ( echo "1" >$GSM_RES; sleep 1 ) diff --git a/packages/gsm/gsmd.inc b/packages/gsm/gsmd.inc index a6b6fb7a6a..5e47847d74 100644 --- a/packages/gsm/gsmd.inc +++ b/packages/gsm/gsmd.inc @@ -5,7 +5,7 @@ SECTION = "libs/gsm" PROVIDES += "gsmd" RPROVIDES_${PN} = "libgsmd0 libgsmd gsmd gsmd-devel" PV = "0.1+svnr${SRCREV}" -PR = "r41" +PR = "r42" SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gsm;proto=http \ file://gsmd \ -- cgit v1.2.3 From 5f4deee606d344af8e8aa7f0b3e07f64e7574b6c Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 26 Feb 2008 17:53:29 +0000 Subject: seppuku.bbclass/tinderclient.bbclass: Use exec_func, not exec_task for clean function --- classes/seppuku.bbclass | 2 +- classes/tinderclient.bbclass | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/seppuku.bbclass b/classes/seppuku.bbclass index 834bee34b4..2e097a812e 100644 --- a/classes/seppuku.bbclass +++ b/classes/seppuku.bbclass @@ -303,7 +303,7 @@ python seppuku_eventhandler() { if name == "PkgFailed": if not bb.data.getVar('SEPPUKU_AUTOBUILD', data, True) == "0": - build.exec_task('do_clean', data) + build.exec_func('do_clean', data) elif name == "TaskFailed": cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) diff --git a/classes/tinderclient.bbclass b/classes/tinderclient.bbclass index bc004efb26..0b7fc1d843 100644 --- a/classes/tinderclient.bbclass +++ b/classes/tinderclient.bbclass @@ -328,7 +328,7 @@ def tinder_do_tinder_report(event): log += "<--- TINDERBOX Package %s done (SUCCESS)\n" % data.getVar('PF', event.data, True) elif name == "PkgFailed": if not data.getVar('TINDER_AUTOBUILD', event.data, True) == "0": - build.exec_task('do_clean', event.data) + build.exec_func('do_clean', event.data) log += "<--- TINDERBOX Package %s failed (FAILURE)\n" % data.getVar('PF', event.data, True) status = 200 # remember the failure for the -k case -- cgit v1.2.3 From b9c6764ba5a7f2d439088f42d7d2b82403f2e2b0 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 26 Feb 2008 17:54:55 +0000 Subject: rm_work.bbclass: Add event handler to take care of removing stamps when trying to rebuild packages after sources have been removed. Needs bitbake 1.8 svn to have any effect. --- classes/rm_work.bbclass | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/classes/rm_work.bbclass b/classes/rm_work.bbclass index 4efd39c557..97de5e2774 100644 --- a/classes/rm_work.bbclass +++ b/classes/rm_work.bbclass @@ -25,3 +25,23 @@ do_rm_work_all () { } do_rm_work_all[recrdeptask] = "do_rm_work" addtask rm_work_all after do_rm_work + + +addhandler rmwork_stampfixing_eventhandler +python rmwork_stampfixing_eventhandler() { + from bb.event import getName + import os + + if getName(e) == "StampUpdate": + for (fn, task) in e.targets: + if task == 'rm_work_all': + continue + stamp = "%s.do_rm_work" % e.stampPrefix[fn] + if os.path.exists(stamp): + dir = "%s.*" % e.stampPrefix[fn] + bb.note("Removing stamps: " + dir) + os.system('rm -f '+ dir) + + return NotHandled +} + -- cgit v1.2.3 From 600a590fb7459be81ee6bdb21fbb57dedd44af24 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 26 Feb 2008 17:57:51 +0000 Subject: base.bbclass: Add code to make 'rebuild' continue to work after changes in bitbake. Bitbake 1.8.10 users should be unaffected, bitbake 1.8.11 users will need the latest svn stable branch bitbake. Only the rebuild task is affected by the changes --- classes/base.bbclass | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/classes/base.bbclass b/classes/base.bbclass index 2f74104185..089cd5acd3 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -424,13 +424,21 @@ python base_do_clean() { os.system('rm -f '+ dir) } +#Uncomment this for bitbake 1.8.12 +#addtask rebuild after do_${BB_DEFAULT_TASK} addtask rebuild do_rebuild[dirs] = "${TOPDIR}" do_rebuild[nostamp] = "1" python base_do_rebuild() { """rebuild a package""" - bb.build.exec_task('do_clean', d) - bb.build.exec_task('do_' + bb.data.getVar('BB_DEFAULT_TASK', d, 1), d) + from bb import __version__ + try: + from distutils.version import LooseVersion + except ImportError: + def LooseVersion(v): print "WARNING: sanity.bbclass can't compare versions without python-distutils"; return 1 + if (LooseVersion(__version__) < LooseVersion('1.8.11')): + bb.build.exec_func('do_clean', d) + bb.build.exec_task('do_' + bb.data.getVar('BB_DEFAULT_TASK', d, 1), d) } addtask mrproper @@ -442,7 +450,7 @@ python base_do_mrproper() { if dir == '/': bb.build.FuncFailed("wrong DATADIR") bb.debug(2, "removing " + dir) os.system('rm -rf ' + dir) - bb.build.exec_task('do_clean', d) + bb.build.exec_func('do_clean', d) } addtask fetch @@ -663,6 +671,17 @@ python base_eventhandler() { if pesteruser: bb.fatal('The following variable(s) were not set: %s\nPlease set them directly, or choose a MACHINE or DISTRO that sets them.' % ', '.join(pesteruser)) + # + # Handle removing stamps for 'rebuild' task + # + if name.startswith("StampUpdate"): + for (fn, task) in e.targets: + #print "%s %s" % (task, fn) + if task == "do_rebuild": + dir = "%s.*" % e.stampPrefix[fn] + bb.note("Removing stamps: " + dir) + os.system('rm -f '+ dir) + if not data in e.__dict__: return NotHandled @@ -900,7 +919,19 @@ def base_after_parse(d): return python () { + import bb + from bb import __version__ base_after_parse(d) + + # Remove this for bitbake 1.8.12 + try: + from distutils.version import LooseVersion + except ImportError: + def LooseVersion(v): print "WARNING: sanity.bbclass can't compare versions without python-distutils"; return 1 + if (LooseVersion(__version__) >= LooseVersion('1.8.11')): + deps = bb.data.getVarFlag('do_rebuild', 'deps', d) or [] + deps.append('do_' + bb.data.getVar('BB_DEFAULT_TASK', d, 1)) + bb.data.setVarFlag('do_rebuild', 'deps', deps, d) } def check_app_exists(app, d): -- cgit v1.2.3 From 56ad5ad7fe0c432cbdbcfaed2b4331ce9738fb9f Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 26 Feb 2008 17:58:17 +0000 Subject: pulseaudio* : fix the adding of pulse to audio group, busybox does this arse about tit. --- packages/pulseaudio/pulse.inc | 2 +- packages/pulseaudio/pulseaudio_0.9.6.bb | 2 +- packages/pulseaudio/pulseaudio_0.9.9.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/pulseaudio/pulse.inc b/packages/pulseaudio/pulse.inc index 7f7f205613..4b13980cc4 100644 --- a/packages/pulseaudio/pulse.inc +++ b/packages/pulseaudio/pulse.inc @@ -84,7 +84,7 @@ pkg_postinst_${PN}-server() { grep -q pulse: /etc/passwd || \ adduser --disabled-password --home=/var/run/pulse --system \ --ingroup pulse --no-create-home -g "Pulse audio daemon" pulse - adduser pulse audio + addgroup pulse audio /etc/init.d/populate-volatile.sh update } diff --git a/packages/pulseaudio/pulseaudio_0.9.6.bb b/packages/pulseaudio/pulseaudio_0.9.6.bb index aa07afe6fe..56b717aac7 100644 --- a/packages/pulseaudio/pulseaudio_0.9.6.bb +++ b/packages/pulseaudio/pulseaudio_0.9.6.bb @@ -1,4 +1,4 @@ require pulse.inc -PR = "r6" +PR = "r7" diff --git a/packages/pulseaudio/pulseaudio_0.9.9.bb b/packages/pulseaudio/pulseaudio_0.9.9.bb index b884c27dd6..7e63b61eb3 100644 --- a/packages/pulseaudio/pulseaudio_0.9.9.bb +++ b/packages/pulseaudio/pulseaudio_0.9.9.bb @@ -8,7 +8,7 @@ SRC_URI += "\ file://fix-dbus-without-hal.patch;patch=1 \ " -PR = "r2" +PR = "r3" # problems w/ pulseaudio 0.9.9 atm: # 1.) needs libltdl >= 1.5.24 (yes, any older version will NOT work at runtime) -- cgit v1.2.3 From 71828c40ca752f56d0300862de3af91b0696eda1 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Tue, 26 Feb 2008 20:02:30 +0000 Subject: libzvbi: inherit from pkgconfig so that .pc is staged. --- packages/libzvbi/libzvbi_0.2.22.bb | 3 ++- packages/libzvbi/libzvbi_0.2.25.bb | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/libzvbi/libzvbi_0.2.22.bb b/packages/libzvbi/libzvbi_0.2.22.bb index 74e16c6239..a4ce1e55d5 100644 --- a/packages/libzvbi/libzvbi_0.2.22.bb +++ b/packages/libzvbi/libzvbi_0.2.22.bb @@ -5,11 +5,12 @@ HOMEPAGE = "http://zapping.sourceforge.net/ZVBI/index.html" LICENSE = "GPL" SECTION = "libs/multimedia" DEPENDS = "libpng" +PR = "r1" SRC_URI = "${SOURCEFORGE_MIRROR}/zapping/zvbi-${PV}.tar.bz2" S = "${WORKDIR}/zvbi-${PV}" -inherit autotools +inherit autotools pkgconfig do_stage() { autotools_stage_all diff --git a/packages/libzvbi/libzvbi_0.2.25.bb b/packages/libzvbi/libzvbi_0.2.25.bb index fe9fd1495c..9be7a7d42e 100644 --- a/packages/libzvbi/libzvbi_0.2.25.bb +++ b/packages/libzvbi/libzvbi_0.2.25.bb @@ -5,17 +5,16 @@ HOMEPAGE = "http://zapping.sourceforge.net/ZVBI/index.html" LICENSE = "GPL" SECTION = "libs/multimedia" DEPENDS = "libpng" -PR = "r0" +PR = "r1" SRC_URI = "${SOURCEFORGE_MIRROR}/zapping/zvbi-${PV}.tar.bz2" S = "${WORKDIR}/zvbi-${PV}" EXTRA_OECONF = "--without-x" -inherit autotools +inherit autotools pkgconfig do_stage() { autotools_stage_all } - -- cgit v1.2.3